Version 1.7.0-dev.2.0

svn merge -r 39791:40086 https://dart.googlecode.com/svn/branches/bleeding_edge trunk

git-svn-id: http://dart.googlecode.com/svn/trunk@40090 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/create_sdk.gyp b/create_sdk.gyp
index 59e157b..26b86d9 100644
--- a/create_sdk.gyp
+++ b/create_sdk.gyp
@@ -22,7 +22,7 @@
           'inputs': [
             '<!@(["python", "tools/list_files.py", "\\.dart$", "sdk/lib"])',
             '<!@(["python", "tools/list_files.py", "", '
-                '"sdk/lib/_internal/lib/preambles"])',
+                '"sdk/lib/_internal/compiler/js_lib/preambles"])',
             '<!@(["python", "tools/list_files.py", "", "sdk/bin"])',
             'tools/create_sdk.py',
             '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)dart<(EXECUTABLE_SUFFIX)',
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex
index fe9ef27..2d46d56 100644
--- a/docs/language/dartLangSpec.tex
+++ b/docs/language/dartLangSpec.tex
@@ -252,7 +252,7 @@
 
 Dart code is always single threaded. There is no shared-state concurrency in Dart. Concurrency is supported via actor-like entities called {\em isolates}.
 
-An isolate is a unit of concurrency. It has its own memory and its own thread of control. Isolates communicate by message passing (\ref{sendingMessages}). No state is ever shared between isolates. Isolates are created by spawning (\ref{spawningAnIsolate}).
+An isolate is a unit of concurrency. It has its own memory and its own thread of control. Isolates communicate by message passing (\ref{sendingMessages}). No state is ever shared between isolates. Isolates are created by spawning (\ref{spawningAnIsolate}). 
 
 
 \section{Errors and Warnings}
@@ -481,8 +481,8 @@
       type
     .
 
-{\bf functionBody:}`={\escapegrammar \gt}' expression `{\escapegrammar ;}';
-     block
+{\bf functionBody:} \ASYNC{}?  `={\escapegrammar \gt}' expression `{\escapegrammar ;}';
+     (\ASYNC{} $|$ \ASYNC* $|$ \SYNC*)? block
     .
 
 {\bf block:}
@@ -495,23 +495,33 @@
 
 All functions have a signature and a body. The signature describes the formal parameters of the function, and possibly its name and return type.  A function body is either:
 \begin{itemize}
-\item A block statement  (\ref{blocks}) containing the statements  (\ref{statements}) executed by the function. In this case, if the last statement of a function is not a return statement, the statement \code{\RETURN{};} is implicitly appended to the function body.
+\item A block statement  (\ref{blocks}) containing the statements  (\ref{statements}) executed by the function, optionally marked with one of the modifiers: \ASYNC, \ASYNC* or \SYNC*. In this case, if the last statement of a function is not a return statement (\ref{return}), the statement \code{\RETURN{};} is implicitly appended to the function body.
 
 \rationale{
-Because Dart is optionally typed, we cannot guarantee that a function that does not return a value will not be used in the context of an expression. Therefore, every function must return a value. A \RETURN{} without an expression returns \NULL{}. See further discussion in section \ref{return}.
+Because Dart is optionally typed, we cannot guarantee that a function that does not return a value will not be used in the context of an expression. Therefore, every function must return a value. A \RETURN{} without an expression returns \NULL{}. For generator functions, the situation is more subtle. See further discussion in section \ref{return}.
 }
 
 OR
-\item of the form   \code{=$>$ $e$} which is equivalent to a body of the form \code{\{\RETURN{} $e$;\}}.
+\item of the form   \code{=$>$ $e$} which is equivalent to a body of the form \code{\{\RETURN{} $e$;\}} or the form \code{\ASYNC{} =$>$ $e$} which is equivalent to a body of the form \code{\ASYNC{} \{\RETURN{} $e$;\}}. \rationale{The other modifiers do not apply here, because they apply only to generators, discussed below, and generators do not allow the form \code{\RETURN{} $e$}; values are added to the generated stream or iterable using \YIELD{} instead.}
+
 \end{itemize}
 
+A function is {\em asynchronous} if its body is marked with the \ASYNC{} or \ASYNC* modifier. Otherwise the function is {\em synchronous}. A function is a {\em generator} if its body is marked with the \SYNC* or \ASYNC* modifier.  
 
+\commentary{
+Whether a function is synchronous or asynchronous is orthogonal to whether it is a generator or not. Generator functions are a sugar for functions that produce collections in a systematic way, by lazily applying a function that {\em generates} individual elements of a collection. Dart provides such a sugar in both the synchronous case, where one returns an iterable, and in the asynchronous case, where one returns a stream. Dart also allows both synchronous and asynchronous functions that produce a single value. 
+}
 
-% A function has a formal parameter scope and a  body scope. The enclosing scope of a function's body scope is its formal parameter scope. The enclosing scope of the  formal parameter scope of a function is the enclosing scope of the function.
+It is a compile-time error if an \ASYNC, \ASYNC* or \SYNC* modifier is attached to the body of a setter or constructor.
 
-% The body of a function $f$ is processed within the body scope of $f$.
-%\rationale{This may seem obvious, but needs to be stated.}
-% \commentary{It follows from the above rules that the formal parameters of a function may be referenced within its body.  }
+\rationale{
+An asynchronous setter would be of little use, since setters can only be used in the context of an assignment (\ref{assignment}), and an assignment expression always evaluates to the value of the assignment's right hand side. If the setter actually did its work asynchronously, one might imagine that one would return a future that resolved to the assignment's right hand side after the setter did its work. However, this would require dynamic tests at every assignment, and so would be prohibitively expensive. 
+
+An asynchronous constructor would, by definition, never return an instance of the class it purports to construct, but instead return a future. Calling such a beast via \NEW{} would be very confusing. If you need to produce an object asynchronously, use a method.
+
+One could allow modifiers for factories. A factory for \code{Future} could be modified by \ASYNC{}, a factory for \code{Stream} could be modified by \ASYNC* and a factory for \code{Iterable} could be modified by \SYNC*. No other scenario makes sense because the object returned by the factory would be of the wrong type. This situation is very unusual so it is not worth making an exception to the general rule for constructors in order to allow it.
+}
+
 
 \subsection{Function Declarations}
 \label{functionDeclarations}
@@ -552,9 +562,9 @@
 
 Every function includes a {\em formal parameter list}, which consists of a list of required positional parameters (\ref{requiredFormals}), followed by any optional parameters (\ref{optionalFormals}). The optional parameters may be specified either as a set of named parameters or as a list of positional parameters, but not both.
 
-The formal parameter list of a function introduces a new scope known as the function`s {\em formal parameter scope}. The formal parameter scope of a function $f$  is enclosed in the scope where $f$ is declared.   Every formal parameter introduces a local variable into the formal parameter scope. However, the scope of a function's signature is the function's enclosing scope, not the formal parameter scope.
+The formal parameter list of a function introduces a new scope known as the function's {\em formal parameter scope}. The formal parameter scope of a function $f$  is enclosed in the scope where $f$ is declared.   Every formal parameter introduces a local variable into the formal parameter scope. However, the scope of a function's signature is the function's enclosing scope, not the formal parameter scope.
 
-The body of a function introduces a new scope known as the function`s {\em  body scope}. The body scope of a function $f$  is enclosed  in the scope introduced by the formal parameter scope of $f$.
+The body of a function introduces a new scope known as the function's {\em  body scope}. The body scope of a function $f$  is enclosed  in the scope introduced by the formal parameter scope of $f$.
 
 
 %The formal parameter scope of a function maps the name of each formal parameter $p$ to the value $p$ is bound to. 
@@ -822,7 +832,7 @@
 
 % not quite right. It should be ok to override a method that requires N parameters with one that requires M < N but accepts the others as optional.
 
-It is a static warning if an instance method $m_1$ overrides an instance member $m_2$ and the type of $m_1$ is not a subtype of the type of $m_2$. It is a static warning if an instance method $m_1$ overrides an instance member $m_2$,  the signature of $m_2$ explicitly specifies a default value for a formal parameter $p$ and the signature of $m_1$ specifies a different default value for $p$. It is a static warning if a class $C$ declares an instance method named $n$ and has a setter named $n=$. It is a static warning if a class $C$ declares an instance method named $n$ and an accessible static member named $n$ is declared in a superclass of $C$.
+It is a static warning if an instance method $m_1$ overrides an instance member $m_2$ and the type of $m_1$ is not a subtype of the type of $m_2$. It is a static warning if an instance method $m_1$ overrides an instance member $m_2$,  the signature of $m_2$ explicitly specifies a default value for a formal parameter $p$ and the signature of $m_1$ implies a different default value for $p$. It is a static warning if a class $C$ declares an instance method named $n$ and has a setter named $n=$. It is a static warning if a class $C$ declares an instance method named $n$ and an accessible static member named $n$ is declared in a superclass of $C$.
 
 % Works. If the name is public, no issue. If it's private, if a subclass has a conflicting inst var, it either is in the same lib and will be flagged, or is in another and is not an issue.
 
@@ -930,7 +940,7 @@
 
 The instance setters of a class $C$ are those instance setters declared by $C$ either implicitly or explicitly, and the instance setters inherited by $C$ from its superclass. The static setters of a class $C$ are those static setters declared by $C$.
 
-It is a compile-time error if a setter's formal parameter list does not consist of exactly one required formal parameter $p$.  \rationale{We could enforce this via the grammar, but we`d have to specify the evaluation rules in that case.}
+It is a compile-time error if a setter's formal parameter list does not consist of exactly one required formal parameter $p$.  \rationale{We could enforce this via the grammar, but we'd have to specify the evaluation rules in that case.}
 
 %It is a compile-time error if a class has both a setter and a method with the same name. This restriction holds regardless of whether the setter is defined explicitly or implicitly, or whether the setter or the method are inherited or not.
 
@@ -1066,7 +1076,7 @@
 
 If an explicit type is attached to the initializing formal, that is its static type. Otherwise, the type of an initializing formal named \code{id} is $T_{id}$, where $T_{id}$ is the type of the field named \code{id} in the immediately enclosing class. It is a static warning if the static type of \code{id} is not assignable to $T_{id}$.
 
-Using an initializing formal \code{\THIS{}.id} in a formal parameter list does not introduce a formal parameter name into the scope of the constructor. However, the initializing formal does effect the type of the constructor function exactly as if a formal parameter  named \code{id}  of the same type were introduced in the same position. 
+Using an initializing formal \code{\THIS{}.id} in a formal parameter list does not introduce a formal parameter name into the scope of the constructor. However, the initializing formal does effect the type of the constructor function exactly as if a formal parameter  named \code{id}  of the same type were introduced in the same position.
 
 Initializing formals are executed during the execution of generative constructors detailed below. Executing an initializing formal  \code{\THIS{}.id} causes the field \code{id} of the immediately surrounding class to be assigned the value of the corresponding actual parameter, unless $id$ is a final variable that has already been initialized, in which case a runtime error occurs.
 
@@ -1571,7 +1581,7 @@
 }
 
 \commentary{
-Note that instance variables do not participate in the override relation, but the getters and setters they induce do. Also, getters don`t override setters and vice versa.  Finally, static members never override anything.
+Note that instance variables do not participate in the override relation, but the getters and setters they induce do. Also, getters don't override setters and vice versa.  Finally, static members never override anything.
 }
 
 It is a static warning if a non-abstract class inherits an abstract method.
@@ -1620,7 +1630,7 @@
 
 %Can we have abstract getters and setters?
 
-\subsection{Superinterfaces}
+\subsection{ Superinterfaces}
 \label{superinterfaces}
 % what about rules about classes that fail to implement their interfaces?
 
@@ -1906,8 +1916,6 @@
 It is also a compile-time error to subclass, mix-in or implement an enum or to explicitly instantiate an enum.  These restrictions are given in normative form in sections \ref{superclasses}, \ref{superinterfaces}, \ref{mixinApplication} and \ref{instanceCreation} as appropriate.
 }
 
-
-
 \section{Generics}
 \label{generics}
 
@@ -2131,7 +2139,7 @@
 \end{itemize}
     
 \commentary{
-The definition of \cd{identity} for doubles differs from that of equality in that a NaN is equal to itself, and that negative and positive zero are distinct.  
+The definition of \cd{identity} for doubles differs from that of equality in that a NaN is identical to itself, and that negative and positive zero are distinct.  
 }
 
 \rationale{
@@ -2704,16 +2712,35 @@
  
  \end{grammar}
  
- The {\em current exception} is the last unhandled exception thrown. 
+ The {\em current exception} is the last exception raised and not subsequently caught at a given moment during runtime. 
 
  Evaluation of a throw expression of the form  \code{\THROW{} $e$;} proceeds as follows:
  
-The expression $e$ is evaluated yielding a value $v$. If $v$ evaluates to \NULL{}, then a \code{NullThrownError} is thrown. Otherwise, control is transferred to the nearest dynamically enclosing exception handler (\ref{try}), with the current exception set to $v$.
+The expression $e$ is evaluated yielding a value $v$. 
 
 \commentary{
 There is no requirement that the expression $e$ evaluate to a special kind of exception or error object.
 }
 
+If $e$ evaluates to \NULL{} (\ref{null}), then a \code{NullThrownError} is thrown. Otherwise the current exception is set to $v$ and the current return value (\ref{return}) becomes undefined.
+
+\rationale{The current exception and the current return value must never be simultaneously defined, as they represent mutually exclusive options for exiting the current function. 
+}
+
+Let $f$ be the immediately enclosing function. 
+
+If $f$ is synchronous (\ref{functions}), control is transferred to the nearest dynamically enclosing exception handler.
+
+\commentary{
+If $f$ is marked \SYNC* then a dynamically enclosing exception handler encloses the call to \code{moveNext()} that initiated the evaluation of the throw expression.
+}
+
+If $f$ is asynchronous  then if there is a dynamically enclosing exception handler $h$  (\ref{try}) introduced by the current activation, control is transferred to $h$, otherwise $f$  terminates.
+
+\rationale{
+The rules for where a thrown exception will be handled must necessarily differ between the synchronous and asynchronous cases. Asynchronous functions cannot transfer control to an exception handler defined outside themselves.  Asynchronous generators post exceptions to their stream. Other asynchronous functions report exceptions via their future.
+}
+
 If the object being thrown is an instance of class \code{Error} or a subclass thereof, its \code{stackTrace} getter will return the stack trace current at the point where the the object was first thrown.
 
 The static type of a throw expression is $\bot$.
@@ -2726,13 +2753,7 @@
 
 \begin{grammar}
 {\bf functionExpression:}
-    formalParameterList functionExpressionBody
-    .
-
-
-{\bf functionExpressionBody:}
-      `={\escapegrammar \gt}' expression;
-      block
+    formalParameterList functionBody
     .
  \end{grammar}   
  
@@ -2746,29 +2767,76 @@
 The static type of a function literal of the form 
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k} = d_k]) => e$ 
+is 
 
-is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow T_0$, where $T_0$ is the static type of $e$. In any case where $T_i, 1 \le i \le n+k$, is not specified, it is considered to have been specified as  \DYNAMIC{}.
+$(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow T_0$, where $T_0$ is the static type of $e$. 
+
+The static type of a function literal of the form 
+
+$(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k} = d_k])$ \ASYNC{} $=> e$
+is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow Future<T_0>$, where $T_0$ is the static type of $e$. 
 
 The static type of a function literal of the form 
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots,  T_{n+k}$ $x_{n+k} : d_k\}) => e$ 
+is 
 
-is $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow T_0$, where $T_0$ is the static type of $e$. In any case where $T_i, 1 \le i \le n+k$, is not specified, it is considered to have been specified as  \DYNAMIC{}.
+$(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow T_0$, where $T_0$ is the static type of $e$. 
+
+The static type of a function literal of the form 
+
+$(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots,  T_{n+k}$ $x_{n+k} : d_k\})$ \ASYNC{}  $=> e$
+
+is $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow Future<T_0>$, where $T_0$ is the static type of $e$. 
 
 The static type of a function literal of the form  
 
 $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k}= d_k])\{s\}$ 
 
-is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow  \DYNAMIC{}$. In any case where $T_i, 1 \le i \le n+k$, is not specified, it is considered to have been specified as  \DYNAMIC{}.
+is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow  \DYNAMIC{}$.
 
 The static type of a function literal of the form  
 
-$(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots,  T_{n+k}$ $x_{n+k} : d_k\})\{s\}$ 
+$(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k}= d_k])$ $ \ASYNC{}$ $\{s\}$ 
+is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow Future$. 
 
-is $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow  \DYNAMIC{}$. In any case where $T_i, 1 \le i \le n+k$, is not specified, it is considered to have been specified as  \DYNAMIC{}.
+The static type of a function literal of the form  
 
-%** Now that declared return types are precluded, do we need some better return type rule for (x){s} and friends?
+$(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k}= d_k])$ $ \ASYNC*{}$ $\{s\}$ 
+is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow Stream$. 
 
+The static type of a function literal of the form  
+
+$(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k}= d_k])$ $ \SYNC*{}$ $\{s\}$ 
+is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow Iterable$. 
+
+
+The static type of a function literal of the form  
+
+$(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots,  T_{n+k}$ $x_{n+k}= d_k])\{s\}$ 
+
+is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow  \DYNAMIC{}$. 
+
+
+The static type of a function literal of the form  
+
+$(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots,  T_{n+k}$ $x_{n+k} : d_k\})$ $\ASYNC{}$ $\{s\}$
+ 
+is $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow  Future{}$.
+
+The static type of a function literal of the form  
+
+$(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots,  T_{n+k}$ $x_{n+k} : d_k\})$ $\ASYNC*{}$ $\{s\}$
+ 
+is $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow  Stream{}$.
+
+The static type of a function literal of the form  
+
+$(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots,  T_{n+k}$ $x_{n+k} : d_k\})$ $\SYNC*{}$ $\{s\}$
+ 
+is $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow  Iterable{}$.
+
+In all of the above cases, whenever $T_i, 1 \le i \le n+k$, is not specified, it is considered to have been specified as  \DYNAMIC{}.
 
 
 \subsection{ This}
@@ -2788,7 +2856,7 @@
 We do not support self-types at this point. 
 }
 
-It is a compile-time error if \THIS{} appears in a top-level function or variable initializer,  in a factory constructor, or in a static method or variable initializer, or in the initializer of an instance variable. 
+It is a compile-time error if \THIS{} appears, implicitly or explicitly,  in a top-level function or variable initializer,  in a factory constructor, or in a static method or variable initializer, or in the initializer of an instance variable. 
 
 \subsection{ Instance Creation}
 \label{instanceCreation}
@@ -2863,7 +2931,7 @@
 
 If $R$ is a generic with $l = m$ type parameters then
 \begin{itemize}
-\item  $T$ is not a parameterized type, then for $ i \in 1 .. l$, let $V_i =  \DYNAMIC{}$.
+\item  If $T$ is not a parameterized type, then for $ i \in 1 .. l$, let $V_i =  \DYNAMIC{}$.
 \item  If $T$ is  a parameterized type then let $V_i = U_i$ for $ i \in 1 .. m$.  
 \end{itemize}
 
@@ -3043,10 +3111,39 @@
 \subsection{ Function Invocation}
 \label{functionInvocation}
  
-Function invocation occurs in the following cases: when a function expression  (\ref{functionExpressions}) is invoked (\ref{functionExpressionInvocation}), when a method (\ref{methodInvocation}), getter (\ref{topLevelGetterInvocation}, \ref{propertyExtraction}) or setter (\ref{assignment}) is invoked or when a constructor is invoked (either via instance creation (\ref{instanceCreation}), constructor redirection (\ref{redirectingConstructors}) or super initialization). The various kinds of function invocation differ as to how the function to be invoked, $f$,  is determined, as well as whether \THIS{} is bound. Once $f$ has been determined, the formal parameters of $f$ are bound to corresponding actual arguments. The body of $f$ is then executed with the aforementioned bindings. Execution of the body terminates when the first of the following occurs:
+Function invocation occurs in the following cases: when a function expression  (\ref{functionExpressions}) is invoked (\ref{functionExpressionInvocation}), when a method (\ref{methodInvocation}), getter (\ref{topLevelGetterInvocation}, \ref{propertyExtraction}) or setter (\ref{assignment}) is invoked or when a constructor is invoked (either via instance creation (\ref{instanceCreation}), constructor redirection (\ref{redirectingConstructors}) or super initialization). The various kinds of function invocation differ as to how the function to be invoked, $f$,  is determined, as well as whether \THIS{} (\ref{this}) is bound. Once $f$ has been determined, the formal parameters of $f$ are bound to corresponding actual arguments. When the body of $f$ is executed it will be executed with the aforementioned bindings. 
+
+If $f$ is marked \ASYNC{} (\ref{functions}), then a fresh instance (\ref{generativeConstructors}) $o$ implementing the built-in class \code{Future} is associated with the invocation and immediately returned to the caller. The body of $f$ is scheduled for execution at some future time. The future $o$ will complete when $f$ terminates. The value used to complete $o$ is the current return value (\ref{return}), if it is defined, and the current exception (\ref{throw}) otherwise. 
+
+If $f$ is marked \ASYNC* (\ref{functions}), then a fresh instance $s$ implementing the built-in class \code{Stream} is associated with the invocation and immediately returned. When $s$ is listened to, execution of the body of $f$ will begin.  When $f$ terminates:
+\begin{itemize}
+\item If the current return value is defined then, if $s$ has been canceled then its cancellation future is completed with \NULL{} (\ref{null}). 
+\item If the current exception $x$ is defined:
+  \begin{itemize}
+  \item $x$ is added to $s$. 
+  \item If $s$ has been canceled then its cancellation future is completed with $x$ as an error.
+  \end{itemize}
+\item $s$ is closed.
+\end{itemize}
+
+\rationale{
+When an asynchronous generator's stream has been canceled, cleanup will occur in the \FINALLY{} clauses (\ref{try}) inside the generator. We choose to direct any exceptions that occur at this time to the cancellation future rather than have them be lost. 
+}
+
+If $f$ is asynchronous then, when $f$ terminates, any open stream subscriptions associated with any asynchronous for loops  (\ref{asynchronousFor-in}) or yield-each statements  (\ref{yieldEach}) executing within $f$ are canceled.
+
+\rationale{Such streams may be left open by for loops that were escaped when an exception was thrown within them for example.
+}
+
+If $f$ is marked \SYNC* (\ref{functions}), then a fresh instance $i$ implementing the built-in class \code{Iterable} is associated with the invocation and immediately returned. When iteration over the iterable is started, by getting an iterator $j$ from the iterable and calling \code{moveNext()} on it, execution of the body of $f$ will begin. When $f$ terminates, $j$ is positioned after its last element, so that its current value is \NULL{} and the current call to \code{moveNext()} on $j$ returns false, as will all further calls.
+
+If $f$ is synchronous and is not a generator (\ref{functions}) then execution of the body of $f$ begins immediately.  When $f$ terminates the current return value is returned to the caller.
+
+
+Execution of $f$ terminates when the first of the following occurs:
 \begin{itemize}
 \item An exception is thrown and not caught within the current function activation. 
-\item A return statement (\ref{return}) immediately nested in the body of $f$ is executed.
+\item A return statement (\ref{return}) immediately nested in the body of $f$ is executed and not intercepted in a \FINALLY{} (\ref{try}) clause.
 \item The last statement of the body completes execution.
 \end{itemize}
 
@@ -3056,7 +3153,7 @@
 \subsubsection{ Actual Argument List Evaluation}
 \label{actualArguments}
 
-Function invocation involves evaluation of the list of actual arguments to the function and binding of the results to the function`s formal parameters.
+Function invocation involves evaluation of the list of actual arguments to the function and binding of the results to the function's formal parameters.
 
 \begin{grammar}
 {\bf arguments:}
@@ -3173,7 +3270,7 @@
 %\item Let $T_i$ be the static type of $a_i, i \in 1 .. n+k$. It is a static warning if $F$ is not a supertype of  $(T_1, \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \to \bot$.
 %\end{itemize}
 
-\subsection{Lookup}
+\subsection{ Lookup}
 
 \subsubsection{Method Lookup}
 \label{methodLookup}
@@ -3201,7 +3298,7 @@
 }
 
 
-\subsection{Top level Getter Invocation}
+\subsection{ Top level Getter Invocation}
 \label{topLevelGetterInvocation}
 
 Evaluation of a top-level getter invocation $i$ of the form $m$, where $m$ is an identifier, proceeds as follows:
@@ -3603,13 +3700,13 @@
 
 
 
-It is a static type warning if the static type of $e_2$ may not be assigned to $T$.   The static type of the expression $e_1v$ \code{=} $e_2$ is the static type of $e_2$.
+It is a static type warning if the static type of $e_2$ may not be assigned to the static type of the formal parameter of the setter $v=$.   The static type of the expression $e_1.v$ \code{=} $e_2$ is the static type of $e_2$.
 
 Evaluation of an assignment of the form $e_1[e_2]$ \code{=} $e_3$ is equivalent to the evaluation of the expression \code{(a, i, e)\{a.[]=(i, e); \RETURN{} e; \} ($e_1, e_2, e_3$)}.  The static type of the expression $e_1[e_2]$ \code{=} $e_3$ is the static type of $e_3$.
 
 % Should we add: It is a dynamic error if $e_1$ evaluates to an  constant list or map.
 
-It is as static warning if an assignment of the form $v = e$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer and there is neither a local variable declaration with name $v$  nor setter declaration with name $v=$ in the lexical scope enclosing the assignment.
+It is a static warning if an assignment of the form $v = e$ occurs inside a top level or static function (be it function, method, getter, or setter) or variable initializer and there is neither a local variable declaration with name $v$  nor setter declaration with name $v=$ in the lexical scope enclosing the assignment.
 
 It is a compile-time error to invoke any of the setters of class \cd{Object} on a prefix object (\ref{imports}) or on a constant type literal that is  immediately followed by the token `.'.
 
@@ -3651,7 +3748,7 @@
 
 Evaluation of a conditional expression $c$ of the form $e_1 ? e_2 : e_3$ proceeds as follows:
 
-First, $e_1$ is evaluated to an object $o_1$.  Then, $o_1$ is  subjected to boolean conversion (\ref{booleanConversion}) producing an object $r$.  If $r$ is true, then the value of $c$ is the result of evaluating the expression $e_2$. Otherwise the value of $c$ is the result of evaluating the expression $e_3$. 
+First, $e_1$ is evaluated to an object $o_1$.  Then, $o_1$ is  subjected to boolean conversion (\ref{booleanConversion}) producing an object $r$.  If $r$ is \TRUE, then the value of $c$ is the result of evaluating the expression $e_2$. Otherwise the value of $c$ is the result of evaluating the expression $e_3$. 
 
 If all of the following hold:
 \begin{itemize}
@@ -3685,9 +3782,9 @@
  
 A {\em logical boolean expression} is either an equality expression (\ref{equality}), or an invocation of a logical boolean operator on an expression $e_1$ with argument $e_2$.
  
-Evaluation of a logical boolean expression $b$ of the form $e_1 || e_2$ causes the evaluation of $e_1$ which is then  subjected to boolean conversion, yielding an object $o_1$; if $o_1$ is true, the result of evaluating $b$ is true, otherwise $e_2$ is evaluated to an object $o_2$, which is then subjected to boolean conversion (\ref{booleanConversion}) producing an object $r$, which is the value of $b$. 
+Evaluation of a logical boolean expression $b$ of the form $e_1 || e_2$ causes the evaluation of $e_1$ which is then  subjected to boolean conversion, yielding an object $o_1$; if $o_1$ is \TRUE, the result of evaluating $b$ is \TRUE, otherwise $e_2$ is evaluated to an object $o_2$, which is then subjected to boolean conversion (\ref{booleanConversion}) producing an object $r$, which is the value of $b$. 
 
-Evaluation of a logical boolean expression $b$ of the form $e_1 \&\& e_2$ causes the evaluation of $e_1$ which is then subjected to boolean conversion, yielding an object $o_1$; if $o_1$ is not  true, the result of evaluating $b$ is false, otherwise $e_2$ is evaluated to an object $o_2$, which is then subjected to boolean conversion producing an object $r$, which is the value of $b$. 
+Evaluation of a logical boolean expression $b$ of the form $e_1 \&\& e_2$ causes the evaluation of $e_1$ which is then subjected to boolean conversion, yielding an object $o_1$; if $o_1$ is not  \TRUE, the result of evaluating $b$ is \FALSE, otherwise $e_2$ is evaluated to an object $o_2$, which is then subjected to boolean conversion producing an object $r$, which is the value of $b$. 
 
 A logical boolean expression $b$ of the form $e_1 \&\& e_2$ shows that a variable $v$ has type 
 $T$ if all of the following conditions hold:
@@ -3896,6 +3993,7 @@
 
 \begin{grammar}
 {\bf unaryExpression:}prefixOperator unaryExpression;
+      awaitExpression;
       postfixExpression;
       (minusOperator $|$ tildeOperator) \SUPER{};
       incrementOperator assignableExpression
@@ -3919,15 +4017,51 @@
     
 \end{grammar}
 
-A {\em unary expression} is either a postfix expression  (\ref{postfixExpressions}), an invocation of a prefix operator on an expression or an invocation of a unary operator on either \SUPER{} or an expression $e$.
+A {\em unary expression} is either a postfix expression  (\ref{postfixExpressions}), an await expression (\ref{awaitExpressions}) or an invocation of a prefix operator on an expression or an invocation of a unary operator on either \SUPER{} or an expression $e$.
 
-The expression $!e$ is equivalent to the expression $e? \FALSE{} :\TRUE{}$. 
+The expression $!e$ is equivalent to the expression $e?$ $ \FALSE{} :\TRUE{}$. 
 
 Evaluation of an expression of the form \code{++$e$} is equivalent to \code{$e$ += 1}.  Evaluation of an expression of the form \code{-{}-$e$} is equivalent to \code{$e$ -= 1}. 
 
 %The expression $-e$ is equivalent to the method invocation \code{$e$.-()}.  The expression \code{-\SUPER{}} is equivalent  to the method invocation \code{\SUPER{}.-()}.
 
-An expression of the form \code{$op$ $e$} is equivalent to the method invocation \code{$e.op()$}. An expression of the form \code{$op$ \SUPER{}} is equivalent to the method invocation \code{\SUPER{}.$op()$}.
+An expression of the form \code{$op$ $e$} is equivalent to the method invocation \code{$e.op()$}. An expression of the form \code{$op$ \SUPER{}} is equivalent to the method invocation  (\ref{superInvocation}) \code{\SUPER{}.$op()$}.
+
+\subsection{ Await Expressions}
+\label{awaitExpressions}
+
+An {\em await expression} allows code to yield control until an asynchronous operation (\ref{functions}) completes. 
+
+ \begin{grammar}
+{\bf awaitExpression:}
+      \AWAIT{} unaryExpression
+ \end{grammar}
+
+Evaluation of an await expression $a$ of the form \AWAIT{} $e$ proceeds as follows:
+First, the expression $e$ is evaluated. Next:
+
+If $e$ evaluates to an instance of \code{Future}, $f$, then execution of the function $m$ immediately enclosing $a$ is suspended until after $f$ completes. The stream associated with the innermost enclosing asynchronous for loop (\ref{asynchronousFor-in}), if any, is paused. At some time after $f$ is completed, control returns to the current invocation. The stream associated with the innermost enclosing asynchronous for loop  (\ref{asynchronousFor-in}), if any, is resumed. If $f$ has completed with an exception $x$, $a$ raises $x$. If $f$ completes with a value $v$, $a$ evaluates to $v$.
+
+Otherwise, the value of $a$ is the value of $e$. If evaluation of $e$ raises an exception $x$, $a$ raises $x$.
+
+\commentary{
+It is a compile-time error if  the function  immediately enclosing  $a$  is not declared asynchronous.  However, this error is simply a syntax error, because in the context of a normal function, \AWAIT{} has no special meaning.
+}
+
+\rationale{
+An await expression has no meaning in a synchronous function. If such a function were to suspend waiting for a future, it would no longer be synchronous.
+}
+
+\commentary{
+It is not a static warning if the type of $e$ is not a subtype of \code{Future}. Tools may choose to give a hint in such cases.
+}
+
+Let $flatten(T) = flatten(S)$ if $T = Future<S>$, and $T$ otherwise. The static type of $a$ is $flatten(T)$ where $T$ is the static type of $e$.
+
+\rationale{
+We collapse multiple layers of futures into one. If $e$ evaluates to a future $f$, the future will not invoke its \code{then()} callback until f completes to a non-future value, and so the result of an await is never a future, and the result of an async function will never have type \code{Future$<X>$} where $X$ itself is an invocation of \code{Future}. 
+}
+
 
 
      
@@ -4097,12 +4231,18 @@
       . 
 \end{grammar}
 
-A built-in identifier is one of the identifiers produced by the production {\em BUILT\_IN\_IDENTIFIER}. It is a compile-time error if a built-in identifier is used as the declared name of a prefix, class, type parameter or type alias. It is a compile-time error to use a built-in identifier other than \DYNAMIC{} as a type annotation.
+A built-in identifier is one of the identifiers produced by the production {\em BUILT\_IN\_IDENTIFIER}. It is a compile-time error if a built-in identifier is used as the declared name of a prefix, class, type parameter or type alias. It is a compile-time error to use a built-in identifier other than \DYNAMIC{} as a type annotation or type parameter.
 
 \rationale{
 Built-in identifiers are identifiers that are used as keywords in Dart, but are not reserved words in Javascript. To minimize incompatibilities when porting Javascript code to Dart, we do not make these into reserved words. A built-in identifier may not be used to name a class or type. In other words, they are treated as reserved words when used as types.  This eliminates many confusing situations without causing compatibility problems. After all, a Javascript program has no type declarations or annotations so no clash can occur.  Furthermore, types should begin with an uppercase letter (see the appendix) and so no clash should occur in any Dart user program anyway.
 }
 
+It is a compile-time error if any of the identifiers \ASYNC, \AWAIT{} or \YIELD{} is used as an identifier in a function body marked with either \ASYNC{}, \ASYNC* or \SYNC*.
+
+\rationale{
+For compatibility reasons, new constructs cannot  rely upon new reserved words or even built-in identifiers. However, the constructs above are only usable in contexts that require special markers introduced concurrently with these constructs, so no old code could use them. Hence the restriction, which treats these names as reserved words in a limited context.
+}
+
 Evaluation of an identifier expression $e$ of the form $id$ proceeds as follows:
 
 
@@ -4170,7 +4310,7 @@
  
  Evaluation of the is-expression \code{$e$ \IS{} $T$} proceeds as follows:
 
-The expression $e$ is evaluated to a value $v$. Then, if $T$ is a malformed or deferred type (\ref{staticTypes}), a dynamic error occurs. Otherwise, if the interface of the class of $v$ is a subtype of $T$, the is-expression evaluates to true. Otherwise it evaluates to false.
+The expression $e$ is evaluated to a value $v$. Then, if $T$ is a malformed or deferred type (\ref{staticTypes}), a dynamic error occurs. Otherwise, if the interface of the class of $v$ is a subtype of $T$, the is-expression evaluates to \TRUE. Otherwise it evaluates to \FALSE.
 
 \commentary{It follows that \code{$e$ \IS{} Object} is always true. This makes sense in a language where everything is an object. 
 
@@ -4246,6 +4386,8 @@
       breakStatement;
       continueStatement;
       returnStatement;
+      yieldStatement;
+      yieldEachStatement;
       expressionStatement;
       assertStatement;
       localFunctionDeclaration
@@ -4436,7 +4578,7 @@
 
 \begin{grammar}
 {\bf forStatement:}
-     \FOR{} `(' forLoopParts `)' statement
+     \AWAIT? \FOR{} `(' forLoopParts `)' statement
     .
 
 {\bf forLoopParts:}forInitializerStatement expression? `{\escapegrammar ;}' expressionList?;
@@ -4449,7 +4591,7 @@
     .
  \end{grammar}
  
- The for statement has two forms - the traditional for loop and the for-in statement.
+ The for statement has three forms - the traditional for loop and two forms of the for-in statement - synchronous and asynchronous.
 
 \subsubsection{For Loop}
 \label{forLoop}
@@ -4516,6 +4658,28 @@
 Note that in fact, using a  \CONST{} variable would give rise to a compile time error since \cd{n0.current} is not a constant expression.  
 }
  
+\subsubsection{Asynchronous For-in}
+\label{asynchronousFor-in}
+
+A for-in statement may be asynchronous. The asynchronous form is designed to iterate over streams. An asynchronous for loop is distinguished by the keyword \AWAIT{} immediately preceding the keyword \FOR.
+
+Execution of a for-in statement of the form  \code{\AWAIT{} \FOR{} (finalConstVarOrType? id \IN{} $e$) $s$} proceeds as follows:
+
+The expression $e$ is evaluated to an object $o$. It is a dynamic error if $o$ is not an instance of a class that implements \code{Stream}. Otherwise, the expression \code{\AWAIT{} $v_f$}  (\ref{awaitExpressions}) is evaluated, where $v_f$ is a fresh variable whose value is a fresh instance (\ref{generativeConstructors}) $f$ implementing the built-in class \code{Future}.
+
+The stream $o$ is listened to,  and on each data event in $o$ the statement $s$ is executed with \code{id} bound to the value of the current element of the stream. If $s$ raises an exception, or if $o$ raises an exception, then $f$ is completed with that exception. Otherwise, when all events in the stream $o$ have been processed, $f$ is completed with \NULL{}  (\ref{null}).
+
+Let $u$ be the stream associated with the immediately enclosing asynchronous for loop or generator function (\ref{functions}), if any. If another event $e_u$ of $u$ occurs before execution of $s$ is complete, handling of $e_u$ must wait until $s$ is complete.
+
+\rationale{
+The future $f$ and the corresponding \AWAIT{} expression ensure that execution suspends as an asynchronous for loop begins and resumes after the \FOR{} statement when it ends. They also ensure that the stream of any enclosing asynchronous \FOR{} loop is paused for the duration of this loop.
+}
+
+It is a compile-time error if an asynchronous for-in statement appears inside a synchronous function (\ref{functions}). It is a compile-time error if a traditional for loop  (\ref{forLoop}) is prefixed by the \AWAIT{}  keyword.
+
+\rationale{An asynchronous loop would make no sense within a synchronous function, for the same reasons that an await expression makes no sense in a synchronous function.}
+
+ 
 \subsection{While}
 \label{while}
 
@@ -4688,7 +4852,7 @@
 It is a static warning if the type of $e$ may not be assigned to the type of $e_k$. It is a static warning if the last statement of the statement sequence $s_k$ is not a \BREAK{}, \CONTINUE{}, \RETURN{} or \THROW{} statement.
 
 \rationale{
-The behavior of switch cases intentionally differs from the C tradition.  Implicit fall through is a known cause of programming errors and therefore disallowed.  Why not simply break the flow implicitly at the end of every case, rather than requiring explicit code to do so?  This would indeed be cleaner.  It would also be cleaner to insist that each case have a single (possibly compound) statement.  We have chosen not to do so in order to facilitate porting of switch statements from other languages.  Implicitly breaking the control flow at the end of a case would silently alter the meaning of ported code that relied on fall-through, potentially forcing the programmer to deal with subtle bugs. Our design ensures that the difference is immediately brought to the coder`s attention.  The programmer will be notified at compile-time if they forget to end a case with a statement that terminates the straight-line control flow. We could make this warning a compile-time error, but refrain from doing so because do not wish to force the programmer to deal with this issue immediately while porting code.  If developers ignore the warning and run their code, a run time error will prevent the program from misbehaving in hard-to-debug ways (at least with respect to this issue).
+The behavior of switch cases intentionally differs from the C tradition.  Implicit fall through is a known cause of programming errors and therefore disallowed.  Why not simply break the flow implicitly at the end of every case, rather than requiring explicit code to do so?  This would indeed be cleaner.  It would also be cleaner to insist that each case have a single (possibly compound) statement.  We have chosen not to do so in order to facilitate porting of switch statements from other languages.  Implicitly breaking the control flow at the end of a case would silently alter the meaning of ported code that relied on fall-through, potentially forcing the programmer to deal with subtle bugs. Our design ensures that the difference is immediately brought to the coder's attention.  The programmer will be notified at compile-time if they forget to end a case with a statement that terminates the straight-line control flow. We could make this warning a compile-time error, but refrain from doing so because do not wish to force the programmer to deal with this issue immediately while porting code.  If developers ignore the warning and run their code, a run time error will prevent the program from misbehaving in hard-to-debug ways (at least with respect to this issue).
 
 The sophistication of the analysis of fall-through is another issue. For now, we have opted for a very straightforward syntactic requirement. There are obviously situations where code does not fall through, and yet does not conform to these simple rules, e.g.:
 }
@@ -4723,18 +4887,31 @@
 
  \begin{grammar}
 {\bf rethrowStatement:}
-     \RETHROW{}
+     \RETHROW{}  `{\escapegrammar ;}'
     .
  \end{grammar}
  
 Execution of a \code{\RETHROW{}} statement proceeds as follows:
-Control is transferred to the nearest innermost enclosing exception handler (\ref{try}).
 
-\commentary{No change is made to the current exception.}
+Let $f$ be the immediately enclosing function, and let \code{\ON{} $T$ \CATCH{} ($p_1$, $p_2$)}  be the immediately enclosing catch clause (\ref{try}).
 
-It is a compile-time error if a  \code{\RETHROW{}} statement is not enclosed within an on-catch clause. 
+\rationale{
+A \RETHROW{} statement always appears inside a \CATCH{} clause, and any \CATCH{} clause is semantically equivalent to some \CATCH{} clause of the form \code{\ON{} $T$ \CATCH{} (p1, p2)}.  So we can assume that the \RETHROW{} is enclosed in a \CATCH{} clause of that form.
+}
 
-%The static type of a rethrow expression is $\bot$.
+The current exception (\ref{throw}) is set to $p_1$, the current return value (\ref{return}) becomes undefined, and the active stack trace (\ref{try}) is set to $p_2$.
+
+If $f$ is marked \ASYNC{} or \ASYNC* (\ref{functions}) and there is a dynamically enclosing exception handler (\ref{try}) $h$ introduced by the current activation, control is transferred to $h$, otherwise $f$  terminates.
+
+\rationale{
+In the case of an asynchronous function, the dynamically enclosing exception handler is only relevant within the function. If an exception is not caught within the function, the exception value is channelled through a future or stream rather than propagating via exception handlers.
+}
+
+Otherwise, control is transferred to the  innermost enclosing exception handler.
+
+\commentary{The change in control may result in multiple functions terminating if these functions do not catch the exception via a \CATCH{} or \FINALLY{} clause, both of which introduce a dynamically enclosing exception handler.}
+
+It is a compile-time error if a  \code{\RETHROW{}} statement is not enclosed within an \ON-\CATCH{} clause. 
 
 
 
@@ -4779,18 +4956,18 @@
 It is of course a static warning if $T$ is a deferred or malformed type.
 }
 
-An \ON{}-\CATCH{} clause of the form   \code{\ON{} $T$ \CATCH{} ($p_1, p_2$) $s$} introduces a new scope $CS$ in which local variables specified by $p_1$ and $p_2$ are defined. The statement $s$ is enclosed within $CS$.
+An \ON{}-\CATCH{} clause of the form   \code{\ON{} $T$ \CATCH{} ($p_1, p_2$) $s$} introduces a new scope $CS$ in which final local variables specified by $p_1$ and $p_2$ are defined. The statement $s$ is enclosed within $CS$. The static type of $p_1$ is $T$ and the static type of $p_2$ is \code{StackTrace}.
 
 
 An \ON{}-\CATCH{} clause of the form  \code{\ON{} $T$ \CATCH{} ($p_1$) $s$} is equivalent to an \ON{}-\CATCH{} clause  \code{\ON{} $T$ \CATCH{} ($p_1, p_2$) $s$} where $p_2$ is an identifier that does not occur anywhere else in the program. 
 
 
-An \ON{}-\CATCH{} clause of the form  \code{\CATCH{} ($p$) $s$} is equivalent to an \ON{}-\CATCH{} clause  \code{\ON{} \DYNAMIC{} \CATCH{} ($p$) $s$}. An \ON{}-\CATCH{} clause of the form  \code{\CATCH{} ($p_1, p_2$) $s$} is equivalent to an \ON{}-\CATCH{} clause  \code{\ON{} \DYNAMIC{} \CATCH{} ($p_1, p_2$) $s$}
+An \ON{}-\CATCH{} clause of the form  \code{\CATCH{} ($p$) $s$} is equivalent to an \ON{}-\CATCH{} clause  \code{\ON{} \DYNAMIC{} \CATCH{} ($p$) $s$}. An \ON{}-\CATCH{} clause of the form  \code{\CATCH{} ($p_1, p_2$) $s$} is equivalent to an \ON{}-\CATCH{} clause  \code{\ON{} \DYNAMIC{} \CATCH{} ($p_1, p_2$) $s$}.
 
 
 %If an explicit type is associated with of $p_2$, it is a static warning if that type is not \code{Object} or \DYNAMIC{}.
 
-The {\em active stack trace} is an object whose \code{toString()} method produces a string that is a record of exactly those function activations within the current isolate that had not completed execution at the point where the current exception was thrown.
+The {\em active stack trace} is an object whose \code{toString()} method produces a string that is a record of exactly those function activations within the current isolate that had not completed execution at the point where the current exception (\ref{throw}) was thrown.
 %\begin{enumerate}
 %\item Started execution after the currently executing function.
 %\item Had not completed execution at the point where the exception caught by the currently executing  \ON{}-\CATCH{} clause was initially thrown. 
@@ -4819,33 +4996,36 @@
  \commentary{The term position should not be interpreted as a line number, but rather as a precise position - the exact character index of the  expression that raised  the exception. }
  
  % A position can be represented via a Token. If we make that part of the core reflection facility, we can state this here.
- 
- \rationale{The definition below is an attempt to characterize exception handling without resorting to a normal/abrupt completion formulation. It has the advantage that one need not specify abrupt completion behavior for every compound statement.  On the other hand, it is new and different and needs more thought.
-}
-
-% so, we need to fix things so that returns in the try still go through the finally clause and so that
-% uncaught or rethrown exceptions propagate  from the finally clause unless it returns.
-
-% plan: return transfers control to the enclosing finally clause if it exists and erases
-% any current stack trace & exception.
-% But how to ensure return leaves the finally if it does not throw? special text? say return
-% does the finally and then xfers control ?
 
 A try statement \TRY{} $s_1$ $on-catch_1 \ldots  on-catch_n$ \FINALLY{} $s_f$  defines an exception handler $h$ that executes as follows:
 
 The \ON{}-\CATCH{} clauses are examined in order, starting with $catch_1$, until either an \ON{}-\CATCH{} clause that matches the current exception (\ref{throw}) is found, or the list of \ON{}-\CATCH{} clauses has been exhausted. If an \ON{}-\CATCH{} clause $on-catch_k$ is found, then $p_{k1}$ is bound to the current exception,  $p_{k2}$, if declared,  is bound to the active stack trace, and then $catch_k$ is executed. If no \ON{}-\CATCH{} clause is found, the \FINALLY{} clause is executed. Then, execution resumes at the end of the try statement.
 
 
-A finally clause \FINALLY{} $s$ defines an exception handler $h$ that executes by executing the finally clause. 
-% If the current exception is defined 
+A finally clause \FINALLY{} $s$ defines an exception handler $h$ that executes as follows:
 
-Then, execution resumes at the end of the try statement.
+Let $r$ be the current return value (\ref{return}). Then the current return value becomes undefined. Any open streams associated with any asynchronous for loops (\ref{asynchronousFor-in}) and yield-each (\ref{yieldEach}) statements executing within the dynamic scope of $h$ are canceled. 
+
+\rationale{
+Streams left open by for loops that were escaped for whatever reason would be canceled at function termination, but it is best to cancel them as soon as possible.
+}
+
+Then the \FINALLY{} clause is executed. Let $m$ be the immediately enclosing function. If $r$ is defined then the current return value is set to $r$ and then:
+\begin{itemize}
+\item
+ if there is a dynamically enclosing error handler $g$ defined by a \FINALLY{} clause in $m$, control is transferred to $g$.
+ \item
+Otherwise $m$ terminates. 
+\end{itemize}
+
+Otherwise, execution resumes at the end of the try statement.
 
 Execution of an \ON{}-\CATCH{} clause \code{\ON{} $T$ \CATCH{} ($p_1$, $p_2$)} $s$ of a try statement $t$ proceeds as follows: The statement $s$ is executed in the dynamic scope of the exception handler defined by the finally clause of $t$. Then, the current exception and active stack trace both become undefined.
 
 Execution of a \FINALLY{} clause \FINALLY{} $s$ of a try statement proceeds as follows: 
 
-The statement $s$ is executed. Then, if the current exception is defined, control is transferred to the nearest dynamically enclosing exception handler.
+Let $x$ be the current exception and let $t$ be the active stack trace. Then the current exception and the active stack trace both become undefined. The statement $s$ is executed. Then, if $x$ is defined,  it is rethrown as if by a rethrow statement (\ref{rethrow}) enclosed in a \CATCH{} clause of the form \code{\CATCH{} ($v_x$, $v_t$)} where $v_x$ and $v_t$ are fresh variables bound to $x$ and $t$ respectively.
+
 
 Execution of a try statement of the form \code{\TRY{} $s_1$ $on-catch_1 \ldots on-catch_n$ \FINALLY{} $s_f$;}  proceeds as follows:
 
@@ -4863,30 +5043,53 @@
 If no exception was raised, the \FINALLY{} clause is also executed. Execution of the \FINALLY{} clause could also raise an exception, which will cause transfer of control to the next enclosing handler. 
 }
 
-A try statement of the form \code{\TRY{} $s_1$ $on-catch_1 \ldots on-catch_n$;} is equivalent to the statement \code{\TRY{} $s_1$ $on-catch_1 \ldots on-catch_n$ \FINALLY{} $\{\}$;}.
+A try statement of the form \code{\TRY{} $s_1$ $on-catch_1 \ldots on-catch_n$;} is equivalent to the statement \code{\TRY{} $s_1$ $on-catch_1 \ldots on-catch_n$ \FINALLY{} $\{\}$}.
  
 
 \subsection{ Return}
 \label{return}
 
-The {\em return statement} returns a result to the caller of a function.
+The {\em return statement} returns a result to the caller of a synchronous function,  completes the future associated with an asynchronous function or terminates the stream or iterable associated with a generator (\ref{functions}).
+
 
  \begin{grammar}
 {\bf returnStatement:}
-    \RETURN{} expression? '{\escapegrammar ;}' % could do top level here
+    \RETURN{} expression? `{\escapegrammar ;}' % could do top level here
     .
  \end{grammar}
+ 
+ \commentary{
+ Due to \FINALLY{} clauses, the precise behavior of \RETURN{} is a little more involved. Whether the value a return statement is supposed to return is actually returned depends on the behavior of any \FINALLY{} clauses in effect when executing the return. A \FINALLY{} clause may choose to return another value, or throw an exception, or even redirect control flow leading to other returns or throws. All a return statement really does is set a value that is intended to be returned when the function terminates. 
+ }
+
+The {\em current return value} is a unique value specific to a given function activation. It is undefined unless explicitly set in this specification.
     
-Executing a return statement 
+Executing a return statement \code{\RETURN{} $e$;} proceeds as follows:
 
-\code{\RETURN{} $e$;}
+First the expression $e$ is evaluated, producing an object $o$. Next:
+\begin{itemize}
+\item  
+The current return value is set to $o$ and the current exception (\ref{throw}) and active stack trace (\ref{try}) become undefined.
+\item
+Let $c$ be the \FINALLY{} clause of the innermost enclosing try-finally statement (\ref{try}), if any. If $c$ is defined, let $h$ be the handler induced by $c$. If $h$ is defined, control is transferred to $h$. 
+\item
+Otherwise execution of the current method terminates.
+\end{itemize}
 
-first causes evaluation of the expression $e$, producing an object $o$. Next, control is transferred to the caller of the current function activation, and the object $o$ is provided to the caller as the result of the function call.
+\commentary{
+In the simplest case, the immediately enclosing function is an ordinary, synchronous non-generator, and upon function termination, the current return value is given to the caller.  The other possibility is that the function is marked \ASYNC{}, in which case the current return value is used to complete the future associated with the function invocation. Both these scenarios are specified in section \ref{functionInvocation}.
+The enclosing function cannot be marked as generator (i.e, \ASYNC* or \SYNC*), since generators are not allowed to contain a statement of the form \code{\RETURN{} $e$;} as discussed below.
+}
 
-It is a static type warning if the type of $e$ may not be assigned to the declared return type of the immediately enclosing function. 
-%It is a static warning if the immediately enclosing function of a return statement of the form \code{\RETURN{} $e$;} is \VOID{}.
+Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing function.  
 
-In checked mode, it is a dynamic type error if $o$ is not \NULL{} and the runtime type of $o$ is not a subtype of the actual return type (\ref{actualTypeOfADeclaration}) of the immediately enclosing function.
+It is a static type warning if the body of $f$ is marked \ASYNC{} and the type \code{Future$<$flatten(T)$>$} (\ref{awaitExpressions}) may not be assigned to the declared return type of $f$.   Otherwise, it is a static type warning if $T$ may not be assigned to the declared return type of $f$. 
+
+Let $S$ be the runtime type of $o$. In checked mode:
+\begin{itemize}
+\item  If the body of $f$ is marked \ASYNC{} (\ref{functions}) it is a dynamic type error if $o$ is not \NULL{} (\ref{null}) and \code{Future$<$S$>$} is not a subtype of the actual return type  (\ref{actualTypeOfADeclaration}) of $f$.
+\item Otherwise, it is a dynamic type error if $o$ is not \NULL{} and the runtime type of $o$ is not a subtype of the actual return type of $f$.
+\end{itemize}
 
 It is a compile-time error if a return statement of the form \code{\RETURN{} $e$;} appears in a generative constructor (\ref{generativeConstructors}).
 
@@ -4894,19 +5097,38 @@
 It is quite easy to forget to add the factory prefix for a constructor, accidentally converting a factory into a generative constructor. The static checker may detect a type mismatch in some, but not all, of these cases. The rule above helps catch such errors, which can otherwise be very hard to recognize. There is no real downside to it, as returning a value from a generative constructor is meaningless.
 }
 
-Let $f$ be the function immediately enclosing a return statement of the form \RETURN{}; It is a static warning if both of the following conditions hold:
-\begin{itemize}
-\item  $f$ is not a generative constructor.
-\item The return type of $f$ may not be assigned to \VOID{}. 
-\end{itemize}
+It is a compile-time error if a return statement of the form \code{\RETURN{} $e$;} appears in a generator function.
 
-\commentary{
-Hence, a static warning will not be issued if $f$ has no declared return type, since the return type would be  \DYNAMIC{} and  \DYNAMIC{} may be assigned to \VOID{}. However, any function that declares a return type must return an expression explicitly.
+\rationale{
+In the case of a generator function, the value returned by the function is the iterable or stream associated with it, and individual elements are added to that iterable using yield statements, and so returning a value makes no sense. 
 }
 
+Let $f$ be the function immediately enclosing a return statement of the form \RETURN{}; It is a static warning  $f$ is neither a generator nor a generative constructor and either:
+\begin{itemize}
+\item  $f$ is synchronous and the return type of $f$ may not be assigned to \VOID{} (\ref{typeVoid}) or, 
+\item  $f$ is asynchronous and the return type of $f$ may not be assigned to \code{Future$<$Null$>$}.  
+\end{itemize}
+
+ \commentary{
+Hence, a static warning will not be issued if $f$ has no declared return type, since the return type would be  \DYNAMIC{} and  \DYNAMIC{} may be assigned to \VOID{} and to \code{Future$<$Null$>$}. However, any synchronous non-generator function that declares a return type must return an expression explicitly.
+}
 \rationale{This helps catch situations where users forget to return a value in a return statement.}
 
-A return statement of the form \code{\RETURN{};}  is executed by executing the statement  \code{\RETURN{} \NULL{};} if it occurs inside a method, getter, setter or factory; otherwise, the return statement necessarily occurs inside a generative constructor, in which case it is executed by executing  \code{\RETURN{} \THIS{};}.
+\rationale{ An asynchronous non-generator always returns a future of some sort. If no expression is given, the future will be completed with \NULL{} and this motivates the requirement above.} \commentary{Leaving the return type of a function marked \ASYNC{}  blank will be interpreted as \DYNAMIC{} as always, and cause no type error. Using \code{Future} or \code{Future$<$Object$>$} is acceptable as well, but any other type will cause a warning, since \NULL{} has no subtypes.}
+
+A return statement with no expression, \code{\RETURN;} is executed as follows:
+
+If the immediately enclosing function $f$ is a generator, then:
+\begin{itemize}
+\item
+The current return value is set to \NULL{}.
+\item 
+Let $c$ be the \FINALLY{} clause of the innermost enclosing try-finally statement, if any. If $c$ is defined,  let $h$ be the handler induced by $c$. If $h$ is defined, control is transferred to $h$.
+\item
+Otherwise, execution of the current method terminates. 
+\end{itemize}
+
+Otherwise the return statement is executed by executing the statement  \code{\RETURN{} \NULL{};} if it occurs inside a method, getter, setter or factory; otherwise, the return statement necessarily occurs inside a generative constructor, in which case it is executed by executing  \code{\RETURN{} \THIS{};}.
 
 \commentary{Despite the fact that \code{\RETURN{};} is executed as if by a \code{\RETURN{} $e$;}, it is important to understand that it is not a static warning to include a statement of the form \code{\RETURN{};} 
 %in a \VOID{} function; neither is it illegal 
@@ -4920,7 +5142,9 @@
 The question then becomes, what value should a return statement return when no return expression is given. In a generative constructor, it is obviously the object being constructed (\THIS{}). A void function is not expected to participate in an expression, which is why it is marked \VOID{} in the first place. Hence, this situation is a mistake which should be detected as soon as possible. The static rules help here, but if the code is executed, using \NULL{} leads to fast failure, which is desirable in this case. The same rationale applies for function bodies that do not contain a return statement at all.
 }
 
-It is a static warning if a function contains both one or more explicit return statements of the form \code{\RETURN;} and one or more return statements of the form \code{\RETURN{} $e$;}.
+It is a static warning if a  function contains both one or more explicit return statements of the form \code{\RETURN;} and one or more return statements of the form \code{\RETURN{} $e$;}.
+
+
 
 
 \subsection{ Labels}
@@ -4934,7 +5158,7 @@
 
  \begin{grammar}
 {\bf label:}
-      identifier '{\escapegrammar :}'
+      identifier `{\escapegrammar :}'
     .
  \end{grammar}
  
@@ -4953,12 +5177,15 @@
 
 \begin{grammar}
 {\bf breakStatement:}
-     \BREAK{} identifier? '{\escapegrammar ;}'
+     \BREAK{} identifier? `{\escapegrammar ;}'
     .
  \end{grammar}
  
 Let $s_b$ be a \BREAK{} statement. If $s_b$ is of the form  \code{\BREAK{} $L$;}, then let $s_E$ be the the innermost labeled statement with label $L$ enclosing $s_b$. If $s_b$ is of the form \code{\BREAK{};},  then let $s_E$ be the the innermost  \DO{} (\ref{do}), \FOR{} (\ref{for}), \SWITCH{} (\ref{switch}) or \WHILE{} (\ref{while}) statement enclosing  $s_b$. It is a compile-time error if no such statement $s_E$ exists within the innermost function in which  $s_b$ occurs.  Furthermore, let $s_1, \ldots, s_n$ be those \TRY{} statements that are both enclosed in $s_E$ and that enclose  $s_b$, and that have a \FINALLY{} clause. Lastly, let $f_j$ be the \FINALLY{} clause of $s_j, 1 \le j \le n$.   Executing  $s_b$ first executes $f_1, \ldots,  f_n$ in innermost-clause-first  order and then terminates $s_E$. 
 
+If $s_E$ is an asynchronous for loop (\ref{asynchronousFor-in}), its associated stream subscription is canceled. Furthermore, let $a_k$ be the set of asynchronous for loops  and yield-each statements (\ref{yieldEach}) enclosing $s_b$ that are enclosed in $s_E , 1 \le k \le m$.   The stream subscriptions associated with $a_j$ are canceled, $1 \le j \le m$. 
+
+
 
 \subsection{ Continue}
 \label{continue}
@@ -4967,7 +5194,7 @@
 
 \begin{grammar}
 {\bf continueStatement:}
-    \CONTINUE{} identifier? '{\escapegrammar ;}'
+    \CONTINUE{} identifier? `{\escapegrammar ;}'
         .
  \end{grammar}      
  
@@ -4977,6 +5204,88 @@
  In a while loop, that would be the boolean expression before the body. In a do loop, it would be the boolean expression after the body. In a for loop, it would be the increment clause.  In other words, execution continues to the next iteration of the loop.
  }
  
+ If $s_E$ is an asynchronous for loop (\ref{asynchronousFor-in}), let $a_k$ be the set of asynchronous for loops and yield-each statements (\ref{yieldEach}) enclosing $s_c$ that are enclosed in $s_E , 1 \le k \le m$.   The stream subscriptions associated with $a_j$ are canceled, $1 \le j \le m$. 
+ 
+ \subsection{ Yield and Yield-Each}
+ \label{yieldAndYieldEach}
+ 
+ \subsubsection{ Yield}
+ \label{yield}
+ 
+ The {\em yield statement} adds an element to the result of a generator function (\ref{functions}).
+
+ \begin{grammar}
+{\bf yieldStatement:}
+   \YIELD{} expression `{\escapegrammar ;}'
+      .
+\end{grammar}
+
+Execution of a statement $s$ of the form \code{\YIELD{} $e$;}  proceeds as follows:
+
+First, the expression $e$ is evaluated to an object $o$. If the enclosing function $m$ is marked \ASYNC* (\ref{functions}) and the stream $u$ associated with $m$ has been paused,  then execution of $m$ is suspended until $u$ is resumed or canceled.
+
+Next, $o$ is added to the iterable or stream associated with the immediately enclosing function. 
+
+If the enclosing function $m$ is marked \ASYNC* and the stream $u$ associated with $m$ has been canceled, then let $c$ be the \FINALLY{} clause (\ref{try}) of the innermost enclosing try-finally statement, if any. If $c$ is defined, let $h$ be the handler induced by $c$. If $h$ is defined, control is transferred to $h$. If $h$ is undefined, the immediately enclosing function terminates.
+
+\rationale{
+The stream associated with an asynchronous generator could be canceled by any code with a reference to that stream at any point where the generator was passivated.  Such a cancellation constitutes an irretrievable error for the generator. At this point, the only plausible action for the generator is to clean up after itself via its \FINALLY{} clauses.
+}
+
+If the enclosing function $m$ is marked \SYNC* (\ref{functions}) then:
+\begin{itemize}
+\item
+Execution of the function $m$ immediately enclosing $s$ is suspended until the method \code{moveNext()} is invoked upon the iterator used to initiate the current invocation of $m$. 
+\item
+The current call to \code{moveNext()} returns \TRUE.
+\end{itemize}
+
+It is a compile-time error if a yield statement appears in a function that is not a generator function.
+
+Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing function.  It is a static type warning if either:
+\begin{itemize}
+\item
+ the body of $f$ is marked \ASYNC* and the type \code{Stream$<$T$>$} may not be assigned to the declared return type of $f$. 
+ \item
+ the body of $f$ is marked \SYNC* and the type \code{Iterable$<$T$>$} may not be assigned to the declared return type of $f$.
+ \end{itemize} 
+
+ 
+ \subsubsection{ Yield-Each}
+ \label{yieldEach}
+ 
+ The {\em yield-each statement} adds a series of values to the result of a generator function (\ref{functions}).
+ 
+ \begin{grammar}
+{\bf yieldEachStatement:}
+   \YIELD* expression `{\escapegrammar ;}'
+      .
+\end{grammar}
+
+Execution of a statement s of the form \code{\YIELD* $e$;}  proceeds as follows:
+
+First, the expression $e$ is evaluated to an object $o$. If the immediately enclosing function $m$ is synchronous, then it is a dynamic error if the class of $o$ does not implement \code{Iterable}.  If $m$ asynchronous, then it is a dynamic error if the class of $o$ does not implement \code{Stream}. Next, for each element $x$ of $o$:
+\begin{itemize}
+\item
+If $m$ is marked \ASYNC* (\ref{functions}) and the stream $u$ associated with $m$ has been paused,  then execution of $m$ is suspended until $u$ is resumed or canceled.
+\item
+ $x$ is added to the iterable or stream associated with $m$ in the order it appears in $o$.  
+ \item
+If $m$ is marked \ASYNC* and the stream $u$ associated with $m$ has been canceled, then let $c$ be the \FINALLY{} clause (\ref{try}) of the innermost enclosing try-finally statement, if any. If $c$ is defined,  let $h$ be the handler induced by $c$. If $h$ is defined, control is transferred to $h$. If $h$ is undefined, the immediately enclosing function terminates.
+\end{itemize}
+
+If the enclosing function is marked \SYNC* (\ref{functions}) then:
+\begin{itemize}
+\item
+Execution of the function $m$ immediately enclosing $s$ is suspended until the method \code{moveNext()} is invoked upon the iterator used to initiate the current invocation of $m$. 
+\item
+The current call to \code{moveNext()} returns \TRUE.
+\end{itemize}
+
+It is a compile-time error if a yield-each statement appears in a function that is not a generator function.
+
+Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing function.  It is a static type warning if $T$ may not be assigned to the declared return type of $f$. 
+
 
 \subsection{ Assert}
 \label{assert}
@@ -4985,7 +5294,7 @@
 
 \begin{grammar}
 {\bf assertStatement:}
-   assert '(' conditionalExpression ')' '{\escapegrammar ;}'
+   assert `(' conditionalExpression `)' `{\escapegrammar ;}'
       .
 \end{grammar}
       
@@ -5314,7 +5623,7 @@
  
  An export specifies a URI $x$ where the declaration of an exported library is to be found.  It is a compile-time error if  the specified URI does not refer to a library declaration.  
 
-We say that a name {\em is exported by a library} (or equivalently, that a library {\em exports a name}) if the name is in the library's exported namespace. We say that a declaration {\em is exported by a library} (or equivalently, that a library {\em exports a declaration}) if the declaration is in the library`s exported namespace.
+We say that a name {\em is exported by a library} (or equivalently, that a library {\em exports a name}) if the name is in the library's exported namespace. We say that a declaration {\em is exported by a library} (or equivalently, that a library {\em exports a declaration}) if the declaration is in the library's exported namespace.
 
 A library always exports all names and all declarations in its public namespace. In addition, a library may choose to re-export additional libraries via {\em export directives}, often referred to simply as {\em exports}.
 
@@ -5610,7 +5919,7 @@
 \end{dartCode}
 
 \commentary{
-\code{b} is bound to true, but in checked mode the second line causes a dynamic type error.
+\code{b} is bound to \TRUE, but in checked mode the second line causes a dynamic type error.
 }
 
 
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index 2531641..7fda8b0 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -152,7 +152,7 @@
       <li><a href="#domain_completion">Code Completion</a></li>
       <li><a href="#domain_search">Search</a></li>
       <li><a href="#domain_edit">Edit</a></li>
-      <li><a href="#domain_debug">Debugging</a></li>
+      <li><a href="#domain_execution">Execution</a></li>
     </ul>
     <p>
       The specifications of the API’s refer to data structures beyond
@@ -164,15 +164,16 @@
       The command-line arguments that can be passed to the server.
     </p>
     <h4>Options</h4>
+    <blockquote>
     <dl>
       <dt>--no-error-notification</dt>
-      <dd></dd>
-    </dl>
-    <p>
+      <dd>
       Disable notifications about errors (see analysis.error). If this
       flag is not specified then notifications will be sent for all
       errors produced for all files in the actual analysis roots.
-    </p>
+      </dd>
+    </dl>
+    </blockquote>
     <h2 class="domain"><a name="domain_server">Domain: server</a></h2>
       <p>
         The server domain contains API’s related to the execution of
@@ -368,6 +369,13 @@
           should use the information provided by the 'analysis.errors'
           notification.
         </p>
+        <p>
+          If a request is made for a file which does not exist, or
+          which is not currently subject to analysis (e.g. because it
+          is not associated with any analysis root specified to
+          analysis.setAnalysisRoots), an error of type
+          <tt>GET_ERRORS_INVALID_FILE</tt> will be generated.
+        </p>
         
         
       <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
@@ -1373,14 +1381,7 @@
           </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>fixes ( List&lt;<a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a>&gt; )</i></b></dt><dd>
             
             <p>
-              The fixes that are available for each of the analysis
-              errors. There is a one-to-one correspondence between the
-              analysis errors in the request and the lists of changes
-              in the response. In particular, it is always the case
-              that errors.length == fixes.length and that fixes[i] is
-              the list of fixes for the error in errors[i]. The list
-              of changes corresponding to an error can be empty if
-              there are no fixes available for that error.
+              The fixes that are available for the errors at the given offset.
             </p>
           </dd></dl></dd><dt class="request">edit.getRefactoring</dt><dd><div class="box"><pre>request: {
   "id": String
@@ -1391,14 +1392,14 @@
     "<b>offset</b>": int
     "<b>length</b>": int
     "<b>validateOnly</b>": bool
-    "<b>options</b>": <span style="color:#999999">optional</span> object
+    "<b>options</b>": <span style="color:#999999">optional</span> <a href="#type_RefactoringOptions">RefactoringOptions</a>
   }
 }</pre><br><pre>response: {
   "id": String
   "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
   "result": {
     "<b>problems</b>": List&lt;<a href="#type_RefactoringProblem">RefactoringProblem</a>&gt;
-    "<b>feedback</b>": <span style="color:#999999">optional</span> object
+    "<b>feedback</b>": <span style="color:#999999">optional</span> <a href="#type_RefactoringFeedback">RefactoringFeedback</a>
     "<b>change</b>": <span style="color:#999999">optional</span> <a href="#type_SourceChange">SourceChange</a>
     "<b>potentialEdits</b>": <span style="color:#999999">optional</span> List&lt;String&gt;
   }
@@ -1435,7 +1436,7 @@
               True if the client is only requesting that the values of
               the options be validated and no change be generated.
             </p>
-          </dd><dt class="field"><b><i>options ( <span style="color:#999999">optional</span> object )</i></b></dt><dd>
+          </dd><dt class="field"><b><i>options ( <span style="color:#999999">optional</span> <a href="#type_RefactoringOptions">RefactoringOptions</a> )</i></b></dt><dd>
             
             <p>
               Data used to provide values provided by the user. The
@@ -1452,7 +1453,7 @@
               The status of the refactoring. The array will be empty
               if there are no known problems.
             </p>
-          </dd><dt class="field"><b><i>feedback ( <span style="color:#999999">optional</span> object )</i></b></dt><dd>
+          </dd><dt class="field"><b><i>feedback ( <span style="color:#999999">optional</span> <a href="#type_RefactoringFeedback">RefactoringFeedback</a> )</i></b></dt><dd>
             
             <p>
               Data used to provide feedback to the user. The structure
@@ -1483,19 +1484,19 @@
               potential edits for the refactoring.
             </p>
           </dd></dl></dd></dl>
-    <h2 class="domain"><a name="domain_debug">Domain: debug</a></h2>
+    <h2 class="domain"><a name="domain_execution">Domain: execution</a></h2>
       <p>
-        The debugging domain contains commands related to providing a
-        debugging experience.
+        The execution domain contains commands related to providing an execution
+        or debugging experience.
       </p>
       
       
       
       
       
-    <h3>Requests</h3><dl><dt class="request">debug.createContext</dt><dd><div class="box"><pre>request: {
+    <h3>Requests</h3><dl><dt class="request">execution.createContext</dt><dd><div class="box"><pre>request: {
   "id": String
-  "method": "debug.createContext"
+  "method": "execution.createContext"
   "params": {
     "<b>contextRoot</b>": <a href="#type_FilePath">FilePath</a>
   }
@@ -1503,15 +1504,14 @@
   "<b>id</b>": String
   "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
   "result": {
-    "<b>id</b>": <a href="#type_DebugContextId">DebugContextId</a>
+    "<b>id</b>": <a href="#type_ExecutionContextId">ExecutionContextId</a>
   }
 }</pre></div>
         <p>
-          Create a debugging context for the executable file with the
-          given path. The context that is created will persist until
-          debug.deleteContext is used to delete it. Clients,
-          therefore, are responsible for managing the lifetime of
-          debugging contexts.
+          Create an execution context for the executable file with the given
+          path. The context that is created will persist until
+          execution.deleteContext is used to delete it. Clients, therefore, are
+          responsible for managing the lifetime of execution contexts.
         </p>
         
         
@@ -1520,39 +1520,38 @@
             <p>
               The path of the Dart or HTML file that will be launched.
             </p>
-          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>id ( <a href="#type_DebugContextId">DebugContextId</a> )</i></b></dt><dd>
+          </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>id ( <a href="#type_ExecutionContextId">ExecutionContextId</a> )</i></b></dt><dd>
             
             <p>
-              The identifier used to refer to the debugging context
-              that was created.
+              The identifier used to refer to the execution context that was
+              created.
             </p>
-          </dd></dl></dd><dt class="request">debug.deleteContext</dt><dd><div class="box"><pre>request: {
+          </dd></dl></dd><dt class="request">execution.deleteContext</dt><dd><div class="box"><pre>request: {
   "<b>id</b>": String
-  "method": "debug.deleteContext"
+  "method": "execution.deleteContext"
   "params": {
-    "<b>id</b>": <a href="#type_DebugContextId">DebugContextId</a>
+    "<b>id</b>": <a href="#type_ExecutionContextId">ExecutionContextId</a>
   }
 }</pre><br><pre>response: {
   "id": String
   "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
 }</pre></div>
         <p>
-          Delete the debugging context with the given identifier. The
-          context id is no longer valid after this command. The server
-          is allowed to re-use ids when they are no longer valid.
+          Delete the execution context with the given identifier. The context id
+          is no longer valid after this command. The server is allowed to re-use
+          ids when they are no longer valid.
         </p>
         
-      <h4>Parameters</h4><dl><dt class="field"><b><i>id ( <a href="#type_DebugContextId">DebugContextId</a> )</i></b></dt><dd>
+      <h4>Parameters</h4><dl><dt class="field"><b><i>id ( <a href="#type_ExecutionContextId">ExecutionContextId</a> )</i></b></dt><dd>
             
             <p>
-              The identifier of the debugging context that is to be
-              deleted.
+              The identifier of the execution context that is to be deleted.
             </p>
-          </dd></dl></dd><dt class="request">debug.mapUri</dt><dd><div class="box"><pre>request: {
+          </dd></dl></dd><dt class="request">execution.mapUri</dt><dd><div class="box"><pre>request: {
   "<b>id</b>": String
-  "method": "debug.mapUri"
+  "method": "execution.mapUri"
   "params": {
-    "<b>id</b>": <a href="#type_DebugContextId">DebugContextId</a>
+    "<b>id</b>": <a href="#type_ExecutionContextId">ExecutionContextId</a>
     "<b>file</b>": <span style="color:#999999">optional</span> <a href="#type_FilePath">FilePath</a>
     "<b>uri</b>": <span style="color:#999999">optional</span> String
   }
@@ -1565,20 +1564,20 @@
   }
 }</pre></div>
         <p>
-          Map a URI from the debugging context to the file that it
-          corresponds to, or map a file to the URI that it corresponds
-          to in the debugging context.
+          Map a URI from the execution context to the file that it corresponds
+          to, or map a file to the URI that it corresponds to in the execution
+          context.
         </p>
         <p>
           Exactly one of the file and uri fields must be provided.
         </p>
         
         
-      <h4>Parameters</h4><dl><dt class="field"><b><i>id ( <a href="#type_DebugContextId">DebugContextId</a> )</i></b></dt><dd>
+      <h4>Parameters</h4><dl><dt class="field"><b><i>id ( <a href="#type_ExecutionContextId">ExecutionContextId</a> )</i></b></dt><dd>
             
             <p>
-              The identifier of the debugging context in which the URI
-              is to be mapped.
+              The identifier of the execution context in which the URI is to be
+              mapped.
             </p>
           </dd><dt class="field"><b><i>file ( <span style="color:#999999">optional</span> <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
             
@@ -1593,42 +1592,42 @@
           </dd></dl><h4>Returns</h4><dl><dt class="field"><b><i>file ( <span style="color:#999999">optional</span> <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
             
             <p>
-              The file to which the URI was mapped. This field is
-              omitted if the uri field was not given in the request.
+              The file to which the URI was mapped. This field is omitted if the
+              uri field was not given in the request.
             </p>
           </dd><dt class="field"><b><i>uri ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
             
             <p>
-              The URI to which the file path was mapped. This field is
-              omitted if the file field was not given in the request.
+              The URI to which the file path was mapped. This field is omitted
+              if the file field was not given in the request.
             </p>
-          </dd></dl></dd><dt class="request">debug.setSubscriptions</dt><dd><div class="box"><pre>request: {
+          </dd></dl></dd><dt class="request">execution.setSubscriptions</dt><dd><div class="box"><pre>request: {
   "id": String
-  "method": "debug.setSubscriptions"
+  "method": "execution.setSubscriptions"
   "params": {
-    "<b>subscriptions</b>": List&lt;<a href="#type_DebugService">DebugService</a>&gt;
+    "<b>subscriptions</b>": List&lt;<a href="#type_ExecutionService">ExecutionService</a>&gt;
   }
 }</pre><br><pre>response: {
   "id": String
   "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
 }</pre></div>
         <p>
-          Subscribe for services. All previous subscriptions are
-          replaced by the given set of services.
+          Subscribe for services. All previous subscriptions are replaced by the
+          given set of services.
         </p>
         <p>
-          It is an error if any of the elements in the list are not
-          valid services. If there is an error, then the current
-          subscriptions will remain unchanged.
+          It is an error if any of the elements in the list are not valid
+          services. If there is an error, then the current subscriptions will
+          remain unchanged.
         </p>
         
-      <h4>Parameters</h4><dl><dt class="field"><b><i>subscriptions ( List&lt;<a href="#type_DebugService">DebugService</a>&gt; )</i></b></dt><dd>
+      <h4>Parameters</h4><dl><dt class="field"><b><i>subscriptions ( List&lt;<a href="#type_ExecutionService">ExecutionService</a>&gt; )</i></b></dt><dd>
             
             <p>
               A list of the services being subscribed to.
             </p>
-          </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification">debug.launchData</dt><dd><div class="box"><pre>notification: {
-  "event": "debug.launchData"
+          </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification">execution.launchData</dt><dd><div class="box"><pre>notification: {
+  "event": "execution.launchData"
   "params": {
     "<b>executables</b>": List&lt;<a href="#type_ExecutableFile">ExecutableFile</a>&gt;
     "<b>dartToHtml</b>": Map&lt;<a href="#type_FilePath">FilePath</a>, List&lt;<a href="#type_FilePath">FilePath</a>&gt;&gt;
@@ -1636,38 +1635,35 @@
   }
 }</pre></div>
         <p>
-          Reports information needed to allow applications within the
-          given context to be launched.
+          Reports information needed to allow applications to be launched.
         </p>
         <p>
-          This notification is not subscribed to by default. Clients
-          can subscribe by including the value "LAUNCH_DATA" in the
-          list of services passed in a debug.setSubscriptions request.
+          This notification is not subscribed to by default. Clients can
+          subscribe by including the value "LAUNCH_DATA" in the list of services
+          passed in an <tt>execution.setSubscriptions</tt> request.
         </p>
         
       <h4>Parameters</h4><dl><dt class="field"><b><i>executables ( List&lt;<a href="#type_ExecutableFile">ExecutableFile</a>&gt; )</i></b></dt><dd>
             
             <p>
-              A list of the files that are executable in the given
-              context. This list replaces any previous list provided
-              for the given context.
+              A list of the files that are executable. This list replaces any
+              previous list provided.
             </p>
           </dd><dt class="field"><b><i>dartToHtml ( Map&lt;<a href="#type_FilePath">FilePath</a>, List&lt;<a href="#type_FilePath">FilePath</a>&gt;&gt; )</i></b></dt><dd>
             
             <p>
-              A mapping from the paths of Dart files that are
-              referenced by HTML files to a list of the HTML files
-              that reference the Dart files.
+              A mapping from the paths of Dart files that are referenced by HTML
+              files to a list of the HTML files that reference the Dart files.
             </p>
           </dd><dt class="field"><b><i>htmlToDart ( Map&lt;<a href="#type_FilePath">FilePath</a>, List&lt;<a href="#type_FilePath">FilePath</a>&gt;&gt; )</i></b></dt><dd>
             
             <p>
-              A mapping from the paths of HTML files that reference
-              Dart files to a list of the Dart files they reference.
+              A mapping from the paths of HTML files that reference Dart files
+              to a list of the Dart files they reference.
             </p>
           </dd></dl></dd></dl>
     
-      <h2><a name="types">Types</a></h2>
+      <h2 class="domain"><a name="types">Types</a></h2>
       <p>
         This section contains descriptions of the data types referenced
         in the API’s of the various domains.
@@ -1723,6 +1719,8 @@
       
       
       
+      
+      
     <dl><dt class="typeDefinition"><a name="type_AddContentOverlay">AddContentOverlay: object</a></dt><dd>
         <p>
           A directive to begin overlaying the contents of a file.  The
@@ -1875,6 +1873,11 @@
           a file content overlay or that has had its overlay removed via
           <a href="#type_RemoveContentOverlay">RemoveContentOverlay</a>.
         </p>
+        <p>
+          If any of the edits cannot be applied due to its offset or
+          length being out of range, an INVALID_OVERLAY_CHANGE error
+          will be reported.
+        </p>
         
       <dl><dt class="field"><b><i>type = "change"</i></b></dt><dd></dd><dt class="field"><b><i>edits ( List&lt;<a href="#type_SourceEdit">SourceEdit</a>&gt; )</i></b></dt><dd>
             
@@ -2017,18 +2020,7 @@
           in a completion suggestion.
         </p>
         
-      <dl><dt class="value">ARGUMENT_LIST</dt><dt class="value">CLASS</dt><dt class="value">CLASS_ALIAS</dt><dt class="value">CONSTRUCTOR</dt><dt class="value">FIELD</dt><dt class="value">FUNCTION</dt><dt class="value">FUNCTION_TYPE_ALIAS</dt><dt class="value">GETTER</dt><dt class="value">IMPORT</dt><dt class="value">KEYWORD</dt><dt class="value">LIBRARY_PREFIX</dt><dt class="value">LOCAL_VARIABLE</dt><dt class="value">METHOD</dt><dt class="value">METHOD_NAME</dt><dt class="value">NAMED_ARGUMENT</dt><dt class="value">OPTIONAL_ARGUMENT</dt><dt class="value">PARAMETER</dt><dt class="value">SETTER</dt><dt class="value">TOP_LEVEL_VARIABLE</dt><dt class="value">TYPE_PARAMETER</dt></dl></dd><dt class="typeDefinition"><a name="type_DebugContextId">DebugContextId: String</a></dt><dd>
-        
-        <p>
-          The identifier for a debug context.
-        </p>
-      </dd><dt class="typeDefinition"><a name="type_DebugService">DebugService: String</a></dt><dd>
-        <p>
-          An enumeration of the services provided by the debug
-          domain.
-        </p>
-        
-      <dl><dt class="value">LAUNCH_DATA</dt></dl></dd><dt class="typeDefinition"><a name="type_Element">Element: object</a></dt><dd>
+      <dl><dt class="value">ARGUMENT_LIST</dt><dt class="value">CLASS</dt><dt class="value">CLASS_ALIAS</dt><dt class="value">CONSTRUCTOR</dt><dt class="value">FIELD</dt><dt class="value">FUNCTION</dt><dt class="value">FUNCTION_TYPE_ALIAS</dt><dt class="value">GETTER</dt><dt class="value">IMPORT</dt><dt class="value">KEYWORD</dt><dt class="value">LIBRARY_PREFIX</dt><dt class="value">LOCAL_VARIABLE</dt><dt class="value">METHOD</dt><dt class="value">METHOD_NAME</dt><dt class="value">NAMED_ARGUMENT</dt><dt class="value">OPTIONAL_ARGUMENT</dt><dt class="value">PARAMETER</dt><dt class="value">SETTER</dt><dt class="value">TOP_LEVEL_VARIABLE</dt><dt class="value">TYPE_PARAMETER</dt></dl></dd><dt class="typeDefinition"><a name="type_Element">Element: object</a></dt><dd>
         <p>
           Information about an element (something that can be declared
           in code).
@@ -2105,7 +2097,18 @@
           An enumeration of the kinds of executable files.
         </p>
         
-      <dl><dt class="value">CLIENT</dt><dt class="value">EITHER</dt><dt class="value">SERVER</dt></dl></dd><dt class="typeDefinition"><a name="type_FilePath">FilePath: String</a></dt><dd>
+      <dl><dt class="value">CLIENT</dt><dt class="value">EITHER</dt><dt class="value">SERVER</dt></dl></dd><dt class="typeDefinition"><a name="type_ExecutionContextId">ExecutionContextId: String</a></dt><dd>
+        
+        <p>
+          The identifier for a execution context.
+        </p>
+      </dd><dt class="typeDefinition"><a name="type_ExecutionService">ExecutionService: String</a></dt><dd>
+        <p>
+          An enumeration of the services provided by the execution
+          domain.
+        </p>
+        
+      <dl><dt class="value">LAUNCH_DATA</dt></dl></dd><dt class="typeDefinition"><a name="type_FilePath">FilePath: String</a></dt><dd>
         
         <p>
           The absolute path of a file.
@@ -2186,14 +2189,16 @@
             <p>
               The path to the defining compilation unit of the library
               in which the referenced element is declared. This data is
-              omitted if there is no referenced element.
+              omitted if there is no referenced element, or if the
+              element is declared inside an HTML file.
             </p>
           </dd><dt class="field"><b><i>containingLibraryName ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
             
             <p>
               The name of the library in which the referenced element is
               declared. This data is omitted if there is no referenced
-              element.
+              element, or if the element is declared inside an HTML
+              file.
             </p>
           </dd><dt class="field"><b><i>dartdoc ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
             
@@ -2202,7 +2207,8 @@
               than the removal of the comment delimiters, including
               leading asterisks in the case of a block comment, the
               dartdoc is unprocessed markdown. This data is omitted if
-              there is no referenced element.
+              there is no referenced element, or if the element has no
+              dartdoc.
             </p>
           </dd><dt class="field"><b><i>elementDescription ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
             
@@ -2501,7 +2507,17 @@
               not be defined. If the function type has zero parameters, this
               field will have a value of "()".
             </p>
-          </dd></dl></dd><dt class="typeDefinition"><a name="type_RefactoringMethodParameterKind">RefactoringMethodParameterKind: String</a></dt><dd>
+          </dd></dl></dd><dt class="typeDefinition"><a name="type_RefactoringFeedback">RefactoringFeedback: object</a></dt><dd>
+        <p>
+          An abstract superclass of all refactoring feedbacks.
+        </p>
+        
+      <dl></dl></dd><dt class="typeDefinition"><a name="type_RefactoringOptions">RefactoringOptions: object</a></dt><dd>
+        <p>
+          An abstract superclass of all refactoring options.
+        </p>
+        
+      <dl></dl></dd><dt class="typeDefinition"><a name="type_RefactoringMethodParameterKind">RefactoringMethodParameterKind: String</a></dt><dd>
         <p>
           An enumeration of the kinds of parameters.
         </p>
@@ -2575,13 +2591,21 @@
           execution of the server.
         </p>
         
-      <dl><dt class="value">GET_ERRORS_ERROR</dt><dd>
+      <dl><dt class="value">GET_ERRORS_INVALID_FILE</dt><dd>
             
             <p>
-              An error occurred during the processing of an
-              "analysis.getErrors" request.
+              An "analysis.getErrors" request specified a FilePath
+              which does not match a file currently subject to
+              analysis.
             </p>
+          </dd><dt class="value">INVALID_OVERLAY_CHANGE</dt><dd>
             
+            <p>
+              An analysis.updateContent request contained a
+              ChangeContentOverlay object which can't be applied, due
+              to an edit having an offset or length that is out of
+              range.
+            </p>
           </dd><dt class="value">INVALID_PARAMETER</dt><dd>
             
             <p>
@@ -2594,18 +2618,26 @@
             </p>
           </dd><dt class="value">SERVER_ALREADY_STARTED</dt><dd>
             
-            
             <p>
               The analysis server has already been started (and hence
               won't accept new connections).
             </p>
+            <p>
+              This error is included for future expansion; at present
+              the analysis server can only speak to one client at a
+              time so this error will never occur.
+            </p>
           </dd><dt class="value">UNANALYZED_PRIORITY_FILES</dt><dd>
             
-            
             <p>
               An "analysis.setPriorityFiles" request includes one or
               more files that are not being analyzed.
             </p>
+            <p>
+              This is a legacy error; it will be removed before the
+              API reaches version 1.0.
+            </p>
+            
           </dd><dt class="value">UNKNOWN_REQUEST</dt><dd>
             
             <p>
@@ -2619,6 +2651,10 @@
               The analysis server was requested to perform an action
               which is not supported.
             </p>
+            <p>
+              This is a legacy error; it will be removed before the
+              API reaches version 1.0.
+            </p>
             
           </dd></dl></dd><dt class="typeDefinition"><a name="type_SearchId">SearchId: String</a></dt><dd>
         
@@ -3004,21 +3040,21 @@
             
             <p>
               The parameters that should be defined for the method.
-              </p><p>
-                It is an error if a REQUIRED or NAMED parameter follows a
-                POSITIONAL parameter.
-                It is an error if a REQUIRED or POSITIONAL parameter follows a
-                NAMED parameter.
-              </p>
-              <ul>
-                <li>
-                  To change the order and/or update proposed paramerers, add
-                  parameters with the same identifiers as proposed.
-                </li>
-                <li>To add new parameters, omit their identifier.</li>
-                <li>To remove some parameters, omit them in this list.</li>
-              </ul>
-            <p></p>
+            </p>
+            <p>
+              It is an error if a REQUIRED or NAMED parameter follows a
+              POSITIONAL parameter.
+              It is an error if a REQUIRED or POSITIONAL parameter follows a
+              NAMED parameter.
+            </p>
+            <ul>
+              <li>
+                To change the order and/or update proposed parameters, add
+                parameters with the same identifiers as proposed.
+              </li>
+              <li>To add new parameters, omit their identifier.</li>
+              <li>To remove some parameters, omit them in this list.</li>
+            </ul>
           </dd><dt class="field"><b><i>extractAll ( bool )</i></b></dt><dd>
             
             <p>
@@ -3036,7 +3072,18 @@
           It is an error if the range contains anything other than all
           or part of the name of a single local variable.
         </p>
-      <h4>Feedback</h4><p>none</p><h4>Options</h4><p>none</p></dd><dt class="refactoring">INLINE_METHOD</dt><dd>
+        
+      <h4>Feedback</h4><dl><dt class="field"><b><i>name ( String )</i></b></dt><dd>
+            
+            <p>
+              The name of the variable being inlined.
+            </p>
+          </dd><dt class="field"><b><i>occurrences ( int )</i></b></dt><dd>
+            
+            <p>
+              The number of times the variable occurs.
+            </p>
+          </dd></dl><h4>Options</h4><p>none</p></dd><dt class="refactoring">INLINE_METHOD</dt><dd>
         <p>
           Inline a method in place of one or all references to that
           method.
@@ -3046,12 +3093,29 @@
           or part of the name of a single method.
         </p>
         
-      <h4>Feedback</h4><p>none</p><h4>Options</h4><dl><dt class="field"><b><i>deleteSource ( bool )</i></b></dt><dd>
+        
+      <h4>Feedback</h4><dl><dt class="field"><b><i>className ( <span style="color:#999999">optional</span> String )</i></b></dt><dd>
             
             <p>
-              True if the method being inlined should be removed. It
-              is an error if this field is true and inlineAll is
-              false.
+              The name of the class enclosing the method being inlined.
+              If not a class member is being inlined, this field will be absent.
+            </p>
+          </dd><dt class="field"><b><i>methodName ( String )</i></b></dt><dd>
+            
+            <p>
+              The name of the method (or function) being inlined.
+            </p>
+          </dd><dt class="field"><b><i>isDeclaration ( bool )</i></b></dt><dd>
+            
+            <p>
+              True if the declaration of the method is selected.
+              So all references should be inlined.
+            </p>
+          </dd></dl><h4>Options</h4><dl><dt class="field"><b><i>deleteSource ( bool )</i></b></dt><dd>
+            
+            <p>
+              True if the method being inlined should be removed.
+              It is an error if this field is true and inlineAll is false.
             </p>
           </dd><dt class="field"><b><i>inlineAll ( bool )</i></b></dt><dd>
             
@@ -3084,6 +3148,18 @@
             <p>
               The length of the name selected to be renamed.
             </p>
+          </dd><dt class="field"><b><i>elementKindName ( String )</i></b></dt><dd>
+            
+            <p>
+              The human-readable description of the kind of element being
+              renamed (such as “class” or “function type
+              alias”).
+            </p>
+          </dd><dt class="field"><b><i>oldName ( String )</i></b></dt><dd>
+            
+            <p>
+              The old name of the element before the refactoring.
+            </p>
           </dd></dl><h4>Options</h4><dl><dt class="field"><b><i>newName ( String )</i></b></dt><dd>
             
             <p>
diff --git a/pkg/analysis_server/lib/http_server.dart b/pkg/analysis_server/lib/http_server.dart
index af63b70..1fbd0af 100644
--- a/pkg/analysis_server/lib/http_server.dart
+++ b/pkg/analysis_server/lib/http_server.dart
@@ -7,7 +7,7 @@
 import 'dart:async';
 import 'dart:io';
 
-import 'package:analysis_server/src/channel.dart';
+import 'package:analysis_server/src/channel/web_socket_channel.dart';
 import 'package:analysis_server/src/get_handler.dart';
 import 'package:analysis_server/src/socket_server.dart';
 
diff --git a/pkg/analysis_server/lib/src/analysis_manager.dart b/pkg/analysis_server/lib/src/analysis_manager.dart
index b4bff7f..22892b8 100644
--- a/pkg/analysis_server/lib/src/analysis_manager.dart
+++ b/pkg/analysis_server/lib/src/analysis_manager.dart
@@ -6,7 +6,8 @@
 import 'dart:convert';
 import 'dart:io';
 
-import 'package:analysis_server/src/channel.dart';
+import 'package:analysis_server/src/channel/channel.dart';
+import 'package:analysis_server/src/channel/web_socket_channel.dart';
 import 'package:analysis_server/src/protocol.dart';
 
 /**
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index c7a723c..e2f739b 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -9,13 +9,13 @@
 
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analysis_server/src/analysis_logger.dart';
-import 'package:analysis_server/src/channel.dart';
+import 'package:analysis_server/src/channel/channel.dart';
 import 'package:analysis_server/src/context_manager.dart';
 import 'package:analysis_server/src/operation/operation_analysis.dart';
 import 'package:analysis_server/src/operation/operation.dart';
 import 'package:analysis_server/src/operation/operation_queue.dart';
-import 'package:analysis_server/src/package_map_provider.dart';
 import 'package:analysis_server/src/protocol.dart' hide Element;
+import 'package:analyzer/source/package_map_provider.dart';
 import 'package:analyzer/source/package_map_resolver.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/engine.dart';
@@ -63,9 +63,9 @@
   @override
   void removeContext(Folder folder) {
     AnalysisContext context = analysisServer.folderMap.remove(folder);
-    analysisServer.sendContextAnalysisCancelledNotifications(
+    analysisServer.sendContextAnalysisDoneNotifications(
         context,
-        'Context was removed');
+        AnalysisDoneReason.CONTEXT_REMOVED);
   }
 
   @override
@@ -90,6 +90,32 @@
   }
 }
 
+
+/**
+ * Enum representing reasons why analysis might be done for a given file.
+ */
+class AnalysisDoneReason {
+  /**
+   * Analysis of the file completed successfully.
+   */
+  static const AnalysisDoneReason COMPLETE =
+      const AnalysisDoneReason._('COMPLETE');
+
+  /**
+   * Analysis of the file was aborted because the context was removed.
+   */
+  static const AnalysisDoneReason CONTEXT_REMOVED =
+      const AnalysisDoneReason._('CONTEXT_REMOVED');
+
+  /**
+   * Textual description of this [AnalysisDoneReason].
+   */
+  final String text;
+
+  const AnalysisDoneReason._(this.text);
+}
+
+
 /**
  * Instances of the class [AnalysisServer] implement a server that listens on a
  * [CommunicationChannel] for analysis requests and process them.
@@ -177,8 +203,13 @@
    * A table mapping [AnalysisContext]s to the completers that should be
    * completed when analysis of this context is finished.
    */
-  Map<AnalysisContext, Completer> contextAnalysisDoneCompleters =
-      new HashMap<AnalysisContext, Completer>();
+  Map<AnalysisContext, Completer<AnalysisDoneReason>> contextAnalysisDoneCompleters =
+      new HashMap<AnalysisContext, Completer<AnalysisDoneReason>>();
+
+  /**
+   * The listeners that are listening for lifecycle events from this server.
+   */
+  List<AnalysisServerListener> listeners = <AnalysisServerListener>[];
 
   /**
    * True if any exceptions thrown by analysis should be propagated up the call
@@ -301,6 +332,16 @@
   }
 
   /**
+   * Add the given [listener] to the list of listeners that are listening for
+   * lifecycle events from this server.
+   */
+  void addAnalysisServerListener(AnalysisServerListener listener) {
+    if (!listeners.contains(listener)) {
+      listeners.add(listener);
+    }
+  }
+
+  /**
    * Adds the given [ServerOperation] to the queue, but does not schedule
    * operations execution.
    */
@@ -382,6 +423,13 @@
   }
 
   /**
+   * Return `true` if analysis is complete.
+   */
+  bool isAnalysisComplete() {
+    return operationQueue.isEmpty;
+  }
+
+  /**
    * Returns `true` if the given [AnalysisContext] is a priority one.
    */
   bool isPriorityContext(AnalysisContext context) {
@@ -420,11 +468,20 @@
         _schedulePerformOperation();
       } else {
         sendStatusNotification(null);
+        _notifyAnalysisComplete();
       }
     }
   }
 
   /**
+   * Remove the given [listener] from the list of listeners that are listening
+   * for lifecycle events from this server.
+   */
+  void removeAnalysisServerListener(AnalysisServerListener listener) {
+    listeners.remove(listener);
+  }
+
+  /**
    * Send status notification to the client. The `operation` is the operation
    * being performed or `null` if analysis is complete.
    */
@@ -471,7 +528,7 @@
   /**
    * Implementation for `analysis.updateContent`.
    */
-  void updateContent(Map<String, dynamic> changes) {
+  void updateContent(String id, Map<String, dynamic> changes) {
     changes.forEach((file, change) {
       AnalysisContext analysisContext = getAnalysisContext(file);
       // TODO(paulberry): handle the case where a file is referred to by more
@@ -487,7 +544,15 @@
           // currently in the content cache.
           TimestampedData<String> oldContents = analysisContext.getContents(
               source);
-          String newContents = SourceEdit.applySequence(oldContents.data, change.edits);
+          String newContents;
+          try {
+            newContents = SourceEdit.applySequence(oldContents.data,
+                change.edits);
+          } on RangeError {
+            throw new RequestFailure(new Response(id, error: new RequestError(
+                RequestErrorCode.INVALID_OVERLAY_CHANGE,
+                'Invalid overlay change')));
+          }
           // TODO(paulberry): to aid in incremental processing it would be
           // better to use setChangedContents.
           analysisContext.setContents(source, newContents);
@@ -548,6 +613,14 @@
   }
 
   /**
+   * Return the [AnalysisContext]s that are being used to analyze the analysis
+   * roots.
+   */
+  Iterable<AnalysisContext> getAnalysisContexts() {
+    return folderMap.values;
+  }
+
+  /**
    * Return the [AnalysisContext] that is used to analyze the given [path].
    * Return `null` if there is no such context.
    */
@@ -559,13 +632,11 @@
       }
     }
     // check if there is a context that analyzed this source
-    {
-      Source source = getSource(path);
-      for (AnalysisContext context in folderMap.values) {
-        SourceKind kind = context.getKindOf(source);
-        if (kind != null) {
-          return context;
-        }
+    Source source = getSource(path);
+    for (AnalysisContext context in folderMap.values) {
+      SourceKind kind = context.getKindOf(source);
+      if (kind != null) {
+        return context;
       }
     }
     return null;
@@ -619,10 +690,11 @@
    * Return an analysis error info containing the array of all of the errors and
    * the line info associated with [file].
    *
-   * Returns `null` if [file] does not belong to any [AnalysisContext].
+   * Returns `null` if [file] does not belong to any [AnalysisContext], or the
+   * file does not exist.
    *
-   * The array of errors will be empty if [file] does not exist or if there are
-   * no errors in [file]. The errors contained in the array can be incomplete.
+   * The array of errors will be empty if there are no errors in [file]. The
+   * errors contained in the array can be incomplete.
    *
    * This method does not wait for all errors to be computed, and returns just
    * the current state.
@@ -633,8 +705,12 @@
     if (context == null) {
       return null;
     }
-    // get errors for the file
+    // prepare Source
     Source source = getSource(file);
+    if (context.getKindOf(source) == SourceKind.UNKNOWN) {
+      return null;
+    }
+    // get errors for the file
     return context.getErrors(source);
   }
 
@@ -711,7 +787,11 @@
 
   /**
    * Returns a [Future] completing when [file] has been completely analyzed, in
-   * particular, all its errors have been computed.
+   * particular, all its errors have been computed.  The future is completed
+   * with an [AnalysisDoneReason] indicating what caused the file's analysis to
+   * be considered complete.
+   *
+   * If the given file doesn't belong to any context, null is returned.
    *
    * TODO(scheglov) this method should be improved.
    *
@@ -720,18 +800,19 @@
    * 2. We should complete the future as soon as the file is analyzed (not wait
    *    until the context is completely finished)
    */
-  Future onFileAnalysisComplete(String file) {
+  Future<AnalysisDoneReason> onFileAnalysisComplete(String file) {
     // prepare AnalysisContext
     AnalysisContext context = getAnalysisContext(file);
     if (context == null) {
-      return new Future.value();
+      return null;
     }
     // schedule context analysis
     schedulePerformAnalysisOperation(context);
     // associate with the context completer
-    Completer completer = contextAnalysisDoneCompleters[context];
+    Completer<AnalysisDoneReason> completer =
+        contextAnalysisDoneCompleters[context];
     if (completer == null) {
-      completer = new Completer();
+      completer = new Completer<AnalysisDoneReason>();
       contextAnalysisDoneCompleters[context] = completer;
     }
     return completer.future;
@@ -741,21 +822,12 @@
    * This method is called when analysis of the given [AnalysisContext] is
    * done.
    */
-  void sendContextAnalysisDoneNotifications(AnalysisContext context) {
-    Completer completer = contextAnalysisDoneCompleters.remove(context);
+  void sendContextAnalysisDoneNotifications(AnalysisContext context,
+                                            AnalysisDoneReason reason) {
+    Completer<AnalysisDoneReason> completer =
+        contextAnalysisDoneCompleters.remove(context);
     if (completer != null) {
-      completer.complete();
-    }
-  }
-
-  /**
-   * This method is called when analysis of the given [AnalysisContext] is
-   * cancelled.
-   */
-  void sendContextAnalysisCancelledNotifications(AnalysisContext context, String message) {
-    Completer completer = contextAnalysisDoneCompleters.remove(context);
-    if (completer != null) {
-      completer.completeError(message);
+      completer.complete(reason);
     }
   }
 
@@ -797,6 +869,15 @@
   }
 
   /**
+   * Notify all listeners that analysis is complete.
+   */
+  void _notifyAnalysisComplete() {
+    listeners.forEach((AnalysisServerListener listener) {
+      listener.analysisComplete();
+    });
+  }
+
+  /**
    * Schedules [performOperation] exection.
    */
   void _schedulePerformOperation() {
@@ -827,5 +908,14 @@
   }
 }
 
+/**
+ * An object that is listening for lifecycle events from an analysis server.
+ */
+abstract class AnalysisServerListener {
+  /**
+   * Analysis is complete.
+   */
+  void analysisComplete();
+}
 
 typedef void OptionUpdater(AnalysisOptionsImpl options);
diff --git a/pkg/analysis_server/lib/src/channel.dart b/pkg/analysis_server/lib/src/channel.dart
deleted file mode 100644
index 9e68890..0000000
--- a/pkg/analysis_server/lib/src/channel.dart
+++ /dev/null
@@ -1,386 +0,0 @@
-// Copyright (c) 2014, 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 channel;
-
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:analysis_server/src/protocol.dart';
-
-/**
- * The abstract class [ClientCommunicationChannel] defines the behavior of
- * objects that allow a client to send [Request]s to an [AnalysisServer] and to
- * receive both [Response]s and [Notification]s.
- */
-abstract class ClientCommunicationChannel {
-  /**
-   * The stream of notifications from the server.
-   */
-  Stream<Notification> notificationStream;
-
-  /**
-   * The stream of responses from the server.
-   */
-  Stream<Response> responseStream;
-
-  /**
-   * Send the given [request] to the server
-   * and return a future with the associated [Response].
-   */
-  Future<Response> sendRequest(Request request);
-
-  /**
-   * Close the channel to the server. Once called, all future communication
-   * with the server via [sendRequest] will silently be ignored.
-   */
-  Future close();
-}
-
-/**
- * The abstract class [ServerCommunicationChannel] defines the behavior of
- * objects that allow an [AnalysisServer] to receive [Request]s and to return
- * both [Response]s and [Notification]s.
- */
-abstract class ServerCommunicationChannel {
-  /**
-   * Listen to the channel for requests. If a request is received, invoke the
-   * [onRequest] function. If an error is encountered while trying to read from
-   * the socket, invoke the [onError] function. If the socket is closed by the
-   * client, invoke the [onDone] function.
-   * Only one listener is allowed per channel.
-   */
-  void listen(void onRequest(Request request), {Function onError, void onDone()});
-
-  /**
-   * Send the given [notification] to the client.
-   */
-  void sendNotification(Notification notification);
-
-  /**
-   * Send the given [response] to the client.
-   */
-  void sendResponse(Response response);
-
-  /**
-   * Close the communication channel.
-   */
-  void close();
-}
-
-/**
- * Instances of the class [WebSocketClientChannel] implement a
- * [ClientCommunicationChannel] that uses a [WebSocket] to communicate with
- * servers.
- */
-class WebSocketClientChannel implements ClientCommunicationChannel {
-  /**
-   * The socket being wrapped.
-   */
-  final WebSocket socket;
-
-  @override
-  Stream<Response> responseStream;
-
-  @override
-  Stream<Notification> notificationStream;
-
-  /**
-   * Initialize a new [WebSocket] wrapper for the given [socket].
-   */
-  WebSocketClientChannel(this.socket) {
-    Stream jsonStream = socket
-        .where((data) => data is String)
-        .transform(new JsonStreamDecoder())
-        .where((json) => json is Map)
-        .asBroadcastStream();
-    responseStream = jsonStream
-        .where((json) => json[Notification.EVENT] == null)
-        .transform(new ResponseConverter())
-        .asBroadcastStream();
-    notificationStream = jsonStream
-        .where((json) => json[Notification.EVENT] != null)
-        .transform(new NotificationConverter())
-        .asBroadcastStream();
-  }
-
-  @override
-  Future<Response> sendRequest(Request request) {
-    String id = request.id;
-    socket.add(JSON.encode(request.toJson()));
-    return responseStream.firstWhere((Response response) => response.id == id);
-  }
-
-  @override
-  Future close() {
-    return socket.close();
-  }
-}
-
-/**
- * Instances of the class [WebSocketServerChannel] implement a
- * [ServerCommunicationChannel] that uses a [WebSocket] to communicate with
- * clients.
- */
-class WebSocketServerChannel implements ServerCommunicationChannel {
-  /**
-   * The socket being wrapped.
-   */
-  final WebSocket socket;
-
-  /**
-   * Initialize a newly create [WebSocket] wrapper to wrap the given [socket].
-   */
-  WebSocketServerChannel(this.socket);
-
-  @override
-  void listen(void onRequest(Request request), {void onError(), void onDone()}) {
-    socket.listen((data) => readRequest(data, onRequest), onError: onError,
-        onDone: onDone);
-  }
-
-  @override
-  void sendNotification(Notification notification) {
-    socket.add(JSON.encode(notification.toJson()));
-  }
-
-  @override
-  void sendResponse(Response response) {
-    socket.add(JSON.encode(response.toJson()));
-  }
-
-  /**
-   * Read a request from the given [data] and use the given function to handle
-   * the request.
-   */
-  void readRequest(Object data, void onRequest(Request request)) {
-    if (data is String) {
-      // Parse the string as a JSON descriptor and process the resulting
-      // structure as a request.
-      Request request = new Request.fromString(data);
-      if (request == null) {
-        sendResponse(new Response.invalidRequestFormat());
-        return;
-      }
-      onRequest(request);
-    } else if (data is List<int>) {
-      // TODO(brianwilkerson) Implement a more efficient protocol.
-      sendResponse(new Response.invalidRequestFormat());
-    } else {
-      sendResponse(new Response.invalidRequestFormat());
-    }
-  }
-
-  @override
-  void close() {
-    socket.close(WebSocketStatus.NORMAL_CLOSURE);
-  }
-}
-
-/**
- * Instances of the class [ByteStreamClientChannel] implement a
- * [ClientCommunicationChannel] that uses a stream and a sink (typically,
- * standard input and standard output) to communicate with servers.
- */
-class ByteStreamClientChannel implements ClientCommunicationChannel {
-  final Stream input;
-  final IOSink output;
-
-  @override
-  Stream<Response> responseStream;
-
-  @override
-  Stream<Notification> notificationStream;
-
-  ByteStreamClientChannel(this.input, this.output) {
-    Stream jsonStream = input.transform((new Utf8Codec()).decoder)
-        .transform(new LineSplitter())
-        .transform(new JsonStreamDecoder())
-        .where((json) => json is Map)
-        .asBroadcastStream();
-    responseStream = jsonStream
-        .where((json) => json[Notification.EVENT] == null)
-        .transform(new ResponseConverter())
-        .asBroadcastStream();
-    notificationStream = jsonStream
-        .where((json) => json[Notification.EVENT] != null)
-        .transform(new NotificationConverter())
-        .asBroadcastStream();
-  }
-
-  @override
-  Future close() {
-    return output.close();
-  }
-
-  @override
-  Future<Response> sendRequest(Request request) {
-    String id = request.id;
-    output.writeln(JSON.encode(request.toJson()));
-    return responseStream.firstWhere((Response response) => response.id == id);
-  }
-}
-
-/**
- * Instances of the class [ByteStreamServerChannel] implement a
- * [ServerCommunicationChannel] that uses a stream and a sink (typically,
- * standard input and standard output) to communicate with clients.
- */
-class ByteStreamServerChannel implements ServerCommunicationChannel {
-  final Stream input;
-  final IOSink output;
-
-  /**
-   * Completer that will be signalled when the input stream is closed.
-   */
-  final Completer _closed = new Completer();
-
-  ByteStreamServerChannel(this.input, this.output);
-
-  /**
-   * Future that will be completed when the input stream is closed.
-   */
-  Future get closed {
-    return _closed.future;
-  }
-
-  @override
-  void listen(void onRequest(Request request), {Function onError, void
-      onDone()}) {
-    input.transform((new Utf8Codec()).decoder).transform(new LineSplitter()
-        ).listen((String data) => _readRequest(data, onRequest), onError: onError,
-        onDone: () {
-      close();
-      onDone();
-    });
-  }
-
-  @override
-  void sendNotification(Notification notification) {
-    // Don't send any further notifications after the communication channel is
-    // closed.
-    if (_closed.isCompleted) {
-      return;
-    }
-    output.writeln(JSON.encode(notification.toJson()));
-  }
-
-  @override
-  void sendResponse(Response response) {
-    // Don't send any further responses after the communication channel is
-    // closed.
-    if (_closed.isCompleted) {
-      return;
-    }
-    output.writeln(JSON.encode(response.toJson()));
-  }
-
-  /**
-   * Read a request from the given [data] and use the given function to handle
-   * the request.
-   */
-  void _readRequest(Object data, void onRequest(Request request)) {
-    // Ignore any further requests after the communication channel is closed.
-    if (_closed.isCompleted) {
-      return;
-    }
-    // Parse the string as a JSON descriptor and process the resulting
-    // structure as a request.
-    Request request = new Request.fromString(data);
-    if (request == null) {
-      sendResponse(new Response.invalidRequestFormat());
-      return;
-    }
-    onRequest(request);
-  }
-
-  @override
-  void close() {
-    if (!_closed.isCompleted) {
-      _closed.complete();
-    }
-  }
-}
-
-/**
- * Instances of the class [JsonStreamDecoder] convert JSON strings to JSON
- * maps.
- */
-class JsonStreamDecoder extends Converter<String, Map> {
-  @override
-  Map convert(String text) => JSON.decode(text);
-
-  @override
-  ChunkedConversionSink startChunkedConversion(Sink sink) =>
-      new ChannelChunkSink<String, Map>(this, sink);
-}
-
-/**
- * Instances of the class [ResponseConverter] convert JSON maps to [Response]s.
- */
-class ResponseConverter extends Converter<Map, Response> {
-  @override
-  Response convert(Map json) => new Response.fromJson(json);
-
-  @override
-  ChunkedConversionSink startChunkedConversion(Sink sink) =>
-      new ChannelChunkSink<Map, Response>(this, sink);
-}
-
-/**
- * Instances of the class [NotificationConverter] convert JSON maps to
- * [Notification]s.
- */
-class NotificationConverter extends Converter<Map, Notification> {
-  @override
-  Notification convert(Map json) => new Notification.fromJson(json);
-
-  @override
-  ChunkedConversionSink startChunkedConversion(Sink sink) =>
-      new ChannelChunkSink<Map, Notification>(this, sink);
-}
-
-/**
- * Instances of the class [ChannelChunkSink] uses a [Converter] to translate
- * chunks.
- */
-class ChannelChunkSink<S, T> extends ChunkedConversionSink<S> {
-  /**
-   * The converter used to translate chunks.
-   */
-  final Converter<S, T> converter;
-
-  /**
-   * The sink to which the converted chunks are added.
-   */
-  final Sink sink;
-
-  /**
-   * A flag indicating whether the sink has been closed.
-   */
-  bool closed = false;
-
-  /**
-   * Initialize a newly create sink to use the given [converter] to convert
-   * chunks before adding them to the given [sink].
-   */
-  ChannelChunkSink(this.converter, this.sink);
-
-  @override
-  void add(S chunk) {
-    if (!closed) {
-      T convertedChunk = converter.convert(chunk);
-      if (convertedChunk != null) {
-        sink.add(convertedChunk);
-      }
-    }
-  }
-
-  @override
-  void close() {
-    closed = true;
-    sink.close();
-  }
-}
diff --git a/pkg/analysis_server/lib/src/channel/byte_stream_channel.dart b/pkg/analysis_server/lib/src/channel/byte_stream_channel.dart
new file mode 100644
index 0000000..2ab4441
--- /dev/null
+++ b/pkg/analysis_server/lib/src/channel/byte_stream_channel.dart
@@ -0,0 +1,137 @@
+// Copyright (c) 2014, 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 channel.byte_stream;
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:analysis_server/src/channel/channel.dart';
+import 'package:analysis_server/src/protocol.dart';
+
+/**
+ * Instances of the class [ByteStreamClientChannel] implement a
+ * [ClientCommunicationChannel] that uses a stream and a sink (typically,
+ * standard input and standard output) to communicate with servers.
+ */
+class ByteStreamClientChannel implements ClientCommunicationChannel {
+  final Stream input;
+  final IOSink output;
+
+  @override
+  Stream<Response> responseStream;
+
+  @override
+  Stream<Notification> notificationStream;
+
+  ByteStreamClientChannel(this.input, this.output) {
+    Stream jsonStream = input.transform((new Utf8Codec()).decoder)
+        .transform(new LineSplitter())
+        .transform(new JsonStreamDecoder())
+        .where((json) => json is Map)
+        .asBroadcastStream();
+    responseStream = jsonStream
+        .where((json) => json[Notification.EVENT] == null)
+        .transform(new ResponseConverter())
+        .asBroadcastStream();
+    notificationStream = jsonStream
+        .where((json) => json[Notification.EVENT] != null)
+        .transform(new NotificationConverter())
+        .asBroadcastStream();
+  }
+
+  @override
+  Future close() {
+    return output.close();
+  }
+
+  @override
+  Future<Response> sendRequest(Request request) {
+    String id = request.id;
+    output.writeln(JSON.encode(request.toJson()));
+    return responseStream.firstWhere((Response response) => response.id == id);
+  }
+}
+
+/**
+ * Instances of the class [ByteStreamServerChannel] implement a
+ * [ServerCommunicationChannel] that uses a stream and a sink (typically,
+ * standard input and standard output) to communicate with clients.
+ */
+class ByteStreamServerChannel implements ServerCommunicationChannel {
+  final Stream input;
+  final IOSink output;
+
+  /**
+   * Completer that will be signalled when the input stream is closed.
+   */
+  final Completer _closed = new Completer();
+
+  ByteStreamServerChannel(this.input, this.output);
+
+  /**
+   * Future that will be completed when the input stream is closed.
+   */
+  Future get closed {
+    return _closed.future;
+  }
+
+  @override
+  void close() {
+    if (!_closed.isCompleted) {
+      _closed.complete();
+    }
+  }
+
+  @override
+  void listen(void onRequest(Request request), {Function onError, void
+      onDone()}) {
+    input.transform((new Utf8Codec()).decoder).transform(new LineSplitter()
+        ).listen((String data) => _readRequest(data, onRequest), onError: onError,
+        onDone: () {
+      close();
+      onDone();
+    });
+  }
+
+  @override
+  void sendNotification(Notification notification) {
+    // Don't send any further notifications after the communication channel is
+    // closed.
+    if (_closed.isCompleted) {
+      return;
+    }
+    output.writeln(JSON.encode(notification.toJson()));
+  }
+
+  @override
+  void sendResponse(Response response) {
+    // Don't send any further responses after the communication channel is
+    // closed.
+    if (_closed.isCompleted) {
+      return;
+    }
+    output.writeln(JSON.encode(response.toJson()));
+  }
+
+  /**
+   * Read a request from the given [data] and use the given function to handle
+   * the request.
+   */
+  void _readRequest(Object data, void onRequest(Request request)) {
+    // Ignore any further requests after the communication channel is closed.
+    if (_closed.isCompleted) {
+      return;
+    }
+    // Parse the string as a JSON descriptor and process the resulting
+    // structure as a request.
+    Request request = new Request.fromString(data);
+    if (request == null) {
+      sendResponse(new Response.invalidRequestFormat());
+      return;
+    }
+    onRequest(request);
+  }
+}
diff --git a/pkg/analysis_server/lib/src/channel/channel.dart b/pkg/analysis_server/lib/src/channel/channel.dart
new file mode 100644
index 0000000..4e4ab2a
--- /dev/null
+++ b/pkg/analysis_server/lib/src/channel/channel.dart
@@ -0,0 +1,151 @@
+// Copyright (c) 2014, 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 channel;
+
+import 'dart:async';
+import 'dart:convert';
+
+import 'package:analysis_server/src/protocol.dart';
+
+/**
+ * The abstract class [ClientCommunicationChannel] defines the behavior of
+ * objects that allow a client to send [Request]s to an [AnalysisServer] and to
+ * receive both [Response]s and [Notification]s.
+ */
+abstract class ClientCommunicationChannel {
+  /**
+   * The stream of notifications from the server.
+   */
+  Stream<Notification> notificationStream;
+
+  /**
+   * The stream of responses from the server.
+   */
+  Stream<Response> responseStream;
+
+  /**
+   * Send the given [request] to the server
+   * and return a future with the associated [Response].
+   */
+  Future<Response> sendRequest(Request request);
+
+  /**
+   * Close the channel to the server. Once called, all future communication
+   * with the server via [sendRequest] will silently be ignored.
+   */
+  Future close();
+}
+
+/**
+ * The abstract class [ServerCommunicationChannel] defines the behavior of
+ * objects that allow an [AnalysisServer] to receive [Request]s and to return
+ * both [Response]s and [Notification]s.
+ */
+abstract class ServerCommunicationChannel {
+  /**
+   * Listen to the channel for requests. If a request is received, invoke the
+   * [onRequest] function. If an error is encountered while trying to read from
+   * the socket, invoke the [onError] function. If the socket is closed by the
+   * client, invoke the [onDone] function.
+   * Only one listener is allowed per channel.
+   */
+  void listen(void onRequest(Request request), {Function onError, void onDone()});
+
+  /**
+   * Send the given [notification] to the client.
+   */
+  void sendNotification(Notification notification);
+
+  /**
+   * Send the given [response] to the client.
+   */
+  void sendResponse(Response response);
+
+  /**
+   * Close the communication channel.
+   */
+  void close();
+}
+
+/**
+ * Instances of the class [JsonStreamDecoder] convert JSON strings to JSON
+ * maps.
+ */
+class JsonStreamDecoder extends Converter<String, Map> {
+  @override
+  Map convert(String text) => JSON.decode(text);
+
+  @override
+  ChunkedConversionSink startChunkedConversion(Sink sink) =>
+      new ChannelChunkSink<String, Map>(this, sink);
+}
+
+/**
+ * Instances of the class [ResponseConverter] convert JSON maps to [Response]s.
+ */
+class ResponseConverter extends Converter<Map, Response> {
+  @override
+  Response convert(Map json) => new Response.fromJson(json);
+
+  @override
+  ChunkedConversionSink startChunkedConversion(Sink sink) =>
+      new ChannelChunkSink<Map, Response>(this, sink);
+}
+
+/**
+ * Instances of the class [NotificationConverter] convert JSON maps to
+ * [Notification]s.
+ */
+class NotificationConverter extends Converter<Map, Notification> {
+  @override
+  Notification convert(Map json) => new Notification.fromJson(json);
+
+  @override
+  ChunkedConversionSink startChunkedConversion(Sink sink) =>
+      new ChannelChunkSink<Map, Notification>(this, sink);
+}
+
+/**
+ * Instances of the class [ChannelChunkSink] uses a [Converter] to translate
+ * chunks.
+ */
+class ChannelChunkSink<S, T> extends ChunkedConversionSink<S> {
+  /**
+   * The converter used to translate chunks.
+   */
+  final Converter<S, T> converter;
+
+  /**
+   * The sink to which the converted chunks are added.
+   */
+  final Sink sink;
+
+  /**
+   * A flag indicating whether the sink has been closed.
+   */
+  bool closed = false;
+
+  /**
+   * Initialize a newly create sink to use the given [converter] to convert
+   * chunks before adding them to the given [sink].
+   */
+  ChannelChunkSink(this.converter, this.sink);
+
+  @override
+  void add(S chunk) {
+    if (!closed) {
+      T convertedChunk = converter.convert(chunk);
+      if (convertedChunk != null) {
+        sink.add(convertedChunk);
+      }
+    }
+  }
+
+  @override
+  void close() {
+    closed = true;
+    sink.close();
+  }
+}
diff --git a/pkg/analysis_server/lib/src/channel/web_socket_channel.dart b/pkg/analysis_server/lib/src/channel/web_socket_channel.dart
new file mode 100644
index 0000000..21835da
--- /dev/null
+++ b/pkg/analysis_server/lib/src/channel/web_socket_channel.dart
@@ -0,0 +1,122 @@
+// Copyright (c) 2014, 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 channel.web_socket;
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:analysis_server/src/protocol.dart';
+import 'package:analysis_server/src/channel/channel.dart';
+
+
+/**
+ * Instances of the class [WebSocketClientChannel] implement a
+ * [ClientCommunicationChannel] that uses a [WebSocket] to communicate with
+ * servers.
+ */
+class WebSocketClientChannel implements ClientCommunicationChannel {
+  /**
+   * The socket being wrapped.
+   */
+  final WebSocket socket;
+
+  @override
+  Stream<Response> responseStream;
+
+  @override
+  Stream<Notification> notificationStream;
+
+  /**
+   * Initialize a new [WebSocket] wrapper for the given [socket].
+   */
+  WebSocketClientChannel(this.socket) {
+    Stream jsonStream = socket
+        .where((data) => data is String)
+        .transform(new JsonStreamDecoder())
+        .where((json) => json is Map)
+        .asBroadcastStream();
+    responseStream = jsonStream
+        .where((json) => json[Notification.EVENT] == null)
+        .transform(new ResponseConverter())
+        .asBroadcastStream();
+    notificationStream = jsonStream
+        .where((json) => json[Notification.EVENT] != null)
+        .transform(new NotificationConverter())
+        .asBroadcastStream();
+  }
+
+  @override
+  Future<Response> sendRequest(Request request) {
+    String id = request.id;
+    socket.add(JSON.encode(request.toJson()));
+    return responseStream.firstWhere((Response response) => response.id == id);
+  }
+
+  @override
+  Future close() {
+    return socket.close();
+  }
+}
+
+/**
+ * Instances of the class [WebSocketServerChannel] implement a
+ * [ServerCommunicationChannel] that uses a [WebSocket] to communicate with
+ * clients.
+ */
+class WebSocketServerChannel implements ServerCommunicationChannel {
+  /**
+   * The socket being wrapped.
+   */
+  final WebSocket socket;
+
+  /**
+   * Initialize a newly create [WebSocket] wrapper to wrap the given [socket].
+   */
+  WebSocketServerChannel(this.socket);
+
+  @override
+  void listen(void onRequest(Request request), {void onError(), void onDone()}) {
+    socket.listen((data) => readRequest(data, onRequest), onError: onError,
+        onDone: onDone);
+  }
+
+  @override
+  void sendNotification(Notification notification) {
+    socket.add(JSON.encode(notification.toJson()));
+  }
+
+  @override
+  void sendResponse(Response response) {
+    socket.add(JSON.encode(response.toJson()));
+  }
+
+  /**
+   * Read a request from the given [data] and use the given function to handle
+   * the request.
+   */
+  void readRequest(Object data, void onRequest(Request request)) {
+    if (data is String) {
+      // Parse the string as a JSON descriptor and process the resulting
+      // structure as a request.
+      Request request = new Request.fromString(data);
+      if (request == null) {
+        sendResponse(new Response.invalidRequestFormat());
+        return;
+      }
+      onRequest(request);
+    } else if (data is List<int>) {
+      // TODO(brianwilkerson) Implement a more efficient protocol.
+      sendResponse(new Response.invalidRequestFormat());
+    } else {
+      sendResponse(new Response.invalidRequestFormat());
+    }
+  }
+
+  @override
+  void close() {
+    socket.close(WebSocketStatus.NORMAL_CLOSURE);
+  }
+}
diff --git a/pkg/analysis_server/lib/src/constants.dart b/pkg/analysis_server/lib/src/constants.dart
index 45a468c..b77e283 100644
--- a/pkg/analysis_server/lib/src/constants.dart
+++ b/pkg/analysis_server/lib/src/constants.dart
@@ -29,7 +29,6 @@
 const String ANALYSIS_UPDATE_CONTENT = 'analysis.updateContent';
 const String ANALYSIS_UPDATE_OPTIONS = 'analysis.updateOptions';
 
-
 //
 // Analysis notifications
 //
@@ -74,6 +73,19 @@
 const String EDIT_GET_REFACTORING = 'edit.getRefactoring';
 
 //
+// Execution methods
+//
+const String EXECUTION_CREATE_CONTEXT = 'execution.createContext';
+const String EXECUTION_DELETE_CONTEXT = 'execution.deleteContext';
+const String EXECUTION_MAP_URI = 'execution.mapUri';
+const String EXECUTION_SET_SUBSCRIPTIONS = 'execution.setSubscriptions';
+
+//
+// Execution notifications
+//
+const String EXECUTION_LAUNCH_DATA = 'execution.launchData';
+
+//
 // Analysis option names
 //
 const String ANALYZE_ANGULAR = 'analyzeAngular'; // boolean
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 13ff886..4a7ceed 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -7,8 +7,8 @@
 import 'dart:async';
 import 'dart:collection';
 
-import 'package:analysis_server/src/package_map_provider.dart';
 import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/source/package_map_provider.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:path/path.dart' as pathos;
diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart
index ee538e0..f507f14 100644
--- a/pkg/analysis_server/lib/src/domain_analysis.dart
+++ b/pkg/analysis_server/lib/src/domain_analysis.dart
@@ -4,6 +4,8 @@
 
 library domain.analysis;
 
+import 'dart:async';
+
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/computer/computer_hover.dart';
 import 'package:analysis_server/src/constants.dart';
@@ -32,25 +34,33 @@
    */
   Response getErrors(Request request) {
     String file = new AnalysisGetErrorsParams.fromRequest(request).file;
-    server.onFileAnalysisComplete(file).then((_) {
-      engine.AnalysisErrorInfo errorInfo = server.getErrors(file);
-      List<AnalysisError> errors;
-      if (errorInfo == null) {
-        errors = [];
-      } else {
-        errors = AnalysisError.listFromEngine(errorInfo.lineInfo,
-            errorInfo.errors);
+    Future<AnalysisDoneReason> completionFuture =
+        server.onFileAnalysisComplete(file);
+    if (completionFuture == null) {
+      return new Response.getErrorsInvalidFile(request);
+    }
+    completionFuture.then((AnalysisDoneReason reason) {
+      switch (reason) {
+        case AnalysisDoneReason.COMPLETE:
+          engine.AnalysisErrorInfo errorInfo = server.getErrors(file);
+          List<AnalysisError> errors;
+          if (errorInfo == null) {
+            server.sendResponse(new Response.getErrorsInvalidFile(request));
+          } else {
+            errors = AnalysisError.listFromEngine(errorInfo.lineInfo,
+                errorInfo.errors);
+            server.sendResponse(new AnalysisGetErrorsResult(errors).toResponse(
+                request.id));
+          }
+          break;
+        case AnalysisDoneReason.CONTEXT_REMOVED:
+          // The active contexts have changed, so try again.
+          Response response = getErrors(request);
+          if (response != Response.DELAYED_RESPONSE) {
+            server.sendResponse(response);
+          }
+          break;
       }
-      server.sendResponse(new AnalysisGetErrorsResult(errors).toResponse(
-          request.id));
-    }).catchError((message) {
-      if (message is! String) {
-        engine.AnalysisEngine.instance.logger.logError(
-            'Illegal error message during getErrors: $message');
-        message = '';
-      }
-      server.sendResponse(new Response.getErrorsError(request, message,
-          new AnalysisGetErrorsResult([]).toJson()));
     });
     // delay response
     return Response.DELAYED_RESPONSE;
@@ -139,7 +149,7 @@
    */
   Response updateContent(Request request) {
     var params = new AnalysisUpdateContentParams.fromRequest(request);
-    server.updateContent(params.files);
+    server.updateContent(request.id, params.files);
     return new AnalysisUpdateContentResult().toResponse(request.id);
   }
 
diff --git a/pkg/analysis_server/lib/src/domain_execution.dart b/pkg/analysis_server/lib/src/domain_execution.dart
new file mode 100644
index 0000000..9d83cba
--- /dev/null
+++ b/pkg/analysis_server/lib/src/domain_execution.dart
@@ -0,0 +1,210 @@
+// Copyright (c) 2014, 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 domain.execution;
+
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/constants.dart';
+import 'package:analysis_server/src/protocol.dart';
+import 'dart:collection';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/source.dart';
+
+/**
+ * Instances of the class [ExecutionDomainHandler] implement a [RequestHandler]
+ * that handles requests in the `execution` domain.
+ */
+class ExecutionDomainHandler implements RequestHandler {
+  /**
+   * The analysis server that is using this handler to process requests.
+   */
+  final AnalysisServer server;
+
+  /**
+   * The next execution context identifier to be returned.
+   */
+  int nextContextId = 0;
+
+  /**
+   * A table mapping execution context id's to the root of the context.
+   */
+  Map<String, String> contextMap = new HashMap<String, String>();
+
+  /**
+   * The listener used to send notifications when
+   */
+  LaunchDataNotificationListener launchDataListener;
+
+  /**
+   * Initialize a newly created handler to handle requests for the given [server].
+   */
+  ExecutionDomainHandler(this.server);
+
+  /**
+   * Implement the `execution.createContext` request.
+   */
+  Response createContext(Request request) {
+    String file =
+        new ExecutionCreateContextParams.fromRequest(request).contextRoot;
+    String contextId = (nextContextId++).toString();
+    contextMap[contextId] = file;
+    return new ExecutionCreateContextResult(contextId).toResponse(request.id);
+  }
+
+  /**
+   * Implement the `execution.deleteContext` request.
+   */
+  Response deleteContext(Request request) {
+    String contextId = new ExecutionDeleteContextParams.fromRequest(request).id;
+    contextMap.remove(contextId);
+    return new ExecutionDeleteContextResult().toResponse(request.id);
+  }
+
+  @override
+  Response handleRequest(Request request) {
+    try {
+      String requestName = request.method;
+      if (requestName == EXECUTION_CREATE_CONTEXT) {
+        return createContext(request);
+      } else if (requestName == EXECUTION_DELETE_CONTEXT) {
+        return deleteContext(request);
+      } else if (requestName == EXECUTION_MAP_URI) {
+        return mapUri(request);
+      } else if (requestName == EXECUTION_SET_SUBSCRIPTIONS) {
+        return setSubscriptions(request);
+      }
+    } on RequestFailure catch (exception) {
+      return exception.response;
+    }
+    return null;
+  }
+
+  /**
+   * Implement the 'execution.mapUri' request.
+   */
+  Response mapUri(Request request) {
+    ExecutionMapUriParams params =
+        new ExecutionMapUriParams.fromRequest(request);
+    String contextId = params.id;
+    String path = contextMap[contextId];
+    if (path == null) {
+      return new Response.invalidParameter(
+          request,
+          'id',
+          'There is no execution context with an id of $contextId');
+    }
+    AnalysisContext context = server.getAnalysisContext(path);
+    if (params.file != null) {
+      if (params.uri != null) {
+        return new Response.invalidParameter(
+            request,
+            'file',
+            'Either file or uri must be provided, but not both');
+      }
+      Source source = server.getSource(path);
+      // TODO(brianwilkerson) Figure out how to perform the mapping.
+      String uri = '';
+      return new ExecutionMapUriResult(uri: uri).toResponse(request.id);
+    } else if (params.uri != null) {
+      // TODO(brianwilkerson) Figure out how to perform the mapping.
+      String file = '';
+      return new ExecutionMapUriResult(file: file).toResponse(request.id);
+    }
+    return new Response.invalidParameter(
+        request,
+        'file',
+        'Either file or uri must be provided');
+  }
+
+  /**
+   * Implement the 'execution.setSubscriptions' request.
+   */
+  Response setSubscriptions(Request request) {
+    List<ExecutionService> subscriptions =
+        new ExecutionSetSubscriptionsParams.fromRequest(request).subscriptions;
+    if (subscriptions.contains(ExecutionService.LAUNCH_DATA)) {
+      if (launchDataListener == null) {
+        launchDataListener = new LaunchDataNotificationListener(server);
+        server.addAnalysisServerListener(launchDataListener);
+        if (server.isAnalysisComplete()) {
+          launchDataListener.analysisComplete();
+        }
+      }
+    } else {
+      if (launchDataListener != null) {
+        server.removeAnalysisServerListener(launchDataListener);
+        launchDataListener = null;
+      }
+    }
+    return new ExecutionSetSubscriptionsResult().toResponse(request.id);
+  }
+}
+
+/**
+ * Instances of the class [LaunchDataNotificationListener] listen for analysis
+ * to be complete and then notify the client of the launch data that has been
+ * computed.
+ */
+class LaunchDataNotificationListener implements AnalysisServerListener {
+  /**
+   * The analysis server used to send notifications.
+   */
+  final AnalysisServer server;
+
+  /**
+   * Initialize a newly created listener to send notifications through the given
+   * [server] when analysis is complete.
+   */
+  LaunchDataNotificationListener(this.server);
+
+  @override
+  void analysisComplete() {
+    List<ExecutableFile> executables = [];
+    Map<String, List<String>> dartToHtml = new HashMap<String, List<String>>();
+    Map<String, List<String>> htmlToDart = new HashMap<String, List<String>>();
+    for (AnalysisContext context in server.getAnalysisContexts()) {
+      List<Source> clientSources = context.launchableClientLibrarySources;
+      List<Source> serverSources = context.launchableServerLibrarySources;
+      for (Source source in clientSources) {
+        ExecutableKind kind = ExecutableKind.CLIENT;
+        if (serverSources.remove(source)) {
+          kind = ExecutableKind.EITHER;
+        }
+        executables.add(new ExecutableFile(source.fullName, kind));
+      }
+      for (Source source in serverSources) {
+        executables.add(
+            new ExecutableFile(source.fullName, ExecutableKind.SERVER));
+      }
+
+      for (Source librarySource in context.librarySources) {
+        List<Source> files = context.getHtmlFilesReferencing(librarySource);
+        if (files.isNotEmpty) {
+          // TODO(brianwilkerson) Handle the case where the same library is
+          // being analyzed in multiple contexts.
+          dartToHtml[librarySource.fullName] = getFullNames(files);
+        }
+      }
+
+      for (Source htmlSource in context.htmlSources) {
+        List<Source> libraries =
+            context.getLibrariesReferencedFromHtml(htmlSource);
+        if (libraries.isNotEmpty) {
+          // TODO(brianwilkerson) Handle the case where the same HTML file is
+          // being analyzed in multiple contexts.
+          htmlToDart[htmlSource.fullName] = getFullNames(libraries);
+        }
+      }
+    }
+    server.sendNotification(
+        new ExecutionLaunchDataParams(
+            executables,
+            dartToHtml,
+            htmlToDart).toNotification());
+  }
+
+  List<String> getFullNames(List<Source> sources) {
+    return sources.map((Source source) => source.fullName).toList();
+  }
+}
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index 901cffd..a576772 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -111,7 +111,8 @@
             if (fixes.isNotEmpty) {
               AnalysisError serverError =
                   new AnalysisError.fromEngine(lineInfo, error);
-              AnalysisErrorFixes errorFixes = new AnalysisErrorFixes(serverError);
+              AnalysisErrorFixes errorFixes =
+                  new AnalysisErrorFixes(serverError);
               errorFixesList.add(errorFixes);
               fixes.forEach((fix) {
                 errorFixes.addFix(fix);
@@ -184,6 +185,16 @@
         finalStatus.hasFatalError;
   }
 
+  /**
+   * Checks if [refactoring] requires options.
+   */
+  bool get _requiresOptions {
+    if (refactoring is InlineLocalRefactoring) {
+      return false;
+    }
+    return true;
+  }
+
   void getRefactoring(Request request) {
     // prepare for processing the request
     requestId = request.id;
@@ -191,19 +202,23 @@
     // process the request
     var params = new EditGetRefactoringParams.fromRequest(request);
     _init(params.kind, params.file, params.offset, params.length).then((_) {
-      if (_hasFatalError) {
+      if (initStatus.hasFatalError) {
         return _sendResultResponse();
       }
       // set options
-      if (params.options == null) {
-        return _sendResultResponse();
-      }
-      optionsStatus = _setOptions(params, request);
-      if (_hasFatalError) {
-        return _sendResultResponse();
+      if (_requiresOptions) {
+        if (params.options == null) {
+          optionsStatus = new RefactoringStatus();
+          return _sendResultResponse();
+        }
+        optionsStatus = _setOptions(params);
+        if (_hasFatalError) {
+          return _sendResultResponse();
+        }
       }
       // done if just validation
       if (params.validateOnly) {
+        finalStatus = new RefactoringStatus();
         return _sendResultResponse();
       }
       // validation and create change
@@ -247,6 +262,29 @@
         feedback = new ExtractLocalVariableFeedback([], [], []);
       }
     }
+    if (kind == RefactoringKind.EXTRACT_METHOD) {
+      List<CompilationUnit> units = server.getResolvedCompilationUnits(file);
+      if (units.isNotEmpty) {
+        refactoring =
+            new ExtractMethodRefactoring(searchEngine, units[0], offset, length);
+        feedback =
+            new ExtractMethodFeedback(offset, length, null, [], false, [], [], []);
+      }
+    }
+    if (kind == RefactoringKind.INLINE_LOCAL_VARIABLE) {
+      List<CompilationUnit> units = server.getResolvedCompilationUnits(file);
+      if (units.isNotEmpty) {
+        refactoring =
+            new InlineLocalRefactoring(searchEngine, units[0], offset);
+      }
+    }
+    if (kind == RefactoringKind.INLINE_METHOD) {
+      List<CompilationUnit> units = server.getResolvedCompilationUnits(file);
+      if (units.isNotEmpty) {
+        refactoring =
+            new InlineMethodRefactoring(searchEngine, units[0], offset);
+      }
+    }
     if (kind == RefactoringKind.RENAME) {
       List<AstNode> nodes = server.getNodesAtOffset(file, offset);
       List<Element> elements = server.getElementsAtOffset(file, offset);
@@ -254,7 +292,8 @@
         AstNode node = nodes[0];
         Element element = elements[0];
         refactoring = new RenameRefactoring(searchEngine, element);
-        feedback = new RenameFeedback(node.offset, node.length);
+        feedback =
+            new RenameFeedback(node.offset, node.length, 'kind', 'oldName');
       }
     }
     if (refactoring == null) {
@@ -272,6 +311,39 @@
         feedback.offsets = refactoring.offsets;
         feedback.lengths = refactoring.lengths;
       }
+      if (refactoring is ExtractMethodRefactoring) {
+        ExtractMethodRefactoring refactoring = this.refactoring;
+        ExtractMethodFeedback feedback = this.feedback;
+        feedback.canCreateGetter = refactoring.canCreateGetter;
+        feedback.returnType = refactoring.returnType;
+        feedback.names = refactoring.names;
+        feedback.parameters = refactoring.parameters;
+        feedback.offsets = refactoring.offsets;
+        feedback.lengths = refactoring.lengths;
+      }
+      if (refactoring is InlineLocalRefactoring) {
+        InlineLocalRefactoring refactoring = this.refactoring;
+        if (!status.hasFatalError) {
+          feedback = new InlineLocalVariableFeedback(
+              refactoring.variableName,
+              refactoring.referenceCount);
+        }
+      }
+      if (refactoring is InlineMethodRefactoring) {
+        InlineMethodRefactoring refactoring = this.refactoring;
+        if (!status.hasFatalError) {
+          feedback = new InlineMethodFeedback(
+              refactoring.methodName,
+              refactoring.isDeclaration,
+              className: refactoring.className);
+        }
+      }
+      if (refactoring is RenameRefactoring) {
+        RenameRefactoring refactoring = this.refactoring;
+        RenameFeedback feedback = this.feedback;
+        feedback.elementKindName = refactoring.elementKindName;
+        feedback.oldName = refactoring.oldName;
+      }
       return initStatus;
     });
   }
@@ -285,7 +357,9 @@
   }
 
   void _sendResultResponse() {
-    result.feedback = feedback.toJson();
+    if (feedback != null) {
+      result.feedback = feedback;
+    }
     // set problems
     {
       RefactoringStatus status = new RefactoringStatus();
@@ -301,20 +375,36 @@
     result = null;
   }
 
-  RefactoringStatus _setOptions(EditGetRefactoringParams params,
-                                Request request) {
+  RefactoringStatus _setOptions(EditGetRefactoringParams params) {
     if (refactoring is ExtractLocalRefactoring) {
       ExtractLocalRefactoring extractRefactoring = refactoring;
-      ExtractLocalVariableOptions extractOptions =
-          new ExtractLocalVariableOptions.fromRefactoringParams(params, request);
+      ExtractLocalVariableOptions extractOptions = params.options;
       extractRefactoring.name = extractOptions.name;
       extractRefactoring.extractAll = extractOptions.extractAll;
       return extractRefactoring.checkName();
     }
+    if (refactoring is ExtractMethodRefactoring) {
+      ExtractMethodRefactoring extractRefactoring = this.refactoring;
+      ExtractMethodOptions extractOptions = params.options;
+      extractRefactoring.createGetter = extractOptions.createGetter;
+      extractRefactoring.extractAll = extractOptions.extractAll;
+      extractRefactoring.name = extractOptions.name;
+      if (extractOptions.parameters != null) {
+        extractRefactoring.parameters = extractOptions.parameters;
+      }
+      extractRefactoring.returnType = extractOptions.returnType;
+      return extractRefactoring.checkName();
+    }
+    if (refactoring is InlineMethodRefactoring) {
+      InlineMethodRefactoring inlineRefactoring = this.refactoring;
+      InlineMethodOptions inlineOptions = params.options;
+      inlineRefactoring.deleteSource = inlineOptions.deleteSource;
+      inlineRefactoring.inlineAll = inlineOptions.inlineAll;
+      return new RefactoringStatus();
+    }
     if (refactoring is RenameRefactoring) {
       RenameRefactoring renameRefactoring = refactoring;
-      RenameOptions renameOptions =
-          new RenameOptions.fromRefactoringParams(params, request);
+      RenameOptions renameOptions = params.options;
       renameRefactoring.newName = renameOptions.newName;
       return renameRefactoring.checkNewName();
     }
diff --git a/pkg/analysis_server/lib/src/generated_protocol.dart b/pkg/analysis_server/lib/src/generated_protocol.dart
index 4ca1abe..ae83b1c 100644
--- a/pkg/analysis_server/lib/src/generated_protocol.dart
+++ b/pkg/analysis_server/lib/src/generated_protocol.dart
@@ -63,7 +63,7 @@
 
   factory ServerGetVersionResult.fromResponse(Response response) {
     return new ServerGetVersionResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
@@ -305,7 +305,7 @@
 
   factory ServerErrorParams.fromNotification(Notification notification) {
     return new ServerErrorParams.fromJson(
-        new ResponseDecoder(), "params", notification._params);
+        new ResponseDecoder(null), "params", notification._params);
   }
 
   Map<String, dynamic> toJson() {
@@ -376,7 +376,7 @@
 
   factory ServerStatusParams.fromNotification(Notification notification) {
     return new ServerStatusParams.fromJson(
-        new ResponseDecoder(), "params", notification._params);
+        new ResponseDecoder(null), "params", notification._params);
   }
 
   Map<String, dynamic> toJson() {
@@ -510,7 +510,7 @@
 
   factory AnalysisGetErrorsResult.fromResponse(Response response) {
     return new AnalysisGetErrorsResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
@@ -661,7 +661,7 @@
 
   factory AnalysisGetHoverResult.fromResponse(Response response) {
     return new AnalysisGetHoverResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
@@ -1234,7 +1234,7 @@
 
   factory AnalysisErrorsParams.fromNotification(Notification notification) {
     return new AnalysisErrorsParams.fromJson(
-        new ResponseDecoder(), "params", notification._params);
+        new ResponseDecoder(null), "params", notification._params);
   }
 
   Map<String, dynamic> toJson() {
@@ -1303,7 +1303,7 @@
 
   factory AnalysisFlushResultsParams.fromNotification(Notification notification) {
     return new AnalysisFlushResultsParams.fromJson(
-        new ResponseDecoder(), "params", notification._params);
+        new ResponseDecoder(null), "params", notification._params);
   }
 
   Map<String, dynamic> toJson() {
@@ -1381,7 +1381,7 @@
 
   factory AnalysisFoldingParams.fromNotification(Notification notification) {
     return new AnalysisFoldingParams.fromJson(
-        new ResponseDecoder(), "params", notification._params);
+        new ResponseDecoder(null), "params", notification._params);
   }
 
   Map<String, dynamic> toJson() {
@@ -1466,7 +1466,7 @@
 
   factory AnalysisHighlightsParams.fromNotification(Notification notification) {
     return new AnalysisHighlightsParams.fromJson(
-        new ResponseDecoder(), "params", notification._params);
+        new ResponseDecoder(null), "params", notification._params);
   }
 
   Map<String, dynamic> toJson() {
@@ -1552,7 +1552,7 @@
 
   factory AnalysisNavigationParams.fromNotification(Notification notification) {
     return new AnalysisNavigationParams.fromJson(
-        new ResponseDecoder(), "params", notification._params);
+        new ResponseDecoder(null), "params", notification._params);
   }
 
   Map<String, dynamic> toJson() {
@@ -1633,7 +1633,7 @@
 
   factory AnalysisOccurrencesParams.fromNotification(Notification notification) {
     return new AnalysisOccurrencesParams.fromJson(
-        new ResponseDecoder(), "params", notification._params);
+        new ResponseDecoder(null), "params", notification._params);
   }
 
   Map<String, dynamic> toJson() {
@@ -1714,7 +1714,7 @@
 
   factory AnalysisOutlineParams.fromNotification(Notification notification) {
     return new AnalysisOutlineParams.fromJson(
-        new ResponseDecoder(), "params", notification._params);
+        new ResponseDecoder(null), "params", notification._params);
   }
 
   Map<String, dynamic> toJson() {
@@ -1795,7 +1795,7 @@
 
   factory AnalysisOverridesParams.fromNotification(Notification notification) {
     return new AnalysisOverridesParams.fromJson(
-        new ResponseDecoder(), "params", notification._params);
+        new ResponseDecoder(null), "params", notification._params);
   }
 
   Map<String, dynamic> toJson() {
@@ -1945,7 +1945,7 @@
 
   factory CompletionGetSuggestionsResult.fromResponse(Response response) {
     return new CompletionGetSuggestionsResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
@@ -2069,7 +2069,7 @@
 
   factory CompletionResultsParams.fromNotification(Notification notification) {
     return new CompletionResultsParams.fromJson(
-        new ResponseDecoder(), "params", notification._params);
+        new ResponseDecoder(null), "params", notification._params);
   }
 
   Map<String, dynamic> toJson() {
@@ -2259,7 +2259,7 @@
 
   factory SearchFindElementReferencesResult.fromResponse(Response response) {
     return new SearchFindElementReferencesResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
@@ -2398,7 +2398,7 @@
 
   factory SearchFindMemberDeclarationsResult.fromResponse(Response response) {
     return new SearchFindMemberDeclarationsResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
@@ -2530,7 +2530,7 @@
 
   factory SearchFindMemberReferencesResult.fromResponse(Response response) {
     return new SearchFindMemberReferencesResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
@@ -2663,7 +2663,7 @@
 
   factory SearchFindTopLevelDeclarationsResult.fromResponse(Response response) {
     return new SearchFindTopLevelDeclarationsResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
@@ -2823,7 +2823,7 @@
 
   factory SearchGetTypeHierarchyResult.fromResponse(Response response) {
     return new SearchGetTypeHierarchyResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
@@ -2916,7 +2916,7 @@
 
   factory SearchResultsParams.fromNotification(Notification notification) {
     return new SearchResultsParams.fromJson(
-        new ResponseDecoder(), "params", notification._params);
+        new ResponseDecoder(null), "params", notification._params);
   }
 
   Map<String, dynamic> toJson() {
@@ -3084,7 +3084,7 @@
 
   factory EditGetAssistsResult.fromResponse(Response response) {
     return new EditGetAssistsResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
@@ -3246,7 +3246,7 @@
 
   factory EditGetAvailableRefactoringsResult.fromResponse(Response response) {
     return new EditGetAvailableRefactoringsResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
@@ -3368,12 +3368,7 @@
  */
 class EditGetFixesResult implements HasToJson {
   /**
-   * The fixes that are available for each of the analysis errors. There is a
-   * one-to-one correspondence between the analysis errors in the request and
-   * the lists of changes in the response. In particular, it is always the case
-   * that errors.length == fixes.length and that fixes[i] is the list of fixes
-   * for the error in errors[i]. The list of changes corresponding to an error
-   * can be empty if there are no fixes available for that error.
+   * The fixes that are available for the errors at the given offset.
    */
   List<AnalysisErrorFixes> fixes;
 
@@ -3398,7 +3393,7 @@
 
   factory EditGetFixesResult.fromResponse(Response response) {
     return new EditGetFixesResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
@@ -3439,7 +3434,7 @@
  *   "offset": int
  *   "length": int
  *   "validateOnly": bool
- *   "options": optional object
+ *   "options": optional RefactoringOptions
  * }
  */
 class EditGetRefactoringParams implements HasToJson {
@@ -3476,7 +3471,7 @@
    * as “Options”. This field can be omitted if the refactoring does not
    * require any options or if the values of those options are not known.
    */
-  Map options;
+  RefactoringOptions options;
 
   EditGetRefactoringParams(this.kind, this.file, this.offset, this.length, this.validateOnly, {this.options});
 
@@ -3515,9 +3510,9 @@
       } else {
         throw jsonDecoder.missingKey(jsonPath, "validateOnly");
       }
-      Map options;
+      RefactoringOptions options;
       if (json.containsKey("options")) {
-        options = json["options"];
+        options = new RefactoringOptions.fromJson(jsonDecoder, jsonPath + ".options", json["options"], kind);
       }
       return new EditGetRefactoringParams(kind, file, offset, length, validateOnly, options: options);
     } else {
@@ -3526,8 +3521,10 @@
   }
 
   factory EditGetRefactoringParams.fromRequest(Request request) {
-    return new EditGetRefactoringParams.fromJson(
+    var params = new EditGetRefactoringParams.fromJson(
         new RequestDecoder(request), "params", request._params);
+    REQUEST_ID_REFACTORING_KINDS[request.id] = params.kind;
+    return params;
   }
 
   Map<String, dynamic> toJson() {
@@ -3538,7 +3535,7 @@
     result["length"] = length;
     result["validateOnly"] = validateOnly;
     if (options != null) {
-      result["options"] = options;
+      result["options"] = options.toJson();
     }
     return result;
   }
@@ -3581,7 +3578,7 @@
  *
  * {
  *   "problems": List<RefactoringProblem>
- *   "feedback": optional object
+ *   "feedback": optional RefactoringFeedback
  *   "change": optional SourceChange
  *   "potentialEdits": optional List<String>
  * }
@@ -3599,7 +3596,7 @@
    * returned is documented in the section titled Refactorings, labeled as
    * “Feedback”.
    */
-  Map feedback;
+  RefactoringFeedback feedback;
 
   /**
    * The changes that are to be applied to affect the refactoring. This field
@@ -3636,9 +3633,9 @@
       } else {
         throw jsonDecoder.missingKey(jsonPath, "problems");
       }
-      Map feedback;
+      RefactoringFeedback feedback;
       if (json.containsKey("feedback")) {
-        feedback = json["feedback"];
+        feedback = new RefactoringFeedback.fromJson(jsonDecoder, jsonPath + ".feedback", json["feedback"], json);
       }
       SourceChange change;
       if (json.containsKey("change")) {
@@ -3658,14 +3655,14 @@
 
   factory EditGetRefactoringResult.fromResponse(Response response) {
     return new EditGetRefactoringResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
     Map<String, dynamic> result = {};
     result["problems"] = problems.map((RefactoringProblem value) => value.toJson()).toList();
     if (feedback != null) {
-      result["feedback"] = feedback;
+      result["feedback"] = feedback.toJson();
     }
     if (change != null) {
       result["change"] = change.toJson();
@@ -3706,21 +3703,21 @@
 }
 
 /**
- * debug.createContext params
+ * execution.createContext params
  *
  * {
  *   "contextRoot": FilePath
  * }
  */
-class DebugCreateContextParams implements HasToJson {
+class ExecutionCreateContextParams implements HasToJson {
   /**
    * The path of the Dart or HTML file that will be launched.
    */
   String contextRoot;
 
-  DebugCreateContextParams(this.contextRoot);
+  ExecutionCreateContextParams(this.contextRoot);
 
-  factory DebugCreateContextParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+  factory ExecutionCreateContextParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
     if (json == null) {
       json = {};
     }
@@ -3731,14 +3728,14 @@
       } else {
         throw jsonDecoder.missingKey(jsonPath, "contextRoot");
       }
-      return new DebugCreateContextParams(contextRoot);
+      return new ExecutionCreateContextParams(contextRoot);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "debug.createContext params");
+      throw jsonDecoder.mismatch(jsonPath, "execution.createContext params");
     }
   }
 
-  factory DebugCreateContextParams.fromRequest(Request request) {
-    return new DebugCreateContextParams.fromJson(
+  factory ExecutionCreateContextParams.fromRequest(Request request) {
+    return new ExecutionCreateContextParams.fromJson(
         new RequestDecoder(request), "params", request._params);
   }
 
@@ -3749,7 +3746,7 @@
   }
 
   Request toRequest(String id) {
-    return new Request(id, "debug.createContext", toJson());
+    return new Request(id, "execution.createContext", toJson());
   }
 
   @override
@@ -3757,7 +3754,7 @@
 
   @override
   bool operator==(other) {
-    if (other is DebugCreateContextParams) {
+    if (other is ExecutionCreateContextParams) {
       return contextRoot == other.contextRoot;
     }
     return false;
@@ -3772,21 +3769,21 @@
 }
 
 /**
- * debug.createContext result
+ * execution.createContext result
  *
  * {
- *   "id": DebugContextId
+ *   "id": ExecutionContextId
  * }
  */
-class DebugCreateContextResult implements HasToJson {
+class ExecutionCreateContextResult implements HasToJson {
   /**
-   * The identifier used to refer to the debugging context that was created.
+   * The identifier used to refer to the execution context that was created.
    */
   String id;
 
-  DebugCreateContextResult(this.id);
+  ExecutionCreateContextResult(this.id);
 
-  factory DebugCreateContextResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+  factory ExecutionCreateContextResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
     if (json == null) {
       json = {};
     }
@@ -3797,15 +3794,15 @@
       } else {
         throw jsonDecoder.missingKey(jsonPath, "id");
       }
-      return new DebugCreateContextResult(id);
+      return new ExecutionCreateContextResult(id);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "debug.createContext result");
+      throw jsonDecoder.mismatch(jsonPath, "execution.createContext result");
     }
   }
 
-  factory DebugCreateContextResult.fromResponse(Response response) {
-    return new DebugCreateContextResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+  factory ExecutionCreateContextResult.fromResponse(Response response) {
+    return new ExecutionCreateContextResult.fromJson(
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
@@ -3823,7 +3820,7 @@
 
   @override
   bool operator==(other) {
-    if (other is DebugCreateContextResult) {
+    if (other is ExecutionCreateContextResult) {
       return id == other.id;
     }
     return false;
@@ -3838,21 +3835,21 @@
 }
 
 /**
- * debug.deleteContext params
+ * execution.deleteContext params
  *
  * {
- *   "id": DebugContextId
+ *   "id": ExecutionContextId
  * }
  */
-class DebugDeleteContextParams implements HasToJson {
+class ExecutionDeleteContextParams implements HasToJson {
   /**
-   * The identifier of the debugging context that is to be deleted.
+   * The identifier of the execution context that is to be deleted.
    */
   String id;
 
-  DebugDeleteContextParams(this.id);
+  ExecutionDeleteContextParams(this.id);
 
-  factory DebugDeleteContextParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+  factory ExecutionDeleteContextParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
     if (json == null) {
       json = {};
     }
@@ -3863,14 +3860,14 @@
       } else {
         throw jsonDecoder.missingKey(jsonPath, "id");
       }
-      return new DebugDeleteContextParams(id);
+      return new ExecutionDeleteContextParams(id);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "debug.deleteContext params");
+      throw jsonDecoder.mismatch(jsonPath, "execution.deleteContext params");
     }
   }
 
-  factory DebugDeleteContextParams.fromRequest(Request request) {
-    return new DebugDeleteContextParams.fromJson(
+  factory ExecutionDeleteContextParams.fromRequest(Request request) {
+    return new ExecutionDeleteContextParams.fromJson(
         new RequestDecoder(request), "params", request._params);
   }
 
@@ -3881,7 +3878,7 @@
   }
 
   Request toRequest(String id) {
-    return new Request(id, "debug.deleteContext", toJson());
+    return new Request(id, "execution.deleteContext", toJson());
   }
 
   @override
@@ -3889,7 +3886,7 @@
 
   @override
   bool operator==(other) {
-    if (other is DebugDeleteContextParams) {
+    if (other is ExecutionDeleteContextParams) {
       return id == other.id;
     }
     return false;
@@ -3903,16 +3900,16 @@
   }
 }
 /**
- * debug.deleteContext result
+ * execution.deleteContext result
  */
-class DebugDeleteContextResult {
+class ExecutionDeleteContextResult {
   Response toResponse(String id) {
     return new Response(id, result: null);
   }
 
   @override
   bool operator==(other) {
-    if (other is DebugDeleteContextResult) {
+    if (other is ExecutionDeleteContextResult) {
       return true;
     }
     return false;
@@ -3920,22 +3917,22 @@
 
   @override
   int get hashCode {
-    return 923895626;
+    return 479954425;
   }
 }
 
 /**
- * debug.mapUri params
+ * execution.mapUri params
  *
  * {
- *   "id": DebugContextId
+ *   "id": ExecutionContextId
  *   "file": optional FilePath
  *   "uri": optional String
  * }
  */
-class DebugMapUriParams implements HasToJson {
+class ExecutionMapUriParams implements HasToJson {
   /**
-   * The identifier of the debugging context in which the URI is to be mapped.
+   * The identifier of the execution context in which the URI is to be mapped.
    */
   String id;
 
@@ -3949,9 +3946,9 @@
    */
   String uri;
 
-  DebugMapUriParams(this.id, {this.file, this.uri});
+  ExecutionMapUriParams(this.id, {this.file, this.uri});
 
-  factory DebugMapUriParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+  factory ExecutionMapUriParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
     if (json == null) {
       json = {};
     }
@@ -3970,14 +3967,14 @@
       if (json.containsKey("uri")) {
         uri = jsonDecoder._decodeString(jsonPath + ".uri", json["uri"]);
       }
-      return new DebugMapUriParams(id, file: file, uri: uri);
+      return new ExecutionMapUriParams(id, file: file, uri: uri);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "debug.mapUri params");
+      throw jsonDecoder.mismatch(jsonPath, "execution.mapUri params");
     }
   }
 
-  factory DebugMapUriParams.fromRequest(Request request) {
-    return new DebugMapUriParams.fromJson(
+  factory ExecutionMapUriParams.fromRequest(Request request) {
+    return new ExecutionMapUriParams.fromJson(
         new RequestDecoder(request), "params", request._params);
   }
 
@@ -3994,7 +3991,7 @@
   }
 
   Request toRequest(String id) {
-    return new Request(id, "debug.mapUri", toJson());
+    return new Request(id, "execution.mapUri", toJson());
   }
 
   @override
@@ -4002,7 +3999,7 @@
 
   @override
   bool operator==(other) {
-    if (other is DebugMapUriParams) {
+    if (other is ExecutionMapUriParams) {
       return id == other.id &&
           file == other.file &&
           uri == other.uri;
@@ -4021,14 +4018,14 @@
 }
 
 /**
- * debug.mapUri result
+ * execution.mapUri result
  *
  * {
  *   "file": optional FilePath
  *   "uri": optional String
  * }
  */
-class DebugMapUriResult implements HasToJson {
+class ExecutionMapUriResult implements HasToJson {
   /**
    * The file to which the URI was mapped. This field is omitted if the uri
    * field was not given in the request.
@@ -4041,9 +4038,9 @@
    */
   String uri;
 
-  DebugMapUriResult({this.file, this.uri});
+  ExecutionMapUriResult({this.file, this.uri});
 
-  factory DebugMapUriResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+  factory ExecutionMapUriResult.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
     if (json == null) {
       json = {};
     }
@@ -4056,15 +4053,15 @@
       if (json.containsKey("uri")) {
         uri = jsonDecoder._decodeString(jsonPath + ".uri", json["uri"]);
       }
-      return new DebugMapUriResult(file: file, uri: uri);
+      return new ExecutionMapUriResult(file: file, uri: uri);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "debug.mapUri result");
+      throw jsonDecoder.mismatch(jsonPath, "execution.mapUri result");
     }
   }
 
-  factory DebugMapUriResult.fromResponse(Response response) {
-    return new DebugMapUriResult.fromJson(
-        new ResponseDecoder(), "result", response._result);
+  factory ExecutionMapUriResult.fromResponse(Response response) {
+    return new ExecutionMapUriResult.fromJson(
+        new ResponseDecoder(response), "result", response._result);
   }
 
   Map<String, dynamic> toJson() {
@@ -4087,7 +4084,7 @@
 
   @override
   bool operator==(other) {
-    if (other is DebugMapUriResult) {
+    if (other is ExecutionMapUriResult) {
       return file == other.file &&
           uri == other.uri;
     }
@@ -4104,50 +4101,50 @@
 }
 
 /**
- * debug.setSubscriptions params
+ * execution.setSubscriptions params
  *
  * {
- *   "subscriptions": List<DebugService>
+ *   "subscriptions": List<ExecutionService>
  * }
  */
-class DebugSetSubscriptionsParams implements HasToJson {
+class ExecutionSetSubscriptionsParams implements HasToJson {
   /**
    * A list of the services being subscribed to.
    */
-  List<DebugService> subscriptions;
+  List<ExecutionService> subscriptions;
 
-  DebugSetSubscriptionsParams(this.subscriptions);
+  ExecutionSetSubscriptionsParams(this.subscriptions);
 
-  factory DebugSetSubscriptionsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+  factory ExecutionSetSubscriptionsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
     if (json == null) {
       json = {};
     }
     if (json is Map) {
-      List<DebugService> subscriptions;
+      List<ExecutionService> subscriptions;
       if (json.containsKey("subscriptions")) {
-        subscriptions = jsonDecoder._decodeList(jsonPath + ".subscriptions", json["subscriptions"], (String jsonPath, Object json) => new DebugService.fromJson(jsonDecoder, jsonPath, json));
+        subscriptions = jsonDecoder._decodeList(jsonPath + ".subscriptions", json["subscriptions"], (String jsonPath, Object json) => new ExecutionService.fromJson(jsonDecoder, jsonPath, json));
       } else {
         throw jsonDecoder.missingKey(jsonPath, "subscriptions");
       }
-      return new DebugSetSubscriptionsParams(subscriptions);
+      return new ExecutionSetSubscriptionsParams(subscriptions);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "debug.setSubscriptions params");
+      throw jsonDecoder.mismatch(jsonPath, "execution.setSubscriptions params");
     }
   }
 
-  factory DebugSetSubscriptionsParams.fromRequest(Request request) {
-    return new DebugSetSubscriptionsParams.fromJson(
+  factory ExecutionSetSubscriptionsParams.fromRequest(Request request) {
+    return new ExecutionSetSubscriptionsParams.fromJson(
         new RequestDecoder(request), "params", request._params);
   }
 
   Map<String, dynamic> toJson() {
     Map<String, dynamic> result = {};
-    result["subscriptions"] = subscriptions.map((DebugService value) => value.toJson()).toList();
+    result["subscriptions"] = subscriptions.map((ExecutionService value) => value.toJson()).toList();
     return result;
   }
 
   Request toRequest(String id) {
-    return new Request(id, "debug.setSubscriptions", toJson());
+    return new Request(id, "execution.setSubscriptions", toJson());
   }
 
   @override
@@ -4155,8 +4152,8 @@
 
   @override
   bool operator==(other) {
-    if (other is DebugSetSubscriptionsParams) {
-      return _listEqual(subscriptions, other.subscriptions, (DebugService a, DebugService b) => a == b);
+    if (other is ExecutionSetSubscriptionsParams) {
+      return _listEqual(subscriptions, other.subscriptions, (ExecutionService a, ExecutionService b) => a == b);
     }
     return false;
   }
@@ -4169,16 +4166,16 @@
   }
 }
 /**
- * debug.setSubscriptions result
+ * execution.setSubscriptions result
  */
-class DebugSetSubscriptionsResult {
+class ExecutionSetSubscriptionsResult {
   Response toResponse(String id) {
     return new Response(id, result: null);
   }
 
   @override
   bool operator==(other) {
-    if (other is DebugSetSubscriptionsResult) {
+    if (other is ExecutionSetSubscriptionsResult) {
       return true;
     }
     return false;
@@ -4186,12 +4183,12 @@
 
   @override
   int get hashCode {
-    return 36732888;
+    return 287678780;
   }
 }
 
 /**
- * debug.launchData params
+ * execution.launchData params
  *
  * {
  *   "executables": List<ExecutableFile>
@@ -4199,10 +4196,10 @@
  *   "htmlToDart": Map<FilePath, List<FilePath>>
  * }
  */
-class DebugLaunchDataParams implements HasToJson {
+class ExecutionLaunchDataParams implements HasToJson {
   /**
-   * A list of the files that are executable in the given context. This list
-   * replaces any previous list provided for the given context.
+   * A list of the files that are executable. This list replaces any previous
+   * list provided.
    */
   List<ExecutableFile> executables;
 
@@ -4218,9 +4215,9 @@
    */
   Map<String, List<String>> htmlToDart;
 
-  DebugLaunchDataParams(this.executables, this.dartToHtml, this.htmlToDart);
+  ExecutionLaunchDataParams(this.executables, this.dartToHtml, this.htmlToDart);
 
-  factory DebugLaunchDataParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+  factory ExecutionLaunchDataParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
     if (json == null) {
       json = {};
     }
@@ -4243,15 +4240,15 @@
       } else {
         throw jsonDecoder.missingKey(jsonPath, "htmlToDart");
       }
-      return new DebugLaunchDataParams(executables, dartToHtml, htmlToDart);
+      return new ExecutionLaunchDataParams(executables, dartToHtml, htmlToDart);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "debug.launchData params");
+      throw jsonDecoder.mismatch(jsonPath, "execution.launchData params");
     }
   }
 
-  factory DebugLaunchDataParams.fromNotification(Notification notification) {
-    return new DebugLaunchDataParams.fromJson(
-        new ResponseDecoder(), "params", notification._params);
+  factory ExecutionLaunchDataParams.fromNotification(Notification notification) {
+    return new ExecutionLaunchDataParams.fromJson(
+        new ResponseDecoder(null), "params", notification._params);
   }
 
   Map<String, dynamic> toJson() {
@@ -4263,7 +4260,7 @@
   }
 
   Notification toNotification() {
-    return new Notification("debug.launchData", toJson());
+    return new Notification("execution.launchData", toJson());
   }
 
   @override
@@ -4271,7 +4268,7 @@
 
   @override
   bool operator==(other) {
-    if (other is DebugLaunchDataParams) {
+    if (other is ExecutionLaunchDataParams) {
       return _listEqual(executables, other.executables, (ExecutableFile a, ExecutableFile b) => a == b) &&
           _mapEqual(dartToHtml, other.dartToHtml, (List<String> a, List<String> b) => _listEqual(a, b, (String a, String b) => a == b)) &&
           _mapEqual(htmlToDart, other.htmlToDart, (List<String> a, List<String> b) => _listEqual(a, b, (String a, String b) => a == b));
@@ -5518,45 +5515,6 @@
 }
 
 /**
- * DebugService
- *
- * enum {
- *   LAUNCH_DATA
- * }
- */
-class DebugService {
-  static const LAUNCH_DATA = const DebugService._("LAUNCH_DATA");
-
-  final String name;
-
-  const DebugService._(this.name);
-
-  factory DebugService(String name) {
-    switch (name) {
-      case "LAUNCH_DATA":
-        return LAUNCH_DATA;
-    }
-    throw new Exception('Illegal enum value: $name');
-  }
-
-  factory DebugService.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
-    if (json is String) {
-      try {
-        return new DebugService(json);
-      } catch(_) {
-        // Fall through
-      }
-    }
-    throw jsonDecoder.mismatch(jsonPath, "DebugService");
-  }
-
-  @override
-  String toString() => "DebugService.$name";
-
-  String toJson() => name;
-}
-
-/**
  * Element
  *
  * {
@@ -5984,6 +5942,45 @@
 }
 
 /**
+ * ExecutionService
+ *
+ * enum {
+ *   LAUNCH_DATA
+ * }
+ */
+class ExecutionService {
+  static const LAUNCH_DATA = const ExecutionService._("LAUNCH_DATA");
+
+  final String name;
+
+  const ExecutionService._(this.name);
+
+  factory ExecutionService(String name) {
+    switch (name) {
+      case "LAUNCH_DATA":
+        return LAUNCH_DATA;
+    }
+    throw new Exception('Illegal enum value: $name');
+  }
+
+  factory ExecutionService.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json is String) {
+      try {
+        return new ExecutionService(json);
+      } catch(_) {
+        // Fall through
+      }
+    }
+    throw jsonDecoder.mismatch(jsonPath, "ExecutionService");
+  }
+
+  @override
+  String toString() => "ExecutionService.$name";
+
+  String toJson() => name;
+}
+
+/**
  * FoldingKind
  *
  * enum {
@@ -6457,13 +6454,14 @@
   /**
    * The path to the defining compilation unit of the library in which the
    * referenced element is declared. This data is omitted if there is no
-   * referenced element.
+   * referenced element, or if the element is declared inside an HTML file.
    */
   String containingLibraryPath;
 
   /**
    * The name of the library in which the referenced element is declared. This
-   * data is omitted if there is no referenced element.
+   * data is omitted if there is no referenced element, or if the element is
+   * declared inside an HTML file.
    */
   String containingLibraryName;
 
@@ -6471,7 +6469,7 @@
    * The dartdoc associated with the referenced element. Other than the removal
    * of the comment delimiters, including leading asterisks in the case of a
    * block comment, the dartdoc is unprocessed markdown. This data is omitted
-   * if there is no referenced element.
+   * if there is no referenced element, or if the element has no dartdoc.
    */
   String dartdoc;
 
@@ -7750,6 +7748,78 @@
 }
 
 /**
+ * RefactoringFeedback
+ *
+ * {
+ * }
+ */
+class RefactoringFeedback implements HasToJson {
+  RefactoringFeedback();
+
+  factory RefactoringFeedback.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json, Map responseJson) {
+    return _refactoringFeedbackFromJson(jsonDecoder, jsonPath, json, responseJson);
+  }
+
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    return result;
+  }
+
+  @override
+  String toString() => JSON.encode(toJson());
+
+  @override
+  bool operator==(other) {
+    if (other is RefactoringFeedback) {
+      return true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    int hash = 0;
+    return _JenkinsSmiHash.finish(hash);
+  }
+}
+
+/**
+ * RefactoringOptions
+ *
+ * {
+ * }
+ */
+class RefactoringOptions implements HasToJson {
+  RefactoringOptions();
+
+  factory RefactoringOptions.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json, RefactoringKind kind) {
+    return _refactoringOptionsFromJson(jsonDecoder, jsonPath, json, kind);
+  }
+
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    return result;
+  }
+
+  @override
+  String toString() => JSON.encode(toJson());
+
+  @override
+  bool operator==(other) {
+    if (other is RefactoringOptions) {
+      return true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    int hash = 0;
+    return _JenkinsSmiHash.finish(hash);
+  }
+}
+
+/**
  * RefactoringMethodParameterKind
  *
  * enum {
@@ -8088,7 +8158,8 @@
  * RequestErrorCode
  *
  * enum {
- *   GET_ERRORS_ERROR
+ *   GET_ERRORS_INVALID_FILE
+ *   INVALID_OVERLAY_CHANGE
  *   INVALID_PARAMETER
  *   INVALID_REQUEST
  *   SERVER_ALREADY_STARTED
@@ -8099,10 +8170,17 @@
  */
 class RequestErrorCode {
   /**
-   * An error occurred during the processing of an "analysis.getErrors"
-   * request.
+   * An "analysis.getErrors" request specified a FilePath which does not match
+   * a file currently subject to analysis.
    */
-  static const GET_ERRORS_ERROR = const RequestErrorCode._("GET_ERRORS_ERROR");
+  static const GET_ERRORS_INVALID_FILE = const RequestErrorCode._("GET_ERRORS_INVALID_FILE");
+
+  /**
+   * An analysis.updateContent request contained a ChangeContentOverlay object
+   * which can't be applied, due to an edit having an offset or length that is
+   * out of range.
+   */
+  static const INVALID_OVERLAY_CHANGE = const RequestErrorCode._("INVALID_OVERLAY_CHANGE");
 
   /**
    * One of the method parameters was invalid.
@@ -8117,12 +8195,19 @@
   /**
    * The analysis server has already been started (and hence won't accept new
    * connections).
+   *
+   * This error is included for future expansion; at present the analysis
+   * server can only speak to one client at a time so this error will never
+   * occur.
    */
   static const SERVER_ALREADY_STARTED = const RequestErrorCode._("SERVER_ALREADY_STARTED");
 
   /**
    * An "analysis.setPriorityFiles" request includes one or more files that are
    * not being analyzed.
+   *
+   * This is a legacy error; it will be removed before the API reaches version
+   * 1.0.
    */
   static const UNANALYZED_PRIORITY_FILES = const RequestErrorCode._("UNANALYZED_PRIORITY_FILES");
 
@@ -8135,6 +8220,9 @@
   /**
    * The analysis server was requested to perform an action which is not
    * supported.
+   *
+   * This is a legacy error; it will be removed before the API reaches version
+   * 1.0.
    */
   static const UNSUPPORTED_FEATURE = const RequestErrorCode._("UNSUPPORTED_FEATURE");
 
@@ -8144,8 +8232,10 @@
 
   factory RequestErrorCode(String name) {
     switch (name) {
-      case "GET_ERRORS_ERROR":
-        return GET_ERRORS_ERROR;
+      case "GET_ERRORS_INVALID_FILE":
+        return GET_ERRORS_INVALID_FILE;
+      case "INVALID_OVERLAY_CHANGE":
+        return INVALID_OVERLAY_CHANGE;
       case "INVALID_PARAMETER":
         return INVALID_PARAMETER;
       case "INVALID_REQUEST":
@@ -9028,7 +9118,7 @@
  *   "lengths": List<int>
  * }
  */
-class ExtractLocalVariableFeedback implements HasToJson {
+class ExtractLocalVariableFeedback extends RefactoringFeedback implements HasToJson {
   /**
    * The proposed names for the local variable.
    */
@@ -9079,11 +9169,6 @@
     }
   }
 
-  factory ExtractLocalVariableFeedback.fromRefactoringResult(EditGetRefactoringResult refactoringResult) {
-    return new ExtractLocalVariableFeedback.fromJson(
-        new ResponseDecoder(), "feedback", refactoringResult.feedback);
-  }
-
   Map<String, dynamic> toJson() {
     Map<String, dynamic> result = {};
     result["names"] = names;
@@ -9123,7 +9208,7 @@
  *   "extractAll": bool
  * }
  */
-class ExtractLocalVariableOptions implements HasToJson {
+class ExtractLocalVariableOptions extends RefactoringOptions implements HasToJson {
   /**
    * The name that the local variable should be given.
    */
@@ -9209,7 +9294,7 @@
  *   "lengths": List<int>
  * }
  */
-class ExtractMethodFeedback implements HasToJson {
+class ExtractMethodFeedback extends RefactoringFeedback implements HasToJson {
   /**
    * The offset to the beginning of the expression or statements that will be
    * extracted.
@@ -9317,11 +9402,6 @@
     }
   }
 
-  factory ExtractMethodFeedback.fromRefactoringResult(EditGetRefactoringResult refactoringResult) {
-    return new ExtractMethodFeedback.fromJson(
-        new ResponseDecoder(), "feedback", refactoringResult.feedback);
-  }
-
   Map<String, dynamic> toJson() {
     Map<String, dynamic> result = {};
     result["offset"] = offset;
@@ -9379,7 +9459,7 @@
  *   "extractAll": bool
  * }
  */
-class ExtractMethodOptions implements HasToJson {
+class ExtractMethodOptions extends RefactoringOptions implements HasToJson {
   /**
    * The return type that should be defined for the method.
    */
@@ -9403,7 +9483,7 @@
    * parameter. It is an error if a REQUIRED or POSITIONAL parameter follows a
    * NAMED parameter.
    *
-   * - To change the order and/or update proposed paramerers, add parameters
+   * - To change the order and/or update proposed parameters, add parameters
    *   with the same identifiers as proposed.
    * - To add new parameters, omit their identifier.
    * - To remove some parameters, omit them in this list.
@@ -9501,21 +9581,76 @@
     return _JenkinsSmiHash.finish(hash);
   }
 }
+
 /**
  * inlineLocalVariable feedback
+ *
+ * {
+ *   "name": String
+ *   "occurrences": int
+ * }
  */
-class InlineLocalVariableFeedback {
+class InlineLocalVariableFeedback extends RefactoringFeedback implements HasToJson {
+  /**
+   * The name of the variable being inlined.
+   */
+  String name;
+
+  /**
+   * The number of times the variable occurs.
+   */
+  int occurrences;
+
+  InlineLocalVariableFeedback(this.name, this.occurrences);
+
+  factory InlineLocalVariableFeedback.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json == null) {
+      json = {};
+    }
+    if (json is Map) {
+      String name;
+      if (json.containsKey("name")) {
+        name = jsonDecoder._decodeString(jsonPath + ".name", json["name"]);
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "name");
+      }
+      int occurrences;
+      if (json.containsKey("occurrences")) {
+        occurrences = jsonDecoder._decodeInt(jsonPath + ".occurrences", json["occurrences"]);
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "occurrences");
+      }
+      return new InlineLocalVariableFeedback(name, occurrences);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, "inlineLocalVariable feedback");
+    }
+  }
+
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    result["name"] = name;
+    result["occurrences"] = occurrences;
+    return result;
+  }
+
+  @override
+  String toString() => JSON.encode(toJson());
+
   @override
   bool operator==(other) {
     if (other is InlineLocalVariableFeedback) {
-      return true;
+      return name == other.name &&
+          occurrences == other.occurrences;
     }
     return false;
   }
 
   @override
   int get hashCode {
-    return 247971243;
+    int hash = 0;
+    hash = _JenkinsSmiHash.combine(hash, name.hashCode);
+    hash = _JenkinsSmiHash.combine(hash, occurrences.hashCode);
+    return _JenkinsSmiHash.finish(hash);
   }
 }
 /**
@@ -9535,21 +9670,93 @@
     return 540364977;
   }
 }
+
 /**
  * inlineMethod feedback
+ *
+ * {
+ *   "className": optional String
+ *   "methodName": String
+ *   "isDeclaration": bool
+ * }
  */
-class InlineMethodFeedback {
+class InlineMethodFeedback extends RefactoringFeedback implements HasToJson {
+  /**
+   * The name of the class enclosing the method being inlined. If not a class
+   * member is being inlined, this field will be absent.
+   */
+  String className;
+
+  /**
+   * The name of the method (or function) being inlined.
+   */
+  String methodName;
+
+  /**
+   * True if the declaration of the method is selected. So all references
+   * should be inlined.
+   */
+  bool isDeclaration;
+
+  InlineMethodFeedback(this.methodName, this.isDeclaration, {this.className});
+
+  factory InlineMethodFeedback.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json == null) {
+      json = {};
+    }
+    if (json is Map) {
+      String className;
+      if (json.containsKey("className")) {
+        className = jsonDecoder._decodeString(jsonPath + ".className", json["className"]);
+      }
+      String methodName;
+      if (json.containsKey("methodName")) {
+        methodName = jsonDecoder._decodeString(jsonPath + ".methodName", json["methodName"]);
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "methodName");
+      }
+      bool isDeclaration;
+      if (json.containsKey("isDeclaration")) {
+        isDeclaration = jsonDecoder._decodeBool(jsonPath + ".isDeclaration", json["isDeclaration"]);
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "isDeclaration");
+      }
+      return new InlineMethodFeedback(methodName, isDeclaration, className: className);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, "inlineMethod feedback");
+    }
+  }
+
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    if (className != null) {
+      result["className"] = className;
+    }
+    result["methodName"] = methodName;
+    result["isDeclaration"] = isDeclaration;
+    return result;
+  }
+
+  @override
+  String toString() => JSON.encode(toJson());
+
   @override
   bool operator==(other) {
     if (other is InlineMethodFeedback) {
-      return true;
+      return className == other.className &&
+          methodName == other.methodName &&
+          isDeclaration == other.isDeclaration;
     }
     return false;
   }
 
   @override
   int get hashCode {
-    return 882400079;
+    int hash = 0;
+    hash = _JenkinsSmiHash.combine(hash, className.hashCode);
+    hash = _JenkinsSmiHash.combine(hash, methodName.hashCode);
+    hash = _JenkinsSmiHash.combine(hash, isDeclaration.hashCode);
+    return _JenkinsSmiHash.finish(hash);
   }
 }
 
@@ -9561,7 +9768,7 @@
  *   "inlineAll": bool
  * }
  */
-class InlineMethodOptions implements HasToJson {
+class InlineMethodOptions extends RefactoringOptions implements HasToJson {
   /**
    * True if the method being inlined should be removed. It is an error if this
    * field is true and inlineAll is false.
@@ -9638,9 +9845,11 @@
  * {
  *   "offset": int
  *   "length": int
+ *   "elementKindName": String
+ *   "oldName": String
  * }
  */
-class RenameFeedback implements HasToJson {
+class RenameFeedback extends RefactoringFeedback implements HasToJson {
   /**
    * The offset to the beginning of the name selected to be renamed.
    */
@@ -9651,7 +9860,18 @@
    */
   int length;
 
-  RenameFeedback(this.offset, this.length);
+  /**
+   * The human-readable description of the kind of element being renamed (such
+   * as “class” or “function type alias”).
+   */
+  String elementKindName;
+
+  /**
+   * The old name of the element before the refactoring.
+   */
+  String oldName;
+
+  RenameFeedback(this.offset, this.length, this.elementKindName, this.oldName);
 
   factory RenameFeedback.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
     if (json == null) {
@@ -9670,21 +9890,30 @@
       } else {
         throw jsonDecoder.missingKey(jsonPath, "length");
       }
-      return new RenameFeedback(offset, length);
+      String elementKindName;
+      if (json.containsKey("elementKindName")) {
+        elementKindName = jsonDecoder._decodeString(jsonPath + ".elementKindName", json["elementKindName"]);
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "elementKindName");
+      }
+      String oldName;
+      if (json.containsKey("oldName")) {
+        oldName = jsonDecoder._decodeString(jsonPath + ".oldName", json["oldName"]);
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "oldName");
+      }
+      return new RenameFeedback(offset, length, elementKindName, oldName);
     } else {
       throw jsonDecoder.mismatch(jsonPath, "rename feedback");
     }
   }
 
-  factory RenameFeedback.fromRefactoringResult(EditGetRefactoringResult refactoringResult) {
-    return new RenameFeedback.fromJson(
-        new ResponseDecoder(), "feedback", refactoringResult.feedback);
-  }
-
   Map<String, dynamic> toJson() {
     Map<String, dynamic> result = {};
     result["offset"] = offset;
     result["length"] = length;
+    result["elementKindName"] = elementKindName;
+    result["oldName"] = oldName;
     return result;
   }
 
@@ -9695,7 +9924,9 @@
   bool operator==(other) {
     if (other is RenameFeedback) {
       return offset == other.offset &&
-          length == other.length;
+          length == other.length &&
+          elementKindName == other.elementKindName &&
+          oldName == other.oldName;
     }
     return false;
   }
@@ -9705,6 +9936,8 @@
     int hash = 0;
     hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
     hash = _JenkinsSmiHash.combine(hash, length.hashCode);
+    hash = _JenkinsSmiHash.combine(hash, elementKindName.hashCode);
+    hash = _JenkinsSmiHash.combine(hash, oldName.hashCode);
     return _JenkinsSmiHash.finish(hash);
   }
 }
@@ -9716,7 +9949,7 @@
  *   "newName": String
  * }
  */
-class RenameOptions implements HasToJson {
+class RenameOptions extends RefactoringOptions implements HasToJson {
   /**
    * The name that the element should have after the refactoring.
    */
diff --git a/pkg/analysis_server/lib/src/operation/operation_analysis.dart b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
index 8dea71d..11cb226 100644
--- a/pkg/analysis_server/lib/src/operation/operation_analysis.dart
+++ b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
@@ -95,7 +95,8 @@
     AnalysisResult result = context.performAnalysisTask();
     List<ChangeNotice> notices = result.changeNotices;
     if (notices == null) {
-      server.sendContextAnalysisDoneNotifications(context);
+      server.sendContextAnalysisDoneNotifications(context,
+          AnalysisDoneReason.COMPLETE);
       return;
     }
     // process results
diff --git a/pkg/analysis_server/lib/src/package_map_provider.dart b/pkg/analysis_server/lib/src/package_map_provider.dart
deleted file mode 100644
index a345bf2..0000000
--- a/pkg/analysis_server/lib/src/package_map_provider.dart
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright (c) 2014, 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 package.map.provider;
-
-import 'dart:collection';
-import 'dart:convert';
-import 'dart:io' as io;
-
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/sdk_io.dart';
-import 'package:path/path.dart';
-
-/**
- * Data structure output by PackageMapProvider.  This contains both the package
- * map and dependency information.
- */
-class PackageMapInfo {
-  /**
-   * The package map itself.  This is a map from package name to a list of
-   * the folders containing source code for the package.
-   *
-   * `null` if an error occurred.
-   */
-  Map<String, List<Folder>> packageMap;
-
-  /**
-   * Dependency information.  This is a set of the paths which were consulted
-   * in order to generate the package map.  If any of these files is
-   * modified, the package map will need to be regenerated.
-   */
-  Set<String> dependencies;
-
-  PackageMapInfo(this.packageMap, this.dependencies);
-}
-
-/**
- * A PackageMapProvider is an entity capable of determining the mapping from
- * package name to source directory for a given folder.
- */
-abstract class PackageMapProvider {
-  /**
-   * Compute a package map for the given folder, if possible.
-   *
-   * If a package map can't be computed (e.g. because an error occurred), a
-   * [PackageMapInfo] will still be returned, but its packageMap will be null.
-   */
-  PackageMapInfo computePackageMap(Folder folder);
-}
-
-/**
- * Implementation of PackageMapProvider that operates by executing pub.
- */
-class PubPackageMapProvider implements PackageMapProvider {
-  static const String PUB_LIST_COMMAND = 'list-package-dirs';
-
-  /**
-   * The name of the 'pubspec.lock' file, which we assume is the dependency
-   * in the event that [PUB_LIST_COMMAND] fails.
-   */
-  static const String PUBSPEC_LOCK_NAME = 'pubspec.lock';
-
-  /**
-   * [ResourceProvider] that is used to create the [Folder]s that populate the
-   * package map.
-   */
-  final ResourceProvider resourceProvider;
-
-  /**
-   * Sdk that we use to find the pub executable.
-   */
-  final DirectoryBasedDartSdk sdk;
-
-  PubPackageMapProvider(this.resourceProvider, this.sdk);
-
-  @override
-  PackageMapInfo computePackageMap(Folder folder) {
-    // TODO(paulberry) make this asynchronous so that we can (a) do other
-    // analysis while it's in progress, and (b) time out if it takes too long
-    // to respond.
-    String executable = sdk.pubExecutable.getAbsolutePath();
-    io.ProcessResult result;
-    try {
-      result = io.Process.runSync(
-          executable, [PUB_LIST_COMMAND], workingDirectory: folder.path);
-    } on io.ProcessException catch (exception, stackTrace) {
-      AnalysisEngine.instance.logger.logInformation(
-          "Error running pub $PUB_LIST_COMMAND\n${exception}\n${stackTrace}");
-    }
-    if (result.exitCode != 0) {
-      AnalysisEngine.instance.logger.logInformation(
-          "pub $PUB_LIST_COMMAND failed: exit code ${result.exitCode}");
-      return _error(folder);
-    }
-    try {
-      return parsePackageMap(result.stdout, folder);
-    } catch (exception, stackTrace) {
-      AnalysisEngine.instance.logger.logError(
-          "Malformed output from pub $PUB_LIST_COMMAND\n${exception}\n${stackTrace}");
-    }
-
-    return _error(folder);
-  }
-
-  /**
-   * Decode the JSON output from pub into a package map.  Paths in the
-   * output are considered relative to [folder].
-   */
-  PackageMapInfo parsePackageMap(String jsonText, Folder folder) {
-    // The output of pub looks like this:
-    // {
-    //   "packages": {
-    //     "foo": "path/to/foo",
-    //     "bar": ["path/to/bar1", "path/to/bar2"],
-    //     "myapp": "path/to/myapp",  // self link is included
-    //   },
-    //   "input_files": [
-    //     "path/to/myapp/pubspec.lock"
-    //   ]
-    // }
-    Map<String, List<Folder>> packageMap = new HashMap<String, List<Folder>>();
-    Map obj = JSON.decode(jsonText);
-    Map packages = obj['packages'];
-    processPaths(String packageName, List paths) {
-      List<Folder> folders = <Folder>[];
-      for (var path in paths) {
-        if (path is String) {
-          Resource resource = folder.getChild(path);
-          if (resource is Folder) {
-            folders.add(resource);
-          }
-        }
-      }
-      if (folders.isNotEmpty) {
-        packageMap[packageName] = folders;
-      }
-    }
-    packages.forEach((key, value) {
-      if (value is String) {
-        processPaths(key, [value]);
-      } else if (value is List) {
-        processPaths(key, value);
-      }
-    });
-    Set<String> dependencies = new Set<String>();
-    List inputFiles = obj['input_files'];
-    if (inputFiles != null) {
-      for (var path in inputFiles) {
-        if (path is String) {
-          dependencies.add(folder.canonicalizePath(path));
-        }
-      }
-    }
-    return new PackageMapInfo(packageMap, dependencies);
-  }
-
-  /**
-   * Create a PackageMapInfo object representing an error condition.
-   */
-  PackageMapInfo _error(Folder folder) {
-    // Even if an error occurs, we still need to know the dependencies, so that
-    // we'll know when to try running "pub list-package-dirs" again.
-    // Unfortunately, "pub list-package-dirs" doesn't tell us dependencies when
-    // an error occurs, so just assume there is one dependency, "pubspec.lock".
-    List<String> dependencies = <String>[join(folder.path, PUBSPEC_LOCK_NAME)];
-    return new PackageMapInfo(null, dependencies.toSet());
-  }
-}
\ No newline at end of file
diff --git a/pkg/analysis_server/lib/src/protocol.dart b/pkg/analysis_server/lib/src/protocol.dart
index 5e3b33e..fbb33a1 100644
--- a/pkg/analysis_server/lib/src/protocol.dart
+++ b/pkg/analysis_server/lib/src/protocol.dart
@@ -23,6 +23,10 @@
 
 part 'generated_protocol.dart';
 
+
+final Map<String, RefactoringKind> REQUEST_ID_REFACTORING_KINDS =
+    new HashMap<String, RefactoringKind>();
+
 /**
  * Translate the input [map], applying [keyCallback] to all its keys, and
  * [valueCallback] to all its values.
@@ -126,6 +130,9 @@
  * SourceEdit.apply().
  */
 String _applyEdit(String code, SourceEdit edit) {
+  if (edit.length < 0) {
+    throw new RangeError('length is negative');
+  }
   return code.substring(0, edit.offset) +
       edit.replacement +
       code.substring(edit.end);
@@ -294,6 +301,9 @@
 Location _locationFromElement(engine.Element element) {
   engine.AnalysisContext context = element.context;
   engine.Source source = element.source;
+  if (context == null || source == null) {
+    return null;
+  }
   String name = element.displayName;
   int offset = element.nameOffset;
   int length = name != null ? name.length : 0;
@@ -393,6 +403,56 @@
 
 
 /**
+ * Create a [RefactoringFeedback] corresponding the given [kind].
+ */
+RefactoringFeedback _refactoringFeedbackFromJson(JsonDecoder jsonDecoder,
+    String jsonPath, Object json, Map feedbackJson) {
+  String requestId;
+  if (jsonDecoder is ResponseDecoder) {
+    requestId = jsonDecoder.response.id;
+  }
+  RefactoringKind kind = REQUEST_ID_REFACTORING_KINDS.remove(requestId);
+  if (kind == RefactoringKind.EXTRACT_LOCAL_VARIABLE) {
+    return new ExtractLocalVariableFeedback.fromJson(jsonDecoder, jsonPath, json);
+  }
+  if (kind == RefactoringKind.EXTRACT_METHOD) {
+    return new ExtractMethodFeedback.fromJson(jsonDecoder, jsonPath, json);
+  }
+  if (kind == RefactoringKind.INLINE_LOCAL_VARIABLE) {
+    return new InlineLocalVariableFeedback.fromJson(jsonDecoder, jsonPath, json);
+  }
+  if (kind == RefactoringKind.INLINE_METHOD) {
+    return new InlineMethodFeedback.fromJson(jsonDecoder, jsonPath, json);
+  }
+  if (kind == RefactoringKind.RENAME) {
+    return new RenameFeedback.fromJson(jsonDecoder, jsonPath, json);
+  }
+  return null;
+}
+
+
+/**
+ * Create a [RefactoringOptions] corresponding the given [kind].
+ */
+RefactoringOptions _refactoringOptionsFromJson(JsonDecoder jsonDecoder,
+    String jsonPath, Object json, RefactoringKind kind) {
+  if (kind == RefactoringKind.EXTRACT_LOCAL_VARIABLE) {
+    return new ExtractLocalVariableOptions.fromJson(jsonDecoder, jsonPath, json);
+  }
+  if (kind == RefactoringKind.EXTRACT_METHOD) {
+    return new ExtractMethodOptions.fromJson(jsonDecoder, jsonPath, json);
+  }
+  if (kind == RefactoringKind.INLINE_METHOD) {
+    return new InlineMethodOptions.fromJson(jsonDecoder, jsonPath, json);
+  }
+  if (kind == RefactoringKind.RENAME) {
+    return new RenameOptions.fromJson(jsonDecoder, jsonPath, json);
+  }
+  return null;
+}
+
+
+/**
  * Create a SearchResultKind based on a value from the search engine.
  */
 SearchResultKind _searchResultKindFromEngine(engine.MatchKind kind) {
@@ -832,7 +892,7 @@
       Object error = json[Response.ERROR];
       RequestError decodedError;
       if (error is Map) {
-        decodedError = new RequestError.fromJson(new ResponseDecoder(),
+        decodedError = new RequestError.fromJson(new ResponseDecoder(null),
             '.error', error);
       }
       Object result = json[Response.RESULT];
@@ -848,15 +908,14 @@
   }
 
   /**
-   * Initialize a newly created instance to represent an error condition caused
-   * by an error during `analysis.getErrors`.
+   * Initialize a newly created instance to represent the
+   * GET_ERRORS_INVALID_FILE error condition.
    */
-  Response.getErrorsError(Request request, String message,
-      Map<String, Object> result)
+  Response.getErrorsInvalidFile(Request request)
     : this(
         request.id,
-        error: new RequestError(RequestErrorCode.GET_ERRORS_ERROR, 'Error during `analysis.getErrors`: $message.'),
-        result: result);
+        error: new RequestError(RequestErrorCode.GET_ERRORS_INVALID_FILE,
+            'Error during `analysis.getErrors`: invalid file.'));
 
   /**
    * Initialize a newly created instance to represent an error condition caused
@@ -916,6 +975,10 @@
  * used only for testing.  Errors are reported using bare [Exception] objects.
  */
 class ResponseDecoder extends JsonDecoder {
+  final Response response;
+
+  ResponseDecoder(this.response);
+
   @override
   dynamic mismatch(String jsonPath, String expected) {
     return new Exception('Expected $expected at $jsonPath');
diff --git a/pkg/analysis_server/lib/src/search/element_references.dart b/pkg/analysis_server/lib/src/search/element_references.dart
index 0503f90..9117014 100644
--- a/pkg/analysis_server/lib/src/search/element_references.dart
+++ b/pkg/analysis_server/lib/src/search/element_references.dart
@@ -106,6 +106,9 @@
   }
 
   static bool _isMemberElement(Element element) {
+    if (element is ConstructorElement) {
+      return false;
+    }
     return element.enclosingElement is ClassElement;
   }
 
diff --git a/pkg/analysis_server/lib/src/search/search_domain.dart b/pkg/analysis_server/lib/src/search/search_domain.dart
index e2ba682..fe5fe14 100644
--- a/pkg/analysis_server/lib/src/search/search_domain.dart
+++ b/pkg/analysis_server/lib/src/search/search_domain.dart
@@ -28,7 +28,7 @@
   SearchEngine searchEngine;
 
   /**
-   * The next searc response id.
+   * The next search response id.
    */
   int _nextSearchId = 0;
 
diff --git a/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
index 40ee04f..e96fccb 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
@@ -8,7 +8,7 @@
 
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/services/completion/completion_manager.dart';
-import 'package:analysis_server/src/services/completion/imported_type_computer.dart';
+import 'package:analysis_server/src/services/completion/imported_computer.dart';
 import 'package:analysis_server/src/services/completion/invocation_computer.dart';
 import 'package:analysis_server/src/services/completion/keyword_computer.dart';
 import 'package:analysis_server/src/services/completion/local_computer.dart';
@@ -73,9 +73,7 @@
     CompilationUnit unit = context.parseCompilationUnit(source);
     request.unit = unit;
     request.node = new NodeLocator.con1(offset).searchWithin(unit);
-    if (request.node != null) {
-      request.node.accept(new _ReplacementOffsetBuilder(request));
-    }
+    request.node.accept(new _ReplacementOffsetBuilder(request));
     computers.removeWhere((DartCompletionComputer c) => c.computeFast(request));
     sendResults(computers.isEmpty);
   }
@@ -112,7 +110,7 @@
       computers = [
           new KeywordComputer(),
           new LocalComputer(),
-          new ImportedTypeComputer(),
+          new ImportedComputer(),
           new InvocationComputer()];
     }
   }
diff --git a/pkg/analysis_server/lib/src/services/completion/imported_computer.dart b/pkg/analysis_server/lib/src/services/completion/imported_computer.dart
new file mode 100644
index 0000000..240a3a3
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/completion/imported_computer.dart
@@ -0,0 +1,148 @@
+// Copyright (c) 2014, 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 services.completion.computer.dart.toplevel;
+
+import 'dart:async';
+
+import 'package:analysis_server/src/protocol.dart' hide Element;
+import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
+import 'package:analysis_server/src/services/completion/suggestion_builder.dart';
+import 'package:analysis_server/src/services/search/search_engine.dart';
+import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/element.dart';
+
+/**
+ * A computer for calculating imported class and top level variable
+ * `completion.getSuggestions` request results.
+ */
+class ImportedComputer extends DartCompletionComputer {
+
+  @override
+  bool computeFast(DartCompletionRequest request) {
+    // TODO: implement computeFast
+    // - compute results based upon current search, then replace those results
+    // during the full compute phase
+    // - filter results based upon completion offset
+    return false;
+  }
+
+  @override
+  Future<bool> computeFull(DartCompletionRequest request) {
+    return request.node.accept(new _ImportedVisitor(request));
+  }
+}
+
+/**
+ * A visitor for determining which imported class and top level variable
+ * should be suggested and building those suggestions.
+ */
+class _ImportedVisitor extends GeneralizingAstVisitor<Future<bool>> {
+  final DartCompletionRequest request;
+
+  _ImportedVisitor(this.request);
+
+  @override
+  Future<bool> visitCombinator(Combinator node) {
+    NamespaceDirective directive =
+        node.getAncestor((parent) => parent is NamespaceDirective);
+    if (directive != null) {
+      LibraryElement library = directive.uriElement;
+      LibraryElementSuggestionBuilder.suggestionsFor(request, library);
+      return new Future.value(true);
+    }
+    return new Future.value(false);
+  }
+
+  @override
+  Future<bool> visitNode(AstNode node) {
+    return _addImportedElements();
+  }
+
+  @override
+  Future<bool> visitSimpleIdentifier(SimpleIdentifier node) {
+    return node.parent.accept(this);
+  }
+
+  @override
+  Future<bool> visitVariableDeclaration(VariableDeclaration node) {
+    // Do not add suggestions if editing the name in a var declaration
+    SimpleIdentifier name = node.name;
+    if (name == null ||
+        name.offset < request.offset ||
+        request.offset > name.end) {
+      return visitNode(node);
+    }
+    return new Future.value(false);
+  }
+
+  Future<bool> _addImportedElements() {
+    var future = request.searchEngine.searchTopLevelDeclarations('');
+    return future.then((List<SearchMatch> matches) {
+
+      Set<LibraryElement> visibleLibs = new Set<LibraryElement>();
+      Set<LibraryElement> excludedLibs = new Set<LibraryElement>();
+
+      Map<LibraryElement, Set<String>> showNames =
+          new Map<LibraryElement, Set<String>>();
+      Map<LibraryElement, Set<String>> hideNames =
+          new Map<LibraryElement, Set<String>>();
+
+      // Exclude elements from the local library
+      // as they will be included by the LocalComputer
+      excludedLibs.add(request.unit.element.library);
+
+      // Build the set of visible and excluded libraries
+      // and the list of names that should be shown or hidden
+      request.unit.directives.forEach((Directive directive) {
+        if (directive is ImportDirective) {
+          LibraryElement lib = directive.element.importedLibrary;
+          if (directive.prefix == null) {
+            visibleLibs.add(lib);
+            directive.combinators.forEach((Combinator combinator) {
+              if (combinator is ShowCombinator) {
+                showNames[lib] = combinator.shownNames.map(
+                    (SimpleIdentifier id) => id.name).toSet();
+              } else if (combinator is HideCombinator) {
+                hideNames[lib] = combinator.hiddenNames.map(
+                    (SimpleIdentifier id) => id.name).toSet();
+              }
+            });
+          } else {
+            excludedLibs.add(lib);
+          }
+        }
+      });
+
+      // Compute the set of possible classes, functions, and top level variables
+      matches.forEach((SearchMatch match) {
+        if (match.kind == MatchKind.DECLARATION) {
+          Element element = match.element;
+          LibraryElement lib = element.library;
+          if (element.isPublic && !excludedLibs.contains(lib)) {
+            String completion = element.displayName;
+            Set<String> show = showNames[lib];
+            Set<String> hide = hideNames[lib];
+            if ((show == null || show.contains(completion)) &&
+                (hide == null || !hide.contains(completion))) {
+              request.suggestions.add(
+                  new CompletionSuggestion(
+                      new CompletionSuggestionKind.fromElementKind(element.kind),
+                      visibleLibs.contains(lib) || lib.isDartCore ?
+                          CompletionRelevance.DEFAULT :
+                          CompletionRelevance.LOW,
+                      completion,
+                      completion.length,
+                      0,
+                      element.isDeprecated,
+                      false));
+            }
+          }
+        }
+      });
+      return true;
+    });
+  }
+}
+
diff --git a/pkg/analysis_server/lib/src/services/completion/imported_type_computer.dart b/pkg/analysis_server/lib/src/services/completion/imported_type_computer.dart
deleted file mode 100644
index d030126..0000000
--- a/pkg/analysis_server/lib/src/services/completion/imported_type_computer.dart
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright (c) 2014, 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 services.completion.computer.dart.toplevel;
-
-import 'dart:async';
-
-import 'package:analysis_server/src/protocol.dart' hide Element;
-import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
-import 'package:analysis_server/src/services/completion/suggestion_builder.dart';
-import 'package:analysis_server/src/services/search/search_engine.dart';
-import 'package:analyzer/src/generated/ast.dart';
-import 'package:analyzer/src/generated/element.dart';
-
-/**
- * A computer for calculating imported class and top level variable
- * `completion.getSuggestions` request results.
- */
-class ImportedTypeComputer extends DartCompletionComputer {
-
-  @override
-  bool computeFast(DartCompletionRequest request) {
-    // TODO: implement computeFast
-    // - compute results based upon current search, then replace those results
-    // during the full compute phase
-    // - filter results based upon completion offset
-    return false;
-  }
-
-  @override
-  Future<bool> computeFull(DartCompletionRequest request) {
-    return request.node.accept(new _ImportedTypeVisitor(request));
-  }
-}
-
-/**
- * A visitor for determining which imported class and top level variable
- * should be suggested and building those suggestions.
- */
-class _ImportedTypeVisitor extends GeneralizingAstVisitor<Future<bool>> {
-  final DartCompletionRequest request;
-
-  _ImportedTypeVisitor(this.request);
-
-  @override
-  Future<bool> visitCombinator(Combinator node) {
-    NamespaceDirective directive =
-        node.getAncestor((parent) => parent is NamespaceDirective);
-    if (directive != null) {
-      LibraryElement library = directive.uriElement;
-      LibraryElementSuggestionBuilder.suggestionsFor(request, library);
-      return new Future.value(true);
-    }
-    return new Future.value(false);
-  }
-
-  @override
-  Future<bool> visitNode(AstNode node) {
-    return _addImportedElements();
-  }
-
-  @override
-  Future<bool> visitSimpleIdentifier(SimpleIdentifier node) {
-    return node.parent.accept(this);
-  }
-
-  @override
-  Future<bool> visitVariableDeclaration(VariableDeclaration node) {
-    // Do not add suggestions if editing the name in a var declaration
-    SimpleIdentifier name = node.name;
-    if (name == null ||
-        name.offset < request.offset ||
-        request.offset > name.end) {
-      return visitNode(node);
-    }
-    return new Future.value(false);
-  }
-
-  Future<bool> _addImportedElements() {
-    var future = request.searchEngine.searchTopLevelDeclarations('');
-    return future.then((List<SearchMatch> matches) {
-
-      Set<LibraryElement> visibleLibs = new Set<LibraryElement>();
-      Set<LibraryElement> excludedLibs = new Set<LibraryElement>();
-
-      Map<LibraryElement, Set<String>> showNames =
-          new Map<LibraryElement, Set<String>>();
-      Map<LibraryElement, Set<String>> hideNames =
-          new Map<LibraryElement, Set<String>>();
-
-      // Exclude elements from the local library
-      // as they will be included by the LocalComputer
-      excludedLibs.add(request.unit.element.library);
-
-      // Build the set of visible and excluded libraries
-      // and the list of names that should be shown or hidden
-      request.unit.directives.forEach((Directive directive) {
-        if (directive is ImportDirective) {
-          LibraryElement lib = directive.element.importedLibrary;
-          if (directive.prefix == null) {
-            visibleLibs.add(lib);
-            directive.combinators.forEach((Combinator combinator) {
-              if (combinator is ShowCombinator) {
-                showNames[lib] = combinator.shownNames.map(
-                    (SimpleIdentifier id) => id.name).toSet();
-              } else if (combinator is HideCombinator) {
-                hideNames[lib] = combinator.hiddenNames.map(
-                    (SimpleIdentifier id) => id.name).toSet();
-              }
-            });
-          } else {
-            excludedLibs.add(lib);
-          }
-        }
-      });
-
-      // Compute the set of possible classes, functions, and top level variables
-      matches.forEach((SearchMatch match) {
-        if (match.kind == MatchKind.DECLARATION) {
-          Element element = match.element;
-          LibraryElement lib = element.library;
-          if (element.isPublic && !excludedLibs.contains(lib)) {
-            String completion = element.displayName;
-            Set<String> show = showNames[lib];
-            Set<String> hide = hideNames[lib];
-            if ((show == null || show.contains(completion)) &&
-                (hide == null || !hide.contains(completion))) {
-              request.suggestions.add(
-                  new CompletionSuggestion(
-                      new CompletionSuggestionKind.fromElementKind(element.kind),
-                      visibleLibs.contains(lib) || lib.isDartCore ?
-                          CompletionRelevance.DEFAULT :
-                          CompletionRelevance.LOW,
-                      completion,
-                      completion.length,
-                      0,
-                      element.isDeprecated,
-                      false));
-            }
-          }
-        }
-      });
-      return true;
-    });
-  }
-}
-
diff --git a/pkg/analysis_server/lib/src/services/completion/keyword_computer.dart b/pkg/analysis_server/lib/src/services/completion/keyword_computer.dart
index 4137c7d..4091f9f 100644
--- a/pkg/analysis_server/lib/src/services/completion/keyword_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/keyword_computer.dart
@@ -38,7 +38,52 @@
   _KeywordVisitor(this.request);
 
   @override
+  visitBlock(Block node) {
+    if (_isOffsetAfterNode(node)) {
+      node.parent.accept(this);
+    } else {
+      _addSuggestions(
+          [
+              Keyword.ASSERT,
+              Keyword.CASE,
+              Keyword.CONTINUE,
+              Keyword.DO,
+              Keyword.FACTORY,
+              Keyword.FINAL,
+              Keyword.FOR,
+              Keyword.IF,
+              Keyword.NEW,
+              Keyword.RETHROW,
+              Keyword.RETURN,
+              Keyword.SUPER,
+              Keyword.SWITCH,
+              Keyword.THIS,
+              Keyword.THROW,
+              Keyword.TRY,
+              Keyword.VAR,
+              Keyword.VOID,
+              Keyword.WHILE]);
+    }
+  }
+
+  @override
   visitClassDeclaration(ClassDeclaration node) {
+    // Inside the class declaration { }
+    if (request.offset > node.leftBracket.offset) {
+      _addSuggestions(
+          [
+              Keyword.CONST,
+              Keyword.DYNAMIC,
+              Keyword.FACTORY,
+              Keyword.FINAL,
+              Keyword.GET,
+              Keyword.OPERATOR,
+              Keyword.SET,
+              Keyword.STATIC,
+              Keyword.VAR,
+              Keyword.VOID]);
+      return;
+    }
     // Very simplistic suggestion because analyzer will warn if
     // the extends / with / implements keywords are out of order
     if (node.extendsClause == null) {
@@ -100,22 +145,17 @@
 
   @override
   visitNode(AstNode node) {
-    if (request.offset == node.end) {
-      Token token = node.endToken;
-      if (token != null && !token.isSynthetic) {
-        if (token.lexeme == ';' || token.lexeme == '}') {
-          node.parent.accept(this);
-        }
-      }
+    if (_isOffsetAfterNode(node)) {
+      node.parent.accept(this);
     }
   }
 
   visitSimpleIdentifier(SimpleIdentifier node) {
-    AstNode parent =
-        node.getAncestor((n) => n is TopLevelVariableDeclaration);
+    AstNode parent = node.getAncestor((n) => n is TopLevelVariableDeclaration);
     if (parent is TopLevelVariableDeclaration) {
-      if (parent.variables != null && parent.variables.type != null
-          && parent.variables.type.name == node) {
+      if (parent.variables != null &&
+          parent.variables.type != null &&
+          parent.variables.type.name == node) {
         AstNode unit = node.getAncestor((n) => n is CompilationUnit);
         if (unit is CompilationUnit) {
           visitCompilationUnit(unit);
@@ -142,4 +182,16 @@
       _addSuggestion(keyword);
     });
   }
+
+  bool _isOffsetAfterNode(AstNode node) {
+    if (request.offset == node.end) {
+      Token token = node.endToken;
+      if (token != null && !token.isSynthetic) {
+        if (token.lexeme == ';' || token.lexeme == '}') {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 2cd0ce6..5280a44 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -125,6 +125,12 @@
     if (assistFile == null) {
       assistFile = file;
     }
+    // check is there are any edits
+    if (edits.isEmpty) {
+      _coverageMarker();
+      return;
+    }
+    // prepare file edit
     SourceFileEdit fileEdit = new SourceFileEdit(file);
     fileEdit.addAll(edits);
     // prepare Change
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index f0c1516..1cb09d5 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -777,7 +777,7 @@
       List<SdkLibrary> sdkLibraries = sdk.sdkLibraries;
       for (SdkLibrary sdkLibrary in sdkLibraries) {
         SourceFactory sdkSourceFactory = context.sourceFactory;
-        String libraryUri = 'dart:' + sdkLibrary.shortName;
+        String libraryUri = sdkLibrary.shortName;
         Source librarySource =
             sdkSourceFactory.resolveUri(unitSource, libraryUri);
         // prepare LibraryElement
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
index 87a4bf2..d76aa53 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -460,7 +460,7 @@
     String source = utils.getRangeText(selectionRange);
     // prepare operations to replace variables with parameters
     List<SourceEdit> replaceEdits = [];
-    for (RefactoringMethodParameter parameter in _parametersMap.values) {
+    for (RefactoringMethodParameter parameter in _parameters) {
       List<SourceRange> ranges = _parameterReferencesMap[parameter.id];
       if (ranges != null) {
         for (SourceRange range in ranges) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
index f9aea0c..2416f06 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
@@ -29,14 +29,15 @@
     InlineLocalRefactoring {
   final SearchEngine searchEngine;
   final CompilationUnit unit;
-  final LocalVariableElement element;
+  final int offset;
   String file;
   CorrectionUtils utils;
 
+  Element _variableElement;
   VariableDeclaration _variableNode;
   List<SearchMatch> _references;
 
-  InlineLocalRefactoringImpl(this.searchEngine, this.unit, this.element) {
+  InlineLocalRefactoringImpl(this.searchEngine, this.unit, this.offset) {
     file = unit.element.source.fullName;
     utils = new CorrectionUtils(unit);
   }
@@ -46,10 +47,21 @@
 
   @override
   int get referenceCount {
+    if (_references == null) {
+      return 0;
+    }
     return _references.length;
   }
 
   @override
+  String get variableName {
+    if (_variableElement == null) {
+      return null;
+    }
+    return _variableElement.name;
+  }
+
+  @override
   Future<RefactoringStatus> checkFinalConditions() {
     RefactoringStatus result = new RefactoringStatus();
     return new Future.value(result);
@@ -60,10 +72,19 @@
     RefactoringStatus result = new RefactoringStatus();
     // prepare variable
     {
-      AstNode elementNode = utils.findNode(element.nameOffset);
-      _variableNode = elementNode != null ?
-          elementNode.getAncestor((node) => node is VariableDeclaration) :
-          null;
+      AstNode offsetNode = new NodeLocator.con1(offset).searchWithin(unit);
+      if (offsetNode is SimpleIdentifier) {
+        Element element = offsetNode.staticElement;
+        if (element is LocalVariableElement) {
+          _variableElement = element;
+          _variableNode = element.node;
+        }
+      }
+    }
+    if (_variableNode == null) {
+      result = new RefactoringStatus.fatal(
+          'Local variable declaration or reference must be selected to activate this refactoring.');
+      return new Future.value(result);
     }
     // should be normal variable declaration statement
     if (_variableNode.parent is! VariableDeclarationList ||
@@ -78,20 +99,20 @@
     if (_variableNode.initializer == null) {
       String message = format(
           "Local variable '{0}' is not initialized at declaration.",
-          element.displayName);
+          _variableElement.displayName);
       result =
           new RefactoringStatus.fatal(message, new Location.fromNode(_variableNode));
       return new Future.value(result);
     }
     // prepare references
-    return searchEngine.searchReferences(element).then((references) {
+    return searchEngine.searchReferences(_variableElement).then((references) {
       this._references = references;
       // should not have assignments
       for (SearchMatch reference in _references) {
         if (reference.kind != MatchKind.READ) {
           String message = format(
               "Local variable '{0}' is assigned more than once.",
-              [element.displayName]);
+              [_variableElement.displayName]);
           return new RefactoringStatus.fatal(
               message,
               new Location.fromMatch(reference));
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
index ae55c05..42316c2 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
@@ -173,6 +173,7 @@
   CorrectionUtils utils;
   SourceChange change;
 
+  bool isDeclaration = false;
   bool deleteSource = false;
   bool inlineAll = true;
 
@@ -194,6 +195,26 @@
   }
 
   @override
+  String get className {
+    if (_methodElement == null) {
+      return null;
+    }
+    Element classElement = _methodElement.enclosingElement;
+    if (classElement is ClassElement) {
+      return classElement.displayName;
+    }
+    return null;
+  }
+
+  @override
+  String get methodName {
+    if (_methodElement == null) {
+      return null;
+    }
+    return _methodElement.displayName;
+  }
+
+  @override
   String get refactoringName {
     if (_methodElement is MethodElement) {
       return "Inline Method";
@@ -304,7 +325,8 @@
       _methodParameters = methodDeclaration.parameters;
       _methodBody = methodDeclaration.body;
       // prepare mode
-      deleteSource = selectedNode == methodDeclaration.name;
+      isDeclaration = selectedNode == methodDeclaration.name;
+      deleteSource = isDeclaration;
       inlineAll = deleteSource;
     }
     if (selectedElement is FunctionElement) {
@@ -314,7 +336,8 @@
       _methodParameters = functionDeclaration.functionExpression.parameters;
       _methodBody = functionDeclaration.functionExpression.body;
       // prepare mode
-      deleteSource = selectedNode == functionDeclaration.name;
+      isDeclaration = selectedNode == functionDeclaration.name;
+      deleteSource = isDeclaration;
       inlineAll = deleteSource;
     }
     // OK
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
index 93a231a..fac12c1 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
@@ -187,14 +187,19 @@
    * Returns a new [InlineLocalRefactoring] instance.
    */
   factory InlineLocalRefactoring(SearchEngine searchEngine,
-      CompilationUnit unit, LocalVariableElement element) {
-    return new InlineLocalRefactoringImpl(searchEngine, unit, element);
+      CompilationUnit unit, int offset) {
+    return new InlineLocalRefactoringImpl(searchEngine, unit, offset);
   }
 
   /**
    * Returns the number of references to the [VariableElement].
    */
   int get referenceCount;
+
+  /**
+   * Returns the name of the variable being inlined.
+   */
+  String get variableName;
 }
 
 
@@ -211,6 +216,12 @@
   }
 
   /**
+   * The name of the class enclosing the method being inlined.
+   * If not a class member is being inlined, then `null`.
+   */
+  String get className;
+
+  /**
    * True if the method being inlined should be removed.
    * It is an error if this field is `true` and [inlineAll] is `false`.
    */
@@ -221,6 +232,17 @@
    * the invocation site used to create this refactoring should be inlined.
    */
   void set inlineAll(bool inlineAll);
+
+  /**
+   * True if the declaration of the method is selected.
+   * So, all references should be inlined.
+   */
+  bool get isDeclaration;
+
+  /**
+   * The name of the method (or function) being inlined.
+   */
+  String get methodName;
 }
 
 
@@ -312,6 +334,12 @@
   }
 
   /**
+   * Returns the human-readable description of the kind of element being renamed
+   * (such as “class” or “function type alias”).
+   */
+  String get elementKindName;
+
+  /**
    * Sets the new name for the [Element].
    */
   void set newName(String newName);
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename.dart b/pkg/analysis_server/lib/src/services/refactoring/rename.dart
index f8d6e14..0d6dafe 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename.dart
@@ -153,6 +153,7 @@
   final SearchEngine searchEngine;
   final Element element;
   final AnalysisContext context;
+  final String elementKindName;
   final String oldName;
 
   String newName;
@@ -161,6 +162,7 @@
       : searchEngine = searchEngine,
         element = element,
         context = element.context,
+        elementKindName = element.kind.displayName,
         oldName = _getDisplayName(element);
 
   /**
diff --git a/pkg/analysis_server/lib/src/socket_server.dart b/pkg/analysis_server/lib/src/socket_server.dart
index cffffa0..7f78af6 100644
--- a/pkg/analysis_server/lib/src/socket_server.dart
+++ b/pkg/analysis_server/lib/src/socket_server.dart
@@ -5,18 +5,19 @@
 library socket.server;
 
 import 'package:analysis_server/src/analysis_server.dart';
-import 'package:analysis_server/src/channel.dart';
+import 'package:analysis_server/src/channel/channel.dart';
 import 'package:analysis_server/src/domain_analysis.dart';
 import 'package:analysis_server/src/domain_completion.dart';
 import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analysis_server/src/search/search_domain.dart';
 import 'package:analysis_server/src/domain_server.dart';
-import 'package:analysis_server/src/package_map_provider.dart';
+import 'package:analyzer/source/package_map_provider.dart';
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/src/generated/sdk_io.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/local_file_index.dart';
+import 'package:analysis_server/src/domain_execution.dart';
 
 
 /**
@@ -81,6 +82,7 @@
         new EditDomainHandler(server),
         new SearchDomainHandler(server),
         new CompletionDomainHandler(server),
+        new ExecutionDomainHandler(server),
     ];
   }
 }
\ No newline at end of file
diff --git a/pkg/analysis_server/lib/stdio_server.dart b/pkg/analysis_server/lib/stdio_server.dart
index a0cc7e3..dd48f82 100644
--- a/pkg/analysis_server/lib/stdio_server.dart
+++ b/pkg/analysis_server/lib/stdio_server.dart
@@ -7,7 +7,7 @@
 import 'dart:async';
 import 'dart:io';
 
-import 'package:analysis_server/src/channel.dart';
+import 'package:analysis_server/src/channel/byte_stream_channel.dart';
 import 'package:analysis_server/src/socket_server.dart';
 
 /**
diff --git a/pkg/analysis_server/pubspec.yaml b/pkg/analysis_server/pubspec.yaml
index cf25aa5..4843c93 100644
--- a/pkg/analysis_server/pubspec.yaml
+++ b/pkg/analysis_server/pubspec.yaml
@@ -6,13 +6,12 @@
 environment:
   sdk: '>=1.0.0 <2.0.0'
 dependencies:
-  analyzer: '>=0.22.0-dev <0.23.0'
+  analyzer: '0.23.0-dev.1'
   args: any
   logging: any
   path: any
   watcher: any
 dev_dependencies:
-  analysis_testing: '>=0.4.0 <0.5.0'
   html5lib: any
   mock: '>=0.10.0 <0.11.0'
   typed_mock: '>=0.0.4 <1.0.0'
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
new file mode 100644
index 0000000..99f39c9
--- /dev/null
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -0,0 +1,103 @@
+// Copyright (c) 2014, 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 testing.abstract_context;
+
+import 'mock_sdk.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/element.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/sdk.dart';
+import 'package:analyzer/src/generated/source_io.dart';
+
+
+/**
+ * Finds an [Element] with the given [name].
+ */
+Element findChildElement(Element root, String name, [ElementKind kind]) {
+  Element result = null;
+  root.accept(new _ElementVisitorFunctionWrapper((Element element) {
+    if (element.name != name) {
+      return;
+    }
+    if (kind != null && element.kind != kind) {
+      return;
+    }
+    result = element;
+  }));
+  return result;
+}
+
+
+/**
+ * A function to be called for every [Element].
+ */
+typedef void _ElementVisitorFunction(Element element);
+
+
+class AbstractContextTest {
+  static final DartSdk SDK = new MockSdk();
+  static final UriResolver SDK_RESOLVER = new DartUriResolver(SDK);
+
+  MemoryResourceProvider provider = new MemoryResourceProvider();
+  UriResolver resourceResolver;
+  AnalysisContext context;
+
+  Source addSource(String path, String content) {
+    File file = provider.newFile(path, content);
+    Source source = file.createSource();
+    ChangeSet changeSet = new ChangeSet();
+    changeSet.addedSource(source);
+    context.applyChanges(changeSet);
+    context.setContents(source, content);
+    return source;
+  }
+
+  /**
+   * Performs all analysis tasks in [context].
+   */
+  void performAllAnalysisTasks() {
+    while (true) {
+      AnalysisResult result = context.performAnalysisTask();
+      if (!result.hasMoreWork) {
+        break;
+      }
+    }
+  }
+
+  CompilationUnit resolveDartUnit(Source unitSource, Source librarySource) {
+    return context.resolveCompilationUnit2(unitSource, librarySource);
+  }
+
+  CompilationUnit resolveLibraryUnit(Source source) {
+    return context.resolveCompilationUnit2(source, source);
+  }
+
+  void setUp() {
+    resourceResolver = new ResourceUriResolver(provider);
+    context = AnalysisEngine.instance.createAnalysisContext();
+    context.sourceFactory = new SourceFactory([SDK_RESOLVER, resourceResolver]);
+  }
+
+  void tearDown() {
+    context = null;
+    provider = null;
+  }
+}
+
+
+/**
+ * Wraps the given [_ElementVisitorFunction] into an instance of
+ * [engine.GeneralizingElementVisitor].
+ */
+class _ElementVisitorFunctionWrapper extends GeneralizingElementVisitor {
+  final _ElementVisitorFunction function;
+  _ElementVisitorFunctionWrapper(this.function);
+  visitElement(Element element) {
+    function(element);
+    super.visitElement(element);
+  }
+}
diff --git a/pkg/analysis_server/test/abstract_single_unit.dart b/pkg/analysis_server/test/abstract_single_unit.dart
new file mode 100644
index 0000000..4239161
--- /dev/null
+++ b/pkg/analysis_server/test/abstract_single_unit.dart
@@ -0,0 +1,105 @@
+// Copyright (c) 2014, 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 test.services.src.index.abstract_single_file;
+
+import 'abstract_context.dart';
+import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/element.dart';
+import 'package:analyzer/src/generated/error.dart';
+import 'package:analyzer/src/generated/java_engine.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:unittest/unittest.dart';
+
+
+class AbstractSingleUnitTest extends AbstractContextTest {
+  bool verifyNoTestUnitErrors = true;
+
+  String testCode;
+  String testFile = '/test.dart';
+  Source testSource;
+  CompilationUnit testUnit;
+  CompilationUnitElement testUnitElement;
+  LibraryElement testLibraryElement;
+
+  void assertNoErrorsInSource(Source source) {
+    List<AnalysisError> errors = context.getErrors(source).errors;
+    expect(errors, isEmpty);
+  }
+
+  Element findElement(String name, [ElementKind kind]) {
+    return findChildElement(testUnitElement, name, kind);
+  }
+
+  /**
+   * Returns the [SimpleIdentifier] at the given search pattern.
+   */
+  SimpleIdentifier findIdentifier(String search) {
+    return findNodeAtString(search, (node) => node is SimpleIdentifier);
+  }
+
+  AstNode findNodeAtOffset(int offset, [Predicate<AstNode> predicate]) {
+    AstNode result = new NodeLocator.con1(offset).searchWithin(testUnit);
+    if (result != null && predicate != null) {
+      result = result.getAncestor(predicate);
+    }
+    return result;
+  }
+
+  AstNode findNodeAtString(String search, [Predicate<AstNode> predicate]) {
+    int offset = findOffset(search);
+    return findNodeAtOffset(offset, predicate);
+  }
+
+  Element findNodeElementAtString(String search,
+      [Predicate<AstNode> predicate]) {
+    AstNode node = findNodeAtString(search, predicate);
+    if (node == null) {
+      return null;
+    }
+    return ElementLocator.locate(node);
+  }
+
+  int findEnd(String search) {
+    return findOffset(search) + search.length;
+  }
+
+  int findOffset(String search) {
+    int offset = testCode.indexOf(search);
+    expect(offset, isNonNegative, reason: "Not found '$search' in\n$testCode");
+    return offset;
+  }
+
+  int getLeadingIdentifierLength(String search) {
+    int length = 0;
+    while (length < search.length) {
+      int c = search.codeUnitAt(length);
+      if (c >= 'a'.codeUnitAt(0) && c <= 'z'.codeUnitAt(0)) {
+        length++;
+        continue;
+      }
+      if (c >= 'A'.codeUnitAt(0) && c <= 'Z'.codeUnitAt(0)) {
+        length++;
+        continue;
+      }
+      if (c >= '0'.codeUnitAt(0) && c <= '9'.codeUnitAt(0)) {
+        length++;
+        continue;
+      }
+      break;
+    }
+    return length;
+  }
+
+  void resolveTestUnit(String code) {
+    testCode = code;
+    testSource = addSource(testFile, code);
+    testUnit = resolveLibraryUnit(testSource);
+    if (verifyNoTestUnitErrors) {
+      assertNoErrorsInSource(testSource);
+    }
+    testUnitElement = testUnit.element;
+    testLibraryElement = testUnitElement.library;
+  }
+}
diff --git a/pkg/analysis_server/test/analysis/get_errors_test.dart b/pkg/analysis_server/test/analysis/get_errors_test.dart
index 54c2b21..43d2219 100644
--- a/pkg/analysis_server/test/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/get_errors_test.dart
@@ -8,7 +8,7 @@
 
 import 'package:analysis_server/src/domain_analysis.dart';
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../reflective_tests.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:unittest/unittest.dart';
 
@@ -47,9 +47,7 @@
 
   test_fileDoesNotExist() {
     String file = '$projectPath/doesNotExist.dart';
-    return _getErrors(file).then((List<AnalysisError> errors) {
-      expect(errors, isEmpty);
-    });
+    return _checkInvalid(file);
   }
 
   test_fileWithoutContext() {
@@ -59,9 +57,7 @@
   print(42);
 }
 ''');
-    return _getErrors(file).then((List<AnalysisError> errors) {
-      expect(errors, isEmpty);
-    });
+    return _checkInvalid(file);
   }
 
   test_hasErrors() {
@@ -102,18 +98,15 @@
     // handle the request synchronously
     Request request = _createGetErrorsRequest();
     server.handleRequest(request);
-    // remove context, causes sending a 'cancelled' error
+    // remove context, causes sending an "invalid file" error
     {
       Folder projectFolder = resourceProvider.getResource(projectPath);
       server.contextDirectoryManager.removeContext(projectFolder);
     }
     // wait for an error response
     return serverChannel.waitForResponse(request).then((Response response) {
-      var result = new AnalysisGetErrorsResult.fromResponse(response);
-      expect(result.errors, isEmpty);
-      RequestError error = response.error;
-      expect(error, isNotNull);
-      expect(error.code, RequestErrorCode.GET_ERRORS_ERROR);
+      expect(response.error, isNotNull);
+      expect(response.error.code, RequestErrorCode.GET_ERRORS_INVALID_FILE);
     });
   }
 
@@ -127,4 +120,12 @@
       return new AnalysisGetErrorsResult.fromResponse(response).errors;
     });
   }
+
+  Future _checkInvalid(String file) {
+    Request request = _createGetErrorsRequest();
+    return serverChannel.sendRequest(request).then((Response response) {
+      expect(response.error, isNotNull);
+      expect(response.error.code, RequestErrorCode.GET_ERRORS_INVALID_FILE);
+    });
+  }
 }
diff --git a/pkg/analysis_server/test/analysis/notification_errors_test.dart b/pkg/analysis_server/test/analysis/notification_errors_test.dart
index f7b3597..d4fbe02 100644
--- a/pkg/analysis_server/test/analysis/notification_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_errors_test.dart
@@ -7,7 +7,7 @@
 import 'package:analysis_server/src/constants.dart';
 import 'package:analysis_server/src/domain_analysis.dart';
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../analysis_abstract.dart';
diff --git a/pkg/analysis_server/test/analysis_abstract.dart b/pkg/analysis_server/test/analysis_abstract.dart
index df195fe..518cffd 100644
--- a/pkg/analysis_server/test/analysis_abstract.dart
+++ b/pkg/analysis_server/test/analysis_abstract.dart
@@ -10,7 +10,7 @@
 import 'package:analysis_server/src/domain_analysis.dart';
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/services/index/index.dart';
-import 'package:analysis_testing/mock_sdk.dart';
+import 'mock_sdk.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:unittest/unittest.dart';
diff --git a/pkg/analysis_server/test/analysis_hover_test.dart b/pkg/analysis_server/test/analysis_hover_test.dart
index 64e1761..e81d2d8 100644
--- a/pkg/analysis_server/test/analysis_hover_test.dart
+++ b/pkg/analysis_server/test/analysis_hover_test.dart
@@ -7,7 +7,7 @@
 import 'dart:async';
 
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import 'reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'analysis_abstract.dart';
diff --git a/pkg/analysis_server/test/analysis_notification_highlights_test.dart b/pkg/analysis_server/test/analysis_notification_highlights_test.dart
index b5619e2..d4ecdde3 100644
--- a/pkg/analysis_server/test/analysis_notification_highlights_test.dart
+++ b/pkg/analysis_server/test/analysis_notification_highlights_test.dart
@@ -8,7 +8,7 @@
 
 import 'package:analysis_server/src/constants.dart';
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import 'reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'analysis_abstract.dart';
diff --git a/pkg/analysis_server/test/analysis_notification_navigation_test.dart b/pkg/analysis_server/test/analysis_notification_navigation_test.dart
index 0ea9303..e05cee6 100644
--- a/pkg/analysis_server/test/analysis_notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis_notification_navigation_test.dart
@@ -8,7 +8,7 @@
 
 import 'package:analysis_server/src/constants.dart';
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import 'reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'analysis_abstract.dart';
diff --git a/pkg/analysis_server/test/analysis_notification_occurrences_test.dart b/pkg/analysis_server/test/analysis_notification_occurrences_test.dart
index 9685598..007ab38 100644
--- a/pkg/analysis_server/test/analysis_notification_occurrences_test.dart
+++ b/pkg/analysis_server/test/analysis_notification_occurrences_test.dart
@@ -8,7 +8,7 @@
 
 import 'package:analysis_server/src/constants.dart';
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import 'reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'analysis_abstract.dart';
diff --git a/pkg/analysis_server/test/analysis_notification_outline_test.dart b/pkg/analysis_server/test/analysis_notification_outline_test.dart
index c722d83..e547fee 100644
--- a/pkg/analysis_server/test/analysis_notification_outline_test.dart
+++ b/pkg/analysis_server/test/analysis_notification_outline_test.dart
@@ -8,7 +8,7 @@
 
 import 'package:analysis_server/src/constants.dart';
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import 'reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'analysis_abstract.dart';
diff --git a/pkg/analysis_server/test/analysis_notification_overrides_test.dart b/pkg/analysis_server/test/analysis_notification_overrides_test.dart
index b6c37ac..dfcfa48 100644
--- a/pkg/analysis_server/test/analysis_notification_overrides_test.dart
+++ b/pkg/analysis_server/test/analysis_notification_overrides_test.dart
@@ -8,7 +8,7 @@
 
 import 'package:analysis_server/src/constants.dart';
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import 'reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'analysis_abstract.dart';
diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart
index 36e8fcc..b138eb6 100644
--- a/pkg/analysis_server/test/analysis_server_test.dart
+++ b/pkg/analysis_server/test/analysis_server_test.dart
@@ -10,11 +10,11 @@
 import 'package:analysis_server/src/domain_server.dart';
 import 'package:analysis_server/src/operation/operation.dart';
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/mock_sdk.dart';
+import 'mock_sdk.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/java_engine.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:mock/mock.dart';
+import 'package:typed_mock/typed_mock.dart';
 import 'package:unittest/unittest.dart';
 
 import 'mocks.dart';
@@ -23,17 +23,16 @@
   group('AnalysisServer', () {
     test('server.status notifications', () {
       AnalysisServerTestHelper helper = new AnalysisServerTestHelper();
-      MockAnalysisContext context = new MockAnalysisContext();
-      MockSource source = new MockSource();
-      source.when(callsTo('get fullName')).alwaysReturn('foo.dart');
-      source.when(callsTo('get isInSystemLibrary')).alwaysReturn(false);
+      MockAnalysisContext context = new MockAnalysisContext('context');
+      MockSource source = new MockSource('source');
+      when(source.fullName).thenReturn('foo.dart');
+      when(source.isInSystemLibrary).thenReturn(false);
       ChangeNoticeImpl notice = new ChangeNoticeImpl(source);
       notice.setErrors([], new LineInfo([0]));
       AnalysisResult firstResult = new AnalysisResult([notice], 0, '', 0);
       AnalysisResult lastResult = new AnalysisResult(null, 1, '', 1);
-      context.when(callsTo("performAnalysisTask"))
-        ..thenReturn(firstResult, 3)
-        ..thenReturn(lastResult);
+      when(context.performAnalysisTask).thenReturnList(
+          [firstResult, firstResult, firstResult, lastResult]);
       helper.server.serverServices.add(ServerService.STATUS);
       helper.server.schedulePerformAnalysisOperation(context);
       // Pump the event queue to make sure the server has finished any
diff --git a/pkg/analysis_server/test/channel/byte_stream_channel_test.dart b/pkg/analysis_server/test/channel/byte_stream_channel_test.dart
new file mode 100644
index 0000000..a7e88c0
--- /dev/null
+++ b/pkg/analysis_server/test/channel/byte_stream_channel_test.dart
@@ -0,0 +1,252 @@
+// Copyright (c) 2014, 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 test.channel.byte_stream;
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:analysis_server/src/channel/byte_stream_channel.dart';
+import 'package:analysis_server/src/protocol.dart';
+import 'package:unittest/unittest.dart';
+
+import '../mocks.dart';
+
+main() {
+  group('ByteStreamClientChannel',  () {
+    setUp(ByteStreamClientChannelTest.setUp);
+    test('close', ByteStreamClientChannelTest.close);
+    test('listen_notification', ByteStreamClientChannelTest.listen_notification);
+    test('listen_response', ByteStreamClientChannelTest.listen_response);
+    test('sendRequest', ByteStreamClientChannelTest.sendRequest);
+  });
+  group('ByteStreamServerChannel', () {
+    setUp(ByteStreamServerChannelTest.setUp);
+    test('closed', ByteStreamServerChannelTest.closed);
+    test('listen_wellFormedRequest',
+        ByteStreamServerChannelTest.listen_wellFormedRequest);
+    test('listen_invalidRequest',
+        ByteStreamServerChannelTest.listen_invalidRequest);
+    test('listen_invalidJson', ByteStreamServerChannelTest.listen_invalidJson);
+    test('listen_streamError', ByteStreamServerChannelTest.listen_streamError);
+    test('listen_streamDone', ByteStreamServerChannelTest.listen_streamDone);
+    test('sendNotification', ByteStreamServerChannelTest.sendNotification);
+    test('sendResponse', ByteStreamServerChannelTest.sendResponse);
+  });
+}
+
+class ByteStreamClientChannelTest {
+  static ByteStreamClientChannel channel;
+
+  /**
+   * Sink that may be used to deliver data to the channel, as though it's
+   * coming from the server.
+   */
+  static IOSink inputSink;
+
+  /**
+   * Sink through which the channel delivers data to the server.
+   */
+  static IOSink outputSink;
+
+  /**
+   * Stream of lines sent back to the client by the channel.
+   */
+  static Stream<String> outputLineStream;
+
+  static Future close() {
+    bool doneCalled = false;
+    bool closeCalled = false;
+    // add listener so that outputSink will trigger done/close futures
+    outputLineStream.listen((_) { /* no-op */ });
+    outputSink.done.then((_) {
+      doneCalled = true;
+    });
+    channel.close().then((_) {
+      closeCalled = true;
+    });
+    return pumpEventQueue().then((_) {
+      expect(doneCalled, isTrue);
+      expect(closeCalled, isTrue);
+    });
+  }
+
+  static Future listen_notification() {
+    List<Notification> notifications = [];
+    channel.notificationStream.forEach((n) => notifications.add(n));
+    inputSink.writeln('{"event":"server.connected"}');
+    return pumpEventQueue().then((_) {
+      expect(notifications.length, equals(1));
+      expect(notifications[0].event, equals('server.connected'));
+    });
+  }
+
+  static Future listen_response() {
+    List<Response> responses = [];
+    channel.responseStream.forEach((n) => responses.add(n));
+    inputSink.writeln('{"id":"72"}');
+    return pumpEventQueue().then((_) {
+      expect(responses.length, equals(1));
+      expect(responses[0].id, equals('72'));
+    });
+  }
+
+  static Future sendRequest() {
+    int assertCount = 0;
+    Request request = new Request('72', 'foo.bar');
+    outputLineStream.first
+        .then((line) => JSON.decode(line))
+        .then((json) {
+          expect(json[Request.ID], equals('72'));
+          expect(json[Request.METHOD], equals('foo.bar'));
+          inputSink.writeln('{"id":"73"}');
+          inputSink.writeln('{"id":"72"}');
+          assertCount++;
+        });
+    channel.sendRequest(request)
+        .then((Response response) {
+          expect(response.id, equals('72'));
+          assertCount++;
+        });
+    return pumpEventQueue().then((_) => expect(assertCount, equals(2)));
+  }
+
+  static void setUp() {
+    var inputStream = new StreamController<List<int>>();
+    inputSink = new IOSink(inputStream);
+    var outputStream = new StreamController<List<int>>();
+    outputLineStream = outputStream.stream.transform((new Utf8Codec()).decoder
+        ).transform(new LineSplitter());
+    outputSink = new IOSink(outputStream);
+    channel = new ByteStreamClientChannel(inputStream.stream, outputSink);
+  }
+}
+
+class ByteStreamServerChannelTest {
+  static ByteStreamServerChannel channel;
+
+  /**
+   * Sink that may be used to deliver data to the channel, as though it's
+   * coming from the client.
+   */
+  static IOSink inputSink;
+
+  /**
+   * Stream of lines sent back to the client by the channel.
+   */
+  static Stream<String> outputLineStream;
+
+  /**
+   * Stream of requests received from the channel via [listen()].
+   */
+  static Stream<Request> requestStream;
+
+  /**
+   * Stream of errors received from the channel via [listen()].
+   */
+  static Stream errorStream;
+
+  /**
+   * Future which is completed when then [listen()] reports [onDone].
+   */
+  static Future doneFuture;
+
+  static Future closed() {
+    return inputSink.close().then((_) => channel.closed.timeout(new Duration(
+        seconds: 1)));
+  }
+
+  static Future listen_invalidJson() {
+    inputSink.writeln('{"id":');
+    return inputSink.flush().then((_) => outputLineStream.first.timeout(
+        new Duration(seconds: 1))).then((String response) {
+      var jsonResponse = new JsonCodec().decode(response);
+      expect(jsonResponse, isMap);
+      expect(jsonResponse, contains('error'));
+      expect(jsonResponse['error'], isNotNull);
+    });
+  }
+
+  static Future listen_invalidRequest() {
+    inputSink.writeln('{"id":"0"}');
+    return inputSink.flush().then((_) => outputLineStream.first.timeout(
+        new Duration(seconds: 1))).then((String response) {
+      var jsonResponse = new JsonCodec().decode(response);
+      expect(jsonResponse, isMap);
+      expect(jsonResponse, contains('error'));
+      expect(jsonResponse['error'], isNotNull);
+    });
+  }
+
+  static Future listen_streamDone() {
+    return inputSink.close().then((_) => doneFuture.timeout(new Duration(
+        seconds: 1)));
+  }
+
+  static Future listen_streamError() {
+    var error = new Error();
+    inputSink.addError(error);
+    return inputSink.flush().then((_) => errorStream.first.timeout(new Duration(
+        seconds: 1))).then((var receivedError) {
+      expect(receivedError, same(error));
+    });
+  }
+
+  static Future listen_wellFormedRequest() {
+    inputSink.writeln('{"id":"0","method":"server.version"}');
+    return inputSink.flush().then((_) => requestStream.first.timeout(
+        new Duration(seconds: 1))).then((Request request) {
+      expect(request.id, equals("0"));
+      expect(request.method, equals("server.version"));
+    });
+  }
+
+  static Future sendNotification() {
+    channel.sendNotification(new Notification('foo'));
+    return outputLineStream.first.timeout(new Duration(seconds: 1)).then((String
+        notification) {
+      var jsonNotification = new JsonCodec().decode(notification);
+      expect(jsonNotification, isMap);
+      expect(jsonNotification, contains('event'));
+      expect(jsonNotification['event'], equals('foo'));
+    });
+  }
+
+  static Future sendResponse() {
+    channel.sendResponse(new Response('foo'));
+    return outputLineStream.first.timeout(new Duration(seconds: 1)).then((String
+        response) {
+      var jsonResponse = new JsonCodec().decode(response);
+      expect(jsonResponse, isMap);
+      expect(jsonResponse, contains('id'));
+      expect(jsonResponse['id'], equals('foo'));
+    });
+  }
+
+  static void setUp() {
+    StreamController<List<int>> inputStream = new StreamController<List<int>>();
+    inputSink = new IOSink(inputStream);
+    StreamController<List<int>> outputStream = new StreamController<List<int>>(
+        );
+    outputLineStream = outputStream.stream.transform((new Utf8Codec()).decoder
+        ).transform(new LineSplitter());
+    IOSink outputSink = new IOSink(outputStream);
+    channel = new ByteStreamServerChannel(inputStream.stream, outputSink);
+    StreamController<Request> requestStreamController =
+        new StreamController<Request>();
+    requestStream = requestStreamController.stream;
+    StreamController errorStreamController = new StreamController();
+    errorStream = errorStreamController.stream;
+    Completer doneCompleter = new Completer();
+    doneFuture = doneCompleter.future;
+    channel.listen((Request request) {
+      requestStreamController.add(request);
+    }, onError: (error) {
+      errorStreamController.add(error);
+    }, onDone: () {
+      doneCompleter.complete();
+    });
+  }
+}
diff --git a/pkg/analysis_server/test/channel/test_all.dart b/pkg/analysis_server/test/channel/test_all.dart
new file mode 100644
index 0000000..a3a0c3a
--- /dev/null
+++ b/pkg/analysis_server/test/channel/test_all.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2014, 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 test.channel.all;
+
+import 'package:unittest/unittest.dart';
+
+import 'byte_stream_channel_test.dart' as byte_stream_channel_test;
+import 'web_socket_channel_test.dart' as web_socket_channel_test;
+
+
+/**
+ * Utility for manually running all tests.
+ */
+main() {
+  groupSep = ' | ';
+  group('computer', () {
+    byte_stream_channel_test.main();
+    web_socket_channel_test.main();
+  });
+}
\ No newline at end of file
diff --git a/pkg/analysis_server/test/channel/web_socket_channel_test.dart b/pkg/analysis_server/test/channel/web_socket_channel_test.dart
new file mode 100644
index 0000000..9c5a763
--- /dev/null
+++ b/pkg/analysis_server/test/channel/web_socket_channel_test.dart
@@ -0,0 +1,159 @@
+// Copyright (c) 2014, 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 test.channel.web_socket;
+
+import 'dart:async';
+
+import 'package:analysis_server/src/channel/web_socket_channel.dart';
+import 'package:analysis_server/src/protocol.dart';
+import 'package:unittest/unittest.dart';
+
+import '../mocks.dart';
+
+main() {
+  group('WebSocketChannel', () {
+    setUp(WebSocketChannelTest.setUp);
+    test('close', WebSocketChannelTest.close);
+    test('invalidJsonToClient', WebSocketChannelTest.invalidJsonToClient);
+    test('invalidJsonToServer', WebSocketChannelTest.invalidJsonToServer);
+    test('notification', WebSocketChannelTest.notification);
+    test('notificationAndResponse', WebSocketChannelTest.notificationAndResponse);
+    test('request', WebSocketChannelTest.request);
+    test('requestResponse', WebSocketChannelTest.requestResponse);
+    test('response', WebSocketChannelTest.response);
+  });
+}
+
+class WebSocketChannelTest {
+  static MockSocket socket;
+  static WebSocketClientChannel client;
+  static WebSocketServerChannel server;
+
+  static List requestsReceived;
+  static List responsesReceived;
+  static List notificationsReceived;
+
+  static Future close() {
+    var timeout = new Duration(seconds: 1);
+    var future = client.responseStream.drain().timeout(timeout);
+    client.close();
+    return future;
+  }
+
+  static void expectMsgCount({requestCount: 0,
+                              responseCount: 0,
+                              notificationCount: 0}) {
+    expect(requestsReceived, hasLength(requestCount));
+    expect(responsesReceived, hasLength(responseCount));
+    expect(notificationsReceived, hasLength(notificationCount));
+  }
+
+  static Future invalidJsonToClient() {
+    var result = client.responseStream
+        .first
+        .timeout(new Duration(seconds: 1))
+        .then((Response response) {
+          expect(response.id, equals('myId'));
+          expectMsgCount(responseCount: 1);
+        });
+    socket.twin.add('{"foo":"bar"}');
+    server.sendResponse(new Response('myId'));
+    return result;
+  }
+
+  static Future invalidJsonToServer() {
+    var result = client.responseStream
+        .first
+        .timeout(new Duration(seconds: 1))
+        .then((Response response) {
+          expect(response.id, equals(''));
+          expect(response.error, isNotNull);
+          expectMsgCount(responseCount: 1);
+        });
+    socket.add('"blat"');
+    return result;
+  }
+
+  static Future notification() {
+    var result = client.notificationStream
+        .first
+        .timeout(new Duration(seconds: 1))
+        .then((Notification notification) {
+          expect(notification.event, equals('myEvent'));
+          expectMsgCount(notificationCount: 1);
+          expect(notificationsReceived.first, equals(notification));
+        });
+    server.sendNotification(new Notification('myEvent'));
+    return result;
+  }
+
+  static Future notificationAndResponse() {
+    var result = Future
+        .wait([
+          client.notificationStream.first,
+          client.responseStream.first])
+        .timeout(new Duration(seconds: 1))
+        .then((_) => expectMsgCount(responseCount: 1, notificationCount: 1));
+    server
+        ..sendNotification(new Notification('myEvent'))
+        ..sendResponse(new Response('myId'));
+    return result;
+  }
+
+  static void request() {
+    client.sendRequest(new Request('myId', 'myMth'));
+    server.listen((Request request) {
+      expect(request.id, equals('myId'));
+      expect(request.method, equals('myMth'));
+      expectMsgCount(requestCount: 1);
+    });
+  }
+
+  static Future requestResponse() {
+    // Simulate server sending a response by echoing the request.
+    server.listen((Request request) =>
+        server.sendResponse(new Response(request.id)));
+    return client.sendRequest(new Request('myId', 'myMth'))
+        .timeout(new Duration(seconds: 1))
+        .then((Response response) {
+          expect(response.id, equals('myId'));
+          expectMsgCount(requestCount: 1, responseCount: 1);
+
+          expect(requestsReceived.first is Request, isTrue);
+          Request request = requestsReceived.first;
+          expect(request.id, equals('myId'));
+          expect(request.method, equals('myMth'));
+          expect(responsesReceived.first, equals(response));
+        });
+  }
+
+  static Future response() {
+    server.sendResponse(new Response('myId'));
+    return client.responseStream
+        .first
+        .timeout(new Duration(seconds: 1))
+        .then((Response response) {
+          expect(response.id, equals('myId'));
+          expectMsgCount(responseCount: 1);
+        });
+  }
+
+  static void setUp() {
+    socket = new MockSocket.pair();
+    client = new WebSocketClientChannel(socket);
+    server = new WebSocketServerChannel(socket.twin);
+
+    requestsReceived = [];
+    responsesReceived = [];
+    notificationsReceived = [];
+
+    // Allow multiple listeners on server side for testing.
+    socket.twin.allowMultipleListeners();
+
+    server.listen(requestsReceived.add);
+    client.responseStream.listen(responsesReceived.add);
+    client.notificationStream.listen(notificationsReceived.add);
+  }
+}
diff --git a/pkg/analysis_server/test/channel_test.dart b/pkg/analysis_server/test/channel_test.dart
deleted file mode 100644
index e1909ae..0000000
--- a/pkg/analysis_server/test/channel_test.dart
+++ /dev/null
@@ -1,395 +0,0 @@
-// Copyright (c) 2014, 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 test.channel;
-
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:analysis_server/src/channel.dart';
-import 'package:analysis_server/src/protocol.dart' hide Error;
-import 'package:unittest/unittest.dart';
-
-import 'mocks.dart';
-
-main() {
-  group('WebSocketChannel', () {
-    setUp(WebSocketChannelTest.setUp);
-    test('close', WebSocketChannelTest.close);
-    test('invalidJsonToClient', WebSocketChannelTest.invalidJsonToClient);
-    test('invalidJsonToServer', WebSocketChannelTest.invalidJsonToServer);
-    test('notification', WebSocketChannelTest.notification);
-    test('notificationAndResponse', WebSocketChannelTest.notificationAndResponse);
-    test('request', WebSocketChannelTest.request);
-    test('requestResponse', WebSocketChannelTest.requestResponse);
-    test('response', WebSocketChannelTest.response);
-  });
-  group('ByteStreamClientChannel',  () {
-    setUp(ByteStreamClientChannelTest.setUp);
-    test('close', ByteStreamClientChannelTest.close);
-    test('listen_notification', ByteStreamClientChannelTest.listen_notification);
-    test('listen_response', ByteStreamClientChannelTest.listen_response);
-    test('sendRequest', ByteStreamClientChannelTest.sendRequest);
-  });
-  group('ByteStreamServerChannel', () {
-    setUp(ByteStreamServerChannelTest.setUp);
-    test('closed', ByteStreamServerChannelTest.closed);
-    test('listen_wellFormedRequest',
-        ByteStreamServerChannelTest.listen_wellFormedRequest);
-    test('listen_invalidRequest',
-        ByteStreamServerChannelTest.listen_invalidRequest);
-    test('listen_invalidJson', ByteStreamServerChannelTest.listen_invalidJson);
-    test('listen_streamError', ByteStreamServerChannelTest.listen_streamError);
-    test('listen_streamDone', ByteStreamServerChannelTest.listen_streamDone);
-    test('sendNotification', ByteStreamServerChannelTest.sendNotification);
-    test('sendResponse', ByteStreamServerChannelTest.sendResponse);
-  });
-}
-
-class WebSocketChannelTest {
-  static MockSocket socket;
-  static WebSocketClientChannel client;
-  static WebSocketServerChannel server;
-
-  static List requestsReceived;
-  static List responsesReceived;
-  static List notificationsReceived;
-
-  static void setUp() {
-    socket = new MockSocket.pair();
-    client = new WebSocketClientChannel(socket);
-    server = new WebSocketServerChannel(socket.twin);
-
-    requestsReceived = [];
-    responsesReceived = [];
-    notificationsReceived = [];
-
-    // Allow multiple listeners on server side for testing.
-    socket.twin.allowMultipleListeners();
-
-    server.listen(requestsReceived.add);
-    client.responseStream.listen(responsesReceived.add);
-    client.notificationStream.listen(notificationsReceived.add);
-  }
-
-  static Future close() {
-    var timeout = new Duration(seconds: 1);
-    var future = client.responseStream.drain().timeout(timeout);
-    client.close();
-    return future;
-  }
-
-  static Future invalidJsonToClient() {
-    var result = client.responseStream
-        .first
-        .timeout(new Duration(seconds: 1))
-        .then((Response response) {
-          expect(response.id, equals('myId'));
-          expectMsgCount(responseCount: 1);
-        });
-    socket.twin.add('{"foo":"bar"}');
-    server.sendResponse(new Response('myId'));
-    return result;
-  }
-
-  static Future invalidJsonToServer() {
-    var result = client.responseStream
-        .first
-        .timeout(new Duration(seconds: 1))
-        .then((Response response) {
-          expect(response.id, equals(''));
-          expect(response.error, isNotNull);
-          expectMsgCount(responseCount: 1);
-        });
-    socket.add('"blat"');
-    return result;
-  }
-
-  static Future notification() {
-    var result = client.notificationStream
-        .first
-        .timeout(new Duration(seconds: 1))
-        .then((Notification notification) {
-          expect(notification.event, equals('myEvent'));
-          expectMsgCount(notificationCount: 1);
-          expect(notificationsReceived.first, equals(notification));
-        });
-    server.sendNotification(new Notification('myEvent'));
-    return result;
-  }
-
-  static Future notificationAndResponse() {
-    var result = Future
-        .wait([
-          client.notificationStream.first,
-          client.responseStream.first])
-        .timeout(new Duration(seconds: 1))
-        .then((_) => expectMsgCount(responseCount: 1, notificationCount: 1));
-    server
-        ..sendNotification(new Notification('myEvent'))
-        ..sendResponse(new Response('myId'));
-    return result;
-  }
-
-  static void request() {
-    client.sendRequest(new Request('myId', 'myMth'));
-    server.listen((Request request) {
-      expect(request.id, equals('myId'));
-      expect(request.method, equals('myMth'));
-      expectMsgCount(requestCount: 1);
-    });
-  }
-
-  static Future requestResponse() {
-    // Simulate server sending a response by echoing the request.
-    server.listen((Request request) =>
-        server.sendResponse(new Response(request.id)));
-    return client.sendRequest(new Request('myId', 'myMth'))
-        .timeout(new Duration(seconds: 1))
-        .then((Response response) {
-          expect(response.id, equals('myId'));
-          expectMsgCount(requestCount: 1, responseCount: 1);
-
-          expect(requestsReceived.first is Request, isTrue);
-          Request request = requestsReceived.first;
-          expect(request.id, equals('myId'));
-          expect(request.method, equals('myMth'));
-          expect(responsesReceived.first, equals(response));
-        });
-  }
-
-  static Future response() {
-    server.sendResponse(new Response('myId'));
-    return client.responseStream
-        .first
-        .timeout(new Duration(seconds: 1))
-        .then((Response response) {
-          expect(response.id, equals('myId'));
-          expectMsgCount(responseCount: 1);
-        });
-  }
-
-  static void expectMsgCount({requestCount: 0,
-                              responseCount: 0,
-                              notificationCount: 0}) {
-    expect(requestsReceived, hasLength(requestCount));
-    expect(responsesReceived, hasLength(responseCount));
-    expect(notificationsReceived, hasLength(notificationCount));
-  }
-}
-
-class ByteStreamClientChannelTest {
-  static ByteStreamClientChannel channel;
-
-  /**
-   * Sink that may be used to deliver data to the channel, as though it's
-   * coming from the server.
-   */
-  static IOSink inputSink;
-
-  /**
-   * Sink through which the channel delivers data to the server.
-   */
-  static IOSink outputSink;
-
-  /**
-   * Stream of lines sent back to the client by the channel.
-   */
-  static Stream<String> outputLineStream;
-
-  static void setUp() {
-    var inputStream = new StreamController<List<int>>();
-    inputSink = new IOSink(inputStream);
-    var outputStream = new StreamController<List<int>>();
-    outputLineStream = outputStream.stream.transform((new Utf8Codec()).decoder
-        ).transform(new LineSplitter());
-    outputSink = new IOSink(outputStream);
-    channel = new ByteStreamClientChannel(inputStream.stream, outputSink);
-  }
-
-  static Future close() {
-    bool doneCalled = false;
-    bool closeCalled = false;
-    // add listener so that outputSink will trigger done/close futures
-    outputLineStream.listen((_) { /* no-op */ });
-    outputSink.done.then((_) {
-      doneCalled = true;
-    });
-    channel.close().then((_) {
-      closeCalled = true;
-    });
-    return pumpEventQueue().then((_) {
-      expect(doneCalled, isTrue);
-      expect(closeCalled, isTrue);
-    });
-  }
-
-  static Future listen_notification() {
-    List<Notification> notifications = [];
-    channel.notificationStream.forEach((n) => notifications.add(n));
-    inputSink.writeln('{"event":"server.connected"}');
-    return pumpEventQueue().then((_) {
-      expect(notifications.length, equals(1));
-      expect(notifications[0].event, equals('server.connected'));
-    });
-  }
-
-  static Future listen_response() {
-    List<Response> responses = [];
-    channel.responseStream.forEach((n) => responses.add(n));
-    inputSink.writeln('{"id":"72"}');
-    return pumpEventQueue().then((_) {
-      expect(responses.length, equals(1));
-      expect(responses[0].id, equals('72'));
-    });
-  }
-
-  static Future sendRequest() {
-    int assertCount = 0;
-    Request request = new Request('72', 'foo.bar');
-    outputLineStream.first
-        .then((line) => JSON.decode(line))
-        .then((json) {
-          expect(json[Request.ID], equals('72'));
-          expect(json[Request.METHOD], equals('foo.bar'));
-          inputSink.writeln('{"id":"73"}');
-          inputSink.writeln('{"id":"72"}');
-          assertCount++;
-        });
-    channel.sendRequest(request)
-        .then((Response response) {
-          expect(response.id, equals('72'));
-          assertCount++;
-        });
-    return pumpEventQueue().then((_) => expect(assertCount, equals(2)));
-  }
-}
-
-class ByteStreamServerChannelTest {
-  static ByteStreamServerChannel channel;
-
-  /**
-   * Sink that may be used to deliver data to the channel, as though it's
-   * coming from the client.
-   */
-  static IOSink inputSink;
-
-  /**
-   * Stream of lines sent back to the client by the channel.
-   */
-  static Stream<String> outputLineStream;
-
-  /**
-   * Stream of requests received from the channel via [listen()].
-   */
-  static Stream<Request> requestStream;
-
-  /**
-   * Stream of errors received from the channel via [listen()].
-   */
-  static Stream errorStream;
-
-  /**
-   * Future which is completed when then [listen()] reports [onDone].
-   */
-  static Future doneFuture;
-
-  static void setUp() {
-    StreamController<List<int>> inputStream = new StreamController<List<int>>();
-    inputSink = new IOSink(inputStream);
-    StreamController<List<int>> outputStream = new StreamController<List<int>>(
-        );
-    outputLineStream = outputStream.stream.transform((new Utf8Codec()).decoder
-        ).transform(new LineSplitter());
-    IOSink outputSink = new IOSink(outputStream);
-    channel = new ByteStreamServerChannel(inputStream.stream, outputSink);
-    StreamController<Request> requestStreamController =
-        new StreamController<Request>();
-    requestStream = requestStreamController.stream;
-    StreamController errorStreamController = new StreamController();
-    errorStream = errorStreamController.stream;
-    Completer doneCompleter = new Completer();
-    doneFuture = doneCompleter.future;
-    channel.listen((Request request) {
-      requestStreamController.add(request);
-    }, onError: (error) {
-      errorStreamController.add(error);
-    }, onDone: () {
-      doneCompleter.complete();
-    });
-  }
-
-  static Future closed() {
-    return inputSink.close().then((_) => channel.closed.timeout(new Duration(
-        seconds: 1)));
-  }
-
-  static Future listen_wellFormedRequest() {
-    inputSink.writeln('{"id":"0","method":"server.version"}');
-    return inputSink.flush().then((_) => requestStream.first.timeout(
-        new Duration(seconds: 1))).then((Request request) {
-      expect(request.id, equals("0"));
-      expect(request.method, equals("server.version"));
-    });
-  }
-
-  static Future listen_invalidRequest() {
-    inputSink.writeln('{"id":"0"}');
-    return inputSink.flush().then((_) => outputLineStream.first.timeout(
-        new Duration(seconds: 1))).then((String response) {
-      var jsonResponse = new JsonCodec().decode(response);
-      expect(jsonResponse, isMap);
-      expect(jsonResponse, contains('error'));
-      expect(jsonResponse['error'], isNotNull);
-    });
-  }
-
-  static Future listen_invalidJson() {
-    inputSink.writeln('{"id":');
-    return inputSink.flush().then((_) => outputLineStream.first.timeout(
-        new Duration(seconds: 1))).then((String response) {
-      var jsonResponse = new JsonCodec().decode(response);
-      expect(jsonResponse, isMap);
-      expect(jsonResponse, contains('error'));
-      expect(jsonResponse['error'], isNotNull);
-    });
-  }
-
-  static Future listen_streamError() {
-    var error = new Error();
-    inputSink.addError(error);
-    return inputSink.flush().then((_) => errorStream.first.timeout(new Duration(
-        seconds: 1))).then((var receivedError) {
-      expect(receivedError, same(error));
-    });
-  }
-
-  static Future listen_streamDone() {
-    return inputSink.close().then((_) => doneFuture.timeout(new Duration(
-        seconds: 1)));
-  }
-
-  static Future sendNotification() {
-    channel.sendNotification(new Notification('foo'));
-    return outputLineStream.first.timeout(new Duration(seconds: 1)).then((String
-        notification) {
-      var jsonNotification = new JsonCodec().decode(notification);
-      expect(jsonNotification, isMap);
-      expect(jsonNotification, contains('event'));
-      expect(jsonNotification['event'], equals('foo'));
-    });
-  }
-
-  static Future sendResponse() {
-    channel.sendResponse(new Response('foo'));
-    return outputLineStream.first.timeout(new Duration(seconds: 1)).then((String
-        response) {
-      var jsonResponse = new JsonCodec().decode(response);
-      expect(jsonResponse, isMap);
-      expect(jsonResponse, contains('id'));
-      expect(jsonResponse['id'], equals('foo'));
-    });
-  }
-}
diff --git a/pkg/analysis_server/test/computer/element_test.dart b/pkg/analysis_server/test/computer/element_test.dart
index 686c80d..2b26ffd 100644
--- a/pkg/analysis_server/test/computer/element_test.dart
+++ b/pkg/analysis_server/test/computer/element_test.dart
@@ -5,8 +5,8 @@
 library test.computer.element;
 
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/abstract_context.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../abstract_context.dart';
+import '../reflective_tests.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart' as engine;
 import 'package:analyzer/src/generated/source.dart';
@@ -23,10 +23,52 @@
 
 
 class ElementKindTest {
-  void test_toString() {
-    expect(ElementKind.CLASS.toString(), 'ElementKind.CLASS');
-    expect(ElementKind.COMPILATION_UNIT.toString(),
-        'ElementKind.COMPILATION_UNIT');
+  void test_fromEngine() {
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.CLASS),
+        ElementKind.CLASS);
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.COMPILATION_UNIT),
+        ElementKind.COMPILATION_UNIT);
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.CONSTRUCTOR),
+        ElementKind.CONSTRUCTOR);
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.FIELD),
+        ElementKind.FIELD);
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.FUNCTION),
+        ElementKind.FUNCTION);
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.FUNCTION_TYPE_ALIAS),
+        ElementKind.FUNCTION_TYPE_ALIAS);
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.GETTER),
+        ElementKind.GETTER);
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.LIBRARY),
+        ElementKind.LIBRARY);
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.LOCAL_VARIABLE),
+        ElementKind.LOCAL_VARIABLE);
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.METHOD),
+        ElementKind.METHOD);
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.PARAMETER),
+        ElementKind.PARAMETER);
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.SETTER),
+        ElementKind.SETTER);
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.TOP_LEVEL_VARIABLE),
+        ElementKind.TOP_LEVEL_VARIABLE);
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.TYPE_PARAMETER),
+        ElementKind.TYPE_PARAMETER);
+    expect(
+        new ElementKind.fromEngine(engine.ElementKind.ANGULAR_COMPONENT),
+        ElementKind.UNKNOWN);
   }
 
   void test_string_constructor() {
@@ -75,52 +117,10 @@
     }, throws);
   }
 
-  void test_fromEngine() {
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.CLASS),
-        ElementKind.CLASS);
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.COMPILATION_UNIT),
-        ElementKind.COMPILATION_UNIT);
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.CONSTRUCTOR),
-        ElementKind.CONSTRUCTOR);
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.FIELD),
-        ElementKind.FIELD);
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.FUNCTION),
-        ElementKind.FUNCTION);
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.FUNCTION_TYPE_ALIAS),
-        ElementKind.FUNCTION_TYPE_ALIAS);
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.GETTER),
-        ElementKind.GETTER);
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.LIBRARY),
-        ElementKind.LIBRARY);
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.LOCAL_VARIABLE),
-        ElementKind.LOCAL_VARIABLE);
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.METHOD),
-        ElementKind.METHOD);
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.PARAMETER),
-        ElementKind.PARAMETER);
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.SETTER),
-        ElementKind.SETTER);
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.TOP_LEVEL_VARIABLE),
-        ElementKind.TOP_LEVEL_VARIABLE);
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.TYPE_PARAMETER),
-        ElementKind.TYPE_PARAMETER);
-    expect(
-        new ElementKind.fromEngine(engine.ElementKind.ANGULAR_COMPONENT),
-        ElementKind.UNKNOWN);
+  void test_toString() {
+    expect(ElementKind.CLASS.toString(), 'ElementKind.CLASS');
+    expect(ElementKind.COMPILATION_UNIT.toString(),
+        'ElementKind.COMPILATION_UNIT');
   }
 }
 
@@ -254,4 +254,16 @@
     expect(element.returnType, 'List<String>');
     expect(element.flags, Element.FLAG_STATIC);
   }
+
+  void test_fromElement_dynamic() {
+    var engineElement = engine.DynamicElementImpl.instance;
+    // create notification Element
+    Element element = new Element.fromEngine(engineElement);
+    expect(element.kind, ElementKind.UNKNOWN);
+    expect(element.name, 'dynamic');
+    expect(element.location, isNull);
+    expect(element.parameters, isNull);
+    expect(element.returnType, isNull);
+    expect(element.flags, 0);
+  }
 }
diff --git a/pkg/analysis_server/test/computer/error_test.dart b/pkg/analysis_server/test/computer/error_test.dart
index 61bc96a..8bdc6b6 100644
--- a/pkg/analysis_server/test/computer/error_test.dart
+++ b/pkg/analysis_server/test/computer/error_test.dart
@@ -7,8 +7,8 @@
 import 'package:analysis_server/src/computer/error.dart';
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/constants.dart';
-import 'package:analysis_testing/mocks.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../mocks.dart';
+import '../reflective_tests.dart';
 import 'package:analyzer/src/generated/error.dart' as engine;
 import 'package:analyzer/src/generated/source.dart';
 import 'package:typed_mock/typed_mock.dart';
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart
index 2a77f2f..a60bb60 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -5,10 +5,10 @@
 library test.context.directory.manager;
 
 import 'package:analysis_server/src/context_manager.dart';
-import 'package:analysis_server/src/package_map_provider.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import 'reflective_tests.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/source/package_map_provider.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:path/path.dart';
diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart
index 7c3fbf5..a2d0e81 100644
--- a/pkg/analysis_server/test/domain_analysis_test.dart
+++ b/pkg/analysis_server/test/domain_analysis_test.dart
@@ -10,8 +10,8 @@
 import 'package:analysis_server/src/constants.dart';
 import 'package:analysis_server/src/domain_analysis.dart';
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/mock_sdk.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import 'mock_sdk.dart';
+import 'reflective_tests.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:path/path.dart';
 import 'package:unittest/unittest.dart';
@@ -262,6 +262,36 @@
       });
     });
   });
+
+  group('out of range', () {
+    Future outOfRangeTest(SourceEdit edit) {
+      AnalysisTestHelper helper = new AnalysisTestHelper();
+      helper.createSingleFileProject('library A;');
+      return helper.waitForOperationsFinished().then((_) {
+        helper.sendContentChange(new AddContentOverlay('library B;'));
+        return helper.waitForOperationsFinished().then((_) {
+          ChangeContentOverlay contentChange = new ChangeContentOverlay([edit]);
+          Request request = new AnalysisUpdateContentParams({
+            helper.testFile: contentChange}).toRequest('0');
+          Response response = helper.handler.handleRequest(request);
+          expect(response, isResponseFailure('0',
+              RequestErrorCode.INVALID_OVERLAY_CHANGE));
+        });
+      });
+    }
+
+    test('negative length', () {
+      return outOfRangeTest(new SourceEdit(3, -1, 'foo'));
+    });
+
+    test('negative offset', () {
+      return outOfRangeTest(new SourceEdit(-1, 3, 'foo'));
+    });
+
+    test('beyond end', () {
+      return outOfRangeTest(new SourceEdit(6, 6, 'foo'));
+    });
+  });
 }
 
 
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index 7abd76a..f481215 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -11,7 +11,7 @@
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/services/index/index.dart' show Index;
 import 'package:analysis_server/src/services/index/local_memory_index.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import 'reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'analysis_abstract.dart';
diff --git a/pkg/analysis_server/test/domain_execution_test.dart b/pkg/analysis_server/test/domain_execution_test.dart
new file mode 100644
index 0000000..9fee3fc
--- /dev/null
+++ b/pkg/analysis_server/test/domain_execution_test.dart
@@ -0,0 +1,274 @@
+// Copyright (c) 2014, 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 test.domain.execution;
+
+import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/constants.dart';
+import 'package:analysis_server/src/domain_execution.dart';
+import 'package:analysis_server/src/protocol.dart';
+import 'mock_sdk.dart';
+import 'package:unittest/unittest.dart';
+
+import 'mocks.dart';
+import 'operation/operation_queue_test.dart';
+import 'package:typed_mock/typed_mock.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/source.dart';
+
+main() {
+  group('ExecutionDomainHandler', () {
+    AnalysisServer server;
+    ExecutionDomainHandler handler;
+
+    setUp(() {
+      server = new AnalysisServer(
+          new MockServerChannel(),
+          PhysicalResourceProvider.INSTANCE,
+          new MockPackageMapProvider(),
+          null,
+          new MockSdk());
+      handler = new ExecutionDomainHandler(server);
+    });
+
+    group('createContext/deleteContext', () {
+      test('create/delete multiple contexts', () {
+        Request request =
+            new ExecutionCreateContextParams('/a/b.dart').toRequest('0');
+        Response response = handler.handleRequest(request);
+        expect(response, isResponseSuccess('0'));
+        ExecutionCreateContextResult result =
+            new ExecutionCreateContextResult.fromResponse(response);
+        String id0 = result.id;
+
+        request = new ExecutionCreateContextParams('/c/d.dart').toRequest('1');
+        response = handler.handleRequest(request);
+        expect(response, isResponseSuccess('1'));
+        result = new ExecutionCreateContextResult.fromResponse(response);
+        String id1 = result.id;
+
+        expect(id0 == id1, isFalse);
+
+        request = new ExecutionDeleteContextParams(id0).toRequest('2');
+        response = handler.handleRequest(request);
+        expect(response, isResponseSuccess('2'));
+
+        request = new ExecutionDeleteContextParams(id1).toRequest('3');
+        response = handler.handleRequest(request);
+        expect(response, isResponseSuccess('3'));
+      });
+
+      test('delete non-existent context', () {
+        Request request = new ExecutionDeleteContextParams('13').toRequest('0');
+        Response response = handler.handleRequest(request);
+        // TODO(brianwilkerson) It isn't currently specified to be an error if a
+        // client attempts to delete a context that doesn't exist. Should it be?
+//        expect(response, isResponseFailure('0'));
+        expect(response, isResponseSuccess('0'));
+      });
+    });
+
+    group('mapUri', () {
+      String contextId;
+
+      setUp(() {
+        Request request =
+            new ExecutionCreateContextParams('/a/b.dart').toRequest('0');
+        Response response = handler.handleRequest(request);
+        expect(response, isResponseSuccess('0'));
+        ExecutionCreateContextResult result =
+            new ExecutionCreateContextResult.fromResponse(response);
+        contextId = result.id;
+      });
+
+      tearDown(() {
+        Request request =
+            new ExecutionDeleteContextParams(contextId).toRequest('1');
+        Response response = handler.handleRequest(request);
+        expect(response, isResponseSuccess('1'));
+      });
+
+      test('file to URI', () {
+        Request request =
+            new ExecutionMapUriParams(contextId, file: '/a/b.dart').toRequest('2');
+        Response response = handler.handleRequest(request);
+        expect(response, isResponseSuccess('2'));
+        ExecutionMapUriResult result =
+            new ExecutionMapUriResult.fromResponse(response);
+        expect(result.file, isNull);
+        expect(result.uri, isNotNull);
+        // TODO(brianwilkerson) Test for the correct result.
+      });
+
+      test('URI to file', () {
+        Request request =
+            new ExecutionMapUriParams(contextId, uri: '/a/b.dart').toRequest('3');
+        Response response = handler.handleRequest(request);
+        expect(response, isResponseSuccess('3'));
+        ExecutionMapUriResult result =
+            new ExecutionMapUriResult.fromResponse(response);
+        expect(result.file, isNotNull);
+        expect(result.uri, isNull);
+        // TODO(brianwilkerson) Test for the correct result.
+      });
+
+      test('invalid context id', () {
+        Request request =
+            new ExecutionMapUriParams('xxx', uri: '').toRequest('4');
+        Response response = handler.handleRequest(request);
+        expect(response, isResponseFailure('4'));
+      });
+
+      test('both file and uri', () {
+        Request request =
+            new ExecutionMapUriParams('xxx', file: '', uri: '').toRequest('5');
+        Response response = handler.handleRequest(request);
+        expect(response, isResponseFailure('5'));
+      });
+    });
+
+    group('setSubscriptions', () {
+      test('failure - invalid service name', () {
+        expect(handler.launchDataListener, isNull);
+
+        Request request = new Request('0', EXECUTION_SET_SUBSCRIPTIONS, {
+          SUBSCRIPTIONS: ['noSuchService']
+        });
+        Response response = handler.handleRequest(request);
+        expect(response, isResponseFailure('0'));
+        expect(handler.launchDataListener, isNull);
+      });
+
+      test('success - setting and clearing', () {
+        expect(handler.launchDataListener, isNull);
+
+        Request request = new ExecutionSetSubscriptionsParams(
+            [ExecutionService.LAUNCH_DATA]).toRequest('0');
+        Response response = handler.handleRequest(request);
+        expect(response, isResponseSuccess('0'));
+        expect(handler.launchDataListener, isNotNull);
+
+        request = new ExecutionSetSubscriptionsParams([]).toRequest('0');
+        response = handler.handleRequest(request);
+        expect(response, isResponseSuccess('0'));
+        expect(handler.launchDataListener, isNull);
+      });
+    });
+  });
+
+  group('LaunchDataNotificationListener', () {
+    test('success - setting and clearing', () {
+      Source source1 = new TestSource('/a.dart');
+      Source source2 = new TestSource('/b.dart');
+      Source source3 = new TestSource('/c.dart');
+      Source source4 = new TestSource('/d.dart');
+      Source source5 = new TestSource('/e.html');
+      Source source6 = new TestSource('/f.html');
+      Source source7 = new TestSource('/g.html');
+      Source source8 = new TestSource('/h.dart');
+      Source source9 = new TestSource('/i.dart');
+
+      AnalysisContext context = new AnalysisContextMock();
+      when(context.launchableClientLibrarySources)
+          .thenReturn([source1, source2]);
+      when(context.launchableServerLibrarySources)
+          .thenReturn([source2, source3]);
+      when(context.librarySources).thenReturn([source4]);
+      when(context.getHtmlFilesReferencing(anyObject))
+          .thenReturn([source5, source6]);
+      when(context.htmlSources).thenReturn([source7]);
+      when(context.getLibrariesReferencedFromHtml(anyObject))
+          .thenReturn([source8, source9]);
+
+      AnalysisServer server = new AnalysisServerMock();
+      when(server.getAnalysisContexts()).thenReturn([context]);
+      bool notificationSent = false;
+      when(server.sendNotification(anyObject))
+          .thenInvoke((Notification notification) {
+        ExecutionLaunchDataParams params =
+            new ExecutionLaunchDataParams.fromNotification(notification);
+
+        List<ExecutableFile> executables = params.executables;
+        expect(executables.length, equals(3));
+        expect(
+            executables[0],
+            isExecutableFile(source1, ExecutableKind.CLIENT));
+        expect(
+            executables[1],
+            isExecutableFile(source2, ExecutableKind.EITHER));
+        expect(
+            executables[2],
+            isExecutableFile(source3, ExecutableKind.SERVER));
+
+        Map<String, List<String>> dartToHtml = params.dartToHtml;
+        expect(dartToHtml.length, equals(1));
+        List<String> htmlFiles = dartToHtml[source4.fullName];
+        expect(htmlFiles, isNotNull);
+        expect(htmlFiles.length, equals(2));
+        expect(htmlFiles[0], equals(source5.fullName));
+        expect(htmlFiles[1], equals(source6.fullName));
+
+        Map<String, List<String>> htmlToDart = params.htmlToDart;
+        expect(htmlToDart.length, equals(1));
+        List<String> dartFiles = htmlToDart[source7.fullName];
+        expect(dartFiles, isNotNull);
+        expect(dartFiles.length, equals(2));
+        expect(dartFiles[0], equals(source8.fullName));
+        expect(dartFiles[1], equals(source9.fullName));
+
+        notificationSent = true;
+      });
+      LaunchDataNotificationListener listener =
+          new LaunchDataNotificationListener(server);
+      listener.analysisComplete();
+      expect(notificationSent, isTrue);
+    });
+  });
+}
+
+/**
+ * A [Source] that knows it's [fullName].
+ */
+class TestSource implements Source {
+  String fullName;
+
+  TestSource(this.fullName);
+
+  @override
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+/**
+ * Return a matcher that will match an [ExecutableFile] if it has the given
+ * [source] and [kind].
+ */
+Matcher isExecutableFile(Source source, ExecutableKind kind) {
+  return new IsExecutableFile(source.fullName, kind);
+}
+
+/**
+ * A matcher that will match an [ExecutableFile] if it has a specified [source]
+ * and [kind].
+ */
+class IsExecutableFile extends Matcher {
+  String expectedFile;
+  ExecutableKind expectedKind;
+
+  IsExecutableFile(this.expectedFile, this.expectedKind);
+
+  @override
+  Description describe(Description description) {
+    return description.add('ExecutableFile($expectedFile, $expectedKind)');
+  }
+
+  @override
+  bool matches(item, Map matchState) {
+    if (item is! ExecutableFile) {
+      return false;
+    }
+    ExecutableFile file = item;
+    return item.file == expectedFile && item.kind == expectedKind;
+  }
+}
diff --git a/pkg/analysis_server/test/domain_server_test.dart b/pkg/analysis_server/test/domain_server_test.dart
index 32ee9d7..bed6f4b 100644
--- a/pkg/analysis_server/test/domain_server_test.dart
+++ b/pkg/analysis_server/test/domain_server_test.dart
@@ -9,7 +9,7 @@
 import 'package:analysis_server/src/constants.dart';
 import 'package:analysis_server/src/domain_server.dart';
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/mock_sdk.dart';
+import 'mock_sdk.dart';
 import 'package:unittest/unittest.dart';
 
 import 'mocks.dart';
diff --git a/pkg/analysis_server/test/edit/assists_test.dart b/pkg/analysis_server/test/edit/assists_test.dart
index f773808..54f3acd 100644
--- a/pkg/analysis_server/test/edit/assists_test.dart
+++ b/pkg/analysis_server/test/edit/assists_test.dart
@@ -8,7 +8,7 @@
 
 import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../reflective_tests.dart';
 import 'package:unittest/unittest.dart' hide ERROR;
 
 import '../analysis_abstract.dart';
diff --git a/pkg/analysis_server/test/edit/fixes_test.dart b/pkg/analysis_server/test/edit/fixes_test.dart
index 271f8e9..2d2f1c0 100644
--- a/pkg/analysis_server/test/edit/fixes_test.dart
+++ b/pkg/analysis_server/test/edit/fixes_test.dart
@@ -8,7 +8,7 @@
 
 import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../reflective_tests.dart';
 import 'package:unittest/unittest.dart' hide ERROR;
 
 import '../analysis_abstract.dart';
@@ -29,6 +29,25 @@
     handler = new EditDomainHandler(server);
   }
 
+  Future test_fixUndefinedClass() {
+    addTestFile('''
+main() {
+  Future<String> x = null;
+}
+''');
+    return waitForTasksFinished().then((_) {
+      List<AnalysisErrorFixes> errorFixes = _getFixesAt('Future<String>');
+      expect(errorFixes, hasLength(1));
+      AnalysisError error = errorFixes[0].error;
+      expect(error.severity, AnalysisErrorSeverity.WARNING);
+      expect(error.type, AnalysisErrorType.STATIC_WARNING);
+      List<SourceChange> fixes = errorFixes[0].fixes;
+      expect(fixes, hasLength(2));
+      expect(fixes[0].message, matches('Import library'));
+      expect(fixes[1].message, matches('Create class'));
+    });
+  }
+
   Future test_hasFixes() {
     addTestFile('''
 foo() {
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index 273d501..ea4f3bd 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -10,15 +10,18 @@
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/local_memory_index.dart';
-import 'package:analysis_testing/reflective_tests.dart';
 import 'package:unittest/unittest.dart' hide ERROR;
 
 import '../analysis_abstract.dart';
+import '../reflective_tests.dart';
 
 
 main() {
   groupSep = ' | ';
   runReflectiveTests(ExtractLocalVariableTest);
+  runReflectiveTests(ExtractMethodTest);
+  runReflectiveTests(InlineLocalTest);
+  runReflectiveTests(InlineMethodTest);
   runReflectiveTests(GetAvailableRefactoringsTest);
   runReflectiveTests(RenameTest);
 }
@@ -29,8 +32,8 @@
   Future<Response> sendExtractRequest(int offset, int length, String name,
       bool extractAll) {
     RefactoringKind kind = RefactoringKind.EXTRACT_LOCAL_VARIABLE;
-    Map options = name != null ? new ExtractLocalVariableOptions(name,
-        extractAll).toJson() : null;
+    ExtractLocalVariableOptions options =
+        name != null ? new ExtractLocalVariableOptions(name, extractAll) : null;
     return sendRequest(kind, offset, length, options, false);
   }
 
@@ -117,8 +120,7 @@
     return getRefactoringResult(() {
       return sendStringSuffixRequest('getSelectedItem()', ';', null, true);
     }).then((result) {
-      ExtractLocalVariableFeedback feedback =
-          new ExtractLocalVariableFeedback.fromRefactoringResult(result);
+      ExtractLocalVariableFeedback feedback = result.feedback;
       expect(
           feedback.names,
           unorderedEquals(['treeItem', 'item', 'selectedItem']));
@@ -136,8 +138,7 @@
     return getRefactoringResult(() {
       return sendStringRequest('1 + 2', 'res', true);
     }).then((result) {
-      ExtractLocalVariableFeedback feedback =
-          new ExtractLocalVariableFeedback.fromRefactoringResult(result);
+      ExtractLocalVariableFeedback feedback = result.feedback;
       expect(feedback.offsets, [findOffset('1 + 2'), findOffset('1 +  2')]);
       expect(feedback.lengths, [5, 6]);
     });
@@ -146,6 +147,197 @@
 
 
 @ReflectiveTestCase()
+class ExtractMethodTest extends _AbstractGetRefactoring_Test {
+  int offset;
+  int length;
+  String name = 'res';
+  ExtractMethodOptions options;
+
+  test_expression() {
+    addTestFile('''
+main() {
+  print(1 + 2);
+  print(1 + 2);
+}
+''');
+    _setOffsetLengthForString('1 + 2');
+    return assertSuccessfulRefactoring(_computeChange, '''
+main() {
+  print(res());
+  print(res());
+}
+
+int res() => 1 + 2;
+''');
+  }
+
+  test_expression_hasParameters() {
+    addTestFile('''
+main() {
+  int a = 1;
+  int b = 2;
+  print(a + b);
+  print(a +  b);
+}
+''');
+    _setOffsetLengthForString('a + b');
+    return assertSuccessfulRefactoring(_computeChange, '''
+main() {
+  int a = 1;
+  int b = 2;
+  print(res(a, b));
+  print(res(a, b));
+}
+
+int res(int a, int b) => a + b;
+''');
+  }
+
+  test_expression_updateParameters() {
+    addTestFile('''
+main() {
+  int a = 1;
+  int b = 2;
+  print(a + b);
+  print(a + b);
+}
+''');
+    _setOffsetLengthForString('a + b');
+    return getRefactoringResult(_computeChange).then((result) {
+      ExtractMethodFeedback feedback = result.feedback;
+      List<RefactoringMethodParameter> parameters = feedback.parameters;
+      parameters[0].name = 'aaa';
+      parameters[1].name = 'bbb';
+      parameters[1].type = 'num';
+      parameters.insert(0, parameters.removeLast());
+      options.parameters = parameters;
+      return assertSuccessfulRefactoring(_sendExtractRequest, '''
+main() {
+  int a = 1;
+  int b = 2;
+  print(res(b, a));
+  print(res(b, a));
+}
+
+int res(num bbb, int aaa) => aaa + bbb;
+''');
+    });
+  }
+
+  test_names() {
+    addTestFile('''
+class TreeItem {}
+TreeItem getSelectedItem() => null;
+main() {
+  var a = getSelectedItem( );
+}
+''');
+    _setOffsetLengthForString('getSelectedItem( )');
+    return _computeInitialFeedback().then((feedback) {
+      expect(
+          feedback.names,
+          unorderedEquals(['treeItem', 'item', 'selectedItem']));
+      expect(feedback.returnType, 'TreeItem');
+    });
+  }
+
+  test_offsetsLengths() {
+    addTestFile('''
+class TreeItem {}
+TreeItem getSelectedItem() => null;
+main() {
+  var a = 1 + 2;
+  var b = 1 +  2;
+}
+''');
+    _setOffsetLengthForString('1 + 2');
+    return _computeInitialFeedback().then((feedback) {
+      expect(feedback.offsets, [findOffset('1 + 2'), findOffset('1 +  2')]);
+      expect(feedback.lengths, [5, 6]);
+    });
+  }
+
+  test_statements() {
+    addTestFile('''
+main() {
+  int a = 1;
+  int b = 2;
+// start
+  print(a + b);
+// end
+  print(a + b);
+}
+''');
+    _setOffsetLengthForStartEnd();
+    return assertSuccessfulRefactoring(_computeChange, '''
+main() {
+  int a = 1;
+  int b = 2;
+// start
+  res(a, b);
+// end
+  res(a, b);
+}
+
+void res(int a, int b) {
+  print(a + b);
+}
+''');
+  }
+
+  Future<Response> _computeChange() {
+    return _prepareOptions().then((_) {
+      // send request with the options
+      return _sendExtractRequest();
+    });
+  }
+
+  Future<ExtractMethodFeedback> _computeInitialFeedback() {
+    return waitForTasksFinished().then((_) {
+      return _sendExtractRequest();
+    }).then((Response response) {
+      var result = new EditGetRefactoringResult.fromResponse(response);
+      return result.feedback;
+    });
+  }
+
+  Future _prepareOptions() {
+    return getRefactoringResult(() {
+      // get initial feedback
+      return _sendExtractRequest();
+    }).then((result) {
+      assertResultProblemsOK(result);
+      // fill options from result
+      ExtractMethodFeedback feedback = result.feedback;
+      options = new ExtractMethodOptions(
+          feedback.returnType,
+          false,
+          name,
+          feedback.parameters,
+          true);
+      // done
+      return new Future.value();
+    });
+  }
+
+  Future<Response> _sendExtractRequest() {
+    RefactoringKind kind = RefactoringKind.EXTRACT_METHOD;
+    return sendRequest(kind, offset, length, options, false);
+  }
+
+  void _setOffsetLengthForStartEnd() {
+    offset = findOffset('// start') + '// start\n'.length;
+    length = findOffset('// end') - offset;
+  }
+
+  void _setOffsetLengthForString(String search) {
+    offset = findOffset(search);
+    length = search.length;
+  }
+}
+
+
+@ReflectiveTestCase()
 class GetAvailableRefactoringsTest extends AbstractAnalysisTest {
   /**
    * Tests that there is a RENAME refactoring available at the [search] offset.
@@ -327,16 +519,206 @@
 
 
 @ReflectiveTestCase()
+class InlineLocalTest extends _AbstractGetRefactoring_Test {
+  test_OK() {
+    addTestFile('''
+main() {
+  int test = 42;
+  int a = test + 2;
+  print(test);
+}
+''');
+    return assertSuccessfulRefactoring(() {
+      return _sendInlineRequest('test + 2');
+    }, '''
+main() {
+  int a = 42 + 2;
+  print(42);
+}
+''');
+  }
+
+  test_feedback() {
+    addTestFile('''
+main() {
+  int test = 42;
+  print(test);
+  print(test);
+}
+''');
+    return getRefactoringResult(() {
+      return _sendInlineRequest('test =');
+    }).then((result) {
+      InlineLocalVariableFeedback feedback = result.feedback;
+      expect(feedback.name, 'test');
+      expect(feedback.occurrences, 2);
+    });
+  }
+
+  test_init_fatalError_notVariable() {
+    addTestFile('main() {}');
+    return getRefactoringResult(() {
+      return _sendInlineRequest('main() {}');
+    }).then((result) {
+      assertResultProblemsFatal(
+          result,
+          'Local variable declaration or reference must be selected to activate this refactoring.');
+      // ...there is no any change
+      expect(result.change, isNull);
+    });
+  }
+
+  Future<Response> _sendInlineRequest(String search) {
+    Request request = new EditGetRefactoringParams(
+        RefactoringKind.INLINE_LOCAL_VARIABLE,
+        testFile,
+        findOffset(search),
+        0,
+        false).toRequest('0');
+    return serverChannel.sendRequest(request);
+  }
+}
+
+
+@ReflectiveTestCase()
+class InlineMethodTest extends _AbstractGetRefactoring_Test {
+  InlineMethodOptions options = new InlineMethodOptions(true, true);
+
+  test_feedback() {
+    addTestFile('''
+class A {
+  int f;
+  test(int p) {
+    print(f + p);
+  }
+  main() {
+    test(1);
+  }
+}
+''');
+    return getRefactoringResult(() {
+      return _sendInlineRequest('test(int p)');
+    }).then((result) {
+      InlineMethodFeedback feedback = result.feedback;
+      expect(feedback.className, 'A');
+      expect(feedback.methodName, 'test');
+      expect(feedback.isDeclaration, isTrue);
+    });
+  }
+
+  test_init_fatalError_noMethod() {
+    addTestFile('// nothing to inline');
+    return getRefactoringResult(() {
+      return _sendInlineRequest('// nothing');
+    }).then((result) {
+      assertResultProblemsFatal(
+          result,
+          'Method declaration or reference must be selected to activate this refactoring.');
+      // ...there is no any change
+      expect(result.change, isNull);
+    });
+  }
+
+  test_method() {
+    addTestFile('''
+class A {
+  int f;
+  test(int p) {
+    print(f + p);
+  }
+  main() {
+    test(1);
+  }
+}
+main(A a) {
+  a.test(2);
+}
+''');
+    return assertSuccessfulRefactoring(() {
+      return _sendInlineRequest('test(int p)');
+    }, '''
+class A {
+  int f;
+  main() {
+    print(f + 1);
+  }
+}
+main(A a) {
+  print(a.f + 2);
+}
+''');
+  }
+
+  test_topLevelFunction() {
+    addTestFile('''
+test(a, b) {
+  print(a + b);
+}
+main() {
+  test(1, 2);
+  test(10, 20);
+}
+''');
+    return assertSuccessfulRefactoring(() {
+      return _sendInlineRequest('test(a');
+    }, '''
+main() {
+  print(1 + 2);
+  print(10 + 20);
+}
+''');
+  }
+
+  test_topLevelFunction_oneInvocation() {
+    addTestFile('''
+test(a, b) {
+  print(a + b);
+}
+main() {
+  test(1, 2);
+  test(10, 20);
+}
+''');
+    options.deleteSource = false;
+    options.inlineAll = false;
+    return assertSuccessfulRefactoring(() {
+      return _sendInlineRequest('test(10,');
+    }, '''
+test(a, b) {
+  print(a + b);
+}
+main() {
+  test(1, 2);
+  print(10 + 20);
+}
+''');
+  }
+
+  Future<Response> _sendInlineRequest(String search) {
+    Request request = new EditGetRefactoringParams(
+        RefactoringKind.INLINE_METHOD,
+        testFile,
+        findOffset(search),
+        0,
+        false,
+        options: options).toRequest('0');
+    return serverChannel.sendRequest(request);
+  }
+}
+
+
+@ReflectiveTestCase()
 class RenameTest extends _AbstractGetRefactoring_Test {
   Future<Response> sendRenameRequest(String search, String newName,
       [bool validateOnly = false]) {
+    RenameOptions options = newName != null ? new RenameOptions(newName) : null;
     Request request = new EditGetRefactoringParams(
         RefactoringKind.RENAME,
         testFile,
         findOffset(search),
         0,
         validateOnly,
-        options: new RenameOptions(newName).toJson()).toRequest('0');
+        options: options).toRequest('0');
     return serverChannel.sendRequest(request);
   }
 
@@ -446,7 +828,10 @@
     return getRefactoringResult(() {
       return sendRenameRequest('Test {}', 'NewName', true);
     }).then((result) {
+      RenameFeedback feedback = result.feedback;
       assertResultProblemsOK(result);
+      expect(feedback.elementKindName, 'class');
+      expect(feedback.oldName, 'Test');
       expect(result.change, isNull);
     });
   }
@@ -521,8 +906,7 @@
     return getRefactoringResult(() {
       return sendRenameRequest('st v;', 'NewName');
     }).then((result) {
-      RenameFeedback feedback =
-          new RenameFeedback.fromRefactoringResult(result);
+      RenameFeedback feedback = result.feedback;
       expect(feedback, isNotNull);
       expect(feedback.offset, findOffset('Test v;'));
       expect(feedback.length, 'Test'.length);
@@ -698,7 +1082,7 @@
   }
 
   Future<Response> sendRequest(RefactoringKind kind, int offset, int length,
-      Map options, [bool validateOnly = false]) {
+      RefactoringOptions options, [bool validateOnly = false]) {
     Request request = new EditGetRefactoringParams(
         kind,
         testFile,
diff --git a/pkg/analysis_server/test/integration/analysis/error_test.dart b/pkg/analysis_server/test/integration/analysis/error_test.dart
index 628ce8d..d391781 100644
--- a/pkg/analysis_server/test/integration/analysis/error_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/error_test.dart
@@ -4,7 +4,7 @@
 
 library test.integration.analysis.error;
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../integration_tests.dart';
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_after_analysis_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_after_analysis_test.dart
index 082a1a0..013ca3c 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_after_analysis_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_after_analysis_test.dart
@@ -4,7 +4,7 @@
 
 library test.integration.analysis.get.errors.after.analysis;
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 
 import 'get_errors.dart';
 
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_before_analysis_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_before_analysis_test.dart
index b5b55b3..a633e00 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_before_analysis_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_before_analysis_test.dart
@@ -4,7 +4,7 @@
 
 library test.integration.analysis.get.errors.before.analysis;
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 
 import 'get_errors.dart';
 
diff --git a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
index 4484af4..b8fca75 100644
--- a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:path/path.dart';
 import 'package:unittest/unittest.dart';
 
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test.dart b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
index cbefc25..139a8b7 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
@@ -4,7 +4,7 @@
 
 library test.integration.analysis.highlights;
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../integration_tests.dart';
diff --git a/pkg/analysis_server/test/integration/analysis/navigation_test.dart b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
index 245f2b9..827f423 100644
--- a/pkg/analysis_server/test/integration/analysis/navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
@@ -4,7 +4,7 @@
 
 library test.integration.analysis.navigation;
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../integration_tests.dart';
diff --git a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
index 87d8a9f..e8ef6f1 100644
--- a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
@@ -4,7 +4,7 @@
 
 library test.integration.analysis.occurrences;
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../integration_tests.dart';
diff --git a/pkg/analysis_server/test/integration/analysis/outline_test.dart b/pkg/analysis_server/test/integration/analysis/outline_test.dart
index 6194a13..7789f17 100644
--- a/pkg/analysis_server/test/integration/analysis/outline_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/outline_test.dart
@@ -4,7 +4,7 @@
 
 library test.integration.analysis.outline;
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../integration_tests.dart';
diff --git a/pkg/analysis_server/test/integration/analysis/overrides_test.dart b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
index a5be8a2..79edb37 100644
--- a/pkg/analysis_server/test/integration/analysis/overrides_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
@@ -4,7 +4,7 @@
 
 library test.integration.analysis.overrides;
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../integration_tests.dart';
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
index 1acc512..792fa13 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
@@ -4,7 +4,7 @@
 
 library test.integration.analysis.update.content.list;
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../integration_tests.dart';
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
index b4d1e3d..a4b99ef 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
@@ -4,7 +4,7 @@
 
 library test.integration.analysis.update.content;
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../integration_tests.dart';
diff --git a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
index 1491b86..c331079 100644
--- a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
+++ b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../integration_tests.dart';
diff --git a/pkg/analysis_server/test/integration/integration_test_methods.dart b/pkg/analysis_server/test/integration/integration_test_methods.dart
index cf522fb..905bc63 100644
--- a/pkg/analysis_server/test/integration/integration_test_methods.dart
+++ b/pkg/analysis_server/test/integration/integration_test_methods.dart
@@ -172,6 +172,11 @@
    * as it becomes available should use the information provided by the
    * 'analysis.errors' notification.
    *
+   * If a request is made for a file which does not exist, or which is not
+   * currently subject to analysis (e.g. because it is not associated with any
+   * analysis root specified to analysis.setAnalysisRoots), an error of type
+   * GET_ERRORS_INVALID_FILE will be generated.
+   *
    * Parameters
    *
    * file ( FilePath )
@@ -1078,12 +1083,7 @@
    *
    * fixes ( List<AnalysisErrorFixes> )
    *
-   *   The fixes that are available for each of the analysis errors. There is a
-   *   one-to-one correspondence between the analysis errors in the request and
-   *   the lists of changes in the response. In particular, it is always the
-   *   case that errors.length == fixes.length and that fixes[i] is the list of
-   *   fixes for the error in errors[i]. The list of changes corresponding to
-   *   an error can be empty if there are no fixes available for that error.
+   *   The fixes that are available for the errors at the given offset.
    */
   Future sendEditGetFixes(String file, int offset, {bool checkTypes: true}) {
     Map<String, dynamic> params = {};
@@ -1127,7 +1127,7 @@
    *   True if the client is only requesting that the values of the options be
    *   validated and no change be generated.
    *
-   * options ( optional object )
+   * options ( optional RefactoringOptions )
    *
    *   Data used to provide values provided by the user. The structure of the
    *   data is dependent on the kind of refactoring being performed. The data
@@ -1142,7 +1142,7 @@
    *   The status of the refactoring. The array will be empty if there are no
    *   known problems.
    *
-   * feedback ( optional object )
+   * feedback ( optional RefactoringFeedback )
    *
    *   Data used to provide feedback to the user. The structure of the data is
    *   dependent on the kind of refactoring being created. The data that is
@@ -1189,10 +1189,10 @@
   }
 
   /**
-   * Create a debugging context for the executable file with the given path.
-   * The context that is created will persist until debug.deleteContext is used
-   * to delete it. Clients, therefore, are responsible for managing the
-   * lifetime of debugging contexts.
+   * Create an execution context for the executable file with the given path.
+   * The context that is created will persist until execution.deleteContext is
+   * used to delete it. Clients, therefore, are responsible for managing the
+   * lifetime of execution contexts.
    *
    * Parameters
    *
@@ -1202,62 +1202,62 @@
    *
    * Returns
    *
-   * id ( DebugContextId )
+   * id ( ExecutionContextId )
    *
-   *   The identifier used to refer to the debugging context that was created.
+   *   The identifier used to refer to the execution context that was created.
    */
-  Future sendDebugCreateContext(String contextRoot, {bool checkTypes: true}) {
+  Future sendExecutionCreateContext(String contextRoot, {bool checkTypes: true}) {
     Map<String, dynamic> params = {};
     params["contextRoot"] = contextRoot;
     if (checkTypes) {
-      expect(params, isDebugCreateContextParams);
+      expect(params, isExecutionCreateContextParams);
     }
-    return server.send("debug.createContext", params)
+    return server.send("execution.createContext", params)
         .then((result) {
       if (checkTypes) {
-        expect(result, isDebugCreateContextResult);
+        expect(result, isExecutionCreateContextResult);
       }
       return result;
     });
   }
 
   /**
-   * Delete the debugging context with the given identifier. The context id is
+   * Delete the execution context with the given identifier. The context id is
    * no longer valid after this command. The server is allowed to re-use ids
    * when they are no longer valid.
    *
    * Parameters
    *
-   * id ( DebugContextId )
+   * id ( ExecutionContextId )
    *
-   *   The identifier of the debugging context that is to be deleted.
+   *   The identifier of the execution context that is to be deleted.
    */
-  Future sendDebugDeleteContext(String id, {bool checkTypes: true}) {
+  Future sendExecutionDeleteContext(String id, {bool checkTypes: true}) {
     Map<String, dynamic> params = {};
     params["id"] = id;
     if (checkTypes) {
-      expect(params, isDebugDeleteContextParams);
+      expect(params, isExecutionDeleteContextParams);
     }
-    return server.send("debug.deleteContext", params)
+    return server.send("execution.deleteContext", params)
         .then((result) {
       if (checkTypes) {
-        expect(result, isDebugDeleteContextResult);
+        expect(result, isExecutionDeleteContextResult);
       }
       return result;
     });
   }
 
   /**
-   * Map a URI from the debugging context to the file that it corresponds to,
-   * or map a file to the URI that it corresponds to in the debugging context.
+   * Map a URI from the execution context to the file that it corresponds to,
+   * or map a file to the URI that it corresponds to in the execution context.
    *
    * Exactly one of the file and uri fields must be provided.
    *
    * Parameters
    *
-   * id ( DebugContextId )
+   * id ( ExecutionContextId )
    *
-   *   The identifier of the debugging context in which the URI is to be
+   *   The identifier of the execution context in which the URI is to be
    *   mapped.
    *
    * file ( optional FilePath )
@@ -1280,7 +1280,7 @@
    *   The URI to which the file path was mapped. This field is omitted if the
    *   file field was not given in the request.
    */
-  Future sendDebugMapUri(String id, {String file, String uri, bool checkTypes: true}) {
+  Future sendExecutionMapUri(String id, {String file, String uri, bool checkTypes: true}) {
     Map<String, dynamic> params = {};
     params["id"] = id;
     if (file != null) {
@@ -1290,12 +1290,12 @@
       params["uri"] = uri;
     }
     if (checkTypes) {
-      expect(params, isDebugMapUriParams);
+      expect(params, isExecutionMapUriParams);
     }
-    return server.send("debug.mapUri", params)
+    return server.send("execution.mapUri", params)
         .then((result) {
       if (checkTypes) {
-        expect(result, isDebugMapUriResult);
+        expect(result, isExecutionMapUriResult);
       }
       return result;
     });
@@ -1311,39 +1311,38 @@
    *
    * Parameters
    *
-   * subscriptions ( List<DebugService> )
+   * subscriptions ( List<ExecutionService> )
    *
    *   A list of the services being subscribed to.
    */
-  Future sendDebugSetSubscriptions(List<String> subscriptions, {bool checkTypes: true}) {
+  Future sendExecutionSetSubscriptions(List<String> subscriptions, {bool checkTypes: true}) {
     Map<String, dynamic> params = {};
     params["subscriptions"] = subscriptions;
     if (checkTypes) {
-      expect(params, isDebugSetSubscriptionsParams);
+      expect(params, isExecutionSetSubscriptionsParams);
     }
-    return server.send("debug.setSubscriptions", params)
+    return server.send("execution.setSubscriptions", params)
         .then((result) {
       if (checkTypes) {
-        expect(result, isDebugSetSubscriptionsResult);
+        expect(result, isExecutionSetSubscriptionsResult);
       }
       return result;
     });
   }
 
   /**
-   * Reports information needed to allow applications within the given context
-   * to be launched.
+   * Reports information needed to allow applications to be launched.
    *
    * This notification is not subscribed to by default. Clients can subscribe
-   * by including the value "LAUNCH_DATA" in the list of services passed in a
-   * debug.setSubscriptions request.
+   * by including the value "LAUNCH_DATA" in the list of services passed in an
+   * execution.setSubscriptions request.
    *
    * Parameters
    *
    * executables ( List<ExecutableFile> )
    *
-   *   A list of the files that are executable in the given context. This list
-   *   replaces any previous list provided for the given context.
+   *   A list of the files that are executable. This list replaces any previous
+   *   list provided.
    *
    * dartToHtml ( Map<FilePath, List<FilePath>> )
    *
@@ -1355,12 +1354,12 @@
    *   A mapping from the paths of HTML files that reference Dart files to a
    *   list of the Dart files they reference.
    */
-  Stream onDebugLaunchData;
+  Stream onExecutionLaunchData;
 
   /**
-   * Stream controller for [onDebugLaunchData].
+   * Stream controller for [onExecutionLaunchData].
    */
-  StreamController _onDebugLaunchData;
+  StreamController _onExecutionLaunchData;
 
   /**
    * Initialize the fields in InttestMixin, and ensure that notifications will
@@ -1393,8 +1392,8 @@
     onCompletionResults = _onCompletionResults.stream.asBroadcastStream();
     _onSearchResults = new StreamController(sync: true);
     onSearchResults = _onSearchResults.stream.asBroadcastStream();
-    _onDebugLaunchData = new StreamController(sync: true);
-    onDebugLaunchData = _onDebugLaunchData.stream.asBroadcastStream();
+    _onExecutionLaunchData = new StreamController(sync: true);
+    onExecutionLaunchData = _onExecutionLaunchData.stream.asBroadcastStream();
   }
 
   /**
@@ -1455,9 +1454,9 @@
         expect(params, isSearchResultsParams);
         _onSearchResults.add(params);
         break;
-      case "debug.launchData":
-        expect(params, isDebugLaunchDataParams);
-        _onDebugLaunchData.add(params);
+      case "execution.launchData":
+        expect(params, isExecutionLaunchDataParams);
+        _onExecutionLaunchData.add(params);
         break;
       default:
         fail('Unexpected notification: $event');
diff --git a/pkg/analysis_server/test/integration/protocol_matchers.dart b/pkg/analysis_server/test/integration/protocol_matchers.dart
index f27f548..c6fdc83 100644
--- a/pkg/analysis_server/test/integration/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/protocol_matchers.dart
@@ -631,7 +631,7 @@
  *   "offset": int
  *   "length": int
  *   "validateOnly": bool
- *   "options": optional object
+ *   "options": optional RefactoringOptions
  * }
  */
 final Matcher isEditGetRefactoringParams = new LazyMatcher(() => new MatchesJsonObject(
@@ -642,7 +642,7 @@
     "length": isInt,
     "validateOnly": isBool
   }, optionalFields: {
-    "options": isObject
+    "options": isRefactoringOptions
   }));
 
 /**
@@ -650,7 +650,7 @@
  *
  * {
  *   "problems": List<RefactoringProblem>
- *   "feedback": optional object
+ *   "feedback": optional RefactoringFeedback
  *   "change": optional SourceChange
  *   "potentialEdits": optional List<String>
  * }
@@ -659,102 +659,102 @@
   "edit.getRefactoring result", {
     "problems": isListOf(isRefactoringProblem)
   }, optionalFields: {
-    "feedback": isObject,
+    "feedback": isRefactoringFeedback,
     "change": isSourceChange,
     "potentialEdits": isListOf(isString)
   }));
 
 /**
- * debug.createContext params
+ * execution.createContext params
  *
  * {
  *   "contextRoot": FilePath
  * }
  */
-final Matcher isDebugCreateContextParams = new LazyMatcher(() => new MatchesJsonObject(
-  "debug.createContext params", {
+final Matcher isExecutionCreateContextParams = new LazyMatcher(() => new MatchesJsonObject(
+  "execution.createContext params", {
     "contextRoot": isFilePath
   }));
 
 /**
- * debug.createContext result
+ * execution.createContext result
  *
  * {
- *   "id": DebugContextId
+ *   "id": ExecutionContextId
  * }
  */
-final Matcher isDebugCreateContextResult = new LazyMatcher(() => new MatchesJsonObject(
-  "debug.createContext result", {
-    "id": isDebugContextId
+final Matcher isExecutionCreateContextResult = new LazyMatcher(() => new MatchesJsonObject(
+  "execution.createContext result", {
+    "id": isExecutionContextId
   }));
 
 /**
- * debug.deleteContext params
+ * execution.deleteContext params
  *
  * {
- *   "id": DebugContextId
+ *   "id": ExecutionContextId
  * }
  */
-final Matcher isDebugDeleteContextParams = new LazyMatcher(() => new MatchesJsonObject(
-  "debug.deleteContext params", {
-    "id": isDebugContextId
+final Matcher isExecutionDeleteContextParams = new LazyMatcher(() => new MatchesJsonObject(
+  "execution.deleteContext params", {
+    "id": isExecutionContextId
   }));
 
 /**
- * debug.deleteContext result
+ * execution.deleteContext result
  */
-final Matcher isDebugDeleteContextResult = isNull;
+final Matcher isExecutionDeleteContextResult = isNull;
 
 /**
- * debug.mapUri params
+ * execution.mapUri params
  *
  * {
- *   "id": DebugContextId
+ *   "id": ExecutionContextId
  *   "file": optional FilePath
  *   "uri": optional String
  * }
  */
-final Matcher isDebugMapUriParams = new LazyMatcher(() => new MatchesJsonObject(
-  "debug.mapUri params", {
-    "id": isDebugContextId
+final Matcher isExecutionMapUriParams = new LazyMatcher(() => new MatchesJsonObject(
+  "execution.mapUri params", {
+    "id": isExecutionContextId
   }, optionalFields: {
     "file": isFilePath,
     "uri": isString
   }));
 
 /**
- * debug.mapUri result
+ * execution.mapUri result
  *
  * {
  *   "file": optional FilePath
  *   "uri": optional String
  * }
  */
-final Matcher isDebugMapUriResult = new LazyMatcher(() => new MatchesJsonObject(
-  "debug.mapUri result", null, optionalFields: {
+final Matcher isExecutionMapUriResult = new LazyMatcher(() => new MatchesJsonObject(
+  "execution.mapUri result", null, optionalFields: {
     "file": isFilePath,
     "uri": isString
   }));
 
 /**
- * debug.setSubscriptions params
+ * execution.setSubscriptions params
  *
  * {
- *   "subscriptions": List<DebugService>
+ *   "subscriptions": List<ExecutionService>
  * }
  */
-final Matcher isDebugSetSubscriptionsParams = new LazyMatcher(() => new MatchesJsonObject(
-  "debug.setSubscriptions params", {
-    "subscriptions": isListOf(isDebugService)
+final Matcher isExecutionSetSubscriptionsParams = new LazyMatcher(() => new MatchesJsonObject(
+  "execution.setSubscriptions params", {
+    "subscriptions": isListOf(isExecutionService)
   }));
 
 /**
- * debug.setSubscriptions result
+ * execution.setSubscriptions result
  */
-final Matcher isDebugSetSubscriptionsResult = isNull;
+final Matcher isExecutionSetSubscriptionsResult = isNull;
 
 /**
- * debug.launchData params
+ * execution.launchData params
  *
  * {
  *   "executables": List<ExecutableFile>
@@ -762,8 +762,8 @@
  *   "htmlToDart": Map<FilePath, List<FilePath>>
  * }
  */
-final Matcher isDebugLaunchDataParams = new LazyMatcher(() => new MatchesJsonObject(
-  "debug.launchData params", {
+final Matcher isExecutionLaunchDataParams = new LazyMatcher(() => new MatchesJsonObject(
+  "execution.launchData params", {
     "executables": isListOf(isExecutableFile),
     "dartToHtml": isMapOf(isFilePath, isListOf(isFilePath)),
     "htmlToDart": isMapOf(isFilePath, isListOf(isFilePath))
@@ -1041,24 +1041,6 @@
 ]);
 
 /**
- * DebugContextId
- *
- * String
- */
-final Matcher isDebugContextId = isString;
-
-/**
- * DebugService
- *
- * enum {
- *   LAUNCH_DATA
- * }
- */
-final Matcher isDebugService = new MatchesEnum("DebugService", [
-  "LAUNCH_DATA"
-]);
-
-/**
  * Element
  *
  * {
@@ -1156,6 +1138,24 @@
 ]);
 
 /**
+ * ExecutionContextId
+ *
+ * String
+ */
+final Matcher isExecutionContextId = isString;
+
+/**
+ * ExecutionService
+ *
+ * enum {
+ *   LAUNCH_DATA
+ * }
+ */
+final Matcher isExecutionService = new MatchesEnum("ExecutionService", [
+  "LAUNCH_DATA"
+]);
+
+/**
  * FilePath
  *
  * String
@@ -1533,6 +1533,24 @@
   }));
 
 /**
+ * RefactoringFeedback
+ *
+ * {
+ * }
+ */
+final Matcher isRefactoringFeedback = new LazyMatcher(() => new MatchesJsonObject(
+  "RefactoringFeedback", null));
+
+/**
+ * RefactoringOptions
+ *
+ * {
+ * }
+ */
+final Matcher isRefactoringOptions = new LazyMatcher(() => new MatchesJsonObject(
+  "RefactoringOptions", null));
+
+/**
  * RefactoringMethodParameterKind
  *
  * enum {
@@ -1614,7 +1632,8 @@
  * RequestErrorCode
  *
  * enum {
- *   GET_ERRORS_ERROR
+ *   GET_ERRORS_INVALID_FILE
+ *   INVALID_OVERLAY_CHANGE
  *   INVALID_PARAMETER
  *   INVALID_REQUEST
  *   SERVER_ALREADY_STARTED
@@ -1624,7 +1643,8 @@
  * }
  */
 final Matcher isRequestErrorCode = new MatchesEnum("RequestErrorCode", [
-  "GET_ERRORS_ERROR",
+  "GET_ERRORS_INVALID_FILE",
+  "INVALID_OVERLAY_CHANGE",
   "INVALID_PARAMETER",
   "INVALID_REQUEST",
   "SERVER_ALREADY_STARTED",
@@ -1867,8 +1887,17 @@
 
 /**
  * inlineLocalVariable feedback
+ *
+ * {
+ *   "name": String
+ *   "occurrences": int
+ * }
  */
-final Matcher isInlineLocalVariableFeedback = isNull;
+final Matcher isInlineLocalVariableFeedback = new LazyMatcher(() => new MatchesJsonObject(
+  "inlineLocalVariable feedback", {
+    "name": isString,
+    "occurrences": isInt
+  }));
 
 /**
  * inlineLocalVariable options
@@ -1877,8 +1906,20 @@
 
 /**
  * inlineMethod feedback
+ *
+ * {
+ *   "className": optional String
+ *   "methodName": String
+ *   "isDeclaration": bool
+ * }
  */
-final Matcher isInlineMethodFeedback = isNull;
+final Matcher isInlineMethodFeedback = new LazyMatcher(() => new MatchesJsonObject(
+  "inlineMethod feedback", {
+    "methodName": isString,
+    "isDeclaration": isBool
+  }, optionalFields: {
+    "className": isString
+  }));
 
 /**
  * inlineMethod options
@@ -1900,12 +1941,16 @@
  * {
  *   "offset": int
  *   "length": int
+ *   "elementKindName": String
+ *   "oldName": String
  * }
  */
 final Matcher isRenameFeedback = new LazyMatcher(() => new MatchesJsonObject(
   "rename feedback", {
     "offset": isInt,
-    "length": isInt
+    "length": isInt,
+    "elementKindName": isString,
+    "oldName": isString
   }));
 
 /**
diff --git a/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart b/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
index ff423fe..24540f7 100644
--- a/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../integration_tests.dart';
diff --git a/pkg/analysis_server/test/integration/server/get_version_test.dart b/pkg/analysis_server/test/integration/server/get_version_test.dart
index 5575c60..30bfc24 100644
--- a/pkg/analysis_server/test/integration/server/get_version_test.dart
+++ b/pkg/analysis_server/test/integration/server/get_version_test.dart
@@ -5,7 +5,7 @@
 library test.integration.server.get.version;
 
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 
 import '../integration_tests.dart';
 
diff --git a/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart b/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
index a5d24ed..5aa10a1 100644
--- a/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
+++ b/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
@@ -4,7 +4,7 @@
 
 library test.integration.server.set.subscriptions.invalid.service;
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../integration_tests.dart';
diff --git a/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart b/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
index 51f974a..63598a8 100644
--- a/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../integration_tests.dart';
diff --git a/pkg/analysis_server/test/integration/server/shutdown_test.dart b/pkg/analysis_server/test/integration/server/shutdown_test.dart
index fed9c4c..d830f8c 100644
--- a/pkg/analysis_server/test/integration/server/shutdown_test.dart
+++ b/pkg/analysis_server/test/integration/server/shutdown_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../integration_tests.dart';
diff --git a/pkg/analysis_server/test/integration/server/status_test.dart b/pkg/analysis_server/test/integration/server/status_test.dart
index 1ba5b7d..e757274 100644
--- a/pkg/analysis_server/test/integration/server/status_test.dart
+++ b/pkg/analysis_server/test/integration/server/status_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../integration_tests.dart';
diff --git a/pkg/analysis_server/test/mock_sdk.dart b/pkg/analysis_server/test/mock_sdk.dart
new file mode 100644
index 0000000..fa520df
--- /dev/null
+++ b/pkg/analysis_server/test/mock_sdk.dart
@@ -0,0 +1,227 @@
+// Copyright (c) 2014, 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 testing.mock_sdk;
+
+import 'package:analyzer/file_system/file_system.dart' as resource;
+import 'package:analyzer/file_system/memory_file_system.dart' as resource;
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/sdk.dart';
+import 'package:analyzer/src/generated/source.dart';
+
+
+class MockSdk implements DartSdk {
+  static const _MockSdkLibrary LIB_CORE =
+      const _MockSdkLibrary('dart:core', '/lib/core/core.dart', '''
+library dart.core;
+
+import 'dart:async';
+
+class Object {
+  bool operator ==(other) => identical(this, other);
+}
+
+class Function {}
+class StackTrace {}
+class Symbol {}
+class Type {}
+
+abstract class Comparable<T> {
+  int compareTo(T other);
+}
+
+class String implements Comparable<String> {
+  bool get isEmpty => false;
+  bool get isNotEmpty => false;
+  int get length => 0;
+}
+
+class bool extends Object {}
+abstract class num implements Comparable<num> {
+  bool operator <(num other);
+  num operator +(num other);
+  num operator -(num other);
+  num operator *(num other);
+  num operator /(num other);
+  int toInt();
+}
+abstract class int extends num {
+  bool get isEven => false;
+  int operator -();
+}
+class double extends num {}
+class DateTime extends Object {}
+class Null extends Object {}
+
+class Deprecated extends Object {
+  final String expires;
+  const Deprecated(this.expires);
+}
+const Object deprecated = const Deprecated("next release");
+
+abstract class List<E> extends Object {
+  void add(E value);
+  E operator [](int index);
+  void operator []=(int index, E value);
+}
+class Map<K, V> extends Object {}
+
+external bool identical(Object a, Object b);
+
+void print(Object object) {}
+''');
+
+  static const _MockSdkLibrary LIB_ASYNC =
+      const _MockSdkLibrary('dart:async', '/lib/async/async.dart', '''
+library dart.async;
+
+import 'dart:math';
+
+class Future {
+  static Future wait(List<Future> futures) => null;
+}
+
+class Stream<T> {}
+''');
+
+  static const _MockSdkLibrary LIB_MATH =
+      const _MockSdkLibrary('dart:math', '/lib/math/math.dart', '''
+library dart.math;
+const double E = 2.718281828459045;
+const double PI = 3.1415926535897932;
+num min(num a, num b) => 0;
+num max(num a, num b) => 0;
+class Random {}
+''');
+
+  static const _MockSdkLibrary LIB_HTML =
+      const _MockSdkLibrary('dart:html', '/lib/html/dartium/html_dartium.dart', '''
+library dart.html;
+class HtmlElement {}
+''');
+
+  static const List<SdkLibrary> LIBRARIES = const [
+      LIB_CORE,
+      LIB_ASYNC,
+      LIB_MATH,
+      LIB_HTML,];
+
+  final resource.MemoryResourceProvider provider =
+      new resource.MemoryResourceProvider();
+
+  MockSdk() {
+    LIBRARIES.forEach((_MockSdkLibrary library) {
+      provider.newFile(library.path, library.content);
+    });
+  }
+
+  @override
+  AnalysisContext get context => throw unimplemented;
+
+  @override
+  List<SdkLibrary> get sdkLibraries => LIBRARIES;
+
+  @override
+  String get sdkVersion => throw unimplemented;
+
+  UnimplementedError get unimplemented => new UnimplementedError();
+
+  @override
+  List<String> get uris => throw unimplemented;
+
+  @override
+  Source fromFileUri(Uri uri) {
+    String filePath = uri.path;
+    String libPath = '/lib';
+    if (!filePath.startsWith("$libPath/")) {
+      return null;
+    }
+    for (SdkLibrary library in LIBRARIES) {
+      String libraryPath = library.path;
+      if (filePath.replaceAll('\\', '/') == libraryPath) {
+        String path = library.shortName;
+        try {
+          resource.File file = provider.getResource(uri.path);
+          Uri dartUri = new Uri(scheme: 'dart', path: path);
+          return file.createSource(dartUri);
+        } catch (exception) {
+          return null;
+        }
+      }
+      if (filePath.startsWith("$libraryPath/")) {
+        String pathInLibrary = filePath.substring(libraryPath.length + 1);
+        String path = '${library.shortName}/${pathInLibrary}';
+        try {
+          resource.File file = provider.getResource(uri.path);
+          Uri dartUri = new Uri(scheme: 'dart', path: path);
+          return file.createSource(dartUri);
+        } catch (exception) {
+          return null;
+        }
+      }
+    }
+    return null;
+  }
+
+  @override
+  SdkLibrary getSdkLibrary(String dartUri) {
+    // getSdkLibrary() is only used to determine whether a library is internal
+    // to the SDK.  The mock SDK doesn't have any internals, so it's safe to
+    // return null.
+    return null;
+  }
+
+  @override
+  Source mapDartUri(String dartUri) {
+    const Map<String, String> uriToPath = const {
+      "dart:core": "/lib/core/core.dart",
+      "dart:html": "/lib/html/dartium/html_dartium.dart",
+      "dart:async": "/lib/async/async.dart",
+      "dart:math": "/lib/math/math.dart"
+    };
+
+    String path = uriToPath[dartUri];
+    if (path != null) {
+      resource.File file = provider.getResource(path);
+      Uri uri = new Uri(scheme: 'dart', path: dartUri.substring(5));
+      return file.createSource(uri);
+    }
+
+    // If we reach here then we tried to use a dartUri that's not in the
+    // table above.
+    throw unimplemented;
+  }
+}
+
+
+class _MockSdkLibrary implements SdkLibrary {
+  final String shortName;
+  final String path;
+  final String content;
+
+  const _MockSdkLibrary(this.shortName, this.path, this.content);
+
+  @override
+  String get category => throw unimplemented;
+
+  @override
+  bool get isDart2JsLibrary => throw unimplemented;
+
+  @override
+  bool get isDocumented => throw unimplemented;
+
+  @override
+  bool get isImplementation => throw unimplemented;
+
+  @override
+  bool get isInternal => throw unimplemented;
+
+  @override
+  bool get isShared => throw unimplemented;
+
+  @override
+  bool get isVmLibrary => throw unimplemented;
+
+  UnimplementedError get unimplemented => new UnimplementedError();
+}
diff --git a/pkg/analysis_server/test/mocks.dart b/pkg/analysis_server/test/mocks.dart
index 6edda40..3cd8079 100644
--- a/pkg/analysis_server/test/mocks.dart
+++ b/pkg/analysis_server/test/mocks.dart
@@ -14,15 +14,16 @@
 import 'package:analyzer/file_system/file_system.dart' as resource;
 import 'package:analyzer/file_system/memory_file_system.dart' as resource;
 import 'package:analysis_server/src/analysis_server.dart';
-import 'package:analysis_server/src/channel.dart';
+import 'package:analysis_server/src/channel/channel.dart';
 import 'package:analysis_server/src/operation/operation_analysis.dart';
 import 'package:analysis_server/src/operation/operation.dart';
-import 'package:analysis_server/src/package_map_provider.dart';
-import 'package:analysis_server/src/protocol.dart';
+import 'package:analyzer/source/package_map_provider.dart';
+import 'package:analysis_server/src/protocol.dart' hide Element, ElementKind;
+import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:matcher/matcher.dart';
-import 'package:mock/mock.dart';
+import 'package:typed_mock/typed_mock.dart';
 import 'package:unittest/unittest.dart';
 
 /**
@@ -204,21 +205,6 @@
   }
 }
 
-/**
- * A mock [AnalysisContext] for testing [AnalysisServer].
- */
-class MockAnalysisContext extends Mock implements AnalysisContext {
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-/**
- * A mock [Source].  Particularly useful when all that is needed is the
- * encoding.
- */
-class MockSource extends Mock implements Source {
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
 typedef void MockServerOperationPerformFunction(AnalysisServer server);
 
 /**
@@ -296,28 +282,40 @@
 
 /**
  * A [Matcher] that check that the given [Response] has an expected identifier
- * and has an error.
+ * and has an error.  The error code may optionally be checked.
  */
-Matcher isResponseFailure(String id) => new _IsResponseFailure(id);
+Matcher isResponseFailure(String id, [RequestErrorCode code]) =>
+    new _IsResponseFailure(id, code);
 
 /**
  * A [Matcher] that check that there are no `error` in a given [Response].
  */
 class _IsResponseFailure extends Matcher {
   final String _id;
+  final RequestErrorCode _code;
 
-  _IsResponseFailure(this._id);
+  _IsResponseFailure(this._id, this._code);
 
   @override
   Description describe(Description description) {
-    return description.addDescriptionOf(
+    description = description.add(
         'response with identifier "$_id" and an error');
+    if (_code != null) {
+      description = description.add(' with code ${this._code.name}');
+    }
+    return description;
   }
 
   @override
   bool matches(item, Map matchState) {
     Response response = item;
-    return response.id == _id && response.error != null;
+    if (response.id != _id || response.error == null) {
+      return false;
+    }
+    if (_code != null && response.error.code != _code) {
+      return false;
+    }
+    return true;
   }
 
   @override
@@ -329,6 +327,8 @@
     mismatchDescription.add('has identifier "$id"');
     if (error == null) {
       mismatchDescription.add(' and has no error');
+    } else {
+      mismatchDescription.add(' and has error code ${response.error.code.name}');
     }
     return mismatchDescription;
   }
@@ -362,3 +362,146 @@
     return new PackageMapInfo(packageMap, dependencies);
   }
 }
+
+
+class MockAnalysisContext extends StringTypedMock implements AnalysisContext {
+  MockAnalysisContext(String name) : super(name);
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockClassElement extends TypedMock implements ClassElement {
+  final ElementKind kind = ElementKind.CLASS;
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockCompilationUnitElement extends TypedMock implements
+    CompilationUnitElement {
+  final ElementKind kind = ElementKind.COMPILATION_UNIT;
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockConstructorElement extends TypedMock implements ConstructorElement {
+  final kind = ElementKind.CONSTRUCTOR;
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockElement extends StringTypedMock implements Element {
+  MockElement([String name = '<element>']) : super(name);
+
+  @override
+  String get displayName => _toString;
+
+  @override
+  String get name => _toString;
+
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockFieldElement extends TypedMock implements FieldElement {
+  final ElementKind kind = ElementKind.FIELD;
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockFunctionElement extends TypedMock implements FunctionElement {
+  final ElementKind kind = ElementKind.FUNCTION;
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockFunctionTypeAliasElement extends TypedMock implements
+    FunctionTypeAliasElement {
+  final ElementKind kind = ElementKind.FUNCTION_TYPE_ALIAS;
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockHtmlElement extends TypedMock implements HtmlElement {
+  final ElementKind kind = ElementKind.HTML;
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockImportElement extends TypedMock implements ImportElement {
+  final ElementKind kind = ElementKind.IMPORT;
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockLibraryElement extends TypedMock implements LibraryElement {
+  final ElementKind kind = ElementKind.LIBRARY;
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockLocalVariableElement extends TypedMock implements LocalVariableElement
+    {
+  final ElementKind kind = ElementKind.LOCAL_VARIABLE;
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockLogger extends TypedMock implements Logger {
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockMethodElement extends StringTypedMock implements MethodElement {
+  final kind = ElementKind.METHOD;
+  MockMethodElement([String name = 'method']) : super(name);
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockParameterElement extends TypedMock implements ParameterElement {
+  final ElementKind kind = ElementKind.PARAMETER;
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockPropertyAccessorElement extends TypedMock implements
+    PropertyAccessorElement {
+  final ElementKind kind;
+  MockPropertyAccessorElement(this.kind);
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockSource extends StringTypedMock implements Source {
+  MockSource([String name = 'mocked.dart']) : super(name);
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockTopLevelVariableElement extends TypedMock implements
+    TopLevelVariableElement {
+  final ElementKind kind = ElementKind.TOP_LEVEL_VARIABLE;
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class MockTypeParameterElement extends TypedMock implements TypeParameterElement
+    {
+  final ElementKind kind = ElementKind.TYPE_PARAMETER;
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+
+class StringTypedMock extends TypedMock {
+  String _toString;
+
+  StringTypedMock(this._toString);
+
+  @override
+  String toString() {
+    if (_toString != null) {
+      return _toString;
+    }
+    return super.toString();
+  }
+}
diff --git a/pkg/analysis_server/test/package_map_provider_test.dart b/pkg/analysis_server/test/package_map_provider_test.dart
deleted file mode 100644
index cec1e2c..0000000
--- a/pkg/analysis_server/test/package_map_provider_test.dart
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright (c) 2014, 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 test.package.map.provider;
-
-import 'dart:convert';
-
-import 'package:analysis_server/src/package_map_provider.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/file_system/memory_file_system.dart';
-import 'package:analyzer/src/generated/sdk_io.dart';
-import 'package:unittest/unittest.dart';
-
-main() {
-  groupSep = ' | ';
-
-  group('PubPackageMapProvider', () {
-    group('parsePackageMap', () {
-      MemoryResourceProvider resourceProvider;
-      PubPackageMapProvider packageMapProvider;
-      const String projectPath = '/path/to/project';
-      Folder projectFolder;
-
-      setUp(() {
-        resourceProvider = new MemoryResourceProvider();
-        packageMapProvider = new PubPackageMapProvider(resourceProvider, DirectoryBasedDartSdk.defaultSdk);
-        projectFolder = resourceProvider.newFolder(projectPath);
-      });
-
-      PackageMapInfo parsePackageMap(Object obj) {
-        return packageMapProvider.parsePackageMap(JSON.encode(obj), projectFolder);
-      }
-
-      test('normal folder', () {
-        String packageName = 'foo';
-        String folderPath = '/path/to/folder';
-        resourceProvider.newFolder(folderPath);
-        Map<String, List<Folder>> result = parsePackageMap(
-            {'packages': {packageName: folderPath}}).packageMap;
-        expect(result, hasLength(1));
-        expect(result.keys, contains(packageName));
-        expect(result[packageName], hasLength(1));
-        expect(result[packageName][0], new isInstanceOf<Folder>());
-        expect(result[packageName][0].path, equals(folderPath));
-      });
-
-      test('ignore nonexistent folder', () {
-        String packageName = 'foo';
-        String folderPath = '/path/to/folder';
-        Map<String, List<Folder>> result = parsePackageMap(
-            {'packages': {packageName: folderPath}}).packageMap;
-        expect(result, hasLength(0));
-      });
-
-      test('package maps to list', () {
-        String packageName = 'foo';
-        String folderPath1 = '/path/to/folder1';
-        String folderPath2 = '/path/to/folder2';
-        resourceProvider.newFolder(folderPath1);
-        resourceProvider.newFolder(folderPath2);
-        Map<String, List<Folder>> result = parsePackageMap(
-            {'packages': {packageName: [folderPath1, folderPath2]}}).packageMap;
-        expect(result, hasLength(1));
-        expect(result.keys, contains(packageName));
-        expect(result[packageName], hasLength(2));
-        for (int i = 0; i < 2; i++) {
-          expect(result[packageName][i], new isInstanceOf<Folder>());
-          expect(result[packageName][i].path, isIn([folderPath1, folderPath2]));
-        }
-      });
-
-      test('Handle dependencies', () {
-        String path1 = '/path/to/folder1/pubspec.lock';
-        String path2 = '/path/to/folder2/pubspec.lock';
-        resourceProvider.newFile(path1, '...');
-        resourceProvider.newFile(path2, '...');
-        Set<String> dependencies = parsePackageMap(
-            {'packages': {}, 'input_files': [path1, path2]}).dependencies;
-        expect(dependencies, hasLength(2));
-        expect(dependencies, contains(path1));
-        expect(dependencies, contains(path2));
-      });
-
-      test('Relative path in packages', () {
-        String packagePath = '/path/to/package';
-        String relativePackagePath = '../package';
-        String packageName = 'foo';
-        resourceProvider.newFolder(projectPath);
-        resourceProvider.newFolder(packagePath);
-        Map<String, List<Folder>> result = parsePackageMap(
-            {'packages': {packageName: [relativePackagePath]}}).packageMap;
-        expect(result[packageName][0].path, equals(packagePath));
-      });
-
-      test('Relative path in dependencies', () {
-        String dependencyPath = '/path/to/pubspec.lock';
-        String relativeDependencyPath = '../pubspec.lock';
-        resourceProvider.newFolder(projectPath);
-        resourceProvider.newFile(dependencyPath, 'contents');
-        Set<String> dependencies = parsePackageMap(
-            {'packages': {}, 'input_files': [relativeDependencyPath]}).dependencies;
-        expect(dependencies, hasLength(1));
-        expect(dependencies, contains(dependencyPath));
-      });
-    });
-  });
-}
diff --git a/pkg/analysis_server/test/protocol_test.dart b/pkg/analysis_server/test/protocol_test.dart
index e321f63..aed7483 100644
--- a/pkg/analysis_server/test/protocol_test.dart
+++ b/pkg/analysis_server/test/protocol_test.dart
@@ -8,7 +8,7 @@
 
 import 'package:analysis_server/src/constants.dart';
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import 'reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 
@@ -112,7 +112,7 @@
         'ints': [1, 2, 3]
       }
     };
-    RequestError error = new RequestError.fromJson(new ResponseDecoder(), '',
+    RequestError error = new RequestError.fromJson(new ResponseDecoder(null), '',
         json);
     expect(error.code, RequestErrorCode.INVALID_PARAMETER);
     expect(error.message, "foo");
diff --git a/pkg/analysis_testing/lib/reflective_tests.dart b/pkg/analysis_server/test/reflective_tests.dart
similarity index 100%
rename from pkg/analysis_testing/lib/reflective_tests.dart
rename to pkg/analysis_server/test/reflective_tests.dart
diff --git a/pkg/analysis_server/test/search/element_references_test.dart b/pkg/analysis_server/test/search/element_references_test.dart
index e727690..07ae6ca 100644
--- a/pkg/analysis_server/test/search/element_references_test.dart
+++ b/pkg/analysis_server/test/search/element_references_test.dart
@@ -7,7 +7,7 @@
 import 'dart:async';
 
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'abstract_search_domain.dart';
@@ -60,7 +60,32 @@
     });
   }
 
-  test_constructor_unamed() {
+  test_constructor_named_potential() {
+    // Constructors in other classes shouldn't be considered potential matches,
+    // nor should unresolved method calls, since constructor call sites are
+    // statically bound to their targets).
+    addTestFile('''
+class A {
+  A.named(p); // A
+}
+class B {
+  B.named(p);
+}
+f(x) {
+  new A.named(1);
+  new B.named(2);
+  x.named(3);
+}
+''');
+    return findElementReferences('named(p); // A', true).then((_) {
+      expect(searchElement.kind, ElementKind.CONSTRUCTOR);
+      assertHasResult(SearchResultKind.DECLARATION, '.named(p)', 6);
+      assertHasResult(SearchResultKind.REFERENCE, '.named(1)', 6);
+      expect(results, hasLength(2));
+    });
+  }
+
+  test_constructor_unnamed() {
     addTestFile('''
 class A {
   A(p);
@@ -77,6 +102,36 @@
     });
   }
 
+  test_constructor_unnamed_potential() {
+    // Constructors in other classes shouldn't be considered potential matches,
+    // even if they are also unnamed (since constructor call sites are
+    // statically bound to their targets).
+    // Also, assignments to local variables shouldn't be considered potential
+    // matches.
+    addTestFile('''
+class A {
+  A(p); // A
+}
+class B {
+  B(p);
+  foo() {
+    int k;
+    k = 3;
+  }
+}
+main() {
+  new A(1);
+  new B(2);
+}
+''');
+    return findElementReferences('A(p)', true).then((_) {
+      expect(searchElement.kind, ElementKind.CONSTRUCTOR);
+      assertHasResult(SearchResultKind.DECLARATION, '(p); // A', 0);
+      assertHasResult(SearchResultKind.REFERENCE, '(1)', 0);
+      expect(results, hasLength(2));
+    });
+  }
+
   test_field_explicit() {
     addTestFile('''
 class A {
diff --git a/pkg/analysis_server/test/search/member_declarations_test.dart b/pkg/analysis_server/test/search/member_declarations_test.dart
index 8c23381..68b4634 100644
--- a/pkg/analysis_server/test/search/member_declarations_test.dart
+++ b/pkg/analysis_server/test/search/member_declarations_test.dart
@@ -7,7 +7,7 @@
 import 'dart:async';
 
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'abstract_search_domain.dart';
diff --git a/pkg/analysis_server/test/search/member_references_test.dart b/pkg/analysis_server/test/search/member_references_test.dart
index 8a8a3f3e..dbbd978 100644
--- a/pkg/analysis_server/test/search/member_references_test.dart
+++ b/pkg/analysis_server/test/search/member_references_test.dart
@@ -7,7 +7,7 @@
 import 'dart:async';
 
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'abstract_search_domain.dart';
diff --git a/pkg/analysis_server/test/search/search_result_test.dart b/pkg/analysis_server/test/search/search_result_test.dart
index aeedacc..a3009fd 100644
--- a/pkg/analysis_server/test/search/search_result_test.dart
+++ b/pkg/analysis_server/test/search/search_result_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 
diff --git a/pkg/analysis_server/test/search/top_level_declarations_test.dart b/pkg/analysis_server/test/search/top_level_declarations_test.dart
index 59a5eeb..30885a4 100644
--- a/pkg/analysis_server/test/search/top_level_declarations_test.dart
+++ b/pkg/analysis_server/test/search/top_level_declarations_test.dart
@@ -5,7 +5,7 @@
 library test.search.top_level_declarations;
 
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'abstract_search_domain.dart';
diff --git a/pkg/analysis_server/test/search/type_hierarchy_test.dart b/pkg/analysis_server/test/search/type_hierarchy_test.dart
index d542fb8..ab42552 100644
--- a/pkg/analysis_server/test/search/type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/search/type_hierarchy_test.dart
@@ -10,7 +10,7 @@
 import 'package:analysis_server/src/search/search_domain.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/local_memory_index.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import '../analysis_abstract.dart';
diff --git a/pkg/analysis_server/test/services/completion/completion_computer_test.dart b/pkg/analysis_server/test/services/completion/completion_computer_test.dart
index 15562d6..30b0afc 100644
--- a/pkg/analysis_server/test/services/completion/completion_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/completion_computer_test.dart
@@ -13,8 +13,8 @@
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
 import 'package:analysis_server/src/services/search/search_engine_internal.dart';
-import 'package:analysis_testing/abstract_single_unit.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../abstract_single_unit.dart';
+import '../../reflective_tests.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:unittest/unittest.dart';
@@ -61,7 +61,7 @@
     index = createLocalMemoryIndex();
     searchEngine = new SearchEngineImpl(index);
     source = addSource('/does/not/exist.dart', '');
-    manager = new DartCompletionManager(context, searchEngine, source, 17);
+    manager = new DartCompletionManager(context, searchEngine, source, 0);
     suggestion1 = new CompletionSuggestion(
         CompletionSuggestionKind.CLASS,
         CompletionRelevance.DEFAULT,
@@ -89,8 +89,8 @@
     manager.results().listen((CompletionResult r) {
       switch (++count) {
         case 1:
-          computer1.assertCalls(context, source, 17, searchEngine);
-          computer2.assertCalls(context, source, 17, searchEngine);
+          computer1.assertCalls(context, source, 0, searchEngine);
+          computer2.assertCalls(context, source, 0, searchEngine);
           expect(r.last, isFalse);
           expect(r.suggestions, hasLength(1));
           expect(r.suggestions, contains(suggestion1));
@@ -125,8 +125,8 @@
     manager.results().listen((CompletionResult r) {
       switch (++count) {
         case 1:
-          computer1.assertCalls(context, source, 17, searchEngine);
-          computer2.assertCalls(context, source, 17, searchEngine);
+          computer1.assertCalls(context, source, 0, searchEngine);
+          computer2.assertCalls(context, source, 0, searchEngine);
           expect(r.last, isTrue);
           expect(r.suggestions, hasLength(2));
           expect(r.suggestions, contains(suggestion1));
diff --git a/pkg/analysis_server/test/services/completion/completion_manager_test.dart b/pkg/analysis_server/test/services/completion/completion_manager_test.dart
index 582e9a4..24eec40 100644
--- a/pkg/analysis_server/test/services/completion/completion_manager_test.dart
+++ b/pkg/analysis_server/test/services/completion/completion_manager_test.dart
@@ -6,8 +6,8 @@
 
 import 'package:analysis_server/src/services/completion/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
-import 'package:analysis_testing/abstract_context.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../abstract_context.dart';
+import '../../reflective_tests.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:unittest/unittest.dart';
 
diff --git a/pkg/analysis_server/test/services/completion/completion_test_util.dart b/pkg/analysis_server/test/services/completion/completion_test_util.dart
index ab04f45..e16ff1e 100644
--- a/pkg/analysis_server/test/services/completion/completion_test_util.dart
+++ b/pkg/analysis_server/test/services/completion/completion_test_util.dart
@@ -7,18 +7,18 @@
 import 'dart:async';
 
 import 'package:analysis_server/src/protocol.dart';
+import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/local_memory_index.dart';
-import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
 import 'package:analysis_server/src/services/search/search_engine_internal.dart';
-import 'package:analysis_testing/abstract_context.dart';
-import 'package:analysis_testing/mock_sdk.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:unittest/unittest.dart';
 
+import '../../abstract_context.dart';
+
 class AbstractCompletionTest extends AbstractContextTest {
   Index index;
   SearchEngineImpl searchEngine;
@@ -162,6 +162,15 @@
     if (!_computeFastCalled) {
       expect(computeFast(), isFalse);
     }
+
+    // Index SDK
+    for (Source librarySource in context.librarySources) {
+      CompilationUnit unit = context.getResolvedCompilationUnit2(librarySource, librarySource);
+      if (unit != null) {
+          index.indexUnit(context, unit);
+      }
+    }
+
     var result = context.performAnalysisTask();
     bool resolved = false;
     while (result.hasMoreWork) {
@@ -203,6 +212,5 @@
     super.setUp();
     index = createLocalMemoryIndex();
     searchEngine = new SearchEngineImpl(index);
-    addResolvedUnit(MockSdk.LIB_CORE.path, MockSdk.LIB_CORE.content);
   }
 }
diff --git a/pkg/analysis_server/test/services/completion/imported_computer_test.dart b/pkg/analysis_server/test/services/completion/imported_computer_test.dart
new file mode 100644
index 0000000..6b07e6e
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/imported_computer_test.dart
@@ -0,0 +1,201 @@
+// Copyright (c) 2014, 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 test.services.completion.toplevel;
+
+import 'package:analysis_server/src/protocol.dart';
+import 'package:analysis_server/src/services/completion/imported_computer.dart';
+import '../../reflective_tests.dart';
+import 'package:unittest/unittest.dart';
+
+import 'completion_test_util.dart';
+
+main() {
+  groupSep = ' | ';
+  runReflectiveTests(ImportedTypeComputerTest);
+}
+
+@ReflectiveTestCase()
+class ImportedTypeComputerTest extends AbstractCompletionTest {
+
+  @override
+  void setUp() {
+    super.setUp();
+    computer = new ImportedComputer();
+  }
+
+  test_class() {
+    addSource('/testA.dart', 'class A {int x;} class _B { }');
+    addTestSource('import "/testA.dart"; class C {foo(){^}}');
+    return computeFull().then((_) {
+      assertSuggestClass('A');
+      assertNotSuggested('x');
+      assertNotSuggested('_B');
+      // Should not suggest compilation unit elements
+      // which are returned by the LocalComputer
+      assertNotSuggested('C');
+    });
+  }
+
+  test_class_importHide() {
+    addSource('/testA.dart', 'class A { } class B { }');
+    addTestSource('import "/testA.dart" hide ^; class C {}');
+    return computeFull().then((_) {
+      assertSuggestClass('A');
+      assertSuggestClass('B');
+      assertNotSuggested('Object');
+    });
+  }
+
+  test_class_importShow() {
+    addSource('/testA.dart', 'class A { } class B { }');
+    addTestSource('import "/testA.dart" show ^; class C {}');
+    return computeFull().then((_) {
+      // only suggest elements listed in show combinator
+      assertSuggestClass('A');
+      assertSuggestClass('B');
+      assertNotSuggested('Object');
+    });
+  }
+
+  test_class_importShowWithPart() {
+    addSource('/testB.dart', 'part of libA;  class B { }');
+    addSource('/testA.dart', 'part "/testB.dart"; class A { }');
+    addTestSource('import "/testA.dart" show ^; class C {}');
+    return computeFull().then((_) {
+      // only suggest elements listed in show combinator
+      assertSuggestClass('A');
+      assertSuggestClass('B');
+      assertNotSuggested('Object');
+    });
+  }
+
+  test_class_importedWithHide() {
+    addSource('/testA.dart', 'class A { } class B { }');
+    addTestSource('import "/testA.dart" hide B; class C {foo(){^}}');
+    return computeFull().then((_) {
+      // exclude elements listed in hide combinator
+      assertSuggestClass('A');
+      assertNotSuggested('B');
+      assertSuggestClass('Object');
+    });
+  }
+
+  test_class_importedWithPrefix() {
+    addSource('/testA.dart', 'class A { }');
+    addTestSource('import "/testA.dart" as foo; class C {foo(){^}}');
+    return computeFull().then((_) {
+      // do not suggest types imported with prefix
+      assertNotSuggested('A');
+      // do not suggest prefix as it is suggested by LocalComputer
+      assertNotSuggested('foo');
+    });
+  }
+
+  test_class_importedWithShow() {
+    addSource('/testA.dart', 'class A { } class B { }');
+    addTestSource('import "/testA.dart" show A; class C {foo(){^}}');
+    return computeFull().then((_) {
+      // only suggest elements listed in show combinator
+      assertSuggestClass('A');
+      assertNotSuggested('B');
+      assertSuggestClass('Object');
+    });
+  }
+
+  test_class_notImported() {
+    addSource('/testA.dart', 'class A {int x;} class _B { }');
+    addTestSource('class C {foo(){^}}');
+    return computeFull(true).then((_) {
+      assertSuggestClass('A', CompletionRelevance.LOW);
+      assertNotSuggested('x');
+      assertNotSuggested('_B');
+    });
+  }
+
+  test_dartCore() {
+    addTestSource('class C {foo(){^}}');
+    return computeFull().then((_) {
+      assertSuggestClass('Object');
+      assertNotSuggested('HtmlElement');
+    });
+  }
+
+  test_dartHtml() {
+    addTestSource('import "dart:html"; class C {foo(){^}}');
+    return computeFull().then((_) {
+      assertSuggestClass('Object');
+      assertSuggestClass('HtmlElement');
+    });
+  }
+
+  test_field_name() {
+    addSource('/testA.dart', 'class A { }');
+    addTestSource('import "/testA.dart"; class C {A ^}');
+    return computeFull().then((_) {
+      assertNotSuggested('A');
+    });
+  }
+
+  test_field_name2() {
+    addSource('/testA.dart', 'class A { }');
+    addTestSource('import "/testA.dart"; class C {var ^}');
+    return computeFull().then((_) {
+      assertNotSuggested('A');
+    });
+  }
+
+  test_local_name() {
+    addSource('/testA.dart', 'var T1;');
+    addTestSource('import "/testA.dart"; class C {a() {C ^}}');
+    return computeFull().then((_) {
+      //TODO (danrubel) should not be suggested
+      // but C ^ in this test
+      // parses differently than var ^ in test below
+      assertSuggestTopLevelVar('T1');
+    });
+  }
+
+  test_local_name2() {
+    addSource('/testA.dart', 'var T1;');
+    addTestSource('import "/testA.dart"; class C {a() {var ^}}');
+    return computeFull().then((_) {
+      assertNotSuggested('T1');
+    });
+  }
+
+  test_topLevelVar() {
+    addSource('/testA.dart', 'var T1; var _T2;');
+    addTestSource('import "/testA.dart"; class C {foo(){^}}');
+    return computeFull().then((_) {
+      assertSuggestTopLevelVar('T1');
+      assertNotSuggested('_T2');
+    });
+  }
+
+  test_topLevelVar_name() {
+    addSource('/testA.dart', 'class B { };');
+    addTestSource('import "/testA.dart"; class C {} B ^');
+    return computeFull().then((_) {
+      assertNotSuggested('B');
+    });
+  }
+
+  test_topLevelVar_name2() {
+    addSource('/testA.dart', 'class B { };');
+    addTestSource('import "/testA.dart"; class C {} var ^');
+    return computeFull().then((_) {
+      assertNotSuggested('B');
+    });
+  }
+
+  test_topLevelVar_notImported() {
+    addSource('/testA.dart', 'var T1; var _T2;');
+    addTestSource('class C {foo(){^}}');
+    return computeFull(true).then((_) {
+      assertSuggestTopLevelVar('T1', CompletionRelevance.LOW);
+      assertNotSuggested('_T2');
+    });
+  }
+}
diff --git a/pkg/analysis_server/test/services/completion/imported_type_computer_test.dart b/pkg/analysis_server/test/services/completion/imported_type_computer_test.dart
deleted file mode 100644
index f409768..0000000
--- a/pkg/analysis_server/test/services/completion/imported_type_computer_test.dart
+++ /dev/null
@@ -1,201 +0,0 @@
-// Copyright (c) 2014, 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 test.services.completion.toplevel;
-
-import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_server/src/services/completion/imported_type_computer.dart';
-import 'package:analysis_testing/reflective_tests.dart';
-import 'package:unittest/unittest.dart';
-
-import 'completion_test_util.dart';
-
-main() {
-  groupSep = ' | ';
-  runReflectiveTests(ImportedTypeComputerTest);
-}
-
-@ReflectiveTestCase()
-class ImportedTypeComputerTest extends AbstractCompletionTest {
-
-  @override
-  void setUp() {
-    super.setUp();
-    computer = new ImportedTypeComputer();
-  }
-
-  test_class() {
-    addSource('/testA.dart', 'class A {int x;} class _B { }');
-    addTestSource('import "/testA.dart"; class C {foo(){^}}');
-    return computeFull().then((_) {
-      assertSuggestClass('A');
-      assertNotSuggested('x');
-      assertNotSuggested('_B');
-      // Should not suggest compilation unit elements
-      // which are returned by the LocalComputer
-      assertNotSuggested('C');
-    });
-  }
-
-  test_class_importHide() {
-    addSource('/testA.dart', 'class A { } class B { }');
-    addTestSource('import "/testA.dart" hide ^; class C {}');
-    return computeFull().then((_) {
-      assertSuggestClass('A');
-      assertSuggestClass('B');
-      assertNotSuggested('Object');
-    });
-  }
-
-  test_class_importShow() {
-    addSource('/testA.dart', 'class A { } class B { }');
-    addTestSource('import "/testA.dart" show ^; class C {}');
-    return computeFull().then((_) {
-      // only suggest elements listed in show combinator
-      assertSuggestClass('A');
-      assertSuggestClass('B');
-      assertNotSuggested('Object');
-    });
-  }
-
-  test_class_importShowWithPart() {
-    addSource('/testB.dart', 'part of libA;  class B { }');
-    addSource('/testA.dart', 'part "/testB.dart"; class A { }');
-    addTestSource('import "/testA.dart" show ^; class C {}');
-    return computeFull().then((_) {
-      // only suggest elements listed in show combinator
-      assertSuggestClass('A');
-      assertSuggestClass('B');
-      assertNotSuggested('Object');
-    });
-  }
-
-  test_class_importedWithHide() {
-    addSource('/testA.dart', 'class A { } class B { }');
-    addTestSource('import "/testA.dart" hide B; class C {foo(){^}}');
-    return computeFull().then((_) {
-      // exclude elements listed in hide combinator
-      assertSuggestClass('A');
-      assertNotSuggested('B');
-      assertSuggestClass('Object');
-    });
-  }
-
-  test_class_importedWithPrefix() {
-    addSource('/testA.dart', 'class A { }');
-    addTestSource('import "/testA.dart" as foo; class C {foo(){^}}');
-    return computeFull().then((_) {
-      // do not suggest types imported with prefix
-      assertNotSuggested('A');
-      // do not suggest prefix as it is suggested by LocalComputer
-      assertNotSuggested('foo');
-    });
-  }
-
-  test_class_importedWithShow() {
-    addSource('/testA.dart', 'class A { } class B { }');
-    addTestSource('import "/testA.dart" show A; class C {foo(){^}}');
-    return computeFull().then((_) {
-      // only suggest elements listed in show combinator
-      assertSuggestClass('A');
-      assertNotSuggested('B');
-      assertSuggestClass('Object');
-    });
-  }
-
-  test_class_notImported() {
-    addSource('/testA.dart', 'class A {int x;} class _B { }');
-    addTestSource('class C {foo(){^}}');
-    return computeFull(true).then((_) {
-      assertSuggestClass('A', CompletionRelevance.LOW);
-      assertNotSuggested('x');
-      assertNotSuggested('_B');
-    });
-  }
-
-  test_dartCore() {
-    addTestSource('class C {foo(){^}}');
-    return computeFull().then((_) {
-      assertSuggestClass('Object');
-      assertNotSuggested('HtmlElement');
-    });
-  }
-
-  test_dartHtml() {
-    addTestSource('import "dart:html"; class C {foo(){^}}');
-    return computeFull().then((_) {
-      assertSuggestClass('Object');
-      assertSuggestClass('HtmlElement');
-    });
-  }
-
-  test_field_name() {
-    addSource('/testA.dart', 'class A { }');
-    addTestSource('import "/testA.dart"; class C {A ^}');
-    return computeFull().then((_) {
-      assertNotSuggested('A');
-    });
-  }
-
-  test_field_name2() {
-    addSource('/testA.dart', 'class A { }');
-    addTestSource('import "/testA.dart"; class C {var ^}');
-    return computeFull().then((_) {
-      assertNotSuggested('A');
-    });
-  }
-
-  test_local_name() {
-    addSource('/testA.dart', 'var T1;');
-    addTestSource('import "/testA.dart"; class C {a() {C ^}}');
-    return computeFull().then((_) {
-      //TODO (danrubel) should not be suggested
-      // but C ^ in this test
-      // parses differently than var ^ in test below
-      assertSuggestTopLevelVar('T1');
-    });
-  }
-
-  test_local_name2() {
-    addSource('/testA.dart', 'var T1;');
-    addTestSource('import "/testA.dart"; class C {a() {var ^}}');
-    return computeFull().then((_) {
-      assertNotSuggested('T1');
-    });
-  }
-
-  test_topLevelVar() {
-    addSource('/testA.dart', 'var T1; var _T2;');
-    addTestSource('import "/testA.dart"; class C {foo(){^}}');
-    return computeFull().then((_) {
-      assertSuggestTopLevelVar('T1');
-      assertNotSuggested('_T2');
-    });
-  }
-
-  test_topLevelVar_name() {
-    addSource('/testA.dart', 'class B { };');
-    addTestSource('import "/testA.dart"; class C {} B ^');
-    return computeFull().then((_) {
-      assertNotSuggested('B');
-    });
-  }
-
-  test_topLevelVar_name2() {
-    addSource('/testA.dart', 'class B { };');
-    addTestSource('import "/testA.dart"; class C {} var ^');
-    return computeFull().then((_) {
-      assertNotSuggested('B');
-    });
-  }
-
-  test_topLevelVar_notImported() {
-    addSource('/testA.dart', 'var T1; var _T2;');
-    addTestSource('class C {foo(){^}}');
-    return computeFull(true).then((_) {
-      assertSuggestTopLevelVar('T1', CompletionRelevance.LOW);
-      assertNotSuggested('_T2');
-    });
-  }
-}
diff --git a/pkg/analysis_server/test/services/completion/invocation_computer_test.dart b/pkg/analysis_server/test/services/completion/invocation_computer_test.dart
index e191a9a..45bcb5e 100644
--- a/pkg/analysis_server/test/services/completion/invocation_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/invocation_computer_test.dart
@@ -6,7 +6,7 @@
 
 
 import 'package:analysis_server/src/services/completion/invocation_computer.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'completion_test_util.dart';
diff --git a/pkg/analysis_server/test/services/completion/keyword_computer_test.dart b/pkg/analysis_server/test/services/completion/keyword_computer_test.dart
index 822bfe4..c796475 100644
--- a/pkg/analysis_server/test/services/completion/keyword_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/keyword_computer_test.dart
@@ -6,10 +6,10 @@
 
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/services/completion/keyword_computer.dart';
-import 'package:analysis_testing/reflective_tests.dart';
 import 'package:analyzer/src/generated/scanner.dart';
 import 'package:unittest/unittest.dart';
 
+import '../../reflective_tests.dart';
 import 'completion_test_util.dart';
 
 main() {
@@ -20,14 +20,42 @@
 @ReflectiveTestCase()
 class KeywordComputerTest extends AbstractCompletionTest {
 
-  void assertSuggestKeywords(List<String> names) {
-    Keyword.values.forEach((Keyword keyword) {
-      if (names.contains(keyword.syntax)) {
-        assertSuggest(CompletionSuggestionKind.KEYWORD, keyword.syntax);
-      } else {
-        assertNotSuggested(keyword.syntax);
+  void assertSuggestKeywords(Iterable<Keyword> expectedKeywords) {
+    Set<Keyword> actualKeywords = new Set<Keyword>();
+    request.suggestions.forEach((CompletionSuggestion s) {
+      if (s.kind == CompletionSuggestionKind.KEYWORD) {
+        Keyword k = Keyword.keywords[s.completion];
+        if (k == null) {
+          fail('Invalid keyword suggested: ${s.completion}');
+        } else {
+          if (!actualKeywords.add(k)) {
+            fail('Duplicate keyword suggested: ${s.completion}');
+          }
+        }
+        expect(s.relevance, equals(CompletionRelevance.DEFAULT));
+        expect(s.selectionOffset, equals(s.completion.length));
+        expect(s.selectionLength, equals(0));
+        expect(s.isDeprecated, equals(false));
+        expect(s.isPotential, equals(false));
       }
     });
+    if (expectedKeywords.any((k) => k is String)) {
+      StringBuffer msg = new StringBuffer();
+      msg.writeln('Expected set should be:');
+      expectedKeywords.forEach((n) {
+        Keyword k = Keyword.keywords[n];
+        msg.writeln('  Keyword.${k.name},');
+      });
+      fail(msg.toString());
+    }
+    if (!_equalSets(expectedKeywords, actualKeywords)) {
+      StringBuffer msg = new StringBuffer();
+      msg.writeln('Expected:');
+      _appendKeywords(msg, expectedKeywords);
+      msg.writeln('but found:');
+      _appendKeywords(msg, actualKeywords);
+      fail(msg.toString());
+    }
   }
 
   @override
@@ -40,25 +68,32 @@
     addTestSource('class A {} ^');
     expect(computeFast(), isTrue);
     assertSuggestKeywords(
-        ['abstract', 'class', 'const', 'final', 'typedef', 'var']);
+        [
+            Keyword.ABSTRACT,
+            Keyword.CLASS,
+            Keyword.CONST,
+            Keyword.FINAL,
+            Keyword.TYPEDEF,
+            Keyword.VAR]);
   }
 
   test_before_import() {
     addTestSource('^ import foo;');
     expect(computeFast(), isTrue);
-    assertSuggestKeywords(['export', 'import', 'library', 'part']);
+    assertSuggestKeywords(
+        [Keyword.EXPORT, Keyword.IMPORT, Keyword.LIBRARY, Keyword.PART]);
   }
 
   test_class() {
     addTestSource('class A ^');
     expect(computeFast(), isTrue);
-    assertSuggestKeywords(['extends', 'implements']);
+    assertSuggestKeywords([Keyword.EXTENDS, Keyword.IMPLEMENTS]);
   }
 
   test_class_extends() {
     addTestSource('class A extends foo ^');
     expect(computeFast(), isTrue);
-    assertSuggestKeywords(['implements', 'with']);
+    assertSuggestKeywords([Keyword.IMPLEMENTS, Keyword.WITH]);
   }
 
   test_class_extends_name() {
@@ -70,7 +105,7 @@
   test_class_implements() {
     addTestSource('class A ^ implements foo');
     expect(computeFast(), isTrue);
-    assertSuggestKeywords(['extends']);
+    assertSuggestKeywords([Keyword.EXTENDS]);
   }
 
   test_class_implements_name() {
@@ -96,16 +131,59 @@
     expect(computeFast(), isTrue);
     assertSuggestKeywords(
         [
-            'abstract',
-            'class',
-            'const',
-            'export',
-            'final',
-            'import',
-            'library',
-            'part',
-            'typedef',
-            'var']);
+            Keyword.ABSTRACT,
+            Keyword.CLASS,
+            Keyword.CONST,
+            Keyword.EXPORT,
+            Keyword.FINAL,
+            Keyword.IMPORT,
+            Keyword.LIBRARY,
+            Keyword.PART,
+            Keyword.TYPEDEF,
+            Keyword.VAR]);
+  }
+
+  test_function_body() {
+    addTestSource('main() {^}');
+    expect(computeFast(), isTrue);
+    assertSuggestKeywords(
+        [
+            Keyword.ASSERT,
+            Keyword.CASE,
+            Keyword.CONTINUE,
+            Keyword.DO,
+            Keyword.FACTORY,
+            Keyword.FINAL,
+            Keyword.FOR,
+            Keyword.IF,
+            Keyword.NEW,
+            Keyword.RETHROW,
+            Keyword.RETURN,
+            Keyword.SUPER,
+            Keyword.SWITCH,
+            Keyword.THIS,
+            Keyword.THROW,
+            Keyword.TRY,
+            Keyword.VAR,
+            Keyword.VOID,
+            Keyword.WHILE]);
+  }
+
+  test_in_class() {
+    addTestSource('class A {^}');
+    expect(computeFast(), isTrue);
+    assertSuggestKeywords(
+        [
+            Keyword.CONST,
+            Keyword.DYNAMIC,
+            Keyword.FACTORY,
+            Keyword.FINAL,
+            Keyword.GET,
+            Keyword.OPERATOR,
+            Keyword.SET,
+            Keyword.STATIC,
+            Keyword.VAR,
+            Keyword.VOID]);
   }
 
   test_library() {
@@ -113,15 +191,15 @@
     expect(computeFast(), isTrue);
     assertSuggestKeywords(
         [
-            'abstract',
-            'class',
-            'const',
-            'export',
-            'final',
-            'import',
-            'part',
-            'typedef',
-            'var']);
+            Keyword.ABSTRACT,
+            Keyword.CLASS,
+            Keyword.CONST,
+            Keyword.EXPORT,
+            Keyword.FINAL,
+            Keyword.IMPORT,
+            Keyword.PART,
+            Keyword.TYPEDEF,
+            Keyword.VAR]);
   }
 
   test_library_name() {
@@ -130,20 +208,52 @@
     assertSuggestKeywords([]);
   }
 
+  test_method_body() {
+    addTestSource('class A { foo() {^}}');
+    expect(computeFast(), isTrue);
+    assertSuggestKeywords(
+        [
+            Keyword.ASSERT,
+            Keyword.CASE,
+            Keyword.CONTINUE,
+            Keyword.DO,
+            Keyword.FACTORY,
+            Keyword.FINAL,
+            Keyword.FOR,
+            Keyword.IF,
+            Keyword.NEW,
+            Keyword.RETHROW,
+            Keyword.RETURN,
+            Keyword.SUPER,
+            Keyword.SWITCH,
+            Keyword.THIS,
+            Keyword.THROW,
+            Keyword.TRY,
+            Keyword.VAR,
+            Keyword.VOID,
+            Keyword.WHILE]);
+  }
+
+  test_named_constructor_invocation() {
+    addTestSource('void main() {new Future.^}');
+    expect(computeFast(), isTrue);
+    assertSuggestKeywords([]);
+  }
+
   test_part_of() {
     addTestSource('part of foo;^');
     expect(computeFast(), isTrue);
     assertSuggestKeywords(
         [
-            'abstract',
-            'class',
-            'const',
-            'export',
-            'final',
-            'import',
-            'part',
-            'typedef',
-            'var']);
+            Keyword.ABSTRACT,
+            Keyword.CLASS,
+            Keyword.CONST,
+            Keyword.EXPORT,
+            Keyword.FINAL,
+            Keyword.IMPORT,
+            Keyword.PART,
+            Keyword.TYPEDEF,
+            Keyword.VAR]);
   }
 
   test_partial_class() {
@@ -151,16 +261,16 @@
     expect(computeFast(), isTrue);
     assertSuggestKeywords(
         [
-            'abstract',
-            'class',
-            'const',
-            'export',
-            'final',
-            'import',
-            'library',
-            'part',
-            'typedef',
-            'var']);
+            Keyword.ABSTRACT,
+            Keyword.CLASS,
+            Keyword.CONST,
+            Keyword.EXPORT,
+            Keyword.FINAL,
+            Keyword.IMPORT,
+            Keyword.LIBRARY,
+            Keyword.PART,
+            Keyword.TYPEDEF,
+            Keyword.VAR]);
   }
 
   test_partial_class2() {
@@ -168,14 +278,27 @@
     expect(computeFast(), isTrue);
     assertSuggestKeywords(
         [
-            'abstract',
-            'class',
-            'const',
-            'export',
-            'final',
-            'import',
-            'part',
-            'typedef',
-            'var']);
+            Keyword.ABSTRACT,
+            Keyword.CLASS,
+            Keyword.CONST,
+            Keyword.EXPORT,
+            Keyword.FINAL,
+            Keyword.IMPORT,
+            Keyword.PART,
+            Keyword.TYPEDEF,
+            Keyword.VAR]);
+  }
+
+  void _appendKeywords(StringBuffer msg, Iterable<Keyword> keywords) {
+    List<Keyword> sorted = keywords.toList();
+    sorted.sort((k1, k2) => k1.name.compareTo(k2.name));
+    sorted.forEach((k) => msg.writeln('  Keyword.${k.name},'));
+  }
+
+  bool _equalSets(Iterable<Keyword> iter1, Iterable<Keyword> iter2) {
+    if (iter1.length != iter2.length) return false;
+    if (iter1.any((k) => !iter2.contains(k))) return false;
+    if (iter2.any((k) => !iter1.contains(k))) return false;
+    return true;
   }
 }
diff --git a/pkg/analysis_server/test/services/completion/local_computer_test.dart b/pkg/analysis_server/test/services/completion/local_computer_test.dart
index a3bc536..cdd776f 100644
--- a/pkg/analysis_server/test/services/completion/local_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/local_computer_test.dart
@@ -5,7 +5,7 @@
 library test.services.completion.dart.local;
 
 import 'package:analysis_server/src/services/completion/local_computer.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'completion_test_util.dart';
diff --git a/pkg/analysis_server/test/services/completion/test_all.dart b/pkg/analysis_server/test/services/completion/test_all.dart
index 1ecac44..1aeba0d 100644
--- a/pkg/analysis_server/test/services/completion/test_all.dart
+++ b/pkg/analysis_server/test/services/completion/test_all.dart
@@ -8,7 +8,7 @@
 
 import 'completion_computer_test.dart' as completion_computer_test;
 import 'completion_manager_test.dart' as completion_manager_test;
-import 'imported_type_computer_test.dart' as importedType_test;
+import 'imported_computer_test.dart' as imported_test;
 import 'invocation_computer_test.dart' as invocation_test;
 import 'keyword_computer_test.dart' as keyword_test;
 import 'local_computer_test.dart' as local_test;
@@ -19,7 +19,7 @@
   group('completion', () {
     completion_computer_test.main();
     completion_manager_test.main();
-    importedType_test.main();
+    imported_test.main();
     keyword_test.main();
     invocation_test.main();
     local_test.main();
diff --git a/pkg/analysis_server/test/services/correction/assist_test.dart b/pkg/analysis_server/test/services/correction/assist_test.dart
index bde3c69..3648e73 100644
--- a/pkg/analysis_server/test/services/correction/assist_test.dart
+++ b/pkg/analysis_server/test/services/correction/assist_test.dart
@@ -9,10 +9,11 @@
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/local_memory_index.dart';
 import 'package:analysis_server/src/services/search/search_engine_internal.dart';
-import 'package:analysis_testing/abstract_single_unit.dart';
-import 'package:analysis_testing/reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
+import '../../abstract_single_unit.dart';
+import '../../reflective_tests.dart';
+
 
 main() {
   groupSep = ' | ';
@@ -1713,6 +1714,15 @@
     assertNoAssistAt('? 111', AssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE);
   }
 
+  void test_replaceConditionalWithIfElse_wrong_notConditional() {
+    _indexTestUnit('''
+main() {
+  var v = 42;
+}
+''');
+    assertNoAssistAt('v = 42', AssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE);
+  }
+
   void test_replaceIfElseWithConditional_OK_assignment() {
     _indexTestUnit('''
 main() {
diff --git a/pkg/analysis_server/test/services/correction/change_test.dart b/pkg/analysis_server/test/services/correction/change_test.dart
index 3a1ad00..bf5d2b8 100644
--- a/pkg/analysis_server/test/services/correction/change_test.dart
+++ b/pkg/analysis_server/test/services/correction/change_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:analysis_server/src/constants.dart';
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:unittest/unittest.dart';
 
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index 4c1962f..fa6530d 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -9,15 +9,16 @@
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/local_memory_index.dart';
 import 'package:analysis_server/src/services/search/search_engine_internal.dart';
-import 'package:analysis_testing/abstract_context.dart';
-import 'package:analysis_testing/abstract_single_unit.dart';
-import 'package:analysis_testing/reflective_tests.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/source/package_map_resolver.dart';
 import 'package:analyzer/src/generated/error.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:unittest/unittest.dart';
 
+import '../../abstract_context.dart';
+import '../../abstract_single_unit.dart';
+import '../../reflective_tests.dart';
+
 
 main() {
   groupSep = ' | ';
@@ -1023,7 +1024,6 @@
   }
 
   void test_importLibrarySdk_withTopLevelVariable() {
-    _ensureSdkMathLibraryResolved();
     _indexTestUnit('''
 main() {
   print(PI);
@@ -1040,7 +1040,6 @@
   }
 
   void test_importLibrarySdk_withType_invocationTarget() {
-    _ensureSdkAsyncLibraryResolved();
     _indexTestUnit('''
 main() {
   Future.wait(null);
@@ -1056,7 +1055,6 @@
   }
 
   void test_importLibrarySdk_withType_typeAnnotation() {
-    _ensureSdkAsyncLibraryResolved();
     _indexTestUnit('''
 main() {
   Future f = null;
@@ -1072,7 +1070,6 @@
   }
 
   void test_importLibrarySdk_withType_typeAnnotation_PrefixedIdentifier() {
-    _ensureSdkAsyncLibraryResolved();
     _indexTestUnit('''
 main() {
   Future.wait;
@@ -1812,22 +1809,6 @@
     }
   }
 
-  /**
-   * We search for elements only already resolved lbiraries, and we use
-   * `dart:async` elements in tests.
-   */
-  void _ensureSdkAsyncLibraryResolved() {
-    resolveLibraryUnit(addSource('/other.dart', 'import "dart:async";'));
-  }
-
-  /**
-   * We search for elements only already resolved lbiraries, and we use
-   * `dart:async` elements in tests.
-   */
-  void _ensureSdkMathLibraryResolved() {
-    resolveLibraryUnit(addSource('/other.dart', 'import "dart:math";'));
-  }
-
   AnalysisError _findErrorToFix() {
     List<AnalysisError> errors = context.computeErrors(testSource);
     expect(
diff --git a/pkg/analysis_server/test/services/correction/levenshtein_test.dart b/pkg/analysis_server/test/services/correction/levenshtein_test.dart
index ea3830c..f204d3b 100644
--- a/pkg/analysis_server/test/services/correction/levenshtein_test.dart
+++ b/pkg/analysis_server/test/services/correction/levenshtein_test.dart
@@ -5,7 +5,7 @@
 library test.services.correction.levenshtein;
 
 import 'package:analysis_server/src/services/correction/levenshtein.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 
diff --git a/pkg/analysis_server/test/services/correction/name_suggestion_test.dart b/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
index 0f5b831..9ef37c3 100644
--- a/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
+++ b/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
@@ -5,8 +5,8 @@
 library test.services.correction.name_suggestion;
 
 import 'package:analysis_server/src/services/correction/name_suggestion.dart';
-import 'package:analysis_testing/abstract_single_unit.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../abstract_single_unit.dart';
+import '../../reflective_tests.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:unittest/unittest.dart';
diff --git a/pkg/analysis_server/test/services/correction/source_range_test.dart b/pkg/analysis_server/test/services/correction/source_range_test.dart
index c700a0d..f52da77 100644
--- a/pkg/analysis_server/test/services/correction/source_range_test.dart
+++ b/pkg/analysis_server/test/services/correction/source_range_test.dart
@@ -5,8 +5,8 @@
 library test.services.correction.source_range;
 
 import 'package:analysis_server/src/services/correction/source_range.dart';
-import 'package:analysis_testing/abstract_single_unit.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../abstract_single_unit.dart';
+import '../../reflective_tests.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/error.dart';
diff --git a/pkg/analysis_server/test/services/correction/status_test.dart b/pkg/analysis_server/test/services/correction/status_test.dart
index 88f1da3..4f43a5a 100644
--- a/pkg/analysis_server/test/services/correction/status_test.dart
+++ b/pkg/analysis_server/test/services/correction/status_test.dart
@@ -7,8 +7,8 @@
 import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analysis_server/src/services/correction/source_range.dart';
-import 'package:analysis_testing/abstract_single_unit.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../abstract_single_unit.dart';
+import '../../reflective_tests.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/source.dart';
diff --git a/pkg/analysis_server/test/services/correction/strings_test.dart b/pkg/analysis_server/test/services/correction/strings_test.dart
index a135ac0..b3531c8 100644
--- a/pkg/analysis_server/test/services/correction/strings_test.dart
+++ b/pkg/analysis_server/test/services/correction/strings_test.dart
@@ -5,7 +5,7 @@
 library test.services.correction.strings;
 
 import 'package:analysis_server/src/services/correction/strings.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart' hide isEmpty;
 
 
diff --git a/pkg/analysis_server/test/services/index/dart_index_contributor_test.dart b/pkg/analysis_server/test/services/index/dart_index_contributor_test.dart
index bdc0ccf..845681f 100644
--- a/pkg/analysis_server/test/services/index/dart_index_contributor_test.dart
+++ b/pkg/analysis_server/test/services/index/dart_index_contributor_test.dart
@@ -7,8 +7,8 @@
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/index_store.dart';
 import 'package:analysis_server/src/services/index/index_contributor.dart';
-import 'package:analysis_testing/abstract_single_unit.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../abstract_single_unit.dart';
+import '../../reflective_tests.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/source.dart';
diff --git a/pkg/analysis_server/test/services/index/local_index_test.dart b/pkg/analysis_server/test/services/index/local_index_test.dart
index 24e108f..b6adb85 100644
--- a/pkg/analysis_server/test/services/index/local_index_test.dart
+++ b/pkg/analysis_server/test/services/index/local_index_test.dart
@@ -9,8 +9,8 @@
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/local_memory_index.dart';
 import 'package:analysis_server/src/services/index/local_index.dart';
-import 'package:analysis_testing/abstract_context.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../abstract_context.dart';
+import '../../reflective_tests.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/html.dart';
 import 'package:analyzer/src/generated/source_io.dart';
diff --git a/pkg/analysis_server/test/services/index/store/codec_test.dart b/pkg/analysis_server/test/services/index/store/codec_test.dart
index 80a8ca5..dd445a0 100644
--- a/pkg/analysis_server/test/services/index/store/codec_test.dart
+++ b/pkg/analysis_server/test/services/index/store/codec_test.dart
@@ -6,9 +6,9 @@
 
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/store/codec.dart';
-import 'package:analysis_testing/abstract_single_unit.dart';
-import 'package:analysis_testing/mocks.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../../abstract_single_unit.dart';
+import '../../../mocks.dart';
+import '../../../reflective_tests.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:unittest/unittest.dart';
diff --git a/pkg/analysis_server/test/services/index/store/collection_test.dart b/pkg/analysis_server/test/services/index/store/collection_test.dart
index 5b4ce82..9604864 100644
--- a/pkg/analysis_server/test/services/index/store/collection_test.dart
+++ b/pkg/analysis_server/test/services/index/store/collection_test.dart
@@ -5,7 +5,7 @@
 library test.services.src.index.store.collection;
 
 import 'package:analysis_server/src/services/index/store/collection.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 
diff --git a/pkg/analysis_server/test/services/index/store/split_store_test.dart b/pkg/analysis_server/test/services/index/store/split_store_test.dart
index f44bacb..452fae9 100644
--- a/pkg/analysis_server/test/services/index/store/split_store_test.dart
+++ b/pkg/analysis_server/test/services/index/store/split_store_test.dart
@@ -10,8 +10,8 @@
 import 'package:analysis_server/src/services/index/store/codec.dart';
 import 'package:analysis_server/src/services/index/store/memory_node_manager.dart';
 import 'package:analysis_server/src/services/index/store/split_store.dart';
-import 'package:analysis_testing/mocks.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../../mocks.dart';
+import '../../../reflective_tests.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
diff --git a/pkg/analysis_server/test/services/index/store/temporary_folder_file_manager_test.dart b/pkg/analysis_server/test/services/index/store/temporary_folder_file_manager_test.dart
index ea91e33..dbecbe1 100644
--- a/pkg/analysis_server/test/services/index/store/temporary_folder_file_manager_test.dart
+++ b/pkg/analysis_server/test/services/index/store/temporary_folder_file_manager_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import 'package:analysis_server/src/services/index/store/temporary_folder_file_manager.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../../reflective_tests.dart';
 import 'package:path/path.dart';
 import 'package:unittest/unittest.dart';
 
diff --git a/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart b/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
index a0416f9..7753e34 100644
--- a/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
+++ b/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
@@ -12,7 +12,7 @@
 import 'package:analysis_server/src/services/index/local_memory_index.dart';
 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
 import 'package:analysis_server/src/services/search/search_engine_internal.dart';
-import 'package:analysis_testing/abstract_single_unit.dart';
+import '../../abstract_single_unit.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:unittest/unittest.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
index 0859d04..baaeba55 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
@@ -9,7 +9,7 @@
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/services/refactoring/extract_local.dart';
 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'abstract_refactoring.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
index 39d3855..b4adb6c 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
@@ -9,7 +9,7 @@
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/services/refactoring/extract_method.dart';
 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'abstract_refactoring.dart';
@@ -376,7 +376,7 @@
     // update parameters
     return refactoring.checkInitialConditions().then((_) {
       {
-        var parameters = refactoring.parameters.toList();
+        var parameters = _getParametersCopy();
         expect(parameters, hasLength(2));
         parameters[0].name = 'dup';
         parameters[1].name = 'dup';
@@ -400,7 +400,7 @@
     // update parameters
     return refactoring.checkInitialConditions().then((_) {
       {
-        var parameters = refactoring.parameters.toList();
+        var parameters = _getParametersCopy();
         expect(parameters, hasLength(2));
         parameters[0].name = 'a';
         refactoring.parameters = parameters;
@@ -1563,7 +1563,7 @@
     // apply refactoring
     return refactoring.checkInitialConditions().then((_) {
       {
-        var parameters = refactoring.parameters.toList();
+        var parameters = _getParametersCopy();
         expect(parameters, hasLength(2));
         expect(parameters[0].name, 'v1');
         expect(parameters[1].name, 'v2');
@@ -1602,7 +1602,7 @@
     // apply refactoring
     return refactoring.checkInitialConditions().then((_) {
       {
-        var parameters = refactoring.parameters.toList();
+        var parameters = _getParametersCopy();
         expect(parameters, hasLength(2));
         expect(parameters[0].name, 'v1');
         expect(parameters[1].name, 'v2');
@@ -1663,7 +1663,7 @@
     // apply refactoring
     return refactoring.checkInitialConditions().then((_) {
       {
-        var parameters = refactoring.parameters.toList();
+        var parameters = _getParametersCopy();
         expect(parameters, hasLength(3));
         expect(parameters[0].name, 'v1');
         expect(parameters[1].name, 'v2');
@@ -2303,4 +2303,15 @@
     int length = selectionSearch.length;
     _createRefactoring(offset, length);
   }
+
+  /**
+   * Returns a deep copy of [refactoring] parameters.
+   * There was a bug masked by updating parameter instances shared between the
+   * refactoring and the test.
+   */
+  List<RefactoringMethodParameter> _getParametersCopy() {
+    return refactoring.parameters.map((p) {
+      return new RefactoringMethodParameter(p.kind, p.type, p.name, id: p.id);
+    }).toList();
+  }
 }
diff --git a/pkg/analysis_server/test/services/refactoring/inline_local_test.dart b/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
index fad3164..336bd66 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
@@ -5,13 +5,12 @@
 library test.services.refactoring.inline_local;
 
 import 'package:analysis_server/src/protocol.dart' hide Element;
+import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/refactoring/inline_local.dart';
 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_testing/reflective_tests.dart';
-import 'package:analyzer/src/generated/ast.dart';
-import 'package:analyzer/src/generated/element.dart';
 import 'package:unittest/unittest.dart';
 
+import '../../reflective_tests.dart';
 import 'abstract_refactoring.dart';
 
 
@@ -195,10 +194,33 @@
     expect(refactoring.refactoringName, 'Inline Local Variable');
     // check initial conditions and access
     return refactoring.checkInitialConditions().then((_) {
+      expect(refactoring.variableName, 'test');
       expect(refactoring.referenceCount, 2);
     });
   }
 
+  test_bad_selectionMethod() {
+    indexTestUnit(r'''
+main() {
+}
+''');
+    _createRefactoring('main() {');
+    return refactoring.checkInitialConditions().then((status) {
+      _assert_fatalError_selection(status);
+    });
+  }
+
+  test_bad_selectionParameter() {
+    indexTestUnit(r'''
+main(int test) {
+}
+''');
+    _createRefactoring('test) {');
+    return refactoring.checkInitialConditions().then((status) {
+      _assert_fatalError_selection(status);
+    });
+  }
+
   test_bad_selectionVariable_hasAssignments_1() {
     indexTestUnit(r'''
 main() {
@@ -256,9 +278,18 @@
     });
   }
 
+  void _assert_fatalError_selection(RefactoringStatus status) {
+    expect(refactoring.variableName, isNull);
+    expect(refactoring.referenceCount, 0);
+    assertRefactoringStatus(
+        status,
+        RefactoringProblemSeverity.FATAL,
+        expectedMessage: 'Local variable declaration or reference must be '
+            'selected to activate this refactoring.');
+  }
+
   void _createRefactoring(String search) {
-    SimpleIdentifier identifier = findIdentifier(search);
-    LocalVariableElement element = identifier.bestElement;
-    refactoring = new InlineLocalRefactoring(searchEngine, testUnit, element);
+    int offset = findOffset(search);
+    refactoring = new InlineLocalRefactoring(searchEngine, testUnit, offset);
   }
 }
diff --git a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
index c892401..c41a545 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
@@ -9,7 +9,7 @@
 import 'package:analysis_server/src/protocol.dart' hide Element;
 import 'package:analysis_server/src/services/refactoring/inline_method.dart';
 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:unittest/unittest.dart';
 
@@ -37,10 +37,13 @@
   var res = test(1, 2);
 }
 ''');
-    _createRefactoring('test(a, b)');
+    _createRefactoring('test(1, 2)');
     // validate state
     return refactoring.checkInitialConditions().then((_) {
       expect(refactoring.refactoringName, 'Inline Function');
+      expect(refactoring.className, isNull);
+      expect(refactoring.methodName, 'test');
+      expect(refactoring.isDeclaration, isFalse);
     });
   }
 
@@ -59,6 +62,9 @@
     // validate state
     return refactoring.checkInitialConditions().then((_) {
       expect(refactoring.refactoringName, 'Inline Method');
+      expect(refactoring.className, 'A');
+      expect(refactoring.methodName, 'test');
+      expect(refactoring.isDeclaration, isTrue);
     });
   }
 
diff --git a/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart b/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
index 472947d..e4e2f7b 100644
--- a/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
@@ -8,7 +8,7 @@
     RefactoringProblemSeverity;
 import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'abstract_refactoring.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
index a7f2c3c..d45a37d 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
@@ -5,7 +5,7 @@
 library test.services.refactoring.rename_class_member;
 
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'abstract_rename.dart';
@@ -356,6 +356,7 @@
     // configure refactoring
     createRenameRefactoringAtString('test; // marker');
     expect(refactoring.refactoringName, 'Rename Field');
+    expect(refactoring.elementKindName, 'field');
     expect(refactoring.oldName, 'test');
     refactoring.newName = 'newName';
     // validate change
@@ -499,6 +500,7 @@
     // configure refactoring
     createRenameRefactoringAtString('test() {} // marker');
     expect(refactoring.refactoringName, 'Rename Method');
+    expect(refactoring.elementKindName, 'method');
     expect(refactoring.oldName, 'test');
     refactoring.newName = 'newName';
     // validate change
@@ -720,6 +722,7 @@
     // configure refactoring
     createRenameRefactoringAtString('Test> {');
     expect(refactoring.refactoringName, 'Rename Type Parameter');
+    expect(refactoring.elementKindName, 'type parameter');
     expect(refactoring.oldName, 'Test');
     refactoring.newName = 'NewName';
     // validate change
diff --git a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
index 730b4c4..a6d12e1 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
@@ -5,7 +5,7 @@
 library test.services.refactoring.rename_constructor;
 
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:unittest/unittest.dart';
@@ -103,6 +103,7 @@
     // configure refactoring
     _createConstructorDeclarationRefactoring('() {} // marker');
     expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
     // validate change
     refactoring.newName = 'newName';
@@ -136,6 +137,7 @@
     // configure refactoring
     _createConstructorDeclarationRefactoring('test() {} // marker');
     expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, 'test');
     // validate change
     refactoring.newName = 'newName';
@@ -169,6 +171,7 @@
     // configure refactoring
     _createConstructorDeclarationRefactoring('test() {} // marker');
     expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, 'test');
     // validate change
     refactoring.newName = '';
diff --git a/pkg/analysis_server/test/services/refactoring/rename_import_test.dart b/pkg/analysis_server/test/services/refactoring/rename_import_test.dart
index 637be24..6c31e3d 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_import_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_import_test.dart
@@ -5,7 +5,7 @@
 library test.services.refactoring.rename_import;
 
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:unittest/unittest.dart';
 
diff --git a/pkg/analysis_server/test/services/refactoring/rename_library_test.dart b/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
index 6a6537e..1d49989 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
@@ -5,7 +5,7 @@
 library test.services.refactoring.rename_library;
 
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:unittest/unittest.dart';
 
@@ -60,6 +60,7 @@
     // configure refactoring
     _createRenameRefactoring();
     expect(refactoring.refactoringName, 'Rename Library');
+    expect(refactoring.elementKindName, 'library');
     refactoring.newName = 'the.new.name';
     // validate change
     return assertSuccessfulRefactoring('''
diff --git a/pkg/analysis_server/test/services/refactoring/rename_local_test.dart b/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
index 32d2e70..50724d1 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
@@ -5,7 +5,7 @@
 library test.services.refactoring.rename_local;
 
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'abstract_rename.dart';
@@ -284,6 +284,7 @@
     // configure refactoring
     createRenameRefactoringAtString('test() => 0');
     expect(refactoring.refactoringName, 'Rename Local Function');
+    expect(refactoring.elementKindName, 'function');
     refactoring.newName = 'newName';
     // validate change
     return assertSuccessfulRefactoring('''
@@ -347,6 +348,7 @@
     // configure refactoring
     createRenameRefactoringAtString('test = 0');
     expect(refactoring.refactoringName, 'Rename Local Variable');
+    expect(refactoring.elementKindName, 'local variable');
     refactoring.newName = 'newName';
     // validate change
     return assertSuccessfulRefactoring('''
@@ -413,6 +415,7 @@
     // configure refactoring
     createRenameRefactoringAtString('test}) {');
     expect(refactoring.refactoringName, 'Rename Parameter');
+    expect(refactoring.elementKindName, 'parameter');
     refactoring.newName = 'newName';
     // validate change
     return assertSuccessfulRefactoring('''
diff --git a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
index 019e9ef..7e4ec51 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
@@ -5,7 +5,7 @@
 library test.services.refactoring.rename_unit_member;
 
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../reflective_tests.dart';
 import 'package:unittest/unittest.dart';
 
 import 'abstract_rename.dart';
@@ -343,6 +343,7 @@
     // configure refactoring
     createRenameRefactoringAtString('Test implements');
     expect(refactoring.refactoringName, 'Rename Class');
+    expect(refactoring.elementKindName, 'class');
     expect(refactoring.oldName, 'Test');
     refactoring.newName = 'NewName';
     // validate change
@@ -393,6 +394,7 @@
     // configure refactoring
     createRenameRefactoringAtString('Test =');
     expect(refactoring.refactoringName, 'Rename Class');
+    expect(refactoring.elementKindName, 'class');
     expect(refactoring.oldName, 'Test');
     refactoring.newName = 'NewName';
     // validate change
@@ -417,6 +419,7 @@
     // configure refactoring
     createRenameRefactoringAtString('test() {}');
     expect(refactoring.refactoringName, 'Rename Top-Level Function');
+    expect(refactoring.elementKindName, 'function');
     expect(refactoring.oldName, 'test');
     refactoring.newName = 'newName';
     // validate change
@@ -506,6 +509,7 @@
     // configure refactoring
     createRenameRefactoringAtString(search);
     expect(refactoring.refactoringName, 'Rename Top-Level Variable');
+    expect(refactoring.elementKindName, 'top level variable');
     expect(refactoring.oldName, 'test');
     refactoring.newName = 'newName';
     // validate change
diff --git a/pkg/analysis_server/test/services/search/hierarchy_test.dart b/pkg/analysis_server/test/services/search/hierarchy_test.dart
index aa5ccfe..65820bf 100644
--- a/pkg/analysis_server/test/services/search/hierarchy_test.dart
+++ b/pkg/analysis_server/test/services/search/hierarchy_test.dart
@@ -10,8 +10,8 @@
 import 'package:analysis_server/src/services/index/local_memory_index.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analysis_server/src/services/search/search_engine_internal.dart';
-import 'package:analysis_testing/abstract_single_unit.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../abstract_single_unit.dart';
+import '../../reflective_tests.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:unittest/unittest.dart';
 
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index e4adc70..bfc91c6 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -10,9 +10,9 @@
 import 'package:analysis_server/src/services/index/local_memory_index.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analysis_server/src/services/search/search_engine_internal.dart';
-import 'package:analysis_testing/abstract_single_unit.dart';
-import 'package:analysis_testing/mocks.dart';
-import 'package:analysis_testing/reflective_tests.dart';
+import '../../abstract_single_unit.dart';
+import '../../mocks.dart';
+import '../../reflective_tests.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:typed_mock/typed_mock.dart';
diff --git a/pkg/analysis_server/test/test_all.dart b/pkg/analysis_server/test/test_all.dart
index 3ef7993..e3a637a 100644
--- a/pkg/analysis_server/test/test_all.dart
+++ b/pkg/analysis_server/test/test_all.dart
@@ -12,15 +12,15 @@
 import 'analysis_notification_outline_test.dart' as analysis_notification_outline_test;
 import 'analysis_notification_overrides_test.dart' as analysis_notification_overrides_test;
 import 'analysis_server_test.dart' as analysis_server_test;
-import 'channel_test.dart' as channel_test;
+import 'channel/test_all.dart' as channel_test;
 import 'computer/test_all.dart' as computer_test_all;
 import 'context_manager_test.dart' as context_manager_test;
 import 'domain_analysis_test.dart' as domain_analysis_test;
-import 'domain_completion_test.dart' as completion_test;
+import 'domain_completion_test.dart' as domain_completion_test;
+import 'domain_execution_test.dart' as domain_execution_test;
 import 'domain_server_test.dart' as domain_server_test;
 import 'edit/test_all.dart' as edit_all;
 import 'operation/test_all.dart' as operation_test_all;
-import 'package_map_provider_test.dart' as package_map_provider_test;
 import 'protocol_test.dart' as protocol_test;
 import 'search/test_all.dart' as search_all;
 import 'services/test_all.dart' as services_all;
@@ -41,14 +41,14 @@
     analysis_notification_overrides_test.main();
     analysis_server_test.main();
     channel_test.main();
-    completion_test.main();
     computer_test_all.main();
     context_manager_test.main();
     domain_analysis_test.main();
+    domain_completion_test.main();
+    domain_execution_test.main();
     domain_server_test.main();
     edit_all.main();
     operation_test_all.main();
-    package_map_provider_test.main();
     protocol_test.main();
     search_all.main();
     services_all.main();
diff --git a/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart b/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
index e8bccf0..43fc138 100644
--- a/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
+++ b/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
@@ -291,7 +291,14 @@
         toHtmlVisitor.showType(null, impliedType.type);
       }
     }));
-    writeln('class $className implements HasToJson {');
+    write('class $className');
+    if (impliedType.kind == 'refactoringFeedback') {
+      write(' extends RefactoringFeedback');
+    }
+    if (impliedType.kind == 'refactoringOptions') {
+      write(' extends RefactoringOptions');
+    }
+    writeln(' implements HasToJson {');
     indent(() {
       if (emitSpecialStaticMembers(className)) {
         writeln();
@@ -964,6 +971,26 @@
       ImpliedType impliedType) {
     String humanReadableNameString =
         literalString(impliedType.humanReadableName);
+    if (className == 'RefactoringFeedback') {
+      writeln('factory RefactoringFeedback.fromJson(JsonDecoder jsonDecoder, '
+          'String jsonPath, Object json, Map responseJson) {');
+      indent(() {
+        writeln('return _refactoringFeedbackFromJson(jsonDecoder, jsonPath, '
+            'json, responseJson);');
+      });
+      writeln('}');
+      return;
+    }
+    if (className == 'RefactoringOptions') {
+      writeln('factory RefactoringOptions.fromJson(JsonDecoder jsonDecoder, '
+          'String jsonPath, Object json, RefactoringKind kind) {');
+      indent(() {
+        writeln('return _refactoringOptionsFromJson(jsonDecoder, jsonPath, '
+            'json, kind);');
+      });
+      writeln('}');
+      return;
+    }
     writeln(
         'factory $className.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {');
     indent(() {
@@ -1000,9 +1027,9 @@
           writeln('$fieldDartType ${field.name};');
           writeln('if (json.containsKey($fieldNameString)) {');
           indent(() {
-            String toJson =
+            String fromJson =
                 fromJsonCode(fieldType).asSnippet(jsonPath, fieldAccessor);
-            writeln('${field.name} = $toJson;');
+            writeln('${field.name} = $fromJson;');
           });
           write('}');
           if (!field.optional) {
@@ -1074,8 +1101,16 @@
         TypeDecl referencedType = referencedDefinition.type;
         if (referencedType is TypeObject || referencedType is TypeEnum) {
           return new FromJsonSnippet(
-              (String jsonPath, String json) =>
-                  'new ${dartType(type)}.fromJson(jsonDecoder, $jsonPath, $json)');
+              (String jsonPath, String json) {
+                String typeName = dartType(type);
+                if (typeName == 'RefactoringFeedback') {
+                  return 'new $typeName.fromJson(jsonDecoder, $jsonPath, $json, json)';
+                } else if (typeName == 'RefactoringOptions') {
+                  return 'new $typeName.fromJson(jsonDecoder, $jsonPath, $json, kind)';
+                } else {
+                  return 'new $typeName.fromJson(jsonDecoder, $jsonPath, $json)';
+                }
+              });
         } else {
           return fromJsonCode(referencedType);
         }
@@ -1183,23 +1218,16 @@
         inputType = 'Response';
         inputName = 'response';
         fieldName = '_result';
-        makeDecoder = 'new ResponseDecoder()';
+        makeDecoder = 'new ResponseDecoder(response)';
         constructorName = 'fromResponse';
         break;
       case 'notificationParams':
         inputType = 'Notification';
         inputName = 'notification';
         fieldName = '_params';
-        makeDecoder = 'new ResponseDecoder()';
+        makeDecoder = 'new ResponseDecoder(null)';
         constructorName = 'fromNotification';
         break;
-      case 'refactoringFeedback':
-        inputType = 'EditGetRefactoringResult';
-        inputName = 'refactoringResult';
-        fieldName = 'feedback';
-        makeDecoder = 'new ResponseDecoder()';
-        constructorName = 'fromRefactoringResult';
-        break;
       case 'refactoringOptions':
         inputType = 'EditGetRefactoringParams';
         inputName = 'refactoringParams';
@@ -1217,8 +1245,15 @@
     indent(() {
       String fieldNameString =
           literalString(fieldName.replaceFirst(new RegExp('^_'), ''));
-      writeln('return new $className.fromJson(');
-      writeln('    $makeDecoder, $fieldNameString, $inputName.$fieldName);');
+      if (className == 'EditGetRefactoringParams') {
+        writeln('var params = new $className.fromJson(');
+        writeln('    $makeDecoder, $fieldNameString, $inputName.$fieldName);');
+        writeln('REQUEST_ID_REFACTORING_KINDS[request.id] = params.kind;');
+        writeln('return params;');
+      } else {
+        writeln('return new $className.fromJson(');
+        writeln('    $makeDecoder, $fieldNameString, $inputName.$fieldName);');
+      }
     });
     writeln('}');
     return true;
diff --git a/pkg/analysis_server/tool/spec/codegen_java.dart b/pkg/analysis_server/tool/spec/codegen_java.dart
index 97f4df0..823207f 100644
--- a/pkg/analysis_server/tool/spec/codegen_java.dart
+++ b/pkg/analysis_server/tool/spec/codegen_java.dart
@@ -31,10 +31,9 @@
    * Type references in the spec that are named something else in Java.
    */
   static const Map<String, String> _typeRenames = const {
-    // TODO (jwren) in some situations we want to use Boolean/Integer while
-    // other situations we want to use boolean/int...
-    'bool': 'Boolean',
-    'int': 'Integer',
+    'bool': 'boolean',
+    'int': 'int',
+    'ExecutionContextId': 'String',
     'FilePath': 'String',
     'DebugContextId': 'String',
     'object': 'Object',
@@ -137,17 +136,30 @@
   }
 
   /**
+   * Return a Java type for the given [TypeObjectField].
+   */
+  String javaFieldType(TypeObjectField field) {
+    return javaType(field.type, field.optional);
+  }
+
+  /**
    * Convert the given [TypeDecl] to a Java type.
    */
-  String javaType(TypeDecl type) {
+  String javaType(TypeDecl type, [bool optional = false]) {
     if (type is TypeReference) {
       TypeReference resolvedType = resolveTypeReferenceChain(type);
       String typeName = resolvedType.typeName;
       if (_typeRenames.containsKey(typeName)) {
-        return _typeRenames[typeName];
-      } else {
-        return typeName;
+        typeName = _typeRenames[typeName];
+        if (optional) {
+          if (typeName == 'boolean') {
+            typeName = 'Boolean';
+          } else if (typeName == 'int') {
+            typeName = 'Integer';
+          }
+        }
       }
+      return typeName;
     } else if (type is TypeList) {
       if (isPrimitive(type.itemType)) {
         return '${javaType(type.itemType)}[]';
@@ -169,7 +181,7 @@
   bool isPrimitive(TypeDecl type) {
     if (type is TypeReference) {
       String typeStr = javaType(type);
-      return typeStr == 'Integer' || typeStr == 'boolean';
+      return typeStr == 'int' || typeStr == 'boolean';
     }
     return false;
   }
@@ -187,7 +199,7 @@
     }
     return false;
   }
-  
+
   /**
    * Return true iff the passed [TypeDecl] will be represented as Object in Java.
    */
diff --git a/pkg/analysis_server/tool/spec/codegen_java_types.dart b/pkg/analysis_server/tool/spec/codegen_java_types.dart
index 5c90cea..99363e7 100644
--- a/pkg/analysis_server/tool/spec/codegen_java_types.dart
+++ b/pkg/analysis_server/tool/spec/codegen_java_types.dart
@@ -7,10 +7,13 @@
  */
 library java.generator.types;
 
+import 'package:html5lib/dom.dart' as dom;
+
 import 'api.dart';
 import 'codegen_java.dart';
 import 'codegen_tools.dart';
 import 'from_html.dart';
+import 'implied_types.dart';
 
 /**
  * Type references in the spec that are named something else in Java.
@@ -21,7 +24,7 @@
 
 /**
  * A map between the field names and values for the Element object such as:
- * 
+ *
  * private static final int ABSTRACT = 0x01;
  */
 const Map<String, String> _extraFieldsOnElement = const {
@@ -35,7 +38,7 @@
 
 /**
  * A map between the method names and field names to generate additional methods on the Element object:
- * 
+ *
  * public boolean isFinal() {
  *   return (flags & FINAL) != 0;
  * }
@@ -50,27 +53,27 @@
 };
 
 class CodegenJavaType extends CodegenJavaVisitor {
+  final String className;
+  final String superclassName;
+  final bool generateGetters;
+  final bool generateSetters;
 
-  String className;
-  TypeDefinition typeDef;
+  CodegenJavaType(Api api, this.className, this.superclassName,
+      this.generateGetters, this.generateSetters)
+      : super(api);
 
-  CodegenJavaType(Api api, String className)
-      : super(api),
-        this.className = className;
-
-  @override
-  void visitTypeDefinition(TypeDefinition typeDef) {
+  void emitType(TypeDecl type, dom.Element html) {
     outputHeader(javaStyle: true);
     writeln('package com.google.dart.server.generated.types;');
     writeln();
-    if (typeDef.type is TypeObject) {
-      _writeTypeObject(typeDef);
-    } else if (typeDef.type is TypeEnum) {
-      _writeTypeEnum(typeDef);
+    if (type is TypeObject) {
+      _writeTypeObject(type, html);
+    } else if (type is TypeEnum) {
+      _writeTypeEnum(type, html);
     }
   }
 
-  void _writeTypeObject(TypeDefinition typeDef) {
+  void _writeTypeObject(TypeDecl type, dom.Element html) {
     writeln('import java.util.Arrays;');
     writeln('import java.util.List;');
     writeln('import java.util.Map;');
@@ -87,12 +90,16 @@
     writeln('import org.apache.commons.lang3.StringUtils;');
     writeln();
     javadocComment(toHtmlVisitor.collectHtml(() {
-      toHtmlVisitor.translateHtml(typeDef.html);
+      toHtmlVisitor.translateHtml(html);
       toHtmlVisitor.br();
       toHtmlVisitor.write('@coverage dart.server.generated.types');
     }));
     writeln('@SuppressWarnings("unused")');
-    makeClass('public class ${className}', () {
+    String header = 'public class ${className}';
+    if (superclassName != null) {
+      header += ' extends $superclassName';
+    }
+    makeClass(header, () {
       //
       // fields
       //
@@ -115,16 +122,21 @@
       //
       // "private static String name;" fields:
       //
-      TypeObject typeObject = typeDef.type as TypeObject;
+      TypeObject typeObject = type as TypeObject;
       List<TypeObjectField> fields = typeObject.fields;
       for (TypeObjectField field in fields) {
-        if (!(className == 'Outline' && javaName(field.name) == 'children')) {
-          privateField(javaName(field.name), () {
+        String type = javaFieldType(field);
+        String name = javaName(field.name);
+        if (!(className == 'Outline' && name == 'children')) {
+          privateField(name, () {
             javadocComment(toHtmlVisitor.collectHtml(() {
               toHtmlVisitor.translateHtml(field.html);
             }));
-            writeln(
-                'private final ${javaType(field.type)} ${javaName(field.name)};');
+            if (generateSetters) {
+              writeln('private $type $name;');
+            } else {
+              writeln('private final $type $name;');
+            }
           });
         }
       }
@@ -151,9 +163,11 @@
           parameters.add('Outline parent');
         }
         for (TypeObjectField field in fields) {
+          String type = javaFieldType(field);
+          String name = javaName(field.name);
           if (!_isTypeFieldInUpdateContentUnionType(className, field.name) &&
-              !(className == 'Outline' && javaName(field.name) == 'children')) {
-            parameters.add('${javaType(field.type)} ${javaName(field.name)}');
+              !(className == 'Outline' && name == 'children')) {
+            parameters.add('$type $name');
           }
         }
         write(parameters.join(', '));
@@ -164,10 +178,10 @@
             writeln('this.parent = parent;');
           }
           for (TypeObjectField field in fields) {
+            String name = javaName(field.name);
             if (!_isTypeFieldInUpdateContentUnionType(className, field.name) &&
-                !(className == 'Outline' && javaName(field.name) == 'children')) {
-              writeln(
-                  'this.${javaName(field.name)} = ${javaName(field.name)};');
+                !(className == 'Outline' && name == 'children')) {
+              writeln('this.$name = $name;');
             } else if (className == 'AddContentOverlay') {
               writeln('this.type = "add";');
             } else if (className == 'ChangeContentOverlay') {
@@ -183,21 +197,42 @@
       //
       // getter methods
       //
-      for (TypeObjectField field in fields) {
-        publicMethod('get${javaName(field.name)}', () {
-          javadocComment(toHtmlVisitor.collectHtml(() {
-            toHtmlVisitor.translateHtml(field.html);
-          }));
-          if (javaType(field.type) == 'Boolean') {
-            writeln(
-                'public ${javaType(field.type)} ${javaName(field.name)}() {');
-          } else {
-            writeln(
-                'public ${javaType(field.type)} get${capitalize(javaName(field.name))}() {');
-          }
-          writeln('  return ${javaName(field.name)};');
-          writeln('}');
-        });
+      if (generateGetters) {
+        for (TypeObjectField field in fields) {
+          String type = javaFieldType(field);
+          String name = javaName(field.name);
+          publicMethod('get$name', () {
+            javadocComment(toHtmlVisitor.collectHtml(() {
+              toHtmlVisitor.translateHtml(field.html);
+            }));
+            if (type == 'boolean') {
+              writeln('public $type $name() {');
+            } else {
+              writeln('public $type get${capitalize(name)}() {');
+            }
+            writeln('  return $name;');
+            writeln('}');
+          });
+        }
+      }
+
+      //
+      // setter methods
+      //
+      if (generateSetters) {
+        for (TypeObjectField field in fields) {
+          String type = javaFieldType(field);
+          String name = javaName(field.name);
+          publicMethod('set$name', () {
+            javadocComment(toHtmlVisitor.collectHtml(() {
+              toHtmlVisitor.translateHtml(field.html);
+            }));
+            String setterName = 'set' + capitalize(name);
+            writeln('public void $setterName($type $name) {');
+            writeln('  this.$name = $name;');
+            writeln('}');
+          });
+        }
       }
 
       //
@@ -212,18 +247,18 @@
               'public static ${className} fromJson(JsonObject jsonObject) {');
           indent(() {
             for (TypeObjectField field in fields) {
-              write('${javaType(field.type)} ${javaName(field.name)} = ');
+              write('${javaFieldType(field)} ${javaName(field.name)} = ');
               if (field.optional) {
                 write(
                     'jsonObject.get("${javaName(field.name)}") == null ? null : ');
               }
               if (isDeclaredInSpec(field.type)) {
-                write('${javaType(field.type)}.fromJson(');
+                write('${javaFieldType(field)}.fromJson(');
                 write(
                     'jsonObject.get("${javaName(field.name)}").getAsJsonObject())');
               } else {
                 if (isList(field.type)) {
-                  if (javaType(field.type).endsWith('<String>')) {
+                  if (javaFieldType(field).endsWith('<String>')) {
                     write(
                         'JsonUtilities.decodeStringList(jsonObject.get("${javaName(field.name)}").${_getAsTypeMethodName(field.type)}())');
                   } else {
@@ -231,9 +266,9 @@
                         '${javaType((field.type as TypeList).itemType)}.fromJsonArray(jsonObject.get("${javaName(field.name)}").${_getAsTypeMethodName(field.type)}())');
                   }
                 } else if (isArray(field.type)) {
-                  if (javaType(field.type).startsWith('Integer')) {
+                  if (javaFieldType(field).startsWith('int')) {
                     write(
-                        'JsonUtilities.decodeIntegerArray(jsonObject.get("${javaName(field.name)}").${_getAsTypeMethodName(field.type)}())');
+                        'JsonUtilities.decodeIntArray(jsonObject.get("${javaName(field.name)}").${_getAsTypeMethodName(field.type)}())');
                   }
                 } else {
                   write(
@@ -288,16 +323,18 @@
 }''');
         });
         publicMethod('getParent', () {
-                  writeln('''public Outline getParent() {
+          writeln('''public Outline getParent() {
   return parent;
 }''');
-                });
+        });
       }
 
       //
       // fromJson(JsonArray) factory constructor
       //
-      if (className != 'Outline') {
+      if (className != 'Outline' &&
+          className != 'RefactoringFeedback' &&
+          className != 'RefactoringOptions') {
         publicMethod('fromJsonArray', () {
           writeln(
               'public static List<${className}> fromJsonArray(JsonArray jsonArray) {');
@@ -365,7 +402,11 @@
               for (TypeObjectField field in fields) {
                 equalsForField.add(_getEqualsLogicForField(field, 'other'));
               }
-              write(equalsForField.join(' && \n'));
+              if (equalsForField.isNotEmpty) {
+                write(equalsForField.join(' && \n'));
+              } else {
+                write('true');
+              }
             });
             writeln(';');
           });
@@ -452,17 +493,34 @@
         _writeExtraContentInElementType();
       }
 
+      //
+      // getBestName()
+      //
+      if (className == 'TypeHierarchyItem') {
+        publicMethod('getBestName', () {
+          writeln('public String getBestName() {');
+          indent(() {
+            writeln('if (displayName == null) {');
+            writeln('  return classElement.getName();');
+            writeln('} else {');
+            writeln('  return displayName;');
+            writeln('}');
+          });
+          writeln('}');
+        });
+      }
+
     });
   }
 
-  void _writeTypeEnum(TypeDefinition typeDef) {
+  void _writeTypeEnum(TypeDecl type, dom.Element html) {
     javadocComment(toHtmlVisitor.collectHtml(() {
-      toHtmlVisitor.translateHtml(typeDef.html);
+      toHtmlVisitor.translateHtml(html);
       toHtmlVisitor.br();
       toHtmlVisitor.write('@coverage dart.server.generated.types');
     }));
     makeClass('public class ${className}', () {
-      TypeEnum typeEnum = typeDef.type as TypeEnum;
+      TypeEnum typeEnum = type as TypeEnum;
       List<TypeEnumValue> values = typeEnum.values;
       //
       // enum fields
@@ -510,7 +568,7 @@
 
   String _getEqualsLogicForField(TypeObjectField field, String other) {
     String name = javaName(field.name);
-    if (isPrimitive(field.type)) {
+    if (isPrimitive(field.type) && !field.optional) {
       return '${other}.${name} == ${name}';
     } else if (isArray(field.type)) {
       return 'Arrays.equals(other.${name}, ${name})';
@@ -532,12 +590,12 @@
   }
 
   String _getAsTypeMethodName(TypeDecl typeDecl) {
-    String name = javaType(typeDecl);
+    String name = javaType(typeDecl, true);
     if (name == 'String') {
       return 'getAsString';
-    } else if (name == 'Boolean') {
+    } else if (name == 'boolean' || name == 'Boolean') {
       return 'getAsBoolean';
-    } else if (name == 'Integer') {
+    } else if (name == 'int' || name == 'Integer') {
       return 'getAsInt';
     } else if (name.startsWith('List')) {
       return 'getAsJsonArray';
@@ -600,24 +658,56 @@
 
 final GeneratedDirectory targetDir = new GeneratedDirectory(pathToGenTypes, () {
   Api api = readApi();
+  Map<String, ImpliedType> impliedTypes = computeImpliedTypes(api);
   Map<String, FileContentsComputer> map =
       new Map<String, FileContentsComputer>();
-  for (String typeNameInSpec in api.types.keys) {
-    TypeDefinition typeDef = api.types[typeNameInSpec];
-    if (typeDef.type is TypeObject || typeDef.type is TypeEnum) {
-      // This is for situations such as 'Override' where the name in the spec
-      // doesn't match the java object that we generate:
-      String typeNameInJava = typeNameInSpec;
-      if (_typeRenames.containsKey(typeNameInSpec)) {
-        typeNameInJava = _typeRenames[typeNameInSpec];
+  for (ImpliedType impliedType in impliedTypes.values) {
+    TypeDecl type = impliedType.type;
+    String typeNameInSpec = capitalize(impliedType.camelName);
+    bool isRefactoringFeedback = impliedType.kind == 'refactoringFeedback';
+    bool isRefactoringOption = impliedType.kind == 'refactoringOptions';
+    if (impliedType.kind == 'typeDefinition' ||
+        isRefactoringFeedback ||
+        isRefactoringOption) {
+      TypeDecl type = impliedType.type;
+      if (type is TypeObject || type is TypeEnum) {
+        // This is for situations such as 'Override' where the name in the spec
+        // doesn't match the java object that we generate:
+        String typeNameInJava = typeNameInSpec;
+        if (_typeRenames.containsKey(typeNameInSpec)) {
+          typeNameInJava = _typeRenames[typeNameInSpec];
+        }
+        map['${typeNameInJava}.java'] = () {
+          String superclassName = null;
+          if (isRefactoringFeedback) {
+            superclassName = 'RefactoringFeedback';
+          }
+          if (isRefactoringOption) {
+            superclassName = 'RefactoringOptions';
+          }
+          // configure accessors
+          bool generateGetters = true;
+          bool generateSetters = false;
+          if (isRefactoringOption ||
+              typeNameInSpec == 'RefactoringMethodParameter') {
+            generateSetters = true;
+          }
+          // create the visitor
+          CodegenJavaType visitor = new CodegenJavaType(
+              api,
+              typeNameInJava,
+              superclassName,
+              generateGetters,
+              generateSetters);
+          return visitor.collectCode(() {
+            dom.Element doc = type.html;
+            if (impliedType.apiNode is TypeDefinition) {
+              doc = (impliedType.apiNode as TypeDefinition).html;
+            }
+            visitor.emitType(type, doc);
+          });
+        };
       }
-      map['${typeNameInJava}.java'] = () {
-        // create the visitor
-        CodegenJavaType visitor = new CodegenJavaType(api, typeNameInJava);
-        return visitor.collectCode(() {
-          visitor.visitTypeDefinition(typeDef);
-        });
-      };
     }
   }
   return map;
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index 1a24960..08cfae0 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -114,7 +114,7 @@
       <li><a href="#domain_completion">Code Completion</a></li>
       <li><a href="#domain_search">Search</a></li>
       <li><a href="#domain_edit">Edit</a></li>
-      <li><a href="#domain_debug">Debugging</a></li>
+      <li><a href="#domain_execution">Execution</a></li>
     </ul>
     <p>
       The specifications of the API’s refer to data structures beyond
@@ -126,15 +126,16 @@
       The command-line arguments that can be passed to the server.
     </p>
     <h4>Options</h4>
+    <blockquote>
     <dl>
       <dt>--no-error-notification</dt>
-      <dd></dd>
-    </dl>
-    <p>
+      <dd>
       Disable notifications about errors (see analysis.error). If this
       flag is not specified then notifications will be sent for all
       errors produced for all files in the actual analysis roots.
-    </p>
+      </dd>
+    </dl>
+    </blockquote>
     <domain name="server">
       <p>
         The server domain contains API’s related to the execution of
@@ -274,6 +275,13 @@
           should use the information provided by the 'analysis.errors'
           notification.
         </p>
+        <p>
+          If a request is made for a file which does not exist, or
+          which is not currently subject to analysis (e.g. because it
+          is not associated with any analysis root specified to
+          analysis.setAnalysisRoots), an error of type
+          <tt>GET_ERRORS_INVALID_FILE</tt> will be generated.
+        </p>
         <params>
           <field name="file">
             <ref>FilePath</ref>
@@ -1158,14 +1166,7 @@
           <field name="fixes">
             <list><ref>AnalysisErrorFixes</ref></list>
             <p>
-              The fixes that are available for each of the analysis
-              errors. There is a one-to-one correspondence between the
-              analysis errors in the request and the lists of changes
-              in the response. In particular, it is always the case
-              that errors.length == fixes.length and that fixes[i] is
-              the list of fixes for the error in errors[i]. The list
-              of changes corresponding to an error can be empty if
-              there are no fixes available for that error.
+              The fixes that are available for the errors at the given offset.
             </p>
           </field>
         </result>
@@ -1208,7 +1209,7 @@
             </p>
           </field>
           <field name="options" optional="true">
-            <ref>object</ref>
+            <ref>RefactoringOptions</ref>
             <p>
               Data used to provide values provided by the user. The
               structure of the data is dependent on the kind of
@@ -1230,7 +1231,7 @@
             </p>
           </field>
           <field name="feedback" optional="true">
-            <ref>object</ref>
+            <ref>RefactoringFeedback</ref>
             <p>
               Data used to provide feedback to the user. The structure
               of the data is dependent on the kind of refactoring
@@ -1266,18 +1267,17 @@
         </result>
       </request>
     </domain>
-    <domain name="debug">
+    <domain name="execution">
       <p>
-        The debugging domain contains commands related to providing a
-        debugging experience.
+        The execution domain contains commands related to providing an execution
+        or debugging experience.
       </p>
       <request method="createContext">
         <p>
-          Create a debugging context for the executable file with the
-          given path. The context that is created will persist until
-          debug.deleteContext is used to delete it. Clients,
-          therefore, are responsible for managing the lifetime of
-          debugging contexts.
+          Create an execution context for the executable file with the given
+          path. The context that is created will persist until
+          execution.deleteContext is used to delete it. Clients, therefore, are
+          responsible for managing the lifetime of execution contexts.
         </p>
         <params>
           <field name="contextRoot">
@@ -1289,45 +1289,44 @@
         </params>
         <result>
           <field name="id">
-            <ref>DebugContextId</ref>
+            <ref>ExecutionContextId</ref>
             <p>
-              The identifier used to refer to the debugging context
-              that was created.
+              The identifier used to refer to the execution context that was
+              created.
             </p>
           </field>
         </result>
       </request>
       <request method="deleteContext">
         <p>
-          Delete the debugging context with the given identifier. The
-          context id is no longer valid after this command. The server
-          is allowed to re-use ids when they are no longer valid.
+          Delete the execution context with the given identifier. The context id
+          is no longer valid after this command. The server is allowed to re-use
+          ids when they are no longer valid.
         </p>
         <params>
           <field name="id">
-            <ref>DebugContextId</ref>
+            <ref>ExecutionContextId</ref>
             <p>
-              The identifier of the debugging context that is to be
-              deleted.
+              The identifier of the execution context that is to be deleted.
             </p>
           </field>
         </params>
       </request>
       <request method="mapUri">
         <p>
-          Map a URI from the debugging context to the file that it
-          corresponds to, or map a file to the URI that it corresponds
-          to in the debugging context.
+          Map a URI from the execution context to the file that it corresponds
+          to, or map a file to the URI that it corresponds to in the execution
+          context.
         </p>
         <p>
           Exactly one of the file and uri fields must be provided.
         </p>
         <params>
           <field name="id">
-            <ref>DebugContextId</ref>
+            <ref>ExecutionContextId</ref>
             <p>
-              The identifier of the debugging context in which the URI
-              is to be mapped.
+              The identifier of the execution context in which the URI is to be
+              mapped.
             </p>
           </field>
           <field name="file" optional="true">
@@ -1347,32 +1346,32 @@
           <field name="file" optional="true">
             <ref>FilePath</ref>
             <p>
-              The file to which the URI was mapped. This field is
-              omitted if the uri field was not given in the request.
+              The file to which the URI was mapped. This field is omitted if the
+              uri field was not given in the request.
             </p>
           </field>
           <field name="uri" optional="true">
             <ref>String</ref>
             <p>
-              The URI to which the file path was mapped. This field is
-              omitted if the file field was not given in the request.
+              The URI to which the file path was mapped. This field is omitted
+              if the file field was not given in the request.
             </p>
           </field>
         </result>
       </request>
       <request method="setSubscriptions">
         <p>
-          Subscribe for services. All previous subscriptions are
-          replaced by the given set of services.
+          Subscribe for services. All previous subscriptions are replaced by the
+          given set of services.
         </p>
         <p>
-          It is an error if any of the elements in the list are not
-          valid services. If there is an error, then the current
-          subscriptions will remain unchanged.
+          It is an error if any of the elements in the list are not valid
+          services. If there is an error, then the current subscriptions will
+          remain unchanged.
         </p>
         <params>
           <field name="subscriptions">
-            <list><ref>DebugService</ref></list>
+            <list><ref>ExecutionService</ref></list>
             <p>
               A list of the services being subscribed to.
             </p>
@@ -1381,21 +1380,19 @@
       </request>
       <notification event="launchData">
         <p>
-          Reports information needed to allow applications within the
-          given context to be launched.
+          Reports information needed to allow applications to be launched.
         </p>
         <p>
-          This notification is not subscribed to by default. Clients
-          can subscribe by including the value "LAUNCH_DATA" in the
-          list of services passed in a debug.setSubscriptions request.
+          This notification is not subscribed to by default. Clients can
+          subscribe by including the value "LAUNCH_DATA" in the list of services
+          passed in an <tt>execution.setSubscriptions</tt> request.
         </p>
         <params>
           <field name="executables">
             <list><ref>ExecutableFile</ref></list>
             <p>
-              A list of the files that are executable in the given
-              context. This list replaces any previous list provided
-              for the given context.
+              A list of the files that are executable. This list replaces any
+              previous list provided.
             </p>
           </field>
           <field name="dartToHtml">
@@ -1406,9 +1403,8 @@
               </value>
             </map>
             <p>
-              A mapping from the paths of Dart files that are
-              referenced by HTML files to a list of the HTML files
-              that reference the Dart files.
+              A mapping from the paths of Dart files that are referenced by HTML
+              files to a list of the HTML files that reference the Dart files.
             </p>
           </field>
           <field name="htmlToDart">
@@ -1419,15 +1415,15 @@
               </value>
             </map>
             <p>
-              A mapping from the paths of HTML files that reference
-              Dart files to a list of the Dart files they reference.
+              A mapping from the paths of HTML files that reference Dart files
+              to a list of the Dart files they reference.
             </p>
           </field>
         </params>
       </notification>
     </domain>
     <types>
-      <h2><a name="types">Types</a></h2>
+      <h2 class="domain"><a name="types">Types</a></h2>
       <p>
         This section contains descriptions of the data types referenced
         in the API’s of the various domains.
@@ -1631,6 +1627,11 @@
           a file content overlay or that has had its overlay removed via
           <a href="#type_RemoveContentOverlay">RemoveContentOverlay</a>.
         </p>
+        <p>
+          If any of the edits cannot be applied due to its offset or
+          length being out of range, an INVALID_OVERLAY_CHANGE error
+          will be reported.
+        </p>
         <object>
           <field name="type" value="change"><ref>String</ref></field>
           <field name="edits">
@@ -1824,21 +1825,6 @@
           <value><code>TYPE_PARAMETER</code></value>
         </enum>
       </type>
-      <type name="DebugContextId">
-        <ref>String</ref>
-        <p>
-          The identifier for a debug context.
-        </p>
-      </type>
-      <type name="DebugService">
-        <p>
-          An enumeration of the services provided by the debug
-          domain.
-        </p>
-        <enum>
-          <value><code>LAUNCH_DATA</code></value>
-        </enum>
-      </type>
       <type name="Element">
         <p>
           Information about an element (something that can be declared
@@ -1953,6 +1939,21 @@
           <value><code>SERVER</code></value>
         </enum>
       </type>
+      <type name="ExecutionContextId">
+        <ref>String</ref>
+        <p>
+          The identifier for a execution context.
+        </p>
+      </type>
+      <type name="ExecutionService">
+        <p>
+          An enumeration of the services provided by the execution
+          domain.
+        </p>
+        <enum>
+          <value><code>LAUNCH_DATA</code></value>
+        </enum>
+      </type>
       <type name="FilePath">
         <ref>String</ref>
         <p>
@@ -2091,7 +2092,8 @@
             <p>
               The path to the defining compilation unit of the library
               in which the referenced element is declared. This data is
-              omitted if there is no referenced element.
+              omitted if there is no referenced element, or if the
+              element is declared inside an HTML file.
             </p>
           </field>
           <field name="containingLibraryName" optional="true">
@@ -2099,7 +2101,8 @@
             <p>
               The name of the library in which the referenced element is
               declared. This data is omitted if there is no referenced
-              element.
+              element, or if the element is declared inside an HTML
+              file.
             </p>
           </field>
           <field name="dartdoc" optional="true">
@@ -2109,7 +2112,8 @@
               than the removal of the comment delimiters, including
               leading asterisks in the case of a block comment, the
               dartdoc is unprocessed markdown. This data is omitted if
-              there is no referenced element.
+              there is no referenced element, or if the element has no
+              dartdoc.
             </p>
           </field>
           <field name="elementDescription" optional="true">
@@ -2484,6 +2488,20 @@
           </field>
         </object>
       </type>
+      <type name="RefactoringFeedback">
+        <p>
+          An abstract superclass of all refactoring feedbacks.
+        </p>
+        <object>
+        </object>
+      </type>
+      <type name="RefactoringOptions">
+        <p>
+          An abstract superclass of all refactoring options.
+        </p>
+        <object>
+        </object>
+      </type>
       <type name="RefactoringMethodParameterKind">
         <p>
           An enumeration of the kinds of parameters.
@@ -2583,13 +2601,21 @@
         </p>
         <enum>
           <value>
-            <code>GET_ERRORS_ERROR</code>
+            <code>GET_ERRORS_INVALID_FILE</code>
             <p>
-              An error occurred during the processing of an
-              "analysis.getErrors" request.
+              An "analysis.getErrors" request specified a FilePath
+              which does not match a file currently subject to
+              analysis.
             </p>
-            <!-- TODO(paulberry): this is vague.  We should be more
-                 specific about the nature of the error if we can. -->
+          </value>
+          <value>
+            <code>INVALID_OVERLAY_CHANGE</code>
+            <p>
+              An analysis.updateContent request contained a
+              ChangeContentOverlay object which can't be applied, due
+              to an edit having an offset or length that is out of
+              range.
+            </p>
           </value>
           <value>
             <code>INVALID_PARAMETER</code>
@@ -2605,21 +2631,28 @@
           </value>
           <value>
             <code>SERVER_ALREADY_STARTED</code>
-            <!-- TODO(paulberry): this error code doesn't make sense
-                 anymore. -->
             <p>
               The analysis server has already been started (and hence
               won't accept new connections).
             </p>
+            <p>
+              This error is included for future expansion; at present
+              the analysis server can only speak to one client at a
+              time so this error will never occur.
+            </p>
           </value>
           <value>
             <code>UNANALYZED_PRIORITY_FILES</code>
-            <!-- TODO(paulberry): this error shouldn't be issued under
-                 our new "eventual consistency" model. -->
             <p>
               An "analysis.setPriorityFiles" request includes one or
               more files that are not being analyzed.
             </p>
+            <p>
+              This is a legacy error; it will be removed before the
+              API reaches version 1.0.
+            </p>
+            <!-- TODO(paulberry): remove this error and the code that
+                 generates it. -->
           </value>
           <value>
             <code>UNKNOWN_REQUEST</code>
@@ -2635,8 +2668,12 @@
               The analysis server was requested to perform an action
               which is not supported.
             </p>
-            <!-- TODO(paulberry): how does this differ from
-                 UNKNOWN_REQUEST?  Do we really need both? -->
+            <p>
+              This is a legacy error; it will be removed before the
+              API reaches version 1.0.
+            </p>
+            <!-- TODO(paulberry): remove this error and the code that
+                 generates it. -->
           </value>
         </enum>
       </type>
@@ -3083,21 +3120,21 @@
             <list><ref>RefactoringMethodParameter</ref></list>
             <p>
               The parameters that should be defined for the method.
-              <p>
-                It is an error if a REQUIRED or NAMED parameter follows a
-                POSITIONAL parameter.
-                It is an error if a REQUIRED or POSITIONAL parameter follows a
-                NAMED parameter.
-              </p>
-              <ul>
-                <li>
-                  To change the order and/or update proposed paramerers, add
-                  parameters with the same identifiers as proposed.
-                </li>
-                <li>To add new parameters, omit their identifier.</li>
-                <li>To remove some parameters, omit them in this list.</li>
-              </ul>
             </p>
+            <p>
+              It is an error if a REQUIRED or NAMED parameter follows a
+              POSITIONAL parameter.
+              It is an error if a REQUIRED or POSITIONAL parameter follows a
+              NAMED parameter.
+            </p>
+            <ul>
+              <li>
+                To change the order and/or update proposed parameters, add
+                parameters with the same identifiers as proposed.
+              </li>
+              <li>To add new parameters, omit their identifier.</li>
+              <li>To remove some parameters, omit them in this list.</li>
+            </ul>
           </field>
           <field name="extractAll">
             <ref>bool</ref>
@@ -3119,6 +3156,20 @@
           It is an error if the range contains anything other than all
           or part of the name of a single local variable.
         </p>
+        <feedback>
+          <field name="name">
+            <ref>String</ref>
+            <p>
+              The name of the variable being inlined.
+            </p>
+          </field>
+          <field name="occurrences">
+            <ref>int</ref>
+            <p>
+              The number of times the variable occurs.
+            </p>
+          </field>
+        </feedback>
       </refactoring>
       <refactoring kind="INLINE_METHOD">
         <p>
@@ -3129,13 +3180,34 @@
           It is an error if the range contains anything other than all
           or part of the name of a single method.
         </p>
+        <feedback>
+          <field name="className" optional="true">
+            <ref>String</ref>
+            <p>
+              The name of the class enclosing the method being inlined.
+              If not a class member is being inlined, this field will be absent.
+            </p>
+          </field>
+          <field name="methodName">
+            <ref>String</ref>
+            <p>
+              The name of the method (or function) being inlined.
+            </p>
+          </field>
+          <field name="isDeclaration">
+            <ref>bool</ref>
+            <p>
+              True if the declaration of the method is selected.
+              So all references should be inlined.
+            </p>
+          </field>
+        </feedback>
         <options>
           <field name="deleteSource">
             <ref>bool</ref>
             <p>
-              True if the method being inlined should be removed. It
-              is an error if this field is true and inlineAll is
-              false.
+              True if the method being inlined should be removed.
+              It is an error if this field is true and inlineAll is false.
             </p>
           </field>
           <field name="inlineAll">
@@ -3173,6 +3245,20 @@
               The length of the name selected to be renamed.
             </p>
           </field>
+          <field name="elementKindName">
+            <ref>String</ref>
+            <p>
+              The human-readable description of the kind of element being
+              renamed (such as “class” or “function type
+              alias”).
+            </p>
+          </field>
+          <field name="oldName">
+            <ref>String</ref>
+            <p>
+              The old name of the element before the refactoring.
+            </p>
+          </field>
         </feedback>
         <options>
           <field name="newName">
diff --git a/pkg/analysis_testing/LICENSE b/pkg/analysis_testing/LICENSE
deleted file mode 100644
index 5c60afe..0000000
--- a/pkg/analysis_testing/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright 2014, the Dart project authors. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of Google Inc. nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/analysis_testing/lib/abstract_context.dart b/pkg/analysis_testing/lib/abstract_context.dart
deleted file mode 100644
index 340c10f..0000000
--- a/pkg/analysis_testing/lib/abstract_context.dart
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright (c) 2014, 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 testing.abstract_context;
-
-import 'package:analysis_testing/mock_sdk.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/file_system/memory_file_system.dart';
-import 'package:analyzer/src/generated/ast.dart';
-import 'package:analyzer/src/generated/element.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/sdk.dart';
-import 'package:analyzer/src/generated/source_io.dart';
-
-
-/**
- * Finds an [Element] with the given [name].
- */
-Element findChildElement(Element root, String name, [ElementKind kind]) {
-  Element result = null;
-  root.accept(new _ElementVisitorFunctionWrapper((Element element) {
-    if (element.name != name) {
-      return;
-    }
-    if (kind != null && element.kind != kind) {
-      return;
-    }
-    result = element;
-  }));
-  return result;
-}
-
-
-/**
- * A function to be called for every [Element].
- */
-typedef void _ElementVisitorFunction(Element element);
-
-
-class AbstractContextTest {
-  static final DartSdk SDK = new MockSdk();
-  static final UriResolver SDK_RESOLVER = new DartUriResolver(SDK);
-
-  MemoryResourceProvider provider = new MemoryResourceProvider();
-  UriResolver resourceResolver;
-  AnalysisContext context;
-
-  Source addSource(String path, String content) {
-    File file = provider.newFile(path, content);
-    Source source = file.createSource();
-    ChangeSet changeSet = new ChangeSet();
-    changeSet.addedSource(source);
-    context.applyChanges(changeSet);
-    context.setContents(source, content);
-    return source;
-  }
-
-  /**
-   * Performs all analysis tasks in [context].
-   */
-  void performAllAnalysisTasks() {
-    while (true) {
-      AnalysisResult result = context.performAnalysisTask();
-      if (!result.hasMoreWork) {
-        break;
-      }
-    }
-  }
-
-  CompilationUnit resolveDartUnit(Source unitSource, Source librarySource) {
-    return context.resolveCompilationUnit2(unitSource, librarySource);
-  }
-
-  CompilationUnit resolveLibraryUnit(Source source) {
-    return context.resolveCompilationUnit2(source, source);
-  }
-
-  void setUp() {
-    resourceResolver = new ResourceUriResolver(provider);
-    context = AnalysisEngine.instance.createAnalysisContext();
-    context.sourceFactory = new SourceFactory([SDK_RESOLVER, resourceResolver]);
-  }
-
-  void tearDown() {
-    context = null;
-    provider = null;
-  }
-}
-
-
-/**
- * Wraps the given [_ElementVisitorFunction] into an instance of
- * [engine.GeneralizingElementVisitor].
- */
-class _ElementVisitorFunctionWrapper extends GeneralizingElementVisitor {
-  final _ElementVisitorFunction function;
-  _ElementVisitorFunctionWrapper(this.function);
-  visitElement(Element element) {
-    function(element);
-    super.visitElement(element);
-  }
-}
diff --git a/pkg/analysis_testing/lib/abstract_single_unit.dart b/pkg/analysis_testing/lib/abstract_single_unit.dart
deleted file mode 100644
index 15e70d6..0000000
--- a/pkg/analysis_testing/lib/abstract_single_unit.dart
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright (c) 2014, 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 test.services.src.index.abstract_single_file;
-
-import 'package:analysis_testing/abstract_context.dart';
-import 'package:analyzer/src/generated/ast.dart';
-import 'package:analyzer/src/generated/element.dart';
-import 'package:analyzer/src/generated/error.dart';
-import 'package:analyzer/src/generated/java_engine.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:unittest/unittest.dart';
-
-
-class AbstractSingleUnitTest extends AbstractContextTest {
-  bool verifyNoTestUnitErrors = true;
-
-  String testCode;
-  String testFile = '/test.dart';
-  Source testSource;
-  CompilationUnit testUnit;
-  CompilationUnitElement testUnitElement;
-  LibraryElement testLibraryElement;
-
-  void assertNoErrorsInSource(Source source) {
-    List<AnalysisError> errors = context.getErrors(source).errors;
-    expect(errors, isEmpty);
-  }
-
-  Element findElement(String name, [ElementKind kind]) {
-    return findChildElement(testUnitElement, name, kind);
-  }
-
-  /**
-   * Returns the [SimpleIdentifier] at the given search pattern.
-   */
-  SimpleIdentifier findIdentifier(String search) {
-    return findNodeAtString(search, (node) => node is SimpleIdentifier);
-  }
-
-  AstNode findNodeAtOffset(int offset, [Predicate<AstNode> predicate]) {
-    AstNode result = new NodeLocator.con1(offset).searchWithin(testUnit);
-    if (result != null && predicate != null) {
-      result = result.getAncestor(predicate);
-    }
-    return result;
-  }
-
-  AstNode findNodeAtString(String search, [Predicate<AstNode> predicate]) {
-    int offset = findOffset(search);
-    return findNodeAtOffset(offset, predicate);
-  }
-
-  Element findNodeElementAtString(String search,
-      [Predicate<AstNode> predicate]) {
-    AstNode node = findNodeAtString(search, predicate);
-    if (node == null) {
-      return null;
-    }
-    return ElementLocator.locate(node);
-  }
-
-  int findEnd(String search) {
-    return findOffset(search) + search.length;
-  }
-
-  int findOffset(String search) {
-    int offset = testCode.indexOf(search);
-    expect(offset, isNonNegative, reason: "Not found '$search' in\n$testCode");
-    return offset;
-  }
-
-  int getLeadingIdentifierLength(String search) {
-    int length = 0;
-    while (length < search.length) {
-      int c = search.codeUnitAt(length);
-      if (c >= 'a'.codeUnitAt(0) && c <= 'z'.codeUnitAt(0)) {
-        length++;
-        continue;
-      }
-      if (c >= 'A'.codeUnitAt(0) && c <= 'Z'.codeUnitAt(0)) {
-        length++;
-        continue;
-      }
-      if (c >= '0'.codeUnitAt(0) && c <= '9'.codeUnitAt(0)) {
-        length++;
-        continue;
-      }
-      break;
-    }
-    return length;
-  }
-
-  void resolveTestUnit(String code) {
-    testCode = code;
-    testSource = addSource(testFile, code);
-    testUnit = resolveLibraryUnit(testSource);
-    if (verifyNoTestUnitErrors) {
-      assertNoErrorsInSource(testSource);
-    }
-    testUnitElement = testUnit.element;
-    testLibraryElement = testUnitElement.library;
-  }
-}
diff --git a/pkg/analysis_testing/lib/mocks.dart b/pkg/analysis_testing/lib/mocks.dart
deleted file mode 100644
index aa1edef..0000000
--- a/pkg/analysis_testing/lib/mocks.dart
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright (c) 2014, 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 testing.mocks;
-
-import 'package:analyzer/src/generated/element.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:typed_mock/typed_mock.dart';
-
-
-class MockAnalysisContext extends StringTypedMock implements AnalysisContext {
-  MockAnalysisContext(String name) : super(name);
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockClassElement extends TypedMock implements ClassElement {
-  final ElementKind kind = ElementKind.CLASS;
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockCompilationUnitElement extends TypedMock implements
-    CompilationUnitElement {
-  final ElementKind kind = ElementKind.COMPILATION_UNIT;
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockConstructorElement extends TypedMock implements ConstructorElement {
-  final kind = ElementKind.CONSTRUCTOR;
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockElement extends StringTypedMock implements Element {
-  MockElement([String name = '<element>']) : super(name);
-
-  @override
-  String get displayName => _toString;
-
-  @override
-  String get name => _toString;
-
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockFieldElement extends TypedMock implements FieldElement {
-  final ElementKind kind = ElementKind.FIELD;
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockFunctionElement extends TypedMock implements FunctionElement {
-  final ElementKind kind = ElementKind.FUNCTION;
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockFunctionTypeAliasElement extends TypedMock implements
-    FunctionTypeAliasElement {
-  final ElementKind kind = ElementKind.FUNCTION_TYPE_ALIAS;
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockHtmlElement extends TypedMock implements HtmlElement {
-  final ElementKind kind = ElementKind.HTML;
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockImportElement extends TypedMock implements ImportElement {
-  final ElementKind kind = ElementKind.IMPORT;
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockLibraryElement extends TypedMock implements LibraryElement {
-  final ElementKind kind = ElementKind.LIBRARY;
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockLocalVariableElement extends TypedMock implements LocalVariableElement
-    {
-  final ElementKind kind = ElementKind.LOCAL_VARIABLE;
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockLogger extends TypedMock implements Logger {
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockMethodElement extends StringTypedMock implements MethodElement {
-  final kind = ElementKind.METHOD;
-  MockMethodElement([String name = 'method']) : super(name);
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockParameterElement extends TypedMock implements ParameterElement {
-  final ElementKind kind = ElementKind.PARAMETER;
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockPropertyAccessorElement extends TypedMock implements
-    PropertyAccessorElement {
-  final ElementKind kind;
-  MockPropertyAccessorElement(this.kind);
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockSource extends StringTypedMock implements Source {
-  MockSource([String name = 'mocked.dart']) : super(name);
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockTopLevelVariableElement extends TypedMock implements
-    TopLevelVariableElement {
-  final ElementKind kind = ElementKind.TOP_LEVEL_VARIABLE;
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class MockTypeParameterElement extends TypedMock implements TypeParameterElement
-    {
-  final ElementKind kind = ElementKind.TYPE_PARAMETER;
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-
-class StringTypedMock extends TypedMock {
-  String _toString;
-
-  StringTypedMock(this._toString);
-
-  @override
-  String toString() {
-    if (_toString != null) {
-      return _toString;
-    }
-    return super.toString();
-  }
-}
diff --git a/pkg/analysis_testing/pubspec.yaml b/pkg/analysis_testing/pubspec.yaml
deleted file mode 100644
index dfd0e1d..0000000
--- a/pkg/analysis_testing/pubspec.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-name: analysis_testing
-version: 0.4.0
-author: Dart Team <misc@dartlang.org>
-description: A set of libraries for testing Analysis services and server
-homepage: http://www.dartlang.org
-environment:
-  sdk: '>=1.0.0 <2.0.0'
-dependencies:
-  analyzer: '>=0.22.0-dev <0.23.0'
-  typed_mock: '>=0.0.4 <1.0.0'
-  unittest: '>=0.10.0 <0.12.0'
diff --git a/pkg/analysis_testing/test/test_all.dart b/pkg/analysis_testing/test/test_all.dart
deleted file mode 100644
index a6c2ed2..0000000
--- a/pkg/analysis_testing/test/test_all.dart
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2014, 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:unittest/unittest.dart';
-
-/// Utility for manually running all tests.
-main() {
-//  group('analysis_services', () {
-//  });
-}
\ No newline at end of file
diff --git a/pkg/analyzer/bin/analyzer.dart b/pkg/analyzer/bin/analyzer.dart
index 303c6ae..c7efb78 100644
--- a/pkg/analyzer/bin/analyzer.dart
+++ b/pkg/analyzer/bin/analyzer.dart
@@ -19,7 +19,7 @@
 import 'package:analyzer/src/generated/java_engine.dart';
 import 'package:analyzer/options.dart';
 
-void main(args) {
+void main(List<String> args) {
   StringUtilities.INTERNER = new MappedInterner();
   CommandLineOptions options = CommandLineOptions.parse(args);
   if (options.shouldBatch) {
diff --git a/pkg/analyzer/lib/options.dart b/pkg/analyzer/lib/options.dart
index d4d760d..e7919ff 100644
--- a/pkg/analyzer/lib/options.dart
+++ b/pkg/analyzer/lib/options.dart
@@ -118,7 +118,7 @@
           defaultsTo: false, negatable: false)
       ..addOption('dart-sdk', help: 'The path to the Dart SDK')
       ..addOption('package-root', abbr: 'p',
-          help: 'The path to the package root')
+          help: 'The path to the package root. The flag package-root is deprecated. Remove to use package information computed by pub.')
       ..addOption('format',
           help: 'Specifies the format in which errors are displayed')
       ..addFlag('machine',
diff --git a/pkg/analyzer/lib/source/package_map_provider.dart b/pkg/analyzer/lib/source/package_map_provider.dart
new file mode 100644
index 0000000..9d73815
--- /dev/null
+++ b/pkg/analyzer/lib/source/package_map_provider.dart
@@ -0,0 +1,170 @@
+// Copyright (c) 2014, 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 source.package_map_provider;
+
+import 'dart:collection';
+import 'dart:convert';
+import 'dart:io' as io;
+
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/sdk_io.dart';
+import 'package:path/path.dart';
+
+/**
+ * Data structure output by PackageMapProvider.  This contains both the package
+ * map and dependency information.
+ */
+class PackageMapInfo {
+  /**
+   * The package map itself.  This is a map from package name to a list of
+   * the folders containing source code for the package.
+   *
+   * `null` if an error occurred.
+   */
+  Map<String, List<Folder>> packageMap;
+
+  /**
+   * Dependency information.  This is a set of the paths which were consulted
+   * in order to generate the package map.  If any of these files is
+   * modified, the package map will need to be regenerated.
+   */
+  Set<String> dependencies;
+
+  PackageMapInfo(this.packageMap, this.dependencies);
+}
+
+/**
+ * A PackageMapProvider is an entity capable of determining the mapping from
+ * package name to source directory for a given folder.
+ */
+abstract class PackageMapProvider {
+  /**
+   * Compute a package map for the given folder, if possible.
+   *
+   * If a package map can't be computed (e.g. because an error occurred), a
+   * [PackageMapInfo] will still be returned, but its packageMap will be null.
+   */
+  PackageMapInfo computePackageMap(Folder folder);
+}
+
+/**
+ * Implementation of PackageMapProvider that operates by executing pub.
+ */
+class PubPackageMapProvider implements PackageMapProvider {
+  static const String PUB_LIST_COMMAND = 'list-package-dirs';
+
+  /**
+   * The name of the 'pubspec.lock' file, which we assume is the dependency
+   * in the event that [PUB_LIST_COMMAND] fails.
+   */
+  static const String PUBSPEC_LOCK_NAME = 'pubspec.lock';
+
+  /**
+   * [ResourceProvider] that is used to create the [Folder]s that populate the
+   * package map.
+   */
+  final ResourceProvider resourceProvider;
+
+  /**
+   * Sdk that we use to find the pub executable.
+   */
+  final DirectoryBasedDartSdk sdk;
+
+  PubPackageMapProvider(this.resourceProvider, this.sdk);
+
+  @override
+  PackageMapInfo computePackageMap(Folder folder) {
+    // TODO(paulberry) make this asynchronous so that we can (a) do other
+    // analysis while it's in progress, and (b) time out if it takes too long
+    // to respond.
+    String executable = sdk.pubExecutable.getAbsolutePath();
+    io.ProcessResult result;
+    try {
+      result = io.Process.runSync(
+          executable, [PUB_LIST_COMMAND], workingDirectory: folder.path);
+    } on io.ProcessException catch (exception, stackTrace) {
+      AnalysisEngine.instance.logger.logInformation(
+          "Error running pub $PUB_LIST_COMMAND\n${exception}\n${stackTrace}");
+    }
+    if (result.exitCode != 0) {
+      AnalysisEngine.instance.logger.logInformation(
+          "pub $PUB_LIST_COMMAND failed: exit code ${result.exitCode}");
+      return _error(folder);
+    }
+    try {
+      return parsePackageMap(result.stdout, folder);
+    } catch (exception, stackTrace) {
+      AnalysisEngine.instance.logger.logError(
+          "Malformed output from pub $PUB_LIST_COMMAND\n${exception}\n${stackTrace}");
+    }
+
+    return _error(folder);
+  }
+
+  /**
+   * Decode the JSON output from pub into a package map.  Paths in the
+   * output are considered relative to [folder].
+   */
+  PackageMapInfo parsePackageMap(String jsonText, Folder folder) {
+    // The output of pub looks like this:
+    // {
+    //   "packages": {
+    //     "foo": "path/to/foo",
+    //     "bar": ["path/to/bar1", "path/to/bar2"],
+    //     "myapp": "path/to/myapp",  // self link is included
+    //   },
+    //   "input_files": [
+    //     "path/to/myapp/pubspec.lock"
+    //   ]
+    // }
+    Map<String, List<Folder>> packageMap = new HashMap<String, List<Folder>>();
+    Map obj = JSON.decode(jsonText);
+    Map packages = obj['packages'];
+    processPaths(String packageName, List paths) {
+      List<Folder> folders = <Folder>[];
+      for (var path in paths) {
+        if (path is String) {
+          Resource resource = folder.getChild(path);
+          if (resource is Folder) {
+            folders.add(resource);
+          }
+        }
+      }
+      if (folders.isNotEmpty) {
+        packageMap[packageName] = folders;
+      }
+    }
+    packages.forEach((key, value) {
+      if (value is String) {
+        processPaths(key, [value]);
+      } else if (value is List) {
+        processPaths(key, value);
+      }
+    });
+    Set<String> dependencies = new Set<String>();
+    List inputFiles = obj['input_files'];
+    if (inputFiles != null) {
+      for (var path in inputFiles) {
+        if (path is String) {
+          dependencies.add(folder.canonicalizePath(path));
+        }
+      }
+    }
+    return new PackageMapInfo(packageMap, dependencies);
+  }
+
+  /**
+   * Create a PackageMapInfo object representing an error condition.
+   */
+  PackageMapInfo _error(Folder folder) {
+    // Even if an error occurs, we still need to know the dependencies, so that
+    // we'll know when to try running "pub list-package-dirs" again.
+    // Unfortunately, "pub list-package-dirs" doesn't tell us dependencies when
+    // an error occurs, so just assume there is one dependency, "pubspec.lock".
+    List<String> dependencies = <String>[join(folder.path, PUBSPEC_LOCK_NAME)];
+    return new PackageMapInfo(null, dependencies.toSet());
+  }
+}
\ No newline at end of file
diff --git a/pkg/analyzer/lib/src/analyzer_impl.dart b/pkg/analyzer/lib/src/analyzer_impl.dart
index dabeec2..114fb0f 100644
--- a/pkg/analyzer/lib/src/analyzer_impl.dart
+++ b/pkg/analyzer/lib/src/analyzer_impl.dart
@@ -5,7 +5,6 @@
 library analyzer_impl;
 
 import 'dart:async';
-
 import 'dart:io';
 
 import 'generated/constant.dart';
@@ -13,7 +12,6 @@
 import 'generated/element.dart';
 import 'generated/error.dart';
 import 'generated/java_io.dart';
-import 'generated/sdk.dart';
 import 'generated/sdk_io.dart';
 import 'generated/source_io.dart';
 import '../options.dart';
@@ -22,13 +20,16 @@
 
 import 'package:analyzer/src/generated/java_core.dart' show JavaSystem;
 import 'package:analyzer/src/error_formatter.dart';
+import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer/source/package_map_resolver.dart';
+import 'package:analyzer/source/package_map_provider.dart';
 
 /**
  * The maximum number of sources for which AST structures should be kept in the cache.
  */
 const int _MAX_CACHE_SIZE = 512;
 
-DartSdk sdk;
+DirectoryBasedDartSdk sdk;
 
 /// Analyzes single library [File].
 class AnalyzerImpl {
@@ -48,7 +49,8 @@
   final List<AnalysisErrorInfo> errorInfos = new List<AnalysisErrorInfo>();
 
   /// [HashMap] between sources and analysis error infos.
-  final HashMap<Source, AnalysisErrorInfo> sourceErrorsMap = new HashMap<Source, AnalysisErrorInfo>();
+  final HashMap<Source, AnalysisErrorInfo> sourceErrorsMap =
+      new HashMap<Source, AnalysisErrorInfo>();
 
   AnalyzerImpl(this.sourcePath, this.options, this.startTime) {
     if (sdk == null) {
@@ -63,7 +65,7 @@
    * then both will be printed. If [printMode] is `2`, then only performance
    * information will be printed, and it will be marked as being for a cold VM.
    */
-  ErrorSeverity analyzeSync({int printMode : 1}) {
+  ErrorSeverity analyzeSync({int printMode: 1}) {
     setupForAnalysis();
     return _analyzeSync(printMode);
   }
@@ -141,7 +143,7 @@
       // numbers.
       //
       // prepare errors
-      sourceErrorsMap.forEach((k,v) {
+      sourceErrorsMap.forEach((k, v) {
         errorInfos.add(sourceErrorsMap[k]);
       });
 
@@ -159,7 +161,8 @@
     });
   }
 
-  bool _excludeTodo(AnalysisError error) => error.errorCode.type != ErrorType.TODO;
+  bool _excludeTodo(AnalysisError error) =>
+      error.errorCode.type != ErrorType.TODO;
 
   _printErrorsAndPerf() {
     // The following is a hack. We currently print out to stderr to ensure that
@@ -195,7 +198,7 @@
           - (ioTime + scanTime + parseTime + resolveTime + errorsTime + hintsTime
           + angularTime)}");
       stdout.writeln("total:$totalTime");
-   }
+    }
   }
 
   _printColdPerf() {
@@ -234,17 +237,24 @@
   }
 
   void prepareAnalysisContext(JavaFile sourceFile, Source source) {
-    List<UriResolver> resolvers = [new DartUriResolver(sdk), new FileUriResolver()];
+    List<UriResolver> resolvers = [
+        new DartUriResolver(sdk),
+        new FileUriResolver()];
     // may be add package resolver
     {
       JavaFile packageDirectory;
       if (options.packageRootPath != null) {
         packageDirectory = new JavaFile(options.packageRootPath);
-      } else {
-        packageDirectory = getPackageDirectoryFor(sourceFile);
-      }
-      if (packageDirectory != null) {
         resolvers.add(new PackageUriResolver([packageDirectory]));
+      } else {
+        PubPackageMapProvider pubPackageMapProvider =
+            new PubPackageMapProvider(PhysicalResourceProvider.INSTANCE, sdk);
+        PackageMapInfo packageMapInfo = pubPackageMapProvider.computePackageMap(
+            PhysicalResourceProvider.INSTANCE.getResource(''));
+        resolvers.add(
+            new PackageMapUriResolver(
+                PhysicalResourceProvider.INSTANCE,
+                packageMapInfo.packageMap));
       }
     }
     sourceFactory = new SourceFactory(resolvers);
@@ -274,8 +284,8 @@
     context.applyChanges(changeSet);
   }
 
-  void addCompilationUnitSource(CompilationUnitElement unit, Set<LibraryElement> libraries,
-      Set<CompilationUnitElement> units) {
+  void addCompilationUnitSource(CompilationUnitElement unit,
+      Set<LibraryElement> libraries, Set<CompilationUnitElement> units) {
     if (unit == null || units.contains(unit)) {
       return;
     }
@@ -285,7 +295,7 @@
 
   void addLibrarySources(LibraryElement library, Set<LibraryElement> libraries,
       Set<CompilationUnitElement> units) {
-    if (library == null || !libraries.add(library) ) {
+    if (library == null || !libraries.add(library)) {
       return;
     }
     // may be skip library
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 6f1ecf4..24b9997 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 0.22.4
+version: 0.23.0-dev.1
 author: Dart Team <misc@dartlang.org>
 description: Static analyzer for Dart.
 homepage: http://www.dartlang.org
diff --git a/pkg/analyzer/test/source/package_map_provider_test.dart b/pkg/analyzer/test/source/package_map_provider_test.dart
new file mode 100644
index 0000000..bf941a2
--- /dev/null
+++ b/pkg/analyzer/test/source/package_map_provider_test.dart
@@ -0,0 +1,108 @@
+// Copyright (c) 2014, 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 test.package.map.provider;
+
+import 'dart:convert';
+
+import 'package:analyzer/source/package_map_provider.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/src/generated/sdk_io.dart';
+import 'package:unittest/unittest.dart';
+
+main() {
+  groupSep = ' | ';
+
+  group('PubPackageMapProvider', () {
+    group('parsePackageMap', () {
+      MemoryResourceProvider resourceProvider;
+      PubPackageMapProvider packageMapProvider;
+      const String projectPath = '/path/to/project';
+      Folder projectFolder;
+
+      setUp(() {
+        resourceProvider = new MemoryResourceProvider();
+        packageMapProvider = new PubPackageMapProvider(resourceProvider, DirectoryBasedDartSdk.defaultSdk);
+        projectFolder = resourceProvider.newFolder(projectPath);
+      });
+
+      PackageMapInfo parsePackageMap(Object obj) {
+        return packageMapProvider.parsePackageMap(JSON.encode(obj), projectFolder);
+      }
+
+      test('normal folder', () {
+        String packageName = 'foo';
+        String folderPath = '/path/to/folder';
+        resourceProvider.newFolder(folderPath);
+        Map<String, List<Folder>> result = parsePackageMap(
+            {'packages': {packageName: folderPath}}).packageMap;
+        expect(result, hasLength(1));
+        expect(result.keys, contains(packageName));
+        expect(result[packageName], hasLength(1));
+        expect(result[packageName][0], new isInstanceOf<Folder>());
+        expect(result[packageName][0].path, equals(folderPath));
+      });
+
+      test('ignore nonexistent folder', () {
+        String packageName = 'foo';
+        String folderPath = '/path/to/folder';
+        Map<String, List<Folder>> result = parsePackageMap(
+            {'packages': {packageName: folderPath}}).packageMap;
+        expect(result, hasLength(0));
+      });
+
+      test('package maps to list', () {
+        String packageName = 'foo';
+        String folderPath1 = '/path/to/folder1';
+        String folderPath2 = '/path/to/folder2';
+        resourceProvider.newFolder(folderPath1);
+        resourceProvider.newFolder(folderPath2);
+        Map<String, List<Folder>> result = parsePackageMap(
+            {'packages': {packageName: [folderPath1, folderPath2]}}).packageMap;
+        expect(result, hasLength(1));
+        expect(result.keys, contains(packageName));
+        expect(result[packageName], hasLength(2));
+        for (int i = 0; i < 2; i++) {
+          expect(result[packageName][i], new isInstanceOf<Folder>());
+          expect(result[packageName][i].path, isIn([folderPath1, folderPath2]));
+        }
+      });
+
+      test('Handle dependencies', () {
+        String path1 = '/path/to/folder1/pubspec.lock';
+        String path2 = '/path/to/folder2/pubspec.lock';
+        resourceProvider.newFile(path1, '...');
+        resourceProvider.newFile(path2, '...');
+        Set<String> dependencies = parsePackageMap(
+            {'packages': {}, 'input_files': [path1, path2]}).dependencies;
+        expect(dependencies, hasLength(2));
+        expect(dependencies, contains(path1));
+        expect(dependencies, contains(path2));
+      });
+
+      test('Relative path in packages', () {
+        String packagePath = '/path/to/package';
+        String relativePackagePath = '../package';
+        String packageName = 'foo';
+        resourceProvider.newFolder(projectPath);
+        resourceProvider.newFolder(packagePath);
+        Map<String, List<Folder>> result = parsePackageMap(
+            {'packages': {packageName: [relativePackagePath]}}).packageMap;
+        expect(result[packageName][0].path, equals(packagePath));
+      });
+
+      test('Relative path in dependencies', () {
+        String dependencyPath = '/path/to/pubspec.lock';
+        String relativeDependencyPath = '../pubspec.lock';
+        resourceProvider.newFolder(projectPath);
+        resourceProvider.newFile(dependencyPath, 'contents');
+        Set<String> dependencies = parsePackageMap(
+            {'packages': {}, 'input_files': [relativeDependencyPath]}).dependencies;
+        expect(dependencies, hasLength(1));
+        expect(dependencies, contains(dependencyPath));
+      });
+    });
+  });
+}
diff --git a/pkg/analyzer/test/source/test_all.dart b/pkg/analyzer/test/source/test_all.dart
index b9a145f..d5b4c54 100644
--- a/pkg/analyzer/test/source/test_all.dart
+++ b/pkg/analyzer/test/source/test_all.dart
@@ -6,6 +6,7 @@
 
 import 'package:unittest/unittest.dart';
 
+import 'package_map_provider_test.dart' as package_map_provider_test;
 import 'package_map_resolver_test.dart' as package_map_resolver_test;
 
 
@@ -13,6 +14,7 @@
 main() {
   groupSep = ' | ';
   group('source', () {
+    package_map_provider_test.main();
     package_map_resolver_test.main();
   });
 }
\ No newline at end of file
diff --git a/pkg/analyzer2dart/bin/analyzer2dart.dart b/pkg/analyzer2dart/bin/analyzer2dart.dart
index e5e6328..0d6df5f 100644
--- a/pkg/analyzer2dart/bin/analyzer2dart.dart
+++ b/pkg/analyzer2dart/bin/analyzer2dart.dart
@@ -5,15 +5,19 @@
 /** The entry point for the command-line version analyzer2dart. */
 library analyzer2dart.cmdline;
 
+import 'dart:io';
+
 import 'package:analyzer/file_system/physical_file_system.dart';
-import 'package:analyzer/analyzer.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/sdk_io.dart';
 import 'package:analyzer/src/generated/source_io.dart';
+import 'package:compiler/implementation/source_file_provider.dart';
 
 import '../lib/src/closed_world.dart';
 import '../lib/src/driver.dart';
+import '../lib/src/converted_world.dart';
+import '../lib/src/dart_backend.dart';
 
 void main(List<String> args) {
   // TODO(paulberry): hacky
@@ -21,7 +25,19 @@
 
   PhysicalResourceProvider provider = PhysicalResourceProvider.INSTANCE;
   DartSdk sdk = DirectoryBasedDartSdk.defaultSdk;
-  Driver analyzer2Dart = new Driver(provider, sdk);
+  // TODO(johnniwinther): Support user specified output Uri.
+  // TODO(johnniwinther): Integrate messaging.
+  RandomAccessFileOutputProvider outputProvider =
+      new RandomAccessFileOutputProvider(
+          Uri.base.resolve('out.dart'),
+          Uri.base.resolve('out.dart.map'),
+          onInfo: (message) => print(message),
+          onFailure: (message) {
+            print(message);
+            exit(1);
+          });
+
+  Driver analyzer2Dart = new Driver(provider, sdk, outputProvider);
 
   // Tell the analysis server about the root
   Source source = analyzer2Dart.setRoot(path);
@@ -35,15 +51,12 @@
 
   // TODO(brianwilkerson,paulberry,johnniwinther): Convert the ast into cps by
   // visiting the ast and invoking the ir builder.
-  new CpsGeneratingVisitor();
-
   // TODO(johnniwinther): Convert the analyzer element model into the dart2js
   // element model to fit the needs of the cps encoding above.
+  ConvertedWorld convertedWorld = convertWorld(world);
 
   // TODO(johnniwinther): Feed the cps ir into the new dart2dart backend to
   // generate dart file(s).
+  compileToDart(analyzer2Dart, convertedWorld);
 }
 
-class CpsGeneratingVisitor extends RecursiveAstVisitor {
-  // TODO(johnniwinther)
-}
diff --git a/pkg/analyzer2dart/lib/src/closed_world.dart b/pkg/analyzer2dart/lib/src/closed_world.dart
index 2234659..4c21271 100644
--- a/pkg/analyzer2dart/lib/src/closed_world.dart
+++ b/pkg/analyzer2dart/lib/src/closed_world.dart
@@ -14,6 +14,9 @@
  * tree shaking to be reachable by the program being compiled.
  */
 class ClosedWorld {
+  /// Returns the main function of this closed world compilation.
+  final FunctionElement mainFunction;
+
   // TODO(paulberry): is it a problem to hold on to all the AST's for the
   // duration of tree shaking & CPS generation?
 
@@ -38,5 +41,5 @@
   Map<ClassElement, ClassDeclaration> instantiatedClasses =
       new HashMap<ClassElement, ClassDeclaration>();
 
-  ClosedWorld();
+  ClosedWorld(this.mainFunction);
 }
diff --git a/pkg/analyzer2dart/lib/src/converted_world.dart b/pkg/analyzer2dart/lib/src/converted_world.dart
new file mode 100644
index 0000000..82a7ccb
--- /dev/null
+++ b/pkg/analyzer2dart/lib/src/converted_world.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2014, 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 analyzer2dart.convertedWorld;
+
+import 'dart:collection';
+
+import 'package:analyzer/analyzer.dart';
+import 'package:compiler/implementation/elements/elements.dart' as dart2js;
+import 'package:analyzer/src/generated/element.dart' as analyzer;
+import 'package:compiler/implementation/cps_ir/cps_ir_nodes.dart' as ir;
+
+import 'closed_world.dart';
+import 'element_converter.dart';
+import 'cps_generator.dart';
+
+/// A [ClosedWorld] converted to the dart2js element model.
+abstract class ConvertedWorld {
+  Iterable<dart2js.LibraryElement> get libraries;
+  Iterable<dart2js.AstElement> get resolvedElements;
+  Iterable<dart2js.ClassElement> get instantiatedClasses;
+  dart2js.FunctionElement get mainFunction;
+  ir.Node getIr(dart2js.Element element);
+
+}
+
+class _ConvertedWorldImpl implements ConvertedWorld {
+  final dart2js.FunctionElement mainFunction;
+  Map<dart2js.AstElement, ir.Node> executableElements =
+      new HashMap<dart2js.AstElement, ir.Node>();
+
+  _ConvertedWorldImpl(this.mainFunction);
+
+  Iterable<dart2js.LibraryElement> get libraries => [mainFunction.library];
+
+  Iterable<dart2js.AstElement> get resolvedElements => executableElements.keys;
+
+  Iterable<dart2js.ClassElement> get instantiatedClasses => [];
+
+  ir.Node getIr(dart2js.Element element) => executableElements[element];
+}
+
+ConvertedWorld convertWorld(ClosedWorld closedWorld) {
+  ElementConverter converter = new ElementConverter();
+  _ConvertedWorldImpl convertedWorld = new _ConvertedWorldImpl(
+      converter.convertElement(closedWorld.mainFunction));
+  closedWorld.executableElements.forEach(
+      (analyzer.ExecutableElement analyzerElement, AstNode node) {
+    dart2js.AstElement dart2jsElement =
+        converter.convertElement(analyzerElement);
+    CpsGeneratingVisitor visitor = new CpsGeneratingVisitor(converter);
+    convertedWorld.executableElements[dart2jsElement] = node.accept(visitor);
+  });
+  return convertedWorld;
+}
+
diff --git a/pkg/analyzer2dart/lib/src/cps_generator.dart b/pkg/analyzer2dart/lib/src/cps_generator.dart
new file mode 100644
index 0000000..966229a
--- /dev/null
+++ b/pkg/analyzer2dart/lib/src/cps_generator.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2014, 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 analyzer2dart.cps_generator;

+

+import 'package:analyzer/analyzer.dart';

+

+import 'package:compiler/implementation/elements/elements.dart' as dart2js;

+import 'package:analyzer/src/generated/element.dart' as analyzer;

+

+import 'package:compiler/implementation/cps_ir/cps_ir_nodes.dart' as ir;

+import 'package:compiler/implementation/cps_ir/cps_ir_builder.dart';

+

+import 'element_converter.dart';

+import 'tree_shaker.dart';

+

+

+class CpsGeneratingVisitor extends RecursiveAstVisitor<ir.Node> {

+  final ElementConverter elementConverter;

+  final IrBuilder irBuilder = new IrBuilder();

+

+  CpsGeneratingVisitor(this.elementConverter);

+

+  @override

+  ir.FunctionDefinition visitFunctionDeclaration(FunctionDeclaration node) {

+    analyzer.FunctionElement function = node.element;

+    super.visitFunctionDeclaration(node);

+    return irBuilder.buildFunctionDefinition(

+        elementConverter.convertElement(function),

+            const [], const [], const []);

+  }

+

+  @override

+  visitMethodInvocation(MethodInvocation node) {

+    analyzer.Element staticElement = node.methodName.staticElement;

+    if (staticElement != null) {

+      dart2js.Element element = elementConverter.convertElement(staticElement);

+      return irBuilder.buildStaticInvocation(

+          element, createSelectorFromMethodInvocation(node), []);

+    }

+  }

+

+  @override

+  visitIntegerLiteral(IntegerLiteral node) {

+    return irBuilder.buildIntegerLiteral(node.value);

+  }

+

+  @override

+  visitReturnStatement(ReturnStatement node) {

+    if (node.expression != null) {

+      irBuilder.buildReturn(node.expression.accept(this));

+    } else {

+      irBuilder.buildReturn();

+    }

+  }

+}

diff --git a/pkg/analyzer2dart/lib/src/dart_backend.dart b/pkg/analyzer2dart/lib/src/dart_backend.dart
new file mode 100644
index 0000000..8409515
--- /dev/null
+++ b/pkg/analyzer2dart/lib/src/dart_backend.dart
@@ -0,0 +1,87 @@
+// Copyright (c) 2014, 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 analyzer2dart.dart_backend;
+
+import 'package:compiler/implementation/elements/elements.dart';
+import 'package:compiler/implementation/dart_backend/dart_backend.dart';
+import 'package:compiler/implementation/dart2jslib.dart';
+
+import 'driver.dart';
+import 'converted_world.dart';
+
+void compileToDart(Driver driver, ConvertedWorld convertedWorld) {
+  DartOutputter outputter =
+      new DartOutputter(new Listener(), driver.outputProvider);
+  outputter.assembleProgram(
+    libraries: convertedWorld.libraries,
+    instantiatedClasses: convertedWorld.instantiatedClasses,
+    resolvedElements: convertedWorld.resolvedElements,
+    mainFunction: convertedWorld.mainFunction,
+    computeElementAst: (Element element) {
+      return DartBackend.createElementAst(
+          null, null, null, null, convertedWorld.getIr(element));
+    },
+    shouldOutput: (_) => true,
+    isSafeToRemoveTypeDeclarations: (_) => false);
+
+}
+
+class Listener implements DiagnosticListener {
+
+  @override
+  void internalError(Spannable spannable, message) {
+    // TODO: implement internalError
+  }
+
+  @override
+  void log(message) {
+    // TODO: implement log
+  }
+
+  @override
+  void reportError(Spannable node,
+                   MessageKind errorCode,
+                   [Map arguments = const {}]) {
+    // TODO: implement reportError
+  }
+
+  @override
+  void reportFatalError(Spannable node,
+                        MessageKind errorCode,
+                        [Map arguments = const {}]) {
+    // TODO: implement reportFatalError
+  }
+
+  @override
+  void reportHint(Spannable node,
+                  MessageKind errorCode,
+                  [Map arguments = const {}]) {
+    // TODO: implement reportHint
+  }
+
+  @override
+  void reportInfo(Spannable node,
+                  MessageKind errorCode,
+                  [Map arguments = const {}]) {
+    // TODO: implement reportInfo
+  }
+
+  @override
+  void reportWarning(Spannable node,
+                     MessageKind errorCode,
+                     [Map arguments = const {}]) {
+    // TODO: implement reportWarning
+  }
+
+  @override
+  SourceSpan spanFromSpannable(Spannable node) {
+    // TODO: implement spanFromSpannable
+  }
+
+  @override
+  withCurrentElement(element, f()) {
+    // TODO: implement withCurrentElement
+  }
+}
diff --git a/pkg/analyzer2dart/lib/src/driver.dart b/pkg/analyzer2dart/lib/src/driver.dart
index 18824e3..69107ed 100644
--- a/pkg/analyzer2dart/lib/src/driver.dart
+++ b/pkg/analyzer2dart/lib/src/driver.dart
@@ -10,6 +10,8 @@
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source_io.dart';
 
+import 'package:compiler/compiler.dart';
+
 import 'closed_world.dart';
 import 'tree_shaker.dart';
 
@@ -19,8 +21,9 @@
 class Driver {
   final ResourceProvider resourceProvider;
   final AnalysisContext context;
+  final CompilerOutputProvider outputProvider;
 
-  Driver(this.resourceProvider, DartSdk sdk)
+  Driver(this.resourceProvider, DartSdk sdk, this.outputProvider)
       : context = AnalysisEngine.instance.createAnalysisContext() {
     // Set up the source factory.
     // TODO(paulberry): do we want to use ExplicitPackageUriResolver?
@@ -36,8 +39,7 @@
    * Compute the closed world that is reachable from an entry point.
    */
   ClosedWorld computeWorld(FunctionElement entryPointElement) {
-    TreeShaker treeShaker = new TreeShaker();
-    treeShaker.addElement(entryPointElement);
+    TreeShaker treeShaker = new TreeShaker(entryPointElement);
     return treeShaker.shake();
   }
 
diff --git a/pkg/analyzer2dart/lib/src/element_converter.dart b/pkg/analyzer2dart/lib/src/element_converter.dart
new file mode 100644
index 0000000..1fb29de
--- /dev/null
+++ b/pkg/analyzer2dart/lib/src/element_converter.dart
@@ -0,0 +1,432 @@
+// Copyright (c) 2014, 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.
+
+/// Convertion of elements between the analyzer element model and the dart2js
+/// element model.
+
+library analyzer2dart.element_converter;
+
+import 'package:compiler/implementation/elements/elements.dart' as dart2js;
+import 'package:compiler/implementation/elements/modelx.dart' as modelx;
+import 'package:compiler/implementation/util/util.dart' as util;
+import 'package:compiler/implementation/dart_types.dart';
+import 'package:analyzer/src/generated/element.dart' as analyzer;
+
+class ElementConverter {
+  /// Map from analyzer elements to their equivalent dart2js elements.
+  Map<analyzer.Element, dart2js.Element> conversionMap =
+      <analyzer.Element, dart2js.Element>{};
+
+  /// Map from dart2js elements to their equivalent analyzer elements.
+  Map<dart2js.Element, analyzer.Element> inversionMap =
+      <dart2js.Element, analyzer.Element>{};
+
+  ElementConverterVisitor visitor;
+
+  ElementConverter() {
+    visitor = new ElementConverterVisitor(this);
+  }
+
+  dart2js.Element convertElement(analyzer.Element input) {
+    return conversionMap.putIfAbsent(input, () {
+      dart2js.Element output = convertElementInternal(input);
+      inversionMap[output] = input;
+      return output;
+    });
+  }
+
+  analyzer.Element invertElement(dart2js.Element input) {
+    return inversionMap[input];
+  }
+
+  dart2js.Element convertElementInternal(analyzer.Element input) {
+    dart2js.Element output = input.accept(visitor);
+    if (output != null) return output;
+    throw new UnsupportedError(
+        "Conversion of $input (${input.runtimeType}) is not supported.");
+  }
+}
+
+/// Visitor that converts analyzer elements to dart2js elements.
+class ElementConverterVisitor
+    extends analyzer.SimpleElementVisitor<dart2js.Element> {
+  final ElementConverter converter;
+
+  ElementConverterVisitor(this.converter);
+
+  @override
+  dart2js.LibraryElement visitLibraryElement(analyzer.LibraryElement input) {
+    return new LibraryElementY(converter, input);
+  }
+
+  @override
+  dart2js.FunctionElement visitFunctionElement(analyzer.FunctionElement input) {
+    return new TopLevelFunctionElementY(converter, input);
+  }
+}
+
+/// Base [dart2js.Element] implementation for converted analyzer elements.
+class ElementY extends dart2js.Element {
+  final ElementConverter converter;
+  final analyzer.Element element;
+
+  @override
+  String get name => element.name;
+
+  ElementY(this.converter, this.element);
+
+  @override
+  dart2js.LibraryElement get implementationLibrary => library;
+
+  @override
+  dart2js.Element get origin => this;
+
+  @override
+  dart2js.Element get patch => null;
+
+  @override
+  dart2js.Element get declaration => this;
+
+  @override
+  dart2js.Element get implementation => this;
+
+  @override
+  bool get isPatch => false;
+
+  @override
+  bool get isPatched => false;
+
+  @override
+  dart2js.LibraryElement get library {
+    return converter.convertElement(element.library);
+  }
+
+  unsupported(String method) {
+    throw new UnsupportedError(
+        "'$method' is unsupported on $this ($runtimeType)");
+  }
+
+
+  @override
+  bool get isFinal => unsupported('isFinal');
+
+  @override
+  bool get isStatic => unsupported('isStatic');
+
+  @override
+  bool isForeign(_) => unsupported('isForeign');
+
+  @override
+  bool get impliesType => unsupported('impliesType');
+
+  @override
+  bool get isOperator => unsupported('impliesType');
+
+  @override
+  get position => unsupported('position');
+
+  @override
+  computeType(_) => unsupported('computeType');
+
+  @override
+  get enclosingElement => unsupported('enclosingElement');
+
+  @override
+  accept(_) => unsupported('accept');
+
+  @override
+  void addMetadata(_) => unsupported('addMetadata');
+
+  @override
+  get analyzableElement => unsupported('analyzableElement');
+
+  @override
+  asFunctionElement() => unsupported('asFunctionElement');
+
+  @override
+  buildScope() => unsupported('buildScope');
+
+  @override
+  get compilationUnit => unsupported('compilationUnit');
+
+  @override
+  get contextClass => unsupported('contextClass');
+
+  @override
+  void diagnose(context, listener) => unsupported('diagnose');
+
+  @override
+  get enclosingClass => unsupported('enclosingClass');
+
+  @override
+  get enclosingClassOrCompilationUnit {
+    return unsupported('enclosingClassOrCompilationUnit');
+  }
+
+  @override
+  String get fixedBackendName => unsupported('fixedBackendName');
+
+  @override
+  bool get hasFixedBackendName => unsupported('hasFixedBackendName');
+
+  @override
+  bool get isAbstract => unsupported('isAbstract');
+
+  @override
+  bool get isAssignable => unsupported('isAssignable');
+
+  @override
+  bool get isClassMember => unsupported('isClassMember');
+
+  @override
+  bool get isClosure => unsupported('isClosure');
+
+  @override
+  bool get isConst => unsupported('isConst');
+
+  @override
+  bool get isDeclaration => unsupported('isDeclaration');
+
+  @override
+  bool get isDeferredLoaderGetter => unsupported('isDeferredLoaderGetter');
+
+  @override
+  bool get isFactoryConstructor => unsupported('isFactoryConstructor');
+
+  @override
+  bool get isForwardingConstructor => unsupported('isForwardingConstructor');
+
+  @override
+  bool get isImplementation => unsupported('isImplementation');
+
+  @override
+  bool get isInjected => unsupported('isInjected');
+
+  @override
+  bool get isInstanceMember => unsupported('isInstanceMember');
+
+  @override
+  bool get isMixinApplication => unsupported('isMixinApplication');
+
+  @override
+  bool get isNative => unsupported('isNative');
+
+  @override
+  bool get isSynthesized => unsupported('isSynthesized');
+
+  @override
+  bool get isTopLevel => unsupported('isTopLevel');
+
+  @override
+  get kind => unsupported('kind');
+
+  @override
+  get metadata => unsupported('metadata');
+
+  @override
+  get outermostEnclosingMemberOrTopLevel {
+    return unsupported('outermostEnclosingMemberOrTopLevel');
+  }
+
+  @override
+  void setFixedBackendName(String name) => unsupported('setFixedBackendName');
+
+  @override
+  void setNative(String name) => unsupported('setNative');
+}
+
+class LibraryElementY extends ElementY implements dart2js.LibraryElement {
+  analyzer.LibraryElement get element => super.element;
+
+  @override
+  dart2js.ElementKind get kind => dart2js.ElementKind.LIBRARY;
+
+  // TODO(johnniwinther): Ensure the correct semantics of this.
+  @override
+  bool get isInternalLibrary => isPlatformLibrary && element.isPrivate;
+
+  // TODO(johnniwinther): Ensure the correct semantics of this.
+  @override
+  bool get isPlatformLibrary => element.isInSdk;
+
+  @override
+  bool get isDartCore => element.isDartCore;
+
+  LibraryElementY(ElementConverter converter, analyzer.LibraryElement element)
+      : super(converter, element);
+
+  @override
+  void addCompilationUnit(_) => unsupported('addCompilationUnit');
+
+  @override
+  void addImport(element, import, listener) => unsupported('addImport');
+
+  @override
+  void addMember(element, listener) => unsupported('addMember');
+
+  @override
+  void addTag(tag, listener) => unsupported('addTag');
+
+  @override
+  void addToScope(element, listener) => unsupported('addToScope');
+
+  @override
+  void set canUseNative(bool value) => unsupported('canUseNative');
+
+  @override
+  bool get canUseNative => unsupported('canUseNative');
+
+  @override
+  Uri get canonicalUri => unsupported('canonicalUri');
+
+  @override
+  int compareTo(other) => unsupported('compareTo');
+
+  @override
+  get compilationUnits => unsupported('compilationUnits');
+
+  @override
+  get entryCompilationUnit => unsupported('entryCompilationUnit');
+
+  @override
+  get exports => unsupported('exports');
+
+  @override
+  bool get exportsHandled => unsupported('exportsHandled');
+
+  @override
+  find(String elementName) => unsupported('find');
+
+  @override
+  findExported(String elementName) => unsupported('findExported');
+
+  @override
+  findLocal(String elementName) => unsupported('findLocal');
+
+  @override
+  void forEachExport(_) => unsupported('forEachExport');
+
+  @override
+  void forEachLocalMember(_) => unsupported('forEachLocalMember');
+
+  @override
+  getImportsFor(element) => unsupported('getImportsFor');
+
+  @override
+  getLibraryFromTag(tag) => unsupported('getLibraryFromTag');
+
+  @override
+  String getLibraryName() => unsupported('getLibraryName');
+
+  @override
+  String getLibraryOrScriptName() => unsupported('getLibraryOrScriptName');
+
+  @override
+  getNonPrivateElementsInScope() => unsupported('getNonPrivateElementsInScope');
+
+  @override
+  bool hasLibraryName() => unsupported('hasLibraryName');
+
+  @override
+  bool get hasTreeElements => unsupported('hasTreeElements');
+
+  @override
+  bool get isPackageLibrary => unsupported('isPackageLibrary');
+
+  @override
+  get libraryTag => unsupported('libraryTag');
+
+  @override
+  void set libraryTag(value) => unsupported('libraryTag');
+
+  @override
+  localLookup(elementName) => unsupported('localLookup');
+
+  @override
+  void recordResolvedTag(tag, library) => unsupported('recordResolvedTag');
+
+  @override
+  void setExports(exportedElements) => unsupported('setExports');
+
+  @override
+  get tags => unsupported('tags');
+
+  @override
+  get treeElements => unsupported('treeElements');
+}
+
+class TopLevelFunctionElementY extends ElementY
+    implements dart2js.FunctionElement {
+  analyzer.FunctionElement get element => super.element;
+
+  final dart2js.FunctionSignature functionSignature =
+      new modelx.FunctionSignatureX(
+          const util.Link<dart2js.Element>(),
+          const util.Link<dart2js.Element>(),
+          0, 0, false, const <dart2js.Element>[],
+          new FunctionType.synthesized());
+
+
+  // TODO(johnniwinther): Ensure the correct semantics of this.
+  @override
+  bool get isFactoryConstructor => false;
+
+  @override
+  bool get isStatic {
+    // Semantic difference: Analyzer considers top-level and static class
+    // members to be static, dart2js only considers static class members to be
+    // static.
+    return false;
+  }
+
+  // TODO(johnniwinther): Ensure the correct semantics of this.
+  @override
+  bool get isAbstract => false;
+
+  @override
+  dart2js.ElementKind get kind => dart2js.ElementKind.FUNCTION;
+
+  @override
+  bool get isClassMember => false;
+
+  @override
+  bool get isInstanceMember => false;
+
+  @override
+  bool get isTopLevel => true;
+
+  TopLevelFunctionElementY(ElementConverter converter,
+                           analyzer.FunctionElement element)
+      : super(converter, element);
+
+  @override
+  get abstractField => unsupported('abstractField');
+
+  @override
+  computeSignature(_) => unsupported('computeSignature');
+
+  @override
+  bool get hasNode => unsupported('hasNode');
+
+  @override
+  bool get hasResolvedAst => unsupported('hasResolvedAst');
+
+  @override
+  bool get hasTreeElements => unsupported('hasTreeElements');
+
+  @override
+  get memberContext => unsupported('memberContext');
+
+  @override
+  get node => unsupported('node');
+
+  @override
+  get resolvedAst => unsupported('resolvedAst');
+
+  @override
+  get treeElements => unsupported('treeElements');
+
+  @override
+  FunctionType get type => functionSignature.type;
+}
diff --git a/pkg/analyzer2dart/lib/src/tree_shaker.dart b/pkg/analyzer2dart/lib/src/tree_shaker.dart
index 03a3bf9..1b50580 100644
--- a/pkg/analyzer2dart/lib/src/tree_shaker.dart
+++ b/pkg/analyzer2dart/lib/src/tree_shaker.dart
@@ -15,9 +15,14 @@
 class TreeShaker {
   List<Element> _queue = <Element>[];
   Set<Element> _alreadyEnqueued = new HashSet<Element>();
-  ClosedWorld _world = new ClosedWorld();
+  ClosedWorld _world;
   Set<Selector> _selectors = new HashSet<Selector>();
 
+  TreeShaker(FunctionElement mainFunction)
+      : _world = new ClosedWorld(mainFunction) {
+    addElement(mainFunction);
+  }
+
   void addElement(Element element) {
     if (_alreadyEnqueued.add(element)) {
       _queue.add(element);
@@ -96,6 +101,19 @@
   }
 }
 
+Selector createSelectorFromMethodInvocation(MethodInvocation node) {
+  int arity = 0;
+  List<String> namedArguments = <String>[];
+  for (var x in node.argumentList.arguments) {
+    if (x is NamedExpression) {
+      namedArguments.add(x.name.label.name);
+    } else {
+      arity++;
+    }
+  }
+  return new Selector.call(node.methodName.name, null, arity, namedArguments);
+}
+
 class TreeShakingVisitor extends RecursiveAstVisitor {
   final TreeShaker treeShaker;
 
@@ -106,17 +124,7 @@
    * a non-static method).
    */
   void handleMethodCall(MethodInvocation node) {
-    int arity = 0;
-    List<String> namedArguments = <String>[];
-    for (var x in node.argumentList.arguments) {
-      if (x is NamedExpression) {
-        namedArguments.add(x.name.label.name);
-      } else {
-        arity++;
-      }
-    }
-    treeShaker.addSelector(
-        new Selector.call(node.methodName.name, null, arity, namedArguments));
+    treeShaker.addSelector(createSelectorFromMethodInvocation(node));
   }
 
   @override
diff --git a/pkg/analyzer2dart/test/driver_test.dart b/pkg/analyzer2dart/test/driver_test.dart
index 557a608..fc221ae 100644
--- a/pkg/analyzer2dart/test/driver_test.dart
+++ b/pkg/analyzer2dart/test/driver_test.dart
@@ -2,12 +2,13 @@
 // 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:analysis_testing/mock_sdk.dart';
+import 'mock_sdk.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
+import 'package:compiler/implementation/dart2jslib.dart' show NullSink;
 import 'package:unittest/unittest.dart';
 
 import '../lib/src/closed_world.dart';
@@ -19,7 +20,7 @@
   setUp(() {
     provider = new MemoryResourceProvider();
     DartSdk sdk = new MockSdk();
-    driver = new Driver(provider, sdk);
+    driver = new Driver(provider, sdk, NullSink.outputProvider);
   });
 
   Source setFakeRoot(String contents) {
diff --git a/pkg/analyzer2dart/test/end2end_test.dart b/pkg/analyzer2dart/test/end2end_test.dart
new file mode 100644
index 0000000..aa51983
--- /dev/null
+++ b/pkg/analyzer2dart/test/end2end_test.dart
@@ -0,0 +1,162 @@
+// Copyright (c) 2014, 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.
+
+/// End-to-end test of the analyzer2dart compiler.
+
+import 'dart:async';
+
+import 'mock_sdk.dart';
+import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/src/generated/element.dart';
+import 'package:analyzer/src/generated/sdk.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:compiler/implementation/dart_backend/backend_ast_to_frontend_ast.dart';
+import 'package:unittest/unittest.dart';
+
+import '../lib/src/closed_world.dart';
+import '../lib/src/driver.dart';
+import '../lib/src/converted_world.dart';
+import '../lib/src/dart_backend.dart';
+
+main() {
+  test('Empty main', () {
+    String expectedResult =  '''
+main() $NEW_BACKEND_COMMENT
+  {}
+
+''';
+    checkResult('''
+main() {}''',
+        expectedResult);
+
+    checkResult('''
+main() {}
+foo() {}''',
+        expectedResult);
+  });
+
+  test('Simple call-chains', () {
+    checkResult('''
+foo() {}
+main() {
+  foo();
+}
+''', '''
+foo() $NEW_BACKEND_COMMENT
+  {}
+
+main() $NEW_BACKEND_COMMENT
+  {
+    foo();
+  }
+
+''');
+
+    checkResult('''
+bar() {}
+foo() {
+  bar();
+}
+main() {
+  foo();
+}
+''', '''
+bar() $NEW_BACKEND_COMMENT
+  {}
+
+foo() $NEW_BACKEND_COMMENT
+  {
+    bar();
+  }
+
+main() $NEW_BACKEND_COMMENT
+  {
+    foo();
+  }
+
+''');
+
+    checkResult('''
+bar() {
+  main();
+}
+foo() {
+  bar();
+}
+main() {
+  foo();
+}
+''', '''
+bar() $NEW_BACKEND_COMMENT
+  {
+    main();
+  }
+
+foo() $NEW_BACKEND_COMMENT
+  {
+    bar();
+  }
+
+main() $NEW_BACKEND_COMMENT
+  {
+    foo();
+  }
+
+''');
+  });
+
+  test('Literals', () {
+    checkResult('''
+main() {
+  return 0;
+}
+''', '''
+main() $NEW_BACKEND_COMMENT
+  {
+    return 0;
+  }
+
+''');
+  });
+}
+
+checkResult(String input, String expectedOutput) {
+  CollectingOutputProvider outputProvider = new CollectingOutputProvider();
+  MemoryResourceProvider provider = new MemoryResourceProvider();
+  DartSdk sdk = new MockSdk();
+  Driver driver = new Driver(provider, sdk, outputProvider);
+  String rootFile = '/root.dart';
+  provider.newFile(rootFile, input);
+  Source rootSource = driver.setRoot(rootFile);
+  FunctionElement entryPoint = driver.resolveEntryPoint(rootSource);
+  ClosedWorld world = driver.computeWorld(entryPoint);
+  ConvertedWorld convertedWorld = convertWorld(world);
+  compileToDart(driver, convertedWorld);
+  String output = outputProvider.output.text;
+  expect(output, equals(expectedOutput));
+}
+
+class CollectingOutputProvider {
+  StringBufferSink output;
+
+  EventSink<String> call(String name, String extension) {
+    print('outputProvider($name,$extension)');
+    return output = new StringBufferSink();
+  }
+}
+
+class StringBufferSink implements EventSink<String> {
+  StringBuffer sb = new StringBuffer();
+
+  void add(String text) {
+    sb.write(text);
+  }
+
+  void addError(errorEvent, [StackTrace stackTrace]) {}
+
+  void close() {}
+
+  String get text => sb.toString();
+}
+
diff --git a/pkg/analysis_testing/lib/mock_sdk.dart b/pkg/analyzer2dart/test/mock_sdk.dart
similarity index 100%
rename from pkg/analysis_testing/lib/mock_sdk.dart
rename to pkg/analyzer2dart/test/mock_sdk.dart
diff --git a/pkg/analyzer2dart/test/tree_shaker_test.dart b/pkg/analyzer2dart/test/tree_shaker_test.dart
index 6de7969..3106436 100644
--- a/pkg/analyzer2dart/test/tree_shaker_test.dart
+++ b/pkg/analyzer2dart/test/tree_shaker_test.dart
@@ -2,12 +2,13 @@
 // 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:analysis_testing/mock_sdk.dart';
+import 'mock_sdk.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
+import 'package:compiler/implementation/dart2jslib.dart' show NullSink;
 import 'package:unittest/unittest.dart';
 
 import '../lib/src/closed_world.dart';
@@ -176,7 +177,7 @@
   TreeShakerTestHelper(String contents) {
     MemoryResourceProvider provider = new MemoryResourceProvider();
     DartSdk sdk = new MockSdk();
-    Driver driver = new Driver(provider, sdk);
+    Driver driver = new Driver(provider, sdk, NullSink.outputProvider);
     provider.newFile(rootFile, contents);
     Source rootSource = driver.setRoot(rootFile);
     FunctionElement entryPoint = driver.resolveEntryPoint(rootSource);
diff --git a/pkg/barback/example/lazy_transformer/README.md b/pkg/barback/example/lazy_transformer/README.md
new file mode 100644
index 0000000..35c72cc
--- /dev/null
+++ b/pkg/barback/example/lazy_transformer/README.md
@@ -0,0 +1,14 @@
+This example shows how to write a lazy transformer.
+
+This lazy tranformer implements a ROT13 converter. ROT13 (ROTate 13)
+is a classic substitution cipher which replaces each letter in the source
+file with the corresponding letter 13 places later in the alphabet.
+The source file should have a ".txt" extension and the converted file
+is created with a ".shhhh" extension.
+
+Generally, only transformers that take a long time to run should be made lazy.
+This transformer is not particularly slow, but imagine that it might be used
+to convert the entire library of congress&ndash;laziness would then be a virtue.
+
+For more information, see Writing a Lazy Transformer at:
+https://www.dartlang.org/tools/pub/transformers/lazy-transformer.html
diff --git a/pkg/barback/example/lazy_transformer/lib/message.txt b/pkg/barback/example/lazy_transformer/lib/message.txt
new file mode 100644
index 0000000..7f95e57
--- /dev/null
+++ b/pkg/barback/example/lazy_transformer/lib/message.txt
@@ -0,0 +1,21 @@
+Dear Mom,
+
+Hi! How are you? Sorry that I haven't written recently,
+but I hope all is well!
+
+Life is great at University. I'm sure that I can bring
+up my D- in French.
+
+Also, the Dean's office says they won't press charges.
+It was a big todo about nothing - just your typical college
+prank and the badger (UFE's mascot) was eating pretty
+well on my lunch card. And some spackle will fix the
+damage to my dorm room walls right up...
+
+By the way, can I have a loan? $300 would be great.
+
+Thanks so much and I love you!
+
+Your loving son,
+
+     Rodger
diff --git a/pkg/barback/example/lazy_transformer/lib/transformer.dart b/pkg/barback/example/lazy_transformer/lib/transformer.dart
new file mode 100644
index 0000000..5d3e707
--- /dev/null
+++ b/pkg/barback/example/lazy_transformer/lib/transformer.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2014, 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:barback/barback.dart';
+
+import 'dart:async';
+
+class CodedMessageConverter extends Transformer 
+                            implements LazyTransformer {
+
+  // A constructor named "asPlugin" is required. It can be empty, but
+  // it must be present.
+  CodedMessageConverter.asPlugin();
+
+  Future<bool> isPrimary(AssetId id) {
+    return new Future.value(id.extension == '.txt');
+  }
+
+  Future declareOutputs(DeclaringTransform transform) {
+    return new Future.value(transform.primaryId.changeExtension('.shhhhh'));
+  }
+
+  Future apply(Transform transform) {
+    return transform.primaryInput.readAsString().then((content) {
+
+      // The output file is created with the '.shhhhh' extension.
+      var id = transform.primaryInput.id.changeExtension('.shhhhh');
+
+      StringBuffer newContent = new StringBuffer();
+      for (int i = 0; i < content.length; i++ ) {
+        newContent.write(rot13(content[i]));
+      }
+      transform.addOutput(new Asset.fromString(id, newContent.toString()));
+    });
+  }
+
+  rot13(var ch) {
+    var c = ch.codeUnitAt(0);
+    if      (c >= 'a'.codeUnitAt(0) && c <= 'm'.codeUnitAt(0)) c += 13;
+    else if (c >= 'A'.codeUnitAt(0) && c <= 'M'.codeUnitAt(0)) c += 13;
+    else if (c >= 'n'.codeUnitAt(0) && c <= 'z'.codeUnitAt(0)) c -= 13;
+    else if (c >= 'N'.codeUnitAt(0) && c <= 'Z'.codeUnitAt(0)) c -= 13;
+    return new String.fromCharCode(c);
+  }
+}
diff --git a/pkg/barback/example/lazy_transformer/pubspec.yaml b/pkg/barback/example/lazy_transformer/pubspec.yaml
new file mode 100644
index 0000000..e01c5d1
--- /dev/null
+++ b/pkg/barback/example/lazy_transformer/pubspec.yaml
@@ -0,0 +1,11 @@
+name: lazy_transformer
+description: This example implements a very simple lazy transformer
+ which implements a ROT13 converter. ROT13 (ROTate by 13 spaces) is
+ a classic substitution cipher where each letter is replaced by
+ the letter 13 places later in the alphabet.
+
+dependencies:
+  barback: ">=0.14.1 <0.16.0"
+
+transformers:
+- lazy_transformer
diff --git a/pkg/code_transformers/CHANGELOG.md b/pkg/code_transformers/CHANGELOG.md
index 96d2f7c..a471614 100644
--- a/pkg/code_transformers/CHANGELOG.md
+++ b/pkg/code_transformers/CHANGELOG.md
@@ -1,3 +1,11 @@
+## 0.2.3
+
+* Added support for logging stable error messages from transformers.
+
+## 0.2.2
+
+* Added two transformers, 'delete_file' and 'remove_sourcemap_comment'.
+
 ## 0.2.0+3
 
 * Raise the lower bound on the source_maps constraint to exclude incompatible
diff --git a/pkg/code_transformers/lib/assets.dart b/pkg/code_transformers/lib/assets.dart
index 60cc75d..f34d090 100644
--- a/pkg/code_transformers/lib/assets.dart
+++ b/pkg/code_transformers/lib/assets.dart
@@ -11,6 +11,9 @@
 import 'package:path/path.dart' as path;
 import 'package:source_span/source_span.dart';
 
+import 'messages/build_logger.dart';
+import 'src/messages.dart';
+
 /// Create an [AssetId] for a [url] seen in the [source] asset.
 ///
 /// By default this is used to resolve relative urls that occur in HTML assets,
@@ -39,7 +42,8 @@
     }
 
     if (errorOnAbsolute) {
-      logger.warning('absolute paths not allowed: "$url"', span: span);
+      var msg = NO_ABSOLUTE_PATHS.create({'url': url});
+      logger.warning(logger is BuildLogger ? msg : msg.snippet, span: span);
     }
     return null;
   }
@@ -81,10 +85,9 @@
       fixedSegments.addAll(sourceSegments.map((_) => '..'));
       fixedSegments.addAll(segments.sublist(index));
       var fixedUrl = urlBuilder.joinAll(fixedSegments);
-      logger.warning('Invalid url to reach to another package: $url. Path '
-          'reaching to other packages must first reach up all the '
-          'way to the $prefix folder. For example, try changing the url above '
-          'to: $fixedUrl', span: span);
+      var msg = INVALID_URL_TO_OTHER_PACKAGE.create(
+          {'url': url, 'prefix': prefix, 'fixedUrl': fixedUrl});
+      logger.warning(logger is BuildLogger ? msg : msg.snippet, span: span);
       return null;
     }
   }
@@ -100,8 +103,8 @@
   if (prefix != 'packages' && prefix != 'assets') return null;
   var folder = prefix == 'packages' ? 'lib' : 'asset';
   if (segments.length < index + 3) {
-    logger.warning("incomplete $prefix/ path. It should have at least 3 "
-        "segments $prefix/name/path-from-name's-$folder-dir", span: span);
+    var msg = INVALID_PREFIX_PATH.create({'prefix': prefix, 'folder': folder});
+    logger.warning(logger is BuildLogger ? msg : msg.snippet, span: span);
     return null;
   }
   return new AssetId(segments[index + 1],
diff --git a/pkg/code_transformers/lib/messages/build_logger.dart b/pkg/code_transformers/lib/messages/build_logger.dart
new file mode 100644
index 0000000..d8cb86f
--- /dev/null
+++ b/pkg/code_transformers/lib/messages/build_logger.dart
@@ -0,0 +1,145 @@
+// 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 code_transformers.messages.messages_logger;
+
+import 'dart:async';
+import 'dart:convert' show JSON;
+
+import 'package:barback/barback.dart';
+import 'package:source_span/source_span.dart';
+
+import 'messages.dart' show Message, MessageId, BuildLogEntry, LogEntryTable;
+
+/// A [TransformLogger] used to track error and warning messages produced during
+/// a build.
+///
+/// This logger records all messages that were logged and then forwards
+/// the calls to an underlying [TransformLogger]. The internal records support
+/// serializing the errors and emiting them to an asset (so they can be
+/// presented to the user in a web-based client), clustering similar messages
+/// together, sorting messages in order of importance, etc.
+///
+/// The logger also supports reporting error messages as warnings. Barback makes
+/// error messages stop the transformation process, which sometimes can surprise
+/// users. Turning errors into warnings is especially useful when used within
+/// `pub serve`, where we would like the transformation to continue as far as it
+/// can. When this flag is turned on, the level is still recorded as an error,
+/// so a web client UI can still highlight their importance.
+// TODO(sigmund): also cluster messages when they are reported on the
+// command-line.
+class BuildLogger implements TransformLogger {
+  /// Underling transform that is currently active.
+  final Transform _transform;
+
+  /// Logs created during the current transform.
+  final LogEntryTable _logs = new LogEntryTable();
+
+  /// Whether to use `warning` or `error` when forwarding error messages to the
+  /// underlying logger in `_transform.logger`.
+  final bool convertErrorsToWarnings;
+
+  /// Uri prefix to link for additional details. If set, messages logged through
+  /// this logger will contain an additional sentence, telling users to find
+  /// more details at `$detailsUri#packagename_id`.
+  final String detailsUri;
+
+  BuildLogger(this._transform, {this.convertErrorsToWarnings: false,
+      this.detailsUri});
+
+  /// Records a message at the fine level. If [msg] is a [Message] it is
+  /// recorded directly, otherwise it is first converted to a [String].
+  void fine(msg, {AssetId asset, SourceSpan span}) {
+    msg = msg is Message ? msg : new Message.unknown('$msg');
+    _transform.logger.fine(_snippet(msg), asset: asset, span: span);
+    _logs.add(new BuildLogEntry(msg, span, LogLevel.FINE.name));
+  }
+
+  /// Records a message at the info level. If [msg] is a [Message] it is
+  /// recorded directly, otherwise it is first converted to a [String].
+  void info(msg, {AssetId asset, SourceSpan span}) {
+    msg = msg is Message ? msg : new Message.unknown('$msg');
+    _transform.logger.info(_snippet(msg), asset: asset, span: span);
+    _logs.add(new BuildLogEntry(msg, span, LogLevel.INFO.name));
+  }
+
+  /// Records a warning message. If [msg] is a [Message] it is recorded
+  /// directly, otherwise it is first converted to a [String].
+  void warning(msg, {AssetId asset, SourceSpan span}) {
+    msg = msg is Message ? msg : new Message.unknown('$msg');
+    _transform.logger.warning(_snippet(msg), asset: asset, span: span);
+    _logs.add(new BuildLogEntry(msg, span, LogLevel.WARNING.name));
+  }
+
+  /// Records an error message. If [msg] is a [Message] it is recorded
+  /// directly, otherwise it is first converted to a [String].
+  void error(msg, {AssetId asset, SourceSpan span}) {
+    msg = msg is Message ? msg : new Message.unknown('$msg');
+    if (convertErrorsToWarnings) {
+      _transform.logger.warning(_snippet(msg), asset: asset, span: span);
+    } else {
+      _transform.logger.error(_snippet(msg), asset: asset, span: span);
+    }
+    _logs.add(new BuildLogEntry(msg, span, LogLevel.ERROR.name));
+  }
+
+  String _snippet(Message msg) {
+    var s = msg.snippet;
+    if (detailsUri == null) return s;
+    var dot = s.endsWith('.') || s.endsWith('!') || s.endsWith('?') ? '' : '.';
+    var hashTag = '${msg.id.package}_${msg.id.id}';
+    return '$s$dot See $detailsUri#$hashTag for details.';
+  }
+
+  /// Outputs the log data to a JSON serialized file.
+  Future writeOutput() {
+    return _getNextLogAssetPath().then((path) {
+      _transform.addOutput(new Asset.fromString(path,
+          JSON.encode(_logs)));
+    });
+  }
+
+  // Each phase outputs a new log file with an incrementing # appended, this
+  // figures out the next # to use.
+  Future<String> _getNextLogAssetPath([int nextNumber = 1]) {
+    var nextAssetPath = _transform.primaryInput.id.addExtension(
+        '${LOG_EXTENSION}.$nextNumber');
+    return _transform.hasInput(nextAssetPath).then((exists) {
+      if (!exists) return nextAssetPath;
+      return _getNextLogAssetPath(++nextNumber);
+    });
+  }
+
+  // Reads all log files for an Asset into [logs].
+  static Future _readLogFilesForAsset(AssetId id, Transform transform,
+      LogEntryTable entries, [nextNumber = 1]) {
+    var nextAssetPath = id.addExtension('${LOG_EXTENSION}.$nextNumber');
+    return transform.hasInput(nextAssetPath).then((exists) {
+      if (!exists) return null;
+      return transform.readInputAsString(nextAssetPath).then((data) {
+        entries.addAll(new LogEntryTable.fromJson(JSON.decode(data)));
+        return _readLogFilesForAsset(id, transform, entries, ++nextNumber);
+      });
+    });
+  }
+
+  // Combines all existing ._buildLogs.* files into a single ._buildLogs file.
+  static Future combineLogFiles(Transform transform) {
+    var entries = new LogEntryTable();
+    var id = transform.primaryInput.id;
+    return _readLogFilesForAsset(id, transform, entries).then((_) {
+      return transform.addOutput(new Asset.fromString(
+          id.addExtension(LOG_EXTENSION),
+          JSON.encode(entries.toJson())));
+    });
+  }
+
+  // Reads all logs for an asset and adds them to this loggers log output.
+  Future addLogFilesFromAsset(AssetId id, [int nextNumber = 1]) {
+    return _readLogFilesForAsset(id, _transform, _logs);
+  }
+}
+
+/// Extension used for assets that contained serialized logs.
+const String LOG_EXTENSION = '._buildLogs';
diff --git a/pkg/code_transformers/lib/messages/messages.dart b/pkg/code_transformers/lib/messages/messages.dart
new file mode 100644
index 0000000..b30c58e
--- /dev/null
+++ b/pkg/code_transformers/lib/messages/messages.dart
@@ -0,0 +1,230 @@
+// Copyright (c) 2014, 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.
+
+/// Defines messages templates and an adapter for TransformLogger to be able
+/// report error messages from transformers and refer to them in a consistent
+/// manner long term.
+library code_transformers.messages;
+
+// Note: this library purposely doesn't depend on dart:io, dart:html, or barback
+// so it can easily be used both in the transformers and in client-side apps
+// (for example in the log_injector).
+import 'dart:collection' show LinkedHashMap;
+import 'package:source_span/source_span.dart';
+
+/// A globally unique identifier for an error message. This identifier should be
+/// stable, that is, it should never change after it is asigned to a particular
+/// message. That allows us to document our error messages and make them
+/// searchable for prosperity.
+class MessageId implements Comparable {
+  /// Name of the package that declares this message.
+  final String package;
+
+  /// Message identifier number, unique within the package.
+  final int id;
+
+  const MessageId(this.package, this.id);
+
+  static const MessageId NOT_SPECIFIED = const MessageId('unknown', 0);
+
+  /// Serialize this message. We use a string and not a map to encode ids so
+  /// they can be used as keys in JSON maps.
+  String toJson() => toString();
+  
+  toString() => '${package}#$id';
+
+  int compareTo(MessageId other) {
+    var res = package.compareTo(other.package);
+    if (res != 0) return res;
+    return id.compareTo(other.id);
+  }
+
+  /// Creates a new [MessageId] from an encoded value produced via [toJson].
+  factory MessageId.fromJson(data) {
+    var index = data.lastIndexOf('#');
+    if (index == -1) throw 'Invalid message id: $data';
+    return new MessageId(data.substring(0, index),
+        int.parse(data.substring(index + 1)));
+  }
+
+  operator ==(MessageId other) => package == other.package && id == other.id;
+  int get hashCode => 31 * package.hashCode + id;
+}
+
+/// An instance of an error message. These are typically produced from a
+/// [MessageTemplate].
+class Message {
+  /// A globally unique identifier for this message.
+  final MessageId id;
+
+  /// A snippet message that is presented to the user.
+  final String snippet;
+
+  const Message(this.id, this.snippet);
+
+  const Message.unknown(this.snippet) : id = MessageId.NOT_SPECIFIED;
+
+  /// Serializes this message to JSON.
+  Map toJson() => {'id': id.toJson(), 'snippet': snippet};
+  String toString() => 'id: $id, snippet: $snippet';
+
+  /// Creates a new [Message] from an encoded value produced via [toJson].
+  factory Message.fromJson(data) => new Message(
+      new MessageId.fromJson(data['id']), data['snippet']);
+}
+
+/// Template for a message. Templates can include placeholders to indicate
+/// values that are different for each instance of the error. Calling [create]
+/// will generate the actual message, with the placeholders replaced with
+/// values. If there are no placeholders, an instance of [MessageTemplate] is a
+/// valid instance of [Message] as well.
+class MessageTemplate implements Message {
+  /// Unique and stable id for the message.
+  final MessageId id;
+
+  /// Template message with placeholders of the form `%-name-%`.
+  final String snippetTemplate;
+
+  /// This returns the message snippet, only if it the template has no
+  /// placeholders, otherwise this throws an exception. Most messages have no
+  /// placeholder arguments, in those cases, the snippet  can be computed
+  /// without specifying any arguments (exactly like calling `create()` with no
+  /// arguments).
+  String get snippet => _createSnippet();
+
+  /// Short description of the error message, typically used as a title of the
+  /// error message in autogenerated documentation. This should be a single
+  /// phrase, and cannot use placeholders.
+  final String description;
+
+  /// Additional details about this error message. These are used to
+  /// automatically generate documentation.
+  final String details;
+
+  const MessageTemplate(
+      this.id, this.snippetTemplate, this.description, this.details);
+
+  static final _placeholderPattern = new RegExp(r"%-(\w*)-%");
+
+  _createSnippet([Map args = const {}, bool fillUnknowns = false]) {
+    var snippet = snippetTemplate.replaceAllMapped(_placeholderPattern, (m) {
+      var arg = m.group(1);
+      var value = args[arg];
+      if (value != null) return '$value';
+      if (fillUnknowns) return '';
+      throw "missing argument $arg, for error message: $snippetTemplate";
+    });
+    return snippet;
+  }
+
+  create([Map args = const {}, bool fillUnknowns = false]) =>
+      new Message(id, _createSnippet(args, fillUnknowns));
+
+  /// Serializes this message to JSON.
+  Map toJson() => create().toJson();
+  String toString() => '${toJson()}';
+}
+
+/// Represents an actual log entry for a build error message. Including the
+/// actual message, its severity level (warning, error, etc), and a source span
+/// for a code location that is revelant to the message.
+class BuildLogEntry {
+  /// The actual message.
+  final Message message;
+
+  /// Severity level.
+  final String level;
+
+  /// Location associated with this message, if any.
+  final SourceSpan span;
+
+  BuildLogEntry(this.message, this.span, this.level);
+
+  /// Creates a new [BuildLogEntry] from an encoded value produced via [toJson].
+  factory BuildLogEntry.fromJson(Map data) {
+    var spanData = data['span'];
+    var span = null;
+    if (spanData != null) {
+      var locData = spanData['start'];
+      var start = new SourceLocation(locData['offset'],
+          sourceUrl: Uri.parse(locData['url']),
+          line: locData['line'],
+          column: locData['column']);
+      locData = spanData['end'];
+      var end = new SourceLocation(locData['offset'],
+          sourceUrl: Uri.parse(locData['url']),
+          line: locData['line'],
+          column: locData['column']);
+      span = new SourceSpan(start, end, spanData['text']);
+    }
+    return new BuildLogEntry(
+        new Message.fromJson(data['message']), span, data['level']);
+  }
+
+  /// Serializes this log entry to JSON.
+  Map toJson() {
+    var data = {
+        'level': level,
+        'message': message.toJson(),
+    };
+    if (span != null) {
+      data['span'] = {
+        'start': {
+          'url': span.start.sourceUrl.toString(),
+          'offset': span.start.offset,
+          'line': span.start.line,
+          'column': span.start.column,
+        },
+        'end': {
+          'url': span.end.sourceUrl.toString(),
+          'offset': span.end.offset,
+          'line': span.end.line,
+          'column': span.end.column,
+        },
+        'text': span.text,
+      };
+    }
+    return data;
+  }
+  String toString() => '${toJson()}';
+}
+
+/// A table of entries, that clusters error messages by id.
+class LogEntryTable {
+  final Map<MessageId, List<BuildLogEntry>> entries;
+
+  LogEntryTable() : entries = new LinkedHashMap();
+
+  /// Creates a new [LogEntryTable] from an encoded value produced via [toJson].
+  factory LogEntryTable.fromJson(Map json) {
+    var res = new LogEntryTable();
+    for (String key in json.keys) {
+      var id = new MessageId.fromJson(key);
+      res.entries[id] = json[key]
+          .map((v) => new BuildLogEntry.fromJson(v)).toList();
+    }
+    return res;
+  }
+
+
+  /// Serializes this entire table as JSON.
+  Map toJson() {
+    var res = {};
+    entries.forEach((key, value) {
+      res['$key'] = value.map((e) => e.toJson()).toList();
+    });
+    return res;
+  }
+  String toString() => '${toJson()}';
+
+  void add(BuildLogEntry entry) {
+    entries.putIfAbsent(entry.message.id, () => []).add(entry);
+  }
+  void addAll(LogEntryTable other) {
+    for (var key in other.entries.keys) {
+      var values = entries.putIfAbsent(key, () => []);
+      values.addAll(other.entries[key]);
+    }
+  }
+}
diff --git a/pkg/code_transformers/lib/src/delete_file.dart b/pkg/code_transformers/lib/src/delete_file.dart
new file mode 100644
index 0000000..147e346
--- /dev/null
+++ b/pkg/code_transformers/lib/src/delete_file.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2014, 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.
+
+/// Transformer that deletes everything that it sees, but only in release mode.
+library code_transformers.src.delete_file;
+
+import 'dart:async';
+import 'package:barback/barback.dart';
+
+// Deletes all files supplied in release mode.
+class DeleteFile extends Transformer {
+  BarbackSettings settings;
+
+  DeleteFile.asPlugin(this.settings);
+
+  /// Only apply to files in release mode.
+  isPrimary(_) => settings.mode == BarbackMode.RELEASE;
+
+  apply(Transform transform) {
+    transform.consumePrimary();
+  }
+}
diff --git a/pkg/code_transformers/lib/src/messages.dart b/pkg/code_transformers/lib/src/messages.dart
new file mode 100644
index 0000000..ab1b502
--- /dev/null
+++ b/pkg/code_transformers/lib/src/messages.dart
@@ -0,0 +1,172 @@
+// Copyright (c) 2014, 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.
+
+/// Contains all warning messages produced by the code_transformers package.
+library code_transformers.src.messages;
+
+import 'package:code_transformers/messages/messages.dart';
+
+const NO_ABSOLUTE_PATHS = const MessageTemplate(
+    const MessageId('code_transformers', 1),
+    'absolute paths not allowed: "%-url-%"',
+    'Absolute paths not allowed',
+    '''
+The transformers processing your code were trying to resolve a URL and identify
+a file that they correspond to. Currently only relative paths can be resolved.
+''');
+
+const INVALID_URL_TO_OTHER_PACKAGE = const MessageTemplate(
+    const MessageId('code_transformers', 2),
+    'Invalid URL to reach to another package: %-url-%. Path '
+    'reaching to other packages must first reach up all the '
+    'way to the %-prefix-% directory. For example, try changing the URL '
+    'to: %-fixedUrl-%',
+    'Invalid URL to reach another package',
+    '''
+To reach an asset that belongs to another package, use `package:` URLs in
+Dart code, but in any other language (like HTML or CSS) use relative URLs.
+
+These are the rules you must follow to write URLs that refer to files in other
+packages:
+
+  * If the file containing the relative URL is an entrypoint under `web`, use
+    `packages/package_name/path_to_file`
+
+  * If the file containing the URL is under `web`, but in a different directory
+    than your entrypoint, walk out to the same level as the entrypoint first,
+    then enter the `packages` directory.
+
+    **Note**: If two entrypoints include the file under `web` containing the
+    URL, either both entrypoints have to live in the same directory, or you need
+    to move the file to the `lib` directory.
+
+  * If the file containing the URL lives under `lib`, walk up as many levels as
+    directories you have + 1. This is because code in `lib/a/b` is loaded from
+    `packages/package_name/a/b`.
+
+The rules are easier to follow if you know how the code is laid out for
+Dartium before you build, and how it is laid out after you build it with `pub
+build`. Consider the following example:
+
+   package a
+      lib/
+        |- a1.html
+
+      web/
+        |- a2.html
+
+   package b
+      lib/
+        |- b1.html
+        |- b2/
+            |- b3.html
+
+   package c
+      lib/
+        |- c3.html
+
+      web/
+        |- index.html
+        |- index.dart
+        |- c1/
+            |- c2.html
+
+If your app is package `c`, then `pub get` generates a packages directory under
+the web directory, like this:
+
+      web/
+        |- index.html
+        |- index.dart
+        |- c1/
+        |   |- c2.html
+        |- packages/
+            |- a/
+            |   |- a1.html
+            |- b/
+            |   |- b1.html
+            |   |- b2/
+            |       |- b3.html
+            |- c/
+                |- c3.html
+
+Note that no `lib` directory is under the `packages` directory.
+When you launch `web/index.html` in Dartium, Dartium loads `package:` imports from
+`web/packages/`.
+
+If you need to refer to any file in other packages from `index.html`, you can
+simply do `packages/package_name/path_to_file`. For example
+`packages/b/b2/b3.html`. From `index.html` you can also refer to files under the
+web directory of the same package using a simple relative URL, like
+`c1/c2.html`.
+
+However, if you want to load `a1.html` from `c2.html`, you need to reach out to
+the packages directory that lives next to your entrypoint and then load the file
+from there, for example `../packages/a/a1.html`. Because pub generates symlinks
+to the packages directory also under c1, you may be tempted to write
+`packages/a/a1.html`, but that is incorrect - it would yield a canonicalization
+error (see more below).
+
+If you want to load a file from the lib directory of your own package, you
+should also use a package URL. For example, `packages/c/c3.html` and not
+`../lib/c3.html`. This will allow you to write code in `lib` in a way that it
+can be used within and outside your package without making any changes to it.
+
+Because any time you reach inside a `lib/` directory you do so using a
+`packages/` URL, the rules for reaching into other files in other packages are
+always consistent: go up to exit the `packages` directory and go back inside to
+the file you are looking for.  For example, to reach `a1.html` from `b3.html`
+you need to write `../../../packages/a/a1.html`.
+
+The motivation behind all these rules is that URLs need to work under many
+scenarios at once:
+
+  * They need to work in Dartium without any code transformation: resolving the
+    path in the context of a simple HTTP server, or using `file:///` URLs,
+    should yield a valid path to assets. The `packages` directory is safe to use
+    because pub already creates it next to entrypoints of your application.
+
+  * They need to be canonical. To take advantage of caching, multiple URLs
+    reaching the same asset should resolve to the same absolute URL.
+    
+    Also, in projects that use HTML imports (like polymer) tools support that
+    you reach a library with either Dart imports or HTML imports, and correctly
+    resolve them to be the same library. The rules are designed to allow tools
+    to support this.
+
+    For example, consider you have an import might like:
+
+        <link rel=import href=packages/a/a.html>
+
+    where a.html has `<script type="application/dart" src="a.dart">`. If your
+    Dart entrypoint also loads `"package:a/a.dart"`,  then a tool need to make
+    sure that both versions of `a.dart` are loaded from the same URL. Otherwise,
+    you may see errors at runtime like: `A is not a subtype of A`, which can be
+    extremely confusing.
+
+    When you follow the rules above, our tools can detect the pattern in the
+    HTML-import URL containing `packages/` and canonicalize the import
+    by converting `packages/a/a.dart` into `package:a/a.dart` under the hood.
+
+  * They need to continue to be valid after applications are built.
+    Technically this could be done automatically with pub transformers, but to
+    make sure that code works also in Dartium with a simple HTTP Server,
+    existing transformers do not fix URLs, they just detect inconsistencies and
+    produce an error message like this one, instead.
+''');
+
+const INVALID_PREFIX_PATH = const MessageTemplate(
+    const MessageId('code_transformers', 3),
+    'incomplete %-prefix-%/ path. It should have at least 3 '
+    'segments %-prefix-%/name/path_from_name\'s_%-folder-%_dir',
+    'Incomplete URL to asset in another package',
+    '''
+URLs that refer to assets in other packages need to explicitly mention the
+`packages/` directory. In the future this requirement might be removed, but for
+now you must use a canonical URL form for it.
+
+For example, if `packages/a/a.html` needs to import `packages/b/b.html`,
+you might expect a.html to import `../b/b.html`. Instead, it must import
+`../../packages/b/b.html`.
+See [issue 15797](http://dartbug.com/15797).
+''');
diff --git a/pkg/code_transformers/lib/src/remove_sourcemap_comment.dart b/pkg/code_transformers/lib/src/remove_sourcemap_comment.dart
new file mode 100644
index 0000000..6adf467
--- /dev/null
+++ b/pkg/code_transformers/lib/src/remove_sourcemap_comment.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2014, 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.
+
+/// Transformer that removes any sourcemap comments from javascript files.
+library code_transformers.src.remove_sourcemap_comment;
+
+import 'dart:async';
+import 'package:barback/barback.dart';
+
+/// Transformer that removes any sourcemap comments from javascript files.
+/// Comments should be on their own line in the form: //# sourceMappingURL=*.map
+class RemoveSourcemapComment extends Transformer {
+  BarbackSettings settings;
+
+  RemoveSourcemapComment.asPlugin(this.settings);
+
+  /// Only apply to files in release mode.
+  isPrimary(_) => settings.mode == BarbackMode.RELEASE;
+
+  apply(Transform transform) {
+    var id = transform.primaryInput.id;
+    return transform.readInputAsString(id).then((file) {
+      if (file.contains(_SOURCE_MAP_COMMENT)) {
+        transform.addOutput(new Asset.fromString(
+            id, file.replaceAll(_SOURCE_MAP_COMMENT, '')));
+      }
+    });
+  }
+}
+
+final RegExp _SOURCE_MAP_COMMENT = new RegExp(r'\n\s*\/\/# sourceMappingURL.*');
diff --git a/pkg/code_transformers/pubspec.yaml b/pkg/code_transformers/pubspec.yaml
index a50e61c..9256127 100644
--- a/pkg/code_transformers/pubspec.yaml
+++ b/pkg/code_transformers/pubspec.yaml
@@ -1,5 +1,5 @@
 name: code_transformers
-version: 0.2.1
+version: 0.2.3
 author: "Dart Team <misc@dartlang.org>"
 description: Collection of utilities related to creating barback transformers.
 homepage: http://www.dartlang.org
diff --git a/pkg/code_transformers/test/assets_test.dart b/pkg/code_transformers/test/assets_test.dart
index 4a130b7..d069d2a 100644
--- a/pkg/code_transformers/test/assets_test.dart
+++ b/pkg/code_transformers/test/assets_test.dart
@@ -66,10 +66,10 @@
     testAssetUri('does not allow packages from non-dart lib files',
         source: new AssetId('a', 'lib/index.html'),
         uri: 'packages/foo/bar',
-        message: 'warning: Invalid url to reach to another package: '
+        message: 'warning: Invalid URL to reach to another package: '
             'packages/foo/bar. Path reaching to other packages must first '
-            'reach up all the way to the packages folder. For example, try '
-            'changing the url above to: ../../packages/foo/bar');
+            'reach up all the way to the packages directory. For example, try '
+            'changing the URL to: ../../packages/foo/bar');
 
     testAssetUri('allows relative packages from non-dart lib files',
         source: new AssetId('a', 'lib/index.html'),
diff --git a/pkg/code_transformers/test/messages_test.dart b/pkg/code_transformers/test/messages_test.dart
new file mode 100644
index 0000000..b03ca1c
--- /dev/null
+++ b/pkg/code_transformers/test/messages_test.dart
@@ -0,0 +1,111 @@
+// Copyright (c) 2014, 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.
+
+/// Tests for some of the utility helper functions used by the compiler.
+library polymer.test.build.messages_test;
+
+import 'dart:convert';
+import 'package:unittest/unittest.dart';
+import 'package:code_transformers/messages/messages.dart';
+import 'package:source_span/source_span.dart';
+
+main() {
+  group('snippet', () {
+    test('template with no-args works', () {
+      expect(new MessageTemplate(_id('code_transformers', 1),
+            'this message has no args', '', '').snippet,
+          'this message has no args');
+    });
+
+    test('template with args throws', () {
+      expect(() => new MessageTemplate(_id('code_transformers', 1),
+            'this message has %-args-%', '', '')
+          .snippet,
+          throws);
+    });
+
+    test('can pass arguments to create snippet', () {
+      expect(new MessageTemplate(_id('code_transformers', 1),
+            'a %-b-% c something %-name-% too', '', '')
+          .create({'b': "1", 'name': 'foo'}).snippet,
+          'a 1 c something foo too');
+    });
+  });
+
+  test('equals', () {
+      expect(new MessageId('hi', 23) == new MessageId('hi', 23), isTrue);
+      expect(new MessageId('foo', 23) != new MessageId('bar', 23), isTrue);
+      expect(new MessageId('foo', 22) != new MessageId('foo', 23), isTrue);
+  });
+
+  for (var encode in [true, false]) {
+    var toJson = encode 
+        ? (o) => o.toJson()
+        : (o) => JSON.decode(JSON.encode(o));
+    group('serialize/deserialize ${encode ? "and stringify": ""}', () {
+      test('message id', () {
+        _eq(msg) {
+          expect(new MessageId.fromJson(toJson(msg)) == msg, isTrue);
+        }
+        _eq(const MessageId('hi', 23));
+        _eq(new MessageId('hi', 23));
+        _eq(new MessageId('a_b', 23));
+        _eq(new MessageId('a-b', 23));
+        _eq(new MessageId('a-b-', 3));
+        _eq(new MessageId('a', 21));
+      });
+
+      test('message', () {
+        _eq(msg) {
+          var parsed = new Message.fromJson(toJson(msg));
+          expect(msg.id, parsed.id);
+          expect(msg.snippet, parsed.snippet);
+        }
+        _eq(new Message(_id('hi', 33), 'snippet here'));
+        _eq(new MessageTemplate(_id('hi', 33), 'snippet', 'ignored', 'ignored'));
+      });
+
+      test('log entry', () {
+        _eq(entry) {
+          var parsed = new BuildLogEntry.fromJson(toJson(entry));
+          expect(entry.message.id, parsed.message.id);
+          expect(entry.message.snippet, entry.message.snippet);
+          expect(entry.level, parsed.level);
+          expect(entry.span, parsed.span);
+        }
+        _eq(_entry(33, 'hi there', 12));
+        _eq(_entry(33, 'hi there-', 11));
+      });
+
+      test('log entry table', () {
+        var table = new LogEntryTable();
+        table.add(_entry(11, 'hi there', 23));
+        table.add(_entry(13, 'hi there', 21));
+        table.add(_entry(11, 'hi there', 26));
+        expect(table.entries.length, 2);
+        expect(table.entries[_id('hi', 11)].length, 2);
+        expect(table.entries[_id('hi', 13)].length, 1);
+
+        var table2 = new LogEntryTable.fromJson(toJson(table));
+        expect(table2.entries.length, 2);
+        expect(table2.entries[_id('hi', 11)].length, 2);
+        expect(table2.entries[_id('hi', 13)].length, 1);
+        expect(table2.entries[_id('hi', 11)][0].span,
+            table.entries[_id('hi', 11)][0].span);
+        expect(table2.entries[_id('hi', 11)][1].span,
+            table.entries[_id('hi', 11)][1].span);
+        expect(table2.entries[_id('hi', 13)][0].span,
+            table.entries[_id('hi', 13)][0].span);
+      });
+    });
+  }
+}
+_id(s, i) => new MessageId(s, i);
+_entry(id, snippet, offset) => new BuildLogEntry(
+    new Message(_id('hi', id), snippet),
+    new SourceSpan(
+      new SourceLocation(offset, sourceUrl: 'a', line: 1, column: 3),
+      new SourceLocation(offset + 2, sourceUrl: 'a', line: 1, column: 5),
+      'hi'),
+    'Warning');
diff --git a/pkg/code_transformers/test/remove_sourcemap_comment_test.dart b/pkg/code_transformers/test/remove_sourcemap_comment_test.dart
new file mode 100644
index 0000000..6a9720d
--- /dev/null
+++ b/pkg/code_transformers/test/remove_sourcemap_comment_test.dart
@@ -0,0 +1,27 @@
+// 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 code_transformers.test.remove_sourcemap_comment_test;
+
+import 'package:barback/barback.dart';
+import 'package:code_transformers/src/remove_sourcemap_comment.dart';
+import 'package:code_transformers/tests.dart';
+import 'package:unittest/compact_vm_config.dart';
+import 'package:unittest/unittest.dart';
+
+final phases = [[new RemoveSourcemapComment.asPlugin(
+    new BarbackSettings({}, BarbackMode.RELEASE))]];
+
+void main() {
+  useCompactVMConfiguration();
+
+  testPhases('removes sourcemap comments', phases, {
+      'a|web/test.js': '''
+          var i = 0;
+          //# sourceMappingURL=*.map''',
+  }, {
+      'a|web/test.js': '''
+          var i = 0;''',
+  });
+}
diff --git a/pkg/code_transformers/test/unique_message_test.dart b/pkg/code_transformers/test/unique_message_test.dart
new file mode 100644
index 0000000..4b1c924
--- /dev/null
+++ b/pkg/code_transformers/test/unique_message_test.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2014, 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.
+
+/// Tests for some of the utility helper functions used by the compiler.
+library polymer.test.build.messages_test;
+
+import 'dart:mirrors';
+
+import 'package:unittest/unittest.dart';
+import 'package:code_transformers/messages/messages.dart' show Message;
+
+import 'package:code_transformers/src/messages.dart' as p1;
+
+/// [p1] is accessed via mirrors, this comment prevents the analyzer from
+/// complaining about it.
+main() {
+  test('each message id is unique', () {
+    var seen = {};
+    int total = 0;
+    var mirrors = currentMirrorSystem();
+    var lib = mirrors.findLibrary(#code_transformers.src.messages);
+    expect(lib, isNotNull);
+    lib.declarations.forEach((symbol, decl) {
+      if (decl is! VariableMirror) return;
+      var field = lib.getField(symbol).reflectee;
+      var name = MirrorSystem.getName(symbol);
+      if (field is! Message) return;
+      var id = field.id;
+      expect(seen.containsKey(id), isFalse, reason: 'Duplicate id `$id`. '
+          'Currently set for both `$name` and `${seen[id]}`.');
+      seen[id] = name;
+      total++;
+    });
+    expect(seen.length, total);
+  });
+}
diff --git a/pkg/docgen/bin/docgen.dart b/pkg/docgen/bin/docgen.dart
index f55a807..ac6b364 100644
--- a/pkg/docgen/bin/docgen.dart
+++ b/pkg/docgen/bin/docgen.dart
@@ -108,7 +108,7 @@
       help: 'Flag to include private declarations.', negatable: false);
   parser.addFlag('include-sdk',
       help: 'Flag to parse SDK Library files.',
-      defaultsTo: true,
+      defaultsTo: false,
       negatable: true);
   parser.addFlag('parse-sdk',
       help: 'Parses the SDK libraries only.',
diff --git a/pkg/glob/test/match_test.dart b/pkg/glob/test/match_test.dart
index eeb307d..ad9dcf3 100644
--- a/pkg/glob/test/match_test.dart
+++ b/pkg/glob/test/match_test.dart
@@ -6,8 +6,12 @@
 import 'package:path/path.dart' as p;
 import 'package:unittest/unittest.dart';
 
-const ASCII_WITHOUT_SLASH = "\t\n\r !\"#\$%&'()*+`-.0123456789:;<=>?@ABCDEFGHIJ"
-    "KLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
+const RAW_ASCII_WITHOUT_SLASH = "\t\n\r !\"#\$%&'()*+`-.0123456789:;<=>?@ABCDEF"
+    "GHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~";
+
+// URL-encode the path for a URL context.
+final asciiWithoutSlash = p.style == p.Style.url ?
+    Uri.encodeFull(RAW_ASCII_WITHOUT_SLASH) : RAW_ASCII_WITHOUT_SLASH;
 
 void main() {
   test("literals match exactly", () {
@@ -16,10 +20,15 @@
     expect("foo*", contains(new Glob(r"foo\*")));
   });
 
+  test("backslashes match nothing on Windows", () {
+    expect(r"foo\bar",
+        isNot(contains(new Glob(r"foo\\bar", context: p.windows))));
+  });
+
   group("star", () {
     test("matches non-separator characters", () {
       var glob = new Glob("*");
-      expect(ASCII_WITHOUT_SLASH, contains(glob));
+      expect(asciiWithoutSlash, contains(glob));
     });
 
     test("matches the empty string", () {
@@ -36,7 +45,7 @@
   group("double star", () {
     test("matches non-separator characters", () {
       var glob = new Glob("**");
-      expect(ASCII_WITHOUT_SLASH, contains(glob));
+      expect(asciiWithoutSlash, contains(glob));
     });
 
     test("matches the empty string", () {
@@ -65,7 +74,8 @@
   group("any char", () {
     test("matches any non-separator character", () {
       var glob = new Glob("foo?");
-      for (var char in ASCII_WITHOUT_SLASH.split('')) {
+      for (var char in RAW_ASCII_WITHOUT_SLASH.split('')) {
+        if (p.style == p.Style.url) char = Uri.encodeFull(char);
         expect("foo$char", contains(glob));
       }
     });
diff --git a/pkg/glob/test/parse_test.dart b/pkg/glob/test/parse_test.dart
index 5ea3f05..498d035 100644
--- a/pkg/glob/test/parse_test.dart
+++ b/pkg/glob/test/parse_test.dart
@@ -3,11 +3,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:glob/glob.dart';
+import 'package:path/path.dart' as p;
 import 'package:unittest/unittest.dart';
 
 void main() {
   test("supports backslash-escaped characters", () {
-    expect(r"\*[]{,}?()", contains(new Glob(r"\\\*\[\]\{\,\}\?\(\)")));
+    expect(r"*[]{,}?()", contains(new Glob(r"\*\[\]\{\,\}\?\(\)")));
+    if (p.style != p.Style.windows) {
+      expect(r"foo\bar", contains(new Glob(r"foo\\bar")));
+    }
   });
 
   test("disallows an empty glob", () {
diff --git a/pkg/intl/CHANGELOG.md b/pkg/intl/CHANGELOG.md
index 7b889f6..aebfa3b 100644
--- a/pkg/intl/CHANGELOG.md
+++ b/pkg/intl/CHANGELOG.md
@@ -1,7 +1,11 @@
-## 0.11.7-dev
+## 0.11.7
+  * Moved petitparser into a regular dependency so pub run works.
 
   * Improved code layout of the package.
 
+  * Added a DateFormat.parseStrict method that rejects DateTimes with invalid
+    values and requires it to be the whole string.
+
 ## 0.11.6
 
   * Catch analyzer errors and do not generate messages for that file. Previously
diff --git a/pkg/intl/lib/src/intl/date_format.dart b/pkg/intl/lib/src/intl/date_format.dart
index 4b29df9..54fb3f0 100644
--- a/pkg/intl/lib/src/intl/date_format.dart
+++ b/pkg/intl/lib/src/intl/date_format.dart
@@ -234,7 +234,7 @@
 
   /**
    * NOT YET IMPLEMENTED.
-   * 
+   *
    * Returns a date string indicating how long ago (3 hours, 2 minutes)
    * something has happened or how long in the future something will happen
    * given a [reference] DateTime relative to the current time.
@@ -243,7 +243,7 @@
 
   /**
    * NOT YET IMPLEMENTED.
-   * 
+   *
    * Formats a string indicating how long ago (negative [duration]) or how far
    * in the future (positive [duration]) some time is with respect to a
    * reference [date].
@@ -253,15 +253,38 @@
   /**
    * Given user input, attempt to parse the [inputString] into the anticipated
    * format, treating it as being in the local timezone. If [inputString] does
-   * not match our format, throws a [FormatException].
+   * not match our format, throws a [FormatException]. This will accept dates
+   * whose values are not strictly valid, or strings with additional characters
+   * (including whitespace) after a valid date. For stricter parsing, use
+   * [parseStrict].
    */
-  DateTime parse(String inputString, [utc = false]) {
+  DateTime parse(String inputString, [utc = false]) =>
+      _parse(inputString, utc: utc, strict: false);
+
+  /**
+   * Given user input, attempt to parse the [inputString] into the anticipated
+   * format, treating it as being in the local timezone. If [inputString] does
+   * not match our format, throws a [FormatException]. This will reject dates
+   * whose values are not strictly valid, even if the
+   * DateTime constructor will accept them. It will also rejct strings with
+   * additional characters (including whitespace) after a valid date. For
+   * looser parsing, use [parse].
+   */
+  DateTime parseStrict(String inputString, [utc = false]) =>
+      _parse(inputString, utc: utc, strict: true);
+
+  DateTime _parse(String inputString, {utc : false, strict : false}) {
     // TODO(alanknight): The Closure code refers to special parsing of numeric
     // values with no delimiters, which we currently don't do. Should we?
     var dateFields = new _DateBuilder();
     if (utc) dateFields.utc = true;
     var stream = new _Stream(inputString);
     _formatFields.forEach((f) => f.parse(stream, dateFields));
+    if (strict && !stream.atEnd()) {
+      throw new FormatException(
+          "Characters remaining after date parsing in $inputString");
+    }
+    if (strict) dateFields.verify(inputString);
     return dateFields.asDate();
   }
 
diff --git a/pkg/intl/lib/src/intl/date_format_helpers.dart b/pkg/intl/lib/src/intl/date_format_helpers.dart
index e59a63e..1b42d89 100644
--- a/pkg/intl/lib/src/intl/date_format_helpers.dart
+++ b/pkg/intl/lib/src/intl/date_format_helpers.dart
@@ -32,6 +32,37 @@
   void setSecond(x) { second = x; }
   void setFractionalSecond(x) { fractionalSecond = x; }
 
+  get hour24 => pm ? hour + 12 : hour;
+
+  /**
+   * Verify that we correspond to a valid date. This will reject out of
+   * range values, even if the DateTime constructor would accept them. An
+   * invalid message will result in throwing a [FormatException].
+   */
+   verify(String s) {
+     _verify(month, 1, 12, "month", s);
+     _verify(hour24, 0, 23, "hour", s);
+     _verify(minute, 0, 59, "minute", s);
+     _verify(second, 0, 59, "second", s);
+     _verify(fractionalSecond, 0, 999, "fractional second", s);
+     // Verifying the day is tricky, because it depends on the month. Create
+     // our resulting date and then verify that our values agree with it
+     // as an additional verification. And since we're doing that, also
+     // check the year, which we otherwise can't verify, and the hours,
+     // which will catch cases like "14:00:00 PM".
+     var date = asDate();
+     _verify(hour24, date.hour, date.hour, "hour", s);
+     _verify(day, date.day, date.day, "day", s);
+     _verify(year, date.year, date.year, "year", s);
+   }
+
+   _verify(int value, int min, int max, String desc, String originalInput) {
+     if (value < min || value > max) {
+       throw new FormatException(
+           "Error parsing $originalInput, invalid $desc value: $value");
+     }
+   }
+
   /**
    * Return a date built using our values. If no date portion is set,
    * use the "Epoch" of January 1, 1970.
@@ -45,7 +76,7 @@
           year,
           month,
           day,
-          pm ? hour + 12 : hour,
+          hour24,
           minute,
           second,
           fractionalSecond);
@@ -54,12 +85,12 @@
           year,
           month,
           day,
-          pm ? hour + 12 : hour,
+          hour24,
           minute,
           second,
           fractionalSecond);
       // TODO(alanknight): Issue 15560 means non-UTC dates occasionally come
-      // out in UTC. If that happens, retry once. This will always happen if 
+      // out in UTC. If that happens, retry once. This will always happen if
       // the local time zone is UTC, but that's ok.
       if (result.toUtc() == result) {
         result = asDate(retry: false);
diff --git a/pkg/intl/lib/src/intl/number_format.dart b/pkg/intl/lib/src/intl/number_format.dart
index e44eddd..272d70b 100644
--- a/pkg/intl/lib/src/intl/number_format.dart
+++ b/pkg/intl/lib/src/intl/number_format.dart
@@ -30,12 +30,13 @@
  * one integer digit and three fraction digits.
  *
  * There are also standard patterns available via the special constructors. e.g.
- *       var symbols = new NumberFormat.percentFormat("ar");
+ *       var percent = new NumberFormat.percentFormat("ar");
+ *       var eurosInUSFormat = new NumberFormat.currencyPattern("en_US", "€");
  * There are four such constructors: decimalFormat, percentFormat,
  * scientificFormat and currencyFormat. However, at the moment,
  * scientificFormat prints only as equivalent to "#E0" and does not take
- * into account significant digits. currencyFormat will always use the name
- * of the currency rather than the symbol.
+ * into account significant digits. The currencyFormat will default to the 
+ * three-letter name of the currency if no explicit name/symbol is provided.
  */
 class NumberFormat {
   /** Variables to determine how number printing behaves. */
@@ -106,9 +107,14 @@
   NumberFormat.scientificPattern([String locale]) : this._forPattern(locale,
       (x) => x.SCIENTIFIC_PATTERN);
 
-  /** Create a number format that prints as CURRENCY_PATTERN. */
-  NumberFormat.currencyPattern([String locale, String currency]) :
-      this._forPattern(locale, (x) => x.CURRENCY_PATTERN, currency);
+  /** 
+   * Create a number format that prints as CURRENCY_PATTERN. If provided,
+   * use [nameOrSymbol] in place of the default currency name. e.g.
+   *        var eurosInCurrentLocale = new NumberFormat
+   *            .currencyPattern(Intl.defaultLocale, "€");
+   */
+  NumberFormat.currencyPattern([String locale, String nameOrSymbol]) :
+      this._forPattern(locale, (x) => x.CURRENCY_PATTERN, nameOrSymbol);
 
   /**
    * Create a number format that prints in a pattern we get from
diff --git a/pkg/intl/pubspec.yaml b/pkg/intl/pubspec.yaml
index dd85ae4..9fc0d73 100644
--- a/pkg/intl/pubspec.yaml
+++ b/pkg/intl/pubspec.yaml
@@ -1,5 +1,5 @@
 name: intl
-version: 0.11.7-dev
+version: 0.11.7
 author: Dart Team <misc@dartlang.org>
 description: Contains code to deal with internationalized/localized messages, date and number formatting and parsing, bi-directional text, and other internationalization issues.
 homepage: https://www.dartlang.org
@@ -9,6 +9,6 @@
 dependencies:
   analyzer: '>=0.13.2 <0.23.0'
   path: '>=0.9.0 <2.0.0'
-dev_dependencies:
   petitparser: '>=1.1.3 <2.0.0'
+dev_dependencies:
   unittest: '>=0.10.0 <0.12.0'
diff --git a/pkg/intl/test/date_time_strict_test.dart b/pkg/intl/test/date_time_strict_test.dart
new file mode 100644
index 0000000..e23341c
--- /dev/null
+++ b/pkg/intl/test/date_time_strict_test.dart
@@ -0,0 +1,80 @@
+// Copyright (c) 2014, 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.
+
+/// Tests for the strict option when parsing dates and times, which are
+/// relatively locale-independent, depending only on the being a valid date
+/// and consuming all the input data.
+library date_time_strict_test;
+
+import 'package:intl/intl.dart';
+import 'package:unittest/unittest.dart';
+
+main() {
+  test("All input consumed", () {
+    var format = new DateFormat.yMMMd();
+    var date = new DateTime(2014, 9, 3);
+    var formatted = 'Sep 3, 2014';
+    expect(format.format(date), formatted);
+    var parsed = format.parseStrict(formatted);
+    expect(parsed, date);
+
+    check(String s) {
+        expect(() => format.parseStrict(s), throwsFormatException);
+        expect(format.parse(s), date);
+    }
+
+    check(formatted + ",");
+    check(formatted + "abc");
+    check(formatted + "   ");
+  });
+
+  test("Invalid dates", () {
+    var format = new DateFormat.yMd();
+    check(s) => expect(() => format.parseStrict(s), throwsFormatException);
+    check("0/3/2014");
+    check("13/3/2014");
+    check("9/0/2014");
+    check("9/31/2014");
+    check("09/31/2014");
+    check("10/32/2014");
+    check("2/29/2014");
+    expect(format.parseStrict("2/29/2016"), new DateTime(2016, 2, 29));
+  });
+
+  test("Invalid times am/pm", () {
+     var format = new DateFormat.jms();
+     check(s) => expect(() => format.parseStrict(s), throwsFormatException);
+     check("-1:15:00 AM");
+     expect(format.parseStrict("0:15:00 AM"), new DateTime(1970, 1, 1, 0, 15));
+     check("24:00:00 PM");
+     check("24:00:00 AM");
+     check("25:00:00 PM");
+     check("0:-1:00 AM");
+     check("0:60:00 AM");
+     expect(format.parseStrict("0:59:00 AM"), new DateTime(1970, 1, 1, 0, 59));
+     check("0:0:-1 AM");
+     check("0:0:60 AM");
+     check("2:0:60 PM");
+     expect(format.parseStrict("2:0:59 PM"),
+         new DateTime(1970, 1, 1, 14, 0, 59));
+   });
+
+  test("Invalid times 24 hour", () {
+     var format = new DateFormat.Hms();
+     check(s) => expect(() => format.parseStrict(s), throwsFormatException);
+     check("-1:15:00");
+     expect(format.parseStrict("0:15:00"), new DateTime(1970, 1, 1, 0, 15));
+     check("24:00:00");
+     check("24:00:00");
+     check("25:00:00");
+     check("0:-1:00");
+     check("0:60:00");
+     expect(format.parseStrict("0:59:00"), new DateTime(1970, 1, 1, 0, 59));
+     check("0:0:-1");
+     check("0:0:60");
+     check("14:0:60");
+     expect(format.parseStrict("14:0:59"),
+         new DateTime(1970, 1, 1, 14, 0, 59));
+   });
+}
\ No newline at end of file
diff --git a/pkg/intl/test/message_extraction/message_extraction_test.dart b/pkg/intl/test/message_extraction/message_extraction_test.dart
index 744e107..03f5499 100644
--- a/pkg/intl/test/message_extraction/message_extraction_test.dart
+++ b/pkg/intl/test/message_extraction/message_extraction_test.dart
@@ -67,6 +67,7 @@
     useLocalDirectory = true;
   }
   setUp(copyFilesToTempDirectory);
+  tearDown(deleteGeneratedFiles);
   test("Test round trip message extraction, translation, code generation, "
       "and printing", () {
     var makeSureWeVerify = expectAsync(runAndVerify);
@@ -76,7 +77,6 @@
       return generateCodeFromTranslation(result);
     }).then(makeSureWeVerify).then(checkResult);
   });
-  tearDown(deleteGeneratedFiles);
 }
 
 void copyFilesToTempDirectory() {
@@ -95,9 +95,7 @@
 void deleteGeneratedFiles() {
   if (useLocalDirectory) return;
   try {
-    var dir = new Directory(tempDir);
-    dir.listSync().forEach((x) => x.deleteSync());
-    dir.deleteSync();
+    new Directory(tempDir).deleteSync(recursive: true);
   } on Error catch (e) {
     print("Failed to delete $tempDir");
     print("Exception:\n$e");
diff --git a/pkg/math/LICENSE b/pkg/math/LICENSE
deleted file mode 100644
index ee99930..0000000
--- a/pkg/math/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright 2013, the Dart project authors. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of Google Inc. nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/math/lib/math.dart b/pkg/math/lib/math.dart
deleted file mode 100644
index 323bcf7..0000000
--- a/pkg/math/lib/math.dart
+++ /dev/null
@@ -1,154 +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.
-
-library dart.pkg.math;
-
-/**
- * Computes the greatest common divisor between [a] and [b].
- *
- * The result is always positive even if either `a` or `b` is negative.
- */
-int gcd(int a, int b) {
-  if (a == null) throw new ArgumentError(a);
-  if (b == null) throw new ArgumentError(b);
-  a = a.abs();
-  b = b.abs();
-
-  // Iterative Binary GCD algorithm.
-  if (a == 0) return b;
-  if (b == 0) return a;
-  int powerOfTwo = 1;
-  while (((a | b) & 1) == 0) {
-    powerOfTwo *= 2;
-    a ~/= 2;
-    b ~/= 2;
-  }
-
-  while (a.isEven) a ~/= 2;
-
-  do {
-    while (b.isEven) b ~/= 2;
-    if (a > b) {
-      int temp = b;
-      b = a;
-      a = temp;
-    }
-    b -= a;
-  } while (b != 0);
-
-  return a * powerOfTwo;
-}
-
-/**
- * Computes the greatest common divisor between [a] and [b], as well as [x] and
- * [y] such that `ax+by == gcd(a,b)`.
- *
- * The return value is a List of three ints: the greatest common divisor, `x`,
- * and `y`, in that order.
- */
-List<int> gcdext(int a, int b) {
-  if (a == null) throw new ArgumentError(a);
-  if (b == null) throw new ArgumentError(b);
-
-  if (a < 0) {
-    List<int> result = gcdext(-a, b);
-    result[1] = -result[1];
-    return result;
-  }
-  if (b < 0) {
-    List<int> result = gcdext(a, -b);
-    result[2] = -result[2];
-    return result;
-  }
-
-  int r0 = a;
-  int r1 = b;
-  int x0, x1, y0, y1;
-  x0 = y1 = 1;
-  x1 = y0 = 0;
-
-  while (r1 != 0) {
-    int q = r0 ~/ r1;
-    int tmp = r0;
-    r0 = r1;
-    r1 = tmp - q*r1;
-
-    tmp = x0;
-    x0 = x1;
-    x1 = tmp - q*x1;
-
-    tmp = y0;
-    y0 = y1;
-    y1 = tmp - q*y1;
-  }
-
-  return new List<int>(3)
-      ..[0] = r0
-      ..[1] = x0
-      ..[2] = y0;
-}
-
-/**
- * Computes the inverse of [a] modulo [m].
- *
- * Throws an [IntegerDivisionByZeroException] if `a` has no inverse modulo `m`:
- *
- *     invert(4, 7); // 2
- *     invert(4, 10); // throws IntegerDivisionByZeroException
- */
-int invert(int a, int m) {
-  List<int> results = gcdext(a, m);
-  int g = results[0];
-  int x = results[1];
-  if (g != 1) {
-    throw new IntegerDivisionByZeroException();
-  }
-  return x % m;
-}
-
-/**
- * Computes the least common multiple between [a] and [b].
- */
-int lcm(int a, int b) {
-  if (a == null) throw new ArgumentError(a);
-  if (b == null) throw new ArgumentError(b);
-  if (a == 0 && b == 0) return 0;
-
-  return a.abs() ~/ gcd(a, b) * b.abs();
-}
-
-/**
- * Computes [base] raised to [exp] modulo [mod].
- *
- * The result is always positive, in keeping with the behavior of modulus
- * operator (`%`).
- *
- * Throws an [IntegerDivisionByZeroException] if `exp` is negative and `base`
- * has no inverse modulo `mod`.
- */
-int powmod(int base, int exp, int mod) {
-  if (base == null) throw new ArgumentError(base);
-  if (exp == null) throw new ArgumentError(exp);
-  if (mod == null) throw new ArgumentError(mod);
-
-  // Right-to-left binary method of modular exponentiation.
-  if (exp < 0) {
-    base = invert(base, mod);
-    exp = -exp;
-  }
-  if (exp == 0) { return 1; }
-
-  int result = 1;
-  base = base % mod;
-  while (true) {
-    if (exp.isOdd) {
-      result = (result * base) % mod;
-    }
-    exp ~/= 2;
-    if (exp == 0) {
-      return result;
-    }
-    base = (base * base) % mod;
-  }
-}
diff --git a/pkg/math/pubspec.yaml b/pkg/math/pubspec.yaml
deleted file mode 100644
index 4a20312..0000000
--- a/pkg/math/pubspec.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-name: math
-version: 0.9.0
-author: Dart Team <misc@dartlang.org>
-description: Utility functions and classes related to the 'dart:math' library.
-homepage: http://www.dartlang.org
-dev_dependencies:
-  unittest: ">=0.9.0 <0.10.0"
-environment:
-  sdk: ">=1.0.0 <2.0.0"
diff --git a/pkg/math/test/bigint_test.dart b/pkg/math/test/bigint_test.dart
deleted file mode 100644
index 8de7476..0000000
--- a/pkg/math/test/bigint_test.dart
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (c) 2014, 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 math_test;
-import "package:expect/expect.dart";
-import 'dart:math';
-import 'package:math/math.dart';
-
-// See gcd_test.dart first.  This file contains only the tests that need Bigint
-// or would fail in dart2js compatibility mode.
-
-class BigintTest {
-  // 8 random primes less within [2^60, 2^64]
-  final int p1 = 6714601027348841563;
-  final int p2 = 13464639003769154407;
-  final int p3 = 9519493673324441563;
-  final int p4 = 7064784879742017229;
-  final int p5 = 18364232533526122157;
-  final int p6 = 2099437422495963203;
-  final int p7 = 10166792634765954647;
-  final int p8 = 2745073355742392083;
-
-  void testGcdWithBigints() {
-    Expect.equals(pow(2, 63)*3, gcd(pow(2, 64)*3*5, pow(2, 63)*3*7));
-    // 595056260442243647 is the first prime after 2**64 / 31.
-    Expect.equals(595056260442243647,
-      gcd(31*595056260442243647, 37*595056260442243647));
-    Expect.equals(p2, gcd(p1*p2, p2*p3));
-    Expect.equals(1, gcd(p1*p2, p3*p4));
-
-    // Negatives
-    Expect.equals(pow(2, 63)*3, gcd(-pow(2, 64)*3*5, pow(2, 63)*3*7));
-    Expect.equals(pow(2, 63)*3, gcd(pow(2, 64)*3*5, -pow(2, 63)*3*7));
-    Expect.equals(pow(2, 63)*3, gcd(-pow(2, 64)*3*5, -pow(2, 63)*3*7));
-    Expect.equals(1, gcd(-p1, p2));
-    Expect.equals(1, gcd(p1, -p2));
-    Expect.equals(1, gcd(-p1, -p2));
-  }
-
-  void testGcdextWithBigints() {
-    Expect.listEquals([pow(2, 63)*3, -2, 3],
-      gcdext(pow(2, 64)*3*5, pow(2, 63)*3*7));
-    // 595056260442243647 is the first prime after 2**64 / 31.
-    Expect.listEquals([595056260442243647, 6, -5],
-      gcdext(31*595056260442243647, 37*595056260442243647));
-    Expect.listEquals([1, 970881267037344823, -970881267037344822],
-      gcdext(73786976294838206473, 73786976294838206549));
-    Expect.listEquals([1, 796993873408264695, -397448151389712212],
-      gcdext(p1, p2));
-    Expect.listEquals([1, -397448151389712212, 796993873408264695],
-      gcdext(p2, p1));
-
-    // Negatives
-    Expect.listEquals([1, -796993873408264695, -397448151389712212],
-      gcdext(-p1, p2));
-    Expect.listEquals([1, 796993873408264695, 397448151389712212],
-      gcdext(p1, -p2));
-    Expect.listEquals([1, -796993873408264695, 397448151389712212],
-      gcdext(-p1, -p2));
-  }
-
-  void testInvertWithBigints() {
-    // 9223372036854775837 is the first prime after 2^63.
-    Expect.equals(2093705452366034115, invert(1000, 9223372036854775837));
-    Expect.equals(970547769322117497, invert(1000000, 9223372036854775837));
-
-    Expect.equals(796993873408264695, invert(p1, p2));
-    Expect.equals(2302612976619580647501352961102487476, invert(p3*p4, p5*p6));
-
-    Expect.throws(() => invert(p1 * p2, p2 * p3),
-      (e) => e is IntegerDivisionByZeroException);
-
-    // Negatives
-    Expect.equals(12667645130360889712, invert(-p1, p2));
-    Expect.equals(796993873408264695, invert(p1, -p2));
-    Expect.equals(12667645130360889712, invert(-p1, -p2));
-  }
-
-  void testLcmWithBigints() {
-    Expect.equals(pow(2, 64)*3*5*7, lcm(pow(2, 64)*3*5, pow(2,63)*3*7));
-    // 595056260442243647 is the first prime after 2**64 / 31.
-    Expect.equals(31*37*595056260442243647,
-      lcm(31*595056260442243647, 37*595056260442243647));
-
-    Expect.equals(p1 * p2, lcm(p1, p2));
-    Expect.equals(p1 * p2 * p3, lcm(p1 * p2, p2 * p3));
-    Expect.equals(p4 * p5, lcm(p4 * p5, p4));
-
-    // Negative
-    Expect.equals(p1 * p2, lcm(-p1, p2));
-    Expect.equals(p1 * p2, lcm(p1, -p2));
-    Expect.equals(p1 * p2, lcm(-p1, -p2));
-  }
-
-  void testPowmodWithBigints() {
-    // A modulus value greater than 94906265 can result in an intermediate step
-    // evaluating to a bigint (base * base).
-    // 9079837958533 is the first prime after 2**48 / 31.
-    Expect.equals(1073741824, powmod(pow(2, 30), 1, 9079837958533));
-    Expect.equals(9079822119301, powmod(pow(2, 30), 2, 9079837958533));
-    Expect.equals(8370475851674, powmod(pow(2, 30), 3, 9079837958533));
-    Expect.equals(5725645469433, powmod(pow(2, 30), 4, 9079837958533));
-
-    // bigint base
-    Expect.equals(10435682577172878912, powmod(p1, 31, p2));
-    Expect.equals(2171334335785523204, powmod(p1 * p2, 5, p3));
-    Expect.equals(2075559997960884603, powmod(p1 * 120, 8, p2));
-
-    // bigint exponent
-    Expect.equals(236325130834703514, powmod(pow(2, 64), p1, p4));
-    Expect.equals(1733635560285390571, powmod(1000000, p5, p6));
-
-    // bigint modulus
-    Expect.equals(4740839599282053976, powmod(p7, p8, p1));
-    Expect.equals(13037487407831899228197227177643459429,
-      powmod(p2, p3, p4 * p5));
-
-    // Negative
-    Expect.equals(3028956426596275495, powmod(-p1, 31, p2));
-    Expect.equals(5719988737977477486, powmod(p1, -31, p2));
-    Expect.equals(10435682577172878912, powmod(p1, 31, -p2));
-    Expect.equals(7744650265791676921, powmod(-p1, -31, p2));
-    Expect.equals(3028956426596275495, powmod(-p1, 31, -p2));
-    Expect.equals(5719988737977477486, powmod(p1, -31, -p2));
-    Expect.equals(7744650265791676921, powmod(-p1, -31, -p2));
-  }
-
-  testMain() {
-    // Source for expected values is Wolfram Alpha (presumably just GMP).
-    testGcdWithBigints();
-    testGcdextWithBigints();
-    testInvertWithBigints();
-    testLcmWithBigints();
-    testPowmodWithBigints();
-  }
-}
-
-main() {
-  new BigintTest().testMain();
-}
diff --git a/pkg/math/test/gcd_test.dart b/pkg/math/test/gcd_test.dart
deleted file mode 100644
index 35e57e7..0000000
--- a/pkg/math/test/gcd_test.dart
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (c) 2014, 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 math_test;
-import "package:expect/expect.dart";
-import 'dart:math';
-import 'package:math/math.dart';
-
-void testGcd() {
-  Expect.equals(7, gcd(0, 7));
-  Expect.equals(5, gcd(5, 0));
-  Expect.equals(5, gcd(-5, 0));
-  Expect.equals(0, gcd(0, 0));
-  Expect.equals(1, gcd(5, 7));
-  Expect.equals(6, gcd(12, 18));
-  Expect.equals(6, gcd(12, -18));
-  Expect.equals(6, gcd(-12, -18));
-  Expect.equals(6, gcd(18, 12));
-  Expect.equals(15, gcd(45, 105));
-
-  Expect.throws(() => gcd(0, null), (e) => e is ArgumentError);
-  Expect.throws(() => gcd(null, 0), (e) => e is ArgumentError);
-
-  // Cover all branches in Binary GCD implementation.
-  // 0 shared powers-of-two factors.
-  Expect.equals(1, gcd(2*2, 7));
-  // 1 shared power-of-two factor.
-  Expect.equals(2, gcd(2*2, 2*7));
-  // >1 shared powers-of-two factors.
-  Expect.equals(8, gcd(2*2*2*3, 2*2*2*5));
-
-  // 0 remaining powers-of-two in a.
-  Expect.equals(6, gcd(2*3, 2*3*3));
-  // 1 remaining power-of-two in a.
-  Expect.equals(6, gcd(2*2*3, 2*3*3));
-  // >1 remaining powers-of-two in a.
-  Expect.equals(6, gcd(2*2*2*2*3, 2*3*3));
-
-  // 0 remaining powers-of-two in b.
-  Expect.equals(6, gcd(2*3, 2*3*3));
-  // 1 remaining power-of-two in b.
-  Expect.equals(6, gcd(2*3, 2*2*3));
-  // >1 remaining powers-of-two in b.
-  Expect.equals(6, gcd(2*3, 2*2*2*3*3));
-
-  // Innermost 'if'
-  // a > b.
-  Expect.equals(6, gcd(2*2*3*5, 2*3));
-  // a == b.
-  Expect.equals(6, gcd(2*3, 2*2*2*3));
-  // a < b.
-  Expect.equals(6, gcd(2*3, 2*2*3*7));
-
-  // do while loop executions.
-  // Executed 1 time.
-  Expect.equals(6, gcd(2*3, 2*2*2*3));
-  // Executed >1 times.
-  Expect.equals(6, gcd(2*3*3, 2*2*3*5));
-
-  // Medium int (mint) arguments.
-  Expect.equals(pow(2, 61), gcd(pow(2, 61)*3, pow(2,62)));
-  // 9079837958533 is the first prime after 2**48 / 31.
-  Expect.equals(9079837958533,
-    gcd(31*9079837958533, 37*9079837958533));
-}
-
-main() {
-  testGcd();
-}
diff --git a/pkg/math/test/gcdext_test.dart b/pkg/math/test/gcdext_test.dart
deleted file mode 100644
index 923b0ee..0000000
--- a/pkg/math/test/gcdext_test.dart
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2014, 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 math_test;
-import "package:expect/expect.dart";
-import 'dart:math';
-import 'package:math/math.dart';
-
-void testGcdext() {
-  Expect.listEquals([7, 0, 1], gcdext(0, 7));
-  Expect.listEquals([5, 1, 0], gcdext(5, 0));
-  Expect.listEquals([5, -1, 0], gcdext(-5, 0));
-  Expect.listEquals([0, 1, 0], gcdext(0, 0));
-  Expect.listEquals([1, 3, -2], gcdext(5, 7));
-  Expect.listEquals([6, -1, 1], gcdext(12, 18));
-  Expect.listEquals([6, -1, -1], gcdext(12, -18));
-  Expect.listEquals([6, 1, -1], gcdext(-12, -18));
-  Expect.listEquals([6, 1, -1], gcdext(18, 12));
-  Expect.listEquals([15, -2, 1], gcdext(45, 105));
-
-  Expect.throws(() => gcdext(0, null), (e) => e is ArgumentError);
-  Expect.throws(() => gcdext(null, 0), (e) => e is ArgumentError);
-
-  // Cover all branches in Binary GCD implementation.
-
-  // Medium int (mint) arguments.
-  Expect.listEquals([pow(2, 60), 1, -1], gcdext(pow(2, 60)*5, pow(2, 62)));
-  Expect.listEquals([4000000000000, -96078, 96077],
-    gcdext(2305844000000000000, 2305868000000000000));
-  // 9079837958533 is the first prime after 2**48 / 31.
-  Expect.listEquals([9079837958533, 6, -5],
-    gcdext(31*9079837958533, 37*9079837958533));
-}
-
-main() {
-  testGcdext();
-}
diff --git a/pkg/math/test/invert_test.dart b/pkg/math/test/invert_test.dart
deleted file mode 100644
index 75cac9f..0000000
--- a/pkg/math/test/invert_test.dart
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) 2014, 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 math_test;
-import "package:expect/expect.dart";
-import 'dart:math';
-import 'package:math/math.dart';
-
-void testInvert() {
-  Expect.equals(1, invert(1, 7));
-  Expect.equals(4, invert(2, 7));
-  Expect.equals(5, invert(3, 7));
-  Expect.equals(2, invert(4, 7));
-  Expect.equals(3, invert(5, 7));
-  Expect.equals(6, invert(6, 7));
-
-  Expect.throws(() => invert(0, null), (e) => e is ArgumentError);
-  Expect.throws(() => invert(null, 0), (e) => e is ArgumentError);
-  Expect.throws(() => invert(0, 7), (e) => e is IntegerDivisionByZeroException);
-  Expect.throws(() => invert(3, 6), (e) => e is IntegerDivisionByZeroException);
-  Expect.throws(() => invert(6, 3), (e) => e is IntegerDivisionByZeroException);
-  Expect.throws(() => invert(6, 0), (e) => e is IntegerDivisionByZeroException);
-
-  // Medium int (mint) arguments.
-  Expect.equals(7291109880702, invert(1000, 9079837958533));
-  Expect.equals(6417656708605, invert(1000000, 9079837958533));
-}
-
-main() {
-  testInvert();
-}
diff --git a/pkg/math/test/lcm_test.dart b/pkg/math/test/lcm_test.dart
deleted file mode 100644
index 8952938..0000000
--- a/pkg/math/test/lcm_test.dart
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (c) 2014, 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 math_test;
-import "package:expect/expect.dart";
-import 'dart:math';
-import 'package:math/math.dart';
-
-void testLcm() {
-  Expect.equals(0, lcm(0, 7));
-  Expect.equals(0, lcm(5, 0));
-  Expect.equals(0, lcm(-5, 0));
-  Expect.equals(0, lcm(0, 0));
-  Expect.equals(35, lcm(5, 7));
-  Expect.equals(36, lcm(12, 18));
-  Expect.equals(36, lcm(12, -18));
-  Expect.equals(36, lcm(-12, -18));
-  Expect.equals(36, lcm(18, 12));
-  Expect.equals(315, lcm(45, 105));
-
-  Expect.throws(() => lcm(0, null), (e) => e is ArgumentError);
-  Expect.throws(() => lcm(null, 0), (e) => e is ArgumentError);
-
-  // Cover all branches in Binary GCD implementation.
-  // 0 shared powers-of-two factors.
-  Expect.equals(28, lcm(2*2, 7));
-  // 1 shared power-of-two factor.
-  Expect.equals(28, lcm(2*2, 2*7));
-  // >1 shared powers-of-two factors.
-  Expect.equals(120, lcm(2*2*2*3, 2*2*2*5));
-
-  // 0 remaining powers-of-two in a.
-  Expect.equals(18, lcm(2*3, 2*3*3));
-  // 1 remaining power-of-two in a.
-  Expect.equals(36, lcm(2*2*3, 2*3*3));
-  // >1 remaining powers-of-two in a.
-  Expect.equals(144, lcm(2*2*2*2*3, 2*3*3));
-
-  // 0 remaining powers-of-two in b.
-  Expect.equals(18, lcm(2*3, 2*3*3));
-  // 1 remaining power-of-two in b.
-  Expect.equals(12, lcm(2*3, 2*2*3));
-  // >1 remaining powers-of-two in b.
-  Expect.equals(72, lcm(2*3, 2*2*2*3*3));
-
-  // Innermost 'if'
-  // a > b.
-  Expect.equals(60, lcm(2*2*3*5, 2*3));
-  // a == b.
-  Expect.equals(24, lcm(2*3, 2*2*2*3));
-  // a < b.
-  Expect.equals(84, lcm(2*3, 2*2*3*7));
-
-  // do while loop executions.
-  // Executed 1 time.
-  Expect.equals(24, lcm(2*3, 2*2*2*3));
-  // Executed >1 times.
-  Expect.equals(180, lcm(2*3*3, 2*2*3*5));
-
-  // Medium int (mint) arguments.
-  Expect.equals(pow(2, 62)*3, lcm(pow(2, 61)*3, pow(2,62)));
-  // 9079837958533 is the first prime after 2**48 / 31.
-  Expect.equals(31*37*9079837958533,
-    lcm(31*9079837958533, 37*9079837958533));
-}
-
-main() {
-  testLcm();
-}
diff --git a/pkg/math/test/powmod_test.dart b/pkg/math/test/powmod_test.dart
deleted file mode 100644
index ad47c4a..0000000
--- a/pkg/math/test/powmod_test.dart
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) 2014, 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 math_test;
-import "package:expect/expect.dart";
-import 'dart:math';
-import 'package:math/math.dart';
-
-void testPowmod() {
-  Expect.equals(1, powmod(2, 0, 7));
-  Expect.equals(2, powmod(2, 1, 7));
-  Expect.equals(4, powmod(2, 2, 7));
-  Expect.equals(1, powmod(2, 3, 7));
-  Expect.equals(2, powmod(2, 4, 7));
-
-  Expect.equals(1, powmod(2, 0, 13));
-  Expect.equals(1, powmod(-5, 0, 7));
-  Expect.equals(1, powmod(2, 0, -9));
-
-  // Negative base
-  Expect.equals(1, powmod(-2, 0, 7));
-  Expect.equals(5, powmod(-2, 1, 7));
-  Expect.equals(6, powmod(-2, 3, 7));
-
-  // Negative power (inverse modulo)
-  Expect.equals(4, powmod(2, -1, 7));
-  Expect.equals(2, powmod(2, -2, 7));
-  Expect.equals(1, powmod(2, -3, 7));
-
-  // Negative modulus (should behave like % operator)
-  Expect.equals(1, powmod(2, 0, -7));
-  Expect.equals(2, powmod(2, 1, -7));
-  Expect.equals(4, powmod(2, 2, -7));
-
-  Expect.throws(() => powmod(0, null, 0), (e) => e is ArgumentError);
-  Expect.throws(() => powmod(null, 0, 0), (e) => e is ArgumentError);
-  Expect.throws(() => powmod(0, 0, null), (e) => e is ArgumentError);
-
-  // Medium int (mint) arguments smaller than 94906266.
-  // 67108879 is the first prime after 2^26.
-  Expect.equals(1048576, powmod(pow(2, 20), 1, 67108879));
-  Expect.equals(66863119, powmod(pow(2, 20), 2, 67108879));
-  Expect.equals(57600, powmod(pow(2, 20), 3, 67108879));
-  Expect.equals(67095379, powmod(pow(2, 20), 4, 67108879));
-  Expect.equals(4197469, powmod(pow(2, 20), 5, 67108879));
-}
-
-main() {
-  testPowmod();
-}
diff --git a/pkg/microlytics/example/simple.dart b/pkg/microlytics/example/simple.dart
new file mode 100644
index 0000000..b0b6792
--- /dev/null
+++ b/pkg/microlytics/example/simple.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2014, 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:microlytics/channels.dart';
+import 'package:microlytics/io_channels.dart';
+import 'package:microlytics/microlytics.dart';
+
+void main(List<String> arguments) {
+  // Create the channel that will be used to communicate to analytics.
+  var channel = new RateLimitingBufferedChannel(
+      new HttpClientChannel(), packetsPerSecond: 1.0);
+
+  if (arguments.length != 1) {
+    print("usage: dart simple.dart GA-Client-ID");
+    return;
+  }
+  final String clientID = arguments.single;
+
+  // Create the logger.
+  var lg = new AnalyticsLogger(channel, "555", clientID, "test", "1.2");
+
+  // Send some messages.
+  lg.logAnonymousEvent("hello", "world");
+  lg.logAnonymousTiming("loader", "var", 42);
+}
\ No newline at end of file
diff --git a/pkg/microlytics/lib/channels.dart b/pkg/microlytics/lib/channels.dart
new file mode 100644
index 0000000..88dee49
--- /dev/null
+++ b/pkg/microlytics/lib/channels.dart
@@ -0,0 +1,55 @@
+// Copyright (c) 2014, 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 microlytics.channels;
+
+import 'dart:async';
+
+const String ANALYTICS_URL = "https://ssl.google-analytics.com/collect";
+
+abstract class Channel {
+  void sendData(String data);
+  void shutdown() {}
+}
+
+/// [Channel] that implements a leaky bucket
+/// algorithm to provide rate limiting.
+/// See [http://en.wikipedia.org/wiki/Leaky_bucket].
+class RateLimitingBufferedChannel extends Channel {
+  final List<String> _buffer = <String>[];
+  final Channel _innerChannel;
+  final int _bufferSizeLimit;
+  Timer _timer;
+
+  RateLimitingBufferedChannel(
+      this._innerChannel,
+      {int bufferSizeLimit: 10,
+        double packetsPerSecond: 1.0})
+      : this._bufferSizeLimit = bufferSizeLimit {
+    if (!(packetsPerSecond > 0)) {
+      throw new ArgumentError("packetsPerSecond must be larger than zero.");
+    }
+
+    int transmitDelay = (1000 / packetsPerSecond).floor();
+    _timer = new Timer.periodic(
+        new Duration(milliseconds: transmitDelay), _onTimerTick);
+  }
+
+  void _onTimerTick(_) {
+    if (_buffer.length > 0) {
+      String item = _buffer.removeLast();
+      _innerChannel.sendData(item);
+    }
+  }
+
+  void sendData(String data) {
+    if (_buffer.length >= _bufferSizeLimit) return;
+    _buffer.add(data);
+  }
+
+  void shutdown() {
+    _timer.cancel();
+    _innerChannel.shutdown();
+  }
+}
\ No newline at end of file
diff --git a/pkg/microlytics/lib/html_channels.dart b/pkg/microlytics/lib/html_channels.dart
new file mode 100644
index 0000000..b3eef43
--- /dev/null
+++ b/pkg/microlytics/lib/html_channels.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2014, 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 microlytics.html_channels;
+
+import 'dart:html';
+import 'channels.dart';
+
+class HttpRequestChannel extends Channel {
+  void sendData(String data) {
+    HttpRequest.request(ANALYTICS_URL, method: "POST", sendData: data);
+  }
+}
diff --git a/pkg/microlytics/lib/io_channels.dart b/pkg/microlytics/lib/io_channels.dart
new file mode 100644
index 0000000..035e9a1
--- /dev/null
+++ b/pkg/microlytics/lib/io_channels.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2014, 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 microlytics.io_channels;
+
+import 'dart:io';
+import 'channels.dart';
+
+class HttpClientChannel extends Channel {
+  void sendData(String data) {
+    HttpClient client = new HttpClient();
+    client.postUrl(Uri.parse(ANALYTICS_URL)).then((HttpClientRequest req) {
+      req.write(data);
+      return req.close();
+    }).then((HttpClientResponse response) {
+      response.drain();
+    });
+  }
+}
+
diff --git a/pkg/microlytics/lib/microlytics.dart b/pkg/microlytics/lib/microlytics.dart
new file mode 100644
index 0000000..84d89e3
--- /dev/null
+++ b/pkg/microlytics/lib/microlytics.dart
@@ -0,0 +1,61 @@
+// Copyright (c) 2014, 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 microlytics;
+
+import 'channels.dart';
+
+/// Very limited implementation of an API to report usage to Google Analytics.
+/// No Personally Identifiable Information must ever be passed to this class.
+class AnalyticsLogger {
+  final Channel _channel;
+  final String _clientID;
+  final String _analyticsID;
+  final String _appName;
+  final String _appVersion;
+  final String _messagePrefix; //Computed prefix for analytics messages
+
+  /// Create a new logger
+  /// [channel] represents how this is going to be sent, this would typically
+  /// be a [RateLimitingBufferedChannel] wrapping either a [HttpRequestChannel]
+  /// or a [HttpClientChannel].
+  /// [clientID] is a version 4 UUID associated with the site or app.
+  /// [appName] is an application name.
+  /// [appVersion] is a verion string.
+  AnalyticsLogger(Channel channel, String clientID, String analyticsID,
+      String appName, String appVersion)
+      : this._channel = channel,
+      this._clientID = clientID,
+      this._analyticsID = analyticsID,
+      this._appName = appName,
+      this._appVersion = appVersion,
+      this._messagePrefix =
+        "v=1"
+        "&tid=$analyticsID"
+        "&cid=$clientID"
+        "&an=$appName"
+        "&av=$appVersion";
+
+  void logAnonymousTiming(String category, String variable, int ms) {
+    category = Uri.encodeComponent(category);
+    variable = Uri.encodeComponent(variable);
+    _channel.sendData(
+        "${this._messagePrefix}"
+        "&t=timing"
+        "&utc=$category"
+        "&utv=$variable"
+        "&utt=$ms");
+  }
+
+  void logAnonymousEvent(String category, String event) {
+    category = Uri.encodeComponent(category);
+    event = Uri.encodeComponent(event);
+    _channel.sendData(
+        "${this._messagePrefix}"
+        "&t=event"
+        "&ec=$category"
+        "&ea=$event");
+  }
+}
+
diff --git a/pkg/microlytics/pubspec.yaml b/pkg/microlytics/pubspec.yaml
new file mode 100644
index 0000000..620b7cb
--- /dev/null
+++ b/pkg/microlytics/pubspec.yaml
@@ -0,0 +1,8 @@
+# Copyright (c) 2014, 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.
+
+name: microlytics
+description: A minimal implementation of the Analytics API in pure Dart
+dev_dependencies:
+  unittest: any
diff --git a/pkg/microlytics/test/dart_microlytics_test.dart b/pkg/microlytics/test/dart_microlytics_test.dart
new file mode 100644
index 0000000..eab1002
--- /dev/null
+++ b/pkg/microlytics/test/dart_microlytics_test.dart
@@ -0,0 +1,120 @@
+// Copyright (c) 2014, 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 microlytics.test;
+
+import 'package:expect/expect.dart';
+import 'package:microlytics/microlytics.dart';
+
+import 'test_channel.dart';
+
+void main() {
+  testBasicEventRead();
+  testBasicNegativeEventRead();
+  testBasicTimingRead();
+  testBasicTimingMultiread();
+}
+
+void testBasicEventRead() {
+    TestChannel c = new TestChannel();
+    AnalyticsLogger logger = new AnalyticsLogger(
+      c,
+      "2cfac780-31e2-11e4-8c21-0800200c9a66",
+      "UA-53895644-1",
+      "TestApp",
+      "0.42");
+    logger.logAnonymousEvent("video", "play");
+    Expect.isTrue(c.contains(
+      "v=1"
+      "&tid=UA-53895644-1"
+      "&cid=2cfac780-31e2-11e4-8c21-0800200c9a66"
+      "&an=TestApp"
+      "&av=0.42"
+      "&t=event"
+      "&ec=video"
+      "&ea=play"));
+}
+
+void testBasicNegativeEventRead() {
+      TestChannel c = new TestChannel();
+      AnalyticsLogger logger = new AnalyticsLogger(
+        c,
+        "2cfac780-31e2-11e4-8c21-0800200c9a66",
+        "UA-53895644-1",
+        "TestApp",
+        "0.42");
+      logger.logAnonymousEvent("video", "play");
+      Expect.isFalse(c.contains(
+        "v=1"
+        "&tid=UA-53895644-1"
+        "&cid=2cfac780-31e2-11e4-8c21-0800200c9a66"
+        "&an=TestApp"
+        "&av=XXX"
+        "&t=event"
+        "&ec=video"
+        "&ea=play"));
+}
+
+void testBasicTimingRead() {
+    TestChannel c = new TestChannel();
+    AnalyticsLogger logger = new AnalyticsLogger(
+        c,
+        "2cfac780-31e2-11e4-8c21-0800200c9a66",
+        "UA-53895644-1",
+        "TestApp",
+        "0.42");
+    logger.logAnonymousTiming("video", "delay", 157);
+    Expect.isTrue(c.contains(
+        "v=1"
+        "&tid=UA-53895644-1"
+        "&cid=2cfac780-31e2-11e4-8c21-0800200c9a66"
+        "&an=TestApp"
+        "&av=0.42"
+        "&t=timing"
+        "&utc=video"
+        "&utv=delay"
+        "&utt=157"));
+}
+
+void testBasicTimingMultiread() {
+      TestChannel c = new TestChannel();
+      AnalyticsLogger logger = new AnalyticsLogger(
+        c,
+        "2cfac780-31e2-11e4-8c21-0800200c9a66",
+        "UA-53895644-1",
+        "TestApp",
+        "0.42");
+      logger.logAnonymousTiming("video", "delay", 159);
+      logger.logAnonymousTiming("video", "delay", 152);
+      Expect.isTrue(c.contains(
+        "v=1"
+        "&tid=UA-53895644-1"
+        "&cid=2cfac780-31e2-11e4-8c21-0800200c9a66"
+        "&an=TestApp"
+        "&av=0.42"
+        "&t=timing"
+        "&utc=video"
+        "&utv=delay"
+        "&utt=152"));
+      Expect.isTrue(c.contains(
+        "v=1"
+        "&tid=UA-53895644-1"
+        "&cid=2cfac780-31e2-11e4-8c21-0800200c9a66"
+        "&an=TestApp"
+        "&av=0.42"
+        "&t=timing"
+        "&utc=video"
+        "&utv=delay"
+        "&utt=159"));
+      Expect.isFalse(c.contains(
+        "v=1"
+        "&tid=UA-53895644-1"
+        "&cid=2cfac780-31e2-11e4-8c21-0800200c9a66"
+        "&an=TestApp"
+        "&av=0.42"
+        "&t=timing"
+        "&utc=video"
+        "&utv=delay"
+        "&utt=19"));
+}
\ No newline at end of file
diff --git a/pkg/microlytics/test/test_channel.dart b/pkg/microlytics/test/test_channel.dart
new file mode 100644
index 0000000..a7f9c8b
--- /dev/null
+++ b/pkg/microlytics/test/test_channel.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2014, 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 microlytics.test_channel;
+
+import 'package:microlytics/channels.dart';
+
+class TestChannel extends Channel {
+  List<String> _channelLog = [];
+
+  void sendData(String data) {
+    _channelLog.add(data);
+  }
+
+  bool contains(String data) {
+    return _channelLog.contains(data);
+  }
+}
diff --git a/pkg/observe/CHANGELOG.md b/pkg/observe/CHANGELOG.md
index b760629..f3ec120 100644
--- a/pkg/observe/CHANGELOG.md
+++ b/pkg/observe/CHANGELOG.md
@@ -1,30 +1,31 @@
-# changelog
+#### 0.12.1+1
+  * Expand stack_trace version constraint.
 
-This file contains highlights of what changes on each version of the observe
-package.
+#### 0.12.1
+  * Upgraded error messages to have a unique and stable identifier.
 
-#### Pub version 0.12.0
+#### 0.12.0
   * Old transform.dart file removed. If you weren't use it it, this change is
     backwards compatible with version 0.11.0.
 
-#### Pub version 0.11.0+5
+#### 0.11.0+5
   * Widen the constraint on analyzer.
 
-#### Pub version 0.11.0+4
+#### 0.11.0+4
   * Raise the lower bound on the source_maps constraint to exclude incompatible
     versions.
 
-#### Pub version 0.11.0+3
+#### 0.11.0+3
   * Widen the constraint on source_maps.
 
-#### Pub version 0.11.0+2
+#### 0.11.0+2
   * Widen the constraint on barback.
 
-#### Pub version 0.11.0+1
+#### 0.11.0+1
   * Switch from `source_maps`' `Span` class to `source_span`'s `SourceSpan`
     class.
 
-#### Pub version 0.11.0
+#### 0.11.0
   * Updated to match [observe-js#e212e74][e212e74] (release 0.3.4)
   * ListPathObserver has been deprecated  (it was deleted a while ago in
     observe-js). We plan to delete it in a future release. You may copy the code
@@ -38,11 +39,11 @@
     in combination with a change in template_binding and polymer to improve
     interop with JS custom elements).
 
-#### Pub version 0.10.0+3
+#### 0.10.0+3
   * minor changes to documentation, deprecated `discardListChages` in favor of
     `discardListChanges` (the former had a typo).
 
-#### Pub version 0.10.0
+#### 0.10.0
   * package:observe no longer declares @MirrorsUsed. The package uses mirrors
     for development time, but assumes frameworks (like polymer) and apps that
     use it directly will either generate code that replaces the use of mirrors,
diff --git a/pkg/observe/lib/src/messages.dart b/pkg/observe/lib/src/messages.dart
new file mode 100644
index 0000000..ed12162
--- /dev/null
+++ b/pkg/observe/lib/src/messages.dart
@@ -0,0 +1,51 @@
+// Copyright (c) 2014, 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.
+
+/// Contains all warning messages produced by the observe transformer.
+library observe.src.messages;
+
+import 'package:code_transformers/messages/messages.dart';
+
+const NO_OBSERVABLE_ON_LIBRARY = const MessageTemplate(
+    const MessageId('observe', 1),
+    '@observable on a library no longer has any effect. '
+    'Instead, annotate individual fields as @observable.',
+    '`@observable` not supported on libraries',
+    _COMMON_MESSAGE_WHERE_TO_USE_OBSERVABLE);
+
+const NO_OBSERVABLE_ON_TOP_LEVEL = const MessageTemplate(
+    const MessageId('observe', 2),
+    'Top-level fields can no longer be observable. '
+    'Observable fields must be in observable objects.',
+    '`@observable` not supported on top-level fields',
+    _COMMON_MESSAGE_WHERE_TO_USE_OBSERVABLE);
+
+const NO_OBSERVABLE_ON_CLASS = const MessageTemplate(
+    const MessageId('observe', 3),
+    '@observable on a class no longer has any effect. '
+    'Instead, annotate individual fields as @observable.',
+    '`@observable` not supported on classes',
+    _COMMON_MESSAGE_WHERE_TO_USE_OBSERVABLE);
+
+const NO_OBSERVABLE_ON_STATIC_FIELD = const MessageTemplate(
+    const MessageId('observe', 4),
+    'Static fields can no longer be observable. '
+    'Observable fields must be in observable objects.',
+    '`@observable` not supported on static fields',
+    _COMMON_MESSAGE_WHERE_TO_USE_OBSERVABLE);
+
+const REQUIRE_OBSERVABLE_INTERFACE = const MessageTemplate(
+    const MessageId('observe', 5),
+    'Observable fields must be in observable objects. '
+    'Change this class to extend, mix in, or implement Observable.',
+    '`@observable` field not in an `Observable` class',
+    _COMMON_MESSAGE_WHERE_TO_USE_OBSERVABLE);
+
+const String _COMMON_MESSAGE_WHERE_TO_USE_OBSERVABLE = '''
+Only instance fields on `Observable` classes can be observable,
+and you must explicitly annotate each observable field as `@observable`.
+
+Support for using the `@observable` annotation in libraries, classes, and
+elsewhere is deprecated.
+''';
diff --git a/pkg/observe/lib/transformer.dart b/pkg/observe/lib/transformer.dart
index 5bb07d6..7d1bdb3 100644
--- a/pkg/observe/lib/transformer.dart
+++ b/pkg/observe/lib/transformer.dart
@@ -14,9 +14,12 @@
 import 'package:analyzer/src/generated/parser.dart';
 import 'package:analyzer/src/generated/scanner.dart';
 import 'package:barback/barback.dart';
+import 'package:code_transformers/messages/build_logger.dart';
 import 'package:source_maps/refactor.dart';
 import 'package:source_span/source_span.dart';
 
+import 'src/messages.dart';
+
 /// A [Transformer] that replaces observables based on dirty-checking with an
 /// implementation based on change notifications.
 ///
@@ -24,10 +27,13 @@
 /// system of the change.
 class ObservableTransformer extends Transformer {
 
+  final bool releaseMode;
   final List<String> _files;
-  ObservableTransformer([List<String> files]) : _files = files;
+  ObservableTransformer([List<String> files, bool releaseMode])
+      : _files = files, releaseMode = releaseMode == true;
   ObservableTransformer.asPlugin(BarbackSettings settings)
-      : _files = _readFiles(settings.configuration['files']);
+      : _files = _readFiles(settings.configuration['files']),
+        releaseMode = settings.mode == BarbackMode.RELEASE;
 
   static List<String> _readFiles(value) {
     if (value == null) return null;
@@ -59,36 +65,39 @@
       // Do a quick string check to determine if this is this file even
       // plausibly might need to be transformed. If not, we can avoid an
       // expensive parse.
-      if (!observableMatcher.hasMatch(content)) return;
+      if (!observableMatcher.hasMatch(content)) return null;
 
       var id = transform.primaryInput.id;
       // TODO(sigmund): improve how we compute this url
       var url = id.path.startsWith('lib/')
             ? 'package:${id.package}/${id.path.substring(4)}' : id.path;
       var sourceFile = new SourceFile(content, url: url);
+      var logger = new BuildLogger(transform,
+          convertErrorsToWarnings: !releaseMode,
+          detailsUri: 'http://goo.gl/5HPeuP');
       var transaction = _transformCompilationUnit(
-          content, sourceFile, transform.logger);
+          content, sourceFile, logger);
       if (!transaction.hasEdits) {
         transform.addOutput(transform.primaryInput);
-        return;
+      } else {
+        var printer = transaction.commit();
+        // TODO(sigmund): emit source maps when barback supports it (see
+        // dartbug.com/12340)
+        printer.build(url);
+        transform.addOutput(new Asset.fromString(id, printer.text));
       }
-      var printer = transaction.commit();
-      // TODO(sigmund): emit source maps when barback supports it (see
-      // dartbug.com/12340)
-      printer.build(url);
-      transform.addOutput(new Asset.fromString(id, printer.text));
+      return logger.writeOutput();
     });
   }
 }
 
 TextEditTransaction _transformCompilationUnit(
-    String inputCode, SourceFile sourceFile, TransformLogger logger) {
+    String inputCode, SourceFile sourceFile, BuildLogger logger) {
   var unit = parseCompilationUnit(inputCode, suppressErrors: true);
   var code = new TextEditTransaction(inputCode, sourceFile);
   for (var directive in unit.directives) {
     if (directive is LibraryDirective && _hasObservable(directive)) {
-      logger.warning('@observable on a library no longer has any effect. '
-          'It should be placed on individual fields.',
+      logger.warning(NO_OBSERVABLE_ON_LIBRARY,
           span: _getSpan(sourceFile, directive));
       break;
     }
@@ -99,8 +108,7 @@
       _transformClass(declaration, code, sourceFile, logger);
     } else if (declaration is TopLevelVariableDeclaration) {
       if (_hasObservable(declaration)) {
-        logger.warning('Top-level fields can no longer be observable. '
-            'Observable fields should be put in an observable objects.',
+        logger.warning(NO_OBSERVABLE_ON_TOP_LEVEL,
             span: _getSpan(sourceFile, declaration));
       }
     }
@@ -130,12 +138,10 @@
 bool _isAnnotationType(Annotation m, String name) => m.name.name == name;
 
 void _transformClass(ClassDeclaration cls, TextEditTransaction code,
-    SourceFile file, TransformLogger logger) {
+    SourceFile file, BuildLogger logger) {
 
   if (_hasObservable(cls)) {
-    logger.warning('@observable on a class no longer has any effect. '
-        'It should be placed on individual fields.',
-        span: _getSpan(file, cls));
+    logger.warning(NO_OBSERVABLE_ON_CLASS, span: _getSpan(file, cls));
   }
 
   // We'd like to track whether observable was declared explicitly, otherwise
@@ -192,18 +198,14 @@
     if (member is FieldDeclaration) {
       if (member.isStatic) {
         if (_hasObservable(member)){
-          logger.warning('Static fields can no longer be observable. '
-              'Observable fields should be put in an observable objects.',
+          logger.warning(NO_OBSERVABLE_ON_STATIC_FIELD,
               span: _getSpan(file, member));
         }
         continue;
       }
       if (_hasObservable(member)) {
         if (!declaresObservable) {
-          logger.warning('Observable fields should be put in an observable '
-              'objects. Please declare that this class extends from '
-              'Observable, includes Observable, or implements '
-              'Observable.',
+          logger.warning(REQUIRE_OBSERVABLE_INTERFACE,
               span: _getSpan(file, member));
         }
         _transformFields(file, member, code, logger);
@@ -312,7 +314,7 @@
 }
 
 void _transformFields(SourceFile file, FieldDeclaration member,
-    TextEditTransaction code, TransformLogger logger) {
+    TextEditTransaction code, BuildLogger logger) {
 
   final fields = member.fields;
   if (_isReadOnly(fields)) return;
diff --git a/pkg/observe/pubspec.yaml b/pkg/observe/pubspec.yaml
index 25cb90e..d1241c2 100644
--- a/pkg/observe/pubspec.yaml
+++ b/pkg/observe/pubspec.yaml
@@ -1,5 +1,5 @@
 name: observe
-version: 0.12.0
+version: 0.12.1+1
 author: Polymer.dart Authors <web-ui-dev@dartlang.org>
 description: >
   Observable properties and objects for use in template_binding.
@@ -17,7 +17,9 @@
   source_maps: '>=0.9.4 <0.11.0'
   source_span: '>=1.0.0 <2.0.0'
   utf: '>=0.9.0 <0.10.0'
+  code_transformers: '>=0.2.3 <0.3.0'
 dev_dependencies:
   unittest: '>=0.10.0 <0.11.0'
+  stack_trace: '>=0.9.1 <2.0.0'
 environment:
   sdk: '>=1.2.0 <2.0.0'
diff --git a/pkg/observe/test/transformer_test.dart b/pkg/observe/test/transformer_test.dart
index e21ffd4..305e956 100644
--- a/pkg/observe/test/transformer_test.dart
+++ b/pkg/observe/test/transformer_test.dart
@@ -7,6 +7,7 @@
 import 'package:observe/transformer.dart';
 import 'package:unittest/compact_vm_config.dart';
 import 'package:unittest/unittest.dart';
+import 'package:stack_trace/stack_trace.dart';
 
 main() {
   useCompactVMConfiguration();
@@ -129,16 +130,19 @@
 
 /// Helper that applies the transform by creating mock assets.
 Future<String> _transform(String code) {
-  var id = new AssetId('foo', 'a/b/c.dart');
-  var asset = new Asset.fromString(id, code);
-  var transformer = new ObservableTransformer();
-  return transformer.isPrimary(asset).then((isPrimary) {
-    expect(isPrimary, isTrue);
-    var transform = new _MockTransform(asset);
-    return transformer.apply(transform).then((_) {
-      expect(transform.outs, hasLength(1));
-      expect(transform.outs[0].id, id);
-      return transform.outs.first.readAsString();
+  return Chain.capture(() {
+    var id = new AssetId('foo', 'a/b/c.dart');
+    var asset = new Asset.fromString(id, code);
+    var transformer = new ObservableTransformer();
+    return transformer.isPrimary(asset).then((isPrimary) {
+      expect(isPrimary, isTrue);
+      var transform = new _MockTransform(asset);
+      return transformer.apply(transform).then((_) {
+        expect(transform.outs, hasLength(2));
+        expect(transform.outs[0].id, id);
+        expect(transform.outs[1].id, id.addExtension('._buildLogs.1'));
+        return transform.outs.first.readAsString();
+      });
     });
   });
 }
@@ -166,7 +170,8 @@
 
   readInput(id) => throw new UnimplementedError();
   readInputAsString(id, {encoding}) => throw new UnimplementedError();
-  hasInput(id) => throw new UnimplementedError();
+  hasInput(id) =>
+      new Future.value(id == _asset.id || outs.any((a) => a.id == id));
 
   static void _mockLogFn(AssetId asset, LogLevel level, String message,
                          span) {
diff --git a/pkg/observe/test/unique_message_test.dart b/pkg/observe/test/unique_message_test.dart
new file mode 100644
index 0000000..54fb5a4
--- /dev/null
+++ b/pkg/observe/test/unique_message_test.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2014, 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.
+
+/// Tests for some of the utility helper functions used by the compiler.
+library polymer.test.build.messages_test;
+
+import 'dart:mirrors';
+
+import 'package:unittest/unittest.dart';
+import 'package:code_transformers/messages/messages.dart' show Message;
+
+import 'package:observe/src/messages.dart' as p1;
+
+/// [p1] is accessed via mirrors, this comment prevents the analyzer from
+/// complaining about it.
+main() {
+  test('each message id is unique', () {
+    var seen = {};
+    int total = 0;
+    var mirrors = currentMirrorSystem();
+    var lib = mirrors.findLibrary(#observe.src.messages);
+    expect(lib, isNotNull);
+    lib.declarations.forEach((symbol, decl) {
+      if (decl is! VariableMirror) return;
+      var field = lib.getField(symbol).reflectee;
+      var name = MirrorSystem.getName(symbol);
+      if (field is! Message) return;
+      var id = field.id;
+      expect(seen.containsKey(id), isFalse, reason: 'Duplicate id `$id`. '
+          'Currently set for both `$name` and `${seen[id]}`.');
+      seen[id] = name;
+      total++;
+    });
+    expect(seen.length, total);
+  });
+}
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 04aac83..3d174c6 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -20,6 +20,11 @@
 scheduled_test/test/scheduled_stream/stream_matcher_test: Pass, Slow
 polymer/test/build/script_compactor_test: Pass, Slow
 
+
+# Failures when running with --optimization-counter-threshold=5
+[ $runtime == vm && $mode == debug && $checked ]
+intl/test/number_format_test: Skip # Dart Issue 20875
+
 [ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
 third_party/angular_tests/browser_test/*: Skip # github perf_api.dart issue 5
 third_party/angular_tests/browser_test/core_dom/shadow_root_options: Fail # Issue 19329
@@ -99,7 +104,6 @@
 docgen/test/*: Skip # Far too slow
 third_party/angular_tests/browser_test: Pass, Slow # Large dart2js compile time
 typed_data/test/typed_buffers_test/01: Fail # Not supporting Int64List, Uint64List.
-math/test/bigint_test: RuntimeError # Requires bigint support.
 
 analysis_server/test/search/element_references_test: Pass, Slow
 analysis_server/test/services/index/store/codec_test: Pass, Slow
@@ -109,6 +113,10 @@
 # subprocess.
 analysis_server/test/integration: Skip
 
+observe/test/unique_message_test: Skip # Intended only as a vm test.
+polymer/test/build/unique_message_test: Skip # Intended only as a vm test.
+code_transformers/test/unique_message_test: Skip # Intended only as a vm test.
+
 [ $compiler == dart2js && $runtime == ff && $system == windows ]
 http/test/html/client_test: Fail # Issue 19750
 scheduled_test/test/scheduled_stream/scheduled_stream_test: Fail # Issue 19750
@@ -233,6 +241,7 @@
 polymer/test/noscript_test: RuntimeError, Pass # Issue 13260
 intl/test/date_time_format_http_request_test: Fail # Issue 8983
 polymer_expressions/test/syntax_test: Fail, Timeout, Pass # Issue 19138
+observe/test/list_path_observer_test: RuntimeError, Pass # Issue 20849
 
 [ $runtime == ie10 ]
 typed_data/test/typed_buffers_test/none: Fail # Issue   17607 (I put this here explicitly, since this is not the same as on ie9)
@@ -262,8 +271,6 @@
 
 [ $runtime == vm && $system == windows ]
 intl/test/find_default_locale_standalone_test: Fail # Issue 8110
-glob/test/match_test: RuntimeError # Issue 20789
-glob/test/parse_test: RuntimeError # Issue 20789
 
 [ $compiler == dartanalyzer || $compiler == dart2analyzer ]
 # These tests are runtime negative but statically positive, so we skip
@@ -317,7 +324,11 @@
 analyzer2dart/*: Skip # Uses dart:io.
 analyzer/test/*: Skip # Uses dart:io.
 barback/test/*: Fail, OK # Uses dart:io.
-code_transformers/test/*: Skip # Uses dart:io.
+code_transformers/test/assets_test: Skip # Uses dart:io
+code_transformers/test/entry_point_test: Skip # Uses dart:io
+code_transformers/test/resolver_test: Skip # Uses dart:io
+code_transformers/test/unique_message_test: Skip # Uses dart:io
+code_transformers/test/remove_sourcemap_comment_test: Skip # Uses dart:io.
 http/test/io/*: Fail, OK # Uses dart:io.
 http_parser/test/web_socket_test: Fail, OK # Uses dart:io
 http_multi_server/test/http_multi_server_test: Skip # Uses dart:io
@@ -331,6 +342,7 @@
 intl/test/message_extraction/message_extraction_no_deferred_test: Fail, OK # Uses dart:io.
 intl/test/message_extraction/really_fail_extraction_test: Fail, OK # Users dart:io
 observe/test/transformer_test: Fail, OK # Uses dart:io.
+observe/test/unique_message_test: Skip # Intended only as a vm test.
 path/test/io_test: Fail, OK # Uses dart:io.
 polymer/test/build/all_phases_test: Fail, OK # Uses dart:io.
 polymer/test/build/polyfill_injector_test: Fail, OK # Uses dart:io.
@@ -340,6 +352,8 @@
 polymer/test/build/utils_test: Fail, OK # Uses dart:io.
 polymer/test/build/import_inliner_test: Fail, OK # Uses dart:io.
 polymer/test/build/linter_test: Fail, OK # Uses dart:io.
+polymer/test/build/remove_sourcemap_comment_test: Fail, OK # Uses dart:io.
+polymer/test/build/unique_message_test: Skip # Intended only as a vm test.
 shelf/test/shelf_io_test: Fail, OK # Uses dart:io
 shelf_web_socket/test/*: Fail, OK # Uses dart:io.
 smoke/test/codegen/end_to_end_test: Skip # Uses dart:io.
@@ -430,7 +444,6 @@
 [ $browser ]
 docgen/test/*: Skip  # Uses dart:io
 scheduled_test/test/scheduled_server_test: Skip # Uses dart:io
-glob/test/match_test: RuntimeError # Issue 20788
 
 [ $browser || $runtime == vm ]
 unittest/test/missing_tick_test: Fail, OK # Expected to fail, due to timeout.
diff --git a/pkg/polymer/CHANGELOG.md b/pkg/polymer/CHANGELOG.md
index da884a2..5468743 100644
--- a/pkg/polymer/CHANGELOG.md
+++ b/pkg/polymer/CHANGELOG.md
@@ -1,25 +1,36 @@
-# changelog
-
 This file contains highlights of what changes on each version of the polymer
 package. We will also note important changes to the polyfill packages (observe,
 web_components, and template_binding) if they impact polymer.
 
-#### Pub version 0.13.0+1
+#### 0.13.1
+  * Upgraded error messages to have a unique and stable identifier. This
+    requires a version of `code_transformers` newer than `0.2.3`.
+  * Upgraded minimum version constraint on 'args' to '0.11.0'.
+
+#### 0.13.0+3
+  * Added a warning about flashes of unstyled content if we can detect a
+    situation that would cause it [20751](http://dartbug.com/20751).
+
+#### 0.13.0+2
+  * Update internal transformers to delete .concat.js and .map files when in
+    release mode, saving about 1MB of space in the built output.
+
+#### 0.13.0+1
   * Bug fix for http://dartbug.com/18171. Elements that extend other elements
     but don't have a template will still inherit styles from those elements.
   * Bug fix for http://dartbug.com/20544. Better runtime logging when attributes
     are defined on an element but have no corresponding property on the class.
 
-#### Pub version 0.13.0
+#### 0.13.0
   * Update to match polymer 0.3.5 ([polymer-dev#5d00e4b][5d00e4b]). There was a
     breaking change in the web_components package where selecting non-rendered 
     elements doesn't work, but it shouldn't affect most people. See 
     https://github.com/Polymer/ShadowDOM/issues/495.
 
-#### Pub version 0.12.2+1
+#### 0.12.2+1
   * Small bug fix for `polymer:new_element`
 
-#### Pub version 0.12.2
+#### 0.12.2
   * Fix for [20539](http://dartbug.com/20539). Log widget will now html escape
     messages.
   * Fix for [20538](http://dartbug.com/20538). Log widget will now surface lint
@@ -32,7 +43,7 @@
     cannot be extended.
   * other bug fixes in `polymer:new_entry`.
 
-#### Pub version 0.12.1
+#### 0.12.1
   * **New**: When running in pub-serve, any warnings and errors detected by the
     polymer transformers will be displayed in the lower-right corner of your
     entrypoint page. You can opt-out by adding this option to your pubspec:
@@ -78,31 +89,31 @@
     longer throw an error.
 
 
-#### Pub version 0.12.0+7
+#### 0.12.0+7
   * Widen the constraint on `unittest`.
 
-#### Pub version 0.12.0+6
+#### 0.12.0+6
   * Widen the constraint on analyzer.
   * Support for `_src` and similar attributes in polymer transformers.
 
-#### Pub version 0.12.0+5
+#### 0.12.0+5
   * Raise the lower bound on the source_maps constraint to exclude incompatible
     versions.
 
-#### Pub version 0.12.0+4
+#### 0.12.0+4
   * Widen the constraint on source_maps.
 
-#### Pub version 0.12.0+3
+#### 0.12.0+3
   * Fix a final use of `getLocationMessage`.
 
-#### Pub version 0.12.0+2
+#### 0.12.0+2
   * Widen the constraint on barback.
 
-#### Pub version 0.12.0+1
+#### 0.12.0+1
   * Switch from `source_maps`' `Span` class to `source_span`'s `SourceSpan`
     class.
 
-#### Pub version 0.12.0
+#### 0.12.0
  * Updated to match polymer 0.3.4 ([polymer-dev#6ad2d61][6ad2d61]), this
    includes the following changes:
      * added @ComputedProperty
@@ -119,25 +130,25 @@
  * Fix for [17596](https://code.google.com/p/dart/issues/detail?id=17596)
  * Fix for [19770](https://code.google.com/p/dart/issues/detail?id=19770)
 
-#### Pub version 0.11.0+5
+#### 0.11.0+5
   * fixes web_components version in dependencies
 
-#### Pub version 0.11.0+4
+#### 0.11.0+4
   * workaround for bug
     [19653](https://code.google.com/p/dart/issues/detail?id=19653)
 
-#### Pub version 0.11.0+3
+#### 0.11.0+3
   * update readme
 
-#### Pub version 0.11.0+2
+#### 0.11.0+2
   * bug fix: event listeners were not in the dirty-checking zone
   * bug fix: dispatch event in auto-binding
 
-#### Pub version 0.11.0+1
+#### 0.11.0+1
   * Added a workaround for bug in HTML imports (issue
     [19650](https://code.google.com/p/dart/issues/detail?id=19650)).
 
-#### Pub version 0.11.0
+#### 0.11.0
   * **breaking change**: platform.js and dart_support.js must be specified in
     your entry points at the beginning of `<head>`.
   * **breaking change**: polymer.html is not required in entrypoints, but it is
@@ -150,14 +161,14 @@
     places like CSS selectors. To make it reflected back to an attribute use
     `@PublishedProperty(reflect: true)`.
 
-#### Pub version 0.10.1
+#### 0.10.1
   * Reduce the analyzer work by mocking a small subset of the core libraries.
 
-#### Pub version 0.10.0+1
+#### 0.10.0+1
   * Better error message on failures in pub-serve/pub-build when pubspec.yaml
     is missing or has a wrong configuration for the polymer transformers.
 
-#### Pub version 0.10.0
+#### 0.10.0
   * Interop with polymer-js elements now works.
   * Polymer polyfills are now consolidated in package:web_components, which is
     identical to platform.js from http://polymer-project.org.
@@ -174,36 +185,36 @@
   * **breaking change**: @initMethod and @CustomTag are only supported on
     public classes/methods.
 
-#### Pub version 0.9.5
+#### 0.9.5
   * Improvements on how to handle cross-package HTML imports.
 
-#### Pub version 0.9.4
+#### 0.9.4
   * Removes unused dependency on csslib.
 
-#### Pub version 0.9.3+3
+#### 0.9.3+3
   * Removes workaround now that mirrors implement a missing feature. Requires
     SDK >= 1.1.0-dev.5.0.
 
-#### Pub version 0.9.3+2
+#### 0.9.3+2
   * Fix rare canonicalization bug
     [15694](https://code.google.com/p/dart/issues/detail?id=15694)
 
-#### Pub version 0.9.3+1
+#### 0.9.3+1
   * Fix type error in runner.dart
     [15649](https://code.google.com/p/dart/issues/detail?id=15649).
 
-#### Pub version 0.9.3
+#### 0.9.3
   * pub-build now runs the linter automatically
 
-#### Pub version 0.9.2+4
+#### 0.9.2+4
   * fix linter on SVG and MathML tags with XML namespaces
 
-#### Pub version 0.9.2+3
+#### 0.9.2+3
   * fix [15574](https://code.google.com/p/dart/issues/detail?id=15574),
     event bindings in dart2js, by working around issue
     [15573](https://code.google.com/p/dart/issues/detail?id=15573)
 
-#### Pub version 0.9.2+2
+#### 0.9.2+2
   * fix enteredView in dart2js, by using custom_element >= 0.9.1+1
 
 [6ad2d61]:https://github.com/Polymer/polymer-dev/commit/6a3e1b0e2a0bbe546f6896b3f4f064950d7aee8f
diff --git a/pkg/polymer/bin/new_entry.dart b/pkg/polymer/bin/new_entry.dart
index 9f299e5..5bbcd13 100644
--- a/pkg/polymer/bin/new_entry.dart
+++ b/pkg/polymer/bin/new_entry.dart
@@ -159,7 +159,8 @@
   } else {
     // There were no transformers at all.
     insertionPoint = pubspecText.length;
-    textToInsert = 'transformers:\n- ';
+    var optionalNewline = pubspecText.endsWith('\n') ? '' : '\n';
+    textToInsert = '${optionalNewline}transformers:\n- ';
     entryPoints = [entryPoint];
   }
 
diff --git a/pkg/polymer/lib/src/build/build_filter.dart b/pkg/polymer/lib/src/build/build_filter.dart
index 4b50fe1..66ee19c 100644
--- a/pkg/polymer/lib/src/build/build_filter.dart
+++ b/pkg/polymer/lib/src/build/build_filter.dart
@@ -9,6 +9,7 @@
 import 'dart:async';
 
 import 'package:barback/barback.dart';
+import 'package:code_transformers/messages/build_logger.dart';
 import 'common.dart';
 
 /// Removes any files not needed for deployment, such as internal build
@@ -17,27 +18,27 @@
   final TransformOptions options;
   BuildFilter(this.options);
 
-  // TODO(nweiz): This should just take an AssetId when barback <0.13.0 support
-  // is dropped.
-  Future<bool> isPrimary(idOrAsset) {
-    var id = idOrAsset is AssetId ? idOrAsset : idOrAsset.id;
-    return new Future.value(
-      // nothing is filtered in debug mode
-      options.releaseMode &&
+  isPrimary(AssetId id) {
+    // nothing is filtered in debug mode
+    return options.releaseMode &&
       // TODO(sigmund): remove this exclusion once we have dev_transformers
       // (dartbug.com/14187)
-      id.path.startsWith('web/') &&
+      !id.path.startsWith('lib/') &&
       // may filter non-entry HTML files and internal artifacts
-      (id.extension == '.html' || id.extension == '.scriptUrls') &&
+      (id.extension == '.html' || id.extension == _DATA_EXTENSION) &&
       // keep any entry points
-      !options.isHtmlEntryPoint(id));
+      !options.isHtmlEntryPoint(id);
   }
 
-  Future apply(Transform transform) {
-    if (transform.primaryInput.id.extension == '.scriptUrls') {
-      return new Future.value(null);
+  apply(Transform transform) {
+    transform.consumePrimary();
+    if (transform.primaryInput.id.extension == _DATA_EXTENSION) {
+      return null;
     }
-    return readPrimaryAsHtml(transform).then((document) {
+    var logger = new BuildLogger(transform,
+        convertErrorsToWarnings: !options.releaseMode,
+          detailsUri: 'http://goo.gl/5HPeuP');
+    return readPrimaryAsHtml(transform, logger).then((document) {
       // Keep .html files that don't use polymer, since the app developer might
       // have non-polymer entrypoints.
       if (document.querySelectorAll('polymer-element').isEmpty) {
@@ -46,3 +47,5 @@
     });
   }
 }
+
+const String _DATA_EXTENSION = '._data';
diff --git a/pkg/polymer/lib/src/build/build_log_combiner.dart b/pkg/polymer/lib/src/build/build_log_combiner.dart
index cfd85ca..66ccae2 100644
--- a/pkg/polymer/lib/src/build/build_log_combiner.dart
+++ b/pkg/polymer/lib/src/build/build_log_combiner.dart
@@ -8,10 +8,10 @@
 import 'dart:async';
 
 import 'package:barback/barback.dart';
+import 'package:code_transformers/messages/build_logger.dart';
 import 'package:html5lib/parser.dart' show parseFragment;
 
 import 'common.dart';
-import 'wrapped_logger.dart';
 
 /// Logic to combine all the ._buildLog.* logs into one ._buildLog file.
 class BuildLogCombiner extends Transformer with PolymerTransformer {
@@ -29,6 +29,6 @@
 
   Future apply(Transform transform) {
     // Combine all ._buildLogs* files into one ._buildLogs file.
-    return WrappedLogger.combineLogFiles(transform);
+    return BuildLogger.combineLogFiles(transform);
   }
 }
diff --git a/pkg/polymer/lib/src/build/common.dart b/pkg/polymer/lib/src/build/common.dart
index fd62d57..d75c585 100644
--- a/pkg/polymer/lib/src/build/common.dart
+++ b/pkg/polymer/lib/src/build/common.dart
@@ -12,10 +12,16 @@
 import 'package:analyzer/src/generated/parser.dart';
 import 'package:analyzer/src/generated/scanner.dart';
 import 'package:barback/barback.dart';
+import 'package:code_transformers/messages/build_logger.dart';
 import 'package:html5lib/dom.dart' show Document;
 import 'package:html5lib/parser.dart' show HtmlParser;
-import 'package:path/path.dart' as path;
 import 'package:observe/transformer.dart' show ObservableTransformer;
+import 'package:path/path.dart' as path;
+
+import 'constants.dart';
+import 'messages.dart';
+
+export 'constants.dart';
 
 const _ignoredErrors = const [
   'unexpected-dash-after-double-dash-in-comment',
@@ -24,7 +30,7 @@
 
 /// Parses an HTML file [contents] and returns a DOM-like tree. Adds emitted
 /// error/warning to [logger].
-Document _parseHtml(String contents, String sourcePath, TransformLogger logger,
+Document _parseHtml(String contents, String sourcePath, BuildLogger logger,
     {bool checkDocType: true, bool showWarnings: true}) {
   // TODO(jmesserly): make HTTP encoding configurable
   var parser = new HtmlParser(contents, encoding: 'utf8',
@@ -37,7 +43,8 @@
     for (var e in parser.errors) {
       if (_ignoredErrors.contains(e.errorCode)) continue;
       if (checkDocType || e.errorCode != 'expected-doctype-but-got-start-tag') {
-        logger.warning(e.message, span: e.span);
+        logger.warning(HTML5_WARNING.create({'message': e.message}),
+            span: e.span);
       }
     }
   }
@@ -126,22 +133,23 @@
 abstract class PolymerTransformer {
   TransformOptions get options;
 
-  Future<Document> readPrimaryAsHtml(Transform transform) {
+  Future<Document> readPrimaryAsHtml(Transform transform, BuildLogger logger) {
     var asset = transform.primaryInput;
     var id = asset.id;
     return asset.readAsString().then((content) {
-      return _parseHtml(content, id.path, transform.logger,
+      return _parseHtml(content, id.path, logger,
         checkDocType: options.isHtmlEntryPoint(id));
     });
   }
 
   Future<Document> readAsHtml(AssetId id, Transform transform,
+      BuildLogger logger,
       {bool showWarnings: true}) {
     var primaryId = transform.primaryInput.id;
     bool samePackage = id.package == primaryId.package;
-    var url = spanUrlFor(id, transform);
+    var url = spanUrlFor(id, transform, logger);
     return transform.readInputAsString(id).then((content) {
-      return _parseHtml(content, url, transform.logger,
+      return _parseHtml(content, url, logger,
         checkDocType: samePackage && options.isHtmlEntryPoint(id),
         showWarnings: showWarnings);
     });
@@ -162,11 +170,11 @@
 /// - If the asset is from another package, then use [assetUrlFor], this will
 ///   likely be a "package:" url to the file in the other package, which is
 ///   enough for users to identify where the error is.
-String spanUrlFor(AssetId id, Transform transform) {
+String spanUrlFor(AssetId id, Transform transform, logger) {
   var primaryId = transform.primaryInput.id;
   bool samePackage = id.package == primaryId.package;
   return samePackage ? id.path
-      : assetUrlFor(id, primaryId, transform.logger, allowAssetUrl: true);
+      : assetUrlFor(id, primaryId, logger, allowAssetUrl: true);
 }
 
 /// Transformer phases which should be applied to the Polymer package.
@@ -176,7 +184,7 @@
 /// Generate the import url for a file described by [id], referenced by a file
 /// with [sourceId].
 // TODO(sigmund): this should also be in barback (dartbug.com/12610)
-String assetUrlFor(AssetId id, AssetId sourceId, TransformLogger logger,
+String assetUrlFor(AssetId id, AssetId sourceId, BuildLogger logger,
     {bool allowAssetUrl: false}) {
   // use package: and asset: urls if possible
   if (id.path.startsWith('lib/')) {
@@ -185,8 +193,10 @@
 
   if (id.path.startsWith('asset/')) {
     if (!allowAssetUrl) {
-      logger.error("asset urls not allowed. "
-          "Don't know how to refer to $id from $sourceId");
+      logger.error(INTERNAL_ERROR_DONT_KNOW_HOW_TO_IMPORT.create({
+            'target': id,
+            'source': sourceId,
+            'extra': ' (asset urls not allowed.)'}));
       return null;
     }
     return 'asset:${id.package}/${id.path.substring(6)}';
@@ -210,19 +220,6 @@
   return path.posix.joinAll(path.split(assetPath));
 }
 
-/// These names have meaning in SVG or MathML, so they aren't allowed as custom
-/// tags. See [isCustomTagName].
-const invalidTagNames = const {
-  'annotation-xml': '',
-  'color-profile': '',
-  'font-face': '',
-  'font-face-src': '',
-  'font-face-uri': '',
-  'font-face-format': '',
-  'font-face-name': '',
-  'missing-glyph': '',
-};
-
 /// Returns true if this is a valid custom element name. See:
 /// <http://w3c.github.io/webcomponents/spec/custom/#dfn-custom-element-type>
 bool isCustomTagName(String name) {
@@ -233,7 +230,3 @@
 /// Regex to split names in the 'attributes' attribute, which supports 'a b c',
 /// 'a,b,c', or even 'a b,c'. This is the same as in `lib/src/declaration.dart`.
 final ATTRIBUTES_REGEX = new RegExp(r'\s|,');
-
-const POLYMER_EXPERIMENTAL_HTML = 'packages/polymer/polymer_experimental.html';
-
-const String LOG_EXTENSION = '._buildLogs';
diff --git a/pkg/polymer/lib/src/build/constants.dart b/pkg/polymer/lib/src/build/constants.dart
new file mode 100644
index 0000000..bc37532
--- /dev/null
+++ b/pkg/polymer/lib/src/build/constants.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2014, 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 polymer.src.build.constants;
+
+/// These names have meaning in SVG or MathML, so they aren't allowed as custom
+/// tags. See [isCustomTagName].
+const invalidTagNames = const {
+  'annotation-xml': '',
+  'color-profile': '',
+  'font-face': '',
+  'font-face-src': '',
+  'font-face-uri': '',
+  'font-face-format': '',
+  'font-face-name': '',
+  'missing-glyph': '',
+};
+
+const POLYMER_EXPERIMENTAL_HTML = 'packages/polymer/polymer_experimental.html';
diff --git a/pkg/polymer/lib/src/build/delete_file.dart b/pkg/polymer/lib/src/build/delete_file.dart
new file mode 100644
index 0000000..b417605
--- /dev/null
+++ b/pkg/polymer/lib/src/build/delete_file.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2014, 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.
+
+/// Transformer that deletes everything that it sees, but only in release mode.
+library web_components.src.delete_file;
+
+import 'dart:async';
+import 'package:barback/barback.dart';
+
+// Deletes all files supplied in release mode.
+class DeleteFile extends Transformer {
+  BarbackSettings settings;
+
+  DeleteFile.asPlugin(this.settings);
+
+  /// Only apply to files in release mode.
+  isPrimary(_) => settings.mode == BarbackMode.RELEASE;
+
+  apply(Transform transform) {
+    transform.consumePrimary();
+  }
+}
diff --git a/pkg/polymer/lib/src/build/generated/messages.html b/pkg/polymer/lib/src/build/generated/messages.html
new file mode 100644
index 0000000..61089c9
--- /dev/null
+++ b/pkg/polymer/lib/src/build/generated/messages.html
@@ -0,0 +1,573 @@
+<!doctype html>
+<!--
+  This file is autogenerated with polymer/tool/create_message_details_page.dart
+-->
+<html>
+<style>
+@font-face {
+  font-family: 'Montserrat';
+  font-style: normal;
+  font-weight: 400;
+  src: url(https://themes.googleusercontent.com/static/fonts/montserrat/v4/zhcz-_WihjSQC0oHJ9TCYL3hpw3pgy2gAi-Ip7WPMi0.woff) format('woff');
+}
+@font-face {
+  font-family: 'Montserrat';
+  font-style: normal;
+  font-weight: 700;
+  src: url(https://themes.googleusercontent.com/static/fonts/montserrat/v4/IQHow_FEYlDC4Gzy_m8fcnbFhgvWbfSbdVg11QabG8w.woff) format('woff');
+}
+@font-face {
+  font-family: 'Roboto';
+  font-style: normal;
+  font-weight: 300;
+  src: url(https://themes.googleusercontent.com/static/fonts/roboto/v10/Hgo13k-tfSpn0qi1SFdUfbO3LdcAZYWl9Si6vvxL-qU.woff) format('woff');
+}
+@font-face {
+  font-family: 'Roboto';
+  font-style: normal;
+  font-weight: 400;
+  src: url(https://themes.googleusercontent.com/static/fonts/roboto/v10/CrYjSnGjrRCn0pd9VQsnFOvvDin1pK8aKteLpeZ5c0A.woff) format('woff');
+}
+
+body {
+  width: 80vw;
+  margin: 20px;
+  font-family: Roboto, sans-serif;
+}
+
+h2 {
+  font-family: Montserrat, sans-serif;
+  box-sizing: border-box;
+  color: rgb(72, 72, 72);
+  display: block;
+  font-style: normal;
+  font-variant: normal;
+  font-weight: normal;
+}
+
+h3 {
+  font-family: Montserrat, sans-serif;
+  box-sizing: border-box;
+  color: rgb(72, 72, 72);
+  display: block;
+  font-style: normal;
+  font-variant: normal;
+  font-weight: normal;
+}
+
+pre {
+  display: block;
+  padding: 9.5px;
+  margin: 0 0 10px;
+  color: #333;
+  word-break: break-all;
+  word-wrap: break-word;
+  background-color: #f5f5f5;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+}
+
+code {
+   font-family: Menlo,Monaco,Consolas,"Courier New",monospace;
+   box-sizing: border-box;
+   padding: 0;
+   font-size: 90%;
+   color: #0084c5;
+   white-space: nowrap;
+   border-radius: 4px;
+   background-color: #f9f2f4;
+}
+
+pre code {
+   white-space: inherit;
+   color: inherit;
+   background-color: inherit;
+}
+
+a {
+  color: rgb(42, 100, 150);
+}
+
+h3 > a {
+  display: none;
+  font-size: 0.8em;
+}
+
+h3:hover > a {
+  display: inline;
+}
+</style>
+<body>
+<h2>Messages from package <code>code_transformers</code></h2>
+<hr />
+
+<h3 id="code_transformers_1">Absolute paths not allowed <a href="#code_transformers_1">#1</a></h3>
+<p>The transformers processing your code were trying to resolve a URL and identify
+a file that they correspond to. Currently only relative paths can be resolved.</p>
+<hr />
+
+<h3 id="code_transformers_2">Invalid URL to reach another package <a href="#code_transformers_2">#2</a></h3>
+<p>To reach an asset that belongs to another package, use <code>package:</code> URLs in
+Dart code, but in any other language (like HTML or CSS) use relative URLs.</p>
+<p>These are the rules you must follow to write URLs that refer to files in other
+packages:</p><ul><li>
+<p>If the file containing the relative URL is an entrypoint under <code>web</code>, use
+<code>packages/package_name/path_to_file</code></p></li><li>
+<p>If the file containing the URL is under <code>web</code>, but in a different directory
+than your entrypoint, walk out to the same level as the entrypoint first,
+then enter the <code>packages</code> directory.</p>
+<p><strong>Note</strong>: If two entrypoints include the file under <code>web</code> containing the
+URL, either both entrypoints have to live in the same directory, or you need
+to move the file to the <code>lib</code> directory.</p></li><li>
+<p>If the file containing the URL lives under <code>lib</code>, walk up as many levels as
+directories you have + 1. This is because code in <code>lib/a/b</code> is loaded from
+<code>packages/package_name/a/b</code>.</p></li></ul>
+<p>The rules are easier to follow if you know how the code is laid out for
+Dartium before you build, and how it is laid out after you build it with <code>pub
+build</code>. Consider the following example:</p>
+<p>   package a</p>
+<pre><code>  lib/
+    |- a1.html
+
+  web/
+    |- a2.html
+</code></pre>
+<p>   package b</p>
+<pre><code>  lib/
+    |- b1.html
+    |- b2/
+        |- b3.html
+</code></pre>
+<p>   package c</p>
+<pre><code>  lib/
+    |- c3.html
+
+  web/
+    |- index.html
+    |- index.dart
+    |- c1/
+        |- c2.html
+</code></pre>
+<p>If your app is package <code>c</code>, then <code>pub get</code> generates a packages directory under
+the web directory, like this:</p>
+<pre><code>  web/
+    |- index.html
+    |- index.dart
+    |- c1/
+    |   |- c2.html
+    |- packages/
+        |- a/
+        |   |- a1.html
+        |- b/
+        |   |- b1.html
+        |   |- b2/
+        |       |- b3.html
+        |- c/
+            |- c3.html
+</code></pre>
+<p>Note that no <code>lib</code> directory is under the <code>packages</code> directory.
+When you launch <code>web/index.html</code> in Dartium, Dartium loads <code>package:</code> imports from
+<code>web/packages/</code>.</p>
+<p>If you need to refer to any file in other packages from <code>index.html</code>, you can
+simply do <code>packages/package_name/path_to_file</code>. For example
+<code>packages/b/b2/b3.html</code>. From <code>index.html</code> you can also refer to files under the
+web directory of the same package using a simple relative URL, like
+<code>c1/c2.html</code>.</p>
+<p>However, if you want to load <code>a1.html</code> from <code>c2.html</code>, you need to reach out to
+the packages directory that lives next to your entrypoint and then load the file
+from there, for example <code>../packages/a/a1.html</code>. Because pub generates symlinks
+to the packages directory also under c1, you may be tempted to write
+<code>packages/a/a1.html</code>, but that is incorrect - it would yield a canonicalization
+error (see more below).</p>
+<p>If you want to load a file from the lib directory of your own package, you
+should also use a package URL. For example, <code>packages/c/c3.html</code> and not
+<code>../lib/c3.html</code>. This will allow you to write code in <code>lib</code> in a way that it
+can be used within and outside your package without making any changes to it.</p>
+<p>Because any time you reach inside a <code>lib/</code> directory you do so using a
+<code>packages/</code> URL, the rules for reaching into other files in other packages are
+always consistent: go up to exit the <code>packages</code> directory and go back inside to
+the file you are looking for.  For example, to reach <code>a1.html</code> from <code>b3.html</code>
+you need to write <code>../../../packages/a/a1.html</code>.</p>
+<p>The motivation behind all these rules is that URLs need to work under many
+scenarios at once:</p><ul><li>
+<p>They need to work in Dartium without any code transformation: resolving the
+path in the context of a simple HTTP server, or using <code>file:///</code> URLs,
+should yield a valid path to assets. The <code>packages</code> directory is safe to use
+because pub already creates it next to entrypoints of your application.</p></li><li>
+<p>They need to be canonical. To take advantage of caching, multiple URLs
+reaching the same asset should resolve to the same absolute URL.</p>
+<p>Also, in projects that use HTML imports (like polymer) tools support that
+you reach a library with either Dart imports or HTML imports, and correctly
+resolve them to be the same library. The rules are designed to allow tools
+to support this.</p>
+<p>For example, consider you have an import might like:</p>
+<pre><code>&lt;link rel=import href=packages/a/a.html&gt;
+</code></pre>
+<p>where a.html has <code>&lt;script type="application/dart" src="a.dart"&gt;</code>. If your
+Dart entrypoint also loads <code>"package:a/a.dart"</code>,  then a tool need to make
+sure that both versions of <code>a.dart</code> are loaded from the same URL. Otherwise,
+you may see errors at runtime like: <code>A is not a subtype of A</code>, which can be
+extremely confusing.</p>
+<p>When you follow the rules above, our tools can detect the pattern in the
+HTML-import URL containing <code>packages/</code> and canonicalize the import
+by converting <code>packages/a/a.dart</code> into <code>package:a/a.dart</code> under the hood.</p></li><li>
+<p>They need to continue to be valid after applications are built.
+Technically this could be done automatically with pub transformers, but to
+make sure that code works also in Dartium with a simple HTTP Server,
+existing transformers do not fix URLs, they just detect inconsistencies and
+produce an error message like this one, instead.</p></li></ul>
+<hr />
+
+<h3 id="code_transformers_3">Incomplete URL to asset in another package <a href="#code_transformers_3">#3</a></h3>
+<p>URLs that refer to assets in other packages need to explicitly mention the
+<code>packages/</code> directory. In the future this requirement might be removed, but for
+now you must use a canonical URL form for it.</p>
+<p>For example, if <code>packages/a/a.html</code> needs to import <code>packages/b/b.html</code>,
+you might expect a.html to import <code>../b/b.html</code>. Instead, it must import
+<code>../../packages/b/b.html</code>.
+See <a href="http://dartbug.com/15797">issue 15797</a>.</p>
+<hr /><h2>Messages from package <code>observe</code></h2>
+<hr />
+
+<h3 id="observe_1"><code>@observable</code> not supported on libraries <a href="#observe_1">#1</a></h3>
+<p>Only instance fields on <code>Observable</code> classes can be observable,
+and you must explicitly annotate each observable field as <code>@observable</code>.</p>
+<p>Support for using the <code>@observable</code> annotation in libraries, classes, and
+elsewhere is deprecated.</p>
+<hr />
+
+<h3 id="observe_2"><code>@observable</code> not supported on top-level fields <a href="#observe_2">#2</a></h3>
+<p>Only instance fields on <code>Observable</code> classes can be observable,
+and you must explicitly annotate each observable field as <code>@observable</code>.</p>
+<p>Support for using the <code>@observable</code> annotation in libraries, classes, and
+elsewhere is deprecated.</p>
+<hr />
+
+<h3 id="observe_3"><code>@observable</code> not supported on classes <a href="#observe_3">#3</a></h3>
+<p>Only instance fields on <code>Observable</code> classes can be observable,
+and you must explicitly annotate each observable field as <code>@observable</code>.</p>
+<p>Support for using the <code>@observable</code> annotation in libraries, classes, and
+elsewhere is deprecated.</p>
+<hr />
+
+<h3 id="observe_4"><code>@observable</code> not supported on static fields <a href="#observe_4">#4</a></h3>
+<p>Only instance fields on <code>Observable</code> classes can be observable,
+and you must explicitly annotate each observable field as <code>@observable</code>.</p>
+<p>Support for using the <code>@observable</code> annotation in libraries, classes, and
+elsewhere is deprecated.</p>
+<hr />
+
+<h3 id="observe_5"><code>@observable</code> field not in an <code>Observable</code> class <a href="#observe_5">#5</a></h3>
+<p>Only instance fields on <code>Observable</code> classes can be observable,
+and you must explicitly annotate each observable field as <code>@observable</code>.</p>
+<p>Support for using the <code>@observable</code> annotation in libraries, classes, and
+elsewhere is deprecated.</p>
+<hr /><h2>Messages from package <code>polymer</code></h2>
+<hr />
+
+<h3 id="polymer_1">Import not found <a href="#polymer_1">#1</a></h3>
+<p>An HTML import seems to be broken. This could be because the file doesn't exist
+or because the link URL is incorrect.</p>
+<hr />
+
+<h3 id="polymer_2">Duplicate definition <a href="#polymer_2">#2</a></h3>
+<p>Custom element names are global and can only be defined once. Some common
+reasons why you might get two definitions:</p><ul><li>Two different elements are declared with the same name.</li><li>
+<p>A single HTML file defining an element, has been imported using two different
+URLs.</p></li></ul>
+<hr />
+
+<h3 id="polymer_3">Missing import to polymer.html <a href="#polymer_3">#3</a></h3>
+<p>Starting with polymer 0.11.0, each file that uses the definition
+of polymer-element must import it either directly or transitively.</p>
+<hr />
+
+<h3 id="polymer_4">Invalid import inside &lt;polymer-element> <a href="#polymer_4">#4</a></h3>
+<p>HTML imports are expected at the top of each document, outside of any
+polymer-element definitions. The polymer build process combines all your HTML
+files together so you can deploy a single HTML file with your application. This
+build process ignores imports that appear to be in the wrong location.</p>
+<hr />
+
+<h3 id="polymer_5">Missing call to <code>initPolymer()</code> <a href="#polymer_5">#5</a></h3>
+<p>Your application entry point didn't have any Dart script tags, so it's missing
+some initialization needed for polymer.dart.</p>
+<hr />
+
+<h3 id="polymer_6">Script tags with experimental bootstrap <a href="#polymer_6">#6</a></h3>
+<p>This experimental feature is no longer supported.</p>
+<hr />
+
+<h3 id="polymer_7">Multiple Dart script tags per document <a href="#polymer_7">#7</a></h3>
+<p>Dartium currently allows only one script tag per document. Any
+additional script tags might be ignored or result in an error. This will
+likely change in the future, but for now, combine the script tags together into
+a single Dart library.</p>
+<hr />
+
+<h3 id="polymer_8">Imports before script tags <a href="#polymer_8">#8</a></h3>
+<p>It is good practice to put all your HTML imports at the beginning of the
+document, above any Dart script tags. Today, the execution of Dart script tags
+is not synchronous in Dartium, so the difference is not noticeable. However,
+Dartium that will eventually change and make the timing of script tags execution
+match how they are in JavaScript. At that point the order of your imports with
+respect to script tags will be important. Following the practice of putting
+imports first protects your app from a future breaking change in this respect.</p>
+<hr />
+
+<h3 id="polymer_9">Missing href on a <code>&lt;link&gt;</code> tag <a href="#polymer_9">#9</a></h3>
+<p>All <code>&lt;link&gt;</code> tags should have a valid URL to a resource.</p>
+<hr />
+
+<h3 id="polymer_10"><code>&lt;element&gt;</code> is deprecated <a href="#polymer_10">#10</a></h3>
+<p>Long ago <code>&lt;polymer-element&gt;</code> used to be called <code>&lt;element&gt;</code>. You probably ran
+into this error if you were migrating code that was written on a very early
+version of polymer.</p>
+<hr />
+
+<h3 id="polymer_11">Definition of a custom element not found <a href="#polymer_11">#11</a></h3>
+<p>The polymer build was not able to find the definition of a custom element. This
+can happen if an element is defined with a <code>&lt;polymer-element&gt;</code> tag, but you are
+missing an HTML import or the import link is incorrect.</p>
+<p>This warning can also be a false alarm. For instance, when an element is defined
+programatically using <code>document.registerElement</code>. In that case the polymer build
+will not be able to see the definition and will produce this warning.</p>
+<hr />
+
+<h3 id="polymer_12">Empty script tag <a href="#polymer_12">#12</a></h3>
+<p>Script tags should either have a <code>src</code> attribute or a non-empty body.</p>
+<hr />
+
+<h3 id="polymer_13">Expected Dart mime-type <a href="#polymer_13">#13</a></h3>
+<p>You seem to have a <code>.dart</code> extension on a script tag, but the mime-type
+doesn't match <code>application/dart</code>.</p>
+<hr />
+
+<h3 id="polymer_14">Expected Dart file extension <a href="#polymer_14">#14</a></h3>
+<p>You are using the <code>application/dart</code> mime-type on a script tag, so
+the URL to the script source URL should have a <code>.dart</code> extension.</p>
+<hr />
+
+<h3 id="polymer_15">Script with both src and inline text <a href="#polymer_15">#15</a></h3>
+<p>You have a script tag that includes both a <code>src</code> attribute and inline script
+text. You must choose one or the other.</p>
+<hr />
+
+<h3 id="polymer_16">Incorrect instantiation: missing base tag in instantiation <a href="#polymer_16">#16</a></h3>
+<p>When you declare that a custom element extends from a base tag, for example:</p>
+<pre><code>&lt;polymer-element name="my-example" extends="ul"&gt;
+</code></pre>
+<p>or:</p>
+<pre><code>&lt;polymer-element name="my-example2" extends="ul"&gt;
+&lt;polymer-element name="my-example" extends="my-example2"&gt;
+</code></pre>
+<p>You should instantiate <code>my-example</code> by using this syntax:</p>
+<pre><code>&lt;ul is="my-example"&gt;
+</code></pre>
+<p>And not:</p>
+<pre><code>&lt;my-example&gt;
+</code></pre>
+<p>Only elements that don't extend from existing HTML elements are created using
+the latter form.</p>
+<p>This is because browsers first create the base element, and then upgrade it to
+have the extra functionality of your custom element. In the example above, using
+<code>&lt;ul&gt;</code> tells the browser which base type it must create before
+doing the upgrade.</p>
+<hr />
+
+<h3 id="polymer_17">Incorrect instantiation: extra <code>is</code> attribute or missing <code>extends</code> in declaration <a href="#polymer_17">#17</a></h3>
+<p>Creating a custom element using the syntax:</p>
+<pre><code>&lt;ul is="my-example"&gt;
+</code></pre>
+<p>means that the declaration of <code>my-example</code> extends transitively from <code>ul</code>. This
+error message is shown if the definition of <code>my-example</code> doesn't declare this
+extension. It might be that you no longer extend from the base element, in which
+case the fix is to change the instantiation to:</p>
+<pre><code>&lt;my-example&gt;
+</code></pre>
+<p>Another possibility is that the declaration needs to be fixed to include the
+<code>extends</code> attribute, for example:</p>
+<pre><code>&lt;polymer-element name="my-example" extends="ul"&gt;
+</code></pre>
+<hr />
+
+<h3 id="polymer_18">Incorrect instantiation: base tag seems wrong <a href="#polymer_18">#18</a></h3>
+<p>It seems you have a declaration like:</p>
+<pre><code>&lt;polymer-element name="my-example" extends="div"&gt;
+</code></pre>
+<p>but an instantiation like:</p>
+<pre><code>&lt;span is="my-example"&gt;
+</code></pre>
+<p>Both the declaration and the instantiation need to match on the base type. So
+either the instantiation needs to be fixed to be more like:</p>
+<pre><code>&lt;span is="my-example"&gt;
+</code></pre>
+<p>or the declaration should be fixed to be like:</p>
+<pre><code>&lt;polymer-element name="my-example" extends="span"&gt;
+</code></pre>
+<hr />
+
+<h3 id="polymer_19">No dashes allowed in custom attributes <a href="#polymer_19">#19</a></h3>
+<p>Polymer used to recognize attributes with dashes like <code>my-name</code> and convert them
+to match properties where dashes were removed, and words follow the camelCase
+style (for example <code>myName</code>). This feature is no longer available. Now simply
+use the same name as the property.</p>
+<p>Because HTML attributes are case-insensitive, you can also write the name of
+your property entirely in lowercase. Just be sure that your custom-elements
+don't declare two properties with the same name but different capitalization.</p>
+<hr />
+
+<h3 id="polymer_20">Event handlers not supported here <a href="#polymer_20">#20</a></h3>
+<p>Bindings of the form <code>{{ }}</code> are supported inside <code>&lt;template&gt;</code> nodes, even outside
+of <code>&lt;polymer-element&gt;</code> declarations. However, those bindings only support binding
+values into the content of a node or an attribute.</p>
+<p>Inline event handlers of the form <code>on-click="{{method}}"</code> are a special feature
+of polymer elements, so they are only supported inside <code>&lt;polymer-element&gt;</code>
+definitions.</p>
+<hr />
+
+<h3 id="polymer_21">No expressions allowed in event handler bindings <a href="#polymer_21">#21</a></h3>
+<p>Unlike data bindings, event handler bindings of the form <code>on-click="{{method}}"</code>
+are not evaluated as expressions. They are meant to just contain a simple name
+that resolves to a method in your polymer element's class definition.</p>
+<hr />
+
+<h3 id="polymer_22">Nested polymer element definitions not allowed <a href="#polymer_22">#22</a></h3>
+<p>Because custom element names are global, there is no need to have a
+<code>&lt;polymer-element&gt;</code> definition nested within a <code>&lt;polymer-element&gt;</code>. If you have
+a definition inside another, move the second definition out.</p>
+<p>You might see this error if you have an HTML import within a polymer element.
+You should be able to move the import out of the element definition.</p>
+<hr />
+
+<h3 id="polymer_23">Polymer element definitions without a name <a href="#polymer_23">#23</a></h3>
+<p>Polymer element definitions must have a name. You can include a name by using
+the <code>name</code> attribute in <code>&lt;polymer-element&gt;</code> for example:</p>
+<pre><code>&lt;polymer-element name="my-example"&gt;
+</code></pre>
+<hr />
+
+<h3 id="polymer_24">Custom element name missing a dash <a href="#polymer_24">#24</a></h3>
+<p>Custom element names must have a dash (<code>-</code>) and can't be any of the following
+reserved names:</p><ul><li><code>annotation-xml</code></li><li><code>color-profile</code></li><li><code>font-face</code></li><li><code>font-face-src</code></li><li><code>font-face-uri</code></li><li><code>font-face-format</code></li><li><code>font-face-name</code></li><li><code>missing-glyph</code></li></ul>
+<hr />
+
+<h3 id="polymer_25">Error while inlining an import <a href="#polymer_25">#25</a></h3>
+<p>An error occurred while inlining an import in the polymer build. This is often
+the result of a broken HTML import.</p>
+<hr />
+
+<h3 id="polymer_26">Error while inlining a stylesheet <a href="#polymer_26">#26</a></h3>
+<p>An error occurred while inlining a stylesheet in the polymer build. This is
+often the result of a broken URL in a <code>&lt;link rel="stylesheet" href="..."&gt;</code>.</p>
+<hr />
+
+<h3 id="polymer_27">URL to a script file might be incorrect <a href="#polymer_27">#27</a></h3>
+<p>An error occurred trying to read a script tag on a given URL. This is often the
+result of a broken URL in a <code>&lt;script src="..."&gt;</code>.</p>
+<hr />
+
+<h3 id="polymer_28">Attribute missing "_" prefix <a href="#polymer_28">#28</a></h3>
+<p>Not all browsers support bindings to certain attributes, especially URL
+attributes. Some browsers might sanitize attributes and result in an
+incorrect value. For this reason polymer provides a special set of attributes
+that let you bypass any browser internal attribute validation. The name of the
+attribute is the same as the original attribute, but with a leading underscore.
+For example, instead of writing:</p>
+<pre><code>&lt;img src="{{binding}}"&gt;
+</code></pre>
+<p>you can write:</p>
+<pre><code>&lt;img _src="{{binding}}"&gt;
+</code></pre>
+<p>For more information, see <a href="http://goo.gl/5av8cU">http://goo.gl/5av8cU</a>.</p>
+<hr />
+
+<h3 id="polymer_29">Attribute with extra "_" prefix <a href="#polymer_29">#29</a></h3>
+<p>A special attribute exists to support bindings on URL attributes. For example,
+this correctly binds the <code>src</code> attribute in an image:</p>
+<pre><code>&lt;img _src="{{binding}}"&gt;
+</code></pre>
+<p>However, this special <code>_src</code> attribute is only available for bindings. If you
+just have a URL, use the normal <code>src</code> attribute instead.</p>
+<hr />
+
+<h3 id="polymer_30">Internal error: don't know how to include a URL <a href="#polymer_30">#30</a></h3>
+<p>Sorry, you just ran into a bug in the polymer transformer code. Please file a
+bug at <a href="http://dartbug.com/new">http://dartbug.com/new</a> including, if possible, some example code that
+can help the team reproduce the issue.</p>
+<hr />
+
+<h3 id="polymer_31">Internal error: phases run out of order <a href="#polymer_31">#31</a></h3>
+<p>Sorry, you just ran into a bug in the polymer transformer code. Please file a
+bug at <a href="http://dartbug.com/new">http://dartbug.com/new</a> including, if possible, some example code that
+can help the team reproduce the issue.</p>
+<hr />
+
+<h3 id="polymer_32"><code>@CustomTag</code> used on a private class <a href="#polymer_32">#32</a></h3>
+<p>The <code>@CustomTag</code> annotation is currently only supported on public classes. If
+you need to register a custom element whose implementation is a private class
+(that is, a class whose name starts with <code>_</code>), you can still do so by invoking
+<code>Polymer.register</code> within a public method marked with <code>@initMethod</code>.</p>
+<hr />
+
+<h3 id="polymer_33"><code>@initMethod</code> is on a private function <a href="#polymer_33">#33</a></h3>
+<p>The <code>@initMethod</code> annotation is currently only supported on public top-level
+functions.</p>
+<hr />
+
+<h3 id="polymer_34">Missing argument in annotation <a href="#polymer_34">#34</a></h3>
+<p>The annotation expects one argument, but the argument was not provided.</p>
+<hr />
+
+<h3 id="polymer_35">Invalid argument in annotation <a href="#polymer_35">#35</a></h3>
+<p>The polymer transformer was not able to extract a constant value for the
+annotation argument. This can happen if your code is currently in a state that
+can't be analyzed (for example, it has parse errors) or if the expression passed
+as an argument is invalid (for example, it is not a compile-time constant).</p>
+<hr />
+
+<h3 id="polymer_36">No polymer initializers found <a href="#polymer_36">#36</a></h3>
+<p>No polymer initializers were found. Make sure to either 
+annotate your polymer elements with @CustomTag or include a 
+top level method annotated with @initMethod that registers your 
+elements. Both annotations are defined in the polymer library (
+package:polymer/polymer.dart).</p>
+<hr />
+
+<h3 id="polymer_37">Event bindings with @ are no longer supported <a href="#polymer_37">#37</a></h3>
+<p>For a while there was an undocumented feature that allowed users to include
+expressions in event bindings using the <code>@</code> prefix, for example:</p>
+<pre><code>&lt;div on-click="{{@a.b.c}}"&gt;
+
+</code></pre>
+<p>This feature is no longer supported.</p>
+<hr />
+
+<h3 id="polymer_38">Private symbol in event handler <a href="#polymer_38">#38</a></h3>
+<p>Currently private members can't be used in event handler bindings. So you can't
+write:</p>
+<pre><code>&lt;div on-click="{{_method}}"&gt;
+</code></pre>
+<p>This restriction might be removed in the future, but for now, you need to make
+your event handlers public.</p>
+<hr />
+
+<h3 id="polymer_39">Private symbol in binding expression <a href="#polymer_39">#39</a></h3>
+<p>Private members can't be used in binding expressions. For example, you can't
+write:</p>
+<pre><code>&lt;div&gt;{{a.b._c}}&lt;/div&gt;
+</code></pre>
+<hr />
+
+<h3 id="polymer_40">A warning was found while parsing the HTML document <a href="#polymer_40">#40</a></h3>
+<p>The polymer transformer uses a parser that implements the HTML5 spec
+(<code>html5lib</code>). This message reports a
+warning that the parser detected.</p>
+<hr />
+
+<h3 id="polymer_41">Possible flash of unstyled content <a href="#polymer_41">#41</a></h3>
+<p>Custom element found in document body without an "unresolved" attribute on it or
+one of its parents. This means your app probably has a flash of unstyled content
+before it finishes loading. See <a href="http://goo.gl/iN03Pj">http://goo.gl/iN03Pj</a> for more info.</p>
+<hr /></body>
+</html>
diff --git a/pkg/polymer/lib/src/build/import_inliner.dart b/pkg/polymer/lib/src/build/import_inliner.dart
index e755e6b..c603fff 100644
--- a/pkg/polymer/lib/src/build/import_inliner.dart
+++ b/pkg/polymer/lib/src/build/import_inliner.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:barback/barback.dart';
 import 'package:code_transformers/assets.dart';
+import 'package:code_transformers/messages/build_logger.dart';
 import 'package:path/path.dart' as path;
 import 'package:html5lib/dom.dart' show
     Document, DocumentFragment, Element, Node;
@@ -20,13 +21,13 @@
 import 'package:source_span/source_span.dart';
 
 import 'common.dart';
-import 'wrapped_logger.dart';
+import 'messages.dart';
 
 // TODO(sigmund): move to web_components package (dartbug.com/18037).
 class _HtmlInliner extends PolymerTransformer {
   final TransformOptions options;
   final Transform transform;
-  final TransformLogger logger;
+  final BuildLogger logger;
   final AssetId docId;
   final seen = new Set<AssetId>();
   final scriptIds = <AssetId>[];
@@ -40,8 +41,9 @@
   _HtmlInliner(TransformOptions options, Transform transform)
       : options = options,
         transform = transform,
-        logger = options.releaseMode ? transform.logger :
-            new WrappedLogger(transform, convertErrorsToWarnings: true),
+        logger = new BuildLogger(transform,
+            convertErrorsToWarnings: !options.releaseMode,
+            detailsUri: 'http://goo.gl/5HPeuP'),
         docId = transform.primaryInput.id;
 
   Future apply() {
@@ -50,7 +52,7 @@
     Document document;
     bool changed = false;
 
-    return readPrimaryAsHtml(transform).then((doc) {
+    return readPrimaryAsHtml(transform, logger).then((doc) {
       document = doc;
       changed = new _UrlNormalizer(transform, docId, logger).visit(document)
         || changed;
@@ -78,9 +80,9 @@
             'script_ids': scriptIds,
           }, toEncodable: (id) => id.serialize())));
 
-      // Write out the logs collected by our [WrappedLogger].
-      if (options.injectBuildLogsInOutput && logger is WrappedLogger) {
-        return (logger as WrappedLogger).writeOutput();
+      // Write out the logs collected by our [BuildLogger].
+      if (options.injectBuildLogsInOutput) {
+        return logger.writeOutput();
       }
     });
   }
@@ -154,9 +156,8 @@
   /// Loads an asset identified by [id], visits its imports and collects its
   /// html imports. Then inlines it into the main document.
   Future _inlineImport(AssetId id, Element link) {
-    return readAsHtml(id, transform).catchError((error) {
-      logger.error(
-          "Failed to inline html import: $error", asset: id,
+    return readAsHtml(id, transform, logger).catchError((error) {
+      logger.error(INLINE_IMPORT_FAIL.create({'error': error}),
           span: link.sourceSpan);
     }).then((doc) {
       if (doc == null) return false;
@@ -172,9 +173,7 @@
         link.replaceWith(imported);
 
         // Make sure to grab any logs from the inlined import.
-        if (logger is WrappedLogger) {
-          return (logger as WrappedLogger).addLogFilesFromAsset(id);
-        }
+        return logger.addLogFilesFromAsset(id);
       });
     });
   }
@@ -184,8 +183,7 @@
       // TODO(jakemac): Move this warning to the linter once we can make it run
       // always (see http://dartbug.com/17199). Then hide this error and replace
       // with a comment pointing to the linter error (so we don't double warn).
-      logger.warning(
-          "Failed to inline stylesheet: $error", asset: id,
+      logger.warning(INLINE_STYLE_FAIL.create({'error': error}),
           span: link.sourceSpan);
     }).then((css) {
       if (css == null) return null;
@@ -225,7 +223,7 @@
 
         return transform.hasInput(srcId).then((exists) {
           if (!exists) {
-            logger.warning('Script file at "$src" not found.',
+            logger.warning(SCRIPT_FILE_NOT_FOUND.create({'url': src}),
               span: script.sourceSpan);
           } else {
             scriptIds.add(srcId);
@@ -342,7 +340,7 @@
   /// Whether or not the normalizer has changed something in the tree.
   bool changed = false;
 
-  final TransformLogger logger;
+  final BuildLogger logger;
 
   _UrlNormalizer(transform, this.sourceId, this.logger)
       : transform = transform,
@@ -362,15 +360,11 @@
       node.attributes.forEach((name, value) {
         if (_urlAttributes.contains(name)) {
           if (!name.startsWith('_') && value.contains(_BINDING_REGEX)) {
-            logger.warning(
-                'When using bindings with the "$name" attribute you may '
-                'experience errors in certain browsers. Please use the '
-                '"_$name" attribute instead. For more information, see '
-                'http://goo.gl/5av8cU', span: node.sourceSpan, asset: sourceId);
+            logger.warning(USE_UNDERSCORE_PREFIX.create({'name': name}),
+                span: node.sourceSpan, asset: sourceId);
           } else if (name.startsWith('_') && !value.contains(_BINDING_REGEX)) {
-            logger.warning(
-                'The "$name" attribute is only supported when using bindings. '
-                'Please change to the "${name.substring(1)}" attribute.',
+            logger.warning(DONT_USE_UNDERSCORE_PREFIX.create(
+                  {'name': name.substring(1)}),
                 span: node.sourceSpan, asset: sourceId);
           }
           if (value != '' && !value.trim().startsWith(_BINDING_REGEX)) {
@@ -403,7 +397,7 @@
   // TODO(jmesserly): use csslib here instead? Parsing with RegEx is sadness.
   // Maybe it's reliable enough for finding URLs in CSS? I'm not sure.
   String visitCss(String cssText) {
-    var url = spanUrlFor(sourceId, transform);
+    var url = spanUrlFor(sourceId, transform, logger);
     var src = new SourceFile(cssText, url: url);
     return cssText.replaceAllMapped(_URL, (match) {
       // Extract the URL, without any surrounding quotes.
@@ -416,7 +410,8 @@
 
   String visitInlineDart(String code) {
     var unit = parseDirectives(code, suppressErrors: true);
-    var file = new SourceFile(code, url: spanUrlFor(sourceId, transform));
+    var file = new SourceFile(code,
+        url: spanUrlFor(sourceId, transform, logger));
     var output = new TextEditTransaction(code, file);
     var foundLibraryDirective = false;
     for (Directive directive in unit.directives) {
@@ -493,7 +488,8 @@
 
     if (primaryId.package != id.package) {
       // Techincally we shouldn't get there
-      logger.error("don't know how to include $id from $primaryId", span: span);
+      logger.error(INTERNAL_ERROR_DONT_KNOW_HOW_TO_IMPORT.create({
+          'target': id, 'source': primaryId, 'extra': ''}), span: span);
       return href;
     }
 
diff --git a/pkg/polymer/lib/src/build/linter.dart b/pkg/polymer/lib/src/build/linter.dart
index 3ec6637..8663115 100644
--- a/pkg/polymer/lib/src/build/linter.dart
+++ b/pkg/polymer/lib/src/build/linter.dart
@@ -11,13 +11,15 @@
 
 import 'package:barback/barback.dart';
 import 'package:code_transformers/assets.dart';
+import 'package:code_transformers/messages/build_logger.dart';
+import 'package:code_transformers/messages/messages.dart' show Message;
 import 'package:html5lib/dom.dart';
 import 'package:html5lib/dom_parsing.dart';
 import 'package:source_span/source_span.dart';
 
 import 'common.dart';
 import 'utils.dart';
-import 'wrapped_logger.dart';
+import 'messages.dart';
 
 /// A linter that checks for common Polymer errors and produces warnings to
 /// show on the editor or the command line. Leaves sources unchanged, but
@@ -38,17 +40,18 @@
     seen.add(id);
     bool isEntryPoint = options.isHtmlEntryPoint(id);
 
-    var logger = options.releaseMode ? transform.logger :
-        new WrappedLogger(transform, convertErrorsToWarnings: true);
+    var logger = new BuildLogger(transform,
+        convertErrorsToWarnings: !options.releaseMode,
+        detailsUri: 'http://goo.gl/5HPeuP');
 
-    return readPrimaryAsHtml(transform).then((document) {
+    return readPrimaryAsHtml(transform, logger).then((document) {
       return _collectElements(document, id, transform, logger, seen)
           .then((elements) {
         new _LinterVisitor(id, logger, elements, isEntryPoint).run(document);
 
-        // Write out the logs collected by our [WrappedLogger].
-        if (options.injectBuildLogsInOutput && logger is WrappedLogger) {
-          return (logger as WrappedLogger).writeOutput();
+        // Write out the logs collected by our [BuildLogger].
+        if (options.injectBuildLogsInOutput && logger is BuildLogger) {
+          return (logger as BuildLogger).writeOutput();
         }
       });
     });
@@ -60,7 +63,7 @@
   /// first.
   Future<Map<String, _ElementSummary>> _collectElements(
       Document document, AssetId sourceId, Transform transform,
-      TransformLogger logger, Set<AssetId> seen,
+      BuildLogger logger, Set<AssetId> seen,
       [Map<String, _ElementSummary> elements]) {
     if (elements == null) elements = <String, _ElementSummary>{};
     return _getImportedIds(document, sourceId, transform, logger)
@@ -81,17 +84,17 @@
   }
 
   Future _readAndCollectElements(AssetId id, Transform transform,
-      TransformLogger logger, Set<AssetId> seen,
+      BuildLogger logger, Set<AssetId> seen,
       Map<String, _ElementSummary> elements) {
     if (id == null || seen.contains(id)) return new Future.value(null);
     seen.add(id);
-    return readAsHtml(id, transform, showWarnings: false).then(
+    return readAsHtml(id, transform, logger, showWarnings: false).then(
         (doc) => _collectElements(doc, id, transform, logger, seen, elements));
   }
 
   Future<List<AssetId>> _getImportedIds(
       Document document, AssetId sourceId, Transform transform,
-      TransformLogger logger) {
+      BuildLogger logger) {
     var importIds = [];
     for (var tag in document.querySelectorAll('link')) {
       if (tag.attributes['rel'] != 'import') continue;
@@ -102,15 +105,15 @@
       importIds.add(assetExists(id, transform).then((exists) {
         if (exists) return id;
         if (sourceId == transform.primaryInput.id) {
-          logger.warning('couldn\'t find imported asset "${id.path}" in package'
-              ' "${id.package}".', span: span);
+          logger.warning(IMPORT_NOT_FOUND.create(
+                {'path': id.path, 'package': id.package}), span: span);
         }
       }));
     }
     return Future.wait(importIds);
   }
 
-  void _addElements(Document document, TransformLogger logger,
+  void _addElements(Document document, BuildLogger logger,
       Map<String, _ElementSummary> elements) {
     for (var tag in document.querySelectorAll('polymer-element')) {
       var name = tag.attributes['name'];
@@ -123,10 +126,12 @@
         // Report warning only once.
         if (existing.hasConflict) continue;
         existing.hasConflict = true;
-        logger.warning('duplicate definition for custom tag "$name".',
+        logger.warning(DUPLICATE_DEFINITION.create(
+              {'name': name, 'second': ''}),
             span: existing.span);
-        logger.warning('duplicate definition for custom tag "$name" '
-            ' (second definition).', span: span);
+        logger.warning(DUPLICATE_DEFINITION.create(
+              {'name': name, 'second': ' (second definition).'}),
+            span: span);
         continue;
       }
 
@@ -161,7 +166,7 @@
 }
 
 class _LinterVisitor extends TreeVisitor {
-  TransformLogger _logger;
+  BuildLogger _logger;
   AssetId _sourceId;
   bool _inPolymerElement = false;
   bool _dartTagSeen = false;
@@ -198,7 +203,7 @@
     visit(doc);
 
     if (_isEntryPoint && !_dartTagSeen && !_polymerExperimentalHtmlSeen) {
-      _logger.warning(USE_INIT_DART, span: doc.body.sourceSpan);
+      _logger.warning(MISSING_INIT_POLYMER, span: doc.body.sourceSpan);
     }
   }
 
@@ -208,13 +213,12 @@
     if (rel != 'import' && rel != 'stylesheet') return;
 
     if (rel == 'import' && _dartTagSeen) {
-      _logger.warning("Move HTML imports above your Dart script tag.",
-          span: node.sourceSpan);
+      _logger.warning(MOVE_IMPORTS_UP, span: node.sourceSpan);
     }
 
     var href = node.attributes['href'];
     if (href == null || href == '') {
-      _logger.warning('link rel="$rel" missing href.', span: node.sourceSpan);
+      _logger.warning(MISSING_HREF.create({'rel': rel}), span: node.sourceSpan);
       return;
     }
 
@@ -233,8 +237,7 @@
 
   /// Produce warnings if using `<element>` instead of `<polymer-element>`.
   void _validateElementElement(Element node) {
-    _logger.warning('<element> elements are not supported, use'
-        ' <polymer-element> instead', span: node.sourceSpan);
+    _logger.warning(ELEMENT_DEPRECATED_EONS_AGO, span: node.sourceSpan);
   }
 
   /// Produce warnings if using `<polymer-element>` in the wrong place or if the
@@ -246,8 +249,7 @@
     }
 
     if (_inPolymerElement) {
-      _logger.error('Nested polymer element definitions are not allowed.',
-          span: node.sourceSpan);
+      _logger.error(NESTED_POLYMER_ELEMENT, span: node.sourceSpan);
       return;
     }
 
@@ -255,18 +257,14 @@
     var extendsTag = node.attributes['extends'];
 
     if (tagName == null) {
-      _logger.error('Missing tag name of the custom element. Please include an '
-          'attribute like \'name="your-tag-name"\'.',
-          span: node.sourceSpan);
+      _logger.error(MISSING_TAG_NAME, span: node.sourceSpan);
     } else if (!isCustomTagName(tagName)) {
-      _logger.error('Invalid name "$tagName". Custom element names must have '
-          'at least one dash and can\'t be any of the following names: '
-          '${invalidTagNames.keys.join(", ")}.',
+      _logger.error(INVALID_TAG_NAME.create({'name': tagName}),
           span: node.sourceSpan);
     }
 
     if (_elements[extendsTag] == null && isCustomTagName(extendsTag)) {
-      _logger.warning('custom element with name "$extendsTag" not found.',
+      _logger.warning(CUSTOM_ELEMENT_NOT_FOUND.create({'tag': extendsTag}),
           span: node.sourceSpan);
     }
 
@@ -305,26 +303,23 @@
 
     if (src == null) {
       if (isDart && isEmpty) {
-        _logger.warning('script tag seems empty.', span: node.sourceSpan);
+        _logger.warning(SCRIPT_TAG_SEEMS_EMPTY, span: node.sourceSpan);
       }
       return;
     }
 
     if (src.endsWith('.dart') && !isDart) {
-      _logger.warning('Wrong script type, expected type="application/dart".',
-          span: node.sourceSpan);
+      _logger.warning(EXPECTED_DART_MIME_TYPE, span: node.sourceSpan);
       return;
     }
 
     if (!src.endsWith('.dart') && isDart) {
-      _logger.warning('"application/dart" scripts should use the .dart file '
-          'extension.', span: node.sourceSpan);
+      _logger.warning(EXPECTED_DART_EXTENSION, span: node.sourceSpan);
       return;
     }
 
     if (!isEmpty) {
-      _logger.warning('script tag has "src" attribute and also has script '
-          'text.', span: node.sourceSpan);
+      _logger.warning(FOUND_BOTH_SCRIPT_SRC_AND_TEXT, span: node.sourceSpan);
     }
   }
 
@@ -359,39 +354,42 @@
     
     var info = _elements[customTagName];
     if (info == null) {
-      // TODO(jmesserly): this warning is wrong if someone is using raw custom
-      // elements. Is there another way we can handle this warning that won't
-      // generate false positives?
-      _logger.warning('definition for Polymer element with tag name '
-          '"$customTagName" not found.', span: node.sourceSpan);
+      _logger.warning(CUSTOM_ELEMENT_NOT_FOUND.create({'tag': customTagName}),
+          span: node.sourceSpan);
       return;
     }
 
     var baseTag = info.baseExtendsTag;
     if (baseTag != null && !hasIsAttribute) {
-      _logger.warning(
-          'custom element "$customTagName" extends from "$baseTag", but '
-          'this tag will not include the default properties of "$baseTag". '
-          'To fix this, either write this tag as <$baseTag '
-          'is="$customTagName"> or remove the "extends" attribute from '
-          'the custom element declaration.', span: node.sourceSpan);
+      _logger.warning(BAD_INSTANTIATION_MISSING_BASE_TAG.create(
+            {'tag': customTagName, 'base': baseTag}), span: node.sourceSpan);
       return;
     }
 
     if (hasIsAttribute && baseTag == null) {
-      _logger.warning(
-          'custom element "$customTagName" doesn\'t declare any type '
-          'extensions. To fix this, either rewrite this tag as '
-          '<$customTagName> or add \'extends="$nodeTag"\' to '
-          'the custom element declaration.', span: node.sourceSpan);
+      _logger.warning(BAD_INSTANTIATION_BOGUS_BASE_TAG.create(
+            {'tag': customTagName, 'base': nodeTag}), span: node.sourceSpan);
       return;
     }
 
     if (hasIsAttribute && baseTag != nodeTag) {
-      _logger.warning(
-          'custom element "$customTagName" extends from "$baseTag". '
-          'Did you mean to write <$baseTag is="$customTagName">?',
-          span: node.sourceSpan);
+      _logger.warning(BAD_INSTANTIATION_WRONG_BASE_TAG.create(
+            {'tag': customTagName, 'base': baseTag}), span: node.sourceSpan);
+    }
+
+    // FOUC check, if content is supplied
+    if (!node.innerHtml.isEmpty) {
+      var parent = node;
+      var hasFoucFix = false;
+      while (parent != null && !hasFoucFix) {
+        if (parent.localName == 'polymer-element' ||
+            parent.attributes['unresolved'] != null) {
+          hasFoucFix = true;
+        }
+        if (parent.localName == 'body') break;
+        parent = parent.parent;
+      }
+      if (!hasFoucFix) _logger.warning(POSSIBLE_FUOC, span: node.sourceSpan);
     }
   }
 
@@ -399,9 +397,9 @@
   bool _validateCustomAttributeName(String name, FileSpan span) {
     if (name.contains('-')) {
       var newName = toCamelCase(name);
-      _logger.warning('PolymerElement no longer recognizes attribute names with '
-          'dashes such as "$name". Use "$newName" or "${newName.toLowerCase()}" '
-          'instead (both forms are equivalent in HTML).', span: span);
+      var alternative = '"$newName" or "${newName.toLowerCase()}"';
+      _logger.warning(NO_DASHES_IN_CUSTOM_ATTRIBUTES.create(
+            {'name': name, 'alternative': alternative}), span: span);
       return false;
     }
     return true;
@@ -412,8 +410,7 @@
     if (!name.startsWith('on-')) return;
 
     if (!_inPolymerElement) {
-      _logger.warning('Inline event handlers are only supported inside '
-          'declarations of <polymer-element>.',
+      _logger.warning(EVENT_HANDLERS_ONLY_WITHIN_POLYMER,
           span: node.attributeSpans[name]);
       return;
     }
@@ -423,18 +420,14 @@
     // non empty.
     if (!value.startsWith("{{") || !value.endsWith("}}") || value.contains('(')
         || value.substring(2, value.length - 2).trim() == '') {
-      _logger.warning('Invalid event handler body "$value". Declare a method '
-          'in your custom element "void handlerName(event, detail, target)" '
-          'and use the form $name="{{handlerName}}".',
+      _logger.warning(INVALID_EVENT_HANDLER_BODY.create(
+            {'value': value, 'name': name}),
           span: node.attributeSpans[name]);
     }
   }
 }
 
-const String ONLY_ONE_TAG =
-    'Only one "application/dart" script tag per document is allowed.';
-
-String usePolymerHtmlMessageFrom(AssetId id) {
+Message usePolymerHtmlMessageFrom(AssetId id) {
   var segments = id.path.split('/');
   var upDirCount = 0;
   if (segments[0] == 'lib') {
@@ -444,30 +437,9 @@
     // web/a/foo.html => ../packages/
     upDirCount = segments.length - 2;
   }
-  return usePolymerHtmlMessage(upDirCount);
-}
-
-String usePolymerHtmlMessage(int upDirCount) {
   var reachOutPrefix = '../' * upDirCount;
-  return 'Missing definition for <polymer-element>, please add the following '
-    'HTML import at the top of this file: <link rel="import" '
-    'href="${reachOutPrefix}packages/polymer/polymer.html">.';
+  return USE_POLYMER_HTML.create({'reachOutPrefix': reachOutPrefix});
 }
 
-const String NO_IMPORT_WITHIN_ELEMENT = 'Polymer.dart\'s implementation of '
-    'HTML imports are not supported within polymer element definitions, yet. '
-    'Please move the import out of this <polymer-element>.';
-
-const String USE_INIT_DART =
-    'To run a polymer application, you need to call "initPolymer". You can '
-    'either include a generic script tag that does this for you:'
-    '\'<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.';
-
-const String NO_DART_SCRIPT_AND_EXPERIMENTAL =
-    'The experimental bootstrap feature doesn\'t support script tags on '
-    'the main document (for now).';
-
 const List<String> INTERNALLY_DEFINED_ELEMENTS = 
     const ['auto-binding-dart', 'polymer-element'];
diff --git a/pkg/polymer/lib/src/build/log_injector.css b/pkg/polymer/lib/src/build/log_injector.css
index c4a9705..e81eee4 100644
--- a/pkg/polymer/lib/src/build/log_injector.css
+++ b/pkg/polymer/lib/src/build/log_injector.css
@@ -5,7 +5,7 @@
   position: fixed;
   bottom: 0;
   right: 0;
-  max-width: 50vw;
+  max-width: 80vw;
   z-index: 10000;
   font-family: sans-serif !important;
 }
@@ -15,6 +15,8 @@
   color: white;
   border: solid 1px #666;
   border-bottom: 0px;
+  text-overflow: ellipsis;
+  overflow-x: hidden;
 }
 .build-logs .fine {
   color: green;
@@ -30,8 +32,6 @@
 }
 .build-logs .message {
   white-space: nowrap;
-  text-overflow: ellipsis;
-  overflow-x: hidden;
   cursor: pointer;
 }
 .build-logs .message.expanded {
diff --git a/pkg/polymer/lib/src/build/log_injector.dart b/pkg/polymer/lib/src/build/log_injector.dart
index ba56b22..48f4127 100644
--- a/pkg/polymer/lib/src/build/log_injector.dart
+++ b/pkg/polymer/lib/src/build/log_injector.dart
@@ -12,6 +12,8 @@
 import 'dart:html';
 
 import 'package:path/path.dart' as path;
+import 'package:source_span/source_span.dart';
+import 'package:code_transformers/messages/messages.dart';
 
 class LogInjector {
   Element selectedMenu;
@@ -27,13 +29,16 @@
   // multiple scripts running independently so we could ensure that this would
   // always be running.
   injectLogs(String data) {
+    var logs = new LogEntryTable.fromJson(JSON.decode(data));
+    if (logs.entries.isEmpty) return;
+
     // Group all logs by level.
     var logsByLevel = {
     };
-    JSON.decode(data).forEach((log) {
-      logsByLevel.putIfAbsent(log['level'], () => []);
-      logsByLevel[log['level']].add(log);
-    });
+    logs.entries.values.forEach((list) => list.forEach((log) {
+      logsByLevel.putIfAbsent(log.level, () => []);
+      logsByLevel[log.level].add(log);
+    }));
     if (logsByLevel.isEmpty) return;
 
     // Build the wrapper, menu, and content divs.
@@ -84,25 +89,23 @@
       for (var log in logs) {
         var logHtml = new StringBuffer();
         logHtml.write('<div class="log">');
-        var message = log['message'].replaceAllMapped(_urlRegex,
+
+        var id = log.message.id;
+        var hashTag = '${id.package}_${id.id}';
+        var message = new HtmlEscape().convert(log.message.snippet);
+        message.replaceAllMapped(_urlRegex,
             (m) => '<a href="${m.group(0)}" target="blank">${m.group(0)}</a>');
-        logHtml.write('<div class="message $levelClassName">$message</div>');
-        var assetId = log['assetId'];
-        var span = log['span'];
-        bool hasLocation = assetId != null || span != null;
-        if (hasLocation) logHtml.write('<div class="location">');
-        if (assetId != null) {
-          logHtml.write(
-              '  <span class="package">${assetId['package']}</span>:');
-          if (span == null) {
-            logHtml.write('  <span class="location">${assetId['path']}</span>');
-          }
-        }
+        logHtml.write('<div class="message $levelClassName">$message '
+            '<a target="blank" href='
+            '"/packages/polymer/src/build/generated/messages.html#$hashTag">'
+            '(more details)</a></div>');
+        var span = log.span;
         if (span != null) {
+          logHtml.write('<div class="location">');
+          var text = new HtmlEscape().convert(span.text);
           logHtml.write(
-              '  <span class="location">${span['location']}</span></div>'
-              '  <span class="text">${span['text']}</span>''</div>');
-        } else if (hasLocation) {
+              '  <span class="location">${span.start.toolString}</span></div>'
+              '  <span class="text">$text</span>''</div>');
           logHtml.write('</div>');
         }
         logHtml.write('</div>');
diff --git a/pkg/polymer/lib/src/build/messages.dart b/pkg/polymer/lib/src/build/messages.dart
new file mode 100644
index 0000000..51795db
--- /dev/null
+++ b/pkg/polymer/lib/src/build/messages.dart
@@ -0,0 +1,541 @@
+// Copyright (c) 2014, 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.
+
+/// Contains all error and warning messages produced by polymer.
+library polymer.src.build.messages;
+
+import 'package:code_transformers/messages/messages.dart';
+import 'constants.dart';
+
+const IMPORT_NOT_FOUND = const MessageTemplate(
+    const MessageId('polymer', 1),
+    'couldn\'t find imported asset "%-path-%" in package "%-package-%".',
+    'Import not found',
+    '''
+An HTML import seems to be broken. This could be because the file doesn't exist
+or because the link URL is incorrect.
+''');
+
+const DUPLICATE_DEFINITION = const MessageTemplate(
+    const MessageId('polymer', 2),
+    'duplicate definition for custom tag "%-name-%".%-second-%',
+    'Duplicate definition',
+    '''
+Custom element names are global and can only be defined once. Some common
+reasons why you might get two definitions:
+
+  * Two different elements are declared with the same name.
+  * A single HTML file defining an element, has been imported using two different
+    URLs.
+''');
+
+const USE_POLYMER_HTML = const MessageTemplate(
+    const MessageId('polymer', 3),
+      'Missing definition for <polymer-element>, please add the following '
+      'HTML import at the top of this file: <link rel="import" '
+      'href="%-reachOutPrefix-%packages/polymer/polymer.html">.',
+      'Missing import to polymer.html',
+      '''
+Starting with polymer 0.11.0, each file that uses the definition
+of polymer-element must import it either directly or transitively.
+''');
+
+const NO_IMPORT_WITHIN_ELEMENT = const MessageTemplate(
+    const MessageId('polymer', 4),
+    'Polymer.dart\'s implementation of '
+    'HTML imports are not supported within polymer element definitions, yet. '
+    'Please move the import out of this <polymer-element>.',
+    'Invalid import inside <polymer-element>',
+    '''
+HTML imports are expected at the top of each document, outside of any
+polymer-element definitions. The polymer build process combines all your HTML
+files together so you can deploy a single HTML file with your application. This
+build process ignores imports that appear to be in the wrong location.
+''');
+
+const MISSING_INIT_POLYMER = const MessageTemplate(
+    const MessageId('polymer', 5),
+    'To run a polymer application, you need to call `initPolymer()`. You can '
+    'either include a generic script tag that does this for you:'
+    '\'<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.',
+    'Missing call to `initPolymer()`',
+    '''
+Your application entry point didn't have any Dart script tags, so it's missing
+some initialization needed for polymer.dart.
+''');
+
+const NO_DART_SCRIPT_AND_EXPERIMENTAL = const MessageTemplate(
+    const MessageId('polymer', 6),
+    'The experimental bootstrap feature doesn\'t support script tags on '
+    'the main document (for now).',
+    'Script tags with experimental bootstrap',
+    'This experimental feature is no longer supported.');
+
+const ONLY_ONE_TAG = const MessageTemplate(
+    const MessageId('polymer', 7),
+    'Only one "application/dart" script tag per document is allowed.',
+    'Multiple Dart script tags per document',
+    '''
+Dartium currently allows only one script tag per document. Any
+additional script tags might be ignored or result in an error. This will
+likely change in the future, but for now, combine the script tags together into
+a single Dart library.
+''');
+
+const MOVE_IMPORTS_UP = const MessageTemplate(
+    const MessageId('polymer', 8),
+    'Move HTML imports above your Dart script tag.',
+    'Imports before script tags',
+    '''
+It is good practice to put all your HTML imports at the beginning of the
+document, above any Dart script tags. Today, the execution of Dart script tags
+is not synchronous in Dartium, so the difference is not noticeable. However,
+Dartium that will eventually change and make the timing of script tags execution
+match how they are in JavaScript. At that point the order of your imports with
+respect to script tags will be important. Following the practice of putting
+imports first protects your app from a future breaking change in this respect.
+''');
+
+const MISSING_HREF = const MessageTemplate(
+    const MessageId('polymer', 9),
+    'link rel="%-rel-%" missing href.',
+    'Missing href on a `<link>` tag',
+    'All `<link>` tags should have a valid URL to a resource.');
+
+const ELEMENT_DEPRECATED_EONS_AGO = const MessageTemplate(
+    const MessageId('polymer', 10),
+    '<element> elements are not supported, use <polymer-element> instead.',
+    '`<element>` is deprecated',
+    '''
+Long ago `<polymer-element>` used to be called `<element>`. You probably ran
+into this error if you were migrating code that was written on a very early
+version of polymer.
+''');
+
+// TODO(jmesserly): this warning is wrong if someone is using raw custom
+// elements. Is there another way we can handle this warning that won't
+// generate false positives?
+const CUSTOM_ELEMENT_NOT_FOUND = const MessageTemplate(
+    const MessageId('polymer', 11),
+    'custom element with name "%-tag-%" not found.',
+    'Definition of a custom element not found',
+    '''
+The polymer build was not able to find the definition of a custom element. This
+can happen if an element is defined with a `<polymer-element>` tag, but you are
+missing an HTML import or the import link is incorrect.
+
+This warning can also be a false alarm. For instance, when an element is defined
+programatically using `document.registerElement`. In that case the polymer build
+will not be able to see the definition and will produce this warning.
+''');
+
+const SCRIPT_TAG_SEEMS_EMPTY = const MessageTemplate(
+    const MessageId('polymer', 12),
+    'script tag seems empty.',
+    'Empty script tag',
+    'Script tags should either have a `src` attribute or a non-empty body.');
+
+const EXPECTED_DART_MIME_TYPE = const MessageTemplate(
+    const MessageId('polymer', 13),
+    'Wrong script type, expected type="application/dart".',
+    'Expected Dart mime-type',
+'''
+You seem to have a `.dart` extension on a script tag, but the mime-type
+doesn't match `application/dart`.
+''');
+
+const EXPECTED_DART_EXTENSION = const MessageTemplate(
+    const MessageId('polymer', 14),
+    '"application/dart" scripts should use the .dart file extension.',
+    'Expected Dart file extension',
+'''
+You are using the `application/dart` mime-type on a script tag, so
+the URL to the script source URL should have a `.dart` extension.
+''');
+
+const FOUND_BOTH_SCRIPT_SRC_AND_TEXT = const MessageTemplate(
+    const MessageId('polymer', 15),
+    'script tag has "src" attribute and also has script text.',
+    'Script with both src and inline text',
+'''
+You have a script tag that includes both a `src` attribute and inline script
+text. You must choose one or the other.
+''');
+
+const BAD_INSTANTIATION_MISSING_BASE_TAG = const MessageTemplate(
+    const MessageId('polymer', 16),
+    'custom element "%-tag-%" extends from "%-base-%", but '
+    'this tag will not include the default properties of "%-base-%". '
+    'To fix this, either write this tag as <%-base-% '
+    'is="%-tag-%"> or remove the "extends" attribute from '
+    'the custom element declaration.',
+    'Incorrect instantiation: missing base tag in instantiation',
+    '''
+When you declare that a custom element extends from a base tag, for example:
+
+    <polymer-element name="my-example" extends="ul">
+
+or:
+
+    <polymer-element name="my-example2" extends="ul">
+    <polymer-element name="my-example" extends="my-example2">
+
+You should instantiate `my-example` by using this syntax:
+
+    <ul is="my-example">
+
+And not:
+
+    <my-example>
+
+Only elements that don't extend from existing HTML elements are created using
+the latter form.
+
+This is because browsers first create the base element, and then upgrade it to
+have the extra functionality of your custom element. In the example above, using
+`<ul>` tells the browser which base type it must create before
+doing the upgrade.
+''');
+
+const BAD_INSTANTIATION_BOGUS_BASE_TAG = const MessageTemplate(
+    const MessageId('polymer', 17),
+    'custom element "%-tag-%" doesn\'t declare any type '
+    'extensions. To fix this, either rewrite this tag as '
+    '<%-tag-%> or add \'extends="%-base-%"\' to '
+    'the custom element declaration.',
+
+    'Incorrect instantiation: extra `is` attribute or missing `extends` '
+    'in declaration',
+    '''
+Creating a custom element using the syntax:
+
+    <ul is="my-example">
+
+means that the declaration of `my-example` extends transitively from `ul`. This
+error message is shown if the definition of `my-example` doesn't declare this
+extension. It might be that you no longer extend from the base element, in which
+case the fix is to change the instantiation to:
+
+    <my-example>
+
+Another possibility is that the declaration needs to be fixed to include the
+`extends` attribute, for example:
+
+    <polymer-element name="my-example" extends="ul">
+''');
+
+const BAD_INSTANTIATION_WRONG_BASE_TAG = const MessageTemplate(
+    const MessageId('polymer', 18),
+    'custom element "%-tag-%" extends from "%-base-%". '
+    'Did you mean to write <%-base-% is="%-tag-%">?',
+    'Incorrect instantiation: base tag seems wrong',
+    '''
+It seems you have a declaration like:
+
+    <polymer-element name="my-example" extends="div">
+
+but an instantiation like:
+
+    <span is="my-example">
+
+Both the declaration and the instantiation need to match on the base type. So
+either the instantiation needs to be fixed to be more like:
+
+    <span is="my-example">
+
+or the declaration should be fixed to be like:
+
+    <polymer-element name="my-example" extends="span">
+''');
+
+const NO_DASHES_IN_CUSTOM_ATTRIBUTES = const MessageTemplate(
+    const MessageId('polymer', 19),
+    'PolymerElement no longer recognizes attribute names with '
+    'dashes such as "%-name-%". Use %-alternative-% '
+    'instead (both forms are equivalent in HTML).',
+    'No dashes allowed in custom attributes',
+    '''
+Polymer used to recognize attributes with dashes like `my-name` and convert them
+to match properties where dashes were removed, and words follow the camelCase
+style (for example `myName`). This feature is no longer available. Now simply
+use the same name as the property.
+
+Because HTML attributes are case-insensitive, you can also write the name of
+your property entirely in lowercase. Just be sure that your custom-elements
+don't declare two properties with the same name but different capitalization.
+''');
+
+
+const EVENT_HANDLERS_ONLY_WITHIN_POLYMER = const MessageTemplate(
+    const MessageId('polymer', 20),
+    'Inline event handlers are only supported inside '
+    'declarations of <polymer-element>.',
+    'Event handlers not supported here',
+    '''
+Bindings of the form `{{ }}` are supported inside `<template>` nodes, even outside
+of `<polymer-element>` declarations. However, those bindings only support binding
+values into the content of a node or an attribute.
+
+Inline event handlers of the form `on-click="{{method}}"` are a special feature
+of polymer elements, so they are only supported inside `<polymer-element>`
+definitions.
+''');
+
+const INVALID_EVENT_HANDLER_BODY = const MessageTemplate(
+    const MessageId('polymer', 21),
+    'Invalid event handler body "%-value-%". Declare a method '
+    'in your custom element "void handlerName(event, detail, target)" '
+    'and use the form %-name-%="{{handlerName}}".',
+    'No expressions allowed in event handler bindings',
+    '''
+Unlike data bindings, event handler bindings of the form `on-click="{{method}}"`
+are not evaluated as expressions. They are meant to just contain a simple name
+that resolves to a method in your polymer element's class definition.
+''');
+
+const NESTED_POLYMER_ELEMENT = const MessageTemplate(
+    const MessageId('polymer', 22),
+    'Nested polymer element definitions are not allowed.',
+    'Nested polymer element definitions not allowed',
+    '''
+Because custom element names are global, there is no need to have a
+`<polymer-element>` definition nested within a `<polymer-element>`. If you have
+a definition inside another, move the second definition out.
+
+You might see this error if you have an HTML import within a polymer element.
+You should be able to move the import out of the element definition.
+''');
+
+const MISSING_TAG_NAME = const MessageTemplate(
+    const MessageId('polymer', 23),
+    'Missing tag name of the custom element. Please include an '
+    'attribute like \'name="your-tag-name"\'.',
+    'Polymer element definitions without a name',
+    '''
+Polymer element definitions must have a name. You can include a name by using
+the `name` attribute in `<polymer-element>` for example:
+
+    <polymer-element name="my-example">
+''');
+
+final INVALID_TAG_NAME = new MessageTemplate(
+    const MessageId('polymer', 24),
+    'Invalid name "%-name-%". Custom element names must have '
+    'at least one dash (-) and can\'t be any of the following names: '
+    '${invalidTagNames.keys.join(", ")}.',
+    'Custom element name missing a dash',
+    '''
+Custom element names must have a dash (`-`) and can\'t be any of the following
+reserved names:
+
+${invalidTagNames.keys.map((e) => '  * `$e`\n').join('')}
+
+''');
+
+const INLINE_IMPORT_FAIL = const MessageTemplate(
+    const MessageId('polymer', 25),
+    'Failed to inline HTML import: %-error-%',
+    'Error while inlining an import',
+    '''
+An error occurred while inlining an import in the polymer build. This is often
+the result of a broken HTML import.
+''');
+
+const INLINE_STYLE_FAIL = const MessageTemplate(
+    const MessageId('polymer', 26),
+    'Failed to inline stylesheet: %-error-%',
+    'Error while inlining a stylesheet',
+    '''
+An error occurred while inlining a stylesheet in the polymer build. This is
+often the result of a broken URL in a `<link rel="stylesheet" href="...">`.
+''');
+
+const SCRIPT_FILE_NOT_FOUND = const MessageTemplate(
+    const MessageId('polymer', 27),
+    'Script file at "%-url-%" not found.',
+    'URL to a script file might be incorrect',
+    '''
+An error occurred trying to read a script tag on a given URL. This is often the
+result of a broken URL in a `<script src="...">`.
+''');
+
+const USE_UNDERSCORE_PREFIX = const MessageTemplate(
+    const MessageId('polymer', 28),
+    'When using bindings with the "%-name-%" attribute you may '
+    'experience errors in certain browsers. Please use the '
+    '"_%-name-%" attribute instead.',
+    'Attribute missing "_" prefix',
+    '''
+Not all browsers support bindings to certain attributes, especially URL
+attributes. Some browsers might sanitize attributes and result in an
+incorrect value. For this reason polymer provides a special set of attributes
+that let you bypass any browser internal attribute validation. The name of the
+attribute is the same as the original attribute, but with a leading underscore.
+For example, instead of writing:
+
+    <img src="{{binding}}">
+
+you can write:
+
+    <img _src="{{binding}}">
+
+For more information, see <http://goo.gl/5av8cU>.
+''');
+
+const DONT_USE_UNDERSCORE_PREFIX = const MessageTemplate(
+    const MessageId('polymer', 29),
+    'The "_%-name-%" attribute is only supported when using bindings. '
+    'Please change to the "%-name-%" attribute.',
+    'Attribute with extra "_" prefix',
+    '''
+A special attribute exists to support bindings on URL attributes. For example,
+this correctly binds the `src` attribute in an image:
+
+    <img _src="{{binding}}">
+
+However, this special `_src` attribute is only available for bindings. If you
+just have a URL, use the normal `src` attribute instead.
+''');
+
+const INTERNAL_ERROR_DONT_KNOW_HOW_TO_IMPORT = const MessageTemplate(
+    const MessageId('polymer', 30),
+    "internal error: don't know how to include %-target-% from"
+    " %-source-%.%-extra-%",
+    "Internal error: don't know how to include a URL",
+    '''
+Sorry, you just ran into a bug in the polymer transformer code. Please file a
+bug at <http://dartbug.com/new> including, if possible, some example code that
+can help the team reproduce the issue.
+''');
+
+const INTERNAL_ERROR_UNEXPECTED_SCRIPT = const MessageTemplate(
+    const MessageId('polymer', 31),
+    'unexpected script. The ScriptCompactor transformer should run after '
+    'running the ImportInliner',
+    'Internal error: phases run out of order',
+    '''
+Sorry, you just ran into a bug in the polymer transformer code. Please file a
+bug at <http://dartbug.com/new> including, if possible, some example code that
+can help the team reproduce the issue.
+''');
+
+const PRIVATE_CUSTOM_TAG = const MessageTemplate(
+    const MessageId('polymer', 32),
+    '@CustomTag is not currently supported on private classes:'
+    ' %-name-%. Consider making this class public, or create a '
+    'public initialization method marked with `@initMethod` that calls '
+    '`Polymer.register(%-name-%, %-className-%)`.',
+    '`@CustomTag` used on a private class',
+    '''
+The `@CustomTag` annotation is currently only supported on public classes. If
+you need to register a custom element whose implementation is a private class
+(that is, a class whose name starts with `_`), you can still do so by invoking
+`Polymer.register` within a public method marked with `@initMethod`.
+''');
+
+const PRIVATE_INIT_METHOD = const MessageTemplate(
+    const MessageId('polymer', 33),
+    '@initMethod is no longer supported on private functions: %-name-%',
+    '`@initMethod` is on a private function',
+    '''
+The `@initMethod` annotation is currently only supported on public top-level
+functions.
+''');
+
+const MISSING_ANNOTATION_ARGUMENT = const MessageTemplate(
+    const MessageId('polymer', 34),
+    'Missing argument in @%-name-% annotation',
+    'Missing argument in annotation',
+    'The annotation expects one argument, but the argument was not provided.');
+
+const INVALID_ANNOTATION_ARGUMENT = const MessageTemplate(
+    const MessageId('polymer', 35),
+    'The parameter to @%-name-% seems to be invalid.',
+    'Invalid argument in annotation',
+    '''
+The polymer transformer was not able to extract a constant value for the
+annotation argument. This can happen if your code is currently in a state that
+can't be analyzed (for example, it has parse errors) or if the expression passed
+as an argument is invalid (for example, it is not a compile-time constant).
+''');
+
+
+const NO_INITIALIZATION = const MessageTemplate(
+    const MessageId('polymer', 36),
+    'No polymer initializers were found. Make sure to either '
+    'annotate your polymer elements with @CustomTag or include a '
+    'top level method annotated with @initMethod that registers your '
+    'elements. Both annotations are defined in the polymer library ('
+    'package:polymer/polymer.dart).',
+    'No polymer initializers found',
+    '''
+No polymer initializers were found. Make sure to either 
+annotate your polymer elements with @CustomTag or include a 
+top level method annotated with @initMethod that registers your 
+elements. Both annotations are defined in the polymer library (
+package:polymer/polymer.dart).
+''');
+
+const AT_EXPRESSION_REMOVED = const MessageTemplate(
+    const MessageId('polymer', 37),
+    'event bindings with @ are no longer supported',
+    'Event bindings with @ are no longer supported',
+    '''
+For a while there was an undocumented feature that allowed users to include
+expressions in event bindings using the `@` prefix, for example:
+
+    <div on-click="{{@a.b.c}}">
+    
+This feature is no longer supported.
+''');
+
+const NO_PRIVATE_EVENT_HANDLERS = const MessageTemplate(
+    const MessageId('polymer', 38),
+    'private symbols cannot be used in event handlers',
+    'Private symbol in event handler',
+    '''
+Currently private members can't be used in event handler bindings. So you can't
+write:
+
+    <div on-click="{{_method}}">
+
+This restriction might be removed in the future, but for now, you need to make
+your event handlers public.
+''');
+
+const NO_PRIVATE_SYMBOLS_IN_BINDINGS = const MessageTemplate(
+    const MessageId('polymer', 39),
+    'private symbols are not supported',
+    'Private symbol in binding expression',
+    '''
+Private members can't be used in binding expressions. For example, you can't
+write:
+
+    <div>{{a.b._c}}</div>
+''');
+
+const HTML5_WARNING = const MessageTemplate(
+    const MessageId('polymer', 40),
+    '(from html5lib) %-message-%',
+    'A warning was found while parsing the HTML document',
+    '''
+The polymer transformer uses a parser that implements the HTML5 spec
+(`html5lib`). This message reports a
+warning that the parser detected.
+''');
+
+const POSSIBLE_FUOC = const MessageTemplate(
+    const MessageId('polymer', 41),
+    'Custom element found in document body without an '
+    '"unresolved" attribute on it or one of its parents. This means '
+    'your app probably has a flash of unstyled content before it '
+    'finishes loading.',
+    'Possible flash of unstyled content',
+    '''
+Custom element found in document body without an "unresolved" attribute on it or
+one of its parents. This means your app probably has a flash of unstyled content
+before it finishes loading. See <http://goo.gl/iN03Pj> for more info.
+''');
diff --git a/pkg/polymer/lib/src/build/polyfill_injector.dart b/pkg/polymer/lib/src/build/polyfill_injector.dart
index a467af5..1b88728 100644
--- a/pkg/polymer/lib/src/build/polyfill_injector.dart
+++ b/pkg/polymer/lib/src/build/polyfill_injector.dart
@@ -11,6 +11,7 @@
 import 'package:html5lib/dom.dart' show
     Document, DocumentFragment, Element, Node;
 import 'package:html5lib/parser.dart' show parseFragment;
+import 'package:code_transformers/messages/build_logger.dart';
 import 'common.dart';
 
 /// Ensures that any scripts and polyfills needed to run a polymer application
@@ -32,7 +33,10 @@
   }
 
   Future apply(Transform transform) {
-    return readPrimaryAsHtml(transform).then((document) {
+    var logger = new BuildLogger(transform,
+        convertErrorsToWarnings: !options.releaseMode,
+        detailsUri: 'http://goo.gl/5HPeuP');
+    return readPrimaryAsHtml(transform, logger).then((document) {
       bool webComponentsFound = false;
       Element dartJs;
       final dartScripts = <Element>[];
diff --git a/pkg/polymer/lib/src/build/remove_sourcemap_comment.dart b/pkg/polymer/lib/src/build/remove_sourcemap_comment.dart
new file mode 100644
index 0000000..cc106db
--- /dev/null
+++ b/pkg/polymer/lib/src/build/remove_sourcemap_comment.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2014, 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.
+
+/// Transformer that removes any sourcemap comments from javascript files.
+library web_components.src.remove_sourcemap_comment;
+
+import 'dart:async';
+import 'package:barback/barback.dart';
+
+/// Transformer that removes any sourcemap comments from javascript files.
+/// Comments should be on their own line in the form: //# sourceMappingURL=*.map
+class RemoveSourcemapComment extends Transformer {
+  BarbackSettings settings;
+
+  RemoveSourcemapComment.asPlugin(this.settings);
+
+  /// Only apply to files in release mode.
+  isPrimary(_) => settings.mode == BarbackMode.RELEASE;
+
+  apply(Transform transform) {
+    var id = transform.primaryInput.id;
+    return transform.readInputAsString(id).then((file) {
+      if (file.contains(_SOURCE_MAP_COMMENT)) {
+        transform.addOutput(new Asset.fromString(
+            id, file.replaceAll(_SOURCE_MAP_COMMENT, '')));
+      }
+    });
+  }
+}
+
+final RegExp _SOURCE_MAP_COMMENT = new RegExp(r'\n\s*\/\/# sourceMappingURL.*');
diff --git a/pkg/polymer/lib/src/build/script_compactor.dart b/pkg/polymer/lib/src/build/script_compactor.dart
index 63c1eaa..20d8052 100644
--- a/pkg/polymer/lib/src/build/script_compactor.dart
+++ b/pkg/polymer/lib/src/build/script_compactor.dart
@@ -15,6 +15,7 @@
 import 'package:analyzer/src/generated/element.dart' hide Element;
 import 'package:analyzer/src/generated/element.dart' as analyzer show Element;
 import 'package:barback/barback.dart';
+import 'package:code_transformers/messages/build_logger.dart';
 import 'package:path/path.dart' as path;
 import 'package:source_span/source_span.dart';
 import 'package:smoke/codegen/generator.dart';
@@ -27,9 +28,9 @@
 import 'package:polymer_expressions/parser.dart' as pe;
 import 'package:polymer_expressions/visitor.dart' as pe;
 
-import 'import_inliner.dart' show ImportInliner; // just for docs.
 import 'common.dart';
-import 'wrapped_logger.dart';
+import 'import_inliner.dart' show ImportInliner; // just for docs.
+import 'messages.dart';
 
 /// Combines Dart script tags into a single script tag, and creates a new Dart
 /// file that calls the main function of each of the original script tags.
@@ -108,7 +109,7 @@
 class _ScriptCompactor extends PolymerTransformer {
   final TransformOptions options;
   final Transform transform;
-  final TransformLogger logger;
+  final BuildLogger logger;
   final AssetId docId;
   final AssetId bootstrapId;
 
@@ -146,8 +147,9 @@
   _ScriptCompactor(Transform transform, options, this.resolvers)
       : transform = transform,
         options = options,
-        logger = options.releaseMode ? transform.logger :
-          new WrappedLogger(transform, convertErrorsToWarnings: true),
+        logger = new BuildLogger(
+            transform, convertErrorsToWarnings: !options.releaseMode,
+            detailsUri: 'http://goo.gl/5HPeuP'),
         docId = transform.primaryInput.id,
         bootstrapId = transform.primaryInput.id.addExtension('_bootstrap.dart');
 
@@ -157,15 +159,13 @@
       .then(_processHtml)
       .then(_emitNewEntrypoint)
       .then((_) {
-        // Write out the logs collected by our [WrappedLogger].
-        if (options.injectBuildLogsInOutput && logger is WrappedLogger) {
-          return (logger as WrappedLogger).writeOutput();
-        }
+        // Write out the logs collected by our [BuildLogger].
+        if (options.injectBuildLogsInOutput) return logger.writeOutput();
       });
 
   /// Loads the primary input as an html document.
   Future _loadDocument() =>
-      readPrimaryAsHtml(transform).then((doc) { document = doc; });
+      readPrimaryAsHtml(transform, logger).then((doc) { document = doc; });
 
   /// Populates [entryLibraries] as a list containing the asset ids of each
   /// library loaded on a script tag. The actual work of computing this is done
@@ -177,6 +177,7 @@
         entryLibraries = map['script_ids']
               .map((id) => new AssetId.deserialize(id))
               .toList();
+        return Future.forEach(entryLibraries, logger.addLogFilesFromAsset);
       });
 
   /// Removes unnecessary script tags, and identifies the main entry point Dart
@@ -189,9 +190,7 @@
         continue;
       }
       if (tag.attributes['type'] == 'application/dart') {
-        logger.warning('unexpected script. The '
-          'ScriptCompactor transformer should run after running the '
-          'ImportInliner', span: tag.sourceSpan);
+        logger.warning(INTERNAL_ERROR_UNEXPECTED_SCRIPT, span: tag.sourceSpan);
       }
     }
   }
@@ -287,10 +286,8 @@
 
     if (cls.isPrivate && tagNames.isNotEmpty) {
       var name = tagNames.first;
-      logger.error('@CustomTag is not currently supported on private classes:'
-          ' $name. Consider making this class public, or create a '
-          'public initialization method marked with `@initMethod` that calls '
-          '`Polymer.register($name, ${cls.name})`.',
+      logger.error(PRIVATE_CUSTOM_TAG.create(
+              {'name': name, 'class': cls.name}),
           span: _spanForNode(cls, cls.node.name));
       return;
     }
@@ -372,7 +369,7 @@
     // Read argument from the AST
     var args = meta.arguments.arguments;
     if (args == null || args.length == 0) {
-      logger.warning('Missing argument in @$name annotation',
+      logger.warning(MISSING_ANNOTATION_ARGUMENT.create({'name': name}),
           span: _spanForNode(context, meta));
       return null;
     }
@@ -381,7 +378,7 @@
     while (lib is! LibraryElement) lib = lib.enclosingElement;
     var res = resolver.evaluateConstant(lib, args[0]);
     if (!res.isValid || res.value.type != types.stringType) {
-      logger.warning('The parameter to @$name seems to be invalid.',
+      logger.warning(INVALID_ANNOTATION_ARGUMENT.create({'name': name}),
           span: _spanForNode(context, args[0]));
       return null;
     }
@@ -402,8 +399,7 @@
     }
     if (!initMethodFound) return;
     if (function.isPrivate) {
-      logger.error('@initMethod is no longer supported on private '
-          'functions: ${function.displayName}',
+      logger.error(PRIVATE_INIT_METHOD.create({'name': function.displayName}),
           span: _spanForNode(function, function.node.name));
       return;
     }
@@ -471,7 +467,7 @@
       }
       code.writeln('    ]);');
     } else {
-      if (experimentalBootstrap) logger.warning(NO_INITIALIZERS_ERROR);
+      if (experimentalBootstrap) logger.warning(NO_INITIALIZATION);
       code.writeln(']);');
     }
     if (!experimentalBootstrap) {
@@ -536,12 +532,6 @@
 import 'package:polymer/polymer.dart';
 """;
 
-const NO_INITIALIZERS_ERROR =
-    'No polymer initializers were found. Make sure to either '
-    'annotate your polymer elements with @CustomTag or include a '
-    'top level method annotated with @initMethod that registers your '
-    'elements. Both annotations are defined in the polymer library ('
-    'package:polymer/polymer.dart).';
 
 /// An html visitor that:
 ///   * finds all polymer expressions and records the getters and setters that
@@ -552,7 +542,7 @@
   final Map<String, List<String>> publishedAttributes;
   final SmokeCodeGenerator generator;
   final _SubExpressionVisitor expressionVisitor;
-  final TransformLogger logger;
+  final BuildLogger logger;
   bool _inTemplate = false;
 
   _HtmlExtractor(this.logger, this.generator, this.publishedAttributes,
@@ -625,15 +615,13 @@
 
     if (inEvent) {
       if (stringExpression.startsWith('@')) {
-        logger.warning('event bindings with @ are no longer supported',
-            span: span);
+        logger.warning(AT_EXPRESSION_REMOVED, span: span);
         return;
       }
 
       if (stringExpression == '') return;
       if (stringExpression.startsWith('_')) {
-        logger.warning('private symbols cannot be used in event handlers',
-            span: span);
+        logger.warning(NO_PRIVATE_EVENT_HANDLERS, span: span);
         return;
       }
       generator.addGetter(stringExpression);
@@ -647,7 +635,7 @@
 /// be needed to evaluate a single expression at runtime.
 class _SubExpressionVisitor extends pe.RecursiveVisitor {
   final SmokeCodeGenerator generator;
-  final TransformLogger logger;
+  final BuildLogger logger;
   bool _includeSetter;
   SourceSpan _currentSpan;
 
@@ -666,7 +654,7 @@
   /// Adds a getter and symbol for [name], and optionally a setter.
   _add(String name) {
     if (name.startsWith('_')) {
-      logger.warning('private symbols are not supported', span: _currentSpan);
+      logger.warning(NO_PRIVATE_SYMBOLS_IN_BINDINGS, span: _currentSpan);
       return;
     }
     generator.addGetter(name);
diff --git a/pkg/polymer/lib/src/build/wrapped_logger.dart b/pkg/polymer/lib/src/build/wrapped_logger.dart
deleted file mode 100644
index da54f43..0000000
--- a/pkg/polymer/lib/src/build/wrapped_logger.dart
+++ /dev/null
@@ -1,116 +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.
-
-library polymer.src.build.wrapped_logger;
-
-import 'dart:async';
-import 'dart:convert';
-
-import 'package:barback/barback.dart';
-import 'package:source_span/source_span.dart';
-
-import 'common.dart' as common;
-
-/// A simple class to wrap one TransformLogger with another one that writes all
-/// logs to a file and then forwards the calls to the child.
-class WrappedLogger implements TransformLogger {
-  Transform _transform;
-  List<Map> _logs = new List<Map>();
-
-  bool convertErrorsToWarnings;
-
-  WrappedLogger(this._transform, {this.convertErrorsToWarnings: false});
-
-  void info(String message, {AssetId asset, SourceSpan span}) {
-    _transform.logger.info(message, asset: asset, span: span);
-    _addLog(asset, LogLevel.INFO, message, span);
-  }
-
-  void fine(String message, {AssetId asset, SourceSpan span}) {
-    _transform.logger.fine(message, asset: asset, span: span);
-    _addLog(asset, LogLevel.FINE, message, span);
-  }
-
-  void warning(String message, {AssetId asset, SourceSpan span}) {
-    _transform.logger.warning(message, asset: asset, span: span);
-    _addLog(asset, LogLevel.WARNING, message, span);
-  }
-
-  void error(String message, {AssetId asset, SourceSpan span}) {
-    if (convertErrorsToWarnings) {
-      _transform.logger.warning(message, asset: asset, span: span);
-    } else {
-      _transform.logger.error(message, asset: asset, span: span);
-    }
-    _addLog(asset, LogLevel.ERROR, message, span);
-  }
-
-  /// Outputs the log data to a JSON serialized file.
-  Future writeOutput() {
-    return getNextLogAssetPath().then((path) {
-      _transform.addOutput(new Asset.fromString(path, JSON.encode(_logs)));
-    });
-  }
-
-  // Each phase outputs a new log file with an incrementing # appended, this
-  // figures out the next # to use.
-  Future<String> getNextLogAssetPath([int nextNumber = 1]) {
-    var nextAssetPath = _transform.primaryInput.id.addExtension(
-        '${common.LOG_EXTENSION}.$nextNumber');
-    return _transform.hasInput(nextAssetPath).then((exists) {
-      if (!exists) return nextAssetPath;
-      return getNextLogAssetPath(++nextNumber);
-    });
-  }
-
-  // Reads all log files for an Asset into [logs].
-  static Future _readLogFilesForAsset(
-      AssetId id, Transform transform, List<Map> logs, [nextNumber = 1]) {
-    var nextAssetPath = id.addExtension('${common.LOG_EXTENSION}.$nextNumber');
-    return transform.hasInput(nextAssetPath).then((exists) {
-      if (!exists) return null;
-      return transform.readInputAsString(nextAssetPath).then((data) {
-        logs.addAll(JSON.decode(data));
-        return _readLogFilesForAsset(id, transform, logs, ++nextNumber);
-      });
-    });
-  }
-
-  // Combines all existing ._buildLogs.* files into a single ._buildLogs file.
-  static Future combineLogFiles(Transform transform) {
-    var logs = new List<Map>();
-    var id = transform.primaryInput.id;
-    return _readLogFilesForAsset(id, transform, logs).then((_) {
-      return transform.addOutput(new Asset.fromString(
-          id.addExtension(common.LOG_EXTENSION),
-          JSON.encode(logs)));
-    });
-  }
-
-  // Reads all logs for an asset and adds them to this loggers log output.
-  Future addLogFilesFromAsset(AssetId id, [int nextNumber = 1]) {
-    return _readLogFilesForAsset(id, _transform, _logs);
-  }
-
-  void _addLog(AssetId assetId, LogLevel level, String message,
-               SourceSpan span) {
-    var data = {
-        'level': level.name,
-        'message': const HtmlEscape().convert(message),
-    };
-    if (assetId != null) {
-      data['assetId'] = {
-          'package': assetId.package,
-          'path': assetId.path,
-      };
-    }
-    if (span != null) {
-      data['span'] = {
-          'location': span.start.toolString,
-          'text': new HtmlEscape().convert(span.text),
-      };
-    }
-    _logs.add(data);
-  }
-}
diff --git a/pkg/polymer/pubspec.yaml b/pkg/polymer/pubspec.yaml
index 6c8ec55..ec9d2e0 100644
--- a/pkg/polymer/pubspec.yaml
+++ b/pkg/polymer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: polymer
-version: 0.13.0+1
+version: 0.13.1
 author: Polymer.dart Authors <web-ui-dev@dartlang.org>
 description: >
   Polymer.dart is a new type of library for the web, built on top of Web
@@ -8,10 +8,10 @@
 homepage: https://www.dartlang.org/polymer-dart/
 dependencies:
   analyzer: '>=0.15.6 <0.23.0'
-  args: '>=0.10.0 <0.13.0'
+  args: '>=0.11.0 <0.13.0'
   barback: '>=0.14.2 <0.16.0'
   browser: '>=0.10.0 <0.11.0'
-  code_transformers: '>=0.2.0 <0.3.0'
+  code_transformers: '>=0.2.3 <0.3.0'
   html5lib: '>=0.12.0 <0.13.0'
   logging: '>=0.9.2 <0.10.0'
   observe: '>=0.11.0 <0.13.0'
@@ -25,9 +25,18 @@
   yaml: '>=0.9.0 <3.0.0'
 dev_dependencies:
   unittest: '>=0.10.0 <0.12.0'
+  markdown: '>=0.7.0 <0.8.0'
 transformers:
 - polymer/src/build/mirrors_remover:
     $include: lib/polymer.dart
+- polymer/src/build/delete_file:
+    $include:
+      - lib/src/build/log_injector.css
+      - lib/src/js/polymer/polymer.concat.js
+      - lib/src/js/polymer/polymer.concat.js.map
+      - lib/src/js/polymer/polymer.js.map
+- polymer/src/build/remove_sourcemap_comment:
+    $include: lib/src/js/polymer/polymer.js
 - observe:
     files: lib/src/instance.dart
     $include: lib/src/instance.dart
diff --git a/pkg/polymer/test/build/all_phases_test.dart b/pkg/polymer/test/build/all_phases_test.dart
index 869a98f..80efec7 100644
--- a/pkg/polymer/test/build/all_phases_test.dart
+++ b/pkg/polymer/test/build/all_phases_test.dart
@@ -6,8 +6,7 @@
 
 import 'package:code_transformers/tests.dart' show testingDartSdkDirectory;
 import 'package:polymer/src/build/common.dart';
-import 'package:polymer/src/build/linter.dart' show USE_POLYMER_HTML,
-    USE_INIT_DART, ONLY_ONE_TAG;
+import 'package:polymer/src/build/messages.dart';
 import 'package:polymer/src/build/script_compactor.dart' show MAIN_HEADER;
 import 'package:polymer/transformer.dart';
 import 'package:smoke/codegen/generator.dart' show DEFAULT_IMPORTS;
@@ -23,7 +22,7 @@
   testPhases('no changes', phases, {
       'a|web/test.html': '<!DOCTYPE html><html></html>',
     }, {}, [
-      'warning: $USE_INIT_DART'
+      'warning: ${MISSING_INIT_POLYMER.snippet}'
     ]);
 
   testPhases('observable changes', phases, {
@@ -175,9 +174,9 @@
     }, [
       // These should not be emitted multiple times. See:
       // https://code.google.com/p/dart/issues/detail?id=17197
-      'warning: $ONLY_ONE_TAG (web/test.html 2 0)',
-      'warning: $ONLY_ONE_TAG (web/test.html 18 0)',
-      'warning: $ONLY_ONE_TAG (web/test.html 34 0)',
+      'warning: ${ONLY_ONE_TAG.snippet} (web/test.html 2 0)',
+      'warning: ${ONLY_ONE_TAG.snippet} (web/test.html 18 0)',
+      'warning: ${ONLY_ONE_TAG.snippet} (web/test.html 34 0)',
       'warning: Script file at "d.dart" not found. (web/test.html 34 0)',
     ]);
 
diff --git a/pkg/polymer/test/build/build_log_combiner_test.dart b/pkg/polymer/test/build/build_log_combiner_test.dart
index 6f98e9a..34d59bc 100644
--- a/pkg/polymer/test/build/build_log_combiner_test.dart
+++ b/pkg/polymer/test/build/build_log_combiner_test.dart
@@ -4,8 +4,10 @@
 
 library polymer.test.build.build_log_combiner_test;
 
-import 'package:polymer/src/build/common.dart';
+import 'package:code_transformers/messages/build_logger.dart' show
+    LOG_EXTENSION;
 import 'package:polymer/src/build/build_log_combiner.dart';
+import 'package:polymer/src/build/common.dart';
 import 'package:unittest/compact_vm_config.dart';
 import 'package:unittest/unittest.dart';
 
@@ -19,17 +21,25 @@
 
   testPhases('combines multiple logs', phases, {
       'a|web/test.html': '<!DOCTYPE html><html></html>',
-      'a|web/test.html$LOG_EXTENSION.1': '[${_logString('Info', 'foo')}]',
-      'a|web/test.html$LOG_EXTENSION.2': '[${_logString('Warning', 'bar')}]',
-      'a|web/test.html$LOG_EXTENSION.3': '[${_logString('Error', 'baz')}]',
+      'a|web/test.html$LOG_EXTENSION.1':
+          '{"foo#0":[${_logString('Info', 0, 'foo')}]}',
+      'a|web/test.html$LOG_EXTENSION.2':
+          '{"foo#2":[${_logString('Warning', 2, 'bar')}]}',
+      'a|web/test.html$LOG_EXTENSION.3':
+          '{'
+            '"foo#2":[${_logString('Error', 2, 'baz1')}],'
+            '"foo#44":[${_logString('Error', 44, 'baz2')}]'
+          '}',
   }, {
       'a|web/test.html': '<!DOCTYPE html><html></html>',
-      'a|web/test.html$LOG_EXTENSION':
-      '[${_logString('Info', 'foo')},'
-       '${_logString('Warning', 'bar')},'
-       '${_logString('Error', 'baz')}]',
+      'a|web/test.html$LOG_EXTENSION': '{'
+            '"foo#0":[${_logString('Info', 0, 'foo')}],'
+            '"foo#2":[${_logString('Warning', 2, 'bar')},'
+                         '${_logString('Error', 2, 'baz1')}],'
+            '"foo#44":[${_logString('Error', 44, 'baz2')}]'
+          '}',
   });
 }
 
-String _logString(String level, String message) =>
-  '{"level":"$level","message":"$message"}';
\ No newline at end of file
+String _logString(String level, int id, String message) =>
+  '{"level":"$level","message":{"id":"foo#$id","snippet":"$message"}}';
diff --git a/pkg/polymer/test/build/common.dart b/pkg/polymer/test/build/common.dart
index b6da27a..c50efa6 100644
--- a/pkg/polymer/test/build/common.dart
+++ b/pkg/polymer/test/build/common.dart
@@ -7,6 +7,8 @@
 import 'dart:async';
 
 import 'package:barback/barback.dart';
+import 'package:code_transformers/messages/build_logger.dart'
+  show LOG_EXTENSION;
 import 'package:polymer/src/build/common.dart';
 import 'package:stack_trace/stack_trace.dart';
 import 'package:unittest/unittest.dart';
@@ -72,7 +74,12 @@
       // We only check messages when an expectation is provided.
       if (messages == null) return;
 
-      var msg = '${entry.level.name.toLowerCase()}: ${entry.message}';
+      var errorLink = new RegExp(
+          ' See http://goo.gl/5HPeuP#polymer_[0-9]* for details.');
+      var text = entry.message;
+      var newText = text.replaceFirst(errorLink, '');
+      expect(text != newText, isTrue);
+      var msg = '${entry.level.name.toLowerCase()}: ${newText}';
       var span = entry.span;
       var spanInfo = span == null ? '' :
           ' (${span.sourceUrl} ${span.start.line} ${span.start.column})';
diff --git a/pkg/polymer/test/build/import_inliner_test.dart b/pkg/polymer/test/build/import_inliner_test.dart
index c25958a..13b4cdf 100644
--- a/pkg/polymer/test/build/import_inliner_test.dart
+++ b/pkg/polymer/test/build/import_inliner_test.dart
@@ -680,20 +680,31 @@
             '</head></html>',
       }, {
         'a|web/test.html._buildLogs.1':
-          '[{'
+          '{"polymer#25":[{'
             '"level":"Error",'
-            '"message":"${const HtmlEscape().convert(
-                'Failed to inline html import: '
-                'Could not find asset a|web/foo.html.')}",'
-            '"assetId":{"package":"a","path":"web/foo.html"},'
+            '"message":{'
+               '"id":"polymer#25",'
+               '"snippet":"Failed to inline HTML import: '
+                'Could not find asset a|web/foo.html."'
+            '},'
             '"span":{'
-              '"location":"web/test.html:1:28",'
-              '"text":"${const HtmlEscape().convert(
-                '<link rel="import" href="foo.html">')}"'
-              '}'
-            '}]',
+              '"start":{'
+                '"url":"web/test.html",'
+                '"offset":27,'
+                '"line":0,'
+                '"column":27'
+              '},'
+              '"end":{'
+                '"url":"web/test.html",'
+                '"offset":62,'
+                '"line":0,'
+                '"column":62'
+              '},'
+              '"text":"<link rel=\\"import\\" href=\\"foo.html\\">"'
+            '}'
+          '}]}',
       }, [
-        'error: Failed to inline html import: '
+        'error: Failed to inline HTML import: '
             'Could not find asset a|web/foo.html. (web/test.html 0 27)',
       ]);
 }
@@ -1022,8 +1033,7 @@
       }, {}, [
           'warning: When using bindings with the "src" attribute you may '
               'experience errors in certain browsers. Please use the "_src" '
-              'attribute instead. For more information, see '
-              'http://goo.gl/5av8cU (web/test.html 0 40)',
+              'attribute instead. (web/test.html 0 40)',
           'warning: The "_href" attribute is only supported when using '
               'bindings. Please change to the "href" attribute. '
               '(web/test.html 0 63)',
diff --git a/pkg/polymer/test/build/linter_test.dart b/pkg/polymer/test/build/linter_test.dart
index 4ec7677..088642f 100644
--- a/pkg/polymer/test/build/linter_test.dart
+++ b/pkg/polymer/test/build/linter_test.dart
@@ -8,6 +8,7 @@
 
 import 'package:polymer/src/build/common.dart';
 import 'package:polymer/src/build/linter.dart';
+import 'package:polymer/src/build/messages.dart';
 import 'package:unittest/unittest.dart';
 
 import 'common.dart';
@@ -59,7 +60,7 @@
 
     test('usePolymerHtmlMessage looks right', () {
       _check(int i, String url) {
-        expect(usePolymerHtmlMessage(i),
+        expect(_usePolymerHtmlMessage(i),
             contains('<link rel="import" href="$url">'));
       }
       _check(0, 'packages/polymer/polymer.html');
@@ -76,7 +77,8 @@
             '<script src="packages/browser/dart.js"></script>'
             '</html>',
       }, [
-        'warning: ${usePolymerHtmlMessage(0)} (web/test.html 1 0)',
+        'warning: ${_usePolymerHtmlMessage(0)} '
+        '(web/test.html 1 0)',
       ]);
 
     _testLinter('missing polymer.html in web/foo', {
@@ -87,7 +89,8 @@
             '<script src="packages/browser/dart.js"></script>'
             '</html>',
       }, [
-        'warning: ${usePolymerHtmlMessage(1)} (web/foo/test.html 1 0)',
+        'warning: ${_usePolymerHtmlMessage(1)} '
+        '(web/foo/test.html 1 0)',
       ]);
 
     _testLinter('missing polymer.html in lib', {
@@ -98,7 +101,8 @@
             '<script src="packages/browser/dart.js"></script>'
             '</html>',
       }, [
-        'warning: ${usePolymerHtmlMessage(2)} (lib/test.html 1 0)',
+        'warning: ${_usePolymerHtmlMessage(2)} '
+        '(lib/test.html 1 0)',
       ]);
 
     _testLinter('missing polymer.html in lib/foo/bar', {
@@ -109,7 +113,8 @@
             '<script src="packages/browser/dart.js"></script>'
             '</html>',
       }, [
-        'warning: ${usePolymerHtmlMessage(4)} (lib/foo/bar/test.html 1 0)',
+        'warning: ${_usePolymerHtmlMessage(4)} '
+        '(lib/foo/bar/test.html 1 0)',
       ]);
 
     _testLinter('missing Dart code', {
@@ -118,7 +123,7 @@
             '<script src="packages/browser/dart.js"></script>'
             '</html>',
       }, [
-        'warning: $USE_INIT_DART',
+        'warning: ${MISSING_INIT_POLYMER.snippet}',
       ]);
 
     _testLinter('nothing to report, experimental with no Dart code', {
@@ -138,13 +143,14 @@
             '<script src="packages/browser/dart.js"></script>'
             '</html>',
       }, [
-        'warning: $NO_DART_SCRIPT_AND_EXPERIMENTAL (web/test.html 1 0)',
+        'warning: ${NO_DART_SCRIPT_AND_EXPERIMENTAL.snippet} '
+        '(web/test.html 1 0)',
       ]);
 
     _testLinter('missing Dart code and polymer.html', {
         'a|web/test.html': '<!DOCTYPE html><html></html>',
       }, [
-        'warning: $USE_INIT_DART',
+        'warning: ${MISSING_INIT_POLYMER.snippet}',
       ]);
   });
 
@@ -194,9 +200,9 @@
     _testLinter('in web', {
         'a|web/test.html': '<html></html>',
       }, [
-        'warning: Unexpected start tag (html). Expected DOCTYPE. '
-        '(web/test.html 0 0)',
-        'warning: $USE_INIT_DART',
+        'warning: (from html5lib) Unexpected start tag (html). '
+        'Expected DOCTYPE. (web/test.html 0 0)',
+        'warning: ${MISSING_INIT_POLYMER.snippet}',
       ]);
 
     _testLinter('in lib', {
@@ -214,7 +220,7 @@
       }, [
         'warning: duplicate definition for custom tag "x-a". '
         '(lib/test.html 2 0)',
-        'warning: duplicate definition for custom tag "x-a"  '
+        'warning: duplicate definition for custom tag "x-a". '
         '(second definition). (lib/test.html 3 0)'
       ]);
 
@@ -230,7 +236,7 @@
       }, [
         'warning: duplicate definition for custom tag "x-a". '
         '(lib/b.html 2 0)',
-        'warning: duplicate definition for custom tag "x-a"  '
+        'warning: duplicate definition for custom tag "x-a". '
         '(second definition). (lib/test.html 2 0)'
       ]);
 
@@ -257,7 +263,7 @@
       }, [
         'warning: duplicate definition for custom tag "x-a". '
         '(package:b/b.html 2 0)',
-        'warning: duplicate definition for custom tag "x-a"  '
+        'warning: duplicate definition for custom tag "x-a". '
         '(second definition). (lib/test.html 2 0)'
       ]);
   });
@@ -281,7 +287,7 @@
           </html>'''.replaceAll('          ', ''),
     }, [
       'warning: <element> elements are not supported, use <polymer-element>'
-      ' instead (lib/test.html 1 0)'
+      ' instead. (lib/test.html 1 0)'
     ]);
 
   _testLinter('do not nest <polymer-element>', {
@@ -309,7 +315,7 @@
           </polymer-element>
           </html>'''.replaceAll('          ', ''),
     }, [
-      'error: $NO_IMPORT_WITHIN_ELEMENT (lib/test.html 3 2)'
+      'error: ${NO_IMPORT_WITHIN_ELEMENT.snippet} (lib/test.html 3 2)'
     ]);
 
   _testLinter('need a name for <polymer-element>', {
@@ -329,7 +335,7 @@
           </html>'''.replaceAll('          ', ''),
     }, [
       'error: Invalid name "a". Custom element names must have at least one'
-      ' dash and can\'t be any of the following names: annotation-xml, '
+      ' dash (-) and can\'t be any of the following names: annotation-xml, '
       'color-profile, font-face, font-face-src, font-face-uri, '
       'font-face-format, font-face-name, missing-glyph. (lib/test.html 2 0)'
     ]);
@@ -507,15 +513,15 @@
     _testLinter('tag exists (x-tag)', {
         'a|lib/test.html': '<x-foo></x-foo>',
       }, [
-        'warning: definition for Polymer element with tag name "x-foo" not '
-        'found. (lib/test.html 0 0)'
+        'warning: custom element with name "x-foo" not found. '
+        '(lib/test.html 0 0)'
       ]);
 
     _testLinter('tag exists (type extension)', {
         'a|lib/test.html': '<div is="x-foo"></div>',
       }, [
-        'warning: definition for Polymer element with tag name "x-foo" not '
-        'found. (lib/test.html 0 0)'
+        'warning: custom element with name "x-foo" not found. '
+        '(lib/test.html 0 0)'
       ]);
     
     _testLinter('tag exists (internally defined in code)', {
@@ -625,6 +631,67 @@
         'warning: custom element "x-a" extends from "li". Did you mean '
         'to write <li is="x-a">? (lib/test.html 2 0)'
       ]);
+
+    _testLinter('FOUC warning works', {
+        'a|lib/a.html': '''
+            <html><body>
+              <link rel="import" href="../../packages/polymer/polymer.html">
+              <polymer-element name="my-element" noscript></polymer-element>
+              <my-element>hello!</my-element>
+            </body></html>
+            ''',
+        'a|lib/b.html': '''
+            <html><body>
+              <link rel="import" href="../../packages/polymer/polymer.html">
+              <polymer-element name="my-element" noscript></polymer-element>
+              <div><my-element>hello!</my-element></div>
+            </body></html>
+            ''',
+        'a|lib/c.html': '''
+            <html unresolved><body>
+              <link rel="import" href="../../packages/polymer/polymer.html">
+              <polymer-element name="my-element" noscript></polymer-element>
+              <my-element>hello!</my-element>
+            </body></html>
+            '''
+      }, [
+        'warning: ${POSSIBLE_FUOC.snippet} (lib/a.html 3 14)',
+        'warning: ${POSSIBLE_FUOC.snippet} (lib/b.html 3 19)',
+        'warning: ${POSSIBLE_FUOC.snippet} (lib/c.html 3 14)',
+      ]);
+
+    _testLinter('FOUC, no false positives.', {
+        'a|lib/a.html': '''
+            <html><body><div unresolved>
+              <link rel="import" href="../../packages/polymer/polymer.html">
+              <polymer-element name="my-element" noscript></polymer-element>
+              <my-element>hello!</my-element>
+            </div></body></html>
+            ''',
+        'a|lib/b.html': '''
+            <html><body unresolved>
+              <link rel="import" href="../../packages/polymer/polymer.html">
+              <polymer-element name="my-element" noscript></polymer-element>
+              <my-element>hello!</my-element>
+            </body></html>
+            ''',
+        'a|lib/c.html': '''
+            <html><body>
+              <link rel="import" href="../../packages/polymer/polymer.html">
+              <polymer-element name="my-element" noscript></polymer-element>
+              <polymer-element name="foo-element">
+                <template><my-element>hello!</my-element></template>
+              </polymer-element>
+            </body></html>
+            ''',
+        'a|lib/d.html': '''
+            <html><body>
+              <link rel="import" href="../../packages/polymer/polymer.html">
+              <polymer-element name="my-element" noscript></polymer-element>
+              <my-element></my-element>
+            </body></html>
+            ''',
+      }, []);
   });
 
   group('custom attributes', () {
@@ -662,23 +729,40 @@
           '</html>',
       }, {
         'a|web/test.html._buildLogs.1':
-          '[{'
+          '{"polymer#3":[{'
             '"level":"Warning",'
-            '"message":${JSON.encode(const HtmlEscape().convert(
-                usePolymerHtmlMessage(0)))},'
+            '"message":{'
+               '"id":"polymer#3",'
+               '"snippet":"${_usePolymerHtmlMessage(0).replaceAll('"','\\"')}"'
+            '},'
             '"span":{'
-              '"location":"web/test.html:2:1",'
-              '"text":'
-                '"${const HtmlEscape().convert('<polymer-element name="x-a">')}"'
+              '"start":{'
+                '"url":"web/test.html",'
+                '"offset":22,'
+                '"line":1,'
+                '"column":0'
+              '},'
+              '"end":{'
+                '"url":"web/test.html",'
+                '"offset":50,'
+                '"line":1,'
+                '"column":28'
+              '},'
+              '"text":"<polymer-element name=\\"x-a\\">"'
             '}'
-          '}]',
+          '}]}',
     }, [
         // Logs should still make it to barback too.
-        'warning: ${usePolymerHtmlMessage(0)} (web/test.html 1 0)',
+        'warning: ${_usePolymerHtmlMessage(0)} (web/test.html 1 0)',
     ]);
   });
 }
 
+_usePolymerHtmlMessage(int i) {
+  var prefix = '../' * i;
+  return USE_POLYMER_HTML.create({'reachOutPrefix': prefix}).snippet;
+}
+
 _testLinter(String name, Map inputFiles, List outputMessages,
     [bool solo = false]) {
   var outputFiles = {};
diff --git a/pkg/polymer/test/build/log_injector_test.dart b/pkg/polymer/test/build/log_injector_test.dart
index 34f78eb..1f4f5ac 100644
--- a/pkg/polymer/test/build/log_injector_test.dart
+++ b/pkg/polymer/test/build/log_injector_test.dart
@@ -14,11 +14,38 @@
   useHtmlConfiguration();
 
   setUp(() => new LogInjector().injectLogs(
-      '''[
-          {"level": "Info", "message": "foo"},
-          {"level": "Warning", "message": "bar"},
-          {"level": "Error", "message": "baz"}
-      ]'''
+      '''{
+        "polymer#0":[{
+            "level":"Info",
+            "message":{"id":"polymer#0","snippet":"foo"}}
+        ],
+        "polymer#1":[{
+            "level":"Info",
+            "message":{"id":"polymer#1","snippet":"foo"},
+            "span":{
+              "start":{
+                "url":"web/test.html",
+                "offset":22,
+                "line":1,
+                "column":0
+              },
+              "end":{
+                "url":"web/test.html",
+                "offset":50,
+                "line":1,
+                "column":28
+              },
+              "text":"<polymer-element name=\\"x-a\\">"
+            }
+          }],
+        "polymer#2":[
+            {"level":"Warning","message":{"id":"polymer#2","snippet":"bar"}},
+            {"level":"Warning","message":{"id":"polymer#2",
+             "snippet":"bar again"}},
+            {"level":"Error","message":{"id":"polymer#2","snippet":"baz1"}}
+        ],
+        "foo#44":[{"level":"Error","message":{"id":"foo#44","snippet":"baz2"}}]
+      }'''
   ));
 
   test('can inject a functioning log widget', () {
@@ -38,7 +65,7 @@
       expect(menuElements[i].classes.contains('active'), false);
       expect(contentElements[i].classes.contains(expectedClasses[i]), true);
       expect(contentElements[i].classes.contains('active'), false);
-      expect(contentElements[i].querySelectorAll('.log').length, 1);
+      expect(contentElements[i].querySelectorAll('.log').length, 2);
     }
 
     // Test clicking each of the tabs.
diff --git a/pkg/polymer/test/build/remove_sourcemap_comment_test.dart b/pkg/polymer/test/build/remove_sourcemap_comment_test.dart
new file mode 100644
index 0000000..44d1f45
--- /dev/null
+++ b/pkg/polymer/test/build/remove_sourcemap_comment_test.dart
@@ -0,0 +1,27 @@
+// 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 polymer.test.build.remove_sourcemap_comment_test;
+
+import 'package:barback/barback.dart';
+import 'package:polymer/src/build/remove_sourcemap_comment.dart';
+import 'package:unittest/compact_vm_config.dart';
+import 'package:unittest/unittest.dart';
+import 'common.dart';
+
+final phases = [[new RemoveSourcemapComment.asPlugin(
+    new BarbackSettings({}, BarbackMode.RELEASE))]];
+
+void main() {
+  useCompactVMConfiguration();
+
+  testPhases('removes sourcemap comments', phases, {
+      'a|web/test.js': '''
+          var i = 0;
+          //# sourceMappingURL=*.map''',
+  }, {
+      'a|web/test.js': '''
+          var i = 0;''',
+  });
+}
diff --git a/pkg/polymer/test/build/script_compactor_test.dart b/pkg/polymer/test/build/script_compactor_test.dart
index 58c6c2f..9d98deb 100644
--- a/pkg/polymer/test/build/script_compactor_test.dart
+++ b/pkg/polymer/test/build/script_compactor_test.dart
@@ -8,6 +8,7 @@
 
 import 'package:code_transformers/tests.dart' show testingDartSdkDirectory;
 import 'package:polymer/src/build/common.dart';
+import 'package:polymer/src/build/messages.dart';
 import 'package:polymer/src/build/script_compactor.dart';
 import 'package:smoke/codegen/generator.dart' show DEFAULT_IMPORTS;
 import 'package:unittest/compact_vm_config.dart';
@@ -504,7 +505,7 @@
       }, {}, [
         'warning: The parameter to @CustomTag seems to be invalid. '
         '(web/a.dart 2 11)',
-        'warning: $NO_INITIALIZERS_ERROR',
+        'warning: ${NO_INITIALIZATION.snippet}',
       ]);
 
   testPhases(
@@ -557,7 +558,7 @@
             '}\n'
             'main(){}',
       }, {}, [
-        'warning: $NO_INITIALIZERS_ERROR',
+        'warning: ${NO_INITIALIZATION.snippet}',
       ]);
 
   testPhases(
diff --git a/pkg/polymer/test/build/unique_message_test.dart b/pkg/polymer/test/build/unique_message_test.dart
new file mode 100644
index 0000000..3a69834
--- /dev/null
+++ b/pkg/polymer/test/build/unique_message_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2014, 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.
+
+/// Tests for some of the utility helper functions used by the compiler.
+library polymer.test.build.messages_test;
+
+import 'dart:mirrors';
+
+import 'package:unittest/unittest.dart';
+import 'package:code_transformers/messages/messages.dart' show Message;
+
+import 'package:code_transformers/src/messages.dart' as p1;
+import 'package:polymer/src/build/messages.dart' as p2;
+
+/// [p1] and [p2] are accessed via mirrors, this comment prevents the analyzer
+/// from complaining about it.
+main() {
+  test('each message id is unique', () {
+    var seen = {};
+    int total = 0;
+    var mirrors = currentMirrorSystem();
+    _check(Symbol libName) {
+      var lib = mirrors.findLibrary(libName);
+      expect(lib, isNotNull);
+      lib.declarations.forEach((symbol, decl) {
+        if (decl is! VariableMirror) return;
+        var field = lib.getField(symbol).reflectee;
+        var name = MirrorSystem.getName(symbol);
+        if (field is! Message) return;
+        var id = field.id;
+        expect(seen.containsKey(id), isFalse, reason: 'Duplicate id `$id`. '
+            'Currently set for both `$name` and `${seen[id]}`.');
+        seen[id] = name;
+        total++;
+      });
+    }
+    _check(#polymer.src.build.messages);
+    _check(#code_transformers.src.messages);
+    expect(seen.length, total);
+  });
+}
diff --git a/pkg/polymer/tool/create_message_details_page.dart b/pkg/polymer/tool/create_message_details_page.dart
new file mode 100644
index 0000000..50d8c26
--- /dev/null
+++ b/pkg/polymer/tool/create_message_details_page.dart
@@ -0,0 +1,263 @@
+// Copyright (c) 2014, 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.
+
+/// Simple script to generate a page summarizing all error messages produces by
+/// the polymer compiler code. The generated code will be placed directly under
+/// the `polymer/lib/src/generated` folder. This script should be invoked from
+/// the root of the polymer package either by doing:
+///
+///    dart tool/create_message_details_page.dart
+///
+/// or
+///
+///    pub run tool/create_message_details_page
+library polymer.tool.create_message_details_page;
+
+import 'dart:io';
+import 'dart:mirrors';
+
+import 'package:code_transformers/messages/messages.dart';
+import 'package:code_transformers/src/messages.dart' as m1; // used via mirrors
+import 'package:observe/src/messages.dart' as m2; // used via mirrors
+import 'package:polymer/src/build/messages.dart' as m3; // used via mirrors
+import 'package:markdown/markdown.dart';
+import 'package:path/path.dart' as path;
+import 'package:args/args.dart';
+
+main(args) {
+  var options = _parseOptions(args);
+  var seen = {};
+  var templates = [];
+  _getMessagesFrom(#polymer.src.build.messages, seen, templates);
+  _getMessagesFrom(#code_transformers.src.messages, seen, templates);
+  _getMessagesFrom(#observe.src.messages, seen, templates);
+
+  templates.sort((a, b) => a.id.compareTo(b.id));
+  var sb = new StringBuffer();
+  bool forSite = options['site'];
+  var out = path.join(path.current, options['out']);
+  var ext = forSite ? '.markdown' : '.html';
+  if (!out.endsWith(ext)) {
+    print('error: expected to have a $ext extension.');
+    exit(1);
+  }
+
+  sb.write(forSite ? _SITE_HEADER : _LOCAL_HEADER);
+
+  var lastPackage = '';
+  for (var t in templates) {
+    if (lastPackage != t.id.package) {
+      lastPackage = t.id.package;
+      var sectionTitle = '## Messages from package `$lastPackage`\n\n----\n\n';
+      sb.write(forSite ? sectionTitle : markdownToHtml(sectionTitle));
+    }
+    _generateMessage(t, forSite, sb);
+  }
+  sb.write(forSite ? '' : _LOCAL_FOOTER);
+  new File(out).writeAsStringSync(sb.toString());
+  print('updated: ${options["out"]}');
+}
+
+final _mirrors = currentMirrorSystem();
+
+_getMessagesFrom(Symbol libName, Map seen, List templates) {
+  var lib = _mirrors.findLibrary(libName);
+  lib.declarations.forEach((symbol, decl) {
+    if (decl is! VariableMirror) return;
+    var template = lib.getField(symbol).reflectee;
+    var name = MirrorSystem.getName(symbol);
+    if (template is! MessageTemplate) return;
+    var id = template.id;
+    if (seen.containsKey(id)) {
+      print('error: duplicate id `$id`. '
+          'Currently set for both `$name` and `${seen[id]}`.');
+    }
+    seen[id] = name;
+    templates.add(template);
+  });
+}
+
+_generateMessage(MessageTemplate template, bool forSite, StringBuffer sb) {
+  var details = template.details == null
+      ? 'No details available' : template.details;
+  var id = template.id;
+  var hashTag = '${id.package}_${id.id}';
+  var title = '### ${template.description} [#${id.id}](#$hashTag)';
+  var body = '\n$details\n\n----\n\n';
+  // We add the anchor inside the <h3> title, otherwise the link doesn't work.
+  if (forSite) {
+    sb..write(title)
+        ..write('\n{: #$hashTag}\n')
+        ..write(body);
+  } else {
+    var html = markdownToHtml('$title$body')
+        .replaceFirst('<h3>', '<h3 id="$hashTag">');
+    sb.write('\n\n$html');
+  }
+}
+
+_parseOptions(args) {
+  var parser = new ArgParser(allowTrailingOptions: true)
+      ..addOption('out', abbr: 'o',
+          defaultsTo: 'lib/src/build/generated/messages.html',
+          help: 'the output file path')
+      ..addFlag('site', abbr: 's', negatable: false,
+          help: 'generate contents for the dartlang.org site')
+      ..addFlag('help', abbr: 'h', negatable: false);
+
+  var options = parser.parse(args);
+  if (options['help']) {
+    var command = Platform.script.path;
+    var relPath = path.relative(command, from: path.current);
+    if (!relPath.startsWith('../')) command = relPath;
+    print('usage: dart $command [-o path_to_output_file] [-s]');
+    print(parser.getUsage());
+    exit(0);
+  }
+  return options;
+}
+
+const _SITE_HEADER = '''
+---
+# WARNING: GENERATED FILE. DO NOT EDIT.
+#
+#   This file was generated automatically from the polymer package.
+#   To regenerate this file, from the top directory of the polymer package run:
+#
+#     dart tool/create_message_details_page.dart -s -o path_to_this_file
+layout: default
+title: "Error Messages"
+subsite: "Polymer.dart"
+description: "Details about error messages from polymer and related packages."
+---
+
+# {{ page.title }}
+
+<style>
+h3 > a {
+  display: none;
+}
+
+h3:hover > a {
+  display: inline;
+}
+
+</style>
+
+
+This page contains a list of error messages produced during `pub build` and `pub
+serve` by transformers in polymer and its related packages. You can find here
+additional details that can often help you figure out how to fix the underlying
+problem.
+
+
+''';
+
+const _LOCAL_HEADER = '''
+<!doctype html>
+<!--
+  This file is autogenerated with polymer/tool/create_message_details_page.dart
+-->
+<html>
+<style>
+@font-face {
+  font-family: 'Montserrat';
+  font-style: normal;
+  font-weight: 400;
+  src: url(https://themes.googleusercontent.com/static/fonts/montserrat/v4/zhcz-_WihjSQC0oHJ9TCYL3hpw3pgy2gAi-Ip7WPMi0.woff) format('woff');
+}
+@font-face {
+  font-family: 'Montserrat';
+  font-style: normal;
+  font-weight: 700;
+  src: url(https://themes.googleusercontent.com/static/fonts/montserrat/v4/IQHow_FEYlDC4Gzy_m8fcnbFhgvWbfSbdVg11QabG8w.woff) format('woff');
+}
+@font-face {
+  font-family: 'Roboto';
+  font-style: normal;
+  font-weight: 300;
+  src: url(https://themes.googleusercontent.com/static/fonts/roboto/v10/Hgo13k-tfSpn0qi1SFdUfbO3LdcAZYWl9Si6vvxL-qU.woff) format('woff');
+}
+@font-face {
+  font-family: 'Roboto';
+  font-style: normal;
+  font-weight: 400;
+  src: url(https://themes.googleusercontent.com/static/fonts/roboto/v10/CrYjSnGjrRCn0pd9VQsnFOvvDin1pK8aKteLpeZ5c0A.woff) format('woff');
+}
+
+body {
+  width: 80vw;
+  margin: 20px;
+  font-family: Roboto, sans-serif;
+}
+
+h2 {
+  font-family: Montserrat, sans-serif;
+  box-sizing: border-box;
+  color: rgb(72, 72, 72);
+  display: block;
+  font-style: normal;
+  font-variant: normal;
+  font-weight: normal;
+}
+
+h3 {
+  font-family: Montserrat, sans-serif;
+  box-sizing: border-box;
+  color: rgb(72, 72, 72);
+  display: block;
+  font-style: normal;
+  font-variant: normal;
+  font-weight: normal;
+}
+
+pre {
+  display: block;
+  padding: 9.5px;
+  margin: 0 0 10px;
+  color: #333;
+  word-break: break-all;
+  word-wrap: break-word;
+  background-color: #f5f5f5;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+}
+
+code {
+   font-family: Menlo,Monaco,Consolas,"Courier New",monospace;
+   box-sizing: border-box;
+   padding: 0;
+   font-size: 90%;
+   color: #0084c5;
+   white-space: nowrap;
+   border-radius: 4px;
+   background-color: #f9f2f4;
+}
+
+pre code {
+   white-space: inherit;
+   color: inherit;
+   background-color: inherit;
+}
+
+a {
+  color: rgb(42, 100, 150);
+}
+
+h3 > a {
+  display: none;
+  font-size: 0.8em;
+}
+
+h3:hover > a {
+  display: inline;
+}
+</style>
+<body>
+''';
+
+const _LOCAL_FOOTER = '''
+</body>
+</html>
+''';
diff --git a/runtime/bin/bin.gypi b/runtime/bin/bin.gypi
index d09d94f..92939b8 100644
--- a/runtime/bin/bin.gypi
+++ b/runtime/bin/bin.gypi
@@ -165,6 +165,13 @@
             ],
           },
         }],
+        ['OS=="android"', {
+          'link_settings': {
+            'libraries': [
+              '-ldl',
+            ],
+          },
+        }],
       ],
     },
     {
@@ -285,14 +292,6 @@
             'libraries': [ '-lws2_32.lib', '-lRpcrt4.lib' ],
           },
         }],
-        # Normally, we should not have flags conditional on OS==android, but
-        # here we must because gen_snapshot is compiled for the host during
-        # and Android cross-build, and these flags are not set anywhere else.
-        ['OS=="android"', {
-          'link_settings': {
-            'libraries': [ '-ldl', '-lrt' ],
-          },
-        }]
       ],
     },
     {
diff --git a/runtime/bin/builtin.dart b/runtime/bin/builtin.dart
index bc1b362..155dc1f 100644
--- a/runtime/bin/builtin.dart
+++ b/runtime/bin/builtin.dart
@@ -27,128 +27,17 @@
 
 _getPrintClosure() => _print;
 
-
-void _logResolution(String msg) {
-  final enabled = false;
-  if (enabled) {
-    _Logger._printString(msg);
-  }
-}
-
+const _logBuiltin = false;
 
 // Corelib 'Uri.base' implementation.
 Uri _uriBase() {
   return new Uri.file(Directory.current.path + "/");
 }
 
+
 _getUriBaseClosure() => _uriBase;
 
 
-var _httpRequestResponseCode = 0;
-var _httpRequestStatusString;
-var _httpRequestResponse;
-
-_getHttpRequestResponseCode() => _httpRequestResponseCode;
-_getHttpRequestStatusString() => _httpRequestStatusString;
-_getHttpRequestResponse() => _httpRequestResponse;
-
-void _requestCompleted(List<int> data, HttpClientResponse response) {
-  _httpRequestResponseCode = response.statusCode;
-  _httpRequestStatusString = '${response.statusCode} ${response.reasonPhrase}';
-  _httpRequestResponse = null;
-  if (response.statusCode != 200 ||
-      (response.headers.contentType != null &&
-       response.headers.contentType.mimeType == 'application/json')) {
-    return;
-  }
-  _httpRequestResponse = data;
-}
-
-
-void _requestFailed(error) {
-  _httpRequestResponseCode = 0;
-  _httpRequestStatusString = error.toString();
-  _httpRequestResponse = null;
-}
-
-
-void _makeHttpRequest(String uri) {
-  var _client = new HttpClient();
-  _httpRequestResponseCode = 0;
-  _httpRequestStatusString = null;
-  _httpRequestResponse = null;
-  try {
-    Uri requestUri = Uri.parse(uri);
-    _client.getUrl(requestUri)
-        .then((HttpClientRequest request) {
-          request.persistentConnection = false;
-          return request.close();
-        })
-        .then((HttpClientResponse response) {
-          // Only create a ByteBuilder, if multiple chunks are received.
-          var builder = new BytesBuilder(copy: false);
-          response.listen(
-            builder.add,
-            onDone: () {
-              _requestCompleted(builder.takeBytes(), response);
-              // Close the client to stop any timers currently held alive.
-              _client.close();
-            },
-            onError: _requestFailed);
-        }).catchError((error) {
-          _requestFailed(error);
-        });
-  } catch (error) {
-    _requestFailed(error);
-  }
-  // TODO(floitsch): remove this line. It's just here to push an event on the
-  // event loop so that we invoke the scheduled microtasks. Also remove the
-  // import of dart:async when this line is not needed anymore.
-  Timer.run(() {});
-}
-
-
-void _httpGet(Uri uri, String libraryUri, loadCallback(List<int> data)) {
-  var httpClient = new HttpClient();
-  try {
-    httpClient.getUrl(uri)
-      .then((HttpClientRequest request) {
-        request.persistentConnection = false;
-        return request.close();
-      })
-      .then((HttpClientResponse response) {
-        // Only create a ByteBuilder if multiple chunks are received.
-        var builder = new BytesBuilder(copy: false);
-        response.listen(
-            builder.add,
-            onDone: () {
-              if (response.statusCode != 200) {
-                var msg = 'Failure getting $uri: '
-                          '${response.statusCode} ${response.reasonPhrase}';
-                _asyncLoadError(uri.toString(), libraryUri, msg);
-              }
-
-              List<int> data = builder.takeBytes();
-              httpClient.close();
-              loadCallback(data);
-            },
-            onError: (error) {
-              _asyncLoadError(uri.toString(), libraryUri, error);
-            });
-      })
-      .catchError((error) {
-        _asyncLoadError(uri.toString(), libraryUri, error);
-      });
-  } catch (error) {
-    _asyncLoadError(uri.toString(), libraryUri, error);
-  }
-  // TODO(floitsch): remove this line. It's just here to push an event on the
-  // event loop so that we invoke the scheduled microtasks. Also remove the
-  // import of dart:async when this line is not needed anymore.
-  Timer.run(() {});
-}
-
-
 // Are we running on Windows?
 var _isWindows = false;
 var _workingWindowsDrivePrefix;
@@ -216,7 +105,9 @@
   cwd = _sanitizeWindowsPath(cwd);
   cwd = _enforceTrailingSlash(cwd);
   _workingDirectoryUri = new Uri(scheme: 'file', path: cwd);
-  _logResolution('# Working Directory: $cwd');
+  if (_logBuiltin) {
+    _print('# Working Directory: $cwd');
+  }
 }
 
 
@@ -229,7 +120,9 @@
   } else {
     _packageRoot = _workingDirectoryUri.resolveUri(new Uri.file(packageRoot));
   }
-  _logResolution('# Package root: $packageRoot -> $_packageRoot');
+  if (_logBuiltin) {
+    _print('# Package root: $packageRoot -> $_packageRoot');
+  }
 }
 
 
@@ -248,50 +141,57 @@
     // resolve it against the working directory.
     _entryPointScript = _workingDirectoryUri.resolve(scriptName);
   }
-  _logResolution('# Resolved entry point to: $_entryPointScript');
+  if (_logBuiltin) {
+    _print('# Resolved entry point to: $_entryPointScript');
+  }
   return _entryPointScript.toString();
 }
 
 const _DART_EXT = 'dart-ext:';
 
 String _resolveUri(String base, String userString) {
-  _logResolution('# Resolving: $userString from $base');
+  if (_logBuiltin) {
+    _print('# Resolving: $userString from $base');
+  }
   var baseUri = Uri.parse(base);
   if (userString.startsWith(_DART_EXT)) {
     var uri = userString.substring(_DART_EXT.length);
     return '$_DART_EXT${baseUri.resolve(uri)}';
   } else {
-    return '${baseUri.resolve(userString)}';
+    return baseUri.resolve(userString).toString();
   }
 }
 
 
-// Returns either a file path or a URI starting with http:, as a String.
+// Returns either a file path or a URI starting with http[s]:, as a String.
 String _filePathFromUri(String userUri) {
   var uri = Uri.parse(userUri);
-  _logResolution('# Getting file path from: $uri');
+  if (_logBuiltin) {
+    _print('# Getting file path from: $uri');
+  }
 
   var path;
   switch (uri.scheme) {
     case '':
     case 'file':
       return uri.toFilePath();
-      break;
     case 'package':
-      return _filePathFromPackageUri(uri);
-      break;
+      return _filePathFromUri(_resolvePackageUri(uri).toString());
     case 'http':
+    case 'https':
       return uri.toString();
     default:
       // Only handling file, http, and package URIs
       // in standalone binary.
-      _logResolution('# Unknown scheme (${uri.scheme}) in $uri.');
+      if (_logBuiltin) {
+        _print('# Unknown scheme (${uri.scheme}) in $uri.');
+      }
       throw 'Not a known scheme: $uri';
   }
 }
 
 
-String _filePathFromPackageUri(Uri uri) {
+Uri _resolvePackageUri(Uri uri) {
   if (!uri.host.isEmpty) {
     var path = '${uri.host}${uri.path}';
     var right = 'package:$path';
@@ -304,27 +204,71 @@
   var packageRoot = _packageRoot == null ?
                     _entryPointScript.resolve('packages/') :
                     _packageRoot;
-  return _filePathFromUri(packageRoot.resolve(uri.path).toString());
+  return packageRoot.resolve(uri.path);
 }
 
 
 int _numOutstandingLoadRequests = 0;
+var _httpClient;
+
+void _httpGet(Uri uri, String libraryUri, loadCallback(List<int> data)) {
+  if (_httpClient == null) {
+    _httpClient = new HttpClient()..maxConnectionsPerHost = 6;
+  }
+  _httpClient.getUrl(uri)
+    .then((HttpClientRequest request) => request.close())
+    .then((HttpClientResponse response) {
+      var builder = new BytesBuilder(copy: false);
+      response.listen(
+          builder.add,
+          onDone: () {
+            if (response.statusCode != 200) {
+              var msg = 'Failure getting $uri: '
+                        '${response.statusCode} ${response.reasonPhrase}';
+              _asyncLoadError(uri.toString(), libraryUri, msg);
+            }
+            loadCallback(builder.takeBytes());
+          },
+          onError: (error) {
+            _asyncLoadError(uri.toString(), libraryUri, error);
+          });
+    })
+    .catchError((error) {
+      _asyncLoadError(uri.toString(), libraryUri, error);
+    });
+  // TODO(floitsch): remove this line. It's just here to push an event on the
+  // event loop so that we invoke the scheduled microtasks. Also remove the
+  // import of dart:async when this line is not needed anymore.
+  Timer.run(() {});
+}
+
 
 void _signalDoneLoading() native "Builtin_DoneLoading";
 
-void _loadScriptCallback(String uri, List<int> data) native "Builtin_LoadScript";
+void _cleanup() {
+  if (_httpClient != null) {
+    _httpClient.close();
+    _httpClient = null;
+  }
+}
 
-void _loadScript(String uri, List<int> data) {
+void _loadScriptCallback(int tag, String uri, String libraryUri, List<int> data)
+    native "Builtin_LoadScript";
+
+void _loadScript(int tag, String uri, String libraryUri, List<int> data) {
   // TODO: Currently a compilation error while loading the script is
   // fatal for the isolate. _loadScriptCallback() does not return and
   // the _numOutstandingLoadRequests counter remains out of sync.
-  _loadScriptCallback(uri, data);
+  _loadScriptCallback(tag, uri, libraryUri, data);
   assert(_numOutstandingLoadRequests > 0);
   _numOutstandingLoadRequests--;
-  _logResolution("native Builtin_LoadScript($uri) completed, "
-                 "${_numOutstandingLoadRequests} requests remaining");
+  if (_logBuiltin) {
+    _print("native Builtin_LoadScript($uri) completed, "
+           "${_numOutstandingLoadRequests} requests remaining");
+  }
   if (_numOutstandingLoadRequests == 0) {
     _signalDoneLoading();
+    _cleanup();
   }
 }
 
@@ -334,73 +278,64 @@
 
 void _asyncLoadError(uri, libraryUri, error) {
   assert(_numOutstandingLoadRequests > 0);
-  _logResolution("_asyncLoadError($uri), error: $error");
+  if (_logBuiltin) {
+    _print("_asyncLoadError($uri), error: $error");
+  }
   _numOutstandingLoadRequests--;
   _asyncLoadErrorCallback(uri, libraryUri, error);
   if (_numOutstandingLoadRequests == 0) {
     _signalDoneLoading();
+    _cleanup();
   }
 }
 
 
-// Asynchronously loads script data (source or snapshot) through
-// an http or file uri.
-_loadDataAsync(String uri) {
-  uri = _resolveScriptUri(uri);
-  Uri sourceUri = Uri.parse(uri);
+// Create a Uri of 'userUri'. If the input uri is a package uri, then the
+// package uri is resolved.
+Uri _createUri(String userUri) {
+  var uri = Uri.parse(userUri);
+  if (_logBuiltin) {
+    _print('# Creating uri for: $uri');
+  }
+
+  switch (uri.scheme) {
+    case '':
+    case 'file':
+    case 'http':
+    case 'https':
+      return uri;
+    case 'package':
+      return _resolvePackageUri(uri);
+    default:
+      // Only handling file, http[s], and package URIs
+      // in standalone binary.
+      if (_logBuiltin) {
+        _print('# Unknown scheme (${uri.scheme}) in $uri.');
+      }
+      throw 'Not a known scheme: $uri';
+  }
+}
+
+
+// Asynchronously loads script data through a http[s] or file uri.
+_loadDataAsync(int tag, String uri, String libraryUri) {
+  if (tag == null) {
+    uri = _resolveScriptUri(uri);
+  }
+  Uri resourceUri = _createUri(uri);
   _numOutstandingLoadRequests++;
-  _logResolution("_loadDataAsync($uri), "
-                 "${_numOutstandingLoadRequests} requests outstanding");
-  if (sourceUri.scheme == 'http') {
-    _httpGet(sourceUri, null, (data) {
-      _loadScript(uri, data);
+  if (_logBuiltin) {
+    _print("_loadDataAsync($uri), "
+           "${_numOutstandingLoadRequests} requests outstanding");
+  }
+  if ((resourceUri.scheme == 'http') || (resourceUri.scheme == 'https')) {
+    _httpGet(resourceUri, libraryUri, (data) {
+      _loadScript(tag, uri, libraryUri, data);
     });
   } else {
-    var sourceFile = new File(_filePathFromUri(uri));
+    var sourceFile = new File(resourceUri.toFilePath());
     sourceFile.readAsBytes().then((data) {
-      _loadScript(uri, data);
-    },
-    onError: (e) {
-      _asyncLoadError(uri, null, e);
-    });
-  }
-}
-
-
-void _loadLibrarySourceCallback(tag, uri, libraryUri, text)
-    native "Builtin_LoadLibrarySource";
-
-void _loadLibrarySource(tag, uri, libraryUri, text) {
-  // TODO: Currently a compilation error while loading the library is
-  // fatal for the isolate. _loadLibraryCallback() does not return and
-  // the _numOutstandingLoadRequests counter remains out of sync.
-  _loadLibrarySourceCallback(tag, uri, libraryUri, text);
-  assert(_numOutstandingLoadRequests > 0);
-  _numOutstandingLoadRequests--;
-  _logResolution("native Builtin_LoadLibrarySource($uri) completed, "
-                 "${_numOutstandingLoadRequests} requests remaining");
-  if (_numOutstandingLoadRequests == 0) {
-    _signalDoneLoading();
-  }
-}
-
-
-// Asynchronously loads source code through an http or file uri.
-_loadSourceAsync(int tag, String uri, String libraryUri) {
-  var filePath = _filePathFromUri(uri);
-  Uri sourceUri = Uri.parse(filePath);
-  _numOutstandingLoadRequests++;
-  _logResolution("_loadLibrarySource($uri), "
-                 "${_numOutstandingLoadRequests} requests outstanding");
-  if (sourceUri.scheme == 'http') {
-    _httpGet(sourceUri, libraryUri, (data) {
-      var text = UTF8.decode(data);
-      _loadLibrarySource(tag, uri, libraryUri, text);
-    });
-  } else {
-    var sourceFile = new File(filePath);
-    sourceFile.readAsString().then((text) {
-      _loadLibrarySource(tag, uri, libraryUri, text);
+      _loadScript(tag, uri, libraryUri, data);
     },
     onError: (e) {
       _asyncLoadError(uri, libraryUri, e);
@@ -408,7 +343,6 @@
   }
 }
 
-
 // Returns the directory part, the filename part, and the name
 // of a native extension URL as a list [directory, filename, name].
 // The directory part is either a file system path or an HTTP(S) URL.
@@ -447,8 +381,9 @@
   } else if (Platform.isWindows) {
     filename = '$name.dll';
   } else {
-    _logResolution(
-        'Native extensions not supported on ${Platform.operatingSystem}');
+    if (_logBuiltin) {
+      _print('Native extensions not supported on ${Platform.operatingSystem}');
+    }
     throw 'Native extensions not supported on ${Platform.operatingSystem}';
   }
 
diff --git a/runtime/bin/builtin_natives.cc b/runtime/bin/builtin_natives.cc
index 311955e2..b1ae667 100644
--- a/runtime/bin/builtin_natives.cc
+++ b/runtime/bin/builtin_natives.cc
@@ -64,8 +64,7 @@
   V(File_GetType, 2)                                                           \
   V(File_AreIdentical, 2)                                                      \
   V(Logger_PrintString, 1)                                                     \
-  V(Builtin_LoadScript, 2)                                                     \
-  V(Builtin_LoadLibrarySource, 4)                                              \
+  V(Builtin_LoadScript, 4)                                                     \
   V(Builtin_AsyncLoadError, 3)                                                 \
   V(Builtin_DoneLoading, 0)                                                    \
 
diff --git a/runtime/bin/dartutils.cc b/runtime/bin/dartutils.cc
index 8b16ab3..c2eb2e0 100644
--- a/runtime/bin/dartutils.cc
+++ b/runtime/bin/dartutils.cc
@@ -243,112 +243,6 @@
   *error_msg = msg
 
 
-Dart_Handle MakeHttpRequest(Dart_Handle uri, Dart_Handle builtin_lib,
-                            uint8_t** buffer, intptr_t* buffer_len) {
-  const intptr_t HttpResponseCodeOK = 200;
-  ASSERT(buffer != NULL);
-  ASSERT(buffer_len != NULL);
-  ASSERT(!Dart_HasLivePorts());
-
-  // MakeHttpRequest uses the event loop (Dart_RunLoop) to handle the
-  // asynchronous request. This interferes with the use of Dart_RunLoop
-  // for asynchronous loading.
-  ASSERT(!Dart_IsVMFlagSet("load_async"));
-
-  SingleArgDart_Invoke(builtin_lib, "_makeHttpRequest", uri);
-  // Run until all ports to isolate are closed.
-  Dart_Handle result = Dart_RunLoop();
-  if (Dart_IsError(result)) {
-    return result;
-  }
-  result = Dart_Invoke(builtin_lib,
-                       DartUtils::NewString("_getHttpRequestResponseCode"),
-                       0,
-                       NULL);
-  if (Dart_IsError(result)) {
-    return result;
-  }
-  int64_t responseCode = DartUtils::GetIntegerValue(result);
-  if (responseCode != HttpResponseCodeOK) {
-    // Return error.
-    Dart_Handle responseStatus =
-        Dart_Invoke(builtin_lib,
-                    DartUtils::NewString("_getHttpRequestStatusString"),
-                    0,
-                    NULL);
-    if (Dart_IsError(responseStatus)) {
-      return responseStatus;
-    }
-    if (Dart_IsNull(responseStatus)) {
-      return Dart_NewApiError("HTTP error.");
-    }
-    return Dart_NewApiError(DartUtils::GetStringValue(responseStatus));
-  }
-  Dart_Handle response =
-      Dart_Invoke(builtin_lib, DartUtils::NewString("_getHttpRequestResponse"),
-                  0, NULL);
-  if (Dart_IsError(response)) {
-    return response;
-  }
-  if (Dart_IsString(response)) {
-    // Received response as string.
-    uint8_t* responseString = NULL;
-    intptr_t responseStringLength;
-    Dart_Handle r = Dart_StringToUTF8(response, &responseString,
-                                      &responseStringLength);
-    if (Dart_IsError(r)) {
-      *buffer = NULL;
-      *buffer_len = 0;
-      return r;
-    }
-    // Get payload as bytes.
-    *buffer_len = responseStringLength;
-    *buffer = reinterpret_cast<uint8_t*>(malloc(responseStringLength));
-    memmove(*buffer, responseString, responseStringLength);
-  } else {
-    // Received response as list of bytes.
-    ASSERT(Dart_IsList(response));
-    // Query list length.
-    result = Dart_ListLength(response, buffer_len);
-    if (Dart_IsError(result)) {
-      *buffer_len = 0;
-      *buffer = NULL;
-      return result;
-    }
-    // Get payload as bytes.
-    *buffer = reinterpret_cast<uint8_t*>(malloc(*buffer_len));
-    result = Dart_ListGetAsBytes(response, 0, *buffer, *buffer_len);
-    if (Dart_IsError(result)) {
-      free(*buffer);
-      *buffer_len = 0;
-      *buffer = NULL;
-      return result;
-    }
-  }
-  return result;
-}
-
-
-Dart_Handle DartUtils::ReadStringFromHttp(const char* script_uri) {
-  Dart_Handle uri = NewString(script_uri);
-  if (Dart_IsError(uri)) {
-    return uri;
-  }
-  Dart_Handle builtin_lib =
-      Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
-  uint8_t* buffer;
-  intptr_t bufferLen;
-  Dart_Handle result = MakeHttpRequest(uri, builtin_lib, &buffer, &bufferLen);
-  if (Dart_IsError(result)) {
-    return result;
-  }
-  Dart_Handle str = Dart_NewStringFromUTF8(buffer,
-                                           bufferLen);
-  free(buffer);
-  return str;
-}
-
-
 static const uint8_t* ReadFileFully(const char* filename,
                                     intptr_t* file_len,
                                     const char** error_msg) {
@@ -436,6 +330,22 @@
 }
 
 
+static Dart_Handle LoadDataAsync_Invoke(Dart_Handle tag,
+                                        Dart_Handle url,
+                                        Dart_Handle library_url,
+                                        Dart_Handle builtin_lib) {
+  const int kNumArgs = 3;
+  Dart_Handle dart_args[kNumArgs];
+  dart_args[0] = tag;
+  dart_args[1] = url;
+  dart_args[2] = library_url;
+  return Dart_Invoke(builtin_lib,
+                     DartUtils::NewString("_loadDataAsync"),
+                     kNumArgs,
+                     dart_args);
+}
+
+
 Dart_Handle DartUtils::LibraryTagHandler(Dart_LibraryTag tag,
                                          Dart_Handle library,
                                          Dart_Handle url) {
@@ -470,10 +380,6 @@
     // Resolve the url within the context of the library's URL.
     Dart_Handle builtin_lib =
         Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
-    Dart_Handle library_url = Dart_LibraryUrl(library);
-    if (Dart_IsError(library_url)) {
-      return library_url;
-    }
     return ResolveUri(library_url, url, builtin_lib);
   }
 
@@ -533,32 +439,14 @@
                                      extension_filename,
                                      extension_name,
                                      library);
-  } else {
-    // Handle 'import' or 'part' requests for all other URIs.
-
-    if (Dart_IsVMFlagSet("load_async")) {
-      // Call dart code to read the source code asynchronously.
-      const int kNumArgs = 3;
-      Dart_Handle dart_args[kNumArgs];
-      dart_args[0] = Dart_NewInteger(tag);
-      dart_args[1] = url;
-      dart_args[2] = library_url;
-      return Dart_Invoke(builtin_lib,
-                         NewString("_loadSourceAsync"),
-                         kNumArgs,
-                         dart_args);
-    }
-
-    // Get the file path out of the url.
-    Dart_Handle file_path = DartUtils::FilePathFromUri(url, builtin_lib);
-    if (Dart_IsError(file_path)) {
-      return file_path;
-    }
-    const char* final_path = NULL;
-    Dart_StringToCString(file_path, &final_path);
-    result = DartUtils::LoadSource(library, url, tag, final_path);
-    return result;
   }
+
+  // Handle 'import' or 'part' requests for all other URIs. Call dart code to
+  // read the source code asynchronously.
+  return LoadDataAsync_Invoke(Dart_NewInteger(tag),
+                              url,
+                              library_url,
+                              builtin_lib);
 }
 
 
@@ -586,125 +474,10 @@
 }
 
 
-Dart_Handle DartUtils::LoadScriptHttp(Dart_Handle uri,
-                                      Dart_Handle builtin_lib) {
-  intptr_t len = 0;
-  uint8_t* buffer = NULL;
-  Dart_Handle result = MakeHttpRequest(uri, builtin_lib, &buffer, &len);
-  if (Dart_IsError(result)) {
-    return result;
-  }
-  const uint8_t* payload = buffer;
-  bool is_snapshot = false;
-  payload = SniffForMagicNumber(payload, &len, &is_snapshot);
-  if (is_snapshot) {
-    return Dart_LoadScriptFromSnapshot(payload, len);
-  } else {
-    Dart_Handle source = Dart_NewStringFromUTF8(payload, len);
-    free(buffer);
-    if (Dart_IsError(source)) {
-      return source;
-    }
-    return Dart_LoadScript(uri, source, 0, 0);
-  }
-}
-
-
-Dart_Handle DartUtils::LoadScriptDataAsync(Dart_Handle script_uri,
-                     Dart_Handle builtin_lib) {
-  const int kNumArgs = 1;
-  Dart_Handle dart_args[kNumArgs];
-  dart_args[0] = script_uri;
-  return Dart_Invoke(builtin_lib,
-                     NewString("_loadDataAsync"),
-                     kNumArgs,
-                     dart_args);
-}
-
-
 Dart_Handle DartUtils::LoadScript(const char* script_uri,
                                   Dart_Handle builtin_lib) {
-  if (Dart_IsVMFlagSet("load_async")) {
-    Dart_Handle uri_handle = Dart_NewStringFromCString(script_uri);
-    return LoadScriptDataAsync(uri_handle, builtin_lib);
-  }
-
-  Dart_Handle resolved_script_uri =
-      ResolveScriptUri(NewString(script_uri), builtin_lib);
-  if (Dart_IsError(resolved_script_uri)) {
-    return resolved_script_uri;
-  }
-  // Handle http: requests separately.
-  if (DartUtils::IsHttpSchemeURL(script_uri)) {
-    return LoadScriptHttp(resolved_script_uri, builtin_lib);
-  }
-  Dart_Handle script_path = DartUtils::FilePathFromUri(resolved_script_uri,
-                                                       builtin_lib);
-  if (Dart_IsError(script_path)) {
-    return script_path;
-  }
-  const char* script_path_cstr;
-  Dart_StringToCString(script_path, &script_path_cstr);
-  const char* error_msg = NULL;
-  intptr_t len;
-  const uint8_t* buffer = ReadFileFully(script_path_cstr,
-                                        &len,
-                                        &error_msg);
-  if (buffer == NULL) {
-    return Dart_NewApiError(error_msg);
-  }
-  bool is_snapshot = false;
-  const uint8_t *payload = SniffForMagicNumber(buffer, &len, &is_snapshot);
-  Dart_Handle returnValue;
-  if (is_snapshot) {
-    returnValue = Dart_LoadScriptFromSnapshot(payload, len);
-  } else {
-    Dart_Handle source = Dart_NewStringFromUTF8(buffer, len);
-    if (Dart_IsError(source)) {
-      returnValue = NewError("%s is not a valid UTF-8 script", script_uri);
-    } else {
-      returnValue = Dart_LoadScript(resolved_script_uri, source, 0, 0);
-    }
-  }
-  free(const_cast<uint8_t *>(buffer));
-  return returnValue;
-}
-
-
-// Callback function that gets called from asynchronous script loading code
-// when the data has been read. Loads the script or snapshot into the VM.
-void FUNCTION_NAME(Builtin_LoadScript)(Dart_NativeArguments args) {
-  Dart_Handle resolved_script_uri = Dart_GetNativeArgument(args, 0);
-  Dart_Handle data = Dart_GetNativeArgument(args, 1);
-
-  intptr_t num_bytes = 0;
-  Dart_Handle result = Dart_ListLength(data, &num_bytes);
-  if (Dart_IsError(result)) {
-    Dart_PropagateError(result);
-  }
-
-  uint8_t* buffer = reinterpret_cast<uint8_t*>(malloc(num_bytes));
-  Dart_ListGetAsBytes(data, 0, buffer, num_bytes);
-
-  bool is_snapshot = false;
-  const uint8_t *payload =
-      DartUtils::SniffForMagicNumber(buffer, &num_bytes, &is_snapshot);
-
-  if (is_snapshot) {
-    result = Dart_LoadScriptFromSnapshot(payload, num_bytes);
-  } else {
-    Dart_Handle source = Dart_NewStringFromUTF8(buffer, num_bytes);
-    if (Dart_IsError(source)) {
-      result = DartUtils::NewError("%s is not a valid UTF-8 script",
-                                   resolved_script_uri);
-    } else {
-      result = Dart_LoadScript(resolved_script_uri, source, 0, 0);
-    }
-  }
-  free(const_cast<uint8_t *>(buffer));
-  if (Dart_IsError(result)) {
-    Dart_PropagateError(result);
-  }
+  Dart_Handle uri = Dart_NewStringFromCString(script_uri);
+  return LoadDataAsync_Invoke(Dart_Null(), uri, Dart_Null(), builtin_lib);
 }
 
 
@@ -734,27 +507,71 @@
 
 // Callback function that gets called from dartutils when the library
 // source has been read. Loads the library or part into the VM.
-void FUNCTION_NAME(Builtin_LoadLibrarySource)(Dart_NativeArguments args) {
+void FUNCTION_NAME(Builtin_LoadScript)(Dart_NativeArguments args) {
   Dart_Handle tag_in = Dart_GetNativeArgument(args, 0);
   Dart_Handle resolved_script_uri = Dart_GetNativeArgument(args, 1);
   Dart_Handle library_uri = Dart_GetNativeArgument(args, 2);
-  Dart_Handle sourceText = Dart_GetNativeArgument(args, 3);
+  Dart_Handle source_data = Dart_GetNativeArgument(args, 3);
 
-  int64_t tag = DartUtils::GetIntegerValue(tag_in);
+  Dart_TypedData_Type type = Dart_GetTypeOfExternalTypedData(source_data);
+  bool external = type == Dart_TypedData_kUint8;
+  uint8_t* data = NULL;
+  intptr_t num_bytes;
+  Dart_Handle result = Dart_TypedDataAcquireData(
+      source_data, &type, reinterpret_cast<void**>(&data), &num_bytes);
+  if (Dart_IsError(result)) Dart_PropagateError(result);
 
-  Dart_Handle result;
-  if (tag == Dart_kImportTag) {
-    result = Dart_LoadLibrary(resolved_script_uri, sourceText, 0, 0);
-  } else {
-    ASSERT(tag == Dart_kSourceTag);
-    Dart_Handle library = Dart_LookupLibrary(library_uri);
-    DART_CHECK_VALID(library);
-    result = Dart_LoadSource(library, resolved_script_uri, sourceText, 0, 0);
+  uint8_t* buffer_copy = NULL;
+  if (!external) {
+    // If the buffer is not external, take a copy.
+    buffer_copy = reinterpret_cast<uint8_t*>(malloc(num_bytes));
+    memmove(buffer_copy, data, num_bytes);
+    data = buffer_copy;
   }
+
+  Dart_TypedDataReleaseData(source_data);
+
+  if (Dart_IsNull(tag_in) && Dart_IsNull(library_uri)) {
+    // Entry file. Check for payload and load accordingly.
+    bool is_snapshot = false;
+    const uint8_t *payload =
+        DartUtils::SniffForMagicNumber(data, &num_bytes, &is_snapshot);
+
+    if (is_snapshot) {
+      result = Dart_LoadScriptFromSnapshot(payload, num_bytes);
+    } else {
+      Dart_Handle source = Dart_NewStringFromUTF8(data, num_bytes);
+      if (Dart_IsError(source)) {
+        result = DartUtils::NewError("%s is not a valid UTF-8 script",
+                                     resolved_script_uri);
+      } else {
+        result = Dart_LoadScript(resolved_script_uri, source, 0, 0);
+      }
+    }
+  } else {
+    int64_t tag = DartUtils::GetIntegerValue(tag_in);
+
+    Dart_Handle source = Dart_NewStringFromUTF8(data, num_bytes);
+    if (Dart_IsError(source)) {
+      result = DartUtils::NewError("%s is not a valid UTF-8 script",
+                                   resolved_script_uri);
+    } else {
+      if (tag == Dart_kImportTag) {
+        result = Dart_LoadLibrary(resolved_script_uri, source, 0, 0);
+      } else {
+        ASSERT(tag == Dart_kSourceTag);
+        Dart_Handle library = Dart_LookupLibrary(library_uri);
+        DART_CHECK_VALID(library);
+        result = Dart_LoadSource(library, resolved_script_uri, source, 0, 0);
+      }
+    }
+  }
+
+  if (buffer_copy != NULL) {
+    free(const_cast<uint8_t *>(buffer_copy));
+  }
+
   if (Dart_IsError(result)) {
-    // TODO(hausner): If compilation/loading errors are supposed to
-    // be observable by the program, we need to mark the bad library
-    // with the error instead of propagating it.
     Dart_PropagateError(result);
   }
 }
@@ -773,34 +590,6 @@
 }
 
 
-Dart_Handle DartUtils::LoadSource(Dart_Handle library,
-                                  Dart_Handle url,
-                                  Dart_LibraryTag tag,
-                                  const char* url_string) {
-  bool is_http_scheme_url = DartUtils::IsHttpSchemeURL(url_string);
-  Dart_Handle source;
-  if (is_http_scheme_url) {
-    // Read the file over http.
-    source = DartUtils::ReadStringFromHttp(url_string);
-  } else {
-    // Read the file.
-    source = DartUtils::ReadStringFromFile(url_string);
-  }
-  if (Dart_IsError(source)) {
-    return source;  // source contains the error string.
-  }
-  // The tag is either an import or a source tag.
-  // Load it according to the specified tag.
-  if (tag == Dart_kImportTag) {
-    // Return library object or an error string.
-    return Dart_LoadLibrary(url, source, 0, 0);
-  } else if (tag == Dart_kSourceTag) {
-    return Dart_LoadSource(library, url, source, 0, 0);
-  }
-  return Dart_NewApiError("wrong tag");
-}
-
-
 Dart_Handle DartUtils::PrepareForScriptLoading(const char* package_root,
                                                Dart_Handle builtin_lib) {
   // First ensure all required libraries are available.
@@ -1080,6 +869,137 @@
 }
 
 
+static bool IsHexDigit(char c) {
+  return (('0' <= c) && (c <= '9'))
+      || (('A' <= c) && (c <= 'F'))
+      || (('a' <= c) && (c <= 'f'));
+}
+
+
+static int HexDigitToInt(char c) {
+  if (('0' <= c) && (c <= '9')) return c - '0';
+  if (('A' <= c) && (c <= 'F')) return 10 + (c - 'A');
+  return 10 + (c - 'a');
+}
+
+
+Dart_CObject* CObject::NewBigint(const char* hex_value) {
+  if (hex_value == NULL) {
+    return NULL;
+  }
+  bool neg = false;
+  if (hex_value[0] == '-') {
+    neg = true;
+    hex_value++;
+  }
+  if ((hex_value[0] != '0') ||
+      ((hex_value[1] != 'x') && (hex_value[1] != 'X'))) {
+    return NULL;
+  }
+  hex_value += 2;
+  intptr_t hex_i = strlen(hex_value);  // Terminating byte excluded.
+  if (hex_i == 0) {
+    return NULL;
+  }
+  const int kBitsPerHexDigit = 4;
+  const int kHexDigitsPerDigit = 8;
+  const int kBitsPerDigit = kBitsPerHexDigit * kHexDigitsPerDigit;
+  const intptr_t len = (hex_i + kHexDigitsPerDigit - 1) / kHexDigitsPerDigit;
+  Dart_CObject* cobject = New(Dart_CObject_kBigint);
+  cobject->value.as_bigint.digits = NewUint32Array(len);
+  uint32_t* digits = reinterpret_cast<uint32_t*>(
+      cobject->value.as_bigint.digits->value.as_typed_data.values);
+  intptr_t used = 0;
+  uint32_t digit = 0;
+  intptr_t bit_i = 0;
+  while (--hex_i >= 0) {
+    if (!IsHexDigit(hex_value[hex_i])) {
+      return NULL;
+    }
+    digit += HexDigitToInt(hex_value[hex_i]) << bit_i;
+    bit_i += kBitsPerHexDigit;
+    if (bit_i == kBitsPerDigit) {
+      bit_i = 0;
+      digits[used++] = digit;
+      digit = 0;
+    }
+  }
+  if (bit_i != 0) {
+    digits[used++] = digit;
+  }
+  while ((used > 0) && (digits[used - 1] == 0)) {
+    used--;
+  }
+  cobject->value.as_bigint.used = used;
+  if (used == 0) {
+    neg = false;
+  }
+  cobject->value.as_bigint.neg = neg;
+  return cobject;
+}
+
+
+static char IntToHexDigit(int i) {
+  ASSERT(0 <= i && i < 16);
+  if (i < 10) return static_cast<char>('0' + i);
+  return static_cast<char>('A' + (i - 10));
+}
+
+
+char* CObject::BigintToHexValue(Dart_CObject* bigint) {
+  ASSERT(bigint->type == Dart_CObject_kBigint);
+  const intptr_t used = bigint->value.as_bigint.used;
+  if (used == 0) {
+    const char* zero = "0x0";
+    const size_t len = strlen(zero) + 1;
+    char* hex_value = reinterpret_cast<char*>(malloc(len));
+    strncpy(hex_value, zero, len);
+    return hex_value;
+  }
+  const int kBitsPerHexDigit = 4;
+  const int kHexDigitsPerDigit = 8;
+  const intptr_t kMaxUsed = (kIntptrMax - 4) / kHexDigitsPerDigit;
+  if (used > kMaxUsed) {
+    return NULL;
+  }
+  intptr_t hex_len = (used - 1) * kHexDigitsPerDigit;
+  const uint32_t* digits = reinterpret_cast<uint32_t*>(
+      bigint->value.as_bigint.digits->value.as_typed_data.values);
+  // The most significant digit may use fewer than kHexDigitsPerDigit digits.
+  uint32_t digit = digits[used - 1];
+  ASSERT(digit != 0);  // Value must be clamped.
+  while (digit != 0) {
+    hex_len++;
+    digit >>= kBitsPerHexDigit;
+  }
+  const bool neg = bigint->value.as_bigint.neg;
+  // Add bytes for '0x', for the minus sign, and for the trailing \0 character.
+  const int32_t len = (neg ? 1 : 0) + 2 + hex_len + 1;
+  char* hex_value = reinterpret_cast<char*>(malloc(len));
+  intptr_t pos = len;
+  hex_value[--pos] = '\0';
+  for (intptr_t i = 0; i < (used - 1); i++) {
+    digit = digits[i];
+    for (intptr_t j = 0; j < kHexDigitsPerDigit; j++) {
+      hex_value[--pos] = IntToHexDigit(digit & 0xf);
+      digit >>= kBitsPerHexDigit;
+    }
+  }
+  digit = digits[used - 1];
+  while (digit != 0) {
+    hex_value[--pos] = IntToHexDigit(digit & 0xf);
+    digit >>= kBitsPerHexDigit;
+  }
+  hex_value[--pos] = 'x';
+  hex_value[--pos] = '0';
+  if (neg) {
+    hex_value[--pos] = '-';
+  }
+  ASSERT(pos == 0);
+  return hex_value;
+}
+
+
 Dart_CObject* CObject::NewDouble(double value) {
   Dart_CObject* cobject = New(Dart_CObject_kDouble);
   cobject->value.as_double = value;
@@ -1121,6 +1041,15 @@
 }
 
 
+Dart_CObject* CObject::NewUint32Array(intptr_t length) {
+  Dart_CObject* cobject = New(Dart_CObject_kTypedData, 4*length);
+  cobject->value.as_typed_data.type = Dart_TypedData_kUint32;
+  cobject->value.as_typed_data.length = length;
+  cobject->value.as_typed_data.values = reinterpret_cast<uint8_t*>(cobject + 1);
+  return cobject;
+}
+
+
 Dart_CObject* CObject::NewExternalUint8Array(
     intptr_t length, uint8_t* data, void* peer,
     Dart_WeakPersistentHandleFinalizer callback) {
diff --git a/runtime/bin/dartutils.h b/runtime/bin/dartutils.h
index ed53fab..b87669f 100644
--- a/runtime/bin/dartutils.h
+++ b/runtime/bin/dartutils.h
@@ -118,20 +118,12 @@
   static void WriteFile(const void* buffer, intptr_t num_bytes, void* stream);
   static void CloseFile(void* stream);
   static bool EntropySource(uint8_t* buffer, intptr_t length);
-
   static Dart_Handle ReadStringFromFile(const char* filename);
-  static Dart_Handle ReadStringFromHttp(const char* filename);
   static Dart_Handle LibraryTagHandler(Dart_LibraryTag tag,
                                        Dart_Handle library,
                                        Dart_Handle url);
   static Dart_Handle LoadScript(const char* script_uri,
                                 Dart_Handle builtin_lib);
-  static Dart_Handle LoadScriptHttp(Dart_Handle script_uri,
-                                    Dart_Handle builtin_lib);
-  static Dart_Handle LoadSource(Dart_Handle library,
-                                Dart_Handle url,
-                                Dart_LibraryTag tag,
-                                const char* filename);
   static Dart_Handle PrepareForScriptLoading(const char* package_root,
                                              Dart_Handle builtin_lib);
 
@@ -188,9 +180,6 @@
                                 Dart_Handle url,
                                 Dart_Handle builtin_lib);
 
-  static Dart_Handle LoadScriptDataAsync(Dart_Handle script_uri,
-                                         Dart_Handle builtin_lib);
-
   // Sniffs the specified text_buffer to see if it contains the magic number
   // representing a script snapshot. If the text_buffer is a script snapshot
   // the return value is an updated pointer to the text_buffer pointing past
@@ -279,12 +268,14 @@
   static Dart_CObject* NewInt32(int32_t value);
   static Dart_CObject* NewInt64(int64_t value);
   static Dart_CObject* NewIntptr(intptr_t value);
-  // TODO(sgjesse): Add support for kBigint.
+  static Dart_CObject* NewBigint(const char* hex_value);
+  static char* BigintToHexValue(Dart_CObject* bigint);
   static Dart_CObject* NewDouble(double value);
   static Dart_CObject* NewString(intptr_t length);
   static Dart_CObject* NewString(const char* str);
   static Dart_CObject* NewArray(intptr_t length);
   static Dart_CObject* NewUint8Array(intptr_t length);
+  static Dart_CObject* NewUint32Array(intptr_t length);
   static Dart_CObject* NewExternalUint8Array(
       intptr_t length, uint8_t* data, void* peer,
       Dart_WeakPersistentHandleFinalizer callback);
@@ -427,11 +418,33 @@
 
 class CObjectBigint : public CObject {
  public:
-  DECLARE_COBJECT_CONSTRUCTORS(Bigint)
+  // DECLARE_COBJECT_CONSTRUCTORS(Bigint) would miss hex_value_ initialization.
+  explicit CObjectBigint(Dart_CObject *cobject) : CObject(cobject) {
+    ASSERT(type() == Dart_CObject_kBigint);
+    cobject_ = cobject;
+    hex_value_ = NULL;
+  }
+  explicit CObjectBigint(CObject* cobject) : CObject() {
+    ASSERT(cobject != NULL);
+    ASSERT(cobject->type() == Dart_CObject_kBigint);
+    cobject_ = cobject->AsApiCObject();
+    hex_value_ = NULL;
+  }
 
-  char* Value() const { return cobject_->value.as_bigint; }
+  char* Value() {
+    if (hex_value_ == NULL) {
+      hex_value_ = BigintToHexValue(cobject_);
+    }
+    ASSERT(hex_value_ != NULL);
+    return hex_value_;
+  }
+
+  ~CObjectBigint() {
+    free(hex_value_);
+  }
 
  private:
+  char* hex_value_;
   DISALLOW_COPY_AND_ASSIGN(CObjectBigint);
 };
 
diff --git a/runtime/bin/dbg_connection_android.h b/runtime/bin/dbg_connection_android.h
index c1c16c5..591ee9f 100644
--- a/runtime/bin/dbg_connection_android.h
+++ b/runtime/bin/dbg_connection_android.h
@@ -28,7 +28,7 @@
   static int wakeup_fds_[2];
 
   // File descriptor for the polling queue.
-  static int epoll_fd_;
+  static intptr_t epoll_fd_;
 };
 
 }  // namespace bin
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index 637e1c0..ff2d3b8 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -351,11 +351,17 @@
   if (Dart_IsError(file_path)) {
     return file_path;
   }
-
-  return DartUtils::LoadSource(library,
-                               url,
-                               tag,
-                               DartUtils::GetStringValue(file_path));
+  const char* raw_path = DartUtils::GetStringValue(file_path);
+  Dart_Handle source = DartUtils::ReadStringFromFile(raw_path);
+  if (Dart_IsError(source)) {
+    return source;
+  }
+  if (tag == Dart_kImportTag) {
+    return Dart_LoadLibrary(url, source, 0, 0);
+  } else {
+    ASSERT(tag == Dart_kSourceTag);
+    return Dart_LoadSource(library, url, source, 0, 0);
+  }
 }
 
 
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index b9bc365..4f5e752 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -34,7 +34,7 @@
 
 // Global state that stores a pointer to the application script snapshot.
 static bool generate_script_snapshot = false;
-static File* snapshot_file = NULL;
+static const char* snapshot_filename = NULL;
 
 
 // Global state that indicates whether there is a debug breakpoint.
@@ -274,12 +274,7 @@
                     " dart\n");
       return false;
     }
-    snapshot_file = File::Open(filename, File::kWriteTruncate);
-    if (snapshot_file == NULL) {
-      Log::PrintErr("Unable to open file %s for writing the snapshot\n",
-                    filename);
-      return false;
-    }
+    snapshot_filename = filename;
     generate_script_snapshot = true;
     return true;
   }
@@ -598,10 +593,9 @@
   result = DartUtils::LoadScript(isolate_data->script_url, builtin_lib);
   CHECK_RESULT(result);
 
-  if (Dart_IsVMFlagSet("load_async")) {
-    result = Dart_RunLoop();
-    CHECK_RESULT(result);
-  }
+  // Run event-loop and wait for script loading to complete.
+  result = Dart_RunLoop();
+  CHECK_RESULT(result);
 
   Platform::SetPackageRoot(package_root);
   Dart_Handle io_lib_url = DartUtils::NewString(DartUtils::kIOLibURL);
@@ -1074,6 +1068,14 @@
     result = Dart_CreateScriptSnapshot(&buffer, &size);
     DartExitOnError(result);
 
+    // Open the snapshot file.
+    File* snapshot_file = File::Open(snapshot_filename, File::kWriteTruncate);
+    if (snapshot_file == NULL) {
+      ErrorExit(kErrorExitCode,
+                "Unable to open file %s for writing the snapshot\n",
+                snapshot_filename);
+    }
+
     // Write the magic number to indicate file is a script snapshot.
     DartUtils::WriteMagicNumber(snapshot_file);
 
@@ -1081,6 +1083,7 @@
     bool bytes_written = snapshot_file->WriteFully(buffer, size);
     ASSERT(bytes_written);
     delete snapshot_file;
+    snapshot_file = NULL;
   } else {
     // Lookup the library of the root script.
     Dart_Handle root_lib = Dart_RootLibrary();
diff --git a/runtime/bin/vmservice/observatory/deployed/web/index.html b/runtime/bin/vmservice/observatory/deployed/web/index.html
index abbfcf9..8b368eb 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/index.html
+++ b/runtime/bin/vmservice/observatory/deployed/web/index.html
@@ -12,7 +12,7 @@
 <body><script src="packages/web_components/platform.js"></script>
 
 
-<!-- unminfied for debugging:
+<!-- unminified for debugging:
 <link rel="import" href="src/js/polymer/layout.html">
 <script src="src/js/polymer/polymer.concat.js"></script>
 -->
@@ -925,11 +925,17 @@
         <div title="{{ hoverText }}">{{ ref.valueAsString }}</div>
       </template>
 
-      <template if="{{ ref.isString || ref.isBool || ref.isInt || ref.isDouble || ref.isNull }}">
+      <template if="{{ ref.isBool || ref.isInt ||
+                       ref.isDouble || ref.isNull }}">
         <a on-click="{{ goto }}" _href="{{ url }}">{{ ref.valueAsString }}</a>
       </template>
 
-      <template if="{{ ref.isType }}">
+      <template if="{{ ref.isString }}">
+        <a on-click="{{ goto }}" _href="{{ url }}">{{ asStringLiteral(ref.valueAsString, ref.valueAsStringIsTruncated) }}</a>
+      </template>
+
+
+      <template if="{{ ref.isAbstractType }}">
         <a on-click="{{ goto }}" _href="{{ url }}">{{ ref.name }}</a>
       </template>
 
@@ -940,7 +946,7 @@
         </a>
       </template>
 
-      <template if="{{ ref.isInstance &amp;&amp; !ref.isClosure }}">
+      <template if="{{ ref.isPlainInstance }}">
         <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
         <curly-block callback="{{ expander() }}">
           <div class="memberList">
@@ -966,13 +972,47 @@
               <div class="memberItem">
                 <div class="memberName">[{{ element['index']}}]</div>
                 <div class="memberValue">
-                  <any-service-ref ref="{{ element['value'] }}">
-                </any-service-ref></div>
+                  <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
+                </div>
               </div>
             </template>
           </div>
         </curly-block>
       </template>
+
+      <template if="{{ ref.isMirrorReference }}">
+        <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
+        <curly-block callback="{{ expander() }}">
+          <div class="memberList">
+            <div class="memberItem">
+              <div class="memberName">referent</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ ref.referent }}"></any-service-ref>
+              </div>
+            </div>
+          </div>
+        </curly-block>
+      </template>
+
+      <template if="{{ ref.isWeakProperty }}">
+        <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
+        <curly-block callback="{{ expander() }}">
+          <div class="memberList">
+            <div class="memberItem">
+              <div class="memberName">key</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ ref.key }}"></any-service-ref>
+              </div>
+            </div>
+            <div class="memberItem">
+              <div class="memberName">value</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ ref.value }}"></any-service-ref>
+              </div>
+            </div>
+          </div>
+        </curly-block>
+      </template>
     </span>
   </template>
 </polymer-element>
@@ -2826,7 +2866,7 @@
   <template>
     <style>
       .textbox {
-        width: 80ex;
+        flex-grow: 1;
         font: 400 16px 'Montserrat', sans-serif;
       }
       .bigtextbox {
@@ -2837,9 +2877,10 @@
       }
       .radios {
         display: inline;
+        padding-right: 30px;
       }
       .radios label{
-        padding-left: 15px;
+        padding-left: 10px;
       }
       .historyExpr, .historyValue {
         vertical-align: text-top;
@@ -2861,7 +2902,7 @@
         padding: 6px 6px;
       }
     </style>
-    <form>
+    <form style="display:flex; flex-direction:row; align-items:flex-end">
       <template if="{{ lineMode == '1-line' }}">
         <input class="textbox" type="text" value="{{ text }}">
       </template>
@@ -2871,11 +2912,13 @@
 
       <input class="button" type="submit" value="Evaluate" on-click="{{ eval }}">
       <div class="radios" on-change="{{ updateLineMode }}">
-        <label for="1-line">1-line
+        <label for="1-line">
           <input type="radio" name="lineMode" value="1-line" checked="">
+          1-line
         </label>
-        <label for="N-line">N-line
+        <label for="N-line">
           <input type="radio" name="lineMode" value="N-line">
+          N-line
         </label>
       </div>
     </form>
@@ -4502,8 +4545,8 @@
     </div>
 
     <template if="{{ cls.error != null }}">
-      <error-ref ref="{{ cls.error }}">
-    </error-ref></template>
+      <error-ref ref="{{ cls.error }}"></error-ref>
+    </template>
 
     <hr>
 
@@ -14254,6 +14297,8 @@
 
 
 
+
+
 <polymer-element name="inbound-reference" extends="service-ref">
   <template>
     <style>
@@ -14532,6 +14577,639 @@
 </polymer-element>
 
 
+
+
+
+
+
+
+
+
+
+
+
+<polymer-element name="object-common" extends="observatory-element">
+  <template>
+    <style>
+/* Global styles */
+* {
+  margin: 0;
+  padding: 0;
+  font: 400 14px 'Montserrat', sans-serif;
+  color: #333;
+  box-sizing: border-box;
+}
+
+.content {
+  padding-left: 10%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.content-centered {
+  padding-left: 10%;
+  padding-right: 10%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.content-centered-big {
+  padding-left: 5%;
+  padding-right: 5%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+h1 {
+  font: 400 18px 'Montserrat', sans-serif;
+}
+
+.memberList {
+  display: table;
+}
+
+.memberItem {
+  display: table-row;
+}
+
+.memberName, .memberValue {
+  display: table-cell;
+  vertical-align: top;
+  padding: 3px 0 3px 1em;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.memberSmall {
+  display: table-cell;
+  vertical-align: top;
+  padding: 3px 0 3px 1em;
+  font: 400 12px 'Montserrat', sans-serif;
+}
+
+.monospace {
+  font-family: consolas, courier, monospace;
+  font-size: 1em;
+  line-height: 1.2em;
+  white-space: nowrap;
+}
+
+a {
+  color: #0489c3;
+  text-decoration: none;
+}
+
+a:hover {
+  text-decoration: underline;
+}
+
+em {
+  color: inherit;
+  font-style: italic;
+}
+
+b {
+  color: inherit;
+  font-weight: bold;
+}
+
+hr {
+  margin-top: 20px;
+  margin-bottom: 20px;
+  border: 0;
+  border-top: 1px solid #eee;
+  height: 0;
+  box-sizing: content-box;
+}
+
+.list-group {
+  padding-left: 0;
+  margin-bottom: 20px;
+}
+
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+  margin-bottom: -1px;
+  background-color: #fff;
+}
+
+.list-group-item:first-child {
+  /* rounded top corners */
+  border-top-right-radius:4px;
+  border-top-left-radius:4px;
+}
+
+.list-group-item:last-child {
+  margin-bottom: 0;
+  /* rounded bottom corners */
+  border-bottom-right-radius: 4px;
+  border-bottom-left-radius:4px;
+}
+
+/* Flex row container */
+.flex-row {
+  display: flex;
+  flex-direction: row;
+}
+
+/* Flex column container */
+.flex-column {
+  display: flex;
+  flex-direction: column;
+}
+
+.flex-item-fit {
+  flex-grow: 1;
+  flex-shrink: 1;
+  flex-basis: auto;
+}
+
+.flex-item-no-shrink {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: auto;
+}
+
+.flex-item-fill {
+  flex-grow: 0;
+  flex-shrink: 1;  /* shrink when pressured */
+  flex-basis: 100%;  /* try and take 100% */
+}
+
+.flex-item-fixed-1-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 8.3%;
+}
+
+.flex-item-fixed-2-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 16.6%;
+}
+
+.flex-item-fixed-4-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 33.3333%;
+}
+
+.flex-item-fixed-6-12, .flex-item-50-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 50%;
+}
+
+.flex-item-fixed-8-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 66.6666%;
+}
+
+.flex-item-fixed-9-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 75%;
+}
+
+
+.flex-item-fixed-12-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 100%;
+}
+
+.flex-item-10-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 10%;
+}
+
+.flex-item-15-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 15%;
+}
+
+.flex-item-20-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 20%;
+}
+
+.flex-item-30-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 30%;
+}
+
+.flex-item-40-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 40%;
+}
+
+.flex-item-50-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 50%;
+}
+
+.flex-item-60-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 60%;
+}
+
+.flex-item-70-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 70%;
+}
+
+.flex-item-80-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 80%;
+}
+
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  border-radius: 4px;
+  box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);
+}
+
+.break-wrap {
+  word-wrap: break-word;
+}
+</style>
+    <div class="memberList">
+
+      <div class="memberItem">
+        <div class="memberName">class</div>
+        <div class="memberValue">
+          <class-ref ref="{{ object.clazz }}"></class-ref>
+        </div>
+      </div>
+
+      <div class="memberItem" title="Space for this object in memory">
+        <div class="memberName">size</div>
+        <div class="memberValue">{{ object.size | formatSize }}</div>
+      </div>
+
+      <div class="memberItem" title="Space that would be reclaimed if references to this object were replaced with null">
+        <div class="memberName">retained size</div>
+        <div class="memberValue">
+          <template if="{{ retainedBytes == null }}">
+            <eval-link callback="{{ retainedSize }}" label="[calculate]">
+            </eval-link>
+          </template>
+          <template if="{{ retainedBytes != null }}">
+            {{ retainedBytes | formatSize }}
+          </template>
+        </div>
+      </div>
+
+      <div class="memberItem">
+        <div class="memberName">retaining path</div>
+        <div class="memberValue">
+          <template if="{{ path == null }}">
+            <eval-link callback="{{ retainingPath }}" label="[find]" expr="10">
+            </eval-link>
+          </template>
+          <template if="{{ path != null }}">
+            <template repeat="{{ element in path['elements'] }}">
+            <div class="memberItem">
+              <div class="memberName">[{{ element['index']}}]</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
+                <template if="{{ element['parentField'] != null }}">
+                  in <field-ref ref="{{ element['parentField'] }}"></field-ref> of
+                </template>
+                <template if="{{ element['parentListIndex'] != null }}">
+                  in [{{ element['parentListIndex'] }}] of
+                </template>
+              </div>
+              </div>
+            </template>
+            <template if="{{ path['length'] > path['elements'].length }}">
+              showing {{ path['elements'].length }} of {{ path['length'] }}
+              <eval-link callback="{{ retainingPath }}" label="[find more]" expr="{{ path['elements'].length * 2 }}">
+              </eval-link>
+            </template>
+          </template>
+        </div>
+      </div>
+
+      <div class="memberItem" title="Objects which directly reference this object">
+        <div class="memberName">inbound references</div>
+        <div class="memberValue">
+          <template if="{{ inboundReferences == null }}">
+            <eval-link callback="{{ fetchInboundReferences }}" label="[find]" expr="100">
+            </eval-link>
+          </template>
+          <template if="{{ inboundReferences != null }}">
+            <template repeat="{{ reference in inboundReferences['references'] }}">
+              <inbound-reference ref="{{ reference }}"></inbound-reference>
+            </template>
+          </template>
+        </div>
+      </div>
+
+   </div>
+  </template>
+</polymer-element>
+
+
+
+
+
+
+
+<polymer-element name="context-ref" extends="service-ref">
+  <template>
+    <style>
+/* Global styles */
+* {
+  margin: 0;
+  padding: 0;
+  font: 400 14px 'Montserrat', sans-serif;
+  color: #333;
+  box-sizing: border-box;
+}
+
+.content {
+  padding-left: 10%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.content-centered {
+  padding-left: 10%;
+  padding-right: 10%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.content-centered-big {
+  padding-left: 5%;
+  padding-right: 5%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+h1 {
+  font: 400 18px 'Montserrat', sans-serif;
+}
+
+.memberList {
+  display: table;
+}
+
+.memberItem {
+  display: table-row;
+}
+
+.memberName, .memberValue {
+  display: table-cell;
+  vertical-align: top;
+  padding: 3px 0 3px 1em;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.memberSmall {
+  display: table-cell;
+  vertical-align: top;
+  padding: 3px 0 3px 1em;
+  font: 400 12px 'Montserrat', sans-serif;
+}
+
+.monospace {
+  font-family: consolas, courier, monospace;
+  font-size: 1em;
+  line-height: 1.2em;
+  white-space: nowrap;
+}
+
+a {
+  color: #0489c3;
+  text-decoration: none;
+}
+
+a:hover {
+  text-decoration: underline;
+}
+
+em {
+  color: inherit;
+  font-style: italic;
+}
+
+b {
+  color: inherit;
+  font-weight: bold;
+}
+
+hr {
+  margin-top: 20px;
+  margin-bottom: 20px;
+  border: 0;
+  border-top: 1px solid #eee;
+  height: 0;
+  box-sizing: content-box;
+}
+
+.list-group {
+  padding-left: 0;
+  margin-bottom: 20px;
+}
+
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+  margin-bottom: -1px;
+  background-color: #fff;
+}
+
+.list-group-item:first-child {
+  /* rounded top corners */
+  border-top-right-radius:4px;
+  border-top-left-radius:4px;
+}
+
+.list-group-item:last-child {
+  margin-bottom: 0;
+  /* rounded bottom corners */
+  border-bottom-right-radius: 4px;
+  border-bottom-left-radius:4px;
+}
+
+/* Flex row container */
+.flex-row {
+  display: flex;
+  flex-direction: row;
+}
+
+/* Flex column container */
+.flex-column {
+  display: flex;
+  flex-direction: column;
+}
+
+.flex-item-fit {
+  flex-grow: 1;
+  flex-shrink: 1;
+  flex-basis: auto;
+}
+
+.flex-item-no-shrink {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: auto;
+}
+
+.flex-item-fill {
+  flex-grow: 0;
+  flex-shrink: 1;  /* shrink when pressured */
+  flex-basis: 100%;  /* try and take 100% */
+}
+
+.flex-item-fixed-1-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 8.3%;
+}
+
+.flex-item-fixed-2-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 16.6%;
+}
+
+.flex-item-fixed-4-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 33.3333%;
+}
+
+.flex-item-fixed-6-12, .flex-item-50-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 50%;
+}
+
+.flex-item-fixed-8-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 66.6666%;
+}
+
+.flex-item-fixed-9-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 75%;
+}
+
+
+.flex-item-fixed-12-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 100%;
+}
+
+.flex-item-10-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 10%;
+}
+
+.flex-item-15-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 15%;
+}
+
+.flex-item-20-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 20%;
+}
+
+.flex-item-30-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 30%;
+}
+
+.flex-item-40-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 40%;
+}
+
+.flex-item-50-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 50%;
+}
+
+.flex-item-60-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 60%;
+}
+
+.flex-item-70-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 70%;
+}
+
+.flex-item-80-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 80%;
+}
+
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  border-radius: 4px;
+  box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);
+}
+
+.break-wrap {
+  word-wrap: break-word;
+}
+</style>
+    <span>
+      <a on-click="{{ goto }}" _href="{{ url }}"><em>Context</em> ({{ ref.length }})</a>
+      <curly-block callback="{{ expander() }}">
+        <div class="memberList">
+          <div class="memberItem">
+            <div class="memberName">parent</div>
+            <div class="memberValue">
+              <any-service-ref ref="{{ ref.parentContext }}"></any-service-ref>
+            </div>
+          </div>
+          <template repeat="{{ variable in ref.variables }}">
+            <div class="memberItem">
+              <div class="memberName">[{{ variable['index']}}]</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ variable['value'] }}"></any-service-ref>
+              </div>
+            </div>
+          </template>
+        </div>
+      </curly-block>
+    </span>
+  </template>
+</polymer-element>
+
+
 <polymer-element name="instance-view" extends="observatory-element">
   <template>
     <style>
@@ -14805,86 +15483,42 @@
 
     <template if="{{ !instance.isError }}">
       <div class="content">
-        <template if="{{ instance.isType }}">
+        <template if="{{ instance.isAbstractType }}">
           <h1>type {{ instance.name }}</h1>
         </template>
-        <template if="{{ !instance.isType }}">
+        <template if="{{ !instance.isAbstractType }}">
           <h1>instance of {{ instance.clazz.name }}</h1>
         </template>
+
+        <object-common object="{{ instance }}"></object-common>
+
         <div class="memberList">
-          <div class="memberItem">
-            <div class="memberName">class</div>
-            <div class="memberValue">
-              <class-ref ref="{{ instance.clazz }}">
-              </class-ref>
-            </div>
-          </div>
+          <div class="memberItem">&nbsp;</div>
+
           <template if="{{ instance.valueAsString != null }}">
             <div class="memberItem">
               <div class="memberName">value</div>
               <div class="memberValue">{{ instance.valueAsString }}</div>
             </div>
           </template>
-          <div class="memberItem" title="Space for this object in memory">
-            <div class="memberName">size</div>
-            <div class="memberValue">{{ instance.size | formatSize }}</div>
-          </div>
-          <div class="memberItem" title="Space that would be reclaimed if references to this object were replaced with null">
-            <div class="memberName">retained size</div>
-            <div class="memberValue">
-              <template if="{{ retainedBytes == null }}">
-                <eval-link callback="{{ retainedSize }}" label="[calculate]">
-                </eval-link>
-              </template>
-              <template if="{{ retainedBytes != null }}">
-                {{ retainedBytes | formatSize }}
-              </template>
+
+          <template if="{{ instance.isString }}">
+            <div class="memberItem">
+              <div class="memberName">valueAsLiteral</div>
+              <div class="memberValue"> {{ asStringLiteral(instance.valueAsString, instance.valueAsStringIsTruncated) }}</div>
             </div>
-          </div>
-          <div class="memberItem">
-            <div class="memberName">retaining path</div>
-            <div class="memberValue">
-              <template if="{{ path == null }}">
-                <eval-link callback="{{ retainingPath }}" label="[find]" expr="10">
-                </eval-link>
-              </template>
-              <template if="{{ path != null }}">
-                <template repeat="{{ element in path['elements'] }}">
-                <div class="memberItem">
-                  <div class="memberName">[{{ element['index']}}]</div>
-                  <div class="memberValue">
-                    <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
-                    <template if="{{ element['parentField'] != null }}">
-                      in <field-ref ref="{{ element['parentField'] }}"></field-ref> of
-                    </template>
-                    <template if="{{ element['parentListIndex'] != null }}">
-                      in [{{ element['parentListIndex'] }}] of
-                    </template>
-                  </div>
-                  </div>
-                </template>
-                <template if="{{ path['length'] > path['elements'].length }}">
-                  showing {{ path['elements'].length }} of {{ path['length'] }}
-                  <eval-link callback="{{ retainingPath }}" label="[find more]" expr="{{ path['elements'].length * 2 }}">
-                  </eval-link>
-                </template>
-              </template>
+          </template>
+
+          <template if="{{ instance.isMirrorReference }}">
+            <div class="memberItem">
+              <div class="memberName">referent</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.referent }}">
+                </any-service-ref>
+              </div>
             </div>
-          </div>
-          <div class="memberItem" title="Objects which directly reference this object">
-            <div class="memberName">inbound references</div>
-            <div class="memberValue">
-              <template if="{{ inboundReferences == null }}">
-                <eval-link callback="{{ fetchInboundReferences }}" label="[find]" expr="100">
-                </eval-link>
-              </template>
-              <template if="{{ inboundReferences != null }}">
-                <template repeat="{{ reference in inboundReferences['references'] }}">
-                  <inbound-reference ref="{{ reference }}"></inbound-reference>
-                </template>
-              </template>
-            </div>
-          </div>
+          </template>
+
           <template if="{{ instance.typeClass != null }}">
             <div class="memberItem">
               <div class="memberName">type class</div>
@@ -14894,6 +15528,7 @@
               </div>
             </div>
           </template>
+
           <template if="{{ instance.isClosure }}">
             <div class="memberItem">
               <div class="memberName">closure function</div>
@@ -14903,8 +15538,32 @@
               </div>
             </div>
           </template>
+          <template if="{{ instance.isClosure }}">
+            <div class="memberItem">
+              <div class="memberName">closure context</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.closureCtxt }}">
+                </any-service-ref>
+              </div>
+            </div>
+          </template>
 
-          <div class="memberItem">&nbsp;</div>
+          <template if="{{ instance.isWeakProperty }}">
+            <div class="memberItem">
+              <div class="memberName">key</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.key }}">
+                </any-service-ref>
+              </div>
+            </div>
+            <div class="memberItem">
+              <div class="memberName">value</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.value }}">
+                </any-service-ref>
+              </div>
+            </div>
+          </template>
 
           <div class="memberItem">
             <div class="memberName">toString()</div>
@@ -14918,6 +15577,20 @@
       <hr>
 
       <div class="content">
+        <template if="{{ instance.nativeFields.isNotEmpty }}">
+          native fields ({{ instance.nativeFields.length }})
+          <curly-block expand="{{ instance.nativeFields.length <= 8 }}">
+            <div class="memberList">
+              <template repeat="{{ field in instance.nativeFields }}">
+                <div class="memberItem">
+                  <div class="memberName">[{{ field['index']}}]</div>
+                  <div class="memberValue">[{{ field['value']}}]</div>
+                </div>
+              </template>
+            </div>
+          </curly-block><br><br>
+        </template>
+
         <template if="{{ instance.fields.isNotEmpty }}">
           fields ({{ instance.fields.length }})
           <curly-block expand="{{ instance.fields.length <= 8 }}">
@@ -14936,20 +15609,6 @@
           </curly-block><br><br>
         </template>
 
-        <template if="{{ instance.nativeFields.isNotEmpty }}">
-          native fields ({{ instance.nativeFields.length }})
-          <curly-block expand="{{ instance.nativeFields.length <= 8 }}">
-            <div class="memberList">
-              <template repeat="{{ field in instance.nativeFields }}">
-                <div class="memberItem">
-                  <div class="memberName">[{{ field['index']}}]</div>
-                  <div class="memberValue">[{{ field['value']}}]</div>
-                </div>
-              </template>
-            </div>
-          </curly-block><br><br>
-        </template>
-
         <template if="{{ instance.elements.isNotEmpty }}">
           elements ({{ instance.elements.length }})
           <curly-block expand="{{ instance.elements.length <= 8 }}">
@@ -14958,9 +15617,8 @@
                 <div class="memberItem">
                   <div class="memberName">[{{ element['index']}}]</div>
                   <div class="memberValue">
-                    <any-service-ref ref="{{ element['value'] }}">
-                    
-                  </any-service-ref></div>
+                    <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
+                  </div>
                 </div>
               </template>
             </div>
@@ -14973,6 +15631,7 @@
       <div class="content">
         <eval-box callback="{{ eval }}"></eval-box>
       </div>
+
       <br><br><br><br>
       <br><br><br><br>
 
@@ -16315,6 +16974,330 @@
 
 
 
+
+
+
+
+
+
+<polymer-element name="context-view" extends="observatory-element">
+  <template>
+    <style>
+/* Global styles */
+* {
+  margin: 0;
+  padding: 0;
+  font: 400 14px 'Montserrat', sans-serif;
+  color: #333;
+  box-sizing: border-box;
+}
+
+.content {
+  padding-left: 10%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.content-centered {
+  padding-left: 10%;
+  padding-right: 10%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.content-centered-big {
+  padding-left: 5%;
+  padding-right: 5%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+h1 {
+  font: 400 18px 'Montserrat', sans-serif;
+}
+
+.memberList {
+  display: table;
+}
+
+.memberItem {
+  display: table-row;
+}
+
+.memberName, .memberValue {
+  display: table-cell;
+  vertical-align: top;
+  padding: 3px 0 3px 1em;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.memberSmall {
+  display: table-cell;
+  vertical-align: top;
+  padding: 3px 0 3px 1em;
+  font: 400 12px 'Montserrat', sans-serif;
+}
+
+.monospace {
+  font-family: consolas, courier, monospace;
+  font-size: 1em;
+  line-height: 1.2em;
+  white-space: nowrap;
+}
+
+a {
+  color: #0489c3;
+  text-decoration: none;
+}
+
+a:hover {
+  text-decoration: underline;
+}
+
+em {
+  color: inherit;
+  font-style: italic;
+}
+
+b {
+  color: inherit;
+  font-weight: bold;
+}
+
+hr {
+  margin-top: 20px;
+  margin-bottom: 20px;
+  border: 0;
+  border-top: 1px solid #eee;
+  height: 0;
+  box-sizing: content-box;
+}
+
+.list-group {
+  padding-left: 0;
+  margin-bottom: 20px;
+}
+
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+  margin-bottom: -1px;
+  background-color: #fff;
+}
+
+.list-group-item:first-child {
+  /* rounded top corners */
+  border-top-right-radius:4px;
+  border-top-left-radius:4px;
+}
+
+.list-group-item:last-child {
+  margin-bottom: 0;
+  /* rounded bottom corners */
+  border-bottom-right-radius: 4px;
+  border-bottom-left-radius:4px;
+}
+
+/* Flex row container */
+.flex-row {
+  display: flex;
+  flex-direction: row;
+}
+
+/* Flex column container */
+.flex-column {
+  display: flex;
+  flex-direction: column;
+}
+
+.flex-item-fit {
+  flex-grow: 1;
+  flex-shrink: 1;
+  flex-basis: auto;
+}
+
+.flex-item-no-shrink {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: auto;
+}
+
+.flex-item-fill {
+  flex-grow: 0;
+  flex-shrink: 1;  /* shrink when pressured */
+  flex-basis: 100%;  /* try and take 100% */
+}
+
+.flex-item-fixed-1-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 8.3%;
+}
+
+.flex-item-fixed-2-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 16.6%;
+}
+
+.flex-item-fixed-4-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 33.3333%;
+}
+
+.flex-item-fixed-6-12, .flex-item-50-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 50%;
+}
+
+.flex-item-fixed-8-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 66.6666%;
+}
+
+.flex-item-fixed-9-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 75%;
+}
+
+
+.flex-item-fixed-12-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 100%;
+}
+
+.flex-item-10-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 10%;
+}
+
+.flex-item-15-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 15%;
+}
+
+.flex-item-20-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 20%;
+}
+
+.flex-item-30-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 30%;
+}
+
+.flex-item-40-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 40%;
+}
+
+.flex-item-50-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 50%;
+}
+
+.flex-item-60-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 60%;
+}
+
+.flex-item-70-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 70%;
+}
+
+.flex-item-80-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 80%;
+}
+
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  border-radius: 4px;
+  box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);
+}
+
+.break-wrap {
+  word-wrap: break-word;
+}
+</style>
+    <nav-bar>
+      <top-nav-menu></top-nav-menu>
+      <isolate-nav-menu isolate="{{ context.isolate }}"></isolate-nav-menu>
+      <!-- TODO(turnidge): Add library nav menu here. -->
+      <class-nav-menu cls="{{ context.clazz }}"></class-nav-menu>
+      <nav-menu link="." anchor="instance" last="{{ true }}"></nav-menu>
+      <nav-refresh callback="{{ refresh }}"></nav-refresh>
+      <nav-control></nav-control>
+    </nav-bar>
+
+    <template if="{{ !context.isError }}">
+      <div class="content">
+        <h1>instance of Context</h1>
+
+        <object-common object="{{ context }}"></object-common>
+
+        <div class="memberList">
+          <div class="memberItem">&nbsp;</div>
+
+          <div class="memberItem">
+            <div class="memberName">parent context</div>
+            <div class="memberValue">
+              <any-service-ref ref="{{ context.parentContext }}"></any-service-ref>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <hr>
+
+      <div class="content">
+        <template if="{{ context.variables.isNotEmpty }}">
+          variables ({{ context.variables.length }})
+          <curly-block expand="{{ context.variables.length <= 8 }}">
+            <div class="memberList">
+              <template repeat="{{ variable in context.variables }}">
+                <div class="memberItem">
+                  <div class="memberName">[{{ variable['index']}}]</div>
+                  <div class="memberValue">
+                    <any-service-ref ref="{{ variable['value'] }}"></any-service-ref>
+                  </div>
+                </div>
+              </template>
+            </div>
+          </curly-block><br><br>
+        </template>
+      </div>
+
+      <br><br><br><br>
+      <br><br><br><br>
+
+    </template>
+  </template>
+</polymer-element>
+
+
+
+
+
+
+
 <polymer-element name="heap-profile" extends="observatory-element">
 <template>
   <style>
diff --git a/runtime/bin/vmservice/observatory/deployed/web/index.html._data b/runtime/bin/vmservice/observatory/deployed/web/index.html._data
index 6e6bdc5..1ec5d7a 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/index.html._data
+++ b/runtime/bin/vmservice/observatory/deployed/web/index.html._data
@@ -1 +1 @@
-{"experimental_bootstrap":false,"script_ids":[["observatory","lib/src/elements/curly_block.dart"],["observatory","lib/src/elements/observatory_element.dart"],["observatory","lib/src/elements/service_ref.dart"],["observatory","lib/src/elements/instance_ref.dart"],["observatory","lib/src/elements/action_link.dart"],["observatory","lib/src/elements/nav_bar.dart"],["observatory","lib/src/elements/breakpoint_list.dart"],["observatory","lib/src/elements/class_ref.dart"],["observatory","lib/src/elements/class_tree.dart"],["observatory","lib/src/elements/error_ref.dart"],["observatory","lib/src/elements/eval_box.dart"],["observatory","lib/src/elements/eval_link.dart"],["observatory","lib/src/elements/field_ref.dart"],["observatory","lib/src/elements/function_ref.dart"],["observatory","lib/src/elements/library_ref.dart"],["observatory","lib/src/elements/script_inset.dart"],["observatory","lib/src/elements/script_ref.dart"],["observatory","lib/src/elements/class_view.dart"],["observatory","lib/src/elements/code_ref.dart"],["observatory","lib/src/elements/code_view.dart"],["observatory","lib/src/elements/error_view.dart"],["observatory","lib/src/elements/field_view.dart"],["observatory","lib/src/elements/stack_frame.dart"],["observatory","lib/src/elements/flag_list.dart"],["observatory","lib/src/elements/function_view.dart"],["observatory","lib/src/elements/heap_map.dart"],["observatory","lib/src/elements/io_view.dart"],["observatory","lib/src/elements/isolate_ref.dart"],["observatory","lib/src/elements/isolate_summary.dart"],["observatory","lib/src/elements/isolate_view.dart"],["observatory","lib/src/elements/inbound_reference.dart"],["observatory","lib/src/elements/instance_view.dart"],["observatory","lib/src/elements/json_view.dart"],["observatory","lib/src/elements/library_view.dart"],["observatory","lib/src/elements/metrics.dart"],["observatory","lib/src/elements/heap_profile.dart"],["observatory","lib/src/elements/sliding_checkbox.dart"],["observatory","lib/src/elements/isolate_profile.dart"],["observatory","lib/src/elements/script_view.dart"],["observatory","lib/src/elements/stack_trace.dart"],["observatory","lib/src/elements/vm_view.dart"],["observatory","lib/src/elements/service_view.dart"],["observatory","lib/src/elements/observatory_application.dart"],["observatory","lib/src/elements/service_exception_view.dart"],["observatory","lib/src/elements/service_error_view.dart"],["observatory","lib/src/elements/vm_connect.dart"],["observatory","lib/src/elements/vm_ref.dart"],["observatory","web/main.dart"]]}
\ No newline at end of file
+{"experimental_bootstrap":false,"script_ids":[["observatory","lib/src/elements/curly_block.dart"],["observatory","lib/src/elements/observatory_element.dart"],["observatory","lib/src/elements/service_ref.dart"],["observatory","lib/src/elements/instance_ref.dart"],["observatory","lib/src/elements/action_link.dart"],["observatory","lib/src/elements/nav_bar.dart"],["observatory","lib/src/elements/breakpoint_list.dart"],["observatory","lib/src/elements/class_ref.dart"],["observatory","lib/src/elements/class_tree.dart"],["observatory","lib/src/elements/error_ref.dart"],["observatory","lib/src/elements/eval_box.dart"],["observatory","lib/src/elements/eval_link.dart"],["observatory","lib/src/elements/field_ref.dart"],["observatory","lib/src/elements/function_ref.dart"],["observatory","lib/src/elements/library_ref.dart"],["observatory","lib/src/elements/script_inset.dart"],["observatory","lib/src/elements/script_ref.dart"],["observatory","lib/src/elements/class_view.dart"],["observatory","lib/src/elements/code_ref.dart"],["observatory","lib/src/elements/code_view.dart"],["observatory","lib/src/elements/error_view.dart"],["observatory","lib/src/elements/field_view.dart"],["observatory","lib/src/elements/stack_frame.dart"],["observatory","lib/src/elements/flag_list.dart"],["observatory","lib/src/elements/function_view.dart"],["observatory","lib/src/elements/heap_map.dart"],["observatory","lib/src/elements/io_view.dart"],["observatory","lib/src/elements/isolate_ref.dart"],["observatory","lib/src/elements/isolate_summary.dart"],["observatory","lib/src/elements/isolate_view.dart"],["observatory","lib/src/elements/inbound_reference.dart"],["observatory","lib/src/elements/object_common.dart"],["observatory","lib/src/elements/context_ref.dart"],["observatory","lib/src/elements/instance_view.dart"],["observatory","lib/src/elements/json_view.dart"],["observatory","lib/src/elements/library_view.dart"],["observatory","lib/src/elements/metrics.dart"],["observatory","lib/src/elements/context_view.dart"],["observatory","lib/src/elements/heap_profile.dart"],["observatory","lib/src/elements/sliding_checkbox.dart"],["observatory","lib/src/elements/isolate_profile.dart"],["observatory","lib/src/elements/script_view.dart"],["observatory","lib/src/elements/stack_trace.dart"],["observatory","lib/src/elements/vm_view.dart"],["observatory","lib/src/elements/service_view.dart"],["observatory","lib/src/elements/observatory_application.dart"],["observatory","lib/src/elements/service_exception_view.dart"],["observatory","lib/src/elements/service_error_view.dart"],["observatory","lib/src/elements/vm_connect.dart"],["observatory","lib/src/elements/vm_ref.dart"],["observatory","web/main.dart"]]}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/observatory/deployed/web/index.html_bootstrap.dart.js b/runtime/bin/vmservice/observatory/deployed/web/index.html_bootstrap.dart.js
index 68f3703..e4629fc 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/index.html_bootstrap.dart.js
+++ b/runtime/bin/vmservice/observatory/deployed/web/index.html_bootstrap.dart.js
@@ -169,21 +169,21 @@
 if(w==null){y=Object.getPrototypeOf(a)
 if(y==null||y===Object.prototype)return C.Sx
 else return C.vB}return w},
-rQ:function(a){var z,y,x,w
+e1g:function(a){var z,y,x,w
 z=$.AuW
 if(z==null)return
 y=z
 for(z=y.length,x=J.x(a),w=0;w+1<z;w+=3){if(w>=z)return H.e(y,w)
 if(x.n(a,y[w]))return w}return},
 Dc:function(a){var z,y,x
-z=J.rQ(a)
+z=J.e1g(a)
 if(z==null)return
 y=$.AuW
 x=z+1
 if(x>=y.length)return H.e(y,x)
 return y[x]},
 KE:function(a,b){var z,y,x
-z=J.rQ(a)
+z=J.e1g(a)
 if(z==null)return
 y=$.AuW
 x=z+2
@@ -274,7 +274,7 @@
 if(c<b||c>z)throw H.b(P.TE(c,b,z))
 H.tb(a,c,a,b,z-c)
 this.sB(a,z-(c-b))},
-Vr:function(a,b){return H.CkK(a,b)},
+Vr:function(a,b){return H.Ck(a,b)},
 GT:function(a,b){if(!!a.immutable$list)H.vh(P.f("sort"))
 H.ig(a,b)},
 Jd:function(a){return this.GT(a,null)},
@@ -460,7 +460,6 @@
 if(J.xZ(c,a.length))throw H.b(P.N(c))
 return a.substring(b,c)},
 yn:function(a,b){return this.Nj(a,b,null)},
-hc:function(a){return a.toLowerCase()},
 bS:function(a){var z,y,x,w,v
 z=a.trim()
 y=z.length
@@ -480,7 +479,7 @@
 b=b>>>1
 if(b===0)break
 z+=z}return y},
-gNq:function(a){return new J.mN(a)},
+gNq:function(a){return new J.IA(a)},
 XU:function(a,b,c){var z,y,x,w
 if(b==null)H.vh(P.u(null))
 if(c<0||c>a.length)throw H.b(P.TE(c,0,a.length))
@@ -531,11 +530,11 @@
 if(y>=z)H.vh(P.N(y))
 x=a.charCodeAt(y)
 if(x!==32&&x!==13&&!J.Ga(x))break}return b}}},
-mN:{
-"^":"w2Y;Bx",
-gB:function(a){return this.Bx.length},
+IA:{
+"^":"w2Y;vF",
+gB:function(a){return this.vF.length},
 t:function(a,b){var z,y
-z=this.Bx
+z=this.vF
 if(typeof b!=="number"||Math.floor(b)!==b)H.vh(P.u(b))
 y=J.Wx(b)
 if(y.C(b,0))H.vh(P.N(b))
@@ -568,7 +567,7 @@
 x=P.L5(null,null,null,P.KN,H.yo)
 w=P.Ls(null,null,null,P.KN)
 v=new H.yo(0,null,!1)
-u=new H.aX(y,x,w,new I(),v,new H.Vh(H.rp()),new H.Vh(H.rp()),!1,!1,[],P.Ls(null,null,null,null),null,null,!1,!0,P.Ls(null,null,null,null))
+u=new H.aX(y,x,w,new I(),v,new H.kuS(H.rp()),new H.kuS(H.rp()),!1,!1,[],P.Ls(null,null,null,null),null,null,!1,!0,P.Ls(null,null,null,null))
 w.h(0,0)
 u.ac(0,v)
 init.globalState.Nr=u
@@ -608,7 +607,7 @@
 q=P.L5(null,null,null,P.KN,H.yo)
 p=P.Ls(null,null,null,P.KN)
 o=new H.yo(0,null,!1)
-n=new H.aX(y,q,p,new I(),o,new H.Vh(H.rp()),new H.Vh(H.rp()),!1,!1,[],P.Ls(null,null,null,null),null,null,!1,!0,P.Ls(null,null,null,null))
+n=new H.aX(y,q,p,new I(),o,new H.kuS(H.rp()),new H.kuS(H.rp()),!1,!1,[],P.Ls(null,null,null,null),null,null,!1,!0,P.Ls(null,null,null,null))
 p.h(0,0)
 n.ac(0,o)
 init.globalState.Xz.Rk.B7(0,new H.IY(n,new H.MA(w,v,u,t,s,r),"worker-start"))
@@ -680,7 +679,7 @@
 this.ji=y
 this.Ws=z&&!x
 y=H.IY
-x=H.VM(new P.Sw(null,0,0,0),[y])
+x=H.VM(new P.nd(null,0,0,0),[y])
 x.Eo(null,y)
 this.Xz=new H.ae(x,0)
 this.i2=P.L5(null,null,null,P.KN,H.aX)
@@ -727,7 +726,7 @@
 return}y=new H.NYh(a)
 if(z.n(b,2)){init.globalState.Xz.Rk.B7(0,new H.IY(this,y,"ping"))
 return}z=this.fB
-if(z==null){z=H.VM(new P.Sw(null,0,0,0),[null])
+if(z==null){z=H.VM(new P.nd(null,0,0,0),[null])
 z.Eo(null,null)
 this.fB=z}z.B7(0,y)},
 w1:function(a,b){var z,y
@@ -740,7 +739,7 @@
 y=this.gIm()
 z.Rk.B7(0,new H.IY(this,y,"kill"))
 return}z=this.fB
-if(z==null){z=H.VM(new P.Sw(null,0,0,0),[null])
+if(z==null){z=H.VM(new P.nd(null,0,0,0),[null])
 z.Eo(null,null)
 this.fB=z}z.B7(0,this.gIm())},
 hk:function(a,b){var z,y
@@ -840,9 +839,9 @@
 P.cH(C.ny,this)},"$0",null,0,0,null,"call"],
 $isEH:true},
 IY:{
-"^":"a;od*,i3,G1>",
+"^":"a;od*,xh,G1>",
 Fn:[function(a){if(this.od.gUF()){this.od.gC9().push(this)
-return}J.QT(this.od,this.i3)},"$0","gpE",0,0,17],
+return}J.QT(this.od,this.xh)},"$0","gpE",0,0,17],
 $isIY:true},
 JH:{
 "^":"a;"},
@@ -896,7 +895,7 @@
 if(!z.geL()){if(this.c){y=this.a
 y.a=H.Ln(y.a)}J.Pc(z,this.a.a)}},"$0",null,0,0,null,"call"],
 $isEH:true},
-ns:{
+bM:{
 "^":"Iy4;Bi,ma,AJ",
 wR:function(a,b){var z,y
 z=H.GyL(P.EF(["command","message","port",this,"msg",b],null,null))
@@ -904,14 +903,14 @@
 self.postMessage(z)}else{y=init.globalState.XC.t(0,this.Bi)
 if(y!=null)y.postMessage(z)}},
 n:function(a,b){if(b==null)return!1
-return!!J.x(b).$isns&&J.xC(this.Bi,b.Bi)&&J.xC(this.AJ,b.AJ)&&J.xC(this.ma,b.ma)},
+return!!J.x(b).$isbM&&J.xC(this.Bi,b.Bi)&&J.xC(this.AJ,b.AJ)&&J.xC(this.ma,b.ma)},
 giO:function(a){var z,y,x
 z=J.Eh(this.Bi,16)
 y=J.Eh(this.AJ,8)
 x=this.ma
 if(typeof x!=="number")return H.s(x)
 return(z^y^x)>>>0},
-$isns:true,
+$isbM:true,
 $ispW:true,
 $ishq:true},
 yo:{
@@ -935,16 +934,16 @@
 RS:{
 "^":"hz;uP,dZ",
 DE:function(a){if(!!a.$isKg)return["sendport",init.globalState.NO,a.AJ,J.Rr(a.kx)]
-if(!!a.$isns)return["sendport",a.Bi,a.AJ,a.ma]
+if(!!a.$isbM)return["sendport",a.Bi,a.AJ,a.ma]
 throw H.b("Illegal underlying port "+a.bu(0))},
-yf:function(a){if(!!a.$isVh)return["capability",a.a7]
+yf:function(a){if(!!a.$iskuS)return["capability",a.a7]
 throw H.b("Capability not serializable: "+a.bu(0))}},
 fL:{
 "^":"ooy;dZ",
 DE:function(a){if(!!a.$isKg)return new H.Kg(a.kx,a.AJ)
-if(!!a.$isns)return new H.ns(a.Bi,a.ma,a.AJ)
+if(!!a.$isbM)return new H.bM(a.Bi,a.ma,a.AJ)
 throw H.b("Illegal underlying port "+a.bu(0))},
-yf:function(a){if(!!a.$isVh)return new H.Vh(a.a7)
+yf:function(a){if(!!a.$iskuS)return new H.kuS(a.a7)
 throw H.b("Capability not serializable: "+a.bu(0))}},
 EU:{
 "^":"fPc;Bw",
@@ -957,8 +956,8 @@
 if(v==null)return
 u=v.hV(w)
 if(u==null)return
-return new H.Kg(u,x)}else return new H.ns(y,w,x)},
-Op:function(a){return new H.Vh(J.UQ(a,1))}},
+return new H.Kg(u,x)}else return new H.bM(y,w,x)},
+Op:function(a){return new H.kuS(J.UQ(a,1))}},
 m3:{
 "^":"a;At",
 t:function(a,b){return b.__MessageTraverser__attached_info__},
@@ -975,7 +974,7 @@
 u:function(a,b,c){},
 CH:function(a){},
 F4:function(){}},
-BB:{
+HU5:{
 "^":"a;",
 h7:function(a){var z
 if(H.vM(a))return this.Wp(a)
@@ -992,7 +991,7 @@
 return this.N1(a)},
 N1:function(a){throw H.b("Message serialization: Illegal value "+H.d(a)+" passed")}},
 ooy:{
-"^":"BB;",
+"^":"HU5;",
 Wp:function(a){return a},
 wb:function(a){var z,y,x,w
 z=this.dZ.t(0,a)
@@ -1022,7 +1021,7 @@
 J.kW(this.a.a,z.B3(a),z.B3(b))},"$2",null,4,0,null,79,80,"call"],
 $isEH:true},
 hz:{
-"^":"BB;",
+"^":"HU5;",
 Wp:function(a){return a},
 wb:function(a){var z,y
 z=this.dZ.t(0,a)
@@ -1128,7 +1127,7 @@
 "^":"TpZ:76;a,b",
 $0:[function(){this.b.$1(this.a)},"$0",null,0,0,null,"call"],
 $isEH:true},
-Vh:{
+kuS:{
 "^":"a;a7>",
 giO:function(a){var z,y,x
 z=this.a7
@@ -1144,10 +1143,10 @@
 n:function(a,b){var z,y
 if(b==null)return!1
 if(b===this)return!0
-if(!!J.x(b).$isVh){z=this.a7
+if(!!J.x(b).$iskuS){z=this.a7
 y=b.a7
 return z==null?y==null:z===y}return!1},
-$isVh:true,
+$iskuS:true,
 $ishq:true}}],["","",,H,{
 "^":"",
 Gp:function(a,b){var z
@@ -1263,7 +1262,7 @@
 return a.date},
 KL:function(a){return a.aL?H.o2(a).getUTCHours()+0:H.o2(a).getHours()+0},
 ch:function(a){return a.aL?H.o2(a).getUTCMinutes()+0:H.o2(a).getMinutes()+0},
-XJ:function(a){return a.aL?H.o2(a).getUTCSeconds()+0:H.o2(a).getSeconds()+0},
+Sw:function(a){return a.aL?H.o2(a).getUTCSeconds()+0:H.o2(a).getSeconds()+0},
 vA:function(a,b){if(a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string")throw H.b(P.u(a))
 return a[b]},
 wV:function(a,b,c){if(a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string")throw H.b(P.u(a))
@@ -1309,7 +1308,7 @@
 if("defineProperty" in Object){Object.defineProperty(z,"message",{get:H.tM})
 z.name=""}else z.toString=H.tM
 return z},
-tM:[function(){return J.AG(this.dartException)},"$0","nR",0,0,null],
+tM:[function(){return J.AG(this.dartException)},"$0","p3",0,0,null],
 vh:function(a){throw H.b(a)},
 Ru:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
 z=new H.Hk(a)
@@ -1352,7 +1351,7 @@
 return a},
 CU:function(a){if(a==null||typeof a!='object')return J.v1(a)
 else return H.eQ(a)},
-B7:function(a,b){var z,y,x,w
+dJ:function(a,b){var z,y,x,w
 z=a.length
 for(y=0;y<z;y=w){x=y+1
 w=x+1
@@ -1410,22 +1409,22 @@
 case 5:return function(e,f){return function(g,h,i,j,k){return f(this)[e](g,h,i,j,k)}}(c,z)
 default:return function(e,f){return function(){return e.apply(f(this),arguments)}}(d,z)}},
 CW:function(a,b,c){var z,y,x,w,v,u
-if(c)return H.Hf(a,b)
+if(c)return H.Kv(a,b)
 z=b.$stubName
 y=b.length
 x=a[z]
 w=b==null?x==null:b===x
 if(typeof dart_precompiled=="function"||!w||y>=27)return H.vq(y,!w,z,b)
-if(y===0){w=$.bf
+if(y===0){w=$.mJs
 if(w==null){w=H.B3("self")
-$.bf=w}w="return function(){return this."+H.d(w)+"."+H.d(z)+"();"
+$.mJs=w}w="return function(){return this."+H.d(w)+"."+H.d(z)+"();"
 v=$.OK
 $.OK=J.WB(v,1)
 return new Function(w+H.d(v)+"}")()}u="abcdefghijklmnopqrstuvwxyz".split("").splice(0,y).join(",")
 w="return function("+u+"){return this."
-v=$.bf
+v=$.mJs
 if(v==null){v=H.B3("self")
-$.bf=v}v=w+H.d(v)+"."+H.d(z)+"("+u+");"
+$.mJs=v}v=w+H.d(v)+"."+H.d(z)+"("+u+");"
 w=$.OK
 $.OK=J.WB(w,1)
 return new Function(v+H.d(w)+"}")()},
@@ -1442,7 +1441,7 @@
 default:return function(e,f,g,h){return function(){h=[g(this)]
 Array.prototype.push.apply(h,arguments)
 return e.apply(f(this),h)}}(d,z,y)}},
-Hf:function(a,b){var z,y,x,w,v,u,t,s
+Kv:function(a,b){var z,y,x,w,v,u,t,s
 z=H.bO()
 y=$.P4
 if(y==null){y=H.B3("receiver")
@@ -1470,10 +1469,10 @@
 else z=!0
 if(z)return a
 H.aE(a,b)},
-ag:function(a){throw H.b(P.mE("Cyclic initialization for static "+H.d(a)))},
+eQK:function(a){throw H.b(P.mE("Cyclic initialization for static "+H.d(a)))},
 KT:function(a,b,c){return new H.GN(a,b,c,null)},
 Ogz:function(a,b){var z=a.name
-if(b==null||b.length===0)return new H.Fp(z)
+if(b==null||b.length===0)return new H.tu(z)
 return new H.KEA(z,b,null)},
 G3:function(){return C.Kn},
 rp:function(){return(Math.random()*0x100000000>>>0)+(Math.random()*0x100000000>>>0)*4294967296},
@@ -1775,10 +1774,10 @@
 x.u(0,this.XL(u),u)}z.a=0
 y=x.gvc(x).br(0)
 H.ig(y,null)
-H.bQ(y,new H.uV(z,this,x))}z=this.NE
+H.bQ(y,new H.V5(z,this,x))}z=this.NE
 if(a<0||a>=z.length)return H.e(z,a)
 return z[a]},
-static:{"^":"vS,FV,OcN,H6",zh:function(a){var z,y,x
+static:{"^":"t4A,FV,OcN,H6",zh:function(a){var z,y,x
 z=a.$reflectionInfo
 if(z==null)return
 z.fixed$length=init
@@ -1786,7 +1785,7 @@
 y=z[0]
 x=z[1]
 return new H.FD(a,z,(y&1)===1,y>>1,x>>1,(x&1)===1,z[2],null)}}},
-uV:{
+V5:{
 "^":"TpZ:3;a,b,c",
 $1:function(a){var z,y,x
 z=this.b.NE
@@ -1920,9 +1919,9 @@
 else y=typeof z!=="object"?J.v1(z):H.eQ(z)
 return J.UN(y,H.eQ(this.J6))},
 $isv:true,
-static:{"^":"bf,P4",uj:function(a){return a.tx},HY:function(a){return a.lT},bO:function(){var z=$.bf
+static:{"^":"mJs,P4",uj:function(a){return a.tx},HY:function(a){return a.lT},bO:function(){var z=$.mJs
 if(z==null){z=H.B3("self")
-$.bf=z}return z},B3:function(a){var z,y,x,w,v
+$.mJs=z}return z},B3:function(a){var z,y,x,w,v
 z=new H.v("self","target","receiver","name")
 y=Object.getOwnPropertyNames(z)
 y.fixed$length=init
@@ -1950,7 +1949,7 @@
 z={func:"dynafunc"}
 y=this.dw
 x=J.x(y)
-if(!!x.$isnr)z.void=true
+if(!!x.$isNG)z.void=true
 else if(!x.$isi6)z.ret=y.za()
 y=this.Iq
 if(y!=null&&y.length!==0)z.args=H.Dz(y)
@@ -1986,7 +1985,7 @@
 bu:[function(a){return"dynamic"},"$0","gCR",0,0,73],
 za:function(){return},
 $isi6:true},
-Fp:{
+tu:{
 "^":"lbp;oc>",
 za:function(){var z,y
 z=this.oc
@@ -2106,15 +2105,15 @@
 z.fw(a,b)
 return z}}},
 KW:{
-"^":"mW;ve,vF,wQ",
-gA:function(a){return new H.Pb(this.ve,this.vF,this.wQ,null)},
+"^":"mW;ve,BZ,wQ",
+gA:function(a){return new H.Pb(this.ve,this.BZ,this.wQ,null)},
 $asmW:function(){return[P.Od]},
 $asQV:function(){return[P.Od]}},
 Pb:{
-"^":"a;UW,vF,Ij,Jz",
+"^":"a;UW,BZ,Ij,Jz",
 gl:function(){return this.Jz},
 G:function(){var z,y,x,w,v
-z=this.vF
+z=this.BZ
 if(z==null)return!1
 y=this.Ij
 if(y<=z.length){x=this.UW.UZ(z,y)
@@ -2127,7 +2126,7 @@
 v=y+w
 this.Ij=z.index===v?v+1:v
 return!0}}this.Jz=null
-this.vF=null
+this.BZ=null
 return!1}},
 Vo:{
 "^":"a;M,f1,zO",
@@ -2177,7 +2176,7 @@
 jE:{
 "^":"TpZ:76;a",
 $0:[function(){var z=this.a
-z.IF=J.Q5(z,C.S4,z.IF,!1)},"$0",null,0,0,null,"call"],
+z.IF=J.NB(z,C.S4,z.IF,!1)},"$0",null,0,0,null,"call"],
 $isEH:true}}],["","",,G,{
 "^":"",
 m7:[function(a){var z
@@ -2246,7 +2245,7 @@
 H.VM(new P.Ik(z),[H.u3(z,0)]).yI(this.geO())}this.Nv=b},
 gvK:function(){return this.cC},
 svK:function(a){this.cC=F.Wi(this,C.c6,this.cC,a)},
-qB:function(a){var z,y
+KO:function(a){var z,y
 $.Kh=this
 z=this.wc
 z.push(new G.t9(this,null,null,null,null))
@@ -2257,7 +2256,7 @@
 z=this.Z6
 z.By=this
 y=H.VM(new W.RO(window,C.yf.fA,!1),[null])
-H.VM(new W.Ov(0,y.bi,y.fA,W.aF(z.gnt()),y.el),[H.u3(y,0)]).DN()
+H.VM(new W.Ov(0,y.bi,y.fA,W.Yt(z.gnt()),y.el),[H.u3(y,0)]).DN()
 z.VA()},
 pZ:function(a){J.Ei(this.cC,new G.xE(a,new G.cE()))},
 rG:[function(a){var z=J.RE(a)
@@ -2282,7 +2281,7 @@
 y=J.U6(z)
 if(y.t(z,"trace")!=null){x=y.t(z,"trace")
 y=J.x(x)
-if(y.n(x,"on")){if($.ax==null)$.ax=Z.NY()}else if(y.n(x,"off")){y=$.ax
+if(y.n(x,"on")){if($.ax==null)$.ax=Z.JQ()}else if(y.n(x,"off")){y=$.ax
 if(y!=null){y.RV.Gv()
 $.ax=null}}}y=$.ax
 if(y!=null){y.NP.CH(0)
@@ -2323,12 +2322,12 @@
 z=new U.KM(H.VM(new P.Zf(P.Dt(null)),[null]),H.VM(new P.Zf(P.Dt(null)),[null]),z,P.L5(null,null,null,P.qU,L.U2),P.L5(null,null,null,P.qU,L.U2),0,!1,new P.GY(!1),new U.hA(null),"unknown","unknown",0,!1,!1,"",null,P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.L5(null,null,null,P.qU,D.af),P.L5(null,null,null,P.qU,D.bv),null,null,null,null,null,null,!1,null,null,null,null,null)
 z.Lw()
 this.swv(0,z)
-this.qB(!1)},
+this.KO(!1)},
 E0:function(a){var z=new U.dS(H.VM(new P.Zf(P.Dt(null)),[null]),H.VM(new P.Zf(P.Dt(null)),[null]),P.L5(null,null,null,P.qU,P.A0),0,"unknown","unknown",0,!1,!1,"",null,P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.L5(null,null,null,P.qU,D.af),P.L5(null,null,null,P.qU,D.bv),null,null,null,null,null,null,!1,null,null,null,null,null)
 z.Lw()
 z.ZH()
 this.swv(0,z)
-this.qB(!0)},
+this.KO(!0)},
 static:{"^":"Kh<"}},
 cE:{
 "^":"TpZ:93;",
@@ -2433,7 +2432,7 @@
 Q0:function(a){var z,y
 z=H.Go(this.yF,"$isTi")
 y=this.i6.Pv
-z.Ll=J.Q5(z,C.td,z.Ll,y)},
+z.Ll=J.NB(z,C.td,z.Ll,y)},
 VU:function(a){return J.co(a,"error/")}},
 ki:{
 "^":"OS;i6,yF,fz,Vg,fn",
@@ -2447,8 +2446,8 @@
 z=F.Wi(this,C.GP,this.yF,z)
 this.yF=z
 H.Go(z,"$isqn")
-z.GC=J.Q5(z,C.EP,z.GC,this)}},
-TG:function(a,b){var z
+z.GC=J.NB(z,C.EP,z.GC,this)}},
+ZW:function(a,b){var z
 if(b.gmw()!=null){if(J.cj(b.gmw()).gVs()===a)return
 C.Nm.Rz(b.gmw().gJb(),b)
 b.smw(null)}if(J.xC(a,0))return
@@ -2478,7 +2477,7 @@
 YhF:{
 "^":"TpZ:12;a",
 $1:[function(a){var z=H.Go(this.a.yF,"$isqn")
-z.OM=J.Q5(z,C.rB,z.OM,a)},"$1",null,2,0,null,97,"call"],
+z.OM=J.NB(z,C.rB,z.OM,a)},"$1",null,2,0,null,97,"call"],
 $isEH:true},
 V3:{
 "^":"a;IU",
@@ -2597,7 +2596,7 @@
 w.oq(z,v,v+y)}},
 Kt:{
 "^":"a;ph>,xy<",
-static:{mbk:[function(a){return a!=null?J.AG(a):"<null>"},"$1","NZt",2,0,16]}},
+static:{cR:[function(a){return a!=null?J.AG(a):"<null>"},"$1","Tp",2,0,16]}},
 Ni:{
 "^":"a;UQ>",
 $isNi:true},
@@ -2609,19 +2608,19 @@
 gT3:function(){return this.Rj},
 sT3:function(a){this.Rj=a
 F.Wi(this,C.JB,0,1)},
-wA:function(a,b){var z=this.vp
+Ey:function(a,b){var z=this.vp
 if(a>>>0!==a||a>=z.length)return H.e(z,a)
 return J.UQ(J.hI(z[a]),b)},
-oa:[function(a,b){var z=this.wA(a,this.pT)
-return J.FW(this.wA(b,this.pT),z)},"$2","gMG",4,0,100],
-ws:[function(a,b){return J.FW(this.wA(a,this.pT),this.wA(b,this.pT))},"$2","gTF",4,0,100],
+oa:[function(a,b){var z=this.Ey(a,this.pT)
+return J.FW(this.Ey(b,this.pT),z)},"$2","gMG",4,0,100],
+ws:[function(a,b){return J.FW(this.Ey(a,this.pT),this.Ey(b,this.pT))},"$2","gfL",4,0,100],
 Jd:function(a){var z,y
 H.Xe()
 $.Ji=$.xG
 new P.VV(null,null).D5(0)
 z=this.zz
 if(this.Rj){y=this.gMG()
-H.ig(z,y)}else{y=this.gTF()
+H.ig(z,y)}else{y=this.gfL()
 H.ig(z,y)}},
 Ai:function(){C.Nm.sB(this.vp,0)
 C.Nm.sB(this.zz,0)},
@@ -2644,14 +2643,14 @@
 return J.WB(z,this.Rj?"\u25bc":"\u25b2")},"$1","gCO",2,0,14,101]}}],["","",,E,{
 "^":"",
 Jz:[function(){var z,y,x
-z=P.EF([C.aP,new E.em(),C.IH,new E.Lb(),C.cg,new E.QA(),C.j2,new E.Cv(),C.Zg,new E.ed(),C.ET,new E.wa(),C.BE,new E.Or(),C.WC,new E.YL(),C.hR,new E.wf(),C.S4,new E.Oa(),C.Ro,new E.emv(),C.hN,new E.Lbd(),C.AV,new E.QAa(),C.bV,new E.CvS(),C.C0,new E.edy(),C.eZ,new E.waE(),C.bk,new E.Ore(),C.lH,new E.YLa(),C.am,new E.wfa(),C.oE,new E.Oaa(),C.kG,new E.e0(),C.OI,new E.e1(),C.Wt,new E.e2(),C.I9,new E.e3(),C.To,new E.e4(),C.aw,new E.e5(),C.XA,new E.e6(),C.i4,new E.e7(),C.mJ,new E.e8(),C.qt,new E.e9(),C.p1,new E.e10(),C.yJ,new E.e11(),C.la,new E.e12(),C.yL,new E.e13(),C.bJ,new E.e14(),C.ox,new E.e15(),C.Je,new E.e16(),C.kI,new E.e17(),C.vY,new E.e18(),C.Rs,new E.e19(),C.hJ,new E.e20(),C.Lw,new E.e21(),C.eR,new E.e22(),C.LS,new E.e23(),C.iE,new E.e24(),C.f4,new E.e25(),C.VK,new E.e26(),C.aH,new E.e27(),C.aK,new E.e28(),C.GP,new E.e29(),C.mw,new E.e30(),C.vs,new E.e31(),C.Gr,new E.e32(),C.TU,new E.e33(),C.Fe,new E.e34(),C.tP,new E.e35(),C.yh,new E.e36(),C.Zb,new E.e37(),C.u7,new E.e38(),C.p8,new E.e39(),C.qR,new E.e40(),C.ld,new E.e41(),C.ne,new E.e42(),C.B0,new E.e43(),C.r1,new E.e44(),C.mr,new E.e45(),C.Ek,new E.e46(),C.Pn,new E.e47(),C.YT,new E.e48(),C.h7,new E.e49(),C.R3,new E.e50(),C.cJ,new E.e51(),C.WQ,new E.e52(),C.fV,new E.e53(),C.jU,new E.e54(),C.OO,new E.e55(),C.Mc,new E.e56(),C.FP,new E.e57(),C.kF,new E.e58(),C.UD,new E.e59(),C.Aq,new E.e60(),C.DS,new E.e61(),C.C9,new E.e62(),C.VF,new E.e63(),C.uU,new E.e64(),C.YJ,new E.e65(),C.eF,new E.e66(),C.oI,new E.e67(),C.ST,new E.e68(),C.QH,new E.e69(),C.qX,new E.e70(),C.rE,new E.e71(),C.nf,new E.e72(),C.EI,new E.e73(),C.JB,new E.e74(),C.RY,new E.e75(),C.d4,new E.e76(),C.cF,new E.e77(),C.SI,new E.e78(),C.zS,new E.e79(),C.YA,new E.e80(),C.Ge,new E.e81(),C.A7,new E.e82(),C.He,new E.e83(),C.im,new E.e84(),C.Ss,new E.e85(),C.k6,new E.e86(),C.oj,new E.e87(),C.PJ,new E.e88(),C.Yb,new E.e89(),C.q2,new E.e90(),C.d2,new E.e91(),C.kN,new E.e92(),C.uO,new E.e93(),C.fn,new E.e94(),C.yB,new E.e95(),C.eJ,new E.e96(),C.iG,new E.e97(),C.Py,new E.e98(),C.pC,new E.e99(),C.uu,new E.e100(),C.qs,new E.e101(),C.XH,new E.e102(),C.tJ,new E.e103(),C.F8,new E.e104(),C.fy,new E.e105(),C.C1,new E.e106(),C.Nr,new E.e107(),C.nL,new E.e108(),C.a0,new E.e109(),C.Yg,new E.e110(),C.bR,new E.e111(),C.ai,new E.e112(),C.ob,new E.e113(),C.MY,new E.e114(),C.Iv,new E.e115(),C.Wg,new E.e116(),C.tD,new E.e117(),C.QS,new E.e118(),C.nZ,new E.e119(),C.Of,new E.e120(),C.Vl,new E.e121(),C.pY,new E.e122(),C.XL,new E.e123(),C.LA,new E.e124(),C.tz,new E.e125(),C.AT,new E.e126(),C.Lk,new E.e127(),C.dK,new E.e128(),C.rB,new E.e129(),C.bz,new E.e130(),C.Jx,new E.e131(),C.b5,new E.e132(),C.z6,new E.e133(),C.SY,new E.e134(),C.Lc,new E.e135(),C.hf,new E.e136(),C.uk,new E.e137(),C.Zi,new E.e138(),C.TN,new E.e139(),C.GI,new E.e140(),C.Wn,new E.e141(),C.ur,new E.e142(),C.VN,new E.e143(),C.EV,new E.e144(),C.VI,new E.e145(),C.eh,new E.e146(),C.SA,new E.e147(),C.uG,new E.e148(),C.kV,new E.e149(),C.vp,new E.e150(),C.cc,new E.e151(),C.DY,new E.e152(),C.Lx,new E.e153(),C.M3,new E.e154(),C.wT,new E.e155(),C.JK,new E.e156(),C.SR,new E.e157(),C.t6,new E.e158(),C.rP,new E.e159(),C.qi,new E.e160(),C.pX,new E.e161(),C.kB,new E.e162(),C.LH,new E.e163(),C.a2,new E.e164(),C.VD,new E.e165(),C.NN,new E.e166(),C.UX,new E.e167(),C.YS,new E.e168(),C.pu,new E.e169(),C.uw,new E.e170(),C.BJ,new E.e171(),C.c6,new E.e172(),C.td,new E.e173(),C.Gn,new E.e174(),C.zO,new E.e175(),C.vg,new E.e176(),C.YV,new E.e177(),C.If,new E.e178(),C.Ys,new E.e179(),C.zm,new E.e180(),C.EP,new E.e181(),C.nX,new E.e182(),C.xP,new E.e183(),C.XM,new E.e184(),C.Ic,new E.e185(),C.yG,new E.e186(),C.uI,new E.e187(),C.O9,new E.e188(),C.ba,new E.e189(),C.tW,new E.e190(),C.CG,new E.e191(),C.Jf,new E.e192(),C.Wj,new E.e193(),C.vb,new E.e194(),C.UL,new E.e195(),C.AY,new E.e196(),C.QK,new E.e197(),C.AO,new E.e198(),C.Xd,new E.e199(),C.I7,new E.e200(),C.kY,new E.e201(),C.Wm,new E.e202(),C.vK,new E.e203(),C.GR,new E.e204(),C.KX,new E.e205(),C.ja,new E.e206(),C.mn,new E.e207(),C.Dj,new E.e208(),C.ir,new E.e209(),C.dx,new E.e210(),C.ni,new E.e211(),C.X2,new E.e212(),C.F3,new E.e213(),C.UY,new E.e214(),C.Aa,new E.e215(),C.nY,new E.e216(),C.tg,new E.e217(),C.HD,new E.e218(),C.iU,new E.e219(),C.eN,new E.e220(),C.ue,new E.e221(),C.nh,new E.e222(),C.L2,new E.e223(),C.vm,new E.e224(),C.Gs,new E.e225(),C.bE,new E.e226(),C.YD,new E.e227(),C.PX,new E.e228(),C.N8,new E.e229(),C.EA,new E.e230(),C.oW,new E.e231(),C.KC,new E.e232(),C.tf,new E.e233(),C.da,new E.e234(),C.Jd,new E.e235(),C.Y4,new E.e236(),C.Si,new E.e237(),C.pH,new E.e238(),C.Ve,new E.e239(),C.jM,new E.e240(),C.rd,new E.e241(),C.W5,new E.e242(),C.uX,new E.e243(),C.nt,new E.e244(),C.IT,new E.e245(),C.li,new E.e246(),C.PM,new E.e247(),C.ks,new E.e248(),C.Om,new E.e249(),C.iC,new E.e250(),C.Nv,new E.e251(),C.Wo,new E.e252(),C.FZ,new E.e253(),C.TW,new E.e254(),C.xS,new E.e255(),C.ft,new E.e256(),C.QF,new E.e257(),C.mi,new E.e258(),C.zz,new E.e259(),C.eO,new E.e260(),C.hO,new E.e261(),C.ei,new E.e262(),C.HK,new E.e263(),C.je,new E.e264(),C.Ef,new E.e265(),C.QL,new E.e266(),C.RH,new E.e267(),C.SP,new E.e268(),C.Q1,new E.e269(),C.ID,new E.e270(),C.dA,new E.e271(),C.bc,new E.e272(),C.kw,new E.e273(),C.nE,new E.e274(),C.ep,new E.e275(),C.hB,new E.e276(),C.J2,new E.e277(),C.hx,new E.e278(),C.zU,new E.e279(),C.OU,new E.e280(),C.bn,new E.e281(),C.mh,new E.e282(),C.Fh,new E.e283(),C.yv,new E.e284(),C.LP,new E.e285(),C.jh,new E.e286(),C.zd,new E.e287(),C.Db,new E.e288(),C.l4,new E.e289(),C.fj,new E.e290(),C.xw,new E.e291(),C.zn,new E.e292(),C.RJ,new E.e293(),C.Sk,new E.e294(),C.Tc,new E.e295(),C.YE,new E.e296(),C.Uy,new E.e297()],null,null)
-y=P.EF([C.aP,new E.e298(),C.cg,new E.e299(),C.Zg,new E.e300(),C.S4,new E.e301(),C.AV,new E.e302(),C.bk,new E.e303(),C.lH,new E.e304(),C.am,new E.e305(),C.oE,new E.e306(),C.kG,new E.e307(),C.Wt,new E.e308(),C.aw,new E.e309(),C.XA,new E.e310(),C.i4,new E.e311(),C.mJ,new E.e312(),C.yL,new E.e313(),C.bJ,new E.e314(),C.kI,new E.e315(),C.vY,new E.e316(),C.VK,new E.e317(),C.aH,new E.e318(),C.GP,new E.e319(),C.vs,new E.e320(),C.Gr,new E.e321(),C.Fe,new E.e322(),C.tP,new E.e323(),C.yh,new E.e324(),C.Zb,new E.e325(),C.p8,new E.e326(),C.ld,new E.e327(),C.ne,new E.e328(),C.B0,new E.e329(),C.mr,new E.e330(),C.YT,new E.e331(),C.cJ,new E.e332(),C.WQ,new E.e333(),C.jU,new E.e334(),C.OO,new E.e335(),C.Mc,new E.e336(),C.QH,new E.e337(),C.rE,new E.e338(),C.nf,new E.e339(),C.Ge,new E.e340(),C.A7,new E.e341(),C.He,new E.e342(),C.oj,new E.e343(),C.d2,new E.e344(),C.uO,new E.e345(),C.fn,new E.e346(),C.yB,new E.e347(),C.Py,new E.e348(),C.uu,new E.e349(),C.qs,new E.e350(),C.rB,new E.e351(),C.hf,new E.e352(),C.uk,new E.e353(),C.Zi,new E.e354(),C.TN,new E.e355(),C.ur,new E.e356(),C.EV,new E.e357(),C.VI,new E.e358(),C.eh,new E.e359(),C.SA,new E.e360(),C.uG,new E.e361(),C.kV,new E.e362(),C.vp,new E.e363(),C.SR,new E.e364(),C.t6,new E.e365(),C.kB,new E.e366(),C.UX,new E.e367(),C.YS,new E.e368(),C.c6,new E.e369(),C.td,new E.e370(),C.zO,new E.e371(),C.YV,new E.e372(),C.If,new E.e373(),C.Ys,new E.e374(),C.EP,new E.e375(),C.nX,new E.e376(),C.XM,new E.e377(),C.Ic,new E.e378(),C.O9,new E.e379(),C.tW,new E.e380(),C.Wj,new E.e381(),C.vb,new E.e382(),C.QK,new E.e383(),C.Xd,new E.e384(),C.kY,new E.e385(),C.vK,new E.e386(),C.GR,new E.e387(),C.KX,new E.e388(),C.ja,new E.e389(),C.Dj,new E.e390(),C.X2,new E.e391(),C.UY,new E.e392(),C.Aa,new E.e393(),C.nY,new E.e394(),C.tg,new E.e395(),C.HD,new E.e396(),C.iU,new E.e397(),C.eN,new E.e398(),C.Gs,new E.e399(),C.bE,new E.e400(),C.YD,new E.e401(),C.PX,new E.e402(),C.tf,new E.e403(),C.Jd,new E.e404(),C.pH,new E.e405(),C.Ve,new E.e406(),C.jM,new E.e407(),C.rd,new E.e408(),C.uX,new E.e409(),C.nt,new E.e410(),C.IT,new E.e411(),C.PM,new E.e412(),C.ks,new E.e413(),C.Om,new E.e414(),C.iC,new E.e415(),C.Nv,new E.e416(),C.FZ,new E.e417(),C.TW,new E.e418(),C.ft,new E.e419(),C.mi,new E.e420(),C.zz,new E.e421(),C.dA,new E.e422(),C.kw,new E.e423(),C.nE,new E.e424(),C.hx,new E.e425(),C.zU,new E.e426(),C.OU,new E.e427(),C.RJ,new E.e428(),C.YE,new E.e429()],null,null)
-x=P.EF([C.K4,C.qJ,C.yS,C.Mt,C.OG,C.il,C.nw,C.Mt,C.ou,C.Mt,C.oT,C.il,C.jR,C.Mt,C.Lg,C.qJ,C.Bi,C.il,C.KO,C.Mt,C.wk,C.Mt,C.jA,C.qJ,C.Jo,C.il,C.Az,C.Mt,C.Vx,C.Mt,C.Qb,C.Mt,C.lE,C.al,C.te,C.Mt,C.iD,C.Mt,C.Ju,C.Mt,C.uC,C.al,C.Wz,C.il,C.Ke,C.Mt,C.pF,C.il,C.Wh,C.Mt,C.qF,C.Mt,C.qZ,C.il,C.Zj,C.Mt,C.he,C.Mt,C.dD,C.al,C.hP,C.Mt,C.tc,C.Mt,C.rR,C.il,C.oG,C.Mt,C.mK,C.il,C.IZ,C.Mt,C.FG,C.il,C.pJ,C.Mt,C.tU,C.Mt,C.DD,C.Mt,C.Yy,C.il,C.Xv,C.Mt,C.ce,C.Mt,C.UJ,C.il,C.ca,C.Mt,C.Io,C.Mt,C.j4,C.Mt,C.EG,C.Mt,C.CT,C.Mt,C.mq,C.Mt,C.Tq,C.Mt,C.lp,C.il,C.PT,C.Mt,C.fU,C.Mt,C.pi,C.Mt,C.Fn,C.Mt,C.Ey,C.Mt,C.km,C.Mt,C.vw,C.Mt,C.LT,C.Mt,C.NW,C.Mz,C.ms,C.Mt,C.FA,C.Mt,C.Qt,C.Mt,C.a8,C.Mt,C.JW,C.Mt,C.Mf,C.Mt,C.Dl,C.Mt,C.Mz,C.qJ,C.Nw,C.Mt,C.ON,C.Mt,C.Sb,C.al,C.Th,C.Mt,C.wH,C.Mt,C.pK,C.Mt,C.R9,C.Mt,C.il,C.Mt,C.QJ,C.Mt,C.u4,C.Mt,C.X8,C.Mt,C.kt,C.Mt,C.Y3,C.qJ,C.NR,C.Mt,C.tQ,C.Mt,C.bC,C.Mt,C.ws,C.Mt,C.cK,C.il,C.jK,C.Mt,C.qJ,C.jw,C.Mt,C.Mz,C.al,C.il],null,null)
-y=O.rH(!1,P.EF([C.K4,P.EF([C.S4,C.aj,C.AV,C.Qp,C.mJ,C.Qu,C.hf,C.V0],null,null),C.yS,P.EF([C.UX,C.Pt],null,null),C.OG,P.Fl(null,null),C.nw,P.EF([C.rB,C.xY,C.bz,C.Bk],null,null),C.ou,P.EF([C.XA,C.dq,C.yB,C.vZ,C.tg,C.DC],null,null),C.oT,P.EF([C.i4,C.Qs,C.Wm,C.QW],null,null),C.jR,P.EF([C.i4,C.aJ],null,null),C.Lg,P.EF([C.S4,C.aj,C.AV,C.Qp,C.B0,C.iH,C.r1,C.nP,C.mr,C.iz],null,null),C.Bi,P.Fl(null,null),C.KO,P.EF([C.yh,C.Ul],null,null),C.wk,P.EF([C.AV,C.fr,C.eh,C.jO,C.Aa,C.k5,C.mi,C.yV],null,null),C.jA,P.EF([C.S4,C.aj,C.AV,C.Qp,C.YT,C.LC,C.hf,C.V0,C.UY,C.n6],null,null),C.Jo,P.Fl(null,null),C.Az,P.EF([C.WQ,C.ah],null,null),C.Vx,P.EF([C.OO,C.Cf],null,null),C.Qb,P.EF([C.Mc,C.f0],null,null),C.lE,P.EF([C.QK,C.P9],null,null),C.te,P.EF([C.nf,C.wR],null,null),C.iD,P.EF([C.QH,C.C4,C.qX,C.dO,C.PM,C.jv],null,null),C.Ju,P.EF([C.kG,C.Pr,C.rB,C.xY,C.Zi,C.xx,C.TN,C.Gj,C.vb,C.Mq,C.UL,C.mM],null,null),C.uC,P.EF([C.uO,C.KK,C.kY,C.rT],null,null),C.Wz,P.Fl(null,null),C.Ke,P.EF([C.uO,C.JT,C.fn,C.Kk,C.XM,C.Tt,C.tg,C.DC],null,null),C.pF,P.Fl(null,null),C.Wh,P.EF([C.yL,C.j5],null,null),C.qF,P.EF([C.vp,C.o0],null,null),C.qZ,P.Fl(null,null),C.Zj,P.EF([C.oj,C.GT],null,null),C.he,P.EF([C.vp,C.o0],null,null),C.dD,P.EF([C.pH,C.xV],null,null),C.hP,P.EF([C.Wj,C.Ah],null,null),C.tc,P.EF([C.vp,C.o0],null,null),C.rR,P.Fl(null,null),C.oG,P.EF([C.jU,C.bw],null,null),C.mK,P.Fl(null,null),C.IZ,P.EF([C.vp,C.o0],null,null),C.FG,P.Fl(null,null),C.pJ,P.EF([C.Ve,C.X4],null,null),C.tU,P.EF([C.qs,C.MN],null,null),C.DD,P.EF([C.vp,C.o0],null,null),C.Yy,P.Fl(null,null),C.Xv,P.EF([C.YE,C.Wl],null,null),C.ce,P.EF([C.aH,C.w3,C.He,C.fz,C.vb,C.Mq,C.UL,C.mM,C.Dj,C.Ay,C.Gs,C.iO,C.bE,C.h3,C.YD,C.fP,C.TW,C.H0,C.xS,C.hd,C.zz,C.lS],null,null),C.UJ,P.Fl(null,null),C.ca,P.EF([C.bJ,C.UI,C.ox,C.Rh],null,null),C.Io,P.EF([C.rB,C.RU],null,null),C.j4,P.EF([C.rB,C.RU],null,null),C.EG,P.EF([C.rB,C.RU],null,null),C.CT,P.EF([C.rB,C.RU],null,null),C.mq,P.EF([C.rB,C.RU],null,null),C.Tq,P.EF([C.SR,C.S9,C.t6,C.b6,C.rP,C.Nt],null,null),C.lp,P.Fl(null,null),C.PT,P.EF([C.EV,C.ZQ],null,null),C.fU,P.EF([C.kB,C.nq,C.LH,C.oB,C.EP,C.db],null,null),C.pi,P.EF([C.rB,C.xY,C.kB,C.nq,C.LH,C.oB],null,null),C.Fn,P.EF([C.rB,C.xY,C.bz,C.Bk,C.EP,C.GO,C.tf,C.q6],null,null),C.Ey,P.EF([C.XA,C.dq,C.uk,C.rY],null,null),C.km,P.EF([C.rB,C.RU,C.bz,C.Bk,C.uk,C.rY],null,null),C.vw,P.EF([C.uk,C.rY,C.EV,C.ZQ],null,null),C.LT,P.EF([C.Ys,C.Cg],null,null),C.NW,P.Fl(null,null),C.ms,P.EF([C.cg,C.ll,C.uk,C.rY,C.kV,C.vz],null,null),C.FA,P.EF([C.cg,C.ll,C.kV,C.vz],null,null),C.Qt,P.EF([C.ld,C.Gw],null,null),C.a8,P.EF([C.p8,C.uc,C.ld,C.Gw],null,null),C.JW,P.EF([C.aP,C.oh,C.AV,C.Qp,C.hf,C.V0],null,null),C.Mf,P.EF([C.uk,C.rY],null,null),C.Dl,P.EF([C.VK,C.lW],null,null),C.Mz,P.EF([C.O9,C.q9,C.ba,C.kQ],null,null),C.Nw,P.EF([C.S4,C.aj,C.VI,C.w6],null,null),C.ON,P.EF([C.kI,C.Bf,C.vY,C.ZS,C.Rs,C.EW,C.vs,C.MP,C.Gr,C.VJ,C.TU,C.Cp,C.A7,C.SD,C.SA,C.KI,C.uG,C.Df,C.PX,C.jz,C.N8,C.qE,C.nt,C.VS,C.IT,C.NL,C.li,C.Tz],null,null),C.Sb,P.EF([C.tW,C.kH,C.CG,C.Ml],null,null),C.Th,P.EF([C.PX,C.jz],null,null),C.wH,P.EF([C.yh,C.lJ],null,null),C.pK,P.EF([C.ne,C.bp],null,null),C.R9,P.EF([C.kY,C.TO,C.Wm,C.QW],null,null),C.il,P.EF([C.uu,C.NJ,C.kY,C.TO,C.Wm,C.QW],null,null),C.QJ,P.EF([C.B0,C.iH,C.vp,C.Rz],null,null),C.u4,P.EF([C.B0,C.iH,C.SR,C.xR],null,null),C.X8,P.EF([C.Zg,C.b7,C.td,C.Zk,C.Gn,C.az],null,null),C.kt,P.EF([C.nE,C.FM],null,null),C.Y3,P.EF([C.bk,C.NS,C.lH,C.dG,C.zU,C.uT],null,null),C.NR,P.EF([C.B0,C.iH,C.rE,C.KS],null,null),C.tQ,P.EF([C.kw,C.oC],null,null),C.bC,P.EF([C.am,C.JD,C.oE,C.r2,C.uX,C.Eb],null,null),C.ws,P.EF([C.ft,C.Gz],null,null),C.cK,P.Fl(null,null),C.jK,P.EF([C.yh,C.Ul,C.RJ,C.BP],null,null)],null,null),z,P.EF([C.aP,"active",C.IH,"address",C.cg,"anchor",C.j2,"app",C.Zg,"args",C.ET,"assertsEnabled",C.BE,"averageCollectionPeriodInMillis",C.WC,"bpt",C.hR,"breakpoint",C.S4,"busy",C.Ro,"buttonClick",C.hN,"bytes",C.AV,"callback",C.bV,"capacity",C.C0,"change",C.eZ,"changeSort",C.bk,"checked",C.lH,"checkedText",C.am,"chromeTargets",C.oE,"chromiumAddress",C.kG,"classTable",C.OI,"classes",C.Wt,"clazz",C.I9,"closeItem",C.To,"closing",C.aw,"closureFunc",C.XA,"cls",C.i4,"code",C.mJ,"color",C.qt,"coloring",C.p1,"columns",C.yJ,"connectStandalone",C.la,"connectToVm",C.yL,"connection",C.bJ,"counters",C.ox,"countersChanged",C.Je,"current",C.kI,"currentLine",C.vY,"currentPos",C.Rs,"currentPosChanged",C.hJ,"dartMetrics",C.Lw,"deleteVm",C.eR,"deoptimizations",C.LS,"description",C.iE,"descriptor",C.f4,"descriptors",C.VK,"devtools",C.aH,"displayCutoff",C.aK,"doAction",C.GP,"element",C.mw,"elements",C.vs,"endLine",C.Gr,"endPos",C.TU,"endPosChanged",C.Fe,"endTokenPos",C.tP,"entry",C.yh,"error",C.Zb,"eval",C.u7,"evalNow",C.p8,"event",C.qR,"eventType",C.ld,"events",C.ne,"exception",C.B0,"expand",C.r1,"expandChanged",C.mr,"expanded",C.Ek,"expander",C.Pn,"expanderStyle",C.YT,"expr",C.h7,"external",C.R3,"fd",C.cJ,"fetchInboundReferences",C.WQ,"field",C.fV,"fields",C.jU,"file",C.OO,"flag",C.Mc,"flagList",C.FP,"formatSize",C.kF,"formatTime",C.UD,"formattedAddress",C.Aq,"formattedAverage",C.DS,"formattedCollections",C.C9,"formattedDeoptId",C.VF,"formattedExclusive",C.uU,"formattedExclusiveTicks",C.YJ,"formattedInclusive",C.eF,"formattedInclusiveTicks",C.oI,"formattedLine",C.ST,"formattedTotalCollectionTime",C.QH,"fragmentation",C.qX,"fragmentationChanged",C.rE,"frame",C.nf,"function",C.EI,"functions",C.JB,"getColumnLabel",C.RY,"getTabs",C.d4,"goto",C.cF,"gotoLink",C.SI,"hasDescriptors",C.zS,"hasDisassembly",C.YA,"hasNoAllocations",C.Ge,"hashLinkWorkaround",C.A7,"height",C.He,"hideTagsChecked",C.im,"history",C.Ss,"hits",C.k6,"hoverText",C.oj,"httpServer",C.PJ,"human",C.Yb,"id",C.q2,"idle",C.d2,"imp",C.kN,"imports",C.uO,"inboundReferences",C.fn,"instance",C.yB,"instances",C.eJ,"instruction",C.iG,"instructions",C.Py,"interface",C.pC,"interfaces",C.uu,"internal",C.qs,"io",C.XH,"isAbstract",C.tJ,"isBool",C.F8,"isChromeTarget",C.fy,"isClosure",C.C1,"isComment",C.Nr,"isConst",C.nL,"isCurrentTarget",C.a0,"isDart",C.Yg,"isDartCode",C.bR,"isDouble",C.ai,"isEmpty",C.ob,"isError",C.MY,"isInlinable",C.Iv,"isInstance",C.Wg,"isInt",C.tD,"isList",C.QS,"isMap",C.nZ,"isNotEmpty",C.Of,"isNull",C.Vl,"isOptimizable",C.pY,"isOptimized",C.XL,"isPatch",C.LA,"isPipe",C.tz,"isSentinel",C.AT,"isStatic",C.Lk,"isString",C.dK,"isType",C.rB,"isolate",C.bz,"isolateChanged",C.Jx,"isolates",C.b5,"jumpTarget",C.z6,"key",C.SY,"keys",C.Lc,"kind",C.hf,"label",C.uk,"last",C.Zi,"lastAccumulatorReset",C.TN,"lastServiceGC",C.GI,"lastUpdate",C.Wn,"length",C.ur,"lib",C.VN,"libraries",C.EV,"library",C.VI,"line",C.eh,"lineMode",C.SA,"lines",C.uG,"linesReady",C.kV,"link",C.vp,"list",C.cc,"listening",C.DY,"loading",C.Lx,"localAddress",C.M3,"localPort",C.wT,"mainPort",C.JK,"makeLineId",C.SR,"map",C.t6,"mapAsString",C.rP,"mapChanged",C.qi,"max",C.pX,"message",C.kB,"metric",C.LH,"metricChanged",C.a2,"min",C.VD,"mouseOut",C.NN,"mouseOver",C.UX,"msg",C.YS,"name",C.pu,"nameIsEmpty",C.uw,"nativeFields",C.BJ,"newSpace",C.c6,"notifications",C.td,"object",C.Gn,"objectChanged",C.zO,"objectPool",C.vg,"oldSpace",C.YV,"owningClass",C.If,"owningLibrary",C.Ys,"pad",C.zm,"padding",C.EP,"page",C.nX,"parent",C.xP,"parseInt",C.XM,"path",C.Ic,"pause",C.yG,"pauseEvent",C.uI,"pid",C.O9,"pollPeriod",C.ba,"pollPeriodChanged",C.tW,"pos",C.CG,"posChanged",C.Jf,"possibleBpt",C.Wj,"process",C.vb,"profile",C.UL,"profileChanged",C.AY,"protocol",C.QK,"qualified",C.AO,"qualifiedName",C.Xd,"reachable",C.I7,"readClosed",C.kY,"ref",C.Wm,"refChanged",C.vK,"reference",C.GR,"refresh",C.KX,"refreshCoverage",C.ja,"refreshGC",C.mn,"refreshRateChange",C.Dj,"refreshTime",C.ir,"relativeLink",C.dx,"remoteAddress",C.ni,"remotePort",C.X2,"resetAccumulator",C.F3,"response",C.UY,"result",C.Aa,"results",C.nY,"resume",C.tg,"retainedBytes",C.HD,"retainedSize",C.iU,"retainingPath",C.eN,"rootLib",C.ue,"row",C.nh,"rows",C.L2,"running",C.vm,"sampleBufferSizeChange",C.Gs,"sampleCount",C.bE,"sampleDepth",C.YD,"sampleRate",C.PX,"script",C.N8,"scriptChanged",C.EA,"scripts",C.oW,"selectExpr",C.KC,"selectMetric",C.tf,"selectedMetric",C.da,"size",C.Jd,"slot",C.Y4,"slotIsArrayIndex",C.Si,"slotIsField",C.pH,"small",C.Ve,"socket",C.jM,"socketOwner",C.rd,"source",C.W5,"standalone",C.uX,"standaloneVmAddress",C.nt,"startLine",C.IT,"startPos",C.li,"startPosChanged",C.PM,"status",C.ks,"stepInto",C.Om,"stepOut",C.iC,"stepOver",C.Nv,"subclass",C.Wo,"subclasses",C.FZ,"superclass",C.TW,"tagSelector",C.xS,"tagSelectorChanged",C.ft,"target",C.QF,"targets",C.mi,"text",C.zz,"timeSpan",C.eO,"timeStamp",C.hO,"tipExclusive",C.ei,"tipKind",C.HK,"tipParent",C.je,"tipTicks",C.Ef,"tipTime",C.QL,"toString",C.RH,"toStringAsFixed",C.SP,"toggleBreakpoint",C.Q1,"toggleExpand",C.ID,"toggleExpanded",C.dA,"tokenPos",C.bc,"topFrame",C.kw,"trace",C.nE,"tracer",C.ep,"tree",C.hB,"type",C.J2,"typeChecksEnabled",C.hx,"typeClass",C.zU,"uncheckedText",C.OU,"unoptimizedCode",C.bn,"updateLineMode",C.mh,"uptime",C.Fh,"url",C.yv,"usageCounter",C.LP,"used",C.jh,"v",C.zd,"value",C.Db,"valueAsString",C.l4,"values",C.fj,"variable",C.xw,"variables",C.zn,"version",C.RJ,"vm",C.Sk,"vmMetrics",C.Tc,"vmName",C.YE,"webSocket",C.Uy,"writeClosed"],null,null),x,y,null)
+z=P.EF([C.aP,new E.em(),C.IH,new E.Lb(),C.cg,new E.QA(),C.j2,new E.Cv(),C.Zg,new E.ed(),C.Wq,new E.wa(),C.ET,new E.Or(),C.BE,new E.YL(),C.WC,new E.wf(),C.hR,new E.Oa(),C.S4,new E.emv(),C.Ro,new E.Lbd(),C.hN,new E.QAa(),C.AV,new E.CvS(),C.bV,new E.edy(),C.C0,new E.waE(),C.eZ,new E.Ore(),C.bk,new E.YLa(),C.lH,new E.wfa(),C.am,new E.Oaa(),C.oE,new E.e0(),C.kG,new E.e1(),C.OI,new E.e2(),C.Wt,new E.e3(),C.I9,new E.e4(),C.To,new E.e5(),C.mM,new E.e6(),C.aw,new E.e7(),C.XA,new E.e8(),C.i4,new E.e9(),C.mJ,new E.e10(),C.qt,new E.e11(),C.p1,new E.e12(),C.yJ,new E.e13(),C.la,new E.e14(),C.yL,new E.e15(),C.nr,new E.e16(),C.bJ,new E.e17(),C.ox,new E.e18(),C.Je,new E.e19(),C.kI,new E.e20(),C.vY,new E.e21(),C.Rs,new E.e22(),C.hJ,new E.e23(),C.Lw,new E.e24(),C.eR,new E.e25(),C.LS,new E.e26(),C.iE,new E.e27(),C.f4,new E.e28(),C.VK,new E.e29(),C.aH,new E.e30(),C.aK,new E.e31(),C.GP,new E.e32(),C.mw,new E.e33(),C.vs,new E.e34(),C.Gr,new E.e35(),C.TU,new E.e36(),C.Fe,new E.e37(),C.tP,new E.e38(),C.yh,new E.e39(),C.Zb,new E.e40(),C.u7,new E.e41(),C.p8,new E.e42(),C.qR,new E.e43(),C.ld,new E.e44(),C.ne,new E.e45(),C.B0,new E.e46(),C.r1,new E.e47(),C.mr,new E.e48(),C.Ek,new E.e49(),C.Pn,new E.e50(),C.YT,new E.e51(),C.h7,new E.e52(),C.R3,new E.e53(),C.cJ,new E.e54(),C.WQ,new E.e55(),C.fV,new E.e56(),C.jU,new E.e57(),C.OO,new E.e58(),C.Mc,new E.e59(),C.FP,new E.e60(),C.kF,new E.e61(),C.UD,new E.e62(),C.Aq,new E.e63(),C.DS,new E.e64(),C.C9,new E.e65(),C.VF,new E.e66(),C.uU,new E.e67(),C.YJ,new E.e68(),C.eF,new E.e69(),C.oI,new E.e70(),C.ST,new E.e71(),C.QH,new E.e72(),C.qX,new E.e73(),C.rE,new E.e74(),C.nf,new E.e75(),C.EI,new E.e76(),C.JB,new E.e77(),C.RY,new E.e78(),C.d4,new E.e79(),C.cF,new E.e80(),C.SI,new E.e81(),C.zS,new E.e82(),C.YA,new E.e83(),C.Ge,new E.e84(),C.A7,new E.e85(),C.He,new E.e86(),C.im,new E.e87(),C.Ss,new E.e88(),C.k6,new E.e89(),C.oj,new E.e90(),C.PJ,new E.e91(),C.Yb,new E.e92(),C.q2,new E.e93(),C.d2,new E.e94(),C.kN,new E.e95(),C.uO,new E.e96(),C.fn,new E.e97(),C.yB,new E.e98(),C.eJ,new E.e99(),C.iG,new E.e100(),C.Py,new E.e101(),C.pC,new E.e102(),C.uu,new E.e103(),C.qs,new E.e104(),C.XH,new E.e105(),C.XJ,new E.e106(),C.tJ,new E.e107(),C.F8,new E.e108(),C.fy,new E.e109(),C.C1,new E.e110(),C.Nr,new E.e111(),C.nL,new E.e112(),C.a0,new E.e113(),C.Yg,new E.e114(),C.bR,new E.e115(),C.ai,new E.e116(),C.ob,new E.e117(),C.MY,new E.e118(),C.Wg,new E.e119(),C.tD,new E.e120(),C.QS,new E.e121(),C.C7,new E.e122(),C.nZ,new E.e123(),C.Of,new E.e124(),C.Vl,new E.e125(),C.pY,new E.e126(),C.XL,new E.e127(),C.LA,new E.e128(),C.Iw,new E.e129(),C.tz,new E.e130(),C.AT,new E.e131(),C.Lk,new E.e132(),C.GS,new E.e133(),C.rB,new E.e134(),C.bz,new E.e135(),C.Jx,new E.e136(),C.b5,new E.e137(),C.z6,new E.e138(),C.SY,new E.e139(),C.Lc,new E.e140(),C.hf,new E.e141(),C.uk,new E.e142(),C.Zi,new E.e143(),C.TN,new E.e144(),C.GI,new E.e145(),C.Wn,new E.e146(),C.ur,new E.e147(),C.VN,new E.e148(),C.EV,new E.e149(),C.VI,new E.e150(),C.eh,new E.e151(),C.SA,new E.e152(),C.uG,new E.e153(),C.kV,new E.e154(),C.vp,new E.e155(),C.cc,new E.e156(),C.DY,new E.e157(),C.Lx,new E.e158(),C.M3,new E.e159(),C.wT,new E.e160(),C.JK,new E.e161(),C.SR,new E.e162(),C.t6,new E.e163(),C.rP,new E.e164(),C.qi,new E.e165(),C.pX,new E.e166(),C.kB,new E.e167(),C.LH,new E.e168(),C.a2,new E.e169(),C.VD,new E.e170(),C.NN,new E.e171(),C.UX,new E.e172(),C.YS,new E.e173(),C.pu,new E.e174(),C.uw,new E.e175(),C.BJ,new E.e176(),C.c6,new E.e177(),C.td,new E.e178(),C.Gn,new E.e179(),C.zO,new E.e180(),C.vg,new E.e181(),C.YV,new E.e182(),C.If,new E.e183(),C.Ys,new E.e184(),C.zm,new E.e185(),C.EP,new E.e186(),C.nX,new E.e187(),C.BV,new E.e188(),C.xP,new E.e189(),C.XM,new E.e190(),C.Ic,new E.e191(),C.yG,new E.e192(),C.uI,new E.e193(),C.O9,new E.e194(),C.ba,new E.e195(),C.tW,new E.e196(),C.CG,new E.e197(),C.Jf,new E.e198(),C.Wj,new E.e199(),C.vb,new E.e200(),C.UL,new E.e201(),C.AY,new E.e202(),C.QK,new E.e203(),C.AO,new E.e204(),C.Xd,new E.e205(),C.I7,new E.e206(),C.kY,new E.e207(),C.Wm,new E.e208(),C.vK,new E.e209(),C.Tc,new E.e210(),C.GR,new E.e211(),C.KX,new E.e212(),C.ja,new E.e213(),C.mn,new E.e214(),C.Dj,new E.e215(),C.ir,new E.e216(),C.dx,new E.e217(),C.ni,new E.e218(),C.X2,new E.e219(),C.F3,new E.e220(),C.UY,new E.e221(),C.Aa,new E.e222(),C.nY,new E.e223(),C.tg,new E.e224(),C.HD,new E.e225(),C.iU,new E.e226(),C.eN,new E.e227(),C.ue,new E.e228(),C.nh,new E.e229(),C.L2,new E.e230(),C.vm,new E.e231(),C.Gs,new E.e232(),C.bE,new E.e233(),C.YD,new E.e234(),C.PX,new E.e235(),C.N8,new E.e236(),C.EA,new E.e237(),C.oW,new E.e238(),C.KC,new E.e239(),C.tf,new E.e240(),C.da,new E.e241(),C.Jd,new E.e242(),C.Y4,new E.e243(),C.Si,new E.e244(),C.pH,new E.e245(),C.Ve,new E.e246(),C.jM,new E.e247(),C.rd,new E.e248(),C.W5,new E.e249(),C.uX,new E.e250(),C.nt,new E.e251(),C.IT,new E.e252(),C.li,new E.e253(),C.PM,new E.e254(),C.ks,new E.e255(),C.Om,new E.e256(),C.iC,new E.e257(),C.Nv,new E.e258(),C.Wo,new E.e259(),C.FZ,new E.e260(),C.TW,new E.e261(),C.xS,new E.e262(),C.ft,new E.e263(),C.QF,new E.e264(),C.mi,new E.e265(),C.zz,new E.e266(),C.eO,new E.e267(),C.hO,new E.e268(),C.ei,new E.e269(),C.HK,new E.e270(),C.je,new E.e271(),C.Ef,new E.e272(),C.QL,new E.e273(),C.RH,new E.e274(),C.SP,new E.e275(),C.Q1,new E.e276(),C.ID,new E.e277(),C.dA,new E.e278(),C.bc,new E.e279(),C.kw,new E.e280(),C.nE,new E.e281(),C.ep,new E.e282(),C.hB,new E.e283(),C.J2,new E.e284(),C.hx,new E.e285(),C.zU,new E.e286(),C.OU,new E.e287(),C.bn,new E.e288(),C.mh,new E.e289(),C.Fh,new E.e290(),C.yv,new E.e291(),C.LP,new E.e292(),C.jh,new E.e293(),C.zd,new E.e294(),C.Db,new E.e295(),C.aF,new E.e296(),C.l4,new E.e297(),C.fj,new E.e298(),C.xw,new E.e299(),C.zn,new E.e300(),C.RJ,new E.e301(),C.Sk,new E.e302(),C.KS,new E.e303(),C.YE,new E.e304(),C.Uy,new E.e305()],null,null)
+y=P.EF([C.aP,new E.e306(),C.cg,new E.e307(),C.Zg,new E.e308(),C.S4,new E.e309(),C.AV,new E.e310(),C.bk,new E.e311(),C.lH,new E.e312(),C.am,new E.e313(),C.oE,new E.e314(),C.kG,new E.e315(),C.Wt,new E.e316(),C.mM,new E.e317(),C.aw,new E.e318(),C.XA,new E.e319(),C.i4,new E.e320(),C.mJ,new E.e321(),C.yL,new E.e322(),C.nr,new E.e323(),C.bJ,new E.e324(),C.kI,new E.e325(),C.vY,new E.e326(),C.VK,new E.e327(),C.aH,new E.e328(),C.GP,new E.e329(),C.vs,new E.e330(),C.Gr,new E.e331(),C.Fe,new E.e332(),C.tP,new E.e333(),C.yh,new E.e334(),C.Zb,new E.e335(),C.p8,new E.e336(),C.ld,new E.e337(),C.ne,new E.e338(),C.B0,new E.e339(),C.mr,new E.e340(),C.YT,new E.e341(),C.cJ,new E.e342(),C.WQ,new E.e343(),C.jU,new E.e344(),C.OO,new E.e345(),C.Mc,new E.e346(),C.QH,new E.e347(),C.rE,new E.e348(),C.nf,new E.e349(),C.Ge,new E.e350(),C.A7,new E.e351(),C.He,new E.e352(),C.oj,new E.e353(),C.d2,new E.e354(),C.uO,new E.e355(),C.fn,new E.e356(),C.yB,new E.e357(),C.Py,new E.e358(),C.uu,new E.e359(),C.qs,new E.e360(),C.rB,new E.e361(),C.z6,new E.e362(),C.hf,new E.e363(),C.uk,new E.e364(),C.Zi,new E.e365(),C.TN,new E.e366(),C.ur,new E.e367(),C.EV,new E.e368(),C.VI,new E.e369(),C.eh,new E.e370(),C.SA,new E.e371(),C.uG,new E.e372(),C.kV,new E.e373(),C.vp,new E.e374(),C.SR,new E.e375(),C.t6,new E.e376(),C.kB,new E.e377(),C.UX,new E.e378(),C.YS,new E.e379(),C.c6,new E.e380(),C.td,new E.e381(),C.zO,new E.e382(),C.YV,new E.e383(),C.If,new E.e384(),C.Ys,new E.e385(),C.EP,new E.e386(),C.nX,new E.e387(),C.BV,new E.e388(),C.XM,new E.e389(),C.Ic,new E.e390(),C.O9,new E.e391(),C.tW,new E.e392(),C.Wj,new E.e393(),C.vb,new E.e394(),C.QK,new E.e395(),C.Xd,new E.e396(),C.kY,new E.e397(),C.vK,new E.e398(),C.Tc,new E.e399(),C.GR,new E.e400(),C.KX,new E.e401(),C.ja,new E.e402(),C.Dj,new E.e403(),C.X2,new E.e404(),C.UY,new E.e405(),C.Aa,new E.e406(),C.nY,new E.e407(),C.tg,new E.e408(),C.HD,new E.e409(),C.iU,new E.e410(),C.eN,new E.e411(),C.Gs,new E.e412(),C.bE,new E.e413(),C.YD,new E.e414(),C.PX,new E.e415(),C.tf,new E.e416(),C.Jd,new E.e417(),C.pH,new E.e418(),C.Ve,new E.e419(),C.jM,new E.e420(),C.rd,new E.e421(),C.uX,new E.e422(),C.nt,new E.e423(),C.IT,new E.e424(),C.PM,new E.e425(),C.ks,new E.e426(),C.Om,new E.e427(),C.iC,new E.e428(),C.Nv,new E.e429(),C.FZ,new E.e430(),C.TW,new E.e431(),C.ft,new E.e432(),C.mi,new E.e433(),C.zz,new E.e434(),C.dA,new E.e435(),C.kw,new E.e436(),C.nE,new E.e437(),C.hx,new E.e438(),C.zU,new E.e439(),C.OU,new E.e440(),C.zd,new E.e441(),C.RJ,new E.e442(),C.YE,new E.e443()],null,null)
+x=P.EF([C.K4,C.qJ,C.yS,C.Mt,C.OG,C.il,C.nw,C.Mt,C.ou,C.Mt,C.oT,C.il,C.jR,C.Mt,C.XW,C.il,C.kH,C.Mt,C.Lg,C.qJ,C.Bi,C.il,C.KO,C.Mt,C.wk,C.Mt,C.jA,C.qJ,C.Jo,C.il,C.Az,C.Mt,C.Vx,C.Mt,C.Qb,C.Mt,C.lE,C.al,C.te,C.Mt,C.iD,C.Mt,C.Ju,C.Mt,C.uC,C.Mt,C.Wz,C.il,C.Ke,C.Mt,C.pF,C.il,C.Wh,C.Mt,C.qF,C.Mt,C.qZ,C.il,C.Zj,C.Mt,C.he,C.Mt,C.dD,C.al,C.hP,C.Mt,C.tc,C.Mt,C.rR,C.il,C.oG,C.Mt,C.mK,C.il,C.IZ,C.Mt,C.FG,C.il,C.pJ,C.Mt,C.tU,C.Mt,C.DD,C.Mt,C.Yy,C.il,C.Xv,C.Mt,C.ce,C.Mt,C.UJ,C.il,C.ca,C.Mt,C.Io,C.Mt,C.j4,C.Mt,C.EG,C.Mt,C.CT,C.Mt,C.mq,C.Mt,C.Tq,C.Mt,C.lp,C.il,C.PT,C.Mt,C.fU,C.Mt,C.pi,C.Mt,C.Fn,C.Mt,C.Ey,C.Mt,C.km,C.Mt,C.vw,C.Mt,C.LT,C.Mt,C.NW,C.Mz,C.ms,C.Mt,C.FA,C.Mt,C.Qt,C.Mt,C.a8,C.Mt,C.JW,C.Mt,C.Mf,C.Mt,C.rC,C.Mt,C.Dl,C.Mt,C.Mz,C.qJ,C.Nw,C.Mt,C.ON,C.Mt,C.Sb,C.al,C.Th,C.Mt,C.wH,C.Mt,C.pK,C.Mt,C.R9,C.Mt,C.il,C.Mt,C.QJ,C.Mt,C.u4,C.Mt,C.X8,C.Mt,C.kt,C.Mt,C.Y3,C.qJ,C.NR,C.Mt,C.tQ,C.Mt,C.bC,C.Mt,C.ws,C.Mt,C.cK,C.il,C.jK,C.Mt,C.qJ,C.jw,C.Mt,C.Mz,C.al,C.il],null,null)
+y=O.rH(!1,P.EF([C.K4,P.EF([C.S4,C.aj,C.AV,C.Qp,C.mJ,C.Qu,C.hf,C.V0],null,null),C.yS,P.EF([C.UX,C.Pt],null,null),C.OG,P.Fl(null,null),C.nw,P.EF([C.rB,C.xY,C.bz,C.Bk],null,null),C.ou,P.EF([C.XA,C.dq,C.yB,C.vZ,C.tg,C.DC],null,null),C.oT,P.EF([C.i4,C.Qs,C.Wm,C.QW],null,null),C.jR,P.EF([C.i4,C.aJ],null,null),C.XW,P.Fl(null,null),C.kH,P.EF([C.nr,C.BO],null,null),C.Lg,P.EF([C.S4,C.aj,C.AV,C.Qp,C.B0,C.iH,C.r1,C.nP,C.mr,C.iz],null,null),C.Bi,P.Fl(null,null),C.KO,P.EF([C.yh,C.Ul],null,null),C.wk,P.EF([C.AV,C.fr,C.eh,C.jO,C.Aa,C.k5,C.mi,C.yV],null,null),C.jA,P.EF([C.S4,C.aj,C.AV,C.Qp,C.YT,C.LC,C.hf,C.V0,C.UY,C.n6],null,null),C.Jo,P.Fl(null,null),C.Az,P.EF([C.WQ,C.ah],null,null),C.Vx,P.EF([C.OO,C.Cf],null,null),C.Qb,P.EF([C.Mc,C.f0],null,null),C.lE,P.EF([C.QK,C.P9],null,null),C.te,P.EF([C.nf,C.wR],null,null),C.iD,P.EF([C.QH,C.C4,C.qX,C.dO,C.PM,C.jv],null,null),C.Ju,P.EF([C.kG,C.Pr,C.rB,C.xY,C.Zi,C.xx,C.TN,C.Gj,C.vb,C.Mq,C.UL,C.bG],null,null),C.uC,P.EF([C.uO,C.KK,C.kY,C.rT],null,null),C.Wz,P.Fl(null,null),C.Ke,P.EF([C.fn,C.Kk],null,null),C.pF,P.Fl(null,null),C.Wh,P.EF([C.yL,C.j5],null,null),C.qF,P.EF([C.vp,C.o0],null,null),C.qZ,P.Fl(null,null),C.Zj,P.EF([C.oj,C.GT],null,null),C.he,P.EF([C.vp,C.o0],null,null),C.dD,P.EF([C.pH,C.xV],null,null),C.hP,P.EF([C.Wj,C.Ah],null,null),C.tc,P.EF([C.vp,C.o0],null,null),C.rR,P.Fl(null,null),C.oG,P.EF([C.jU,C.bw],null,null),C.mK,P.Fl(null,null),C.IZ,P.EF([C.vp,C.o0],null,null),C.FG,P.Fl(null,null),C.pJ,P.EF([C.Ve,C.X4],null,null),C.tU,P.EF([C.qs,C.MN],null,null),C.DD,P.EF([C.vp,C.o0],null,null),C.Yy,P.Fl(null,null),C.Xv,P.EF([C.YE,C.Wl],null,null),C.ce,P.EF([C.aH,C.w3,C.He,C.fz,C.vb,C.Mq,C.UL,C.bG,C.Dj,C.Ay,C.Gs,C.iO,C.bE,C.h3,C.YD,C.fP,C.TW,C.H0,C.xS,C.hd,C.zz,C.lS],null,null),C.UJ,P.Fl(null,null),C.ca,P.EF([C.bJ,C.UI,C.ox,C.Rh],null,null),C.Io,P.EF([C.rB,C.RU],null,null),C.j4,P.EF([C.rB,C.RU],null,null),C.EG,P.EF([C.rB,C.RU],null,null),C.CT,P.EF([C.rB,C.RU],null,null),C.mq,P.EF([C.rB,C.RU],null,null),C.Tq,P.EF([C.SR,C.S9,C.t6,C.b6,C.rP,C.Nt],null,null),C.lp,P.Fl(null,null),C.PT,P.EF([C.EV,C.ZQ],null,null),C.fU,P.EF([C.kB,C.nq,C.LH,C.oB,C.EP,C.db],null,null),C.pi,P.EF([C.rB,C.xY,C.kB,C.nq,C.LH,C.oB],null,null),C.Fn,P.EF([C.rB,C.xY,C.bz,C.Bk,C.EP,C.GO,C.tf,C.q6],null,null),C.Ey,P.EF([C.XA,C.dq,C.uk,C.rY],null,null),C.km,P.EF([C.rB,C.RU,C.bz,C.Bk,C.uk,C.rY],null,null),C.vw,P.EF([C.uk,C.rY,C.EV,C.ZQ],null,null),C.LT,P.EF([C.Ys,C.Cg],null,null),C.NW,P.Fl(null,null),C.ms,P.EF([C.cg,C.ll,C.uk,C.rY,C.kV,C.vz],null,null),C.FA,P.EF([C.cg,C.ll,C.kV,C.vz],null,null),C.Qt,P.EF([C.ld,C.Gw],null,null),C.a8,P.EF([C.p8,C.uc,C.ld,C.Gw],null,null),C.JW,P.EF([C.aP,C.oh,C.AV,C.Qp,C.hf,C.V0],null,null),C.Mf,P.EF([C.uk,C.rY],null,null),C.rC,P.EF([C.uO,C.JT,C.td,C.Zk,C.XM,C.Tt,C.tg,C.DC],null,null),C.Dl,P.EF([C.VK,C.lW],null,null),C.Mz,P.EF([C.O9,C.q9,C.ba,C.kQ],null,null),C.Nw,P.EF([C.S4,C.aj,C.VI,C.w6],null,null),C.ON,P.EF([C.kI,C.Bf,C.vY,C.ZS,C.Rs,C.EW,C.vs,C.MP,C.Gr,C.VJ,C.TU,C.Cp,C.A7,C.SD,C.SA,C.KI,C.uG,C.Df,C.PX,C.jz,C.N8,C.qE,C.nt,C.VS,C.IT,C.NL,C.li,C.Tz],null,null),C.Sb,P.EF([C.tW,C.It,C.CG,C.Ml],null,null),C.Th,P.EF([C.PX,C.jz],null,null),C.wH,P.EF([C.yh,C.lJ],null,null),C.pK,P.EF([C.ne,C.bp],null,null),C.R9,P.EF([C.kY,C.TO,C.Wm,C.QW],null,null),C.il,P.EF([C.uu,C.NJ,C.kY,C.TO,C.Wm,C.QW],null,null),C.QJ,P.EF([C.B0,C.iH,C.vp,C.Rz],null,null),C.u4,P.EF([C.B0,C.iH,C.SR,C.xR],null,null),C.X8,P.EF([C.Zg,C.b7,C.td,C.Zk,C.Gn,C.az],null,null),C.kt,P.EF([C.nE,C.FM],null,null),C.Y3,P.EF([C.bk,C.NS,C.lH,C.dG,C.zU,C.uT],null,null),C.NR,P.EF([C.B0,C.iH,C.rE,C.B7],null,null),C.tQ,P.EF([C.kw,C.oC],null,null),C.bC,P.EF([C.am,C.JD,C.oE,C.r2,C.uX,C.Eb],null,null),C.ws,P.EF([C.ft,C.Gz],null,null),C.cK,P.Fl(null,null),C.jK,P.EF([C.yh,C.Ul,C.RJ,C.BP],null,null)],null,null),z,P.EF([C.aP,"active",C.IH,"address",C.cg,"anchor",C.j2,"app",C.Zg,"args",C.Wq,"asStringLiteral",C.ET,"assertsEnabled",C.BE,"averageCollectionPeriodInMillis",C.WC,"bpt",C.hR,"breakpoint",C.S4,"busy",C.Ro,"buttonClick",C.hN,"bytes",C.AV,"callback",C.bV,"capacity",C.C0,"change",C.eZ,"changeSort",C.bk,"checked",C.lH,"checkedText",C.am,"chromeTargets",C.oE,"chromiumAddress",C.kG,"classTable",C.OI,"classes",C.Wt,"clazz",C.I9,"closeItem",C.To,"closing",C.mM,"closureCtxt",C.aw,"closureFunc",C.XA,"cls",C.i4,"code",C.mJ,"color",C.qt,"coloring",C.p1,"columns",C.yJ,"connectStandalone",C.la,"connectToVm",C.yL,"connection",C.nr,"context",C.bJ,"counters",C.ox,"countersChanged",C.Je,"current",C.kI,"currentLine",C.vY,"currentPos",C.Rs,"currentPosChanged",C.hJ,"dartMetrics",C.Lw,"deleteVm",C.eR,"deoptimizations",C.LS,"description",C.iE,"descriptor",C.f4,"descriptors",C.VK,"devtools",C.aH,"displayCutoff",C.aK,"doAction",C.GP,"element",C.mw,"elements",C.vs,"endLine",C.Gr,"endPos",C.TU,"endPosChanged",C.Fe,"endTokenPos",C.tP,"entry",C.yh,"error",C.Zb,"eval",C.u7,"evalNow",C.p8,"event",C.qR,"eventType",C.ld,"events",C.ne,"exception",C.B0,"expand",C.r1,"expandChanged",C.mr,"expanded",C.Ek,"expander",C.Pn,"expanderStyle",C.YT,"expr",C.h7,"external",C.R3,"fd",C.cJ,"fetchInboundReferences",C.WQ,"field",C.fV,"fields",C.jU,"file",C.OO,"flag",C.Mc,"flagList",C.FP,"formatSize",C.kF,"formatTime",C.UD,"formattedAddress",C.Aq,"formattedAverage",C.DS,"formattedCollections",C.C9,"formattedDeoptId",C.VF,"formattedExclusive",C.uU,"formattedExclusiveTicks",C.YJ,"formattedInclusive",C.eF,"formattedInclusiveTicks",C.oI,"formattedLine",C.ST,"formattedTotalCollectionTime",C.QH,"fragmentation",C.qX,"fragmentationChanged",C.rE,"frame",C.nf,"function",C.EI,"functions",C.JB,"getColumnLabel",C.RY,"getTabs",C.d4,"goto",C.cF,"gotoLink",C.SI,"hasDescriptors",C.zS,"hasDisassembly",C.YA,"hasNoAllocations",C.Ge,"hashLinkWorkaround",C.A7,"height",C.He,"hideTagsChecked",C.im,"history",C.Ss,"hits",C.k6,"hoverText",C.oj,"httpServer",C.PJ,"human",C.Yb,"id",C.q2,"idle",C.d2,"imp",C.kN,"imports",C.uO,"inboundReferences",C.fn,"instance",C.yB,"instances",C.eJ,"instruction",C.iG,"instructions",C.Py,"interface",C.pC,"interfaces",C.uu,"internal",C.qs,"io",C.XH,"isAbstract",C.XJ,"isAbstractType",C.tJ,"isBool",C.F8,"isChromeTarget",C.fy,"isClosure",C.C1,"isComment",C.Nr,"isConst",C.nL,"isCurrentTarget",C.a0,"isDart",C.Yg,"isDartCode",C.bR,"isDouble",C.ai,"isEmpty",C.ob,"isError",C.MY,"isInlinable",C.Wg,"isInt",C.tD,"isList",C.QS,"isMap",C.C7,"isMirrorReference",C.nZ,"isNotEmpty",C.Of,"isNull",C.Vl,"isOptimizable",C.pY,"isOptimized",C.XL,"isPatch",C.LA,"isPipe",C.Iw,"isPlainInstance",C.tz,"isSentinel",C.AT,"isStatic",C.Lk,"isString",C.GS,"isWeakProperty",C.rB,"isolate",C.bz,"isolateChanged",C.Jx,"isolates",C.b5,"jumpTarget",C.z6,"key",C.SY,"keys",C.Lc,"kind",C.hf,"label",C.uk,"last",C.Zi,"lastAccumulatorReset",C.TN,"lastServiceGC",C.GI,"lastUpdate",C.Wn,"length",C.ur,"lib",C.VN,"libraries",C.EV,"library",C.VI,"line",C.eh,"lineMode",C.SA,"lines",C.uG,"linesReady",C.kV,"link",C.vp,"list",C.cc,"listening",C.DY,"loading",C.Lx,"localAddress",C.M3,"localPort",C.wT,"mainPort",C.JK,"makeLineId",C.SR,"map",C.t6,"mapAsString",C.rP,"mapChanged",C.qi,"max",C.pX,"message",C.kB,"metric",C.LH,"metricChanged",C.a2,"min",C.VD,"mouseOut",C.NN,"mouseOver",C.UX,"msg",C.YS,"name",C.pu,"nameIsEmpty",C.uw,"nativeFields",C.BJ,"newSpace",C.c6,"notifications",C.td,"object",C.Gn,"objectChanged",C.zO,"objectPool",C.vg,"oldSpace",C.YV,"owningClass",C.If,"owningLibrary",C.Ys,"pad",C.zm,"padding",C.EP,"page",C.nX,"parent",C.BV,"parentContext",C.xP,"parseInt",C.XM,"path",C.Ic,"pause",C.yG,"pauseEvent",C.uI,"pid",C.O9,"pollPeriod",C.ba,"pollPeriodChanged",C.tW,"pos",C.CG,"posChanged",C.Jf,"possibleBpt",C.Wj,"process",C.vb,"profile",C.UL,"profileChanged",C.AY,"protocol",C.QK,"qualified",C.AO,"qualifiedName",C.Xd,"reachable",C.I7,"readClosed",C.kY,"ref",C.Wm,"refChanged",C.vK,"reference",C.Tc,"referent",C.GR,"refresh",C.KX,"refreshCoverage",C.ja,"refreshGC",C.mn,"refreshRateChange",C.Dj,"refreshTime",C.ir,"relativeLink",C.dx,"remoteAddress",C.ni,"remotePort",C.X2,"resetAccumulator",C.F3,"response",C.UY,"result",C.Aa,"results",C.nY,"resume",C.tg,"retainedBytes",C.HD,"retainedSize",C.iU,"retainingPath",C.eN,"rootLib",C.ue,"row",C.nh,"rows",C.L2,"running",C.vm,"sampleBufferSizeChange",C.Gs,"sampleCount",C.bE,"sampleDepth",C.YD,"sampleRate",C.PX,"script",C.N8,"scriptChanged",C.EA,"scripts",C.oW,"selectExpr",C.KC,"selectMetric",C.tf,"selectedMetric",C.da,"size",C.Jd,"slot",C.Y4,"slotIsArrayIndex",C.Si,"slotIsField",C.pH,"small",C.Ve,"socket",C.jM,"socketOwner",C.rd,"source",C.W5,"standalone",C.uX,"standaloneVmAddress",C.nt,"startLine",C.IT,"startPos",C.li,"startPosChanged",C.PM,"status",C.ks,"stepInto",C.Om,"stepOut",C.iC,"stepOver",C.Nv,"subclass",C.Wo,"subclasses",C.FZ,"superclass",C.TW,"tagSelector",C.xS,"tagSelectorChanged",C.ft,"target",C.QF,"targets",C.mi,"text",C.zz,"timeSpan",C.eO,"timeStamp",C.hO,"tipExclusive",C.ei,"tipKind",C.HK,"tipParent",C.je,"tipTicks",C.Ef,"tipTime",C.QL,"toString",C.RH,"toStringAsFixed",C.SP,"toggleBreakpoint",C.Q1,"toggleExpand",C.ID,"toggleExpanded",C.dA,"tokenPos",C.bc,"topFrame",C.kw,"trace",C.nE,"tracer",C.ep,"tree",C.hB,"type",C.J2,"typeChecksEnabled",C.hx,"typeClass",C.zU,"uncheckedText",C.OU,"unoptimizedCode",C.bn,"updateLineMode",C.mh,"uptime",C.Fh,"url",C.yv,"usageCounter",C.LP,"used",C.jh,"v",C.zd,"value",C.Db,"valueAsString",C.aF,"valueAsStringIsTruncated",C.l4,"values",C.fj,"variable",C.xw,"variables",C.zn,"version",C.RJ,"vm",C.Sk,"vmMetrics",C.KS,"vmName",C.YE,"webSocket",C.Uy,"writeClosed"],null,null),x,y,null)
 $.j8=new O.fH(y)
 $.Yv=new O.bY(y)
 $.qe=new O.ut(y)
-$.M6=[new E.e430(),new E.e431(),new E.e432(),new E.e433(),new E.e434(),new E.e435(),new E.e436(),new E.e437(),new E.e438(),new E.e439(),new E.e440(),new E.e441(),new E.e442(),new E.e443(),new E.e444(),new E.e445(),new E.e446(),new E.e447(),new E.e448(),new E.e449(),new E.e450(),new E.e451(),new E.e452(),new E.e453(),new E.e454(),new E.e455(),new E.e456(),new E.e457(),new E.e458(),new E.e459(),new E.e460(),new E.e461(),new E.e462(),new E.e463(),new E.e464(),new E.e465(),new E.e466(),new E.e467(),new E.e468(),new E.e469(),new E.e470(),new E.e471(),new E.e472(),new E.e473(),new E.e474(),new E.e475(),new E.e476(),new E.e477(),new E.e478(),new E.e479(),new E.e480(),new E.e481(),new E.e482(),new E.e483(),new E.e484(),new E.e485(),new E.e486(),new E.e487(),new E.e488(),new E.e489(),new E.e490(),new E.e491(),new E.e492(),new E.e493(),new E.e494(),new E.e495(),new E.e496(),new E.e497(),new E.e498(),new E.e499(),new E.e500(),new E.e501(),new E.e502(),new E.e503(),new E.e504(),new E.e505(),new E.e506(),new E.e507(),new E.e508(),new E.e509(),new E.e510(),new E.e511(),new E.e512(),new E.e513(),new E.e514(),new E.e515(),new E.e516(),new E.e517()]
+$.M6=[new E.e444(),new E.e445(),new E.e446(),new E.e447(),new E.e448(),new E.e449(),new E.e450(),new E.e451(),new E.e452(),new E.e453(),new E.e454(),new E.e455(),new E.e456(),new E.e457(),new E.e458(),new E.e459(),new E.e460(),new E.e461(),new E.e462(),new E.e463(),new E.e464(),new E.e465(),new E.e466(),new E.e467(),new E.e468(),new E.e469(),new E.e470(),new E.e471(),new E.e472(),new E.e473(),new E.e474(),new E.e475(),new E.e476(),new E.e477(),new E.e478(),new E.e479(),new E.e480(),new E.e481(),new E.e482(),new E.e483(),new E.e484(),new E.e485(),new E.e486(),new E.e487(),new E.e488(),new E.e489(),new E.e490(),new E.e491(),new E.e492(),new E.e493(),new E.e494(),new E.e495(),new E.e496(),new E.e497(),new E.e498(),new E.e499(),new E.e500(),new E.e501(),new E.e502(),new E.e503(),new E.e504(),new E.e505(),new E.e506(),new E.e507(),new E.e508(),new E.e509(),new E.e510(),new E.e511(),new E.e512(),new E.e513(),new E.e514(),new E.e515(),new E.e516(),new E.e517(),new E.e518(),new E.e519(),new E.e520(),new E.e521(),new E.e522(),new E.e523(),new E.e524(),new E.e525(),new E.e526(),new E.e527(),new E.e528(),new E.e529(),new E.e530(),new E.e531(),new E.e532(),new E.e533(),new E.e534()]
 $.UG=!0
 F.E2()},"$0","jk",0,0,17],
 em:{
@@ -2676,2134 +2675,2202 @@
 $isEH:true},
 wa:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gA3()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.mN(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 Or:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gqZ()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gA3()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 YL:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gqr()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gqZ()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 wf:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gQ1()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gqr()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 Oa:{
 "^":"TpZ:12;",
-$1:[function(a){return J.zL(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gQ1()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 emv:{
 "^":"TpZ:12;",
-$1:[function(a){return J.aA(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.zL(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 Lbd:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gfj()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.aA(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 QAa:{
 "^":"TpZ:12;",
-$1:[function(a){return J.WT(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gfj()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 CvS:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gkV()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.WT(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 edy:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Wp(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gkV()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 waE:{
 "^":"TpZ:12;",
-$1:[function(a){return J.n9(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Wp(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 Ore:{
 "^":"TpZ:12;",
-$1:[function(a){return J.K0(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.n9(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 YLa:{
 "^":"TpZ:12;",
-$1:[function(a){return J.hn(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.K0(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 wfa:{
 "^":"TpZ:12;",
-$1:[function(a){return J.HP(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.hn(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 Oaa:{
 "^":"TpZ:12;",
-$1:[function(a){return J.zF(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.HP(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e0:{
 "^":"TpZ:12;",
-$1:[function(a){return J.yz(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.zF(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e1:{
 "^":"TpZ:12;",
-$1:[function(a){return J.pP(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.yz(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e2:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gUP()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.pP(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e3:{
 "^":"TpZ:12;",
-$1:[function(a){return J.RC(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gUP()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e4:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gaP()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.RC(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e5:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gwz()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gaP()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e6:{
 "^":"TpZ:12;",
-$1:[function(a){return J.E3(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gu5()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e7:{
 "^":"TpZ:12;",
-$1:[function(a){return J.on(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gwz()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e8:{
 "^":"TpZ:12;",
-$1:[function(a){return J.yI(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.E3(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e9:{
 "^":"TpZ:12;",
-$1:[function(a){return J.SM(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.on(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e10:{
 "^":"TpZ:12;",
-$1:[function(a){return a.goH()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.yI(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e11:{
 "^":"TpZ:12;",
-$1:[function(a){return J.dw(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.SM(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e12:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ev(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.goH()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e13:{
 "^":"TpZ:12;",
-$1:[function(a){return J.xe(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.dw(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e14:{
 "^":"TpZ:12;",
-$1:[function(a){return J.OT(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ev(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e15:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ok(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.xe(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e16:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gl()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ux(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e17:{
 "^":"TpZ:12;",
-$1:[function(a){return J.h6(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.OT(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e18:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Jr(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ok(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e19:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Hs(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gl()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e20:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gpG()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.h6(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e21:{
 "^":"TpZ:12;",
-$1:[function(a){return J.TG(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Jr(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e22:{
 "^":"TpZ:12;",
-$1:[function(a){return a.guh()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Hs(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e23:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gGB()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gpG()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e24:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gSL()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.TG(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e25:{
 "^":"TpZ:12;",
-$1:[function(a){return a.guH()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.guh()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e26:{
 "^":"TpZ:12;",
-$1:[function(a){return J.GF(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gGB()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e27:{
 "^":"TpZ:12;",
-$1:[function(a){return J.BT(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gSL()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e28:{
 "^":"TpZ:12;",
-$1:[function(a){return J.H2(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.guH()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e29:{
 "^":"TpZ:12;",
-$1:[function(a){return J.y3(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.GF(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e30:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Hg(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.BT(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e31:{
 "^":"TpZ:12;",
-$1:[function(a){return J.k0(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.H2(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e32:{
 "^":"TpZ:12;",
-$1:[function(a){return J.rw(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.y3(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e33:{
 "^":"TpZ:12;",
-$1:[function(a){return J.wt(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Hg(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e34:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gej()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.k0(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e35:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gw2()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.rw(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e36:{
 "^":"TpZ:12;",
-$1:[function(a){return J.w8(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.wt(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e37:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ht(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gej()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e38:{
 "^":"TpZ:12;",
-$1:[function(a){return J.kv(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gw2()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e39:{
 "^":"TpZ:12;",
-$1:[function(a){return J.a3(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.w8(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e40:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ts(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ht(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e41:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ky(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.kv(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e42:{
 "^":"TpZ:12;",
-$1:[function(a){return J.io(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.a3(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e43:{
 "^":"TpZ:12;",
-$1:[function(a){return J.UE(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ts(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e44:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Gl(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.um(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e45:{
 "^":"TpZ:12;",
-$1:[function(a){return J.IL(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.io(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e46:{
 "^":"TpZ:12;",
-$1:[function(a){return J.nb(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.UE(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e47:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gty()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Gl(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e48:{
 "^":"TpZ:12;",
-$1:[function(a){return J.IR(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.IL(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e49:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gMX()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.nb(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e50:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gki()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gty()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e51:{
 "^":"TpZ:12;",
-$1:[function(a){return J.LY(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.IR(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e52:{
 "^":"TpZ:12;",
-$1:[function(a){return J.pm(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gMX()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e53:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gtJ()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gki()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e54:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ec(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.LY(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e55:{
 "^":"TpZ:12;",
-$1:[function(a){return J.PK(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.pm(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e56:{
 "^":"TpZ:12;",
-$1:[function(a){return J.YH(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gtJ()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e57:{
 "^":"TpZ:12;",
-$1:[function(a){return J.WX(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ec(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e58:{
 "^":"TpZ:12;",
-$1:[function(a){return J.IP(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.PK(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e59:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gZd()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.YH(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e60:{
 "^":"TpZ:12;",
-$1:[function(a){return J.TM(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.WX(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e61:{
 "^":"TpZ:12;",
-$1:[function(a){return J.xo(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.IP(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e62:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gkA()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gZd()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e63:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gGK()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.TM(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e64:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gan()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.xo(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e65:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gcQ()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gkA()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e66:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gS7()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gGK()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e67:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gmE()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gan()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e68:{
 "^":"TpZ:12;",
-$1:[function(a){return J.PY(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gcQ()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e69:{
 "^":"TpZ:12;",
-$1:[function(a){return J.bu(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gS7()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e70:{
 "^":"TpZ:12;",
-$1:[function(a){return J.eU(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gmE()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e71:{
 "^":"TpZ:12;",
-$1:[function(a){return J.zN(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.PY(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e72:{
 "^":"TpZ:12;",
-$1:[function(a){return J.m4(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.bu(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e73:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gmu()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.eU(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e74:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gCO()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.zN(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e75:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Jv(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.m4(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e76:{
 "^":"TpZ:12;",
-$1:[function(a){return J.tw(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gmu()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e77:{
 "^":"TpZ:12;",
-$1:[function(a){return J.dE(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gCO()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e78:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gX1()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Jv(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e79:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gUa()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.tw(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e80:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gMp()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.dE(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e81:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Er(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gX1()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e82:{
 "^":"TpZ:12;",
-$1:[function(a){return J.OB(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gUa()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e83:{
 "^":"TpZ:12;",
-$1:[function(a){return J.YQ(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gMp()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e84:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Xf(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Er(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e85:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gc1()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.OB(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e86:{
 "^":"TpZ:12;",
-$1:[function(a){return J.z4(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.YQ(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e87:{
 "^":"TpZ:12;",
-$1:[function(a){return J.aB(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Xf(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e88:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gu0()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gc1()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e89:{
 "^":"TpZ:12;",
-$1:[function(a){return J.eS(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.aW(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e90:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gaj()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.aB(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e91:{
 "^":"TpZ:12;",
-$1:[function(a){return a.giq()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gu0()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e92:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gBm()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.eS(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e93:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ir(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gaj()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e94:{
 "^":"TpZ:12;",
-$1:[function(a){return J.fh(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.giq()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e95:{
 "^":"TpZ:12;",
-$1:[function(a){return J.NDJ(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gBm()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e96:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gNI()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ir(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e97:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gva()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.fh(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e98:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gKt()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.NDJ(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e99:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gp2()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gNI()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e100:{
 "^":"TpZ:12;",
-$1:[function(a){return J.IA(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gva()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e101:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ew(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gKt()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e102:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gVM()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gp2()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e103:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gFY()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ns(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e104:{
 "^":"TpZ:12;",
-$1:[function(a){return J.bL(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ew(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e105:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gBF()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gVM()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e106:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gUB()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.glO()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e107:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gRs()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gFY()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e108:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ix(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.bL(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e109:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gMA()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gBF()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e110:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gqy()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gUB()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e111:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gzx()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gRs()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e112:{
 "^":"TpZ:12;",
-$1:[function(a){return J.FN(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ix(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e113:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gt3()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gMA()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e114:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gho()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gqy()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e115:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gNs()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gzx()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e116:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gWL()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.FN(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e117:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Zo(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gt3()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e118:{
 "^":"TpZ:12;",
-$1:[function(a){return J.PG(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gho()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e119:{
 "^":"TpZ:12;",
-$1:[function(a){return J.pO(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gWL()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e120:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gHh()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Zo(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e121:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gW1()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.PG(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e122:{
 "^":"TpZ:12;",
-$1:[function(a){return a.goF()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gJE()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e123:{
 "^":"TpZ:12;",
-$1:[function(a){return a.geh()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.pO(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e124:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gHY()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gHh()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e125:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gl5()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gW1()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e126:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gFo()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.goF()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e127:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gu7()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.geh()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e128:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gqN()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gHY()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e129:{
 "^":"TpZ:12;",
-$1:[function(a){return J.aT(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gXM()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e130:{
 "^":"TpZ:12;",
-$1:[function(a){return J.KG(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gl5()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e131:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gi2()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gFo()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e132:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gEB()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gu7()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e133:{
 "^":"TpZ:12;",
-$1:[function(a){return J.AW(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gl2()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e134:{
 "^":"TpZ:12;",
-$1:[function(a){return J.iY(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.aT(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e135:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Iz(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.KG(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e136:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Yq(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gi2()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e137:{
 "^":"TpZ:12;",
-$1:[function(a){return J.MQ(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gEB()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e138:{
 "^":"TpZ:12;",
-$1:[function(a){return J.X7(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.AW(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e139:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Kj(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.iY(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e140:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gJW()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Iz(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e141:{
 "^":"TpZ:12;",
-$1:[function(a){return J.q8(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Yq(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e142:{
 "^":"TpZ:12;",
-$1:[function(a){return a.ghX()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.MQ(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e143:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gvU()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.X7(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e144:{
 "^":"TpZ:12;",
-$1:[function(a){return J.jl(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Kj(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e145:{
 "^":"TpZ:12;",
-$1:[function(a){return J.f2(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gJW()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e146:{
 "^":"TpZ:12;",
-$1:[function(a){return J.zY(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.q8(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e147:{
 "^":"TpZ:12;",
-$1:[function(a){return J.de(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.ghX()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e148:{
 "^":"TpZ:12;",
-$1:[function(a){return J.t0(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gvU()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e149:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ds(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.jl(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e150:{
 "^":"TpZ:12;",
-$1:[function(a){return J.cO(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.f2(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e151:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gzM()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.zY(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e152:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gn0()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.de(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e153:{
 "^":"TpZ:12;",
-$1:[function(a){return a.giP()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.t0(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e154:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gfJ()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ds(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e155:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gIT()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.cO(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e156:{
 "^":"TpZ:12;",
-$1:[function(a){return J.c7(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gzM()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e157:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Yf(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gn0()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e158:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ol(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.giP()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e159:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Y7(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gfJ()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e160:{
 "^":"TpZ:12;",
-$1:[function(a){return J.PR(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gIT()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e161:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Oh(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.c7(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e162:{
 "^":"TpZ:12;",
-$1:[function(a){return J.qx(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Yf(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e163:{
 "^":"TpZ:12;",
-$1:[function(a){return J.dj(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ol(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e164:{
 "^":"TpZ:12;",
-$1:[function(a){return J.GL(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Y7(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e165:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ZF(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.PR(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e166:{
 "^":"TpZ:12;",
-$1:[function(a){return J.PW(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Oh(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e167:{
 "^":"TpZ:12;",
-$1:[function(a){return J.rK(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.qx(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e168:{
 "^":"TpZ:12;",
-$1:[function(a){return J.DA(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.dj(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e169:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Pf(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.GL(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e170:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gbA()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ZF(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e171:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gUY()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.PW(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e172:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gvK()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.X6(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e173:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Jj(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.DA(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e174:{
 "^":"TpZ:12;",
-$1:[function(a){return J.t8(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Pf(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e175:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gL1()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gbA()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e176:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gxQ()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gUY()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e177:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gEl()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gvK()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e178:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gxH()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Jj(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e179:{
 "^":"TpZ:12;",
-$1:[function(a){return J.iB(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.t8(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e180:{
 "^":"TpZ:12;",
-$1:[function(a){return J.mF(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gL1()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e181:{
 "^":"TpZ:12;",
-$1:[function(a){return J.MT(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gxQ()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e182:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Lp(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gEl()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e183:{
 "^":"TpZ:12;",
-$1:[function(a){return J.eb(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gxH()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e184:{
 "^":"TpZ:12;",
-$1:[function(a){return J.AF(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.iB(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e185:{
 "^":"TpZ:12;",
-$1:[function(a){return J.fi(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.mF(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e186:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Kl(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.MT(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e187:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gU6()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Lp(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e188:{
 "^":"TpZ:12;",
-$1:[function(a){return J.cj(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gqH()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e189:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Tm(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.eb(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e190:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Yd(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.AF(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e191:{
 "^":"TpZ:12;",
-$1:[function(a){return J.L6(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.fi(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e192:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gj9()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Kl(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e193:{
 "^":"TpZ:12;",
-$1:[function(a){return J.JX(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gU6()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e194:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Tv(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.cj(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e195:{
 "^":"TpZ:12;",
-$1:[function(a){return J.CN(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Tm(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e196:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ql(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Yd(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e197:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ul(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.L6(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e198:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gUx()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gj9()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e199:{
 "^":"TpZ:12;",
-$1:[function(a){return J.id(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.JX(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e200:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gm8()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Tv(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e201:{
 "^":"TpZ:12;",
-$1:[function(a){return J.BZ(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.CN(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e202:{
 "^":"TpZ:12;",
-$1:[function(a){return J.H1(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ql(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e203:{
 "^":"TpZ:12;",
-$1:[function(a){return a.ghL()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ul(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e204:{
 "^":"TpZ:12;",
-$1:[function(a){return J.At(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gUx()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e205:{
 "^":"TpZ:12;",
-$1:[function(a){return J.dZ(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.id(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e206:{
 "^":"TpZ:12;",
-$1:[function(a){return J.GH(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gm8()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e207:{
 "^":"TpZ:12;",
-$1:[function(a){return J.up(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.BZ(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e208:{
 "^":"TpZ:12;",
-$1:[function(a){return J.bS(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.H1(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e209:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gua()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.ghL()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e210:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gNS()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gCM()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e211:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gzK()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.At(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e212:{
 "^":"TpZ:12;",
-$1:[function(a){return J.iL(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.dZ(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e213:{
 "^":"TpZ:12;",
-$1:[function(a){return J.LM(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.GH(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e214:{
 "^":"TpZ:12;",
-$1:[function(a){return J.uW(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.up(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e215:{
 "^":"TpZ:12;",
-$1:[function(a){return J.W2(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.bS(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e216:{
 "^":"TpZ:12;",
-$1:[function(a){return J.UT(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gua()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e217:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Kd(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gNS()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e218:{
 "^":"TpZ:12;",
-$1:[function(a){return J.pU(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gzK()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e219:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Tg(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.iL(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e220:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gVc()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.LM(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e221:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gpF()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.uW(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e222:{
 "^":"TpZ:12;",
-$1:[function(a){return J.TY(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.W2(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e223:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gGL()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.UT(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e224:{
 "^":"TpZ:12;",
-$1:[function(a){return J.X9(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Kd(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e225:{
 "^":"TpZ:12;",
-$1:[function(a){return J.nv(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.pU(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e226:{
 "^":"TpZ:12;",
-$1:[function(a){return J.UP(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Tg(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e227:{
 "^":"TpZ:12;",
-$1:[function(a){return J.UA(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gVc()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e228:{
 "^":"TpZ:12;",
-$1:[function(a){return J.zE(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gpF()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e229:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Zs(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.TY(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e230:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gXR()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gGL()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e231:{
 "^":"TpZ:12;",
-$1:[function(a){return J.NB(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.X9(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e232:{
 "^":"TpZ:12;",
-$1:[function(a){return J.le(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.nv(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e233:{
 "^":"TpZ:12;",
-$1:[function(a){return J.bh(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.UP(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e234:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Y5(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.UA(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e235:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ue(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.zE(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e236:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Cs(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Zs(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e237:{
 "^":"TpZ:12;",
-$1:[function(a){return J.nd(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gXR()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e238:{
 "^":"TpZ:12;",
-$1:[function(a){return J.U8(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.uN(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e239:{
 "^":"TpZ:12;",
-$1:[function(a){return J.oN(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.le(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e240:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gip()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.bh(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e241:{
 "^":"TpZ:12;",
-$1:[function(a){return J.M2(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Y5(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e242:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gp8()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ue(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e243:{
 "^":"TpZ:12;",
-$1:[function(a){return J.F9(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Cs(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e244:{
 "^":"TpZ:12;",
-$1:[function(a){return J.HB(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.dK(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e245:{
 "^":"TpZ:12;",
-$1:[function(a){return J.fM(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.U8(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e246:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ay(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.oN(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e247:{
 "^":"TpZ:12;",
-$1:[function(a){return J.jB(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gip()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e248:{
 "^":"TpZ:12;",
-$1:[function(a){return J.C7(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.M2(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e249:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Hy(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gp8()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e250:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Pq(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.F9(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e251:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gDo()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.HB(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e252:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gLT()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.fM(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e253:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gAY()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ay(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e254:{
 "^":"TpZ:12;",
-$1:[function(a){return J.j1(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.jB(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e255:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Aw(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.lA(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e256:{
 "^":"TpZ:12;",
-$1:[function(a){return J.l2(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Hy(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e257:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gm2()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Pq(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e258:{
 "^":"TpZ:12;",
-$1:[function(a){return J.dY(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gDo()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e259:{
 "^":"TpZ:12;",
-$1:[function(a){return J.yq(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gLT()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e260:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Xr(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gAY()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e261:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gzg()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.j1(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e262:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gZn()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Aw(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e263:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gvs()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.l2(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e264:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gVh()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gm2()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e265:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gZX()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.dY(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e266:{
 "^":"TpZ:12;",
-$1:[function(a){return J.PS(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.yq(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e267:{
 "^":"TpZ:12;",
-$1:[function(a){return J.As(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Xr(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e268:{
 "^":"TpZ:12;",
-$1:[function(a){return J.YG(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gzg()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e269:{
 "^":"TpZ:12;",
-$1:[function(a){return J.SG(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gZn()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e270:{
 "^":"TpZ:12;",
-$1:[function(a){return J.fv(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gvs()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e271:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gVF()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gVh()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e272:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gkw()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gZX()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e273:{
 "^":"TpZ:12;",
-$1:[function(a){return J.K2(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.PS(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e274:{
 "^":"TpZ:12;",
-$1:[function(a){return J.eK(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.As(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e275:{
 "^":"TpZ:12;",
-$1:[function(a){return J.uy(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.YG(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e276:{
 "^":"TpZ:12;",
-$1:[function(a){return J.zH(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.SG(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e277:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gdW()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.fv(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e278:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gCY()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gVF()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e279:{
 "^":"TpZ:12;",
-$1:[function(a){return J.un(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gkw()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e280:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gjW()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.K2(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e281:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Sl(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.eK(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e282:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gI2()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.uy(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e283:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Q2(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.zH(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e284:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gSu()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gdW()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e285:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gSU()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gCY()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e286:{
 "^":"TpZ:12;",
-$1:[function(a){return a.ghW()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.un(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e287:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Vm(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gjW()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e288:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gPE()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Sl(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e289:{
 "^":"TpZ:12;",
-$1:[function(a){return J.hI(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gI2()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e290:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gYY()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Q2(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e291:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gZ3()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gSu()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e292:{
 "^":"TpZ:12;",
-$1:[function(a){return J.NV(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gSU()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e293:{
 "^":"TpZ:12;",
-$1:[function(a){return J.wp(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.ghW()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e294:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gSn()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Vm(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e295:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gTE()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gPE()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e296:{
 "^":"TpZ:12;",
-$1:[function(a){return J.NC(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gSS()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e297:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gaU()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.hI(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e298:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.RX(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return a.gYY()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e299:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.Px(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return a.gZ3()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e300:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.Tu(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return J.NV(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e301:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.Hh(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return J.wp(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e302:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.Fv(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return a.gSn()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e303:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.Ae(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return a.gTE()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e304:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.IX(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return J.NC(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e305:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.Ed(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return a.gaU()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e306:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.NE(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.RX(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e307:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.WI(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Px(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e308:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sUP(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Tu(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e309:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.swz(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Hh(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e310:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.NZ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Fv(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e311:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.T5(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Ae(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e312:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.FI(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.IX(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e313:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.i0(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Ed(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e314:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Sf(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.NE(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e315:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Jl(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.WI(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e316:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.TP(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sUP(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e317:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Nh(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.su5(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e318:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.au(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.swz(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e319:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Iw(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.NZ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e320:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Ac(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.T5(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e321:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Yz(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.FI(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e322:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sej(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.i0(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e323:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sw2(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Hf(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e324:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Qr(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Sf(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e325:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.P6(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Jl(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e326:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Wy(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.TP(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e327:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.i2(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Nh(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e328:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.BC(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.au(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e329:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.pB(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Xu(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e330:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.NO(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Ac(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e331:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Sm(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Yz(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e332:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.JG(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sej(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e333:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.JZ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sw2(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e334:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.fR(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Qr(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e335:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.MI(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.P6(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e336:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.vJ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Wy(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e337:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Nf(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.i2(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e338:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Pl(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.BC(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e339:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.C3(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.pB(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e340:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.AI(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.NO(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e341:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.OE(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Sm(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e342:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.nA(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.JG(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e343:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.fb(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.JZ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e344:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.siq(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.fR(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e345:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.MF(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.MI(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e346:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Qy(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.vJ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e347:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.x0(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Nf(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e348:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sKt(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Pl(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e349:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.cV(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.C3(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e350:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.mU(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.AI(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e351:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Rp(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.OE(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e352:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.GZ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.nA(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e353:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.hS(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.fb(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e354:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.mz(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.siq(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e355:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.pA(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.MF(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e356:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.shX(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Qy(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e357:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.cl(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.x0(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e358:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.BL(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sKt(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e359:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Ql(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.cV(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e360:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.xQ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.mU(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e361:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Mh(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Rp(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e362:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.MX(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Bj(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e363:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.A4(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.GZ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e364:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.wD(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.hS(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e365:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.wJ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.mz(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e366:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.rA(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.pA(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e367:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.o3(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.shX(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e368:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.DF(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.cl(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e369:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.svK(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.BL(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e370:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.h9(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Ql(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e371:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sL1(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.xQ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e372:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sEl(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Mh(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e373:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sxH(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.MX(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e374:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.XF(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.A4(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e375:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.b0(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.wD(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e376:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.A1(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.wJ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e377:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.SF(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.rA(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e378:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Qv(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.o3(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e379:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.R8(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.DF(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e380:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Xg(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.svK(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e381:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.rL(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.h9(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e382:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.CJ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sL1(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e383:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.P2(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sEl(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e384:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.J0(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sxH(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e385:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.PP(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.XF(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e386:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.shL(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.b0(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e387:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Sj(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.A1(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e388:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.tv(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sqH(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e389:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.w7(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.SF(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e390:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.ME(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Qv(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e391:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.kX(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.R8(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e392:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.q0(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Xg(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e393:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.EJ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.rL(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e394:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Eo(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.CJ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e395:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.SO(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.P2(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e396:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.B9(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.J0(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e397:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.PN(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.PP(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e398:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sVc(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.shL(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e399:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.By(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sCM(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e400:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.is(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Sj(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e401:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.uH(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.tv(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e402:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.ry(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.w7(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e403:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.G7(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.ME(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e404:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.pq(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.kX(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e405:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.fa(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.q0(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e406:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Cu(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.EJ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e407:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sip(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Eo(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e408:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.EE(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.SO(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e409:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.EC(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.B9(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e410:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Hn(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.PN(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e411:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.wu(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sVc(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e412:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Tx(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.By(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e413:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.HT(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.is(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e414:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.jq(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.uH(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e415:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.o8(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.ry(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e416:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sDo(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.G7(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e417:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sAY(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.pq(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e418:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.H3(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.fa(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e419:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.TZ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Cu(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e420:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.t3(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sip(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e421:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.my(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.EE(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e422:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sVF(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.EC(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e423:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.yO(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Hn(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e424:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.La(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.wu(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e425:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sCY(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Tx(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e426:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.ZU(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.HT(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e427:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sjW(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.jq(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e428:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.NH(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.o8(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e429:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.tH(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sDo(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e430:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("curly-block",C.Lg)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){a.sAY(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e431:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("observatory-element",C.Mz)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.H3(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e432:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("service-ref",C.il)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.TZ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e433:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("any-service-ref",C.R9)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.t3(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e434:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("instance-ref",C.Wz)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.my(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e435:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("action-link",C.K4)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){a.sVF(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e436:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("nav-bar",C.LT)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.yO(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e437:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("nav-menu",C.ms)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.La(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e438:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("nav-menu-item",C.FA)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){a.sCY(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e439:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("nav-refresh",C.JW)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.ZU(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e440:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("nav-control",C.NW)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){a.sjW(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e441:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("top-nav-menu",C.Mf)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.Fc(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e442:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-nav-menu",C.km)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.NH(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e443:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("library-nav-menu",C.vw)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.tH(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e444:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("class-nav-menu",C.Ey)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("curly-block",C.Lg)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e445:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("nav-notify",C.Qt)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("observatory-element",C.Mz)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e446:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("nav-notify-item",C.a8)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("service-ref",C.il)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e447:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("breakpoint-list",C.yS)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("any-service-ref",C.R9)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e448:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("class-ref",C.OG)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("instance-ref",C.Wz)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e449:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("class-tree",C.nw)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("action-link",C.K4)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e450:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("error-ref",C.Bi)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("nav-bar",C.LT)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e451:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("eval-box",C.wk)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("nav-menu",C.ms)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e452:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("eval-link",C.jA)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("nav-menu-item",C.FA)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e453:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("field-ref",C.Jo)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("nav-refresh",C.JW)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e454:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("function-ref",C.lE)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("nav-control",C.NW)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e455:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("library-ref",C.lp)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("top-nav-menu",C.Mf)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e456:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("script-inset",C.ON)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-nav-menu",C.km)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e457:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("breakpoint-toggle",C.Nw)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("library-nav-menu",C.vw)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e458:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("script-ref",C.Sb)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("class-nav-menu",C.Ey)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e459:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("class-view",C.ou)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("nav-notify",C.Qt)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e460:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("code-ref",C.oT)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("nav-notify-item",C.a8)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e461:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("code-view",C.jR)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("breakpoint-list",C.yS)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e462:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("error-view",C.KO)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("class-ref",C.OG)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e463:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("field-view",C.Az)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("class-tree",C.nw)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e464:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("stack-frame",C.NR)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("error-ref",C.Bi)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e465:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("flag-list",C.Qb)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("eval-box",C.wk)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e466:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("flag-item",C.Vx)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("eval-link",C.jA)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e467:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("function-view",C.te)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("field-ref",C.Jo)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e468:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("heap-map",C.iD)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("function-ref",C.lE)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e469:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-view",C.tU)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("library-ref",C.lp)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e470:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-ref",C.mK)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("script-inset",C.ON)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e471:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-http-server-list-view",C.qF)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("breakpoint-toggle",C.Nw)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e472:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-http-server-ref",C.qZ)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("script-ref",C.Sb)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e473:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-http-server-view",C.Zj)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("class-view",C.ou)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e474:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-http-server-connection-view",C.Wh)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("code-ref",C.oT)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e475:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-http-server-connection-ref",C.pF)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("code-view",C.jR)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e476:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-socket-ref",C.FG)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("error-view",C.KO)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e477:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-socket-list-view",C.IZ)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("field-view",C.Az)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e478:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-socket-view",C.pJ)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("stack-frame",C.NR)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e479:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-web-socket-ref",C.Yy)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("flag-list",C.Qb)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e480:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-web-socket-list-view",C.DD)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("flag-item",C.Vx)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e481:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-web-socket-view",C.Xv)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("function-view",C.te)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e482:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-random-access-file-list-view",C.tc)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("heap-map",C.iD)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e483:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-random-access-file-ref",C.rR)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-view",C.tU)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e484:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-random-access-file-view",C.oG)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-ref",C.mK)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e485:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-process-list-view",C.he)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-http-server-list-view",C.qF)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e486:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-process-ref",C.dD)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-http-server-ref",C.qZ)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e487:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-process-view",C.hP)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-http-server-view",C.Zj)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e488:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-ref",C.UJ)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-http-server-connection-view",C.Wh)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e489:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-summary",C.CT)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-http-server-connection-ref",C.pF)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e490:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-run-state",C.j4)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-socket-ref",C.FG)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e491:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-location",C.Io)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-socket-list-view",C.IZ)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e492:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-shared-summary",C.EG)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-socket-view",C.pJ)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e493:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-counter-chart",C.ca)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-web-socket-ref",C.Yy)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e494:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-view",C.mq)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-web-socket-list-view",C.DD)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e495:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("inbound-reference",C.uC)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-web-socket-view",C.Xv)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e496:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("instance-view",C.Ke)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-random-access-file-list-view",C.tc)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e497:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("json-view",C.Tq)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-random-access-file-ref",C.rR)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e498:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("library-view",C.PT)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-random-access-file-view",C.oG)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e499:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("metrics-page",C.Fn)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-process-list-view",C.he)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e500:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("metric-details",C.fU)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-process-ref",C.dD)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e501:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("metrics-graph",C.pi)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-process-view",C.hP)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e502:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("heap-profile",C.Ju)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-ref",C.UJ)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e503:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("sliding-checkbox",C.Y3)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-summary",C.CT)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e504:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-profile",C.ce)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-run-state",C.j4)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e505:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("script-view",C.Th)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-location",C.Io)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e506:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("stack-trace",C.tQ)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-shared-summary",C.EG)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e507:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("vm-view",C.jK)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-counter-chart",C.ca)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e508:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("service-view",C.X8)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-view",C.mq)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e509:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("trace-view",C.kt)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("inbound-reference",C.uC)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e510:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("map-viewer",C.u4)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("object-common",C.rC)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e511:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("list-viewer",C.QJ)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("context-ref",C.XW)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e512:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("observatory-application",C.Dl)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("instance-view",C.Ke)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e513:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("service-exception-view",C.pK)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("json-view",C.Tq)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e514:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("service-error-view",C.wH)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("library-view",C.PT)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e515:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("vm-connect-target",C.ws)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("metrics-page",C.Fn)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e516:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("vm-connect",C.bC)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("metric-details",C.fU)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e517:{
 "^":"TpZ:76;",
+$0:[function(){return A.Ad("metrics-graph",C.pi)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e518:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("context-view",C.kH)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e519:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("heap-profile",C.Ju)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e520:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("sliding-checkbox",C.Y3)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e521:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("isolate-profile",C.ce)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e522:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("script-view",C.Th)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e523:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("stack-trace",C.tQ)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e524:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("vm-view",C.jK)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e525:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("service-view",C.X8)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e526:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("trace-view",C.kt)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e527:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("map-viewer",C.u4)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e528:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("list-viewer",C.QJ)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e529:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("observatory-application",C.Dl)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e530:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("service-exception-view",C.pK)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e531:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("service-error-view",C.wH)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e532:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("vm-connect-target",C.ws)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e533:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("vm-connect",C.bC)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e534:{
+"^":"TpZ:76;",
 $0:[function(){return A.Ad("vm-ref",C.cK)},"$0",null,0,0,null,"call"],
 $isEH:true}},1],["","",,B,{
 "^":"",
@@ -4904,7 +4971,7 @@
 w=J.RE(b)
 if(!J.xC(J.eS(w.gN(b)),"expand")&&!J.xC(w.gN(b),d))return
 z=J.Lp(d)
-if(!!J.x(z).$istV)try{w=a.Hm
+if(!!J.x(z).$isIv)try{w=a.Hm
 v=J.IO(z)
 if(typeof v!=="number")return v.W()
 w.lo(v-1)}catch(u){w=H.Ru(u)
@@ -4950,7 +5017,7 @@
 a.QI=this.ct(a,C.tg,a.QI,null)
 J.LE(a.Wf).wM(b)},"$1","gvC",2,0,19,102],
 m4:[function(a,b){J.y9(a.Wf).wM(b)},"$1","gDX",2,0,19,102],
-static:{zB:function(a){var z,y,x,w
+static:{TH:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
 y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
@@ -4972,14 +5039,14 @@
 Ob:{
 "^":"TpZ:114;a",
 $1:[function(a){var z=this.a
-z.ef=J.Q5(z,C.yB,z.ef,a)},"$1",null,2,0,null,96,"call"],
+z.ef=J.NB(z,C.yB,z.ef,a)},"$1",null,2,0,null,96,"call"],
 $isEH:true},
 SS:{
-"^":"TpZ:114;a",
+"^":"TpZ:115;a",
 $1:[function(a){var z,y
 z=this.a
-y=H.BU(J.UQ(a,"valueAsString"),null,null)
-z.QI=J.Q5(z,C.tg,z.QI,y)},"$1",null,2,0,null,96,"call"],
+y=H.BU(a.gPE(),null,null)
+z.QI=J.NB(z,C.tg,z.QI,y)},"$1",null,2,0,null,96,"call"],
 $isEH:true}}],["","",,O,{
 "^":"",
 VY:{
@@ -5024,10 +5091,10 @@
 return x},
 YI:[function(a,b,c,d){var z=this.lE(a,d)
 if(z==null)return
-J.pP(z).h(0,"highlight")},"$3","gVb",6,0,115,2,106,107],
+J.pP(z).h(0,"highlight")},"$3","gVb",6,0,116,2,106,107],
 QT:[function(a,b,c,d){var z=this.lE(a,d)
 if(z==null)return
-J.pP(z).Rz(0,"highlight")},"$3","gAF",6,0,115,2,106,107],
+J.pP(z).Rz(0,"highlight")},"$3","gAF",6,0,116,2,106,107],
 static:{fm:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -5048,9 +5115,67 @@
 "^":"uL+Pi;",
 $isd3:true},
 fS:{
-"^":"TpZ:116;",
+"^":"TpZ:117;",
 $1:[function(a){a.OF()},"$1",null,2,0,null,85,"call"],
-$isEH:true}}],["","",,R,{
+$isEH:true}}],["","",,T,{
+"^":"",
+uV:{
+"^":"xI;tY,Pe,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+Gn:[function(a){return this.gus(a)},"$0","gyX",0,0,76],
+vQ:[function(a,b,c){var z=a.tY
+if(b===!0)J.LE(z).ml(new T.zG(a)).wM(c)
+else{J.Z6(z,null)
+c.$0()}},"$2","gus",4,0,118,119,120],
+static:{CvM:function(a){var z,y,x,w
+z=P.L5(null,null,null,P.qU,W.I0)
+y=P.qU
+y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
+x=P.Fl(null,null)
+w=P.Fl(null,null)
+a.Pe=!1
+a.f4=[]
+a.OD=!1
+a.kK=!1
+a.ZM=z
+a.ZQ=y
+a.qJ=x
+a.wy=w
+C.vS.LX(a)
+C.vS.XI(a)
+return a}}},
+zG:{
+"^":"TpZ:12;a",
+$1:[function(a){var z,y
+z=this.a
+y=J.RE(z)
+z.tY=y.ct(z,C.kY,z.tY,a)
+y.ct(z,C.kY,0,1)},"$1",null,2,0,null,121,"call"],
+$isEH:true}}],["","",,U,{
+"^":"",
+NY:{
+"^":"WZq;AE,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+geo:function(a){return a.AE},
+seo:function(a,b){a.AE=this.ct(a,C.nr,a.AE,b)},
+pA:[function(a,b){J.LE(a.AE).wM(b)},"$1","gvC",2,0,122,120],
+static:{q5n:function(a){var z,y,x,w
+z=P.L5(null,null,null,P.qU,W.I0)
+y=P.qU
+y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
+x=P.Fl(null,null)
+w=P.Fl(null,null)
+a.f4=[]
+a.OD=!1
+a.kK=!1
+a.ZM=z
+a.ZQ=y
+a.qJ=x
+a.wy=w
+C.oS.LX(a)
+C.oS.XI(a)
+return a}}},
+WZq:{
+"^":"uL+Pi;",
+$isd3:true}}],["","",,R,{
 "^":"",
 JI:{
 "^":"SaM;tH,uo,nx,oM,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
@@ -5068,11 +5193,11 @@
 a.tH=this.ct(a,C.mr,a.tH,z)},"$1","ghy",2,0,19,59],
 Db:[function(a){var z=a.tH
 a.tH=this.ct(a,C.mr,z,z!==!0)
-a.uo=this.ct(a,C.S4,a.uo,!1)},"$0","gN2",0,0,17],
+a.uo=this.ct(a,C.S4,a.uo,!1)},"$0","goJ",0,0,17],
 AZ:[function(a,b,c,d){var z=a.uo
 if(z===!0)return
 if(a.nx!=null){a.uo=this.ct(a,C.S4,z,!0)
-this.AV(a,a.tH!==!0,this.gN2(a))}else{z=a.tH
+this.AV(a,a.tH!==!0,this.goJ(a))}else{z=a.tH
 a.tH=this.ct(a,C.mr,z,z!==!0)}},"$3","gDI",6,0,84,49,50,85],
 static:{U9:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
@@ -5477,7 +5602,7 @@
 wb:{
 "^":"a;",
 static:{bQ:function(a,b){var z
-for(z=H.VM(new H.a7(a,a.length,0,null),[H.u3(a,0)]);z.G();)b.$1(z.Ff)},CkK:function(a,b){var z
+for(z=H.VM(new H.a7(a,a.length,0,null),[H.u3(a,0)]);z.G();)b.$1(z.Ff)},Ck:function(a,b){var z
 for(z=H.VM(new H.a7(a,a.length,0,null),[H.u3(a,0)]);z.G();)if(b.$1(z.Ff)===!0)return!0
 return!1},n3:function(a,b,c){var z
 for(z=H.VM(new H.a7(a,a.length,0,null),[H.u3(a,0)]);z.G();)b=c.$2(b,z.Ff)
@@ -5604,7 +5729,7 @@
 z=H.KT(z,[z,z]).Zg(a)
 if(z)return b.O8(a)
 else return b.cR(a)},
-BV:function(a,b){var z=P.Dt(b)
+DJ:function(a,b){var z=P.Dt(b)
 P.cH(C.ny,new P.w4(a,z))
 return z},
 Ne:function(a,b){var z,y,x,w,v
@@ -5634,7 +5759,7 @@
 BG:[function(){$.v5=!0
 try{P.Cx()}finally{$.mg=null
 $.v5=!1
-if($.S6!=null)$.ej().$1(P.yK())}},"$0","yK",0,0,17],
+if($.S6!=null)$.zp().$1(P.yK())}},"$0","yK",0,0,17],
 rb:function(a){var z=$.X3
 if(C.NU===z){P.ZK(null,null,C.NU,a)
 return}z.wr(z.xi(a,!0))},
@@ -5690,7 +5815,7 @@
 if(y==null){$.mg=z
 $.k8=z
 $.S6=z
-if(!$.v5)$.ej().$1(P.yK())}else{x=$.mg
+if(!$.v5)$.zp().$1(P.yK())}else{x=$.mg
 if(x==null){z.aw=y
 $.mg=z
 $.S6=z}else{z.aw=x.aw
@@ -5711,7 +5836,7 @@
 if(J.xC($.X3,c))return d.$2(e,f)
 z=P.Us(c)
 try{y=d.$2(e,f)
-return y}finally{$.X3=z}},"$6","iyo",12,0,33,26,27,28,30,8,9],
+return y}finally{$.X3=z}},"$6","xd",12,0,33,26,27,28,30,8,9],
 nI:[function(a,b,c,d){return d},"$4","W7",8,0,34,26,27,28,30],
 cQt:[function(a,b,c,d){return d},"$4","H9",8,0,35,26,27,28,30],
 bD:[function(a,b,c,d){return d},"$4","Dk",8,0,36,26,27,28,30],
@@ -5720,7 +5845,7 @@
 if($.S6==null){z=new P.OM(d,null)
 $.k8=z
 $.S6=z
-if(!$.v5)$.ej().$1(P.yK())}else{y=new P.OM(d,null)
+if(!$.v5)$.zp().$1(P.yK())}else{y=new P.OM(d,null)
 $.k8.aw=y
 $.k8=y}},"$4","yA",8,0,37,26,27,28,30],
 h8X:[function(a,b,c,d,e){return P.YF(d,C.NU!==c?c.ce(e):e)},"$5","zci",10,0,38,26,27,28,39,40],
@@ -5746,7 +5871,7 @@
 y.$0()},"$1",null,2,0,null,13,"call"],
 $isEH:true},
 ha:{
-"^":"TpZ:117;a,b,c",
+"^":"TpZ:123;a,b,c",
 $1:function(a){var z,y;++init.globalState.Xz.kv
 this.a.a=a
 z=this.b
@@ -5840,7 +5965,7 @@
 Pq:function(){if((this.YM&4)!==0)return new P.lj("Cannot add new events after calling close")
 return new P.lj("Cannot add new events while doing an addStream")},
 h:[function(a,b){if(this.YM>=4)throw H.b(this.Pq())
-this.MW(b)},"$1","ght",2,0,null,118],
+this.MW(b)},"$1","gL0",2,0,null,124],
 xO:function(a){var z,y
 z=this.YM
 if((z&4)!==0)return this.Kj
@@ -5936,10 +6061,10 @@
 x=--z.c
 if(y!=null)if(x===0||this.b)z.a.w0(a,b)
 else{z.d=a
-z.e=b}else if(x===0&&!this.b)z.a.w0(z.d,z.e)},"$2",null,4,0,null,119,120,"call"],
+z.e=b}else if(x===0&&!this.b)z.a.w0(z.d,z.e)},"$2",null,4,0,null,125,126,"call"],
 $isEH:true},
 Tw:{
-"^":"TpZ:121;a,c,d",
+"^":"TpZ:127;a,c,d",
 $1:[function(a){var z,y,x,w
 z=this.a
 y=--z.c
@@ -5961,12 +6086,12 @@
 "^":"Pf0;MM",
 j3:[function(a,b){var z=this.MM
 if(z.YM!==0)throw H.b(P.w("Future already completed"))
-z.Xf(b)},function(a){return this.j3(a,null)},"dS","$1","$0","gv6",0,2,122,22,20],
+z.Xf(b)},function(a){return this.j3(a,null)},"dS","$1","$0","gv6",0,2,128,22,20],
 w0:[function(a,b){var z
 if(a==null)throw H.b(P.u("Error must not be null"))
 z=this.MM
 if(z.YM!==0)throw H.b(P.w("Future already completed"))
-z.Nk(a,b)},function(a){return this.w0(a,null)},"pm","$2","$1","gYJ",2,2,123,22,23,24]},
+z.Nk(a,b)},function(a){return this.w0(a,null)},"pm","$2","$1","gYJ",2,2,129,22,23,24]},
 Gc:{
 "^":"a;YM,t9<,O1,nV@,bH?,kO?,bv?,Nw?",
 gnr:function(){return this.YM>=4},
@@ -6104,7 +6229,7 @@
 $1:[function(a){this.a.X2(a)},"$1",null,2,0,null,20,"call"],
 $isEH:true},
 VL:{
-"^":"TpZ:124;b",
+"^":"TpZ:130;b",
 $2:[function(a,b){this.b.ZL(a,b)},function(a){return this.$2(a,null)},"$1","$2",null,null,2,2,null,22,23,24,"call"],
 $isEH:true},
 cX:{
@@ -6120,7 +6245,7 @@
 $0:[function(){this.a.ZL(this.b,this.c)},"$0",null,0,0,null,"call"],
 $isEH:true},
 rq:{
-"^":"TpZ:125;b,d,e,f",
+"^":"TpZ:131;b,d,e,f",
 $0:function(){var z,y,x,w
 try{this.b.c=this.f.FI(this.d.gdU(),this.e)
 return!0}catch(x){w=H.Ru(x)
@@ -6187,10 +6312,10 @@
 $isEH:true},
 jZ:{
 "^":"TpZ:12;c,HZ",
-$1:[function(a){P.HZ(this.c.e,this.HZ)},"$1",null,2,0,null,126,"call"],
+$1:[function(a){P.HZ(this.c.e,this.HZ)},"$1",null,2,0,null,132,"call"],
 $isEH:true},
 ez:{
-"^":"TpZ:124;a,mG",
+"^":"TpZ:130;a,mG",
 $2:[function(a,b){var z,y
 z=this.a
 if(!J.x(z.a).$isGc){y=P.Dt(null)
@@ -6203,8 +6328,8 @@
 wS:{
 "^":"a;",
 ad:function(a,b){return H.VM(new P.fk(b,this),[H.W8(this,"wS",0)])},
-ez:[function(a,b){return H.VM(new P.c9(b,this),[H.W8(this,"wS",0),null])},"$1","gIr",2,0,function(){return H.oZ(function(a){return{func:"bp",ret:P.wS,args:[{func:"Pw",args:[a]}]}},this.$receiver,"wS")},127],
-lM:[function(a,b){return H.VM(new P.AE(b,this),[H.W8(this,"wS",0),null])},"$1","git",2,0,function(){return H.oZ(function(a){return{func:"xv",ret:P.wS,args:[{func:"ZSr",ret:P.QV,args:[a]}]}},this.$receiver,"wS")},127],
+ez:[function(a,b){return H.VM(new P.c9(b,this),[H.W8(this,"wS",0),null])},"$1","gIr",2,0,function(){return H.oZ(function(a){return{func:"bp",ret:P.wS,args:[{func:"Pw",args:[a]}]}},this.$receiver,"wS")},133],
+lM:[function(a,b){return H.VM(new P.AE(b,this),[H.W8(this,"wS",0),null])},"$1","git",2,0,function(){return H.oZ(function(a){return{func:"xv",ret:P.wS,args:[{func:"ZSr",ret:P.QV,args:[a]}]}},this.$receiver,"wS")},133],
 zV:function(a,b){var z,y,x
 z={}
 y=P.Dt(P.qU)
@@ -6246,7 +6371,7 @@
 br:function(a){var z,y
 z=H.VM([],[H.W8(this,"wS",0)])
 y=P.Dt([P.WO,H.W8(this,"wS",0)])
-this.KR(new P.lv(this,z),!0,new P.oo(z,y),y.gFa())
+this.KR(new P.lv(this,z),!0,new P.VVy(z,y),y.gFa())
 return y},
 zH:function(a){var z,y
 z=P.Ls(null,null,null,H.W8(this,"wS",0))
@@ -6279,7 +6404,7 @@
 try{this.e.KF(a)}catch(w){v=H.Ru(w)
 z=v
 y=new H.oP(w,null)
-P.NX(x.a,this.d,z,y)}},"$1",null,2,0,null,128,"call"],
+P.NX(x.a,this.d,z,y)}},"$1",null,2,0,null,134,"call"],
 $isEH:true,
 $signature:function(){return H.oZ(function(a){return{func:"Pw",args:[a]}},this.b,"wS")}},
 QCh:{
@@ -6295,7 +6420,7 @@
 $1:[function(a){var z,y
 z=this.a
 y=this.d
-P.FE(new P.LB(this.c,a),new P.z2(z,y),P.TB(z.a,y))},"$1",null,2,0,null,128,"call"],
+P.FE(new P.LB(this.c,a),new P.z2(z,y),P.TB(z.a,y))},"$1",null,2,0,null,134,"call"],
 $isEH:true,
 $signature:function(){return H.oZ(function(a){return{func:"Pw",args:[a]}},this.b,"wS")}},
 LB:{
@@ -6303,7 +6428,7 @@
 $0:function(){return J.xC(this.f,this.e)},
 $isEH:true},
 z2:{
-"^":"TpZ:129;a,UI",
+"^":"TpZ:135;a,UI",
 $1:function(a){if(a===!0)P.Bb(this.a.a,this.UI,!0)},
 $isEH:true},
 DO:{
@@ -6312,7 +6437,7 @@
 $isEH:true},
 lz:{
 "^":"TpZ;a,b,c,d",
-$1:[function(a){P.FE(new P.Rl(this.c,a),new P.at(),P.TB(this.a.a,this.d))},"$1",null,2,0,null,128,"call"],
+$1:[function(a){P.FE(new P.Rl(this.c,a),new P.at(),P.TB(this.a.a,this.d))},"$1",null,2,0,null,134,"call"],
 $isEH:true,
 $signature:function(){return H.oZ(function(a){return{func:"Pw",args:[a]}},this.b,"wS")}},
 Rl:{
@@ -6332,7 +6457,7 @@
 $1:[function(a){var z,y
 z=this.a
 y=this.d
-P.FE(new P.WN(this.c,a),new P.XPB(z,y),P.TB(z.a,y))},"$1",null,2,0,null,128,"call"],
+P.FE(new P.WN(this.c,a),new P.XPB(z,y),P.TB(z.a,y))},"$1",null,2,0,null,134,"call"],
 $isEH:true,
 $signature:function(){return H.oZ(function(a){return{func:"Pw",args:[a]}},this.b,"wS")}},
 WN:{
@@ -6340,7 +6465,7 @@
 $0:function(){return this.e.$1(this.f)},
 $isEH:true},
 XPB:{
-"^":"TpZ:129;a,UI",
+"^":"TpZ:135;a,UI",
 $1:function(a){if(a===!0)P.Bb(this.a.a,this.UI,!0)},
 $isEH:true},
 Ia:{
@@ -6365,16 +6490,16 @@
 $isEH:true},
 lv:{
 "^":"TpZ;a,b",
-$1:[function(a){this.b.push(a)},"$1",null,2,0,null,118,"call"],
+$1:[function(a){this.b.push(a)},"$1",null,2,0,null,124,"call"],
 $isEH:true,
 $signature:function(){return H.oZ(function(a){return{func:"Pw",args:[a]}},this.a,"wS")}},
-oo:{
+VVy:{
 "^":"TpZ:76;c,d",
 $0:[function(){this.d.In(this.c)},"$0",null,0,0,null,"call"],
 $isEH:true},
 oY:{
 "^":"TpZ;a,b",
-$1:[function(a){this.b.h(0,a)},"$1",null,2,0,null,118,"call"],
+$1:[function(a){this.b.h(0,a)},"$1",null,2,0,null,124,"call"],
 $isEH:true,
 $signature:function(){return H.oZ(function(a){return{func:"Pw",args:[a]}},this.a,"wS")}},
 yZ:{
@@ -6441,7 +6566,7 @@
 this.YM=(z+128|4)>>>0
 if(b!=null)b.wM(this.gDQ(this))
 if(z<128&&this.fk!=null)this.fk.IO()
-if((z&4)===0&&(this.YM&32)===0)this.Ge(this.gb9())},function(a){return this.Fv(a,null)},"WJ","$1","$0","gX0",0,2,130,22,131],
+if((z&4)===0&&(this.YM&32)===0)this.Ge(this.gb9())},function(a){return this.Fv(a,null)},"WJ","$1","$0","gX0",0,2,136,22,137],
 QE:[function(a){var z=this.YM
 if((z&8)!==0)return
 if(z>=128){z-=128
@@ -6629,7 +6754,7 @@
 this.YM=(this.YM|2)>>>0},
 fm:function(a,b){},
 Fv:[function(a,b){this.YM+=4
-if(b!=null)b.wM(this.gDQ(this))},function(a){return this.Fv(a,null)},"WJ","$1","$0","gX0",0,2,130,22,131],
+if(b!=null)b.wM(this.gDQ(this))},function(a){return this.Fv(a,null)},"WJ","$1","$0","gX0",0,2,136,22,137],
 QE:[function(a){var z=this.YM
 if(z>=4){z-=4
 this.YM=z
@@ -6648,7 +6773,7 @@
 $0:[function(){return this.a.ZL(this.b,this.c)},"$0",null,0,0,null,"call"],
 $isEH:true},
 uR:{
-"^":"TpZ:132;a,b",
+"^":"TpZ:138;a,b",
 $2:function(a,b){return P.NX(this.a,this.b,a,b)},
 $isEH:true},
 QX:{
@@ -6686,8 +6811,8 @@
 cZ:function(){var z=this.lI
 if(z!=null){this.lI=null
 z.Gv()}return},
-Iu:[function(a){this.m7.FC(a,this)},"$1","gwU",2,0,function(){return H.oZ(function(a,b){return{func:"XJ",void:true,args:[a]}},this.$receiver,"fB")},118],
-SW:[function(a,b){this.MR(a,b)},"$2","gPr",4,0,133,23,24],
+Iu:[function(a){this.m7.FC(a,this)},"$1","gwU",2,0,function(){return H.oZ(function(a,b){return{func:"XJ",void:true,args:[a]}},this.$receiver,"fB")},124],
+SW:[function(a,b){this.MR(a,b)},"$2","gPr",4,0,139,23,24],
 oZ:[function(){this.AN()},"$0","gos",0,0,17],
 JC:function(a,b,c,d,e,f,g){var z,y
 z=this.gwU()
@@ -6741,7 +6866,7 @@
 n7:{
 "^":"a;"},
 yQ:{
-"^":"a;lR,cP,U1,jH,Ka,Xp,fbF,rb,Zqn,rF,JS,nw",
+"^":"a;lR,cP,U1,jH,Ka,Xp,fbF,rb,Zqn,ib,JS,nw",
 hk:function(a,b){return this.lR.$2(a,b)},
 Gr:function(a){return this.cP.$1(a)},
 FI:function(a,b){return this.U1.$2(a,b)},
@@ -6752,7 +6877,7 @@
 wr:function(a){return this.rb.$1(a)},
 RK:function(a,b){return this.rb.$2(a,b)},
 uN:function(a,b){return this.Zqn.$2(a,b)},
-Ud:function(a,b){return this.rF.$2(a,b)},
+Ud:function(a,b){return this.ib.$2(a,b)},
 Ch:function(a,b){return this.JS.$1(b)},
 iT:function(a){return this.nw.$1$specification(a)},
 $isyQ:true},
@@ -6966,7 +7091,7 @@
 else return new P.MK(this,a)},
 ce:function(a){return this.xi(a,!0)},
 rO:function(a,b){if(b)return new P.pQ(this,a)
-else return new P.XW(this,a)},
+else return new P.Ky(this,a)},
 mS:function(a){return this.rO(a,!0)},
 PT:function(a,b){if(b)return new P.Ze(this,a)
 else return new P.dM(this,a)},
@@ -7000,7 +7125,7 @@
 "^":"TpZ:12;a,b",
 $1:[function(a){return this.a.m1(this.b,a)},"$1",null,2,0,null,32,"call"],
 $isEH:true},
-XW:{
+Ky:{
 "^":"TpZ:12;c,d",
 $1:[function(a){return this.c.FI(this.d,a)},"$1",null,2,0,null,32,"call"],
 $isEH:true},
@@ -7013,7 +7138,7 @@
 $2:[function(a,b){return this.c.mg(this.d,a,b)},"$2",null,4,0,null,8,9,"call"],
 $isEH:true}}],["","",,P,{
 "^":"",
-EF:function(a,b,c){return H.B7(a,H.VM(new P.YB(0,null,null,null,null,null,0),[b,c]))},
+EF:function(a,b,c){return H.dJ(a,H.VM(new P.YB(0,null,null,null,null,null,0),[b,c]))},
 Fl:function(a,b){return H.VM(new P.YB(0,null,null,null,null,null,0),[a,b])},
 TQ:[function(a,b){return J.xC(a,b)},"$2","fc",4,0,48,49,50],
 T9:[function(a){return J.v1(a)},"$1","py",2,0,51,49],
@@ -7079,7 +7204,7 @@
 b.push(v)},
 L5:function(a,b,c,d,e){return H.VM(new P.YB(0,null,null,null,null,null,0),[d,e])},
 Ls:function(a,b,c,d){return H.VM(new P.D0(0,null,null,null,null,null,0),[d])},
-rC:function(a,b,c){var z,y,x,w,v
+Vi:function(a,b,c){var z,y,x,w,v
 z=[]
 y=J.U6(a)
 x=y.gB(a)
@@ -7099,7 +7224,7 @@
 if(0>=z.length)return H.e(z,0)
 z.pop()}return y.gIN()},
 bA:{
-"^":"a;X5,Mb,cG,Cs,Jp",
+"^":"a;X5,Mb,cG,Cs,MV",
 gB:function(a){return this.X5},
 gl0:function(a){return this.X5===0},
 gor:function(a){return this.X5!==0},
@@ -7112,7 +7237,7 @@
 KY:function(a){var z=this.Cs
 if(z==null)return!1
 return this.DF(z[this.rk(a)],a)>=0},
-FV:function(a,b){J.Me(b,new P.DJ(this))},
+FV:function(a,b){J.Me(b,new P.ef(this))},
 t:function(a,b){var z,y,x,w
 if(typeof b==="string"&&b!=="__proto__"){z=this.Mb
 if(z==null)y=null
@@ -7139,10 +7264,10 @@
 this.Cs=z}y=this.rk(a)
 x=z[y]
 if(x==null){P.cW(z,y,[a,b]);++this.X5
-this.Jp=null}else{w=this.DF(x,a)
+this.MV=null}else{w=this.DF(x,a)
 if(w>=0)x[w+1]=b
 else{x.push(a,b);++this.X5
-this.Jp=null}}},
+this.MV=null}}},
 Rz:function(a,b){if(typeof b==="string"&&b!=="__proto__")return this.H4(this.Mb,b)
 else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.H4(this.cG,b)
 else return this.qg(b)},
@@ -7152,9 +7277,9 @@
 y=z[this.rk(a)]
 x=this.DF(y,a)
 if(x<0)return;--this.X5
-this.Jp=null
+this.MV=null
 return y.splice(x,2)[1]},
-V1:function(a){if(this.X5>0){this.Jp=null
+V1:function(a){if(this.X5>0){this.MV=null
 this.Cs=null
 this.cG=null
 this.Mb=null
@@ -7163,9 +7288,9 @@
 z=this.Nm()
 for(y=z.length,x=0;x<y;++x){w=z[x]
 b.$2(w,this.t(0,w))
-if(z!==this.Jp)throw H.b(P.a4(this))}},
+if(z!==this.MV)throw H.b(P.a4(this))}},
 Nm:function(){var z,y,x,w,v,u,t,s,r,q,p,o
-z=this.Jp
+z=this.MV
 if(z!=null)return z
 y=Array(this.X5)
 y.fixed$length=init
@@ -7181,14 +7306,14 @@
 v=w.length
 for(t=0;t<v;++t){q=r[w[t]]
 p=q.length
-for(o=0;o<p;o+=2){y[u]=q[o];++u}}}this.Jp=y
+for(o=0;o<p;o+=2){y[u]=q[o];++u}}}this.MV=y
 return y},
 u9:function(a,b,c){if(a[b]==null){++this.X5
-this.Jp=null}P.cW(a,b,c)},
+this.MV=null}P.cW(a,b,c)},
 H4:function(a,b){var z
 if(a!=null&&a[b]!=null){z=P.vL(a,b)
 delete a[b];--this.X5
-this.Jp=null
+this.MV=null
 return z}else return},
 rk:function(a){return J.v1(a)&0x3ffffff},
 DF:function(a,b){var z,y
@@ -7206,15 +7331,15 @@
 return z}}},
 oi:{
 "^":"TpZ:12;a",
-$1:[function(a){return this.a.t(0,a)},"$1",null,2,0,null,134,"call"],
+$1:[function(a){return this.a.t(0,a)},"$1",null,2,0,null,140,"call"],
 $isEH:true},
-DJ:{
+ef:{
 "^":"TpZ;a",
 $2:[function(a,b){this.a.u(0,a,b)},"$2",null,4,0,null,79,20,"call"],
 $isEH:true,
 $signature:function(){return H.oZ(function(a,b){return{func:"lb",args:[a,b]}},this.a,"bA")}},
 PL:{
-"^":"bA;X5,Mb,cG,Cs,Jp",
+"^":"bA;X5,Mb,cG,Cs,MV",
 rk:function(a){return H.CU(a)&0x3ffffff},
 DF:function(a,b){var z,y,x
 if(a==null)return-1
@@ -7222,10 +7347,10 @@
 for(y=0;y<z;y+=2){x=a[y]
 if(x==null?b==null:x===b)return y}return-1}},
 Fq:{
-"^":"bA;AH,dI,lO,X5,Mb,cG,Cs,Jp",
+"^":"bA;AH,dI,z4,X5,Mb,cG,Cs,MV",
 Xm:function(a,b){return this.AH.$2(a,b)},
 jP:function(a){return this.dI.$1(a)},
-Bc:function(a){return this.lO.$1(a)},
+Bc:function(a){return this.z4.$1(a)},
 t:function(a,b){if(this.Bc(b)!==!0)return
 return P.bA.prototype.c8.call(this,b)},
 u:function(a,b,c){P.bA.prototype.Gk.call(this,b,c)},
@@ -7260,16 +7385,16 @@
 z=this.ZD
 y=z.Nm()
 for(x=y.length,w=0;w<x;++w){b.$1(y[w])
-if(y!==z.Jp)throw H.b(P.a4(z))}},
+if(y!==z.MV)throw H.b(P.a4(z))}},
 $isyN:true},
 EQ:{
-"^":"a;ZD,Jp,iY,fD",
+"^":"a;ZD,MV,iY,fD",
 gl:function(){return this.fD},
 G:function(){var z,y,x
-z=this.Jp
+z=this.MV
 y=this.iY
 x=this.ZD
-if(z!==x.Jp)throw H.b(P.a4(x))
+if(z!==x.MV)throw H.b(P.a4(x))
 else if(y>=z.length){this.fD=null
 return!1}else{this.fD=z[y]
 this.iY=y+1
@@ -7394,7 +7519,7 @@
 return z}}},
 a1:{
 "^":"TpZ:12;a",
-$1:[function(a){return this.a.t(0,a)},"$1",null,2,0,null,134,"call"],
+$1:[function(a){return this.a.t(0,a)},"$1",null,2,0,null,140,"call"],
 $isEH:true},
 pk:{
 "^":"TpZ;a",
@@ -7476,7 +7601,7 @@
 x=y}return this.bQ(x,b)}else return this.B7(0,b)},
 B7:function(a,b){var z,y,x
 z=this.Cs
-if(z==null){z=P.V5()
+if(z==null){z=P.yT()
 this.Cs=z}y=this.rk(b)
 x=z[y]
 if(x==null)z[y]=[b]
@@ -7539,7 +7664,7 @@
 $isyN:true,
 $isQV:true,
 $asQV:null,
-static:{V5:function(){var z=Object.create(null)
+static:{yT:function(){var z=Object.create(null)
 z["<non-identifier-key>"]=z
 delete z["<non-identifier-key>"]
 return z}}},
@@ -7826,7 +7951,7 @@
 for(z=0;z<this.gB(a);++z)if(J.xC(this.t(a,z),b)){this.YW(a,z,this.gB(a)-1,a,z+1)
 this.sB(a,this.gB(a)-1)
 return!0}return!1},
-uk:function(a,b){P.rC(a,b,!1)},
+uk:function(a,b){P.Vi(a,b,!1)},
 V1:function(a){this.sB(a,0)},
 GT:function(a,b){if(b==null)b=P.n4()
 H.ZE(a,0,this.gB(a)-1,b)},
@@ -7936,8 +8061,8 @@
 return z},
 $isyN:true},
 Uq:{
-"^":"a;Jp,ZD,fD",
-G:function(){var z=this.Jp
+"^":"a;MV,ZD,fD",
+G:function(){var z=this.MV
 if(z.G()){this.fD=this.ZD.t(0,z.gl())
 return!0}this.fD=null
 return!1},
@@ -7981,9 +8106,9 @@
 z=this.b
 z.KF(a)
 z.KF(": ")
-z.KF(b)},"$2",null,4,0,null,135,66,"call"],
+z.KF(b)},"$2",null,4,0,null,141,66,"call"],
 $isEH:true},
-Sw:{
+nd:{
 "^":"mW;E3,QN,Bq,Z1",
 gA:function(a){var z=new P.fO(this,this.Bq,this.Z1,this.QN,null)
 z.$builtinTypeInfo=this.$builtinTypeInfo
@@ -8221,10 +8346,10 @@
 jp:{
 "^":"oz;P*,nl,Bb,T8",
 $asoz:function(a,b){return[a]}},
-Xt:{
+vX1:{
 "^":"a;",
 oB:function(a){var z,y,x,w,v,u,t,s
-z=this.og
+z=this.VR
 if(z==null)return-1
 y=this.fu
 for(x=y,w=x,v=null;!0;){v=this.R2(z.nl,a)
@@ -8253,7 +8378,7 @@
 x.Bb=z.T8
 z.Bb=y.T8
 z.T8=y.Bb
-this.og=z
+this.VR=z
 y.T8=null
 y.Bb=null;++this.wq
 return v},
@@ -8261,33 +8386,33 @@
 for(z=a;y=z.T8,y!=null;z=y){z.T8=y.Bb
 y.Bb=z}return z},
 qg:function(a){var z,y,x
-if(this.og==null)return
+if(this.VR==null)return
 if(!J.xC(this.oB(a),0))return
-z=this.og;--this.hm
+z=this.VR;--this.hm
 y=z.Bb
-if(y==null)this.og=z.T8
+if(y==null)this.VR=z.T8
 else{x=z.T8
 y=this.R8(y)
-this.og=y
+this.VR=y
 y.T8=x}++this.Z1
 return z},
 Oa:function(a,b){var z,y;++this.hm;++this.Z1
-if(this.og==null){this.og=a
+if(this.VR==null){this.VR=a
 return}z=J.u6(b,0)
-y=this.og
+y=this.VR
 if(z){a.Bb=y
 a.T8=y.T8
 y.T8=null}else{a.T8=y
 a.Bb=y.Bb
-y.Bb=null}this.og=a}},
+y.Bb=null}this.VR=a}},
 Ba:{
-"^":"Xt;V2s,lO,og,fu,hm,Z1,wq",
+"^":"vX1;V2s,z4,VR,fu,hm,Z1,wq",
 L4:function(a,b){return this.V2s.$2(a,b)},
-Bc:function(a){return this.lO.$1(a)},
+Bc:function(a){return this.z4.$1(a)},
 R2:function(a,b){return this.L4(a,b)},
 t:function(a,b){if(b==null)throw H.b(P.u(b))
 if(this.Bc(b)!==!0)return
-if(this.og!=null)if(J.xC(this.oB(b),0))return this.og.P
+if(this.VR!=null)if(J.xC(this.oB(b),0))return this.VR.P
 return},
 Rz:function(a,b){var z
 if(this.Bc(b)!==!0)return
@@ -8297,11 +8422,11 @@
 u:function(a,b,c){var z
 if(b==null)throw H.b(P.u(b))
 z=this.oB(b)
-if(J.xC(z,0)){this.og.P=c
+if(J.xC(z,0)){this.VR.P=c
 return}this.Oa(H.VM(new P.jp(c,b,null,null),[null,null]),z)},
 FV:function(a,b){H.bQ(b,new P.QG(this))},
-gl0:function(a){return this.og==null},
-gor:function(a){return this.og!=null},
+gl0:function(a){return this.VR==null},
+gor:function(a){return this.VR!=null},
 aN:function(a,b){var z,y,x
 z=H.u3(this,0)
 y=H.VM(new P.HW(this,H.VM([],[P.oz]),this.Z1,this.wq,null),[z])
@@ -8310,7 +8435,7 @@
 z=J.RE(x)
 b.$2(z.gnl(x),z.gP(x))}},
 gB:function(a){return this.hm},
-V1:function(a){this.og=null
+V1:function(a){this.VR=null
 this.hm=0;++this.Z1},
 NZ:function(a,b){return this.Bc(b)===!0&&J.xC(this.oB(b),0)},
 gvc:function(a){return H.VM(new P.nF(this),[H.u3(this,0)])},
@@ -8319,7 +8444,7 @@
 return z},
 bu:[function(a){return P.vW(this)},"$0","gCR",0,0,73],
 $isBa:true,
-$asXt:function(a,b){return[a]},
+$asvX1:function(a,b){return[a]},
 $asT8:null,
 $isT8:true,
 static:{GV:function(a,b,c,d){var z,y
@@ -8351,14 +8476,14 @@
 if(y.length===0){this.Ju=null
 return!1}if(z.wq!==this.wq&&this.Ju!=null){x=this.Ju
 C.Nm.sB(y,0)
-if(x==null)this.Zq(z.og)
+if(x==null)this.Zq(z.VR)
 else{z.oB(x.nl)
-this.Zq(z.og.T8)}}if(0>=y.length)return H.e(y,0)
+this.Zq(z.VR.T8)}}if(0>=y.length)return H.e(y,0)
 z=y.pop()
 this.Ju=z
 this.Zq(z.T8)
 return!0},
-Dd:function(a,b){this.Zq(a.og)}},
+Dd:function(a,b){this.Zq(a.VR)}},
 nF:{
 "^":"mW;OC",
 gB:function(a){return this.OC.hm},
@@ -8507,7 +8632,7 @@
 $asT8:function(){return[null,null]}},
 A5:{
 "^":"TpZ:12;a",
-$1:[function(a){return this.a.t(0,a)},"$1",null,2,0,null,134,"call"],
+$1:[function(a){return this.a.t(0,a)},"$1",null,2,0,null,140,"call"],
 $isEH:true},
 E5:{
 "^":"TpZ:81;a",
@@ -8524,7 +8649,7 @@
 "^":"XS;Ct,FN",
 bu:[function(a){if(this.FN!=null)return"Converting object to an encodable object failed."
 else return"Converting object did not return an encodable object."},"$0","gCR",0,0,73],
-static:{Gy:function(a,b){return new P.Ud(a,b)}}},
+static:{NM:function(a,b){return new P.Ud(a,b)}}},
 K8:{
 "^":"Ud;Ct,FN",
 bu:[function(a){return"Cyclic error in JSON stringify"},"$0","gCR",0,0,73],
@@ -8601,12 +8726,12 @@
 rl:function(a){var z,y,x,w
 if(!this.Jc(a)){this.WD(a)
 try{z=this.HT(a)
-if(!this.Jc(z)){x=P.Gy(a,null)
+if(!this.Jc(z)){x=P.NM(a,null)
 throw H.b(x)}x=this.SK
 if(0>=x.length)return H.e(x,0)
 x.pop()}catch(w){x=H.Ru(w)
 y=x
-throw H.b(P.Gy(a,y))}}},
+throw H.b(P.NM(a,y))}}},
 Jc:function(a){var z,y,x,w
 z={}
 if(typeof a==="number"){if(!C.CD.gzr(a))return!1
@@ -8813,14 +8938,14 @@
 this.pt=x}},
 static:{"^":"ADi"}},
 wh:{
-"^":"TpZ:136;a",
+"^":"TpZ:142;a",
 $2:function(a,b){var z,y,x,w
 z=this.a
 for(y=J.U6(a),x=b;x<z;++x){w=y.t(a,x)
 if(J.mQ(w,127)!==w)return x-b}return z-b},
 $isEH:true},
 yn:{
-"^":"TpZ:137;b,c,d,e",
+"^":"TpZ:143;b,c,d,e",
 $2:function(a,b){var z,y,x
 z=a===0&&b===J.q8(this.c)
 y=this.b
@@ -8869,7 +8994,7 @@
 $2:function(a,b){this.a.u(0,a.gOB(a),b)},
 $isEH:true},
 CL:{
-"^":"TpZ:138;a",
+"^":"TpZ:144;a",
 $2:function(a,b){var z=this.a
 if(z.b>0)z.a.KF(", ")
 z.a.KF(J.ro(a))
@@ -8896,14 +9021,14 @@
 w=P.h0(z?H.o2(this).getUTCDate()+0:H.o2(this).getDate()+0)
 v=P.h0(H.KL(this))
 u=P.h0(H.ch(this))
-t=P.h0(H.XJ(this))
+t=P.h0(H.Sw(this))
 s=P.pV(z?H.o2(this).getUTCMilliseconds()+0:H.o2(this).getMilliseconds()+0)
 if(z)return y+"-"+x+"-"+w+" "+v+":"+u+":"+t+"."+s+"Z"
 else return y+"-"+x+"-"+w+" "+v+":"+u+":"+t+"."+s},"$0","gCR",0,0,73],
 h:function(a,b){return P.Wu(J.WB(this.rq,b.gVs()),this.aL)},
 gGt:function(){return H.KL(this)},
 gS6:function(){return H.ch(this)},
-gIv:function(){return H.XJ(this)},
+gBM:function(){return H.Sw(this)},
 EK:function(){H.o2(this)},
 RM:function(a,b){if(J.xZ(J.yH(a),8640000000000000))throw H.b(P.u(a))},
 $isiP:true,
@@ -8955,12 +9080,12 @@
 return"00"+a},h0:function(a){if(a>=10)return""+a
 return"0"+a}}},
 ci:{
-"^":"TpZ:139;",
+"^":"TpZ:145;",
 $1:function(a){if(a==null)return 0
 return H.BU(a,null,null)},
 $isEH:true},
 Rq:{
-"^":"TpZ:140;",
+"^":"TpZ:146;",
 $1:function(a){if(a==null)return 0
 return H.RR(a,null)},
 $isEH:true},
@@ -9273,7 +9398,7 @@
 if(J.Qe(z).nC(z,"["))return C.xB.Nj(z,1,z.length-1)
 return z},
 gtp:function(a){var z=this.QB
-if(z==null)return P.bG(this.Fi)
+if(z==null)return P.Co(this.Fi)
 return z},
 gIi:function(a){return this.Ee},
 pi:function(a,b){if(a==="")return"/"+b
@@ -9343,7 +9468,7 @@
 v=this.ys
 return z.$2(this.Fi,z.$2(this.ku,z.$2(y,z.$2(x,z.$2(this.Ee,z.$2(w,z.$2(v==null?"":v,1)))))))},
 $isq5:true,
-static:{"^":"QqF,q7,tvi,uCX,zk,ilf,tC,GpR,Q5W,XrJ,Vxa,pkL,O5i,FsP,qfW,dRC,u0I,TGN,OP,c4,Fm,WTp,Hiw,H5,zst,VFG,nJd,SpW,GPf,JA7,iTk,Uo,yw1,SQU,rvM,fbQ",bG:function(a){if(a==="http")return 80
+static:{"^":"QqF,q7,tvi,uCX,zk,ilf,tC,GpR,Q5W,XrJ,Vxa,pkL,O5i,FsP,qfW,dRC,u0I,TGN,OP,Qxt,Vho,WTp,Hiw,H5,zst,VFG,nJd,SpW,GPf,JA7,iTk,Uo,yw1,SQU,rvM,fbQ",Co:function(a){if(a==="http")return 80
 if(a==="https")return 443
 return 0},hK:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
 z={}
@@ -9398,7 +9523,7 @@
 n=P.jr(a,p+1,w)}}else{n=s===35?P.jr(a,z.e+1,w):null
 o=null}w=z.a
 s=z.b
-return new P.q5(z.c,z.d,q,w,s,o,n,null,null)},iV:function(a,b,c){throw H.b(P.cD(c,a,b))},JF:function(a,b){if(a!=null&&a===P.bG(b))return
+return new P.q5(z.c,z.d,q,w,s,o,n,null,null)},iV:function(a,b,c){throw H.b(P.cD(c,a,b))},JF:function(a,b){if(a!=null&&a===P.Co(b))return
 return a},L7:function(a,b,c,d){var z,y
 if(a==null)return
 if(b===c)return""
@@ -9569,7 +9694,7 @@
 z+=s
 y=z}}if(x==null)return J.Nj(a,b,c)
 if(y<c)x.KF(J.Nj(a,y,c))
-return x.bu(0)},Ms:function(a,b){return H.n3(J.It(a,"&"),P.Fl(null,null),new P.qz(b))},Dy:function(a){var z,y
+return x.bu(0)},Ms:function(a,b){return H.n3(J.BQ(a,"&"),P.Fl(null,null),new P.qz(b))},Dy:function(a){var z,y
 z=new P.JV()
 y=a.split(".")
 if(y.length!==4)z.$1("IPv4 address should contain exactly 4 parts")
@@ -9680,7 +9805,7 @@
 else u.push(v);++x}}t=b.QA
 return new P.GY(t).Sw(u)}}},
 hP2:{
-"^":"TpZ:141;",
+"^":"TpZ:147;",
 $1:function(a){a.C(0,128)
 return!1},
 $isEH:true},
@@ -9734,7 +9859,7 @@
 z.KF(P.jW(C.B2,b,C.xM,!0))},
 $isEH:true},
 XZ:{
-"^":"TpZ:142;",
+"^":"TpZ:148;",
 $2:function(a,b){return b*31+J.v1(a)&1073741823},
 $isEH:true},
 qz:{
@@ -9757,10 +9882,10 @@
 z=H.BU(a,null,null)
 y=J.Wx(z)
 if(y.C(z,0)||y.D(z,255))this.a.$1("each part must be in the range of `0..255`")
-return z},"$1",null,2,0,null,143,"call"],
+return z},"$1",null,2,0,null,149,"call"],
 $isEH:true},
 x8:{
-"^":"TpZ:144;a",
+"^":"TpZ:150;a",
 $2:function(a,b){throw H.b(P.cD("Illegal IPv6 address, "+a,this.a,b))},
 $1:function(a){return this.$2(a,null)},
 $isEH:true},
@@ -9797,11 +9922,11 @@
 z=W.fJ
 y=H.VM(new P.Zf(P.Dt(z)),[z])
 x=new XMLHttpRequest()
-C.W3.eo(x,"GET",a,!0)
+C.W3.i3(x,"GET",a,!0)
 z=H.VM(new W.RO(x,C.LF.fA,!1),[null])
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(new W.bU(y,x)),z.el),[H.u3(z,0)]).DN()
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(new W.bU(y,x)),z.el),[H.u3(z,0)]).DN()
 z=H.VM(new W.RO(x,C.JN.fA,!1),[null])
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(y.gYJ()),z.el),[H.u3(z,0)]).DN()
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(y.gYJ()),z.el),[H.u3(z,0)]).DN()
 x.send()
 return y.MM},
 Ws:function(a){return new (window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver)(H.tR(W.Iq(a),2))},
@@ -9828,7 +9953,7 @@
 return P.o7(a,!0)},
 v8:function(a,b){return new W.uY(a,b)},
 z9:[function(a){return J.N1(a)},"$1","b4",2,0,12,56],
-Hx:[function(a){return J.o6(a)},"$1","D9",2,0,12,56],
+Hx:[function(a){return J.o6(a)},"$1","oo",2,0,12,56],
 Hw:[function(a,b,c,d){return J.L1(a,b,c,d)},"$4","SN",8,0,57,56,58,59,60],
 Ct:function(a,b,c,d,e){var z,y,x,w,v,u,t,s,r,q
 z=J.Dc(d)
@@ -9845,7 +9970,7 @@
 t={}
 t.createdCallback={value:function(f){return function(){return f(this)}}(H.tR(W.v8(x,y),1))}
 t.attachedCallback={value:function(f){return function(){return f(this)}}(H.tR(W.b4(),1))}
-t.detachedCallback={value:function(f){return function(){return f(this)}}(H.tR(W.D9(),1))}
+t.detachedCallback={value:function(f){return function(){return f(this)}}(H.tR(W.oo(),1))}
 t.attributeChangedCallback={value:function(f){return function(g,h,i){return f(this,g,h,i)}}(H.tR(W.SN(),4))}
 s=Object.create(u.prototype,t)
 r=H.Va(y)
@@ -9853,14 +9978,14 @@
 q={prototype:s}
 if(!v)q.extends=e
 b.registerElement(c,q)},
-aF:function(a){if(J.xC($.X3,C.NU))return a
+Yt:function(a){if(J.xC($.X3,C.NU))return a
 if(a==null)return
 return $.X3.rO(a,!0)},
 Iq:function(a){if(J.xC($.X3,C.NU))return a
 return $.X3.PT(a,!0)},
 Bo:{
 "^":"h4;",
-"%":"HTMLAppletElement|HTMLBRElement|HTMLContentElement|HTMLDListElement|HTMLDirectoryElement|HTMLDivElement|HTMLFontElement|HTMLFrameElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLLabelElement|HTMLLegendElement|HTMLMarqueeElement|HTMLMenuElement|HTMLModElement|HTMLParagraphElement|HTMLPreElement|HTMLQuoteElement|HTMLShadowElement|HTMLSpanElement|HTMLTableCaptionElement|HTMLTableColElement|HTMLTitleElement|HTMLUListElement|HTMLUnknownElement;HTMLElement;jpR|TR0|xc|LPc|hV|Xfs|uL|Vfx|G6|Dsd|xI|eW|tuj|eo|Vct|ak|VY|D13|Be|SaM|JI|Tk|WZq|ZP|pva|nJ|KAf|Eg|i7|cda|Gk|waa|J3|V10|MJ|T53|DK|V11|BS|V12|Vb|V13|Ly|ZzR|Im|pR|V14|EZ|V15|L4|Mb|V16|mO|DE|V17|U1|V18|H8|WS|qh|V19|oF|V20|Q6|uE|V21|Zn|V22|n5|V23|Ma|wN|V24|ds|V25|qM|oEY|av|V26|uz|V27|kK|oa|V28|St|V29|IW|V30|Qh|V31|Oz|V32|Z4|V33|qk|V34|vj|LU|V35|CX|V36|qn|V37|I2|V38|FB|V39|md|V40|Bm|V41|Ya|V42|Ww|ye|V43|G1|V44|fl|V45|UK|V46|wM|V47|NK|V48|Zx|V49|F1|V50|ov|V51|vr|qeq|kn|V52|fI|V53|zM|V54|Rk|V55|Ti|V56|Um|V57|VZ|V58|WG|V59|f7|ImK|CY|V60|nm|V61|Vu|V62|Pa|V63|D2|I5|V64|el"},
+"%":"HTMLAppletElement|HTMLBRElement|HTMLContentElement|HTMLDListElement|HTMLDirectoryElement|HTMLDivElement|HTMLFontElement|HTMLFrameElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLLabelElement|HTMLLegendElement|HTMLMarqueeElement|HTMLMenuElement|HTMLModElement|HTMLParagraphElement|HTMLPreElement|HTMLQuoteElement|HTMLShadowElement|HTMLSpanElement|HTMLTableCaptionElement|HTMLTableColElement|HTMLTitleElement|HTMLUListElement|HTMLUnknownElement;HTMLElement;jpR|TR0|xc|LPc|hV|Xfs|uL|Vfx|G6|Dsd|xI|eW|tuj|eo|Vct|ak|VY|D13|Be|uV|WZq|NY|SaM|JI|Tk|pva|ZP|cda|nJ|KAf|Eg|i7|waa|Gk|V10|J3|V11|MJ|T53|DK|V12|BS|V13|Vb|V14|Ly|V15|Im|pR|V16|EZ|V17|L4|Mb|V18|mO|DE|V19|U1|V20|H8|WS|qh|V21|oF|V22|Q6|uE|V23|Zn|V24|n5|V25|Ma|wN|V26|ds|V27|qM|ZzR|av|V28|uz|V29|kK|oa|V30|St|V31|IW|V32|Qh|V33|Oz|V34|Z4|V35|qk|V36|vj|LU|V37|CX|V38|qn|V39|I2|V40|FB|V41|md|V42|Bm|V43|Ya|V44|Ww|ye|V45|G1|V46|fl|V47|UK|V48|wM|V49|NK|V50|Zx|V51|qV|V52|F1|V53|ov|V54|vr|oEY|kn|V55|fI|V56|zM|V57|Rk|V58|Ti|V59|Um|V60|VZ|V61|WG|V62|f7|ImK|CY|V63|nm|V64|Vu|V65|Pa|V66|D2|I5|V67|el"},
 Yyn:{
 "^":"Gv;",
 $isWO:true,
@@ -9987,7 +10112,6 @@
 z=z.parentElement}while(z!=null)
 return!1},
 TL:function(a){return(a.createShadowRoot||a.webkitCreateShadowRoot).call(a)},
-gI:function(a){return new W.DM(a,a)},
 PN:function(a,b){return a.getAttribute(b)},
 Zi:function(a){return a.getBoundingClientRect()},
 XT:function(a,b){return a.querySelector(b)},
@@ -10005,14 +10129,13 @@
 "%":"ErrorEvent"},
 ea:{
 "^":"Gv;dl:_selector},Ii:path=,Ea:timeStamp=,t5:type=",
-gCa:function(a){return W.qc(a.currentTarget)},
+gF0:function(a){return W.qc(a.currentTarget)},
 gN:function(a){return W.qc(a.target)},
 e6:function(a){return a.preventDefault()},
 $isea:true,
 "%":"AudioProcessingEvent|AutocompleteErrorEvent|BeforeLoadEvent|BeforeUnloadEvent|CSSFontFaceLoadEvent|DeviceMotionEvent|DeviceOrientationEvent|HashChangeEvent|IDBVersionChangeEvent|InstallEvent|InstallPhaseEvent|MediaKeyNeededEvent|MediaStreamTrackEvent|MutationEvent|OfflineAudioCompletionEvent|OverflowEvent|PageTransitionEvent|RTCDTMFToneChangeEvent|RTCDataChannelEvent|RTCIceCandidateEvent|SecurityPolicyViolationEvent|SpeechInputEvent|TrackEvent|TransitionEvent|WebGLContextEvent|WebKitAnimationEvent|WebKitTransitionEvent;ClipboardEvent|Event|InputEvent"},
 PZ:{
 "^":"Gv;",
-gI:function(a){return new W.xd(a)},
 On:function(a,b,c,d){return a.addEventListener(b,H.tR(c,1),d)},
 Ph:function(a,b){return a.dispatchEvent(b)},
 Y9:function(a,b,c,d){return a.removeEventListener(b,H.tR(c,1),d)},
@@ -10031,7 +10154,7 @@
 H05:{
 "^":"PZ;kc:error=",
 gyG:function(a){var z=a.result
-if(!!J.x(z).$isaI)return H.GG(z,0,null)
+if(!!J.x(z).$isaI)return H.z4(z,0,null)
 return z},
 "%":"FileReader"},
 jH:{
@@ -10040,7 +10163,7 @@
 u9:{
 "^":"Bo;ih:color%",
 "%":"HTMLHRElement"},
-pl:{
+us:{
 "^":"Gv;B:length=",
 "%":"History"},
 xnd:{
@@ -10074,7 +10197,7 @@
 "^":"waV;il:responseText=,pf:status=",
 gn9:function(a){return W.Pd(a.response)},
 Yh:function(a,b,c,d,e,f){return a.open(b,c,d,f,e)},
-eo:function(a,b,c,d){return a.open(b,c,d)},
+i3:function(a,b,c,d){return a.open(b,c,d)},
 wR:function(a,b){return a.send(b)},
 $isfJ:true,
 "%":"XMLHttpRequest"},
@@ -10125,7 +10248,7 @@
 xW:function(a){return a.load()},
 WJ:[function(a){return a.pause()},"$0","gX0",0,0,17],
 "%":"HTMLAudioElement;HTMLMediaElement",
-static:{"^":"TH<"}},
+static:{"^":"dZ5<"}},
 mCi:{
 "^":"Gv;tT:code=",
 "%":"MediaError"},
@@ -10138,7 +10261,7 @@
 fJn:{
 "^":"ea;G1:message=",
 "%":"MediaKeyMessageEvent"},
-CM:{
+D80:{
 "^":"PZ;jO:id=,ph:label=",
 "%":"MediaStream"},
 VhH:{
@@ -10202,7 +10325,7 @@
 Vv:{
 "^":"Gv;N:target=,t5:type=",
 "%":"MutationRecord"},
-FO8:{
+qT:{
 "^":"Gv;G1:message=,oc:name=",
 "%":"NavigatorUserMediaError"},
 KV:{
@@ -10345,7 +10468,7 @@
 $isT8:true,
 $asT8:function(){return[P.qU,P.qU]},
 "%":"Storage"},
-Tp:{
+iiu:{
 "^":"ea;nl:key=,O3:url=",
 "%":"StorageEvent"},
 fqq:{
@@ -10357,16 +10480,16 @@
 "%":"HTMLTableCellElement|HTMLTableDataCellElement|HTMLTableHeaderCellElement"},
 inA:{
 "^":"Bo;",
-gvp:function(a){return H.VM(new W.uB(a.rows),[W.tV])},
+gvp:function(a){return H.VM(new W.uB(a.rows),[W.Iv])},
 "%":"HTMLTableElement"},
-tV:{
+Iv:{
 "^":"Bo;RH:rowIndex=",
 iF:function(a,b){return a.insertCell(b)},
-$istV:true,
+$isIv:true,
 "%":"HTMLTableRowElement"},
 BTK:{
 "^":"Bo;",
-gvp:function(a){return H.VM(new W.uB(a.rows),[W.tV])},
+gvp:function(a){return H.VM(new W.uB(a.rows),[W.Iv])},
 "%":"HTMLTableSectionElement"},
 OH:{
 "^":"Bo;rz:content=",
@@ -10587,17 +10710,6 @@
 $isEH:true},
 QI:{
 "^":"Gv;"},
-xd:{
-"^":"a;c9<",
-t:function(a,b){return H.VM(new W.RO(this.gc9(),b,!1),[null])}},
-DM:{
-"^":"xd;c9:Yg<,c9",
-t:function(a,b){var z,y
-z=$.nn()
-y=J.Qe(b)
-if(z.gvc(z).tg(0,y.hc(b)))if(P.F7()===!0)return H.VM(new W.Cqa(this.Yg,z.t(0,y.hc(b)),!1),[null])
-return H.VM(new W.Cqa(this.Yg,b,!1),[null])},
-static:{"^":"fDX"}},
 RAp:{
 "^":"Gv+lD;",
 $isWO:true,
@@ -10614,7 +10726,7 @@
 $asQV:function(){return[W.KV]}},
 Kx:{
 "^":"TpZ:12;",
-$1:[function(a){return J.lN(a)},"$1",null,2,0,null,145,"call"],
+$1:[function(a){return J.lN(a)},"$1",null,2,0,null,151,"call"],
 $isEH:true},
 bU2:{
 "^":"TpZ:81;a",
@@ -10801,7 +10913,7 @@
 z=C.Nm.zV(P.F(a,!0,null)," ")
 for(y=this.RN,y=H.VM(new H.a7(y,y.length,0,null),[H.u3(y,0)]);y.G();)J.Pw(y.Ff,z)},
 H9:function(a){this.AL.aN(0,new W.uS(a))},
-Rz:function(a,b){return this.jA(new W.Bj(b))},
+Rz:function(a,b){return this.jA(new W.FcD(b))},
 jA:function(a){return this.AL.es(0,!1,new W.hD(a))},
 b1:function(a){this.AL=H.VM(new H.A8(P.F(this.RN,!0,null),new W.FK()),[null,null])},
 static:{or:function(a){var z=new W.nFk(a,null)
@@ -10819,7 +10931,7 @@
 "^":"TpZ:12;a",
 $1:function(a){return a.H9(this.a)},
 $isEH:true},
-Bj:{
+FcD:{
 "^":"TpZ:12;a",
 $1:function(a){return J.V1(a,this.a)},
 $isEH:true},
@@ -10839,7 +10951,7 @@
 "^":"a;fA"},
 RO:{
 "^":"wS;bi,fA,el",
-KR:function(a,b,c,d){var z=new W.Ov(0,this.bi,this.fA,W.aF(a),this.el)
+KR:function(a,b,c,d){var z=new W.Ov(0,this.bi,this.fA,W.Yt(a),this.el)
 z.$builtinTypeInfo=this.$builtinTypeInfo
 z.DN()
 return z},
@@ -10868,7 +10980,7 @@
 return},
 Fv:[function(a,b){if(this.bi==null)return;++this.UU
 this.EO()
-if(b!=null)b.wM(this.gDQ(this))},function(a){return this.Fv(a,null)},"WJ","$1","$0","gX0",0,2,130,22,131],
+if(b!=null)b.wM(this.gDQ(this))},function(a){return this.Fv(a,null)},"WJ","$1","$0","gX0",0,2,136,22,137],
 gUF:function(){return this.UU>0},
 QE:[function(a){if(this.bi==null||this.UU<=0)return;--this.UU
 this.DN()},"$0","gDQ",0,0,17],
@@ -10949,7 +11061,6 @@
 xO:function(a){return this.uU.close()},
 xc:function(a,b,c,d){this.uU.postMessage(P.pf(b),c)},
 X6:function(a,b,c){return this.xc(a,b,c,null)},
-gI:function(a){return H.vh(P.f("You can only attach EventListeners to your own window."))},
 On:function(a,b,c,d){return H.vh(P.f("You can only attach EventListeners to your own window."))},
 Y9:function(a,b,c,d){return H.vh(P.f("You can only attach EventListeners to your own window."))},
 $isPZ:true,
@@ -11019,7 +11130,7 @@
 HAk:{
 "^":"d5G;x=,y=",
 "%":"SVGFESpotLightElement"},
-HX:{
+Rg:{
 "^":"d5G;fg:height=,yG:result=,x=,y=",
 "%":"SVGFETileElement"},
 juM:{
@@ -11031,7 +11142,7 @@
 l6:{
 "^":"tpr;fg:height=,x=,y=",
 "%":"SVGForeignObjectElement"},
-d0D:{
+en:{
 "^":"tpr;",
 "%":"SVGCircleElement|SVGEllipseElement|SVGLineElement|SVGPathElement|SVGPolygonElement|SVGPolylineElement;SVGGeometryElement"},
 tpr:{
@@ -11047,7 +11158,7 @@
 "^":"d5G;fg:height=,x=,y=,mH:href=",
 "%":"SVGPatternElement"},
 NJ3:{
-"^":"d0D;fg:height=,x=,y=",
+"^":"en;fg:height=,x=,y=",
 "%":"SVGRectElement"},
 qIR:{
 "^":"d5G;t5:type=,mH:href=",
@@ -11065,7 +11176,7 @@
 gf0:function(a){return H.VM(new W.Cqa(a,C.Kq.fA,!1),[null])},
 $isPZ:true,
 "%":"SVGAltGlyphDefElement|SVGAltGlyphItemElement|SVGAnimateElement|SVGAnimateMotionElement|SVGAnimateTransformElement|SVGAnimationElement|SVGComponentTransferFunctionElement|SVGCursorElement|SVGDescElement|SVGDiscardElement|SVGFEDistantLightElement|SVGFEDropShadowElement|SVGFEFuncAElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement|SVGFEMergeNodeElement|SVGFontElement|SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement|SVGGlyphElement|SVGGlyphRefElement|SVGHKernElement|SVGMPathElement|SVGMarkerElement|SVGMetadataElement|SVGMissingGlyphElement|SVGSetElement|SVGStopElement|SVGSymbolElement|SVGTitleElement|SVGVKernElement|SVGViewElement;SVGElement",
-static:{"^":"JQ<"}},
+static:{"^":"SHk<"}},
 hy:{
 "^":"tpr;fg:height=,x=,y=",
 Kb:function(a,b){return a.getElementById(b)},
@@ -11436,14 +11547,14 @@
 return a},
 aRu:function(a){a.toString
 return a},
-GG:function(a,b,c){H.Hj(a,b,c)
+z4:function(a,b,c){H.Hj(a,b,c)
 return new Uint8Array(a,b)},
-WZ:{
+bf:{
 "^":"Gv;H3:byteLength=",
 gbx:function(a){return C.uh},
 kq:function(a,b,c){H.Hj(a,b,c)
 return new DataView(a,b)},
-$isWZ:true,
+$isbf:true,
 $isaI:true,
 "%":"ArrayBuffer"},
 eH:{
@@ -11525,7 +11636,7 @@
 $isQV:true,
 $asQV:function(){return[P.KN]},
 "%":"Int8Array"},
-us:{
+pd:{
 "^":"Pg;",
 gbx:function(a){return C.M5},
 t:function(a,b){var z=a.length
@@ -11540,7 +11651,7 @@
 "%":"Uint16Array"},
 Pqh:{
 "^":"Pg;",
-gbx:function(a){return C.za},
+gbx:function(a){return C.Vh},
 t:function(a,b){var z=a.length
 if(b>>>0!==b||b>=z)this.aq(a,b,z)
 return a[b]},
@@ -11662,12 +11773,12 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.vo.LX(a)
-C.vo.XI(a)
+C.BB.LX(a)
+C.BB.XI(a)
 return a}}}}],["","",,F,{
 "^":"",
 ZP:{
-"^":"WZq;Ew,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"pva;Ew,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gkc:function(a){return a.Ew},
 skc:function(a,b){a.Ew=this.ct(a,C.yh,a.Ew,b)},
 static:{Yw:function(a){var z,y,x,w
@@ -11686,12 +11797,12 @@
 C.On.LX(a)
 C.On.XI(a)
 return a}}},
-WZq:{
+pva:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,L,{
 "^":"",
 nJ:{
-"^":"pva;a3,Ek,Ln,y4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"cda;a3,Ek,Ln,y4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 ga4:function(a){return a.a3},
 sa4:function(a,b){a.a3=this.ct(a,C.mi,a.a3,b)},
 gdu:function(a){return a.Ek},
@@ -11706,7 +11817,7 @@
 z=this.ct(a,C.eh,a.Ek,z)
 a.Ek=z
 if(J.xC(z,"1-line")){z=J.JA(a.a3,"\n"," ")
-a.a3=this.ct(a,C.mi,a.a3,z)}},"$3","gxb",6,0,115,2,106,107],
+a.a3=this.ct(a,C.mi,a.a3,z)}},"$3","gxb",6,0,116,2,106,107],
 kk:[function(a,b,c,d){var z,y,x
 J.fD(b)
 z=a.a3
@@ -11715,9 +11826,9 @@
 x=R.tB(y)
 J.kW(x,"expr",z)
 J.Vk(a.y4,0,x)
-this.LY(a,z).ml(new L.YW(x))}},"$3","gZ2",6,0,115,2,106,107],
+this.LY(a,z).ml(new L.YW(x))}},"$3","gZ2",6,0,116,2,106,107],
 o5:[function(a,b){var z=J.VU(J.l2(b),"expr")
-a.a3=this.ct(a,C.mi,a.a3,z)},"$1","gHo",2,0,146,2],
+a.a3=this.ct(a,C.mi,a.a3,z)},"$1","gHo",2,0,152,2],
 static:{Rpj:function(a){var z,y,x,w,v
 z=R.tB([])
 y=P.L5(null,null,null,P.qU,W.I0)
@@ -11737,12 +11848,12 @@
 C.Jh.LX(a)
 C.Jh.XI(a)
 return a}}},
-pva:{
+cda:{
 "^":"uL+Pi;",
 $isd3:true},
 YW:{
 "^":"TpZ:12;a",
-$1:[function(a){J.kW(this.a,"value",a)},"$1",null,2,0,null,147,"call"],
+$1:[function(a){J.kW(this.a,"value",a)},"$1",null,2,0,null,121,"call"],
 $isEH:true}}],["","",,R,{
 "^":"",
 Eg:{
@@ -11789,14 +11900,14 @@
 "^":"xc+Pi;",
 $isd3:true},
 Kz:{
-"^":"TpZ:148;a",
+"^":"TpZ:153;a",
 $1:[function(a){var z=this.a
-z.oy=J.Q5(z,C.UY,z.oy,a)},"$1",null,2,0,null,96,"call"],
+z.oy=J.NB(z,C.UY,z.oy,a)},"$1",null,2,0,null,96,"call"],
 $isEH:true},
 uv:{
 "^":"TpZ:76;b",
 $0:[function(){var z=this.b
-z.fe=J.Q5(z,C.S4,z.fe,!1)},"$0",null,0,0,null,"call"],
+z.fe=J.NB(z,C.S4,z.fe,!1)},"$0",null,0,0,null,"call"],
 $isEH:true}}],["","",,D,{
 "^":"",
 i7:{
@@ -11820,7 +11931,7 @@
 return a}}}}],["","",,A,{
 "^":"",
 Gk:{
-"^":"cda;KV,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"waa;KV,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gt0:function(a){return a.KV},
 st0:function(a,b){a.KV=this.ct(a,C.WQ,a.KV,b)},
 pA:[function(a,b){J.LE(a.KV).wM(b)},"$1","gvC",2,0,19,102],
@@ -11840,12 +11951,12 @@
 C.LTI.LX(a)
 C.LTI.XI(a)
 return a}}},
-cda:{
+waa:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,X,{
 "^":"",
 J3:{
-"^":"waa;DC,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V10;DC,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gpM:function(a){return a.DC},
 spM:function(a,b){a.DC=this.ct(a,C.Mc,a.DC,b)},
 pA:[function(a,b){J.LE(a.DC).wM(b)},"$1","gvC",2,0,19,102],
@@ -11865,11 +11976,11 @@
 C.n0.LX(a)
 C.n0.XI(a)
 return a}}},
-waa:{
+V10:{
 "^":"uL+Pi;",
 $isd3:true},
 MJ:{
-"^":"V10;Zc,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V11;Zc,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gQR:function(a){return a.Zc},
 sQR:function(a,b){a.Zc=this.ct(a,C.OO,a.Zc,b)},
 static:{IfX:function(a){var z,y,x,w
@@ -11888,7 +11999,7 @@
 C.ls6.LX(a)
 C.ls6.XI(a)
 return a}}},
-V10:{
+V11:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,U,{
 "^":"",
@@ -11919,7 +12030,7 @@
 $isd3:true}}],["","",,N,{
 "^":"",
 BS:{
-"^":"V11;P6,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V12;P6,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gig:function(a){return a.P6},
 sig:function(a,b){a.P6=this.ct(a,C.nf,a.P6,b)},
 pA:[function(a,b){J.LE(a.P6).wM(b)},"$1","gvC",2,0,19,102],
@@ -11940,7 +12051,7 @@
 C.PJ8.LX(a)
 C.PJ8.XI(a)
 return a}}},
-V11:{
+V12:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,O,{
 "^":"",
@@ -11950,7 +12061,7 @@
 C.yp.zB(J.Qd(this.zE),z,z+4,b)},
 gih:function(a){var z=this.y5
 return C.yp.Yc(J.Qd(this.zE),z,z+4)},
-PY:[function(){return new O.Hz(this.zE,this.y5+4)},"$0","gaw",0,0,149],
+PY:[function(){return new O.Hz(this.zE,this.y5+4)},"$0","gaw",0,0,154],
 gvH:function(a){return C.CD.BU(this.y5,4)},
 static:{"^":"Q0z",x6:function(a,b){var z,y,x
 z=J.RE(b)
@@ -11964,7 +12075,7 @@
 x2:{
 "^":"a;Yu<,yT>"},
 Vb:{
-"^":"V12;A6,WC,rn,Tl,GE,Cv,PA,oj,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V13;N2,WC,rn,Tl,GE,Cv,PA,oj,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gpf:function(a){return a.PA},
 spf:function(a,b){a.PA=this.ct(a,C.PM,a.PA,b)},
 gyw:function(a){return a.oj},
@@ -11972,16 +12083,16 @@
 Es:function(a){var z
 Z.uL.prototype.Es.call(this,a)
 z=(a.shadowRoot||a.webkitShadowRoot).querySelector("#fragmentation")
-a.A6=z
+a.N2=z
 z=J.Q9(z)
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(this.gL2(a)),z.el),[H.u3(z,0)]).DN()
-z=J.GW(a.A6)
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(this.gok(a)),z.el),[H.u3(z,0)]).DN()},
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(this.gL2(a)),z.el),[H.u3(z,0)]).DN()
+z=J.GW(a.N2)
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(this.gok(a)),z.el),[H.u3(z,0)]).DN()},
 Zt:function(a,b){var z,y,x
 for(z=J.mY(b),y=0;z.G();){x=z.Ff
 if(typeof x!=="number")return H.s(x)
 y=y*256+x}return y},
-OU:function(a,b,c,d){var z=J.It(c,"@")
+OU:function(a,b,c,d){var z=J.BQ(c,"@")
 if(0>=z.length)return H.e(z,0)
 a.Cv.u(0,b,z[0])
 a.Tl.u(0,b,d)
@@ -11989,10 +12100,10 @@
 DO:function(a,b,c){var z,y,x,w,v,u,t,s,r
 for(z=J.mY(J.UQ(b,"members")),y=a.Cv,x=a.Tl,w=a.GE;z.G();){v=z.gl()
 if(!J.x(v).$isdy){N.QM("").To(H.d(v))
-continue}u=H.BU(C.Nm.grZ(J.It(v.TU,"/")),null,null)
-t=u==null?C.pr:P.n2(u)
+continue}u=H.BU(C.Nm.grZ(J.BQ(v.TU,"/")),null,null)
+t=u==null?C.Xh:P.n2(u)
 s=[t.j1(128),t.j1(128),t.j1(128),255]
-r=J.It(v.bN,"@")
+r=J.BQ(v.bN,"@")
 if(0>=r.length)return H.e(r,0)
 y.u(0,u,r[0])
 x.u(0,u,s)
@@ -12039,15 +12150,15 @@
 w=z.y5
 v=a.Cv.t(0,a.GE.t(0,this.Zt(a,C.yp.Yc(J.Qd(z.zE),w,w+4))))
 z=J.xC(v,"")?"-":H.d(v)+" "+x
-a.PA=this.ct(a,C.PM,a.PA,z)},"$1","gL2",2,0,146,87],
+a.PA=this.ct(a,C.PM,a.PA,z)},"$1","gL2",2,0,152,87],
 qM:[function(a,b){var z=J.u1(this.Tm(a,J.op(b)).Yu,16)
-window.location.hash="/"+H.d(J.Ds(J.aT(a.oj)))+"/address/"+z},"$1","gok",2,0,146,87],
+window.location.hash="/"+H.d(J.Ds(J.aT(a.oj)))+"/address/"+z},"$1","gok",2,0,152,87],
 UV:function(a){var z,y,x,w,v
 z=a.oj
-if(z==null||a.A6==null)return
+if(z==null||a.N2==null)return
 this.DO(a,J.UQ(z,"class_list"),J.UQ(a.oj,"free_class_id"))
 y=J.UQ(a.oj,"pages")
-z=a.A6.parentElement
+z=a.N2.parentElement
 z.toString
 x=P.T7(C.CD.yu(C.CD.RE(z.clientLeft)),C.CD.yu(C.CD.RE(z.clientTop)),C.CD.yu(C.CD.RE(z.clientWidth)),C.CD.yu(C.CD.RE(z.clientHeight)),null).R
 z=J.Cl(J.Cl(J.UQ(a.oj,"page_size_bytes"),J.UQ(a.oj,"unit_size_bytes")),x)
@@ -12057,10 +12168,10 @@
 w=J.q8(y)
 if(typeof w!=="number")return H.s(w)
 v=P.J(z*w,6000)
-w=P.f9(J.Ry(a.A6).createImageData(x,v))
+w=P.f9(J.Ry(a.N2).createImageData(x,v))
 a.WC=w
-J.vP(a.A6,J.eY(w))
-J.OE(a.A6,J.OB(a.WC))
+J.vP(a.N2,J.eY(w))
+J.OE(a.N2,J.OB(a.WC))
 this.Ky(a,0)},
 Ky:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
 z=J.UQ(a.oj,"pages")
@@ -12106,14 +12217,14 @@
 x=$.Qg()
 m=y+4
 C.yp.zB(n.gRn(r),y,m,x)
-u=new O.Hz(r,m)}y=J.Ry(a.A6)
+u=new O.Hz(r,m)}y=J.Ry(a.N2)
 x=a.WC
 J.kZ(y,x,0,0,0,w,J.eY(x),v)
-P.BV(new O.R5(a,b),null)},
+P.DJ(new O.R5(a,b),null)},
 pA:[function(a,b){var z=a.oj
 if(z==null)return
-J.aT(z).cv("heapmap").ml(new O.aG(a)).OA(new O.Wq()).wM(b)},"$1","gvC",2,0,19,102],
-YS7:[function(a,b){P.BV(new O.oc(a),null)},"$1","gRh",2,0,19,59],
+J.aT(z).cv("heapmap").ml(new O.aG(a)).OA(new O.pM()).wM(b)},"$1","gvC",2,0,19,102],
+YS7:[function(a,b){P.DJ(new O.oc(a),null)},"$1","gRh",2,0,19,59],
 static:{"^":"nK,Os,SoT,WBO",teo:function(a){var z,y,x,w,v,u,t
 z=P.Fl(null,null)
 y=P.Fl(null,null)
@@ -12136,7 +12247,7 @@
 C.Al.LX(a)
 C.Al.XI(a)
 return a}}},
-V12:{
+V13:{
 "^":"uL+Pi;",
 $isd3:true},
 R5:{
@@ -12146,11 +12257,11 @@
 aG:{
 "^":"TpZ:114;a",
 $1:[function(a){var z=this.a
-z.oj=J.Q5(z,C.QH,z.oj,a)},"$1",null,2,0,null,150,"call"],
+z.oj=J.NB(z,C.QH,z.oj,a)},"$1",null,2,0,null,155,"call"],
 $isEH:true},
-Wq:{
+pM:{
 "^":"TpZ:81;",
-$2:[function(a,b){N.QM("").To(H.d(a)+" "+H.d(b))},"$2",null,4,0,null,2,151,"call"],
+$2:[function(a,b){N.QM("").To(H.d(a)+" "+H.d(b))},"$2",null,4,0,null,2,156,"call"],
 $isEH:true},
 oc:{
 "^":"TpZ:76;a",
@@ -12159,12 +12270,12 @@
 "^":"",
 UC:{
 "^":"Vz;oH,vp,zz,pT,Rj,Vg,fn",
-wA:function(a,b){var z
+Ey:function(a,b){var z
 if(b===0){z=this.vp
 if(a>>>0!==a||a>=z.length)return H.e(z,a)
-return J.DA(J.UQ(J.hI(z[a]),b))}return G.Vz.prototype.wA.call(this,a,b)}},
+return J.DA(J.UQ(J.hI(z[a]),b))}return G.Vz.prototype.Ey.call(this,a,b)}},
 Ly:{
-"^":"V13;MF,uY,Xe,jF,FX,Uv,Rp,Na,Ol,Sk,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V14;MF,uY,Xe,jF,FX,Uv,Rp,Na,Ol,Sk,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gYt:function(a){return a.MF},
 sYt:function(a,b){a.MF=this.ct(a,C.TN,a.MF,b)},
 gcH:function(a){return a.uY},
@@ -12216,7 +12327,7 @@
 while(!0){v=J.q8(x.gUQ(z))
 if(typeof v!=="number")return H.s(v)
 if(!(w<v))break
-c$0:{if(C.Nm.tg(C.NG,w))break c$0
+c$0:{if(C.Nm.tg(C.Q5,w))break c$0
 u=J.UQ(y.gks(b),w)
 v=J.RE(u)
 v.smk(u,J.AG(J.UQ(x.gUQ(z),w)))
@@ -12267,7 +12378,7 @@
 eJ8:[function(a,b){var z=a.Ol
 if(z==null)return
 J.aT(z).cv("/allocationprofile?reset=true").ml(this.gLv(a)).wM(b)},"$1","gNb",2,0,19,102],
-Ed:[function(a,b){a.Ol=this.ct(a,C.vb,a.Ol,b)},"$1","gLv",2,0,152,153],
+Ed:[function(a,b){a.Ol=this.ct(a,C.vb,a.Ol,b)},"$1","gLv",2,0,157,158],
 n1:[function(a,b){var z,y,x,w,v
 z=a.Ol
 if(z==null)return
@@ -12333,17 +12444,17 @@
 if(z==null)return""
 y=J.RE(z)
 x=b===!0?y.god(z).gUY():y.god(z).gxQ()
-return C.CD.Sy(J.L9(J.vX(x.gpy(),1000),x.gYk()),2)+" ms"},"$1","gOd",2,0,154,155],
+return C.CD.Sy(J.L9(J.vX(x.gpy(),1000),x.gYk()),2)+" ms"},"$1","gOd",2,0,159,160],
 NC:[function(a,b){var z,y
 z=a.Ol
 if(z==null)return""
 y=J.RE(z)
-return J.AG((b===!0?y.god(z).gUY():y.god(z).gxQ()).gYk())},"$1","gJN",2,0,154,155],
+return J.AG((b===!0?y.god(z).gUY():y.god(z).gxQ()).gYk())},"$1","gJN",2,0,159,160],
 o7:[function(a,b){var z,y
 z=a.Ol
 if(z==null)return""
 y=J.RE(z)
-return J.cI((b===!0?y.god(z).gUY():y.god(z).gxQ()).gpy(),2)+" secs"},"$1","goN",2,0,154,155],
+return J.cI((b===!0?y.god(z).gUY():y.god(z).gxQ()).gpy(),2)+" secs"},"$1","goN",2,0,159,160],
 Zy:function(a){var z=P.zV(J.UQ($.BY,"DataTable"),null)
 a.Xe=new G.Kf(z)
 z.V7("addColumn",["string","Type"])
@@ -12353,7 +12464,7 @@
 z.V7("addColumn",["string","Type"])
 a.FX.Yb.V7("addColumn",["number","Size"])
 z=H.VM([],[G.Ni])
-z=this.ct(a,C.kG,a.Rp,new K.UC([new G.Kt("Class",G.NZt()),new G.Kt("",G.NZt()),new G.Kt("Accumulated Size (New)",G.Gt()),new G.Kt("Accumulated Instances",G.OA()),new G.Kt("Current Size",G.Gt()),new G.Kt("Current Instances",G.OA()),new G.Kt("",G.NZt()),new G.Kt("Accumulator Size (Old)",G.Gt()),new G.Kt("Accumulator Instances",G.OA()),new G.Kt("Current Size",G.Gt()),new G.Kt("Current Instances",G.OA())],z,[],0,!0,null,null))
+z=this.ct(a,C.kG,a.Rp,new K.UC([new G.Kt("Class",G.Tp()),new G.Kt("",G.Tp()),new G.Kt("Accumulated Size (New)",G.Gt()),new G.Kt("Accumulated Instances",G.OA()),new G.Kt("Current Size",G.Gt()),new G.Kt("Current Instances",G.OA()),new G.Kt("",G.Tp()),new G.Kt("Accumulator Size (Old)",G.Gt()),new G.Kt("Accumulator Instances",G.OA()),new G.Kt("Current Size",G.Gt()),new G.Kt("Current Instances",G.OA())],z,[],0,!0,null,null))
 a.Rp=z
 z.sxp(2)},
 static:{EDe:function(a){var z,y,x,w
@@ -12375,7 +12486,7 @@
 C.Vc.XI(a)
 C.Vc.Zy(a)
 return a}}},
-V13:{
+V14:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,P,{
 "^":"",
@@ -12409,13 +12520,13 @@
 return y},
 $isEH:true},
 rG:{
-"^":"TpZ:156;d",
+"^":"TpZ:161;d",
 $1:function(a){var z=this.d
 if(a>=z.length)return H.e(z,a)
 return z[a]},
 $isEH:true},
 yhO:{
-"^":"TpZ:157;e",
+"^":"TpZ:162;e",
 $2:function(a,b){var z=this.e
 if(a>=z.length)return H.e(z,a)
 z[a]=b},
@@ -12438,7 +12549,7 @@
 if(!!y.$ishH)return a
 if(!!y.$isO4)return a
 if(!!y.$isSg)return a
-if(!!y.$isWZ)return a
+if(!!y.$isbf)return a
 if(!!y.$iseH)return a
 if(!!y.$isT8){x=this.f.$1(a)
 w=this.UI.$1(x)
@@ -12473,13 +12584,13 @@
 return y},
 $isEH:true},
 D6:{
-"^":"TpZ:156;c",
+"^":"TpZ:161;c",
 $1:function(a){var z=this.c
 if(a>=z.length)return H.e(z,a)
 return z[a]},
 $isEH:true},
 m5:{
-"^":"TpZ:157;d",
+"^":"TpZ:162;d",
 $2:function(a,b){var z=this.d
 if(a>=z.length)return H.e(z,a)
 z[a]=b},
@@ -12526,11 +12637,11 @@
 aN:function(a,b){this.DG().aN(0,b)},
 zV:function(a,b){return this.DG().zV(0,b)},
 ez:[function(a,b){var z=this.DG()
-return H.VM(new H.xy(z,b),[H.u3(z,0),null])},"$1","gIr",2,0,158,30],
+return H.VM(new H.xy(z,b),[H.u3(z,0),null])},"$1","gIr",2,0,163,30],
 ad:function(a,b){var z=this.DG()
 return H.VM(new H.U5(z,b),[H.u3(z,0)])},
 lM:[function(a,b){var z=this.DG()
-return H.VM(new H.oA(z,b),[H.u3(z,0),null])},"$1","git",2,0,159,30],
+return H.VM(new H.oA(z,b),[H.u3(z,0),null])},"$1","git",2,0,164,30],
 Vr:function(a,b){return this.DG().Vr(0,b)},
 gl0:function(a){return this.DG().X5===0},
 gor:function(a){return this.DG().X5!==0},
@@ -12574,19 +12685,19 @@
 $asQV:function(){return[P.qU]}},
 GE:{
 "^":"TpZ:12;a",
-$1:[function(a){return J.bi(a,this.a)},"$1",null,2,0,null,160,"call"],
+$1:[function(a){return J.bi(a,this.a)},"$1",null,2,0,null,165,"call"],
 $isEH:true},
 rl:{
 "^":"TpZ:12;a",
-$1:[function(a){return J.bj(a,this.a)},"$1",null,2,0,null,160,"call"],
+$1:[function(a){return J.bj(a,this.a)},"$1",null,2,0,null,165,"call"],
 $isEH:true},
 Jg:{
 "^":"TpZ:12;a",
-$1:[function(a){return J.Ei(a,this.a)},"$1",null,2,0,null,160,"call"],
+$1:[function(a){return J.Ei(a,this.a)},"$1",null,2,0,null,165,"call"],
 $isEH:true},
 uQ:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Z8(a)},"$1",null,2,0,null,160,"call"],
+$1:[function(a){return J.Z8(a)},"$1",null,2,0,null,165,"call"],
 $isEH:true},
 D7:{
 "^":"ark;im,kG",
@@ -12609,7 +12720,7 @@
 Jd:function(a){return this.GT(a,null)},
 YW:function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on filtered list"))},
 zB:function(a,b,c,d){return this.YW(a,b,c,d,0)},
-oq:function(a,b,c){H.bQ(C.Nm.aM(this.gd3(),b,c),new P.GS())},
+oq:function(a,b,c){H.bQ(C.Nm.aM(this.gd3(),b,c),new P.rK())},
 V1:function(a){J.Wf(this.kG.uR)},
 mv:function(a){var z=this.grZ(this)
 if(z!=null)J.Mp(z)
@@ -12637,34 +12748,33 @@
 "^":"TpZ:12;",
 $1:function(a){return!!J.x(a).$ish4},
 $isEH:true},
-GS:{
+rK:{
 "^":"TpZ:12;",
 $1:function(a){return J.Mp(a)},
 $isEH:true}}],["","",,O,{
 "^":"",
 Im:{
-"^":"ZzR;ee,jw,Vg,fn,tY,Pe,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V15;ee,jw,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gnv:function(a){return a.ee},
 snv:function(a,b){a.ee=this.ct(a,C.kY,a.ee,b)},
-gV8:function(a){return H.Go(a.ee,"$isvO").RF.LL.t(0,"slot")},
-gyg:function(a){var z=H.Go(a.ee,"$isvO").RF.LL.t(0,"slot")
+gV8:function(a){return J.UQ(a.ee,"slot")},
+gyg:function(a){var z=J.UQ(a.ee,"slot")
 return typeof z==="number"},
-gWk:function(a){return!!J.x(H.Go(a.ee,"$isvO").RF.LL.t(0,"slot")).$isvO&&J.xC(J.UQ(H.Go(a.ee,"$isvO").RF.LL.t(0,"slot"),"type"),"@Field")},
-gFF:function(a){return H.Go(a.ee,"$isvO").RF.LL.t(0,"source")},
+gWk:function(a){return!!J.x(J.UQ(a.ee,"slot")).$isvO&&J.xC(J.UQ(J.UQ(a.ee,"slot"),"type"),"@Field")},
+gFF:function(a){return J.UQ(a.ee,"source")},
 gyK:function(a){return a.jw},
 syK:function(a,b){a.jw=this.ct(a,C.uO,a.jw,b)},
-rT:[function(a,b){return J.aT(H.Go(a.ee,"$isvO").RF.LL.t(0,"source")).cv(J.WB(J.eS(H.Go(a.ee,"$isvO").RF.LL.t(0,"source")),"/inbound_references?limit="+H.d(b))).ml(new O.cC(a))},"$1","gi0",2,0,111,32],
+rT:[function(a,b){return J.aT(J.UQ(a.ee,"source")).cv(J.WB(J.eS(J.UQ(a.ee,"source")),"/inbound_references?limit="+H.d(b))).ml(new O.cC(a))},"$1","gi0",2,0,111,32],
 Gn:[function(a){return this.gus(a)},"$0","gyX",0,0,76],
 vQ:[function(a,b,c){if(b===!0)this.rT(a,100).ml(new O.qm(a)).wM(c)
 else{a.jw=this.ct(a,C.uO,a.jw,null)
-c.$0()}},"$2","gus",4,0,161,162,102],
+c.$0()}},"$2","gus",4,0,118,119,120],
 static:{eka:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
 y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
 x=P.Fl(null,null)
 w=P.Fl(null,null)
-a.Pe=!1
 a.f4=[]
 a.OD=!1
 a.kK=!1
@@ -12675,8 +12785,8 @@
 C.QFk.LX(a)
 C.QFk.XI(a)
 return a}}},
-ZzR:{
-"^":"xI+Pi;",
+V15:{
+"^":"uL+Pi;",
 $isd3:true},
 cC:{
 "^":"TpZ:114;a",
@@ -12685,28 +12795,28 @@
 y=J.UQ(a,"references")
 x=Q.pT(null,null)
 x.FV(0,y)
-z.jw=J.Q5(z,C.uO,z.jw,x)},"$1",null,2,0,null,150,"call"],
+z.jw=J.NB(z,C.uO,z.jw,x)},"$1",null,2,0,null,155,"call"],
 $isEH:true},
 qm:{
 "^":"TpZ:12;a",
-$1:[function(a){J.Q5(this.a,C.kY,0,1)},"$1",null,2,0,null,147,"call"],
+$1:[function(a){J.NB(this.a,C.kY,0,1)},"$1",null,2,0,null,121,"call"],
 $isEH:true}}],["","",,B,{
 "^":"",
 pR:{
 "^":"xI;tY,Pe,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
-gXt:function(a){var z=a.tY
+gJp:function(a){var z=a.tY
 if(z!=null)if(J.xC(J.zH(z),"Sentinel"))if(J.xC(J.eS(a.tY),"objects/optimized-out"))return"This object is no longer needed and has been removed by the optimizing compiler."
 else if(J.xC(J.eS(a.tY),"objects/collected"))return"This object has been reclaimed by the garbage collector."
 else if(J.xC(J.eS(a.tY),"objects/expired"))return"The handle to this object has expired.  Consider refreshing the page."
 else if(J.xC(J.eS(a.tY),"objects/not-initialized"))return"This object will be initialized once it is accessed by the program."
 else if(J.xC(J.eS(a.tY),"objects/being-initialized"))return"This object is currently being initialized."
-return Q.xI.prototype.gXt.call(this,a)},
+return Q.xI.prototype.gJp.call(this,a)},
 Gn:[function(a){return this.gus(a)},"$0","gyX",0,0,76],
 vQ:[function(a,b,c){var z=a.tY
-if(b===!0)J.LE(z).ml(new B.Ng(a)).wM(c)
+if(b===!0)J.LE(z).ml(new B.tV(a)).wM(c)
 else{z.stJ(null)
 J.Z6(z,null)
-c.$0()}},"$2","gus",4,0,161,162,102],
+c.$0()}},"$2","gus",4,0,118,119,120],
 static:{luW:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -12724,38 +12834,28 @@
 C.uRw.LX(a)
 C.uRw.XI(a)
 return a}}},
-Ng:{
+tV:{
 "^":"TpZ:12;a",
 $1:[function(a){var z,y
 if(a.gPE()!=null){J.DF(a,a.gPE())
 a.sTE(a.gPE())}z=this.a
 y=J.RE(z)
 z.tY=y.ct(z,C.kY,z.tY,a)
-y.ct(z,C.kY,0,1)},"$1",null,2,0,null,147,"call"],
+y.ct(z,C.kY,0,1)},"$1",null,2,0,null,121,"call"],
 $isEH:true}}],["","",,Z,{
 "^":"",
 EZ:{
-"^":"V14;VQ,VR,Cm,MV,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V16;VQ,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 ghf:function(a){return a.VQ},
 shf:function(a,b){a.VQ=this.ct(a,C.fn,a.VQ,b)},
-gIi:function(a){return a.VR},
-sIi:function(a,b){a.VR=this.ct(a,C.XM,a.VR,b)},
-gyK:function(a){return a.Cm},
-syK:function(a,b){a.Cm=this.ct(a,C.uO,a.Cm,b)},
-gCF:function(a){return a.MV},
-sCF:function(a,b){a.MV=this.ct(a,C.tg,a.MV,b)},
 vV:[function(a,b){return J.aT(a.VQ).cv(J.WB(J.eS(a.VQ),"/eval?expr="+P.jW(C.Fa,b,C.xM,!1)))},"$1","gZ2",2,0,109,110],
-zs:[function(a,b){return J.aT(a.VQ).cv(J.WB(J.eS(a.VQ),"/retained")).ml(new Z.Pz(a))},"$1","ghN",2,0,111,113],
-Cc:[function(a,b){return J.aT(a.VQ).cv(J.WB(J.eS(a.VQ),"/retaining_path?limit="+H.d(b))).ml(new Z.cL(a))},"$1","gCI",2,0,111,32],
-rT:[function(a,b){return J.aT(a.VQ).cv(J.WB(J.eS(a.VQ),"/inbound_references?limit="+H.d(b))).ml(new Z.Fs(a))},"$1","gi0",2,0,111,32],
-pA:[function(a,b){J.LE(a.VQ).wM(b)},"$1","gvC",2,0,19,102],
+pA:[function(a,b){J.LE(a.VQ).wM(b)},"$1","gvC",2,0,122,120],
 static:{CoW:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
 y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
 x=P.Fl(null,null)
 w=P.Fl(null,null)
-a.MV=null
 a.f4=[]
 a.OD=!1
 a.kK=!1
@@ -12766,29 +12866,12 @@
 C.yKx.LX(a)
 C.yKx.XI(a)
 return a}}},
-V14:{
+V16:{
 "^":"uL+Pi;",
-$isd3:true},
-Pz:{
-"^":"TpZ:114;a",
-$1:[function(a){var z,y
-z=this.a
-y=H.BU(J.UQ(a,"valueAsString"),null,null)
-z.MV=J.Q5(z,C.tg,z.MV,y)},"$1",null,2,0,null,96,"call"],
-$isEH:true},
-cL:{
-"^":"TpZ:148;a",
-$1:[function(a){var z=this.a
-z.VR=J.Q5(z,C.XM,z.VR,a)},"$1",null,2,0,null,96,"call"],
-$isEH:true},
-Fs:{
-"^":"TpZ:148;a",
-$1:[function(a){var z=this.a
-z.Cm=J.Q5(z,C.uO,z.Cm,a)},"$1",null,2,0,null,96,"call"],
-$isEH:true}}],["","",,E,{
+$isd3:true}}],["","",,E,{
 "^":"",
 L4:{
-"^":"V15;PM,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V17;PM,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gkm:function(a){return a.PM},
 skm:function(a,b){a.PM=this.ct(a,C.qs,a.PM,b)},
 pA:[function(a,b){J.LE(a.PM).wM(b)},"$1","gvC",2,0,19,102],
@@ -12808,7 +12891,7 @@
 C.j1o.LX(a)
 C.j1o.XI(a)
 return a}}},
-V15:{
+V17:{
 "^":"uL+Pi;",
 $isd3:true},
 Mb:{
@@ -12831,7 +12914,7 @@
 C.Ag.XI(a)
 return a}}},
 mO:{
-"^":"V16;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V18;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gjx:function(a){return a.Cr},
 sjx:function(a,b){a.Cr=this.ct(a,C.vp,a.Cr,b)},
 pA:[function(a,b){J.LE(a.Cr).wM(b)},"$1","gvC",2,0,19,102],
@@ -12851,7 +12934,7 @@
 C.Ie.LX(a)
 C.Ie.XI(a)
 return a}}},
-V16:{
+V18:{
 "^":"uL+Pi;",
 $isd3:true},
 DE:{
@@ -12874,7 +12957,7 @@
 C.Ig.XI(a)
 return a}}},
 U1:{
-"^":"V17;yR,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V19;yR,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gql:function(a){return a.yR},
 sql:function(a,b){a.yR=this.ct(a,C.oj,a.yR,b)},
 pA:[function(a,b){J.LE(a.yR).wM(b)},"$1","gvC",2,0,19,102],
@@ -12902,7 +12985,7 @@
 C.VLs.LX(a)
 C.VLs.XI(a)
 return a}}},
-V17:{
+V19:{
 "^":"uL+Pi;",
 $isd3:true},
 XB:{
@@ -12911,11 +12994,11 @@
 if(z.c3!=null)z.c3=P.cH(P.ii(0,0,0,0,0,1),J.wd(z))},"$0",null,0,0,null,"call"],
 $isEH:true},
 H8:{
-"^":"V18;OS,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V20;OS,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gPB:function(a){return a.OS},
 sPB:function(a,b){a.OS=this.ct(a,C.yL,a.OS,b)},
 pA:[function(a,b){J.LE(a.OS).wM(b)},"$1","gvC",2,0,19,102],
-nS:[function(a){J.LE(a.OS).wM(new E.uN(a))},"$0","gqw",0,0,17],
+nS:[function(a){J.LE(a.OS).wM(new E.cP(a))},"$0","gqw",0,0,17],
 Es:function(a){Z.uL.prototype.Es.call(this,a)
 a.c3=P.cH(P.ii(0,0,0,0,0,1),this.gqw(a))},
 Lx:function(a){var z
@@ -12939,10 +13022,10 @@
 C.tO.LX(a)
 C.tO.XI(a)
 return a}}},
-V18:{
+V20:{
 "^":"uL+Pi;",
 $isd3:true},
-uN:{
+cP:{
 "^":"TpZ:76;a",
 $0:[function(){var z=this.a
 if(z.c3!=null)z.c3=P.cH(P.ii(0,0,0,0,0,1),J.wd(z))},"$0",null,0,0,null,"call"],
@@ -12986,7 +13069,7 @@
 C.IXz.XI(a)
 return a}}},
 oF:{
-"^":"V19;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V21;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gjx:function(a){return a.Cr},
 sjx:function(a,b){a.Cr=this.ct(a,C.vp,a.Cr,b)},
 pA:[function(a,b){J.LE(a.Cr).wM(b)},"$1","gvC",2,0,19,102],
@@ -13006,11 +13089,11 @@
 C.ozm.LX(a)
 C.ozm.XI(a)
 return a}}},
-V19:{
+V21:{
 "^":"uL+Pi;",
 $isd3:true},
 Q6:{
-"^":"V20;uv,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V22;uv,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gj4:function(a){return a.uv},
 sj4:function(a,b){a.uv=this.ct(a,C.Ve,a.uv,b)},
 pA:[function(a,b){J.LE(a.uv).wM(b)},"$1","gvC",2,0,19,102],
@@ -13030,7 +13113,7 @@
 C.rU.LX(a)
 C.rU.XI(a)
 return a}}},
-V20:{
+V22:{
 "^":"uL+Pi;",
 $isd3:true},
 uE:{
@@ -13053,7 +13136,7 @@
 C.Fw.XI(a)
 return a}}},
 Zn:{
-"^":"V21;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V23;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gjx:function(a){return a.Cr},
 sjx:function(a,b){a.Cr=this.ct(a,C.vp,a.Cr,b)},
 pA:[function(a,b){J.LE(a.Cr).wM(b)},"$1","gvC",2,0,19,102],
@@ -13070,14 +13153,14 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.ij.LX(a)
-C.ij.XI(a)
+C.ag.LX(a)
+C.ag.XI(a)
 return a}}},
-V21:{
+V23:{
 "^":"uL+Pi;",
 $isd3:true},
 n5:{
-"^":"V22;h1,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V24;h1,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gHy:function(a){return a.h1},
 sHy:function(a,b){a.h1=this.ct(a,C.YE,a.h1,b)},
 pA:[function(a,b){J.LE(a.h1).wM(b)},"$1","gvC",2,0,19,102],
@@ -13097,11 +13180,11 @@
 C.UZ.LX(a)
 C.UZ.XI(a)
 return a}}},
-V22:{
+V24:{
 "^":"uL+Pi;",
 $isd3:true},
 Ma:{
-"^":"V23;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V25;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gjx:function(a){return a.Cr},
 sjx:function(a,b){a.Cr=this.ct(a,C.vp,a.Cr,b)},
 pA:[function(a,b){J.LE(a.Cr).wM(b)},"$1","gvC",2,0,19,102],
@@ -13121,7 +13204,7 @@
 C.iR.LX(a)
 C.iR.XI(a)
 return a}}},
-V23:{
+V25:{
 "^":"uL+Pi;",
 $isd3:true},
 wN:{
@@ -13144,7 +13227,7 @@
 C.RVQ.XI(a)
 return a}}},
 ds:{
-"^":"V24;wT,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V26;wT,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gMZ:function(a){return a.wT},
 sMZ:function(a,b){a.wT=this.ct(a,C.jU,a.wT,b)},
 pA:[function(a,b){J.LE(a.wT).wM(b)},"$1","gvC",2,0,19,102],
@@ -13172,7 +13255,7 @@
 C.wP.LX(a)
 C.wP.XI(a)
 return a}}},
-V24:{
+V26:{
 "^":"uL+Pi;",
 $isd3:true},
 mj:{
@@ -13181,7 +13264,7 @@
 if(z.c3!=null)z.c3=P.cH(P.ii(0,0,0,0,0,1),J.Nb(z))},"$0",null,0,0,null,"call"],
 $isEH:true},
 qM:{
-"^":"V25;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V27;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gjx:function(a){return a.Cr},
 sjx:function(a,b){a.Cr=this.ct(a,C.vp,a.Cr,b)},
 pA:[function(a,b){J.LE(a.Cr).wM(b)},"$1","gvC",2,0,19,102],
@@ -13198,14 +13281,14 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.wvk.LX(a)
-C.wvk.XI(a)
+C.ej.LX(a)
+C.ej.XI(a)
 return a}}},
-V25:{
+V27:{
 "^":"uL+Pi;",
 $isd3:true},
 av:{
-"^":"oEY;CB,Vg,fn,tY,Pe,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"ZzR;CB,Vg,fn,tY,Pe,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gEQ:function(a){return a.CB},
 sEQ:function(a,b){a.CB=this.ct(a,C.pH,a.CB,b)},
 static:{R7:function(a){var z,y,x,w
@@ -13226,11 +13309,11 @@
 C.OkI.LX(a)
 C.OkI.XI(a)
 return a}}},
-oEY:{
+ZzR:{
 "^":"xI+Pi;",
 $isd3:true},
 uz:{
-"^":"V26;RX,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V28;RX,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gpE:function(a){return a.RX},
 Fn:function(a){return this.gpE(a).$0()},
 spE:function(a,b){a.RX=this.ct(a,C.Wj,a.RX,b)},
@@ -13259,7 +13342,7 @@
 C.bZ.LX(a)
 C.bZ.XI(a)
 return a}}},
-V26:{
+V28:{
 "^":"uL+Pi;",
 $isd3:true},
 Cc:{
@@ -13306,7 +13389,7 @@
 z.mW(a,b,c,d)
 return z}}},
 kK:{
-"^":"V27;oi,TH,WT,Uw,Ik,oo,fE,ev,XX,TM,Xg,Hm=,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V29;oi,TH,WT,Uw,Ik,oo,fE,ev,XX,TM,Xg,Hm=,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gB1:function(a){return a.oi},
 sB1:function(a,b){a.oi=this.ct(a,C.vb,a.oi,b)},
 gPL:function(a){return a.TH},
@@ -13354,7 +13437,7 @@
 z=R.tB([])
 a.Hm=new G.ih(z,null,null)
 this.Zb(a)},
-TN:[function(a,b){this.pA(a,null)},"$1","gb6",2,0,19,59],
+ov:[function(a,b){this.pA(a,null)},"$1","gb6",2,0,19,59],
 pA:[function(a,b){var z="profile?tags="+H.d(a.TM)
 J.aT(a.oi).cv(z).ml(new X.Xy(a)).wM(b)},"$1","gvC",2,0,19,102],
 Zb:function(a){if(a.oi==null)return
@@ -13373,7 +13456,7 @@
 w=J.RE(b)
 if(!J.xC(J.eS(w.gN(b)),"expand")&&!J.xC(w.gN(b),d))return
 z=J.Lp(d)
-if(!!J.x(z).$istV)try{w=a.Hm
+if(!!J.x(z).$isIv)try{w=a.Hm
 v=J.IO(z)
 if(typeof v!=="number")return v.W()
 w.lo(v-1)}catch(u){w=H.Ru(u)
@@ -13405,13 +13488,13 @@
 C.kS.LX(a)
 C.kS.XI(a)
 return a}}},
-V27:{
+V29:{
 "^":"uL+Pi;",
 $isd3:true},
 Xy:{
 "^":"TpZ:114;a",
 $1:[function(a){var z=this.a
-z.oi=J.Q5(z,C.vb,z.oi,a)},"$1",null,2,0,null,163,"call"],
+z.oi=J.NB(z,C.vb,z.oi,a)},"$1",null,2,0,null,166,"call"],
 $isEH:true}}],["","",,N,{
 "^":"",
 oa:{
@@ -13435,7 +13518,7 @@
 return a}}}}],["","",,D,{
 "^":"",
 St:{
-"^":"V28;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V30;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 god:function(a){return a.ow},
 sod:function(a,b){a.ow=this.ct(a,C.rB,a.ow,b)},
 static:{N5:function(a){var z,y,x,w
@@ -13454,23 +13537,23 @@
 C.OoF.LX(a)
 C.OoF.XI(a)
 return a}}},
-V28:{
+V30:{
 "^":"uL+Pi;",
 $isd3:true},
 IW:{
-"^":"V29;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V31;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 god:function(a){return a.ow},
 sod:function(a,b){a.ow=this.ct(a,C.rB,a.ow,b)},
-Fv:[function(a,b){return J.Ho(a.ow)},"$1","gX0",2,0,164,13],
-kf:[function(a,b){$.Kh.pZ(a.ow)
-return J.df(a.ow)},"$1","gDQ",2,0,164,13],
+Fv:[function(a,b){return J.Ho(a.ow)},"$1","gX0",2,0,167,13],
+qW:[function(a,b){$.Kh.pZ(a.ow)
+return J.df(a.ow)},"$1","gDQ",2,0,167,13],
 PyB:[function(a,b){$.Kh.pZ(a.ow)
-return J.UR(a.ow)},"$1","gLc",2,0,164,13],
+return J.UR(a.ow)},"$1","gLc",2,0,167,13],
 XQ:[function(a,b){$.Kh.pZ(a.ow)
-return J.MU(a.ow)},"$1","gqF",2,0,164,13],
+return J.MU(a.ow)},"$1","gqF",2,0,167,13],
 Cx:[function(a,b){$.Kh.pZ(a.ow)
-return J.Fy(a.ow)},"$1","gZp",2,0,164,13],
-static:{zr:function(a){var z,y,x,w
+return J.Fy(a.ow)},"$1","gZp",2,0,167,13],
+static:{dmb:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
 y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
@@ -13486,11 +13569,11 @@
 C.F2.LX(a)
 C.F2.XI(a)
 return a}}},
-V29:{
+V31:{
 "^":"uL+Pi;",
 $isd3:true},
 Qh:{
-"^":"V30;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V32;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 god:function(a){return a.ow},
 sod:function(a,b){a.ow=this.ct(a,C.rB,a.ow,b)},
 static:{Qj:function(a){var z,y,x,w
@@ -13509,11 +13592,11 @@
 C.rCJ.LX(a)
 C.rCJ.XI(a)
 return a}}},
-V30:{
+V32:{
 "^":"uL+Pi;",
 $isd3:true},
 Oz:{
-"^":"V31;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V33;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 god:function(a){return a.ow},
 sod:function(a,b){a.ow=this.ct(a,C.rB,a.ow,b)},
 static:{TSH:function(a){var z,y,x,w
@@ -13532,7 +13615,7 @@
 C.mb.LX(a)
 C.mb.XI(a)
 return a}}},
-V31:{
+V33:{
 "^":"uL+Pi;",
 $isd3:true},
 vT:{
@@ -13542,7 +13625,7 @@
 if(J.xC(z.nQ("getNumberOfColumns"),0)){z.V7("addColumn",["string","Name"])
 z.V7("addColumn",["number","Value"])}z.V7("removeRows",[0,z.nQ("getNumberOfRows")])
 for(y=J.RE(a),x=J.mY(y.gvc(a));x.G();){w=x.gl()
-v=J.It(y.t(a,w),"%")
+v=J.BQ(y.t(a,w),"%")
 if(0>=v.length)return H.e(v,0)
 u=[]
 C.Nm.FV(u,C.Nm.ez([w,H.RR(v[0],null)],P.En()))
@@ -13550,7 +13633,7 @@
 u.$builtinTypeInfo=[null]
 z.V7("addRow",[u])}}},
 Z4:{
-"^":"V32;wd,iw,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V34;wd,iw,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gXE:function(a){return a.wd},
 sXE:function(a,b){a.wd=this.ct(a,C.bJ,a.wd,b)},
 o4:[function(a,b){var z,y,x
@@ -13581,7 +13664,7 @@
 C.aXP.LX(a)
 C.aXP.XI(a)
 return a}}},
-V32:{
+V34:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,L,{
 "^":"",
@@ -13624,7 +13707,7 @@
 y.$builtinTypeInfo=[null]
 z.V7("addRow",[y])}}},
 qk:{
-"^":"V33;TO,Cn,LR,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V35;TO,Cn,LR,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 god:function(a){return a.TO},
 sod:function(a,b){a.TO=this.ct(a,C.rB,a.TO,b)},
 vV:[function(a,b){var z=a.TO
@@ -13639,8 +13722,8 @@
 a.Cn=null}},
 pA:[function(a,b){J.LE(a.TO).wM(b)},"$1","gvC",2,0,19,102],
 m4:[function(a,b){J.y9(a.TO).wM(b)},"$1","gDX",2,0,19,102],
-Fv:[function(a,b){return a.TO.cv("debug/pause").ml(new L.CV(a))},"$1","gX0",2,0,164,13],
-kf:[function(a,b){return a.TO.cv("resume").ml(new L.Vq(a))},"$1","gDQ",2,0,164,13],
+Fv:[function(a,b){return a.TO.cv("debug/pause").ml(new L.CV(a))},"$1","gX0",2,0,167,13],
+qW:[function(a,b){return a.TO.cv("resume").ml(new L.Vq(a))},"$1","gDQ",2,0,167,13],
 static:{Qtp:function(a){var z,y,x,w,v
 z=P.zV(J.UQ($.BY,"DataTable"),null)
 y=P.L5(null,null,null,P.qU,W.I0)
@@ -13659,7 +13742,7 @@
 C.hys.LX(a)
 C.hys.XI(a)
 return a}}},
-V33:{
+V35:{
 "^":"uL+Pi;",
 $isd3:true},
 LX:{
@@ -13675,15 +13758,15 @@
 y.S2=v
 w.u(0,"isStacked",!0)
 y.S2.bG.u(0,"connectSteps",!1)
-y.S2.bG.u(0,"vAxis",P.EF(["minValue",0,"maxValue",100],null,null))}y.S2.Am(0,y.KK)}if(z.Cn!=null)z.Cn=P.cH(P.ii(0,0,0,0,0,1),J.vc(z))},"$1",null,2,0,null,165,"call"],
+y.S2.bG.u(0,"vAxis",P.EF(["minValue",0,"maxValue",100],null,null))}y.S2.Am(0,y.KK)}if(z.Cn!=null)z.Cn=P.cH(P.ii(0,0,0,0,0,1),J.vc(z))},"$1",null,2,0,null,168,"call"],
 $isEH:true},
 CV:{
 "^":"TpZ:12;a",
-$1:[function(a){return J.LE(this.a.TO)},"$1",null,2,0,null,147,"call"],
+$1:[function(a){return J.LE(this.a.TO)},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 Vq:{
 "^":"TpZ:12;a",
-$1:[function(a){return J.LE(this.a.TO)},"$1",null,2,0,null,147,"call"],
+$1:[function(a){return J.LE(this.a.TO)},"$1",null,2,0,null,121,"call"],
 $isEH:true}}],["","",,Z,{
 "^":"",
 xh:{
@@ -13737,7 +13820,7 @@
 u=x.IN+=typeof v==="string"?v:H.d(v)
 x.IN=u+"\n"}}z.Rz(0,a)}},
 vj:{
-"^":"V34;Ly,cs,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V36;Ly,cs,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gIr:function(a){return a.Ly},
 ez:function(a,b){return this.gIr(a).$1(b)},
 sIr:function(a,b){a.Ly=this.ct(a,C.SR,a.Ly,b)},
@@ -13766,10 +13849,10 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.Yt.LX(a)
-C.Yt.XI(a)
+C.Du.LX(a)
+C.Du.XI(a)
 return a}}},
-V34:{
+V36:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,R,{
 "^":"",
@@ -13794,7 +13877,7 @@
 return a}}}}],["","",,M,{
 "^":"",
 CX:{
-"^":"V35;px,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V37;px,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gHt:function(a){return a.px},
 sHt:function(a,b){a.px=this.ct(a,C.EV,a.px,b)},
 vV:[function(a,b){return J.aT(a.px).cv(J.WB(J.eS(a.px),"/eval?expr="+P.jW(C.Fa,b,C.xM,!1)))},"$1","gZ2",2,0,109,110],
@@ -13816,7 +13899,7 @@
 C.fQ.LX(a)
 C.fQ.XI(a)
 return a}}},
-V35:{
+V37:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,N,{
 "^":"",
@@ -13849,8 +13932,8 @@
 v=J.Lp(v)}else N.QM("").js(w)}},
 X2A:function(a,b,c){return this.Y6(C.EkO,a,b,c)},
 kS:function(a){return this.X2A(a,null,null)},
-Da:function(a,b,c){return this.Y6(C.t4,a,b,c)},
-J4:function(a){return this.Da(a,null,null)},
+TF:function(a,b,c){return this.Y6(C.t4,a,b,c)},
+J4:function(a){return this.TF(a,null,null)},
 DH:function(a,b,c){return this.Y6(C.IF,a,b,c)},
 To:function(a){return this.DH(a,null,null)},
 r0:function(a,b,c){return this.Y6(C.nT,a,b,c)},
@@ -13881,10 +13964,10 @@
 v.QL(z,x,w)
 return v},
 $isEH:true},
-qV:{
+Ng:{
 "^":"a;oc>,P>",
 n:function(a,b){if(b==null)return!1
-return!!J.x(b).$isqV&&this.P===b.P},
+return!!J.x(b).$isNg&&this.P===b.P},
 C:function(a,b){var z=J.Vm(b)
 if(typeof z!=="number")return H.s(z)
 return this.P<z},
@@ -13902,8 +13985,8 @@
 return this.P-z},
 giO:function(a){return this.P},
 bu:[function(a){return this.oc},"$0","gCR",0,0,73],
-$isqV:true,
-static:{"^":"V7K,tmj,Enk,LkO,reI,pd,hlK,MHK,Uu,wC,uxc"}},
+$isNg:true,
+static:{"^":"V7K,tmj,Enk,LkO,reI,kH8,hlK,MHK,Uu,wC,uxc"}},
 HV:{
 "^":"a;OR<,G1>,iJ,Fl<,O0,kc>,I4<",
 bu:[function(a){return"["+this.OR.oc+"] "+this.iJ+": "+H.d(this.G1)},"$0","gCR",0,0,73],
@@ -13912,23 +13995,23 @@
 "^":"",
 E2:function(){var z,y
 N.QM("").sOR(C.IF)
-N.QM("").gSZ().yI(new F.e518())
+N.QM("").gSZ().yI(new F.e535())
 N.QM("").To("Starting Observatory")
 N.QM("").To("Loading Google Charts API")
 z=J.UQ($.Xw(),"google")
 y=$.Ib()
 z.V7("load",["visualization","1",P.jT(P.EF(["packages",["corechart","table"],"callback",P.mt(y.gv6(y))],null,null))])
-$.Ib().MM.ml(G.vN()).ml(new F.e519())},
-e518:{
-"^":"TpZ:167;",
+$.Ib().MM.ml(G.vN()).ml(new F.e536())},
+e535:{
+"^":"TpZ:170;",
 $1:[function(a){var z
 if(J.xC(a.gOR(),C.nT)){z=J.RE(a)
 if(J.co(z.gG1(a),"Error evaluating expression"))z=J.kE(z.gG1(a),"Can't assign to null: ")===!0||J.kE(z.gG1(a),"Expression is not assignable: ")===!0
 else z=!1}else z=!1
 if(z)return
-P.FL(a.gOR().oc+": "+a.gFl().bu(0)+": "+H.d(J.Oh(a)))},"$1",null,2,0,null,166,"call"],
+P.FL(a.gOR().oc+": "+a.gFl().bu(0)+": "+H.d(J.Oh(a)))},"$1",null,2,0,null,169,"call"],
 $isEH:true},
-e519:{
+e536:{
 "^":"TpZ:12;",
 $1:[function(a){var z,y,x
 N.QM("").To("Initializing Polymer")
@@ -13938,7 +14021,7 @@
 $isEH:true}}],["","",,N,{
 "^":"",
 qn:{
-"^":"V36;GC,OM,zv,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V38;GC,OM,zv,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 guc:function(a){return a.GC},
 suc:function(a,b){a.GC=this.ct(a,C.EP,a.GC,b)},
 god:function(a){return a.OM},
@@ -13988,7 +14071,7 @@
 C.po.LX(a)
 C.po.XI(a)
 return a}}},
-V36:{
+V38:{
 "^":"uL+Pi;",
 $isd3:true},
 FQ:{
@@ -13996,7 +14079,7 @@
 $1:[function(a){J.O8(this.a)},"$1",null,2,0,null,13,"call"],
 $isEH:true},
 I2:{
-"^":"V37;GC,on,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V39;GC,on,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 guc:function(a){return a.GC},
 suc:function(a,b){a.GC=this.ct(a,C.EP,a.GC,b)},
 gbe:function(a){return a.on},
@@ -14019,7 +14102,7 @@
 z=H.BU(H.Go(d,"$isbs").value,null,null)
 y=a.on
 if(y==null)return
-a.GC.TG(z,y)},"$3","gIf",6,0,105,2,106,107],
+a.GC.ZW(z,y)},"$3","gIf",6,0,105,2,106,107],
 d7:[function(a,b,c,d){var z,y
 z=H.BU(H.Go(d,"$isbs").value,null,null)
 y=a.on
@@ -14041,11 +14124,11 @@
 C.Ax.LX(a)
 C.Ax.XI(a)
 return a}}},
-V37:{
+V39:{
 "^":"uL+Pi;",
 $isd3:true},
 FB:{
-"^":"V38;lB,qV,on,OM,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V40;lB,qV,on,OM,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gbe:function(a){return a.on},
 sbe:function(a,b){a.on=this.ct(a,C.kB,a.on,b)},
 god:function(a){return a.OM},
@@ -14071,7 +14154,7 @@
 x=w.gFl()
 v=J.Vm(w)
 u=[]
-C.Nm.FV(u,C.Nm.ez([x.gGt(),x.gS6(),x.gIv()],P.En()))
+C.Nm.FV(u,C.Nm.ez([x.gGt(),x.gS6(),x.gBM()],P.En()))
 t=new P.GD(u)
 t.$builtinTypeInfo=[null]
 x=[]
@@ -14102,12 +14185,12 @@
 C.Mw.LX(a)
 C.Mw.XI(a)
 return a}}},
-V38:{
+V40:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,A,{
 "^":"",
 md:{
-"^":"V39;i4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V41;i4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 giC:function(a){return a.i4},
 siC:function(a,b){a.i4=this.ct(a,C.Ys,a.i4,b)},
 static:{DCi:function(a){var z,y,x,w
@@ -14124,14 +14207,14 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.kD.LX(a)
-C.kD.XI(a)
+C.aV.LX(a)
+C.aV.XI(a)
 return a}}},
-V39:{
+V41:{
 "^":"uL+Pi;",
 $isd3:true},
 Bm:{
-"^":"V40;KU,V4,Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V42;KU,V4,Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gPj:function(a){return a.KU},
 sPj:function(a,b){a.KU=this.ct(a,C.kV,a.KU,b)},
 gwp:function(a){return a.V4},
@@ -14157,11 +14240,11 @@
 C.IG.LX(a)
 C.IG.XI(a)
 return a}}},
-V40:{
+V42:{
 "^":"uL+Pi;",
 $isd3:true},
 Ya:{
-"^":"V41;KU,V4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V43;KU,V4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gPj:function(a){return a.KU},
 sPj:function(a,b){a.KU=this.ct(a,C.kV,a.KU,b)},
 gwp:function(a){return a.V4},
@@ -14181,14 +14264,14 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.cR.LX(a)
-C.cR.XI(a)
+C.nn.LX(a)
+C.nn.XI(a)
 return a}}},
-V41:{
+V43:{
 "^":"uL+Pi;",
 $isd3:true},
 Ww:{
-"^":"V42;rU,SB,Hq,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V44;rU,SB,Hq,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gFR:function(a){return a.rU},
 Ki:function(a){return this.gFR(a).$0()},
 LY:function(a,b){return this.gFR(a).$1(b)},
@@ -14200,7 +14283,7 @@
 VV:[function(a,b,c,d){var z=a.SB
 if(z===!0)return
 a.SB=this.ct(a,C.aP,z,!0)
-if(a.rU!=null)this.LY(a,this.gWd(a))},"$3","gzY",6,0,115,2,106,107],
+if(a.rU!=null)this.LY(a,this.gWd(a))},"$3","gzY",6,0,116,2,106,107],
 uq:[function(a){a.SB=this.ct(a,C.aP,a.SB,!1)},"$0","gWd",0,0,17],
 static:{ZC:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
@@ -14220,7 +14303,7 @@
 C.J7.LX(a)
 C.J7.XI(a)
 return a}}},
-V42:{
+V44:{
 "^":"uL+Pi;",
 $isd3:true},
 ye:{
@@ -14238,11 +14321,11 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.br.LX(a)
-C.br.XI(a)
+C.pl.LX(a)
+C.pl.XI(a)
 return a}}},
 G1:{
-"^":"V43;Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V45;Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 grZ:function(a){return a.Jo},
 srZ:function(a,b){a.Jo=this.ct(a,C.uk,a.Jo,b)},
 static:{Br:function(a){var z,y,x,w
@@ -14262,11 +14345,11 @@
 C.OKl.LX(a)
 C.OKl.XI(a)
 return a}}},
-V43:{
+V45:{
 "^":"uL+Pi;",
 $isd3:true},
 fl:{
-"^":"V44;Jo,iy,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V46;Jo,iy,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 grZ:function(a){return a.Jo},
 srZ:function(a,b){a.Jo=this.ct(a,C.uk,a.Jo,b)},
 god:function(a){return a.iy},
@@ -14276,7 +14359,7 @@
 if(z!=null)return J.Ds(z)
 else return""},
 su6:function(a,b){},
-static:{Du:function(a){var z,y,x,w
+static:{YtF:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
 y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
@@ -14293,11 +14376,11 @@
 C.RRl.LX(a)
 C.RRl.XI(a)
 return a}}},
-V44:{
+V46:{
 "^":"uL+Pi;",
 $isd3:true},
 UK:{
-"^":"V45;VW,Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V47;VW,Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gHt:function(a){return a.VW},
 sHt:function(a,b){a.VW=this.ct(a,C.EV,a.VW,b)},
 grZ:function(a){return a.Jo},
@@ -14319,11 +14402,11 @@
 C.xA.LX(a)
 C.xA.XI(a)
 return a}}},
-V45:{
+V47:{
 "^":"uL+Pi;",
 $isd3:true},
 wM:{
-"^":"V46;Au,Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V48;Au,Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gRu:function(a){return a.Au},
 sRu:function(a,b){a.Au=this.ct(a,C.XA,a.Au,b)},
 grZ:function(a){return a.Jo},
@@ -14345,11 +14428,11 @@
 C.ic.LX(a)
 C.ic.XI(a)
 return a}}},
-V46:{
+V48:{
 "^":"uL+Pi;",
 $isd3:true},
 NK:{
-"^":"V47;rv,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V49;rv,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gRk:function(a){return a.rv},
 sRk:function(a,b){a.rv=this.ct(a,C.ld,a.rv,b)},
 static:{Xii:function(a){var z,y,x,w
@@ -14365,27 +14448,27 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.Mn.LX(a)
-C.Mn.XI(a)
+C.BJj.LX(a)
+C.BJj.XI(a)
 return a}}},
-V47:{
+V49:{
 "^":"uL+Pi;",
 $isd3:true},
 Zx:{
-"^":"V48;rv,Wx,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V50;rv,Wx,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gRk:function(a){return a.rv},
 sRk:function(a,b){a.rv=this.ct(a,C.ld,a.rv,b)},
 gBk:function(a){return a.Wx},
 sBk:function(a,b){a.Wx=this.ct(a,C.p8,a.Wx,b)},
-kf:[function(a,b){$.Kh.pZ(J.aT(a.Wx))
-return J.df(J.aT(a.Wx))},"$1","gDQ",2,0,164,13],
+qW:[function(a,b){$.Kh.pZ(J.aT(a.Wx))
+return J.df(J.aT(a.Wx))},"$1","gDQ",2,0,167,13],
 PyB:[function(a,b){$.Kh.pZ(J.aT(a.Wx))
-return J.UR(J.aT(a.Wx))},"$1","gLc",2,0,164,13],
+return J.UR(J.aT(a.Wx))},"$1","gLc",2,0,167,13],
 XQ:[function(a,b){$.Kh.pZ(J.aT(a.Wx))
-return J.MU(J.aT(a.Wx))},"$1","gqF",2,0,164,13],
+return J.MU(J.aT(a.Wx))},"$1","gqF",2,0,167,13],
 Cx:[function(a,b){$.Kh.pZ(J.aT(a.Wx))
-return J.Fy(J.aT(a.Wx))},"$1","gZp",2,0,164,13],
-cz:[function(a,b,c,d){J.V1(a.rv,a.Wx)},"$3","gTA",6,0,168,2,106,107],
+return J.Fy(J.aT(a.Wx))},"$1","gZp",2,0,167,13],
+cz:[function(a,b,c,d){J.V1(a.rv,a.Wx)},"$3","gTA",6,0,171,2,106,107],
 static:{yno:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -14402,12 +14485,64 @@
 C.L8.LX(a)
 C.L8.XI(a)
 return a}}},
-V48:{
+V50:{
 "^":"uL+Pi;",
-$isd3:true}}],["","",,V,{
+$isd3:true}}],["","",,L,{
+"^":"",
+qV:{
+"^":"V51;dV,qB,GI,wA,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+gWA:function(a){return a.dV},
+sWA:function(a,b){a.dV=this.ct(a,C.td,a.dV,b)},
+gIi:function(a){return a.qB},
+sIi:function(a,b){a.qB=this.ct(a,C.XM,a.qB,b)},
+gyK:function(a){return a.GI},
+syK:function(a,b){a.GI=this.ct(a,C.uO,a.GI,b)},
+gCF:function(a){return a.wA},
+sCF:function(a,b){a.wA=this.ct(a,C.tg,a.wA,b)},
+zs:[function(a,b){return J.aT(a.dV).cv(J.WB(J.eS(a.dV),"/retained")).ml(new L.rQ(a))},"$1","ghN",2,0,111,113],
+Cc:[function(a,b){return J.aT(a.dV).cv(J.WB(J.eS(a.dV),"/retaining_path?limit="+H.d(b))).ml(new L.ky(a))},"$1","gCI",2,0,111,32],
+rT:[function(a,b){return J.aT(a.dV).cv(J.WB(J.eS(a.dV),"/inbound_references?limit="+H.d(b))).ml(new L.WZ(a))},"$1","gi0",2,0,111,32],
+pA:[function(a,b){J.LE(a.dV).wM(b)},"$1","gvC",2,0,122,120],
+static:{P5f:function(a){var z,y,x,w
+z=P.L5(null,null,null,P.qU,W.I0)
+y=P.qU
+y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
+x=P.Fl(null,null)
+w=P.Fl(null,null)
+a.wA=null
+a.f4=[]
+a.OD=!1
+a.kK=!1
+a.ZM=z
+a.ZQ=y
+a.qJ=x
+a.wy=w
+C.br.LX(a)
+C.br.XI(a)
+return a}}},
+V51:{
+"^":"uL+Pi;",
+$isd3:true},
+rQ:{
+"^":"TpZ:114;a",
+$1:[function(a){var z,y
+z=this.a
+y=H.BU(J.UQ(a,"valueAsString"),null,null)
+z.wA=J.NB(z,C.tg,z.wA,y)},"$1",null,2,0,null,96,"call"],
+$isEH:true},
+ky:{
+"^":"TpZ:153;a",
+$1:[function(a){var z=this.a
+z.qB=J.NB(z,C.XM,z.qB,a)},"$1",null,2,0,null,96,"call"],
+$isEH:true},
+WZ:{
+"^":"TpZ:153;a",
+$1:[function(a){var z=this.a
+z.GI=J.NB(z,C.uO,z.GI,a)},"$1",null,2,0,null,96,"call"],
+$isEH:true}}],["","",,V,{
 "^":"",
 F1:{
-"^":"V49;qC,i6=,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V52;qC,i6=,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gz2:function(a){return a.qC},
 sz2:function(a,b){a.qC=this.ct(a,C.VK,a.qC,b)},
 Es:function(a){var z,y,x
@@ -14438,7 +14573,7 @@
 C.YpE.LX(a)
 C.YpE.XI(a)
 return a}}},
-V49:{
+V52:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,Z,{
 "^":"",
@@ -14471,12 +14606,30 @@
 z=a.tB
 if(z==null){this.yM(a)
 return}a.Qf=P.cH(z,this.gPs(a))},"$0","gPs",0,0,17],
-wW:[function(a,b,c,d){this.gi6(a).Z6.Cz(b,c,d)},"$3","gCK",6,0,168,87,106,107],
-XD:[function(a,b){this.gi6(a).Z6
-return"#"+H.d(b)},"$1","gGs",2,0,169,170],
-Qb:[function(a,b){return G.mG(b)},"$1","gSs",2,0,171,172],
+wW:[function(a,b,c,d){this.gi6(a).Z6.Cz(b,c,d)},"$3","gCK",6,0,171,87,106,107],
+Gxe:[function(a,b){this.gi6(a).Z6
+return"#"+H.d(b)},"$1","gGs",2,0,172,173],
+Qb:[function(a,b){return G.mG(b)},"$1","gSs",2,0,174,175],
 Ze:[function(a,b){return G.Xz(b)},"$1","gbJ",2,0,14,15],
-YH:[function(a,b){return H.BU(b,null,null)},"$1","gIb",2,0,139,20],
+YH:[function(a,b){return H.BU(b,null,null)},"$1","gIb",2,0,145,20],
+Rms:[function(a,b,c){var z,y,x,w
+z=[]
+z.push(C.xB.j("'",0))
+for(y=J.GG(b),y=y.gA(y);y.G();){x=y.Ff
+w=J.x(x)
+if(w.n(x,"\n".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\n"))
+else if(w.n(x,"\r".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\r"))
+else if(w.n(x,"\u000c".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\f"))
+else if(w.n(x,"\u0008".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\b"))
+else if(w.n(x,"\t".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\t"))
+else if(w.n(x,"\u000b".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\v"))
+else if(w.n(x,"$".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\$"))
+else if(w.n(x,"\\".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\\\"))
+else if(w.n(x,"'".charCodeAt(0)))C.Nm.FV(z,new J.IA("'"))
+else if(w.C(x,32))C.Nm.FV(z,new J.IA("\\u"+H.d(x)))
+else z.push(x)}if(c===!0)C.Nm.FV(z,new J.IA("..."))
+else z.push(C.xB.j("'",0))
+return P.HM(z)},function(a,b){return this.Rms(a,b,!1)},"hD","$2","$1","gRO",2,2,176,69,20,177],
 static:{ew:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -14519,7 +14672,7 @@
 x=H.VM(new P.Yp(z),[T.yj])
 if(y.YM>=4)H.vh(y.Pq())
 y.MW(x)
-return!0}return!1},"$0","gDx",0,0,125],
+return!0}return!1},"$0","gDx",0,0,131],
 gnz:function(a){var z,y
 z=a.Vg
 if(z!=null){y=z.iE
@@ -14566,7 +14719,7 @@
 z=new O.YC(z)
 return new P.yQ(null,null,null,null,new O.zI(z),new O.hw(z),null,null,null,null,null,null)},
 YC:{
-"^":"TpZ:173;a",
+"^":"TpZ:178;a",
 $2:function(a,b){var z=this.a
 if(z.a)return
 z.a=!0
@@ -14588,14 +14741,14 @@
 return this.f.$0()},"$0",null,0,0,null,"call"],
 $isEH:true},
 hw:{
-"^":"TpZ:174;UI",
+"^":"TpZ:179;UI",
 $4:[function(a,b,c,d){if(d==null)return d
 return new O.iu(this.UI,b,c,d)},"$4",null,8,0,null,26,27,28,30,"call"],
 $isEH:true},
 iu:{
 "^":"TpZ:12;bK,Gq,Rm,w3",
 $1:[function(a){this.bK.$2(this.Gq,this.Rm)
-return this.w3.$1(a)},"$1",null,2,0,null,175,"call"],
+return this.w3.$1(a)},"$1",null,2,0,null,180,"call"],
 $isEH:true}}],["","",,G,{
 "^":"",
 B5:function(a,b,c,d,e,f){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
@@ -14844,9 +14997,9 @@
 $.Oo=z}z.push(a)
 $.Nc=$.Nc+1
 y=P.L5(null,null,null,P.IN,P.a)
-for(z=this.gbx(a),z=$.mX().Me(0,z,new A.rv(!0,!1,!0,C.AP,!1,!1,C.fo,null)),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();){x=J.DA(z.Ff)
-w=$.cp().JE.II.t(0,x)
-if(w==null)H.vh(O.lA("getter \""+H.d(x)+"\" in "+this.bu(a)))
+for(z=this.gbx(a),z=$.mX().Me(0,z,new A.rv(!0,!1,!0,C.AP,!1,!1,C.bfK,null)),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();){x=J.DA(z.Ff)
+w=$.cp().xV.II.t(0,x)
+if(w==null)H.vh(O.Fm("getter \""+H.d(x)+"\" in "+this.bu(a)))
 y.u(0,x,w.$1(a))}this.srJ(a,y)},"$0","gFW",0,0,17],
 dJ:[function(a){if(this.grJ(a)!=null)this.srJ(a,null)},"$0","gEp",0,0,17],
 HC:function(a){var z,y
@@ -14854,7 +15007,7 @@
 if(this.grJ(a)==null||!this.gnz(a))return!1
 z.a=this.gxt(a)
 this.sxt(a,null)
-this.grJ(a).aN(0,new F.X6(z,a))
+this.grJ(a).aN(0,new F.D9(z,a))
 if(z.a==null)return!1
 y=this.gR9(a)
 z=H.VM(new P.Yp(z.a),[T.yj])
@@ -14866,7 +15019,7 @@
 if(this.gxt(a)==null)this.sxt(a,[])
 this.gxt(a).push(b)},
 $isd3:true},
-X6:{
+D9:{
 "^":"TpZ:81;a,b",
 $2:function(a,b){var z,y,x,w,v
 z=this.b
@@ -15057,7 +15210,7 @@
 if(x&&y.length!==0){x=H.VM(new P.Yp(y),[G.Zq])
 if(z.YM>=4)H.vh(z.Pq())
 z.MW(x)
-return!0}return!1},"$0","gL6",0,0,125],
+return!0}return!1},"$0","gL6",0,0,131],
 $iswn:true,
 static:{pT:function(a,b){var z=H.VM([],[b])
 return H.VM(new Q.wn(null,null,z,null,null),[b])},Oi:function(a,b,c){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
@@ -15198,7 +15351,7 @@
 gP:function(a){var z=this.bl(J.Vm(this.Os))
 this.XS=z
 return z},
-sP:function(a,b){J.ta(this.Os,b)},
+sP:function(a,b){J.Fc(this.Os,b)},
 fR:function(){return this.Os.fR()}}}],["","",,L,{
 "^":"",
 yfW:function(a,b){var z,y,x,w,v
@@ -15207,15 +15360,15 @@
 if(typeof z==="number"&&Math.floor(z)===z){if(!!J.x(a).$isWO&&J.J5(b,0)&&J.u6(b,J.q8(a)))return J.UQ(a,b)}else{z=b
 if(typeof z==="string")return J.UQ(a,b)
 else if(!!J.x(b).$isIN){z=a
-y=H.RB(z,"$isCo",[P.qU,null],"$asCo")
+y=H.RB(z,"$isHX",[P.qU,null],"$asHX")
 if(!y){z=a
 y=H.RB(z,"$isT8",[P.qU,null],"$asT8")
 z=y&&!C.Nm.tg(C.WK,b)}else z=!0
-if(z)return J.UQ(a,$.vu().JE.af.t(0,b))
+if(z)return J.UQ(a,$.vu().xV.af.t(0,b))
 try{z=a
 y=b
-x=$.cp().JE.II.t(0,y)
-if(x==null)H.vh(O.lA("getter \""+H.d(y)+"\" in "+H.d(z)))
+x=$.cp().xV.II.t(0,y)
+if(x==null)H.vh(O.Fm("getter \""+H.d(y)+"\" in "+H.d(z)))
 z=x.$1(z)
 return z}catch(w){if(!!J.x(H.Ru(w)).$isJS){z=J.bB(a)
 v=$.mX().NW(z,C.OV)
@@ -15227,23 +15380,23 @@
 z=b
 if(typeof z==="number"&&Math.floor(z)===z){if(!!J.x(a).$isWO&&J.J5(b,0)&&J.u6(b,J.q8(a))){J.kW(a,b,c)
 return!0}}else if(!!J.x(b).$isIN){z=a
-y=H.RB(z,"$isCo",[P.qU,null],"$asCo")
+y=H.RB(z,"$isHX",[P.qU,null],"$asHX")
 if(!y){z=a
 y=H.RB(z,"$isT8",[P.qU,null],"$asT8")
 z=y&&!C.Nm.tg(C.WK,b)}else z=!0
-if(z){J.kW(a,$.vu().JE.af.t(0,b),c)
+if(z){J.kW(a,$.vu().xV.af.t(0,b),c)
 return!0}try{$.cp().Cq(a,b,c)
 return!0}catch(x){if(!!J.x(H.Ru(x)).$isJS){z=J.bB(a)
 if(!$.mX().UK(z,C.OV))throw x}else throw x}}z=$.YLt()
 if(z.mL(C.EkO))z.kS("can't set "+H.d(b)+" in "+H.d(a))
 return!1},
 WR:{
-"^":"lg;HS,Lq,IE,zo,dR,vS,KZ",
+"^":"ARh;HS,Lq,IE,zo,dR,vS,KZ",
 gIi:function(a){return this.HS},
 sP:function(a,b){var z=this.HS
 if(z!=null)z.rL(this.Lq,b)},
 gDJ:function(){return 2},
-TR:function(a,b){return L.lg.prototype.TR.call(this,this,b)},
+TR:function(a,b){return L.ARh.prototype.TR.call(this,this,b)},
 Ej:function(a){this.IE=L.KJ(this,this.Lq)
 this.CG(!0)},
 U9:function(){this.vS=null
@@ -15270,7 +15423,7 @@
 for(y=this.T7,y=H.VM(new H.a7(y,y.length,0,null),[H.u3(y,0)]),x=!0;y.G();x=!1){w=y.Ff
 v=J.x(w)
 if(!!v.$isIN){if(!x)z.IN+="."
-u=$.vu().JE.af.t(0,w)
+u=$.vu().xV.af.t(0,w)
 z.IN+=typeof u==="string"?u:H.d(u)}else if(typeof w==="number"&&Math.floor(w)===w){v="["+H.d(w)+"]"
 z.IN+=v}else{v="[\""+J.JA(v.bu(w),"\"","\\\"")+"\"]"
 z.IN+=v}}return z.IN},"$0","gCR",0,0,73],
@@ -15351,7 +15504,7 @@
 $0:function(){return new H.VR("^[$_a-zA-Z]+[$_a-zA-Z0-9]*$",H.v4("^[$_a-zA-Z]+[$_a-zA-Z0-9]*$",!1,!0,!1),null,null)},
 $isEH:true},
 iF:{
-"^":"a;vc>,vH>,nl>,ep",
+"^":"a;vc>,vH>,nl*,ep",
 Xn:function(a){var z
 if(a==null)return"eof"
 switch(a){case 91:case 93:case 46:case 34:case 39:case 48:return H.eT([a])
@@ -15362,13 +15515,13 @@
 if(z)return"ident"
 if(49<=a&&a<=57)return"number"
 return"else"},
-ZW:function(){var z,y,x,w
+rXF:function(){var z,y,x,w
 z=this.nl
 if(z==null)return
 z=$.cx().B0(z)
 y=this.vc
 x=this.nl
-if(z)y.push($.vu().JE.T4.t(0,x))
+if(z)y.push($.vu().xV.T4.t(0,x))
 else{w=H.BU(x,10,new L.PD())
 y.push(w!=null?w:this.nl)}this.nl=null},
 mx:function(a,b){var z=this.nl
@@ -15387,7 +15540,7 @@
 this.nl=z==null?x:H.d(z)+x
 return!0}return!1},
 pI:function(a){var z,y,x,w,v,u,t,s,r,q,p
-z=U.LQ(J.OX(a),0,null,65533)
+z=U.LQ(J.GG(a),0,null,65533)
 for(y=z.length,x="beforePath";x!=null;){w=++this.vH
 if(w>=y)v=null
 else{if(w<0)return H.e(z,w)
@@ -15404,7 +15557,7 @@
 x=w.t(s,0)
 r=w.gB(s)>1?w.t(s,1):null
 q=J.x(r)
-if(q.n(r,"push")&&this.nl!=null)this.ZW()
+if(q.n(r,"push")&&this.nl!=null)this.rXF()
 if(q.n(r,"append")){if(w.gB(s)>2){w.t(s,2)
 q=!0}else q=!1
 if(q)p=w.t(s,2)
@@ -15416,12 +15569,12 @@
 $1:function(a){return},
 $isEH:true},
 nQ:{
-"^":"lg;IE,pu,vl,zo,dR,vS,KZ",
+"^":"ARh;IE,pu,vl,zo,dR,vS,KZ",
 gDJ:function(){return 3},
-TR:function(a,b){return L.lg.prototype.TR.call(this,this,b)},
+TR:function(a,b){return L.ARh.prototype.TR.call(this,this,b)},
 Ej:function(a){var z,y,x,w
 for(z=this.vl,y=z.length,x=0;x<y;x+=2){w=z[x]
-if(w!==C.aZ){z=$.rf
+if(w!==C.zr){z=$.rf
 if(z!=null){y=z.Ou
 y=y==null?w!=null:y!==w}else y=!0
 if(y){z=w==null?null:P.Ls(null,null,null,null)
@@ -15432,7 +15585,7 @@
 this.IE=null
 break}}this.CG(!this.pu)},
 U9:function(){var z,y,x,w
-for(z=0;y=this.vl,x=y.length,z<x;z+=2)if(y[z]===C.aZ){w=z+1
+for(z=0;y=this.vl,x=y.length,z<x;z+=2)if(y[z]===C.zr){w=z+1
 if(w>=x)return H.e(y,w)
 J.yd(y[w])}this.vl=null
 this.vS=null},
@@ -15448,13 +15601,13 @@
 YU:function(a){var z=this.KZ
 if(z===$.ljh||z===$.ls)throw H.b(P.w("Cannot add observers once started."))
 z=this.vl
-z.push(C.aZ)
+z.push(C.zr)
 z.push(a)
 if(!this.pu)return
 J.bi(this.vS,J.mu(a,new L.Zu(this)))},
 VC:function(a){var z,y,x,w,v
 for(z=0;y=this.vl,x=y.length,z<x;z+=2){w=y[z]
-if(w!==C.aZ){v=z+1
+if(w!==C.zr){v=z+1
 if(v>=x)return H.e(y,v)
 H.Go(y[v],"$isZl").I5(w,a)}}},
 CG:function(a){var z,y,x,w,v,u,t,s,r
@@ -15463,7 +15616,7 @@
 t=x+1
 if(t>=v)return H.e(w,t)
 s=w[t]
-if(u===C.aZ){H.Go(s,"$isAp")
+if(u===C.zr){H.Go(s,"$isAp")
 r=this.KZ===$.jq1?s.TR(0,new L.vI(this)):s.gP(s)}else r=H.Go(s,"$isZl").WK(u)
 if(a){J.kW(this.vS,C.jn.BU(x,2),r)
 continue}w=this.vS
@@ -15492,7 +15645,7 @@
 $isEH:true},
 iNc:{
 "^":"a;"},
-lg:{
+ARh:{
 "^":"Ap;",
 Yd:function(){return this.zo.$0()},
 d1:function(a){return this.zo.$1(a)},
@@ -15503,7 +15656,7 @@
 if(z===$.ljh||z===$.ls)throw H.b(P.w("Observer has already been opened."))
 if(X.na(b)>this.gDJ())throw H.b(P.u("callback should take "+this.gDJ()+" or fewer arguments"))
 this.zo=b
-this.dR=P.J(this.gDJ(),X.aW(b))
+this.dR=P.J(this.gDJ(),X.Zpg(b))
 this.Ej(0)
 this.KZ=$.ljh
 return this.vS},
@@ -15535,7 +15688,7 @@
 if(b==null?z==null:b===z)this.cE.h(0,c)
 z=J.x(b)
 if(!!z.$iswn)this.hr(b.gXF())
-if(!!z.$isd3)this.hr(z.gqh(b))},"$2","gUu",4,0,176,96,177],
+if(!!z.$isd3)this.hr(z.gqh(b))},"$2","gUu",4,0,181,96,182],
 hr:function(a){var z=this.YR
 if(z==null){z=P.YM(null,null,null,null,null)
 this.YR=z}if(!z.NZ(0,a))this.YR.u(0,a,a.yI(this.gCP()))},
@@ -15549,7 +15702,7 @@
 if(this.b2(a))return
 for(z=this.JD,y=C.Nm.tt(z,!1),y=H.VM(new H.a7(y,y.length,0,null),[H.u3(y,0)]);y.G();){x=y.Ff
 if(x.gB9())x.VC(this.gUu(this))}for(z=C.Nm.tt(z,!1),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();){x=z.Ff
-if(x.gB9())x.mX()}},"$1","gCP",2,0,19,178],
+if(x.gB9())x.mX()}},"$1","gCP",2,0,19,183],
 static:{"^":"rf",KJ:function(a,b){var z,y
 z=$.rf
 if(z!=null){y=z.Ou
@@ -15571,11 +15724,12 @@
 return x}return a},"$1","Ft",2,0,12,20],
 Fk:{
 "^":"TpZ:81;a",
-$2:[function(a,b){this.a.u(0,R.tB(a),R.tB(b))},"$2",null,4,0,null,135,66,"call"],
+$2:[function(a,b){this.a.u(0,R.tB(a),R.tB(b))},"$2",null,4,0,null,141,66,"call"],
 $isEH:true}}],["","",,A,{
 "^":"",
-ec:function(a,b,c){if(a==null||$.lx()==null)return
-$.lx().V7("shimStyling",[a,b,c])},
+ec:function(a,b,c){var z=$.lx()
+if(z==null||$.Ep()!==!0)return
+z.V7("shimStyling",[a,b,c])},
 q3:function(a){var z,y,x,w,v
 if(a==null)return""
 if($.UG)return""
@@ -15583,7 +15737,7 @@
 z=w.gmH(a)
 if(J.xC(z,""))z=w.gQg(a).dA.getAttribute("href")
 try{w=new XMLHttpRequest()
-C.W3.eo(w,"GET",z,!1)
+C.W3.i3(w,"GET",z,!1)
 w.send()
 w=w.responseText
 return w}catch(v){w=H.Ru(v)
@@ -15592,7 +15746,7 @@
 $.Is().J4("failed to XHR stylesheet text href=\""+H.d(z)+"\" error: "+H.d(y)+", trace: "+H.d(x))
 return""}else throw v}},
 M8:[function(a){var z,y
-z=$.vu().JE.af.t(0,a)
+z=$.vu().xV.af.t(0,a)
 if(z==null)return!1
 y=J.Qe(z)
 return y.C1(z,"Changed")&&!y.n(z,"attributeChanged")},"$1","hU",2,0,64,65],
@@ -15609,7 +15763,8 @@
 x=b.firstChild
 if(b===document.head){w=W.vD(document.head.querySelectorAll("style[element]"),null)
 if(w.gor(w))x=J.rk(C.t5.grZ(w.jt))}b.insertBefore(z,x)},
-YK:function(){if($.UG){A.X1($.M6,!0)
+YK:function(){A.c4()
+if($.UG){A.X1($.M6,!0)
 return $.X3}var z=$.X3.iT(O.Ht())
 z.Gr(new A.mS())
 return z},
@@ -15624,7 +15779,7 @@
 z.setAttribute("name","auto-binding-dart")
 z.setAttribute("extends","template")
 J.UQ($.Dw(),"init").qP([],z)
-for(y=H.VM(new H.a7(a,88,0,null),[H.u3(a,0)]);y.G();)y.Ff.$0()},
+for(y=H.VM(new H.a7(a,91,0,null),[H.u3(a,0)]);y.G();)y.Ff.$0()},
 JP:function(){var z,y,x,w
 z=$.Xw()
 if(J.UQ(z,"Platform")==null)throw H.b(P.w("platform.js, dart_support.js must be loaded at the top of your application, before any other scripts or HTML imports that use polymer. Putting these two script tags at the top of your <head> element should address this issue: <script src=\"packages/web_components/platform.js\"></script> and  <script src=\"packages/web_components/dart_support.js\"></script>."))
@@ -15635,8 +15790,16 @@
 w=J.UQ($.Dw(),"register")
 if(w==null)throw H.b(P.w("polymer.js must expose \"register\" function on polymer-element to enable polymer.dart to interoperate."))
 J.kW($.Dw(),"register",P.mt(new A.k2(x,w)))},
+c4:function(){var z,y,x
+$.RL=!0
+z=J.UQ($.Xw(),"logFlags")
+y=[$.dn(),$.vo(),$.iX(),$.Lu(),$.REM(),$.lg()]
+x=N.QM("polymer")
+if(!H.Ck(y,new A.j0(z))){x.sOR(C.oOA)
+return}H.VM(new H.U5(y,new A.j0N(z)),[H.u3(H.VM(new H.wb(),[H.u3(y,0)]),0)]).aN(0,new A.MZ6())
+x.gSZ().yI(new A.mqr())},
 So:{
-"^":"a;FL>,t5>,Jh<,oc>,Q7<,Md<,eJ>,Gl<,PH<,ix<,y0,G9,wX>,mR<,Sg,vT",
+"^":"a;FL>,t5>,Jh<,oc>,Q7<,Md<,eJ>,Gl<,PH<,ix<,y0,G9,wX>,mR<,WV,vT",
 gZf:function(){var z,y
 z=J.yR(this.FL,"template")
 if(z!=null)y=J.f5(!!J.x(z).$isvy?z:M.Xi(z))
@@ -15649,7 +15812,7 @@
 Cw:function(a){var z=$.Kc()
 if(z==null)return
 J.UQ(z,"urlResolver").V7("resolveDom",[a])},
-Zw:function(a){var z,y,x,w,v,u,t,s,r
+Zw:function(a){var z,y,x,w,v,u,t,s,r,q
 if(a!=null){if(a.gQ7()!=null){z=a.gQ7()
 y=P.L5(null,null,null,null,null)
 y.FV(0,z)
@@ -15661,17 +15824,18 @@
 x=J.Vs(this.FL).dA.getAttribute("attributes")
 if(x!=null)for(y=C.xB.Fr(x,$.FF()),y=H.VM(new H.a7(y,y.length,0,null),[H.u3(y,0)]),w=this.oc;y.G();){v=J.rr(y.Ff)
 if(v==="")continue
-u=$.vu().JE.T4.t(0,v)
-t=L.hk([u])
-s=this.Q7
-if(s!=null&&s.NZ(0,t))continue
-r=$.mX().CV(z,u)
-if(r==null||r.gUA()||J.EMK(r)===!0){window
-s="property for attribute "+v+" of polymer-element name="+H.d(w)+" not found."
-if(typeof console!="undefined")console.warn(s)
-continue}s=this.Q7
-if(s==null){s=P.Fl(null,null)
-this.Q7=s}s.u(0,t,r)}},
+u=$.vu().xV.T4.t(0,v)
+t=u!=null
+if(t){s=L.hk([u])
+r=this.Q7
+if(r!=null&&r.NZ(0,s))continue
+q=$.mX().CV(z,u)}else{q=null
+s=null}if(!t||q==null||q.gUA()||J.cL(q)===!0){window
+t="property for attribute "+v+" of polymer-element name="+H.d(w)+" not found."
+if(typeof console!="undefined")console.warn(t)
+continue}t=this.Q7
+if(t==null){t=P.Fl(null,null)
+this.Q7=t}t.u(0,s,q)}},
 en:function(a){var z,y,x,w,v
 for(z=$.mX().Me(0,a,C.V4),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();){y=z.Ff
 x=J.RE(y)
@@ -15687,14 +15851,14 @@
 if(w.Vr(0,new A.Da())){w=this.ix
 if(w==null){w=P.Ls(null,null,null,null)
 this.ix=w}x=x.goc(y)
-w.h(0,$.vu().JE.af.t(0,x))}}},
+w.h(0,$.vu().xV.af.t(0,x))}}},
 Vk:function(){var z,y
 z=P.L5(null,null,null,P.qU,P.a)
 this.PH=z
 y=this.Jh
 if(y!=null)z.FV(0,y.gPH())
 J.Vs(this.FL).aN(0,new A.EB(this))},
-W3:function(a){J.Vs(this.FL).aN(0,new A.BO(a))},
+W3:function(a){J.Vs(this.FL).aN(0,new A.Y1(a))},
 ka:function(){var z=this.Bg("link[rel=stylesheet]")
 this.y0=z
 for(z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();)J.Mp(z.Ff)},
@@ -15722,7 +15886,7 @@
 Bg:function(a){return this.Wz(a,null)},
 ds:function(a){var z,y,x,w,v,u
 z=P.p9("")
-y=new A.Vi("[polymer-scope="+a+"]")
+y=new A.ui("[polymer-scope="+a+"]")
 for(x=this.y0,x.toString,x=H.VM(new H.U5(x,y),[H.u3(H.VM(new H.wb(),[H.u3(x,0)]),0)]),x=H.VM(new H.vG(J.mY(x.Hb),x.Oh),[H.u3(x,0)]),w=x.CL;x.G();){v=A.q3(w.gl())
 u=z.IN+=typeof v==="string"?v:H.d(v)
 z.IN=u+"\n\n"}for(x=this.G9,x.toString,x=H.VM(new H.U5(x,y),[H.u3(H.VM(new H.wb(),[H.u3(x,0)]),0)]),x=H.VM(new H.vG(J.mY(x.Hb),x.Oh),[H.u3(x,0)]),y=x.CL;x.G();){v=J.dY(y.gl())
@@ -15739,7 +15903,7 @@
 if(this.eJ==null)this.eJ=P.YM(null,null,null,null,null)
 x=J.RE(y)
 w=x.goc(y)
-v=$.vu().JE.af.t(0,w)
+v=$.vu().xV.af.t(0,w)
 w=J.U6(v)
 v=w.Nj(v,0,J.bI(w.gB(v),7))
 this.eJ.u(0,L.hk(v),[x.goc(y)])}},
@@ -15762,7 +15926,7 @@
 r=J.zH(s)
 r=$.mX().xs(u,r)
 u=r}else u=!0
-if(u){x.u(0,t,v.gfL())
+if(u){x.u(0,t,v.gXt())
 z.u(0,t,w)}}},
 $isSo:true,
 static:{"^":"Kb"}},
@@ -15778,7 +15942,7 @@
 "^":"TpZ:81;a",
 $2:function(a,b){if(C.pv.NZ(0,a)!==!0&&!J.co(a,"on-"))this.a.PH.u(0,a,b)},
 $isEH:true},
-BO:{
+Y1:{
 "^":"TpZ:81;a",
 $2:function(a,b){var z,y,x
 z=J.Qe(a)
@@ -15790,7 +15954,7 @@
 "^":"TpZ:12;",
 $1:function(a){return J.Vs(a).dA.hasAttribute("polymer-scope")!==!0},
 $isEH:true},
-Vi:{
+ui:{
 "^":"TpZ:12;a",
 $1:function(a){return J.wK(a,this.a)},
 $isEH:true},
@@ -15799,7 +15963,7 @@
 $0:function(){return[]},
 $isEH:true},
 Tj:{
-"^":"TpZ:179;a",
+"^":"TpZ:184;a",
 $2:function(a,b){this.a.u(0,H.d(a).toLowerCase(),b)},
 $isEH:true},
 HH:{
@@ -15812,7 +15976,7 @@
 return this.Mn.op(a,b,c)},
 static:{"^":"rd0,QPA"}},
 BG9:{
-"^":"VE+d23;"},
+"^":"vE+d23;"},
 d23:{
 "^":"a;",
 XB:function(a){var z
@@ -15840,28 +16004,29 @@
 y=x}if(!!J.x(y).$iszs){y=J.x(a)
 if(!!y.$isDG4){w=y.gey(a)
 if(w==null)w=J.UQ(P.XY(a),"detail")}else w=null
-y=y.gCa(a)
+y=y.gF0(a)
 z=z.a
 J.bH(z,z,this.d,[a,w,y])}else throw H.b(P.w("controller "+H.d(y)+" is not a Dart polymer-element."))},"$1",null,2,0,null,2,"call"],
 $isEH:true},
 liz:{
-"^":"TpZ:183;a,b,c",
-$3:[function(a,b,c){var z,y,x,w
+"^":"TpZ:188;a,b,c",
+$3:[function(a,b,c){var z,y,x
 z=this.c
-y=this.b.Z8(null,b,z)
-x=J.Jw(b).t(0,this.a.a)
-w=H.VM(new W.Ov(0,x.bi,x.fA,W.aF(y),x.el),[H.u3(x,0)])
-w.DN()
+y=P.mt(new A.kD($.X3.mS(this.b.Z8(null,b,z))))
+x=this.a
+$.tNi().V7("addEventListener",[b,x.a,y])
 if(c===!0)return
-return new A.zIs(w,z)},"$3",null,6,0,null,180,181,182,"call"],
+return new A.zIs(z,b,x.a,y)},"$3",null,6,0,null,185,186,187,"call"],
+$isEH:true},
+kD:{
+"^":"TpZ:81;d",
+$2:[function(a,b){return this.d.$1(b)},"$2",null,4,0,null,13,2,"call"],
 $isEH:true},
 zIs:{
-"^":"Ap;Sx,ED",
+"^":"Ap;ED,d9,dF,Xj",
 gP:function(a){return"{{ "+this.ED+" }}"},
 TR:function(a,b){return"{{ "+this.ED+" }}"},
-xO:function(a){var z=this.Sx
-if(z!=null){z.Gv()
-this.Sx=null}}},
+xO:function(a){$.tNi().V7("removeEventListener",[this.d9,this.dF,this.Xj])}},
 xn:{
 "^":"iv;vn<",
 $isxn:true},
@@ -15910,19 +16075,19 @@
 y="Attributes on "+H.d(this.gRT(a))+" were data bound prior to Polymer upgrading the element. This may result in incorrect binding types."
 if(typeof console!="undefined")console.warn(y)}this.Ec(a)
 y=this.gJ8(a)
-if(!J.xC($.Ks().t(0,y),!0)||$.Ep()===!0)this.rf(a)},
+if(!J.xC($.Ks().t(0,y),!0))this.rf(a)},
 Ec:function(a){var z,y
 if(a.IX!=null){window
 z="Element already prepared: "+H.d(this.gRT(a))
 if(typeof console!="undefined")console.warn(z)
 return}a.n7=P.XY(a)
 z=this.gRT(a)
-a.IX=$.vE().t(0,z)
+a.IX=$.w3G().t(0,z)
 this.jM(a)
 z=a.MJ
 if(z!=null){y=this.gnu(a)
 z.toString
-L.lg.prototype.TR.call(J.x(z),z,y)}if(a.IX.gQ7()!=null)this.gqh(a).yI(this.gLj(a))
+L.ARh.prototype.TR.call(J.x(z),z,y)}if(a.IX.gQ7()!=null)this.gqh(a).yI(this.gLj(a))
 this.oR(a)
 this.xL(a)
 this.Uc(a)},
@@ -15931,7 +16096,7 @@
 this.bT(a)
 this.Qs(a,a.IX)
 this.gQg(a).Rz(0,"unresolved")
-$.zG().To(new A.pN(a))
+$.lg().To(new A.pN(a))
 this.I9(a)},
 I9:function(a){},
 Es:function(a){if(a.IX==null)throw H.b(P.w("polymerCreated was not called for custom element "+H.d(this.gRT(a))+", this should normally be done in the .created() if Polymer is used as a mixin."))
@@ -15955,12 +16120,10 @@
 x=!!J.x(b).$isvy?b:M.Xi(b)
 w=J.dv(x,a,y==null&&J.qy(x)==null?J.v7(a.IX):y)
 v=a.f4
-u=$.Tn().t(0,w)
+u=$.nR().t(0,w)
 C.Nm.FV(v,u!=null?u.gdn():u)
 z.appendChild(w)
 this.lj(a,z)
-v=$.LL()
-if(v!=null)v.V7("register",[z])
 return z},
 lj:function(a,b){var z,y,x
 if(b==null)return
@@ -15982,7 +16145,7 @@
 x=J.x(v)
 u=Z.fd(c,w,(x.n(v,C.AP)||x.n(v,C.wG))&&w!=null?J.bB(w):v)
 if(u==null?w!=null:u!==w){y=y.goc(z)
-$.cp().Cq(a,y,u)}},"$2","gCg",4,0,184],
+$.cp().Cq(a,y,u)}},"$2","gCg",4,0,189],
 B2:function(a,b){var z=a.IX.gMd()
 if(z==null)return
 return z.t(0,b)},
@@ -16003,7 +16166,7 @@
 if(J.xC(J.UQ(J.UQ($.Xw(),"Platform"),"enableBindingsReflection"),!0)&&x!=null){if(J.QE(M.Xi(a))==null){w=P.Fl(null,null)
 J.CS(M.Xi(a),w)}J.kW(J.QE(M.Xi(a)),b,x)}v=a.IX.gix()
 y=y.goc(z)
-u=$.vu().JE.af.t(0,y)
+u=$.vu().xV.af.t(0,y)
 if(v!=null&&v.tg(0,u))this.QH(a,u)
 return x}},
 lL:function(a){return this.rf(a)},
@@ -16037,16 +16200,16 @@
 for(x=H.VM(new P.fG(z),[H.u3(z,0)]),w=x.ZD,x=H.VM(new P.EQ(w,w.Nm(),0,null),[H.u3(x,0)]);x.G();){v=x.fD
 y.WX(a,v)
 this.j6(a,v,v.WK(a),null)}}},
-FQx:[function(a,b,c,d){J.Me(c,new A.OaD(a,b,c,d,J.q1(a.IX),P.Rd(null,null,null,null)))},"$3","gnu",6,0,185],
+FQx:[function(a,b,c,d){J.Me(c,new A.OaD(a,b,c,d,J.q1(a.IX),P.Rd(null,null,null,null)))},"$3","gnu",6,0,190],
 p7:[function(a,b){var z,y,x,w
 for(z=J.mY(b),y=a.qJ;z.G();){x=z.gl()
 if(!J.x(x).$isqI)continue
 w=x.oc
 if(y.t(0,w)!=null)continue
-this.Dt(a,w,x.zZ,x.jL)}},"$1","gLj",2,0,186,178],
+this.Dt(a,w,x.zZ,x.jL)}},"$1","gLj",2,0,191,183],
 Dt:function(a,b,c,d){var z,y
 $.REM().To(new A.qW(a,b,c,d))
-z=$.vu().JE.af.t(0,b)
+z=$.vu().xV.af.t(0,b)
 y=a.IX.gix()
 if(y!=null&&y.tg(0,z))this.QH(a,z)},
 j6:function(a,b,c,d){var z,y,x,w,v
@@ -16064,8 +16227,8 @@
 hq:function(a,b,c,d){if(d==null?c==null:d===c)return
 this.Dt(a,b,c,d)},
 hO:function(a,b,c,d){var z,y,x,w,v,u,t,s,r,q
-z=$.cp().JE.II.t(0,b)
-if(z==null)H.vh(O.lA("getter \""+H.d(b)+"\" in "+this.bu(a)))
+z=$.cp().xV.II.t(0,b)
+if(z==null)H.vh(O.Fm("getter \""+H.d(b)+"\" in "+this.bu(a)))
 y=z.$1(a)
 x=a.qJ.t(0,b)
 if(x==null){w=J.RE(c)
@@ -16073,9 +16236,9 @@
 v=new A.lK(a,b,c,null,null)
 v.Sx=this.gqh(a).k0(v.gou(),null,null,!1)
 w=J.mu(c,v.gew())
-v.SS=w
-u=$.cp().JE.F8.t(0,b)
-if(u==null)H.vh(O.lA("setter \""+H.d(b)+"\" in "+this.bu(a)))
+v.RP=w
+u=$.cp().xV.F8.t(0,b)
+if(u==null)H.vh(O.Fm("setter \""+H.d(b)+"\" in "+this.bu(a)))
 u.$2(a,w)
 a.f4.push(v)
 return v}x.mn=c
@@ -16095,7 +16258,7 @@
 hH:function(a,b,c){return this.hO(a,b,c,!1)},
 yO:function(a,b){var z=a.IX.gGl().t(0,b)
 if(z==null)return
-return T.yM().$3$globals(T.EPS().$1(z),a,J.v7(a.IX).Mn.nF)},
+return T.yM().$3$globals(T.u5().$1(z),a,J.v7(a.IX).Mn.nF)},
 bT:function(a){var z,y,x,w,v,u,t,s
 z=a.IX.gGl()
 for(v=J.mY(J.iY(z)),u=a.qJ;v.G();){y=v.gl()
@@ -16127,15 +16290,15 @@
 return}return this.hO(a,b,c,!0)},
 Uc:function(a){var z=a.IX.gmR()
 if(z.gl0(z))return
-$.mI().J4(new A.SX(a,z))
+$.vo().J4(new A.SX(a,z))
 z.aN(0,new A.Jys(a))},
 ea:function(a,b,c,d){var z,y,x
-z=$.mI()
+z=$.vo()
 z.To(new A.od(a,c))
-if(!!J.x(c).$isEH){y=X.aW(c)
+if(!!J.x(c).$isEH){y=X.Zpg(c)
 if(y===-1)z.j2("invalid callback: expected callback of 0, 1, 2, or 3 arguments")
 C.Nm.sB(d,y)
-H.eC(c,d,P.Te(null))}else if(typeof c==="string"){x=$.vu().JE.T4.t(0,c)
+H.eC(c,d,P.Te(null))}else if(typeof c==="string"){x=$.vu().xV.T4.t(0,c)
 $.cp().Ck(b,x,d,!0,null)}else z.j2("invalid callback")
 z.J4(new A.cB(a,c))},
 rW:function(a,b){var z
@@ -16143,7 +16306,7 @@
 $.Kc().nQ("flush")
 z=window
 C.Ui.Wq(z)
-return C.Ui.ne(z,W.aF(b))},
+return C.Ui.ne(z,W.Yt(b))},
 SE:function(a,b,c,d,e,f){var z=W.Q8(b,!0,!0,e)
 this.Ph(a,z)
 return z},
@@ -16217,7 +16380,7 @@
 "^":"TpZ:12;e,f,UI",
 $1:[function(a){var z,y,x,w
 for(z=J.mY(this.UI),y=this.e,x=this.f;z.G();){w=z.gl()
-$.cp().Ck(y,w,[x],!0,null)}},"$1",null,2,0,null,187,"call"],
+$.cp().Ck(y,w,[x],!0,null)}},"$1",null,2,0,null,192,"call"],
 $isEH:true},
 aM:{
 "^":"TpZ:76;a,b,c",
@@ -16233,10 +16396,8 @@
 $isEH:true},
 Jys:{
 "^":"TpZ:81;c",
-$2:function(a,b){var z,y
-z=this.c
-y=J.Jw(z).t(0,a)
-H.VM(new W.Ov(0,y.bi,y.fA,W.aF(J.v7(z.IX).Z8(z,z,b)),y.el),[H.u3(y,0)]).DN()},
+$2:function(a,b){var z=this.c
+$.tNi().V7("addEventListener",[z,a,$.X3.mS(J.v7(z.IX).Z8(z,z,b))])},
 $isEH:true},
 od:{
 "^":"TpZ:76;a,b",
@@ -16247,21 +16408,21 @@
 $0:[function(){return"<<< ["+H.d(J.RI(this.c))+"]: dispatch "+H.d(this.d)},"$0",null,0,0,null,"call"],
 $isEH:true},
 lK:{
-"^":"Ap;I6,ko,q0,Sx,SS",
-z9N:[function(a){this.SS=a
+"^":"Ap;I6,ko,q0,Sx,RP",
+z9N:[function(a){this.RP=a
 $.cp().Cq(this.I6,this.ko,a)},"$1","gew",2,0,19,60],
 TZ:[function(a){var z,y,x,w,v
 for(z=J.mY(a),y=this.ko;z.G();){x=z.gl()
 if(!!J.x(x).$isqI&&J.xC(x.oc,y)){z=this.I6
-w=$.cp().JE.II.t(0,y)
-if(w==null)H.vh(O.lA("getter \""+H.d(y)+"\" in "+J.AG(z)))
+w=$.cp().xV.II.t(0,y)
+if(w==null)H.vh(O.Fm("getter \""+H.d(y)+"\" in "+J.AG(z)))
 v=w.$1(z)
-z=this.SS
-if(z==null?v!=null:z!==v)J.ta(this.q0,v)
-return}}},"$1","gou",2,0,186,178],
+z=this.RP
+if(z==null?v!=null:z!==v)J.Fc(this.q0,v)
+return}}},"$1","gou",2,0,191,183],
 TR:function(a,b){return J.mu(this.q0,b)},
 gP:function(a){return J.Vm(this.q0)},
-sP:function(a,b){J.ta(this.q0,b)
+sP:function(a,b){J.Fc(this.q0,b)
 return b},
 xO:function(a){var z=this.Sx
 if(z!=null){z.Gv()
@@ -16286,7 +16447,7 @@
 this.ek=b
 z=window
 C.Ui.Wq(z)
-this.lS=C.Ui.ne(z,W.aF(new A.K3(this)))},
+this.lS=C.Ui.ne(z,W.Yt(new A.K3(this)))},
 nY:function(a){var z,y
 z=this.lS
 if(z!=null){y=window
@@ -16313,10 +16474,10 @@
 return},"$0",null,0,0,null,"call"],
 $isEH:true},
 k2:{
-"^":"TpZ:190;a,b",
+"^":"TpZ:195;a,b",
 $3:[function(a,b,c){var z=$.Ej().t(0,b)
-if(z!=null)return this.a.Gr(new A.zR(a,b,z,$.vE().t(0,c)))
-return this.b.qP([b,c],a)},"$3",null,6,0,null,188,58,189,"call"],
+if(z!=null)return this.a.Gr(new A.zR(a,b,z,$.w3G().t(0,c)))
+return this.b.qP([b,c],a)},"$3",null,6,0,null,193,58,194,"call"],
 $isEH:true},
 zR:{
 "^":"TpZ:76;c,d,e,f",
@@ -16329,7 +16490,7 @@
 u=$.Ak()
 t=P.Fl(null,null)
 v=new A.So(z,x,w,y,null,null,null,v,null,null,null,null,u,t,null,null)
-$.vE().u(0,y,v)
+$.w3G().u(0,y,v)
 v.Zw(w)
 s=v.Q7
 if(s!=null)v.Md=v.jq(s)
@@ -16384,6 +16545,22 @@
 $0:function(){var z=J.UQ(P.XY(document.createElement("polymer-element",null)),"__proto__")
 return!!J.x(z).$isKV?P.XY(z):z},
 $isEH:true},
+j0:{
+"^":"TpZ:12;a",
+$1:function(a){return J.xC(J.UQ(this.a,J.DA(a)),!0)},
+$isEH:true},
+j0N:{
+"^":"TpZ:12;b",
+$1:function(a){return!J.xC(J.UQ(this.b,J.DA(a)),!0)},
+$isEH:true},
+MZ6:{
+"^":"TpZ:12;",
+$1:function(a){a.sOR(C.oOA)},
+$isEH:true},
+mqr:{
+"^":"TpZ:12;",
+$1:[function(a){P.FL(a)},"$1",null,2,0,null,169,"call"],
+$isEH:true},
 Zw:{
 "^":"a;RT,VB,I6,mn",
 xz:[function(a){var z,y,x,w
@@ -16397,10 +16574,10 @@
 if(z!=null)z.fR()
 return this.VB},
 sP:function(a,b){var z=this.mn
-if(z!=null)J.ta(z,b)
+if(z!=null)J.Fc(z,b)
 else this.xz(b)},
 bu:[function(a){var z,y
-z=$.vu().JE.af.t(0,this.RT)
+z=$.vu().xV.af.t(0,this.RT)
 y=this.mn==null?"(no-binding)":"(with-binding)"
 return"["+H.d(new H.cu(H.wO(this),null))+": "+J.AG(this.I6)+"."+H.d(z)+": "+H.d(this.VB)+" "+y+"]"},"$0","gCR",0,0,76]}}],["","",,Y,{
 "^":"",
@@ -16417,7 +16594,7 @@
 this.kR(a)
 a.Hf=M.Xi(a)
 z=T.Mo(null,C.qY)
-J.D4(a.Hf,new Y.zp(a,z,null))
+J.D4(a.Hf,new Y.oM(a,z,null))
 $.j6().MM.ml(new Y.lkK(a))},
 $isDT:true,
 $isvy:true,
@@ -16462,7 +16639,7 @@
 y.lj(z,z.parentNode)
 y.ZB(z,"template-bound")},"$1",null,2,0,null,13,"call"],
 $isEH:true},
-zp:{
+oM:{
 "^":"Li;dq,Mn,oe",
 XB:function(a){return this.dq}}}],["","",,Z,{
 "^":"",
@@ -16518,14 +16695,14 @@
 return z},"$1","Bn",2,0,52,66],
 IK:{
 "^":"TpZ:12;a",
-$1:[function(a){return J.xC(J.UQ(this.a,a),!0)},"$1",null,2,0,null,135,"call"],
+$1:[function(a){return J.xC(J.UQ(this.a,a),!0)},"$1",null,2,0,null,141,"call"],
 $isEH:true},
 k9:{
 "^":"TpZ:12;a",
-$1:[function(a){return H.d(a)+": "+H.d(J.UQ(this.a,a))},"$1",null,2,0,null,135,"call"],
+$1:[function(a){return H.d(a)+": "+H.d(J.UQ(this.a,a))},"$1",null,2,0,null,141,"call"],
 $isEH:true},
 QB:{
-"^":"VE;OH,nF,R3,SY,oe",
+"^":"vE;OH,nF,R3,SY,oe",
 op:function(a,b,c){var z,y,x
 z={}
 y=T.OD(a,null).oK()
@@ -16572,33 +16749,33 @@
 y=H.VM(new P.qo(null),[P.qU])
 x=P.L5(null,null,null,P.qU,P.a)
 x.FV(0,C.mB)
-return new T.QB(b,x,z,y,null)},aV:[function(a){return T.OD(a,null).oK()},"$1","EPS",2,0,67],mD:[function(a,b,c,d){var z
+return new T.QB(b,x,z,y,null)},ct:[function(a){return T.OD(a,null).oK()},"$1","u5",2,0,67],mD:[function(a,b,c,d){var z
 if(c==null){c=P.L5(null,null,null,null,null)
 c.FV(0,C.mB)}z=K.wm(b,c)
 return d?T.rD(a,z,null):new T.tI(z,null,a,null,null,null,null)},function(a,b){return T.mD(a,b,null,!1)},null,function(a,b,c){return T.mD(a,b,null,c)},null,function(a,b,c){return T.mD(a,b,c,!1)},null,"$4$globals$oneTime","$2","$3$oneTime","$3$globals","yM",4,5,68,22,69]}},
 qb:{
-"^":"TpZ:191;b,c,d",
+"^":"TpZ:196;b,c,d",
 $3:[function(a,b,c){var z,y
 z=this.b
 z.SY.u(0,b,this.c)
 y=!!J.x(a).$isPF?a:K.wm(a,z.nF)
 z.R3.u(0,b,y)
-return new T.tI(y,null,this.d,null,null,null,null)},"$3",null,6,0,null,180,181,182,"call"],
+return new T.tI(y,null,this.d,null,null,null,null)},"$3",null,6,0,null,185,186,187,"call"],
 $isEH:true},
 Xyb:{
-"^":"TpZ:191;e,f",
+"^":"TpZ:196;e,f",
 $3:[function(a,b,c){var z,y
 z=this.e
 y=!!J.x(a).$isPF?a:K.wm(a,z.nF)
 z.R3.u(0,b,y)
 if(c===!0)return T.rD(this.f,y,null)
-return new T.tI(y,null,this.f,null,null,null,null)},"$3",null,6,0,null,180,181,182,"call"],
+return new T.tI(y,null,this.f,null,null,null,null)},"$3",null,6,0,null,185,186,187,"call"],
 $isEH:true},
 Ddj:{
-"^":"TpZ:191;a,UI,bK",
+"^":"TpZ:196;a,UI,bK",
 $3:[function(a,b,c){var z=this.UI.fi(b,a)
 if(c===!0)return T.rD(this.bK,z,this.a.a)
-return new T.tI(z,this.a.a,this.bK,null,null,null,null)},"$3",null,6,0,null,180,181,182,"call"],
+return new T.tI(z,this.a.a,this.bK,null,null,null,null)},"$3",null,6,0,null,185,186,187,"call"],
 $isEH:true},
 uK:{
 "^":"TpZ:12;a,b",
@@ -16607,7 +16784,7 @@
 y=this.b
 x=z.R3.t(0,y)
 if(x!=null){if(J.xC(a,J.ZH(x)))return x
-return K.wm(a,z.nF)}else return z.fi(y,a)},"$1",null,2,0,null,180,"call"],
+return K.wm(a,z.nF)}else return z.fi(y,a)},"$1",null,2,0,null,185,"call"],
 $isEH:true},
 uKo:{
 "^":"TpZ:12;c,d,e",
@@ -16617,66 +16794,66 @@
 x=z.R3.t(0,y)
 w=this.e
 if(x!=null)return x.t1(w,a)
-else return z.jX(y).t1(w,a)},"$1",null,2,0,null,180,"call"],
+else return z.jX(y).t1(w,a)},"$1",null,2,0,null,185,"call"],
 $isEH:true},
 tI:{
-"^":"Ap;Hk,mo,n4,Fg,JX,dD,HR",
+"^":"Ap;Hk,mo,te,qc,RQ,uZ,Ke",
 Ko:function(a){return this.mo.$1(a)},
-WV:function(a){return this.Fg.$1(a)},
+AO:function(a){return this.qc.$1(a)},
 Mr:[function(a,b){var z,y
-z=this.HR
+z=this.Ke
 y=this.mo==null?a:this.Ko(a)
-this.HR=y
-if(b!==!0&&this.Fg!=null&&!J.xC(z,y)){this.WV(this.HR)
-return!0}return!1},function(a){return this.Mr(a,!1)},"Eu0","$2$skipChanges","$1","gGX",2,3,192,69,60,193],
-gP:function(a){if(this.Fg!=null){this.Ix(!0)
-return this.HR}return T.rD(this.n4,this.Hk,this.mo)},
+this.Ke=y
+if(b!==!0&&this.qc!=null&&!J.xC(z,y)){this.AO(this.Ke)
+return!0}return!1},function(a){return this.Mr(a,!1)},"Eu0","$2$skipChanges","$1","gGX",2,3,197,69,60,198],
+gP:function(a){if(this.qc!=null){this.kf(!0)
+return this.Ke}return T.rD(this.te,this.Hk,this.mo)},
 sP:function(a,b){var z,y,x,w
-try{K.jXm(this.n4,b,this.Hk,!1)}catch(x){w=H.Ru(x)
+try{K.jXm(this.te,b,this.Hk,!1)}catch(x){w=H.Ru(x)
 z=w
 y=new H.oP(x,null)
-H.VM(new P.Zf(P.Dt(null)),[null]).w0("Error evaluating expression '"+H.d(this.n4)+"': "+H.d(z),y)}},
+H.VM(new P.Zf(P.Dt(null)),[null]).w0("Error evaluating expression '"+H.d(this.te)+"': "+H.d(z),y)}},
 TR:function(a,b){var z,y
-if(this.Fg!=null)throw H.b(P.w("already open"))
-this.Fg=b
-z=H.VM(new P.Sw(null,0,0,0),[null])
+if(this.qc!=null)throw H.b(P.w("already open"))
+this.qc=b
+z=H.VM(new P.nd(null,0,0,0),[null])
 z.Eo(null,null)
-y=J.okV(this.n4,new K.Oy(z))
-this.dD=y
+y=J.okV(this.te,new K.Oy(z))
+this.uZ=y
 z=y.gju().yI(this.gGX())
 z.fm(0,new T.yF(this))
-this.JX=z
-this.Ix(!0)
-return this.HR},
-Ix:function(a){var z,y,x,w,v
-try{x=this.dD
+this.RQ=z
+this.kf(!0)
+return this.Ke},
+kf:function(a){var z,y,x,w,v
+try{x=this.uZ
 J.okV(x,new K.Edh(this.Hk,a))
 x.gBI()
-x=this.Mr(this.dD.gBI(),a)
+x=this.Mr(this.uZ.gBI(),a)
 return x}catch(w){x=H.Ru(w)
 z=x
 y=new H.oP(w,null)
 x=new P.Gc(0,$.X3,null,null,null,null,null,null)
 x.$builtinTypeInfo=[null]
 new P.Zf(x).$builtinTypeInfo=[null]
-v="Error evaluating expression '"+H.d(this.dD)+"': "+H.d(z)
+v="Error evaluating expression '"+H.d(this.uZ)+"': "+H.d(z)
 if(x.YM!==0)H.vh(P.w("Future already completed"))
 x.Nk(v,y)
 return!1}},
-bE:function(){return this.Ix(!1)},
+Yg:function(){return this.kf(!1)},
 xO:function(a){var z,y
-if(this.Fg==null)return
-this.JX.Gv()
-this.JX=null
-this.Fg=null
+if(this.qc==null)return
+this.RQ.Gv()
+this.RQ=null
+this.qc=null
 z=$.Pk()
-y=this.dD
+y=this.uZ
 z.toString
 J.okV(y,z)
-this.dD=null},
-fR:function(){if(this.Fg!=null)this.TC()},
-TC:function(){var z=0
-while(!0){if(!(z<1000&&this.bE()===!0))break;++z}return z>0},
+this.uZ=null},
+fR:function(){if(this.qc!=null)this.Cm()},
+Cm:function(){var z=0
+while(!0){if(!(z<1000&&this.Yg()===!0))break;++z}return z>0},
 static:{"^":"Hi1",rD:function(a,b,c){var z,y,x,w,v
 try{z=J.okV(a,new K.GQ(b))
 w=c==null?z:c.$1(z)
@@ -16686,16 +16863,16 @@
 H.VM(new P.Zf(P.Dt(null)),[null]).w0("Error evaluating expression '"+H.d(a)+"': "+H.d(y),x)}return}}},
 yF:{
 "^":"TpZ:81;a",
-$2:[function(a,b){H.VM(new P.Zf(P.Dt(null)),[null]).w0("Error evaluating expression '"+H.d(this.a.dD)+"': "+H.d(a),b)},"$2",null,4,0,null,2,160,"call"],
+$2:[function(a,b){H.VM(new P.Zf(P.Dt(null)),[null]).w0("Error evaluating expression '"+H.d(this.a.uZ)+"': "+H.d(a),b)},"$2",null,4,0,null,2,165,"call"],
 $isEH:true},
 WM:{
 "^":"a;"}}],["","",,B,{
 "^":"",
-De:{
+LL:{
 "^":"xhq;vq>,Xq,Vg,fn",
 vb:function(a,b){this.vq.yI(new B.iH6(b,this))},
 $asxhq:function(a){return[null]},
-static:{Ha:function(a,b){var z=H.VM(new B.De(a,null,null,null),[b])
+static:{Ha:function(a,b){var z=H.VM(new B.LL(a,null,null,null),[b])
 z.vb(a,b)
 return z}}},
 iH6:{
@@ -16703,7 +16880,7 @@
 $1:[function(a){var z=this.b
 z.Xq=F.Wi(z,C.zd,z.Xq,a)},"$1",null,2,0,null,97,"call"],
 $isEH:true,
-$signature:function(){return H.oZ(function(a){return{func:"WM",args:[a]}},this.b,"De")}}}],["","",,K,{
+$signature:function(){return H.oZ(function(a){return{func:"WM",args:[a]}},this.b,"LL")}}}],["","",,K,{
 "^":"",
 jXm:function(a,b,c,d){var z,y,x,w,v,u,t
 z=H.VM([],[U.rx])
@@ -16711,9 +16888,9 @@
 z.push(y.gT8(a))
 a=y.gBb(a)}if(!!y.$isfp){x=y.gP(a)
 w=C.x4
-v=!1}else if(!!y.$isvn){w=a.gTf()
+v=!1}else if(!!y.$isvn){w=a.gZs()
 x=a.gmU()
-v=!0}else{if(!!y.$isx9){w=a.gTf()
+v=!0}else{if(!!y.$isx9){w=a.gZs()
 x=y.goc(a)}else{if(d)throw H.b(K.zq("Expression is not assignable: "+H.d(a)))
 return}v=!1}for(y=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);y.G();){u=y.Ff
 J.okV(u,new K.GQ(c))
@@ -16721,7 +16898,7 @@
 else return}t=J.okV(w,new K.GQ(c))
 if(t==null)return
 if(v)J.kW(t,J.okV(x,new K.GQ(c)),b)
-else{y=$.vu().JE.T4.t(0,x)
+else{y=$.vu().xV.T4.t(0,x)
 $.cp().Cq(t,y,b)}return b},
 wm:function(a,b){var z,y,x
 z=new K.ug(a)
@@ -16816,13 +16993,13 @@
 t1:function(a,b){if(J.xC(a,"this"))H.vh(K.zq("'this' cannot be used as a variable name."))
 return new K.Rf(this,a,b)},
 $isPF:true,
-$isCo:true,
-$asCo:function(){return[P.qU,P.a]}},
+$isHX:true,
+$asHX:function(){return[P.qU,P.a]}},
 ug:{
 "^":"PF;k8>",
 t:function(a,b){var z,y
 if(J.xC(b,"this"))return this.k8
-z=$.vu().JE.T4.t(0,b)
+z=$.vu().xV.T4.t(0,b)
 y=this.k8
 if(y==null||z==null)throw H.b(K.zq("variable '"+H.d(b)+"' not found"))
 y=$.cp().Gp(y,z)
@@ -16854,7 +17031,7 @@
 "^":"a;VO?,Xl<",
 gju:function(){var z=this.vO
 return H.VM(new P.Ik(z),[H.u3(z,0)])},
-gfL:function(){return this.KL},
+gXt:function(){return this.KL},
 gBI:function(){return this.Xl},
 MN:function(a){},
 Yo:function(a){var z
@@ -16888,16 +17065,16 @@
 W9:function(a){return J.ZH(this.ms)},
 Hs:function(a){return a.o2.RR(0,this)},
 Ci:function(a){var z,y,x
-z=J.okV(a.gTf(),this)
+z=J.okV(a.gZs(),this)
 if(z==null)return
 y=a.goc(a)
-x=$.vu().JE.T4.t(0,y)
+x=$.vu().xV.T4.t(0,y)
 return $.cp().Gp(z,x)},
-CU:function(a){var z=J.okV(a.gTf(),this)
+CU:function(a){var z=J.okV(a.gZs(),this)
 if(z==null)return
 return J.UQ(z,J.okV(a.gmU(),this))},
 Y7:function(a){var z,y,x,w,v
-z=J.okV(a.gTf(),this)
+z=J.okV(a.gZs(),this)
 if(z==null)return
 if(a.gre()==null)y=null
 else{x=a.gre()
@@ -16905,10 +17082,10 @@
 x.toString
 y=H.VM(new H.A8(x,w),[null,null]).tt(0,!1)}if(a.gnK(a)==null)return H.eC(z,y,P.Te(null))
 x=a.gnK(a)
-v=$.vu().JE.T4.t(0,x)
+v=$.vu().xV.T4.t(0,x)
 return $.cp().Ck(z,v,y,!1,null)},
-tk:function(a){return a.gP(a)},
-Zh:function(a){return H.VM(new H.A8(a.glm(),this.gnG()),[null,null]).br(0)},
+I6W:function(a){return a.gP(a)},
+Zh:function(a){return H.VM(new H.A8(a.gBx(),this.gnG()),[null,null]).br(0)},
 o0:function(a){var z,y,x
 z=P.Fl(null,null)
 for(y=a.gRl(a),y=H.VM(new H.a7(y,y.length,0,null),[H.u3(y,0)]);y.G();){x=y.Ff
@@ -16938,19 +17115,19 @@
 W9:function(a){return new K.Il(a,null,null,null,P.bK(null,null,!1,null))},
 Hs:function(a){return a.o2.RR(0,this)},
 Ci:function(a){var z,y
-z=J.okV(a.gTf(),this)
+z=J.okV(a.gZs(),this)
 y=new K.vl(z,a,null,null,null,P.bK(null,null,!1,null))
 z.sVO(y)
 return y},
 CU:function(a){var z,y,x
-z=J.okV(a.gTf(),this)
+z=J.okV(a.gZs(),this)
 y=J.okV(a.gmU(),this)
 x=new K.iTN(z,y,a,null,null,null,P.bK(null,null,!1,null))
 z.sVO(x)
 y.sVO(x)
 return x},
 Y7:function(a){var z,y,x,w,v
-z=J.okV(a.gTf(),this)
+z=J.okV(a.gZs(),this)
 if(a.gre()==null)y=null
 else{x=a.gre()
 w=this.gnG()
@@ -16959,15 +17136,15 @@
 z.sVO(v)
 if(y!=null)H.bQ(y,new K.zD(v))
 return v},
-tk:function(a){return new K.x5(a,null,null,null,P.bK(null,null,!1,null))},
+I6W:function(a){return new K.x5(a,null,null,null,P.bK(null,null,!1,null))},
 Zh:function(a){var z,y
-z=H.VM(new H.A8(a.glm(),this.gnG()),[null,null]).tt(0,!1)
+z=H.VM(new H.A8(a.gBx(),this.gnG()),[null,null]).tt(0,!1)
 y=new K.UF(z,a,null,null,null,P.bK(null,null,!1,null))
 H.bQ(z,new K.XV(y))
 return y},
 o0:function(a){var z,y
 z=H.VM(new H.A8(a.gRl(a),this.gnG()),[null,null]).tt(0,!1)
-y=new K.ED(z,a,null,null,null,P.bK(null,null,!1,null))
+y=new K.ev2(z,a,null,null,null,P.bK(null,null,!1,null))
 H.bQ(z,new K.Xs(y))
 return y},
 YV:function(a){var z,y,x
@@ -16981,7 +17158,7 @@
 ex:function(a){var z,y,x
 z=J.okV(a.gBb(a),this)
 y=J.okV(a.gT8(a),this)
-x=new K.ky(z,y,a,null,null,null,P.bK(null,null,!1,null))
+x=new K.ED(z,y,a,null,null,null,P.bK(null,null,!1,null))
 z.sVO(x)
 y.sVO(x)
 return x},
@@ -17023,8 +17200,8 @@
 "^":"Ay0;KL,VO,tj,Xl,vO",
 MN:function(a){this.Xl=J.ZH(a)},
 RR:function(a,b){return b.W9(this)},
-$asAy0:function(){return[U.EO]},
-$isEO:true,
+$asAy0:function(){return[U.WH]},
+$isWH:true,
 $isrx:true},
 x5:{
 "^":"Ay0;KL,VO,tj,Xl,vO",
@@ -17032,14 +17209,14 @@
 return z.gP(z)},
 MN:function(a){var z=this.KL
 this.Xl=z.gP(z)},
-RR:function(a,b){return b.tk(this)},
+RR:function(a,b){return b.I6W(this)},
 $asAy0:function(){return[U.noG]},
 $asnoG:function(){return[null]},
 $isnoG:true,
 $isrx:true},
 UF:{
-"^":"Ay0;lm<,KL,VO,tj,Xl,vO",
-MN:function(a){this.Xl=H.VM(new H.A8(this.lm,new K.Hv()),[null,null]).br(0)},
+"^":"Ay0;Bx<,KL,VO,tj,Xl,vO",
+MN:function(a){this.Xl=H.VM(new H.A8(this.Bx,new K.Hv()),[null,null]).br(0)},
 RR:function(a,b){return b.Zh(this)},
 $asAy0:function(){return[U.c0]},
 $isc0:true,
@@ -17048,14 +17225,14 @@
 "^":"TpZ:12;",
 $1:[function(a){return a.gXl()},"$1",null,2,0,null,97,"call"],
 $isEH:true},
-ED:{
+ev2:{
 "^":"Ay0;Rl>,KL,VO,tj,Xl,vO",
-MN:function(a){this.Xl=H.n3(this.Rl,P.L5(null,null,null,null,null),new K.Kv())},
+MN:function(a){this.Xl=H.n3(this.Rl,P.L5(null,null,null,null,null),new K.Ku())},
 RR:function(a,b){return b.o0(this)},
 $asAy0:function(){return[U.Mm]},
 $isMm:true,
 $isrx:true},
-Kv:{
+Ku:{
 "^":"TpZ:81;",
 $2:function(a,b){J.kW(a,J.AW(b).gXl(),b.gv4().gXl())
 return a},
@@ -17079,7 +17256,7 @@
 y=J.x(x)
 if(!y.$isd3)return
 z=z.gP(z)
-w=$.vu().JE.T4.t(0,z)
+w=$.vu().xV.T4.t(0,z)
 this.tj=y.gqh(x).yI(new K.OC(this,a,w))},
 RR:function(a,b){return b.qv(this)},
 $asAy0:function(){return[U.fp]},
@@ -17087,7 +17264,7 @@
 $isrx:true},
 OC:{
 "^":"TpZ:12;a,b,c",
-$1:[function(a){if(J.VA(a,new K.GC(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,187,"call"],
+$1:[function(a){if(J.VA(a,new K.GC(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,192,"call"],
 $isEH:true},
 GC:{
 "^":"TpZ:12;d",
@@ -17107,7 +17284,7 @@
 $asAy0:function(){return[U.FH]},
 $isFH:true,
 $isrx:true},
-ky:{
+ED:{
 "^":"Ay0;Bb>,T8>,KL,VO,tj,Xl,vO",
 gxS:function(a){var z=this.KL
 return z.gxS(z)},
@@ -17139,15 +17316,15 @@
 $isx06:true,
 $isrx:true},
 vl:{
-"^":"Ay0;Tf<,KL,VO,tj,Xl,vO",
+"^":"Ay0;Zs<,KL,VO,tj,Xl,vO",
 goc:function(a){var z=this.KL
 return z.goc(z)},
 MN:function(a){var z,y,x
-z=this.Tf.gXl()
+z=this.Zs.gXl()
 if(z==null){this.Xl=null
 return}y=this.KL
 y=y.goc(y)
-x=$.vu().JE.T4.t(0,y)
+x=$.vu().xV.T4.t(0,y)
 this.Xl=$.cp().Gp(z,x)
 y=J.x(z)
 if(!!y.$isd3)this.tj=y.gqh(z).yI(new K.Vw(this,a,x))},
@@ -17157,16 +17334,16 @@
 $isrx:true},
 Vw:{
 "^":"TpZ:12;a,b,c",
-$1:[function(a){if(J.VA(a,new K.WKb(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,187,"call"],
+$1:[function(a){if(J.VA(a,new K.WKb(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,192,"call"],
 $isEH:true},
 WKb:{
 "^":"TpZ:12;d",
 $1:[function(a){return!!J.x(a).$isqI&&J.xC(a.oc,this.d)},"$1",null,2,0,null,85,"call"],
 $isEH:true},
 iTN:{
-"^":"Ay0;Tf<,mU<,KL,VO,tj,Xl,vO",
+"^":"Ay0;Zs<,mU<,KL,VO,tj,Xl,vO",
 MN:function(a){var z,y,x
-z=this.Tf.gXl()
+z=this.Zs.gXl()
 if(z==null){this.Xl=null
 return}y=this.mU.gXl()
 x=J.U6(z)
@@ -17179,37 +17356,37 @@
 $isrx:true},
 tE:{
 "^":"TpZ:12;a,b,c",
-$1:[function(a){if(J.VA(a,new K.Ku(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,187,"call"],
+$1:[function(a){if(J.VA(a,new K.GST(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,192,"call"],
 $isEH:true},
-Ku:{
+GST:{
 "^":"TpZ:12;d",
 $1:[function(a){return a.vP(this.d)},"$1",null,2,0,null,85,"call"],
 $isEH:true},
 z5:{
 "^":"TpZ:12;e,f,UI",
-$1:[function(a){if(J.VA(a,new K.ey(this.UI))===!0)this.e.Yo(this.f)},"$1",null,2,0,null,187,"call"],
+$1:[function(a){if(J.VA(a,new K.ey(this.UI))===!0)this.e.Yo(this.f)},"$1",null,2,0,null,192,"call"],
 $isEH:true},
 ey:{
 "^":"TpZ:12;bK",
 $1:[function(a){return!!J.x(a).$isya&&J.xC(a.nl,this.bK)},"$1",null,2,0,null,85,"call"],
 $isEH:true},
 faZ:{
-"^":"Ay0;Tf<,re<,KL,VO,tj,Xl,vO",
+"^":"Ay0;Zs<,re<,KL,VO,tj,Xl,vO",
 gnK:function(a){var z=this.KL
 return z.gnK(z)},
 MN:function(a){var z,y,x,w
 z=this.re
 z.toString
 y=H.VM(new H.A8(z,new K.vQ()),[null,null]).br(0)
-x=this.Tf.gXl()
+x=this.Zs.gXl()
 if(x==null){this.Xl=null
 return}z=this.KL
 if(z.gnK(z)==null){z=H.eC(x,y,P.Te(null))
 this.Xl=!!J.x(z).$iswS?B.Ha(z,null):z}else{z=z.gnK(z)
-w=$.vu().JE.T4.t(0,z)
+w=$.vu().xV.T4.t(0,z)
 this.Xl=$.cp().Ck(x,w,y,!1,null)
 z=J.x(x)
-if(!!z.$isd3)this.tj=z.gqh(x).yI(new K.Xh(this,a,w))}},
+if(!!z.$isd3)this.tj=z.gqh(x).yI(new K.BGc(this,a,w))}},
 RR:function(a,b){return b.Y7(this)},
 $asAy0:function(){return[U.RWc]},
 $isRWc:true,
@@ -17218,9 +17395,9 @@
 "^":"TpZ:12;",
 $1:[function(a){return a.gXl()},"$1",null,2,0,null,49,"call"],
 $isEH:true},
-Xh:{
-"^":"TpZ:194;a,b,c",
-$1:[function(a){if(J.VA(a,new K.ho(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,187,"call"],
+BGc:{
+"^":"TpZ:199;a,b,c",
+$1:[function(a){if(J.VA(a,new K.ho(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,192,"call"],
 $isEH:true},
 ho:{
 "^":"TpZ:12;d",
@@ -17249,19 +17426,19 @@
 a=536870911&a+((67108863&a)<<3>>>0)
 a=(a^a>>>11)>>>0
 return 536870911&a+((16383&a)<<15>>>0)},
-tu:{
+Fs:{
 "^":"a;",
-Bf:[function(a,b,c){return new U.vn(b,c)},"$2","gvH",4,0,195,2,49]},
+Bf:[function(a,b,c){return new U.vn(b,c)},"$2","gvH",4,0,200,2,49]},
 rx:{
 "^":"a;",
 $isrx:true},
-EO:{
+WH:{
 "^":"rx;",
 RR:function(a,b){return b.W9(this)},
-$isEO:true},
+$isWH:true},
 noG:{
 "^":"rx;P>",
-RR:function(a,b){return b.tk(this)},
+RR:function(a,b){return b.I6W(this)},
 bu:[function(a){var z=this.P
 return typeof z==="string"?"\""+H.d(z)+"\"":H.d(z)},"$0","gCR",0,0,73],
 n:function(a,b){var z
@@ -17271,12 +17448,12 @@
 giO:function(a){return J.v1(this.P)},
 $isnoG:true},
 c0:{
-"^":"rx;lm<",
+"^":"rx;Bx<",
 RR:function(a,b){return b.Zh(this)},
-bu:[function(a){return H.d(this.lm)},"$0","gCR",0,0,73],
+bu:[function(a){return H.d(this.Bx)},"$0","gCR",0,0,73],
 n:function(a,b){if(b==null)return!1
-return!!J.x(b).$isc0&&U.Pu(b.glm(),this.lm)},
-giO:function(a){return U.N4(this.lm)},
+return!!J.x(b).$isc0&&U.Pu(b.gBx(),this.Bx)},
+giO:function(a){return U.N4(this.Bx)},
 $isc0:true},
 Mm:{
 "^":"rx;Rl>",
@@ -17374,7 +17551,7 @@
 return U.Le(U.C0C(U.C0C(0,z),y))},
 $isX7S:true,
 $isDI:true},
-NM:{
+Sc:{
 "^":"rx;Bb>,T8>",
 RR:function(a,b){return b.eS(this)},
 gxG:function(){var z=this.T8
@@ -17382,48 +17559,48 @@
 gkZ:function(a){return this.Bb},
 bu:[function(a){return"("+H.d(this.Bb)+" as "+H.d(this.T8)+")"},"$0","gCR",0,0,73],
 n:function(a,b){if(b==null)return!1
-return!!J.x(b).$isNM&&J.xC(b.Bb,this.Bb)&&b.T8.n(0,this.T8)},
+return!!J.x(b).$isSc&&J.xC(b.Bb,this.Bb)&&b.T8.n(0,this.T8)},
 giO:function(a){var z,y
 z=J.v1(this.Bb)
 y=this.T8
 y=y.giO(y)
 return U.Le(U.C0C(U.C0C(0,z),y))},
-$isNM:true,
+$isSc:true,
 $isDI:true},
 vn:{
-"^":"rx;Tf<,mU<",
+"^":"rx;Zs<,mU<",
 RR:function(a,b){return b.CU(this)},
-bu:[function(a){return H.d(this.Tf)+"["+H.d(this.mU)+"]"},"$0","gCR",0,0,73],
+bu:[function(a){return H.d(this.Zs)+"["+H.d(this.mU)+"]"},"$0","gCR",0,0,73],
 n:function(a,b){if(b==null)return!1
-return!!J.x(b).$isvn&&J.xC(b.gTf(),this.Tf)&&J.xC(b.gmU(),this.mU)},
+return!!J.x(b).$isvn&&J.xC(b.gZs(),this.Zs)&&J.xC(b.gmU(),this.mU)},
 giO:function(a){var z,y
-z=J.v1(this.Tf)
+z=J.v1(this.Zs)
 y=J.v1(this.mU)
 return U.Le(U.C0C(U.C0C(0,z),y))},
 $isvn:true},
 x9:{
-"^":"rx;Tf<,oc>",
+"^":"rx;Zs<,oc>",
 RR:function(a,b){return b.Ci(this)},
-bu:[function(a){return H.d(this.Tf)+"."+H.d(this.oc)},"$0","gCR",0,0,73],
+bu:[function(a){return H.d(this.Zs)+"."+H.d(this.oc)},"$0","gCR",0,0,73],
 n:function(a,b){var z
 if(b==null)return!1
 z=J.x(b)
-return!!z.$isx9&&J.xC(b.gTf(),this.Tf)&&J.xC(z.goc(b),this.oc)},
+return!!z.$isx9&&J.xC(b.gZs(),this.Zs)&&J.xC(z.goc(b),this.oc)},
 giO:function(a){var z,y
-z=J.v1(this.Tf)
+z=J.v1(this.Zs)
 y=J.v1(this.oc)
 return U.Le(U.C0C(U.C0C(0,z),y))},
 $isx9:true},
 RWc:{
-"^":"rx;Tf<,nK>,re<",
+"^":"rx;Zs<,nK>,re<",
 RR:function(a,b){return b.Y7(this)},
-bu:[function(a){return H.d(this.Tf)+"."+H.d(this.nK)+"("+H.d(this.re)+")"},"$0","gCR",0,0,73],
+bu:[function(a){return H.d(this.Zs)+"."+H.d(this.nK)+"("+H.d(this.re)+")"},"$0","gCR",0,0,73],
 n:function(a,b){var z
 if(b==null)return!1
 z=J.x(b)
-return!!z.$isRWc&&J.xC(b.gTf(),this.Tf)&&J.xC(z.gnK(b),this.nK)&&U.Pu(b.gre(),this.re)},
+return!!z.$isRWc&&J.xC(b.gZs(),this.Zs)&&J.xC(z.gnK(b),this.nK)&&U.Pu(b.gre(),this.re)},
 giO:function(a){var z,y,x
-z=J.v1(this.Tf)
+z=J.v1(this.Zs)
 y=J.v1(this.nK)
 x=U.N4(this.re)
 return U.Le(U.C0C(U.C0C(U.C0C(0,z),y),x))},
@@ -17469,7 +17646,7 @@
 w=this.VK()
 if(!J.x(w).$isfp)H.vh(Y.RV("'as' statements must end with an identifier"))
 this.Wi.toString
-a=new U.NM(a,w)}else break
+a=new U.Sc(a,w)}else break
 else{if(J.xC(J.Iz(this.V6.Ff),8)){z=this.V6.Ff.gG8()
 if(typeof z!=="number")return z.F()
 if(typeof b!=="number")return H.s(b)
@@ -17485,7 +17662,7 @@
 z=J.x(b)
 if(!!z.$isfp){z=z.gP(b)
 this.Wi.toString
-return new U.x9(a,z)}else if(!!z.$isRWc&&!!J.x(b.gTf()).$isfp){z=J.Vm(b.gTf())
+return new U.x9(a,z)}else if(!!z.$isRWc&&!!J.x(b.gZs()).$isfp){z=J.Vm(b.gZs())
 y=b.gre()
 this.Wi.toString
 return new U.RWc(a,z,y)}else throw H.b(Y.RV("expected identifier: "+H.d(b)))},
@@ -17534,9 +17711,9 @@
 this.Wi.toString
 return new U.fp("this")}else if(C.Nm.tg(C.jY,z))throw H.b(Y.RV("unexpected keyword: "+H.d(z)))
 throw H.b(Y.RV("unrecognized keyword: "+H.d(z)))
-case 2:return this.xh()
+case 2:return this.Yj()
 case 1:return this.Dy()
-case 6:return this.Rb()
+case 6:return this.c9()
 case 7:return this.eD()
 case 9:if(J.xC(J.Vm(this.V6.Ff),"(")){this.jz()
 y=this.VK()
@@ -17569,7 +17746,7 @@
 y=this.V6.Ff}while(y!=null&&J.xC(J.Vm(y),","))
 this.Jn(9,"}")
 return new U.Mm(z)},
-xh:function(){var z,y,x
+Yj:function(){var z,y,x
 if(J.xC(J.Vm(this.V6.Ff),"true")){this.jz()
 this.Wi.toString
 return H.VM(new U.noG(!0),[null])}if(J.xC(J.Vm(this.V6.Ff),"false")){this.jz()
@@ -17605,13 +17782,13 @@
 y=H.VM(new U.noG(z),[null])
 this.jz()
 return y},
-ldL:function(a){var z,y
+Rb:function(a){var z,y
 z=H.BU(H.d(a)+H.d(J.Vm(this.V6.Ff)),null,null)
 this.Wi.toString
 y=H.VM(new U.noG(z),[null])
 this.jz()
 return y},
-Rb:function(){return this.ldL("")},
+c9:function(){return this.Rb("")},
 XO:function(a){var z,y
 z=H.RR(H.d(a)+H.d(J.Vm(this.V6.Ff)),null)
 this.Wi.toString
@@ -17622,7 +17799,7 @@
 static:{OD:function(a,b){var z,y,x
 z=H.VM([],[Y.qS])
 y=P.p9("")
-x=new U.tu()
+x=new U.Fs()
 return new T.FX(x,new Y.dd(z,y,new P.ysG(a,0,0,null),null),null,null)}}}}],["","",,K,{
 "^":"",
 eq:[function(a){return H.VM(new K.Bt(a),[null])},"$1","FLA",2,0,70,71],
@@ -17767,25 +17944,25 @@
 "^":"",
 P55:{
 "^":"a;",
-DV:[function(a){return J.okV(a,this)},"$1","gnG",2,0,196,160]},
+DV:[function(a){return J.okV(a,this)},"$1","gnG",2,0,201,165]},
 cfS:{
 "^":"P55;",
 xn:function(a){},
 W9:function(a){this.xn(a)},
 Hs:function(a){a.o2.RR(0,this)
 this.xn(a)},
-Ci:function(a){J.okV(a.gTf(),this)
+Ci:function(a){J.okV(a.gZs(),this)
 this.xn(a)},
-CU:function(a){J.okV(a.gTf(),this)
+CU:function(a){J.okV(a.gZs(),this)
 J.okV(a.gmU(),this)
 this.xn(a)},
 Y7:function(a){var z
-J.okV(a.gTf(),this)
+J.okV(a.gZs(),this)
 if(a.gre()!=null)for(z=a.gre(),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();)J.okV(z.Ff,this)
 this.xn(a)},
-tk:function(a){this.xn(a)},
+I6W:function(a){this.xn(a)},
 Zh:function(a){var z
-for(z=a.glm(),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();)J.okV(z.Ff,this)
+for(z=a.gBx(),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();)J.okV(z.Ff,this)
 this.xn(a)},
 o0:function(a){var z
 for(z=a.gRl(a),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();)J.okV(z.Ff,this)
@@ -17811,7 +17988,7 @@
 this.xn(a)}}}],["","",,T,{
 "^":"",
 ov:{
-"^":"V50;Ny,t7,fI,Fd,cI,He,xo,ZJ,PZ,Kf,Nf,D6,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V53;Ny,t7,fI,Fd,cI,He,xo,ZJ,PZ,Kf,Nf,D6,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gtu:function(a){return a.Ny},
 stu:function(a,b){a.Ny=this.ct(a,C.PX,a.Ny,b)},
 gfg:function(a){return a.t7},
@@ -17838,7 +18015,7 @@
 if(z!=null){y=!!z.scrollIntoViewIfNeeded
 if(y)z.scrollIntoViewIfNeeded()
 else z.scrollIntoView()}},
-qA:[function(a,b,c){this.W7(a)},"$2","giH",4,0,197,198,199],
+qA:[function(a,b,c){this.W7(a)},"$2","giH",4,0,202,203,204],
 Es:function(a){var z,y
 Z.uL.prototype.Es.call(this,a)
 z=(a.shadowRoot||a.webkitShadowRoot).querySelector(".sourceTable")
@@ -17851,7 +18028,7 @@
 mN:[function(a,b){this.Um(a)
 this.W7(a)},"$1","goL",2,0,19,59],
 KC:[function(a,b){this.Um(a)},"$1","giB",2,0,19,59],
-ib:[function(a,b){this.Um(a)},"$1","gP3",2,0,19,59],
+Ti:[function(a,b){this.Um(a)},"$1","gP3",2,0,19,59],
 Vj:[function(a,b){this.Um(a)},"$1","gcY",2,0,19,59],
 Um:function(a){var z,y,x
 a.PZ=this.ct(a,C.uG,a.PZ,!1)
@@ -17889,10 +18066,10 @@
 a.ZQ=x
 a.qJ=w
 a.wy=v
-C.oAw.LX(a)
-C.oAw.XI(a)
+C.za.LX(a)
+C.za.XI(a)
 return a}}},
-V50:{
+V53:{
 "^":"uL+Pi;",
 $isd3:true},
 Es:{
@@ -17902,7 +18079,7 @@
 J.XP(z)}},"$1",null,2,0,null,13,"call"],
 $isEH:true},
 vr:{
-"^":"V51;X9,pL,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V54;X9,pL,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gRd:function(a){return a.X9},
 sRd:function(a,b){a.X9=this.ct(a,C.VI,a.X9,b)},
 gO9:function(a){return a.pL},
@@ -17932,26 +18109,26 @@
 C.FC.LX(a)
 C.FC.XI(a)
 return a}}},
-V51:{
+V54:{
 "^":"uL+Pi;",
 $isd3:true},
 eE:{
 "^":"TpZ:12;a",
 $1:[function(a){var z=this.a
-z.pL=J.Q5(z,C.S4,z.pL,!1)},"$1",null,2,0,null,13,"call"],
+z.pL=J.NB(z,C.S4,z.pL,!1)},"$1",null,2,0,null,13,"call"],
 $isEH:true},
 b3:{
 "^":"TpZ:12;b",
 $1:[function(a){var z=this.b
-z.pL=J.Q5(z,C.S4,z.pL,!1)},"$1",null,2,0,null,13,"call"],
+z.pL=J.NB(z,C.S4,z.pL,!1)},"$1",null,2,0,null,13,"call"],
 $isEH:true}}],["","",,A,{
 "^":"",
 kn:{
-"^":"qeq;jJ,Vg,fn,tY,Pe,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"oEY;jJ,Vg,fn,tY,Pe,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gBV:function(a){return a.jJ},
 sBV:function(a,b){a.jJ=this.ct(a,C.tW,a.jJ,b)},
-gXt:function(a){var z=a.tY
-if(z==null)return Q.xI.prototype.gXt.call(this,a)
+gJp:function(a){var z=a.tY
+if(z==null)return Q.xI.prototype.gJp.call(this,a)
 return z.gTE()},
 fX:[function(a,b){this.at(a,null)},"$1","glD",2,0,19,59],
 at:[function(a,b){var z=a.tY
@@ -17985,12 +18162,12 @@
 C.Wa.LX(a)
 C.Wa.XI(a)
 return a}}},
-qeq:{
+oEY:{
 "^":"xI+Pi;",
 $isd3:true}}],["","",,U,{
 "^":"",
 fI:{
-"^":"V52;Uz,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V55;Uz,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gtu:function(a){return a.Uz},
 stu:function(a,b){a.Uz=this.ct(a,C.PX,a.Uz,b)},
 Es:function(a){var z
@@ -18016,11 +18193,15 @@
 C.cJ0.LX(a)
 C.cJ0.XI(a)
 return a}}},
-V52:{
+V55:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,D,{
 "^":"",
 Xm:[function(a,b){return J.FW(J.DA(a),J.DA(b))},"$2","E0",4,0,72],
+dV:function(a){switch(a){case"BoundedType":case"Instance":case"List":case"String":case"Type":case"TypeParameter":case"TypeRef":case"bool":case"double":case"int":case"null":return!0
+default:return!1}},
+rO:function(a){switch(a){case"BoundedType":case"Type":case"TypeParameter":case"TypeRef":return!0
+default:return!1}},
 Nl:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
 if(b==null)return
 z=J.U6(b)
@@ -18028,7 +18209,8 @@
 if(!z)N.QM("").YX("Malformed service object: "+H.d(b))
 y=J.UQ(b,"type")
 z=J.Qe(y)
-switch(z.nC(y,"@")?z.yn(y,1):y){case"Class":z=D.vO
+if(z.nC(y,"@"))y=z.yn(y,1)
+switch(y){case"Class":z=D.vO
 x=[]
 x.$builtinTypeInfo=[z]
 x=new Q.wn(null,null,x,null,null)
@@ -18051,9 +18233,9 @@
 t=new D.dy(null,null,null,null,null,null,null,null,null,null,new D.Iy(new D.mT(0,0,null,null),new D.mT(0,0,null,null)),new D.Iy(new D.mT(0,0,null,null),new D.mT(0,0,null,null)),new D.mT(0,0,null,null),x,w,null,v,u,null,null,a,null,null,null,!1,null,null,null,null,null)
 break
 case"Code":z=[]
-z.$builtinTypeInfo=[D.Fc]
+z.$builtinTypeInfo=[D.ta]
 x=[]
-x.$builtinTypeInfo=[D.Fc]
+x.$builtinTypeInfo=[D.ta]
 w=D.Q4
 v=[]
 v.$builtinTypeInfo=[w]
@@ -18065,6 +18247,8 @@
 s.$builtinTypeInfo=[w,u]
 t=new D.kx(null,0,0,0,0,0,z,x,v,s,"","",null,null,null,!1,null,null,!1,null,null,a,null,null,null,!1,null,null,null,null,null)
 break
+case"Context":t=new D.lI(null,null,null,null,null,null,null,a,null,null,null,!1,null,null,null,null,null)
+break
 case"Counter":z=D.G9
 x=[]
 x.$builtinTypeInfo=[z]
@@ -18083,8 +18267,6 @@
 x.$builtinTypeInfo=[z]
 t=new D.YX(!1,null,x,100,null,0,null,null,null,null,a,null,null,null,!1,null,null,null,null,null)
 break
-case"Array":case"Bigint":case"Bool":case"Double":case"GrowableObjectArray":case"Instance":case"Mint":case"Null":case"Sentinel":case"Smi":case"String":case"Type":t=new D.uq(null,null,null,null,null,null,null,null,null,null,null,null,null,a,null,null,null,!1,null,null,null,null,null)
-break
 case"Isolate":z=J.wp(a)
 x=new V.qC(P.YM(null,null,null,null,null),null,null)
 x.$builtinTypeInfo=[null,null]
@@ -18157,9 +18339,11 @@
 break
 case"Socket":t=new D.WP(null,null,null,null,"",!1,!1,!1,!1,null,null,null,null,null,null,null,a,null,null,null,!1,null,null,null,null,null)
 break
-default:z=new V.qC(P.YM(null,null,null,null,null),null,null)
+default:if(D.dV(y)||J.xC(y,"Sentinel")){t=new D.uq(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,a,null,null,null,!1,null,null,null,null,null)
+break}else{z=new V.qC(P.YM(null,null,null,null,null),null,null)
 z.$builtinTypeInfo=[null,null]
-t=new D.vO(z,a,null,null,null,!1,null,null,null,null,null)}t.eC(b)
+t=new D.vO(z,a,null,null,null,!1,null,null,null,null,null)
+break}}t.eC(b)
 return t},
 UW:function(a){if(a.gHh())return
 return a},
@@ -18189,16 +18373,20 @@
 gjO:function(a){return this.TU},
 gt5:function(a){return this.oU},
 gdr:function(){return this.JK},
-gFY:function(){return J.xC(this.JK,"Bool")},
-gzx:function(){return J.xC(this.JK,"Double")},
-gt3:function(){return J.xC(this.JK,"Error")},
-gNs:function(){return J.xC(this.JK,"Instance")},
-gWL:function(){return J.xC(this.JK,"Smi")||J.xC(this.JK,"Mint")||J.xC(this.JK,"Bigint")},
-gK4:function(a){return J.xC(this.JK,"GrowableObjectArray")||J.xC(this.JK,"Array")},
-gHh:function(){return J.xC(this.JK,"Null")},
-gl5:function(){return J.xC(this.JK,"Sentinel")},
-gu7:function(){return J.xC(this.JK,"String")},
-gqN:function(){return J.xC(this.JK,"Type")},
+glO:function(){return D.rO(this.oU)},
+gFY:function(){return J.xC(this.oU,"bool")},
+gzx:function(){return J.xC(this.oU,"double")},
+gt3:function(){return J.xC(this.oU,"Error")},
+gNs:function(){return D.dV(this.oU)},
+gWL:function(){return J.xC(this.oU,"int")},
+gK4:function(a){return J.xC(this.oU,"List")},
+gHh:function(){return J.xC(this.oU,"null")},
+gl5:function(){return J.xC(this.oU,"Sentinel")},
+gu7:function(){return J.xC(this.oU,"String")},
+gJE:function(){return J.xC(this.JK,"MirrorReference")},
+gl2:function(){return J.xC(this.JK,"WeakProperty")},
+gBF:function(){return!1},
+gXM:function(){return J.xC(this.oU,"Instance")&&!J.xC(this.JK,"MirrorReference")&&!J.xC(this.JK,"WeakProperty")&&!this.gBF()},
 gPj:function(a){return this.x8.YC(this.TU)},
 gox:function(a){return this.qu},
 gjm:function(){return!1},
@@ -18206,7 +18394,7 @@
 goc:function(a){return this.gbN()},
 soc:function(a,b){this.sbN(this.ct(this,C.YS,this.gbN(),b))},
 gTE:function(){return this.gGR()},
-sTE:function(a){this.sGR(this.ct(this,C.Tc,this.gGR(),a))},
+sTE:function(a){this.sGR(this.ct(this,C.KS,this.gGR(),a))},
 xW:function(a){if(this.qu)return P.Ab(this,null)
 return this.VD(0)},
 VD:function(a){var z
@@ -18224,14 +18412,14 @@
 w=this.TU
 if(w!=null&&!J.xC(w,z.t(a,"id")));this.TU=z.t(a,"id")
 this.oU=x
-if(z.NZ(a,"vmType")===!0){z=z.t(a,"vmType")
+if(z.NZ(a,"_vmType")===!0){z=z.t(a,"_vmType")
 w=J.Qe(z)
 this.JK=w.nC(z,"@")?w.yn(z,1):z}else this.JK=this.oU
 this.R5(0,a,y)},
-YC:[function(a){return this.gPj(this)+"/"+H.d(a)},"$1","gua",2,0,169,200],
+YC:[function(a){return this.gPj(this)+"/"+H.d(a)},"$1","gua",2,0,172,205],
 $isaf:true},
 n1:{
-"^":"TpZ:202;a",
+"^":"TpZ:207;a",
 $1:[function(a){var z,y
 z=J.UQ(a,"type")
 y=J.Qe(z)
@@ -18239,7 +18427,7 @@
 y=this.a
 if(!J.xC(z,y.oU))return D.Nl(y.x8,a)
 y.eC(a)
-return y},"$1",null,2,0,null,201,"call"],
+return y},"$1",null,2,0,null,206,"call"],
 $isEH:true},
 jI:{
 "^":"TpZ:76;b",
@@ -18248,16 +18436,16 @@
 boh:{
 "^":"a;",
 O5:function(a){J.Me(a,new D.P5(this))},
-lh:[function(a){return this.gwv(this).jU(this.YC("coverage")).ml(new D.Rv(this))},"$0","gDX",0,0,203]},
+lh:[function(a){return this.gwv(this).jU(this.YC("coverage")).ml(new D.Rv(this))},"$0","gDX",0,0,208]},
 P5:{
 "^":"TpZ:12;a",
 $1:[function(a){var z=J.U6(a)
-z.t(a,"script").lV(z.t(a,"hits"))},"$1",null,2,0,null,204,"call"],
+z.t(a,"script").lV(z.t(a,"hits"))},"$1",null,2,0,null,209,"call"],
 $isEH:true},
 Rv:{
-"^":"TpZ:202;a",
+"^":"TpZ:207;a",
 $1:[function(a){var z=this.a
-z.O5(D.Nl(J.xC(z.gt5(z),"Isolate")?z:z.gXP(),a).t(0,"coverage"))},"$1",null,2,0,null,201,"call"],
+z.O5(D.Nl(J.xC(z.gt5(z),"Isolate")?z:z.gXP(),a).t(0,"coverage"))},"$1",null,2,0,null,206,"call"],
 $isEH:true},
 xm:{
 "^":"af;"},
@@ -18268,7 +18456,7 @@
 gi2:function(){var z=this.Qi
 return z.gUQ(z)},
 gPj:function(a){return H.d(this.TU)},
-YC:[function(a){return H.d(a)},"$1","gua",2,0,169,200],
+YC:[function(a){return H.d(a)},"$1","gua",2,0,172,205],
 gYe:function(a){return this.Ox},
 gI2:function(){return this.RW},
 gA3:function(){return this.Ts},
@@ -18361,7 +18549,7 @@
 N.QM("").To("New isolate '"+H.d(u.TU)+"'")}}y.aN(0,new D.Yu())
 this.Qi=y},
 Lw:function(){this.bN=this.ct(this,C.YS,this.bN,"vm")
-this.GR=this.ct(this,C.Tc,this.GR,"vm")
+this.GR=this.ct(this,C.KS,this.GR,"vm")
 this.uj.u(0,"vm",this)
 var z=P.EF(["id","vm","type","@VM"],null,null)
 this.eC(R.tB(z))},
@@ -18376,12 +18564,12 @@
 else{z=D.Nl(a,this.a.a)
 y=this.b.Rk
 if(y.YM>=4)H.vh(y.Pq())
-y.MW(z)}},"$1",null,2,0,null,205,"call"],
+y.MW(z)}},"$1",null,2,0,null,210,"call"],
 $isEH:true},
 MZ:{
 "^":"TpZ:12;a,b",
 $1:[function(a){if(!J.x(a).$iswv)return
-return this.a.Qi.t(0,this.b)},"$1",null,2,0,null,147,"call"],
+return this.a.Qi.t(0,this.b)},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 aEE:{
 "^":"TpZ:12;a,b",
@@ -18392,12 +18580,12 @@
 else return a.cv(z)},"$1",null,2,0,null,6,"call"],
 $isEH:true},
 oew:{
-"^":"TpZ:202;c,d",
+"^":"TpZ:207;c,d",
 $1:[function(a){var z,y
 z=this.c
 y=D.Nl(z,a)
 if(y.gjm())z.uj.to(0,this.d,new D.QZ(y))
-return y},"$1",null,2,0,null,201,"call"],
+return y},"$1",null,2,0,null,206,"call"],
 $isEH:true},
 QZ:{
 "^":"TpZ:76;e",
@@ -18410,7 +18598,7 @@
 y=z.hb(a)
 x=$.ax
 if(x!=null)x.ab(0,"Received response for "+H.d(this.b),y)
-return z.OJ(y)},"$1",null,2,0,null,150,"call"],
+return z.OJ(y)},"$1",null,2,0,null,155,"call"],
 $isEH:true},
 tm:{
 "^":"TpZ:12;c",
@@ -18465,7 +18653,7 @@
 if(!(w<v))break
 u=z.t(b,w)
 if(w>=x)return H.e(y,w)
-y[w]=J.xZ(y[w],u)?y[w]:u;++w}},"$1","gA5",2,0,206,207],
+y[w]=J.xZ(y[w],u)?y[w]:u;++w}},"$1","gA5",2,0,211,212],
 CJ:function(){var z,y,x
 for(z=this.XE,y=z.length,x=0;x<y;++x)z[x]=0},
 $isER:true},
@@ -18536,7 +18724,7 @@
 gGL:function(){return this.EY},
 gaj:function(){return this.eU},
 gn0:function(){return this.yP},
-YC:[function(a){return"/"+H.d(this.TU)+"/"+H.d(a)},"$1","gua",2,0,169,200],
+YC:[function(a){return"/"+H.d(this.TU)+"/"+H.d(a)},"$1","gua",2,0,172,205],
 N3:function(a){var z,y,x,w
 z=H.VM([],[D.kx])
 y=J.U6(a)
@@ -18558,7 +18746,7 @@
 z=[]
 for(y=J.mY(J.UQ(a,"members"));y.G();){x=y.gl()
 w=J.x(x)
-if(!!w.$isdy)z.push(w.xW(x))}return P.Ne(z,!1)},"$1","gLG",2,0,208,209],
+if(!!w.$isdy)z.push(w.xW(x))}return P.Ne(z,!1)},"$1","gLG",2,0,213,214],
 lKe:[function(a){var z,y,x,w
 z=this.AI
 z.V1(z)
@@ -18568,7 +18756,7 @@
 if(J.xC(x.gTE(),"Object")&&J.xC(x.geh(),!1)){w=this.Wm
 if(this.gnz(this)&&!J.xC(w,x)){w=new T.qI(this,C.jo,w,x)
 w.$builtinTypeInfo=[null]
-this.nq(this,w)}this.Wm=x}}return P.Ab(this.Wm,null)},"$1","gHB",2,0,210,211],
+this.nq(this,w)}this.Wm=x}}return P.Ab(this.Wm,null)},"$1","gHB",2,0,215,216],
 Qn:function(a){var z,y,x
 if(a==null)return
 z=J.UQ(a,"id")
@@ -18589,7 +18777,7 @@
 goc:function(a){return this.KT},
 soc:function(a,b){this.KT=F.Wi(this,C.YS,this.KT,b)},
 gTE:function(){return this.f5},
-sTE:function(a){this.f5=F.Wi(this,C.Tc,this.f5,a)},
+sTE:function(a){this.f5=F.Wi(this,C.KS,this.f5,a)},
 gIT:function(){return this.i9},
 gw2:function(){return this.cL},
 sw2:function(a){this.cL=F.Wi(this,C.tP,this.cL,a)},
@@ -18605,7 +18793,7 @@
 y=z.t(b,"name")
 this.KT=F.Wi(this,C.YS,this.KT,y)
 y=z.t(b,"name")
-this.f5=F.Wi(this,C.Tc,this.f5,y)
+this.f5=F.Wi(this,C.KS,this.f5,y)
 if(c)return
 this.qu=!0
 this.yP=F.Wi(this,C.DY,this.yP,!1)
@@ -18731,11 +18919,11 @@
 this.hz=z}return z},
 G5:function(a,b){return this.cv(J.WB(J.eS(a),"/setBreakpoint?line="+H.d(b))).ml(new D.ad(this,a,b))},
 Xu:function(a){return this.cv(H.d(J.eS(a))+"/clear").ml(new D.fw(this,a))},
-WJ:[function(a){return this.cv("debug/pause").ml(new D.G4(this))},"$0","gX0",0,0,203],
-QE:[function(a){return this.cv("debug/resume").ml(new D.LO(this))},"$0","gDQ",0,0,203],
-Lg:[function(a){return this.cv("debug/resume?step=into").ml(new D.qD(this))},"$0","gLc",0,0,203],
-Fc:[function(a){return this.cv("debug/resume?step=over").ml(new D.A6(this))},"$0","gqF",0,0,203],
-h9:[function(a){return this.cv("debug/resume?step=out").ml(new D.xK(this))},"$0","gZp",0,0,203],
+WJ:[function(a){return this.cv("debug/pause").ml(new D.G4(this))},"$0","gX0",0,0,208],
+QE:[function(a){return this.cv("debug/resume").ml(new D.LO(this))},"$0","gDQ",0,0,208],
+Lg:[function(a){return this.cv("debug/resume?step=into").ml(new D.qD(this))},"$0","gLc",0,0,208],
+Fc:[function(a){return this.cv("debug/resume?step=over").ml(new D.A6(this))},"$0","gqF",0,0,208],
+h9:[function(a){return this.cv("debug/resume?step=out").ml(new D.xK(this))},"$0","gZp",0,0,208],
 WO:function(a,b){return this.cv(a).ml(new D.oq(b))},
 VT:function(){return this.WO("metrics",this.pG).ml(new D.y1(this))},
 bu:[function(a){return"Isolate("+H.d(this.TU)+")"},"$0","gCR",0,0,73],
@@ -18752,18 +18940,18 @@
 a.Du=0
 a.fF=0
 a.mM=F.Wi(a,C.eF,a.mM,"")
-a.qH=F.Wi(a,C.uU,a.qH,"")
+a.rF=F.Wi(a,C.uU,a.rF,"")
 C.Nm.sB(a.VS,0)
 C.Nm.sB(a.hw,0)
 a.n3.V1(0)}},
 $isEH:true},
 KQ:{
-"^":"TpZ:202;a,b",
+"^":"TpZ:207;a,b",
 $1:[function(a){var z,y
 z=this.a
 y=D.Nl(z,a)
 if(y.gjm())z.uj.to(0,this.b,new D.Ea(y))
-return y},"$1",null,2,0,null,201,"call"],
+return y},"$1",null,2,0,null,206,"call"],
 $isEH:true},
 Ea:{
 "^":"TpZ:76;c",
@@ -18772,16 +18960,16 @@
 Qq:{
 "^":"TpZ:12;a",
 $1:[function(a){var z=J.U6(a)
-this.a.u(0,z.t(a,"name"),z.t(a,"time"))},"$1",null,2,0,null,212,"call"],
+this.a.u(0,z.t(a,"name"),z.t(a,"time"))},"$1",null,2,0,null,217,"call"],
 $isEH:true},
 O5:{
-"^":"TpZ:202;a",
+"^":"TpZ:207;a",
 $1:[function(a){var z,y
 z=Date.now()
 new P.iP(z,!1).EK()
 y=this.a.KJ
 y.Qv(z/1000,a)
-return y},"$1",null,2,0,null,163,"call"],
+return y},"$1",null,2,0,null,166,"call"],
 $isEH:true},
 Ye:{
 "^":"TpZ:12;a,b",
@@ -18789,7 +18977,7 @@
 $isEH:true},
 y4:{
 "^":"TpZ:12;a",
-$1:[function(a){this.a.eF(a)},"$1",null,2,0,null,213,"call"],
+$1:[function(a){this.a.eF(a)},"$1",null,2,0,null,218,"call"],
 $isEH:true},
 Cm:{
 "^":"TpZ:76;b",
@@ -18798,7 +18986,7 @@
 ad:{
 "^":"TpZ:12;a,b,c",
 $1:[function(a){if(!!J.x(a).$ispD)J.UQ(J.de(this.b),J.bI(this.c,1)).sj9(!1)
-return this.a.Xb()},"$1",null,2,0,null,147,"call"],
+return this.a.Xb()},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 fw:{
 "^":"TpZ:12;a,b",
@@ -18807,32 +18995,32 @@
 z=this.a
 y=z.Jr
 if(y!=null&&y.gQ1()!=null&&J.xC(J.UQ(z.Jr.gQ1(),"id"),J.UQ(this.b,"id")))return z.VD(0)
-else return z.Xb()},"$1",null,2,0,null,147,"call"],
+else return z.Xb()},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 G4:{
 "^":"TpZ:12;a",
 $1:[function(a){if(!!J.x(a).$ispD)N.QM("").YX(a.LD)
-return this.a.VD(0)},"$1",null,2,0,null,147,"call"],
+return this.a.VD(0)},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 LO:{
 "^":"TpZ:12;a",
 $1:[function(a){if(!!J.x(a).$ispD)N.QM("").YX(a.LD)
-return this.a.VD(0)},"$1",null,2,0,null,147,"call"],
+return this.a.VD(0)},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 qD:{
 "^":"TpZ:12;a",
 $1:[function(a){if(!!J.x(a).$ispD)N.QM("").YX(a.LD)
-return this.a.VD(0)},"$1",null,2,0,null,147,"call"],
+return this.a.VD(0)},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 A6:{
 "^":"TpZ:12;a",
 $1:[function(a){if(!!J.x(a).$ispD)N.QM("").YX(a.LD)
-return this.a.VD(0)},"$1",null,2,0,null,147,"call"],
+return this.a.VD(0)},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 xK:{
 "^":"TpZ:12;a",
 $1:[function(a){if(!!J.x(a).$ispD)N.QM("").YX(a.LD)
-return this.a.VD(0)},"$1",null,2,0,null,147,"call"],
+return this.a.VD(0)},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 oq:{
 "^":"TpZ:12;a",
@@ -18842,7 +19030,7 @@
 return}y=this.a
 y.V1(0)
 for(z=J.mY(z.t(a,"members"));z.G();){x=z.gl()
-y.u(0,J.eS(x),x)}return y},"$1",null,2,0,null,147,"call"],
+y.u(0,J.eS(x),x)}return y},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 y1:{
 "^":"TpZ:12;a",
@@ -18862,7 +19050,7 @@
 x=y.t(0,"name")
 this.bN=this.ct(0,C.YS,this.bN,x)
 y=y.NZ(0,"vmName")?y.t(0,"vmName"):this.bN
-this.GR=this.ct(0,C.Tc,this.GR,y)
+this.GR=this.ct(0,C.KS,this.GR,y)
 D.kT(z,this.x8)},
 FV:function(a,b){return this.RF.FV(0,b)},
 V1:function(a){return this.RF.V1(0)},
@@ -18883,7 +19071,7 @@
 gB:function(a){var z=this.RF.LL
 return z.gB(z)},
 HC:[function(a){var z=this.RF
-return z.HC(z)},"$0","gDx",0,0,125],
+return z.HC(z)},"$0","gDx",0,0,131],
 nq:function(a,b){var z=this.RF
 return z.nq(z,b)},
 ct:function(a,b,c,d){return F.Wi(this.RF,b,c,d)},
@@ -18925,7 +19113,7 @@
 z="DartError "+H.d(this.I0)
 z=this.ct(this,C.YS,this.bN,z)
 this.bN=z
-this.GR=this.ct(this,C.Tc,this.GR,z)},
+this.GR=this.ct(this,C.KS,this.GR,z)},
 bu:[function(a){return"DartError("+H.d(this.LD)+")"},"$0","gCR",0,0,73],
 $ispD:true},
 wVq:{
@@ -18945,7 +19133,7 @@
 z="ServiceError "+H.d(this.I0)
 z=this.ct(this,C.YS,this.bN,z)
 this.bN=z
-this.GR=this.ct(this,C.Tc,this.GR,z)},
+this.GR=this.ct(this,C.KS,this.GR,z)},
 bu:[function(a){return"ServiceError("+H.d(this.LD)+")"},"$0","gCR",0,0,73],
 $isN7:true},
 dZL:{
@@ -18967,7 +19155,7 @@
 z="ServiceException "+H.d(this.I0)
 z=this.ct(this,C.YS,this.bN,z)
 this.bN=z
-this.GR=this.ct(this,C.Tc,this.GR,z)},
+this.GR=this.ct(this,C.KS,this.GR,z)},
 $isIx:true},
 w8F:{
 "^":"af+Pi;",
@@ -18989,7 +19177,7 @@
 y="ServiceEvent "+H.d(y)
 y=this.ct(this,C.YS,this.bN,y)
 this.bN=y
-this.GR=this.ct(this,C.Tc,this.GR,y)
+this.GR=this.ct(this,C.KS,this.GR,y)
 if(z.t(b,"breakpoint")!=null){y=z.t(b,"breakpoint")
 this.HQ=F.Wi(this,C.hR,this.HQ,y)}if(z.t(b,"exception")!=null){y=z.t(b,"exception")
 this.jo=F.Wi(this,C.ne,this.jo,y)}if(z.t(b,"_data")!=null){z=z.t(b,"_data")
@@ -19021,7 +19209,7 @@
 this.bN=y
 if(J.FN(y)===!0)this.bN=this.ct(this,C.YS,this.bN,x)
 y=z.NZ(b,"vmName")===!0?z.t(b,"vmName"):this.bN
-this.GR=this.ct(this,C.Tc,this.GR,y)
+this.GR=this.ct(this,C.KS,this.GR,y)
 if(c)return
 this.qu=!0
 D.kT(b,J.aT(this.x8))
@@ -19108,7 +19296,7 @@
 y=z.t(b,"name")
 this.bN=this.ct(this,C.YS,this.bN,y)
 y=z.NZ(b,"vmName")===!0?z.t(b,"vmName"):this.bN
-this.GR=this.ct(this,C.Tc,this.GR,y)
+this.GR=this.ct(this,C.KS,this.GR,y)
 if(c)return
 this.qu=!0
 D.kT(b,J.aT(this.x8))
@@ -19170,57 +19358,105 @@
 "^":"ZzQ+Pi;",
 $isd3:true},
 uq:{
-"^":"Zqa;df,lA,MD,ni,bN:di@,F6,cM,oI,dG,Rf,z0,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
+"^":"Zqa;df,MD,lA,fQ,ni,Iv,bN:di@,cM,F6,oI,dG,Rf,z0,TG,tk,FA,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
 gUP:function(){return this.df},
 sUP:function(a){this.df=F.Wi(this,C.Wt,this.df,a)},
-gPE:function(){return this.lA},
 gyT:function(a){return this.MD},
+gPE:function(){return this.lA},
+gSS:function(){return this.fQ},
 gwz:function(){return this.ni},
 swz:function(a){this.ni=F.Wi(this,C.aw,this.ni,a)},
+gu5:function(){return this.Iv},
+su5:function(a){this.Iv=F.Wi(this,C.mM,this.Iv,a)},
 goc:function(a){return this.di},
 soc:function(a,b){this.di=F.Wi(this,C.YS,this.di,b)},
-gCY:function(){return this.F6},
-sCY:function(a){this.F6=F.Wi(this,C.hx,this.F6,a)},
 gB:function(a){return this.cM},
 sB:function(a,b){this.cM=F.Wi(this,C.Wn,this.cM,b)},
+gCY:function(){return this.F6},
+sCY:function(a){this.F6=F.Wi(this,C.hx,this.F6,a)},
 gtJ:function(){return this.oI},
 stJ:function(a){this.oI=F.Wi(this,C.fV,this.oI,a)},
 gbA:function(){return this.dG},
 gP9:function(a){return this.Rf},
 sP9:function(a,b){this.Rf=F.Wi(this,C.mw,this.Rf,b)},
+gCM:function(){return this.TG},
+sCM:function(a){this.TG=F.Wi(this,C.Tc,this.TG,a)},
+gnl:function(a){return this.tk},
+snl:function(a,b){this.tk=F.Wi(this,C.z6,this.tk,b)},
+gP:function(a){return this.FA},
+sP:function(a,b){this.FA=F.Wi(this,C.zd,this.FA,b)},
 gBF:function(){return this.ni!=null},
 R5:function(a,b,c){var z,y
 D.kT(b,J.aT(this.x8))
 z=J.U6(b)
 y=z.t(b,"class")
 this.df=F.Wi(this,C.Wt,this.df,y)
-y=z.t(b,"valueAsString")
-this.lA=F.Wi(this,C.Db,this.lA,y)
 y=z.t(b,"size")
 this.MD=F.Wi(this,C.da,this.MD,y)
+y=z.t(b,"valueAsString")
+this.lA=F.Wi(this,C.Db,this.lA,y)
+y=J.xC(z.t(b,"valueAsStringIsTruncated"),!0)
+this.fQ=F.Wi(this,C.aF,this.fQ,y)
 y=z.t(b,"closureFunc")
 this.ni=F.Wi(this,C.aw,this.ni,y)
+y=z.t(b,"closureCtxt")
+this.Iv=F.Wi(this,C.mM,this.Iv,y)
 y=z.t(b,"name")
 this.di=F.Wi(this,C.YS,this.di,y)
+y=z.t(b,"length")
+this.cM=F.Wi(this,C.Wn,this.cM,y)
 if(c)return
 y=z.t(b,"nativeFields")
 this.dG=F.Wi(this,C.uw,this.dG,y)
 y=z.t(b,"fields")
 this.oI=F.Wi(this,C.fV,this.oI,y)
-y=z.t(b,"length")
-this.cM=F.Wi(this,C.Wn,this.cM,y)
 y=z.t(b,"elements")
 this.Rf=F.Wi(this,C.mw,this.Rf,y)
 y=z.t(b,"type_class")
 this.F6=F.Wi(this,C.hx,this.F6,y)
-z=z.t(b,"user_name")
-this.z0=F.Wi(this,C.ct,this.z0,z)
+y=z.t(b,"user_name")
+this.z0=F.Wi(this,C.Gy,this.z0,y)
+y=z.t(b,"referent")
+this.TG=F.Wi(this,C.Tc,this.TG,y)
+y=z.t(b,"key")
+this.tk=F.Wi(this,C.z6,this.tk,y)
+z=z.t(b,"value")
+this.FA=F.Wi(this,C.zd,this.FA,z)
 this.qu=!0},
 bu:[function(a){var z=this.lA
 return"Instance("+H.d(z!=null?z:"a "+H.d(J.DA(this.df)))+")"},"$0","gCR",0,0,73]},
 Zqa:{
 "^":"af+Pi;",
 $isd3:true},
+lI:{
+"^":"D3i;df,MD,Jx,cM,A6,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
+gUP:function(){return this.df},
+sUP:function(a){this.df=F.Wi(this,C.Wt,this.df,a)},
+gyT:function(a){return this.MD},
+gqH:function(){return this.Jx},
+sqH:function(a){this.Jx=F.Wi(this,C.BV,this.Jx,a)},
+gB:function(a){return this.cM},
+sB:function(a,b){this.cM=F.Wi(this,C.Wn,this.cM,b)},
+gZ3:function(){return this.A6},
+R5:function(a,b,c){var z,y
+D.kT(b,J.aT(this.x8))
+z=J.U6(b)
+y=z.t(b,"size")
+this.MD=F.Wi(this,C.da,this.MD,y)
+y=z.t(b,"length")
+this.cM=F.Wi(this,C.Wn,this.cM,y)
+y=z.t(b,"parent")
+this.Jx=F.Wi(this,C.BV,this.Jx,y)
+if(c)return
+y=z.t(b,"class")
+this.df=F.Wi(this,C.Wt,this.df,y)
+z=z.t(b,"variables")
+this.A6=F.Wi(this,C.xw,this.A6,z)
+this.qu=!0},
+bu:[function(a){return"Context("+H.d(this.cM)+")"},"$0","gCR",0,0,73]},
+D3i:{
+"^":"af+Pi;",
+$isd3:true},
 ma:{
 "^":"a;Sf",
 bu:[function(a){return this.Sf},"$0","gCR",0,0,76],
@@ -19272,7 +19508,7 @@
 y=z.t(b,"name")
 this.bN=this.ct(this,C.YS,this.bN,y)
 y=z.NZ(b,"vmName")===!0?z.t(b,"vmName"):this.bN
-this.GR=this.ct(this,C.Tc,this.GR,y)
+this.GR=this.ct(this,C.KS,this.GR,y)
 D.kT(b,J.aT(this.x8))
 y=z.NZ(b,"owningClass")===!0?z.t(b,"owningClass"):null
 this.Pp=F.Wi(this,C.YV,this.Pp,y)
@@ -19350,8 +19586,8 @@
 y.$builtinTypeInfo=[H.u3(z,0)]
 for(;y.G();)switch(y.Ff){case"{":case"}":case"(":case")":case";":break
 default:return!1}return!0},y8:function(a){var z,y,x,w
-z=J.It(a,new H.VR("(\\s)+",H.v4("(\\s)+",!1,!0,!1),null,null))
-for(y=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);y.G();){x=J.It(y.Ff,new H.VR("(\\b)",H.v4("(\\b)",!1,!0,!1),null,null))
+z=J.BQ(a,new H.VR("(\\s)+",H.v4("(\\s)+",!1,!0,!1),null,null))
+for(y=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);y.G();){x=J.BQ(y.Ff,new H.VR("(\\b)",H.v4("(\\b)",!1,!0,!1),null,null))
 w=new H.a7(x,x.length,0,null)
 w.$builtinTypeInfo=[H.u3(x,0)]
 for(;w.G();)if(!D.Fu(w.Ff))return!1}return!0},NQ:function(a,b,c){var z=new D.c2(a,b,c,null,null,!0,null,null)
@@ -19384,7 +19620,7 @@
 this.yc=w
 this.bN=this.ct(this,C.YS,this.bN,w)
 w=this.zD
-this.GR=this.ct(this,C.Tc,this.GR,w)
+this.GR=this.ct(this,C.KS,this.GR,w)
 if(c)return
 this.Aj(z.t(b,"source"))
 this.YG(z.t(b,"tokenPosTable"))
@@ -19444,7 +19680,7 @@
 Aj:function(a){var z,y,x,w
 this.qu=!1
 if(a==null)return
-z=J.It(a,"\n")
+z=J.BQ(a,"\n")
 if(z.length===0)return
 this.qu=!0
 y=this.Gd
@@ -19489,7 +19725,7 @@
 gEB:function(){return this.dh},
 gUB:function(){return J.xC(this.Yu,0)},
 gX1:function(){return this.uH.XG.length>0},
-dV:[function(){var z,y
+xtx:[function(){var z,y
 z=this.Yu
 y=J.x(z)
 if(y.n(z,0))return""
@@ -19499,14 +19735,14 @@
 z=a.gn3().LL.t(0,this.Yu)
 if(z==null)return""
 if(J.xC(z.gfF(),z.gDu()))return""
-return D.dJ(z.gfF(),a.glt())+" ("+H.d(z.gfF())+")"},"$1","gcQ",2,0,214,78],
+return D.Tn(z.gfF(),a.glt())+" ("+H.d(z.gfF())+")"},"$1","gcQ",2,0,219,78],
 P7:[function(a){var z
 if(a==null)return""
 z=a.gn3().LL.t(0,this.Yu)
 if(z==null)return""
-return D.dJ(z.gDu(),a.glt())+" ("+H.d(z.gDu())+")"},"$1","gGK",2,0,214,78],
+return D.Tn(z.gDu(),a.glt())+" ("+H.d(z.gDu())+")"},"$1","gGK",2,0,219,78],
 lF:function(){var z,y,x,w
-y=J.It(this.u0," ")
+y=J.BQ(this.u0," ")
 x=y.length
 if(x!==2)return 0
 if(1>=x)return H.e(y,1)
@@ -19528,7 +19764,7 @@
 this.nq(this,z)}this.dh=v
 return}}N.QM("").YX("Could not find instruction at "+x.WZ(y,16))},
 $isQ4:true,
-static:{dJ:function(a,b){return C.CD.Sy(100*J.L9(a,b),2)+"%"}}},
+static:{Tn:function(a,b){return C.CD.Sy(100*J.L9(a,b),2)+"%"}}},
 WAE:{
 "^":"a;uX",
 bu:[function(a){return this.uX},"$0","gCR",0,0,73],
@@ -19540,18 +19776,18 @@
 else if(z.n(a,"Tag"))return C.Z7
 N.QM("").j2("Unknown code kind "+H.d(a))
 throw H.b(P.a9())}}},
-Fc:{
+ta:{
 "^":"a;tT>,Av<",
-$isFc:true},
+$ista:true},
 D5:{
 "^":"a;tT>,Av<,ks>,Jv",
 $isD5:true},
 kx:{
-"^":"D3i;I0,xM,Du<,fF<,vg,uE,VS,hw,va<,n3<,mM,qH,fo,uG,ar,MH,oc*,TE@,Mk,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
+"^":"Pqb;I0,xM,Du<,fF<,vg,uE,VS,hw,va<,n3<,mM,rF,fo,uG,ar,MH,oc*,TE@,Mk,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
 gfY:function(a){return this.I0},
 glt:function(){return this.xM},
 gS7:function(){return this.mM},
-gan:function(){return this.qH},
+gan:function(){return this.rF},
 gL1:function(){return this.fo},
 sL1:function(a){this.fo=F.Wi(this,C.zO,this.fo,a)},
 gig:function(a){return this.uG},
@@ -19563,7 +19799,7 @@
 gM8:function(){return!0},
 P8:[function(a){var z,y
 this.ar=F.Wi(this,C.PX,this.ar,a)
-for(z=this.va,z=z.gA(z);z.G();)for(y=z.Ff.guH(),y=y.gA(y);y.G();)y.Ff.bR(a)},"$1","gH8",2,0,215,216],
+for(z=this.va,z=z.gA(z);z.G();)for(y=z.Ff.guH(),y=y.gA(y);y.G();)y.Ff.bR(a)},"$1","gH8",2,0,220,221],
 OF:function(){if(this.ar!=null)return
 if(!J.xC(this.I0,C.l8))return
 var z=this.uG
@@ -19581,7 +19817,7 @@
 w=H.BU(z.t(b,y),null,null)
 v=H.BU(z.t(b,y+1),null,null)
 if(w>>>0!==w||w>=c.length)return H.e(c,w)
-a.push(new D.Fc(c[w],v))
+a.push(new D.ta(c[w],v))
 y+=2}H.ig(a,new D.fx())},
 Il:function(a,b,c){var z,y
 this.xM=F.Wi(this,C.kr,this.xM,c)
@@ -19595,7 +19831,7 @@
 z=D.RA(this.fF,this.xM)+" ("+H.d(this.fF)+")"
 this.mM=F.Wi(this,C.eF,this.mM,z)
 z=D.RA(this.Du,this.xM)+" ("+H.d(this.Du)+")"
-this.qH=F.Wi(this,C.uU,this.qH,z)},
+this.rF=F.Wi(this,C.uU,this.rF,z)},
 R5:function(a,b,c){var z,y,x,w,v,u
 z=J.U6(b)
 this.oc=z.t(b,"name")
@@ -19613,7 +19849,7 @@
 y=x.god(y).Qn(z.t(b,"objectPool"))
 this.fo=F.Wi(this,C.zO,this.fo,y)
 v=z.t(b,"disassembly")
-if(v!=null)this.u5(v)
+if(v!=null)this.cr(v)
 u=z.t(b,"descriptors")
 if(u!=null)this.Xd(J.UQ(u,"members"))
 z=this.va.XG
@@ -19621,7 +19857,7 @@
 z=z.length!==0&&J.xC(this.I0,C.l8)
 this.Mk=F.Wi(this,C.zS,this.Mk,z)},
 gUa:function(){return this.Mk},
-u5:function(a){var z,y,x,w,v,u,t,s
+cr:function(a){var z,y,x,w,v,u,t,s
 z=this.va
 z.V1(z)
 y=J.U6(a)
@@ -19666,7 +19902,7 @@
 gqy:function(){return J.xC(this.I0,C.l8)},
 $iskx:true,
 static:{RA:function(a,b){return C.CD.Sy(100*J.L9(a,b),2)+"%"}}},
-D3i:{
+Pqb:{
 "^":"af+Pi;",
 $isd3:true},
 Em:{
@@ -19675,7 +19911,7 @@
 z=this.a
 y=J.zE(z.uG)
 if(y==null)return
-J.SK(y).ml(z.gH8())},"$1",null,2,0,null,217,"call"],
+J.SK(y).ml(z.gH8())},"$1",null,2,0,null,222,"call"],
 $isEH:true},
 fx:{
 "^":"TpZ:81;",
@@ -19692,7 +19928,7 @@
 N.QM("").j2("Unknown socket kind "+H.d(a))
 throw H.b(P.a9())}}},
 WP:{
-"^":"Pqb;ip@,jel,IHj,I0,vu,DB,XK,FH,L7,zw,tO,HO,u8,EC,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
+"^":"nla;ip@,jel,IHj,I0,vu,DB,XK,FH,L7,zw,tO,HO,u8,EC,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
 gjm:function(){return!0},
 gHY:function(){return J.xC(this.I0,C.FJ)},
 gfY:function(a){return this.I0},
@@ -19711,7 +19947,7 @@
 y=z.t(b,"name")
 this.bN=this.ct(this,C.YS,this.bN,y)
 y=z.t(b,"name")
-this.GR=this.ct(this,C.Tc,this.GR,y)
+this.GR=this.ct(this,C.KS,this.GR,y)
 y=D.AR(z.t(b,"kind"))
 this.I0=F.Wi(this,C.Lc,this.I0,y)
 if(c)return
@@ -19738,14 +19974,14 @@
 y=z.t(b,"fd")
 this.zw=F.Wi(this,C.R3,this.zw,y)
 this.ip=z.t(b,"owner")}},
-Pqb:{
+nla:{
 "^":"af+Pi;",
 $isd3:true},
 G9:{
 "^":"a;P>,Fl<",
 $isG9:true},
 YX:{
-"^":"nla;L5,mw@,Jk<,wE,Qd,FA,zn,LV,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
+"^":"Fba;L5,mw@,Jk<,wE,Qd,FA,zn,LV,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
 gjm:function(){return!0},
 gM8:function(){return!1},
 ghM:function(){return this.wE},
@@ -19771,7 +20007,7 @@
 y=z.t(b,"description")
 this.Qd=F.Wi(this,C.LS,this.Qd,y)
 y=z.t(b,"name")
-this.GR=this.ct(this,C.Tc,this.GR,y)
+this.GR=this.ct(this,C.KS,this.GR,y)
 y=z.t(b,"value")
 this.FA=F.Wi(this,C.zd,this.FA,y)
 y=z.t(b,"min")
@@ -19780,7 +20016,7 @@
 this.LV=F.Wi(this,C.qi,this.LV,z)},
 bu:[function(a){return"ServiceMetric("+H.d(this.TU)+")"},"$0","gCR",0,0,73],
 $isYX:true},
-nla:{
+Fba:{
 "^":"af+Pi;",
 $isd3:true},
 W1:{
@@ -19788,7 +20024,7 @@
 Gv:function(){var z=this.Cb
 if(z!=null)z.Gv()
 this.Cb=null},
-XM:[function(a,b){var z,y,x,w
+Y0:[function(a,b){var z,y,x,w
 for(z=this.Jb,z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();){y=J.LE(z.Ff)
 y.toString
 x=$.X3
@@ -19802,7 +20038,7 @@
 z=J.Vm(a)
 y=new P.iP(Date.now(),!1)
 y.EK()
-a.NT(new D.G9(z,y))},"$1",null,2,0,null,163,"call"],
+a.NT(new D.G9(z,y))},"$1",null,2,0,null,166,"call"],
 $isEH:true},
 Qf:{
 "^":"TpZ:81;a,b",
@@ -19881,7 +20117,7 @@
 return}y=v.gqT().MM
 if(y.YM!==0)H.vh(P.w("Future already completed"))
 y.Xf(w)},"$1","gM3",2,0,19],
-ck:function(a){a.aN(0,new L.dV(this))
+ck:function(a){a.aN(0,new L.aZ(this))
 a.V1(0)},
 M0:function(){var z=this.Td
 if(z.X5>0){N.QM("").To("Cancelling all pending requests.")
@@ -19898,9 +20134,9 @@
 if(!J.Vr(z.gjO(b),"/profile/tag"))N.QM("").To("GET "+H.d(z.gjO(b))+" from "+H.d(this.N.gw8()))
 this.Td.u(0,a,b)
 y=this.N.gA9()===!0?C.xr.KP(P.EF(["id",H.BU(a,null,null),"method","Dart.observatoryQuery","params",P.EF(["id",a,"query",z.gjO(b)],null,null)],null,null)):C.xr.KP(P.EF(["seq",a,"request",z.gjO(b)],null,null))
-this.Ra.bs.send(y)},"$2","ge8",4,0,218]},
+this.Ra.bs.send(y)},"$2","ge8",4,0,223]},
 jF:{
-"^":"TpZ:219;a",
+"^":"TpZ:224;a",
 $1:[function(a){var z,y,x,w,v,u,t
 z=J.RE(a)
 y=z.mt(a,0,C.it)
@@ -19909,7 +20145,7 @@
 v=z.gVl(a)
 if(typeof v!=="number")return v.g()
 w.toString
-u=x.Ur.Sw(H.GG(w,v+8,y))
+u=x.Ur.Sw(H.z4(w,v+8,y))
 t=C.jn.g(8,y)
 v=z.gbg(a)
 w=z.gVl(a)
@@ -19918,8 +20154,8 @@
 if(typeof z!=="number")return z.W()
 x.hQ(u,J.cm(v,w+t,z-t))},"$1",null,2,0,null,15,"call"],
 $isEH:true},
-dV:{
-"^":"TpZ:220;a",
+aZ:{
+"^":"TpZ:225;a",
 $2:function(a,b){var z,y
 z=b.gqT()
 y=C.xr.KP(P.EF(["type","ServiceException","id","","kind","NetworkException","message","WebSocket disconnected"],null,null))
@@ -19929,7 +20165,7 @@
 $isEH:true}}],["","",,R,{
 "^":"",
 zM:{
-"^":"V53;S4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V56;S4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gkc:function(a){return a.S4},
 skc:function(a,b){a.S4=this.ct(a,C.yh,a.S4,b)},
 static:{qa:function(a){var z,y,x,w
@@ -19948,12 +20184,12 @@
 C.U0.LX(a)
 C.U0.XI(a)
 return a}}},
-V53:{
+V56:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,D,{
 "^":"",
 Rk:{
-"^":"V54;Xc,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V57;Xc,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gja:function(a){return a.Xc},
 sja:function(a,b){a.Xc=this.ct(a,C.ne,a.Xc,b)},
 static:{bZp:function(a){var z,y,x,w
@@ -19972,7 +20208,7 @@
 C.Vd.LX(a)
 C.Vd.XI(a)
 return a}}},
-V54:{
+V57:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,U,{
 "^":"",
@@ -19981,19 +20217,19 @@
 Tc:function(a,b,c,d,e){var z=W.P0(a,null)
 this.bs=z
 z=H.VM(new W.RO(z,C.d6.fA,!1),[null])
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(new U.lo(e)),z.el),[H.u3(z,0)]).DN()
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(new U.lo(e)),z.el),[H.u3(z,0)]).DN()
 z=this.bs
 z.toString
 z=H.VM(new W.RO(z,C.MD.fA,!1),[null])
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(new U.j3(d)),z.el),[H.u3(z,0)]).DN()
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(new U.j3(d)),z.el),[H.u3(z,0)]).DN()
 z=this.bs
 z.toString
 z=H.VM(new W.RO(z,C.JL.fA,!1),[null])
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(new U.Fz(b)),z.el),[H.u3(z,0)]).DN()
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(new U.Fz(b)),z.el),[H.u3(z,0)]).DN()
 z=this.bs
 z.toString
 z=H.VM(new W.RO(z,C.ph.fA,!1),[null])
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(new U.oy(c)),z.el),[H.u3(z,0)]).DN()},
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(new U.oy(c)),z.el),[H.u3(z,0)]).DN()},
 wR:function(a,b){this.bs.send(b)},
 xO:function(a){this.bs.close()},
 OI:function(a){var z,y
@@ -20003,18 +20239,18 @@
 return y.gqG(y).ml(new U.OW(z))}},
 lo:{
 "^":"TpZ:12;a",
-$1:[function(a){return this.a.$0()},"$1",null,2,0,null,221,"call"],
+$1:[function(a){return this.a.$0()},"$1",null,2,0,null,226,"call"],
 $isEH:true},
 j3:{
 "^":"TpZ:12;b",
-$1:[function(a){return this.b.$0()},"$1",null,2,0,null,222,"call"],
+$1:[function(a){return this.b.$0()},"$1",null,2,0,null,227,"call"],
 $isEH:true},
 Fz:{
 "^":"TpZ:12;c",
-$1:[function(a){return this.c.$0()},"$1",null,2,0,null,222,"call"],
+$1:[function(a){return this.c.$0()},"$1",null,2,0,null,227,"call"],
 $isEH:true},
 oy:{
-"^":"TpZ:223;d",
+"^":"TpZ:228;d",
 $1:[function(a){return this.d.$1(J.Qd(a))},"$1",null,2,0,null,87,"call"],
 $isEH:true},
 OW:{
@@ -20038,7 +20274,7 @@
 z=this.S3
 v=z.t(0,y)
 z.Rz(0,y)
-J.KD(v,w)},"$1","gDi",2,0,19,224],
+J.KD(v,w)},"$1","gDi",2,0,19,229],
 z6:function(a,b){var z,y,x
 z=""+this.yb
 y=P.Fl(null,null)
@@ -20050,19 +20286,19 @@
 J.tT(W.Pv(window.parent),C.xr.KP(y),"*")
 return x.MM},
 ZH:function(){var z=H.VM(new W.RO(window,C.ph.fA,!1),[null])
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(this.gDi()),z.el),[H.u3(z,0)]).DN()
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(this.gDi()),z.el),[H.u3(z,0)]).DN()
 z=this.eG.MM
 if(z.YM!==0)H.vh(P.w("Future already completed"))
 z.Xf(this)}}}],["","",,U,{
 "^":"",
 Ti:{
-"^":"V55;Ll,Sa,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V58;Ll,Sa,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gWA:function(a){return a.Ll},
 sWA:function(a,b){a.Ll=this.ct(a,C.td,a.Ll,b)},
 gl6:function(a){return a.Sa},
 sl6:function(a,b){a.Sa=this.ct(a,C.Zg,a.Sa,b)},
 bc:function(a){var z
-switch(a.Ll.gdr()){case"AllocationProfile":z=W.r3("heap-profile",null)
+switch(J.zH(a.Ll)){case"AllocationProfile":z=W.r3("heap-profile",null)
 J.CJ(z,a.Ll)
 return z
 case"BreakpointList":z=W.r3("breakpoint-list",null)
@@ -20074,6 +20310,9 @@
 case"Code":z=W.r3("code-view",null)
 J.T5(z,a.Ll)
 return z
+case"Context":z=W.r3("context-view",null)
+J.Hf(z,a.Ll)
+return z
 case"Error":z=W.r3("error-view",null)
 J.Qr(z,a.Ll)
 return z
@@ -20089,9 +20328,6 @@
 case"HeapMap":z=W.r3("heap-map",null)
 J.Nf(z,a.Ll)
 return z
-case"LibraryPrefix":case"TypeRef":case"TypeParameter":case"BoundedType":case"Int32x4":case"Float32x4":case"Float64x4":case"TypedData":case"ExternalTypedData":case"Capability":case"ReceivePort":case"SendPort":case"Stacktrace":case"JSRegExp":case"WeakProperty":case"MirrorReference":case"UserTag":case"Type":case"Array":case"Bool":case"Closure":case"Double":case"GrowableObjectArray":case"Instance":case"Smi":case"Mint":case"Null":case"Bigint":case"String":z=W.r3("instance-view",null)
-J.Qy(z,a.Ll)
-return z
 case"IO":z=W.r3("io-view",null)
 J.mU(z,a.Ll)
 return z
@@ -20152,9 +20388,11 @@
 case"VM":z=W.r3("vm-view",null)
 J.NH(z,a.Ll)
 return z
-default:z=W.r3("json-view",null)
+default:if(a.Ll.gNs()||a.Ll.gl5()){z=W.r3("instance-view",null)
+J.Qy(z,a.Ll)
+return z}else{z=W.r3("json-view",null)
 J.wD(z,a.Ll)
-return z}},
+return z}}},
 xJ:[function(a,b){var z,y,x
 this.D4(a)
 z=a.Ll
@@ -20181,11 +20419,11 @@
 C.Uv.LX(a)
 C.Uv.XI(a)
 return a}}},
-V55:{
+V58:{
 "^":"uL+Pi;",
 $isd3:true},
 Um:{
-"^":"V56;dL,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V59;dL,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gBN:function(a){return a.dL},
 sBN:function(a,b){a.dL=this.ct(a,C.nE,a.dL,b)},
 static:{T21:function(a){var z,y,x,w
@@ -20204,21 +20442,21 @@
 C.Uav.LX(a)
 C.Uav.XI(a)
 return a}}},
-V56:{
+V59:{
 "^":"uL+Pi;",
 $isd3:true},
 VZ:{
-"^":"V57;GW,C7,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V60;GW,C7,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gIr:function(a){return a.GW},
 ez:function(a,b){return this.gIr(a).$1(b)},
 sIr:function(a,b){a.GW=this.ct(a,C.SR,a.GW,b)},
 git:function(a){return a.C7},
 sit:function(a,b){a.C7=this.ct(a,C.B0,a.C7,b)},
-hF:[function(a,b){return!!J.x(b).$isT8},"$1","gEE",2,0,93,163],
-qc:[function(a,b){return!!J.x(b).$isWO},"$1","gK4",2,0,93,163],
+hF:[function(a,b){return!!J.x(b).$isT8},"$1","gEE",2,0,93,166],
+Cpp:[function(a,b){return!!J.x(b).$isWO},"$1","gK4",2,0,93,166],
 Gn:[function(a){return this.gus(a)},"$0","gyX",0,0,76],
 vQ:[function(a,b,c){a.C7=this.ct(a,C.B0,a.C7,b)
-c.$0()},"$2","gus",4,0,161,225,102],
+c.$0()},"$2","gus",4,0,230,231,102],
 static:{Wzx:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -20233,23 +20471,23 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.um.LX(a)
-C.um.XI(a)
+C.OX.LX(a)
+C.OX.XI(a)
 return a}}},
-V57:{
+V60:{
 "^":"uL+Pi;",
 $isd3:true},
 WG:{
-"^":"V58;Jg,C7,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V61;Jg,C7,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gjx:function(a){return a.Jg},
 sjx:function(a,b){a.Jg=this.ct(a,C.vp,a.Jg,b)},
 git:function(a){return a.C7},
 sit:function(a,b){a.C7=this.ct(a,C.B0,a.C7,b)},
-hF:[function(a,b){return!!J.x(b).$isT8},"$1","gEE",2,0,93,163],
-qc:[function(a,b){return!!J.x(b).$isWO},"$1","gK4",2,0,93,163],
+hF:[function(a,b){return!!J.x(b).$isT8},"$1","gEE",2,0,93,166],
+Cpp:[function(a,b){return!!J.x(b).$isWO},"$1","gK4",2,0,93,166],
 Gn:[function(a){return this.gus(a)},"$0","gyX",0,0,76],
 vQ:[function(a,b,c){a.C7=this.ct(a,C.B0,a.C7,b)
-c.$0()},"$2","gus",4,0,161,225,102],
+c.$0()},"$2","gus",4,0,230,231,102],
 static:{z0:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -20267,7 +20505,7 @@
 C.DX.LX(a)
 C.DX.XI(a)
 return a}}},
-V58:{
+V61:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,Q,{
 "^":"",
@@ -20280,16 +20518,18 @@
 Qj:[function(a,b){this.ct(a,C.Fh,"",this.gO3(a))
 this.ct(a,C.YS,[],this.goc(a))
 this.ct(a,C.pu,0,1)
-this.ct(a,C.k6,"",this.gXt(a))},"$1","gLe",2,0,19,59],
-gO3:function(a){var z
-if(this.gnv(a)==null)return"NULL REF"
-z=J.Ds(this.gnv(a))
+this.ct(a,C.k6,"",this.gJp(a))},"$1","gLe",2,0,19,59],
+gO3:function(a){var z=a.tY
+if(z==null)return"NULL REF"
+z=J.Ds(z)
 this.gi6(a).Z6
 return"#"+H.d(z)},
-gXt:function(a){if(this.gnv(a)==null)return"NULL REF"
-return this.gnv(a).gTE()},
-goc:function(a){if(this.gnv(a)==null)return"NULL REF"
-return J.DA(this.gnv(a))},
+gJp:function(a){var z=a.tY
+if(z==null)return"NULL REF"
+return z.gTE()},
+goc:function(a){var z=a.tY
+if(z==null)return"NULL REF"
+return J.DA(z)},
 gWw:function(a){return J.FN(this.goc(a))},
 static:{lKH:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
@@ -20312,16 +20552,19 @@
 "^":"uL+Pi;",
 $isd3:true},
 f7:{
-"^":"V59;tY,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V62;tY,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gnv:function(a){return a.tY},
 snv:function(a,b){a.tY=this.ct(a,C.kY,a.tY,b)},
 pY:function(a){var z
-switch(a.tY.gdr()){case"Class":z=W.r3("class-ref",null)
+switch(J.zH(a.tY)){case"Class":z=W.r3("class-ref",null)
 J.PP(z,a.tY)
 return z
 case"Code":z=W.r3("code-ref",null)
 J.PP(z,a.tY)
 return z
+case"Context":z=W.r3("context-ref",null)
+J.PP(z,a.tY)
+return z
 case"Error":z=W.r3("error-ref",null)
 J.PP(z,a.tY)
 return z
@@ -20334,12 +20577,11 @@
 case"Library":z=W.r3("library-ref",null)
 J.PP(z,a.tY)
 return z
-case"Array":case"Bigint":case"Bool":case"Closure":case"Double":case"GrowableObjectArray":case"Instance":case"Mint":case"Null":case"Sentinel":case"Smi":case"String":case"Type":z=W.r3("instance-ref",null)
+default:if(a.tY.gNs()||a.tY.gl5()){z=W.r3("instance-ref",null)
 J.PP(z,a.tY)
-return z
-default:z=W.r3("span",null)
+return z}else{z=W.r3("span",null)
 J.t3(z,"<<Unknown service ref: "+H.d(a.tY)+">>")
-return z}},
+return z}}},
 Qj:[function(a,b){var z,y,x
 this.D4(a)
 z=a.tY
@@ -20365,7 +20607,7 @@
 C.J9.LX(a)
 C.J9.XI(a)
 return a}}},
-V59:{
+V62:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,Q,{
 "^":"",
@@ -20377,8 +20619,8 @@
 sEu:function(a,b){a.IK=this.ct(a,C.lH,a.IK,b)},
 gRY:function(a){return a.bP},
 sRY:function(a,b){a.bP=this.ct(a,C.zU,a.bP,b)},
-oew:[function(a,b,c,d){var z=J.K0((a.shadowRoot||a.webkitShadowRoot).querySelector("#slide-switch"))
-a.kF=this.ct(a,C.bk,a.kF,z)},"$3","gQU",6,0,115,2,226,107],
+RC:[function(a,b,c,d){var z=J.K0((a.shadowRoot||a.webkitShadowRoot).querySelector("#slide-switch"))
+a.kF=this.ct(a,C.bk,a.kF,z)},"$3","gQU",6,0,116,2,232,107],
 static:{AlS:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -20468,7 +20710,7 @@
 z=H.KT(z,[z,z,z]).Zg(a)
 if(z)return 3
 return 4},
-aW:function(a){var z,y
+Zpg:function(a){var z,y
 z=H.G3()
 y=H.KT(z,[z,z,z]).Zg(a)
 if(y)return 3
@@ -20528,84 +20770,84 @@
 $0:function(){return P.Fl(null,null)},
 $isEH:true},
 fH:{
-"^":"a;JE",
-Gp:function(a,b){var z=this.JE.II.t(0,b)
-if(z==null)throw H.b(O.lA("getter \""+H.d(b)+"\" in "+H.d(a)))
+"^":"a;xV",
+Gp:function(a,b){var z=this.xV.II.t(0,b)
+if(z==null)throw H.b(O.Fm("getter \""+H.d(b)+"\" in "+H.d(a)))
 return z.$1(a)},
-Cq:function(a,b,c){var z=this.JE.F8.t(0,b)
-if(z==null)throw H.b(O.lA("setter \""+H.d(b)+"\" in "+H.d(a)))
+Cq:function(a,b,c){var z=this.xV.F8.t(0,b)
+if(z==null)throw H.b(O.Fm("setter \""+H.d(b)+"\" in "+H.d(a)))
 z.$2(a,c)},
 Ck:function(a,b,c,d,e){var z,y,x,w,v,u,t,s
 z=null
-x=this.JE
+x=this.xV
 if(!!J.x(a).$isLz){w=x.F3.t(0,a)
 z=w==null?null:J.UQ(w,b)}else{v=x.II.t(0,b)
-z=v==null?null:v.$1(a)}if(z==null)throw H.b(O.lA("method \""+H.d(b)+"\" in "+H.d(a)))
+z=v==null?null:v.$1(a)}if(z==null)throw H.b(O.Fm("method \""+H.d(b)+"\" in "+H.d(a)))
 y=null
 if(d){u=X.na(z)
 if(u>3){y="we tried to adjust the arguments for calling \""+H.d(b)+"\", but we couldn't determine the exact number of arguments it expects (it is more than 3)."
-c=X.Na(c,u,P.y(u,J.q8(c)))}else{t=X.aW(z)
+c=X.Na(c,u,P.y(u,J.q8(c)))}else{t=X.Zpg(z)
 x=t>=0?t:J.q8(c)
 c=X.Na(c,u,x)}}try{x=H.eC(z,c,P.Te(null))
 return x}catch(s){if(!!J.x(H.Ru(s)).$isJS){if(y!=null)P.FL(y)
 throw s}else throw s}}},
 bY:{
-"^":"a;JE",
+"^":"a;xV",
 xs:function(a,b){var z,y,x
 if(J.xC(a,b)||J.xC(b,C.AP))return!0
-for(z=this.JE,y=z.ZG;!J.xC(a,C.AP);a=x){x=y.t(0,a)
+for(z=this.xV,y=z.ZG;!J.xC(a,C.AP);a=x){x=y.t(0,a)
 if(J.xC(x,b))return!0
 if(x==null){if(!z.nX)return!1
-throw H.b(O.lA("superclass of \""+H.d(a)+"\" ("+H.d(x)+")"))}}return!1},
+throw H.b(O.Fm("superclass of \""+H.d(a)+"\" ("+H.d(x)+")"))}}return!1},
 UK:function(a,b){var z=this.NW(a,b)
 return z!=null&&z.gUA()&&z.gFo()!==!0},
 n6:function(a,b){var z,y,x
-z=this.JE
+z=this.xV
 y=z.of.t(0,a)
 if(y==null){if(!z.nX)return!1
-throw H.b(O.lA("declarations for "+H.d(a)))}x=J.UQ(y,b)
+throw H.b(O.Fm("declarations for "+H.d(a)))}x=J.UQ(y,b)
 return x!=null&&x.gUA()&&x.gFo()===!0},
 CV:function(a,b){var z=this.NW(a,b)
-if(z==null){if(!this.JE.nX)return
-throw H.b(O.lA("declaration for "+H.d(a)+"."+H.d(b)))}return z},
+if(z==null){if(!this.xV.nX)return
+throw H.b(O.Fm("declaration for "+H.d(a)+"."+H.d(b)))}return z},
 Me:function(a,b,c){var z,y,x,w,v,u
 z=[]
-if(c.Mg){y=this.JE
+if(c.Mg){y=this.xV
 x=y.ZG.t(0,b)
-if(x==null){if(y.nX)throw H.b(O.lA("superclass of \""+H.d(b)+"\""))}else if(!J.xC(x,c.Yx))z=this.Me(0,x,c)}y=this.JE
+if(x==null){if(y.nX)throw H.b(O.Fm("superclass of \""+H.d(b)+"\""))}else if(!J.xC(x,c.Yx))z=this.Me(0,x,c)}y=this.xV
 w=y.of.t(0,b)
 if(w==null){if(!y.nX)return z
-throw H.b(O.lA("declarations for "+H.d(b)))}for(y=J.mY(J.hI(w));y.G();){v=y.gl()
+throw H.b(O.Fm("declarations for "+H.d(b)))}for(y=J.mY(J.hI(w));y.G();){v=y.gl()
 if(!c.kl&&v.gZI())continue
 if(!c.IW&&v.gRS())continue
-if(c.ER&&J.EMK(v)===!0)continue
+if(c.ER&&J.cL(v)===!0)continue
 if(!c.Ja&&v.gUA())continue
 if(c.rM!=null&&c.xZ(0,J.DA(v))!==!0)continue
 u=c.BY
 if(u!=null&&!X.ZO(v.gDv(),u))continue
 z.push(v)}return z},
 NW:function(a,b){var z,y,x,w,v,u
-for(z=this.JE,y=z.ZG,x=z.of;!J.xC(a,C.AP);a=u){w=x.t(0,a)
+for(z=this.xV,y=z.ZG,x=z.of;!J.xC(a,C.AP);a=u){w=x.t(0,a)
 if(w!=null){v=J.UQ(w,b)
 if(v!=null)return v}u=y.t(0,a)
 if(u==null){if(!z.nX)return
-throw H.b(O.lA("superclass of \""+H.d(a)+"\""))}}return}},
+throw H.b(O.Fm("superclass of \""+H.d(a)+"\""))}}return}},
 ut:{
-"^":"a;JE"},
+"^":"a;xV"},
 tk:{
 "^":"a;GB<",
 bu:[function(a){return"Missing "+this.GB+". Code generation for the smoke package seems incomplete."},"$0","gCR",0,0,73],
-static:{lA:function(a){return new O.tk(a)}}}}],["","",,K,{
+static:{Fm:function(a){return new O.tk(a)}}}}],["","",,K,{
 "^":"",
 nm:{
-"^":"V60;xP,rs,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V63;xP,rs,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gM6:function(a){return a.xP},
 sM6:function(a,b){a.xP=this.ct(a,C.rE,a.xP,b)},
 git:function(a){return a.rs},
 sit:function(a,b){a.rs=this.ct(a,C.B0,a.rs,b)},
 Gn:[function(a){return this.gus(a)},"$0","gyX",0,0,76],
 vQ:[function(a,b,c){a.rs=this.ct(a,C.B0,a.rs,b)
-c.$0()},"$2","gus",4,0,161,225,102],
+c.$0()},"$2","gus",4,0,230,231,102],
 static:{ant:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -20623,12 +20865,12 @@
 C.dX.LX(a)
 C.dX.XI(a)
 return a}}},
-V60:{
+V63:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,X,{
 "^":"",
 Vu:{
-"^":"V61;Jl,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V64;Jl,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gtN:function(a){return a.Jl},
 stN:function(a,b){a.Jl=this.ct(a,C.kw,a.Jl,b)},
 pA:[function(a,b){J.LE(a.Jl).wM(b)},"$1","gvC",2,0,19,102],
@@ -20648,7 +20890,7 @@
 C.bg3.LX(a)
 C.bg3.XI(a)
 return a}}},
-V61:{
+V64:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,M,{
 "^":"",
@@ -20679,12 +20921,12 @@
 x=new M.aY(z)
 return P.jT(P.EF(["open",x.$1(new M.SL(a)),"close",y.$1(new M.no(a)),"discardChanges",y.$1(new M.uD(a)),"setValue",x.$1(new M.Wb(a)),"deliver",y.$1(new M.SLX(a)),"__dartBindable",a],null,null))},
 tA:function(a){var z
-for(;z=J.cP(a),z!=null;a=z);return a},
+for(;z=J.ra5(a),z!=null;a=z);return a},
 cS:function(a,b){var z,y,x,w,v,u
 if(b==null||b==="")return
 z="#"+H.d(b)
 for(;!0;){a=M.tA(a)
-y=$.Tn()
+y=$.nR()
 y.toString
 x=H.vA(a,"expando$values")
 w=x==null?null:H.vA(x,y.V2())
@@ -20693,7 +20935,7 @@
 else{u=J.x(a)
 v=!!u.$isYN||!!u.$isI0||!!u.$ishy?u.Kb(a,b):null}if(v!=null)return v
 if(y)return
-a=w.gfQ()
+a=w.gXD()
 if(a==null)return}},
 nk:function(a,b,c){if(c==null)return
 return new M.iT(a,b,c)},
@@ -20800,7 +21042,7 @@
 else z=!0
 else z=!1
 return z},
-VE:{
+vE:{
 "^":"a;oe",
 op:function(a,b,c){return},
 static:{"^":"ac"}},
@@ -20845,7 +21087,7 @@
 y=this.dn
 x=M.xa(J.UQ(y,M.aR(z,b)))
 y.Ji(b)
-return x},"$1","gUS",2,0,227,58],
+return x},"$1","gUS",2,0,233,58],
 V1:function(a){J.Me(this.gvc(this),this.gUS(this))},
 $asilb:function(){return[P.qU,A.Ap]},
 $asT8:function(){return[P.qU,A.Ap]}},
@@ -20875,7 +21117,7 @@
 $isEH:true},
 Au:{
 "^":"TpZ:12;d",
-$1:[function(a){return this.d.PO([a])},"$1",null,2,0,null,175,"call"],
+$1:[function(a){return this.d.PO([a])},"$1",null,2,0,null,180,"call"],
 $isEH:true},
 no:{
 "^":"TpZ:76;e",
@@ -20887,8 +21129,8 @@
 $isEH:true},
 Wb:{
 "^":"TpZ:12;UI",
-$1:[function(a){J.ta(this.UI,a)
-return a},"$1",null,2,0,null,175,"call"],
+$1:[function(a){J.Fc(this.UI,a)
+return a},"$1",null,2,0,null,180,"call"],
 $isEH:true},
 SLX:{
 "^":"TpZ:76;bK",
@@ -20901,7 +21143,7 @@
 gKB:function(){return this.KB},
 nR:function(a,b,c,d){var z,y
 if(!J.xC(b,"ref"))return M.vy.prototype.nR.call(this,this,b,c,d)
-z=d?c:J.mu(c,new M.Aj(this))
+z=d?c:J.mu(c,new M.De(this))
 J.Vs(this.KB).dA.setAttribute("ref",z)
 this.NB()
 if(d)return
@@ -20941,8 +21183,8 @@
 w=t}s=J.O2(w)
 w=[]
 r=new M.Fi(w,null,null,null)
-q=$.Tn()
-r.fQ=this.KB
+q=$.nR()
+r.XD=this.KB
 r.cA=z
 q.u(0,s,r)
 p=new M.qU9(b,null,null)
@@ -20954,7 +21196,7 @@
 if(m)r.yi=k}p.tA=s.firstChild
 p.MC=s.lastChild
 r.cA=null
-r.fQ=null
+r.XD=null
 return s},
 gk8:function(a){return this.Qk},
 gA0:function(a){return this.Rc},
@@ -20975,7 +21217,8 @@
 if(z)return
 this.XA=null
 this.kr.Oo(null)
-this.kr.OP(null)},
+z=this.kr
+z.OP(z.Tf())},
 V1:function(a){var z,y
 this.Qk=null
 this.Rc=null
@@ -21071,11 +21314,11 @@
 if(J.lL(y).querySelector("base")==null)M.AL(y)}},AL:function(a){var z=a.createElement("base",null)
 J.dc(z,document.baseURI)
 J.lL(a).appendChild(z)}}},
-Aj:{
+De:{
 "^":"TpZ:12;a",
 $1:[function(a){var z=this.a
 J.Vs(z.KB).dA.setAttribute("ref",a)
-z.NB()},"$1",null,2,0,null,228,"call"],
+z.NB()},"$1",null,2,0,null,234,"call"],
 $isEH:true},
 CE:{
 "^":"TpZ:19;",
@@ -21083,21 +21326,21 @@
 $isEH:true},
 DOe:{
 "^":"TpZ:12;",
-$1:[function(a){return H.d(a)+"[template]"},"$1",null,2,0,null,135,"call"],
+$1:[function(a){return H.d(a)+"[template]"},"$1",null,2,0,null,141,"call"],
 $isEH:true},
 Ufa:{
 "^":"TpZ:81;",
 $2:[function(a,b){var z
-for(z=J.mY(a);z.G();)M.Xi(J.l2(z.gl())).NB()},"$2",null,4,0,null,178,13,"call"],
+for(z=J.mY(a);z.G();)M.Xi(J.l2(z.gl())).NB()},"$2",null,4,0,null,183,13,"call"],
 $isEH:true},
 Raa:{
 "^":"TpZ:76;",
 $0:function(){var z=document.createDocumentFragment()
-$.Tn().u(0,z,new M.Fi([],null,null,null))
+$.nR().u(0,z,new M.Fi([],null,null,null))
 return z},
 $isEH:true},
 Fi:{
-"^":"a;dn<,yi<,fQ<,cA<"},
+"^":"a;dn<,yi<,XD<,cA<"},
 iT:{
 "^":"TpZ:12;a,b,c",
 $1:function(a){return this.c.op(a,this.a,this.b)},
@@ -21119,7 +21362,7 @@
 z.push(y)}},
 $isEH:true},
 TGm:{
-"^":"Ap;yQ,tM,nH,dO,vx,Up,h6,BZ,Gi,vj,lH,AB,z1,iz,Mv",
+"^":"Ap;yQ,tM,nH,dO,vx,Up,h6,dz,Gi,vj,lH,AB,z1,iz,Mv",
 ln:function(a){return this.iz.$1(a)},
 TR:function(a,b){return H.vh(P.w("binding already opened"))},
 gP:function(a){return this.h6},
@@ -21131,32 +21374,44 @@
 y=J.x(z)
 if(!!y.$isAp){y.xO(z)
 this.h6=null}},
-FE:function(a,b){var z,y,x
+FE:function(a,b){var z,y,x,w,v
 this.la()
 z=this.yQ.KB
 y=a.Z0
 x=y!=null
-this.BZ=x
+this.dz=x
 this.Gi=a.vJ!=null
 if(x){this.vj=y.au
-y=M.jb("if",y,z,b)
-this.Up=y
-if(this.vj===!0){if(!(null!=y&&!1!==y)){this.OP(null)
-return}}else H.Go(y,"$isAp").TR(0,this.gVN())}if(this.Gi===!0){y=a.vJ
+w=M.jb("if",y,z,b)
+this.Up=w
+y=this.vj===!0
+if(y)x=!(null!=w&&!1!==w)
+else x=!1
+if(x){this.Oo(null)
+return}if(!y)w=H.Go(w,"$isAp").TR(0,this.ge7())}else w=!0
+if(this.Gi===!0){y=a.vJ
 this.lH=y.au
 y=M.jb("repeat",y,z,b)
-this.h6=y}else{y=a.lC
+this.h6=y
+v=y}else{y=a.lC
 this.lH=y.au
 y=M.jb("bind",y,z,b)
-this.h6=y}if(this.lH!==!0)J.mu(y,this.gVN())
-this.OP(null)},
-OP:[function(a){var z,y
-if(this.BZ===!0){z=this.Up
+this.h6=y
+v=y}if(this.lH!==!0)v=J.mu(v,this.gVN())
+if(!(null!=w&&!1!==w)){this.Oo(null)
+return}this.Ca(v)},
+Tf:function(){var z,y
+z=this.h6
+y=this.lH
+return!(null!=y&&y)?J.Vm(z):z},
+YSS:[function(a){if(!(null!=a&&!1!==a)){this.Oo(null)
+return}this.Ca(this.Tf())},"$1","ge7",2,0,19,235],
+OP:[function(a){var z
+if(this.dz===!0){z=this.Up
 if(this.vj!==!0){H.Go(z,"$isAp")
 z=z.gP(z)}if(!(null!=z&&!1!==z)){this.Oo([])
-return}}y=this.h6
-if(this.lH!==!0){H.Go(y,"$isAp")
-y=y.gP(y)}this.Oo(this.Gi!==!0?[y]:y)},"$1","gVN",2,0,19,13],
+return}}this.Ca(a)},"$1","gVN",2,0,19,20],
+Ca:function(a){this.Oo(this.Gi!==!0?[a]:a)},
 Oo:function(a){var z,y
 z=J.x(a)
 if(!z.$isWO)a=!!z.$isQV?z.br(a):[]
@@ -21170,7 +21425,7 @@
 this.LA(G.jj(y,0,J.q8(y),z,0,z.length))},
 Dk:function(a){var z,y,x,w
 if(J.xC(a,-1))return this.yQ.KB
-z=$.Tn()
+z=$.nR()
 y=this.tM
 if(a>>>0!==a||a>=y.length)return H.e(y,a)
 x=z.t(0,y[a]).gyi()
@@ -21182,7 +21437,7 @@
 C8:function(a){var z,y,x,w,v,u,t
 z=this.Dk(J.bI(a,1))
 y=this.Dk(a)
-J.cP(this.yQ.KB)
+J.ra5(this.yQ.KB)
 x=C.Nm.W4(this.tM,a)
 for(w=J.RE(x),v=J.RE(z);!J.xC(y,z);){u=v.guD(z)
 if(u==null?y==null:u===y)y=z
@@ -21193,7 +21448,7 @@
 if(this.vx||J.FN(a)===!0)return
 u=this.yQ
 t=u.KB
-if(J.cP(t)==null){this.xO(0)
+if(J.ra5(t)==null){this.xO(0)
 return}s=this.nH
 Q.Oi(s,this.dO,a)
 z=u.Rc
@@ -21224,14 +21479,14 @@
 l.Nk(k,v)
 x=$.zl()}l=x
 f=this.Dk(h-1)
-e=J.cP(u.KB)
+e=J.ra5(u.KB)
 C.Nm.xe(this.tM,h,l)
-e.insertBefore(l,J.p7(f))}}for(u=q.gUQ(q),u=H.VM(new H.MH(null,J.mY(u.Hb),u.Oh),[H.u3(u,0),H.u3(u,1)]);u.G();)this.vB(u.Ff)},"$1","gSp",2,0,229,230],
+e.insertBefore(l,J.p7(f))}}for(u=q.gUQ(q),u=H.VM(new H.MH(null,J.mY(u.Hb),u.Oh),[H.u3(u,0),H.u3(u,1)]);u.G();)this.vB(u.Ff)},"$1","gSp",2,0,236,237],
 vB:[function(a){var z,y
-z=$.Tn()
+z=$.nR()
 z.toString
 y=H.vA(a,"expando$values")
-for(z=J.mY((y==null?null:H.vA(y,z.V2())).gdn());z.G();)J.yd(z.gl())},"$1","gJO",2,0,231],
+for(z=J.mY((y==null?null:H.vA(y,z.V2())).gdn());z.G();)J.yd(z.gl())},"$1","gJO",2,0,238],
 ud:function(){var z=this.AB
 if(z==null)return
 z.Gv()
@@ -21247,44 +21502,44 @@
 this.vx=!0}}}],["","",,S,{
 "^":"",
 VH2:{
-"^":"a;jG,au<,Ke",
-gqz:function(){return this.jG.length===5},
+"^":"a;qN,au<,ll",
+gqz:function(){return this.qN.length===5},
 gaW:function(){var z,y
-z=this.jG
+z=this.qN
 y=z.length
 if(y===5){if(0>=y)return H.e(z,0)
 if(J.xC(z[0],"")){if(4>=z.length)return H.e(z,4)
 z=J.xC(z[4],"")}else z=!1}else z=!1
 return z},
-gPf:function(){return this.Ke},
+gPf:function(){return this.ll},
 qm:function(a){return this.gPf().$1(a)},
-gB:function(a){return C.jn.BU(this.jG.length,4)},
+gB:function(a){return C.jn.BU(this.qN.length,4)},
 AX:function(a){var z,y
-z=this.jG
+z=this.qN
 y=a*4+1
 if(y>=z.length)return H.e(z,y)
 return z[y]},
 Pn:function(a){var z,y
-z=this.jG
+z=this.qN
 y=a*4+2
 if(y>=z.length)return H.e(z,y)
 return z[y]},
 cf:function(a){var z,y
-z=this.jG
+z=this.qN
 y=a*4+3
 if(y>=z.length)return H.e(z,y)
 return z[y]},
 xTd:[function(a){var z,y,x,w
 if(a==null)a=""
-z=this.jG
+z=this.qN
 if(0>=z.length)return H.e(z,0)
 y=H.d(z[0])+H.d(a)
 x=z.length
 w=C.jn.BU(x,4)*4
 if(w>=x)return H.e(z,w)
-return y+H.d(z[w])},"$1","gSG",2,0,232,20],
+return y+H.d(z[w])},"$1","gSG",2,0,239,20],
 QY:[function(a){var z,y,x,w,v,u,t,s
-z=this.jG
+z=this.qN
 if(0>=z.length)return H.e(z,0)
 y=P.p9(z[0])
 x=C.jn.BU(z.length,4)
@@ -21293,9 +21548,9 @@
 t=v*4
 if(t>=z.length)return H.e(z,t)
 s=z[t]
-y.IN+=typeof s==="string"?s:H.d(s)}return y.IN},"$1","gYF",2,0,233,234],
-l3:function(a,b){this.Ke=this.jG.length===5?this.gSG():this.gYF()},
-static:{"^":"rz5,xN8,t3a,epG,oM,Ftg",j9:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
+y.IN+=typeof s==="string"?s:H.d(s)}return y.IN},"$1","gYF",2,0,240,241],
+l3:function(a,b){this.ll=this.qN.length===5?this.gSG():this.gYF()},
+static:{"^":"rz5,xN8,t3a,epG,UO,Ftg",j9:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
 if(a==null||a.length===0)return
 z=a.length
 for(y=b==null,x=J.U6(a),w=null,v=0,u=!0;v<z;){t=x.XU(a,"{{",v)
@@ -21349,7 +21604,7 @@
 ab:[function(a,b,c){var z=new Z.lX(J.Cl(J.vX(this.NP.giU(),1000000),$.Ji),b,null)
 z.Ir=Z.d8(c)
 J.bi(this.Rk,z)
-return z},function(a,b){return this.ab(a,b,null)},"ZF","$2$map","$1","gtN",2,3,235,22,236,201],
+return z},function(a,b){return this.ab(a,b,null)},"ZF","$2$map","$1","gtN",2,3,242,22,243,206],
 l8:function(){var z=new P.VV(null,null)
 H.Xe()
 $.Ji=$.xG
@@ -21358,12 +21613,12 @@
 this.RV=N.QM("").gSZ().yI(new Z.Ym(this))
 this.NP.CH(0)
 J.Z8(this.Rk)},
-static:{"^":"ax",NY:function(){var z=new Z.KZ(null,null,Q.pT(null,Z.lX),null,null,null)
+static:{"^":"ax",JQ:function(){var z=new Z.KZ(null,null,Q.pT(null,Z.lX),null,null,null)
 z.l8()
 return z}}},
 Ym:{
-"^":"TpZ:167;a",
-$1:[function(a){this.a.ZF(0,a.gOR().oc+": "+H.d(J.Oh(a)))},"$1",null,2,0,null,166,"call"],
+"^":"TpZ:170;a",
+$1:[function(a){this.a.ZF(0,a.gOR().oc+": "+H.d(J.Oh(a)))},"$1",null,2,0,null,169,"call"],
 $isEH:true}}],["","",,G,{
 "^":"",
 GMB:{
@@ -21376,19 +21631,19 @@
 gB:function(a){return this.fO},
 a0:function(a,b,c){var z,y,x
 z=this.D1
-if(z>this.f9.Bx.length)throw H.b(P.N(z))
+if(z>this.f9.vF.length)throw H.b(P.N(z))
 y=this.fO
 if(y!=null){if(typeof y!=="number")return y.C()
 x=y<0}else x=!1
 if(x)throw H.b(P.N(y))
 if(typeof y!=="number")return y.g()
 z=y+z
-if(z>this.f9.Bx.length)throw H.b(P.N(z))},
+if(z>this.f9.vF.length)throw H.b(P.N(z))},
 $asmW:function(){return[null]},
 $asQV:function(){return[null]}},
 vZG:{
 "^":"a;f9,D1,c0",
-gl:function(){return C.xB.j(this.f9.Bx,this.D1)},
+gl:function(){return C.xB.j(this.f9.vF,this.D1)},
 G:function(){return++this.D1<this.c0},
 eR:function(a,b){this.D1+=b}}}],["","",,Z,{
 "^":"",
@@ -21402,7 +21657,7 @@
 y=++z.D1
 x=z.c0
 if(y>=x)return!1
-w=z.f9.Bx
+w=z.f9.vF
 v=C.xB.j(w,y)
 if(v>=55296)y=v>57343&&v<=65535
 else y=!0
@@ -21414,7 +21669,7 @@
 return!0}}}],["","",,U,{
 "^":"",
 LQ:function(a,b,c,d){var z,y,x,w,v,u,t
-z=a.Bx.length-b
+z=a.vF.length-b
 new G.GMB(a,b,z).a0(a,b,c)
 z=b+z
 y=b-1
@@ -21431,7 +21686,7 @@
 return t}}}],["","",,V,{
 "^":"",
 Pa:{
-"^":"V62;GG,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V65;GG,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gN:function(a){return a.GG},
 sN:function(a,b){a.GG=this.ct(a,C.ft,a.GG,b)},
 ghS:function(a){var z=a.GG
@@ -21452,7 +21707,7 @@
 y=new U.KM(H.VM(new P.Zf(P.Dt(null)),[null]),H.VM(new P.Zf(P.Dt(null)),[null]),y,P.L5(null,null,null,P.qU,L.U2),P.L5(null,null,null,P.qU,L.U2),0,!1,new P.GY(!1),new U.hA(null),"unknown","unknown",0,!1,!1,"",null,P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.L5(null,null,null,P.qU,D.af),P.L5(null,null,null,P.qU,D.bv),null,null,null,null,null,null,!1,null,null,null,null,null)
 y.Lw()
 z.swv(0,y)}w=J.Vs(d).dA.getAttribute("href")
-$.Kh.Z6.bo(0,w)},"$3","gkD",6,0,168,87,106,181],
+$.Kh.Z6.bo(0,w)},"$3","gkD",6,0,171,87,106,186],
 Fh:[function(a,b,c,d){var z,y,x,w
 z=$.Kh.m2
 y=a.GG
@@ -21461,7 +21716,7 @@
 z.TV()
 z.TV()
 w=z.wo.IU+".history"
-$.Vy().setItem(w,C.xr.KP(x))},"$3","gFb",6,0,168,87,106,181],
+$.Vy().setItem(w,C.xr.KP(x))},"$3","gFb",6,0,171,87,106,186],
 static:{fXx:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -21478,11 +21733,11 @@
 C.J57.LX(a)
 C.J57.XI(a)
 return a}}},
-V62:{
+V65:{
 "^":"uL+Pi;",
 $isd3:true},
 D2:{
-"^":"V63;ot,YE,E6,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V66;ot,YE,E6,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gvm:function(a){return a.ot},
 svm:function(a,b){a.ot=this.ct(a,C.uX,a.ot,b)},
 gHL:function(a){return a.YE},
@@ -21500,13 +21755,13 @@
 x=new U.KM(H.VM(new P.Zf(P.Dt(null)),[null]),H.VM(new P.Zf(P.Dt(null)),[null]),d,P.L5(null,null,null,P.qU,L.U2),P.L5(null,null,null,P.qU,L.U2),0,!1,new P.GY(!1),new U.hA(null),"unknown","unknown",0,!1,!1,"",null,P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.L5(null,null,null,P.qU,D.af),P.L5(null,null,null,P.qU,D.bv),null,null,null,null,null,null,!1,null,null,null,null,null)
 x.Lw()
 y.swv(0,x)
-$.Kh.Z6.bo(0,"#/vm")},"$3","gMt",6,0,115,2,106,107],
-jLH:[function(a,b,c,d){J.fD(b)
-this.iW(a)},"$3","gzG",6,0,115,2,106,107],
+$.Kh.Z6.bo(0,"#/vm")},"$3","gMt",6,0,116,2,106,107],
+pe:[function(a,b,c,d){J.fD(b)
+this.iW(a)},"$3","gzG",6,0,116,2,106,107],
 iW:function(a){G.n8(a.YE).ml(new V.Vn(a)).OA(new V.oU(a))},
 Kq:function(a){var z=P.ii(0,0,0,0,0,1)
 a.tB=this.ct(a,C.O9,a.tB,z)},
-static:{NI:function(a){var z,y,x,w,v
+static:{Hr:function(a){var z,y,x,w,v
 z=Q.pT(null,L.Z5)
 y=P.L5(null,null,null,P.qU,W.I0)
 x=P.qU
@@ -21527,7 +21782,7 @@
 C.aXh.XI(a)
 C.aXh.Kq(a)
 return a}}},
-V63:{
+V66:{
 "^":"uL+Pi;",
 $isd3:true},
 Vn:{
@@ -21542,7 +21797,7 @@
 if(typeof w!=="number")return H.s(w)
 if(!(x<w))break
 c$0:{if(y.t(a,x).gw8()==null)break c$0
-J.bi(z.E6,y.t(a,x))}++x}},"$1",null,2,0,null,237,"call"],
+J.bi(z.E6,y.t(a,x))}++x}},"$1",null,2,0,null,244,"call"],
 $isEH:true},
 oU:{
 "^":"TpZ:12;b",
@@ -21570,7 +21825,7 @@
 return a}}}}],["","",,U,{
 "^":"",
 el:{
-"^":"V64;uB,lc,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V67;uB,lc,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gwv:function(a){return a.uB},
 swv:function(a,b){a.uB=this.ct(a,C.RJ,a.uB,b)},
 gkc:function(a){return a.lc},
@@ -21592,7 +21847,7 @@
 C.Hd.LX(a)
 C.Hd.XI(a)
 return a}}},
-V64:{
+V67:{
 "^":"uL+Pi;",
 $isd3:true}}],])
 I.$finishClasses($$,$,null)
@@ -21625,9 +21880,9 @@
 y.$isfRn=z
 y.$asfRn=[P.lf]
 y.$isa=z
-y=N.qV
+y=N.Ng
 y.$isfRn=z
-y.$asfRn=[N.qV]
+y.$asfRn=[N.Ng]
 y.$isa=z
 y=P.a6
 y.$isa6=z
@@ -21686,8 +21941,8 @@
 y=U.x9
 y.$isrx=z
 y.$isa=z
-y=U.EO
-y.$isEO=z
+y=U.WH
+y.$isWH=z
 y.$isrx=z
 y.$isa=z
 y=P.IN
@@ -21700,7 +21955,7 @@
 y=T.yj
 y.$isyj=z
 y.$isa=z
-y=W.tV
+y=W.Iv
 y.$ish4=z
 y.$isKV=z
 y.$isa=z
@@ -21713,7 +21968,7 @@
 y=D.bv
 y.$isaf=z
 y.$isa=z
-D.Fc.$isa=z
+D.ta.$isa=z
 D.ER.$isa=z
 y=D.vO
 y.$isvO=z
@@ -21846,6 +22101,10 @@
 y.$isNOT=z
 y.$isyX=z
 y.$isa=z
+y=D.uq
+y.$isuq=z
+y.$isaf=z
+y.$isa=z
 y=P.e4y
 y.$ise4y=z
 y.$isa=z
@@ -21908,8 +22167,8 @@
 y=A.rv
 y.$isrv=z
 y.$isa=z
-y=L.lg
-y.$islg=z
+y=L.ARh
+y.$isARh=z
 y.$isAp=z
 y.$isa=z
 y=W.hsw
@@ -21968,13 +22227,14 @@
 J.B9=function(a,b){return J.RE(a).shN(a,b)}
 J.BC=function(a,b){return J.RE(a).sja(a,b)}
 J.BL=function(a,b){return J.RE(a).sRd(a,b)}
+J.BQ=function(a,b){return J.Qe(a).Fr(a,b)}
 J.BT=function(a){return J.RE(a).gNG(a)}
 J.BZ=function(a){return J.RE(a).gnv(a)}
+J.Bj=function(a,b){return J.RE(a).snl(a,b)}
 J.Bl=function(a,b){if(typeof a=="number"&&typeof b=="number")return a<=b
 return J.Wx(a).E(a,b)}
 J.By=function(a,b){return J.RE(a).sLW(a,b)}
 J.C3=function(a,b){return J.RE(a).sig(a,b)}
-J.C7=function(a){return J.RE(a).gLc(a)}
 J.CJ=function(a,b){return J.RE(a).sB1(a,b)}
 J.CN=function(a){return J.RE(a).gd0(a)}
 J.CP=function(a,b,c,d,e){return J.w1(a).YW(a,b,c,d,e)}
@@ -21995,7 +22255,6 @@
 J.EC=function(a,b){return J.RE(a).svm(a,b)}
 J.EE=function(a,b){return J.RE(a).sFF(a,b)}
 J.EJ=function(a,b){return J.RE(a).sCf(a,b)}
-J.EMK=function(a){return J.RE(a).gV5(a)}
 J.Ec=function(a){return J.RE(a).gMZ(a)}
 J.Ed=function(a,b){return J.RE(a).sFK(a,b)}
 J.Eh=function(a,b){return J.Wx(a).O(a,b)}
@@ -22008,11 +22267,13 @@
 J.FN=function(a){return J.U6(a).gl0(a)}
 J.FS=function(a){return J.RE(a).gwp(a)}
 J.FW=function(a,b){return J.Qc(a).iM(a,b)}
+J.Fc=function(a,b){return J.RE(a).sP(a,b)}
 J.Fd=function(a,b,c){return J.w1(a).aM(a,b,c)}
 J.Fv=function(a,b){return J.RE(a).sFR(a,b)}
 J.Fy=function(a){return J.RE(a).h9(a)}
 J.G7=function(a,b){return J.RE(a).seZ(a,b)}
 J.GF=function(a){return J.RE(a).gz2(a)}
+J.GG=function(a){return J.Qe(a).gNq(a)}
 J.GH=function(a){return J.RE(a).gyW(a)}
 J.GL=function(a){return J.RE(a).gBp(a)}
 J.GW=function(a){return J.RE(a).gVY(a)}
@@ -22025,13 +22286,13 @@
 J.HB=function(a){return J.RE(a).gxT(a)}
 J.HP=function(a){return J.RE(a).gFK(a)}
 J.HT=function(a,b){return J.RE(a).sLc(a,b)}
+J.Hf=function(a,b){return J.RE(a).seo(a,b)}
 J.Hg=function(a){return J.RE(a).gP9(a)}
 J.Hh=function(a,b){return J.RE(a).sO9(a,b)}
 J.Hn=function(a,b){return J.RE(a).sxT(a,b)}
 J.Ho=function(a){return J.RE(a).WJ(a)}
 J.Hs=function(a){return J.RE(a).goL(a)}
 J.Hy=function(a){return J.RE(a).gZp(a)}
-J.IA=function(a){return J.RE(a).gjT(a)}
 J.IB=function(a,b,c,d){return J.RE(a).nR(a,b,c,d)}
 J.II=function(a){return J.w1(a).Jd(a)}
 J.IL=function(a){return J.RE(a).goE(a)}
@@ -22040,8 +22301,6 @@
 J.IR=function(a){return J.RE(a).gkZ(a)}
 J.IX=function(a,b){return J.RE(a).sEu(a,b)}
 J.Ir=function(a){return J.RE(a).gyK(a)}
-J.It=function(a,b){return J.Qe(a).Fr(a,b)}
-J.Iw=function(a,b){return J.RE(a).sFL(a,b)}
 J.Iz=function(a){return J.RE(a).gfY(a)}
 J.J0=function(a,b){return J.RE(a).sR1(a,b)}
 J.J1=function(a,b){return J.RE(a).rW(a,b)}
@@ -22056,7 +22315,6 @@
 J.Jp=function(a){return J.RE(a).gjl(a)}
 J.Jr=function(a){return J.RE(a).gGV(a)}
 J.Jv=function(a){return J.RE(a).gzG(a)}
-J.Jw=function(a){return J.RE(a).gI(a)}
 J.K0=function(a){return J.RE(a).gd4(a)}
 J.K2=function(a){return J.RE(a).gtN(a)}
 J.KD=function(a,b){return J.RE(a).j3(a,b)}
@@ -22064,7 +22322,6 @@
 J.Kd=function(a){return J.RE(a).gCF(a)}
 J.Kj=function(a){return J.RE(a).gYt(a)}
 J.Kl=function(a){return J.RE(a).gBP(a)}
-J.Ky=function(a){return J.RE(a).gRk(a)}
 J.L1=function(a,b,c,d){return J.RE(a).wN(a,b,c,d)}
 J.L6=function(a){return J.RE(a).glD(a)}
 J.L9=function(a,b){if(typeof a=="number"&&typeof b=="number")return a/b
@@ -22091,7 +22348,7 @@
 J.Mp=function(a){return J.w1(a).wg(a)}
 J.Mx=function(a){return J.RE(a).gks(a)}
 J.N1=function(a){return J.RE(a).Es(a)}
-J.NB=function(a){return J.RE(a).gHo(a)}
+J.NB=function(a,b,c,d){return J.RE(a).ct(a,b,c,d)}
 J.NC=function(a){return J.RE(a).gHy(a)}
 J.NDJ=function(a){return J.RE(a).gWt(a)}
 J.NE=function(a,b){return J.RE(a).sHL(a,b)}
@@ -22111,7 +22368,6 @@
 J.OB=function(a){return J.RE(a).gfg(a)}
 J.OE=function(a,b){return J.RE(a).sfg(a,b)}
 J.OT=function(a){return J.RE(a).gXE(a)}
-J.OX=function(a){return J.Qe(a).gNq(a)}
 J.Oh=function(a){return J.RE(a).gG1(a)}
 J.Ok=function(a){return J.RE(a).ghU(a)}
 J.P2=function(a,b){return J.RE(a).sU4(a,b)}
@@ -22133,7 +22389,6 @@
 J.Px=function(a,b){return J.RE(a).swp(a,b)}
 J.Q0=function(a,b){return J.U6(a).OY(a,b)}
 J.Q2=function(a){return J.RE(a).gO3(a)}
-J.Q5=function(a,b,c,d){return J.RE(a).ct(a,b,c,d)}
 J.Q9=function(a){return J.RE(a).gf0(a)}
 J.QE=function(a){return J.RE(a).gCd(a)}
 J.QT=function(a,b){return J.RE(a).vV(a,b)}
@@ -22183,6 +22438,7 @@
 J.UR=function(a){return J.RE(a).Lg(a)}
 J.UT=function(a){return J.RE(a).gDQ(a)}
 J.Ue=function(a){return J.RE(a).gV8(a)}
+J.Ux=function(a){return J.RE(a).geo(a)}
 J.V1=function(a,b){return J.w1(a).Rz(a,b)}
 J.VA=function(a,b){return J.w1(a).Vr(a,b)}
 J.VU=function(a,b){return J.RE(a).PN(a,b)}
@@ -22200,6 +22456,7 @@
 J.Wf=function(a){return J.RE(a).D4(a)}
 J.Wp=function(a){return J.RE(a).gQU(a)}
 J.Wy=function(a,b){return J.RE(a).sBk(a,b)}
+J.X6=function(a){return J.RE(a).gjD(a)}
 J.X7=function(a){return J.RE(a).gcH(a)}
 J.X9=function(a){return J.RE(a).gTK(a)}
 J.XF=function(a,b){return J.RE(a).siC(a,b)}
@@ -22208,6 +22465,7 @@
 J.Xf=function(a){return J.RE(a).gbq(a)}
 J.Xg=function(a,b){return J.RE(a).sBV(a,b)}
 J.Xr=function(a){return J.RE(a).gEa(a)}
+J.Xu=function(a,b){return J.RE(a).sFL(a,b)}
 J.Y5=function(a){return J.RE(a).gyT(a)}
 J.Y7=function(a){return J.RE(a).gLU(a)}
 J.YG=function(a){return J.RE(a).gQP(a)}
@@ -22233,6 +22491,7 @@
 J.aA=function(a){return J.RE(a).gzY(a)}
 J.aB=function(a){return J.RE(a).gql(a)}
 J.aT=function(a){return J.RE(a).god(a)}
+J.aW=function(a){return J.RE(a).gJp(a)}
 J.an=function(a,b){return J.RE(a).Id(a,b)}
 J.au=function(a,b){return J.RE(a).sNG(a,b)}
 J.ay=function(a){return J.RE(a).giB(a)}
@@ -22251,8 +22510,8 @@
 J.c7=function(a){return J.RE(a).guS(a)}
 J.cG=function(a){return J.RE(a).Ki(a)}
 J.cI=function(a,b){return J.Wx(a).Sy(a,b)}
+J.cL=function(a){return J.RE(a).gV5(a)}
 J.cO=function(a){return J.RE(a).gjx(a)}
-J.cP=function(a){return J.RE(a).gAd(a)}
 J.cV=function(a,b){return J.RE(a).sjT(a,b)}
 J.cZ=function(a,b,c,d){return J.RE(a).On(a,b,c,d)}
 J.cj=function(a){return J.RE(a).gMT(a)}
@@ -22261,6 +22520,7 @@
 J.co=function(a,b){return J.Qe(a).nC(a,b)}
 J.dE=function(a){return J.RE(a).gGs(a)}
 J.dF=function(a){return J.w1(a).zH(a)}
+J.dK=function(a){return J.RE(a).gWk(a)}
 J.dY=function(a){return J.RE(a).ga4(a)}
 J.dZ=function(a){return J.RE(a).gDX(a)}
 J.dc=function(a,b){return J.RE(a).smH(a,b)}
@@ -22319,12 +22579,14 @@
 J.kl=function(a,b){return J.w1(a).ez(a,b)}
 J.kv=function(a){return J.RE(a).gDf(a)}
 J.l2=function(a){return J.RE(a).gN(a)}
+J.lA=function(a){return J.RE(a).gLc(a)}
 J.lL=function(a){return J.RE(a).gQr(a)}
 J.lN=function(a){return J.RE(a).gil(a)}
 J.le=function(a){return J.RE(a).gUt(a)}
 J.lu=function(a){return J.RE(a).gJ8(a)}
 J.m4=function(a){return J.RE(a).gig(a)}
 J.mF=function(a){return J.RE(a).gHn(a)}
+J.mN=function(a){return J.RE(a).gRO(a)}
 J.mQ=function(a,b){if(typeof a=="number"&&typeof b=="number")return(a&b)>>>0
 return J.Wx(a).i(a,b)}
 J.mU=function(a,b){return J.RE(a).skm(a,b)}
@@ -22337,7 +22599,7 @@
 J.nG=function(a){return J.RE(a).gv8(a)}
 J.nN=function(a){return J.RE(a).gTt(a)}
 J.nb=function(a){return J.RE(a).gyX(a)}
-J.nd=function(a){return J.RE(a).gWk(a)}
+J.ns=function(a){return J.RE(a).gjT(a)}
 J.nv=function(a){return J.RE(a).gLW(a)}
 J.o3=function(a,b){return J.RE(a).sjD(a,b)}
 J.o6=function(a){return J.RE(a).Lx(a)}
@@ -22369,8 +22631,8 @@
 J.r0=function(a){return J.RE(a).gi6(a)}
 J.r5=function(a,b,c){return J.RE(a).aD(a,b,c)}
 J.rA=function(a,b){return J.RE(a).sbe(a,b)}
-J.rK=function(a){return J.RE(a).gjD(a)}
 J.rL=function(a,b){return J.RE(a).spE(a,b)}
+J.ra5=function(a){return J.RE(a).gAd(a)}
 J.re=function(a){return J.RE(a).gmb(a)}
 J.rk=function(a){return J.RE(a).gke(a)}
 J.ro=function(a){return J.RE(a).gOB(a)}
@@ -22384,7 +22646,6 @@
 J.tH=function(a,b){return J.RE(a).sHy(a,b)}
 J.tPf=function(a,b){return J.RE(a).X3(a,b)}
 J.tT=function(a,b,c){return J.RE(a).X6(a,b,c)}
-J.ta=function(a,b){return J.RE(a).sP(a,b)}
 J.tv=function(a,b){return J.RE(a).sDX(a,b)}
 J.tw=function(a){return J.RE(a).gCK(a)}
 J.u1=function(a,b){return J.Wx(a).WZ(a,b)}
@@ -22392,9 +22653,11 @@
 return J.Wx(a).C(a,b)}
 J.uF=function(a,b){return J.w1(a).GT(a,b)}
 J.uH=function(a,b){return J.RE(a).sP2(a,b)}
+J.uN=function(a){return J.RE(a).gHo(a)}
 J.uW=function(a){return J.RE(a).gyG(a)}
 J.uf=function(a){return J.RE(a).gxr(a)}
 J.ul=function(a){return J.RE(a).gU4(a)}
+J.um=function(a){return J.RE(a).gRk(a)}
 J.un=function(a){return J.RE(a).gRY(a)}
 J.up=function(a){return J.RE(a).gIf(a)}
 J.uy=function(a){return J.RE(a).gHm(a)}
@@ -22438,7 +22701,6 @@
 J.yi=function(a,b){return J.RE(a).sMj(a,b)}
 J.yq=function(a){return J.RE(a).gQl(a)}
 J.yz=function(a){return J.RE(a).gLF(a)}
-J.z4=function(a){return J.RE(a).gXt(a)}
 J.z7Y=function(a,b,c,d,e){return J.RE(a).GM(a,b,c,d,e)}
 J.zE=function(a){return J.RE(a).gtu(a)}
 J.zF=function(a){return J.RE(a).gHL(a)}
@@ -22459,8 +22721,10 @@
 C.ka=Z.ak.prototype
 C.tWO=O.VY.prototype
 C.ux=F.Be.prototype
+C.vS=T.uV.prototype
+C.oS=U.NY.prototype
 C.O0=R.JI.prototype
-C.vo=G.Tk.prototype
+C.BB=G.Tk.prototype
 C.On=F.ZP.prototype
 C.Jh=L.nJ.prototype
 C.lQ=R.Eg.prototype
@@ -22479,7 +22743,7 @@
 C.Ie=E.mO.prototype
 C.Ig=E.DE.prototype
 C.VLs=E.U1.prototype
-C.wvk=E.qM.prototype
+C.ej=E.qM.prototype
 C.OkI=E.av.prototype
 C.bZ=E.uz.prototype
 C.iR=E.Ma.prototype
@@ -22490,7 +22754,7 @@
 C.IXz=E.qh.prototype
 C.rU=E.Q6.prototype
 C.j1o=E.L4.prototype
-C.ij=E.Zn.prototype
+C.ag=E.Zn.prototype
 C.Fw=E.uE.prototype
 C.UZ=E.n5.prototype
 C.QFk=O.Im.prototype
@@ -22511,30 +22775,31 @@
 C.jN=J.CDU.prototype
 C.CD=J.P.prototype
 C.xB=J.O.prototype
-C.Yt=Z.vj.prototype
+C.Du=Z.vj.prototype
 C.xA=A.UK.prototype
 C.Z3=R.LU.prototype
 C.fQ=M.CX.prototype
 C.DX=U.WG.prototype
-C.um=U.VZ.prototype
+C.OX=U.VZ.prototype
 C.Ax=N.I2.prototype
 C.Mw=N.FB.prototype
 C.po=N.qn.prototype
 C.S2=W.x76.prototype
 C.yp=H.eEV.prototype
-C.kD=A.md.prototype
-C.br=A.ye.prototype
+C.aV=A.md.prototype
+C.pl=A.ye.prototype
 C.IG=A.Bm.prototype
-C.cR=A.Ya.prototype
-C.Mn=A.NK.prototype
+C.nn=A.Ya.prototype
+C.BJj=A.NK.prototype
 C.L8=A.Zx.prototype
 C.J7=A.Ww.prototype
 C.t5=W.BH3.prototype
+C.br=L.qV.prototype
 C.YpE=V.F1.prototype
 C.mk=Z.uL.prototype
 C.Sx=J.iCW.prototype
 C.GBL=A.xc.prototype
-C.oAw=T.ov.prototype
+C.za=T.ov.prototype
 C.Wa=A.kn.prototype
 C.cJ0=U.fI.prototype
 C.U0=R.zM.prototype
@@ -22553,14 +22818,14 @@
 C.Hd=U.el.prototype
 C.Ui=W.K5.prototype
 C.Kn=new H.i6()
-C.x4=new U.EO()
+C.x4=new U.WH()
 C.Ar=new H.MB()
 C.MS=new H.FuS()
 C.Eq=new P.k5C()
 C.qY=new T.WM()
 C.ZB=new P.yRf()
-C.pr=new P.mgb()
-C.aZ=new L.iNc()
+C.Xh=new P.mgb()
+C.zr=new L.iNc()
 C.NU=new P.R81()
 C.WA=new D.WAE("Collected")
 C.l8=new D.WAE("Dart")
@@ -22599,7 +22864,7 @@
 C.UL=new H.tx("profileChanged")
 C.yQP=H.Kxv('EH')
 C.xD=I.uLC([])
-C.mM=new A.ES(C.UL,C.cn,!1,C.yQP,!1,C.xD)
+C.bG=new A.ES(C.UL,C.cn,!1,C.yQP,!1,C.xD)
 C.TU=new H.tx("endPosChanged")
 C.Cp=new A.ES(C.TU,C.cn,!1,C.yQP,!1,C.xD)
 C.Wm=new H.tx("refChanged")
@@ -22679,6 +22944,9 @@
 C.oC=new A.ES(C.kw,C.BM,!1,C.MR,!1,C.ucP)
 C.Ys=new H.tx("pad")
 C.Cg=new A.ES(C.Ys,C.BM,!1,C.Ow,!1,C.ucP)
+C.nr=new H.tx("context")
+C.cL5=H.Kxv('lI')
+C.BO=new A.ES(C.nr,C.BM,!1,C.cL5,!1,C.ucP)
 C.qX=new H.tx("fragmentationChanged")
 C.dO=new A.ES(C.qX,C.cn,!1,C.yQP,!1,C.xD)
 C.UX=new H.tx("msg")
@@ -22787,8 +23055,8 @@
 C.az=new A.ES(C.Gn,C.cn,!1,C.yQP,!1,C.xD)
 C.o0=new A.ES(C.vp,C.BM,!1,C.MR,!1,C.ucP)
 C.i4=new H.tx("code")
-C.pM=H.Kxv('kx')
-C.aJ=new A.ES(C.i4,C.BM,!1,C.pM,!1,C.ucP)
+C.nqy=H.Kxv('kx')
+C.aJ=new A.ES(C.i4,C.BM,!1,C.nqy,!1,C.ucP)
 C.nE=new H.tx("tracer")
 C.Tbd=H.Kxv('KZ')
 C.FM=new A.ES(C.nE,C.BM,!1,C.Tbd,!1,C.ucP)
@@ -22818,15 +23086,15 @@
 C.Mc=new H.tx("flagList")
 C.f0=new A.ES(C.Mc,C.BM,!1,C.MR,!1,C.ucP)
 C.rE=new H.tx("frame")
-C.KS=new A.ES(C.rE,C.BM,!1,C.SXK,!1,C.ucP)
+C.B7=new A.ES(C.rE,C.BM,!1,C.SXK,!1,C.ucP)
 C.cg=new H.tx("anchor")
 C.ll=new A.ES(C.cg,C.BM,!1,C.lY,!1,C.ucP)
 C.ngm=I.uLC([C.J19])
-C.Qs=new A.ES(C.i4,C.BM,!0,C.pM,!1,C.ngm)
+C.Qs=new A.ES(C.i4,C.BM,!0,C.nqy,!1,C.ngm)
 C.mi=new H.tx("text")
 C.yV=new A.ES(C.mi,C.BM,!1,C.lY,!1,C.esx)
 C.tW=new H.tx("pos")
-C.kH=new A.ES(C.tW,C.BM,!1,C.yw,!1,C.ucP)
+C.It=new A.ES(C.tW,C.BM,!1,C.yw,!1,C.ucP)
 C.TO=new A.ES(C.kY,C.BM,!1,C.SmN,!1,C.ucP)
 C.uG=new H.tx("linesReady")
 C.Df=new A.ES(C.uG,C.BM,!1,C.Ow,!1,C.esx)
@@ -22985,13 +23253,14 @@
 C.xr=new P.byg(null,null)
 C.A3=new P.c5(null)
 C.cb=new P.ojF(null,null)
-C.EkO=new N.qV("FINER",400)
-C.t4=new N.qV("FINE",500)
-C.IF=new N.qV("INFO",800)
-C.cd=new N.qV("SEVERE",1000)
-C.nT=new N.qV("WARNING",900)
+C.EkO=new N.Ng("FINER",400)
+C.t4=new N.Ng("FINE",500)
+C.IF=new N.Ng("INFO",800)
+C.oOA=new N.Ng("OFF",2000)
+C.cd=new N.Ng("SEVERE",1000)
+C.nT=new N.Ng("WARNING",900)
 C.Gb=H.VM(I.uLC([127,2047,65535,1114111]),[P.KN])
-C.NG=I.uLC([1,6])
+C.Q5=I.uLC([1,6])
 C.rz=I.uLC([0,0,32776,33792,1,10240,0,0])
 C.SY=new H.tx("keys")
 C.l4=new H.tx("values")
@@ -23004,7 +23273,7 @@
 C.qq=I.uLC([0,0,26624,1023,65534,2047,65534,2047])
 C.Fa=I.uLC([0,0,26498,1023,65534,34815,65534,18431])
 C.fJ3=H.Kxv('iv')
-C.fo=I.uLC([C.fJ3])
+C.bfK=I.uLC([C.fJ3])
 C.ip=I.uLC(["==","!=","<=",">=","||","&&"])
 C.jY=I.uLC(["as","in","this"])
 C.jx=I.uLC([0,0,32722,12287,65534,34815,65534,18431])
@@ -23043,6 +23312,7 @@
 C.IH=new H.tx("address")
 C.j2=new H.tx("app")
 C.US=new H.tx("architecture")
+C.Wq=new H.tx("asStringLiteral")
 C.ET=new H.tx("assertsEnabled")
 C.WC=new H.tx("bpt")
 C.hR=new H.tx("breakpoint")
@@ -23056,6 +23326,7 @@
 C.Wt=new H.tx("clazz")
 C.I9=new H.tx("closeItem")
 C.To=new H.tx("closing")
+C.mM=new H.tx("closureCtxt")
 C.aw=new H.tx("closureFunc")
 C.J6=new H.tx("collections")
 C.qt=new H.tx("coloring")
@@ -23121,6 +23392,7 @@
 C.pC=new H.tx("interfaces")
 C.iA=new H.tx("ioEnabled")
 C.XH=new H.tx("isAbstract")
+C.XJ=new H.tx("isAbstractType")
 C.tJ=new H.tx("isBool")
 C.F8=new H.tx("isChromeTarget")
 C.fy=new H.tx("isClosure")
@@ -23134,19 +23406,20 @@
 C.WV=new H.tx("isFinalized")
 C.Ih=new H.tx("isImplemented")
 C.MY=new H.tx("isInlinable")
-C.Iv=new H.tx("isInstance")
 C.Wg=new H.tx("isInt")
 C.tD=new H.tx("isList")
 C.QS=new H.tx("isMap")
+C.C7=new H.tx("isMirrorReference")
 C.Of=new H.tx("isNull")
 C.Vl=new H.tx("isOptimizable")
 C.pY=new H.tx("isOptimized")
 C.XL=new H.tx("isPatch")
 C.LA=new H.tx("isPipe")
+C.Iw=new H.tx("isPlainInstance")
 C.tz=new H.tx("isSentinel")
 C.AT=new H.tx("isStatic")
 C.Lk=new H.tx("isString")
-C.dK=new H.tx("isType")
+C.GS=new H.tx("isWeakProperty")
 C.Jx=new H.tx("isolates")
 C.b5=new H.tx("jumpTarget")
 C.z6=new H.tx("key")
@@ -23179,6 +23452,7 @@
 C.If=new H.tx("owningLibrary")
 C.zm=new H.tx("padding")
 C.nX=new H.tx("parent")
+C.BV=new H.tx("parentContext")
 C.xP=new H.tx("parseInt")
 C.Ic=new H.tx("pause")
 C.yG=new H.tx("pauseEvent")
@@ -23189,6 +23463,7 @@
 C.Xd=new H.tx("reachable")
 C.I7=new H.tx("readClosed")
 C.vK=new H.tx("reference")
+C.Tc=new H.tx("referent")
 C.GR=new H.tx("refresh")
 C.KX=new H.tx("refreshCoverage")
 C.ja=new H.tx("refreshGC")
@@ -23250,15 +23525,16 @@
 C.Fh=new H.tx("url")
 C.yv=new H.tx("usageCounter")
 C.LP=new H.tx("used")
-C.ct=new H.tx("userName")
+C.Gy=new H.tx("userName")
 C.jh=new H.tx("v")
 C.zd=new H.tx("value")
 C.Db=new H.tx("valueAsString")
+C.aF=new H.tx("valueAsStringIsTruncated")
 C.fj=new H.tx("variable")
 C.xw=new H.tx("variables")
 C.zn=new H.tx("version")
 C.Sk=new H.tx("vmMetrics")
-C.Tc=new H.tx("vmName")
+C.KS=new H.tx("vmName")
 C.Uy=new H.tx("writeClosed")
 C.hP=H.Kxv('uz')
 C.Qb=H.Kxv('J3')
@@ -23275,12 +23551,14 @@
 C.j4=H.Kxv('IW')
 C.Ke=H.Kxv('EZ')
 C.Vx=H.Kxv('MJ')
+C.Vh=H.Kxv('Pz')
 C.rR=H.Kxv('wN')
 C.kt=H.Kxv('Um')
 C.yS=H.Kxv('G6')
 C.Sb=H.Kxv('kn')
 C.AP=H.Kxv('a')
 C.Yc=H.Kxv('iP')
+C.kH=H.Kxv('NY')
 C.IZ=H.Kxv('oF')
 C.vw=H.Kxv('UK')
 C.Jo=H.Kxv('i7')
@@ -23308,7 +23586,6 @@
 C.WU=H.Kxv('lf')
 C.nC=H.Kxv('cQ')
 C.M5=H.Kxv('yc')
-C.za=H.Kxv('Pz3')
 C.Yxm=H.Kxv('Pg')
 C.il=H.Kxv('xI')
 C.lp=H.Kxv('LU')
@@ -23319,6 +23596,7 @@
 C.OG=H.Kxv('eW')
 C.km=H.Kxv('fl')
 C.jV=H.Kxv('rF')
+C.rC=H.Kxv('qV')
 C.Tq=H.Kxv('vj')
 C.ou=H.Kxv('ak')
 C.JW=H.Kxv('Ww')
@@ -23372,6 +23650,7 @@
 C.Lg=H.Kxv('JI')
 C.Ju=H.Kxv('Ly')
 C.mq=H.Kxv('qk')
+C.XW=H.Kxv('uV')
 C.XWY=H.Kxv('uEY')
 C.oT=H.Kxv('VY')
 C.jK=H.Kxv('el')
@@ -23385,7 +23664,7 @@
 C.uo=new P.Uf(C.NU,P.uy1())
 C.pj=new P.Uf(C.NU,P.W7())
 C.lk=new P.Uf(C.NU,P.qKH())
-C.Gu=new P.Uf(C.NU,P.iyo())
+C.Gu=new P.Uf(C.NU,P.xd())
 C.Yl=new P.Uf(C.NU,P.MM())
 C.Zc=new P.Uf(C.NU,P.yA())
 C.zb=new P.yQ(null,null,null,null,null,null,null,null,null,null,null,null)
@@ -23397,7 +23676,7 @@
 $.xG=null
 $.hG=null
 $.OK=0
-$.bf=null
+$.mJs=null
 $.P4=null
 $.lcs=!1
 $.NF=null
@@ -23437,7 +23716,7 @@
 $.vU=null
 $.Xa=null
 $.ax=null
-$.AuW=[C.tq,W.Bo,{},C.hP,E.uz,{created:E.z1},C.Qb,X.J3,{created:X.TsF},C.Mf,A.G1,{created:A.Br},C.q0S,H.Dg,{"":H.jZN},C.Dl,V.F1,{created:V.JT8},C.mK,E.Mb,{created:E.RVI},C.UJ,N.oa,{created:N.Zgg},C.Y3,Q.CY,{created:Q.AlS},C.QJ,U.WG,{created:U.z0},C.j4,D.IW,{created:D.zr},C.Ke,Z.EZ,{created:Z.CoW},C.Vx,X.MJ,{created:X.IfX},C.rR,E.wN,{created:E.ML},C.kt,U.Um,{created:U.T21},C.yS,B.G6,{created:B.KU},C.Sb,A.kn,{created:A.Thl},C.IZ,E.oF,{created:E.J3z},C.vw,A.UK,{created:A.IV},C.Jo,D.i7,{created:D.hSW},C.ON,T.ov,{created:T.Zz},C.jR,F.Be,{created:F.fm},C.uC,O.Im,{created:O.eka},C.PT,M.CX,{created:M.SPd},C.iD,O.Vb,{created:O.teo},C.ce,X.kK,{created:X.jD},C.dD,E.av,{created:E.R7},C.FA,A.Ya,{created:A.JR},C.PFz,W.yyN,{},C.Th,U.fI,{created:U.TXt},C.tU,E.L4,{created:E.p4},C.cK,X.I5,{created:X.yC},C.jA,R.Eg,{created:R.Ola},C.K4,X.hV,{created:X.zy},C.ca,D.Z4,{created:D.d7},C.pJ,E.Q6,{created:E.chF},C.Yy,E.uE,{created:E.egu},C.Yxm,H.Pg,{"":H.aRu},C.il,Q.xI,{created:Q.lKH},C.lp,R.LU,{created:R.bUN},C.u4,U.VZ,{created:U.Wzx},C.oG,E.ds,{created:E.pIf},C.EG,D.Oz,{created:D.TSH},C.nw,O.eo,{created:O.l0},C.OG,Q.eW,{created:Q.rt},C.km,A.fl,{created:A.Du},C.Tq,Z.vj,{created:Z.mA},C.ou,Z.ak,{created:Z.zB},C.JW,A.Ww,{created:A.ZC},C.CT,D.St,{created:D.N5},C.wH,R.zM,{created:R.qa},C.Mz,Z.uL,{created:Z.ew},C.LT,A.md,{created:A.DCi},C.Wh,E.H8,{created:E.ZhX},C.Zj,E.U1,{created:E.TiU},C.FG,E.qh,{created:E.cua},C.bC,V.D2,{created:V.NI},C.Nw,T.vr,{created:T.aed},C.a8,A.Zx,{created:A.yno},C.NR,K.nm,{created:K.ant},C.Fn,N.qn,{created:N.hYg},C.DD,E.Zn,{created:E.kf},C.nj,Y.hg,{created:Y.Ifw},C.qF,E.mO,{created:E.Ch},C.JA3,H.b0B,{"":H.m6},C.Ey,A.wM,{created:A.ZTA},C.pF,E.WS,{created:E.jS},C.qZ,E.DE,{created:E.lIg},C.jw,A.xc,{created:A.oaJ},C.NW,A.ye,{created:A.mBQ},C.pi,N.FB,{created:N.kUw},C.Xv,E.n5,{created:E.iOo},C.KO,F.ZP,{created:F.Yw},C.he,E.qM,{created:E.tX},C.Wz,B.pR,{created:B.luW},C.tc,E.Ma,{created:E.Ii},C.Io,D.Qh,{created:D.Qj},C.Qt,A.NK,{created:A.Xii},C.wk,L.nJ,{created:L.Rpj},C.Bi,G.Tk,{created:G.aMd},C.te,N.BS,{created:N.nz},C.ms,A.Bm,{created:A.AJ},C.ws,V.Pa,{created:V.fXx},C.pK,D.Rk,{created:D.bZp},C.lE,U.DK,{created:U.v9},C.fU,N.I2,{created:N.rI3},C.Az,A.Gk,{created:A.cYO},C.R9,Q.f7,{created:Q.wzV},C.tQ,X.Vu,{created:X.lt2},C.X8,U.Ti,{created:U.Gvt},C.Lg,R.JI,{created:R.U9},C.Ju,K.Ly,{created:K.EDe},C.mq,L.qk,{created:L.Qtp},C.XWY,W.uEY,{},C.oT,O.VY,{created:O.E3U},C.jK,U.el,{created:U.oH}]
+$.AuW=[C.tq,W.Bo,{},C.hP,E.uz,{created:E.z1},C.Qb,X.J3,{created:X.TsF},C.Mf,A.G1,{created:A.Br},C.q0S,H.Dg,{"":H.jZN},C.Dl,V.F1,{created:V.JT8},C.mK,E.Mb,{created:E.RVI},C.UJ,N.oa,{created:N.Zgg},C.Y3,Q.CY,{created:Q.AlS},C.QJ,U.WG,{created:U.z0},C.j4,D.IW,{created:D.dmb},C.Ke,Z.EZ,{created:Z.CoW},C.Vx,X.MJ,{created:X.IfX},C.rR,E.wN,{created:E.ML},C.kt,U.Um,{created:U.T21},C.yS,B.G6,{created:B.KU},C.Sb,A.kn,{created:A.Thl},C.kH,U.NY,{created:U.q5n},C.IZ,E.oF,{created:E.J3z},C.vw,A.UK,{created:A.IV},C.Jo,D.i7,{created:D.hSW},C.ON,T.ov,{created:T.Zz},C.jR,F.Be,{created:F.fm},C.uC,O.Im,{created:O.eka},C.PT,M.CX,{created:M.SPd},C.iD,O.Vb,{created:O.teo},C.ce,X.kK,{created:X.jD},C.dD,E.av,{created:E.R7},C.FA,A.Ya,{created:A.JR},C.PFz,W.yyN,{},C.Th,U.fI,{created:U.TXt},C.tU,E.L4,{created:E.p4},C.cK,X.I5,{created:X.yC},C.jA,R.Eg,{created:R.Ola},C.K4,X.hV,{created:X.zy},C.ca,D.Z4,{created:D.d7},C.pJ,E.Q6,{created:E.chF},C.Yy,E.uE,{created:E.egu},C.Yxm,H.Pg,{"":H.aRu},C.il,Q.xI,{created:Q.lKH},C.lp,R.LU,{created:R.bUN},C.u4,U.VZ,{created:U.Wzx},C.oG,E.ds,{created:E.pIf},C.EG,D.Oz,{created:D.TSH},C.nw,O.eo,{created:O.l0},C.OG,Q.eW,{created:Q.rt},C.km,A.fl,{created:A.YtF},C.rC,L.qV,{created:L.P5f},C.Tq,Z.vj,{created:Z.mA},C.ou,Z.ak,{created:Z.TH},C.JW,A.Ww,{created:A.ZC},C.CT,D.St,{created:D.N5},C.wH,R.zM,{created:R.qa},C.Mz,Z.uL,{created:Z.ew},C.LT,A.md,{created:A.DCi},C.Wh,E.H8,{created:E.ZhX},C.Zj,E.U1,{created:E.TiU},C.FG,E.qh,{created:E.cua},C.bC,V.D2,{created:V.Hr},C.Nw,T.vr,{created:T.aed},C.a8,A.Zx,{created:A.yno},C.NR,K.nm,{created:K.ant},C.Fn,N.qn,{created:N.hYg},C.DD,E.Zn,{created:E.kf},C.nj,Y.hg,{created:Y.Ifw},C.qF,E.mO,{created:E.Ch},C.JA3,H.b0B,{"":H.m6},C.Ey,A.wM,{created:A.ZTA},C.pF,E.WS,{created:E.jS},C.qZ,E.DE,{created:E.lIg},C.jw,A.xc,{created:A.oaJ},C.NW,A.ye,{created:A.mBQ},C.pi,N.FB,{created:N.kUw},C.Xv,E.n5,{created:E.iOo},C.KO,F.ZP,{created:F.Yw},C.he,E.qM,{created:E.tX},C.Wz,B.pR,{created:B.luW},C.tc,E.Ma,{created:E.Ii},C.Io,D.Qh,{created:D.Qj},C.Qt,A.NK,{created:A.Xii},C.wk,L.nJ,{created:L.Rpj},C.Bi,G.Tk,{created:G.aMd},C.te,N.BS,{created:N.nz},C.ms,A.Bm,{created:A.AJ},C.ws,V.Pa,{created:V.fXx},C.pK,D.Rk,{created:D.bZp},C.lE,U.DK,{created:U.v9},C.fU,N.I2,{created:N.rI3},C.Az,A.Gk,{created:A.cYO},C.R9,Q.f7,{created:Q.wzV},C.tQ,X.Vu,{created:X.lt2},C.X8,U.Ti,{created:U.Gvt},C.Lg,R.JI,{created:R.U9},C.Ju,K.Ly,{created:K.EDe},C.mq,L.qk,{created:L.Qtp},C.XW,T.uV,{created:T.CvM},C.XWY,W.uEY,{},C.oT,O.VY,{created:O.E3U},C.jK,U.el,{created:U.oH}]
 I.$lazy($,"thisScript","SU","Zt",function(){return H.yl()})
 I.$lazy($,"workerIds","rS","p6",function(){return H.VM(new P.qo(null),[P.KN])})
 I.$lazy($,"noSuchMethodPattern","lm","WD",function(){return H.cM(H.S7({toString:function(){return"$receiver$"}}))})
@@ -23457,10 +23736,9 @@
 I.$lazy($,"_isolateMatcher","AX","qL",function(){return new H.VR("isolates/.*/",H.v4("isolates/.*/",!1,!0,!1),null,null)})
 I.$lazy($,"POLL_PERIODS","Bw","c3",function(){return[8000,4000,2000,1000,100]})
 I.$lazy($,"_storage","wZ","Vy",function(){return window.localStorage})
-I.$lazy($,"scheduleImmediateClosure","lI","ej",function(){return P.xg()})
+I.$lazy($,"scheduleImmediateClosure","Mn","zp",function(){return P.xg()})
 I.$lazy($,"_rootMap","ln","OL",function(){return P.YM(null,null,null,null,null)})
 I.$lazy($,"_toStringVisiting","nM","Ex",function(){return[]})
-I.$lazy($,"webkitEvents","fDX","nn",function(){return P.EF(["animationend","webkitAnimationEnd","animationiteration","webkitAnimationIteration","animationstart","webkitAnimationStart","fullscreenchange","webkitfullscreenchange","fullscreenerror","webkitfullscreenerror","keyadded","webkitkeyadded","keyerror","webkitkeyerror","keymessage","webkitkeymessage","needkey","webkitneedkey","pointerlockchange","webkitpointerlockchange","pointerlockerror","webkitpointerlockerror","resourcetimingbufferfull","webkitresourcetimingbufferfull","transitionend","webkitTransitionEnd","speechchange","webkitSpeechChange"],null,null)})
 I.$lazy($,"context","Lt","Xw",function(){return P.ND(self)})
 I.$lazy($,"_DART_OBJECT_PROPERTY_NAME","xu","LZ",function(){return init.getIsolateTag("_$dart_dartObject")})
 I.$lazy($,"_DART_CLOSURE_PROPERTY_NAME","Ri","Dp",function(){return init.getIsolateTag("_$dart_dartClosure")})
@@ -23475,7 +23753,7 @@
 I.$lazy($,"_pathCache","zC","fX",function(){return P.L5(null,null,null,P.qU,L.Zl)})
 I.$lazy($,"_polymerSyntax","Kb","Ak",function(){return new A.Li(T.Mo(null,C.qY),null)})
 I.$lazy($,"_typesByName","Hi","Ej",function(){return P.L5(null,null,null,P.qU,P.Lz)})
-I.$lazy($,"_declarations","ef","vE",function(){return P.L5(null,null,null,P.qU,A.So)})
+I.$lazy($,"_declarations","Hq","w3G",function(){return P.L5(null,null,null,P.qU,A.So)})
 I.$lazy($,"_hasShadowDomPolyfill","Yx","Ep",function(){return $.Xw().Eg("ShadowDOMPolyfill")})
 I.$lazy($,"_ShadowCss","qP","lx",function(){var z=$.Kc()
 return z!=null?J.UQ(z,"ShadowCSS"):null})
@@ -23486,12 +23764,12 @@
 I.$lazy($,"bindPattern","ZA","VCp",function(){return new H.VR("\\{\\{([^{}]*)}}",H.v4("\\{\\{([^{}]*)}}",!1,!0,!1),null,null)})
 I.$lazy($,"_onReady","T8g","j6",function(){return H.VM(new P.Zf(P.Dt(null)),[null])})
 I.$lazy($,"_observeLog","DZ","dn",function(){return N.QM("polymer.observe")})
-I.$lazy($,"_eventsLog","HKX","mI",function(){return N.QM("polymer.events")})
+I.$lazy($,"_eventsLog","fo","vo",function(){return N.QM("polymer.events")})
 I.$lazy($,"_unbindLog","eu","iX",function(){return N.QM("polymer.unbind")})
 I.$lazy($,"_bindLog","xz","Lu",function(){return N.QM("polymer.bind")})
 I.$lazy($,"_watchLog","p5","REM",function(){return N.QM("polymer.watch")})
-I.$lazy($,"_readyLog","nS","zG",function(){return N.QM("polymer.ready")})
-I.$lazy($,"_PolymerGestures","Jm","LL",function(){return J.UQ($.Xw(),"PolymerGestures")})
+I.$lazy($,"_readyLog","nS","lg",function(){return N.QM("polymer.ready")})
+I.$lazy($,"_PolymerGestures","Jm","tNi",function(){return J.UQ($.Xw(),"PolymerGestures")})
 I.$lazy($,"_polymerElementProto","f8","Dw",function(){return new A.Md().$0()})
 I.$lazy($,"_typeHandlers","FZ4","h2",function(){return P.EF([C.lY,new Z.lP(),C.GX,new Z.wJY(),C.Yc,new Z.zOQ(),C.Ow,new Z.W6o(),C.yw,new Z.MdQ(),C.cz,new Z.YJG()],null,null)})
 I.$lazy($,"_BINARY_OPERATORS","HfW","YP",function(){return P.EF(["+",new K.w12(),"-",new K.w13(),"*",new K.w14(),"/",new K.w15(),"%",new K.w16(),"==",new K.w17(),"!=",new K.w18(),"===",new K.w19(),"!==",new K.w20(),">",new K.w21(),">=",new K.w22(),"<",new K.w23(),"<=",new K.w24(),"||",new K.w25(),"&&",new K.w26(),"|",new K.w27()],null,null)})
@@ -23518,17 +23796,17 @@
 I.$lazy($,"objectAccessor","j8","cp",function(){return D.kP()})
 I.$lazy($,"typeInspector","Yv","mX",function(){return D.kP()})
 I.$lazy($,"symbolConverter","qe","vu",function(){return D.kP()})
-I.$lazy($,"_DEFAULT","ac","Bu",function(){return new M.VE(null)})
+I.$lazy($,"_DEFAULT","ac","Bu",function(){return new M.vE(null)})
 I.$lazy($,"_contentsOwner","Ub","B8",function(){return H.VM(new P.qo(null),[null])})
 I.$lazy($,"_ownerStagingDocument","v2","Ou",function(){return H.VM(new P.qo(null),[null])})
 I.$lazy($,"_allTemplatesSelectors","YO","S1",function(){return C.xB.g("template, ",J.ZG(J.kl(C.bq.gvc(C.bq),new M.DOe()),", "))})
 I.$lazy($,"_templateObserver","joK","ik",function(){return W.Ws(new M.Ufa())})
 I.$lazy($,"_emptyInstance","oL","zl",function(){return new M.Raa().$0()})
-I.$lazy($,"_instanceExtension","nB","Tn",function(){return H.VM(new P.qo(null),[null])})
+I.$lazy($,"_instanceExtension","nB","nR",function(){return H.VM(new P.qo(null),[null])})
 I.$lazy($,"_isStagingDocument","Fg","Ks",function(){return H.VM(new P.qo(null),[null])})
 I.$lazy($,"_expando","fF","as",function(){return H.VM(new P.qo("template_binding"),[null])})
 
-init.metadata=["object","sender","e",{func:"pd",args:[P.qU]},{func:"a1",ret:P.lf},"closure","isolate","numberOfArguments","arg1","arg2","arg3","arg4",{func:"l4",args:[null]},"_",{func:"Pt",ret:P.qU,args:[P.KN]},"bytes",{func:"RJ",ret:P.qU,args:[null]},{func:"T9",void:true},{func:"LP",void:true,args:[{func:"T9",void:true}]},{func:"G5O",void:true,args:[null]},"value",{func:"Vx",void:true,args:[null],opt:[P.BpP]},,"error","stackTrace",{func:"rE",void:true,args:[P.JBS,P.e4y,P.JBS,null,P.BpP]},"self","parent","zone",{func:"h2",args:[P.JBS,P.e4y,P.JBS,{func:"ny"}]},"f",{func:"aE",args:[P.JBS,P.e4y,P.JBS,{func:"l4",args:[null]},null]},"arg",{func:"ta",args:[P.JBS,P.e4y,P.JBS,{func:"bh",args:[null,null]},null,null]},{func:"HQr",ret:{func:"ny"},args:[P.JBS,P.e4y,P.JBS,{func:"ny"}]},{func:"qs",ret:{func:"l4",args:[null]},args:[P.JBS,P.e4y,P.JBS,{func:"l4",args:[null]}]},{func:"tD",ret:{func:"bh",args:[null,null]},args:[P.JBS,P.e4y,P.JBS,{func:"bh",args:[null,null]}]},{func:"iV",void:true,args:[P.JBS,P.e4y,P.JBS,{func:"ny"}]},{func:"Uk",ret:P.kWp,args:[P.JBS,P.e4y,P.JBS,P.a6,{func:"T9",void:true}]},"duration","callback",{func:"zk",ret:P.kWp,args:[P.JBS,P.e4y,P.JBS,P.a6,{func:"pe",void:true,args:[P.kWp]}]},{func:"SA",void:true,args:[P.JBS,P.e4y,P.JBS,P.qU]},"line",{func:"DM",void:true,args:[P.qU]},{func:"Jj",ret:P.JBS,args:[P.JBS,P.e4y,P.JBS,P.n7,P.T8]},"specification","zoneValues",{func:"qa",ret:P.SQ,args:[null,null]},"a","b",{func:"bX",ret:P.KN,args:[null]},{func:"uJ",ret:P.a,args:[null]},{func:"Dl",ret:P.KN,args:[P.fRn,P.fRn]},{func:"I8",ret:P.SQ,args:[P.a,P.a]},{func:"ZY",ret:P.KN,args:[P.a]},"receiver",{func:"b3",args:[null,null,null,null]},"name","oldValue","newValue","captureThis","arguments","o",{func:"VH",ret:P.SQ,args:[P.IN]},"symbol","v",{func:"DW",ret:U.rx,args:[P.qU]},{func:"ZU",args:[U.rx,null],named:{globals:[P.T8,P.qU,P.a],oneTime:null}},!1,{func:"qq",ret:[P.QV,K.Aep],args:[P.QV]},"iterable",{func:"Tx",ret:P.KN,args:[D.af,D.af]},{func:"I6a",ret:P.qU},"invocation","fractionDigits",{func:"ny"},{func:"N4",args:[P.EH]},"code","key","val",{func:"bh",args:[null,null]},{func:"Za",args:[P.qU,null]},{func:"TS",args:[null,P.qU]},{func:"Yv",void:true,args:[null,null,null]},"c",{func:"Ab",void:true,args:[D.Mk]},"event",{func:"lrq",void:true,args:[D.N7]},{func:"Cj",void:true,args:[D.Ix]},"exception",{func:"Af",args:[D.wv]},"vm",{func:"wk",ret:P.SQ,args:[null]},"oldEvent",{func:"ai",void:true,args:[W.niR]},"obj","i","responseText",{func:"Om",args:[L.Z5,L.Z5]},{func:"HE",ret:P.KN,args:[P.KN,P.KN]},"column","done",{func:"Hj",ret:P.qU,args:[G.Y2]},"row",{func:"Sz",void:true,args:[W.ea,null,W.h4]},"detail","target","objectClass",{func:"Wr",ret:[P.b8,D.af],args:[P.qU]},"text",{func:"de",ret:[P.b8,D.af],args:[null]},"limit","dummy",{func:"Q5",args:[D.vO]},{func:"Np8",void:true,args:[W.ea,null,W.KV]},{func:"VI",args:[D.kx]},{func:"lJL",args:[{func:"T9",void:true}]},"data","theError","theStackTrace",{func:"Tw",args:[P.a]},{func:"YP",void:true,opt:[null]},{func:"uu",void:true,args:[P.a],opt:[P.BpP]},{func:"yV",args:[null],opt:[null]},{func:"Wy",ret:P.SQ},"ignored","convert","element",{func:"K5",args:[P.SQ]},{func:"a9",void:true,opt:[P.b8]},"resumeSignal",{func:"ha",args:[null,P.BpP]},{func:"N5",void:true,args:[null,P.BpP]},"each","k",{func:"DR",ret:P.KN,args:[null,P.KN]},{func:"v0",void:true,args:[P.KN,P.KN]},{func:"lv",args:[P.IN,null]},{func:"Tla",ret:P.KN,args:[P.qU]},{func:"cS",ret:P.Vf,args:[P.qU]},{func:"cd",ret:P.SQ,args:[P.KN]},{func:"wJ",ret:P.KN,args:[null,null]},"byteString",{func:"lu",void:true,args:[P.qU],opt:[null]},"xhr",{func:"bB",void:true,args:[W.AjY]},"result",{func:"fK",args:[D.af]},{func:"IS",ret:O.Hz},"response","st",{func:"D8",void:true,args:[D.vO]},"newProfile",{func:"DT",ret:P.qU,args:[P.SQ]},"newSpace",{func:"Z5",args:[P.KN]},{func:"iR",args:[P.KN,null]},{func:"OE",ret:P.QV,args:[{func:"pd",args:[P.qU]}]},{func:"T5",ret:P.QV,args:[{func:"uW",ret:P.QV,args:[P.qU]}]},"s",{func:"S0",void:true,args:[P.SQ,null]},"expand","m",{func:"KDY",ret:P.b8,args:[null]},"tagProfile","rec",{func:"IM",args:[N.HV]},{func:"d4C",void:true,args:[W.AjY,null,W.h4]},{func:"Ig",ret:P.qU,args:[P.qU]},"url",{func:"nxg",ret:P.qU,args:[P.Vf]},"time",{func:"B4",args:[P.e4y,P.JBS]},{func:"djS",args:[P.JBS,P.e4y,P.JBS,{func:"l4",args:[null]}]},"x",{func:"VL8",void:true,args:[P.a,P.a]},"prop","records",{func:"My",args:[L.Zl,null]},"model","node","oneTime",{func:"cq",args:[null,null,null]},{func:"jk",void:true,args:[P.qU,P.qU]},{func:"aA",void:true,args:[P.WO,P.T8,P.WO]},{func:"YT",void:true,args:[[P.WO,T.yj]]},"changes","jsElem","extendee",{func:"zi",args:[null,P.qU,P.qU]},{func:"tw",args:[null,W.KV,P.SQ]},{func:"qj",ret:P.SQ,args:[null],named:{skipChanges:P.SQ}},"skipChanges",{func:"Gm",args:[[P.WO,T.yj]]},{func:"ppm",ret:U.vn,args:[U.rx,U.rx]},{func:"Qc",args:[U.rx]},{func:"Tz",void:true,args:[null,null]},"mutations","observer","id","map",{func:"rP",args:[V.qC]},{func:"rl6",ret:P.b8},"scriptCoverage","owningIsolate",{func:"K7",void:true,args:[[P.WO,P.KN]]},"counters",{func:"a6",ret:[P.b8,[P.WO,D.dy]],args:[D.vO]},"classList",{func:"ze",ret:[P.b8,D.dy],args:[[P.WO,D.dy]]},"classes","timer","newBpts",{func:"NuY",ret:P.qU,args:[D.kx]},{func:"qQ",void:true,args:[D.vx]},"script","func",{func:"T2",void:true,args:[P.qU,L.U2]},{func:"Riv",args:[P.V2]},{func:"T3G",args:[P.qU,L.U2]},"CloseEvent","Event",{func:"cOy",args:[W.cxu]},"msg","exp","details",{func:"D2",ret:A.Ap,args:[P.qU]},"ref",{func:"PzC",void:true,args:[[P.WO,G.Zq]]},"splices",{func:"U8",void:true,args:[W.hsw]},{func:"Vv",ret:P.qU,args:[P.a]},{func:"i8",ret:P.qU,args:[[P.WO,P.a]]},"values",{func:"nUs",ret:Z.lX,args:[P.qU],named:{map:P.T8}},"message","targets",];$=null
+init.metadata=["object","sender","e",{func:"pd",args:[P.qU]},{func:"a1",ret:P.lf},"closure","isolate","numberOfArguments","arg1","arg2","arg3","arg4",{func:"l4",args:[null]},"_",{func:"Pt",ret:P.qU,args:[P.KN]},"bytes",{func:"RJ",ret:P.qU,args:[null]},{func:"T9",void:true},{func:"LP",void:true,args:[{func:"T9",void:true}]},{func:"G5O",void:true,args:[null]},"value",{func:"Vx",void:true,args:[null],opt:[P.BpP]},,"error","stackTrace",{func:"rE",void:true,args:[P.JBS,P.e4y,P.JBS,null,P.BpP]},"self","parent","zone",{func:"h2",args:[P.JBS,P.e4y,P.JBS,{func:"ny"}]},"f",{func:"aE",args:[P.JBS,P.e4y,P.JBS,{func:"l4",args:[null]},null]},"arg",{func:"ta",args:[P.JBS,P.e4y,P.JBS,{func:"bh",args:[null,null]},null,null]},{func:"HQr",ret:{func:"ny"},args:[P.JBS,P.e4y,P.JBS,{func:"ny"}]},{func:"qs",ret:{func:"l4",args:[null]},args:[P.JBS,P.e4y,P.JBS,{func:"l4",args:[null]}]},{func:"tD",ret:{func:"bh",args:[null,null]},args:[P.JBS,P.e4y,P.JBS,{func:"bh",args:[null,null]}]},{func:"iV",void:true,args:[P.JBS,P.e4y,P.JBS,{func:"ny"}]},{func:"Uk",ret:P.kWp,args:[P.JBS,P.e4y,P.JBS,P.a6,{func:"T9",void:true}]},"duration","callback",{func:"zk",ret:P.kWp,args:[P.JBS,P.e4y,P.JBS,P.a6,{func:"JX",void:true,args:[P.kWp]}]},{func:"SA",void:true,args:[P.JBS,P.e4y,P.JBS,P.qU]},"line",{func:"DM",void:true,args:[P.qU]},{func:"Jj",ret:P.JBS,args:[P.JBS,P.e4y,P.JBS,P.n7,P.T8]},"specification","zoneValues",{func:"qa",ret:P.SQ,args:[null,null]},"a","b",{func:"bX",ret:P.KN,args:[null]},{func:"uJ",ret:P.a,args:[null]},{func:"Dl",ret:P.KN,args:[P.fRn,P.fRn]},{func:"I8",ret:P.SQ,args:[P.a,P.a]},{func:"ZY",ret:P.KN,args:[P.a]},"receiver",{func:"b3",args:[null,null,null,null]},"name","oldValue","newValue","captureThis","arguments","o",{func:"VH",ret:P.SQ,args:[P.IN]},"symbol","v",{func:"DW",ret:U.rx,args:[P.qU]},{func:"ZU",args:[U.rx,null],named:{globals:[P.T8,P.qU,P.a],oneTime:null}},!1,{func:"qq",ret:[P.QV,K.Aep],args:[P.QV]},"iterable",{func:"Tx",ret:P.KN,args:[D.af,D.af]},{func:"I6a",ret:P.qU},"invocation","fractionDigits",{func:"ny"},{func:"N4",args:[P.EH]},"code","key","val",{func:"bh",args:[null,null]},{func:"Za",args:[P.qU,null]},{func:"TS",args:[null,P.qU]},{func:"Yv",void:true,args:[null,null,null]},"c",{func:"Ab",void:true,args:[D.Mk]},"event",{func:"lrq",void:true,args:[D.N7]},{func:"Cj",void:true,args:[D.Ix]},"exception",{func:"Af",args:[D.wv]},"vm",{func:"wk",ret:P.SQ,args:[null]},"oldEvent",{func:"ai",void:true,args:[W.niR]},"obj","i","responseText",{func:"Om",args:[L.Z5,L.Z5]},{func:"HE",ret:P.KN,args:[P.KN,P.KN]},"column","done",{func:"Hj",ret:P.qU,args:[G.Y2]},"row",{func:"Sz",void:true,args:[W.ea,null,W.h4]},"detail","target","objectClass",{func:"Wr",ret:[P.b8,D.af],args:[P.qU]},"text",{func:"de",ret:[P.b8,D.af],args:[null]},"limit","dummy",{func:"Q5",args:[D.vO]},{func:"jB",args:[D.uq]},{func:"Np8",void:true,args:[W.ea,null,W.KV]},{func:"VI",args:[D.kx]},{func:"ux",void:true,args:[P.SQ,P.EH]},"expand","onDone","result",{func:"aG",void:true,args:[P.EH]},{func:"lJL",args:[{func:"T9",void:true}]},"data","theError","theStackTrace",{func:"Tw",args:[P.a]},{func:"YP",void:true,opt:[null]},{func:"uu",void:true,args:[P.a],opt:[P.BpP]},{func:"yV",args:[null],opt:[null]},{func:"Wy",ret:P.SQ},"ignored","convert","element",{func:"K5",args:[P.SQ]},{func:"a9",void:true,opt:[P.b8]},"resumeSignal",{func:"ha",args:[null,P.BpP]},{func:"N5",void:true,args:[null,P.BpP]},"each","k",{func:"DR",ret:P.KN,args:[null,P.KN]},{func:"v0",void:true,args:[P.KN,P.KN]},{func:"lv",args:[P.IN,null]},{func:"Tla",ret:P.KN,args:[P.qU]},{func:"cS",ret:P.Vf,args:[P.qU]},{func:"cd",ret:P.SQ,args:[P.KN]},{func:"wJ",ret:P.KN,args:[null,null]},"byteString",{func:"lu",void:true,args:[P.qU],opt:[null]},"xhr",{func:"bB",void:true,args:[W.AjY]},{func:"fK",args:[D.af]},{func:"IS",ret:O.Hz},"response","st",{func:"D8",void:true,args:[D.vO]},"newProfile",{func:"DT",ret:P.qU,args:[P.SQ]},"newSpace",{func:"Z5",args:[P.KN]},{func:"iR",args:[P.KN,null]},{func:"OE",ret:P.QV,args:[{func:"pd",args:[P.qU]}]},{func:"T5",ret:P.QV,args:[{func:"uW",ret:P.QV,args:[P.qU]}]},"s","m",{func:"KDY",ret:P.b8,args:[null]},"tagProfile","rec",{func:"IM",args:[N.HV]},{func:"d4C",void:true,args:[W.AjY,null,W.h4]},{func:"Ig",ret:P.qU,args:[P.qU]},"url",{func:"nxg",ret:P.qU,args:[P.Vf]},"time",{func:"FJ",ret:P.qU,args:[P.qU],opt:[P.SQ]},"wasTruncated",{func:"B4",args:[P.e4y,P.JBS]},{func:"djS",args:[P.JBS,P.e4y,P.JBS,{func:"l4",args:[null]}]},"x",{func:"VL8",void:true,args:[P.a,P.a]},"prop","records",{func:"My",args:[L.Zl,null]},"model","node","oneTime",{func:"cq",args:[null,null,null]},{func:"jk",void:true,args:[P.qU,P.qU]},{func:"aA",void:true,args:[P.WO,P.T8,P.WO]},{func:"YT",void:true,args:[[P.WO,T.yj]]},"changes","jsElem","extendee",{func:"zi",args:[null,P.qU,P.qU]},{func:"tw",args:[null,W.KV,P.SQ]},{func:"qj",ret:P.SQ,args:[null],named:{skipChanges:P.SQ}},"skipChanges",{func:"Gm",args:[[P.WO,T.yj]]},{func:"ppm",ret:U.vn,args:[U.rx,U.rx]},{func:"Qc",args:[U.rx]},{func:"Tz",void:true,args:[null,null]},"mutations","observer","id","map",{func:"rP",args:[V.qC]},{func:"rl6",ret:P.b8},"scriptCoverage","owningIsolate",{func:"K7",void:true,args:[[P.WO,P.KN]]},"counters",{func:"a6",ret:[P.b8,[P.WO,D.dy]],args:[D.vO]},"classList",{func:"ze",ret:[P.b8,D.dy],args:[[P.WO,D.dy]]},"classes","timer","newBpts",{func:"NuY",ret:P.qU,args:[D.kx]},{func:"qQ",void:true,args:[D.vx]},"script","func",{func:"T2",void:true,args:[P.qU,L.U2]},{func:"Riv",args:[P.V2]},{func:"T3G",args:[P.qU,L.U2]},"CloseEvent","Event",{func:"cOy",args:[W.cxu]},"msg",{func:"S0",void:true,args:[P.SQ,null]},"exp","details",{func:"D2",ret:A.Ap,args:[P.qU]},"ref","ifValue",{func:"PzC",void:true,args:[[P.WO,G.Zq]]},"splices",{func:"U8",void:true,args:[W.hsw]},{func:"Vv",ret:P.qU,args:[P.a]},{func:"i8",ret:P.qU,args:[[P.WO,P.a]]},"values",{func:"nUs",ret:Z.lX,args:[P.qU],named:{map:P.T8}},"message","targets",];$=null
 I = I.$finishIsolateConstructor(I)
 $=new I()
 function convertToFastObject(a){function MyClass(){}MyClass.prototype=a
@@ -23663,7 +23941,7 @@
 a[c]=y
 a[d]=function(){var w=$[c]
 try{if(w===y){$[c]=x
-try{w=$[c]=e()}finally{if(w===y)if($[c]===x)$[c]=null}}else{if(w===x)H.ag(b)}return w}finally{$[d]=function(){return this[c]}}}}
+try{w=$[c]=e()}finally{if(w===y)if($[c]===x)$[c]=null}}else{if(w===x)H.eQK(b)}return w}finally{$[d]=function(){return this[c]}}}}
 I.$finishIsolateConstructor=function(a){var y=a.p
 function Isolate(){var x=Object.prototype.hasOwnProperty
 for(var w in y)if(x.call(y,w))this[w]=y[w]
diff --git a/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html b/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html
index e5bdbcb..afb894c 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html
+++ b/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html
@@ -12,7 +12,7 @@
 <body><script src="packages/web_components/platform.js"></script>
 
 
-<!-- unminfied for debugging:
+<!-- unminified for debugging:
 <link rel="import" href="src/js/polymer/layout.html">
 <script src="src/js/polymer/polymer.concat.js"></script>
 -->
@@ -925,11 +925,17 @@
         <div title="{{ hoverText }}">{{ ref.valueAsString }}</div>
       </template>
 
-      <template if="{{ ref.isString || ref.isBool || ref.isInt || ref.isDouble || ref.isNull }}">
+      <template if="{{ ref.isBool || ref.isInt ||
+                       ref.isDouble || ref.isNull }}">
         <a on-click="{{ goto }}" _href="{{ url }}">{{ ref.valueAsString }}</a>
       </template>
 
-      <template if="{{ ref.isType }}">
+      <template if="{{ ref.isString }}">
+        <a on-click="{{ goto }}" _href="{{ url }}">{{ asStringLiteral(ref.valueAsString, ref.valueAsStringIsTruncated) }}</a>
+      </template>
+
+
+      <template if="{{ ref.isAbstractType }}">
         <a on-click="{{ goto }}" _href="{{ url }}">{{ ref.name }}</a>
       </template>
 
@@ -940,7 +946,7 @@
         </a>
       </template>
 
-      <template if="{{ ref.isInstance &amp;&amp; !ref.isClosure }}">
+      <template if="{{ ref.isPlainInstance }}">
         <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
         <curly-block callback="{{ expander() }}">
           <div class="memberList">
@@ -966,13 +972,47 @@
               <div class="memberItem">
                 <div class="memberName">[{{ element['index']}}]</div>
                 <div class="memberValue">
-                  <any-service-ref ref="{{ element['value'] }}">
-                </any-service-ref></div>
+                  <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
+                </div>
               </div>
             </template>
           </div>
         </curly-block>
       </template>
+
+      <template if="{{ ref.isMirrorReference }}">
+        <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
+        <curly-block callback="{{ expander() }}">
+          <div class="memberList">
+            <div class="memberItem">
+              <div class="memberName">referent</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ ref.referent }}"></any-service-ref>
+              </div>
+            </div>
+          </div>
+        </curly-block>
+      </template>
+
+      <template if="{{ ref.isWeakProperty }}">
+        <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
+        <curly-block callback="{{ expander() }}">
+          <div class="memberList">
+            <div class="memberItem">
+              <div class="memberName">key</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ ref.key }}"></any-service-ref>
+              </div>
+            </div>
+            <div class="memberItem">
+              <div class="memberName">value</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ ref.value }}"></any-service-ref>
+              </div>
+            </div>
+          </div>
+        </curly-block>
+      </template>
     </span>
   </template>
 </polymer-element>
@@ -2826,7 +2866,7 @@
   <template>
     <style>
       .textbox {
-        width: 80ex;
+        flex-grow: 1;
         font: 400 16px 'Montserrat', sans-serif;
       }
       .bigtextbox {
@@ -2837,9 +2877,10 @@
       }
       .radios {
         display: inline;
+        padding-right: 30px;
       }
       .radios label{
-        padding-left: 15px;
+        padding-left: 10px;
       }
       .historyExpr, .historyValue {
         vertical-align: text-top;
@@ -2861,7 +2902,7 @@
         padding: 6px 6px;
       }
     </style>
-    <form>
+    <form style="display:flex; flex-direction:row; align-items:flex-end">
       <template if="{{ lineMode == '1-line' }}">
         <input class="textbox" type="text" value="{{ text }}">
       </template>
@@ -2871,11 +2912,13 @@
 
       <input class="button" type="submit" value="Evaluate" on-click="{{ eval }}">
       <div class="radios" on-change="{{ updateLineMode }}">
-        <label for="1-line">1-line
+        <label for="1-line">
           <input type="radio" name="lineMode" value="1-line" checked="">
+          1-line
         </label>
-        <label for="N-line">N-line
+        <label for="N-line">
           <input type="radio" name="lineMode" value="N-line">
+          N-line
         </label>
       </div>
     </form>
@@ -4502,8 +4545,8 @@
     </div>
 
     <template if="{{ cls.error != null }}">
-      <error-ref ref="{{ cls.error }}">
-    </error-ref></template>
+      <error-ref ref="{{ cls.error }}"></error-ref>
+    </template>
 
     <hr>
 
@@ -14254,6 +14297,8 @@
 
 
 
+
+
 <polymer-element name="inbound-reference" extends="service-ref">
   <template>
     <style>
@@ -14532,6 +14577,639 @@
 </polymer-element>
 
 
+
+
+
+
+
+
+
+
+
+
+
+<polymer-element name="object-common" extends="observatory-element">
+  <template>
+    <style>
+/* Global styles */
+* {
+  margin: 0;
+  padding: 0;
+  font: 400 14px 'Montserrat', sans-serif;
+  color: #333;
+  box-sizing: border-box;
+}
+
+.content {
+  padding-left: 10%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.content-centered {
+  padding-left: 10%;
+  padding-right: 10%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.content-centered-big {
+  padding-left: 5%;
+  padding-right: 5%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+h1 {
+  font: 400 18px 'Montserrat', sans-serif;
+}
+
+.memberList {
+  display: table;
+}
+
+.memberItem {
+  display: table-row;
+}
+
+.memberName, .memberValue {
+  display: table-cell;
+  vertical-align: top;
+  padding: 3px 0 3px 1em;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.memberSmall {
+  display: table-cell;
+  vertical-align: top;
+  padding: 3px 0 3px 1em;
+  font: 400 12px 'Montserrat', sans-serif;
+}
+
+.monospace {
+  font-family: consolas, courier, monospace;
+  font-size: 1em;
+  line-height: 1.2em;
+  white-space: nowrap;
+}
+
+a {
+  color: #0489c3;
+  text-decoration: none;
+}
+
+a:hover {
+  text-decoration: underline;
+}
+
+em {
+  color: inherit;
+  font-style: italic;
+}
+
+b {
+  color: inherit;
+  font-weight: bold;
+}
+
+hr {
+  margin-top: 20px;
+  margin-bottom: 20px;
+  border: 0;
+  border-top: 1px solid #eee;
+  height: 0;
+  box-sizing: content-box;
+}
+
+.list-group {
+  padding-left: 0;
+  margin-bottom: 20px;
+}
+
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+  margin-bottom: -1px;
+  background-color: #fff;
+}
+
+.list-group-item:first-child {
+  /* rounded top corners */
+  border-top-right-radius:4px;
+  border-top-left-radius:4px;
+}
+
+.list-group-item:last-child {
+  margin-bottom: 0;
+  /* rounded bottom corners */
+  border-bottom-right-radius: 4px;
+  border-bottom-left-radius:4px;
+}
+
+/* Flex row container */
+.flex-row {
+  display: flex;
+  flex-direction: row;
+}
+
+/* Flex column container */
+.flex-column {
+  display: flex;
+  flex-direction: column;
+}
+
+.flex-item-fit {
+  flex-grow: 1;
+  flex-shrink: 1;
+  flex-basis: auto;
+}
+
+.flex-item-no-shrink {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: auto;
+}
+
+.flex-item-fill {
+  flex-grow: 0;
+  flex-shrink: 1;  /* shrink when pressured */
+  flex-basis: 100%;  /* try and take 100% */
+}
+
+.flex-item-fixed-1-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 8.3%;
+}
+
+.flex-item-fixed-2-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 16.6%;
+}
+
+.flex-item-fixed-4-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 33.3333%;
+}
+
+.flex-item-fixed-6-12, .flex-item-50-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 50%;
+}
+
+.flex-item-fixed-8-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 66.6666%;
+}
+
+.flex-item-fixed-9-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 75%;
+}
+
+
+.flex-item-fixed-12-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 100%;
+}
+
+.flex-item-10-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 10%;
+}
+
+.flex-item-15-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 15%;
+}
+
+.flex-item-20-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 20%;
+}
+
+.flex-item-30-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 30%;
+}
+
+.flex-item-40-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 40%;
+}
+
+.flex-item-50-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 50%;
+}
+
+.flex-item-60-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 60%;
+}
+
+.flex-item-70-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 70%;
+}
+
+.flex-item-80-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 80%;
+}
+
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  border-radius: 4px;
+  box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);
+}
+
+.break-wrap {
+  word-wrap: break-word;
+}
+</style>
+    <div class="memberList">
+
+      <div class="memberItem">
+        <div class="memberName">class</div>
+        <div class="memberValue">
+          <class-ref ref="{{ object.clazz }}"></class-ref>
+        </div>
+      </div>
+
+      <div class="memberItem" title="Space for this object in memory">
+        <div class="memberName">size</div>
+        <div class="memberValue">{{ object.size | formatSize }}</div>
+      </div>
+
+      <div class="memberItem" title="Space that would be reclaimed if references to this object were replaced with null">
+        <div class="memberName">retained size</div>
+        <div class="memberValue">
+          <template if="{{ retainedBytes == null }}">
+            <eval-link callback="{{ retainedSize }}" label="[calculate]">
+            </eval-link>
+          </template>
+          <template if="{{ retainedBytes != null }}">
+            {{ retainedBytes | formatSize }}
+          </template>
+        </div>
+      </div>
+
+      <div class="memberItem">
+        <div class="memberName">retaining path</div>
+        <div class="memberValue">
+          <template if="{{ path == null }}">
+            <eval-link callback="{{ retainingPath }}" label="[find]" expr="10">
+            </eval-link>
+          </template>
+          <template if="{{ path != null }}">
+            <template repeat="{{ element in path['elements'] }}">
+            <div class="memberItem">
+              <div class="memberName">[{{ element['index']}}]</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
+                <template if="{{ element['parentField'] != null }}">
+                  in <field-ref ref="{{ element['parentField'] }}"></field-ref> of
+                </template>
+                <template if="{{ element['parentListIndex'] != null }}">
+                  in [{{ element['parentListIndex'] }}] of
+                </template>
+              </div>
+              </div>
+            </template>
+            <template if="{{ path['length'] > path['elements'].length }}">
+              showing {{ path['elements'].length }} of {{ path['length'] }}
+              <eval-link callback="{{ retainingPath }}" label="[find more]" expr="{{ path['elements'].length * 2 }}">
+              </eval-link>
+            </template>
+          </template>
+        </div>
+      </div>
+
+      <div class="memberItem" title="Objects which directly reference this object">
+        <div class="memberName">inbound references</div>
+        <div class="memberValue">
+          <template if="{{ inboundReferences == null }}">
+            <eval-link callback="{{ fetchInboundReferences }}" label="[find]" expr="100">
+            </eval-link>
+          </template>
+          <template if="{{ inboundReferences != null }}">
+            <template repeat="{{ reference in inboundReferences['references'] }}">
+              <inbound-reference ref="{{ reference }}"></inbound-reference>
+            </template>
+          </template>
+        </div>
+      </div>
+
+   </div>
+  </template>
+</polymer-element>
+
+
+
+
+
+
+
+<polymer-element name="context-ref" extends="service-ref">
+  <template>
+    <style>
+/* Global styles */
+* {
+  margin: 0;
+  padding: 0;
+  font: 400 14px 'Montserrat', sans-serif;
+  color: #333;
+  box-sizing: border-box;
+}
+
+.content {
+  padding-left: 10%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.content-centered {
+  padding-left: 10%;
+  padding-right: 10%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.content-centered-big {
+  padding-left: 5%;
+  padding-right: 5%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+h1 {
+  font: 400 18px 'Montserrat', sans-serif;
+}
+
+.memberList {
+  display: table;
+}
+
+.memberItem {
+  display: table-row;
+}
+
+.memberName, .memberValue {
+  display: table-cell;
+  vertical-align: top;
+  padding: 3px 0 3px 1em;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.memberSmall {
+  display: table-cell;
+  vertical-align: top;
+  padding: 3px 0 3px 1em;
+  font: 400 12px 'Montserrat', sans-serif;
+}
+
+.monospace {
+  font-family: consolas, courier, monospace;
+  font-size: 1em;
+  line-height: 1.2em;
+  white-space: nowrap;
+}
+
+a {
+  color: #0489c3;
+  text-decoration: none;
+}
+
+a:hover {
+  text-decoration: underline;
+}
+
+em {
+  color: inherit;
+  font-style: italic;
+}
+
+b {
+  color: inherit;
+  font-weight: bold;
+}
+
+hr {
+  margin-top: 20px;
+  margin-bottom: 20px;
+  border: 0;
+  border-top: 1px solid #eee;
+  height: 0;
+  box-sizing: content-box;
+}
+
+.list-group {
+  padding-left: 0;
+  margin-bottom: 20px;
+}
+
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+  margin-bottom: -1px;
+  background-color: #fff;
+}
+
+.list-group-item:first-child {
+  /* rounded top corners */
+  border-top-right-radius:4px;
+  border-top-left-radius:4px;
+}
+
+.list-group-item:last-child {
+  margin-bottom: 0;
+  /* rounded bottom corners */
+  border-bottom-right-radius: 4px;
+  border-bottom-left-radius:4px;
+}
+
+/* Flex row container */
+.flex-row {
+  display: flex;
+  flex-direction: row;
+}
+
+/* Flex column container */
+.flex-column {
+  display: flex;
+  flex-direction: column;
+}
+
+.flex-item-fit {
+  flex-grow: 1;
+  flex-shrink: 1;
+  flex-basis: auto;
+}
+
+.flex-item-no-shrink {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: auto;
+}
+
+.flex-item-fill {
+  flex-grow: 0;
+  flex-shrink: 1;  /* shrink when pressured */
+  flex-basis: 100%;  /* try and take 100% */
+}
+
+.flex-item-fixed-1-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 8.3%;
+}
+
+.flex-item-fixed-2-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 16.6%;
+}
+
+.flex-item-fixed-4-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 33.3333%;
+}
+
+.flex-item-fixed-6-12, .flex-item-50-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 50%;
+}
+
+.flex-item-fixed-8-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 66.6666%;
+}
+
+.flex-item-fixed-9-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 75%;
+}
+
+
+.flex-item-fixed-12-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 100%;
+}
+
+.flex-item-10-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 10%;
+}
+
+.flex-item-15-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 15%;
+}
+
+.flex-item-20-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 20%;
+}
+
+.flex-item-30-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 30%;
+}
+
+.flex-item-40-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 40%;
+}
+
+.flex-item-50-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 50%;
+}
+
+.flex-item-60-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 60%;
+}
+
+.flex-item-70-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 70%;
+}
+
+.flex-item-80-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 80%;
+}
+
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  border-radius: 4px;
+  box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);
+}
+
+.break-wrap {
+  word-wrap: break-word;
+}
+</style>
+    <span>
+      <a on-click="{{ goto }}" _href="{{ url }}"><em>Context</em> ({{ ref.length }})</a>
+      <curly-block callback="{{ expander() }}">
+        <div class="memberList">
+          <div class="memberItem">
+            <div class="memberName">parent</div>
+            <div class="memberValue">
+              <any-service-ref ref="{{ ref.parentContext }}"></any-service-ref>
+            </div>
+          </div>
+          <template repeat="{{ variable in ref.variables }}">
+            <div class="memberItem">
+              <div class="memberName">[{{ variable['index']}}]</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ variable['value'] }}"></any-service-ref>
+              </div>
+            </div>
+          </template>
+        </div>
+      </curly-block>
+    </span>
+  </template>
+</polymer-element>
+
+
 <polymer-element name="instance-view" extends="observatory-element">
   <template>
     <style>
@@ -14805,86 +15483,42 @@
 
     <template if="{{ !instance.isError }}">
       <div class="content">
-        <template if="{{ instance.isType }}">
+        <template if="{{ instance.isAbstractType }}">
           <h1>type {{ instance.name }}</h1>
         </template>
-        <template if="{{ !instance.isType }}">
+        <template if="{{ !instance.isAbstractType }}">
           <h1>instance of {{ instance.clazz.name }}</h1>
         </template>
+
+        <object-common object="{{ instance }}"></object-common>
+
         <div class="memberList">
-          <div class="memberItem">
-            <div class="memberName">class</div>
-            <div class="memberValue">
-              <class-ref ref="{{ instance.clazz }}">
-              </class-ref>
-            </div>
-          </div>
+          <div class="memberItem">&nbsp;</div>
+
           <template if="{{ instance.valueAsString != null }}">
             <div class="memberItem">
               <div class="memberName">value</div>
               <div class="memberValue">{{ instance.valueAsString }}</div>
             </div>
           </template>
-          <div class="memberItem" title="Space for this object in memory">
-            <div class="memberName">size</div>
-            <div class="memberValue">{{ instance.size | formatSize }}</div>
-          </div>
-          <div class="memberItem" title="Space that would be reclaimed if references to this object were replaced with null">
-            <div class="memberName">retained size</div>
-            <div class="memberValue">
-              <template if="{{ retainedBytes == null }}">
-                <eval-link callback="{{ retainedSize }}" label="[calculate]">
-                </eval-link>
-              </template>
-              <template if="{{ retainedBytes != null }}">
-                {{ retainedBytes | formatSize }}
-              </template>
+
+          <template if="{{ instance.isString }}">
+            <div class="memberItem">
+              <div class="memberName">valueAsLiteral</div>
+              <div class="memberValue"> {{ asStringLiteral(instance.valueAsString, instance.valueAsStringIsTruncated) }}</div>
             </div>
-          </div>
-          <div class="memberItem">
-            <div class="memberName">retaining path</div>
-            <div class="memberValue">
-              <template if="{{ path == null }}">
-                <eval-link callback="{{ retainingPath }}" label="[find]" expr="10">
-                </eval-link>
-              </template>
-              <template if="{{ path != null }}">
-                <template repeat="{{ element in path['elements'] }}">
-                <div class="memberItem">
-                  <div class="memberName">[{{ element['index']}}]</div>
-                  <div class="memberValue">
-                    <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
-                    <template if="{{ element['parentField'] != null }}">
-                      in <field-ref ref="{{ element['parentField'] }}"></field-ref> of
-                    </template>
-                    <template if="{{ element['parentListIndex'] != null }}">
-                      in [{{ element['parentListIndex'] }}] of
-                    </template>
-                  </div>
-                  </div>
-                </template>
-                <template if="{{ path['length'] > path['elements'].length }}">
-                  showing {{ path['elements'].length }} of {{ path['length'] }}
-                  <eval-link callback="{{ retainingPath }}" label="[find more]" expr="{{ path['elements'].length * 2 }}">
-                  </eval-link>
-                </template>
-              </template>
+          </template>
+
+          <template if="{{ instance.isMirrorReference }}">
+            <div class="memberItem">
+              <div class="memberName">referent</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.referent }}">
+                </any-service-ref>
+              </div>
             </div>
-          </div>
-          <div class="memberItem" title="Objects which directly reference this object">
-            <div class="memberName">inbound references</div>
-            <div class="memberValue">
-              <template if="{{ inboundReferences == null }}">
-                <eval-link callback="{{ fetchInboundReferences }}" label="[find]" expr="100">
-                </eval-link>
-              </template>
-              <template if="{{ inboundReferences != null }}">
-                <template repeat="{{ reference in inboundReferences['references'] }}">
-                  <inbound-reference ref="{{ reference }}"></inbound-reference>
-                </template>
-              </template>
-            </div>
-          </div>
+          </template>
+
           <template if="{{ instance.typeClass != null }}">
             <div class="memberItem">
               <div class="memberName">type class</div>
@@ -14894,6 +15528,7 @@
               </div>
             </div>
           </template>
+
           <template if="{{ instance.isClosure }}">
             <div class="memberItem">
               <div class="memberName">closure function</div>
@@ -14903,8 +15538,32 @@
               </div>
             </div>
           </template>
+          <template if="{{ instance.isClosure }}">
+            <div class="memberItem">
+              <div class="memberName">closure context</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.closureCtxt }}">
+                </any-service-ref>
+              </div>
+            </div>
+          </template>
 
-          <div class="memberItem">&nbsp;</div>
+          <template if="{{ instance.isWeakProperty }}">
+            <div class="memberItem">
+              <div class="memberName">key</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.key }}">
+                </any-service-ref>
+              </div>
+            </div>
+            <div class="memberItem">
+              <div class="memberName">value</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.value }}">
+                </any-service-ref>
+              </div>
+            </div>
+          </template>
 
           <div class="memberItem">
             <div class="memberName">toString()</div>
@@ -14918,6 +15577,20 @@
       <hr>
 
       <div class="content">
+        <template if="{{ instance.nativeFields.isNotEmpty }}">
+          native fields ({{ instance.nativeFields.length }})
+          <curly-block expand="{{ instance.nativeFields.length <= 8 }}">
+            <div class="memberList">
+              <template repeat="{{ field in instance.nativeFields }}">
+                <div class="memberItem">
+                  <div class="memberName">[{{ field['index']}}]</div>
+                  <div class="memberValue">[{{ field['value']}}]</div>
+                </div>
+              </template>
+            </div>
+          </curly-block><br><br>
+        </template>
+
         <template if="{{ instance.fields.isNotEmpty }}">
           fields ({{ instance.fields.length }})
           <curly-block expand="{{ instance.fields.length <= 8 }}">
@@ -14936,20 +15609,6 @@
           </curly-block><br><br>
         </template>
 
-        <template if="{{ instance.nativeFields.isNotEmpty }}">
-          native fields ({{ instance.nativeFields.length }})
-          <curly-block expand="{{ instance.nativeFields.length <= 8 }}">
-            <div class="memberList">
-              <template repeat="{{ field in instance.nativeFields }}">
-                <div class="memberItem">
-                  <div class="memberName">[{{ field['index']}}]</div>
-                  <div class="memberValue">[{{ field['value']}}]</div>
-                </div>
-              </template>
-            </div>
-          </curly-block><br><br>
-        </template>
-
         <template if="{{ instance.elements.isNotEmpty }}">
           elements ({{ instance.elements.length }})
           <curly-block expand="{{ instance.elements.length <= 8 }}">
@@ -14958,9 +15617,8 @@
                 <div class="memberItem">
                   <div class="memberName">[{{ element['index']}}]</div>
                   <div class="memberValue">
-                    <any-service-ref ref="{{ element['value'] }}">
-                    
-                  </any-service-ref></div>
+                    <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
+                  </div>
                 </div>
               </template>
             </div>
@@ -14973,6 +15631,7 @@
       <div class="content">
         <eval-box callback="{{ eval }}"></eval-box>
       </div>
+
       <br><br><br><br>
       <br><br><br><br>
 
@@ -16315,6 +16974,330 @@
 
 
 
+
+
+
+
+
+
+<polymer-element name="context-view" extends="observatory-element">
+  <template>
+    <style>
+/* Global styles */
+* {
+  margin: 0;
+  padding: 0;
+  font: 400 14px 'Montserrat', sans-serif;
+  color: #333;
+  box-sizing: border-box;
+}
+
+.content {
+  padding-left: 10%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.content-centered {
+  padding-left: 10%;
+  padding-right: 10%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.content-centered-big {
+  padding-left: 5%;
+  padding-right: 5%;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+h1 {
+  font: 400 18px 'Montserrat', sans-serif;
+}
+
+.memberList {
+  display: table;
+}
+
+.memberItem {
+  display: table-row;
+}
+
+.memberName, .memberValue {
+  display: table-cell;
+  vertical-align: top;
+  padding: 3px 0 3px 1em;
+  font: 400 14px 'Montserrat', sans-serif;
+}
+
+.memberSmall {
+  display: table-cell;
+  vertical-align: top;
+  padding: 3px 0 3px 1em;
+  font: 400 12px 'Montserrat', sans-serif;
+}
+
+.monospace {
+  font-family: consolas, courier, monospace;
+  font-size: 1em;
+  line-height: 1.2em;
+  white-space: nowrap;
+}
+
+a {
+  color: #0489c3;
+  text-decoration: none;
+}
+
+a:hover {
+  text-decoration: underline;
+}
+
+em {
+  color: inherit;
+  font-style: italic;
+}
+
+b {
+  color: inherit;
+  font-weight: bold;
+}
+
+hr {
+  margin-top: 20px;
+  margin-bottom: 20px;
+  border: 0;
+  border-top: 1px solid #eee;
+  height: 0;
+  box-sizing: content-box;
+}
+
+.list-group {
+  padding-left: 0;
+  margin-bottom: 20px;
+}
+
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+  margin-bottom: -1px;
+  background-color: #fff;
+}
+
+.list-group-item:first-child {
+  /* rounded top corners */
+  border-top-right-radius:4px;
+  border-top-left-radius:4px;
+}
+
+.list-group-item:last-child {
+  margin-bottom: 0;
+  /* rounded bottom corners */
+  border-bottom-right-radius: 4px;
+  border-bottom-left-radius:4px;
+}
+
+/* Flex row container */
+.flex-row {
+  display: flex;
+  flex-direction: row;
+}
+
+/* Flex column container */
+.flex-column {
+  display: flex;
+  flex-direction: column;
+}
+
+.flex-item-fit {
+  flex-grow: 1;
+  flex-shrink: 1;
+  flex-basis: auto;
+}
+
+.flex-item-no-shrink {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: auto;
+}
+
+.flex-item-fill {
+  flex-grow: 0;
+  flex-shrink: 1;  /* shrink when pressured */
+  flex-basis: 100%;  /* try and take 100% */
+}
+
+.flex-item-fixed-1-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 8.3%;
+}
+
+.flex-item-fixed-2-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 16.6%;
+}
+
+.flex-item-fixed-4-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 33.3333%;
+}
+
+.flex-item-fixed-6-12, .flex-item-50-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 50%;
+}
+
+.flex-item-fixed-8-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 66.6666%;
+}
+
+.flex-item-fixed-9-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 75%;
+}
+
+
+.flex-item-fixed-12-12 {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 100%;
+}
+
+.flex-item-10-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 10%;
+}
+
+.flex-item-15-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 15%;
+}
+
+.flex-item-20-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 20%;
+}
+
+.flex-item-30-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 30%;
+}
+
+.flex-item-40-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 40%;
+}
+
+.flex-item-50-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 50%;
+}
+
+.flex-item-60-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 60%;
+}
+
+.flex-item-70-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 70%;
+}
+
+.flex-item-80-percent {
+  flex-grow: 0;
+  flex-shrink: 0;
+  flex-basis: 80%;
+}
+
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  border-radius: 4px;
+  box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);
+}
+
+.break-wrap {
+  word-wrap: break-word;
+}
+</style>
+    <nav-bar>
+      <top-nav-menu></top-nav-menu>
+      <isolate-nav-menu isolate="{{ context.isolate }}"></isolate-nav-menu>
+      <!-- TODO(turnidge): Add library nav menu here. -->
+      <class-nav-menu cls="{{ context.clazz }}"></class-nav-menu>
+      <nav-menu link="." anchor="instance" last="{{ true }}"></nav-menu>
+      <nav-refresh callback="{{ refresh }}"></nav-refresh>
+      <nav-control></nav-control>
+    </nav-bar>
+
+    <template if="{{ !context.isError }}">
+      <div class="content">
+        <h1>instance of Context</h1>
+
+        <object-common object="{{ context }}"></object-common>
+
+        <div class="memberList">
+          <div class="memberItem">&nbsp;</div>
+
+          <div class="memberItem">
+            <div class="memberName">parent context</div>
+            <div class="memberValue">
+              <any-service-ref ref="{{ context.parentContext }}"></any-service-ref>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <hr>
+
+      <div class="content">
+        <template if="{{ context.variables.isNotEmpty }}">
+          variables ({{ context.variables.length }})
+          <curly-block expand="{{ context.variables.length <= 8 }}">
+            <div class="memberList">
+              <template repeat="{{ variable in context.variables }}">
+                <div class="memberItem">
+                  <div class="memberName">[{{ variable['index']}}]</div>
+                  <div class="memberValue">
+                    <any-service-ref ref="{{ variable['value'] }}"></any-service-ref>
+                  </div>
+                </div>
+              </template>
+            </div>
+          </curly-block><br><br>
+        </template>
+      </div>
+
+      <br><br><br><br>
+      <br><br><br><br>
+
+    </template>
+  </template>
+</polymer-element>
+
+
+
+
+
+
+
 <polymer-element name="heap-profile" extends="observatory-element">
 <template>
   <style>
diff --git a/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html._data b/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html._data
index 6e6bdc5..1ec5d7a 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html._data
+++ b/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html._data
@@ -1 +1 @@
-{"experimental_bootstrap":false,"script_ids":[["observatory","lib/src/elements/curly_block.dart"],["observatory","lib/src/elements/observatory_element.dart"],["observatory","lib/src/elements/service_ref.dart"],["observatory","lib/src/elements/instance_ref.dart"],["observatory","lib/src/elements/action_link.dart"],["observatory","lib/src/elements/nav_bar.dart"],["observatory","lib/src/elements/breakpoint_list.dart"],["observatory","lib/src/elements/class_ref.dart"],["observatory","lib/src/elements/class_tree.dart"],["observatory","lib/src/elements/error_ref.dart"],["observatory","lib/src/elements/eval_box.dart"],["observatory","lib/src/elements/eval_link.dart"],["observatory","lib/src/elements/field_ref.dart"],["observatory","lib/src/elements/function_ref.dart"],["observatory","lib/src/elements/library_ref.dart"],["observatory","lib/src/elements/script_inset.dart"],["observatory","lib/src/elements/script_ref.dart"],["observatory","lib/src/elements/class_view.dart"],["observatory","lib/src/elements/code_ref.dart"],["observatory","lib/src/elements/code_view.dart"],["observatory","lib/src/elements/error_view.dart"],["observatory","lib/src/elements/field_view.dart"],["observatory","lib/src/elements/stack_frame.dart"],["observatory","lib/src/elements/flag_list.dart"],["observatory","lib/src/elements/function_view.dart"],["observatory","lib/src/elements/heap_map.dart"],["observatory","lib/src/elements/io_view.dart"],["observatory","lib/src/elements/isolate_ref.dart"],["observatory","lib/src/elements/isolate_summary.dart"],["observatory","lib/src/elements/isolate_view.dart"],["observatory","lib/src/elements/inbound_reference.dart"],["observatory","lib/src/elements/instance_view.dart"],["observatory","lib/src/elements/json_view.dart"],["observatory","lib/src/elements/library_view.dart"],["observatory","lib/src/elements/metrics.dart"],["observatory","lib/src/elements/heap_profile.dart"],["observatory","lib/src/elements/sliding_checkbox.dart"],["observatory","lib/src/elements/isolate_profile.dart"],["observatory","lib/src/elements/script_view.dart"],["observatory","lib/src/elements/stack_trace.dart"],["observatory","lib/src/elements/vm_view.dart"],["observatory","lib/src/elements/service_view.dart"],["observatory","lib/src/elements/observatory_application.dart"],["observatory","lib/src/elements/service_exception_view.dart"],["observatory","lib/src/elements/service_error_view.dart"],["observatory","lib/src/elements/vm_connect.dart"],["observatory","lib/src/elements/vm_ref.dart"],["observatory","web/main.dart"]]}
\ No newline at end of file
+{"experimental_bootstrap":false,"script_ids":[["observatory","lib/src/elements/curly_block.dart"],["observatory","lib/src/elements/observatory_element.dart"],["observatory","lib/src/elements/service_ref.dart"],["observatory","lib/src/elements/instance_ref.dart"],["observatory","lib/src/elements/action_link.dart"],["observatory","lib/src/elements/nav_bar.dart"],["observatory","lib/src/elements/breakpoint_list.dart"],["observatory","lib/src/elements/class_ref.dart"],["observatory","lib/src/elements/class_tree.dart"],["observatory","lib/src/elements/error_ref.dart"],["observatory","lib/src/elements/eval_box.dart"],["observatory","lib/src/elements/eval_link.dart"],["observatory","lib/src/elements/field_ref.dart"],["observatory","lib/src/elements/function_ref.dart"],["observatory","lib/src/elements/library_ref.dart"],["observatory","lib/src/elements/script_inset.dart"],["observatory","lib/src/elements/script_ref.dart"],["observatory","lib/src/elements/class_view.dart"],["observatory","lib/src/elements/code_ref.dart"],["observatory","lib/src/elements/code_view.dart"],["observatory","lib/src/elements/error_view.dart"],["observatory","lib/src/elements/field_view.dart"],["observatory","lib/src/elements/stack_frame.dart"],["observatory","lib/src/elements/flag_list.dart"],["observatory","lib/src/elements/function_view.dart"],["observatory","lib/src/elements/heap_map.dart"],["observatory","lib/src/elements/io_view.dart"],["observatory","lib/src/elements/isolate_ref.dart"],["observatory","lib/src/elements/isolate_summary.dart"],["observatory","lib/src/elements/isolate_view.dart"],["observatory","lib/src/elements/inbound_reference.dart"],["observatory","lib/src/elements/object_common.dart"],["observatory","lib/src/elements/context_ref.dart"],["observatory","lib/src/elements/instance_view.dart"],["observatory","lib/src/elements/json_view.dart"],["observatory","lib/src/elements/library_view.dart"],["observatory","lib/src/elements/metrics.dart"],["observatory","lib/src/elements/context_view.dart"],["observatory","lib/src/elements/heap_profile.dart"],["observatory","lib/src/elements/sliding_checkbox.dart"],["observatory","lib/src/elements/isolate_profile.dart"],["observatory","lib/src/elements/script_view.dart"],["observatory","lib/src/elements/stack_trace.dart"],["observatory","lib/src/elements/vm_view.dart"],["observatory","lib/src/elements/service_view.dart"],["observatory","lib/src/elements/observatory_application.dart"],["observatory","lib/src/elements/service_exception_view.dart"],["observatory","lib/src/elements/service_error_view.dart"],["observatory","lib/src/elements/vm_connect.dart"],["observatory","lib/src/elements/vm_ref.dart"],["observatory","web/main.dart"]]}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html_bootstrap.dart.js b/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html_bootstrap.dart.js
index 68f3703..e4629fc 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html_bootstrap.dart.js
+++ b/runtime/bin/vmservice/observatory/deployed/web/index_devtools.html_bootstrap.dart.js
@@ -169,21 +169,21 @@
 if(w==null){y=Object.getPrototypeOf(a)
 if(y==null||y===Object.prototype)return C.Sx
 else return C.vB}return w},
-rQ:function(a){var z,y,x,w
+e1g:function(a){var z,y,x,w
 z=$.AuW
 if(z==null)return
 y=z
 for(z=y.length,x=J.x(a),w=0;w+1<z;w+=3){if(w>=z)return H.e(y,w)
 if(x.n(a,y[w]))return w}return},
 Dc:function(a){var z,y,x
-z=J.rQ(a)
+z=J.e1g(a)
 if(z==null)return
 y=$.AuW
 x=z+1
 if(x>=y.length)return H.e(y,x)
 return y[x]},
 KE:function(a,b){var z,y,x
-z=J.rQ(a)
+z=J.e1g(a)
 if(z==null)return
 y=$.AuW
 x=z+2
@@ -274,7 +274,7 @@
 if(c<b||c>z)throw H.b(P.TE(c,b,z))
 H.tb(a,c,a,b,z-c)
 this.sB(a,z-(c-b))},
-Vr:function(a,b){return H.CkK(a,b)},
+Vr:function(a,b){return H.Ck(a,b)},
 GT:function(a,b){if(!!a.immutable$list)H.vh(P.f("sort"))
 H.ig(a,b)},
 Jd:function(a){return this.GT(a,null)},
@@ -460,7 +460,6 @@
 if(J.xZ(c,a.length))throw H.b(P.N(c))
 return a.substring(b,c)},
 yn:function(a,b){return this.Nj(a,b,null)},
-hc:function(a){return a.toLowerCase()},
 bS:function(a){var z,y,x,w,v
 z=a.trim()
 y=z.length
@@ -480,7 +479,7 @@
 b=b>>>1
 if(b===0)break
 z+=z}return y},
-gNq:function(a){return new J.mN(a)},
+gNq:function(a){return new J.IA(a)},
 XU:function(a,b,c){var z,y,x,w
 if(b==null)H.vh(P.u(null))
 if(c<0||c>a.length)throw H.b(P.TE(c,0,a.length))
@@ -531,11 +530,11 @@
 if(y>=z)H.vh(P.N(y))
 x=a.charCodeAt(y)
 if(x!==32&&x!==13&&!J.Ga(x))break}return b}}},
-mN:{
-"^":"w2Y;Bx",
-gB:function(a){return this.Bx.length},
+IA:{
+"^":"w2Y;vF",
+gB:function(a){return this.vF.length},
 t:function(a,b){var z,y
-z=this.Bx
+z=this.vF
 if(typeof b!=="number"||Math.floor(b)!==b)H.vh(P.u(b))
 y=J.Wx(b)
 if(y.C(b,0))H.vh(P.N(b))
@@ -568,7 +567,7 @@
 x=P.L5(null,null,null,P.KN,H.yo)
 w=P.Ls(null,null,null,P.KN)
 v=new H.yo(0,null,!1)
-u=new H.aX(y,x,w,new I(),v,new H.Vh(H.rp()),new H.Vh(H.rp()),!1,!1,[],P.Ls(null,null,null,null),null,null,!1,!0,P.Ls(null,null,null,null))
+u=new H.aX(y,x,w,new I(),v,new H.kuS(H.rp()),new H.kuS(H.rp()),!1,!1,[],P.Ls(null,null,null,null),null,null,!1,!0,P.Ls(null,null,null,null))
 w.h(0,0)
 u.ac(0,v)
 init.globalState.Nr=u
@@ -608,7 +607,7 @@
 q=P.L5(null,null,null,P.KN,H.yo)
 p=P.Ls(null,null,null,P.KN)
 o=new H.yo(0,null,!1)
-n=new H.aX(y,q,p,new I(),o,new H.Vh(H.rp()),new H.Vh(H.rp()),!1,!1,[],P.Ls(null,null,null,null),null,null,!1,!0,P.Ls(null,null,null,null))
+n=new H.aX(y,q,p,new I(),o,new H.kuS(H.rp()),new H.kuS(H.rp()),!1,!1,[],P.Ls(null,null,null,null),null,null,!1,!0,P.Ls(null,null,null,null))
 p.h(0,0)
 n.ac(0,o)
 init.globalState.Xz.Rk.B7(0,new H.IY(n,new H.MA(w,v,u,t,s,r),"worker-start"))
@@ -680,7 +679,7 @@
 this.ji=y
 this.Ws=z&&!x
 y=H.IY
-x=H.VM(new P.Sw(null,0,0,0),[y])
+x=H.VM(new P.nd(null,0,0,0),[y])
 x.Eo(null,y)
 this.Xz=new H.ae(x,0)
 this.i2=P.L5(null,null,null,P.KN,H.aX)
@@ -727,7 +726,7 @@
 return}y=new H.NYh(a)
 if(z.n(b,2)){init.globalState.Xz.Rk.B7(0,new H.IY(this,y,"ping"))
 return}z=this.fB
-if(z==null){z=H.VM(new P.Sw(null,0,0,0),[null])
+if(z==null){z=H.VM(new P.nd(null,0,0,0),[null])
 z.Eo(null,null)
 this.fB=z}z.B7(0,y)},
 w1:function(a,b){var z,y
@@ -740,7 +739,7 @@
 y=this.gIm()
 z.Rk.B7(0,new H.IY(this,y,"kill"))
 return}z=this.fB
-if(z==null){z=H.VM(new P.Sw(null,0,0,0),[null])
+if(z==null){z=H.VM(new P.nd(null,0,0,0),[null])
 z.Eo(null,null)
 this.fB=z}z.B7(0,this.gIm())},
 hk:function(a,b){var z,y
@@ -840,9 +839,9 @@
 P.cH(C.ny,this)},"$0",null,0,0,null,"call"],
 $isEH:true},
 IY:{
-"^":"a;od*,i3,G1>",
+"^":"a;od*,xh,G1>",
 Fn:[function(a){if(this.od.gUF()){this.od.gC9().push(this)
-return}J.QT(this.od,this.i3)},"$0","gpE",0,0,17],
+return}J.QT(this.od,this.xh)},"$0","gpE",0,0,17],
 $isIY:true},
 JH:{
 "^":"a;"},
@@ -896,7 +895,7 @@
 if(!z.geL()){if(this.c){y=this.a
 y.a=H.Ln(y.a)}J.Pc(z,this.a.a)}},"$0",null,0,0,null,"call"],
 $isEH:true},
-ns:{
+bM:{
 "^":"Iy4;Bi,ma,AJ",
 wR:function(a,b){var z,y
 z=H.GyL(P.EF(["command","message","port",this,"msg",b],null,null))
@@ -904,14 +903,14 @@
 self.postMessage(z)}else{y=init.globalState.XC.t(0,this.Bi)
 if(y!=null)y.postMessage(z)}},
 n:function(a,b){if(b==null)return!1
-return!!J.x(b).$isns&&J.xC(this.Bi,b.Bi)&&J.xC(this.AJ,b.AJ)&&J.xC(this.ma,b.ma)},
+return!!J.x(b).$isbM&&J.xC(this.Bi,b.Bi)&&J.xC(this.AJ,b.AJ)&&J.xC(this.ma,b.ma)},
 giO:function(a){var z,y,x
 z=J.Eh(this.Bi,16)
 y=J.Eh(this.AJ,8)
 x=this.ma
 if(typeof x!=="number")return H.s(x)
 return(z^y^x)>>>0},
-$isns:true,
+$isbM:true,
 $ispW:true,
 $ishq:true},
 yo:{
@@ -935,16 +934,16 @@
 RS:{
 "^":"hz;uP,dZ",
 DE:function(a){if(!!a.$isKg)return["sendport",init.globalState.NO,a.AJ,J.Rr(a.kx)]
-if(!!a.$isns)return["sendport",a.Bi,a.AJ,a.ma]
+if(!!a.$isbM)return["sendport",a.Bi,a.AJ,a.ma]
 throw H.b("Illegal underlying port "+a.bu(0))},
-yf:function(a){if(!!a.$isVh)return["capability",a.a7]
+yf:function(a){if(!!a.$iskuS)return["capability",a.a7]
 throw H.b("Capability not serializable: "+a.bu(0))}},
 fL:{
 "^":"ooy;dZ",
 DE:function(a){if(!!a.$isKg)return new H.Kg(a.kx,a.AJ)
-if(!!a.$isns)return new H.ns(a.Bi,a.ma,a.AJ)
+if(!!a.$isbM)return new H.bM(a.Bi,a.ma,a.AJ)
 throw H.b("Illegal underlying port "+a.bu(0))},
-yf:function(a){if(!!a.$isVh)return new H.Vh(a.a7)
+yf:function(a){if(!!a.$iskuS)return new H.kuS(a.a7)
 throw H.b("Capability not serializable: "+a.bu(0))}},
 EU:{
 "^":"fPc;Bw",
@@ -957,8 +956,8 @@
 if(v==null)return
 u=v.hV(w)
 if(u==null)return
-return new H.Kg(u,x)}else return new H.ns(y,w,x)},
-Op:function(a){return new H.Vh(J.UQ(a,1))}},
+return new H.Kg(u,x)}else return new H.bM(y,w,x)},
+Op:function(a){return new H.kuS(J.UQ(a,1))}},
 m3:{
 "^":"a;At",
 t:function(a,b){return b.__MessageTraverser__attached_info__},
@@ -975,7 +974,7 @@
 u:function(a,b,c){},
 CH:function(a){},
 F4:function(){}},
-BB:{
+HU5:{
 "^":"a;",
 h7:function(a){var z
 if(H.vM(a))return this.Wp(a)
@@ -992,7 +991,7 @@
 return this.N1(a)},
 N1:function(a){throw H.b("Message serialization: Illegal value "+H.d(a)+" passed")}},
 ooy:{
-"^":"BB;",
+"^":"HU5;",
 Wp:function(a){return a},
 wb:function(a){var z,y,x,w
 z=this.dZ.t(0,a)
@@ -1022,7 +1021,7 @@
 J.kW(this.a.a,z.B3(a),z.B3(b))},"$2",null,4,0,null,79,80,"call"],
 $isEH:true},
 hz:{
-"^":"BB;",
+"^":"HU5;",
 Wp:function(a){return a},
 wb:function(a){var z,y
 z=this.dZ.t(0,a)
@@ -1128,7 +1127,7 @@
 "^":"TpZ:76;a,b",
 $0:[function(){this.b.$1(this.a)},"$0",null,0,0,null,"call"],
 $isEH:true},
-Vh:{
+kuS:{
 "^":"a;a7>",
 giO:function(a){var z,y,x
 z=this.a7
@@ -1144,10 +1143,10 @@
 n:function(a,b){var z,y
 if(b==null)return!1
 if(b===this)return!0
-if(!!J.x(b).$isVh){z=this.a7
+if(!!J.x(b).$iskuS){z=this.a7
 y=b.a7
 return z==null?y==null:z===y}return!1},
-$isVh:true,
+$iskuS:true,
 $ishq:true}}],["","",,H,{
 "^":"",
 Gp:function(a,b){var z
@@ -1263,7 +1262,7 @@
 return a.date},
 KL:function(a){return a.aL?H.o2(a).getUTCHours()+0:H.o2(a).getHours()+0},
 ch:function(a){return a.aL?H.o2(a).getUTCMinutes()+0:H.o2(a).getMinutes()+0},
-XJ:function(a){return a.aL?H.o2(a).getUTCSeconds()+0:H.o2(a).getSeconds()+0},
+Sw:function(a){return a.aL?H.o2(a).getUTCSeconds()+0:H.o2(a).getSeconds()+0},
 vA:function(a,b){if(a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string")throw H.b(P.u(a))
 return a[b]},
 wV:function(a,b,c){if(a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string")throw H.b(P.u(a))
@@ -1309,7 +1308,7 @@
 if("defineProperty" in Object){Object.defineProperty(z,"message",{get:H.tM})
 z.name=""}else z.toString=H.tM
 return z},
-tM:[function(){return J.AG(this.dartException)},"$0","nR",0,0,null],
+tM:[function(){return J.AG(this.dartException)},"$0","p3",0,0,null],
 vh:function(a){throw H.b(a)},
 Ru:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
 z=new H.Hk(a)
@@ -1352,7 +1351,7 @@
 return a},
 CU:function(a){if(a==null||typeof a!='object')return J.v1(a)
 else return H.eQ(a)},
-B7:function(a,b){var z,y,x,w
+dJ:function(a,b){var z,y,x,w
 z=a.length
 for(y=0;y<z;y=w){x=y+1
 w=x+1
@@ -1410,22 +1409,22 @@
 case 5:return function(e,f){return function(g,h,i,j,k){return f(this)[e](g,h,i,j,k)}}(c,z)
 default:return function(e,f){return function(){return e.apply(f(this),arguments)}}(d,z)}},
 CW:function(a,b,c){var z,y,x,w,v,u
-if(c)return H.Hf(a,b)
+if(c)return H.Kv(a,b)
 z=b.$stubName
 y=b.length
 x=a[z]
 w=b==null?x==null:b===x
 if(typeof dart_precompiled=="function"||!w||y>=27)return H.vq(y,!w,z,b)
-if(y===0){w=$.bf
+if(y===0){w=$.mJs
 if(w==null){w=H.B3("self")
-$.bf=w}w="return function(){return this."+H.d(w)+"."+H.d(z)+"();"
+$.mJs=w}w="return function(){return this."+H.d(w)+"."+H.d(z)+"();"
 v=$.OK
 $.OK=J.WB(v,1)
 return new Function(w+H.d(v)+"}")()}u="abcdefghijklmnopqrstuvwxyz".split("").splice(0,y).join(",")
 w="return function("+u+"){return this."
-v=$.bf
+v=$.mJs
 if(v==null){v=H.B3("self")
-$.bf=v}v=w+H.d(v)+"."+H.d(z)+"("+u+");"
+$.mJs=v}v=w+H.d(v)+"."+H.d(z)+"("+u+");"
 w=$.OK
 $.OK=J.WB(w,1)
 return new Function(v+H.d(w)+"}")()},
@@ -1442,7 +1441,7 @@
 default:return function(e,f,g,h){return function(){h=[g(this)]
 Array.prototype.push.apply(h,arguments)
 return e.apply(f(this),h)}}(d,z,y)}},
-Hf:function(a,b){var z,y,x,w,v,u,t,s
+Kv:function(a,b){var z,y,x,w,v,u,t,s
 z=H.bO()
 y=$.P4
 if(y==null){y=H.B3("receiver")
@@ -1470,10 +1469,10 @@
 else z=!0
 if(z)return a
 H.aE(a,b)},
-ag:function(a){throw H.b(P.mE("Cyclic initialization for static "+H.d(a)))},
+eQK:function(a){throw H.b(P.mE("Cyclic initialization for static "+H.d(a)))},
 KT:function(a,b,c){return new H.GN(a,b,c,null)},
 Ogz:function(a,b){var z=a.name
-if(b==null||b.length===0)return new H.Fp(z)
+if(b==null||b.length===0)return new H.tu(z)
 return new H.KEA(z,b,null)},
 G3:function(){return C.Kn},
 rp:function(){return(Math.random()*0x100000000>>>0)+(Math.random()*0x100000000>>>0)*4294967296},
@@ -1775,10 +1774,10 @@
 x.u(0,this.XL(u),u)}z.a=0
 y=x.gvc(x).br(0)
 H.ig(y,null)
-H.bQ(y,new H.uV(z,this,x))}z=this.NE
+H.bQ(y,new H.V5(z,this,x))}z=this.NE
 if(a<0||a>=z.length)return H.e(z,a)
 return z[a]},
-static:{"^":"vS,FV,OcN,H6",zh:function(a){var z,y,x
+static:{"^":"t4A,FV,OcN,H6",zh:function(a){var z,y,x
 z=a.$reflectionInfo
 if(z==null)return
 z.fixed$length=init
@@ -1786,7 +1785,7 @@
 y=z[0]
 x=z[1]
 return new H.FD(a,z,(y&1)===1,y>>1,x>>1,(x&1)===1,z[2],null)}}},
-uV:{
+V5:{
 "^":"TpZ:3;a,b,c",
 $1:function(a){var z,y,x
 z=this.b.NE
@@ -1920,9 +1919,9 @@
 else y=typeof z!=="object"?J.v1(z):H.eQ(z)
 return J.UN(y,H.eQ(this.J6))},
 $isv:true,
-static:{"^":"bf,P4",uj:function(a){return a.tx},HY:function(a){return a.lT},bO:function(){var z=$.bf
+static:{"^":"mJs,P4",uj:function(a){return a.tx},HY:function(a){return a.lT},bO:function(){var z=$.mJs
 if(z==null){z=H.B3("self")
-$.bf=z}return z},B3:function(a){var z,y,x,w,v
+$.mJs=z}return z},B3:function(a){var z,y,x,w,v
 z=new H.v("self","target","receiver","name")
 y=Object.getOwnPropertyNames(z)
 y.fixed$length=init
@@ -1950,7 +1949,7 @@
 z={func:"dynafunc"}
 y=this.dw
 x=J.x(y)
-if(!!x.$isnr)z.void=true
+if(!!x.$isNG)z.void=true
 else if(!x.$isi6)z.ret=y.za()
 y=this.Iq
 if(y!=null&&y.length!==0)z.args=H.Dz(y)
@@ -1986,7 +1985,7 @@
 bu:[function(a){return"dynamic"},"$0","gCR",0,0,73],
 za:function(){return},
 $isi6:true},
-Fp:{
+tu:{
 "^":"lbp;oc>",
 za:function(){var z,y
 z=this.oc
@@ -2106,15 +2105,15 @@
 z.fw(a,b)
 return z}}},
 KW:{
-"^":"mW;ve,vF,wQ",
-gA:function(a){return new H.Pb(this.ve,this.vF,this.wQ,null)},
+"^":"mW;ve,BZ,wQ",
+gA:function(a){return new H.Pb(this.ve,this.BZ,this.wQ,null)},
 $asmW:function(){return[P.Od]},
 $asQV:function(){return[P.Od]}},
 Pb:{
-"^":"a;UW,vF,Ij,Jz",
+"^":"a;UW,BZ,Ij,Jz",
 gl:function(){return this.Jz},
 G:function(){var z,y,x,w,v
-z=this.vF
+z=this.BZ
 if(z==null)return!1
 y=this.Ij
 if(y<=z.length){x=this.UW.UZ(z,y)
@@ -2127,7 +2126,7 @@
 v=y+w
 this.Ij=z.index===v?v+1:v
 return!0}}this.Jz=null
-this.vF=null
+this.BZ=null
 return!1}},
 Vo:{
 "^":"a;M,f1,zO",
@@ -2177,7 +2176,7 @@
 jE:{
 "^":"TpZ:76;a",
 $0:[function(){var z=this.a
-z.IF=J.Q5(z,C.S4,z.IF,!1)},"$0",null,0,0,null,"call"],
+z.IF=J.NB(z,C.S4,z.IF,!1)},"$0",null,0,0,null,"call"],
 $isEH:true}}],["","",,G,{
 "^":"",
 m7:[function(a){var z
@@ -2246,7 +2245,7 @@
 H.VM(new P.Ik(z),[H.u3(z,0)]).yI(this.geO())}this.Nv=b},
 gvK:function(){return this.cC},
 svK:function(a){this.cC=F.Wi(this,C.c6,this.cC,a)},
-qB:function(a){var z,y
+KO:function(a){var z,y
 $.Kh=this
 z=this.wc
 z.push(new G.t9(this,null,null,null,null))
@@ -2257,7 +2256,7 @@
 z=this.Z6
 z.By=this
 y=H.VM(new W.RO(window,C.yf.fA,!1),[null])
-H.VM(new W.Ov(0,y.bi,y.fA,W.aF(z.gnt()),y.el),[H.u3(y,0)]).DN()
+H.VM(new W.Ov(0,y.bi,y.fA,W.Yt(z.gnt()),y.el),[H.u3(y,0)]).DN()
 z.VA()},
 pZ:function(a){J.Ei(this.cC,new G.xE(a,new G.cE()))},
 rG:[function(a){var z=J.RE(a)
@@ -2282,7 +2281,7 @@
 y=J.U6(z)
 if(y.t(z,"trace")!=null){x=y.t(z,"trace")
 y=J.x(x)
-if(y.n(x,"on")){if($.ax==null)$.ax=Z.NY()}else if(y.n(x,"off")){y=$.ax
+if(y.n(x,"on")){if($.ax==null)$.ax=Z.JQ()}else if(y.n(x,"off")){y=$.ax
 if(y!=null){y.RV.Gv()
 $.ax=null}}}y=$.ax
 if(y!=null){y.NP.CH(0)
@@ -2323,12 +2322,12 @@
 z=new U.KM(H.VM(new P.Zf(P.Dt(null)),[null]),H.VM(new P.Zf(P.Dt(null)),[null]),z,P.L5(null,null,null,P.qU,L.U2),P.L5(null,null,null,P.qU,L.U2),0,!1,new P.GY(!1),new U.hA(null),"unknown","unknown",0,!1,!1,"",null,P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.L5(null,null,null,P.qU,D.af),P.L5(null,null,null,P.qU,D.bv),null,null,null,null,null,null,!1,null,null,null,null,null)
 z.Lw()
 this.swv(0,z)
-this.qB(!1)},
+this.KO(!1)},
 E0:function(a){var z=new U.dS(H.VM(new P.Zf(P.Dt(null)),[null]),H.VM(new P.Zf(P.Dt(null)),[null]),P.L5(null,null,null,P.qU,P.A0),0,"unknown","unknown",0,!1,!1,"",null,P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.L5(null,null,null,P.qU,D.af),P.L5(null,null,null,P.qU,D.bv),null,null,null,null,null,null,!1,null,null,null,null,null)
 z.Lw()
 z.ZH()
 this.swv(0,z)
-this.qB(!0)},
+this.KO(!0)},
 static:{"^":"Kh<"}},
 cE:{
 "^":"TpZ:93;",
@@ -2433,7 +2432,7 @@
 Q0:function(a){var z,y
 z=H.Go(this.yF,"$isTi")
 y=this.i6.Pv
-z.Ll=J.Q5(z,C.td,z.Ll,y)},
+z.Ll=J.NB(z,C.td,z.Ll,y)},
 VU:function(a){return J.co(a,"error/")}},
 ki:{
 "^":"OS;i6,yF,fz,Vg,fn",
@@ -2447,8 +2446,8 @@
 z=F.Wi(this,C.GP,this.yF,z)
 this.yF=z
 H.Go(z,"$isqn")
-z.GC=J.Q5(z,C.EP,z.GC,this)}},
-TG:function(a,b){var z
+z.GC=J.NB(z,C.EP,z.GC,this)}},
+ZW:function(a,b){var z
 if(b.gmw()!=null){if(J.cj(b.gmw()).gVs()===a)return
 C.Nm.Rz(b.gmw().gJb(),b)
 b.smw(null)}if(J.xC(a,0))return
@@ -2478,7 +2477,7 @@
 YhF:{
 "^":"TpZ:12;a",
 $1:[function(a){var z=H.Go(this.a.yF,"$isqn")
-z.OM=J.Q5(z,C.rB,z.OM,a)},"$1",null,2,0,null,97,"call"],
+z.OM=J.NB(z,C.rB,z.OM,a)},"$1",null,2,0,null,97,"call"],
 $isEH:true},
 V3:{
 "^":"a;IU",
@@ -2597,7 +2596,7 @@
 w.oq(z,v,v+y)}},
 Kt:{
 "^":"a;ph>,xy<",
-static:{mbk:[function(a){return a!=null?J.AG(a):"<null>"},"$1","NZt",2,0,16]}},
+static:{cR:[function(a){return a!=null?J.AG(a):"<null>"},"$1","Tp",2,0,16]}},
 Ni:{
 "^":"a;UQ>",
 $isNi:true},
@@ -2609,19 +2608,19 @@
 gT3:function(){return this.Rj},
 sT3:function(a){this.Rj=a
 F.Wi(this,C.JB,0,1)},
-wA:function(a,b){var z=this.vp
+Ey:function(a,b){var z=this.vp
 if(a>>>0!==a||a>=z.length)return H.e(z,a)
 return J.UQ(J.hI(z[a]),b)},
-oa:[function(a,b){var z=this.wA(a,this.pT)
-return J.FW(this.wA(b,this.pT),z)},"$2","gMG",4,0,100],
-ws:[function(a,b){return J.FW(this.wA(a,this.pT),this.wA(b,this.pT))},"$2","gTF",4,0,100],
+oa:[function(a,b){var z=this.Ey(a,this.pT)
+return J.FW(this.Ey(b,this.pT),z)},"$2","gMG",4,0,100],
+ws:[function(a,b){return J.FW(this.Ey(a,this.pT),this.Ey(b,this.pT))},"$2","gfL",4,0,100],
 Jd:function(a){var z,y
 H.Xe()
 $.Ji=$.xG
 new P.VV(null,null).D5(0)
 z=this.zz
 if(this.Rj){y=this.gMG()
-H.ig(z,y)}else{y=this.gTF()
+H.ig(z,y)}else{y=this.gfL()
 H.ig(z,y)}},
 Ai:function(){C.Nm.sB(this.vp,0)
 C.Nm.sB(this.zz,0)},
@@ -2644,14 +2643,14 @@
 return J.WB(z,this.Rj?"\u25bc":"\u25b2")},"$1","gCO",2,0,14,101]}}],["","",,E,{
 "^":"",
 Jz:[function(){var z,y,x
-z=P.EF([C.aP,new E.em(),C.IH,new E.Lb(),C.cg,new E.QA(),C.j2,new E.Cv(),C.Zg,new E.ed(),C.ET,new E.wa(),C.BE,new E.Or(),C.WC,new E.YL(),C.hR,new E.wf(),C.S4,new E.Oa(),C.Ro,new E.emv(),C.hN,new E.Lbd(),C.AV,new E.QAa(),C.bV,new E.CvS(),C.C0,new E.edy(),C.eZ,new E.waE(),C.bk,new E.Ore(),C.lH,new E.YLa(),C.am,new E.wfa(),C.oE,new E.Oaa(),C.kG,new E.e0(),C.OI,new E.e1(),C.Wt,new E.e2(),C.I9,new E.e3(),C.To,new E.e4(),C.aw,new E.e5(),C.XA,new E.e6(),C.i4,new E.e7(),C.mJ,new E.e8(),C.qt,new E.e9(),C.p1,new E.e10(),C.yJ,new E.e11(),C.la,new E.e12(),C.yL,new E.e13(),C.bJ,new E.e14(),C.ox,new E.e15(),C.Je,new E.e16(),C.kI,new E.e17(),C.vY,new E.e18(),C.Rs,new E.e19(),C.hJ,new E.e20(),C.Lw,new E.e21(),C.eR,new E.e22(),C.LS,new E.e23(),C.iE,new E.e24(),C.f4,new E.e25(),C.VK,new E.e26(),C.aH,new E.e27(),C.aK,new E.e28(),C.GP,new E.e29(),C.mw,new E.e30(),C.vs,new E.e31(),C.Gr,new E.e32(),C.TU,new E.e33(),C.Fe,new E.e34(),C.tP,new E.e35(),C.yh,new E.e36(),C.Zb,new E.e37(),C.u7,new E.e38(),C.p8,new E.e39(),C.qR,new E.e40(),C.ld,new E.e41(),C.ne,new E.e42(),C.B0,new E.e43(),C.r1,new E.e44(),C.mr,new E.e45(),C.Ek,new E.e46(),C.Pn,new E.e47(),C.YT,new E.e48(),C.h7,new E.e49(),C.R3,new E.e50(),C.cJ,new E.e51(),C.WQ,new E.e52(),C.fV,new E.e53(),C.jU,new E.e54(),C.OO,new E.e55(),C.Mc,new E.e56(),C.FP,new E.e57(),C.kF,new E.e58(),C.UD,new E.e59(),C.Aq,new E.e60(),C.DS,new E.e61(),C.C9,new E.e62(),C.VF,new E.e63(),C.uU,new E.e64(),C.YJ,new E.e65(),C.eF,new E.e66(),C.oI,new E.e67(),C.ST,new E.e68(),C.QH,new E.e69(),C.qX,new E.e70(),C.rE,new E.e71(),C.nf,new E.e72(),C.EI,new E.e73(),C.JB,new E.e74(),C.RY,new E.e75(),C.d4,new E.e76(),C.cF,new E.e77(),C.SI,new E.e78(),C.zS,new E.e79(),C.YA,new E.e80(),C.Ge,new E.e81(),C.A7,new E.e82(),C.He,new E.e83(),C.im,new E.e84(),C.Ss,new E.e85(),C.k6,new E.e86(),C.oj,new E.e87(),C.PJ,new E.e88(),C.Yb,new E.e89(),C.q2,new E.e90(),C.d2,new E.e91(),C.kN,new E.e92(),C.uO,new E.e93(),C.fn,new E.e94(),C.yB,new E.e95(),C.eJ,new E.e96(),C.iG,new E.e97(),C.Py,new E.e98(),C.pC,new E.e99(),C.uu,new E.e100(),C.qs,new E.e101(),C.XH,new E.e102(),C.tJ,new E.e103(),C.F8,new E.e104(),C.fy,new E.e105(),C.C1,new E.e106(),C.Nr,new E.e107(),C.nL,new E.e108(),C.a0,new E.e109(),C.Yg,new E.e110(),C.bR,new E.e111(),C.ai,new E.e112(),C.ob,new E.e113(),C.MY,new E.e114(),C.Iv,new E.e115(),C.Wg,new E.e116(),C.tD,new E.e117(),C.QS,new E.e118(),C.nZ,new E.e119(),C.Of,new E.e120(),C.Vl,new E.e121(),C.pY,new E.e122(),C.XL,new E.e123(),C.LA,new E.e124(),C.tz,new E.e125(),C.AT,new E.e126(),C.Lk,new E.e127(),C.dK,new E.e128(),C.rB,new E.e129(),C.bz,new E.e130(),C.Jx,new E.e131(),C.b5,new E.e132(),C.z6,new E.e133(),C.SY,new E.e134(),C.Lc,new E.e135(),C.hf,new E.e136(),C.uk,new E.e137(),C.Zi,new E.e138(),C.TN,new E.e139(),C.GI,new E.e140(),C.Wn,new E.e141(),C.ur,new E.e142(),C.VN,new E.e143(),C.EV,new E.e144(),C.VI,new E.e145(),C.eh,new E.e146(),C.SA,new E.e147(),C.uG,new E.e148(),C.kV,new E.e149(),C.vp,new E.e150(),C.cc,new E.e151(),C.DY,new E.e152(),C.Lx,new E.e153(),C.M3,new E.e154(),C.wT,new E.e155(),C.JK,new E.e156(),C.SR,new E.e157(),C.t6,new E.e158(),C.rP,new E.e159(),C.qi,new E.e160(),C.pX,new E.e161(),C.kB,new E.e162(),C.LH,new E.e163(),C.a2,new E.e164(),C.VD,new E.e165(),C.NN,new E.e166(),C.UX,new E.e167(),C.YS,new E.e168(),C.pu,new E.e169(),C.uw,new E.e170(),C.BJ,new E.e171(),C.c6,new E.e172(),C.td,new E.e173(),C.Gn,new E.e174(),C.zO,new E.e175(),C.vg,new E.e176(),C.YV,new E.e177(),C.If,new E.e178(),C.Ys,new E.e179(),C.zm,new E.e180(),C.EP,new E.e181(),C.nX,new E.e182(),C.xP,new E.e183(),C.XM,new E.e184(),C.Ic,new E.e185(),C.yG,new E.e186(),C.uI,new E.e187(),C.O9,new E.e188(),C.ba,new E.e189(),C.tW,new E.e190(),C.CG,new E.e191(),C.Jf,new E.e192(),C.Wj,new E.e193(),C.vb,new E.e194(),C.UL,new E.e195(),C.AY,new E.e196(),C.QK,new E.e197(),C.AO,new E.e198(),C.Xd,new E.e199(),C.I7,new E.e200(),C.kY,new E.e201(),C.Wm,new E.e202(),C.vK,new E.e203(),C.GR,new E.e204(),C.KX,new E.e205(),C.ja,new E.e206(),C.mn,new E.e207(),C.Dj,new E.e208(),C.ir,new E.e209(),C.dx,new E.e210(),C.ni,new E.e211(),C.X2,new E.e212(),C.F3,new E.e213(),C.UY,new E.e214(),C.Aa,new E.e215(),C.nY,new E.e216(),C.tg,new E.e217(),C.HD,new E.e218(),C.iU,new E.e219(),C.eN,new E.e220(),C.ue,new E.e221(),C.nh,new E.e222(),C.L2,new E.e223(),C.vm,new E.e224(),C.Gs,new E.e225(),C.bE,new E.e226(),C.YD,new E.e227(),C.PX,new E.e228(),C.N8,new E.e229(),C.EA,new E.e230(),C.oW,new E.e231(),C.KC,new E.e232(),C.tf,new E.e233(),C.da,new E.e234(),C.Jd,new E.e235(),C.Y4,new E.e236(),C.Si,new E.e237(),C.pH,new E.e238(),C.Ve,new E.e239(),C.jM,new E.e240(),C.rd,new E.e241(),C.W5,new E.e242(),C.uX,new E.e243(),C.nt,new E.e244(),C.IT,new E.e245(),C.li,new E.e246(),C.PM,new E.e247(),C.ks,new E.e248(),C.Om,new E.e249(),C.iC,new E.e250(),C.Nv,new E.e251(),C.Wo,new E.e252(),C.FZ,new E.e253(),C.TW,new E.e254(),C.xS,new E.e255(),C.ft,new E.e256(),C.QF,new E.e257(),C.mi,new E.e258(),C.zz,new E.e259(),C.eO,new E.e260(),C.hO,new E.e261(),C.ei,new E.e262(),C.HK,new E.e263(),C.je,new E.e264(),C.Ef,new E.e265(),C.QL,new E.e266(),C.RH,new E.e267(),C.SP,new E.e268(),C.Q1,new E.e269(),C.ID,new E.e270(),C.dA,new E.e271(),C.bc,new E.e272(),C.kw,new E.e273(),C.nE,new E.e274(),C.ep,new E.e275(),C.hB,new E.e276(),C.J2,new E.e277(),C.hx,new E.e278(),C.zU,new E.e279(),C.OU,new E.e280(),C.bn,new E.e281(),C.mh,new E.e282(),C.Fh,new E.e283(),C.yv,new E.e284(),C.LP,new E.e285(),C.jh,new E.e286(),C.zd,new E.e287(),C.Db,new E.e288(),C.l4,new E.e289(),C.fj,new E.e290(),C.xw,new E.e291(),C.zn,new E.e292(),C.RJ,new E.e293(),C.Sk,new E.e294(),C.Tc,new E.e295(),C.YE,new E.e296(),C.Uy,new E.e297()],null,null)
-y=P.EF([C.aP,new E.e298(),C.cg,new E.e299(),C.Zg,new E.e300(),C.S4,new E.e301(),C.AV,new E.e302(),C.bk,new E.e303(),C.lH,new E.e304(),C.am,new E.e305(),C.oE,new E.e306(),C.kG,new E.e307(),C.Wt,new E.e308(),C.aw,new E.e309(),C.XA,new E.e310(),C.i4,new E.e311(),C.mJ,new E.e312(),C.yL,new E.e313(),C.bJ,new E.e314(),C.kI,new E.e315(),C.vY,new E.e316(),C.VK,new E.e317(),C.aH,new E.e318(),C.GP,new E.e319(),C.vs,new E.e320(),C.Gr,new E.e321(),C.Fe,new E.e322(),C.tP,new E.e323(),C.yh,new E.e324(),C.Zb,new E.e325(),C.p8,new E.e326(),C.ld,new E.e327(),C.ne,new E.e328(),C.B0,new E.e329(),C.mr,new E.e330(),C.YT,new E.e331(),C.cJ,new E.e332(),C.WQ,new E.e333(),C.jU,new E.e334(),C.OO,new E.e335(),C.Mc,new E.e336(),C.QH,new E.e337(),C.rE,new E.e338(),C.nf,new E.e339(),C.Ge,new E.e340(),C.A7,new E.e341(),C.He,new E.e342(),C.oj,new E.e343(),C.d2,new E.e344(),C.uO,new E.e345(),C.fn,new E.e346(),C.yB,new E.e347(),C.Py,new E.e348(),C.uu,new E.e349(),C.qs,new E.e350(),C.rB,new E.e351(),C.hf,new E.e352(),C.uk,new E.e353(),C.Zi,new E.e354(),C.TN,new E.e355(),C.ur,new E.e356(),C.EV,new E.e357(),C.VI,new E.e358(),C.eh,new E.e359(),C.SA,new E.e360(),C.uG,new E.e361(),C.kV,new E.e362(),C.vp,new E.e363(),C.SR,new E.e364(),C.t6,new E.e365(),C.kB,new E.e366(),C.UX,new E.e367(),C.YS,new E.e368(),C.c6,new E.e369(),C.td,new E.e370(),C.zO,new E.e371(),C.YV,new E.e372(),C.If,new E.e373(),C.Ys,new E.e374(),C.EP,new E.e375(),C.nX,new E.e376(),C.XM,new E.e377(),C.Ic,new E.e378(),C.O9,new E.e379(),C.tW,new E.e380(),C.Wj,new E.e381(),C.vb,new E.e382(),C.QK,new E.e383(),C.Xd,new E.e384(),C.kY,new E.e385(),C.vK,new E.e386(),C.GR,new E.e387(),C.KX,new E.e388(),C.ja,new E.e389(),C.Dj,new E.e390(),C.X2,new E.e391(),C.UY,new E.e392(),C.Aa,new E.e393(),C.nY,new E.e394(),C.tg,new E.e395(),C.HD,new E.e396(),C.iU,new E.e397(),C.eN,new E.e398(),C.Gs,new E.e399(),C.bE,new E.e400(),C.YD,new E.e401(),C.PX,new E.e402(),C.tf,new E.e403(),C.Jd,new E.e404(),C.pH,new E.e405(),C.Ve,new E.e406(),C.jM,new E.e407(),C.rd,new E.e408(),C.uX,new E.e409(),C.nt,new E.e410(),C.IT,new E.e411(),C.PM,new E.e412(),C.ks,new E.e413(),C.Om,new E.e414(),C.iC,new E.e415(),C.Nv,new E.e416(),C.FZ,new E.e417(),C.TW,new E.e418(),C.ft,new E.e419(),C.mi,new E.e420(),C.zz,new E.e421(),C.dA,new E.e422(),C.kw,new E.e423(),C.nE,new E.e424(),C.hx,new E.e425(),C.zU,new E.e426(),C.OU,new E.e427(),C.RJ,new E.e428(),C.YE,new E.e429()],null,null)
-x=P.EF([C.K4,C.qJ,C.yS,C.Mt,C.OG,C.il,C.nw,C.Mt,C.ou,C.Mt,C.oT,C.il,C.jR,C.Mt,C.Lg,C.qJ,C.Bi,C.il,C.KO,C.Mt,C.wk,C.Mt,C.jA,C.qJ,C.Jo,C.il,C.Az,C.Mt,C.Vx,C.Mt,C.Qb,C.Mt,C.lE,C.al,C.te,C.Mt,C.iD,C.Mt,C.Ju,C.Mt,C.uC,C.al,C.Wz,C.il,C.Ke,C.Mt,C.pF,C.il,C.Wh,C.Mt,C.qF,C.Mt,C.qZ,C.il,C.Zj,C.Mt,C.he,C.Mt,C.dD,C.al,C.hP,C.Mt,C.tc,C.Mt,C.rR,C.il,C.oG,C.Mt,C.mK,C.il,C.IZ,C.Mt,C.FG,C.il,C.pJ,C.Mt,C.tU,C.Mt,C.DD,C.Mt,C.Yy,C.il,C.Xv,C.Mt,C.ce,C.Mt,C.UJ,C.il,C.ca,C.Mt,C.Io,C.Mt,C.j4,C.Mt,C.EG,C.Mt,C.CT,C.Mt,C.mq,C.Mt,C.Tq,C.Mt,C.lp,C.il,C.PT,C.Mt,C.fU,C.Mt,C.pi,C.Mt,C.Fn,C.Mt,C.Ey,C.Mt,C.km,C.Mt,C.vw,C.Mt,C.LT,C.Mt,C.NW,C.Mz,C.ms,C.Mt,C.FA,C.Mt,C.Qt,C.Mt,C.a8,C.Mt,C.JW,C.Mt,C.Mf,C.Mt,C.Dl,C.Mt,C.Mz,C.qJ,C.Nw,C.Mt,C.ON,C.Mt,C.Sb,C.al,C.Th,C.Mt,C.wH,C.Mt,C.pK,C.Mt,C.R9,C.Mt,C.il,C.Mt,C.QJ,C.Mt,C.u4,C.Mt,C.X8,C.Mt,C.kt,C.Mt,C.Y3,C.qJ,C.NR,C.Mt,C.tQ,C.Mt,C.bC,C.Mt,C.ws,C.Mt,C.cK,C.il,C.jK,C.Mt,C.qJ,C.jw,C.Mt,C.Mz,C.al,C.il],null,null)
-y=O.rH(!1,P.EF([C.K4,P.EF([C.S4,C.aj,C.AV,C.Qp,C.mJ,C.Qu,C.hf,C.V0],null,null),C.yS,P.EF([C.UX,C.Pt],null,null),C.OG,P.Fl(null,null),C.nw,P.EF([C.rB,C.xY,C.bz,C.Bk],null,null),C.ou,P.EF([C.XA,C.dq,C.yB,C.vZ,C.tg,C.DC],null,null),C.oT,P.EF([C.i4,C.Qs,C.Wm,C.QW],null,null),C.jR,P.EF([C.i4,C.aJ],null,null),C.Lg,P.EF([C.S4,C.aj,C.AV,C.Qp,C.B0,C.iH,C.r1,C.nP,C.mr,C.iz],null,null),C.Bi,P.Fl(null,null),C.KO,P.EF([C.yh,C.Ul],null,null),C.wk,P.EF([C.AV,C.fr,C.eh,C.jO,C.Aa,C.k5,C.mi,C.yV],null,null),C.jA,P.EF([C.S4,C.aj,C.AV,C.Qp,C.YT,C.LC,C.hf,C.V0,C.UY,C.n6],null,null),C.Jo,P.Fl(null,null),C.Az,P.EF([C.WQ,C.ah],null,null),C.Vx,P.EF([C.OO,C.Cf],null,null),C.Qb,P.EF([C.Mc,C.f0],null,null),C.lE,P.EF([C.QK,C.P9],null,null),C.te,P.EF([C.nf,C.wR],null,null),C.iD,P.EF([C.QH,C.C4,C.qX,C.dO,C.PM,C.jv],null,null),C.Ju,P.EF([C.kG,C.Pr,C.rB,C.xY,C.Zi,C.xx,C.TN,C.Gj,C.vb,C.Mq,C.UL,C.mM],null,null),C.uC,P.EF([C.uO,C.KK,C.kY,C.rT],null,null),C.Wz,P.Fl(null,null),C.Ke,P.EF([C.uO,C.JT,C.fn,C.Kk,C.XM,C.Tt,C.tg,C.DC],null,null),C.pF,P.Fl(null,null),C.Wh,P.EF([C.yL,C.j5],null,null),C.qF,P.EF([C.vp,C.o0],null,null),C.qZ,P.Fl(null,null),C.Zj,P.EF([C.oj,C.GT],null,null),C.he,P.EF([C.vp,C.o0],null,null),C.dD,P.EF([C.pH,C.xV],null,null),C.hP,P.EF([C.Wj,C.Ah],null,null),C.tc,P.EF([C.vp,C.o0],null,null),C.rR,P.Fl(null,null),C.oG,P.EF([C.jU,C.bw],null,null),C.mK,P.Fl(null,null),C.IZ,P.EF([C.vp,C.o0],null,null),C.FG,P.Fl(null,null),C.pJ,P.EF([C.Ve,C.X4],null,null),C.tU,P.EF([C.qs,C.MN],null,null),C.DD,P.EF([C.vp,C.o0],null,null),C.Yy,P.Fl(null,null),C.Xv,P.EF([C.YE,C.Wl],null,null),C.ce,P.EF([C.aH,C.w3,C.He,C.fz,C.vb,C.Mq,C.UL,C.mM,C.Dj,C.Ay,C.Gs,C.iO,C.bE,C.h3,C.YD,C.fP,C.TW,C.H0,C.xS,C.hd,C.zz,C.lS],null,null),C.UJ,P.Fl(null,null),C.ca,P.EF([C.bJ,C.UI,C.ox,C.Rh],null,null),C.Io,P.EF([C.rB,C.RU],null,null),C.j4,P.EF([C.rB,C.RU],null,null),C.EG,P.EF([C.rB,C.RU],null,null),C.CT,P.EF([C.rB,C.RU],null,null),C.mq,P.EF([C.rB,C.RU],null,null),C.Tq,P.EF([C.SR,C.S9,C.t6,C.b6,C.rP,C.Nt],null,null),C.lp,P.Fl(null,null),C.PT,P.EF([C.EV,C.ZQ],null,null),C.fU,P.EF([C.kB,C.nq,C.LH,C.oB,C.EP,C.db],null,null),C.pi,P.EF([C.rB,C.xY,C.kB,C.nq,C.LH,C.oB],null,null),C.Fn,P.EF([C.rB,C.xY,C.bz,C.Bk,C.EP,C.GO,C.tf,C.q6],null,null),C.Ey,P.EF([C.XA,C.dq,C.uk,C.rY],null,null),C.km,P.EF([C.rB,C.RU,C.bz,C.Bk,C.uk,C.rY],null,null),C.vw,P.EF([C.uk,C.rY,C.EV,C.ZQ],null,null),C.LT,P.EF([C.Ys,C.Cg],null,null),C.NW,P.Fl(null,null),C.ms,P.EF([C.cg,C.ll,C.uk,C.rY,C.kV,C.vz],null,null),C.FA,P.EF([C.cg,C.ll,C.kV,C.vz],null,null),C.Qt,P.EF([C.ld,C.Gw],null,null),C.a8,P.EF([C.p8,C.uc,C.ld,C.Gw],null,null),C.JW,P.EF([C.aP,C.oh,C.AV,C.Qp,C.hf,C.V0],null,null),C.Mf,P.EF([C.uk,C.rY],null,null),C.Dl,P.EF([C.VK,C.lW],null,null),C.Mz,P.EF([C.O9,C.q9,C.ba,C.kQ],null,null),C.Nw,P.EF([C.S4,C.aj,C.VI,C.w6],null,null),C.ON,P.EF([C.kI,C.Bf,C.vY,C.ZS,C.Rs,C.EW,C.vs,C.MP,C.Gr,C.VJ,C.TU,C.Cp,C.A7,C.SD,C.SA,C.KI,C.uG,C.Df,C.PX,C.jz,C.N8,C.qE,C.nt,C.VS,C.IT,C.NL,C.li,C.Tz],null,null),C.Sb,P.EF([C.tW,C.kH,C.CG,C.Ml],null,null),C.Th,P.EF([C.PX,C.jz],null,null),C.wH,P.EF([C.yh,C.lJ],null,null),C.pK,P.EF([C.ne,C.bp],null,null),C.R9,P.EF([C.kY,C.TO,C.Wm,C.QW],null,null),C.il,P.EF([C.uu,C.NJ,C.kY,C.TO,C.Wm,C.QW],null,null),C.QJ,P.EF([C.B0,C.iH,C.vp,C.Rz],null,null),C.u4,P.EF([C.B0,C.iH,C.SR,C.xR],null,null),C.X8,P.EF([C.Zg,C.b7,C.td,C.Zk,C.Gn,C.az],null,null),C.kt,P.EF([C.nE,C.FM],null,null),C.Y3,P.EF([C.bk,C.NS,C.lH,C.dG,C.zU,C.uT],null,null),C.NR,P.EF([C.B0,C.iH,C.rE,C.KS],null,null),C.tQ,P.EF([C.kw,C.oC],null,null),C.bC,P.EF([C.am,C.JD,C.oE,C.r2,C.uX,C.Eb],null,null),C.ws,P.EF([C.ft,C.Gz],null,null),C.cK,P.Fl(null,null),C.jK,P.EF([C.yh,C.Ul,C.RJ,C.BP],null,null)],null,null),z,P.EF([C.aP,"active",C.IH,"address",C.cg,"anchor",C.j2,"app",C.Zg,"args",C.ET,"assertsEnabled",C.BE,"averageCollectionPeriodInMillis",C.WC,"bpt",C.hR,"breakpoint",C.S4,"busy",C.Ro,"buttonClick",C.hN,"bytes",C.AV,"callback",C.bV,"capacity",C.C0,"change",C.eZ,"changeSort",C.bk,"checked",C.lH,"checkedText",C.am,"chromeTargets",C.oE,"chromiumAddress",C.kG,"classTable",C.OI,"classes",C.Wt,"clazz",C.I9,"closeItem",C.To,"closing",C.aw,"closureFunc",C.XA,"cls",C.i4,"code",C.mJ,"color",C.qt,"coloring",C.p1,"columns",C.yJ,"connectStandalone",C.la,"connectToVm",C.yL,"connection",C.bJ,"counters",C.ox,"countersChanged",C.Je,"current",C.kI,"currentLine",C.vY,"currentPos",C.Rs,"currentPosChanged",C.hJ,"dartMetrics",C.Lw,"deleteVm",C.eR,"deoptimizations",C.LS,"description",C.iE,"descriptor",C.f4,"descriptors",C.VK,"devtools",C.aH,"displayCutoff",C.aK,"doAction",C.GP,"element",C.mw,"elements",C.vs,"endLine",C.Gr,"endPos",C.TU,"endPosChanged",C.Fe,"endTokenPos",C.tP,"entry",C.yh,"error",C.Zb,"eval",C.u7,"evalNow",C.p8,"event",C.qR,"eventType",C.ld,"events",C.ne,"exception",C.B0,"expand",C.r1,"expandChanged",C.mr,"expanded",C.Ek,"expander",C.Pn,"expanderStyle",C.YT,"expr",C.h7,"external",C.R3,"fd",C.cJ,"fetchInboundReferences",C.WQ,"field",C.fV,"fields",C.jU,"file",C.OO,"flag",C.Mc,"flagList",C.FP,"formatSize",C.kF,"formatTime",C.UD,"formattedAddress",C.Aq,"formattedAverage",C.DS,"formattedCollections",C.C9,"formattedDeoptId",C.VF,"formattedExclusive",C.uU,"formattedExclusiveTicks",C.YJ,"formattedInclusive",C.eF,"formattedInclusiveTicks",C.oI,"formattedLine",C.ST,"formattedTotalCollectionTime",C.QH,"fragmentation",C.qX,"fragmentationChanged",C.rE,"frame",C.nf,"function",C.EI,"functions",C.JB,"getColumnLabel",C.RY,"getTabs",C.d4,"goto",C.cF,"gotoLink",C.SI,"hasDescriptors",C.zS,"hasDisassembly",C.YA,"hasNoAllocations",C.Ge,"hashLinkWorkaround",C.A7,"height",C.He,"hideTagsChecked",C.im,"history",C.Ss,"hits",C.k6,"hoverText",C.oj,"httpServer",C.PJ,"human",C.Yb,"id",C.q2,"idle",C.d2,"imp",C.kN,"imports",C.uO,"inboundReferences",C.fn,"instance",C.yB,"instances",C.eJ,"instruction",C.iG,"instructions",C.Py,"interface",C.pC,"interfaces",C.uu,"internal",C.qs,"io",C.XH,"isAbstract",C.tJ,"isBool",C.F8,"isChromeTarget",C.fy,"isClosure",C.C1,"isComment",C.Nr,"isConst",C.nL,"isCurrentTarget",C.a0,"isDart",C.Yg,"isDartCode",C.bR,"isDouble",C.ai,"isEmpty",C.ob,"isError",C.MY,"isInlinable",C.Iv,"isInstance",C.Wg,"isInt",C.tD,"isList",C.QS,"isMap",C.nZ,"isNotEmpty",C.Of,"isNull",C.Vl,"isOptimizable",C.pY,"isOptimized",C.XL,"isPatch",C.LA,"isPipe",C.tz,"isSentinel",C.AT,"isStatic",C.Lk,"isString",C.dK,"isType",C.rB,"isolate",C.bz,"isolateChanged",C.Jx,"isolates",C.b5,"jumpTarget",C.z6,"key",C.SY,"keys",C.Lc,"kind",C.hf,"label",C.uk,"last",C.Zi,"lastAccumulatorReset",C.TN,"lastServiceGC",C.GI,"lastUpdate",C.Wn,"length",C.ur,"lib",C.VN,"libraries",C.EV,"library",C.VI,"line",C.eh,"lineMode",C.SA,"lines",C.uG,"linesReady",C.kV,"link",C.vp,"list",C.cc,"listening",C.DY,"loading",C.Lx,"localAddress",C.M3,"localPort",C.wT,"mainPort",C.JK,"makeLineId",C.SR,"map",C.t6,"mapAsString",C.rP,"mapChanged",C.qi,"max",C.pX,"message",C.kB,"metric",C.LH,"metricChanged",C.a2,"min",C.VD,"mouseOut",C.NN,"mouseOver",C.UX,"msg",C.YS,"name",C.pu,"nameIsEmpty",C.uw,"nativeFields",C.BJ,"newSpace",C.c6,"notifications",C.td,"object",C.Gn,"objectChanged",C.zO,"objectPool",C.vg,"oldSpace",C.YV,"owningClass",C.If,"owningLibrary",C.Ys,"pad",C.zm,"padding",C.EP,"page",C.nX,"parent",C.xP,"parseInt",C.XM,"path",C.Ic,"pause",C.yG,"pauseEvent",C.uI,"pid",C.O9,"pollPeriod",C.ba,"pollPeriodChanged",C.tW,"pos",C.CG,"posChanged",C.Jf,"possibleBpt",C.Wj,"process",C.vb,"profile",C.UL,"profileChanged",C.AY,"protocol",C.QK,"qualified",C.AO,"qualifiedName",C.Xd,"reachable",C.I7,"readClosed",C.kY,"ref",C.Wm,"refChanged",C.vK,"reference",C.GR,"refresh",C.KX,"refreshCoverage",C.ja,"refreshGC",C.mn,"refreshRateChange",C.Dj,"refreshTime",C.ir,"relativeLink",C.dx,"remoteAddress",C.ni,"remotePort",C.X2,"resetAccumulator",C.F3,"response",C.UY,"result",C.Aa,"results",C.nY,"resume",C.tg,"retainedBytes",C.HD,"retainedSize",C.iU,"retainingPath",C.eN,"rootLib",C.ue,"row",C.nh,"rows",C.L2,"running",C.vm,"sampleBufferSizeChange",C.Gs,"sampleCount",C.bE,"sampleDepth",C.YD,"sampleRate",C.PX,"script",C.N8,"scriptChanged",C.EA,"scripts",C.oW,"selectExpr",C.KC,"selectMetric",C.tf,"selectedMetric",C.da,"size",C.Jd,"slot",C.Y4,"slotIsArrayIndex",C.Si,"slotIsField",C.pH,"small",C.Ve,"socket",C.jM,"socketOwner",C.rd,"source",C.W5,"standalone",C.uX,"standaloneVmAddress",C.nt,"startLine",C.IT,"startPos",C.li,"startPosChanged",C.PM,"status",C.ks,"stepInto",C.Om,"stepOut",C.iC,"stepOver",C.Nv,"subclass",C.Wo,"subclasses",C.FZ,"superclass",C.TW,"tagSelector",C.xS,"tagSelectorChanged",C.ft,"target",C.QF,"targets",C.mi,"text",C.zz,"timeSpan",C.eO,"timeStamp",C.hO,"tipExclusive",C.ei,"tipKind",C.HK,"tipParent",C.je,"tipTicks",C.Ef,"tipTime",C.QL,"toString",C.RH,"toStringAsFixed",C.SP,"toggleBreakpoint",C.Q1,"toggleExpand",C.ID,"toggleExpanded",C.dA,"tokenPos",C.bc,"topFrame",C.kw,"trace",C.nE,"tracer",C.ep,"tree",C.hB,"type",C.J2,"typeChecksEnabled",C.hx,"typeClass",C.zU,"uncheckedText",C.OU,"unoptimizedCode",C.bn,"updateLineMode",C.mh,"uptime",C.Fh,"url",C.yv,"usageCounter",C.LP,"used",C.jh,"v",C.zd,"value",C.Db,"valueAsString",C.l4,"values",C.fj,"variable",C.xw,"variables",C.zn,"version",C.RJ,"vm",C.Sk,"vmMetrics",C.Tc,"vmName",C.YE,"webSocket",C.Uy,"writeClosed"],null,null),x,y,null)
+z=P.EF([C.aP,new E.em(),C.IH,new E.Lb(),C.cg,new E.QA(),C.j2,new E.Cv(),C.Zg,new E.ed(),C.Wq,new E.wa(),C.ET,new E.Or(),C.BE,new E.YL(),C.WC,new E.wf(),C.hR,new E.Oa(),C.S4,new E.emv(),C.Ro,new E.Lbd(),C.hN,new E.QAa(),C.AV,new E.CvS(),C.bV,new E.edy(),C.C0,new E.waE(),C.eZ,new E.Ore(),C.bk,new E.YLa(),C.lH,new E.wfa(),C.am,new E.Oaa(),C.oE,new E.e0(),C.kG,new E.e1(),C.OI,new E.e2(),C.Wt,new E.e3(),C.I9,new E.e4(),C.To,new E.e5(),C.mM,new E.e6(),C.aw,new E.e7(),C.XA,new E.e8(),C.i4,new E.e9(),C.mJ,new E.e10(),C.qt,new E.e11(),C.p1,new E.e12(),C.yJ,new E.e13(),C.la,new E.e14(),C.yL,new E.e15(),C.nr,new E.e16(),C.bJ,new E.e17(),C.ox,new E.e18(),C.Je,new E.e19(),C.kI,new E.e20(),C.vY,new E.e21(),C.Rs,new E.e22(),C.hJ,new E.e23(),C.Lw,new E.e24(),C.eR,new E.e25(),C.LS,new E.e26(),C.iE,new E.e27(),C.f4,new E.e28(),C.VK,new E.e29(),C.aH,new E.e30(),C.aK,new E.e31(),C.GP,new E.e32(),C.mw,new E.e33(),C.vs,new E.e34(),C.Gr,new E.e35(),C.TU,new E.e36(),C.Fe,new E.e37(),C.tP,new E.e38(),C.yh,new E.e39(),C.Zb,new E.e40(),C.u7,new E.e41(),C.p8,new E.e42(),C.qR,new E.e43(),C.ld,new E.e44(),C.ne,new E.e45(),C.B0,new E.e46(),C.r1,new E.e47(),C.mr,new E.e48(),C.Ek,new E.e49(),C.Pn,new E.e50(),C.YT,new E.e51(),C.h7,new E.e52(),C.R3,new E.e53(),C.cJ,new E.e54(),C.WQ,new E.e55(),C.fV,new E.e56(),C.jU,new E.e57(),C.OO,new E.e58(),C.Mc,new E.e59(),C.FP,new E.e60(),C.kF,new E.e61(),C.UD,new E.e62(),C.Aq,new E.e63(),C.DS,new E.e64(),C.C9,new E.e65(),C.VF,new E.e66(),C.uU,new E.e67(),C.YJ,new E.e68(),C.eF,new E.e69(),C.oI,new E.e70(),C.ST,new E.e71(),C.QH,new E.e72(),C.qX,new E.e73(),C.rE,new E.e74(),C.nf,new E.e75(),C.EI,new E.e76(),C.JB,new E.e77(),C.RY,new E.e78(),C.d4,new E.e79(),C.cF,new E.e80(),C.SI,new E.e81(),C.zS,new E.e82(),C.YA,new E.e83(),C.Ge,new E.e84(),C.A7,new E.e85(),C.He,new E.e86(),C.im,new E.e87(),C.Ss,new E.e88(),C.k6,new E.e89(),C.oj,new E.e90(),C.PJ,new E.e91(),C.Yb,new E.e92(),C.q2,new E.e93(),C.d2,new E.e94(),C.kN,new E.e95(),C.uO,new E.e96(),C.fn,new E.e97(),C.yB,new E.e98(),C.eJ,new E.e99(),C.iG,new E.e100(),C.Py,new E.e101(),C.pC,new E.e102(),C.uu,new E.e103(),C.qs,new E.e104(),C.XH,new E.e105(),C.XJ,new E.e106(),C.tJ,new E.e107(),C.F8,new E.e108(),C.fy,new E.e109(),C.C1,new E.e110(),C.Nr,new E.e111(),C.nL,new E.e112(),C.a0,new E.e113(),C.Yg,new E.e114(),C.bR,new E.e115(),C.ai,new E.e116(),C.ob,new E.e117(),C.MY,new E.e118(),C.Wg,new E.e119(),C.tD,new E.e120(),C.QS,new E.e121(),C.C7,new E.e122(),C.nZ,new E.e123(),C.Of,new E.e124(),C.Vl,new E.e125(),C.pY,new E.e126(),C.XL,new E.e127(),C.LA,new E.e128(),C.Iw,new E.e129(),C.tz,new E.e130(),C.AT,new E.e131(),C.Lk,new E.e132(),C.GS,new E.e133(),C.rB,new E.e134(),C.bz,new E.e135(),C.Jx,new E.e136(),C.b5,new E.e137(),C.z6,new E.e138(),C.SY,new E.e139(),C.Lc,new E.e140(),C.hf,new E.e141(),C.uk,new E.e142(),C.Zi,new E.e143(),C.TN,new E.e144(),C.GI,new E.e145(),C.Wn,new E.e146(),C.ur,new E.e147(),C.VN,new E.e148(),C.EV,new E.e149(),C.VI,new E.e150(),C.eh,new E.e151(),C.SA,new E.e152(),C.uG,new E.e153(),C.kV,new E.e154(),C.vp,new E.e155(),C.cc,new E.e156(),C.DY,new E.e157(),C.Lx,new E.e158(),C.M3,new E.e159(),C.wT,new E.e160(),C.JK,new E.e161(),C.SR,new E.e162(),C.t6,new E.e163(),C.rP,new E.e164(),C.qi,new E.e165(),C.pX,new E.e166(),C.kB,new E.e167(),C.LH,new E.e168(),C.a2,new E.e169(),C.VD,new E.e170(),C.NN,new E.e171(),C.UX,new E.e172(),C.YS,new E.e173(),C.pu,new E.e174(),C.uw,new E.e175(),C.BJ,new E.e176(),C.c6,new E.e177(),C.td,new E.e178(),C.Gn,new E.e179(),C.zO,new E.e180(),C.vg,new E.e181(),C.YV,new E.e182(),C.If,new E.e183(),C.Ys,new E.e184(),C.zm,new E.e185(),C.EP,new E.e186(),C.nX,new E.e187(),C.BV,new E.e188(),C.xP,new E.e189(),C.XM,new E.e190(),C.Ic,new E.e191(),C.yG,new E.e192(),C.uI,new E.e193(),C.O9,new E.e194(),C.ba,new E.e195(),C.tW,new E.e196(),C.CG,new E.e197(),C.Jf,new E.e198(),C.Wj,new E.e199(),C.vb,new E.e200(),C.UL,new E.e201(),C.AY,new E.e202(),C.QK,new E.e203(),C.AO,new E.e204(),C.Xd,new E.e205(),C.I7,new E.e206(),C.kY,new E.e207(),C.Wm,new E.e208(),C.vK,new E.e209(),C.Tc,new E.e210(),C.GR,new E.e211(),C.KX,new E.e212(),C.ja,new E.e213(),C.mn,new E.e214(),C.Dj,new E.e215(),C.ir,new E.e216(),C.dx,new E.e217(),C.ni,new E.e218(),C.X2,new E.e219(),C.F3,new E.e220(),C.UY,new E.e221(),C.Aa,new E.e222(),C.nY,new E.e223(),C.tg,new E.e224(),C.HD,new E.e225(),C.iU,new E.e226(),C.eN,new E.e227(),C.ue,new E.e228(),C.nh,new E.e229(),C.L2,new E.e230(),C.vm,new E.e231(),C.Gs,new E.e232(),C.bE,new E.e233(),C.YD,new E.e234(),C.PX,new E.e235(),C.N8,new E.e236(),C.EA,new E.e237(),C.oW,new E.e238(),C.KC,new E.e239(),C.tf,new E.e240(),C.da,new E.e241(),C.Jd,new E.e242(),C.Y4,new E.e243(),C.Si,new E.e244(),C.pH,new E.e245(),C.Ve,new E.e246(),C.jM,new E.e247(),C.rd,new E.e248(),C.W5,new E.e249(),C.uX,new E.e250(),C.nt,new E.e251(),C.IT,new E.e252(),C.li,new E.e253(),C.PM,new E.e254(),C.ks,new E.e255(),C.Om,new E.e256(),C.iC,new E.e257(),C.Nv,new E.e258(),C.Wo,new E.e259(),C.FZ,new E.e260(),C.TW,new E.e261(),C.xS,new E.e262(),C.ft,new E.e263(),C.QF,new E.e264(),C.mi,new E.e265(),C.zz,new E.e266(),C.eO,new E.e267(),C.hO,new E.e268(),C.ei,new E.e269(),C.HK,new E.e270(),C.je,new E.e271(),C.Ef,new E.e272(),C.QL,new E.e273(),C.RH,new E.e274(),C.SP,new E.e275(),C.Q1,new E.e276(),C.ID,new E.e277(),C.dA,new E.e278(),C.bc,new E.e279(),C.kw,new E.e280(),C.nE,new E.e281(),C.ep,new E.e282(),C.hB,new E.e283(),C.J2,new E.e284(),C.hx,new E.e285(),C.zU,new E.e286(),C.OU,new E.e287(),C.bn,new E.e288(),C.mh,new E.e289(),C.Fh,new E.e290(),C.yv,new E.e291(),C.LP,new E.e292(),C.jh,new E.e293(),C.zd,new E.e294(),C.Db,new E.e295(),C.aF,new E.e296(),C.l4,new E.e297(),C.fj,new E.e298(),C.xw,new E.e299(),C.zn,new E.e300(),C.RJ,new E.e301(),C.Sk,new E.e302(),C.KS,new E.e303(),C.YE,new E.e304(),C.Uy,new E.e305()],null,null)
+y=P.EF([C.aP,new E.e306(),C.cg,new E.e307(),C.Zg,new E.e308(),C.S4,new E.e309(),C.AV,new E.e310(),C.bk,new E.e311(),C.lH,new E.e312(),C.am,new E.e313(),C.oE,new E.e314(),C.kG,new E.e315(),C.Wt,new E.e316(),C.mM,new E.e317(),C.aw,new E.e318(),C.XA,new E.e319(),C.i4,new E.e320(),C.mJ,new E.e321(),C.yL,new E.e322(),C.nr,new E.e323(),C.bJ,new E.e324(),C.kI,new E.e325(),C.vY,new E.e326(),C.VK,new E.e327(),C.aH,new E.e328(),C.GP,new E.e329(),C.vs,new E.e330(),C.Gr,new E.e331(),C.Fe,new E.e332(),C.tP,new E.e333(),C.yh,new E.e334(),C.Zb,new E.e335(),C.p8,new E.e336(),C.ld,new E.e337(),C.ne,new E.e338(),C.B0,new E.e339(),C.mr,new E.e340(),C.YT,new E.e341(),C.cJ,new E.e342(),C.WQ,new E.e343(),C.jU,new E.e344(),C.OO,new E.e345(),C.Mc,new E.e346(),C.QH,new E.e347(),C.rE,new E.e348(),C.nf,new E.e349(),C.Ge,new E.e350(),C.A7,new E.e351(),C.He,new E.e352(),C.oj,new E.e353(),C.d2,new E.e354(),C.uO,new E.e355(),C.fn,new E.e356(),C.yB,new E.e357(),C.Py,new E.e358(),C.uu,new E.e359(),C.qs,new E.e360(),C.rB,new E.e361(),C.z6,new E.e362(),C.hf,new E.e363(),C.uk,new E.e364(),C.Zi,new E.e365(),C.TN,new E.e366(),C.ur,new E.e367(),C.EV,new E.e368(),C.VI,new E.e369(),C.eh,new E.e370(),C.SA,new E.e371(),C.uG,new E.e372(),C.kV,new E.e373(),C.vp,new E.e374(),C.SR,new E.e375(),C.t6,new E.e376(),C.kB,new E.e377(),C.UX,new E.e378(),C.YS,new E.e379(),C.c6,new E.e380(),C.td,new E.e381(),C.zO,new E.e382(),C.YV,new E.e383(),C.If,new E.e384(),C.Ys,new E.e385(),C.EP,new E.e386(),C.nX,new E.e387(),C.BV,new E.e388(),C.XM,new E.e389(),C.Ic,new E.e390(),C.O9,new E.e391(),C.tW,new E.e392(),C.Wj,new E.e393(),C.vb,new E.e394(),C.QK,new E.e395(),C.Xd,new E.e396(),C.kY,new E.e397(),C.vK,new E.e398(),C.Tc,new E.e399(),C.GR,new E.e400(),C.KX,new E.e401(),C.ja,new E.e402(),C.Dj,new E.e403(),C.X2,new E.e404(),C.UY,new E.e405(),C.Aa,new E.e406(),C.nY,new E.e407(),C.tg,new E.e408(),C.HD,new E.e409(),C.iU,new E.e410(),C.eN,new E.e411(),C.Gs,new E.e412(),C.bE,new E.e413(),C.YD,new E.e414(),C.PX,new E.e415(),C.tf,new E.e416(),C.Jd,new E.e417(),C.pH,new E.e418(),C.Ve,new E.e419(),C.jM,new E.e420(),C.rd,new E.e421(),C.uX,new E.e422(),C.nt,new E.e423(),C.IT,new E.e424(),C.PM,new E.e425(),C.ks,new E.e426(),C.Om,new E.e427(),C.iC,new E.e428(),C.Nv,new E.e429(),C.FZ,new E.e430(),C.TW,new E.e431(),C.ft,new E.e432(),C.mi,new E.e433(),C.zz,new E.e434(),C.dA,new E.e435(),C.kw,new E.e436(),C.nE,new E.e437(),C.hx,new E.e438(),C.zU,new E.e439(),C.OU,new E.e440(),C.zd,new E.e441(),C.RJ,new E.e442(),C.YE,new E.e443()],null,null)
+x=P.EF([C.K4,C.qJ,C.yS,C.Mt,C.OG,C.il,C.nw,C.Mt,C.ou,C.Mt,C.oT,C.il,C.jR,C.Mt,C.XW,C.il,C.kH,C.Mt,C.Lg,C.qJ,C.Bi,C.il,C.KO,C.Mt,C.wk,C.Mt,C.jA,C.qJ,C.Jo,C.il,C.Az,C.Mt,C.Vx,C.Mt,C.Qb,C.Mt,C.lE,C.al,C.te,C.Mt,C.iD,C.Mt,C.Ju,C.Mt,C.uC,C.Mt,C.Wz,C.il,C.Ke,C.Mt,C.pF,C.il,C.Wh,C.Mt,C.qF,C.Mt,C.qZ,C.il,C.Zj,C.Mt,C.he,C.Mt,C.dD,C.al,C.hP,C.Mt,C.tc,C.Mt,C.rR,C.il,C.oG,C.Mt,C.mK,C.il,C.IZ,C.Mt,C.FG,C.il,C.pJ,C.Mt,C.tU,C.Mt,C.DD,C.Mt,C.Yy,C.il,C.Xv,C.Mt,C.ce,C.Mt,C.UJ,C.il,C.ca,C.Mt,C.Io,C.Mt,C.j4,C.Mt,C.EG,C.Mt,C.CT,C.Mt,C.mq,C.Mt,C.Tq,C.Mt,C.lp,C.il,C.PT,C.Mt,C.fU,C.Mt,C.pi,C.Mt,C.Fn,C.Mt,C.Ey,C.Mt,C.km,C.Mt,C.vw,C.Mt,C.LT,C.Mt,C.NW,C.Mz,C.ms,C.Mt,C.FA,C.Mt,C.Qt,C.Mt,C.a8,C.Mt,C.JW,C.Mt,C.Mf,C.Mt,C.rC,C.Mt,C.Dl,C.Mt,C.Mz,C.qJ,C.Nw,C.Mt,C.ON,C.Mt,C.Sb,C.al,C.Th,C.Mt,C.wH,C.Mt,C.pK,C.Mt,C.R9,C.Mt,C.il,C.Mt,C.QJ,C.Mt,C.u4,C.Mt,C.X8,C.Mt,C.kt,C.Mt,C.Y3,C.qJ,C.NR,C.Mt,C.tQ,C.Mt,C.bC,C.Mt,C.ws,C.Mt,C.cK,C.il,C.jK,C.Mt,C.qJ,C.jw,C.Mt,C.Mz,C.al,C.il],null,null)
+y=O.rH(!1,P.EF([C.K4,P.EF([C.S4,C.aj,C.AV,C.Qp,C.mJ,C.Qu,C.hf,C.V0],null,null),C.yS,P.EF([C.UX,C.Pt],null,null),C.OG,P.Fl(null,null),C.nw,P.EF([C.rB,C.xY,C.bz,C.Bk],null,null),C.ou,P.EF([C.XA,C.dq,C.yB,C.vZ,C.tg,C.DC],null,null),C.oT,P.EF([C.i4,C.Qs,C.Wm,C.QW],null,null),C.jR,P.EF([C.i4,C.aJ],null,null),C.XW,P.Fl(null,null),C.kH,P.EF([C.nr,C.BO],null,null),C.Lg,P.EF([C.S4,C.aj,C.AV,C.Qp,C.B0,C.iH,C.r1,C.nP,C.mr,C.iz],null,null),C.Bi,P.Fl(null,null),C.KO,P.EF([C.yh,C.Ul],null,null),C.wk,P.EF([C.AV,C.fr,C.eh,C.jO,C.Aa,C.k5,C.mi,C.yV],null,null),C.jA,P.EF([C.S4,C.aj,C.AV,C.Qp,C.YT,C.LC,C.hf,C.V0,C.UY,C.n6],null,null),C.Jo,P.Fl(null,null),C.Az,P.EF([C.WQ,C.ah],null,null),C.Vx,P.EF([C.OO,C.Cf],null,null),C.Qb,P.EF([C.Mc,C.f0],null,null),C.lE,P.EF([C.QK,C.P9],null,null),C.te,P.EF([C.nf,C.wR],null,null),C.iD,P.EF([C.QH,C.C4,C.qX,C.dO,C.PM,C.jv],null,null),C.Ju,P.EF([C.kG,C.Pr,C.rB,C.xY,C.Zi,C.xx,C.TN,C.Gj,C.vb,C.Mq,C.UL,C.bG],null,null),C.uC,P.EF([C.uO,C.KK,C.kY,C.rT],null,null),C.Wz,P.Fl(null,null),C.Ke,P.EF([C.fn,C.Kk],null,null),C.pF,P.Fl(null,null),C.Wh,P.EF([C.yL,C.j5],null,null),C.qF,P.EF([C.vp,C.o0],null,null),C.qZ,P.Fl(null,null),C.Zj,P.EF([C.oj,C.GT],null,null),C.he,P.EF([C.vp,C.o0],null,null),C.dD,P.EF([C.pH,C.xV],null,null),C.hP,P.EF([C.Wj,C.Ah],null,null),C.tc,P.EF([C.vp,C.o0],null,null),C.rR,P.Fl(null,null),C.oG,P.EF([C.jU,C.bw],null,null),C.mK,P.Fl(null,null),C.IZ,P.EF([C.vp,C.o0],null,null),C.FG,P.Fl(null,null),C.pJ,P.EF([C.Ve,C.X4],null,null),C.tU,P.EF([C.qs,C.MN],null,null),C.DD,P.EF([C.vp,C.o0],null,null),C.Yy,P.Fl(null,null),C.Xv,P.EF([C.YE,C.Wl],null,null),C.ce,P.EF([C.aH,C.w3,C.He,C.fz,C.vb,C.Mq,C.UL,C.bG,C.Dj,C.Ay,C.Gs,C.iO,C.bE,C.h3,C.YD,C.fP,C.TW,C.H0,C.xS,C.hd,C.zz,C.lS],null,null),C.UJ,P.Fl(null,null),C.ca,P.EF([C.bJ,C.UI,C.ox,C.Rh],null,null),C.Io,P.EF([C.rB,C.RU],null,null),C.j4,P.EF([C.rB,C.RU],null,null),C.EG,P.EF([C.rB,C.RU],null,null),C.CT,P.EF([C.rB,C.RU],null,null),C.mq,P.EF([C.rB,C.RU],null,null),C.Tq,P.EF([C.SR,C.S9,C.t6,C.b6,C.rP,C.Nt],null,null),C.lp,P.Fl(null,null),C.PT,P.EF([C.EV,C.ZQ],null,null),C.fU,P.EF([C.kB,C.nq,C.LH,C.oB,C.EP,C.db],null,null),C.pi,P.EF([C.rB,C.xY,C.kB,C.nq,C.LH,C.oB],null,null),C.Fn,P.EF([C.rB,C.xY,C.bz,C.Bk,C.EP,C.GO,C.tf,C.q6],null,null),C.Ey,P.EF([C.XA,C.dq,C.uk,C.rY],null,null),C.km,P.EF([C.rB,C.RU,C.bz,C.Bk,C.uk,C.rY],null,null),C.vw,P.EF([C.uk,C.rY,C.EV,C.ZQ],null,null),C.LT,P.EF([C.Ys,C.Cg],null,null),C.NW,P.Fl(null,null),C.ms,P.EF([C.cg,C.ll,C.uk,C.rY,C.kV,C.vz],null,null),C.FA,P.EF([C.cg,C.ll,C.kV,C.vz],null,null),C.Qt,P.EF([C.ld,C.Gw],null,null),C.a8,P.EF([C.p8,C.uc,C.ld,C.Gw],null,null),C.JW,P.EF([C.aP,C.oh,C.AV,C.Qp,C.hf,C.V0],null,null),C.Mf,P.EF([C.uk,C.rY],null,null),C.rC,P.EF([C.uO,C.JT,C.td,C.Zk,C.XM,C.Tt,C.tg,C.DC],null,null),C.Dl,P.EF([C.VK,C.lW],null,null),C.Mz,P.EF([C.O9,C.q9,C.ba,C.kQ],null,null),C.Nw,P.EF([C.S4,C.aj,C.VI,C.w6],null,null),C.ON,P.EF([C.kI,C.Bf,C.vY,C.ZS,C.Rs,C.EW,C.vs,C.MP,C.Gr,C.VJ,C.TU,C.Cp,C.A7,C.SD,C.SA,C.KI,C.uG,C.Df,C.PX,C.jz,C.N8,C.qE,C.nt,C.VS,C.IT,C.NL,C.li,C.Tz],null,null),C.Sb,P.EF([C.tW,C.It,C.CG,C.Ml],null,null),C.Th,P.EF([C.PX,C.jz],null,null),C.wH,P.EF([C.yh,C.lJ],null,null),C.pK,P.EF([C.ne,C.bp],null,null),C.R9,P.EF([C.kY,C.TO,C.Wm,C.QW],null,null),C.il,P.EF([C.uu,C.NJ,C.kY,C.TO,C.Wm,C.QW],null,null),C.QJ,P.EF([C.B0,C.iH,C.vp,C.Rz],null,null),C.u4,P.EF([C.B0,C.iH,C.SR,C.xR],null,null),C.X8,P.EF([C.Zg,C.b7,C.td,C.Zk,C.Gn,C.az],null,null),C.kt,P.EF([C.nE,C.FM],null,null),C.Y3,P.EF([C.bk,C.NS,C.lH,C.dG,C.zU,C.uT],null,null),C.NR,P.EF([C.B0,C.iH,C.rE,C.B7],null,null),C.tQ,P.EF([C.kw,C.oC],null,null),C.bC,P.EF([C.am,C.JD,C.oE,C.r2,C.uX,C.Eb],null,null),C.ws,P.EF([C.ft,C.Gz],null,null),C.cK,P.Fl(null,null),C.jK,P.EF([C.yh,C.Ul,C.RJ,C.BP],null,null)],null,null),z,P.EF([C.aP,"active",C.IH,"address",C.cg,"anchor",C.j2,"app",C.Zg,"args",C.Wq,"asStringLiteral",C.ET,"assertsEnabled",C.BE,"averageCollectionPeriodInMillis",C.WC,"bpt",C.hR,"breakpoint",C.S4,"busy",C.Ro,"buttonClick",C.hN,"bytes",C.AV,"callback",C.bV,"capacity",C.C0,"change",C.eZ,"changeSort",C.bk,"checked",C.lH,"checkedText",C.am,"chromeTargets",C.oE,"chromiumAddress",C.kG,"classTable",C.OI,"classes",C.Wt,"clazz",C.I9,"closeItem",C.To,"closing",C.mM,"closureCtxt",C.aw,"closureFunc",C.XA,"cls",C.i4,"code",C.mJ,"color",C.qt,"coloring",C.p1,"columns",C.yJ,"connectStandalone",C.la,"connectToVm",C.yL,"connection",C.nr,"context",C.bJ,"counters",C.ox,"countersChanged",C.Je,"current",C.kI,"currentLine",C.vY,"currentPos",C.Rs,"currentPosChanged",C.hJ,"dartMetrics",C.Lw,"deleteVm",C.eR,"deoptimizations",C.LS,"description",C.iE,"descriptor",C.f4,"descriptors",C.VK,"devtools",C.aH,"displayCutoff",C.aK,"doAction",C.GP,"element",C.mw,"elements",C.vs,"endLine",C.Gr,"endPos",C.TU,"endPosChanged",C.Fe,"endTokenPos",C.tP,"entry",C.yh,"error",C.Zb,"eval",C.u7,"evalNow",C.p8,"event",C.qR,"eventType",C.ld,"events",C.ne,"exception",C.B0,"expand",C.r1,"expandChanged",C.mr,"expanded",C.Ek,"expander",C.Pn,"expanderStyle",C.YT,"expr",C.h7,"external",C.R3,"fd",C.cJ,"fetchInboundReferences",C.WQ,"field",C.fV,"fields",C.jU,"file",C.OO,"flag",C.Mc,"flagList",C.FP,"formatSize",C.kF,"formatTime",C.UD,"formattedAddress",C.Aq,"formattedAverage",C.DS,"formattedCollections",C.C9,"formattedDeoptId",C.VF,"formattedExclusive",C.uU,"formattedExclusiveTicks",C.YJ,"formattedInclusive",C.eF,"formattedInclusiveTicks",C.oI,"formattedLine",C.ST,"formattedTotalCollectionTime",C.QH,"fragmentation",C.qX,"fragmentationChanged",C.rE,"frame",C.nf,"function",C.EI,"functions",C.JB,"getColumnLabel",C.RY,"getTabs",C.d4,"goto",C.cF,"gotoLink",C.SI,"hasDescriptors",C.zS,"hasDisassembly",C.YA,"hasNoAllocations",C.Ge,"hashLinkWorkaround",C.A7,"height",C.He,"hideTagsChecked",C.im,"history",C.Ss,"hits",C.k6,"hoverText",C.oj,"httpServer",C.PJ,"human",C.Yb,"id",C.q2,"idle",C.d2,"imp",C.kN,"imports",C.uO,"inboundReferences",C.fn,"instance",C.yB,"instances",C.eJ,"instruction",C.iG,"instructions",C.Py,"interface",C.pC,"interfaces",C.uu,"internal",C.qs,"io",C.XH,"isAbstract",C.XJ,"isAbstractType",C.tJ,"isBool",C.F8,"isChromeTarget",C.fy,"isClosure",C.C1,"isComment",C.Nr,"isConst",C.nL,"isCurrentTarget",C.a0,"isDart",C.Yg,"isDartCode",C.bR,"isDouble",C.ai,"isEmpty",C.ob,"isError",C.MY,"isInlinable",C.Wg,"isInt",C.tD,"isList",C.QS,"isMap",C.C7,"isMirrorReference",C.nZ,"isNotEmpty",C.Of,"isNull",C.Vl,"isOptimizable",C.pY,"isOptimized",C.XL,"isPatch",C.LA,"isPipe",C.Iw,"isPlainInstance",C.tz,"isSentinel",C.AT,"isStatic",C.Lk,"isString",C.GS,"isWeakProperty",C.rB,"isolate",C.bz,"isolateChanged",C.Jx,"isolates",C.b5,"jumpTarget",C.z6,"key",C.SY,"keys",C.Lc,"kind",C.hf,"label",C.uk,"last",C.Zi,"lastAccumulatorReset",C.TN,"lastServiceGC",C.GI,"lastUpdate",C.Wn,"length",C.ur,"lib",C.VN,"libraries",C.EV,"library",C.VI,"line",C.eh,"lineMode",C.SA,"lines",C.uG,"linesReady",C.kV,"link",C.vp,"list",C.cc,"listening",C.DY,"loading",C.Lx,"localAddress",C.M3,"localPort",C.wT,"mainPort",C.JK,"makeLineId",C.SR,"map",C.t6,"mapAsString",C.rP,"mapChanged",C.qi,"max",C.pX,"message",C.kB,"metric",C.LH,"metricChanged",C.a2,"min",C.VD,"mouseOut",C.NN,"mouseOver",C.UX,"msg",C.YS,"name",C.pu,"nameIsEmpty",C.uw,"nativeFields",C.BJ,"newSpace",C.c6,"notifications",C.td,"object",C.Gn,"objectChanged",C.zO,"objectPool",C.vg,"oldSpace",C.YV,"owningClass",C.If,"owningLibrary",C.Ys,"pad",C.zm,"padding",C.EP,"page",C.nX,"parent",C.BV,"parentContext",C.xP,"parseInt",C.XM,"path",C.Ic,"pause",C.yG,"pauseEvent",C.uI,"pid",C.O9,"pollPeriod",C.ba,"pollPeriodChanged",C.tW,"pos",C.CG,"posChanged",C.Jf,"possibleBpt",C.Wj,"process",C.vb,"profile",C.UL,"profileChanged",C.AY,"protocol",C.QK,"qualified",C.AO,"qualifiedName",C.Xd,"reachable",C.I7,"readClosed",C.kY,"ref",C.Wm,"refChanged",C.vK,"reference",C.Tc,"referent",C.GR,"refresh",C.KX,"refreshCoverage",C.ja,"refreshGC",C.mn,"refreshRateChange",C.Dj,"refreshTime",C.ir,"relativeLink",C.dx,"remoteAddress",C.ni,"remotePort",C.X2,"resetAccumulator",C.F3,"response",C.UY,"result",C.Aa,"results",C.nY,"resume",C.tg,"retainedBytes",C.HD,"retainedSize",C.iU,"retainingPath",C.eN,"rootLib",C.ue,"row",C.nh,"rows",C.L2,"running",C.vm,"sampleBufferSizeChange",C.Gs,"sampleCount",C.bE,"sampleDepth",C.YD,"sampleRate",C.PX,"script",C.N8,"scriptChanged",C.EA,"scripts",C.oW,"selectExpr",C.KC,"selectMetric",C.tf,"selectedMetric",C.da,"size",C.Jd,"slot",C.Y4,"slotIsArrayIndex",C.Si,"slotIsField",C.pH,"small",C.Ve,"socket",C.jM,"socketOwner",C.rd,"source",C.W5,"standalone",C.uX,"standaloneVmAddress",C.nt,"startLine",C.IT,"startPos",C.li,"startPosChanged",C.PM,"status",C.ks,"stepInto",C.Om,"stepOut",C.iC,"stepOver",C.Nv,"subclass",C.Wo,"subclasses",C.FZ,"superclass",C.TW,"tagSelector",C.xS,"tagSelectorChanged",C.ft,"target",C.QF,"targets",C.mi,"text",C.zz,"timeSpan",C.eO,"timeStamp",C.hO,"tipExclusive",C.ei,"tipKind",C.HK,"tipParent",C.je,"tipTicks",C.Ef,"tipTime",C.QL,"toString",C.RH,"toStringAsFixed",C.SP,"toggleBreakpoint",C.Q1,"toggleExpand",C.ID,"toggleExpanded",C.dA,"tokenPos",C.bc,"topFrame",C.kw,"trace",C.nE,"tracer",C.ep,"tree",C.hB,"type",C.J2,"typeChecksEnabled",C.hx,"typeClass",C.zU,"uncheckedText",C.OU,"unoptimizedCode",C.bn,"updateLineMode",C.mh,"uptime",C.Fh,"url",C.yv,"usageCounter",C.LP,"used",C.jh,"v",C.zd,"value",C.Db,"valueAsString",C.aF,"valueAsStringIsTruncated",C.l4,"values",C.fj,"variable",C.xw,"variables",C.zn,"version",C.RJ,"vm",C.Sk,"vmMetrics",C.KS,"vmName",C.YE,"webSocket",C.Uy,"writeClosed"],null,null),x,y,null)
 $.j8=new O.fH(y)
 $.Yv=new O.bY(y)
 $.qe=new O.ut(y)
-$.M6=[new E.e430(),new E.e431(),new E.e432(),new E.e433(),new E.e434(),new E.e435(),new E.e436(),new E.e437(),new E.e438(),new E.e439(),new E.e440(),new E.e441(),new E.e442(),new E.e443(),new E.e444(),new E.e445(),new E.e446(),new E.e447(),new E.e448(),new E.e449(),new E.e450(),new E.e451(),new E.e452(),new E.e453(),new E.e454(),new E.e455(),new E.e456(),new E.e457(),new E.e458(),new E.e459(),new E.e460(),new E.e461(),new E.e462(),new E.e463(),new E.e464(),new E.e465(),new E.e466(),new E.e467(),new E.e468(),new E.e469(),new E.e470(),new E.e471(),new E.e472(),new E.e473(),new E.e474(),new E.e475(),new E.e476(),new E.e477(),new E.e478(),new E.e479(),new E.e480(),new E.e481(),new E.e482(),new E.e483(),new E.e484(),new E.e485(),new E.e486(),new E.e487(),new E.e488(),new E.e489(),new E.e490(),new E.e491(),new E.e492(),new E.e493(),new E.e494(),new E.e495(),new E.e496(),new E.e497(),new E.e498(),new E.e499(),new E.e500(),new E.e501(),new E.e502(),new E.e503(),new E.e504(),new E.e505(),new E.e506(),new E.e507(),new E.e508(),new E.e509(),new E.e510(),new E.e511(),new E.e512(),new E.e513(),new E.e514(),new E.e515(),new E.e516(),new E.e517()]
+$.M6=[new E.e444(),new E.e445(),new E.e446(),new E.e447(),new E.e448(),new E.e449(),new E.e450(),new E.e451(),new E.e452(),new E.e453(),new E.e454(),new E.e455(),new E.e456(),new E.e457(),new E.e458(),new E.e459(),new E.e460(),new E.e461(),new E.e462(),new E.e463(),new E.e464(),new E.e465(),new E.e466(),new E.e467(),new E.e468(),new E.e469(),new E.e470(),new E.e471(),new E.e472(),new E.e473(),new E.e474(),new E.e475(),new E.e476(),new E.e477(),new E.e478(),new E.e479(),new E.e480(),new E.e481(),new E.e482(),new E.e483(),new E.e484(),new E.e485(),new E.e486(),new E.e487(),new E.e488(),new E.e489(),new E.e490(),new E.e491(),new E.e492(),new E.e493(),new E.e494(),new E.e495(),new E.e496(),new E.e497(),new E.e498(),new E.e499(),new E.e500(),new E.e501(),new E.e502(),new E.e503(),new E.e504(),new E.e505(),new E.e506(),new E.e507(),new E.e508(),new E.e509(),new E.e510(),new E.e511(),new E.e512(),new E.e513(),new E.e514(),new E.e515(),new E.e516(),new E.e517(),new E.e518(),new E.e519(),new E.e520(),new E.e521(),new E.e522(),new E.e523(),new E.e524(),new E.e525(),new E.e526(),new E.e527(),new E.e528(),new E.e529(),new E.e530(),new E.e531(),new E.e532(),new E.e533(),new E.e534()]
 $.UG=!0
 F.E2()},"$0","jk",0,0,17],
 em:{
@@ -2676,2134 +2675,2202 @@
 $isEH:true},
 wa:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gA3()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.mN(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 Or:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gqZ()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gA3()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 YL:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gqr()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gqZ()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 wf:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gQ1()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gqr()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 Oa:{
 "^":"TpZ:12;",
-$1:[function(a){return J.zL(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gQ1()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 emv:{
 "^":"TpZ:12;",
-$1:[function(a){return J.aA(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.zL(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 Lbd:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gfj()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.aA(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 QAa:{
 "^":"TpZ:12;",
-$1:[function(a){return J.WT(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gfj()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 CvS:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gkV()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.WT(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 edy:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Wp(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gkV()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 waE:{
 "^":"TpZ:12;",
-$1:[function(a){return J.n9(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Wp(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 Ore:{
 "^":"TpZ:12;",
-$1:[function(a){return J.K0(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.n9(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 YLa:{
 "^":"TpZ:12;",
-$1:[function(a){return J.hn(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.K0(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 wfa:{
 "^":"TpZ:12;",
-$1:[function(a){return J.HP(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.hn(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 Oaa:{
 "^":"TpZ:12;",
-$1:[function(a){return J.zF(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.HP(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e0:{
 "^":"TpZ:12;",
-$1:[function(a){return J.yz(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.zF(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e1:{
 "^":"TpZ:12;",
-$1:[function(a){return J.pP(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.yz(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e2:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gUP()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.pP(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e3:{
 "^":"TpZ:12;",
-$1:[function(a){return J.RC(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gUP()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e4:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gaP()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.RC(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e5:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gwz()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gaP()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e6:{
 "^":"TpZ:12;",
-$1:[function(a){return J.E3(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gu5()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e7:{
 "^":"TpZ:12;",
-$1:[function(a){return J.on(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gwz()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e8:{
 "^":"TpZ:12;",
-$1:[function(a){return J.yI(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.E3(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e9:{
 "^":"TpZ:12;",
-$1:[function(a){return J.SM(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.on(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e10:{
 "^":"TpZ:12;",
-$1:[function(a){return a.goH()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.yI(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e11:{
 "^":"TpZ:12;",
-$1:[function(a){return J.dw(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.SM(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e12:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ev(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.goH()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e13:{
 "^":"TpZ:12;",
-$1:[function(a){return J.xe(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.dw(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e14:{
 "^":"TpZ:12;",
-$1:[function(a){return J.OT(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ev(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e15:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ok(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.xe(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e16:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gl()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ux(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e17:{
 "^":"TpZ:12;",
-$1:[function(a){return J.h6(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.OT(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e18:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Jr(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ok(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e19:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Hs(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gl()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e20:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gpG()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.h6(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e21:{
 "^":"TpZ:12;",
-$1:[function(a){return J.TG(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Jr(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e22:{
 "^":"TpZ:12;",
-$1:[function(a){return a.guh()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Hs(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e23:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gGB()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gpG()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e24:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gSL()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.TG(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e25:{
 "^":"TpZ:12;",
-$1:[function(a){return a.guH()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.guh()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e26:{
 "^":"TpZ:12;",
-$1:[function(a){return J.GF(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gGB()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e27:{
 "^":"TpZ:12;",
-$1:[function(a){return J.BT(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gSL()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e28:{
 "^":"TpZ:12;",
-$1:[function(a){return J.H2(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.guH()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e29:{
 "^":"TpZ:12;",
-$1:[function(a){return J.y3(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.GF(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e30:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Hg(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.BT(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e31:{
 "^":"TpZ:12;",
-$1:[function(a){return J.k0(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.H2(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e32:{
 "^":"TpZ:12;",
-$1:[function(a){return J.rw(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.y3(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e33:{
 "^":"TpZ:12;",
-$1:[function(a){return J.wt(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Hg(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e34:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gej()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.k0(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e35:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gw2()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.rw(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e36:{
 "^":"TpZ:12;",
-$1:[function(a){return J.w8(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.wt(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e37:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ht(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gej()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e38:{
 "^":"TpZ:12;",
-$1:[function(a){return J.kv(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gw2()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e39:{
 "^":"TpZ:12;",
-$1:[function(a){return J.a3(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.w8(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e40:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ts(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ht(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e41:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ky(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.kv(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e42:{
 "^":"TpZ:12;",
-$1:[function(a){return J.io(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.a3(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e43:{
 "^":"TpZ:12;",
-$1:[function(a){return J.UE(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ts(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e44:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Gl(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.um(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e45:{
 "^":"TpZ:12;",
-$1:[function(a){return J.IL(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.io(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e46:{
 "^":"TpZ:12;",
-$1:[function(a){return J.nb(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.UE(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e47:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gty()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Gl(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e48:{
 "^":"TpZ:12;",
-$1:[function(a){return J.IR(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.IL(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e49:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gMX()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.nb(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e50:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gki()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gty()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e51:{
 "^":"TpZ:12;",
-$1:[function(a){return J.LY(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.IR(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e52:{
 "^":"TpZ:12;",
-$1:[function(a){return J.pm(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gMX()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e53:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gtJ()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gki()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e54:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ec(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.LY(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e55:{
 "^":"TpZ:12;",
-$1:[function(a){return J.PK(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.pm(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e56:{
 "^":"TpZ:12;",
-$1:[function(a){return J.YH(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gtJ()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e57:{
 "^":"TpZ:12;",
-$1:[function(a){return J.WX(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ec(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e58:{
 "^":"TpZ:12;",
-$1:[function(a){return J.IP(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.PK(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e59:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gZd()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.YH(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e60:{
 "^":"TpZ:12;",
-$1:[function(a){return J.TM(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.WX(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e61:{
 "^":"TpZ:12;",
-$1:[function(a){return J.xo(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.IP(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e62:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gkA()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gZd()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e63:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gGK()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.TM(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e64:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gan()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.xo(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e65:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gcQ()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gkA()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e66:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gS7()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gGK()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e67:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gmE()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gan()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e68:{
 "^":"TpZ:12;",
-$1:[function(a){return J.PY(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gcQ()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e69:{
 "^":"TpZ:12;",
-$1:[function(a){return J.bu(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gS7()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e70:{
 "^":"TpZ:12;",
-$1:[function(a){return J.eU(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gmE()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e71:{
 "^":"TpZ:12;",
-$1:[function(a){return J.zN(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.PY(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e72:{
 "^":"TpZ:12;",
-$1:[function(a){return J.m4(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.bu(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e73:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gmu()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.eU(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e74:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gCO()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.zN(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e75:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Jv(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.m4(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e76:{
 "^":"TpZ:12;",
-$1:[function(a){return J.tw(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gmu()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e77:{
 "^":"TpZ:12;",
-$1:[function(a){return J.dE(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gCO()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e78:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gX1()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Jv(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e79:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gUa()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.tw(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e80:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gMp()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.dE(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e81:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Er(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gX1()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e82:{
 "^":"TpZ:12;",
-$1:[function(a){return J.OB(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gUa()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e83:{
 "^":"TpZ:12;",
-$1:[function(a){return J.YQ(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gMp()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e84:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Xf(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Er(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e85:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gc1()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.OB(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e86:{
 "^":"TpZ:12;",
-$1:[function(a){return J.z4(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.YQ(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e87:{
 "^":"TpZ:12;",
-$1:[function(a){return J.aB(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Xf(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e88:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gu0()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gc1()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e89:{
 "^":"TpZ:12;",
-$1:[function(a){return J.eS(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.aW(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e90:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gaj()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.aB(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e91:{
 "^":"TpZ:12;",
-$1:[function(a){return a.giq()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gu0()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e92:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gBm()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.eS(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e93:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ir(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gaj()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e94:{
 "^":"TpZ:12;",
-$1:[function(a){return J.fh(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.giq()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e95:{
 "^":"TpZ:12;",
-$1:[function(a){return J.NDJ(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gBm()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e96:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gNI()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ir(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e97:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gva()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.fh(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e98:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gKt()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.NDJ(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e99:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gp2()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gNI()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e100:{
 "^":"TpZ:12;",
-$1:[function(a){return J.IA(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gva()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e101:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ew(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gKt()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e102:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gVM()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gp2()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e103:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gFY()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ns(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e104:{
 "^":"TpZ:12;",
-$1:[function(a){return J.bL(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ew(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e105:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gBF()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gVM()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e106:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gUB()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.glO()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e107:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gRs()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gFY()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e108:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ix(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.bL(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e109:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gMA()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gBF()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e110:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gqy()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gUB()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e111:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gzx()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gRs()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e112:{
 "^":"TpZ:12;",
-$1:[function(a){return J.FN(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ix(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e113:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gt3()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gMA()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e114:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gho()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gqy()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e115:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gNs()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gzx()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e116:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gWL()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.FN(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e117:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Zo(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gt3()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e118:{
 "^":"TpZ:12;",
-$1:[function(a){return J.PG(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gho()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e119:{
 "^":"TpZ:12;",
-$1:[function(a){return J.pO(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gWL()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e120:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gHh()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Zo(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e121:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gW1()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.PG(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e122:{
 "^":"TpZ:12;",
-$1:[function(a){return a.goF()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gJE()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e123:{
 "^":"TpZ:12;",
-$1:[function(a){return a.geh()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.pO(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e124:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gHY()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gHh()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e125:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gl5()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gW1()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e126:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gFo()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.goF()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e127:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gu7()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.geh()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e128:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gqN()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gHY()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e129:{
 "^":"TpZ:12;",
-$1:[function(a){return J.aT(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gXM()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e130:{
 "^":"TpZ:12;",
-$1:[function(a){return J.KG(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gl5()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e131:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gi2()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gFo()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e132:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gEB()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gu7()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e133:{
 "^":"TpZ:12;",
-$1:[function(a){return J.AW(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gl2()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e134:{
 "^":"TpZ:12;",
-$1:[function(a){return J.iY(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.aT(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e135:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Iz(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.KG(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e136:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Yq(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gi2()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e137:{
 "^":"TpZ:12;",
-$1:[function(a){return J.MQ(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gEB()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e138:{
 "^":"TpZ:12;",
-$1:[function(a){return J.X7(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.AW(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e139:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Kj(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.iY(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e140:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gJW()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Iz(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e141:{
 "^":"TpZ:12;",
-$1:[function(a){return J.q8(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Yq(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e142:{
 "^":"TpZ:12;",
-$1:[function(a){return a.ghX()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.MQ(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e143:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gvU()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.X7(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e144:{
 "^":"TpZ:12;",
-$1:[function(a){return J.jl(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Kj(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e145:{
 "^":"TpZ:12;",
-$1:[function(a){return J.f2(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gJW()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e146:{
 "^":"TpZ:12;",
-$1:[function(a){return J.zY(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.q8(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e147:{
 "^":"TpZ:12;",
-$1:[function(a){return J.de(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.ghX()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e148:{
 "^":"TpZ:12;",
-$1:[function(a){return J.t0(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gvU()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e149:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ds(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.jl(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e150:{
 "^":"TpZ:12;",
-$1:[function(a){return J.cO(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.f2(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e151:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gzM()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.zY(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e152:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gn0()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.de(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e153:{
 "^":"TpZ:12;",
-$1:[function(a){return a.giP()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.t0(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e154:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gfJ()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ds(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e155:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gIT()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.cO(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e156:{
 "^":"TpZ:12;",
-$1:[function(a){return J.c7(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gzM()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e157:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Yf(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gn0()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e158:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ol(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.giP()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e159:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Y7(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gfJ()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e160:{
 "^":"TpZ:12;",
-$1:[function(a){return J.PR(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gIT()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e161:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Oh(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.c7(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e162:{
 "^":"TpZ:12;",
-$1:[function(a){return J.qx(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Yf(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e163:{
 "^":"TpZ:12;",
-$1:[function(a){return J.dj(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ol(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e164:{
 "^":"TpZ:12;",
-$1:[function(a){return J.GL(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Y7(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e165:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ZF(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.PR(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e166:{
 "^":"TpZ:12;",
-$1:[function(a){return J.PW(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Oh(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e167:{
 "^":"TpZ:12;",
-$1:[function(a){return J.rK(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.qx(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e168:{
 "^":"TpZ:12;",
-$1:[function(a){return J.DA(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.dj(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e169:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Pf(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.GL(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e170:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gbA()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ZF(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e171:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gUY()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.PW(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e172:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gvK()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.X6(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e173:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Jj(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.DA(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e174:{
 "^":"TpZ:12;",
-$1:[function(a){return J.t8(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Pf(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e175:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gL1()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gbA()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e176:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gxQ()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gUY()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e177:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gEl()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gvK()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e178:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gxH()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Jj(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e179:{
 "^":"TpZ:12;",
-$1:[function(a){return J.iB(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.t8(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e180:{
 "^":"TpZ:12;",
-$1:[function(a){return J.mF(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gL1()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e181:{
 "^":"TpZ:12;",
-$1:[function(a){return J.MT(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gxQ()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e182:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Lp(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gEl()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e183:{
 "^":"TpZ:12;",
-$1:[function(a){return J.eb(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gxH()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e184:{
 "^":"TpZ:12;",
-$1:[function(a){return J.AF(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.iB(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e185:{
 "^":"TpZ:12;",
-$1:[function(a){return J.fi(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.mF(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e186:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Kl(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.MT(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e187:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gU6()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Lp(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e188:{
 "^":"TpZ:12;",
-$1:[function(a){return J.cj(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gqH()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e189:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Tm(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.eb(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e190:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Yd(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.AF(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e191:{
 "^":"TpZ:12;",
-$1:[function(a){return J.L6(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.fi(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e192:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gj9()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Kl(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e193:{
 "^":"TpZ:12;",
-$1:[function(a){return J.JX(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gU6()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e194:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Tv(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.cj(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e195:{
 "^":"TpZ:12;",
-$1:[function(a){return J.CN(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Tm(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e196:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ql(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Yd(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e197:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ul(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.L6(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e198:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gUx()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gj9()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e199:{
 "^":"TpZ:12;",
-$1:[function(a){return J.id(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.JX(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e200:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gm8()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Tv(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e201:{
 "^":"TpZ:12;",
-$1:[function(a){return J.BZ(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.CN(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e202:{
 "^":"TpZ:12;",
-$1:[function(a){return J.H1(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ql(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e203:{
 "^":"TpZ:12;",
-$1:[function(a){return a.ghL()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ul(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e204:{
 "^":"TpZ:12;",
-$1:[function(a){return J.At(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gUx()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e205:{
 "^":"TpZ:12;",
-$1:[function(a){return J.dZ(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.id(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e206:{
 "^":"TpZ:12;",
-$1:[function(a){return J.GH(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gm8()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e207:{
 "^":"TpZ:12;",
-$1:[function(a){return J.up(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.BZ(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e208:{
 "^":"TpZ:12;",
-$1:[function(a){return J.bS(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.H1(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e209:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gua()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.ghL()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e210:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gNS()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gCM()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e211:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gzK()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.At(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e212:{
 "^":"TpZ:12;",
-$1:[function(a){return J.iL(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.dZ(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e213:{
 "^":"TpZ:12;",
-$1:[function(a){return J.LM(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.GH(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e214:{
 "^":"TpZ:12;",
-$1:[function(a){return J.uW(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.up(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e215:{
 "^":"TpZ:12;",
-$1:[function(a){return J.W2(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.bS(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e216:{
 "^":"TpZ:12;",
-$1:[function(a){return J.UT(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gua()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e217:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Kd(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gNS()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e218:{
 "^":"TpZ:12;",
-$1:[function(a){return J.pU(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gzK()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e219:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Tg(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.iL(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e220:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gVc()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.LM(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e221:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gpF()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.uW(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e222:{
 "^":"TpZ:12;",
-$1:[function(a){return J.TY(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.W2(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e223:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gGL()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.UT(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e224:{
 "^":"TpZ:12;",
-$1:[function(a){return J.X9(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Kd(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e225:{
 "^":"TpZ:12;",
-$1:[function(a){return J.nv(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.pU(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e226:{
 "^":"TpZ:12;",
-$1:[function(a){return J.UP(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Tg(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e227:{
 "^":"TpZ:12;",
-$1:[function(a){return J.UA(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gVc()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e228:{
 "^":"TpZ:12;",
-$1:[function(a){return J.zE(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gpF()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e229:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Zs(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.TY(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e230:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gXR()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gGL()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e231:{
 "^":"TpZ:12;",
-$1:[function(a){return J.NB(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.X9(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e232:{
 "^":"TpZ:12;",
-$1:[function(a){return J.le(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.nv(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e233:{
 "^":"TpZ:12;",
-$1:[function(a){return J.bh(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.UP(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e234:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Y5(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.UA(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e235:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Ue(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.zE(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e236:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Cs(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Zs(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e237:{
 "^":"TpZ:12;",
-$1:[function(a){return J.nd(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gXR()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e238:{
 "^":"TpZ:12;",
-$1:[function(a){return J.U8(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.uN(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e239:{
 "^":"TpZ:12;",
-$1:[function(a){return J.oN(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.le(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e240:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gip()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.bh(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e241:{
 "^":"TpZ:12;",
-$1:[function(a){return J.M2(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Y5(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e242:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gp8()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Ue(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e243:{
 "^":"TpZ:12;",
-$1:[function(a){return J.F9(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Cs(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e244:{
 "^":"TpZ:12;",
-$1:[function(a){return J.HB(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.dK(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e245:{
 "^":"TpZ:12;",
-$1:[function(a){return J.fM(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.U8(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e246:{
 "^":"TpZ:12;",
-$1:[function(a){return J.ay(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.oN(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e247:{
 "^":"TpZ:12;",
-$1:[function(a){return J.jB(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gip()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e248:{
 "^":"TpZ:12;",
-$1:[function(a){return J.C7(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.M2(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e249:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Hy(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gp8()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e250:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Pq(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.F9(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e251:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gDo()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.HB(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e252:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gLT()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.fM(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e253:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gAY()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.ay(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e254:{
 "^":"TpZ:12;",
-$1:[function(a){return J.j1(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.jB(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e255:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Aw(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.lA(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e256:{
 "^":"TpZ:12;",
-$1:[function(a){return J.l2(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Hy(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e257:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gm2()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Pq(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e258:{
 "^":"TpZ:12;",
-$1:[function(a){return J.dY(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gDo()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e259:{
 "^":"TpZ:12;",
-$1:[function(a){return J.yq(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gLT()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e260:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Xr(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gAY()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e261:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gzg()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.j1(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e262:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gZn()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Aw(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e263:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gvs()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.l2(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e264:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gVh()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gm2()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e265:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gZX()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.dY(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e266:{
 "^":"TpZ:12;",
-$1:[function(a){return J.PS(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.yq(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e267:{
 "^":"TpZ:12;",
-$1:[function(a){return J.As(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Xr(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e268:{
 "^":"TpZ:12;",
-$1:[function(a){return J.YG(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gzg()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e269:{
 "^":"TpZ:12;",
-$1:[function(a){return J.SG(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gZn()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e270:{
 "^":"TpZ:12;",
-$1:[function(a){return J.fv(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gvs()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e271:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gVF()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gVh()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e272:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gkw()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gZX()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e273:{
 "^":"TpZ:12;",
-$1:[function(a){return J.K2(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.PS(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e274:{
 "^":"TpZ:12;",
-$1:[function(a){return J.eK(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.As(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e275:{
 "^":"TpZ:12;",
-$1:[function(a){return J.uy(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.YG(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e276:{
 "^":"TpZ:12;",
-$1:[function(a){return J.zH(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.SG(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e277:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gdW()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.fv(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e278:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gCY()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gVF()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e279:{
 "^":"TpZ:12;",
-$1:[function(a){return J.un(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gkw()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e280:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gjW()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.K2(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e281:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Sl(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.eK(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e282:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gI2()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.uy(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e283:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Q2(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.zH(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e284:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gSu()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gdW()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e285:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gSU()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gCY()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e286:{
 "^":"TpZ:12;",
-$1:[function(a){return a.ghW()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.un(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e287:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Vm(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gjW()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e288:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gPE()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Sl(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e289:{
 "^":"TpZ:12;",
-$1:[function(a){return J.hI(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gI2()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e290:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gYY()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Q2(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e291:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gZ3()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gSu()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e292:{
 "^":"TpZ:12;",
-$1:[function(a){return J.NV(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gSU()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e293:{
 "^":"TpZ:12;",
-$1:[function(a){return J.wp(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.ghW()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e294:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gSn()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.Vm(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e295:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gTE()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gPE()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e296:{
 "^":"TpZ:12;",
-$1:[function(a){return J.NC(a)},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return a.gSS()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e297:{
 "^":"TpZ:12;",
-$1:[function(a){return a.gaU()},"$1",null,2,0,null,63,"call"],
+$1:[function(a){return J.hI(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e298:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.RX(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return a.gYY()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e299:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.Px(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return a.gZ3()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e300:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.Tu(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return J.NV(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e301:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.Hh(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return J.wp(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e302:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.Fv(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return a.gSn()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e303:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.Ae(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return a.gTE()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e304:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.IX(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return J.NC(a)},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e305:{
-"^":"TpZ:81;",
-$2:[function(a,b){J.Ed(a,b)},"$2",null,4,0,null,63,66,"call"],
+"^":"TpZ:12;",
+$1:[function(a){return a.gaU()},"$1",null,2,0,null,63,"call"],
 $isEH:true},
 e306:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.NE(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.RX(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e307:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.WI(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Px(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e308:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sUP(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Tu(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e309:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.swz(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Hh(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e310:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.NZ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Fv(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e311:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.T5(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Ae(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e312:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.FI(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.IX(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e313:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.i0(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Ed(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e314:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Sf(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.NE(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e315:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Jl(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.WI(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e316:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.TP(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sUP(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e317:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Nh(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.su5(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e318:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.au(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.swz(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e319:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Iw(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.NZ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e320:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Ac(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.T5(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e321:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Yz(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.FI(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e322:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sej(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.i0(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e323:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sw2(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Hf(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e324:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Qr(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Sf(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e325:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.P6(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Jl(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e326:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Wy(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.TP(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e327:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.i2(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Nh(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e328:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.BC(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.au(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e329:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.pB(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Xu(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e330:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.NO(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Ac(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e331:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Sm(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Yz(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e332:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.JG(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sej(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e333:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.JZ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sw2(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e334:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.fR(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Qr(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e335:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.MI(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.P6(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e336:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.vJ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Wy(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e337:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Nf(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.i2(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e338:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Pl(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.BC(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e339:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.C3(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.pB(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e340:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.AI(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.NO(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e341:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.OE(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Sm(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e342:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.nA(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.JG(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e343:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.fb(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.JZ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e344:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.siq(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.fR(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e345:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.MF(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.MI(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e346:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Qy(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.vJ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e347:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.x0(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Nf(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e348:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sKt(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Pl(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e349:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.cV(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.C3(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e350:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.mU(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.AI(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e351:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Rp(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.OE(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e352:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.GZ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.nA(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e353:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.hS(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.fb(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e354:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.mz(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.siq(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e355:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.pA(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.MF(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e356:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.shX(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Qy(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e357:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.cl(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.x0(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e358:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.BL(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sKt(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e359:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Ql(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.cV(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e360:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.xQ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.mU(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e361:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Mh(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Rp(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e362:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.MX(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Bj(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e363:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.A4(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.GZ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e364:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.wD(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.hS(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e365:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.wJ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.mz(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e366:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.rA(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.pA(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e367:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.o3(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.shX(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e368:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.DF(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.cl(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e369:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.svK(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.BL(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e370:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.h9(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Ql(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e371:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sL1(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.xQ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e372:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sEl(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Mh(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e373:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sxH(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.MX(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e374:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.XF(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.A4(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e375:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.b0(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.wD(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e376:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.A1(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.wJ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e377:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.SF(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.rA(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e378:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Qv(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.o3(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e379:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.R8(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.DF(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e380:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Xg(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.svK(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e381:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.rL(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.h9(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e382:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.CJ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sL1(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e383:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.P2(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sEl(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e384:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.J0(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sxH(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e385:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.PP(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.XF(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e386:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.shL(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.b0(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e387:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Sj(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.A1(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e388:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.tv(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sqH(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e389:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.w7(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.SF(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e390:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.ME(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Qv(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e391:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.kX(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.R8(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e392:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.q0(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Xg(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e393:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.EJ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.rL(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e394:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Eo(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.CJ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e395:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.SO(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.P2(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e396:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.B9(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.J0(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e397:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.PN(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.PP(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e398:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sVc(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.shL(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e399:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.By(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sCM(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e400:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.is(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Sj(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e401:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.uH(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.tv(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e402:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.ry(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.w7(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e403:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.G7(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.ME(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e404:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.pq(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.kX(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e405:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.fa(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.q0(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e406:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Cu(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.EJ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e407:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sip(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Eo(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e408:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.EE(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.SO(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e409:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.EC(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.B9(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e410:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Hn(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.PN(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e411:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.wu(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sVc(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e412:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.Tx(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.By(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e413:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.HT(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.is(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e414:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.jq(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.uH(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e415:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.o8(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.ry(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e416:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sDo(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.G7(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e417:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sAY(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.pq(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e418:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.H3(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.fa(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e419:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.TZ(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Cu(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e420:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.t3(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sip(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e421:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.my(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.EE(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e422:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sVF(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.EC(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e423:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.yO(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Hn(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e424:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.La(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.wu(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e425:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sCY(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.Tx(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e426:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.ZU(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.HT(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e427:{
 "^":"TpZ:81;",
-$2:[function(a,b){a.sjW(b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.jq(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e428:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.NH(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){J.o8(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e429:{
 "^":"TpZ:81;",
-$2:[function(a,b){J.tH(a,b)},"$2",null,4,0,null,63,66,"call"],
+$2:[function(a,b){a.sDo(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e430:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("curly-block",C.Lg)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){a.sAY(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e431:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("observatory-element",C.Mz)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.H3(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e432:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("service-ref",C.il)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.TZ(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e433:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("any-service-ref",C.R9)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.t3(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e434:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("instance-ref",C.Wz)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.my(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e435:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("action-link",C.K4)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){a.sVF(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e436:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("nav-bar",C.LT)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.yO(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e437:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("nav-menu",C.ms)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.La(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e438:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("nav-menu-item",C.FA)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){a.sCY(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e439:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("nav-refresh",C.JW)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.ZU(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e440:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("nav-control",C.NW)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){a.sjW(b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e441:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("top-nav-menu",C.Mf)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.Fc(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e442:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-nav-menu",C.km)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.NH(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e443:{
-"^":"TpZ:76;",
-$0:[function(){return A.Ad("library-nav-menu",C.vw)},"$0",null,0,0,null,"call"],
+"^":"TpZ:81;",
+$2:[function(a,b){J.tH(a,b)},"$2",null,4,0,null,63,66,"call"],
 $isEH:true},
 e444:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("class-nav-menu",C.Ey)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("curly-block",C.Lg)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e445:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("nav-notify",C.Qt)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("observatory-element",C.Mz)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e446:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("nav-notify-item",C.a8)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("service-ref",C.il)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e447:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("breakpoint-list",C.yS)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("any-service-ref",C.R9)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e448:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("class-ref",C.OG)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("instance-ref",C.Wz)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e449:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("class-tree",C.nw)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("action-link",C.K4)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e450:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("error-ref",C.Bi)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("nav-bar",C.LT)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e451:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("eval-box",C.wk)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("nav-menu",C.ms)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e452:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("eval-link",C.jA)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("nav-menu-item",C.FA)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e453:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("field-ref",C.Jo)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("nav-refresh",C.JW)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e454:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("function-ref",C.lE)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("nav-control",C.NW)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e455:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("library-ref",C.lp)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("top-nav-menu",C.Mf)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e456:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("script-inset",C.ON)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-nav-menu",C.km)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e457:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("breakpoint-toggle",C.Nw)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("library-nav-menu",C.vw)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e458:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("script-ref",C.Sb)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("class-nav-menu",C.Ey)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e459:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("class-view",C.ou)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("nav-notify",C.Qt)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e460:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("code-ref",C.oT)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("nav-notify-item",C.a8)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e461:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("code-view",C.jR)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("breakpoint-list",C.yS)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e462:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("error-view",C.KO)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("class-ref",C.OG)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e463:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("field-view",C.Az)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("class-tree",C.nw)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e464:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("stack-frame",C.NR)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("error-ref",C.Bi)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e465:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("flag-list",C.Qb)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("eval-box",C.wk)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e466:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("flag-item",C.Vx)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("eval-link",C.jA)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e467:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("function-view",C.te)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("field-ref",C.Jo)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e468:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("heap-map",C.iD)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("function-ref",C.lE)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e469:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-view",C.tU)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("library-ref",C.lp)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e470:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-ref",C.mK)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("script-inset",C.ON)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e471:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-http-server-list-view",C.qF)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("breakpoint-toggle",C.Nw)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e472:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-http-server-ref",C.qZ)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("script-ref",C.Sb)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e473:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-http-server-view",C.Zj)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("class-view",C.ou)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e474:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-http-server-connection-view",C.Wh)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("code-ref",C.oT)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e475:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-http-server-connection-ref",C.pF)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("code-view",C.jR)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e476:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-socket-ref",C.FG)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("error-view",C.KO)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e477:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-socket-list-view",C.IZ)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("field-view",C.Az)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e478:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-socket-view",C.pJ)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("stack-frame",C.NR)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e479:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-web-socket-ref",C.Yy)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("flag-list",C.Qb)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e480:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-web-socket-list-view",C.DD)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("flag-item",C.Vx)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e481:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-web-socket-view",C.Xv)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("function-view",C.te)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e482:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-random-access-file-list-view",C.tc)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("heap-map",C.iD)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e483:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-random-access-file-ref",C.rR)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-view",C.tU)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e484:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-random-access-file-view",C.oG)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-ref",C.mK)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e485:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-process-list-view",C.he)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-http-server-list-view",C.qF)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e486:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-process-ref",C.dD)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-http-server-ref",C.qZ)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e487:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("io-process-view",C.hP)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-http-server-view",C.Zj)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e488:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-ref",C.UJ)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-http-server-connection-view",C.Wh)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e489:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-summary",C.CT)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-http-server-connection-ref",C.pF)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e490:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-run-state",C.j4)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-socket-ref",C.FG)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e491:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-location",C.Io)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-socket-list-view",C.IZ)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e492:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-shared-summary",C.EG)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-socket-view",C.pJ)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e493:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-counter-chart",C.ca)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-web-socket-ref",C.Yy)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e494:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-view",C.mq)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-web-socket-list-view",C.DD)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e495:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("inbound-reference",C.uC)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-web-socket-view",C.Xv)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e496:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("instance-view",C.Ke)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-random-access-file-list-view",C.tc)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e497:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("json-view",C.Tq)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-random-access-file-ref",C.rR)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e498:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("library-view",C.PT)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-random-access-file-view",C.oG)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e499:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("metrics-page",C.Fn)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-process-list-view",C.he)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e500:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("metric-details",C.fU)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-process-ref",C.dD)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e501:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("metrics-graph",C.pi)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("io-process-view",C.hP)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e502:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("heap-profile",C.Ju)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-ref",C.UJ)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e503:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("sliding-checkbox",C.Y3)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-summary",C.CT)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e504:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("isolate-profile",C.ce)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-run-state",C.j4)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e505:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("script-view",C.Th)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-location",C.Io)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e506:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("stack-trace",C.tQ)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-shared-summary",C.EG)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e507:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("vm-view",C.jK)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-counter-chart",C.ca)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e508:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("service-view",C.X8)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("isolate-view",C.mq)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e509:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("trace-view",C.kt)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("inbound-reference",C.uC)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e510:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("map-viewer",C.u4)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("object-common",C.rC)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e511:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("list-viewer",C.QJ)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("context-ref",C.XW)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e512:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("observatory-application",C.Dl)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("instance-view",C.Ke)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e513:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("service-exception-view",C.pK)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("json-view",C.Tq)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e514:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("service-error-view",C.wH)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("library-view",C.PT)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e515:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("vm-connect-target",C.ws)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("metrics-page",C.Fn)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e516:{
 "^":"TpZ:76;",
-$0:[function(){return A.Ad("vm-connect",C.bC)},"$0",null,0,0,null,"call"],
+$0:[function(){return A.Ad("metric-details",C.fU)},"$0",null,0,0,null,"call"],
 $isEH:true},
 e517:{
 "^":"TpZ:76;",
+$0:[function(){return A.Ad("metrics-graph",C.pi)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e518:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("context-view",C.kH)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e519:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("heap-profile",C.Ju)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e520:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("sliding-checkbox",C.Y3)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e521:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("isolate-profile",C.ce)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e522:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("script-view",C.Th)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e523:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("stack-trace",C.tQ)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e524:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("vm-view",C.jK)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e525:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("service-view",C.X8)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e526:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("trace-view",C.kt)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e527:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("map-viewer",C.u4)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e528:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("list-viewer",C.QJ)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e529:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("observatory-application",C.Dl)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e530:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("service-exception-view",C.pK)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e531:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("service-error-view",C.wH)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e532:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("vm-connect-target",C.ws)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e533:{
+"^":"TpZ:76;",
+$0:[function(){return A.Ad("vm-connect",C.bC)},"$0",null,0,0,null,"call"],
+$isEH:true},
+e534:{
+"^":"TpZ:76;",
 $0:[function(){return A.Ad("vm-ref",C.cK)},"$0",null,0,0,null,"call"],
 $isEH:true}},1],["","",,B,{
 "^":"",
@@ -4904,7 +4971,7 @@
 w=J.RE(b)
 if(!J.xC(J.eS(w.gN(b)),"expand")&&!J.xC(w.gN(b),d))return
 z=J.Lp(d)
-if(!!J.x(z).$istV)try{w=a.Hm
+if(!!J.x(z).$isIv)try{w=a.Hm
 v=J.IO(z)
 if(typeof v!=="number")return v.W()
 w.lo(v-1)}catch(u){w=H.Ru(u)
@@ -4950,7 +5017,7 @@
 a.QI=this.ct(a,C.tg,a.QI,null)
 J.LE(a.Wf).wM(b)},"$1","gvC",2,0,19,102],
 m4:[function(a,b){J.y9(a.Wf).wM(b)},"$1","gDX",2,0,19,102],
-static:{zB:function(a){var z,y,x,w
+static:{TH:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
 y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
@@ -4972,14 +5039,14 @@
 Ob:{
 "^":"TpZ:114;a",
 $1:[function(a){var z=this.a
-z.ef=J.Q5(z,C.yB,z.ef,a)},"$1",null,2,0,null,96,"call"],
+z.ef=J.NB(z,C.yB,z.ef,a)},"$1",null,2,0,null,96,"call"],
 $isEH:true},
 SS:{
-"^":"TpZ:114;a",
+"^":"TpZ:115;a",
 $1:[function(a){var z,y
 z=this.a
-y=H.BU(J.UQ(a,"valueAsString"),null,null)
-z.QI=J.Q5(z,C.tg,z.QI,y)},"$1",null,2,0,null,96,"call"],
+y=H.BU(a.gPE(),null,null)
+z.QI=J.NB(z,C.tg,z.QI,y)},"$1",null,2,0,null,96,"call"],
 $isEH:true}}],["","",,O,{
 "^":"",
 VY:{
@@ -5024,10 +5091,10 @@
 return x},
 YI:[function(a,b,c,d){var z=this.lE(a,d)
 if(z==null)return
-J.pP(z).h(0,"highlight")},"$3","gVb",6,0,115,2,106,107],
+J.pP(z).h(0,"highlight")},"$3","gVb",6,0,116,2,106,107],
 QT:[function(a,b,c,d){var z=this.lE(a,d)
 if(z==null)return
-J.pP(z).Rz(0,"highlight")},"$3","gAF",6,0,115,2,106,107],
+J.pP(z).Rz(0,"highlight")},"$3","gAF",6,0,116,2,106,107],
 static:{fm:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -5048,9 +5115,67 @@
 "^":"uL+Pi;",
 $isd3:true},
 fS:{
-"^":"TpZ:116;",
+"^":"TpZ:117;",
 $1:[function(a){a.OF()},"$1",null,2,0,null,85,"call"],
-$isEH:true}}],["","",,R,{
+$isEH:true}}],["","",,T,{
+"^":"",
+uV:{
+"^":"xI;tY,Pe,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+Gn:[function(a){return this.gus(a)},"$0","gyX",0,0,76],
+vQ:[function(a,b,c){var z=a.tY
+if(b===!0)J.LE(z).ml(new T.zG(a)).wM(c)
+else{J.Z6(z,null)
+c.$0()}},"$2","gus",4,0,118,119,120],
+static:{CvM:function(a){var z,y,x,w
+z=P.L5(null,null,null,P.qU,W.I0)
+y=P.qU
+y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
+x=P.Fl(null,null)
+w=P.Fl(null,null)
+a.Pe=!1
+a.f4=[]
+a.OD=!1
+a.kK=!1
+a.ZM=z
+a.ZQ=y
+a.qJ=x
+a.wy=w
+C.vS.LX(a)
+C.vS.XI(a)
+return a}}},
+zG:{
+"^":"TpZ:12;a",
+$1:[function(a){var z,y
+z=this.a
+y=J.RE(z)
+z.tY=y.ct(z,C.kY,z.tY,a)
+y.ct(z,C.kY,0,1)},"$1",null,2,0,null,121,"call"],
+$isEH:true}}],["","",,U,{
+"^":"",
+NY:{
+"^":"WZq;AE,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+geo:function(a){return a.AE},
+seo:function(a,b){a.AE=this.ct(a,C.nr,a.AE,b)},
+pA:[function(a,b){J.LE(a.AE).wM(b)},"$1","gvC",2,0,122,120],
+static:{q5n:function(a){var z,y,x,w
+z=P.L5(null,null,null,P.qU,W.I0)
+y=P.qU
+y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
+x=P.Fl(null,null)
+w=P.Fl(null,null)
+a.f4=[]
+a.OD=!1
+a.kK=!1
+a.ZM=z
+a.ZQ=y
+a.qJ=x
+a.wy=w
+C.oS.LX(a)
+C.oS.XI(a)
+return a}}},
+WZq:{
+"^":"uL+Pi;",
+$isd3:true}}],["","",,R,{
 "^":"",
 JI:{
 "^":"SaM;tH,uo,nx,oM,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
@@ -5068,11 +5193,11 @@
 a.tH=this.ct(a,C.mr,a.tH,z)},"$1","ghy",2,0,19,59],
 Db:[function(a){var z=a.tH
 a.tH=this.ct(a,C.mr,z,z!==!0)
-a.uo=this.ct(a,C.S4,a.uo,!1)},"$0","gN2",0,0,17],
+a.uo=this.ct(a,C.S4,a.uo,!1)},"$0","goJ",0,0,17],
 AZ:[function(a,b,c,d){var z=a.uo
 if(z===!0)return
 if(a.nx!=null){a.uo=this.ct(a,C.S4,z,!0)
-this.AV(a,a.tH!==!0,this.gN2(a))}else{z=a.tH
+this.AV(a,a.tH!==!0,this.goJ(a))}else{z=a.tH
 a.tH=this.ct(a,C.mr,z,z!==!0)}},"$3","gDI",6,0,84,49,50,85],
 static:{U9:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
@@ -5477,7 +5602,7 @@
 wb:{
 "^":"a;",
 static:{bQ:function(a,b){var z
-for(z=H.VM(new H.a7(a,a.length,0,null),[H.u3(a,0)]);z.G();)b.$1(z.Ff)},CkK:function(a,b){var z
+for(z=H.VM(new H.a7(a,a.length,0,null),[H.u3(a,0)]);z.G();)b.$1(z.Ff)},Ck:function(a,b){var z
 for(z=H.VM(new H.a7(a,a.length,0,null),[H.u3(a,0)]);z.G();)if(b.$1(z.Ff)===!0)return!0
 return!1},n3:function(a,b,c){var z
 for(z=H.VM(new H.a7(a,a.length,0,null),[H.u3(a,0)]);z.G();)b=c.$2(b,z.Ff)
@@ -5604,7 +5729,7 @@
 z=H.KT(z,[z,z]).Zg(a)
 if(z)return b.O8(a)
 else return b.cR(a)},
-BV:function(a,b){var z=P.Dt(b)
+DJ:function(a,b){var z=P.Dt(b)
 P.cH(C.ny,new P.w4(a,z))
 return z},
 Ne:function(a,b){var z,y,x,w,v
@@ -5634,7 +5759,7 @@
 BG:[function(){$.v5=!0
 try{P.Cx()}finally{$.mg=null
 $.v5=!1
-if($.S6!=null)$.ej().$1(P.yK())}},"$0","yK",0,0,17],
+if($.S6!=null)$.zp().$1(P.yK())}},"$0","yK",0,0,17],
 rb:function(a){var z=$.X3
 if(C.NU===z){P.ZK(null,null,C.NU,a)
 return}z.wr(z.xi(a,!0))},
@@ -5690,7 +5815,7 @@
 if(y==null){$.mg=z
 $.k8=z
 $.S6=z
-if(!$.v5)$.ej().$1(P.yK())}else{x=$.mg
+if(!$.v5)$.zp().$1(P.yK())}else{x=$.mg
 if(x==null){z.aw=y
 $.mg=z
 $.S6=z}else{z.aw=x.aw
@@ -5711,7 +5836,7 @@
 if(J.xC($.X3,c))return d.$2(e,f)
 z=P.Us(c)
 try{y=d.$2(e,f)
-return y}finally{$.X3=z}},"$6","iyo",12,0,33,26,27,28,30,8,9],
+return y}finally{$.X3=z}},"$6","xd",12,0,33,26,27,28,30,8,9],
 nI:[function(a,b,c,d){return d},"$4","W7",8,0,34,26,27,28,30],
 cQt:[function(a,b,c,d){return d},"$4","H9",8,0,35,26,27,28,30],
 bD:[function(a,b,c,d){return d},"$4","Dk",8,0,36,26,27,28,30],
@@ -5720,7 +5845,7 @@
 if($.S6==null){z=new P.OM(d,null)
 $.k8=z
 $.S6=z
-if(!$.v5)$.ej().$1(P.yK())}else{y=new P.OM(d,null)
+if(!$.v5)$.zp().$1(P.yK())}else{y=new P.OM(d,null)
 $.k8.aw=y
 $.k8=y}},"$4","yA",8,0,37,26,27,28,30],
 h8X:[function(a,b,c,d,e){return P.YF(d,C.NU!==c?c.ce(e):e)},"$5","zci",10,0,38,26,27,28,39,40],
@@ -5746,7 +5871,7 @@
 y.$0()},"$1",null,2,0,null,13,"call"],
 $isEH:true},
 ha:{
-"^":"TpZ:117;a,b,c",
+"^":"TpZ:123;a,b,c",
 $1:function(a){var z,y;++init.globalState.Xz.kv
 this.a.a=a
 z=this.b
@@ -5840,7 +5965,7 @@
 Pq:function(){if((this.YM&4)!==0)return new P.lj("Cannot add new events after calling close")
 return new P.lj("Cannot add new events while doing an addStream")},
 h:[function(a,b){if(this.YM>=4)throw H.b(this.Pq())
-this.MW(b)},"$1","ght",2,0,null,118],
+this.MW(b)},"$1","gL0",2,0,null,124],
 xO:function(a){var z,y
 z=this.YM
 if((z&4)!==0)return this.Kj
@@ -5936,10 +6061,10 @@
 x=--z.c
 if(y!=null)if(x===0||this.b)z.a.w0(a,b)
 else{z.d=a
-z.e=b}else if(x===0&&!this.b)z.a.w0(z.d,z.e)},"$2",null,4,0,null,119,120,"call"],
+z.e=b}else if(x===0&&!this.b)z.a.w0(z.d,z.e)},"$2",null,4,0,null,125,126,"call"],
 $isEH:true},
 Tw:{
-"^":"TpZ:121;a,c,d",
+"^":"TpZ:127;a,c,d",
 $1:[function(a){var z,y,x,w
 z=this.a
 y=--z.c
@@ -5961,12 +6086,12 @@
 "^":"Pf0;MM",
 j3:[function(a,b){var z=this.MM
 if(z.YM!==0)throw H.b(P.w("Future already completed"))
-z.Xf(b)},function(a){return this.j3(a,null)},"dS","$1","$0","gv6",0,2,122,22,20],
+z.Xf(b)},function(a){return this.j3(a,null)},"dS","$1","$0","gv6",0,2,128,22,20],
 w0:[function(a,b){var z
 if(a==null)throw H.b(P.u("Error must not be null"))
 z=this.MM
 if(z.YM!==0)throw H.b(P.w("Future already completed"))
-z.Nk(a,b)},function(a){return this.w0(a,null)},"pm","$2","$1","gYJ",2,2,123,22,23,24]},
+z.Nk(a,b)},function(a){return this.w0(a,null)},"pm","$2","$1","gYJ",2,2,129,22,23,24]},
 Gc:{
 "^":"a;YM,t9<,O1,nV@,bH?,kO?,bv?,Nw?",
 gnr:function(){return this.YM>=4},
@@ -6104,7 +6229,7 @@
 $1:[function(a){this.a.X2(a)},"$1",null,2,0,null,20,"call"],
 $isEH:true},
 VL:{
-"^":"TpZ:124;b",
+"^":"TpZ:130;b",
 $2:[function(a,b){this.b.ZL(a,b)},function(a){return this.$2(a,null)},"$1","$2",null,null,2,2,null,22,23,24,"call"],
 $isEH:true},
 cX:{
@@ -6120,7 +6245,7 @@
 $0:[function(){this.a.ZL(this.b,this.c)},"$0",null,0,0,null,"call"],
 $isEH:true},
 rq:{
-"^":"TpZ:125;b,d,e,f",
+"^":"TpZ:131;b,d,e,f",
 $0:function(){var z,y,x,w
 try{this.b.c=this.f.FI(this.d.gdU(),this.e)
 return!0}catch(x){w=H.Ru(x)
@@ -6187,10 +6312,10 @@
 $isEH:true},
 jZ:{
 "^":"TpZ:12;c,HZ",
-$1:[function(a){P.HZ(this.c.e,this.HZ)},"$1",null,2,0,null,126,"call"],
+$1:[function(a){P.HZ(this.c.e,this.HZ)},"$1",null,2,0,null,132,"call"],
 $isEH:true},
 ez:{
-"^":"TpZ:124;a,mG",
+"^":"TpZ:130;a,mG",
 $2:[function(a,b){var z,y
 z=this.a
 if(!J.x(z.a).$isGc){y=P.Dt(null)
@@ -6203,8 +6328,8 @@
 wS:{
 "^":"a;",
 ad:function(a,b){return H.VM(new P.fk(b,this),[H.W8(this,"wS",0)])},
-ez:[function(a,b){return H.VM(new P.c9(b,this),[H.W8(this,"wS",0),null])},"$1","gIr",2,0,function(){return H.oZ(function(a){return{func:"bp",ret:P.wS,args:[{func:"Pw",args:[a]}]}},this.$receiver,"wS")},127],
-lM:[function(a,b){return H.VM(new P.AE(b,this),[H.W8(this,"wS",0),null])},"$1","git",2,0,function(){return H.oZ(function(a){return{func:"xv",ret:P.wS,args:[{func:"ZSr",ret:P.QV,args:[a]}]}},this.$receiver,"wS")},127],
+ez:[function(a,b){return H.VM(new P.c9(b,this),[H.W8(this,"wS",0),null])},"$1","gIr",2,0,function(){return H.oZ(function(a){return{func:"bp",ret:P.wS,args:[{func:"Pw",args:[a]}]}},this.$receiver,"wS")},133],
+lM:[function(a,b){return H.VM(new P.AE(b,this),[H.W8(this,"wS",0),null])},"$1","git",2,0,function(){return H.oZ(function(a){return{func:"xv",ret:P.wS,args:[{func:"ZSr",ret:P.QV,args:[a]}]}},this.$receiver,"wS")},133],
 zV:function(a,b){var z,y,x
 z={}
 y=P.Dt(P.qU)
@@ -6246,7 +6371,7 @@
 br:function(a){var z,y
 z=H.VM([],[H.W8(this,"wS",0)])
 y=P.Dt([P.WO,H.W8(this,"wS",0)])
-this.KR(new P.lv(this,z),!0,new P.oo(z,y),y.gFa())
+this.KR(new P.lv(this,z),!0,new P.VVy(z,y),y.gFa())
 return y},
 zH:function(a){var z,y
 z=P.Ls(null,null,null,H.W8(this,"wS",0))
@@ -6279,7 +6404,7 @@
 try{this.e.KF(a)}catch(w){v=H.Ru(w)
 z=v
 y=new H.oP(w,null)
-P.NX(x.a,this.d,z,y)}},"$1",null,2,0,null,128,"call"],
+P.NX(x.a,this.d,z,y)}},"$1",null,2,0,null,134,"call"],
 $isEH:true,
 $signature:function(){return H.oZ(function(a){return{func:"Pw",args:[a]}},this.b,"wS")}},
 QCh:{
@@ -6295,7 +6420,7 @@
 $1:[function(a){var z,y
 z=this.a
 y=this.d
-P.FE(new P.LB(this.c,a),new P.z2(z,y),P.TB(z.a,y))},"$1",null,2,0,null,128,"call"],
+P.FE(new P.LB(this.c,a),new P.z2(z,y),P.TB(z.a,y))},"$1",null,2,0,null,134,"call"],
 $isEH:true,
 $signature:function(){return H.oZ(function(a){return{func:"Pw",args:[a]}},this.b,"wS")}},
 LB:{
@@ -6303,7 +6428,7 @@
 $0:function(){return J.xC(this.f,this.e)},
 $isEH:true},
 z2:{
-"^":"TpZ:129;a,UI",
+"^":"TpZ:135;a,UI",
 $1:function(a){if(a===!0)P.Bb(this.a.a,this.UI,!0)},
 $isEH:true},
 DO:{
@@ -6312,7 +6437,7 @@
 $isEH:true},
 lz:{
 "^":"TpZ;a,b,c,d",
-$1:[function(a){P.FE(new P.Rl(this.c,a),new P.at(),P.TB(this.a.a,this.d))},"$1",null,2,0,null,128,"call"],
+$1:[function(a){P.FE(new P.Rl(this.c,a),new P.at(),P.TB(this.a.a,this.d))},"$1",null,2,0,null,134,"call"],
 $isEH:true,
 $signature:function(){return H.oZ(function(a){return{func:"Pw",args:[a]}},this.b,"wS")}},
 Rl:{
@@ -6332,7 +6457,7 @@
 $1:[function(a){var z,y
 z=this.a
 y=this.d
-P.FE(new P.WN(this.c,a),new P.XPB(z,y),P.TB(z.a,y))},"$1",null,2,0,null,128,"call"],
+P.FE(new P.WN(this.c,a),new P.XPB(z,y),P.TB(z.a,y))},"$1",null,2,0,null,134,"call"],
 $isEH:true,
 $signature:function(){return H.oZ(function(a){return{func:"Pw",args:[a]}},this.b,"wS")}},
 WN:{
@@ -6340,7 +6465,7 @@
 $0:function(){return this.e.$1(this.f)},
 $isEH:true},
 XPB:{
-"^":"TpZ:129;a,UI",
+"^":"TpZ:135;a,UI",
 $1:function(a){if(a===!0)P.Bb(this.a.a,this.UI,!0)},
 $isEH:true},
 Ia:{
@@ -6365,16 +6490,16 @@
 $isEH:true},
 lv:{
 "^":"TpZ;a,b",
-$1:[function(a){this.b.push(a)},"$1",null,2,0,null,118,"call"],
+$1:[function(a){this.b.push(a)},"$1",null,2,0,null,124,"call"],
 $isEH:true,
 $signature:function(){return H.oZ(function(a){return{func:"Pw",args:[a]}},this.a,"wS")}},
-oo:{
+VVy:{
 "^":"TpZ:76;c,d",
 $0:[function(){this.d.In(this.c)},"$0",null,0,0,null,"call"],
 $isEH:true},
 oY:{
 "^":"TpZ;a,b",
-$1:[function(a){this.b.h(0,a)},"$1",null,2,0,null,118,"call"],
+$1:[function(a){this.b.h(0,a)},"$1",null,2,0,null,124,"call"],
 $isEH:true,
 $signature:function(){return H.oZ(function(a){return{func:"Pw",args:[a]}},this.a,"wS")}},
 yZ:{
@@ -6441,7 +6566,7 @@
 this.YM=(z+128|4)>>>0
 if(b!=null)b.wM(this.gDQ(this))
 if(z<128&&this.fk!=null)this.fk.IO()
-if((z&4)===0&&(this.YM&32)===0)this.Ge(this.gb9())},function(a){return this.Fv(a,null)},"WJ","$1","$0","gX0",0,2,130,22,131],
+if((z&4)===0&&(this.YM&32)===0)this.Ge(this.gb9())},function(a){return this.Fv(a,null)},"WJ","$1","$0","gX0",0,2,136,22,137],
 QE:[function(a){var z=this.YM
 if((z&8)!==0)return
 if(z>=128){z-=128
@@ -6629,7 +6754,7 @@
 this.YM=(this.YM|2)>>>0},
 fm:function(a,b){},
 Fv:[function(a,b){this.YM+=4
-if(b!=null)b.wM(this.gDQ(this))},function(a){return this.Fv(a,null)},"WJ","$1","$0","gX0",0,2,130,22,131],
+if(b!=null)b.wM(this.gDQ(this))},function(a){return this.Fv(a,null)},"WJ","$1","$0","gX0",0,2,136,22,137],
 QE:[function(a){var z=this.YM
 if(z>=4){z-=4
 this.YM=z
@@ -6648,7 +6773,7 @@
 $0:[function(){return this.a.ZL(this.b,this.c)},"$0",null,0,0,null,"call"],
 $isEH:true},
 uR:{
-"^":"TpZ:132;a,b",
+"^":"TpZ:138;a,b",
 $2:function(a,b){return P.NX(this.a,this.b,a,b)},
 $isEH:true},
 QX:{
@@ -6686,8 +6811,8 @@
 cZ:function(){var z=this.lI
 if(z!=null){this.lI=null
 z.Gv()}return},
-Iu:[function(a){this.m7.FC(a,this)},"$1","gwU",2,0,function(){return H.oZ(function(a,b){return{func:"XJ",void:true,args:[a]}},this.$receiver,"fB")},118],
-SW:[function(a,b){this.MR(a,b)},"$2","gPr",4,0,133,23,24],
+Iu:[function(a){this.m7.FC(a,this)},"$1","gwU",2,0,function(){return H.oZ(function(a,b){return{func:"XJ",void:true,args:[a]}},this.$receiver,"fB")},124],
+SW:[function(a,b){this.MR(a,b)},"$2","gPr",4,0,139,23,24],
 oZ:[function(){this.AN()},"$0","gos",0,0,17],
 JC:function(a,b,c,d,e,f,g){var z,y
 z=this.gwU()
@@ -6741,7 +6866,7 @@
 n7:{
 "^":"a;"},
 yQ:{
-"^":"a;lR,cP,U1,jH,Ka,Xp,fbF,rb,Zqn,rF,JS,nw",
+"^":"a;lR,cP,U1,jH,Ka,Xp,fbF,rb,Zqn,ib,JS,nw",
 hk:function(a,b){return this.lR.$2(a,b)},
 Gr:function(a){return this.cP.$1(a)},
 FI:function(a,b){return this.U1.$2(a,b)},
@@ -6752,7 +6877,7 @@
 wr:function(a){return this.rb.$1(a)},
 RK:function(a,b){return this.rb.$2(a,b)},
 uN:function(a,b){return this.Zqn.$2(a,b)},
-Ud:function(a,b){return this.rF.$2(a,b)},
+Ud:function(a,b){return this.ib.$2(a,b)},
 Ch:function(a,b){return this.JS.$1(b)},
 iT:function(a){return this.nw.$1$specification(a)},
 $isyQ:true},
@@ -6966,7 +7091,7 @@
 else return new P.MK(this,a)},
 ce:function(a){return this.xi(a,!0)},
 rO:function(a,b){if(b)return new P.pQ(this,a)
-else return new P.XW(this,a)},
+else return new P.Ky(this,a)},
 mS:function(a){return this.rO(a,!0)},
 PT:function(a,b){if(b)return new P.Ze(this,a)
 else return new P.dM(this,a)},
@@ -7000,7 +7125,7 @@
 "^":"TpZ:12;a,b",
 $1:[function(a){return this.a.m1(this.b,a)},"$1",null,2,0,null,32,"call"],
 $isEH:true},
-XW:{
+Ky:{
 "^":"TpZ:12;c,d",
 $1:[function(a){return this.c.FI(this.d,a)},"$1",null,2,0,null,32,"call"],
 $isEH:true},
@@ -7013,7 +7138,7 @@
 $2:[function(a,b){return this.c.mg(this.d,a,b)},"$2",null,4,0,null,8,9,"call"],
 $isEH:true}}],["","",,P,{
 "^":"",
-EF:function(a,b,c){return H.B7(a,H.VM(new P.YB(0,null,null,null,null,null,0),[b,c]))},
+EF:function(a,b,c){return H.dJ(a,H.VM(new P.YB(0,null,null,null,null,null,0),[b,c]))},
 Fl:function(a,b){return H.VM(new P.YB(0,null,null,null,null,null,0),[a,b])},
 TQ:[function(a,b){return J.xC(a,b)},"$2","fc",4,0,48,49,50],
 T9:[function(a){return J.v1(a)},"$1","py",2,0,51,49],
@@ -7079,7 +7204,7 @@
 b.push(v)},
 L5:function(a,b,c,d,e){return H.VM(new P.YB(0,null,null,null,null,null,0),[d,e])},
 Ls:function(a,b,c,d){return H.VM(new P.D0(0,null,null,null,null,null,0),[d])},
-rC:function(a,b,c){var z,y,x,w,v
+Vi:function(a,b,c){var z,y,x,w,v
 z=[]
 y=J.U6(a)
 x=y.gB(a)
@@ -7099,7 +7224,7 @@
 if(0>=z.length)return H.e(z,0)
 z.pop()}return y.gIN()},
 bA:{
-"^":"a;X5,Mb,cG,Cs,Jp",
+"^":"a;X5,Mb,cG,Cs,MV",
 gB:function(a){return this.X5},
 gl0:function(a){return this.X5===0},
 gor:function(a){return this.X5!==0},
@@ -7112,7 +7237,7 @@
 KY:function(a){var z=this.Cs
 if(z==null)return!1
 return this.DF(z[this.rk(a)],a)>=0},
-FV:function(a,b){J.Me(b,new P.DJ(this))},
+FV:function(a,b){J.Me(b,new P.ef(this))},
 t:function(a,b){var z,y,x,w
 if(typeof b==="string"&&b!=="__proto__"){z=this.Mb
 if(z==null)y=null
@@ -7139,10 +7264,10 @@
 this.Cs=z}y=this.rk(a)
 x=z[y]
 if(x==null){P.cW(z,y,[a,b]);++this.X5
-this.Jp=null}else{w=this.DF(x,a)
+this.MV=null}else{w=this.DF(x,a)
 if(w>=0)x[w+1]=b
 else{x.push(a,b);++this.X5
-this.Jp=null}}},
+this.MV=null}}},
 Rz:function(a,b){if(typeof b==="string"&&b!=="__proto__")return this.H4(this.Mb,b)
 else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.H4(this.cG,b)
 else return this.qg(b)},
@@ -7152,9 +7277,9 @@
 y=z[this.rk(a)]
 x=this.DF(y,a)
 if(x<0)return;--this.X5
-this.Jp=null
+this.MV=null
 return y.splice(x,2)[1]},
-V1:function(a){if(this.X5>0){this.Jp=null
+V1:function(a){if(this.X5>0){this.MV=null
 this.Cs=null
 this.cG=null
 this.Mb=null
@@ -7163,9 +7288,9 @@
 z=this.Nm()
 for(y=z.length,x=0;x<y;++x){w=z[x]
 b.$2(w,this.t(0,w))
-if(z!==this.Jp)throw H.b(P.a4(this))}},
+if(z!==this.MV)throw H.b(P.a4(this))}},
 Nm:function(){var z,y,x,w,v,u,t,s,r,q,p,o
-z=this.Jp
+z=this.MV
 if(z!=null)return z
 y=Array(this.X5)
 y.fixed$length=init
@@ -7181,14 +7306,14 @@
 v=w.length
 for(t=0;t<v;++t){q=r[w[t]]
 p=q.length
-for(o=0;o<p;o+=2){y[u]=q[o];++u}}}this.Jp=y
+for(o=0;o<p;o+=2){y[u]=q[o];++u}}}this.MV=y
 return y},
 u9:function(a,b,c){if(a[b]==null){++this.X5
-this.Jp=null}P.cW(a,b,c)},
+this.MV=null}P.cW(a,b,c)},
 H4:function(a,b){var z
 if(a!=null&&a[b]!=null){z=P.vL(a,b)
 delete a[b];--this.X5
-this.Jp=null
+this.MV=null
 return z}else return},
 rk:function(a){return J.v1(a)&0x3ffffff},
 DF:function(a,b){var z,y
@@ -7206,15 +7331,15 @@
 return z}}},
 oi:{
 "^":"TpZ:12;a",
-$1:[function(a){return this.a.t(0,a)},"$1",null,2,0,null,134,"call"],
+$1:[function(a){return this.a.t(0,a)},"$1",null,2,0,null,140,"call"],
 $isEH:true},
-DJ:{
+ef:{
 "^":"TpZ;a",
 $2:[function(a,b){this.a.u(0,a,b)},"$2",null,4,0,null,79,20,"call"],
 $isEH:true,
 $signature:function(){return H.oZ(function(a,b){return{func:"lb",args:[a,b]}},this.a,"bA")}},
 PL:{
-"^":"bA;X5,Mb,cG,Cs,Jp",
+"^":"bA;X5,Mb,cG,Cs,MV",
 rk:function(a){return H.CU(a)&0x3ffffff},
 DF:function(a,b){var z,y,x
 if(a==null)return-1
@@ -7222,10 +7347,10 @@
 for(y=0;y<z;y+=2){x=a[y]
 if(x==null?b==null:x===b)return y}return-1}},
 Fq:{
-"^":"bA;AH,dI,lO,X5,Mb,cG,Cs,Jp",
+"^":"bA;AH,dI,z4,X5,Mb,cG,Cs,MV",
 Xm:function(a,b){return this.AH.$2(a,b)},
 jP:function(a){return this.dI.$1(a)},
-Bc:function(a){return this.lO.$1(a)},
+Bc:function(a){return this.z4.$1(a)},
 t:function(a,b){if(this.Bc(b)!==!0)return
 return P.bA.prototype.c8.call(this,b)},
 u:function(a,b,c){P.bA.prototype.Gk.call(this,b,c)},
@@ -7260,16 +7385,16 @@
 z=this.ZD
 y=z.Nm()
 for(x=y.length,w=0;w<x;++w){b.$1(y[w])
-if(y!==z.Jp)throw H.b(P.a4(z))}},
+if(y!==z.MV)throw H.b(P.a4(z))}},
 $isyN:true},
 EQ:{
-"^":"a;ZD,Jp,iY,fD",
+"^":"a;ZD,MV,iY,fD",
 gl:function(){return this.fD},
 G:function(){var z,y,x
-z=this.Jp
+z=this.MV
 y=this.iY
 x=this.ZD
-if(z!==x.Jp)throw H.b(P.a4(x))
+if(z!==x.MV)throw H.b(P.a4(x))
 else if(y>=z.length){this.fD=null
 return!1}else{this.fD=z[y]
 this.iY=y+1
@@ -7394,7 +7519,7 @@
 return z}}},
 a1:{
 "^":"TpZ:12;a",
-$1:[function(a){return this.a.t(0,a)},"$1",null,2,0,null,134,"call"],
+$1:[function(a){return this.a.t(0,a)},"$1",null,2,0,null,140,"call"],
 $isEH:true},
 pk:{
 "^":"TpZ;a",
@@ -7476,7 +7601,7 @@
 x=y}return this.bQ(x,b)}else return this.B7(0,b)},
 B7:function(a,b){var z,y,x
 z=this.Cs
-if(z==null){z=P.V5()
+if(z==null){z=P.yT()
 this.Cs=z}y=this.rk(b)
 x=z[y]
 if(x==null)z[y]=[b]
@@ -7539,7 +7664,7 @@
 $isyN:true,
 $isQV:true,
 $asQV:null,
-static:{V5:function(){var z=Object.create(null)
+static:{yT:function(){var z=Object.create(null)
 z["<non-identifier-key>"]=z
 delete z["<non-identifier-key>"]
 return z}}},
@@ -7826,7 +7951,7 @@
 for(z=0;z<this.gB(a);++z)if(J.xC(this.t(a,z),b)){this.YW(a,z,this.gB(a)-1,a,z+1)
 this.sB(a,this.gB(a)-1)
 return!0}return!1},
-uk:function(a,b){P.rC(a,b,!1)},
+uk:function(a,b){P.Vi(a,b,!1)},
 V1:function(a){this.sB(a,0)},
 GT:function(a,b){if(b==null)b=P.n4()
 H.ZE(a,0,this.gB(a)-1,b)},
@@ -7936,8 +8061,8 @@
 return z},
 $isyN:true},
 Uq:{
-"^":"a;Jp,ZD,fD",
-G:function(){var z=this.Jp
+"^":"a;MV,ZD,fD",
+G:function(){var z=this.MV
 if(z.G()){this.fD=this.ZD.t(0,z.gl())
 return!0}this.fD=null
 return!1},
@@ -7981,9 +8106,9 @@
 z=this.b
 z.KF(a)
 z.KF(": ")
-z.KF(b)},"$2",null,4,0,null,135,66,"call"],
+z.KF(b)},"$2",null,4,0,null,141,66,"call"],
 $isEH:true},
-Sw:{
+nd:{
 "^":"mW;E3,QN,Bq,Z1",
 gA:function(a){var z=new P.fO(this,this.Bq,this.Z1,this.QN,null)
 z.$builtinTypeInfo=this.$builtinTypeInfo
@@ -8221,10 +8346,10 @@
 jp:{
 "^":"oz;P*,nl,Bb,T8",
 $asoz:function(a,b){return[a]}},
-Xt:{
+vX1:{
 "^":"a;",
 oB:function(a){var z,y,x,w,v,u,t,s
-z=this.og
+z=this.VR
 if(z==null)return-1
 y=this.fu
 for(x=y,w=x,v=null;!0;){v=this.R2(z.nl,a)
@@ -8253,7 +8378,7 @@
 x.Bb=z.T8
 z.Bb=y.T8
 z.T8=y.Bb
-this.og=z
+this.VR=z
 y.T8=null
 y.Bb=null;++this.wq
 return v},
@@ -8261,33 +8386,33 @@
 for(z=a;y=z.T8,y!=null;z=y){z.T8=y.Bb
 y.Bb=z}return z},
 qg:function(a){var z,y,x
-if(this.og==null)return
+if(this.VR==null)return
 if(!J.xC(this.oB(a),0))return
-z=this.og;--this.hm
+z=this.VR;--this.hm
 y=z.Bb
-if(y==null)this.og=z.T8
+if(y==null)this.VR=z.T8
 else{x=z.T8
 y=this.R8(y)
-this.og=y
+this.VR=y
 y.T8=x}++this.Z1
 return z},
 Oa:function(a,b){var z,y;++this.hm;++this.Z1
-if(this.og==null){this.og=a
+if(this.VR==null){this.VR=a
 return}z=J.u6(b,0)
-y=this.og
+y=this.VR
 if(z){a.Bb=y
 a.T8=y.T8
 y.T8=null}else{a.T8=y
 a.Bb=y.Bb
-y.Bb=null}this.og=a}},
+y.Bb=null}this.VR=a}},
 Ba:{
-"^":"Xt;V2s,lO,og,fu,hm,Z1,wq",
+"^":"vX1;V2s,z4,VR,fu,hm,Z1,wq",
 L4:function(a,b){return this.V2s.$2(a,b)},
-Bc:function(a){return this.lO.$1(a)},
+Bc:function(a){return this.z4.$1(a)},
 R2:function(a,b){return this.L4(a,b)},
 t:function(a,b){if(b==null)throw H.b(P.u(b))
 if(this.Bc(b)!==!0)return
-if(this.og!=null)if(J.xC(this.oB(b),0))return this.og.P
+if(this.VR!=null)if(J.xC(this.oB(b),0))return this.VR.P
 return},
 Rz:function(a,b){var z
 if(this.Bc(b)!==!0)return
@@ -8297,11 +8422,11 @@
 u:function(a,b,c){var z
 if(b==null)throw H.b(P.u(b))
 z=this.oB(b)
-if(J.xC(z,0)){this.og.P=c
+if(J.xC(z,0)){this.VR.P=c
 return}this.Oa(H.VM(new P.jp(c,b,null,null),[null,null]),z)},
 FV:function(a,b){H.bQ(b,new P.QG(this))},
-gl0:function(a){return this.og==null},
-gor:function(a){return this.og!=null},
+gl0:function(a){return this.VR==null},
+gor:function(a){return this.VR!=null},
 aN:function(a,b){var z,y,x
 z=H.u3(this,0)
 y=H.VM(new P.HW(this,H.VM([],[P.oz]),this.Z1,this.wq,null),[z])
@@ -8310,7 +8435,7 @@
 z=J.RE(x)
 b.$2(z.gnl(x),z.gP(x))}},
 gB:function(a){return this.hm},
-V1:function(a){this.og=null
+V1:function(a){this.VR=null
 this.hm=0;++this.Z1},
 NZ:function(a,b){return this.Bc(b)===!0&&J.xC(this.oB(b),0)},
 gvc:function(a){return H.VM(new P.nF(this),[H.u3(this,0)])},
@@ -8319,7 +8444,7 @@
 return z},
 bu:[function(a){return P.vW(this)},"$0","gCR",0,0,73],
 $isBa:true,
-$asXt:function(a,b){return[a]},
+$asvX1:function(a,b){return[a]},
 $asT8:null,
 $isT8:true,
 static:{GV:function(a,b,c,d){var z,y
@@ -8351,14 +8476,14 @@
 if(y.length===0){this.Ju=null
 return!1}if(z.wq!==this.wq&&this.Ju!=null){x=this.Ju
 C.Nm.sB(y,0)
-if(x==null)this.Zq(z.og)
+if(x==null)this.Zq(z.VR)
 else{z.oB(x.nl)
-this.Zq(z.og.T8)}}if(0>=y.length)return H.e(y,0)
+this.Zq(z.VR.T8)}}if(0>=y.length)return H.e(y,0)
 z=y.pop()
 this.Ju=z
 this.Zq(z.T8)
 return!0},
-Dd:function(a,b){this.Zq(a.og)}},
+Dd:function(a,b){this.Zq(a.VR)}},
 nF:{
 "^":"mW;OC",
 gB:function(a){return this.OC.hm},
@@ -8507,7 +8632,7 @@
 $asT8:function(){return[null,null]}},
 A5:{
 "^":"TpZ:12;a",
-$1:[function(a){return this.a.t(0,a)},"$1",null,2,0,null,134,"call"],
+$1:[function(a){return this.a.t(0,a)},"$1",null,2,0,null,140,"call"],
 $isEH:true},
 E5:{
 "^":"TpZ:81;a",
@@ -8524,7 +8649,7 @@
 "^":"XS;Ct,FN",
 bu:[function(a){if(this.FN!=null)return"Converting object to an encodable object failed."
 else return"Converting object did not return an encodable object."},"$0","gCR",0,0,73],
-static:{Gy:function(a,b){return new P.Ud(a,b)}}},
+static:{NM:function(a,b){return new P.Ud(a,b)}}},
 K8:{
 "^":"Ud;Ct,FN",
 bu:[function(a){return"Cyclic error in JSON stringify"},"$0","gCR",0,0,73],
@@ -8601,12 +8726,12 @@
 rl:function(a){var z,y,x,w
 if(!this.Jc(a)){this.WD(a)
 try{z=this.HT(a)
-if(!this.Jc(z)){x=P.Gy(a,null)
+if(!this.Jc(z)){x=P.NM(a,null)
 throw H.b(x)}x=this.SK
 if(0>=x.length)return H.e(x,0)
 x.pop()}catch(w){x=H.Ru(w)
 y=x
-throw H.b(P.Gy(a,y))}}},
+throw H.b(P.NM(a,y))}}},
 Jc:function(a){var z,y,x,w
 z={}
 if(typeof a==="number"){if(!C.CD.gzr(a))return!1
@@ -8813,14 +8938,14 @@
 this.pt=x}},
 static:{"^":"ADi"}},
 wh:{
-"^":"TpZ:136;a",
+"^":"TpZ:142;a",
 $2:function(a,b){var z,y,x,w
 z=this.a
 for(y=J.U6(a),x=b;x<z;++x){w=y.t(a,x)
 if(J.mQ(w,127)!==w)return x-b}return z-b},
 $isEH:true},
 yn:{
-"^":"TpZ:137;b,c,d,e",
+"^":"TpZ:143;b,c,d,e",
 $2:function(a,b){var z,y,x
 z=a===0&&b===J.q8(this.c)
 y=this.b
@@ -8869,7 +8994,7 @@
 $2:function(a,b){this.a.u(0,a.gOB(a),b)},
 $isEH:true},
 CL:{
-"^":"TpZ:138;a",
+"^":"TpZ:144;a",
 $2:function(a,b){var z=this.a
 if(z.b>0)z.a.KF(", ")
 z.a.KF(J.ro(a))
@@ -8896,14 +9021,14 @@
 w=P.h0(z?H.o2(this).getUTCDate()+0:H.o2(this).getDate()+0)
 v=P.h0(H.KL(this))
 u=P.h0(H.ch(this))
-t=P.h0(H.XJ(this))
+t=P.h0(H.Sw(this))
 s=P.pV(z?H.o2(this).getUTCMilliseconds()+0:H.o2(this).getMilliseconds()+0)
 if(z)return y+"-"+x+"-"+w+" "+v+":"+u+":"+t+"."+s+"Z"
 else return y+"-"+x+"-"+w+" "+v+":"+u+":"+t+"."+s},"$0","gCR",0,0,73],
 h:function(a,b){return P.Wu(J.WB(this.rq,b.gVs()),this.aL)},
 gGt:function(){return H.KL(this)},
 gS6:function(){return H.ch(this)},
-gIv:function(){return H.XJ(this)},
+gBM:function(){return H.Sw(this)},
 EK:function(){H.o2(this)},
 RM:function(a,b){if(J.xZ(J.yH(a),8640000000000000))throw H.b(P.u(a))},
 $isiP:true,
@@ -8955,12 +9080,12 @@
 return"00"+a},h0:function(a){if(a>=10)return""+a
 return"0"+a}}},
 ci:{
-"^":"TpZ:139;",
+"^":"TpZ:145;",
 $1:function(a){if(a==null)return 0
 return H.BU(a,null,null)},
 $isEH:true},
 Rq:{
-"^":"TpZ:140;",
+"^":"TpZ:146;",
 $1:function(a){if(a==null)return 0
 return H.RR(a,null)},
 $isEH:true},
@@ -9273,7 +9398,7 @@
 if(J.Qe(z).nC(z,"["))return C.xB.Nj(z,1,z.length-1)
 return z},
 gtp:function(a){var z=this.QB
-if(z==null)return P.bG(this.Fi)
+if(z==null)return P.Co(this.Fi)
 return z},
 gIi:function(a){return this.Ee},
 pi:function(a,b){if(a==="")return"/"+b
@@ -9343,7 +9468,7 @@
 v=this.ys
 return z.$2(this.Fi,z.$2(this.ku,z.$2(y,z.$2(x,z.$2(this.Ee,z.$2(w,z.$2(v==null?"":v,1)))))))},
 $isq5:true,
-static:{"^":"QqF,q7,tvi,uCX,zk,ilf,tC,GpR,Q5W,XrJ,Vxa,pkL,O5i,FsP,qfW,dRC,u0I,TGN,OP,c4,Fm,WTp,Hiw,H5,zst,VFG,nJd,SpW,GPf,JA7,iTk,Uo,yw1,SQU,rvM,fbQ",bG:function(a){if(a==="http")return 80
+static:{"^":"QqF,q7,tvi,uCX,zk,ilf,tC,GpR,Q5W,XrJ,Vxa,pkL,O5i,FsP,qfW,dRC,u0I,TGN,OP,Qxt,Vho,WTp,Hiw,H5,zst,VFG,nJd,SpW,GPf,JA7,iTk,Uo,yw1,SQU,rvM,fbQ",Co:function(a){if(a==="http")return 80
 if(a==="https")return 443
 return 0},hK:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
 z={}
@@ -9398,7 +9523,7 @@
 n=P.jr(a,p+1,w)}}else{n=s===35?P.jr(a,z.e+1,w):null
 o=null}w=z.a
 s=z.b
-return new P.q5(z.c,z.d,q,w,s,o,n,null,null)},iV:function(a,b,c){throw H.b(P.cD(c,a,b))},JF:function(a,b){if(a!=null&&a===P.bG(b))return
+return new P.q5(z.c,z.d,q,w,s,o,n,null,null)},iV:function(a,b,c){throw H.b(P.cD(c,a,b))},JF:function(a,b){if(a!=null&&a===P.Co(b))return
 return a},L7:function(a,b,c,d){var z,y
 if(a==null)return
 if(b===c)return""
@@ -9569,7 +9694,7 @@
 z+=s
 y=z}}if(x==null)return J.Nj(a,b,c)
 if(y<c)x.KF(J.Nj(a,y,c))
-return x.bu(0)},Ms:function(a,b){return H.n3(J.It(a,"&"),P.Fl(null,null),new P.qz(b))},Dy:function(a){var z,y
+return x.bu(0)},Ms:function(a,b){return H.n3(J.BQ(a,"&"),P.Fl(null,null),new P.qz(b))},Dy:function(a){var z,y
 z=new P.JV()
 y=a.split(".")
 if(y.length!==4)z.$1("IPv4 address should contain exactly 4 parts")
@@ -9680,7 +9805,7 @@
 else u.push(v);++x}}t=b.QA
 return new P.GY(t).Sw(u)}}},
 hP2:{
-"^":"TpZ:141;",
+"^":"TpZ:147;",
 $1:function(a){a.C(0,128)
 return!1},
 $isEH:true},
@@ -9734,7 +9859,7 @@
 z.KF(P.jW(C.B2,b,C.xM,!0))},
 $isEH:true},
 XZ:{
-"^":"TpZ:142;",
+"^":"TpZ:148;",
 $2:function(a,b){return b*31+J.v1(a)&1073741823},
 $isEH:true},
 qz:{
@@ -9757,10 +9882,10 @@
 z=H.BU(a,null,null)
 y=J.Wx(z)
 if(y.C(z,0)||y.D(z,255))this.a.$1("each part must be in the range of `0..255`")
-return z},"$1",null,2,0,null,143,"call"],
+return z},"$1",null,2,0,null,149,"call"],
 $isEH:true},
 x8:{
-"^":"TpZ:144;a",
+"^":"TpZ:150;a",
 $2:function(a,b){throw H.b(P.cD("Illegal IPv6 address, "+a,this.a,b))},
 $1:function(a){return this.$2(a,null)},
 $isEH:true},
@@ -9797,11 +9922,11 @@
 z=W.fJ
 y=H.VM(new P.Zf(P.Dt(z)),[z])
 x=new XMLHttpRequest()
-C.W3.eo(x,"GET",a,!0)
+C.W3.i3(x,"GET",a,!0)
 z=H.VM(new W.RO(x,C.LF.fA,!1),[null])
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(new W.bU(y,x)),z.el),[H.u3(z,0)]).DN()
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(new W.bU(y,x)),z.el),[H.u3(z,0)]).DN()
 z=H.VM(new W.RO(x,C.JN.fA,!1),[null])
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(y.gYJ()),z.el),[H.u3(z,0)]).DN()
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(y.gYJ()),z.el),[H.u3(z,0)]).DN()
 x.send()
 return y.MM},
 Ws:function(a){return new (window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver)(H.tR(W.Iq(a),2))},
@@ -9828,7 +9953,7 @@
 return P.o7(a,!0)},
 v8:function(a,b){return new W.uY(a,b)},
 z9:[function(a){return J.N1(a)},"$1","b4",2,0,12,56],
-Hx:[function(a){return J.o6(a)},"$1","D9",2,0,12,56],
+Hx:[function(a){return J.o6(a)},"$1","oo",2,0,12,56],
 Hw:[function(a,b,c,d){return J.L1(a,b,c,d)},"$4","SN",8,0,57,56,58,59,60],
 Ct:function(a,b,c,d,e){var z,y,x,w,v,u,t,s,r,q
 z=J.Dc(d)
@@ -9845,7 +9970,7 @@
 t={}
 t.createdCallback={value:function(f){return function(){return f(this)}}(H.tR(W.v8(x,y),1))}
 t.attachedCallback={value:function(f){return function(){return f(this)}}(H.tR(W.b4(),1))}
-t.detachedCallback={value:function(f){return function(){return f(this)}}(H.tR(W.D9(),1))}
+t.detachedCallback={value:function(f){return function(){return f(this)}}(H.tR(W.oo(),1))}
 t.attributeChangedCallback={value:function(f){return function(g,h,i){return f(this,g,h,i)}}(H.tR(W.SN(),4))}
 s=Object.create(u.prototype,t)
 r=H.Va(y)
@@ -9853,14 +9978,14 @@
 q={prototype:s}
 if(!v)q.extends=e
 b.registerElement(c,q)},
-aF:function(a){if(J.xC($.X3,C.NU))return a
+Yt:function(a){if(J.xC($.X3,C.NU))return a
 if(a==null)return
 return $.X3.rO(a,!0)},
 Iq:function(a){if(J.xC($.X3,C.NU))return a
 return $.X3.PT(a,!0)},
 Bo:{
 "^":"h4;",
-"%":"HTMLAppletElement|HTMLBRElement|HTMLContentElement|HTMLDListElement|HTMLDirectoryElement|HTMLDivElement|HTMLFontElement|HTMLFrameElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLLabelElement|HTMLLegendElement|HTMLMarqueeElement|HTMLMenuElement|HTMLModElement|HTMLParagraphElement|HTMLPreElement|HTMLQuoteElement|HTMLShadowElement|HTMLSpanElement|HTMLTableCaptionElement|HTMLTableColElement|HTMLTitleElement|HTMLUListElement|HTMLUnknownElement;HTMLElement;jpR|TR0|xc|LPc|hV|Xfs|uL|Vfx|G6|Dsd|xI|eW|tuj|eo|Vct|ak|VY|D13|Be|SaM|JI|Tk|WZq|ZP|pva|nJ|KAf|Eg|i7|cda|Gk|waa|J3|V10|MJ|T53|DK|V11|BS|V12|Vb|V13|Ly|ZzR|Im|pR|V14|EZ|V15|L4|Mb|V16|mO|DE|V17|U1|V18|H8|WS|qh|V19|oF|V20|Q6|uE|V21|Zn|V22|n5|V23|Ma|wN|V24|ds|V25|qM|oEY|av|V26|uz|V27|kK|oa|V28|St|V29|IW|V30|Qh|V31|Oz|V32|Z4|V33|qk|V34|vj|LU|V35|CX|V36|qn|V37|I2|V38|FB|V39|md|V40|Bm|V41|Ya|V42|Ww|ye|V43|G1|V44|fl|V45|UK|V46|wM|V47|NK|V48|Zx|V49|F1|V50|ov|V51|vr|qeq|kn|V52|fI|V53|zM|V54|Rk|V55|Ti|V56|Um|V57|VZ|V58|WG|V59|f7|ImK|CY|V60|nm|V61|Vu|V62|Pa|V63|D2|I5|V64|el"},
+"%":"HTMLAppletElement|HTMLBRElement|HTMLContentElement|HTMLDListElement|HTMLDirectoryElement|HTMLDivElement|HTMLFontElement|HTMLFrameElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLLabelElement|HTMLLegendElement|HTMLMarqueeElement|HTMLMenuElement|HTMLModElement|HTMLParagraphElement|HTMLPreElement|HTMLQuoteElement|HTMLShadowElement|HTMLSpanElement|HTMLTableCaptionElement|HTMLTableColElement|HTMLTitleElement|HTMLUListElement|HTMLUnknownElement;HTMLElement;jpR|TR0|xc|LPc|hV|Xfs|uL|Vfx|G6|Dsd|xI|eW|tuj|eo|Vct|ak|VY|D13|Be|uV|WZq|NY|SaM|JI|Tk|pva|ZP|cda|nJ|KAf|Eg|i7|waa|Gk|V10|J3|V11|MJ|T53|DK|V12|BS|V13|Vb|V14|Ly|V15|Im|pR|V16|EZ|V17|L4|Mb|V18|mO|DE|V19|U1|V20|H8|WS|qh|V21|oF|V22|Q6|uE|V23|Zn|V24|n5|V25|Ma|wN|V26|ds|V27|qM|ZzR|av|V28|uz|V29|kK|oa|V30|St|V31|IW|V32|Qh|V33|Oz|V34|Z4|V35|qk|V36|vj|LU|V37|CX|V38|qn|V39|I2|V40|FB|V41|md|V42|Bm|V43|Ya|V44|Ww|ye|V45|G1|V46|fl|V47|UK|V48|wM|V49|NK|V50|Zx|V51|qV|V52|F1|V53|ov|V54|vr|oEY|kn|V55|fI|V56|zM|V57|Rk|V58|Ti|V59|Um|V60|VZ|V61|WG|V62|f7|ImK|CY|V63|nm|V64|Vu|V65|Pa|V66|D2|I5|V67|el"},
 Yyn:{
 "^":"Gv;",
 $isWO:true,
@@ -9987,7 +10112,6 @@
 z=z.parentElement}while(z!=null)
 return!1},
 TL:function(a){return(a.createShadowRoot||a.webkitCreateShadowRoot).call(a)},
-gI:function(a){return new W.DM(a,a)},
 PN:function(a,b){return a.getAttribute(b)},
 Zi:function(a){return a.getBoundingClientRect()},
 XT:function(a,b){return a.querySelector(b)},
@@ -10005,14 +10129,13 @@
 "%":"ErrorEvent"},
 ea:{
 "^":"Gv;dl:_selector},Ii:path=,Ea:timeStamp=,t5:type=",
-gCa:function(a){return W.qc(a.currentTarget)},
+gF0:function(a){return W.qc(a.currentTarget)},
 gN:function(a){return W.qc(a.target)},
 e6:function(a){return a.preventDefault()},
 $isea:true,
 "%":"AudioProcessingEvent|AutocompleteErrorEvent|BeforeLoadEvent|BeforeUnloadEvent|CSSFontFaceLoadEvent|DeviceMotionEvent|DeviceOrientationEvent|HashChangeEvent|IDBVersionChangeEvent|InstallEvent|InstallPhaseEvent|MediaKeyNeededEvent|MediaStreamTrackEvent|MutationEvent|OfflineAudioCompletionEvent|OverflowEvent|PageTransitionEvent|RTCDTMFToneChangeEvent|RTCDataChannelEvent|RTCIceCandidateEvent|SecurityPolicyViolationEvent|SpeechInputEvent|TrackEvent|TransitionEvent|WebGLContextEvent|WebKitAnimationEvent|WebKitTransitionEvent;ClipboardEvent|Event|InputEvent"},
 PZ:{
 "^":"Gv;",
-gI:function(a){return new W.xd(a)},
 On:function(a,b,c,d){return a.addEventListener(b,H.tR(c,1),d)},
 Ph:function(a,b){return a.dispatchEvent(b)},
 Y9:function(a,b,c,d){return a.removeEventListener(b,H.tR(c,1),d)},
@@ -10031,7 +10154,7 @@
 H05:{
 "^":"PZ;kc:error=",
 gyG:function(a){var z=a.result
-if(!!J.x(z).$isaI)return H.GG(z,0,null)
+if(!!J.x(z).$isaI)return H.z4(z,0,null)
 return z},
 "%":"FileReader"},
 jH:{
@@ -10040,7 +10163,7 @@
 u9:{
 "^":"Bo;ih:color%",
 "%":"HTMLHRElement"},
-pl:{
+us:{
 "^":"Gv;B:length=",
 "%":"History"},
 xnd:{
@@ -10074,7 +10197,7 @@
 "^":"waV;il:responseText=,pf:status=",
 gn9:function(a){return W.Pd(a.response)},
 Yh:function(a,b,c,d,e,f){return a.open(b,c,d,f,e)},
-eo:function(a,b,c,d){return a.open(b,c,d)},
+i3:function(a,b,c,d){return a.open(b,c,d)},
 wR:function(a,b){return a.send(b)},
 $isfJ:true,
 "%":"XMLHttpRequest"},
@@ -10125,7 +10248,7 @@
 xW:function(a){return a.load()},
 WJ:[function(a){return a.pause()},"$0","gX0",0,0,17],
 "%":"HTMLAudioElement;HTMLMediaElement",
-static:{"^":"TH<"}},
+static:{"^":"dZ5<"}},
 mCi:{
 "^":"Gv;tT:code=",
 "%":"MediaError"},
@@ -10138,7 +10261,7 @@
 fJn:{
 "^":"ea;G1:message=",
 "%":"MediaKeyMessageEvent"},
-CM:{
+D80:{
 "^":"PZ;jO:id=,ph:label=",
 "%":"MediaStream"},
 VhH:{
@@ -10202,7 +10325,7 @@
 Vv:{
 "^":"Gv;N:target=,t5:type=",
 "%":"MutationRecord"},
-FO8:{
+qT:{
 "^":"Gv;G1:message=,oc:name=",
 "%":"NavigatorUserMediaError"},
 KV:{
@@ -10345,7 +10468,7 @@
 $isT8:true,
 $asT8:function(){return[P.qU,P.qU]},
 "%":"Storage"},
-Tp:{
+iiu:{
 "^":"ea;nl:key=,O3:url=",
 "%":"StorageEvent"},
 fqq:{
@@ -10357,16 +10480,16 @@
 "%":"HTMLTableCellElement|HTMLTableDataCellElement|HTMLTableHeaderCellElement"},
 inA:{
 "^":"Bo;",
-gvp:function(a){return H.VM(new W.uB(a.rows),[W.tV])},
+gvp:function(a){return H.VM(new W.uB(a.rows),[W.Iv])},
 "%":"HTMLTableElement"},
-tV:{
+Iv:{
 "^":"Bo;RH:rowIndex=",
 iF:function(a,b){return a.insertCell(b)},
-$istV:true,
+$isIv:true,
 "%":"HTMLTableRowElement"},
 BTK:{
 "^":"Bo;",
-gvp:function(a){return H.VM(new W.uB(a.rows),[W.tV])},
+gvp:function(a){return H.VM(new W.uB(a.rows),[W.Iv])},
 "%":"HTMLTableSectionElement"},
 OH:{
 "^":"Bo;rz:content=",
@@ -10587,17 +10710,6 @@
 $isEH:true},
 QI:{
 "^":"Gv;"},
-xd:{
-"^":"a;c9<",
-t:function(a,b){return H.VM(new W.RO(this.gc9(),b,!1),[null])}},
-DM:{
-"^":"xd;c9:Yg<,c9",
-t:function(a,b){var z,y
-z=$.nn()
-y=J.Qe(b)
-if(z.gvc(z).tg(0,y.hc(b)))if(P.F7()===!0)return H.VM(new W.Cqa(this.Yg,z.t(0,y.hc(b)),!1),[null])
-return H.VM(new W.Cqa(this.Yg,b,!1),[null])},
-static:{"^":"fDX"}},
 RAp:{
 "^":"Gv+lD;",
 $isWO:true,
@@ -10614,7 +10726,7 @@
 $asQV:function(){return[W.KV]}},
 Kx:{
 "^":"TpZ:12;",
-$1:[function(a){return J.lN(a)},"$1",null,2,0,null,145,"call"],
+$1:[function(a){return J.lN(a)},"$1",null,2,0,null,151,"call"],
 $isEH:true},
 bU2:{
 "^":"TpZ:81;a",
@@ -10801,7 +10913,7 @@
 z=C.Nm.zV(P.F(a,!0,null)," ")
 for(y=this.RN,y=H.VM(new H.a7(y,y.length,0,null),[H.u3(y,0)]);y.G();)J.Pw(y.Ff,z)},
 H9:function(a){this.AL.aN(0,new W.uS(a))},
-Rz:function(a,b){return this.jA(new W.Bj(b))},
+Rz:function(a,b){return this.jA(new W.FcD(b))},
 jA:function(a){return this.AL.es(0,!1,new W.hD(a))},
 b1:function(a){this.AL=H.VM(new H.A8(P.F(this.RN,!0,null),new W.FK()),[null,null])},
 static:{or:function(a){var z=new W.nFk(a,null)
@@ -10819,7 +10931,7 @@
 "^":"TpZ:12;a",
 $1:function(a){return a.H9(this.a)},
 $isEH:true},
-Bj:{
+FcD:{
 "^":"TpZ:12;a",
 $1:function(a){return J.V1(a,this.a)},
 $isEH:true},
@@ -10839,7 +10951,7 @@
 "^":"a;fA"},
 RO:{
 "^":"wS;bi,fA,el",
-KR:function(a,b,c,d){var z=new W.Ov(0,this.bi,this.fA,W.aF(a),this.el)
+KR:function(a,b,c,d){var z=new W.Ov(0,this.bi,this.fA,W.Yt(a),this.el)
 z.$builtinTypeInfo=this.$builtinTypeInfo
 z.DN()
 return z},
@@ -10868,7 +10980,7 @@
 return},
 Fv:[function(a,b){if(this.bi==null)return;++this.UU
 this.EO()
-if(b!=null)b.wM(this.gDQ(this))},function(a){return this.Fv(a,null)},"WJ","$1","$0","gX0",0,2,130,22,131],
+if(b!=null)b.wM(this.gDQ(this))},function(a){return this.Fv(a,null)},"WJ","$1","$0","gX0",0,2,136,22,137],
 gUF:function(){return this.UU>0},
 QE:[function(a){if(this.bi==null||this.UU<=0)return;--this.UU
 this.DN()},"$0","gDQ",0,0,17],
@@ -10949,7 +11061,6 @@
 xO:function(a){return this.uU.close()},
 xc:function(a,b,c,d){this.uU.postMessage(P.pf(b),c)},
 X6:function(a,b,c){return this.xc(a,b,c,null)},
-gI:function(a){return H.vh(P.f("You can only attach EventListeners to your own window."))},
 On:function(a,b,c,d){return H.vh(P.f("You can only attach EventListeners to your own window."))},
 Y9:function(a,b,c,d){return H.vh(P.f("You can only attach EventListeners to your own window."))},
 $isPZ:true,
@@ -11019,7 +11130,7 @@
 HAk:{
 "^":"d5G;x=,y=",
 "%":"SVGFESpotLightElement"},
-HX:{
+Rg:{
 "^":"d5G;fg:height=,yG:result=,x=,y=",
 "%":"SVGFETileElement"},
 juM:{
@@ -11031,7 +11142,7 @@
 l6:{
 "^":"tpr;fg:height=,x=,y=",
 "%":"SVGForeignObjectElement"},
-d0D:{
+en:{
 "^":"tpr;",
 "%":"SVGCircleElement|SVGEllipseElement|SVGLineElement|SVGPathElement|SVGPolygonElement|SVGPolylineElement;SVGGeometryElement"},
 tpr:{
@@ -11047,7 +11158,7 @@
 "^":"d5G;fg:height=,x=,y=,mH:href=",
 "%":"SVGPatternElement"},
 NJ3:{
-"^":"d0D;fg:height=,x=,y=",
+"^":"en;fg:height=,x=,y=",
 "%":"SVGRectElement"},
 qIR:{
 "^":"d5G;t5:type=,mH:href=",
@@ -11065,7 +11176,7 @@
 gf0:function(a){return H.VM(new W.Cqa(a,C.Kq.fA,!1),[null])},
 $isPZ:true,
 "%":"SVGAltGlyphDefElement|SVGAltGlyphItemElement|SVGAnimateElement|SVGAnimateMotionElement|SVGAnimateTransformElement|SVGAnimationElement|SVGComponentTransferFunctionElement|SVGCursorElement|SVGDescElement|SVGDiscardElement|SVGFEDistantLightElement|SVGFEDropShadowElement|SVGFEFuncAElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement|SVGFEMergeNodeElement|SVGFontElement|SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement|SVGGlyphElement|SVGGlyphRefElement|SVGHKernElement|SVGMPathElement|SVGMarkerElement|SVGMetadataElement|SVGMissingGlyphElement|SVGSetElement|SVGStopElement|SVGSymbolElement|SVGTitleElement|SVGVKernElement|SVGViewElement;SVGElement",
-static:{"^":"JQ<"}},
+static:{"^":"SHk<"}},
 hy:{
 "^":"tpr;fg:height=,x=,y=",
 Kb:function(a,b){return a.getElementById(b)},
@@ -11436,14 +11547,14 @@
 return a},
 aRu:function(a){a.toString
 return a},
-GG:function(a,b,c){H.Hj(a,b,c)
+z4:function(a,b,c){H.Hj(a,b,c)
 return new Uint8Array(a,b)},
-WZ:{
+bf:{
 "^":"Gv;H3:byteLength=",
 gbx:function(a){return C.uh},
 kq:function(a,b,c){H.Hj(a,b,c)
 return new DataView(a,b)},
-$isWZ:true,
+$isbf:true,
 $isaI:true,
 "%":"ArrayBuffer"},
 eH:{
@@ -11525,7 +11636,7 @@
 $isQV:true,
 $asQV:function(){return[P.KN]},
 "%":"Int8Array"},
-us:{
+pd:{
 "^":"Pg;",
 gbx:function(a){return C.M5},
 t:function(a,b){var z=a.length
@@ -11540,7 +11651,7 @@
 "%":"Uint16Array"},
 Pqh:{
 "^":"Pg;",
-gbx:function(a){return C.za},
+gbx:function(a){return C.Vh},
 t:function(a,b){var z=a.length
 if(b>>>0!==b||b>=z)this.aq(a,b,z)
 return a[b]},
@@ -11662,12 +11773,12 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.vo.LX(a)
-C.vo.XI(a)
+C.BB.LX(a)
+C.BB.XI(a)
 return a}}}}],["","",,F,{
 "^":"",
 ZP:{
-"^":"WZq;Ew,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"pva;Ew,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gkc:function(a){return a.Ew},
 skc:function(a,b){a.Ew=this.ct(a,C.yh,a.Ew,b)},
 static:{Yw:function(a){var z,y,x,w
@@ -11686,12 +11797,12 @@
 C.On.LX(a)
 C.On.XI(a)
 return a}}},
-WZq:{
+pva:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,L,{
 "^":"",
 nJ:{
-"^":"pva;a3,Ek,Ln,y4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"cda;a3,Ek,Ln,y4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 ga4:function(a){return a.a3},
 sa4:function(a,b){a.a3=this.ct(a,C.mi,a.a3,b)},
 gdu:function(a){return a.Ek},
@@ -11706,7 +11817,7 @@
 z=this.ct(a,C.eh,a.Ek,z)
 a.Ek=z
 if(J.xC(z,"1-line")){z=J.JA(a.a3,"\n"," ")
-a.a3=this.ct(a,C.mi,a.a3,z)}},"$3","gxb",6,0,115,2,106,107],
+a.a3=this.ct(a,C.mi,a.a3,z)}},"$3","gxb",6,0,116,2,106,107],
 kk:[function(a,b,c,d){var z,y,x
 J.fD(b)
 z=a.a3
@@ -11715,9 +11826,9 @@
 x=R.tB(y)
 J.kW(x,"expr",z)
 J.Vk(a.y4,0,x)
-this.LY(a,z).ml(new L.YW(x))}},"$3","gZ2",6,0,115,2,106,107],
+this.LY(a,z).ml(new L.YW(x))}},"$3","gZ2",6,0,116,2,106,107],
 o5:[function(a,b){var z=J.VU(J.l2(b),"expr")
-a.a3=this.ct(a,C.mi,a.a3,z)},"$1","gHo",2,0,146,2],
+a.a3=this.ct(a,C.mi,a.a3,z)},"$1","gHo",2,0,152,2],
 static:{Rpj:function(a){var z,y,x,w,v
 z=R.tB([])
 y=P.L5(null,null,null,P.qU,W.I0)
@@ -11737,12 +11848,12 @@
 C.Jh.LX(a)
 C.Jh.XI(a)
 return a}}},
-pva:{
+cda:{
 "^":"uL+Pi;",
 $isd3:true},
 YW:{
 "^":"TpZ:12;a",
-$1:[function(a){J.kW(this.a,"value",a)},"$1",null,2,0,null,147,"call"],
+$1:[function(a){J.kW(this.a,"value",a)},"$1",null,2,0,null,121,"call"],
 $isEH:true}}],["","",,R,{
 "^":"",
 Eg:{
@@ -11789,14 +11900,14 @@
 "^":"xc+Pi;",
 $isd3:true},
 Kz:{
-"^":"TpZ:148;a",
+"^":"TpZ:153;a",
 $1:[function(a){var z=this.a
-z.oy=J.Q5(z,C.UY,z.oy,a)},"$1",null,2,0,null,96,"call"],
+z.oy=J.NB(z,C.UY,z.oy,a)},"$1",null,2,0,null,96,"call"],
 $isEH:true},
 uv:{
 "^":"TpZ:76;b",
 $0:[function(){var z=this.b
-z.fe=J.Q5(z,C.S4,z.fe,!1)},"$0",null,0,0,null,"call"],
+z.fe=J.NB(z,C.S4,z.fe,!1)},"$0",null,0,0,null,"call"],
 $isEH:true}}],["","",,D,{
 "^":"",
 i7:{
@@ -11820,7 +11931,7 @@
 return a}}}}],["","",,A,{
 "^":"",
 Gk:{
-"^":"cda;KV,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"waa;KV,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gt0:function(a){return a.KV},
 st0:function(a,b){a.KV=this.ct(a,C.WQ,a.KV,b)},
 pA:[function(a,b){J.LE(a.KV).wM(b)},"$1","gvC",2,0,19,102],
@@ -11840,12 +11951,12 @@
 C.LTI.LX(a)
 C.LTI.XI(a)
 return a}}},
-cda:{
+waa:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,X,{
 "^":"",
 J3:{
-"^":"waa;DC,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V10;DC,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gpM:function(a){return a.DC},
 spM:function(a,b){a.DC=this.ct(a,C.Mc,a.DC,b)},
 pA:[function(a,b){J.LE(a.DC).wM(b)},"$1","gvC",2,0,19,102],
@@ -11865,11 +11976,11 @@
 C.n0.LX(a)
 C.n0.XI(a)
 return a}}},
-waa:{
+V10:{
 "^":"uL+Pi;",
 $isd3:true},
 MJ:{
-"^":"V10;Zc,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V11;Zc,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gQR:function(a){return a.Zc},
 sQR:function(a,b){a.Zc=this.ct(a,C.OO,a.Zc,b)},
 static:{IfX:function(a){var z,y,x,w
@@ -11888,7 +11999,7 @@
 C.ls6.LX(a)
 C.ls6.XI(a)
 return a}}},
-V10:{
+V11:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,U,{
 "^":"",
@@ -11919,7 +12030,7 @@
 $isd3:true}}],["","",,N,{
 "^":"",
 BS:{
-"^":"V11;P6,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V12;P6,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gig:function(a){return a.P6},
 sig:function(a,b){a.P6=this.ct(a,C.nf,a.P6,b)},
 pA:[function(a,b){J.LE(a.P6).wM(b)},"$1","gvC",2,0,19,102],
@@ -11940,7 +12051,7 @@
 C.PJ8.LX(a)
 C.PJ8.XI(a)
 return a}}},
-V11:{
+V12:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,O,{
 "^":"",
@@ -11950,7 +12061,7 @@
 C.yp.zB(J.Qd(this.zE),z,z+4,b)},
 gih:function(a){var z=this.y5
 return C.yp.Yc(J.Qd(this.zE),z,z+4)},
-PY:[function(){return new O.Hz(this.zE,this.y5+4)},"$0","gaw",0,0,149],
+PY:[function(){return new O.Hz(this.zE,this.y5+4)},"$0","gaw",0,0,154],
 gvH:function(a){return C.CD.BU(this.y5,4)},
 static:{"^":"Q0z",x6:function(a,b){var z,y,x
 z=J.RE(b)
@@ -11964,7 +12075,7 @@
 x2:{
 "^":"a;Yu<,yT>"},
 Vb:{
-"^":"V12;A6,WC,rn,Tl,GE,Cv,PA,oj,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V13;N2,WC,rn,Tl,GE,Cv,PA,oj,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gpf:function(a){return a.PA},
 spf:function(a,b){a.PA=this.ct(a,C.PM,a.PA,b)},
 gyw:function(a){return a.oj},
@@ -11972,16 +12083,16 @@
 Es:function(a){var z
 Z.uL.prototype.Es.call(this,a)
 z=(a.shadowRoot||a.webkitShadowRoot).querySelector("#fragmentation")
-a.A6=z
+a.N2=z
 z=J.Q9(z)
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(this.gL2(a)),z.el),[H.u3(z,0)]).DN()
-z=J.GW(a.A6)
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(this.gok(a)),z.el),[H.u3(z,0)]).DN()},
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(this.gL2(a)),z.el),[H.u3(z,0)]).DN()
+z=J.GW(a.N2)
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(this.gok(a)),z.el),[H.u3(z,0)]).DN()},
 Zt:function(a,b){var z,y,x
 for(z=J.mY(b),y=0;z.G();){x=z.Ff
 if(typeof x!=="number")return H.s(x)
 y=y*256+x}return y},
-OU:function(a,b,c,d){var z=J.It(c,"@")
+OU:function(a,b,c,d){var z=J.BQ(c,"@")
 if(0>=z.length)return H.e(z,0)
 a.Cv.u(0,b,z[0])
 a.Tl.u(0,b,d)
@@ -11989,10 +12100,10 @@
 DO:function(a,b,c){var z,y,x,w,v,u,t,s,r
 for(z=J.mY(J.UQ(b,"members")),y=a.Cv,x=a.Tl,w=a.GE;z.G();){v=z.gl()
 if(!J.x(v).$isdy){N.QM("").To(H.d(v))
-continue}u=H.BU(C.Nm.grZ(J.It(v.TU,"/")),null,null)
-t=u==null?C.pr:P.n2(u)
+continue}u=H.BU(C.Nm.grZ(J.BQ(v.TU,"/")),null,null)
+t=u==null?C.Xh:P.n2(u)
 s=[t.j1(128),t.j1(128),t.j1(128),255]
-r=J.It(v.bN,"@")
+r=J.BQ(v.bN,"@")
 if(0>=r.length)return H.e(r,0)
 y.u(0,u,r[0])
 x.u(0,u,s)
@@ -12039,15 +12150,15 @@
 w=z.y5
 v=a.Cv.t(0,a.GE.t(0,this.Zt(a,C.yp.Yc(J.Qd(z.zE),w,w+4))))
 z=J.xC(v,"")?"-":H.d(v)+" "+x
-a.PA=this.ct(a,C.PM,a.PA,z)},"$1","gL2",2,0,146,87],
+a.PA=this.ct(a,C.PM,a.PA,z)},"$1","gL2",2,0,152,87],
 qM:[function(a,b){var z=J.u1(this.Tm(a,J.op(b)).Yu,16)
-window.location.hash="/"+H.d(J.Ds(J.aT(a.oj)))+"/address/"+z},"$1","gok",2,0,146,87],
+window.location.hash="/"+H.d(J.Ds(J.aT(a.oj)))+"/address/"+z},"$1","gok",2,0,152,87],
 UV:function(a){var z,y,x,w,v
 z=a.oj
-if(z==null||a.A6==null)return
+if(z==null||a.N2==null)return
 this.DO(a,J.UQ(z,"class_list"),J.UQ(a.oj,"free_class_id"))
 y=J.UQ(a.oj,"pages")
-z=a.A6.parentElement
+z=a.N2.parentElement
 z.toString
 x=P.T7(C.CD.yu(C.CD.RE(z.clientLeft)),C.CD.yu(C.CD.RE(z.clientTop)),C.CD.yu(C.CD.RE(z.clientWidth)),C.CD.yu(C.CD.RE(z.clientHeight)),null).R
 z=J.Cl(J.Cl(J.UQ(a.oj,"page_size_bytes"),J.UQ(a.oj,"unit_size_bytes")),x)
@@ -12057,10 +12168,10 @@
 w=J.q8(y)
 if(typeof w!=="number")return H.s(w)
 v=P.J(z*w,6000)
-w=P.f9(J.Ry(a.A6).createImageData(x,v))
+w=P.f9(J.Ry(a.N2).createImageData(x,v))
 a.WC=w
-J.vP(a.A6,J.eY(w))
-J.OE(a.A6,J.OB(a.WC))
+J.vP(a.N2,J.eY(w))
+J.OE(a.N2,J.OB(a.WC))
 this.Ky(a,0)},
 Ky:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
 z=J.UQ(a.oj,"pages")
@@ -12106,14 +12217,14 @@
 x=$.Qg()
 m=y+4
 C.yp.zB(n.gRn(r),y,m,x)
-u=new O.Hz(r,m)}y=J.Ry(a.A6)
+u=new O.Hz(r,m)}y=J.Ry(a.N2)
 x=a.WC
 J.kZ(y,x,0,0,0,w,J.eY(x),v)
-P.BV(new O.R5(a,b),null)},
+P.DJ(new O.R5(a,b),null)},
 pA:[function(a,b){var z=a.oj
 if(z==null)return
-J.aT(z).cv("heapmap").ml(new O.aG(a)).OA(new O.Wq()).wM(b)},"$1","gvC",2,0,19,102],
-YS7:[function(a,b){P.BV(new O.oc(a),null)},"$1","gRh",2,0,19,59],
+J.aT(z).cv("heapmap").ml(new O.aG(a)).OA(new O.pM()).wM(b)},"$1","gvC",2,0,19,102],
+YS7:[function(a,b){P.DJ(new O.oc(a),null)},"$1","gRh",2,0,19,59],
 static:{"^":"nK,Os,SoT,WBO",teo:function(a){var z,y,x,w,v,u,t
 z=P.Fl(null,null)
 y=P.Fl(null,null)
@@ -12136,7 +12247,7 @@
 C.Al.LX(a)
 C.Al.XI(a)
 return a}}},
-V12:{
+V13:{
 "^":"uL+Pi;",
 $isd3:true},
 R5:{
@@ -12146,11 +12257,11 @@
 aG:{
 "^":"TpZ:114;a",
 $1:[function(a){var z=this.a
-z.oj=J.Q5(z,C.QH,z.oj,a)},"$1",null,2,0,null,150,"call"],
+z.oj=J.NB(z,C.QH,z.oj,a)},"$1",null,2,0,null,155,"call"],
 $isEH:true},
-Wq:{
+pM:{
 "^":"TpZ:81;",
-$2:[function(a,b){N.QM("").To(H.d(a)+" "+H.d(b))},"$2",null,4,0,null,2,151,"call"],
+$2:[function(a,b){N.QM("").To(H.d(a)+" "+H.d(b))},"$2",null,4,0,null,2,156,"call"],
 $isEH:true},
 oc:{
 "^":"TpZ:76;a",
@@ -12159,12 +12270,12 @@
 "^":"",
 UC:{
 "^":"Vz;oH,vp,zz,pT,Rj,Vg,fn",
-wA:function(a,b){var z
+Ey:function(a,b){var z
 if(b===0){z=this.vp
 if(a>>>0!==a||a>=z.length)return H.e(z,a)
-return J.DA(J.UQ(J.hI(z[a]),b))}return G.Vz.prototype.wA.call(this,a,b)}},
+return J.DA(J.UQ(J.hI(z[a]),b))}return G.Vz.prototype.Ey.call(this,a,b)}},
 Ly:{
-"^":"V13;MF,uY,Xe,jF,FX,Uv,Rp,Na,Ol,Sk,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V14;MF,uY,Xe,jF,FX,Uv,Rp,Na,Ol,Sk,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gYt:function(a){return a.MF},
 sYt:function(a,b){a.MF=this.ct(a,C.TN,a.MF,b)},
 gcH:function(a){return a.uY},
@@ -12216,7 +12327,7 @@
 while(!0){v=J.q8(x.gUQ(z))
 if(typeof v!=="number")return H.s(v)
 if(!(w<v))break
-c$0:{if(C.Nm.tg(C.NG,w))break c$0
+c$0:{if(C.Nm.tg(C.Q5,w))break c$0
 u=J.UQ(y.gks(b),w)
 v=J.RE(u)
 v.smk(u,J.AG(J.UQ(x.gUQ(z),w)))
@@ -12267,7 +12378,7 @@
 eJ8:[function(a,b){var z=a.Ol
 if(z==null)return
 J.aT(z).cv("/allocationprofile?reset=true").ml(this.gLv(a)).wM(b)},"$1","gNb",2,0,19,102],
-Ed:[function(a,b){a.Ol=this.ct(a,C.vb,a.Ol,b)},"$1","gLv",2,0,152,153],
+Ed:[function(a,b){a.Ol=this.ct(a,C.vb,a.Ol,b)},"$1","gLv",2,0,157,158],
 n1:[function(a,b){var z,y,x,w,v
 z=a.Ol
 if(z==null)return
@@ -12333,17 +12444,17 @@
 if(z==null)return""
 y=J.RE(z)
 x=b===!0?y.god(z).gUY():y.god(z).gxQ()
-return C.CD.Sy(J.L9(J.vX(x.gpy(),1000),x.gYk()),2)+" ms"},"$1","gOd",2,0,154,155],
+return C.CD.Sy(J.L9(J.vX(x.gpy(),1000),x.gYk()),2)+" ms"},"$1","gOd",2,0,159,160],
 NC:[function(a,b){var z,y
 z=a.Ol
 if(z==null)return""
 y=J.RE(z)
-return J.AG((b===!0?y.god(z).gUY():y.god(z).gxQ()).gYk())},"$1","gJN",2,0,154,155],
+return J.AG((b===!0?y.god(z).gUY():y.god(z).gxQ()).gYk())},"$1","gJN",2,0,159,160],
 o7:[function(a,b){var z,y
 z=a.Ol
 if(z==null)return""
 y=J.RE(z)
-return J.cI((b===!0?y.god(z).gUY():y.god(z).gxQ()).gpy(),2)+" secs"},"$1","goN",2,0,154,155],
+return J.cI((b===!0?y.god(z).gUY():y.god(z).gxQ()).gpy(),2)+" secs"},"$1","goN",2,0,159,160],
 Zy:function(a){var z=P.zV(J.UQ($.BY,"DataTable"),null)
 a.Xe=new G.Kf(z)
 z.V7("addColumn",["string","Type"])
@@ -12353,7 +12464,7 @@
 z.V7("addColumn",["string","Type"])
 a.FX.Yb.V7("addColumn",["number","Size"])
 z=H.VM([],[G.Ni])
-z=this.ct(a,C.kG,a.Rp,new K.UC([new G.Kt("Class",G.NZt()),new G.Kt("",G.NZt()),new G.Kt("Accumulated Size (New)",G.Gt()),new G.Kt("Accumulated Instances",G.OA()),new G.Kt("Current Size",G.Gt()),new G.Kt("Current Instances",G.OA()),new G.Kt("",G.NZt()),new G.Kt("Accumulator Size (Old)",G.Gt()),new G.Kt("Accumulator Instances",G.OA()),new G.Kt("Current Size",G.Gt()),new G.Kt("Current Instances",G.OA())],z,[],0,!0,null,null))
+z=this.ct(a,C.kG,a.Rp,new K.UC([new G.Kt("Class",G.Tp()),new G.Kt("",G.Tp()),new G.Kt("Accumulated Size (New)",G.Gt()),new G.Kt("Accumulated Instances",G.OA()),new G.Kt("Current Size",G.Gt()),new G.Kt("Current Instances",G.OA()),new G.Kt("",G.Tp()),new G.Kt("Accumulator Size (Old)",G.Gt()),new G.Kt("Accumulator Instances",G.OA()),new G.Kt("Current Size",G.Gt()),new G.Kt("Current Instances",G.OA())],z,[],0,!0,null,null))
 a.Rp=z
 z.sxp(2)},
 static:{EDe:function(a){var z,y,x,w
@@ -12375,7 +12486,7 @@
 C.Vc.XI(a)
 C.Vc.Zy(a)
 return a}}},
-V13:{
+V14:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,P,{
 "^":"",
@@ -12409,13 +12520,13 @@
 return y},
 $isEH:true},
 rG:{
-"^":"TpZ:156;d",
+"^":"TpZ:161;d",
 $1:function(a){var z=this.d
 if(a>=z.length)return H.e(z,a)
 return z[a]},
 $isEH:true},
 yhO:{
-"^":"TpZ:157;e",
+"^":"TpZ:162;e",
 $2:function(a,b){var z=this.e
 if(a>=z.length)return H.e(z,a)
 z[a]=b},
@@ -12438,7 +12549,7 @@
 if(!!y.$ishH)return a
 if(!!y.$isO4)return a
 if(!!y.$isSg)return a
-if(!!y.$isWZ)return a
+if(!!y.$isbf)return a
 if(!!y.$iseH)return a
 if(!!y.$isT8){x=this.f.$1(a)
 w=this.UI.$1(x)
@@ -12473,13 +12584,13 @@
 return y},
 $isEH:true},
 D6:{
-"^":"TpZ:156;c",
+"^":"TpZ:161;c",
 $1:function(a){var z=this.c
 if(a>=z.length)return H.e(z,a)
 return z[a]},
 $isEH:true},
 m5:{
-"^":"TpZ:157;d",
+"^":"TpZ:162;d",
 $2:function(a,b){var z=this.d
 if(a>=z.length)return H.e(z,a)
 z[a]=b},
@@ -12526,11 +12637,11 @@
 aN:function(a,b){this.DG().aN(0,b)},
 zV:function(a,b){return this.DG().zV(0,b)},
 ez:[function(a,b){var z=this.DG()
-return H.VM(new H.xy(z,b),[H.u3(z,0),null])},"$1","gIr",2,0,158,30],
+return H.VM(new H.xy(z,b),[H.u3(z,0),null])},"$1","gIr",2,0,163,30],
 ad:function(a,b){var z=this.DG()
 return H.VM(new H.U5(z,b),[H.u3(z,0)])},
 lM:[function(a,b){var z=this.DG()
-return H.VM(new H.oA(z,b),[H.u3(z,0),null])},"$1","git",2,0,159,30],
+return H.VM(new H.oA(z,b),[H.u3(z,0),null])},"$1","git",2,0,164,30],
 Vr:function(a,b){return this.DG().Vr(0,b)},
 gl0:function(a){return this.DG().X5===0},
 gor:function(a){return this.DG().X5!==0},
@@ -12574,19 +12685,19 @@
 $asQV:function(){return[P.qU]}},
 GE:{
 "^":"TpZ:12;a",
-$1:[function(a){return J.bi(a,this.a)},"$1",null,2,0,null,160,"call"],
+$1:[function(a){return J.bi(a,this.a)},"$1",null,2,0,null,165,"call"],
 $isEH:true},
 rl:{
 "^":"TpZ:12;a",
-$1:[function(a){return J.bj(a,this.a)},"$1",null,2,0,null,160,"call"],
+$1:[function(a){return J.bj(a,this.a)},"$1",null,2,0,null,165,"call"],
 $isEH:true},
 Jg:{
 "^":"TpZ:12;a",
-$1:[function(a){return J.Ei(a,this.a)},"$1",null,2,0,null,160,"call"],
+$1:[function(a){return J.Ei(a,this.a)},"$1",null,2,0,null,165,"call"],
 $isEH:true},
 uQ:{
 "^":"TpZ:12;",
-$1:[function(a){return J.Z8(a)},"$1",null,2,0,null,160,"call"],
+$1:[function(a){return J.Z8(a)},"$1",null,2,0,null,165,"call"],
 $isEH:true},
 D7:{
 "^":"ark;im,kG",
@@ -12609,7 +12720,7 @@
 Jd:function(a){return this.GT(a,null)},
 YW:function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on filtered list"))},
 zB:function(a,b,c,d){return this.YW(a,b,c,d,0)},
-oq:function(a,b,c){H.bQ(C.Nm.aM(this.gd3(),b,c),new P.GS())},
+oq:function(a,b,c){H.bQ(C.Nm.aM(this.gd3(),b,c),new P.rK())},
 V1:function(a){J.Wf(this.kG.uR)},
 mv:function(a){var z=this.grZ(this)
 if(z!=null)J.Mp(z)
@@ -12637,34 +12748,33 @@
 "^":"TpZ:12;",
 $1:function(a){return!!J.x(a).$ish4},
 $isEH:true},
-GS:{
+rK:{
 "^":"TpZ:12;",
 $1:function(a){return J.Mp(a)},
 $isEH:true}}],["","",,O,{
 "^":"",
 Im:{
-"^":"ZzR;ee,jw,Vg,fn,tY,Pe,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V15;ee,jw,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gnv:function(a){return a.ee},
 snv:function(a,b){a.ee=this.ct(a,C.kY,a.ee,b)},
-gV8:function(a){return H.Go(a.ee,"$isvO").RF.LL.t(0,"slot")},
-gyg:function(a){var z=H.Go(a.ee,"$isvO").RF.LL.t(0,"slot")
+gV8:function(a){return J.UQ(a.ee,"slot")},
+gyg:function(a){var z=J.UQ(a.ee,"slot")
 return typeof z==="number"},
-gWk:function(a){return!!J.x(H.Go(a.ee,"$isvO").RF.LL.t(0,"slot")).$isvO&&J.xC(J.UQ(H.Go(a.ee,"$isvO").RF.LL.t(0,"slot"),"type"),"@Field")},
-gFF:function(a){return H.Go(a.ee,"$isvO").RF.LL.t(0,"source")},
+gWk:function(a){return!!J.x(J.UQ(a.ee,"slot")).$isvO&&J.xC(J.UQ(J.UQ(a.ee,"slot"),"type"),"@Field")},
+gFF:function(a){return J.UQ(a.ee,"source")},
 gyK:function(a){return a.jw},
 syK:function(a,b){a.jw=this.ct(a,C.uO,a.jw,b)},
-rT:[function(a,b){return J.aT(H.Go(a.ee,"$isvO").RF.LL.t(0,"source")).cv(J.WB(J.eS(H.Go(a.ee,"$isvO").RF.LL.t(0,"source")),"/inbound_references?limit="+H.d(b))).ml(new O.cC(a))},"$1","gi0",2,0,111,32],
+rT:[function(a,b){return J.aT(J.UQ(a.ee,"source")).cv(J.WB(J.eS(J.UQ(a.ee,"source")),"/inbound_references?limit="+H.d(b))).ml(new O.cC(a))},"$1","gi0",2,0,111,32],
 Gn:[function(a){return this.gus(a)},"$0","gyX",0,0,76],
 vQ:[function(a,b,c){if(b===!0)this.rT(a,100).ml(new O.qm(a)).wM(c)
 else{a.jw=this.ct(a,C.uO,a.jw,null)
-c.$0()}},"$2","gus",4,0,161,162,102],
+c.$0()}},"$2","gus",4,0,118,119,120],
 static:{eka:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
 y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
 x=P.Fl(null,null)
 w=P.Fl(null,null)
-a.Pe=!1
 a.f4=[]
 a.OD=!1
 a.kK=!1
@@ -12675,8 +12785,8 @@
 C.QFk.LX(a)
 C.QFk.XI(a)
 return a}}},
-ZzR:{
-"^":"xI+Pi;",
+V15:{
+"^":"uL+Pi;",
 $isd3:true},
 cC:{
 "^":"TpZ:114;a",
@@ -12685,28 +12795,28 @@
 y=J.UQ(a,"references")
 x=Q.pT(null,null)
 x.FV(0,y)
-z.jw=J.Q5(z,C.uO,z.jw,x)},"$1",null,2,0,null,150,"call"],
+z.jw=J.NB(z,C.uO,z.jw,x)},"$1",null,2,0,null,155,"call"],
 $isEH:true},
 qm:{
 "^":"TpZ:12;a",
-$1:[function(a){J.Q5(this.a,C.kY,0,1)},"$1",null,2,0,null,147,"call"],
+$1:[function(a){J.NB(this.a,C.kY,0,1)},"$1",null,2,0,null,121,"call"],
 $isEH:true}}],["","",,B,{
 "^":"",
 pR:{
 "^":"xI;tY,Pe,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
-gXt:function(a){var z=a.tY
+gJp:function(a){var z=a.tY
 if(z!=null)if(J.xC(J.zH(z),"Sentinel"))if(J.xC(J.eS(a.tY),"objects/optimized-out"))return"This object is no longer needed and has been removed by the optimizing compiler."
 else if(J.xC(J.eS(a.tY),"objects/collected"))return"This object has been reclaimed by the garbage collector."
 else if(J.xC(J.eS(a.tY),"objects/expired"))return"The handle to this object has expired.  Consider refreshing the page."
 else if(J.xC(J.eS(a.tY),"objects/not-initialized"))return"This object will be initialized once it is accessed by the program."
 else if(J.xC(J.eS(a.tY),"objects/being-initialized"))return"This object is currently being initialized."
-return Q.xI.prototype.gXt.call(this,a)},
+return Q.xI.prototype.gJp.call(this,a)},
 Gn:[function(a){return this.gus(a)},"$0","gyX",0,0,76],
 vQ:[function(a,b,c){var z=a.tY
-if(b===!0)J.LE(z).ml(new B.Ng(a)).wM(c)
+if(b===!0)J.LE(z).ml(new B.tV(a)).wM(c)
 else{z.stJ(null)
 J.Z6(z,null)
-c.$0()}},"$2","gus",4,0,161,162,102],
+c.$0()}},"$2","gus",4,0,118,119,120],
 static:{luW:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -12724,38 +12834,28 @@
 C.uRw.LX(a)
 C.uRw.XI(a)
 return a}}},
-Ng:{
+tV:{
 "^":"TpZ:12;a",
 $1:[function(a){var z,y
 if(a.gPE()!=null){J.DF(a,a.gPE())
 a.sTE(a.gPE())}z=this.a
 y=J.RE(z)
 z.tY=y.ct(z,C.kY,z.tY,a)
-y.ct(z,C.kY,0,1)},"$1",null,2,0,null,147,"call"],
+y.ct(z,C.kY,0,1)},"$1",null,2,0,null,121,"call"],
 $isEH:true}}],["","",,Z,{
 "^":"",
 EZ:{
-"^":"V14;VQ,VR,Cm,MV,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V16;VQ,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 ghf:function(a){return a.VQ},
 shf:function(a,b){a.VQ=this.ct(a,C.fn,a.VQ,b)},
-gIi:function(a){return a.VR},
-sIi:function(a,b){a.VR=this.ct(a,C.XM,a.VR,b)},
-gyK:function(a){return a.Cm},
-syK:function(a,b){a.Cm=this.ct(a,C.uO,a.Cm,b)},
-gCF:function(a){return a.MV},
-sCF:function(a,b){a.MV=this.ct(a,C.tg,a.MV,b)},
 vV:[function(a,b){return J.aT(a.VQ).cv(J.WB(J.eS(a.VQ),"/eval?expr="+P.jW(C.Fa,b,C.xM,!1)))},"$1","gZ2",2,0,109,110],
-zs:[function(a,b){return J.aT(a.VQ).cv(J.WB(J.eS(a.VQ),"/retained")).ml(new Z.Pz(a))},"$1","ghN",2,0,111,113],
-Cc:[function(a,b){return J.aT(a.VQ).cv(J.WB(J.eS(a.VQ),"/retaining_path?limit="+H.d(b))).ml(new Z.cL(a))},"$1","gCI",2,0,111,32],
-rT:[function(a,b){return J.aT(a.VQ).cv(J.WB(J.eS(a.VQ),"/inbound_references?limit="+H.d(b))).ml(new Z.Fs(a))},"$1","gi0",2,0,111,32],
-pA:[function(a,b){J.LE(a.VQ).wM(b)},"$1","gvC",2,0,19,102],
+pA:[function(a,b){J.LE(a.VQ).wM(b)},"$1","gvC",2,0,122,120],
 static:{CoW:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
 y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
 x=P.Fl(null,null)
 w=P.Fl(null,null)
-a.MV=null
 a.f4=[]
 a.OD=!1
 a.kK=!1
@@ -12766,29 +12866,12 @@
 C.yKx.LX(a)
 C.yKx.XI(a)
 return a}}},
-V14:{
+V16:{
 "^":"uL+Pi;",
-$isd3:true},
-Pz:{
-"^":"TpZ:114;a",
-$1:[function(a){var z,y
-z=this.a
-y=H.BU(J.UQ(a,"valueAsString"),null,null)
-z.MV=J.Q5(z,C.tg,z.MV,y)},"$1",null,2,0,null,96,"call"],
-$isEH:true},
-cL:{
-"^":"TpZ:148;a",
-$1:[function(a){var z=this.a
-z.VR=J.Q5(z,C.XM,z.VR,a)},"$1",null,2,0,null,96,"call"],
-$isEH:true},
-Fs:{
-"^":"TpZ:148;a",
-$1:[function(a){var z=this.a
-z.Cm=J.Q5(z,C.uO,z.Cm,a)},"$1",null,2,0,null,96,"call"],
-$isEH:true}}],["","",,E,{
+$isd3:true}}],["","",,E,{
 "^":"",
 L4:{
-"^":"V15;PM,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V17;PM,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gkm:function(a){return a.PM},
 skm:function(a,b){a.PM=this.ct(a,C.qs,a.PM,b)},
 pA:[function(a,b){J.LE(a.PM).wM(b)},"$1","gvC",2,0,19,102],
@@ -12808,7 +12891,7 @@
 C.j1o.LX(a)
 C.j1o.XI(a)
 return a}}},
-V15:{
+V17:{
 "^":"uL+Pi;",
 $isd3:true},
 Mb:{
@@ -12831,7 +12914,7 @@
 C.Ag.XI(a)
 return a}}},
 mO:{
-"^":"V16;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V18;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gjx:function(a){return a.Cr},
 sjx:function(a,b){a.Cr=this.ct(a,C.vp,a.Cr,b)},
 pA:[function(a,b){J.LE(a.Cr).wM(b)},"$1","gvC",2,0,19,102],
@@ -12851,7 +12934,7 @@
 C.Ie.LX(a)
 C.Ie.XI(a)
 return a}}},
-V16:{
+V18:{
 "^":"uL+Pi;",
 $isd3:true},
 DE:{
@@ -12874,7 +12957,7 @@
 C.Ig.XI(a)
 return a}}},
 U1:{
-"^":"V17;yR,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V19;yR,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gql:function(a){return a.yR},
 sql:function(a,b){a.yR=this.ct(a,C.oj,a.yR,b)},
 pA:[function(a,b){J.LE(a.yR).wM(b)},"$1","gvC",2,0,19,102],
@@ -12902,7 +12985,7 @@
 C.VLs.LX(a)
 C.VLs.XI(a)
 return a}}},
-V17:{
+V19:{
 "^":"uL+Pi;",
 $isd3:true},
 XB:{
@@ -12911,11 +12994,11 @@
 if(z.c3!=null)z.c3=P.cH(P.ii(0,0,0,0,0,1),J.wd(z))},"$0",null,0,0,null,"call"],
 $isEH:true},
 H8:{
-"^":"V18;OS,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V20;OS,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gPB:function(a){return a.OS},
 sPB:function(a,b){a.OS=this.ct(a,C.yL,a.OS,b)},
 pA:[function(a,b){J.LE(a.OS).wM(b)},"$1","gvC",2,0,19,102],
-nS:[function(a){J.LE(a.OS).wM(new E.uN(a))},"$0","gqw",0,0,17],
+nS:[function(a){J.LE(a.OS).wM(new E.cP(a))},"$0","gqw",0,0,17],
 Es:function(a){Z.uL.prototype.Es.call(this,a)
 a.c3=P.cH(P.ii(0,0,0,0,0,1),this.gqw(a))},
 Lx:function(a){var z
@@ -12939,10 +13022,10 @@
 C.tO.LX(a)
 C.tO.XI(a)
 return a}}},
-V18:{
+V20:{
 "^":"uL+Pi;",
 $isd3:true},
-uN:{
+cP:{
 "^":"TpZ:76;a",
 $0:[function(){var z=this.a
 if(z.c3!=null)z.c3=P.cH(P.ii(0,0,0,0,0,1),J.wd(z))},"$0",null,0,0,null,"call"],
@@ -12986,7 +13069,7 @@
 C.IXz.XI(a)
 return a}}},
 oF:{
-"^":"V19;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V21;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gjx:function(a){return a.Cr},
 sjx:function(a,b){a.Cr=this.ct(a,C.vp,a.Cr,b)},
 pA:[function(a,b){J.LE(a.Cr).wM(b)},"$1","gvC",2,0,19,102],
@@ -13006,11 +13089,11 @@
 C.ozm.LX(a)
 C.ozm.XI(a)
 return a}}},
-V19:{
+V21:{
 "^":"uL+Pi;",
 $isd3:true},
 Q6:{
-"^":"V20;uv,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V22;uv,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gj4:function(a){return a.uv},
 sj4:function(a,b){a.uv=this.ct(a,C.Ve,a.uv,b)},
 pA:[function(a,b){J.LE(a.uv).wM(b)},"$1","gvC",2,0,19,102],
@@ -13030,7 +13113,7 @@
 C.rU.LX(a)
 C.rU.XI(a)
 return a}}},
-V20:{
+V22:{
 "^":"uL+Pi;",
 $isd3:true},
 uE:{
@@ -13053,7 +13136,7 @@
 C.Fw.XI(a)
 return a}}},
 Zn:{
-"^":"V21;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V23;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gjx:function(a){return a.Cr},
 sjx:function(a,b){a.Cr=this.ct(a,C.vp,a.Cr,b)},
 pA:[function(a,b){J.LE(a.Cr).wM(b)},"$1","gvC",2,0,19,102],
@@ -13070,14 +13153,14 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.ij.LX(a)
-C.ij.XI(a)
+C.ag.LX(a)
+C.ag.XI(a)
 return a}}},
-V21:{
+V23:{
 "^":"uL+Pi;",
 $isd3:true},
 n5:{
-"^":"V22;h1,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V24;h1,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gHy:function(a){return a.h1},
 sHy:function(a,b){a.h1=this.ct(a,C.YE,a.h1,b)},
 pA:[function(a,b){J.LE(a.h1).wM(b)},"$1","gvC",2,0,19,102],
@@ -13097,11 +13180,11 @@
 C.UZ.LX(a)
 C.UZ.XI(a)
 return a}}},
-V22:{
+V24:{
 "^":"uL+Pi;",
 $isd3:true},
 Ma:{
-"^":"V23;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V25;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gjx:function(a){return a.Cr},
 sjx:function(a,b){a.Cr=this.ct(a,C.vp,a.Cr,b)},
 pA:[function(a,b){J.LE(a.Cr).wM(b)},"$1","gvC",2,0,19,102],
@@ -13121,7 +13204,7 @@
 C.iR.LX(a)
 C.iR.XI(a)
 return a}}},
-V23:{
+V25:{
 "^":"uL+Pi;",
 $isd3:true},
 wN:{
@@ -13144,7 +13227,7 @@
 C.RVQ.XI(a)
 return a}}},
 ds:{
-"^":"V24;wT,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V26;wT,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gMZ:function(a){return a.wT},
 sMZ:function(a,b){a.wT=this.ct(a,C.jU,a.wT,b)},
 pA:[function(a,b){J.LE(a.wT).wM(b)},"$1","gvC",2,0,19,102],
@@ -13172,7 +13255,7 @@
 C.wP.LX(a)
 C.wP.XI(a)
 return a}}},
-V24:{
+V26:{
 "^":"uL+Pi;",
 $isd3:true},
 mj:{
@@ -13181,7 +13264,7 @@
 if(z.c3!=null)z.c3=P.cH(P.ii(0,0,0,0,0,1),J.Nb(z))},"$0",null,0,0,null,"call"],
 $isEH:true},
 qM:{
-"^":"V25;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V27;Cr,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gjx:function(a){return a.Cr},
 sjx:function(a,b){a.Cr=this.ct(a,C.vp,a.Cr,b)},
 pA:[function(a,b){J.LE(a.Cr).wM(b)},"$1","gvC",2,0,19,102],
@@ -13198,14 +13281,14 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.wvk.LX(a)
-C.wvk.XI(a)
+C.ej.LX(a)
+C.ej.XI(a)
 return a}}},
-V25:{
+V27:{
 "^":"uL+Pi;",
 $isd3:true},
 av:{
-"^":"oEY;CB,Vg,fn,tY,Pe,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"ZzR;CB,Vg,fn,tY,Pe,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gEQ:function(a){return a.CB},
 sEQ:function(a,b){a.CB=this.ct(a,C.pH,a.CB,b)},
 static:{R7:function(a){var z,y,x,w
@@ -13226,11 +13309,11 @@
 C.OkI.LX(a)
 C.OkI.XI(a)
 return a}}},
-oEY:{
+ZzR:{
 "^":"xI+Pi;",
 $isd3:true},
 uz:{
-"^":"V26;RX,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V28;RX,c3,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gpE:function(a){return a.RX},
 Fn:function(a){return this.gpE(a).$0()},
 spE:function(a,b){a.RX=this.ct(a,C.Wj,a.RX,b)},
@@ -13259,7 +13342,7 @@
 C.bZ.LX(a)
 C.bZ.XI(a)
 return a}}},
-V26:{
+V28:{
 "^":"uL+Pi;",
 $isd3:true},
 Cc:{
@@ -13306,7 +13389,7 @@
 z.mW(a,b,c,d)
 return z}}},
 kK:{
-"^":"V27;oi,TH,WT,Uw,Ik,oo,fE,ev,XX,TM,Xg,Hm=,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V29;oi,TH,WT,Uw,Ik,oo,fE,ev,XX,TM,Xg,Hm=,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gB1:function(a){return a.oi},
 sB1:function(a,b){a.oi=this.ct(a,C.vb,a.oi,b)},
 gPL:function(a){return a.TH},
@@ -13354,7 +13437,7 @@
 z=R.tB([])
 a.Hm=new G.ih(z,null,null)
 this.Zb(a)},
-TN:[function(a,b){this.pA(a,null)},"$1","gb6",2,0,19,59],
+ov:[function(a,b){this.pA(a,null)},"$1","gb6",2,0,19,59],
 pA:[function(a,b){var z="profile?tags="+H.d(a.TM)
 J.aT(a.oi).cv(z).ml(new X.Xy(a)).wM(b)},"$1","gvC",2,0,19,102],
 Zb:function(a){if(a.oi==null)return
@@ -13373,7 +13456,7 @@
 w=J.RE(b)
 if(!J.xC(J.eS(w.gN(b)),"expand")&&!J.xC(w.gN(b),d))return
 z=J.Lp(d)
-if(!!J.x(z).$istV)try{w=a.Hm
+if(!!J.x(z).$isIv)try{w=a.Hm
 v=J.IO(z)
 if(typeof v!=="number")return v.W()
 w.lo(v-1)}catch(u){w=H.Ru(u)
@@ -13405,13 +13488,13 @@
 C.kS.LX(a)
 C.kS.XI(a)
 return a}}},
-V27:{
+V29:{
 "^":"uL+Pi;",
 $isd3:true},
 Xy:{
 "^":"TpZ:114;a",
 $1:[function(a){var z=this.a
-z.oi=J.Q5(z,C.vb,z.oi,a)},"$1",null,2,0,null,163,"call"],
+z.oi=J.NB(z,C.vb,z.oi,a)},"$1",null,2,0,null,166,"call"],
 $isEH:true}}],["","",,N,{
 "^":"",
 oa:{
@@ -13435,7 +13518,7 @@
 return a}}}}],["","",,D,{
 "^":"",
 St:{
-"^":"V28;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V30;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 god:function(a){return a.ow},
 sod:function(a,b){a.ow=this.ct(a,C.rB,a.ow,b)},
 static:{N5:function(a){var z,y,x,w
@@ -13454,23 +13537,23 @@
 C.OoF.LX(a)
 C.OoF.XI(a)
 return a}}},
-V28:{
+V30:{
 "^":"uL+Pi;",
 $isd3:true},
 IW:{
-"^":"V29;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V31;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 god:function(a){return a.ow},
 sod:function(a,b){a.ow=this.ct(a,C.rB,a.ow,b)},
-Fv:[function(a,b){return J.Ho(a.ow)},"$1","gX0",2,0,164,13],
-kf:[function(a,b){$.Kh.pZ(a.ow)
-return J.df(a.ow)},"$1","gDQ",2,0,164,13],
+Fv:[function(a,b){return J.Ho(a.ow)},"$1","gX0",2,0,167,13],
+qW:[function(a,b){$.Kh.pZ(a.ow)
+return J.df(a.ow)},"$1","gDQ",2,0,167,13],
 PyB:[function(a,b){$.Kh.pZ(a.ow)
-return J.UR(a.ow)},"$1","gLc",2,0,164,13],
+return J.UR(a.ow)},"$1","gLc",2,0,167,13],
 XQ:[function(a,b){$.Kh.pZ(a.ow)
-return J.MU(a.ow)},"$1","gqF",2,0,164,13],
+return J.MU(a.ow)},"$1","gqF",2,0,167,13],
 Cx:[function(a,b){$.Kh.pZ(a.ow)
-return J.Fy(a.ow)},"$1","gZp",2,0,164,13],
-static:{zr:function(a){var z,y,x,w
+return J.Fy(a.ow)},"$1","gZp",2,0,167,13],
+static:{dmb:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
 y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
@@ -13486,11 +13569,11 @@
 C.F2.LX(a)
 C.F2.XI(a)
 return a}}},
-V29:{
+V31:{
 "^":"uL+Pi;",
 $isd3:true},
 Qh:{
-"^":"V30;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V32;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 god:function(a){return a.ow},
 sod:function(a,b){a.ow=this.ct(a,C.rB,a.ow,b)},
 static:{Qj:function(a){var z,y,x,w
@@ -13509,11 +13592,11 @@
 C.rCJ.LX(a)
 C.rCJ.XI(a)
 return a}}},
-V30:{
+V32:{
 "^":"uL+Pi;",
 $isd3:true},
 Oz:{
-"^":"V31;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V33;ow,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 god:function(a){return a.ow},
 sod:function(a,b){a.ow=this.ct(a,C.rB,a.ow,b)},
 static:{TSH:function(a){var z,y,x,w
@@ -13532,7 +13615,7 @@
 C.mb.LX(a)
 C.mb.XI(a)
 return a}}},
-V31:{
+V33:{
 "^":"uL+Pi;",
 $isd3:true},
 vT:{
@@ -13542,7 +13625,7 @@
 if(J.xC(z.nQ("getNumberOfColumns"),0)){z.V7("addColumn",["string","Name"])
 z.V7("addColumn",["number","Value"])}z.V7("removeRows",[0,z.nQ("getNumberOfRows")])
 for(y=J.RE(a),x=J.mY(y.gvc(a));x.G();){w=x.gl()
-v=J.It(y.t(a,w),"%")
+v=J.BQ(y.t(a,w),"%")
 if(0>=v.length)return H.e(v,0)
 u=[]
 C.Nm.FV(u,C.Nm.ez([w,H.RR(v[0],null)],P.En()))
@@ -13550,7 +13633,7 @@
 u.$builtinTypeInfo=[null]
 z.V7("addRow",[u])}}},
 Z4:{
-"^":"V32;wd,iw,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V34;wd,iw,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gXE:function(a){return a.wd},
 sXE:function(a,b){a.wd=this.ct(a,C.bJ,a.wd,b)},
 o4:[function(a,b){var z,y,x
@@ -13581,7 +13664,7 @@
 C.aXP.LX(a)
 C.aXP.XI(a)
 return a}}},
-V32:{
+V34:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,L,{
 "^":"",
@@ -13624,7 +13707,7 @@
 y.$builtinTypeInfo=[null]
 z.V7("addRow",[y])}}},
 qk:{
-"^":"V33;TO,Cn,LR,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V35;TO,Cn,LR,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 god:function(a){return a.TO},
 sod:function(a,b){a.TO=this.ct(a,C.rB,a.TO,b)},
 vV:[function(a,b){var z=a.TO
@@ -13639,8 +13722,8 @@
 a.Cn=null}},
 pA:[function(a,b){J.LE(a.TO).wM(b)},"$1","gvC",2,0,19,102],
 m4:[function(a,b){J.y9(a.TO).wM(b)},"$1","gDX",2,0,19,102],
-Fv:[function(a,b){return a.TO.cv("debug/pause").ml(new L.CV(a))},"$1","gX0",2,0,164,13],
-kf:[function(a,b){return a.TO.cv("resume").ml(new L.Vq(a))},"$1","gDQ",2,0,164,13],
+Fv:[function(a,b){return a.TO.cv("debug/pause").ml(new L.CV(a))},"$1","gX0",2,0,167,13],
+qW:[function(a,b){return a.TO.cv("resume").ml(new L.Vq(a))},"$1","gDQ",2,0,167,13],
 static:{Qtp:function(a){var z,y,x,w,v
 z=P.zV(J.UQ($.BY,"DataTable"),null)
 y=P.L5(null,null,null,P.qU,W.I0)
@@ -13659,7 +13742,7 @@
 C.hys.LX(a)
 C.hys.XI(a)
 return a}}},
-V33:{
+V35:{
 "^":"uL+Pi;",
 $isd3:true},
 LX:{
@@ -13675,15 +13758,15 @@
 y.S2=v
 w.u(0,"isStacked",!0)
 y.S2.bG.u(0,"connectSteps",!1)
-y.S2.bG.u(0,"vAxis",P.EF(["minValue",0,"maxValue",100],null,null))}y.S2.Am(0,y.KK)}if(z.Cn!=null)z.Cn=P.cH(P.ii(0,0,0,0,0,1),J.vc(z))},"$1",null,2,0,null,165,"call"],
+y.S2.bG.u(0,"vAxis",P.EF(["minValue",0,"maxValue",100],null,null))}y.S2.Am(0,y.KK)}if(z.Cn!=null)z.Cn=P.cH(P.ii(0,0,0,0,0,1),J.vc(z))},"$1",null,2,0,null,168,"call"],
 $isEH:true},
 CV:{
 "^":"TpZ:12;a",
-$1:[function(a){return J.LE(this.a.TO)},"$1",null,2,0,null,147,"call"],
+$1:[function(a){return J.LE(this.a.TO)},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 Vq:{
 "^":"TpZ:12;a",
-$1:[function(a){return J.LE(this.a.TO)},"$1",null,2,0,null,147,"call"],
+$1:[function(a){return J.LE(this.a.TO)},"$1",null,2,0,null,121,"call"],
 $isEH:true}}],["","",,Z,{
 "^":"",
 xh:{
@@ -13737,7 +13820,7 @@
 u=x.IN+=typeof v==="string"?v:H.d(v)
 x.IN=u+"\n"}}z.Rz(0,a)}},
 vj:{
-"^":"V34;Ly,cs,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V36;Ly,cs,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gIr:function(a){return a.Ly},
 ez:function(a,b){return this.gIr(a).$1(b)},
 sIr:function(a,b){a.Ly=this.ct(a,C.SR,a.Ly,b)},
@@ -13766,10 +13849,10 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.Yt.LX(a)
-C.Yt.XI(a)
+C.Du.LX(a)
+C.Du.XI(a)
 return a}}},
-V34:{
+V36:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,R,{
 "^":"",
@@ -13794,7 +13877,7 @@
 return a}}}}],["","",,M,{
 "^":"",
 CX:{
-"^":"V35;px,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V37;px,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gHt:function(a){return a.px},
 sHt:function(a,b){a.px=this.ct(a,C.EV,a.px,b)},
 vV:[function(a,b){return J.aT(a.px).cv(J.WB(J.eS(a.px),"/eval?expr="+P.jW(C.Fa,b,C.xM,!1)))},"$1","gZ2",2,0,109,110],
@@ -13816,7 +13899,7 @@
 C.fQ.LX(a)
 C.fQ.XI(a)
 return a}}},
-V35:{
+V37:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,N,{
 "^":"",
@@ -13849,8 +13932,8 @@
 v=J.Lp(v)}else N.QM("").js(w)}},
 X2A:function(a,b,c){return this.Y6(C.EkO,a,b,c)},
 kS:function(a){return this.X2A(a,null,null)},
-Da:function(a,b,c){return this.Y6(C.t4,a,b,c)},
-J4:function(a){return this.Da(a,null,null)},
+TF:function(a,b,c){return this.Y6(C.t4,a,b,c)},
+J4:function(a){return this.TF(a,null,null)},
 DH:function(a,b,c){return this.Y6(C.IF,a,b,c)},
 To:function(a){return this.DH(a,null,null)},
 r0:function(a,b,c){return this.Y6(C.nT,a,b,c)},
@@ -13881,10 +13964,10 @@
 v.QL(z,x,w)
 return v},
 $isEH:true},
-qV:{
+Ng:{
 "^":"a;oc>,P>",
 n:function(a,b){if(b==null)return!1
-return!!J.x(b).$isqV&&this.P===b.P},
+return!!J.x(b).$isNg&&this.P===b.P},
 C:function(a,b){var z=J.Vm(b)
 if(typeof z!=="number")return H.s(z)
 return this.P<z},
@@ -13902,8 +13985,8 @@
 return this.P-z},
 giO:function(a){return this.P},
 bu:[function(a){return this.oc},"$0","gCR",0,0,73],
-$isqV:true,
-static:{"^":"V7K,tmj,Enk,LkO,reI,pd,hlK,MHK,Uu,wC,uxc"}},
+$isNg:true,
+static:{"^":"V7K,tmj,Enk,LkO,reI,kH8,hlK,MHK,Uu,wC,uxc"}},
 HV:{
 "^":"a;OR<,G1>,iJ,Fl<,O0,kc>,I4<",
 bu:[function(a){return"["+this.OR.oc+"] "+this.iJ+": "+H.d(this.G1)},"$0","gCR",0,0,73],
@@ -13912,23 +13995,23 @@
 "^":"",
 E2:function(){var z,y
 N.QM("").sOR(C.IF)
-N.QM("").gSZ().yI(new F.e518())
+N.QM("").gSZ().yI(new F.e535())
 N.QM("").To("Starting Observatory")
 N.QM("").To("Loading Google Charts API")
 z=J.UQ($.Xw(),"google")
 y=$.Ib()
 z.V7("load",["visualization","1",P.jT(P.EF(["packages",["corechart","table"],"callback",P.mt(y.gv6(y))],null,null))])
-$.Ib().MM.ml(G.vN()).ml(new F.e519())},
-e518:{
-"^":"TpZ:167;",
+$.Ib().MM.ml(G.vN()).ml(new F.e536())},
+e535:{
+"^":"TpZ:170;",
 $1:[function(a){var z
 if(J.xC(a.gOR(),C.nT)){z=J.RE(a)
 if(J.co(z.gG1(a),"Error evaluating expression"))z=J.kE(z.gG1(a),"Can't assign to null: ")===!0||J.kE(z.gG1(a),"Expression is not assignable: ")===!0
 else z=!1}else z=!1
 if(z)return
-P.FL(a.gOR().oc+": "+a.gFl().bu(0)+": "+H.d(J.Oh(a)))},"$1",null,2,0,null,166,"call"],
+P.FL(a.gOR().oc+": "+a.gFl().bu(0)+": "+H.d(J.Oh(a)))},"$1",null,2,0,null,169,"call"],
 $isEH:true},
-e519:{
+e536:{
 "^":"TpZ:12;",
 $1:[function(a){var z,y,x
 N.QM("").To("Initializing Polymer")
@@ -13938,7 +14021,7 @@
 $isEH:true}}],["","",,N,{
 "^":"",
 qn:{
-"^":"V36;GC,OM,zv,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V38;GC,OM,zv,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 guc:function(a){return a.GC},
 suc:function(a,b){a.GC=this.ct(a,C.EP,a.GC,b)},
 god:function(a){return a.OM},
@@ -13988,7 +14071,7 @@
 C.po.LX(a)
 C.po.XI(a)
 return a}}},
-V36:{
+V38:{
 "^":"uL+Pi;",
 $isd3:true},
 FQ:{
@@ -13996,7 +14079,7 @@
 $1:[function(a){J.O8(this.a)},"$1",null,2,0,null,13,"call"],
 $isEH:true},
 I2:{
-"^":"V37;GC,on,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V39;GC,on,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 guc:function(a){return a.GC},
 suc:function(a,b){a.GC=this.ct(a,C.EP,a.GC,b)},
 gbe:function(a){return a.on},
@@ -14019,7 +14102,7 @@
 z=H.BU(H.Go(d,"$isbs").value,null,null)
 y=a.on
 if(y==null)return
-a.GC.TG(z,y)},"$3","gIf",6,0,105,2,106,107],
+a.GC.ZW(z,y)},"$3","gIf",6,0,105,2,106,107],
 d7:[function(a,b,c,d){var z,y
 z=H.BU(H.Go(d,"$isbs").value,null,null)
 y=a.on
@@ -14041,11 +14124,11 @@
 C.Ax.LX(a)
 C.Ax.XI(a)
 return a}}},
-V37:{
+V39:{
 "^":"uL+Pi;",
 $isd3:true},
 FB:{
-"^":"V38;lB,qV,on,OM,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V40;lB,qV,on,OM,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gbe:function(a){return a.on},
 sbe:function(a,b){a.on=this.ct(a,C.kB,a.on,b)},
 god:function(a){return a.OM},
@@ -14071,7 +14154,7 @@
 x=w.gFl()
 v=J.Vm(w)
 u=[]
-C.Nm.FV(u,C.Nm.ez([x.gGt(),x.gS6(),x.gIv()],P.En()))
+C.Nm.FV(u,C.Nm.ez([x.gGt(),x.gS6(),x.gBM()],P.En()))
 t=new P.GD(u)
 t.$builtinTypeInfo=[null]
 x=[]
@@ -14102,12 +14185,12 @@
 C.Mw.LX(a)
 C.Mw.XI(a)
 return a}}},
-V38:{
+V40:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,A,{
 "^":"",
 md:{
-"^":"V39;i4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V41;i4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 giC:function(a){return a.i4},
 siC:function(a,b){a.i4=this.ct(a,C.Ys,a.i4,b)},
 static:{DCi:function(a){var z,y,x,w
@@ -14124,14 +14207,14 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.kD.LX(a)
-C.kD.XI(a)
+C.aV.LX(a)
+C.aV.XI(a)
 return a}}},
-V39:{
+V41:{
 "^":"uL+Pi;",
 $isd3:true},
 Bm:{
-"^":"V40;KU,V4,Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V42;KU,V4,Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gPj:function(a){return a.KU},
 sPj:function(a,b){a.KU=this.ct(a,C.kV,a.KU,b)},
 gwp:function(a){return a.V4},
@@ -14157,11 +14240,11 @@
 C.IG.LX(a)
 C.IG.XI(a)
 return a}}},
-V40:{
+V42:{
 "^":"uL+Pi;",
 $isd3:true},
 Ya:{
-"^":"V41;KU,V4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V43;KU,V4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gPj:function(a){return a.KU},
 sPj:function(a,b){a.KU=this.ct(a,C.kV,a.KU,b)},
 gwp:function(a){return a.V4},
@@ -14181,14 +14264,14 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.cR.LX(a)
-C.cR.XI(a)
+C.nn.LX(a)
+C.nn.XI(a)
 return a}}},
-V41:{
+V43:{
 "^":"uL+Pi;",
 $isd3:true},
 Ww:{
-"^":"V42;rU,SB,Hq,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V44;rU,SB,Hq,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gFR:function(a){return a.rU},
 Ki:function(a){return this.gFR(a).$0()},
 LY:function(a,b){return this.gFR(a).$1(b)},
@@ -14200,7 +14283,7 @@
 VV:[function(a,b,c,d){var z=a.SB
 if(z===!0)return
 a.SB=this.ct(a,C.aP,z,!0)
-if(a.rU!=null)this.LY(a,this.gWd(a))},"$3","gzY",6,0,115,2,106,107],
+if(a.rU!=null)this.LY(a,this.gWd(a))},"$3","gzY",6,0,116,2,106,107],
 uq:[function(a){a.SB=this.ct(a,C.aP,a.SB,!1)},"$0","gWd",0,0,17],
 static:{ZC:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
@@ -14220,7 +14303,7 @@
 C.J7.LX(a)
 C.J7.XI(a)
 return a}}},
-V42:{
+V44:{
 "^":"uL+Pi;",
 $isd3:true},
 ye:{
@@ -14238,11 +14321,11 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.br.LX(a)
-C.br.XI(a)
+C.pl.LX(a)
+C.pl.XI(a)
 return a}}},
 G1:{
-"^":"V43;Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V45;Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 grZ:function(a){return a.Jo},
 srZ:function(a,b){a.Jo=this.ct(a,C.uk,a.Jo,b)},
 static:{Br:function(a){var z,y,x,w
@@ -14262,11 +14345,11 @@
 C.OKl.LX(a)
 C.OKl.XI(a)
 return a}}},
-V43:{
+V45:{
 "^":"uL+Pi;",
 $isd3:true},
 fl:{
-"^":"V44;Jo,iy,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V46;Jo,iy,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 grZ:function(a){return a.Jo},
 srZ:function(a,b){a.Jo=this.ct(a,C.uk,a.Jo,b)},
 god:function(a){return a.iy},
@@ -14276,7 +14359,7 @@
 if(z!=null)return J.Ds(z)
 else return""},
 su6:function(a,b){},
-static:{Du:function(a){var z,y,x,w
+static:{YtF:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
 y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
@@ -14293,11 +14376,11 @@
 C.RRl.LX(a)
 C.RRl.XI(a)
 return a}}},
-V44:{
+V46:{
 "^":"uL+Pi;",
 $isd3:true},
 UK:{
-"^":"V45;VW,Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V47;VW,Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gHt:function(a){return a.VW},
 sHt:function(a,b){a.VW=this.ct(a,C.EV,a.VW,b)},
 grZ:function(a){return a.Jo},
@@ -14319,11 +14402,11 @@
 C.xA.LX(a)
 C.xA.XI(a)
 return a}}},
-V45:{
+V47:{
 "^":"uL+Pi;",
 $isd3:true},
 wM:{
-"^":"V46;Au,Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V48;Au,Jo,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gRu:function(a){return a.Au},
 sRu:function(a,b){a.Au=this.ct(a,C.XA,a.Au,b)},
 grZ:function(a){return a.Jo},
@@ -14345,11 +14428,11 @@
 C.ic.LX(a)
 C.ic.XI(a)
 return a}}},
-V46:{
+V48:{
 "^":"uL+Pi;",
 $isd3:true},
 NK:{
-"^":"V47;rv,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V49;rv,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gRk:function(a){return a.rv},
 sRk:function(a,b){a.rv=this.ct(a,C.ld,a.rv,b)},
 static:{Xii:function(a){var z,y,x,w
@@ -14365,27 +14448,27 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.Mn.LX(a)
-C.Mn.XI(a)
+C.BJj.LX(a)
+C.BJj.XI(a)
 return a}}},
-V47:{
+V49:{
 "^":"uL+Pi;",
 $isd3:true},
 Zx:{
-"^":"V48;rv,Wx,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V50;rv,Wx,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gRk:function(a){return a.rv},
 sRk:function(a,b){a.rv=this.ct(a,C.ld,a.rv,b)},
 gBk:function(a){return a.Wx},
 sBk:function(a,b){a.Wx=this.ct(a,C.p8,a.Wx,b)},
-kf:[function(a,b){$.Kh.pZ(J.aT(a.Wx))
-return J.df(J.aT(a.Wx))},"$1","gDQ",2,0,164,13],
+qW:[function(a,b){$.Kh.pZ(J.aT(a.Wx))
+return J.df(J.aT(a.Wx))},"$1","gDQ",2,0,167,13],
 PyB:[function(a,b){$.Kh.pZ(J.aT(a.Wx))
-return J.UR(J.aT(a.Wx))},"$1","gLc",2,0,164,13],
+return J.UR(J.aT(a.Wx))},"$1","gLc",2,0,167,13],
 XQ:[function(a,b){$.Kh.pZ(J.aT(a.Wx))
-return J.MU(J.aT(a.Wx))},"$1","gqF",2,0,164,13],
+return J.MU(J.aT(a.Wx))},"$1","gqF",2,0,167,13],
 Cx:[function(a,b){$.Kh.pZ(J.aT(a.Wx))
-return J.Fy(J.aT(a.Wx))},"$1","gZp",2,0,164,13],
-cz:[function(a,b,c,d){J.V1(a.rv,a.Wx)},"$3","gTA",6,0,168,2,106,107],
+return J.Fy(J.aT(a.Wx))},"$1","gZp",2,0,167,13],
+cz:[function(a,b,c,d){J.V1(a.rv,a.Wx)},"$3","gTA",6,0,171,2,106,107],
 static:{yno:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -14402,12 +14485,64 @@
 C.L8.LX(a)
 C.L8.XI(a)
 return a}}},
-V48:{
+V50:{
 "^":"uL+Pi;",
-$isd3:true}}],["","",,V,{
+$isd3:true}}],["","",,L,{
+"^":"",
+qV:{
+"^":"V51;dV,qB,GI,wA,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+gWA:function(a){return a.dV},
+sWA:function(a,b){a.dV=this.ct(a,C.td,a.dV,b)},
+gIi:function(a){return a.qB},
+sIi:function(a,b){a.qB=this.ct(a,C.XM,a.qB,b)},
+gyK:function(a){return a.GI},
+syK:function(a,b){a.GI=this.ct(a,C.uO,a.GI,b)},
+gCF:function(a){return a.wA},
+sCF:function(a,b){a.wA=this.ct(a,C.tg,a.wA,b)},
+zs:[function(a,b){return J.aT(a.dV).cv(J.WB(J.eS(a.dV),"/retained")).ml(new L.rQ(a))},"$1","ghN",2,0,111,113],
+Cc:[function(a,b){return J.aT(a.dV).cv(J.WB(J.eS(a.dV),"/retaining_path?limit="+H.d(b))).ml(new L.ky(a))},"$1","gCI",2,0,111,32],
+rT:[function(a,b){return J.aT(a.dV).cv(J.WB(J.eS(a.dV),"/inbound_references?limit="+H.d(b))).ml(new L.WZ(a))},"$1","gi0",2,0,111,32],
+pA:[function(a,b){J.LE(a.dV).wM(b)},"$1","gvC",2,0,122,120],
+static:{P5f:function(a){var z,y,x,w
+z=P.L5(null,null,null,P.qU,W.I0)
+y=P.qU
+y=H.VM(new V.qC(P.YM(null,null,null,y,null),null,null),[y,null])
+x=P.Fl(null,null)
+w=P.Fl(null,null)
+a.wA=null
+a.f4=[]
+a.OD=!1
+a.kK=!1
+a.ZM=z
+a.ZQ=y
+a.qJ=x
+a.wy=w
+C.br.LX(a)
+C.br.XI(a)
+return a}}},
+V51:{
+"^":"uL+Pi;",
+$isd3:true},
+rQ:{
+"^":"TpZ:114;a",
+$1:[function(a){var z,y
+z=this.a
+y=H.BU(J.UQ(a,"valueAsString"),null,null)
+z.wA=J.NB(z,C.tg,z.wA,y)},"$1",null,2,0,null,96,"call"],
+$isEH:true},
+ky:{
+"^":"TpZ:153;a",
+$1:[function(a){var z=this.a
+z.qB=J.NB(z,C.XM,z.qB,a)},"$1",null,2,0,null,96,"call"],
+$isEH:true},
+WZ:{
+"^":"TpZ:153;a",
+$1:[function(a){var z=this.a
+z.GI=J.NB(z,C.uO,z.GI,a)},"$1",null,2,0,null,96,"call"],
+$isEH:true}}],["","",,V,{
 "^":"",
 F1:{
-"^":"V49;qC,i6=,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V52;qC,i6=,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gz2:function(a){return a.qC},
 sz2:function(a,b){a.qC=this.ct(a,C.VK,a.qC,b)},
 Es:function(a){var z,y,x
@@ -14438,7 +14573,7 @@
 C.YpE.LX(a)
 C.YpE.XI(a)
 return a}}},
-V49:{
+V52:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,Z,{
 "^":"",
@@ -14471,12 +14606,30 @@
 z=a.tB
 if(z==null){this.yM(a)
 return}a.Qf=P.cH(z,this.gPs(a))},"$0","gPs",0,0,17],
-wW:[function(a,b,c,d){this.gi6(a).Z6.Cz(b,c,d)},"$3","gCK",6,0,168,87,106,107],
-XD:[function(a,b){this.gi6(a).Z6
-return"#"+H.d(b)},"$1","gGs",2,0,169,170],
-Qb:[function(a,b){return G.mG(b)},"$1","gSs",2,0,171,172],
+wW:[function(a,b,c,d){this.gi6(a).Z6.Cz(b,c,d)},"$3","gCK",6,0,171,87,106,107],
+Gxe:[function(a,b){this.gi6(a).Z6
+return"#"+H.d(b)},"$1","gGs",2,0,172,173],
+Qb:[function(a,b){return G.mG(b)},"$1","gSs",2,0,174,175],
 Ze:[function(a,b){return G.Xz(b)},"$1","gbJ",2,0,14,15],
-YH:[function(a,b){return H.BU(b,null,null)},"$1","gIb",2,0,139,20],
+YH:[function(a,b){return H.BU(b,null,null)},"$1","gIb",2,0,145,20],
+Rms:[function(a,b,c){var z,y,x,w
+z=[]
+z.push(C.xB.j("'",0))
+for(y=J.GG(b),y=y.gA(y);y.G();){x=y.Ff
+w=J.x(x)
+if(w.n(x,"\n".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\n"))
+else if(w.n(x,"\r".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\r"))
+else if(w.n(x,"\u000c".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\f"))
+else if(w.n(x,"\u0008".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\b"))
+else if(w.n(x,"\t".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\t"))
+else if(w.n(x,"\u000b".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\v"))
+else if(w.n(x,"$".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\$"))
+else if(w.n(x,"\\".charCodeAt(0)))C.Nm.FV(z,new J.IA("\\\\"))
+else if(w.n(x,"'".charCodeAt(0)))C.Nm.FV(z,new J.IA("'"))
+else if(w.C(x,32))C.Nm.FV(z,new J.IA("\\u"+H.d(x)))
+else z.push(x)}if(c===!0)C.Nm.FV(z,new J.IA("..."))
+else z.push(C.xB.j("'",0))
+return P.HM(z)},function(a,b){return this.Rms(a,b,!1)},"hD","$2","$1","gRO",2,2,176,69,20,177],
 static:{ew:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -14519,7 +14672,7 @@
 x=H.VM(new P.Yp(z),[T.yj])
 if(y.YM>=4)H.vh(y.Pq())
 y.MW(x)
-return!0}return!1},"$0","gDx",0,0,125],
+return!0}return!1},"$0","gDx",0,0,131],
 gnz:function(a){var z,y
 z=a.Vg
 if(z!=null){y=z.iE
@@ -14566,7 +14719,7 @@
 z=new O.YC(z)
 return new P.yQ(null,null,null,null,new O.zI(z),new O.hw(z),null,null,null,null,null,null)},
 YC:{
-"^":"TpZ:173;a",
+"^":"TpZ:178;a",
 $2:function(a,b){var z=this.a
 if(z.a)return
 z.a=!0
@@ -14588,14 +14741,14 @@
 return this.f.$0()},"$0",null,0,0,null,"call"],
 $isEH:true},
 hw:{
-"^":"TpZ:174;UI",
+"^":"TpZ:179;UI",
 $4:[function(a,b,c,d){if(d==null)return d
 return new O.iu(this.UI,b,c,d)},"$4",null,8,0,null,26,27,28,30,"call"],
 $isEH:true},
 iu:{
 "^":"TpZ:12;bK,Gq,Rm,w3",
 $1:[function(a){this.bK.$2(this.Gq,this.Rm)
-return this.w3.$1(a)},"$1",null,2,0,null,175,"call"],
+return this.w3.$1(a)},"$1",null,2,0,null,180,"call"],
 $isEH:true}}],["","",,G,{
 "^":"",
 B5:function(a,b,c,d,e,f){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
@@ -14844,9 +14997,9 @@
 $.Oo=z}z.push(a)
 $.Nc=$.Nc+1
 y=P.L5(null,null,null,P.IN,P.a)
-for(z=this.gbx(a),z=$.mX().Me(0,z,new A.rv(!0,!1,!0,C.AP,!1,!1,C.fo,null)),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();){x=J.DA(z.Ff)
-w=$.cp().JE.II.t(0,x)
-if(w==null)H.vh(O.lA("getter \""+H.d(x)+"\" in "+this.bu(a)))
+for(z=this.gbx(a),z=$.mX().Me(0,z,new A.rv(!0,!1,!0,C.AP,!1,!1,C.bfK,null)),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();){x=J.DA(z.Ff)
+w=$.cp().xV.II.t(0,x)
+if(w==null)H.vh(O.Fm("getter \""+H.d(x)+"\" in "+this.bu(a)))
 y.u(0,x,w.$1(a))}this.srJ(a,y)},"$0","gFW",0,0,17],
 dJ:[function(a){if(this.grJ(a)!=null)this.srJ(a,null)},"$0","gEp",0,0,17],
 HC:function(a){var z,y
@@ -14854,7 +15007,7 @@
 if(this.grJ(a)==null||!this.gnz(a))return!1
 z.a=this.gxt(a)
 this.sxt(a,null)
-this.grJ(a).aN(0,new F.X6(z,a))
+this.grJ(a).aN(0,new F.D9(z,a))
 if(z.a==null)return!1
 y=this.gR9(a)
 z=H.VM(new P.Yp(z.a),[T.yj])
@@ -14866,7 +15019,7 @@
 if(this.gxt(a)==null)this.sxt(a,[])
 this.gxt(a).push(b)},
 $isd3:true},
-X6:{
+D9:{
 "^":"TpZ:81;a,b",
 $2:function(a,b){var z,y,x,w,v
 z=this.b
@@ -15057,7 +15210,7 @@
 if(x&&y.length!==0){x=H.VM(new P.Yp(y),[G.Zq])
 if(z.YM>=4)H.vh(z.Pq())
 z.MW(x)
-return!0}return!1},"$0","gL6",0,0,125],
+return!0}return!1},"$0","gL6",0,0,131],
 $iswn:true,
 static:{pT:function(a,b){var z=H.VM([],[b])
 return H.VM(new Q.wn(null,null,z,null,null),[b])},Oi:function(a,b,c){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
@@ -15198,7 +15351,7 @@
 gP:function(a){var z=this.bl(J.Vm(this.Os))
 this.XS=z
 return z},
-sP:function(a,b){J.ta(this.Os,b)},
+sP:function(a,b){J.Fc(this.Os,b)},
 fR:function(){return this.Os.fR()}}}],["","",,L,{
 "^":"",
 yfW:function(a,b){var z,y,x,w,v
@@ -15207,15 +15360,15 @@
 if(typeof z==="number"&&Math.floor(z)===z){if(!!J.x(a).$isWO&&J.J5(b,0)&&J.u6(b,J.q8(a)))return J.UQ(a,b)}else{z=b
 if(typeof z==="string")return J.UQ(a,b)
 else if(!!J.x(b).$isIN){z=a
-y=H.RB(z,"$isCo",[P.qU,null],"$asCo")
+y=H.RB(z,"$isHX",[P.qU,null],"$asHX")
 if(!y){z=a
 y=H.RB(z,"$isT8",[P.qU,null],"$asT8")
 z=y&&!C.Nm.tg(C.WK,b)}else z=!0
-if(z)return J.UQ(a,$.vu().JE.af.t(0,b))
+if(z)return J.UQ(a,$.vu().xV.af.t(0,b))
 try{z=a
 y=b
-x=$.cp().JE.II.t(0,y)
-if(x==null)H.vh(O.lA("getter \""+H.d(y)+"\" in "+H.d(z)))
+x=$.cp().xV.II.t(0,y)
+if(x==null)H.vh(O.Fm("getter \""+H.d(y)+"\" in "+H.d(z)))
 z=x.$1(z)
 return z}catch(w){if(!!J.x(H.Ru(w)).$isJS){z=J.bB(a)
 v=$.mX().NW(z,C.OV)
@@ -15227,23 +15380,23 @@
 z=b
 if(typeof z==="number"&&Math.floor(z)===z){if(!!J.x(a).$isWO&&J.J5(b,0)&&J.u6(b,J.q8(a))){J.kW(a,b,c)
 return!0}}else if(!!J.x(b).$isIN){z=a
-y=H.RB(z,"$isCo",[P.qU,null],"$asCo")
+y=H.RB(z,"$isHX",[P.qU,null],"$asHX")
 if(!y){z=a
 y=H.RB(z,"$isT8",[P.qU,null],"$asT8")
 z=y&&!C.Nm.tg(C.WK,b)}else z=!0
-if(z){J.kW(a,$.vu().JE.af.t(0,b),c)
+if(z){J.kW(a,$.vu().xV.af.t(0,b),c)
 return!0}try{$.cp().Cq(a,b,c)
 return!0}catch(x){if(!!J.x(H.Ru(x)).$isJS){z=J.bB(a)
 if(!$.mX().UK(z,C.OV))throw x}else throw x}}z=$.YLt()
 if(z.mL(C.EkO))z.kS("can't set "+H.d(b)+" in "+H.d(a))
 return!1},
 WR:{
-"^":"lg;HS,Lq,IE,zo,dR,vS,KZ",
+"^":"ARh;HS,Lq,IE,zo,dR,vS,KZ",
 gIi:function(a){return this.HS},
 sP:function(a,b){var z=this.HS
 if(z!=null)z.rL(this.Lq,b)},
 gDJ:function(){return 2},
-TR:function(a,b){return L.lg.prototype.TR.call(this,this,b)},
+TR:function(a,b){return L.ARh.prototype.TR.call(this,this,b)},
 Ej:function(a){this.IE=L.KJ(this,this.Lq)
 this.CG(!0)},
 U9:function(){this.vS=null
@@ -15270,7 +15423,7 @@
 for(y=this.T7,y=H.VM(new H.a7(y,y.length,0,null),[H.u3(y,0)]),x=!0;y.G();x=!1){w=y.Ff
 v=J.x(w)
 if(!!v.$isIN){if(!x)z.IN+="."
-u=$.vu().JE.af.t(0,w)
+u=$.vu().xV.af.t(0,w)
 z.IN+=typeof u==="string"?u:H.d(u)}else if(typeof w==="number"&&Math.floor(w)===w){v="["+H.d(w)+"]"
 z.IN+=v}else{v="[\""+J.JA(v.bu(w),"\"","\\\"")+"\"]"
 z.IN+=v}}return z.IN},"$0","gCR",0,0,73],
@@ -15351,7 +15504,7 @@
 $0:function(){return new H.VR("^[$_a-zA-Z]+[$_a-zA-Z0-9]*$",H.v4("^[$_a-zA-Z]+[$_a-zA-Z0-9]*$",!1,!0,!1),null,null)},
 $isEH:true},
 iF:{
-"^":"a;vc>,vH>,nl>,ep",
+"^":"a;vc>,vH>,nl*,ep",
 Xn:function(a){var z
 if(a==null)return"eof"
 switch(a){case 91:case 93:case 46:case 34:case 39:case 48:return H.eT([a])
@@ -15362,13 +15515,13 @@
 if(z)return"ident"
 if(49<=a&&a<=57)return"number"
 return"else"},
-ZW:function(){var z,y,x,w
+rXF:function(){var z,y,x,w
 z=this.nl
 if(z==null)return
 z=$.cx().B0(z)
 y=this.vc
 x=this.nl
-if(z)y.push($.vu().JE.T4.t(0,x))
+if(z)y.push($.vu().xV.T4.t(0,x))
 else{w=H.BU(x,10,new L.PD())
 y.push(w!=null?w:this.nl)}this.nl=null},
 mx:function(a,b){var z=this.nl
@@ -15387,7 +15540,7 @@
 this.nl=z==null?x:H.d(z)+x
 return!0}return!1},
 pI:function(a){var z,y,x,w,v,u,t,s,r,q,p
-z=U.LQ(J.OX(a),0,null,65533)
+z=U.LQ(J.GG(a),0,null,65533)
 for(y=z.length,x="beforePath";x!=null;){w=++this.vH
 if(w>=y)v=null
 else{if(w<0)return H.e(z,w)
@@ -15404,7 +15557,7 @@
 x=w.t(s,0)
 r=w.gB(s)>1?w.t(s,1):null
 q=J.x(r)
-if(q.n(r,"push")&&this.nl!=null)this.ZW()
+if(q.n(r,"push")&&this.nl!=null)this.rXF()
 if(q.n(r,"append")){if(w.gB(s)>2){w.t(s,2)
 q=!0}else q=!1
 if(q)p=w.t(s,2)
@@ -15416,12 +15569,12 @@
 $1:function(a){return},
 $isEH:true},
 nQ:{
-"^":"lg;IE,pu,vl,zo,dR,vS,KZ",
+"^":"ARh;IE,pu,vl,zo,dR,vS,KZ",
 gDJ:function(){return 3},
-TR:function(a,b){return L.lg.prototype.TR.call(this,this,b)},
+TR:function(a,b){return L.ARh.prototype.TR.call(this,this,b)},
 Ej:function(a){var z,y,x,w
 for(z=this.vl,y=z.length,x=0;x<y;x+=2){w=z[x]
-if(w!==C.aZ){z=$.rf
+if(w!==C.zr){z=$.rf
 if(z!=null){y=z.Ou
 y=y==null?w!=null:y!==w}else y=!0
 if(y){z=w==null?null:P.Ls(null,null,null,null)
@@ -15432,7 +15585,7 @@
 this.IE=null
 break}}this.CG(!this.pu)},
 U9:function(){var z,y,x,w
-for(z=0;y=this.vl,x=y.length,z<x;z+=2)if(y[z]===C.aZ){w=z+1
+for(z=0;y=this.vl,x=y.length,z<x;z+=2)if(y[z]===C.zr){w=z+1
 if(w>=x)return H.e(y,w)
 J.yd(y[w])}this.vl=null
 this.vS=null},
@@ -15448,13 +15601,13 @@
 YU:function(a){var z=this.KZ
 if(z===$.ljh||z===$.ls)throw H.b(P.w("Cannot add observers once started."))
 z=this.vl
-z.push(C.aZ)
+z.push(C.zr)
 z.push(a)
 if(!this.pu)return
 J.bi(this.vS,J.mu(a,new L.Zu(this)))},
 VC:function(a){var z,y,x,w,v
 for(z=0;y=this.vl,x=y.length,z<x;z+=2){w=y[z]
-if(w!==C.aZ){v=z+1
+if(w!==C.zr){v=z+1
 if(v>=x)return H.e(y,v)
 H.Go(y[v],"$isZl").I5(w,a)}}},
 CG:function(a){var z,y,x,w,v,u,t,s,r
@@ -15463,7 +15616,7 @@
 t=x+1
 if(t>=v)return H.e(w,t)
 s=w[t]
-if(u===C.aZ){H.Go(s,"$isAp")
+if(u===C.zr){H.Go(s,"$isAp")
 r=this.KZ===$.jq1?s.TR(0,new L.vI(this)):s.gP(s)}else r=H.Go(s,"$isZl").WK(u)
 if(a){J.kW(this.vS,C.jn.BU(x,2),r)
 continue}w=this.vS
@@ -15492,7 +15645,7 @@
 $isEH:true},
 iNc:{
 "^":"a;"},
-lg:{
+ARh:{
 "^":"Ap;",
 Yd:function(){return this.zo.$0()},
 d1:function(a){return this.zo.$1(a)},
@@ -15503,7 +15656,7 @@
 if(z===$.ljh||z===$.ls)throw H.b(P.w("Observer has already been opened."))
 if(X.na(b)>this.gDJ())throw H.b(P.u("callback should take "+this.gDJ()+" or fewer arguments"))
 this.zo=b
-this.dR=P.J(this.gDJ(),X.aW(b))
+this.dR=P.J(this.gDJ(),X.Zpg(b))
 this.Ej(0)
 this.KZ=$.ljh
 return this.vS},
@@ -15535,7 +15688,7 @@
 if(b==null?z==null:b===z)this.cE.h(0,c)
 z=J.x(b)
 if(!!z.$iswn)this.hr(b.gXF())
-if(!!z.$isd3)this.hr(z.gqh(b))},"$2","gUu",4,0,176,96,177],
+if(!!z.$isd3)this.hr(z.gqh(b))},"$2","gUu",4,0,181,96,182],
 hr:function(a){var z=this.YR
 if(z==null){z=P.YM(null,null,null,null,null)
 this.YR=z}if(!z.NZ(0,a))this.YR.u(0,a,a.yI(this.gCP()))},
@@ -15549,7 +15702,7 @@
 if(this.b2(a))return
 for(z=this.JD,y=C.Nm.tt(z,!1),y=H.VM(new H.a7(y,y.length,0,null),[H.u3(y,0)]);y.G();){x=y.Ff
 if(x.gB9())x.VC(this.gUu(this))}for(z=C.Nm.tt(z,!1),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();){x=z.Ff
-if(x.gB9())x.mX()}},"$1","gCP",2,0,19,178],
+if(x.gB9())x.mX()}},"$1","gCP",2,0,19,183],
 static:{"^":"rf",KJ:function(a,b){var z,y
 z=$.rf
 if(z!=null){y=z.Ou
@@ -15571,11 +15724,12 @@
 return x}return a},"$1","Ft",2,0,12,20],
 Fk:{
 "^":"TpZ:81;a",
-$2:[function(a,b){this.a.u(0,R.tB(a),R.tB(b))},"$2",null,4,0,null,135,66,"call"],
+$2:[function(a,b){this.a.u(0,R.tB(a),R.tB(b))},"$2",null,4,0,null,141,66,"call"],
 $isEH:true}}],["","",,A,{
 "^":"",
-ec:function(a,b,c){if(a==null||$.lx()==null)return
-$.lx().V7("shimStyling",[a,b,c])},
+ec:function(a,b,c){var z=$.lx()
+if(z==null||$.Ep()!==!0)return
+z.V7("shimStyling",[a,b,c])},
 q3:function(a){var z,y,x,w,v
 if(a==null)return""
 if($.UG)return""
@@ -15583,7 +15737,7 @@
 z=w.gmH(a)
 if(J.xC(z,""))z=w.gQg(a).dA.getAttribute("href")
 try{w=new XMLHttpRequest()
-C.W3.eo(w,"GET",z,!1)
+C.W3.i3(w,"GET",z,!1)
 w.send()
 w=w.responseText
 return w}catch(v){w=H.Ru(v)
@@ -15592,7 +15746,7 @@
 $.Is().J4("failed to XHR stylesheet text href=\""+H.d(z)+"\" error: "+H.d(y)+", trace: "+H.d(x))
 return""}else throw v}},
 M8:[function(a){var z,y
-z=$.vu().JE.af.t(0,a)
+z=$.vu().xV.af.t(0,a)
 if(z==null)return!1
 y=J.Qe(z)
 return y.C1(z,"Changed")&&!y.n(z,"attributeChanged")},"$1","hU",2,0,64,65],
@@ -15609,7 +15763,8 @@
 x=b.firstChild
 if(b===document.head){w=W.vD(document.head.querySelectorAll("style[element]"),null)
 if(w.gor(w))x=J.rk(C.t5.grZ(w.jt))}b.insertBefore(z,x)},
-YK:function(){if($.UG){A.X1($.M6,!0)
+YK:function(){A.c4()
+if($.UG){A.X1($.M6,!0)
 return $.X3}var z=$.X3.iT(O.Ht())
 z.Gr(new A.mS())
 return z},
@@ -15624,7 +15779,7 @@
 z.setAttribute("name","auto-binding-dart")
 z.setAttribute("extends","template")
 J.UQ($.Dw(),"init").qP([],z)
-for(y=H.VM(new H.a7(a,88,0,null),[H.u3(a,0)]);y.G();)y.Ff.$0()},
+for(y=H.VM(new H.a7(a,91,0,null),[H.u3(a,0)]);y.G();)y.Ff.$0()},
 JP:function(){var z,y,x,w
 z=$.Xw()
 if(J.UQ(z,"Platform")==null)throw H.b(P.w("platform.js, dart_support.js must be loaded at the top of your application, before any other scripts or HTML imports that use polymer. Putting these two script tags at the top of your <head> element should address this issue: <script src=\"packages/web_components/platform.js\"></script> and  <script src=\"packages/web_components/dart_support.js\"></script>."))
@@ -15635,8 +15790,16 @@
 w=J.UQ($.Dw(),"register")
 if(w==null)throw H.b(P.w("polymer.js must expose \"register\" function on polymer-element to enable polymer.dart to interoperate."))
 J.kW($.Dw(),"register",P.mt(new A.k2(x,w)))},
+c4:function(){var z,y,x
+$.RL=!0
+z=J.UQ($.Xw(),"logFlags")
+y=[$.dn(),$.vo(),$.iX(),$.Lu(),$.REM(),$.lg()]
+x=N.QM("polymer")
+if(!H.Ck(y,new A.j0(z))){x.sOR(C.oOA)
+return}H.VM(new H.U5(y,new A.j0N(z)),[H.u3(H.VM(new H.wb(),[H.u3(y,0)]),0)]).aN(0,new A.MZ6())
+x.gSZ().yI(new A.mqr())},
 So:{
-"^":"a;FL>,t5>,Jh<,oc>,Q7<,Md<,eJ>,Gl<,PH<,ix<,y0,G9,wX>,mR<,Sg,vT",
+"^":"a;FL>,t5>,Jh<,oc>,Q7<,Md<,eJ>,Gl<,PH<,ix<,y0,G9,wX>,mR<,WV,vT",
 gZf:function(){var z,y
 z=J.yR(this.FL,"template")
 if(z!=null)y=J.f5(!!J.x(z).$isvy?z:M.Xi(z))
@@ -15649,7 +15812,7 @@
 Cw:function(a){var z=$.Kc()
 if(z==null)return
 J.UQ(z,"urlResolver").V7("resolveDom",[a])},
-Zw:function(a){var z,y,x,w,v,u,t,s,r
+Zw:function(a){var z,y,x,w,v,u,t,s,r,q
 if(a!=null){if(a.gQ7()!=null){z=a.gQ7()
 y=P.L5(null,null,null,null,null)
 y.FV(0,z)
@@ -15661,17 +15824,18 @@
 x=J.Vs(this.FL).dA.getAttribute("attributes")
 if(x!=null)for(y=C.xB.Fr(x,$.FF()),y=H.VM(new H.a7(y,y.length,0,null),[H.u3(y,0)]),w=this.oc;y.G();){v=J.rr(y.Ff)
 if(v==="")continue
-u=$.vu().JE.T4.t(0,v)
-t=L.hk([u])
-s=this.Q7
-if(s!=null&&s.NZ(0,t))continue
-r=$.mX().CV(z,u)
-if(r==null||r.gUA()||J.EMK(r)===!0){window
-s="property for attribute "+v+" of polymer-element name="+H.d(w)+" not found."
-if(typeof console!="undefined")console.warn(s)
-continue}s=this.Q7
-if(s==null){s=P.Fl(null,null)
-this.Q7=s}s.u(0,t,r)}},
+u=$.vu().xV.T4.t(0,v)
+t=u!=null
+if(t){s=L.hk([u])
+r=this.Q7
+if(r!=null&&r.NZ(0,s))continue
+q=$.mX().CV(z,u)}else{q=null
+s=null}if(!t||q==null||q.gUA()||J.cL(q)===!0){window
+t="property for attribute "+v+" of polymer-element name="+H.d(w)+" not found."
+if(typeof console!="undefined")console.warn(t)
+continue}t=this.Q7
+if(t==null){t=P.Fl(null,null)
+this.Q7=t}t.u(0,s,q)}},
 en:function(a){var z,y,x,w,v
 for(z=$.mX().Me(0,a,C.V4),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();){y=z.Ff
 x=J.RE(y)
@@ -15687,14 +15851,14 @@
 if(w.Vr(0,new A.Da())){w=this.ix
 if(w==null){w=P.Ls(null,null,null,null)
 this.ix=w}x=x.goc(y)
-w.h(0,$.vu().JE.af.t(0,x))}}},
+w.h(0,$.vu().xV.af.t(0,x))}}},
 Vk:function(){var z,y
 z=P.L5(null,null,null,P.qU,P.a)
 this.PH=z
 y=this.Jh
 if(y!=null)z.FV(0,y.gPH())
 J.Vs(this.FL).aN(0,new A.EB(this))},
-W3:function(a){J.Vs(this.FL).aN(0,new A.BO(a))},
+W3:function(a){J.Vs(this.FL).aN(0,new A.Y1(a))},
 ka:function(){var z=this.Bg("link[rel=stylesheet]")
 this.y0=z
 for(z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();)J.Mp(z.Ff)},
@@ -15722,7 +15886,7 @@
 Bg:function(a){return this.Wz(a,null)},
 ds:function(a){var z,y,x,w,v,u
 z=P.p9("")
-y=new A.Vi("[polymer-scope="+a+"]")
+y=new A.ui("[polymer-scope="+a+"]")
 for(x=this.y0,x.toString,x=H.VM(new H.U5(x,y),[H.u3(H.VM(new H.wb(),[H.u3(x,0)]),0)]),x=H.VM(new H.vG(J.mY(x.Hb),x.Oh),[H.u3(x,0)]),w=x.CL;x.G();){v=A.q3(w.gl())
 u=z.IN+=typeof v==="string"?v:H.d(v)
 z.IN=u+"\n\n"}for(x=this.G9,x.toString,x=H.VM(new H.U5(x,y),[H.u3(H.VM(new H.wb(),[H.u3(x,0)]),0)]),x=H.VM(new H.vG(J.mY(x.Hb),x.Oh),[H.u3(x,0)]),y=x.CL;x.G();){v=J.dY(y.gl())
@@ -15739,7 +15903,7 @@
 if(this.eJ==null)this.eJ=P.YM(null,null,null,null,null)
 x=J.RE(y)
 w=x.goc(y)
-v=$.vu().JE.af.t(0,w)
+v=$.vu().xV.af.t(0,w)
 w=J.U6(v)
 v=w.Nj(v,0,J.bI(w.gB(v),7))
 this.eJ.u(0,L.hk(v),[x.goc(y)])}},
@@ -15762,7 +15926,7 @@
 r=J.zH(s)
 r=$.mX().xs(u,r)
 u=r}else u=!0
-if(u){x.u(0,t,v.gfL())
+if(u){x.u(0,t,v.gXt())
 z.u(0,t,w)}}},
 $isSo:true,
 static:{"^":"Kb"}},
@@ -15778,7 +15942,7 @@
 "^":"TpZ:81;a",
 $2:function(a,b){if(C.pv.NZ(0,a)!==!0&&!J.co(a,"on-"))this.a.PH.u(0,a,b)},
 $isEH:true},
-BO:{
+Y1:{
 "^":"TpZ:81;a",
 $2:function(a,b){var z,y,x
 z=J.Qe(a)
@@ -15790,7 +15954,7 @@
 "^":"TpZ:12;",
 $1:function(a){return J.Vs(a).dA.hasAttribute("polymer-scope")!==!0},
 $isEH:true},
-Vi:{
+ui:{
 "^":"TpZ:12;a",
 $1:function(a){return J.wK(a,this.a)},
 $isEH:true},
@@ -15799,7 +15963,7 @@
 $0:function(){return[]},
 $isEH:true},
 Tj:{
-"^":"TpZ:179;a",
+"^":"TpZ:184;a",
 $2:function(a,b){this.a.u(0,H.d(a).toLowerCase(),b)},
 $isEH:true},
 HH:{
@@ -15812,7 +15976,7 @@
 return this.Mn.op(a,b,c)},
 static:{"^":"rd0,QPA"}},
 BG9:{
-"^":"VE+d23;"},
+"^":"vE+d23;"},
 d23:{
 "^":"a;",
 XB:function(a){var z
@@ -15840,28 +16004,29 @@
 y=x}if(!!J.x(y).$iszs){y=J.x(a)
 if(!!y.$isDG4){w=y.gey(a)
 if(w==null)w=J.UQ(P.XY(a),"detail")}else w=null
-y=y.gCa(a)
+y=y.gF0(a)
 z=z.a
 J.bH(z,z,this.d,[a,w,y])}else throw H.b(P.w("controller "+H.d(y)+" is not a Dart polymer-element."))},"$1",null,2,0,null,2,"call"],
 $isEH:true},
 liz:{
-"^":"TpZ:183;a,b,c",
-$3:[function(a,b,c){var z,y,x,w
+"^":"TpZ:188;a,b,c",
+$3:[function(a,b,c){var z,y,x
 z=this.c
-y=this.b.Z8(null,b,z)
-x=J.Jw(b).t(0,this.a.a)
-w=H.VM(new W.Ov(0,x.bi,x.fA,W.aF(y),x.el),[H.u3(x,0)])
-w.DN()
+y=P.mt(new A.kD($.X3.mS(this.b.Z8(null,b,z))))
+x=this.a
+$.tNi().V7("addEventListener",[b,x.a,y])
 if(c===!0)return
-return new A.zIs(w,z)},"$3",null,6,0,null,180,181,182,"call"],
+return new A.zIs(z,b,x.a,y)},"$3",null,6,0,null,185,186,187,"call"],
+$isEH:true},
+kD:{
+"^":"TpZ:81;d",
+$2:[function(a,b){return this.d.$1(b)},"$2",null,4,0,null,13,2,"call"],
 $isEH:true},
 zIs:{
-"^":"Ap;Sx,ED",
+"^":"Ap;ED,d9,dF,Xj",
 gP:function(a){return"{{ "+this.ED+" }}"},
 TR:function(a,b){return"{{ "+this.ED+" }}"},
-xO:function(a){var z=this.Sx
-if(z!=null){z.Gv()
-this.Sx=null}}},
+xO:function(a){$.tNi().V7("removeEventListener",[this.d9,this.dF,this.Xj])}},
 xn:{
 "^":"iv;vn<",
 $isxn:true},
@@ -15910,19 +16075,19 @@
 y="Attributes on "+H.d(this.gRT(a))+" were data bound prior to Polymer upgrading the element. This may result in incorrect binding types."
 if(typeof console!="undefined")console.warn(y)}this.Ec(a)
 y=this.gJ8(a)
-if(!J.xC($.Ks().t(0,y),!0)||$.Ep()===!0)this.rf(a)},
+if(!J.xC($.Ks().t(0,y),!0))this.rf(a)},
 Ec:function(a){var z,y
 if(a.IX!=null){window
 z="Element already prepared: "+H.d(this.gRT(a))
 if(typeof console!="undefined")console.warn(z)
 return}a.n7=P.XY(a)
 z=this.gRT(a)
-a.IX=$.vE().t(0,z)
+a.IX=$.w3G().t(0,z)
 this.jM(a)
 z=a.MJ
 if(z!=null){y=this.gnu(a)
 z.toString
-L.lg.prototype.TR.call(J.x(z),z,y)}if(a.IX.gQ7()!=null)this.gqh(a).yI(this.gLj(a))
+L.ARh.prototype.TR.call(J.x(z),z,y)}if(a.IX.gQ7()!=null)this.gqh(a).yI(this.gLj(a))
 this.oR(a)
 this.xL(a)
 this.Uc(a)},
@@ -15931,7 +16096,7 @@
 this.bT(a)
 this.Qs(a,a.IX)
 this.gQg(a).Rz(0,"unresolved")
-$.zG().To(new A.pN(a))
+$.lg().To(new A.pN(a))
 this.I9(a)},
 I9:function(a){},
 Es:function(a){if(a.IX==null)throw H.b(P.w("polymerCreated was not called for custom element "+H.d(this.gRT(a))+", this should normally be done in the .created() if Polymer is used as a mixin."))
@@ -15955,12 +16120,10 @@
 x=!!J.x(b).$isvy?b:M.Xi(b)
 w=J.dv(x,a,y==null&&J.qy(x)==null?J.v7(a.IX):y)
 v=a.f4
-u=$.Tn().t(0,w)
+u=$.nR().t(0,w)
 C.Nm.FV(v,u!=null?u.gdn():u)
 z.appendChild(w)
 this.lj(a,z)
-v=$.LL()
-if(v!=null)v.V7("register",[z])
 return z},
 lj:function(a,b){var z,y,x
 if(b==null)return
@@ -15982,7 +16145,7 @@
 x=J.x(v)
 u=Z.fd(c,w,(x.n(v,C.AP)||x.n(v,C.wG))&&w!=null?J.bB(w):v)
 if(u==null?w!=null:u!==w){y=y.goc(z)
-$.cp().Cq(a,y,u)}},"$2","gCg",4,0,184],
+$.cp().Cq(a,y,u)}},"$2","gCg",4,0,189],
 B2:function(a,b){var z=a.IX.gMd()
 if(z==null)return
 return z.t(0,b)},
@@ -16003,7 +16166,7 @@
 if(J.xC(J.UQ(J.UQ($.Xw(),"Platform"),"enableBindingsReflection"),!0)&&x!=null){if(J.QE(M.Xi(a))==null){w=P.Fl(null,null)
 J.CS(M.Xi(a),w)}J.kW(J.QE(M.Xi(a)),b,x)}v=a.IX.gix()
 y=y.goc(z)
-u=$.vu().JE.af.t(0,y)
+u=$.vu().xV.af.t(0,y)
 if(v!=null&&v.tg(0,u))this.QH(a,u)
 return x}},
 lL:function(a){return this.rf(a)},
@@ -16037,16 +16200,16 @@
 for(x=H.VM(new P.fG(z),[H.u3(z,0)]),w=x.ZD,x=H.VM(new P.EQ(w,w.Nm(),0,null),[H.u3(x,0)]);x.G();){v=x.fD
 y.WX(a,v)
 this.j6(a,v,v.WK(a),null)}}},
-FQx:[function(a,b,c,d){J.Me(c,new A.OaD(a,b,c,d,J.q1(a.IX),P.Rd(null,null,null,null)))},"$3","gnu",6,0,185],
+FQx:[function(a,b,c,d){J.Me(c,new A.OaD(a,b,c,d,J.q1(a.IX),P.Rd(null,null,null,null)))},"$3","gnu",6,0,190],
 p7:[function(a,b){var z,y,x,w
 for(z=J.mY(b),y=a.qJ;z.G();){x=z.gl()
 if(!J.x(x).$isqI)continue
 w=x.oc
 if(y.t(0,w)!=null)continue
-this.Dt(a,w,x.zZ,x.jL)}},"$1","gLj",2,0,186,178],
+this.Dt(a,w,x.zZ,x.jL)}},"$1","gLj",2,0,191,183],
 Dt:function(a,b,c,d){var z,y
 $.REM().To(new A.qW(a,b,c,d))
-z=$.vu().JE.af.t(0,b)
+z=$.vu().xV.af.t(0,b)
 y=a.IX.gix()
 if(y!=null&&y.tg(0,z))this.QH(a,z)},
 j6:function(a,b,c,d){var z,y,x,w,v
@@ -16064,8 +16227,8 @@
 hq:function(a,b,c,d){if(d==null?c==null:d===c)return
 this.Dt(a,b,c,d)},
 hO:function(a,b,c,d){var z,y,x,w,v,u,t,s,r,q
-z=$.cp().JE.II.t(0,b)
-if(z==null)H.vh(O.lA("getter \""+H.d(b)+"\" in "+this.bu(a)))
+z=$.cp().xV.II.t(0,b)
+if(z==null)H.vh(O.Fm("getter \""+H.d(b)+"\" in "+this.bu(a)))
 y=z.$1(a)
 x=a.qJ.t(0,b)
 if(x==null){w=J.RE(c)
@@ -16073,9 +16236,9 @@
 v=new A.lK(a,b,c,null,null)
 v.Sx=this.gqh(a).k0(v.gou(),null,null,!1)
 w=J.mu(c,v.gew())
-v.SS=w
-u=$.cp().JE.F8.t(0,b)
-if(u==null)H.vh(O.lA("setter \""+H.d(b)+"\" in "+this.bu(a)))
+v.RP=w
+u=$.cp().xV.F8.t(0,b)
+if(u==null)H.vh(O.Fm("setter \""+H.d(b)+"\" in "+this.bu(a)))
 u.$2(a,w)
 a.f4.push(v)
 return v}x.mn=c
@@ -16095,7 +16258,7 @@
 hH:function(a,b,c){return this.hO(a,b,c,!1)},
 yO:function(a,b){var z=a.IX.gGl().t(0,b)
 if(z==null)return
-return T.yM().$3$globals(T.EPS().$1(z),a,J.v7(a.IX).Mn.nF)},
+return T.yM().$3$globals(T.u5().$1(z),a,J.v7(a.IX).Mn.nF)},
 bT:function(a){var z,y,x,w,v,u,t,s
 z=a.IX.gGl()
 for(v=J.mY(J.iY(z)),u=a.qJ;v.G();){y=v.gl()
@@ -16127,15 +16290,15 @@
 return}return this.hO(a,b,c,!0)},
 Uc:function(a){var z=a.IX.gmR()
 if(z.gl0(z))return
-$.mI().J4(new A.SX(a,z))
+$.vo().J4(new A.SX(a,z))
 z.aN(0,new A.Jys(a))},
 ea:function(a,b,c,d){var z,y,x
-z=$.mI()
+z=$.vo()
 z.To(new A.od(a,c))
-if(!!J.x(c).$isEH){y=X.aW(c)
+if(!!J.x(c).$isEH){y=X.Zpg(c)
 if(y===-1)z.j2("invalid callback: expected callback of 0, 1, 2, or 3 arguments")
 C.Nm.sB(d,y)
-H.eC(c,d,P.Te(null))}else if(typeof c==="string"){x=$.vu().JE.T4.t(0,c)
+H.eC(c,d,P.Te(null))}else if(typeof c==="string"){x=$.vu().xV.T4.t(0,c)
 $.cp().Ck(b,x,d,!0,null)}else z.j2("invalid callback")
 z.J4(new A.cB(a,c))},
 rW:function(a,b){var z
@@ -16143,7 +16306,7 @@
 $.Kc().nQ("flush")
 z=window
 C.Ui.Wq(z)
-return C.Ui.ne(z,W.aF(b))},
+return C.Ui.ne(z,W.Yt(b))},
 SE:function(a,b,c,d,e,f){var z=W.Q8(b,!0,!0,e)
 this.Ph(a,z)
 return z},
@@ -16217,7 +16380,7 @@
 "^":"TpZ:12;e,f,UI",
 $1:[function(a){var z,y,x,w
 for(z=J.mY(this.UI),y=this.e,x=this.f;z.G();){w=z.gl()
-$.cp().Ck(y,w,[x],!0,null)}},"$1",null,2,0,null,187,"call"],
+$.cp().Ck(y,w,[x],!0,null)}},"$1",null,2,0,null,192,"call"],
 $isEH:true},
 aM:{
 "^":"TpZ:76;a,b,c",
@@ -16233,10 +16396,8 @@
 $isEH:true},
 Jys:{
 "^":"TpZ:81;c",
-$2:function(a,b){var z,y
-z=this.c
-y=J.Jw(z).t(0,a)
-H.VM(new W.Ov(0,y.bi,y.fA,W.aF(J.v7(z.IX).Z8(z,z,b)),y.el),[H.u3(y,0)]).DN()},
+$2:function(a,b){var z=this.c
+$.tNi().V7("addEventListener",[z,a,$.X3.mS(J.v7(z.IX).Z8(z,z,b))])},
 $isEH:true},
 od:{
 "^":"TpZ:76;a,b",
@@ -16247,21 +16408,21 @@
 $0:[function(){return"<<< ["+H.d(J.RI(this.c))+"]: dispatch "+H.d(this.d)},"$0",null,0,0,null,"call"],
 $isEH:true},
 lK:{
-"^":"Ap;I6,ko,q0,Sx,SS",
-z9N:[function(a){this.SS=a
+"^":"Ap;I6,ko,q0,Sx,RP",
+z9N:[function(a){this.RP=a
 $.cp().Cq(this.I6,this.ko,a)},"$1","gew",2,0,19,60],
 TZ:[function(a){var z,y,x,w,v
 for(z=J.mY(a),y=this.ko;z.G();){x=z.gl()
 if(!!J.x(x).$isqI&&J.xC(x.oc,y)){z=this.I6
-w=$.cp().JE.II.t(0,y)
-if(w==null)H.vh(O.lA("getter \""+H.d(y)+"\" in "+J.AG(z)))
+w=$.cp().xV.II.t(0,y)
+if(w==null)H.vh(O.Fm("getter \""+H.d(y)+"\" in "+J.AG(z)))
 v=w.$1(z)
-z=this.SS
-if(z==null?v!=null:z!==v)J.ta(this.q0,v)
-return}}},"$1","gou",2,0,186,178],
+z=this.RP
+if(z==null?v!=null:z!==v)J.Fc(this.q0,v)
+return}}},"$1","gou",2,0,191,183],
 TR:function(a,b){return J.mu(this.q0,b)},
 gP:function(a){return J.Vm(this.q0)},
-sP:function(a,b){J.ta(this.q0,b)
+sP:function(a,b){J.Fc(this.q0,b)
 return b},
 xO:function(a){var z=this.Sx
 if(z!=null){z.Gv()
@@ -16286,7 +16447,7 @@
 this.ek=b
 z=window
 C.Ui.Wq(z)
-this.lS=C.Ui.ne(z,W.aF(new A.K3(this)))},
+this.lS=C.Ui.ne(z,W.Yt(new A.K3(this)))},
 nY:function(a){var z,y
 z=this.lS
 if(z!=null){y=window
@@ -16313,10 +16474,10 @@
 return},"$0",null,0,0,null,"call"],
 $isEH:true},
 k2:{
-"^":"TpZ:190;a,b",
+"^":"TpZ:195;a,b",
 $3:[function(a,b,c){var z=$.Ej().t(0,b)
-if(z!=null)return this.a.Gr(new A.zR(a,b,z,$.vE().t(0,c)))
-return this.b.qP([b,c],a)},"$3",null,6,0,null,188,58,189,"call"],
+if(z!=null)return this.a.Gr(new A.zR(a,b,z,$.w3G().t(0,c)))
+return this.b.qP([b,c],a)},"$3",null,6,0,null,193,58,194,"call"],
 $isEH:true},
 zR:{
 "^":"TpZ:76;c,d,e,f",
@@ -16329,7 +16490,7 @@
 u=$.Ak()
 t=P.Fl(null,null)
 v=new A.So(z,x,w,y,null,null,null,v,null,null,null,null,u,t,null,null)
-$.vE().u(0,y,v)
+$.w3G().u(0,y,v)
 v.Zw(w)
 s=v.Q7
 if(s!=null)v.Md=v.jq(s)
@@ -16384,6 +16545,22 @@
 $0:function(){var z=J.UQ(P.XY(document.createElement("polymer-element",null)),"__proto__")
 return!!J.x(z).$isKV?P.XY(z):z},
 $isEH:true},
+j0:{
+"^":"TpZ:12;a",
+$1:function(a){return J.xC(J.UQ(this.a,J.DA(a)),!0)},
+$isEH:true},
+j0N:{
+"^":"TpZ:12;b",
+$1:function(a){return!J.xC(J.UQ(this.b,J.DA(a)),!0)},
+$isEH:true},
+MZ6:{
+"^":"TpZ:12;",
+$1:function(a){a.sOR(C.oOA)},
+$isEH:true},
+mqr:{
+"^":"TpZ:12;",
+$1:[function(a){P.FL(a)},"$1",null,2,0,null,169,"call"],
+$isEH:true},
 Zw:{
 "^":"a;RT,VB,I6,mn",
 xz:[function(a){var z,y,x,w
@@ -16397,10 +16574,10 @@
 if(z!=null)z.fR()
 return this.VB},
 sP:function(a,b){var z=this.mn
-if(z!=null)J.ta(z,b)
+if(z!=null)J.Fc(z,b)
 else this.xz(b)},
 bu:[function(a){var z,y
-z=$.vu().JE.af.t(0,this.RT)
+z=$.vu().xV.af.t(0,this.RT)
 y=this.mn==null?"(no-binding)":"(with-binding)"
 return"["+H.d(new H.cu(H.wO(this),null))+": "+J.AG(this.I6)+"."+H.d(z)+": "+H.d(this.VB)+" "+y+"]"},"$0","gCR",0,0,76]}}],["","",,Y,{
 "^":"",
@@ -16417,7 +16594,7 @@
 this.kR(a)
 a.Hf=M.Xi(a)
 z=T.Mo(null,C.qY)
-J.D4(a.Hf,new Y.zp(a,z,null))
+J.D4(a.Hf,new Y.oM(a,z,null))
 $.j6().MM.ml(new Y.lkK(a))},
 $isDT:true,
 $isvy:true,
@@ -16462,7 +16639,7 @@
 y.lj(z,z.parentNode)
 y.ZB(z,"template-bound")},"$1",null,2,0,null,13,"call"],
 $isEH:true},
-zp:{
+oM:{
 "^":"Li;dq,Mn,oe",
 XB:function(a){return this.dq}}}],["","",,Z,{
 "^":"",
@@ -16518,14 +16695,14 @@
 return z},"$1","Bn",2,0,52,66],
 IK:{
 "^":"TpZ:12;a",
-$1:[function(a){return J.xC(J.UQ(this.a,a),!0)},"$1",null,2,0,null,135,"call"],
+$1:[function(a){return J.xC(J.UQ(this.a,a),!0)},"$1",null,2,0,null,141,"call"],
 $isEH:true},
 k9:{
 "^":"TpZ:12;a",
-$1:[function(a){return H.d(a)+": "+H.d(J.UQ(this.a,a))},"$1",null,2,0,null,135,"call"],
+$1:[function(a){return H.d(a)+": "+H.d(J.UQ(this.a,a))},"$1",null,2,0,null,141,"call"],
 $isEH:true},
 QB:{
-"^":"VE;OH,nF,R3,SY,oe",
+"^":"vE;OH,nF,R3,SY,oe",
 op:function(a,b,c){var z,y,x
 z={}
 y=T.OD(a,null).oK()
@@ -16572,33 +16749,33 @@
 y=H.VM(new P.qo(null),[P.qU])
 x=P.L5(null,null,null,P.qU,P.a)
 x.FV(0,C.mB)
-return new T.QB(b,x,z,y,null)},aV:[function(a){return T.OD(a,null).oK()},"$1","EPS",2,0,67],mD:[function(a,b,c,d){var z
+return new T.QB(b,x,z,y,null)},ct:[function(a){return T.OD(a,null).oK()},"$1","u5",2,0,67],mD:[function(a,b,c,d){var z
 if(c==null){c=P.L5(null,null,null,null,null)
 c.FV(0,C.mB)}z=K.wm(b,c)
 return d?T.rD(a,z,null):new T.tI(z,null,a,null,null,null,null)},function(a,b){return T.mD(a,b,null,!1)},null,function(a,b,c){return T.mD(a,b,null,c)},null,function(a,b,c){return T.mD(a,b,c,!1)},null,"$4$globals$oneTime","$2","$3$oneTime","$3$globals","yM",4,5,68,22,69]}},
 qb:{
-"^":"TpZ:191;b,c,d",
+"^":"TpZ:196;b,c,d",
 $3:[function(a,b,c){var z,y
 z=this.b
 z.SY.u(0,b,this.c)
 y=!!J.x(a).$isPF?a:K.wm(a,z.nF)
 z.R3.u(0,b,y)
-return new T.tI(y,null,this.d,null,null,null,null)},"$3",null,6,0,null,180,181,182,"call"],
+return new T.tI(y,null,this.d,null,null,null,null)},"$3",null,6,0,null,185,186,187,"call"],
 $isEH:true},
 Xyb:{
-"^":"TpZ:191;e,f",
+"^":"TpZ:196;e,f",
 $3:[function(a,b,c){var z,y
 z=this.e
 y=!!J.x(a).$isPF?a:K.wm(a,z.nF)
 z.R3.u(0,b,y)
 if(c===!0)return T.rD(this.f,y,null)
-return new T.tI(y,null,this.f,null,null,null,null)},"$3",null,6,0,null,180,181,182,"call"],
+return new T.tI(y,null,this.f,null,null,null,null)},"$3",null,6,0,null,185,186,187,"call"],
 $isEH:true},
 Ddj:{
-"^":"TpZ:191;a,UI,bK",
+"^":"TpZ:196;a,UI,bK",
 $3:[function(a,b,c){var z=this.UI.fi(b,a)
 if(c===!0)return T.rD(this.bK,z,this.a.a)
-return new T.tI(z,this.a.a,this.bK,null,null,null,null)},"$3",null,6,0,null,180,181,182,"call"],
+return new T.tI(z,this.a.a,this.bK,null,null,null,null)},"$3",null,6,0,null,185,186,187,"call"],
 $isEH:true},
 uK:{
 "^":"TpZ:12;a,b",
@@ -16607,7 +16784,7 @@
 y=this.b
 x=z.R3.t(0,y)
 if(x!=null){if(J.xC(a,J.ZH(x)))return x
-return K.wm(a,z.nF)}else return z.fi(y,a)},"$1",null,2,0,null,180,"call"],
+return K.wm(a,z.nF)}else return z.fi(y,a)},"$1",null,2,0,null,185,"call"],
 $isEH:true},
 uKo:{
 "^":"TpZ:12;c,d,e",
@@ -16617,66 +16794,66 @@
 x=z.R3.t(0,y)
 w=this.e
 if(x!=null)return x.t1(w,a)
-else return z.jX(y).t1(w,a)},"$1",null,2,0,null,180,"call"],
+else return z.jX(y).t1(w,a)},"$1",null,2,0,null,185,"call"],
 $isEH:true},
 tI:{
-"^":"Ap;Hk,mo,n4,Fg,JX,dD,HR",
+"^":"Ap;Hk,mo,te,qc,RQ,uZ,Ke",
 Ko:function(a){return this.mo.$1(a)},
-WV:function(a){return this.Fg.$1(a)},
+AO:function(a){return this.qc.$1(a)},
 Mr:[function(a,b){var z,y
-z=this.HR
+z=this.Ke
 y=this.mo==null?a:this.Ko(a)
-this.HR=y
-if(b!==!0&&this.Fg!=null&&!J.xC(z,y)){this.WV(this.HR)
-return!0}return!1},function(a){return this.Mr(a,!1)},"Eu0","$2$skipChanges","$1","gGX",2,3,192,69,60,193],
-gP:function(a){if(this.Fg!=null){this.Ix(!0)
-return this.HR}return T.rD(this.n4,this.Hk,this.mo)},
+this.Ke=y
+if(b!==!0&&this.qc!=null&&!J.xC(z,y)){this.AO(this.Ke)
+return!0}return!1},function(a){return this.Mr(a,!1)},"Eu0","$2$skipChanges","$1","gGX",2,3,197,69,60,198],
+gP:function(a){if(this.qc!=null){this.kf(!0)
+return this.Ke}return T.rD(this.te,this.Hk,this.mo)},
 sP:function(a,b){var z,y,x,w
-try{K.jXm(this.n4,b,this.Hk,!1)}catch(x){w=H.Ru(x)
+try{K.jXm(this.te,b,this.Hk,!1)}catch(x){w=H.Ru(x)
 z=w
 y=new H.oP(x,null)
-H.VM(new P.Zf(P.Dt(null)),[null]).w0("Error evaluating expression '"+H.d(this.n4)+"': "+H.d(z),y)}},
+H.VM(new P.Zf(P.Dt(null)),[null]).w0("Error evaluating expression '"+H.d(this.te)+"': "+H.d(z),y)}},
 TR:function(a,b){var z,y
-if(this.Fg!=null)throw H.b(P.w("already open"))
-this.Fg=b
-z=H.VM(new P.Sw(null,0,0,0),[null])
+if(this.qc!=null)throw H.b(P.w("already open"))
+this.qc=b
+z=H.VM(new P.nd(null,0,0,0),[null])
 z.Eo(null,null)
-y=J.okV(this.n4,new K.Oy(z))
-this.dD=y
+y=J.okV(this.te,new K.Oy(z))
+this.uZ=y
 z=y.gju().yI(this.gGX())
 z.fm(0,new T.yF(this))
-this.JX=z
-this.Ix(!0)
-return this.HR},
-Ix:function(a){var z,y,x,w,v
-try{x=this.dD
+this.RQ=z
+this.kf(!0)
+return this.Ke},
+kf:function(a){var z,y,x,w,v
+try{x=this.uZ
 J.okV(x,new K.Edh(this.Hk,a))
 x.gBI()
-x=this.Mr(this.dD.gBI(),a)
+x=this.Mr(this.uZ.gBI(),a)
 return x}catch(w){x=H.Ru(w)
 z=x
 y=new H.oP(w,null)
 x=new P.Gc(0,$.X3,null,null,null,null,null,null)
 x.$builtinTypeInfo=[null]
 new P.Zf(x).$builtinTypeInfo=[null]
-v="Error evaluating expression '"+H.d(this.dD)+"': "+H.d(z)
+v="Error evaluating expression '"+H.d(this.uZ)+"': "+H.d(z)
 if(x.YM!==0)H.vh(P.w("Future already completed"))
 x.Nk(v,y)
 return!1}},
-bE:function(){return this.Ix(!1)},
+Yg:function(){return this.kf(!1)},
 xO:function(a){var z,y
-if(this.Fg==null)return
-this.JX.Gv()
-this.JX=null
-this.Fg=null
+if(this.qc==null)return
+this.RQ.Gv()
+this.RQ=null
+this.qc=null
 z=$.Pk()
-y=this.dD
+y=this.uZ
 z.toString
 J.okV(y,z)
-this.dD=null},
-fR:function(){if(this.Fg!=null)this.TC()},
-TC:function(){var z=0
-while(!0){if(!(z<1000&&this.bE()===!0))break;++z}return z>0},
+this.uZ=null},
+fR:function(){if(this.qc!=null)this.Cm()},
+Cm:function(){var z=0
+while(!0){if(!(z<1000&&this.Yg()===!0))break;++z}return z>0},
 static:{"^":"Hi1",rD:function(a,b,c){var z,y,x,w,v
 try{z=J.okV(a,new K.GQ(b))
 w=c==null?z:c.$1(z)
@@ -16686,16 +16863,16 @@
 H.VM(new P.Zf(P.Dt(null)),[null]).w0("Error evaluating expression '"+H.d(a)+"': "+H.d(y),x)}return}}},
 yF:{
 "^":"TpZ:81;a",
-$2:[function(a,b){H.VM(new P.Zf(P.Dt(null)),[null]).w0("Error evaluating expression '"+H.d(this.a.dD)+"': "+H.d(a),b)},"$2",null,4,0,null,2,160,"call"],
+$2:[function(a,b){H.VM(new P.Zf(P.Dt(null)),[null]).w0("Error evaluating expression '"+H.d(this.a.uZ)+"': "+H.d(a),b)},"$2",null,4,0,null,2,165,"call"],
 $isEH:true},
 WM:{
 "^":"a;"}}],["","",,B,{
 "^":"",
-De:{
+LL:{
 "^":"xhq;vq>,Xq,Vg,fn",
 vb:function(a,b){this.vq.yI(new B.iH6(b,this))},
 $asxhq:function(a){return[null]},
-static:{Ha:function(a,b){var z=H.VM(new B.De(a,null,null,null),[b])
+static:{Ha:function(a,b){var z=H.VM(new B.LL(a,null,null,null),[b])
 z.vb(a,b)
 return z}}},
 iH6:{
@@ -16703,7 +16880,7 @@
 $1:[function(a){var z=this.b
 z.Xq=F.Wi(z,C.zd,z.Xq,a)},"$1",null,2,0,null,97,"call"],
 $isEH:true,
-$signature:function(){return H.oZ(function(a){return{func:"WM",args:[a]}},this.b,"De")}}}],["","",,K,{
+$signature:function(){return H.oZ(function(a){return{func:"WM",args:[a]}},this.b,"LL")}}}],["","",,K,{
 "^":"",
 jXm:function(a,b,c,d){var z,y,x,w,v,u,t
 z=H.VM([],[U.rx])
@@ -16711,9 +16888,9 @@
 z.push(y.gT8(a))
 a=y.gBb(a)}if(!!y.$isfp){x=y.gP(a)
 w=C.x4
-v=!1}else if(!!y.$isvn){w=a.gTf()
+v=!1}else if(!!y.$isvn){w=a.gZs()
 x=a.gmU()
-v=!0}else{if(!!y.$isx9){w=a.gTf()
+v=!0}else{if(!!y.$isx9){w=a.gZs()
 x=y.goc(a)}else{if(d)throw H.b(K.zq("Expression is not assignable: "+H.d(a)))
 return}v=!1}for(y=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);y.G();){u=y.Ff
 J.okV(u,new K.GQ(c))
@@ -16721,7 +16898,7 @@
 else return}t=J.okV(w,new K.GQ(c))
 if(t==null)return
 if(v)J.kW(t,J.okV(x,new K.GQ(c)),b)
-else{y=$.vu().JE.T4.t(0,x)
+else{y=$.vu().xV.T4.t(0,x)
 $.cp().Cq(t,y,b)}return b},
 wm:function(a,b){var z,y,x
 z=new K.ug(a)
@@ -16816,13 +16993,13 @@
 t1:function(a,b){if(J.xC(a,"this"))H.vh(K.zq("'this' cannot be used as a variable name."))
 return new K.Rf(this,a,b)},
 $isPF:true,
-$isCo:true,
-$asCo:function(){return[P.qU,P.a]}},
+$isHX:true,
+$asHX:function(){return[P.qU,P.a]}},
 ug:{
 "^":"PF;k8>",
 t:function(a,b){var z,y
 if(J.xC(b,"this"))return this.k8
-z=$.vu().JE.T4.t(0,b)
+z=$.vu().xV.T4.t(0,b)
 y=this.k8
 if(y==null||z==null)throw H.b(K.zq("variable '"+H.d(b)+"' not found"))
 y=$.cp().Gp(y,z)
@@ -16854,7 +17031,7 @@
 "^":"a;VO?,Xl<",
 gju:function(){var z=this.vO
 return H.VM(new P.Ik(z),[H.u3(z,0)])},
-gfL:function(){return this.KL},
+gXt:function(){return this.KL},
 gBI:function(){return this.Xl},
 MN:function(a){},
 Yo:function(a){var z
@@ -16888,16 +17065,16 @@
 W9:function(a){return J.ZH(this.ms)},
 Hs:function(a){return a.o2.RR(0,this)},
 Ci:function(a){var z,y,x
-z=J.okV(a.gTf(),this)
+z=J.okV(a.gZs(),this)
 if(z==null)return
 y=a.goc(a)
-x=$.vu().JE.T4.t(0,y)
+x=$.vu().xV.T4.t(0,y)
 return $.cp().Gp(z,x)},
-CU:function(a){var z=J.okV(a.gTf(),this)
+CU:function(a){var z=J.okV(a.gZs(),this)
 if(z==null)return
 return J.UQ(z,J.okV(a.gmU(),this))},
 Y7:function(a){var z,y,x,w,v
-z=J.okV(a.gTf(),this)
+z=J.okV(a.gZs(),this)
 if(z==null)return
 if(a.gre()==null)y=null
 else{x=a.gre()
@@ -16905,10 +17082,10 @@
 x.toString
 y=H.VM(new H.A8(x,w),[null,null]).tt(0,!1)}if(a.gnK(a)==null)return H.eC(z,y,P.Te(null))
 x=a.gnK(a)
-v=$.vu().JE.T4.t(0,x)
+v=$.vu().xV.T4.t(0,x)
 return $.cp().Ck(z,v,y,!1,null)},
-tk:function(a){return a.gP(a)},
-Zh:function(a){return H.VM(new H.A8(a.glm(),this.gnG()),[null,null]).br(0)},
+I6W:function(a){return a.gP(a)},
+Zh:function(a){return H.VM(new H.A8(a.gBx(),this.gnG()),[null,null]).br(0)},
 o0:function(a){var z,y,x
 z=P.Fl(null,null)
 for(y=a.gRl(a),y=H.VM(new H.a7(y,y.length,0,null),[H.u3(y,0)]);y.G();){x=y.Ff
@@ -16938,19 +17115,19 @@
 W9:function(a){return new K.Il(a,null,null,null,P.bK(null,null,!1,null))},
 Hs:function(a){return a.o2.RR(0,this)},
 Ci:function(a){var z,y
-z=J.okV(a.gTf(),this)
+z=J.okV(a.gZs(),this)
 y=new K.vl(z,a,null,null,null,P.bK(null,null,!1,null))
 z.sVO(y)
 return y},
 CU:function(a){var z,y,x
-z=J.okV(a.gTf(),this)
+z=J.okV(a.gZs(),this)
 y=J.okV(a.gmU(),this)
 x=new K.iTN(z,y,a,null,null,null,P.bK(null,null,!1,null))
 z.sVO(x)
 y.sVO(x)
 return x},
 Y7:function(a){var z,y,x,w,v
-z=J.okV(a.gTf(),this)
+z=J.okV(a.gZs(),this)
 if(a.gre()==null)y=null
 else{x=a.gre()
 w=this.gnG()
@@ -16959,15 +17136,15 @@
 z.sVO(v)
 if(y!=null)H.bQ(y,new K.zD(v))
 return v},
-tk:function(a){return new K.x5(a,null,null,null,P.bK(null,null,!1,null))},
+I6W:function(a){return new K.x5(a,null,null,null,P.bK(null,null,!1,null))},
 Zh:function(a){var z,y
-z=H.VM(new H.A8(a.glm(),this.gnG()),[null,null]).tt(0,!1)
+z=H.VM(new H.A8(a.gBx(),this.gnG()),[null,null]).tt(0,!1)
 y=new K.UF(z,a,null,null,null,P.bK(null,null,!1,null))
 H.bQ(z,new K.XV(y))
 return y},
 o0:function(a){var z,y
 z=H.VM(new H.A8(a.gRl(a),this.gnG()),[null,null]).tt(0,!1)
-y=new K.ED(z,a,null,null,null,P.bK(null,null,!1,null))
+y=new K.ev2(z,a,null,null,null,P.bK(null,null,!1,null))
 H.bQ(z,new K.Xs(y))
 return y},
 YV:function(a){var z,y,x
@@ -16981,7 +17158,7 @@
 ex:function(a){var z,y,x
 z=J.okV(a.gBb(a),this)
 y=J.okV(a.gT8(a),this)
-x=new K.ky(z,y,a,null,null,null,P.bK(null,null,!1,null))
+x=new K.ED(z,y,a,null,null,null,P.bK(null,null,!1,null))
 z.sVO(x)
 y.sVO(x)
 return x},
@@ -17023,8 +17200,8 @@
 "^":"Ay0;KL,VO,tj,Xl,vO",
 MN:function(a){this.Xl=J.ZH(a)},
 RR:function(a,b){return b.W9(this)},
-$asAy0:function(){return[U.EO]},
-$isEO:true,
+$asAy0:function(){return[U.WH]},
+$isWH:true,
 $isrx:true},
 x5:{
 "^":"Ay0;KL,VO,tj,Xl,vO",
@@ -17032,14 +17209,14 @@
 return z.gP(z)},
 MN:function(a){var z=this.KL
 this.Xl=z.gP(z)},
-RR:function(a,b){return b.tk(this)},
+RR:function(a,b){return b.I6W(this)},
 $asAy0:function(){return[U.noG]},
 $asnoG:function(){return[null]},
 $isnoG:true,
 $isrx:true},
 UF:{
-"^":"Ay0;lm<,KL,VO,tj,Xl,vO",
-MN:function(a){this.Xl=H.VM(new H.A8(this.lm,new K.Hv()),[null,null]).br(0)},
+"^":"Ay0;Bx<,KL,VO,tj,Xl,vO",
+MN:function(a){this.Xl=H.VM(new H.A8(this.Bx,new K.Hv()),[null,null]).br(0)},
 RR:function(a,b){return b.Zh(this)},
 $asAy0:function(){return[U.c0]},
 $isc0:true,
@@ -17048,14 +17225,14 @@
 "^":"TpZ:12;",
 $1:[function(a){return a.gXl()},"$1",null,2,0,null,97,"call"],
 $isEH:true},
-ED:{
+ev2:{
 "^":"Ay0;Rl>,KL,VO,tj,Xl,vO",
-MN:function(a){this.Xl=H.n3(this.Rl,P.L5(null,null,null,null,null),new K.Kv())},
+MN:function(a){this.Xl=H.n3(this.Rl,P.L5(null,null,null,null,null),new K.Ku())},
 RR:function(a,b){return b.o0(this)},
 $asAy0:function(){return[U.Mm]},
 $isMm:true,
 $isrx:true},
-Kv:{
+Ku:{
 "^":"TpZ:81;",
 $2:function(a,b){J.kW(a,J.AW(b).gXl(),b.gv4().gXl())
 return a},
@@ -17079,7 +17256,7 @@
 y=J.x(x)
 if(!y.$isd3)return
 z=z.gP(z)
-w=$.vu().JE.T4.t(0,z)
+w=$.vu().xV.T4.t(0,z)
 this.tj=y.gqh(x).yI(new K.OC(this,a,w))},
 RR:function(a,b){return b.qv(this)},
 $asAy0:function(){return[U.fp]},
@@ -17087,7 +17264,7 @@
 $isrx:true},
 OC:{
 "^":"TpZ:12;a,b,c",
-$1:[function(a){if(J.VA(a,new K.GC(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,187,"call"],
+$1:[function(a){if(J.VA(a,new K.GC(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,192,"call"],
 $isEH:true},
 GC:{
 "^":"TpZ:12;d",
@@ -17107,7 +17284,7 @@
 $asAy0:function(){return[U.FH]},
 $isFH:true,
 $isrx:true},
-ky:{
+ED:{
 "^":"Ay0;Bb>,T8>,KL,VO,tj,Xl,vO",
 gxS:function(a){var z=this.KL
 return z.gxS(z)},
@@ -17139,15 +17316,15 @@
 $isx06:true,
 $isrx:true},
 vl:{
-"^":"Ay0;Tf<,KL,VO,tj,Xl,vO",
+"^":"Ay0;Zs<,KL,VO,tj,Xl,vO",
 goc:function(a){var z=this.KL
 return z.goc(z)},
 MN:function(a){var z,y,x
-z=this.Tf.gXl()
+z=this.Zs.gXl()
 if(z==null){this.Xl=null
 return}y=this.KL
 y=y.goc(y)
-x=$.vu().JE.T4.t(0,y)
+x=$.vu().xV.T4.t(0,y)
 this.Xl=$.cp().Gp(z,x)
 y=J.x(z)
 if(!!y.$isd3)this.tj=y.gqh(z).yI(new K.Vw(this,a,x))},
@@ -17157,16 +17334,16 @@
 $isrx:true},
 Vw:{
 "^":"TpZ:12;a,b,c",
-$1:[function(a){if(J.VA(a,new K.WKb(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,187,"call"],
+$1:[function(a){if(J.VA(a,new K.WKb(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,192,"call"],
 $isEH:true},
 WKb:{
 "^":"TpZ:12;d",
 $1:[function(a){return!!J.x(a).$isqI&&J.xC(a.oc,this.d)},"$1",null,2,0,null,85,"call"],
 $isEH:true},
 iTN:{
-"^":"Ay0;Tf<,mU<,KL,VO,tj,Xl,vO",
+"^":"Ay0;Zs<,mU<,KL,VO,tj,Xl,vO",
 MN:function(a){var z,y,x
-z=this.Tf.gXl()
+z=this.Zs.gXl()
 if(z==null){this.Xl=null
 return}y=this.mU.gXl()
 x=J.U6(z)
@@ -17179,37 +17356,37 @@
 $isrx:true},
 tE:{
 "^":"TpZ:12;a,b,c",
-$1:[function(a){if(J.VA(a,new K.Ku(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,187,"call"],
+$1:[function(a){if(J.VA(a,new K.GST(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,192,"call"],
 $isEH:true},
-Ku:{
+GST:{
 "^":"TpZ:12;d",
 $1:[function(a){return a.vP(this.d)},"$1",null,2,0,null,85,"call"],
 $isEH:true},
 z5:{
 "^":"TpZ:12;e,f,UI",
-$1:[function(a){if(J.VA(a,new K.ey(this.UI))===!0)this.e.Yo(this.f)},"$1",null,2,0,null,187,"call"],
+$1:[function(a){if(J.VA(a,new K.ey(this.UI))===!0)this.e.Yo(this.f)},"$1",null,2,0,null,192,"call"],
 $isEH:true},
 ey:{
 "^":"TpZ:12;bK",
 $1:[function(a){return!!J.x(a).$isya&&J.xC(a.nl,this.bK)},"$1",null,2,0,null,85,"call"],
 $isEH:true},
 faZ:{
-"^":"Ay0;Tf<,re<,KL,VO,tj,Xl,vO",
+"^":"Ay0;Zs<,re<,KL,VO,tj,Xl,vO",
 gnK:function(a){var z=this.KL
 return z.gnK(z)},
 MN:function(a){var z,y,x,w
 z=this.re
 z.toString
 y=H.VM(new H.A8(z,new K.vQ()),[null,null]).br(0)
-x=this.Tf.gXl()
+x=this.Zs.gXl()
 if(x==null){this.Xl=null
 return}z=this.KL
 if(z.gnK(z)==null){z=H.eC(x,y,P.Te(null))
 this.Xl=!!J.x(z).$iswS?B.Ha(z,null):z}else{z=z.gnK(z)
-w=$.vu().JE.T4.t(0,z)
+w=$.vu().xV.T4.t(0,z)
 this.Xl=$.cp().Ck(x,w,y,!1,null)
 z=J.x(x)
-if(!!z.$isd3)this.tj=z.gqh(x).yI(new K.Xh(this,a,w))}},
+if(!!z.$isd3)this.tj=z.gqh(x).yI(new K.BGc(this,a,w))}},
 RR:function(a,b){return b.Y7(this)},
 $asAy0:function(){return[U.RWc]},
 $isRWc:true,
@@ -17218,9 +17395,9 @@
 "^":"TpZ:12;",
 $1:[function(a){return a.gXl()},"$1",null,2,0,null,49,"call"],
 $isEH:true},
-Xh:{
-"^":"TpZ:194;a,b,c",
-$1:[function(a){if(J.VA(a,new K.ho(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,187,"call"],
+BGc:{
+"^":"TpZ:199;a,b,c",
+$1:[function(a){if(J.VA(a,new K.ho(this.c))===!0)this.a.Yo(this.b)},"$1",null,2,0,null,192,"call"],
 $isEH:true},
 ho:{
 "^":"TpZ:12;d",
@@ -17249,19 +17426,19 @@
 a=536870911&a+((67108863&a)<<3>>>0)
 a=(a^a>>>11)>>>0
 return 536870911&a+((16383&a)<<15>>>0)},
-tu:{
+Fs:{
 "^":"a;",
-Bf:[function(a,b,c){return new U.vn(b,c)},"$2","gvH",4,0,195,2,49]},
+Bf:[function(a,b,c){return new U.vn(b,c)},"$2","gvH",4,0,200,2,49]},
 rx:{
 "^":"a;",
 $isrx:true},
-EO:{
+WH:{
 "^":"rx;",
 RR:function(a,b){return b.W9(this)},
-$isEO:true},
+$isWH:true},
 noG:{
 "^":"rx;P>",
-RR:function(a,b){return b.tk(this)},
+RR:function(a,b){return b.I6W(this)},
 bu:[function(a){var z=this.P
 return typeof z==="string"?"\""+H.d(z)+"\"":H.d(z)},"$0","gCR",0,0,73],
 n:function(a,b){var z
@@ -17271,12 +17448,12 @@
 giO:function(a){return J.v1(this.P)},
 $isnoG:true},
 c0:{
-"^":"rx;lm<",
+"^":"rx;Bx<",
 RR:function(a,b){return b.Zh(this)},
-bu:[function(a){return H.d(this.lm)},"$0","gCR",0,0,73],
+bu:[function(a){return H.d(this.Bx)},"$0","gCR",0,0,73],
 n:function(a,b){if(b==null)return!1
-return!!J.x(b).$isc0&&U.Pu(b.glm(),this.lm)},
-giO:function(a){return U.N4(this.lm)},
+return!!J.x(b).$isc0&&U.Pu(b.gBx(),this.Bx)},
+giO:function(a){return U.N4(this.Bx)},
 $isc0:true},
 Mm:{
 "^":"rx;Rl>",
@@ -17374,7 +17551,7 @@
 return U.Le(U.C0C(U.C0C(0,z),y))},
 $isX7S:true,
 $isDI:true},
-NM:{
+Sc:{
 "^":"rx;Bb>,T8>",
 RR:function(a,b){return b.eS(this)},
 gxG:function(){var z=this.T8
@@ -17382,48 +17559,48 @@
 gkZ:function(a){return this.Bb},
 bu:[function(a){return"("+H.d(this.Bb)+" as "+H.d(this.T8)+")"},"$0","gCR",0,0,73],
 n:function(a,b){if(b==null)return!1
-return!!J.x(b).$isNM&&J.xC(b.Bb,this.Bb)&&b.T8.n(0,this.T8)},
+return!!J.x(b).$isSc&&J.xC(b.Bb,this.Bb)&&b.T8.n(0,this.T8)},
 giO:function(a){var z,y
 z=J.v1(this.Bb)
 y=this.T8
 y=y.giO(y)
 return U.Le(U.C0C(U.C0C(0,z),y))},
-$isNM:true,
+$isSc:true,
 $isDI:true},
 vn:{
-"^":"rx;Tf<,mU<",
+"^":"rx;Zs<,mU<",
 RR:function(a,b){return b.CU(this)},
-bu:[function(a){return H.d(this.Tf)+"["+H.d(this.mU)+"]"},"$0","gCR",0,0,73],
+bu:[function(a){return H.d(this.Zs)+"["+H.d(this.mU)+"]"},"$0","gCR",0,0,73],
 n:function(a,b){if(b==null)return!1
-return!!J.x(b).$isvn&&J.xC(b.gTf(),this.Tf)&&J.xC(b.gmU(),this.mU)},
+return!!J.x(b).$isvn&&J.xC(b.gZs(),this.Zs)&&J.xC(b.gmU(),this.mU)},
 giO:function(a){var z,y
-z=J.v1(this.Tf)
+z=J.v1(this.Zs)
 y=J.v1(this.mU)
 return U.Le(U.C0C(U.C0C(0,z),y))},
 $isvn:true},
 x9:{
-"^":"rx;Tf<,oc>",
+"^":"rx;Zs<,oc>",
 RR:function(a,b){return b.Ci(this)},
-bu:[function(a){return H.d(this.Tf)+"."+H.d(this.oc)},"$0","gCR",0,0,73],
+bu:[function(a){return H.d(this.Zs)+"."+H.d(this.oc)},"$0","gCR",0,0,73],
 n:function(a,b){var z
 if(b==null)return!1
 z=J.x(b)
-return!!z.$isx9&&J.xC(b.gTf(),this.Tf)&&J.xC(z.goc(b),this.oc)},
+return!!z.$isx9&&J.xC(b.gZs(),this.Zs)&&J.xC(z.goc(b),this.oc)},
 giO:function(a){var z,y
-z=J.v1(this.Tf)
+z=J.v1(this.Zs)
 y=J.v1(this.oc)
 return U.Le(U.C0C(U.C0C(0,z),y))},
 $isx9:true},
 RWc:{
-"^":"rx;Tf<,nK>,re<",
+"^":"rx;Zs<,nK>,re<",
 RR:function(a,b){return b.Y7(this)},
-bu:[function(a){return H.d(this.Tf)+"."+H.d(this.nK)+"("+H.d(this.re)+")"},"$0","gCR",0,0,73],
+bu:[function(a){return H.d(this.Zs)+"."+H.d(this.nK)+"("+H.d(this.re)+")"},"$0","gCR",0,0,73],
 n:function(a,b){var z
 if(b==null)return!1
 z=J.x(b)
-return!!z.$isRWc&&J.xC(b.gTf(),this.Tf)&&J.xC(z.gnK(b),this.nK)&&U.Pu(b.gre(),this.re)},
+return!!z.$isRWc&&J.xC(b.gZs(),this.Zs)&&J.xC(z.gnK(b),this.nK)&&U.Pu(b.gre(),this.re)},
 giO:function(a){var z,y,x
-z=J.v1(this.Tf)
+z=J.v1(this.Zs)
 y=J.v1(this.nK)
 x=U.N4(this.re)
 return U.Le(U.C0C(U.C0C(U.C0C(0,z),y),x))},
@@ -17469,7 +17646,7 @@
 w=this.VK()
 if(!J.x(w).$isfp)H.vh(Y.RV("'as' statements must end with an identifier"))
 this.Wi.toString
-a=new U.NM(a,w)}else break
+a=new U.Sc(a,w)}else break
 else{if(J.xC(J.Iz(this.V6.Ff),8)){z=this.V6.Ff.gG8()
 if(typeof z!=="number")return z.F()
 if(typeof b!=="number")return H.s(b)
@@ -17485,7 +17662,7 @@
 z=J.x(b)
 if(!!z.$isfp){z=z.gP(b)
 this.Wi.toString
-return new U.x9(a,z)}else if(!!z.$isRWc&&!!J.x(b.gTf()).$isfp){z=J.Vm(b.gTf())
+return new U.x9(a,z)}else if(!!z.$isRWc&&!!J.x(b.gZs()).$isfp){z=J.Vm(b.gZs())
 y=b.gre()
 this.Wi.toString
 return new U.RWc(a,z,y)}else throw H.b(Y.RV("expected identifier: "+H.d(b)))},
@@ -17534,9 +17711,9 @@
 this.Wi.toString
 return new U.fp("this")}else if(C.Nm.tg(C.jY,z))throw H.b(Y.RV("unexpected keyword: "+H.d(z)))
 throw H.b(Y.RV("unrecognized keyword: "+H.d(z)))
-case 2:return this.xh()
+case 2:return this.Yj()
 case 1:return this.Dy()
-case 6:return this.Rb()
+case 6:return this.c9()
 case 7:return this.eD()
 case 9:if(J.xC(J.Vm(this.V6.Ff),"(")){this.jz()
 y=this.VK()
@@ -17569,7 +17746,7 @@
 y=this.V6.Ff}while(y!=null&&J.xC(J.Vm(y),","))
 this.Jn(9,"}")
 return new U.Mm(z)},
-xh:function(){var z,y,x
+Yj:function(){var z,y,x
 if(J.xC(J.Vm(this.V6.Ff),"true")){this.jz()
 this.Wi.toString
 return H.VM(new U.noG(!0),[null])}if(J.xC(J.Vm(this.V6.Ff),"false")){this.jz()
@@ -17605,13 +17782,13 @@
 y=H.VM(new U.noG(z),[null])
 this.jz()
 return y},
-ldL:function(a){var z,y
+Rb:function(a){var z,y
 z=H.BU(H.d(a)+H.d(J.Vm(this.V6.Ff)),null,null)
 this.Wi.toString
 y=H.VM(new U.noG(z),[null])
 this.jz()
 return y},
-Rb:function(){return this.ldL("")},
+c9:function(){return this.Rb("")},
 XO:function(a){var z,y
 z=H.RR(H.d(a)+H.d(J.Vm(this.V6.Ff)),null)
 this.Wi.toString
@@ -17622,7 +17799,7 @@
 static:{OD:function(a,b){var z,y,x
 z=H.VM([],[Y.qS])
 y=P.p9("")
-x=new U.tu()
+x=new U.Fs()
 return new T.FX(x,new Y.dd(z,y,new P.ysG(a,0,0,null),null),null,null)}}}}],["","",,K,{
 "^":"",
 eq:[function(a){return H.VM(new K.Bt(a),[null])},"$1","FLA",2,0,70,71],
@@ -17767,25 +17944,25 @@
 "^":"",
 P55:{
 "^":"a;",
-DV:[function(a){return J.okV(a,this)},"$1","gnG",2,0,196,160]},
+DV:[function(a){return J.okV(a,this)},"$1","gnG",2,0,201,165]},
 cfS:{
 "^":"P55;",
 xn:function(a){},
 W9:function(a){this.xn(a)},
 Hs:function(a){a.o2.RR(0,this)
 this.xn(a)},
-Ci:function(a){J.okV(a.gTf(),this)
+Ci:function(a){J.okV(a.gZs(),this)
 this.xn(a)},
-CU:function(a){J.okV(a.gTf(),this)
+CU:function(a){J.okV(a.gZs(),this)
 J.okV(a.gmU(),this)
 this.xn(a)},
 Y7:function(a){var z
-J.okV(a.gTf(),this)
+J.okV(a.gZs(),this)
 if(a.gre()!=null)for(z=a.gre(),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();)J.okV(z.Ff,this)
 this.xn(a)},
-tk:function(a){this.xn(a)},
+I6W:function(a){this.xn(a)},
 Zh:function(a){var z
-for(z=a.glm(),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();)J.okV(z.Ff,this)
+for(z=a.gBx(),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();)J.okV(z.Ff,this)
 this.xn(a)},
 o0:function(a){var z
 for(z=a.gRl(a),z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();)J.okV(z.Ff,this)
@@ -17811,7 +17988,7 @@
 this.xn(a)}}}],["","",,T,{
 "^":"",
 ov:{
-"^":"V50;Ny,t7,fI,Fd,cI,He,xo,ZJ,PZ,Kf,Nf,D6,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V53;Ny,t7,fI,Fd,cI,He,xo,ZJ,PZ,Kf,Nf,D6,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gtu:function(a){return a.Ny},
 stu:function(a,b){a.Ny=this.ct(a,C.PX,a.Ny,b)},
 gfg:function(a){return a.t7},
@@ -17838,7 +18015,7 @@
 if(z!=null){y=!!z.scrollIntoViewIfNeeded
 if(y)z.scrollIntoViewIfNeeded()
 else z.scrollIntoView()}},
-qA:[function(a,b,c){this.W7(a)},"$2","giH",4,0,197,198,199],
+qA:[function(a,b,c){this.W7(a)},"$2","giH",4,0,202,203,204],
 Es:function(a){var z,y
 Z.uL.prototype.Es.call(this,a)
 z=(a.shadowRoot||a.webkitShadowRoot).querySelector(".sourceTable")
@@ -17851,7 +18028,7 @@
 mN:[function(a,b){this.Um(a)
 this.W7(a)},"$1","goL",2,0,19,59],
 KC:[function(a,b){this.Um(a)},"$1","giB",2,0,19,59],
-ib:[function(a,b){this.Um(a)},"$1","gP3",2,0,19,59],
+Ti:[function(a,b){this.Um(a)},"$1","gP3",2,0,19,59],
 Vj:[function(a,b){this.Um(a)},"$1","gcY",2,0,19,59],
 Um:function(a){var z,y,x
 a.PZ=this.ct(a,C.uG,a.PZ,!1)
@@ -17889,10 +18066,10 @@
 a.ZQ=x
 a.qJ=w
 a.wy=v
-C.oAw.LX(a)
-C.oAw.XI(a)
+C.za.LX(a)
+C.za.XI(a)
 return a}}},
-V50:{
+V53:{
 "^":"uL+Pi;",
 $isd3:true},
 Es:{
@@ -17902,7 +18079,7 @@
 J.XP(z)}},"$1",null,2,0,null,13,"call"],
 $isEH:true},
 vr:{
-"^":"V51;X9,pL,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V54;X9,pL,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gRd:function(a){return a.X9},
 sRd:function(a,b){a.X9=this.ct(a,C.VI,a.X9,b)},
 gO9:function(a){return a.pL},
@@ -17932,26 +18109,26 @@
 C.FC.LX(a)
 C.FC.XI(a)
 return a}}},
-V51:{
+V54:{
 "^":"uL+Pi;",
 $isd3:true},
 eE:{
 "^":"TpZ:12;a",
 $1:[function(a){var z=this.a
-z.pL=J.Q5(z,C.S4,z.pL,!1)},"$1",null,2,0,null,13,"call"],
+z.pL=J.NB(z,C.S4,z.pL,!1)},"$1",null,2,0,null,13,"call"],
 $isEH:true},
 b3:{
 "^":"TpZ:12;b",
 $1:[function(a){var z=this.b
-z.pL=J.Q5(z,C.S4,z.pL,!1)},"$1",null,2,0,null,13,"call"],
+z.pL=J.NB(z,C.S4,z.pL,!1)},"$1",null,2,0,null,13,"call"],
 $isEH:true}}],["","",,A,{
 "^":"",
 kn:{
-"^":"qeq;jJ,Vg,fn,tY,Pe,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"oEY;jJ,Vg,fn,tY,Pe,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gBV:function(a){return a.jJ},
 sBV:function(a,b){a.jJ=this.ct(a,C.tW,a.jJ,b)},
-gXt:function(a){var z=a.tY
-if(z==null)return Q.xI.prototype.gXt.call(this,a)
+gJp:function(a){var z=a.tY
+if(z==null)return Q.xI.prototype.gJp.call(this,a)
 return z.gTE()},
 fX:[function(a,b){this.at(a,null)},"$1","glD",2,0,19,59],
 at:[function(a,b){var z=a.tY
@@ -17985,12 +18162,12 @@
 C.Wa.LX(a)
 C.Wa.XI(a)
 return a}}},
-qeq:{
+oEY:{
 "^":"xI+Pi;",
 $isd3:true}}],["","",,U,{
 "^":"",
 fI:{
-"^":"V52;Uz,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V55;Uz,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gtu:function(a){return a.Uz},
 stu:function(a,b){a.Uz=this.ct(a,C.PX,a.Uz,b)},
 Es:function(a){var z
@@ -18016,11 +18193,15 @@
 C.cJ0.LX(a)
 C.cJ0.XI(a)
 return a}}},
-V52:{
+V55:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,D,{
 "^":"",
 Xm:[function(a,b){return J.FW(J.DA(a),J.DA(b))},"$2","E0",4,0,72],
+dV:function(a){switch(a){case"BoundedType":case"Instance":case"List":case"String":case"Type":case"TypeParameter":case"TypeRef":case"bool":case"double":case"int":case"null":return!0
+default:return!1}},
+rO:function(a){switch(a){case"BoundedType":case"Type":case"TypeParameter":case"TypeRef":return!0
+default:return!1}},
 Nl:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
 if(b==null)return
 z=J.U6(b)
@@ -18028,7 +18209,8 @@
 if(!z)N.QM("").YX("Malformed service object: "+H.d(b))
 y=J.UQ(b,"type")
 z=J.Qe(y)
-switch(z.nC(y,"@")?z.yn(y,1):y){case"Class":z=D.vO
+if(z.nC(y,"@"))y=z.yn(y,1)
+switch(y){case"Class":z=D.vO
 x=[]
 x.$builtinTypeInfo=[z]
 x=new Q.wn(null,null,x,null,null)
@@ -18051,9 +18233,9 @@
 t=new D.dy(null,null,null,null,null,null,null,null,null,null,new D.Iy(new D.mT(0,0,null,null),new D.mT(0,0,null,null)),new D.Iy(new D.mT(0,0,null,null),new D.mT(0,0,null,null)),new D.mT(0,0,null,null),x,w,null,v,u,null,null,a,null,null,null,!1,null,null,null,null,null)
 break
 case"Code":z=[]
-z.$builtinTypeInfo=[D.Fc]
+z.$builtinTypeInfo=[D.ta]
 x=[]
-x.$builtinTypeInfo=[D.Fc]
+x.$builtinTypeInfo=[D.ta]
 w=D.Q4
 v=[]
 v.$builtinTypeInfo=[w]
@@ -18065,6 +18247,8 @@
 s.$builtinTypeInfo=[w,u]
 t=new D.kx(null,0,0,0,0,0,z,x,v,s,"","",null,null,null,!1,null,null,!1,null,null,a,null,null,null,!1,null,null,null,null,null)
 break
+case"Context":t=new D.lI(null,null,null,null,null,null,null,a,null,null,null,!1,null,null,null,null,null)
+break
 case"Counter":z=D.G9
 x=[]
 x.$builtinTypeInfo=[z]
@@ -18083,8 +18267,6 @@
 x.$builtinTypeInfo=[z]
 t=new D.YX(!1,null,x,100,null,0,null,null,null,null,a,null,null,null,!1,null,null,null,null,null)
 break
-case"Array":case"Bigint":case"Bool":case"Double":case"GrowableObjectArray":case"Instance":case"Mint":case"Null":case"Sentinel":case"Smi":case"String":case"Type":t=new D.uq(null,null,null,null,null,null,null,null,null,null,null,null,null,a,null,null,null,!1,null,null,null,null,null)
-break
 case"Isolate":z=J.wp(a)
 x=new V.qC(P.YM(null,null,null,null,null),null,null)
 x.$builtinTypeInfo=[null,null]
@@ -18157,9 +18339,11 @@
 break
 case"Socket":t=new D.WP(null,null,null,null,"",!1,!1,!1,!1,null,null,null,null,null,null,null,a,null,null,null,!1,null,null,null,null,null)
 break
-default:z=new V.qC(P.YM(null,null,null,null,null),null,null)
+default:if(D.dV(y)||J.xC(y,"Sentinel")){t=new D.uq(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,a,null,null,null,!1,null,null,null,null,null)
+break}else{z=new V.qC(P.YM(null,null,null,null,null),null,null)
 z.$builtinTypeInfo=[null,null]
-t=new D.vO(z,a,null,null,null,!1,null,null,null,null,null)}t.eC(b)
+t=new D.vO(z,a,null,null,null,!1,null,null,null,null,null)
+break}}t.eC(b)
 return t},
 UW:function(a){if(a.gHh())return
 return a},
@@ -18189,16 +18373,20 @@
 gjO:function(a){return this.TU},
 gt5:function(a){return this.oU},
 gdr:function(){return this.JK},
-gFY:function(){return J.xC(this.JK,"Bool")},
-gzx:function(){return J.xC(this.JK,"Double")},
-gt3:function(){return J.xC(this.JK,"Error")},
-gNs:function(){return J.xC(this.JK,"Instance")},
-gWL:function(){return J.xC(this.JK,"Smi")||J.xC(this.JK,"Mint")||J.xC(this.JK,"Bigint")},
-gK4:function(a){return J.xC(this.JK,"GrowableObjectArray")||J.xC(this.JK,"Array")},
-gHh:function(){return J.xC(this.JK,"Null")},
-gl5:function(){return J.xC(this.JK,"Sentinel")},
-gu7:function(){return J.xC(this.JK,"String")},
-gqN:function(){return J.xC(this.JK,"Type")},
+glO:function(){return D.rO(this.oU)},
+gFY:function(){return J.xC(this.oU,"bool")},
+gzx:function(){return J.xC(this.oU,"double")},
+gt3:function(){return J.xC(this.oU,"Error")},
+gNs:function(){return D.dV(this.oU)},
+gWL:function(){return J.xC(this.oU,"int")},
+gK4:function(a){return J.xC(this.oU,"List")},
+gHh:function(){return J.xC(this.oU,"null")},
+gl5:function(){return J.xC(this.oU,"Sentinel")},
+gu7:function(){return J.xC(this.oU,"String")},
+gJE:function(){return J.xC(this.JK,"MirrorReference")},
+gl2:function(){return J.xC(this.JK,"WeakProperty")},
+gBF:function(){return!1},
+gXM:function(){return J.xC(this.oU,"Instance")&&!J.xC(this.JK,"MirrorReference")&&!J.xC(this.JK,"WeakProperty")&&!this.gBF()},
 gPj:function(a){return this.x8.YC(this.TU)},
 gox:function(a){return this.qu},
 gjm:function(){return!1},
@@ -18206,7 +18394,7 @@
 goc:function(a){return this.gbN()},
 soc:function(a,b){this.sbN(this.ct(this,C.YS,this.gbN(),b))},
 gTE:function(){return this.gGR()},
-sTE:function(a){this.sGR(this.ct(this,C.Tc,this.gGR(),a))},
+sTE:function(a){this.sGR(this.ct(this,C.KS,this.gGR(),a))},
 xW:function(a){if(this.qu)return P.Ab(this,null)
 return this.VD(0)},
 VD:function(a){var z
@@ -18224,14 +18412,14 @@
 w=this.TU
 if(w!=null&&!J.xC(w,z.t(a,"id")));this.TU=z.t(a,"id")
 this.oU=x
-if(z.NZ(a,"vmType")===!0){z=z.t(a,"vmType")
+if(z.NZ(a,"_vmType")===!0){z=z.t(a,"_vmType")
 w=J.Qe(z)
 this.JK=w.nC(z,"@")?w.yn(z,1):z}else this.JK=this.oU
 this.R5(0,a,y)},
-YC:[function(a){return this.gPj(this)+"/"+H.d(a)},"$1","gua",2,0,169,200],
+YC:[function(a){return this.gPj(this)+"/"+H.d(a)},"$1","gua",2,0,172,205],
 $isaf:true},
 n1:{
-"^":"TpZ:202;a",
+"^":"TpZ:207;a",
 $1:[function(a){var z,y
 z=J.UQ(a,"type")
 y=J.Qe(z)
@@ -18239,7 +18427,7 @@
 y=this.a
 if(!J.xC(z,y.oU))return D.Nl(y.x8,a)
 y.eC(a)
-return y},"$1",null,2,0,null,201,"call"],
+return y},"$1",null,2,0,null,206,"call"],
 $isEH:true},
 jI:{
 "^":"TpZ:76;b",
@@ -18248,16 +18436,16 @@
 boh:{
 "^":"a;",
 O5:function(a){J.Me(a,new D.P5(this))},
-lh:[function(a){return this.gwv(this).jU(this.YC("coverage")).ml(new D.Rv(this))},"$0","gDX",0,0,203]},
+lh:[function(a){return this.gwv(this).jU(this.YC("coverage")).ml(new D.Rv(this))},"$0","gDX",0,0,208]},
 P5:{
 "^":"TpZ:12;a",
 $1:[function(a){var z=J.U6(a)
-z.t(a,"script").lV(z.t(a,"hits"))},"$1",null,2,0,null,204,"call"],
+z.t(a,"script").lV(z.t(a,"hits"))},"$1",null,2,0,null,209,"call"],
 $isEH:true},
 Rv:{
-"^":"TpZ:202;a",
+"^":"TpZ:207;a",
 $1:[function(a){var z=this.a
-z.O5(D.Nl(J.xC(z.gt5(z),"Isolate")?z:z.gXP(),a).t(0,"coverage"))},"$1",null,2,0,null,201,"call"],
+z.O5(D.Nl(J.xC(z.gt5(z),"Isolate")?z:z.gXP(),a).t(0,"coverage"))},"$1",null,2,0,null,206,"call"],
 $isEH:true},
 xm:{
 "^":"af;"},
@@ -18268,7 +18456,7 @@
 gi2:function(){var z=this.Qi
 return z.gUQ(z)},
 gPj:function(a){return H.d(this.TU)},
-YC:[function(a){return H.d(a)},"$1","gua",2,0,169,200],
+YC:[function(a){return H.d(a)},"$1","gua",2,0,172,205],
 gYe:function(a){return this.Ox},
 gI2:function(){return this.RW},
 gA3:function(){return this.Ts},
@@ -18361,7 +18549,7 @@
 N.QM("").To("New isolate '"+H.d(u.TU)+"'")}}y.aN(0,new D.Yu())
 this.Qi=y},
 Lw:function(){this.bN=this.ct(this,C.YS,this.bN,"vm")
-this.GR=this.ct(this,C.Tc,this.GR,"vm")
+this.GR=this.ct(this,C.KS,this.GR,"vm")
 this.uj.u(0,"vm",this)
 var z=P.EF(["id","vm","type","@VM"],null,null)
 this.eC(R.tB(z))},
@@ -18376,12 +18564,12 @@
 else{z=D.Nl(a,this.a.a)
 y=this.b.Rk
 if(y.YM>=4)H.vh(y.Pq())
-y.MW(z)}},"$1",null,2,0,null,205,"call"],
+y.MW(z)}},"$1",null,2,0,null,210,"call"],
 $isEH:true},
 MZ:{
 "^":"TpZ:12;a,b",
 $1:[function(a){if(!J.x(a).$iswv)return
-return this.a.Qi.t(0,this.b)},"$1",null,2,0,null,147,"call"],
+return this.a.Qi.t(0,this.b)},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 aEE:{
 "^":"TpZ:12;a,b",
@@ -18392,12 +18580,12 @@
 else return a.cv(z)},"$1",null,2,0,null,6,"call"],
 $isEH:true},
 oew:{
-"^":"TpZ:202;c,d",
+"^":"TpZ:207;c,d",
 $1:[function(a){var z,y
 z=this.c
 y=D.Nl(z,a)
 if(y.gjm())z.uj.to(0,this.d,new D.QZ(y))
-return y},"$1",null,2,0,null,201,"call"],
+return y},"$1",null,2,0,null,206,"call"],
 $isEH:true},
 QZ:{
 "^":"TpZ:76;e",
@@ -18410,7 +18598,7 @@
 y=z.hb(a)
 x=$.ax
 if(x!=null)x.ab(0,"Received response for "+H.d(this.b),y)
-return z.OJ(y)},"$1",null,2,0,null,150,"call"],
+return z.OJ(y)},"$1",null,2,0,null,155,"call"],
 $isEH:true},
 tm:{
 "^":"TpZ:12;c",
@@ -18465,7 +18653,7 @@
 if(!(w<v))break
 u=z.t(b,w)
 if(w>=x)return H.e(y,w)
-y[w]=J.xZ(y[w],u)?y[w]:u;++w}},"$1","gA5",2,0,206,207],
+y[w]=J.xZ(y[w],u)?y[w]:u;++w}},"$1","gA5",2,0,211,212],
 CJ:function(){var z,y,x
 for(z=this.XE,y=z.length,x=0;x<y;++x)z[x]=0},
 $isER:true},
@@ -18536,7 +18724,7 @@
 gGL:function(){return this.EY},
 gaj:function(){return this.eU},
 gn0:function(){return this.yP},
-YC:[function(a){return"/"+H.d(this.TU)+"/"+H.d(a)},"$1","gua",2,0,169,200],
+YC:[function(a){return"/"+H.d(this.TU)+"/"+H.d(a)},"$1","gua",2,0,172,205],
 N3:function(a){var z,y,x,w
 z=H.VM([],[D.kx])
 y=J.U6(a)
@@ -18558,7 +18746,7 @@
 z=[]
 for(y=J.mY(J.UQ(a,"members"));y.G();){x=y.gl()
 w=J.x(x)
-if(!!w.$isdy)z.push(w.xW(x))}return P.Ne(z,!1)},"$1","gLG",2,0,208,209],
+if(!!w.$isdy)z.push(w.xW(x))}return P.Ne(z,!1)},"$1","gLG",2,0,213,214],
 lKe:[function(a){var z,y,x,w
 z=this.AI
 z.V1(z)
@@ -18568,7 +18756,7 @@
 if(J.xC(x.gTE(),"Object")&&J.xC(x.geh(),!1)){w=this.Wm
 if(this.gnz(this)&&!J.xC(w,x)){w=new T.qI(this,C.jo,w,x)
 w.$builtinTypeInfo=[null]
-this.nq(this,w)}this.Wm=x}}return P.Ab(this.Wm,null)},"$1","gHB",2,0,210,211],
+this.nq(this,w)}this.Wm=x}}return P.Ab(this.Wm,null)},"$1","gHB",2,0,215,216],
 Qn:function(a){var z,y,x
 if(a==null)return
 z=J.UQ(a,"id")
@@ -18589,7 +18777,7 @@
 goc:function(a){return this.KT},
 soc:function(a,b){this.KT=F.Wi(this,C.YS,this.KT,b)},
 gTE:function(){return this.f5},
-sTE:function(a){this.f5=F.Wi(this,C.Tc,this.f5,a)},
+sTE:function(a){this.f5=F.Wi(this,C.KS,this.f5,a)},
 gIT:function(){return this.i9},
 gw2:function(){return this.cL},
 sw2:function(a){this.cL=F.Wi(this,C.tP,this.cL,a)},
@@ -18605,7 +18793,7 @@
 y=z.t(b,"name")
 this.KT=F.Wi(this,C.YS,this.KT,y)
 y=z.t(b,"name")
-this.f5=F.Wi(this,C.Tc,this.f5,y)
+this.f5=F.Wi(this,C.KS,this.f5,y)
 if(c)return
 this.qu=!0
 this.yP=F.Wi(this,C.DY,this.yP,!1)
@@ -18731,11 +18919,11 @@
 this.hz=z}return z},
 G5:function(a,b){return this.cv(J.WB(J.eS(a),"/setBreakpoint?line="+H.d(b))).ml(new D.ad(this,a,b))},
 Xu:function(a){return this.cv(H.d(J.eS(a))+"/clear").ml(new D.fw(this,a))},
-WJ:[function(a){return this.cv("debug/pause").ml(new D.G4(this))},"$0","gX0",0,0,203],
-QE:[function(a){return this.cv("debug/resume").ml(new D.LO(this))},"$0","gDQ",0,0,203],
-Lg:[function(a){return this.cv("debug/resume?step=into").ml(new D.qD(this))},"$0","gLc",0,0,203],
-Fc:[function(a){return this.cv("debug/resume?step=over").ml(new D.A6(this))},"$0","gqF",0,0,203],
-h9:[function(a){return this.cv("debug/resume?step=out").ml(new D.xK(this))},"$0","gZp",0,0,203],
+WJ:[function(a){return this.cv("debug/pause").ml(new D.G4(this))},"$0","gX0",0,0,208],
+QE:[function(a){return this.cv("debug/resume").ml(new D.LO(this))},"$0","gDQ",0,0,208],
+Lg:[function(a){return this.cv("debug/resume?step=into").ml(new D.qD(this))},"$0","gLc",0,0,208],
+Fc:[function(a){return this.cv("debug/resume?step=over").ml(new D.A6(this))},"$0","gqF",0,0,208],
+h9:[function(a){return this.cv("debug/resume?step=out").ml(new D.xK(this))},"$0","gZp",0,0,208],
 WO:function(a,b){return this.cv(a).ml(new D.oq(b))},
 VT:function(){return this.WO("metrics",this.pG).ml(new D.y1(this))},
 bu:[function(a){return"Isolate("+H.d(this.TU)+")"},"$0","gCR",0,0,73],
@@ -18752,18 +18940,18 @@
 a.Du=0
 a.fF=0
 a.mM=F.Wi(a,C.eF,a.mM,"")
-a.qH=F.Wi(a,C.uU,a.qH,"")
+a.rF=F.Wi(a,C.uU,a.rF,"")
 C.Nm.sB(a.VS,0)
 C.Nm.sB(a.hw,0)
 a.n3.V1(0)}},
 $isEH:true},
 KQ:{
-"^":"TpZ:202;a,b",
+"^":"TpZ:207;a,b",
 $1:[function(a){var z,y
 z=this.a
 y=D.Nl(z,a)
 if(y.gjm())z.uj.to(0,this.b,new D.Ea(y))
-return y},"$1",null,2,0,null,201,"call"],
+return y},"$1",null,2,0,null,206,"call"],
 $isEH:true},
 Ea:{
 "^":"TpZ:76;c",
@@ -18772,16 +18960,16 @@
 Qq:{
 "^":"TpZ:12;a",
 $1:[function(a){var z=J.U6(a)
-this.a.u(0,z.t(a,"name"),z.t(a,"time"))},"$1",null,2,0,null,212,"call"],
+this.a.u(0,z.t(a,"name"),z.t(a,"time"))},"$1",null,2,0,null,217,"call"],
 $isEH:true},
 O5:{
-"^":"TpZ:202;a",
+"^":"TpZ:207;a",
 $1:[function(a){var z,y
 z=Date.now()
 new P.iP(z,!1).EK()
 y=this.a.KJ
 y.Qv(z/1000,a)
-return y},"$1",null,2,0,null,163,"call"],
+return y},"$1",null,2,0,null,166,"call"],
 $isEH:true},
 Ye:{
 "^":"TpZ:12;a,b",
@@ -18789,7 +18977,7 @@
 $isEH:true},
 y4:{
 "^":"TpZ:12;a",
-$1:[function(a){this.a.eF(a)},"$1",null,2,0,null,213,"call"],
+$1:[function(a){this.a.eF(a)},"$1",null,2,0,null,218,"call"],
 $isEH:true},
 Cm:{
 "^":"TpZ:76;b",
@@ -18798,7 +18986,7 @@
 ad:{
 "^":"TpZ:12;a,b,c",
 $1:[function(a){if(!!J.x(a).$ispD)J.UQ(J.de(this.b),J.bI(this.c,1)).sj9(!1)
-return this.a.Xb()},"$1",null,2,0,null,147,"call"],
+return this.a.Xb()},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 fw:{
 "^":"TpZ:12;a,b",
@@ -18807,32 +18995,32 @@
 z=this.a
 y=z.Jr
 if(y!=null&&y.gQ1()!=null&&J.xC(J.UQ(z.Jr.gQ1(),"id"),J.UQ(this.b,"id")))return z.VD(0)
-else return z.Xb()},"$1",null,2,0,null,147,"call"],
+else return z.Xb()},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 G4:{
 "^":"TpZ:12;a",
 $1:[function(a){if(!!J.x(a).$ispD)N.QM("").YX(a.LD)
-return this.a.VD(0)},"$1",null,2,0,null,147,"call"],
+return this.a.VD(0)},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 LO:{
 "^":"TpZ:12;a",
 $1:[function(a){if(!!J.x(a).$ispD)N.QM("").YX(a.LD)
-return this.a.VD(0)},"$1",null,2,0,null,147,"call"],
+return this.a.VD(0)},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 qD:{
 "^":"TpZ:12;a",
 $1:[function(a){if(!!J.x(a).$ispD)N.QM("").YX(a.LD)
-return this.a.VD(0)},"$1",null,2,0,null,147,"call"],
+return this.a.VD(0)},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 A6:{
 "^":"TpZ:12;a",
 $1:[function(a){if(!!J.x(a).$ispD)N.QM("").YX(a.LD)
-return this.a.VD(0)},"$1",null,2,0,null,147,"call"],
+return this.a.VD(0)},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 xK:{
 "^":"TpZ:12;a",
 $1:[function(a){if(!!J.x(a).$ispD)N.QM("").YX(a.LD)
-return this.a.VD(0)},"$1",null,2,0,null,147,"call"],
+return this.a.VD(0)},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 oq:{
 "^":"TpZ:12;a",
@@ -18842,7 +19030,7 @@
 return}y=this.a
 y.V1(0)
 for(z=J.mY(z.t(a,"members"));z.G();){x=z.gl()
-y.u(0,J.eS(x),x)}return y},"$1",null,2,0,null,147,"call"],
+y.u(0,J.eS(x),x)}return y},"$1",null,2,0,null,121,"call"],
 $isEH:true},
 y1:{
 "^":"TpZ:12;a",
@@ -18862,7 +19050,7 @@
 x=y.t(0,"name")
 this.bN=this.ct(0,C.YS,this.bN,x)
 y=y.NZ(0,"vmName")?y.t(0,"vmName"):this.bN
-this.GR=this.ct(0,C.Tc,this.GR,y)
+this.GR=this.ct(0,C.KS,this.GR,y)
 D.kT(z,this.x8)},
 FV:function(a,b){return this.RF.FV(0,b)},
 V1:function(a){return this.RF.V1(0)},
@@ -18883,7 +19071,7 @@
 gB:function(a){var z=this.RF.LL
 return z.gB(z)},
 HC:[function(a){var z=this.RF
-return z.HC(z)},"$0","gDx",0,0,125],
+return z.HC(z)},"$0","gDx",0,0,131],
 nq:function(a,b){var z=this.RF
 return z.nq(z,b)},
 ct:function(a,b,c,d){return F.Wi(this.RF,b,c,d)},
@@ -18925,7 +19113,7 @@
 z="DartError "+H.d(this.I0)
 z=this.ct(this,C.YS,this.bN,z)
 this.bN=z
-this.GR=this.ct(this,C.Tc,this.GR,z)},
+this.GR=this.ct(this,C.KS,this.GR,z)},
 bu:[function(a){return"DartError("+H.d(this.LD)+")"},"$0","gCR",0,0,73],
 $ispD:true},
 wVq:{
@@ -18945,7 +19133,7 @@
 z="ServiceError "+H.d(this.I0)
 z=this.ct(this,C.YS,this.bN,z)
 this.bN=z
-this.GR=this.ct(this,C.Tc,this.GR,z)},
+this.GR=this.ct(this,C.KS,this.GR,z)},
 bu:[function(a){return"ServiceError("+H.d(this.LD)+")"},"$0","gCR",0,0,73],
 $isN7:true},
 dZL:{
@@ -18967,7 +19155,7 @@
 z="ServiceException "+H.d(this.I0)
 z=this.ct(this,C.YS,this.bN,z)
 this.bN=z
-this.GR=this.ct(this,C.Tc,this.GR,z)},
+this.GR=this.ct(this,C.KS,this.GR,z)},
 $isIx:true},
 w8F:{
 "^":"af+Pi;",
@@ -18989,7 +19177,7 @@
 y="ServiceEvent "+H.d(y)
 y=this.ct(this,C.YS,this.bN,y)
 this.bN=y
-this.GR=this.ct(this,C.Tc,this.GR,y)
+this.GR=this.ct(this,C.KS,this.GR,y)
 if(z.t(b,"breakpoint")!=null){y=z.t(b,"breakpoint")
 this.HQ=F.Wi(this,C.hR,this.HQ,y)}if(z.t(b,"exception")!=null){y=z.t(b,"exception")
 this.jo=F.Wi(this,C.ne,this.jo,y)}if(z.t(b,"_data")!=null){z=z.t(b,"_data")
@@ -19021,7 +19209,7 @@
 this.bN=y
 if(J.FN(y)===!0)this.bN=this.ct(this,C.YS,this.bN,x)
 y=z.NZ(b,"vmName")===!0?z.t(b,"vmName"):this.bN
-this.GR=this.ct(this,C.Tc,this.GR,y)
+this.GR=this.ct(this,C.KS,this.GR,y)
 if(c)return
 this.qu=!0
 D.kT(b,J.aT(this.x8))
@@ -19108,7 +19296,7 @@
 y=z.t(b,"name")
 this.bN=this.ct(this,C.YS,this.bN,y)
 y=z.NZ(b,"vmName")===!0?z.t(b,"vmName"):this.bN
-this.GR=this.ct(this,C.Tc,this.GR,y)
+this.GR=this.ct(this,C.KS,this.GR,y)
 if(c)return
 this.qu=!0
 D.kT(b,J.aT(this.x8))
@@ -19170,57 +19358,105 @@
 "^":"ZzQ+Pi;",
 $isd3:true},
 uq:{
-"^":"Zqa;df,lA,MD,ni,bN:di@,F6,cM,oI,dG,Rf,z0,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
+"^":"Zqa;df,MD,lA,fQ,ni,Iv,bN:di@,cM,F6,oI,dG,Rf,z0,TG,tk,FA,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
 gUP:function(){return this.df},
 sUP:function(a){this.df=F.Wi(this,C.Wt,this.df,a)},
-gPE:function(){return this.lA},
 gyT:function(a){return this.MD},
+gPE:function(){return this.lA},
+gSS:function(){return this.fQ},
 gwz:function(){return this.ni},
 swz:function(a){this.ni=F.Wi(this,C.aw,this.ni,a)},
+gu5:function(){return this.Iv},
+su5:function(a){this.Iv=F.Wi(this,C.mM,this.Iv,a)},
 goc:function(a){return this.di},
 soc:function(a,b){this.di=F.Wi(this,C.YS,this.di,b)},
-gCY:function(){return this.F6},
-sCY:function(a){this.F6=F.Wi(this,C.hx,this.F6,a)},
 gB:function(a){return this.cM},
 sB:function(a,b){this.cM=F.Wi(this,C.Wn,this.cM,b)},
+gCY:function(){return this.F6},
+sCY:function(a){this.F6=F.Wi(this,C.hx,this.F6,a)},
 gtJ:function(){return this.oI},
 stJ:function(a){this.oI=F.Wi(this,C.fV,this.oI,a)},
 gbA:function(){return this.dG},
 gP9:function(a){return this.Rf},
 sP9:function(a,b){this.Rf=F.Wi(this,C.mw,this.Rf,b)},
+gCM:function(){return this.TG},
+sCM:function(a){this.TG=F.Wi(this,C.Tc,this.TG,a)},
+gnl:function(a){return this.tk},
+snl:function(a,b){this.tk=F.Wi(this,C.z6,this.tk,b)},
+gP:function(a){return this.FA},
+sP:function(a,b){this.FA=F.Wi(this,C.zd,this.FA,b)},
 gBF:function(){return this.ni!=null},
 R5:function(a,b,c){var z,y
 D.kT(b,J.aT(this.x8))
 z=J.U6(b)
 y=z.t(b,"class")
 this.df=F.Wi(this,C.Wt,this.df,y)
-y=z.t(b,"valueAsString")
-this.lA=F.Wi(this,C.Db,this.lA,y)
 y=z.t(b,"size")
 this.MD=F.Wi(this,C.da,this.MD,y)
+y=z.t(b,"valueAsString")
+this.lA=F.Wi(this,C.Db,this.lA,y)
+y=J.xC(z.t(b,"valueAsStringIsTruncated"),!0)
+this.fQ=F.Wi(this,C.aF,this.fQ,y)
 y=z.t(b,"closureFunc")
 this.ni=F.Wi(this,C.aw,this.ni,y)
+y=z.t(b,"closureCtxt")
+this.Iv=F.Wi(this,C.mM,this.Iv,y)
 y=z.t(b,"name")
 this.di=F.Wi(this,C.YS,this.di,y)
+y=z.t(b,"length")
+this.cM=F.Wi(this,C.Wn,this.cM,y)
 if(c)return
 y=z.t(b,"nativeFields")
 this.dG=F.Wi(this,C.uw,this.dG,y)
 y=z.t(b,"fields")
 this.oI=F.Wi(this,C.fV,this.oI,y)
-y=z.t(b,"length")
-this.cM=F.Wi(this,C.Wn,this.cM,y)
 y=z.t(b,"elements")
 this.Rf=F.Wi(this,C.mw,this.Rf,y)
 y=z.t(b,"type_class")
 this.F6=F.Wi(this,C.hx,this.F6,y)
-z=z.t(b,"user_name")
-this.z0=F.Wi(this,C.ct,this.z0,z)
+y=z.t(b,"user_name")
+this.z0=F.Wi(this,C.Gy,this.z0,y)
+y=z.t(b,"referent")
+this.TG=F.Wi(this,C.Tc,this.TG,y)
+y=z.t(b,"key")
+this.tk=F.Wi(this,C.z6,this.tk,y)
+z=z.t(b,"value")
+this.FA=F.Wi(this,C.zd,this.FA,z)
 this.qu=!0},
 bu:[function(a){var z=this.lA
 return"Instance("+H.d(z!=null?z:"a "+H.d(J.DA(this.df)))+")"},"$0","gCR",0,0,73]},
 Zqa:{
 "^":"af+Pi;",
 $isd3:true},
+lI:{
+"^":"D3i;df,MD,Jx,cM,A6,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
+gUP:function(){return this.df},
+sUP:function(a){this.df=F.Wi(this,C.Wt,this.df,a)},
+gyT:function(a){return this.MD},
+gqH:function(){return this.Jx},
+sqH:function(a){this.Jx=F.Wi(this,C.BV,this.Jx,a)},
+gB:function(a){return this.cM},
+sB:function(a,b){this.cM=F.Wi(this,C.Wn,this.cM,b)},
+gZ3:function(){return this.A6},
+R5:function(a,b,c){var z,y
+D.kT(b,J.aT(this.x8))
+z=J.U6(b)
+y=z.t(b,"size")
+this.MD=F.Wi(this,C.da,this.MD,y)
+y=z.t(b,"length")
+this.cM=F.Wi(this,C.Wn,this.cM,y)
+y=z.t(b,"parent")
+this.Jx=F.Wi(this,C.BV,this.Jx,y)
+if(c)return
+y=z.t(b,"class")
+this.df=F.Wi(this,C.Wt,this.df,y)
+z=z.t(b,"variables")
+this.A6=F.Wi(this,C.xw,this.A6,z)
+this.qu=!0},
+bu:[function(a){return"Context("+H.d(this.cM)+")"},"$0","gCR",0,0,73]},
+D3i:{
+"^":"af+Pi;",
+$isd3:true},
 ma:{
 "^":"a;Sf",
 bu:[function(a){return this.Sf},"$0","gCR",0,0,76],
@@ -19272,7 +19508,7 @@
 y=z.t(b,"name")
 this.bN=this.ct(this,C.YS,this.bN,y)
 y=z.NZ(b,"vmName")===!0?z.t(b,"vmName"):this.bN
-this.GR=this.ct(this,C.Tc,this.GR,y)
+this.GR=this.ct(this,C.KS,this.GR,y)
 D.kT(b,J.aT(this.x8))
 y=z.NZ(b,"owningClass")===!0?z.t(b,"owningClass"):null
 this.Pp=F.Wi(this,C.YV,this.Pp,y)
@@ -19350,8 +19586,8 @@
 y.$builtinTypeInfo=[H.u3(z,0)]
 for(;y.G();)switch(y.Ff){case"{":case"}":case"(":case")":case";":break
 default:return!1}return!0},y8:function(a){var z,y,x,w
-z=J.It(a,new H.VR("(\\s)+",H.v4("(\\s)+",!1,!0,!1),null,null))
-for(y=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);y.G();){x=J.It(y.Ff,new H.VR("(\\b)",H.v4("(\\b)",!1,!0,!1),null,null))
+z=J.BQ(a,new H.VR("(\\s)+",H.v4("(\\s)+",!1,!0,!1),null,null))
+for(y=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);y.G();){x=J.BQ(y.Ff,new H.VR("(\\b)",H.v4("(\\b)",!1,!0,!1),null,null))
 w=new H.a7(x,x.length,0,null)
 w.$builtinTypeInfo=[H.u3(x,0)]
 for(;w.G();)if(!D.Fu(w.Ff))return!1}return!0},NQ:function(a,b,c){var z=new D.c2(a,b,c,null,null,!0,null,null)
@@ -19384,7 +19620,7 @@
 this.yc=w
 this.bN=this.ct(this,C.YS,this.bN,w)
 w=this.zD
-this.GR=this.ct(this,C.Tc,this.GR,w)
+this.GR=this.ct(this,C.KS,this.GR,w)
 if(c)return
 this.Aj(z.t(b,"source"))
 this.YG(z.t(b,"tokenPosTable"))
@@ -19444,7 +19680,7 @@
 Aj:function(a){var z,y,x,w
 this.qu=!1
 if(a==null)return
-z=J.It(a,"\n")
+z=J.BQ(a,"\n")
 if(z.length===0)return
 this.qu=!0
 y=this.Gd
@@ -19489,7 +19725,7 @@
 gEB:function(){return this.dh},
 gUB:function(){return J.xC(this.Yu,0)},
 gX1:function(){return this.uH.XG.length>0},
-dV:[function(){var z,y
+xtx:[function(){var z,y
 z=this.Yu
 y=J.x(z)
 if(y.n(z,0))return""
@@ -19499,14 +19735,14 @@
 z=a.gn3().LL.t(0,this.Yu)
 if(z==null)return""
 if(J.xC(z.gfF(),z.gDu()))return""
-return D.dJ(z.gfF(),a.glt())+" ("+H.d(z.gfF())+")"},"$1","gcQ",2,0,214,78],
+return D.Tn(z.gfF(),a.glt())+" ("+H.d(z.gfF())+")"},"$1","gcQ",2,0,219,78],
 P7:[function(a){var z
 if(a==null)return""
 z=a.gn3().LL.t(0,this.Yu)
 if(z==null)return""
-return D.dJ(z.gDu(),a.glt())+" ("+H.d(z.gDu())+")"},"$1","gGK",2,0,214,78],
+return D.Tn(z.gDu(),a.glt())+" ("+H.d(z.gDu())+")"},"$1","gGK",2,0,219,78],
 lF:function(){var z,y,x,w
-y=J.It(this.u0," ")
+y=J.BQ(this.u0," ")
 x=y.length
 if(x!==2)return 0
 if(1>=x)return H.e(y,1)
@@ -19528,7 +19764,7 @@
 this.nq(this,z)}this.dh=v
 return}}N.QM("").YX("Could not find instruction at "+x.WZ(y,16))},
 $isQ4:true,
-static:{dJ:function(a,b){return C.CD.Sy(100*J.L9(a,b),2)+"%"}}},
+static:{Tn:function(a,b){return C.CD.Sy(100*J.L9(a,b),2)+"%"}}},
 WAE:{
 "^":"a;uX",
 bu:[function(a){return this.uX},"$0","gCR",0,0,73],
@@ -19540,18 +19776,18 @@
 else if(z.n(a,"Tag"))return C.Z7
 N.QM("").j2("Unknown code kind "+H.d(a))
 throw H.b(P.a9())}}},
-Fc:{
+ta:{
 "^":"a;tT>,Av<",
-$isFc:true},
+$ista:true},
 D5:{
 "^":"a;tT>,Av<,ks>,Jv",
 $isD5:true},
 kx:{
-"^":"D3i;I0,xM,Du<,fF<,vg,uE,VS,hw,va<,n3<,mM,qH,fo,uG,ar,MH,oc*,TE@,Mk,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
+"^":"Pqb;I0,xM,Du<,fF<,vg,uE,VS,hw,va<,n3<,mM,rF,fo,uG,ar,MH,oc*,TE@,Mk,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
 gfY:function(a){return this.I0},
 glt:function(){return this.xM},
 gS7:function(){return this.mM},
-gan:function(){return this.qH},
+gan:function(){return this.rF},
 gL1:function(){return this.fo},
 sL1:function(a){this.fo=F.Wi(this,C.zO,this.fo,a)},
 gig:function(a){return this.uG},
@@ -19563,7 +19799,7 @@
 gM8:function(){return!0},
 P8:[function(a){var z,y
 this.ar=F.Wi(this,C.PX,this.ar,a)
-for(z=this.va,z=z.gA(z);z.G();)for(y=z.Ff.guH(),y=y.gA(y);y.G();)y.Ff.bR(a)},"$1","gH8",2,0,215,216],
+for(z=this.va,z=z.gA(z);z.G();)for(y=z.Ff.guH(),y=y.gA(y);y.G();)y.Ff.bR(a)},"$1","gH8",2,0,220,221],
 OF:function(){if(this.ar!=null)return
 if(!J.xC(this.I0,C.l8))return
 var z=this.uG
@@ -19581,7 +19817,7 @@
 w=H.BU(z.t(b,y),null,null)
 v=H.BU(z.t(b,y+1),null,null)
 if(w>>>0!==w||w>=c.length)return H.e(c,w)
-a.push(new D.Fc(c[w],v))
+a.push(new D.ta(c[w],v))
 y+=2}H.ig(a,new D.fx())},
 Il:function(a,b,c){var z,y
 this.xM=F.Wi(this,C.kr,this.xM,c)
@@ -19595,7 +19831,7 @@
 z=D.RA(this.fF,this.xM)+" ("+H.d(this.fF)+")"
 this.mM=F.Wi(this,C.eF,this.mM,z)
 z=D.RA(this.Du,this.xM)+" ("+H.d(this.Du)+")"
-this.qH=F.Wi(this,C.uU,this.qH,z)},
+this.rF=F.Wi(this,C.uU,this.rF,z)},
 R5:function(a,b,c){var z,y,x,w,v,u
 z=J.U6(b)
 this.oc=z.t(b,"name")
@@ -19613,7 +19849,7 @@
 y=x.god(y).Qn(z.t(b,"objectPool"))
 this.fo=F.Wi(this,C.zO,this.fo,y)
 v=z.t(b,"disassembly")
-if(v!=null)this.u5(v)
+if(v!=null)this.cr(v)
 u=z.t(b,"descriptors")
 if(u!=null)this.Xd(J.UQ(u,"members"))
 z=this.va.XG
@@ -19621,7 +19857,7 @@
 z=z.length!==0&&J.xC(this.I0,C.l8)
 this.Mk=F.Wi(this,C.zS,this.Mk,z)},
 gUa:function(){return this.Mk},
-u5:function(a){var z,y,x,w,v,u,t,s
+cr:function(a){var z,y,x,w,v,u,t,s
 z=this.va
 z.V1(z)
 y=J.U6(a)
@@ -19666,7 +19902,7 @@
 gqy:function(){return J.xC(this.I0,C.l8)},
 $iskx:true,
 static:{RA:function(a,b){return C.CD.Sy(100*J.L9(a,b),2)+"%"}}},
-D3i:{
+Pqb:{
 "^":"af+Pi;",
 $isd3:true},
 Em:{
@@ -19675,7 +19911,7 @@
 z=this.a
 y=J.zE(z.uG)
 if(y==null)return
-J.SK(y).ml(z.gH8())},"$1",null,2,0,null,217,"call"],
+J.SK(y).ml(z.gH8())},"$1",null,2,0,null,222,"call"],
 $isEH:true},
 fx:{
 "^":"TpZ:81;",
@@ -19692,7 +19928,7 @@
 N.QM("").j2("Unknown socket kind "+H.d(a))
 throw H.b(P.a9())}}},
 WP:{
-"^":"Pqb;ip@,jel,IHj,I0,vu,DB,XK,FH,L7,zw,tO,HO,u8,EC,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
+"^":"nla;ip@,jel,IHj,I0,vu,DB,XK,FH,L7,zw,tO,HO,u8,EC,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
 gjm:function(){return!0},
 gHY:function(){return J.xC(this.I0,C.FJ)},
 gfY:function(a){return this.I0},
@@ -19711,7 +19947,7 @@
 y=z.t(b,"name")
 this.bN=this.ct(this,C.YS,this.bN,y)
 y=z.t(b,"name")
-this.GR=this.ct(this,C.Tc,this.GR,y)
+this.GR=this.ct(this,C.KS,this.GR,y)
 y=D.AR(z.t(b,"kind"))
 this.I0=F.Wi(this,C.Lc,this.I0,y)
 if(c)return
@@ -19738,14 +19974,14 @@
 y=z.t(b,"fd")
 this.zw=F.Wi(this,C.R3,this.zw,y)
 this.ip=z.t(b,"owner")}},
-Pqb:{
+nla:{
 "^":"af+Pi;",
 $isd3:true},
 G9:{
 "^":"a;P>,Fl<",
 $isG9:true},
 YX:{
-"^":"nla;L5,mw@,Jk<,wE,Qd,FA,zn,LV,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
+"^":"Fba;L5,mw@,Jk<,wE,Qd,FA,zn,LV,Vg,fn,x8,TU,oU,JK,qu,bN,GR,mQ,Vg,fn",
 gjm:function(){return!0},
 gM8:function(){return!1},
 ghM:function(){return this.wE},
@@ -19771,7 +20007,7 @@
 y=z.t(b,"description")
 this.Qd=F.Wi(this,C.LS,this.Qd,y)
 y=z.t(b,"name")
-this.GR=this.ct(this,C.Tc,this.GR,y)
+this.GR=this.ct(this,C.KS,this.GR,y)
 y=z.t(b,"value")
 this.FA=F.Wi(this,C.zd,this.FA,y)
 y=z.t(b,"min")
@@ -19780,7 +20016,7 @@
 this.LV=F.Wi(this,C.qi,this.LV,z)},
 bu:[function(a){return"ServiceMetric("+H.d(this.TU)+")"},"$0","gCR",0,0,73],
 $isYX:true},
-nla:{
+Fba:{
 "^":"af+Pi;",
 $isd3:true},
 W1:{
@@ -19788,7 +20024,7 @@
 Gv:function(){var z=this.Cb
 if(z!=null)z.Gv()
 this.Cb=null},
-XM:[function(a,b){var z,y,x,w
+Y0:[function(a,b){var z,y,x,w
 for(z=this.Jb,z=H.VM(new H.a7(z,z.length,0,null),[H.u3(z,0)]);z.G();){y=J.LE(z.Ff)
 y.toString
 x=$.X3
@@ -19802,7 +20038,7 @@
 z=J.Vm(a)
 y=new P.iP(Date.now(),!1)
 y.EK()
-a.NT(new D.G9(z,y))},"$1",null,2,0,null,163,"call"],
+a.NT(new D.G9(z,y))},"$1",null,2,0,null,166,"call"],
 $isEH:true},
 Qf:{
 "^":"TpZ:81;a,b",
@@ -19881,7 +20117,7 @@
 return}y=v.gqT().MM
 if(y.YM!==0)H.vh(P.w("Future already completed"))
 y.Xf(w)},"$1","gM3",2,0,19],
-ck:function(a){a.aN(0,new L.dV(this))
+ck:function(a){a.aN(0,new L.aZ(this))
 a.V1(0)},
 M0:function(){var z=this.Td
 if(z.X5>0){N.QM("").To("Cancelling all pending requests.")
@@ -19898,9 +20134,9 @@
 if(!J.Vr(z.gjO(b),"/profile/tag"))N.QM("").To("GET "+H.d(z.gjO(b))+" from "+H.d(this.N.gw8()))
 this.Td.u(0,a,b)
 y=this.N.gA9()===!0?C.xr.KP(P.EF(["id",H.BU(a,null,null),"method","Dart.observatoryQuery","params",P.EF(["id",a,"query",z.gjO(b)],null,null)],null,null)):C.xr.KP(P.EF(["seq",a,"request",z.gjO(b)],null,null))
-this.Ra.bs.send(y)},"$2","ge8",4,0,218]},
+this.Ra.bs.send(y)},"$2","ge8",4,0,223]},
 jF:{
-"^":"TpZ:219;a",
+"^":"TpZ:224;a",
 $1:[function(a){var z,y,x,w,v,u,t
 z=J.RE(a)
 y=z.mt(a,0,C.it)
@@ -19909,7 +20145,7 @@
 v=z.gVl(a)
 if(typeof v!=="number")return v.g()
 w.toString
-u=x.Ur.Sw(H.GG(w,v+8,y))
+u=x.Ur.Sw(H.z4(w,v+8,y))
 t=C.jn.g(8,y)
 v=z.gbg(a)
 w=z.gVl(a)
@@ -19918,8 +20154,8 @@
 if(typeof z!=="number")return z.W()
 x.hQ(u,J.cm(v,w+t,z-t))},"$1",null,2,0,null,15,"call"],
 $isEH:true},
-dV:{
-"^":"TpZ:220;a",
+aZ:{
+"^":"TpZ:225;a",
 $2:function(a,b){var z,y
 z=b.gqT()
 y=C.xr.KP(P.EF(["type","ServiceException","id","","kind","NetworkException","message","WebSocket disconnected"],null,null))
@@ -19929,7 +20165,7 @@
 $isEH:true}}],["","",,R,{
 "^":"",
 zM:{
-"^":"V53;S4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V56;S4,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gkc:function(a){return a.S4},
 skc:function(a,b){a.S4=this.ct(a,C.yh,a.S4,b)},
 static:{qa:function(a){var z,y,x,w
@@ -19948,12 +20184,12 @@
 C.U0.LX(a)
 C.U0.XI(a)
 return a}}},
-V53:{
+V56:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,D,{
 "^":"",
 Rk:{
-"^":"V54;Xc,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V57;Xc,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gja:function(a){return a.Xc},
 sja:function(a,b){a.Xc=this.ct(a,C.ne,a.Xc,b)},
 static:{bZp:function(a){var z,y,x,w
@@ -19972,7 +20208,7 @@
 C.Vd.LX(a)
 C.Vd.XI(a)
 return a}}},
-V54:{
+V57:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,U,{
 "^":"",
@@ -19981,19 +20217,19 @@
 Tc:function(a,b,c,d,e){var z=W.P0(a,null)
 this.bs=z
 z=H.VM(new W.RO(z,C.d6.fA,!1),[null])
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(new U.lo(e)),z.el),[H.u3(z,0)]).DN()
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(new U.lo(e)),z.el),[H.u3(z,0)]).DN()
 z=this.bs
 z.toString
 z=H.VM(new W.RO(z,C.MD.fA,!1),[null])
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(new U.j3(d)),z.el),[H.u3(z,0)]).DN()
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(new U.j3(d)),z.el),[H.u3(z,0)]).DN()
 z=this.bs
 z.toString
 z=H.VM(new W.RO(z,C.JL.fA,!1),[null])
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(new U.Fz(b)),z.el),[H.u3(z,0)]).DN()
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(new U.Fz(b)),z.el),[H.u3(z,0)]).DN()
 z=this.bs
 z.toString
 z=H.VM(new W.RO(z,C.ph.fA,!1),[null])
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(new U.oy(c)),z.el),[H.u3(z,0)]).DN()},
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(new U.oy(c)),z.el),[H.u3(z,0)]).DN()},
 wR:function(a,b){this.bs.send(b)},
 xO:function(a){this.bs.close()},
 OI:function(a){var z,y
@@ -20003,18 +20239,18 @@
 return y.gqG(y).ml(new U.OW(z))}},
 lo:{
 "^":"TpZ:12;a",
-$1:[function(a){return this.a.$0()},"$1",null,2,0,null,221,"call"],
+$1:[function(a){return this.a.$0()},"$1",null,2,0,null,226,"call"],
 $isEH:true},
 j3:{
 "^":"TpZ:12;b",
-$1:[function(a){return this.b.$0()},"$1",null,2,0,null,222,"call"],
+$1:[function(a){return this.b.$0()},"$1",null,2,0,null,227,"call"],
 $isEH:true},
 Fz:{
 "^":"TpZ:12;c",
-$1:[function(a){return this.c.$0()},"$1",null,2,0,null,222,"call"],
+$1:[function(a){return this.c.$0()},"$1",null,2,0,null,227,"call"],
 $isEH:true},
 oy:{
-"^":"TpZ:223;d",
+"^":"TpZ:228;d",
 $1:[function(a){return this.d.$1(J.Qd(a))},"$1",null,2,0,null,87,"call"],
 $isEH:true},
 OW:{
@@ -20038,7 +20274,7 @@
 z=this.S3
 v=z.t(0,y)
 z.Rz(0,y)
-J.KD(v,w)},"$1","gDi",2,0,19,224],
+J.KD(v,w)},"$1","gDi",2,0,19,229],
 z6:function(a,b){var z,y,x
 z=""+this.yb
 y=P.Fl(null,null)
@@ -20050,19 +20286,19 @@
 J.tT(W.Pv(window.parent),C.xr.KP(y),"*")
 return x.MM},
 ZH:function(){var z=H.VM(new W.RO(window,C.ph.fA,!1),[null])
-H.VM(new W.Ov(0,z.bi,z.fA,W.aF(this.gDi()),z.el),[H.u3(z,0)]).DN()
+H.VM(new W.Ov(0,z.bi,z.fA,W.Yt(this.gDi()),z.el),[H.u3(z,0)]).DN()
 z=this.eG.MM
 if(z.YM!==0)H.vh(P.w("Future already completed"))
 z.Xf(this)}}}],["","",,U,{
 "^":"",
 Ti:{
-"^":"V55;Ll,Sa,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V58;Ll,Sa,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gWA:function(a){return a.Ll},
 sWA:function(a,b){a.Ll=this.ct(a,C.td,a.Ll,b)},
 gl6:function(a){return a.Sa},
 sl6:function(a,b){a.Sa=this.ct(a,C.Zg,a.Sa,b)},
 bc:function(a){var z
-switch(a.Ll.gdr()){case"AllocationProfile":z=W.r3("heap-profile",null)
+switch(J.zH(a.Ll)){case"AllocationProfile":z=W.r3("heap-profile",null)
 J.CJ(z,a.Ll)
 return z
 case"BreakpointList":z=W.r3("breakpoint-list",null)
@@ -20074,6 +20310,9 @@
 case"Code":z=W.r3("code-view",null)
 J.T5(z,a.Ll)
 return z
+case"Context":z=W.r3("context-view",null)
+J.Hf(z,a.Ll)
+return z
 case"Error":z=W.r3("error-view",null)
 J.Qr(z,a.Ll)
 return z
@@ -20089,9 +20328,6 @@
 case"HeapMap":z=W.r3("heap-map",null)
 J.Nf(z,a.Ll)
 return z
-case"LibraryPrefix":case"TypeRef":case"TypeParameter":case"BoundedType":case"Int32x4":case"Float32x4":case"Float64x4":case"TypedData":case"ExternalTypedData":case"Capability":case"ReceivePort":case"SendPort":case"Stacktrace":case"JSRegExp":case"WeakProperty":case"MirrorReference":case"UserTag":case"Type":case"Array":case"Bool":case"Closure":case"Double":case"GrowableObjectArray":case"Instance":case"Smi":case"Mint":case"Null":case"Bigint":case"String":z=W.r3("instance-view",null)
-J.Qy(z,a.Ll)
-return z
 case"IO":z=W.r3("io-view",null)
 J.mU(z,a.Ll)
 return z
@@ -20152,9 +20388,11 @@
 case"VM":z=W.r3("vm-view",null)
 J.NH(z,a.Ll)
 return z
-default:z=W.r3("json-view",null)
+default:if(a.Ll.gNs()||a.Ll.gl5()){z=W.r3("instance-view",null)
+J.Qy(z,a.Ll)
+return z}else{z=W.r3("json-view",null)
 J.wD(z,a.Ll)
-return z}},
+return z}}},
 xJ:[function(a,b){var z,y,x
 this.D4(a)
 z=a.Ll
@@ -20181,11 +20419,11 @@
 C.Uv.LX(a)
 C.Uv.XI(a)
 return a}}},
-V55:{
+V58:{
 "^":"uL+Pi;",
 $isd3:true},
 Um:{
-"^":"V56;dL,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V59;dL,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gBN:function(a){return a.dL},
 sBN:function(a,b){a.dL=this.ct(a,C.nE,a.dL,b)},
 static:{T21:function(a){var z,y,x,w
@@ -20204,21 +20442,21 @@
 C.Uav.LX(a)
 C.Uav.XI(a)
 return a}}},
-V56:{
+V59:{
 "^":"uL+Pi;",
 $isd3:true},
 VZ:{
-"^":"V57;GW,C7,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V60;GW,C7,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gIr:function(a){return a.GW},
 ez:function(a,b){return this.gIr(a).$1(b)},
 sIr:function(a,b){a.GW=this.ct(a,C.SR,a.GW,b)},
 git:function(a){return a.C7},
 sit:function(a,b){a.C7=this.ct(a,C.B0,a.C7,b)},
-hF:[function(a,b){return!!J.x(b).$isT8},"$1","gEE",2,0,93,163],
-qc:[function(a,b){return!!J.x(b).$isWO},"$1","gK4",2,0,93,163],
+hF:[function(a,b){return!!J.x(b).$isT8},"$1","gEE",2,0,93,166],
+Cpp:[function(a,b){return!!J.x(b).$isWO},"$1","gK4",2,0,93,166],
 Gn:[function(a){return this.gus(a)},"$0","gyX",0,0,76],
 vQ:[function(a,b,c){a.C7=this.ct(a,C.B0,a.C7,b)
-c.$0()},"$2","gus",4,0,161,225,102],
+c.$0()},"$2","gus",4,0,230,231,102],
 static:{Wzx:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -20233,23 +20471,23 @@
 a.ZQ=y
 a.qJ=x
 a.wy=w
-C.um.LX(a)
-C.um.XI(a)
+C.OX.LX(a)
+C.OX.XI(a)
 return a}}},
-V57:{
+V60:{
 "^":"uL+Pi;",
 $isd3:true},
 WG:{
-"^":"V58;Jg,C7,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V61;Jg,C7,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gjx:function(a){return a.Jg},
 sjx:function(a,b){a.Jg=this.ct(a,C.vp,a.Jg,b)},
 git:function(a){return a.C7},
 sit:function(a,b){a.C7=this.ct(a,C.B0,a.C7,b)},
-hF:[function(a,b){return!!J.x(b).$isT8},"$1","gEE",2,0,93,163],
-qc:[function(a,b){return!!J.x(b).$isWO},"$1","gK4",2,0,93,163],
+hF:[function(a,b){return!!J.x(b).$isT8},"$1","gEE",2,0,93,166],
+Cpp:[function(a,b){return!!J.x(b).$isWO},"$1","gK4",2,0,93,166],
 Gn:[function(a){return this.gus(a)},"$0","gyX",0,0,76],
 vQ:[function(a,b,c){a.C7=this.ct(a,C.B0,a.C7,b)
-c.$0()},"$2","gus",4,0,161,225,102],
+c.$0()},"$2","gus",4,0,230,231,102],
 static:{z0:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -20267,7 +20505,7 @@
 C.DX.LX(a)
 C.DX.XI(a)
 return a}}},
-V58:{
+V61:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,Q,{
 "^":"",
@@ -20280,16 +20518,18 @@
 Qj:[function(a,b){this.ct(a,C.Fh,"",this.gO3(a))
 this.ct(a,C.YS,[],this.goc(a))
 this.ct(a,C.pu,0,1)
-this.ct(a,C.k6,"",this.gXt(a))},"$1","gLe",2,0,19,59],
-gO3:function(a){var z
-if(this.gnv(a)==null)return"NULL REF"
-z=J.Ds(this.gnv(a))
+this.ct(a,C.k6,"",this.gJp(a))},"$1","gLe",2,0,19,59],
+gO3:function(a){var z=a.tY
+if(z==null)return"NULL REF"
+z=J.Ds(z)
 this.gi6(a).Z6
 return"#"+H.d(z)},
-gXt:function(a){if(this.gnv(a)==null)return"NULL REF"
-return this.gnv(a).gTE()},
-goc:function(a){if(this.gnv(a)==null)return"NULL REF"
-return J.DA(this.gnv(a))},
+gJp:function(a){var z=a.tY
+if(z==null)return"NULL REF"
+return z.gTE()},
+goc:function(a){var z=a.tY
+if(z==null)return"NULL REF"
+return J.DA(z)},
 gWw:function(a){return J.FN(this.goc(a))},
 static:{lKH:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
@@ -20312,16 +20552,19 @@
 "^":"uL+Pi;",
 $isd3:true},
 f7:{
-"^":"V59;tY,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V62;tY,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gnv:function(a){return a.tY},
 snv:function(a,b){a.tY=this.ct(a,C.kY,a.tY,b)},
 pY:function(a){var z
-switch(a.tY.gdr()){case"Class":z=W.r3("class-ref",null)
+switch(J.zH(a.tY)){case"Class":z=W.r3("class-ref",null)
 J.PP(z,a.tY)
 return z
 case"Code":z=W.r3("code-ref",null)
 J.PP(z,a.tY)
 return z
+case"Context":z=W.r3("context-ref",null)
+J.PP(z,a.tY)
+return z
 case"Error":z=W.r3("error-ref",null)
 J.PP(z,a.tY)
 return z
@@ -20334,12 +20577,11 @@
 case"Library":z=W.r3("library-ref",null)
 J.PP(z,a.tY)
 return z
-case"Array":case"Bigint":case"Bool":case"Closure":case"Double":case"GrowableObjectArray":case"Instance":case"Mint":case"Null":case"Sentinel":case"Smi":case"String":case"Type":z=W.r3("instance-ref",null)
+default:if(a.tY.gNs()||a.tY.gl5()){z=W.r3("instance-ref",null)
 J.PP(z,a.tY)
-return z
-default:z=W.r3("span",null)
+return z}else{z=W.r3("span",null)
 J.t3(z,"<<Unknown service ref: "+H.d(a.tY)+">>")
-return z}},
+return z}}},
 Qj:[function(a,b){var z,y,x
 this.D4(a)
 z=a.tY
@@ -20365,7 +20607,7 @@
 C.J9.LX(a)
 C.J9.XI(a)
 return a}}},
-V59:{
+V62:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,Q,{
 "^":"",
@@ -20377,8 +20619,8 @@
 sEu:function(a,b){a.IK=this.ct(a,C.lH,a.IK,b)},
 gRY:function(a){return a.bP},
 sRY:function(a,b){a.bP=this.ct(a,C.zU,a.bP,b)},
-oew:[function(a,b,c,d){var z=J.K0((a.shadowRoot||a.webkitShadowRoot).querySelector("#slide-switch"))
-a.kF=this.ct(a,C.bk,a.kF,z)},"$3","gQU",6,0,115,2,226,107],
+RC:[function(a,b,c,d){var z=J.K0((a.shadowRoot||a.webkitShadowRoot).querySelector("#slide-switch"))
+a.kF=this.ct(a,C.bk,a.kF,z)},"$3","gQU",6,0,116,2,232,107],
 static:{AlS:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -20468,7 +20710,7 @@
 z=H.KT(z,[z,z,z]).Zg(a)
 if(z)return 3
 return 4},
-aW:function(a){var z,y
+Zpg:function(a){var z,y
 z=H.G3()
 y=H.KT(z,[z,z,z]).Zg(a)
 if(y)return 3
@@ -20528,84 +20770,84 @@
 $0:function(){return P.Fl(null,null)},
 $isEH:true},
 fH:{
-"^":"a;JE",
-Gp:function(a,b){var z=this.JE.II.t(0,b)
-if(z==null)throw H.b(O.lA("getter \""+H.d(b)+"\" in "+H.d(a)))
+"^":"a;xV",
+Gp:function(a,b){var z=this.xV.II.t(0,b)
+if(z==null)throw H.b(O.Fm("getter \""+H.d(b)+"\" in "+H.d(a)))
 return z.$1(a)},
-Cq:function(a,b,c){var z=this.JE.F8.t(0,b)
-if(z==null)throw H.b(O.lA("setter \""+H.d(b)+"\" in "+H.d(a)))
+Cq:function(a,b,c){var z=this.xV.F8.t(0,b)
+if(z==null)throw H.b(O.Fm("setter \""+H.d(b)+"\" in "+H.d(a)))
 z.$2(a,c)},
 Ck:function(a,b,c,d,e){var z,y,x,w,v,u,t,s
 z=null
-x=this.JE
+x=this.xV
 if(!!J.x(a).$isLz){w=x.F3.t(0,a)
 z=w==null?null:J.UQ(w,b)}else{v=x.II.t(0,b)
-z=v==null?null:v.$1(a)}if(z==null)throw H.b(O.lA("method \""+H.d(b)+"\" in "+H.d(a)))
+z=v==null?null:v.$1(a)}if(z==null)throw H.b(O.Fm("method \""+H.d(b)+"\" in "+H.d(a)))
 y=null
 if(d){u=X.na(z)
 if(u>3){y="we tried to adjust the arguments for calling \""+H.d(b)+"\", but we couldn't determine the exact number of arguments it expects (it is more than 3)."
-c=X.Na(c,u,P.y(u,J.q8(c)))}else{t=X.aW(z)
+c=X.Na(c,u,P.y(u,J.q8(c)))}else{t=X.Zpg(z)
 x=t>=0?t:J.q8(c)
 c=X.Na(c,u,x)}}try{x=H.eC(z,c,P.Te(null))
 return x}catch(s){if(!!J.x(H.Ru(s)).$isJS){if(y!=null)P.FL(y)
 throw s}else throw s}}},
 bY:{
-"^":"a;JE",
+"^":"a;xV",
 xs:function(a,b){var z,y,x
 if(J.xC(a,b)||J.xC(b,C.AP))return!0
-for(z=this.JE,y=z.ZG;!J.xC(a,C.AP);a=x){x=y.t(0,a)
+for(z=this.xV,y=z.ZG;!J.xC(a,C.AP);a=x){x=y.t(0,a)
 if(J.xC(x,b))return!0
 if(x==null){if(!z.nX)return!1
-throw H.b(O.lA("superclass of \""+H.d(a)+"\" ("+H.d(x)+")"))}}return!1},
+throw H.b(O.Fm("superclass of \""+H.d(a)+"\" ("+H.d(x)+")"))}}return!1},
 UK:function(a,b){var z=this.NW(a,b)
 return z!=null&&z.gUA()&&z.gFo()!==!0},
 n6:function(a,b){var z,y,x
-z=this.JE
+z=this.xV
 y=z.of.t(0,a)
 if(y==null){if(!z.nX)return!1
-throw H.b(O.lA("declarations for "+H.d(a)))}x=J.UQ(y,b)
+throw H.b(O.Fm("declarations for "+H.d(a)))}x=J.UQ(y,b)
 return x!=null&&x.gUA()&&x.gFo()===!0},
 CV:function(a,b){var z=this.NW(a,b)
-if(z==null){if(!this.JE.nX)return
-throw H.b(O.lA("declaration for "+H.d(a)+"."+H.d(b)))}return z},
+if(z==null){if(!this.xV.nX)return
+throw H.b(O.Fm("declaration for "+H.d(a)+"."+H.d(b)))}return z},
 Me:function(a,b,c){var z,y,x,w,v,u
 z=[]
-if(c.Mg){y=this.JE
+if(c.Mg){y=this.xV
 x=y.ZG.t(0,b)
-if(x==null){if(y.nX)throw H.b(O.lA("superclass of \""+H.d(b)+"\""))}else if(!J.xC(x,c.Yx))z=this.Me(0,x,c)}y=this.JE
+if(x==null){if(y.nX)throw H.b(O.Fm("superclass of \""+H.d(b)+"\""))}else if(!J.xC(x,c.Yx))z=this.Me(0,x,c)}y=this.xV
 w=y.of.t(0,b)
 if(w==null){if(!y.nX)return z
-throw H.b(O.lA("declarations for "+H.d(b)))}for(y=J.mY(J.hI(w));y.G();){v=y.gl()
+throw H.b(O.Fm("declarations for "+H.d(b)))}for(y=J.mY(J.hI(w));y.G();){v=y.gl()
 if(!c.kl&&v.gZI())continue
 if(!c.IW&&v.gRS())continue
-if(c.ER&&J.EMK(v)===!0)continue
+if(c.ER&&J.cL(v)===!0)continue
 if(!c.Ja&&v.gUA())continue
 if(c.rM!=null&&c.xZ(0,J.DA(v))!==!0)continue
 u=c.BY
 if(u!=null&&!X.ZO(v.gDv(),u))continue
 z.push(v)}return z},
 NW:function(a,b){var z,y,x,w,v,u
-for(z=this.JE,y=z.ZG,x=z.of;!J.xC(a,C.AP);a=u){w=x.t(0,a)
+for(z=this.xV,y=z.ZG,x=z.of;!J.xC(a,C.AP);a=u){w=x.t(0,a)
 if(w!=null){v=J.UQ(w,b)
 if(v!=null)return v}u=y.t(0,a)
 if(u==null){if(!z.nX)return
-throw H.b(O.lA("superclass of \""+H.d(a)+"\""))}}return}},
+throw H.b(O.Fm("superclass of \""+H.d(a)+"\""))}}return}},
 ut:{
-"^":"a;JE"},
+"^":"a;xV"},
 tk:{
 "^":"a;GB<",
 bu:[function(a){return"Missing "+this.GB+". Code generation for the smoke package seems incomplete."},"$0","gCR",0,0,73],
-static:{lA:function(a){return new O.tk(a)}}}}],["","",,K,{
+static:{Fm:function(a){return new O.tk(a)}}}}],["","",,K,{
 "^":"",
 nm:{
-"^":"V60;xP,rs,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V63;xP,rs,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gM6:function(a){return a.xP},
 sM6:function(a,b){a.xP=this.ct(a,C.rE,a.xP,b)},
 git:function(a){return a.rs},
 sit:function(a,b){a.rs=this.ct(a,C.B0,a.rs,b)},
 Gn:[function(a){return this.gus(a)},"$0","gyX",0,0,76],
 vQ:[function(a,b,c){a.rs=this.ct(a,C.B0,a.rs,b)
-c.$0()},"$2","gus",4,0,161,225,102],
+c.$0()},"$2","gus",4,0,230,231,102],
 static:{ant:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -20623,12 +20865,12 @@
 C.dX.LX(a)
 C.dX.XI(a)
 return a}}},
-V60:{
+V63:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,X,{
 "^":"",
 Vu:{
-"^":"V61;Jl,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V64;Jl,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gtN:function(a){return a.Jl},
 stN:function(a,b){a.Jl=this.ct(a,C.kw,a.Jl,b)},
 pA:[function(a,b){J.LE(a.Jl).wM(b)},"$1","gvC",2,0,19,102],
@@ -20648,7 +20890,7 @@
 C.bg3.LX(a)
 C.bg3.XI(a)
 return a}}},
-V61:{
+V64:{
 "^":"uL+Pi;",
 $isd3:true}}],["","",,M,{
 "^":"",
@@ -20679,12 +20921,12 @@
 x=new M.aY(z)
 return P.jT(P.EF(["open",x.$1(new M.SL(a)),"close",y.$1(new M.no(a)),"discardChanges",y.$1(new M.uD(a)),"setValue",x.$1(new M.Wb(a)),"deliver",y.$1(new M.SLX(a)),"__dartBindable",a],null,null))},
 tA:function(a){var z
-for(;z=J.cP(a),z!=null;a=z);return a},
+for(;z=J.ra5(a),z!=null;a=z);return a},
 cS:function(a,b){var z,y,x,w,v,u
 if(b==null||b==="")return
 z="#"+H.d(b)
 for(;!0;){a=M.tA(a)
-y=$.Tn()
+y=$.nR()
 y.toString
 x=H.vA(a,"expando$values")
 w=x==null?null:H.vA(x,y.V2())
@@ -20693,7 +20935,7 @@
 else{u=J.x(a)
 v=!!u.$isYN||!!u.$isI0||!!u.$ishy?u.Kb(a,b):null}if(v!=null)return v
 if(y)return
-a=w.gfQ()
+a=w.gXD()
 if(a==null)return}},
 nk:function(a,b,c){if(c==null)return
 return new M.iT(a,b,c)},
@@ -20800,7 +21042,7 @@
 else z=!0
 else z=!1
 return z},
-VE:{
+vE:{
 "^":"a;oe",
 op:function(a,b,c){return},
 static:{"^":"ac"}},
@@ -20845,7 +21087,7 @@
 y=this.dn
 x=M.xa(J.UQ(y,M.aR(z,b)))
 y.Ji(b)
-return x},"$1","gUS",2,0,227,58],
+return x},"$1","gUS",2,0,233,58],
 V1:function(a){J.Me(this.gvc(this),this.gUS(this))},
 $asilb:function(){return[P.qU,A.Ap]},
 $asT8:function(){return[P.qU,A.Ap]}},
@@ -20875,7 +21117,7 @@
 $isEH:true},
 Au:{
 "^":"TpZ:12;d",
-$1:[function(a){return this.d.PO([a])},"$1",null,2,0,null,175,"call"],
+$1:[function(a){return this.d.PO([a])},"$1",null,2,0,null,180,"call"],
 $isEH:true},
 no:{
 "^":"TpZ:76;e",
@@ -20887,8 +21129,8 @@
 $isEH:true},
 Wb:{
 "^":"TpZ:12;UI",
-$1:[function(a){J.ta(this.UI,a)
-return a},"$1",null,2,0,null,175,"call"],
+$1:[function(a){J.Fc(this.UI,a)
+return a},"$1",null,2,0,null,180,"call"],
 $isEH:true},
 SLX:{
 "^":"TpZ:76;bK",
@@ -20901,7 +21143,7 @@
 gKB:function(){return this.KB},
 nR:function(a,b,c,d){var z,y
 if(!J.xC(b,"ref"))return M.vy.prototype.nR.call(this,this,b,c,d)
-z=d?c:J.mu(c,new M.Aj(this))
+z=d?c:J.mu(c,new M.De(this))
 J.Vs(this.KB).dA.setAttribute("ref",z)
 this.NB()
 if(d)return
@@ -20941,8 +21183,8 @@
 w=t}s=J.O2(w)
 w=[]
 r=new M.Fi(w,null,null,null)
-q=$.Tn()
-r.fQ=this.KB
+q=$.nR()
+r.XD=this.KB
 r.cA=z
 q.u(0,s,r)
 p=new M.qU9(b,null,null)
@@ -20954,7 +21196,7 @@
 if(m)r.yi=k}p.tA=s.firstChild
 p.MC=s.lastChild
 r.cA=null
-r.fQ=null
+r.XD=null
 return s},
 gk8:function(a){return this.Qk},
 gA0:function(a){return this.Rc},
@@ -20975,7 +21217,8 @@
 if(z)return
 this.XA=null
 this.kr.Oo(null)
-this.kr.OP(null)},
+z=this.kr
+z.OP(z.Tf())},
 V1:function(a){var z,y
 this.Qk=null
 this.Rc=null
@@ -21071,11 +21314,11 @@
 if(J.lL(y).querySelector("base")==null)M.AL(y)}},AL:function(a){var z=a.createElement("base",null)
 J.dc(z,document.baseURI)
 J.lL(a).appendChild(z)}}},
-Aj:{
+De:{
 "^":"TpZ:12;a",
 $1:[function(a){var z=this.a
 J.Vs(z.KB).dA.setAttribute("ref",a)
-z.NB()},"$1",null,2,0,null,228,"call"],
+z.NB()},"$1",null,2,0,null,234,"call"],
 $isEH:true},
 CE:{
 "^":"TpZ:19;",
@@ -21083,21 +21326,21 @@
 $isEH:true},
 DOe:{
 "^":"TpZ:12;",
-$1:[function(a){return H.d(a)+"[template]"},"$1",null,2,0,null,135,"call"],
+$1:[function(a){return H.d(a)+"[template]"},"$1",null,2,0,null,141,"call"],
 $isEH:true},
 Ufa:{
 "^":"TpZ:81;",
 $2:[function(a,b){var z
-for(z=J.mY(a);z.G();)M.Xi(J.l2(z.gl())).NB()},"$2",null,4,0,null,178,13,"call"],
+for(z=J.mY(a);z.G();)M.Xi(J.l2(z.gl())).NB()},"$2",null,4,0,null,183,13,"call"],
 $isEH:true},
 Raa:{
 "^":"TpZ:76;",
 $0:function(){var z=document.createDocumentFragment()
-$.Tn().u(0,z,new M.Fi([],null,null,null))
+$.nR().u(0,z,new M.Fi([],null,null,null))
 return z},
 $isEH:true},
 Fi:{
-"^":"a;dn<,yi<,fQ<,cA<"},
+"^":"a;dn<,yi<,XD<,cA<"},
 iT:{
 "^":"TpZ:12;a,b,c",
 $1:function(a){return this.c.op(a,this.a,this.b)},
@@ -21119,7 +21362,7 @@
 z.push(y)}},
 $isEH:true},
 TGm:{
-"^":"Ap;yQ,tM,nH,dO,vx,Up,h6,BZ,Gi,vj,lH,AB,z1,iz,Mv",
+"^":"Ap;yQ,tM,nH,dO,vx,Up,h6,dz,Gi,vj,lH,AB,z1,iz,Mv",
 ln:function(a){return this.iz.$1(a)},
 TR:function(a,b){return H.vh(P.w("binding already opened"))},
 gP:function(a){return this.h6},
@@ -21131,32 +21374,44 @@
 y=J.x(z)
 if(!!y.$isAp){y.xO(z)
 this.h6=null}},
-FE:function(a,b){var z,y,x
+FE:function(a,b){var z,y,x,w,v
 this.la()
 z=this.yQ.KB
 y=a.Z0
 x=y!=null
-this.BZ=x
+this.dz=x
 this.Gi=a.vJ!=null
 if(x){this.vj=y.au
-y=M.jb("if",y,z,b)
-this.Up=y
-if(this.vj===!0){if(!(null!=y&&!1!==y)){this.OP(null)
-return}}else H.Go(y,"$isAp").TR(0,this.gVN())}if(this.Gi===!0){y=a.vJ
+w=M.jb("if",y,z,b)
+this.Up=w
+y=this.vj===!0
+if(y)x=!(null!=w&&!1!==w)
+else x=!1
+if(x){this.Oo(null)
+return}if(!y)w=H.Go(w,"$isAp").TR(0,this.ge7())}else w=!0
+if(this.Gi===!0){y=a.vJ
 this.lH=y.au
 y=M.jb("repeat",y,z,b)
-this.h6=y}else{y=a.lC
+this.h6=y
+v=y}else{y=a.lC
 this.lH=y.au
 y=M.jb("bind",y,z,b)
-this.h6=y}if(this.lH!==!0)J.mu(y,this.gVN())
-this.OP(null)},
-OP:[function(a){var z,y
-if(this.BZ===!0){z=this.Up
+this.h6=y
+v=y}if(this.lH!==!0)v=J.mu(v,this.gVN())
+if(!(null!=w&&!1!==w)){this.Oo(null)
+return}this.Ca(v)},
+Tf:function(){var z,y
+z=this.h6
+y=this.lH
+return!(null!=y&&y)?J.Vm(z):z},
+YSS:[function(a){if(!(null!=a&&!1!==a)){this.Oo(null)
+return}this.Ca(this.Tf())},"$1","ge7",2,0,19,235],
+OP:[function(a){var z
+if(this.dz===!0){z=this.Up
 if(this.vj!==!0){H.Go(z,"$isAp")
 z=z.gP(z)}if(!(null!=z&&!1!==z)){this.Oo([])
-return}}y=this.h6
-if(this.lH!==!0){H.Go(y,"$isAp")
-y=y.gP(y)}this.Oo(this.Gi!==!0?[y]:y)},"$1","gVN",2,0,19,13],
+return}}this.Ca(a)},"$1","gVN",2,0,19,20],
+Ca:function(a){this.Oo(this.Gi!==!0?[a]:a)},
 Oo:function(a){var z,y
 z=J.x(a)
 if(!z.$isWO)a=!!z.$isQV?z.br(a):[]
@@ -21170,7 +21425,7 @@
 this.LA(G.jj(y,0,J.q8(y),z,0,z.length))},
 Dk:function(a){var z,y,x,w
 if(J.xC(a,-1))return this.yQ.KB
-z=$.Tn()
+z=$.nR()
 y=this.tM
 if(a>>>0!==a||a>=y.length)return H.e(y,a)
 x=z.t(0,y[a]).gyi()
@@ -21182,7 +21437,7 @@
 C8:function(a){var z,y,x,w,v,u,t
 z=this.Dk(J.bI(a,1))
 y=this.Dk(a)
-J.cP(this.yQ.KB)
+J.ra5(this.yQ.KB)
 x=C.Nm.W4(this.tM,a)
 for(w=J.RE(x),v=J.RE(z);!J.xC(y,z);){u=v.guD(z)
 if(u==null?y==null:u===y)y=z
@@ -21193,7 +21448,7 @@
 if(this.vx||J.FN(a)===!0)return
 u=this.yQ
 t=u.KB
-if(J.cP(t)==null){this.xO(0)
+if(J.ra5(t)==null){this.xO(0)
 return}s=this.nH
 Q.Oi(s,this.dO,a)
 z=u.Rc
@@ -21224,14 +21479,14 @@
 l.Nk(k,v)
 x=$.zl()}l=x
 f=this.Dk(h-1)
-e=J.cP(u.KB)
+e=J.ra5(u.KB)
 C.Nm.xe(this.tM,h,l)
-e.insertBefore(l,J.p7(f))}}for(u=q.gUQ(q),u=H.VM(new H.MH(null,J.mY(u.Hb),u.Oh),[H.u3(u,0),H.u3(u,1)]);u.G();)this.vB(u.Ff)},"$1","gSp",2,0,229,230],
+e.insertBefore(l,J.p7(f))}}for(u=q.gUQ(q),u=H.VM(new H.MH(null,J.mY(u.Hb),u.Oh),[H.u3(u,0),H.u3(u,1)]);u.G();)this.vB(u.Ff)},"$1","gSp",2,0,236,237],
 vB:[function(a){var z,y
-z=$.Tn()
+z=$.nR()
 z.toString
 y=H.vA(a,"expando$values")
-for(z=J.mY((y==null?null:H.vA(y,z.V2())).gdn());z.G();)J.yd(z.gl())},"$1","gJO",2,0,231],
+for(z=J.mY((y==null?null:H.vA(y,z.V2())).gdn());z.G();)J.yd(z.gl())},"$1","gJO",2,0,238],
 ud:function(){var z=this.AB
 if(z==null)return
 z.Gv()
@@ -21247,44 +21502,44 @@
 this.vx=!0}}}],["","",,S,{
 "^":"",
 VH2:{
-"^":"a;jG,au<,Ke",
-gqz:function(){return this.jG.length===5},
+"^":"a;qN,au<,ll",
+gqz:function(){return this.qN.length===5},
 gaW:function(){var z,y
-z=this.jG
+z=this.qN
 y=z.length
 if(y===5){if(0>=y)return H.e(z,0)
 if(J.xC(z[0],"")){if(4>=z.length)return H.e(z,4)
 z=J.xC(z[4],"")}else z=!1}else z=!1
 return z},
-gPf:function(){return this.Ke},
+gPf:function(){return this.ll},
 qm:function(a){return this.gPf().$1(a)},
-gB:function(a){return C.jn.BU(this.jG.length,4)},
+gB:function(a){return C.jn.BU(this.qN.length,4)},
 AX:function(a){var z,y
-z=this.jG
+z=this.qN
 y=a*4+1
 if(y>=z.length)return H.e(z,y)
 return z[y]},
 Pn:function(a){var z,y
-z=this.jG
+z=this.qN
 y=a*4+2
 if(y>=z.length)return H.e(z,y)
 return z[y]},
 cf:function(a){var z,y
-z=this.jG
+z=this.qN
 y=a*4+3
 if(y>=z.length)return H.e(z,y)
 return z[y]},
 xTd:[function(a){var z,y,x,w
 if(a==null)a=""
-z=this.jG
+z=this.qN
 if(0>=z.length)return H.e(z,0)
 y=H.d(z[0])+H.d(a)
 x=z.length
 w=C.jn.BU(x,4)*4
 if(w>=x)return H.e(z,w)
-return y+H.d(z[w])},"$1","gSG",2,0,232,20],
+return y+H.d(z[w])},"$1","gSG",2,0,239,20],
 QY:[function(a){var z,y,x,w,v,u,t,s
-z=this.jG
+z=this.qN
 if(0>=z.length)return H.e(z,0)
 y=P.p9(z[0])
 x=C.jn.BU(z.length,4)
@@ -21293,9 +21548,9 @@
 t=v*4
 if(t>=z.length)return H.e(z,t)
 s=z[t]
-y.IN+=typeof s==="string"?s:H.d(s)}return y.IN},"$1","gYF",2,0,233,234],
-l3:function(a,b){this.Ke=this.jG.length===5?this.gSG():this.gYF()},
-static:{"^":"rz5,xN8,t3a,epG,oM,Ftg",j9:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
+y.IN+=typeof s==="string"?s:H.d(s)}return y.IN},"$1","gYF",2,0,240,241],
+l3:function(a,b){this.ll=this.qN.length===5?this.gSG():this.gYF()},
+static:{"^":"rz5,xN8,t3a,epG,UO,Ftg",j9:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
 if(a==null||a.length===0)return
 z=a.length
 for(y=b==null,x=J.U6(a),w=null,v=0,u=!0;v<z;){t=x.XU(a,"{{",v)
@@ -21349,7 +21604,7 @@
 ab:[function(a,b,c){var z=new Z.lX(J.Cl(J.vX(this.NP.giU(),1000000),$.Ji),b,null)
 z.Ir=Z.d8(c)
 J.bi(this.Rk,z)
-return z},function(a,b){return this.ab(a,b,null)},"ZF","$2$map","$1","gtN",2,3,235,22,236,201],
+return z},function(a,b){return this.ab(a,b,null)},"ZF","$2$map","$1","gtN",2,3,242,22,243,206],
 l8:function(){var z=new P.VV(null,null)
 H.Xe()
 $.Ji=$.xG
@@ -21358,12 +21613,12 @@
 this.RV=N.QM("").gSZ().yI(new Z.Ym(this))
 this.NP.CH(0)
 J.Z8(this.Rk)},
-static:{"^":"ax",NY:function(){var z=new Z.KZ(null,null,Q.pT(null,Z.lX),null,null,null)
+static:{"^":"ax",JQ:function(){var z=new Z.KZ(null,null,Q.pT(null,Z.lX),null,null,null)
 z.l8()
 return z}}},
 Ym:{
-"^":"TpZ:167;a",
-$1:[function(a){this.a.ZF(0,a.gOR().oc+": "+H.d(J.Oh(a)))},"$1",null,2,0,null,166,"call"],
+"^":"TpZ:170;a",
+$1:[function(a){this.a.ZF(0,a.gOR().oc+": "+H.d(J.Oh(a)))},"$1",null,2,0,null,169,"call"],
 $isEH:true}}],["","",,G,{
 "^":"",
 GMB:{
@@ -21376,19 +21631,19 @@
 gB:function(a){return this.fO},
 a0:function(a,b,c){var z,y,x
 z=this.D1
-if(z>this.f9.Bx.length)throw H.b(P.N(z))
+if(z>this.f9.vF.length)throw H.b(P.N(z))
 y=this.fO
 if(y!=null){if(typeof y!=="number")return y.C()
 x=y<0}else x=!1
 if(x)throw H.b(P.N(y))
 if(typeof y!=="number")return y.g()
 z=y+z
-if(z>this.f9.Bx.length)throw H.b(P.N(z))},
+if(z>this.f9.vF.length)throw H.b(P.N(z))},
 $asmW:function(){return[null]},
 $asQV:function(){return[null]}},
 vZG:{
 "^":"a;f9,D1,c0",
-gl:function(){return C.xB.j(this.f9.Bx,this.D1)},
+gl:function(){return C.xB.j(this.f9.vF,this.D1)},
 G:function(){return++this.D1<this.c0},
 eR:function(a,b){this.D1+=b}}}],["","",,Z,{
 "^":"",
@@ -21402,7 +21657,7 @@
 y=++z.D1
 x=z.c0
 if(y>=x)return!1
-w=z.f9.Bx
+w=z.f9.vF
 v=C.xB.j(w,y)
 if(v>=55296)y=v>57343&&v<=65535
 else y=!0
@@ -21414,7 +21669,7 @@
 return!0}}}],["","",,U,{
 "^":"",
 LQ:function(a,b,c,d){var z,y,x,w,v,u,t
-z=a.Bx.length-b
+z=a.vF.length-b
 new G.GMB(a,b,z).a0(a,b,c)
 z=b+z
 y=b-1
@@ -21431,7 +21686,7 @@
 return t}}}],["","",,V,{
 "^":"",
 Pa:{
-"^":"V62;GG,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V65;GG,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gN:function(a){return a.GG},
 sN:function(a,b){a.GG=this.ct(a,C.ft,a.GG,b)},
 ghS:function(a){var z=a.GG
@@ -21452,7 +21707,7 @@
 y=new U.KM(H.VM(new P.Zf(P.Dt(null)),[null]),H.VM(new P.Zf(P.Dt(null)),[null]),y,P.L5(null,null,null,P.qU,L.U2),P.L5(null,null,null,P.qU,L.U2),0,!1,new P.GY(!1),new U.hA(null),"unknown","unknown",0,!1,!1,"",null,P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.L5(null,null,null,P.qU,D.af),P.L5(null,null,null,P.qU,D.bv),null,null,null,null,null,null,!1,null,null,null,null,null)
 y.Lw()
 z.swv(0,y)}w=J.Vs(d).dA.getAttribute("href")
-$.Kh.Z6.bo(0,w)},"$3","gkD",6,0,168,87,106,181],
+$.Kh.Z6.bo(0,w)},"$3","gkD",6,0,171,87,106,186],
 Fh:[function(a,b,c,d){var z,y,x,w
 z=$.Kh.m2
 y=a.GG
@@ -21461,7 +21716,7 @@
 z.TV()
 z.TV()
 w=z.wo.IU+".history"
-$.Vy().setItem(w,C.xr.KP(x))},"$3","gFb",6,0,168,87,106,181],
+$.Vy().setItem(w,C.xr.KP(x))},"$3","gFb",6,0,171,87,106,186],
 static:{fXx:function(a){var z,y,x,w
 z=P.L5(null,null,null,P.qU,W.I0)
 y=P.qU
@@ -21478,11 +21733,11 @@
 C.J57.LX(a)
 C.J57.XI(a)
 return a}}},
-V62:{
+V65:{
 "^":"uL+Pi;",
 $isd3:true},
 D2:{
-"^":"V63;ot,YE,E6,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V66;ot,YE,E6,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gvm:function(a){return a.ot},
 svm:function(a,b){a.ot=this.ct(a,C.uX,a.ot,b)},
 gHL:function(a){return a.YE},
@@ -21500,13 +21755,13 @@
 x=new U.KM(H.VM(new P.Zf(P.Dt(null)),[null]),H.VM(new P.Zf(P.Dt(null)),[null]),d,P.L5(null,null,null,P.qU,L.U2),P.L5(null,null,null,P.qU,L.U2),0,!1,new P.GY(!1),new U.hA(null),"unknown","unknown",0,!1,!1,"",null,P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.bK(null,null,!1,null),P.L5(null,null,null,P.qU,D.af),P.L5(null,null,null,P.qU,D.bv),null,null,null,null,null,null,!1,null,null,null,null,null)
 x.Lw()
 y.swv(0,x)
-$.Kh.Z6.bo(0,"#/vm")},"$3","gMt",6,0,115,2,106,107],
-jLH:[function(a,b,c,d){J.fD(b)
-this.iW(a)},"$3","gzG",6,0,115,2,106,107],
+$.Kh.Z6.bo(0,"#/vm")},"$3","gMt",6,0,116,2,106,107],
+pe:[function(a,b,c,d){J.fD(b)
+this.iW(a)},"$3","gzG",6,0,116,2,106,107],
 iW:function(a){G.n8(a.YE).ml(new V.Vn(a)).OA(new V.oU(a))},
 Kq:function(a){var z=P.ii(0,0,0,0,0,1)
 a.tB=this.ct(a,C.O9,a.tB,z)},
-static:{NI:function(a){var z,y,x,w,v
+static:{Hr:function(a){var z,y,x,w,v
 z=Q.pT(null,L.Z5)
 y=P.L5(null,null,null,P.qU,W.I0)
 x=P.qU
@@ -21527,7 +21782,7 @@
 C.aXh.XI(a)
 C.aXh.Kq(a)
 return a}}},
-V63:{
+V66:{
 "^":"uL+Pi;",
 $isd3:true},
 Vn:{
@@ -21542,7 +21797,7 @@
 if(typeof w!=="number")return H.s(w)
 if(!(x<w))break
 c$0:{if(y.t(a,x).gw8()==null)break c$0
-J.bi(z.E6,y.t(a,x))}++x}},"$1",null,2,0,null,237,"call"],
+J.bi(z.E6,y.t(a,x))}++x}},"$1",null,2,0,null,244,"call"],
 $isEH:true},
 oU:{
 "^":"TpZ:12;b",
@@ -21570,7 +21825,7 @@
 return a}}}}],["","",,U,{
 "^":"",
 el:{
-"^":"V64;uB,lc,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
+"^":"V67;uB,lc,Vg,fn,tB,Qf,Vg,fn,Vg,fn,IX,Bd,f4,bb,TT,MJ,OD,n7,kK,ZM,ZQ,qJ,wy",
 gwv:function(a){return a.uB},
 swv:function(a,b){a.uB=this.ct(a,C.RJ,a.uB,b)},
 gkc:function(a){return a.lc},
@@ -21592,7 +21847,7 @@
 C.Hd.LX(a)
 C.Hd.XI(a)
 return a}}},
-V64:{
+V67:{
 "^":"uL+Pi;",
 $isd3:true}}],])
 I.$finishClasses($$,$,null)
@@ -21625,9 +21880,9 @@
 y.$isfRn=z
 y.$asfRn=[P.lf]
 y.$isa=z
-y=N.qV
+y=N.Ng
 y.$isfRn=z
-y.$asfRn=[N.qV]
+y.$asfRn=[N.Ng]
 y.$isa=z
 y=P.a6
 y.$isa6=z
@@ -21686,8 +21941,8 @@
 y=U.x9
 y.$isrx=z
 y.$isa=z
-y=U.EO
-y.$isEO=z
+y=U.WH
+y.$isWH=z
 y.$isrx=z
 y.$isa=z
 y=P.IN
@@ -21700,7 +21955,7 @@
 y=T.yj
 y.$isyj=z
 y.$isa=z
-y=W.tV
+y=W.Iv
 y.$ish4=z
 y.$isKV=z
 y.$isa=z
@@ -21713,7 +21968,7 @@
 y=D.bv
 y.$isaf=z
 y.$isa=z
-D.Fc.$isa=z
+D.ta.$isa=z
 D.ER.$isa=z
 y=D.vO
 y.$isvO=z
@@ -21846,6 +22101,10 @@
 y.$isNOT=z
 y.$isyX=z
 y.$isa=z
+y=D.uq
+y.$isuq=z
+y.$isaf=z
+y.$isa=z
 y=P.e4y
 y.$ise4y=z
 y.$isa=z
@@ -21908,8 +22167,8 @@
 y=A.rv
 y.$isrv=z
 y.$isa=z
-y=L.lg
-y.$islg=z
+y=L.ARh
+y.$isARh=z
 y.$isAp=z
 y.$isa=z
 y=W.hsw
@@ -21968,13 +22227,14 @@
 J.B9=function(a,b){return J.RE(a).shN(a,b)}
 J.BC=function(a,b){return J.RE(a).sja(a,b)}
 J.BL=function(a,b){return J.RE(a).sRd(a,b)}
+J.BQ=function(a,b){return J.Qe(a).Fr(a,b)}
 J.BT=function(a){return J.RE(a).gNG(a)}
 J.BZ=function(a){return J.RE(a).gnv(a)}
+J.Bj=function(a,b){return J.RE(a).snl(a,b)}
 J.Bl=function(a,b){if(typeof a=="number"&&typeof b=="number")return a<=b
 return J.Wx(a).E(a,b)}
 J.By=function(a,b){return J.RE(a).sLW(a,b)}
 J.C3=function(a,b){return J.RE(a).sig(a,b)}
-J.C7=function(a){return J.RE(a).gLc(a)}
 J.CJ=function(a,b){return J.RE(a).sB1(a,b)}
 J.CN=function(a){return J.RE(a).gd0(a)}
 J.CP=function(a,b,c,d,e){return J.w1(a).YW(a,b,c,d,e)}
@@ -21995,7 +22255,6 @@
 J.EC=function(a,b){return J.RE(a).svm(a,b)}
 J.EE=function(a,b){return J.RE(a).sFF(a,b)}
 J.EJ=function(a,b){return J.RE(a).sCf(a,b)}
-J.EMK=function(a){return J.RE(a).gV5(a)}
 J.Ec=function(a){return J.RE(a).gMZ(a)}
 J.Ed=function(a,b){return J.RE(a).sFK(a,b)}
 J.Eh=function(a,b){return J.Wx(a).O(a,b)}
@@ -22008,11 +22267,13 @@
 J.FN=function(a){return J.U6(a).gl0(a)}
 J.FS=function(a){return J.RE(a).gwp(a)}
 J.FW=function(a,b){return J.Qc(a).iM(a,b)}
+J.Fc=function(a,b){return J.RE(a).sP(a,b)}
 J.Fd=function(a,b,c){return J.w1(a).aM(a,b,c)}
 J.Fv=function(a,b){return J.RE(a).sFR(a,b)}
 J.Fy=function(a){return J.RE(a).h9(a)}
 J.G7=function(a,b){return J.RE(a).seZ(a,b)}
 J.GF=function(a){return J.RE(a).gz2(a)}
+J.GG=function(a){return J.Qe(a).gNq(a)}
 J.GH=function(a){return J.RE(a).gyW(a)}
 J.GL=function(a){return J.RE(a).gBp(a)}
 J.GW=function(a){return J.RE(a).gVY(a)}
@@ -22025,13 +22286,13 @@
 J.HB=function(a){return J.RE(a).gxT(a)}
 J.HP=function(a){return J.RE(a).gFK(a)}
 J.HT=function(a,b){return J.RE(a).sLc(a,b)}
+J.Hf=function(a,b){return J.RE(a).seo(a,b)}
 J.Hg=function(a){return J.RE(a).gP9(a)}
 J.Hh=function(a,b){return J.RE(a).sO9(a,b)}
 J.Hn=function(a,b){return J.RE(a).sxT(a,b)}
 J.Ho=function(a){return J.RE(a).WJ(a)}
 J.Hs=function(a){return J.RE(a).goL(a)}
 J.Hy=function(a){return J.RE(a).gZp(a)}
-J.IA=function(a){return J.RE(a).gjT(a)}
 J.IB=function(a,b,c,d){return J.RE(a).nR(a,b,c,d)}
 J.II=function(a){return J.w1(a).Jd(a)}
 J.IL=function(a){return J.RE(a).goE(a)}
@@ -22040,8 +22301,6 @@
 J.IR=function(a){return J.RE(a).gkZ(a)}
 J.IX=function(a,b){return J.RE(a).sEu(a,b)}
 J.Ir=function(a){return J.RE(a).gyK(a)}
-J.It=function(a,b){return J.Qe(a).Fr(a,b)}
-J.Iw=function(a,b){return J.RE(a).sFL(a,b)}
 J.Iz=function(a){return J.RE(a).gfY(a)}
 J.J0=function(a,b){return J.RE(a).sR1(a,b)}
 J.J1=function(a,b){return J.RE(a).rW(a,b)}
@@ -22056,7 +22315,6 @@
 J.Jp=function(a){return J.RE(a).gjl(a)}
 J.Jr=function(a){return J.RE(a).gGV(a)}
 J.Jv=function(a){return J.RE(a).gzG(a)}
-J.Jw=function(a){return J.RE(a).gI(a)}
 J.K0=function(a){return J.RE(a).gd4(a)}
 J.K2=function(a){return J.RE(a).gtN(a)}
 J.KD=function(a,b){return J.RE(a).j3(a,b)}
@@ -22064,7 +22322,6 @@
 J.Kd=function(a){return J.RE(a).gCF(a)}
 J.Kj=function(a){return J.RE(a).gYt(a)}
 J.Kl=function(a){return J.RE(a).gBP(a)}
-J.Ky=function(a){return J.RE(a).gRk(a)}
 J.L1=function(a,b,c,d){return J.RE(a).wN(a,b,c,d)}
 J.L6=function(a){return J.RE(a).glD(a)}
 J.L9=function(a,b){if(typeof a=="number"&&typeof b=="number")return a/b
@@ -22091,7 +22348,7 @@
 J.Mp=function(a){return J.w1(a).wg(a)}
 J.Mx=function(a){return J.RE(a).gks(a)}
 J.N1=function(a){return J.RE(a).Es(a)}
-J.NB=function(a){return J.RE(a).gHo(a)}
+J.NB=function(a,b,c,d){return J.RE(a).ct(a,b,c,d)}
 J.NC=function(a){return J.RE(a).gHy(a)}
 J.NDJ=function(a){return J.RE(a).gWt(a)}
 J.NE=function(a,b){return J.RE(a).sHL(a,b)}
@@ -22111,7 +22368,6 @@
 J.OB=function(a){return J.RE(a).gfg(a)}
 J.OE=function(a,b){return J.RE(a).sfg(a,b)}
 J.OT=function(a){return J.RE(a).gXE(a)}
-J.OX=function(a){return J.Qe(a).gNq(a)}
 J.Oh=function(a){return J.RE(a).gG1(a)}
 J.Ok=function(a){return J.RE(a).ghU(a)}
 J.P2=function(a,b){return J.RE(a).sU4(a,b)}
@@ -22133,7 +22389,6 @@
 J.Px=function(a,b){return J.RE(a).swp(a,b)}
 J.Q0=function(a,b){return J.U6(a).OY(a,b)}
 J.Q2=function(a){return J.RE(a).gO3(a)}
-J.Q5=function(a,b,c,d){return J.RE(a).ct(a,b,c,d)}
 J.Q9=function(a){return J.RE(a).gf0(a)}
 J.QE=function(a){return J.RE(a).gCd(a)}
 J.QT=function(a,b){return J.RE(a).vV(a,b)}
@@ -22183,6 +22438,7 @@
 J.UR=function(a){return J.RE(a).Lg(a)}
 J.UT=function(a){return J.RE(a).gDQ(a)}
 J.Ue=function(a){return J.RE(a).gV8(a)}
+J.Ux=function(a){return J.RE(a).geo(a)}
 J.V1=function(a,b){return J.w1(a).Rz(a,b)}
 J.VA=function(a,b){return J.w1(a).Vr(a,b)}
 J.VU=function(a,b){return J.RE(a).PN(a,b)}
@@ -22200,6 +22456,7 @@
 J.Wf=function(a){return J.RE(a).D4(a)}
 J.Wp=function(a){return J.RE(a).gQU(a)}
 J.Wy=function(a,b){return J.RE(a).sBk(a,b)}
+J.X6=function(a){return J.RE(a).gjD(a)}
 J.X7=function(a){return J.RE(a).gcH(a)}
 J.X9=function(a){return J.RE(a).gTK(a)}
 J.XF=function(a,b){return J.RE(a).siC(a,b)}
@@ -22208,6 +22465,7 @@
 J.Xf=function(a){return J.RE(a).gbq(a)}
 J.Xg=function(a,b){return J.RE(a).sBV(a,b)}
 J.Xr=function(a){return J.RE(a).gEa(a)}
+J.Xu=function(a,b){return J.RE(a).sFL(a,b)}
 J.Y5=function(a){return J.RE(a).gyT(a)}
 J.Y7=function(a){return J.RE(a).gLU(a)}
 J.YG=function(a){return J.RE(a).gQP(a)}
@@ -22233,6 +22491,7 @@
 J.aA=function(a){return J.RE(a).gzY(a)}
 J.aB=function(a){return J.RE(a).gql(a)}
 J.aT=function(a){return J.RE(a).god(a)}
+J.aW=function(a){return J.RE(a).gJp(a)}
 J.an=function(a,b){return J.RE(a).Id(a,b)}
 J.au=function(a,b){return J.RE(a).sNG(a,b)}
 J.ay=function(a){return J.RE(a).giB(a)}
@@ -22251,8 +22510,8 @@
 J.c7=function(a){return J.RE(a).guS(a)}
 J.cG=function(a){return J.RE(a).Ki(a)}
 J.cI=function(a,b){return J.Wx(a).Sy(a,b)}
+J.cL=function(a){return J.RE(a).gV5(a)}
 J.cO=function(a){return J.RE(a).gjx(a)}
-J.cP=function(a){return J.RE(a).gAd(a)}
 J.cV=function(a,b){return J.RE(a).sjT(a,b)}
 J.cZ=function(a,b,c,d){return J.RE(a).On(a,b,c,d)}
 J.cj=function(a){return J.RE(a).gMT(a)}
@@ -22261,6 +22520,7 @@
 J.co=function(a,b){return J.Qe(a).nC(a,b)}
 J.dE=function(a){return J.RE(a).gGs(a)}
 J.dF=function(a){return J.w1(a).zH(a)}
+J.dK=function(a){return J.RE(a).gWk(a)}
 J.dY=function(a){return J.RE(a).ga4(a)}
 J.dZ=function(a){return J.RE(a).gDX(a)}
 J.dc=function(a,b){return J.RE(a).smH(a,b)}
@@ -22319,12 +22579,14 @@
 J.kl=function(a,b){return J.w1(a).ez(a,b)}
 J.kv=function(a){return J.RE(a).gDf(a)}
 J.l2=function(a){return J.RE(a).gN(a)}
+J.lA=function(a){return J.RE(a).gLc(a)}
 J.lL=function(a){return J.RE(a).gQr(a)}
 J.lN=function(a){return J.RE(a).gil(a)}
 J.le=function(a){return J.RE(a).gUt(a)}
 J.lu=function(a){return J.RE(a).gJ8(a)}
 J.m4=function(a){return J.RE(a).gig(a)}
 J.mF=function(a){return J.RE(a).gHn(a)}
+J.mN=function(a){return J.RE(a).gRO(a)}
 J.mQ=function(a,b){if(typeof a=="number"&&typeof b=="number")return(a&b)>>>0
 return J.Wx(a).i(a,b)}
 J.mU=function(a,b){return J.RE(a).skm(a,b)}
@@ -22337,7 +22599,7 @@
 J.nG=function(a){return J.RE(a).gv8(a)}
 J.nN=function(a){return J.RE(a).gTt(a)}
 J.nb=function(a){return J.RE(a).gyX(a)}
-J.nd=function(a){return J.RE(a).gWk(a)}
+J.ns=function(a){return J.RE(a).gjT(a)}
 J.nv=function(a){return J.RE(a).gLW(a)}
 J.o3=function(a,b){return J.RE(a).sjD(a,b)}
 J.o6=function(a){return J.RE(a).Lx(a)}
@@ -22369,8 +22631,8 @@
 J.r0=function(a){return J.RE(a).gi6(a)}
 J.r5=function(a,b,c){return J.RE(a).aD(a,b,c)}
 J.rA=function(a,b){return J.RE(a).sbe(a,b)}
-J.rK=function(a){return J.RE(a).gjD(a)}
 J.rL=function(a,b){return J.RE(a).spE(a,b)}
+J.ra5=function(a){return J.RE(a).gAd(a)}
 J.re=function(a){return J.RE(a).gmb(a)}
 J.rk=function(a){return J.RE(a).gke(a)}
 J.ro=function(a){return J.RE(a).gOB(a)}
@@ -22384,7 +22646,6 @@
 J.tH=function(a,b){return J.RE(a).sHy(a,b)}
 J.tPf=function(a,b){return J.RE(a).X3(a,b)}
 J.tT=function(a,b,c){return J.RE(a).X6(a,b,c)}
-J.ta=function(a,b){return J.RE(a).sP(a,b)}
 J.tv=function(a,b){return J.RE(a).sDX(a,b)}
 J.tw=function(a){return J.RE(a).gCK(a)}
 J.u1=function(a,b){return J.Wx(a).WZ(a,b)}
@@ -22392,9 +22653,11 @@
 return J.Wx(a).C(a,b)}
 J.uF=function(a,b){return J.w1(a).GT(a,b)}
 J.uH=function(a,b){return J.RE(a).sP2(a,b)}
+J.uN=function(a){return J.RE(a).gHo(a)}
 J.uW=function(a){return J.RE(a).gyG(a)}
 J.uf=function(a){return J.RE(a).gxr(a)}
 J.ul=function(a){return J.RE(a).gU4(a)}
+J.um=function(a){return J.RE(a).gRk(a)}
 J.un=function(a){return J.RE(a).gRY(a)}
 J.up=function(a){return J.RE(a).gIf(a)}
 J.uy=function(a){return J.RE(a).gHm(a)}
@@ -22438,7 +22701,6 @@
 J.yi=function(a,b){return J.RE(a).sMj(a,b)}
 J.yq=function(a){return J.RE(a).gQl(a)}
 J.yz=function(a){return J.RE(a).gLF(a)}
-J.z4=function(a){return J.RE(a).gXt(a)}
 J.z7Y=function(a,b,c,d,e){return J.RE(a).GM(a,b,c,d,e)}
 J.zE=function(a){return J.RE(a).gtu(a)}
 J.zF=function(a){return J.RE(a).gHL(a)}
@@ -22459,8 +22721,10 @@
 C.ka=Z.ak.prototype
 C.tWO=O.VY.prototype
 C.ux=F.Be.prototype
+C.vS=T.uV.prototype
+C.oS=U.NY.prototype
 C.O0=R.JI.prototype
-C.vo=G.Tk.prototype
+C.BB=G.Tk.prototype
 C.On=F.ZP.prototype
 C.Jh=L.nJ.prototype
 C.lQ=R.Eg.prototype
@@ -22479,7 +22743,7 @@
 C.Ie=E.mO.prototype
 C.Ig=E.DE.prototype
 C.VLs=E.U1.prototype
-C.wvk=E.qM.prototype
+C.ej=E.qM.prototype
 C.OkI=E.av.prototype
 C.bZ=E.uz.prototype
 C.iR=E.Ma.prototype
@@ -22490,7 +22754,7 @@
 C.IXz=E.qh.prototype
 C.rU=E.Q6.prototype
 C.j1o=E.L4.prototype
-C.ij=E.Zn.prototype
+C.ag=E.Zn.prototype
 C.Fw=E.uE.prototype
 C.UZ=E.n5.prototype
 C.QFk=O.Im.prototype
@@ -22511,30 +22775,31 @@
 C.jN=J.CDU.prototype
 C.CD=J.P.prototype
 C.xB=J.O.prototype
-C.Yt=Z.vj.prototype
+C.Du=Z.vj.prototype
 C.xA=A.UK.prototype
 C.Z3=R.LU.prototype
 C.fQ=M.CX.prototype
 C.DX=U.WG.prototype
-C.um=U.VZ.prototype
+C.OX=U.VZ.prototype
 C.Ax=N.I2.prototype
 C.Mw=N.FB.prototype
 C.po=N.qn.prototype
 C.S2=W.x76.prototype
 C.yp=H.eEV.prototype
-C.kD=A.md.prototype
-C.br=A.ye.prototype
+C.aV=A.md.prototype
+C.pl=A.ye.prototype
 C.IG=A.Bm.prototype
-C.cR=A.Ya.prototype
-C.Mn=A.NK.prototype
+C.nn=A.Ya.prototype
+C.BJj=A.NK.prototype
 C.L8=A.Zx.prototype
 C.J7=A.Ww.prototype
 C.t5=W.BH3.prototype
+C.br=L.qV.prototype
 C.YpE=V.F1.prototype
 C.mk=Z.uL.prototype
 C.Sx=J.iCW.prototype
 C.GBL=A.xc.prototype
-C.oAw=T.ov.prototype
+C.za=T.ov.prototype
 C.Wa=A.kn.prototype
 C.cJ0=U.fI.prototype
 C.U0=R.zM.prototype
@@ -22553,14 +22818,14 @@
 C.Hd=U.el.prototype
 C.Ui=W.K5.prototype
 C.Kn=new H.i6()
-C.x4=new U.EO()
+C.x4=new U.WH()
 C.Ar=new H.MB()
 C.MS=new H.FuS()
 C.Eq=new P.k5C()
 C.qY=new T.WM()
 C.ZB=new P.yRf()
-C.pr=new P.mgb()
-C.aZ=new L.iNc()
+C.Xh=new P.mgb()
+C.zr=new L.iNc()
 C.NU=new P.R81()
 C.WA=new D.WAE("Collected")
 C.l8=new D.WAE("Dart")
@@ -22599,7 +22864,7 @@
 C.UL=new H.tx("profileChanged")
 C.yQP=H.Kxv('EH')
 C.xD=I.uLC([])
-C.mM=new A.ES(C.UL,C.cn,!1,C.yQP,!1,C.xD)
+C.bG=new A.ES(C.UL,C.cn,!1,C.yQP,!1,C.xD)
 C.TU=new H.tx("endPosChanged")
 C.Cp=new A.ES(C.TU,C.cn,!1,C.yQP,!1,C.xD)
 C.Wm=new H.tx("refChanged")
@@ -22679,6 +22944,9 @@
 C.oC=new A.ES(C.kw,C.BM,!1,C.MR,!1,C.ucP)
 C.Ys=new H.tx("pad")
 C.Cg=new A.ES(C.Ys,C.BM,!1,C.Ow,!1,C.ucP)
+C.nr=new H.tx("context")
+C.cL5=H.Kxv('lI')
+C.BO=new A.ES(C.nr,C.BM,!1,C.cL5,!1,C.ucP)
 C.qX=new H.tx("fragmentationChanged")
 C.dO=new A.ES(C.qX,C.cn,!1,C.yQP,!1,C.xD)
 C.UX=new H.tx("msg")
@@ -22787,8 +23055,8 @@
 C.az=new A.ES(C.Gn,C.cn,!1,C.yQP,!1,C.xD)
 C.o0=new A.ES(C.vp,C.BM,!1,C.MR,!1,C.ucP)
 C.i4=new H.tx("code")
-C.pM=H.Kxv('kx')
-C.aJ=new A.ES(C.i4,C.BM,!1,C.pM,!1,C.ucP)
+C.nqy=H.Kxv('kx')
+C.aJ=new A.ES(C.i4,C.BM,!1,C.nqy,!1,C.ucP)
 C.nE=new H.tx("tracer")
 C.Tbd=H.Kxv('KZ')
 C.FM=new A.ES(C.nE,C.BM,!1,C.Tbd,!1,C.ucP)
@@ -22818,15 +23086,15 @@
 C.Mc=new H.tx("flagList")
 C.f0=new A.ES(C.Mc,C.BM,!1,C.MR,!1,C.ucP)
 C.rE=new H.tx("frame")
-C.KS=new A.ES(C.rE,C.BM,!1,C.SXK,!1,C.ucP)
+C.B7=new A.ES(C.rE,C.BM,!1,C.SXK,!1,C.ucP)
 C.cg=new H.tx("anchor")
 C.ll=new A.ES(C.cg,C.BM,!1,C.lY,!1,C.ucP)
 C.ngm=I.uLC([C.J19])
-C.Qs=new A.ES(C.i4,C.BM,!0,C.pM,!1,C.ngm)
+C.Qs=new A.ES(C.i4,C.BM,!0,C.nqy,!1,C.ngm)
 C.mi=new H.tx("text")
 C.yV=new A.ES(C.mi,C.BM,!1,C.lY,!1,C.esx)
 C.tW=new H.tx("pos")
-C.kH=new A.ES(C.tW,C.BM,!1,C.yw,!1,C.ucP)
+C.It=new A.ES(C.tW,C.BM,!1,C.yw,!1,C.ucP)
 C.TO=new A.ES(C.kY,C.BM,!1,C.SmN,!1,C.ucP)
 C.uG=new H.tx("linesReady")
 C.Df=new A.ES(C.uG,C.BM,!1,C.Ow,!1,C.esx)
@@ -22985,13 +23253,14 @@
 C.xr=new P.byg(null,null)
 C.A3=new P.c5(null)
 C.cb=new P.ojF(null,null)
-C.EkO=new N.qV("FINER",400)
-C.t4=new N.qV("FINE",500)
-C.IF=new N.qV("INFO",800)
-C.cd=new N.qV("SEVERE",1000)
-C.nT=new N.qV("WARNING",900)
+C.EkO=new N.Ng("FINER",400)
+C.t4=new N.Ng("FINE",500)
+C.IF=new N.Ng("INFO",800)
+C.oOA=new N.Ng("OFF",2000)
+C.cd=new N.Ng("SEVERE",1000)
+C.nT=new N.Ng("WARNING",900)
 C.Gb=H.VM(I.uLC([127,2047,65535,1114111]),[P.KN])
-C.NG=I.uLC([1,6])
+C.Q5=I.uLC([1,6])
 C.rz=I.uLC([0,0,32776,33792,1,10240,0,0])
 C.SY=new H.tx("keys")
 C.l4=new H.tx("values")
@@ -23004,7 +23273,7 @@
 C.qq=I.uLC([0,0,26624,1023,65534,2047,65534,2047])
 C.Fa=I.uLC([0,0,26498,1023,65534,34815,65534,18431])
 C.fJ3=H.Kxv('iv')
-C.fo=I.uLC([C.fJ3])
+C.bfK=I.uLC([C.fJ3])
 C.ip=I.uLC(["==","!=","<=",">=","||","&&"])
 C.jY=I.uLC(["as","in","this"])
 C.jx=I.uLC([0,0,32722,12287,65534,34815,65534,18431])
@@ -23043,6 +23312,7 @@
 C.IH=new H.tx("address")
 C.j2=new H.tx("app")
 C.US=new H.tx("architecture")
+C.Wq=new H.tx("asStringLiteral")
 C.ET=new H.tx("assertsEnabled")
 C.WC=new H.tx("bpt")
 C.hR=new H.tx("breakpoint")
@@ -23056,6 +23326,7 @@
 C.Wt=new H.tx("clazz")
 C.I9=new H.tx("closeItem")
 C.To=new H.tx("closing")
+C.mM=new H.tx("closureCtxt")
 C.aw=new H.tx("closureFunc")
 C.J6=new H.tx("collections")
 C.qt=new H.tx("coloring")
@@ -23121,6 +23392,7 @@
 C.pC=new H.tx("interfaces")
 C.iA=new H.tx("ioEnabled")
 C.XH=new H.tx("isAbstract")
+C.XJ=new H.tx("isAbstractType")
 C.tJ=new H.tx("isBool")
 C.F8=new H.tx("isChromeTarget")
 C.fy=new H.tx("isClosure")
@@ -23134,19 +23406,20 @@
 C.WV=new H.tx("isFinalized")
 C.Ih=new H.tx("isImplemented")
 C.MY=new H.tx("isInlinable")
-C.Iv=new H.tx("isInstance")
 C.Wg=new H.tx("isInt")
 C.tD=new H.tx("isList")
 C.QS=new H.tx("isMap")
+C.C7=new H.tx("isMirrorReference")
 C.Of=new H.tx("isNull")
 C.Vl=new H.tx("isOptimizable")
 C.pY=new H.tx("isOptimized")
 C.XL=new H.tx("isPatch")
 C.LA=new H.tx("isPipe")
+C.Iw=new H.tx("isPlainInstance")
 C.tz=new H.tx("isSentinel")
 C.AT=new H.tx("isStatic")
 C.Lk=new H.tx("isString")
-C.dK=new H.tx("isType")
+C.GS=new H.tx("isWeakProperty")
 C.Jx=new H.tx("isolates")
 C.b5=new H.tx("jumpTarget")
 C.z6=new H.tx("key")
@@ -23179,6 +23452,7 @@
 C.If=new H.tx("owningLibrary")
 C.zm=new H.tx("padding")
 C.nX=new H.tx("parent")
+C.BV=new H.tx("parentContext")
 C.xP=new H.tx("parseInt")
 C.Ic=new H.tx("pause")
 C.yG=new H.tx("pauseEvent")
@@ -23189,6 +23463,7 @@
 C.Xd=new H.tx("reachable")
 C.I7=new H.tx("readClosed")
 C.vK=new H.tx("reference")
+C.Tc=new H.tx("referent")
 C.GR=new H.tx("refresh")
 C.KX=new H.tx("refreshCoverage")
 C.ja=new H.tx("refreshGC")
@@ -23250,15 +23525,16 @@
 C.Fh=new H.tx("url")
 C.yv=new H.tx("usageCounter")
 C.LP=new H.tx("used")
-C.ct=new H.tx("userName")
+C.Gy=new H.tx("userName")
 C.jh=new H.tx("v")
 C.zd=new H.tx("value")
 C.Db=new H.tx("valueAsString")
+C.aF=new H.tx("valueAsStringIsTruncated")
 C.fj=new H.tx("variable")
 C.xw=new H.tx("variables")
 C.zn=new H.tx("version")
 C.Sk=new H.tx("vmMetrics")
-C.Tc=new H.tx("vmName")
+C.KS=new H.tx("vmName")
 C.Uy=new H.tx("writeClosed")
 C.hP=H.Kxv('uz')
 C.Qb=H.Kxv('J3')
@@ -23275,12 +23551,14 @@
 C.j4=H.Kxv('IW')
 C.Ke=H.Kxv('EZ')
 C.Vx=H.Kxv('MJ')
+C.Vh=H.Kxv('Pz')
 C.rR=H.Kxv('wN')
 C.kt=H.Kxv('Um')
 C.yS=H.Kxv('G6')
 C.Sb=H.Kxv('kn')
 C.AP=H.Kxv('a')
 C.Yc=H.Kxv('iP')
+C.kH=H.Kxv('NY')
 C.IZ=H.Kxv('oF')
 C.vw=H.Kxv('UK')
 C.Jo=H.Kxv('i7')
@@ -23308,7 +23586,6 @@
 C.WU=H.Kxv('lf')
 C.nC=H.Kxv('cQ')
 C.M5=H.Kxv('yc')
-C.za=H.Kxv('Pz3')
 C.Yxm=H.Kxv('Pg')
 C.il=H.Kxv('xI')
 C.lp=H.Kxv('LU')
@@ -23319,6 +23596,7 @@
 C.OG=H.Kxv('eW')
 C.km=H.Kxv('fl')
 C.jV=H.Kxv('rF')
+C.rC=H.Kxv('qV')
 C.Tq=H.Kxv('vj')
 C.ou=H.Kxv('ak')
 C.JW=H.Kxv('Ww')
@@ -23372,6 +23650,7 @@
 C.Lg=H.Kxv('JI')
 C.Ju=H.Kxv('Ly')
 C.mq=H.Kxv('qk')
+C.XW=H.Kxv('uV')
 C.XWY=H.Kxv('uEY')
 C.oT=H.Kxv('VY')
 C.jK=H.Kxv('el')
@@ -23385,7 +23664,7 @@
 C.uo=new P.Uf(C.NU,P.uy1())
 C.pj=new P.Uf(C.NU,P.W7())
 C.lk=new P.Uf(C.NU,P.qKH())
-C.Gu=new P.Uf(C.NU,P.iyo())
+C.Gu=new P.Uf(C.NU,P.xd())
 C.Yl=new P.Uf(C.NU,P.MM())
 C.Zc=new P.Uf(C.NU,P.yA())
 C.zb=new P.yQ(null,null,null,null,null,null,null,null,null,null,null,null)
@@ -23397,7 +23676,7 @@
 $.xG=null
 $.hG=null
 $.OK=0
-$.bf=null
+$.mJs=null
 $.P4=null
 $.lcs=!1
 $.NF=null
@@ -23437,7 +23716,7 @@
 $.vU=null
 $.Xa=null
 $.ax=null
-$.AuW=[C.tq,W.Bo,{},C.hP,E.uz,{created:E.z1},C.Qb,X.J3,{created:X.TsF},C.Mf,A.G1,{created:A.Br},C.q0S,H.Dg,{"":H.jZN},C.Dl,V.F1,{created:V.JT8},C.mK,E.Mb,{created:E.RVI},C.UJ,N.oa,{created:N.Zgg},C.Y3,Q.CY,{created:Q.AlS},C.QJ,U.WG,{created:U.z0},C.j4,D.IW,{created:D.zr},C.Ke,Z.EZ,{created:Z.CoW},C.Vx,X.MJ,{created:X.IfX},C.rR,E.wN,{created:E.ML},C.kt,U.Um,{created:U.T21},C.yS,B.G6,{created:B.KU},C.Sb,A.kn,{created:A.Thl},C.IZ,E.oF,{created:E.J3z},C.vw,A.UK,{created:A.IV},C.Jo,D.i7,{created:D.hSW},C.ON,T.ov,{created:T.Zz},C.jR,F.Be,{created:F.fm},C.uC,O.Im,{created:O.eka},C.PT,M.CX,{created:M.SPd},C.iD,O.Vb,{created:O.teo},C.ce,X.kK,{created:X.jD},C.dD,E.av,{created:E.R7},C.FA,A.Ya,{created:A.JR},C.PFz,W.yyN,{},C.Th,U.fI,{created:U.TXt},C.tU,E.L4,{created:E.p4},C.cK,X.I5,{created:X.yC},C.jA,R.Eg,{created:R.Ola},C.K4,X.hV,{created:X.zy},C.ca,D.Z4,{created:D.d7},C.pJ,E.Q6,{created:E.chF},C.Yy,E.uE,{created:E.egu},C.Yxm,H.Pg,{"":H.aRu},C.il,Q.xI,{created:Q.lKH},C.lp,R.LU,{created:R.bUN},C.u4,U.VZ,{created:U.Wzx},C.oG,E.ds,{created:E.pIf},C.EG,D.Oz,{created:D.TSH},C.nw,O.eo,{created:O.l0},C.OG,Q.eW,{created:Q.rt},C.km,A.fl,{created:A.Du},C.Tq,Z.vj,{created:Z.mA},C.ou,Z.ak,{created:Z.zB},C.JW,A.Ww,{created:A.ZC},C.CT,D.St,{created:D.N5},C.wH,R.zM,{created:R.qa},C.Mz,Z.uL,{created:Z.ew},C.LT,A.md,{created:A.DCi},C.Wh,E.H8,{created:E.ZhX},C.Zj,E.U1,{created:E.TiU},C.FG,E.qh,{created:E.cua},C.bC,V.D2,{created:V.NI},C.Nw,T.vr,{created:T.aed},C.a8,A.Zx,{created:A.yno},C.NR,K.nm,{created:K.ant},C.Fn,N.qn,{created:N.hYg},C.DD,E.Zn,{created:E.kf},C.nj,Y.hg,{created:Y.Ifw},C.qF,E.mO,{created:E.Ch},C.JA3,H.b0B,{"":H.m6},C.Ey,A.wM,{created:A.ZTA},C.pF,E.WS,{created:E.jS},C.qZ,E.DE,{created:E.lIg},C.jw,A.xc,{created:A.oaJ},C.NW,A.ye,{created:A.mBQ},C.pi,N.FB,{created:N.kUw},C.Xv,E.n5,{created:E.iOo},C.KO,F.ZP,{created:F.Yw},C.he,E.qM,{created:E.tX},C.Wz,B.pR,{created:B.luW},C.tc,E.Ma,{created:E.Ii},C.Io,D.Qh,{created:D.Qj},C.Qt,A.NK,{created:A.Xii},C.wk,L.nJ,{created:L.Rpj},C.Bi,G.Tk,{created:G.aMd},C.te,N.BS,{created:N.nz},C.ms,A.Bm,{created:A.AJ},C.ws,V.Pa,{created:V.fXx},C.pK,D.Rk,{created:D.bZp},C.lE,U.DK,{created:U.v9},C.fU,N.I2,{created:N.rI3},C.Az,A.Gk,{created:A.cYO},C.R9,Q.f7,{created:Q.wzV},C.tQ,X.Vu,{created:X.lt2},C.X8,U.Ti,{created:U.Gvt},C.Lg,R.JI,{created:R.U9},C.Ju,K.Ly,{created:K.EDe},C.mq,L.qk,{created:L.Qtp},C.XWY,W.uEY,{},C.oT,O.VY,{created:O.E3U},C.jK,U.el,{created:U.oH}]
+$.AuW=[C.tq,W.Bo,{},C.hP,E.uz,{created:E.z1},C.Qb,X.J3,{created:X.TsF},C.Mf,A.G1,{created:A.Br},C.q0S,H.Dg,{"":H.jZN},C.Dl,V.F1,{created:V.JT8},C.mK,E.Mb,{created:E.RVI},C.UJ,N.oa,{created:N.Zgg},C.Y3,Q.CY,{created:Q.AlS},C.QJ,U.WG,{created:U.z0},C.j4,D.IW,{created:D.dmb},C.Ke,Z.EZ,{created:Z.CoW},C.Vx,X.MJ,{created:X.IfX},C.rR,E.wN,{created:E.ML},C.kt,U.Um,{created:U.T21},C.yS,B.G6,{created:B.KU},C.Sb,A.kn,{created:A.Thl},C.kH,U.NY,{created:U.q5n},C.IZ,E.oF,{created:E.J3z},C.vw,A.UK,{created:A.IV},C.Jo,D.i7,{created:D.hSW},C.ON,T.ov,{created:T.Zz},C.jR,F.Be,{created:F.fm},C.uC,O.Im,{created:O.eka},C.PT,M.CX,{created:M.SPd},C.iD,O.Vb,{created:O.teo},C.ce,X.kK,{created:X.jD},C.dD,E.av,{created:E.R7},C.FA,A.Ya,{created:A.JR},C.PFz,W.yyN,{},C.Th,U.fI,{created:U.TXt},C.tU,E.L4,{created:E.p4},C.cK,X.I5,{created:X.yC},C.jA,R.Eg,{created:R.Ola},C.K4,X.hV,{created:X.zy},C.ca,D.Z4,{created:D.d7},C.pJ,E.Q6,{created:E.chF},C.Yy,E.uE,{created:E.egu},C.Yxm,H.Pg,{"":H.aRu},C.il,Q.xI,{created:Q.lKH},C.lp,R.LU,{created:R.bUN},C.u4,U.VZ,{created:U.Wzx},C.oG,E.ds,{created:E.pIf},C.EG,D.Oz,{created:D.TSH},C.nw,O.eo,{created:O.l0},C.OG,Q.eW,{created:Q.rt},C.km,A.fl,{created:A.YtF},C.rC,L.qV,{created:L.P5f},C.Tq,Z.vj,{created:Z.mA},C.ou,Z.ak,{created:Z.TH},C.JW,A.Ww,{created:A.ZC},C.CT,D.St,{created:D.N5},C.wH,R.zM,{created:R.qa},C.Mz,Z.uL,{created:Z.ew},C.LT,A.md,{created:A.DCi},C.Wh,E.H8,{created:E.ZhX},C.Zj,E.U1,{created:E.TiU},C.FG,E.qh,{created:E.cua},C.bC,V.D2,{created:V.Hr},C.Nw,T.vr,{created:T.aed},C.a8,A.Zx,{created:A.yno},C.NR,K.nm,{created:K.ant},C.Fn,N.qn,{created:N.hYg},C.DD,E.Zn,{created:E.kf},C.nj,Y.hg,{created:Y.Ifw},C.qF,E.mO,{created:E.Ch},C.JA3,H.b0B,{"":H.m6},C.Ey,A.wM,{created:A.ZTA},C.pF,E.WS,{created:E.jS},C.qZ,E.DE,{created:E.lIg},C.jw,A.xc,{created:A.oaJ},C.NW,A.ye,{created:A.mBQ},C.pi,N.FB,{created:N.kUw},C.Xv,E.n5,{created:E.iOo},C.KO,F.ZP,{created:F.Yw},C.he,E.qM,{created:E.tX},C.Wz,B.pR,{created:B.luW},C.tc,E.Ma,{created:E.Ii},C.Io,D.Qh,{created:D.Qj},C.Qt,A.NK,{created:A.Xii},C.wk,L.nJ,{created:L.Rpj},C.Bi,G.Tk,{created:G.aMd},C.te,N.BS,{created:N.nz},C.ms,A.Bm,{created:A.AJ},C.ws,V.Pa,{created:V.fXx},C.pK,D.Rk,{created:D.bZp},C.lE,U.DK,{created:U.v9},C.fU,N.I2,{created:N.rI3},C.Az,A.Gk,{created:A.cYO},C.R9,Q.f7,{created:Q.wzV},C.tQ,X.Vu,{created:X.lt2},C.X8,U.Ti,{created:U.Gvt},C.Lg,R.JI,{created:R.U9},C.Ju,K.Ly,{created:K.EDe},C.mq,L.qk,{created:L.Qtp},C.XW,T.uV,{created:T.CvM},C.XWY,W.uEY,{},C.oT,O.VY,{created:O.E3U},C.jK,U.el,{created:U.oH}]
 I.$lazy($,"thisScript","SU","Zt",function(){return H.yl()})
 I.$lazy($,"workerIds","rS","p6",function(){return H.VM(new P.qo(null),[P.KN])})
 I.$lazy($,"noSuchMethodPattern","lm","WD",function(){return H.cM(H.S7({toString:function(){return"$receiver$"}}))})
@@ -23457,10 +23736,9 @@
 I.$lazy($,"_isolateMatcher","AX","qL",function(){return new H.VR("isolates/.*/",H.v4("isolates/.*/",!1,!0,!1),null,null)})
 I.$lazy($,"POLL_PERIODS","Bw","c3",function(){return[8000,4000,2000,1000,100]})
 I.$lazy($,"_storage","wZ","Vy",function(){return window.localStorage})
-I.$lazy($,"scheduleImmediateClosure","lI","ej",function(){return P.xg()})
+I.$lazy($,"scheduleImmediateClosure","Mn","zp",function(){return P.xg()})
 I.$lazy($,"_rootMap","ln","OL",function(){return P.YM(null,null,null,null,null)})
 I.$lazy($,"_toStringVisiting","nM","Ex",function(){return[]})
-I.$lazy($,"webkitEvents","fDX","nn",function(){return P.EF(["animationend","webkitAnimationEnd","animationiteration","webkitAnimationIteration","animationstart","webkitAnimationStart","fullscreenchange","webkitfullscreenchange","fullscreenerror","webkitfullscreenerror","keyadded","webkitkeyadded","keyerror","webkitkeyerror","keymessage","webkitkeymessage","needkey","webkitneedkey","pointerlockchange","webkitpointerlockchange","pointerlockerror","webkitpointerlockerror","resourcetimingbufferfull","webkitresourcetimingbufferfull","transitionend","webkitTransitionEnd","speechchange","webkitSpeechChange"],null,null)})
 I.$lazy($,"context","Lt","Xw",function(){return P.ND(self)})
 I.$lazy($,"_DART_OBJECT_PROPERTY_NAME","xu","LZ",function(){return init.getIsolateTag("_$dart_dartObject")})
 I.$lazy($,"_DART_CLOSURE_PROPERTY_NAME","Ri","Dp",function(){return init.getIsolateTag("_$dart_dartClosure")})
@@ -23475,7 +23753,7 @@
 I.$lazy($,"_pathCache","zC","fX",function(){return P.L5(null,null,null,P.qU,L.Zl)})
 I.$lazy($,"_polymerSyntax","Kb","Ak",function(){return new A.Li(T.Mo(null,C.qY),null)})
 I.$lazy($,"_typesByName","Hi","Ej",function(){return P.L5(null,null,null,P.qU,P.Lz)})
-I.$lazy($,"_declarations","ef","vE",function(){return P.L5(null,null,null,P.qU,A.So)})
+I.$lazy($,"_declarations","Hq","w3G",function(){return P.L5(null,null,null,P.qU,A.So)})
 I.$lazy($,"_hasShadowDomPolyfill","Yx","Ep",function(){return $.Xw().Eg("ShadowDOMPolyfill")})
 I.$lazy($,"_ShadowCss","qP","lx",function(){var z=$.Kc()
 return z!=null?J.UQ(z,"ShadowCSS"):null})
@@ -23486,12 +23764,12 @@
 I.$lazy($,"bindPattern","ZA","VCp",function(){return new H.VR("\\{\\{([^{}]*)}}",H.v4("\\{\\{([^{}]*)}}",!1,!0,!1),null,null)})
 I.$lazy($,"_onReady","T8g","j6",function(){return H.VM(new P.Zf(P.Dt(null)),[null])})
 I.$lazy($,"_observeLog","DZ","dn",function(){return N.QM("polymer.observe")})
-I.$lazy($,"_eventsLog","HKX","mI",function(){return N.QM("polymer.events")})
+I.$lazy($,"_eventsLog","fo","vo",function(){return N.QM("polymer.events")})
 I.$lazy($,"_unbindLog","eu","iX",function(){return N.QM("polymer.unbind")})
 I.$lazy($,"_bindLog","xz","Lu",function(){return N.QM("polymer.bind")})
 I.$lazy($,"_watchLog","p5","REM",function(){return N.QM("polymer.watch")})
-I.$lazy($,"_readyLog","nS","zG",function(){return N.QM("polymer.ready")})
-I.$lazy($,"_PolymerGestures","Jm","LL",function(){return J.UQ($.Xw(),"PolymerGestures")})
+I.$lazy($,"_readyLog","nS","lg",function(){return N.QM("polymer.ready")})
+I.$lazy($,"_PolymerGestures","Jm","tNi",function(){return J.UQ($.Xw(),"PolymerGestures")})
 I.$lazy($,"_polymerElementProto","f8","Dw",function(){return new A.Md().$0()})
 I.$lazy($,"_typeHandlers","FZ4","h2",function(){return P.EF([C.lY,new Z.lP(),C.GX,new Z.wJY(),C.Yc,new Z.zOQ(),C.Ow,new Z.W6o(),C.yw,new Z.MdQ(),C.cz,new Z.YJG()],null,null)})
 I.$lazy($,"_BINARY_OPERATORS","HfW","YP",function(){return P.EF(["+",new K.w12(),"-",new K.w13(),"*",new K.w14(),"/",new K.w15(),"%",new K.w16(),"==",new K.w17(),"!=",new K.w18(),"===",new K.w19(),"!==",new K.w20(),">",new K.w21(),">=",new K.w22(),"<",new K.w23(),"<=",new K.w24(),"||",new K.w25(),"&&",new K.w26(),"|",new K.w27()],null,null)})
@@ -23518,17 +23796,17 @@
 I.$lazy($,"objectAccessor","j8","cp",function(){return D.kP()})
 I.$lazy($,"typeInspector","Yv","mX",function(){return D.kP()})
 I.$lazy($,"symbolConverter","qe","vu",function(){return D.kP()})
-I.$lazy($,"_DEFAULT","ac","Bu",function(){return new M.VE(null)})
+I.$lazy($,"_DEFAULT","ac","Bu",function(){return new M.vE(null)})
 I.$lazy($,"_contentsOwner","Ub","B8",function(){return H.VM(new P.qo(null),[null])})
 I.$lazy($,"_ownerStagingDocument","v2","Ou",function(){return H.VM(new P.qo(null),[null])})
 I.$lazy($,"_allTemplatesSelectors","YO","S1",function(){return C.xB.g("template, ",J.ZG(J.kl(C.bq.gvc(C.bq),new M.DOe()),", "))})
 I.$lazy($,"_templateObserver","joK","ik",function(){return W.Ws(new M.Ufa())})
 I.$lazy($,"_emptyInstance","oL","zl",function(){return new M.Raa().$0()})
-I.$lazy($,"_instanceExtension","nB","Tn",function(){return H.VM(new P.qo(null),[null])})
+I.$lazy($,"_instanceExtension","nB","nR",function(){return H.VM(new P.qo(null),[null])})
 I.$lazy($,"_isStagingDocument","Fg","Ks",function(){return H.VM(new P.qo(null),[null])})
 I.$lazy($,"_expando","fF","as",function(){return H.VM(new P.qo("template_binding"),[null])})
 
-init.metadata=["object","sender","e",{func:"pd",args:[P.qU]},{func:"a1",ret:P.lf},"closure","isolate","numberOfArguments","arg1","arg2","arg3","arg4",{func:"l4",args:[null]},"_",{func:"Pt",ret:P.qU,args:[P.KN]},"bytes",{func:"RJ",ret:P.qU,args:[null]},{func:"T9",void:true},{func:"LP",void:true,args:[{func:"T9",void:true}]},{func:"G5O",void:true,args:[null]},"value",{func:"Vx",void:true,args:[null],opt:[P.BpP]},,"error","stackTrace",{func:"rE",void:true,args:[P.JBS,P.e4y,P.JBS,null,P.BpP]},"self","parent","zone",{func:"h2",args:[P.JBS,P.e4y,P.JBS,{func:"ny"}]},"f",{func:"aE",args:[P.JBS,P.e4y,P.JBS,{func:"l4",args:[null]},null]},"arg",{func:"ta",args:[P.JBS,P.e4y,P.JBS,{func:"bh",args:[null,null]},null,null]},{func:"HQr",ret:{func:"ny"},args:[P.JBS,P.e4y,P.JBS,{func:"ny"}]},{func:"qs",ret:{func:"l4",args:[null]},args:[P.JBS,P.e4y,P.JBS,{func:"l4",args:[null]}]},{func:"tD",ret:{func:"bh",args:[null,null]},args:[P.JBS,P.e4y,P.JBS,{func:"bh",args:[null,null]}]},{func:"iV",void:true,args:[P.JBS,P.e4y,P.JBS,{func:"ny"}]},{func:"Uk",ret:P.kWp,args:[P.JBS,P.e4y,P.JBS,P.a6,{func:"T9",void:true}]},"duration","callback",{func:"zk",ret:P.kWp,args:[P.JBS,P.e4y,P.JBS,P.a6,{func:"pe",void:true,args:[P.kWp]}]},{func:"SA",void:true,args:[P.JBS,P.e4y,P.JBS,P.qU]},"line",{func:"DM",void:true,args:[P.qU]},{func:"Jj",ret:P.JBS,args:[P.JBS,P.e4y,P.JBS,P.n7,P.T8]},"specification","zoneValues",{func:"qa",ret:P.SQ,args:[null,null]},"a","b",{func:"bX",ret:P.KN,args:[null]},{func:"uJ",ret:P.a,args:[null]},{func:"Dl",ret:P.KN,args:[P.fRn,P.fRn]},{func:"I8",ret:P.SQ,args:[P.a,P.a]},{func:"ZY",ret:P.KN,args:[P.a]},"receiver",{func:"b3",args:[null,null,null,null]},"name","oldValue","newValue","captureThis","arguments","o",{func:"VH",ret:P.SQ,args:[P.IN]},"symbol","v",{func:"DW",ret:U.rx,args:[P.qU]},{func:"ZU",args:[U.rx,null],named:{globals:[P.T8,P.qU,P.a],oneTime:null}},!1,{func:"qq",ret:[P.QV,K.Aep],args:[P.QV]},"iterable",{func:"Tx",ret:P.KN,args:[D.af,D.af]},{func:"I6a",ret:P.qU},"invocation","fractionDigits",{func:"ny"},{func:"N4",args:[P.EH]},"code","key","val",{func:"bh",args:[null,null]},{func:"Za",args:[P.qU,null]},{func:"TS",args:[null,P.qU]},{func:"Yv",void:true,args:[null,null,null]},"c",{func:"Ab",void:true,args:[D.Mk]},"event",{func:"lrq",void:true,args:[D.N7]},{func:"Cj",void:true,args:[D.Ix]},"exception",{func:"Af",args:[D.wv]},"vm",{func:"wk",ret:P.SQ,args:[null]},"oldEvent",{func:"ai",void:true,args:[W.niR]},"obj","i","responseText",{func:"Om",args:[L.Z5,L.Z5]},{func:"HE",ret:P.KN,args:[P.KN,P.KN]},"column","done",{func:"Hj",ret:P.qU,args:[G.Y2]},"row",{func:"Sz",void:true,args:[W.ea,null,W.h4]},"detail","target","objectClass",{func:"Wr",ret:[P.b8,D.af],args:[P.qU]},"text",{func:"de",ret:[P.b8,D.af],args:[null]},"limit","dummy",{func:"Q5",args:[D.vO]},{func:"Np8",void:true,args:[W.ea,null,W.KV]},{func:"VI",args:[D.kx]},{func:"lJL",args:[{func:"T9",void:true}]},"data","theError","theStackTrace",{func:"Tw",args:[P.a]},{func:"YP",void:true,opt:[null]},{func:"uu",void:true,args:[P.a],opt:[P.BpP]},{func:"yV",args:[null],opt:[null]},{func:"Wy",ret:P.SQ},"ignored","convert","element",{func:"K5",args:[P.SQ]},{func:"a9",void:true,opt:[P.b8]},"resumeSignal",{func:"ha",args:[null,P.BpP]},{func:"N5",void:true,args:[null,P.BpP]},"each","k",{func:"DR",ret:P.KN,args:[null,P.KN]},{func:"v0",void:true,args:[P.KN,P.KN]},{func:"lv",args:[P.IN,null]},{func:"Tla",ret:P.KN,args:[P.qU]},{func:"cS",ret:P.Vf,args:[P.qU]},{func:"cd",ret:P.SQ,args:[P.KN]},{func:"wJ",ret:P.KN,args:[null,null]},"byteString",{func:"lu",void:true,args:[P.qU],opt:[null]},"xhr",{func:"bB",void:true,args:[W.AjY]},"result",{func:"fK",args:[D.af]},{func:"IS",ret:O.Hz},"response","st",{func:"D8",void:true,args:[D.vO]},"newProfile",{func:"DT",ret:P.qU,args:[P.SQ]},"newSpace",{func:"Z5",args:[P.KN]},{func:"iR",args:[P.KN,null]},{func:"OE",ret:P.QV,args:[{func:"pd",args:[P.qU]}]},{func:"T5",ret:P.QV,args:[{func:"uW",ret:P.QV,args:[P.qU]}]},"s",{func:"S0",void:true,args:[P.SQ,null]},"expand","m",{func:"KDY",ret:P.b8,args:[null]},"tagProfile","rec",{func:"IM",args:[N.HV]},{func:"d4C",void:true,args:[W.AjY,null,W.h4]},{func:"Ig",ret:P.qU,args:[P.qU]},"url",{func:"nxg",ret:P.qU,args:[P.Vf]},"time",{func:"B4",args:[P.e4y,P.JBS]},{func:"djS",args:[P.JBS,P.e4y,P.JBS,{func:"l4",args:[null]}]},"x",{func:"VL8",void:true,args:[P.a,P.a]},"prop","records",{func:"My",args:[L.Zl,null]},"model","node","oneTime",{func:"cq",args:[null,null,null]},{func:"jk",void:true,args:[P.qU,P.qU]},{func:"aA",void:true,args:[P.WO,P.T8,P.WO]},{func:"YT",void:true,args:[[P.WO,T.yj]]},"changes","jsElem","extendee",{func:"zi",args:[null,P.qU,P.qU]},{func:"tw",args:[null,W.KV,P.SQ]},{func:"qj",ret:P.SQ,args:[null],named:{skipChanges:P.SQ}},"skipChanges",{func:"Gm",args:[[P.WO,T.yj]]},{func:"ppm",ret:U.vn,args:[U.rx,U.rx]},{func:"Qc",args:[U.rx]},{func:"Tz",void:true,args:[null,null]},"mutations","observer","id","map",{func:"rP",args:[V.qC]},{func:"rl6",ret:P.b8},"scriptCoverage","owningIsolate",{func:"K7",void:true,args:[[P.WO,P.KN]]},"counters",{func:"a6",ret:[P.b8,[P.WO,D.dy]],args:[D.vO]},"classList",{func:"ze",ret:[P.b8,D.dy],args:[[P.WO,D.dy]]},"classes","timer","newBpts",{func:"NuY",ret:P.qU,args:[D.kx]},{func:"qQ",void:true,args:[D.vx]},"script","func",{func:"T2",void:true,args:[P.qU,L.U2]},{func:"Riv",args:[P.V2]},{func:"T3G",args:[P.qU,L.U2]},"CloseEvent","Event",{func:"cOy",args:[W.cxu]},"msg","exp","details",{func:"D2",ret:A.Ap,args:[P.qU]},"ref",{func:"PzC",void:true,args:[[P.WO,G.Zq]]},"splices",{func:"U8",void:true,args:[W.hsw]},{func:"Vv",ret:P.qU,args:[P.a]},{func:"i8",ret:P.qU,args:[[P.WO,P.a]]},"values",{func:"nUs",ret:Z.lX,args:[P.qU],named:{map:P.T8}},"message","targets",];$=null
+init.metadata=["object","sender","e",{func:"pd",args:[P.qU]},{func:"a1",ret:P.lf},"closure","isolate","numberOfArguments","arg1","arg2","arg3","arg4",{func:"l4",args:[null]},"_",{func:"Pt",ret:P.qU,args:[P.KN]},"bytes",{func:"RJ",ret:P.qU,args:[null]},{func:"T9",void:true},{func:"LP",void:true,args:[{func:"T9",void:true}]},{func:"G5O",void:true,args:[null]},"value",{func:"Vx",void:true,args:[null],opt:[P.BpP]},,"error","stackTrace",{func:"rE",void:true,args:[P.JBS,P.e4y,P.JBS,null,P.BpP]},"self","parent","zone",{func:"h2",args:[P.JBS,P.e4y,P.JBS,{func:"ny"}]},"f",{func:"aE",args:[P.JBS,P.e4y,P.JBS,{func:"l4",args:[null]},null]},"arg",{func:"ta",args:[P.JBS,P.e4y,P.JBS,{func:"bh",args:[null,null]},null,null]},{func:"HQr",ret:{func:"ny"},args:[P.JBS,P.e4y,P.JBS,{func:"ny"}]},{func:"qs",ret:{func:"l4",args:[null]},args:[P.JBS,P.e4y,P.JBS,{func:"l4",args:[null]}]},{func:"tD",ret:{func:"bh",args:[null,null]},args:[P.JBS,P.e4y,P.JBS,{func:"bh",args:[null,null]}]},{func:"iV",void:true,args:[P.JBS,P.e4y,P.JBS,{func:"ny"}]},{func:"Uk",ret:P.kWp,args:[P.JBS,P.e4y,P.JBS,P.a6,{func:"T9",void:true}]},"duration","callback",{func:"zk",ret:P.kWp,args:[P.JBS,P.e4y,P.JBS,P.a6,{func:"JX",void:true,args:[P.kWp]}]},{func:"SA",void:true,args:[P.JBS,P.e4y,P.JBS,P.qU]},"line",{func:"DM",void:true,args:[P.qU]},{func:"Jj",ret:P.JBS,args:[P.JBS,P.e4y,P.JBS,P.n7,P.T8]},"specification","zoneValues",{func:"qa",ret:P.SQ,args:[null,null]},"a","b",{func:"bX",ret:P.KN,args:[null]},{func:"uJ",ret:P.a,args:[null]},{func:"Dl",ret:P.KN,args:[P.fRn,P.fRn]},{func:"I8",ret:P.SQ,args:[P.a,P.a]},{func:"ZY",ret:P.KN,args:[P.a]},"receiver",{func:"b3",args:[null,null,null,null]},"name","oldValue","newValue","captureThis","arguments","o",{func:"VH",ret:P.SQ,args:[P.IN]},"symbol","v",{func:"DW",ret:U.rx,args:[P.qU]},{func:"ZU",args:[U.rx,null],named:{globals:[P.T8,P.qU,P.a],oneTime:null}},!1,{func:"qq",ret:[P.QV,K.Aep],args:[P.QV]},"iterable",{func:"Tx",ret:P.KN,args:[D.af,D.af]},{func:"I6a",ret:P.qU},"invocation","fractionDigits",{func:"ny"},{func:"N4",args:[P.EH]},"code","key","val",{func:"bh",args:[null,null]},{func:"Za",args:[P.qU,null]},{func:"TS",args:[null,P.qU]},{func:"Yv",void:true,args:[null,null,null]},"c",{func:"Ab",void:true,args:[D.Mk]},"event",{func:"lrq",void:true,args:[D.N7]},{func:"Cj",void:true,args:[D.Ix]},"exception",{func:"Af",args:[D.wv]},"vm",{func:"wk",ret:P.SQ,args:[null]},"oldEvent",{func:"ai",void:true,args:[W.niR]},"obj","i","responseText",{func:"Om",args:[L.Z5,L.Z5]},{func:"HE",ret:P.KN,args:[P.KN,P.KN]},"column","done",{func:"Hj",ret:P.qU,args:[G.Y2]},"row",{func:"Sz",void:true,args:[W.ea,null,W.h4]},"detail","target","objectClass",{func:"Wr",ret:[P.b8,D.af],args:[P.qU]},"text",{func:"de",ret:[P.b8,D.af],args:[null]},"limit","dummy",{func:"Q5",args:[D.vO]},{func:"jB",args:[D.uq]},{func:"Np8",void:true,args:[W.ea,null,W.KV]},{func:"VI",args:[D.kx]},{func:"ux",void:true,args:[P.SQ,P.EH]},"expand","onDone","result",{func:"aG",void:true,args:[P.EH]},{func:"lJL",args:[{func:"T9",void:true}]},"data","theError","theStackTrace",{func:"Tw",args:[P.a]},{func:"YP",void:true,opt:[null]},{func:"uu",void:true,args:[P.a],opt:[P.BpP]},{func:"yV",args:[null],opt:[null]},{func:"Wy",ret:P.SQ},"ignored","convert","element",{func:"K5",args:[P.SQ]},{func:"a9",void:true,opt:[P.b8]},"resumeSignal",{func:"ha",args:[null,P.BpP]},{func:"N5",void:true,args:[null,P.BpP]},"each","k",{func:"DR",ret:P.KN,args:[null,P.KN]},{func:"v0",void:true,args:[P.KN,P.KN]},{func:"lv",args:[P.IN,null]},{func:"Tla",ret:P.KN,args:[P.qU]},{func:"cS",ret:P.Vf,args:[P.qU]},{func:"cd",ret:P.SQ,args:[P.KN]},{func:"wJ",ret:P.KN,args:[null,null]},"byteString",{func:"lu",void:true,args:[P.qU],opt:[null]},"xhr",{func:"bB",void:true,args:[W.AjY]},{func:"fK",args:[D.af]},{func:"IS",ret:O.Hz},"response","st",{func:"D8",void:true,args:[D.vO]},"newProfile",{func:"DT",ret:P.qU,args:[P.SQ]},"newSpace",{func:"Z5",args:[P.KN]},{func:"iR",args:[P.KN,null]},{func:"OE",ret:P.QV,args:[{func:"pd",args:[P.qU]}]},{func:"T5",ret:P.QV,args:[{func:"uW",ret:P.QV,args:[P.qU]}]},"s","m",{func:"KDY",ret:P.b8,args:[null]},"tagProfile","rec",{func:"IM",args:[N.HV]},{func:"d4C",void:true,args:[W.AjY,null,W.h4]},{func:"Ig",ret:P.qU,args:[P.qU]},"url",{func:"nxg",ret:P.qU,args:[P.Vf]},"time",{func:"FJ",ret:P.qU,args:[P.qU],opt:[P.SQ]},"wasTruncated",{func:"B4",args:[P.e4y,P.JBS]},{func:"djS",args:[P.JBS,P.e4y,P.JBS,{func:"l4",args:[null]}]},"x",{func:"VL8",void:true,args:[P.a,P.a]},"prop","records",{func:"My",args:[L.Zl,null]},"model","node","oneTime",{func:"cq",args:[null,null,null]},{func:"jk",void:true,args:[P.qU,P.qU]},{func:"aA",void:true,args:[P.WO,P.T8,P.WO]},{func:"YT",void:true,args:[[P.WO,T.yj]]},"changes","jsElem","extendee",{func:"zi",args:[null,P.qU,P.qU]},{func:"tw",args:[null,W.KV,P.SQ]},{func:"qj",ret:P.SQ,args:[null],named:{skipChanges:P.SQ}},"skipChanges",{func:"Gm",args:[[P.WO,T.yj]]},{func:"ppm",ret:U.vn,args:[U.rx,U.rx]},{func:"Qc",args:[U.rx]},{func:"Tz",void:true,args:[null,null]},"mutations","observer","id","map",{func:"rP",args:[V.qC]},{func:"rl6",ret:P.b8},"scriptCoverage","owningIsolate",{func:"K7",void:true,args:[[P.WO,P.KN]]},"counters",{func:"a6",ret:[P.b8,[P.WO,D.dy]],args:[D.vO]},"classList",{func:"ze",ret:[P.b8,D.dy],args:[[P.WO,D.dy]]},"classes","timer","newBpts",{func:"NuY",ret:P.qU,args:[D.kx]},{func:"qQ",void:true,args:[D.vx]},"script","func",{func:"T2",void:true,args:[P.qU,L.U2]},{func:"Riv",args:[P.V2]},{func:"T3G",args:[P.qU,L.U2]},"CloseEvent","Event",{func:"cOy",args:[W.cxu]},"msg",{func:"S0",void:true,args:[P.SQ,null]},"exp","details",{func:"D2",ret:A.Ap,args:[P.qU]},"ref","ifValue",{func:"PzC",void:true,args:[[P.WO,G.Zq]]},"splices",{func:"U8",void:true,args:[W.hsw]},{func:"Vv",ret:P.qU,args:[P.a]},{func:"i8",ret:P.qU,args:[[P.WO,P.a]]},"values",{func:"nUs",ret:Z.lX,args:[P.qU],named:{map:P.T8}},"message","targets",];$=null
 I = I.$finishIsolateConstructor(I)
 $=new I()
 function convertToFastObject(a){function MyClass(){}MyClass.prototype=a
@@ -23663,7 +23941,7 @@
 a[c]=y
 a[d]=function(){var w=$[c]
 try{if(w===y){$[c]=x
-try{w=$[c]=e()}finally{if(w===y)if($[c]===x)$[c]=null}}else{if(w===x)H.ag(b)}return w}finally{$[d]=function(){return this[c]}}}}
+try{w=$[c]=e()}finally{if(w===y)if($[c]===x)$[c]=null}}else{if(w===x)H.eQK(b)}return w}finally{$[d]=function(){return this[c]}}}}
 I.$finishIsolateConstructor=function(a){var y=a.p
 function Isolate(){var x=Object.prototype.hasOwnProperty
 for(var w in y)if(x.call(y,w))this[w]=y[w]
diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/class_view.html b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/class_view.html
index 5b03867..d1fbf97 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/class_view.html
+++ b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/class_view.html
@@ -92,7 +92,7 @@
     </div>
 
     <template if="{{ cls.error != null }}">
-      <error-ref ref="{{ cls.error }}"></error>
+      <error-ref ref="{{ cls.error }}"></error-ref>
     </template>
 
     <hr>
diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/context_ref.html b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/context_ref.html
new file mode 100644
index 0000000..deb767b
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/context_ref.html
@@ -0,0 +1,33 @@
+<link rel="import" href="../../../../packages/polymer/polymer.html">
+<link rel="import" href="curly_block.html">
+<link rel="import" href="observatory_element.html">
+<link rel="import" href="service_ref.html">
+
+<polymer-element name="context-ref" extends="service-ref">
+  <template>
+    <link rel="stylesheet" href="css/shared.css">
+    <span>
+      <a on-click="{{ goto }}" _href="{{ url }}"><em>Context</em> ({{ ref.length }})</a>
+      <curly-block callback="{{ expander() }}">
+        <div class="memberList">
+          <div class="memberItem">
+            <div class="memberName">parent</div>
+            <div class="memberValue">
+              <any-service-ref ref="{{ ref.parentContext }}"></any-service-ref>
+            </div>
+          </div>
+          <template repeat="{{ variable in ref.variables }}">
+            <div class="memberItem">
+              <div class="memberName">[{{ variable['index']}}]</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ variable['value'] }}"></any-service-ref>
+              </div>
+            </div>
+          </template>
+        </div>
+      </curly-block>
+    </span>
+  </template>
+</polymer-element>
+
+<script type="application/dart" src="context_ref.dart"></script>
diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/context_view.html b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/context_view.html
new file mode 100644
index 0000000..0879f5f
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/context_view.html
@@ -0,0 +1,69 @@
+<link rel="import" href="../../../../packages/polymer/polymer.html">
+<link rel="import" href="class_ref.html">
+<link rel="import" href="field_ref.html">
+<link rel="import" href="function_ref.html">
+<link rel="import" href="instance_ref.html">
+<link rel="import" href="observatory_element.html">
+<link rel="import" href="nav_bar.html">
+<link rel="import" href="object_common.html">
+<link rel="import" href="context_ref.html">
+
+<polymer-element name="context-view" extends="observatory-element">
+  <template>
+    <link rel="stylesheet" href="css/shared.css">
+    <nav-bar>
+      <top-nav-menu></top-nav-menu>
+      <isolate-nav-menu isolate="{{ context.isolate }}"></isolate-nav-menu>
+      <!-- TODO(turnidge): Add library nav menu here. -->
+      <class-nav-menu cls="{{ context.clazz }}"></class-nav-menu>
+      <nav-menu link="." anchor="instance" last="{{ true }}"></nav-menu>
+      <nav-refresh callback="{{ refresh }}"></nav-refresh>
+      <nav-control></nav-control>
+    </nav-bar>
+
+    <template if="{{ !context.isError }}">
+      <div class="content">
+        <h1>instance of Context</h1>
+
+        <object-common object="{{ context }}"></object-common>
+
+        <div class="memberList">
+          <div class="memberItem">&nbsp;</div>
+
+          <div class="memberItem">
+            <div class="memberName">parent context</div>
+            <div class="memberValue">
+              <any-service-ref ref="{{ context.parentContext }}"></any-service-ref>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <hr>
+
+      <div class="content">
+        <template if="{{ context.variables.isNotEmpty }}">
+          variables ({{ context.variables.length }})
+          <curly-block expand="{{ context.variables.length <= 8 }}">
+            <div class="memberList">
+              <template repeat="{{ variable in context.variables }}">
+                <div class="memberItem">
+                  <div class="memberName">[{{ variable['index']}}]</div>
+                  <div class="memberValue">
+                    <any-service-ref ref="{{ variable['value'] }}"></any-service-ref>
+                  </div>
+                </div>
+              </template>
+            </div>
+          </curly-block><br><br>
+        </template>
+      </div>
+
+      <br><br><br><br>
+      <br><br><br><br>
+
+    </template>
+  </template>
+</polymer-element>
+
+<script type="application/dart" src="context_view.dart"></script>
diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/eval_box.html b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/eval_box.html
index 6461fc2..b556358 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/eval_box.html
+++ b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/eval_box.html
@@ -7,7 +7,7 @@
   <template>
     <style>
       .textbox {
-        width: 80ex;
+        flex-grow: 1;
         font: 400 16px 'Montserrat', sans-serif;
       }
       .bigtextbox {
@@ -18,9 +18,10 @@
       }
       .radios {
         display: inline;
+        padding-right: 30px;
       }
       .radios label{
-        padding-left: 15px;
+        padding-left: 10px;
       }
       .historyExpr, .historyValue {
         vertical-align: text-top;
@@ -42,7 +43,7 @@
         padding: 6px 6px;
       }
     </style>
-    <form>
+    <form style="display:flex; flex-direction:row; align-items:flex-end">
       <template if="{{ lineMode == '1-line' }}">
         <input class="textbox" type="text" value="{{ text }}">
       </template>
@@ -53,11 +54,13 @@
 
       <input class="button" type="submit" value="Evaluate" on-click="{{ eval }}">
       <div class="radios" on-change="{{ updateLineMode }}">
-        <label for="1-line">1-line
+        <label for="1-line">
           <input type="radio" name="lineMode" value="1-line" checked>
+          1-line
         </label>
-        <label for="N-line">N-line
+        <label for="N-line">
           <input type="radio" name="lineMode" value="N-line">
+          N-line
         </label>
       </div>
     </form>
diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/instance_ref.html b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/instance_ref.html
index d179040..ab7bb16 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/instance_ref.html
+++ b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/instance_ref.html
@@ -22,11 +22,17 @@
         <div title="{{ hoverText }}">{{ ref.valueAsString }}</div>
       </template>
 
-      <template if="{{ ref.isString || ref.isBool || ref.isInt || ref.isDouble || ref.isNull }}">
+      <template if="{{ ref.isBool || ref.isInt ||
+                       ref.isDouble || ref.isNull }}">
         <a on-click="{{ goto }}" _href="{{ url }}">{{ ref.valueAsString }}</a>
       </template>
 
-      <template if="{{ ref.isType }}">
+      <template if="{{ ref.isString }}">
+        <a on-click="{{ goto }}" _href="{{ url }}">{{ asStringLiteral(ref.valueAsString, ref.valueAsStringIsTruncated) }}</a>
+      </template>
+
+
+      <template if="{{ ref.isAbstractType }}">
         <a on-click="{{ goto }}" _href="{{ url }}">{{ ref.name }}</a>
       </template>
 
@@ -37,7 +43,7 @@
         </a>
       </template>
 
-      <template if="{{ ref.isInstance && !ref.isClosure }}">
+      <template if="{{ ref.isPlainInstance }}">
         <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
         <curly-block callback="{{ expander() }}">
           <div class="memberList">
@@ -63,13 +69,47 @@
               <div class="memberItem">
                 <div class="memberName">[{{ element['index']}}]</div>
                 <div class="memberValue">
-                  <any-service-ref ref="{{ element['value'] }}"></instance-ref>
+                  <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
                 </div>
               </div>
             </template>
           </div>
         </curly-block>
       </template>
+
+      <template if="{{ ref.isMirrorReference }}">
+        <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
+        <curly-block callback="{{ expander() }}">
+          <div class="memberList">
+            <div class="memberItem">
+              <div class="memberName">referent</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ ref.referent }}"></any-service-ref>
+              </div>
+            </div>
+          </div>
+        </curly-block>
+      </template>
+
+      <template if="{{ ref.isWeakProperty }}">
+        <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
+        <curly-block callback="{{ expander() }}">
+          <div class="memberList">
+            <div class="memberItem">
+              <div class="memberName">key</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ ref.key }}"></any-service-ref>
+              </div>
+            </div>
+            <div class="memberItem">
+              <div class="memberName">value</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ ref.value }}"></any-service-ref>
+              </div>
+            </div>
+          </div>
+        </curly-block>
+      </template>
     </span>
   </template>
 </polymer-element>
diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/instance_view.html b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/instance_view.html
index fee5ce9..6a97bea 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/instance_view.html
+++ b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/instance_view.html
@@ -9,6 +9,8 @@
 <link rel="import" href="instance_ref.html">
 <link rel="import" href="observatory_element.html">
 <link rel="import" href="nav_bar.html">
+<link rel="import" href="object_common.html">
+<link rel="import" href="context_ref.html">
 
 <polymer-element name="instance-view" extends="observatory-element">
   <template>
@@ -29,94 +31,42 @@
 
     <template if="{{ !instance.isError }}">
       <div class="content">
-        <template if="{{ instance.isType }}">
+        <template if="{{ instance.isAbstractType }}">
           <h1>type {{ instance.name }}</h1>
         </template>
-        <template if="{{ !instance.isType }}">
+        <template if="{{ !instance.isAbstractType }}">
           <h1>instance of {{ instance.clazz.name }}</h1>
         </template>
+
+        <object-common object="{{ instance }}"></object-common>
+
         <div class="memberList">
-          <div class="memberItem">
-            <div class="memberName">class</div>
-            <div class="memberValue">
-              <class-ref ref="{{ instance.clazz }}">
-              </class-ref>
-            </div>
-          </div>
+          <div class="memberItem">&nbsp;</div>
+
           <template if="{{ instance.valueAsString != null }}">
             <div class="memberItem">
               <div class="memberName">value</div>
               <div class="memberValue">{{ instance.valueAsString }}</div>
             </div>
           </template>
-          <div class="memberItem" title="Space for this object in memory">
-            <div class="memberName">size</div>
-            <div class="memberValue">{{ instance.size | formatSize }}</div>
-          </div>
-          <div class="memberItem" title="Space that would be reclaimed if references to this object were replaced with null">
-            <div class="memberName">retained size</div>
-            <div class="memberValue">
-              <template if="{{ retainedBytes == null }}">
-                <eval-link callback="{{ retainedSize }}"
-                           label="[calculate]">
-                </eval-link>
-              </template>
-              <template if="{{ retainedBytes != null }}">
-                {{ retainedBytes | formatSize }}
-              </template>
+
+          <template if="{{ instance.isString }}">
+            <div class="memberItem">
+              <div class="memberName">valueAsLiteral</div>
+              <div class="memberValue"> {{ asStringLiteral(instance.valueAsString, instance.valueAsStringIsTruncated) }}</div>
             </div>
-          </div>
-          <div class="memberItem">
-            <div class="memberName">retaining path</div>
-            <div class="memberValue">
-              <template if="{{ path == null }}">
-                <eval-link callback="{{ retainingPath }}"
-                           label="[find]"
-                           expr="10">
-                </eval-link>
-              </template>
-              <template if="{{ path != null }}">
-                <template repeat="{{ element in path['elements'] }}">
-                <div class="memberItem">
-                  <div class="memberName">[{{ element['index']}}]</div>
-                  <div class="memberValue">
-                    <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
-                    <template if="{{ element['parentField'] != null }}">
-                      in <field-ref ref="{{ element['parentField'] }}"></field-ref> of
-                    </template>
-                    <template if="{{ element['parentListIndex'] != null }}">
-                      in [{{ element['parentListIndex'] }}] of
-                    </template>
-                  </div>
-                  </div>
-                </template>
-                <template if="{{ path['length'] > path['elements'].length }}">
-                  showing {{ path['elements'].length }} of {{ path['length'] }}
-                  <eval-link
-                    callback="{{ retainingPath }}"
-                    label="[find more]"
-                    expr="{{ path['elements'].length * 2 }}">
-                  </eval-link>
-                </template>
-              </template>
+          </template>
+
+          <template if="{{ instance.isMirrorReference }}">
+            <div class="memberItem">
+              <div class="memberName">referent</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.referent }}">
+                </any-service-ref>
+              </div>
             </div>
-          </div>
-          <div class="memberItem" title="Objects which directly reference this object">
-            <div class="memberName">inbound references</div>
-            <div class="memberValue">
-              <template if="{{ inboundReferences == null }}">
-                <eval-link callback="{{ fetchInboundReferences }}"
-                           label="[find]"
-                           expr="100">
-                </eval-link>
-              </template>
-              <template if="{{ inboundReferences != null }}">
-                <template repeat="{{ reference in inboundReferences['references'] }}">
-                  <inbound-reference ref="{{ reference }}"></inbound-reference>
-                </template>
-              </template>
-            </div>
-          </div>
+          </template>
+
           <template if="{{ instance.typeClass != null }}">
             <div class="memberItem">
               <div class="memberName">type class</div>
@@ -126,6 +76,7 @@
               </div>
             </div>
           </template>
+
           <template if="{{ instance.isClosure }}">
             <div class="memberItem">
               <div class="memberName">closure function</div>
@@ -135,8 +86,32 @@
               </div>
             </div>
           </template>
+          <template if="{{ instance.isClosure }}">
+            <div class="memberItem">
+              <div class="memberName">closure context</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.closureCtxt }}">
+                </any-service-ref>
+              </div>
+            </div>
+          </template>
 
-          <div class="memberItem">&nbsp;</div>
+          <template if="{{ instance.isWeakProperty }}">
+            <div class="memberItem">
+              <div class="memberName">key</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.key }}">
+                </any-service-ref>
+              </div>
+            </div>
+            <div class="memberItem">
+              <div class="memberName">value</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.value }}">
+                </any-service-ref>
+              </div>
+            </div>
+          </template>
 
           <div class="memberItem">
             <div class="memberName">toString()</div>
@@ -150,6 +125,20 @@
       <hr>
 
       <div class="content">
+        <template if="{{ instance.nativeFields.isNotEmpty }}">
+          native fields ({{ instance.nativeFields.length }})
+          <curly-block expand="{{ instance.nativeFields.length <= 8 }}">
+            <div class="memberList">
+              <template repeat="{{ field in instance.nativeFields }}">
+                <div class="memberItem">
+                  <div class="memberName">[{{ field['index']}}]</div>
+                  <div class="memberValue">[{{ field['value']}}]</div>
+                </div>
+              </template>
+            </div>
+          </curly-block><br><br>
+        </template>
+
         <template if="{{ instance.fields.isNotEmpty }}">
           fields ({{ instance.fields.length }})
           <curly-block expand="{{ instance.fields.length <= 8 }}">
@@ -168,20 +157,6 @@
           </curly-block><br><br>
         </template>
 
-        <template if="{{ instance.nativeFields.isNotEmpty }}">
-          native fields ({{ instance.nativeFields.length }})
-          <curly-block expand="{{ instance.nativeFields.length <= 8 }}">
-            <div class="memberList">
-              <template repeat="{{ field in instance.nativeFields }}">
-                <div class="memberItem">
-                  <div class="memberName">[{{ field['index']}}]</div>
-                  <div class="memberValue">[{{ field['value']}}]</div>
-                </div>
-              </template>
-            </div>
-          </curly-block><br><br>
-        </template>
-
         <template if="{{ instance.elements.isNotEmpty }}">
           elements ({{ instance.elements.length }})
           <curly-block expand="{{ instance.elements.length <= 8 }}">
@@ -190,8 +165,7 @@
                 <div class="memberItem">
                   <div class="memberName">[{{ element['index']}}]</div>
                   <div class="memberValue">
-                    <any-service-ref ref="{{ element['value'] }}">
-                    </instance-ref>
+                    <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
                   </div>
                 </div>
               </template>
@@ -205,6 +179,7 @@
       <div class="content">
         <eval-box callback="{{ eval }}"></eval-box>
       </div>
+
       <br><br><br><br>
       <br><br><br><br>
 
diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/object_common.html b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/object_common.html
new file mode 100644
index 0000000..63c78a1
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/object_common.html
@@ -0,0 +1,100 @@
+<link rel="import" href="../../../../packages/polymer/polymer.html">
+<link rel="import" href="class_ref.html">
+<link rel="import" href="error_view.html">
+<link rel="import" href="field_ref.html">
+<link rel="import" href="function_ref.html">
+<link rel="import" href="inbound_reference.html">
+<link rel="import" href="instance_ref.html">
+<link rel="import" href="observatory_element.html">
+<link rel="import" href="nav_bar.html">
+<link rel="import" href="eval_link.html">
+
+<polymer-element name="object-common" extends="observatory-element">
+  <template>
+    <link rel="stylesheet" href="css/shared.css">
+    <div class="memberList">
+
+      <div class="memberItem">
+        <div class="memberName">class</div>
+        <div class="memberValue">
+          <class-ref ref="{{ object.clazz }}"></class-ref>
+        </div>
+      </div>
+
+      <div class="memberItem" title="Space for this object in memory">
+        <div class="memberName">size</div>
+        <div class="memberValue">{{ object.size | formatSize }}</div>
+      </div>
+
+      <div class="memberItem" title="Space that would be reclaimed if references to this object were replaced with null">
+        <div class="memberName">retained size</div>
+        <div class="memberValue">
+          <template if="{{ retainedBytes == null }}">
+            <eval-link callback="{{ retainedSize }}"
+                       label="[calculate]">
+            </eval-link>
+          </template>
+          <template if="{{ retainedBytes != null }}">
+            {{ retainedBytes | formatSize }}
+          </template>
+        </div>
+      </div>
+
+      <div class="memberItem">
+        <div class="memberName">retaining path</div>
+        <div class="memberValue">
+          <template if="{{ path == null }}">
+            <eval-link callback="{{ retainingPath }}"
+                       label="[find]"
+                       expr="10">
+            </eval-link>
+          </template>
+          <template if="{{ path != null }}">
+            <template repeat="{{ element in path['elements'] }}">
+            <div class="memberItem">
+              <div class="memberName">[{{ element['index']}}]</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
+                <template if="{{ element['parentField'] != null }}">
+                  in <field-ref ref="{{ element['parentField'] }}"></field-ref> of
+                </template>
+                <template if="{{ element['parentListIndex'] != null }}">
+                  in [{{ element['parentListIndex'] }}] of
+                </template>
+              </div>
+              </div>
+            </template>
+            <template if="{{ path['length'] > path['elements'].length }}">
+              showing {{ path['elements'].length }} of {{ path['length'] }}
+              <eval-link
+                callback="{{ retainingPath }}"
+                label="[find more]"
+                expr="{{ path['elements'].length * 2 }}">
+              </eval-link>
+            </template>
+          </template>
+        </div>
+      </div>
+
+      <div class="memberItem" title="Objects which directly reference this object">
+        <div class="memberName">inbound references</div>
+        <div class="memberValue">
+          <template if="{{ inboundReferences == null }}">
+            <eval-link callback="{{ fetchInboundReferences }}"
+                       label="[find]"
+                       expr="100">
+            </eval-link>
+          </template>
+          <template if="{{ inboundReferences != null }}">
+            <template repeat="{{ reference in inboundReferences['references'] }}">
+              <inbound-reference ref="{{ reference }}"></inbound-reference>
+            </template>
+          </template>
+        </div>
+      </div>
+
+   </div>
+  </template>
+</polymer-element>
+
+<script type="application/dart" src="object_common.dart"></script>
diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/service_view.html b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/service_view.html
index 889dd84..0262d05 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/service_view.html
+++ b/runtime/bin/vmservice/observatory/deployed/web/packages/observatory/src/elements/service_view.html
@@ -2,6 +2,7 @@
 <link rel="import" href="breakpoint_list.html">
 <link rel="import" href="class_view.html">
 <link rel="import" href="code_view.html">
+<link rel="import" href="context_view.html">
 <link rel="import" href="error_view.html">
 <link rel="import" href="field_view.html">
 <link rel="import" href="function_view.html">
diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/boot.js b/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/boot.js
index 62d72a7..419ebb1 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/boot.js
+++ b/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/boot.js
@@ -33,7 +33,12 @@
 /// discovered in the HTML document.
 (function() {
   // Only run in Dartium.
-  if (navigator.userAgent.indexOf('(Dart)') === -1) return;
+  if (!navigator.dartEnabled &&
+      // TODO(sigmund): remove userAgent check once 1.6 rolls as stable.
+      // See: dartbug.com/18463
+      (navigator.userAgent.indexOf('(Dart)') === -1)) {
+    return;
+  }
 
   // Extract a Dart import URL from a script tag, which is the 'src' attribute
   // of the script tag, or a data-url with the script contents for inlined code.
diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/polymer.html b/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/polymer.html
index 3a3a688..6affec8 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/polymer.html
+++ b/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/polymer.html
@@ -15,7 +15,7 @@
 // script tag is necessary to work around a bug in Chrome 36.
 </script>
 
-<!-- unminfied for debugging:
+<!-- unminified for debugging:
 <link rel="import" href="src/js/polymer/layout.html">
 <script src="src/js/polymer/polymer.concat.js"></script>
 -->
diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/src/js/polymer/build.log b/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/src/js/polymer/build.log
index ab39540..703f18d 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/src/js/polymer/build.log
+++ b/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/src/js/polymer/build.log
@@ -1,37 +1,34 @@
 BUILD LOG
 ---------
-Build Time: 2014-07-24T17:50:13
+Build Time: 2014-08-12T15:26:59
 
 NODEJS INFORMATION
 ==================
-nodejs: v0.10.21
+nodejs: v0.10.29
 chai: 1.9.1
-grunt-audit: 0.0.3
 grunt: 0.4.5
+grunt-audit: 0.0.3
 grunt-concat-sourcemap: 0.4.3
-grunt-contrib-concat: 0.4.0
-grunt-contrib-uglify: 0.4.0
-grunt-karma: 0.8.3
+grunt-contrib-concat: 0.5.0
+grunt-contrib-uglify: 0.4.1
 grunt-contrib-yuidoc: 0.5.2
+grunt-karma: 0.8.3
 grunt-string-replace: 0.2.7
-karma: 0.12.17
+karma: 0.12.21
 karma-crbot-reporter: 0.0.4
 karma-firefox-launcher: 0.1.3
 karma-ie-launcher: 0.1.5
-karma-mocha: 0.1.6
+karma-mocha: 0.1.7
 karma-safari-launcher: 0.1.1
 karma-script-launcher: 0.1.0
-mocha: 1.20.1
+mocha: 1.21.4
 
 REPO REVISIONS
 ==============
-polymer-expressions: 20247f68f0bc401cbca852fb3cfbdf12ec95a135
-polymer-gestures: 1353a3aadee345e3e4cd35f9788d02595a27cb30
-polymer-dev:
-  (0.3.4) 6a3e1b0e2a0bbe546f6896b3f4f064950d7aee8f
-  (with patch for CSP issue) 370b65fa23d6bb283923b10a0b9078863f5e9676
+polymer-expressions: 92f860ef9ff871e4b51fc5da38b2b76ba13ebdbe
+polymer-gestures: a21142376f0c8a9541a2919d3f77ca557d13afe9
+polymer-dev: 5d00e4b0252e443e2ed6d5c4a04a568e72ef3b25
 
 BUILD HASHES
 ============
-build/polymer.js: ebbc1241930fb9a1bd7d216b0e3510dc1d5963da
-(without patch, it would be 3e0477c0b09f5800e359044f3358fd1edc6f8449)
+build/polymer.js: 23408455239101d17426ef7448361730103cb2cf
\ No newline at end of file
diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/src/js/polymer/polymer.js b/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/src/js/polymer/polymer.js
index 759356b..ce50ae2 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/src/js/polymer/polymer.js
+++ b/runtime/bin/vmservice/observatory/deployed/web/packages/polymer/src/js/polymer/polymer.js
@@ -7,8 +7,8 @@
  * Code distributed by Google as part of the polymer project is also
  * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
  */
-// @version: 0.3.4-370b65f
-window.PolymerGestures={hasSDPolyfill:Boolean(window.ShadowDOMPolyfill)},PolymerGestures.wrap=PolymerGestures.hasSDPolyfill?ShadowDOMPolyfill.wrapIfNeeded:function(a){return a},function(a){var b=!1,c=document.createElement("meta");if(!a.hasSDPolyfill&&c.createShadowRoot){var d=c.createShadowRoot(),e=document.createElement("span");d.appendChild(e),c.addEventListener("testpath",function(a){a.path&&(b=a.path[0]===e),a.stopPropagation()});var f=new CustomEvent("testpath",{bubbles:!0});document.head.appendChild(c),e.dispatchEvent(f),c.parentNode.removeChild(c),d=e=null}c=null;var g={shadow:function(a){return a?a.shadowRoot||a.webkitShadowRoot:void 0},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);return this.canTarget(b)?b:void 0},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){var d,e;return a?(d=a.elementFromPoint(b,c),d?e=this.targetingShadow(d):a!==document&&(e=this.olderShadow(a)),this.searchRoot(e,b,c)||d):void 0},owner:function(a){if(!a)return document;for(var b=a;b.parentNode;)b=b.parentNode;return b.nodeType!=Node.DOCUMENT_NODE&&b.nodeType!=Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){if(b&&a.path)return a.path[0];var c=a.clientX,d=a.clientY,e=this.owner(a.target);return e.elementFromPoint(c,d)||(e=document),this.searchRoot(e,c,d)},findScrollAxis:function(c){var d;if(b&&c.path){for(var e=c.path,f=0;f<e.length;f++)if(d=e[f],d._scrollType)return d._scrollType}else for(d=a.wrap(c.currentTarget);d;){if(d._scrollType)return d._scrollType;d=d.parentNode||d.host}},LCA:function(a,b){if(a===b)return a;if(a&&!b)return a;if(b&&!a)return b;if(!b&&!a)return document;if(a.contains&&a.contains(b))return a;if(b.contains&&b.contains(a))return b;var c=this.depth(a),d=this.depth(b),e=c-d;for(e>=0?a=this.walk(a,e):b=this.walk(b,-e);a&&b&&a!==b;)a=a.parentNode||a.host,b=b.parentNode||b.host;return a},walk:function(a,b){for(var c=0;a&&b>c;c++)a=a.parentNode||a.host;return a},depth:function(a){for(var b=0;a;)b++,a=a.parentNode||a.host;return b},deepContains:function(a,b){var c=this.LCA(a,b);return c===a},insideNode:function(a,b,c){var d=a.getBoundingClientRect();return d.left<=b&&b<=d.right&&d.top<=c&&c<=d.bottom}};a.targetFinding=g,a.findTarget=g.findTarget.bind(g),a.deepContains=g.deepContains.bind(g),a.insideNode=g.insideNode}(window.PolymerGestures),function(){function a(a){return"body /deep/ "+b(a)}function b(a){return'[touch-action="'+a+'"]'}function c(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+";}"}var d=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]},"manipulation"],e="",f=(document.head,"string"==typeof document.head.style.touchAction),g=!window.ShadowDOMPolyfill&&document.head.createShadowRoot;if(f){d.forEach(function(d){String(d)===d?(e+=b(d)+c(d)+"\n",g&&(e+=a(d)+c(d)+"\n")):(e+=d.selectors.map(b)+c(d.rule)+"\n",g&&(e+=d.selectors.map(a)+c(d.rule)+"\n"))});var h=document.createElement("style");h.textContent=e,document.head.appendChild(h)}}(),function(a){var b=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],c=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],d=function(){return function(){}},e={preventTap:d,makeBaseEvent:function(a,b){var c=document.createEvent("Event");return c.initEvent(a,b.bubbles||!1,b.cancelable||!1),c.preventTap=e.preventTap(c),c},makeGestureEvent:function(a,b){b=b||Object.create(null);for(var c,d=this.makeBaseEvent(a,b),e=0,f=Object.keys(b);e<f.length;e++)c=f[e],d[c]=b[c];return d},makePointerEvent:function(a,d){d=d||Object.create(null);for(var e,f=this.makeBaseEvent(a,d),g=0;g<b.length;g++)e=b[g],f[e]=d[e]||c[g];f.buttons=d.buttons||0;var h=0;return h=d.pressure?d.pressure:f.buttons?.5:0,f.x=f.clientX,f.y=f.clientY,f.pointerId=d.pointerId||0,f.width=d.width||0,f.height=d.height||0,f.pressure=h,f.tiltX=d.tiltX||0,f.tiltY=d.tiltY||0,f.pointerType=d.pointerType||"",f.hwTimestamp=d.hwTimestamp||0,f.isPrimary=d.isPrimary||!1,f._source=d._source||"",f}};a.eventFactory=e}(window.PolymerGestures),function(a){function b(){if(c){var a=new Map;return a.pointers=d,a}this.keys=[],this.values=[]}var c=window.Map&&window.Map.prototype.forEach,d=function(){return this.size};b.prototype={set:function(a,b){var c=this.keys.indexOf(a);c>-1?this.values[c]=b:(this.keys.push(a),this.values.push(b))},has:function(a){return this.keys.indexOf(a)>-1},"delete":function(a){var b=this.keys.indexOf(a);b>-1&&(this.keys.splice(b,1),this.values.splice(b,1))},get:function(a){var b=this.keys.indexOf(a);return this.values[b]},clear:function(){this.keys.length=0,this.values.length=0},forEach:function(a,b){this.values.forEach(function(c,d){a.call(b,c,this.keys[d],this)},this)},pointers:function(){return this.keys.length}},a.PointerMap=b}(window.PolymerGestures),function(a){var b=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp","preventTap","tapPrevented","_source"],c=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0,function(){},!1],d="undefined"!=typeof SVGElementInstance,e=a.eventFactory,f=a.hasSDPolyfill,g=a.wrap,h={pointermap:new a.PointerMap,eventMap:Object.create(null),eventSources:Object.create(null),eventSourceList:[],gestures:[],gestureQueue:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},registerGesture:function(a,b){this.gestures.push(b)},register:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.unregister.call(b,a)},down:function(a){this.fireEvent("down",a)},move:function(a){a.type="move",this.fillGestureQueue(a)},up:function(a){this.fireEvent("up",a)},cancel:function(a){a.tapPrevented=!0,this.fireEvent("up",a)},eventHandler:function(a){if(!a._handledByPG){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPG=!0}},listen:function(a,b){for(var c,d=0,e=b.length;e>d&&(c=b[d]);d++)this.addEvent(a,c)},unlisten:function(a,b){for(var c,d=0,e=b.length;e>d&&(c=b[d]);d++)this.removeEvent(a,c)},addEvent:function(a,b){f?a.addEventListener_(b,this.boundHandler):a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){f?a.removeEventListener_(b,this.boundHandler):a.removeEventListener(b,this.boundHandler)},makeEvent:function(a,b){var c=e.makePointerEvent(a,b);return c.preventDefault=b.preventDefault,c.tapPrevented=b.tapPrevented,c._target=c._target||b.target,c},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var e,f=Object.create(null),h=0;h<b.length;h++)e=b[h],f[e]=a[e]||c[h],("target"===e||"relatedTarget"===e)&&(d&&f[e]instanceof SVGElementInstance&&(f[e]=f[e].correspondingUseElement),f[e]=g(f[e]));return f.preventDefault=a.preventDefault,f},dispatchEvent:function(a){var b=a._target;if(b){b.dispatchEvent(a);var c=this.cloneEvent(a);c.target=b,this.fillGestureQueue(c)}},gestureTrigger:function(){for(var a,b=0;b<this.gestureQueue.length;b++){a=this.gestureQueue[b];for(var c,d,e=0;e<this.gestures.length;e++)c=this.gestures[e],d=c[a.type],d&&d.call(c,a)}this.gestureQueue.length=0},fillGestureQueue:function(a){this.gestureQueue.length||requestAnimationFrame(this.boundGestureTrigger),this.gestureQueue.push(a)}};h.boundHandler=h.eventHandler.bind(h),h.boundGestureTrigger=h.gestureTrigger.bind(h),a.dispatcher=h,a.register=function(a){h.register(a)},a.unregister=h.unregister.bind(h),a.wrap=g}(window.PolymerGestures),function(a){function b(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),g&&(this.observer=new g(this.mutationWatcher.bind(this)))}var c=Array.prototype.forEach.call.bind(Array.prototype.forEach),d=Array.prototype.map.call.bind(Array.prototype.map),e=Array.prototype.slice.call.bind(Array.prototype.slice),f=Array.prototype.filter.call.bind(Array.prototype.filter),g=window.MutationObserver||window.WebKitMutationObserver,h="[touch-action]",i={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};b.prototype={watchSubtree:function(b){a.targetFinding.canTarget(b)&&this.observer.observe(b,i)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){c(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(h):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(e(b))},installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){var b=d(a,this.findElements,this);return b.push(f(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}},g||(b.prototype.watchSubtree=function(){console.warn("PolymerGestures: MutationObservers not found, touch-action will not be dynamically detected")}),a.Installer=b}(window.PolymerGestures),function(a){var b=a.dispatcher,c=b.pointermap,d=25,e=[0,1,4,2],f=!1;try{f=1===new MouseEvent("test",{buttons:1}).buttons}catch(g){}var h={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup"],register:function(a){a===document&&b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},lastTouches:[],isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,e=a.clientX,f=a.clientY,g=0,h=c.length;h>g&&(b=c[g]);g++){var i=Math.abs(e-b.x),j=Math.abs(f-b.y);if(d>=i&&d>=j)return!0}},prepareEvent:function(a){var c=b.cloneEvent(a);return c.pointerId=this.POINTER_ID,c.isPrimary=!0,c.pointerType=this.POINTER_TYPE,c._source="mouse",f||(c.buttons=e[c.which]||0),c},mousedown:function(d){if(!this.isEventSimulatedFromTouch(d)){var e=c.has(this.POINTER_ID);e&&this.mouseup(d);var f=this.prepareEvent(d);f.target=a.wrap(a.findTarget(d)),c.set(this.POINTER_ID,f.target),b.down(f)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var d=this.prepareEvent(a);d.target=c.get(this.POINTER_ID),b.move(d)}},mouseup:function(d){if(!this.isEventSimulatedFromTouch(d)){var e=this.prepareEvent(d);e.relatedTarget=a.wrap(a.findTarget(d)),e.target=c.get(this.POINTER_ID),b.up(e),this.cleanupMouse()}},cleanupMouse:function(){c["delete"](this.POINTER_ID)}};a.mouseEvents=h}(window.PolymerGestures),function(a){var b,c=a.dispatcher,d=a.targetFinding.allShadows.bind(a.targetFinding),e=c.pointermap,f=(Array.prototype.map.call.bind(Array.prototype.map),2500),g=200,h=20,i="touch-action",j=!1,k={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){j?c.listen(a,this.events):b.enableOnSubtree(a)},unregister:function(a){j&&c.unlisten(a,this.events)},elementAdded:function(a){var b=a.getAttribute(i),e=this.touchActionToScrollType(b);e&&(a._scrollType=e,c.listen(a,this.events),d(a).forEach(function(a){a._scrollType=e,c.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,c.unlisten(a,this.events),d(a).forEach(function(a){a._scrollType=void 0,c.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(i),e=this.touchActionToScrollType(c),f=this.touchActionToScrollType(b);e&&f?(a._scrollType=e,d(a).forEach(function(a){a._scrollType=e},this)):f?this.elementRemoved(a):e&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto|manipulation$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){(0===e.pointers()||1===e.pointers()&&e.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=null,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,g)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return("touchstart"===a||"touchmove"===a)&&(b=1),b},findTarget:function(b,c){if("touchstart"===this.currentTouchEvent.type){if(this.isPrimaryTouch(b)){var d={clientX:b.clientX,clientY:b.clientY,path:this.currentTouchEvent.path,target:a.wrap(this.currentTouchEvent.target)};return a.findTarget(d)}return a.findTarget(b)}return e.get(c)},touchToPointer:function(b){var d=this.currentTouchEvent,e=c.cloneEvent(b),f=e.pointerId=b.identifier+2;e.target=a.wrap(this.findTarget(b,f)),e.bubbles=!0,e.cancelable=!0,e.detail=this.clickCount,e.buttons=this.typeToButtons(d.type),e.width=b.webkitRadiusX||b.radiusX||0,e.height=b.webkitRadiusY||b.radiusY||0,e.pressure=b.webkitForce||b.force||.5,e.isPrimary=this.isPrimaryTouch(b),e.pointerType=this.POINTER_TYPE,e._source="touch";var g=this;return e.preventDefault=function(){g.scrolling=!1,g.firstXY=null,d.preventDefault()},e},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,f,g=0;g<c.length;g++)d=c[g],f=this.touchToPointer(d),"touchstart"===a.type&&e.set(f.pointerId,f.target),e.has(f.pointerId)&&b.call(this,f),("touchend"===a.type||a._cancel)&&this.cleanUpPointer(f)},shouldScroll:function(b){if(this.firstXY){var c,d=a.targetFinding.findScrollAxis(b);if("none"===d)c=!1;else if("XY"===d)c=!0;else{var e=b.changedTouches[0],f=d,g="Y"===d?"X":"Y",h=Math.abs(e["client"+f]-this.firstXY[f]),i=Math.abs(e["client"+g]-this.firstXY[g]);c=h>=i}return c}},findTouch:function(a,b){for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)if(c.identifier===b)return!0},vacuumTouches:function(a){var b=a.touches;if(e.pointers()>=b.length){var c=[];e.forEach(function(a,d){if(1!==d&&!this.findTouch(b,d-2)){var e=a;c.push(e)}},this),c.forEach(function(a){this.cancel(a),e.delete(a.pointerId)})}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.down))},down:function(a){c.down(a)},touchmove:function(a){if(j)this.processTouches(a,this.move);else if(this.scrolling){if(this.firstXY){var b=a.changedTouches[0],c=b.clientX-this.firstXY.X,d=b.clientY-this.firstXY.Y,e=Math.sqrt(c*c+d*d);e>=h&&(this.touchcancel(a),this.scrolling=!0,this.firstXY=null)}}else null===this.scrolling&&this.shouldScroll(a)?this.scrolling=!0:(this.scrolling=!1,a.preventDefault(),this.processTouches(a,this.move))},move:function(a){c.move(a)},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.up)},up:function(b){b.relatedTarget=a.wrap(a.findTarget(b)),c.up(b)},cancel:function(a){c.cancel(a)},touchcancel:function(a){a._cancel=!0,this.processTouches(a,this.cancel)},cleanUpPointer:function(a){e["delete"](a.pointerId),this.removePrimaryPointer(a)},dedupSynthMouse:function(b){var c=a.mouseEvents.lastTouches,d=b.changedTouches[0];if(this.isPrimaryTouch(d)){var e={x:d.clientX,y:d.clientY};c.push(e);var g=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,c,e);setTimeout(g,f)}}};j||(b=new a.Installer(k.elementAdded,k.elementRemoved,k.elementChanged,k)),a.touchEvents=k}(window.PolymerGestures),function(a){var b=a.dispatcher,c=b.pointermap,d=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,e={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerCancel"],register:function(a){a===document&&b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var c=a;return c=b.cloneEvent(a),d&&(c.pointerType=this.POINTER_TYPES[a.pointerType]),c._source="ms",c},cleanup:function(a){c["delete"](a)},MSPointerDown:function(d){var e=this.prepareEvent(d);e.target=a.wrap(a.findTarget(d)),c.set(d.pointerId,e.target),b.down(e)},MSPointerMove:function(a){var d=this.prepareEvent(a);d.target=c.get(d.pointerId),b.move(d)},MSPointerUp:function(d){var e=this.prepareEvent(d);e.relatedTarget=a.wrap(a.findTarget(d)),e.target=c.get(e.pointerId),b.up(e),this.cleanup(d.pointerId)},MSPointerCancel:function(d){var e=this.prepareEvent(d);e.relatedTarget=a.wrap(a.findTarget(d)),e.target=c.get(e.pointerId),b.cancel(e),this.cleanup(d.pointerId)}};a.msEvents=e}(window.PolymerGestures),function(a){var b=a.dispatcher,c=b.pointermap,d={events:["pointerdown","pointermove","pointerup","pointercancel"],prepareEvent:function(a){var c=b.cloneEvent(a);return c._source="pointer",c},register:function(a){a===document&&b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},cleanup:function(a){c["delete"](a)},pointerdown:function(d){var e=this.prepareEvent(d);e.target=a.wrap(a.findTarget(d)),c.set(e.pointerId,e.target),b.down(e)},pointermove:function(a){var d=this.prepareEvent(a);d.target=c.get(d.pointerId),b.move(d)},pointerup:function(d){var e=this.prepareEvent(d);e.relatedTarget=a.wrap(a.findTarget(d)),e.target=c.get(e.pointerId),b.up(e),this.cleanup(d.pointerId)},pointercancel:function(d){var e=this.prepareEvent(d);e.relatedTarget=a.wrap(a.findTarget(d)),e.target=c.get(e.pointerId),b.cancel(e),this.cleanup(d.pointerId)}};a.pointerEvents=d}(window.PolymerGestures),function(a){var b=a.dispatcher;window.PointerEvent?b.registerSource("pointer",a.pointerEvents):window.navigator.msPointerEnabled?b.registerSource("ms",a.msEvents):(b.registerSource("mouse",a.mouseEvents),void 0!==window.ontouchstart&&b.registerSource("touch",a.touchEvents)),b.register(document)}(window.PolymerGestures),function(a){var b=a.dispatcher,c=a.eventFactory,d=new a.PointerMap,e={events:["down","move","up"],WIGGLE_THRESHOLD:4,clampDir:function(a){return a>0?1:-1},calcPositionDelta:function(a,b){var c=0,d=0;return a&&b&&(c=b.pageX-a.pageX,d=b.pageY-a.pageY),{x:c,y:d}},fireTrack:function(a,b,d){var e=d,f=this.calcPositionDelta(e.downEvent,b),g=this.calcPositionDelta(e.lastMoveEvent,b);g.x&&(e.xDirection=this.clampDir(g.x)),g.y&&(e.yDirection=this.clampDir(g.y));var h=c.makeGestureEvent(a,{bubbles:!0,cancelable:!0,dx:f.x,dy:f.y,ddx:g.x,ddy:g.y,x:b.x,y:b.y,clientX:b.clientX,clientY:b.clientY,pageX:b.pageX,pageY:b.pageY,screenX:b.screenX,screenY:b.screenY,xDirection:e.xDirection,yDirection:e.yDirection,trackInfo:e.trackInfo,relatedTarget:b.relatedTarget,pointerType:b.pointerType,pointerId:b.pointerId,_source:"track"});e.downTarget.dispatchEvent(h)},down:function(a){if(a.isPrimary&&("mouse"===a.pointerType?1===a.buttons:!0)){var b={downEvent:a,downTarget:a.target,trackInfo:{},lastMoveEvent:null,xDirection:0,yDirection:0,tracking:!1};d.set(a.pointerId,b)}},move:function(a){var b=d.get(a.pointerId);if(b){if(b.tracking)this.fireTrack("track",a,b);else{var c=this.calcPositionDelta(b.downEvent,a),e=c.x*c.x+c.y*c.y;e>this.WIGGLE_THRESHOLD&&(b.tracking=!0,this.fireTrack("trackstart",b.downEvent,b),this.fireTrack("track",a,b))}b.lastMoveEvent=a}},up:function(a){var b=d.get(a.pointerId);b&&(b.tracking&&this.fireTrack("trackend",a,b),d.delete(a.pointerId))}};b.registerGesture("track",e)}(window.PolymerGestures),function(a){var b=a.dispatcher,c=a.eventFactory,d={HOLD_DELAY:200,WIGGLE_THRESHOLD:16,events:["down","move","up"],heldPointer:null,holdJob:null,pulse:function(){var a=Date.now()-this.heldPointer.timeStamp,b=this.held?"holdpulse":"hold";this.fireHold(b,a),this.held=!0},cancel:function(){clearInterval(this.holdJob),this.held&&this.fireHold("release"),this.held=!1,this.heldPointer=null,this.target=null,this.holdJob=null},down:function(a){a.isPrimary&&!this.heldPointer&&(this.heldPointer=a,this.target=a.target,this.holdJob=setInterval(this.pulse.bind(this),this.HOLD_DELAY))},up:function(a){this.heldPointer&&this.heldPointer.pointerId===a.pointerId&&this.cancel()},move:function(a){if(this.heldPointer&&this.heldPointer.pointerId===a.pointerId){var b=a.clientX-this.heldPointer.clientX,c=a.clientY-this.heldPointer.clientY;b*b+c*c>this.WIGGLE_THRESHOLD&&this.cancel()}},fireHold:function(a,b){var d={bubbles:!0,cancelable:!0,pointerType:this.heldPointer.pointerType,pointerId:this.heldPointer.pointerId,x:this.heldPointer.clientX,y:this.heldPointer.clientY,_source:"hold"};b&&(d.holdTime=b);var e=c.makeGestureEvent(a,d);this.target.dispatchEvent(e)}};b.registerGesture("hold",d)}(window.PolymerGestures),function(a){var b=a.dispatcher,c=a.eventFactory,d=new a.PointerMap,e={events:["down","up"],down:function(a){a.isPrimary&&!a.tapPrevented&&d.set(a.pointerId,{target:a.target,buttons:a.buttons,x:a.clientX,y:a.clientY})},shouldTap:function(a,b){return"mouse"===a.pointerType?1===b.buttons:!a.tapPrevented},up:function(b){var e=d.get(b.pointerId);if(e&&this.shouldTap(b,e)){var f=a.targetFinding.LCA(e.target,b.relatedTarget);if(f){var g=c.makeGestureEvent("tap",{bubbles:!0,cancelable:!0,x:b.clientX,y:b.clientY,detail:b.detail,pointerType:b.pointerType,pointerId:b.pointerId,altKey:b.altKey,ctrlKey:b.ctrlKey,metaKey:b.metaKey,shiftKey:b.shiftKey,_source:"tap"});f.dispatchEvent(g)}}d.delete(b.pointerId)}};c.preventTap=function(a){return function(){a.tapPrevented=!0,d.delete(a.pointerId)}},b.registerGesture("tap",e)}(window.PolymerGestures),function(a){"use strict";function b(a,b){if(!a)throw new Error("ASSERT: "+b)}function c(a){return a>=48&&57>=a}function d(a){return 32===a||9===a||11===a||12===a||160===a||a>=5760&&"\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\ufeff".indexOf(String.fromCharCode(a))>0}function e(a){return 10===a||13===a||8232===a||8233===a}function f(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a}function g(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a||a>=48&&57>=a}function h(a){return"this"===a}function i(){for(;Y>X&&d(W.charCodeAt(X));)++X}function j(){var a,b;for(a=X++;Y>X&&(b=W.charCodeAt(X),g(b));)++X;return W.slice(a,X)}function k(){var a,b,c;return a=X,b=j(),c=1===b.length?S.Identifier:h(b)?S.Keyword:"null"===b?S.NullLiteral:"true"===b||"false"===b?S.BooleanLiteral:S.Identifier,{type:c,value:b,range:[a,X]}}function l(){var a,b,c=X,d=W.charCodeAt(X),e=W[X];switch(d){case 46:case 40:case 41:case 59:case 44:case 123:case 125:case 91:case 93:case 58:case 63:return++X,{type:S.Punctuator,value:String.fromCharCode(d),range:[c,X]};default:if(a=W.charCodeAt(X+1),61===a)switch(d){case 37:case 38:case 42:case 43:case 45:case 47:case 60:case 62:case 124:return X+=2,{type:S.Punctuator,value:String.fromCharCode(d)+String.fromCharCode(a),range:[c,X]};case 33:case 61:return X+=2,61===W.charCodeAt(X)&&++X,{type:S.Punctuator,value:W.slice(c,X),range:[c,X]}}}return b=W[X+1],e===b&&"&|".indexOf(e)>=0?(X+=2,{type:S.Punctuator,value:e+b,range:[c,X]}):"<>=!+-*%&|^/".indexOf(e)>=0?(++X,{type:S.Punctuator,value:e,range:[c,X]}):void s({},V.UnexpectedToken,"ILLEGAL")}function m(){var a,d,e;if(e=W[X],b(c(e.charCodeAt(0))||"."===e,"Numeric literal must start with a decimal digit or a decimal point"),d=X,a="","."!==e){for(a=W[X++],e=W[X],"0"===a&&e&&c(e.charCodeAt(0))&&s({},V.UnexpectedToken,"ILLEGAL");c(W.charCodeAt(X));)a+=W[X++];e=W[X]}if("."===e){for(a+=W[X++];c(W.charCodeAt(X));)a+=W[X++];e=W[X]}if("e"===e||"E"===e)if(a+=W[X++],e=W[X],("+"===e||"-"===e)&&(a+=W[X++]),c(W.charCodeAt(X)))for(;c(W.charCodeAt(X));)a+=W[X++];else s({},V.UnexpectedToken,"ILLEGAL");return f(W.charCodeAt(X))&&s({},V.UnexpectedToken,"ILLEGAL"),{type:S.NumericLiteral,value:parseFloat(a),range:[d,X]}}function n(){var a,c,d,f="",g=!1;for(a=W[X],b("'"===a||'"'===a,"String literal must starts with a quote"),c=X,++X;Y>X;){if(d=W[X++],d===a){a="";break}if("\\"===d)if(d=W[X++],d&&e(d.charCodeAt(0)))"\r"===d&&"\n"===W[X]&&++X;else switch(d){case"n":f+="\n";break;case"r":f+="\r";break;case"t":f+="	";break;case"b":f+="\b";break;case"f":f+="\f";break;case"v":f+="";break;default:f+=d}else{if(e(d.charCodeAt(0)))break;f+=d}}return""!==a&&s({},V.UnexpectedToken,"ILLEGAL"),{type:S.StringLiteral,value:f,octal:g,range:[c,X]}}function o(a){return a.type===S.Identifier||a.type===S.Keyword||a.type===S.BooleanLiteral||a.type===S.NullLiteral}function p(){var a;return i(),X>=Y?{type:S.EOF,range:[X,X]}:(a=W.charCodeAt(X),40===a||41===a||58===a?l():39===a||34===a?n():f(a)?k():46===a?c(W.charCodeAt(X+1))?m():l():c(a)?m():l())}function q(){var a;return a=$,X=a.range[1],$=p(),X=a.range[1],a}function r(){var a;a=X,$=p(),X=a}function s(a,c){var d,e=Array.prototype.slice.call(arguments,2),f=c.replace(/%(\d)/g,function(a,c){return b(c<e.length,"Message reference must be in range"),e[c]});throw d=new Error(f),d.index=X,d.description=f,d}function t(a){s(a,V.UnexpectedToken,a.value)}function u(a){var b=q();(b.type!==S.Punctuator||b.value!==a)&&t(b)}function v(a){return $.type===S.Punctuator&&$.value===a}function w(a){return $.type===S.Keyword&&$.value===a}function x(){var a=[];for(u("[");!v("]");)v(",")?(q(),a.push(null)):(a.push(bb()),v("]")||u(","));return u("]"),Z.createArrayExpression(a)}function y(){var a;return i(),a=q(),a.type===S.StringLiteral||a.type===S.NumericLiteral?Z.createLiteral(a):Z.createIdentifier(a.value)}function z(){var a,b;return a=$,i(),(a.type===S.EOF||a.type===S.Punctuator)&&t(a),b=y(),u(":"),Z.createProperty("init",b,bb())}function A(){var a=[];for(u("{");!v("}");)a.push(z()),v("}")||u(",");return u("}"),Z.createObjectExpression(a)}function B(){var a;return u("("),a=bb(),u(")"),a}function C(){var a,b,c;return v("(")?B():(a=$.type,a===S.Identifier?c=Z.createIdentifier(q().value):a===S.StringLiteral||a===S.NumericLiteral?c=Z.createLiteral(q()):a===S.Keyword?w("this")&&(q(),c=Z.createThisExpression()):a===S.BooleanLiteral?(b=q(),b.value="true"===b.value,c=Z.createLiteral(b)):a===S.NullLiteral?(b=q(),b.value=null,c=Z.createLiteral(b)):v("[")?c=x():v("{")&&(c=A()),c?c:void t(q()))}function D(){var a=[];if(u("("),!v(")"))for(;Y>X&&(a.push(bb()),!v(")"));)u(",");return u(")"),a}function E(){var a;return a=q(),o(a)||t(a),Z.createIdentifier(a.value)}function F(){return u("."),E()}function G(){var a;return u("["),a=bb(),u("]"),a}function H(){var a,b,c;for(a=C();;)if(v("["))c=G(),a=Z.createMemberExpression("[",a,c);else if(v("."))c=F(),a=Z.createMemberExpression(".",a,c);else{if(!v("("))break;b=D(),a=Z.createCallExpression(a,b)}return a}function I(){var a,b;return $.type!==S.Punctuator&&$.type!==S.Keyword?b=ab():v("+")||v("-")||v("!")?(a=q(),b=I(),b=Z.createUnaryExpression(a.value,b)):w("delete")||w("void")||w("typeof")?s({},V.UnexpectedToken):b=ab(),b}function J(a){var b=0;if(a.type!==S.Punctuator&&a.type!==S.Keyword)return 0;switch(a.value){case"||":b=1;break;case"&&":b=2;break;case"==":case"!=":case"===":case"!==":b=6;break;case"<":case">":case"<=":case">=":case"instanceof":b=7;break;case"in":b=7;break;case"+":case"-":b=9;break;case"*":case"/":case"%":b=11}return b}function K(){var a,b,c,d,e,f,g,h;if(g=I(),b=$,c=J(b),0===c)return g;for(b.prec=c,q(),e=I(),d=[g,b,e];(c=J($))>0;){for(;d.length>2&&c<=d[d.length-2].prec;)e=d.pop(),f=d.pop().value,g=d.pop(),a=Z.createBinaryExpression(f,g,e),d.push(a);b=q(),b.prec=c,d.push(b),a=I(),d.push(a)}for(h=d.length-1,a=d[h];h>1;)a=Z.createBinaryExpression(d[h-1].value,d[h-2],a),h-=2;return a}function L(){var a,b,c;return a=K(),v("?")&&(q(),b=L(),u(":"),c=L(),a=Z.createConditionalExpression(a,b,c)),a}function M(){var a,b;return a=q(),a.type!==S.Identifier&&t(a),b=v("(")?D():[],Z.createFilter(a.value,b)}function N(){for(;v("|");)q(),M()}function O(){i(),r();var a=bb();a&&(","===$.value||"in"==$.value&&a.type===U.Identifier?Q(a):(N(),"as"===$.value?P(a):Z.createTopLevel(a))),$.type!==S.EOF&&t($)}function P(a){q();var b=q().value;Z.createAsExpression(a,b)}function Q(a){var b;","===$.value&&(q(),$.type!==S.Identifier&&t($),b=q().value),q();var c=bb();N(),Z.createInExpression(a.name,b,c)}function R(a,b){return Z=b,W=a,X=0,Y=W.length,$=null,_={labelSet:{}},O()}var S,T,U,V,W,X,Y,Z,$,_;S={BooleanLiteral:1,EOF:2,Identifier:3,Keyword:4,NullLiteral:5,NumericLiteral:6,Punctuator:7,StringLiteral:8},T={},T[S.BooleanLiteral]="Boolean",T[S.EOF]="<end>",T[S.Identifier]="Identifier",T[S.Keyword]="Keyword",T[S.NullLiteral]="Null",T[S.NumericLiteral]="Numeric",T[S.Punctuator]="Punctuator",T[S.StringLiteral]="String",U={ArrayExpression:"ArrayExpression",BinaryExpression:"BinaryExpression",CallExpression:"CallExpression",ConditionalExpression:"ConditionalExpression",EmptyStatement:"EmptyStatement",ExpressionStatement:"ExpressionStatement",Identifier:"Identifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",ObjectExpression:"ObjectExpression",Program:"Program",Property:"Property",ThisExpression:"ThisExpression",UnaryExpression:"UnaryExpression"},V={UnexpectedToken:"Unexpected token %0",UnknownLabel:"Undefined label '%0'",Redeclaration:"%0 '%1' has already been declared"};var ab=H,bb=L;a.esprima={parse:R}}(this),function(a){"use strict";function b(a,b,d,e){var f;try{if(f=c(a),f.scopeIdent&&(d.nodeType!==Node.ELEMENT_NODE||"TEMPLATE"!==d.tagName||"bind"!==b&&"repeat"!==b))throw Error("as and in can only be used within <template bind/repeat>")}catch(g){return void console.error("Invalid expression syntax: "+a,g)}return function(a,b,c){var d=f.getBinding(a,e,c);return f.scopeIdent&&d&&(b.polymerExpressionScopeIdent_=f.scopeIdent,f.indexIdent&&(b.polymerExpressionIndexIdent_=f.indexIdent)),d}}function c(a){var b=q[a];if(!b){var c=new j;esprima.parse(a,c),b=new l(c),q[a]=b}return b}function d(a){this.value=a,this.valueFn_=void 0}function e(a){this.name=a,this.path=Path.get(a)}function f(a,b,c){this.computed="["==c,this.dynamicDeps="function"==typeof a||a.dynamicDeps||this.computed&&!(b instanceof d),this.simplePath=!this.dynamicDeps&&(b instanceof e||b instanceof d)&&(a instanceof f||a instanceof e),this.object=this.simplePath?a:i(a),this.property=!this.computed||this.simplePath?b:i(b)}function g(a,b){this.name=a,this.args=[];for(var c=0;c<b.length;c++)this.args[c]=i(b[c])}function h(){throw Error("Not Implemented")}function i(a){return"function"==typeof a?a:a.valueFn()}function j(){this.expression=null,this.filters=[],this.deps={},this.currentPath=void 0,this.scopeIdent=void 0,this.indexIdent=void 0,this.dynamicDeps=!1}function k(a){this.value_=a}function l(a){if(this.scopeIdent=a.scopeIdent,this.indexIdent=a.indexIdent,!a.expression)throw Error("No expression found.");this.expression=a.expression,i(this.expression),this.filters=a.filters,this.dynamicDeps=a.dynamicDeps}function m(a){return String(a).replace(/[A-Z]/g,function(a){return"-"+a.toLowerCase()})}function n(a,b){for(;a[t]&&!Object.prototype.hasOwnProperty.call(a,b);)a=a[t];return a}function o(a){switch(a){case"":return!1;case"false":case"null":case"true":return!0}return isNaN(Number(a))?!1:!0}function p(){}var q=Object.create(null);
-d.prototype={valueFn:function(){if(!this.valueFn_){var a=this.value;this.valueFn_=function(){return a}}return this.valueFn_}},e.prototype={valueFn:function(){if(!this.valueFn_){var a=(this.name,this.path);this.valueFn_=function(b,c){return c&&c.addPath(b,a),a.getValueFrom(b)}}return this.valueFn_},setValue:function(a,b){return 1==this.path.length,a=n(a,this.path[0]),this.path.setValueFrom(a,b)}},f.prototype={get fullPath(){if(!this.fullPath_){var a=this.object instanceof f?this.object.fullPath.slice():[this.object.name];a.push(this.property instanceof e?this.property.name:this.property.value),this.fullPath_=Path.get(a)}return this.fullPath_},valueFn:function(){if(!this.valueFn_){var a=this.object;if(this.simplePath){var b=this.fullPath;this.valueFn_=function(a,c){return c&&c.addPath(a,b),b.getValueFrom(a)}}else if(this.computed){var c=this.property;this.valueFn_=function(b,d,e){var f=a(b,d,e),g=c(b,d,e);return d&&d.addPath(f,[g]),f?f[g]:void 0}}else{var b=Path.get(this.property.name);this.valueFn_=function(c,d,e){var f=a(c,d,e);return d&&d.addPath(f,b),b.getValueFrom(f)}}}return this.valueFn_},setValue:function(a,b){if(this.simplePath)return this.fullPath.setValueFrom(a,b),b;var c=this.object(a),d=this.property instanceof e?this.property.name:this.property(a);return c[d]=b}},g.prototype={transform:function(a,b,c,d,e){var f=c[this.name],g=a;if(f)g=void 0;else if(f=g[this.name],!f)return void console.error("Cannot find function or filter: "+this.name);if(d?f=f.toModel:"function"==typeof f.toDOM&&(f=f.toDOM),"function"!=typeof f)return void console.error("Cannot find function or filter: "+this.name);for(var h=e||[],j=0;j<this.args.length;j++)h.push(i(this.args[j])(a,b,c));return f.apply(g,h)}};var r={"+":function(a){return+a},"-":function(a){return-a},"!":function(a){return!a}},s={"+":function(a,b){return a+b},"-":function(a,b){return a-b},"*":function(a,b){return a*b},"/":function(a,b){return a/b},"%":function(a,b){return a%b},"<":function(a,b){return b>a},">":function(a,b){return a>b},"<=":function(a,b){return b>=a},">=":function(a,b){return a>=b},"==":function(a,b){return a==b},"!=":function(a,b){return a!=b},"===":function(a,b){return a===b},"!==":function(a,b){return a!==b},"&&":function(a,b){return a&&b},"||":function(a,b){return a||b}};j.prototype={createUnaryExpression:function(a,b){if(!r[a])throw Error("Disallowed operator: "+a);return b=i(b),function(c,d,e){return r[a](b(c,d,e))}},createBinaryExpression:function(a,b,c){if(!s[a])throw Error("Disallowed operator: "+a);return b=i(b),c=i(c),function(d,e,f){return s[a](b(d,e,f),c(d,e,f))}},createConditionalExpression:function(a,b,c){return a=i(a),b=i(b),c=i(c),function(d,e,f){return a(d,e,f)?b(d,e,f):c(d,e,f)}},createIdentifier:function(a){var b=new e(a);return b.type="Identifier",b},createMemberExpression:function(a,b,c){var d=new f(b,c,a);return d.dynamicDeps&&(this.dynamicDeps=!0),d},createCallExpression:function(a,b){if(!(a instanceof e))throw Error("Only identifier function invocations are allowed");var c=new g(a.name,b);return function(a,b,d){return c.transform(a,b,d,!1)}},createLiteral:function(a){return new d(a.value)},createArrayExpression:function(a){for(var b=0;b<a.length;b++)a[b]=i(a[b]);return function(b,c,d){for(var e=[],f=0;f<a.length;f++)e.push(a[f](b,c,d));return e}},createProperty:function(a,b,c){return{key:b instanceof e?b.name:b.value,value:c}},createObjectExpression:function(a){for(var b=0;b<a.length;b++)a[b].value=i(a[b].value);return function(b,c,d){for(var e={},f=0;f<a.length;f++)e[a[f].key]=a[f].value(b,c,d);return e}},createFilter:function(a,b){this.filters.push(new g(a,b))},createAsExpression:function(a,b){this.expression=a,this.scopeIdent=b},createInExpression:function(a,b,c){this.expression=c,this.scopeIdent=a,this.indexIdent=b},createTopLevel:function(a){this.expression=a},createThisExpression:h},k.prototype={open:function(){return this.value_},discardChanges:function(){return this.value_},deliver:function(){},close:function(){}},l.prototype={getBinding:function(a,b,c){function d(){if(h)return h=!1,g;i.dynamicDeps&&f.startReset();var c=i.getValue(a,i.dynamicDeps?f:void 0,b);return i.dynamicDeps&&f.finishReset(),c}function e(c){return i.setValue(a,c,b),c}if(c)return this.getValue(a,void 0,b);var f=new CompoundObserver,g=this.getValue(a,f,b),h=!0,i=this;return new ObserverTransform(f,d,e,!0)},getValue:function(a,b,c){for(var d=i(this.expression)(a,b,c),e=0;e<this.filters.length;e++)d=this.filters[e].transform(a,b,c,!1,[d]);return d},setValue:function(a,b,c){for(var d=this.filters?this.filters.length:0;d-->0;)b=this.filters[d].transform(a,void 0,c,!0,[b]);return this.expression.setValue?this.expression.setValue(a,b):void 0}};var t="@"+Math.random().toString(36).slice(2);p.prototype={styleObject:function(a){var b=[];for(var c in a)b.push(m(c)+": "+a[c]);return b.join("; ")},tokenList:function(a){var b=[];for(var c in a)a[c]&&b.push(c);return b.join(" ")},prepareInstancePositionChanged:function(a){var b=a.polymerExpressionIndexIdent_;if(b)return function(a,c){a.model[b]=c}},prepareBinding:function(a,c,d){var e=Path.get(a);{if(o(a)||!e.valid)return b(a,c,d,this);if(1==e.length)return function(a,b,c){if(c)return e.getValueFrom(a);var d=n(a,e[0]);return new PathObserver(d,e)}}},prepareInstanceModel:function(a){var b=a.polymerExpressionScopeIdent_;if(b){var c=a.templateInstance?a.templateInstance.model:a.model,d=a.polymerExpressionIndexIdent_;return function(a){return u(c,a,b,d)}}}};var u="__proto__"in{}?function(a,b,c,d){var e={};return e[c]=b,e[d]=void 0,e[t]=a,e.__proto__=a,e}:function(a,b,c,d){var e=Object.create(a);return Object.defineProperty(e,c,{value:b,configurable:!0,writable:!0}),Object.defineProperty(e,d,{value:void 0,configurable:!0,writable:!0}),Object.defineProperty(e,t,{value:a,configurable:!0,writable:!0}),e};a.PolymerExpressions=p,p.getExpression=c}(this),"function"==typeof window.Polymer&&(Polymer={}),function(a){function b(a,b){return a&&b&&Object.getOwnPropertyNames(b).forEach(function(c){var d=Object.getOwnPropertyDescriptor(b,c);d&&(Object.defineProperty(a,c,d),"function"==typeof d.value&&(d.value.nom=c))}),a}a.extend=b}(Polymer),function(a){function b(a,b,d){return a?a.stop():a=new c(this),a.go(b,d),a}var c=function(a){this.context=a,this.boundComplete=this.complete.bind(this)};c.prototype={go:function(a,b){this.callback=a;var c;b?(c=setTimeout(this.boundComplete,b),this.handle=function(){clearTimeout(c)}):(c=requestAnimationFrame(this.boundComplete),this.handle=function(){cancelAnimationFrame(c)})},stop:function(){this.handle&&(this.handle(),this.handle=null)},complete:function(){this.handle&&(this.stop(),this.callback.call(this.context))}},a.job=b}(Polymer),function(){var a={};HTMLElement.register=function(b,c){a[b]=c},HTMLElement.getPrototypeForTag=function(b){var c=b?a[b]:HTMLElement.prototype;return c||Object.getPrototypeOf(document.createElement(b))};var b=Event.prototype.stopPropagation;Event.prototype.stopPropagation=function(){this.cancelBubble=!0,b.apply(this,arguments)}}(Polymer),function(a){function b(a){var e=b.caller,g=e.nom,h=e._super;h||(g||(g=e.nom=c.call(this,e)),g||console.warn("called super() on a method not installed declaratively (has no .nom property)"),h=d(e,g,f(this)));var i=h[g];return i?(i._super||d(i,g,h),i.apply(this,a||[])):void 0}function c(a){for(var b=this.__proto__;b&&b!==HTMLElement.prototype;){for(var c,d=Object.getOwnPropertyNames(b),e=0,f=d.length;f>e&&(c=d[e]);e++){var g=Object.getOwnPropertyDescriptor(b,c);if("function"==typeof g.value&&g.value===a)return c}b=b.__proto__}}function d(a,b,c){var d=e(c,b,a);return d[b]&&(d[b].nom=b),a._super=d}function e(a,b,c){for(;a;){if(a[b]!==c&&a[b])return a;a=f(a)}return Object}function f(a){return a.__proto__}a.super=b}(Polymer),function(a){function b(a,b){var d=typeof b;return b instanceof Date&&(d="date"),c[d](a,b)}var c={string:function(a){return a},date:function(a){return new Date(Date.parse(a)||Date.now())},"boolean":function(a){return""===a?!0:"false"===a?!1:!!a},number:function(a){var b=parseFloat(a);return 0===b&&(b=parseInt(a)),isNaN(b)?a:b},object:function(a,b){if(null===b)return a;try{return JSON.parse(a.replace(/'/g,'"'))}catch(c){return a}},"function":function(a,b){return b}};a.deserializeValue=b}(Polymer),function(a){var b=a.extend,c={};c.declaration={},c.instance={},c.publish=function(a,c){for(var d in a)b(c,a[d])},a.api=c}(Polymer),function(a){var b={async:function(a,b,c){Platform.flush(),b=b&&b.length?b:[b];var d=function(){(this[a]||a).apply(this,b)}.bind(this),e=c?setTimeout(d,c):requestAnimationFrame(d);return c?e:~e},cancelAsync:function(a){0>a?cancelAnimationFrame(~a):clearTimeout(a)},fire:function(a,b,c,d,e){var f=c||this,b=b||{},g=new CustomEvent(a,{bubbles:void 0!==d?d:!0,cancelable:void 0!==e?e:!0,detail:b});return f.dispatchEvent(g),g},asyncFire:function(){this.async("fire",arguments)},classFollows:function(a,b,c){b&&b.classList.remove(c),a&&a.classList.add(c)},injectBoundHTML:function(a,b){var c=document.createElement("template");c.innerHTML=a;var d=this.instanceTemplate(c);return b&&(b.textContent="",b.appendChild(d)),d}},c=function(){},d={};b.asyncMethod=b.async,a.api.instance.utils=b,a.nop=c,a.nob=d}(Polymer),function(a){var b=window.logFlags||{},c="on-",d={EVENT_PREFIX:c,addHostListeners:function(){var a=this.eventDelegates;b.events&&Object.keys(a).length>0&&console.log("[%s] addHostListeners:",this.localName,a);for(var c in a){var d=a[c];this.addEventListener(c,this.element.getEventHandler(this,this,d))}},dispatchMethod:function(a,c,d){if(a){b.events&&console.group("[%s] dispatch [%s]",a.localName,c);var e="function"==typeof c?c:a[c];e&&e[d?"apply":"call"](a,d),b.events&&console.groupEnd(),Platform.flush()}}};a.api.instance.events=d}(Polymer),function(a){var b={copyInstanceAttributes:function(){var a=this._instanceAttributes;for(var b in a)this.hasAttribute(b)||this.setAttribute(b,a[b])},takeAttributes:function(){if(this._publishLC)for(var a,b=0,c=this.attributes,d=c.length;(a=c[b])&&d>b;b++)this.attributeToProperty(a.name,a.value)},attributeToProperty:function(b,c){var b=this.propertyForAttribute(b);if(b){if(c&&c.search(a.bindPattern)>=0)return;var d=this[b],c=this.deserializeValue(c,d);c!==d&&(this[b]=c)}},propertyForAttribute:function(a){var b=this._publishLC&&this._publishLC[a];return b},deserializeValue:function(b,c){return a.deserializeValue(b,c)},serializeValue:function(a,b){return"boolean"===b?a?"":void 0:"object"!==b&&"function"!==b&&void 0!==a?a:void 0},reflectPropertyToAttribute:function(a){var b=typeof this[a],c=this.serializeValue(this[a],b);void 0!==c?this.setAttribute(a,c):"boolean"===b&&this.removeAttribute(a)}};a.api.instance.attributes=b}(Polymer),function(a){function b(a,b){return a===b?0!==a||1/a===1/b:f(a)&&f(b)?!0:a!==a&&b!==b}function c(a,b){return void 0===b&&null===a?b:null===b||void 0===b?a:b}var d=window.logFlags||{},e={object:void 0,type:"update",name:void 0,oldValue:void 0},f=Number.isNaN||function(a){return"number"==typeof a&&isNaN(a)},g={createPropertyObserver:function(){var a=this._observeNames;if(a&&a.length){var b=this._propertyObserver=new CompoundObserver(!0);this.registerObserver(b);for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)b.addPath(this,c),this.observeArrayValue(c,this[c],null)}},openPropertyObserver:function(){this._propertyObserver&&this._propertyObserver.open(this.notifyPropertyChanges,this)},notifyPropertyChanges:function(a,b,c){var d,e,f={};for(var g in b)if(d=c[2*g+1],e=this.observe[d]){var h=b[g],i=a[g];this.observeArrayValue(d,i,h),f[e]||(void 0!==h&&null!==h||void 0!==i&&null!==i)&&(f[e]=!0,this.invokeMethod(e,[h,i,arguments]))}},deliverChanges:function(){this._propertyObserver&&this._propertyObserver.deliver()},propertyChanged_:function(a){this.reflect[a]&&this.reflectPropertyToAttribute(a)},observeArrayValue:function(a,b,c){var e=this.observe[a];if(e&&(Array.isArray(c)&&(d.observe&&console.log("[%s] observeArrayValue: unregister observer [%s]",this.localName,a),this.closeNamedObserver(a+"__array")),Array.isArray(b))){d.observe&&console.log("[%s] observeArrayValue: register observer [%s]",this.localName,a,b);var f=new ArrayObserver(b);f.open(function(a,b){this.invokeMethod(e,[b])},this),this.registerNamedObserver(a+"__array",f)}},emitPropertyChangeRecord:function(a,c,d){if(!b(c,d)&&(this.propertyChanged_(a,c,d),Observer.hasObjectObserve)){var f=this.notifier_;f||(f=this.notifier_=Object.getNotifier(this)),e.object=this,e.name=a,e.oldValue=d,f.notify(e)}},bindToAccessor:function(a,c,d){var e=a+"_",f=a+"Observable_";this[f]=c;var g=this[e],h=this,i=c.open(function(b,c){h[e]=b,h.emitPropertyChangeRecord(a,b,c)});if(d&&!b(g,i)){var j=d(g,i);b(i,j)||(i=j,c.setValue&&c.setValue(i))}this[e]=i,this.emitPropertyChangeRecord(a,i,g);var k={close:function(){c.close(),h[f]=void 0}};return this.registerObserver(k),k},createComputedProperties:function(){if(this._computedNames)for(var a=0;a<this._computedNames.length;a++){var b=this._computedNames[a],c=this.computed[b];try{var d=PolymerExpressions.getExpression(c),e=d.getBinding(this,this.element.syntax);this.bindToAccessor(b,e)}catch(f){console.error("Failed to create computed property",f)}}},bindProperty:function(a,b,d){return d?void(this[a]=b):this.bindToAccessor(a,b,c)},invokeMethod:function(a,b){var c=this[a]||a;"function"==typeof c&&c.apply(this,b)},registerObserver:function(a){return this._observers?void this._observers.push(a):void(this._observers=[a])},closeObservers:function(){if(this._observers){for(var a=this._observers,b=0;b<a.length;b++){var c=a[b];c&&"function"==typeof c.close&&c.close()}this._observers=[]}},registerNamedObserver:function(a,b){var c=this._namedObservers||(this._namedObservers={});c[a]=b},closeNamedObserver:function(a){var b=this._namedObservers;return b&&b[a]?(b[a].close(),b[a]=null,!0):void 0},closeNamedObservers:function(){if(this._namedObservers){for(var a in this._namedObservers)this.closeNamedObserver(a);this._namedObservers={}}}};a.api.instance.properties=g}(Polymer),function(a){var b=window.logFlags||0,c={instanceTemplate:function(a){for(var b=this.syntax||!a.bindingDelegate&&this.element.syntax,c=a.createInstance(this,b),d=c.bindings_,e=0;e<d.length;e++)this.registerObserver(d[e]);return c},bind:function(a,b,c){var d=this.propertyForAttribute(a);if(d){var e=this.bindProperty(d,b,c);return Platform.enableBindingsReflection&&e&&(e.path=b.path_,this._recordBinding(d,e)),this.reflect[d]&&this.reflectPropertyToAttribute(d),e}return this.mixinSuper(arguments)},bindFinished:function(){this.makeElementReady()},_recordBinding:function(a,b){this.bindings_=this.bindings_||{},this.bindings_[a]=b},asyncUnbindAll:function(){this._unbound||(b.unbind&&console.log("[%s] asyncUnbindAll",this.localName),this._unbindAllJob=this.job(this._unbindAllJob,this.unbindAll,0))},unbindAll:function(){this._unbound||(this.closeObservers(),this.closeNamedObservers(),this._unbound=!0)},cancelUnbindAll:function(){return this._unbound?void(b.unbind&&console.warn("[%s] already unbound, cannot cancel unbindAll",this.localName)):(b.unbind&&console.log("[%s] cancelUnbindAll",this.localName),void(this._unbindAllJob&&(this._unbindAllJob=this._unbindAllJob.stop())))}},d=/\{\{([^{}]*)}}/;a.bindPattern=d,a.api.instance.mdv=c}(Polymer),function(a){function b(a){return a.hasOwnProperty("PolymerBase")}function c(){}var d={PolymerBase:!0,job:function(a,b,c){if("string"!=typeof a)return Polymer.job.call(this,a,b,c);var d="___"+a;this[d]=Polymer.job.call(this,this[d],b,c)},"super":Polymer.super,created:function(){},ready:function(){},createdCallback:function(){this.templateInstance&&this.templateInstance.model&&console.warn("Attributes on "+this.localName+" were data bound prior to Polymer upgrading the element. This may result in incorrect binding types."),this.created(),this.prepareElement(),(!this.ownerDocument.isStagingDocument||window.ShadowDOMPolyfill)&&this.makeElementReady()},prepareElement:function(){return this._elementPrepared?void console.warn("Element already prepared",this.localName):(this._elementPrepared=!0,this.shadowRoots={},this.createPropertyObserver(),this.openPropertyObserver(),this.copyInstanceAttributes(),this.takeAttributes(),void this.addHostListeners())},makeElementReady:function(){this._readied||(this._readied=!0,this.createComputedProperties(),this.parseDeclarations(this.__proto__),this.removeAttribute("unresolved"),this.ready())},attachedCallback:function(){this.cancelUnbindAll(),this.attached&&this.attached(),this.enteredView&&this.enteredView(),this.hasBeenAttached||(this.hasBeenAttached=!0,this.domReady&&this.async("domReady"))},detachedCallback:function(){this.preventDispose||this.asyncUnbindAll(),this.detached&&this.detached(),this.leftView&&this.leftView()},enteredViewCallback:function(){this.attachedCallback()},leftViewCallback:function(){this.detachedCallback()},enteredDocumentCallback:function(){this.attachedCallback()},leftDocumentCallback:function(){this.detachedCallback()},parseDeclarations:function(a){a&&a.element&&(this.parseDeclarations(a.__proto__),a.parseDeclaration.call(this,a.element))},parseDeclaration:function(a){var b=this.fetchTemplate(a);if(b){var c=this.shadowFromTemplate(b);this.shadowRoots[a.name]=c}},fetchTemplate:function(a){return a.querySelector("template")},shadowFromTemplate:function(a){if(a){var b=this.createShadowRoot(),c=this.instanceTemplate(a);return b.appendChild(c),this.shadowRootReady(b,a),b}},lightFromTemplate:function(a,b){if(a){this.eventController=this;var c=this.instanceTemplate(a);return b?this.insertBefore(c,b):this.appendChild(c),this.shadowRootReady(this),c}},shadowRootReady:function(a){this.marshalNodeReferences(a),PolymerGestures.register(a)},marshalNodeReferences:function(a){var b=this.$=this.$||{};if(a)for(var c,d=a.querySelectorAll("[id]"),e=0,f=d.length;f>e&&(c=d[e]);e++)b[c.id]=c},attributeChangedCallback:function(a){"class"!==a&&"style"!==a&&this.attributeToProperty(a,this.getAttribute(a)),this.attributeChanged&&this.attributeChanged.apply(this,arguments)},onMutation:function(a,b){var c=new MutationObserver(function(a){b.call(this,c,a),c.disconnect()}.bind(this));c.observe(a,{childList:!0,subtree:!0})}};c.prototype=d,d.constructor=c,a.Base=c,a.isBase=b,a.api.instance.base=d}(Polymer),function(a){function b(a){return a.__proto__}function c(a,b){var c="",d=!1;b&&(c=b.localName,d=b.hasAttribute("is"));var e=Platform.ShadowCSS.makeScopeSelector(c,d);return Platform.ShadowCSS.shimCssText(a,e)}var d=(window.logFlags||{},"element"),e="controller",f={STYLE_SCOPE_ATTRIBUTE:d,installControllerStyles:function(){var a=this.findStyleScope();if(a&&!this.scopeHasNamedStyle(a,this.localName)){for(var c=b(this),d="";c&&c.element;)d+=c.element.cssTextForScope(e),c=b(c);d&&this.installScopeCssText(d,a)}},installScopeStyle:function(a,b,c){var c=c||this.findStyleScope(),b=b||"";if(c&&!this.scopeHasNamedStyle(c,this.localName+b)){var d="";if(a instanceof Array)for(var e,f=0,g=a.length;g>f&&(e=a[f]);f++)d+=e.textContent+"\n\n";else d=a.textContent;this.installScopeCssText(d,c,b)}},installScopeCssText:function(a,b,d){if(b=b||this.findStyleScope(),d=d||"",b){window.ShadowDOMPolyfill&&(a=c(a,b.host));var f=this.element.cssTextToScopeStyle(a,e);Polymer.applyStyleToScope(f,b),this.styleCacheForScope(b)[this.localName+d]=!0}},findStyleScope:function(a){for(var b=a||this;b.parentNode;)b=b.parentNode;return b},scopeHasNamedStyle:function(a,b){var c=this.styleCacheForScope(a);return c[b]},styleCacheForScope:function(a){if(window.ShadowDOMPolyfill){var b=a.host?a.host.localName:a.localName;return g[b]||(g[b]={})}return a._scopeStyles=a._scopeStyles||{}}},g={};a.api.instance.styles=f}(Polymer),function(a){function b(a,b){if(1===arguments.length&&"string"!=typeof arguments[0]){b=a;var c=document._currentScript;if(a=c&&c.parentNode&&c.parentNode.getAttribute?c.parentNode.getAttribute("name"):"",!a)throw"Element name could not be inferred."}if(f[a])throw"Already registered (Polymer) prototype for element "+a;e(a,b),d(a)}function c(a,b){h[a]=b}function d(a){h[a]&&(h[a].registerWhenReady(),delete h[a])}function e(a,b){return i[a]=b||{}}function f(a){return i[a]}var g=a.extend,h=(a.api,{}),i={};a.getRegisteredPrototype=f,a.waitingForPrototype=c,window.Polymer=b,g(Polymer,a);var j=Platform.deliverDeclarations();if(j)for(var k,l=0,m=j.length;m>l&&(k=j[l]);l++)b.apply(null,k)}(Polymer),function(a){var b={resolveElementPaths:function(a){Platform.urlResolver.resolveDom(a)},addResolvePathApi:function(){var a=this.getAttribute("assetpath")||"",b=new URL(a,this.ownerDocument.baseURI);this.prototype.resolvePath=function(a,c){var d=new URL(a,c||b);return d.href}}};a.api.declaration.path=b}(Polymer),function(a){function b(a,b){var c=new URL(a.getAttribute("href"),b).href;return"@import '"+c+"';"}function c(a,b){if(a){b===document&&(b=document.head),window.ShadowDOMPolyfill&&(b=document.head);var c=d(a.textContent),e=a.getAttribute(h);e&&c.setAttribute(h,e);var f=b.firstElementChild;if(b===document.head){var g="style["+h+"]",i=document.head.querySelectorAll(g);i.length&&(f=i[i.length-1].nextElementSibling)}b.insertBefore(c,f)}}function d(a,b){b=b||document,b=b.createElement?b:b.ownerDocument;var c=b.createElement("style");return c.textContent=a,c}function e(a){return a&&a.__resource||""}function f(a,b){return p?p.call(a,b):void 0}var g=(window.logFlags||{},a.api.instance.styles),h=g.STYLE_SCOPE_ATTRIBUTE,i="style",j="@import",k="link[rel=stylesheet]",l="global",m="polymer-scope",n={loadStyles:function(a){var b=this.fetchTemplate(),c=b&&this.templateContent();if(c){this.convertSheetsToStyles(c);var d=this.findLoadableStyles(c);if(d.length){var e=b.ownerDocument.baseURI;return Platform.styleResolver.loadStyles(d,e,a)}}a&&a()},convertSheetsToStyles:function(a){for(var c,e,f=a.querySelectorAll(k),g=0,h=f.length;h>g&&(c=f[g]);g++)e=d(b(c,this.ownerDocument.baseURI),this.ownerDocument),this.copySheetAttributes(e,c),c.parentNode.replaceChild(e,c)},copySheetAttributes:function(a,b){for(var c,d=0,e=b.attributes,f=e.length;(c=e[d])&&f>d;d++)"rel"!==c.name&&"href"!==c.name&&a.setAttribute(c.name,c.value)},findLoadableStyles:function(a){var b=[];if(a)for(var c,d=a.querySelectorAll(i),e=0,f=d.length;f>e&&(c=d[e]);e++)c.textContent.match(j)&&b.push(c);return b},installSheets:function(){this.cacheSheets(),this.cacheStyles(),this.installLocalSheets(),this.installGlobalStyles()},cacheSheets:function(){this.sheets=this.findNodes(k),this.sheets.forEach(function(a){a.parentNode&&a.parentNode.removeChild(a)})},cacheStyles:function(){this.styles=this.findNodes(i+"["+m+"]"),this.styles.forEach(function(a){a.parentNode&&a.parentNode.removeChild(a)})},installLocalSheets:function(){var a=this.sheets.filter(function(a){return!a.hasAttribute(m)}),b=this.templateContent();if(b){var c="";if(a.forEach(function(a){c+=e(a)+"\n"}),c){var f=d(c,this.ownerDocument);b.insertBefore(f,b.firstChild)}}},findNodes:function(a,b){var c=this.querySelectorAll(a).array(),d=this.templateContent();if(d){var e=d.querySelectorAll(a).array();c=c.concat(e)}return b?c.filter(b):c},installGlobalStyles:function(){var a=this.styleForScope(l);c(a,document.head)},cssTextForScope:function(a){var b="",c="["+m+"="+a+"]",d=function(a){return f(a,c)},g=this.sheets.filter(d);g.forEach(function(a){b+=e(a)+"\n\n"});var h=this.styles.filter(d);return h.forEach(function(a){b+=a.textContent+"\n\n"}),b},styleForScope:function(a){var b=this.cssTextForScope(a);return this.cssTextToScopeStyle(b,a)},cssTextToScopeStyle:function(a,b){if(a){var c=d(a);return c.setAttribute(h,this.getAttribute("name")+"-"+b),c}}},o=HTMLElement.prototype,p=o.matches||o.matchesSelector||o.webkitMatchesSelector||o.mozMatchesSelector;a.api.declaration.styles=n,a.applyStyleToScope=c}(Polymer),function(a){var b=(window.logFlags||{},a.api.instance.events),c=b.EVENT_PREFIX,d={};["webkitAnimationStart","webkitAnimationEnd","webkitTransitionEnd","DOMFocusOut","DOMFocusIn","DOMMouseScroll"].forEach(function(a){d[a.toLowerCase()]=a});var e={parseHostEvents:function(){var a=this.prototype.eventDelegates;this.addAttributeDelegates(a)},addAttributeDelegates:function(a){for(var b,c=0;b=this.attributes[c];c++)this.hasEventPrefix(b.name)&&(a[this.removeEventPrefix(b.name)]=b.value.replace("{{","").replace("}}","").trim())},hasEventPrefix:function(a){return a&&"o"===a[0]&&"n"===a[1]&&"-"===a[2]},removeEventPrefix:function(a){return a.slice(f)},findController:function(a){for(;a.parentNode;){if(a.eventController)return a.eventController;a=a.parentNode}return a.host},getEventHandler:function(a,b,c){var d=this;return function(e){a&&a.PolymerBase||(a=d.findController(b));var f=[e,e.detail,e.currentTarget];a.dispatchMethod(a,c,f)}},prepareEventBinding:function(a,b){if(this.hasEventPrefix(b)){var c=this.removeEventPrefix(b);c=d[c]||c;var e=this;return function(b,d,f){function g(){return"{{ "+a+" }}"}var h=e.getEventHandler(void 0,d,a);return d.addEventListener(c,h),f?void 0:{open:g,discardChanges:g,close:function(){d.removeEventListener(c,h)}}}}}},f=c.length;a.api.declaration.events=e}(Polymer),function(a){var b={inferObservers:function(a){var b,c=a.observe;for(var d in a)"Changed"===d.slice(-7)&&(c||(c=a.observe={}),b=d.slice(0,-7),c[b]=c[b]||d)},explodeObservers:function(a){var b=a.observe;if(b){var c={};for(var d in b)for(var e,f=d.split(" "),g=0;e=f[g];g++)c[e]=b[d];a.observe=c}},optimizePropertyMaps:function(a){if(a.observe){var b=a._observeNames=[];for(var c in a.observe)for(var d,e=c.split(" "),f=0;d=e[f];f++)b.push(d)}if(a.publish){var b=a._publishNames=[];for(var c in a.publish)b.push(c)}if(a.computed){var b=a._computedNames=[];for(var c in a.computed)b.push(c)}},publishProperties:function(a,b){var c=a.publish;c&&(this.requireProperties(c,a,b),a._publishLC=this.lowerCaseMap(c))},requireProperties:function(a,b){b.reflect=b.reflect||{};for(var c in a){var d=a[c],e=this.reflectHintForDescriptor(d);void 0===b.reflect[c]&&void 0!==e&&(b.reflect[c]=e),void 0===b[c]&&(b[c]=this.valueForDescriptor(d))}},valueForDescriptor:function(a){var b="object"==typeof a&&a?a.value:a;return void 0!==b?b:null},reflectHintForDescriptor:function(a){return"object"==typeof a&&a&&void 0!==a.reflect?a.reflect:void 0},lowerCaseMap:function(a){var b={};for(var c in a)b[c.toLowerCase()]=c;return b},createPropertyAccessor:function(a){var b=this.prototype,c=a+"_",d=a+"Observable_";b[c]=b[a],Object.defineProperty(b,a,{get:function(){var a=this[d];return a&&a.deliver(),this[c]},set:function(b){var e=this[d];if(e)return void e.setValue(b);var f=this[c];return this[c]=b,this.emitPropertyChangeRecord(a,b,f),b},configurable:!0})},createPropertyAccessors:function(a){var b=a._publishNames;if(b&&b.length)for(var c,d=0,e=b.length;e>d&&(c=b[d]);d++)this.createPropertyAccessor(c);var b=a._computedNames;if(b&&b.length)for(var c,d=0,e=b.length;e>d&&(c=b[d]);d++)this.createPropertyAccessor(c)}};a.api.declaration.properties=b}(Polymer),function(a){var b="attributes",c=/\s|,/,d={inheritAttributesObjects:function(a){this.inheritObject(a,"publishLC"),this.inheritObject(a,"_instanceAttributes")},publishAttributes:function(a,d){var e=this.getAttribute(b);if(e)for(var f,g=a.publish||(a.publish={}),h=e.split(c),i=0,j=h.length;j>i;i++)if(f=h[i].trim(),f&&void 0===g[f]){try{var k=void 0!==d[f]}catch(l){k=!1}k||(g[f]=Polymer.nob)}},accumulateInstanceAttributes:function(){for(var a,b=this.prototype._instanceAttributes,c=this.attributes,d=0,e=c.length;e>d&&(a=c[d]);d++)this.isInstanceAttribute(a.name)&&(b[a.name]=a.value)},isInstanceAttribute:function(a){return!this.blackList[a]&&"on-"!==a.slice(0,3)},blackList:{name:1,"extends":1,constructor:1,noscript:1,assetpath:1,"cache-csstext":1}};d.blackList[b]=1,a.api.declaration.attributes=d}(Polymer),function(a){var b=a.api.declaration.events,c=new PolymerExpressions,d=c.prepareBinding;c.prepareBinding=function(a,e,f){return b.prepareEventBinding(a,e,f)||d.call(c,a,e,f)};var e={syntax:c,fetchTemplate:function(){return this.querySelector("template")},templateContent:function(){var a=this.fetchTemplate();return a&&Platform.templateContent(a)},installBindingDelegate:function(a){a&&(a.bindingDelegate=this.syntax)}};a.api.declaration.mdv=e}(Polymer),function(a){function b(a){if(!Object.__proto__){var b=Object.getPrototypeOf(a);a.__proto__=b,d(b)&&(b.__proto__=Object.getPrototypeOf(b))}}var c=a.api,d=a.isBase,e=a.extend,f={register:function(a,b){this.buildPrototype(a,b),this.registerPrototype(a,b),this.publishConstructor()},buildPrototype:function(b,c){var d=a.getRegisteredPrototype(b),e=this.generateBasePrototype(c);this.desugarBeforeChaining(d,e),this.prototype=this.chainPrototypes(d,e),this.desugarAfterChaining(b,c)},desugarBeforeChaining:function(a,b){a.element=this,this.publishAttributes(a,b),this.publishProperties(a,b),this.inferObservers(a),this.explodeObservers(a)},chainPrototypes:function(a,c){this.inheritMetaData(a,c);var d=this.chainObject(a,c);return b(d),d},inheritMetaData:function(a,b){this.inheritObject("observe",a,b),this.inheritObject("publish",a,b),this.inheritObject("reflect",a,b),this.inheritObject("_publishLC",a,b),this.inheritObject("_instanceAttributes",a,b),this.inheritObject("eventDelegates",a,b)},desugarAfterChaining:function(a,b){this.optimizePropertyMaps(this.prototype),this.createPropertyAccessors(this.prototype),this.installBindingDelegate(this.fetchTemplate()),this.installSheets(),this.resolveElementPaths(this),this.accumulateInstanceAttributes(),this.parseHostEvents(),this.addResolvePathApi(),window.ShadowDOMPolyfill&&Platform.ShadowCSS.shimStyling(this.templateContent(),a,b),this.prototype.registerCallback&&this.prototype.registerCallback(this)},publishConstructor:function(){var a=this.getAttribute("constructor");a&&(window[a]=this.ctor)},generateBasePrototype:function(a){var b=this.findBasePrototype(a);if(!b){var b=HTMLElement.getPrototypeForTag(a);b=this.ensureBaseApi(b),g[a]=b}return b},findBasePrototype:function(a){return g[a]},ensureBaseApi:function(a){if(a.PolymerBase)return a;var b=Object.create(a);return c.publish(c.instance,b),this.mixinMethod(b,a,c.instance.mdv,"bind"),b},mixinMethod:function(a,b,c,d){var e=function(a){return b[d].apply(this,a)};a[d]=function(){return this.mixinSuper=e,c[d].apply(this,arguments)}},inheritObject:function(a,b,c){var d=b[a]||{};b[a]=this.chainObject(d,c[a])},registerPrototype:function(a,b){var c={prototype:this.prototype},d=this.findTypeExtension(b);d&&(c.extends=d),HTMLElement.register(a,this.prototype),this.ctor=document.registerElement(a,c)},findTypeExtension:function(a){if(a&&a.indexOf("-")<0)return a;var b=this.findBasePrototype(a);return b.element?this.findTypeExtension(b.element.extends):void 0}},g={};f.chainObject=Object.__proto__?function(a,b){return a&&b&&a!==b&&(a.__proto__=b),a}:function(a,b){if(a&&b&&a!==b){var c=Object.create(b);a=e(c,a)}return a},c.declaration.prototype=f}(Polymer),function(a){function b(a){return document.contains(a)?i:h}function c(){return h.length?h[0]:i[0]}function d(a){e.waitToReady=!0,CustomElements.ready=!1,HTMLImports.whenImportsReady(function(){e.addReadyCallback(a),e.waitToReady=!1,e.check()})}var e={wait:function(a){a.__queue||(a.__queue={},f.push(a))},enqueue:function(a,c,d){var e=a.__queue&&!a.__queue.check;return e&&(b(a).push(a),a.__queue.check=c,a.__queue.go=d),0!==this.indexOf(a)},indexOf:function(a){var c=b(a).indexOf(a);return c>=0&&document.contains(a)&&(c+=HTMLImports.useNative||HTMLImports.ready?h.length:1e9),c},go:function(a){var b=this.remove(a);b&&(a.__queue.flushable=!0,this.addToFlushQueue(b),this.check())},remove:function(a){var c=this.indexOf(a);if(0===c)return b(a).shift()},check:function(){var a=this.nextElement();return a&&a.__queue.check.call(a),this.canReady()?(this.ready(),!0):void 0},nextElement:function(){return c()},canReady:function(){return!this.waitToReady&&this.isEmpty()},isEmpty:function(){for(var a,b=0,c=f.length;c>b&&(a=f[b]);b++)if(a.__queue&&!a.__queue.flushable)return;return!0},addToFlushQueue:function(a){g.push(a)},flush:function(){if(!this.flushing){g.length&&console.warn("flushing %s elements",g.length),this.flushing=!0;for(var a;g.length;)a=g.shift(),a.__queue.go.call(a),a.__queue=null;
-this.flushing=!1}},ready:function(){this.flush(),CustomElements.ready===!1&&(CustomElements.upgradeDocumentTree(document),CustomElements.ready=!0),Platform.flush(),requestAnimationFrame(this.flushReadyCallbacks)},addReadyCallback:function(a){a&&j.push(a)},flushReadyCallbacks:function(){if(j)for(var a;j.length;)(a=j.shift())()},waitToReady:!0},f=[],g=[],h=[],i=[],j=[];document.addEventListener("WebComponentsReady",function(){CustomElements.ready=!1}),a.elements=f,a.queue=e,a.whenReady=a.whenPolymerReady=d}(Polymer),function(a){function b(a,b){a?(document.head.appendChild(a),d(b)):b&&b()}function c(a,c){if(a&&a.length){for(var d,e,f=document.createDocumentFragment(),g=0,h=a.length;h>g&&(d=a[g]);g++)e=document.createElement("link"),e.rel="import",e.href=d,f.appendChild(e);b(f,c)}else c&&c()}var d=a.whenPolymerReady;a.import=c,a.importElements=b}(Polymer),function(a){function b(a){return Boolean(HTMLElement.getPrototypeForTag(a))}function c(a){return a&&a.indexOf("-")>=0}var d=a.extend,e=a.api,f=a.queue,g=a.whenPolymerReady,h=a.getRegisteredPrototype,i=a.waitingForPrototype,j=d(Object.create(HTMLElement.prototype),{createdCallback:function(){this.getAttribute("name")&&this.init()},init:function(){this.name=this.getAttribute("name"),this.extends=this.getAttribute("extends"),f.wait(this),this.loadResources(),this.registerWhenReady()},registerWhenReady:function(){this.registered||this.waitingForPrototype(this.name)||this.waitingForQueue()||this.waitingForResources()||f.go(this)},_register:function(){c(this.extends)&&!b(this.extends)&&console.warn("%s is attempting to extend %s, an unregistered element or one that was not registered with Polymer.",this.name,this.extends),this.register(this.name,this.extends),this.registered=!0},waitingForPrototype:function(a){return h(a)?void 0:(i(a,this),this.handleNoScript(a),!0)},handleNoScript:function(a){this.hasAttribute("noscript")&&!this.noscript&&(this.noscript=!0,Polymer(a))},waitingForResources:function(){return this._needsResources},waitingForQueue:function(){return f.enqueue(this,this.registerWhenReady,this._register)},loadResources:function(){this._needsResources=!0,this.loadStyles(function(){this._needsResources=!1,this.registerWhenReady()}.bind(this))}});e.publish(e.declaration,j),g(function(){document.body.removeAttribute("unresolved"),document.dispatchEvent(new CustomEvent("polymer-ready",{bubbles:!0}))}),document.registerElement("polymer-element",{prototype:j})}(Polymer),function(){var a=document.createElement("polymer-element");a.setAttribute("name","auto-binding"),a.setAttribute("extends","template"),a.init(),Polymer("auto-binding",{createdCallback:function(){this.syntax=this.bindingDelegate=this.makeSyntax(),Polymer.whenPolymerReady(function(){this.model=this,this.setAttribute("bind",""),this.async(function(){this.marshalNodeReferences(this.parentNode),this.fire("template-bound")})}.bind(this))},makeSyntax:function(){var a=Object.create(Polymer.api.declaration.events),b=this;a.findController=function(){return b.model};var c=new PolymerExpressions,d=c.prepareBinding;return c.prepareBinding=function(b,e,f){return a.prepareEventBinding(b,e,f)||d.call(c,b,e,f)},c}})}();
+// @version: 0.3.5-5d00e4b
+window.PolymerGestures={},function(a){var b=!1,c=document.createElement("meta");if(c.createShadowRoot){var d=c.createShadowRoot(),e=document.createElement("span");d.appendChild(e),c.addEventListener("testpath",function(a){a.path&&(b=a.path[0]===e),a.stopPropagation()});var f=new CustomEvent("testpath",{bubbles:!0});document.head.appendChild(c),e.dispatchEvent(f),c.parentNode.removeChild(c),d=e=null}c=null;var g={shadow:function(a){return a?a.shadowRoot||a.webkitShadowRoot:void 0},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);return this.canTarget(b)?b:void 0},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){var d,e;return a?(d=a.elementFromPoint(b,c),d?e=this.targetingShadow(d):a!==document&&(e=this.olderShadow(a)),this.searchRoot(e,b,c)||d):void 0},owner:function(a){if(!a)return document;for(var b=a;b.parentNode;)b=b.parentNode;return b.nodeType!=Node.DOCUMENT_NODE&&b.nodeType!=Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){if(b&&a.path)return a.path[0];var c=a.clientX,d=a.clientY,e=this.owner(a.target);return e.elementFromPoint(c,d)||(e=document),this.searchRoot(e,c,d)},findTouchAction:function(a){var c;if(b&&a.path){for(var d=a.path,e=0;e<d.length;e++)if(c=d[e],c.nodeType===Node.ELEMENT_NODE&&c.hasAttribute("touch-action"))return c.getAttribute("touch-action")}else for(c=a.target;c;){if(c.hasAttribute("touch-action"))return c.getAttribute("touch-action");c=c.parentNode||c.host}return"auto"},LCA:function(a,b){if(a===b)return a;if(a&&!b)return a;if(b&&!a)return b;if(!b&&!a)return document;if(a.contains&&a.contains(b))return a;if(b.contains&&b.contains(a))return b;var c=this.depth(a),d=this.depth(b),e=c-d;for(e>=0?a=this.walk(a,e):b=this.walk(b,-e);a&&b&&a!==b;)a=a.parentNode||a.host,b=b.parentNode||b.host;return a},walk:function(a,b){for(var c=0;a&&b>c;c++)a=a.parentNode||a.host;return a},depth:function(a){for(var b=0;a;)b++,a=a.parentNode||a.host;return b},deepContains:function(a,b){var c=this.LCA(a,b);return c===a},insideNode:function(a,b,c){var d=a.getBoundingClientRect();return d.left<=b&&b<=d.right&&d.top<=c&&c<=d.bottom}};a.targetFinding=g,a.findTarget=g.findTarget.bind(g),a.deepContains=g.deepContains.bind(g),a.insideNode=g.insideNode}(window.PolymerGestures),function(){function a(a){return"html /deep/ "+b(a)}function b(a){return'[touch-action="'+a+'"]'}function c(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+";}"}var d=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]},"manipulation"],e="",f="string"==typeof document.head.style.touchAction,g=!window.ShadowDOMPolyfill&&document.head.createShadowRoot;if(f){d.forEach(function(d){String(d)===d?(e+=b(d)+c(d)+"\n",g&&(e+=a(d)+c(d)+"\n")):(e+=d.selectors.map(b)+c(d.rule)+"\n",g&&(e+=d.selectors.map(a)+c(d.rule)+"\n"))});var h=document.createElement("style");h.textContent=e,document.head.appendChild(h)}}(),function(a){var b=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],c=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],d=function(){return function(){}},e={preventTap:d,makeBaseEvent:function(a,b){var c=document.createEvent("Event");return c.initEvent(a,b.bubbles||!1,b.cancelable||!1),c.preventTap=e.preventTap(c),c},makeGestureEvent:function(a,b){b=b||Object.create(null);for(var c,d=this.makeBaseEvent(a,b),e=0,f=Object.keys(b);e<f.length;e++)c=f[e],d[c]=b[c];return d},makePointerEvent:function(a,d){d=d||Object.create(null);for(var e,f=this.makeBaseEvent(a,d),g=0;g<b.length;g++)e=b[g],f[e]=d[e]||c[g];f.buttons=d.buttons||0;var h=0;return h=d.pressure?d.pressure:f.buttons?.5:0,f.x=f.clientX,f.y=f.clientY,f.pointerId=d.pointerId||0,f.width=d.width||0,f.height=d.height||0,f.pressure=h,f.tiltX=d.tiltX||0,f.tiltY=d.tiltY||0,f.pointerType=d.pointerType||"",f.hwTimestamp=d.hwTimestamp||0,f.isPrimary=d.isPrimary||!1,f._source=d._source||"",f}};a.eventFactory=e}(window.PolymerGestures),function(a){function b(){if(c){var a=new Map;return a.pointers=d,a}this.keys=[],this.values=[]}var c=window.Map&&window.Map.prototype.forEach,d=function(){return this.size};b.prototype={set:function(a,b){var c=this.keys.indexOf(a);c>-1?this.values[c]=b:(this.keys.push(a),this.values.push(b))},has:function(a){return this.keys.indexOf(a)>-1},"delete":function(a){var b=this.keys.indexOf(a);b>-1&&(this.keys.splice(b,1),this.values.splice(b,1))},get:function(a){var b=this.keys.indexOf(a);return this.values[b]},clear:function(){this.keys.length=0,this.values.length=0},forEach:function(a,b){this.values.forEach(function(c,d){a.call(b,c,this.keys[d],this)},this)},pointers:function(){return this.keys.length}},a.PointerMap=b}(window.PolymerGestures),function(a){var b=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp","preventTap","tapPrevented","_source"],c=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0,function(){},!1],d="undefined"!=typeof SVGElementInstance,e=a.eventFactory,f={pointermap:new a.PointerMap,eventMap:Object.create(null),eventSources:Object.create(null),eventSourceList:[],gestures:[],dependencyMap:{down:{listeners:0,index:-1},up:{listeners:0,index:-1}},gestureQueue:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},registerGesture:function(a,b){var c=Object.create(null);c.listeners=0,c.index=this.gestures.length;for(var d,e=0;e<b.exposes.length;e++)d=b.exposes[e].toLowerCase(),this.dependencyMap[d]=c;this.gestures.push(b)},register:function(a,b){for(var c,d=this.eventSourceList.length,e=0;d>e&&(c=this.eventSourceList[e]);e++)c.register.call(c,a,b)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.unregister.call(b,a)},down:function(a){this.fireEvent("down",a)},move:function(a){a.type="move",this.fillGestureQueue(a)},up:function(a){this.fireEvent("up",a)},cancel:function(a){a.tapPrevented=!0,this.fireEvent("up",a)},eventHandler:function(a){if(!a._handledByPG){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPG=!0}},listen:function(a,b){for(var c,d=0,e=b.length;e>d&&(c=b[d]);d++)this.addEvent(a,c)},unlisten:function(a,b){for(var c,d=0,e=b.length;e>d&&(c=b[d]);d++)this.removeEvent(a,c)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(a,b){var c=e.makePointerEvent(a,b);return c.preventDefault=b.preventDefault,c.tapPrevented=b.tapPrevented,c._target=c._target||b.target,c},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var e,f=Object.create(null),g=0;g<b.length;g++)e=b[g],f[e]=a[e]||c[g],("target"===e||"relatedTarget"===e)&&d&&f[e]instanceof SVGElementInstance&&(f[e]=f[e].correspondingUseElement);return f.preventDefault=function(){a.preventDefault()},f},dispatchEvent:function(a){var b=a._target;if(b){b.dispatchEvent(a);var c=this.cloneEvent(a);c.target=b,this.fillGestureQueue(c)}},gestureTrigger:function(){for(var a,b=0;b<this.gestureQueue.length;b++){a=this.gestureQueue[b];for(var c,d,e=0;e<this.gestures.length;e++)c=this.gestures[e],d=c[a.type],c.enabled&&d&&d.call(c,a)}this.gestureQueue.length=0},fillGestureQueue:function(a){this.gestureQueue.length||requestAnimationFrame(this.boundGestureTrigger),this.gestureQueue.push(a)}};f.boundHandler=f.eventHandler.bind(f),f.boundGestureTrigger=f.gestureTrigger.bind(f),a.dispatcher=f,a.activateGesture=function(a,b){var c=b.toLowerCase(),d=f.dependencyMap[c];if(d){var e=f.gestures[d.index];if(0===d.listeners&&e&&(e.enabled=!0),d.listeners++,a._pgListeners||(f.register(a),a._pgListeners=0),e){var g,h=e.defaultActions&&e.defaultActions[c];switch(a.nodeType){case Node.ELEMENT_NODE:g=a;break;case Node.DOCUMENT_FRAGMENT_NODE:g=a.host;break;default:g=null}h&&g&&!g.hasAttribute("touch-action")&&g.setAttribute("touch-action",h)}a._pgListeners++}return Boolean(d)},a.addEventListener=function(b,c,d,e){d&&(a.activateGesture(b,c),b.addEventListener(c,d,e))},a.deactivateGesture=function(a,b){var c=b.toLowerCase(),d=f.dependencyMap[c];if(d){if(d.listeners>0&&d.listeners--,0===d.listeners){var e=f.gestures[d.index];e&&(e.enabled=!1)}a._pgListeners>0&&a._pgListeners--,0===a._pgListeners&&f.unregister(a)}return Boolean(d)},a.removeEventListener=function(b,c,d,e){d&&(a.deactivateGesture(b,c),b.removeEventListener(c,d,e))}}(window.PolymerGestures),function(a){var b=a.dispatcher,c=b.pointermap,d=25,e=[0,1,4,2],f=!1;try{f=1===new MouseEvent("test",{buttons:1}).buttons}catch(g){}var h={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup"],exposes:["down","up","move"],register:function(a){b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},lastTouches:[],isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,e=a.clientX,f=a.clientY,g=0,h=c.length;h>g&&(b=c[g]);g++){var i=Math.abs(e-b.x),j=Math.abs(f-b.y);if(d>=i&&d>=j)return!0}},prepareEvent:function(a){var c=b.cloneEvent(a);return c.pointerId=this.POINTER_ID,c.isPrimary=!0,c.pointerType=this.POINTER_TYPE,c._source="mouse",f||(c.buttons=e[c.which]||0),c},mousedown:function(d){if(!this.isEventSimulatedFromTouch(d)){var e=c.has(this.POINTER_ID);e&&this.mouseup(d);var f=this.prepareEvent(d);f.target=a.findTarget(d),c.set(this.POINTER_ID,f.target),b.down(f)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var d=c.get(this.POINTER_ID);if(d){var e=this.prepareEvent(a);e.target=d,0===e.buttons?(b.cancel(e),this.cleanupMouse()):b.move(e)}}},mouseup:function(d){if(!this.isEventSimulatedFromTouch(d)){var e=this.prepareEvent(d);e.relatedTarget=a.findTarget(d),e.target=c.get(this.POINTER_ID),b.up(e),this.cleanupMouse()}},cleanupMouse:function(){c["delete"](this.POINTER_ID)}};a.mouseEvents=h}(window.PolymerGestures),function(a){var b=a.dispatcher,c=(a.targetFinding.allShadows.bind(a.targetFinding),b.pointermap),d=(Array.prototype.map.call.bind(Array.prototype.map),2500),e=200,f=20,g=!1,h={events:["touchstart","touchmove","touchend","touchcancel"],exposes:["down","up","move"],register:function(a,c){c||b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y"},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return b===c.EMITTER?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":"XY"},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){(0===c.pointers()||1===c.pointers()&&c.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=null,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,e)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return("touchstart"===a||"touchmove"===a)&&(b=1),b},findTarget:function(b,d){if("touchstart"===this.currentTouchEvent.type){if(this.isPrimaryTouch(b)){var e={clientX:b.clientX,clientY:b.clientY,path:this.currentTouchEvent.path,target:this.currentTouchEvent.target};return a.findTarget(e)}return a.findTarget(b)}return c.get(d)},touchToPointer:function(a){var c=this.currentTouchEvent,d=b.cloneEvent(a),e=d.pointerId=a.identifier+2;d.target=this.findTarget(a,e),d.bubbles=!0,d.cancelable=!0,d.detail=this.clickCount,d.buttons=this.typeToButtons(c.type),d.width=a.webkitRadiusX||a.radiusX||0,d.height=a.webkitRadiusY||a.radiusY||0,d.pressure=a.webkitForce||a.force||.5,d.isPrimary=this.isPrimaryTouch(a),d.pointerType=this.POINTER_TYPE,d._source="touch";var f=this;return d.preventDefault=function(){f.scrolling=!1,f.firstXY=null,c.preventDefault()},d},processTouches:function(a,b){var d=a.changedTouches;this.currentTouchEvent=a;for(var e,f,g=0;g<d.length;g++)e=d[g],f=this.touchToPointer(e),"touchstart"===a.type&&c.set(f.pointerId,f.target),c.has(f.pointerId)&&b.call(this,f),("touchend"===a.type||a._cancel)&&this.cleanUpPointer(f)},shouldScroll:function(b){if(this.firstXY){var c,d=a.targetFinding.findTouchAction(b),e=this.touchActionToScrollType(d);if("none"===e)c=!1;else if("XY"===e)c=!0;else{var f=b.changedTouches[0],g=e,h="Y"===e?"X":"Y",i=Math.abs(f["client"+g]-this.firstXY[g]),j=Math.abs(f["client"+h]-this.firstXY[h]);c=i>=j}return c}},findTouch:function(a,b){for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)if(c.identifier===b)return!0},vacuumTouches:function(a){var b=a.touches;if(c.pointers()>=b.length){var d=[];c.forEach(function(a,c){if(1!==c&&!this.findTouch(b,c-2)){var e=a;d.push(e)}},this),d.forEach(function(a){this.cancel(a),c.delete(a.pointerId)})}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.down))},down:function(a){b.down(a)},touchmove:function(a){if(g)a.cancelable&&this.processTouches(a,this.move);else if(this.scrolling){if(this.firstXY){var b=a.changedTouches[0],c=b.clientX-this.firstXY.X,d=b.clientY-this.firstXY.Y,e=Math.sqrt(c*c+d*d);e>=f&&(this.touchcancel(a),this.scrolling=!0,this.firstXY=null)}}else null===this.scrolling&&this.shouldScroll(a)?this.scrolling=!0:(this.scrolling=!1,a.preventDefault(),this.processTouches(a,this.move))},move:function(a){b.move(a)},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.up)},up:function(c){c.relatedTarget=a.findTarget(c),b.up(c)},cancel:function(a){b.cancel(a)},touchcancel:function(a){a._cancel=!0,this.processTouches(a,this.cancel)},cleanUpPointer:function(a){c["delete"](a.pointerId),this.removePrimaryPointer(a)},dedupSynthMouse:function(b){var c=a.mouseEvents.lastTouches,e=b.changedTouches[0];if(this.isPrimaryTouch(e)){var f={x:e.clientX,y:e.clientY};c.push(f);var g=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,c,f);setTimeout(g,d)}}};a.touchEvents=h}(window.PolymerGestures),function(a){var b=a.dispatcher,c=b.pointermap,d=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,e={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerCancel"],register:function(a){a===document&&b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var c=a;return c=b.cloneEvent(a),d&&(c.pointerType=this.POINTER_TYPES[a.pointerType]),c._source="ms",c},cleanup:function(a){c["delete"](a)},MSPointerDown:function(d){var e=this.prepareEvent(d);e.target=a.findTarget(d),c.set(d.pointerId,e.target),b.down(e)},MSPointerMove:function(a){var d=this.prepareEvent(a);d.target=c.get(d.pointerId),b.move(d)},MSPointerUp:function(d){var e=this.prepareEvent(d);e.relatedTarget=a.findTarget(d),e.target=c.get(e.pointerId),b.up(e),this.cleanup(d.pointerId)},MSPointerCancel:function(d){var e=this.prepareEvent(d);e.relatedTarget=a.findTarget(d),e.target=c.get(e.pointerId),b.cancel(e),this.cleanup(d.pointerId)}};a.msEvents=e}(window.PolymerGestures),function(a){var b=a.dispatcher,c=b.pointermap,d={events:["pointerdown","pointermove","pointerup","pointercancel"],prepareEvent:function(a){var c=b.cloneEvent(a);return c._source="pointer",c},register:function(a){a===document&&b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},cleanup:function(a){c["delete"](a)},pointerdown:function(d){var e=this.prepareEvent(d);e.target=a.findTarget(d),c.set(e.pointerId,e.target),b.down(e)},pointermove:function(a){var d=this.prepareEvent(a);d.target=c.get(d.pointerId),b.move(d)},pointerup:function(d){var e=this.prepareEvent(d);e.relatedTarget=a.findTarget(d),e.target=c.get(e.pointerId),b.up(e),this.cleanup(d.pointerId)},pointercancel:function(d){var e=this.prepareEvent(d);e.relatedTarget=a.findTarget(d),e.target=c.get(e.pointerId),b.cancel(e),this.cleanup(d.pointerId)}};a.pointerEvents=d}(window.PolymerGestures),function(a){var b=a.dispatcher,c=window.navigator;if(window.PointerEvent)b.registerSource("pointer",a.pointerEvents);else if(c.msPointerEnabled)b.registerSource("ms",a.msEvents);else if(b.registerSource("mouse",a.mouseEvents),void 0!==window.ontouchstart){b.registerSource("touch",a.touchEvents);var d=c.userAgent.match("Safari")&&!c.userAgent.match("Chrome");d&&document.body.addEventListener("touchstart",function(){})}b.register(document,!0)}(window.PolymerGestures),function(a){var b=a.dispatcher,c=a.eventFactory,d=new a.PointerMap,e={events:["down","move","up"],exposes:["trackstart","track","trackx","tracky","trackend"],defaultActions:{track:"none",trackx:"pan-y",tracky:"pan-x"},WIGGLE_THRESHOLD:4,clampDir:function(a){return a>0?1:-1},calcPositionDelta:function(a,b){var c=0,d=0;return a&&b&&(c=b.pageX-a.pageX,d=b.pageY-a.pageY),{x:c,y:d}},fireTrack:function(a,b,d){var e=d,f=this.calcPositionDelta(e.downEvent,b),g=this.calcPositionDelta(e.lastMoveEvent,b);if(g.x)e.xDirection=this.clampDir(g.x);else if("trackx"===a)return;if(g.y)e.yDirection=this.clampDir(g.y);else if("tracky"===a)return;var h={bubbles:!0,cancelable:!0,trackInfo:e.trackInfo,relatedTarget:b.relatedTarget,pointerType:b.pointerType,pointerId:b.pointerId,_source:"track"};"tracky"!==a&&(h.x=b.x,h.dx=f.x,h.ddx=g.x,h.clientX=b.clientX,h.pageX=b.pageX,h.screenX=b.screenX,h.xDirection=e.xDirection),"trackx"!==a&&(h.dy=f.y,h.ddy=g.y,h.y=b.y,h.clientY=b.clientY,h.pageY=b.pageY,h.screenY=b.screenY,h.yDirection=e.yDirection);var i=c.makeGestureEvent(a,h);e.downTarget.dispatchEvent(i)},down:function(a){if(a.isPrimary&&("mouse"===a.pointerType?1===a.buttons:!0)){var b={downEvent:a,downTarget:a.target,trackInfo:{},lastMoveEvent:null,xDirection:0,yDirection:0,tracking:!1};d.set(a.pointerId,b)}},move:function(a){var b=d.get(a.pointerId);if(b){if(!b.tracking){var c=this.calcPositionDelta(b.downEvent,a),e=c.x*c.x+c.y*c.y;e>this.WIGGLE_THRESHOLD&&(b.tracking=!0,b.lastMoveEvent=b.downEvent,this.fireTrack("trackstart",a,b))}b.tracking&&(this.fireTrack("track",a,b),this.fireTrack("trackx",a,b),this.fireTrack("tracky",a,b)),b.lastMoveEvent=a}},up:function(a){var b=d.get(a.pointerId);b&&(b.tracking&&this.fireTrack("trackend",a,b),d.delete(a.pointerId))}};b.registerGesture("track",e)}(window.PolymerGestures),function(a){var b=a.dispatcher,c=a.eventFactory,d={HOLD_DELAY:200,WIGGLE_THRESHOLD:16,events:["down","move","up"],exposes:["hold","holdpulse","release"],heldPointer:null,holdJob:null,pulse:function(){var a=Date.now()-this.heldPointer.timeStamp,b=this.held?"holdpulse":"hold";this.fireHold(b,a),this.held=!0},cancel:function(){clearInterval(this.holdJob),this.held&&this.fireHold("release"),this.held=!1,this.heldPointer=null,this.target=null,this.holdJob=null},down:function(a){a.isPrimary&&!this.heldPointer&&(this.heldPointer=a,this.target=a.target,this.holdJob=setInterval(this.pulse.bind(this),this.HOLD_DELAY))},up:function(a){this.heldPointer&&this.heldPointer.pointerId===a.pointerId&&this.cancel()},move:function(a){if(this.heldPointer&&this.heldPointer.pointerId===a.pointerId){var b=a.clientX-this.heldPointer.clientX,c=a.clientY-this.heldPointer.clientY;b*b+c*c>this.WIGGLE_THRESHOLD&&this.cancel()}},fireHold:function(a,b){var d={bubbles:!0,cancelable:!0,pointerType:this.heldPointer.pointerType,pointerId:this.heldPointer.pointerId,x:this.heldPointer.clientX,y:this.heldPointer.clientY,_source:"hold"};b&&(d.holdTime=b);var e=c.makeGestureEvent(a,d);this.target.dispatchEvent(e)}};b.registerGesture("hold",d)}(window.PolymerGestures),function(a){var b=a.dispatcher,c=a.eventFactory,d=new a.PointerMap,e={events:["down","up"],exposes:["tap"],down:function(a){a.isPrimary&&!a.tapPrevented&&d.set(a.pointerId,{target:a.target,buttons:a.buttons,x:a.clientX,y:a.clientY})},shouldTap:function(a,b){return"mouse"===a.pointerType?1===b.buttons:!a.tapPrevented},up:function(b){var e=d.get(b.pointerId);if(e&&this.shouldTap(b,e)){var f=a.targetFinding.LCA(e.target,b.relatedTarget);if(f){var g=c.makeGestureEvent("tap",{bubbles:!0,cancelable:!0,x:b.clientX,y:b.clientY,detail:b.detail,pointerType:b.pointerType,pointerId:b.pointerId,altKey:b.altKey,ctrlKey:b.ctrlKey,metaKey:b.metaKey,shiftKey:b.shiftKey,_source:"tap"});f.dispatchEvent(g)}}d.delete(b.pointerId)}};c.preventTap=function(a){return function(){a.tapPrevented=!0,d.delete(a.pointerId)}},b.registerGesture("tap",e)}(window.PolymerGestures),function(a){"use strict";function b(a,b){if(!a)throw new Error("ASSERT: "+b)}function c(a){return a>=48&&57>=a}function d(a){return 32===a||9===a||11===a||12===a||160===a||a>=5760&&"\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\ufeff".indexOf(String.fromCharCode(a))>0}function e(a){return 10===a||13===a||8232===a||8233===a}function f(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a}function g(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a||a>=48&&57>=a}function h(a){return"this"===a}function i(){for(;Y>X&&d(W.charCodeAt(X));)++X}function j(){var a,b;for(a=X++;Y>X&&(b=W.charCodeAt(X),g(b));)++X;return W.slice(a,X)}function k(){var a,b,c;return a=X,b=j(),c=1===b.length?S.Identifier:h(b)?S.Keyword:"null"===b?S.NullLiteral:"true"===b||"false"===b?S.BooleanLiteral:S.Identifier,{type:c,value:b,range:[a,X]}}function l(){var a,b,c=X,d=W.charCodeAt(X),e=W[X];switch(d){case 46:case 40:case 41:case 59:case 44:case 123:case 125:case 91:case 93:case 58:case 63:return++X,{type:S.Punctuator,value:String.fromCharCode(d),range:[c,X]};default:if(a=W.charCodeAt(X+1),61===a)switch(d){case 37:case 38:case 42:case 43:case 45:case 47:case 60:case 62:case 124:return X+=2,{type:S.Punctuator,value:String.fromCharCode(d)+String.fromCharCode(a),range:[c,X]};case 33:case 61:return X+=2,61===W.charCodeAt(X)&&++X,{type:S.Punctuator,value:W.slice(c,X),range:[c,X]}}}return b=W[X+1],e===b&&"&|".indexOf(e)>=0?(X+=2,{type:S.Punctuator,value:e+b,range:[c,X]}):"<>=!+-*%&|^/".indexOf(e)>=0?(++X,{type:S.Punctuator,value:e,range:[c,X]}):void s({},V.UnexpectedToken,"ILLEGAL")}function m(){var a,d,e;if(e=W[X],b(c(e.charCodeAt(0))||"."===e,"Numeric literal must start with a decimal digit or a decimal point"),d=X,a="","."!==e){for(a=W[X++],e=W[X],"0"===a&&e&&c(e.charCodeAt(0))&&s({},V.UnexpectedToken,"ILLEGAL");c(W.charCodeAt(X));)a+=W[X++];e=W[X]}if("."===e){for(a+=W[X++];c(W.charCodeAt(X));)a+=W[X++];e=W[X]}if("e"===e||"E"===e)if(a+=W[X++],e=W[X],("+"===e||"-"===e)&&(a+=W[X++]),c(W.charCodeAt(X)))for(;c(W.charCodeAt(X));)a+=W[X++];else s({},V.UnexpectedToken,"ILLEGAL");return f(W.charCodeAt(X))&&s({},V.UnexpectedToken,"ILLEGAL"),{type:S.NumericLiteral,value:parseFloat(a),range:[d,X]}}function n(){var a,c,d,f="",g=!1;for(a=W[X],b("'"===a||'"'===a,"String literal must starts with a quote"),c=X,++X;Y>X;){if(d=W[X++],d===a){a="";break}if("\\"===d)if(d=W[X++],d&&e(d.charCodeAt(0)))"\r"===d&&"\n"===W[X]&&++X;else switch(d){case"n":f+="\n";break;case"r":f+="\r";break;case"t":f+="	";break;case"b":f+="\b";break;case"f":f+="\f";break;case"v":f+="";break;default:f+=d}else{if(e(d.charCodeAt(0)))break;f+=d}}return""!==a&&s({},V.UnexpectedToken,"ILLEGAL"),{type:S.StringLiteral,value:f,octal:g,range:[c,X]}}function o(a){return a.type===S.Identifier||a.type===S.Keyword||a.type===S.BooleanLiteral||a.type===S.NullLiteral}function p(){var a;return i(),X>=Y?{type:S.EOF,range:[X,X]}:(a=W.charCodeAt(X),40===a||41===a||58===a?l():39===a||34===a?n():f(a)?k():46===a?c(W.charCodeAt(X+1))?m():l():c(a)?m():l())}function q(){var a;return a=$,X=a.range[1],$=p(),X=a.range[1],a}function r(){var a;a=X,$=p(),X=a}function s(a,c){var d,e=Array.prototype.slice.call(arguments,2),f=c.replace(/%(\d)/g,function(a,c){return b(c<e.length,"Message reference must be in range"),e[c]});throw d=new Error(f),d.index=X,d.description=f,d}function t(a){s(a,V.UnexpectedToken,a.value)}function u(a){var b=q();(b.type!==S.Punctuator||b.value!==a)&&t(b)}function v(a){return $.type===S.Punctuator&&$.value===a}function w(a){return $.type===S.Keyword&&$.value===a}function x(){var a=[];for(u("[");!v("]");)v(",")?(q(),a.push(null)):(a.push(bb()),v("]")||u(","));return u("]"),Z.createArrayExpression(a)}function y(){var a;return i(),a=q(),a.type===S.StringLiteral||a.type===S.NumericLiteral?Z.createLiteral(a):Z.createIdentifier(a.value)}function z(){var a,b;return a=$,i(),(a.type===S.EOF||a.type===S.Punctuator)&&t(a),b=y(),u(":"),Z.createProperty("init",b,bb())}function A(){var a=[];for(u("{");!v("}");)a.push(z()),v("}")||u(",");return u("}"),Z.createObjectExpression(a)}function B(){var a;return u("("),a=bb(),u(")"),a}function C(){var a,b,c;return v("(")?B():(a=$.type,a===S.Identifier?c=Z.createIdentifier(q().value):a===S.StringLiteral||a===S.NumericLiteral?c=Z.createLiteral(q()):a===S.Keyword?w("this")&&(q(),c=Z.createThisExpression()):a===S.BooleanLiteral?(b=q(),b.value="true"===b.value,c=Z.createLiteral(b)):a===S.NullLiteral?(b=q(),b.value=null,c=Z.createLiteral(b)):v("[")?c=x():v("{")&&(c=A()),c?c:void t(q()))}function D(){var a=[];if(u("("),!v(")"))for(;Y>X&&(a.push(bb()),!v(")"));)u(",");return u(")"),a}function E(){var a;return a=q(),o(a)||t(a),Z.createIdentifier(a.value)}function F(){return u("."),E()}function G(){var a;return u("["),a=bb(),u("]"),a}function H(){var a,b,c;for(a=C();;)if(v("["))c=G(),a=Z.createMemberExpression("[",a,c);else if(v("."))c=F(),a=Z.createMemberExpression(".",a,c);else{if(!v("("))break;b=D(),a=Z.createCallExpression(a,b)}return a}function I(){var a,b;return $.type!==S.Punctuator&&$.type!==S.Keyword?b=ab():v("+")||v("-")||v("!")?(a=q(),b=I(),b=Z.createUnaryExpression(a.value,b)):w("delete")||w("void")||w("typeof")?s({},V.UnexpectedToken):b=ab(),b}function J(a){var b=0;if(a.type!==S.Punctuator&&a.type!==S.Keyword)return 0;switch(a.value){case"||":b=1;break;case"&&":b=2;break;case"==":case"!=":case"===":case"!==":b=6;break;case"<":case">":case"<=":case">=":case"instanceof":b=7;break;case"in":b=7;break;case"+":case"-":b=9;break;case"*":case"/":case"%":b=11}return b}function K(){var a,b,c,d,e,f,g,h;if(g=I(),b=$,c=J(b),0===c)return g;for(b.prec=c,q(),e=I(),d=[g,b,e];(c=J($))>0;){for(;d.length>2&&c<=d[d.length-2].prec;)e=d.pop(),f=d.pop().value,g=d.pop(),a=Z.createBinaryExpression(f,g,e),d.push(a);b=q(),b.prec=c,d.push(b),a=I(),d.push(a)}for(h=d.length-1,a=d[h];h>1;)a=Z.createBinaryExpression(d[h-1].value,d[h-2],a),h-=2;return a}function L(){var a,b,c;return a=K(),v("?")&&(q(),b=L(),u(":"),c=L(),a=Z.createConditionalExpression(a,b,c)),a}function M(){var a,b;return a=q(),a.type!==S.Identifier&&t(a),b=v("(")?D():[],Z.createFilter(a.value,b)}function N(){for(;v("|");)q(),M()}function O(){i(),r();var a=bb();a&&(","===$.value||"in"==$.value&&a.type===U.Identifier?Q(a):(N(),"as"===$.value?P(a):Z.createTopLevel(a))),$.type!==S.EOF&&t($)}function P(a){q();var b=q().value;Z.createAsExpression(a,b)}function Q(a){var b;","===$.value&&(q(),$.type!==S.Identifier&&t($),b=q().value),q();var c=bb();N(),Z.createInExpression(a.name,b,c)}function R(a,b){return Z=b,W=a,X=0,Y=W.length,$=null,_={labelSet:{}},O()}var S,T,U,V,W,X,Y,Z,$,_;S={BooleanLiteral:1,EOF:2,Identifier:3,Keyword:4,NullLiteral:5,NumericLiteral:6,Punctuator:7,StringLiteral:8},T={},T[S.BooleanLiteral]="Boolean",T[S.EOF]="<end>",T[S.Identifier]="Identifier",T[S.Keyword]="Keyword",T[S.NullLiteral]="Null",T[S.NumericLiteral]="Numeric",T[S.Punctuator]="Punctuator",T[S.StringLiteral]="String",U={ArrayExpression:"ArrayExpression",BinaryExpression:"BinaryExpression",CallExpression:"CallExpression",ConditionalExpression:"ConditionalExpression",EmptyStatement:"EmptyStatement",ExpressionStatement:"ExpressionStatement",Identifier:"Identifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",ObjectExpression:"ObjectExpression",Program:"Program",Property:"Property",ThisExpression:"ThisExpression",UnaryExpression:"UnaryExpression"},V={UnexpectedToken:"Unexpected token %0",UnknownLabel:"Undefined label '%0'",Redeclaration:"%0 '%1' has already been declared"};var ab=H,bb=L;a.esprima={parse:R}}(this),function(a){"use strict";function b(a,b,d,e){var f;try{if(f=c(a),f.scopeIdent&&(d.nodeType!==Node.ELEMENT_NODE||"TEMPLATE"!==d.tagName||"bind"!==b&&"repeat"!==b))throw Error("as and in can only be used within <template bind/repeat>")}catch(g){return void console.error("Invalid expression syntax: "+a,g)}return function(a,b,c){var d=f.getBinding(a,e,c);return f.scopeIdent&&d&&(b.polymerExpressionScopeIdent_=f.scopeIdent,f.indexIdent&&(b.polymerExpressionIndexIdent_=f.indexIdent)),d}}function c(a){var b=q[a];if(!b){var c=new j;esprima.parse(a,c),b=new l(c),q[a]=b}return b}function d(a){this.value=a,this.valueFn_=void 0}function e(a){this.name=a,this.path=Path.get(a)}function f(a,b,c){this.computed="["==c,this.dynamicDeps="function"==typeof a||a.dynamicDeps||this.computed&&!(b instanceof d),this.simplePath=!this.dynamicDeps&&(b instanceof e||b instanceof d)&&(a instanceof f||a instanceof e),this.object=this.simplePath?a:i(a),this.property=!this.computed||this.simplePath?b:i(b)}function g(a,b){this.name=a,this.args=[];for(var c=0;c<b.length;c++)this.args[c]=i(b[c])}function h(){throw Error("Not Implemented")}function i(a){return"function"==typeof a?a:a.valueFn()}function j(){this.expression=null,this.filters=[],this.deps={},this.currentPath=void 0,this.scopeIdent=void 0,this.indexIdent=void 0,this.dynamicDeps=!1}function k(a){this.value_=a}function l(a){if(this.scopeIdent=a.scopeIdent,this.indexIdent=a.indexIdent,!a.expression)throw Error("No expression found.");this.expression=a.expression,i(this.expression),this.filters=a.filters,this.dynamicDeps=a.dynamicDeps}function m(a){return String(a).replace(/[A-Z]/g,function(a){return"-"+a.toLowerCase()})}function n(a,b){for(;a[t]&&!Object.prototype.hasOwnProperty.call(a,b);)a=a[t];return a}function o(a){switch(a){case"":return!1;case"false":case"null":case"true":return!0}return isNaN(Number(a))?!1:!0}function p(){}var q=Object.create(null);d.prototype={valueFn:function(){if(!this.valueFn_){var a=this.value;this.valueFn_=function(){return a}}return this.valueFn_}},e.prototype={valueFn:function(){if(!this.valueFn_){var a=(this.name,this.path);this.valueFn_=function(b,c){return c&&c.addPath(b,a),a.getValueFrom(b)}}return this.valueFn_},setValue:function(a,b){return 1==this.path.length,a=n(a,this.path[0]),this.path.setValueFrom(a,b)}},f.prototype={get fullPath(){if(!this.fullPath_){var a=this.object instanceof f?this.object.fullPath.slice():[this.object.name];a.push(this.property instanceof e?this.property.name:this.property.value),this.fullPath_=Path.get(a)}return this.fullPath_},valueFn:function(){if(!this.valueFn_){var a=this.object;if(this.simplePath){var b=this.fullPath;this.valueFn_=function(a,c){return c&&c.addPath(a,b),b.getValueFrom(a)}}else if(this.computed){var c=this.property;this.valueFn_=function(b,d,e){var f=a(b,d,e),g=c(b,d,e);return d&&d.addPath(f,[g]),f?f[g]:void 0}}else{var b=Path.get(this.property.name);this.valueFn_=function(c,d,e){var f=a(c,d,e);return d&&d.addPath(f,b),b.getValueFrom(f)}}}return this.valueFn_},setValue:function(a,b){if(this.simplePath)return this.fullPath.setValueFrom(a,b),b;var c=this.object(a),d=this.property instanceof e?this.property.name:this.property(a);return c[d]=b}},g.prototype={transform:function(a,b,c,d,e){var f=c[this.name],g=a;
+if(f)g=void 0;else if(f=g[this.name],!f)return void console.error("Cannot find function or filter: "+this.name);if(d?f=f.toModel:"function"==typeof f.toDOM&&(f=f.toDOM),"function"!=typeof f)return void console.error("Cannot find function or filter: "+this.name);for(var h=e||[],j=0;j<this.args.length;j++)h.push(i(this.args[j])(a,b,c));return f.apply(g,h)}};var r={"+":function(a){return+a},"-":function(a){return-a},"!":function(a){return!a}},s={"+":function(a,b){return a+b},"-":function(a,b){return a-b},"*":function(a,b){return a*b},"/":function(a,b){return a/b},"%":function(a,b){return a%b},"<":function(a,b){return b>a},">":function(a,b){return a>b},"<=":function(a,b){return b>=a},">=":function(a,b){return a>=b},"==":function(a,b){return a==b},"!=":function(a,b){return a!=b},"===":function(a,b){return a===b},"!==":function(a,b){return a!==b},"&&":function(a,b){return a&&b},"||":function(a,b){return a||b}};j.prototype={createUnaryExpression:function(a,b){if(!r[a])throw Error("Disallowed operator: "+a);return b=i(b),function(c,d,e){return r[a](b(c,d,e))}},createBinaryExpression:function(a,b,c){if(!s[a])throw Error("Disallowed operator: "+a);switch(b=i(b),c=i(c),a){case"||":return this.dynamicDeps=!0,function(a,d,e){return b(a,d,e)||c(a,d,e)};case"&&":return this.dynamicDeps=!0,function(a,d,e){return b(a,d,e)&&c(a,d,e)}}return function(d,e,f){return s[a](b(d,e,f),c(d,e,f))}},createConditionalExpression:function(a,b,c){return a=i(a),b=i(b),c=i(c),this.dynamicDeps=!0,function(d,e,f){return a(d,e,f)?b(d,e,f):c(d,e,f)}},createIdentifier:function(a){var b=new e(a);return b.type="Identifier",b},createMemberExpression:function(a,b,c){var d=new f(b,c,a);return d.dynamicDeps&&(this.dynamicDeps=!0),d},createCallExpression:function(a,b){if(!(a instanceof e))throw Error("Only identifier function invocations are allowed");var c=new g(a.name,b);return function(a,b,d){return c.transform(a,b,d,!1)}},createLiteral:function(a){return new d(a.value)},createArrayExpression:function(a){for(var b=0;b<a.length;b++)a[b]=i(a[b]);return function(b,c,d){for(var e=[],f=0;f<a.length;f++)e.push(a[f](b,c,d));return e}},createProperty:function(a,b,c){return{key:b instanceof e?b.name:b.value,value:c}},createObjectExpression:function(a){for(var b=0;b<a.length;b++)a[b].value=i(a[b].value);return function(b,c,d){for(var e={},f=0;f<a.length;f++)e[a[f].key]=a[f].value(b,c,d);return e}},createFilter:function(a,b){this.filters.push(new g(a,b))},createAsExpression:function(a,b){this.expression=a,this.scopeIdent=b},createInExpression:function(a,b,c){this.expression=c,this.scopeIdent=a,this.indexIdent=b},createTopLevel:function(a){this.expression=a},createThisExpression:h},k.prototype={open:function(){return this.value_},discardChanges:function(){return this.value_},deliver:function(){},close:function(){}},l.prototype={getBinding:function(a,b,c){function d(){if(h)return h=!1,g;i.dynamicDeps&&f.startReset();var c=i.getValue(a,i.dynamicDeps?f:void 0,b);return i.dynamicDeps&&f.finishReset(),c}function e(c){return i.setValue(a,c,b),c}if(c)return this.getValue(a,void 0,b);var f=new CompoundObserver,g=this.getValue(a,f,b),h=!0,i=this;return new ObserverTransform(f,d,e,!0)},getValue:function(a,b,c){for(var d=i(this.expression)(a,b,c),e=0;e<this.filters.length;e++)d=this.filters[e].transform(a,b,c,!1,[d]);return d},setValue:function(a,b,c){for(var d=this.filters?this.filters.length:0;d-->0;)b=this.filters[d].transform(a,void 0,c,!0,[b]);return this.expression.setValue?this.expression.setValue(a,b):void 0}};var t="@"+Math.random().toString(36).slice(2);p.prototype={styleObject:function(a){var b=[];for(var c in a)b.push(m(c)+": "+a[c]);return b.join("; ")},tokenList:function(a){var b=[];for(var c in a)a[c]&&b.push(c);return b.join(" ")},prepareInstancePositionChanged:function(a){var b=a.polymerExpressionIndexIdent_;if(b)return function(a,c){a.model[b]=c}},prepareBinding:function(a,c,d){var e=Path.get(a);{if(o(a)||!e.valid)return b(a,c,d,this);if(1==e.length)return function(a,b,c){if(c)return e.getValueFrom(a);var d=n(a,e[0]);return new PathObserver(d,e)}}},prepareInstanceModel:function(a){var b=a.polymerExpressionScopeIdent_;if(b){var c=a.templateInstance?a.templateInstance.model:a.model,d=a.polymerExpressionIndexIdent_;return function(a){return u(c,a,b,d)}}}};var u="__proto__"in{}?function(a,b,c,d){var e={};return e[c]=b,e[d]=void 0,e[t]=a,e.__proto__=a,e}:function(a,b,c,d){var e=Object.create(a);return Object.defineProperty(e,c,{value:b,configurable:!0,writable:!0}),Object.defineProperty(e,d,{value:void 0,configurable:!0,writable:!0}),Object.defineProperty(e,t,{value:a,configurable:!0,writable:!0}),e};a.PolymerExpressions=p,p.getExpression=c}(this),Polymer={version:"0.3.5-5d00e4b"},"function"==typeof window.Polymer&&(Polymer={}),function(a){function b(a,b){return a&&b&&Object.getOwnPropertyNames(b).forEach(function(c){var d=Object.getOwnPropertyDescriptor(b,c);d&&(Object.defineProperty(a,c,d),"function"==typeof d.value&&(d.value.nom=c))}),a}a.extend=b}(Polymer),function(a){function b(a,b,d){return a?a.stop():a=new c(this),a.go(b,d),a}var c=function(a){this.context=a,this.boundComplete=this.complete.bind(this)};c.prototype={go:function(a,b){this.callback=a;var c;b?(c=setTimeout(this.boundComplete,b),this.handle=function(){clearTimeout(c)}):(c=requestAnimationFrame(this.boundComplete),this.handle=function(){cancelAnimationFrame(c)})},stop:function(){this.handle&&(this.handle(),this.handle=null)},complete:function(){this.handle&&(this.stop(),this.callback.call(this.context))}},a.job=b}(Polymer),function(){var a={};HTMLElement.register=function(b,c){a[b]=c},HTMLElement.getPrototypeForTag=function(b){var c=b?a[b]:HTMLElement.prototype;return c||Object.getPrototypeOf(document.createElement(b))};var b=Event.prototype.stopPropagation;Event.prototype.stopPropagation=function(){this.cancelBubble=!0,b.apply(this,arguments)}}(Polymer),function(a){function b(a){var e=b.caller,g=e.nom,h=e._super;h||(g||(g=e.nom=c.call(this,e)),g||console.warn("called super() on a method not installed declaratively (has no .nom property)"),h=d(e,g,f(this)));var i=h[g];return i?(i._super||d(i,g,h),i.apply(this,a||[])):void 0}function c(a){for(var b=this.__proto__;b&&b!==HTMLElement.prototype;){for(var c,d=Object.getOwnPropertyNames(b),e=0,f=d.length;f>e&&(c=d[e]);e++){var g=Object.getOwnPropertyDescriptor(b,c);if("function"==typeof g.value&&g.value===a)return c}b=b.__proto__}}function d(a,b,c){var d=e(c,b,a);return d[b]&&(d[b].nom=b),a._super=d}function e(a,b,c){for(;a;){if(a[b]!==c&&a[b])return a;a=f(a)}return Object}function f(a){return a.__proto__}a.super=b}(Polymer),function(a){function b(a){return a}function c(a,b){var c=typeof b;return b instanceof Date&&(c="date"),d[c](a,b)}var d={string:b,undefined:b,date:function(a){return new Date(Date.parse(a)||Date.now())},"boolean":function(a){return""===a?!0:"false"===a?!1:!!a},number:function(a){var b=parseFloat(a);return 0===b&&(b=parseInt(a)),isNaN(b)?a:b},object:function(a,b){if(null===b)return a;try{return JSON.parse(a.replace(/'/g,'"'))}catch(c){return a}},"function":function(a,b){return b}};a.deserializeValue=c}(Polymer),function(a){var b=a.extend,c={};c.declaration={},c.instance={},c.publish=function(a,c){for(var d in a)b(c,a[d])},a.api=c}(Polymer),function(a){var b={async:function(a,b,c){Platform.flush(),b=b&&b.length?b:[b];var d=function(){(this[a]||a).apply(this,b)}.bind(this),e=c?setTimeout(d,c):requestAnimationFrame(d);return c?e:~e},cancelAsync:function(a){0>a?cancelAnimationFrame(~a):clearTimeout(a)},fire:function(a,b,c,d,e){var f=c||this,b=null===b||void 0===b?{}:b,g=new CustomEvent(a,{bubbles:void 0!==d?d:!0,cancelable:void 0!==e?e:!0,detail:b});return f.dispatchEvent(g),g},asyncFire:function(){this.async("fire",arguments)},classFollows:function(a,b,c){b&&b.classList.remove(c),a&&a.classList.add(c)},injectBoundHTML:function(a,b){var c=document.createElement("template");c.innerHTML=a;var d=this.instanceTemplate(c);return b&&(b.textContent="",b.appendChild(d)),d}},c=function(){},d={};b.asyncMethod=b.async,a.api.instance.utils=b,a.nop=c,a.nob=d}(Polymer),function(a){var b=window.logFlags||{},c="on-",d={EVENT_PREFIX:c,addHostListeners:function(){var a=this.eventDelegates;b.events&&Object.keys(a).length>0&&console.log("[%s] addHostListeners:",this.localName,a);for(var c in a){var d=a[c];PolymerGestures.addEventListener(this,c,this.element.getEventHandler(this,this,d))}},dispatchMethod:function(a,c,d){if(a){b.events&&console.group("[%s] dispatch [%s]",a.localName,c);var e="function"==typeof c?c:a[c];e&&e[d?"apply":"call"](a,d),b.events&&console.groupEnd(),Platform.flush()}}};a.api.instance.events=d,a.addEventListener=PolymerGestures.addEventListener,a.removeEventListener=PolymerGestures.removeEventListener}(Polymer),function(a){var b={copyInstanceAttributes:function(){var a=this._instanceAttributes;for(var b in a)this.hasAttribute(b)||this.setAttribute(b,a[b])},takeAttributes:function(){if(this._publishLC)for(var a,b=0,c=this.attributes,d=c.length;(a=c[b])&&d>b;b++)this.attributeToProperty(a.name,a.value)},attributeToProperty:function(b,c){var b=this.propertyForAttribute(b);if(b){if(c&&c.search(a.bindPattern)>=0)return;var d=this[b],c=this.deserializeValue(c,d);c!==d&&(this[b]=c)}},propertyForAttribute:function(a){var b=this._publishLC&&this._publishLC[a];return b},deserializeValue:function(b,c){return a.deserializeValue(b,c)},serializeValue:function(a,b){return"boolean"===b?a?"":void 0:"object"!==b&&"function"!==b&&void 0!==a?a:void 0},reflectPropertyToAttribute:function(a){var b=typeof this[a],c=this.serializeValue(this[a],b);void 0!==c?this.setAttribute(a,c):"boolean"===b&&this.removeAttribute(a)}};a.api.instance.attributes=b}(Polymer),function(a){function b(a,b){return a===b?0!==a||1/a===1/b:f(a)&&f(b)?!0:a!==a&&b!==b}function c(a,b){return void 0===b&&null===a?b:null===b||void 0===b?a:b}var d=window.logFlags||{},e={object:void 0,type:"update",name:void 0,oldValue:void 0},f=Number.isNaN||function(a){return"number"==typeof a&&isNaN(a)},g={createPropertyObserver:function(){var a=this._observeNames;if(a&&a.length){var b=this._propertyObserver=new CompoundObserver(!0);this.registerObserver(b);for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)b.addPath(this,c),this.observeArrayValue(c,this[c],null)}},openPropertyObserver:function(){this._propertyObserver&&this._propertyObserver.open(this.notifyPropertyChanges,this)},notifyPropertyChanges:function(a,b,c){var d,e,f={};for(var g in b)if(d=c[2*g+1],e=this.observe[d]){var h=b[g],i=a[g];this.observeArrayValue(d,i,h),f[e]||(void 0!==h&&null!==h||void 0!==i&&null!==i)&&(f[e]=!0,this.invokeMethod(e,[h,i,arguments]))}},deliverChanges:function(){this._propertyObserver&&this._propertyObserver.deliver()},propertyChanged_:function(a){this.reflect[a]&&this.reflectPropertyToAttribute(a)},observeArrayValue:function(a,b,c){var e=this.observe[a];if(e&&(Array.isArray(c)&&(d.observe&&console.log("[%s] observeArrayValue: unregister observer [%s]",this.localName,a),this.closeNamedObserver(a+"__array")),Array.isArray(b))){d.observe&&console.log("[%s] observeArrayValue: register observer [%s]",this.localName,a,b);var f=new ArrayObserver(b);f.open(function(a,b){this.invokeMethod(e,[b])},this),this.registerNamedObserver(a+"__array",f)}},emitPropertyChangeRecord:function(a,c,d){if(!b(c,d)&&(this.propertyChanged_(a,c,d),Observer.hasObjectObserve)){var f=this.notifier_;f||(f=this.notifier_=Object.getNotifier(this)),e.object=this,e.name=a,e.oldValue=d,f.notify(e)}},bindToAccessor:function(a,c,d){var e=a+"_",f=a+"Observable_";this[f]=c;var g=this[e],h=this,i=c.open(function(b,c){h[e]=b,h.emitPropertyChangeRecord(a,b,c)});if(d&&!b(g,i)){var j=d(g,i);b(i,j)||(i=j,c.setValue&&c.setValue(i))}this[e]=i,this.emitPropertyChangeRecord(a,i,g);var k={close:function(){c.close(),h[f]=void 0}};return this.registerObserver(k),k},createComputedProperties:function(){if(this._computedNames)for(var a=0;a<this._computedNames.length;a++){var b=this._computedNames[a],c=this.computed[b];try{var d=PolymerExpressions.getExpression(c),e=d.getBinding(this,this.element.syntax);this.bindToAccessor(b,e)}catch(f){console.error("Failed to create computed property",f)}}},bindProperty:function(a,b,d){return d?void(this[a]=b):this.bindToAccessor(a,b,c)},invokeMethod:function(a,b){var c=this[a]||a;"function"==typeof c&&c.apply(this,b)},registerObserver:function(a){return this._observers?void this._observers.push(a):void(this._observers=[a])},closeObservers:function(){if(this._observers){for(var a=this._observers,b=0;b<a.length;b++){var c=a[b];c&&"function"==typeof c.close&&c.close()}this._observers=[]}},registerNamedObserver:function(a,b){var c=this._namedObservers||(this._namedObservers={});c[a]=b},closeNamedObserver:function(a){var b=this._namedObservers;return b&&b[a]?(b[a].close(),b[a]=null,!0):void 0},closeNamedObservers:function(){if(this._namedObservers){for(var a in this._namedObservers)this.closeNamedObserver(a);this._namedObservers={}}}};a.api.instance.properties=g}(Polymer),function(a){var b=window.logFlags||0,c={instanceTemplate:function(a){for(var b=this.syntax||!a.bindingDelegate&&this.element.syntax,c=a.createInstance(this,b),d=c.bindings_,e=0;e<d.length;e++)this.registerObserver(d[e]);return c},bind:function(a,b,c){var d=this.propertyForAttribute(a);if(d){var e=this.bindProperty(d,b,c);return Platform.enableBindingsReflection&&e&&(e.path=b.path_,this._recordBinding(d,e)),this.reflect[d]&&this.reflectPropertyToAttribute(d),e}return this.mixinSuper(arguments)},bindFinished:function(){this.makeElementReady()},_recordBinding:function(a,b){this.bindings_=this.bindings_||{},this.bindings_[a]=b},asyncUnbindAll:function(){this._unbound||(b.unbind&&console.log("[%s] asyncUnbindAll",this.localName),this._unbindAllJob=this.job(this._unbindAllJob,this.unbindAll,0))},unbindAll:function(){this._unbound||(this.closeObservers(),this.closeNamedObservers(),this._unbound=!0)},cancelUnbindAll:function(){return this._unbound?void(b.unbind&&console.warn("[%s] already unbound, cannot cancel unbindAll",this.localName)):(b.unbind&&console.log("[%s] cancelUnbindAll",this.localName),void(this._unbindAllJob&&(this._unbindAllJob=this._unbindAllJob.stop())))}},d=/\{\{([^{}]*)}}/;a.bindPattern=d,a.api.instance.mdv=c}(Polymer),function(a){function b(a){return a.hasOwnProperty("PolymerBase")}function c(){}var d={PolymerBase:!0,job:function(a,b,c){if("string"!=typeof a)return Polymer.job.call(this,a,b,c);var d="___"+a;this[d]=Polymer.job.call(this,this[d],b,c)},"super":Polymer.super,created:function(){},ready:function(){},createdCallback:function(){this.templateInstance&&this.templateInstance.model&&console.warn("Attributes on "+this.localName+" were data bound prior to Polymer upgrading the element. This may result in incorrect binding types."),this.created(),this.prepareElement(),this.ownerDocument.isStagingDocument||this.makeElementReady()},prepareElement:function(){return this._elementPrepared?void console.warn("Element already prepared",this.localName):(this._elementPrepared=!0,this.shadowRoots={},this.createPropertyObserver(),this.openPropertyObserver(),this.copyInstanceAttributes(),this.takeAttributes(),void this.addHostListeners())},makeElementReady:function(){this._readied||(this._readied=!0,this.createComputedProperties(),this.parseDeclarations(this.__proto__),this.removeAttribute("unresolved"),this.ready())},attachedCallback:function(){this.cancelUnbindAll(),this.attached&&this.attached(),this.enteredView&&this.enteredView(),this.hasBeenAttached||(this.hasBeenAttached=!0,this.domReady&&this.async("domReady"))},detachedCallback:function(){this.preventDispose||this.asyncUnbindAll(),this.detached&&this.detached(),this.leftView&&this.leftView()},enteredViewCallback:function(){this.attachedCallback()},leftViewCallback:function(){this.detachedCallback()},enteredDocumentCallback:function(){this.attachedCallback()},leftDocumentCallback:function(){this.detachedCallback()},parseDeclarations:function(a){a&&a.element&&(this.parseDeclarations(a.__proto__),a.parseDeclaration.call(this,a.element))},parseDeclaration:function(a){var b=this.fetchTemplate(a);if(b){var c=this.shadowFromTemplate(b);this.shadowRoots[a.name]=c}},fetchTemplate:function(a){return a.querySelector("template")},shadowFromTemplate:function(a){if(a){var b=this.createShadowRoot(),c=this.instanceTemplate(a);return b.appendChild(c),this.shadowRootReady(b,a),b}},lightFromTemplate:function(a,b){if(a){this.eventController=this;var c=this.instanceTemplate(a);return b?this.insertBefore(c,b):this.appendChild(c),this.shadowRootReady(this),c}},shadowRootReady:function(a){this.marshalNodeReferences(a)},marshalNodeReferences:function(a){var b=this.$=this.$||{};if(a)for(var c,d=a.querySelectorAll("[id]"),e=0,f=d.length;f>e&&(c=d[e]);e++)b[c.id]=c},attributeChangedCallback:function(a){"class"!==a&&"style"!==a&&this.attributeToProperty(a,this.getAttribute(a)),this.attributeChanged&&this.attributeChanged.apply(this,arguments)},onMutation:function(a,b){var c=new MutationObserver(function(a){b.call(this,c,a),c.disconnect()}.bind(this));c.observe(a,{childList:!0,subtree:!0})}};c.prototype=d,d.constructor=c,a.Base=c,a.isBase=b,a.api.instance.base=d}(Polymer),function(a){function b(a){return a.__proto__}function c(a,b){var c="",d=!1;b&&(c=b.localName,d=b.hasAttribute("is"));var e=Platform.ShadowCSS.makeScopeSelector(c,d);return Platform.ShadowCSS.shimCssText(a,e)}var d=(window.logFlags||{},window.ShadowDOMPolyfill),e="element",f="controller",g={STYLE_SCOPE_ATTRIBUTE:e,installControllerStyles:function(){var a=this.findStyleScope();if(a&&!this.scopeHasNamedStyle(a,this.localName)){for(var c=b(this),d="";c&&c.element;)d+=c.element.cssTextForScope(f),c=b(c);d&&this.installScopeCssText(d,a)}},installScopeStyle:function(a,b,c){var c=c||this.findStyleScope(),b=b||"";if(c&&!this.scopeHasNamedStyle(c,this.localName+b)){var d="";if(a instanceof Array)for(var e,f=0,g=a.length;g>f&&(e=a[f]);f++)d+=e.textContent+"\n\n";else d=a.textContent;this.installScopeCssText(d,c,b)}},installScopeCssText:function(a,b,e){if(b=b||this.findStyleScope(),e=e||"",b){d&&(a=c(a,b.host));var g=this.element.cssTextToScopeStyle(a,f);Polymer.applyStyleToScope(g,b),this.styleCacheForScope(b)[this.localName+e]=!0}},findStyleScope:function(a){for(var b=a||this;b.parentNode;)b=b.parentNode;return b},scopeHasNamedStyle:function(a,b){var c=this.styleCacheForScope(a);return c[b]},styleCacheForScope:function(a){if(d){var b=a.host?a.host.localName:a.localName;return h[b]||(h[b]={})}return a._scopeStyles=a._scopeStyles||{}}},h={};a.api.instance.styles=g}(Polymer),function(a){function b(a,b){if(1===arguments.length&&"string"!=typeof arguments[0]){b=a;var c=document._currentScript;if(a=c&&c.parentNode&&c.parentNode.getAttribute?c.parentNode.getAttribute("name"):"",!a)throw"Element name could not be inferred."}if(f[a])throw"Already registered (Polymer) prototype for element "+a;e(a,b),d(a)}function c(a,b){h[a]=b}function d(a){h[a]&&(h[a].registerWhenReady(),delete h[a])}function e(a,b){return i[a]=b||{}}function f(a){return i[a]}var g=a.extend,h=(a.api,{}),i={};a.getRegisteredPrototype=f,a.waitingForPrototype=c,window.Polymer=b,g(Polymer,a);var j=Platform.deliverDeclarations();if(j)for(var k,l=0,m=j.length;m>l&&(k=j[l]);l++)b.apply(null,k)}(Polymer),function(a){var b={resolveElementPaths:function(a){Platform.urlResolver.resolveDom(a)},addResolvePathApi:function(){var a=this.getAttribute("assetpath")||"",b=new URL(a,this.ownerDocument.baseURI);this.prototype.resolvePath=function(a,c){var d=new URL(a,c||b);return d.href}}};a.api.declaration.path=b}(Polymer),function(a){function b(a,b){var c=new URL(a.getAttribute("href"),b).href;return"@import '"+c+"';"}function c(a,b){if(a){b===document&&(b=document.head),i&&(b=document.head);var c=d(a.textContent),e=a.getAttribute(h);e&&c.setAttribute(h,e);var f=b.firstElementChild;if(b===document.head){var g="style["+h+"]",j=document.head.querySelectorAll(g);j.length&&(f=j[j.length-1].nextElementSibling)}b.insertBefore(c,f)}}function d(a,b){b=b||document,b=b.createElement?b:b.ownerDocument;var c=b.createElement("style");return c.textContent=a,c}function e(a){return a&&a.__resource||""}function f(a,b){return q?q.call(a,b):void 0}var g=(window.logFlags||{},a.api.instance.styles),h=g.STYLE_SCOPE_ATTRIBUTE,i=window.ShadowDOMPolyfill,j="style",k="@import",l="link[rel=stylesheet]",m="global",n="polymer-scope",o={loadStyles:function(a){var b=this.fetchTemplate(),c=b&&this.templateContent();if(c){this.convertSheetsToStyles(c);var d=this.findLoadableStyles(c);if(d.length){var e=b.ownerDocument.baseURI;return Platform.styleResolver.loadStyles(d,e,a)}}a&&a()},convertSheetsToStyles:function(a){for(var c,e,f=a.querySelectorAll(l),g=0,h=f.length;h>g&&(c=f[g]);g++)e=d(b(c,this.ownerDocument.baseURI),this.ownerDocument),this.copySheetAttributes(e,c),c.parentNode.replaceChild(e,c)},copySheetAttributes:function(a,b){for(var c,d=0,e=b.attributes,f=e.length;(c=e[d])&&f>d;d++)"rel"!==c.name&&"href"!==c.name&&a.setAttribute(c.name,c.value)},findLoadableStyles:function(a){var b=[];if(a)for(var c,d=a.querySelectorAll(j),e=0,f=d.length;f>e&&(c=d[e]);e++)c.textContent.match(k)&&b.push(c);return b},installSheets:function(){this.cacheSheets(),this.cacheStyles(),this.installLocalSheets(),this.installGlobalStyles()},cacheSheets:function(){this.sheets=this.findNodes(l),this.sheets.forEach(function(a){a.parentNode&&a.parentNode.removeChild(a)})},cacheStyles:function(){this.styles=this.findNodes(j+"["+n+"]"),this.styles.forEach(function(a){a.parentNode&&a.parentNode.removeChild(a)})},installLocalSheets:function(){var a=this.sheets.filter(function(a){return!a.hasAttribute(n)}),b=this.templateContent();if(b){var c="";if(a.forEach(function(a){c+=e(a)+"\n"}),c){var f=d(c,this.ownerDocument);b.insertBefore(f,b.firstChild)}}},findNodes:function(a,b){var c=this.querySelectorAll(a).array(),d=this.templateContent();if(d){var e=d.querySelectorAll(a).array();c=c.concat(e)}return b?c.filter(b):c},installGlobalStyles:function(){var a=this.styleForScope(m);c(a,document.head)},cssTextForScope:function(a){var b="",c="["+n+"="+a+"]",d=function(a){return f(a,c)},g=this.sheets.filter(d);g.forEach(function(a){b+=e(a)+"\n\n"});var h=this.styles.filter(d);return h.forEach(function(a){b+=a.textContent+"\n\n"}),b},styleForScope:function(a){var b=this.cssTextForScope(a);return this.cssTextToScopeStyle(b,a)},cssTextToScopeStyle:function(a,b){if(a){var c=d(a);return c.setAttribute(h,this.getAttribute("name")+"-"+b),c}}},p=HTMLElement.prototype,q=p.matches||p.matchesSelector||p.webkitMatchesSelector||p.mozMatchesSelector;a.api.declaration.styles=o,a.applyStyleToScope=c}(Polymer),function(a){var b=(window.logFlags||{},a.api.instance.events),c=b.EVENT_PREFIX,d={};["webkitAnimationStart","webkitAnimationEnd","webkitTransitionEnd","DOMFocusOut","DOMFocusIn","DOMMouseScroll"].forEach(function(a){d[a.toLowerCase()]=a});var e={parseHostEvents:function(){var a=this.prototype.eventDelegates;this.addAttributeDelegates(a)},addAttributeDelegates:function(a){for(var b,c=0;b=this.attributes[c];c++)this.hasEventPrefix(b.name)&&(a[this.removeEventPrefix(b.name)]=b.value.replace("{{","").replace("}}","").trim())},hasEventPrefix:function(a){return a&&"o"===a[0]&&"n"===a[1]&&"-"===a[2]},removeEventPrefix:function(a){return a.slice(f)},findController:function(a){for(;a.parentNode;){if(a.eventController)return a.eventController;a=a.parentNode}return a.host},getEventHandler:function(a,b,c){var d=this;return function(e){a&&a.PolymerBase||(a=d.findController(b));var f=[e,e.detail,e.currentTarget];a.dispatchMethod(a,c,f)}},prepareEventBinding:function(a,b){if(this.hasEventPrefix(b)){var c=this.removeEventPrefix(b);c=d[c]||c;var e=this;return function(b,d,f){function g(){return"{{ "+a+" }}"}var h=e.getEventHandler(void 0,d,a);return PolymerGestures.addEventListener(d,c,h),f?void 0:{open:g,discardChanges:g,close:function(){PolymerGestures.removeEventListener(d,c,h)}}}}}},f=c.length;a.api.declaration.events=e}(Polymer),function(a){var b={inferObservers:function(a){var b,c=a.observe;for(var d in a)"Changed"===d.slice(-7)&&(c||(c=a.observe={}),b=d.slice(0,-7),c[b]=c[b]||d)},explodeObservers:function(a){var b=a.observe;if(b){var c={};for(var d in b)for(var e,f=d.split(" "),g=0;e=f[g];g++)c[e]=b[d];a.observe=c}},optimizePropertyMaps:function(a){if(a.observe){var b=a._observeNames=[];for(var c in a.observe)for(var d,e=c.split(" "),f=0;d=e[f];f++)b.push(d)}if(a.publish){var b=a._publishNames=[];for(var c in a.publish)b.push(c)}if(a.computed){var b=a._computedNames=[];for(var c in a.computed)b.push(c)}},publishProperties:function(a,b){var c=a.publish;c&&(this.requireProperties(c,a,b),a._publishLC=this.lowerCaseMap(c))},requireProperties:function(a,b){b.reflect=b.reflect||{};for(var c in a){var d=a[c];d&&void 0!==d.reflect&&(b.reflect[c]=Boolean(d.reflect),d=d.value),void 0!==d&&(b[c]=d)}},lowerCaseMap:function(a){var b={};for(var c in a)b[c.toLowerCase()]=c;return b},createPropertyAccessor:function(a){var b=this.prototype,c=a+"_",d=a+"Observable_";b[c]=b[a],Object.defineProperty(b,a,{get:function(){var a=this[d];return a&&a.deliver(),this[c]},set:function(b){var e=this[d];if(e)return void e.setValue(b);var f=this[c];return this[c]=b,this.emitPropertyChangeRecord(a,b,f),b},configurable:!0})},createPropertyAccessors:function(a){var b=a._publishNames;if(b&&b.length)for(var c,d=0,e=b.length;e>d&&(c=b[d]);d++)this.createPropertyAccessor(c);var b=a._computedNames;if(b&&b.length)for(var c,d=0,e=b.length;e>d&&(c=b[d]);d++)this.createPropertyAccessor(c)}};a.api.declaration.properties=b}(Polymer),function(a){var b="attributes",c=/\s|,/,d={inheritAttributesObjects:function(a){this.inheritObject(a,"publishLC"),this.inheritObject(a,"_instanceAttributes")},publishAttributes:function(a){var d=this.getAttribute(b);if(d)for(var e,f=a.publish||(a.publish={}),g=d.split(c),h=0,i=g.length;i>h;h++)e=g[h].trim(),e&&void 0===f[e]&&(f[e]=void 0)},accumulateInstanceAttributes:function(){for(var a,b=this.prototype._instanceAttributes,c=this.attributes,d=0,e=c.length;e>d&&(a=c[d]);d++)this.isInstanceAttribute(a.name)&&(b[a.name]=a.value)},isInstanceAttribute:function(a){return!this.blackList[a]&&"on-"!==a.slice(0,3)},blackList:{name:1,"extends":1,constructor:1,noscript:1,assetpath:1,"cache-csstext":1}};d.blackList[b]=1,a.api.declaration.attributes=d}(Polymer),function(a){var b=a.api.declaration.events,c=new PolymerExpressions,d=c.prepareBinding;c.prepareBinding=function(a,e,f){return b.prepareEventBinding(a,e,f)||d.call(c,a,e,f)};var e={syntax:c,fetchTemplate:function(){return this.querySelector("template")},templateContent:function(){var a=this.fetchTemplate();return a&&Platform.templateContent(a)},installBindingDelegate:function(a){a&&(a.bindingDelegate=this.syntax)}};a.api.declaration.mdv=e}(Polymer),function(a){function b(a){if(!Object.__proto__){var b=Object.getPrototypeOf(a);a.__proto__=b,d(b)&&(b.__proto__=Object.getPrototypeOf(b))}}var c=a.api,d=a.isBase,e=a.extend,f=window.ShadowDOMPolyfill,g={register:function(a,b){this.buildPrototype(a,b),this.registerPrototype(a,b),this.publishConstructor()},buildPrototype:function(b,c){var d=a.getRegisteredPrototype(b),e=this.generateBasePrototype(c);this.desugarBeforeChaining(d,e),this.prototype=this.chainPrototypes(d,e),this.desugarAfterChaining(b,c)},desugarBeforeChaining:function(a,b){a.element=this,this.publishAttributes(a,b),this.publishProperties(a,b),this.inferObservers(a),this.explodeObservers(a)},chainPrototypes:function(a,c){this.inheritMetaData(a,c);var d=this.chainObject(a,c);return b(d),d},inheritMetaData:function(a,b){this.inheritObject("observe",a,b),this.inheritObject("publish",a,b),this.inheritObject("reflect",a,b),this.inheritObject("_publishLC",a,b),this.inheritObject("_instanceAttributes",a,b),this.inheritObject("eventDelegates",a,b)},desugarAfterChaining:function(a,b){this.optimizePropertyMaps(this.prototype),this.createPropertyAccessors(this.prototype),this.installBindingDelegate(this.fetchTemplate()),this.installSheets(),this.resolveElementPaths(this),this.accumulateInstanceAttributes(),this.parseHostEvents(),this.addResolvePathApi(),f&&Platform.ShadowCSS.shimStyling(this.templateContent(),a,b),this.prototype.registerCallback&&this.prototype.registerCallback(this)},publishConstructor:function(){var a=this.getAttribute("constructor");a&&(window[a]=this.ctor)},generateBasePrototype:function(a){var b=this.findBasePrototype(a);if(!b){var b=HTMLElement.getPrototypeForTag(a);b=this.ensureBaseApi(b),h[a]=b}return b},findBasePrototype:function(a){return h[a]},ensureBaseApi:function(a){if(a.PolymerBase)return a;var b=Object.create(a);return c.publish(c.instance,b),this.mixinMethod(b,a,c.instance.mdv,"bind"),b},mixinMethod:function(a,b,c,d){var e=function(a){return b[d].apply(this,a)};a[d]=function(){return this.mixinSuper=e,c[d].apply(this,arguments)}},inheritObject:function(a,b,c){var d=b[a]||{};b[a]=this.chainObject(d,c[a])},registerPrototype:function(a,b){var c={prototype:this.prototype},d=this.findTypeExtension(b);d&&(c.extends=d),HTMLElement.register(a,this.prototype),this.ctor=document.registerElement(a,c)},findTypeExtension:function(a){if(a&&a.indexOf("-")<0)return a;var b=this.findBasePrototype(a);return b.element?this.findTypeExtension(b.element.extends):void 0}},h={};g.chainObject=Object.__proto__?function(a,b){return a&&b&&a!==b&&(a.__proto__=b),a}:function(a,b){if(a&&b&&a!==b){var c=Object.create(b);a=e(c,a)}return a},c.declaration.prototype=g}(Polymer),function(a){function b(a){return document.contains(a)?i:h}function c(){return h.length?h[0]:i[0]}function d(a){e.waitToReady=!0,CustomElements.ready=!1,HTMLImports.whenImportsReady(function(){e.addReadyCallback(a),e.waitToReady=!1,e.check()})}var e={wait:function(a){a.__queue||(a.__queue={},f.push(a))},enqueue:function(a,c,d){var e=a.__queue&&!a.__queue.check;return e&&(b(a).push(a),a.__queue.check=c,a.__queue.go=d),0!==this.indexOf(a)},indexOf:function(a){var c=b(a).indexOf(a);return c>=0&&document.contains(a)&&(c+=HTMLImports.useNative||HTMLImports.ready?h.length:1e9),c},go:function(a){var b=this.remove(a);b&&(a.__queue.flushable=!0,this.addToFlushQueue(b),this.check())},remove:function(a){var c=this.indexOf(a);if(0===c)return b(a).shift()},check:function(){var a=this.nextElement();return a&&a.__queue.check.call(a),this.canReady()?(this.ready(),!0):void 0},nextElement:function(){return c()},canReady:function(){return!this.waitToReady&&this.isEmpty()},isEmpty:function(){for(var a,b=0,c=f.length;c>b&&(a=f[b]);b++)if(a.__queue&&!a.__queue.flushable)return;return!0},addToFlushQueue:function(a){g.push(a)},flush:function(){if(!this.flushing){this.flushing=!0;for(var a;g.length;)a=g.shift(),a.__queue.go.call(a),a.__queue=null;this.flushing=!1}},ready:function(){this.flush(),CustomElements.ready===!1&&(CustomElements.upgradeDocumentTree(document),CustomElements.ready=!0),Platform.flush(),requestAnimationFrame(this.flushReadyCallbacks)},addReadyCallback:function(a){a&&j.push(a)},flushReadyCallbacks:function(){if(j)for(var a;j.length;)(a=j.shift())()},waitToReady:!0},f=[],g=[],h=[],i=[],j=[];document.addEventListener("WebComponentsReady",function(){CustomElements.ready=!1}),a.elements=f,a.queue=e,a.whenReady=a.whenPolymerReady=d}(Polymer),function(a){function b(a,b){a?(document.head.appendChild(a),d(b)):b&&b()}function c(a,c){if(a&&a.length){for(var d,e,f=document.createDocumentFragment(),g=0,h=a.length;h>g&&(d=a[g]);g++)e=document.createElement("link"),e.rel="import",e.href=d,f.appendChild(e);b(f,c)}else c&&c()}var d=a.whenPolymerReady;a.import=c,a.importElements=b}(Polymer),function(a){function b(a){return Boolean(HTMLElement.getPrototypeForTag(a))}function c(a){return a&&a.indexOf("-")>=0}var d=a.extend,e=a.api,f=a.queue,g=a.whenPolymerReady,h=a.getRegisteredPrototype,i=a.waitingForPrototype,j=d(Object.create(HTMLElement.prototype),{createdCallback:function(){this.getAttribute("name")&&this.init()},init:function(){this.name=this.getAttribute("name"),this.extends=this.getAttribute("extends"),f.wait(this),this.loadResources(),this.registerWhenReady()
+},registerWhenReady:function(){this.registered||this.waitingForPrototype(this.name)||this.waitingForQueue()||this.waitingForResources()||f.go(this)},_register:function(){c(this.extends)&&!b(this.extends)&&console.warn("%s is attempting to extend %s, an unregistered element or one that was not registered with Polymer.",this.name,this.extends),this.register(this.name,this.extends),this.registered=!0},waitingForPrototype:function(a){return h(a)?void 0:(i(a,this),this.handleNoScript(a),!0)},handleNoScript:function(a){this.hasAttribute("noscript")&&!this.noscript&&(this.noscript=!0,Polymer(a))},waitingForResources:function(){return this._needsResources},waitingForQueue:function(){return f.enqueue(this,this.registerWhenReady,this._register)},loadResources:function(){this._needsResources=!0,this.loadStyles(function(){this._needsResources=!1,this.registerWhenReady()}.bind(this))}});e.publish(e.declaration,j),g(function(){document.body.removeAttribute("unresolved"),document.dispatchEvent(new CustomEvent("polymer-ready",{bubbles:!0}))}),document.registerElement("polymer-element",{prototype:j})}(Polymer),function(){var a=document.createElement("polymer-element");a.setAttribute("name","auto-binding"),a.setAttribute("extends","template"),a.init(),Polymer("auto-binding",{createdCallback:function(){this.syntax=this.bindingDelegate=this.makeSyntax(),Polymer.whenPolymerReady(function(){this.model=this,this.setAttribute("bind",""),this.async(function(){this.marshalNodeReferences(this.parentNode),this.fire("template-bound")})}.bind(this))},makeSyntax:function(){var a=Object.create(Polymer.api.declaration.events),b=this;a.findController=function(){return b.model};var c=new PolymerExpressions,d=c.prepareBinding;return c.prepareBinding=function(b,e,f){return a.prepareEventBinding(b,e,f)||d.call(c,b,e,f)},c}})}();
 //# sourceMappingURL=polymer.js.map
\ No newline at end of file
diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/web_components/build.log b/runtime/bin/vmservice/observatory/deployed/web/packages/web_components/build.log
index f1cbe74..5cf5f42 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/packages/web_components/build.log
+++ b/runtime/bin/vmservice/observatory/deployed/web/packages/web_components/build.log
@@ -1,45 +1,36 @@
 BUILD LOG
 ---------
-Build Time: 2014-07-24T18:04:50
+Build Time: 2014-08-28T12:39:13
 
 NODEJS INFORMATION
 ==================
-nodejs: v0.10.21
-chai: 1.9.0
-grunt: 0.4.2
-grunt-audit: 0.0.2
-grunt-concat-sourcemap: 0.4.1
-grunt-contrib-concat: 0.3.0
-grunt-contrib-uglify: 0.3.2
-grunt-contrib-yuidoc: 0.5.1
-grunt-karma: 0.6.2
-karma: 0.10.9
-karma-chrome-launcher: 0.1.2
-karma-coffee-preprocessor: 0.1.3
+nodejs: v0.10.29
+chai: 1.9.1
+grunt: 0.4.5
+grunt-audit: 0.0.3
+grunt-concat-sourcemap: 0.4.3
+grunt-contrib-concat: 0.4.0
+grunt-contrib-uglify: 0.5.1
+grunt-karma: 0.8.3
+karma: 0.12.22
 karma-crbot-reporter: 0.0.4
-karma-firefox-launcher: 0.1.3
-karma-html2js-preprocessor: 0.1.0
-karma-ie-launcher: 0.1.1
-karma-jasmine: 0.1.5
-karma-mocha: 0.1.1
-karma-phantomjs-launcher: 0.1.2
-karma-requirejs: 0.2.1
 karma-safari-launcher: 0.1.1
-karma-script-launcher: 0.1.0
-mocha: 1.17.1
-requirejs: 2.1.11
+mocha: 1.21.4
+karma-ie-launcher: 0.1.5
+karma-mocha: 0.1.9
+karma-firefox-launcher: 0.1.3
 
 REPO REVISIONS
 ==============
-CustomElements: 2df917e8b1fb1928651a71372ae901a400ddf726
-HTMLImports: d240c62fe5b784239f08f77eff40efb4aabf0105
-NodeBind: 9f0089946c312d9ac9ca45d06913fce507a8b185
-ShadowDOM: 86943c29aa8a10da214bc2f42e3067cf0f190279
-TemplateBinding: d9f4543dc06935824bfd43564c442b0897ce1c54
-WeakMap: 43ab1056a0d821af9b6028fc27ddf30db817c05a
-observe-js: e212e7473962067c099a3d1859595c2f8baa36d7
-platform-dev: 02a0f66b65c34585b4b986e6a3a73cc0d743683a
+CustomElements: 65bb151f33891864b28eee305bdf299653ef351c
+HTMLImports: 0d3133d19b35d899ef3e33fbd65ad62e0571d1d5
+NodeBind: f41e84f3deb2cad22eef89ded1072060f7b1b183
+ShadowDOM: 57232dc6d07dd921009679dfbab622b52174df80
+TemplateBinding: f15094216a6b3f64a6d6b0f017b6bd7576b8b44e
+WeakMap: 6662df5cb7146707238b08e7a65cf70056ae516a
+observe-js: ca7b6ba385006f200c7ec3537c7730710e428c60
+platform-dev: fe549bc7f05ec668bc496108958eaee0bd174a06
 
 BUILD HASHES
 ============
-build/platform.js: 9ca6c8137fefb7461693d8ec7bac2af8d5a4fd1a
\ No newline at end of file
+build/platform.js: a15f487ef6424420af4d2e64f0f5d5740306b691
\ No newline at end of file
diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/web_components/platform.js b/runtime/bin/vmservice/observatory/deployed/web/packages/web_components/platform.js
index 1757531..c6ae161 100644
--- a/runtime/bin/vmservice/observatory/deployed/web/packages/web_components/platform.js
+++ b/runtime/bin/vmservice/observatory/deployed/web/packages/web_components/platform.js
@@ -7,11 +7,11 @@
  * Code distributed by Google as part of the polymer project is also
  * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
  */
-// @version: 0.3.4-02a0f66
+// @version: 0.3.5-fe549bc
 
-window.Platform=window.Platform||{},window.logFlags=window.logFlags||{},function(a){var b=a.flags||{};location.search.slice(1).split("&").forEach(function(a){a=a.split("="),a[0]&&(b[a[0]]=a[1]||!0)});var c=document.currentScript||document.querySelector('script[src*="platform.js"]');if(c)for(var d,e=c.attributes,f=0;f<e.length;f++)d=e[f],"src"!==d.name&&(b[d.name]=d.value||!0);b.log&&b.log.split(",").forEach(function(a){window.logFlags[a]=!0}),b.shadow=b.shadow||b.shadowdom||b.polyfill,b.shadow="native"===b.shadow?!1:b.shadow||!HTMLElement.prototype.createShadowRoot,b.shadow&&document.querySelectorAll("script").length>1&&console.warn("platform.js is not the first script on the page. See http://www.polymer-project.org/docs/start/platform.html#setup for details."),b.register&&(window.CustomElements=window.CustomElements||{flags:{}},window.CustomElements.flags.register=b.register),b.imports&&(window.HTMLImports=window.HTMLImports||{flags:{}},window.HTMLImports.flags.imports=b.imports),a.flags=b}(Platform),"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}(),function(global){"use strict";function detectObjectObserve(){function a(a){b=a}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=[],c={},d=[];return Object.observe(c,a),Array.observe(d,a),c.id=1,c.id=2,delete c.id,d.push(1,2),d.length=0,Object.deliverChangeRecords(a),5!==b.length?!1:"add"!=b[0].type||"update"!=b[1].type||"delete"!=b[2].type||"splice"!=b[3].type||"splice"!=b[4].type?!1:(Object.unobserve(c,a),Array.unobserve(d,a),!0)}function detectEval(){if("undefined"!=typeof chrome&&chrome.app&&chrome.app.runtime)return!1;try{var a=new Function("","return true;");return a()}catch(b){return!1}}function isIndex(a){return+a===a>>>0}function toNumber(a){return+a}function isObject(a){return a===Object(a)}function areSameValue(a,b){return a===b?0!==a||1/a===1/b:numberIsNaN(a)&&numberIsNaN(b)?!0:a!==a&&b!==b}function getPathCharType(a){if(void 0===a)return"eof";var b=a.charCodeAt(0);switch(b){case 91:case 93:case 46:case 34:case 39:case 48:return a;case 95:case 36:return"ident";case 32:case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"ws"}return b>=97&&122>=b||b>=65&&90>=b?"ident":b>=49&&57>=b?"number":"else"}function noop(){}function parsePath(a){function b(){if(!(k>=a.length)){var b=a[k+1];return"inSingleQuote"==l&&"'"==b||"inDoubleQuote"==l&&'"'==b?(k++,d=b,m.append(),!0):void 0}}for(var c,d,e,f,g,h,i,j=[],k=-1,l="beforePath",m={push:function(){void 0!==e&&(j.push(e),e=void 0)},append:function(){void 0===e?e=d:e+=d}};l;)if(k++,c=a[k],"\\"!=c||!b(l)){if(f=getPathCharType(c),i=pathStateMachine[l],g=i[f]||i["else"]||"error","error"==g)return;if(l=g[0],h=m[g[1]]||noop,d=void 0===g[2]?c:g[2],h(),"afterPath"===l)return j}}function isIdent(a){return identRegExp.test(a)}function Path(a,b){if(b!==constructorIsPrivate)throw Error("Use Path.get to retrieve path objects");for(var c=0;c<a.length;c++)this.push(String(a[c]));hasEval&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn())}function getPath(a){if(a instanceof Path)return a;if((null==a||0==a.length)&&(a=""),"string"!=typeof a){if(isIndex(a.length))return new Path(a,constructorIsPrivate);a=String(a)}var b=pathCache[a];if(b)return b;var c=parsePath(a);if(!c)return invalidPath;var b=new Path(c,constructorIsPrivate);return pathCache[a]=b,b}function formatAccessor(a){return isIndex(a)?"["+a+"]":'["'+a.replace(/"/g,'\\"')+'"]'}function dirtyCheck(a){for(var b=0;MAX_DIRTY_CHECK_CYCLES>b&&a.check_();)b++;return global.testingExposeCycleCount&&(global.dirtyCheckCycleCount=b),b>0}function objectIsEmpty(a){for(var b in a)return!1;return!0}function diffIsEmpty(a){return objectIsEmpty(a.added)&&objectIsEmpty(a.removed)&&objectIsEmpty(a.changed)}function diffObjectFromOldObject(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 runEOMTasks(){if(!eomTasks.length)return!1;for(var a=0;a<eomTasks.length;a++)eomTasks[a]();return eomTasks.length=0,!0}function newObservedObject(){function a(a){b&&b.state_===OPENED&&!d&&b.check_(a)}var b,c,d=!1,e=!0;return{open:function(c){if(b)throw Error("ObservedObject in use");e||Object.deliverChangeRecords(a),b=c,e=!1},observe:function(b,d){c=b,d?Array.observe(c,a):Object.observe(c,a)},deliver:function(b){d=b,Object.deliverChangeRecords(a),d=!1},close:function(){b=void 0,Object.unobserve(c,a),observedObjectCache.push(this)}}}function getObservedObject(a,b,c){var d=observedObjectCache.pop()||newObservedObject();return d.open(a),d.observe(b,c),d}function newObservedSet(){function a(b,f){b&&(b===d&&(e[f]=!0),h.indexOf(b)<0&&(h.push(b),Object.observe(b,c)),a(Object.getPrototypeOf(b),f))}function b(a){for(var b=0;b<a.length;b++){var c=a[b];if(c.object!==d||e[c.name]||"setPrototype"===c.type)return!1}return!0}function c(c){if(!b(c)){for(var d,e=0;e<g.length;e++)d=g[e],d.state_==OPENED&&d.iterateObjects_(a);for(var e=0;e<g.length;e++)d=g[e],d.state_==OPENED&&d.check_()}}var d,e,f=0,g=[],h=[],i={object:void 0,objects:h,open:function(b,c){d||(d=c,e={}),g.push(b),f++,b.iterateObjects_(a)},close:function(){if(f--,!(f>0)){for(var a=0;a<h.length;a++)Object.unobserve(h[a],c),Observer.unobservedCount++;g.length=0,h.length=0,d=void 0,e=void 0,observedSetCache.push(this)}}};return i}function getObservedSet(a,b){return lastObservedSet&&lastObservedSet.object===b||(lastObservedSet=observedSetCache.pop()||newObservedSet(),lastObservedSet.object=b),lastObservedSet.open(a,b),lastObservedSet}function Observer(){this.state_=UNOPENED,this.callback_=void 0,this.target_=void 0,this.directObserver_=void 0,this.value_=void 0,this.id_=nextObserverId++}function addToAll(a){Observer._allObserversCount++,collectObservers&&allObservers.push(a)}function removeFromAll(){Observer._allObserversCount--}function ObjectObserver(a){Observer.call(this),this.value_=a,this.oldObject_=void 0}function ArrayObserver(a){if(!Array.isArray(a))throw Error("Provided object is not an Array");ObjectObserver.call(this,a)}function PathObserver(a,b){Observer.call(this),this.object_=a,this.path_=getPath(b),this.directObserver_=void 0}function CompoundObserver(a){Observer.call(this),this.reportChangesOnOpen_=a,this.value_=[],this.directObserver_=void 0,this.observed_=[]}function identFn(a){return a}function ObserverTransform(a,b,c,d){this.callback_=void 0,this.target_=void 0,this.value_=void 0,this.observable_=a,this.getValueFn_=b||identFn,this.setValueFn_=c||identFn,this.dontPassThroughSet_=d}function diffObjectFromChangeRecords(a,b,c){for(var d={},e={},f=0;f<b.length;f++){var g=b[f];expectedRecordTypes[g.type]?(g.name in c||(c[g.name]=g.oldValue),"update"!=g.type&&("add"!=g.type?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 newSplice(a,b,c){return{index:a,removed:b,addedCount:c}}function ArraySplice(){}function calcSplices(a,b,c,d,e,f){return arraySplice.calcSplices(a,b,c,d,e,f)}function intersect(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 mergeSplice(a,b,c,d){for(var e=newSplice(b,c,d),f=!1,g=0,h=0;h<a.length;h++){var i=a[h];if(i.index+=g,!f){var j=intersect(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 createInitialSplices(a,b){for(var c=[],d=0;d<b.length;d++){var e=b[d];switch(e.type){case"splice":mergeSplice(c,e.index,e.removed.slice(),e.addedCount);break;case"add":case"update":case"delete":if(!isIndex(e.name))continue;var f=toNumber(e.name);if(0>f)continue;mergeSplice(c,f,[e.oldValue],1);break;default:console.error("Unexpected record type: "+JSON.stringify(e))}}return c}function projectArraySplices(a,b){var c=[];return createInitialSplices(a,b).forEach(function(b){return 1==b.addedCount&&1==b.removed.length?void(b.removed[0]!==a[b.index]&&c.push(b)):void(c=c.concat(calcSplices(a,b.index,b.index+b.addedCount,b.removed,0,b.removed.length)))}),c}var hasObserve=detectObjectObserve(),hasEval=detectEval(),numberIsNaN=global.Number.isNaN||function(a){return"number"==typeof a&&global.isNaN(a)},createObject="__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},identStart="[$_a-zA-Z]",identPart="[$_a-zA-Z0-9]",identRegExp=new RegExp("^"+identStart+"+"+identPart+"*$"),pathStateMachine={beforePath:{ws:["beforePath"],ident:["inIdent","append"],"[":["beforeElement"],eof:["afterPath"]},inPath:{ws:["inPath"],".":["beforeIdent"],"[":["beforeElement"],eof:["afterPath"]},beforeIdent:{ws:["beforeIdent"],ident:["inIdent","append"]},inIdent:{ident:["inIdent","append"],0:["inIdent","append"],number:["inIdent","append"],ws:["inPath","push"],".":["beforeIdent","push"],"[":["beforeElement","push"],eof:["afterPath","push"]},beforeElement:{ws:["beforeElement"],0:["afterZero","append"],number:["inIndex","append"],"'":["inSingleQuote","append",""],'"':["inDoubleQuote","append",""]},afterZero:{ws:["afterElement","push"],"]":["inPath","push"]},inIndex:{0:["inIndex","append"],number:["inIndex","append"],ws:["afterElement"],"]":["inPath","push"]},inSingleQuote:{"'":["afterElement"],eof:["error"],"else":["inSingleQuote","append"]},inDoubleQuote:{'"':["afterElement"],eof:["error"],"else":["inDoubleQuote","append"]},afterElement:{ws:["afterElement"],"]":["inPath","push"]}},constructorIsPrivate={},pathCache={};Path.get=getPath,Path.prototype=createObject({__proto__:[],valid:!0,toString:function(){for(var a="",b=0;b<this.length;b++){var c=this[b];a+=isIdent(c)?b?"."+c:c:formatAccessor(c)}return a},getValueFrom:function(a){for(var b=0;b<this.length;b++){if(null==a)return;a=a[this[b]]}return a},iterateObjects:function(a,b){for(var c=0;c<this.length;c++){if(c&&(a=a[this[c-1]]),!isObject(a))return;b(a,this[0])}},compiledGetValueFromFn:function(){var a="",b="obj";a+="if (obj != null";for(var c,d=0;d<this.length-1;d++)c=this[d],b+=isIdent(c)?"."+c:formatAccessor(c),a+=" &&\n     "+b+" != null";a+=")\n";var c=this[d];return b+=isIdent(c)?"."+c:formatAccessor(c),a+="  return "+b+";\nelse\n  return undefined;",new Function("obj",a)},setValueFrom:function(a,b){if(!this.length)return!1;for(var c=0;c<this.length-1;c++){if(!isObject(a))return!1;a=a[this[c]]}return isObject(a)?(a[this[c]]=b,!0):!1}});var invalidPath=new Path("",constructorIsPrivate);invalidPath.valid=!1,invalidPath.getValueFrom=invalidPath.setValueFrom=function(){};var MAX_DIRTY_CHECK_CYCLES=1e3,eomTasks=[],runEOM=hasObserve?function(){var a={pingPong:!0},b=!1;return Object.observe(a,function(){runEOMTasks(),b=!1}),function(c){eomTasks.push(c),b||(b=!0,a.pingPong=!a.pingPong)}}():function(){return function(a){eomTasks.push(a)}}(),observedObjectCache=[],observedSetCache=[],lastObservedSet,UNOPENED=0,OPENED=1,CLOSED=2,RESETTING=3,nextObserverId=1;Observer.prototype={open:function(a,b){if(this.state_!=UNOPENED)throw Error("Observer has already been opened.");return addToAll(this),this.callback_=a,this.target_=b,this.connect_(),this.state_=OPENED,this.value_},close:function(){this.state_==OPENED&&(removeFromAll(this),this.disconnect_(),this.value_=void 0,this.callback_=void 0,this.target_=void 0,this.state_=CLOSED)},deliver:function(){this.state_==OPENED&&dirtyCheck(this)},report_:function(a){try{this.callback_.apply(this.target_,a)}catch(b){Observer._errorThrownDuringCallback=!0,console.error("Exception caught during observer callback: "+(b.stack||b))}},discardChanges:function(){return this.check_(void 0,!0),this.value_}};var collectObservers=!hasObserve,allObservers;Observer._allObserversCount=0,collectObservers&&(allObservers=[]);var runningMicrotaskCheckpoint=!1,hasDebugForceFullDelivery=hasObserve&&hasEval&&function(){try{return eval("%RunMicrotasks()"),!0}catch(ex){return!1}}();global.Platform=global.Platform||{},global.Platform.performMicrotaskCheckpoint=function(){if(!runningMicrotaskCheckpoint){if(hasDebugForceFullDelivery)return void eval("%RunMicrotasks()");if(collectObservers){runningMicrotaskCheckpoint=!0;var cycles=0,anyChanged,toCheck;do{cycles++,toCheck=allObservers,allObservers=[],anyChanged=!1;for(var i=0;i<toCheck.length;i++){var observer=toCheck[i];observer.state_==OPENED&&(observer.check_()&&(anyChanged=!0),allObservers.push(observer))}runEOMTasks()&&(anyChanged=!0)}while(MAX_DIRTY_CHECK_CYCLES>cycles&&anyChanged);global.testingExposeCycleCount&&(global.dirtyCheckCycleCount=cycles),runningMicrotaskCheckpoint=!1}}},collectObservers&&(global.Platform.clearObservers=function(){allObservers=[]}),ObjectObserver.prototype=createObject({__proto__:Observer.prototype,arrayObserve:!1,connect_:function(){hasObserve?this.directObserver_=getObservedObject(this,this.value_,this.arrayObserve):this.oldObject_=this.copyObject(this.value_)},copyObject:function(a){var b=Array.isArray(a)?[]:{};for(var c in a)b[c]=a[c];return Array.isArray(a)&&(b.length=a.length),b},check_:function(a){var b,c;if(hasObserve){if(!a)return!1;c={},b=diffObjectFromChangeRecords(this.value_,a,c)}else c=this.oldObject_,b=diffObjectFromOldObject(this.value_,this.oldObject_);return diffIsEmpty(b)?!1:(hasObserve||(this.oldObject_=this.copyObject(this.value_)),this.report_([b.added||{},b.removed||{},b.changed||{},function(a){return c[a]}]),!0)},disconnect_:function(){hasObserve?(this.directObserver_.close(),this.directObserver_=void 0):this.oldObject_=void 0},deliver:function(){this.state_==OPENED&&(hasObserve?this.directObserver_.deliver(!1):dirtyCheck(this))},discardChanges:function(){return this.directObserver_?this.directObserver_.deliver(!0):this.oldObject_=this.copyObject(this.value_),this.value_}}),ArrayObserver.prototype=createObject({__proto__:ObjectObserver.prototype,arrayObserve:!0,copyObject:function(a){return a.slice()},check_:function(a){var b;if(hasObserve){if(!a)return!1;b=projectArraySplices(this.value_,a)}else b=calcSplices(this.value_,0,this.value_.length,this.oldObject_,0,this.oldObject_.length);return b&&b.length?(hasObserve||(this.oldObject_=this.copyObject(this.value_)),this.report_([b]),!0):!1}}),ArrayObserver.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)})},PathObserver.prototype=createObject({__proto__:Observer.prototype,get path(){return this.path_},connect_:function(){hasObserve&&(this.directObserver_=getObservedSet(this,this.object_)),this.check_(void 0,!0)},disconnect_:function(){this.value_=void 0,this.directObserver_&&(this.directObserver_.close(this),this.directObserver_=void 0)},iterateObjects_:function(a){this.path_.iterateObjects(this.object_,a)},check_:function(a,b){var c=this.value_;return this.value_=this.path_.getValueFrom(this.object_),b||areSameValue(this.value_,c)?!1:(this.report_([this.value_,c,this]),!0)},setValue:function(a){this.path_&&this.path_.setValueFrom(this.object_,a)}});var observerSentinel={};CompoundObserver.prototype=createObject({__proto__:Observer.prototype,connect_:function(){if(hasObserve){for(var a,b=!1,c=0;c<this.observed_.length;c+=2)if(a=this.observed_[c],a!==observerSentinel){b=!0;break}b&&(this.directObserver_=getObservedSet(this,a))}this.check_(void 0,!this.reportChangesOnOpen_)},disconnect_:function(){for(var a=0;a<this.observed_.length;a+=2)this.observed_[a]===observerSentinel&&this.observed_[a+1].close();this.observed_.length=0,this.value_.length=0,this.directObserver_&&(this.directObserver_.close(this),this.directObserver_=void 0)},addPath:function(a,b){if(this.state_!=UNOPENED&&this.state_!=RESETTING)throw Error("Cannot add paths once started.");var b=getPath(b);if(this.observed_.push(a,b),this.reportChangesOnOpen_){var c=this.observed_.length/2-1;this.value_[c]=b.getValueFrom(a)}},addObserver:function(a){if(this.state_!=UNOPENED&&this.state_!=RESETTING)throw Error("Cannot add observers once started.");if(this.observed_.push(observerSentinel,a),this.reportChangesOnOpen_){var b=this.observed_.length/2-1;this.value_[b]=a.open(this.deliver,this)}},startReset:function(){if(this.state_!=OPENED)throw Error("Can only reset while open");this.state_=RESETTING,this.disconnect_()},finishReset:function(){if(this.state_!=RESETTING)throw Error("Can only finishReset after startReset");return this.state_=OPENED,this.connect_(),this.value_},iterateObjects_:function(a){for(var b,c=0;c<this.observed_.length;c+=2)b=this.observed_[c],b!==observerSentinel&&this.observed_[c+1].iterateObjects(b,a)},check_:function(a,b){for(var c,d=0;d<this.observed_.length;d+=2){var e,f=this.observed_[d],g=this.observed_[d+1];if(f===observerSentinel){var h=g;e=this.state_===UNOPENED?h.open(this.deliver,this):h.discardChanges()}else e=g.getValueFrom(f);b?this.value_[d/2]=e:areSameValue(e,this.value_[d/2])||(c=c||[],c[d/2]=this.value_[d/2],this.value_[d/2]=e)}return c?(this.report_([this.value_,c,this.observed_]),!0):!1}}),ObserverTransform.prototype={open:function(a,b){return this.callback_=a,this.target_=b,this.value_=this.getValueFn_(this.observable_.open(this.observedCallback_,this)),this.value_},observedCallback_:function(a){if(a=this.getValueFn_(a),!areSameValue(a,this.value_)){var b=this.value_;this.value_=a,this.callback_.call(this.target_,this.value_,b)}},discardChanges:function(){return this.value_=this.getValueFn_(this.observable_.discardChanges()),this.value_},deliver:function(){return this.observable_.deliver()},setValue:function(a){return a=this.setValueFn_(a),!this.dontPassThroughSet_&&this.observable_.setValue?this.observable_.setValue(a):void 0},close:function(){this.observable_&&this.observable_.close(),this.callback_=void 0,this.target_=void 0,this.observable_=void 0,this.value_=void 0,this.getValueFn_=void 0,this.setValueFn_=void 0}};var expectedRecordTypes={add:!0,update:!0,"delete":!0},EDIT_LEAVE=0,EDIT_UPDATE=1,EDIT_ADD=2,EDIT_DELETE=3;ArraySplice.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(EDIT_LEAVE):(e.push(EDIT_UPDATE),d=g),b--,c--):f==h?(e.push(EDIT_DELETE),b--,d=h):(e.push(EDIT_ADD),c--,d=i)}else e.push(EDIT_DELETE),b--;else e.push(EDIT_ADD),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,c-b==0&&f-e==0)return[];if(b==c){for(var j=newSplice(b,[],0);f>e;)j.removed.push(d[e++]);return[j]}if(e==f)return[newSplice(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 EDIT_LEAVE:j&&(l.push(j),j=void 0),m++,n++;break;case EDIT_UPDATE:j||(j=newSplice(m,[],0)),j.addedCount++,m++,j.removed.push(d[n]),n++;break;case EDIT_ADD:j||(j=newSplice(m,[],0)),j.addedCount++,m++;break;case EDIT_DELETE:j||(j=newSplice(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 arraySplice=new ArraySplice;global.Observer=Observer,global.Observer.runEOM_=runEOM,global.Observer.observerSentinel_=observerSentinel,global.Observer.hasObjectObserve=hasObserve,global.ArrayObserver=ArrayObserver,global.ArrayObserver.calculateSplices=function(a,b){return arraySplice.calculateSplices(a,b)},global.ArraySplice=ArraySplice,global.ObjectObserver=ObjectObserver,global.PathObserver=PathObserver,global.CompoundObserver=CompoundObserver,global.Path=Path,global.ObserverTransform=ObserverTransform}("undefined"!=typeof global&&global&&"undefined"!=typeof module&&module?global:this||window),Platform.flags.shadow?(window.ShadowDOMPolyfill={},function(a){"use strict";function b(){if("undefined"!=typeof chrome&&chrome.app&&chrome.app.runtime)return!1;try{var a=new Function("return true;");return a()}catch(b){return!1}}function c(a){if(!a)throw new Error("Assertion failed")}function d(a,b){for(var c=L(b),d=0;d<c.length;d++){var e=c[d];K(a,e,M(b,e))}return a}function e(a,b){for(var c=L(b),d=0;d<c.length;d++){var e=c[d];switch(e){case"arguments":case"caller":case"length":case"name":case"prototype":case"toString":continue}K(a,e,M(b,e))}return a}function f(a,b){for(var c=0;c<b.length;c++)if(b[c]in a)return b[c]}function g(a,b,c){N.value=c,K(a,b,N)}function h(a){var b=a.__proto__||Object.getPrototypeOf(a),c=G.get(b);if(c)return c;var d=h(b),e=v(d);return s(b,e,a),e}function i(a,b){q(a,b,!0)}function j(a,b){q(b,a,!1)}function k(a){return/^on[a-z]+$/.test(a)}function l(a){return/^\w[a-zA-Z_0-9]*$/.test(a)}function m(a){return J&&l(a)?new Function("return this.impl."+a):function(){return this.impl[a]}}function n(a){return J&&l(a)?new Function("v","this.impl."+a+" = v"):function(b){this.impl[a]=b}}function o(a){return J&&l(a)?new Function("return this.impl."+a+".apply(this.impl, arguments)"):function(){return this.impl[a].apply(this.impl,arguments)}}function p(a,b){try{return Object.getOwnPropertyDescriptor(a,b)}catch(c){return P}}function q(b,c,d){for(var e=L(b),f=0;f<e.length;f++){var g=e[f];if("polymerBlackList_"!==g&&!(g in c||b.polymerBlackList_&&b.polymerBlackList_[g])){O&&b.__lookupGetter__(g);var h,i,j=p(b,g);if(d&&"function"==typeof j.value)c[g]=o(g);else{var l=k(g);h=l?a.getEventHandlerGetter(g):m(g),(j.writable||j.set)&&(i=l?a.getEventHandlerSetter(g):n(g)),K(c,g,{get:h,set:i,configurable:j.configurable,enumerable:j.enumerable})}}}}function r(a,b,c){var d=a.prototype;s(d,b,c),e(b,a)}function s(a,b,d){var e=b.prototype;c(void 0===G.get(a)),G.set(a,b),H.set(e,a),i(a,e),d&&j(e,d),g(e,"constructor",b),b.prototype=e}function t(a,b){return G.get(b.prototype)===a}function u(a){var b=Object.getPrototypeOf(a),c=h(b),d=v(c);return s(b,d,a),d}function v(a){function b(b){a.call(this,b)}var c=Object.create(a.prototype);return c.constructor=b,b.prototype=c,b}function w(a){return a instanceof I.EventTarget||a instanceof I.Event||a instanceof I.Range||a instanceof I.DOMImplementation||a instanceof I.CanvasRenderingContext2D||I.WebGLRenderingContext&&a instanceof I.WebGLRenderingContext}function x(a){return R&&a instanceof R||a instanceof T||a instanceof S||a instanceof U||a instanceof V||a instanceof Q||a instanceof W||X&&a instanceof X||Y&&a instanceof Y}function y(a){return null===a?null:(c(x(a)),a.polymerWrapper_||(a.polymerWrapper_=new(h(a))(a)))}function z(a){return null===a?null:(c(w(a)),a.impl)}function A(a){return a&&w(a)?z(a):a}function B(a){return a&&!w(a)?y(a):a}function C(a,b){null!==b&&(c(x(a)),c(void 0===b||w(b)),a.polymerWrapper_=b)}function D(a,b,c){Z.get=c,K(a.prototype,b,Z)}function E(a,b){D(a,b,function(){return y(this.impl[b])})}function F(a,b){a.forEach(function(a){b.forEach(function(b){a.prototype[b]=function(){var a=B(this);return a[b].apply(a,arguments)}})})}var G=new WeakMap,H=new WeakMap,I=Object.create(null),J=b(),K=Object.defineProperty,L=Object.getOwnPropertyNames,M=Object.getOwnPropertyDescriptor,N={value:void 0,configurable:!0,enumerable:!1,writable:!0};L(window);var O=/Firefox/.test(navigator.userAgent),P={get:function(){},set:function(){},configurable:!0,enumerable:!0},Q=window.DOMImplementation,R=window.EventTarget,S=window.Event,T=window.Node,U=window.Window,V=window.Range,W=window.CanvasRenderingContext2D,X=window.WebGLRenderingContext,Y=window.SVGElementInstance,Z={get:void 0,configurable:!0,enumerable:!0};a.assert=c,a.constructorTable=G,a.defineGetter=D,a.defineWrapGetter=E,a.forwardMethodsToWrapper=F,a.isWrapper=w,a.isWrapperFor=t,a.mixin=d,a.nativePrototypeTable=H,a.oneOf=f,a.registerObject=u,a.registerWrapper=r,a.rewrap=C,a.unwrap=z,a.unwrapIfNeeded=A,a.wrap=y,a.wrapIfNeeded=B,a.wrappers=I}(window.ShadowDOMPolyfill),function(a){"use strict";function b(){g=!1;var a=f.slice(0);f=[];for(var b=0;b<a.length;b++)a[b]()}function c(a){f.push(a),g||(g=!0,d(b,0))}var d,e=window.MutationObserver,f=[],g=!1;if(e){var h=1,i=new e(b),j=document.createTextNode(h);i.observe(j,{characterData:!0}),d=function(){h=(h+1)%2,j.data=h}}else d=window.setImmediate||window.setTimeout;a.setEndOfMicrotask=c}(window.ShadowDOMPolyfill),function(a){"use strict";function b(){p||(k(c),p=!0)}function c(){p=!1;do for(var a=o.slice(),b=!1,c=0;c<a.length;c++){var d=a[c],e=d.takeRecords();f(d),e.length&&(d.callback_(e,d),b=!0)}while(b)}function d(a,b){this.type=a,this.target=b,this.addedNodes=new m.NodeList,this.removedNodes=new m.NodeList,this.previousSibling=null,this.nextSibling=null,this.attributeName=null,this.attributeNamespace=null,this.oldValue=null}function e(a,b){for(;a;a=a.parentNode){var c=n.get(a);if(c)for(var d=0;d<c.length;d++){var e=c[d];e.options.subtree&&e.addTransientObserver(b)}}}function f(a){for(var b=0;b<a.nodes_.length;b++){var c=a.nodes_[b],d=n.get(c);if(!d)return;for(var e=0;e<d.length;e++){var f=d[e];f.observer===a&&f.removeTransientObservers()}}}function g(a,c,e){for(var f=Object.create(null),g=Object.create(null),h=a;h;h=h.parentNode){var i=n.get(h);if(i)for(var j=0;j<i.length;j++){var k=i[j],l=k.options;if((h===a||l.subtree)&&!("attributes"===c&&!l.attributes||"attributes"===c&&l.attributeFilter&&(null!==e.namespace||-1===l.attributeFilter.indexOf(e.name))||"characterData"===c&&!l.characterData||"childList"===c&&!l.childList)){var m=k.observer;f[m.uid_]=m,("attributes"===c&&l.attributeOldValue||"characterData"===c&&l.characterDataOldValue)&&(g[m.uid_]=e.oldValue)}}}var o=!1;for(var p in f){var m=f[p],q=new d(c,a);"name"in e&&"namespace"in e&&(q.attributeName=e.name,q.attributeNamespace=e.namespace),e.addedNodes&&(q.addedNodes=e.addedNodes),e.removedNodes&&(q.removedNodes=e.removedNodes),e.previousSibling&&(q.previousSibling=e.previousSibling),e.nextSibling&&(q.nextSibling=e.nextSibling),void 0!==g[p]&&(q.oldValue=g[p]),m.records_.push(q),o=!0}o&&b()}function h(a){if(this.childList=!!a.childList,this.subtree=!!a.subtree,this.attributes="attributes"in a||!("attributeOldValue"in a||"attributeFilter"in a)?!!a.attributes:!0,this.characterData="characterDataOldValue"in a&&!("characterData"in a)?!0:!!a.characterData,!this.attributes&&(a.attributeOldValue||"attributeFilter"in a)||!this.characterData&&a.characterDataOldValue)throw new TypeError;if(this.characterData=!!a.characterData,this.attributeOldValue=!!a.attributeOldValue,this.characterDataOldValue=!!a.characterDataOldValue,"attributeFilter"in a){if(null==a.attributeFilter||"object"!=typeof a.attributeFilter)throw new TypeError;this.attributeFilter=q.call(a.attributeFilter)}else this.attributeFilter=null}function i(a){this.callback_=a,this.nodes_=[],this.records_=[],this.uid_=++r,o.push(this)}function j(a,b,c){this.observer=a,this.target=b,this.options=c,this.transientObservedNodes=[]}var k=a.setEndOfMicrotask,l=a.wrapIfNeeded,m=a.wrappers,n=new WeakMap,o=[],p=!1,q=Array.prototype.slice,r=0;i.prototype={observe:function(a,b){a=l(a);var c,d=new h(b),e=n.get(a);e||n.set(a,e=[]);for(var f=0;f<e.length;f++)e[f].observer===this&&(c=e[f],c.removeTransientObservers(),c.options=d);c||(c=new j(this,a,d),e.push(c),this.nodes_.push(a))},disconnect:function(){this.nodes_.forEach(function(a){for(var b=n.get(a),c=0;c<b.length;c++){var d=b[c];if(d.observer===this){b.splice(c,1);break}}},this),this.records_=[]},takeRecords:function(){var a=this.records_;return this.records_=[],a}},j.prototype={addTransientObserver:function(a){if(a!==this.target){this.transientObservedNodes.push(a);var b=n.get(a);b||n.set(a,b=[]),b.push(this)}},removeTransientObservers:function(){var a=this.transientObservedNodes;this.transientObservedNodes=[];for(var b=0;b<a.length;b++)for(var c=a[b],d=n.get(c),e=0;e<d.length;e++)if(d[e]===this){d.splice(e,1);break}}},a.enqueueMutation=g,a.registerTransientObservers=e,a.wrappers.MutationObserver=i,a.wrappers.MutationRecord=d}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){this.root=a,this.parent=b}function c(a,b){if(a.treeScope_!==b){a.treeScope_=b;for(var d=a.shadowRoot;d;d=d.olderShadowRoot)d.treeScope_.parent=b;for(var e=a.firstChild;e;e=e.nextSibling)c(e,b)}}function d(c){if(c instanceof a.wrappers.Window,c.treeScope_)return c.treeScope_;var e,f=c.parentNode;return e=f?d(f):new b(c,null),c.treeScope_=e}b.prototype={get renderer(){return this.root instanceof a.wrappers.ShadowRoot?a.getRendererForHost(this.root.host):null},contains:function(a){for(;a;a=a.parent)if(a===this)return!0;return!1}},a.TreeScope=b,a.getTreeScope=d,a.setTreeScope=c}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a instanceof Q.ShadowRoot}function c(a){return L(a).root}function d(a,d){var h=[],i=a;for(h.push(i);i;){var j=g(i);if(j&&j.length>0){for(var k=0;k<j.length;k++){var m=j[k];if(f(m)){var n=c(m),o=n.olderShadowRoot;o&&h.push(o)}h.push(m)}i=j[j.length-1]}else if(b(i)){if(l(a,i)&&e(d))break;i=i.host,h.push(i)}else i=i.parentNode,i&&h.push(i)}return h}function e(a){if(!a)return!1;switch(a.type){case"abort":case"error":case"select":case"change":case"load":case"reset":case"resize":case"scroll":case"selectstart":return!0}return!1}function f(a){return a instanceof HTMLShadowElement}function g(b){return a.getDestinationInsertionPoints(b)}function h(a,b){if(0===a.length)return b;b instanceof Q.Window&&(b=b.document);for(var c=L(b),d=a[0],e=L(d),f=j(c,e),g=0;g<a.length;g++){var h=a[g];if(L(h)===f)return h}return a[a.length-1]}function i(a){for(var b=[];a;a=a.parent)b.push(a);return b}function j(a,b){for(var c=i(a),d=i(b),e=null;c.length>0&&d.length>0;){var f=c.pop(),g=d.pop();if(f!==g)break;e=f}return e}function k(a,b,c){b instanceof Q.Window&&(b=b.document);var e,f=L(b),g=L(c),h=d(c,a),e=j(f,g);e||(e=g.root);for(var i=e;i;i=i.parent)for(var k=0;k<h.length;k++){var l=h[k];if(L(l)===i)return l}return null}function l(a,b){return L(a)===L(b)}function m(a){if(!S.get(a)&&(S.set(a,!0),n(P(a),P(a.target)),J)){var b=J;throw J=null,b}}function n(b,c){if(T.get(b))throw new Error("InvalidStateError");T.set(b,!0),a.renderAllPending();var e,f,g,h=b.type;if("load"===h&&!b.bubbles){var i=c;i instanceof Q.Document&&(g=i.defaultView)&&(f=i,e=[])}if(!e)if(c instanceof Q.Window)g=c,e=[];else if(e=d(c,b),"load"!==b.type){var i=e[e.length-1];i instanceof Q.Document&&(g=i.defaultView)}return _.set(b,e),o(b,e,g,f)&&p(b,e,g,f)&&q(b,e,g,f),X.set(b,ab),V.delete(b,null),T.delete(b),b.defaultPrevented
-}function o(a,b,c,d){var e=bb;if(c&&!r(c,a,e,b,d))return!1;for(var f=b.length-1;f>0;f--)if(!r(b[f],a,e,b,d))return!1;return!0}function p(a,b,c,d){var e=cb,f=b[0]||c;return r(f,a,e,b,d)}function q(a,b,c,d){for(var e=db,f=1;f<b.length;f++)if(!r(b[f],a,e,b,d))return;c&&b.length>0&&r(c,a,e,b,d)}function r(a,b,c,d,e){var f=R.get(a);if(!f)return!0;var g=e||h(d,a);if(g===a){if(c===bb)return!0;c===db&&(c=cb)}else if(c===db&&!b.bubbles)return!0;if("relatedTarget"in b){var i=O(b),j=i.relatedTarget;if(j){if(j instanceof Object&&j.addEventListener){var l=P(j),m=k(b,a,l);if(m===g)return!0}else m=null;W.set(b,m)}}X.set(b,c);var n=b.type,o=!1;U.set(b,g),V.set(b,a),f.depth++;for(var p=0,q=f.length;q>p;p++){var r=f[p];if(r.removed)o=!0;else if(!(r.type!==n||!r.capture&&c===bb||r.capture&&c===db))try{if("function"==typeof r.handler?r.handler.call(a,b):r.handler.handleEvent(b),Z.get(b))return!1}catch(s){J||(J=s)}}if(f.depth--,o&&0===f.depth){var t=f.slice();f.length=0;for(var p=0;p<t.length;p++)t[p].removed||f.push(t[p])}return!Y.get(b)}function s(a,b,c){this.type=a,this.handler=b,this.capture=Boolean(c)}function t(a,b){if(!(a instanceof eb))return P(x(eb,"Event",a,b));var c=a;return pb||"beforeunload"!==c.type?void(this.impl=c):new y(c)}function u(a){return a&&a.relatedTarget?Object.create(a,{relatedTarget:{value:O(a.relatedTarget)}}):a}function v(a,b,c){var d=window[a],e=function(b,c){return b instanceof d?void(this.impl=b):P(x(d,a,b,c))};if(e.prototype=Object.create(b.prototype),c&&M(e.prototype,c),d)try{N(d,e,new d("temp"))}catch(f){N(d,e,document.createEvent(a))}return e}function w(a,b){return function(){arguments[b]=O(arguments[b]);var c=O(this);c[a].apply(c,arguments)}}function x(a,b,c,d){if(nb)return new a(c,u(d));var e=O(document.createEvent(b)),f=mb[b],g=[c];return Object.keys(f).forEach(function(a){var b=null!=d&&a in d?d[a]:f[a];"relatedTarget"===a&&(b=O(b)),g.push(b)}),e["init"+b].apply(e,g),e}function y(a){t.call(this,a)}function z(a){return"function"==typeof a?!0:a&&a.handleEvent}function A(a){switch(a){case"DOMAttrModified":case"DOMAttributeNameChanged":case"DOMCharacterDataModified":case"DOMElementNameChanged":case"DOMNodeInserted":case"DOMNodeInsertedIntoDocument":case"DOMNodeRemoved":case"DOMNodeRemovedFromDocument":case"DOMSubtreeModified":return!0}return!1}function B(a){this.impl=a}function C(a){return a instanceof Q.ShadowRoot&&(a=a.host),O(a)}function D(a,b){var c=R.get(a);if(c)for(var d=0;d<c.length;d++)if(!c[d].removed&&c[d].type===b)return!0;return!1}function E(a,b){for(var c=O(a);c;c=c.parentNode)if(D(P(c),b))return!0;return!1}function F(a){K(a,rb)}function G(b,c,e,f){a.renderAllPending();var g=P(sb.call(c.impl,e,f));if(!g)return null;var i=d(g,null),j=i.lastIndexOf(b);return-1==j?null:(i=i.slice(0,j),h(i,b))}function H(a){return function(){var b=$.get(this);return b&&b[a]&&b[a].value||null}}function I(a){var b=a.slice(2);return function(c){var d=$.get(this);d||(d=Object.create(null),$.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,K=a.forwardMethodsToWrapper,L=a.getTreeScope,M=a.mixin,N=a.registerWrapper,O=a.unwrap,P=a.wrap,Q=a.wrappers,R=(new WeakMap,new WeakMap),S=new WeakMap,T=new WeakMap,U=new WeakMap,V=new WeakMap,W=new WeakMap,X=new WeakMap,Y=new WeakMap,Z=new WeakMap,$=new WeakMap,_=new WeakMap,ab=0,bb=1,cb=2,db=3;s.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 eb=window.Event;eb.prototype.polymerBlackList_={returnValue:!0,keyLocation:!0},t.prototype={get target(){return U.get(this)},get currentTarget(){return V.get(this)},get eventPhase(){return X.get(this)},get path(){var a=_.get(this);return a?a.slice():[]},stopPropagation:function(){Y.set(this,!0)},stopImmediatePropagation:function(){Y.set(this,!0),Z.set(this,!0)}},N(eb,t,document.createEvent("Event"));var fb=v("UIEvent",t),gb=v("CustomEvent",t),hb={get relatedTarget(){var a=W.get(this);return void 0!==a?a:P(O(this).relatedTarget)}},ib=M({initMouseEvent:w("initMouseEvent",14)},hb),jb=M({initFocusEvent:w("initFocusEvent",5)},hb),kb=v("MouseEvent",fb,ib),lb=v("FocusEvent",fb,jb),mb=Object.create(null),nb=function(){try{new window.FocusEvent("focus")}catch(a){return!1}return!0}();if(!nb){var ob=function(a,b,c){if(c){var d=mb[c];b=M(M({},d),b)}mb[a]=b};ob("Event",{bubbles:!1,cancelable:!1}),ob("CustomEvent",{detail:null},"Event"),ob("UIEvent",{view:null,detail:0},"Event"),ob("MouseEvent",{screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null},"UIEvent"),ob("FocusEvent",{relatedTarget:null},"UIEvent")}var pb=window.BeforeUnloadEvent;y.prototype=Object.create(t.prototype),M(y.prototype,{get returnValue(){return this.impl.returnValue},set returnValue(a){this.impl.returnValue=a}}),pb&&N(pb,y);var qb=window.EventTarget,rb=["addEventListener","removeEventListener","dispatchEvent"];[Node,Window].forEach(function(a){var b=a.prototype;rb.forEach(function(a){Object.defineProperty(b,a+"_",{value:b[a]})})}),B.prototype={addEventListener:function(a,b,c){if(z(b)&&!A(a)){var d=new s(a,b,c),e=R.get(this);if(e){for(var f=0;f<e.length;f++)if(d.equals(e[f]))return}else e=[],e.depth=0,R.set(this,e);e.push(d);var g=C(this);g.addEventListener_(a,m,!0)}},removeEventListener:function(a,b,c){c=Boolean(c);var d=R.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=C(this);h.removeEventListener_(a,m,!0)}}},dispatchEvent:function(b){var c=O(b),d=c.type;S.set(c,!1),a.renderAllPending();var e;E(this,d)||(e=function(){},this.addEventListener(d,e,!0));try{return O(this).dispatchEvent_(c)}finally{e&&this.removeEventListener(d,e,!0)}}},qb&&N(qb,B);var sb=document.elementFromPoint;a.elementFromPoint=G,a.getEventHandlerGetter=H,a.getEventHandlerSetter=I,a.wrapEventTargetMethods=F,a.wrappers.BeforeUnloadEvent=y,a.wrappers.CustomEvent=gb,a.wrappers.Event=t,a.wrappers.EventTarget=B,a.wrappers.FocusEvent=lb,a.wrappers.MouseEvent=kb,a.wrappers.UIEvent=fb}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){Object.defineProperty(a,b,o)}function c(a){this.impl=a}function d(){this.length=0,b(this,"length")}function e(a){for(var b=new d,e=0;e<a.length;e++)b[e]=new c(a[e]);return b.length=e,b}function f(a){g.call(this,a)}var g=a.wrappers.UIEvent,h=a.mixin,i=a.registerWrapper,j=a.unwrap,k=a.wrap,l=window.TouchEvent;if(l){var m;try{m=document.createEvent("TouchEvent")}catch(n){return}var o={enumerable:!1};c.prototype={get target(){return k(this.impl.target)}};var p={configurable:!0,enumerable:!0,get:null};["clientX","clientY","screenX","screenY","pageX","pageY","identifier","webkitRadiusX","webkitRadiusY","webkitRotationAngle","webkitForce"].forEach(function(a){p.get=function(){return this.impl[a]},Object.defineProperty(c.prototype,a,p)}),d.prototype={item:function(a){return this[a]}},f.prototype=Object.create(g.prototype),h(f.prototype,{get touches(){return e(j(this).touches)},get targetTouches(){return e(j(this).targetTouches)},get changedTouches(){return e(j(this).changedTouches)},initTouchEvent:function(){throw new Error("Not implemented")}}),i(l,f,m),a.wrappers.Touch=c,a.wrappers.TouchEvent=f,a.wrappers.TouchList=d}}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){Object.defineProperty(a,b,g)}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,g={enumerable:!1};c.prototype={item:function(a){return this[a]}},b(c.prototype,"item"),a.wrappers.NodeList=c,a.addWrapNodeListMethod=e,a.wrapNodeList=d}(window.ShadowDOMPolyfill),function(a){"use strict";a.wrapHTMLCollection=a.wrapNodeList,a.wrappers.HTMLCollection=a.wrappers.NodeList}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){A(a instanceof w)}function c(a){var b=new y;return b[0]=a,b.length=1,b}function d(a,b,c){C(b,"childList",{removedNodes:c,previousSibling:a.previousSibling,nextSibling:a.nextSibling})}function e(a,b){C(a,"childList",{removedNodes:b})}function f(a,b,d,e){if(a instanceof DocumentFragment){var f=h(a);O=!0;for(var g=f.length-1;g>=0;g--)a.removeChild(f[g]),f[g].parentNode_=b;O=!1;for(var g=0;g<f.length;g++)f[g].previousSibling_=f[g-1]||d,f[g].nextSibling_=f[g+1]||e;return d&&(d.nextSibling_=f[0]),e&&(e.previousSibling_=f[f.length-1]),f}var f=c(a),i=a.parentNode;return i&&i.removeChild(a),a.parentNode_=b,a.previousSibling_=d,a.nextSibling_=e,d&&(d.nextSibling_=a),e&&(e.previousSibling_=a),f}function g(a){if(a instanceof DocumentFragment)return h(a);var b=c(a),e=a.parentNode;return e&&d(a,e,b),b}function h(a){for(var b=new y,c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b.length=c,e(a,b),b}function i(a){return a}function j(a,b){I(a,b),a.nodeIsInserted_()}function k(a,b){for(var c=D(b),d=0;d<a.length;d++)j(a[d],c)}function l(a){I(a,new z(a,null))}function m(a){for(var b=0;b<a.length;b++)l(a[b])}function n(a,b){var c=a.nodeType===w.DOCUMENT_NODE?a:a.ownerDocument;c!==b.ownerDocument&&c.adoptNode(b)}function o(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 p(a,b){o(a,b);var c=b.length;if(1===c)return J(b[0]);for(var d=J(a.ownerDocument.createDocumentFragment()),e=0;c>e;e++)d.appendChild(J(b[e]));return d}function q(a){if(void 0!==a.firstChild_)for(var b=a.firstChild_;b;){var c=b;b=b.nextSibling_,c.parentNode_=c.previousSibling_=c.nextSibling_=void 0}a.firstChild_=a.lastChild_=void 0}function r(a){if(a.invalidateShadowRenderer()){for(var b=a.firstChild;b;){A(b.parentNode===a);var c=b.nextSibling,d=J(b),e=d.parentNode;e&&V.call(e,d),b.previousSibling_=b.nextSibling_=b.parentNode_=null,b=c}a.firstChild_=a.lastChild_=null}else for(var c,f=J(a),g=f.firstChild;g;)c=g.nextSibling,V.call(f,g),g=c}function s(a){var b=a.parentNode;return b&&b.invalidateShadowRenderer()}function t(a){for(var b,c=0;c<a.length;c++)b=a[c],b.parentNode.removeChild(b)}function u(a,b,c){var d;if(d=L(c?P.call(c,a.impl,!1):Q.call(a.impl,!1)),b){for(var e=a.firstChild;e;e=e.nextSibling)d.appendChild(u(e,!0,c));if(a instanceof N.HTMLTemplateElement)for(var f=d.content,e=a.content.firstChild;e;e=e.nextSibling)f.appendChild(u(e,!0,c))}return d}function v(a,b){if(!b||D(a)!==D(b))return!1;for(var c=b;c;c=c.parentNode)if(c===a)return!0;return!1}function w(a){A(a instanceof R),x.call(this,a),this.parentNode_=void 0,this.firstChild_=void 0,this.lastChild_=void 0,this.nextSibling_=void 0,this.previousSibling_=void 0,this.treeScope_=void 0}var x=a.wrappers.EventTarget,y=a.wrappers.NodeList,z=a.TreeScope,A=a.assert,B=a.defineWrapGetter,C=a.enqueueMutation,D=a.getTreeScope,E=a.isWrapper,F=a.mixin,G=a.registerTransientObservers,H=a.registerWrapper,I=a.setTreeScope,J=a.unwrap,K=a.unwrapIfNeeded,L=a.wrap,M=a.wrapIfNeeded,N=a.wrappers,O=!1,P=document.importNode,Q=window.Node.prototype.cloneNode,R=window.Node,S=window.DocumentFragment,T=(R.prototype.appendChild,R.prototype.compareDocumentPosition),U=R.prototype.insertBefore,V=R.prototype.removeChild,W=R.prototype.replaceChild,X=/Trident/.test(navigator.userAgent),Y=X?function(a,b){try{V.call(a,b)}catch(c){if(!(a instanceof S))throw c}}:function(a,b){V.call(a,b)};w.prototype=Object.create(x.prototype),F(w.prototype,{appendChild:function(a){return this.insertBefore(a,null)},insertBefore:function(a,c){b(a);var d;c?E(c)?d=J(c):(d=c,c=L(d)):(c=null,d=null),c&&A(c.parentNode===this);var e,h=c?c.previousSibling:this.lastChild,i=!this.invalidateShadowRenderer()&&!s(a);if(e=i?g(a):f(a,this,h,c),i)n(this,a),q(this),U.call(this.impl,J(a),d);else{h||(this.firstChild_=e[0]),c||(this.lastChild_=e[e.length-1],void 0===this.firstChild_&&(this.firstChild_=this.firstChild));var j=d?d.parentNode:this.impl;j?U.call(j,p(this,e),d):o(this,e)}return C(this,"childList",{addedNodes:e,nextSibling:c,previousSibling:h}),k(e,this),a},removeChild:function(a){if(b(a),a.parentNode!==this){for(var d=!1,e=(this.childNodes,this.firstChild);e;e=e.nextSibling)if(e===a){d=!0;break}if(!d)throw new Error("NotFoundError")}var f=J(a),g=a.nextSibling,h=a.previousSibling;if(this.invalidateShadowRenderer()){var i=this.firstChild,j=this.lastChild,k=f.parentNode;k&&Y(k,f),i===a&&(this.firstChild_=g),j===a&&(this.lastChild_=h),h&&(h.nextSibling_=g),g&&(g.previousSibling_=h),a.previousSibling_=a.nextSibling_=a.parentNode_=void 0}else q(this),Y(this.impl,f);return O||C(this,"childList",{removedNodes:c(a),nextSibling:g,previousSibling:h}),G(this,a),a},replaceChild:function(a,d){b(a);var e;if(E(d)?e=J(d):(e=d,d=L(e)),d.parentNode!==this)throw new Error("NotFoundError");var h,i=d.nextSibling,j=d.previousSibling,m=!this.invalidateShadowRenderer()&&!s(a);return m?h=g(a):(i===a&&(i=a.nextSibling),h=f(a,this,j,i)),m?(n(this,a),q(this),W.call(this.impl,J(a),e)):(this.firstChild===d&&(this.firstChild_=h[0]),this.lastChild===d&&(this.lastChild_=h[h.length-1]),d.previousSibling_=d.nextSibling_=d.parentNode_=void 0,e.parentNode&&W.call(e.parentNode,p(this,h),e)),C(this,"childList",{addedNodes:h,removedNodes:c(d),nextSibling:i,previousSibling:j}),l(d),k(h,this),d},nodeIsInserted_:function(){for(var a=this.firstChild;a;a=a.nextSibling)a.nodeIsInserted_()},hasChildNodes:function(){return null!==this.firstChild},get parentNode(){return void 0!==this.parentNode_?this.parentNode_:L(this.impl.parentNode)},get firstChild(){return void 0!==this.firstChild_?this.firstChild_:L(this.impl.firstChild)},get lastChild(){return void 0!==this.lastChild_?this.lastChild_:L(this.impl.lastChild)},get nextSibling(){return void 0!==this.nextSibling_?this.nextSibling_:L(this.impl.nextSibling)},get previousSibling(){return void 0!==this.previousSibling_?this.previousSibling_:L(this.impl.previousSibling)},get parentElement(){for(var a=this.parentNode;a&&a.nodeType!==w.ELEMENT_NODE;)a=a.parentNode;return a},get textContent(){for(var a="",b=this.firstChild;b;b=b.nextSibling)b.nodeType!=w.COMMENT_NODE&&(a+=b.textContent);return a},set textContent(a){var b=i(this.childNodes);if(this.invalidateShadowRenderer()){if(r(this),""!==a){var c=this.impl.ownerDocument.createTextNode(a);this.appendChild(c)}}else q(this),this.impl.textContent=a;var d=i(this.childNodes);C(this,"childList",{addedNodes:d,removedNodes:b}),m(b),k(d,this)},get childNodes(){for(var a=new y,b=0,c=this.firstChild;c;c=c.nextSibling)a[b++]=c;return a.length=b,a},cloneNode:function(a){return u(this,a)},contains:function(a){return v(this,M(a))},compareDocumentPosition:function(a){return T.call(this.impl,K(a))},normalize:function(){for(var a,b,c=i(this.childNodes),d=[],e="",f=0;f<c.length;f++)b=c[f],b.nodeType===w.TEXT_NODE?a||b.data.length?a?(e+=b.data,d.push(b)):a=b:this.removeNode(b):(a&&d.length&&(a.data+=e,t(d)),d=[],e="",a=null,b.childNodes.length&&b.normalize());a&&d.length&&(a.data+=e,t(d))}}),B(w,"ownerDocument"),H(R,w,document.createDocumentFragment()),delete w.prototype.querySelector,delete w.prototype.querySelectorAll,w.prototype=F(Object.create(x.prototype),w.prototype),a.cloneNode=u,a.nodeWasAdded=j,a.nodeWasRemoved=l,a.nodesWereAdded=k,a.nodesWereRemoved=m,a.snapshotNodeList=i,a.wrappers.Node=w}(window.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){return a.matches(b)}function d(a,b,c){var d=a.localName;return d===b||d===c&&a.namespaceURI===l}function e(){return!0}function f(a,b){return a.localName===b}function g(a,b){return a.namespaceURI===b}function h(a,b,c){return a.namespaceURI===b&&a.localName===c}function i(a,b,c,d,e){for(var f=a.firstElementChild;f;)c(f,d,e)&&(b[b.length++]=f),i(f,b,c,d,e),f=f.nextElementSibling;return b}var j=a.wrappers.HTMLCollection,k=a.wrappers.NodeList,l="http://www.w3.org/1999/xhtml",m={querySelector:function(a){return b(this,a)},querySelectorAll:function(a){return i(this,new k,c,a)}},n={getElementsByTagName:function(a){var b=new j;return"*"===a?i(this,b,e):i(this,b,d,a,a.toLowerCase())},getElementsByClassName:function(a){return this.querySelectorAll("."+a)},getElementsByTagNameNS:function(a,b){var c=new j;if(""===a)a=null;else if("*"===a)return"*"===b?i(this,c,e):i(this,c,f,b);return"*"===b?i(this,c,g,a):i(this,c,h,a,b)}};a.GetElementsByInterface=n,a.SelectorsInterface=m}(window.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},remove:function(){var a=this.parentNode;a&&a.removeChild(this)}},f={get nextElementSibling(){return b(this.nextSibling)},get previousElementSibling(){return c(this.previousSibling)}};a.ChildNodeInterface=f,a.ParentNodeInterface=e}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}var c=a.ChildNodeInterface,d=a.wrappers.Node,e=a.enqueueMutation,f=a.mixin,g=a.registerWrapper,h=window.CharacterData;b.prototype=Object.create(d.prototype),f(b.prototype,{get textContent(){return this.data},set textContent(a){this.data=a},get data(){return this.impl.data},set data(a){var b=this.impl.data;e(this,"characterData",{oldValue:b}),this.impl.data=a}}),f(b.prototype,c),g(h,b,document.createTextNode("")),a.wrappers.CharacterData=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a>>>0}function c(a){d.call(this,a)}var d=a.wrappers.CharacterData,e=(a.enqueueMutation,a.mixin),f=a.registerWrapper,g=window.Text;c.prototype=Object.create(d.prototype),e(c.prototype,{splitText:function(a){a=b(a);var c=this.data;if(a>c.length)throw new Error("IndexSizeError");var d=c.slice(0,a),e=c.slice(a);this.data=d;var f=this.ownerDocument.createTextNode(e);return this.parentNode&&this.parentNode.insertBefore(f,this.nextSibling),f}}),f(g,c,document.createTextNode("")),a.wrappers.Text=c}(window.ShadowDOMPolyfill),function(a){"use strict";function b(b){a.invalidateRendererBasedOnAttribute(b,"class")}function c(a,b){this.impl=a,this.ownerElement_=b}c.prototype={get length(){return this.impl.length},item:function(a){return this.impl.item(a)},contains:function(a){return this.impl.contains(a)},add:function(){this.impl.add.apply(this.impl,arguments),b(this.ownerElement_)},remove:function(){this.impl.remove.apply(this.impl,arguments),b(this.ownerElement_)},toggle:function(){var a=this.impl.toggle.apply(this.impl,arguments);return b(this.ownerElement_),a},toString:function(){return this.impl.toString()}},a.wrappers.DOMTokenList=c}(window.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,b,c){k(a,"attributes",{name:b,namespace:null,oldValue:c})}function d(a){g.call(this,a)}var e=a.ChildNodeInterface,f=a.GetElementsByInterface,g=a.wrappers.Node,h=a.wrappers.DOMTokenList,i=a.ParentNodeInterface,j=a.SelectorsInterface,k=(a.addWrapNodeListMethod,a.enqueueMutation),l=a.mixin,m=(a.oneOf,a.registerWrapper),n=a.unwrap,o=a.wrappers,p=window.Element,q=["matches","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector"].filter(function(a){return p.prototype[a]}),r=q[0],s=p.prototype[r],t=new WeakMap;d.prototype=Object.create(g.prototype),l(d.prototype,{createShadowRoot:function(){var b=new o.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,d){var e=this.impl.getAttribute(a);this.impl.setAttribute(a,d),c(this,a,e),b(this,a)},removeAttribute:function(a){var d=this.impl.getAttribute(a);this.impl.removeAttribute(a),c(this,a,d),b(this,a)},matches:function(a){return s.call(this.impl,a)},get classList(){var a=t.get(this);return a||t.set(this,a=new h(n(this).classList,this)),a},get className(){return n(this).className},set className(a){this.setAttribute("class",a)},get id(){return n(this).id},set id(a){this.setAttribute("id",a)}}),q.forEach(function(a){"matches"!==a&&(d.prototype[a]=function(a){return this.matches(a)})}),p.prototype.webkitCreateShadowRoot&&(d.prototype.webkitCreateShadowRoot=d.prototype.createShadowRoot),l(d.prototype,e),l(d.prototype,f),l(d.prototype,i),l(d.prototype,j),m(p,d,document.createElementNS(null,"x")),a.invalidateRendererBasedOnAttribute=b,a.matchesNames=q,a.wrappers.Element=d}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a){case"&":return"&amp;";case"<":return"&lt;";case">":return"&gt;";case'"':return"&quot;";case"\xa0":return"&nbsp;"}}function c(a){return a.replace(z,b)}function d(a){return a.replace(A,b)}function e(a){for(var b={},c=0;c<a.length;c++)b[a[c]]=!0;return b}function f(a,b){switch(a.nodeType){case Node.ELEMENT_NODE:for(var e,f=a.tagName.toLowerCase(),h="<"+f,i=a.attributes,j=0;e=i[j];j++)h+=" "+e.name+'="'+c(e.value)+'"';return h+=">",B[f]?h:h+g(a)+"</"+f+">";case Node.TEXT_NODE:var k=a.data;return b&&C[b.localName]?k:d(k);case Node.COMMENT_NODE:return"<!--"+a.data+"-->";default:throw console.error(a),new Error("not implemented")}}function g(a){a instanceof y.HTMLTemplateElement&&(a=a.content);for(var b="",c=a.firstChild;c;c=c.nextSibling)b+=f(c,a);return b}function h(a,b,c){var d=c||"div";a.textContent="";var e=w(a.ownerDocument.createElement(d));e.innerHTML=b;for(var f;f=e.firstChild;)a.appendChild(x(f))}function i(a){o.call(this,a)}function j(a,b){var c=w(a.cloneNode(!1));c.innerHTML=b;for(var d,e=w(document.createDocumentFragment());d=c.firstChild;)e.appendChild(d);return x(e)}function k(b){return function(){return a.renderAllPending(),this.impl[b]}}function l(a){p(i,a,k(a))}function m(b){Object.defineProperty(i.prototype,b,{get:k(b),set:function(c){a.renderAllPending(),this.impl[b]=c},configurable:!0,enumerable:!0})}function n(b){Object.defineProperty(i.prototype,b,{value:function(){return a.renderAllPending(),this.impl[b].apply(this.impl,arguments)},configurable:!0,enumerable:!0})}var o=a.wrappers.Element,p=a.defineGetter,q=a.enqueueMutation,r=a.mixin,s=a.nodesWereAdded,t=a.nodesWereRemoved,u=a.registerWrapper,v=a.snapshotNodeList,w=a.unwrap,x=a.wrap,y=a.wrappers,z=/[&\u00A0"]/g,A=/[&\u00A0<>]/g,B=e(["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"]),C=e(["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"]),D=/MSIE/.test(navigator.userAgent),E=window.HTMLElement,F=window.HTMLTemplateElement;i.prototype=Object.create(o.prototype),r(i.prototype,{get innerHTML(){return g(this)},set innerHTML(a){if(D&&C[this.localName])return void(this.textContent=a);var b=v(this.childNodes);this.invalidateShadowRenderer()?this instanceof y.HTMLTemplateElement?h(this.content,a):h(this,a,this.tagName):!F&&this instanceof y.HTMLTemplateElement?h(this.content,a):this.impl.innerHTML=a;var c=v(this.childNodes);q(this,"childList",{addedNodes:c,removedNodes:b}),t(b),s(c,this)},get outerHTML(){return f(this,this.parentNode)},set outerHTML(a){var b=this.parentNode;if(b){b.invalidateShadowRenderer();var c=j(b,a);b.replaceChild(c,this)}},insertAdjacentHTML:function(a,b){var c,d;switch(String(a).toLowerCase()){case"beforebegin":c=this.parentNode,d=this;break;case"afterend":c=this.parentNode,d=this.nextSibling;break;case"afterbegin":c=this,d=this.firstChild;break;case"beforeend":c=this,d=null;break;default:return}var e=j(c,b);c.insertBefore(e,d)}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollWidth"].forEach(l),["scrollLeft","scrollTop"].forEach(m),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(n),u(E,i,document.createElement("b")),a.wrappers.HTMLElement=i,a.getInnerHTML=g,a.setInnerHTML=h}(window.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}(window.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}(window.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.wrapHTMLCollection,g=a.unwrap,h=window.HTMLFormElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get elements(){return f(g(this).elements)}}),e(h,b,document.createElement("form")),a.wrappers.HTMLFormElement=b}(window.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}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=(a.mixin,a.wrappers.NodeList,a.registerWrapper),e=window.HTMLShadowElement;b.prototype=Object.create(c.prototype),e&&d(e,b),a.wrappers.HTMLShadowElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){if(!a.defaultView)return a;var b=k.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);k.set(a,b)}return b}function c(a){for(var c,d=b(a.ownerDocument),e=h(d.createDocumentFragment());c=a.firstChild;)e.appendChild(c);return e}function d(a){if(e.call(this,a),!l){var b=c(a);j.set(this,i(b))}}var e=a.wrappers.HTMLElement,f=a.mixin,g=a.registerWrapper,h=a.unwrap,i=a.wrap,j=new WeakMap,k=new WeakMap,l=window.HTMLTemplateElement;d.prototype=Object.create(e.prototype),f(d.prototype,{get content(){return l?i(this.impl.content):j.get(this)}}),l&&g(l,d),a.wrappers.HTMLTemplateElement=d}(window.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}(window.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}(window.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}(window.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.unwrap,g=a.wrap,h=window.HTMLSelectElement;b.prototype=Object.create(c.prototype),d(b.prototype,{add:function(a,b){"object"==typeof b&&(b=f(b)),f(this).add(f(a),b)},remove:function(a){return void 0===a?void c.prototype.remove.call(this):("object"==typeof a&&(a=f(a)),void f(this).remove(a))},get form(){return g(f(this).form)}}),e(h,b,document.createElement("select")),a.wrappers.HTMLSelectElement=b}(window.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.unwrap,g=a.wrap,h=a.wrapHTMLCollection,i=window.HTMLTableElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get caption(){return g(f(this).caption)},createCaption:function(){return g(f(this).createCaption())},get tHead(){return g(f(this).tHead)},createTHead:function(){return g(f(this).createTHead())},createTFoot:function(){return g(f(this).createTFoot())},get tFoot(){return g(f(this).tFoot)},get tBodies(){return h(f(this).tBodies)},createTBody:function(){return g(f(this).createTBody())},get rows(){return h(f(this).rows)},insertRow:function(a){return g(f(this).insertRow(a))}}),e(i,b,document.createElement("table")),a.wrappers.HTMLTableElement=b}(window.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.wrapHTMLCollection,g=a.unwrap,h=a.wrap,i=window.HTMLTableSectionElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get rows(){return f(g(this).rows)},insertRow:function(a){return h(g(this).insertRow(a))}}),e(i,b,document.createElement("thead")),a.wrappers.HTMLTableSectionElement=b}(window.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.wrapHTMLCollection,g=a.unwrap,h=a.wrap,i=window.HTMLTableRowElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get cells(){return f(g(this).cells)},insertCell:function(a){return h(g(this).insertCell(a))}}),e(i,b,document.createElement("tr")),a.wrappers.HTMLTableRowElement=b}(window.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,g=(a.mixin,a.registerWrapper),h=window.HTMLUnknownElement;b.prototype=Object.create(d.prototype),g(h,b),a.wrappers.HTMLUnknownElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";var b=a.wrappers.Element,c=a.wrappers.HTMLElement,d=a.registerObject,e="http://www.w3.org/2000/svg",f=document.createElementNS(e,"title"),g=d(f),h=Object.getPrototypeOf(g.prototype).constructor;if(!("classList"in f)){var i=Object.getOwnPropertyDescriptor(b.prototype,"classList");Object.defineProperty(c.prototype,"classList",i),delete b.prototype.classList
-}a.wrappers.SVGElement=h}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){m.call(this,a)}var c=a.mixin,d=a.registerWrapper,e=a.unwrap,f=a.wrap,g=window.SVGUseElement,h="http://www.w3.org/2000/svg",i=f(document.createElementNS(h,"g")),j=document.createElementNS(h,"use"),k=i.constructor,l=Object.getPrototypeOf(k.prototype),m=l.constructor;b.prototype=Object.create(l),"instanceRoot"in j&&c(b.prototype,{get instanceRoot(){return f(e(this).instanceRoot)},get animatedInstanceRoot(){return f(e(this).animatedInstanceRoot)}}),d(g,b,j),a.wrappers.SVGUseElement=b}(window.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.wrap,g=window.SVGElementInstance;g&&(b.prototype=Object.create(c.prototype),d(b.prototype,{get correspondingElement(){return f(this.impl.correspondingElement)},get correspondingUseElement(){return f(this.impl.correspondingUseElement)},get parentNode(){return f(this.impl.parentNode)},get childNodes(){throw new Error("Not implemented")},get firstChild(){return f(this.impl.firstChild)},get lastChild(){return f(this.impl.lastChild)},get previousSibling(){return f(this.impl.previousSibling)},get nextSibling(){return f(this.impl.nextSibling)}}),e(g,b),a.wrappers.SVGElementInstance=b)}(window.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,document.createElement("canvas").getContext("2d")),a.wrappers.CanvasRenderingContext2D=b}(window.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;if(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)}});var h=/WebKit/.test(navigator.userAgent)?{drawingBufferHeight:null,drawingBufferWidth:null}:{};d(g,b,h),a.wrappers.WebGLRenderingContext=b}}(window.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))},toString:function(){return this.impl.toString()}},g.prototype.createContextualFragment&&(b.prototype.createContextualFragment=function(a){return f(this.impl.createContextualFragment(a))}),c(window.Range,b,document.createRange()),a.wrappers.Range=b}(window.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.createComment(""));a.wrappers.Comment=h,a.wrappers.DocumentFragment=g}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=k(a.impl.ownerDocument.createDocumentFragment());c.call(this,b),i(b,this);var e=a.shadowRoot;m.set(this,e),this.treeScope_=new d(this,g(e||a)),l.set(this,a)}var c=a.wrappers.DocumentFragment,d=a.TreeScope,e=a.elementFromPoint,f=a.getInnerHTML,g=a.getTreeScope,h=a.mixin,i=a.rewrap,j=a.setInnerHTML,k=a.unwrap,l=new WeakMap,m=new WeakMap,n=/[ \t\n\r\f]/;b.prototype=Object.create(c.prototype),h(b.prototype,{get innerHTML(){return f(this)},set innerHTML(a){j(this,a),this.invalidateShadowRenderer()},get olderShadowRoot(){return m.get(this)||null},get host(){return l.get(this)||null},invalidateShadowRenderer:function(){return l.get(this).invalidateShadowRenderer()},elementFromPoint:function(a,b){return e(this,this.ownerDocument,a,b)},getElementById:function(a){return n.test(a)?null:this.querySelector('[id="'+a+'"]')}}),a.wrappers.ShadowRoot=b}(window.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){I.set(a,[])}function f(a){var b=I.get(a);return b||I.set(a,b=[]),b}function g(a){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}function h(){for(var a=0;a<M.length;a++){var b=M[a],c=b.parentRenderer;c&&c.dirty||b.render()}M=[]}function i(){y=null,h()}function j(a){var b=K.get(a);return b||(b=new n(a),K.set(a,b)),b}function k(a){var b=E(a).root;return b instanceof D?b:null}function l(a){return j(a.host)}function m(a){this.skip=!1,this.node=a,this.childNodes=[]}function n(a){this.host=a,this.dirty=!1,this.invalidateAttributes(),this.associateNode(a)}function o(a){for(var b=[],c=a.firstChild;c;c=c.nextSibling)v(c)?b.push.apply(b,f(c)):b.push(c);return b}function p(a){if(a instanceof B)return a;if(a instanceof A)return null;for(var b=a.firstChild;b;b=b.nextSibling){var c=p(b);if(c)return c}return null}function q(a,b){f(b).push(a);var c=J.get(a);c?c.push(b):J.set(a,[b])}function r(a){return J.get(a)}function s(a){J.set(a,void 0)}function t(a,b){var c=b.getAttribute("select");if(!c)return!0;if(c=c.trim(),!c)return!0;if(!(a instanceof z))return!1;if(!O.test(c))return!1;try{return a.matches(c)}catch(d){return!1}}function u(a,b){var c=r(b);return c&&c[c.length-1]===a}function v(a){return a instanceof A||a instanceof B}function w(a){return a.shadowRoot}function x(a){for(var b=[],c=a.shadowRoot;c;c=c.olderShadowRoot)b.push(c);return b}var y,z=a.wrappers.Element,A=a.wrappers.HTMLContentElement,B=a.wrappers.HTMLShadowElement,C=a.wrappers.Node,D=a.wrappers.ShadowRoot,E=(a.assert,a.getTreeScope),F=(a.mixin,a.oneOf),G=a.unwrap,H=a.wrap,I=new WeakMap,J=new WeakMap,K=new WeakMap,L=F(window,["requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","setTimeout"]),M=[],N=new ArraySplice;N.equals=function(a,b){return G(a.node)===b},m.prototype={append:function(a){var b=new m(a);return this.childNodes.push(b),b},sync:function(a){if(!this.skip){for(var b=this.node,e=this.childNodes,f=g(G(b)),h=a||new WeakMap,i=N.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(h);for(var o=n.removed.length,p=0;o>p;p++){var q=H(f[k++]);h.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),h.set(u,!0),t.sync(h)}l+=r}for(var m=l;m<e.length;m++)e[m].sync(h)}}},n.prototype={render:function(a){if(this.dirty){this.invalidateAttributes();var b=this.host;this.distribution(b);var c=a||new m(b);this.buildRenderTree(c,b);var d=!a;d&&c.sync(),this.dirty=!1}},get parentRenderer(){return E(this.host).renderer},invalidate:function(){if(!this.dirty){this.dirty=!0;var a=this.parentRenderer;if(a&&a.invalidate(),M.push(this),y)return;y=window[L](i,0)}},distribution:function(a){this.resetAll(a),this.distributionResolution(a)},resetAll:function(a){v(a)?e(a):s(a);for(var b=a.firstChild;b;b=b.nextSibling)this.resetAll(b);a.shadowRoot&&this.resetAll(a.shadowRoot),a.olderShadowRoot&&this.resetAll(a.olderShadowRoot)},distributionResolution:function(a){if(w(a)){for(var b=a,c=o(b),d=x(b),e=0;e<d.length;e++)this.poolDistribution(d[e],c);for(var e=d.length-1;e>=0;e--){var f=d[e],g=p(f);if(g){var h=f.olderShadowRoot;h&&(c=o(h));for(var i=0;i<c.length;i++)q(c[i],g)}this.distributionResolution(f)}}for(var j=a.firstChild;j;j=j.nextSibling)this.distributionResolution(j)},poolDistribution:function(a,b){if(!(a instanceof B))if(a instanceof A){var c=a;this.updateDependentAttributes(c.getAttribute("select"));for(var d=!1,e=0;e<b.length;e++){var a=b[e];a&&t(a,c)&&(q(a,c),b[e]=void 0,d=!0)}if(!d)for(var f=c.firstChild;f;f=f.nextSibling)q(f,c)}else for(var f=a.firstChild;f;f=f.nextSibling)this.poolDistribution(f,b)},buildRenderTree:function(a,b){for(var c=this.compose(b),d=0;d<c.length;d++){var e=c[d],f=a.append(e);this.buildRenderTree(f,e)}if(w(b)){var g=j(b);g.dirty=!1}},compose:function(a){for(var b=[],c=a.shadowRoot||a,d=c.firstChild;d;d=d.nextSibling)if(v(d)){this.associateNode(c);for(var e=f(d),g=0;g<e.length;g++){var h=e[g];u(d,h)&&b.push(h)}}else b.push(d);return b},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]},associateNode:function(a){a.impl.polymerShadowRenderer_=this}};var O=/^[*.#[a-zA-Z_|]/;C.prototype.invalidateShadowRenderer=function(){var a=this.impl.polymerShadowRenderer_;return a?(a.invalidate(),!0):!1},A.prototype.getDistributedNodes=B.prototype.getDistributedNodes=function(){return h(),f(this)},z.prototype.getDestinationInsertionPoints=function(){return h(),r(this)||[]},A.prototype.nodeIsInserted_=B.prototype.nodeIsInserted_=function(){this.invalidateShadowRenderer();var a,b=k(this);b&&(a=l(b)),this.impl.polymerShadowRenderer_=a,a&&a.invalidate()},a.getRendererForHost=j,a.getShadowTrees=x,a.renderAllPending=h,a.getDestinationInsertionPoints=r,a.visual={insertBefore:c,remove:d}}(window.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","HTMLTextAreaElement"];i.forEach(b)}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}{var c=a.registerWrapper,d=a.unwrap,e=a.unwrapIfNeeded,f=a.wrap;window.Selection}b.prototype={get anchorNode(){return f(this.impl.anchorNode)},get focusNode(){return f(this.impl.focusNode)},addRange:function(a){this.impl.addRange(d(a))},collapse:function(a,b){this.impl.collapse(e(a),b)},containsNode:function(a,b){return this.impl.containsNode(e(a),b)},extend:function(a,b){this.impl.extend(e(a),b)},getRangeAt:function(a){return f(this.impl.getRangeAt(a))},removeRange:function(a){this.impl.removeRange(d(a))},selectAllChildren:function(a){this.impl.selectAllChildren(e(a))},toString:function(){return this.impl.toString()}},c(window.Selection,b,window.getSelection()),a.wrappers.Selection=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){k.call(this,a),this.treeScope_=new p(this,null)}function c(a){var c=document[a];b.prototype[a]=function(){return A(c.apply(this.impl,arguments))}}function d(a,b){D.call(b.impl,z(a)),e(a,b)}function e(a,b){a.shadowRoot&&b.adoptNode(a.shadowRoot),a instanceof o&&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 A(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.wrappers.Selection,n=a.SelectorsInterface,o=a.wrappers.ShadowRoot,p=a.TreeScope,q=a.cloneNode,r=a.defineWrapGetter,s=a.elementFromPoint,t=a.forwardMethodsToWrapper,u=a.matchesNames,v=a.mixin,w=a.registerWrapper,x=a.renderAllPending,y=a.rewrap,z=a.unwrap,A=a.wrap,B=a.wrapEventTargetMethods,C=(a.wrapNodeList,new WeakMap);b.prototype=Object.create(k.prototype),r(b,"documentElement"),r(b,"body"),r(b,"head"),["createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","getElementById"].forEach(c);var D=document.adoptNode,E=document.getSelection;if(v(b.prototype,{adoptNode:function(a){return a.parentNode&&a.parentNode.removeChild(a),d(a,this),a},elementFromPoint:function(a,b){return s(this,this,a,b)},importNode:function(a,b){return q(a,b,this.impl)},getSelection:function(){return x(),new m(E.call(z(this)))},getElementsByName:function(a){return n.querySelectorAll.call(this,"[name="+JSON.stringify(String(a))+"]")}}),document.registerElement){var F=document.registerElement;b.prototype.registerElement=function(b,c){function d(a){return a?void(this.impl=a):f?document.createElement(f,b):document.createElement(b)}var e,f;if(void 0!==c&&(e=c.prototype,f=c.extends),e||(e=Object.create(HTMLElement.prototype)),a.nativePrototypeTable.get(e))throw new Error("NotSupportedError");for(var g,h=Object.getPrototypeOf(e),i=[];h&&!(g=a.nativePrototypeTable.get(h));)i.push(h),h=Object.getPrototypeOf(h);if(!g)throw new Error("NotSupportedError");for(var j=Object.create(g),k=i.length-1;k>=0;k--)j=Object.create(j);["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"].forEach(function(a){var b=e[a];b&&(j[a]=function(){A(this)instanceof d||y(this),b.apply(A(this),arguments)})});var l={prototype:j};f&&(l.extends=f),d.prototype=e,d.prototype.constructor=d,a.constructorTable.set(j,d),a.nativePrototypeTable.set(e,j);F.call(z(this),b,l);return d},t([window.HTMLDocument||window.Document],["registerElement"])}t([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement,window.HTMLHtmlElement],["appendChild","compareDocumentPosition","contains","getElementsByClassName","getElementsByTagName","getElementsByTagNameNS","insertBefore","querySelector","querySelectorAll","removeChild","replaceChild"].concat(u)),t([window.HTMLDocument||window.Document],["adoptNode","importNode","contains","createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","elementFromPoint","getElementById","getElementsByName","getSelection"]),v(b.prototype,j),v(b.prototype,l),v(b.prototype,n),v(b.prototype,{get implementation(){var a=C.get(this);return a?a:(a=new g(z(this).implementation),C.set(this,a),a)},get defaultView(){return A(z(this).defaultView)}}),w(window.Document,b,document.implementation.createHTMLDocument("")),window.HTMLDocument&&w(window.HTMLDocument,b),B([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement]),h(g,"createDocumentType"),h(g,"createDocument"),h(g,"createHTMLDocument"),i(g,"hasFeature"),w(window.DOMImplementation,g),t([window.DOMImplementation],["createDocumentType","createDocument","createHTMLDocument","hasFeature"]),a.adoptNodeNoRemove=d,a.wrappers.DOMImplementation=g,a.wrappers.Document=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.EventTarget,d=a.wrappers.Selection,e=a.mixin,f=a.registerWrapper,g=a.renderAllPending,h=a.unwrap,i=a.unwrapIfNeeded,j=a.wrap,k=window.Window,l=window.getComputedStyle,m=window.getSelection;b.prototype=Object.create(c.prototype),k.prototype.getComputedStyle=function(a,b){return j(this||window).getComputedStyle(i(a),b)},k.prototype.getSelection=function(){return j(this||window).getSelection()},delete window.getComputedStyle,delete window.getSelection,["addEventListener","removeEventListener","dispatchEvent"].forEach(function(a){k.prototype[a]=function(){var b=j(this||window);return b[a].apply(b,arguments)},delete window[a]}),e(b.prototype,{getComputedStyle:function(a,b){return g(),l.call(h(this),i(a),b)},getSelection:function(){return g(),new d(m.call(h(this)))},get document(){return j(h(this).document)}}),f(k,b,window),a.wrappers.Window=b}(window.ShadowDOMPolyfill),function(a){"use strict";var b=a.unwrap,c=window.DataTransfer||window.Clipboard,d=c.prototype.setDragImage;d&&(c.prototype.setDragImage=function(a,c,e){d.call(this,b(a),c,e)})}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=new e(a&&d(a))}var c=a.registerWrapper,d=a.unwrap,e=window.FormData;c(e,b,new e),a.wrappers.FormData=b}(window.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}}var c=(a.isWrapperFor,{a:"HTMLAnchorElement",area:"HTMLAreaElement",audio:"HTMLAudioElement",base:"HTMLBaseElement",body:"HTMLBodyElement",br:"HTMLBRElement",button:"HTMLButtonElement",canvas:"HTMLCanvasElement",caption:"HTMLTableCaptionElement",col:"HTMLTableColElement",content:"HTMLContentElement",data:"HTMLDataElement",datalist:"HTMLDataListElement",del:"HTMLModElement",dir:"HTMLDirectoryElement",div:"HTMLDivElement",dl:"HTMLDListElement",embed:"HTMLEmbedElement",fieldset:"HTMLFieldSetElement",font:"HTMLFontElement",form:"HTMLFormElement",frame:"HTMLFrameElement",frameset:"HTMLFrameSetElement",h1:"HTMLHeadingElement",head:"HTMLHeadElement",hr:"HTMLHRElement",html:"HTMLHtmlElement",iframe:"HTMLIFrameElement",img:"HTMLImageElement",input:"HTMLInputElement",keygen:"HTMLKeygenElement",label:"HTMLLabelElement",legend:"HTMLLegendElement",li:"HTMLLIElement",link:"HTMLLinkElement",map:"HTMLMapElement",marquee:"HTMLMarqueeElement",menu:"HTMLMenuElement",menuitem:"HTMLMenuItemElement",meta:"HTMLMetaElement",meter:"HTMLMeterElement",object:"HTMLObjectElement",ol:"HTMLOListElement",optgroup:"HTMLOptGroupElement",option:"HTMLOptionElement",output:"HTMLOutputElement",p:"HTMLParagraphElement",param:"HTMLParamElement",pre:"HTMLPreElement",progress:"HTMLProgressElement",q:"HTMLQuoteElement",script:"HTMLScriptElement",select:"HTMLSelectElement",shadow:"HTMLShadowElement",source:"HTMLSourceElement",span:"HTMLSpanElement",style:"HTMLStyleElement",table:"HTMLTableElement",tbody:"HTMLTableSectionElement",template:"HTMLTemplateElement",textarea:"HTMLTextAreaElement",thead:"HTMLTableSectionElement",time:"HTMLTimeElement",title:"HTMLTitleElement",tr:"HTMLTableRowElement",track:"HTMLTrackElement",ul:"HTMLUListElement",video:"HTMLVideoElement"});Object.keys(c).forEach(b),Object.getOwnPropertyNames(a.wrappers).forEach(function(b){window[b]=a.wrappers[b]})}(window.ShadowDOMPolyfill),function(a){function b(a,c){var d,e,f,g,h=a.firstElementChild;for(e=[],f=a.shadowRoot;f;)e.push(f),f=f.olderShadowRoot;for(g=e.length-1;g>=0;g--)if(d=e[g].querySelector(c))return d;for(;h;){if(d=b(h,c))return d;h=h.nextElementSibling}return null}function c(a,b,d){var e,f,g,h,i,j=a.firstElementChild;for(g=[],f=a.shadowRoot;f;)g.push(f),f=f.olderShadowRoot;for(h=g.length-1;h>=0;h--)for(e=g[h].querySelectorAll(b),i=0;i<e.length;i++)d.push(e[i]);for(;j;)c(j,b,d),j=j.nextElementSibling;return d}window.wrap=ShadowDOMPolyfill.wrapIfNeeded,window.unwrap=ShadowDOMPolyfill.unwrapIfNeeded,Object.defineProperty(Element.prototype,"webkitShadowRoot",Object.getOwnPropertyDescriptor(Element.prototype,"shadowRoot"));var d=Element.prototype.createShadowRoot;Element.prototype.createShadowRoot=function(){var a=d.call(this);return CustomElements.watchShadow(this),a},Element.prototype.webkitCreateShadowRoot=Element.prototype.createShadowRoot,a.queryAllShadows=function(a,d,e){return e?c(a,d,[]):b(a,d)}}(window.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(l,"")),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=[];if(b.sheet)try{d=b.sheet.cssRules}catch(e){}else console.warn("sheet not found",b);return b.parentNode.removeChild(b),d}function e(){v.initialized=!0,document.body.appendChild(v);var a=v.contentDocument,b=a.createElement("base");b.href=document.baseURI,a.head.appendChild(b)}function f(a){v.initialized||e(),document.body.appendChild(v),a(v.contentDocument),document.body.removeChild(v)}function g(a,b){if(b){var e;if(a.match("@import")&&x){var g=c(a);f(function(a){a.head.appendChild(g.impl),e=g.sheet.cssRules,b(e)})}else e=d(a),b(e)}}function h(a){a&&j().appendChild(document.createTextNode(a))}function i(a,b){var d=c(a);d.setAttribute(b,""),d.setAttribute(z,""),document.head.appendChild(d)}function j(){return w||(w=document.createElement("style"),w.setAttribute(z,""),w[z]=!0),w}var k={strictStyling:!1,registry:{},shimStyling:function(a,c,d){var e=this.prepareRoot(a,c,d),f=this.isTypeExtension(d),g=this.makeScopeSelector(c,f),h=b(e,!0);h=this.scopeCssText(h,g),a&&(a.shimmedStyle=h),this.addCssToDocument(h,c)},shimStyle:function(a,b){return this.shimCssText(a.textContent,b)},shimCssText:function(a,b){return a=this.insertDirectives(a),this.scopeCssText(a,b)},makeScopeSelector:function(a,b){return a?b?"[is="+a+"]":a:""},isTypeExtension:function(a){return a&&a.indexOf("-")<0},prepareRoot:function(a,b,c){var d=this.registerRoot(a,b,c);return this.replaceTextInStyles(d.rootStyles,this.insertDirectives),this.removeStyles(a,d.rootStyles),this.strictStyling&&this.applyScopeToContent(a,b),d.scopeStyles},removeStyles:function(a,b){for(var c,d=0,e=b.length;e>d&&(c=b[d]);d++)c.parentNode.removeChild(c)},registerRoot:function(a,b,c){var d=this.registry[b]={root:a,name:b,extendsName:c},e=this.findStyles(a);d.rootStyles=e,d.scopeStyles=d.rootStyles;var f=this.registry[d.extendsName];return f&&(d.scopeStyles=f.scopeStyles.concat(d.scopeStyles)),d},findStyles:function(a){if(!a)return[];var b=a.querySelectorAll("style");return Array.prototype.filter.call(b,function(a){return!a.hasAttribute(A)})},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))},insertDirectives:function(a){return a=this.insertPolyfillDirectivesInCssText(a),this.insertPolyfillRulesInCssText(a)},insertPolyfillDirectivesInCssText:function(a){return a=a.replace(m,function(a,b){return b.slice(0,-2)+"{"}),a.replace(n,function(a,b){return b+" {"})},insertPolyfillRulesInCssText:function(a){return a=a.replace(o,function(a,b){return b.slice(0,-1)}),a.replace(p,function(a,b,c,d){var e=a.replace(b,"").replace(c,"");return d+e})},scopeCssText:function(a,b){var c=this.extractUnscopedRulesFromCssText(a);if(a=this.insertPolyfillHostInCssText(a),a=this.convertColonHost(a),a=this.convertColonHostContext(a),a=this.convertShadowDOMSelectors(a),b){var a,d=this;g(a,function(c){a=d.scopeRules(c,b)})}return a=a+"\n"+c,a.trim()},extractUnscopedRulesFromCssText:function(a){for(var b,c="";b=q.exec(a);)c+=b[1].slice(0,-1)+"\n\n";for(;b=r.exec(a);)c+=b[0].replace(b[2],"").replace(b[1],b[3])+"\n\n";return c},convertColonHost:function(a){return this.convertColonRule(a,cssColonHostRe,this.colonHostPartReplacer)},convertColonHostContext:function(a){return this.convertColonRule(a,cssColonHostContextRe,this.colonHostContextPartReplacer)},convertColonRule:function(a,b,c){return a.replace(b,function(a,b,d,e){if(b=polyfillHostNoCombinator,d){for(var f,g=d.split(","),h=[],i=0,j=g.length;j>i&&(f=g[i]);i++)f=f.trim(),h.push(c(b,f,e));return h.join(",")}return b+e})},colonHostContextPartReplacer:function(a,b,c){return b.match(s)?this.colonHostPartReplacer(a,b,c):a+b+c+", "+b+" "+a+c},colonHostPartReplacer:function(a,b,c){return a+b.replace(s,"")+c},convertShadowDOMSelectors:function(a){for(var b=0;b<shadowDOMSelectorsRe.length;b++)a=a.replace(shadowDOMSelectorsRe[b]," ");return a},scopeRules:function(a,b){var c="";return a&&Array.prototype.forEach.call(a,function(a){if(a.selectorText&&a.style&&void 0!==a.style.cssText)c+=this.scopeSelector(a.selectorText,b,this.strictStyling)+" {\n	",c+=this.propertiesFromRule(a)+"\n}\n\n";else if(a.type===CSSRule.MEDIA_RULE)c+="@media "+a.media.mediaText+" {\n",c+=this.scopeRules(a.cssRules,b),c+="\n}\n\n";else try{a.cssText&&(c+=a.cssText+"\n\n")}catch(d){}},this),c},scopeSelector:function(a,b,c){var d=[],e=a.split(",");return e.forEach(function(a){a=a.trim(),this.selectorNeedsScoping(a,b)&&(a=c&&!a.match(polyfillHostNoCombinator)?this.applyStrictSelectorScope(a,b):this.applySelectorScope(a,b)),d.push(a)},this),d.join(", ")},selectorNeedsScoping:function(a,b){if(Array.isArray(b))return!0;var c=this.makeScopeMatcher(b);return!a.match(c)},makeScopeMatcher:function(a){return a=a.replace(/\[/g,"\\[").replace(/\[/g,"\\]"),new RegExp("^("+a+")"+selectorReSuffix,"m")},applySelectorScope:function(a,b){return Array.isArray(b)?this.applySelectorScopeList(a,b):this.applySimpleSelectorScope(a,b)},applySelectorScopeList:function(a,b){for(var c,d=[],e=0;c=b[e];e++)d.push(this.applySimpleSelectorScope(a,c));return d.join(", ")},applySimpleSelectorScope:function(a,b){return a.match(polyfillHostRe)?(a=a.replace(polyfillHostNoCombinator,b),a.replace(polyfillHostRe,b+" ")):b+" "+a},applyStrictSelectorScope:function(a,b){b=b.replace(/\[is=([^\]]*)\]/g,"$1");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(polyfillHostRe,"");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(colonHostContextRe,t).replace(colonHostRe,s)},propertiesFromRule:function(a){var b=a.style.cssText;a.style.content&&!a.style.content.match(/['"]+|attr/)&&(b=b.replace(/content:[^;]*;/g,"content: '"+a.style.content+"';"));var c=a.style;for(var d in c)"initial"===c[d]&&(b+=d+": initial; ");return b},replaceTextInStyles:function(a,b){a&&b&&(a instanceof Array||(a=[a]),Array.prototype.forEach.call(a,function(a){a.textContent=b.call(this,a.textContent)},this))},addCssToDocument:function(a,b){a.match("@import")?i(a,b):h(a)}},l=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,m=/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,n=/polyfill-next-selector[^}]*content\:[\s]*['|"]([^'"]*)['|"][^}]*}([^{]*?){/gim,o=/\/\*\s@polyfill-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,p=/(polyfill-rule)[^}]*(content\:[\s]*['|"]([^'"]*)['|"][^;]*;)[^}]*}/gim,q=/\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,r=/(polyfill-unscoped-rule)[^}]*(content\:[\s]*['|"]([^'"]*)['|"][^;]*;)[^}]*}/gim,s="-shadowcsshost",t="-shadowcsscontext",u=")(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))?([^,{]*)";cssColonHostRe=new RegExp("("+s+u,"gim"),cssColonHostContextRe=new RegExp("("+t+u,"gim"),selectorReSuffix="([>\\s~+[.,{:][\\s\\S]*)?$",colonHostRe=/\:host/gim,colonHostContextRe=/\:host-context/gim,polyfillHostNoCombinator=s+"-no-combinator",polyfillHostRe=new RegExp(s,"gim"),polyfillHostContextRe=new RegExp(t,"gim"),shadowDOMSelectorsRe=[/\^\^/g,/\^/g,/\/shadow\//g,/\/shadow-deep\//g,/::shadow/g,/\/deep\//g,/::content/g];var v=document.createElement("iframe");v.style.display="none";var w,x=navigator.userAgent.match("Chrome"),y="shim-shadowdom",z="shim-shadowdom-css",A="no-shim";if(window.ShadowDOMPolyfill){h("style { display: none !important; }\n");var B=wrap(document),C=B.querySelector("head");C.insertBefore(j(),C.childNodes[0]),document.addEventListener("DOMContentLoaded",function(){var b=a.urlResolver;if(window.HTMLImports&&!HTMLImports.useNative){var c="link[rel=stylesheet]["+y+"]",d="style["+y+"]";HTMLImports.importer.documentPreloadSelectors+=","+c,HTMLImports.importer.importsPreloadSelectors+=","+c,HTMLImports.parser.documentSelectors=[HTMLImports.parser.documentSelectors,c,d].join(",");var e=HTMLImports.parser.parseGeneric;HTMLImports.parser.parseGeneric=function(a){if(!a[z]){var c=a.__importElement||a;if(!c.hasAttribute(y))return void e.call(this,a);a.__resource?(c=a.ownerDocument.createElement("style"),c.textContent=b.resolveCssText(a.__resource,a.href)):b.resolveStyle(c),c.textContent=k.shimStyle(c),c.removeAttribute(y,""),c.setAttribute(z,""),c[z]=!0,c.parentNode!==C&&(a.parentNode===C?C.replaceChild(c,a):C.appendChild(c)),c.__importParsed=!0,this.markParsingComplete(a),this.parseNext()}};var f=HTMLImports.parser.hasResource;HTMLImports.parser.hasResource=function(a){return"link"===a.localName&&"stylesheet"===a.rel&&a.hasAttribute(y)?a.__resource:f.call(this,a)}}})}a.ShadowCSS=k}(window.Platform)):!function(){window.wrap=window.unwrap=function(a){return a},addEventListener("DOMContentLoaded",function(){if(CustomElements.useNative===!1){var a=Element.prototype.createShadowRoot;Element.prototype.createShadowRoot=function(){var b=a.call(this);return CustomElements.watchShadow(this),b}}}),Platform.templateContent=function(a){if(window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(a),!a.content&&!a._content){for(var b=document.createDocumentFragment();a.firstChild;)b.appendChild(a.firstChild);a._content=b}return a.content||a._content}}(window.Platform),function(a){"use strict";function b(a){return void 0!==m[a]}function c(){h.call(this),this._isInvalid=!0}function d(a){return""==a&&c.call(this),a.toLowerCase()}function e(a){var b=a.charCodeAt(0);return b>32&&127>b&&-1==[34,35,60,62,63,96].indexOf(b)?a:encodeURIComponent(a)}function f(a){var b=a.charCodeAt(0);return b>32&&127>b&&-1==[34,35,60,62,96].indexOf(b)?a:encodeURIComponent(a)}function g(a,g,h){function i(a){t.push(a)}var j=g||"scheme start",k=0,l="",r=!1,s=!1,t=[];a:for(;(a[k-1]!=o||0==k)&&!this._isInvalid;){var u=a[k];switch(j){case"scheme start":if(!u||!p.test(u)){if(g){i("Invalid scheme.");break a}l="",j="no scheme";continue}l+=u.toLowerCase(),j="scheme";break;case"scheme":if(u&&q.test(u))l+=u.toLowerCase();else{if(":"!=u){if(g){if(o==u)break a;i("Code point not allowed in scheme: "+u);break a}l="",k=0,j="no scheme";continue}if(this._scheme=l,l="",g)break a;b(this._scheme)&&(this._isRelative=!0),j="file"==this._scheme?"relative":this._isRelative&&h&&h._scheme==this._scheme?"relative or authority":this._isRelative?"authority first slash":"scheme data"}break;case"scheme data":"?"==u?(query="?",j="query"):"#"==u?(this._fragment="#",j="fragment"):o!=u&&"	"!=u&&"\n"!=u&&"\r"!=u&&(this._schemeData+=e(u));break;case"no scheme":if(h&&b(h._scheme)){j="relative";continue}i("Missing scheme."),c.call(this);break;case"relative or authority":if("/"!=u||"/"!=a[k+1]){i("Expected /, got: "+u),j="relative";continue}j="authority ignore slashes";break;case"relative":if(this._isRelative=!0,"file"!=this._scheme&&(this._scheme=h._scheme),o==u){this._host=h._host,this._port=h._port,this._path=h._path.slice(),this._query=h._query;
-break a}if("/"==u||"\\"==u)"\\"==u&&i("\\ is an invalid code point."),j="relative slash";else if("?"==u)this._host=h._host,this._port=h._port,this._path=h._path.slice(),this._query="?",j="query";else{if("#"!=u){var v=a[k+1],w=a[k+2];("file"!=this._scheme||!p.test(u)||":"!=v&&"|"!=v||o!=w&&"/"!=w&&"\\"!=w&&"?"!=w&&"#"!=w)&&(this._host=h._host,this._port=h._port,this._path=h._path.slice(),this._path.pop()),j="relative path";continue}this._host=h._host,this._port=h._port,this._path=h._path.slice(),this._query=h._query,this._fragment="#",j="fragment"}break;case"relative slash":if("/"!=u&&"\\"!=u){"file"!=this._scheme&&(this._host=h._host,this._port=h._port),j="relative path";continue}"\\"==u&&i("\\ is an invalid code point."),j="file"==this._scheme?"file host":"authority ignore slashes";break;case"authority first slash":if("/"!=u){i("Expected '/', got: "+u),j="authority ignore slashes";continue}j="authority second slash";break;case"authority second slash":if(j="authority ignore slashes","/"!=u){i("Expected '/', got: "+u);continue}break;case"authority ignore slashes":if("/"!=u&&"\\"!=u){j="authority";continue}i("Expected authority, got: "+u);break;case"authority":if("@"==u){r&&(i("@ already seen."),l+="%40"),r=!0;for(var x=0;x<l.length;x++){var y=l[x];if("	"!=y&&"\n"!=y&&"\r"!=y)if(":"!=y||null!==this._password){var z=e(y);null!==this._password?this._password+=z:this._username+=z}else this._password="";else i("Invalid whitespace in authority.")}l=""}else{if(o==u||"/"==u||"\\"==u||"?"==u||"#"==u){k-=l.length,l="",j="host";continue}l+=u}break;case"file host":if(o==u||"/"==u||"\\"==u||"?"==u||"#"==u){2!=l.length||!p.test(l[0])||":"!=l[1]&&"|"!=l[1]?0==l.length?j="relative path start":(this._host=d.call(this,l),l="",j="relative path start"):j="relative path";continue}"	"==u||"\n"==u||"\r"==u?i("Invalid whitespace in file host."):l+=u;break;case"host":case"hostname":if(":"!=u||s){if(o==u||"/"==u||"\\"==u||"?"==u||"#"==u){if(this._host=d.call(this,l),l="",j="relative path start",g)break a;continue}"	"!=u&&"\n"!=u&&"\r"!=u?("["==u?s=!0:"]"==u&&(s=!1),l+=u):i("Invalid code point in host/hostname: "+u)}else if(this._host=d.call(this,l),l="",j="port","hostname"==g)break a;break;case"port":if(/[0-9]/.test(u))l+=u;else{if(o==u||"/"==u||"\\"==u||"?"==u||"#"==u||g){if(""!=l){var A=parseInt(l,10);A!=m[this._scheme]&&(this._port=A+""),l=""}if(g)break a;j="relative path start";continue}"	"==u||"\n"==u||"\r"==u?i("Invalid code point in port: "+u):c.call(this)}break;case"relative path start":if("\\"==u&&i("'\\' not allowed in path."),j="relative path","/"!=u&&"\\"!=u)continue;break;case"relative path":if(o!=u&&"/"!=u&&"\\"!=u&&(g||"?"!=u&&"#"!=u))"	"!=u&&"\n"!=u&&"\r"!=u&&(l+=e(u));else{"\\"==u&&i("\\ not allowed in relative path.");var B;(B=n[l.toLowerCase()])&&(l=B),".."==l?(this._path.pop(),"/"!=u&&"\\"!=u&&this._path.push("")):"."==l&&"/"!=u&&"\\"!=u?this._path.push(""):"."!=l&&("file"==this._scheme&&0==this._path.length&&2==l.length&&p.test(l[0])&&"|"==l[1]&&(l=l[0]+":"),this._path.push(l)),l="","?"==u?(this._query="?",j="query"):"#"==u&&(this._fragment="#",j="fragment")}break;case"query":g||"#"!=u?o!=u&&"	"!=u&&"\n"!=u&&"\r"!=u&&(this._query+=f(u)):(this._fragment="#",j="fragment");break;case"fragment":o!=u&&"	"!=u&&"\n"!=u&&"\r"!=u&&(this._fragment+=u)}k++}}function h(){this._scheme="",this._schemeData="",this._username="",this._password=null,this._host="",this._port="",this._path=[],this._query="",this._fragment="",this._isInvalid=!1,this._isRelative=!1}function i(a,b){void 0===b||b instanceof i||(b=new i(String(b))),this._url=a,h.call(this);var c=a.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g,"");g.call(this,c,null,b)}var j=!1;if(!a.forceJURL)try{var k=new URL("b","http://a");j="http://a/b"===k.href}catch(l){}if(!j){var m=Object.create(null);m.ftp=21,m.file=0,m.gopher=70,m.http=80,m.https=443,m.ws=80,m.wss=443;var n=Object.create(null);n["%2e"]=".",n[".%2e"]="..",n["%2e."]="..",n["%2e%2e"]="..";var o=void 0,p=/[a-zA-Z]/,q=/[a-zA-Z0-9\+\-\.]/;i.prototype={get href(){if(this._isInvalid)return this._url;var a="";return(""!=this._username||null!=this._password)&&(a=this._username+(null!=this._password?":"+this._password:"")+"@"),this.protocol+(this._isRelative?"//"+a+this.host:"")+this.pathname+this._query+this._fragment},set href(a){h.call(this),g.call(this,a)},get protocol(){return this._scheme+":"},set protocol(a){this._isInvalid||g.call(this,a+":","scheme start")},get host(){return this._isInvalid?"":this._port?this._host+":"+this._port:this._host},set host(a){!this._isInvalid&&this._isRelative&&g.call(this,a,"host")},get hostname(){return this._host},set hostname(a){!this._isInvalid&&this._isRelative&&g.call(this,a,"hostname")},get port(){return this._port},set port(a){!this._isInvalid&&this._isRelative&&g.call(this,a,"port")},get pathname(){return this._isInvalid?"":this._isRelative?"/"+this._path.join("/"):this._schemeData},set pathname(a){!this._isInvalid&&this._isRelative&&(this._path=[],g.call(this,a,"relative path start"))},get search(){return this._isInvalid||!this._query||"?"==this._query?"":this._query},set search(a){!this._isInvalid&&this._isRelative&&(this._query="?","?"==a[0]&&(a=a.slice(1)),g.call(this,a,"query"))},get hash(){return this._isInvalid||!this._fragment||"#"==this._fragment?"":this._fragment},set hash(a){this._isInvalid||(this._fragment="#","#"==a[0]&&(a=a.slice(1)),g.call(this,a,"fragment"))}},a.URL=i}}(window),function(a){function b(a){for(var b=a||{},d=1;d<arguments.length;d++){var e=arguments[d];try{for(var f in e)c(f,e,b)}catch(g){}}return b}function c(a,b,c){var e=d(b,a);Object.defineProperty(c,a,e)}function d(a,b){if(a){var c=Object.getOwnPropertyDescriptor(a,b);return c||d(Object.getPrototypeOf(a),b)}}Function.prototype.bind||(Function.prototype.bind=function(a){var b=this,c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();return d.push.apply(d,arguments),b.apply(a,d)}}),a.mixin=b}(window.Platform),function(a){"use strict";function b(a,b,c){var d="string"==typeof a?document.createElement(a):a.cloneNode(!0);if(d.innerHTML=b,c)for(var e in c)d.setAttribute(e,c[e]);return d}var c=DOMTokenList.prototype.add,d=DOMTokenList.prototype.remove;DOMTokenList.prototype.add=function(){for(var a=0;a<arguments.length;a++)c.call(this,arguments[a])},DOMTokenList.prototype.remove=function(){for(var a=0;a<arguments.length;a++)d.call(this,arguments[a])},DOMTokenList.prototype.toggle=function(a,b){1==arguments.length&&(b=!this.contains(a)),b?this.add(a):this.remove(a)},DOMTokenList.prototype.switch=function(a,b){a&&this.remove(a),b&&this.add(b)};var e=function(){return Array.prototype.slice.call(this)},f=window.NamedNodeMap||window.MozNamedAttrMap||{};if(NodeList.prototype.array=e,f.prototype.array=e,HTMLCollection.prototype.array=e,!window.performance){var g=Date.now();window.performance={now:function(){return Date.now()-g}}}window.requestAnimationFrame||(window.requestAnimationFrame=function(){var a=window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame;return a?function(b){return a(function(){b(performance.now())})}:function(a){return window.setTimeout(a,1e3/60)}}()),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(){return window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||function(a){clearTimeout(a)}}());var h=[],i=function(){h.push(arguments)};window.Polymer=i,a.deliverDeclarations=function(){return a.deliverDeclarations=function(){throw"Possible attempt to load Polymer twice"},h},window.addEventListener("DOMContentLoaded",function(){window.Polymer===i&&(window.Polymer=function(){console.error('You tried to use polymer without loading it first. To load polymer, <link rel="import" href="components/polymer/polymer.html">')})}),a.createDOM=b}(window.Platform),function(a){a.templateContent=a.templateContent||function(a){return a.content}}(window.Platform),function(a){a=a||(window.Inspector={});var b;window.sinspect=function(a,d){b||(b=window.open("","ShadowDOM Inspector",null,!0),b.document.write(c),b.api={shadowize:shadowize}),f(a||wrap(document.body),d)};var c=["<!DOCTYPE html>","<html>","  <head>","    <title>ShadowDOM Inspector</title>","    <style>","      body {","      }","      pre {",'        font: 9pt "Courier New", monospace;',"        line-height: 1.5em;","      }","      tag {","        color: purple;","      }","      ul {","         margin: 0;","         padding: 0;","         list-style: none;","      }","      li {","         display: inline-block;","         background-color: #f1f1f1;","         padding: 4px 6px;","         border-radius: 4px;","         margin-right: 4px;","      }","    </style>","  </head>","  <body>",'    <ul id="crumbs">',"    </ul>",'    <div id="tree"></div>',"  </body>","</html>"].join("\n"),d=[],e=function(){var a=b.document,c=a.querySelector("#crumbs");c.textContent="";for(var e,g=0;e=d[g];g++){var h=a.createElement("a");h.href="#",h.textContent=e.localName,h.idx=g,h.onclick=function(a){for(var b;d.length>this.idx;)b=d.pop();f(b.shadow||b,b),a.preventDefault()},c.appendChild(a.createElement("li")).appendChild(h)}},f=function(a,c){var f=b.document;k=[];var g=c||a;d.push(g),e(),f.body.querySelector("#tree").innerHTML="<pre>"+j(a,a.childNodes)+"</pre>"},g=Array.prototype.forEach.call.bind(Array.prototype.forEach),h={STYLE:1,SCRIPT:1,"#comment":1,TEMPLATE:1},i=function(a){return h[a.nodeName]},j=function(a,b,c){if(i(a))return"";var d=c||"";if(a.localName||11==a.nodeType){var e=a.localName||"shadow-root",f=d+l(a);"content"==e&&(b=a.getDistributedNodes()),f+="<br/>";var h=d+"&nbsp;&nbsp;";g(b,function(a){f+=j(a,a.childNodes,h)}),f+=d,{br:1}[e]||(f+="<tag>&lt;/"+e+"&gt;</tag>",f+="<br/>")}else{var k=a.textContent.trim();f=k?d+'"'+k+'"<br/>':""}return f},k=[],l=function(a){var b="<tag>&lt;",c=a.localName||"shadow-root";return a.webkitShadowRoot||a.shadowRoot?(b+=' <button idx="'+k.length+'" onclick="api.shadowize.call(this)">'+c+"</button>",k.push(a)):b+=c||"shadow-root",a.attributes&&g(a.attributes,function(a){b+=" "+a.name+(a.value?'="'+a.value+'"':"")}),b+="&gt;</tag>"};shadowize=function(){var a=Number(this.attributes.idx.value),b=k[a];b?f(b.webkitShadowRoot||b.shadowRoot,b):(console.log("bad shadowize node"),console.dir(this))},a.output=j}(window.Inspector),function(){var a=document.createElement("style");a.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; } \n";var b=document.querySelector("head");b.insertBefore(a,b.firstChild)}(Platform),function(a){function b(a,b){return b=b||[],b.map||(b=[b]),a.apply(this,b.map(d))}function c(a,c,d){var e;switch(arguments.length){case 0:return;case 1:e=null;break;case 2:e=c.apply(this);break;default:e=b(d,c)}f[a]=e}function d(a){return f[a]}function e(a,c){HTMLImports.whenImportsReady(function(){b(c,a)})}var f={};a.marshal=d,a.modularize=c,a.using=e}(window),function(a){function b(a){f.textContent=d++,e.push(a)}function c(){for(;e.length;)e.shift()()}var d=0,e=[],f=document.createTextNode("");new(window.MutationObserver||JsMutationObserver)(c).observe(f,{characterData:!0}),a.endOfMicrotask=b}(Platform),function(a){function b(a,b,d,e){return a.replace(e,function(a,e,f,g){var h=f.replace(/["']/g,"");return h=c(b,h,d),e+"'"+h+"'"+g})}function c(a,b,c){if(b&&"/"===b[0])return b;var e=new URL(b,a);return c?e.href:d(e.href)}function d(a){var b=new URL(document.baseURI),c=new URL(a,b);return c.host===b.host&&c.port===b.port&&c.protocol===b.protocol?e(b,c):a}function e(a,b){for(var c=a.pathname,d=b.pathname,e=c.split("/"),f=d.split("/");e.length&&e[0]===f[0];)e.shift(),f.shift();for(var g=0,h=e.length-1;h>g;g++)f.unshift("..");return f.join("/")+b.search+b.hash}var f={resolveDom:function(a,b){b=b||a.ownerDocument.baseURI,this.resolveAttributes(a,b),this.resolveStyles(a,b);var c=a.querySelectorAll("template");if(c)for(var d,e=0,f=c.length;f>e&&(d=c[e]);e++)d.content&&this.resolveDom(d.content,b)},resolveTemplate:function(a){this.resolveDom(a.content,a.ownerDocument.baseURI)},resolveStyles:function(a,b){var c=a.querySelectorAll("style");if(c)for(var d,e=0,f=c.length;f>e&&(d=c[e]);e++)this.resolveStyle(d,b)},resolveStyle:function(a,b){b=b||a.ownerDocument.baseURI,a.textContent=this.resolveCssText(a.textContent,b)},resolveCssText:function(a,c,d){return a=b(a,c,d,g),b(a,c,d,h)},resolveAttributes:function(a,b){a.hasAttributes&&a.hasAttributes()&&this.resolveElementAttributes(a,b);var c=a&&a.querySelectorAll(j);if(c)for(var d,e=0,f=c.length;f>e&&(d=c[e]);e++)this.resolveElementAttributes(d,b)},resolveElementAttributes:function(a,d){d=d||a.ownerDocument.baseURI,i.forEach(function(e){var f,h=a.attributes[e],i=h&&h.value;i&&i.search(k)<0&&(f="style"===e?b(i,d,!1,g):c(d,i),h.value=f)})}},g=/(url\()([^)]*)(\))/g,h=/(@import[\s]+(?!url\())([^;]*)(;)/g,i=["href","src","action","style","url"],j="["+i.join("],[")+"]",k="{{.*}}";a.urlResolver=f}(Platform),function(a){function b(a){u.push(a),t||(t=!0,q(d))}function c(a){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(a)||a}function d(){t=!1;var a=u;u=[],a.sort(function(a,b){return a.uid_-b.uid_});var b=!1;a.forEach(function(a){var c=a.takeRecords();e(a),c.length&&(a.callback_(c,a),b=!0)}),b&&d()}function e(a){a.nodes_.forEach(function(b){var c=p.get(b);c&&c.forEach(function(b){b.observer===a&&b.removeTransientObservers()})})}function f(a,b){for(var c=a;c;c=c.parentNode){var d=p.get(c);if(d)for(var e=0;e<d.length;e++){var f=d[e],g=f.options;if(c===a||g.subtree){var h=b(g);h&&f.enqueue(h)}}}}function g(a){this.callback_=a,this.nodes_=[],this.records_=[],this.uid_=++v}function h(a,b){this.type=a,this.target=b,this.addedNodes=[],this.removedNodes=[],this.previousSibling=null,this.nextSibling=null,this.attributeName=null,this.attributeNamespace=null,this.oldValue=null}function i(a){var b=new h(a.type,a.target);return b.addedNodes=a.addedNodes.slice(),b.removedNodes=a.removedNodes.slice(),b.previousSibling=a.previousSibling,b.nextSibling=a.nextSibling,b.attributeName=a.attributeName,b.attributeNamespace=a.attributeNamespace,b.oldValue=a.oldValue,b}function j(a,b){return w=new h(a,b)}function k(a){return x?x:(x=i(w),x.oldValue=a,x)}function l(){w=x=void 0}function m(a){return a===x||a===w}function n(a,b){return a===b?a:x&&m(a)?x:null}function o(a,b,c){this.observer=a,this.target=b,this.options=c,this.transientObservedNodes=[]}var p=new WeakMap,q=window.msSetImmediate;if(!q){var r=[],s=String(Math.random());window.addEventListener("message",function(a){if(a.data===s){var b=r;r=[],b.forEach(function(a){a()})}}),q=function(a){r.push(a),window.postMessage(s,"*")}}var t=!1,u=[],v=0;g.prototype={observe:function(a,b){if(a=c(a),!b.childList&&!b.attributes&&!b.characterData||b.attributeOldValue&&!b.attributes||b.attributeFilter&&b.attributeFilter.length&&!b.attributes||b.characterDataOldValue&&!b.characterData)throw new SyntaxError;var d=p.get(a);d||p.set(a,d=[]);for(var e,f=0;f<d.length;f++)if(d[f].observer===this){e=d[f],e.removeListeners(),e.options=b;break}e||(e=new o(this,a,b),d.push(e),this.nodes_.push(a)),e.addListeners()},disconnect:function(){this.nodes_.forEach(function(a){for(var b=p.get(a),c=0;c<b.length;c++){var d=b[c];if(d.observer===this){d.removeListeners(),b.splice(c,1);break}}},this),this.records_=[]},takeRecords:function(){var a=this.records_;return this.records_=[],a}};var w,x;o.prototype={enqueue:function(a){var c=this.observer.records_,d=c.length;if(c.length>0){var e=c[d-1],f=n(e,a);if(f)return void(c[d-1]=f)}else b(this.observer);c[d]=a},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(a){var b=this.options;b.attributes&&a.addEventListener("DOMAttrModified",this,!0),b.characterData&&a.addEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.addEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(a){var b=this.options;b.attributes&&a.removeEventListener("DOMAttrModified",this,!0),b.characterData&&a.removeEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.removeEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(a){if(a!==this.target){this.addListeners_(a),this.transientObservedNodes.push(a);var b=p.get(a);b||p.set(a,b=[]),b.push(this)}},removeTransientObservers:function(){var a=this.transientObservedNodes;this.transientObservedNodes=[],a.forEach(function(a){this.removeListeners_(a);for(var b=p.get(a),c=0;c<b.length;c++)if(b[c]===this){b.splice(c,1);break}},this)},handleEvent:function(a){switch(a.stopImmediatePropagation(),a.type){case"DOMAttrModified":var b=a.attrName,c=a.relatedNode.namespaceURI,d=a.target,e=new j("attributes",d);e.attributeName=b,e.attributeNamespace=c;var g=a.attrChange===MutationEvent.ADDITION?null:a.prevValue;f(d,function(a){return!a.attributes||a.attributeFilter&&a.attributeFilter.length&&-1===a.attributeFilter.indexOf(b)&&-1===a.attributeFilter.indexOf(c)?void 0:a.attributeOldValue?k(g):e});break;case"DOMCharacterDataModified":var d=a.target,e=j("characterData",d),g=a.prevValue;f(d,function(a){return a.characterData?a.characterDataOldValue?k(g):e:void 0});break;case"DOMNodeRemoved":this.addTransientObserver(a.target);case"DOMNodeInserted":var h,i,d=a.relatedNode,m=a.target;"DOMNodeInserted"===a.type?(h=[m],i=[]):(h=[],i=[m]);var n=m.previousSibling,o=m.nextSibling,e=j("childList",d);e.addedNodes=h,e.removedNodes=i,e.previousSibling=n,e.nextSibling=o,f(d,function(a){return a.childList?e:void 0})}l()}},a.JsMutationObserver=g,a.MutationObserver||(a.MutationObserver=g)}(this),window.HTMLImports=window.HTMLImports||{flags:{}},function(a){var b=(a.path,a.xhr),c=a.flags,d=function(a,b){this.cache={},this.onload=a,this.oncomplete=b,this.inflight=0,this.pending={}};d.prototype={addNodes:function(a){this.inflight+=a.length;for(var b,c=0,d=a.length;d>c&&(b=a[c]);c++)this.require(b);this.checkDone()},addNode:function(a){this.inflight++,this.require(a),this.checkDone()},require:function(a){var b=a.src||a.href;a.__nodeUrl=b,this.dedupe(b,a)||this.fetch(b,a)},dedupe:function(a,b){if(this.pending[a])return this.pending[a].push(b),!0;return this.cache[a]?(this.onload(a,b,this.cache[a]),this.tail(),!0):(this.pending[a]=[b],!1)},fetch:function(a,d){if(c.load&&console.log("fetch",a,d),a.match(/^data:/)){var e=a.split(","),f=e[0],g=e[1];g=f.indexOf(";base64")>-1?atob(g):decodeURIComponent(g),setTimeout(function(){this.receive(a,d,null,g)}.bind(this),0)}else{var h=function(b,c,e){this.receive(a,d,b,c,e)}.bind(this);b.load(a,h)}},receive:function(a,b,c,d,e){this.cache[a]=d;var f=this.pending[a];e&&e!==a&&(this.cache[e]=d,f=f.concat(this.pending[e]));for(var g,h=0,i=f.length;i>h&&(g=f[h]);h++)this.onload(e||a,g,d),this.tail();this.pending[a]=null,e&&e!==a&&(this.pending[e]=null)},tail:function(){--this.inflight,this.checkDone()},checkDone:function(){this.inflight||this.oncomplete()}},b=b||{async:!0,ok:function(a){return a.status>=200&&a.status<300||304===a.status||0===a.status},load:function(c,d,e){var f=new XMLHttpRequest;return(a.flags.debug||a.flags.bust)&&(c+="?"+Math.random()),f.open("GET",c,b.async),f.addEventListener("readystatechange",function(){if(4===f.readyState){var a=f.getResponseHeader("Location"),c=null;if(a)var c="/"===a.substr(0,1)?location.origin+a:c;d.call(e,!b.ok(f)&&f,f.response||f.responseText,c)}}),f.send(),f},loadDocument:function(a,b,c){this.load(a,b,c).responseType="document"}},a.xhr=b,a.Loader=d}(window.HTMLImports),function(a){function b(a){return"link"===a.localName&&a.rel===g}function c(a){var b=d(a),c="data:text/javascript";try{c+=";base64,"+btoa(b)}catch(e){c+=";charset=utf-8,"+encodeURIComponent(b)}return c}function d(a){return a.textContent+e(a)}function e(a){var b=a.__nodeUrl;if(!b){b=a.ownerDocument.baseURI;var c="["+Math.floor(1e3*(Math.random()+1))+"]",d=a.textContent.match(/Polymer\(['"]([^'"]*)/);c=d&&d[1]||c,b+="/"+c+".js"}return"\n//# sourceURL="+b+"\n"}function f(a){var b=a.ownerDocument.createElement("style");return b.textContent=a.textContent,n.resolveUrlsInStyle(b),b}var g="import",h=a.flags,i=/Trident/.test(navigator.userAgent),j=window.ShadowDOMPolyfill?window.ShadowDOMPolyfill.wrapIfNeeded(document):document,k={documentSelectors:"link[rel="+g+"]",importsSelectors:["link[rel="+g+"]","link[rel=stylesheet]","style","script:not([type])",'script[type="text/javascript"]'].join(","),map:{link:"parseLink",script:"parseScript",style:"parseStyle"},parseNext:function(){var a=this.nextToParse();a&&this.parse(a)},parse:function(a){if(this.isParsed(a))return void(h.parse&&console.log("[%s] is already parsed",a.localName));var b=this[this.map[a.localName]];b&&(this.markParsing(a),b.call(this,a))},markParsing:function(a){h.parse&&console.log("parsing",a),this.parsingElement=a},markParsingComplete:function(a){a.__importParsed=!0,a.__importElement&&(a.__importElement.__importParsed=!0),this.parsingElement=null,h.parse&&console.log("completed",a)},invalidateParse:function(a){a&&a.__importLink&&(a.__importParsed=a.__importLink.__importParsed=!1,this.parseSoon())},parseSoon:function(){this._parseSoon&&cancelAnimationFrame(this._parseDelay);var a=this;this._parseSoon=requestAnimationFrame(function(){a.parseNext()})},parseImport:function(a){if(HTMLImports.__importsParsingHook&&HTMLImports.__importsParsingHook(a),a.import.__importParsed=!0,this.markParsingComplete(a),a.dispatchEvent(a.__resource?new CustomEvent("load",{bubbles:!1}):new CustomEvent("error",{bubbles:!1})),a.__pending)for(var b;a.__pending.length;)b=a.__pending.shift(),b&&b({target:a});this.parseNext()},parseLink:function(a){b(a)?this.parseImport(a):(a.href=a.href,this.parseGeneric(a))},parseStyle:function(a){var b=a;a=f(a),a.__importElement=b,this.parseGeneric(a)},parseGeneric:function(a){this.trackElement(a),document.head.appendChild(a)},trackElement:function(a,b){var c=this,d=function(d){b&&b(d),c.markParsingComplete(a),c.parseNext()};if(a.addEventListener("load",d),a.addEventListener("error",d),i&&"style"===a.localName){var e=!1;if(-1==a.textContent.indexOf("@import"))e=!0;else if(a.sheet){e=!0;for(var f,g=a.sheet.cssRules,h=g?g.length:0,j=0;h>j&&(f=g[j]);j++)f.type===CSSRule.IMPORT_RULE&&(e=e&&Boolean(f.styleSheet))}e&&a.dispatchEvent(new CustomEvent("load",{bubbles:!1}))}},parseScript:function(b){var d=document.createElement("script");d.__importElement=b,d.src=b.src?b.src:c(b),a.currentScript=b,this.trackElement(d,function(){d.parentNode.removeChild(d),a.currentScript=null}),document.head.appendChild(d)},nextToParse:function(){return!this.parsingElement&&this.nextToParseInDoc(j)},nextToParseInDoc:function(a,c){for(var d,e=a.querySelectorAll(this.parseSelectorsForNode(a)),f=0,g=e.length;g>f&&(d=e[f]);f++)if(!this.isParsed(d))return this.hasResource(d)?b(d)?this.nextToParseInDoc(d.import,d):d:void 0;return c},parseSelectorsForNode:function(a){var b=a.ownerDocument||a;return b===j?this.documentSelectors:this.importsSelectors},isParsed:function(a){return a.__importParsed},hasResource:function(a){return b(a)&&!a.import?!1:!0}},l=/(url\()([^)]*)(\))/g,m=/(@import[\s]+(?!url\())([^;]*)(;)/g,n={resolveUrlsInStyle:function(a){var b=a.ownerDocument,c=b.createElement("a");return a.textContent=this.resolveUrlsInCssText(a.textContent,c),a},resolveUrlsInCssText:function(a,b){var c=this.replaceUrls(a,b,l);return c=this.replaceUrls(c,b,m)},replaceUrls:function(a,b,c){return a.replace(c,function(a,c,d,e){var f=d.replace(/["']/g,"");return b.href=f,f=b.href,c+"'"+f+"'"+e})}};a.parser=k,a.path=n,a.isIE=i}(HTMLImports),function(a){function b(a){return c(a,q)}function c(a,b){return"link"===a.localName&&a.getAttribute("rel")===b}function d(a,b){var c=a;c instanceof Document||(c=document.implementation.createHTMLDocument(q)),c._URL=b;var d=c.createElement("base");d.setAttribute("href",b),c.baseURI||(c.baseURI=b);var e=c.createElement("meta");return e.setAttribute("charset","utf-8"),c.head.appendChild(e),c.head.appendChild(d),a instanceof Document||(c.body.innerHTML=a),window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(c),c}function e(a,b){b=b||r,g(function(){h(a,b)},b)}function f(a){return"complete"===a.readyState||a.readyState===y}function g(a,b){if(f(b))a&&a();else{var c=function(){("complete"===b.readyState||b.readyState===y)&&(b.removeEventListener(z,c),g(a,b))};b.addEventListener(z,c)}}function h(a,b){function c(){f==g&&a&&a()}function d(){f++,c()}var e=b.querySelectorAll("link[rel=import]"),f=0,g=e.length;if(g)for(var h,j=0;g>j&&(h=e[j]);j++)i(h)?d.call(h):(h.addEventListener("load",d),h.addEventListener("error",d));else c()}function i(a){return o?a.import&&"loading"!==a.import.readyState||a.__loaded:a.__importParsed}function j(a){for(var b,c=0,d=a.length;d>c&&(b=a[c]);c++)k(b)&&l(b)}function k(a){return"link"===a.localName&&"import"===a.rel}function l(a){var b=a.import;b?m({target:a}):(a.addEventListener("load",m),a.addEventListener("error",m))}function m(a){a.target.__loaded=!0}var n="import"in document.createElement("link"),o=n,p=a.flags,q="import",r=window.ShadowDOMPolyfill?ShadowDOMPolyfill.wrapIfNeeded(document):document;if(o)var s={};else var t=(a.xhr,a.Loader),u=a.parser,s={documents:{},documentPreloadSelectors:"link[rel="+q+"]",importsPreloadSelectors:["link[rel="+q+"]"].join(","),loadNode:function(a){v.addNode(a)},loadSubtree:function(a){var b=this.marshalNodes(a);v.addNodes(b)},marshalNodes:function(a){return a.querySelectorAll(this.loadSelectorsForNode(a))},loadSelectorsForNode:function(a){var b=a.ownerDocument||a;return b===r?this.documentPreloadSelectors:this.importsPreloadSelectors},loaded:function(a,c,e){if(p.load&&console.log("loaded",a,c),c.__resource=e,b(c)){var f=this.documents[a];f||(f=d(e,a),f.__importLink=c,this.bootDocument(f),this.documents[a]=f),c.import=f}u.parseNext()},bootDocument:function(a){this.loadSubtree(a),this.observe(a),u.parseNext()},loadedAll:function(){u.parseNext()}},v=new t(s.loaded.bind(s),s.loadedAll.bind(s));var w={get:function(){return HTMLImports.currentScript||document.currentScript},configurable:!0};if(Object.defineProperty(document,"_currentScript",w),Object.defineProperty(r,"_currentScript",w),!document.baseURI){var x={get:function(){return window.location.href},configurable:!0};Object.defineProperty(document,"baseURI",x),Object.defineProperty(r,"baseURI",x)}var y=HTMLImports.isIE?"complete":"interactive",z="readystatechange";o&&new MutationObserver(function(a){for(var b,c=0,d=a.length;d>c&&(b=a[c]);c++)b.addedNodes&&j(b.addedNodes)}).observe(document.head,{childList:!0}),a.hasNative=n,a.useNative=o,a.importer=s,a.IMPORT_LINK_TYPE=q,a.isImportLoaded=i,a.importLoader=v,a.whenReady=e,a.whenImportsReady=e}(window.HTMLImports),function(a){function b(a){for(var b,d=0,e=a.length;e>d&&(b=a[d]);d++)"childList"===b.type&&b.addedNodes.length&&c(b.addedNodes)}function c(a){for(var b,e,g=0,h=a.length;h>g&&(e=a[g]);g++)b=b||e.ownerDocument,d(e)&&f.loadNode(e),e.children&&e.children.length&&c(e.children)}function d(a){return 1===a.nodeType&&g.call(a,f.loadSelectorsForNode(a))}function e(a){h.observe(a,{childList:!0,subtree:!0})}var f=(a.IMPORT_LINK_TYPE,a.importer),g=(a.parser,HTMLElement.prototype.matches||HTMLElement.prototype.matchesSelector||HTMLElement.prototype.webkitMatchesSelector||HTMLElement.prototype.mozMatchesSelector||HTMLElement.prototype.msMatchesSelector),h=new MutationObserver(b);a.observe=e,f.observe=e}(HTMLImports),function(){function a(){HTMLImports.importer.bootDocument(b)}"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a,b){var c=document.createEvent("HTMLEvents");return c.initEvent(a,b.bubbles===!1?!1:!0,b.cancelable===!1?!1:!0,b.detail),c});var b=window.ShadowDOMPolyfill?window.ShadowDOMPolyfill.wrapIfNeeded(document):document;HTMLImports.whenImportsReady(function(){HTMLImports.ready=!0,HTMLImports.readyTime=(new Date).getTime(),b.dispatchEvent(new CustomEvent("HTMLImportsLoaded",{bubbles:!0}))}),HTMLImports.useNative||("complete"===document.readyState||"interactive"===document.readyState&&!window.attachEvent?a():document.addEventListener("DOMContentLoaded",a))}(),window.CustomElements=window.CustomElements||{flags:{}},function(a){function b(a,c,d){var e=a.firstElementChild;if(!e)for(e=a.firstChild;e&&e.nodeType!==Node.ELEMENT_NODE;)e=e.nextSibling;for(;e;)c(e,d)!==!0&&b(e,c,d),e=e.nextElementSibling;return null}function c(a,b){for(var c=a.shadowRoot;c;)d(c,b),c=c.olderShadowRoot}function d(a,d){b(a,function(a){return d(a)?!0:void c(a,d)}),c(a,d)}function e(a){return h(a)?(i(a),!0):void l(a)}function f(a){d(a,function(a){return e(a)?!0:void 0})}function g(a){return e(a)||f(a)}function h(b){if(!b.__upgraded__&&b.nodeType===Node.ELEMENT_NODE){var c=b.getAttribute("is")||b.localName,d=a.registry[c];if(d)return A.dom&&console.group("upgrade:",b.localName),a.upgrade(b),A.dom&&console.groupEnd(),!0}}function i(a){l(a),r(a)&&d(a,function(a){l(a)})}function j(a){if(E.push(a),!D){D=!0;var b=window.Platform&&window.Platform.endOfMicrotask||setTimeout;b(k)}}function k(){D=!1;for(var a,b=E,c=0,d=b.length;d>c&&(a=b[c]);c++)a();E=[]}function l(a){C?j(function(){m(a)}):m(a)}function m(a){(a.attachedCallback||a.detachedCallback||a.__upgraded__&&A.dom)&&(A.dom&&console.group("inserted:",a.localName),r(a)&&(a.__inserted=(a.__inserted||0)+1,a.__inserted<1&&(a.__inserted=1),a.__inserted>1?A.dom&&console.warn("inserted:",a.localName,"insert/remove count:",a.__inserted):a.attachedCallback&&(A.dom&&console.log("inserted:",a.localName),a.attachedCallback())),A.dom&&console.groupEnd())}function n(a){o(a),d(a,function(a){o(a)})}function o(a){C?j(function(){p(a)}):p(a)}function p(a){(a.attachedCallback||a.detachedCallback||a.__upgraded__&&A.dom)&&(A.dom&&console.group("removed:",a.localName),r(a)||(a.__inserted=(a.__inserted||0)-1,a.__inserted>0&&(a.__inserted=0),a.__inserted<0?A.dom&&console.warn("removed:",a.localName,"insert/remove count:",a.__inserted):a.detachedCallback&&a.detachedCallback()),A.dom&&console.groupEnd())}function q(a){return window.ShadowDOMPolyfill?ShadowDOMPolyfill.wrapIfNeeded(a):a}function r(a){for(var b=a,c=q(document);b;){if(b==c)return!0;b=b.parentNode||b.host}}function s(a){if(a.shadowRoot&&!a.shadowRoot.__watched){A.dom&&console.log("watching shadow-root for: ",a.localName);for(var b=a.shadowRoot;b;)t(b),b=b.olderShadowRoot}}function t(a){a.__watched||(w(a),a.__watched=!0)}function u(a){if(A.dom){var b=a[0];if(b&&"childList"===b.type&&b.addedNodes&&b.addedNodes){for(var c=b.addedNodes[0];c&&c!==document&&!c.host;)c=c.parentNode;var d=c&&(c.URL||c._URL||c.host&&c.host.localName)||"";d=d.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",a.length,d||"")}a.forEach(function(a){"childList"===a.type&&(G(a.addedNodes,function(a){a.localName&&g(a)}),G(a.removedNodes,function(a){a.localName&&n(a)}))}),A.dom&&console.groupEnd()}function v(){u(F.takeRecords()),k()}function w(a){F.observe(a,{childList:!0,subtree:!0})}function x(a){w(a)}function y(a){A.dom&&console.group("upgradeDocument: ",a.baseURI.split("/").pop()),g(a),A.dom&&console.groupEnd()}function z(a){a=q(a);for(var b,c=a.querySelectorAll("link[rel="+B+"]"),d=0,e=c.length;e>d&&(b=c[d]);d++)b.import&&b.import.__parsed&&z(b.import);y(a)}var A=window.logFlags||{},B=window.HTMLImports?HTMLImports.IMPORT_LINK_TYPE:"none",C=!window.MutationObserver||window.MutationObserver===window.JsMutationObserver;a.hasPolyfillMutations=C;var D=!1,E=[],F=new MutationObserver(u),G=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.IMPORT_LINK_TYPE=B,a.watchShadow=s,a.upgradeDocumentTree=z,a.upgradeAll=g,a.upgradeSubtree=f,a.insertedNode=i,a.observeDocument=x,a.upgradeDocument=y,a.takeRecords=v}(window.CustomElements),function(a){function b(b,g){var h=g||{};if(!b)throw new Error("document.registerElement: first argument `name` must not be empty");if(b.indexOf("-")<0)throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '"+String(b)+"'.");
-if(c(b))throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '"+String(b)+"'. The type name is invalid.");if(n(b))throw new Error("DuplicateDefinitionError: a type with name '"+String(b)+"' is already registered");if(!h.prototype)throw new Error("Options missing required prototype property");return h.__name=b.toLowerCase(),h.lifecycle=h.lifecycle||{},h.ancestry=d(h.extends),e(h),f(h),l(h.prototype),o(h.__name,h),h.ctor=p(h),h.ctor.prototype=h.prototype,h.prototype.constructor=h.ctor,a.ready&&a.upgradeDocumentTree(document),h.ctor}function c(a){for(var b=0;b<y.length;b++)if(a===y[b])return!0}function d(a){var b=n(a);return b?d(b.extends).concat([b]):[]}function e(a){for(var b,c=a.extends,d=0;b=a.ancestry[d];d++)c=b.is&&b.tag;a.tag=c||a.__name,c&&(a.is=a.__name)}function f(a){if(!Object.__proto__){var b=HTMLElement.prototype;if(a.is){var c=document.createElement(a.tag),d=Object.getPrototypeOf(c);d===a.prototype&&(b=d)}for(var e,f=a.prototype;f&&f!==b;)e=Object.getPrototypeOf(f),f.__proto__=e,f=e;a.native=b}}function g(a){return h(B(a.tag),a)}function h(b,c){return c.is&&b.setAttribute("is",c.is),b.removeAttribute("unresolved"),i(b,c),b.__upgraded__=!0,k(b),a.insertedNode(b),a.upgradeSubtree(b),b}function i(a,b){Object.__proto__?a.__proto__=b.prototype:(j(a,b.prototype,b.native),a.__proto__=b.prototype)}function j(a,b,c){for(var d={},e=b;e!==c&&e!==HTMLElement.prototype;){for(var f,g=Object.getOwnPropertyNames(e),h=0;f=g[h];h++)d[f]||(Object.defineProperty(a,f,Object.getOwnPropertyDescriptor(e,f)),d[f]=1);e=Object.getPrototypeOf(e)}}function k(a){a.createdCallback&&a.createdCallback()}function l(a){if(!a.setAttribute._polyfilled){var b=a.setAttribute;a.setAttribute=function(a,c){m.call(this,a,c,b)};var c=a.removeAttribute;a.removeAttribute=function(a){m.call(this,a,null,c)},a.setAttribute._polyfilled=!0}}function m(a,b,c){a=a.toLowerCase();var d=this.getAttribute(a);c.apply(this,arguments);var e=this.getAttribute(a);this.attributeChangedCallback&&e!==d&&this.attributeChangedCallback(a,d,e)}function n(a){return a?z[a.toLowerCase()]:void 0}function o(a,b){z[a]=b}function p(a){return function(){return g(a)}}function q(a,b,c){return a===A?r(b,c):C(a,b)}function r(a,b){var c=n(b||a);if(c){if(a==c.tag&&b==c.is)return new c.ctor;if(!b&&!c.is)return new c.ctor}if(b){var d=r(a);return d.setAttribute("is",b),d}var d=B(a);return a.indexOf("-")>=0&&i(d,HTMLElement),d}function s(a){if(!a.__upgraded__&&a.nodeType===Node.ELEMENT_NODE){var b=a.getAttribute("is"),c=n(b||a.localName);if(c){if(b&&c.tag==a.localName)return h(a,c);if(!b&&!c.extends)return h(a,c)}}}function t(b){var c=D.call(this,b);return a.upgradeAll(c),c}a||(a=window.CustomElements={flags:{}});var u=a.flags,v=Boolean(document.registerElement),w=!u.register&&v&&!window.ShadowDOMPolyfill&&(!window.HTMLImports||HTMLImports.useNative);if(w){var x=function(){};a.registry={},a.upgradeElement=x,a.watchShadow=x,a.upgrade=x,a.upgradeAll=x,a.upgradeSubtree=x,a.observeDocument=x,a.upgradeDocument=x,a.upgradeDocumentTree=x,a.takeRecords=x,a.reservedTagList=[]}else{var y=["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"],z={},A="http://www.w3.org/1999/xhtml",B=document.createElement.bind(document),C=document.createElementNS.bind(document),D=Node.prototype.cloneNode;document.registerElement=b,document.createElement=r,document.createElementNS=q,Node.prototype.cloneNode=t,a.registry=z,a.upgrade=s}var E;E=Object.__proto__||w?function(a,b){return a instanceof b}:function(a,b){for(var c=a;c;){if(c===b.prototype)return!0;c=c.__proto__}return!1},a.instanceof=E,a.reservedTagList=y,document.register=document.registerElement,a.hasNative=v,a.useNative=w}(window.CustomElements),function(a){function b(a){return"link"===a.localName&&a.getAttribute("rel")===c}var c=a.IMPORT_LINK_TYPE,d={selectors:["link[rel="+c+"]"],map:{link:"parseLink"},parse:function(a){if(!a.__parsed){a.__parsed=!0;var b=a.querySelectorAll(d.selectors);e(b,function(a){d[d.map[a.localName]](a)}),CustomElements.upgradeDocument(a),CustomElements.observeDocument(a)}},parseLink:function(a){b(a)&&this.parseImport(a)},parseImport:function(a){a.import&&d.parse(a.import)}},e=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.parser=d,a.IMPORT_LINK_TYPE=c}(window.CustomElements),function(a){function b(){CustomElements.parser.parse(document),CustomElements.upgradeDocument(document);var a=window.Platform&&Platform.endOfMicrotask?Platform.endOfMicrotask:setTimeout;a(function(){CustomElements.ready=!0,CustomElements.readyTime=Date.now(),window.HTMLImports&&(CustomElements.elapsed=CustomElements.readyTime-HTMLImports.readyTime),document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0})),window.HTMLImports&&(HTMLImports.__importsParsingHook=function(a){CustomElements.parser.parse(a.import)})})}if("function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState||a.flags.eager)b();else if("interactive"!==document.readyState||window.attachEvent||window.HTMLImports&&!window.HTMLImports.ready){var c=window.HTMLImports&&!HTMLImports.ready?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(c,b)}else b()}(window.CustomElements),function(){if(window.ShadowDOMPolyfill){var a=["upgradeAll","upgradeSubtree","observeDocument","upgradeDocument"],b={};a.forEach(function(a){b[a]=CustomElements[a]}),a.forEach(function(a){CustomElements[a]=function(c){return b[a](wrap(c))}})}}(),function(a){function b(a){this.cache=Object.create(null),this.map=Object.create(null),this.requests=0,this.regex=a}var c=a.endOfMicrotask;b.prototype={extractUrls:function(a,b){for(var c,d,e=[];c=this.regex.exec(a);)d=new URL(c[1],b),e.push({matched:c[0],url:d.href});return e},process:function(a,b,c){var d=this.extractUrls(a,b),e=c.bind(null,this.map);this.fetch(d,e)},fetch:function(a,b){var c=a.length;if(!c)return b();for(var d,e,f,g=function(){0===--c&&b()},h=0;c>h;h++)d=a[h],f=d.url,e=this.cache[f],e||(e=this.xhr(f),e.match=d,this.cache[f]=e),e.wait(g)},handleXhr:function(a){var b=a.match,c=b.url,d=a.response||a.responseText||"";this.map[c]=d,this.fetch(this.extractUrls(d,c),a.resolve)},xhr:function(a){this.requests++;var b=new XMLHttpRequest;return b.open("GET",a,!0),b.send(),b.onerror=b.onload=this.handleXhr.bind(this,b),b.pending=[],b.resolve=function(){for(var a=b.pending,c=0;c<a.length;c++)a[c]();b.pending=null},b.wait=function(a){b.pending?b.pending.push(a):c(a)},b}},a.Loader=b}(window.Platform),function(a){function b(){this.loader=new d(this.regex)}var c=a.urlResolver,d=a.Loader;b.prototype={regex:/@import\s+(?:url)?["'\(]*([^'"\)]*)['"\)]*;/g,resolve:function(a,b,c){var d=function(d){c(this.flatten(a,b,d))}.bind(this);this.loader.process(a,b,d)},resolveNode:function(a,b,c){var d=a.textContent,e=function(b){a.textContent=b,c(a)};this.resolve(d,b,e)},flatten:function(a,b,d){for(var e,f,g,h=this.loader.extractUrls(a,b),i=0;i<h.length;i++)e=h[i],f=e.url,g=c.resolveCssText(d[f],f,!0),g=this.flatten(g,b,d),a=a.replace(e.matched,g);return a},loadStyles:function(a,b,c){function d(){f++,f===g&&c&&c()}for(var e,f=0,g=a.length,h=0;g>h&&(e=a[h]);h++)this.resolveNode(e,b,d)}};var e=new b;a.styleResolver=e}(window.Platform),function(){"use strict";function a(a){for(;a.parentNode;)a=a.parentNode;return"function"==typeof a.getElementById?a:null}function b(a,b,c){var d=a.bindings_;return d||(d=a.bindings_={}),d[b]&&c[b].close(),d[b]=c}function c(a,b,c){return c}function d(a){return null==a?"":a}function e(a,b){a.data=d(b)}function f(a){return function(b){return e(a,b)}}function g(a,b,c,e){return c?void(e?a.setAttribute(b,""):a.removeAttribute(b)):void a.setAttribute(b,d(e))}function h(a,b,c){return function(d){g(a,b,c,d)}}function i(a){switch(a.type){case"checkbox":return u;case"radio":case"select-multiple":case"select-one":return"change";case"range":if(/Trident|MSIE/.test(navigator.userAgent))return"change";default:return"input"}}function j(a,b,c,e){a[b]=(e||d)(c)}function k(a,b,c){return function(d){return j(a,b,d,c)}}function l(){}function m(a,b,c,d){function e(){c.setValue(a[b]),c.discardChanges(),(d||l)(a),Platform.performMicrotaskCheckpoint()}var f=i(a);return a.addEventListener(f,e),{close:function(){a.removeEventListener(f,e),c.close()},observable_:c}}function n(a){return Boolean(a)}function o(b){if(b.form)return s(b.form.elements,function(a){return a!=b&&"INPUT"==a.tagName&&"radio"==a.type&&a.name==b.name});var c=a(b);if(!c)return[];var d=c.querySelectorAll('input[type="radio"][name="'+b.name+'"]');return s(d,function(a){return a!=b&&!a.form})}function p(a){"INPUT"===a.tagName&&"radio"===a.type&&o(a).forEach(function(a){var b=a.bindings_.checked;b&&b.observable_.setValue(!1)})}function q(a,b){var c,e,f,g=a.parentNode;g instanceof HTMLSelectElement&&g.bindings_&&g.bindings_.value&&(c=g,e=c.bindings_.value,f=c.value),a.value=d(b),c&&c.value!=f&&(e.observable_.setValue(c.value),e.observable_.discardChanges(),Platform.performMicrotaskCheckpoint())}function r(a){return function(b){q(a,b)}}var s=Array.prototype.filter.call.bind(Array.prototype.filter);Node.prototype.bind=function(a,b){console.error("Unhandled binding to Node: ",this,a,b)},Node.prototype.bindFinished=function(){};var t=c;Object.defineProperty(Platform,"enableBindingsReflection",{get:function(){return t===b},set:function(a){return t=a?b:c,a},configurable:!0}),Text.prototype.bind=function(a,b,c){if("textContent"!==a)return Node.prototype.bind.call(this,a,b,c);if(c)return e(this,b);var d=b;return e(this,d.open(f(this))),t(this,a,d)},Element.prototype.bind=function(a,b,c){var d="?"==a[a.length-1];if(d&&(this.removeAttribute(a),a=a.slice(0,-1)),c)return g(this,a,d,b);var e=b;return g(this,a,d,e.open(h(this,a,d))),t(this,a,e)};var u;!function(){var a=document.createElement("div"),b=a.appendChild(document.createElement("input"));b.setAttribute("type","checkbox");var c,d=0;b.addEventListener("click",function(){d++,c=c||"click"}),b.addEventListener("change",function(){d++,c=c||"change"});var e=document.createEvent("MouseEvent");e.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),b.dispatchEvent(e),u=1==d?"change":c}(),HTMLInputElement.prototype.bind=function(a,c,e){if("value"!==a&&"checked"!==a)return HTMLElement.prototype.bind.call(this,a,c,e);this.removeAttribute(a);var f="checked"==a?n:d,g="checked"==a?p:l;if(e)return j(this,a,c,f);var h=c,i=m(this,a,h,g);return j(this,a,h.open(k(this,a,f)),f),b(this,a,i)},HTMLTextAreaElement.prototype.bind=function(a,b,c){if("value"!==a)return HTMLElement.prototype.bind.call(this,a,b,c);if(this.removeAttribute("value"),c)return j(this,"value",b);var e=b,f=m(this,"value",e);return j(this,"value",e.open(k(this,"value",d))),t(this,a,f)},HTMLOptionElement.prototype.bind=function(a,b,c){if("value"!==a)return HTMLElement.prototype.bind.call(this,a,b,c);if(this.removeAttribute("value"),c)return q(this,b);var d=b,e=m(this,"value",d);return q(this,d.open(r(this))),t(this,a,e)},HTMLSelectElement.prototype.bind=function(a,c,d){if("selectedindex"===a&&(a="selectedIndex"),"selectedIndex"!==a&&"value"!==a)return HTMLElement.prototype.bind.call(this,a,c,d);if(this.removeAttribute(a),d)return j(this,a,c);var e=c,f=m(this,a,e);return j(this,a,e.open(k(this,a))),b(this,a,f)}}(this),function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a){for(var b;b=a.parentNode;)a=b;return a}function d(a,b){if(b){for(var d,e="#"+b;!d&&(a=c(a),a.protoContent_?d=a.protoContent_.querySelector(e):a.getElementById&&(d=a.getElementById(b)),!d&&a.templateCreator_);)a=a.templateCreator_;return d}}function e(a){return"template"==a.tagName&&"http://www.w3.org/2000/svg"==a.namespaceURI}function f(a){return"TEMPLATE"==a.tagName&&"http://www.w3.org/1999/xhtml"==a.namespaceURI}function g(a){return Boolean(L[a.tagName]&&a.hasAttribute("template"))}function h(a){return void 0===a.isTemplate_&&(a.isTemplate_="TEMPLATE"==a.tagName||g(a)),a.isTemplate_}function i(a,b){var c=a.querySelectorAll(N);h(a)&&b(a),G(c,b)}function j(a){function b(a){HTMLTemplateElement.decorate(a)||j(a.content)}i(a,b)}function k(a,b){Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))})}function l(a){var b=a.ownerDocument;if(!b.defaultView)return b;var c=b.templateContentsOwner_;if(!c){for(c=b.implementation.createHTMLDocument("");c.lastChild;)c.removeChild(c.lastChild);b.templateContentsOwner_=c}return c}function m(a){if(!a.stagingDocument_){var b=a.ownerDocument;if(!b.stagingDocument_){b.stagingDocument_=b.implementation.createHTMLDocument(""),b.stagingDocument_.isStagingDocument=!0;var c=b.stagingDocument_.createElement("base");c.href=document.baseURI,b.stagingDocument_.head.appendChild(c),b.stagingDocument_.stagingDocument_=b.stagingDocument_}a.stagingDocument_=b.stagingDocument_}return a.stagingDocument_}function n(a){var b=a.ownerDocument.createElement("template");a.parentNode.insertBefore(b,a);for(var c=a.attributes,d=c.length;d-->0;){var e=c[d];K[e.name]&&("template"!==e.name&&b.setAttribute(e.name,e.value),a.removeAttribute(e.name))}return b}function o(a){var b=a.ownerDocument.createElement("template");a.parentNode.insertBefore(b,a);for(var c=a.attributes,d=c.length;d-->0;){var e=c[d];b.setAttribute(e.name,e.value),a.removeAttribute(e.name)}return a.parentNode.removeChild(a),b}function p(a,b,c){var d=a.content;if(c)return void d.appendChild(b);for(var e;e=b.firstChild;)d.appendChild(e)}function q(a){P?a.__proto__=HTMLTemplateElement.prototype:k(a,HTMLTemplateElement.prototype)}function r(a){a.setModelFn_||(a.setModelFn_=function(){a.setModelFnScheduled_=!1;var b=z(a,a.delegate_&&a.delegate_.prepareBinding);w(a,b,a.model_)}),a.setModelFnScheduled_||(a.setModelFnScheduled_=!0,Observer.runEOM_(a.setModelFn_))}function s(a,b,c,d){if(a&&a.length){for(var e,f=a.length,g=0,h=0,i=0,j=!0;f>h;){var g=a.indexOf("{{",h),k=a.indexOf("[[",h),l=!1,m="}}";if(k>=0&&(0>g||g>k)&&(g=k,l=!0,m="]]"),i=0>g?-1:a.indexOf(m,g+2),0>i){if(!e)return;e.push(a.slice(h));break}e=e||[],e.push(a.slice(h,g));var n=a.slice(g+2,i).trim();e.push(l),j=j&&l;var o=d&&d(n,b,c);e.push(null==o?Path.get(n):null),e.push(o),h=i+2}return h===f&&e.push(""),e.hasOnePath=5===e.length,e.isSimplePath=e.hasOnePath&&""==e[0]&&""==e[4],e.onlyOneTime=j,e.combinator=function(a){for(var b=e[0],c=1;c<e.length;c+=4){var d=e.hasOnePath?a:a[(c-1)/4];void 0!==d&&(b+=d),b+=e[c+3]}return b},e}}function t(a,b,c,d){if(b.hasOnePath){var e=b[3],f=e?e(d,c,!0):b[2].getValueFrom(d);return b.isSimplePath?f:b.combinator(f)}for(var g=[],h=1;h<b.length;h+=4){var e=b[h+2];g[(h-1)/4]=e?e(d,c):b[h+1].getValueFrom(d)}return b.combinator(g)}function u(a,b,c,d){var e=b[3],f=e?e(d,c,!1):new PathObserver(d,b[2]);return b.isSimplePath?f:new ObserverTransform(f,b.combinator)}function v(a,b,c,d){if(b.onlyOneTime)return t(a,b,c,d);if(b.hasOnePath)return u(a,b,c,d);for(var e=new CompoundObserver,f=1;f<b.length;f+=4){var g=b[f],h=b[f+2];if(h){var i=h(d,c,g);g?e.addPath(i):e.addObserver(i)}else{var j=b[f+1];g?e.addPath(j.getValueFrom(d)):e.addPath(d,j)}}return new ObserverTransform(e,b.combinator)}function w(a,b,c,d){for(var e=0;e<b.length;e+=2){var f=b[e],g=b[e+1],h=v(f,g,a,c),i=a.bind(f,h,g.onlyOneTime);i&&d&&d.push(i)}if(a.bindFinished(),b.isTemplate){a.model_=c;var j=a.processBindingDirectives_(b);d&&j&&d.push(j)}}function x(a,b,c){var d=a.getAttribute(b);return s(""==d?"{{}}":d,b,a,c)}function y(a,c){b(a);for(var d=[],e=0;e<a.attributes.length;e++){for(var f=a.attributes[e],g=f.name,i=f.value;"_"===g[0];)g=g.substring(1);if(!h(a)||g!==J&&g!==H&&g!==I){var j=s(i,g,a,c);j&&d.push(g,j)}}return h(a)&&(d.isTemplate=!0,d.if=x(a,J,c),d.bind=x(a,H,c),d.repeat=x(a,I,c),!d.if||d.bind||d.repeat||(d.bind=s("{{}}",H,a,c))),d}function z(a,b){if(a.nodeType===Node.ELEMENT_NODE)return y(a,b);if(a.nodeType===Node.TEXT_NODE){var c=s(a.data,"textContent",a,b);if(c)return["textContent",c]}return[]}function A(a,b,c,d,e,f,g){for(var h=b.appendChild(c.importNode(a,!1)),i=0,j=a.firstChild;j;j=j.nextSibling)A(j,h,c,d.children[i++],e,f,g);return d.isTemplate&&(HTMLTemplateElement.decorate(h,a),f&&h.setDelegate_(f)),w(h,d,e,g),h}function B(a,b){var c=z(a,b);c.children={};for(var d=0,e=a.firstChild;e;e=e.nextSibling)c.children[d++]=B(e,b);return c}function C(a){var b=a.id_;return b||(b=a.id_=S++),b}function D(a,b){var c=C(a);if(b){var d=b.bindingMaps[c];return d||(d=b.bindingMaps[c]=B(a,b.prepareBinding)||[]),d}var d=a.bindingMap_;return d||(d=a.bindingMap_=B(a,void 0)||[]),d}function E(a){this.closed=!1,this.templateElement_=a,this.instances=[],this.deps=void 0,this.iteratedValue=[],this.presentValue=void 0,this.arrayObserver=void 0}var F,G=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.Map&&"function"==typeof a.Map.prototype.forEach?F=a.Map:(F=function(){this.keys=[],this.values=[]},F.prototype={set:function(a,b){var c=this.keys.indexOf(a);0>c?(this.keys.push(a),this.values.push(b)):this.values[c]=b},get:function(a){var b=this.keys.indexOf(a);if(!(0>b))return this.values[b]},"delete":function(a){var b=this.keys.indexOf(a);return 0>b?!1:(this.keys.splice(b,1),this.values.splice(b,1),!0)},forEach:function(a,b){for(var c=0;c<this.keys.length;c++)a.call(b||this,this.values[c],this.keys[c],this)}});"function"!=typeof document.contains&&(Document.prototype.contains=function(a){return a===this||a.parentNode===this?!0:this.documentElement.contains(a)});var H="bind",I="repeat",J="if",K={template:!0,repeat:!0,bind:!0,ref:!0},L={THEAD:!0,TBODY:!0,TFOOT:!0,TH:!0,TR:!0,TD:!0,COLGROUP:!0,COL:!0,CAPTION:!0,OPTION:!0,OPTGROUP:!0},M="undefined"!=typeof HTMLTemplateElement;M&&!function(){var a=document.createElement("template"),b=a.content.ownerDocument,c=b.appendChild(b.createElement("html")),d=c.appendChild(b.createElement("head")),e=b.createElement("base");e.href=document.baseURI,d.appendChild(e)}();var N="template, "+Object.keys(L).map(function(a){return a.toLowerCase()+"[template]"}).join(", ");document.addEventListener("DOMContentLoaded",function(){j(document),Platform.performMicrotaskCheckpoint()},!1),M||(a.HTMLTemplateElement=function(){throw TypeError("Illegal constructor")});var O,P="__proto__"in{};"function"==typeof MutationObserver&&(O=new MutationObserver(function(a){for(var b=0;b<a.length;b++)a[b].target.refChanged_()})),HTMLTemplateElement.decorate=function(a,c){if(a.templateIsDecorated_)return!1;var d=a;d.templateIsDecorated_=!0;var h=f(d)&&M,i=h,k=!h,m=!1;if(h||(g(d)?(b(!c),d=n(a),d.templateIsDecorated_=!0,h=M,m=!0):e(d)&&(d=o(a),d.templateIsDecorated_=!0,h=M)),!h){q(d);var r=l(d);d.content_=r.createDocumentFragment()}return c?d.instanceRef_=c:k?p(d,a,m):i&&j(d.content),!0},HTMLTemplateElement.bootstrap=j;var Q=a.HTMLUnknownElement||HTMLElement,R={get:function(){return this.content_},enumerable:!0,configurable:!0};M||(HTMLTemplateElement.prototype=Object.create(Q.prototype),Object.defineProperty(HTMLTemplateElement.prototype,"content",R)),k(HTMLTemplateElement.prototype,{bind:function(a,b,c){if("ref"!=a)return Element.prototype.bind.call(this,a,b,c);var d=this,e=c?b:b.open(function(a){d.setAttribute("ref",a),d.refChanged_()});return this.setAttribute("ref",e),this.refChanged_(),c?void 0:(this.bindings_?this.bindings_.ref=b:this.bindings_={ref:b},b)},processBindingDirectives_:function(a){return this.iterator_&&this.iterator_.closeDeps(),a.if||a.bind||a.repeat?(this.iterator_||(this.iterator_=new E(this)),this.iterator_.updateDependencies(a,this.model_),O&&O.observe(this,{attributes:!0,attributeFilter:["ref"]}),this.iterator_):void(this.iterator_&&(this.iterator_.close(),this.iterator_=void 0))},createInstance:function(a,b,c){b?c=this.newDelegate_(b):c||(c=this.delegate_),this.refContent_||(this.refContent_=this.ref_.content);var d=this.refContent_;if(null===d.firstChild)return T;var e=D(d,c),f=m(this),g=f.createDocumentFragment();g.templateCreator_=this,g.protoContent_=d,g.bindings_=[],g.terminator_=null;for(var h=g.templateInstance_={firstNode:null,lastNode:null,model:a},i=0,j=!1,k=d.firstChild;k;k=k.nextSibling){null===k.nextSibling&&(j=!0);var l=A(k,g,f,e.children[i++],a,c,g.bindings_);l.templateInstance_=h,j&&(g.terminator_=l)}return h.firstNode=g.firstChild,h.lastNode=g.lastChild,g.templateCreator_=void 0,g.protoContent_=void 0,g},get model(){return this.model_},set model(a){this.model_=a,r(this)},get bindingDelegate(){return this.delegate_&&this.delegate_.raw},refChanged_:function(){this.iterator_&&this.refContent_!==this.ref_.content&&(this.refContent_=void 0,this.iterator_.valueChanged(),this.iterator_.updateIteratedValue())},clear:function(){this.model_=void 0,this.delegate_=void 0,this.bindings_&&this.bindings_.ref&&this.bindings_.ref.close(),this.refContent_=void 0,this.iterator_&&(this.iterator_.valueChanged(),this.iterator_.close(),this.iterator_=void 0)},setDelegate_:function(a){this.delegate_=a,this.bindingMap_=void 0,this.iterator_&&(this.iterator_.instancePositionChangedFn_=void 0,this.iterator_.instanceModelFn_=void 0)},newDelegate_:function(a){function b(b){var c=a&&a[b];if("function"==typeof c)return function(){return c.apply(a,arguments)}}if(a)return{bindingMaps:{},raw:a,prepareBinding:b("prepareBinding"),prepareInstanceModel:b("prepareInstanceModel"),prepareInstancePositionChanged:b("prepareInstancePositionChanged")}},set bindingDelegate(a){if(this.delegate_)throw Error("Template must be cleared before a new bindingDelegate can be assigned");this.setDelegate_(this.newDelegate_(a))},get ref_(){var a=d(this,this.getAttribute("ref"));if(a||(a=this.instanceRef_),!a)return this;var b=a.ref_;return b?b:a}});var S=1;Object.defineProperty(Node.prototype,"templateInstance",{get:function(){var a=this.templateInstance_;return a?a:this.parentNode?this.parentNode.templateInstance:void 0}});var T=document.createDocumentFragment();T.bindings_=[],T.terminator_=null,E.prototype={closeDeps:function(){var a=this.deps;a&&(a.ifOneTime===!1&&a.ifValue.close(),a.oneTime===!1&&a.value.close())},updateDependencies:function(a,b){this.closeDeps();var c=this.deps={},d=this.templateElement_;if(a.if){if(c.hasIf=!0,c.ifOneTime=a.if.onlyOneTime,c.ifValue=v(J,a.if,d,b),c.ifOneTime&&!c.ifValue)return void this.updateIteratedValue();c.ifOneTime||c.ifValue.open(this.updateIteratedValue,this)}a.repeat?(c.repeat=!0,c.oneTime=a.repeat.onlyOneTime,c.value=v(I,a.repeat,d,b)):(c.repeat=!1,c.oneTime=a.bind.onlyOneTime,c.value=v(H,a.bind,d,b)),c.oneTime||c.value.open(this.updateIteratedValue,this),this.updateIteratedValue()},updateIteratedValue:function(){if(this.deps.hasIf){var a=this.deps.ifValue;if(this.deps.ifOneTime||(a=a.discardChanges()),!a)return void this.valueChanged()}var b=this.deps.value;this.deps.oneTime||(b=b.discardChanges()),this.deps.repeat||(b=[b]);var c=this.deps.repeat&&!this.deps.oneTime&&Array.isArray(b);this.valueChanged(b,c)},valueChanged:function(a,b){Array.isArray(a)||(a=[]),a!==this.iteratedValue&&(this.unobserve(),this.presentValue=a,b&&(this.arrayObserver=new ArrayObserver(this.presentValue),this.arrayObserver.open(this.handleSplices,this)),this.handleSplices(ArrayObserver.calculateSplices(this.presentValue,this.iteratedValue)))},getLastInstanceNode:function(a){if(-1==a)return this.templateElement_;var b=this.instances[a],c=b.terminator_;if(!c)return this.getLastInstanceNode(a-1);if(c.nodeType!==Node.ELEMENT_NODE||this.templateElement_===c)return c;var d=c.iterator_;return d?d.getLastTemplateNode():c},getLastTemplateNode:function(){return this.getLastInstanceNode(this.instances.length-1)},insertInstanceAt:function(a,b){var c=this.getLastInstanceNode(a-1),d=this.templateElement_.parentNode;this.instances.splice(a,0,b),d.insertBefore(b,c.nextSibling)},extractInstanceAt:function(a){for(var b=this.getLastInstanceNode(a-1),c=this.getLastInstanceNode(a),d=this.templateElement_.parentNode,e=this.instances.splice(a,1)[0];c!==b;){var f=b.nextSibling;f==c&&(c=b),e.appendChild(d.removeChild(f))}return e},getDelegateFn:function(a){return a=a&&a(this.templateElement_),"function"==typeof a?a:null},handleSplices:function(a){if(!this.closed&&a.length){var b=this.templateElement_;if(!b.parentNode)return void this.close();ArrayObserver.applySplices(this.iteratedValue,this.presentValue,a);var c=b.delegate_;void 0===this.instanceModelFn_&&(this.instanceModelFn_=this.getDelegateFn(c&&c.prepareInstanceModel)),void 0===this.instancePositionChangedFn_&&(this.instancePositionChangedFn_=this.getDelegateFn(c&&c.prepareInstancePositionChanged));for(var d=new F,e=0,f=0;f<a.length;f++){for(var g=a[f],h=g.removed,i=0;i<h.length;i++){var j=h[i],k=this.extractInstanceAt(g.index+e);k!==T&&d.set(j,k)}e-=g.addedCount}for(var f=0;f<a.length;f++)for(var g=a[f],l=g.index;l<g.index+g.addedCount;l++){var j=this.iteratedValue[l],k=d.get(j);k?d.delete(j):(this.instanceModelFn_&&(j=this.instanceModelFn_(j)),k=void 0===j?T:b.createInstance(j,void 0,c)),this.insertInstanceAt(l,k)}d.forEach(function(a){this.closeInstanceBindings(a)},this),this.instancePositionChangedFn_&&this.reportInstancesMoved(a)}},reportInstanceMoved:function(a){var b=this.instances[a];b!==T&&this.instancePositionChangedFn_(b.templateInstance_,a)},reportInstancesMoved:function(a){for(var b=0,c=0,d=0;d<a.length;d++){var e=a[d];if(0!=c)for(;b<e.index;)this.reportInstanceMoved(b),b++;else b=e.index;for(;b<e.index+e.addedCount;)this.reportInstanceMoved(b),b++;c+=e.addedCount-e.removed.length}if(0!=c)for(var f=this.instances.length;f>b;)this.reportInstanceMoved(b),b++},closeInstanceBindings:function(a){for(var b=a.bindings_,c=0;c<b.length;c++)b[c].close()},unobserve:function(){this.arrayObserver&&(this.arrayObserver.close(),this.arrayObserver=void 0)},close:function(){if(!this.closed){this.unobserve();for(var a=0;a<this.instances.length;a++)this.closeInstanceBindings(this.instances[a]);this.instances.length=0,this.closeDeps(),this.templateElement_.iterator_=void 0,this.closed=!0}}},HTMLTemplateElement.forAllTemplatesFrom_=i}(this),function(a){function b(){e||(e=!0,a.endOfMicrotask(function(){e=!1,logFlags.data&&console.group("Platform.flush()"),a.performMicrotaskCheckpoint(),logFlags.data&&console.groupEnd()}))}var c=document.createElement("style");c.textContent="template {display: none !important;} /* injected by platform.js */";var d=document.querySelector("head");d.insertBefore(c,d.firstChild);var e;if(Observer.hasObjectObserve)b=function(){};else{var f=125;window.addEventListener("WebComponentsReady",function(){b(),a.flushPoll=setInterval(b,f)})}if(window.CustomElements&&!CustomElements.useNative){var g=Document.prototype.importNode;Document.prototype.importNode=function(a,b){var c=g.call(this,a,b);return CustomElements.upgradeAll(c),c}}a.flush=b}(window.Platform);
+window.Platform=window.Platform||{},window.logFlags=window.logFlags||{},function(a){var b=a.flags||{};location.search.slice(1).split("&").forEach(function(a){a=a.split("="),a[0]&&(b[a[0]]=a[1]||!0)});var c=document.currentScript||document.querySelector('script[src*="platform.js"]');if(c)for(var d,e=c.attributes,f=0;f<e.length;f++)d=e[f],"src"!==d.name&&(b[d.name]=d.value||!0);b.log&&b.log.split(",").forEach(function(a){window.logFlags[a]=!0}),b.shadow=b.shadow||b.shadowdom||b.polyfill,b.shadow="native"===b.shadow?!1:b.shadow||!HTMLElement.prototype.createShadowRoot,b.shadow&&document.querySelectorAll("script").length>1&&console.warn("platform.js is not the first script on the page. See http://www.polymer-project.org/docs/start/platform.html#setup for details."),b.register&&(window.CustomElements=window.CustomElements||{flags:{}},window.CustomElements.flags.register=b.register),b.imports&&(window.HTMLImports=window.HTMLImports||{flags:{}},window.HTMLImports.flags.imports=b.imports),a.flags=b}(Platform),"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){var b=a[this.name];if(!b)return!1;var c=b[0]===a;return b[0]=b[1]=void 0,c},has:function(a){var b=a[this.name];return b?b[0]===a:!1}},window.WeakMap=c}(),function(global){"use strict";function detectObjectObserve(){function a(a){b=a}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=[],c={},d=[];return Object.observe(c,a),Array.observe(d,a),c.id=1,c.id=2,delete c.id,d.push(1,2),d.length=0,Object.deliverChangeRecords(a),5!==b.length?!1:"add"!=b[0].type||"update"!=b[1].type||"delete"!=b[2].type||"splice"!=b[3].type||"splice"!=b[4].type?!1:(Object.unobserve(c,a),Array.unobserve(d,a),!0)}function detectEval(){if("undefined"!=typeof chrome&&chrome.app&&chrome.app.runtime)return!1;if(navigator.getDeviceStorage)return!1;try{var a=new Function("","return true;");return a()}catch(b){return!1}}function isIndex(a){return+a===a>>>0}function toNumber(a){return+a}function isObject(a){return a===Object(a)}function areSameValue(a,b){return a===b?0!==a||1/a===1/b:numberIsNaN(a)&&numberIsNaN(b)?!0:a!==a&&b!==b}function getPathCharType(a){if(void 0===a)return"eof";var b=a.charCodeAt(0);switch(b){case 91:case 93:case 46:case 34:case 39:case 48:return a;case 95:case 36:return"ident";case 32:case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"ws"}return b>=97&&122>=b||b>=65&&90>=b?"ident":b>=49&&57>=b?"number":"else"}function noop(){}function parsePath(a){function b(){if(!(k>=a.length)){var b=a[k+1];return"inSingleQuote"==l&&"'"==b||"inDoubleQuote"==l&&'"'==b?(k++,d=b,m.append(),!0):void 0}}for(var c,d,e,f,g,h,i,j=[],k=-1,l="beforePath",m={push:function(){void 0!==e&&(j.push(e),e=void 0)},append:function(){void 0===e?e=d:e+=d}};l;)if(k++,c=a[k],"\\"!=c||!b(l)){if(f=getPathCharType(c),i=pathStateMachine[l],g=i[f]||i["else"]||"error","error"==g)return;if(l=g[0],h=m[g[1]]||noop,d=void 0===g[2]?c:g[2],h(),"afterPath"===l)return j}}function isIdent(a){return identRegExp.test(a)}function Path(a,b){if(b!==constructorIsPrivate)throw Error("Use Path.get to retrieve path objects");for(var c=0;c<a.length;c++)this.push(String(a[c]));hasEval&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn())}function getPath(a){if(a instanceof Path)return a;if((null==a||0==a.length)&&(a=""),"string"!=typeof a){if(isIndex(a.length))return new Path(a,constructorIsPrivate);a=String(a)}var b=pathCache[a];if(b)return b;var c=parsePath(a);if(!c)return invalidPath;var b=new Path(c,constructorIsPrivate);return pathCache[a]=b,b}function formatAccessor(a){return isIndex(a)?"["+a+"]":'["'+a.replace(/"/g,'\\"')+'"]'}function dirtyCheck(a){for(var b=0;MAX_DIRTY_CHECK_CYCLES>b&&a.check_();)b++;return testingExposeCycleCount&&(global.dirtyCheckCycleCount=b),b>0}function objectIsEmpty(a){for(var b in a)return!1;return!0}function diffIsEmpty(a){return objectIsEmpty(a.added)&&objectIsEmpty(a.removed)&&objectIsEmpty(a.changed)}function diffObjectFromOldObject(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 runEOMTasks(){if(!eomTasks.length)return!1;for(var a=0;a<eomTasks.length;a++)eomTasks[a]();return eomTasks.length=0,!0}function newObservedObject(){function a(a){b&&b.state_===OPENED&&!d&&b.check_(a)}var b,c,d=!1,e=!0;return{open:function(c){if(b)throw Error("ObservedObject in use");e||Object.deliverChangeRecords(a),b=c,e=!1},observe:function(b,d){c=b,d?Array.observe(c,a):Object.observe(c,a)},deliver:function(b){d=b,Object.deliverChangeRecords(a),d=!1},close:function(){b=void 0,Object.unobserve(c,a),observedObjectCache.push(this)}}}function getObservedObject(a,b,c){var d=observedObjectCache.pop()||newObservedObject();return d.open(a),d.observe(b,c),d}function newObservedSet(){function a(b,f){b&&(b===d&&(e[f]=!0),h.indexOf(b)<0&&(h.push(b),Object.observe(b,c)),a(Object.getPrototypeOf(b),f))}function b(a){for(var b=0;b<a.length;b++){var c=a[b];if(c.object!==d||e[c.name]||"setPrototype"===c.type)return!1}return!0}function c(c){if(!b(c)){for(var d,e=0;e<g.length;e++)d=g[e],d.state_==OPENED&&d.iterateObjects_(a);for(var e=0;e<g.length;e++)d=g[e],d.state_==OPENED&&d.check_()}}var d,e,f=0,g=[],h=[],i={object:void 0,objects:h,open:function(b,c){d||(d=c,e={}),g.push(b),f++,b.iterateObjects_(a)},close:function(){if(f--,!(f>0)){for(var a=0;a<h.length;a++)Object.unobserve(h[a],c),Observer.unobservedCount++;g.length=0,h.length=0,d=void 0,e=void 0,observedSetCache.push(this)}}};return i}function getObservedSet(a,b){return lastObservedSet&&lastObservedSet.object===b||(lastObservedSet=observedSetCache.pop()||newObservedSet(),lastObservedSet.object=b),lastObservedSet.open(a,b),lastObservedSet}function Observer(){this.state_=UNOPENED,this.callback_=void 0,this.target_=void 0,this.directObserver_=void 0,this.value_=void 0,this.id_=nextObserverId++}function addToAll(a){Observer._allObserversCount++,collectObservers&&allObservers.push(a)}function removeFromAll(){Observer._allObserversCount--}function ObjectObserver(a){Observer.call(this),this.value_=a,this.oldObject_=void 0}function ArrayObserver(a){if(!Array.isArray(a))throw Error("Provided object is not an Array");ObjectObserver.call(this,a)}function PathObserver(a,b){Observer.call(this),this.object_=a,this.path_=getPath(b),this.directObserver_=void 0}function CompoundObserver(a){Observer.call(this),this.reportChangesOnOpen_=a,this.value_=[],this.directObserver_=void 0,this.observed_=[]}function identFn(a){return a}function ObserverTransform(a,b,c,d){this.callback_=void 0,this.target_=void 0,this.value_=void 0,this.observable_=a,this.getValueFn_=b||identFn,this.setValueFn_=c||identFn,this.dontPassThroughSet_=d}function diffObjectFromChangeRecords(a,b,c){for(var d={},e={},f=0;f<b.length;f++){var g=b[f];expectedRecordTypes[g.type]?(g.name in c||(c[g.name]=g.oldValue),"update"!=g.type&&("add"!=g.type?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 newSplice(a,b,c){return{index:a,removed:b,addedCount:c}}function ArraySplice(){}function calcSplices(a,b,c,d,e,f){return arraySplice.calcSplices(a,b,c,d,e,f)}function intersect(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 mergeSplice(a,b,c,d){for(var e=newSplice(b,c,d),f=!1,g=0,h=0;h<a.length;h++){var i=a[h];if(i.index+=g,!f){var j=intersect(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 createInitialSplices(a,b){for(var c=[],d=0;d<b.length;d++){var e=b[d];switch(e.type){case"splice":mergeSplice(c,e.index,e.removed.slice(),e.addedCount);break;case"add":case"update":case"delete":if(!isIndex(e.name))continue;var f=toNumber(e.name);if(0>f)continue;mergeSplice(c,f,[e.oldValue],1);break;default:console.error("Unexpected record type: "+JSON.stringify(e))}}return c}function projectArraySplices(a,b){var c=[];return createInitialSplices(a,b).forEach(function(b){return 1==b.addedCount&&1==b.removed.length?void(b.removed[0]!==a[b.index]&&c.push(b)):void(c=c.concat(calcSplices(a,b.index,b.index+b.addedCount,b.removed,0,b.removed.length)))}),c}var testingExposeCycleCount=global.testingExposeCycleCount,hasObserve=detectObjectObserve(),hasEval=detectEval(),numberIsNaN=global.Number.isNaN||function(a){return"number"==typeof a&&global.isNaN(a)},createObject="__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},identStart="[$_a-zA-Z]",identPart="[$_a-zA-Z0-9]",identRegExp=new RegExp("^"+identStart+"+"+identPart+"*$"),pathStateMachine={beforePath:{ws:["beforePath"],ident:["inIdent","append"],"[":["beforeElement"],eof:["afterPath"]},inPath:{ws:["inPath"],".":["beforeIdent"],"[":["beforeElement"],eof:["afterPath"]},beforeIdent:{ws:["beforeIdent"],ident:["inIdent","append"]},inIdent:{ident:["inIdent","append"],0:["inIdent","append"],number:["inIdent","append"],ws:["inPath","push"],".":["beforeIdent","push"],"[":["beforeElement","push"],eof:["afterPath","push"]},beforeElement:{ws:["beforeElement"],0:["afterZero","append"],number:["inIndex","append"],"'":["inSingleQuote","append",""],'"':["inDoubleQuote","append",""]},afterZero:{ws:["afterElement","push"],"]":["inPath","push"]},inIndex:{0:["inIndex","append"],number:["inIndex","append"],ws:["afterElement"],"]":["inPath","push"]},inSingleQuote:{"'":["afterElement"],eof:["error"],"else":["inSingleQuote","append"]},inDoubleQuote:{'"':["afterElement"],eof:["error"],"else":["inDoubleQuote","append"]},afterElement:{ws:["afterElement"],"]":["inPath","push"]}},constructorIsPrivate={},pathCache={};Path.get=getPath,Path.prototype=createObject({__proto__:[],valid:!0,toString:function(){for(var a="",b=0;b<this.length;b++){var c=this[b];a+=isIdent(c)?b?"."+c:c:formatAccessor(c)}return a},getValueFrom:function(a){for(var b=0;b<this.length;b++){if(null==a)return;a=a[this[b]]}return a},iterateObjects:function(a,b){for(var c=0;c<this.length;c++){if(c&&(a=a[this[c-1]]),!isObject(a))return;b(a,this[0])}},compiledGetValueFromFn:function(){var a="",b="obj";a+="if (obj != null";for(var c,d=0;d<this.length-1;d++)c=this[d],b+=isIdent(c)?"."+c:formatAccessor(c),a+=" &&\n     "+b+" != null";a+=")\n";var c=this[d];return b+=isIdent(c)?"."+c:formatAccessor(c),a+="  return "+b+";\nelse\n  return undefined;",new Function("obj",a)},setValueFrom:function(a,b){if(!this.length)return!1;for(var c=0;c<this.length-1;c++){if(!isObject(a))return!1;a=a[this[c]]}return isObject(a)?(a[this[c]]=b,!0):!1}});var invalidPath=new Path("",constructorIsPrivate);invalidPath.valid=!1,invalidPath.getValueFrom=invalidPath.setValueFrom=function(){};var MAX_DIRTY_CHECK_CYCLES=1e3,eomTasks=[],runEOM=hasObserve?function(){var a={pingPong:!0},b=!1;return Object.observe(a,function(){runEOMTasks(),b=!1}),function(c){eomTasks.push(c),b||(b=!0,a.pingPong=!a.pingPong)}}():function(){return function(a){eomTasks.push(a)}}(),observedObjectCache=[],observedSetCache=[],lastObservedSet,UNOPENED=0,OPENED=1,CLOSED=2,RESETTING=3,nextObserverId=1;Observer.prototype={open:function(a,b){if(this.state_!=UNOPENED)throw Error("Observer has already been opened.");return addToAll(this),this.callback_=a,this.target_=b,this.connect_(),this.state_=OPENED,this.value_},close:function(){this.state_==OPENED&&(removeFromAll(this),this.disconnect_(),this.value_=void 0,this.callback_=void 0,this.target_=void 0,this.state_=CLOSED)},deliver:function(){this.state_==OPENED&&dirtyCheck(this)},report_:function(a){try{this.callback_.apply(this.target_,a)}catch(b){Observer._errorThrownDuringCallback=!0,console.error("Exception caught during observer callback: "+(b.stack||b))}},discardChanges:function(){return this.check_(void 0,!0),this.value_}};var collectObservers=!hasObserve,allObservers;Observer._allObserversCount=0,collectObservers&&(allObservers=[]);var runningMicrotaskCheckpoint=!1,hasDebugForceFullDelivery=hasObserve&&hasEval&&function(){try{return eval("%RunMicrotasks()"),!0}catch(ex){return!1}}();global.Platform=global.Platform||{},global.Platform.performMicrotaskCheckpoint=function(){if(!runningMicrotaskCheckpoint){if(hasDebugForceFullDelivery)return void eval("%RunMicrotasks()");if(collectObservers){runningMicrotaskCheckpoint=!0;var cycles=0,anyChanged,toCheck;do{cycles++,toCheck=allObservers,allObservers=[],anyChanged=!1;for(var i=0;i<toCheck.length;i++){var observer=toCheck[i];observer.state_==OPENED&&(observer.check_()&&(anyChanged=!0),allObservers.push(observer))}runEOMTasks()&&(anyChanged=!0)}while(MAX_DIRTY_CHECK_CYCLES>cycles&&anyChanged);testingExposeCycleCount&&(global.dirtyCheckCycleCount=cycles),runningMicrotaskCheckpoint=!1}}},collectObservers&&(global.Platform.clearObservers=function(){allObservers=[]}),ObjectObserver.prototype=createObject({__proto__:Observer.prototype,arrayObserve:!1,connect_:function(){hasObserve?this.directObserver_=getObservedObject(this,this.value_,this.arrayObserve):this.oldObject_=this.copyObject(this.value_)},copyObject:function(a){var b=Array.isArray(a)?[]:{};for(var c in a)b[c]=a[c];return Array.isArray(a)&&(b.length=a.length),b},check_:function(a){var b,c;if(hasObserve){if(!a)return!1;c={},b=diffObjectFromChangeRecords(this.value_,a,c)}else c=this.oldObject_,b=diffObjectFromOldObject(this.value_,this.oldObject_);return diffIsEmpty(b)?!1:(hasObserve||(this.oldObject_=this.copyObject(this.value_)),this.report_([b.added||{},b.removed||{},b.changed||{},function(a){return c[a]}]),!0)},disconnect_:function(){hasObserve?(this.directObserver_.close(),this.directObserver_=void 0):this.oldObject_=void 0},deliver:function(){this.state_==OPENED&&(hasObserve?this.directObserver_.deliver(!1):dirtyCheck(this))},discardChanges:function(){return this.directObserver_?this.directObserver_.deliver(!0):this.oldObject_=this.copyObject(this.value_),this.value_}}),ArrayObserver.prototype=createObject({__proto__:ObjectObserver.prototype,arrayObserve:!0,copyObject:function(a){return a.slice()},check_:function(a){var b;if(hasObserve){if(!a)return!1;b=projectArraySplices(this.value_,a)}else b=calcSplices(this.value_,0,this.value_.length,this.oldObject_,0,this.oldObject_.length);return b&&b.length?(hasObserve||(this.oldObject_=this.copyObject(this.value_)),this.report_([b]),!0):!1}}),ArrayObserver.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)})},PathObserver.prototype=createObject({__proto__:Observer.prototype,get path(){return this.path_},connect_:function(){hasObserve&&(this.directObserver_=getObservedSet(this,this.object_)),this.check_(void 0,!0)},disconnect_:function(){this.value_=void 0,this.directObserver_&&(this.directObserver_.close(this),this.directObserver_=void 0)},iterateObjects_:function(a){this.path_.iterateObjects(this.object_,a)},check_:function(a,b){var c=this.value_;return this.value_=this.path_.getValueFrom(this.object_),b||areSameValue(this.value_,c)?!1:(this.report_([this.value_,c,this]),!0)},setValue:function(a){this.path_&&this.path_.setValueFrom(this.object_,a)}});var observerSentinel={};CompoundObserver.prototype=createObject({__proto__:Observer.prototype,connect_:function(){if(hasObserve){for(var a,b=!1,c=0;c<this.observed_.length;c+=2)if(a=this.observed_[c],a!==observerSentinel){b=!0;break}b&&(this.directObserver_=getObservedSet(this,a))}this.check_(void 0,!this.reportChangesOnOpen_)},disconnect_:function(){for(var a=0;a<this.observed_.length;a+=2)this.observed_[a]===observerSentinel&&this.observed_[a+1].close();this.observed_.length=0,this.value_.length=0,this.directObserver_&&(this.directObserver_.close(this),this.directObserver_=void 0)},addPath:function(a,b){if(this.state_!=UNOPENED&&this.state_!=RESETTING)throw Error("Cannot add paths once started.");var b=getPath(b);if(this.observed_.push(a,b),this.reportChangesOnOpen_){var c=this.observed_.length/2-1;this.value_[c]=b.getValueFrom(a)}},addObserver:function(a){if(this.state_!=UNOPENED&&this.state_!=RESETTING)throw Error("Cannot add observers once started.");if(this.observed_.push(observerSentinel,a),this.reportChangesOnOpen_){var b=this.observed_.length/2-1;this.value_[b]=a.open(this.deliver,this)}},startReset:function(){if(this.state_!=OPENED)throw Error("Can only reset while open");this.state_=RESETTING,this.disconnect_()},finishReset:function(){if(this.state_!=RESETTING)throw Error("Can only finishReset after startReset");return this.state_=OPENED,this.connect_(),this.value_},iterateObjects_:function(a){for(var b,c=0;c<this.observed_.length;c+=2)b=this.observed_[c],b!==observerSentinel&&this.observed_[c+1].iterateObjects(b,a)},check_:function(a,b){for(var c,d=0;d<this.observed_.length;d+=2){var e,f=this.observed_[d],g=this.observed_[d+1];if(f===observerSentinel){var h=g;e=this.state_===UNOPENED?h.open(this.deliver,this):h.discardChanges()}else e=g.getValueFrom(f);b?this.value_[d/2]=e:areSameValue(e,this.value_[d/2])||(c=c||[],c[d/2]=this.value_[d/2],this.value_[d/2]=e)}return c?(this.report_([this.value_,c,this.observed_]),!0):!1}}),ObserverTransform.prototype={open:function(a,b){return this.callback_=a,this.target_=b,this.value_=this.getValueFn_(this.observable_.open(this.observedCallback_,this)),this.value_},observedCallback_:function(a){if(a=this.getValueFn_(a),!areSameValue(a,this.value_)){var b=this.value_;this.value_=a,this.callback_.call(this.target_,this.value_,b)}},discardChanges:function(){return this.value_=this.getValueFn_(this.observable_.discardChanges()),this.value_},deliver:function(){return this.observable_.deliver()},setValue:function(a){return a=this.setValueFn_(a),!this.dontPassThroughSet_&&this.observable_.setValue?this.observable_.setValue(a):void 0},close:function(){this.observable_&&this.observable_.close(),this.callback_=void 0,this.target_=void 0,this.observable_=void 0,this.value_=void 0,this.getValueFn_=void 0,this.setValueFn_=void 0}};var expectedRecordTypes={add:!0,update:!0,"delete":!0},EDIT_LEAVE=0,EDIT_UPDATE=1,EDIT_ADD=2,EDIT_DELETE=3;ArraySplice.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(EDIT_LEAVE):(e.push(EDIT_UPDATE),d=g),b--,c--):f==h?(e.push(EDIT_DELETE),b--,d=h):(e.push(EDIT_ADD),c--,d=i)}else e.push(EDIT_DELETE),b--;else e.push(EDIT_ADD),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,c-b==0&&f-e==0)return[];if(b==c){for(var j=newSplice(b,[],0);f>e;)j.removed.push(d[e++]);return[j]}if(e==f)return[newSplice(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 EDIT_LEAVE:j&&(l.push(j),j=void 0),m++,n++;break;case EDIT_UPDATE:j||(j=newSplice(m,[],0)),j.addedCount++,m++,j.removed.push(d[n]),n++;break;case EDIT_ADD:j||(j=newSplice(m,[],0)),j.addedCount++,m++;break;case EDIT_DELETE:j||(j=newSplice(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 arraySplice=new ArraySplice;global.Observer=Observer,global.Observer.runEOM_=runEOM,global.Observer.observerSentinel_=observerSentinel,global.Observer.hasObjectObserve=hasObserve,global.ArrayObserver=ArrayObserver,global.ArrayObserver.calculateSplices=function(a,b){return arraySplice.calculateSplices(a,b)},global.ArraySplice=ArraySplice,global.ObjectObserver=ObjectObserver,global.PathObserver=PathObserver,global.CompoundObserver=CompoundObserver,global.Path=Path,global.ObserverTransform=ObserverTransform}("undefined"!=typeof global&&global&&"undefined"!=typeof module&&module?global:this||window),Platform.flags.shadow?(window.ShadowDOMPolyfill={},function(a){"use strict";function b(){if("undefined"!=typeof chrome&&chrome.app&&chrome.app.runtime)return!1;if(navigator.getDeviceStorage)return!1;try{var a=new Function("return true;");return a()}catch(b){return!1}}function c(a){if(!a)throw new Error("Assertion failed")}function d(a,b){for(var c=N(b),d=0;d<c.length;d++){var e=c[d];M(a,e,O(b,e))}return a}function e(a,b){for(var c=N(b),d=0;d<c.length;d++){var e=c[d];switch(e){case"arguments":case"caller":case"length":case"name":case"prototype":case"toString":continue}M(a,e,O(b,e))}return a}function f(a,b){for(var c=0;c<b.length;c++)if(b[c]in a)return b[c]}function g(a,b,c){P.value=c,M(a,b,P)}function h(a){var b=a.__proto__||Object.getPrototypeOf(a),c=I.get(b);if(c)return c;var d=h(b),e=v(d);return s(b,e,a),e}function i(a,b){q(a,b,!0)}function j(a,b){q(b,a,!1)}function k(a){return/^on[a-z]+$/.test(a)}function l(a){return/^\w[a-zA-Z_0-9]*$/.test(a)}function m(a){return L&&l(a)?new Function("return this.__impl4cf1e782hg__."+a):function(){return this.__impl4cf1e782hg__[a]}}function n(a){return L&&l(a)?new Function("v","this.__impl4cf1e782hg__."+a+" = v"):function(b){this.__impl4cf1e782hg__[a]=b}}function o(a){return L&&l(a)?new Function("return this.__impl4cf1e782hg__."+a+".apply(this.__impl4cf1e782hg__, arguments)"):function(){return this.__impl4cf1e782hg__[a].apply(this.__impl4cf1e782hg__,arguments)}}function p(a,b){try{return Object.getOwnPropertyDescriptor(a,b)}catch(c){return R}}function q(b,c,d){for(var e=N(b),f=0;f<e.length;f++){var g=e[f];if("polymerBlackList_"!==g&&!(g in c||b.polymerBlackList_&&b.polymerBlackList_[g])){Q&&b.__lookupGetter__(g);var h,i,j=p(b,g);if(d&&"function"==typeof j.value)c[g]=o(g);else{var l=k(g);h=l?a.getEventHandlerGetter(g):m(g),(j.writable||j.set)&&(i=l?a.getEventHandlerSetter(g):n(g)),M(c,g,{get:h,set:i,configurable:j.configurable,enumerable:j.enumerable})}}}}function r(a,b,c){var d=a.prototype;s(d,b,c),e(b,a)}function s(a,b,d){var e=b.prototype;c(void 0===I.get(a)),I.set(a,b),J.set(e,a),i(a,e),d&&j(e,d),g(e,"constructor",b),b.prototype=e}function t(a,b){return I.get(b.prototype)===a}function u(a){var b=Object.getPrototypeOf(a),c=h(b),d=v(c);return s(b,d,a),d}function v(a){function b(b){a.call(this,b)}var c=Object.create(a.prototype);return c.constructor=b,b.prototype=c,b}function w(a){return a&&a.__impl4cf1e782hg__}function x(a){return!w(a)}function y(a){return null===a?null:(c(x(a)),a.__wrapper8e3dd93a60__||(a.__wrapper8e3dd93a60__=new(h(a))(a)))}function z(a){return null===a?null:(c(w(a)),a.__impl4cf1e782hg__)}function A(a){return a.__impl4cf1e782hg__}function B(a,b){b.__impl4cf1e782hg__=a,a.__wrapper8e3dd93a60__=b}function C(a){return a&&w(a)?z(a):a}function D(a){return a&&!w(a)?y(a):a}function E(a,b){null!==b&&(c(x(a)),c(void 0===b||w(b)),a.__wrapper8e3dd93a60__=b)}function F(a,b,c){S.get=c,M(a.prototype,b,S)}function G(a,b){F(a,b,function(){return y(this.__impl4cf1e782hg__[b])})}function H(a,b){a.forEach(function(a){b.forEach(function(b){a.prototype[b]=function(){var a=D(this);return a[b].apply(a,arguments)}})})}var I=new WeakMap,J=new WeakMap,K=Object.create(null),L=b(),M=Object.defineProperty,N=Object.getOwnPropertyNames,O=Object.getOwnPropertyDescriptor,P={value:void 0,configurable:!0,enumerable:!1,writable:!0};N(window);var Q=/Firefox/.test(navigator.userAgent),R={get:function(){},set:function(){},configurable:!0,enumerable:!0},S={get:void 0,configurable:!0,enumerable:!0};a.assert=c,a.constructorTable=I,a.defineGetter=F,a.defineWrapGetter=G,a.forwardMethodsToWrapper=H,a.isWrapper=w,a.isWrapperFor=t,a.mixin=d,a.nativePrototypeTable=J,a.oneOf=f,a.registerObject=u,a.registerWrapper=r,a.rewrap=E,a.setWrapper=B,a.unsafeUnwrap=A,a.unwrap=z,a.unwrapIfNeeded=C,a.wrap=y,a.wrapIfNeeded=D,a.wrappers=K}(window.ShadowDOMPolyfill),function(a){"use strict";function b(){g=!1;var a=f.slice(0);f=[];for(var b=0;b<a.length;b++)a[b]()}function c(a){f.push(a),g||(g=!0,d(b,0))}var d,e=window.MutationObserver,f=[],g=!1;if(e){var h=1,i=new e(b),j=document.createTextNode(h);i.observe(j,{characterData:!0}),d=function(){h=(h+1)%2,j.data=h}}else d=window.setImmediate||window.setTimeout;a.setEndOfMicrotask=c}(window.ShadowDOMPolyfill),function(a){"use strict";function b(){p||(k(c),p=!0)}function c(){p=!1;do for(var a=o.slice(),b=!1,c=0;c<a.length;c++){var d=a[c],e=d.takeRecords();f(d),e.length&&(d.callback_(e,d),b=!0)}while(b)}function d(a,b){this.type=a,this.target=b,this.addedNodes=new m.NodeList,this.removedNodes=new m.NodeList,this.previousSibling=null,this.nextSibling=null,this.attributeName=null,this.attributeNamespace=null,this.oldValue=null}function e(a,b){for(;a;a=a.parentNode){var c=n.get(a);if(c)for(var d=0;d<c.length;d++){var e=c[d];e.options.subtree&&e.addTransientObserver(b)}}}function f(a){for(var b=0;b<a.nodes_.length;b++){var c=a.nodes_[b],d=n.get(c);if(!d)return;for(var e=0;e<d.length;e++){var f=d[e];f.observer===a&&f.removeTransientObservers()}}}function g(a,c,e){for(var f=Object.create(null),g=Object.create(null),h=a;h;h=h.parentNode){var i=n.get(h);if(i)for(var j=0;j<i.length;j++){var k=i[j],l=k.options;if((h===a||l.subtree)&&!("attributes"===c&&!l.attributes||"attributes"===c&&l.attributeFilter&&(null!==e.namespace||-1===l.attributeFilter.indexOf(e.name))||"characterData"===c&&!l.characterData||"childList"===c&&!l.childList)){var m=k.observer;f[m.uid_]=m,("attributes"===c&&l.attributeOldValue||"characterData"===c&&l.characterDataOldValue)&&(g[m.uid_]=e.oldValue)}}}var o=!1;for(var p in f){var m=f[p],q=new d(c,a);"name"in e&&"namespace"in e&&(q.attributeName=e.name,q.attributeNamespace=e.namespace),e.addedNodes&&(q.addedNodes=e.addedNodes),e.removedNodes&&(q.removedNodes=e.removedNodes),e.previousSibling&&(q.previousSibling=e.previousSibling),e.nextSibling&&(q.nextSibling=e.nextSibling),void 0!==g[p]&&(q.oldValue=g[p]),m.records_.push(q),o=!0}o&&b()}function h(a){if(this.childList=!!a.childList,this.subtree=!!a.subtree,this.attributes="attributes"in a||!("attributeOldValue"in a||"attributeFilter"in a)?!!a.attributes:!0,this.characterData="characterDataOldValue"in a&&!("characterData"in a)?!0:!!a.characterData,!this.attributes&&(a.attributeOldValue||"attributeFilter"in a)||!this.characterData&&a.characterDataOldValue)throw new TypeError;if(this.characterData=!!a.characterData,this.attributeOldValue=!!a.attributeOldValue,this.characterDataOldValue=!!a.characterDataOldValue,"attributeFilter"in a){if(null==a.attributeFilter||"object"!=typeof a.attributeFilter)throw new TypeError;this.attributeFilter=q.call(a.attributeFilter)}else this.attributeFilter=null}function i(a){this.callback_=a,this.nodes_=[],this.records_=[],this.uid_=++r,o.push(this)}function j(a,b,c){this.observer=a,this.target=b,this.options=c,this.transientObservedNodes=[]}var k=a.setEndOfMicrotask,l=a.wrapIfNeeded,m=a.wrappers,n=new WeakMap,o=[],p=!1,q=Array.prototype.slice,r=0;i.prototype={constructor:i,observe:function(a,b){a=l(a);var c,d=new h(b),e=n.get(a);e||n.set(a,e=[]);for(var f=0;f<e.length;f++)e[f].observer===this&&(c=e[f],c.removeTransientObservers(),c.options=d);c||(c=new j(this,a,d),e.push(c),this.nodes_.push(a))},disconnect:function(){this.nodes_.forEach(function(a){for(var b=n.get(a),c=0;c<b.length;c++){var d=b[c];if(d.observer===this){b.splice(c,1);break}}},this),this.records_=[]},takeRecords:function(){var a=this.records_;return this.records_=[],a}},j.prototype={addTransientObserver:function(a){if(a!==this.target){this.transientObservedNodes.push(a);var b=n.get(a);b||n.set(a,b=[]),b.push(this)}},removeTransientObservers:function(){var a=this.transientObservedNodes;this.transientObservedNodes=[];for(var b=0;b<a.length;b++)for(var c=a[b],d=n.get(c),e=0;e<d.length;e++)if(d[e]===this){d.splice(e,1);break}}},a.enqueueMutation=g,a.registerTransientObservers=e,a.wrappers.MutationObserver=i,a.wrappers.MutationRecord=d}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){this.root=a,this.parent=b}function c(a,b){if(a.treeScope_!==b){a.treeScope_=b;for(var d=a.shadowRoot;d;d=d.olderShadowRoot)d.treeScope_.parent=b;for(var e=a.firstChild;e;e=e.nextSibling)c(e,b)}}function d(c){if(c instanceof a.wrappers.Window,c.treeScope_)return c.treeScope_;var e,f=c.parentNode;return e=f?d(f):new b(c,null),c.treeScope_=e}b.prototype={get renderer(){return this.root instanceof a.wrappers.ShadowRoot?a.getRendererForHost(this.root.host):null},contains:function(a){for(;a;a=a.parent)if(a===this)return!0;return!1}},a.TreeScope=b,a.getTreeScope=d,a.setTreeScope=c}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a instanceof S.ShadowRoot}function c(a){return L(a).root}function d(a,d){var h=[],i=a;for(h.push(i);i;){var j=g(i);if(j&&j.length>0){for(var k=0;k<j.length;k++){var m=j[k];if(f(m)){var n=c(m),o=n.olderShadowRoot;o&&h.push(o)}h.push(m)}i=j[j.length-1]}else if(b(i)){if(l(a,i)&&e(d))break;i=i.host,h.push(i)}else i=i.parentNode,i&&h.push(i)}return h}function e(a){if(!a)return!1;switch(a.type){case"abort":case"error":case"select":case"change":case"load":case"reset":case"resize":case"scroll":case"selectstart":return!0}return!1}function f(a){return a instanceof HTMLShadowElement}function g(b){return a.getDestinationInsertionPoints(b)}function h(a,b){if(0===a.length)return b;b instanceof S.Window&&(b=b.document);for(var c=L(b),d=a[0],e=L(d),f=j(c,e),g=0;g<a.length;g++){var h=a[g];if(L(h)===f)return h}return a[a.length-1]}function i(a){for(var b=[];a;a=a.parent)b.push(a);return b}function j(a,b){for(var c=i(a),d=i(b),e=null;c.length>0&&d.length>0;){var f=c.pop(),g=d.pop();if(f!==g)break;e=f}return e}function k(a,b,c){b instanceof S.Window&&(b=b.document);var e,f=L(b),g=L(c),h=d(c,a),e=j(f,g);e||(e=g.root);for(var i=e;i;i=i.parent)for(var k=0;k<h.length;k++){var l=h[k];if(L(l)===i)return l}return null}function l(a,b){return L(a)===L(b)}function m(a){if(!U.get(a)&&(U.set(a,!0),n(R(a),R(a.target)),J)){var b=J;throw J=null,b}}function n(b,c){if(V.get(b))throw new Error("InvalidStateError");V.set(b,!0),a.renderAllPending();var e,f,g,h=b.type;if("load"===h&&!b.bubbles){var i=c;i instanceof S.Document&&(g=i.defaultView)&&(f=i,e=[])}if(!e)if(c instanceof S.Window)g=c,e=[];else if(e=d(c,b),"load"!==b.type){var i=e[e.length-1];i instanceof S.Document&&(g=i.defaultView)}return bb.set(b,e),o(b,e,g,f)&&p(b,e,g,f)&&q(b,e,g,f),Z.set(b,cb),X.delete(b,null),V.delete(b),b.defaultPrevented
+}function o(a,b,c,d){var e=db;if(c&&!r(c,a,e,b,d))return!1;for(var f=b.length-1;f>0;f--)if(!r(b[f],a,e,b,d))return!1;return!0}function p(a,b,c,d){var e=eb,f=b[0]||c;return r(f,a,e,b,d)}function q(a,b,c,d){for(var e=fb,f=1;f<b.length;f++)if(!r(b[f],a,e,b,d))return;c&&b.length>0&&r(c,a,e,b,d)}function r(a,b,c,d,e){var f=T.get(a);if(!f)return!0;var g=e||h(d,a);if(g===a){if(c===db)return!0;c===fb&&(c=eb)}else if(c===fb&&!b.bubbles)return!0;if("relatedTarget"in b){var i=Q(b),j=i.relatedTarget;if(j){if(j instanceof Object&&j.addEventListener){var l=R(j),m=k(b,a,l);if(m===g)return!0}else m=null;Y.set(b,m)}}Z.set(b,c);var n=b.type,o=!1;W.set(b,g),X.set(b,a),f.depth++;for(var p=0,q=f.length;q>p;p++){var r=f[p];if(r.removed)o=!0;else if(!(r.type!==n||!r.capture&&c===db||r.capture&&c===fb))try{if("function"==typeof r.handler?r.handler.call(a,b):r.handler.handleEvent(b),_.get(b))return!1}catch(s){J||(J=s)}}if(f.depth--,o&&0===f.depth){var t=f.slice();f.length=0;for(var p=0;p<t.length;p++)t[p].removed||f.push(t[p])}return!$.get(b)}function s(a,b,c){this.type=a,this.handler=b,this.capture=Boolean(c)}function t(a,b){if(!(a instanceof gb))return R(x(gb,"Event",a,b));var c=a;return rb||"beforeunload"!==c.type?void O(c,this):new y(c)}function u(a){return a&&a.relatedTarget?Object.create(a,{relatedTarget:{value:Q(a.relatedTarget)}}):a}function v(a,b,c){var d=window[a],e=function(b,c){return b instanceof d?void O(b,this):R(x(d,a,b,c))};if(e.prototype=Object.create(b.prototype),c&&M(e.prototype,c),d)try{N(d,e,new d("temp"))}catch(f){N(d,e,document.createEvent(a))}return e}function w(a,b){return function(){arguments[b]=Q(arguments[b]);var c=Q(this);c[a].apply(c,arguments)}}function x(a,b,c,d){if(pb)return new a(c,u(d));var e=Q(document.createEvent(b)),f=ob[b],g=[c];return Object.keys(f).forEach(function(a){var b=null!=d&&a in d?d[a]:f[a];"relatedTarget"===a&&(b=Q(b)),g.push(b)}),e["init"+b].apply(e,g),e}function y(a){t.call(this,a)}function z(a){return"function"==typeof a?!0:a&&a.handleEvent}function A(a){switch(a){case"DOMAttrModified":case"DOMAttributeNameChanged":case"DOMCharacterDataModified":case"DOMElementNameChanged":case"DOMNodeInserted":case"DOMNodeInsertedIntoDocument":case"DOMNodeRemoved":case"DOMNodeRemovedFromDocument":case"DOMSubtreeModified":return!0}return!1}function B(a){O(a,this)}function C(a){return a instanceof S.ShadowRoot&&(a=a.host),Q(a)}function D(a,b){var c=T.get(a);if(c)for(var d=0;d<c.length;d++)if(!c[d].removed&&c[d].type===b)return!0;return!1}function E(a,b){for(var c=Q(a);c;c=c.parentNode)if(D(R(c),b))return!0;return!1}function F(a){K(a,tb)}function G(b,c,e,f){a.renderAllPending();var g=R(ub.call(P(c),e,f));if(!g)return null;var i=d(g,null),j=i.lastIndexOf(b);return-1==j?null:(i=i.slice(0,j),h(i,b))}function H(a){return function(){var b=ab.get(this);return b&&b[a]&&b[a].value||null}}function I(a){var b=a.slice(2);return function(c){var d=ab.get(this);d||(d=Object.create(null),ab.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,K=a.forwardMethodsToWrapper,L=a.getTreeScope,M=a.mixin,N=a.registerWrapper,O=a.setWrapper,P=a.unsafeUnwrap,Q=a.unwrap,R=a.wrap,S=a.wrappers,T=(new WeakMap,new WeakMap),U=new WeakMap,V=new WeakMap,W=new WeakMap,X=new WeakMap,Y=new WeakMap,Z=new WeakMap,$=new WeakMap,_=new WeakMap,ab=new WeakMap,bb=new WeakMap,cb=0,db=1,eb=2,fb=3;s.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 gb=window.Event;gb.prototype.polymerBlackList_={returnValue:!0,keyLocation:!0},t.prototype={get target(){return W.get(this)},get currentTarget(){return X.get(this)},get eventPhase(){return Z.get(this)},get path(){var a=bb.get(this);return a?a.slice():[]},stopPropagation:function(){$.set(this,!0)},stopImmediatePropagation:function(){$.set(this,!0),_.set(this,!0)}},N(gb,t,document.createEvent("Event"));var hb=v("UIEvent",t),ib=v("CustomEvent",t),jb={get relatedTarget(){var a=Y.get(this);return void 0!==a?a:R(Q(this).relatedTarget)}},kb=M({initMouseEvent:w("initMouseEvent",14)},jb),lb=M({initFocusEvent:w("initFocusEvent",5)},jb),mb=v("MouseEvent",hb,kb),nb=v("FocusEvent",hb,lb),ob=Object.create(null),pb=function(){try{new window.FocusEvent("focus")}catch(a){return!1}return!0}();if(!pb){var qb=function(a,b,c){if(c){var d=ob[c];b=M(M({},d),b)}ob[a]=b};qb("Event",{bubbles:!1,cancelable:!1}),qb("CustomEvent",{detail:null},"Event"),qb("UIEvent",{view:null,detail:0},"Event"),qb("MouseEvent",{screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null},"UIEvent"),qb("FocusEvent",{relatedTarget:null},"UIEvent")}var rb=window.BeforeUnloadEvent;y.prototype=Object.create(t.prototype),M(y.prototype,{get returnValue(){return P(this).returnValue},set returnValue(a){P(this).returnValue=a}}),rb&&N(rb,y);var sb=window.EventTarget,tb=["addEventListener","removeEventListener","dispatchEvent"];[Node,Window].forEach(function(a){var b=a.prototype;tb.forEach(function(a){Object.defineProperty(b,a+"_",{value:b[a]})})}),B.prototype={addEventListener:function(a,b,c){if(z(b)&&!A(a)){var d=new s(a,b,c),e=T.get(this);if(e){for(var f=0;f<e.length;f++)if(d.equals(e[f]))return}else e=[],e.depth=0,T.set(this,e);e.push(d);var g=C(this);g.addEventListener_(a,m,!0)}},removeEventListener:function(a,b,c){c=Boolean(c);var d=T.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=C(this);h.removeEventListener_(a,m,!0)}}},dispatchEvent:function(b){var c=Q(b),d=c.type;U.set(c,!1),a.renderAllPending();var e;E(this,d)||(e=function(){},this.addEventListener(d,e,!0));try{return Q(this).dispatchEvent_(c)}finally{e&&this.removeEventListener(d,e,!0)}}},sb&&N(sb,B);var ub=document.elementFromPoint;a.elementFromPoint=G,a.getEventHandlerGetter=H,a.getEventHandlerSetter=I,a.wrapEventTargetMethods=F,a.wrappers.BeforeUnloadEvent=y,a.wrappers.CustomEvent=ib,a.wrappers.Event=t,a.wrappers.EventTarget=B,a.wrappers.FocusEvent=nb,a.wrappers.MouseEvent=mb,a.wrappers.UIEvent=hb}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){Object.defineProperty(a,b,p)}function c(a){j(a,this)}function d(){this.length=0,b(this,"length")}function e(a){for(var b=new d,e=0;e<a.length;e++)b[e]=new c(a[e]);return b.length=e,b}function f(a){g.call(this,a)}var g=a.wrappers.UIEvent,h=a.mixin,i=a.registerWrapper,j=a.setWrapper,k=a.unsafeUnwrap,l=a.wrap,m=window.TouchEvent;if(m){var n;try{n=document.createEvent("TouchEvent")}catch(o){return}var p={enumerable:!1};c.prototype={get target(){return l(k(this).target)}};var q={configurable:!0,enumerable:!0,get:null};["clientX","clientY","screenX","screenY","pageX","pageY","identifier","webkitRadiusX","webkitRadiusY","webkitRotationAngle","webkitForce"].forEach(function(a){q.get=function(){return k(this)[a]},Object.defineProperty(c.prototype,a,q)}),d.prototype={item:function(a){return this[a]}},f.prototype=Object.create(g.prototype),h(f.prototype,{get touches(){return e(k(this).touches)},get targetTouches(){return e(k(this).targetTouches)},get changedTouches(){return e(k(this).changedTouches)},initTouchEvent:function(){throw new Error("Not implemented")}}),i(m,f,n),a.wrappers.Touch=c,a.wrappers.TouchEvent=f,a.wrappers.TouchList=d}}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){Object.defineProperty(a,b,h)}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]=g(a[d]);return b.length=e,b}function e(a,b){a.prototype[b]=function(){return d(f(this)[b].apply(f(this),arguments))}}var f=a.unsafeUnwrap,g=a.wrap,h={enumerable:!1};c.prototype={item:function(a){return this[a]}},b(c.prototype,"item"),a.wrappers.NodeList=c,a.addWrapNodeListMethod=e,a.wrapNodeList=d}(window.ShadowDOMPolyfill),function(a){"use strict";a.wrapHTMLCollection=a.wrapNodeList,a.wrappers.HTMLCollection=a.wrappers.NodeList}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){A(a instanceof w)}function c(a){var b=new y;return b[0]=a,b.length=1,b}function d(a,b,c){C(b,"childList",{removedNodes:c,previousSibling:a.previousSibling,nextSibling:a.nextSibling})}function e(a,b){C(a,"childList",{removedNodes:b})}function f(a,b,d,e){if(a instanceof DocumentFragment){var f=h(a);P=!0;for(var g=f.length-1;g>=0;g--)a.removeChild(f[g]),f[g].parentNode_=b;P=!1;for(var g=0;g<f.length;g++)f[g].previousSibling_=f[g-1]||d,f[g].nextSibling_=f[g+1]||e;return d&&(d.nextSibling_=f[0]),e&&(e.previousSibling_=f[f.length-1]),f}var f=c(a),i=a.parentNode;return i&&i.removeChild(a),a.parentNode_=b,a.previousSibling_=d,a.nextSibling_=e,d&&(d.nextSibling_=a),e&&(e.previousSibling_=a),f}function g(a){if(a instanceof DocumentFragment)return h(a);var b=c(a),e=a.parentNode;return e&&d(a,e,b),b}function h(a){for(var b=new y,c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b.length=c,e(a,b),b}function i(a){return a}function j(a,b){I(a,b),a.nodeIsInserted_()}function k(a,b){for(var c=D(b),d=0;d<a.length;d++)j(a[d],c)}function l(a){I(a,new z(a,null))}function m(a){for(var b=0;b<a.length;b++)l(a[b])}function n(a,b){var c=a.nodeType===w.DOCUMENT_NODE?a:a.ownerDocument;c!==b.ownerDocument&&c.adoptNode(b)}function o(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 p(a,b){o(a,b);var c=b.length;if(1===c)return K(b[0]);for(var d=K(a.ownerDocument.createDocumentFragment()),e=0;c>e;e++)d.appendChild(K(b[e]));return d}function q(a){if(void 0!==a.firstChild_)for(var b=a.firstChild_;b;){var c=b;b=b.nextSibling_,c.parentNode_=c.previousSibling_=c.nextSibling_=void 0}a.firstChild_=a.lastChild_=void 0}function r(a){if(a.invalidateShadowRenderer()){for(var b=a.firstChild;b;){A(b.parentNode===a);var c=b.nextSibling,d=K(b),e=d.parentNode;e&&W.call(e,d),b.previousSibling_=b.nextSibling_=b.parentNode_=null,b=c}a.firstChild_=a.lastChild_=null}else for(var c,f=K(a),g=f.firstChild;g;)c=g.nextSibling,W.call(f,g),g=c}function s(a){var b=a.parentNode;return b&&b.invalidateShadowRenderer()}function t(a){for(var b,c=0;c<a.length;c++)b=a[c],b.parentNode.removeChild(b)}function u(a,b,c){var d;if(d=M(c?Q.call(c,J(a),!1):R.call(J(a),!1)),b){for(var e=a.firstChild;e;e=e.nextSibling)d.appendChild(u(e,!0,c));if(a instanceof O.HTMLTemplateElement)for(var f=d.content,e=a.content.firstChild;e;e=e.nextSibling)f.appendChild(u(e,!0,c))}return d}function v(a,b){if(!b||D(a)!==D(b))return!1;for(var c=b;c;c=c.parentNode)if(c===a)return!0;return!1}function w(a){A(a instanceof S),x.call(this,a),this.parentNode_=void 0,this.firstChild_=void 0,this.lastChild_=void 0,this.nextSibling_=void 0,this.previousSibling_=void 0,this.treeScope_=void 0}var x=a.wrappers.EventTarget,y=a.wrappers.NodeList,z=a.TreeScope,A=a.assert,B=a.defineWrapGetter,C=a.enqueueMutation,D=a.getTreeScope,E=a.isWrapper,F=a.mixin,G=a.registerTransientObservers,H=a.registerWrapper,I=a.setTreeScope,J=a.unsafeUnwrap,K=a.unwrap,L=a.unwrapIfNeeded,M=a.wrap,N=a.wrapIfNeeded,O=a.wrappers,P=!1,Q=document.importNode,R=window.Node.prototype.cloneNode,S=window.Node,T=window.DocumentFragment,U=(S.prototype.appendChild,S.prototype.compareDocumentPosition),V=S.prototype.insertBefore,W=S.prototype.removeChild,X=S.prototype.replaceChild,Y=/Trident/.test(navigator.userAgent),Z=Y?function(a,b){try{W.call(a,b)}catch(c){if(!(a instanceof T))throw c}}:function(a,b){W.call(a,b)};w.prototype=Object.create(x.prototype),F(w.prototype,{appendChild:function(a){return this.insertBefore(a,null)},insertBefore:function(a,c){b(a);var d;c?E(c)?d=K(c):(d=c,c=M(d)):(c=null,d=null),c&&A(c.parentNode===this);var e,h=c?c.previousSibling:this.lastChild,i=!this.invalidateShadowRenderer()&&!s(a);if(e=i?g(a):f(a,this,h,c),i)n(this,a),q(this),V.call(J(this),K(a),d);else{h||(this.firstChild_=e[0]),c||(this.lastChild_=e[e.length-1],void 0===this.firstChild_&&(this.firstChild_=this.firstChild));var j=d?d.parentNode:J(this);j?V.call(j,p(this,e),d):o(this,e)}return C(this,"childList",{addedNodes:e,nextSibling:c,previousSibling:h}),k(e,this),a},removeChild:function(a){if(b(a),a.parentNode!==this){for(var d=!1,e=(this.childNodes,this.firstChild);e;e=e.nextSibling)if(e===a){d=!0;break}if(!d)throw new Error("NotFoundError")}var f=K(a),g=a.nextSibling,h=a.previousSibling;if(this.invalidateShadowRenderer()){var i=this.firstChild,j=this.lastChild,k=f.parentNode;k&&Z(k,f),i===a&&(this.firstChild_=g),j===a&&(this.lastChild_=h),h&&(h.nextSibling_=g),g&&(g.previousSibling_=h),a.previousSibling_=a.nextSibling_=a.parentNode_=void 0}else q(this),Z(J(this),f);return P||C(this,"childList",{removedNodes:c(a),nextSibling:g,previousSibling:h}),G(this,a),a},replaceChild:function(a,d){b(a);var e;if(E(d)?e=K(d):(e=d,d=M(e)),d.parentNode!==this)throw new Error("NotFoundError");var h,i=d.nextSibling,j=d.previousSibling,m=!this.invalidateShadowRenderer()&&!s(a);return m?h=g(a):(i===a&&(i=a.nextSibling),h=f(a,this,j,i)),m?(n(this,a),q(this),X.call(J(this),K(a),e)):(this.firstChild===d&&(this.firstChild_=h[0]),this.lastChild===d&&(this.lastChild_=h[h.length-1]),d.previousSibling_=d.nextSibling_=d.parentNode_=void 0,e.parentNode&&X.call(e.parentNode,p(this,h),e)),C(this,"childList",{addedNodes:h,removedNodes:c(d),nextSibling:i,previousSibling:j}),l(d),k(h,this),d},nodeIsInserted_:function(){for(var a=this.firstChild;a;a=a.nextSibling)a.nodeIsInserted_()},hasChildNodes:function(){return null!==this.firstChild},get parentNode(){return void 0!==this.parentNode_?this.parentNode_:M(J(this).parentNode)},get firstChild(){return void 0!==this.firstChild_?this.firstChild_:M(J(this).firstChild)},get lastChild(){return void 0!==this.lastChild_?this.lastChild_:M(J(this).lastChild)},get nextSibling(){return void 0!==this.nextSibling_?this.nextSibling_:M(J(this).nextSibling)},get previousSibling(){return void 0!==this.previousSibling_?this.previousSibling_:M(J(this).previousSibling)},get parentElement(){for(var a=this.parentNode;a&&a.nodeType!==w.ELEMENT_NODE;)a=a.parentNode;return a},get textContent(){for(var a="",b=this.firstChild;b;b=b.nextSibling)b.nodeType!=w.COMMENT_NODE&&(a+=b.textContent);return a},set textContent(a){var b=i(this.childNodes);if(this.invalidateShadowRenderer()){if(r(this),""!==a){var c=J(this).ownerDocument.createTextNode(a);this.appendChild(c)}}else q(this),J(this).textContent=a;var d=i(this.childNodes);C(this,"childList",{addedNodes:d,removedNodes:b}),m(b),k(d,this)},get childNodes(){for(var a=new y,b=0,c=this.firstChild;c;c=c.nextSibling)a[b++]=c;return a.length=b,a},cloneNode:function(a){return u(this,a)},contains:function(a){return v(this,N(a))},compareDocumentPosition:function(a){return U.call(J(this),L(a))},normalize:function(){for(var a,b,c=i(this.childNodes),d=[],e="",f=0;f<c.length;f++)b=c[f],b.nodeType===w.TEXT_NODE?a||b.data.length?a?(e+=b.data,d.push(b)):a=b:this.removeNode(b):(a&&d.length&&(a.data+=e,t(d)),d=[],e="",a=null,b.childNodes.length&&b.normalize());a&&d.length&&(a.data+=e,t(d))}}),B(w,"ownerDocument"),H(S,w,document.createDocumentFragment()),delete w.prototype.querySelector,delete w.prototype.querySelectorAll,w.prototype=F(Object.create(x.prototype),w.prototype),a.cloneNode=u,a.nodeWasAdded=j,a.nodeWasRemoved=l,a.nodesWereAdded=k,a.nodesWereRemoved=m,a.snapshotNodeList=i,a.wrappers.Node=w}(window.ShadowDOMPolyfill),function(a){"use strict";function b(b,c,d,e){for(var f=null,g=null,h=0,i=b.length;i>h;h++)f=s(b[h]),!e&&(g=q(f).root)&&g instanceof a.wrappers.ShadowRoot||(d[c++]=f);return c}function c(a){return String(a).replace(/\/deep\//g," ")}function d(a,b){for(var c,e=a.firstElementChild;e;){if(e.matches(b))return e;if(c=d(e,b))return c;e=e.nextElementSibling}return null}function e(a,b){return a.matches(b)}function f(a,b,c){var d=a.localName;return d===b||d===c&&a.namespaceURI===D}function g(){return!0}function h(a,b,c){return a.localName===c}function i(a,b){return a.namespaceURI===b}function j(a,b,c){return a.namespaceURI===b&&a.localName===c}function k(a,b,c,d,e,f){for(var g=a.firstElementChild;g;)d(g,e,f)&&(c[b++]=g),b=k(g,b,c,d,e,f),g=g.nextElementSibling;return b}function l(c,d,e,f,g){var h,i=r(this),j=q(this).root;if(j instanceof a.wrappers.ShadowRoot)return k(this,d,e,c,f,null);if(i instanceof B)h=w.call(i,f);else{if(!(i instanceof C))return k(this,d,e,c,f,null);h=v.call(i,f)}return b(h,d,e,g)}function m(c,d,e,f,g){var h,i=r(this),j=q(this).root;if(j instanceof a.wrappers.ShadowRoot)return k(this,d,e,c,f,g);if(i instanceof B)h=y.call(i,f,g);else{if(!(i instanceof C))return k(this,d,e,c,f,g);h=x.call(i,f,g)}return b(h,d,e,!1)}function n(c,d,e,f,g){var h,i=r(this),j=q(this).root;if(j instanceof a.wrappers.ShadowRoot)return k(this,d,e,c,f,g);if(i instanceof B)h=A.call(i,f,g);else{if(!(i instanceof C))return k(this,d,e,c,f,g);h=z.call(i,f,g)}return b(h,d,e,!1)}var o=a.wrappers.HTMLCollection,p=a.wrappers.NodeList,q=a.getTreeScope,r=a.unsafeUnwrap,s=a.wrap,t=document.querySelector,u=document.documentElement.querySelector,v=document.querySelectorAll,w=document.documentElement.querySelectorAll,x=document.getElementsByTagName,y=document.documentElement.getElementsByTagName,z=document.getElementsByTagNameNS,A=document.documentElement.getElementsByTagNameNS,B=window.Element,C=window.HTMLDocument||window.Document,D="http://www.w3.org/1999/xhtml",E={querySelector:function(b){var e=c(b),f=e!==b;b=e;var g,h=r(this),i=q(this).root;if(i instanceof a.wrappers.ShadowRoot)return d(this,b);if(h instanceof B)g=s(u.call(h,b));else{if(!(h instanceof C))return d(this,b);g=s(t.call(h,b))}return g&&!f&&(i=q(g).root)&&i instanceof a.wrappers.ShadowRoot?d(this,b):g},querySelectorAll:function(a){var b=c(a),d=b!==a;a=b;var f=new p;return f.length=l.call(this,e,0,f,a,d),f}},F={getElementsByTagName:function(a){var b=new o,c="*"===a?g:f;return b.length=m.call(this,c,0,b,a,a.toLowerCase()),b},getElementsByClassName:function(a){return this.querySelectorAll("."+a)},getElementsByTagNameNS:function(a,b){var c=new o,d=null;return d="*"===a?"*"===b?g:h:"*"===b?i:j,c.length=n.call(this,d,0,c,a||null,b),c}};a.GetElementsByInterface=F,a.SelectorsInterface=E}(window.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},remove:function(){var a=this.parentNode;a&&a.removeChild(this)}},f={get nextElementSibling(){return b(this.nextSibling)},get previousElementSibling(){return c(this.previousSibling)}};a.ChildNodeInterface=f,a.ParentNodeInterface=e}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}var c=a.ChildNodeInterface,d=a.wrappers.Node,e=a.enqueueMutation,f=a.mixin,g=a.registerWrapper,h=a.unsafeUnwrap,i=window.CharacterData;b.prototype=Object.create(d.prototype),f(b.prototype,{get textContent(){return this.data},set textContent(a){this.data=a},get data(){return h(this).data},set data(a){var b=h(this).data;e(this,"characterData",{oldValue:b}),h(this).data=a}}),f(b.prototype,c),g(i,b,document.createTextNode("")),a.wrappers.CharacterData=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a>>>0}function c(a){d.call(this,a)}var d=a.wrappers.CharacterData,e=(a.enqueueMutation,a.mixin),f=a.registerWrapper,g=window.Text;c.prototype=Object.create(d.prototype),e(c.prototype,{splitText:function(a){a=b(a);var c=this.data;if(a>c.length)throw new Error("IndexSizeError");var d=c.slice(0,a),e=c.slice(a);this.data=d;var f=this.ownerDocument.createTextNode(e);return this.parentNode&&this.parentNode.insertBefore(f,this.nextSibling),f}}),f(g,c,document.createTextNode("")),a.wrappers.Text=c}(window.ShadowDOMPolyfill),function(a){"use strict";function b(b){a.invalidateRendererBasedOnAttribute(b,"class")}function c(a,b){d(a,this),this.ownerElement_=b}var d=a.setWrapper,e=a.unsafeUnwrap;c.prototype={constructor:c,get length(){return e(this).length},item:function(a){return e(this).item(a)},contains:function(a){return e(this).contains(a)},add:function(){e(this).add.apply(e(this),arguments),b(this.ownerElement_)},remove:function(){e(this).remove.apply(e(this),arguments),b(this.ownerElement_)},toggle:function(){var a=e(this).toggle.apply(e(this),arguments);return b(this.ownerElement_),a},toString:function(){return e(this).toString()}},a.wrappers.DOMTokenList=c}(window.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,b,c){k(a,"attributes",{name:b,namespace:null,oldValue:c})}function d(a){g.call(this,a)}var e=a.ChildNodeInterface,f=a.GetElementsByInterface,g=a.wrappers.Node,h=a.wrappers.DOMTokenList,i=a.ParentNodeInterface,j=a.SelectorsInterface,k=(a.addWrapNodeListMethod,a.enqueueMutation),l=a.mixin,m=(a.oneOf,a.registerWrapper),n=a.unsafeUnwrap,o=a.wrappers,p=window.Element,q=["matches","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector"].filter(function(a){return p.prototype[a]}),r=q[0],s=p.prototype[r],t=new WeakMap;d.prototype=Object.create(g.prototype),l(d.prototype,{createShadowRoot:function(){var b=new o.ShadowRoot(this);n(this).polymerShadowRoot_=b;var c=a.getRendererForHost(this);return c.invalidate(),b},get shadowRoot(){return n(this).polymerShadowRoot_||null},setAttribute:function(a,d){var e=n(this).getAttribute(a);n(this).setAttribute(a,d),c(this,a,e),b(this,a)},removeAttribute:function(a){var d=n(this).getAttribute(a);n(this).removeAttribute(a),c(this,a,d),b(this,a)},matches:function(a){return s.call(n(this),a)},get classList(){var a=t.get(this);return a||t.set(this,a=new h(n(this).classList,this)),a},get className(){return n(this).className},set className(a){this.setAttribute("class",a)},get id(){return n(this).id},set id(a){this.setAttribute("id",a)}}),q.forEach(function(a){"matches"!==a&&(d.prototype[a]=function(a){return this.matches(a)})}),p.prototype.webkitCreateShadowRoot&&(d.prototype.webkitCreateShadowRoot=d.prototype.createShadowRoot),l(d.prototype,e),l(d.prototype,f),l(d.prototype,i),l(d.prototype,j),m(p,d,document.createElementNS(null,"x")),a.invalidateRendererBasedOnAttribute=b,a.matchesNames=q,a.wrappers.Element=d}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a){case"&":return"&amp;";case"<":return"&lt;";case">":return"&gt;";case'"':return"&quot;";case"\xa0":return"&nbsp;"}}function c(a){return a.replace(A,b)}function d(a){return a.replace(B,b)}function e(a){for(var b={},c=0;c<a.length;c++)b[a[c]]=!0;return b}function f(a,b){switch(a.nodeType){case Node.ELEMENT_NODE:for(var e,f=a.tagName.toLowerCase(),h="<"+f,i=a.attributes,j=0;e=i[j];j++)h+=" "+e.name+'="'+c(e.value)+'"';return h+=">",C[f]?h:h+g(a)+"</"+f+">";case Node.TEXT_NODE:var k=a.data;return b&&D[b.localName]?k:d(k);case Node.COMMENT_NODE:return"<!--"+a.data+"-->";default:throw console.error(a),new Error("not implemented")}}function g(a){a instanceof z.HTMLTemplateElement&&(a=a.content);for(var b="",c=a.firstChild;c;c=c.nextSibling)b+=f(c,a);return b}function h(a,b,c){var d=c||"div";a.textContent="";var e=x(a.ownerDocument.createElement(d));e.innerHTML=b;for(var f;f=e.firstChild;)a.appendChild(y(f))}function i(a){o.call(this,a)}function j(a,b){var c=x(a.cloneNode(!1));c.innerHTML=b;for(var d,e=x(document.createDocumentFragment());d=c.firstChild;)e.appendChild(d);return y(e)}function k(b){return function(){return a.renderAllPending(),w(this)[b]}}function l(a){p(i,a,k(a))}function m(b){Object.defineProperty(i.prototype,b,{get:k(b),set:function(c){a.renderAllPending(),w(this)[b]=c},configurable:!0,enumerable:!0})}function n(b){Object.defineProperty(i.prototype,b,{value:function(){return a.renderAllPending(),w(this)[b].apply(w(this),arguments)},configurable:!0,enumerable:!0})}var o=a.wrappers.Element,p=a.defineGetter,q=a.enqueueMutation,r=a.mixin,s=a.nodesWereAdded,t=a.nodesWereRemoved,u=a.registerWrapper,v=a.snapshotNodeList,w=a.unsafeUnwrap,x=a.unwrap,y=a.wrap,z=a.wrappers,A=/[&\u00A0"]/g,B=/[&\u00A0<>]/g,C=e(["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"]),D=e(["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"]),E=/MSIE/.test(navigator.userAgent),F=window.HTMLElement,G=window.HTMLTemplateElement;i.prototype=Object.create(o.prototype),r(i.prototype,{get innerHTML(){return g(this)},set innerHTML(a){if(E&&D[this.localName])return void(this.textContent=a);var b=v(this.childNodes);this.invalidateShadowRenderer()?this instanceof z.HTMLTemplateElement?h(this.content,a):h(this,a,this.tagName):!G&&this instanceof z.HTMLTemplateElement?h(this.content,a):w(this).innerHTML=a;var c=v(this.childNodes);q(this,"childList",{addedNodes:c,removedNodes:b}),t(b),s(c,this)},get outerHTML(){return f(this,this.parentNode)},set outerHTML(a){var b=this.parentNode;if(b){b.invalidateShadowRenderer();var c=j(b,a);b.replaceChild(c,this)}},insertAdjacentHTML:function(a,b){var c,d;switch(String(a).toLowerCase()){case"beforebegin":c=this.parentNode,d=this;break;case"afterend":c=this.parentNode,d=this.nextSibling;break;case"afterbegin":c=this,d=this.firstChild;break;case"beforeend":c=this,d=null;break;default:return}var e=j(c,b);c.insertBefore(e,d)},get hidden(){return this.hasAttribute("hidden")},set hidden(a){a?this.setAttribute("hidden",""):this.removeAttribute("hidden")}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollWidth"].forEach(l),["scrollLeft","scrollTop"].forEach(m),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(n),u(F,i,document.createElement("b")),a.wrappers.HTMLElement=i,a.getInnerHTML=g,a.setInnerHTML=h}(window.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.unsafeUnwrap,g=a.wrap,h=window.HTMLCanvasElement;b.prototype=Object.create(c.prototype),d(b.prototype,{getContext:function(){var a=f(this).getContext.apply(f(this),arguments);return a&&g(a)}}),e(h,b,document.createElement("canvas")),a.wrappers.HTMLCanvasElement=b}(window.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,{constructor:b,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}(window.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.wrapHTMLCollection,g=a.unwrap,h=window.HTMLFormElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get elements(){return f(g(this).elements)}}),e(h,b,document.createElement("form")),a.wrappers.HTMLFormElement=b}(window.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}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=(a.mixin,a.wrappers.NodeList,a.registerWrapper),e=window.HTMLShadowElement;b.prototype=Object.create(c.prototype),b.prototype.constructor=b,e&&d(e,b),a.wrappers.HTMLShadowElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){if(!a.defaultView)return a;var b=l.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);l.set(a,b)}return b}function c(a){for(var c,d=b(a.ownerDocument),e=i(d.createDocumentFragment());c=a.firstChild;)e.appendChild(c);return e}function d(a){if(e.call(this,a),!m){var b=c(a);k.set(this,j(b))}}var e=a.wrappers.HTMLElement,f=a.mixin,g=a.registerWrapper,h=a.unsafeUnwrap,i=a.unwrap,j=a.wrap,k=new WeakMap,l=new WeakMap,m=window.HTMLTemplateElement;d.prototype=Object.create(e.prototype),f(d.prototype,{constructor:d,get content(){return m?j(h(this).content):k.get(this)}}),m&&g(m,d),a.wrappers.HTMLTemplateElement=d}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.registerWrapper,e=window.HTMLMediaElement;e&&(b.prototype=Object.create(c.prototype),d(e,b,document.createElement("audio")),a.wrappers.HTMLMediaElement=b)}(window.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;h&&(b.prototype=Object.create(d.prototype),e(h,b,document.createElement("audio")),c.prototype=b.prototype,a.wrappers.HTMLAudioElement=b,a.wrappers.Audio=c)}(window.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}(window.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.unwrap,g=a.wrap,h=window.HTMLSelectElement;b.prototype=Object.create(c.prototype),d(b.prototype,{add:function(a,b){"object"==typeof b&&(b=f(b)),f(this).add(f(a),b)},remove:function(a){return void 0===a?void c.prototype.remove.call(this):("object"==typeof a&&(a=f(a)),void f(this).remove(a))},get form(){return g(f(this).form)}}),e(h,b,document.createElement("select")),a.wrappers.HTMLSelectElement=b}(window.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.unwrap,g=a.wrap,h=a.wrapHTMLCollection,i=window.HTMLTableElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get caption(){return g(f(this).caption)},createCaption:function(){return g(f(this).createCaption())},get tHead(){return g(f(this).tHead)},createTHead:function(){return g(f(this).createTHead())},createTFoot:function(){return g(f(this).createTFoot())},get tFoot(){return g(f(this).tFoot)},get tBodies(){return h(f(this).tBodies)},createTBody:function(){return g(f(this).createTBody())
+},get rows(){return h(f(this).rows)},insertRow:function(a){return g(f(this).insertRow(a))}}),e(i,b,document.createElement("table")),a.wrappers.HTMLTableElement=b}(window.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.wrapHTMLCollection,g=a.unwrap,h=a.wrap,i=window.HTMLTableSectionElement;b.prototype=Object.create(c.prototype),d(b.prototype,{constructor:b,get rows(){return f(g(this).rows)},insertRow:function(a){return h(g(this).insertRow(a))}}),e(i,b,document.createElement("thead")),a.wrappers.HTMLTableSectionElement=b}(window.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.wrapHTMLCollection,g=a.unwrap,h=a.wrap,i=window.HTMLTableRowElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get cells(){return f(g(this).cells)},insertCell:function(a){return h(g(this).insertCell(a))}}),e(i,b,document.createElement("tr")),a.wrappers.HTMLTableRowElement=b}(window.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,g=(a.mixin,a.registerWrapper),h=window.HTMLUnknownElement;b.prototype=Object.create(d.prototype),g(h,b),a.wrappers.HTMLUnknownElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";var b=a.wrappers.Element,c=a.wrappers.HTMLElement,d=a.registerObject,e="http://www.w3.org/2000/svg",f=document.createElementNS(e,"title"),g=d(f),h=Object.getPrototypeOf(g.prototype).constructor;if(!("classList"in f)){var i=Object.getOwnPropertyDescriptor(b.prototype,"classList");Object.defineProperty(c.prototype,"classList",i),delete b.prototype.classList}a.wrappers.SVGElement=h}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){m.call(this,a)}var c=a.mixin,d=a.registerWrapper,e=a.unwrap,f=a.wrap,g=window.SVGUseElement,h="http://www.w3.org/2000/svg",i=f(document.createElementNS(h,"g")),j=document.createElementNS(h,"use"),k=i.constructor,l=Object.getPrototypeOf(k.prototype),m=l.constructor;b.prototype=Object.create(l),"instanceRoot"in j&&c(b.prototype,{get instanceRoot(){return f(e(this).instanceRoot)},get animatedInstanceRoot(){return f(e(this).animatedInstanceRoot)}}),d(g,b,j),a.wrappers.SVGUseElement=b}(window.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.unsafeUnwrap,g=a.wrap,h=window.SVGElementInstance;h&&(b.prototype=Object.create(c.prototype),d(b.prototype,{get correspondingElement(){return g(f(this).correspondingElement)},get correspondingUseElement(){return g(f(this).correspondingUseElement)},get parentNode(){return g(f(this).parentNode)},get childNodes(){throw new Error("Not implemented")},get firstChild(){return g(f(this).firstChild)},get lastChild(){return g(f(this).lastChild)},get previousSibling(){return g(f(this).previousSibling)},get nextSibling(){return g(f(this).nextSibling)}}),e(h,b),a.wrappers.SVGElementInstance=b)}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){e(a,this)}var c=a.mixin,d=a.registerWrapper,e=a.setWrapper,f=a.unsafeUnwrap,g=a.unwrap,h=a.unwrapIfNeeded,i=a.wrap,j=window.CanvasRenderingContext2D;c(b.prototype,{get canvas(){return i(f(this).canvas)},drawImage:function(){arguments[0]=h(arguments[0]),f(this).drawImage.apply(f(this),arguments)},createPattern:function(){return arguments[0]=g(arguments[0]),f(this).createPattern.apply(f(this),arguments)}}),d(j,b,document.createElement("canvas").getContext("2d")),a.wrappers.CanvasRenderingContext2D=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){e(a,this)}var c=a.mixin,d=a.registerWrapper,e=a.setWrapper,f=a.unsafeUnwrap,g=a.unwrapIfNeeded,h=a.wrap,i=window.WebGLRenderingContext;if(i){c(b.prototype,{get canvas(){return h(f(this).canvas)},texImage2D:function(){arguments[5]=g(arguments[5]),f(this).texImage2D.apply(f(this),arguments)},texSubImage2D:function(){arguments[6]=g(arguments[6]),f(this).texSubImage2D.apply(f(this),arguments)}});var j=/WebKit/.test(navigator.userAgent)?{drawingBufferHeight:null,drawingBufferWidth:null}:{};d(i,b,j),a.wrappers.WebGLRenderingContext=b}}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){d(a,this)}var c=a.registerWrapper,d=a.setWrapper,e=a.unsafeUnwrap,f=a.unwrap,g=a.unwrapIfNeeded,h=a.wrap,i=window.Range;b.prototype={get startContainer(){return h(e(this).startContainer)},get endContainer(){return h(e(this).endContainer)},get commonAncestorContainer(){return h(e(this).commonAncestorContainer)},setStart:function(a,b){e(this).setStart(g(a),b)},setEnd:function(a,b){e(this).setEnd(g(a),b)},setStartBefore:function(a){e(this).setStartBefore(g(a))},setStartAfter:function(a){e(this).setStartAfter(g(a))},setEndBefore:function(a){e(this).setEndBefore(g(a))},setEndAfter:function(a){e(this).setEndAfter(g(a))},selectNode:function(a){e(this).selectNode(g(a))},selectNodeContents:function(a){e(this).selectNodeContents(g(a))},compareBoundaryPoints:function(a,b){return e(this).compareBoundaryPoints(a,f(b))},extractContents:function(){return h(e(this).extractContents())},cloneContents:function(){return h(e(this).cloneContents())},insertNode:function(a){e(this).insertNode(g(a))},surroundContents:function(a){e(this).surroundContents(g(a))},cloneRange:function(){return h(e(this).cloneRange())},isPointInRange:function(a,b){return e(this).isPointInRange(g(a),b)},comparePoint:function(a,b){return e(this).comparePoint(g(a),b)},intersectsNode:function(a){return e(this).intersectsNode(g(a))},toString:function(){return e(this).toString()}},i.prototype.createContextualFragment&&(b.prototype.createContextualFragment=function(a){return h(e(this).createContextualFragment(a))}),c(window.Range,b,document.createRange()),a.wrappers.Range=b}(window.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.createComment(""));a.wrappers.Comment=h,a.wrappers.DocumentFragment=g}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=l(k(a).ownerDocument.createDocumentFragment());c.call(this,b),i(b,this);var e=a.shadowRoot;n.set(this,e),this.treeScope_=new d(this,g(e||a)),m.set(this,a)}var c=a.wrappers.DocumentFragment,d=a.TreeScope,e=a.elementFromPoint,f=a.getInnerHTML,g=a.getTreeScope,h=a.mixin,i=a.rewrap,j=a.setInnerHTML,k=a.unsafeUnwrap,l=a.unwrap,m=new WeakMap,n=new WeakMap,o=/[ \t\n\r\f]/;b.prototype=Object.create(c.prototype),h(b.prototype,{constructor:b,get innerHTML(){return f(this)},set innerHTML(a){j(this,a),this.invalidateShadowRenderer()},get olderShadowRoot(){return n.get(this)||null},get host(){return m.get(this)||null},invalidateShadowRenderer:function(){return m.get(this).invalidateShadowRenderer()},elementFromPoint:function(a,b){return e(this,this.ownerDocument,a,b)},getElementById:function(a){return o.test(a)?null:this.querySelector('[id="'+a+'"]')}}),a.wrappers.ShadowRoot=b}(window.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=H(a),g=H(c),h=e?H(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=I(f.lastChild);i&&(i.nextSibling_=i.nextSibling)}f.insertBefore(g,h)}function d(a){var c=H(a),d=c.parentNode;if(d){var e=I(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){J.set(a,[])}function f(a){var b=J.get(a);return b||J.set(a,b=[]),b}function g(a){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}function h(){for(var a=0;a<N.length;a++){var b=N[a],c=b.parentRenderer;c&&c.dirty||b.render()}N=[]}function i(){y=null,h()}function j(a){var b=L.get(a);return b||(b=new n(a),L.set(a,b)),b}function k(a){var b=E(a).root;return b instanceof D?b:null}function l(a){return j(a.host)}function m(a){this.skip=!1,this.node=a,this.childNodes=[]}function n(a){this.host=a,this.dirty=!1,this.invalidateAttributes(),this.associateNode(a)}function o(a){for(var b=[],c=a.firstChild;c;c=c.nextSibling)v(c)?b.push.apply(b,f(c)):b.push(c);return b}function p(a){if(a instanceof B)return a;if(a instanceof A)return null;for(var b=a.firstChild;b;b=b.nextSibling){var c=p(b);if(c)return c}return null}function q(a,b){f(b).push(a);var c=K.get(a);c?c.push(b):K.set(a,[b])}function r(a){return K.get(a)}function s(a){K.set(a,void 0)}function t(a,b){var c=b.getAttribute("select");if(!c)return!0;if(c=c.trim(),!c)return!0;if(!(a instanceof z))return!1;if(!P.test(c))return!1;try{return a.matches(c)}catch(d){return!1}}function u(a,b){var c=r(b);return c&&c[c.length-1]===a}function v(a){return a instanceof A||a instanceof B}function w(a){return a.shadowRoot}function x(a){for(var b=[],c=a.shadowRoot;c;c=c.olderShadowRoot)b.push(c);return b}var y,z=a.wrappers.Element,A=a.wrappers.HTMLContentElement,B=a.wrappers.HTMLShadowElement,C=a.wrappers.Node,D=a.wrappers.ShadowRoot,E=(a.assert,a.getTreeScope),F=(a.mixin,a.oneOf),G=a.unsafeUnwrap,H=a.unwrap,I=a.wrap,J=new WeakMap,K=new WeakMap,L=new WeakMap,M=F(window,["requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","setTimeout"]),N=[],O=new ArraySplice;O.equals=function(a,b){return H(a.node)===b},m.prototype={append:function(a){var b=new m(a);return this.childNodes.push(b),b},sync:function(a){if(!this.skip){for(var b=this.node,e=this.childNodes,f=g(H(b)),h=a||new WeakMap,i=O.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(h);for(var o=n.removed.length,p=0;o>p;p++){var q=I(f[k++]);h.get(q)||d(q)}for(var r=n.addedCount,s=f[k]&&I(f[k]),p=0;r>p;p++){var t=e[j++],u=t.node;c(b,u,s),h.set(u,!0),t.sync(h)}l+=r}for(var m=l;m<e.length;m++)e[m].sync(h)}}},n.prototype={render:function(a){if(this.dirty){this.invalidateAttributes();var b=this.host;this.distribution(b);var c=a||new m(b);this.buildRenderTree(c,b);var d=!a;d&&c.sync(),this.dirty=!1}},get parentRenderer(){return E(this.host).renderer},invalidate:function(){if(!this.dirty){this.dirty=!0;var a=this.parentRenderer;if(a&&a.invalidate(),N.push(this),y)return;y=window[M](i,0)}},distribution:function(a){this.resetAll(a),this.distributionResolution(a)},resetAll:function(a){v(a)?e(a):s(a);for(var b=a.firstChild;b;b=b.nextSibling)this.resetAll(b);a.shadowRoot&&this.resetAll(a.shadowRoot),a.olderShadowRoot&&this.resetAll(a.olderShadowRoot)},distributionResolution:function(a){if(w(a)){for(var b=a,c=o(b),d=x(b),e=0;e<d.length;e++)this.poolDistribution(d[e],c);for(var e=d.length-1;e>=0;e--){var f=d[e],g=p(f);if(g){var h=f.olderShadowRoot;h&&(c=o(h));for(var i=0;i<c.length;i++)q(c[i],g)}this.distributionResolution(f)}}for(var j=a.firstChild;j;j=j.nextSibling)this.distributionResolution(j)},poolDistribution:function(a,b){if(!(a instanceof B))if(a instanceof A){var c=a;this.updateDependentAttributes(c.getAttribute("select"));for(var d=!1,e=0;e<b.length;e++){var a=b[e];a&&t(a,c)&&(q(a,c),b[e]=void 0,d=!0)}if(!d)for(var f=c.firstChild;f;f=f.nextSibling)q(f,c)}else for(var f=a.firstChild;f;f=f.nextSibling)this.poolDistribution(f,b)},buildRenderTree:function(a,b){for(var c=this.compose(b),d=0;d<c.length;d++){var e=c[d],f=a.append(e);this.buildRenderTree(f,e)}if(w(b)){var g=j(b);g.dirty=!1}},compose:function(a){for(var b=[],c=a.shadowRoot||a,d=c.firstChild;d;d=d.nextSibling)if(v(d)){this.associateNode(c);for(var e=f(d),g=0;g<e.length;g++){var h=e[g];u(d,h)&&b.push(h)}}else b.push(d);return b},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]},associateNode:function(a){G(a).polymerShadowRenderer_=this}};var P=/^(:not\()?[*.#[a-zA-Z_|]/;C.prototype.invalidateShadowRenderer=function(){var a=G(this).polymerShadowRenderer_;return a?(a.invalidate(),!0):!1},A.prototype.getDistributedNodes=B.prototype.getDistributedNodes=function(){return h(),f(this)},z.prototype.getDestinationInsertionPoints=function(){return h(),r(this)||[]},A.prototype.nodeIsInserted_=B.prototype.nodeIsInserted_=function(){this.invalidateShadowRenderer();var a,b=k(this);b&&(a=l(b)),G(this).polymerShadowRenderer_=a,a&&a.invalidate()},a.getRendererForHost=j,a.getShadowTrees=x,a.renderAllPending=h,a.getDestinationInsertionPoints=r,a.visual={insertBefore:c,remove:d}}(window.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","HTMLTextAreaElement"];i.forEach(b)}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){d(a,this)}{var c=a.registerWrapper,d=a.setWrapper,e=a.unsafeUnwrap,f=a.unwrap,g=a.unwrapIfNeeded,h=a.wrap;window.Selection}b.prototype={get anchorNode(){return h(e(this).anchorNode)},get focusNode(){return h(e(this).focusNode)},addRange:function(a){e(this).addRange(f(a))},collapse:function(a,b){e(this).collapse(g(a),b)},containsNode:function(a,b){return e(this).containsNode(g(a),b)},extend:function(a,b){e(this).extend(g(a),b)},getRangeAt:function(a){return h(e(this).getRangeAt(a))},removeRange:function(a){e(this).removeRange(f(a))},selectAllChildren:function(a){e(this).selectAllChildren(g(a))},toString:function(){return e(this).toString()}},c(window.Selection,b,window.getSelection()),a.wrappers.Selection=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){k.call(this,a),this.treeScope_=new p(this,null)}function c(a){var c=document[a];b.prototype[a]=function(){return C(c.apply(A(this),arguments))}}function d(a,b){F.call(A(b),B(a)),e(a,b)}function e(a,b){a.shadowRoot&&b.adoptNode(a.shadowRoot),a instanceof o&&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){z(a,this)}function h(a,b){var c=document.implementation[b];a.prototype[b]=function(){return C(c.apply(A(this),arguments))}}function i(a,b){var c=document.implementation[b];a.prototype[b]=function(){return c.apply(A(this),arguments)}}var j=a.GetElementsByInterface,k=a.wrappers.Node,l=a.ParentNodeInterface,m=a.wrappers.Selection,n=a.SelectorsInterface,o=a.wrappers.ShadowRoot,p=a.TreeScope,q=a.cloneNode,r=a.defineWrapGetter,s=a.elementFromPoint,t=a.forwardMethodsToWrapper,u=a.matchesNames,v=a.mixin,w=a.registerWrapper,x=a.renderAllPending,y=a.rewrap,z=a.setWrapper,A=a.unsafeUnwrap,B=a.unwrap,C=a.wrap,D=a.wrapEventTargetMethods,E=(a.wrapNodeList,new WeakMap);b.prototype=Object.create(k.prototype),r(b,"documentElement"),r(b,"body"),r(b,"head"),["createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","getElementById"].forEach(c);var F=document.adoptNode,G=document.getSelection;if(v(b.prototype,{adoptNode:function(a){return a.parentNode&&a.parentNode.removeChild(a),d(a,this),a},elementFromPoint:function(a,b){return s(this,this,a,b)},importNode:function(a,b){return q(a,b,A(this))},getSelection:function(){return x(),new m(G.call(B(this)))},getElementsByName:function(a){return n.querySelectorAll.call(this,"[name="+JSON.stringify(String(a))+"]")}}),document.registerElement){var H=document.registerElement;b.prototype.registerElement=function(b,c){function d(a){return a?void z(a,this):f?document.createElement(f,b):document.createElement(b)}var e,f;if(void 0!==c&&(e=c.prototype,f=c.extends),e||(e=Object.create(HTMLElement.prototype)),a.nativePrototypeTable.get(e))throw new Error("NotSupportedError");for(var g,h=Object.getPrototypeOf(e),i=[];h&&!(g=a.nativePrototypeTable.get(h));)i.push(h),h=Object.getPrototypeOf(h);if(!g)throw new Error("NotSupportedError");for(var j=Object.create(g),k=i.length-1;k>=0;k--)j=Object.create(j);["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"].forEach(function(a){var b=e[a];b&&(j[a]=function(){C(this)instanceof d||y(this),b.apply(C(this),arguments)})});var l={prototype:j};f&&(l.extends=f),d.prototype=e,d.prototype.constructor=d,a.constructorTable.set(j,d),a.nativePrototypeTable.set(e,j);H.call(B(this),b,l);return d},t([window.HTMLDocument||window.Document],["registerElement"])}t([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement,window.HTMLHtmlElement],["appendChild","compareDocumentPosition","contains","getElementsByClassName","getElementsByTagName","getElementsByTagNameNS","insertBefore","querySelector","querySelectorAll","removeChild","replaceChild"].concat(u)),t([window.HTMLDocument||window.Document],["adoptNode","importNode","contains","createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","elementFromPoint","getElementById","getElementsByName","getSelection"]),v(b.prototype,j),v(b.prototype,l),v(b.prototype,n),v(b.prototype,{get implementation(){var a=E.get(this);return a?a:(a=new g(B(this).implementation),E.set(this,a),a)},get defaultView(){return C(B(this).defaultView)}}),w(window.Document,b,document.implementation.createHTMLDocument("")),window.HTMLDocument&&w(window.HTMLDocument,b),D([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement]),h(g,"createDocumentType"),h(g,"createDocument"),h(g,"createHTMLDocument"),i(g,"hasFeature"),w(window.DOMImplementation,g),t([window.DOMImplementation],["createDocumentType","createDocument","createHTMLDocument","hasFeature"]),a.adoptNodeNoRemove=d,a.wrappers.DOMImplementation=g,a.wrappers.Document=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.EventTarget,d=a.wrappers.Selection,e=a.mixin,f=a.registerWrapper,g=a.renderAllPending,h=a.unwrap,i=a.unwrapIfNeeded,j=a.wrap,k=window.Window,l=window.getComputedStyle,m=window.getDefaultComputedStyle,n=window.getSelection;b.prototype=Object.create(c.prototype),k.prototype.getComputedStyle=function(a,b){return j(this||window).getComputedStyle(i(a),b)},m&&(k.prototype.getDefaultComputedStyle=function(a,b){return j(this||window).getDefaultComputedStyle(i(a),b)}),k.prototype.getSelection=function(){return j(this||window).getSelection()},delete window.getComputedStyle,delete window.getDefaultComputedStyle,delete window.getSelection,["addEventListener","removeEventListener","dispatchEvent"].forEach(function(a){k.prototype[a]=function(){var b=j(this||window);return b[a].apply(b,arguments)},delete window[a]}),e(b.prototype,{getComputedStyle:function(a,b){return g(),l.call(h(this),i(a),b)},getSelection:function(){return g(),new d(n.call(h(this)))},get document(){return j(h(this).document)}}),m&&(b.prototype.getDefaultComputedStyle=function(a,b){return g(),m.call(h(this),i(a),b)}),f(k,b,window),a.wrappers.Window=b}(window.ShadowDOMPolyfill),function(a){"use strict";var b=a.unwrap,c=window.DataTransfer||window.Clipboard,d=c.prototype.setDragImage;d&&(c.prototype.setDragImage=function(a,c,e){d.call(this,b(a),c,e)})}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b;b=a instanceof f?a:new f(a&&e(a)),d(b,this)}var c=a.registerWrapper,d=a.setWrapper,e=a.unwrap,f=window.FormData;c(f,b,new f),a.wrappers.FormData=b}(window.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}}var c=(a.isWrapperFor,{a:"HTMLAnchorElement",area:"HTMLAreaElement",audio:"HTMLAudioElement",base:"HTMLBaseElement",body:"HTMLBodyElement",br:"HTMLBRElement",button:"HTMLButtonElement",canvas:"HTMLCanvasElement",caption:"HTMLTableCaptionElement",col:"HTMLTableColElement",content:"HTMLContentElement",data:"HTMLDataElement",datalist:"HTMLDataListElement",del:"HTMLModElement",dir:"HTMLDirectoryElement",div:"HTMLDivElement",dl:"HTMLDListElement",embed:"HTMLEmbedElement",fieldset:"HTMLFieldSetElement",font:"HTMLFontElement",form:"HTMLFormElement",frame:"HTMLFrameElement",frameset:"HTMLFrameSetElement",h1:"HTMLHeadingElement",head:"HTMLHeadElement",hr:"HTMLHRElement",html:"HTMLHtmlElement",iframe:"HTMLIFrameElement",img:"HTMLImageElement",input:"HTMLInputElement",keygen:"HTMLKeygenElement",label:"HTMLLabelElement",legend:"HTMLLegendElement",li:"HTMLLIElement",link:"HTMLLinkElement",map:"HTMLMapElement",marquee:"HTMLMarqueeElement",menu:"HTMLMenuElement",menuitem:"HTMLMenuItemElement",meta:"HTMLMetaElement",meter:"HTMLMeterElement",object:"HTMLObjectElement",ol:"HTMLOListElement",optgroup:"HTMLOptGroupElement",option:"HTMLOptionElement",output:"HTMLOutputElement",p:"HTMLParagraphElement",param:"HTMLParamElement",pre:"HTMLPreElement",progress:"HTMLProgressElement",q:"HTMLQuoteElement",script:"HTMLScriptElement",select:"HTMLSelectElement",shadow:"HTMLShadowElement",source:"HTMLSourceElement",span:"HTMLSpanElement",style:"HTMLStyleElement",table:"HTMLTableElement",tbody:"HTMLTableSectionElement",template:"HTMLTemplateElement",textarea:"HTMLTextAreaElement",thead:"HTMLTableSectionElement",time:"HTMLTimeElement",title:"HTMLTitleElement",tr:"HTMLTableRowElement",track:"HTMLTrackElement",ul:"HTMLUListElement",video:"HTMLVideoElement"});Object.keys(c).forEach(b),Object.getOwnPropertyNames(a.wrappers).forEach(function(b){window[b]=a.wrappers[b]})}(window.ShadowDOMPolyfill),function(a){function b(a,c){var d,e,f,g,h=a.firstElementChild;for(e=[],f=a.shadowRoot;f;)e.push(f),f=f.olderShadowRoot;for(g=e.length-1;g>=0;g--)if(d=e[g].querySelector(c))return d;for(;h;){if(d=b(h,c))return d;h=h.nextElementSibling}return null}function c(a,b,d){var e,f,g,h,i,j=a.firstElementChild;for(g=[],f=a.shadowRoot;f;)g.push(f),f=f.olderShadowRoot;for(h=g.length-1;h>=0;h--)for(e=g[h].querySelectorAll(b),i=0;i<e.length;i++)d.push(e[i]);for(;j;)c(j,b,d),j=j.nextElementSibling;return d}window.wrap=ShadowDOMPolyfill.wrapIfNeeded,window.unwrap=ShadowDOMPolyfill.unwrapIfNeeded,Object.defineProperty(Element.prototype,"webkitShadowRoot",Object.getOwnPropertyDescriptor(Element.prototype,"shadowRoot"));var d=Element.prototype.createShadowRoot;Element.prototype.createShadowRoot=function(){var a=d.call(this);return CustomElements.watchShadow(this),a},Element.prototype.webkitCreateShadowRoot=Element.prototype.createShadowRoot,a.queryAllShadows=function(a,d,e){return e?c(a,d,[]):b(a,d)}}(window.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(l,"")),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=[];if(b.sheet)try{d=b.sheet.cssRules}catch(e){}else console.warn("sheet not found",b);return b.parentNode.removeChild(b),d}function e(){v.initialized=!0,document.body.appendChild(v);var a=v.contentDocument,b=a.createElement("base");b.href=document.baseURI,a.head.appendChild(b)}function f(a){v.initialized||e(),document.body.appendChild(v),a(v.contentDocument),document.body.removeChild(v)}function g(a,b){if(b){var e;if(a.match("@import")&&x){var g=c(a);f(function(a){a.head.appendChild(g.impl),e=g.sheet.cssRules,b(e)})}else e=d(a),b(e)}}function h(a){a&&j().appendChild(document.createTextNode(a))}function i(a,b){var d=c(a);d.setAttribute(b,""),d.setAttribute(z,""),document.head.appendChild(d)}function j(){return w||(w=document.createElement("style"),w.setAttribute(z,""),w[z]=!0),w}var k={strictStyling:!1,registry:{},shimStyling:function(a,c,d){var e=this.prepareRoot(a,c,d),f=this.isTypeExtension(d),g=this.makeScopeSelector(c,f),h=b(e,!0);h=this.scopeCssText(h,g),a&&(a.shimmedStyle=h),this.addCssToDocument(h,c)},shimStyle:function(a,b){return this.shimCssText(a.textContent,b)},shimCssText:function(a,b){return a=this.insertDirectives(a),this.scopeCssText(a,b)},makeScopeSelector:function(a,b){return a?b?"[is="+a+"]":a:""},isTypeExtension:function(a){return a&&a.indexOf("-")<0},prepareRoot:function(a,b,c){var d=this.registerRoot(a,b,c);return this.replaceTextInStyles(d.rootStyles,this.insertDirectives),this.removeStyles(a,d.rootStyles),this.strictStyling&&this.applyScopeToContent(a,b),d.scopeStyles},removeStyles:function(a,b){for(var c,d=0,e=b.length;e>d&&(c=b[d]);d++)c.parentNode.removeChild(c)},registerRoot:function(a,b,c){var d=this.registry[b]={root:a,name:b,extendsName:c},e=this.findStyles(a);d.rootStyles=e,d.scopeStyles=d.rootStyles;var f=this.registry[d.extendsName];return f&&(d.scopeStyles=f.scopeStyles.concat(d.scopeStyles)),d},findStyles:function(a){if(!a)return[];var b=a.querySelectorAll("style");return Array.prototype.filter.call(b,function(a){return!a.hasAttribute(A)})},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))},insertDirectives:function(a){return a=this.insertPolyfillDirectivesInCssText(a),this.insertPolyfillRulesInCssText(a)},insertPolyfillDirectivesInCssText:function(a){return a=a.replace(m,function(a,b){return b.slice(0,-2)+"{"}),a.replace(n,function(a,b){return b+" {"})},insertPolyfillRulesInCssText:function(a){return a=a.replace(o,function(a,b){return b.slice(0,-1)}),a.replace(p,function(a,b,c,d){var e=a.replace(b,"").replace(c,"");return d+e})},scopeCssText:function(a,b){var c=this.extractUnscopedRulesFromCssText(a);if(a=this.insertPolyfillHostInCssText(a),a=this.convertColonHost(a),a=this.convertColonHostContext(a),a=this.convertShadowDOMSelectors(a),b){var a,d=this;g(a,function(c){a=d.scopeRules(c,b)})}return a=a+"\n"+c,a.trim()},extractUnscopedRulesFromCssText:function(a){for(var b,c="";b=q.exec(a);)c+=b[1].slice(0,-1)+"\n\n";for(;b=r.exec(a);)c+=b[0].replace(b[2],"").replace(b[1],b[3])+"\n\n";return c},convertColonHost:function(a){return this.convertColonRule(a,cssColonHostRe,this.colonHostPartReplacer)},convertColonHostContext:function(a){return this.convertColonRule(a,cssColonHostContextRe,this.colonHostContextPartReplacer)},convertColonRule:function(a,b,c){return a.replace(b,function(a,b,d,e){if(b=polyfillHostNoCombinator,d){for(var f,g=d.split(","),h=[],i=0,j=g.length;j>i&&(f=g[i]);i++)f=f.trim(),h.push(c(b,f,e));return h.join(",")}return b+e})},colonHostContextPartReplacer:function(a,b,c){return b.match(s)?this.colonHostPartReplacer(a,b,c):a+b+c+", "+b+" "+a+c},colonHostPartReplacer:function(a,b,c){return a+b.replace(s,"")+c},convertShadowDOMSelectors:function(a){for(var b=0;b<shadowDOMSelectorsRe.length;b++)a=a.replace(shadowDOMSelectorsRe[b]," ");return a},scopeRules:function(a,b){var c="";return a&&Array.prototype.forEach.call(a,function(a){if(a.selectorText&&a.style&&void 0!==a.style.cssText)c+=this.scopeSelector(a.selectorText,b,this.strictStyling)+" {\n	",c+=this.propertiesFromRule(a)+"\n}\n\n";else if(a.type===CSSRule.MEDIA_RULE)c+="@media "+a.media.mediaText+" {\n",c+=this.scopeRules(a.cssRules,b),c+="\n}\n\n";else try{a.cssText&&(c+=a.cssText+"\n\n")}catch(d){}},this),c},scopeSelector:function(a,b,c){var d=[],e=a.split(",");return e.forEach(function(a){a=a.trim(),this.selectorNeedsScoping(a,b)&&(a=c&&!a.match(polyfillHostNoCombinator)?this.applyStrictSelectorScope(a,b):this.applySelectorScope(a,b)),d.push(a)},this),d.join(", ")},selectorNeedsScoping:function(a,b){if(Array.isArray(b))return!0;var c=this.makeScopeMatcher(b);return!a.match(c)},makeScopeMatcher:function(a){return a=a.replace(/\[/g,"\\[").replace(/\[/g,"\\]"),new RegExp("^("+a+")"+selectorReSuffix,"m")},applySelectorScope:function(a,b){return Array.isArray(b)?this.applySelectorScopeList(a,b):this.applySimpleSelectorScope(a,b)},applySelectorScopeList:function(a,b){for(var c,d=[],e=0;c=b[e];e++)d.push(this.applySimpleSelectorScope(a,c));return d.join(", ")},applySimpleSelectorScope:function(a,b){return a.match(polyfillHostRe)?(a=a.replace(polyfillHostNoCombinator,b),a.replace(polyfillHostRe,b+" ")):b+" "+a},applyStrictSelectorScope:function(a,b){b=b.replace(/\[is=([^\]]*)\]/g,"$1");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(polyfillHostRe,"");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(colonHostContextRe,t).replace(colonHostRe,s)},propertiesFromRule:function(a){var b=a.style.cssText;a.style.content&&!a.style.content.match(/['"]+|attr/)&&(b=b.replace(/content:[^;]*;/g,"content: '"+a.style.content+"';"));var c=a.style;for(var d in c)"initial"===c[d]&&(b+=d+": initial; ");return b},replaceTextInStyles:function(a,b){a&&b&&(a instanceof Array||(a=[a]),Array.prototype.forEach.call(a,function(a){a.textContent=b.call(this,a.textContent)},this))},addCssToDocument:function(a,b){a.match("@import")?i(a,b):h(a)}},l=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,m=/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,n=/polyfill-next-selector[^}]*content\:[\s]*?['"](.*?)['"][;\s]*}([^{]*?){/gim,o=/\/\*\s@polyfill-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,p=/(polyfill-rule)[^}]*(content\:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim,q=/\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,r=/(polyfill-unscoped-rule)[^}]*(content\:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim,s="-shadowcsshost",t="-shadowcsscontext",u=")(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))?([^,{]*)";cssColonHostRe=new RegExp("("+s+u,"gim"),cssColonHostContextRe=new RegExp("("+t+u,"gim"),selectorReSuffix="([>\\s~+[.,{:][\\s\\S]*)?$",colonHostRe=/\:host/gim,colonHostContextRe=/\:host-context/gim,polyfillHostNoCombinator=s+"-no-combinator",polyfillHostRe=new RegExp(s,"gim"),polyfillHostContextRe=new RegExp(t,"gim"),shadowDOMSelectorsRe=[/\^\^/g,/\^/g,/\/shadow\//g,/\/shadow-deep\//g,/::shadow/g,/\/deep\//g,/::content/g];var v=document.createElement("iframe");v.style.display="none";var w,x=navigator.userAgent.match("Chrome"),y="shim-shadowdom",z="shim-shadowdom-css",A="no-shim";if(window.ShadowDOMPolyfill){h("style { display: none !important; }\n");var B=wrap(document),C=B.querySelector("head");C.insertBefore(j(),C.childNodes[0]),document.addEventListener("DOMContentLoaded",function(){var b=a.urlResolver;if(window.HTMLImports&&!HTMLImports.useNative){var c="link[rel=stylesheet]["+y+"]",d="style["+y+"]";HTMLImports.importer.documentPreloadSelectors+=","+c,HTMLImports.importer.importsPreloadSelectors+=","+c,HTMLImports.parser.documentSelectors=[HTMLImports.parser.documentSelectors,c,d].join(",");var e=HTMLImports.parser.parseGeneric;HTMLImports.parser.parseGeneric=function(a){if(!a[z]){var c=a.__importElement||a;if(!c.hasAttribute(y))return void e.call(this,a);a.__resource?(c=a.ownerDocument.createElement("style"),c.textContent=b.resolveCssText(a.__resource,a.href)):b.resolveStyle(c),c.textContent=k.shimStyle(c),c.removeAttribute(y,""),c.setAttribute(z,""),c[z]=!0,c.parentNode!==C&&(a.parentNode===C?C.replaceChild(c,a):this.addElementToDocument(c)),c.__importParsed=!0,this.markParsingComplete(a),this.parseNext()}};var f=HTMLImports.parser.hasResource;HTMLImports.parser.hasResource=function(a){return"link"===a.localName&&"stylesheet"===a.rel&&a.hasAttribute(y)?a.__resource:f.call(this,a)
+}}})}a.ShadowCSS=k}(window.Platform)):!function(){window.wrap=window.unwrap=function(a){return a},addEventListener("DOMContentLoaded",function(){if(CustomElements.useNative===!1){var a=Element.prototype.createShadowRoot;Element.prototype.createShadowRoot=function(){var b=a.call(this);return CustomElements.watchShadow(this),b}}}),Platform.templateContent=function(a){if(window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(a),!a.content&&!a._content){for(var b=document.createDocumentFragment();a.firstChild;)b.appendChild(a.firstChild);a._content=b}return a.content||a._content}}(window.Platform),function(a){"use strict";function b(a){return void 0!==m[a]}function c(){h.call(this),this._isInvalid=!0}function d(a){return""==a&&c.call(this),a.toLowerCase()}function e(a){var b=a.charCodeAt(0);return b>32&&127>b&&-1==[34,35,60,62,63,96].indexOf(b)?a:encodeURIComponent(a)}function f(a){var b=a.charCodeAt(0);return b>32&&127>b&&-1==[34,35,60,62,96].indexOf(b)?a:encodeURIComponent(a)}function g(a,g,h){function i(a){t.push(a)}var j=g||"scheme start",k=0,l="",r=!1,s=!1,t=[];a:for(;(a[k-1]!=o||0==k)&&!this._isInvalid;){var u=a[k];switch(j){case"scheme start":if(!u||!p.test(u)){if(g){i("Invalid scheme.");break a}l="",j="no scheme";continue}l+=u.toLowerCase(),j="scheme";break;case"scheme":if(u&&q.test(u))l+=u.toLowerCase();else{if(":"!=u){if(g){if(o==u)break a;i("Code point not allowed in scheme: "+u);break a}l="",k=0,j="no scheme";continue}if(this._scheme=l,l="",g)break a;b(this._scheme)&&(this._isRelative=!0),j="file"==this._scheme?"relative":this._isRelative&&h&&h._scheme==this._scheme?"relative or authority":this._isRelative?"authority first slash":"scheme data"}break;case"scheme data":"?"==u?(query="?",j="query"):"#"==u?(this._fragment="#",j="fragment"):o!=u&&"	"!=u&&"\n"!=u&&"\r"!=u&&(this._schemeData+=e(u));break;case"no scheme":if(h&&b(h._scheme)){j="relative";continue}i("Missing scheme."),c.call(this);break;case"relative or authority":if("/"!=u||"/"!=a[k+1]){i("Expected /, got: "+u),j="relative";continue}j="authority ignore slashes";break;case"relative":if(this._isRelative=!0,"file"!=this._scheme&&(this._scheme=h._scheme),o==u){this._host=h._host,this._port=h._port,this._path=h._path.slice(),this._query=h._query;break a}if("/"==u||"\\"==u)"\\"==u&&i("\\ is an invalid code point."),j="relative slash";else if("?"==u)this._host=h._host,this._port=h._port,this._path=h._path.slice(),this._query="?",j="query";else{if("#"!=u){var v=a[k+1],w=a[k+2];("file"!=this._scheme||!p.test(u)||":"!=v&&"|"!=v||o!=w&&"/"!=w&&"\\"!=w&&"?"!=w&&"#"!=w)&&(this._host=h._host,this._port=h._port,this._path=h._path.slice(),this._path.pop()),j="relative path";continue}this._host=h._host,this._port=h._port,this._path=h._path.slice(),this._query=h._query,this._fragment="#",j="fragment"}break;case"relative slash":if("/"!=u&&"\\"!=u){"file"!=this._scheme&&(this._host=h._host,this._port=h._port),j="relative path";continue}"\\"==u&&i("\\ is an invalid code point."),j="file"==this._scheme?"file host":"authority ignore slashes";break;case"authority first slash":if("/"!=u){i("Expected '/', got: "+u),j="authority ignore slashes";continue}j="authority second slash";break;case"authority second slash":if(j="authority ignore slashes","/"!=u){i("Expected '/', got: "+u);continue}break;case"authority ignore slashes":if("/"!=u&&"\\"!=u){j="authority";continue}i("Expected authority, got: "+u);break;case"authority":if("@"==u){r&&(i("@ already seen."),l+="%40"),r=!0;for(var x=0;x<l.length;x++){var y=l[x];if("	"!=y&&"\n"!=y&&"\r"!=y)if(":"!=y||null!==this._password){var z=e(y);null!==this._password?this._password+=z:this._username+=z}else this._password="";else i("Invalid whitespace in authority.")}l=""}else{if(o==u||"/"==u||"\\"==u||"?"==u||"#"==u){k-=l.length,l="",j="host";continue}l+=u}break;case"file host":if(o==u||"/"==u||"\\"==u||"?"==u||"#"==u){2!=l.length||!p.test(l[0])||":"!=l[1]&&"|"!=l[1]?0==l.length?j="relative path start":(this._host=d.call(this,l),l="",j="relative path start"):j="relative path";continue}"	"==u||"\n"==u||"\r"==u?i("Invalid whitespace in file host."):l+=u;break;case"host":case"hostname":if(":"!=u||s){if(o==u||"/"==u||"\\"==u||"?"==u||"#"==u){if(this._host=d.call(this,l),l="",j="relative path start",g)break a;continue}"	"!=u&&"\n"!=u&&"\r"!=u?("["==u?s=!0:"]"==u&&(s=!1),l+=u):i("Invalid code point in host/hostname: "+u)}else if(this._host=d.call(this,l),l="",j="port","hostname"==g)break a;break;case"port":if(/[0-9]/.test(u))l+=u;else{if(o==u||"/"==u||"\\"==u||"?"==u||"#"==u||g){if(""!=l){var A=parseInt(l,10);A!=m[this._scheme]&&(this._port=A+""),l=""}if(g)break a;j="relative path start";continue}"	"==u||"\n"==u||"\r"==u?i("Invalid code point in port: "+u):c.call(this)}break;case"relative path start":if("\\"==u&&i("'\\' not allowed in path."),j="relative path","/"!=u&&"\\"!=u)continue;break;case"relative path":if(o!=u&&"/"!=u&&"\\"!=u&&(g||"?"!=u&&"#"!=u))"	"!=u&&"\n"!=u&&"\r"!=u&&(l+=e(u));else{"\\"==u&&i("\\ not allowed in relative path.");var B;(B=n[l.toLowerCase()])&&(l=B),".."==l?(this._path.pop(),"/"!=u&&"\\"!=u&&this._path.push("")):"."==l&&"/"!=u&&"\\"!=u?this._path.push(""):"."!=l&&("file"==this._scheme&&0==this._path.length&&2==l.length&&p.test(l[0])&&"|"==l[1]&&(l=l[0]+":"),this._path.push(l)),l="","?"==u?(this._query="?",j="query"):"#"==u&&(this._fragment="#",j="fragment")}break;case"query":g||"#"!=u?o!=u&&"	"!=u&&"\n"!=u&&"\r"!=u&&(this._query+=f(u)):(this._fragment="#",j="fragment");break;case"fragment":o!=u&&"	"!=u&&"\n"!=u&&"\r"!=u&&(this._fragment+=u)}k++}}function h(){this._scheme="",this._schemeData="",this._username="",this._password=null,this._host="",this._port="",this._path=[],this._query="",this._fragment="",this._isInvalid=!1,this._isRelative=!1}function i(a,b){void 0===b||b instanceof i||(b=new i(String(b))),this._url=a,h.call(this);var c=a.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g,"");g.call(this,c,null,b)}var j=!1;if(!a.forceJURL)try{var k=new URL("b","http://a");j="http://a/b"===k.href}catch(l){}if(!j){var m=Object.create(null);m.ftp=21,m.file=0,m.gopher=70,m.http=80,m.https=443,m.ws=80,m.wss=443;var n=Object.create(null);n["%2e"]=".",n[".%2e"]="..",n["%2e."]="..",n["%2e%2e"]="..";var o=void 0,p=/[a-zA-Z]/,q=/[a-zA-Z0-9\+\-\.]/;i.prototype={get href(){if(this._isInvalid)return this._url;var a="";return(""!=this._username||null!=this._password)&&(a=this._username+(null!=this._password?":"+this._password:"")+"@"),this.protocol+(this._isRelative?"//"+a+this.host:"")+this.pathname+this._query+this._fragment},set href(a){h.call(this),g.call(this,a)},get protocol(){return this._scheme+":"},set protocol(a){this._isInvalid||g.call(this,a+":","scheme start")},get host(){return this._isInvalid?"":this._port?this._host+":"+this._port:this._host},set host(a){!this._isInvalid&&this._isRelative&&g.call(this,a,"host")},get hostname(){return this._host},set hostname(a){!this._isInvalid&&this._isRelative&&g.call(this,a,"hostname")},get port(){return this._port},set port(a){!this._isInvalid&&this._isRelative&&g.call(this,a,"port")},get pathname(){return this._isInvalid?"":this._isRelative?"/"+this._path.join("/"):this._schemeData},set pathname(a){!this._isInvalid&&this._isRelative&&(this._path=[],g.call(this,a,"relative path start"))},get search(){return this._isInvalid||!this._query||"?"==this._query?"":this._query},set search(a){!this._isInvalid&&this._isRelative&&(this._query="?","?"==a[0]&&(a=a.slice(1)),g.call(this,a,"query"))},get hash(){return this._isInvalid||!this._fragment||"#"==this._fragment?"":this._fragment},set hash(a){this._isInvalid||(this._fragment="#","#"==a[0]&&(a=a.slice(1)),g.call(this,a,"fragment"))}};var r=a.URL;r&&(i.createObjectURL=function(){return r.createObjectURL.apply(r,arguments)},i.revokeObjectURL=function(a){r.revokeObjectURL(a)}),a.URL=i}}(this),function(a){function b(a){for(var b=a||{},d=1;d<arguments.length;d++){var e=arguments[d];try{for(var f in e)c(f,e,b)}catch(g){}}return b}function c(a,b,c){var e=d(b,a);Object.defineProperty(c,a,e)}function d(a,b){if(a){var c=Object.getOwnPropertyDescriptor(a,b);return c||d(Object.getPrototypeOf(a),b)}}Function.prototype.bind||(Function.prototype.bind=function(a){var b=this,c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();return d.push.apply(d,arguments),b.apply(a,d)}}),a.mixin=b}(window.Platform),function(a){"use strict";function b(a,b,c){var d="string"==typeof a?document.createElement(a):a.cloneNode(!0);if(d.innerHTML=b,c)for(var e in c)d.setAttribute(e,c[e]);return d}var c=DOMTokenList.prototype.add,d=DOMTokenList.prototype.remove;DOMTokenList.prototype.add=function(){for(var a=0;a<arguments.length;a++)c.call(this,arguments[a])},DOMTokenList.prototype.remove=function(){for(var a=0;a<arguments.length;a++)d.call(this,arguments[a])},DOMTokenList.prototype.toggle=function(a,b){1==arguments.length&&(b=!this.contains(a)),b?this.add(a):this.remove(a)},DOMTokenList.prototype.switch=function(a,b){a&&this.remove(a),b&&this.add(b)};var e=function(){return Array.prototype.slice.call(this)},f=window.NamedNodeMap||window.MozNamedAttrMap||{};if(NodeList.prototype.array=e,f.prototype.array=e,HTMLCollection.prototype.array=e,!window.performance){var g=Date.now();window.performance={now:function(){return Date.now()-g}}}window.requestAnimationFrame||(window.requestAnimationFrame=function(){var a=window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame;return a?function(b){return a(function(){b(performance.now())})}:function(a){return window.setTimeout(a,1e3/60)}}()),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(){return window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||function(a){clearTimeout(a)}}());var h=[],i=function(){h.push(arguments)};window.Polymer=i,a.deliverDeclarations=function(){return a.deliverDeclarations=function(){throw"Possible attempt to load Polymer twice"},h},window.addEventListener("DOMContentLoaded",function(){window.Polymer===i&&(window.Polymer=function(){console.error('You tried to use polymer without loading it first. To load polymer, <link rel="import" href="components/polymer/polymer.html">')})}),a.createDOM=b}(window.Platform),function(a){a.templateContent=a.templateContent||function(a){return a.content}}(window.Platform),function(a){a=a||(window.Inspector={});var b;window.sinspect=function(a,d){b||(b=window.open("","ShadowDOM Inspector",null,!0),b.document.write(c),b.api={shadowize:shadowize}),f(a||wrap(document.body),d)};var c=["<!DOCTYPE html>","<html>","  <head>","    <title>ShadowDOM Inspector</title>","    <style>","      body {","      }","      pre {",'        font: 9pt "Courier New", monospace;',"        line-height: 1.5em;","      }","      tag {","        color: purple;","      }","      ul {","         margin: 0;","         padding: 0;","         list-style: none;","      }","      li {","         display: inline-block;","         background-color: #f1f1f1;","         padding: 4px 6px;","         border-radius: 4px;","         margin-right: 4px;","      }","    </style>","  </head>","  <body>",'    <ul id="crumbs">',"    </ul>",'    <div id="tree"></div>',"  </body>","</html>"].join("\n"),d=[],e=function(){var a=b.document,c=a.querySelector("#crumbs");c.textContent="";for(var e,g=0;e=d[g];g++){var h=a.createElement("a");h.href="#",h.textContent=e.localName,h.idx=g,h.onclick=function(a){for(var b;d.length>this.idx;)b=d.pop();f(b.shadow||b,b),a.preventDefault()},c.appendChild(a.createElement("li")).appendChild(h)}},f=function(a,c){var f=b.document;k=[];var g=c||a;d.push(g),e(),f.body.querySelector("#tree").innerHTML="<pre>"+j(a,a.childNodes)+"</pre>"},g=Array.prototype.forEach.call.bind(Array.prototype.forEach),h={STYLE:1,SCRIPT:1,"#comment":1,TEMPLATE:1},i=function(a){return h[a.nodeName]},j=function(a,b,c){if(i(a))return"";var d=c||"";if(a.localName||11==a.nodeType){var e=a.localName||"shadow-root",f=d+l(a);"content"==e&&(b=a.getDistributedNodes()),f+="<br/>";var h=d+"&nbsp;&nbsp;";g(b,function(a){f+=j(a,a.childNodes,h)}),f+=d,{br:1}[e]||(f+="<tag>&lt;/"+e+"&gt;</tag>",f+="<br/>")}else{var k=a.textContent.trim();f=k?d+'"'+k+'"<br/>':""}return f},k=[],l=function(a){var b="<tag>&lt;",c=a.localName||"shadow-root";return a.webkitShadowRoot||a.shadowRoot?(b+=' <button idx="'+k.length+'" onclick="api.shadowize.call(this)">'+c+"</button>",k.push(a)):b+=c||"shadow-root",a.attributes&&g(a.attributes,function(a){b+=" "+a.name+(a.value?'="'+a.value+'"':"")}),b+="&gt;</tag>"};shadowize=function(){var a=Number(this.attributes.idx.value),b=k[a];b?f(b.webkitShadowRoot||b.shadowRoot,b):(console.log("bad shadowize node"),console.dir(this))},a.output=j}(window.Inspector),function(){var a=document.createElement("style");a.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; } \n";var b=document.querySelector("head");b.insertBefore(a,b.firstChild)}(Platform),function(a){function b(a,b){return b=b||[],b.map||(b=[b]),a.apply(this,b.map(d))}function c(a,c,d){var e;switch(arguments.length){case 0:return;case 1:e=null;break;case 2:e=c.apply(this);break;default:e=b(d,c)}f[a]=e}function d(a){return f[a]}function e(a,c){HTMLImports.whenImportsReady(function(){b(c,a)})}var f={};a.marshal=d,a.modularize=c,a.using=e}(window),function(a){function b(a){f.textContent=d++,e.push(a)}function c(){for(;e.length;)e.shift()()}var d=0,e=[],f=document.createTextNode("");new(window.MutationObserver||JsMutationObserver)(c).observe(f,{characterData:!0}),a.endOfMicrotask=b}(Platform),function(a){function b(a,b,d,e){return a.replace(e,function(a,e,f,g){var h=f.replace(/["']/g,"");return h=c(b,h,d),e+"'"+h+"'"+g})}function c(a,b,c){if(b&&"/"===b[0])return b;var e=new URL(b,a);return c?e.href:d(e.href)}function d(a){var b=new URL(document.baseURI),c=new URL(a,b);return c.host===b.host&&c.port===b.port&&c.protocol===b.protocol?e(b,c):a}function e(a,b){for(var c=a.pathname,d=b.pathname,e=c.split("/"),f=d.split("/");e.length&&e[0]===f[0];)e.shift(),f.shift();for(var g=0,h=e.length-1;h>g;g++)f.unshift("..");return f.join("/")+b.search+b.hash}var f={resolveDom:function(a,b){b=b||a.ownerDocument.baseURI,this.resolveAttributes(a,b),this.resolveStyles(a,b);var c=a.querySelectorAll("template");if(c)for(var d,e=0,f=c.length;f>e&&(d=c[e]);e++)d.content&&this.resolveDom(d.content,b)},resolveTemplate:function(a){this.resolveDom(a.content,a.ownerDocument.baseURI)},resolveStyles:function(a,b){var c=a.querySelectorAll("style");if(c)for(var d,e=0,f=c.length;f>e&&(d=c[e]);e++)this.resolveStyle(d,b)},resolveStyle:function(a,b){b=b||a.ownerDocument.baseURI,a.textContent=this.resolveCssText(a.textContent,b)},resolveCssText:function(a,c,d){return a=b(a,c,d,g),b(a,c,d,h)},resolveAttributes:function(a,b){a.hasAttributes&&a.hasAttributes()&&this.resolveElementAttributes(a,b);var c=a&&a.querySelectorAll(j);if(c)for(var d,e=0,f=c.length;f>e&&(d=c[e]);e++)this.resolveElementAttributes(d,b)},resolveElementAttributes:function(a,d){d=d||a.ownerDocument.baseURI,i.forEach(function(e){var f,h=a.attributes[e],i=h&&h.value;i&&i.search(k)<0&&(f="style"===e?b(i,d,!1,g):c(d,i),h.value=f)})}},g=/(url\()([^)]*)(\))/g,h=/(@import[\s]+(?!url\())([^;]*)(;)/g,i=["href","src","action","style","url"],j="["+i.join("],[")+"]",k="{{.*}}";a.urlResolver=f}(Platform),function(a){function b(a){u.push(a),t||(t=!0,q(d))}function c(a){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(a)||a}function d(){t=!1;var a=u;u=[],a.sort(function(a,b){return a.uid_-b.uid_});var b=!1;a.forEach(function(a){var c=a.takeRecords();e(a),c.length&&(a.callback_(c,a),b=!0)}),b&&d()}function e(a){a.nodes_.forEach(function(b){var c=p.get(b);c&&c.forEach(function(b){b.observer===a&&b.removeTransientObservers()})})}function f(a,b){for(var c=a;c;c=c.parentNode){var d=p.get(c);if(d)for(var e=0;e<d.length;e++){var f=d[e],g=f.options;if(c===a||g.subtree){var h=b(g);h&&f.enqueue(h)}}}}function g(a){this.callback_=a,this.nodes_=[],this.records_=[],this.uid_=++v}function h(a,b){this.type=a,this.target=b,this.addedNodes=[],this.removedNodes=[],this.previousSibling=null,this.nextSibling=null,this.attributeName=null,this.attributeNamespace=null,this.oldValue=null}function i(a){var b=new h(a.type,a.target);return b.addedNodes=a.addedNodes.slice(),b.removedNodes=a.removedNodes.slice(),b.previousSibling=a.previousSibling,b.nextSibling=a.nextSibling,b.attributeName=a.attributeName,b.attributeNamespace=a.attributeNamespace,b.oldValue=a.oldValue,b}function j(a,b){return w=new h(a,b)}function k(a){return x?x:(x=i(w),x.oldValue=a,x)}function l(){w=x=void 0}function m(a){return a===x||a===w}function n(a,b){return a===b?a:x&&m(a)?x:null}function o(a,b,c){this.observer=a,this.target=b,this.options=c,this.transientObservedNodes=[]}var p=new WeakMap,q=window.msSetImmediate;if(!q){var r=[],s=String(Math.random());window.addEventListener("message",function(a){if(a.data===s){var b=r;r=[],b.forEach(function(a){a()})}}),q=function(a){r.push(a),window.postMessage(s,"*")}}var t=!1,u=[],v=0;g.prototype={observe:function(a,b){if(a=c(a),!b.childList&&!b.attributes&&!b.characterData||b.attributeOldValue&&!b.attributes||b.attributeFilter&&b.attributeFilter.length&&!b.attributes||b.characterDataOldValue&&!b.characterData)throw new SyntaxError;var d=p.get(a);d||p.set(a,d=[]);for(var e,f=0;f<d.length;f++)if(d[f].observer===this){e=d[f],e.removeListeners(),e.options=b;break}e||(e=new o(this,a,b),d.push(e),this.nodes_.push(a)),e.addListeners()},disconnect:function(){this.nodes_.forEach(function(a){for(var b=p.get(a),c=0;c<b.length;c++){var d=b[c];if(d.observer===this){d.removeListeners(),b.splice(c,1);break}}},this),this.records_=[]},takeRecords:function(){var a=this.records_;return this.records_=[],a}};var w,x;o.prototype={enqueue:function(a){var c=this.observer.records_,d=c.length;if(c.length>0){var e=c[d-1],f=n(e,a);if(f)return void(c[d-1]=f)}else b(this.observer);c[d]=a},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(a){var b=this.options;b.attributes&&a.addEventListener("DOMAttrModified",this,!0),b.characterData&&a.addEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.addEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(a){var b=this.options;b.attributes&&a.removeEventListener("DOMAttrModified",this,!0),b.characterData&&a.removeEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.removeEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(a){if(a!==this.target){this.addListeners_(a),this.transientObservedNodes.push(a);var b=p.get(a);b||p.set(a,b=[]),b.push(this)}},removeTransientObservers:function(){var a=this.transientObservedNodes;this.transientObservedNodes=[],a.forEach(function(a){this.removeListeners_(a);for(var b=p.get(a),c=0;c<b.length;c++)if(b[c]===this){b.splice(c,1);break}},this)},handleEvent:function(a){switch(a.stopImmediatePropagation(),a.type){case"DOMAttrModified":var b=a.attrName,c=a.relatedNode.namespaceURI,d=a.target,e=new j("attributes",d);e.attributeName=b,e.attributeNamespace=c;var g=a.attrChange===MutationEvent.ADDITION?null:a.prevValue;f(d,function(a){return!a.attributes||a.attributeFilter&&a.attributeFilter.length&&-1===a.attributeFilter.indexOf(b)&&-1===a.attributeFilter.indexOf(c)?void 0:a.attributeOldValue?k(g):e});break;case"DOMCharacterDataModified":var d=a.target,e=j("characterData",d),g=a.prevValue;f(d,function(a){return a.characterData?a.characterDataOldValue?k(g):e:void 0});break;case"DOMNodeRemoved":this.addTransientObserver(a.target);case"DOMNodeInserted":var h,i,d=a.relatedNode,m=a.target;"DOMNodeInserted"===a.type?(h=[m],i=[]):(h=[],i=[m]);var n=m.previousSibling,o=m.nextSibling,e=j("childList",d);e.addedNodes=h,e.removedNodes=i,e.previousSibling=n,e.nextSibling=o,f(d,function(a){return a.childList?e:void 0})}l()}},a.JsMutationObserver=g,a.MutationObserver||(a.MutationObserver=g)}(this),window.HTMLImports=window.HTMLImports||{flags:{}},function(a){function b(a,b){b=b||o,d(function(){e(a,b)},b)}function c(a){return"complete"===a.readyState||a.readyState===q}function d(a,b){if(c(b))a&&a();else{var e=function(){("complete"===b.readyState||b.readyState===q)&&(b.removeEventListener(r,e),d(a,b))};b.addEventListener(r,e)}}function e(a,b){function c(){g==h&&a&&a()}function d(){g++,c()}var e=b.querySelectorAll("link[rel=import]"),g=0,h=e.length;if(h)for(var i,j=0;h>j&&(i=e[j]);j++)f(i)?d.call(i):(i.addEventListener("load",d),i.addEventListener("error",d));else c()}function f(a){return l?a.__loaded:a.__importParsed}function g(a){for(var b,c=0,d=a.length;d>c&&(b=a[c]);c++)h(b)&&i(b)}function h(a){return"link"===a.localName&&"import"===a.rel}function i(a){var b=a.import;b?j({target:a}):(a.addEventListener("load",j),a.addEventListener("error",j))}function j(a){a.target.__loaded=!0}var k="import"in document.createElement("link"),l=k;isIE=/Trident/.test(navigator.userAgent);var m=Boolean(window.ShadowDOMPolyfill),n=function(a){return m?ShadowDOMPolyfill.wrapIfNeeded(a):a},o=n(document),p={get:function(){var a=HTMLImports.currentScript||document.currentScript||("complete"!==document.readyState?document.scripts[document.scripts.length-1]:null);return n(a)},configurable:!0};Object.defineProperty(document,"_currentScript",p),Object.defineProperty(o,"_currentScript",p);var q=isIE?"complete":"interactive",r="readystatechange";l&&new MutationObserver(function(a){for(var b,c=0,d=a.length;d>c&&(b=a[c]);c++)b.addedNodes&&g(b.addedNodes)}).observe(document.head,{childList:!0}),b(function(){HTMLImports.ready=!0,HTMLImports.readyTime=(new Date).getTime(),o.dispatchEvent(new CustomEvent("HTMLImportsLoaded",{bubbles:!0}))}),a.useNative=l,a.isImportLoaded=f,a.whenReady=b,a.isIE=isIE,a.whenImportsReady=b}(window.HTMLImports),function(a){var b=(a.path,a.xhr),c=a.flags,d=function(a,b){this.cache={},this.onload=a,this.oncomplete=b,this.inflight=0,this.pending={}};d.prototype={addNodes:function(a){this.inflight+=a.length;for(var b,c=0,d=a.length;d>c&&(b=a[c]);c++)this.require(b);this.checkDone()},addNode:function(a){this.inflight++,this.require(a),this.checkDone()},require:function(a){var b=a.src||a.href;a.__nodeUrl=b,this.dedupe(b,a)||this.fetch(b,a)},dedupe:function(a,b){if(this.pending[a])return this.pending[a].push(b),!0;return this.cache[a]?(this.onload(a,b,this.cache[a]),this.tail(),!0):(this.pending[a]=[b],!1)},fetch:function(a,d){if(c.load&&console.log("fetch",a,d),a.match(/^data:/)){var e=a.split(","),f=e[0],g=e[1];g=f.indexOf(";base64")>-1?atob(g):decodeURIComponent(g),setTimeout(function(){this.receive(a,d,null,g)}.bind(this),0)}else{var h=function(b,c,e){this.receive(a,d,b,c,e)}.bind(this);b.load(a,h)}},receive:function(a,b,c,d,e){this.cache[a]=d;for(var f,g=this.pending[a],h=0,i=g.length;i>h&&(f=g[h]);h++)this.onload(a,f,d,c,e),this.tail();this.pending[a]=null},tail:function(){--this.inflight,this.checkDone()},checkDone:function(){this.inflight||this.oncomplete()}},b=b||{async:!0,ok:function(a){return a.status>=200&&a.status<300||304===a.status||0===a.status},load:function(c,d,e){var f=new XMLHttpRequest;return(a.flags.debug||a.flags.bust)&&(c+="?"+Math.random()),f.open("GET",c,b.async),f.addEventListener("readystatechange",function(){if(4===f.readyState){var a=f.getResponseHeader("Location"),c=null;if(a)var c="/"===a.substr(0,1)?location.origin+a:a;d.call(e,!b.ok(f)&&f,f.response||f.responseText,c)}}),f.send(),f},loadDocument:function(a,b,c){this.load(a,b,c).responseType="document"}},a.xhr=b,a.Loader=d}(window.HTMLImports),function(a){function b(a){return"link"===a.localName&&a.rel===g}function c(a){var b=d(a);return"data:text/javascript;charset=utf-8,"+encodeURIComponent(b)}function d(a){return a.textContent+e(a)}function e(a){var b=a.__nodeUrl;if(!b){b=a.ownerDocument.baseURI;var c="["+Math.floor(1e3*(Math.random()+1))+"]",d=a.textContent.match(/Polymer\(['"]([^'"]*)/);c=d&&d[1]||c,b+="/"+c+".js"}return"\n//# sourceURL="+b+"\n"}function f(a){var b=a.ownerDocument.createElement("style");return b.textContent=a.textContent,n.resolveUrlsInStyle(b),b}var g="import",h=a.flags,i=a.isIE,j=window.ShadowDOMPolyfill?window.ShadowDOMPolyfill.wrapIfNeeded(document):document,k={documentSelectors:"link[rel="+g+"]",importsSelectors:["link[rel="+g+"]","link[rel=stylesheet]","style","script:not([type])",'script[type="text/javascript"]'].join(","),map:{link:"parseLink",script:"parseScript",style:"parseStyle"},parseNext:function(){var a=this.nextToParse();a&&this.parse(a)},parse:function(a){if(this.isParsed(a))return void(h.parse&&console.log("[%s] is already parsed",a.localName));var b=this[this.map[a.localName]];b&&(this.markParsing(a),b.call(this,a))},markParsing:function(a){h.parse&&console.log("parsing",a),this.parsingElement=a},markParsingComplete:function(a){a.__importParsed=!0,a.__importElement&&(a.__importElement.__importParsed=!0),this.parsingElement=null,h.parse&&console.log("completed",a)},invalidateParse:function(a){a&&a.__importLink&&(a.__importParsed=a.__importLink.__importParsed=!1,this.parseSoon())},parseSoon:function(){this._parseSoon&&cancelAnimationFrame(this._parseDelay);var a=this;this._parseSoon=requestAnimationFrame(function(){a.parseNext()})},parseImport:function(a){if(HTMLImports.__importsParsingHook&&HTMLImports.__importsParsingHook(a),a.import&&(a.import.__importParsed=!0),this.markParsingComplete(a),a.dispatchEvent(a.__resource&&!a.__error?new CustomEvent("load",{bubbles:!1}):new CustomEvent("error",{bubbles:!1})),a.__pending)for(var b;a.__pending.length;)b=a.__pending.shift(),b&&b({target:a});this.parseNext()},parseLink:function(a){b(a)?this.parseImport(a):(a.href=a.href,this.parseGeneric(a))},parseStyle:function(a){var b=a;a=f(a),a.__importElement=b,this.parseGeneric(a)},parseGeneric:function(a){this.trackElement(a),this.addElementToDocument(a)},rootImportForElement:function(a){for(var b=a;b.ownerDocument.__importLink;)b=b.ownerDocument.__importLink;return b},addElementToDocument:function(a){for(var b=this.rootImportForElement(a.__importElement||a),c=b.__insertedElements=b.__insertedElements||0,d=b.nextElementSibling,e=0;c>e;e++)d=d&&d.nextElementSibling;b.parentNode.insertBefore(a,d)},trackElement:function(a,b){var c=this,d=function(d){b&&b(d),c.markParsingComplete(a),c.parseNext()};if(a.addEventListener("load",d),a.addEventListener("error",d),i&&"style"===a.localName){var e=!1;if(-1==a.textContent.indexOf("@import"))e=!0;else if(a.sheet){e=!0;for(var f,g=a.sheet.cssRules,h=g?g.length:0,j=0;h>j&&(f=g[j]);j++)f.type===CSSRule.IMPORT_RULE&&(e=e&&Boolean(f.styleSheet))}e&&a.dispatchEvent(new CustomEvent("load",{bubbles:!1}))}},parseScript:function(b){var d=document.createElement("script");d.__importElement=b,d.src=b.src?b.src:c(b),a.currentScript=b,this.trackElement(d,function(){d.parentNode.removeChild(d),a.currentScript=null}),this.addElementToDocument(d)},nextToParse:function(){return!this.parsingElement&&this.nextToParseInDoc(j)},nextToParseInDoc:function(a,c){if(a)for(var d,e=a.querySelectorAll(this.parseSelectorsForNode(a)),f=0,g=e.length;g>f&&(d=e[f]);f++)if(!this.isParsed(d))return this.hasResource(d)?b(d)?this.nextToParseInDoc(d.import,d):d:void 0;return c},parseSelectorsForNode:function(a){var b=a.ownerDocument||a;return b===j?this.documentSelectors:this.importsSelectors},isParsed:function(a){return a.__importParsed},hasResource:function(a){return b(a)&&void 0===a.import?!1:!0}},l=/(url\()([^)]*)(\))/g,m=/(@import[\s]+(?!url\())([^;]*)(;)/g,n={resolveUrlsInStyle:function(a){var b=a.ownerDocument,c=b.createElement("a");return a.textContent=this.resolveUrlsInCssText(a.textContent,c),a},resolveUrlsInCssText:function(a,b){var c=this.replaceUrls(a,b,l);return c=this.replaceUrls(c,b,m)},replaceUrls:function(a,b,c){return a.replace(c,function(a,c,d,e){var f=d.replace(/["']/g,"");return b.href=f,f=b.href,c+"'"+f+"'"+e})}};a.parser=k,a.path=n}(HTMLImports),function(a){function b(a){return c(a,g)}function c(a,b){return"link"===a.localName&&a.getAttribute("rel")===b}function d(a,b){var c=a;c instanceof Document||(c=document.implementation.createHTMLDocument(g)),c._URL=b;var d=c.createElement("base");d.setAttribute("href",b),c.baseURI||(c.baseURI=b);var e=c.createElement("meta");return e.setAttribute("charset","utf-8"),c.head.appendChild(e),c.head.appendChild(d),a instanceof Document||(c.body.innerHTML=a),window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(c),c}var e=a.useNative,f=a.flags,g="import",h=window.ShadowDOMPolyfill?ShadowDOMPolyfill.wrapIfNeeded(document):document;if(e)var i={};else{var j=(a.xhr,a.Loader),k=a.parser,i={documents:{},documentPreloadSelectors:"link[rel="+g+"]",importsPreloadSelectors:["link[rel="+g+"]"].join(","),loadNode:function(a){l.addNode(a)},loadSubtree:function(a){var b=this.marshalNodes(a);l.addNodes(b)},marshalNodes:function(a){return a.querySelectorAll(this.loadSelectorsForNode(a))},loadSelectorsForNode:function(a){var b=a.ownerDocument||a;return b===h?this.documentPreloadSelectors:this.importsPreloadSelectors},loaded:function(a,c,e,g,h){if(f.load&&console.log("loaded",a,c),c.__resource=e,c.__error=g,b(c)){var i=this.documents[a];void 0===i&&(i=g?null:d(e,h||a),i&&(i.__importLink=c,this.bootDocument(i)),this.documents[a]=i),c.import=i}k.parseNext()},bootDocument:function(a){this.loadSubtree(a),this.observe(a),k.parseNext()},loadedAll:function(){k.parseNext()}},l=new j(i.loaded.bind(i),i.loadedAll.bind(i));if(!document.baseURI){var m={get:function(){var a=document.querySelector("base");return a?a.href:window.location.href},configurable:!0};Object.defineProperty(document,"baseURI",m),Object.defineProperty(h,"baseURI",m)}"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a,b){var c=document.createEvent("HTMLEvents");return c.initEvent(a,b.bubbles===!1?!1:!0,b.cancelable===!1?!1:!0,b.detail),c})}a.importer=i,a.IMPORT_LINK_TYPE=g,a.importLoader=l}(window.HTMLImports),function(a){function b(a){for(var b,d=0,e=a.length;e>d&&(b=a[d]);d++)"childList"===b.type&&b.addedNodes.length&&c(b.addedNodes)}function c(a){for(var b,e,g=0,h=a.length;h>g&&(e=a[g]);g++)b=b||e.ownerDocument,d(e)&&f.loadNode(e),e.children&&e.children.length&&c(e.children)}function d(a){return 1===a.nodeType&&g.call(a,f.loadSelectorsForNode(a))}function e(a){h.observe(a,{childList:!0,subtree:!0})}var f=(a.IMPORT_LINK_TYPE,a.importer),g=(a.parser,HTMLElement.prototype.matches||HTMLElement.prototype.matchesSelector||HTMLElement.prototype.webkitMatchesSelector||HTMLElement.prototype.mozMatchesSelector||HTMLElement.prototype.msMatchesSelector),h=new MutationObserver(b);a.observe=e,f.observe=e}(HTMLImports),function(){function a(){HTMLImports.importer.bootDocument(b)}var b=window.ShadowDOMPolyfill?window.ShadowDOMPolyfill.wrapIfNeeded(document):document;HTMLImports.useNative||("complete"===document.readyState||"interactive"===document.readyState&&!window.attachEvent?a():document.addEventListener("DOMContentLoaded",a))}(),window.CustomElements=window.CustomElements||{flags:{}},function(a){function b(a,c,d){var e=a.firstElementChild;if(!e)for(e=a.firstChild;e&&e.nodeType!==Node.ELEMENT_NODE;)e=e.nextSibling;for(;e;)c(e,d)!==!0&&b(e,c,d),e=e.nextElementSibling;return null}function c(a,b){for(var c=a.shadowRoot;c;)d(c,b),c=c.olderShadowRoot}function d(a,d){b(a,function(a){return d(a)?!0:void c(a,d)}),c(a,d)}function e(a){return h(a)?(i(a),!0):void l(a)}function f(a){d(a,function(a){return e(a)?!0:void 0})}function g(a){return e(a)||f(a)}function h(b){if(!b.__upgraded__&&b.nodeType===Node.ELEMENT_NODE){var c=b.getAttribute("is")||b.localName,d=a.registry[c];if(d)return A.dom&&console.group("upgrade:",b.localName),a.upgrade(b),A.dom&&console.groupEnd(),!0}}function i(a){l(a),r(a)&&d(a,function(a){l(a)})}function j(a){if(E.push(a),!D){D=!0;var b=window.Platform&&window.Platform.endOfMicrotask||setTimeout;b(k)}}function k(){D=!1;
+for(var a,b=E,c=0,d=b.length;d>c&&(a=b[c]);c++)a();E=[]}function l(a){C?j(function(){m(a)}):m(a)}function m(a){(a.attachedCallback||a.detachedCallback||a.__upgraded__&&A.dom)&&(A.dom&&console.group("inserted:",a.localName),r(a)&&(a.__inserted=(a.__inserted||0)+1,a.__inserted<1&&(a.__inserted=1),a.__inserted>1?A.dom&&console.warn("inserted:",a.localName,"insert/remove count:",a.__inserted):a.attachedCallback&&(A.dom&&console.log("inserted:",a.localName),a.attachedCallback())),A.dom&&console.groupEnd())}function n(a){o(a),d(a,function(a){o(a)})}function o(a){C?j(function(){p(a)}):p(a)}function p(a){(a.attachedCallback||a.detachedCallback||a.__upgraded__&&A.dom)&&(A.dom&&console.group("removed:",a.localName),r(a)||(a.__inserted=(a.__inserted||0)-1,a.__inserted>0&&(a.__inserted=0),a.__inserted<0?A.dom&&console.warn("removed:",a.localName,"insert/remove count:",a.__inserted):a.detachedCallback&&a.detachedCallback()),A.dom&&console.groupEnd())}function q(a){return window.ShadowDOMPolyfill?ShadowDOMPolyfill.wrapIfNeeded(a):a}function r(a){for(var b=a,c=q(document);b;){if(b==c)return!0;b=b.parentNode||b.host}}function s(a){if(a.shadowRoot&&!a.shadowRoot.__watched){A.dom&&console.log("watching shadow-root for: ",a.localName);for(var b=a.shadowRoot;b;)t(b),b=b.olderShadowRoot}}function t(a){a.__watched||(w(a),a.__watched=!0)}function u(a){if(A.dom){var b=a[0];if(b&&"childList"===b.type&&b.addedNodes&&b.addedNodes){for(var c=b.addedNodes[0];c&&c!==document&&!c.host;)c=c.parentNode;var d=c&&(c.URL||c._URL||c.host&&c.host.localName)||"";d=d.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",a.length,d||"")}a.forEach(function(a){"childList"===a.type&&(G(a.addedNodes,function(a){a.localName&&g(a)}),G(a.removedNodes,function(a){a.localName&&n(a)}))}),A.dom&&console.groupEnd()}function v(){u(F.takeRecords()),k()}function w(a){F.observe(a,{childList:!0,subtree:!0})}function x(a){w(a)}function y(a){A.dom&&console.group("upgradeDocument: ",a.baseURI.split("/").pop()),g(a),A.dom&&console.groupEnd()}function z(a){a=q(a);for(var b,c=a.querySelectorAll("link[rel="+B+"]"),d=0,e=c.length;e>d&&(b=c[d]);d++)b.import&&b.import.__parsed&&z(b.import);y(a)}var A=window.logFlags||{},B=window.HTMLImports?HTMLImports.IMPORT_LINK_TYPE:"none",C=!window.MutationObserver||window.MutationObserver===window.JsMutationObserver;a.hasPolyfillMutations=C;var D=!1,E=[],F=new MutationObserver(u),G=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.IMPORT_LINK_TYPE=B,a.watchShadow=s,a.upgradeDocumentTree=z,a.upgradeAll=g,a.upgradeSubtree=f,a.insertedNode=i,a.observeDocument=x,a.upgradeDocument=y,a.takeRecords=v}(window.CustomElements),function(a){function b(b,g){var h=g||{};if(!b)throw new Error("document.registerElement: first argument `name` must not be empty");if(b.indexOf("-")<0)throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '"+String(b)+"'.");if(c(b))throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '"+String(b)+"'. The type name is invalid.");if(n(b))throw new Error("DuplicateDefinitionError: a type with name '"+String(b)+"' is already registered");if(!h.prototype)throw new Error("Options missing required prototype property");return h.__name=b.toLowerCase(),h.lifecycle=h.lifecycle||{},h.ancestry=d(h.extends),e(h),f(h),l(h.prototype),o(h.__name,h),h.ctor=p(h),h.ctor.prototype=h.prototype,h.prototype.constructor=h.ctor,a.ready&&a.upgradeDocumentTree(document),h.ctor}function c(a){for(var b=0;b<y.length;b++)if(a===y[b])return!0}function d(a){var b=n(a);return b?d(b.extends).concat([b]):[]}function e(a){for(var b,c=a.extends,d=0;b=a.ancestry[d];d++)c=b.is&&b.tag;a.tag=c||a.__name,c&&(a.is=a.__name)}function f(a){if(!Object.__proto__){var b=HTMLElement.prototype;if(a.is){var c=document.createElement(a.tag),d=Object.getPrototypeOf(c);d===a.prototype&&(b=d)}for(var e,f=a.prototype;f&&f!==b;)e=Object.getPrototypeOf(f),f.__proto__=e,f=e;a.native=b}}function g(a){return h(B(a.tag),a)}function h(b,c){return c.is&&b.setAttribute("is",c.is),i(b,c),b.__upgraded__=!0,k(b),a.insertedNode(b),a.upgradeSubtree(b),b}function i(a,b){Object.__proto__?a.__proto__=b.prototype:(j(a,b.prototype,b.native),a.__proto__=b.prototype)}function j(a,b,c){for(var d={},e=b;e!==c&&e!==HTMLElement.prototype;){for(var f,g=Object.getOwnPropertyNames(e),h=0;f=g[h];h++)d[f]||(Object.defineProperty(a,f,Object.getOwnPropertyDescriptor(e,f)),d[f]=1);e=Object.getPrototypeOf(e)}}function k(a){a.createdCallback&&a.createdCallback()}function l(a){if(!a.setAttribute._polyfilled){var b=a.setAttribute;a.setAttribute=function(a,c){m.call(this,a,c,b)};var c=a.removeAttribute;a.removeAttribute=function(a){m.call(this,a,null,c)},a.setAttribute._polyfilled=!0}}function m(a,b,c){a=a.toLowerCase();var d=this.getAttribute(a);c.apply(this,arguments);var e=this.getAttribute(a);this.attributeChangedCallback&&e!==d&&this.attributeChangedCallback(a,d,e)}function n(a){return a?z[a.toLowerCase()]:void 0}function o(a,b){z[a]=b}function p(a){return function(){return g(a)}}function q(a,b,c){return a===A?r(b,c):C(a,b)}function r(a,b){var c=n(b||a);if(c){if(a==c.tag&&b==c.is)return new c.ctor;if(!b&&!c.is)return new c.ctor}if(b){var d=r(a);return d.setAttribute("is",b),d}var d=B(a);return a.indexOf("-")>=0&&i(d,HTMLElement),d}function s(a){if(!a.__upgraded__&&a.nodeType===Node.ELEMENT_NODE){var b=a.getAttribute("is"),c=n(b||a.localName);if(c){if(b&&c.tag==a.localName)return h(a,c);if(!b&&!c.extends)return h(a,c)}}}function t(b){var c=D.call(this,b);return a.upgradeAll(c),c}a||(a=window.CustomElements={flags:{}});var u=a.flags,v=Boolean(document.registerElement),w=!u.register&&v&&!window.ShadowDOMPolyfill&&(!window.HTMLImports||HTMLImports.useNative);if(w){var x=function(){};a.registry={},a.upgradeElement=x,a.watchShadow=x,a.upgrade=x,a.upgradeAll=x,a.upgradeSubtree=x,a.observeDocument=x,a.upgradeDocument=x,a.upgradeDocumentTree=x,a.takeRecords=x,a.reservedTagList=[]}else{var y=["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"],z={},A="http://www.w3.org/1999/xhtml",B=document.createElement.bind(document),C=document.createElementNS.bind(document),D=Node.prototype.cloneNode;document.registerElement=b,document.createElement=r,document.createElementNS=q,Node.prototype.cloneNode=t,a.registry=z,a.upgrade=s}var E;E=Object.__proto__||w?function(a,b){return a instanceof b}:function(a,b){for(var c=a;c;){if(c===b.prototype)return!0;c=c.__proto__}return!1},a.instanceof=E,a.reservedTagList=y,document.register=document.registerElement,a.hasNative=v,a.useNative=w}(window.CustomElements),function(a){function b(a){return"link"===a.localName&&a.getAttribute("rel")===c}var c=a.IMPORT_LINK_TYPE,d={selectors:["link[rel="+c+"]"],map:{link:"parseLink"},parse:function(a){if(!a.__parsed){a.__parsed=!0;var b=a.querySelectorAll(d.selectors);e(b,function(a){d[d.map[a.localName]](a)}),CustomElements.upgradeDocument(a),CustomElements.observeDocument(a)}},parseLink:function(a){b(a)&&this.parseImport(a)},parseImport:function(a){a.import&&d.parse(a.import)}},e=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.parser=d,a.IMPORT_LINK_TYPE=c}(window.CustomElements),function(a){function b(){CustomElements.parser.parse(document),CustomElements.upgradeDocument(document),window.HTMLImports&&(HTMLImports.__importsParsingHook=function(a){CustomElements.parser.parse(a.import)}),CustomElements.ready=!0,setTimeout(function(){CustomElements.readyTime=Date.now(),window.HTMLImports&&(CustomElements.elapsed=CustomElements.readyTime-HTMLImports.readyTime),document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})}if("function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a,b){b=b||{};var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,Boolean(b.bubbles),Boolean(b.cancelable),b.detail),c},window.CustomEvent.prototype=window.Event.prototype),"complete"===document.readyState||a.flags.eager)b();else if("interactive"!==document.readyState||window.attachEvent||window.HTMLImports&&!window.HTMLImports.ready){var c=window.HTMLImports&&!HTMLImports.ready?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(c,b)}else b()}(window.CustomElements),function(){if(window.ShadowDOMPolyfill){var a=["upgradeAll","upgradeSubtree","observeDocument","upgradeDocument"],b={};a.forEach(function(a){b[a]=CustomElements[a]}),a.forEach(function(a){CustomElements[a]=function(c){return b[a](wrap(c))}})}}(),function(a){function b(a){this.cache=Object.create(null),this.map=Object.create(null),this.requests=0,this.regex=a}var c=a.endOfMicrotask;b.prototype={extractUrls:function(a,b){for(var c,d,e=[];c=this.regex.exec(a);)d=new URL(c[1],b),e.push({matched:c[0],url:d.href});return e},process:function(a,b,c){var d=this.extractUrls(a,b),e=c.bind(null,this.map);this.fetch(d,e)},fetch:function(a,b){var c=a.length;if(!c)return b();for(var d,e,f,g=function(){0===--c&&b()},h=0;c>h;h++)d=a[h],f=d.url,e=this.cache[f],e||(e=this.xhr(f),e.match=d,this.cache[f]=e),e.wait(g)},handleXhr:function(a){var b=a.match,c=b.url,d=a.response||a.responseText||"";this.map[c]=d,this.fetch(this.extractUrls(d,c),a.resolve)},xhr:function(a){this.requests++;var b=new XMLHttpRequest;return b.open("GET",a,!0),b.send(),b.onerror=b.onload=this.handleXhr.bind(this,b),b.pending=[],b.resolve=function(){for(var a=b.pending,c=0;c<a.length;c++)a[c]();b.pending=null},b.wait=function(a){b.pending?b.pending.push(a):c(a)},b}},a.Loader=b}(window.Platform),function(a){function b(){this.loader=new d(this.regex)}var c=a.urlResolver,d=a.Loader;b.prototype={regex:/@import\s+(?:url)?["'\(]*([^'"\)]*)['"\)]*;/g,resolve:function(a,b,c){var d=function(d){c(this.flatten(a,b,d))}.bind(this);this.loader.process(a,b,d)},resolveNode:function(a,b,c){var d=a.textContent,e=function(b){a.textContent=b,c(a)};this.resolve(d,b,e)},flatten:function(a,b,d){for(var e,f,g,h=this.loader.extractUrls(a,b),i=0;i<h.length;i++)e=h[i],f=e.url,g=c.resolveCssText(d[f],f,!0),g=this.flatten(g,b,d),a=a.replace(e.matched,g);return a},loadStyles:function(a,b,c){function d(){f++,f===g&&c&&c()}for(var e,f=0,g=a.length,h=0;g>h&&(e=a[h]);h++)this.resolveNode(e,b,d)}};var e=new b;a.styleResolver=e}(window.Platform),function(){"use strict";function a(a){for(;a.parentNode;)a=a.parentNode;return"function"==typeof a.getElementById?a:null}function b(a,b,c){var d=a.bindings_;return d||(d=a.bindings_={}),d[b]&&c[b].close(),d[b]=c}function c(a,b,c){return c}function d(a){return null==a?"":a}function e(a,b){a.data=d(b)}function f(a){return function(b){return e(a,b)}}function g(a,b,c,e){return c?void(e?a.setAttribute(b,""):a.removeAttribute(b)):void a.setAttribute(b,d(e))}function h(a,b,c){return function(d){g(a,b,c,d)}}function i(a){switch(a.type){case"checkbox":return u;case"radio":case"select-multiple":case"select-one":return"change";case"range":if(/Trident|MSIE/.test(navigator.userAgent))return"change";default:return"input"}}function j(a,b,c,e){a[b]=(e||d)(c)}function k(a,b,c){return function(d){return j(a,b,d,c)}}function l(){}function m(a,b,c,d){function e(){c.setValue(a[b]),c.discardChanges(),(d||l)(a),Platform.performMicrotaskCheckpoint()}var f=i(a);return a.addEventListener(f,e),{close:function(){a.removeEventListener(f,e),c.close()},observable_:c}}function n(a){return Boolean(a)}function o(b){if(b.form)return s(b.form.elements,function(a){return a!=b&&"INPUT"==a.tagName&&"radio"==a.type&&a.name==b.name});var c=a(b);if(!c)return[];var d=c.querySelectorAll('input[type="radio"][name="'+b.name+'"]');return s(d,function(a){return a!=b&&!a.form})}function p(a){"INPUT"===a.tagName&&"radio"===a.type&&o(a).forEach(function(a){var b=a.bindings_.checked;b&&b.observable_.setValue(!1)})}function q(a,b){var c,e,f,g=a.parentNode;g instanceof HTMLSelectElement&&g.bindings_&&g.bindings_.value&&(c=g,e=c.bindings_.value,f=c.value),a.value=d(b),c&&c.value!=f&&(e.observable_.setValue(c.value),e.observable_.discardChanges(),Platform.performMicrotaskCheckpoint())}function r(a){return function(b){q(a,b)}}var s=Array.prototype.filter.call.bind(Array.prototype.filter);Node.prototype.bind=function(a,b){console.error("Unhandled binding to Node: ",this,a,b)},Node.prototype.bindFinished=function(){};var t=c;Object.defineProperty(Platform,"enableBindingsReflection",{get:function(){return t===b},set:function(a){return t=a?b:c,a},configurable:!0}),Text.prototype.bind=function(a,b,c){if("textContent"!==a)return Node.prototype.bind.call(this,a,b,c);if(c)return e(this,b);var d=b;return e(this,d.open(f(this))),t(this,a,d)},Element.prototype.bind=function(a,b,c){var d="?"==a[a.length-1];if(d&&(this.removeAttribute(a),a=a.slice(0,-1)),c)return g(this,a,d,b);var e=b;return g(this,a,d,e.open(h(this,a,d))),t(this,a,e)};var u;!function(){var a=document.createElement("div"),b=a.appendChild(document.createElement("input"));b.setAttribute("type","checkbox");var c,d=0;b.addEventListener("click",function(){d++,c=c||"click"}),b.addEventListener("change",function(){d++,c=c||"change"});var e=document.createEvent("MouseEvent");e.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),b.dispatchEvent(e),u=1==d?"change":c}(),HTMLInputElement.prototype.bind=function(a,c,e){if("value"!==a&&"checked"!==a)return HTMLElement.prototype.bind.call(this,a,c,e);this.removeAttribute(a);var f="checked"==a?n:d,g="checked"==a?p:l;if(e)return j(this,a,c,f);var h=c,i=m(this,a,h,g);return j(this,a,h.open(k(this,a,f)),f),b(this,a,i)},HTMLTextAreaElement.prototype.bind=function(a,b,c){if("value"!==a)return HTMLElement.prototype.bind.call(this,a,b,c);if(this.removeAttribute("value"),c)return j(this,"value",b);var e=b,f=m(this,"value",e);return j(this,"value",e.open(k(this,"value",d))),t(this,a,f)},HTMLOptionElement.prototype.bind=function(a,b,c){if("value"!==a)return HTMLElement.prototype.bind.call(this,a,b,c);if(this.removeAttribute("value"),c)return q(this,b);var d=b,e=m(this,"value",d);return q(this,d.open(r(this))),t(this,a,e)},HTMLSelectElement.prototype.bind=function(a,c,d){if("selectedindex"===a&&(a="selectedIndex"),"selectedIndex"!==a&&"value"!==a)return HTMLElement.prototype.bind.call(this,a,c,d);if(this.removeAttribute(a),d)return j(this,a,c);var e=c,f=m(this,a,e);return j(this,a,e.open(k(this,a))),b(this,a,f)}}(this),function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a){for(var b;b=a.parentNode;)a=b;return a}function d(a,b){if(b){for(var d,e="#"+b;!d&&(a=c(a),a.protoContent_?d=a.protoContent_.querySelector(e):a.getElementById&&(d=a.getElementById(b)),!d&&a.templateCreator_);)a=a.templateCreator_;return d}}function e(a){return"template"==a.tagName&&"http://www.w3.org/2000/svg"==a.namespaceURI}function f(a){return"TEMPLATE"==a.tagName&&"http://www.w3.org/1999/xhtml"==a.namespaceURI}function g(a){return Boolean(L[a.tagName]&&a.hasAttribute("template"))}function h(a){return void 0===a.isTemplate_&&(a.isTemplate_="TEMPLATE"==a.tagName||g(a)),a.isTemplate_}function i(a,b){var c=a.querySelectorAll(N);h(a)&&b(a),G(c,b)}function j(a){function b(a){HTMLTemplateElement.decorate(a)||j(a.content)}i(a,b)}function k(a,b){Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))})}function l(a){var b=a.ownerDocument;if(!b.defaultView)return b;var c=b.templateContentsOwner_;if(!c){for(c=b.implementation.createHTMLDocument("");c.lastChild;)c.removeChild(c.lastChild);b.templateContentsOwner_=c}return c}function m(a){if(!a.stagingDocument_){var b=a.ownerDocument;if(!b.stagingDocument_){b.stagingDocument_=b.implementation.createHTMLDocument(""),b.stagingDocument_.isStagingDocument=!0;var c=b.stagingDocument_.createElement("base");c.href=document.baseURI,b.stagingDocument_.head.appendChild(c),b.stagingDocument_.stagingDocument_=b.stagingDocument_}a.stagingDocument_=b.stagingDocument_}return a.stagingDocument_}function n(a){var b=a.ownerDocument.createElement("template");a.parentNode.insertBefore(b,a);for(var c=a.attributes,d=c.length;d-->0;){var e=c[d];K[e.name]&&("template"!==e.name&&b.setAttribute(e.name,e.value),a.removeAttribute(e.name))}return b}function o(a){var b=a.ownerDocument.createElement("template");a.parentNode.insertBefore(b,a);for(var c=a.attributes,d=c.length;d-->0;){var e=c[d];b.setAttribute(e.name,e.value),a.removeAttribute(e.name)}return a.parentNode.removeChild(a),b}function p(a,b,c){var d=a.content;if(c)return void d.appendChild(b);for(var e;e=b.firstChild;)d.appendChild(e)}function q(a){P?a.__proto__=HTMLTemplateElement.prototype:k(a,HTMLTemplateElement.prototype)}function r(a){a.setModelFn_||(a.setModelFn_=function(){a.setModelFnScheduled_=!1;var b=z(a,a.delegate_&&a.delegate_.prepareBinding);w(a,b,a.model_)}),a.setModelFnScheduled_||(a.setModelFnScheduled_=!0,Observer.runEOM_(a.setModelFn_))}function s(a,b,c,d){if(a&&a.length){for(var e,f=a.length,g=0,h=0,i=0,j=!0;f>h;){var g=a.indexOf("{{",h),k=a.indexOf("[[",h),l=!1,m="}}";if(k>=0&&(0>g||g>k)&&(g=k,l=!0,m="]]"),i=0>g?-1:a.indexOf(m,g+2),0>i){if(!e)return;e.push(a.slice(h));break}e=e||[],e.push(a.slice(h,g));var n=a.slice(g+2,i).trim();e.push(l),j=j&&l;var o=d&&d(n,b,c);e.push(null==o?Path.get(n):null),e.push(o),h=i+2}return h===f&&e.push(""),e.hasOnePath=5===e.length,e.isSimplePath=e.hasOnePath&&""==e[0]&&""==e[4],e.onlyOneTime=j,e.combinator=function(a){for(var b=e[0],c=1;c<e.length;c+=4){var d=e.hasOnePath?a:a[(c-1)/4];void 0!==d&&(b+=d),b+=e[c+3]}return b},e}}function t(a,b,c,d){if(b.hasOnePath){var e=b[3],f=e?e(d,c,!0):b[2].getValueFrom(d);return b.isSimplePath?f:b.combinator(f)}for(var g=[],h=1;h<b.length;h+=4){var e=b[h+2];g[(h-1)/4]=e?e(d,c):b[h+1].getValueFrom(d)}return b.combinator(g)}function u(a,b,c,d){var e=b[3],f=e?e(d,c,!1):new PathObserver(d,b[2]);return b.isSimplePath?f:new ObserverTransform(f,b.combinator)}function v(a,b,c,d){if(b.onlyOneTime)return t(a,b,c,d);if(b.hasOnePath)return u(a,b,c,d);for(var e=new CompoundObserver,f=1;f<b.length;f+=4){var g=b[f],h=b[f+2];if(h){var i=h(d,c,g);g?e.addPath(i):e.addObserver(i)}else{var j=b[f+1];g?e.addPath(j.getValueFrom(d)):e.addPath(d,j)}}return new ObserverTransform(e,b.combinator)}function w(a,b,c,d){for(var e=0;e<b.length;e+=2){var f=b[e],g=b[e+1],h=v(f,g,a,c),i=a.bind(f,h,g.onlyOneTime);i&&d&&d.push(i)}if(a.bindFinished(),b.isTemplate){a.model_=c;var j=a.processBindingDirectives_(b);d&&j&&d.push(j)}}function x(a,b,c){var d=a.getAttribute(b);return s(""==d?"{{}}":d,b,a,c)}function y(a,c){b(a);for(var d=[],e=0;e<a.attributes.length;e++){for(var f=a.attributes[e],g=f.name,i=f.value;"_"===g[0];)g=g.substring(1);if(!h(a)||g!==J&&g!==H&&g!==I){var j=s(i,g,a,c);j&&d.push(g,j)}}return h(a)&&(d.isTemplate=!0,d.if=x(a,J,c),d.bind=x(a,H,c),d.repeat=x(a,I,c),!d.if||d.bind||d.repeat||(d.bind=s("{{}}",H,a,c))),d}function z(a,b){if(a.nodeType===Node.ELEMENT_NODE)return y(a,b);if(a.nodeType===Node.TEXT_NODE){var c=s(a.data,"textContent",a,b);if(c)return["textContent",c]}return[]}function A(a,b,c,d,e,f,g){for(var h=b.appendChild(c.importNode(a,!1)),i=0,j=a.firstChild;j;j=j.nextSibling)A(j,h,c,d.children[i++],e,f,g);return d.isTemplate&&(HTMLTemplateElement.decorate(h,a),f&&h.setDelegate_(f)),w(h,d,e,g),h}function B(a,b){var c=z(a,b);c.children={};for(var d=0,e=a.firstChild;e;e=e.nextSibling)c.children[d++]=B(e,b);return c}function C(a){var b=a.id_;return b||(b=a.id_=S++),b}function D(a,b){var c=C(a);if(b){var d=b.bindingMaps[c];return d||(d=b.bindingMaps[c]=B(a,b.prepareBinding)||[]),d}var d=a.bindingMap_;return d||(d=a.bindingMap_=B(a,void 0)||[]),d}function E(a){this.closed=!1,this.templateElement_=a,this.instances=[],this.deps=void 0,this.iteratedValue=[],this.presentValue=void 0,this.arrayObserver=void 0}var F,G=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.Map&&"function"==typeof a.Map.prototype.forEach?F=a.Map:(F=function(){this.keys=[],this.values=[]},F.prototype={set:function(a,b){var c=this.keys.indexOf(a);0>c?(this.keys.push(a),this.values.push(b)):this.values[c]=b},get:function(a){var b=this.keys.indexOf(a);if(!(0>b))return this.values[b]},"delete":function(a){var b=this.keys.indexOf(a);return 0>b?!1:(this.keys.splice(b,1),this.values.splice(b,1),!0)},forEach:function(a,b){for(var c=0;c<this.keys.length;c++)a.call(b||this,this.values[c],this.keys[c],this)}});"function"!=typeof document.contains&&(Document.prototype.contains=function(a){return a===this||a.parentNode===this?!0:this.documentElement.contains(a)});var H="bind",I="repeat",J="if",K={template:!0,repeat:!0,bind:!0,ref:!0},L={THEAD:!0,TBODY:!0,TFOOT:!0,TH:!0,TR:!0,TD:!0,COLGROUP:!0,COL:!0,CAPTION:!0,OPTION:!0,OPTGROUP:!0},M="undefined"!=typeof HTMLTemplateElement;M&&!function(){var a=document.createElement("template"),b=a.content.ownerDocument,c=b.appendChild(b.createElement("html")),d=c.appendChild(b.createElement("head")),e=b.createElement("base");e.href=document.baseURI,d.appendChild(e)}();var N="template, "+Object.keys(L).map(function(a){return a.toLowerCase()+"[template]"}).join(", ");document.addEventListener("DOMContentLoaded",function(){j(document),Platform.performMicrotaskCheckpoint()},!1),M||(a.HTMLTemplateElement=function(){throw TypeError("Illegal constructor")});var O,P="__proto__"in{};"function"==typeof MutationObserver&&(O=new MutationObserver(function(a){for(var b=0;b<a.length;b++)a[b].target.refChanged_()})),HTMLTemplateElement.decorate=function(a,c){if(a.templateIsDecorated_)return!1;var d=a;d.templateIsDecorated_=!0;var h=f(d)&&M,i=h,k=!h,m=!1;if(h||(g(d)?(b(!c),d=n(a),d.templateIsDecorated_=!0,h=M,m=!0):e(d)&&(d=o(a),d.templateIsDecorated_=!0,h=M)),!h){q(d);var r=l(d);d.content_=r.createDocumentFragment()}return c?d.instanceRef_=c:k?p(d,a,m):i&&j(d.content),!0},HTMLTemplateElement.bootstrap=j;var Q=a.HTMLUnknownElement||HTMLElement,R={get:function(){return this.content_},enumerable:!0,configurable:!0};M||(HTMLTemplateElement.prototype=Object.create(Q.prototype),Object.defineProperty(HTMLTemplateElement.prototype,"content",R)),k(HTMLTemplateElement.prototype,{bind:function(a,b,c){if("ref"!=a)return Element.prototype.bind.call(this,a,b,c);var d=this,e=c?b:b.open(function(a){d.setAttribute("ref",a),d.refChanged_()});return this.setAttribute("ref",e),this.refChanged_(),c?void 0:(this.bindings_?this.bindings_.ref=b:this.bindings_={ref:b},b)},processBindingDirectives_:function(a){return this.iterator_&&this.iterator_.closeDeps(),a.if||a.bind||a.repeat?(this.iterator_||(this.iterator_=new E(this)),this.iterator_.updateDependencies(a,this.model_),O&&O.observe(this,{attributes:!0,attributeFilter:["ref"]}),this.iterator_):void(this.iterator_&&(this.iterator_.close(),this.iterator_=void 0))},createInstance:function(a,b,c){b?c=this.newDelegate_(b):c||(c=this.delegate_),this.refContent_||(this.refContent_=this.ref_.content);var d=this.refContent_;if(null===d.firstChild)return T;var e=D(d,c),f=m(this),g=f.createDocumentFragment();g.templateCreator_=this,g.protoContent_=d,g.bindings_=[],g.terminator_=null;for(var h=g.templateInstance_={firstNode:null,lastNode:null,model:a},i=0,j=!1,k=d.firstChild;k;k=k.nextSibling){null===k.nextSibling&&(j=!0);var l=A(k,g,f,e.children[i++],a,c,g.bindings_);l.templateInstance_=h,j&&(g.terminator_=l)}return h.firstNode=g.firstChild,h.lastNode=g.lastChild,g.templateCreator_=void 0,g.protoContent_=void 0,g},get model(){return this.model_},set model(a){this.model_=a,r(this)},get bindingDelegate(){return this.delegate_&&this.delegate_.raw},refChanged_:function(){this.iterator_&&this.refContent_!==this.ref_.content&&(this.refContent_=void 0,this.iterator_.valueChanged(),this.iterator_.updateIteratedValue(this.iterator_.getUpdatedValue()))},clear:function(){this.model_=void 0,this.delegate_=void 0,this.bindings_&&this.bindings_.ref&&this.bindings_.ref.close(),this.refContent_=void 0,this.iterator_&&(this.iterator_.valueChanged(),this.iterator_.close(),this.iterator_=void 0)},setDelegate_:function(a){this.delegate_=a,this.bindingMap_=void 0,this.iterator_&&(this.iterator_.instancePositionChangedFn_=void 0,this.iterator_.instanceModelFn_=void 0)},newDelegate_:function(a){function b(b){var c=a&&a[b];if("function"==typeof c)return function(){return c.apply(a,arguments)}}if(a)return{bindingMaps:{},raw:a,prepareBinding:b("prepareBinding"),prepareInstanceModel:b("prepareInstanceModel"),prepareInstancePositionChanged:b("prepareInstancePositionChanged")}},set bindingDelegate(a){if(this.delegate_)throw Error("Template must be cleared before a new bindingDelegate can be assigned");this.setDelegate_(this.newDelegate_(a))},get ref_(){var a=d(this,this.getAttribute("ref"));if(a||(a=this.instanceRef_),!a)return this;var b=a.ref_;return b?b:a}});var S=1;Object.defineProperty(Node.prototype,"templateInstance",{get:function(){var a=this.templateInstance_;return a?a:this.parentNode?this.parentNode.templateInstance:void 0}});var T=document.createDocumentFragment();T.bindings_=[],T.terminator_=null,E.prototype={closeDeps:function(){var a=this.deps;a&&(a.ifOneTime===!1&&a.ifValue.close(),a.oneTime===!1&&a.value.close())},updateDependencies:function(a,b){this.closeDeps();var c=this.deps={},d=this.templateElement_,e=!0;if(a.if){if(c.hasIf=!0,c.ifOneTime=a.if.onlyOneTime,c.ifValue=v(J,a.if,d,b),e=c.ifValue,c.ifOneTime&&!e)return void this.valueChanged();c.ifOneTime||(e=e.open(this.updateIfValue,this))}a.repeat?(c.repeat=!0,c.oneTime=a.repeat.onlyOneTime,c.value=v(I,a.repeat,d,b)):(c.repeat=!1,c.oneTime=a.bind.onlyOneTime,c.value=v(H,a.bind,d,b));var f=c.value;return c.oneTime||(f=f.open(this.updateIteratedValue,this)),e?void this.updateValue(f):void this.valueChanged()},getUpdatedValue:function(){var a=this.deps.value;return this.deps.oneTime||(a=a.discardChanges()),a},updateIfValue:function(a){return a?void this.updateValue(this.getUpdatedValue()):void this.valueChanged()},updateIteratedValue:function(a){if(this.deps.hasIf){var b=this.deps.ifValue;if(this.deps.ifOneTime||(b=b.discardChanges()),!b)return void this.valueChanged()}this.updateValue(a)},updateValue:function(a){this.deps.repeat||(a=[a]);var b=this.deps.repeat&&!this.deps.oneTime&&Array.isArray(a);this.valueChanged(a,b)},valueChanged:function(a,b){Array.isArray(a)||(a=[]),a!==this.iteratedValue&&(this.unobserve(),this.presentValue=a,b&&(this.arrayObserver=new ArrayObserver(this.presentValue),this.arrayObserver.open(this.handleSplices,this)),this.handleSplices(ArrayObserver.calculateSplices(this.presentValue,this.iteratedValue)))},getLastInstanceNode:function(a){if(-1==a)return this.templateElement_;var b=this.instances[a],c=b.terminator_;if(!c)return this.getLastInstanceNode(a-1);if(c.nodeType!==Node.ELEMENT_NODE||this.templateElement_===c)return c;var d=c.iterator_;return d?d.getLastTemplateNode():c},getLastTemplateNode:function(){return this.getLastInstanceNode(this.instances.length-1)},insertInstanceAt:function(a,b){var c=this.getLastInstanceNode(a-1),d=this.templateElement_.parentNode;this.instances.splice(a,0,b),d.insertBefore(b,c.nextSibling)},extractInstanceAt:function(a){for(var b=this.getLastInstanceNode(a-1),c=this.getLastInstanceNode(a),d=this.templateElement_.parentNode,e=this.instances.splice(a,1)[0];c!==b;){var f=b.nextSibling;f==c&&(c=b),e.appendChild(d.removeChild(f))}return e},getDelegateFn:function(a){return a=a&&a(this.templateElement_),"function"==typeof a?a:null},handleSplices:function(a){if(!this.closed&&a.length){var b=this.templateElement_;if(!b.parentNode)return void this.close();ArrayObserver.applySplices(this.iteratedValue,this.presentValue,a);var c=b.delegate_;void 0===this.instanceModelFn_&&(this.instanceModelFn_=this.getDelegateFn(c&&c.prepareInstanceModel)),void 0===this.instancePositionChangedFn_&&(this.instancePositionChangedFn_=this.getDelegateFn(c&&c.prepareInstancePositionChanged));for(var d=new F,e=0,f=0;f<a.length;f++){for(var g=a[f],h=g.removed,i=0;i<h.length;i++){var j=h[i],k=this.extractInstanceAt(g.index+e);k!==T&&d.set(j,k)}e-=g.addedCount}for(var f=0;f<a.length;f++)for(var g=a[f],l=g.index;l<g.index+g.addedCount;l++){var j=this.iteratedValue[l],k=d.get(j);k?d.delete(j):(this.instanceModelFn_&&(j=this.instanceModelFn_(j)),k=void 0===j?T:b.createInstance(j,void 0,c)),this.insertInstanceAt(l,k)}d.forEach(function(a){this.closeInstanceBindings(a)},this),this.instancePositionChangedFn_&&this.reportInstancesMoved(a)}},reportInstanceMoved:function(a){var b=this.instances[a];b!==T&&this.instancePositionChangedFn_(b.templateInstance_,a)},reportInstancesMoved:function(a){for(var b=0,c=0,d=0;d<a.length;d++){var e=a[d];if(0!=c)for(;b<e.index;)this.reportInstanceMoved(b),b++;else b=e.index;for(;b<e.index+e.addedCount;)this.reportInstanceMoved(b),b++;c+=e.addedCount-e.removed.length}if(0!=c)for(var f=this.instances.length;f>b;)this.reportInstanceMoved(b),b++},closeInstanceBindings:function(a){for(var b=a.bindings_,c=0;c<b.length;c++)b[c].close()},unobserve:function(){this.arrayObserver&&(this.arrayObserver.close(),this.arrayObserver=void 0)},close:function(){if(!this.closed){this.unobserve();for(var a=0;a<this.instances.length;a++)this.closeInstanceBindings(this.instances[a]);this.instances.length=0,this.closeDeps(),this.templateElement_.iterator_=void 0,this.closed=!0}}},HTMLTemplateElement.forAllTemplatesFrom_=i}(this),function(a){function b(){e||(e=!0,a.endOfMicrotask(function(){e=!1,logFlags.data&&console.group("Platform.flush()"),a.performMicrotaskCheckpoint(),logFlags.data&&console.groupEnd()}))}var c=document.createElement("style");c.textContent="template {display: none !important;} /* injected by platform.js */";var d=document.querySelector("head");d.insertBefore(c,d.firstChild);var e;if(Observer.hasObjectObserve)b=function(){};else{var f=125;window.addEventListener("WebComponentsReady",function(){b(),a.flushPoll=setInterval(b,f)})}if(window.CustomElements&&!CustomElements.useNative){var g=Document.prototype.importNode;Document.prototype.importNode=function(a,b){var c=g.call(this,a,b);return CustomElements.upgradeAll(c),c}}a.flush=b}(window.Platform);
 //# sourceMappingURL=platform.js.map
\ No newline at end of file
diff --git a/runtime/bin/vmservice/observatory/lib/elements.dart b/runtime/bin/vmservice/observatory/lib/elements.dart
index 302c640..51a8555 100644
--- a/runtime/bin/vmservice/observatory/lib/elements.dart
+++ b/runtime/bin/vmservice/observatory/lib/elements.dart
@@ -8,6 +8,8 @@
 export 'package:observatory/src/elements/class_view.dart';
 export 'package:observatory/src/elements/code_ref.dart';
 export 'package:observatory/src/elements/code_view.dart';
+export 'package:observatory/src/elements/context_ref.dart';
+export 'package:observatory/src/elements/context_view.dart';
 export 'package:observatory/src/elements/curly_block.dart';
 export 'package:observatory/src/elements/error_view.dart';
 export 'package:observatory/src/elements/eval_box.dart';
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/class_view.dart b/runtime/bin/vmservice/observatory/lib/src/elements/class_view.dart
index df4a767..2338362 100644
--- a/runtime/bin/vmservice/observatory/lib/src/elements/class_view.dart
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/class_view.dart
@@ -26,13 +26,12 @@
           instances = obj;
         });
   }
-  
+
   // TODO(koda): Add no-arg "calculate-link" instead of reusing "eval-link".
   Future<ServiceObject> retainedSize(var dummy) {
-    return cls.get("retained")
-        .then((ServiceMap obj) {
-          retainedBytes = int.parse(obj['valueAsString']);
-        });
+    return cls.get("retained").then((Instance obj) {
+      retainedBytes = int.parse(obj.valueAsString);
+    });
   }
 
   void refresh(var done) {
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/class_view.html b/runtime/bin/vmservice/observatory/lib/src/elements/class_view.html
index 5b03867..d1fbf97 100644
--- a/runtime/bin/vmservice/observatory/lib/src/elements/class_view.html
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/class_view.html
@@ -92,7 +92,7 @@
     </div>
 
     <template if="{{ cls.error != null }}">
-      <error-ref ref="{{ cls.error }}"></error>
+      <error-ref ref="{{ cls.error }}"></error-ref>
     </template>
 
     <hr>
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/context_ref.dart b/runtime/bin/vmservice/observatory/lib/src/elements/context_ref.dart
new file mode 100644
index 0000000..7072e66
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/context_ref.dart
@@ -0,0 +1,33 @@
+// 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 context_ref_element;
+
+import 'package:polymer/polymer.dart';
+import 'package:observatory/service.dart';
+import 'service_ref.dart';
+
+@CustomTag('context-ref')
+class ContextRefElement extends ServiceRefElement {
+  ContextRefElement.created() : super.created();
+
+  // TODO(turnidge): This is here to workaround vm/dart2js differences.
+  dynamic expander() {
+    return expandEvent;
+  }
+
+  void expandEvent(bool expand, Function onDone) {
+    assert(ref is Context);
+    if (expand) {
+      ref.reload().then((result) {
+        ref = result;
+        notifyPropertyChange(#ref, 0, 1);
+      }).whenComplete(onDone);
+    } else {
+      Context refMap = ref;
+      refMap.elements = null;
+      onDone();
+    }
+  }
+}
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/context_ref.html b/runtime/bin/vmservice/observatory/lib/src/elements/context_ref.html
new file mode 100644
index 0000000..deb767b
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/context_ref.html
@@ -0,0 +1,33 @@
+<link rel="import" href="../../../../packages/polymer/polymer.html">
+<link rel="import" href="curly_block.html">
+<link rel="import" href="observatory_element.html">
+<link rel="import" href="service_ref.html">
+
+<polymer-element name="context-ref" extends="service-ref">
+  <template>
+    <link rel="stylesheet" href="css/shared.css">
+    <span>
+      <a on-click="{{ goto }}" _href="{{ url }}"><em>Context</em> ({{ ref.length }})</a>
+      <curly-block callback="{{ expander() }}">
+        <div class="memberList">
+          <div class="memberItem">
+            <div class="memberName">parent</div>
+            <div class="memberValue">
+              <any-service-ref ref="{{ ref.parentContext }}"></any-service-ref>
+            </div>
+          </div>
+          <template repeat="{{ variable in ref.variables }}">
+            <div class="memberItem">
+              <div class="memberName">[{{ variable['index']}}]</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ variable['value'] }}"></any-service-ref>
+              </div>
+            </div>
+          </template>
+        </div>
+      </curly-block>
+    </span>
+  </template>
+</polymer-element>
+
+<script type="application/dart" src="context_ref.dart"></script>
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/context_view.dart b/runtime/bin/vmservice/observatory/lib/src/elements/context_view.dart
new file mode 100644
index 0000000..fdc05ec
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/context_view.dart
@@ -0,0 +1,21 @@
+// 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 context_view_element;
+
+import 'dart:async';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
+import 'package:polymer/polymer.dart';
+
+@CustomTag('context-view')
+class ContextViewElement extends ObservatoryElement {
+  @published Context context;
+
+  ContextViewElement.created() : super.created();
+
+  void refresh(Function onDone) {
+    context.reload().whenComplete(onDone);
+  }
+}
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/context_view.html b/runtime/bin/vmservice/observatory/lib/src/elements/context_view.html
new file mode 100644
index 0000000..0879f5f
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/context_view.html
@@ -0,0 +1,69 @@
+<link rel="import" href="../../../../packages/polymer/polymer.html">
+<link rel="import" href="class_ref.html">
+<link rel="import" href="field_ref.html">
+<link rel="import" href="function_ref.html">
+<link rel="import" href="instance_ref.html">
+<link rel="import" href="observatory_element.html">
+<link rel="import" href="nav_bar.html">
+<link rel="import" href="object_common.html">
+<link rel="import" href="context_ref.html">
+
+<polymer-element name="context-view" extends="observatory-element">
+  <template>
+    <link rel="stylesheet" href="css/shared.css">
+    <nav-bar>
+      <top-nav-menu></top-nav-menu>
+      <isolate-nav-menu isolate="{{ context.isolate }}"></isolate-nav-menu>
+      <!-- TODO(turnidge): Add library nav menu here. -->
+      <class-nav-menu cls="{{ context.clazz }}"></class-nav-menu>
+      <nav-menu link="." anchor="instance" last="{{ true }}"></nav-menu>
+      <nav-refresh callback="{{ refresh }}"></nav-refresh>
+      <nav-control></nav-control>
+    </nav-bar>
+
+    <template if="{{ !context.isError }}">
+      <div class="content">
+        <h1>instance of Context</h1>
+
+        <object-common object="{{ context }}"></object-common>
+
+        <div class="memberList">
+          <div class="memberItem">&nbsp;</div>
+
+          <div class="memberItem">
+            <div class="memberName">parent context</div>
+            <div class="memberValue">
+              <any-service-ref ref="{{ context.parentContext }}"></any-service-ref>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <hr>
+
+      <div class="content">
+        <template if="{{ context.variables.isNotEmpty }}">
+          variables ({{ context.variables.length }})
+          <curly-block expand="{{ context.variables.length <= 8 }}">
+            <div class="memberList">
+              <template repeat="{{ variable in context.variables }}">
+                <div class="memberItem">
+                  <div class="memberName">[{{ variable['index']}}]</div>
+                  <div class="memberValue">
+                    <any-service-ref ref="{{ variable['value'] }}"></any-service-ref>
+                  </div>
+                </div>
+              </template>
+            </div>
+          </curly-block><br><br>
+        </template>
+      </div>
+
+      <br><br><br><br>
+      <br><br><br><br>
+
+    </template>
+  </template>
+</polymer-element>
+
+<script type="application/dart" src="context_view.dart"></script>
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/eval_box.html b/runtime/bin/vmservice/observatory/lib/src/elements/eval_box.html
index 6461fc2..b556358 100644
--- a/runtime/bin/vmservice/observatory/lib/src/elements/eval_box.html
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/eval_box.html
@@ -7,7 +7,7 @@
   <template>
     <style>
       .textbox {
-        width: 80ex;
+        flex-grow: 1;
         font: 400 16px 'Montserrat', sans-serif;
       }
       .bigtextbox {
@@ -18,9 +18,10 @@
       }
       .radios {
         display: inline;
+        padding-right: 30px;
       }
       .radios label{
-        padding-left: 15px;
+        padding-left: 10px;
       }
       .historyExpr, .historyValue {
         vertical-align: text-top;
@@ -42,7 +43,7 @@
         padding: 6px 6px;
       }
     </style>
-    <form>
+    <form style="display:flex; flex-direction:row; align-items:flex-end">
       <template if="{{ lineMode == '1-line' }}">
         <input class="textbox" type="text" value="{{ text }}">
       </template>
@@ -53,11 +54,13 @@
 
       <input class="button" type="submit" value="Evaluate" on-click="{{ eval }}">
       <div class="radios" on-change="{{ updateLineMode }}">
-        <label for="1-line">1-line
+        <label for="1-line">
           <input type="radio" name="lineMode" value="1-line" checked>
+          1-line
         </label>
-        <label for="N-line">N-line
+        <label for="N-line">
           <input type="radio" name="lineMode" value="N-line">
+          N-line
         </label>
       </div>
     </form>
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/inbound_reference.dart b/runtime/bin/vmservice/observatory/lib/src/elements/inbound_reference.dart
index 436c7b5..047b833 100644
--- a/runtime/bin/vmservice/observatory/lib/src/elements/inbound_reference.dart
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/inbound_reference.dart
@@ -7,18 +7,18 @@
 import 'dart:async';
 import 'package:polymer/polymer.dart';
 import 'package:observatory/service.dart';
-import 'service_ref.dart';
+import 'observatory_element.dart';
 
 @CustomTag('inbound-reference')
-class InboundReferenceElement extends ServiceRefElement {
+class InboundReferenceElement extends ObservatoryElement {
   @published ObservableMap ref;
   InboundReferenceElement.created() : super.created();
 
-  dynamic get slot => (ref as ServiceMap)['slot'];
+  dynamic get slot => ref['slot'];
   bool get slotIsArrayIndex => slot is num;
   bool get slotIsField => slot is ServiceMap && slot['type'] == '@Field';
 
-  ServiceObject get source => (ref as ServiceMap)['source'];
+  ServiceObject get source => ref['source'];
 
   // I.e., inbound references to 'source' for recursive pointer chasing.
   @observable ObservableList inboundReferences;
@@ -34,15 +34,14 @@
     return expandEvent;
   }
 
-  void expandEvent(bool expand, var done) {
-    assert(ref is ServiceMap);
+  void expandEvent(bool expand, Function onDone) {
     if (expand) {
       fetchInboundReferences(100).then((result) {
         notifyPropertyChange(#ref, 0, 1);
-      }).whenComplete(done);
+      }).whenComplete(onDone);
     } else {
       inboundReferences = null;
-      done();
+      onDone();
     }
   }
 }
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/instance_ref.dart b/runtime/bin/vmservice/observatory/lib/src/elements/instance_ref.dart
index 78c4436..19a87e1 100644
--- a/runtime/bin/vmservice/observatory/lib/src/elements/instance_ref.dart
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/instance_ref.dart
@@ -36,7 +36,7 @@
     return expandEvent;
   }
 
-  void expandEvent(bool expand, var done) {
+  void expandEvent(bool expand, Function onDone) {
     assert(ref is Instance);
     if (expand) {
       ref.reload().then((result) {
@@ -46,12 +46,12 @@
         }
         ref = result;
         notifyPropertyChange(#ref, 0, 1);
-      }).whenComplete(done);
+      }).whenComplete(onDone);
     } else {
       Instance refMap = ref;
       refMap.fields = null;
       refMap.elements = null;
-      done();
+      onDone();
     }
   }
 }
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/instance_ref.html b/runtime/bin/vmservice/observatory/lib/src/elements/instance_ref.html
index d179040..ab7bb16 100644
--- a/runtime/bin/vmservice/observatory/lib/src/elements/instance_ref.html
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/instance_ref.html
@@ -22,11 +22,17 @@
         <div title="{{ hoverText }}">{{ ref.valueAsString }}</div>
       </template>
 
-      <template if="{{ ref.isString || ref.isBool || ref.isInt || ref.isDouble || ref.isNull }}">
+      <template if="{{ ref.isBool || ref.isInt ||
+                       ref.isDouble || ref.isNull }}">
         <a on-click="{{ goto }}" _href="{{ url }}">{{ ref.valueAsString }}</a>
       </template>
 
-      <template if="{{ ref.isType }}">
+      <template if="{{ ref.isString }}">
+        <a on-click="{{ goto }}" _href="{{ url }}">{{ asStringLiteral(ref.valueAsString, ref.valueAsStringIsTruncated) }}</a>
+      </template>
+
+
+      <template if="{{ ref.isAbstractType }}">
         <a on-click="{{ goto }}" _href="{{ url }}">{{ ref.name }}</a>
       </template>
 
@@ -37,7 +43,7 @@
         </a>
       </template>
 
-      <template if="{{ ref.isInstance && !ref.isClosure }}">
+      <template if="{{ ref.isPlainInstance }}">
         <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
         <curly-block callback="{{ expander() }}">
           <div class="memberList">
@@ -63,13 +69,47 @@
               <div class="memberItem">
                 <div class="memberName">[{{ element['index']}}]</div>
                 <div class="memberValue">
-                  <any-service-ref ref="{{ element['value'] }}"></instance-ref>
+                  <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
                 </div>
               </div>
             </template>
           </div>
         </curly-block>
       </template>
+
+      <template if="{{ ref.isMirrorReference }}">
+        <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
+        <curly-block callback="{{ expander() }}">
+          <div class="memberList">
+            <div class="memberItem">
+              <div class="memberName">referent</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ ref.referent }}"></any-service-ref>
+              </div>
+            </div>
+          </div>
+        </curly-block>
+      </template>
+
+      <template if="{{ ref.isWeakProperty }}">
+        <a on-click="{{ goto }}" _href="{{ url }}"><em>{{ ref.clazz.name }}</em></a>
+        <curly-block callback="{{ expander() }}">
+          <div class="memberList">
+            <div class="memberItem">
+              <div class="memberName">key</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ ref.key }}"></any-service-ref>
+              </div>
+            </div>
+            <div class="memberItem">
+              <div class="memberName">value</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ ref.value }}"></any-service-ref>
+              </div>
+            </div>
+          </div>
+        </curly-block>
+      </template>
     </span>
   </template>
 </polymer-element>
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/instance_view.dart b/runtime/bin/vmservice/observatory/lib/src/elements/instance_view.dart
index ae7fca9..556a279 100644
--- a/runtime/bin/vmservice/observatory/lib/src/elements/instance_view.dart
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/instance_view.dart
@@ -12,9 +12,6 @@
 @CustomTag('instance-view')
 class InstanceViewElement extends ObservatoryElement {
   @published Instance instance;
-  @published ServiceMap path;
-  @published ServiceMap inboundReferences;
-  @observable int retainedBytes = null;
 
   InstanceViewElement.created() : super.created();
 
@@ -23,29 +20,7 @@
         instance.id + "/eval?expr=${Uri.encodeComponent(text)}");
   }
 
-  // TODO(koda): Add no-arg "calculate-link" instead of reusing "eval-link".
-  Future<ServiceObject> retainedSize(var dummy) {
-    return instance.isolate.get(instance.id + "/retained")
-        .then((ServiceMap obj) {
-          retainedBytes = int.parse(obj['valueAsString']);
-        });
-  }
-
-  Future<ServiceObject> retainingPath(var arg) {
-    return instance.isolate.get(instance.id + "/retaining_path?limit=$arg")
-        .then((ServiceObject obj) {
-          path = obj;
-        });
-  }
-
-  Future<ServiceObject> fetchInboundReferences(var arg) {
-    return instance.isolate.get(instance.id + "/inbound_references?limit=$arg")
-        .then((ServiceObject obj) {
-           inboundReferences = obj;
-        });
-  }
-
-  void refresh(var done) {
-    instance.reload().whenComplete(done);
+  void refresh(Function onDone) {
+    instance.reload().whenComplete(onDone);
   }
 }
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/instance_view.html b/runtime/bin/vmservice/observatory/lib/src/elements/instance_view.html
index fee5ce9..6a97bea 100644
--- a/runtime/bin/vmservice/observatory/lib/src/elements/instance_view.html
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/instance_view.html
@@ -9,6 +9,8 @@
 <link rel="import" href="instance_ref.html">
 <link rel="import" href="observatory_element.html">
 <link rel="import" href="nav_bar.html">
+<link rel="import" href="object_common.html">
+<link rel="import" href="context_ref.html">
 
 <polymer-element name="instance-view" extends="observatory-element">
   <template>
@@ -29,94 +31,42 @@
 
     <template if="{{ !instance.isError }}">
       <div class="content">
-        <template if="{{ instance.isType }}">
+        <template if="{{ instance.isAbstractType }}">
           <h1>type {{ instance.name }}</h1>
         </template>
-        <template if="{{ !instance.isType }}">
+        <template if="{{ !instance.isAbstractType }}">
           <h1>instance of {{ instance.clazz.name }}</h1>
         </template>
+
+        <object-common object="{{ instance }}"></object-common>
+
         <div class="memberList">
-          <div class="memberItem">
-            <div class="memberName">class</div>
-            <div class="memberValue">
-              <class-ref ref="{{ instance.clazz }}">
-              </class-ref>
-            </div>
-          </div>
+          <div class="memberItem">&nbsp;</div>
+
           <template if="{{ instance.valueAsString != null }}">
             <div class="memberItem">
               <div class="memberName">value</div>
               <div class="memberValue">{{ instance.valueAsString }}</div>
             </div>
           </template>
-          <div class="memberItem" title="Space for this object in memory">
-            <div class="memberName">size</div>
-            <div class="memberValue">{{ instance.size | formatSize }}</div>
-          </div>
-          <div class="memberItem" title="Space that would be reclaimed if references to this object were replaced with null">
-            <div class="memberName">retained size</div>
-            <div class="memberValue">
-              <template if="{{ retainedBytes == null }}">
-                <eval-link callback="{{ retainedSize }}"
-                           label="[calculate]">
-                </eval-link>
-              </template>
-              <template if="{{ retainedBytes != null }}">
-                {{ retainedBytes | formatSize }}
-              </template>
+
+          <template if="{{ instance.isString }}">
+            <div class="memberItem">
+              <div class="memberName">valueAsLiteral</div>
+              <div class="memberValue"> {{ asStringLiteral(instance.valueAsString, instance.valueAsStringIsTruncated) }}</div>
             </div>
-          </div>
-          <div class="memberItem">
-            <div class="memberName">retaining path</div>
-            <div class="memberValue">
-              <template if="{{ path == null }}">
-                <eval-link callback="{{ retainingPath }}"
-                           label="[find]"
-                           expr="10">
-                </eval-link>
-              </template>
-              <template if="{{ path != null }}">
-                <template repeat="{{ element in path['elements'] }}">
-                <div class="memberItem">
-                  <div class="memberName">[{{ element['index']}}]</div>
-                  <div class="memberValue">
-                    <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
-                    <template if="{{ element['parentField'] != null }}">
-                      in <field-ref ref="{{ element['parentField'] }}"></field-ref> of
-                    </template>
-                    <template if="{{ element['parentListIndex'] != null }}">
-                      in [{{ element['parentListIndex'] }}] of
-                    </template>
-                  </div>
-                  </div>
-                </template>
-                <template if="{{ path['length'] > path['elements'].length }}">
-                  showing {{ path['elements'].length }} of {{ path['length'] }}
-                  <eval-link
-                    callback="{{ retainingPath }}"
-                    label="[find more]"
-                    expr="{{ path['elements'].length * 2 }}">
-                  </eval-link>
-                </template>
-              </template>
+          </template>
+
+          <template if="{{ instance.isMirrorReference }}">
+            <div class="memberItem">
+              <div class="memberName">referent</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.referent }}">
+                </any-service-ref>
+              </div>
             </div>
-          </div>
-          <div class="memberItem" title="Objects which directly reference this object">
-            <div class="memberName">inbound references</div>
-            <div class="memberValue">
-              <template if="{{ inboundReferences == null }}">
-                <eval-link callback="{{ fetchInboundReferences }}"
-                           label="[find]"
-                           expr="100">
-                </eval-link>
-              </template>
-              <template if="{{ inboundReferences != null }}">
-                <template repeat="{{ reference in inboundReferences['references'] }}">
-                  <inbound-reference ref="{{ reference }}"></inbound-reference>
-                </template>
-              </template>
-            </div>
-          </div>
+          </template>
+
           <template if="{{ instance.typeClass != null }}">
             <div class="memberItem">
               <div class="memberName">type class</div>
@@ -126,6 +76,7 @@
               </div>
             </div>
           </template>
+
           <template if="{{ instance.isClosure }}">
             <div class="memberItem">
               <div class="memberName">closure function</div>
@@ -135,8 +86,32 @@
               </div>
             </div>
           </template>
+          <template if="{{ instance.isClosure }}">
+            <div class="memberItem">
+              <div class="memberName">closure context</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.closureCtxt }}">
+                </any-service-ref>
+              </div>
+            </div>
+          </template>
 
-          <div class="memberItem">&nbsp;</div>
+          <template if="{{ instance.isWeakProperty }}">
+            <div class="memberItem">
+              <div class="memberName">key</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.key }}">
+                </any-service-ref>
+              </div>
+            </div>
+            <div class="memberItem">
+              <div class="memberName">value</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ instance.value }}">
+                </any-service-ref>
+              </div>
+            </div>
+          </template>
 
           <div class="memberItem">
             <div class="memberName">toString()</div>
@@ -150,6 +125,20 @@
       <hr>
 
       <div class="content">
+        <template if="{{ instance.nativeFields.isNotEmpty }}">
+          native fields ({{ instance.nativeFields.length }})
+          <curly-block expand="{{ instance.nativeFields.length <= 8 }}">
+            <div class="memberList">
+              <template repeat="{{ field in instance.nativeFields }}">
+                <div class="memberItem">
+                  <div class="memberName">[{{ field['index']}}]</div>
+                  <div class="memberValue">[{{ field['value']}}]</div>
+                </div>
+              </template>
+            </div>
+          </curly-block><br><br>
+        </template>
+
         <template if="{{ instance.fields.isNotEmpty }}">
           fields ({{ instance.fields.length }})
           <curly-block expand="{{ instance.fields.length <= 8 }}">
@@ -168,20 +157,6 @@
           </curly-block><br><br>
         </template>
 
-        <template if="{{ instance.nativeFields.isNotEmpty }}">
-          native fields ({{ instance.nativeFields.length }})
-          <curly-block expand="{{ instance.nativeFields.length <= 8 }}">
-            <div class="memberList">
-              <template repeat="{{ field in instance.nativeFields }}">
-                <div class="memberItem">
-                  <div class="memberName">[{{ field['index']}}]</div>
-                  <div class="memberValue">[{{ field['value']}}]</div>
-                </div>
-              </template>
-            </div>
-          </curly-block><br><br>
-        </template>
-
         <template if="{{ instance.elements.isNotEmpty }}">
           elements ({{ instance.elements.length }})
           <curly-block expand="{{ instance.elements.length <= 8 }}">
@@ -190,8 +165,7 @@
                 <div class="memberItem">
                   <div class="memberName">[{{ element['index']}}]</div>
                   <div class="memberValue">
-                    <any-service-ref ref="{{ element['value'] }}">
-                    </instance-ref>
+                    <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
                   </div>
                 </div>
               </template>
@@ -205,6 +179,7 @@
       <div class="content">
         <eval-box callback="{{ eval }}"></eval-box>
       </div>
+
       <br><br><br><br>
       <br><br><br><br>
 
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/object_common.dart b/runtime/bin/vmservice/observatory/lib/src/elements/object_common.dart
new file mode 100644
index 0000000..b1814e4
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/object_common.dart
@@ -0,0 +1,46 @@
+// 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 object_common_element;
+
+import 'dart:async';
+import 'observatory_element.dart';
+import 'package:observatory/service.dart';
+import 'package:polymer/polymer.dart';
+
+@CustomTag('object-common')
+class ObjectCommonElement extends ObservatoryElement {
+  @published ServiceObject object;
+  @published ServiceMap path;
+  @published ServiceMap inboundReferences;
+  @observable int retainedBytes = null;
+
+  ObjectCommonElement.created() : super.created();
+
+  // TODO(koda): Add no-arg "calculate-link" instead of reusing "eval-link".
+  Future<ServiceObject> retainedSize(var dummy) {
+    return object.isolate.get(object.id + "/retained")
+        .then((ServiceMap obj) {
+          retainedBytes = int.parse(obj['valueAsString']);
+        });
+  }
+
+  Future<ServiceObject> retainingPath(var arg) {
+    return object.isolate.get(object.id + "/retaining_path?limit=$arg")
+        .then((ServiceObject obj) {
+          path = obj;
+        });
+  }
+
+  Future<ServiceObject> fetchInboundReferences(var arg) {
+    return object.isolate.get(object.id + "/inbound_references?limit=$arg")
+        .then((ServiceObject obj) {
+           inboundReferences = obj;
+        });
+  }
+
+  void refresh(Function onDone) {
+    object.reload().whenComplete(onDone);
+  }
+}
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/object_common.html b/runtime/bin/vmservice/observatory/lib/src/elements/object_common.html
new file mode 100644
index 0000000..63c78a1
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/object_common.html
@@ -0,0 +1,100 @@
+<link rel="import" href="../../../../packages/polymer/polymer.html">
+<link rel="import" href="class_ref.html">
+<link rel="import" href="error_view.html">
+<link rel="import" href="field_ref.html">
+<link rel="import" href="function_ref.html">
+<link rel="import" href="inbound_reference.html">
+<link rel="import" href="instance_ref.html">
+<link rel="import" href="observatory_element.html">
+<link rel="import" href="nav_bar.html">
+<link rel="import" href="eval_link.html">
+
+<polymer-element name="object-common" extends="observatory-element">
+  <template>
+    <link rel="stylesheet" href="css/shared.css">
+    <div class="memberList">
+
+      <div class="memberItem">
+        <div class="memberName">class</div>
+        <div class="memberValue">
+          <class-ref ref="{{ object.clazz }}"></class-ref>
+        </div>
+      </div>
+
+      <div class="memberItem" title="Space for this object in memory">
+        <div class="memberName">size</div>
+        <div class="memberValue">{{ object.size | formatSize }}</div>
+      </div>
+
+      <div class="memberItem" title="Space that would be reclaimed if references to this object were replaced with null">
+        <div class="memberName">retained size</div>
+        <div class="memberValue">
+          <template if="{{ retainedBytes == null }}">
+            <eval-link callback="{{ retainedSize }}"
+                       label="[calculate]">
+            </eval-link>
+          </template>
+          <template if="{{ retainedBytes != null }}">
+            {{ retainedBytes | formatSize }}
+          </template>
+        </div>
+      </div>
+
+      <div class="memberItem">
+        <div class="memberName">retaining path</div>
+        <div class="memberValue">
+          <template if="{{ path == null }}">
+            <eval-link callback="{{ retainingPath }}"
+                       label="[find]"
+                       expr="10">
+            </eval-link>
+          </template>
+          <template if="{{ path != null }}">
+            <template repeat="{{ element in path['elements'] }}">
+            <div class="memberItem">
+              <div class="memberName">[{{ element['index']}}]</div>
+              <div class="memberValue">
+                <any-service-ref ref="{{ element['value'] }}"></any-service-ref>
+                <template if="{{ element['parentField'] != null }}">
+                  in <field-ref ref="{{ element['parentField'] }}"></field-ref> of
+                </template>
+                <template if="{{ element['parentListIndex'] != null }}">
+                  in [{{ element['parentListIndex'] }}] of
+                </template>
+              </div>
+              </div>
+            </template>
+            <template if="{{ path['length'] > path['elements'].length }}">
+              showing {{ path['elements'].length }} of {{ path['length'] }}
+              <eval-link
+                callback="{{ retainingPath }}"
+                label="[find more]"
+                expr="{{ path['elements'].length * 2 }}">
+              </eval-link>
+            </template>
+          </template>
+        </div>
+      </div>
+
+      <div class="memberItem" title="Objects which directly reference this object">
+        <div class="memberName">inbound references</div>
+        <div class="memberValue">
+          <template if="{{ inboundReferences == null }}">
+            <eval-link callback="{{ fetchInboundReferences }}"
+                       label="[find]"
+                       expr="100">
+            </eval-link>
+          </template>
+          <template if="{{ inboundReferences != null }}">
+            <template repeat="{{ reference in inboundReferences['references'] }}">
+              <inbound-reference ref="{{ reference }}"></inbound-reference>
+            </template>
+          </template>
+        </div>
+      </div>
+
+   </div>
+  </template>
+</polymer-element>
+
+<script type="application/dart" src="object_common.dart"></script>
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/observatory_element.dart b/runtime/bin/vmservice/observatory/lib/src/elements/observatory_element.dart
index 4dccf98..1141def 100644
--- a/runtime/bin/vmservice/observatory/lib/src/elements/observatory_element.dart
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/observatory_element.dart
@@ -111,4 +111,28 @@
   }
 
   int parseInt(String value) => int.parse(value);
+
+  String asStringLiteral(String value, [bool wasTruncated=false]) {
+    var result = new List();
+    result.add("'".codeUnitAt(0));
+    for (int codeUnit in value.codeUnits) {
+      if (codeUnit == '\n'.codeUnitAt(0)) result.addAll('\\n'.codeUnits);
+      else if (codeUnit == '\r'.codeUnitAt(0)) result.addAll('\\r'.codeUnits);
+      else if (codeUnit == '\f'.codeUnitAt(0)) result.addAll('\\f'.codeUnits);
+      else if (codeUnit == '\b'.codeUnitAt(0)) result.addAll('\\b'.codeUnits);
+      else if (codeUnit == '\t'.codeUnitAt(0)) result.addAll('\\t'.codeUnits);
+      else if (codeUnit == '\v'.codeUnitAt(0)) result.addAll('\\v'.codeUnits);
+      else if (codeUnit == '\$'.codeUnitAt(0)) result.addAll('\\\$'.codeUnits);
+      else if (codeUnit == '\\'.codeUnitAt(0)) result.addAll('\\\\'.codeUnits);
+      else if (codeUnit == "'".codeUnitAt(0)) result.addAll("'".codeUnits);
+      else if (codeUnit < 32) result.addAll("\\u$codeUnit".codeUnits);
+      else result.add(codeUnit);
+    }
+    if (wasTruncated) {
+      result.addAll("...".codeUnits);
+    } else {
+      result.add("'".codeUnitAt(0));
+    }
+    return new String.fromCharCodes(result);
+  }
 }
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/service_ref.dart b/runtime/bin/vmservice/observatory/lib/src/elements/service_ref.dart
index 4fe18be..3637bbd 100644
--- a/runtime/bin/vmservice/observatory/lib/src/elements/service_ref.dart
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/service_ref.dart
@@ -64,7 +64,7 @@
   AnyServiceRefElement.created() : super.created();
 
   Element _constructElementForRef() {
-    var type = ref.vmType;
+    var type = ref.type;
     switch (type) {
      case 'Class':
         ServiceRefElement element = new Element.tag('class-ref');
@@ -74,6 +74,10 @@
         ServiceRefElement element = new Element.tag('code-ref');
         element.ref = ref;
         return element;
+      case 'Context':
+        ServiceRefElement element = new Element.tag('context-ref');
+        element.ref = ref;
+        return element;
       case 'Error':
         ServiceRefElement element = new Element.tag('error-ref');
         element.ref = ref;
@@ -90,26 +94,17 @@
         ServiceRefElement element = new Element.tag('library-ref');
         element.ref = ref;
         return element;
-      case 'Array':
-      case 'Bigint':
-      case 'Bool':
-      case 'Closure':
-      case 'Double':
-      case 'GrowableObjectArray':
-      case 'Instance':
-      case 'Mint':
-      case 'Null':
-      case 'Sentinel':  // TODO(rmacnak): Separate this out.
-      case 'Smi':
-      case 'String':
-      case 'Type':
-        ServiceRefElement element = new Element.tag('instance-ref');
-        element.ref = ref;
-        return element;
       default:
-        SpanElement element = new Element.tag('span');
-        element.text = "<<Unknown service ref: $ref>>";
-        return element;
+        if (ref.isInstance ||
+            ref.isSentinel) {  // TODO(rmacnak): Separate this out.
+          ServiceRefElement element = new Element.tag('instance-ref');
+          element.ref = ref;
+          return element;
+        } else {
+          SpanElement element = new Element.tag('span');
+          element.text = "<<Unknown service ref: $ref>>";
+          return element;
+        }
     }
   }
 
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/service_view.dart b/runtime/bin/vmservice/observatory/lib/src/elements/service_view.dart
index 2831e33..438ebfa 100644
--- a/runtime/bin/vmservice/observatory/lib/src/elements/service_view.dart
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/service_view.dart
@@ -20,7 +20,7 @@
   ServiceObjectViewElement.created() : super.created();
 
   ObservatoryElement _constructElementForObject() {
-    var type = object.vmType;
+    var type = object.type;
     switch (type) {
       case 'AllocationProfile':
         HeapProfileElement element = new Element.tag('heap-profile');
@@ -38,6 +38,10 @@
         CodeViewElement element = new Element.tag('code-view');
         element.code = object;
         return element;
+      case 'Context':
+        ContextViewElement element = new Element.tag('context-view');
+        element.context = object;
+        return element;
       case 'Error':
         ErrorViewElement element = new Element.tag('error-view');
         element.error = object;
@@ -58,42 +62,6 @@
         HeapMapElement element = new Element.tag('heap-map');
         element.fragmentation = object;
         return element;
-      case 'LibraryPrefix':
-      case 'TypeRef':
-      case 'TypeParameter':
-      case 'BoundedType':
-      case 'Int32x4':
-      case 'Float32x4':
-      case 'Float64x4':
-      case 'TypedData':
-      case 'ExternalTypedData':
-      case 'Capability':
-      case 'ReceivePort':
-      case 'SendPort':
-      case 'Stacktrace':
-      case 'JSRegExp':
-      case 'WeakProperty':
-      case 'MirrorReference':
-      case 'UserTag':
-        // TODO(turnidge): The types above this comment are instance
-        // types and should be handled by the InstanceViewElement.  We
-        // need to go through these and make sure that they print in a
-        // reasonable way.
-      case 'Type':
-      case 'Array':
-      case 'Bool':
-      case 'Closure':
-      case 'Double':
-      case 'GrowableObjectArray':
-      case 'Instance':
-      case 'Smi':
-      case 'Mint':
-      case 'Null':
-      case 'Bigint':
-      case 'String':
-        InstanceViewElement element = new Element.tag('instance-view');
-        element.instance = object;
-        return element;
       case 'IO':
         IOViewElement element = new Element.tag('io-view');
         element.io = object;
@@ -185,9 +153,16 @@
         element.vm = object;
         return element;
       default:
-        JsonViewElement element = new Element.tag('json-view');
-        element.map = object;
-        return element;
+        if (object.isInstance ||
+            object.isSentinel) {  // TODO(rmacnak): Separate this out.
+          InstanceViewElement element = new Element.tag('instance-view');
+          element.instance = object;
+          return element;
+        } else {
+          JsonViewElement element = new Element.tag('json-view');
+          element.map = object;
+          return element;
+        }
     }
   }
 
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/service_view.html b/runtime/bin/vmservice/observatory/lib/src/elements/service_view.html
index 889dd84..0262d05 100644
--- a/runtime/bin/vmservice/observatory/lib/src/elements/service_view.html
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/service_view.html
@@ -2,6 +2,7 @@
 <link rel="import" href="breakpoint_list.html">
 <link rel="import" href="class_view.html">
 <link rel="import" href="code_view.html">
+<link rel="import" href="context_view.html">
 <link rel="import" href="error_view.html">
 <link rel="import" href="field_view.html">
 <link rel="import" href="function_view.html">
diff --git a/runtime/bin/vmservice/observatory/lib/src/service/object.dart b/runtime/bin/vmservice/observatory/lib/src/service/object.dart
index 6b15ee6..1319872 100644
--- a/runtime/bin/vmservice/observatory/lib/src/service/object.dart
+++ b/runtime/bin/vmservice/observatory/lib/src/service/object.dart
@@ -38,16 +38,57 @@
   @reflectable String get vmType => _vmType;
   String _vmType;
 
-  bool get isBool => vmType == 'Bool';
-  bool get isDouble => vmType == 'Double';
-  bool get isError => vmType == 'Error';
-  bool get isInstance => vmType == 'Instance';
-  bool get isInt => vmType == 'Smi' || vmType == 'Mint' || vmType == 'Bigint';
-  bool get isList => vmType == 'GrowableObjectArray' || vmType == 'Array';
-  bool get isNull => vmType == 'Null';
-  bool get isSentinel => vmType == 'Sentinel';
-  bool get isString => vmType == 'String';
-  bool get isType => vmType == 'Type';
+  static bool _isInstanceType(String type) {
+    switch (type) {
+      case 'BoundedType':
+      case 'Instance':
+      case 'List':
+      case 'String':
+      case 'Type':
+      case 'TypeParameter':
+      case 'TypeRef':
+      case 'bool':
+      case 'double':
+      case 'int':
+      case 'null':
+        return true;
+      default:
+        return false;
+    }
+  }
+
+  static bool _isTypeType(String type) {
+    switch (type) {
+      case 'BoundedType':
+      case 'Type':
+      case 'TypeParameter':
+      case 'TypeRef':
+        return true;
+      default:
+        return false;
+    }
+  }
+
+  bool get isAbstractType => _isTypeType(type);
+  bool get isBool => type == 'bool';
+  bool get isContext => type == 'Context';
+  bool get isDouble => type == 'double';
+  bool get isError => type == 'Error';
+  bool get isInstance => _isInstanceType(type);
+  bool get isInt => type == 'int';
+  bool get isList => type == 'List';
+  bool get isNull => type == 'null';
+  bool get isSentinel => type == 'Sentinel';
+  bool get isString => type == 'String';
+
+  // Kinds of Instance.
+  bool get isMirrorReference => vmType == 'MirrorReference';
+  bool get isWeakProperty => vmType == 'WeakProperty';
+  bool get isClosure => false;
+  bool get isPlainInstance {
+    return (type == 'Instance' &&
+            !isMirrorReference && !isWeakProperty && !isClosure);
+  }
 
   /// The complete service url of this object.
   @reflectable String get link => _owner.relativeLink(_id);
@@ -91,6 +132,9 @@
       case 'Code':
         obj = new Code._empty(owner);
         break;
+      case 'Context':
+        obj = new Context._empty(owner);
+        break;
       case 'Counter':
         obj = new ServiceMetric._empty(owner);
         break;
@@ -103,20 +147,6 @@
       case 'Gauge':
         obj = new ServiceMetric._empty(owner);
         break;
-      case 'Array':
-      case 'Bigint':
-      case 'Bool':
-      case 'Double':
-      case 'GrowableObjectArray':
-      case 'Instance':
-      case 'Mint':
-      case 'Null':
-      case 'Sentinel':  // TODO(rmacnak): Separate this out.
-      case 'Smi':
-      case 'String':
-      case 'Type':
-        obj = new Instance._empty(owner);
-        break;
       case 'Isolate':
         obj = new Isolate._empty(owner.vm);
         break;
@@ -139,7 +169,14 @@
         obj = new Socket._empty(owner);
         break;
       default:
-        obj = new ServiceMap._empty(owner);
+        if (_isInstanceType(type) ||
+            type == 'Sentinel') {  // TODO(rmacnak): Separate this out.
+          obj = new Instance._empty(owner);
+          break;
+        } else {
+          obj = new ServiceMap._empty(owner);
+          break;
+        }
     }
     obj.update(map);
     return obj;
@@ -176,7 +213,7 @@
             // updating the existing one.
             //
             // TODO(turnidge): Check for vmType changing as well?
-            assert(mapType == 'Error' || mapType == 'Null');
+            assert(mapType == 'Error' || mapType == 'null');
             return new ServiceObject._fromMap(owner, map);
           }
           update(map);
@@ -210,8 +247,8 @@
     // When the response specifies a specific vmType, use it.
     // Otherwise the vmType of the response is the same as the 'user'
     // type.
-    if (map.containsKey('vmType')) {
-      _vmType = _stripRef(map['vmType']);
+    if (map.containsKey('_vmType')) {
+      _vmType = _stripRef(map['_vmType']);
     } else {
       _vmType = _type;
     }
@@ -787,7 +824,7 @@
   @observable String name;
   @observable String vmName;
   @observable String mainPort;
-  @observable Map entry;
+  @observable ServiceFunction entry;
 
   @observable final Map<String, double> timers =
       toObservable(new Map<String, double>());
@@ -1189,7 +1226,7 @@
   @observable String kind;
   @observable String message;
   @observable Instance exception;
-  @observable ServiceMap stacktrace;
+  @observable Instance stacktrace;
 
   void _update(ObservableMap map, bool mapIsRef) {
     kind = map['kind'];
@@ -1470,17 +1507,22 @@
 
 class Instance extends ServiceObject {
   @observable Class clazz;
-  @observable String valueAsString;
   @observable int size;
+  @observable String valueAsString;  // If primitive.
+  @observable bool valueAsStringIsTruncated;
   @observable ServiceFunction closureFunc;  // If a closure.
+  @observable Context closureCtxt;  // If a closure.
   @observable String name;  // If a Type.
+  @observable int length; // If a List.
 
   @observable var typeClass;
-  @observable var length;
   @observable var fields;
   @observable var nativeFields;
   @observable var elements;
   @observable var userName;
+  @observable var referent;  // If a MirrorReference.
+  @observable Instance key;  // If a WeakProperty.
+  @observable Instance value;  // If a WeakProperty.
 
   bool get isClosure => closureFunc != null;
 
@@ -1491,10 +1533,14 @@
     _upgradeCollection(map, isolate);
 
     clazz = map['class'];
-    valueAsString = map['valueAsString'];
     size = map['size'];
+    valueAsString = map['valueAsString'];
+    // Coerce absence to false.
+    valueAsStringIsTruncated = map['valueAsStringIsTruncated'] == true;
     closureFunc = map['closureFunc'];
+    closureCtxt = map['closureCtxt'];
     name = map['name'];
+    length = map['length'];
 
     if (mapIsRef) {
       return;
@@ -1502,10 +1548,12 @@
 
     nativeFields = map['nativeFields'];
     fields = map['fields'];
-    length = map['length'];
     elements = map['elements'];
     typeClass = map['type_class'];
     userName = map['user_name'];
+    referent = map['referent'];
+    key = map['key'];
+    value = map['value'];
 
     // We are fully loaded.
     _loaded = true;
@@ -1516,6 +1564,40 @@
   String toString() => 'Instance($shortName)';
 }
 
+
+class Context extends ServiceObject {
+  @observable Class clazz;
+  @observable int size;
+
+  @observable var parentContext;
+  @observable int length;
+  @observable var variables;
+
+  Context._empty(ServiceObjectOwner owner) : super._empty(owner);
+
+  void _update(ObservableMap map, bool mapIsRef) {
+    // Extract full properties.
+    _upgradeCollection(map, isolate);
+
+    size = map['size'];
+    length = map['length'];
+    parentContext = map['parent'];
+
+    if (mapIsRef) {
+      return;
+    }
+
+    clazz = map['class'];
+    variables = map['variables'];
+
+    // We are fully loaded.
+    _loaded = true;
+  }
+
+  String toString() => 'Context($length)';
+}
+
+
 // TODO(koda): Sync this with VM.
 class FunctionKind {
   final String _strValue;
@@ -2003,7 +2085,7 @@
   @reflectable final addressTicks = new ObservableMap<int, CodeTick>();
   @observable String formattedInclusiveTicks = '';
   @observable String formattedExclusiveTicks = '';
-  @observable ServiceMap objectPool;
+  @observable Instance objectPool;
   @observable ServiceFunction function;
   @observable Script script;
   @observable bool isOptimized = false;
diff --git a/runtime/bin/vmservice/observatory/test/contexts_test.dart b/runtime/bin/vmservice/observatory/test/contexts_test.dart
new file mode 100644
index 0000000..05ae127
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/test/contexts_test.dart
@@ -0,0 +1,119 @@
+// Copyright (c) 2014, 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 inbound_references_test;
+
+import 'dart:async';
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+
+var cleanBlock, copyingBlock, fullBlock, fullBlockWithChain;
+
+Function genCleanBlock() {
+  block(x) => x;
+  return block;
+}
+
+Function genCopyingBlock() {
+  final x = 'I could be copied into the block';
+  block() => x;
+  return block;
+}
+
+Function genFullBlock() {
+  var x = 42;  // I must captured in a context.
+  block() => x;
+  x++;
+  return block;
+}
+
+Function genFullBlockWithChain() {
+  var x = 420;  // I must captured in a context.
+  outerBlock() {
+    var y = 4200;
+    innerBlock() => x + y;
+    y++;
+    return innerBlock;
+  }
+  x++;
+  return outerBlock();
+}
+
+void script() {
+  cleanBlock = genCleanBlock();
+  copyingBlock = genCopyingBlock();
+  fullBlock = genFullBlock();
+  fullBlockWithChain = genFullBlockWithChain();
+}
+
+var tests = [
+
+(Isolate isolate) =>
+  isolate.rootLib.load().then((Library lib) {
+    ServiceMap field = lib.variables.singleWhere((v) => v.name == 'cleanBlock');
+    return field['value'].load().then((Instance block) {
+      expect(block.isClosure, isTrue);
+      expect(block.closureCtxt.isContext, isTrue);
+      expect(block.closureCtxt.length, equals(0));
+      return block.closureCtxt.load().then((Context ctxt) {
+        expect(ctxt.parentContext.isNull, isTrue);
+      });
+    });
+  }),
+
+(Isolate isolate) =>
+  isolate.rootLib.load().then((Library lib) {
+    ServiceMap field = lib.variables.singleWhere((v) => v.name == 'copyingBlock');
+    return field['value'].load().then((Instance block) {
+      expect(block.isClosure, isTrue);
+      expect(block.closureCtxt.isContext, isTrue);
+      expect(block.closureCtxt.length, equals(1));
+      return block.closureCtxt.load().then((Context ctxt) {
+        expect(ctxt.variables.single['value'].isString, isTrue);
+        expect(ctxt.variables.single['value'].valueAsString, equals('I could be copied into the block'));
+        expect(block.closureCtxt.parentContext.isNull, isTrue);
+      });
+    });
+  }),
+
+(Isolate isolate) =>
+  isolate.rootLib.load().then((Library lib) {
+    ServiceMap field = lib.variables.singleWhere((v) => v.name == 'fullBlock');
+    return field['value'].load().then((Instance block) {
+      expect(block.isClosure, isTrue);
+      expect(block.closureCtxt.isContext, isTrue);
+      expect(block.closureCtxt.length, equals(1));
+      return block.closureCtxt.load().then((ctxt) {
+        expect(ctxt.variables.single['value'].isInt, isTrue);
+        expect(ctxt.variables.single['value'].valueAsString, equals('43'));
+        expect(ctxt.parentContext.isNull, isTrue);
+      });
+    });
+  }),
+
+(Isolate isolate) =>
+  isolate.rootLib.load().then((Library lib) {
+    ServiceMap field = lib.variables.singleWhere((v) => v.name == 'fullBlockWithChain');
+    return field['value'].load().then((Instance block) {
+      expect(block.isClosure, isTrue);
+      expect(block.closureCtxt.isContext, isTrue);
+      expect(block.closureCtxt.length, equals(1));
+      return block.closureCtxt.load().then((Context ctxt) {
+        expect(ctxt.variables.single['value'].isInt, isTrue);
+        expect(ctxt.variables.single['value'].valueAsString, equals('4201'));
+        expect(ctxt.parentContext.isContext, isTrue);
+        expect(ctxt.parentContext.length, equals(1));
+        return ctxt.parentContext.load().then((Context outerCtxt) {
+          expect(outerCtxt.variables.single['value'].isInt, isTrue);
+          expect(outerCtxt.variables.single['value'].valueAsString, equals('421'));
+          expect(outerCtxt.parentContext.isNull, isTrue);
+        });
+      });
+    });
+  }),
+
+];
+
+main(args) => runIsolateTests(args, tests, testeeBefore: script);
diff --git a/runtime/bin/vmservice/observatory/test/mirror_references_test.dart b/runtime/bin/vmservice/observatory/test/mirror_references_test.dart
new file mode 100644
index 0000000..651803a
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/test/mirror_references_test.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2014, 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 vm_references_test;
+
+import 'dart:async';
+import 'dart:mirrors';
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+
+class Foo { }
+
+Foo foo;
+var /*MirrorReference*/ ref;
+
+void script() {
+  foo = new Foo();
+  ClassMirror fooClassMirror = reflectClass(Foo);
+  InstanceMirror fooClassMirrorMirror = reflect(fooClassMirror);
+  LibraryMirror libmirrors = fooClassMirrorMirror.type.owner;
+  ref = reflect(fooClassMirror).getField(MirrorSystem.getSymbol('_reflectee', libmirrors)).reflectee;
+}
+
+var tests = [
+
+(Isolate isolate) =>
+  isolate.rootLib.load().then((Library lib) {
+    ServiceMap fooField = lib.variables.singleWhere((v) => v.name == 'foo');
+    Instance foo = fooField['value'];
+    ServiceMap refField = lib.variables.singleWhere((v) => v.name == 'ref');
+    Instance ref = refField['value'];
+
+    expect(foo.isMirrorReference, isFalse);
+    expect(ref.isMirrorReference, isTrue);
+    expect(ref.referent, isNull);
+    return ref.load().then((Instance loadedRef) {
+      expect(loadedRef.referent, isNotNull);
+      expect(loadedRef.referent.name, equals('Foo'));
+      expect(loadedRef.referent, equals(foo.clazz));
+    });
+  }),
+
+];
+
+main(args) => runIsolateTests(args, tests, testeeBefore: script);
diff --git a/runtime/bin/vmservice/observatory/test/string_escaping_test.dart b/runtime/bin/vmservice/observatory/test/string_escaping_test.dart
new file mode 100644
index 0000000..cf581b7
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/test/string_escaping_test.dart
@@ -0,0 +1,81 @@
+// Copyright (c) 2014, 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 string_escaping_test;
+
+import 'dart:async';
+import 'dart:mirrors';
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+
+var ascii;
+var latin1;
+var unicode;
+var hebrew;
+var singleQuotes;
+var doubleQuotes;
+var newLines;
+var tabs;
+var suggrogatePairs;
+var nullInTheMiddle;
+var escapedUnicodeEscape;
+var longStringEven;
+var longStringOdd;
+
+void script() {
+  ascii = "Hello, World!";
+  latin1 = "blåbærgrød";
+  unicode = "Îñţérñåţîöñåļîžåţîờñ";
+  hebrew = "שלום רב שובך צפורה נחמדת";  // Right-to-left text.
+  singleQuotes = "'One,' he said.";
+  doubleQuotes = '"Two," he said.';
+  newLines = "Windows\r\nSmalltalk\rUnix\n";
+  tabs = "One\tTwo\tThree";
+  suggrogatePairs = "1𝄞2𝄞𝄞3𝄞𝄞𝄞";
+  nullInTheMiddle = "There are four\u0000 words.";
+  escapedUnicodeEscape = "Should not be A: \\u0041";
+
+  // A surrogate pair will cross the preferred truncation boundry.
+  longStringEven = "..";
+  for (int i = 0; i < 512; i++) longStringEven += "𝄞";
+  longStringOdd = ".";
+  for (int i = 0; i < 512; i++) longStringOdd += "𝄞";
+}
+
+var tests = [
+
+(Isolate isolate) =>
+  isolate.rootLib.load().then((Library lib) {
+    expectFullString(String varName, String varValueAsString) {
+      ServiceMap field = lib.variables.singleWhere((v) => v.name == varName);
+      Instance value = field['value'];
+      expect(value.valueAsString, equals(varValueAsString));
+      expect(value.valueAsStringIsTruncated, isFalse);
+    }
+    expectTruncatedString(String varName, String varValueAsString) {
+      ServiceMap field = lib.variables.singleWhere((v) => v.name == varName);
+      Instance value = field['value'];
+      expect(varValueAsString, startsWith(value.valueAsString));
+      expect(value.valueAsStringIsTruncated, isTrue);
+    }
+
+    script();  // Need to initialize variables in the testing isolate.
+    expectFullString('ascii', ascii);
+    expectFullString('latin1', latin1);
+    expectFullString('unicode', unicode);
+    expectFullString('hebrew', hebrew);
+    expectFullString('singleQuotes', singleQuotes);
+    expectFullString('doubleQuotes', doubleQuotes);
+    expectFullString('newLines', newLines);
+    expectFullString('tabs', tabs);
+    expectFullString('suggrogatePairs', suggrogatePairs);
+    expectFullString('nullInTheMiddle', nullInTheMiddle);  /// 01: ok
+    expectTruncatedString('longStringEven', longStringEven);
+    expectTruncatedString('longStringOdd', longStringOdd);
+  }),
+
+];
+
+main(args) => runIsolateTests(args, tests, testeeBefore: script);
diff --git a/runtime/bin/vmservice/observatory/test/weak_properties_test.dart b/runtime/bin/vmservice/observatory/test/weak_properties_test.dart
new file mode 100644
index 0000000..662d60f
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/test/weak_properties_test.dart
@@ -0,0 +1,64 @@
+// Copyright (c) 2014, 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 vm_references_test;
+
+import 'dart:async';
+import 'dart:mirrors';
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+
+class Foo { }
+class Bar { }
+
+var expando;
+var key;
+var value;
+var weak_property;
+
+void script() {
+  expando = new Expando('some debug name');
+  key = new Foo();
+  value = new Bar();
+  expando[key] = value;
+
+  InstanceMirror expandoMirror = reflect(expando);
+  LibraryMirror libcore = expandoMirror.type.owner;
+
+  var entries = expandoMirror.getField(MirrorSystem.getSymbol('_data', libcore)).reflectee;
+  weak_property = entries.singleWhere((e) => e != null);
+  print(weak_property);
+}
+
+var tests = [
+
+(Isolate isolate) =>
+  isolate.rootLib.load().then((Library lib) {
+    ServiceMap keyField = lib.variables.singleWhere((v) => v.name == 'key');
+    Instance key = keyField['value'];
+    ServiceMap valueField = lib.variables.singleWhere((v) => v.name == 'value');
+    Instance value = valueField['value'];
+    ServiceMap propField = lib.variables.singleWhere((v) => v.name == 'weak_property');
+    Instance prop = propField['value'];
+
+    expect(key.isWeakProperty, isFalse);
+    expect(value.isWeakProperty, isFalse);
+    expect(prop.isWeakProperty, isTrue);
+    expect(prop.key, isNull);
+    expect(prop.value, isNull);
+    return prop.load().then((Instance loadedProp) {
+      // Object ids are not cannonicalized, so we rely on the key and value
+      // being the sole instances of their classes to test we got the objects
+      // we expect.
+      expect(loadedProp.key, isNotNull);
+      expect(loadedProp.key.clazz, equals(key.clazz));
+      expect(loadedProp.value, isNotNull);
+      expect(loadedProp.value.clazz, equals(value.clazz));
+    });
+  }),
+
+];
+
+main(args) => runIsolateTests(args, tests, testeeBefore: script);
diff --git a/runtime/bin/vmservice/observatory/tests/ui/inspector.dart b/runtime/bin/vmservice/observatory/tests/ui/inspector.dart
new file mode 100644
index 0000000..686d4d6
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/tests/ui/inspector.dart
@@ -0,0 +1,159 @@
+// Copyright (c) 2014, 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.
+
+// See inspector.txt for expected behavior.
+
+library manual_inspector_test;
+
+import 'dart:isolate';
+import 'dart:mirrors';
+import 'dart:profiler';
+import 'dart:typed_data';
+
+class A <T> {}
+class B <S extends num> {}
+
+var array;
+var bigint;
+var blockClean;
+var blockCopying;
+var blockFull;
+var blockFullWithChain;
+var boundedType;
+var capability;
+var counter;
+var expando;
+var float32x4;
+var float64;
+var float64x2;
+var gauge;
+var growableList;
+var int32x4;
+var isolate;
+var map;
+var mint;
+var mirrorClass;
+var mirrorClosure;
+var mirrorInstance;
+var mirrorReference;
+var portReceive;
+var portSend;
+var regex;
+var smi;
+var stacktrace;
+var string;
+var stringEscapedUnicodeEscape;
+var stringHebrew;
+var stringLatin1;
+var stringNewLinesAndTabs;
+var stringNullInTheMiddle;
+var stringSnowflake;
+var stringTrebleClefs;
+var stringUnicode;
+var theFalse;
+var theNull;
+var theTrue;
+var type;
+var typeParameter;
+var typedData;
+var uninitialized = new Object();
+var userTag;
+var weakProperty;
+
+extractPrivateField(obj, name) {
+  return reflect(obj).getField(MirrorSystem.getSymbol(name, reflect(obj).type.owner)).reflectee;
+}
+
+genStacktrace() {
+  try {
+    num.parse(',');
+  } catch (e, s) {
+    return s;
+  }
+}
+
+genCleanBlock() {
+  block(x) => x;
+  return block;
+}
+
+genCopyingBlock() {
+  final x = 'I could be copied down';
+  block() => x;
+  return block;
+}
+
+genFullBlock() {
+  var x = 0;
+  block() => x++;
+  return block;
+}
+
+genFullBlockWithChain() {
+  var x = 0;
+  outer() {
+    var y = 0;
+    block() => x++ + y++;
+    return block;
+  }
+  return outer;
+}
+
+secondMain(msg) { }
+
+main() {
+  print("Started main");
+
+  array = new List(1);
+  bigint = 1 << 65;
+  blockClean = genCleanBlock();
+  blockCopying = genCopyingBlock();
+  blockFull = genFullBlock();
+  blockFullWithChain = genFullBlockWithChain();
+  boundedType = extractPrivateField(reflect(new B<int>()).type.typeVariables.single, '_reflectee');
+  counter = new Counter("CounterName", "Counter description");
+  expando = new Expando("expando-name");
+  expando[array] = 'The weakly associated value';
+  float32x4 = new Float32x4.zero();
+  float64 = 3.14;
+  float64x2 = new Float64x2.zero();
+  gauge = new Gauge("GaugeName", "Gauge description", 0.0, 100.0);
+  growableList = new List();
+  int32x4 = new Int32x4(0,0,0,0);
+  map = { "x":3, "y":4 };
+  mint = 1 << 32;
+  mirrorClass = reflectClass(Object);
+  mirrorClosure = reflect(blockFull);
+  mirrorInstance = reflect("a reflectee");
+  mirrorReference = extractPrivateField(mirrorClass, '_reflectee');
+  portReceive = new RawReceivePort();
+  regex = new RegExp("a*b+c");
+  smi = 7;
+  stacktrace = genStacktrace();
+  string = "Hello";
+  stringEscapedUnicodeEscape = "Should not be A: \\u0041";
+  stringHebrew = "שלום רב שובך צפורה נחמדת";  // Right-to-left text.
+  stringLatin1 = "blåbærgrød";
+  stringNewLinesAndTabs = "One fish\ttwo fish\nRed fish\tBlue fish\n";
+  stringNullInTheMiddle = "There are four\u0000 words.";
+  stringSnowflake = "❄";
+  stringTrebleClefs = "1𝄞2𝄞𝄞3𝄞𝄞𝄞";  // Surrogate pair.
+  stringUnicode = "Îñţérñåţîöñåļîžåţîờñ";
+  theFalse = false;
+  theNull = null;
+  theTrue = true;
+  type = String;
+  typeParameter = extractPrivateField(reflectClass(A).typeVariables.single, '_reflectee');
+  typedData = extractPrivateField(new ByteData(64), '_typedData');
+  userTag = new UserTag("Example tag name");
+  weakProperty = extractPrivateField(expando, '_data').firstWhere((e) => e != null);
+
+  Isolate.spawn(secondMain, "Hello").then((otherIsolate) {
+    isolate = otherIsolate;
+    portSend = otherIsolate.controlPort;
+    capability = otherIsolate.terminateCapability;
+  });
+
+  print("Finished main");
+}
diff --git a/runtime/bin/vmservice/observatory/tests/ui/inspector.txt b/runtime/bin/vmservice/observatory/tests/ui/inspector.txt
new file mode 100644
index 0000000..0f99c300
--- /dev/null
+++ b/runtime/bin/vmservice/observatory/tests/ui/inspector.txt
@@ -0,0 +1,5 @@
+0. Run dart --observe inspector.dart
+1. Visit isolate 'root'
+2. Visit library manual_inspector_test
+3. Expand 'variables'
+4. Each should display a reasonable value, not a blank nor an 'Unknown service ref'
diff --git a/runtime/bin/vmservice/observatory/tests/ui/retainingPath.dart b/runtime/bin/vmservice/observatory/tests/ui/retainingPath.dart
index 452bd8c..119998d 100644
--- a/runtime/bin/vmservice/observatory/tests/ui/retainingPath.dart
+++ b/runtime/bin/vmservice/observatory/tests/ui/retainingPath.dart
@@ -1,23 +1,9 @@
-/*
-0.
-dart --observe retainingPath.dart
-1.
-isolate 'root'
-2.
-library 'retainingPath.dart'
-3.
-class 'Foo'
-4.
-under 'instances', find 'strongly reachable' list; it should contain 2 elements, one of which should have a field containing "87"
-5.
-instance "87"
-6.
-find 'retaining path'; it should have length 4, and be annotated as follows:
- "87" in var a
- Foo in var b
- Foo at list index 5 of
- _List(10)
-*/
+// Copyright (c) 2014, 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.
+
+// See reatiningPath.txt for expected behavior.
+
 class Foo {
   var a;
   var b;
diff --git a/runtime/include/dart_native_api.h b/runtime/include/dart_native_api.h
index 348eef3..850de91 100644
--- a/runtime/include/dart_native_api.h
+++ b/runtime/include/dart_native_api.h
@@ -52,7 +52,11 @@
     int64_t as_int64;
     double as_double;
     char* as_string;
-    char* as_bigint;
+    struct {
+      bool neg;
+      intptr_t used;
+      struct _Dart_CObject* digits;
+    } as_bigint;
     Dart_Port as_send_port;
     struct {
       intptr_t length;
diff --git a/runtime/lib/array.cc b/runtime/lib/array.cc
index 7d9e076..003f12f 100644
--- a/runtime/lib/array.cc
+++ b/runtime/lib/array.cc
@@ -5,7 +5,6 @@
 #include "platform/assert.h"
 #include "vm/bootstrap_natives.h"
 #include "vm/assembler.h"
-#include "vm/bigint_operations.h"
 #include "vm/exceptions.h"
 #include "vm/native_entry.h"
 #include "vm/object.h"
@@ -23,9 +22,7 @@
   const Array& array = Array::CheckedHandle(arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Smi, index, arguments->NativeArgAt(1));
   if ((index.Value() < 0) || (index.Value() >= array.Length())) {
-    const Array& args = Array::Handle(Array::New(1));
-    args.SetAt(0, index);
-    Exceptions::ThrowByType(Exceptions::kRange, args);
+    Exceptions::ThrowRangeError("index", index, 0, array.Length());
   }
   return array.At(index.Value());
 }
@@ -36,9 +33,7 @@
   GET_NON_NULL_NATIVE_ARGUMENT(Smi, index, arguments->NativeArgAt(1));
   const Instance& value = Instance::CheckedHandle(arguments->NativeArgAt(2));
   if ((index.Value() < 0) || (index.Value() >= array.Length())) {
-    const Array& args = Array::Handle(Array::New(1));
-    args.SetAt(0, index);
-    Exceptions::ThrowByType(Exceptions::kRange, args);
+    Exceptions::ThrowRangeError("index", index, 0, array.Length());
   }
   array.SetAt(index.Value(), value);
   return Object::null();
@@ -51,46 +46,31 @@
 }
 
 
-// ObjectArray src, int srcStart, int dstStart, int count.
-DEFINE_NATIVE_ENTRY(List_copyFromObjectArray, 5) {
-  const Array& dest = Array::CheckedHandle(arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Array, source, arguments->NativeArgAt(1));
-  GET_NON_NULL_NATIVE_ARGUMENT(Smi, src_start, arguments->NativeArgAt(2));
-  GET_NON_NULL_NATIVE_ARGUMENT(Smi, dst_start, arguments->NativeArgAt(3));
-  GET_NON_NULL_NATIVE_ARGUMENT(Smi, count, arguments->NativeArgAt(4));
+// ObjectArray src, int start, int count, bool needTypeArgument.
+DEFINE_NATIVE_ENTRY(List_slice, 4) {
+  const Array& src = Array::CheckedHandle(arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Smi, start, arguments->NativeArgAt(1));
+  GET_NON_NULL_NATIVE_ARGUMENT(Smi, count, arguments->NativeArgAt(2));
+  GET_NON_NULL_NATIVE_ARGUMENT(Bool, needs_type_arg, arguments->NativeArgAt(3));
   intptr_t icount = count.Value();
-  if (icount < 0) {
-    Exceptions::ThrowByType(Exceptions::kArgument, Object::empty_array());
+  // Zero count should be handled outside already.
+  if ((icount <= 0) || (icount > src.Length())) {
+    Exceptions::ThrowRangeError(
+        "count",
+        Smi::Handle(Smi::New(icount)),
+        1,
+        src.Length() + 1);
   }
-  if (icount == 0) {
-    return Object::null();
-  }
-  intptr_t isrc_start = src_start.Value();
-  intptr_t idst_start = dst_start.Value();
-  if ((isrc_start < 0) || ((isrc_start + icount) > source.Length())) {
-    const Array& args = Array::Handle(Array::New(1));
-    args.SetAt(0, src_start);
-    Exceptions::ThrowByType(Exceptions::kRange, args);
-  }
-  if ((idst_start < 0) || ((idst_start + icount) > dest.Length())) {
-    const Array& args = Array::Handle(Array::New(1));
-    args.SetAt(0, dst_start);
-    Exceptions::ThrowByType(Exceptions::kRange, args);
+  intptr_t istart = start.Value();
+  if ((istart < 0) || ((istart + icount) > src.Length())) {
+    Exceptions::ThrowRangeError(
+        "start",
+        Smi::Handle(Smi::New(istart)),
+        0,
+        src.Length() - icount + 1);
   }
 
-  Object& src_obj = Object::Handle();
-  if (isrc_start < idst_start) {
-    for (intptr_t i = icount - 1; i >= 0; i--) {
-      src_obj = source.At(isrc_start + i);
-      dest.SetAt(idst_start + i, src_obj);
-    }
-  } else {
-    for (intptr_t i = 0; i < icount; i++) {
-      src_obj = source.At(isrc_start + i);
-      dest.SetAt(idst_start + i, src_obj);
-    }
-  }
-  return Object::null();
+  return src.Slice(istart, icount, needs_type_arg.value());
 }
 
 
diff --git a/runtime/lib/array.dart b/runtime/lib/array.dart
index 1d49d3b..7412ebf 100644
--- a/runtime/lib/array.dart
+++ b/runtime/lib/array.dart
@@ -18,11 +18,21 @@
 
   int get length native "List_getLength";
 
-  void _copyFromObjectArray(_List src,
-                            int srcStart,
-                            int dstStart,
-                            int count)
-      native "List_copyFromObjectArray";
+  List _slice(int start, int count, bool needsTypeArgument) {
+    if (count <= 64) {
+      final result = needsTypeArgument ? new _List<E>(count)
+                                       : new _List(count);
+      for (int i = 0; i < result.length; i++) {
+        result[i] = this[start + i];
+      }
+      return result;
+    } else {
+      return _sliceInternal(start, count, needsTypeArgument);
+    }
+  }
+
+  List _sliceInternal(int start, int count, bool needsTypeArgument)
+      native "List_slice";
 
   void insert(int index, E element) {
     throw NonGrowableListError.add();
@@ -66,22 +76,21 @@
     }
     int length = end - start;
     if (length == 0) return;
-
-    if (ClassID.getID(iterable) == ClassID.cidOneByteString) {
-      _copyFromObjectArray(iterable, skipCount, start, length);
+    if (identical(this, iterable)) {
+      Lists.copy(iterable, skipCount, this, start, length);
+    } else if (ClassID.getID(iterable) == ClassID.cidArray) {
+      Lists.copy(iterable, skipCount, this, start, length);
+    } else if (iterable is List) {
+      Lists.copy(iterable, skipCount, this, start, length);
     } else {
-      if (iterable is List) {
-        Lists.copy(iterable, skipCount, this, start, length);
-      } else {
-        Iterator it = iterable.iterator;
-        while (skipCount > 0) {
-          if (!it.moveNext()) return;
-          skipCount--;
-        }
-        for (int i = start; i < end; i++) {
-          if (!it.moveNext()) return;
-          this[i] = it.current;
-        }
+      Iterator it = iterable.iterator;
+      while (skipCount > 0) {
+        if (!it.moveNext()) return;
+        skipCount--;
+      }
+      for (int i = start; i < end; i++) {
+        if (!it.moveNext()) return;
+        this[i] = it.current;
       }
     }
   }
@@ -103,9 +112,7 @@
     if (end == null) end = this.length;
     int length = end - start;
     if (start == end) return <E>[];
-    List list = new _List(length);
-    list._copyFromObjectArray(this, start, 0, length);
-    var result = new _GrowableList<E>.withData(list);
+    var result = new _GrowableList<E>.withData(_slice(start, length, false));
     result._setLength(length);
     return result;
   }
@@ -256,8 +263,7 @@
   List<E> toList({ bool growable: true }) {
     var length = this.length;
     if (length > 0) {
-      var result = growable ? new _List(length) : new _List<E>(length);
-      result._copyFromObjectArray(this, 0, 0, length);
+      var result = _slice(0, length, !growable);
       if (growable) {
         result = new _GrowableList<E>.withData(result);
         result._setLength(length);
diff --git a/runtime/lib/bigint.dart b/runtime/lib/bigint.dart
new file mode 100644
index 0000000..146c7ca
--- /dev/null
+++ b/runtime/lib/bigint.dart
@@ -0,0 +1,1206 @@
+// Copyright (c) 2014, 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.
+
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+/*
+ * Copyright (c) 2003-2005  Tom Wu
+ * Copyright (c) 2012 Adam Singer (adam@solvr.io)
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
+ * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * In addition, the following condition applies:
+ *
+ * All redistributions must retain an intact copy of this copyright notice
+ * and disclaimer.
+ */
+
+class _Bigint extends _IntegerImplementation implements int {
+  // Bits per digit.
+  static const int DIGIT_BITS = 32;
+  static const int DIGIT_BASE = 1 << DIGIT_BITS;
+  static const int DIGIT_MASK = (1 << DIGIT_BITS) - 1;
+
+  // Bits per half digit.
+  static const int DIGIT2_BITS = DIGIT_BITS >> 1;
+  static const int DIGIT2_BASE = 1 << DIGIT2_BITS;
+  static const int DIGIT2_MASK = (1 << DIGIT2_BITS) - 1;
+
+  // Allocate extra digits so the bigint can be reused.
+  static const int EXTRA_DIGITS = 4;
+
+  // Floating-point unit integer precision.
+  static const int FP_BITS = 52;
+  static const int FP_BASE = 1 << FP_BITS;
+  static const int FP_D1 = FP_BITS - DIGIT_BITS;
+  static const int FP_D2 = 2 * DIGIT_BITS - FP_BITS;
+
+  // Min and max of non bigint values.
+  static const int MIN_INT64 = (-1) << 63;
+  static const int MAX_INT64 = 0x7fffffffffffffff;
+
+  // Bigint constant values.
+  // Note: Not declared as final in order to satisfy optimizer, which expects
+  // constants to be in canonical form (Smi).
+  static _Bigint ZERO = new _Bigint();
+  static _Bigint ONE = new _Bigint()._setInt(1);
+
+  // Digit conversion table for parsing.
+  static final Map<int, int> DIGIT_TABLE = _createDigitTable();
+
+  // Internal data structure.
+  bool get _neg native "Bigint_getNeg";
+  void set _neg(bool neg) native "Bigint_setNeg";
+  int get _used native "Bigint_getUsed";
+  void set _used(int used) native "Bigint_setUsed";
+  Uint32List get _digits native "Bigint_getDigits";
+  void set _digits(Uint32List digits) native "Bigint_setDigits";
+
+  // Factory returning an instance initialized to value 0.
+  factory _Bigint() native "Bigint_allocate";
+
+  // Factory returning an instance initialized to an integer value.
+  factory _Bigint._fromInt(int i) {
+    return new _Bigint()._setInt(i);
+  }
+
+  // Factory returning an instance initialized to a hex string.
+  factory _Bigint._fromHex(String s) {
+    return new _Bigint()._setHex(s);
+  }
+
+  // Factory returning an instance initialized to a double value given by its
+  // components.
+  factory _Bigint._fromDouble(int sign, int significand, int exponent) {
+    return new _Bigint()._setDouble(sign, significand, exponent);
+  }
+
+  // Initialize instance to the given value no larger than a Mint.
+  _Bigint _setInt(int i) {
+    assert(i is! _Bigint);
+    _ensureLength(2);
+    _used = 2;
+    var l, h;
+    if (i < 0) {
+      _neg = true;
+      if (i == MIN_INT64) {
+        l = 0;
+        h = 0x80000000;
+      } else {
+        l = (-i) & DIGIT_MASK;
+        h = (-i) >> DIGIT_BITS;
+      }
+    } else {
+      _neg = false;
+      l = i & DIGIT_MASK;
+      h = i >> DIGIT_BITS;
+    }
+    _digits[0] = l;
+    _digits[1] = h;
+    _clamp();
+    return this;
+  }
+
+  // Initialize instance to the given hex string.
+  // TODO(regis): Copy Bigint::NewFromHexCString, fewer digit accesses.
+  // TODO(regis): Unused.
+  _Bigint _setHex(String s) {
+    const int HEX_BITS = 4;
+    const int HEX_DIGITS_PER_DIGIT = 8;
+    var hexDigitIndex = s.length;
+    _ensureLength((hexDigitIndex + HEX_DIGITS_PER_DIGIT - 1) ~/ HEX_DIGITS_PER_DIGIT);
+    var bitIndex = 0;
+    while (--hexDigitIndex >= 0) {
+      var digit = DIGIT_TABLE[s.codeUnitAt(hexDigitIndex)];
+      if (digit = null) {
+        if (s[hexDigitIndex] == "-") _neg = true;
+        continue;  // Ignore invalid digits.
+      }
+      _neg = false;  // Ignore "-" if not at index 0.
+      if (bitIndex == 0) {
+        _digits[_used++] = digit;
+        // TODO(regis): What if too many bad digits were ignored and
+        // _used becomes larger than _digits.length? error or reallocate?
+      } else {
+        _digits[_used - 1] |= digit << bitIndex;
+      }
+      bitIndex = (bitIndex + HEX_BITS) % DIGIT_BITS;
+    }
+    _clamp();
+    return this;
+  }
+
+  // Initialize instance to the given double value.
+  _Bigint _setDouble(int sign, int significand, int exponent) {
+    assert(significand >= 0);
+    assert(exponent >= 0);
+    _setInt(significand);
+    _neg = sign < 0;
+    if (exponent > 0) {
+      _lShiftTo(exponent, this);
+    }
+    return this;
+  }
+
+  // Create digit conversion table for parsing.
+  static Map<int, int> _createDigitTable() {
+    Map table = new HashMap();
+    int digit, value;
+    digit = "0".codeUnitAt(0);
+    for(value = 0; value <= 9; ++value) table[digit++] = value;
+    digit = "a".codeUnitAt(0);
+    for(value = 10; value < 36; ++value) table[digit++] = value;
+    digit = "A".codeUnitAt(0);
+    for(value = 10; value < 36; ++value) table[digit++] = value;
+    return table;
+  }
+
+  // Return most compact integer (i.e. possibly Smi or Mint).
+  // TODO(regis): Intrinsify.
+  int _toValidInt() {
+    assert(DIGIT_BITS == 32);  // Otherwise this code needs to be revised.
+    if (_used == 0) return 0;
+    if (_used == 1) return _neg ? -_digits[0] : _digits[0];
+    if (_used > 2) return this;
+    if (_neg) {
+      if (_digits[1] > 0x80000000) return this;
+      if (_digits[1] == 0x80000000) {
+        if (_digits[0] > 0) return this;
+        return MIN_INT64;
+      }
+      return -((_digits[1] << DIGIT_BITS) | _digits[0]);
+    }
+    if (_digits[1] >= 0x80000000) return this;
+    return (_digits[1] << DIGIT_BITS) | _digits[0];
+  }
+
+  // Conversion from int to bigint.
+  _Bigint _toBigint() => this;
+
+  // Make sure at least 'length' _digits are allocated.
+  // Copy existing _digits if reallocation is necessary.
+  // TODO(regis): Check that we are not preserving _digits unnecessarily.
+  void _ensureLength(int length) {
+    if (length > 0 && (_digits == null || length > _digits.length)) {
+      var new_digits = new Uint32List(length + EXTRA_DIGITS);
+      if (_digits != null) {
+        for (var i = _used; --i >= 0; ) {
+          new_digits[i] = _digits[i];
+        }
+      }
+      _digits = new_digits;
+    }
+  }
+
+  // Clamp off excess high _digits.
+  void _clamp() {
+    while (_used > 0 && _digits[_used - 1] == 0) {
+      --_used;
+    }
+    assert(_used > 0 || !_neg);
+  }
+
+  // Copy this to r.
+  void _copyTo(_Bigint r) {
+    r._ensureLength(_used);
+    for (var i = _used - 1; i >= 0; --i) {
+      r._digits[i] = _digits[i];
+    }
+    r._used = _used;
+    r._neg = _neg;
+  }
+
+  // Return the bit length of digit x.
+  int _nbits(int x) {
+    var r = 1, t;
+    if ((t = x >> 16) != 0) { x = t; r += 16; }
+    if ((t = x >> 8) != 0) { x = t; r += 8; }
+    if ((t = x >> 4) != 0) { x = t; r += 4; }
+    if ((t = x >> 2) != 0) { x = t; r += 2; }
+    if ((x >> 1) != 0) { r += 1; }
+    return r;
+  }
+
+  // r = this << n*DIGIT_BITS.
+  void _dlShiftTo(int n, _Bigint r) {
+    var r_used = _used + n;
+    r._ensureLength(r_used);
+    for (var i = _used - 1; i >= 0; --i) {
+      r._digits[i + n] = _digits[i];
+    }
+    for (var i = n - 1; i >= 0; --i) {
+      r._digits[i] = 0;
+    }
+    r._used = r_used;
+    r._neg = _neg;
+  }
+
+  // r = this >> n*DIGIT_BITS.
+  void _drShiftTo(int n, _Bigint r) {
+    var r_used = _used - n;
+    if (r_used < 0) {
+      if (_neg) {
+        // Set r to -1.
+        r._neg = true;
+        r._ensureLength(1);
+        r._used = 1;
+        r._digits[0] = 1;
+      } else {
+        // Set r to 0.
+        r._neg = false;
+        r._used = 0;
+      }
+      return;
+    }
+    r._ensureLength(r_used);
+    for (var i = n; i < _used; ++i) {
+      r._digits[i - n] = _digits[i];
+    }
+    r._used = r_used;
+    r._neg = _neg;
+    if (_neg) {
+      // Round down if any bit was shifted out.
+      for (var i = 0; i < n; i++) {
+        if (_digits[i] != 0) {
+          r._subTo(ONE, r);
+          break;
+        }
+      }
+    }
+  }
+
+  // r = this << n.
+  void _lShiftTo(int n, _Bigint r) {
+    var ds = n ~/ DIGIT_BITS;
+    var bs = n % DIGIT_BITS;
+    if (bs == 0) {
+      _dlShiftTo(ds, r);
+      return;
+    }
+    var cbs = DIGIT_BITS - bs;
+    var bm = (1 << cbs) - 1;
+    var r_used = _used + ds + 1;
+    r._ensureLength(r_used);
+    var c = 0;
+    for (var i = _used - 1; i >= 0; --i) {
+      r._digits[i + ds + 1] = (_digits[i] >> cbs) | c;
+      c = (_digits[i] & bm) << bs;
+    }
+    for (var i = ds - 1; i >= 0; --i) {
+      r._digits[i] = 0;
+    }
+    r._digits[ds] = c;
+    r._used = r_used;
+    r._neg = _neg;
+    r._clamp();
+  }
+
+  // r = this >> n.
+  void _rShiftTo(int n, _Bigint r) {
+    var ds = n ~/ DIGIT_BITS;
+    var bs = n % DIGIT_BITS;
+    if (bs == 0) {
+      _drShiftTo(ds, r);
+      return;
+    }
+    var r_used = _used - ds;
+    if (r_used <= 0) {
+      if (_neg) {
+        // Set r to -1.
+        r._neg = true;
+        r._ensureLength(1);
+        r._used = 1;
+        r._digits[0] = 1;
+      } else {
+        // Set r to 0.
+        r._neg = false;
+        r._used = 0;
+      }
+      return;
+    }
+    var cbs = DIGIT_BITS - bs;
+    var bm = (1 << bs) - 1;
+    r._ensureLength(r_used);
+    r._digits[0] = _digits[ds] >> bs;
+    for (var i = ds + 1; i < _used; ++i) {
+      r._digits[i - ds - 1] |= (_digits[i] & bm) << cbs;
+      r._digits[i - ds] = _digits[i] >> bs;
+    }
+    r._neg = _neg;
+    r._used = r_used;
+    r._clamp();
+    if (_neg) {
+      // Round down if any bit was shifted out.
+      if ((_digits[ds] & bm) != 0) {
+        r._subTo(ONE, r);
+        return;
+      }
+      for (var i = 0; i < ds; i++) {
+        if (_digits[i] != 0) {
+          r._subTo(ONE, r);
+          return;
+        }
+      }
+    }
+  }
+
+  // Return 0 if abs(this) == abs(a).
+  // Return a positive number if abs(this) > abs(a).
+  // Return a negative number if abs(this) < abs(a).
+  int _absCompareTo(_Bigint a) {
+    var r = _used - a._used;
+    if (r == 0) {
+      var i = _used;
+      while (--i >= 0 && (r = _digits[i] - a._digits[i]) == 0);
+    }
+    return r;
+  }
+
+  // Return 0 if this == a.
+  // Return a positive number if this > a.
+  // Return a negative number if this < a.
+  int _compareTo(_Bigint a) {
+    var r;
+    if (_neg == a._neg) {
+      r = _absCompareTo(a);
+      if (_neg) {
+        r = -r;
+      }
+    } else if (_neg) {
+      r = -1;
+    } else {
+      r = 1;
+    }
+    return r;
+  }
+
+  // r = abs(this) + abs(a).
+  void _absAddTo(_Bigint a, _Bigint r) {
+    if (_used < a._used) {
+      a._absAddTo(this, r);
+      return;
+    }
+    if (_used == 0) {
+      // Set r to 0.
+      r._neg = false;
+      r._used = 0;
+      return;
+    }
+    if (a._used == 0) {
+      _copyTo(r);
+      return;
+    }
+    r._ensureLength(_used + 1);
+    var c = 0;
+    for (var i = 0; i < a._used; i++) {
+      c += _digits[i] + a._digits[i];
+      r._digits[i] = c & DIGIT_MASK;
+      c >>= DIGIT_BITS;
+    }
+    for (var i = a._used; i < _used; i++) {
+      c += _digits[i];
+      r._digits[i] = c & DIGIT_MASK;
+      c >>= DIGIT_BITS;
+    }
+    r._digits[_used] = c;
+    r._used = _used + 1;
+    r._clamp();
+  }
+
+  // r = abs(this) - abs(a), with abs(this) >= abs(a).
+  void _absSubTo(_Bigint a, _Bigint r) {
+    assert(_absCompareTo(a) >= 0);
+    if (_used == 0) {
+      // Set r to 0.
+      r._neg = false;
+      r._used = 0;
+      return;
+    }
+    if (a._used == 0) {
+      _copyTo(r);
+      return;
+    }
+    r._ensureLength(_used);
+    var c = 0;
+    for (var i = 0; i < a._used; i++) {
+      c += _digits[i] - a._digits[i];
+      r._digits[i] = c & DIGIT_MASK;
+      c >>= DIGIT_BITS;
+    }
+    for (var i = a._used; i < _used; i++) {
+      c += _digits[i];
+      r._digits[i] = c & DIGIT_MASK;
+      c >>= DIGIT_BITS;
+    }
+    r._used = _used;
+    r._clamp();
+  }
+
+  // r = abs(this) & abs(a).
+  void _absAndTo(_Bigint a, _Bigint r) {
+    var r_used = (_used < a._used) ? _used : a._used;
+    r._ensureLength(r_used);
+    for (var i = 0; i < r_used; i++) {
+      r._digits[i] = _digits[i] & a._digits[i];
+    }
+    r._used = r_used;
+    r._clamp();
+  }
+
+  // r = abs(this) &~ abs(a).
+  void _absAndNotTo(_Bigint a, _Bigint r) {
+    var r_used = _used;
+    r._ensureLength(r_used);
+    var m = (r_used < a._used) ? r_used : a._used;
+    for (var i = 0; i < m; i++) {
+      r._digits[i] = _digits[i] &~ a._digits[i];
+    }
+    for (var i = m; i < r_used; i++) {
+      r._digits[i] = _digits[i];
+    }
+    r._used = r_used;
+    r._clamp();
+  }
+
+  // r = abs(this) | abs(a).
+  void _absOrTo(_Bigint a, _Bigint r) {
+    var r_used = (_used > a._used) ? _used : a._used;
+    r._ensureLength(r_used);
+    var l, m;
+    if (_used < a._used) {
+      l = a;
+      m = _used;
+    } else {
+      l = this;
+      m = a._used;
+    }
+    for (var i = 0; i < m; i++) {
+      r._digits[i] = _digits[i] | a._digits[i];
+    }
+    for (var i = m; i < r_used; i++) {
+      r._digits[i] = l._digits[i];
+    }
+    r._used = r_used;
+    r._clamp();
+  }
+
+  // r = abs(this) ^ abs(a).
+  void _absXorTo(_Bigint a, _Bigint r) {
+    var r_used = (_used > a._used) ? _used : a._used;
+    r._ensureLength(r_used);
+    var l, m;
+    if (_used < a._used) {
+      l = a;
+      m = _used;
+    } else {
+      l = this;
+      m = a._used;
+    }
+    for (var i = 0; i < m; i++) {
+      r._digits[i] = _digits[i] ^ a._digits[i];
+    }
+    for (var i = m; i < r_used; i++) {
+      r._digits[i] = l._digits[i];
+    }
+    r._used = r_used;
+    r._clamp();
+  }
+
+  // Return r = this & a.
+  _Bigint _andTo(_Bigint a, _Bigint r) {
+    if (_neg == a._neg) {
+      if (_neg) {
+        // (-this) & (-a) == ~(this-1) & ~(a-1)
+        //                == ~((this-1) | (a-1))
+        //                == -(((this-1) | (a-1)) + 1)
+        _Bigint t1 = new _Bigint();
+        _absSubTo(ONE, t1);
+        _Bigint a1 = new _Bigint();
+        a._absSubTo(ONE, a1);
+        t1._absOrTo(a1, r);
+        r._absAddTo(ONE, r);
+        r._neg = true;  // r cannot be zero if this and a are negative.
+        return r;
+      }
+      _absAndTo(a, r);
+      r._neg = false;
+      return r;
+    }
+    // _neg != a._neg
+    var p, n;
+    if (_neg) {
+      p = a;
+      n = this;
+    } else {  // & is symmetric.
+      p = this;
+      n = a;
+    }
+    // p & (-n) == p & ~(n-1) == p &~ (n-1)
+    _Bigint n1 = new _Bigint();
+    n._absSubTo(ONE, n1);
+    p._absAndNotTo(n1, r);
+    r._neg = false;
+    return r;
+  }
+
+  // Return r = this &~ a.
+  _Bigint _andNotTo(_Bigint a, _Bigint r) {
+    if (_neg == a._neg) {
+      if (_neg) {
+        // (-this) &~ (-a) == ~(this-1) &~ ~(a-1)
+        //                 == ~(this-1) & (a-1)
+        //                 == (a-1) &~ (this-1)
+        _Bigint t1 = new _Bigint();
+        _absSubTo(ONE, t1);
+        _Bigint a1 = new _Bigint();
+        a._absSubTo(ONE, a1);
+        a1._absAndNotTo(t1, r);
+        r._neg = false;
+        return r;
+      }
+      _absAndNotTo(a, r);
+      r._neg = false;
+      return r;
+    }
+    if (_neg) {
+      // (-this) &~ a == ~(this-1) &~ a
+      //              == ~(this-1) & ~a
+      //              == ~((this-1) | a)
+      //              == -(((this-1) | a) + 1)
+      _Bigint t1 = new _Bigint();
+      _absSubTo(ONE, t1);
+      t1._absOrTo(a, r);
+      r._absAddTo(ONE, r);
+      r._neg = true;  // r cannot be zero if this is negative and a is positive.
+      return r;
+    }
+    // this &~ (-a) == this &~ ~(a-1) == this & (a-1)
+    _Bigint a1 = new _Bigint();
+    a._absSubTo(ONE, a1);
+    _absAndTo(a1, r);
+    r._neg = false;
+    return r;
+  }
+
+  // Return r = this | a.
+  _Bigint _orTo(_Bigint a, _Bigint r) {
+    if (_neg == a._neg) {
+      if (_neg) {
+        // (-this) | (-a) == ~(this-1) | ~(a-1)
+        //                == ~((this-1) & (a-1))
+        //                == -(((this-1) & (a-1)) + 1)
+        _Bigint t1 = new _Bigint();
+        _absSubTo(ONE, t1);
+        _Bigint a1 = new _Bigint();
+        a._absSubTo(ONE, a1);
+        t1._absAndTo(a1, r);
+        r._absAddTo(ONE, r);
+        r._neg = true;  // r cannot be zero if this and a are negative.
+        return r;
+      }
+      _absOrTo(a, r);
+      r._neg = false;
+      return r;
+    }
+    // _neg != a._neg
+    var p, n;
+    if (_neg) {
+      p = a;
+      n = this;
+    } else {  // | is symmetric.
+      p = this;
+      n = a;
+    }
+    // p | (-n) == p | ~(n-1) == ~((n-1) &~ p) == -(~((n-1) &~ p) + 1)
+    _Bigint n1 = new _Bigint();
+    n._absSubTo(ONE, n1);
+    n1._absAndNotTo(p, r);
+    r._absAddTo(ONE, r);
+    r._neg = true;  // r cannot be zero if only one of this or a is negative.
+    return r;
+  }
+
+  // Return r = this ^ a.
+  _Bigint _xorTo(_Bigint a, _Bigint r) {
+    if (_neg == a._neg) {
+      if (_neg) {
+        // (-this) ^ (-a) == ~(this-1) ^ ~(a-1) == (this-1) ^ (a-1)
+        _Bigint t1 = new _Bigint();
+        _absSubTo(ONE, t1);
+        _Bigint a1 = new _Bigint();
+        a._absSubTo(ONE, a1);
+        t1._absXorTo(a1, r);
+        r._neg = false;
+        return r;
+      }
+      _absXorTo(a, r);
+      r._neg = false;
+      return r;
+    }
+    // _neg != a._neg
+    var p, n;
+    if (_neg) {
+      p = a;
+      n = this;
+    } else {  // ^ is symmetric.
+      p = this;
+      n = a;
+    }
+    // p ^ (-n) == p ^ ~(n-1) == ~(p ^ (n-1)) == -((p ^ (n-1)) + 1)
+    _Bigint n1 = new _Bigint();
+    n._absSubTo(ONE, n1);
+    p._absXorTo(n1, r);
+    r._absAddTo(ONE, r);
+    r._neg = true;  // r cannot be zero if only one of this or a is negative.
+    return r;
+  }
+
+  // Return r = ~this.
+  _Bigint _notTo(_Bigint r) {
+    if (_neg) {
+      // ~(-this) == ~(~(this-1)) == this-1
+      _absSubTo(ONE, r);
+      r._neg = false;
+      return r;
+    }
+    // ~this == -this-1 == -(this+1)
+    _absAddTo(ONE, r);
+    r._neg = true;  // r cannot be zero if this is positive.
+    return r;
+  }
+
+  // Return r = this + a.
+  _Bigint _addTo(_Bigint a, _Bigint r) {
+    var r_neg = _neg;
+    if (_neg == a._neg) {
+      // this + a == this + a
+      // (-this) + (-a) == -(this + a)
+      _absAddTo(a, r);
+    } else {
+      // this + (-a) == this - a == -(this - a)
+      // (-this) + a == a - this == -(this - a)
+      if (_absCompareTo(a) >= 0) {
+        _absSubTo(a, r);
+      } else {
+        r_neg = !r_neg;
+        a._absSubTo(this, r);
+      }
+    }
+  	r._neg = r_neg;
+    return r;
+  }
+
+  // Return r = this - a.
+  _Bigint _subTo(_Bigint a, _Bigint r) {
+  	var r_neg = _neg;
+    if (_neg != a._neg) {
+  		// this - (-a) == this + a
+  		// (-this) - a == -(this + a)
+      _absAddTo(a, r);
+  	} else {
+  		// this - a == this - a == -(this - a)
+  		// (-this) - (-a) == a - this == -(this - a)
+      if (_absCompareTo(a) >= 0) {
+        _absSubTo(a, r);
+  		} else {
+        r_neg = !r_neg;
+        a._absSubTo(this, r);
+      }
+    }
+  	r._neg = r_neg;
+    return r;
+  }
+
+  // Accumulate multiply.
+  // this[i..i+n-1]: bigint multiplicand.
+  // x: digit multiplier.
+  // w[j..j+n-1]: bigint accumulator.
+  // c: int carry in.
+  // Returns carry out.
+  // w[j..j+n-1] += this[i..i+n-1] * x + c.
+  // Returns carry out.
+  // TODO(regis): _sqrTo is the only caller passing an x possibly larger than
+  // a digit (2*digit) and passing a non-zero carry in. Refactor?
+  int _am(int i, int x, _Bigint w, int j, int c, int n) {
+    if (x == 0 && c == 0) {
+      // No-op if both x and c are 0.
+      return 0;
+    }
+    int xl = x & DIGIT2_MASK;
+    int xh = x >> DIGIT2_BITS;
+    while (--n >= 0) {
+      int l = _digits[i] & DIGIT2_MASK;
+      int h = _digits[i++] >> DIGIT2_BITS;
+      int m = xh*l + h*xl;
+      l = xl*l + ((m & DIGIT2_MASK) << DIGIT2_BITS) + w._digits[j] + c;
+      c = (l >> DIGIT_BITS) + (m >> DIGIT2_BITS) + xh*h;
+      w._digits[j++] = l & DIGIT_MASK;
+    }
+    return c;
+  }
+
+  // r = this * a.
+  void _mulTo(_Bigint a, _Bigint r) {
+    // TODO(regis): Use karatsuba multiplication when appropriate.
+    var i = _used;
+    r._ensureLength(i + a._used);
+    r._used = i + a._used;
+    while (--i >= 0) {
+      r._digits[i] = 0;
+    }
+    for (i = 0; i < a._used; ++i) {
+      // TODO(regis): Replace _am with addMulVVW.
+      r._digits[i + _used] = _am(0, a._digits[i], r, i, 0, _used);
+    }
+    r._clamp();
+    r._neg = r._used > 0 && _neg != a._neg;  // Zero cannot be negative.
+  }
+
+  // r = this^2, r != this.
+  void _sqrTo(_Bigint r) {
+    var i = 2 * _used;
+    r._ensureLength(i);
+    r._used = i;
+    while (--i >= 0) {
+      r._digits[i] = 0;
+    }
+    for (i = 0; i < _used - 1; ++i) {
+      var c = _am(i, _digits[i], r, 2*i, 0, 1);
+      var d = r._digits[i + _used];
+      d += _am(i + 1, _digits[i] << 1, r, 2*i + 1, c, _used - i - 1);
+      if (d >= DIGIT_BASE) {
+        r._digits[i + _used] = d - DIGIT_BASE;
+        r._digits[i + _used + 1] = 1;
+      } else {
+        r._digits[i + _used] = d;
+      }
+    }
+    if (r._used > 0) {
+      r._digits[r._used - 1] += _am(i, _digits[i], r, 2*i, 0, 1);
+    }
+    r._neg = false;
+    r._clamp();
+  }
+
+  // Truncating division and remainder.
+  // If q != null, q = trunc(this / a).
+  // If r != null, r = this - a * trunc(this / a).
+  void _divRemTo(_Bigint a, _Bigint q, _Bigint r) {
+    if (a._used == 0) return;
+    if (_used < a._used) {
+      if (q != null) {
+        // Set q to 0.
+        q._neg = false;
+        q._used = 0;
+      }
+      if (r != null) {
+        _copyTo(r);
+      }
+      return;
+    }
+    if (r == null) {
+      r = new _Bigint();
+    }
+    var y = new _Bigint();
+    var nsh = DIGIT_BITS - _nbits(a._digits[a._used - 1]);  // normalize modulus
+    if (nsh > 0) {
+      a._lShiftTo(nsh, y);
+      _lShiftTo(nsh, r);
+    }
+    else {
+      a._copyTo(y);
+      _copyTo(r);
+    }
+    // We consider this and a positive. Ignore the copied sign.
+    y._neg = false;
+    r._neg = false;
+    var y_used = y._used;
+    var y0 = y._digits[y_used - 1];
+    if (y0 == 0) return;
+    var yt = y0*(1 << FP_D1) + ((y_used > 1) ? y._digits[y_used - 2] >> FP_D2 : 0);
+    var d1 = FP_BASE/yt;
+    var d2 = (1 << FP_D1)/yt;
+    var e = 1 << FP_D2;
+    var i = r._used;
+    var j = i - y_used;
+    _Bigint t = (q == null) ? new _Bigint() : q;
+
+    y._dlShiftTo(j, t);
+
+    if (r._compareTo(t) >= 0) {
+      r._digits[r._used++] = 1;
+      r._subTo(t, r);
+    }
+    ONE._dlShiftTo(y_used, t);
+    t._subTo(y, y);  // "negative" y so we can replace sub with _am later
+    while (y._used < y_used) {
+      y._digits[y._used++] = 0;
+    }
+    while (--j >= 0) {
+      // Estimate quotient digit
+      var qd = (r._digits[--i] == y0)
+          ? DIGIT_MASK
+          : (r._digits[i]*d1 + (r._digits[i - 1] + e)*d2).floor();
+      if ((r._digits[i] += y._am(0, qd, r, j, 0, y_used)) < qd) {  // Try it out
+        y._dlShiftTo(j, t);
+        r._subTo(t, r);
+        while (r._digits[i] < --qd) {
+          r._subTo(t, r);
+        }
+      }
+    }
+    if (q != null) {
+      r._drShiftTo(y_used, q);
+      if (_neg != a._neg) {
+        ZERO._subTo(q, q);
+      }
+    }
+    r._used = y_used;
+    r._clamp();
+    if (nsh > 0) {
+      r._rShiftTo(nsh, r);  // Denormalize remainder
+    }
+    if (_neg) {
+      ZERO._subTo(r, r);
+    }
+  }
+
+  int get _identityHashCode {
+    return this;
+  }
+  int operator ~() {
+    _Bigint result = new _Bigint();
+    _notTo(result);
+    return result._toValidInt();
+  }
+
+  int get bitLength {
+    if (_used == 0) return 0;
+    if (_neg) return (~this).bitLength;
+    return DIGIT_BITS*(_used - 1) + _nbits(_digits[_used - 1]);
+  }
+
+  // This method must support smi._toBigint()._shrFromInt(int).
+  int _shrFromInt(int other) {
+    if (_used == 0) return other;  // Shift amount is zero.
+    if (_neg) throw "negative shift amount";  // TODO(regis): What exception?
+    assert(DIGIT_BITS == 32);  // Otherwise this code needs to be revised.
+    var shift;
+    if (_used > 2 || (_used == 2 && _digits[1] > 0x10000000)) {
+      if (other < 0) {
+        return -1;
+      } else {
+        return 0;
+      }
+    } else {
+      shift = ((_used == 2) ? (_digits[1] << DIGIT_BITS) : 0) + _digits[0];
+    }
+    _Bigint result = new _Bigint();
+    other._toBigint()._rShiftTo(shift, result);
+    return result._toValidInt();
+  }
+
+  // This method must support smi._toBigint()._shlFromInt(int).
+  // An out of memory exception is thrown if the result cannot be allocated.
+  int _shlFromInt(int other) {
+    if (_used == 0) return other;  // Shift amount is zero.
+    if (_neg) throw "negative shift amount";  // TODO(regis): What exception?
+    assert(DIGIT_BITS == 32);  // Otherwise this code needs to be revised.
+    var shift;
+    if (_used > 2 || (_used == 2 && _digits[1] > 0x10000000)) {
+      throw new OutOfMemoryError();
+    } else {
+      shift = ((_used == 2) ? (_digits[1] << DIGIT_BITS) : 0) + _digits[0];
+    }
+    _Bigint result = new _Bigint();
+    other._toBigint()._lShiftTo(shift, result);
+    return result._toValidInt();
+  }
+
+  int pow(int exponent) {
+    throw "Bigint.pow not implemented";
+  }
+
+  // Overriden operators and methods.
+
+  // The following operators override operators of _IntegerImplementation for
+  // efficiency, but are not necessary for correctness. They shortcut native
+  // calls that would return null because the receiver is _Bigint.
+  num operator +(num other) {
+    return other._toBigint()._addFromInteger(this);
+  }
+  num operator -(num other) {
+    return other._toBigint()._subFromInteger(this);
+  }
+  num operator *(num other) {
+    return other._toBigint()._mulFromInteger(this);
+  }
+  num operator ~/(num other) {
+    if ((other is int) && (other == 0)) {
+      throw const IntegerDivisionByZeroException();
+    }
+    return other._toBigint()._truncDivFromInteger(this);
+  }
+  num operator /(num other) {
+    return this.toDouble() / other.toDouble();
+  }
+  // TODO(regis): Investigate strange behavior with % double.INFINITY.
+  /*
+  num operator %(num other) {
+    if ((other is int) && (other == 0)) {
+      throw const IntegerDivisionByZeroException();
+    }
+    return other._toBigint()._moduloFromInteger(this);
+  }
+  */
+  int operator &(int other) {
+    return other._toBigint()._bitAndFromInteger(this);
+  }
+  int operator |(int other) {
+    return other._toBigint()._bitOrFromInteger(this);
+  }
+  int operator ^(int other) {
+    return other._toBigint()._bitXorFromInteger(this);
+  }
+  int operator >>(int other) {
+    return other._toBigint()._shrFromInt(this);
+  }
+  int operator <<(int other) {
+    return other._toBigint()._shlFromInt(this);
+  }
+  // End of operator shortcuts.
+
+  int operator -() {
+    if (_used == 0) {
+      return this;
+    }
+    var r = new _Bigint();
+    _copyTo(r);
+    r._neg = !_neg;
+    return r._toValidInt();
+  }
+
+  int get sign {
+    return (_used == 0) ? 0 : _neg ? -1 : 1;
+  }
+
+  bool get isEven => _used == 0 || (_digits[0] & 1) == 0;
+  bool get isNegative => _neg;
+
+  _leftShiftWithMask32(int count, int mask) {
+    if (_used == 0) return 0;
+    if (count is! _Smi) {
+      _shlFromInt(count);  // Throws out of memory exception.
+    }
+    assert(DIGIT_BITS == 32);  // Otherwise this code needs to be revised.
+    if (count > 31) return 0;
+    return (_digits[0] << count) & mask;
+  }
+
+  int _bitAndFromInteger(int other) {
+    _Bigint result = new _Bigint();
+    other._toBigint()._andTo(this, result);
+    return result._toValidInt();
+  }
+  int _bitOrFromInteger(int other) {
+    _Bigint result = new _Bigint();
+    other._toBigint()._orTo(this, result);
+    return result._toValidInt();
+  }
+  int _bitXorFromInteger(int other) {
+    _Bigint result = new _Bigint();
+    other._toBigint()._xorTo(this, result);
+    return result._toValidInt();
+  }
+  int _addFromInteger(int other) {
+    _Bigint result = new _Bigint();
+    other._toBigint()._addTo(this, result);
+    return result._toValidInt();
+  }
+  int _subFromInteger(int other) {
+    _Bigint result = new _Bigint();
+    other._toBigint()._subTo(this, result);
+    return result._toValidInt();
+  }
+  int _mulFromInteger(int other) {
+    _Bigint result = new _Bigint();
+    other._toBigint()._mulTo(this, result);
+    return result._toValidInt();
+  }
+  int _truncDivFromInteger(int other) {
+    _Bigint result = new _Bigint();
+    other._toBigint()._divRemTo(this, result, null);
+    return result._toValidInt();
+  }
+  int _moduloFromInteger(int other) {
+    _Bigint result = new _Bigint();
+    var ob = other._toBigint();
+    other._toBigint()._divRemTo(this, null, result);
+    if (result._neg) {
+      if (_neg) {
+        result._subTo(this, result);
+      } else {
+        result._addTo(this, result);
+      }
+    }
+    return result._toValidInt();
+  }
+  int _remainderFromInteger(int other) {
+    _Bigint result = new _Bigint();
+    other._toBigint()._divRemTo(this, null, result);
+    return result._toValidInt();
+  }
+  bool _greaterThanFromInteger(int other) {
+    return other._toBigint()._compareTo(this) > 0;
+  }
+  bool _equalToInteger(int other) {
+    return other._toBigint()._compareTo(this) == 0;
+  }
+
+  // New method to support crypto.
+
+  // Return this.pow(e) mod m, with 256 <= e < 1<<32.
+  int modPow(int e, int m) {
+    assert(e >= 256 && !m.isEven());
+    if (e >= (1 << 32)) {
+      throw "Bigint.modPow with exponent larger than 32-bit not implemented";
+    }
+    _Reduction z = new _Montgomery(m);
+    var r = new _Bigint();
+    var r2 = new _Bigint();
+    var g = z.convert(this);
+    int i = _nbits(e) - 1;
+    g._copyTo(r);
+    while (--i >= 0) {
+      z.sqrTo(r, r2);
+      if ((e & (1 << i)) > 0) {
+        z.mulTo(r2, g, r);
+      } else {
+        var t = r;
+        r = r2;
+        r2 = t;
+      }
+    }
+    return z.revert(r)._toValidInt();
+  }
+}
+
+// New classes to support crypto (modPow method).
+
+class _Reduction {
+  const _Reduction();
+  _Bigint _convert(_Bigint x) => x;
+  _Bigint _revert(_Bigint x) => x;
+
+  void _mulTo(_Bigint x, _Bigint y, _Bigint r) {
+    x._mulTo(y, r);
+  }
+
+  void _sqrTo(_Bigint x, _Bigint r) {
+    x._sqrTo(r);
+  }
+}
+
+// Montgomery reduction on _Bigint.
+class _Montgomery implements _Reduction {
+  final _Bigint _m;
+  var _mp;
+  var _mpl;
+  var _mph;
+  var _um;
+  var _mused2;
+
+  _Montgomery(this._m) {
+    _mp = _m._invDigit();
+    _mpl = _mp & _Bigint.DIGIT2_MASK;
+    _mph = _mp >> _Bigint.DIGIT2_BITS;
+    _um = (1 << (_Bigint.DIGIT_BITS - _Bigint.DIGIT2_BITS)) - 1;
+    _mused2 = 2*_m._used;
+  }
+
+  // Return x*R mod _m
+  _Bigint _convert(_Bigint x) {
+    var r = new _Bigint();
+    x.abs()._dlShiftTo(_m._used, r);
+    r._divRemTo(_m, null, r);
+    if (x._neg && !r._neg && r._used > 0) {
+      _m._subTo(r, r);
+    }
+    return r;
+  }
+
+  // Return x/R mod _m
+  _Bigint _revert(_Bigint x) {
+    var r = new _Bigint();
+    x._copyTo(r);
+    _reduce(r);
+    return r;
+  }
+
+  // x = x/R mod _m
+  void _reduce(_Bigint x) {
+    x._ensureLength(_mused2 + 1);
+    while (x._used <= _mused2) {  // Pad x so _am has enough room later.
+      x._digits[x._used++] = 0;
+    }
+    for (var i = 0; i < _m._used; ++i) {
+      // Faster way of calculating u0 = x[i]*mp mod DIGIT_BASE.
+      var j = x._digits[i] & _Bigint.DIGIT2_MASK;
+      var u0 = (j*_mpl + (((j*_mph + (x._digits[i] >> _Bigint.DIGIT2_BITS)
+          *_mpl) & _um) << _Bigint.DIGIT2_BITS)) & _Bigint.DIGIT_MASK;
+      // Use _am to combine the multiply-shift-add into one call.
+      j = i + _m._used;
+      var digit = x._digits[j];
+      digit += _m ._am(0, u0, x, i, 0, _m ._used);
+      // propagate carry
+      while (digit >= _Bigint.DIGIT_BASE) {
+        digit -= _Bigint.DIGIT_BASE;
+        x._digits[j++] = digit;
+        digit = x._digits[j];
+        digit++;
+      }
+      x._digits[j] = digit;
+    }
+    x._clamp();
+    x._drShiftTo(_m ._used, x);
+    if (x._compareTo(_m ) >= 0) {
+      x._subTo(_m , x);
+    }
+  }
+
+  // r = x^2/R mod _m ; x != r
+  void _sqrTo(_Bigint x, _Bigint r) {
+    x._sqrTo(r);
+    _reduce(r);
+  }
+
+  // r = x*y/R mod _m ; x, y != r
+  void _mulTo(_Bigint x, _Bigint y, _Bigint r) {
+    x._mulTo(y, r);
+    _reduce(r);
+  }
+}
+
diff --git a/runtime/lib/bool.cc b/runtime/lib/bool.cc
index c78ea89..83d370f 100644
--- a/runtime/lib/bool.cc
+++ b/runtime/lib/bool.cc
@@ -5,7 +5,6 @@
 #include "vm/bootstrap_natives.h"
 
 #include "include/dart_api.h"
-#include "vm/bigint_operations.h"
 #include "vm/dart_entry.h"
 #include "vm/dart_api_impl.h"
 #include "vm/exceptions.h"
@@ -21,24 +20,14 @@
   GET_NON_NULL_NATIVE_ARGUMENT(String, name, arguments->NativeArgAt(1));
   GET_NATIVE_ARGUMENT(Bool, default_value, arguments->NativeArgAt(2));
   // Call the embedder to supply us with the environment.
-  Api::Scope api_scope(isolate);
-  Dart_EnvironmentCallback callback = isolate->environment_callback();
-  if (callback != NULL) {
-    Dart_Handle result = callback(Api::NewHandle(isolate, name.raw()));
-    if (Dart_IsString(result)) {
-      const char *chars;
-      Dart_StringToCString(result, &chars);
-      if (strcmp("true", chars) == 0) return Bool::True().raw();
-      if (strcmp("false", chars) == 0) return Bool::False().raw();
-    } else if (Dart_IsError(result)) {
-      const Object& error =
-          Object::Handle(isolate, Api::UnwrapHandle(result));
-      Exceptions::ThrowArgumentError(
-          String::Handle(
-              String::New(Error::Cast(error).ToErrorCString())));
-    } else if (!Dart_IsNull(result)) {
-      Exceptions::ThrowArgumentError(
-          String::Handle(String::New("Illegal environment value")));
+  const String& env_value =
+      String::Handle(Api::CallEnvironmentCallback(isolate, name));
+  if (!env_value.IsNull()) {
+    if (Symbols::True().Equals(env_value)) {
+      return Bool::True().raw();
+    }
+    if (Symbols::False().Equals(env_value)) {
+      return Bool::False().raw();
     }
   }
   return default_value.raw();
diff --git a/runtime/lib/core_patch.dart b/runtime/lib/core_patch.dart
index 5491698..b8a8524 100644
--- a/runtime/lib/core_patch.dart
+++ b/runtime/lib/core_patch.dart
@@ -4,3 +4,9 @@
 
 import "dart:math";
 import "dart:typed_data";
+
+// We need to pass the exception object as second parameter to the continuation.
+// See vm/ast_transformer.cc for usage.
+void  _asyncCatchHelper(catchFunction, continuation) {
+  catchFunction((e) => continuation(null, e));
+}
diff --git a/runtime/lib/corelib_sources.gypi b/runtime/lib/corelib_sources.gypi
index cc2af74..96a7b19 100644
--- a/runtime/lib/corelib_sources.gypi
+++ b/runtime/lib/corelib_sources.gypi
@@ -8,13 +8,14 @@
   'sources': [
     'core_patch.dart',
     # The above file needs to be first as it imports required libraries.
+    'array.cc',
+    'array.dart',
+    'array_patch.dart',
+    'bigint.dart',
     'bool.cc',
     'bool_patch.dart',
     'date.cc',
     'date_patch.dart',
-    'array.cc',
-    'array.dart',
-    'array_patch.dart',
     'double.cc',
     'double.dart',
     'double_patch.dart',
@@ -47,15 +48,15 @@
     'regexp_patch.dart',
     'stacktrace.cc',
     'stacktrace_patch.dart',
-    'stopwatch_patch.dart',
     'stopwatch.cc',
+    'stopwatch_patch.dart',
     'string.cc',
-    'string_patch.dart',
     'string_buffer_patch.dart',
+    'string_patch.dart',
     'type_patch.dart',
     'uri.cc',
     'uri_patch.dart',
-    'weak_property.dart',
     'weak_property.cc',
+    'weak_property.dart',
   ],
 }
diff --git a/runtime/lib/date.cc b/runtime/lib/date.cc
index f1b0298..67891b9 100644
--- a/runtime/lib/date.cc
+++ b/runtime/lib/date.cc
@@ -6,7 +6,6 @@
 
 #include "vm/bootstrap_natives.h"
 
-#include "vm/bigint_operations.h"
 #include "vm/native_entry.h"
 #include "vm/object.h"
 #include "vm/os.h"
diff --git a/runtime/lib/double.cc b/runtime/lib/double.cc
index 1a33ec0..49c49a8 100644
--- a/runtime/lib/double.cc
+++ b/runtime/lib/double.cc
@@ -6,9 +6,10 @@
 
 #include "platform/math.h"
 
-#include "vm/bigint_operations.h"
 #include "vm/code_generator.h"  // DartModulo.
+#include "vm/dart_entry.h"
 #include "vm/double_conversion.h"
+#include "vm/double_internals.h"
 #include "vm/exceptions.h"
 #include "vm/native_entry.h"
 #include "vm/object.h"
@@ -78,8 +79,63 @@
     args.SetAt(0, String::Handle(String::New(error_msg)));
     Exceptions::ThrowByType(Exceptions::kUnsupported, args);
   }
-  const Bigint& big = Bigint::Handle(BigintOperations::NewFromDouble(val));
-  return big.AsValidInteger();
+  // TODO(regis): Should we implement Bigint::NewFromDouble instead?
+  if ((-1.0 < val) && (val < 1.0)) {
+    return Smi::New(0);
+  }
+  DoubleInternals internals = DoubleInternals(val);
+  if (internals.IsSpecial()) {
+    const Array& exception_arguments = Array::Handle(Array::New(1));
+    exception_arguments.SetAt(
+        0, Object::Handle(String::New("BigintOperations::NewFromDouble")));
+    Exceptions::ThrowByType(Exceptions::kInternalError, exception_arguments);
+  }
+  uint64_t significand = internals.Significand();
+  intptr_t exponent = internals.Exponent();
+  intptr_t sign = internals.Sign();
+  if (exponent <= 0) {
+    significand >>= -exponent;
+    exponent = 0;
+  } else if (exponent <= 10) {
+    // A double significand has at most 53 bits. The following shift will
+    // hence not overflow, and yield an integer of at most 63 bits.
+    significand <<= exponent;
+    exponent = 0;
+  }
+  // A significand has at most 63 bits (after the shift above).
+  // The cast to int64_t is hence safe.
+  if (exponent == 0) {
+    // The double fits in a Smi or Mint.
+    int64_t ival = static_cast<int64_t>(significand);
+    if (sign < 0) {
+      ival = -ival;
+    }
+    return Integer::New(ival);
+  }
+  // Lookup the factory creating a Bigint from a double.
+  const Class& bigint_class =
+      Class::Handle(Library::LookupCoreClass(Symbols::_Bigint()));
+  ASSERT(!bigint_class.IsNull());
+  const Function& factory_method = Function::Handle(
+      bigint_class.LookupFactoryAllowPrivate(
+          Symbols::_BigintFromDoubleFactory()));
+  ASSERT(!factory_method.IsNull());
+
+  // Create the argument list.
+  const intptr_t kNumArgs = 4;
+  const Array& args = Array::Handle(Array::New(kNumArgs));
+  // Factories get type arguments.
+  args.SetAt(0, Object::null_type_arguments());
+  args.SetAt(1, Smi::Handle(Smi::New(sign)));
+  args.SetAt(2,
+             Integer::Handle(Integer::New(static_cast<int64_t>(significand))));
+  args.SetAt(3, Integer::Handle(Integer::New(exponent)));
+
+  // Invoke the constructor and return the new object.
+  Integer& result = Integer::Handle();
+  result ^= DartEntry::InvokeFunction(factory_method, args);
+  ASSERT(result.IsBigint());
+  return result.AsValidInteger();
 }
 
 
diff --git a/runtime/lib/double.dart b/runtime/lib/double.dart
index 55c788b..3b77aaa 100644
--- a/runtime/lib/double.dart
+++ b/runtime/lib/double.dart
@@ -134,6 +134,7 @@
   }
 
   int toInt() native "Double_toInt";
+  _Bigint _toBigint() { return toInt()._toBigint(); }
   double toDouble() { return this; }
 
   static const int CACHE_SIZE_LOG2 = 3;
diff --git a/runtime/lib/growable_array.cc b/runtime/lib/growable_array.cc
index 75efffc..1a3a94b 100644
--- a/runtime/lib/growable_array.cc
+++ b/runtime/lib/growable_array.cc
@@ -16,11 +16,12 @@
   const TypeArguments& type_arguments =
       TypeArguments::CheckedHandle(arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Array, data, arguments->NativeArgAt(1));
-  if ((data.Length() <= 0)) {
-    const Integer& index = Integer::Handle(Integer::New(data.Length()));
-    const Array& args = Array::Handle(Array::New(1));
-    args.SetAt(0, index);
-    Exceptions::ThrowByType(Exceptions::kRange, args);
+  if (data.Length() <= 0) {
+    Exceptions::ThrowRangeError(
+        "length",
+        Integer::Handle(Integer::New(data.Length())),
+        1,
+        Array::kMaxElements);
   }
   const GrowableObjectArray& new_array =
       GrowableObjectArray::Handle(GrowableObjectArray::New(data));
@@ -34,9 +35,7 @@
       GrowableObjectArray::CheckedHandle(arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Smi, index, arguments->NativeArgAt(1));
   if ((index.Value() < 0) || (index.Value() >= array.Length())) {
-    const Array& args = Array::Handle(Array::New(1));
-    args.SetAt(0, index);
-    Exceptions::ThrowByType(Exceptions::kRange, args);
+    Exceptions::ThrowRangeError("index", index, 0, array.Length());
   }
   const Instance& obj = Instance::CheckedHandle(array.At(index.Value()));
   return obj.raw();
@@ -48,9 +47,7 @@
       GrowableObjectArray::CheckedHandle(arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Smi, index, arguments->NativeArgAt(1));
   if ((index.Value() < 0) || (index.Value() >= array.Length())) {
-    const Array& args = Array::Handle(Array::New(1));
-    args.SetAt(0, index);
-    Exceptions::ThrowByType(Exceptions::kRange, args);
+    Exceptions::ThrowRangeError("index", index, 0, array.Length());
   }
   GET_NON_NULL_NATIVE_ARGUMENT(Instance, value, arguments->NativeArgAt(2));
   array.SetAt(index.Value(), value);
diff --git a/runtime/lib/growable_array.dart b/runtime/lib/growable_array.dart
index ade7ec1..fd3426c 100644
--- a/runtime/lib/growable_array.dart
+++ b/runtime/lib/growable_array.dart
@@ -262,13 +262,13 @@
     StringBuffer buffer = new StringBuffer();
     if (separator.isEmpty) {
       for (int i = 0; i < this.length; i++) {
-        buffer.write("${this[i]}");
+        buffer.write(this[i]);
       }
     } else {
-      buffer.write("${this[0]}");
+      buffer.write(this[0]);
       for (int i = 1; i < this.length; i++) {
         buffer.write(separator);
-        buffer.write("${this[i]}");
+        buffer.write(this[i]);
       }
     }
     return buffer.toString();
diff --git a/runtime/lib/integers.cc b/runtime/lib/integers.cc
index d468f58..783b8d3 100644
--- a/runtime/lib/integers.cc
+++ b/runtime/lib/integers.cc
@@ -5,7 +5,6 @@
 #include "vm/bootstrap_natives.h"
 
 #include "include/dart_api.h"
-#include "vm/bigint_operations.h"
 #include "vm/dart_entry.h"
 #include "vm/dart_api_impl.h"
 #include "vm/exceptions.h"
@@ -27,8 +26,7 @@
 static bool CheckInteger(const Integer& i) {
   if (i.IsBigint()) {
     const Bigint& bigint = Bigint::Cast(i);
-    return !BigintOperations::FitsIntoSmi(bigint) &&
-        !BigintOperations::FitsIntoInt64(bigint);
+    return !bigint.FitsIntoSmi() && !bigint.FitsIntoInt64();
   }
   if (i.IsMint()) {
     const Mint& mint = Mint::Cast(i);
@@ -40,6 +38,7 @@
 
 static int BitLengthInt64(int64_t value) {
   value ^= value >> (8 * sizeof(value) - 1);  // flip bits if negative.
+  // TODO(regis): Utils::HighestBit handles negative values. Why the above?
   return value == 0 ? 0 : Utils::HighestBit(value) + 1;
 }
 
@@ -53,9 +52,9 @@
     OS::Print("Integer_bitAndFromInteger %s & %s\n",
         right.ToCString(), left.ToCString());
   }
-  const Integer& result =
-      Integer::Handle(left.BitOp(Token::kBIT_AND, right));
-  return result.AsValidInteger();
+  const Integer& result = Integer::Handle(left.BitOp(Token::kBIT_AND, right));
+  // A null result indicates that a bigint operation is required.
+  return result.IsNull() ? result.raw() : result.AsValidInteger();
 }
 
 
@@ -68,9 +67,9 @@
     OS::Print("Integer_bitOrFromInteger %s | %s\n",
         left.ToCString(), right.ToCString());
   }
-  const Integer& result =
-      Integer::Handle(left.BitOp(Token::kBIT_OR, right));
-  return result.AsValidInteger();
+  const Integer& result = Integer::Handle(left.BitOp(Token::kBIT_OR, right));
+  // A null result indicates that a bigint operation is required.
+  return result.IsNull() ? result.raw() : result.AsValidInteger();
 }
 
 
@@ -83,9 +82,9 @@
     OS::Print("Integer_bitXorFromInteger %s ^ %s\n",
         left.ToCString(), right.ToCString());
   }
-  const Integer& result =
-      Integer::Handle(left.BitOp(Token::kBIT_XOR, right));
-  return result.AsValidInteger();
+  const Integer& result = Integer::Handle(left.BitOp(Token::kBIT_XOR, right));
+  // A null result indicates that a bigint operation is required.
+  return result.IsNull() ? result.raw() : result.AsValidInteger();
 }
 
 
@@ -100,7 +99,8 @@
   }
   const Integer& result =
       Integer::Handle(left_int.ArithmeticOp(Token::kADD, right_int));
-  return result.AsValidInteger();
+  // A null result indicates that a bigint operation is required.
+  return result.IsNull() ? result.raw() : result.AsValidInteger();
 }
 
 
@@ -115,7 +115,8 @@
   }
   const Integer& result =
       Integer::Handle(left_int.ArithmeticOp(Token::kSUB, right_int));
-  return result.AsValidInteger();
+  // A null result indicates that a bigint operation is required.
+  return result.IsNull() ? result.raw() : result.AsValidInteger();
 }
 
 
@@ -130,7 +131,8 @@
   }
   const Integer& result =
       Integer::Handle(left_int.ArithmeticOp(Token::kMUL, right_int));
-  return result.AsValidInteger();
+  // A null result indicates that a bigint operation is required.
+  return result.IsNull() ? result.raw() : result.AsValidInteger();
 }
 
 
@@ -142,7 +144,8 @@
   ASSERT(!right_int.IsZero());
   const Integer& result =
       Integer::Handle(left_int.ArithmeticOp(Token::kTRUNCDIV, right_int));
-  return result.AsValidInteger();
+  // A null result indicates that a bigint operation is required.
+  return result.IsNull() ? result.raw() : result.AsValidInteger();
 }
 
 
@@ -161,7 +164,8 @@
   }
   const Integer& result =
       Integer::Handle(left_int.ArithmeticOp(Token::kMOD, right_int));
-  return result.AsValidInteger();
+  // A null result indicates that a bigint operation is required.
+  return result.IsNull() ? result.raw() : result.AsValidInteger();
 }
 
 
@@ -239,27 +243,15 @@
   GET_NON_NULL_NATIVE_ARGUMENT(String, name, arguments->NativeArgAt(1));
   GET_NATIVE_ARGUMENT(Integer, default_value, arguments->NativeArgAt(2));
   // Call the embedder to supply us with the environment.
-  Api::Scope api_scope(isolate);
-  Dart_EnvironmentCallback callback = isolate->environment_callback();
-  if (callback != NULL) {
-    Dart_Handle response = callback(Api::NewHandle(isolate, name.raw()));
-    if (Dart_IsString(response)) {
-      const String& value = String::Cast(
-          Object::Handle(isolate, Api::UnwrapHandle(response)));
-      const Integer& result = Integer::Handle(ParseInteger(value));
-      if (!result.IsNull()) {
-        if (result.IsSmi()) return result.raw();
-        return result.CheckAndCanonicalize(NULL);
+  const String& env_value =
+      String::Handle(Api::CallEnvironmentCallback(isolate, name));
+  if (!env_value.IsNull()) {
+    const Integer& result = Integer::Handle(ParseInteger(env_value));
+    if (!result.IsNull()) {
+      if (result.IsSmi()) {
+        return result.raw();
       }
-    } else if (Dart_IsError(response)) {
-      const Object& error =
-          Object::Handle(isolate, Api::UnwrapHandle(response));
-      Exceptions::ThrowArgumentError(
-          String::Handle(
-              String::New(Error::Cast(error).ToErrorCString())));
-    } else  if (!Dart_IsNull(response)) {
-      Exceptions::ThrowArgumentError(
-          String::Handle(String::New("Illegal environment value")));
+      return result.CheckAndCanonicalize(NULL);
     }
   }
   return default_value.raw();
@@ -278,7 +270,6 @@
     const Smi& smi_value = Smi::Cast(value);
     return smi_value.ShiftOp(kind, amount, silent);
   }
-  Bigint& big_value = Bigint::Handle();
   if (value.IsMint()) {
     const int64_t mint_value = value.AsInt64Value();
     const int count = Utils::HighestBit(mint_value);
@@ -297,19 +288,10 @@
       }
     } else {
       // Overflow in shift, use Bigints
-      big_value = BigintOperations::NewFromInt64(mint_value);
+      return Integer::null();
     }
   } else {
     ASSERT(value.IsBigint());
-    big_value = Bigint::Cast(value).raw();
-  }
-  switch (kind) {
-    case Token::kSHL:
-      return BigintOperations::ShiftLeft(big_value, amount.Value());
-    case Token::kSHR:
-      return BigintOperations::ShiftRight(big_value, amount.Value());
-    default:
-      UNIMPLEMENTED();
   }
   return Integer::null();
 }
@@ -344,7 +326,8 @@
   ASSERT(CheckInteger(value));
   const Integer& result = Integer::Handle(
       ShiftOperationHelper(Token::kSHR, value, amount));
-  return result.AsValidInteger();
+  // A null result indicates that a bigint operation is required.
+  return result.IsNull() ? result.raw() : result.AsValidInteger();
 }
 
 
@@ -360,7 +343,8 @@
   }
   const Integer& result = Integer::Handle(
       ShiftOperationHelper(Token::kSHL, value, amount));
-  return result.AsValidInteger();
+  // A null result indicates that a bigint operation is required.
+  return result.IsNull() ? result.raw() : result.AsValidInteger();
 }
 
 
@@ -426,29 +410,51 @@
 
 // Bigint natives.
 
-DEFINE_NATIVE_ENTRY(Bigint_bitNegate, 1) {
-  const Bigint& value = Bigint::CheckedHandle(arguments->NativeArgAt(0));
-  const Bigint& result = Bigint::Handle(BigintOperations::BitNot(value));
-  ASSERT(CheckInteger(value));
-  ASSERT(CheckInteger(result));
-  return result.AsValidInteger();
+DEFINE_NATIVE_ENTRY(Bigint_getNeg, 1) {
+  const Bigint& bigint = Bigint::CheckedHandle(arguments->NativeArgAt(0));
+  return bigint.neg();
 }
 
 
-DEFINE_NATIVE_ENTRY(Bigint_bitLength, 1) {
-  const Bigint& value = Bigint::CheckedHandle(arguments->NativeArgAt(0));
-  return Integer::New(BigintOperations::BitLength(value));
+DEFINE_NATIVE_ENTRY(Bigint_setNeg, 2) {
+  const Bigint& bigint = Bigint::CheckedHandle(arguments->NativeArgAt(0));
+  const Bool& neg = Bool::CheckedHandle(arguments->NativeArgAt(1));
+  bigint.set_neg(neg);
+  return Object::null();
 }
 
 
-DEFINE_NATIVE_ENTRY(Bigint_shlFromInt, 2) {
-  // Use the preallocated out of memory exception to avoid calling
-  // into dart code or allocating any code.
-  const Instance& exception =
-      Instance::Handle(isolate->object_store()->out_of_memory());
-  Exceptions::Throw(isolate, exception);
-  UNREACHABLE();
-  return 0;
+DEFINE_NATIVE_ENTRY(Bigint_getUsed, 1) {
+  const Bigint& bigint = Bigint::CheckedHandle(arguments->NativeArgAt(0));
+  return bigint.used();
+}
+
+
+DEFINE_NATIVE_ENTRY(Bigint_setUsed, 2) {
+  const Bigint& bigint = Bigint::CheckedHandle(arguments->NativeArgAt(0));
+  const Smi& used = Smi::CheckedHandle(arguments->NativeArgAt(1));
+  bigint.set_used(used);
+  return Object::null();
+}
+
+
+DEFINE_NATIVE_ENTRY(Bigint_getDigits, 1) {
+  const Bigint& bigint = Bigint::CheckedHandle(arguments->NativeArgAt(0));
+  return bigint.digits();
+}
+
+
+DEFINE_NATIVE_ENTRY(Bigint_setDigits, 2) {
+  const Bigint& bigint = Bigint::CheckedHandle(arguments->NativeArgAt(0));
+  const TypedData& digits = TypedData::CheckedHandle(arguments->NativeArgAt(1));
+  bigint.set_digits(digits);
+  return Object::null();
+}
+
+
+DEFINE_NATIVE_ENTRY(Bigint_allocate, 1) {
+  // Argument is null type arguments, since class Bigint is not parameterized.
+  return Bigint::New();
 }
 
 }  // namespace dart
diff --git a/runtime/lib/integers.dart b/runtime/lib/integers.dart
index e6e53566..eb166ef 100644
--- a/runtime/lib/integers.dart
+++ b/runtime/lib/integers.dart
@@ -5,27 +5,33 @@
 // TODO(srdjan): fix limitations.
 // - shift amount must be a Smi.
 class _IntegerImplementation extends _Num {
-  factory _IntegerImplementation._uninstantiable() {
-    throw new UnsupportedError(
-        "_IntegerImplementation can only be allocated by the VM");
-  }
+  // The Dart class _Bigint extending _IntegerImplementation requires a
+  // default constructor.
 
   Type get runtimeType => int;
 
   num operator +(num other) {
-    return other._addFromInteger(this);
+    var result = other._addFromInteger(this);
+    if (result != null) return result;
+    return other._toBigint()._addFromInteger(this);
   }
   num operator -(num other) {
-    return other._subFromInteger(this);
+    var result = other._subFromInteger(this);
+    if (result != null) return result;
+    return other._toBigint()._subFromInteger(this);
   }
   num operator *(num other) {
-    return other._mulFromInteger(this);
+    var result = other._mulFromInteger(this);
+    if (result != null) return result;
+    return other._toBigint()._mulFromInteger(this);
   }
   num operator ~/(num other) {
     if ((other is int) && (other == 0)) {
       throw const IntegerDivisionByZeroException();
     }
-    return other._truncDivFromInteger(this);
+    var result = other._truncDivFromInteger(this);
+    if (result != null) return result;
+    return other._toBigint()._truncDivFromInteger(this);
   }
   num operator /(num other) {
     return this.toDouble() / other.toDouble();
@@ -34,19 +40,27 @@
     if ((other is int) && (other == 0)) {
       throw const IntegerDivisionByZeroException();
     }
-    return other._moduloFromInteger(this);
+    var result = other._moduloFromInteger(this);
+    if (result != null) return result;
+    return other._toBigint()._moduloFromInteger(this);
   }
   int operator -() {
     return 0 - this;
   }
   int operator &(int other) {
-    return other._bitAndFromInteger(this);
+    var result = other._bitAndFromInteger(this);
+    if (result != null) return result;
+    return other._toBigint()._bitAndFromInteger(this);
   }
   int operator |(int other) {
-    return other._bitOrFromInteger(this);
+    var result = other._bitOrFromInteger(this);
+    if (result != null) return result;
+    return other._toBigint()._bitOrFromInteger(this);
   }
   int operator ^(int other) {
-    return other._bitXorFromInteger(this);
+    var result = other._bitXorFromInteger(this);
+    if (result != null) return result;
+    return other._toBigint()._bitXorFromInteger(this);
   }
   num remainder(num other) {
     return other._remainderFromInteger(this);
@@ -63,10 +77,14 @@
     return other - (other ~/ this) * this;
   }
   int operator >>(int other) {
-    return other._shrFromInt(this);
+    var result = other._shrFromInt(this);
+    if (result != null) return result;
+    return other._toBigint()._shrFromInt(this);
   }
   int operator <<(int other) {
-    return other._shlFromInt(this);
+    var result = other._shlFromInt(this);
+    if (result != null) return result;
+    return other._toBigint()._shlFromInt(this);
   }
   bool operator <(num other) {
     return other > this;
@@ -182,6 +200,7 @@
 
   int toInt() { return this; }
   double toDouble() { return new _Double.fromInteger(this); }
+  _Bigint _toBigint() { return new _Bigint()._setInt(this); }
 
   String toStringAsFixed(int fractionDigits) {
     return this.toDouble().toStringAsFixed(fractionDigits);
@@ -464,31 +483,3 @@
   }
   int _shlFromInt(int other) native "Mint_shlFromInt";
 }
-
-// A number that can be represented as Smi or Mint will never be represented as
-// Bigint.
-class _Bigint extends _IntegerImplementation implements int {
-  factory _Bigint._uninstantiable() {
-    throw new UnsupportedError(
-        "_Bigint can only be allocated by the VM");
-  }
-  int get _identityHashCode {
-    return this;
-  }
-  int operator ~() native "Bigint_bitNegate";
-  int get bitLength native "Bigint_bitLength";
-
-  // Shift by bigint exceeds range that can be handled by the VM.
-  int _shrFromInt(int other) {
-    if (other < 0) {
-      return -1;
-    } else {
-      return 0;
-    }
-  }
-  int _shlFromInt(int other) native "Bigint_shlFromInt";
-
-  int pow(int exponent) {
-    throw "Bigint.pow not implemented";
-  }
-}
diff --git a/runtime/lib/isolate_patch.dart b/runtime/lib/isolate_patch.dart
index 39826f6..e0194fc 100644
--- a/runtime/lib/isolate_patch.dart
+++ b/runtime/lib/isolate_patch.dart
@@ -274,8 +274,11 @@
   }
 
   /* patch */ static Future<Isolate> spawnUri(
-      Uri uri, List<String> args, var message, { bool paused: false }) {
+      Uri uri, List<String> args, var message,
+      { bool paused: false, Uri packageRoot }) {
     // `paused` isn't handled yet.
+    // `packageRoot` isn't handled yet.
+    if (packageRoot != null) throw new UnimplementedError("packageRoot");
     RawReceivePort readyPort;
     try {
       // The VM will invoke [_startIsolate] and not `main`.
diff --git a/runtime/lib/math.cc b/runtime/lib/math.cc
index 99d55dc..94662e6 100644
--- a/runtime/lib/math.cc
+++ b/runtime/lib/math.cc
@@ -6,7 +6,6 @@
 
 #include "vm/bootstrap_natives.h"
 
-#include "vm/bigint_operations.h"
 #include "vm/exceptions.h"
 #include "vm/native_entry.h"
 #include "vm/object.h"
@@ -153,26 +152,34 @@
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, seed_int, arguments->NativeArgAt(0));
   uint64_t seed = 0;
   if (seed_int.IsBigint()) {
-    const Bigint& mask64 = Bigint::Handle(
-        BigintOperations::NewFromUint64(0xffffffffffffffffLL));
     Bigint& big_seed = Bigint::Handle();
     big_seed ^= seed_int.raw();
     uint64_t negate_mask = 0;
+    uint64_t borrow = 0;
     if (big_seed.IsNegative()) {
       // Negate bits to make seed positive.
       // Negate bits again (by xor with negate_mask) when extracted below,
       // to get original bits.
       negate_mask = 0xffffffffffffffffLL;
-      big_seed ^= BigintOperations::BitNot(big_seed);
+
+      // Instead of computing ~big_seed here, we compute it on the fly below as
+      // follows: ~(-big_seed) == ~(~(big_seed-1)) == big_seed-1
+      borrow = 1;
     }
-    Bigint& low64 = Bigint::Handle();
+    const intptr_t used = big_seed.Used();
+    intptr_t digit = 0;
     do {
-      low64 = BigintOperations::BitAnd(big_seed, mask64);
-      ASSERT(BigintOperations::FitsIntoUint64(low64));
-      uint64_t chunk = BigintOperations::ToUint64(low64) ^ negate_mask;
-      seed = (seed * 1037) ^ mix64(chunk);
-      big_seed = BigintOperations::ShiftRight(big_seed, 64);
-    } while (!big_seed.IsZero());
+      uint64_t low64 = ((digit + 1) < used) ? big_seed.DigitAt(digit + 1) : 0;
+      low64 <<= 32;
+      low64 |= (digit < used) ? big_seed.DigitAt(digit) : 0;
+      low64 -= borrow;
+      if ((borrow == 1) && (low64 != 0xffffffffffffffffLL)) {
+        borrow = 0;
+      }
+      low64 ^= negate_mask;
+      seed = (seed * 1037) ^ mix64(low64);
+      digit += 2;
+    } while (digit < used);
   } else {
     seed = mix64(static_cast<uint64_t>(seed_int.AsInt64Value()));
   }
diff --git a/runtime/lib/profiler.cc b/runtime/lib/profiler.cc
index 3128fb9..a32d40e 100644
--- a/runtime/lib/profiler.cc
+++ b/runtime/lib/profiler.cc
@@ -6,7 +6,6 @@
 
 #include "include/dart_api.h"
 
-#include "vm/bigint_operations.h"
 #include "vm/exceptions.h"
 #include "vm/native_entry.h"
 #include "vm/object.h"
diff --git a/runtime/lib/simd128.cc b/runtime/lib/simd128.cc
index e216555..b9bf55c 100644
--- a/runtime/lib/simd128.cc
+++ b/runtime/lib/simd128.cc
@@ -13,12 +13,8 @@
 
 static void ThrowMaskRangeException(int64_t m) {
   if ((m < 0) || (m > 255)) {
-    const String& error = String::Handle(
-      String::NewFormatted("mask (%" Pd64 ") must be in the range [0..256)",
-                           m));
-    const Array& args = Array::Handle(Array::New(1));
-    args.SetAt(0, error);
-    Exceptions::ThrowByType(Exceptions::kRange, args);
+    Exceptions::ThrowRangeError(
+        "mask", Integer::Handle(Integer::New(m)), 0, 256);
   }
 }
 
diff --git a/runtime/lib/string.cc b/runtime/lib/string.cc
index 19222eb..2573b9a 100644
--- a/runtime/lib/string.cc
+++ b/runtime/lib/string.cc
@@ -19,24 +19,10 @@
   GET_NON_NULL_NATIVE_ARGUMENT(String, name, arguments->NativeArgAt(1));
   GET_NATIVE_ARGUMENT(String, default_value, arguments->NativeArgAt(2));
   // Call the embedder to supply us with the environment.
-  Api::Scope api_scope(isolate);
-  Dart_EnvironmentCallback callback = isolate->environment_callback();
-  if (callback != NULL) {
-    Dart_Handle result = callback(Api::NewHandle(isolate, name.raw()));
-    if (Dart_IsString(result)) {
-      const Object& value =
-          Object::Handle(isolate, Api::UnwrapHandle(result));
-      return Symbols::New(String::Cast(value));
-    } else if (Dart_IsError(result)) {
-      const Object& error =
-          Object::Handle(isolate, Api::UnwrapHandle(result));
-      Exceptions::ThrowArgumentError(
-          String::Handle(
-              String::New(Error::Cast(error).ToErrorCString())));
-    } else if (!Dart_IsNull(result)) {
-      Exceptions::ThrowArgumentError(
-          String::Handle(String::New("Illegal environment value")));
-    }
+  const String& env_value =
+      String::Handle(Api::CallEnvironmentCallback(isolate, name));
+  if (!env_value.IsNull()) {
+    return Symbols::New(env_value);
   }
   return default_value.raw();
 }
@@ -234,21 +220,15 @@
 
 static int32_t StringValueAt(const String& str, const Integer& index) {
   if (index.IsSmi()) {
-    const Smi& smi = Smi::Cast(index);
-    intptr_t index = smi.Value();
-    if ((index < 0) || (index >= str.Length())) {
-      const Array& args = Array::Handle(Array::New(1));
-      args.SetAt(0, smi);
-      Exceptions::ThrowByType(Exceptions::kRange, args);
+    const intptr_t index_value = Smi::Cast(index).Value();
+    if ((0 <= index_value) && (index_value < str.Length())) {
+      return str.CharAt(index_value);
     }
-    return str.CharAt(index);
-  } else {
-    // An index larger than Smi is always illegal.
-    const Array& args = Array::Handle(Array::New(1));
-    args.SetAt(0, index);
-    Exceptions::ThrowByType(Exceptions::kRange, args);
-    return 0;
   }
+
+  // An index larger than Smi is always illegal.
+  Exceptions::ThrowRangeError("index", index, 0, str.Length());
+  return 0;
 }
 
 
@@ -336,9 +316,7 @@
   intptr_t array_length = codeUnits.Length();
   intptr_t length_value = length.Value();
   if (length_value < 0 || length_value > array_length) {
-    const Array& args = Array::Handle(Array::New(1));
-    args.SetAt(0, length);
-    Exceptions::ThrowByType(Exceptions::kRange, args);
+    Exceptions::ThrowRangeError("length", length, 0, array_length + 1);
   }
   const String& result = isLatin1.value()
       ? String::Handle(OneByteString::New(length_value, Heap::kNew))
diff --git a/runtime/lib/typed_data.cc b/runtime/lib/typed_data.cc
index 2ff65d7..5f0003f 100644
--- a/runtime/lib/typed_data.cc
+++ b/runtime/lib/typed_data.cc
@@ -6,7 +6,6 @@
 
 #include "include/dart_api.h"
 
-#include "vm/bigint_operations.h"
 #include "vm/exceptions.h"
 #include "vm/native_entry.h"
 #include "vm/object.h"
@@ -21,13 +20,12 @@
                        intptr_t length_in_bytes,
                        intptr_t element_size_in_bytes) {
   if (!Utils::RangeCheck(offset_in_bytes, access_size, length_in_bytes)) {
-    const String& error = String::Handle(String::NewFormatted(
-        "index (%" Pd ") must be in the range [0..%" Pd ")",
-        (offset_in_bytes + access_size) / element_size_in_bytes,
-        (length_in_bytes / element_size_in_bytes)));
-    const Array& args = Array::Handle(Array::New(1));
-    args.SetAt(0, error);
-    Exceptions::ThrowByType(Exceptions::kRange, args);
+    const intptr_t index =
+        (offset_in_bytes + access_size) / element_size_in_bytes;
+    const intptr_t length =
+        length_in_bytes / element_size_in_bytes;
+    Exceptions::ThrowRangeError(
+        "index", Integer::Handle(Integer::New(index)), 0, length);
   }
 }
 
@@ -281,6 +279,8 @@
 
 // TODO(asiva): Consider truncating the bigint value if it does not fit into
 // a uint64_t value (see ASSERT(BigintOperations::FitsIntoUint64(bigint))).
+// TODO(regis): Shouldn't we throw an argument error if the bigint is too large
+// instead of assert faulting or truncating the bigint as suggested?
 #define TYPED_DATA_UINT64_SETTER(setter, object)                               \
 DEFINE_NATIVE_ENTRY(TypedData_##setter, 3) {                                   \
   GET_NON_NULL_NATIVE_ARGUMENT(Instance, instance, arguments->NativeArgAt(0)); \
@@ -289,8 +289,8 @@
   uint64_t object_value;                                                       \
   if (value.IsBigint()) {                                                      \
     const Bigint& bigint = Bigint::Cast(value);                                \
-    ASSERT(BigintOperations::FitsIntoUint64(bigint));                          \
-    object_value = BigintOperations::AbsToUint64(bigint);                      \
+    ASSERT(bigint.FitsIntoUint64());                                           \
+    object_value = bigint.AsUint64Value();                                     \
   } else {                                                                     \
     ASSERT(value.IsMint() || value.IsSmi());                                   \
     object_value = value.AsInt64Value();                                       \
@@ -416,8 +416,8 @@
   uint64_t value;
   if (host_value.IsBigint()) {
     const Bigint& bigint = Bigint::Cast(host_value);
-    ASSERT(BigintOperations::FitsIntoUint64(bigint));
-    value = BigintOperations::AbsToUint64(bigint);
+    ASSERT(bigint.FitsIntoUint64());
+    value = bigint.AsUint64Value();
   } else {
     ASSERT(host_value.IsMint() || host_value.IsSmi());
     value = host_value.AsInt64Value();
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index 7eebb8c..de9330b 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -298,7 +298,9 @@
 // Bit sizes.
 const int kBitsPerByte = 8;
 const int kBitsPerByteLog2 = 3;
+const int kBitsPerInt32 = kInt32Size * kBitsPerByte;
 const int kBitsPerWord = kWordSize * kBitsPerByte;
+const int kBitsPerWordLog2 = kWordSizeLog2 + kBitsPerByteLog2;
 
 // System-wide named constants.
 const intptr_t KB = 1024;
diff --git a/runtime/platform/utils.cc b/runtime/platform/utils.cc
index 894635c..7778390 100644
--- a/runtime/platform/utils.cc
+++ b/runtime/platform/utils.cc
@@ -34,6 +34,7 @@
 }
 
 
+// TODO(koda): Compare to flsll call/intrinsic.
 int Utils::HighestBit(int64_t v) {
   uint64_t x = static_cast<uint64_t>((v > 0) ? v : -v);
   uint64_t t;
diff --git a/runtime/platform/utils.h b/runtime/platform/utils.h
index 913f521..a46db44 100644
--- a/runtime/platform/utils.h
+++ b/runtime/platform/utils.h
@@ -81,6 +81,7 @@
 
   static int HighestBit(int64_t v);
 
+  static int CountLeadingZeros(uword x);
   static int CountTrailingZeros(uword x);
 
   // Computes a hash value for the given string.
diff --git a/runtime/platform/utils_android.h b/runtime/platform/utils_android.h
index b315a9b..904f6f4 100644
--- a/runtime/platform/utils_android.h
+++ b/runtime/platform/utils_android.h
@@ -9,6 +9,17 @@
 
 namespace dart {
 
+inline int Utils::CountLeadingZeros(uword x) {
+#if defined(ARCH_IS_32_BIT)
+  return __builtin_clzl(x);
+#elif defined(ARCH_IS_64_BIT)
+  return __builtin_clzll(x);
+#else
+#error Architecture is not 32-bit or 64-bit.
+#endif
+}
+
+
 inline int Utils::CountTrailingZeros(uword x) {
 #if defined(ARCH_IS_32_BIT)
   return __builtin_ctzl(x);
@@ -17,7 +28,7 @@
 #else
 #error Architecture is not 32-bit or 64-bit.
 #endif
-};
+}
 
 
 inline uint16_t Utils::HostToBigEndian16(uint16_t value) {
diff --git a/runtime/platform/utils_linux.h b/runtime/platform/utils_linux.h
index 14e508e..f2af4d1 100644
--- a/runtime/platform/utils_linux.h
+++ b/runtime/platform/utils_linux.h
@@ -9,6 +9,17 @@
 
 namespace dart {
 
+inline int Utils::CountLeadingZeros(uword x) {
+#if defined(ARCH_IS_32_BIT)
+  return __builtin_clzl(x);
+#elif defined(ARCH_IS_64_BIT)
+  return __builtin_clzll(x);
+#else
+#error Architecture is not 32-bit or 64-bit.
+#endif
+}
+
+
 inline int Utils::CountTrailingZeros(uword x) {
 #if defined(ARCH_IS_32_BIT)
   return __builtin_ctzl(x);
@@ -17,7 +28,7 @@
 #else
 #error Architecture is not 32-bit or 64-bit.
 #endif
-};
+}
 
 
 inline uint16_t Utils::HostToBigEndian16(uint16_t value) {
diff --git a/runtime/platform/utils_macos.h b/runtime/platform/utils_macos.h
index 2ce7aa2..3fa29849 100644
--- a/runtime/platform/utils_macos.h
+++ b/runtime/platform/utils_macos.h
@@ -9,6 +9,17 @@
 
 namespace dart {
 
+inline int Utils::CountLeadingZeros(uword x) {
+#if defined(ARCH_IS_32_BIT)
+  return __builtin_clzl(x);
+#elif defined(ARCH_IS_64_BIT)
+  return __builtin_clzll(x);
+#else
+#error Architecture is not 32-bit or 64-bit.
+#endif
+}
+
+
 inline int Utils::CountTrailingZeros(uword x) {
 #if defined(ARCH_IS_32_BIT)
   return __builtin_ctzl(x);
@@ -17,7 +28,7 @@
 #else
 #error Architecture is not 32-bit or 64-bit.
 #endif
-};
+}
 
 
 inline uint16_t Utils::HostToBigEndian16(uint16_t value) {
diff --git a/runtime/platform/utils_win.h b/runtime/platform/utils_win.h
index aeba259..7d7b96e 100644
--- a/runtime/platform/utils_win.h
+++ b/runtime/platform/utils_win.h
@@ -10,17 +10,30 @@
 
 namespace dart {
 
+inline int Utils::CountLeadingZeros(uword x) {
+  unsigned long position;  // NOLINT
+#if defined(ARCH_IS_32_BIT)
+  _BitScanReverse(&position, x);
+#elif defined(ARCH_IS_64_BIT)
+  _BitScanReverse64(&position, x);
+#else
+#error Architecture is not 32-bit or 64-bit.
+#endif
+  return kBitsPerWord - static_cast<int>(position) - 1;
+}
+
+
 inline int Utils::CountTrailingZeros(uword x) {
   unsigned long result;  // NOLINT
 #if defined(ARCH_IS_32_BIT)
-  _BitScanReverse(&result, x);
+  _BitScanForward(&result, x);
 #elif defined(ARCH_IS_64_BIT)
-  _BitScanReverse64(&result, x);
+  _BitScanForward64(&result, x);
 #else
 #error Architecture is not 32-bit or 64-bit.
 #endif
   return static_cast<int>(result);
-};
+}
 
 
 inline uint16_t Utils::HostToBigEndian16(uint16_t value) {
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 03a0715..de4a1c4 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -32,6 +32,7 @@
 cc/ThreadInterrupterMedium: Skip
 cc/ThreadInterrupterLow: Skip
 cc/Service_Profile: Skip
+cc/ToCStringTruncated: Fail # Issue 20874
 
 [ $system == linux ]
 cc/ThreadInterrupterHigh: Skip
diff --git a/runtime/third_party/double-conversion/src/double-conversion.cc b/runtime/third_party/double-conversion/src/double-conversion.cc
index db3feec..e379299 100644
--- a/runtime/third_party/double-conversion/src/double-conversion.cc
+++ b/runtime/third_party/double-conversion/src/double-conversion.cc
@@ -28,14 +28,14 @@
 #include <limits.h>
 #include <math.h>
 
-#include "double-conversion.h"
+#include "double-conversion.h"  /* NOLINT */
 
-#include "bignum-dtoa.h"
-#include "fast-dtoa.h"
-#include "fixed-dtoa.h"
-#include "ieee.h"
-#include "strtod.h"
-#include "utils.h"
+#include "bignum-dtoa.h"  /* NOLINT */
+#include "fast-dtoa.h"  /* NOLINT */
+#include "fixed-dtoa.h"  /* NOLINT */
+#include "ieee.h"  /* NOLINT */
+#include "strtod.h"  /* NOLINT */
+#include "utils.h"  /* NOLINT */
 
 namespace double_conversion {
 
@@ -577,7 +577,8 @@
   } while (current != end);
 
   ASSERT(number < ((int64_t)1 << kSignificandSize));
-  ASSERT(static_cast<int64_t>(static_cast<double>(number)) == number);
+  const double double_number = static_cast<double>(number);
+  ASSERT(static_cast<int64_t>(double_number) == number);
 
   *trailing_pointer = current;
 
diff --git a/runtime/vm/assembler_arm.cc b/runtime/vm/assembler_arm.cc
index 3c22762..5d69702 100644
--- a/runtime/vm/assembler_arm.cc
+++ b/runtime/vm/assembler_arm.cc
@@ -1520,7 +1520,7 @@
       add(rd, PP, o, cond);
     } else {
       LoadImmediate(rd, offset_hi, cond);
-      add(rd, PP, Operand(LR), cond);
+      add(rd, PP, Operand(rd), cond);
     }
     ldr(rd, Address(rd, offset_lo), cond);
   }
diff --git a/runtime/vm/ast.h b/runtime/vm/ast.h
index 95865d0..4a87253 100644
--- a/runtime/vm/ast.h
+++ b/runtime/vm/ast.h
@@ -954,10 +954,12 @@
   WhileNode(intptr_t token_pos,
             SourceLabel* label,
             AstNode* condition,
+            SequenceNode* condition_preamble,
             SequenceNode* body)
     : AstNode(token_pos),
       label_(label),
       condition_(condition),
+      condition_preamble_(condition_preamble),
       body_(body) {
     ASSERT(label_ != NULL);
     ASSERT(condition_ != NULL);
@@ -967,8 +969,12 @@
   SourceLabel* label() const { return label_; }
   AstNode* condition() const { return condition_; }
   SequenceNode* body() const { return body_; }
+  SequenceNode* condition_preamble() const { return condition_preamble_; }
 
   virtual void VisitChildren(AstNodeVisitor* visitor) const {
+    if (condition_preamble() != NULL) {
+      condition_preamble()->Visit(visitor);
+    }
     condition()->Visit(visitor);
     body()->Visit(visitor);
   }
@@ -978,6 +984,7 @@
  private:
   SourceLabel* label_;
   AstNode* condition_;
+  SequenceNode* condition_preamble_;
   SequenceNode* body_;
 
   DISALLOW_IMPLICIT_CONSTRUCTORS(WhileNode);
@@ -1026,12 +1033,14 @@
           SourceLabel* label,
           SequenceNode* initializer,
           AstNode* condition,
+          SequenceNode* condition_preamble,
           SequenceNode* increment,
           SequenceNode* body)
     : AstNode(token_pos),
       label_(label),
       initializer_(initializer),
       condition_(condition),
+      condition_preamble_(condition_preamble),
       increment_(increment),
       body_(body) {
     ASSERT(label_ != NULL);
@@ -1043,11 +1052,16 @@
   SourceLabel* label() const { return label_; }
   SequenceNode* initializer() const { return initializer_; }
   AstNode* condition() const { return condition_; }
+  AstNode* condition_preamble() const { return condition_preamble_; }
   SequenceNode* increment() const { return increment_; }
   SequenceNode* body() const { return body_; }
 
   virtual void VisitChildren(AstNodeVisitor* visitor) const {
     initializer()->Visit(visitor);
+    if (condition_preamble() != NULL) {
+      ASSERT(condition() != NULL);
+      condition_preamble()->Visit(visitor);
+    }
     if (condition() != NULL) {
       condition()->Visit(visitor);
     }
@@ -1061,6 +1075,7 @@
   SourceLabel* label_;
   SequenceNode* initializer_;
   AstNode* condition_;
+  AstNode* condition_preamble_;
   SequenceNode* increment_;
   SequenceNode* body_;
 
diff --git a/runtime/vm/ast_printer.cc b/runtime/vm/ast_printer.cc
index e363cfe..1c91ad7 100644
--- a/runtime/vm/ast_printer.cc
+++ b/runtime/vm/ast_printer.cc
@@ -45,11 +45,10 @@
 
 
 void AstPrinter::VisitReturnNode(ReturnNode* node) {
-  VisitGenericAstNode(node);
   OS::Print("(%s %s",
             node->PrettyName(),
             (node->return_type() == ReturnNode::kContinuation) ?
-                "continuation" : "");
+                "continuation " : "");
   node->VisitChildren(this);
   OS::Print(")");
 }
diff --git a/runtime/vm/ast_transformer.cc b/runtime/vm/ast_transformer.cc
index 6ef865f..452b309 100644
--- a/runtime/vm/ast_transformer.cc
+++ b/runtime/vm/ast_transformer.cc
@@ -42,6 +42,19 @@
 FOR_EACH_UNREACHABLE_NODE(DEFINE_UNREACHABLE)
 #undef DEFINE_UNREACHABLE
 
+AwaitTransformer::AwaitTransformer(SequenceNode* preamble,
+                                   const Library& library,
+                                   ParsedFunction* const parsed_function,
+                                   LocalScope* function_top)
+    : preamble_(preamble),
+      temp_cnt_(0),
+      library_(library),
+      parsed_function_(parsed_function),
+      function_top_(function_top),
+      isolate_(Isolate::Current()) {
+  ASSERT(function_top_ != NULL);
+}
+
 
 AstNode* AwaitTransformer::Transform(AstNode* expr) {
   expr->Visit(this);
@@ -55,19 +68,29 @@
       I, String::NewFormatted("%s%d", await_temp_prefix, temp_cnt_));
   const String& symbol = String::ZoneHandle(I, Symbols::New(cnt_str));
   ASSERT(!symbol.IsNull());
-  LocalVariable* await_tmp =
-      parsed_function_->await_temps_scope()->LookupVariable(symbol, false);
+  // Look up the variable through the preamble scope.
+  LocalVariable* await_tmp = preamble_->scope()->LookupVariable(symbol, false);
   if (await_tmp == NULL) {
-    await_tmp = new(I) LocalVariable(
-        Scanner::kNoSourcePos,
-        symbol,
-        Type::ZoneHandle(I, Type::DynamicType()));
-    parsed_function_->await_temps_scope()->AddVariable(await_tmp);
+    // If we need a new temp variable, we add it to the function's top scope.
+    await_tmp = new (I) LocalVariable(
+        Scanner::kNoSourcePos, symbol, Type::ZoneHandle(Type::DynamicType()));
+    function_top_->AddVariable(await_tmp);
+    // After adding it to the top scope, we can look it up from the preamble.
+    // The following call includes an ASSERT check.
+    await_tmp = GetVariableInScope(preamble_->scope(), symbol);
   }
   return await_tmp;
 }
 
 
+LocalVariable* AwaitTransformer::GetVariableInScope(LocalScope* scope,
+                                                    const String& symbol) {
+  LocalVariable* var = scope->LookupVariable(symbol, false);
+  ASSERT(var != NULL);
+  return var;
+}
+
+
 LocalVariable* AwaitTransformer::AddToPreambleNewTempVar(AstNode* node) {
   LocalVariable* tmp_var = EnsureCurrentTempVar();
   preamble_->Add(new(I) StoreLocalNode(Scanner::kNoSourcePos, tmp_var, node));
@@ -93,35 +116,62 @@
   //   :result_param = :await_temp_var_X;
   //   if (:result_param is Future) {
   //     AwaitMarker(kNewContinuationState);
-  //     :result_param.then(:async_op);
+  //     :result_param = :result_param.then(:async_op);
+  //     _asyncCatchHelper(:result_param.catchError, :async_op);
   //     return;  // (return_type() == kContinuation)
   //   }
   //   AwaitMarker(kTargetForContinuation);  // Join happens here.
   //   :saved_try_ctx_var = :await_saved_try_ctx_var_y;
   //   :await_temp_var_(X+1) = :result_param;
 
-  LocalVariable* async_op = preamble_->scope()->LookupVariable(
-      Symbols::AsyncOperation(), false);
-  ASSERT(async_op != NULL);
-  LocalVariable* result_param = preamble_->scope()->LookupVariable(
-      Symbols::AsyncOperationParam(), false);
-  ASSERT(result_param != NULL);
+  LocalVariable* async_op = GetVariableInScope(
+      preamble_->scope(), Symbols::AsyncOperation());
+  LocalVariable* result_param = GetVariableInScope(
+      preamble_->scope(), Symbols::AsyncOperationParam());
+  LocalVariable* error_param = GetVariableInScope(
+      preamble_->scope(), Symbols::AsyncOperationErrorParam());
 
   node->expr()->Visit(this);
   preamble_->Add(new(I) StoreLocalNode(
       Scanner::kNoSourcePos, result_param, result_));
   LoadLocalNode* load_result_param = new(I) LoadLocalNode(
       Scanner::kNoSourcePos, result_param);
-  SequenceNode* is_future_branch = new(I) SequenceNode(
-      Scanner::kNoSourcePos, preamble_->scope());
-  AwaitMarkerNode* await_marker =
-      new(I) AwaitMarkerNode(AwaitMarkerNode::kNewContinuationState);
-  await_marker->set_scope(preamble_->scope());
+  LocalScope* is_future_scope = ChainNewScope(preamble_->scope());
+  SequenceNode* is_future_branch = new (I) SequenceNode(
+      Scanner::kNoSourcePos, is_future_scope);
+  AwaitMarkerNode* await_marker = new (I) AwaitMarkerNode(
+      AwaitMarkerNode::kNewContinuationState);
+  await_marker->set_scope(is_future_scope);
+  GetVariableInScope(is_future_scope, Symbols::AwaitJumpVar());
+  GetVariableInScope(is_future_scope, Symbols::AwaitContextVar());
   is_future_branch->Add(await_marker);
   ArgumentListNode* args = new(I) ArgumentListNode(Scanner::kNoSourcePos);
   args->Add(new(I) LoadLocalNode(Scanner::kNoSourcePos, async_op));
-  is_future_branch->Add(new(I) InstanceCallNode(
-      Scanner::kNoSourcePos, load_result_param, Symbols::FutureThen(), args));
+  is_future_branch->Add(new (I) StoreLocalNode(
+      Scanner::kNoSourcePos,
+      result_param,
+      new(I) InstanceCallNode(
+          Scanner::kNoSourcePos,
+          load_result_param,
+          Symbols::FutureThen(),
+          args)));
+  const Library& core_lib = Library::Handle(Library::CoreLibrary());
+  const Function& async_catch_helper = Function::ZoneHandle(
+      I, core_lib.LookupFunctionAllowPrivate(Symbols::AsyncCatchHelper()));
+  ASSERT(!async_catch_helper.IsNull());
+  ArgumentListNode* catch_helper_args = new (I) ArgumentListNode(
+      Scanner::kNoSourcePos);
+  InstanceGetterNode* catch_error_getter = new (I) InstanceGetterNode(
+      Scanner::kNoSourcePos,
+      load_result_param,
+      Symbols::FutureCatchError());
+  catch_helper_args->Add(catch_error_getter);
+  catch_helper_args->Add(new (I) LoadLocalNode(
+      Scanner::kNoSourcePos, async_op));
+  is_future_branch->Add(new (I) StaticCallNode(
+      Scanner::kNoSourcePos,
+      async_catch_helper,
+      catch_helper_args));
   ReturnNode* continuation_return = new(I) ReturnNode(Scanner::kNoSourcePos);
   continuation_return->set_return_type(ReturnNode::kContinuation);
   is_future_branch->Add(continuation_return);
@@ -141,16 +191,39 @@
       NULL));
   preamble_->Add(new (I) AwaitMarkerNode(
       AwaitMarkerNode::kTargetForContinuation));
+
   // If this expression is part of a try block, also append the code for
   // restoring the saved try context that lives on the stack.
-  if (parsed_function_->saved_try_ctx() != NULL) {
+  const String& async_saved_try_ctx_name =
+      String::Handle(I, parsed_function_->async_saved_try_ctx_name());
+  if (!async_saved_try_ctx_name.IsNull()) {
+    LocalVariable* async_saved_try_ctx =
+        GetVariableInScope(preamble_->scope(), async_saved_try_ctx_name);
     preamble_->Add(new (I) StoreLocalNode(
         Scanner::kNoSourcePos,
         parsed_function_->saved_try_ctx(),
-        new (I) LoadLocalNode(
-            Scanner::kNoSourcePos, parsed_function_->async_saved_try_ctx())));
+        new (I) LoadLocalNode(Scanner::kNoSourcePos, async_saved_try_ctx)));
   }
 
+  LoadLocalNode* load_error_param = new (I) LoadLocalNode(
+      Scanner::kNoSourcePos, error_param);
+  SequenceNode* error_ne_null_branch = new (I) SequenceNode(
+      Scanner::kNoSourcePos, ChainNewScope(preamble_->scope()));
+  error_ne_null_branch->Add(new (I) ThrowNode(
+      Scanner::kNoSourcePos,
+      load_error_param,
+      NULL));
+  preamble_->Add(new (I) IfNode(
+      Scanner::kNoSourcePos,
+      new (I) ComparisonNode(
+          Scanner::kNoSourcePos,
+          Token::kNE,
+          load_error_param,
+          new (I) LiteralNode(Scanner::kNoSourcePos,
+                              Object::null_instance())),
+          error_ne_null_branch,
+          NULL));
+
   LocalVariable* result = AddToPreambleNewTempVar(new(I) LoadLocalNode(
       Scanner::kNoSourcePos, result_param));
   result_ = new(I) LoadLocalNode(Scanner::kNoSourcePos, result);
@@ -179,8 +252,8 @@
   AstNode* result = NULL;
   const Token::Kind compare_logical_op = (logical_op == Token::kAND) ?
       Token::kEQ : Token::kNE;
-  SequenceNode* eval = new(I) SequenceNode(
-      Scanner::kNoSourcePos, preamble_->scope());
+  SequenceNode* eval = new (I) SequenceNode(
+      Scanner::kNoSourcePos, ChainNewScope(preamble_->scope()));
   SequenceNode* saved_preamble = preamble_;
   preamble_ = eval;
   result = Transform(right);
@@ -199,6 +272,12 @@
 }
 
 
+LocalScope* AwaitTransformer::ChainNewScope(LocalScope* parent) {
+  return new (I) LocalScope(
+      parent, parent->function_level(), parent->loop_level());
+}
+
+
 void AwaitTransformer::VisitBinaryOpNode(BinaryOpNode* node) {
   node->left()->Visit(this);
   AstNode* new_left = result_;
@@ -263,13 +342,13 @@
 //
 void AwaitTransformer::VisitConditionalExprNode(ConditionalExprNode* node) {
   AstNode* new_condition = Transform(node->condition());
-  SequenceNode* new_true = new(I) SequenceNode(
-      Scanner::kNoSourcePos, preamble_->scope());
+  SequenceNode* new_true = new (I) SequenceNode(
+      Scanner::kNoSourcePos, ChainNewScope(preamble_->scope()));
   SequenceNode* saved_preamble = preamble_;
   preamble_ = new_true;
   AstNode* new_true_result = Transform(node->true_expr());
-  SequenceNode* new_false = new(I) SequenceNode(
-      Scanner::kNoSourcePos, preamble_->scope());
+  SequenceNode* new_false = new (I) SequenceNode(
+      Scanner::kNoSourcePos, ChainNewScope(preamble_->scope()));
   preamble_ = new_false;
   AstNode* new_false_result = Transform(node->false_expr());
   preamble_ = saved_preamble;
diff --git a/runtime/vm/ast_transformer.h b/runtime/vm/ast_transformer.h
index 6fbd82b..0ec64ee 100644
--- a/runtime/vm/ast_transformer.h
+++ b/runtime/vm/ast_transformer.h
@@ -41,18 +41,8 @@
  public:
   AwaitTransformer(SequenceNode* preamble,
                    const Library& library,
-                   ParsedFunction* const parsed_function)
-    : preamble_(preamble),
-      temp_cnt_(0),
-      library_(library),
-      parsed_function_(parsed_function),
-      isolate_(Isolate::Current()) {
-    // We later on save the continuation context and modify the jump counter
-    // from within the preamble context (in the FlowGraphBuilder). Look up the
-    // needed variables to get their corresponding aliases.
-    preamble->scope()->LookupVariable(Symbols::AwaitContextVar(), false);
-    preamble->scope()->LookupVariable(Symbols::AwaitJumpVar(), false);
-  }
+                   ParsedFunction* const parsed_function,
+                   LocalScope* function_top);
 
 #define DECLARE_VISIT(BaseName)                                                \
   virtual void Visit##BaseName##Node(BaseName##Node* node);
@@ -69,6 +59,8 @@
   AstNode* LazyTransform(const Token::Kind kind,
                          AstNode* new_left,
                          AstNode* right);
+  LocalScope* ChainNewScope(LocalScope* parent);
+  LocalVariable* GetVariableInScope(LocalScope* scope, const String& symbol);
 
   void NextTempVar() { temp_cnt_++; }
 
@@ -79,6 +71,7 @@
   AstNode* result_;
   const Library& library_;
   ParsedFunction* const parsed_function_;
+  LocalScope* function_top_;
 
   Isolate* isolate_;
 
diff --git a/runtime/vm/bigint_operations.cc b/runtime/vm/bigint_operations.cc
deleted file mode 100644
index c6566ea..0000000
--- a/runtime/vm/bigint_operations.cc
+++ /dev/null
@@ -1,1868 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-
-#include "vm/bigint_operations.h"
-
-#include "platform/assert.h"
-#include "platform/utils.h"
-
-#include "vm/double_internals.h"
-#include "vm/exceptions.h"
-#include "vm/object_store.h"
-#include "vm/zone.h"
-
-namespace dart {
-
-RawBigint* BigintOperations::NewFromSmi(const Smi& smi, Heap::Space space) {
-  intptr_t value = smi.Value();
-  if (value == 0) {
-    return Zero();
-  }
-
-  bool is_negative = (value < 0);
-  if (is_negative) {
-    value = -value;
-  }
-  // Assert that there are no overflows. Smis reserve a bit for themselves, but
-  // protect against future changes.
-  ASSERT(-Smi::kMinValue > 0);
-
-  // A single digit of a Bigint might not be sufficient to store a Smi.
-  // Count number of needed Digits.
-  intptr_t digit_count = 0;
-  intptr_t count_value = value;
-  while (count_value > 0) {
-    digit_count++;
-    count_value >>= kDigitBitSize;
-  }
-
-  // Allocate a bigint of the correct size and copy the bits.
-  const Bigint& result = Bigint::Handle(Bigint::Allocate(digit_count, space));
-  for (intptr_t i = 0; i < digit_count; i++) {
-    result.SetChunkAt(i, static_cast<Chunk>(value & kDigitMask));
-    value >>= kDigitBitSize;
-  }
-  result.SetSign(is_negative);
-  ASSERT(IsClamped(result));
-  return result.raw();
-}
-
-
-RawBigint* BigintOperations::NewFromInt64(int64_t value, Heap::Space space) {
-  bool is_negative = value < 0;
-
-  if (is_negative) {
-    value = -value;
-  }
-
-  const Bigint& result = Bigint::Handle(NewFromUint64(value, space));
-  result.SetSign(is_negative);
-
-  return result.raw();
-}
-
-
-RawBigint* BigintOperations::NewFromUint64(uint64_t value, Heap::Space space) {
-  if (value == 0) {
-    return Zero();
-  }
-  // A single digit of a Bigint might not be sufficient to store the value.
-  // Count number of needed Digits.
-  intptr_t digit_count = 0;
-  uint64_t count_value = value;
-  while (count_value > 0) {
-    digit_count++;
-    count_value >>= kDigitBitSize;
-  }
-
-  // Allocate a bigint of the correct size and copy the bits.
-  const Bigint& result = Bigint::Handle(Bigint::Allocate(digit_count, space));
-  for (intptr_t i = 0; i < digit_count; i++) {
-    result.SetChunkAt(i, static_cast<Chunk>(value & kDigitMask));
-    value >>= kDigitBitSize;
-  }
-  result.SetSign(false);
-  ASSERT(IsClamped(result));
-  return result.raw();
-}
-
-
-RawBigint* BigintOperations::NewFromCString(const char* str,
-                                            Heap::Space space) {
-  ASSERT(str != NULL);
-  if (str[0] == '\0') {
-    return Zero();
-  }
-
-  // If the string starts with '-' recursively restart the whole operation
-  // without the character and then toggle the sign.
-  // This allows multiple leading '-' (which will cancel each other out), but
-  // we have added an assert, to make sure that the returned result of the
-  // recursive call is not negative.
-  // We don't catch leading '-'s for zero. Ex: "--0", or "---".
-  if (str[0] == '-') {
-    const Bigint& result = Bigint::Handle(NewFromCString(&str[1], space));
-    result.ToggleSign();
-    ASSERT(result.IsZero() || result.IsNegative());
-    ASSERT(IsClamped(result));
-    return result.raw();
-  }
-
-  // No overflow check needed since overflowing str_length implies that we take
-  // the branch to FromDecimalCString() which contains a check itself.
-  const intptr_t str_length = strlen(str);
-  if ((str_length > 2) &&
-      (str[0] == '0') &&
-      ((str[1] == 'x') || (str[1] == 'X'))) {
-    const Bigint& result = Bigint::Handle(FromHexCString(&str[2], space));
-    ASSERT(IsClamped(result));
-    return result.raw();
-  } else {
-    return FromDecimalCString(str, space);
-  }
-}
-
-
-intptr_t BigintOperations::ComputeChunkLength(const char* hex_string) {
-  ASSERT(kDigitBitSize % 4 == 0);
-  const intptr_t hex_length = strlen(hex_string);
-  if (hex_length < 0) {
-    FATAL("Fatal error in BigintOperations::ComputeChunkLength: "
-          "string too long");
-  }
-  // Round up.
-  intptr_t bigint_length = ((hex_length - 1) / kHexCharsPerDigit) + 1;
-  return bigint_length;
-}
-
-
-RawBigint* BigintOperations::FromHexCString(const char* hex_string,
-                                            Heap::Space space) {
-  // If the string starts with '-' recursively restart the whole operation
-  // without the character and then toggle the sign.
-  // This allows multiple leading '-' (which will cancel each other out), but
-  // we have added an assert, to make sure that the returned result of the
-  // recursive call is not negative.
-  // We don't catch leading '-'s for zero. Ex: "--0", or "---".
-  if (hex_string[0] == '-') {
-    const Bigint& value = Bigint::Handle(FromHexCString(&hex_string[1], space));
-    value.ToggleSign();
-    ASSERT(value.IsZero() || value.IsNegative());
-    ASSERT(IsClamped(value));
-    return value.raw();
-  }
-  intptr_t bigint_length = ComputeChunkLength(hex_string);
-  const Bigint& result = Bigint::Handle(Bigint::Allocate(bigint_length, space));
-  FromHexCString(hex_string, result);
-  return result.raw();
-}
-
-
-RawBigint* BigintOperations::FromDecimalCString(const char* str,
-                                                Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  // Read 8 digits a time. 10^8 < 2^27.
-  const int kDigitsPerIteration = 8;
-  const Chunk kTenMultiplier = 100000000;
-  ASSERT(kDigitBitSize >= 27);
-
-  const intptr_t str_length = strlen(str);
-  if (str_length < 0) {
-    FATAL("Fatal error in BigintOperations::FromDecimalCString: "
-          "string too long");
-  }
-  intptr_t str_pos = 0;
-
-  // Read first digit separately. This avoids a multiplication and addition.
-  // The first digit might also not have kDigitsPerIteration decimal digits.
-  intptr_t first_digit_decimal_digits = str_length % kDigitsPerIteration;
-  Chunk digit = 0;
-  for (intptr_t i = 0; i < first_digit_decimal_digits; i++) {
-    char c = str[str_pos++];
-    ASSERT(('0' <= c) && (c <= '9'));
-    digit = digit * 10 + c - '0';
-  }
-  Bigint& result = Bigint::Handle(Bigint::Allocate(1));
-  result.SetChunkAt(0, digit);
-  Clamp(result);  // Multiplication requires the inputs to be clamped.
-
-  // Read kDigitsPerIteration at a time, and store it in 'increment'.
-  // Then multiply the temporary result by 10^kDigitsPerIteration and add
-  // 'increment' to the new result.
-  const Bigint& increment = Bigint::Handle(Bigint::Allocate(1));
-  while (str_pos < str_length - 1) {
-    HANDLESCOPE(isolate);
-    Chunk digit = 0;
-    for (intptr_t i = 0; i < kDigitsPerIteration; i++) {
-      char c = str[str_pos++];
-      ASSERT(('0' <= c) && (c <= '9'));
-      digit = digit * 10 + c - '0';
-    }
-    result = MultiplyWithDigit(result, kTenMultiplier);
-    if (digit != 0) {
-      increment.SetChunkAt(0, digit);
-      result = Add(result, increment);
-    }
-  }
-  Clamp(result);
-  if ((space == Heap::kOld) && !result.IsOld()) {
-    result ^= Object::Clone(result, Heap::kOld);
-  }
-  return result.raw();
-}
-
-
-RawBigint* BigintOperations::NewFromDouble(double d, Heap::Space space) {
-  if ((-1.0 < d) && (d < 1.0)) {
-    // Shortcut for small numbers. Also makes the right-shift below
-    // well specified.
-    Smi& zero = Smi::Handle(Smi::New(0));
-    return NewFromSmi(zero, space);
-  }
-  DoubleInternals internals = DoubleInternals(d);
-  if (internals.IsSpecial()) {
-    const Array& exception_arguments = Array::Handle(Array::New(1));
-    exception_arguments.SetAt(
-        0,
-        PassiveObject::Handle(String::New("BigintOperations::NewFromDouble")));
-    Exceptions::ThrowByType(Exceptions::kInternalError, exception_arguments);
-  }
-  uint64_t significand = internals.Significand();
-  intptr_t exponent = internals.Exponent();
-  intptr_t sign = internals.Sign();
-  if (exponent <= 0) {
-    significand >>= -exponent;
-    exponent = 0;
-  } else if (exponent <= 10) {
-    // A double significand has at most 53 bits. The following shift will
-    // hence not overflow, and yield an integer of at most 63 bits.
-    significand <<= exponent;
-    exponent = 0;
-  }
-  // A significand has at most 63 bits (after the shift above).
-  // The cast to int64_t is hence safe.
-  const Bigint& result =
-      Bigint::Handle(NewFromInt64(static_cast<int64_t>(significand), space));
-  result.SetSign(sign < 0);
-  if (exponent > 0) {
-    return ShiftLeft(result, exponent);
-  } else {
-    return result.raw();
-  }
-}
-
-
-const char* BigintOperations::ToHexCString(intptr_t length,
-                                           bool is_negative,
-                                           void* data,
-                                           uword (*allocator)(intptr_t size)) {
-  NoGCScope no_gc;
-
-  ASSERT(kDigitBitSize % 4 == 0);
-
-  // Conservative maximum chunk length.
-  const intptr_t kMaxChunkLen =
-      (kIntptrMax - 2 /* 0x */
-                  - 1 /* trailing '\0' */
-                  - 1 /* leading '-' */) / kHexCharsPerDigit;
-  const intptr_t chunk_length = length;
-  // Conservative check assuming leading bigint-digit also takes up
-  // kHexCharsPerDigit.
-  if (chunk_length > kMaxChunkLen) {
-    FATAL("Fatal error in BigintOperations::ToHexCString: string too long");
-  }
-  Chunk* chunk_data = reinterpret_cast<Chunk*>(data);
-  if (length == 0) {
-    const char* zero = "0x0";
-    const intptr_t kLength = strlen(zero);
-    char* result = reinterpret_cast<char*>(allocator(kLength + 1));
-    ASSERT(result != NULL);
-    memmove(result, zero, kLength);
-    result[kLength] = '\0';
-    return result;
-  }
-  ASSERT(chunk_data != NULL);
-
-  // Compute the number of hex-digits that are needed to represent the
-  // leading bigint-digit. All other digits need exactly kHexCharsPerDigit
-  // characters.
-  intptr_t leading_hex_digits = 0;
-  Chunk leading_digit = chunk_data[chunk_length - 1];
-  while (leading_digit != 0) {
-    leading_hex_digits++;
-    leading_digit >>= 4;
-  }
-  // Sum up the space that is needed for the string-representation.
-  intptr_t required_size = 0;
-  if (is_negative) {
-    required_size++;  // For the leading "-".
-  }
-  required_size += 2;  // For the "0x".
-  required_size += leading_hex_digits;
-  required_size += (chunk_length - 1) * kHexCharsPerDigit;
-  required_size++;  // For the trailing '\0'.
-  char* result = reinterpret_cast<char*>(allocator(required_size));
-  // Print the number into the string.
-  // Start from the last position.
-  intptr_t pos = required_size - 1;
-  result[pos--] = '\0';
-  for (intptr_t i = 0; i < (chunk_length - 1); i++) {
-    // Print all non-leading characters (which are printed with
-    // kHexCharsPerDigit characters.
-    Chunk digit = chunk_data[i];
-    for (intptr_t j = 0; j < kHexCharsPerDigit; j++) {
-      result[pos--] = Utils::IntToHexDigit(static_cast<int>(digit & 0xF));
-      digit >>= 4;
-    }
-  }
-  // Print the leading digit.
-  leading_digit = chunk_data[chunk_length - 1];
-  while (leading_digit != 0) {
-    result[pos--] = Utils::IntToHexDigit(static_cast<int>(leading_digit & 0xF));
-    leading_digit >>= 4;
-  }
-  result[pos--] = 'x';
-  result[pos--] = '0';
-  if (is_negative) {
-    result[pos--] = '-';
-  }
-  ASSERT(pos == -1);
-  return result;
-}
-
-
-const char* BigintOperations::ToHexCString(const Bigint& bigint,
-                                           uword (*allocator)(intptr_t size)) {
-  NoGCScope no_gc;
-
-  intptr_t length = bigint.Length();
-  return ToHexCString(length,
-                      bigint.IsNegative(),
-                      length ? bigint.ChunkAddr(0) : NULL,
-                      allocator);
-}
-
-
-const char* BigintOperations::ToDecimalCString(
-    const Bigint& bigint, uword (*allocator)(intptr_t size)) {
-  // log10(2) ~= 0.30102999566398114.
-  const intptr_t kLog2Dividend = 30103;
-  const intptr_t kLog2Divisor = 100000;
-  // We remove a small constant for rounding imprecision, the \0 character and
-  // the negative sign.
-  const intptr_t kMaxAllowedDigitLength =
-      (kIntptrMax - 10) / kLog2Dividend / kDigitBitSize * kLog2Divisor;
-
-  const intptr_t length = bigint.Length();
-  Isolate* isolate = Isolate::Current();
-  if (length >= kMaxAllowedDigitLength) {
-    // Use the preallocated out of memory exception to avoid calling
-    // into dart code or allocating any code.
-    const Instance& exception =
-        Instance::Handle(isolate->object_store()->out_of_memory());
-    Exceptions::Throw(isolate, exception);
-    UNREACHABLE();
-  }
-
-  // Approximate the size of the resulting string. We prefer overestimating
-  // to not allocating enough.
-  int64_t bit_length = length * kDigitBitSize;
-  ASSERT(bit_length > length || length == 0);
-  int64_t decimal_length = (bit_length * kLog2Dividend / kLog2Divisor) + 1;
-  // Add one byte for the trailing \0 character.
-  int64_t required_size = decimal_length + 1;
-  if (bigint.IsNegative()) {
-    required_size++;
-  }
-  ASSERT(required_size == static_cast<intptr_t>(required_size));
-  // We will fill the result in the inverse order and then exchange at the end.
-  char* result =
-      reinterpret_cast<char*>(allocator(static_cast<intptr_t>(required_size)));
-  ASSERT(result != NULL);
-  intptr_t result_pos = 0;
-
-  // We divide the input into pieces of ~27 bits which can be efficiently
-  // handled.
-  const intptr_t kChunkDivisor = 100000000;
-  const int kChunkDigits = 8;
-  ASSERT(pow(10.0, kChunkDigits) == kChunkDivisor);
-  ASSERT(static_cast<Chunk>(kChunkDivisor) < kDigitMaxValue);
-  ASSERT(Smi::IsValid(kChunkDivisor));
-  const Chunk divisor = static_cast<Chunk>(kChunkDivisor);
-
-  // Rest contains the remaining bigint that needs to be printed.
-  const Bigint& rest = Bigint::Handle(Copy(bigint));
-  while (!rest.IsZero()) {
-    Chunk remainder = InplaceUnsignedDivideRemainderDigit(rest, divisor);
-    intptr_t part = static_cast<intptr_t>(remainder);
-    for (int i = 0; i < kChunkDigits; i++) {
-      result[result_pos++] = '0' + (part % 10);
-      part /= 10;
-    }
-    ASSERT(part == 0);
-  }
-  // Add a leading zero, so that we have at least one digit.
-  result[result_pos++] = '0';
-  // Move the resulting position back until we don't have any zeroes anymore
-  // or we reach the first digit. This is done so that we can remove all
-  // redundant leading zeroes.
-  while (result_pos > 1 && result[result_pos - 1] == '0') {
-    result_pos--;
-  }
-  if (bigint.IsNegative()) {
-    result[result_pos++] = '-';
-  }
-  // Reverse the string.
-  int i = 0;
-  int j = result_pos - 1;
-  while (i < j) {
-    char tmp = result[i];
-    result[i] = result[j];
-    result[j] = tmp;
-    i++;
-    j--;
-  }
-  ASSERT(result_pos >= 0);
-  result[result_pos] = '\0';
-  return result;
-}
-
-
-bool BigintOperations::FitsIntoSmi(const Bigint& bigint) {
-  intptr_t bigint_length = bigint.Length();
-  if (bigint_length == 0) {
-    return true;
-  }
-  if ((bigint_length == 1) &&
-      (static_cast<size_t>(kDigitBitSize) <
-       (sizeof(intptr_t) * kBitsPerByte))) {
-    return true;
-  }
-
-  uintptr_t limit;
-  if (bigint.IsNegative()) {
-    limit = static_cast<uintptr_t>(-Smi::kMinValue);
-  } else {
-    limit = static_cast<uintptr_t>(Smi::kMaxValue);
-  }
-  bool bigint_is_greater = false;
-  // Consume the least-significant digits of the bigint.
-  // If bigint_is_greater is set, then the processed sub-part of the bigint is
-  // greater than the corresponding part of the limit.
-  for (intptr_t i = 0; i < bigint_length - 1; i++) {
-    Chunk limit_digit = static_cast<Chunk>(limit & kDigitMask);
-    Chunk bigint_digit = bigint.GetChunkAt(i);
-    if (limit_digit < bigint_digit) {
-      bigint_is_greater = true;
-    } else if (limit_digit > bigint_digit) {
-      bigint_is_greater = false;
-    }  // else don't change the boolean.
-    limit >>= kDigitBitSize;
-
-    // Bail out if the bigint is definitely too big.
-    if (limit == 0) {
-      return false;
-    }
-  }
-  Chunk most_significant_digit = bigint.GetChunkAt(bigint_length - 1);
-  if (limit > most_significant_digit) {
-    return true;
-  }
-  if (limit < most_significant_digit) {
-    return false;
-  }
-  return !bigint_is_greater;
-}
-
-
-RawSmi* BigintOperations::ToSmi(const Bigint& bigint) {
-  ASSERT(FitsIntoSmi(bigint));
-  intptr_t value = 0;
-  for (intptr_t i = bigint.Length() - 1; i >= 0; i--) {
-    value <<= kDigitBitSize;
-    value += static_cast<intptr_t>(bigint.GetChunkAt(i));
-  }
-  if (bigint.IsNegative()) {
-    value = -value;
-  }
-  return Smi::New(value);
-}
-
-
-static double Uint64ToDouble(uint64_t x) {
-#if _WIN64
-  // For static_cast<double>(x) MSVC x64 generates
-  //
-  //    cvtsi2sd xmm0, rax
-  //    test  rax, rax
-  //    jns done
-  //    addsd xmm0, static_cast<double>(2^64)
-  //  done:
-  //
-  // while GCC -m64 generates
-  //
-  //    test rax, rax
-  //    js negative
-  //    cvtsi2sd xmm0, rax
-  //    jmp done
-  //  negative:
-  //    mov rdx, rax
-  //    shr rdx, 1
-  //    and eax, 0x1
-  //    or rdx, rax
-  //    cvtsi2sd xmm0, rdx
-  //    addsd xmm0, xmm0
-  //  done:
-  //
-  // which results in a different rounding.
-  //
-  // For consistency between platforms fallback to GCC style converstion
-  // on Win64.
-  //
-  const int64_t y = static_cast<int64_t>(x);
-  if (y > 0) {
-    return static_cast<double>(y);
-  } else {
-    const double half = static_cast<double>(
-        static_cast<int64_t>(x >> 1) | (y & 1));
-    return half + half;
-  }
-#else
-  return static_cast<double>(x);
-#endif
-}
-
-
-RawDouble* BigintOperations::ToDouble(const Bigint& bigint) {
-  ASSERT(IsClamped(bigint));
-  if (bigint.IsZero()) {
-    return Double::New(0.0);
-  }
-  if (AbsFitsIntoUint64(bigint)) {
-    double absolute_value = Uint64ToDouble(AbsToUint64(bigint));
-    double result = bigint.IsNegative() ? -absolute_value : absolute_value;
-    return Double::New(result);
-  }
-
-  static const int kPhysicalSignificandSize = 52;
-  // The significand size has an additional hidden bit.
-  static const int kSignificandSize = kPhysicalSignificandSize + 1;
-  static const int kExponentBias = 0x3FF + kPhysicalSignificandSize;
-  static const int kMaxExponent = 0x7FF - kExponentBias;
-  static const uint64_t kOne64 = 1;
-  static const uint64_t kInfinityBits =
-      DART_2PART_UINT64_C(0x7FF00000, 00000000);
-
-  // A double is composed of an exponent e and a significand s. Its value equals
-  // s * 2^e. The significand has 53 bits of which the first one must always be
-  // 1 (at least for then numbers we are working with here) and is therefore
-  // omitted. The physical size of the significand is thus 52 bits.
-  // The exponent has 11 bits and is biased by 0x3FF + 52. For example an
-  // exponent e = 10 is written as 0x3FF + 52 + 10 (in the 11 bits that are
-  // reserved for the exponent).
-  // When converting the given bignum to a double we have to pay attention to
-  // the rounding. In particular we have to decide which double to pick if an
-  // input lies exactly between two doubles. As usual with double operations
-  // we pick the double with an even significand in such cases.
-  //
-  // General approach of this algorithm: Get 54 bits (one more than the
-  // significand size) of the bigint. If the last bit is then 1, then (without
-  // knowledge of the remaining bits) we could have a half-way number.
-  // If the second-to-last bit is odd then we know that we have to round up:
-  // if the remaining bits are not zero then the input lies closer to the higher
-  // double. If the remaining bits are zero then we have a half-way case and
-  // we need to round up too (rounding to the even double).
-  // If the second-to-last bit is even then we need to look at the remaining
-  // bits to determine if any of them is not zero. If that's the case then the
-  // number lies closer to the next-higher double. Otherwise we round the
-  // half-way case down to even.
-
-  intptr_t length = bigint.Length();
-  if (((length - 1) * kDigitBitSize) > (kMaxExponent + kSignificandSize)) {
-    // Does not fit into a double.
-    double infinity = bit_cast<double>(kInfinityBits);
-    return Double::New(bigint.IsNegative() ? -infinity : infinity);
-  }
-
-
-  intptr_t digit_index = length - 1;
-  // In order to round correctly we need to look at half-way cases. Therefore we
-  // get kSignificandSize + 1 bits. If the last bit is 1 then we have to look
-  // at the remaining bits to know if we have to round up.
-  int needed_bits = kSignificandSize + 1;
-  ASSERT((kDigitBitSize < needed_bits) && (2 * kDigitBitSize >= needed_bits));
-  bool discarded_bits_were_zero = true;
-
-  Chunk firstDigit = bigint.GetChunkAt(digit_index--);
-  uint64_t twice_significand_floor = firstDigit;
-  intptr_t twice_significant_exponent = (digit_index + 1) * kDigitBitSize;
-  needed_bits -= CountBits(firstDigit);
-
-  if (needed_bits >= kDigitBitSize) {
-    twice_significand_floor <<= kDigitBitSize;
-    twice_significand_floor |= bigint.GetChunkAt(digit_index--);
-    twice_significant_exponent -= kDigitBitSize;
-    needed_bits -= kDigitBitSize;
-  }
-  if (needed_bits > 0) {
-    ASSERT(needed_bits <= kDigitBitSize);
-    Chunk digit = bigint.GetChunkAt(digit_index--);
-    int discarded_bits_count = kDigitBitSize - needed_bits;
-    twice_significand_floor <<= needed_bits;
-    twice_significand_floor |= digit >> discarded_bits_count;
-    twice_significant_exponent -= needed_bits;
-    uint64_t discarded_bits_mask = (kOne64 << discarded_bits_count) - 1;
-    discarded_bits_were_zero = ((digit & discarded_bits_mask) == 0);
-  }
-  ASSERT((twice_significand_floor >> kSignificandSize) == 1);
-
-  // We might need to round up the significand later.
-  uint64_t significand = twice_significand_floor >> 1;
-  intptr_t exponent = twice_significant_exponent + 1;
-
-  if (exponent >= kMaxExponent) {
-    // Infinity.
-    // Does not fit into a double.
-    double infinity = bit_cast<double>(kInfinityBits);
-    return Double::New(bigint.IsNegative() ? -infinity : infinity);
-  }
-
-  if ((twice_significand_floor & 1) == 1) {
-    bool round_up = false;
-
-    if ((significand & 1) != 0 || !discarded_bits_were_zero) {
-      // Even if the remaining bits are zero we still need to round up since we
-      // want to round to even for half-way cases.
-      round_up = true;
-    } else {
-      // Could be a half-way case. See if the remaining bits are non-zero.
-      for (intptr_t i = 0; i <= digit_index; i++) {
-        if (bigint.GetChunkAt(i) != 0) {
-          round_up = true;
-          break;
-        }
-      }
-    }
-
-    if (round_up) {
-      significand++;
-      // It might be that we just went from 53 bits to 54 bits.
-      // Example: After adding 1 to 1FFF..FF (with 53 bits set to 1) we have
-      // 2000..00 (= 2 ^ 54). When adding the exponent and significand together
-      // this will increase the exponent by 1 which is exactly what we want.
-    }
-  }
-
-  ASSERT((significand >> (kSignificandSize - 1)) == 1
-         || significand == kOne64 << kSignificandSize);
-  uint64_t biased_exponent = exponent + kExponentBias;
-  // The significand still has the hidden bit. We simply decrement the biased
-  // exponent by one instead of playing around with the significand.
-  biased_exponent--;
-  // Note that we must use the plus operator instead of bit-or.
-  uint64_t double_bits =
-      (biased_exponent << kPhysicalSignificandSize) + significand;
-
-  double value = bit_cast<double>(double_bits);
-  if (bigint.IsNegative()) {
-    value = -value;
-  }
-  return Double::New(value);
-}
-
-
-bool BigintOperations::FitsIntoInt64(const Bigint& bigint) {
-  intptr_t bigint_length = bigint.Length();
-  if (bigint_length == 0) {
-    return true;
-  }
-  if ((bigint_length < 3) &&
-      (static_cast<size_t>(kDigitBitSize) <
-       (sizeof(intptr_t) * kBitsPerByte))) {
-    return true;
-  }
-
-  uint64_t limit;
-  if (bigint.IsNegative()) {
-    limit = static_cast<uint64_t>(Mint::kMinValue);
-  } else {
-    limit = static_cast<uint64_t>(Mint::kMaxValue);
-  }
-  bool bigint_is_greater = false;
-  // Consume the least-significant digits of the bigint.
-  // If bigint_is_greater is set, then the processed sub-part of the bigint is
-  // greater than the corresponding part of the limit.
-  for (intptr_t i = 0; i < bigint_length - 1; i++) {
-    Chunk limit_digit = static_cast<Chunk>(limit & kDigitMask);
-    Chunk bigint_digit = bigint.GetChunkAt(i);
-    if (limit_digit < bigint_digit) {
-      bigint_is_greater = true;
-    } else if (limit_digit > bigint_digit) {
-      bigint_is_greater = false;
-    }  // else don't change the boolean.
-    limit >>= kDigitBitSize;
-
-    // Bail out if the bigint is definitely too big.
-    if (limit == 0) {
-      return false;
-    }
-  }
-  Chunk most_significant_digit = bigint.GetChunkAt(bigint_length - 1);
-  if (limit > most_significant_digit) {
-    return true;
-  }
-  if (limit < most_significant_digit) {
-    return false;
-  }
-  return !bigint_is_greater;
-}
-
-
-uint64_t BigintOperations::AbsToUint64(const Bigint& bigint) {
-  ASSERT(AbsFitsIntoUint64(bigint));
-  uint64_t value = 0;
-  for (intptr_t i = bigint.Length() - 1; i >= 0; i--) {
-    value <<= kDigitBitSize;
-    value += static_cast<intptr_t>(bigint.GetChunkAt(i));
-  }
-  return value;
-}
-
-
-int64_t BigintOperations::ToInt64(const Bigint& bigint) {
-  if (bigint.IsZero()) {
-    return 0;
-  }
-  ASSERT(FitsIntoInt64(bigint));
-  int64_t value = AbsToUint64(bigint);
-  if (bigint.IsNegative()) {
-    value = -value;
-  }
-  return value;
-}
-
-
-uint32_t BigintOperations::TruncateToUint32(const Bigint& bigint) {
-  uint32_t value = 0;
-  for (intptr_t i = bigint.Length() - 1; i >= 0; i--) {
-    value <<= kDigitBitSize;
-    value += static_cast<uint32_t>(bigint.GetChunkAt(i));
-  }
-  return value;
-}
-
-
-bool BigintOperations::AbsFitsIntoUint64(const Bigint& bigint) {
-  if (bigint.IsZero()) {
-    return true;
-  }
-  intptr_t b_length = bigint.Length();
-  intptr_t num_bits = CountBits(bigint.GetChunkAt(b_length - 1));
-  num_bits += (kDigitBitSize * (b_length - 1));
-  if (num_bits > 64) return false;
-  return true;
-}
-
-
-bool BigintOperations::FitsIntoUint64(const Bigint& bigint) {
-  if (bigint.IsNegative()) return false;
-  return AbsFitsIntoUint64(bigint);
-}
-
-
-uint64_t BigintOperations::ToUint64(const Bigint& bigint) {
-  ASSERT(FitsIntoUint64(bigint));
-  return AbsToUint64(bigint);
-}
-
-
-RawBigint* BigintOperations::Multiply(const Bigint& a, const Bigint& b) {
-  ASSERT(IsClamped(a));
-  ASSERT(IsClamped(b));
-
-  intptr_t a_length = a.Length();
-  intptr_t b_length = b.Length();
-  intptr_t result_length = a_length + b_length;
-  const Bigint& result = Bigint::Handle(Bigint::Allocate(result_length));
-
-  if (a.IsNegative() != b.IsNegative()) {
-    result.ToggleSign();
-  }
-
-  // Comba multiplication: compute each column separately.
-  // Example: r = a2a1a0 * b2b1b0.
-  //    r =  1    * a0b0 +
-  //        10    * (a1b0 + a0b1) +
-  //        100   * (a2b0 + a1b1 + a0b2) +
-  //        1000  * (a2b1 + a1b2) +
-  //        10000 * a2b2
-  //
-  // Each column will be accumulated in an integer of type DoubleChunk. We must
-  // guarantee that the column-sum will not overflow.  We achieve this by
-  // 'blocking' the sum into overflow-free sums followed by propagating the
-  // overflow.
-  //
-  // Each bigint digit fits in kDigitBitSize bits.
-  // Each product fits in 2*kDigitBitSize bits.
-  // The accumulator is 8 * sizeof(DoubleChunk) == 2*kDigitBitSize + kCarryBits.
-  //
-  // Each time we add a product to the accumulator it could carry one bit into
-  // the carry bits, supporting kBlockSize = 2^kCarryBits - 1 addition
-  // operations before the DoubleChunk overflows.
-  //
-  // At the end of the column sum and after each batch of kBlockSize additions
-  // the high kCarryBits+kDigitBitSize of accumulator are flushed to
-  // accumulator_overflow.
-  //
-  // Diagramatically, using one char per 4 bits:
-  //
-  //  0aaaaaaa * 0bbbbbbb  ->  00pppppppppppppp   product of 2 digits
-  //                                   |
-  //                                   +          ...added to
-  //                                   v
-  //                           ccSSSSSSSsssssss   accumulator
-  //                                              ...flushed to
-  //                           000000000sssssss   accumulator
-  //                    vvvvvvvvvVVVVVVV          accumulator_overflow
-  //
-  //  'sssssss' becomes the column sum an overflow is carried to next column:
-  //
-  //                           000000000VVVVVVV   accumulator
-  //                    0000000vvvvvvvvv          accumulator_overflow
-  //
-  // accumulator_overflow supports 2^(kDigitBitSize + kCarryBits) additions of
-  // products.
-  //
-  // Since the bottom (kDigitBitSize + kCarryBits) bits of accumulator_overflow
-  // are initialized from the previous column, that uses up the capacity to
-  // absorb 2^kCarryBits additions.  The accumulator_overflow can overflow if
-  // the column has more than 2^(kDigitBitSize + kCarryBits) - 2^kCarryBits
-  // elements With current configuration that is 2^36-2^8 elements.  That is too
-  // high to happen in practice.  Comba multiplication is O(N^2) so overflow
-  // won't happen during a human lifespan.
-
-  const intptr_t kCarryBits = 8 * sizeof(DoubleChunk) - 2 * kDigitBitSize;
-  const intptr_t kBlockSize = (1 << kCarryBits) - 1;
-
-  DoubleChunk accumulator = 0;  // Accumulates the result of one column.
-  DoubleChunk accumulator_overflow = 0;
-  for (intptr_t i = 0; i < result_length; i++) {
-    // Example: r = a2a1a0 * b2b1b0.
-    //   For i == 0, compute a0b0.
-    //       i == 1,         a1b0 + a0b1 + overflow from i == 0.
-    //       i == 2,         a2b0 + a1b1 + a0b2 + overflow from i == 1.
-    //       ...
-    // The indices into a and b are such that their sum equals i.
-    intptr_t a_index = Utils::Minimum(a_length - 1, i);
-    intptr_t b_index = i - a_index;
-    ASSERT(a_index + b_index == i);
-
-    // Instead of testing for a_index >= 0 && b_index < b_length we compute the
-    // number of iterations first.
-    intptr_t iterations = Utils::Minimum(b_length - b_index, a_index + 1);
-
-    // For large products we need extra bit for the overflow.  The sum is broken
-    // into blocks to avoid dealing with the overflow on each iteration.
-    for (intptr_t j_block = 0; j_block < iterations; j_block += kBlockSize) {
-      intptr_t j_end = Utils::Minimum(j_block + kBlockSize, iterations);
-      for (intptr_t j = j_block; j < j_end; j++) {
-        DoubleChunk chunk_a = a.GetChunkAt(a_index);
-        DoubleChunk chunk_b = b.GetChunkAt(b_index);
-        accumulator += chunk_a * chunk_b;
-        a_index--;
-        b_index++;
-      }
-      accumulator_overflow += (accumulator >> kDigitBitSize);
-      accumulator &= kDigitMask;
-    }
-    result.SetChunkAt(i, static_cast<Chunk>(accumulator));
-    // Overflow becomes the initial accumulator for the next column.
-    accumulator = accumulator_overflow & kDigitMask;
-    // And the overflow from the overflow becomes the new overflow.
-    accumulator_overflow = (accumulator_overflow >> kDigitBitSize);
-  }
-  ASSERT(accumulator == 0);
-  ASSERT(accumulator_overflow == 0);
-
-  Clamp(result);
-  return result.raw();
-}
-
-
-RawBigint* BigintOperations::Divide(const Bigint& a, const Bigint& b) {
-  Bigint& quotient = Bigint::Handle();
-  Bigint& remainder = Bigint::Handle();
-  DivideRemainder(a, b, &quotient, &remainder);
-  return quotient.raw();
-}
-
-
-RawBigint* BigintOperations::Modulo(const Bigint& a, const Bigint& b) {
-  Bigint& quotient = Bigint::Handle();
-  Bigint& remainder = Bigint::Handle();
-  DivideRemainder(a, b, &quotient, &remainder);
-  // Emulating code in Integer::ArithmeticOp (Euclidian modulo).
-  if (remainder.IsNegative()) {
-    if (b.IsNegative()) {
-      return BigintOperations::Subtract(remainder, b);
-    } else {
-      return BigintOperations::Add(remainder, b);
-    }
-  }
-  return remainder.raw();
-}
-
-
-RawBigint* BigintOperations::Remainder(const Bigint& a, const Bigint& b) {
-  Bigint& quotient = Bigint::Handle();
-  Bigint& remainder = Bigint::Handle();
-  DivideRemainder(a, b, &quotient, &remainder);
-  return remainder.raw();
-}
-
-
-RawBigint* BigintOperations::ShiftLeft(const Bigint& bigint, intptr_t amount) {
-  ASSERT(IsClamped(bigint));
-  ASSERT(amount >= 0);
-  intptr_t bigint_length = bigint.Length();
-  if (bigint.IsZero()) {
-    return Zero();
-  }
-  // TODO(floitsch): can we reuse the input?
-  if (amount == 0) {
-    return Copy(bigint);
-  }
-  intptr_t digit_shift = amount / kDigitBitSize;
-  intptr_t bit_shift = amount % kDigitBitSize;
-  if (bit_shift == 0) {
-    const Bigint& result =
-        Bigint::Handle(Bigint::Allocate(bigint_length + digit_shift));
-    for (intptr_t i = 0; i < digit_shift; i++) {
-      result.SetChunkAt(i, 0);
-    }
-    for (intptr_t i = 0; i < bigint_length; i++) {
-      result.SetChunkAt(i + digit_shift, bigint.GetChunkAt(i));
-    }
-    if (bigint.IsNegative()) {
-      result.ToggleSign();
-    }
-    return result.raw();
-  } else {
-    const Bigint& result =
-        Bigint::Handle(Bigint::Allocate(bigint_length + digit_shift + 1));
-    for (intptr_t i = 0; i < digit_shift; i++) {
-      result.SetChunkAt(i, 0);
-    }
-    Chunk carry = 0;
-    for (intptr_t i = 0; i < bigint_length; i++) {
-      Chunk digit = bigint.GetChunkAt(i);
-      Chunk shifted_digit = ((digit << bit_shift) & kDigitMask) + carry;
-      result.SetChunkAt(i + digit_shift, shifted_digit);
-      carry = digit >> (kDigitBitSize - bit_shift);
-    }
-    result.SetChunkAt(bigint_length + digit_shift, carry);
-    if (bigint.IsNegative()) {
-      result.ToggleSign();
-    }
-    Clamp(result);
-    return result.raw();
-  }
-}
-
-
-RawBigint* BigintOperations::ShiftRight(const Bigint& bigint, intptr_t amount) {
-  ASSERT(IsClamped(bigint));
-  ASSERT(amount >= 0);
-  intptr_t bigint_length = bigint.Length();
-  if (bigint.IsZero()) {
-    return Zero();
-  }
-  // TODO(floitsch): can we reuse the input?
-  if (amount == 0) {
-    return Copy(bigint);
-  }
-  intptr_t digit_shift = amount / kDigitBitSize;
-  intptr_t bit_shift = amount % kDigitBitSize;
-  if (digit_shift >= bigint_length) {
-    return bigint.IsNegative() ? MinusOne() : Zero();
-  }
-
-  const Bigint& result =
-      Bigint::Handle(Bigint::Allocate(bigint_length - digit_shift));
-  if (bit_shift == 0) {
-    for (intptr_t i = 0; i < bigint_length - digit_shift; i++) {
-      result.SetChunkAt(i, bigint.GetChunkAt(i + digit_shift));
-    }
-  } else {
-    Chunk carry = 0;
-    for (intptr_t i = bigint_length - 1; i >= digit_shift; i--) {
-      Chunk digit = bigint.GetChunkAt(i);
-      Chunk shifted_digit = (digit >> bit_shift) + carry;
-      result.SetChunkAt(i - digit_shift, shifted_digit);
-      carry = (digit << (kDigitBitSize - bit_shift)) & kDigitMask;
-    }
-    Clamp(result);
-  }
-
-  if (bigint.IsNegative()) {
-    result.ToggleSign();
-    // If the input is negative then the result needs to be rounded down.
-    // Example: -5 >> 2 => -2
-    bool needs_rounding = false;
-    for (intptr_t i = 0; i < digit_shift; i++) {
-      if (bigint.GetChunkAt(i) != 0) {
-        needs_rounding = true;
-        break;
-      }
-    }
-    if (!needs_rounding && (bit_shift > 0)) {
-      Chunk digit = bigint.GetChunkAt(digit_shift);
-      needs_rounding = (digit << (kChunkBitSize - bit_shift)) != 0;
-    }
-    if (needs_rounding) {
-      Bigint& one = Bigint::Handle(One());
-      return Subtract(result, one);
-    }
-  }
-
-  return result.raw();
-}
-
-
-RawBigint* BigintOperations::BitAnd(const Bigint& a, const Bigint& b) {
-  ASSERT(IsClamped(a));
-  ASSERT(IsClamped(b));
-
-  if (a.IsZero() || b.IsZero()) {
-    return Zero();
-  }
-  if (a.IsNegative() && !b.IsNegative()) {
-    return BitAnd(b, a);
-  }
-  if ((a.IsNegative() == b.IsNegative()) && (a.Length() < b.Length())) {
-    return BitAnd(b, a);
-  }
-
-  intptr_t a_length = a.Length();
-  intptr_t b_length = b.Length();
-  intptr_t min_length = Utils::Minimum(a_length, b_length);
-  intptr_t max_length = Utils::Maximum(a_length, b_length);
-  if (!b.IsNegative()) {
-    ASSERT(!a.IsNegative());
-    intptr_t result_length = min_length;
-    const Bigint& result = Bigint::Handle(Bigint::Allocate(result_length));
-
-    for (intptr_t i = 0; i < min_length; i++) {
-      result.SetChunkAt(i, a.GetChunkAt(i) & b.GetChunkAt(i));
-    }
-    Clamp(result);
-    return result.raw();
-  }
-
-  // Bigints encode negative values by storing the absolute value and the sign
-  // separately. To do bit operations we need to simulate numbers that are
-  // implemented as two's complement.
-  // The negation of a positive number x would be encoded as follows in
-  // two's complement: n = ~(x - 1).
-  // The inverse transformation is hence (~n) + 1.
-
-  if (!a.IsNegative()) {
-    ASSERT(b.IsNegative());
-    // The result will be positive.
-    intptr_t result_length = a_length;
-    const Bigint& result = Bigint::Handle(Bigint::Allocate(result_length));
-    Chunk borrow = 1;
-    for (intptr_t i = 0; i < min_length; i++) {
-      Chunk b_digit = b.GetChunkAt(i) - borrow;
-      result.SetChunkAt(i, a.GetChunkAt(i) & (~b_digit) & kDigitMask);
-      borrow = b_digit >> (kChunkBitSize - 1);
-    }
-    for (intptr_t i = min_length; i < a_length; i++) {
-      result.SetChunkAt(i, a.GetChunkAt(i) & (kDigitMaxValue - borrow));
-      borrow = 0;
-    }
-    Clamp(result);
-    return result.raw();
-  }
-
-  ASSERT(a.IsNegative());
-  ASSERT(b.IsNegative());
-  // The result will be negative.
-  // We need to convert a and b to two's complement. Do the bit-operation there,
-  // and transform the resulting bits from two's complement back to separated
-  // magnitude and sign.
-  // a & b is therefore computed as ~((~(a - 1)) & (~(b - 1))) + 1 which is
-  //   equal to ((a-1) | (b-1)) + 1.
-  intptr_t result_length = max_length + 1;
-  const Bigint& result = Bigint::Handle(Bigint::Allocate(result_length));
-  result.ToggleSign();
-  Chunk a_borrow = 1;
-  Chunk b_borrow = 1;
-  Chunk result_carry = 1;
-  ASSERT(a_length >= b_length);
-  for (intptr_t i = 0; i < b_length; i++) {
-    Chunk a_digit = a.GetChunkAt(i) - a_borrow;
-    Chunk b_digit = b.GetChunkAt(i) - b_borrow;
-    Chunk result_chunk = ((a_digit | b_digit) & kDigitMask) + result_carry;
-    result.SetChunkAt(i, result_chunk & kDigitMask);
-    a_borrow = a_digit >> (kChunkBitSize - 1);
-    b_borrow = b_digit >> (kChunkBitSize - 1);
-    result_carry = result_chunk >> kDigitBitSize;
-  }
-  for (intptr_t i = b_length; i < a_length; i++) {
-    Chunk a_digit = a.GetChunkAt(i) - a_borrow;
-    Chunk b_digit = -b_borrow;
-    Chunk result_chunk = ((a_digit | b_digit) & kDigitMask) + result_carry;
-    result.SetChunkAt(i, result_chunk & kDigitMask);
-    a_borrow = a_digit >> (kChunkBitSize - 1);
-    b_borrow = 0;
-    result_carry = result_chunk >> kDigitBitSize;
-  }
-  Chunk a_digit = -a_borrow;
-  Chunk b_digit = -b_borrow;
-  Chunk result_chunk = ((a_digit | b_digit) & kDigitMask) + result_carry;
-  result.SetChunkAt(a_length, result_chunk & kDigitMask);
-  Clamp(result);
-  return result.raw();
-}
-
-
-RawBigint* BigintOperations::BitOr(const Bigint& a, const Bigint& b) {
-  ASSERT(IsClamped(a));
-  ASSERT(IsClamped(b));
-
-  if (a.IsNegative() && !b.IsNegative()) {
-    return BitOr(b, a);
-  }
-  if ((a.IsNegative() == b.IsNegative()) && (a.Length() < b.Length())) {
-    return BitOr(b, a);
-  }
-
-  intptr_t a_length = a.Length();
-  intptr_t b_length = b.Length();
-  intptr_t min_length = Utils::Minimum(a_length, b_length);
-  intptr_t max_length = Utils::Maximum(a_length, b_length);
-  if (!b.IsNegative()) {
-    ASSERT(!a.IsNegative());
-    intptr_t result_length = max_length;
-    const Bigint& result = Bigint::Handle(Bigint::Allocate(result_length));
-
-    ASSERT(a_length >= b_length);
-    for (intptr_t i = 0; i < b_length; i++) {
-      result.SetChunkAt(i, a.GetChunkAt(i) | b.GetChunkAt(i));
-    }
-    for (intptr_t i = b_length; i < a_length; i++) {
-      result.SetChunkAt(i, a.GetChunkAt(i));
-    }
-    return result.raw();
-  }
-
-  // Bigints encode negative values by storing the absolute value and the sign
-  // separately. To do bit operations we need to simulate numbers that are
-  // implemented as two's complement.
-  // The negation of a positive number x would be encoded as follows in
-  // two's complement: n = ~(x - 1).
-  // The inverse transformation is hence (~n) + 1.
-
-  if (!a.IsNegative()) {
-    ASSERT(b.IsNegative());
-    if (a.IsZero()) {
-      return Copy(b);
-    }
-    // The result will be negative.
-    // We need to convert  b to two's complement. Do the bit-operation there,
-    // and transform the resulting bits from two's complement back to separated
-    // magnitude and sign.
-    // a | b is therefore computed as ~((a & (~(b - 1))) + 1 which is
-    //   equal to ((~a) & (b-1)) + 1.
-    intptr_t result_length = b_length;
-    const Bigint& result = Bigint::Handle(Bigint::Allocate(result_length));
-    result.ToggleSign();
-    Chunk borrow = 1;
-    Chunk result_carry = 1;
-    for (intptr_t i = 0; i < min_length; i++) {
-      Chunk a_digit = a.GetChunkAt(i);
-      Chunk b_digit = b.GetChunkAt(i) - borrow;
-      Chunk result_digit = ((~a_digit) & b_digit & kDigitMask) + result_carry;
-      result.SetChunkAt(i, result_digit & kDigitMask);
-      borrow = b_digit >> (kChunkBitSize - 1);
-      result_carry = result_digit >> kDigitBitSize;
-    }
-    ASSERT(result_carry == 0);
-    for (intptr_t i = min_length; i < b_length; i++) {
-      Chunk b_digit = b.GetChunkAt(i) - borrow;
-      Chunk result_digit = (b_digit & kDigitMask) + result_carry;
-      result.SetChunkAt(i, result_digit & kDigitMask);
-      borrow = b_digit >> (kChunkBitSize - 1);
-      result_carry = result_digit >> kDigitBitSize;
-    }
-    ASSERT(result_carry == 0);
-    Clamp(result);
-    return result.raw();
-  }
-
-  ASSERT(a.IsNegative());
-  ASSERT(b.IsNegative());
-  // The result will be negative.
-  // We need to convert a and b to two's complement. Do the bit-operation there,
-  // and transform the resulting bits from two's complement back to separated
-  // magnitude and sign.
-  // a & b is therefore computed as ~((~(a - 1)) | (~(b - 1))) + 1 which is
-  //   equal to ((a-1) & (b-1)) + 1.
-  ASSERT(a_length >= b_length);
-  ASSERT(min_length == b_length);
-  intptr_t result_length = min_length + 1;
-  const Bigint& result = Bigint::Handle(Bigint::Allocate(result_length));
-  result.ToggleSign();
-  Chunk a_borrow = 1;
-  Chunk b_borrow = 1;
-  Chunk result_carry = 1;
-  for (intptr_t i = 0; i < b_length; i++) {
-    Chunk a_digit = a.GetChunkAt(i) - a_borrow;
-    Chunk b_digit = b.GetChunkAt(i) - b_borrow;
-    Chunk result_chunk = ((a_digit & b_digit) & kDigitMask) + result_carry;
-    result.SetChunkAt(i, result_chunk & kDigitMask);
-    a_borrow = a_digit >> (kChunkBitSize - 1);
-    b_borrow = b_digit >> (kChunkBitSize - 1);
-    result_carry = result_chunk >> kDigitBitSize;
-  }
-  result.SetChunkAt(b_length, result_carry);
-  Clamp(result);
-  return result.raw();
-}
-
-
-RawBigint* BigintOperations::BitXor(const Bigint& a, const Bigint& b) {
-  ASSERT(IsClamped(a));
-  ASSERT(IsClamped(b));
-
-  if (a.IsZero()) {
-    return Copy(b);
-  }
-  if (b.IsZero()) {
-    return Copy(a);
-  }
-  if (a.IsNegative() && !b.IsNegative()) {
-    return BitXor(b, a);
-  }
-  if ((a.IsNegative() == b.IsNegative()) && (a.Length() < b.Length())) {
-    return BitXor(b, a);
-  }
-
-  intptr_t a_length = a.Length();
-  intptr_t b_length = b.Length();
-  intptr_t min_length = Utils::Minimum(a_length, b_length);
-  intptr_t max_length = Utils::Maximum(a_length, b_length);
-  if (!b.IsNegative()) {
-    ASSERT(!a.IsNegative());
-    intptr_t result_length = max_length;
-    const Bigint& result = Bigint::Handle(Bigint::Allocate(result_length));
-
-    ASSERT(a_length >= b_length);
-    for (intptr_t i = 0; i < b_length; i++) {
-      result.SetChunkAt(i, a.GetChunkAt(i) ^ b.GetChunkAt(i));
-    }
-    for (intptr_t i = b_length; i < a_length; i++) {
-      result.SetChunkAt(i, a.GetChunkAt(i));
-    }
-    Clamp(result);
-    return result.raw();
-  }
-
-  // Bigints encode negative values by storing the absolute value and the sign
-  // separately. To do bit operations we need to simulate numbers that are
-  // implemented as two's complement.
-  // The negation of a positive number x would be encoded as follows in
-  // two's complement: n = ~(x - 1).
-  // The inverse transformation is hence (~n) + 1.
-
-  if (!a.IsNegative()) {
-    ASSERT(b.IsNegative());
-    // The result will be negative.
-    // We need to convert  b to two's complement. Do the bit-operation there,
-    // and transform the resulting bits from two's complement back to separated
-    // magnitude and sign.
-    // a ^ b is therefore computed as ~((a ^ (~(b - 1))) + 1.
-    intptr_t result_length = max_length + 1;
-    const Bigint& result = Bigint::Handle(Bigint::Allocate(result_length));
-    result.ToggleSign();
-    Chunk borrow = 1;
-    Chunk result_carry = 1;
-    for (intptr_t i = 0; i < min_length; i++) {
-      Chunk a_digit = a.GetChunkAt(i);
-      Chunk b_digit = b.GetChunkAt(i) - borrow;
-      Chunk result_digit =
-          ((~(a_digit ^ ~b_digit)) & kDigitMask) + result_carry;
-      result.SetChunkAt(i, result_digit & kDigitMask);
-      borrow = b_digit >> (kChunkBitSize - 1);
-      result_carry = result_digit >> kDigitBitSize;
-    }
-    for (intptr_t i = min_length; i < a_length; i++) {
-      Chunk a_digit = a.GetChunkAt(i);
-      Chunk b_digit = -borrow;
-      Chunk result_digit =
-          ((~(a_digit ^ ~b_digit)) & kDigitMask) + result_carry;
-      result.SetChunkAt(i, result_digit & kDigitMask);
-      borrow = b_digit >> (kChunkBitSize - 1);
-      result_carry = result_digit >> kDigitBitSize;
-    }
-    for (intptr_t i = min_length; i < b_length; i++) {
-      // a_digit = 0.
-      Chunk b_digit = b.GetChunkAt(i) - borrow;
-      Chunk result_digit = (b_digit & kDigitMask) + result_carry;
-      result.SetChunkAt(i, result_digit & kDigitMask);
-      borrow = b_digit >> (kChunkBitSize - 1);
-      result_carry = result_digit >> kDigitBitSize;
-    }
-    result.SetChunkAt(max_length, result_carry);
-    Clamp(result);
-    return result.raw();
-  }
-
-  ASSERT(a.IsNegative());
-  ASSERT(b.IsNegative());
-  // The result will be positive.
-  // We need to convert a and b to two's complement, do the bit-operation there,
-  // and simply store the result.
-  // a ^ b is therefore computed as (~(a - 1)) ^ (~(b - 1)).
-  ASSERT(a_length >= b_length);
-  ASSERT(max_length == a_length);
-  intptr_t result_length = max_length;
-  const Bigint& result = Bigint::Handle(Bigint::Allocate(result_length));
-  Chunk a_borrow = 1;
-  Chunk b_borrow = 1;
-  for (intptr_t i = 0; i < b_length; i++) {
-    Chunk a_digit = a.GetChunkAt(i) - a_borrow;
-    Chunk b_digit = b.GetChunkAt(i) - b_borrow;
-    Chunk result_chunk = (~a_digit) ^ (~b_digit);
-    result.SetChunkAt(i, result_chunk & kDigitMask);
-    a_borrow = a_digit >> (kChunkBitSize - 1);
-    b_borrow = b_digit >> (kChunkBitSize - 1);
-  }
-  ASSERT(b_borrow == 0);
-  for (intptr_t i = b_length; i < a_length; i++) {
-    Chunk a_digit = a.GetChunkAt(i) - a_borrow;
-    // (~a_digit) ^ 0xFFF..FFF == a_digit.
-    result.SetChunkAt(i, a_digit & kDigitMask);
-    a_borrow = a_digit >> (kChunkBitSize - 1);
-  }
-  ASSERT(a_borrow == 0);
-  Clamp(result);
-  return result.raw();
-}
-
-
-RawBigint* BigintOperations::BitNot(const Bigint& bigint) {
-  if (bigint.IsZero()) {
-    return MinusOne();
-  }
-  const Bigint& one_bigint = Bigint::Handle(One());
-  if (bigint.IsNegative()) {
-    return UnsignedSubtract(bigint, one_bigint);
-  } else {
-    const Bigint& result = Bigint::Handle(UnsignedAdd(bigint, one_bigint));
-    result.ToggleSign();
-    return result.raw();
-  }
-}
-
-
-int64_t BigintOperations::BitLength(const Bigint& bigint) {
-  ASSERT(IsClamped(bigint));
-  intptr_t length = bigint.Length();
-  if (length == 0) return 0;
-  intptr_t last = length - 1;
-
-  Chunk high_chunk = bigint.GetChunkAt(last);
-  ASSERT(high_chunk != 0);
-  int64_t bit_length =
-      static_cast<int64_t>(kDigitBitSize) * last + CountBits(high_chunk);
-
-  if (bigint.IsNegative()) {
-    // We are calculating the 2's complement bitlength but we have a sign and
-    // magnitude representation.  The length is the same except when the
-    // magnitude is an exact power of two, 2^k.  In 2's complement format,
-    // -(2^k) takes one fewer bit than (2^k).
-
-    if ((high_chunk & (high_chunk - 1)) == 0) {  // Single bit set?
-      for (intptr_t i = 0; i < last; i++) {
-        if (bigint.GetChunkAt(i) != 0) return bit_length;
-      }
-      bit_length -= 1;
-    }
-  }
-  return bit_length;
-}
-
-
-int BigintOperations::Compare(const Bigint& a, const Bigint& b) {
-  bool a_is_negative = a.IsNegative();
-  bool b_is_negative = b.IsNegative();
-  if (a_is_negative != b_is_negative) {
-    return a_is_negative ? -1 : 1;
-  }
-
-  if (a_is_negative) {
-    return -UnsignedCompare(a, b);
-  }
-  return UnsignedCompare(a, b);
-}
-
-
-void BigintOperations::FromHexCString(const char* hex_string,
-                                      const Bigint& value) {
-  ASSERT(hex_string[0] != '-');
-  intptr_t bigint_length = ComputeChunkLength(hex_string);
-  // The bigint's least significant digit (lsd) is at position 0, whereas the
-  // given string has it's lsd at the last position.
-  // The hex_i index, pointing into the string, starts therefore at the end,
-  // whereas the bigint-index (i) starts at 0.
-  const intptr_t hex_length = strlen(hex_string);
-  if (hex_length < 0) {
-    FATAL("Fatal error in BigintOperations::FromHexCString: string too long");
-  }
-  intptr_t hex_i = hex_length - 1;
-  for (intptr_t i = 0; i < bigint_length; i++) {
-    Chunk digit = 0;
-    int shift = 0;
-    for (int j = 0; j < kHexCharsPerDigit; j++) {
-      // Reads a block of hexadecimal digits and stores it in 'digit'.
-      // Ex: "0123456" with kHexCharsPerDigit == 3, hex_i == 6, reads "456".
-      if (hex_i < 0) {
-        break;
-      }
-      ASSERT(hex_i >= 0);
-      char c = hex_string[hex_i--];
-      ASSERT(Utils::IsHexDigit(c));
-      digit += static_cast<Chunk>(Utils::HexDigitToInt(c)) << shift;
-      shift += 4;
-    }
-    value.SetChunkAt(i, digit);
-  }
-  ASSERT(hex_i == -1);
-  Clamp(value);
-}
-
-
-RawBigint* BigintOperations::AddSubtract(const Bigint& a,
-                                         const Bigint& b,
-                                         bool negate_b) {
-  ASSERT(IsClamped(a));
-  ASSERT(IsClamped(b));
-  Bigint& result = Bigint::Handle();
-  // We perform the subtraction by simulating a negation of the b-argument.
-  bool b_is_negative = negate_b ? !b.IsNegative() : b.IsNegative();
-
-  // If both are of the same sign, then we can compute the unsigned addition
-  // and then simply adjust the sign (if necessary).
-  // Ex: -3 + -5 -> -(3 + 5)
-  if (a.IsNegative() == b_is_negative) {
-    result = UnsignedAdd(a, b);
-    result.SetSign(b_is_negative);
-    ASSERT(IsClamped(result));
-    return result.raw();
-  }
-
-  // The signs differ.
-  // Take the number with small magnitude and subtract its absolute value from
-  // the absolute value of the other number. Then adjust the sign, if necessary.
-  // The sign is the same as for the number with the greater magnitude.
-  // Ex:  -8 + 3  -> -(8 - 3)
-  //       8 + -3 ->  (8 - 3)
-  //      -3 + 8  ->  (8 - 3)
-  //       3 + -8 -> -(8 - 3)
-  int comp = UnsignedCompare(a, b);
-  if (comp < 0) {
-    result = UnsignedSubtract(b, a);
-    result.SetSign(b_is_negative);
-  } else if (comp > 0) {
-    result = UnsignedSubtract(a, b);
-    result.SetSign(a.IsNegative());
-  } else {
-    return Zero();
-  }
-  ASSERT(IsClamped(result));
-  return result.raw();
-}
-
-
-int BigintOperations::UnsignedCompare(const Bigint& a, const Bigint& b) {
-  ASSERT(IsClamped(a));
-  ASSERT(IsClamped(b));
-  intptr_t a_length = a.Length();
-  intptr_t b_length = b.Length();
-  if (a_length < b_length) return -1;
-  if (a_length > b_length) return 1;
-  for (intptr_t i = a_length - 1; i >= 0; i--) {
-    Chunk digit_a = a.GetChunkAt(i);
-    Chunk digit_b = b.GetChunkAt(i);
-    if (digit_a < digit_b) return -1;
-    if (digit_a > digit_b) return 1;
-    // Else look at the next digit.
-  }
-  return 0;  // They are equal.
-}
-
-
-int BigintOperations::UnsignedCompareNonClamped(
-    const Bigint& a, const Bigint& b) {
-  intptr_t a_length = a.Length();
-  intptr_t b_length = b.Length();
-  while (a_length > b_length) {
-    if (a.GetChunkAt(a_length - 1) != 0) return 1;
-    a_length--;
-  }
-  while (b_length > a_length) {
-    if (b.GetChunkAt(b_length - 1) != 0) return -1;
-    b_length--;
-  }
-  for (intptr_t i = a_length - 1; i >= 0; i--) {
-    Chunk digit_a = a.GetChunkAt(i);
-    Chunk digit_b = b.GetChunkAt(i);
-    if (digit_a < digit_b) return -1;
-    if (digit_a > digit_b) return 1;
-    // Else look at the next digit.
-  }
-  return 0;  // They are equal.
-}
-
-
-RawBigint* BigintOperations::UnsignedAdd(const Bigint& a, const Bigint& b) {
-  ASSERT(IsClamped(a));
-  ASSERT(IsClamped(b));
-
-  intptr_t a_length = a.Length();
-  intptr_t b_length = b.Length();
-  if (a_length < b_length) {
-    return UnsignedAdd(b, a);
-  }
-
-  // We might request too much space, in which case we will adjust the length
-  // afterwards.
-  intptr_t result_length = a_length + 1;
-  const Bigint& result = Bigint::Handle(Bigint::Allocate(result_length));
-
-  Chunk carry = 0;
-  // b has fewer digits than a.
-  ASSERT(b_length <= a_length);
-  for (intptr_t i = 0; i < b_length; i++) {
-    Chunk sum = a.GetChunkAt(i) + b.GetChunkAt(i) + carry;
-    result.SetChunkAt(i, sum & kDigitMask);
-    carry = sum >> kDigitBitSize;
-  }
-  // Copy over the remaining digits of a, but don't forget the carry.
-  for (intptr_t i = b_length; i < a_length; i++) {
-    Chunk sum = a.GetChunkAt(i) + carry;
-    result.SetChunkAt(i, sum & kDigitMask);
-    carry = sum >> kDigitBitSize;
-  }
-  // Shrink the result if there was no overflow. Otherwise apply the carry.
-  if (carry == 0) {
-    // TODO(floitsch): We change the size of bigint-objects here.
-    result.SetLength(a_length);
-  } else {
-    result.SetChunkAt(a_length, carry);
-  }
-  ASSERT(IsClamped(result));
-  return result.raw();
-}
-
-
-RawBigint* BigintOperations::UnsignedSubtract(const Bigint& a,
-                                              const Bigint& b) {
-  ASSERT(IsClamped(a));
-  ASSERT(IsClamped(b));
-  ASSERT(UnsignedCompare(a, b) >= 0);
-
-  const int kSignBitPos = Bigint::kChunkSize * kBitsPerByte - 1;
-
-  intptr_t a_length = a.Length();
-  intptr_t b_length = b.Length();
-
-  // We might request too much space, in which case we will adjust the length
-  // afterwards.
-  intptr_t result_length = a_length;
-  const Bigint& result = Bigint::Handle(Bigint::Allocate(result_length));
-
-  Chunk borrow = 0;
-  ASSERT(b_length <= a_length);
-  for (intptr_t i = 0; i < b_length; i++) {
-    Chunk difference = a.GetChunkAt(i) - b.GetChunkAt(i) - borrow;
-    result.SetChunkAt(i, difference & kDigitMask);
-    borrow = difference >> kSignBitPos;
-    ASSERT((borrow == 0) || (borrow == 1));
-  }
-  // Copy over the remaining digits of a, but don't forget the borrow.
-  for (intptr_t i = b_length; i < a_length; i++) {
-    Chunk difference = a.GetChunkAt(i) - borrow;
-    result.SetChunkAt(i, difference & kDigitMask);
-    borrow = (difference >> kSignBitPos);
-    ASSERT((borrow == 0) || (borrow == 1));
-  }
-  ASSERT(borrow == 0);
-  Clamp(result);
-  return result.raw();
-}
-
-
-RawBigint* BigintOperations::MultiplyWithDigit(
-    const Bigint& bigint, Chunk digit) {
-  ASSERT(digit <= kDigitMaxValue);
-  if (digit == 0) return Zero();
-  if (bigint.IsZero()) return Zero();
-
-  intptr_t length = bigint.Length();
-  intptr_t result_length = length + 1;
-  const Bigint& result = Bigint::Handle(Bigint::Allocate(result_length));
-
-  Chunk carry = 0;
-  for (intptr_t i = 0; i < length; i++) {
-    Chunk chunk = bigint.GetChunkAt(i);
-    DoubleChunk product = (static_cast<DoubleChunk>(chunk) * digit) + carry;
-    result.SetChunkAt(i, static_cast<Chunk>(product & kDigitMask));
-    carry = static_cast<Chunk>(product >> kDigitBitSize);
-  }
-  result.SetChunkAt(length, carry);
-
-  result.SetSign(bigint.IsNegative());
-  Clamp(result);
-  return result.raw();
-}
-
-
-void BigintOperations::DivideRemainder(
-    const Bigint& a, const Bigint& b, Bigint* quotient, Bigint* remainder) {
-  // TODO(floitsch): This function is very memory-intensive since all
-  // intermediate bigint results are allocated in new memory. It would be
-  // much more efficient to reuse the space of temporary intermediate variables.
-  ASSERT(IsClamped(a));
-  ASSERT(IsClamped(b));
-  ASSERT(!b.IsZero());
-
-  int comp = UnsignedCompare(a, b);
-  if (comp < 0) {
-    (*quotient) = Zero();
-    (*remainder) = Copy(a);  // TODO(floitsch): can we reuse the input?
-    return;
-  } else if (comp == 0) {
-    (*quotient) = One();
-    quotient->SetSign(a.IsNegative() != b.IsNegative());
-    (*remainder) = Zero();
-    return;
-  }
-
-  intptr_t b_length = b.Length();
-
-  if (b_length == 1) {
-    const Bigint& dividend_quotient = Bigint::Handle(Copy(a));
-    Chunk remainder_digit =
-        BigintOperations::InplaceUnsignedDivideRemainderDigit(
-            dividend_quotient, b.GetChunkAt(0));
-    dividend_quotient.SetSign(a.IsNegative() != b.IsNegative());
-    *quotient = dividend_quotient.raw();
-    *remainder = Bigint::Allocate(1);
-    remainder->SetChunkAt(0, remainder_digit);
-    remainder->SetSign(a.IsNegative());
-    Clamp(*remainder);
-    return;
-  }
-
-  // High level description:
-  // The algorithm is basically the algorithm that is taught in school:
-  // Let a the dividend and b the divisor. We are looking for
-  // the quotient q = truncate(a / b), and
-  // the remainder r = a - q * b.
-  // School algorithm:
-  // q = 0
-  // n = number_of_digits(a) - number_of_digits(b)
-  // for (i = n; i >= 0; i--) {
-  //   Maximize k such that k*y*10^i is less than or equal to a and
-  //                  (k + 1)*y*10^i is greater.
-  //   q = q + k * 10^i   // Add new digit to result.
-  //   a = a - k * b * 10^i
-  // }
-  // r = a
-  //
-  // Instead of working in base 10 we work in base kDigitBitSize.
-
-  int normalization_shift =
-      kDigitBitSize - CountBits(b.GetChunkAt(b_length - 1));
-  Bigint& dividend = Bigint::Handle(ShiftLeft(a, normalization_shift));
-  const Bigint& divisor = Bigint::Handle(ShiftLeft(b, normalization_shift));
-  dividend.SetSign(false);
-  divisor.SetSign(false);
-
-  intptr_t dividend_length = dividend.Length();
-  intptr_t divisor_length = b_length;
-  ASSERT(divisor_length == divisor.Length());
-
-  intptr_t quotient_length = dividend_length - divisor_length + 1;
-  *quotient = Bigint::Allocate(quotient_length);
-  quotient->SetSign(a.IsNegative() != b.IsNegative());
-
-  intptr_t quotient_pos = dividend_length - divisor_length;
-  // Find the first quotient-digit.
-  // The first digit must be computed separately from the other digits because
-  // the preconditions for the loop are not yet satisfied.
-  // For simplicity use a shifted divisor, so that the comparison and
-  // subtraction are easier.
-  int divisor_shift_amount = dividend_length - divisor_length;
-  Bigint& shifted_divisor =
-      Bigint::Handle(DigitsShiftLeft(divisor, divisor_shift_amount));
-  Chunk first_quotient_digit = 0;
-  Isolate* isolate = Isolate::Current();
-  while (UnsignedCompare(dividend, shifted_divisor) >= 0) {
-    HANDLESCOPE(isolate);
-    first_quotient_digit++;
-    dividend = Subtract(dividend, shifted_divisor);
-  }
-  quotient->SetChunkAt(quotient_pos--, first_quotient_digit);
-
-  // Find the remainder of the digits.
-
-  Chunk first_divisor_digit = divisor.GetChunkAt(divisor_length - 1);
-  // The short divisor only represents the first two digits of the divisor.
-  // If the divisor has only one digit, then the second part is zeroed out.
-  Bigint& short_divisor = Bigint::Handle(Bigint::Allocate(2));
-  if (divisor_length > 1) {
-    short_divisor.SetChunkAt(0, divisor.GetChunkAt(divisor_length - 2));
-  } else {
-    short_divisor.SetChunkAt(0, 0);
-  }
-  short_divisor.SetChunkAt(1, first_divisor_digit);
-  // The following bigint will be used inside the loop. It is allocated outside
-  // the loop to avoid repeated allocations.
-  Bigint& target = Bigint::Handle(Bigint::Allocate(3));
-  // The dividend_length here must be from the initial dividend.
-  for (intptr_t i = dividend_length - 1; i >= divisor_length; i--) {
-    // Invariant: let t = i - divisor_length
-    //   then dividend / (divisor << (t * kDigitBitSize)) <= kDigitMaxValue.
-    // Ex: dividend: 53451232, and divisor: 535  (with t == 5) is ok.
-    //     dividend: 56822123, and divisor: 563  (with t == 5) is bad.
-    //     dividend:  6822123, and divisor: 563  (with t == 5) is ok.
-
-    HANDLESCOPE(isolate);
-    // The dividend has changed. So recompute its length.
-    dividend_length = dividend.Length();
-    Chunk dividend_digit;
-    if (i > dividend_length) {
-      quotient->SetChunkAt(quotient_pos--, 0);
-      continue;
-    } else if (i == dividend_length) {
-      dividend_digit = 0;
-    } else {
-      ASSERT(i + 1 == dividend_length);
-      dividend_digit = dividend.GetChunkAt(i);
-    }
-    Chunk quotient_digit;
-    // Compute an estimate of the quotient_digit. The estimate will never
-    // be too small.
-    if (dividend_digit == first_divisor_digit) {
-      // Small shortcut: the else-branch would compute a value > kDigitMaxValue.
-      // However, by hypothesis, we know that the quotient_digit must fit into
-      // a digit. Avoid going through repeated iterations of the adjustment
-      // loop by directly assigning kDigitMaxValue to the quotient_digit.
-      // Ex:  51235 / 523.
-      //    51 / 5 would yield 10 (if computed in the else branch).
-      // However we know that 9 is the maximal value.
-      quotient_digit = kDigitMaxValue;
-    } else {
-      // Compute the estimate by using two digits of the dividend and one of
-      // the divisor.
-      // Ex: 32421 / 535
-      //    32 / 5 -> 6
-      // The estimate would hence be 6.
-      DoubleChunk two_dividend_digits = dividend_digit;
-      two_dividend_digits <<= kDigitBitSize;
-      two_dividend_digits += dividend.GetChunkAt(i - 1);
-      DoubleChunk q = two_dividend_digits / first_divisor_digit;
-      if (q > kDigitMaxValue) q = kDigitMaxValue;
-      quotient_digit = static_cast<Chunk>(q);
-    }
-
-    // Refine estimation.
-    quotient_digit++;  // The following loop will start by decrementing.
-    Bigint& estimation_product = Bigint::Handle();
-    target.SetChunkAt(0, ((i - 2) < 0) ? 0 : dividend.GetChunkAt(i - 2));
-    target.SetChunkAt(1, ((i - 1) < 0) ? 0 : dividend.GetChunkAt(i - 1));
-    target.SetChunkAt(2, dividend_digit);
-    do {
-      HANDLESCOPE(isolate);
-      quotient_digit = (quotient_digit - 1) & kDigitMask;
-      estimation_product = MultiplyWithDigit(short_divisor, quotient_digit);
-    } while (UnsignedCompareNonClamped(estimation_product, target) > 0);
-    // At this point the quotient_digit is fairly accurate.
-    // At the worst it is off by one.
-    // Remove a multiple of the divisor. If the estimate is incorrect we will
-    // subtract the divisor another time.
-    // Let t = i - divisor_length.
-    // dividend -= (quotient_digit * divisor) << (t * kDigitBitSize);
-    shifted_divisor = MultiplyWithDigit(divisor, quotient_digit);
-    shifted_divisor = DigitsShiftLeft(shifted_divisor, i - divisor_length);
-    dividend = Subtract(dividend, shifted_divisor);
-    if (dividend.IsNegative()) {
-      // The estimation was still too big.
-      quotient_digit--;
-      // TODO(floitsch): allocate space for the shifted_divisor once and reuse
-      // it at every iteration.
-      shifted_divisor = DigitsShiftLeft(divisor, i - divisor_length);
-      // TODO(floitsch): reuse the space of the previous dividend.
-      dividend = Add(dividend, shifted_divisor);
-    }
-    quotient->SetChunkAt(quotient_pos--, quotient_digit);
-  }
-  ASSERT(quotient_pos == -1);
-  Clamp(*quotient);
-  *remainder = ShiftRight(dividend, normalization_shift);
-  remainder->SetSign(a.IsNegative());
-}
-
-
-BigintOperations::Chunk BigintOperations::InplaceUnsignedDivideRemainderDigit(
-    const Bigint& dividend_quotient, Chunk divisor_digit) {
-  Chunk remainder = 0;
-  for (intptr_t i = dividend_quotient.Length() - 1; i >= 0; i--) {
-    DoubleChunk dividend_digit =
-        (static_cast<DoubleChunk>(remainder) << kDigitBitSize) +
-        dividend_quotient.GetChunkAt(i);
-    Chunk quotient_digit = static_cast<Chunk>(dividend_digit / divisor_digit);
-    remainder = static_cast<Chunk>(
-        dividend_digit -
-        static_cast<DoubleChunk>(quotient_digit) * divisor_digit);
-    dividend_quotient.SetChunkAt(i, quotient_digit);
-  }
-  Clamp(dividend_quotient);
-  return remainder;
-}
-
-
-void BigintOperations::Clamp(const Bigint& bigint) {
-  intptr_t length = bigint.Length();
-  while (length > 0 && (bigint.GetChunkAt(length - 1) == 0)) {
-    length--;
-  }
-  // TODO(floitsch): We change the size of bigint-objects here.
-  bigint.SetLength(length);
-}
-
-
-RawBigint* BigintOperations::Copy(const Bigint& bigint) {
-  intptr_t bigint_length = bigint.Length();
-  Bigint& copy = Bigint::Handle(Bigint::Allocate(bigint_length));
-  for (intptr_t i = 0; i < bigint_length; i++) {
-    copy.SetChunkAt(i, bigint.GetChunkAt(i));
-  }
-  copy.SetSign(bigint.IsNegative());
-  return copy.raw();
-}
-
-
-intptr_t BigintOperations::CountBits(Chunk digit) {
-  intptr_t result = 0;
-  while (digit != 0) {
-    digit >>= 1;
-    result++;
-  }
-  return result;
-}
-
-}  // namespace dart
diff --git a/runtime/vm/bigint_operations.h b/runtime/vm/bigint_operations.h
deleted file mode 100644
index 70fe3a2..0000000
--- a/runtime/vm/bigint_operations.h
+++ /dev/null
@@ -1,159 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-
-#ifndef VM_BIGINT_OPERATIONS_H_
-#define VM_BIGINT_OPERATIONS_H_
-
-#include "platform/utils.h"
-
-#include "vm/object.h"
-
-namespace dart {
-
-class BigintOperations : public AllStatic {
- public:
-  static RawBigint* NewFromSmi(const Smi& smi, Heap::Space space = Heap::kNew);
-  static RawBigint* NewFromInt64(int64_t value, Heap::Space space = Heap::kNew);
-  static RawBigint* NewFromUint64(uint64_t value,
-                                  Heap::Space space = Heap::kNew);
-  // The given string must be a valid integer representation. It may be
-  // prefixed by a minus and/or "0x".
-  // Returns Bigint::null() if the string cannot be parsed.
-  static RawBigint* NewFromCString(const char* str,
-                                   Heap::Space space = Heap::kNew);
-  static RawBigint* NewFromDouble(double d, Heap::Space space = Heap::kNew);
-
-  // Compute chunk length of the bigint instance created for the
-  // specified hex string.  The specified hex string must be a
-  // nul-terminated string of hex-digits.  It must only contain
-  // hex-digits. Leading "0x" is not allowed.
-  static intptr_t ComputeChunkLength(const char* hex_string);
-
-  // Create a bigint instance from the specified hex string. The given string
-  // must be a nul-terminated string of hex-digits. It must only contain
-  // hex-digits. Leading "0x" is not allowed.
-  static RawBigint* FromHexCString(const char* hex_string,
-                                   Heap::Space space = Heap::kNew);
-
-  // Helper method to initialize a bigint instance object with the bigint value
-  // in the specified string. The given string must be a nul-terminated string
-  // of hex-digits. It must only contain hex-digits, leading "0x" is not
-  // allowed.
-  static void FromHexCString(const char* hex_string, const Bigint& value);
-
-  // The given string must be a nul-terminated string of decimal digits. It
-  // must only contain decimal digits (0-9). No sign is allowed. Leading
-  // zeroes are ignored.
-  static RawBigint* FromDecimalCString(const char* str,
-                                   Heap::Space space = Heap::kNew);
-
-  // Converts the bigint to a HEX string. The returned string is prepended by
-  // a "0x" (after the optional minus-sign).
-  static const char* ToHexCString(intptr_t length,
-                                  bool is_negative,
-                                  void* data,
-                                  uword (*allocator)(intptr_t size));
-
-  static const char* ToHexCString(const Bigint& bigint,
-                                  uword (*allocator)(intptr_t size));
-
-  static const char* ToDecimalCString(const Bigint& bigint,
-                                      uword (*allocator)(intptr_t size));
-
-  static bool FitsIntoSmi(const Bigint& bigint);
-  static RawSmi* ToSmi(const Bigint& bigint);
-
-  static bool FitsIntoInt64(const Bigint& bigint);
-  static int64_t ToInt64(const Bigint& bigint);
-
-  static bool FitsIntoUint64(const Bigint& bigint);
-  static bool AbsFitsIntoUint64(const Bigint& bigint);
-  static uint64_t ToUint64(const Bigint& bigint);
-  static uint32_t TruncateToUint32(const Bigint& bigint);
-  static uint64_t AbsToUint64(const Bigint& bigint);
-
-  static RawDouble* ToDouble(const Bigint& bigint);
-
-  static RawBigint* Add(const Bigint& a, const Bigint& b) {
-    bool negate_b = false;
-    return AddSubtract(a, b, negate_b);
-  }
-  static RawBigint* Subtract(const Bigint& a, const Bigint& b) {
-    bool negate_b = true;
-    return AddSubtract(a, b, negate_b);
-  }
-  static RawBigint* Multiply(const Bigint& a, const Bigint& b);
-  // TODO(floitsch): what to do for divisions by zero.
-  static RawBigint* Divide(const Bigint& a, const Bigint& b);
-  static RawBigint* Modulo(const Bigint& a, const Bigint& b);
-  static RawBigint* Remainder(const Bigint& a, const Bigint& b);
-
-  static RawBigint* ShiftLeft(const Bigint& bigint, intptr_t amount);
-  static RawBigint* ShiftRight(const Bigint& bigint, intptr_t amount);
-  static RawBigint* BitAnd(const Bigint& a, const Bigint& b);
-  static RawBigint* BitOr(const Bigint& a, const Bigint& b);
-  static RawBigint* BitXor(const Bigint& a, const Bigint& b);
-  static RawBigint* BitNot(const Bigint& bigint);
-  static int64_t BitLength(const Bigint& bigint);
-
-  static int Compare(const Bigint& a, const Bigint& b);
-
-  static bool IsClamped(const Bigint& bigint) {
-    intptr_t length = bigint.Length();
-    return (length == 0) || (bigint.GetChunkAt(length - 1) != 0);
-  }
-
- private:
-  typedef Bigint::Chunk Chunk;
-  typedef Bigint::DoubleChunk DoubleChunk;
-
-  static const int kDigitBitSize = 28;
-  static const Chunk kDigitMask = (static_cast<Chunk>(1) << kDigitBitSize) - 1;
-  static const Chunk kDigitMaxValue = kDigitMask;
-  static const int kChunkSize = sizeof(Chunk);
-  static const int kChunkBitSize = kChunkSize * kBitsPerByte;
-  static const int kHexCharsPerDigit = kDigitBitSize / 4;
-
-  static RawBigint* Zero() { return Bigint::Allocate(0); }
-  static RawBigint* One() {
-    Bigint& result = Bigint::Handle(Bigint::Allocate(1));
-    result.SetChunkAt(0, 1);
-    return result.raw();
-  }
-  static RawBigint* MinusOne() {
-    Bigint& result = Bigint::Handle(One());
-    result.ToggleSign();
-    return result.raw();
-  }
-
-  // Performs an addition or subtraction depending on the negate_b argument.
-  static RawBigint* AddSubtract(const Bigint& a,
-                                const Bigint& b,
-                                bool negate_b);
-
-  static int UnsignedCompare(const Bigint& a, const Bigint& b);
-  static int UnsignedCompareNonClamped(const Bigint& a, const Bigint& b);
-  static RawBigint* UnsignedAdd(const Bigint& a, const Bigint& b);
-  static RawBigint* UnsignedSubtract(const Bigint& a, const Bigint& b);
-
-  static RawBigint* MultiplyWithDigit(const Bigint& bigint, Chunk digit);
-  static RawBigint* DigitsShiftLeft(const Bigint& bigint, intptr_t amount) {
-    return ShiftLeft(bigint, amount * kDigitBitSize);
-  }
-  static void DivideRemainder(const Bigint& a, const Bigint& b,
-                              Bigint* quotient, Bigint* remainder);
-  static Chunk InplaceUnsignedDivideRemainderDigit(
-      const Bigint& dividend_quotient, Chunk divisor_digit);
-
-  // Removes leading zero-chunks by adjusting the bigint's length.
-  static void Clamp(const Bigint& bigint);
-
-  static RawBigint* Copy(const Bigint& bigint);
-
-  static intptr_t CountBits(Chunk digit);
-
-  DISALLOW_IMPLICIT_CONSTRUCTORS(BigintOperations);
-};
-
-}  // namespace dart
-
-#endif  // VM_BIGINT_OPERATIONS_H_
diff --git a/runtime/vm/bigint_operations_test.cc b/runtime/vm/bigint_operations_test.cc
deleted file mode 100644
index 3972f74..0000000
--- a/runtime/vm/bigint_operations_test.cc
+++ /dev/null
@@ -1,2240 +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.
-
-#include "platform/assert.h"
-#include "vm/bigint_operations.h"
-#include "vm/object.h"
-#include "vm/object_store.h"
-#include "vm/unit_test.h"
-
-namespace dart {
-
-static uword ZoneAllocator(intptr_t size) {
-  Zone* zone = Isolate::Current()->current_zone();
-  return zone->AllocUnsafe(size);
-}
-
-
-TEST_CASE(BigintSmi) {
-  {
-    const Smi& smi = Smi::Handle(Smi::New(5));
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT_EQ(5, smi_back.Value());
-  }
-
-  {
-    const Smi& smi = Smi::Handle(Smi::New(Smi::kMaxValue));
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT(Smi::kMaxValue == smi_back.Value());
-  }
-
-  {
-    const Smi& smi = Smi::Handle(Smi::New(Smi::kMinValue));
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT(bigint.IsNegative());
-    EXPECT(Smi::kMinValue == smi_back.Value());
-  }
-
-  {
-    ASSERT(0xFFFFFFF < Smi::kMaxValue);
-    const Smi& smi = Smi::Handle(Smi::New(0xFFFFFFF));
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT(0xFFFFFFF == smi_back.Value());
-  }
-
-  {
-    ASSERT(0x10000000 < Smi::kMaxValue);
-    const Smi& smi = Smi::Handle(Smi::New(0x10000000));
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT(0x10000000 == smi_back.Value());
-  }
-}
-
-
-TEST_CASE(BigintInt64) {
-  const int64_t kValue = 100000000;
-  const int64_t kValue64 = kValue * kValue;
-  Bigint& big = Bigint::Handle(BigintOperations::NewFromInt64(kValue));
-  const Smi& smi = Smi::Handle(Smi::New(kValue));
-  Bigint& big_test = Bigint::Handle(BigintOperations::NewFromSmi(smi));
-  EXPECT_EQ(0, BigintOperations::Compare(big, big_test));
-  big = BigintOperations::NewFromInt64(kValue64);
-  big_test = BigintOperations::Multiply(big_test, big_test);
-  EXPECT_EQ(0, BigintOperations::Compare(big, big_test));
-  big = BigintOperations::NewFromInt64(-kValue64);
-  big_test = BigintOperations::Subtract(
-      Bigint::Handle(BigintOperations::NewFromInt64(0)), big_test);
-  EXPECT_EQ(0, BigintOperations::Compare(big, big_test));
-
-  const Bigint& one = Bigint::Handle(BigintOperations::NewFromInt64(1));
-  big = BigintOperations::NewFromInt64(kMinInt64);
-  EXPECT(BigintOperations::FitsIntoInt64(big));
-  int64_t back = BigintOperations::ToInt64(big);
-  EXPECT_EQ(kMinInt64, back);
-
-  big = BigintOperations::Subtract(big, one);
-  EXPECT(!BigintOperations::FitsIntoInt64(big));
-
-  big = BigintOperations::NewFromInt64(kMaxInt64);
-  EXPECT(BigintOperations::FitsIntoInt64(big));
-  back = BigintOperations::ToInt64(big);
-  EXPECT_EQ(kMaxInt64, back);
-
-  big = BigintOperations::Add(big, one);
-  EXPECT(!BigintOperations::FitsIntoInt64(big));
-}
-
-
-TEST_CASE(BigintUint64) {
-  const Bigint& one = Bigint::Handle(BigintOperations::NewFromUint64(1));
-  EXPECT(BigintOperations::FitsIntoInt64(one));
-  EXPECT(BigintOperations::FitsIntoUint64(one));
-
-  Bigint& big = Bigint::Handle(BigintOperations::NewFromUint64(kMaxUint64));
-  EXPECT(!BigintOperations::FitsIntoInt64(big));
-  EXPECT(BigintOperations::FitsIntoUint64(big));
-
-  uint64_t back = BigintOperations::ToUint64(big);
-  EXPECT_EQ(kMaxUint64, back);
-
-  big = BigintOperations::Add(big, one);
-  EXPECT(!BigintOperations::FitsIntoInt64(big));
-  EXPECT(!BigintOperations::FitsIntoUint64(big));
-
-  big = BigintOperations::Subtract(big, one);
-  EXPECT(!BigintOperations::FitsIntoInt64(big));
-  EXPECT(BigintOperations::FitsIntoUint64(big));
-
-  big = BigintOperations::ShiftRight(big, 1);
-  EXPECT(BigintOperations::FitsIntoInt64(big));
-  EXPECT(BigintOperations::FitsIntoUint64(big));
-}
-
-
-TEST_CASE(BigintDouble) {
-  Smi& smi = Smi::Handle(Smi::New(5));
-  Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi));
-  Double& dbl = Double::Handle(BigintOperations::ToDouble(bigint));
-  EXPECT_EQ(5.0, dbl.value());
-
-  smi = Smi::New(0);
-  bigint = BigintOperations::NewFromSmi(smi);
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(0.0, dbl.value());
-  double zero = dbl.value();
-
-  smi = Smi::New(-12345678);
-  bigint = BigintOperations::NewFromSmi(smi);
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(-1.2345678e+7, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("1");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1.0, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("123456");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(123456.0, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("123456789");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(123456789.0, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("12345678901234567");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(12345678901234568.0, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("98765432109876");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(9.8765432109876e+13, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("0x17777777777778");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(6605279453476728.0, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("0x37777777777778");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(15612478708217720.0, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("0x177777777777781234567");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1.7730912021014563e+24, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("0x177777777777788000000");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1.7730912021014563e+24, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("0x177777777777788000001");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1.7730912021014565e+24, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("0x177777777777798000000");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1.7730912021014568e+24, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("0x177777777777798000001");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1.7730912021014568e+24, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("0x377777777777790000000");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(4.1909428413307146e+24, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("0x377777777777790000001");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(4.190942841330715e+24, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("0x377777777777730000000");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(4.1909428413307135e+24, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("0x377777777777730000001");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(4.1909428413307135e+24, dbl.value());
-
-  // Reduced precision.
-  bigint = BigintOperations::NewFromCString(
-      "9876543210987654321098765432109876543210");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(9.8765432109876546e+39, dbl.value());
-
-  bigint = BigintOperations::NewFromCString(
-      "12345678901234567890123456789012345678901234567890"
-      "12345678901234567890123456789012345678901234567890"
-      "12345678901234567890123456789012345678901234567890"
-      "12345678901234567890123456789012345678901234567890"
-      "12345678901234567890123456789012345678901234567890"
-      "12345678901234567890123456789012345678901234567890"
-      "12345678901234567890123456789012345678901234567890"
-      "12345678901234567890123456789012345678901234567890"
-      "12345678901234567890123456789012345678901234567890"
-      "12345678901234567890123456789012345678901234567890");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1.0/zero, dbl.value());
-
-  bigint = BigintOperations::NewFromCString(
-      "17976931348623157081452742373170435679807056752584"
-      "49965989174768031572607800285387605895586327668781"
-      "71540458953514382464234321326889464182768467546703"
-      "53751698604991057655128207624549009038932894407586"
-      "85084551339423045832369032229481658085593321233482"
-      "74797826204144723168738177180919299881250404026184"
-      "124858368");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1.7976931348623157e308, dbl.value());
-
-  bigint = BigintOperations::NewFromCString(
-      "17976931348623159077293051907890247336179769789423"
-      "06572734300811577326758055009631327084773224075360"
-      "21120113879871393357658789768814416622492847430639"
-      "47412437776789342486548527630221960124609411945308"
-      "29520850057688381506823424628814739131105408272371"
-      "63350510684586298239947245938479716304835356329624"
-      "224137216");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1.0/zero, dbl.value());
-
-  bigint = BigintOperations::NewFromCString(
-      "17976931348623158079372897140530341507993413271003"
-      "78269361737789804449682927647509466490179775872070"
-      "96330286416692887910946555547851940402630657488671"
-      "50582068190890200070838367627385484581771153176447"
-      "57302700698555713669596228429148198608349364752927"
-      "19074168444365510704342711559699508093042880177904"
-      "174497792");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1.0/zero, dbl.value());
-
-  bigint = BigintOperations::NewFromCString(
-      "17976931348623158079372897140530341507993413271003"
-      "78269361737789804449682927647509466490179775872070"
-      "96330286416692887910946555547851940402630657488671"
-      "50582068190890200070838367627385484581771153176447"
-      "57302700698555713669596228429148198608349364752927"
-      "19074168444365510704342711559699508093042880177904"
-      "174497791");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1.7976931348623157e308, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("100000000000000000000000");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1e+23, dbl.value());
-
-  bigint = BigintOperations::NewFromCString("100000000000000000000001");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1.0000000000000001e+23, dbl.value());
-
-  // Same but shifted 64 bits to the left.
-  bigint = BigintOperations::NewFromCString(
-      "1844674407370955161600000000000000000000000");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1.844674407370955e+42, dbl.value());
-
-  bigint = BigintOperations::NewFromCString(
-      "1844674407370955161600000000000000000000001");
-  dbl = BigintOperations::ToDouble(bigint);
-  EXPECT_EQ(1.8446744073709553e+42, dbl.value());
-}
-
-
-TEST_CASE(BigintHexStrings) {
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("0x0"));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT_EQ(0, smi.Value());
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("0x1"));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT_EQ(1, smi.Value());
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("0x123"));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT_EQ(0x123, smi.Value());
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("0x123"));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("0x123", str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("0xaBcEf"));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("0xABCEF", str);
-  }
-
-  {
-    const char* in = "0x123456789";
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString(in));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ(in, str);
-  }
-
-  {
-    const char* in = "0xFFFFFFF";
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString(in));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ(in, str);
-  }
-
-  {
-    const char* in = "0x10000000";
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString(in));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ(in, str);
-  }
-
-  {
-    const char* in = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ(in, str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("-0x123"));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT_EQ(-0x123, smi.Value());
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("-0x123"));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("-0x123", str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("-0xaBcEf"));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("-0xABCEF", str);
-  }
-
-  {
-    const char* in = "-0x123456789";
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ(in, str);
-  }
-
-  {
-    const char* in = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ(in, str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("0x00000123"));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT_EQ(0x123, smi.Value());
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("0x000000123"));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("0x123", str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("0x0000aBcEf"));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("0xABCEF", str);
-  }
-
-  {
-    const char* in = "0x00000000000000000000000000000000000000000000123456789";
-    const char* out =                                            "0x123456789";
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ(out, str);
-  }
-
-  {
-    const char* in = "0x00000123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
-    const char* out =     "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ(out, str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("-0x00000123"));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT_EQ(-0x123, smi.Value());
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("-0x00000123"));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("-0x123", str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("-0x000aBcEf"));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("-0xABCEF", str);
-  }
-
-  {
-    const char* in = "-0x00000000000000000000000000000000000000000000123456789";
-    const char* out =                                            "-0x123456789";
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ(out, str);
-  }
-
-  {
-    const char* in = "-0x0000123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
-    const char* out =    "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ(out, str);
-  }
-  {
-    const char* test = "12345678901234567890";
-    const char* out = "0xAB54A98CEB1F0AD2";
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString(test));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ(out, str);
-  }
-  {
-    const char* test = "-12345678901234567890";
-    const char* out = "-0xAB54A98CEB1F0AD2";
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString(test));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ(out, str);
-  }
-}
-
-
-TEST_CASE(BigintDecStrings) {
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("0x0"));
-    const char* str =
-        BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("0", str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("0x123"));
-    const char* str =
-        BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("291", str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("0xaBcEf"));
-    const char* str =
-        BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("703727", str);
-  }
-
-  {
-    const char* in = "0x123456789";
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString(in));
-    const char* str =
-        BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("4886718345", str);
-  }
-
-  {
-    const char* in = "0xFFFFFFF";
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString(in));
-    const char* str =
-        BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("268435455", str);
-  }
-
-  {
-    const char* in = "0x10000000";
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString(in));
-    const char* str =
-        BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("268435456", str);
-  }
-
-  {
-    const char* in = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
-    const char* str =
-        BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("7141946863373290020600059860922167424469804758405880798960",
-        str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("-0x123"));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT_EQ(-291, smi.Value());
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("-0x123"));
-    const char* str =
-        BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("-291", str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("-0xaBcEf"));
-    const char* str =
-        BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("-703727", str);
-  }
-
-  {
-    const char* in = "-0x123456789";
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
-    const char* str =
-        BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("-4886718345", str);
-  }
-
-  {
-    const char* in = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
-    const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
-    const char* str =
-        BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("-7141946863373290020600059860922167424469804758405880798960",
-        str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("0x00000123"));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT_EQ(0x123, smi.Value());
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("0x000000123"));
-    const char* str =
-        BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("291", str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("100000000000000000000000000000000"));
-    const char* str =
-        BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("100000000000000000000000000000000", str);
-  }
-}
-
-
-static void TestBigintCompare(const char* a, const char* b, int compare) {
-  const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
-  const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b));
-  int computed_compare = BigintOperations::Compare(bigint_a, bigint_b);
-  int inverted_compare = BigintOperations::Compare(bigint_b, bigint_a);
-  if (compare == 0) {
-    EXPECT(computed_compare == 0);
-    EXPECT(inverted_compare == 0);
-  } else if (compare < 0) {
-    ASSERT(computed_compare < 0);
-    EXPECT(computed_compare < 0);
-    EXPECT(inverted_compare > 0);
-  } else {
-    ASSERT(compare > 0);
-    EXPECT(computed_compare > 0);
-    EXPECT(inverted_compare < 0);
-  }
-}
-
-
-TEST_CASE(BigintCompare) {
-  TestBigintCompare("0x0", "0x0", 0);
-  TestBigintCompare("0x1", "0x1", 0);
-  TestBigintCompare("-0x1", "-0x1", 0);
-  TestBigintCompare("0x1234567", "0x1234567", 0);
-  TestBigintCompare("-0x1234567", "-0x1234567", 0);
-  TestBigintCompare("0x12345678", "0x12345678", 0);
-  TestBigintCompare("-0x12345678", "-0x12345678", 0);
-  TestBigintCompare("0x123456789ABCDEF0", "0x123456789ABCDEF0", 0);
-  TestBigintCompare("-0x123456789ABCDEF0", "-0x123456789ABCDEF0", 0);
-  TestBigintCompare("0x123456789ABCDEF01", "0x123456789ABCDEF01", 0);
-  TestBigintCompare("-0x123456789ABCDEF01", "-0x123456789ABCDEF01", 0);
-  TestBigintCompare("0x1", "0x0", 1);
-  TestBigintCompare("-0x1", "-0x2", 1);
-  TestBigintCompare("0x1234567", "0x1234566", 1);
-  TestBigintCompare("-0x1234567", "-0x1234568", 1);
-  TestBigintCompare("0x12345678", "0x12345677", 1);
-  TestBigintCompare("-0x12345678", "-0x12345679", 1);
-  TestBigintCompare("0x123456789ABCDEF1", "0x123456789ABCDEF0", 1);
-  TestBigintCompare("-0x123456789ABCDEF0", "-0x123456789ABCDEF1", 1);
-  TestBigintCompare("0x123456789ABCDEF02", "0x123456789ABCDEF01", 1);
-  TestBigintCompare("-0x123456789ABCDEF00", "-0x123456789ABCDEF01", 1);
-  TestBigintCompare("0x10000000", "0xFFFFFFF", 1);
-  TestBigintCompare("-0x10000000", "-0xFFFFFFF", -1);
-  TestBigintCompare("0x100000000", "0xFFFFFFFF", 1);
-  TestBigintCompare("-0x100000000", "-0xFFFFFFFF", -1);
-  TestBigintCompare("0x10000000000000000", "0xFFFFFFFFFFFFFFFF", 1);
-  TestBigintCompare("-0x10000000000000000", "-0xFFFFFFFFFFFFFFFF", -1);
-  TestBigintCompare("0x10000000000000000", "0x0", 1);
-  TestBigintCompare("-0x10000000000000000", "0x0", -1);
-  TestBigintCompare("-0x1234567", "0x1234566", -1);
-  TestBigintCompare("-0x1234567", "0x1234568", -1);
-  TestBigintCompare("-0x12345678", "0x12345677", -1);
-  TestBigintCompare("-0x12345678", "0x12345670", -1);
-  TestBigintCompare("-0x123456789ABCDEF1", "0x123456789ABCDEF0", -1);
-  TestBigintCompare("-0x123456789ABCDEF0", "0x123456789ABCDEF1", -1);
-  TestBigintCompare("-0x123456789ABCDEF02", "0x123456789ABCDEF01", -1);
-  TestBigintCompare("-0x123456789ABCDEF00", "0x123456789ABCDEF01", -1);
-  TestBigintCompare("-0x10000000", "0xFFFFFFF", -1);
-  TestBigintCompare("-0x10000000", "0xFFFFFFF", -1);
-  TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1);
-  TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1);
-  TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1);
-  TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1);
-  TestBigintCompare("-0x10000000000000000", "0x0", -1);
-  TestBigintCompare("-0x10000000000000000", "0x0", -1);
-}
-
-
-TEST_CASE(BigintDecimalStrings) {
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("0"));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT_EQ(0, smi.Value());
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("1"));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT_EQ(1, smi.Value());
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("703710"));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("0xABCDE", str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("11259375"));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("0xABCDEF", str);
-  }
-
-  {
-    const Bigint& bigint =
-        Bigint::Handle(BigintOperations::NewFromCString("1311768467463790320"));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("0x123456789ABCDEF0", str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("-0"));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT_EQ(0, smi.Value());
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("-1"));
-    EXPECT(BigintOperations::FitsIntoSmi(bigint));
-    const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
-    EXPECT_EQ(-1, smi.Value());
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("-703710"));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("-0xABCDE", str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("-11259375"));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("-0xABCDEF", str);
-  }
-
-  {
-    const Bigint& bigint = Bigint::Handle(
-        BigintOperations::NewFromCString("-1311768467463790320"));
-    const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
-    EXPECT_STREQ("-0x123456789ABCDEF0", str);
-  }
-}
-
-
-static void TestBigintAddSubtract(const char* a,
-                                  const char* b,
-                                  const char* sum) {
-  const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
-  const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b));
-  const Bigint& bigint_sum =
-      Bigint::Handle(BigintOperations::NewFromCString(sum));
-  const Bigint& computed_sum =
-      Bigint::Handle(BigintOperations::Add(bigint_a, bigint_b));
-  const Bigint& computed_difference1 =
-      Bigint::Handle(BigintOperations::Subtract(bigint_sum, bigint_a));
-  const Bigint& computed_difference2 =
-      Bigint::Handle(BigintOperations::Subtract(bigint_sum, bigint_b));
-  const char* str_sum = BigintOperations::ToHexCString(computed_sum,
-                                                       &ZoneAllocator);
-  EXPECT_STREQ(sum, str_sum);
-  const char* str_difference1 =
-      BigintOperations::ToHexCString(computed_difference1, &ZoneAllocator);
-  EXPECT_STREQ(b, str_difference1);
-  const char* str_difference2 =
-      BigintOperations::ToHexCString(computed_difference2, &ZoneAllocator);
-  EXPECT_STREQ(a, str_difference2);
-}
-
-
-TEST_CASE(BigintAddSubtract) {
-  const char* zero = "0x0";
-  const char* one = "0x1";
-  const char* minus_one = "-0x1";
-
-  TestBigintAddSubtract(zero, zero, zero);
-  TestBigintAddSubtract(zero, one, one);
-  TestBigintAddSubtract(one, zero, one);
-  TestBigintAddSubtract(one, one, "0x2");
-  TestBigintAddSubtract(minus_one, minus_one, "-0x2");
-  TestBigintAddSubtract("0x123", zero, "0x123");
-  TestBigintAddSubtract(zero, "0x123", "0x123");
-  TestBigintAddSubtract("0x123", one, "0x124");
-  TestBigintAddSubtract(one, "0x123", "0x124");
-  TestBigintAddSubtract("0xFFFFFFF", one,  // 28 bit overflow.
-                        "0x10000000");
-  TestBigintAddSubtract("0xFFFFFFFF", one,  // 32 bit overflow.
-                        "0x100000000");
-  TestBigintAddSubtract("0xFFFFFFFFFFFFFF", one,  // 56 bit overflow.
-                        "0x100000000000000");
-  TestBigintAddSubtract("0xFFFFFFFFFFFFFFFF", one,  // 64 bit overflow.
-                        "0x10000000000000000");
-  TestBigintAddSubtract("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",  // 128 bit.
-                        one,
-                        "0x100000000000000000000000000000000");
-  TestBigintAddSubtract("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
-                        one,
-                        "0x10000000000000000000000000000000000000000000");
-  TestBigintAddSubtract("0x8000000",  // 28 bit overflow.
-                        "0x8000000",
-                        "0x10000000");
-  TestBigintAddSubtract("0x80000000",  // 32 bit overflow.
-                        "0x80000000",
-                        "0x100000000");
-  TestBigintAddSubtract("0x80000000000000",  // 56 bit overflow.
-                        "0x80000000000000",
-                        "0x100000000000000");
-  TestBigintAddSubtract("0x8000000000000000",  // 64 bit overflow.
-                        "0x8000000000000000",
-                        "0x10000000000000000");
-  TestBigintAddSubtract("0x80000000000000000000000000000000",  // 128 bit.
-                        "0x80000000000000000000000000000000",
-                        "0x100000000000000000000000000000000");
-  TestBigintAddSubtract("0x8000000000000000000000000000000000000000000",
-                        "0x8000000000000000000000000000000000000000000",
-                        "0x10000000000000000000000000000000000000000000");
-
-  {
-    const char* a = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
-    const char* sum1 = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF1";
-    const char* times2 = "0x2468ACF13579BDE02468ACF121579BDE02468ACF13579BDE0";
-    TestBigintAddSubtract(a, zero, a);
-    TestBigintAddSubtract(a, one, sum1);
-    TestBigintAddSubtract(a, a, times2);
-  }
-
-  TestBigintAddSubtract("-0x123", minus_one, "-0x124");
-  TestBigintAddSubtract(minus_one, "-0x123", "-0x124");
-  TestBigintAddSubtract("-0xFFFFFFF", minus_one,  // 28 bit overflow.
-                        "-0x10000000");
-  TestBigintAddSubtract("-0xFFFFFFFF", minus_one,  // 32 bit overflow.
-                        "-0x100000000");
-  TestBigintAddSubtract("-0xFFFFFFFFFFFFFF", minus_one,  // 56 bit overflow.
-                        "-0x100000000000000");
-  TestBigintAddSubtract("-0xFFFFFFFFFFFFFFFF", minus_one,  // 64 bit overflow.
-                        "-0x10000000000000000");
-  TestBigintAddSubtract("-0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",  // 128 bit.
-                        minus_one,
-                        "-0x100000000000000000000000000000000");
-  TestBigintAddSubtract("-0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
-                        minus_one,
-                        "-0x10000000000000000000000000000000000000000000");
-  TestBigintAddSubtract("-0x8000000",  // 28 bit overflow.
-                        "-0x8000000",
-                        "-0x10000000");
-  TestBigintAddSubtract("-0x80000000",  // 32 bit overflow.
-                        "-0x80000000",
-                        "-0x100000000");
-  TestBigintAddSubtract("-0x80000000000000",  // 56 bit overflow.
-                        "-0x80000000000000",
-                        "-0x100000000000000");
-  TestBigintAddSubtract("-0x8000000000000000",  // 64 bit overflow.
-                        "-0x8000000000000000",
-                        "-0x10000000000000000");
-  TestBigintAddSubtract("-0x80000000000000000000000000000000",  // 128 bit.
-                        "-0x80000000000000000000000000000000",
-                        "-0x100000000000000000000000000000000");
-  TestBigintAddSubtract("-0x8000000000000000000000000000000000000000000",
-                        "-0x8000000000000000000000000000000000000000000",
-                        "-0x10000000000000000000000000000000000000000000");
-
-  {
-    const char* a = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
-    const char* sum1 = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF1";
-    const char* times2 = "-0x2468ACF13579BDE02468ACF121579BDE02468ACF13579BDE0";
-    TestBigintAddSubtract(a, zero, a);
-    TestBigintAddSubtract(a, minus_one, sum1);
-    TestBigintAddSubtract(a, a, times2);
-  }
-
-  TestBigintAddSubtract("0x10000000000000000000000000000000000000000000",
-                        "0xFFFF",
-                        "0x1000000000000000000000000000000000000000FFFF");
-  TestBigintAddSubtract("0x10000000000000000000000000000000000000000000",
-                        "0xFFFF00000000",
-                        "0x10000000000000000000000000000000FFFF00000000");
-  TestBigintAddSubtract("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
-                        "0x100000000",
-                        "0x1000000000000000000000000000000000000FFFFFFFF");
-  TestBigintAddSubtract("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
-                        "0x10000000000000000000",
-                        "0x10000000000000000000000000FFFFFFFFFFFFFFFFFFF");
-
-  TestBigintAddSubtract("0xB", "-0x7", "0x4");
-  TestBigintAddSubtract("-0xB", "-0x7", "-0x12");
-  TestBigintAddSubtract("0xB", "0x7", "0x12");
-  TestBigintAddSubtract("-0xB", "0x7", "-0x4");
-  TestBigintAddSubtract("-0x7", "0xB", "0x4");
-  TestBigintAddSubtract("-0x7", "-0xB", "-0x12");
-  TestBigintAddSubtract("0x7", "0xB", "0x12");
-  TestBigintAddSubtract("0x7", "-0xB", "-0x4");
-}
-
-
-static void TestBigintShift(const char* a, int amount, const char* result) {
-  const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
-  const Bigint& shifted =
-      Bigint::Handle(BigintOperations::ShiftLeft(bigint_a, amount));
-  const char* str_shifted = BigintOperations::ToHexCString(shifted,
-                                                           &ZoneAllocator);
-  EXPECT_STREQ(result, str_shifted);
-  const Bigint& back_shifted =
-      Bigint::Handle(BigintOperations::ShiftRight(shifted, amount));
-  const char* str_back_shifted = BigintOperations::ToHexCString(back_shifted,
-                                                                &ZoneAllocator);
-  EXPECT_STREQ(a, str_back_shifted);
-}
-
-
-TEST_CASE(BigintLeftShift) {
-  const char* zero = "0x0";
-  const char* one = "0x1";
-  const char* minus_one = "-0x1";
-
-  TestBigintShift(zero, 0, zero);
-  TestBigintShift(one, 0, one);
-  TestBigintShift("0x1234", 0, "0x1234");
-  TestBigintShift(zero, 100000, zero);
-  TestBigintShift(one, 1, "0x2");
-  TestBigintShift(one, 28, "0x10000000");
-  TestBigintShift(one, 32, "0x100000000");
-  TestBigintShift(one, 64, "0x10000000000000000");
-  TestBigintShift("0x5", 28, "0x50000000");
-  TestBigintShift("0x5", 32, "0x500000000");
-  TestBigintShift("0x5", 56, "0x500000000000000");
-  TestBigintShift("0x5", 64, "0x50000000000000000");
-  TestBigintShift("0x5", 128, "0x500000000000000000000000000000000");
-  TestBigintShift("0x5", 27, "0x28000000");
-  TestBigintShift("0x5", 31, "0x280000000");
-  TestBigintShift("0x5", 55, "0x280000000000000");
-  TestBigintShift("0x5", 63, "0x28000000000000000");
-  TestBigintShift("0x5", 127, "0x280000000000000000000000000000000");
-  TestBigintShift("0x8000001", 1, "0x10000002");
-  TestBigintShift("0x80000001", 1, "0x100000002");
-  TestBigintShift("0x8000000000000001", 1, "0x10000000000000002");
-  TestBigintShift("0x8000001", 29, "0x100000020000000");
-  TestBigintShift("0x80000001", 33, "0x10000000200000000");
-  TestBigintShift("0x8000000000000001", 65,
-                  "0x100000000000000020000000000000000");
-  TestBigintShift(minus_one, 0, minus_one);
-  TestBigintShift("-0x1234", 0, "-0x1234");
-  TestBigintShift(minus_one, 1, "-0x2");
-  TestBigintShift(minus_one, 28, "-0x10000000");
-  TestBigintShift(minus_one, 32, "-0x100000000");
-  TestBigintShift(minus_one, 64, "-0x10000000000000000");
-  TestBigintShift("-0x5", 28, "-0x50000000");
-  TestBigintShift("-0x5", 32, "-0x500000000");
-  TestBigintShift("-0x5", 64, "-0x50000000000000000");
-  TestBigintShift("-0x5", 27, "-0x28000000");
-  TestBigintShift("-0x5", 31, "-0x280000000");
-  TestBigintShift("-0x5", 63, "-0x28000000000000000");
-  TestBigintShift("-0x8000001", 1, "-0x10000002");
-  TestBigintShift("-0x80000001", 1, "-0x100000002");
-  TestBigintShift("-0x8000000000000001", 1, "-0x10000000000000002");
-  TestBigintShift("-0x8000001", 29, "-0x100000020000000");
-  TestBigintShift("-0x80000001", 33, "-0x10000000200000000");
-  TestBigintShift("-0x8000000000000001", 65,
-                  "-0x100000000000000020000000000000000");
-}
-
-
-static void TestBigintRightShift(
-    const char* a, int amount, const char* result) {
-  const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
-  const Bigint& shifted =
-      Bigint::Handle(BigintOperations::ShiftRight(bigint_a, amount));
-  const char* str_shifted = BigintOperations::ToHexCString(shifted,
-                                                           &ZoneAllocator);
-  if (strcmp(result, str_shifted)) {
-    FAIL2("%s >> %d", a, amount);
-  }
-  EXPECT_STREQ(result, str_shifted);
-}
-
-
-TEST_CASE(BigintRightShift) {
-  const char* zero = "0x0";
-  const char* one = "0x1";
-  const char* minus_one = "-0x1";
-
-  TestBigintRightShift(one, 1, zero);
-  TestBigintRightShift(minus_one, 1, minus_one);
-  TestBigintRightShift("-0x2", 1, minus_one);
-  TestBigintRightShift("0x12345678", 29, zero);
-  TestBigintRightShift("-0x12345678", 29, minus_one);
-  TestBigintRightShift("-0x12345678", 100, minus_one);
-  TestBigintRightShift("0x5", 1, "0x2");
-  TestBigintRightShift("0x5", 2, "0x1");
-  TestBigintRightShift("-0x5", 1, "-0x3");
-  TestBigintRightShift("-0x5", 2, "-0x2");
-  TestBigintRightShift("0x10000001", 28, one);
-  TestBigintRightShift("0x100000001", 32, one);
-  TestBigintRightShift("0x10000000000000001", 64, one);
-  TestBigintRightShift("-0x10000001", 28, "-0x2");
-  TestBigintRightShift("-0x100000001", 32, "-0x2");
-  TestBigintRightShift("-0x10000000000000001", 64, "-0x2");
-  TestBigintRightShift("0x30000000", 29, one);
-  TestBigintRightShift("0x300000000", 33, one);
-  TestBigintRightShift("0x30000000000000000", 65, one);
-  TestBigintRightShift("-0x30000000", 29, "-0x2");
-  TestBigintRightShift("-0x300000000", 33, "-0x2");
-  TestBigintRightShift("-0x30000000000000000", 65, "-0x2");
-}
-
-
-static void TestBigintBitAnd(const char* a, const char* b, const char* result) {
-  const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
-  const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b));
-  const Bigint& anded =
-      Bigint::Handle(BigintOperations::BitAnd(bigint_a, bigint_b));
-  const char* str_anded = BigintOperations::ToHexCString(anded, &ZoneAllocator);
-  EXPECT_STREQ(result, str_anded);
-  const Bigint& anded2 =
-      Bigint::Handle(BigintOperations::BitAnd(bigint_b, bigint_a));
-  const char* str_anded2 = BigintOperations::ToHexCString(anded2,
-                                                          &ZoneAllocator);
-  EXPECT_STREQ(result, str_anded2);
-}
-
-
-TEST_CASE(BigintBitAnd) {
-  const char* zero = "0x0";
-  const char* one = "0x1";
-  const char* minus_one = "-0x1";
-
-  TestBigintBitAnd(one, zero, zero);
-  TestBigintBitAnd(one, one, one);
-  TestBigintBitAnd(minus_one, zero, zero);
-  TestBigintBitAnd(minus_one, one, one);
-  TestBigintBitAnd(minus_one, minus_one, minus_one);
-  TestBigintBitAnd("0x5", "0x3", one);
-  TestBigintBitAnd("0x5", minus_one, "0x5");
-  TestBigintBitAnd("0x50000000", one, zero);
-  TestBigintBitAnd("0x50000000", minus_one, "0x50000000");
-  TestBigintBitAnd("0x500000000", one, zero);
-  TestBigintBitAnd("0x500000000", minus_one, "0x500000000");
-  TestBigintBitAnd("0x50000000000000000", one, zero);
-  TestBigintBitAnd("0x50000000000000000", minus_one, "0x50000000000000000");
-  TestBigintBitAnd("-0x50000000", "-0x50000000", "-0x50000000");
-  TestBigintBitAnd("-0x500000000", "-0x500000000", "-0x500000000");
-  TestBigintBitAnd("-0x50000000000000000",
-                   "-0x50000000000000000",
-                   "-0x50000000000000000");
-  TestBigintBitAnd("0x1234567890ABCDEF012345678",
-                   "0x876543210FEDCBA0987654321",
-                   "0x224422000A9C9A0002244220");
-  TestBigintBitAnd("-0x1234567890ABCDEF012345678",
-                   "-0x876543210FEDCBA0987654321",
-                   "-0x977557799FEFCFEF997755778");
-  TestBigintBitAnd("0x1234567890ABCDEF012345678",
-                   "-0x876543210FEDCBA0987654321",
-                   "0x101014589002044F010101458");
-  TestBigintBitAnd("0x1234567890ABCDEF012345678FFFFFFFFFFFFFFFFFFFFFFFFF",
-                   "-0x876543210FEDCBA0987654321",
-                   "0x1234567890ABCDEF012345678789ABCDEF012345F6789ABCDF");
-  TestBigintBitAnd("0x12345678", "0xFFFFFFF", "0x2345678");
-  TestBigintBitAnd("0x123456789", "0xFFFFFFFF", "0x23456789");
-  TestBigintBitAnd("-0x10000000", "0xFFFFFFF", "0x0");
-  TestBigintBitAnd("-0x100000000", "0xFFFFFFFF", "0x0");
-  TestBigintBitAnd("-0x10000001", "0xFFFFFFF", "0xFFFFFFF");
-  TestBigintBitAnd("-0x100000001", "0xFFFFFFFF", "0xFFFFFFFF");
-  TestBigintBitAnd("-0x10000001", "0x3FFFFFFF", "0x2FFFFFFF");
-  TestBigintBitAnd("-0x100000001", "0x3FFFFFFFF", "0x2FFFFFFFF");
-  TestBigintBitAnd("-0x10000000000000001",
-                   "0x3FFFFFFFFFFFFFFFF",
-                   "0x2FFFFFFFFFFFFFFFF");
-  TestBigintBitAnd("-0x100000000000000", "0xFFFFFFFFFFFFFF", "0x0");
-  TestBigintBitAnd("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", "0x0");
-  TestBigintBitAnd("-0x300000000000000",
-                   "0xFFFFFFFFFFFFFFF",
-                   "0xD00000000000000");
-  TestBigintBitAnd("-0x30000000000000000",
-                   "0xFFFFFFFFFFFFFFFFF",
-                   "0xD0000000000000000");
-  TestBigintBitAnd("-0x10000000", "-0x10000000", "-0x10000000");
-  TestBigintBitAnd("-0x100000000", "-0x100000000", "-0x100000000");
-  TestBigintBitAnd("-0x100000000000000",
-                   "-0x100000000000000",
-                   "-0x100000000000000");
-  TestBigintBitAnd("-0x10000000000000000",
-                   "-0x10000000000000000",
-                   "-0x10000000000000000");
-  TestBigintBitAnd("-0x3", "-0x2", "-0x4");
-  TestBigintBitAnd("-0x10000000", "-0x10000001", "-0x20000000");
-  TestBigintBitAnd("-0x100000000", "-0x100000001", "-0x200000000");
-  TestBigintBitAnd("-0x100000000000000",
-                   "-0x100000000000001",
-                   "-0x200000000000000");
-  TestBigintBitAnd("-0x10000000000000000",
-                   "-0x10000000000000001",
-                   "-0x20000000000000000");
-  TestBigintBitAnd("0x123456789ABCDEF01234567890",
-                   "0x3FFFFFFF",  // Max Smi for 32 bits.
-                   "0x34567890");
-  TestBigintBitAnd("0x123456789ABCDEF01274567890",
-                   "0x3FFFFFFF",  // Max Smi for 32 bits.
-                   "0x34567890");
-  TestBigintBitAnd("0x123456789ABCDEF01234567890",
-                   "0x40000000",  // Max Smi for 32 bits + 1.
-                   "0x0");
-  TestBigintBitAnd("0x123456789ABCDEF01274567890",
-                   "0x40000000",  // Max Smi for 32 bits + 1.
-                   "0x40000000");
-  TestBigintBitAnd("0x123456789ABCDEF01234567890",
-                   "0x3FFFFFFFFFFFFFFF",  // Max Smi for 64 bits.
-                   "0x3CDEF01234567890");
-  TestBigintBitAnd("0x123456789ACCDEF01234567890",
-                   "0x4000000000000000",  // Max Smi for 64 bits + 1.
-                   "0x4000000000000000");
-  TestBigintBitAnd("0x123456789ABCDEF01234567890",
-                   "0x4000000000000000",  // Max Smi for 64 bits + 1.
-                   "0x0");
-}
-
-
-static void TestBigintBitOr(const char* a, const char* b, const char* result) {
-  const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
-  const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b));
-  const Bigint& ored =
-      Bigint::Handle(BigintOperations::BitOr(bigint_a, bigint_b));
-  const char* str_ored = BigintOperations::ToHexCString(ored, &ZoneAllocator);
-  EXPECT_STREQ(result, str_ored);
-  const Bigint& ored2 =
-      Bigint::Handle(BigintOperations::BitOr(bigint_b, bigint_a));
-  const char* str_ored2 = BigintOperations::ToHexCString(ored2, &ZoneAllocator);
-  EXPECT_STREQ(result, str_ored2);
-}
-
-
-TEST_CASE(BigintBitOr) {
-  const char* zero = "0x0";
-  const char* one = "0x1";
-  const char* minus_one = "-0x1";
-
-  TestBigintBitOr(one, zero, one);
-  TestBigintBitOr(one, one, one);
-  TestBigintBitOr(minus_one, zero, minus_one);
-  TestBigintBitOr(minus_one, one, minus_one);
-  TestBigintBitOr(minus_one, minus_one, minus_one);
-  TestBigintBitOr("-0x3", one, "-0x3");
-  TestBigintBitOr("0x5", "0x3", "0x7");
-  TestBigintBitOr("0x5", minus_one, minus_one);
-  TestBigintBitOr("0x5", zero, "0x5");
-  TestBigintBitOr("0x50000000", one, "0x50000001");
-  TestBigintBitOr("0x50000000", minus_one, minus_one);
-  TestBigintBitOr("0x500000000", one, "0x500000001");
-  TestBigintBitOr("0x500000000", minus_one, minus_one);
-  TestBigintBitOr("0x50000000000000000", one, "0x50000000000000001");
-  TestBigintBitOr("0x50000000000000000", minus_one, minus_one);
-  TestBigintBitOr("-0x50000000", "-0x50000000", "-0x50000000");
-  TestBigintBitOr("-0x500000000", "-0x500000000", "-0x500000000");
-  TestBigintBitOr("-0x50000000000000000",
-                  "-0x50000000000000000",
-                  "-0x50000000000000000");
-  TestBigintBitOr("0x1234567890ABCDEF012345678",
-                  "0x876543210FEDCBA0987654321",
-                  "0x977557799FEFCFEF997755779");
-  TestBigintBitOr("-0x1234567890ABCDEF012345678",
-                  "-0x876543210FEDCBA0987654321",
-                  "-0x224422000A9C9A0002244221");
-  TestBigintBitOr("0x1234567890ABCDEF012345678",
-                  "-0x876543210FEDCBA0987654321",
-                  "-0x854101010F440200985410101");
-  TestBigintBitOr("0x1234567890ABCDEF012345678FFFFFFFFFFFFFFFFFFFFFFFFF",
-                  "-0x876543210FEDCBA0987654321",
-                  "-0x1");
-  TestBigintBitOr("0x12345678", "0xFFFFFFF", "0x1FFFFFFF");
-  TestBigintBitOr("0x123456789", "0xFFFFFFFF", "0x1FFFFFFFF");
-  TestBigintBitOr("-0x10000000", "0xFFFFFFF", "-0x1");
-  TestBigintBitOr("-0x100000000", "0xFFFFFFFF", "-0x1");
-  TestBigintBitOr("-0x10000001", "0xFFFFFFF", "-0x10000001");
-  TestBigintBitOr("-0x100000001", "0xFFFFFFFF", "-0x100000001");
-  TestBigintBitOr("-0x10000001", "0x3FFFFFFF", "-0x1");
-  TestBigintBitOr("-0x100000001", "0x3FFFFFFFF", "-0x1");
-  TestBigintBitOr("-0x10000000000000001", "0x3FFFFFFFFFFFFFFFF", "-0x1");
-  TestBigintBitOr("-0x100000000000000", "0xFFFFFFFFFFFFFF", "-0x1");
-  TestBigintBitOr("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", "-0x1");
-  TestBigintBitOr("-0x300000000000000", "0xFFFFFFFFFFFFFFF", "-0x1");
-  TestBigintBitOr("-0x30000000000000000", "0xFFFFFFFFFFFFFFFFF", "-0x1");
-  TestBigintBitOr("-0x10000000", "-0x10000000", "-0x10000000");
-  TestBigintBitOr("-0x100000000", "-0x100000000", "-0x100000000");
-  TestBigintBitOr("-0x100000000000000",
-                   "-0x100000000000000",
-                   "-0x100000000000000");
-  TestBigintBitOr("-0x10000000000000000",
-                   "-0x10000000000000000",
-                   "-0x10000000000000000");
-  TestBigintBitOr("-0x10000000", "-0x10000001", "-0x1");
-  TestBigintBitOr("-0x100000000", "-0x100000001", "-0x1");
-  TestBigintBitOr("-0x100000000000000", "-0x100000000000001", "-0x1");
-  TestBigintBitOr("-0x10000000000000000", "-0x10000000000000001", "-0x1");
-  TestBigintBitOr("-0x10000000000000000", "-0x1", "-0x1");
-}
-
-
-static void TestBigintBitXor(const char* a, const char* b, const char* result) {
-  const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
-  const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b));
-  const Bigint& xored =
-      Bigint::Handle(BigintOperations::BitXor(bigint_a, bigint_b));
-  const char* str_xored = BigintOperations::ToHexCString(xored, &ZoneAllocator);
-  EXPECT_STREQ(result, str_xored);
-  const Bigint& xored2 =
-      Bigint::Handle(BigintOperations::BitXor(bigint_b, bigint_a));
-  const char* str_xored2 = BigintOperations::ToHexCString(xored2,
-                                                          &ZoneAllocator);
-  EXPECT_STREQ(result, str_xored2);
-  const Bigint& xored3 =
-      Bigint::Handle(BigintOperations::BitXor(bigint_a, xored2));
-  const char* str_xored3 = BigintOperations::ToHexCString(xored3,
-                                                          &ZoneAllocator);
-  EXPECT_STREQ(b, str_xored3);
-  const Bigint& xored4 =
-      Bigint::Handle(BigintOperations::BitXor(xored2, bigint_a));
-  const char* str_xored4 = BigintOperations::ToHexCString(xored4,
-                                                          &ZoneAllocator);
-  EXPECT_STREQ(b, str_xored4);
-  const Bigint& xored5 =
-      Bigint::Handle(BigintOperations::BitXor(bigint_b, xored2));
-  const char* str_xored5 = BigintOperations::ToHexCString(xored5,
-                                                          &ZoneAllocator);
-  EXPECT_STREQ(a, str_xored5);
-  const Bigint& xored6 =
-      Bigint::Handle(BigintOperations::BitXor(xored2, bigint_b));
-  const char* str_xored6 = BigintOperations::ToHexCString(xored6,
-                                                          &ZoneAllocator);
-  EXPECT_STREQ(a, str_xored6);
-}
-
-
-TEST_CASE(BigintBitXor) {
-  const char* zero = "0x0";
-  const char* one = "0x1";
-  const char* minus_one = "-0x1";
-
-  TestBigintBitXor(one, zero, one);
-  TestBigintBitXor(one, one, zero);
-  TestBigintBitXor(minus_one, zero, minus_one);
-  TestBigintBitXor(minus_one, one, "-0x2");
-  TestBigintBitXor(minus_one, minus_one, zero);
-  TestBigintBitXor("0x5", "0x3", "0x6");
-  TestBigintBitXor("0x5", minus_one, "-0x6");
-  TestBigintBitXor("0x5", zero, "0x5");
-  TestBigintBitXor(minus_one, "-0x8", "0x7");
-  TestBigintBitXor("0x50000000", one, "0x50000001");
-  TestBigintBitXor("0x50000000", minus_one, "-0x50000001");
-  TestBigintBitXor("0x500000000", one, "0x500000001");
-  TestBigintBitXor("0x500000000", minus_one, "-0x500000001");
-  TestBigintBitXor("0x50000000000000000", one, "0x50000000000000001");
-  TestBigintBitXor("0x50000000000000000", minus_one, "-0x50000000000000001");
-  TestBigintBitXor("-0x50000000", "-0x50000000", zero);
-  TestBigintBitXor("-0x500000000", "-0x500000000", zero);
-  TestBigintBitXor("-0x50000000000000000", "-0x50000000000000000", zero);
-  TestBigintBitXor("0x1234567890ABCDEF012345678",
-                  "0x876543210FEDCBA0987654321",
-                  "0x955115599F46064F995511559");
-  TestBigintBitXor("-0x1234567890ABCDEF012345678",
-                  "-0x876543210FEDCBA0987654321",
-                  "0x955115599F46064F995511557");
-  TestBigintBitXor("0x1234567890ABCDEF012345678",
-                  "-0x876543210FEDCBA0987654321",
-                  "-0x955115599F46064F995511559");
-  TestBigintBitXor("0x1234567890ABCDEF012345678FFFFFFFFFFFFFFFFFFFFFFFFF",
-                  "-0x876543210FEDCBA0987654321",
-                  "-0x1234567890ABCDEF012345678789ABCDEF012345F6789ABCE0");
-  TestBigintBitXor("0x12345678", "0xFFFFFFF", "0x1DCBA987");
-  TestBigintBitXor("0x123456789", "0xFFFFFFFF", "0x1DCBA9876");
-  TestBigintBitXor("-0x10000000", "0xFFFFFFF", "-0x1");
-  TestBigintBitXor("-0x100000000", "0xFFFFFFFF", "-0x1");
-  TestBigintBitXor("-0x10000001", "0xFFFFFFF", "-0x20000000");
-  TestBigintBitXor("-0x100000001", "0xFFFFFFFF", "-0x200000000");
-  TestBigintBitXor("-0x10000001", "0x3FFFFFFF", "-0x30000000");
-  TestBigintBitXor("-0x100000001", "0x3FFFFFFFF", "-0x300000000");
-  TestBigintBitXor("-0x10000000000000001",
-                   "0x3FFFFFFFFFFFFFFFF",
-                   "-0x30000000000000000");
-  TestBigintBitXor("-0x100000000000000", "0xFFFFFFFFFFFFFF", "-0x1");
-  TestBigintBitXor("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", "-0x1");
-  TestBigintBitXor("-0x300000000000000",
-                   "0xFFFFFFFFFFFFFFF",
-                   "-0xD00000000000001");
-  TestBigintBitXor("-0x30000000000000000",
-                   "0xFFFFFFFFFFFFFFFFF",
-                   "-0xD0000000000000001");
-  TestBigintBitXor("-0x10000000", "-0x10000000", zero);
-  TestBigintBitXor("-0x100000000", "-0x100000000", zero);
-  TestBigintBitXor("-0x100000000000000", "-0x100000000000000", zero);
-  TestBigintBitXor("-0x10000000000000000", "-0x10000000000000000", zero);
-  TestBigintBitXor("-0x10000000", "-0x10000001", "0x1FFFFFFF");
-  TestBigintBitXor("-0x100000000", "-0x100000001", "0x1FFFFFFFF");
-  TestBigintBitXor("-0x100000000000000",
-                   "-0x100000000000001",
-                   "0x1FFFFFFFFFFFFFF");
-  TestBigintBitXor("-0x10000000000000000",
-                   "-0x10000000000000001",
-                   "0x1FFFFFFFFFFFFFFFF");
-}
-
-
-static void TestBigintBitNot(const char* a, const char* result) {
-  const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
-  const Bigint& inverted =
-      Bigint::Handle(BigintOperations::BitNot(bigint_a));
-  const char* str_inverted = BigintOperations::ToHexCString(inverted,
-                                                            &ZoneAllocator);
-  EXPECT_STREQ(result, str_inverted);
-  const Bigint& back =
-      Bigint::Handle(BigintOperations::BitNot(inverted));
-  const char* str_back = BigintOperations::ToHexCString(back, &ZoneAllocator);
-  EXPECT_STREQ(a, str_back);
-}
-
-
-TEST_CASE(BigintBitNot) {
-  const char* zero = "0x0";
-  const char* one = "0x1";
-  const char* minus_one = "-0x1";
-
-  TestBigintBitNot(zero, minus_one);
-  TestBigintBitNot(one, "-0x2");
-  TestBigintBitNot("0x5", "-0x6");
-  TestBigintBitNot("0x50000000", "-0x50000001");
-  TestBigintBitNot("0xFFFFFFF", "-0x10000000");
-  TestBigintBitNot("0xFFFFFFFF", "-0x100000000");
-  TestBigintBitNot("0xFFFFFFFFFFFFFF", "-0x100000000000000");
-  TestBigintBitNot("0xFFFFFFFFFFFFFFFF", "-0x10000000000000000");
-  TestBigintBitNot("0x1234567890ABCDEF012345678",
-                   "-0x1234567890ABCDEF012345679");
-}
-
-
-static void TestBigintMultiplyDivide(const char* a,
-                                     const char* b,
-                                     const char* product) {
-  const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
-  const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b));
-  const Bigint& computed_product =
-      Bigint::Handle(BigintOperations::Multiply(bigint_a, bigint_b));
-  const char* str_product = BigintOperations::ToHexCString(computed_product,
-                                                           &ZoneAllocator);
-  EXPECT_STREQ(product, str_product);
-  const Bigint& computed_product2 =
-      Bigint::Handle(BigintOperations::Multiply(bigint_b, bigint_a));
-  const char* str_product2 = BigintOperations::ToHexCString(computed_product2,
-                                                            &ZoneAllocator);
-  EXPECT_STREQ(product, str_product2);
-
-  const Bigint& bigint_product =
-      Bigint::Handle(BigintOperations::NewFromCString(product));
-  if (!bigint_a.IsZero()) {
-    const Bigint& computed_quotient1 =
-        Bigint::Handle(BigintOperations::Divide(bigint_product, bigint_a));
-    const char* str_quotient1 =
-        BigintOperations::ToHexCString(computed_quotient1, &ZoneAllocator);
-    EXPECT_STREQ(b, str_quotient1);
-  }
-
-  if (!bigint_b.IsZero()) {
-    const Bigint& computed_quotient2 =
-        Bigint::Handle(BigintOperations::Divide(bigint_product, bigint_b));
-    const char* str_quotient2 =
-        BigintOperations::ToHexCString(computed_quotient2, &ZoneAllocator);
-    EXPECT_STREQ(a, str_quotient2);
-  }
-}
-
-
-TEST_CASE(BigintMultiplyDivide) {
-  const char* zero = "0x0";
-  const char* one = "0x1";
-  const char* minus_one = "-0x1";
-
-  TestBigintMultiplyDivide(zero, zero, zero);
-  TestBigintMultiplyDivide(one, one, one);
-  TestBigintMultiplyDivide(one, zero, zero);
-  TestBigintMultiplyDivide(zero, one, zero);
-  TestBigintMultiplyDivide(one, minus_one, minus_one);
-  TestBigintMultiplyDivide(minus_one, minus_one, one);
-  TestBigintMultiplyDivide("0x42", one, "0x42");
-  TestBigintMultiplyDivide("0x42", "0x2", "0x84");
-  TestBigintMultiplyDivide("0xFFFF", "0x2", "0x1FFFE");
-  TestBigintMultiplyDivide("0x3", "0x5", "0xF");
-  TestBigintMultiplyDivide("0xFFFFF", "0x5", "0x4FFFFB");
-  TestBigintMultiplyDivide("0xFFFFFFF", "0x5", "0x4FFFFFFB");
-  TestBigintMultiplyDivide("0xFFFFFFFF", "0x5", "0x4FFFFFFFB");
-  TestBigintMultiplyDivide("0xFFFFFFFFFFFFFFFF", "0x5", "0x4FFFFFFFFFFFFFFFB");
-  TestBigintMultiplyDivide("0xFFFFFFFFFFFFFFFF", "0x3039",
-                           "0x3038FFFFFFFFFFFFCFC7");
-  TestBigintMultiplyDivide("0xFFFFFFFFFFFFFFFF",
-                           "0xFFFFFFFFFFFFFFFFFFFFFFFFFF",
-                           "0xFFFFFFFFFFFFFFFEFFFFFFFFFF0000000000000001");
-  TestBigintMultiplyDivide(
-      "0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000",
-      "0xFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000",
-      "0xFFFFFFFFFFFFFFFEFFFFFFFFFF000000000000000100000000000000"
-      "000000000000000000000000000000000000000000000000000000000000");
-  TestBigintMultiplyDivide("0x10000001", "0x5", "0x50000005");
-  TestBigintMultiplyDivide(
-      "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
-      "01234567890ABCDEF01234567890ABCDEF",
-      "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
-      "01234567890ABCDEF01234567890ABCDEF",
-      "0x14B66DC328828BCA670CBE52943AA3894CCCE15C8F5ED1E55F"
-      "328F6D3F579F992299850C4B5B95213EF3FB7B4E73B5F43D4299"
-      "5B9F6FD5441C275F2FF89F86F28F47A94CA37481090DCCCDCA6475F09A2F2A521");
-  TestBigintMultiplyDivide(
-      "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
-      "01234567890ABCDEF",
-      "0x1234567890123456789012345678901234567890123456789012345678901234567890"
-      "123456789012345678901234567890123456789012345678901234567890123456789012"
-      "345678901234567890123456789012345678901234567890123456789012345678901234"
-      "567890123456789012345678901234567890123456789012345678901234567890123456"
-      "789012345678901234567890123456789012345678901234567890123456789012345678"
-      "90123456789012345678901234567890",
-      "0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2"
-      "516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A"
-      "8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F"
-      "0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B"
-      "570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57"
-      "0F4A8F0B570F4A8F0B570F4A8F0B570F35D89D93E776C67DD864B2034B5C739007933027"
-      "5CDFD41E07A15D0F5AD5256BED5F1CF91FBA375DE70");
-  TestBigintMultiplyDivide(
-      "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFF",
-      "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
-      "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000"
-      "0000000000000000000000000000000000000000000000000000000000000000000001");
-  TestBigintMultiplyDivide(
-      "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFF",
-      "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFF",
-      "0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFC0000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "0000000000000000000000000000001");
-
-  // A 256 28-bit digits number squared.
-  TestBigintMultiplyDivide(
-      "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
-      "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
-      "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "0000000000000000000000000000000000000000000000000000000001");
-
-
-  TestBigintMultiplyDivide(
-      "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
-      "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
-      "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
-      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "000000000000000000000000000000000000000000000000000000000000000000000000"
-      "0000000000000000000000000000000000000000000000000000000001");
-}
-
-
-static void TestBigintDivideRemainder(const char* a,
-                                      const char* b,
-                                      const char* quotient,
-                                      const char* remainder) {
-  const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
-  const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b));
-  const Bigint& computed_quotient =
-      Bigint::Handle(BigintOperations::Divide(bigint_a, bigint_b));
-  const Bigint& computed_remainder =
-      Bigint::Handle(BigintOperations::Remainder(bigint_a, bigint_b));
-  const char* str_quotient = BigintOperations::ToHexCString(computed_quotient,
-                                                            &ZoneAllocator);
-  const char* str_remainder =
-      BigintOperations::ToHexCString(computed_remainder, &ZoneAllocator);
-  EXPECT_STREQ(quotient, str_quotient);
-  EXPECT_STREQ(remainder, str_remainder);
-}
-
-
-TEST_CASE(BigintDivideRemainder) {
-  const char* zero = "0x0";
-  const char* one = "0x1";
-  const char* minus_one = "-0x1";
-
-  TestBigintDivideRemainder(one, one, one, zero);
-  TestBigintDivideRemainder(zero, one, zero, zero);
-  TestBigintDivideRemainder(minus_one, one, minus_one, zero);
-  TestBigintDivideRemainder(one, "0x2", zero, one);
-  TestBigintDivideRemainder(minus_one, "0x7", zero, minus_one);
-  TestBigintDivideRemainder("0xB", "0x7", one, "0x4");
-  TestBigintDivideRemainder("0x12345678", "0x7", "0x299C335", "0x5");
-  TestBigintDivideRemainder("-0x12345678", "0x7", "-0x299C335", "-0x5");
-  TestBigintDivideRemainder("0x12345678", "-0x7", "-0x299C335", "0x5");
-  TestBigintDivideRemainder("-0x12345678", "-0x7", "0x299C335", "-0x5");
-  TestBigintDivideRemainder("0x7", "0x12345678", zero, "0x7");
-  TestBigintDivideRemainder("-0x7", "0x12345678", zero, "-0x7");
-  TestBigintDivideRemainder("-0x7", "-0x12345678", zero, "-0x7");
-  TestBigintDivideRemainder("0x7", "-0x12345678", zero, "0x7");
-  TestBigintDivideRemainder("0x12345678", "0x7", "0x299C335", "0x5");
-  TestBigintDivideRemainder("-0x12345678", "0x7", "-0x299C335", "-0x5");
-  TestBigintDivideRemainder("0x12345678", "-0x7", "-0x299C335", "0x5");
-  TestBigintDivideRemainder("-0x12345678", "-0x7", "0x299C335", "-0x5");
-  TestBigintDivideRemainder(
-      "0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2"
-      "516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A"
-      "8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F"
-      "0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B"
-      "570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57"
-      "0F4A8F0B570F4A8F0B570F4A8F0B570F35D89D93E776C67DD864B2034B5C739007933027"
-      "5CDFD41E07A15D0F5AD5256BED5F1CF91FBA375DE70",
-      "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
-      "01234567890ABCDEF",
-      "0x1234567890123456789012345678901234567890123456789012345678901234567890"
-      "123456789012345678901234567890123456789012345678901234567890123456789012"
-      "345678901234567890123456789012345678901234567890123456789012345678901234"
-      "567890123456789012345678901234567890123456789012345678901234567890123456"
-      "789012345678901234567890123456789012345678901234567890123456789012345678"
-      "90123456789012345678901234567890",
-      zero);
-  TestBigintDivideRemainder(
-      "0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2"
-      "516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A"
-      "8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F"
-      "0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B"
-      "570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57"
-      "0F4A8F0B570F4A8F0B570F4A8F0B570F35D89D93E776C67DD864B2034B5C739007933027"
-      "5CDFD41E07A15D0F5AD5256BED5F1CF91FBA375DE71",
-      "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
-      "01234567890ABCDEF",
-      "0x1234567890123456789012345678901234567890123456789012345678901234567890"
-      "123456789012345678901234567890123456789012345678901234567890123456789012"
-      "345678901234567890123456789012345678901234567890123456789012345678901234"
-      "567890123456789012345678901234567890123456789012345678901234567890123456"
-      "789012345678901234567890123456789012345678901234567890123456789012345678"
-      "90123456789012345678901234567890",
-      one);
-  TestBigintDivideRemainder(
-      "0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2"
-      "516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A"
-      "8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F"
-      "0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B"
-      "570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57"
-      "0F4A8F0B570F4A8F0B570F4A8F0B5710591E051CF233A56DEA99087BDC08417F08B6758E"
-      "E5EA90FCF7B39165D365D139DC60403E8743421AC5E",
-      "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
-      "01234567890ABCDEF",
-      "0x1234567890123456789012345678901234567890123456789012345678901234567890"
-      "123456789012345678901234567890123456789012345678901234567890123456789012"
-      "345678901234567890123456789012345678901234567890123456789012345678901234"
-      "567890123456789012345678901234567890123456789012345678901234567890123456"
-      "789012345678901234567890123456789012345678901234567890123456789012345678"
-      "90123456789012345678901234567890",
-      "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
-      "01234567890ABCDEE");
-}
-
-}  // namespace dart
diff --git a/runtime/vm/bit_set.h b/runtime/vm/bit_set.h
index 98cc631..a60f668 100644
--- a/runtime/vm/bit_set.h
+++ b/runtime/vm/bit_set.h
@@ -22,38 +22,69 @@
   void Set(intptr_t i, bool value) {
     ASSERT(i >= 0);
     ASSERT(i < N);
-    uword mask = (static_cast<uword>(1) << (i % kBitsPerWord));
+    uword mask = (static_cast<uword>(1) << (i & (kBitsPerWord - 1)));
     if (value) {
-      data_[i / kBitsPerWord] |= mask;
+      data_[i >> kBitsPerWordLog2] |= mask;
     } else {
-      data_[i / kBitsPerWord] &= ~mask;
+      data_[i >> kBitsPerWordLog2] &= ~mask;
     }
   }
 
-  bool Test(intptr_t i) {
+  bool Test(intptr_t i) const {
     ASSERT(i >= 0);
     ASSERT(i < N);
-    uword mask = (static_cast<uword>(1) << (i % kBitsPerWord));
-    return (data_[i / kBitsPerWord] & mask) != 0;
+    uword mask = (static_cast<uword>(1) << (i & (kBitsPerWord - 1)));
+    return (data_[i >> kBitsPerWordLog2] & mask) != 0;
   }
 
-  intptr_t Next(intptr_t i) {
+  intptr_t Next(intptr_t i) const {
     ASSERT(i >= 0);
     ASSERT(i < N);
-    intptr_t w = i / kBitsPerWord;
-    uword mask = ~static_cast<uword>(0) << i;
+    intptr_t w = i >> kBitsPerWordLog2;
+    uword mask = ~static_cast<uword>(0) << (i & (kBitsPerWord - 1));
     if ((data_[w] & mask) != 0) {
       uword tz = Utils::CountTrailingZeros(data_[w] & mask);
-      return kBitsPerWord*w + tz;
+      return (w << kBitsPerWordLog2) + tz;
     }
-    while (++w < (1 + ((N - 1) / kBitsPerWord))) {
+    while (++w < kLengthInWords) {
       if (data_[w] != 0) {
-        return kBitsPerWord*w + Utils::CountTrailingZeros(data_[w]);
+        return (w << kBitsPerWordLog2) + Utils::CountTrailingZeros(data_[w]);
       }
     }
     return -1;
   }
 
+  intptr_t Last() const {
+    for (int w = kLengthInWords - 1; w >= 0; --w) {
+      uword d = data_[w];
+      if (d != 0) {
+        return ((w + 1) << kBitsPerWordLog2) - Utils::CountLeadingZeros(d) - 1;
+      }
+    }
+    return -1;
+  }
+
+  intptr_t ClearLastAndFindPrevious(intptr_t current_last) {
+    ASSERT(Test(current_last));
+    ASSERT(Last() == current_last);
+    intptr_t w = current_last >> kBitsPerWordLog2;
+    uword bits = data_[w];
+    // Clear the current last.
+    bits ^= (static_cast<uword>(1) << (current_last & (kBitsPerWord - 1)));
+    data_[w] = bits;
+    // Search backwards for a non-zero word.
+    while (bits == 0 && w > 0) {
+      bits = data_[--w];
+    }
+    if (bits == 0) {
+      // None found.
+      return -1;
+    } else {
+      // Bitlength incl. w, minus leading zeroes of w, minus 1 to 0-based index.
+      return ((w + 1) << kBitsPerWordLog2) - Utils::CountLeadingZeros(bits) - 1;
+    }
+  }
+
   void Reset() {
     memset(data_, 0, sizeof(data_));
   }
@@ -63,7 +94,8 @@
   }
 
  private:
-  uword data_[1 + ((N - 1) / kBitsPerWord)];
+  static const int kLengthInWords = 1 + ((N - 1) / kBitsPerWord);
+  uword data_[kLengthInWords];
 };
 
 }  // namespace dart
diff --git a/runtime/vm/bit_set_test.cc b/runtime/vm/bit_set_test.cc
new file mode 100644
index 0000000..426ed4f5
--- /dev/null
+++ b/runtime/vm/bit_set_test.cc
@@ -0,0 +1,51 @@
+// Copyright (c) 2014, 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.
+
+#include "platform/assert.h"
+#include "vm/bit_set.h"
+#include "vm/unit_test.h"
+
+namespace dart {
+
+template<intptr_t Size>
+void TestBitSet() {
+  BitSet<Size> set;
+  EXPECT_EQ(-1, set.Last());
+  for (int i = 0; i < Size; ++i) {
+    EXPECT_EQ(false, set.Test(i));
+    set.Set(i, true);
+    EXPECT_EQ(true, set.Test(i));
+    EXPECT_EQ(i, set.Last());
+    for (int j = 0; j < Size; ++j) {
+      intptr_t next = set.Next(j);
+      if (j <= i) {
+        EXPECT_EQ(i, next);
+      } else {
+        EXPECT_EQ(-1, next);
+      }
+    }
+    set.Set(i, false);
+    EXPECT_EQ(false, set.Test(i));
+  }
+  set.Reset();
+  for (int i = 0; i < Size - 1; ++i) {
+    set.Set(i, true);
+    for (int j = i + 1; j < Size; ++j) {
+      set.Set(j, true);
+      EXPECT_EQ(j, set.Last());
+      EXPECT_EQ(i, set.ClearLastAndFindPrevious(j));
+      EXPECT_EQ(false, set.Test(j));
+    }
+  }
+}
+
+
+TEST_CASE(BitSetBasic) {
+  TestBitSet<8>();
+  TestBitSet<42>();
+  TestBitSet<128>();
+  TestBitSet<200>();
+}
+
+}  // namespace dart
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 1c9acdb..851bc60 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -55,9 +55,13 @@
   V(Mint_bitNegate, 1)                                                         \
   V(Mint_bitLength, 1)                                                         \
   V(Mint_shlFromInt, 2)                                                        \
-  V(Bigint_bitNegate, 1)                                                       \
-  V(Bigint_bitLength, 1)                                                       \
-  V(Bigint_shlFromInt, 2)                                                      \
+  V(Bigint_getNeg, 1)                                                          \
+  V(Bigint_setNeg, 2)                                                          \
+  V(Bigint_getUsed, 1)                                                         \
+  V(Bigint_setUsed, 2)                                                         \
+  V(Bigint_getDigits, 1)                                                       \
+  V(Bigint_setDigits, 2)                                                       \
+  V(Bigint_allocate, 1)                                                        \
   V(Double_getIsNegative, 1)                                                   \
   V(Double_getIsInfinite, 1)                                                   \
   V(Double_getIsNaN, 1)                                                        \
@@ -92,7 +96,7 @@
   V(List_getIndexed, 2)                                                        \
   V(List_setIndexed, 3)                                                        \
   V(List_getLength, 1)                                                         \
-  V(List_copyFromObjectArray, 5)                                               \
+  V(List_slice, 4)                                                             \
   V(ImmutableList_from, 4)                                                     \
   V(StringBase_createFromCodePoints, 1)                                        \
   V(StringBase_substringUnchecked, 3)                                          \
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index d6658f4..1030271 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -200,8 +200,6 @@
   ASSERT(Smi::InstanceSize() == cls.instance_size());
   cls = object_store->mint_class();
   ASSERT(Mint::InstanceSize() == cls.instance_size());
-  cls = object_store->bigint_class();
-  ASSERT(Bigint::InstanceSize() == cls.instance_size());
   cls = object_store->one_byte_string_class();
   ASSERT(OneByteString::InstanceSize() == cls.instance_size());
   cls = object_store->two_byte_string_class();
diff --git a/runtime/vm/code_descriptors.cc b/runtime/vm/code_descriptors.cc
index be21a85..ddaa206 100644
--- a/runtime/vm/code_descriptors.cc
+++ b/runtime/vm/code_descriptors.cc
@@ -57,7 +57,7 @@
     map1 = MapAt(i - 1);
     map2 = MapAt(i);
     // Ensure there are no duplicates and the entries are sorted.
-    if (map1.PC() >= map2.PC()) {
+    if (map1.PcOffset() >= map2.PcOffset()) {
       return false;
     }
   }
@@ -71,11 +71,6 @@
   if (num_entries == 0) {
     return Object::empty_array().raw();
   }
-  uword entry_point = code.EntryPoint();
-  for (intptr_t i = 0; i < num_entries; i++) {
-    stack_map_ = MapAt(i);
-    stack_map_.SetPC(entry_point + stack_map_.PC());
-  }
   return Array::MakeArray(list_);
 }
 
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 7150d3d..4cbcc1e 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -6,7 +6,6 @@
 
 #include "vm/assembler.h"
 #include "vm/ast.h"
-#include "vm/bigint_operations.h"
 #include "vm/code_patcher.h"
 #include "vm/compiler.h"
 #include "vm/dart_api_impl.h"
@@ -706,7 +705,6 @@
                                      const Class& receiver_class,
                                      const String& target_name,
                                      const Array& arguments_descriptor,
-                                     const ICData& ic_data,
                                      Function* result) {
   // 1. Check if there is a getter with the same name.
   const String& getter_name = String::Handle(Field::GetterName(target_name));
@@ -752,7 +750,6 @@
                                 receiver_class,
                                 target_name,
                                 args_descriptor,
-                                ic_data,
                                 &result)) {
     ArgumentsDescriptor desc(args_descriptor);
     const Function& target_function =
@@ -787,7 +784,6 @@
                    String::Handle(ic_data.target_name()).ToCString(),
                    receiver.ToCString());
     }
-    ic_data.SetIsClosureCall();
     target_function = InlineCacheMissHelper(receiver, ic_data);
   }
   ASSERT(!target_function.IsNull());
@@ -989,7 +985,6 @@
                                                name,
                                                args_desc));
   if (target_function.IsNull()) {
-    ic_data.SetIsClosureCall();
     target_function = InlineCacheMissHelper(receiver, ic_data);
   }
 
@@ -1003,24 +998,21 @@
 
 
 // Invoke appropriate noSuchMethod function.
-// Arg0: receiver.
-// Arg1: ic-data.
-// Arg2: arguments descriptor array.
-// Arg3: arguments array.
-DEFINE_RUNTIME_ENTRY(InvokeNoSuchMethodFunction, 4) {
+// Arg0: receiver (closure object)
+// Arg1: arguments descriptor array.
+// Arg2: arguments array.
+DEFINE_RUNTIME_ENTRY(InvokeClosureNoSuchMethod, 3) {
   const Instance& receiver = Instance::CheckedHandle(arguments.ArgAt(0));
-  const ICData& ic_data = ICData::CheckedHandle(arguments.ArgAt(1));
-  const Array& orig_arguments_desc = Array::CheckedHandle(arguments.ArgAt(2));
-  const Array& orig_arguments = Array::CheckedHandle(arguments.ArgAt(3));
+  const Array& orig_arguments_desc = Array::CheckedHandle(arguments.ArgAt(1));
+  const Array& orig_arguments = Array::CheckedHandle(arguments.ArgAt(2));
 
-  String& original_function_name = String::Handle(ic_data.target_name());
-  if (receiver.IsClosure()) {
-    // For closure the function name is always 'call'. Replace it with the
-    // name of the closurized function so that exception contains more
-    // relevant information.
-    const Function& function = Function::Handle(Closure::function(receiver));
-    original_function_name = function.QualifiedUserVisibleName();
-  }
+  // For closure the function name is always 'call'. Replace it with the
+  // name of the closurized function so that exception contains more
+  // relevant information.
+  ASSERT(receiver.IsClosure());
+  const Function& function = Function::Handle(Closure::function(receiver));
+  const String& original_function_name =
+      String::Handle(function.QualifiedUserVisibleName());
   const Object& result = Object::Handle(
       DartEntry::InvokeNoSuchMethod(receiver,
                                     original_function_name,
@@ -1261,12 +1253,11 @@
   StackFrame* frame = iterator.NextFrame();
   ASSERT(frame != NULL);
   OS::PrintErr("IC call @%#" Px ": ICData: %p cnt:%" Pd " nchecks: %" Pd
-      " %s %s\n",
+      " %s\n",
       frame->pc(),
       ic_data.raw(),
       function.usage_counter(),
       ic_data.NumberOfChecks(),
-      ic_data.IsClosureCall() ? "closure" : "",
       function.ToFullyQualifiedCString());
 }
 
@@ -1545,7 +1536,7 @@
   HANDLESCOPE(isolate);
   const Bigint& big_left = Bigint::Handle(left);
   const Bigint& big_right = Bigint::Handle(right);
-  return BigintOperations::Compare(big_left, big_right);
+  return big_left.CompareWith(big_right);
 }
 END_LEAF_RUNTIME_ENTRY
 
diff --git a/runtime/vm/code_generator.h b/runtime/vm/code_generator.h
index 9f88fbc..52ac679 100644
--- a/runtime/vm/code_generator.h
+++ b/runtime/vm/code_generator.h
@@ -35,7 +35,7 @@
 DECLARE_RUNTIME_ENTRY(NonBoolTypeError);
 DECLARE_RUNTIME_ENTRY(InstantiateType);
 DECLARE_RUNTIME_ENTRY(InstantiateTypeArguments);
-DECLARE_RUNTIME_ENTRY(InvokeNoSuchMethodFunction);
+DECLARE_RUNTIME_ENTRY(InvokeClosureNoSuchMethod);
 DECLARE_RUNTIME_ENTRY(MegamorphicCacheMissHandler);
 DECLARE_RUNTIME_ENTRY(OptimizeInvokedFunction);
 DECLARE_RUNTIME_ENTRY(TraceICCall);
diff --git a/runtime/vm/compiler.cc b/runtime/vm/compiler.cc
index cf19b58..06c0b25 100644
--- a/runtime/vm/compiler.cc
+++ b/runtime/vm/compiler.cc
@@ -739,24 +739,24 @@
     var_name = var_descriptors.GetName(i);
     RawLocalVarDescriptors::VarInfo var_info;
     var_descriptors.GetInfo(i, &var_info);
-    if (var_info.kind == RawLocalVarDescriptors::kSavedEntryContext) {
-      OS::Print("  saved caller's CTX reg offset %" Pd "\n", var_info.index);
-    } else if (var_info.kind == RawLocalVarDescriptors::kSavedCurrentContext) {
-      OS::Print("  saved current CTX reg offset %" Pd "\n", var_info.index);
+    const int8_t kind = var_info.kind();
+    if (kind == RawLocalVarDescriptors::kSavedEntryContext) {
+      OS::Print("  saved caller's CTX reg offset %d\n", var_info.index());
+    } else if (kind == RawLocalVarDescriptors::kSavedCurrentContext) {
+      OS::Print("  saved current CTX reg offset %d\n", var_info.index());
     } else {
-      if (var_info.kind == RawLocalVarDescriptors::kContextLevel) {
-        OS::Print("  context level %" Pd " scope %d",
-                  var_info.index, var_info.scope_id);
-      } else if (var_info.kind == RawLocalVarDescriptors::kStackVar) {
-        OS::Print("  stack var '%s' offset %" Pd "",
-                  var_name.ToCString(), var_info.index);
+      if (kind == RawLocalVarDescriptors::kContextLevel) {
+        OS::Print("  context level %d scope %d", var_info.index(),
+            var_info.scope_id);
+      } else if (kind == RawLocalVarDescriptors::kStackVar) {
+        OS::Print("  stack var '%s' offset %d",
+          var_name.ToCString(), var_info.index());
       } else {
-        ASSERT(var_info.kind == RawLocalVarDescriptors::kContextVar);
-        OS::Print("  context var '%s' level %d offset %" Pd "",
-                  var_name.ToCString(), var_info.scope_id, var_info.index);
+        ASSERT(kind == RawLocalVarDescriptors::kContextVar);
+        OS::Print("  context var '%s' level %d offset %d",
+            var_name.ToCString(), var_info.scope_id, var_info.index());
       }
-      OS::Print(" (valid %" Pd "-%" Pd ")\n",
-                var_info.begin_pos, var_info.end_pos);
+      OS::Print(" (valid %d-%d)\n", var_info.begin_pos, var_info.end_pos);
     }
   }
   OS::Print("}\n");
diff --git a/runtime/vm/cpu_arm64.cc b/runtime/vm/cpu_arm64.cc
index c717a70..a31ddad 100644
--- a/runtime/vm/cpu_arm64.cc
+++ b/runtime/vm/cpu_arm64.cc
@@ -24,17 +24,13 @@
     return;
   }
 
-  // ARM recommends using the gcc intrinsic __clear_cache on Linux, and the
-  // library call cacheflush from unistd.h on Android:
+  // ARM recommends using the gcc intrinsic __clear_cache on Linux and Android.
   // blogs.arm.com/software-enablement/141-caches-and-self-modifying-code/
-  #if defined(__linux__) && !defined(ANDROID)
+  #if defined(__linux__) || defined(ANDROID)
     extern void __clear_cache(char*, char*);
     char* beg = reinterpret_cast<char*>(start);
     char* end = reinterpret_cast<char*>(start + size);
     ::__clear_cache(beg, end);
-  #elif defined(ANDROID)
-    // TODO(zra): Verify that this is correct for arm64 in addition to arm.
-    cacheflush(start, start + size, 0);
   #else
     #error FlushICache only tested/supported on Linux and Android
   #endif
diff --git a/runtime/vm/cpuinfo_android.cc b/runtime/vm/cpuinfo_android.cc
index fbbbe29..e4e4826 100644
--- a/runtime/vm/cpuinfo_android.cc
+++ b/runtime/vm/cpuinfo_android.cc
@@ -25,7 +25,7 @@
   fields_[kCpuInfoModel] = "model name";
   fields_[kCpuInfoHardware] = "model name";
   fields_[kCpuInfoFeatures] = "flags";
-#elif defined(HOST_ARCH_ARM)
+#elif defined(HOST_ARCH_ARM) || defined(HOST_ARCH_ARM64)
   fields_[kCpuInfoProcessor] = "Processor";
   fields_[kCpuInfoModel] = "model name";
   fields_[kCpuInfoHardware] = "Hardware";
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 8f52a22..50ffd40 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -7,7 +7,6 @@
 #include "include/dart_native_api.h"
 
 #include "platform/assert.h"
-#include "vm/bigint_operations.h"
 #include "vm/class_finalizer.h"
 #include "vm/compiler.h"
 #include "vm/dart.h"
@@ -46,7 +45,6 @@
             "Check function fingerprints");
 DEFINE_FLAG(bool, trace_api, false,
             "Trace invocation of API calls (debug mode only)");
-DEFINE_FLAG(bool, load_async, true, "load source code asynchronously");
 
 ThreadLocalKey Api::api_native_key_ = Thread::kUnsetThreadLocalKey;
 Dart_Handle Api::true_handle_ = NULL;
@@ -149,8 +147,8 @@
   intptr_t cid = obj.GetClassId();
   if (cid == kBigintCid) {
     const Bigint& bigint = Bigint::Cast(obj);
-    if (BigintOperations::FitsIntoInt64(bigint)) {
-      *value = BigintOperations::ToInt64(bigint);
+    if (bigint.FitsIntoInt64()) {
+      *value = bigint.AsInt64Value();
       return true;
     }
   }
@@ -175,8 +173,8 @@
   intptr_t cid = obj.GetClassId();
   if (cid == kBigintCid) {
     const Bigint& bigint = Bigint::Cast(obj);
-    if (BigintOperations::FitsIntoUint64(bigint)) {
-      *value = BigintOperations::ToUint64(bigint);
+    if (bigint.FitsIntoUint64()) {
+      *value = bigint.AsUint64Value();
       return true;
     }
   }
@@ -885,8 +883,8 @@
   }
   if (result.IsBigint()) {
     const Bigint& bigint = Bigint::Cast(result);
-    if (BigintOperations::FitsIntoUint64(bigint)) {
-      return BigintOperations::ToUint64(bigint);
+    if (bigint.FitsIntoUint64()) {
+      return bigint.AsUint64Value();
     }
   }
   return 0;
@@ -1907,7 +1905,7 @@
   if (int_obj.IsNull()) {
     RETURN_TYPE_ERROR(isolate, integer, Integer);
   }
-  ASSERT(!BigintOperations::FitsIntoInt64(Bigint::Cast(int_obj)));
+  ASSERT(!Bigint::Cast(int_obj).FitsIntoInt64());
   *fits = false;
   return Api::Success();
 }
@@ -1932,7 +1930,7 @@
   if (int_obj.IsMint()) {
     *fits = !int_obj.IsNegative();
   } else {
-    *fits = BigintOperations::FitsIntoUint64(Bigint::Cast(int_obj));
+    *fits = Bigint::Cast(int_obj).FitsIntoUint64();
   }
   return Api::Success();
 }
@@ -1983,8 +1981,8 @@
     return Api::Success();
   } else {
     const Bigint& bigint = Bigint::Cast(int_obj);
-    if (BigintOperations::FitsIntoInt64(bigint)) {
-      *value = BigintOperations::ToInt64(bigint);
+    if (bigint.FitsIntoInt64()) {
+      *value = bigint.AsInt64Value();
       return Api::Success();
     }
   }
@@ -2017,8 +2015,8 @@
     return Api::Success();
   } else {
     const Bigint& bigint = Bigint::Cast(int_obj);
-    if (BigintOperations::FitsIntoUint64(bigint)) {
-      *value = BigintOperations::ToUint64(bigint);
+    if (bigint.FitsIntoUint64()) {
+      *value = bigint.AsUint64Value();
       return Api::Success();
     }
   }
@@ -2042,11 +2040,10 @@
   }
   if (int_obj.IsSmi() || int_obj.IsMint()) {
     const Bigint& bigint = Bigint::Handle(isolate,
-        BigintOperations::NewFromInt64(int_obj.AsInt64Value()));
-    *value = BigintOperations::ToHexCString(bigint, BigintAllocate);
+        Bigint::NewFromInt64(int_obj.AsInt64Value()));
+    *value = bigint.ToHexCString(BigintAllocate);
   } else {
-    *value = BigintOperations::ToHexCString(Bigint::Cast(int_obj),
-                                            BigintAllocate);
+    *value = Bigint::Cast(int_obj).ToHexCString(BigintAllocate);
   }
   return Api::Success();
 }
@@ -2486,7 +2483,7 @@
       // Check for a non-canonical Mint range value.
       ASSERT(retval.IsBigint());
       const Bigint& bigint = Bigint::Handle();
-      if (BigintOperations::FitsIntoInt64(bigint)) {
+      if (bigint.FitsIntoInt64()) {
         int64_t bigint_value = bigint.AsInt64Value();
         if (bigint_value >= kIntptrMin && bigint_value <= kIntptrMax) {
           *len = static_cast<intptr_t>(bigint_value);
@@ -3969,7 +3966,6 @@
         "%s expects argument 'number_of_arguments' to be non-negative.",
         CURRENT_FUNC);
   }
-  ASSERT(ClassFinalizer::AllClassesFinalized());
 
   // Set up arguments to include the closure as the first argument.
   const Array& args = Array::Handle(isolate,
@@ -4722,6 +4718,38 @@
 
 
 // --- Environment ---
+RawString* Api::CallEnvironmentCallback(Isolate* isolate, const String& name) {
+  Scope api_scope(isolate);
+  Dart_EnvironmentCallback callback = isolate->environment_callback();
+  String& result = String::Handle(isolate);
+  if (callback != NULL) {
+    Dart_Handle response = callback(Api::NewHandle(isolate, name.raw()));
+    if (::Dart_IsString(response)) {
+      result ^= Api::UnwrapHandle(response);
+    } else if (::Dart_IsError(response)) {
+      const Object& error =
+          Object::Handle(isolate, Api::UnwrapHandle(response));
+      Exceptions::ThrowArgumentError(
+          String::Handle(String::New(Error::Cast(error).ToErrorCString())));
+    } else if (!::Dart_IsNull(response)) {
+      // At this point everything except null are invalid environment values.
+      Exceptions::ThrowArgumentError(
+          String::Handle(String::New("Illegal environment value")));
+    }
+  }
+  if (result.IsNull()) {
+    // TODO(iposva): Determine whether builtin values can be overriden by the
+    // embedder.
+    // Check for default VM provided values. If it was not overriden on the
+    // command line.
+    if (Symbols::DartIsVM().Equals(name)) {
+      return Symbols::True().raw();
+    }
+  }
+  return result.raw();
+}
+
+
 DART_EXPORT Dart_Handle Dart_SetEnvironmentCallback(
     Dart_EnvironmentCallback callback) {
   Isolate* isolate = Isolate::Current();
diff --git a/runtime/vm/dart_api_impl.h b/runtime/vm/dart_api_impl.h
index f659b8a..c3f9fb5 100644
--- a/runtime/vm/dart_api_impl.h
+++ b/runtime/vm/dart_api_impl.h
@@ -268,6 +268,9 @@
   static void SetWeakHandleReturnValue(NativeArguments* args,
                                        Dart_WeakPersistentHandle retval);
 
+  static RawString* CallEnvironmentCallback(Isolate* isolate,
+                                            const String& name);
+
  private:
   static Dart_Handle InitNewHandle(Isolate* isolate, RawObject* raw);
 
diff --git a/runtime/vm/dart_api_message.cc b/runtime/vm/dart_api_message.cc
index b715e51..ffe13e2 100644
--- a/runtime/vm/dart_api_message.cc
+++ b/runtime/vm/dart_api_message.cc
@@ -2,7 +2,6 @@
 // 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.
 
-#include "vm/bigint_operations.h"
 #include "vm/dart_api_message.h"
 #include "vm/object.h"
 #include "vm/snapshot_ids.h"
@@ -92,14 +91,11 @@
 }
 
 
-Dart_CObject* ApiMessageReader::AllocateDartCObjectBigint(intptr_t length) {
-  // Allocate a Dart_CObject structure followed by an array of chars
-  // for the bigint hex string content. The pointer to the bigint
-  // content is set up to this area.
-  Dart_CObject* value =
-      reinterpret_cast<Dart_CObject*>(
-          alloc_(NULL, 0, sizeof(Dart_CObject) + length + 1));
-  value->value.as_bigint = reinterpret_cast<char*>(value) + sizeof(*value);
+Dart_CObject* ApiMessageReader::AllocateDartCObjectBigint() {
+  Dart_CObject* value = AllocateDartCObject(Dart_CObject_kBigint);
+  value->value.as_bigint.neg = false;
+  value->value.as_bigint.used = 0;
+  value->value.as_bigint.digits = NULL;
   value->type = Dart_CObject_kBigint;
   return value;
 }
@@ -257,7 +253,7 @@
 
 Dart_CObject* ApiMessageReader::ReadInlinedObject(intptr_t object_id) {
   // Read the class header information and lookup the class.
-  intptr_t class_header = ReadIntptrValue();
+  intptr_t class_header = Read<int32_t>();
   intptr_t tags = ReadTags();
   USE(tags);
   intptr_t class_id;
@@ -405,7 +401,7 @@
   }
   ASSERT(SerializedHeaderTag::decode(value) == kInlined);
   // Read the class header information and lookup the class.
-  intptr_t class_header = ReadIntptrValue();
+  intptr_t class_header = Read<int32_t>();
 
   intptr_t object_id = SerializedHeaderData::decode(value);
   if (object_id == kOmittedObjectId) {
@@ -497,9 +493,9 @@
       // TODO(sgjesse): Fix this workaround ignoring the type parameter.
       Dart_CObject* value = &dynamic_type_marker;
       AddBackRef(object_id, value, kIsDeserialized);
-      intptr_t index = ReadIntptrValue();
+      intptr_t index = Read<int32_t>();
       USE(index);
-      intptr_t token_index = ReadIntptrValue();
+      intptr_t token_index = Read<int32_t>();
       USE(token_index);
       int8_t type_state = Read<int8_t>();
       USE(type_state);
@@ -522,15 +518,24 @@
       return object;
     }
     case kBigintCid: {
-      // Read in the hex string representation of the bigint.
-      intptr_t len = ReadIntptrValue();
-      Dart_CObject* object = AllocateDartCObjectBigint(len);
+      // Allocate an empty bigint which will be updated when its contents
+      // has been deserialized.
+      Dart_CObject* object = AllocateDartCObjectBigint();
       AddBackRef(object_id, object, kIsDeserialized);
-      char* p = object->value.as_bigint;
-      for (intptr_t i = 0; i < len; i++) {
-        p[i] = Read<uint8_t>();
-      }
-      p[len] = '\0';
+      Dart_CObject* neg_obj = ReadObjectImpl();
+      ASSERT(neg_obj->type == Dart_CObject_kBool);
+      const bool neg = neg_obj->value.as_bool;
+      Dart_CObject* used_obj = ReadObjectImpl();
+      ASSERT(used_obj->type == Dart_CObject_kInt32);
+      const intptr_t used = used_obj->value.as_int32;
+      Dart_CObject* digits = ReadObjectImpl();
+      ASSERT(digits->type == Dart_CObject_kTypedData);
+      ASSERT(digits->value.as_typed_data.type == Dart_TypedData_kUint32);
+      ASSERT(digits->value.as_typed_data.length >= 4*used);
+      // Update the bigint object.
+      object->value.as_bigint.neg = neg;
+      object->value.as_bigint.used = used;
+      object->value.as_bigint.digits = digits;
       return object;
     }
     case kDoubleCid: {
@@ -1040,24 +1045,21 @@
       WriteInt64(object);
       break;
     case Dart_CObject_kBigint: {
-      char* hex_string = object->value.as_bigint;
-      const intptr_t chunk_len =
-          BigintOperations::ComputeChunkLength(hex_string);
-      if (chunk_len < 0 ||
-          chunk_len > Bigint::kMaxElements) {
-        return false;
-      }
       // Write out the serialization header value for this object.
       WriteInlinedHeader(object);
       // Write out the class and tags information.
       WriteIndexedObject(kBigintCid);
       WriteTags(0);
-      // Write hex string length and content
-      intptr_t len = strlen(hex_string);
-      WriteIntptrValue(len);
-      for (intptr_t i = 0; i < len; i++) {
-        Write<uint8_t>(hex_string[i]);
+      // Write neg field.
+      if (object->value.as_bigint.neg) {
+        WriteVMIsolateObject(kTrueValue);
+      } else {
+        WriteVMIsolateObject(kFalseValue);
       }
+      // Write used field.
+      WriteSmi(object->value.as_bigint.used);
+      // Write digits as TypedData (or NullObject).
+      WriteCObject(object->value.as_bigint.digits);
       break;
     }
     case Dart_CObject_kDouble:
@@ -1124,6 +1126,9 @@
         case Dart_TypedData_kUint8:
           class_id = kTypedDataUint8ArrayCid;
           break;
+        case Dart_TypedData_kUint32:
+          class_id = kTypedDataUint32ArrayCid;
+          break;
         default:
           class_id = kTypedDataUint8ArrayCid;
           UNIMPLEMENTED();
@@ -1138,9 +1143,25 @@
       WriteIndexedObject(class_id);
       WriteTags(RawObject::ClassIdTag::update(class_id, 0));
       WriteSmi(len);
-      uint8_t* bytes = object->value.as_typed_data.values;
-      for (intptr_t i = 0; i < len; i++) {
-        Write<uint8_t>(bytes[i]);
+      switch (class_id) {
+        case kTypedDataInt8ArrayCid:
+        case kTypedDataUint8ArrayCid: {
+          uint8_t* bytes = object->value.as_typed_data.values;
+          for (intptr_t i = 0; i < len; i++) {
+            Write<uint8_t>(bytes[i]);
+          }
+          break;
+        }
+        case kTypedDataUint32ArrayCid: {
+          uint32_t* words =
+              reinterpret_cast<uint32_t*>(object->value.as_typed_data.values);
+          for (intptr_t i = 0; i < len; i++) {
+            Write<uint32_t>(words[i]);
+          }
+          break;
+        }
+        default:
+          UNIMPLEMENTED();
       }
       break;
     }
diff --git a/runtime/vm/dart_api_message.h b/runtime/vm/dart_api_message.h
index c1ab9f2..ccd853b 100644
--- a/runtime/vm/dart_api_message.h
+++ b/runtime/vm/dart_api_message.h
@@ -83,8 +83,8 @@
   Dart_CObject* AllocateDartCObjectInt32(int32_t value);
   // Allocates a Dart_CObject object for for a 64-bit integer.
   Dart_CObject* AllocateDartCObjectInt64(int64_t value);
-  // Allocates a Dart_CObject object for bigint data.
-  Dart_CObject* AllocateDartCObjectBigint(intptr_t length);
+  // Allocates an empty Dart_CObject object for a bigint to be filled up later.
+  Dart_CObject* AllocateDartCObjectBigint();
   // Allocates a Dart_CObject object for a double.
   Dart_CObject* AllocateDartCObjectDouble(double value);
   // Allocates a Dart_CObject object for string data.
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index cef062f..1f7bf94 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -439,7 +439,8 @@
     for (intptr_t cur_idx = 0; cur_idx < var_desc_len; cur_idx++) {
       RawLocalVarDescriptors::VarInfo var_info;
       var_descriptors_.GetInfo(cur_idx, &var_info);
-      if ((var_info.kind == RawLocalVarDescriptors::kContextLevel) &&
+      const int8_t kind = var_info.kind();
+      if ((kind == RawLocalVarDescriptors::kContextLevel) &&
           (var_info.begin_pos <= activation_token_pos) &&
           (activation_token_pos < var_info.end_pos)) {
         // This var_descriptors_ entry is a context scope which is in scope
@@ -447,7 +448,7 @@
         // the previous context scope.
         if (innermost_begin_pos < var_info.begin_pos) {
           innermost_begin_pos = var_info.begin_pos;
-          context_level_ = var_info.index;
+          context_level_ = var_info.index();
         }
       }
     }
@@ -464,12 +465,12 @@
   for (intptr_t i = 0; i < var_desc_len; i++) {
     RawLocalVarDescriptors::VarInfo var_info;
     var_descriptors_.GetInfo(i, &var_info);
-    if (var_info.kind == RawLocalVarDescriptors::kSavedEntryContext) {
+    const int8_t kind = var_info.kind();
+    if (kind == RawLocalVarDescriptors::kSavedEntryContext) {
       if (FLAG_trace_debugger_stacktrace) {
-        OS::PrintErr("\tFound saved entry ctx at index %" Pd "\n",
-                     var_info.index);
+        OS::PrintErr("\tFound saved entry ctx at index %d\n", var_info.index());
       }
-      return GetLocalContextVar(var_info.index);
+      return GetLocalContextVar(var_info.index());
     }
   }
 
@@ -486,12 +487,13 @@
   for (intptr_t i = 0; i < var_desc_len; i++) {
     RawLocalVarDescriptors::VarInfo var_info;
     var_descriptors_.GetInfo(i, &var_info);
-    if (var_info.kind == RawLocalVarDescriptors::kSavedCurrentContext) {
+    const int8_t kind = var_info.kind();
+    if (kind == RawLocalVarDescriptors::kSavedCurrentContext) {
       if (FLAG_trace_debugger_stacktrace) {
-        OS::PrintErr("\tFound saved current ctx at index %" Pd "\n",
-                     var_info.index);
+        OS::PrintErr("\tFound saved current ctx at index %d\n",
+            var_info.index());
       }
-      return GetLocalContextVar(var_info.index);
+      return GetLocalContextVar(var_info.index());
     }
   }
   UNREACHABLE();
@@ -596,13 +598,14 @@
     ASSERT(var_names.length() == desc_indices_.length());
     RawLocalVarDescriptors::VarInfo var_info;
     var_descriptors_.GetInfo(cur_idx, &var_info);
-    if ((var_info.kind != RawLocalVarDescriptors::kStackVar) &&
-        (var_info.kind != RawLocalVarDescriptors::kContextVar)) {
+    const int8_t kind = var_info.kind();
+    if ((kind != RawLocalVarDescriptors::kStackVar) &&
+        (kind != RawLocalVarDescriptors::kContextVar)) {
       continue;
     }
     if ((var_info.begin_pos <= activation_token_pos) &&
         (activation_token_pos <= var_info.end_pos)) {
-      if ((var_info.kind == RawLocalVarDescriptors::kContextVar) &&
+      if ((kind == RawLocalVarDescriptors::kContextVar) &&
           (ContextLevel() < var_info.scope_id)) {
         // The variable is textually in scope but the context level
         // at the activation frame's PC is lower than the context
@@ -753,10 +756,11 @@
   ASSERT(end_pos != NULL);
   *end_pos = var_info.end_pos;
   ASSERT(value != NULL);
-  if (var_info.kind == RawLocalVarDescriptors::kStackVar) {
-    *value = GetLocalInstanceVar(var_info.index);
+  const int8_t kind = var_info.kind();
+  if (kind == RawLocalVarDescriptors::kStackVar) {
+    *value = GetLocalInstanceVar(var_info.index());
   } else {
-    ASSERT(var_info.kind == RawLocalVarDescriptors::kContextVar);
+    ASSERT(kind == RawLocalVarDescriptors::kContextVar);
     if (ctx_.IsNull()) {
       // The context has been removed by the optimizing compiler.
       //
@@ -771,7 +775,7 @@
     // The context level of the variable.
     intptr_t var_ctx_level = var_info.scope_id;
     intptr_t level_diff = frame_ctx_level - var_ctx_level;
-    intptr_t ctx_slot = var_info.index;
+    intptr_t ctx_slot = var_info.index();
     if (level_diff == 0) {
       if ((ctx_slot < 0) ||
           (ctx_slot >= ctx_.num_variables())) {
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index 96b4984..9f53b58 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -667,6 +667,23 @@
 }
 
 
+void Exceptions::ThrowRangeError(const char* argument_name,
+                                 const Integer& argument_value,
+                                 intptr_t expected_from,
+                                 intptr_t expected_to) {
+  const String& error = String::Handle(String::NewFormatted(
+      "%s (%s) must be in the range [%" Pd "..%" Pd ")",
+      argument_name,
+      argument_value.ToCString(),
+      expected_from,
+      expected_to));
+
+  const Array& args = Array::Handle(Array::New(1));
+  args.SetAt(0, error);
+  Exceptions::ThrowByType(Exceptions::kRange, args);
+}
+
+
 RawObject* Exceptions::Create(ExceptionType type, const Array& arguments) {
   Library& library = Library::Handle();
   const String* class_name = NULL;
diff --git a/runtime/vm/exceptions.h b/runtime/vm/exceptions.h
index a7ab022..68a8b07 100644
--- a/runtime/vm/exceptions.h
+++ b/runtime/vm/exceptions.h
@@ -15,6 +15,7 @@
 class DartFrameIterator;
 class Error;
 class Instance;
+class Integer;
 class Object;
 class RawInstance;
 class RawObject;
@@ -72,6 +73,10 @@
   static void ThrowOOM();
   static void ThrowStackOverflow();
   static void ThrowArgumentError(const Instance& arg);
+  static void ThrowRangeError(const char* argument_name,
+                              const Integer& argument_value,
+                              intptr_t expected_from,
+                              intptr_t expected_to);
   static void ThrowJavascriptCompatibilityError(const char* msg);
 
   // Returns a RawInstance if the exception is successfully created,
diff --git a/runtime/vm/flow_graph_allocator.cc b/runtime/vm/flow_graph_allocator.cc
index 880f2e5..7dfecff 100644
--- a/runtime/vm/flow_graph_allocator.cc
+++ b/runtime/vm/flow_graph_allocator.cc
@@ -753,7 +753,10 @@
     if (interfere_at_backedge != NULL) interfere_at_backedge->Add(vreg);
 
     range->AddUseInterval(block->start_pos(), pos);
-    range->AddHintedUse(pos, move->src_slot(), move->dest_slot());
+    range->AddHintedUse(
+        pos,
+        move->src_slot(),
+        GetLiveRange(phi->ssa_temp_index())->assigned_location_slot());
 
     move->set_src(Location::PrefersRegister());
     move_idx++;
diff --git a/runtime/vm/flow_graph_allocator.h b/runtime/vm/flow_graph_allocator.h
index 51fe05f..dc894cc 100644
--- a/runtime/vm/flow_graph_allocator.h
+++ b/runtime/vm/flow_graph_allocator.h
@@ -565,6 +565,7 @@
   UseInterval* first_use_interval() const { return first_use_interval_; }
   UseInterval* last_use_interval() const { return last_use_interval_; }
   Location assigned_location() const { return assigned_location_; }
+  Location* assigned_location_slot() { return &assigned_location_; }
   intptr_t Start() const { return first_use_interval()->start(); }
   intptr_t End() const { return last_use_interval()->end(); }
 
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index 40cdf4c..70a9905 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -685,9 +685,11 @@
 }
 
 
-void EffectGraphVisitor::TieLoop(intptr_t token_pos,
-                                 const TestGraphVisitor& test_fragment,
-                                 const EffectGraphVisitor& body_fragment) {
+void EffectGraphVisitor::TieLoop(
+    intptr_t token_pos,
+    const TestGraphVisitor& test_fragment,
+    const EffectGraphVisitor& body_fragment,
+    const EffectGraphVisitor& test_preamble_fragment) {
   // We have: a test graph fragment with zero, one, or two available exits;
   // and an effect graph fragment with zero or one available exits.  We want
   // to append the 'while loop' consisting of the test graph fragment as
@@ -702,6 +704,7 @@
   // 2. Connect the test to this graph, including the body if reachable and
   // using a fresh join node if the body is reachable and has an open exit.
   if (body_exit == NULL) {
+    Append(test_preamble_fragment);
     Append(test_fragment);
   } else {
     JoinEntryInstr* join =
@@ -709,7 +712,12 @@
     CheckStackOverflowInstr* check =
         new(I) CheckStackOverflowInstr(token_pos, owner()->loop_depth());
     join->LinkTo(check);
-    check->LinkTo(test_fragment.entry());
+    if (!test_preamble_fragment.is_empty()) {
+      check->LinkTo(test_preamble_fragment.entry());
+      test_preamble_fragment.exit()->LinkTo(test_fragment.entry());
+    } else {
+      check->LinkTo(test_fragment.entry());
+    }
     Goto(join);
     body_exit->Goto(join);
   }
@@ -1461,22 +1469,25 @@
       Symbols::AwaitContextVar(), false);
   LocalVariable* continuation_result = lookup_scope->LookupVariable(
       Symbols::AsyncOperationParam(), false);
+  LocalVariable* continuation_error = lookup_scope->LookupVariable(
+      Symbols::AsyncOperationErrorParam(), false);
   ASSERT((continuation_result != NULL) && continuation_result->is_captured());
+  ASSERT((continuation_error != NULL) && continuation_error->is_captured());
   ASSERT((old_ctx != NULL) && old_ctx->is_captured());
   // Before restoring the continuation context we need to temporary save the
-  // current continuation result.
-  Value* continuation_result_value = Bind(BuildLoadLocal(*continuation_result));
-  Do(BuildStoreExprTemp(continuation_result_value));
-
+  // result and error parameter.
+  LocalVariable* temp_result_var = EnterTempLocalScope(
+      Bind(BuildLoadLocal(*continuation_result)));
+  LocalVariable* temp_error_var = EnterTempLocalScope(
+      Bind(BuildLoadLocal(*continuation_error)));
   // Restore the saved continuation context.
   BuildRestoreContext(*old_ctx);
 
   // Pass over the continuation result.
-  Value* saved_continuation_result = Bind(BuildLoadExprTemp());
+
   // FlowGraphBuilder is at top context level, but the await target has possibly
   // been recorded in a nested context (old_ctx_level). We need to unroll
   // manually here.
-  LocalVariable* tmp_var = EnterTempLocalScope(saved_continuation_result);
   intptr_t delta = old_ctx_level -
                    continuation_result->owner()->context_level();
   ASSERT(delta >= 0);
@@ -1486,15 +1497,30 @@
         context, Context::parent_offset(), Type::ZoneHandle(I, Type::null()),
         Scanner::kNoSourcePos));
   }
-  Value* tmp_val = Bind(new(I) LoadLocalInstr(*tmp_var));
+  LocalVariable* temp_context_var = EnterTempLocalScope(context);
+
+  Value* context_val = Bind(new(I) LoadLocalInstr(*temp_context_var));
+  Value* store_val = Bind(new(I) LoadLocalInstr(*temp_result_var));
   StoreInstanceFieldInstr* store = new(I) StoreInstanceFieldInstr(
       Context::variable_offset(continuation_result->index()),
-      context,
-      tmp_val,
+      context_val,
+      store_val,
       kEmitStoreBarrier,
       Scanner::kNoSourcePos);
   Do(store);
-  Do(ExitTempLocalScope(tmp_var));
+  context_val = Bind(new(I) LoadLocalInstr(*temp_context_var));
+  store_val = Bind(new(I) LoadLocalInstr(*temp_error_var));
+  StoreInstanceFieldInstr* store2 = new(I) StoreInstanceFieldInstr(
+      Context::variable_offset(continuation_error->index()),
+      context_val,
+      store_val,
+      kEmitStoreBarrier,
+      Scanner::kNoSourcePos);
+  Do(store2);
+
+  Do(ExitTempLocalScope(temp_context_var));
+  Do(ExitTempLocalScope(temp_error_var));
+  Do(ExitTempLocalScope(temp_result_var));
 
   // Goto saved join.
   Goto(target);
@@ -1967,15 +1993,21 @@
 //                         body:      <Sequence> }
 // The fragment is composed as follows:
 // a) loop-join
-// b) [ test ] -> (body-entry-target, loop-exit-target)
-// c) body-entry-target
-// d) [ body ] -> (continue-join)
-// e) continue-join -> (loop-join)
-// f) loop-exit-target
-// g) break-join (optional)
+// b) [ test_preamble ]?
+// c) [ test ] -> (body-entry-target, loop-exit-target)
+// d) body-entry-target
+// e) [ body ] -> (continue-join)
+// f) continue-join -> (loop-join)
+// g) loop-exit-target
+// h) break-join (optional)
 void EffectGraphVisitor::VisitWhileNode(WhileNode* node) {
   NestedLoop nested_loop(owner(), node->label());
 
+  EffectGraphVisitor for_preamble(owner());
+  if (node->condition_preamble() != NULL) {
+    node->condition_preamble()->Visit(&for_preamble);
+  }
+
   TestGraphVisitor for_test(owner(), node->condition()->token_pos());
   node->condition()->Visit(&for_test);
   ASSERT(!for_test.is_empty());  // Language spec.
@@ -1989,7 +2021,7 @@
     if (for_body.is_open()) for_body.Goto(join);
     for_body.exit_ = join;
   }
-  TieLoop(node->token_pos(), for_test, for_body);
+  TieLoop(node->token_pos(), for_test, for_body, for_preamble);
   join = nested_loop.break_target();
   if (join != NULL) {
     Goto(join);
@@ -2101,6 +2133,12 @@
     Append(for_body);
     exit_ = nested_loop.break_target();  // May be NULL.
   } else {
+    EffectGraphVisitor for_test_preamble(owner());
+    if (node->condition_preamble() != NULL) {
+      node->condition_preamble()->Visit(&for_test_preamble);
+      Append(for_test_preamble);
+    }
+
     TestGraphVisitor for_test(owner(), node->condition()->token_pos());
     node->condition()->Visit(&for_test);
     Append(for_test);
diff --git a/runtime/vm/flow_graph_builder.h b/runtime/vm/flow_graph_builder.h
index fe23674..74742d1 100644
--- a/runtime/vm/flow_graph_builder.h
+++ b/runtime/vm/flow_graph_builder.h
@@ -338,7 +338,8 @@
   // successor of the loop condition.
   void TieLoop(intptr_t token_pos,
                const TestGraphVisitor& test_fragment,
-               const EffectGraphVisitor& body_fragment);
+               const EffectGraphVisitor& body_fragment,
+               const EffectGraphVisitor& test_preamble_fragment);
 
   // Wraps a value in a push-argument instruction and adds the result to the
   // graph.
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index 8b1ea06..84b7aac 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -872,15 +872,6 @@
   uword label_address = 0;
   StubCode* stub_code = isolate()->stub_code();
   if (is_optimizing() && (ic_data.NumberOfUsedChecks() == 0)) {
-    if (ic_data.IsClosureCall()) {
-      // This IC call may be closure call only.
-      label_address = stub_code->ClosureCallInlineCacheEntryPoint();
-      ExternalLabel target_label(label_address);
-      EmitInstanceCall(&target_label,
-                       ICData::ZoneHandle(ic_data.AsUnaryClassChecks()),
-                       argument_count, deopt_id, token_pos, locs);
-      return;
-    }
     // Emit IC call that will count and thus may need reoptimization at
     // function entry.
     ASSERT(!is_optimizing()
@@ -1290,13 +1281,17 @@
 
 intptr_t ParallelMoveResolver::AllocateScratchRegister(
     Location::Kind kind,
-    intptr_t blocked,
+    uword blocked_mask,
     intptr_t first_free_register,
     intptr_t last_free_register,
     bool* spilled) {
+  COMPILE_ASSERT(static_cast<intptr_t>(sizeof(blocked_mask)) * kBitsPerByte >=
+                 kNumberOfFpuRegisters);
+  COMPILE_ASSERT(static_cast<intptr_t>(sizeof(blocked_mask)) * kBitsPerByte >=
+                 kNumberOfCpuRegisters);
   intptr_t scratch = -1;
   for (intptr_t reg = first_free_register; reg <= last_free_register; reg++) {
-    if ((blocked != reg) &&
+    if ((((1 << reg) & blocked_mask) == 0) &&
         IsScratchLocation(Location::MachineRegisterLocation(kind, reg))) {
       scratch = reg;
       break;
@@ -1306,7 +1301,7 @@
   if (scratch == -1) {
     *spilled = true;
     for (intptr_t reg = first_free_register; reg <= last_free_register; reg++) {
-      if (blocked != reg) {
+      if (((1 << reg) & blocked_mask) == 0) {
         scratch = reg;
         break;
       }
@@ -1324,9 +1319,12 @@
     : resolver_(resolver),
       reg_(kNoFpuRegister),
       spilled_(false) {
+  COMPILE_ASSERT(FpuTMP != kNoFpuRegister);
+  uword blocked_mask = ((blocked != kNoFpuRegister) ? 1 << blocked : 0)
+                     | 1 << FpuTMP;
   reg_ = static_cast<FpuRegister>(
       resolver_->AllocateScratchRegister(Location::kFpuRegister,
-                                         blocked,
+                                         blocked_mask,
                                          0,
                                          kNumberOfFpuRegisters - 1,
                                          &spilled_));
@@ -1344,14 +1342,26 @@
 }
 
 
+static inline intptr_t MaskBit(Register reg) {
+  return (reg != kNoRegister) ? (1 << reg) : 0;
+}
+
+
 ParallelMoveResolver::ScratchRegisterScope::ScratchRegisterScope(
     ParallelMoveResolver* resolver, Register blocked)
     : resolver_(resolver),
       reg_(kNoRegister),
       spilled_(false) {
+  uword blocked_mask = MaskBit(blocked)
+                     | MaskBit(CTX)
+                     | MaskBit(SPREG)
+                     | MaskBit(FPREG)
+                     | MaskBit(TMP)
+                     | MaskBit(TMP2)
+                     | MaskBit(PP);
   reg_ = static_cast<Register>(
       resolver_->AllocateScratchRegister(Location::kRegister,
-                                         blocked,
+                                         blocked_mask,
                                          kFirstFreeCpuRegister,
                                          kLastFreeCpuRegister,
                                          &spilled_));
diff --git a/runtime/vm/flow_graph_compiler.h b/runtime/vm/flow_graph_compiler.h
index d535233..89d66bac 100644
--- a/runtime/vm/flow_graph_compiler.h
+++ b/runtime/vm/flow_graph_compiler.h
@@ -61,7 +61,7 @@
 
   bool IsScratchLocation(Location loc);
   intptr_t AllocateScratchRegister(Location::Kind kind,
-                                   intptr_t blocked,
+                                   uword blocked_mask,
                                    intptr_t first_free_register,
                                    intptr_t last_free_register,
                                    bool* spilled);
@@ -96,8 +96,11 @@
   void StoreObject(const Address& dst, const Object& obj);
   void Exchange(Register reg, const Address& mem);
   void Exchange(const Address& mem1, const Address& mem2);
-  void Exchange(Register reg, intptr_t stack_offset);
-  void Exchange(intptr_t stack_offset1, intptr_t stack_offset2);
+  void Exchange(Register reg, Register base_reg, intptr_t stack_offset);
+  void Exchange(Register base_reg1,
+                intptr_t stack_offset1,
+                Register base_reg2,
+                intptr_t stack_offset2);
 
   FlowGraphCompiler* compiler_;
 
diff --git a/runtime/vm/flow_graph_compiler_arm.cc b/runtime/vm/flow_graph_compiler_arm.cc
index 84e984c..b9af83a 100644
--- a/runtime/vm/flow_graph_compiler_arm.cc
+++ b/runtime/vm/flow_graph_compiler_arm.cc
@@ -893,17 +893,9 @@
 
   __ Bind(&wrong_num_arguments);
   if (function.IsClosureFunction()) {
-    // Invoke noSuchMethod function passing "call" as the original name.
-    StubCode* stub_code = isolate()->stub_code();
-    const int kNumArgsChecked = 1;
-    const ICData& ic_data = ICData::ZoneHandle(
-        ICData::New(function, Symbols::Call(), Object::empty_array(),
-                    Isolate::kNoDeoptId, kNumArgsChecked));
-    __ LoadObject(R5, ic_data);
     __ LeaveDartFrame();  // The arguments are still on the stack.
-    __ Branch(&stub_code->CallNoSuchMethodFunctionLabel());
+    __ Branch(&isolate()->stub_code()->CallClosureNoSuchMethodLabel());
     // The noSuchMethod call may return to the caller, but not here.
-    __ bkpt(0);
   } else if (check_correct_named_args) {
     __ Stop("Wrong arguments");
   }
@@ -1052,21 +1044,9 @@
       __ b(&correct_num_arguments, EQ);
       __ Bind(&wrong_num_arguments);
       if (function.IsClosureFunction()) {
-        // Invoke noSuchMethod function passing the original function name.
-        // For closure functions, use "call" as the original name.
-        const String& name =
-            String::Handle(function.IsClosureFunction()
-                             ? Symbols::Call().raw()
-                             : function.name());
-        const int kNumArgsChecked = 1;
-        const ICData& ic_data = ICData::ZoneHandle(
-            ICData::New(function, name, Object::empty_array(),
-                        Isolate::kNoDeoptId, kNumArgsChecked));
-        __ LoadObject(R5, ic_data);
         __ LeaveDartFrame();  // The arguments are still on the stack.
-        __ Branch(&stub_code->CallNoSuchMethodFunctionLabel());
+        __ Branch(&isolate()->stub_code()->CallClosureNoSuchMethodLabel());
         // The noSuchMethod call may return to the caller, but not here.
-        __ bkpt(0);
       } else {
         __ Stop("Wrong number of arguments");
       }
@@ -1535,18 +1515,20 @@
     } else {
       ASSERT(destination.IsStackSlot());
       const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ StoreToOffset(kWord, source.reg(), FP, dest_offset);
+      __ StoreToOffset(
+          kWord, source.reg(), destination.base_reg(), dest_offset);
     }
   } else if (source.IsStackSlot()) {
     if (destination.IsRegister()) {
       const intptr_t source_offset = source.ToStackSlotOffset();
-      __ LoadFromOffset(kWord, destination.reg(), FP, source_offset);
+      __ LoadFromOffset(
+          kWord, destination.reg(), source.base_reg(), source_offset);
     } else {
       ASSERT(destination.IsStackSlot());
       const intptr_t source_offset = source.ToStackSlotOffset();
       const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ LoadFromOffset(kWord, TMP, FP, source_offset);
-      __ StoreToOffset(kWord, TMP, FP, dest_offset);
+      __ LoadFromOffset(kWord, TMP, source.base_reg(), source_offset);
+      __ StoreToOffset(kWord, TMP, destination.base_reg(), dest_offset);
     }
   } else if (source.IsFpuRegister()) {
     if (destination.IsFpuRegister()) {
@@ -1562,38 +1544,39 @@
       if (destination.IsDoubleStackSlot()) {
         const intptr_t dest_offset = destination.ToStackSlotOffset();
         DRegister src = EvenDRegisterOf(source.fpu_reg());
-        __ StoreDToOffset(src, FP, dest_offset);
+        __ StoreDToOffset(src, destination.base_reg(), dest_offset);
       } else {
         ASSERT(destination.IsQuadStackSlot());
         const intptr_t dest_offset = destination.ToStackSlotOffset();
         const DRegister dsrc0 = EvenDRegisterOf(source.fpu_reg());
-        __ StoreMultipleDToOffset(dsrc0, 2, FP, dest_offset);
+        __ StoreMultipleDToOffset(
+            dsrc0, 2, destination.base_reg(), dest_offset);
       }
     }
   } else if (source.IsDoubleStackSlot()) {
     if (destination.IsFpuRegister()) {
-      const intptr_t dest_offset = source.ToStackSlotOffset();
+      const intptr_t source_offset = source.ToStackSlotOffset();
       const DRegister dst = EvenDRegisterOf(destination.fpu_reg());
-      __ LoadDFromOffset(dst, FP, dest_offset);
+      __ LoadDFromOffset(dst, source.base_reg(), source_offset);
     } else {
       ASSERT(destination.IsDoubleStackSlot());
       const intptr_t source_offset = source.ToStackSlotOffset();
       const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ LoadDFromOffset(DTMP, FP, source_offset);
-      __ StoreDToOffset(DTMP, FP, dest_offset);
+      __ LoadDFromOffset(DTMP, source.base_reg(), source_offset);
+      __ StoreDToOffset(DTMP, destination.base_reg(), dest_offset);
     }
   } else if (source.IsQuadStackSlot()) {
     if (destination.IsFpuRegister()) {
-      const intptr_t dest_offset = source.ToStackSlotOffset();
+      const intptr_t source_offset = source.ToStackSlotOffset();
       const DRegister dst0 = EvenDRegisterOf(destination.fpu_reg());
-      __ LoadMultipleDFromOffset(dst0, 2, FP, dest_offset);
+      __ LoadMultipleDFromOffset(dst0, 2, source.base_reg(), source_offset);
     } else {
       ASSERT(destination.IsQuadStackSlot());
       const intptr_t source_offset = source.ToStackSlotOffset();
       const intptr_t dest_offset = destination.ToStackSlotOffset();
       const DRegister dtmp0 = DTMP;
-      __ LoadMultipleDFromOffset(dtmp0, 2, FP, source_offset);
-      __ StoreMultipleDToOffset(dtmp0, 2, FP, dest_offset);
+      __ LoadMultipleDFromOffset(dtmp0, 2, source.base_reg(), source_offset);
+      __ StoreMultipleDToOffset(dtmp0, 2, destination.base_reg(), dest_offset);
     }
   } else {
     ASSERT(source.IsConstant());
@@ -1625,7 +1608,7 @@
         __ vldrd(DTMP, Address(TMP, 0));
       }
       const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ StoreDToOffset(DTMP, FP, dest_offset);
+      __ StoreDToOffset(DTMP, destination.base_reg(), dest_offset);
     } else {
       ASSERT(destination.IsStackSlot());
       const intptr_t dest_offset = destination.ToStackSlotOffset();
@@ -1634,7 +1617,7 @@
       } else {
         __ LoadObject(TMP, constant);
       }
-      __ StoreToOffset(kWord, TMP, FP, dest_offset);
+      __ StoreToOffset(kWord, TMP, destination.base_reg(), dest_offset);
     }
   }
 
@@ -1654,11 +1637,14 @@
     __ mov(source.reg(), Operand(destination.reg()));
     __ mov(destination.reg(), Operand(IP));
   } else if (source.IsRegister() && destination.IsStackSlot()) {
-    Exchange(source.reg(), destination.ToStackSlotOffset());
+    Exchange(source.reg(),
+             destination.base_reg(), destination.ToStackSlotOffset());
   } else if (source.IsStackSlot() && destination.IsRegister()) {
-    Exchange(destination.reg(), source.ToStackSlotOffset());
+    Exchange(destination.reg(),
+             source.base_reg(), source.ToStackSlotOffset());
   } else if (source.IsStackSlot() && destination.IsStackSlot()) {
-    Exchange(source.ToStackSlotOffset(), destination.ToStackSlotOffset());
+    Exchange(source.base_reg(), source.ToStackSlotOffset(),
+             destination.base_reg(), destination.ToStackSlotOffset());
   } else if (source.IsFpuRegister() && destination.IsFpuRegister()) {
     const DRegister dst = EvenDRegisterOf(destination.fpu_reg());
     DRegister src = EvenDRegisterOf(source.fpu_reg());
@@ -1675,29 +1661,43 @@
     QRegister qreg = source.IsFpuRegister() ? source.fpu_reg()
                                             : destination.fpu_reg();
     DRegister reg = EvenDRegisterOf(qreg);
+    Register base_reg = source.IsFpuRegister()
+        ? destination.base_reg()
+        : source.base_reg();
     const intptr_t slot_offset = source.IsFpuRegister()
         ? destination.ToStackSlotOffset()
         : source.ToStackSlotOffset();
 
     if (double_width) {
-      __ LoadDFromOffset(DTMP, FP, slot_offset);
-      __ StoreDToOffset(reg, FP, slot_offset);
+      __ LoadDFromOffset(DTMP, base_reg, slot_offset);
+      __ StoreDToOffset(reg, base_reg, slot_offset);
       __ vmovd(reg, DTMP);
     } else {
-      UNIMPLEMENTED();
+      __ LoadMultipleDFromOffset(DTMP, 2, base_reg, slot_offset);
+      __ StoreMultipleDToOffset(reg, 2, base_reg, slot_offset);
+      __ vmovq(qreg, QTMP);
     }
   } else if (source.IsDoubleStackSlot() && destination.IsDoubleStackSlot()) {
     const intptr_t source_offset = source.ToStackSlotOffset();
     const intptr_t dest_offset = destination.ToStackSlotOffset();
 
-    ScratchFpuRegisterScope ensure_scratch(this, QTMP);
+    ScratchFpuRegisterScope ensure_scratch(this, kNoQRegister);
     DRegister scratch = EvenDRegisterOf(ensure_scratch.reg());
-    __ LoadDFromOffset(DTMP, FP, source_offset);
-    __ LoadDFromOffset(scratch, FP, dest_offset);
-    __ StoreDToOffset(DTMP, FP, dest_offset);
-    __ StoreDToOffset(scratch, FP, source_offset);
+    __ LoadDFromOffset(DTMP, source.base_reg(), source_offset);
+    __ LoadDFromOffset(scratch, destination.base_reg(), dest_offset);
+    __ StoreDToOffset(DTMP, destination.base_reg(), dest_offset);
+    __ StoreDToOffset(scratch, destination.base_reg(), source_offset);
   } else if (source.IsQuadStackSlot() && destination.IsQuadStackSlot()) {
-    UNIMPLEMENTED();
+    const intptr_t source_offset = source.ToStackSlotOffset();
+    const intptr_t dest_offset = destination.ToStackSlotOffset();
+
+    ScratchFpuRegisterScope ensure_scratch(this, kNoQRegister);
+    DRegister scratch = EvenDRegisterOf(ensure_scratch.reg());
+    __ LoadMultipleDFromOffset(DTMP, 2, source.base_reg(), source_offset);
+    __ LoadMultipleDFromOffset(scratch, 2, destination.base_reg(), dest_offset);
+    __ StoreMultipleDToOffset(DTMP, 2, destination.base_reg(), dest_offset);
+    __ StoreMultipleDToOffset(
+        scratch, 2, destination.base_reg(), source_offset);
   } else {
     UNREACHABLE();
   }
@@ -1722,14 +1722,12 @@
 
 void ParallelMoveResolver::MoveMemoryToMemory(const Address& dst,
                                               const Address& src) {
-  __ ldr(IP, src);
-  __ str(IP, dst);
+  UNREACHABLE();
 }
 
 
 void ParallelMoveResolver::StoreObject(const Address& dst, const Object& obj) {
-  __ LoadObject(IP, obj);
-  __ str(IP, dst);
+  UNREACHABLE();
 }
 
 
@@ -1747,20 +1745,26 @@
 }
 
 
-void ParallelMoveResolver::Exchange(Register reg, intptr_t stack_offset) {
-  __ mov(TMP, Operand(reg));
-  __ LoadFromOffset(kWord, reg, FP, stack_offset);
-  __ StoreToOffset(kWord, TMP, FP, stack_offset);
+void ParallelMoveResolver::Exchange(Register reg,
+                                    Register base_reg,
+                                    intptr_t stack_offset) {
+  ScratchRegisterScope tmp(this, reg);
+  __ mov(tmp.reg(), Operand(reg));
+  __ LoadFromOffset(kWord, reg, base_reg, stack_offset);
+  __ StoreToOffset(kWord, tmp.reg(), base_reg, stack_offset);
 }
 
 
-void ParallelMoveResolver::Exchange(intptr_t stack_offset1,
+void ParallelMoveResolver::Exchange(Register base_reg1,
+                                    intptr_t stack_offset1,
+                                    Register base_reg2,
                                     intptr_t stack_offset2) {
-  ScratchRegisterScope ensure_scratch(this, IP);
-  __ LoadFromOffset(kWord, ensure_scratch.reg(), FP, stack_offset1);
-  __ LoadFromOffset(kWord, TMP, FP, stack_offset2);
-  __ StoreToOffset(kWord, ensure_scratch.reg(), FP, stack_offset2);
-  __ StoreToOffset(kWord, TMP, FP, stack_offset1);
+  ScratchRegisterScope tmp1(this, kNoRegister);
+  ScratchRegisterScope tmp2(this, tmp1.reg());
+  __ LoadFromOffset(kWord, tmp1.reg(), base_reg1, stack_offset1);
+  __ LoadFromOffset(kWord, tmp2.reg(), base_reg2, stack_offset2);
+  __ StoreToOffset(kWord, tmp1.reg(), base_reg2, stack_offset2);
+  __ StoreToOffset(kWord, tmp2.reg(), base_reg1, stack_offset1);
 }
 
 
diff --git a/runtime/vm/flow_graph_compiler_arm64.cc b/runtime/vm/flow_graph_compiler_arm64.cc
index c957405..f0c85dc 100644
--- a/runtime/vm/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/flow_graph_compiler_arm64.cc
@@ -892,17 +892,10 @@
 
   __ Bind(&wrong_num_arguments);
   if (function.IsClosureFunction()) {
-    // Invoke noSuchMethod function passing "call" as the original name.
-    StubCode* stub_code = isolate()->stub_code();
-    const int kNumArgsChecked = 1;
-    const ICData& ic_data = ICData::ZoneHandle(
-        ICData::New(function, Symbols::Call(), Object::empty_array(),
-                    Isolate::kNoDeoptId, kNumArgsChecked));
-    __ LoadObject(R5, ic_data, PP);
     __ LeaveDartFrame();  // The arguments are still on the stack.
-    __ BranchPatchable(&stub_code->CallNoSuchMethodFunctionLabel());
+    __ BranchPatchable(
+        &isolate()->stub_code()->CallClosureNoSuchMethodLabel());
     // The noSuchMethod call may return to the caller, but not here.
-    __ brk(0);
   } else if (check_correct_named_args) {
     __ Stop("Wrong arguments");
   }
@@ -1059,21 +1052,10 @@
       __ b(&correct_num_arguments, EQ);
       __ Bind(&wrong_num_arguments);
       if (function.IsClosureFunction()) {
-        // Invoke noSuchMethod function passing the original function name.
-        // For closure functions, use "call" as the original name.
-        const String& name =
-            String::Handle(function.IsClosureFunction()
-                             ? Symbols::Call().raw()
-                             : function.name());
-        const int kNumArgsChecked = 1;
-        const ICData& ic_data = ICData::ZoneHandle(
-            ICData::New(function, name, Object::empty_array(),
-                        Isolate::kNoDeoptId, kNumArgsChecked));
-        __ LoadObject(R5, ic_data, PP);
         __ LeaveDartFrame();  // The arguments are still on the stack.
-        __ BranchPatchable(&stub_code->CallNoSuchMethodFunctionLabel());
+        __ BranchPatchable(
+            &isolate()->stub_code()->CallClosureNoSuchMethodLabel());
         // The noSuchMethod call may return to the caller, but not here.
-        __ brk(0);
       } else {
         __ Stop("Wrong number of arguments");
       }
@@ -1521,18 +1503,20 @@
     } else {
       ASSERT(destination.IsStackSlot());
       const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ StoreToOffset(source.reg(), FP, dest_offset, PP);
+      __ StoreToOffset(source.reg(), destination.base_reg(), dest_offset, PP);
     }
   } else if (source.IsStackSlot()) {
     if (destination.IsRegister()) {
       const intptr_t source_offset = source.ToStackSlotOffset();
-      __ LoadFromOffset(destination.reg(), FP, source_offset, PP);
+      __ LoadFromOffset(
+          destination.reg(), source.base_reg(), source_offset, PP);
     } else {
       ASSERT(destination.IsStackSlot());
       const intptr_t source_offset = source.ToStackSlotOffset();
       const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ LoadFromOffset(TMP, FP, source_offset, PP);
-      __ StoreToOffset(TMP, FP, dest_offset, PP);
+      ScratchRegisterScope tmp(this, kNoRegister);
+      __ LoadFromOffset(tmp.reg(), source.base_reg(), source_offset, PP);
+      __ StoreToOffset(tmp.reg(), destination.base_reg(), dest_offset, PP);
     }
   } else if (source.IsFpuRegister()) {
     if (destination.IsFpuRegister()) {
@@ -1541,35 +1525,37 @@
       if (destination.IsDoubleStackSlot()) {
         const intptr_t dest_offset = destination.ToStackSlotOffset();
         VRegister src = source.fpu_reg();
-        __ StoreDToOffset(src, FP, dest_offset, PP);
+        __ StoreDToOffset(src, destination.base_reg(), dest_offset, PP);
       } else {
         ASSERT(destination.IsQuadStackSlot());
         const intptr_t dest_offset = destination.ToStackSlotOffset();
-        __ StoreQToOffset(source.fpu_reg(), FP, dest_offset, PP);
+        __ StoreQToOffset(
+            source.fpu_reg(), destination.base_reg(), dest_offset, PP);
       }
     }
   } else if (source.IsDoubleStackSlot()) {
     if (destination.IsFpuRegister()) {
-      const intptr_t dest_offset = source.ToStackSlotOffset();
+      const intptr_t source_offset = source.ToStackSlotOffset();
       const VRegister dst = destination.fpu_reg();
-      __ LoadDFromOffset(dst, FP, dest_offset, PP);
+      __ LoadDFromOffset(dst, source.base_reg(), source_offset, PP);
     } else {
       ASSERT(destination.IsDoubleStackSlot());
       const intptr_t source_offset = source.ToStackSlotOffset();
       const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ LoadDFromOffset(VTMP, FP, source_offset, PP);
-      __ StoreDToOffset(VTMP, FP, dest_offset, PP);
+      __ LoadDFromOffset(VTMP, source.base_reg(), source_offset, PP);
+      __ StoreDToOffset(VTMP, destination.base_reg(), dest_offset, PP);
     }
   } else if (source.IsQuadStackSlot()) {
     if (destination.IsFpuRegister()) {
-      const intptr_t dest_offset = source.ToStackSlotOffset();
-      __ LoadQFromOffset(destination.fpu_reg(), FP, dest_offset, PP);
+      const intptr_t source_offset = source.ToStackSlotOffset();
+      __ LoadQFromOffset(
+          destination.fpu_reg(), source.base_reg(), source_offset, PP);
     } else {
       ASSERT(destination.IsQuadStackSlot());
       const intptr_t source_offset = source.ToStackSlotOffset();
       const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ LoadQFromOffset(VTMP, FP, source_offset, PP);
-      __ StoreQToOffset(VTMP, FP, dest_offset, PP);
+      __ LoadQFromOffset(VTMP, source.base_reg(), source_offset, PP);
+      __ StoreQToOffset(VTMP, destination.base_reg(), dest_offset, PP);
     }
   } else {
     ASSERT(source.IsConstant());
@@ -1581,23 +1567,26 @@
       if (Utils::DoublesBitEqual(Double::Cast(constant).value(), 0.0)) {
         __ veor(dst, dst, dst);
       } else {
-        __ LoadObject(TMP, constant, PP);
-        __ LoadDFieldFromOffset(dst, TMP, Double::value_offset(), PP);
+        ScratchRegisterScope tmp(this, kNoRegister);
+        __ LoadObject(tmp.reg(), constant, PP);
+        __ LoadDFieldFromOffset(dst, tmp.reg(), Double::value_offset(), PP);
       }
     } else if (destination.IsDoubleStackSlot()) {
       if (Utils::DoublesBitEqual(Double::Cast(constant).value(), 0.0)) {
         __ veor(VTMP, VTMP, VTMP);
       } else {
-        __ LoadObject(TMP, constant, PP);
-        __ LoadDFieldFromOffset(VTMP, TMP, Double::value_offset(), PP);
+        ScratchRegisterScope tmp(this, kNoRegister);
+        __ LoadObject(tmp.reg(), constant, PP);
+        __ LoadDFieldFromOffset(VTMP, tmp.reg(), Double::value_offset(), PP);
       }
       const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ StoreDToOffset(VTMP, FP, dest_offset, PP);
+      __ StoreDToOffset(VTMP, destination.base_reg(), dest_offset, PP);
     } else {
       ASSERT(destination.IsStackSlot());
       const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ LoadObject(TMP, constant, PP);
-      __ StoreToOffset(TMP, FP, dest_offset, PP);
+      ScratchRegisterScope tmp(this, kNoRegister);
+      __ LoadObject(tmp.reg(), constant, PP);
+      __ StoreToOffset(tmp.reg(), destination.base_reg(), dest_offset, PP);
     }
   }
 
@@ -1617,11 +1606,14 @@
     __ mov(source.reg(), destination.reg());
     __ mov(destination.reg(), TMP);
   } else if (source.IsRegister() && destination.IsStackSlot()) {
-    Exchange(source.reg(), destination.ToStackSlotOffset());
+    Exchange(source.reg(),
+             destination.base_reg(), destination.ToStackSlotOffset());
   } else if (source.IsStackSlot() && destination.IsRegister()) {
-    Exchange(destination.reg(), source.ToStackSlotOffset());
+    Exchange(destination.reg(),
+             source.base_reg(), source.ToStackSlotOffset());
   } else if (source.IsStackSlot() && destination.IsStackSlot()) {
-    Exchange(source.ToStackSlotOffset(), destination.ToStackSlotOffset());
+    Exchange(source.base_reg(), source.ToStackSlotOffset(),
+             destination.base_reg(), destination.ToStackSlotOffset());
   } else if (source.IsFpuRegister() && destination.IsFpuRegister()) {
     const VRegister dst = destination.fpu_reg();
     const VRegister src = source.fpu_reg();
@@ -1636,30 +1628,43 @@
     bool double_width = destination.IsDoubleStackSlot() ||
                         source.IsDoubleStackSlot();
     VRegister reg = source.IsFpuRegister() ? source.fpu_reg()
-                                          : destination.fpu_reg();
+                                           : destination.fpu_reg();
+    Register base_reg = source.IsFpuRegister()
+        ? destination.base_reg()
+        : source.base_reg();
     const intptr_t slot_offset = source.IsFpuRegister()
         ? destination.ToStackSlotOffset()
         : source.ToStackSlotOffset();
 
     if (double_width) {
-      __ LoadDFromOffset(VTMP, FP, slot_offset, PP);
-      __ StoreDToOffset(reg, FP, slot_offset, PP);
+      __ LoadDFromOffset(VTMP, base_reg, slot_offset, PP);
+      __ StoreDToOffset(reg, base_reg, slot_offset, PP);
       __ fmovdd(reg, VTMP);
     } else {
-      UNIMPLEMENTED();
+      __ LoadQFromOffset(VTMP, base_reg, slot_offset, PP);
+      __ StoreQToOffset(reg, base_reg, slot_offset, PP);
+      __ fmovdd(reg, VTMP);
     }
   } else if (source.IsDoubleStackSlot() && destination.IsDoubleStackSlot()) {
     const intptr_t source_offset = source.ToStackSlotOffset();
     const intptr_t dest_offset = destination.ToStackSlotOffset();
 
-    ScratchFpuRegisterScope ensure_scratch(this, VTMP);
+    ScratchFpuRegisterScope ensure_scratch(this, kNoFpuRegister);
     VRegister scratch = ensure_scratch.reg();
-    __ LoadDFromOffset(VTMP, FP, source_offset, PP);
-    __ LoadDFromOffset(scratch, FP, dest_offset, PP);
-    __ StoreDToOffset(VTMP, FP, dest_offset, PP);
-    __ StoreDToOffset(scratch, FP, source_offset, PP);
+    __ LoadDFromOffset(VTMP, source.base_reg(), source_offset, PP);
+    __ LoadDFromOffset(scratch, destination.base_reg(), dest_offset, PP);
+    __ StoreDToOffset(VTMP, destination.base_reg(), dest_offset, PP);
+    __ StoreDToOffset(scratch, source.base_reg(), source_offset, PP);
   } else if (source.IsQuadStackSlot() && destination.IsQuadStackSlot()) {
-    UNIMPLEMENTED();
+    const intptr_t source_offset = source.ToStackSlotOffset();
+    const intptr_t dest_offset = destination.ToStackSlotOffset();
+
+    ScratchFpuRegisterScope ensure_scratch(this, kNoFpuRegister);
+    VRegister scratch = ensure_scratch.reg();
+    __ LoadQFromOffset(VTMP, source.base_reg(), source_offset, PP);
+    __ LoadQFromOffset(scratch, destination.base_reg(), dest_offset, PP);
+    __ StoreQToOffset(VTMP, destination.base_reg(), dest_offset, PP);
+    __ StoreQToOffset(scratch, source.base_reg(), source_offset, PP);
   } else {
     UNREACHABLE();
   }
@@ -1684,12 +1689,12 @@
 
 void ParallelMoveResolver::MoveMemoryToMemory(const Address& dst,
                                               const Address& src) {
-  UNIMPLEMENTED();
+  UNREACHABLE();
 }
 
 
 void ParallelMoveResolver::StoreObject(const Address& dst, const Object& obj) {
-  UNIMPLEMENTED();
+  UNREACHABLE();
 }
 
 
@@ -1707,34 +1712,46 @@
 }
 
 
-void ParallelMoveResolver::Exchange(Register reg, intptr_t stack_offset) {
-  UNIMPLEMENTED();
+void ParallelMoveResolver::Exchange(Register reg,
+                                    Register base_reg,
+                                    intptr_t stack_offset) {
+  ScratchRegisterScope tmp(this, reg);
+  __ mov(tmp.reg(), reg);
+  __ LoadFromOffset(reg, base_reg, stack_offset, PP);
+  __ StoreToOffset(tmp.reg(), base_reg, stack_offset, PP);
 }
 
 
-void ParallelMoveResolver::Exchange(intptr_t stack_offset1,
+void ParallelMoveResolver::Exchange(Register base_reg1,
+                                    intptr_t stack_offset1,
+                                    Register base_reg2,
                                     intptr_t stack_offset2) {
-  UNIMPLEMENTED();
+  ScratchRegisterScope tmp1(this, kNoRegister);
+  ScratchRegisterScope tmp2(this, tmp1.reg());
+  __ LoadFromOffset(tmp1.reg(), base_reg1, stack_offset1, PP);
+  __ LoadFromOffset(tmp2.reg(), base_reg2, stack_offset2, PP);
+  __ StoreToOffset(tmp1.reg(), base_reg2, stack_offset2, PP);
+  __ StoreToOffset(tmp2.reg(), base_reg1, stack_offset1, PP);
 }
 
 
 void ParallelMoveResolver::SpillScratch(Register reg) {
-  UNIMPLEMENTED();
+  __ Push(reg);
 }
 
 
 void ParallelMoveResolver::RestoreScratch(Register reg) {
-  UNIMPLEMENTED();
+  __ Pop(reg);
 }
 
 
 void ParallelMoveResolver::SpillFpuScratch(FpuRegister reg) {
-  UNIMPLEMENTED();
+  __ PushDouble(reg);
 }
 
 
 void ParallelMoveResolver::RestoreFpuScratch(FpuRegister reg) {
-  UNIMPLEMENTED();
+  __ PopDouble(reg);
 }
 
 
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
index 616ce72..9922cb9 100644
--- a/runtime/vm/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/flow_graph_compiler_ia32.cc
@@ -916,17 +916,9 @@
 
   __ Bind(&wrong_num_arguments);
   if (function.IsClosureFunction()) {
-    // Invoke noSuchMethod function passing "call" as the original name.
-    StubCode* stub_code = isolate()->stub_code();
-    const int kNumArgsChecked = 1;
-    const ICData& ic_data = ICData::ZoneHandle(
-        ICData::New(function, Symbols::Call(), Object::empty_array(),
-                    Isolate::kNoDeoptId, kNumArgsChecked));
-    __ LoadObject(ECX, ic_data);
     __ LeaveFrame();  // The arguments are still on the stack.
-    __ jmp(&stub_code->CallNoSuchMethodFunctionLabel());
+    __ jmp(&isolate()->stub_code()->CallClosureNoSuchMethodLabel());
     // The noSuchMethod call may return to the caller, but not here.
-    __ int3();
   } else if (check_correct_named_args) {
     __ Stop("Wrong arguments");
   }
@@ -1058,21 +1050,9 @@
 
       __ Bind(&wrong_num_arguments);
       if (function.IsClosureFunction()) {
-        // Invoke noSuchMethod function passing the original function name.
-        // For closure functions, use "call" as the original name.
-        const String& name =
-            String::Handle(function.IsClosureFunction()
-                             ? Symbols::Call().raw()
-                             : function.name());
-        const int kNumArgsChecked = 1;
-        const ICData& ic_data = ICData::ZoneHandle(
-            ICData::New(function, name, Object::empty_array(),
-                        Isolate::kNoDeoptId, kNumArgsChecked));
-        __ LoadObject(ECX, ic_data);
         __ LeaveFrame();  // The arguments are still on the stack.
-        __ jmp(&stub_code->CallNoSuchMethodFunctionLabel());
+        __ jmp(&stub_code->CallClosureNoSuchMethodLabel());
         // The noSuchMethod call may return to the caller, but not here.
-        __ int3();
       } else {
         __ Stop("Wrong number of arguments");
       }
@@ -1741,12 +1721,16 @@
 }
 
 
-void ParallelMoveResolver::Exchange(Register reg, intptr_t stack_offset) {
+void ParallelMoveResolver::Exchange(Register reg,
+                                    Register base_reg,
+                                    intptr_t stack_offset) {
   UNREACHABLE();
 }
 
 
-void ParallelMoveResolver::Exchange(intptr_t stack_offset1,
+void ParallelMoveResolver::Exchange(Register base_reg1,
+                                    intptr_t stack_offset1,
+                                    Register base_reg2,
                                     intptr_t stack_offset2) {
   UNREACHABLE();
 }
diff --git a/runtime/vm/flow_graph_compiler_mips.cc b/runtime/vm/flow_graph_compiler_mips.cc
index 0962809..1b64073 100644
--- a/runtime/vm/flow_graph_compiler_mips.cc
+++ b/runtime/vm/flow_graph_compiler_mips.cc
@@ -913,17 +913,9 @@
 
   __ Bind(&wrong_num_arguments);
   if (function.IsClosureFunction()) {
-    // Invoke noSuchMethod function passing "call" as the original name.
-    StubCode* stub_code = isolate()->stub_code();
-    const int kNumArgsChecked = 1;
-    const ICData& ic_data = ICData::ZoneHandle(
-        ICData::New(function, Symbols::Call(), Object::empty_array(),
-                    Isolate::kNoDeoptId, kNumArgsChecked));
-    __ LoadObject(S5, ic_data);
     __ LeaveDartFrame();  // The arguments are still on the stack.
-    __ Branch(&stub_code->CallNoSuchMethodFunctionLabel());
+    __ Branch(&isolate()->stub_code()->CallClosureNoSuchMethodLabel());
     // The noSuchMethod call may return to the caller, but not here.
-    __ break_(0);
   } else if (check_correct_named_args) {
     __ Stop("Wrong arguments");
   }
@@ -1087,21 +1079,9 @@
       __ beq(T0, T1, &correct_num_arguments);
       __ Bind(&wrong_num_arguments);
       if (function.IsClosureFunction()) {
-        // Invoke noSuchMethod function passing the original function name.
-        // For closure functions, use "call" as the original name.
-        const String& name =
-            String::Handle(function.IsClosureFunction()
-                             ? Symbols::Call().raw()
-                             : function.name());
-        const int kNumArgsChecked = 1;
-        const ICData& ic_data = ICData::ZoneHandle(
-            ICData::New(function, name, Object::empty_array(),
-                        Isolate::kNoDeoptId, kNumArgsChecked));
-        __ LoadObject(S5, ic_data);
         __ LeaveDartFrame();  // The arguments are still on the stack.
-        __ Branch(&stub_code->CallNoSuchMethodFunctionLabel());
+        __ Branch(&isolate()->stub_code()->CallClosureNoSuchMethodLabel());
         // The noSuchMethod call may return to the caller, but not here.
-        __ break_(0);
       } else {
         __ Stop("Wrong number of arguments");
       }
@@ -1593,18 +1573,19 @@
     } else {
       ASSERT(destination.IsStackSlot());
       const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ StoreToOffset(source.reg(), FP, dest_offset);
+      __ StoreToOffset(source.reg(), destination.base_reg(), dest_offset);
     }
   } else if (source.IsStackSlot()) {
     if (destination.IsRegister()) {
       const intptr_t source_offset = source.ToStackSlotOffset();
-      __ LoadFromOffset(destination.reg(), FP, source_offset);
+      __ LoadFromOffset(destination.reg(), source.base_reg(), source_offset);
     } else {
       ASSERT(destination.IsStackSlot());
       const intptr_t source_offset = source.ToStackSlotOffset();
       const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ LoadFromOffset(TMP, FP, source_offset);
-      __ StoreToOffset(TMP, FP, dest_offset);
+      ScratchRegisterScope tmp(this, kNoRegister);
+      __ LoadFromOffset(tmp.reg(), source.base_reg(), source_offset);
+      __ StoreToOffset(tmp.reg(), destination.base_reg(), dest_offset);
     }
   } else if (source.IsFpuRegister()) {
     if (destination.IsFpuRegister()) {
@@ -1612,29 +1593,23 @@
       DRegister src = source.fpu_reg();
       __ movd(dst, src);
     } else {
-      if (destination.IsDoubleStackSlot()) {
-        const intptr_t dest_offset = destination.ToStackSlotOffset();
-        DRegister src = source.fpu_reg();
-        __ StoreDToOffset(src, FP, dest_offset);
-      } else {
-        ASSERT(destination.IsQuadStackSlot());
-        UNIMPLEMENTED();
-      }
+      ASSERT(destination.IsDoubleStackSlot());
+      const intptr_t dest_offset = destination.ToStackSlotOffset();
+      DRegister src = source.fpu_reg();
+      __ StoreDToOffset(src, destination.base_reg(), dest_offset);
     }
   } else if (source.IsDoubleStackSlot()) {
     if (destination.IsFpuRegister()) {
-      const intptr_t dest_offset = source.ToStackSlotOffset();
+      const intptr_t source_offset = source.ToStackSlotOffset();
       DRegister dst = destination.fpu_reg();
-      __ LoadDFromOffset(dst, FP, dest_offset);
+      __ LoadDFromOffset(dst, source.base_reg(), source_offset);
     } else {
       ASSERT(destination.IsDoubleStackSlot());
       const intptr_t source_offset = source.ToStackSlotOffset();
       const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ LoadDFromOffset(DTMP, FP, source_offset);
-      __ StoreDToOffset(DTMP, FP, dest_offset);
+      __ LoadDFromOffset(DTMP, source.base_reg(), source_offset);
+      __ StoreDToOffset(DTMP, destination.base_reg(), dest_offset);
     }
-  } else if (source.IsQuadStackSlot()) {
-    UNIMPLEMENTED();
   } else {
     ASSERT(source.IsConstant());
     const Object& constant = source.constant();
@@ -1648,12 +1623,13 @@
       const intptr_t dest_offset = destination.ToStackSlotOffset();
       __ LoadObject(TMP, constant);
       __ LoadDFromOffset(DTMP, TMP, Double::value_offset() - kHeapObjectTag);
-      __ StoreDToOffset(DTMP, FP, dest_offset);
+      __ StoreDToOffset(DTMP, destination.base_reg(), dest_offset);
     } else {
       ASSERT(destination.IsStackSlot());
       const intptr_t dest_offset = destination.ToStackSlotOffset();
-      __ LoadObject(TMP, constant);
-      __ StoreToOffset(TMP, FP, dest_offset);
+      ScratchRegisterScope tmp(this, kNoRegister);
+      __ LoadObject(tmp.reg(), constant);
+      __ StoreToOffset(tmp.reg(), destination.base_reg(), dest_offset);
     }
   }
 
@@ -1673,11 +1649,14 @@
     __ mov(source.reg(), destination.reg());
     __ mov(destination.reg(), TMP);
   } else if (source.IsRegister() && destination.IsStackSlot()) {
-    Exchange(source.reg(), destination.ToStackSlotOffset());
+    Exchange(source.reg(),
+             destination.base_reg(), destination.ToStackSlotOffset());
   } else if (source.IsStackSlot() && destination.IsRegister()) {
-    Exchange(destination.reg(), source.ToStackSlotOffset());
+    Exchange(destination.reg(),
+             source.base_reg(), source.ToStackSlotOffset());
   } else if (source.IsStackSlot() && destination.IsStackSlot()) {
-    Exchange(source.ToStackSlotOffset(), destination.ToStackSlotOffset());
+    Exchange(source.base_reg(), source.ToStackSlotOffset(),
+             destination.base_reg(), destination.ToStackSlotOffset());
   } else if (source.IsFpuRegister() && destination.IsFpuRegister()) {
     DRegister dst = destination.fpu_reg();
     DRegister src = source.fpu_reg();
@@ -1685,37 +1664,28 @@
     __ movd(src, dst);
     __ movd(dst, DTMP);
   } else if (source.IsFpuRegister() || destination.IsFpuRegister()) {
-    ASSERT(destination.IsDoubleStackSlot() ||
-           destination.IsQuadStackSlot() ||
-           source.IsDoubleStackSlot() ||
-           source.IsQuadStackSlot());
-    bool double_width = destination.IsDoubleStackSlot() ||
-                        source.IsDoubleStackSlot();
+    ASSERT(destination.IsDoubleStackSlot() || source.IsDoubleStackSlot());
     DRegister reg = source.IsFpuRegister() ? source.fpu_reg()
                                            : destination.fpu_reg();
+    Register base_reg = source.IsFpuRegister()
+        ? destination.base_reg()
+        : source.base_reg();
     const intptr_t slot_offset = source.IsFpuRegister()
         ? destination.ToStackSlotOffset()
         : source.ToStackSlotOffset();
-
-    if (double_width) {
-      __ LoadDFromOffset(DTMP, FP, slot_offset);
-      __ StoreDToOffset(reg, FP, slot_offset);
-      __ movd(reg, DTMP);
-    } else {
-      UNIMPLEMENTED();
-    }
+    __ LoadDFromOffset(DTMP, base_reg, slot_offset);
+    __ StoreDToOffset(reg, base_reg, slot_offset);
+    __ movd(reg, DTMP);
   } else if (source.IsDoubleStackSlot() && destination.IsDoubleStackSlot()) {
     const intptr_t source_offset = source.ToStackSlotOffset();
     const intptr_t dest_offset = destination.ToStackSlotOffset();
 
     ScratchFpuRegisterScope ensure_scratch(this, DTMP);
     DRegister scratch = ensure_scratch.reg();
-    __ LoadDFromOffset(DTMP, FP, source_offset);
-    __ LoadDFromOffset(scratch, FP, dest_offset);
-    __ StoreDToOffset(DTMP, FP, dest_offset);
-    __ StoreDToOffset(scratch, FP, source_offset);
-  } else if (source.IsQuadStackSlot() && destination.IsQuadStackSlot()) {
-    UNIMPLEMENTED();
+    __ LoadDFromOffset(DTMP, source.base_reg(), source_offset);
+    __ LoadDFromOffset(scratch, destination.base_reg(), dest_offset);
+    __ StoreDToOffset(DTMP, destination.base_reg(), dest_offset);
+    __ StoreDToOffset(scratch, source.base_reg(), source_offset);
   } else {
     UNREACHABLE();
   }
@@ -1767,20 +1737,26 @@
 }
 
 
-void ParallelMoveResolver::Exchange(Register reg, intptr_t stack_offset) {
-  __ mov(TMP, reg);
-  __ LoadFromOffset(reg, FP, stack_offset);
-  __ StoreToOffset(TMP, FP, stack_offset);
+void ParallelMoveResolver::Exchange(Register reg,
+                                    Register base_reg,
+                                    intptr_t stack_offset) {
+  ScratchRegisterScope tmp(this, reg);
+  __ mov(tmp.reg(), reg);
+  __ LoadFromOffset(reg, base_reg, stack_offset);
+  __ StoreToOffset(tmp.reg(), base_reg, stack_offset);
 }
 
 
-void ParallelMoveResolver::Exchange(intptr_t stack_offset1,
+void ParallelMoveResolver::Exchange(Register base_reg1,
+                                    intptr_t stack_offset1,
+                                    Register base_reg2,
                                     intptr_t stack_offset2) {
-  ScratchRegisterScope ensure_scratch(this, TMP);
-  __ LoadFromOffset(ensure_scratch.reg(), FP, stack_offset1);
-  __ LoadFromOffset(TMP, FP, stack_offset2);
-  __ StoreToOffset(ensure_scratch.reg(), FP, stack_offset2);
-  __ StoreToOffset(TMP, FP, stack_offset1);
+  ScratchRegisterScope tmp1(this, kNoRegister);
+  ScratchRegisterScope tmp2(this, tmp1.reg());
+  __ LoadFromOffset(tmp1.reg(), base_reg1, stack_offset1);
+  __ LoadFromOffset(tmp2.reg(), base_reg2, stack_offset2);
+  __ StoreToOffset(tmp1.reg(), base_reg1, stack_offset2);
+  __ StoreToOffset(tmp2.reg(), base_reg2, stack_offset1);
 }
 
 
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
index ae8b4c4..1cbb310 100644
--- a/runtime/vm/flow_graph_compiler_x64.cc
+++ b/runtime/vm/flow_graph_compiler_x64.cc
@@ -905,17 +905,9 @@
 
   __ Bind(&wrong_num_arguments);
   if (function.IsClosureFunction()) {
-    // Invoke noSuchMethod function passing "call" as the original name.
-    StubCode* stub_code = isolate()->stub_code();
-    const int kNumArgsChecked = 1;
-    const ICData& ic_data = ICData::ZoneHandle(
-        ICData::New(function, Symbols::Call(), Object::empty_array(),
-                    Isolate::kNoDeoptId, kNumArgsChecked));
-    __ LoadObject(RBX, ic_data, PP);
     __ LeaveDartFrame();  // The arguments are still on the stack.
-    __ jmp(&stub_code->CallNoSuchMethodFunctionLabel());
+    __ jmp(&isolate()->stub_code()->CallClosureNoSuchMethodLabel());
     // The noSuchMethod call may return to the caller, but not here.
-    __ int3();
   } else if (check_correct_named_args) {
     __ Stop("Wrong arguments");
   }
@@ -1094,21 +1086,9 @@
 
       __ Bind(&wrong_num_arguments);
       if (function.IsClosureFunction()) {
-        // Invoke noSuchMethod function passing the original function name.
-        // For closure functions, use "call" as the original name.
-        const String& name =
-            String::Handle(function.IsClosureFunction()
-                             ? Symbols::Call().raw()
-                             : function.name());
-        const int kNumArgsChecked = 1;
-        const ICData& ic_data = ICData::ZoneHandle(
-            ICData::New(function, name, Object::empty_array(),
-                        Isolate::kNoDeoptId, kNumArgsChecked));
-        __ LoadObject(RBX, ic_data, PP);
         __ LeaveDartFrame();  // The arguments are still on the stack.
-        __ jmp(&stub_code->CallNoSuchMethodFunctionLabel());
+        __ jmp(&stub_code->CallClosureNoSuchMethodLabel());
         // The noSuchMethod call may return to the caller, but not here.
-        __ int3();
       } else {
         __ Stop("Wrong number of arguments");
       }
@@ -1695,12 +1675,16 @@
 }
 
 
-void ParallelMoveResolver::Exchange(Register reg, intptr_t stack_offset) {
+void ParallelMoveResolver::Exchange(Register reg,
+                                    Register base_reg,
+                                    intptr_t stack_offset) {
   UNREACHABLE();
 }
 
 
-void ParallelMoveResolver::Exchange(intptr_t stack_offset1,
+void ParallelMoveResolver::Exchange(Register base_reg1,
+                                    intptr_t stack_offset1,
+                                    Register base_reg2,
                                     intptr_t stack_offset2) {
   UNREACHABLE();
 }
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index 64599e7..b92f4a9 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -6205,6 +6205,7 @@
         out_values_(graph_->preorder().length()),
         phis_(5),
         worklist_(5),
+        congruency_worklist_(6),
         in_worklist_(NULL),
         forwarded_(false) {
     const intptr_t num_blocks = graph_->preorder().length();
@@ -6845,79 +6846,149 @@
     return true;
   }
 
-  bool AddPhiPairToWorklist(PhiInstr* a, PhiInstr* b) {
-    // Can't compare two phis from different blocks.
-    if (a->block() != b->block()) {
+  // Returns true if definitions are congruent assuming their inputs
+  // are congruent.
+  bool CanBeCongruent(Definition* a, Definition* b) {
+    return (a->tag() == b->tag()) &&
+       ((a->IsPhi() && (a->GetBlock() == b->GetBlock())) ||
+        (a->AllowsCSE() && a->Dependencies().IsNone() &&
+         a->AttributesEqual(b)));
+  }
+
+  // Given two definitions check if they are congruent under assumption that
+  // their inputs will be proven congruent. If they are - add them to the
+  // worklist to check their inputs' congruency.
+  // Returns true if pair was added to the worklist or is already in the
+  // worklist and false if a and b are not congruent.
+  bool AddPairToCongruencyWorklist(Definition* a, Definition* b) {
+    if (!CanBeCongruent(a, b)) {
       return false;
     }
 
     // If a is already in the worklist check if it is being compared to b.
     // Give up if it is not.
     if (in_worklist_->Contains(a->ssa_temp_index())) {
-      for (intptr_t i = 0; i < worklist_.length(); i += 2) {
-        if (a == worklist_[i]) {
-          return (b == worklist_[i + 1]);
+      for (intptr_t i = 0; i < congruency_worklist_.length(); i += 2) {
+        if (a == congruency_worklist_[i]) {
+          return (b == congruency_worklist_[i + 1]);
         }
       }
       UNREACHABLE();
+    } else if (in_worklist_->Contains(b->ssa_temp_index())) {
+      return AddPairToCongruencyWorklist(b, a);
     }
 
-    worklist_.Add(a);
-    worklist_.Add(b);
+    congruency_worklist_.Add(a);
+    congruency_worklist_.Add(b);
     in_worklist_->Add(a->ssa_temp_index());
     return true;
   }
 
-  // Replace the given phi with another if they are equal.
+  bool AreInputsCongruent(Definition* a, Definition* b) {
+    ASSERT(a->tag() == b->tag());
+    ASSERT(a->InputCount() == b->InputCount());
+    for (intptr_t j = 0; j < a->InputCount(); j++) {
+      Definition* inputA = a->InputAt(j)->definition();
+      Definition* inputB = b->InputAt(j)->definition();
+
+      if (inputA != inputB) {
+        if (!AddPairToCongruencyWorklist(inputA, inputB)) {
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+
+  // Returns true if instruction dom dominates instruction other.
+  static bool Dominates(Instruction* dom, Instruction* other) {
+    BlockEntryInstr* dom_block = dom->GetBlock();
+    BlockEntryInstr* other_block = other->GetBlock();
+
+    if (dom_block == other_block) {
+      for (Instruction* current = dom->next();
+           current != NULL;
+           current = current->next()) {
+        if (current == other) {
+          return true;
+        }
+      }
+      return false;
+    }
+
+    return dom_block->Dominates(other_block);
+  }
+
+  // Replace the given phi with another if they are congruent.
   // Returns true if succeeds.
   bool ReplacePhiWith(PhiInstr* phi, PhiInstr* replacement) {
     ASSERT(phi->InputCount() == replacement->InputCount());
     ASSERT(phi->block() == replacement->block());
 
-    worklist_.Clear();
+    congruency_worklist_.Clear();
     if (in_worklist_ == NULL) {
       in_worklist_ = new(I) BitVector(graph_->current_ssa_temp_index());
     } else {
       in_worklist_->Clear();
     }
 
-    // During the comparison worklist contains pairs of phis to be compared.
-    AddPhiPairToWorklist(phi, replacement);
+    // During the comparison worklist contains pairs of definitions to be
+    // compared.
+    if (!AddPairToCongruencyWorklist(phi, replacement)) {
+      return false;
+    }
 
     // Process the worklist. It might grow during each comparison step.
-    for (intptr_t i = 0; i < worklist_.length(); i += 2) {
-      PhiInstr* a = worklist_[i];
-      PhiInstr* b = worklist_[i + 1];
+    for (intptr_t i = 0; i < congruency_worklist_.length(); i += 2) {
+      if (!AreInputsCongruent(congruency_worklist_[i],
+                              congruency_worklist_[i + 1])) {
+        return false;
+      }
+    }
 
-      // Compare phi inputs.
-      for (intptr_t j = 0; j < a->InputCount(); j++) {
-        Definition* inputA = a->InputAt(j)->definition();
-        Definition* inputB = b->InputAt(j)->definition();
+    // At this point worklist contains pairs of congruent definitions.
+    // Replace the one member of the pair with another maintaining proper
+    // domination relation between definitions and uses.
+    for (intptr_t i = 0; i < congruency_worklist_.length(); i += 2) {
+      Definition* a = congruency_worklist_[i];
+      Definition* b = congruency_worklist_[i + 1];
 
-        if (inputA != inputB) {
-          // If inputs are unequal by they are phis then add them to
-          // the worklist for recursive comparison.
-          if (inputA->IsPhi() && inputB->IsPhi() &&
-              AddPhiPairToWorklist(inputA->AsPhi(), inputB->AsPhi())) {
-            continue;
-          }
-          return false;  // Not equal.
+      // If these definitions are not phis then we need to pick up one
+      // that dominates another as the replacement: if a dominates b swap them.
+      // Note: both a and b are used as a phi input at the same block B which
+      // means a dominates B and b dominates B, which guarantees that either
+      // a dominates b or b dominates a.
+      if (!a->IsPhi()) {
+        if (Dominates(a, b)) {
+          Definition* t = a;
+          a = b;
+          b = t;
         }
+        ASSERT(Dominates(b, a));
+      }
+
+      if (FLAG_trace_load_optimization) {
+        OS::Print("Replacing %s with congruent %s\n",
+                  a->ToCString(),
+                  b->ToCString());
+      }
+
+      a->ReplaceUsesWith(b);
+      if (a->IsPhi()) {
+        // We might be replacing a phi introduced by the load forwarding
+        // that is not inserted in the graph yet.
+        ASSERT(b->IsPhi());
+        PhiInstr* phi_a = a->AsPhi();
+        if (phi_a->is_alive()) {
+          phi_a->mark_dead();
+          phi_a->block()->RemovePhi(phi_a);
+          phi_a->UnuseAllInputs();
+        }
+      } else {
+        a->RemoveFromGraph();
       }
     }
 
-    // At this point worklist contains pairs of equal phis. Replace the first
-    // phi in the pair with the second.
-    for (intptr_t i = 0; i < worklist_.length(); i += 2) {
-      PhiInstr* a = worklist_[i];
-      PhiInstr* b = worklist_[i + 1];
-      a->ReplaceUsesWith(b);
-      if (a->is_alive()) {
-        a->mark_dead();
-        a->block()->RemovePhi(a);
-        a->UnuseAllInputs();
-      }
-    }
     return true;
   }
 
@@ -6996,8 +7067,10 @@
 
   // Auxiliary worklist used by redundant phi elimination.
   GrowableArray<PhiInstr*> worklist_;
+  GrowableArray<Definition*> congruency_worklist_;
   BitVector* in_worklist_;
 
+
   // True if any load was eliminated.
   bool forwarded_;
 
@@ -8177,7 +8250,7 @@
   const Object& left = left_val.definition()->constant_value();
   const Object& right = right_val.definition()->constant_value();
   if (IsNonConstant(left) || IsNonConstant(right)) {
-    // TODO(srdjan): Add arithemtic simplifications, e.g, add with 0.
+    // TODO(srdjan): Add arithmetic simplifications, e.g, add with 0.
     SetValue(instr, non_constant_);
   } else if (IsConstant(left) && IsConstant(right)) {
     if (left.IsInteger() && right.IsInteger()) {
@@ -8197,6 +8270,12 @@
         case Token::kMUL: {
           Instance& result = Integer::ZoneHandle(I,
               left_int.ArithmeticOp(op_kind, right_int));
+          if (result.IsNull()) {
+            // TODO(regis): A bigint operation is required. Invoke dart?
+            // Punt for now.
+            SetValue(instr, non_constant_);
+            break;
+          }
           result = result.CheckAndCanonicalize(NULL);
           ASSERT(!result.IsNull());
           SetValue(instr, result);
@@ -8207,6 +8286,12 @@
           if (left.IsSmi() && right.IsSmi()) {
             Instance& result = Integer::ZoneHandle(I,
                 Smi::Cast(left_int).ShiftOp(op_kind, Smi::Cast(right_int)));
+            if (result.IsNull()) {
+              // TODO(regis): A bigint operation is required. Invoke dart?
+              // Punt for now.
+              SetValue(instr, non_constant_);
+              break;
+            }
             result = result.CheckAndCanonicalize(NULL);
             ASSERT(!result.IsNull());
             SetValue(instr, result);
@@ -8415,8 +8500,31 @@
   if (IsNonConstant(left) || IsNonConstant(right)) {
     SetValue(instr, non_constant_);
   } else if (IsConstant(left) && IsConstant(right)) {
-    // TODO(kmillikin): Handle binary operation.
-    SetValue(instr, non_constant_);
+    ASSERT(left.IsSmi() || left.IsDouble());
+    ASSERT(right.IsSmi() || right.IsDouble());
+    double left_val = left.IsSmi()
+        ? Smi::Cast(left).AsDoubleValue() : Double::Cast(left).value();
+    double right_val = right.IsSmi()
+        ? Smi::Cast(right).AsDoubleValue() : Double::Cast(right).value();
+    double result_val = 0.0;
+    switch (instr->op_kind()) {
+      case Token::kADD:
+        result_val = left_val + right_val;
+        break;
+      case Token::kSUB:
+        result_val = left_val - right_val;
+        break;
+      case Token::kMUL:
+        result_val = left_val * right_val;
+        break;
+      case Token::kDIV:
+        result_val = left_val / right_val;
+        break;
+      default:
+        UNREACHABLE();
+    }
+    const Double& result = Double::ZoneHandle(Double::NewCanonical(result_val));
+    SetValue(instr, result);
   }
 }
 
diff --git a/runtime/vm/freelist.cc b/runtime/vm/freelist.cc
index a78359b..b3abca4 100644
--- a/runtime/vm/freelist.cc
+++ b/runtime/vm/freelist.cc
@@ -196,6 +196,7 @@
 void FreeList::Reset() {
   MutexLocker ml(mutex_);
   free_map_.Reset();
+  last_free_small_size_ = -1;
   for (int i = 0; i < (kNumLists + 1); i++) {
     free_lists_[i] = NULL;
   }
@@ -206,7 +207,7 @@
   ASSERT(size >= kObjectAlignment);
   ASSERT(Utils::IsAligned(size, kObjectAlignment));
 
-  intptr_t index = size / kObjectAlignment;
+  intptr_t index = size >> kObjectAlignmentLog2;
   if (index >= kNumLists) {
     index = kNumLists;
   }
@@ -218,6 +219,8 @@
   FreeListElement* next = free_lists_[index];
   if (next == NULL && index != kNumLists) {
     free_map_.Set(index, true);
+    last_free_small_size_ = Utils::Maximum(last_free_small_size_,
+                                           index << kObjectAlignmentLog2);
   }
   element->set_next(next);
   free_lists_[index] = element;
@@ -228,7 +231,14 @@
   FreeListElement* result = free_lists_[index];
   FreeListElement* next = result->next();
   if (next == NULL && index != kNumLists) {
-    free_map_.Set(index, false);
+    intptr_t size = index << kObjectAlignmentLog2;
+    if (size == last_free_small_size_) {
+      // Note: This is -1 * kObjectAlignment if no other small sizes remain.
+      last_free_small_size_ =
+          free_map_.ClearLastAndFindPrevious(index) * kObjectAlignment;
+    } else {
+      free_map_.Set(index, false);
+    }
   }
   free_lists_[index] = next;
   return result;
@@ -344,6 +354,12 @@
 
 FreeListElement* FreeList::TryAllocateLarge(intptr_t minimum_size) {
   MutexLocker ml(mutex_);
+  return TryAllocateLargeLocked(minimum_size);
+}
+
+
+FreeListElement* FreeList::TryAllocateLargeLocked(intptr_t minimum_size) {
+  DEBUG_ASSERT(mutex_->Owner() == Isolate::Current());
   FreeListElement* previous = NULL;
   FreeListElement* current = free_lists_[kNumLists];
   // TODO(koda): Find largest.
@@ -363,4 +379,25 @@
   return NULL;
 }
 
+
+uword FreeList::TryAllocateSmallLocked(intptr_t size) {
+  DEBUG_ASSERT(mutex_->Owner() == Isolate::Current());
+  if (size > last_free_small_size_) {
+    return 0;
+  }
+  int index = IndexForSize(size);
+  if (index != kNumLists && free_map_.Test(index)) {
+    return reinterpret_cast<uword>(DequeueElement(index));
+  }
+  if ((index + 1) < kNumLists) {
+    intptr_t next_index = free_map_.Next(index + 1);
+    if (next_index != -1) {
+      FreeListElement* element = DequeueElement(next_index);
+      SplitElementAfterAndEnqueue(element, size, false);
+      return reinterpret_cast<uword>(element);
+    }
+  }
+  return 0;
+}
+
 }  // namespace dart
diff --git a/runtime/vm/freelist.h b/runtime/vm/freelist.h
index 38451e5..352d511 100644
--- a/runtime/vm/freelist.h
+++ b/runtime/vm/freelist.h
@@ -94,6 +94,11 @@
 
   // Returns a large element, at least 'minimum_size', or NULL if none exists.
   FreeListElement* TryAllocateLarge(intptr_t minimum_size);
+  FreeListElement* TryAllocateLargeLocked(intptr_t minimum_size);
+
+  // Allocates locked and unprotected memory, but only from small elements
+  // (i.e., fixed size lists).
+  uword TryAllocateSmallLocked(intptr_t size);
 
  private:
   static const int kNumLists = 128;
@@ -119,6 +124,9 @@
 
   FreeListElement* free_lists_[kNumLists + 1];
 
+  // The largest available small size in bytes, or negative if there is none.
+  intptr_t last_free_small_size_;
+
   DISALLOW_COPY_AND_ASSIGN(FreeList);
 };
 
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index 2df010c..32f1323 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -4,7 +4,6 @@
 
 #include "vm/intermediate_language.h"
 
-#include "vm/bigint_operations.h"
 #include "vm/bit_vector.h"
 #include "vm/cpu.h"
 #include "vm/dart_entry.h"
@@ -382,10 +381,8 @@
 
 ConstantInstr::ConstantInstr(const Object& value) : value_(value) {
   // Check that the value is not an incorrect Integer representation.
-  ASSERT(!value.IsBigint() ||
-         !BigintOperations::FitsIntoSmi(Bigint::Cast(value)));
-  ASSERT(!value.IsBigint() ||
-         !BigintOperations::FitsIntoInt64(Bigint::Cast(value)));
+  ASSERT(!value.IsBigint() || !Bigint::Cast(value).FitsIntoSmi());
+  ASSERT(!value.IsBigint() || !Bigint::Cast(value).FitsIntoInt64());
   ASSERT(!value.IsMint() || !Smi::IsValid(Mint::Cast(value).AsInt64Value()));
 }
 
@@ -1601,6 +1598,13 @@
       return call->ArgumentAt(0);
     }
   }
+
+  CreateArrayInstr* create_array = instance()->definition()->AsCreateArray();
+  if ((create_array != NULL) &&
+      (recognized_kind() == MethodRecognizer::kObjectArrayLength)) {
+    return create_array->num_elements()->definition();
+  }
+
   // For arrays with guarded lengths, replace the length load
   // with a constant.
   LoadFieldInstr* load_array = instance()->definition()->AsLoadField();
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
index b813d1d..42cc95f 100644
--- a/runtime/vm/intermediate_language_arm.cc
+++ b/runtime/vm/intermediate_language_arm.cc
@@ -293,11 +293,13 @@
 LocationSummary* UnboxedConstantInstr::MakeLocationSummary(Isolate* isolate,
                                                            bool opt) const {
   const intptr_t kNumInputs = 0;
-  const intptr_t kNumTemps = 1;
+  const intptr_t kNumTemps = (representation_ == kUnboxedInt32) ? 0 : 1;
   LocationSummary* locs = new(isolate) LocationSummary(
       isolate, kNumInputs, kNumTemps, LocationSummary::kNoCall);
   locs->set_out(0, Location::RequiresFpuRegister());
-  locs->set_temp(0, Location::RequiresRegister());
+  if (representation_ != kUnboxedInt32) {
+    locs->set_temp(0, Location::RequiresRegister());
+  }
   return locs;
 }
 
@@ -7115,12 +7117,26 @@
   }
   LocationSummary* locs = new(isolate) LocationSummary(
       isolate, kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  locs->set_in(0, Location::RegisterOrConstant(left()));
-  // Only one of the inputs can be a constant. Choose register if the first one
-  // is a constant.
-  locs->set_in(1, locs->in(0).IsConstant()
-                      ? Location::RequiresRegister()
-                      : Location::RegisterOrConstant(right()));
+
+  // If a constant has more than one use, make sure it is loaded in register
+  // so that multiple immediate loads can be avoided.
+  ConstantInstr* constant = left()->definition()->AsConstant();
+  if ((constant != NULL) && !left()->IsSingleUse()) {
+    locs->set_in(0, Location::RequiresRegister());
+  } else {
+    locs->set_in(0, Location::RegisterOrConstant(left()));
+  }
+
+  constant = right()->definition()->AsConstant();
+  if ((constant != NULL) && !right()->IsSingleUse()) {
+    locs->set_in(1, Location::RequiresRegister());
+  } else {
+    // Only one of the inputs can be a constant. Choose register if the first
+    // one is a constant.
+    locs->set_in(1, locs->in(0).IsConstant()
+        ? Location::RequiresRegister()
+        : Location::RegisterOrConstant(right()));
+  }
   locs->set_out(0, Location::RequiresRegister());
   return locs;
 }
diff --git a/runtime/vm/intrinsifier_arm.cc b/runtime/vm/intrinsifier_arm.cc
index 59ca32d..d07e2ff 100644
--- a/runtime/vm/intrinsifier_arm.cc
+++ b/runtime/vm/intrinsifier_arm.cc
@@ -1049,6 +1049,51 @@
 }
 
 
+void Intrinsifier::Bigint_getNeg(Assembler* assembler) {
+  __ ldr(R0, Address(SP, 0 * kWordSize));
+  __ ldr(R0, FieldAddress(R0, Bigint::neg_offset()));
+  __ Ret();
+}
+
+
+void Intrinsifier::Bigint_setNeg(Assembler* assembler) {
+  __ ldr(R0, Address(SP, 0 * kWordSize));
+  __ ldr(R1, Address(SP, 1 * kWordSize));
+  __ StoreIntoObject(R1, FieldAddress(R1, Bigint::neg_offset()), R0, false);
+  __ Ret();
+}
+
+
+void Intrinsifier::Bigint_getUsed(Assembler* assembler) {
+  __ ldr(R0, Address(SP, 0 * kWordSize));
+  __ ldr(R0, FieldAddress(R0, Bigint::used_offset()));
+  __ Ret();
+}
+
+
+void Intrinsifier::Bigint_setUsed(Assembler* assembler) {
+  __ ldr(R0, Address(SP, 0 * kWordSize));
+  __ ldr(R1, Address(SP, 1 * kWordSize));
+  __ StoreIntoObject(R1, FieldAddress(R1, Bigint::used_offset()), R0);
+  __ Ret();
+}
+
+
+void Intrinsifier::Bigint_getDigits(Assembler* assembler) {
+  __ ldr(R0, Address(SP, 0 * kWordSize));
+  __ ldr(R0, FieldAddress(R0, Bigint::digits_offset()));
+  __ Ret();
+}
+
+
+void Intrinsifier::Bigint_setDigits(Assembler* assembler) {
+  __ ldr(R0, Address(SP, 0 * kWordSize));
+  __ ldr(R1, Address(SP, 1 * kWordSize));
+  __ StoreIntoObject(R1, FieldAddress(R1, Bigint::digits_offset()), R0, false);
+  __ Ret();
+}
+
+
 // Check if the last argument is a double, jump to label 'is_smi' if smi
 // (easy to convert to double), otherwise jump to label 'not_double_smi',
 // Returns the last argument in R0.
diff --git a/runtime/vm/intrinsifier_arm64.cc b/runtime/vm/intrinsifier_arm64.cc
index 2c27c36..dd54962 100644
--- a/runtime/vm/intrinsifier_arm64.cc
+++ b/runtime/vm/intrinsifier_arm64.cc
@@ -953,6 +953,51 @@
 }
 
 
+void Intrinsifier::Bigint_getNeg(Assembler* assembler) {
+  __ ldr(R0, Address(SP, 0 * kWordSize));
+  __ ldr(R0, FieldAddress(R0, Bigint::neg_offset()));
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_setNeg(Assembler* assembler) {
+  __ ldr(R0, Address(SP, 0 * kWordSize));
+  __ ldr(R1, Address(SP, 1 * kWordSize));
+  __ StoreIntoObject(R1, FieldAddress(R1, Bigint::neg_offset()), R0, false);
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_getUsed(Assembler* assembler) {
+  __ ldr(R0, Address(SP, 0 * kWordSize));
+  __ ldr(R0, FieldAddress(R0, Bigint::used_offset()));
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_setUsed(Assembler* assembler) {
+  __ ldr(R0, Address(SP, 0 * kWordSize));
+  __ ldr(R1, Address(SP, 1 * kWordSize));
+  __ StoreIntoObject(R1, FieldAddress(R1, Bigint::used_offset()), R0);
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_getDigits(Assembler* assembler) {
+  __ ldr(R0, Address(SP, 0 * kWordSize));
+  __ ldr(R0, FieldAddress(R0, Bigint::digits_offset()));
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_setDigits(Assembler* assembler) {
+  __ ldr(R0, Address(SP, 0 * kWordSize));
+  __ ldr(R1, Address(SP, 1 * kWordSize));
+  __ StoreIntoObject(R1, FieldAddress(R1, Bigint::digits_offset()), R0, false);
+  __ ret();
+}
+
+
 // Check if the last argument is a double, jump to label 'is_smi' if smi
 // (easy to convert to double), otherwise jump to label 'not_double_smi',
 // Returns the last argument in R0.
diff --git a/runtime/vm/intrinsifier_ia32.cc b/runtime/vm/intrinsifier_ia32.cc
index 97e6a34..0aa3a5e 100644
--- a/runtime/vm/intrinsifier_ia32.cc
+++ b/runtime/vm/intrinsifier_ia32.cc
@@ -1053,6 +1053,52 @@
 }
 
 
+void Intrinsifier::Bigint_getNeg(Assembler* assembler) {
+  __ movl(EAX, Address(ESP, + 1 * kWordSize));
+  __ movl(EAX, FieldAddress(EAX, Bigint::neg_offset()));
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_setNeg(Assembler* assembler) {
+  __ movl(EAX, Address(ESP, + 1 * kWordSize));
+  __ movl(ECX, Address(ESP, + 2 * kWordSize));
+  __ StoreIntoObject(ECX, FieldAddress(ECX, Bigint::neg_offset()), EAX, false);
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_getUsed(Assembler* assembler) {
+  __ movl(EAX, Address(ESP, + 1 * kWordSize));
+  __ movl(EAX, FieldAddress(EAX, Bigint::used_offset()));
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_setUsed(Assembler* assembler) {
+  __ movl(EAX, Address(ESP, + 1 * kWordSize));
+  __ movl(ECX, Address(ESP, + 2 * kWordSize));
+  __ StoreIntoObject(ECX, FieldAddress(ECX, Bigint::used_offset()), EAX);
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_getDigits(Assembler* assembler) {
+  __ movl(EAX, Address(ESP, + 1 * kWordSize));
+  __ movl(EAX, FieldAddress(EAX, Bigint::digits_offset()));
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_setDigits(Assembler* assembler) {
+  __ movl(EAX, Address(ESP, + 1 * kWordSize));
+  __ movl(ECX, Address(ESP, + 2 * kWordSize));
+  __ StoreIntoObject(ECX,
+                     FieldAddress(ECX, Bigint::digits_offset()), EAX, false);
+  __ ret();
+}
+
+
 // Check if the last argument is a double, jump to label 'is_smi' if smi
 // (easy to convert to double), otherwise jump to label 'not_double_smi',
 // Returns the last argument in EAX.
diff --git a/runtime/vm/intrinsifier_mips.cc b/runtime/vm/intrinsifier_mips.cc
index 06ee97f..6ce089d 100644
--- a/runtime/vm/intrinsifier_mips.cc
+++ b/runtime/vm/intrinsifier_mips.cc
@@ -1049,6 +1049,51 @@
 }
 
 
+void Intrinsifier::Bigint_getNeg(Assembler* assembler) {
+  __ lw(V0, Address(SP, 0 * kWordSize));
+  __ Ret();
+  __ delay_slot()->lw(V0, FieldAddress(V0, Bigint::neg_offset()));
+}
+
+
+void Intrinsifier::Bigint_setNeg(Assembler* assembler) {
+  __ lw(T0, Address(SP, 0 * kWordSize));
+  __ lw(T1, Address(SP, 1 * kWordSize));
+  __ StoreIntoObject(T1, FieldAddress(T1, Bigint::neg_offset()), T0, false);
+  __ Ret();
+}
+
+
+void Intrinsifier::Bigint_getUsed(Assembler* assembler) {
+  __ lw(V0, Address(SP, 0 * kWordSize));
+  __ Ret();
+  __ delay_slot()->lw(V0, FieldAddress(V0, Bigint::used_offset()));
+}
+
+
+void Intrinsifier::Bigint_setUsed(Assembler* assembler) {
+  __ lw(T0, Address(SP, 0 * kWordSize));
+  __ lw(T1, Address(SP, 1 * kWordSize));
+  __ StoreIntoObject(T1, FieldAddress(T1, Bigint::used_offset()), T0);
+  __ Ret();
+}
+
+
+void Intrinsifier::Bigint_getDigits(Assembler* assembler) {
+  __ lw(V0, Address(SP, 0 * kWordSize));
+  __ Ret();
+  __ delay_slot()->lw(V0, FieldAddress(V0, Bigint::digits_offset()));
+}
+
+
+void Intrinsifier::Bigint_setDigits(Assembler* assembler) {
+  __ lw(T0, Address(SP, 0 * kWordSize));
+  __ lw(T1, Address(SP, 1 * kWordSize));
+  __ StoreIntoObject(T1, FieldAddress(T1, Bigint::digits_offset()), T0, false);
+  __ Ret();
+}
+
+
 // Check if the last argument is a double, jump to label 'is_smi' if smi
 // (easy to convert to double), otherwise jump to label 'not_double_smi',
 // Returns the last argument in T0.
diff --git a/runtime/vm/intrinsifier_x64.cc b/runtime/vm/intrinsifier_x64.cc
index 6d8eeb6..20e3de0 100644
--- a/runtime/vm/intrinsifier_x64.cc
+++ b/runtime/vm/intrinsifier_x64.cc
@@ -960,6 +960,52 @@
 }
 
 
+void Intrinsifier::Bigint_getNeg(Assembler* assembler) {
+  __ movq(RAX, Address(RSP, + 1 * kWordSize));
+  __ movq(RAX, FieldAddress(RAX, Bigint::neg_offset()));
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_setNeg(Assembler* assembler) {
+  __ movq(RAX, Address(RSP, + 1 * kWordSize));
+  __ movq(RCX, Address(RSP, + 2 * kWordSize));
+  __ StoreIntoObject(RCX, FieldAddress(RCX, Bigint::neg_offset()), RAX, false);
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_getUsed(Assembler* assembler) {
+  __ movq(RAX, Address(RSP, + 1 * kWordSize));
+  __ movq(RAX, FieldAddress(RAX, Bigint::used_offset()));
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_setUsed(Assembler* assembler) {
+  __ movq(RAX, Address(RSP, + 1 * kWordSize));
+  __ movq(RCX, Address(RSP, + 2 * kWordSize));
+  __ StoreIntoObject(RCX, FieldAddress(RCX, Bigint::used_offset()), RAX);
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_getDigits(Assembler* assembler) {
+  __ movq(RAX, Address(RSP, + 1 * kWordSize));
+  __ movq(RAX, FieldAddress(RAX, Bigint::digits_offset()));
+  __ ret();
+}
+
+
+void Intrinsifier::Bigint_setDigits(Assembler* assembler) {
+  __ movq(RAX, Address(RSP, + 1 * kWordSize));
+  __ movq(RCX, Address(RSP, + 2 * kWordSize));
+  __ StoreIntoObject(RCX,
+                     FieldAddress(RCX, Bigint::digits_offset()), RAX, false);
+  __ ret();
+}
+
+
 // Check if the last argument is a double, jump to label 'is_smi' if smi
 // (easy to convert to double), otherwise jump to label 'not_double_smi',
 // Returns the last argument in RAX.
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index a90137d..74d0394 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -43,6 +43,9 @@
             "Pause isolates before starting.");
 DEFINE_FLAG(bool, pause_isolates_on_exit, false,
             "Pause isolates exiting.");
+DEFINE_FLAG(bool, break_at_isolate_spawn, false,
+            "Insert a one-time breakpoint at the entrypoint for all spawned "
+            "isolates");
 
 
 // Quick access to the locally defined isolate() method.
@@ -836,6 +839,14 @@
     func ^= result.raw();
     func = func.ImplicitClosureFunction();
 
+    // TODO(turnidge): Currently we need a way to force a one-time
+    // breakpoint for all spawned isolates to support isolate
+    // debugging.  Remove this once the vmservice becomes the standard
+    // way to debug.
+    if (FLAG_break_at_isolate_spawn) {
+      isolate->debugger()->OneTimeBreakAtEntry(func);
+    }
+
     const Array& capabilities = Array::Handle(Array::New(2));
     Capability& capability = Capability::Handle();
     capability = Capability::New(isolate->pause_capability());
diff --git a/runtime/vm/json_stream.cc b/runtime/vm/json_stream.cc
index 762124d..b77b01f 100644
--- a/runtime/vm/json_stream.cc
+++ b/runtime/vm/json_stream.cc
@@ -217,6 +217,14 @@
 }
 
 
+void JSONStream::PrintValue(const char* s, intptr_t len) {
+  PrintCommaIfNeeded();
+  buffer_.AddChar('"');
+  AddEscapedUTF8String(s, len);
+  buffer_.AddChar('"');
+}
+
+
 void JSONStream::PrintValueNoEscape(const char* s) {
   PrintCommaIfNeeded();
   buffer_.Printf("%s", s);
@@ -302,6 +310,12 @@
 }
 
 
+void JSONStream::PrintProperty(const char* name, const char* s, intptr_t len) {
+  PrintPropertyName(name);
+  PrintValue(s, len);
+}
+
+
 void JSONStream::PrintPropertyNoEscape(const char* name, const char* s) {
   PrintPropertyName(name);
   PrintValueNoEscape(s);
@@ -412,6 +426,14 @@
     return;
   }
   intptr_t len = strlen(s);
+  AddEscapedUTF8String(s, len);
+}
+
+
+void JSONStream::AddEscapedUTF8String(const char* s, intptr_t len) {
+  if (s == NULL) {
+    return;
+  }
   const uint8_t* s8 = reinterpret_cast<const uint8_t*>(s);
   intptr_t i = 0;
   for (; i < len; ) {
diff --git a/runtime/vm/json_stream.h b/runtime/vm/json_stream.h
index 057fbf9..1e84368 100644
--- a/runtime/vm/json_stream.h
+++ b/runtime/vm/json_stream.h
@@ -20,6 +20,7 @@
 class JSONObject;
 class Object;
 class SourceBreakpoint;
+class String;
 class Metric;
 class Zone;
 
@@ -84,6 +85,7 @@
   void PrintValue64(int64_t i);
   void PrintValue(double d);
   void PrintValue(const char* s);
+  void PrintValue(const char* s, intptr_t len);
   void PrintValueNoEscape(const char* s);
   void PrintfValue(const char* format, ...) PRINTF_ATTRIBUTE(2, 3);
   void PrintValue(const Object& o, bool ref = true);
@@ -97,6 +99,7 @@
   void PrintProperty64(const char* name, int64_t i);
   void PrintProperty(const char* name, double d);
   void PrintProperty(const char* name, const char* s);
+  void PrintProperty(const char* name, const char* s, intptr_t len);
   void PrintPropertyNoEscape(const char* name, const char* s);
   void PrintfProperty(const char* name, const char* format, ...)
   PRINTF_ATTRIBUTE(3, 4);
@@ -111,6 +114,7 @@
   bool NeedComma();
 
   void AddEscapedUTF8String(const char* s);
+  void AddEscapedUTF8String(const char* s, intptr_t len);
 
   intptr_t nesting_level() const { return open_objects_; }
 
@@ -159,6 +163,9 @@
   void AddProperty(const char* name, const char* s) const {
     stream_->PrintProperty(name, s);
   }
+  void AddProperty(const char* name, const char* s, intptr_t len) const {
+    stream_->PrintProperty(name, s, len);
+  }
   void AddPropertyNoEscape(const char* name, const char* s) const {
     stream_->PrintPropertyNoEscape(name, s);
   }
diff --git a/runtime/vm/json_test.cc b/runtime/vm/json_test.cc
index b503cea..43e0dbc 100644
--- a/runtime/vm/json_test.cc
+++ b/runtime/vm/json_test.cc
@@ -298,9 +298,9 @@
     JSONObject jsobj(&jsarr);
     jsobj.AddProperty("object_key", Object::Handle(Object::null()));
   }
-  EXPECT_STREQ("[{\"type\":\"@Null\",\"id\":\"objects\\/null\","
+  EXPECT_STREQ("[{\"type\":\"@null\",\"id\":\"objects\\/null\","
                "\"valueAsString\":\"null\"},"
-               "{\"object_key\":{\"type\":\"@Null\",\"id\":\"objects\\/null\","
+               "{\"object_key\":{\"type\":\"@null\",\"id\":\"objects\\/null\","
                "\"valueAsString\":\"null\"}}]",
                js.ToCString());
 }
diff --git a/runtime/vm/locations.cc b/runtime/vm/locations.cc
index b180f46..0951aa9 100644
--- a/runtime/vm/locations.cc
+++ b/runtime/vm/locations.cc
@@ -121,24 +121,35 @@
 
 Address Location::ToStackSlotAddress() const {
   const intptr_t index = stack_index();
-  if (index < 0) {
-    const intptr_t offset = (kParamEndSlotFromFp - index)  * kWordSize;
-    return Address(FPREG, offset);
+  const Register base = base_reg();
+  if (base == FPREG) {
+    if (index < 0) {
+      const intptr_t offset = (kParamEndSlotFromFp - index)  * kWordSize;
+      return Address(base, offset);
+    } else {
+      const intptr_t offset = (kFirstLocalSlotFromFp - index) * kWordSize;
+      return Address(base, offset);
+    }
   } else {
-    const intptr_t offset = (kFirstLocalSlotFromFp - index) * kWordSize;
-    return Address(FPREG, offset);
+    ASSERT(base == SPREG);
+    return Address(base, index * kWordSize);
   }
 }
 
 
 intptr_t Location::ToStackSlotOffset() const {
   const intptr_t index = stack_index();
-  if (index < 0) {
-    const intptr_t offset = (kParamEndSlotFromFp - index)  * kWordSize;
-    return offset;
+  if (base_reg() == FPREG) {
+    if (index < 0) {
+      const intptr_t offset = (kParamEndSlotFromFp - index)  * kWordSize;
+      return offset;
+    } else {
+      const intptr_t offset = (kFirstLocalSlotFromFp - index) * kWordSize;
+      return offset;
+    }
   } else {
-    const intptr_t offset = (kFirstLocalSlotFromFp - index) * kWordSize;
-    return offset;
+    ASSERT(base_reg() == SPREG);
+    return index * kWordSize;
   }
 }
 
diff --git a/runtime/vm/locations.h b/runtime/vm/locations.h
index 5438b08..e4bf340 100644
--- a/runtime/vm/locations.h
+++ b/runtime/vm/locations.h
@@ -283,8 +283,10 @@
   }
 
   // Spill slots.
-  static Location StackSlot(intptr_t stack_index) {
-    uword payload = EncodeStackIndex(stack_index);
+  static Location StackSlot(intptr_t stack_index,
+                            Register base = FPREG) {
+    uword payload = StackSlotBaseField::encode(base)
+        | StackIndexField::encode(EncodeStackIndex(stack_index));
     Location loc(kStackSlot, payload);
     // Ensure that sign is preserved.
     ASSERT(loc.stack_index() == stack_index);
@@ -296,7 +298,8 @@
   }
 
   static Location DoubleStackSlot(intptr_t stack_index) {
-    uword payload = EncodeStackIndex(stack_index);
+    uword payload = StackSlotBaseField::encode(FPREG)
+        | StackIndexField::encode(EncodeStackIndex(stack_index));
     Location loc(kDoubleStackSlot, payload);
     // Ensure that sign is preserved.
     ASSERT(loc.stack_index() == stack_index);
@@ -308,7 +311,8 @@
   }
 
   static Location QuadStackSlot(intptr_t stack_index) {
-    uword payload = EncodeStackIndex(stack_index);
+    uword payload = StackSlotBaseField::encode(FPREG)
+        | StackIndexField::encode(EncodeStackIndex(stack_index));
     Location loc(kQuadStackSlot, payload);
     // Ensure that sign is preserved.
     ASSERT(loc.stack_index() == stack_index);
@@ -319,10 +323,15 @@
     return kind() == kQuadStackSlot;
   }
 
+  Register base_reg() const {
+    ASSERT(HasStackIndex());
+    return StackSlotBaseField::decode(payload());
+  }
+
   intptr_t stack_index() const {
     ASSERT(HasStackIndex());
     // Decode stack index manually to preserve sign.
-    return payload() - kStackIndexBias;
+    return StackIndexField::decode(payload()) - kStackIndexBias;
   }
 
   bool HasStackIndex() const {
@@ -378,8 +387,16 @@
   typedef BitField<Policy, 0, 3> PolicyField;
 
   // Layout for stack slots.
+  static const intptr_t kBitsForBaseReg = 5;
+  static const intptr_t kBitsForStackIndex = kBitsForPayload - kBitsForBaseReg;
+  typedef BitField<Register, 0, kBitsForBaseReg> StackSlotBaseField;
+  typedef BitField<intptr_t,
+                   kBitsForBaseReg,
+                   kBitsForStackIndex> StackIndexField;
+  COMPILE_ASSERT(1 << kBitsForBaseReg >= kNumberOfCpuRegisters);
+
   static const intptr_t kStackIndexBias =
-      static_cast<intptr_t>(1) << (kBitsForPayload - 1);
+      static_cast<intptr_t>(1) << (kBitsForStackIndex - 1);
 
   // Location either contains kind and payload fields or a tagged handle for
   // a constant locations. Values of enumeration Kind are selected in such a
diff --git a/runtime/vm/method_recognizer.h b/runtime/vm/method_recognizer.h
index b246de5..e2a061d 100644
--- a/runtime/vm/method_recognizer.h
+++ b/runtime/vm/method_recognizer.h
@@ -150,6 +150,12 @@
 #define CORE_LIB_INTRINSIC_LIST(V)                                             \
   V(_Smi, ~, Smi_bitNegate, 105519892)                                         \
   V(_Smi, get:bitLength, Smi_bitLength, 869956497)                             \
+  V(_Bigint, get:_neg, Bigint_getNeg, 1151514099)                              \
+  V(_Bigint, set:_neg, Bigint_setNeg, 920204960)                               \
+  V(_Bigint, get:_used, Bigint_getUsed, 1308529543)                            \
+  V(_Bigint, set:_used, Bigint_setUsed, 1857576743)                            \
+  V(_Bigint, get:_digits, Bigint_getDigits, 1408062672)                        \
+  V(_Bigint, set:_digits, Bigint_setDigits, 1633805112)                        \
   V(_Double, >, Double_greaterThan, 381325711)                                 \
   V(_Double, >=, Double_greaterEqualThan, 1409267140)                          \
   V(_Double, <, Double_lessThan, 2080387973)                                   \
@@ -194,26 +200,26 @@
 #define CORE_INTEGER_LIB_INTRINSIC_LIST(V)                                     \
   V(_IntegerImplementation, _addFromInteger, Integer_addFromInteger,           \
     438687793)                                                                 \
-  V(_IntegerImplementation, +, Integer_add, 837070328)                         \
+  V(_IntegerImplementation, +, Integer_add, 501253666)                         \
   V(_IntegerImplementation, _subFromInteger, Integer_subFromInteger,           \
     562800077)                                                                 \
-  V(_IntegerImplementation, -, Integer_sub, 1904782019)                        \
+  V(_IntegerImplementation, -, Integer_sub, 1819430179)                        \
   V(_IntegerImplementation, _mulFromInteger, Integer_mulFromInteger,           \
     67891834)                                                                  \
-  V(_IntegerImplementation, *, Integer_mul, 1012952097)                        \
+  V(_IntegerImplementation, *, Integer_mul, 1787870724)                        \
   V(_IntegerImplementation, _moduloFromInteger, Integer_moduloFromInteger,     \
     93478264)                                                                  \
-  V(_IntegerImplementation, ~/, Integer_truncDivide, 724644222)                \
+  V(_IntegerImplementation, ~/, Integer_truncDivide, 1309867000)               \
   V(_IntegerImplementation, unary-, Integer_negate, 2095203689)                \
   V(_IntegerImplementation, _bitAndFromInteger,                                \
     Integer_bitAndFromInteger, 504496713)                                      \
-  V(_IntegerImplementation, &, Integer_bitAnd, 347192674)                      \
+  V(_IntegerImplementation, &, Integer_bitAnd, 648886925)                      \
   V(_IntegerImplementation, _bitOrFromInteger,                                 \
     Integer_bitOrFromInteger, 1763728073)                                      \
-  V(_IntegerImplementation, |, Integer_bitOr, 1293445202)                      \
+  V(_IntegerImplementation, |, Integer_bitOr, 1473764427)                      \
   V(_IntegerImplementation, _bitXorFromInteger,                                \
     Integer_bitXorFromInteger, 281425907)                                      \
-  V(_IntegerImplementation, ^, Integer_bitXor, 2139935734)                     \
+  V(_IntegerImplementation, ^, Integer_bitXor, 99980524)                       \
   V(_IntegerImplementation,                                                    \
     _greaterThanFromInteger,                                                   \
     Integer_greaterThanFromInt, 787426822)                                     \
@@ -224,8 +230,8 @@
   V(_IntegerImplementation, <, Integer_lessThan, 425560117)                    \
   V(_IntegerImplementation, <=, Integer_lessEqualThan, 1512735828)             \
   V(_IntegerImplementation, >=, Integer_greaterEqualThan, 668293748)           \
-  V(_IntegerImplementation, <<, Integer_shl, 34265041)                         \
-  V(_IntegerImplementation, >>, Integer_sar, 1797129864)                       \
+  V(_IntegerImplementation, <<, Integer_shl, 656407087)                        \
+  V(_IntegerImplementation, >>, Integer_sar, 487746736)                        \
   V(_Double, toInt, DoubleToInteger, 1547535151)
 
 
@@ -304,6 +310,7 @@
   V(_List, get:isEmpty, ObjectArrayIsEmpty, 2130247737)                        \
   V(_List, get:iterator, ObjectArrayIterator, 458612415)                       \
   V(_List, forEach, ObjectArrayForEach, 592525445)                             \
+  V(_List, _slice, ObjectArraySlice, 1891508040)                               \
   V(_ImmutableList, get:iterator, ImmutableArrayIterator, 362084797)           \
   V(_ImmutableList, forEach, ImmutableArrayForEach, 63658053)                  \
   V(_ImmutableList, [], ImmutableArrayGetIndexed, 1990177341)                  \
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 2d0fca9..b1438cf 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -8,7 +8,6 @@
 #include "platform/assert.h"
 #include "vm/assembler.h"
 #include "vm/cpu.h"
-#include "vm/bigint_operations.h"
 #include "vm/bit_vector.h"
 #include "vm/bootstrap.h"
 #include "vm/class_finalizer.h"
@@ -364,11 +363,6 @@
 }
 
 
-static bool IsAsciiPrintChar(int32_t code_point) {
-  return (code_point >= ' ') && (code_point <= '~');
-}
-
-
 static inline bool IsAsciiNonprintable(int32_t c) {
   return ((0 <= c) && (c < 32)) || (c == 127);
 }
@@ -1556,10 +1550,39 @@
 }
 
 
+static void AddNameProperties(JSONObject* jsobj,
+                              const String& name,
+                              const String& vm_name) {
+  jsobj->AddProperty("name", name.ToCString());
+  if (!name.Equals(vm_name)) {
+    jsobj->AddProperty("_vmName", vm_name.ToCString());
+  }
+}
+
+
+static void AddTypeProperties(JSONObject* jsobj,
+                              const char* user_type,
+                              const char* vm_type,
+                              bool ref) {
+  bool same_type = (strcmp(user_type, vm_type) == 0);
+  if (ref) {
+    jsobj->AddPropertyF("type", "@%s", user_type);
+    if (!same_type) {
+      jsobj->AddPropertyF("_vmType", "@%s", vm_type);
+    }
+  } else {
+    jsobj->AddProperty("type", user_type);
+    if (!same_type) {
+      jsobj->AddProperty("_vmType", vm_type);
+    }
+  }
+}
+
+
 void Object::PrintJSON(JSONStream* stream, bool ref) const {
   if (IsNull()) {
     JSONObject jsobj(stream);
-    jsobj.AddProperty("type", ref ? "@Null" : "Null");
+    AddTypeProperties(&jsobj, "null", JSONType(), ref);
     jsobj.AddProperty("id", "objects/null");
     jsobj.AddProperty("valueAsString", "null");
     if (!ref) {
@@ -1573,6 +1596,15 @@
 }
 
 
+void Object::PrintJSONImpl(JSONStream* stream, bool ref) const {
+  JSONObject jsobj(stream);
+  AddTypeProperties(&jsobj, "Object", JSONType(), ref);
+  ObjectIdRing* ring = Isolate::Current()->object_id_ring();
+  const intptr_t id = ring->GetIdForObject(raw());
+  jsobj.AddPropertyF("id", "objects/%" Pd "", id);
+}
+
+
 RawString* Object::DictionaryName() const {
   return String::null();
 }
@@ -3830,6 +3862,11 @@
 }
 
 
+RawFunction* Class::LookupFactoryAllowPrivate(const String& name) const {
+  return LookupFunctionAllowPrivate(name, kFactory);
+}
+
+
 RawFunction* Class::LookupFunction(const String& name) const {
   return LookupFunction(name, kAny);
 }
@@ -4103,23 +4140,15 @@
 }
 
 
-static void AddNameProperties(JSONObject* jsobj,
-                              const String& name,
-                              const String& vm_name) {
-  jsobj->AddProperty("name", name.ToCString());
-  if (!name.Equals(vm_name)) {
-    jsobj->AddProperty("vmName", vm_name.ToCString());
-  }
-}
-
-
 void Class::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
   if ((raw() == Class::null()) || (id() == kFreeListElement)) {
-    jsobj.AddProperty("type", "Null");
+    // TODO(turnidge): This is weird.  See if there is another way to
+    // handle this.
+    jsobj.AddProperty("type", "null");
     return;
   }
-  jsobj.AddProperty("type", JSONType(ref));
+  AddTypeProperties(&jsobj, "Class", JSONType(), ref);
   jsobj.AddPropertyF("id", "classes/%" Pd "", id());
   const String& user_name = String::Handle(PrettyName());
   const String& vm_name = String::Handle(Name());
@@ -4457,7 +4486,7 @@
   ASSERT(table.Length() > 0);
   ObjectIdRing* ring = Isolate::Current()->object_id_ring();
   const intptr_t id = ring->GetIdForObject(raw());
-  jsobj.AddProperty("type", JSONType(ref));
+  AddTypeProperties(&jsobj, "TypeArguments", JSONType(), ref);
   jsobj.AddPropertyF("id", "objects/%" Pd "", id);
   const String& user_name = String::Handle(PrettyName());
   const String& vm_name = String::Handle(Name());
@@ -5442,9 +5471,7 @@
 
 RawAbstractType* Function::ParameterTypeAt(intptr_t index) const {
   const Array& parameter_types = Array::Handle(raw_ptr()->parameter_types_);
-  AbstractType& parameter_type = AbstractType::Handle();
-  parameter_type ^= parameter_types.At(index);
-  return parameter_type.raw();
+  return AbstractType::RawCast(parameter_types.At(index));
 }
 
 
@@ -5463,9 +5490,7 @@
 
 RawString* Function::ParameterNameAt(intptr_t index) const {
   const Array& parameter_names = Array::Handle(raw_ptr()->parameter_names_);
-  String& parameter_name = String::Handle();
-  parameter_name ^= parameter_names.At(index);
-  return parameter_name.raw();
+  return String::RawCast(parameter_names.At(index));
 }
 
 
@@ -6811,7 +6836,7 @@
   err ^= cls.EnsureIsFinalized(Isolate::Current());
   ASSERT(err.IsNull());
   JSONObject jsobj(stream);
-  jsobj.AddProperty("type", JSONType(ref));
+  AddTypeProperties(&jsobj, "Function", JSONType(), ref);
   jsobj.AddProperty("id", GetFunctionServiceId(*this, cls));
   const String& user_name = String::Handle(PrettyName());
   const String& vm_name = String::Handle(name());
@@ -7157,7 +7182,7 @@
   intptr_t id = cls.FindFieldIndex(*this);
   ASSERT(id >= 0);
   intptr_t cid = cls.id();
-  jsobj.AddProperty("type", JSONType(ref));
+  AddTypeProperties(&jsobj, "Field", JSONType(), ref);
   jsobj.AddPropertyF("id", "classes/%" Pd "/fields/%" Pd "", cid, id);
   const String& user_name = String::Handle(PrettyName());
   const String& vm_name = String::Handle(name());
@@ -7947,7 +7972,21 @@
 
 
 void TokenStream::PrintJSONImpl(JSONStream* stream, bool ref) const {
-  Object::PrintJSONImpl(stream, ref);
+  JSONObject jsobj(stream);
+  AddTypeProperties(&jsobj, "Object", JSONType(), ref);
+  // TODO(johnmccutchan): Generate a stable id. TokenStreams hang off
+  // a Script object but do not have a back reference to generate a stable id.
+  ObjectIdRing* ring = Isolate::Current()->object_id_ring();
+  const intptr_t id = ring->GetIdForObject(raw());
+  jsobj.AddPropertyF("id", "objects/%" Pd "", id);
+  if (ref) {
+    return;
+  }
+  const String& private_key = String::Handle(PrivateKey());
+  jsobj.AddProperty("privateKey", private_key);
+  // TODO(johnmccutchan): Add support for printing LiteralTokens and add
+  // them to members array.
+  JSONArray members(&jsobj, "members");
 }
 
 
@@ -8477,7 +8516,7 @@
 // See also Dart_ScriptGetTokenInfo.
 void Script::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
-  jsobj.AddProperty("type", JSONType(ref));
+  AddTypeProperties(&jsobj, "Script", JSONType(), ref);
   const String& name = String::Handle(url());
   ASSERT(!name.IsNull());
   const String& encoded_url = String::Handle(String::EncodeIRI(name));
@@ -9770,7 +9809,7 @@
   intptr_t id = index();
   ASSERT(id >= 0);
   JSONObject jsobj(stream);
-  jsobj.AddProperty("type", JSONType(ref));
+  AddTypeProperties(&jsobj, "Library", JSONType(), ref);
   jsobj.AddPropertyF("id", "libraries/%" Pd "", id);
   jsobj.AddProperty("name", library_name);
   const char* library_url = String::Handle(url()).ToCString();
@@ -10528,21 +10567,23 @@
       "%#-*" Px "\t%s\t%" Pd "\t\t%" Pd "\t%" Pd "\n";
   // First compute the buffer size required.
   intptr_t len = 1;  // Trailing '\0'.
-  Iterator iter(*this, RawPcDescriptors::kAnyKind);
-  while (iter.MoveNext()) {
-    len += OS::SNPrint(NULL, 0, kFormat, addr_width,
-                       iter.Pc(),
-                       KindAsStr(iter.Kind()),
-                       iter.DeoptId(),
-                       iter.TokenPos(),
-                       iter.TryIndex());
+  {
+    Iterator iter(*this, RawPcDescriptors::kAnyKind);
+    while (iter.MoveNext()) {
+      len += OS::SNPrint(NULL, 0, kFormat, addr_width,
+                         iter.Pc(),
+                         KindAsStr(iter.Kind()),
+                         iter.DeoptId(),
+                         iter.TokenPos(),
+                         iter.TryIndex());
+    }
   }
   // Allocate the buffer.
   char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len);
   // Layout the fields in the buffer.
   intptr_t index = 0;
-  Iterator iter2(*this, RawPcDescriptors::kAnyKind);
-  while (iter2.MoveNext()) {
+  Iterator iter(*this, RawPcDescriptors::kAnyKind);
+  while (iter.MoveNext()) {
     index += OS::SNPrint((buffer + index), (len - index), kFormat, addr_width,
                          iter.Pc(),
                          KindAsStr(iter.Kind()),
@@ -10554,12 +10595,16 @@
 }
 
 
-void PcDescriptors::PrintToJSONObject(JSONObject* jsobj) const {
-  jsobj->AddProperty("type", JSONType(false));
-  // TODO(johnmccutchan): Generate a valid ID.
-  // PcDescriptors hang off a Code object but do not have a back reference to
-  // generate an ID. Currently we only print PcDescriptors inline with a Code.
-  jsobj->AddProperty("id", "");
+void PcDescriptors::PrintToJSONObject(JSONObject* jsobj, bool ref) const {
+  AddTypeProperties(jsobj, "Object", JSONType(), ref);
+  // TODO(johnmccutchan): Generate a stable id. PcDescriptors hang off a Code
+  // object but do not have a back reference to generate an ID.
+  ObjectIdRing* ring = Isolate::Current()->object_id_ring();
+  const intptr_t id = ring->GetIdForObject(raw());
+  jsobj->AddPropertyF("id", "objects/%" Pd "", id);
+  if (ref) {
+    return;
+  }
   JSONArray members(jsobj, "members");
   Iterator iter(*this, RawPcDescriptors::kAnyKind);
   while (iter.MoveNext()) {
@@ -10575,7 +10620,7 @@
 
 void PcDescriptors::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
-  PrintToJSONObject(&jsobj);
+  PrintToJSONObject(&jsobj, ref);
 }
 
 
@@ -10682,7 +10727,7 @@
   // PC. StackmapTableBuilder::FinalizeStackmaps will replace it with the pc
   // address.
   ASSERT(pc_offset >= 0);
-  result.SetPC(pc_offset);
+  result.SetPcOffset(pc_offset);
   for (intptr_t i = 0; i < length; ++i) {
     result.SetBit(i, bmap->Get(i));
   }
@@ -10696,7 +10741,7 @@
     return "{null}";
   } else {
     const char* kFormat = "%#" Px ": ";
-    intptr_t fixed_length = OS::SNPrint(NULL, 0, kFormat, PC()) + 1;
+    intptr_t fixed_length = OS::SNPrint(NULL, 0, kFormat, PcOffset()) + 1;
     Isolate* isolate = Isolate::Current();
     // Guard against integer overflow in the computation of alloc_size.
     //
@@ -10707,7 +10752,7 @@
     }
     intptr_t alloc_size = fixed_length + Length();
     char* chars = isolate->current_zone()->Alloc<char>(alloc_size);
-    intptr_t index = OS::SNPrint(chars, alloc_size, kFormat, PC());
+    intptr_t index = OS::SNPrint(chars, alloc_size, kFormat, PcOffset());
     for (intptr_t i = 0; i < Length(); i++) {
       chars[index++] = IsObject(i) ? '1' : '0';
     }
@@ -10778,35 +10823,37 @@
                         intptr_t i,
                         const String& var_name,
                         const RawLocalVarDescriptors::VarInfo& info) {
-  if (info.kind == RawLocalVarDescriptors::kContextLevel) {
+  const int8_t kind = info.kind();
+  const int32_t index = info.index();
+  if (kind == RawLocalVarDescriptors::kContextLevel) {
     return OS::SNPrint(buffer, len,
-                       "%2" Pd " %-13s level=%-3" Pd " scope=%-3d"
-                       " begin=%-3" Pd " end=%" Pd "\n",
+                       "%2" Pd " %-13s level=%-3d scope=%-3d"
+                       " begin=%-3d end=%d\n",
                        i,
-                       VarKindString(info.kind),
-                       info.index,
+                       VarKindString(kind),
+                       index,
                        info.scope_id,
                        info.begin_pos,
                        info.end_pos);
-  } else if (info.kind == RawLocalVarDescriptors::kContextVar) {
+  } else if (kind == RawLocalVarDescriptors::kContextVar) {
     return OS::SNPrint(buffer, len,
-                       "%2" Pd " %-13s level=%-3d index=%-3" Pd ""
-                       " begin=%-3" Pd " end=%-3" Pd " name=%s\n",
+                       "%2" Pd " %-13s level=%-3d index=%-3d"
+                       " begin=%-3d end=%-3d name=%s\n",
                        i,
-                       VarKindString(info.kind),
+                       VarKindString(kind),
                        info.scope_id,
-                       info.index,
+                       index,
                        info.begin_pos,
                        info.end_pos,
                        var_name.ToCString());
   } else {
     return OS::SNPrint(buffer, len,
-                       "%2" Pd " %-13s scope=%-3d index=%-3" Pd ""
-                       " begin=%-3" Pd " end=%-3" Pd " name=%s\n",
+                       "%2" Pd " %-13s scope=%-3d index=%-3d"
+                       " begin=%-3d end=%-3d name=%s\n",
                        i,
-                       VarKindString(info.kind),
+                       VarKindString(kind),
                        info.scope_id,
-                       info.index,
+                       index,
                        info.begin_pos,
                        info.end_pos,
                        var_name.ToCString());
@@ -10849,16 +10896,61 @@
 
 void LocalVarDescriptors::PrintJSONImpl(JSONStream* stream,
                                         bool ref) const {
-  Object::PrintJSONImpl(stream, ref);
+  JSONObject jsobj(stream);
+  AddTypeProperties(&jsobj, "Object", JSONType(), ref);
+  // TODO(johnmccutchan): Generate a stable id. LocalVarDescriptors hang off
+  // a Code object but do not have a back reference to generate an ID.
+  ObjectIdRing* ring = Isolate::Current()->object_id_ring();
+  const intptr_t id = ring->GetIdForObject(raw());
+  jsobj.AddPropertyF("id", "objects/%" Pd "", id);
+  if (ref) {
+    return;
+  }
+  JSONArray members(&jsobj, "members");
+  String& var_name = String::Handle();
+  for (intptr_t i = 0; i < Length(); i++) {
+    RawLocalVarDescriptors::VarInfo info;
+    var_name = GetName(i);
+    if (var_name.IsNull()) {
+      var_name = Symbols::Empty().raw();
+    }
+    GetInfo(i, &info);
+    JSONObject var(&members);
+    var.AddProperty("name", var_name.ToCString());
+    var.AddProperty("index", static_cast<intptr_t>(info.index()));
+    var.AddProperty("beginPos", static_cast<intptr_t>(info.begin_pos));
+    var.AddProperty("endPos", static_cast<intptr_t>(info.end_pos));
+    var.AddProperty("scopeId", static_cast<intptr_t>(info.scope_id));
+    var.AddProperty("kind", KindToStr(info.kind()));
+  }
 }
 
 
+const char* LocalVarDescriptors::KindToStr(intptr_t kind) {
+  switch (kind) {
+    case RawLocalVarDescriptors::kStackVar:
+      return "StackVar";
+    case RawLocalVarDescriptors::kContextVar:
+      return "ContextVar";
+    case RawLocalVarDescriptors::kContextLevel:
+      return "ContextLevel";
+    case RawLocalVarDescriptors::kSavedEntryContext:
+      return "SavedEntryContext";
+    case RawLocalVarDescriptors::kSavedCurrentContext:
+      return "SavedCurrentContext";
+    default:
+      UNIMPLEMENTED();
+      return NULL;
+  }
+}
+
 RawLocalVarDescriptors* LocalVarDescriptors::New(intptr_t num_variables) {
   ASSERT(Object::var_descriptors_class() != Class::null());
   if (num_variables < 0 || num_variables > kMaxElements) {
     // This should be caught before we reach here.
-    FATAL1("Fatal error in LocalVarDescriptors::New: "
-           "invalid num_variables %" Pd "\n", num_variables);
+    FATAL2("Fatal error in LocalVarDescriptors::New: "
+           "invalid num_variables %" Pd ". Maximum is: %d\n",
+           num_variables, RawLocalVarDescriptors::kMaxIndex);
   }
   LocalVarDescriptors& result = LocalVarDescriptors::Handle();
   {
@@ -11297,17 +11389,6 @@
 }
 
 
-bool ICData::IsClosureCall() const {
-  return IsClosureCallBit::decode(raw_ptr()->state_bits_);
-}
-
-
-void ICData::SetIsClosureCall() const {
-  raw_ptr()->state_bits_ =
-      IsClosureCallBit::update(true, raw_ptr()->state_bits_);
-}
-
-
 void ICData::set_state_bits(uint32_t bits) const {
   raw_ptr()->state_bits_ = bits;
 }
@@ -11673,26 +11754,6 @@
 }
 
 
-bool ICData::AllReceiversAreNumbers() const {
-  if (NumberOfChecks() == 0) return false;
-  Class& cls = Class::Handle();
-  const intptr_t len = NumberOfChecks();
-  for (intptr_t i = 0; i < len; i++) {
-    if (IsUsedAt(i)) {
-      cls = Function::Handle(GetTargetAt(i)).Owner();
-      const intptr_t cid = cls.id();
-      if ((cid != kSmiCid) &&
-          (cid != kMintCid) &&
-          (cid != kBigintCid) &&
-          (cid != kDoubleCid)) {
-        return false;
-      }
-    }
-  }
-  return true;
-}
-
-
 bool ICData::HasReceiverClassId(intptr_t class_id) const {
   ASSERT(NumArgsTested() > 0);
   const intptr_t len = NumberOfChecks();
@@ -12283,7 +12344,7 @@
 
 void Code::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
-  jsobj.AddProperty("type", JSONType(ref));
+  AddTypeProperties(&jsobj, "Code", JSONType(), ref);
   jsobj.AddPropertyF("id", "code/%" Px64"-%" Px "", compile_timestamp(),
                      EntryPoint());
   jsobj.AddPropertyF("start", "%" Px "", EntryPoint());
@@ -12322,7 +12383,7 @@
   const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors());
   if (!descriptors.IsNull()) {
     JSONObject desc(&jsobj, "descriptors");
-    descriptors.PrintToJSONObject(&desc);
+    descriptors.PrintToJSONObject(&desc, false);
   }
 }
 
@@ -12345,7 +12406,8 @@
 }
 
 
-RawStackmap* Code::GetStackmap(uword pc, Array* maps, Stackmap* map) const {
+RawStackmap* Code::GetStackmap(
+    uint32_t pc_offset, Array* maps, Stackmap* map) const {
   // This code is used during iterating frames during a GC and hence it
   // should not in turn start a GC.
   NoGCScope no_gc;
@@ -12361,7 +12423,7 @@
   for (intptr_t i = 0; i < maps->Length(); i++) {
     *map ^= maps->At(i);
     ASSERT(!map->IsNull());
-    if (map->PC() == pc) {
+    if (map->PcOffset() == pc_offset) {
       return map->raw();  // We found a stack map for this frame.
     }
   }
@@ -12445,7 +12507,35 @@
 
 
 void Context::PrintJSONImpl(JSONStream* stream, bool ref) const {
-  Object::PrintJSONImpl(stream, ref);
+  JSONObject jsobj(stream);
+  // TODO(turnidge): Should the user level type for Context be Context
+  // or Object?
+  AddTypeProperties(&jsobj, "Context", JSONType(), ref);
+  ObjectIdRing* ring = Isolate::Current()->object_id_ring();
+  const intptr_t id = ring->GetIdForObject(raw());
+  jsobj.AddPropertyF("id", "objects/%" Pd "", id);
+
+  jsobj.AddProperty("length", num_variables());
+
+  if (ref) {
+    return;
+  }
+
+  Class& cls = Class::Handle(this->clazz());
+  jsobj.AddProperty("class", cls);
+
+  jsobj.AddProperty("size", raw()->Size());
+
+  const Context& parent_context = Context::Handle(parent());
+  jsobj.AddProperty("parent", parent_context);
+
+  JSONArray jsarr(&jsobj, "variables");
+  for (intptr_t i = 0; i < num_variables(); i++) {
+    const Instance& var = Instance::Handle(At(i));
+    JSONObject jselement(&jsarr);
+    jselement.AddProperty("index", i);
+    jselement.AddProperty("value", var);
+  }
 }
 
 
@@ -12820,9 +12910,8 @@
 
 void ApiError::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
-  jsobj.AddProperty("type", "Error");
+  AddTypeProperties(&jsobj, "Error", JSONType(), ref);
   jsobj.AddProperty("id", "");
-  jsobj.AddProperty("kind", JSONType(false));
   jsobj.AddProperty("message", ToErrorCString());
 }
 
@@ -12959,9 +13048,8 @@
 
 void LanguageError::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
-  jsobj.AddProperty("type", "Error");
+  AddTypeProperties(&jsobj, "Error", JSONType(), ref);
   jsobj.AddProperty("id", "");
-  jsobj.AddProperty("kind", JSONType(false));
   jsobj.AddProperty("message", ToErrorCString());
 }
 
@@ -13054,9 +13142,8 @@
 void UnhandledException::PrintJSONImpl(JSONStream* stream,
                                        bool ref) const {
   JSONObject jsobj(stream);
-  jsobj.AddProperty("type", "Error");
+  AddTypeProperties(&jsobj, "Error", JSONType(), ref);
   jsobj.AddProperty("id", "");
-  jsobj.AddProperty("kind", JSONType(false));
   jsobj.AddProperty("message", ToErrorCString());
 
   Instance& instance = Instance::Handle();
@@ -13100,9 +13187,8 @@
 
 void UnwindError::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
-  jsobj.AddProperty("type", "Error");
+  AddTypeProperties(&jsobj, "Error", JSONType(), ref);
   jsobj.AddProperty("id", "");
-  jsobj.AddProperty("kind", JSONType(false));
   jsobj.AddProperty("message", ToErrorCString());
 }
 
@@ -13184,7 +13270,7 @@
 
 bool Instance::CheckAndCanonicalizeFields(const char** error_str) const {
   const Class& cls = Class::Handle(this->clazz());
-  if ((cls.id() >= kNumPredefinedCids)) {
+  if (cls.id() >= kNumPredefinedCids) {
     // Iterate over all fields, canonicalize numbers and strings, expect all
     // other instances to be canonical otherwise report error (return false).
     Object& obj = Object::Handle();
@@ -13545,8 +13631,8 @@
 }
 
 
-void Instance::PrintSharedInstanceJSON(JSONObject* jsobj, bool ref) const {
-  jsobj->AddProperty("type", JSONType(ref));
+void Instance::PrintSharedInstanceJSON(JSONObject* jsobj,
+                                       bool ref) const {
   Class& cls = Class::Handle(this->clazz());
   jsobj->AddProperty("class", cls);
   // TODO(turnidge): Provide the type arguments here too.
@@ -13592,15 +13678,6 @@
 }
 
 
-void Object::PrintJSONImpl(JSONStream* stream, bool ref) const {
-  JSONObject jsobj(stream);
-  jsobj.AddProperty("type", JSONType(ref));
-  ObjectIdRing* ring = Isolate::Current()->object_id_ring();
-  const intptr_t id = ring->GetIdForObject(raw());
-  jsobj.AddPropertyF("id", "objects/%" Pd "", id);
-}
-
-
 void Instance::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
 
@@ -13617,12 +13694,15 @@
     return;
   }
 
+  AddTypeProperties(&jsobj, "Instance", JSONType(), ref);
   PrintSharedInstanceJSON(&jsobj, ref);
   ObjectIdRing* ring = Isolate::Current()->object_id_ring();
   const intptr_t id = ring->GetIdForObject(raw());
   if (IsClosure()) {
     const Function& closureFunc = Function::Handle(Closure::function(*this));
     jsobj.AddProperty("closureFunc", closureFunc);
+    const Context& closureCtxt = Context::Handle(Closure::context(*this));
+    jsobj.AddProperty("closureCtxt", closureCtxt);
   }
   jsobj.AddPropertyF("id", "objects/%" Pd "", id);
   if (ref) {
@@ -14682,6 +14762,7 @@
 
 void Type::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
+  AddTypeProperties(&jsobj, "Type", JSONType(), ref);
   PrintSharedInstanceJSON(&jsobj, ref);
   if (IsCanonical()) {
     const Class& type_cls = Class::Handle(type_class());
@@ -14854,6 +14935,7 @@
 
 void TypeRef::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
+  AddTypeProperties(&jsobj, "TypeRef", JSONType(), ref);
   PrintSharedInstanceJSON(&jsobj, ref);
   ObjectIdRing* ring = Isolate::Current()->object_id_ring();
   const intptr_t id = ring->GetIdForObject(raw());
@@ -15070,6 +15152,7 @@
 
 void TypeParameter::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
+  AddTypeProperties(&jsobj, "TypeParameter", JSONType(), ref);
   PrintSharedInstanceJSON(&jsobj, ref);
   ObjectIdRing* ring = Isolate::Current()->object_id_ring();
   const intptr_t id = ring->GetIdForObject(raw());
@@ -15273,6 +15356,7 @@
 
 void BoundedType::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
+  AddTypeProperties(&jsobj, "BoundedType", JSONType(), ref);
   PrintSharedInstanceJSON(&jsobj, ref);
   ObjectIdRing* ring = Isolate::Current()->object_id_ring();
   const intptr_t id = ring->GetIdForObject(raw());
@@ -15366,12 +15450,7 @@
 
 
 void Number::PrintJSONImpl(JSONStream* stream, bool ref) const {
-  JSONObject jsobj(stream);
-  PrintSharedInstanceJSON(&jsobj, ref);
-  ObjectIdRing* ring = Isolate::Current()->object_id_ring();
-  const intptr_t id = ring->GetIdForObject(raw());
-  jsobj.AddPropertyF("id", "objects/%" Pd "", id);
-  jsobj.AddProperty("valueAsString", ToCString());
+  UNREACHABLE();
 }
 
 
@@ -15383,7 +15462,13 @@
 
 
 void Integer::PrintJSONImpl(JSONStream* stream, bool ref) const {
-  Number::PrintJSONImpl(stream, ref);
+  JSONObject jsobj(stream);
+  AddTypeProperties(&jsobj, "int", JSONType(), ref);
+  PrintSharedInstanceJSON(&jsobj, ref);
+  ObjectIdRing* ring = Isolate::Current()->object_id_ring();
+  const intptr_t id = ring->GetIdForObject(raw());
+  jsobj.AddPropertyF("id", "objects/%" Pd "", id);
+  jsobj.AddProperty("valueAsString", ToCString());
 }
 
 
@@ -15402,9 +15487,10 @@
   ASSERT(str.IsOneByteString());
   int64_t value;
   if (!OS::StringToInt64(str.ToCString(), &value)) {
-    const Bigint& big = Bigint::Handle(Bigint::New(str, space));
-    ASSERT(!BigintOperations::FitsIntoSmi(big));
-    ASSERT(!BigintOperations::FitsIntoInt64(big));
+    const Bigint& big = Bigint::Handle(
+        Bigint::NewFromCString(str.ToCString(), space));
+    ASSERT(!big.FitsIntoSmi());
+    ASSERT(!big.FitsIntoInt64());
     if (FLAG_throw_on_javascript_int_overflow) {
       ThrowJavascriptIntegerOverflow(big);
     }
@@ -15424,8 +15510,8 @@
   int64_t value;
   if (!OS::StringToInt64(str.ToCString(), &value)) {
     const Bigint& big = Bigint::Handle(Bigint::NewCanonical(str));
-    ASSERT(!BigintOperations::FitsIntoSmi(big));
-    ASSERT(!BigintOperations::FitsIntoInt64(big));
+    ASSERT(!big.FitsIntoSmi());
+    ASSERT(!big.FitsIntoInt64());
     return big.raw();
   }
   if (Smi::IsValid(value)) {
@@ -15449,7 +15535,7 @@
       !IsJavascriptInt(value)) {
     const Integer& i = is_smi ?
         Integer::Handle(Smi::New(static_cast<intptr_t>(value))) :
-        Integer::Handle(Mint::New(value));
+        Integer::Handle(Mint::New(value, space));
     ThrowJavascriptIntegerOverflow(i);
   }
   if (is_smi) {
@@ -15462,37 +15548,68 @@
 RawInteger* Integer::NewFromUint64(uint64_t value, Heap::Space space) {
   if (value > static_cast<uint64_t>(Mint::kMaxValue)) {
     if (FLAG_throw_on_javascript_int_overflow) {
-      const Integer &i =
-          Integer::Handle(BigintOperations::NewFromUint64(value));
+      const Integer &i = Integer::Handle(Bigint::NewFromUint64(value, space));
       ThrowJavascriptIntegerOverflow(i);
     }
-    return BigintOperations::NewFromUint64(value);
+    return Bigint::NewFromUint64(value, space);
   } else {
-    return Integer::New(value);
+    return Integer::New(value, space);
   }
 }
 
 
+bool Integer::Equals(const Instance& other) const {
+  // Integer is an abstract class.
+  UNREACHABLE();
+  return false;
+}
+
+
+bool Integer::IsZero() const {
+  // Integer is an abstract class.
+  UNREACHABLE();
+  return false;
+}
+
+
+bool Integer::IsNegative() const {
+  // Integer is an abstract class.
+  UNREACHABLE();
+  return false;
+}
+
+
 double Integer::AsDoubleValue() const {
-  UNIMPLEMENTED();
+  // Integer is an abstract class.
+  UNREACHABLE();
   return 0.0;
 }
 
 
 int64_t Integer::AsInt64Value() const {
-  UNIMPLEMENTED();
+  // Integer is an abstract class.
+  UNREACHABLE();
   return 0;
 }
 
 
 uint32_t Integer::AsTruncatedUint32Value() const {
-  UNIMPLEMENTED();
+  // Integer is an abstract class.
+  UNREACHABLE();
   return 0;
 }
 
 
+bool Integer::FitsIntoSmi() const {
+  // Integer is an abstract class.
+  UNREACHABLE();
+  return false;
+}
+
+
 int Integer::CompareWith(const Integer& other) const {
-  UNIMPLEMENTED();
+  // Integer is an abstract class.
+  UNREACHABLE();
   return 0;
 }
 
@@ -15509,11 +15626,8 @@
     mint ^= raw();
     value = mint.value();
   } else {
-    ASSERT(IsBigint());
-    Bigint& big_value = Bigint::Handle();
-    big_value ^= raw();
-    if (BigintOperations::FitsIntoInt64(big_value)) {
-      value = BigintOperations::ToInt64(big_value);
+    if (Bigint::Cast(*this).FitsIntoInt64()) {
+      value = AsInt64Value();
     }
   }
   return !IsJavascriptInt(value);
@@ -15535,16 +15649,14 @@
       return raw();
     }
   }
-  ASSERT(IsBigint());
-  Bigint& big_value = Bigint::Handle();
-  big_value ^= raw();
-  if (BigintOperations::FitsIntoSmi(big_value)) {
-    return BigintOperations::ToSmi(big_value);
-  } else if (BigintOperations::FitsIntoInt64(big_value)) {
-    return Mint::New(BigintOperations::ToInt64(big_value));
-  } else {
-    return big_value.raw();
+  if (Bigint::Cast(*this).FitsIntoInt64()) {
+    const int64_t value = AsInt64Value();
+    if (Smi::IsValid(value)) {
+      return Smi::New(value);
+    }
+    return Mint::New(value);
   }
+  return raw();
 }
 
 
@@ -15597,28 +15709,37 @@
         UNIMPLEMENTED();
     }
   }
-  // In 32-bit mode, the result of any operation (except multiplication) between
-  // two 63-bit signed integers will fit in a 64-bit signed result.
-  // For the multiplication result to fit, the sum of the highest bits of the
-  // absolute values of the operands must be smaller than 62.
-  // In 64-bit mode, 63-bit signed integers are Smis, already processed above.
-  if ((Smi::kBits < 32) && !IsBigint() && !other.IsBigint()) {
+  if (!IsBigint() && !other.IsBigint()) {
     const int64_t left_value = AsInt64Value();
     const int64_t right_value = other.AsInt64Value();
-    if (operation == Token::kMUL) {
-      if ((Utils::HighestBit(left_value) +
-           Utils::HighestBit(right_value)) < 62) {
-        return Integer::New(left_value * right_value);
+    switch (operation) {
+      case Token::kADD: {
+        if (((left_value < 0) != (right_value < 0)) ||
+            ((left_value + right_value) < 0) == (left_value < 0)) {
+          return Integer::New(left_value + right_value);
+        }
+        break;
       }
-      // Perform a Bigint multiplication below.
-    } else if (Utils::IsInt(63, left_value) && Utils::IsInt(63, right_value)) {
-      switch (operation) {
-      case Token::kADD:
-        return Integer::New(left_value + right_value);
-      case Token::kSUB:
-        return Integer::New(left_value - right_value);
-      case Token::kTRUNCDIV:
-        return Integer::New(left_value / right_value);
+      case Token::kSUB: {
+        if (((left_value < 0) == (right_value < 0)) ||
+            ((left_value - right_value) < 0) == (left_value < 0)) {
+          return Integer::New(left_value - right_value);
+        }
+        break;
+      }
+      case Token::kMUL: {
+        if ((Utils::HighestBit(left_value) +
+             Utils::HighestBit(right_value)) < 62) {
+          return Integer::New(left_value * right_value);
+        }
+        break;
+      }
+      case Token::kTRUNCDIV: {
+        if ((left_value != Mint::kMinValue) || (right_value != -1)) {
+          return Integer::New(left_value / right_value);
+        }
+        break;
+      }
       case Token::kMOD: {
         const int64_t remainder = left_value % right_value;
         if (remainder < 0) {
@@ -15632,14 +15753,9 @@
       }
       default:
         UNIMPLEMENTED();
-      }
     }
   }
-  const Bigint& left_big = Bigint::Handle(AsBigint());
-  const Bigint& right_big = Bigint::Handle(other.AsBigint());
-  const Bigint& result =
-      Bigint::Handle(left_big.BigArithmeticOp(operation, right_big));
-  return Integer::Handle(result.AsValidInteger()).raw();
+  return Integer::null();  // Notify caller that a bigint operation is required.
 }
 
 
@@ -15681,21 +15797,8 @@
       default:
         UNIMPLEMENTED();
     }
-  } else {
-    Bigint& op1 = Bigint::Handle(AsBigint());
-    Bigint& op2 = Bigint::Handle(other.AsBigint());
-    switch (kind) {
-      case Token::kBIT_AND:
-        return BigintOperations::BitAnd(op1, op2);
-      case Token::kBIT_OR:
-        return BigintOperations::BitOr(op1, op2);
-      case Token::kBIT_XOR:
-        return BigintOperations::BitXor(op1, op2);
-      default:
-        UNIMPLEMENTED();
-    }
   }
-  return Integer::null();
+  return Integer::null();  // Notify caller that a bigint operation is required.
 }
 
 
@@ -15716,9 +15819,7 @@
         int cnt = Utils::HighestBit(left_value);
         if ((cnt + right_value) >= Smi::kBits) {
           if ((cnt + right_value) >= Mint::kBits) {
-            return BigintOperations::ShiftLeft(
-                Bigint::Handle(BigintOperations::NewFromSmi(*this)),
-                               right_value);
+            return Bigint::NewFromShiftedInt64(left_value, right_value);
           } else {
             int64_t left_64 = left_value;
             return Integer::New(left_64 << right_value, Heap::kNew, silent);
@@ -15765,22 +15866,6 @@
 }
 
 
-static bool FitsIntoSmi(const Integer& integer) {
-  if (integer.IsSmi()) {
-    return true;
-  }
-  if (integer.IsMint()) {
-    int64_t mint_value = integer.AsInt64Value();
-    return Smi::IsValid(mint_value);
-  }
-  if (integer.IsBigint()) {
-    return BigintOperations::FitsIntoSmi(Bigint::Cast(integer));
-  }
-  UNREACHABLE();
-  return false;
-}
-
-
 int Smi::CompareWith(const Integer& other) const {
   if (other.IsSmi()) {
     const Smi& other_smi = Smi::Cast(other);
@@ -15792,7 +15877,7 @@
       return 0;
     }
   }
-  ASSERT(!FitsIntoSmi(other));
+  ASSERT(!other.FitsIntoSmi());
   if (other.IsMint() || other.IsBigint()) {
     if (this->IsNegative() == other.IsNegative()) {
       return this->IsNegative() ? 1 : -1;
@@ -15816,6 +15901,7 @@
 
 void Smi::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
+  AddTypeProperties(&jsobj, "int", JSONType(), ref);
   PrintSharedInstanceJSON(&jsobj, ref);
   jsobj.AddPropertyF("id", "objects/int-%" Pd "", Value());
   jsobj.AddPropertyF("valueAsString", "%" Pd "", Value());
@@ -15906,8 +15992,13 @@
 }
 
 
+bool Mint::FitsIntoSmi() const {
+  return Smi::IsValid(AsInt64Value());
+}
+
+
 int Mint::CompareWith(const Integer& other) const {
-  ASSERT(!FitsIntoSmi(*this));
+  ASSERT(!FitsIntoSmi());
   if (other.IsMint() || other.IsSmi()) {
     int64_t a = AsInt64Value();
     int64_t b = other.AsInt64Value();
@@ -15919,15 +16010,12 @@
       return 0;
     }
   }
-  if (other.IsBigint()) {
-    ASSERT(!BigintOperations::FitsIntoInt64(Bigint::Cast(other)));
-    if (this->IsNegative() == other.IsNegative()) {
-      return this->IsNegative() ? 1 : -1;
-    }
-    return this->IsNegative() ? -1 : 1;
+  ASSERT(other.IsBigint());
+  ASSERT(!Bigint::Cast(other).FitsIntoInt64());
+  if (this->IsNegative() == other.IsNegative()) {
+    return this->IsNegative() ? 1 : -1;
   }
-  UNREACHABLE();
-  return 0;
+  return this->IsNegative() ? -1 : 1;
 }
 
 
@@ -15942,7 +16030,7 @@
 
 
 void Mint::PrintJSONImpl(JSONStream* stream, bool ref) const {
-  Number::PrintJSONImpl(stream, ref);
+  Integer::PrintJSONImpl(stream, ref);
 }
 
 
@@ -16074,47 +16162,62 @@
 
 
 void Double::PrintJSONImpl(JSONStream* stream, bool ref) const {
-  Number::PrintJSONImpl(stream, ref);
+  JSONObject jsobj(stream);
+  // Suppress the fact that the internal vm name for this type is
+  // "Double".  Return "double" instead.
+  AddTypeProperties(&jsobj, "double", "double", ref);
+  PrintSharedInstanceJSON(&jsobj, ref);
+  ObjectIdRing* ring = Isolate::Current()->object_id_ring();
+  const intptr_t id = ring->GetIdForObject(raw());
+  jsobj.AddPropertyF("id", "objects/%" Pd "", id);
+  jsobj.AddProperty("valueAsString", ToCString());
 }
 
 
-RawBigint* Integer::AsBigint() const {
-  ASSERT(!IsNull());
-  if (IsSmi()) {
-    Smi& smi = Smi::Handle();
-    smi ^= raw();
-    return BigintOperations::NewFromSmi(smi);
-  } else if (IsMint()) {
-    Mint& mint = Mint::Handle();
-    mint ^= raw();
-    return BigintOperations::NewFromInt64(mint.value());
-  } else {
-    ASSERT(IsBigint());
-    Bigint& big = Bigint::Handle();
-    big ^= raw();
-    ASSERT(!BigintOperations::FitsIntoSmi(big));
-    return big.raw();
-  }
+void Bigint::set_neg(const Bool& value) const {
+  StorePointer(&raw_ptr()->neg_, value.raw());
 }
 
 
-RawBigint* Bigint::BigArithmeticOp(Token::Kind operation,
-                                   const Bigint& other) const {
-  switch (operation) {
-    case Token::kADD:
-      return BigintOperations::Add(*this, other);
-    case Token::kSUB:
-      return BigintOperations::Subtract(*this, other);
-    case Token::kMUL:
-      return BigintOperations::Multiply(*this, other);
-    case Token::kTRUNCDIV:
-      return BigintOperations::Divide(*this, other);
-    case Token::kMOD:
-      return BigintOperations::Modulo(*this, other);
-    default:
-      UNIMPLEMENTED();
-      return Bigint::null();
-  }
+void Bigint::set_used(const Smi& value) const {
+  raw_ptr()->used_ = value.raw();
+}
+
+
+void Bigint::set_digits(const TypedData& value) const {
+  StorePointer(&raw_ptr()->digits_, value.raw());
+}
+
+
+bool Bigint::Neg() const {
+  return Bool::Handle(neg()).value();
+}
+
+
+void Bigint::SetNeg(bool value) const {
+  set_neg(Bool::Get(value));
+}
+
+
+intptr_t Bigint::Used() const {
+  return Smi::Value(used());
+}
+
+
+void Bigint::SetUsed(intptr_t value) const {
+  set_used(Smi::Handle(Smi::New(value)));
+}
+
+
+uint32_t Bigint::DigitAt(intptr_t index) const {
+  const TypedData& typed_data = TypedData::Handle(digits());
+  return typed_data.GetUint32(index << 2);
+}
+
+
+void Bigint::SetDigitAt(intptr_t index, uint32_t value) const {
+  const TypedData& typed_data = TypedData::Handle(digits());
+  typed_data.SetUint32(index << 2, value);
 }
 
 
@@ -16130,17 +16233,17 @@
 
   const Bigint& other_bgi = Bigint::Cast(other);
 
-  if (this->IsNegative() != other_bgi.IsNegative()) {
+  if (this->Neg() != other_bgi.Neg()) {
     return false;
   }
 
-  intptr_t len = this->Length();
-  if (len != other_bgi.Length()) {
+  const intptr_t used = this->Used();
+  if (used != other_bgi.Used()) {
     return false;
   }
 
-  for (intptr_t i = 0; i < len; i++) {
-    if (this->GetChunkAt(i) != other_bgi.GetChunkAt(i)) {
+  for (intptr_t i = 0; i < used; i++) {
+    if (this->DigitAt(i) != other_bgi.DigitAt(i)) {
       return false;
     }
   }
@@ -16148,18 +16251,165 @@
 }
 
 
-RawBigint* Bigint::New(const String& str, Heap::Space space) {
-  const Bigint& result = Bigint::Handle(
-      BigintOperations::NewFromCString(str.ToCString(), space));
-  ASSERT(!BigintOperations::FitsIntoInt64(result));
+bool Bigint::CheckAndCanonicalizeFields(const char** error_str) const {
+  // Bool field neg should always be canonical.
+  ASSERT(Bool::Handle(neg()).IsCanonical());
+  // Smi field used is canonical by definition.
+  if (Used() > 0) {
+    // Canonicalize TypedData field digits.
+    TypedData& digits_ = TypedData::Handle(digits());
+    digits_ ^= digits_.CheckAndCanonicalize(NULL);
+    ASSERT(!digits_.IsNull());
+    set_digits(digits_);
+  } else {
+    ASSERT(digits() == TypedData::null());
+  }
+  return true;
+}
+
+
+RawBigint* Bigint::New(Heap::Space space) {
+  ASSERT(Isolate::Current()->object_store()->bigint_class() != Class::null());
+  Bigint& result = Bigint::Handle();
+  {
+    RawObject* raw = Object::Allocate(Bigint::kClassId,
+                                      Bigint::InstanceSize(),
+                                      space);
+    NoGCScope no_gc;
+    result ^= raw;
+  }
+  result.set_neg(Bool::Get(false));
+  result.set_used(Smi::Handle(Smi::New(0)));
   return result.raw();
 }
 
 
+RawBigint* Bigint::NewFromInt64(int64_t value, Heap::Space space) {
+  const Bigint& result = Bigint::Handle(New(space));
+  result.EnsureLength(2, space);
+  result.SetUsed(2);
+  if (value < 0) {
+    result.SetNeg(true);
+    value = -value;  // No concern about overflow, since sign is captured.
+  }
+  result.SetDigitAt(0, static_cast<uint32_t>(value));
+  result.SetDigitAt(1, static_cast<uint32_t>(value >> 32));  // value >= 0.
+  result.Clamp();
+  return result.raw();
+}
+
+
+RawBigint* Bigint::NewFromUint64(uint64_t value, Heap::Space space) {
+  const Bigint& result = Bigint::Handle(New(space));
+  result.EnsureLength(2, space);
+  result.SetUsed(2);
+  result.SetDigitAt(0, static_cast<uint32_t>(value));
+  result.SetDigitAt(1, static_cast<uint32_t>(value >> 32));
+  result.Clamp();
+  return result.raw();
+}
+
+
+RawBigint* Bigint::NewFromShiftedInt64(int64_t value, intptr_t shift,
+                                         Heap::Space space) {
+  ASSERT(kBitsPerDigit == 32);
+  ASSERT(shift >= 0);
+  const Bigint& result = Bigint::Handle(New(space));
+  const intptr_t digit_shift = shift / kBitsPerDigit;
+  const intptr_t bit_shift = shift % kBitsPerDigit;
+  result.EnsureLength(3 + digit_shift, space);
+  result.SetUsed(3 + digit_shift);
+  uint64_t abs_value;
+  if (value < 0) {
+    result.SetNeg(true);
+    abs_value = -value;  // No concern about overflow, since sign is captured.
+  } else {
+    abs_value = value;
+  }
+  for (intptr_t i = 0; i < digit_shift; i++) {
+    result.SetDigitAt(i, 0);
+  }
+  result.SetDigitAt(0 + digit_shift,
+                    static_cast<uint32_t>(abs_value << bit_shift));
+  result.SetDigitAt(1 + digit_shift,
+                    static_cast<uint32_t>(abs_value >> (32 - bit_shift)));
+  result.SetDigitAt(2 + digit_shift,
+      (bit_shift == 0) ? 0
+                       : static_cast<uint32_t>(abs_value >> (64 - bit_shift)));
+  result.Clamp();
+  return result.raw();
+}
+
+
+void Bigint::EnsureLength(intptr_t length, Heap::Space space) const {
+  ASSERT(length >= 0);
+  TypedData& old_digits = TypedData::Handle(digits());
+  if ((length > 0) && (old_digits.IsNull() || (length > old_digits.Length()))) {
+    TypedData& new_digits = TypedData::Handle(
+        TypedData::New(kTypedDataUint32ArrayCid, length + kExtraDigits, space));
+    if (!old_digits.IsNull()) {
+      TypedData::Copy(new_digits, TypedData::data_offset(),
+                      old_digits, TypedData::data_offset(),
+                      old_digits.LengthInBytes());
+    }
+    set_digits(new_digits);
+  }
+}
+
+
+void Bigint::Clamp() const {
+  intptr_t used = Used();
+  while ((used > 0) && (DigitAt(used - 1) == 0)) {
+    --used;
+  }
+  SetUsed(used);
+}
+
+
+bool Bigint::IsClamped() const {
+  intptr_t used = Used();
+  return (used == 0) || (DigitAt(used - 1) > 0);
+}
+
+
+RawBigint* Bigint::NewFromCString(const char* str, Heap::Space space) {
+  ASSERT(str != NULL);
+  if (str[0] == '\0') {
+    return NewFromInt64(0, space);
+  }
+
+  // If the string starts with '-' recursively restart the whole operation
+  // without the character and then toggle the sign.
+  // This allows multiple leading '-' (which will cancel each other out), but
+  // we have added an assert, to make sure that the returned result of the
+  // recursive call is not negative.
+  // We don't catch leading '-'s for zero. Ex: "--0", or "---".
+  if (str[0] == '-') {
+    const Bigint& result = Bigint::Handle(NewFromCString(&str[1], space));
+    result.SetNeg(!result.Neg());  // Toggle sign.
+    ASSERT(result.IsZero() || result.IsNegative());
+    ASSERT(result.IsClamped());
+    return result.raw();
+  }
+
+  // No overflow check needed since overflowing str_length implies that we take
+  // the branch to NewFromDecCString() which contains a check itself.
+  const intptr_t str_length = strlen(str);
+  if ((str_length > 2) &&
+      (str[0] == '0') &&
+      ((str[1] == 'x') || (str[1] == 'X'))) {
+    const Bigint& result = Bigint::Handle(NewFromHexCString(&str[2], space));
+    ASSERT(result.IsClamped());
+    return result.raw();
+  } else {
+    return NewFromDecCString(str, space);
+  }
+}
+
+
 RawBigint* Bigint::NewCanonical(const String& str) {
   const Bigint& value = Bigint::Handle(
-      BigintOperations::NewFromCString(str.ToCString(), Heap::kOld));
-  ASSERT(!BigintOperations::FitsIntoInt64(value));
+      Bigint::NewFromCString(str.ToCString(), Heap::kOld));
   const Class& cls =
       Class::Handle(Isolate::Current()->object_store()->bigint_class());
   const Array& constants = Array::Handle(cls.constants());
@@ -16186,55 +16436,498 @@
 }
 
 
+RawBigint* Bigint::NewFromHexCString(const char* str, Heap::Space space) {
+  // TODO(regis): Do we need to check for max length?
+  // If the string starts with '-' recursively restart the whole operation
+  // without the character and then toggle the sign.
+  // This allows multiple leading '-' (which will cancel each other out), but
+  // we have added an assert, to make sure that the returned result of the
+  // recursive call is not negative.
+  // We don't catch leading '-'s for zero. Ex: "--0", or "---".
+  if (str[0] == '-') {
+    const Bigint& result = Bigint::Handle(NewFromHexCString(&str[1], space));
+    result.SetNeg(!result.Neg());  // Toggle sign.
+    ASSERT(result.IsZero() || result.IsNegative());
+    ASSERT(result.IsClamped());
+    return result.raw();
+  }
+  const Bigint& result = Bigint::Handle(New(space));
+  const int kBitsPerHexDigit = 4;
+  const int kHexDigitsPerDigit = 8;
+  const int kBitsPerDigit = kBitsPerHexDigit * kHexDigitsPerDigit;
+  intptr_t hex_i = strlen(str);  // Terminating byte excluded.
+  result.EnsureLength((hex_i + kHexDigitsPerDigit - 1) / kHexDigitsPerDigit,
+                      space);
+  intptr_t used_ = 0;
+  uint32_t digit = 0;
+  intptr_t bit_i = 0;
+  while (--hex_i >= 0) {
+    digit += Utils::HexDigitToInt(str[hex_i]) << bit_i;
+    bit_i += kBitsPerHexDigit;
+    if (bit_i == kBitsPerDigit) {
+      bit_i = 0;
+      result.SetDigitAt(used_++, digit);
+      digit = 0;
+    }
+  }
+  if (bit_i != 0) {
+    result.SetDigitAt(used_++, digit);
+  }
+  result.SetUsed(used_);
+  result.Clamp();
+  return result.raw();
+}
+
+
+RawBigint* Bigint::NewFromDecCString(const char* str, Heap::Space space) {
+  // Read 9 digits a time. 10^9 < 2^32.
+  const int kDecDigitsPerIteration = 9;
+  const uint32_t kTenMultiplier = 1000000000;
+  ASSERT(kBitsPerDigit == 32);
+
+  const intptr_t str_length = strlen(str);
+  if (str_length < 0) {  // TODO(regis): Pick a smaller limit.
+    FATAL("Fatal error in Bigint::NewFromDecCString: string too long");
+  }
+  intptr_t str_pos = 0;
+
+  Bigint& result = Bigint::Handle(Bigint::New(space));
+  // One decimal digit takes log2(10) bits, i.e. ~3.32192809489 bits.
+  // That is a theoretical limit for large numbers.
+  // The extra digits allocated take care of variations (kExtraDigits).
+  const int64_t kLog10Dividend = 33219281;
+  const int64_t kLog10Divisor = 10000000;
+  result.EnsureLength((kLog10Dividend * str_length) /
+                      (kLog10Divisor * kBitsPerDigit), space);
+
+  // Read first digit separately. This avoids a multiplication and addition.
+  // The first digit might also not have kDecDigitsPerIteration decimal digits.
+  const intptr_t lsdigit_length = str_length % kDecDigitsPerIteration;
+  uint32_t digit = 0;
+  for (intptr_t i = 0; i < lsdigit_length; i++) {
+    char c = str[str_pos++];
+    ASSERT(('0' <= c) && (c <= '9'));
+    digit = digit * 10 + c - '0';
+  }
+  result.SetDigitAt(0, digit);
+  intptr_t used = 1;
+
+  // Read kDecDigitsPerIteration at a time, and store it in 'digit'.
+  // Then multiply the temporary result by 10^kDecDigitsPerIteration and add
+  // 'digit' to the new result.
+  while (str_pos < str_length - 1) {
+    digit = 0;
+    for (intptr_t i = 0; i < kDecDigitsPerIteration; i++) {
+      char c = str[str_pos++];
+      ASSERT(('0' <= c) && (c <= '9'));
+      digit = digit * 10 + c - '0';
+    }
+    // Multiply result with kTenMultiplier and add digit.
+    for (intptr_t i = 0; i < used; i++) {
+      uint64_t product =
+          (static_cast<uint64_t>(result.DigitAt(i)) * kTenMultiplier) + digit;
+      result.SetDigitAt(i, static_cast<uint32_t>(product & kDigitMask));
+      digit = static_cast<uint32_t>(product >> kBitsPerDigit);
+    }
+    result.SetDigitAt(used++, digit);
+  }
+  result.SetUsed(used);
+  result.Clamp();
+  return result.raw();
+}
+
+
+static double Uint64ToDouble(uint64_t x) {
+#if _WIN64
+  // For static_cast<double>(x) MSVC x64 generates
+  //
+  //    cvtsi2sd xmm0, rax
+  //    test  rax, rax
+  //    jns done
+  //    addsd xmm0, static_cast<double>(2^64)
+  //  done:
+  //
+  // while GCC -m64 generates
+  //
+  //    test rax, rax
+  //    js negative
+  //    cvtsi2sd xmm0, rax
+  //    jmp done
+  //  negative:
+  //    mov rdx, rax
+  //    shr rdx, 1
+  //    and eax, 0x1
+  //    or rdx, rax
+  //    cvtsi2sd xmm0, rdx
+  //    addsd xmm0, xmm0
+  //  done:
+  //
+  // which results in a different rounding.
+  //
+  // For consistency between platforms fallback to GCC style converstion
+  // on Win64.
+  //
+  const int64_t y = static_cast<int64_t>(x);
+  if (y > 0) {
+    return static_cast<double>(y);
+  } else {
+    const double half = static_cast<double>(
+        static_cast<int64_t>(x >> 1) | (y & 1));
+    return half + half;
+  }
+#else
+  return static_cast<double>(x);
+#endif
+}
+
+
 double Bigint::AsDoubleValue() const {
-  return Double::Handle(BigintOperations::ToDouble(*this)).value();
+  ASSERT(kBitsPerDigit == 32);
+  ASSERT(IsClamped());
+  const intptr_t used = Used();
+  if (used == 0) {
+    return 0.0;
+  }
+  if (used <= 2) {
+    const uint64_t digit1 = (used > 1) ? DigitAt(1) : 0;
+    const uint64_t abs_value = (digit1 << 32) + DigitAt(0);
+    const double abs_double_value = Uint64ToDouble(abs_value);
+    return Neg() ? -abs_double_value : abs_double_value;
+  }
+
+  static const int kPhysicalSignificandSize = 52;
+  // The significand size has an additional hidden bit.
+  static const int kSignificandSize = kPhysicalSignificandSize + 1;
+  static const int kExponentBias = 0x3FF + kPhysicalSignificandSize;
+  static const int kMaxExponent = 0x7FF - kExponentBias;
+  static const uint64_t kOne64 = 1;
+  static const uint64_t kInfinityBits =
+      DART_2PART_UINT64_C(0x7FF00000, 00000000);
+
+  // A double is composed of an exponent e and a significand s. Its value equals
+  // s * 2^e. The significand has 53 bits of which the first one must always be
+  // 1 (at least for then numbers we are working with here) and is therefore
+  // omitted. The physical size of the significand is thus 52 bits.
+  // The exponent has 11 bits and is biased by 0x3FF + 52. For example an
+  // exponent e = 10 is written as 0x3FF + 52 + 10 (in the 11 bits that are
+  // reserved for the exponent).
+  // When converting the given bignum to a double we have to pay attention to
+  // the rounding. In particular we have to decide which double to pick if an
+  // input lies exactly between two doubles. As usual with double operations
+  // we pick the double with an even significand in such cases.
+  //
+  // General approach of this algorithm: Get 54 bits (one more than the
+  // significand size) of the bigint. If the last bit is then 1, then (without
+  // knowledge of the remaining bits) we could have a half-way number.
+  // If the second-to-last bit is odd then we know that we have to round up:
+  // if the remaining bits are not zero then the input lies closer to the higher
+  // double. If the remaining bits are zero then we have a half-way case and
+  // we need to round up too (rounding to the even double).
+  // If the second-to-last bit is even then we need to look at the remaining
+  // bits to determine if any of them is not zero. If that's the case then the
+  // number lies closer to the next-higher double. Otherwise we round the
+  // half-way case down to even.
+
+  if (((used - 1) * kBitsPerDigit) > (kMaxExponent + kSignificandSize)) {
+    // Does not fit into a double.
+    const double infinity = bit_cast<double>(kInfinityBits);
+    return Neg() ? -infinity : infinity;
+  }
+
+  intptr_t digit_index = used - 1;
+  // In order to round correctly we need to look at half-way cases. Therefore we
+  // get kSignificandSize + 1 bits. If the last bit is 1 then we have to look
+  // at the remaining bits to know if we have to round up.
+  int needed_bits = kSignificandSize + 1;
+  ASSERT((kBitsPerDigit < needed_bits) && (2 * kBitsPerDigit >= needed_bits));
+  bool discarded_bits_were_zero = true;
+
+  const uint32_t firstDigit = DigitAt(digit_index--);
+  ASSERT(firstDigit > 0);
+  uint64_t twice_significand_floor = firstDigit;
+  intptr_t twice_significant_exponent = (digit_index + 1) * kBitsPerDigit;
+  needed_bits -= Utils::HighestBit(firstDigit) + 1;
+
+  if (needed_bits >= kBitsPerDigit) {
+    twice_significand_floor <<= kBitsPerDigit;
+    twice_significand_floor |= DigitAt(digit_index--);
+    twice_significant_exponent -= kBitsPerDigit;
+    needed_bits -= kBitsPerDigit;
+  }
+  if (needed_bits > 0) {
+    ASSERT(needed_bits <= kBitsPerDigit);
+    uint32_t digit = DigitAt(digit_index--);
+    int discarded_bits_count = kBitsPerDigit - needed_bits;
+    twice_significand_floor <<= needed_bits;
+    twice_significand_floor |= digit >> discarded_bits_count;
+    twice_significant_exponent -= needed_bits;
+    uint64_t discarded_bits_mask = (kOne64 << discarded_bits_count) - 1;
+    discarded_bits_were_zero = ((digit & discarded_bits_mask) == 0);
+  }
+  ASSERT((twice_significand_floor >> kSignificandSize) == 1);
+
+  // We might need to round up the significand later.
+  uint64_t significand = twice_significand_floor >> 1;
+  const intptr_t exponent = twice_significant_exponent + 1;
+
+  if (exponent >= kMaxExponent) {
+    // Infinity.
+    // Does not fit into a double.
+    const double infinity = bit_cast<double>(kInfinityBits);
+    return Neg() ? -infinity : infinity;
+  }
+
+  if ((twice_significand_floor & 1) == 1) {
+    bool round_up = false;
+
+    if ((significand & 1) != 0 || !discarded_bits_were_zero) {
+      // Even if the remaining bits are zero we still need to round up since we
+      // want to round to even for half-way cases.
+      round_up = true;
+    } else {
+      // Could be a half-way case. See if the remaining bits are non-zero.
+      for (intptr_t i = 0; i <= digit_index; i++) {
+        if (DigitAt(i) != 0) {
+          round_up = true;
+          break;
+        }
+      }
+    }
+
+    if (round_up) {
+      significand++;
+      // It might be that we just went from 53 bits to 54 bits.
+      // Example: After adding 1 to 1FFF..FF (with 53 bits set to 1) we have
+      // 2000..00 (= 2 ^ 54). When adding the exponent and significand together
+      // this will increase the exponent by 1 which is exactly what we want.
+    }
+  }
+
+  ASSERT(((significand >> (kSignificandSize - 1)) == 1) ||
+         (significand == (kOne64 << kSignificandSize)));
+  // The significand still has the hidden bit. We simply decrement the biased
+  // exponent by one instead of playing around with the significand.
+  const uint64_t biased_exponent = exponent + kExponentBias - 1;
+  // Note that we must use the plus operator instead of bit-or.
+  const uint64_t double_bits =
+      (biased_exponent << kPhysicalSignificandSize) + significand;
+
+  const double value = bit_cast<double>(double_bits);
+  return Neg() ? -value : value;
+}
+
+
+bool Bigint::FitsIntoSmi() const {
+  return FitsIntoInt64() && Smi::IsValid(AsInt64Value());
+}
+
+
+bool Bigint::FitsIntoInt64() const {
+  ASSERT(Bigint::kBitsPerDigit == 32);
+  const intptr_t used = Used();
+  if (used < 2) return true;
+  if (used > 2) return false;
+  const uint64_t digit1 = DigitAt(1);
+  const uint64_t value = (digit1 << 32) + DigitAt(0);
+  uint64_t limit = Mint::kMaxValue;
+  if (Neg()) {
+    limit++;
+  }
+  return value <= limit;
 }
 
 
 int64_t Bigint::AsInt64Value() const {
-  if (!BigintOperations::FitsIntoInt64(*this)) {
-    UNREACHABLE();
-  }
-  return BigintOperations::ToInt64(*this);
+  ASSERT(FitsIntoInt64());
+  const intptr_t used = Used();
+  if (used == 0) return 0;
+  const int64_t digit1 = (used > 1) ? DigitAt(1) : 0;
+  const int64_t value = (digit1 << 32) + DigitAt(0);
+  return Neg() ? -value : value;
+}
+
+
+bool Bigint::FitsIntoUint64() const {
+  ASSERT(Bigint::kBitsPerDigit == 32);
+  return !Neg() && (Used() <= 2);
+}
+
+
+uint64_t Bigint::AsUint64Value() const {
+  ASSERT(FitsIntoUint64());
+  const intptr_t used = Used();
+  if (used == 0) return 0;
+  const uint64_t digit1 = (used > 1) ? DigitAt(1) : 0;
+  return (digit1 << 32) + DigitAt(0);
 }
 
 
 uint32_t Bigint::AsTruncatedUint32Value() const {
-  return BigintOperations::TruncateToUint32(*this);
+  // Note: the previous implementation of Bigint returned the absolute value
+  // truncated to 32 bits, which is not consistent with Smi and Mint behavior.
+  ASSERT(Bigint::kBitsPerDigit == 32);
+  const intptr_t used = Used();
+  if (used == 0) return 0;
+  const uint32_t digit0 = DigitAt(0);
+  return Neg() ? -digit0 : digit0;
 }
 
 
 // For positive values: Smi < Mint < Bigint.
 int Bigint::CompareWith(const Integer& other) const {
-  ASSERT(!FitsIntoSmi(*this));
-  ASSERT(!BigintOperations::FitsIntoInt64(*this));
-  if (other.IsBigint()) {
-    return BigintOperations::Compare(*this, Bigint::Cast(other));
-  }
-  if (this->IsNegative() == other.IsNegative()) {
-    return this->IsNegative() ? -1 : 1;
+  ASSERT(!FitsIntoSmi());
+  ASSERT(!FitsIntoInt64());
+  if (other.IsBigint() && (IsNegative() == other.IsNegative())) {
+    const Bigint& other_bgi = Bigint::Cast(other);
+    int64_t result = Used() - other_bgi.Used();
+    if (result == 0) {
+      for (intptr_t i = Used(); --i >= 0; ) {
+        result = DigitAt(i);
+        result -= other_bgi.DigitAt(i);
+        if (result != 0) break;
+      }
+    }
+    if (IsNegative()) {
+      result = -result;
+    }
+    return result > 0 ? 1 : result < 0 ? -1 : 0;
   }
   return this->IsNegative() ? -1 : 1;
 }
 
 
-RawBigint* Bigint::Allocate(intptr_t length, Heap::Space space) {
-  if (length < 0 || length > kMaxElements) {
-    // This should be caught before we reach here.
-    FATAL1("Fatal error in Bigint::Allocate: invalid length %" Pd "\n", length);
+const char* Bigint::ToDecCString(uword (*allocator)(intptr_t size)) const {
+  // log10(2) ~= 0.30102999566398114.
+  const intptr_t kLog2Dividend = 30103;
+  const intptr_t kLog2Divisor = 100000;
+  intptr_t used = Used();
+  const intptr_t kMaxUsed =
+      kIntptrMax / kBitsPerDigit / kLog2Dividend * kLog2Divisor;
+  if (used > kMaxUsed) {
+    // Throw out of memory exception.
+    Isolate* isolate = Isolate::Current();
+    const Instance& exception =
+        Instance::Handle(isolate->object_store()->out_of_memory());
+    Exceptions::Throw(isolate, exception);
+    UNREACHABLE();
   }
-  ASSERT(Isolate::Current()->object_store()->bigint_class() != Class::null());
-  Bigint& result = Bigint::Handle();
-  {
-    RawObject* raw = Object::Allocate(Bigint::kClassId,
-                                      Bigint::InstanceSize(length),
-                                      space);
-    NoGCScope no_gc;
-    result ^= raw;
-    result.raw_ptr()->allocated_length_ = length;  // Chunk length allocated.
-    result.raw_ptr()->signed_length_ = length;  // Chunk length in use.
+  const int64_t bit_len = used * kBitsPerDigit;
+  const int64_t dec_len = (bit_len * kLog2Dividend / kLog2Divisor) + 1;
+  // Add one byte for the minus sign and for the trailing \0 character.
+  const int64_t len = (Neg() ? 1 : 0) + dec_len + 1;
+  char* chars = reinterpret_cast<char*>(allocator(len));
+  intptr_t pos = 0;
+  const intptr_t kDivisor = 100000000;
+  const intptr_t kDigits = 8;
+  // TODO(regis): Fix Windows error reported for ambiguous call to 'pow'.
+  // ASSERT(pow(10.0, kDigits) == kDivisor);
+  ASSERT(kDivisor < kDigitBase);
+  ASSERT(Smi::IsValid(kDivisor));
+  // Allocate a copy of the digits.
+  const TypedData& rest_digits = TypedData::Handle(
+      TypedData::New(kTypedDataUint32ArrayCid, used));
+  for (intptr_t i = 0; i < used; i++) {
+    rest_digits.SetUint32(i << 2, DigitAt(i));
   }
-  return result.raw();
+  if (used == 0) {
+    chars[pos++] = '0';
+  }
+  while (used > 0) {
+    uint32_t remainder = 0;
+    for (intptr_t i = used - 1; i >= 0; i--) {
+      uint64_t dividend = (static_cast<uint64_t>(remainder) << kBitsPerDigit) +
+          rest_digits.GetUint32(i << 2);
+      uint32_t quotient = static_cast<uint32_t>(dividend / kDivisor);
+      remainder = static_cast<uint32_t>(
+          dividend - static_cast<uint64_t>(quotient) * kDivisor);
+      rest_digits.SetUint32(i << 2, quotient);
+    }
+    // Clamp rest_digits.
+    while ((used > 0) && (rest_digits.GetUint32((used - 1) << 2) == 0)) {
+      used--;
+    }
+    for (intptr_t i = 0; i < kDigits; i++) {
+      chars[pos++] = '0' + (remainder % 10);
+      remainder /= 10;
+    }
+    ASSERT(remainder == 0);
+  }
+  // Remove leading zeros.
+  while ((pos > 1) && (chars[pos - 1] == '0')) {
+    pos--;
+  }
+  if (Neg()) {
+    chars[pos++] = '-';
+  }
+  // Reverse the string.
+  intptr_t i = 0;
+  intptr_t j = pos - 1;
+  while (i < j) {
+    char tmp = chars[i];
+    chars[i] = chars[j];
+    chars[j] = tmp;
+    i++;
+    j--;
+  }
+  chars[pos] = '\0';
+  return chars;
+}
+
+
+const char* Bigint::ToHexCString(uword (*allocator)(intptr_t size)) const {
+  NoGCScope no_gc;  // TODO(regis): Is this necessary?
+
+  const intptr_t used = Used();
+  if (used == 0) {
+    const char* zero = "0x0";
+    const size_t len = strlen(zero) + 1;
+    char* chars = reinterpret_cast<char*>(allocator(len));
+    strncpy(chars, zero, len);
+    return chars;
+  }
+  const int kBitsPerHexDigit = 4;
+  const int kHexDigitsPerDigit = 8;
+  const intptr_t kMaxUsed = (kIntptrMax - 4) / kHexDigitsPerDigit;
+  if (used > kMaxUsed) {
+    // Throw out of memory exception.
+    Isolate* isolate = Isolate::Current();
+    const Instance& exception =
+        Instance::Handle(isolate->object_store()->out_of_memory());
+    Exceptions::Throw(isolate, exception);
+    UNREACHABLE();
+  }
+  intptr_t hex_len = (used - 1) * kHexDigitsPerDigit;
+  // The most significant digit may use fewer than kHexDigitsPerDigit digits.
+  uint32_t digit = DigitAt(used - 1);
+  ASSERT(digit != 0);  // Value must be clamped.
+  while (digit != 0) {
+    hex_len++;
+    digit >>= kBitsPerHexDigit;
+  }
+  // Add bytes for '0x', for the minus sign, and for the trailing \0 character.
+  const int32_t len = (Neg() ? 1 : 0) + 2 + hex_len + 1;
+  char* chars = reinterpret_cast<char*>(allocator(len));
+  intptr_t pos = len;
+  chars[--pos] = '\0';
+  for (intptr_t i = 0; i < (used - 1); i++) {
+    digit = DigitAt(i);
+    for (intptr_t j = 0; j < kHexDigitsPerDigit; j++) {
+      chars[--pos] = Utils::IntToHexDigit(digit & 0xf);
+      digit >>= kBitsPerHexDigit;
+    }
+  }
+  digit = DigitAt(used - 1);
+  while (digit != 0) {
+    chars[--pos] = Utils::IntToHexDigit(digit & 0xf);
+    digit >>= kBitsPerHexDigit;
+  }
+  chars[--pos] = 'x';
+  chars[--pos] = '0';
+  if (Neg()) {
+    chars[--pos] = '-';
+  }
+  ASSERT(pos == 0);
+  return chars;
 }
 
 
@@ -16245,12 +16938,12 @@
 
 
 const char* Bigint::ToCString() const {
-  return BigintOperations::ToDecimalCString(*this, &BigintAllocator);
+  return ToDecCString(&BigintAllocator);
 }
 
 
 void Bigint::PrintJSONImpl(JSONStream* stream, bool ref) const {
-  Number::PrintJSONImpl(stream, ref);
+  Integer::PrintJSONImpl(stream, ref);
 }
 
 
@@ -16992,7 +17685,10 @@
   if (begin_index >= str.Length()) {
     return String::null();
   }
-  return String::SubString(str, begin_index, (str.Length() - begin_index));
+  return String::SubString(str,
+                           begin_index,
+                           (str.Length() - begin_index),
+                           space);
 }
 
 
@@ -17031,10 +17727,17 @@
 
 
 const char* String::ToCString() const {
+  intptr_t length;
+  return ToCString(&length);
+}
+
+
+const char* String::ToCString(intptr_t* length) const {
   if (IsOneByteString()) {
     // Quick conversion if OneByteString contains only ASCII characters.
     intptr_t len = Length();
     if (len == 0) {
+      *length = 0;
       return "";
     }
     Zone* zone = Isolate::Current()->current_zone();
@@ -17051,6 +17754,7 @@
     }
     if (len > 0) {
       result[len] = 0;
+      *length = len;
       return reinterpret_cast<const char*>(result);
     }
   }
@@ -17059,95 +17763,30 @@
   uint8_t* result = zone->Alloc<uint8_t>(len + 1);
   ToUTF8(result, len);
   result[len] = 0;
+  *length = len;
   return reinterpret_cast<const char*>(result);
 }
 
 
-// Does not null-terminate.
-intptr_t String::EscapedString(char* buffer, int max_len) const {
-  int pos = 0;
-
-  CodePointIterator cpi(*this);
-  while (cpi.Next()) {
-    int32_t code_point = cpi.Current();
-    if (IsSpecialCharacter(code_point)) {
-      if (pos + 2 > max_len) {
-        return pos;
-      }
-      buffer[pos++] = '\\';
-      buffer[pos++] = SpecialCharacter(code_point);
-    } else if (IsAsciiPrintChar(code_point)) {
-      buffer[pos++] = code_point;
-    } else {
-      if (pos + 6 > max_len) {
-        return pos;
-      }
-      pos += OS::SNPrint((buffer + pos), (max_len - pos),
-                         "\\u%04x", code_point);
-    }
-    if (pos == max_len) {
-      return pos;
-    }
-  }
-  return pos;
-}
-
-
-intptr_t String::EscapedStringLen(intptr_t too_long) const {
-  intptr_t len = 0;
-
-  CodePointIterator cpi(*this);
-  while (cpi.Next()) {
-    int32_t code_point = cpi.Current();
-    if (IsSpecialCharacter(code_point)) {
-      len += 2;  // e.g. "\n"
-    } else if (IsAsciiPrintChar(code_point)) {
-      len += 1;
-    } else {
-      len += 6;  // e.g. "\u0000".
-    }
-    if (len > too_long) {
-      // No point going further.
-      break;
-    }
-  }
-  return len;
-}
-
-
-const char* String::ToUserCString(intptr_t max_len) const {
-  // Compute the needed length for the buffer.
-  const intptr_t escaped_len = EscapedStringLen(max_len);
-  intptr_t print_len = escaped_len;
-  intptr_t buffer_len = escaped_len + 2;  // +2 for quotes.
-  if (buffer_len > max_len) {
-    buffer_len = max_len;     // Truncate.
-    print_len = max_len - 5;  // -2 for quotes, -3 for elipsis.
+const char* String::ToCStringTruncated(intptr_t max_len,
+                                       bool* did_truncate,
+                                       intptr_t* length) const {
+  if (Length() <= max_len) {
+    *did_truncate = false;
+    return ToCString(length);
   }
 
-  // Allocate the buffer.
-  Zone* zone = Isolate::Current()->current_zone();
-  char* buffer = zone->Alloc<char>(buffer_len + 1);
-
-  // Leading quote.
-  intptr_t pos = 0;
-  buffer[pos++] = '\"';
-
-  // Print escaped string.
-  pos += EscapedString((buffer + pos), print_len);
-
-  // Trailing quote.
-  buffer[pos++] = '\"';
-
-  if (print_len < escaped_len) {
-    buffer[pos++] = '.';
-    buffer[pos++] = '.';
-    buffer[pos++] = '.';
+  intptr_t aligned_limit = max_len;
+  if (Utf16::IsLeadSurrogate(CharAt(max_len - 1))) {
+    // Don't let truncation split a surrogate pair.
+    aligned_limit--;
   }
-  ASSERT(pos <= buffer_len);
-  buffer[pos++] = '\0';
+  ASSERT(!Utf16::IsLeadSurrogate(CharAt(aligned_limit - 1)));
 
-  return buffer;
+  *did_truncate = true;
+  const String& truncated =
+      String::Handle(String::SubString(*this, 0, aligned_limit));
+  return truncated.ToCString(length);
 }
 
 
@@ -17162,11 +17801,24 @@
     jsobj.AddProperty("valueAsString", "<optimized out>");
     return;
   }
+  AddTypeProperties(&jsobj, "String", JSONType(), ref);
   PrintSharedInstanceJSON(&jsobj, ref);
   ObjectIdRing* ring = Isolate::Current()->object_id_ring();
   const intptr_t id = ring->GetIdForObject(raw());
   jsobj.AddPropertyF("id", "objects/%" Pd "", id);
-  jsobj.AddProperty("valueAsString", ToUserCString(1024));
+  if (ref) {
+    bool did_truncate = false;
+    intptr_t length = 0;
+    const char* cstr = ToCStringTruncated(128, &did_truncate, &length);
+    jsobj.AddProperty("valueAsString", cstr, length);
+    if (did_truncate) {
+      jsobj.AddProperty("valueAsStringIsTruncated", did_truncate);
+    }
+  } else {
+    intptr_t length = 0;
+    const char* cstr = ToCString(&length);
+    jsobj.AddProperty("valueAsString", cstr, length);
+  }
 }
 
 
@@ -18031,10 +18683,11 @@
 void Bool::PrintJSONImpl(JSONStream* stream, bool ref) const {
   const char* str = ToCString();
   JSONObject jsobj(stream);
-  jsobj.AddProperty("type", JSONType(ref));
+  // Suppress the fact that the internal vm name for this type is
+  // "Bool".  Return "bool" instead.
+  AddTypeProperties(&jsobj, "bool", "bool", ref);
+  PrintSharedInstanceJSON(&jsobj, ref);
   jsobj.AddPropertyF("id", "objects/bool-%s", str);
-  const Class& cls = Class::Handle(this->clazz());
-  jsobj.AddProperty("class", cls);
   jsobj.AddPropertyF("valueAsString", "%s", str);
 }
 
@@ -18097,6 +18750,32 @@
 }
 
 
+RawArray* Array::Slice(intptr_t start,
+                       intptr_t count,
+                       bool with_type_argument) const {
+  // TODO(vegorov) introduce an array allocation method that fills newly
+  // allocated array with values from the given source array instead of
+  // null-initializing all elements.
+  Array& dest = Array::Handle(Array::New(count));
+  if (dest.raw()->IsNewObject()) {
+    NoGCScope no_gc_scope;
+    memmove(dest.ObjectAddr(0), ObjectAddr(start), count * kWordSize);
+  } else {
+    PassiveObject& obj = PassiveObject::Handle();
+    for (intptr_t i = 0; i < count; i++) {
+      obj = At(start + i);
+      dest.SetAt(i, obj);
+    }
+  }
+
+  if (with_type_argument) {
+    dest.SetTypeArguments(TypeArguments::Handle(GetTypeArguments()));
+  }
+
+  return dest.raw();
+}
+
+
 void Array::MakeImmutable() const {
   NoGCScope no_gc;
   uword tags = raw_ptr()->tags_;
@@ -18126,6 +18805,7 @@
 
 void Array::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
+  AddTypeProperties(&jsobj, "List", JSONType(), ref);
   PrintSharedInstanceJSON(&jsobj, ref);
   ObjectIdRing* ring = Isolate::Current()->object_id_ring();
   const intptr_t id = ring->GetIdForObject(raw());
@@ -18370,6 +19050,7 @@
 void GrowableObjectArray::PrintJSONImpl(JSONStream* stream,
                                         bool ref) const {
   JSONObject jsobj(stream);
+  AddTypeProperties(&jsobj, "List", JSONType(), ref);
   PrintSharedInstanceJSON(&jsobj, ref);
   ObjectIdRing* ring = Isolate::Current()->object_id_ring();
   const intptr_t id = ring->GetIdForObject(raw());
@@ -18414,6 +19095,7 @@
     if (hash_code.IsSmi()) {
       // May waste some bits on 64-bit, to ensure consistency with non-Smi case.
       return static_cast<uword>(Smi::Cast(hash_code).Value() & 0xFFFFFFFF);
+      // TODO(regis): Same as Smi::AsTruncatedUint32Value(), simplify?
     } else if (hash_code.IsInteger()) {
       return static_cast<uword>(
           Integer::Cast(hash_code).AsTruncatedUint32Value());
@@ -18856,6 +19538,32 @@
 };
 
 
+bool TypedData::CanonicalizeEquals(const Instance& other) const {
+  if (this->raw() == other.raw()) {
+    // Both handles point to the same raw instance.
+    return true;
+  }
+
+  if (!other.IsTypedData() || other.IsNull()) {
+    return false;
+  }
+
+  const TypedData& other_typed_data = TypedData::Cast(other);
+
+  if (this->ElementType() != other_typed_data.ElementType()) {
+    return false;
+  }
+
+  const intptr_t len = this->LengthInBytes();
+  if (len != other_typed_data.LengthInBytes()) {
+    return false;
+  }
+
+  return (len == 0) ||
+      (memcmp(DataAddr(0), other_typed_data.DataAddr(0), len) == 0);
+}
+
+
 RawTypedData* TypedData::New(intptr_t class_id,
                              intptr_t len,
                              Heap::Space space) {
@@ -18864,7 +19572,7 @@
   }
   TypedData& result = TypedData::Handle();
   {
-    intptr_t lengthInBytes = len * ElementSizeInBytes(class_id);
+    const intptr_t lengthInBytes = len * ElementSizeInBytes(class_id);
     RawObject* raw = Object::Allocate(class_id,
                                       TypedData::InstanceSize(lengthInBytes),
                                       space);
@@ -19356,7 +20064,7 @@
 
 
 const char* JSRegExp::Flags() const {
-  switch (raw_ptr()->flags_) {
+  switch (flags()) {
     case kGlobal | kIgnoreCase | kMultiLine :
     case kIgnoreCase | kMultiLine :
       return "im";
@@ -19428,7 +20136,21 @@
 
 
 void WeakProperty::PrintJSONImpl(JSONStream* stream, bool ref) const {
-  Instance::PrintJSONImpl(stream, ref);
+  JSONObject jsobj(stream);
+  AddTypeProperties(&jsobj, "Instance", JSONType(), ref);
+  PrintSharedInstanceJSON(&jsobj, ref);
+  ObjectIdRing* ring = Isolate::Current()->object_id_ring();
+  const intptr_t id = ring->GetIdForObject(raw());
+  jsobj.AddPropertyF("id", "objects/%" Pd "", id);
+
+  if (ref) {
+    return;
+  }
+
+  const Object& key_handle = Object::Handle(key());
+  jsobj.AddProperty("key", key_handle);
+  const Object& value_handle = Object::Handle(value());
+  jsobj.AddProperty("value", value_handle);
 }
 
 RawAbstractType* MirrorReference::GetAbstractTypeReferent() const {
@@ -19488,7 +20210,19 @@
 
 
 void MirrorReference::PrintJSONImpl(JSONStream* stream, bool ref) const {
-  Instance::PrintJSONImpl(stream, ref);
+  JSONObject jsobj(stream);
+  AddTypeProperties(&jsobj, "Instance", JSONType(), ref);
+  PrintSharedInstanceJSON(&jsobj, ref);
+  ObjectIdRing* ring = Isolate::Current()->object_id_ring();
+  const intptr_t id = ring->GetIdForObject(raw());
+  jsobj.AddPropertyF("id", "objects/%" Pd "", id);
+
+  if (ref) {
+    return;
+  }
+
+  const Object& referent_handle = Object::Handle(referent());
+  jsobj.AddProperty("referent", referent_handle);
 }
 
 
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 1fd8132..7fcebdb 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -136,8 +136,8 @@
   /* Object is printed as JSON into stream. If ref is true only a header */    \
   /* with an object id is printed. If ref is false the object is fully   */    \
   /* printed.                                                            */    \
-  virtual const char* JSONType(bool ref) const {                               \
-    return ref ? "@"#object : ""#object;                                       \
+  virtual const char* JSONType() const {                                       \
+    return ""#object;                                                          \
   }                                                                            \
   static const ClassId kClassId = k##object##Cid;                              \
  protected:  /* NOLINT */                                                      \
@@ -281,7 +281,7 @@
 
   void PrintJSON(JSONStream* stream, bool ref = true) const;
 
-  virtual const char* JSONType(bool ref) const {
+  virtual const char* JSONType() const {
     return IsNull() ? "null" : "Object";
   }
 
@@ -1030,6 +1030,7 @@
   RawFunction* LookupConstructor(const String& name) const;
   RawFunction* LookupConstructorAllowPrivate(const String& name) const;
   RawFunction* LookupFactory(const String& name) const;
+  RawFunction* LookupFactoryAllowPrivate(const String& name) const;
   RawFunction* LookupFunction(const String& name) const;
   RawFunction* LookupFunctionAllowPrivate(const String& name) const;
   RawFunction* LookupGetterFunction(const String& name) const;
@@ -3012,7 +3013,7 @@
     return reinterpret_cast<uword>(raw_ptr()) + HeaderSize();
   }
 
-  static const intptr_t kMaxElements = (kIntptrMax -
+  static const intptr_t kMaxElements = (kMaxInt32 -
                                         (sizeof(RawInstructions) +
                                          sizeof(RawObject) +
                                          (2 * OS::kMaxPreferredCodeAlignment)));
@@ -3078,7 +3079,7 @@
 
   static const intptr_t kBytesPerElement =
       sizeof(RawLocalVarDescriptors::VarInfo);
-  static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
+  static const intptr_t kMaxElements = RawLocalVarDescriptors::kMaxIndex;
 
   static intptr_t InstanceSize() {
     ASSERT(sizeof(RawLocalVarDescriptors) ==
@@ -3093,6 +3094,8 @@
 
   static RawLocalVarDescriptors* New(intptr_t num_variables);
 
+  static const char* KindToStr(intptr_t kind);
+
  private:
   FINAL_HEAP_OBJECT_IMPLEMENTATION(LocalVarDescriptors, Object);
   friend class Class;
@@ -3123,7 +3126,7 @@
 
   static const intptr_t kMaxBytesPerElement =
       sizeof(RawPcDescriptors::PcDescriptorRec);
-  static const intptr_t kMaxElements = kSmiMax / kMaxBytesPerElement;
+  static const intptr_t kMaxElements = kMaxInt32 / kMaxBytesPerElement;
 
   static intptr_t InstanceSize() {
     ASSERT(sizeof(RawPcDescriptors) ==
@@ -3146,7 +3149,7 @@
 
   static void PrintHeaderString();
 
-  void PrintToJSONObject(JSONObject* jsobj) const;
+  void PrintToJSONObject(JSONObject* jsobj, bool ref) const;
 
   // We would have a VisitPointers function here to traverse the
   // pc descriptors table to visit objects if any in the table.
@@ -3251,11 +3254,15 @@
 
   intptr_t Length() const { return raw_ptr()->length_; }
 
-  uword PC() const { return raw_ptr()->pc_; }
-  void SetPC(uword value) const { raw_ptr()->pc_ = value; }
+  uint32_t PcOffset() const { return raw_ptr()->pc_offset_; }
+  void SetPcOffset(uint32_t value) const {
+    ASSERT(value <= kMaxUint32);
+    raw_ptr()->pc_offset_ = value;
+  }
 
   intptr_t RegisterBitCount() const { return raw_ptr()->register_bit_count_; }
   void SetRegisterBitCount(intptr_t register_bit_count) const {
+    ASSERT(register_bit_count < kMaxInt32);
     raw_ptr()->register_bit_count_ = register_bit_count;
   }
 
@@ -3501,9 +3508,6 @@
   // possibly issue) a Javascript compatibility warning.
   bool MayCheckForJSWarning() const;
 
-  bool IsClosureCall() const;
-  void SetIsClosureCall() const;
-
   intptr_t NumberOfChecks() const;
 
   // Discounts any checks with usage of zero.
@@ -3634,7 +3638,6 @@
     kDeoptReasonPos = kNumArgsTestedPos + kNumArgsTestedSize,
     kDeoptReasonSize = kDeoptNumReasons,
     kIssuedJSWarningBit = kDeoptReasonPos + kDeoptReasonSize,
-    kIsClosureCallBit = kIssuedJSWarningBit + 1,
   };
 
   class NumArgsTestedBits : public BitField<uint32_t,
@@ -3642,7 +3645,6 @@
   class DeoptReasonBits : public BitField<uint32_t,
       ICData::kDeoptReasonPos, ICData::kDeoptReasonSize> {};  // NOLINT
   class IssuedJSWarningBit : public BitField<bool, kIssuedJSWarningBit, 1> {};
-  class IsClosureCallBit : public BitField<bool, kIsClosureCallBit, 1> {};
 
 #if defined(DEBUG)
   // Used in asserts to verify that a check is not added twice.
@@ -3664,7 +3666,7 @@
     return OFFSET_OF(RawCode, instructions_);
   }
   intptr_t pointer_offsets_length() const {
-    return raw_ptr()->pointer_offsets_length_;
+    return PtrOffBits::decode(raw_ptr()->state_bits_);
   }
 
   bool is_optimized() const {
@@ -3720,7 +3722,8 @@
     return raw_ptr()->stackmaps_;
   }
   void set_stackmaps(const Array& maps) const;
-  RawStackmap* GetStackmap(uword pc, Array* stackmaps, Stackmap* map) const;
+  RawStackmap* GetStackmap(
+      uint32_t pc_offset, Array* stackmaps, Stackmap* map) const;
 
   enum {
     kSCallTableOffsetEntry = 0,
@@ -3894,14 +3897,18 @@
  private:
   void set_state_bits(intptr_t bits) const;
 
+  friend class RawObject;  // For RawObject::SizeFromClass().
   friend class RawCode;
   enum {
     kOptimizedBit = 0,
     kAliveBit = 1,
+    kPtrOffBit = 2,
+    kPtrOffSize = 30,
   };
 
   class OptimizedBit : public BitField<bool, kOptimizedBit, 1> {};
   class AliveBit : public BitField<bool, kAliveBit, 1> {};
+  class PtrOffBits : public BitField<intptr_t, kPtrOffBit, kPtrOffSize> {};
 
   // An object finder visitor interface.
   class FindRawCodeVisitor : public FindObjectVisitor {
@@ -3932,9 +3939,11 @@
     // store buffer update is not needed here.
     raw_ptr()->instructions_ = instructions;
   }
+
   void set_pointer_offsets_length(intptr_t value) {
-    ASSERT(value >= 0);
-    raw_ptr()->pointer_offsets_length_ = value;
+    // The number of fixups is limited to 1-billion.
+    ASSERT(Utils::IsUint(30, value));
+    set_state_bits(PtrOffBits::update(value, raw_ptr()->state_bits_));
   }
   int32_t* PointerOffsetAddrAt(int index) const {
     ASSERT(index >= 0);
@@ -5110,8 +5119,8 @@
 class Integer : public Number {
  public:
   static RawInteger* New(const String& str, Heap::Space space = Heap::kNew);
-  static RawInteger* NewFromUint64(
-      uint64_t value, Heap::Space space = Heap::kNew);
+  static RawInteger* NewFromUint64(uint64_t value,
+                                   Heap::Space space = Heap::kNew);
 
   // Returns a canonical Integer object allocated in the old gen space.
   static RawInteger* NewCanonical(const String& str);
@@ -5127,33 +5136,26 @@
   virtual bool CanonicalizeEquals(const Instance& other) const {
     return Equals(other);
   }
-  virtual bool Equals(const Instance& other) const {
-    UNREACHABLE();
-    return false;
-  }
+  virtual bool Equals(const Instance& other) const;
 
   virtual RawObject* HashCode() const { return raw(); }
 
-  // Integer is an abstract class.
-  virtual bool IsZero() const {
-    UNREACHABLE();
-    return false;
-  }
-  virtual bool IsNegative() const {
-    // Number is an abstract class.
-    UNREACHABLE();
-    return false;
-  }
+  virtual bool IsZero() const;
+  virtual bool IsNegative() const;
+
   virtual double AsDoubleValue() const;
   virtual int64_t AsInt64Value() const;
   virtual uint32_t AsTruncatedUint32Value() const;
 
+  virtual bool FitsIntoSmi() const;
+
   // Returns 0, -1 or 1.
   virtual int CompareWith(const Integer& other) const;
 
   // Return the most compact presentation of an integer.
   RawInteger* AsValidInteger() const;
 
+  // Returns null to indicate that a bigint operation is required.
   RawInteger* ArithmeticOp(Token::Kind operation, const Integer& other) const;
   RawInteger* BitOp(Token::Kind operation, const Integer& other) const;
 
@@ -5161,9 +5163,6 @@
   bool CheckJavascriptIntegerOverflow() const;
 
  private:
-  // Return an integer in the form of a RawBigint.
-  RawBigint* AsBigint() const;
-
   OBJECT_IMPLEMENTATION(Integer, Number);
   friend class Class;
 };
@@ -5191,6 +5190,8 @@
   virtual int64_t AsInt64Value() const;
   virtual uint32_t AsTruncatedUint32Value() const;
 
+  virtual bool FitsIntoSmi() const { return true; }
+
   virtual int CompareWith(const Integer& other) const;
 
   static intptr_t InstanceSize() { return 0; }
@@ -5277,6 +5278,8 @@
   virtual int64_t AsInt64Value() const;
   virtual uint32_t AsTruncatedUint32Value() const;
 
+  virtual bool FitsIntoSmi() const;
+
   virtual int CompareWith(const Integer& other) const;
 
   static intptr_t InstanceSize() {
@@ -5300,15 +5303,9 @@
 
 
 class Bigint : public Integer {
- private:
-  typedef uint32_t Chunk;
-  typedef uint64_t DoubleChunk;
-  static const int kChunkSize = sizeof(Chunk);
-
  public:
-  virtual bool IsZero() const { return raw_ptr()->signed_length_ == 0; }
-  virtual bool IsNegative() const { return raw_ptr()->signed_length_ < 0; }
-
+  virtual bool IsZero() const { return Used() == 0;}
+  virtual bool IsNegative() const { return Neg(); }
   virtual bool Equals(const Instance& other) const;
 
   virtual double AsDoubleValue() const;
@@ -5317,71 +5314,79 @@
 
   virtual int CompareWith(const Integer& other) const;
 
-  static const intptr_t kBytesPerElement = kChunkSize;
-  static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
+  virtual bool CheckAndCanonicalizeFields(const char** error_str) const;
 
-  static intptr_t InstanceSize() { return 0; }
+  virtual bool FitsIntoSmi() const;
+  bool FitsIntoInt64() const;
+  bool FitsIntoUint64() const;
+  uint64_t AsUint64Value() const;
 
-  static intptr_t InstanceSize(intptr_t len) {
-    ASSERT(0 <= len && len <= kMaxElements);
-    return RoundedAllocationSize(sizeof(RawBigint) + (len * kBytesPerElement));
+  static intptr_t InstanceSize() {
+    return RoundedAllocationSize(sizeof(RawBigint));
   }
 
- protected:
-  // Only Integer::NewXXX is allowed to call Bigint::NewXXX directly.
-  friend class Integer;
+  // Accessors used by native calls from Dart.
+  RawBool* neg() const { return raw_ptr()->neg_; }
+  void set_neg(const Bool& value) const;
+  static intptr_t neg_offset() { return OFFSET_OF(RawBigint, neg_); }
+  RawSmi* used() const { return raw_ptr()->used_; }
+  void set_used(const Smi& value) const;
+  static intptr_t used_offset() { return OFFSET_OF(RawBigint, used_); }
+  RawTypedData* digits() const { return raw_ptr()->digits_; }
+  void set_digits(const TypedData& value) const;
+  static intptr_t digits_offset() { return OFFSET_OF(RawBigint, digits_); }
 
-  RawBigint* BigArithmeticOp(Token::Kind operation, const Bigint& other) const;
+  // Accessors used by runtime calls from C++.
+  bool Neg() const;
+  void SetNeg(bool value) const;
+  intptr_t Used() const;
+  void SetUsed(intptr_t value) const;
+  uint32_t DigitAt(intptr_t index) const;
+  void SetDigitAt(intptr_t index, uint32_t value) const;
 
-  static RawBigint* New(const String& str, Heap::Space space = Heap::kNew);
+  const char* ToDecCString(uword (*allocator)(intptr_t size)) const;
+  const char* ToHexCString(uword (*allocator)(intptr_t size)) const;
+
+  static const intptr_t kExtraDigits = 4;  // Same as _Bigint.EXTRA_DIGITS
+  static const intptr_t kBitsPerDigit = 32;  // Same as _Bigint.DIGIT_BITS
+  static const int64_t kDigitBase = 1LL << kBitsPerDigit;
+  static const int64_t kDigitMask = kDigitBase - 1;
+
+  static RawBigint* New(Heap::Space space = Heap::kNew);
+
+  static RawBigint* NewFromInt64(int64_t value,
+                                  Heap::Space space = Heap::kNew);
+
+  static RawBigint* NewFromUint64(uint64_t value,
+                                   Heap::Space space = Heap::kNew);
+
+  static RawBigint* NewFromShiftedInt64(int64_t value, intptr_t shift,
+                                         Heap::Space space = Heap::kNew);
+
+  static RawBigint* NewFromCString(const char* str,
+                                    Heap::Space space = Heap::kNew);
 
   // Returns a canonical Bigint object allocated in the old gen space.
   static RawBigint* NewCanonical(const String& str);
 
  private:
-  Chunk GetChunkAt(intptr_t i) const {
-    return *ChunkAddr(i);
-  }
+  static RawBigint* NewFromHexCString(const char* str,
+                                       Heap::Space space = Heap::kNew);
+  static RawBigint* NewFromDecCString(const char* str,
+                                       Heap::Space space = Heap::kNew);
 
-  void SetChunkAt(intptr_t i, Chunk newValue) const {
-    *ChunkAddr(i) = newValue;
-  }
+  // Make sure at least 'length' _digits are allocated.
+  // Copy existing _digits if reallocation is necessary.
+  void EnsureLength(intptr_t length, Heap::Space space = Heap::kNew) const;
 
-  // Returns the number of chunks in use.
-  intptr_t Length() const {
-    intptr_t signed_length = raw_ptr()->signed_length_;
-    return Utils::Abs(signed_length);
-  }
+  // Do not count zero high digits as used.
+  void Clamp() const;
 
-  // SetLength does not change the sign.
-  void SetLength(intptr_t length) const {
-    ASSERT(length >= 0);
-    bool is_negative = IsNegative();
-    raw_ptr()->signed_length_ = length;
-    if (is_negative) ToggleSign();
-  }
-
-  void SetSign(bool is_negative) const {
-    if (is_negative != IsNegative()) {
-      ToggleSign();
-    }
-  }
-
-  void ToggleSign() const {
-    raw_ptr()->signed_length_ = -raw_ptr()->signed_length_;
-  }
-
-  Chunk* ChunkAddr(intptr_t index) const {
-    ASSERT(0 <= index);
-    ASSERT(index < Length());
-    uword digits_start = reinterpret_cast<uword>(raw_ptr()) + sizeof(RawBigint);
-    return &(reinterpret_cast<Chunk*>(digits_start)[index]);
-  }
+  bool IsClamped() const;
 
   static RawBigint* Allocate(intptr_t length, Heap::Space space = Heap::kNew);
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(Bigint, Integer);
-  friend class BigintOperations;
   friend class Class;
 };
 
@@ -5578,8 +5583,15 @@
 
   void ToUTF8(uint8_t* utf8_array, intptr_t array_len) const;
 
-  // Produces a quoted, escaped, (possibly) truncated string.
-  const char* ToUserCString(intptr_t max_len) const;
+  // Creates a UTF-8, NUL-terminated string in the current zone. The size of the
+  // created string in UTF-8 code units (bytes) is answered in 'length'; this
+  // can be longer than strlen of the result when the string has internal NULs.
+  // For the truncating version, 'max_length' is in UTF-16 code units, and will
+  // be rounded down if necessary to prevent splitting a surrogate pair.
+  const char* ToCString(intptr_t *length) const;
+  const char* ToCStringTruncated(intptr_t max_len,
+                                 bool* did_truncate,
+                                 intptr_t *length) const;
 
   // Copies the string characters into the provided external array
   // and morphs the string object into an external string object.
@@ -5725,9 +5737,6 @@
                            CallbackType new_symbol,
                            Snapshot::Kind kind);
 
-  intptr_t EscapedString(char* buffer, int max_len) const;
-  intptr_t EscapedStringLen(intptr_t tooLong) const;
-
   FINAL_HEAP_OBJECT_IMPLEMENTATION(String, Instance);
 
   friend class Class;
@@ -6242,6 +6251,10 @@
   // set to an empty array.
   static RawArray* MakeArray(const GrowableObjectArray& growable_array);
 
+  RawArray* Slice(intptr_t start,
+                  intptr_t count,
+                  bool with_type_argument) const;
+
  protected:
   static RawArray* New(intptr_t class_id,
                        intptr_t len,
@@ -6591,6 +6604,8 @@
     return reinterpret_cast<void*>(raw_ptr()->data() + byte_offset);
   }
 
+  virtual bool CanonicalizeEquals(const Instance& other) const;
+
 #define TYPED_GETTER_SETTER(name, type)                                        \
   type Get##name(intptr_t byte_offset) const {                                 \
     return *reinterpret_cast<type*>(DataAddr(byte_offset));                    \
@@ -7102,8 +7117,8 @@
   // kComplex: A complex pattern to match.
   enum RegExType {
     kUnitialized = 0,
-    kSimple,
-    kComplex,
+    kSimple = 1,
+    kComplex = 2,
   };
 
   // Flags are passed to a regex object as follows:
@@ -7115,13 +7130,23 @@
     kMultiLine = 4,
   };
 
-  bool is_initialized() const { return (raw_ptr()->type_ != kUnitialized); }
-  bool is_simple() const { return (raw_ptr()->type_ == kSimple); }
-  bool is_complex() const { return (raw_ptr()->type_ == kComplex); }
+  enum {
+    kTypePos = 0,
+    kTypeSize = 2,
+    kFlagsPos = 2,
+    kFlagsSize = 4,
+  };
 
-  bool is_global() const { return (raw_ptr()->flags_ & kGlobal); }
-  bool is_ignore_case() const { return (raw_ptr()->flags_ & kIgnoreCase); }
-  bool is_multi_line() const { return (raw_ptr()->flags_ & kMultiLine); }
+  class TypeBits : public BitField<RegExType, kTypePos, kTypeSize> {};
+  class FlagsBits : public BitField<intptr_t, kFlagsPos, kFlagsSize> {};
+
+  bool is_initialized() const { return (type() != kUnitialized); }
+  bool is_simple() const { return (type() == kSimple); }
+  bool is_complex() const { return (type() == kComplex); }
+
+  bool is_global() const { return (flags() & kGlobal); }
+  bool is_ignore_case() const { return (flags() & kIgnoreCase); }
+  bool is_multi_line() const { return (flags() & kMultiLine); }
 
   RawString* pattern() const { return raw_ptr()->pattern_; }
   RawSmi* num_bracket_expressions() const {
@@ -7130,11 +7155,11 @@
 
   void set_pattern(const String& pattern) const;
   void set_num_bracket_expressions(intptr_t value) const;
-  void set_is_global() const { raw_ptr()->flags_ |= kGlobal; }
-  void set_is_ignore_case() const { raw_ptr()->flags_ |= kIgnoreCase; }
-  void set_is_multi_line() const { raw_ptr()->flags_ |= kMultiLine; }
-  void set_is_simple() const { raw_ptr()->type_ = kSimple; }
-  void set_is_complex() const { raw_ptr()->type_ = kComplex; }
+  void set_is_global() const { set_flags(flags() | kGlobal); }
+  void set_is_ignore_case() const { set_flags(flags() | kIgnoreCase); }
+  void set_is_multi_line() const { set_flags(flags() | kMultiLine); }
+  void set_is_simple() const { set_type(kSimple); }
+  void set_is_complex() const { set_type(kComplex); }
 
   void* GetDataStartAddress() const;
   static RawJSRegExp* FromDataStartAddress(void* data);
@@ -7159,8 +7184,19 @@
   static RawJSRegExp* New(intptr_t length, Heap::Space space = Heap::kNew);
 
  private:
-  void set_type(RegExType type) const { raw_ptr()->type_ = type; }
-  void set_flags(intptr_t value) const { raw_ptr()->flags_ = value; }
+  void set_type(RegExType type) const {
+    raw_ptr()->type_flags_ = TypeBits::update(type, raw_ptr()->type_flags_);
+  }
+  void set_flags(intptr_t value) const {
+    raw_ptr()->type_flags_ = FlagsBits::update(value, raw_ptr()->type_flags_);
+  }
+
+  RegExType type() const {
+    return TypeBits::decode(raw_ptr()->type_flags_);
+  }
+  intptr_t flags() const {
+    return FlagsBits::decode(raw_ptr()->type_flags_);
+  }
 
   void SetLength(intptr_t value) const {
     // This is only safe because we create a new Smi, which does not cause
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc
index 6a236e1..80b07f7 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -28,7 +28,6 @@
     integer_implementation_class_(Class::null()),
     smi_class_(Class::null()),
     mint_class_(Class::null()),
-    bigint_class_(Class::null()),
     double_class_(Class::null()),
     float32x4_type_(Type::null()),
     int32x4_type_(Type::null()),
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 223d99e..f67f91b 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -5,7 +5,6 @@
 #include "platform/globals.h"
 
 #include "vm/assembler.h"
-#include "vm/bigint_operations.h"
 #include "vm/class_finalizer.h"
 #include "vm/dart_api_impl.h"
 #include "vm/dart_entry.h"
@@ -346,9 +345,9 @@
   EXPECT_EQ(-1, c.CompareWith(mint1));
   EXPECT_EQ(1, c.CompareWith(mint2));
 
-  Bigint& big1 = Bigint::Handle(BigintOperations::NewFromCString(
+  Bigint& big1 = Bigint::Handle(Bigint::NewFromCString(
       "10000000000000000000"));
-  Bigint& big2 = Bigint::Handle(BigintOperations::NewFromCString(
+  Bigint& big2 = Bigint::Handle(Bigint::NewFromCString(
       "-10000000000000000000"));
   EXPECT_EQ(-1, a.CompareWith(big1));
   EXPECT_EQ(1, a.CompareWith(big2));
@@ -509,9 +508,9 @@
   EXPECT_EQ(-1, c.CompareWith(smi1));
   EXPECT_EQ(-1, c.CompareWith(smi2));
 
-  Bigint& big1 = Bigint::Handle(BigintOperations::NewFromCString(
+  Bigint& big1 = Bigint::Handle(Bigint::NewFromCString(
       "10000000000000000000"));
-  Bigint& big2 = Bigint::Handle(BigintOperations::NewFromCString(
+  Bigint& big2 = Bigint::Handle(Bigint::NewFromCString(
       "-10000000000000000000"));
   EXPECT_EQ(-1, a.CompareWith(big1));
   EXPECT_EQ(1, a.CompareWith(big2));
@@ -625,17 +624,16 @@
   EXPECT_STREQ(cstr, str);
 
   int64_t t64 = DART_2PART_UINT64_C(1, 0);
-  Bigint& big = Bigint::Handle();
-  big = BigintOperations::NewFromInt64(t64);
+  Bigint& big = Bigint::Handle(Bigint::NewFromInt64(t64));
   EXPECT_EQ(t64, big.AsInt64Value());
-  big = BigintOperations::NewFromCString("10000000000000000000");
+  big = Bigint::NewFromCString("10000000000000000000");
   EXPECT_EQ(1e19, big.AsDoubleValue());
 
-  Bigint& big1 = Bigint::Handle(BigintOperations::NewFromCString(
+  Bigint& big1 = Bigint::Handle(Bigint::NewFromCString(
       "100000000000000000000"));
-  Bigint& big2 = Bigint::Handle(BigintOperations::NewFromCString(
+  Bigint& big2 = Bigint::Handle(Bigint::NewFromCString(
       "100000000000000000010"));
-  Bigint& big3 = Bigint::Handle(BigintOperations::NewFromCString(
+  Bigint& big3 = Bigint::Handle(Bigint::NewFromCString(
       "-10000000000000000000"));
 
   EXPECT_EQ(0, big1.CompareWith(big1));
@@ -4111,71 +4109,66 @@
 }
 
 
-TEST_CASE(ToUserCString) {
+TEST_CASE(ToCStringTruncated) {
   const char* kScriptChars =
-      "var simple = 'simple';\n"
-      "var escapes = 'stuff\\n\\r\\f\\b\\t\\v\\'\"\\$stuff';\n"
-      "var uescapes = 'stuff\\u0001\\u0002stuff';\n"
-      "var toolong = "
-      "'01234567890123456789012345678901234567890123456789howdy';\n"
-      "var toolong2 = "
-      "'0123456789012345678901234567890123\\t567890123456789howdy';\n"
-      "var toolong3 = "
-      "'012345678901234567890123456789\\u0001567890123456789howdy';\n";
+      "var ascii = 'Hello, World!';\n"
+      "var unicode = '\\u00CE\\u00F1\\u0163\\u00E9r\\u00F1\\u00E5\\u0163"
+      "\\u00EE\\u00F6\\u00F1\\u00E5\\u013C\\u00EE\\u017E\\u00E5\\u0163"
+      "\\u00EE\\u1EDD\\u00F1';\n"
+      "var surrogates ='\\u{1D11E}\\u{1D11E}\\u{1D11E}\\u{1D11E}"\
+      "\\u{1D11E}';\n";
+
   Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
   EXPECT_VALID(lib);
 
   String& obj = String::Handle();
   Dart_Handle result;
+  bool did_truncate;
+  intptr_t length;
 
-  // Simple string.
-  result = Dart_GetField(lib, NewString("simple"));
+  result = Dart_GetField(lib, NewString("ascii"));
   EXPECT_VALID(result);
   obj ^= Api::UnwrapHandle(result);
-  EXPECT_STREQ("\"simple\"", obj.ToUserCString(40));
+  EXPECT_STREQ("Hello, World!",
+               obj.ToCStringTruncated(100, &did_truncate, &length));
+  EXPECT(!did_truncate);
+  EXPECT_EQ(13, length);
+  EXPECT_STREQ("Hel", obj.ToCStringTruncated(3, &did_truncate, &length));
+  EXPECT(did_truncate);
+  EXPECT_EQ(3, length);
 
-  // Escaped chars.
-  result = Dart_GetField(lib, NewString("escapes"));
+  result = Dart_GetField(lib, NewString("unicode"));
   EXPECT_VALID(result);
   obj ^= Api::UnwrapHandle(result);
-  EXPECT_STREQ("\"stuff\\n\\r\\f\\b\\t\\v'\\\"\\$stuff\"",
-               obj.ToUserCString(40));
+  EXPECT_STREQ("\u00CE\u00F1\u0163\u00E9r\u00F1\u00E5\u0163"
+        "\u00EE\u00F6\u00F1\u00E5\u013C\u00EE\u017E\u00E5\u0163"
+        "\u00EE\u1EDD\u00F1",
+        obj.ToCStringTruncated(100, &did_truncate, &length));
+  EXPECT(!did_truncate);
+  EXPECT_EQ(40, length);
+  EXPECT_STREQ("\u00CE\u00F1\u0163",
+               obj.ToCStringTruncated(3, &did_truncate, &length));
+  EXPECT(did_truncate);
+  EXPECT_EQ(6, length);
 
-  // U-escaped chars.
-  result = Dart_GetField(lib, NewString("uescapes"));
+  result = Dart_GetField(lib, NewString("surrogates"));
   EXPECT_VALID(result);
   obj ^= Api::UnwrapHandle(result);
-  EXPECT_STREQ("\"stuff\\u0001\\u0002stuff\"", obj.ToUserCString(40));
-
-  // Truncation.
-  result = Dart_GetField(lib, NewString("toolong"));
-  EXPECT_VALID(result);
-  obj ^= Api::UnwrapHandle(result);
-  EXPECT_STREQ("\"01234567890123456789012345678901234\"...",
-               obj.ToUserCString(40));
-
-  // Truncation, shorter.
-  result = Dart_GetField(lib, NewString("toolong"));
-  EXPECT_VALID(result);
-  obj ^= Api::UnwrapHandle(result);
-  EXPECT_STREQ("\"01234\"...", obj.ToUserCString(10));
-
-  // Truncation, limit is in escape.
-  result = Dart_GetField(lib, NewString("toolong2"));
-  EXPECT_VALID(result);
-  obj ^= Api::UnwrapHandle(result);
-  EXPECT_STREQ("\"0123456789012345678901234567890123\"...",
-               obj.ToUserCString(40));
-
-  // Truncation, limit is in u-escape
-  result = Dart_GetField(lib, NewString("toolong3"));
-  EXPECT_VALID(result);
-  obj ^= Api::UnwrapHandle(result);
-  EXPECT_STREQ("\"012345678901234567890123456789\"...",
-               obj.ToUserCString(40));
+  EXPECT_STREQ("\U0001D11E\U0001D11E\U0001D11E\U0001D11E\U0001D11E",
+               obj.ToCStringTruncated(100, &did_truncate, &length));
+  EXPECT(!did_truncate);
+  EXPECT_EQ(20, length);
+  EXPECT_STREQ("\U0001D11E",
+               obj.ToCStringTruncated(3, &did_truncate, &length));
+  EXPECT(did_truncate);
+  EXPECT_EQ(4, length);  // 3 code units would be in the middle of a surrogate
+                         // pair, so it gets rounded down 2 code units.
+  EXPECT_STREQ("\U0001D11E\U0001D11E",
+               obj.ToCStringTruncated(4, &did_truncate, &length));
+  EXPECT(did_truncate);
+  EXPECT_EQ(8, length);
 }
 
-
 class ObjectAccumulator : public ObjectVisitor {
  public:
   explicit ObjectAccumulator(GrowableArray<Object*>* objects)
@@ -4214,6 +4207,285 @@
 }
 
 
+// Elide a substring which starts with some prefix and ends with a ".
+//
+// This is used to remove non-deterministic or fragile substrings from
+// JSON output.
+//
+// For example:
+//
+//    prefix = "classes"
+//    in = "\"id\":\"classes/46\""
+//
+// Yields:
+//
+//    out = "\"id\":\"\""
+//
+static void elideSubstring(const char* prefix, const char* in, char* out) {
+  const char* pos = strstr(in, prefix);
+  while (pos != NULL) {
+    // Copy up to pos into the output buffer.
+    while (in < pos) {
+      *out++ = *in++;
+    }
+
+    // Skip to the close quote.
+    in += strcspn(in, "\"");
+    pos = strstr(in, prefix);
+  }
+  // Copy the remainder of in to out.
+  while (*in != '\0') {
+    *out++ = *in++;
+  }
+  *out = '\0';
+}
+
+
+TEST_CASE(PrintJSONPrimitives) {
+  char buffer[1024];
+  Isolate* isolate = Isolate::Current();
+
+  // Class reference
+  {
+    JSONStream js;
+    Class& cls = Class::Handle(isolate->object_store()->bool_class());
+    cls.PrintJSON(&js, true);
+    elideSubstring("classes", js.ToCString(), buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@Class\",\"id\":\"\",\"name\":\"bool\"}",
+        buffer);
+  }
+  // Function reference
+  {
+    JSONStream js;
+    Class& cls = Class::Handle(isolate->object_store()->bool_class());
+    const String& func_name = String::Handle(String::New("toString"));
+    Function& func = Function::Handle(cls.LookupFunction(func_name));
+    ASSERT(!func.IsNull());
+    func.PrintJSON(&js, true);
+    elideSubstring("classes", js.ToCString(), buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@Function\",\"id\":\"\",\"name\":\"toString\","
+        "\"owningClass\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"bool\"},"
+        "\"kind\":\"kRegularFunction\"}",
+        buffer);
+  }
+  // Library reference
+  {
+    JSONStream js;
+    Library& lib = Library::Handle(isolate->object_store()->core_library());
+    lib.PrintJSON(&js, true);
+    elideSubstring("libraries", js.ToCString(), buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@Library\",\"id\":\"\",\"name\":\"dart.core\","
+        "\"url\":\"dart:core\"}",
+        buffer);
+  }
+  // Bool reference
+  {
+    JSONStream js;
+    Bool::True().PrintJSON(&js, true);
+    elideSubstring("classes", js.ToCString(), buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@bool\","
+        "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"bool\"},"
+        "\"id\":\"objects\\/bool-true\",\"valueAsString\":\"true\"}",
+        buffer);
+  }
+  // Smi reference
+  {
+    JSONStream js;
+    const Integer& smi = Integer::Handle(Integer::New(7));
+    smi.PrintJSON(&js, true);
+    elideSubstring("classes", js.ToCString(), buffer);
+    elideSubstring("_Smi@", buffer, buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@int\",\"_vmType\":\"@Smi\","
+        "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Smi\","
+        "\"_vmName\":\"\"},"
+        "\"id\":\"objects\\/int-7\",\"valueAsString\":\"7\"}",
+        buffer);
+  }
+  // Mint reference
+  {
+    JSONStream js;
+    const Integer& smi = Integer::Handle(Integer::New(Mint::kMinValue));
+    smi.PrintJSON(&js, true);
+    elideSubstring("classes", js.ToCString(), buffer);
+    elideSubstring("objects", buffer, buffer);
+    elideSubstring("_Mint@", buffer, buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@int\",\"_vmType\":\"@Mint\","
+        "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Mint\","
+        "\"_vmName\":\"\"},"
+        "\"id\":\"\",\"valueAsString\":\"-9223372036854775808\"}",
+        buffer);
+  }
+  // Bigint reference
+  {
+    JSONStream js;
+    const String& bigint_str =
+        String::Handle(String::New("44444444444444444444444444444444"));
+    const Integer& bigint = Integer::Handle(Integer::New(bigint_str));
+    bigint.PrintJSON(&js, true);
+    elideSubstring("classes", js.ToCString(), buffer);
+    elideSubstring("objects", buffer, buffer);
+    elideSubstring("_Bigint@", buffer, buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@int\",\"_vmType\":\"@Bigint\","
+        "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Bigint\","
+        "\"_vmName\":\"\"},"
+        "\"id\":\"\",\"valueAsString\":\"44444444444444444444444444444444\"}",
+        buffer);
+  }
+  // Double reference
+  {
+    JSONStream js;
+    const Double& dub = Double::Handle(Double::New(0.1234));
+    dub.PrintJSON(&js, true);
+    elideSubstring("classes", js.ToCString(), buffer);
+    elideSubstring("objects", buffer, buffer);
+    elideSubstring("_Double@", buffer, buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@double\","
+        "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Double\","
+        "\"_vmName\":\"\"},"
+        "\"id\":\"\",\"valueAsString\":\"0.1234\"}",
+        buffer);
+  }
+  // String reference
+  {
+    JSONStream js;
+    const String& str = String::Handle(String::New("dw"));
+    str.PrintJSON(&js, true);
+    elideSubstring("classes", js.ToCString(), buffer);
+    elideSubstring("objects", buffer, buffer);
+    elideSubstring("_OneByteString@", buffer, buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@String\","
+        "\"class\":{\"type\":\"@Class\",\"id\":\"\","
+        "\"name\":\"_OneByteString\",\"_vmName\":\"\"},"
+        "\"id\":\"\",\"valueAsString\":\"dw\"}",
+        buffer);
+  }
+  // Array reference
+  {
+    JSONStream js;
+    const Array& array = Array::Handle(Array::New(0));
+    array.PrintJSON(&js, true);
+    elideSubstring("classes", js.ToCString(), buffer);
+    elideSubstring("objects", buffer, buffer);
+    elideSubstring("_List@", buffer, buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@List\",\"_vmType\":\"@Array\","
+        "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_List\","
+        "\"_vmName\":\"\"},"
+        "\"id\":\"\",\"length\":0}",
+        buffer);
+  }
+  // GrowableObjectArray reference
+  {
+    JSONStream js;
+    const GrowableObjectArray& array =
+        GrowableObjectArray::Handle(GrowableObjectArray::New());
+    array.PrintJSON(&js, true);
+    elideSubstring("classes", js.ToCString(), buffer);
+    elideSubstring("objects", buffer, buffer);
+    elideSubstring("_GrowableList@", buffer, buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@List\",\"_vmType\":\"@GrowableObjectArray\","
+        "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_GrowableList\","
+        "\"_vmName\":\"\"},\"id\":\"\",\"length\":0}",
+        buffer);
+  }
+  // LinkedHashMap reference
+  {
+    JSONStream js;
+    const LinkedHashMap& array = LinkedHashMap::Handle(LinkedHashMap::New());
+    array.PrintJSON(&js, true);
+    elideSubstring("classes", js.ToCString(), buffer);
+    elideSubstring("objects", buffer, buffer);
+    elideSubstring("_InternalLinkedHashMap@", buffer, buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@Instance\",\"_vmType\":\"@LinkedHashMap\","
+        "\"class\":{\"type\":\"@Class\",\"id\":\"\","
+        "\"name\":\"_InternalLinkedHashMap\",\"_vmName\":\"\"},\"id\":\"\"}",
+        buffer);
+  }
+  // UserTag reference
+  {
+    JSONStream js;
+    Instance& tag = Instance::Handle(isolate->object_store()->default_tag());
+    tag.PrintJSON(&js, true);
+    elideSubstring("classes", js.ToCString(), buffer);
+    elideSubstring("objects", buffer, buffer);
+    elideSubstring("_UserTag@", buffer, buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@Instance\",\"_vmType\":\"@UserTag\","
+        "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_UserTag\","
+        "\"_vmName\":\"\"},"
+        "\"id\":\"\"}",
+        buffer);
+  }
+  // Type reference
+  // TODO(turnidge): Add in all of the other Type siblings.
+  {
+    JSONStream js;
+    Instance& type = Instance::Handle(isolate->object_store()->bool_type());
+    type.PrintJSON(&js, true);
+    elideSubstring("classes", js.ToCString(), buffer);
+    elideSubstring("objects", buffer, buffer);
+    elideSubstring("_Type@", buffer, buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@Type\","
+        "\"class\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"_Type\","
+        "\"_vmName\":\"\"},\"id\":\"\","
+        "\"typeClass\":{\"type\":\"@Class\",\"id\":\"\",\"name\":\"bool\"},"
+        "\"name\":\"bool\"}",
+        buffer);
+  }
+  // Null reference
+  {
+    JSONStream js;
+    Object::null_object().PrintJSON(&js, true);
+    EXPECT_STREQ(
+        "{\"type\":\"@null\",\"id\":\"objects\\/null\","
+        "\"valueAsString\":\"null\"}",
+        js.ToCString());
+  }
+  // Sentinel reference
+  {
+    JSONStream js;
+    Object::sentinel().PrintJSON(&js, true);
+    EXPECT_STREQ(
+        "{\"type\":\"Sentinel\",\"id\":\"objects\\/not-initialized\","
+        "\"valueAsString\":\"<not initialized>\"}",
+        js.ToCString());
+  }
+  // Transition sentinel reference
+  {
+    JSONStream js;
+    Object::transition_sentinel().PrintJSON(&js, true);
+    EXPECT_STREQ(
+        "{\"type\":\"Sentinel\",\"id\":\"objects\\/being-initialized\","
+        "\"valueAsString\":\"<being initialized>\"}",
+        js.ToCString());
+  }
+  // LiteralToken reference.  This is meant to be an example of a
+  // "weird" type that isn't usually returned by the VM Service except
+  // when we are doing direct heap inspection.
+  {
+    JSONStream js;
+    LiteralToken& tok = LiteralToken::Handle(LiteralToken::New());
+    tok.PrintJSON(&js, true);
+    elideSubstring("objects", js.ToCString(), buffer);
+    EXPECT_STREQ(
+        "{\"type\":\"@Object\",\"_vmType\":\"@LiteralToken\",\"id\":\"\"}",
+        buffer);
+  }
+}
+
+
 TEST_CASE(InstanceEquality) {
   // Test that Instance::OperatorEquals can call a user-defined operator==.
   const char* kScript =
diff --git a/runtime/vm/os_android.cc b/runtime/vm/os_android.cc
index f305414..eef54b6 100644
--- a/runtime/vm/os_android.cc
+++ b/runtime/vm/os_android.cc
@@ -205,7 +205,8 @@
 // TODO(5411554):  May need to hoist these architecture dependent code
 // into a architecture specific file e.g: os_ia32_linux.cc
 intptr_t OS::ActivationFrameAlignment() {
-#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
+#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64) || \
+    defined(TARGET_ARCH_ARM64)
   const int kMinimumAlignment = 16;
 #elif defined(TARGET_ARCH_ARM)
   const int kMinimumAlignment = 8;
@@ -223,7 +224,8 @@
 
 
 intptr_t OS::PreferredCodeAlignment() {
-#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
+#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64) || \
+    defined(TARGET_ARCH_ARM64)
   const int kMinimumAlignment = 16;
 #elif defined(TARGET_ARCH_ARM)
   const int kMinimumAlignment = 16;
diff --git a/runtime/vm/pages.cc b/runtime/vm/pages.cc
index 4d402e3..c398bc1 100644
--- a/runtime/vm/pages.cc
+++ b/runtime/vm/pages.cc
@@ -770,17 +770,22 @@
 }
 
 
-uword PageSpace::TryAllocateDataBump(intptr_t size,
-                                     GrowthPolicy growth_policy) {
+uword PageSpace::TryAllocateDataBumpInternal(intptr_t size,
+                                             GrowthPolicy growth_policy,
+                                             bool is_locked) {
   ASSERT(size >= kObjectAlignment);
   ASSERT(Utils::IsAligned(size, kObjectAlignment));
   intptr_t remaining = bump_end_ - bump_top_;
   if (remaining < size) {
     // Checking this first would be logical, but needlessly slow.
     if (size >= kAllocatablePageSize) {
-      return TryAllocate(size, HeapPage::kData, growth_policy);
+      return is_locked ?
+          TryAllocateDataLocked(size, growth_policy) :
+          TryAllocate(size, HeapPage::kData, growth_policy);
     }
-    FreeListElement* block = freelist_[HeapPage::kData].TryAllocateLarge(size);
+    FreeListElement* block = is_locked ?
+        freelist_[HeapPage::kData].TryAllocateLargeLocked(size) :
+        freelist_[HeapPage::kData].TryAllocateLarge(size);
     if (block == NULL) {
       // Allocating from a new page (if growth policy allows) will have the
       // side-effect of populating the freelist with a large block. The next
@@ -789,9 +794,16 @@
       return TryAllocateInFreshPage(size,
                                     HeapPage::kData,
                                     growth_policy,
-                                    /* is_locked = */ false);
+                                    is_locked);
     }
     intptr_t block_size = block->Size();
+    if (remaining > 0) {
+      if (is_locked) {
+        freelist_[HeapPage::kData].FreeLocked(bump_top_, remaining);
+      } else {
+        freelist_[HeapPage::kData].Free(bump_top_, remaining);
+      }
+    }
     bump_top_ = reinterpret_cast<uword>(block);
     bump_end_ = bump_top_ + block_size;
     remaining = block_size;
@@ -808,6 +820,32 @@
 }
 
 
+uword PageSpace::TryAllocateDataBump(intptr_t size,
+                                     GrowthPolicy growth_policy) {
+  return TryAllocateDataBumpInternal(size, growth_policy, false);
+}
+
+
+uword PageSpace::TryAllocateDataBumpLocked(intptr_t size,
+                                           GrowthPolicy growth_policy) {
+  return TryAllocateDataBumpInternal(size, growth_policy, true);
+}
+
+
+uword PageSpace::TryAllocatePromoLocked(intptr_t size,
+                                        GrowthPolicy growth_policy) {
+  FreeList* freelist = &freelist_[HeapPage::kData];
+  uword result = freelist->TryAllocateSmallLocked(size);
+  if (result != 0) {
+    usage_.used_in_words += size >> kWordSizeLog2;
+    return result;
+  }
+  result = TryAllocateDataBumpLocked(size, growth_policy);
+  if (result != 0) return result;
+  return TryAllocateDataLocked(size, growth_policy);
+}
+
+
 PageSpaceController::PageSpaceController(Heap* heap,
                                          int heap_growth_ratio,
                                          int heap_growth_max,
diff --git a/runtime/vm/pages.h b/runtime/vm/pages.h
index 0b1b0d2..e13e748 100644
--- a/runtime/vm/pages.h
+++ b/runtime/vm/pages.h
@@ -305,6 +305,8 @@
 
   // Attempt to allocate from bump block rather than normal freelist.
   uword TryAllocateDataBump(intptr_t size, GrowthPolicy growth_policy);
+  uword TryAllocateDataBumpLocked(intptr_t size, GrowthPolicy growth_policy);
+  uword TryAllocatePromoLocked(intptr_t size, GrowthPolicy growth_policy);
 
  private:
   // Ids for time and data records in Heap::GCStats.
@@ -332,6 +334,9 @@
                                HeapPage::PageType type,
                                GrowthPolicy growth_policy,
                                bool is_locked);
+  uword TryAllocateDataBumpInternal(intptr_t size,
+                                    GrowthPolicy growth_policy,
+                                    bool is_locked);
   HeapPage* AllocatePage(HeapPage::PageType type);
   void FreePage(HeapPage* page, HeapPage* previous_page);
   HeapPage* AllocateLargePage(intptr_t size, HeapPage::PageType type);
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 43d909f..ad0d498 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -223,6 +223,16 @@
 }
 
 
+struct CatchParamDesc {
+  CatchParamDesc()
+      : token_pos(0), type(NULL), name(NULL), var(NULL) { }
+  intptr_t token_pos;
+  const AbstractType* type;
+  const String* name;
+  LocalVariable* var;
+};
+
+
 struct Parser::Block : public ZoneAllocated {
   Block(Block* outer_block, LocalScope* local_scope, SequenceNode* seq)
     : parent(outer_block), scope(local_scope), statements(seq) {
@@ -296,7 +306,8 @@
       library_(Library::Handle(isolate_, library.raw())),
       try_blocks_list_(NULL),
       last_used_try_index_(0),
-      unregister_pending_function_(false) {
+      unregister_pending_function_(false),
+      async_temp_scope_(NULL) {
   ASSERT(tokens_iterator_.IsValid());
   ASSERT(!library.IsNull());
 }
@@ -327,7 +338,8 @@
           parsed_function->function().origin()).library())),
       try_blocks_list_(NULL),
       last_used_try_index_(0),
-      unregister_pending_function_(false) {
+      unregister_pending_function_(false),
+      async_temp_scope_(NULL) {
   ASSERT(tokens_iterator_.IsValid());
   ASSERT(!current_function().IsNull());
   if (FLAG_enable_type_checks) {
@@ -2942,6 +2954,15 @@
   intptr_t formal_params_pos = TokenPos();
   // TODO(12455) : Need better validation mechanism.
 
+  // In case of nested async functions we also need to save the currently saved
+  // try context, the corresponding stack variable, and the scope where
+  // temporaries are added.
+  LocalVariable* saved_saved_try_ctx = parsed_function()->saved_try_ctx();
+  const String& saved_async_saved_try_ctx_name =
+      String::Handle(I, parsed_function()->async_saved_try_ctx_name());
+  parsed_function()->reset_saved_try_ctx_vars();
+  LocalScope* saved_async_temp_scope = async_temp_scope_;
+
   if (func.IsConstructor()) {
     SequenceNode* statements = ParseConstructor(func, default_parameter_values);
     innermost_function_ = saved_innermost_function.raw();
@@ -2983,13 +3004,23 @@
     // we are compiling a getter this will at most populate the receiver.
     AddFormalParamsToScope(&params, current_block_->scope);
   } else if (func.is_async_closure()) {
-    // Async closures have one optional parameter for continuation results.
+    // Async closures have two optional parameters:
+    // * A continuation result.
+    // * A continuation error.
+    //
+    // If the error!=null we rethrow the error at the next await.
+    const Type& dynamic_type = Type::ZoneHandle(I, Type::DynamicType());
     ParamDesc result_param;
     result_param.name = &Symbols::AsyncOperationParam();
     result_param.default_value = &Object::null_instance();
-    result_param.type = &Type::ZoneHandle(I, Type::DynamicType());
+    result_param.type = &dynamic_type;
+    ParamDesc error_param;
+    error_param.name = &Symbols::AsyncOperationErrorParam();
+    error_param.default_value = &Object::null_instance();
+    error_param.type = &dynamic_type;
     params.parameters->Add(result_param);
-    params.num_optional_parameters++;
+    params.parameters->Add(error_param);
+    params.num_optional_parameters += 2;
     params.has_optional_positional_parameters = true;
     SetupDefaultsForOptionalParams(&params, default_parameter_values);
     AddFormalParamsToScope(&params, current_block_->scope);
@@ -3123,12 +3154,16 @@
   if (func.IsAsyncFunction() && !func.is_async_closure()) {
     body = CloseAsyncFunction(async_closure, body);
   } else if (func.is_async_closure()) {
-    CloseAsyncClosure(body);
+    body = CloseAsyncClosure(body);
   }
   current_block_->statements->Add(body);
   innermost_function_ = saved_innermost_function.raw();
   last_used_try_index_ = saved_try_index;
   await_is_keyword_ = saved_await_is_keyword;
+  async_temp_scope_ = saved_async_temp_scope;
+  parsed_function()->set_saved_try_ctx(saved_saved_try_ctx);
+  parsed_function()->set_async_saved_try_ctx_name(
+      saved_async_saved_try_ctx_name);
   return CloseBlock();
 }
 
@@ -5528,29 +5563,204 @@
 
 void Parser::OpenAsyncClosure() {
   TRACE_PARSER("OpenAsyncClosure");
-  parsed_function()->set_await_temps_scope(current_block_->scope);
+
+  async_temp_scope_ = current_block_->scope;
+
+  OpenAsyncTryBlock();
+}
+
+
+SequenceNode* Parser::CloseAsyncTryBlock(SequenceNode* try_block) {
+  try_blocks_list_->enter_catch();
+
+  OpenBlock();
+  OpenBlock();
+  const AbstractType& dynamic_type =
+      AbstractType::ZoneHandle(I, Type::DynamicType());
+  CatchParamDesc exception_param;
+  CatchParamDesc stack_trace_param;
+  exception_param.token_pos = Scanner::kNoSourcePos;
+  exception_param.type = &dynamic_type;
+  exception_param.name = &Symbols::ExceptionParameter();
+  stack_trace_param.token_pos = Scanner::kNoSourcePos;
+  stack_trace_param.type = &dynamic_type;
+  stack_trace_param.name = &Symbols::StackTraceParameter();
+
+  AddCatchParamsToScope(
+      &exception_param, &stack_trace_param, current_block_->scope);
+
+  LocalVariable* context_var = current_block_->scope->LookupVariable(
+      Symbols::SavedTryContextVar(), false);
+  ASSERT(context_var != NULL);
+  LocalVariable* exception_var = current_block_->scope->LookupVariable(
+      Symbols::ExceptionVar(), false);
+  if (exception_param.var != NULL) {
+    // Generate code to load the exception object (:exception_var) into
+    // the exception variable specified in this block.
+    ASSERT(exception_var != NULL);
+    current_block_->statements->Add(new(I) StoreLocalNode(
+        Scanner::kNoSourcePos,
+        exception_param.var,
+        new(I) LoadLocalNode(Scanner::kNoSourcePos, exception_var)));
+  }
+  LocalVariable* stack_trace_var =
+      current_block_->scope->LookupVariable(Symbols::StackTraceVar(), false);
+  if (stack_trace_param.var != NULL) {
+    // A stack trace variable is specified in this block, so generate code
+    // to load the stack trace object (:stack_trace_var) into the stack
+    // trace variable specified in this block.
+    ArgumentListNode* no_args = new(I) ArgumentListNode(Scanner::kNoSourcePos);
+    ASSERT(stack_trace_var != NULL);
+    current_block_->statements->Add(new(I) StoreLocalNode(
+        Scanner::kNoSourcePos,
+        stack_trace_param.var,
+        new(I) LoadLocalNode(Scanner::kNoSourcePos, stack_trace_var)));
+    current_block_->statements->Add(new(I) InstanceCallNode(
+        Scanner::kNoSourcePos,
+        new(I) LoadLocalNode(Scanner::kNoSourcePos, stack_trace_param.var),
+        Library::PrivateCoreLibName(Symbols::_setupFullStackTrace()),
+        no_args));
+  }
+
+  ASSERT(try_blocks_list_ != NULL);
+  if (innermost_function().is_async_closure() ||
+      innermost_function().IsAsyncFunction()) {
+    if ((try_blocks_list_->outer_try_block() != NULL) &&
+        (try_blocks_list_->outer_try_block()->try_block()
+            ->scope->function_level() ==
+         current_block_->scope->function_level())) {
+      // We need to unchain three scope levels: catch clause, catch
+      // parameters, and the general try block.
+      RestoreSavedTryContext(
+          current_block_->scope->parent()->parent()->parent(),
+          try_blocks_list_->outer_try_block()->try_index(),
+          current_block_->statements);
+    } else {
+      parsed_function()->reset_saved_try_ctx_vars();
+    }
+  }
+
+  // Complete the async future with an error.
+  // Since we control the catch block there is no need to generate a nested
+  // if/then/else.
+  LocalVariable* async_completer = current_block_->scope->LookupVariable(
+      Symbols::AsyncCompleter(), false);
+  ASSERT(async_completer != NULL);
+  ArgumentListNode* completer_args =
+      new (I) ArgumentListNode(Scanner::kNoSourcePos);
+  completer_args->Add(
+      new (I) LoadLocalNode(Scanner::kNoSourcePos, exception_param.var));
+  completer_args->Add(
+      new (I) LoadLocalNode(Scanner::kNoSourcePos, stack_trace_param.var));
+  current_block_->statements->Add(new (I) InstanceCallNode(
+      Scanner::kNoSourcePos,
+      new (I) LoadLocalNode(Scanner::kNoSourcePos, async_completer),
+      Symbols::CompleterCompleteError(),
+      completer_args));
+  ReturnNode* return_node = new (I) ReturnNode(Scanner::kNoSourcePos);
+  // Behavior like a continuation return, i.e,. don't call a completer.
+  return_node->set_return_type(ReturnNode::kContinuation);
+  current_block_->statements->Add(return_node);
+  AstNode* catch_block = CloseBlock();
+  current_block_->statements->Add(catch_block);
+  SequenceNode* catch_handler_list = CloseBlock();
+
+  const GrowableObjectArray& handler_types =
+      GrowableObjectArray::Handle(I, GrowableObjectArray::New());
+  handler_types.SetLength(0);
+  handler_types.Add(*exception_param.type);
+
+  TryBlocks* inner_try_block = PopTryBlock();
+  const intptr_t try_index = inner_try_block->try_index();
+
+  CatchClauseNode* catch_clause = new (I) CatchClauseNode(
+      Scanner::kNoSourcePos,
+      catch_handler_list,
+      Array::ZoneHandle(I, Array::MakeArray(handler_types)),
+      context_var,
+      exception_var,
+      stack_trace_var,
+      CatchClauseNode::kInvalidTryIndex,
+      true);
+  AstNode* try_catch_node = new (I) TryCatchNode(
+      Scanner::kNoSourcePos,
+      try_block,
+      context_var,
+      catch_clause,
+      NULL,
+      try_index);
+  current_block_->statements->Add(try_catch_node);
+  return CloseBlock();
+}
+
+
+void Parser::OpenAsyncTryBlock() {
+  // Manually wrapping the actual body into a try/catch block.
+  LocalVariable* context_var =
+      current_block_->scope->LocalLookupVariable(Symbols::SavedTryContextVar());
+  if (context_var == NULL) {
+    context_var = new(I) LocalVariable(
+        TokenPos(),
+        Symbols::SavedTryContextVar(),
+        Type::ZoneHandle(I, Type::DynamicType()));
+    current_block_->scope->AddVariable(context_var);
+  }
+  LocalVariable* exception_var =
+      current_block_->scope->LocalLookupVariable(Symbols::ExceptionVar());
+  if (exception_var == NULL) {
+    exception_var = new(I) LocalVariable(
+        TokenPos(),
+        Symbols::ExceptionVar(),
+        Type::ZoneHandle(I, Type::DynamicType()));
+    current_block_->scope->AddVariable(exception_var);
+  }
+  LocalVariable* stack_trace_var =
+      current_block_->scope->LocalLookupVariable(Symbols::StackTraceVar());
+  if (stack_trace_var == NULL) {
+    stack_trace_var = new(I) LocalVariable(
+        TokenPos(),
+        Symbols::StackTraceVar(),
+        Type::ZoneHandle(I, Type::DynamicType()));
+    current_block_->scope->AddVariable(stack_trace_var);
+  }
+
+  // Open the try block.
+  OpenBlock();
+  PushTryBlock(current_block_);
+
+  if (innermost_function().is_async_closure() ||
+      innermost_function().IsAsyncFunction()) {
+    SetupSavedTryContext(context_var);
+  }
 }
 
 
 RawFunction* Parser::OpenAsyncFunction(intptr_t formal_param_pos) {
   TRACE_PARSER("OpenAsyncFunction");
+
+  AddAsyncClosureVariables();
+
   // Create the closure containing the old body of this function.
   Class& sig_cls = Class::ZoneHandle(I);
   Type& sig_type = Type::ZoneHandle(I);
   Function& closure = Function::ZoneHandle(I);
   String& sig = String::ZoneHandle(I);
   ParamList closure_params;
+  const Type& dynamic_type = Type::ZoneHandle(I, Type::DynamicType());
   closure_params.AddFinalParameter(
-      formal_param_pos,
-      &Symbols::ClosureParameter(),
-      &Type::ZoneHandle(I, Type::DynamicType()));
+      formal_param_pos, &Symbols::ClosureParameter(), &dynamic_type);
   ParamDesc result_param;
   result_param.name = &Symbols::AsyncOperationParam();
   result_param.default_value = &Object::null_instance();
-  result_param.type = &Type::ZoneHandle(I, Type::DynamicType());
+  result_param.type = &dynamic_type;
+  ParamDesc error_param;
+  error_param.name = &Symbols::AsyncOperationErrorParam();
+  error_param.default_value = &Object::null_instance();
+  error_param.type = &dynamic_type;
   closure_params.parameters->Add(result_param);
+  closure_params.parameters->Add(error_param);
   closure_params.has_optional_positional_parameters = true;
-  closure_params.num_optional_parameters++;
+  closure_params.num_optional_parameters += 2;
   closure = Function::NewClosureFunction(
       Symbols::AnonymousClosure(),
       innermost_function(),
@@ -5575,10 +5785,43 @@
   OpenFunctionBlock(closure);
   AddFormalParamsToScope(&closure_params, current_block_->scope);
   OpenBlock();
+
+  async_temp_scope_ = current_block_->scope;
+
   return closure.raw();
 }
 
 
+void Parser::AddAsyncClosureVariables() {
+  // Add to AST:
+  //   var :await_jump_var;
+  //   var :await_ctx_var;
+  //   var :async_op;
+  //   var :async_completer;
+  const Type& dynamic_type = Type::ZoneHandle(I, Type::DynamicType());
+  LocalVariable* await_jump_var = new (I) LocalVariable(
+      Scanner::kNoSourcePos, Symbols::AwaitJumpVar(), dynamic_type);
+  current_block_->scope->AddVariable(await_jump_var);
+  current_block_->scope->CaptureVariable(Symbols::AwaitJumpVar());
+  await_jump_var->set_is_captured();
+  LocalVariable* await_ctx_var = new (I) LocalVariable(
+      Scanner::kNoSourcePos, Symbols::AwaitContextVar(), dynamic_type);
+  current_block_->scope->AddVariable(await_ctx_var);
+  current_block_->scope->CaptureVariable(Symbols::AwaitContextVar());
+  await_ctx_var->set_is_captured();
+  LocalVariable* async_op_var = new (I) LocalVariable(
+      Scanner::kNoSourcePos, Symbols::AsyncOperation(), dynamic_type);
+  current_block_->scope->AddVariable(async_op_var);
+  current_block_->scope->CaptureVariable(Symbols::AsyncOperation());
+  async_op_var->set_is_captured();
+  LocalVariable* async_completer = new (I) LocalVariable(
+      Scanner::kNoSourcePos, Symbols::AsyncCompleter(), dynamic_type);
+  current_block_->scope->AddVariable(async_completer);
+  current_block_->scope->CaptureVariable(Symbols::AsyncCompleter());
+  async_completer->set_is_captured();
+}
+
+
 SequenceNode* Parser::CloseBlock() {
   SequenceNode* statements = current_block_->statements;
   if (current_block_->scope != NULL) {
@@ -5611,6 +5854,9 @@
   // corresponding function block.
   CloseBlock();
 
+  closure_body->scope()->LookupVariable(Symbols::AwaitJumpVar(), false);
+  closure_body->scope()->CaptureVariable(Symbols::AsyncCompleter());
+
   // Create and return a new future that executes a closure with the current
   // body.
 
@@ -5630,44 +5876,8 @@
       completer.LookupFunction(Symbols::CompleterConstructor()));
   ASSERT(!completer_constructor.IsNull());
 
-  bool found = false;
-  // Add to AST:
-  //   var :async_op;
-  //   var :async_completer;
-  //   var :await_jump_var;
-  //   var :await_ctx_var;
-  // Add as many variables to saved the try block ctx as there were try blocks.
-  //   var :async_saved_try_ctx_var_<x>;
-  const Type& dynamic_type = Type::ZoneHandle(I, Type::DynamicType());
-  LocalVariable* async_op_var = new (I) LocalVariable(
-      Scanner::kNoSourcePos, Symbols::AsyncOperation(), dynamic_type);
-  current_block_->scope->AddVariable(async_op_var);
-  found = closure_body->scope()->CaptureVariable(Symbols::AsyncOperation());
-  ASSERT(found);
-  LocalVariable* async_completer = new (I) LocalVariable(
-      Scanner::kNoSourcePos, Symbols::AsyncCompleter(), dynamic_type);
-  current_block_->scope->AddVariable(async_completer);
-  found = closure_body->scope()->CaptureVariable(Symbols::AsyncCompleter());
-  ASSERT(found);
-  LocalVariable* await_jump_var = new (I) LocalVariable(
-      Scanner::kNoSourcePos, Symbols::AwaitJumpVar(), dynamic_type);
-  current_block_->scope->AddVariable(await_jump_var);
-  found = closure_body->scope()->CaptureVariable(Symbols::AwaitJumpVar());
-  ASSERT(found);
-  LocalVariable* await_ctx_var = new (I) LocalVariable(
-      Scanner::kNoSourcePos, Symbols::AwaitContextVar(), dynamic_type);
-  current_block_->scope->AddVariable(await_ctx_var);
-  found = closure_body->scope()->CaptureVariable(Symbols::AwaitContextVar());
-  ASSERT(found);
-  LocalVariable* async_saved_try_ctx_var;
-  for (int16_t i = 0; i < last_used_try_index_; i++) {
-    String& async_saved_try_ctx_name = BuildAsyncSavedTryContextName(I, i);
-    async_saved_try_ctx_var = new (I) LocalVariable(
-        Scanner::kNoSourcePos, async_saved_try_ctx_name, dynamic_type);
-    current_block_->scope->AddVariable(async_saved_try_ctx_var);
-    found = closure_body->scope()->CaptureVariable(async_saved_try_ctx_name);
-    ASSERT(found);
-  }
+  LocalVariable* async_completer = current_block_->scope->LookupVariable(
+      Symbols::AsyncCompleter(), false);
 
   // Add to AST:
   //   :async_completer = new Completer();
@@ -5686,6 +5896,8 @@
 
   // Add to AST:
   //   :async_op = <closure>;  (containing the original body)
+  LocalVariable* async_op_var = current_block_->scope->LookupVariable(
+      Symbols::AsyncOperation(), false);
   ClosureNode* cn = new(I) ClosureNode(
       Scanner::kNoSourcePos, closure, NULL, closure_body->scope());
   StoreLocalNode* store_async_op = new (I) StoreLocalNode(
@@ -5719,17 +5931,22 @@
 }
 
 
-void Parser::CloseAsyncClosure(SequenceNode* body) {
+SequenceNode* Parser::CloseAsyncClosure(SequenceNode* body) {
   TRACE_PARSER("CloseAsyncClosure");
+
   // We need a temporary expression to store intermediate return values.
   parsed_function()->EnsureExpressionTemp();
   // Implicitly mark those variables below as captured. We currently mark all
   // variables of all scopes as captured (below), but as soon as we do something
   // smarter we rely on these internal variables to be available.
-  body->scope()->LookupVariable(Symbols::Completer(), false);
-  body->scope()->LookupVariable(Symbols::AwaitJumpVar(), false);
-  body->scope()->LookupVariable(Symbols::AwaitContextVar(), false);
-  body->scope()->RecursivelyCaptureAllVariables();
+  SequenceNode* new_body = CloseAsyncTryBlock(body);
+  ASSERT(new_body != NULL);
+  ASSERT(new_body->scope() != NULL);
+  new_body->scope()->LookupVariable(Symbols::AwaitJumpVar(), false);
+  new_body->scope()->LookupVariable(Symbols::AwaitContextVar(), false);
+  new_body->scope()->LookupVariable(Symbols::AsyncCompleter(), false);
+  new_body->scope()->RecursivelyCaptureAllVariables();
+  return new_body;
 }
 
 
@@ -5917,7 +6134,8 @@
 // Returns ast nodes of the variable initialization.
 AstNode* Parser::ParseVariableDeclaration(const AbstractType& type,
                                           bool is_final,
-                                          bool is_const) {
+                                          bool is_const,
+                                          SequenceNode** await_preamble) {
   TRACE_PARSER("ParseVariableDeclaration");
   ASSERT(IsIdentifier());
   const intptr_t ident_pos = TokenPos();
@@ -5930,7 +6148,8 @@
     // Variable initialization.
     const intptr_t assign_pos = TokenPos();
     ConsumeToken();
-    AstNode* expr = ParseAwaitableExpr(is_const, kConsumeCascades);
+    AstNode* expr = ParseAwaitableExpr(
+        is_const, kConsumeCascades, await_preamble);
     initialization = new(I) StoreLocalNode(
         assign_pos, variable, expr);
     if (is_const) {
@@ -6043,8 +6262,14 @@
     ReportError("identifier expected");
   }
 
-  AstNode* initializers = ParseVariableDeclaration(type, is_final, is_const);
+  SequenceNode* preamble = NULL;
+  AstNode* initializers =
+      ParseVariableDeclaration(type, is_final, is_const, &preamble);
   ASSERT(initializers != NULL);
+  if (preamble != NULL) {
+    preamble->Add(initializers);
+    initializers = preamble;
+  }
   while (CurrentToken() == Token::kCOMMA) {
     ConsumeToken();
     if (!IsIdentifier()) {
@@ -6055,7 +6280,13 @@
     SequenceNode* sequence = NodeAsSequenceNode(initializers->token_pos(),
                                                 initializers,
                                                 NULL);
-    sequence->Add(ParseVariableDeclaration(type, is_final, is_const));
+    preamble = NULL;
+    AstNode* declaration = ParseVariableDeclaration(
+        type, is_final, is_const, &preamble);
+    if (preamble != NULL) {
+      sequence->Add(preamble);
+    }
+    sequence->Add(declaration);
     initializers = sequence;
   }
   return initializers;
@@ -6679,7 +6910,7 @@
   }
   ConsumeToken();
   ExpectToken(Token::kLPAREN);
-  AstNode* cond_expr = ParseExpr(kAllowConst, kConsumeCascades);
+  AstNode* cond_expr = ParseAwaitableExpr(kAllowConst, kConsumeCascades, NULL);
   ExpectToken(Token::kRPAREN);
   const bool parsing_loop_body = false;
   SequenceNode* true_branch = ParseNestedStatement(parsing_loop_body, NULL);
@@ -6852,7 +7083,8 @@
   ConsumeToken();
   ExpectToken(Token::kLPAREN);
   const intptr_t expr_pos = TokenPos();
-  AstNode* switch_expr = ParseExpr(kAllowConst, kConsumeCascades);
+  AstNode* switch_expr = ParseAwaitableExpr(
+      kAllowConst, kConsumeCascades, NULL);
   ExpectToken(Token::kRPAREN);
   ExpectToken(Token::kLBRACE);
   OpenBlock();
@@ -6949,11 +7181,18 @@
       SourceLabel::New(while_pos, label_name, SourceLabel::kWhile);
   ConsumeToken();
   ExpectToken(Token::kLPAREN);
-  AstNode* cond_expr = ParseExpr(kAllowConst, kConsumeCascades);
+  SequenceNode* await_preamble = NULL;
+  AstNode* cond_expr = ParseAwaitableExpr(
+      kAllowConst, kConsumeCascades, &await_preamble);
   ExpectToken(Token::kRPAREN);
   const bool parsing_loop_body =  true;
   SequenceNode* while_body = ParseNestedStatement(parsing_loop_body, label);
-  return new(I) WhileNode(while_pos, label, cond_expr, while_body);
+  WhileNode* while_node = new (I) WhileNode(while_pos,
+                                            label,
+                                            cond_expr,
+                                            await_preamble,
+                                            while_body);
+  return while_node;
 }
 
 
@@ -6967,7 +7206,14 @@
   SequenceNode* dowhile_body = ParseNestedStatement(parsing_loop_body, label);
   ExpectToken(Token::kWHILE);
   ExpectToken(Token::kLPAREN);
-  AstNode* cond_expr = ParseExpr(kAllowConst, kConsumeCascades);
+  SequenceNode* await_preamble = NULL;
+  AstNode* cond_expr = ParseAwaitableExpr(
+      kAllowConst, kConsumeCascades, &await_preamble);
+  // No need for special handling of the await preamble as we can just append o
+  // it to the loop body.
+  if (await_preamble != NULL) {
+    dowhile_body->Add(await_preamble);
+  }
   ExpectToken(Token::kRPAREN);
   ExpectSemicolon();
   return new(I) DoWhileNode(do_pos, label, cond_expr, dowhile_body);
@@ -7002,7 +7248,8 @@
   }
   ExpectToken(Token::kIN);
   const intptr_t collection_pos = TokenPos();
-  AstNode* collection_expr = ParseExpr(kAllowConst, kConsumeCascades);
+  AstNode* collection_expr =
+      ParseAwaitableExpr(kAllowConst, kConsumeCascades, NULL);
   ExpectToken(Token::kRPAREN);
 
   OpenBlock();  // Implicit block around while loop.
@@ -7077,7 +7324,7 @@
   SequenceNode* for_loop_statement = CloseBlock();
 
   AstNode* while_statement = new(I) WhileNode(
-      forin_pos, label, iterator_moveNext, for_loop_statement);
+      forin_pos, label, iterator_moveNext, NULL, for_loop_statement);
   current_block_->statements->Add(while_statement);
 
   return CloseBlock();  // Implicit block around while loop.
@@ -7103,19 +7350,21 @@
     if (IsVariableDeclaration()) {
       initializer = ParseVariableDeclarationList();
     } else {
-      initializer = ParseExpr(kAllowConst, kConsumeCascades);
+      initializer = ParseAwaitableExpr(kAllowConst, kConsumeCascades, NULL);
     }
   }
   ExpectSemicolon();
   AstNode* condition = NULL;
+  SequenceNode* condition_preamble = NULL;
   if (CurrentToken() != Token::kSEMICOLON) {
-    condition = ParseExpr(kAllowConst, kConsumeCascades);
+    condition = ParseAwaitableExpr(
+        kAllowConst, kConsumeCascades, &condition_preamble);
   }
   ExpectSemicolon();
   AstNode* increment = NULL;
   const intptr_t incr_pos = TokenPos();
   if (CurrentToken() != Token::kRPAREN) {
-    increment = ParseExprList();
+    increment = ParseAwaitableExprList();
   }
   ExpectToken(Token::kRPAREN);
   const bool parsing_loop_body =  true;
@@ -7142,6 +7391,7 @@
       label,
       NodeAsSequenceNode(init_pos, initializer, NULL),
       condition,
+      condition_preamble,
       NodeAsSequenceNode(incr_pos, increment, NULL),
       body);
   current_block_->statements->Add(for_node);
@@ -7219,16 +7469,6 @@
 }
 
 
-struct CatchParamDesc {
-  CatchParamDesc()
-      : token_pos(0), type(NULL), name(NULL), var(NULL) { }
-  intptr_t token_pos;
-  const AbstractType* type;
-  const String* name;
-  LocalVariable* var;
-};
-
-
 // Populate local scope of the catch block with the catch parameters.
 void Parser::AddCatchParamsToScope(CatchParamDesc* exception_param,
                                    CatchParamDesc* stack_trace_param,
@@ -7268,11 +7508,13 @@
   // In case of async closures we need to restore the saved try index of an
   // outer try block (if it exists).  The current try block has already been
   // removed from the stack of try blocks.
-  if (current_function().is_async_closure() && (try_blocks_list_ != NULL)) {
+  if ((innermost_function().is_async_closure() ||
+       innermost_function().IsAsyncFunction()) &&
+      (try_blocks_list_ != NULL)) {
     // We need two unchain two scopes: finally clause, and the try block level.
-    SetupSavedTryContext(current_block_->scope->parent()->parent(),
-                         try_blocks_list_->try_index(),
-                         current_block_->statements);
+    RestoreSavedTryContext(current_block_->scope->parent()->parent(),
+                           try_blocks_list_->try_index(),
+                           current_block_->statements);
   } else {
     parsed_function()->reset_saved_try_ctx_vars();
   }
@@ -7426,15 +7668,21 @@
     // In case of async closures we need to restore the saved try index of an
     // outer try block (if it exists).
     ASSERT(try_blocks_list_ != NULL);
-    if (current_function().is_async_closure() &&
-        (try_blocks_list_->outer_try_block() != NULL)) {
-      // We need to unchain three scope levels: catch clause, catch parameters,
-      // and the general try block.
-      SetupSavedTryContext(current_block_->scope->parent()->parent()->parent(),
-                           try_blocks_list_->outer_try_block()->try_index(),
-                           current_block_->statements);
-    } else {
-      parsed_function()->reset_saved_try_ctx_vars();
+    if (innermost_function().is_async_closure() ||
+        innermost_function().IsAsyncFunction()) {
+      if ((try_blocks_list_->outer_try_block() != NULL) &&
+          (try_blocks_list_->outer_try_block()->try_block()
+              ->scope->function_level() ==
+           current_block_->scope->function_level())) {
+        // We need to unchain three scope levels: catch clause, catch
+        // parameters, and the general try block.
+        RestoreSavedTryContext(
+            current_block_->scope->parent()->parent()->parent(),
+            try_blocks_list_->outer_try_block()->try_index(),
+            current_block_->statements);
+      } else {
+        parsed_function()->reset_saved_try_ctx_vars();
+      }
     }
 
     current_block_->statements->Add(ParseNestedStatement(false, NULL));
@@ -7524,6 +7772,27 @@
   while (!type_tests.is_empty()) {
     AstNode* type_test = type_tests.RemoveLast();
     SequenceNode* catch_block = catch_blocks.RemoveLast();
+
+    // In case of async closures we need to restore the saved try index of an
+    // outer try block (if it exists).
+    ASSERT(try_blocks_list_ != NULL);
+    if (innermost_function().is_async_closure() ||
+        innermost_function().IsAsyncFunction()) {
+      if ((try_blocks_list_->outer_try_block() != NULL) &&
+          (try_blocks_list_->outer_try_block()->try_block()
+              ->scope->function_level() ==
+           current_block_->scope->function_level())) {
+        // We need to unchain three scope levels: catch clause, catch
+        // parameters, and the general try block.
+        RestoreSavedTryContext(
+            current_block_->scope->parent()->parent(),
+            try_blocks_list_->outer_try_block()->try_index(),
+            current_block_->statements);
+      } else {
+        parsed_function()->reset_saved_try_ctx_vars();
+      }
+    }
+
     current_block_->statements->Add(new(I) IfNode(
         type_test->token_pos(), type_test, catch_block, current));
     current = CloseBlock();
@@ -7532,6 +7801,27 @@
 }
 
 
+void Parser::SetupSavedTryContext(LocalVariable* saved_try_context) {
+  const String& async_saved_try_ctx_name =
+      BuildAsyncSavedTryContextName(I, last_used_try_index_ - 1);
+  LocalVariable* async_saved_try_ctx = new (I) LocalVariable(
+      Scanner::kNoSourcePos,
+      async_saved_try_ctx_name,
+      Type::ZoneHandle(I, Type::DynamicType()));
+  async_temp_scope_->AddVariable(async_saved_try_ctx);
+  async_saved_try_ctx->set_is_captured();
+  async_saved_try_ctx = current_block_->scope->LookupVariable(
+      async_saved_try_ctx_name, false);
+  ASSERT(async_saved_try_ctx != NULL);
+  ASSERT(saved_try_context != NULL);
+  current_block_->statements->Add(new (I) StoreLocalNode(
+      Scanner::kNoSourcePos, async_saved_try_ctx, new (I) LoadLocalNode(
+          Scanner::kNoSourcePos, saved_try_context)));
+  parsed_function()->set_saved_try_ctx(saved_try_context);
+  parsed_function()->set_async_saved_try_ctx_name(async_saved_try_ctx_name);
+}
+
+
 // Set up the currently relevant :saved_try_context_var on the stack:
 // * Try blocks: Set the context variable for this try block.
 // * Catch/finally blocks: Set the context variable for any outer try block (if
@@ -7539,9 +7829,9 @@
 //
 // Also save the captured variable and the stack variable to be able to set
 // it after a function continues execution (await).
-void Parser::SetupSavedTryContext(LocalScope* saved_try_context_scope,
-                                  int16_t try_index,
-                                  SequenceNode* target) {
+void Parser::RestoreSavedTryContext(LocalScope* saved_try_context_scope,
+                                    int16_t try_index,
+                                    SequenceNode* target) {
   LocalVariable* saved_try_ctx = saved_try_context_scope->LookupVariable(
       Symbols::SavedTryContextVar(), false);
   ASSERT((saved_try_ctx != NULL) && !saved_try_ctx->is_captured());
@@ -7549,13 +7839,15 @@
       BuildAsyncSavedTryContextName(I, try_index);
   LocalVariable* async_saved_try_ctx =
       target->scope()->LookupVariable(async_saved_try_ctx_name, false);
-  ASSERT((async_saved_try_ctx != NULL) && async_saved_try_ctx->is_captured());
+  ASSERT(async_saved_try_ctx != NULL);
+  ASSERT(async_saved_try_ctx->is_captured());
   target->Add(new (I) StoreLocalNode(
-      Scanner::kNoSourcePos, saved_try_ctx, new (I) LoadLocalNode(
-          Scanner::kNoSourcePos, async_saved_try_ctx)));
+      Scanner::kNoSourcePos,
+      saved_try_ctx,
+      new (I) LoadLocalNode(Scanner::kNoSourcePos, async_saved_try_ctx)));
 
   parsed_function()->set_saved_try_ctx(saved_try_ctx);
-  parsed_function()->set_async_saved_try_ctx(async_saved_try_ctx);
+  parsed_function()->set_async_saved_try_ctx_name(async_saved_try_ctx_name);
 }
 
 
@@ -7618,19 +7910,9 @@
   PushTryBlock(current_block_);
   ExpectToken(Token::kLBRACE);
 
-  if (current_function().is_async_closure()) {
-    const String& async_saved_try_ctx_name =
-        BuildAsyncSavedTryContextName(I, last_used_try_index_ - 1);
-    LocalVariable* async_saved_try_ctx =
-        current_block_->scope->LookupVariable(
-            async_saved_try_ctx_name, false);
-    ASSERT(async_saved_try_ctx != NULL);
-    ASSERT(context_var != NULL);
-    current_block_->statements->Add(new (I) StoreLocalNode(
-        Scanner::kNoSourcePos, async_saved_try_ctx, new (I) LoadLocalNode(
-            Scanner::kNoSourcePos, context_var)));
-    parsed_function()->set_saved_try_ctx(context_var);
-    parsed_function()->set_async_saved_try_ctx(async_saved_try_ctx);
+  if (innermost_function().is_async_closure() ||
+      innermost_function().IsAsyncFunction()) {
+    SetupSavedTryContext(context_var);
   }
 
   ParseStatementSequence();
@@ -7706,20 +7988,6 @@
     try_catch_node = sequence;
   }
 
-  // In case of async closures we need to restore the saved try index of an
-  // outer try block (if it exists).
-  if (current_function().is_async_closure() &&
-      (outer_try_index != CatchClauseNode::kInvalidTryIndex)) {
-    SequenceNode* try_catch_and_restore_try_ctx = new (I) SequenceNode(
-        Scanner::kNoSourcePos, current_block_->scope);
-    try_catch_and_restore_try_ctx->Add(try_catch_node);
-    SetupSavedTryContext(
-        current_block_->scope, outer_try_index, try_catch_and_restore_try_ctx);
-    return try_catch_and_restore_try_ctx;
-  } else {
-    parsed_function()->reset_saved_try_ctx_vars();
-  }
-
   return try_catch_node;
 }
 
@@ -7824,7 +8092,7 @@
         ReportError(return_pos,
                     "return of a value not allowed in constructors");
       }
-      AstNode* expr = ParseExpr(kAllowConst, kConsumeCascades);
+      AstNode* expr = ParseAwaitableExpr(kAllowConst, kConsumeCascades, NULL);
       statement = new(I) ReturnNode(statement_pos, expr);
     } else {
       statement = new(I) ReturnNode(statement_pos);
@@ -7889,7 +8157,7 @@
         new(I) LoadLocalNode(statement_pos, excp_var),
         new(I) LoadLocalNode(statement_pos, trace_var));
   } else {
-    statement = ParseAwaitableExpr(kAllowConst, kConsumeCascades);
+    statement = ParseAwaitableExpr(kAllowConst, kConsumeCascades, NULL);
     ExpectSemicolon();
   }
   return statement;
@@ -8222,16 +8490,27 @@
 }
 
 
-AstNode* Parser::ParseExprList() {
-  TRACE_PARSER("ParseExprList");
-  AstNode* expressions = ParseExpr(kAllowConst, kConsumeCascades);
+AstNode* Parser::ParseAwaitableExprList() {
+  TRACE_PARSER("ParseAwaitableExprList");
+  SequenceNode* preamble = NULL;
+  AstNode* expressions = ParseAwaitableExpr(
+      kAllowConst, kConsumeCascades, &preamble);
+  if (preamble != NULL) {
+    preamble->Add(expressions);
+    expressions = preamble;
+  }
   if (CurrentToken() == Token::kCOMMA) {
     // Collect comma-separated expressions in a non scope owning sequence node.
     SequenceNode* list = new(I) SequenceNode(TokenPos(), NULL);
     list->Add(expressions);
     while (CurrentToken() == Token::kCOMMA) {
       ConsumeToken();
-      AstNode* expr = ParseExpr(kAllowConst, kConsumeCascades);
+      preamble = NULL;
+      AstNode* expr = ParseAwaitableExpr(
+          kAllowConst, kConsumeCascades, &preamble);
+      if (preamble != NULL) {
+        list->Add(preamble);
+      }
       list->Add(expr);
     }
     expressions = list;
@@ -8552,23 +8831,28 @@
 
 
 AstNode* Parser::ParseAwaitableExpr(bool require_compiletime_const,
-                                    bool consume_cascades) {
+                                    bool consume_cascades,
+                                    SequenceNode** await_preamble) {
   TRACE_PARSER("ParseAwaitableExpr");
   parsed_function()->reset_have_seen_await();
   AstNode* expr = ParseExpr(require_compiletime_const, consume_cascades);
   if (parsed_function()->have_seen_await()) {
-    if (!current_block_->scope->LookupVariable(
-          Symbols::AsyncOperation(), true)) {
-      // Async operations are always encapsulated into a local function. We only
-      // need to transform the expression when generating code for this inner
-      // function.
-      return expr;
-    }
-    SequenceNode* intermediates_block = new(I) SequenceNode(
-        Scanner::kNoSourcePos, current_block_->scope);
-    AwaitTransformer at(intermediates_block, library_, parsed_function());
+    // Make sure we do not reuse the scope to avoid creating contexts that we
+    // are unaware of, i.e, creating contexts that have already been covered.
+    // See FlowGraphBuilder::VisitSequenceNode() for details on when contexts
+    // are created.
+    OpenBlock();
+    AwaitTransformer at(current_block_->statements,
+                        library_,
+                        parsed_function(),
+                        async_temp_scope_);
     AstNode* result = at.Transform(expr);
-    current_block_->statements->Add(intermediates_block);
+    SequenceNode* preamble = CloseBlock();
+    if (await_preamble == NULL) {
+      current_block_->statements->Add(preamble);
+    } else {
+      *await_preamble = preamble;
+    }
     parsed_function()->reset_have_seen_await();
     return result;
   }
@@ -8667,7 +8951,12 @@
   TRACE_PARSER("ParseUnaryExpr");
   AstNode* expr = NULL;
   const intptr_t op_pos = TokenPos();
-  if (IsPrefixOperator(CurrentToken())) {
+  if (IsAwaitAsKeyword()) {
+    TRACE_PARSER("ParseAwaitExpr");
+    ConsumeToken();
+    parsed_function()->record_await();
+    expr = new (I) AwaitNode(TokenPos(), ParseUnaryExpr());
+  } else if (IsPrefixOperator(CurrentToken())) {
     Token::Kind unary_op = CurrentToken();
     if (unary_op == Token::kSUB) {
       unary_op = Token::kNEGATE;
@@ -9407,12 +9696,12 @@
 
 const AbstractType* Parser::ReceiverType(const Class& cls) {
   ASSERT(!cls.IsNull());
-  TypeArguments& type_arguments = TypeArguments::Handle();
-  if (cls.NumTypeParameters() > 0) {
-    type_arguments = cls.type_parameters();
-  }
+  const TypeArguments& type_arguments = TypeArguments::Handle(
+      I,
+      (cls.NumTypeParameters() > 0) ?
+          cls.type_parameters() : TypeArguments::null());
   AbstractType& type = AbstractType::ZoneHandle(
-      Type::New(cls, type_arguments, cls.token_pos()));
+      I, Type::New(cls, type_arguments, cls.token_pos()));
   if (cls.is_type_finalized()) {
     type ^= ClassFinalizer::FinalizeType(
         cls, type, ClassFinalizer::kCanonicalizeWellFormed);
@@ -10953,16 +11242,6 @@
     OpenBlock();
     primary = ParseFunctionStatement(true);
     CloseBlock();
-  } else if (IsAwaitAsKeyword()) {
-    // The body of an async function is parsed multiple times. The first time
-    // when setting up an AsyncFunction() for generating relevant scope
-    // information. The second time the body is parsed for actually generating
-    // code.
-    TRACE_PARSER("ParseAwaitExpr");
-    ConsumeToken();
-    parsed_function()->record_await();
-    primary = new(I) AwaitNode(
-        TokenPos(), ParseExpr(kAllowConst, kConsumeCascades));
   } else if (IsIdentifier()) {
     intptr_t qual_ident_pos = TokenPos();
     const LibraryPrefix& prefix = LibraryPrefix::ZoneHandle(I, ParsePrefix());
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index d249655..2edc19a 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -48,7 +48,6 @@
         saved_entry_context_var_(NULL),
         expression_temp_var_(NULL),
         finally_return_temp_var_(NULL),
-        await_temps_scope_(NULL),
         deferred_prefixes_(new ZoneGrowableArray<const LibraryPrefix*>()),
         first_parameter_index_(0),
         first_stack_local_index_(0),
@@ -56,7 +55,7 @@
         num_stack_locals_(0),
         have_seen_await_expr_(false),
         saved_try_ctx_(NULL),
-        async_saved_try_ctx_(NULL),
+        async_saved_try_ctx_name_(String::ZoneHandle(isolate, String::null())),
         isolate_(isolate) {
     ASSERT(function.IsZoneHandle());
   }
@@ -142,15 +141,6 @@
 
   void AllocateVariables();
 
-  void set_await_temps_scope(LocalScope* scope) {
-    ASSERT(await_temps_scope_ == NULL);
-    await_temps_scope_ = scope;
-  }
-  LocalScope* await_temps_scope() const {
-    ASSERT(await_temps_scope_ != NULL);
-    return await_temps_scope_;
-  }
-
   void record_await() {
     have_seen_await_expr_ = true;
   }
@@ -158,20 +148,21 @@
   bool have_seen_await() const { return have_seen_await_expr_; }
 
   void set_saved_try_ctx(LocalVariable* saved_try_ctx) {
-    ASSERT((saved_try_ctx != NULL) && !saved_try_ctx->is_captured());
+    ASSERT((saved_try_ctx == NULL) || !saved_try_ctx->is_captured());
     saved_try_ctx_ = saved_try_ctx;
   }
   LocalVariable* saved_try_ctx() const { return saved_try_ctx_; }
 
-  void set_async_saved_try_ctx(LocalVariable* async_saved_try_ctx) {
-    ASSERT((async_saved_try_ctx != NULL) && async_saved_try_ctx->is_captured());
-    async_saved_try_ctx_ = async_saved_try_ctx;
+  void set_async_saved_try_ctx_name(const String& async_saved_try_ctx_name) {
+    async_saved_try_ctx_name_ = async_saved_try_ctx_name.raw();
   }
-  LocalVariable* async_saved_try_ctx() const { return async_saved_try_ctx_; }
+  RawString* async_saved_try_ctx_name() const {
+    return async_saved_try_ctx_name_.raw();
+  }
 
   void reset_saved_try_ctx_vars() {
     saved_try_ctx_ = NULL;
-    async_saved_try_ctx_ = NULL;
+    async_saved_try_ctx_name_ = String::null();
   }
 
   Isolate* isolate() const { return isolate_; }
@@ -186,7 +177,6 @@
   LocalVariable* saved_entry_context_var_;
   LocalVariable* expression_temp_var_;
   LocalVariable* finally_return_temp_var_;
-  LocalScope* await_temps_scope_;
   ZoneGrowableArray<const LibraryPrefix*>* deferred_prefixes_;
 
   int first_parameter_index_;
@@ -195,7 +185,7 @@
   int num_stack_locals_;
   bool have_seen_await_expr_;
   LocalVariable* saved_try_ctx_;
-  LocalVariable* async_saved_try_ctx_;
+  String& async_saved_try_ctx_name_;
 
   Isolate* isolate_;
 
@@ -553,10 +543,13 @@
   void OpenFunctionBlock(const Function& func);
   void OpenAsyncClosure();
   RawFunction* OpenAsyncFunction(intptr_t formal_param_pos);
+  void OpenAsyncTryBlock();
   SequenceNode* CloseBlock();
   SequenceNode* CloseAsyncFunction(const Function& closure,
                                    SequenceNode* closure_node);
-  void CloseAsyncClosure(SequenceNode* body);
+  SequenceNode* CloseAsyncClosure(SequenceNode* body);
+  SequenceNode* CloseAsyncTryBlock(SequenceNode* try_block);
+  void AddAsyncClosureVariables();
 
 
   LocalVariable* LookupPhaseParameter();
@@ -609,7 +602,8 @@
       ClassFinalizer::FinalizationKind finalization);
   AstNode* ParseVariableDeclaration(const AbstractType& type,
                                     bool is_final,
-                                    bool is_const);
+                                    bool is_const,
+                                    SequenceNode** await_preamble);
   AstNode* ParseVariableDeclarationList();
   AstNode* ParseFunctionStatement(bool is_literal);
   AstNode* ParseStatement();
@@ -637,9 +631,10 @@
   static const bool kConsumeCascades = true;
   static const bool kNoCascades = false;
   AstNode* ParseAwaitableExpr(bool require_compiletime_const,
-                              bool consume_cascades);
+                              bool consume_cascades,
+                              SequenceNode** await_preamble);
   AstNode* ParseExpr(bool require_compiletime_const, bool consume_cascades);
-  AstNode* ParseExprList();
+  AstNode* ParseAwaitableExprList();
   AstNode* ParseConditionalExpr();
   AstNode* ParseUnaryExpr();
   AstNode* ParsePostfixExpr();
@@ -676,7 +671,7 @@
   LocalVariable* LookupLocalScope(const String& ident);
   void CheckInstanceFieldAccess(intptr_t field_pos, const String& field_name);
   bool ParsingStaticMember() const;
-  static const AbstractType* ReceiverType(const Class& cls);
+  const AbstractType* ReceiverType(const Class& cls);
   bool IsInstantiatorRequired() const;
   bool ResolveIdentInLocalScope(intptr_t ident_pos,
                                 const String &ident,
@@ -731,9 +726,10 @@
                                   InvocationMirror::Type type,
                                   const Function* func);
 
-  void SetupSavedTryContext(LocalScope* saved_try_context_scope,
-                            int16_t try_index,
-                            SequenceNode* target);
+  void SetupSavedTryContext(LocalVariable* saved_try_context);
+  void RestoreSavedTryContext(LocalScope* saved_try_context_scope,
+                              int16_t try_index,
+                              SequenceNode* target);
 
   void CheckOperatorArity(const MemberDesc& member);
 
@@ -817,6 +813,8 @@
 
   bool unregister_pending_function_;
 
+  LocalScope* async_temp_scope_;
+
   DISALLOW_COPY_AND_ASSIGN(Parser);
 };
 
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index 630dd7d..0380d13 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -72,7 +72,7 @@
       case kCodeCid: {
         const RawCode* raw_code = reinterpret_cast<const RawCode*>(this);
         intptr_t pointer_offsets_length =
-            raw_code->ptr()->pointer_offsets_length_;
+            Code::PtrOffBits::decode(raw_code->ptr()->state_bits_);
         instance_size = Code::InstanceSize(pointer_offsets_length);
         break;
       }
@@ -97,12 +97,6 @@
         instance_size = ContextScope::InstanceSize(num_variables);
         break;
       }
-      case kBigintCid: {
-        const RawBigint* raw_bgi = reinterpret_cast<const RawBigint*>(this);
-        intptr_t length = raw_bgi->ptr()->allocated_length_;
-        instance_size = Bigint::InstanceSize(length);
-        break;
-      }
       case kOneByteStringCid: {
         const RawOneByteString* raw_string =
             reinterpret_cast<const RawOneByteString*>(this);
@@ -468,7 +462,7 @@
   visitor->VisitPointers(raw_obj->from(), raw_obj->to());
 
   RawCode* obj = raw_obj->ptr();
-  intptr_t length = obj->pointer_offsets_length_;
+  intptr_t length = Code::PtrOffBits::decode(obj->state_bits_);
   if (Code::AliveBit::decode(obj->state_bits_)) {
     // Also visit all the embedded pointers in the corresponding instructions.
     uword entry_point = reinterpret_cast<uword>(obj->instructions_->ptr()) +
@@ -689,9 +683,8 @@
                                         ObjectPointerVisitor* visitor) {
   // Make sure that we got here with the tagged pointer as this.
   ASSERT(raw_obj->IsHeapObject());
-  RawBigint* obj = raw_obj->ptr();
-  intptr_t length = obj->allocated_length_;
-  return Bigint::InstanceSize(length);
+  visitor->VisitPointers(raw_obj->from(), raw_obj->to());
+  return Bigint::InstanceSize();
 }
 
 
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index ea36054..c6ac4b5 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -889,16 +889,17 @@
 
   // Compilation timestamp.
   int64_t compile_timestamp_;
-  intptr_t pointer_offsets_length_;
+
+  // state_bits_ is a bitfield with three fields:
+  // The optimized bit, the alive bit, and a count of the number of pointer
+  // offsets.
   // Alive: If true, the embedded object pointers will be visited during GC.
-  // This field cannot be shorter because of alignment issues on x64
-  // architectures.
-  intptr_t state_bits_;  // state, is_optimized, is_alive.
+  int32_t state_bits_;
 
   // PC offsets for code patching.
-  intptr_t entry_patch_pc_offset_;
-  intptr_t patch_code_pc_offset_;
-  intptr_t lazy_deopt_pc_offset_;
+  int32_t entry_patch_pc_offset_;
+  int32_t patch_code_pc_offset_;
+  int32_t lazy_deopt_pc_offset_;
 
   // Variable length data follows here.
   int32_t* data() { OPEN_ARRAY_START(int32_t, int32_t); }
@@ -920,7 +921,7 @@
   RawObject** to() {
     return reinterpret_cast<RawObject**>(&ptr()->object_pool_);
   }
-  intptr_t size_;
+  int32_t size_;
 
   // Variable length data follows here.
   uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); }
@@ -1012,8 +1013,8 @@
   static const intptr_t kFullRecSize;
   static const intptr_t kCompressedRecSize;
 
-  intptr_t record_size_in_bytes_;
-  intptr_t length_;  // Number of descriptors.
+  int32_t record_size_in_bytes_;
+  int32_t length_;  // Number of descriptors.
 
   // Variable length data follows here.
   uint8_t* data() { OPEN_ARRAY_START(uint8_t, intptr_t); }
@@ -1032,12 +1033,16 @@
 class RawStackmap : public RawObject {
   RAW_HEAP_OBJECT_IMPLEMENTATION(Stackmap);
 
-  // TODO(kmillikin): We need a small number of bits to encode the register
-  // count.  Consider packing them in with the length.
-  intptr_t length_;  // Length of payload, in bits.
-  intptr_t register_bit_count_;  // Live register bits, included in length_.
+  // Regarding changing this to a bitfield: ARM64 requires register_bit_count_
+  // to be as large as 96, meaning 7 bits, leaving 25 bits for the length, or
+  // as large as ~33 million entries. If that is sufficient, then these two
+  // fields can be merged into a BitField.
+  int32_t length_;  // Length of payload, in bits.
+  int32_t register_bit_count_;  // Live register bits, included in length_.
 
-  uword pc_;  // PC corresponding to this stack map representation.
+  // Offset from code entry point corresponding to this stack map
+  // representation.
+  uint32_t pc_offset_;
 
   // Variable length data follows here (bitmap of the stack layout).
   uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); }
@@ -1054,21 +1059,49 @@
     kSavedCurrentContext
   };
 
+  enum {
+    kKindPos = 0,
+    kKindSize = 8,
+    kIndexPos = kKindPos + kKindSize,
+    // Since there are 24 bits for the stack slot index, Functions can have
+    // only ~16.7 million stack slots.
+    kPayloadSize = sizeof(int32_t) * kBitsPerByte,
+    kIndexSize = kPayloadSize - kIndexPos,
+    kIndexBias = 1 << (kIndexSize - 1),
+    kMaxIndex = (1 << (kIndexSize - 1)) - 1,
+  };
+
+  class IndexBits : public BitField<int32_t, kIndexPos, kIndexSize> {};
+  class KindBits : public BitField<int8_t, kKindPos, kKindSize>{};
+
   struct VarInfo {
-    intptr_t index;      // Slot index on stack or in context.
-    intptr_t begin_pos;  // Token position of scope start.
-    intptr_t end_pos;    // Token position of scope end.
-    int16_t  scope_id;   // Scope to which the variable belongs.
-    int8_t   kind;       // Entry kind of type VarInfoKind.
+    int32_t index_kind;  // Bitfield for slot index on stack or in context,
+                         // and Entry kind of type VarInfoKind.
+    int32_t begin_pos;   // Token position of scope start.
+    int32_t end_pos;     // Token position of scope end.
+    int16_t scope_id;    // Scope to which the variable belongs.
+
+    VarInfoKind kind() const {
+      return static_cast<VarInfoKind>(KindBits::decode(index_kind));
+    }
+    void set_kind(VarInfoKind kind) {
+      index_kind = KindBits::update(kind, index_kind);
+    }
+    int32_t index() const {
+      return IndexBits::decode(index_kind) - kIndexBias;
+    }
+    void set_index(int32_t index) {
+      index_kind = IndexBits::update(index + kIndexBias, index_kind);
+    }
   };
 
  private:
   RAW_HEAP_OBJECT_IMPLEMENTATION(LocalVarDescriptors);
-  intptr_t length_;  // Number of descriptors.
   RawArray* names_;  // Array of [length_] variable names.
+  int32_t length_;  // Number of descriptors.
 
   // Variable info with [length_] entries.
-  VarInfo* data() { OPEN_ARRAY_START(VarInfo, intptr_t); }
+  VarInfo* data() { OPEN_ARRAY_START(VarInfo, int32_t); }
 };
 
 
@@ -1087,7 +1120,7 @@
   RAW_HEAP_OBJECT_IMPLEMENTATION(ExceptionHandlers);
 
   // Number of exception handler entries.
-  intptr_t length_;
+  int32_t length_;
 
   // Array with [length_] entries. Each entry is an array of all handled
   // exception types.
@@ -1113,7 +1146,7 @@
 class RawContext : public RawObject {
   RAW_HEAP_OBJECT_IMPLEMENTATION(Context);
 
-  intptr_t num_variables_;
+  int32_t num_variables_;
   Isolate* isolate_;
 
   RawObject** from() { return reinterpret_cast<RawObject**>(&ptr()->parent_); }
@@ -1132,7 +1165,7 @@
 class RawContextScope : public RawObject {
   RAW_HEAP_OBJECT_IMPLEMENTATION(ContextScope);
 
-  // TODO(iposva): Switch to convential enum offset based structure to avoid
+  // TODO(iposva): Switch to conventional enum offset based structure to avoid
   // alignment mishaps.
   struct VariableDesc {
     RawSmi* token_pos;
@@ -1147,7 +1180,7 @@
     RawSmi* context_level;
   };
 
-  intptr_t num_variables_;
+  int32_t num_variables_;
 
   RawObject** from() {
     return reinterpret_cast<RawObject**>(&ptr()->data()[0]);
@@ -1413,21 +1446,11 @@
 class RawBigint : public RawInteger {
   RAW_HEAP_OBJECT_IMPLEMENTATION(Bigint);
 
-  // Actual length in chunks at the time of allocation (later we may
-  // clamp the operational length but we need to maintain a consistent
-  // object length so that the object can be traversed during GC).
-  intptr_t allocated_length_;
-
-  // Operational length in chunks of the bigint object, clamping can
-  // cause this length to be reduced. If the signed_length_ is
-  // negative then the number is negative.
-  intptr_t signed_length_;
-
-  // A sequence of Chunks (typedef in Bignum) representing bignum digits.
-  // Bignum::Chunk chunks_[Utils::Abs(signed_length_)];
-  uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); }
-
-  friend class SnapshotReader;
+  RawObject** from() { return reinterpret_cast<RawObject**>(&ptr()->neg_); }
+  RawBool* neg_;
+  RawSmi* used_;
+  RawTypedData* digits_;
+  RawObject** to() { return reinterpret_cast<RawObject**>(&ptr()->digits_); }
 };
 
 
@@ -1734,8 +1757,10 @@
     return reinterpret_cast<RawObject**>(&ptr()->pattern_);
   }
 
-  intptr_t type_;  // Uninitialized, simple or complex.
-  intptr_t flags_;  // Represents global/local, case insensitive, multiline.
+  // A bitfield with two fields:
+  // type: Uninitialized, simple or complex.
+  // flags: Represents global/local, case insensitive, multiline.
+  int8_t type_flags_;
 
   // Variable length data follows here.
   uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); }
@@ -1991,7 +2016,6 @@
          (index == kCodeCid) ||
          (index == kContextScopeCid) ||
          (index == kInstanceCid) ||
-         (index == kBigintCid) ||
          (index == kJSRegExpCid);
 }
 
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index 5a3dcaf..2ba05a1 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -2,7 +2,6 @@
 // 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.
 
-#include "vm/bigint_operations.h"
 #include "vm/object.h"
 #include "vm/object_store.h"
 #include "vm/snapshot.h"
@@ -23,12 +22,6 @@
   reader->New##type(len) : type::New(len, HEAP_SPACE(kind)))
 
 
-static uword BigintAllocator(intptr_t size) {
-  Zone* zone = Isolate::Current()->current_zone();
-  return zone->AllocUnsafe(size);
-}
-
-
 RawClass* Class::ReadFrom(SnapshotReader* reader,
                           intptr_t object_id,
                           intptr_t tags,
@@ -829,7 +822,7 @@
   literal_token.set_tags(tags);
 
   // Read the token attributes.
-  Token::Kind token_kind = static_cast<Token::Kind>(reader->ReadIntptrValue());
+  Token::Kind token_kind = static_cast<Token::Kind>(reader->Read<int32_t>());
   literal_token.set_kind(token_kind);
   *reader->StringHandle() ^= reader->ReadObjectImpl();
   literal_token.set_literal(*reader->StringHandle());
@@ -854,7 +847,7 @@
   writer->WriteTags(writer->GetObjectTags(this));
 
   // Write out the kind field.
-  writer->Write<intptr_t>(ptr()->kind_);
+  writer->Write<int32_t>(ptr()->kind_);
 
   // Write out literal and value fields.
   writer->WriteObjectImpl(ptr()->literal_);
@@ -1323,7 +1316,7 @@
   ASSERT(reader != NULL);
 
   // Allocate context object.
-  intptr_t num_vars = reader->ReadIntptrValue();
+  int32_t num_vars = reader->Read<int32_t>();
   Context& context = Context::ZoneHandle(reader->isolate(), Context::null());
   if (kind == Snapshot::kFull) {
     context = reader->NewContext(num_vars);
@@ -1365,7 +1358,7 @@
   writer->WriteTags(writer->GetObjectTags(this));
 
   // Write out num of variables in the context.
-  writer->WriteIntptrValue(ptr()->num_variables_);
+  writer->Write<int32_t>(ptr()->num_variables_);
 
   // Can't serialize the isolate pointer, we set it implicitly on read.
 
@@ -1717,17 +1710,19 @@
                             Snapshot::Kind kind) {
   ASSERT(reader != NULL);
 
-  // Read in the HexCString representation of the bigint.
-  intptr_t len = reader->ReadIntptrValue();
-  char* str = reader->isolate()->current_zone()->Alloc<char>(len + 1);
-  str[len] = '\0';
-  reader->ReadBytes(reinterpret_cast<uint8_t*>(str), len);
+  // Allocate bigint object.
+  Bigint& obj = Bigint::ZoneHandle(reader->isolate(), NEW_OBJECT(Bigint));
+  reader->AddBackRef(object_id, &obj, kIsDeserialized);
 
-  // Create a Bigint object from HexCString.
-  Bigint& obj = Bigint::ZoneHandle(
-      reader->isolate(),
-      ((kind == Snapshot::kFull) ? reader->NewBigint(str) :
-       BigintOperations::FromHexCString(str, HEAP_SPACE(kind))));
+  // Set all the object fields.
+  // TODO(5411462): Need to assert No GC can happen here, even though
+  // allocations may happen.
+  intptr_t num_flds = (obj.raw()->to() - obj.raw()->from());
+  for (intptr_t i = 0; i <= num_flds; i++) {
+    (*reader->PassiveObjectHandle()) = reader->ReadObjectRef();
+    obj.StorePointer(obj.raw()->from() + i,
+                     reader->PassiveObjectHandle()->raw());
+  }
 
   // If it is a canonical constant make it one.
   // When reading a full snapshot we don't need to canonicalize the object
@@ -1743,7 +1738,6 @@
     obj ^= obj.CheckAndCanonicalize(NULL);
     ASSERT(!obj.IsNull());
   }
-  reader->AddBackRef(object_id, &obj, kIsDeserialized);
 
   // Set the object tags.
   obj.set_tags(tags);
@@ -1764,33 +1758,9 @@
   writer->WriteIndexedObject(kBigintCid);
   writer->WriteTags(writer->GetObjectTags(this));
 
-  // Write out the bigint value as a HEXCstring.
-  intptr_t length = ptr()->signed_length_;
-  bool is_negative = false;
-  if (length <= 0) {
-    length = -length;
-    is_negative = true;
-  }
-  uword data_start = reinterpret_cast<uword>(ptr()) + sizeof(RawBigint);
-  const char* str = BigintOperations::ToHexCString(
-      length,
-      is_negative,
-      reinterpret_cast<void*>(data_start),
-      &BigintAllocator);
-  bool neg = false;
-  if (*str == '-') {
-    neg = true;
-    str++;
-  }
-  intptr_t len = strlen(str);
-  ASSERT(len > 2 && str[0] == '0' && str[1] == 'x');
-  if (neg) {
-    writer->WriteIntptrValue(len - 1);  // Include '-' in length.
-    writer->Write<uint8_t>('-');
-  } else {
-    writer->WriteIntptrValue(len - 2);
-  }
-  writer->WriteBytes(reinterpret_cast<const uint8_t*>(&(str[2])), (len - 2));
+  // Write out all the object pointer fields.
+  SnapshotWriterVisitor visitor(writer);
+  visitor.VisitPointers(from(), to());
 }
 
 
@@ -2755,8 +2725,7 @@
   regex.raw_ptr()->num_bracket_expressions_ = reader->ReadAsSmi();
   *reader->StringHandle() ^= reader->ReadObjectImpl();
   regex.set_pattern(*reader->StringHandle());
-  regex.raw_ptr()->type_ = reader->ReadIntptrValue();
-  regex.raw_ptr()->flags_ = reader->ReadIntptrValue();
+  regex.raw_ptr()->type_flags_ = reader->Read<int8_t>();
 
   // TODO(5411462): Need to implement a way of recompiling the regex.
 
@@ -2783,8 +2752,7 @@
   // Write out all the other fields.
   writer->Write<RawObject*>(ptr()->num_bracket_expressions_);
   writer->WriteObjectImpl(ptr()->pattern_);
-  writer->WriteIntptrValue(ptr()->type_);
-  writer->WriteIntptrValue(ptr()->flags_);
+  writer->Write<int8_t>(ptr()->type_flags_);
 
   // Do not write out the data part which is native.
 }
diff --git a/runtime/vm/report_test.cc b/runtime/vm/report_test.cc
index e10bd5b..b179055 100644
--- a/runtime/vm/report_test.cc
+++ b/runtime/vm/report_test.cc
@@ -36,7 +36,7 @@
                        "\"message\":{\"type\":\"@String\"",
                        js.ToCString());
       // Skip private _OneByteString.
-      EXPECT_SUBSTRING("\"valueAsString\":\"\\\"High Voltage\\\"\"}}",
+      EXPECT_SUBSTRING("\"valueAsString\":\"High Voltage\"",
                        js.ToCString());
     }
   }
@@ -53,7 +53,7 @@
                    "\"message\":{\"type\":\"@String\"",
                    trace_buffer->At(0)->message);
   // Skip private _OneByteString.
-  EXPECT_SUBSTRING("\"valueAsString\":\"\\\"High Voltage\\\"\"}}",
+  EXPECT_SUBSTRING("\"valueAsString\":\"High Voltage\"",
                    trace_buffer->At(0)->message);
 
   EXPECT_SUBSTRING("{\"type\":\"JSCompatibilityWarning\",\"script\":{\"type\":"
@@ -63,7 +63,7 @@
                    "\"message\":{\"type\":\"@String\"",
                    trace_buffer->At(1)->message);
   // Skip private _OneByteString.
-  EXPECT_SUBSTRING("\"valueAsString\":\"\\\"Low Voltage\\\"\"}}",
+  EXPECT_SUBSTRING("\"valueAsString\":\"Low Voltage\"",
                    trace_buffer->At(1)->message);
 
   delete trace_buffer;
diff --git a/runtime/vm/scavenger.cc b/runtime/vm/scavenger.cc
index ec4881c..e39f7e7 100644
--- a/runtime/vm/scavenger.cc
+++ b/runtime/vm/scavenger.cc
@@ -205,8 +205,8 @@
         //
         // This object is a survivor of a previous scavenge. Attempt to promote
         // the object.
-        new_addr = page_space_->TryAllocateDataLocked(size,
-                                                      PageSpace::kForceGrowth);
+        new_addr =
+            page_space_->TryAllocatePromoLocked(size, PageSpace::kForceGrowth);
         if (new_addr != 0) {
           // If promotion succeeded then we need to remember it so that it can
           // be traversed later.
diff --git a/runtime/vm/scopes.cc b/runtime/vm/scopes.cc
index 72a30023..be699cf 100644
--- a/runtime/vm/scopes.cc
+++ b/runtime/vm/scopes.cc
@@ -253,12 +253,12 @@
     for (int i = 0; i < context_scope.num_variables(); i++) {
       VarDesc desc;
       desc.name = &String::Handle(context_scope.NameAt(i));
-      desc.info.kind =  RawLocalVarDescriptors::kContextVar;
+      desc.info.set_kind(RawLocalVarDescriptors::kContextVar);
       desc.info.scope_id = context_scope.ContextLevelAt(i);
       desc.info.begin_pos = begin_token_pos();
       desc.info.end_pos = end_token_pos();
       ASSERT(desc.info.begin_pos <= desc.info.end_pos);
-      desc.info.index = context_scope.ContextIndexAt(i);
+      desc.info.set_index(context_scope.ContextIndexAt(i));
       vars.Add(desc);
     }
   }
@@ -295,11 +295,11 @@
     // context level differs from its parent's level.
     VarDesc desc;
     desc.name = &String::Handle();  // No name.
-    desc.info.kind =  RawLocalVarDescriptors::kContextLevel;
+    desc.info.set_kind(RawLocalVarDescriptors::kContextLevel);
     desc.info.scope_id = *scope_id;
     desc.info.begin_pos = begin_token_pos();
     desc.info.end_pos = end_token_pos();
-    desc.info.index = context_level();
+    desc.info.set_index(context_level());
     vars->Add(desc);
   }
   for (int i = 0; i < this->variables_.length(); i++) {
@@ -310,39 +310,39 @@
         VarDesc desc;
         desc.name = &var->name();
         if (var->is_captured()) {
-          desc.info.kind = RawLocalVarDescriptors::kContextVar;
+          desc.info.set_kind(RawLocalVarDescriptors::kContextVar);
           ASSERT(var->owner() != NULL);
           ASSERT(var->owner()->context_level() >= 0);
           desc.info.scope_id = var->owner()->context_level();
         } else {
-          desc.info.kind = RawLocalVarDescriptors::kStackVar;
+          desc.info.set_kind(RawLocalVarDescriptors::kStackVar);
           desc.info.scope_id = *scope_id;
         }
         desc.info.begin_pos = var->token_pos();
         desc.info.end_pos = var->owner()->end_token_pos();
-        desc.info.index = var->index();
+        desc.info.set_index(var->index());
         vars->Add(desc);
       } else if (var->name().raw() == Symbols::SavedEntryContextVar().raw()) {
         // This is the local variable in which the function saves the
         // caller's chain of closure contexts (caller's CTX register).
         VarDesc desc;
         desc.name = &var->name();
-        desc.info.kind = RawLocalVarDescriptors::kSavedEntryContext;
+        desc.info.set_kind(RawLocalVarDescriptors::kSavedEntryContext);
         desc.info.scope_id = 0;
         desc.info.begin_pos = 0;
         desc.info.end_pos = 0;
-        desc.info.index = var->index();
+        desc.info.set_index(var->index());
         vars->Add(desc);
       } else if (var->name().raw() == Symbols::SavedCurrentContextVar().raw()) {
         // This is the local variable in which the function saves its
         // own context before calling a closure function.
         VarDesc desc;
         desc.name = &var->name();
-        desc.info.kind = RawLocalVarDescriptors::kSavedCurrentContext;
+        desc.info.set_kind(RawLocalVarDescriptors::kSavedCurrentContext);
         desc.info.scope_id = 0;
         desc.info.begin_pos = 0;
         desc.info.end_pos = 0;
-        desc.info.index = var->index();
+        desc.info.set_index(var->index());
         vars->Add(desc);
       }
     }
diff --git a/runtime/vm/service/protocol.md b/runtime/vm/service/protocol.md
index 2cd8159..2af1967 100644
--- a/runtime/vm/service/protocol.md
+++ b/runtime/vm/service/protocol.md
@@ -43,6 +43,57 @@
       ...
     }
 
+## Type Hierarchy
+
+The types returned by the VM Service fit into a type hierarchy, with a
+subtyping relationship as indicated by the following indented list:
+
+<pre>
+Object
+    ClassHeapStats
+    Class
+    Code
+    Context
+    Counter
+    Error
+    Field
+    FrameVar
+    Frame
+    Function
+    Gauge
+    Instance
+        AbstractType
+	    BoundedType
+	    TypeParameter
+	    TypeRef
+	    Type
+        List
+        Sentinel  // TODO - subtype of Instance or not?
+        String
+        bool
+        double
+        int
+        null
+    Isolate
+    Library
+    Location
+    Script
+    ServiceError
+    ServiceEvent
+    Socket
+    TypeArguments  // TODO - expose?
+    VM
+</pre>
+
+TODO: How to put links in a pre in markdown?
+
+A subtype is guaranteed to provide all of the properties of its
+parent type.  For example, an [int](#int) can be used as an
+[Instance](#Instance).
+
+The subtyping relationship also holds for reference types.  For
+example, [@int](#int) can be used as an [@Instance](#Instance).
+
 ## IDs
 
 Most responses returned by the VM Service have an <code>id</code>
@@ -86,12 +137,20 @@
 Note that names are not in any way unique.  Many objects will have the
 same name.
 
-Occasionally responses will have the <code>vmName</code> property.
-This represents the internal names used to refer to an object inside
-the VM itself.  The <code>vmName</code> of an object is only provided
-when it differs from the <code>name</code> property; when
-<code>vmName</code> is not present, the client may assume the
-<code>name</code> and <code>vmName</code> are the same.
+## Private Properties
+
+Some properties returned by the VM Service begin with an underscore
+(<code>_</code>) character.  These properties are called _private
+properties_.  Private properties provide private information about the
+VM's implementation.  Private properties may be added, removed, or
+changed at any time with any release of the VM.  They are provided for
+those tools that need this level of internal access, such as the
+Observatory.
+
+For example, some responses will have the <code>_vmType</code>
+nnnproperty.  This provides the VM-internal type name of an object, and
+is provided only when this type name differs from the
+<code>type</code> property.
 
 ## Events
 
@@ -125,7 +184,7 @@
 | type | "@Class", "Class" |
 | id | String |
 | name | String |
-| vmName? | String |
+| _vmName? | String |
 
 Object properties:
 
@@ -185,7 +244,7 @@
 | type | "@Code", "Code"|
 | id | String |
 | name | String |
-| vmName? | String |
+| _vmName? | String |
 | start | String | starting address of code
 | end | String | ending address of code
 | isOptimized | bool |
@@ -217,19 +276,6 @@
 | 1 + (3 * K) | String | Hex encoding of instruction of Kth instruction
 | 2 + (3 * K) | String | Human encoding of instruction of Kth instruction
 
-### <a name="DebuggerEvent"></a>DebuggerEvent
-
-Object properties:
-
-| keys | values | comments
-| --- | --- | ---
-| type | "DebuggerEvent" |
-| id | String | TODO: Remove |
-| eventType | String | "BreakpointReached", "BreakpointResolved", "ExceptionThrown", "IsolateCreated", "IsolateShutdown", "IsolateInterrupted" |
-| isolate | [@Isolate](#Isolate) |
-| breakpoint? | [Breakpoint](#Breakpoint) | for eventTypes "BreakpointResolved" and "BreakpointReached<br><br>TODO: Maybe make this @Breakpoint?
-| exception? | [@Instance](#Instance) | for eventType "ExceptionThrown"
-
 ### <a name="Error"></a>Error
 
 TODO: Drop id from Error.<br>
@@ -239,6 +285,7 @@
 | keys | values | comments
 | --- | --- | ---
 | type | "Error" |
+| _vmType? | String | VM internal name for this type.  Provided only when different from 'type'
 | id | String | always empty
 | kind | String |
 | message | String |
@@ -252,7 +299,7 @@
 | type | "@Field", "Field" |
 | id | String |
 | name | String |
-| vmName? | String |
+| _vmName? | String |
 | value? | Instance | value associated with static field <-- do we want to include this in a field reference?
 | owner | [@Library](#Library),[@Class](#Class) | Owning library or class <-- handling of owner is inconsistent with Function
 | declared_type | [@AbstractType](#AbstractType) |
@@ -302,7 +349,7 @@
 | type | "@Function", "Function" |
 | id | String |
 | name | String |
-| vmName? | String |
+| _vmName? | String |
 | owningLibrary? | [@Library](#Library) | Set for non-top level functions
 | owningClass? | [@Class](#Class) | Set for non-top level functions
 | parent? | [@Function](#Function) | Parent function
@@ -363,7 +410,7 @@
 | type | "@Library", "Library" |
 | id | String |
 | name | String |
-| vmName? | String | Internal vm name.  Provided only when different from 'name'.
+| _vmName? | String | VM-internal name.  Provided only when different from 'name'.
 | url | String
 
 Object properties:
@@ -386,13 +433,13 @@
 | script | [@Script](#Script) |
 | tokenPos | int |
 
-### <a name="Null"></a>Null
+### <a name="null"></a>null
 
 Reference properties:
 
 | keys | values | comments
 | --- | --- | ---
-| type | "@Null", "Null" |
+| type | "@null", "null" |
 | id | String | |
 | valueAsString | String |
 
@@ -400,6 +447,22 @@
 
 TODO.
 
+### <a name="Object"></a>Object
+
+[Object](#Object) is the supertype of all responses returned by the VM
+Service.  It does not necessarily refer to an Object at the Dart
+language level (see [Instance](#Instance)).
+
+Reference properties:
+
+| keys | values | comments
+| --- | --- | ---
+| type | "@Object", "Object" or subtype |
+| _vmType? | String | VM internal name for this type.  Provided only when different from 'type'
+| id | String |
+
+Object properties: none<br>
+
 ### <a name="PcDescriptor"></a>PcDescriptor
 
 ### <a name="Script"></a>Script
@@ -411,7 +474,7 @@
 | type | "@Script", "Script" |
 | id | String
 | name | String
-| vmName? | String | Internal vm name.  Provided only when different from 'name'.
+| _vmName? | String | VM-internal name.  Provided only when different from 'name'.
 | kind | String
 
 Object properties:
@@ -446,6 +509,19 @@
 | id | String | |
 | valueAsString | String |
 
+### <a name="ServiceEvent"></a>ServiceEvent
+
+Object properties:
+
+| keys | values | comments
+| --- | --- | ---
+| type | "ServiceEvent" |
+| id | String | TODO: Remove |
+| eventType | String | "BreakpointReached", "BreakpointResolved", "ExceptionThrown", "IsolateCreated", "IsolateShutdown", "IsolateInterrupted" |
+| isolate | [@Isolate](#Isolate) |
+| breakpoint? | [Breakpoint](#Breakpoint) | for eventTypes "BreakpointResolved" and "BreakpointReached<br><br>TODO: Maybe make this @Breakpoint?
+| exception? | [@Instance](#Instance) | for eventType "ExceptionThrown"
+
 ### <a name="VM"></a>VM
 
 Object properties:
diff --git a/runtime/vm/service_test.cc b/runtime/vm/service_test.cc
index bc74837..20863b0 100644
--- a/runtime/vm/service_test.cc
+++ b/runtime/vm/service_test.cc
@@ -522,9 +522,9 @@
   service_msg = Eval(lib, "[0, port, ['objects', 'null'], [], []]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_SUBSTRING(
-      "{\"type\":\"Null\",\"id\":\"objects\\/null\","
+      "{\"type\":\"null\",\"id\":\"objects\\/null\","
       "\"valueAsString\":\"null\",\"class\":",
       handler.msg());
 
@@ -532,7 +532,7 @@
   service_msg = Eval(lib, "[0, port, ['objects', 'not-initialized'], [], []]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_STREQ(
       "{\"type\":\"Sentinel\",\"id\":\"objects\\/not-initialized\","
       "\"valueAsString\":\"<not initialized>\"}",
@@ -543,7 +543,7 @@
                      "[0, port, ['objects', 'being-initialized'], [], []]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_STREQ(
       "{\"type\":\"Sentinel\",\"id\":\"objects\\/being-initialized\","
       "\"valueAsString\":\"<being initialized>\"}",
@@ -553,7 +553,7 @@
   service_msg = Eval(lib, "[0, port, ['objects', 'optimized-out'], [], []]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_STREQ(
       "{\"type\":\"Sentinel\",\"id\":\"objects\\/optimized-out\","
       "\"valueAsString\":\"<optimized out>\"}",
@@ -563,7 +563,7 @@
   service_msg = Eval(lib, "[0, port, ['objects', 'collected'], [], []]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_STREQ(
       "{\"type\":\"Sentinel\",\"id\":\"objects\\/collected\","
       "\"valueAsString\":\"<collected>\"}",
@@ -573,7 +573,7 @@
   service_msg = Eval(lib, "[0, port, ['objects', 'expired'], [], []]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_STREQ(
       "{\"type\":\"Sentinel\",\"id\":\"objects\\/expired\","
       "\"valueAsString\":\"<expired>\"}",
@@ -583,20 +583,23 @@
   service_msg = Eval(lib, "[0, port, ['objects', 'bool-true'], [], []]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
+  handler.filterMsg("size");
   EXPECT_STREQ(
-      "{\"type\":\"Bool\",\"id\":\"objects\\/bool-true\","
+      "{\"type\":\"bool\","
       "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/46\","
-      "\"name\":\"bool\"},\"valueAsString\":\"true\"}",
+      "\"name\":\"bool\"},"
+      "\"fields\":[],\"id\":\"objects\\/bool-true\","
+      "\"valueAsString\":\"true\"}",
       handler.msg());
 
   // int
   service_msg = Eval(lib, "[0, port, ['objects', 'int-123'], [], []]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_STREQ(
-      "{\"type\":\"Smi\","
+      "{\"type\":\"int\",\"_vmType\":\"Smi\","
       "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
       "\"name\":\"_Smi\",},"
       "\"fields\":[],"
@@ -608,11 +611,11 @@
   service_msg = Eval(lib, "[0, port, ['objects', '$validId'], [], []]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   handler.filterMsg("size");
   handler.filterMsg("id");
   EXPECT_STREQ(
-      "{\"type\":\"Array\","
+      "{\"type\":\"List\",\"_vmType\":\"Array\","
       "\"class\":{\"type\":\"@Class\",\"name\":\"_List\",},"
       "\"fields\":[],"
       "\"length\":1,"
@@ -620,14 +623,14 @@
           "\"index\":0,"
           "\"value\":{\"type\":\"@String\","
           "\"class\":{\"type\":\"@Class\",\"name\":\"_OneByteString\",},"
-          "\"valueAsString\":\"\\\"value\\\"\"}}]}",
+          "\"valueAsString\":\"value\"}}]}",
       handler.msg());
 
   // object id ring / invalid => expired
   service_msg = Eval(lib, "[0, port, ['objects', '99999999'], [], []]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_STREQ(
       "{\"type\":\"Sentinel\",\"id\":\"objects\\/expired\","
       "\"valueAsString\":\"<expired>\"}",
@@ -637,7 +640,7 @@
   service_msg = Eval(lib, "[0, port, ['objects', 'expired', 'eval'], [], []]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_STREQ(
       "{\"type\":\"Error\",\"id\":\"\","
       "\"message\":\"expected at most 2 arguments but found 3\\n\","
@@ -651,9 +654,9 @@
                      "['expr'], ['this+99']]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_STREQ(
-      "{\"type\":\"@Smi\","
+      "{\"type\":\"@int\",\"_vmType\":\"@Smi\","
       "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
       "\"name\":\"_Smi\",},"
       "\"id\":\"objects\\/int-222\","
@@ -666,9 +669,9 @@
                      "['expr'], ['null']]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_STREQ(
-      "{\"type\":\"@Null\",\"id\":\"objects\\/null\","
+      "{\"type\":\"@null\",\"id\":\"objects\\/null\","
       "\"valueAsString\":\"null\"}",
       handler.msg());
 
@@ -677,7 +680,7 @@
                      "['expr'], ['this']]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_STREQ(
       "{\"type\":\"Error\",\"id\":\"\",\"kind\":\"EvalExpired\","
       "\"message\":\"attempt to evaluate against expired object\\n\","
@@ -691,7 +694,7 @@
                      "['expr'], ['this+99']]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_STREQ(
       "{\"type\":\"Error\",\"id\":\"\","
       "\"message\":\"expected at most 3 arguments but found 4\\n\","
@@ -704,7 +707,7 @@
                      "[0, port, ['objects', '$validId', 'retained'], [], []]");
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   ExpectSubstringF(handler.msg(),
                    "\"id\":\"objects\\/int-%" Pd "\"",
                    arr.raw()->Size() + arr.At(0)->Size());
@@ -718,7 +721,7 @@
   ExpectSubstringF(
       handler.msg(),
       "{\"type\":\"RetainingPath\",\"id\":\"retaining_path\",\"length\":1,"
-      "\"elements\":[{\"index\":0,\"value\":{\"type\":\"@Array\"");
+      "\"elements\":[{\"index\":0,\"value\":{\"type\":\"@List\"");
 
   // Retaining path missing limit.
   service_msg = Eval(
@@ -853,7 +856,7 @@
       "\"elements\":[{\"index\":0,\"value\":{\"type\":\"@String\"");
   ExpectSubstringF(handler.msg(), "\"parentListIndex\":%" Pd, kElemIndex);
   ExpectSubstringF(handler.msg(),
-      "{\"index\":1,\"value\":{\"type\":\"@Array\"");
+      "{\"index\":1,\"value\":{\"type\":\"@List\"");
 }
 
 
@@ -897,9 +900,9 @@
                       vmlib.index());
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_STREQ(
-      "{\"type\":\"@Smi\","
+      "{\"type\":\"@int\",\"_vmType\":\"@Smi\","
       "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
       "\"name\":\"_Smi\",},\"id\":\"objects\\/int-54320\","
       "\"valueAsString\":\"54320\"}",
@@ -976,9 +979,9 @@
                       "['expr'], ['cobra + 100000']]", cid);
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  handler.filterMsg("vmName");
+  handler.filterMsg("_vmName");
   EXPECT_STREQ(
-      "{\"type\":\"@Smi\","
+      "{\"type\":\"@int\",\"_vmType\":\"@Smi\","
       "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
       "\"name\":\"_Smi\",},"
       "\"id\":\"objects\\/int-111235\","
@@ -1325,7 +1328,7 @@
                       address);
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
-  EXPECT_SUBSTRING("{\"type\":\"Null\",\"id\":\"objects\\/null\","
+  EXPECT_SUBSTRING("{\"type\":\"null\",\"id\":\"objects\\/null\","
                    "\"valueAsString\":\"null\"",
                    handler.msg());
 
@@ -1338,6 +1341,173 @@
 }
 
 
+TEST_CASE(Service_TokenStream) {
+  const char* kScript =
+      "var port;\n"  // Set to our mock port by C++.
+      "\n"
+      "main() {\n"
+      "}";
+
+  Isolate* isolate = Isolate::Current();
+
+  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
+  EXPECT_VALID(lib);
+  Library& vmlib = Library::Handle();
+  vmlib ^= Api::UnwrapHandle(lib);
+  EXPECT(!vmlib.IsNull());
+
+  const String& script_name = String::Handle(String::New("test-lib"));
+  EXPECT(!script_name.IsNull());
+  const Script& script = Script::Handle(vmlib.LookupScript(script_name));
+  EXPECT(!script.IsNull());
+
+  const TokenStream& token_stream = TokenStream::Handle(script.tokens());
+  EXPECT(!token_stream.IsNull());
+  ObjectIdRing* ring = isolate->object_id_ring();
+  intptr_t id = ring->GetIdForObject(token_stream.raw());
+
+  // Build a mock message handler and wrap it in a dart port.
+  ServiceTestMessageHandler handler;
+  Dart_Port port_id = PortMap::CreatePort(&handler);
+  Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
+  EXPECT_VALID(port);
+  EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+
+  Array& service_msg = Array::Handle();
+
+  // Fetch object.
+  service_msg = EvalF(lib, "[0, port, ['objects', '%" Pd "'], [], []]", id);
+  Service::HandleIsolateMessage(isolate, service_msg);
+  handler.HandleNextMessage();
+
+  // Check type.
+  EXPECT_SUBSTRING("\"type\":\"Object\"", handler.msg());
+  EXPECT_SUBSTRING("\"_vmType\":\"TokenStream\"", handler.msg());
+  // Check for members array.
+  EXPECT_SUBSTRING("\"members\":[", handler.msg());
+}
+
+
+TEST_CASE(Service_PcDescriptors) {
+  const char* kScript =
+    "var port;\n"  // Set to our mock port by C++.
+    "\n"
+    "class A {\n"
+    "  var a;\n"
+    "  dynamic b() {}\n"
+    "  dynamic c() {\n"
+    "    var d = () { b(); };\n"
+    "    return d;\n"
+    "  }\n"
+    "}\n"
+    "main() {\n"
+    "  var z = new A();\n"
+    "  var x = z.c();\n"
+    "  x();\n"
+    "}";
+
+  Isolate* isolate = Isolate::Current();
+  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
+  EXPECT_VALID(lib);
+  Library& vmlib = Library::Handle();
+  vmlib ^= Api::UnwrapHandle(lib);
+  EXPECT(!vmlib.IsNull());
+  Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
+  EXPECT_VALID(result);
+  const Class& class_a = Class::Handle(GetClass(vmlib, "A"));
+  EXPECT(!class_a.IsNull());
+  const Function& function_c = Function::Handle(GetFunction(class_a, "c"));
+  EXPECT(!function_c.IsNull());
+  const Code& code_c = Code::Handle(function_c.CurrentCode());
+  EXPECT(!code_c.IsNull());
+
+  const PcDescriptors& descriptors =
+      PcDescriptors::Handle(code_c.pc_descriptors());
+  EXPECT(!descriptors.IsNull());
+  ObjectIdRing* ring = isolate->object_id_ring();
+  intptr_t id = ring->GetIdForObject(descriptors.raw());
+
+  // Build a mock message handler and wrap it in a dart port.
+  ServiceTestMessageHandler handler;
+  Dart_Port port_id = PortMap::CreatePort(&handler);
+  Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
+  EXPECT_VALID(port);
+  EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+
+  Array& service_msg = Array::Handle();
+
+  // Fetch object.
+  service_msg = EvalF(lib, "[0, port, ['objects', '%" Pd "'], [], []]", id);
+  Service::HandleIsolateMessage(isolate, service_msg);
+  handler.HandleNextMessage();
+  // Check type.
+  EXPECT_SUBSTRING("\"type\":\"Object\"", handler.msg());
+  EXPECT_SUBSTRING("\"_vmType\":\"PcDescriptors\"", handler.msg());
+  // Check for members array.
+  EXPECT_SUBSTRING("\"members\":[", handler.msg());
+}
+
+
+TEST_CASE(Service_LocalVarDescriptors) {
+  const char* kScript =
+    "var port;\n"  // Set to our mock port by C++.
+    "\n"
+    "class A {\n"
+    "  var a;\n"
+    "  dynamic b() {}\n"
+    "  dynamic c() {\n"
+    "    var d = () { b(); };\n"
+    "    return d;\n"
+    "  }\n"
+    "}\n"
+    "main() {\n"
+    "  var z = new A();\n"
+    "  var x = z.c();\n"
+    "  x();\n"
+    "}";
+
+  Isolate* isolate = Isolate::Current();
+  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
+  EXPECT_VALID(lib);
+  Library& vmlib = Library::Handle();
+  vmlib ^= Api::UnwrapHandle(lib);
+  EXPECT(!vmlib.IsNull());
+  Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
+  EXPECT_VALID(result);
+  const Class& class_a = Class::Handle(GetClass(vmlib, "A"));
+  EXPECT(!class_a.IsNull());
+  const Function& function_c = Function::Handle(GetFunction(class_a, "c"));
+  EXPECT(!function_c.IsNull());
+  const Code& code_c = Code::Handle(function_c.CurrentCode());
+  EXPECT(!code_c.IsNull());
+
+  const LocalVarDescriptors& descriptors =
+      LocalVarDescriptors::Handle(code_c.var_descriptors());
+  // Generate an ID for this object.
+  ObjectIdRing* ring = isolate->object_id_ring();
+  intptr_t id = ring->GetIdForObject(descriptors.raw());
+
+  // Build a mock message handler and wrap it in a dart port.
+  ServiceTestMessageHandler handler;
+  Dart_Port port_id = PortMap::CreatePort(&handler);
+  Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
+  EXPECT_VALID(port);
+  EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+
+  Array& service_msg = Array::Handle();
+
+  // Fetch object.
+  service_msg = EvalF(lib, "[0, port, ['objects', '%" Pd "'], [], []]", id);
+  Service::HandleIsolateMessage(isolate, service_msg);
+  handler.HandleNextMessage();
+  // Check type.
+  EXPECT_SUBSTRING("\"type\":\"Object\"", handler.msg());
+  EXPECT_SUBSTRING("\"_vmType\":\"LocalVarDescriptors\"", handler.msg());
+  // Check for members array.
+  EXPECT_SUBSTRING("\"members\":[", handler.msg());
+}
+
+
 TEST_CASE(Service_VM) {
   const char* kScript =
       "var port;\n"  // Set to our mock port by C++.
@@ -1877,7 +2047,7 @@
   Service::HandleIsolateMessage(isolate, service_msg);
   handler.HandleNextMessage();
   // TODO(turnidge): Should this be a ServiceException instead?
-  EXPECT_STREQ("{\"type\":\"@Null\",\"id\":\"objects\\/null\","
+  EXPECT_STREQ("{\"type\":\"@null\",\"id\":\"objects\\/null\","
                "\"valueAsString\":\"null\"}",
                handler.msg());
 }
diff --git a/runtime/vm/signal_handler.h b/runtime/vm/signal_handler.h
index c9c4389..b45c014 100644
--- a/runtime/vm/signal_handler.h
+++ b/runtime/vm/signal_handler.h
@@ -12,6 +12,9 @@
 #include <signal.h>  // NOLINT
 #include <ucontext.h>  // NOLINT
 #elif defined(TARGET_OS_ANDROID)
+#include <android/api-level.h>  // NOLINT
+/* Android <= 19 doesn't have ucontext.h */
+#if __ANDROID_API__ <= 19
 #include <signal.h>  // NOLINT
 #include <asm/sigcontext.h>  // NOLINT
 // These are not defined on Android, so we have to define them here.
@@ -23,6 +26,11 @@
   struct sigcontext uc_mcontext;
   uint32_t uc_sigmask;
 } ucontext_t;
+#else
+// Android > 19 has ucontext.h
+#include <signal.h>  // NOLINT
+#include <ucontext.h>  // NOLINT
+#endif  // __ANDROID_API__ <= 19
 #elif defined(TARGET_OS_MACOS)
 #include <signal.h>  // NOLINT
 #include <sys/ucontext.h>  // NOLINT
diff --git a/runtime/vm/signal_handler_android.cc b/runtime/vm/signal_handler_android.cc
index d8bf17e..4d2873a 100644
--- a/runtime/vm/signal_handler_android.cc
+++ b/runtime/vm/signal_handler_android.cc
@@ -14,6 +14,8 @@
 
 #if defined(TARGET_ARCH_ARM)
   pc = static_cast<uintptr_t>(mcontext.arm_pc);
+#elif defined(TARGET_ARCH_ARM64)
+  pc = static_cast<uintptr_t>(mcontext.pc);
 #else
   UNIMPLEMENTED();
 #endif  // TARGET_ARCH_...
@@ -26,6 +28,8 @@
 
 #if defined(TARGET_ARCH_ARM)
   fp = static_cast<uintptr_t>(mcontext.arm_fp);
+#elif defined(TARGET_ARCH_ARM64)
+  fp = static_cast<uintptr_t>(mcontext.regs[29]);
 #else
   UNIMPLEMENTED();
 #endif  // TARGET_ARCH_...
@@ -39,6 +43,8 @@
 
 #if defined(TARGET_ARCH_ARM)
   sp = static_cast<uintptr_t>(mcontext.arm_sp);
+#elif defined(TARGET_ARCH_ARM64)
+  sp = static_cast<uintptr_t>(mcontext.sp);
 #else
   UNIMPLEMENTED();
 #endif  // TARGET_ARCH_...
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index e467e3e..b43bdbc 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -5,7 +5,6 @@
 #include "vm/snapshot.h"
 
 #include "platform/assert.h"
-#include "vm/bigint_operations.h"
 #include "vm/bootstrap.h"
 #include "vm/class_finalizer.h"
 #include "vm/exceptions.h"
@@ -149,14 +148,14 @@
 
 
 RawSmi* BaseReader::ReadAsSmi() {
-  intptr_t value = ReadIntptrValue();
+  intptr_t value = Read<int32_t>();
   ASSERT((value & kSmiTagMask) == kSmiTag);
   return reinterpret_cast<RawSmi*>(value);
 }
 
 
 intptr_t BaseReader::ReadSmiValue() {
-  return  Smi::Value(ReadAsSmi());
+  return Smi::Value(ReadAsSmi());
 }
 
 
@@ -212,7 +211,7 @@
 RawClass* SnapshotReader::ReadClassId(intptr_t object_id) {
   ASSERT(kind_ != Snapshot::kFull);
   // Read the class header information and lookup the class.
-  intptr_t class_header = ReadIntptrValue();
+  intptr_t class_header = Read<int32_t>();
   ASSERT((class_header & kSmiTagMask) != kSmiTag);
   ASSERT(!IsVMIsolateObject(class_header) ||
          !IsSingletonClassId(GetVMIsolateObjectId(class_header)));
@@ -284,7 +283,7 @@
   ASSERT(GetBackRef(object_id) == NULL);
 
   // Read the class header information and lookup the class.
-  intptr_t class_header = ReadIntptrValue();
+  intptr_t class_header = Read<int32_t>();
 
   // Since we are only reading an object reference, If it is an instance kind
   // then we only need to figure out the class of the object and allocate an
@@ -504,7 +503,8 @@
     char* actual_version = OS::StrNDup(version, version_len);
     OS::SNPrint(message_buffer,
                 kMessageBufferSize,
-                "Wrong full snapshot version, expected '%s' found '%s'",
+                "Wrong %s snapshot version, expected '%s' found '%s'",
+                (kind_ == Snapshot::kFull) ? "full" : "script",
                 Version::SnapshotString(),
                 actual_version);
     free(actual_version);
@@ -616,19 +616,6 @@
 }
 
 
-RawBigint* SnapshotReader::NewBigint(const char* hex_string) {
-  ASSERT(kind_ == Snapshot::kFull);
-  ASSERT(isolate()->no_gc_scope_depth() != 0);
-  intptr_t bigint_length = BigintOperations::ComputeChunkLength(hex_string);
-  RawBigint* obj = reinterpret_cast<RawBigint*>(
-      AllocateUninitialized(kBigintCid, Bigint::InstanceSize(bigint_length)));
-  obj->ptr()->allocated_length_ = bigint_length;
-  obj->ptr()->signed_length_ = bigint_length;
-  BigintOperations::FromHexCString(hex_string, Bigint::Handle(obj));
-  return obj;
-}
-
-
 RawDouble* SnapshotReader::NewDouble(double value) {
   ASSERT(kind_ == Snapshot::kFull);
   ASSERT(isolate()->no_gc_scope_depth() != 0);
@@ -657,6 +644,11 @@
       AllocateUninitialized(k##type##Cid, type::InstanceSize()));              \
 
 
+RawBigint* SnapshotReader::NewBigint() {
+  ALLOC_NEW_OBJECT(Bigint);
+}
+
+
 RawUnresolvedClass* SnapshotReader::NewUnresolvedClass() {
   ALLOC_NEW_OBJECT(UnresolvedClass);
 }
@@ -931,7 +923,7 @@
 
 RawObject* SnapshotReader::ReadInlinedObject(intptr_t object_id) {
   // Read the class header information and lookup the class.
-  intptr_t class_header = ReadIntptrValue();
+  intptr_t class_header = Read<int32_t>();
   intptr_t tags = ReadTags();
   if (SerializedHeaderData::decode(class_header) == kInstanceObjectId) {
     // Object is regular dart instance.
@@ -1653,7 +1645,7 @@
   WriteInlinedObjectHeader(object_id);
 
   // Indicate this is an instance object.
-  WriteIntptrValue(SerializedHeaderData::encode(kInstanceObjectId));
+  Write<int32_t>(SerializedHeaderData::encode(kInstanceObjectId));
 
   // Write out the tags.
   WriteTags(tags);
@@ -1688,7 +1680,7 @@
   WriteInlinedObjectHeader(kOmittedObjectId);
 
   // Indicate this is an instance object.
-  WriteIntptrValue(SerializedHeaderData::encode(kInstanceObjectId));
+  Write<int32_t>(SerializedHeaderData::encode(kInstanceObjectId));
 
   // Write out the class information for this object.
   WriteObjectImpl(cls);
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h
index 463e022..82e689f 100644
--- a/runtime/vm/snapshot.h
+++ b/runtime/vm/snapshot.h
@@ -54,6 +54,7 @@
 class RawLiteralToken;
 class RawMint;
 class RawMixinAppType;
+class RawBigint;
 class RawNamespace;
 class RawObject;
 class RawOneByteString;
@@ -93,8 +94,8 @@
   kObjectId = 0x3,
 };
 static const int8_t kHeaderTagBits = 2;
-static const int8_t kObjectIdBits = (kBitsPerWord - (kHeaderTagBits + 1));
-static const intptr_t kMaxObjectId = (kUwordMax >> (kHeaderTagBits + 1));
+static const int8_t kObjectIdBits = (kBitsPerInt32 - (kHeaderTagBits + 1));
+static const intptr_t kMaxObjectId = (kMaxUint32 >> (kHeaderTagBits + 1));
 
 
 class SerializedHeaderTag : public BitField<enum SerializedHeaderType,
@@ -187,13 +188,6 @@
     return ReadStream::Raw<sizeof(T), T>::Read(&stream_);
   }
 
-  // Reads an intptr_t type value.
-  intptr_t ReadIntptrValue() {
-    int64_t value = Read<int64_t>();
-    ASSERT((value <= kIntptrMax) && (value >= kIntptrMin));
-    return static_cast<intptr_t>(value);
-  }
-
   intptr_t ReadRawPointerValue() {
     int64_t value = Read<int64_t>();
     return static_cast<intptr_t>(value);
@@ -297,7 +291,7 @@
   RawClass* NewClass(intptr_t class_id);
   RawInstance* NewInstance();
   RawMint* NewMint(int64_t value);
-  RawBigint* NewBigint(const char* hex_string);
+  RawBigint* NewBigint();
   RawTypedData* NewTypedData(intptr_t class_id, intptr_t len);
   RawDouble* NewDouble(double value);
   RawUnresolvedClass* NewUnresolvedClass();
@@ -411,6 +405,7 @@
   friend class Library;
   friend class LibraryPrefix;
   friend class Namespace;
+  friend class Bigint;
   friend class LiteralToken;
   friend class PatchClass;
   friend class Script;
@@ -440,12 +435,6 @@
     WriteStream::Raw<sizeof(T), T>::Write(&stream_, value);
   }
 
-  // Writes an intptr_t type value out.
-  void WriteIntptrValue(intptr_t value) {
-    ASSERT((value >= kMinInt32) && (value <= kMaxInt32));
-    Write<int64_t>(value);
-  }
-
   void WriteRawPointerValue(intptr_t value) {
     Write<int64_t>(value);
   }
@@ -457,7 +446,7 @@
     intptr_t value = 0;
     value = SerializedHeaderTag::update(kObjectId, value);
     value = SerializedHeaderData::update(object_id, value);
-    WriteIntptrValue(value);
+    Write<int32_t>(value);
   }
 
   // Write a VM Isolateobject that is serialized as an Id.
@@ -466,7 +455,7 @@
     intptr_t value = 0;
     value = SerializedHeaderTag::update(kObjectId, value);
     value = SerializedHeaderData::update(object_id, value);
-    WriteIntptrValue(-value);  // Write as a negative value.
+    Write<int32_t>(-value);  // Write as a negative value.
   }
 
   // Write serialization header information for an object.
@@ -475,7 +464,7 @@
     intptr_t value = 0;
     value = SerializedHeaderTag::update(kInlined, value);
     value = SerializedHeaderData::update(id, value);
-    WriteIntptrValue(value);
+    Write<int32_t>(value);
   }
 
   void WriteTags(intptr_t tags) {
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index ee8909b..fe78fda 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -6,7 +6,6 @@
 
 #include "include/dart_debugger_api.h"
 #include "platform/assert.h"
-#include "vm/bigint_operations.h"
 #include "vm/class_finalizer.h"
 #include "vm/dart_api_impl.h"
 #include "vm/dart_api_message.h"
@@ -87,9 +86,14 @@
     case Dart_CObject_kInt64:
       EXPECT_EQ(first->value.as_int64, second->value.as_int64);
       break;
-    case Dart_CObject_kBigint:
-      EXPECT_STREQ(first->value.as_bigint, second->value.as_bigint);
+    case Dart_CObject_kBigint: {
+      char* first_hex_value = TestCase::BigintToHexValue(first);
+      char* second_hex_value = TestCase::BigintToHexValue(second);
+      EXPECT_STREQ(first_hex_value, second_hex_value);
+      free(first_hex_value);
+      free(second_hex_value);
       break;
+    }
     case Dart_CObject_kDouble:
       EXPECT_EQ(first->value.as_double, second->value.as_double);
       break;
@@ -397,17 +401,17 @@
   Bigint& obj = Bigint::Handle();
   obj ^= reader.ReadObject();
 
-  EXPECT_STREQ(BigintOperations::ToHexCString(bigint, &allocator),
-               BigintOperations::ToHexCString(obj, &allocator));
+  EXPECT_STREQ(bigint.ToHexCString(allocator), obj.ToHexCString(allocator));
 
   // Read object back from the snapshot into a C structure.
   ApiNativeScope scope;
   ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
   Dart_CObject* root = api_reader.ReadMessage();
-  // Bigint not supported.
   EXPECT_NOTNULL(root);
   EXPECT_EQ(Dart_CObject_kBigint, root->type);
-  EXPECT_STREQ("270FFFFFFFFFFFFFD8F0", root->value.as_bigint);
+  char* hex_value = TestCase::BigintToHexValue(root);
+  EXPECT_STREQ(cstr, hex_value);
+  free(hex_value);
   CheckEncodeDecodeMessage(root);
 }
 
@@ -424,9 +428,8 @@
                         Snapshot::kMessage, Isolate::Current());
   Bigint& serialized_bigint = Bigint::Handle();
   serialized_bigint ^= reader.ReadObject();
-  const char* str1 = BigintOperations::ToHexCString(bigint, allocator);
-  const char* str2 =
-      BigintOperations::ToHexCString(serialized_bigint, allocator);
+  const char* str1 = bigint.ToHexCString(allocator);
+  const char* str2 = serialized_bigint.ToHexCString(allocator);
   EXPECT_STREQ(str1, str2);
   free(const_cast<char*>(str1));
   free(const_cast<char*>(str2));
@@ -446,16 +449,12 @@
   ApiNativeScope scope;
 
   Bigint& bigint = Bigint::Handle();
-  bigint ^= BigintOperations::NewFromCString(bigint_value);
+  bigint ^= Bigint::NewFromCString(bigint_value);
   Dart_CObject* bigint_cobject = SerializeAndDeserializeBigint(bigint);
   EXPECT_EQ(Dart_CObject_kBigint, bigint_cobject->type);
-  if (bigint_value[0] == '0') {
-    EXPECT_STREQ(bigint_value + 2, bigint_cobject->value.as_bigint);
-  } else {
-    EXPECT_EQ('-', bigint_value[0]);
-    EXPECT_EQ('-', bigint_cobject->value.as_bigint[0]);
-    EXPECT_STREQ(bigint_value + 3, bigint_cobject->value.as_bigint + 1);
-  }
+  char* hex_value = TestCase::BigintToHexValue(bigint_cobject);
+  EXPECT_STREQ(bigint_value, hex_value);
+  free(hex_value);
 }
 
 
@@ -1638,8 +1637,9 @@
       Dart_CObject* root = api_reader.ReadMessage();
       EXPECT_NOTNULL(root);
       EXPECT_EQ(Dart_CObject_kBigint, root->type);
-      EXPECT_STREQ("-424242424242424242424242424242424242",
-                   root->value.as_bigint);
+      char* hex_value = TestCase::BigintToHexValue(root);
+      EXPECT_STREQ("-0x424242424242424242424242424242424242", hex_value);
+      free(hex_value);
       CheckEncodeDecodeMessage(root);
     }
     CheckString(ascii_string_result, "Hello, world!");
@@ -2085,8 +2085,9 @@
         Dart_CObject* element = root->value.as_array.values[i];
         EXPECT_EQ(root->value.as_array.values[0], element);
         EXPECT_EQ(Dart_CObject_kBigint, element->type);
-        EXPECT_STREQ("1234567890123456789012345678901234567890",
-                     element->value.as_bigint);
+        char* hex_value = TestCase::BigintToHexValue(element);
+        EXPECT_STREQ("0x1234567890123456789012345678901234567890", hex_value);
+        free(hex_value);
       }
     }
     {
@@ -2300,8 +2301,9 @@
         Dart_CObject* element = root->value.as_array.values[i];
         EXPECT_EQ(root->value.as_array.values[0], element);
         EXPECT_EQ(Dart_CObject_kBigint, element->type);
-        EXPECT_STREQ("1234567890123456789012345678901234567890",
-                     element->value.as_bigint);
+        char* hex_value = TestCase::BigintToHexValue(element);
+        EXPECT_STREQ("0x1234567890123456789012345678901234567890", hex_value);
+        free(hex_value);
       }
     }
     {
diff --git a/runtime/vm/stack_frame.cc b/runtime/vm/stack_frame.cc
index 902eb5a..c33c6f0 100644
--- a/runtime/vm/stack_frame.cc
+++ b/runtime/vm/stack_frame.cc
@@ -99,7 +99,9 @@
     Array maps;
     maps = Array::null();
     Stackmap map;
-    map = code.GetStackmap(pc(), &maps, &map);
+    const uword entry = reinterpret_cast<uword>(code.instructions()->ptr()) +
+                        Instructions::HeaderSize();
+    map = code.GetStackmap(pc() - entry, &maps, &map);
     if (!map.IsNull()) {
       RawObject** first = reinterpret_cast<RawObject**>(sp());
       RawObject** last = reinterpret_cast<RawObject**>(
diff --git a/runtime/vm/stub_code.h b/runtime/vm/stub_code.h
index 92fb93f..18d0e57 100644
--- a/runtime/vm/stub_code.h
+++ b/runtime/vm/stub_code.h
@@ -51,7 +51,7 @@
 // embedded objects and hence cannot be shared across isolates.
 #define STUB_CODE_LIST(V)                                                      \
   V(AllocateArray)                                                             \
-  V(CallNoSuchMethodFunction)                                                  \
+  V(CallClosureNoSuchMethod)                                                   \
   V(AllocateContext)                                                           \
   V(UpdateStoreBuffer)                                                         \
   V(OneArgCheckInlineCache)                                                    \
@@ -63,7 +63,6 @@
   V(OneArgOptimizedCheckInlineCache)                                           \
   V(TwoArgsOptimizedCheckInlineCache)                                          \
   V(ThreeArgsOptimizedCheckInlineCache)                                        \
-  V(ClosureCallInlineCache)                                                    \
   V(ZeroArgsUnoptimizedStaticCall)                                             \
   V(OneArgUnoptimizedStaticCall)                                               \
   V(TwoArgsUnoptimizedStaticCall)                                              \
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc
index 7328d4a..1bf4b23 100644
--- a/runtime/vm/stub_code_arm.cc
+++ b/runtime/vm/stub_code_arm.cc
@@ -1155,9 +1155,8 @@
 // Input parameters:
 //  LR : return address.
 //  SP : address of last argument.
-//  R5: inline cache data object.
 //  R4: arguments descriptor array.
-void StubCode::GenerateCallNoSuchMethodFunctionStub(Assembler* assembler) {
+void StubCode::GenerateCallClosureNoSuchMethodStub(Assembler* assembler) {
   __ EnterStubFrame();
 
   // Load the receiver.
@@ -1167,20 +1166,17 @@
 
   // Push space for the return value.
   // Push the receiver.
-  // Push IC data object.
   // Push arguments descriptor array.
   __ LoadImmediate(IP, reinterpret_cast<intptr_t>(Object::null()));
-  __ PushList((1 << R4) | (1 << R5) | (1 << R6) | (1 << IP));
+  __ PushList((1 << R4) | (1 << R6) | (1 << IP));
 
   // R2: Smi-tagged arguments array length.
   PushArgumentsArray(assembler);
 
-  __ CallRuntime(kInvokeNoSuchMethodFunctionRuntimeEntry, 4);
-  // Remove arguments.
-  __ Drop(4);
-  __ Pop(R0);  // Get result into R0.
-  __ LeaveStubFrame();
-  __ Ret();
+  const intptr_t kNumArgs = 3;
+  __ CallRuntime(kInvokeClosureNoSuchMethodRuntimeEntry, kNumArgs);
+  // noSuchMethod on closures always throws an error, so it will never return.
+  __ bkpt(0);
 }
 
 
@@ -1514,12 +1510,6 @@
 }
 
 
-void StubCode::GenerateClosureCallInlineCacheStub(Assembler* assembler) {
-  GenerateNArgsCheckInlineCacheStub(assembler, 1,
-      kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL);
-}
-
-
 // Intermediary stub between a static call and its target. ICData contains
 // the target function and the call count.
 // R5: ICData
diff --git a/runtime/vm/stub_code_arm64.cc b/runtime/vm/stub_code_arm64.cc
index 47bc713..967bc0b 100644
--- a/runtime/vm/stub_code_arm64.cc
+++ b/runtime/vm/stub_code_arm64.cc
@@ -1241,9 +1241,8 @@
 // Input parameters:
 //  LR : return address.
 //  SP : address of last argument.
-//  R5: inline cache data object.
 //  R4: arguments descriptor array.
-void StubCode::GenerateCallNoSuchMethodFunctionStub(Assembler* assembler) {
+void StubCode::GenerateCallClosureNoSuchMethodStub(Assembler* assembler) {
   __ EnterStubFrame(true);
 
   // Load the receiver.
@@ -1253,22 +1252,18 @@
 
   // Push space for the return value.
   // Push the receiver.
-  // Push IC data object.
   // Push arguments descriptor array.
   __ PushObject(Object::null_object(), PP);
   __ Push(R6);
-  __ Push(R5);
   __ Push(R4);
 
   // R2: Smi-tagged arguments array length.
   PushArgumentsArray(assembler);
 
-  __ CallRuntime(kInvokeNoSuchMethodFunctionRuntimeEntry, 4);
-  // Remove arguments.
-  __ Drop(4);
-  __ Pop(R0);  // Get result into R0.
-  __ LeaveStubFrame();
-  __ ret();
+  const intptr_t kNumArgs = 3;
+  __ CallRuntime(kInvokeClosureNoSuchMethodRuntimeEntry, kNumArgs);
+  // noSuchMethod on closures always throws an error, so it will never return.
+  __ brk(0);
 }
 
 
@@ -1629,12 +1624,6 @@
 }
 
 
-void StubCode::GenerateClosureCallInlineCacheStub(Assembler* assembler) {
-  GenerateNArgsCheckInlineCacheStub(assembler, 1,
-      kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL);
-}
-
-
 void StubCode::GenerateZeroArgsUnoptimizedStaticCallStub(Assembler* assembler) {
   GenerateUsageCounterIncrement(assembler, R6);
 #if defined(DEBUG)
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index 629ddef..22c44e0 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -1199,10 +1199,9 @@
 // Input parameters:
 //   ESP : points to return address.
 //   ESP + 4 : address of last argument.
-//   ECX : ic-data.
 //   EDX : arguments descriptor array.
 // Uses EAX, EBX, EDI as temporary registers.
-void StubCode::GenerateCallNoSuchMethodFunctionStub(Assembler* assembler) {
+void StubCode::GenerateCallClosureNoSuchMethodStub(Assembler* assembler) {
   __ EnterStubFrame();
 
   // Load the receiver.
@@ -1213,22 +1212,16 @@
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ pushl(raw_null);  // Setup space on stack for result from noSuchMethod.
   __ pushl(EAX);  // Receiver.
-  __ pushl(ECX);  // IC data array.
   __ pushl(EDX);  // Arguments descriptor array.
 
   __ movl(EDX, EDI);
   // EDX: Smi-tagged arguments array length.
   PushArgumentsArray(assembler);
 
-  __ CallRuntime(kInvokeNoSuchMethodFunctionRuntimeEntry, 4);
-
-  // Remove arguments.
-  __ Drop(4);
-  __ popl(EAX);  // Get result into EAX.
-
-  // Remove the stub frame as we are about to return.
-  __ LeaveFrame();
-  __ ret();
+  const intptr_t kNumArgs = 3;
+  __ CallRuntime(kInvokeClosureNoSuchMethodRuntimeEntry, kNumArgs);
+  // noSuchMethod on closures always throws an error, so it will never return.
+  __ int3();
 }
 
 
@@ -1582,13 +1575,6 @@
 }
 
 
-// Do not count as no type feedback is collected.
-void StubCode::GenerateClosureCallInlineCacheStub(Assembler* assembler) {
-  GenerateNArgsCheckInlineCacheStub(assembler, 1,
-      kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL);
-}
-
-
 // Intermediary stub between a static call and its target. ICData contains
 // the target function and the call count.
 // ECX: ICData
diff --git a/runtime/vm/stub_code_mips.cc b/runtime/vm/stub_code_mips.cc
index 62bda8b..ab5a77d 100644
--- a/runtime/vm/stub_code_mips.cc
+++ b/runtime/vm/stub_code_mips.cc
@@ -1299,9 +1299,8 @@
 // Input parameters:
 //  RA : return address.
 //  SP : address of last argument.
-//  S5: inline cache data object.
 //  S4: arguments descriptor array.
-void StubCode::GenerateCallNoSuchMethodFunctionStub(Assembler* assembler) {
+void StubCode::GenerateCallClosureNoSuchMethodStub(Assembler* assembler) {
   __ EnterStubFrame();
 
   // Load the receiver.
@@ -1312,22 +1311,20 @@
 
   // Push space for the return value.
   // Push the receiver.
-  // Push IC data object.
   // Push arguments descriptor array.
-  __ addiu(SP, SP, Immediate(-4 * kWordSize));
+  const intptr_t kNumArgs = 3;
+  __ addiu(SP, SP, Immediate(-kNumArgs * kWordSize));
   __ LoadImmediate(TMP, reinterpret_cast<intptr_t>(Object::null()));
-  __ sw(TMP, Address(SP, 3 * kWordSize));
-  __ sw(T6, Address(SP, 2 * kWordSize));
-  __ sw(S5, Address(SP, 1 * kWordSize));
+  __ sw(TMP, Address(SP, 2 * kWordSize));
+  __ sw(T6, Address(SP, 1 * kWordSize));
   __ sw(S4, Address(SP, 0 * kWordSize));
 
   // A1: Smi-tagged arguments array length.
   PushArgumentsArray(assembler);
 
-  __ CallRuntime(kInvokeNoSuchMethodFunctionRuntimeEntry, 4);
-
-  __ lw(V0, Address(SP, 4 * kWordSize));  // Get result into V0.
-  __ LeaveStubFrameAndReturn();
+  __ CallRuntime(kInvokeClosureNoSuchMethodRuntimeEntry, kNumArgs);
+  // noSuchMethod on closures always throws an error, so it will never return.
+  __ break_(0);
 }
 
 
@@ -1707,12 +1704,6 @@
 }
 
 
-void StubCode::GenerateClosureCallInlineCacheStub(Assembler* assembler) {
-  GenerateNArgsCheckInlineCacheStub(assembler, 1,
-      kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL);
-}
-
-
 // Intermediary stub between a static call and its target. ICData contains
 // the target function and the call count.
 // S5: ICData
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc
index 6956d08..0dbb8ac 100644
--- a/runtime/vm/stub_code_x64.cc
+++ b/runtime/vm/stub_code_x64.cc
@@ -1173,9 +1173,8 @@
 // Input parameters:
 //   RSP : points to return address.
 //   RSP + 8 : address of last argument.
-//   RBX : ic-data.
 //   R10 : arguments descriptor array.
-void StubCode::GenerateCallNoSuchMethodFunctionStub(Assembler* assembler) {
+void StubCode::GenerateCallClosureNoSuchMethodStub(Assembler* assembler) {
   __ EnterStubFrame();
 
   // Load the receiver.
@@ -1185,21 +1184,15 @@
   __ LoadObject(R12, Object::null_object(), PP);
   __ pushq(R12);  // Setup space on stack for result from noSuchMethod.
   __ pushq(RAX);  // Receiver.
-  __ pushq(RBX);  // IC data array.
   __ pushq(R10);  // Arguments descriptor array.
 
   __ movq(R10, R13);  // Smi-tagged arguments array length.
   PushArgumentsArray(assembler);
 
-  __ CallRuntime(kInvokeNoSuchMethodFunctionRuntimeEntry, 4);
-
-  // Remove arguments.
-  __ Drop(4);
-  __ popq(RAX);  // Get result into RAX.
-
-  // Remove the stub frame as we are about to return.
-  __ LeaveStubFrame();
-  __ ret();
+  const intptr_t kNumArgs = 3;
+  __ CallRuntime(kInvokeClosureNoSuchMethodRuntimeEntry, kNumArgs);
+  // noSuchMethod on closures always throws an error, so it will never return.
+  __ int3();
 }
 
 
@@ -1553,13 +1546,6 @@
 }
 
 
-// Do not count as no type feedback is collected.
-void StubCode::GenerateClosureCallInlineCacheStub(Assembler* assembler) {
-  GenerateNArgsCheckInlineCacheStub(assembler, 1,
-      kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL);
-}
-
-
 // Intermediary stub between a static call and its target. ICData contains
 // the target function and the call count.
 // RBX: ICData
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index a64f344..09a234a 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -60,6 +60,8 @@
   V(SavedCurrentContextVar, ":saved_current_context_var")                      \
   V(SavedEntryContextVar, ":saved_entry_context_var")                          \
   V(SavedTryContextVar, ":saved_try_context_var")                              \
+  V(ExceptionParameter, ":exception")                                          \
+  V(StackTraceParameter, ":stack_trace")                                       \
   V(ExceptionVar, ":exception_var")                                            \
   V(StackTraceVar, ":stack_trace_var")                                         \
   V(ListLiteralElement, "list literal element")                                \
@@ -71,14 +73,18 @@
   V(AsyncCompleter, ":async_completer")                                        \
   V(AsyncOperation, ":async_op")                                               \
   V(AsyncOperationParam, ":async_result")                                      \
+  V(AsyncOperationErrorParam, ":async_error_param")                            \
+  V(AsyncCatchHelper, "_asyncCatchHelper")                                     \
   V(Await, "await")                                                            \
   V(AwaitContextVar, ":await_ctx_var")                                         \
   V(AwaitJumpVar, ":await_jump_var")                                           \
   V(Future, "Future")                                                          \
   V(FutureConstructor, "Future.")                                              \
   V(FutureThen, "then")                                                        \
+  V(FutureCatchError, "catchError")                                            \
   V(Completer, "Completer")                                                    \
   V(CompleterComplete, "complete")                                             \
+  V(CompleterCompleteError, "completeError")                                   \
   V(CompleterConstructor, "Completer.")                                        \
   V(CompleterFuture, "future")                                                 \
   V(Native, "native")                                                          \
@@ -129,8 +135,11 @@
   V(_Smi, "_Smi")                                                              \
   V(_Mint, "_Mint")                                                            \
   V(_Bigint, "_Bigint")                                                        \
+  V(_BigintFromDoubleFactory, "_Bigint._fromDouble")                           \
   V(_Double, "_Double")                                                        \
   V(Bool, "bool")                                                              \
+  V(True, "true")                                                              \
+  V(False, "false")                                                            \
   V(_List, "_List")                                                            \
   V(_ListFactory, "_List.")                                                    \
   V(_GrowableList, "_GrowableList")                                            \
@@ -314,6 +323,7 @@
   V(Default, "Default")                                                        \
   V(StubPrefix, "[Stub] ")                                                     \
   V(ClassID, "ClassID")                                                        \
+  V(DartIsVM, "dart.isVM")                                                     \
 
 
 // Contains a list of frequently used strings in a canonicalized form. This
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index 3595d4f..6518b3a 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -70,6 +70,10 @@
     return result;
   }
 
+  Dart_Handle builtin_lib =
+      Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
+  DART_CHECK_VALID(builtin_lib);
+
   bool is_dart_scheme_url = DartUtils::IsDartSchemeURL(url_chars);
   bool is_io_library = DartUtils::IsDartIOLibURL(library_url_string);
   if (tag == Dart_kCanonicalizeUrl) {
@@ -78,9 +82,6 @@
     if (is_dart_scheme_url || is_io_library) {
       return url;
     }
-    Dart_Handle builtin_lib =
-        Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
-    DART_CHECK_VALID(builtin_lib);
 
     Dart_Handle library_url = Dart_LibraryUrl(library);
     if (Dart_IsError(library_url)) {
@@ -94,7 +95,7 @@
     if (DartUtils::IsDartIOLibURL(url_chars)) {
       return Builtin::LoadAndCheckLibrary(Builtin::kIOLibrary);
     } else if (DartUtils::IsDartBuiltinLibURL(url_chars)) {
-      return Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
+      return builtin_lib;
     } else {
       return DartUtils::NewError("Do not know how to load '%s'", url_chars);
     }
@@ -107,7 +108,15 @@
                                                url_chars),
                            0, 0);
   }
-  return DartUtils::LoadSource(library, url, tag, url_chars);
+  // Do sync loading since unit_test doesn't support async.
+  Dart_Handle source = DartUtils::ReadStringFromFile(url_chars);
+  EXPECT_VALID(source);
+  if (tag == Dart_kImportTag) {
+    return Dart_LoadLibrary(url, source, 0, 0);
+  } else {
+    ASSERT(tag == Dart_kSourceTag);
+    return Dart_LoadSource(library, url, source, 0, 0);
+  }
 }
 
 
@@ -156,6 +165,11 @@
 }
 
 
+char* TestCase::BigintToHexValue(Dart_CObject* bigint) {
+  return bin::CObject::BigintToHexValue(bigint);
+}
+
+
 void AssemblerTest::Assemble() {
   const String& function_name = String::ZoneHandle(Symbols::New(name_));
   const Class& cls = Class::ZoneHandle(
diff --git a/runtime/vm/unit_test.h b/runtime/vm/unit_test.h
index f73617a..39dfe59 100644
--- a/runtime/vm/unit_test.h
+++ b/runtime/vm/unit_test.h
@@ -5,7 +5,7 @@
 #ifndef VM_UNIT_TEST_H_
 #define VM_UNIT_TEST_H_
 
-#include "include/dart_api.h"
+#include "include/dart_native_api.h"
 
 #include "platform/globals.h"
 
@@ -261,6 +261,7 @@
   static Dart_Handle library_handler(Dart_LibraryTag tag,
                                      Dart_Handle library,
                                      Dart_Handle url);
+  static char* BigintToHexValue(Dart_CObject* bigint);
 
   virtual void Run();
 
diff --git a/runtime/vm/utils_test.cc b/runtime/vm/utils_test.cc
index 97385a6..9d5b20e 100644
--- a/runtime/vm/utils_test.cc
+++ b/runtime/vm/utils_test.cc
@@ -117,6 +117,23 @@
 }
 
 
+UNIT_TEST_CASE(CountZeros) {
+  EXPECT_EQ(0, Utils::CountTrailingZeros(0x1));
+  EXPECT_EQ(kBitsPerWord - 1, Utils::CountLeadingZeros(0x1));
+  EXPECT_EQ(1, Utils::CountTrailingZeros(0x2));
+  EXPECT_EQ(kBitsPerWord - 2, Utils::CountLeadingZeros(0x2));
+  EXPECT_EQ(0, Utils::CountTrailingZeros(0x3));
+  EXPECT_EQ(kBitsPerWord - 2, Utils::CountLeadingZeros(0x3));
+  EXPECT_EQ(2, Utils::CountTrailingZeros(0x4));
+  EXPECT_EQ(kBitsPerWord - 3, Utils::CountLeadingZeros(0x4));
+  EXPECT_EQ(0, Utils::CountTrailingZeros(kUwordMax));
+  EXPECT_EQ(0, Utils::CountLeadingZeros(kUwordMax));
+  static const uword kTopBit = static_cast<uword>(1) << (kBitsPerWord - 1);
+  EXPECT_EQ(kBitsPerWord - 1, Utils::CountTrailingZeros(kTopBit));
+  EXPECT_EQ(0, Utils::CountLeadingZeros(kTopBit));
+}
+
+
 UNIT_TEST_CASE(IsInt) {
   EXPECT(Utils::IsInt(8, 16));
   EXPECT(Utils::IsInt(8, 127));
diff --git a/runtime/vm/version.h b/runtime/vm/version.h
index 0ced9b3..45afcb5 100644
--- a/runtime/vm/version.h
+++ b/runtime/vm/version.h
@@ -16,6 +16,7 @@
 
  private:
   static const char* str_;
+  static const char* snapshot_hash_;
 };
 
 }  // namespace dart
diff --git a/runtime/vm/version_in.cc b/runtime/vm/version_in.cc
index 9f515d9..34d7fc6 100644
--- a/runtime/vm/version_in.cc
+++ b/runtime/vm/version_in.cc
@@ -28,10 +28,10 @@
 
 
 const char* Version::SnapshotString() {
-  return str_;
+  return snapshot_hash_;
 }
 
-
+const char* Version::snapshot_hash_ = "{{SNAPSHOT_HASH}}";
 const char* Version::str_ = "{{VERSION_STR}} ({{BUILD_TIME}})";
 
 }  // namespace dart
diff --git a/runtime/vm/vm.gypi b/runtime/vm/vm.gypi
index fc981ef..43d82d2 100644
--- a/runtime/vm/vm.gypi
+++ b/runtime/vm/vm.gypi
@@ -65,6 +65,14 @@
             ],
           },
         }],
+        ['OS=="android" and _toolset=="host"', {
+          'link_settings': {
+            'libraries': [
+              '-lpthread',
+              '-lrt',
+            ],
+          },
+        }],
         ['OS=="win"', {
           'sources/' : [
             ['exclude', 'gdbjit.cc'],
diff --git a/runtime/vm/vm_sources.gypi b/runtime/vm/vm_sources.gypi
index 34cdaca..7dbd0d8 100644
--- a/runtime/vm/vm_sources.gypi
+++ b/runtime/vm/vm_sources.gypi
@@ -44,9 +44,7 @@
     'base_isolate.h',
     'benchmark_test.cc',
     'benchmark_test.h',
-    'bigint_operations.cc',
-    'bigint_operations.h',
-    'bigint_operations_test.cc',
+    'bit_set_test.cc',
     'bit_vector.cc',
     'bit_vector.h',
     'bit_vector_test.cc',
diff --git a/sdk/bin/pub b/sdk/bin/pub
index 156b7c9..07d944f 100755
--- a/sdk/bin/pub
+++ b/sdk/bin/pub
@@ -59,8 +59,8 @@
 # Compile async/await down to vanilla Dart.
 # TODO(rnystrom): Remove this when #104 is fixed.
 ASYNC_COMPILER="$SDK_DIR/lib/_internal/pub/bin/async_compile.dart"
-"$DART" "--package-root=$PACKAGES_DIR" "$ASYNC_COMPILER" "$BUILD_DIR" --silent
+"$DART" "--package-root=$PACKAGES_DIR" "$ASYNC_COMPILER" "$BUILD_DIR"
 
 # Run the async/await compiled pub.
-PUB="$BUILD_DIR/pub_async/bin/pub.dart"
+PUB="$SDK_DIR/lib/_internal/pub_generated/bin/pub.dart"
 exec "$DART" "${VM_OPTIONS[@]}" "--package-root=$PACKAGES_DIR" "$PUB" "$@"
diff --git a/sdk/bin/pub.bat b/sdk/bin/pub.bat
index 0524075..b102021 100644
--- a/sdk/bin/pub.bat
+++ b/sdk/bin/pub.bat
@@ -37,11 +37,10 @@
 rem Compile async/await down to vanilla Dart.
 rem TODO(rnystrom): Remove this when #104 is fixed.
 set ASYNC_COMPILER="%SDK_DIR%"\lib\_internal\pub\bin\async_compile.dart
-"%DART%" --package-root="%PACKAGES_DIR%" "%ASYNC_COMPILER%" "%BUILD_DIR%" ^
-    --silent
+"%DART%" --package-root="%PACKAGES_DIR%" "%ASYNC_COMPILER%" "%BUILD_DIR%"
 
 rem Run the async/await compiled pub.
-set PUB="%BUILD_DIR%\pub_async\bin\pub.dart"
+set PUB="%SDK_DIR%"\lib\_internal\pub_generated\bin\pub.dart"
 "%DART%" %VM_OPTIONS% --package-root="%PACKAGES_DIR%" "%PUB%" %*
 
 endlocal
diff --git a/sdk/lib/_blink/dartium/_blink_dartium.dart b/sdk/lib/_blink/dartium/_blink_dartium.dart
index e9758ae..0d5e5f8 100644
--- a/sdk/lib/_blink/dartium/_blink_dartium.dart
+++ b/sdk/lib/_blink/dartium/_blink_dartium.dart
@@ -15,541 +15,541 @@
 
 
 class BlinkANGLEInstancedArrays {
-  static $drawArraysInstancedANGLE_Callback(mthis, mode, first, count, primcount) native "ANGLEInstancedArrays_drawArraysInstancedANGLE_Callback_RESOLVER_STRING_4_unsigned long_long_long_long";
+  static drawArraysInstancedANGLE_Callback_ul_long_long_long(mthis, mode, first, count, primcount) native "ANGLEInstancedArrays_drawArraysInstancedANGLE_Callback_unsigned long_long_long_long";
 
-  static $drawElementsInstancedANGLE_Callback(mthis, mode, count, type, offset, primcount) native "ANGLEInstancedArrays_drawElementsInstancedANGLE_Callback_RESOLVER_STRING_5_unsigned long_long_unsigned long_long long_long";
+  static drawElementsInstancedANGLE_Callback_ul_long_ul_ll_long(mthis, mode, count, type, offset, primcount) native "ANGLEInstancedArrays_drawElementsInstancedANGLE_Callback_unsigned long_long_unsigned long_long long_long";
 
-  static $vertexAttribDivisorANGLE_Callback(mthis, index, divisor) native "ANGLEInstancedArrays_vertexAttribDivisorANGLE_Callback_RESOLVER_STRING_2_unsigned long_long";
+  static vertexAttribDivisorANGLE_Callback_ul_long(mthis, index, divisor) native "ANGLEInstancedArrays_vertexAttribDivisorANGLE_Callback_unsigned long_long";
 }
 
 class BlinkAbstractWorker {}
 
 class BlinkAlgorithm {
-  static $name_Getter(mthis) native "KeyAlgorithm_name_Getter";
+  static name_Getter(mthis) native "KeyAlgorithm_name_Getter";
 }
 
 class BlinkEventTarget {
-  static $addEventListener_Callback(mthis, type, listener, useCapture) native "EventTarget_addEventListener_Callback_RESOLVER_STRING_3_DOMString_EventListener_boolean";
+  static addEventListener_Callback_DOMString_EventListener_boolean(mthis, type, listener, useCapture) native "EventTarget_addEventListener_Callback_DOMString_EventListener_boolean";
 
-  static $dispatchEvent_Callback(mthis, event) native "EventTarget_dispatchEvent_Callback_RESOLVER_STRING_1_Event";
+  static dispatchEvent_Callback_Event(mthis, event) native "EventTarget_dispatchEvent_Callback_Event";
 
-  static $removeEventListener_Callback(mthis, type, listener, useCapture) native "EventTarget_removeEventListener_Callback_RESOLVER_STRING_3_DOMString_EventListener_boolean";
+  static removeEventListener_Callback_DOMString_EventListener_boolean(mthis, type, listener, useCapture) native "EventTarget_removeEventListener_Callback_DOMString_EventListener_boolean";
 }
 
 class BlinkAudioNode {
-  static $channelCount_Getter(mthis) native "AudioNode_channelCount_Getter";
+  static channelCount_Getter(mthis) native "AudioNode_channelCount_Getter";
 
-  static $channelCount_Setter(mthis, value) native "AudioNode_channelCount_Setter";
+  static channelCount_Setter_ul(mthis, value) native "AudioNode_channelCount_Setter";
 
-  static $channelCountMode_Getter(mthis) native "AudioNode_channelCountMode_Getter";
+  static channelCountMode_Getter(mthis) native "AudioNode_channelCountMode_Getter";
 
-  static $channelCountMode_Setter(mthis, value) native "AudioNode_channelCountMode_Setter";
+  static channelCountMode_Setter_DOMString(mthis, value) native "AudioNode_channelCountMode_Setter";
 
-  static $channelInterpretation_Getter(mthis) native "AudioNode_channelInterpretation_Getter";
+  static channelInterpretation_Getter(mthis) native "AudioNode_channelInterpretation_Getter";
 
-  static $channelInterpretation_Setter(mthis, value) native "AudioNode_channelInterpretation_Setter";
+  static channelInterpretation_Setter_DOMString(mthis, value) native "AudioNode_channelInterpretation_Setter";
 
-  static $context_Getter(mthis) native "AudioNode_context_Getter";
+  static context_Getter(mthis) native "AudioNode_context_Getter";
 
-  static $numberOfInputs_Getter(mthis) native "AudioNode_numberOfInputs_Getter";
+  static numberOfInputs_Getter(mthis) native "AudioNode_numberOfInputs_Getter";
 
-  static $numberOfOutputs_Getter(mthis) native "AudioNode_numberOfOutputs_Getter";
+  static numberOfOutputs_Getter(mthis) native "AudioNode_numberOfOutputs_Getter";
 
-  static $_connect_1_Callback(mthis, destination, output, input) native "AudioNode_connect_Callback_RESOLVER_STRING_3_AudioNode_unsigned long_unsigned long";
+  static connect_Callback_AudioNode_ul_ul(mthis, destination, output, input) native "AudioNode_connect_Callback_AudioNode_unsigned long_unsigned long";
 
-  static $_connect_2_Callback(mthis, destination, output) native "AudioNode_connect_Callback_RESOLVER_STRING_2_AudioParam_unsigned long";
+  static connect_Callback_AudioParam_ul(mthis, destination, output) native "AudioNode_connect_Callback_AudioParam_unsigned long";
 
-  static $disconnect_Callback(mthis, output) native "AudioNode_disconnect_Callback_RESOLVER_STRING_1_unsigned long";
+  static disconnect_Callback_ul(mthis, output) native "AudioNode_disconnect_Callback_unsigned long";
 }
 
 class BlinkAnalyserNode {
-  static $fftSize_Getter(mthis) native "AnalyserNode_fftSize_Getter";
+  static fftSize_Getter(mthis) native "AnalyserNode_fftSize_Getter";
 
-  static $fftSize_Setter(mthis, value) native "AnalyserNode_fftSize_Setter";
+  static fftSize_Setter_ul(mthis, value) native "AnalyserNode_fftSize_Setter";
 
-  static $frequencyBinCount_Getter(mthis) native "AnalyserNode_frequencyBinCount_Getter";
+  static frequencyBinCount_Getter(mthis) native "AnalyserNode_frequencyBinCount_Getter";
 
-  static $maxDecibels_Getter(mthis) native "AnalyserNode_maxDecibels_Getter";
+  static maxDecibels_Getter(mthis) native "AnalyserNode_maxDecibels_Getter";
 
-  static $maxDecibels_Setter(mthis, value) native "AnalyserNode_maxDecibels_Setter";
+  static maxDecibels_Setter_float(mthis, value) native "AnalyserNode_maxDecibels_Setter";
 
-  static $minDecibels_Getter(mthis) native "AnalyserNode_minDecibels_Getter";
+  static minDecibels_Getter(mthis) native "AnalyserNode_minDecibels_Getter";
 
-  static $minDecibels_Setter(mthis, value) native "AnalyserNode_minDecibels_Setter";
+  static minDecibels_Setter_float(mthis, value) native "AnalyserNode_minDecibels_Setter";
 
-  static $smoothingTimeConstant_Getter(mthis) native "AnalyserNode_smoothingTimeConstant_Getter";
+  static smoothingTimeConstant_Getter(mthis) native "AnalyserNode_smoothingTimeConstant_Getter";
 
-  static $smoothingTimeConstant_Setter(mthis, value) native "AnalyserNode_smoothingTimeConstant_Setter";
+  static smoothingTimeConstant_Setter_float(mthis, value) native "AnalyserNode_smoothingTimeConstant_Setter";
 
-  static $getByteFrequencyData_Callback(mthis, array) native "AnalyserNode_getByteFrequencyData_Callback_RESOLVER_STRING_1_Uint8Array";
+  static getByteFrequencyData_Callback_Uint8Array(mthis, array) native "AnalyserNode_getByteFrequencyData_Callback_Uint8Array";
 
-  static $getByteTimeDomainData_Callback(mthis, array) native "AnalyserNode_getByteTimeDomainData_Callback_RESOLVER_STRING_1_Uint8Array";
+  static getByteTimeDomainData_Callback_Uint8Array(mthis, array) native "AnalyserNode_getByteTimeDomainData_Callback_Uint8Array";
 
-  static $getFloatFrequencyData_Callback(mthis, array) native "AnalyserNode_getFloatFrequencyData_Callback_RESOLVER_STRING_1_Float32Array";
+  static getFloatFrequencyData_Callback_Float32Array(mthis, array) native "AnalyserNode_getFloatFrequencyData_Callback_Float32Array";
 }
 
 class BlinkTimedItem {
-  static $activeDuration_Getter(mthis) native "TimedItem_activeDuration_Getter";
+  static activeDuration_Getter(mthis) native "TimedItem_activeDuration_Getter";
 
-  static $currentIteration_Getter(mthis) native "TimedItem_currentIteration_Getter";
+  static currentIteration_Getter(mthis) native "TimedItem_currentIteration_Getter";
 
-  static $duration_Getter(mthis) native "TimedItem_duration_Getter";
+  static duration_Getter(mthis) native "TimedItem_duration_Getter";
 
-  static $endTime_Getter(mthis) native "TimedItem_endTime_Getter";
+  static endTime_Getter(mthis) native "TimedItem_endTime_Getter";
 
-  static $localTime_Getter(mthis) native "TimedItem_localTime_Getter";
+  static localTime_Getter(mthis) native "TimedItem_localTime_Getter";
 
-  static $player_Getter(mthis) native "TimedItem_player_Getter";
+  static player_Getter(mthis) native "TimedItem_player_Getter";
 
-  static $startTime_Getter(mthis) native "TimedItem_startTime_Getter";
+  static startTime_Getter(mthis) native "TimedItem_startTime_Getter";
 }
 
 class BlinkAnimation {
-  static $_create_1constructorCallback(target, keyframes, timingInput) native "Animation_constructorCallback_RESOLVER_STRING_3_Element_sequence<Dictionary>_Dictionary";
+  static constructorCallback_Element_SEQ_Dictionary_SEQ_Dictionary(target, keyframes, timingInput) native "Animation_constructorCallback_Element_sequence<Dictionary>_Dictionary";
 
-  static $_create_2constructorCallback(target, keyframes, timingInput) native "Animation_constructorCallback_RESOLVER_STRING_3_Element_sequence<Dictionary>_double";
+  static constructorCallback_Element_SEQ_Dictionary_SEQ_double(target, keyframes, timingInput) native "Animation_constructorCallback_Element_sequence<Dictionary>_double";
 
-  static $_create_3constructorCallback(target, keyframes) native "Animation_constructorCallback_RESOLVER_STRING_2_Element_sequence<Dictionary>";
+  static constructorCallback_Element_SEQ_Dictionary_SEQ(target, keyframes) native "Animation_constructorCallback_Element_sequence<Dictionary>";
 }
 
 class BlinkApplicationCache {
-  static $status_Getter(mthis) native "ApplicationCache_status_Getter";
+  static status_Getter(mthis) native "ApplicationCache_status_Getter";
 
-  static $abort_Callback(mthis) native "ApplicationCache_abort_Callback_RESOLVER_STRING_0_";
+  static abort_Callback(mthis) native "ApplicationCache_abort_Callback";
 
-  static $swapCache_Callback(mthis) native "ApplicationCache_swapCache_Callback_RESOLVER_STRING_0_";
+  static swapCache_Callback(mthis) native "ApplicationCache_swapCache_Callback";
 
-  static $update_Callback(mthis) native "ApplicationCache_update_Callback_RESOLVER_STRING_0_";
+  static update_Callback(mthis) native "ApplicationCache_update_Callback";
 }
 
 class BlinkNode {
-  static $baseURI_Getter(mthis) native "Node_baseURI_Getter";
+  static baseURI_Getter(mthis) native "Node_baseURI_Getter";
 
-  static $childNodes_Getter(mthis) native "Node_childNodes_Getter";
+  static childNodes_Getter(mthis) native "Node_childNodes_Getter";
 
-  static $firstChild_Getter(mthis) native "Node_firstChild_Getter";
+  static firstChild_Getter(mthis) native "Node_firstChild_Getter";
 
-  static $lastChild_Getter(mthis) native "Node_lastChild_Getter";
+  static lastChild_Getter(mthis) native "Node_lastChild_Getter";
 
-  static $localName_Getter(mthis) native "Node_localName_Getter";
+  static localName_Getter(mthis) native "Node_localName_Getter";
 
-  static $namespaceURI_Getter(mthis) native "Node_namespaceURI_Getter";
+  static namespaceURI_Getter(mthis) native "Node_namespaceURI_Getter";
 
-  static $nextSibling_Getter(mthis) native "Node_nextSibling_Getter";
+  static nextSibling_Getter(mthis) native "Node_nextSibling_Getter";
 
-  static $nodeName_Getter(mthis) native "Node_nodeName_Getter";
+  static nodeName_Getter(mthis) native "Node_nodeName_Getter";
 
-  static $nodeType_Getter(mthis) native "Node_nodeType_Getter";
+  static nodeType_Getter(mthis) native "Node_nodeType_Getter";
 
-  static $nodeValue_Getter(mthis) native "Node_nodeValue_Getter";
+  static nodeValue_Getter(mthis) native "Node_nodeValue_Getter";
 
-  static $ownerDocument_Getter(mthis) native "Node_ownerDocument_Getter";
+  static ownerDocument_Getter(mthis) native "Node_ownerDocument_Getter";
 
-  static $parentElement_Getter(mthis) native "Node_parentElement_Getter";
+  static parentElement_Getter(mthis) native "Node_parentElement_Getter";
 
-  static $parentNode_Getter(mthis) native "Node_parentNode_Getter";
+  static parentNode_Getter(mthis) native "Node_parentNode_Getter";
 
-  static $previousSibling_Getter(mthis) native "Node_previousSibling_Getter";
+  static previousSibling_Getter(mthis) native "Node_previousSibling_Getter";
 
-  static $textContent_Getter(mthis) native "Node_textContent_Getter";
+  static textContent_Getter(mthis) native "Node_textContent_Getter";
 
-  static $textContent_Setter(mthis, value) native "Node_textContent_Setter";
+  static textContent_Setter_DOMString(mthis, value) native "Node_textContent_Setter";
 
-  static $appendChild_Callback(mthis, newChild) native "Node_appendChild_Callback";
+  static appendChild_Callback_Node(mthis, newChild) native "Node_appendChild_Callback";
 
-  static $cloneNode_Callback(mthis, deep) native "Node_cloneNode_Callback";
+  static cloneNode_Callback_boolean(mthis, deep) native "Node_cloneNode_Callback";
 
-  static $contains_Callback(mthis, other) native "Node_contains_Callback_RESOLVER_STRING_1_Node";
+  static contains_Callback_Node(mthis, other) native "Node_contains_Callback_Node";
 
-  static $hasChildNodes_Callback(mthis) native "Node_hasChildNodes_Callback_RESOLVER_STRING_0_";
+  static hasChildNodes_Callback(mthis) native "Node_hasChildNodes_Callback";
 
-  static $insertBefore_Callback(mthis, newChild, refChild) native "Node_insertBefore_Callback";
+  static insertBefore_Callback_Node_Node(mthis, newChild, refChild) native "Node_insertBefore_Callback";
 
-  static $removeChild_Callback(mthis, oldChild) native "Node_removeChild_Callback";
+  static removeChild_Callback_Node(mthis, oldChild) native "Node_removeChild_Callback";
 
-  static $replaceChild_Callback(mthis, newChild, oldChild) native "Node_replaceChild_Callback";
+  static replaceChild_Callback_Node_Node(mthis, newChild, oldChild) native "Node_replaceChild_Callback";
 }
 
 class BlinkAttr {
-  static $localName_Getter(mthis) native "Attr_localName_Getter";
+  static localName_Getter(mthis) native "Attr_localName_Getter";
 
-  static $name_Getter(mthis) native "Attr_name_Getter";
+  static name_Getter(mthis) native "Attr_name_Getter";
 
-  static $namespaceURI_Getter(mthis) native "Attr_namespaceURI_Getter";
+  static namespaceURI_Getter(mthis) native "Attr_namespaceURI_Getter";
 
-  static $value_Getter(mthis) native "Attr_value_Getter";
+  static value_Getter(mthis) native "Attr_value_Getter";
 
-  static $value_Setter(mthis, value) native "Attr_value_Setter";
+  static value_Setter_DOMString(mthis, value) native "Attr_value_Setter";
 }
 
 class BlinkAudioBuffer {
-  static $duration_Getter(mthis) native "AudioBuffer_duration_Getter";
+  static duration_Getter(mthis) native "AudioBuffer_duration_Getter";
 
-  static $length_Getter(mthis) native "AudioBuffer_length_Getter";
+  static length_Getter(mthis) native "AudioBuffer_length_Getter";
 
-  static $numberOfChannels_Getter(mthis) native "AudioBuffer_numberOfChannels_Getter";
+  static numberOfChannels_Getter(mthis) native "AudioBuffer_numberOfChannels_Getter";
 
-  static $sampleRate_Getter(mthis) native "AudioBuffer_sampleRate_Getter";
+  static sampleRate_Getter(mthis) native "AudioBuffer_sampleRate_Getter";
 
-  static $getChannelData_Callback(mthis, channelIndex) native "AudioBuffer_getChannelData_Callback_RESOLVER_STRING_1_unsigned long";
+  static getChannelData_Callback_ul(mthis, channelIndex) native "AudioBuffer_getChannelData_Callback_unsigned long";
 }
 
 class BlinkAudioSourceNode {}
 
 class BlinkAudioBufferSourceNode {
-  static $buffer_Getter(mthis) native "AudioBufferSourceNode_buffer_Getter";
+  static buffer_Getter(mthis) native "AudioBufferSourceNode_buffer_Getter";
 
-  static $buffer_Setter(mthis, value) native "AudioBufferSourceNode_buffer_Setter";
+  static buffer_Setter_AudioBuffer(mthis, value) native "AudioBufferSourceNode_buffer_Setter";
 
-  static $loop_Getter(mthis) native "AudioBufferSourceNode_loop_Getter";
+  static loop_Getter(mthis) native "AudioBufferSourceNode_loop_Getter";
 
-  static $loop_Setter(mthis, value) native "AudioBufferSourceNode_loop_Setter";
+  static loop_Setter_boolean(mthis, value) native "AudioBufferSourceNode_loop_Setter";
 
-  static $loopEnd_Getter(mthis) native "AudioBufferSourceNode_loopEnd_Getter";
+  static loopEnd_Getter(mthis) native "AudioBufferSourceNode_loopEnd_Getter";
 
-  static $loopEnd_Setter(mthis, value) native "AudioBufferSourceNode_loopEnd_Setter";
+  static loopEnd_Setter_double(mthis, value) native "AudioBufferSourceNode_loopEnd_Setter";
 
-  static $loopStart_Getter(mthis) native "AudioBufferSourceNode_loopStart_Getter";
+  static loopStart_Getter(mthis) native "AudioBufferSourceNode_loopStart_Getter";
 
-  static $loopStart_Setter(mthis, value) native "AudioBufferSourceNode_loopStart_Setter";
+  static loopStart_Setter_double(mthis, value) native "AudioBufferSourceNode_loopStart_Setter";
 
-  static $playbackRate_Getter(mthis) native "AudioBufferSourceNode_playbackRate_Getter";
+  static playbackRate_Getter(mthis) native "AudioBufferSourceNode_playbackRate_Getter";
 
-  static $noteGrainOn_Callback(mthis, when, grainOffset, grainDuration) native "AudioBufferSourceNode_noteGrainOn_Callback_RESOLVER_STRING_3_double_double_double";
+  static noteGrainOn_Callback_double_double_double(mthis, when, grainOffset, grainDuration) native "AudioBufferSourceNode_noteGrainOn_Callback_double_double_double";
 
-  static $noteOff_Callback(mthis, when) native "AudioBufferSourceNode_noteOff_Callback_RESOLVER_STRING_1_double";
+  static noteOff_Callback_double(mthis, when) native "AudioBufferSourceNode_noteOff_Callback_double";
 
-  static $noteOn_Callback(mthis, when) native "AudioBufferSourceNode_noteOn_Callback_RESOLVER_STRING_1_double";
+  static noteOn_Callback_double(mthis, when) native "AudioBufferSourceNode_noteOn_Callback_double";
 
-  static $_start_1_Callback(mthis, when, grainOffset, grainDuration) native "AudioBufferSourceNode_start_Callback_RESOLVER_STRING_3_double_double_double";
+  static start_Callback_double_double_double(mthis, when, grainOffset, grainDuration) native "AudioBufferSourceNode_start_Callback_double_double_double";
 
-  static $_start_2_Callback(mthis, when, grainOffset) native "AudioBufferSourceNode_start_Callback_RESOLVER_STRING_2_double_double";
+  static start_Callback_double_double(mthis, when, grainOffset) native "AudioBufferSourceNode_start_Callback_double_double";
 
-  static $_start_3_Callback(mthis, when) native "AudioBufferSourceNode_start_Callback_RESOLVER_STRING_1_double";
+  static start_Callback_double(mthis, when) native "AudioBufferSourceNode_start_Callback_double";
 
-  static $_start_4_Callback(mthis) native "AudioBufferSourceNode_start_Callback_RESOLVER_STRING_0_";
+  static start_Callback(mthis) native "AudioBufferSourceNode_start_Callback";
 
-  static $_stop_1_Callback(mthis, when) native "AudioBufferSourceNode_stop_Callback_RESOLVER_STRING_1_double";
+  static stop_Callback_double(mthis, when) native "AudioBufferSourceNode_stop_Callback_double";
 
-  static $_stop_2_Callback(mthis) native "AudioBufferSourceNode_stop_Callback_RESOLVER_STRING_0_";
+  static stop_Callback(mthis) native "AudioBufferSourceNode_stop_Callback";
 }
 
 class BlinkAudioContext {
-  static $_create_1constructorCallback() native "AudioContext_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "AudioContext_constructorCallback";
 
-  static $currentTime_Getter(mthis) native "AudioContext_currentTime_Getter";
+  static currentTime_Getter(mthis) native "AudioContext_currentTime_Getter";
 
-  static $destination_Getter(mthis) native "AudioContext_destination_Getter";
+  static destination_Getter(mthis) native "AudioContext_destination_Getter";
 
-  static $listener_Getter(mthis) native "AudioContext_listener_Getter";
+  static listener_Getter(mthis) native "AudioContext_listener_Getter";
 
-  static $sampleRate_Getter(mthis) native "AudioContext_sampleRate_Getter";
+  static sampleRate_Getter(mthis) native "AudioContext_sampleRate_Getter";
 
-  static $createAnalyser_Callback(mthis) native "AudioContext_createAnalyser_Callback_RESOLVER_STRING_0_";
+  static createAnalyser_Callback(mthis) native "AudioContext_createAnalyser_Callback";
 
-  static $createBiquadFilter_Callback(mthis) native "AudioContext_createBiquadFilter_Callback_RESOLVER_STRING_0_";
+  static createBiquadFilter_Callback(mthis) native "AudioContext_createBiquadFilter_Callback";
 
-  static $createBuffer_Callback(mthis, numberOfChannels, numberOfFrames, sampleRate) native "AudioContext_createBuffer_Callback_RESOLVER_STRING_3_unsigned long_unsigned long_float";
+  static createBuffer_Callback_ul_ul_float(mthis, numberOfChannels, numberOfFrames, sampleRate) native "AudioContext_createBuffer_Callback_unsigned long_unsigned long_float";
 
-  static $createBufferSource_Callback(mthis) native "AudioContext_createBufferSource_Callback_RESOLVER_STRING_0_";
+  static createBufferSource_Callback(mthis) native "AudioContext_createBufferSource_Callback";
 
-  static $_createChannelMerger_1_Callback(mthis, numberOfInputs) native "AudioContext_createChannelMerger_Callback_RESOLVER_STRING_1_unsigned long";
+  static createChannelMerger_Callback_ul(mthis, numberOfInputs) native "AudioContext_createChannelMerger_Callback_unsigned long";
 
-  static $_createChannelMerger_2_Callback(mthis) native "AudioContext_createChannelMerger_Callback_RESOLVER_STRING_0_";
+  static createChannelMerger_Callback(mthis) native "AudioContext_createChannelMerger_Callback";
 
-  static $_createChannelSplitter_1_Callback(mthis, numberOfOutputs) native "AudioContext_createChannelSplitter_Callback_RESOLVER_STRING_1_unsigned long";
+  static createChannelSplitter_Callback_ul(mthis, numberOfOutputs) native "AudioContext_createChannelSplitter_Callback_unsigned long";
 
-  static $_createChannelSplitter_2_Callback(mthis) native "AudioContext_createChannelSplitter_Callback_RESOLVER_STRING_0_";
+  static createChannelSplitter_Callback(mthis) native "AudioContext_createChannelSplitter_Callback";
 
-  static $createConvolver_Callback(mthis) native "AudioContext_createConvolver_Callback_RESOLVER_STRING_0_";
+  static createConvolver_Callback(mthis) native "AudioContext_createConvolver_Callback";
 
-  static $_createDelay_1_Callback(mthis, maxDelayTime) native "AudioContext_createDelay_Callback_RESOLVER_STRING_1_double";
+  static createDelay_Callback_double(mthis, maxDelayTime) native "AudioContext_createDelay_Callback_double";
 
-  static $_createDelay_2_Callback(mthis) native "AudioContext_createDelay_Callback_RESOLVER_STRING_0_";
+  static createDelay_Callback(mthis) native "AudioContext_createDelay_Callback";
 
-  static $createDynamicsCompressor_Callback(mthis) native "AudioContext_createDynamicsCompressor_Callback_RESOLVER_STRING_0_";
+  static createDynamicsCompressor_Callback(mthis) native "AudioContext_createDynamicsCompressor_Callback";
 
-  static $createGain_Callback(mthis) native "AudioContext_createGain_Callback_RESOLVER_STRING_0_";
+  static createGain_Callback(mthis) native "AudioContext_createGain_Callback";
 
-  static $createMediaElementSource_Callback(mthis, mediaElement) native "AudioContext_createMediaElementSource_Callback_RESOLVER_STRING_1_HTMLMediaElement";
+  static createMediaElementSource_Callback_HTMLMediaElement(mthis, mediaElement) native "AudioContext_createMediaElementSource_Callback_HTMLMediaElement";
 
-  static $createMediaStreamDestination_Callback(mthis) native "AudioContext_createMediaStreamDestination_Callback_RESOLVER_STRING_0_";
+  static createMediaStreamDestination_Callback(mthis) native "AudioContext_createMediaStreamDestination_Callback";
 
-  static $createMediaStreamSource_Callback(mthis, mediaStream) native "AudioContext_createMediaStreamSource_Callback_RESOLVER_STRING_1_MediaStream";
+  static createMediaStreamSource_Callback_MediaStream(mthis, mediaStream) native "AudioContext_createMediaStreamSource_Callback_MediaStream";
 
-  static $createOscillator_Callback(mthis) native "AudioContext_createOscillator_Callback_RESOLVER_STRING_0_";
+  static createOscillator_Callback(mthis) native "AudioContext_createOscillator_Callback";
 
-  static $createPanner_Callback(mthis) native "AudioContext_createPanner_Callback_RESOLVER_STRING_0_";
+  static createPanner_Callback(mthis) native "AudioContext_createPanner_Callback";
 
-  static $createPeriodicWave_Callback(mthis, real, imag) native "AudioContext_createPeriodicWave_Callback_RESOLVER_STRING_2_Float32Array_Float32Array";
+  static createPeriodicWave_Callback_Float32Array_Float32Array(mthis, real, imag) native "AudioContext_createPeriodicWave_Callback_Float32Array_Float32Array";
 
-  static $_createScriptProcessor_1_Callback(mthis, bufferSize, numberOfInputChannels, numberOfOutputChannels) native "AudioContext_createScriptProcessor_Callback_RESOLVER_STRING_3_unsigned long_unsigned long_unsigned long";
+  static createScriptProcessor_Callback_ul_ul_ul(mthis, bufferSize, numberOfInputChannels, numberOfOutputChannels) native "AudioContext_createScriptProcessor_Callback_unsigned long_unsigned long_unsigned long";
 
-  static $_createScriptProcessor_2_Callback(mthis, bufferSize, numberOfInputChannels) native "AudioContext_createScriptProcessor_Callback_RESOLVER_STRING_2_unsigned long_unsigned long";
+  static createScriptProcessor_Callback_ul_ul(mthis, bufferSize, numberOfInputChannels) native "AudioContext_createScriptProcessor_Callback_unsigned long_unsigned long";
 
-  static $_createScriptProcessor_3_Callback(mthis, bufferSize) native "AudioContext_createScriptProcessor_Callback_RESOLVER_STRING_1_unsigned long";
+  static createScriptProcessor_Callback_ul(mthis, bufferSize) native "AudioContext_createScriptProcessor_Callback_unsigned long";
 
-  static $_createScriptProcessor_4_Callback(mthis) native "AudioContext_createScriptProcessor_Callback_RESOLVER_STRING_0_";
+  static createScriptProcessor_Callback(mthis) native "AudioContext_createScriptProcessor_Callback";
 
-  static $createWaveShaper_Callback(mthis) native "AudioContext_createWaveShaper_Callback_RESOLVER_STRING_0_";
+  static createWaveShaper_Callback(mthis) native "AudioContext_createWaveShaper_Callback";
 
-  static $decodeAudioData_Callback(mthis, audioData, successCallback, errorCallback) native "AudioContext_decodeAudioData_Callback";
+  static decodeAudioData_Callback_ArrayBuffer_AudioBufferCallback_AudioBufferCallback(mthis, audioData, successCallback, errorCallback) native "AudioContext_decodeAudioData_Callback";
 
-  static $startRendering_Callback(mthis) native "AudioContext_startRendering_Callback_RESOLVER_STRING_0_";
+  static startRendering_Callback(mthis) native "AudioContext_startRendering_Callback";
 }
 
 class BlinkAudioDestinationNode {
-  static $maxChannelCount_Getter(mthis) native "AudioDestinationNode_maxChannelCount_Getter";
+  static maxChannelCount_Getter(mthis) native "AudioDestinationNode_maxChannelCount_Getter";
 }
 
 class BlinkAudioListener {
-  static $dopplerFactor_Getter(mthis) native "AudioListener_dopplerFactor_Getter";
+  static dopplerFactor_Getter(mthis) native "AudioListener_dopplerFactor_Getter";
 
-  static $dopplerFactor_Setter(mthis, value) native "AudioListener_dopplerFactor_Setter";
+  static dopplerFactor_Setter_float(mthis, value) native "AudioListener_dopplerFactor_Setter";
 
-  static $speedOfSound_Getter(mthis) native "AudioListener_speedOfSound_Getter";
+  static speedOfSound_Getter(mthis) native "AudioListener_speedOfSound_Getter";
 
-  static $speedOfSound_Setter(mthis, value) native "AudioListener_speedOfSound_Setter";
+  static speedOfSound_Setter_float(mthis, value) native "AudioListener_speedOfSound_Setter";
 
-  static $setOrientation_Callback(mthis, x, y, z, xUp, yUp, zUp) native "AudioListener_setOrientation_Callback_RESOLVER_STRING_6_float_float_float_float_float_float";
+  static setOrientation_Callback_float_float_float_float_float_float(mthis, x, y, z, xUp, yUp, zUp) native "AudioListener_setOrientation_Callback_float_float_float_float_float_float";
 
-  static $setPosition_Callback(mthis, x, y, z) native "AudioListener_setPosition_Callback_RESOLVER_STRING_3_float_float_float";
+  static setPosition_Callback_float_float_float(mthis, x, y, z) native "AudioListener_setPosition_Callback_float_float_float";
 
-  static $setVelocity_Callback(mthis, x, y, z) native "AudioListener_setVelocity_Callback_RESOLVER_STRING_3_float_float_float";
+  static setVelocity_Callback_float_float_float(mthis, x, y, z) native "AudioListener_setVelocity_Callback_float_float_float";
 }
 
 class BlinkAudioParam {
-  static $defaultValue_Getter(mthis) native "AudioParam_defaultValue_Getter";
+  static defaultValue_Getter(mthis) native "AudioParam_defaultValue_Getter";
 
-  static $maxValue_Getter(mthis) native "AudioParam_maxValue_Getter";
+  static maxValue_Getter(mthis) native "AudioParam_maxValue_Getter";
 
-  static $minValue_Getter(mthis) native "AudioParam_minValue_Getter";
+  static minValue_Getter(mthis) native "AudioParam_minValue_Getter";
 
-  static $name_Getter(mthis) native "AudioParam_name_Getter";
+  static name_Getter(mthis) native "AudioParam_name_Getter";
 
-  static $units_Getter(mthis) native "AudioParam_units_Getter";
+  static units_Getter(mthis) native "AudioParam_units_Getter";
 
-  static $value_Getter(mthis) native "AudioParam_value_Getter";
+  static value_Getter(mthis) native "AudioParam_value_Getter";
 
-  static $value_Setter(mthis, value) native "AudioParam_value_Setter";
+  static value_Setter_float(mthis, value) native "AudioParam_value_Setter";
 
-  static $cancelScheduledValues_Callback(mthis, startTime) native "AudioParam_cancelScheduledValues_Callback_RESOLVER_STRING_1_double";
+  static cancelScheduledValues_Callback_double(mthis, startTime) native "AudioParam_cancelScheduledValues_Callback_double";
 
-  static $exponentialRampToValueAtTime_Callback(mthis, value, time) native "AudioParam_exponentialRampToValueAtTime_Callback_RESOLVER_STRING_2_float_double";
+  static exponentialRampToValueAtTime_Callback_float_double(mthis, value, time) native "AudioParam_exponentialRampToValueAtTime_Callback_float_double";
 
-  static $linearRampToValueAtTime_Callback(mthis, value, time) native "AudioParam_linearRampToValueAtTime_Callback_RESOLVER_STRING_2_float_double";
+  static linearRampToValueAtTime_Callback_float_double(mthis, value, time) native "AudioParam_linearRampToValueAtTime_Callback_float_double";
 
-  static $setTargetAtTime_Callback(mthis, target, time, timeConstant) native "AudioParam_setTargetAtTime_Callback_RESOLVER_STRING_3_float_double_double";
+  static setTargetAtTime_Callback_float_double_double(mthis, target, time, timeConstant) native "AudioParam_setTargetAtTime_Callback_float_double_double";
 
-  static $setValueAtTime_Callback(mthis, value, time) native "AudioParam_setValueAtTime_Callback_RESOLVER_STRING_2_float_double";
+  static setValueAtTime_Callback_float_double(mthis, value, time) native "AudioParam_setValueAtTime_Callback_float_double";
 
-  static $setValueCurveAtTime_Callback(mthis, values, time, duration) native "AudioParam_setValueCurveAtTime_Callback";
+  static setValueCurveAtTime_Callback_Float32Array_double_double(mthis, values, time, duration) native "AudioParam_setValueCurveAtTime_Callback";
 }
 
 class BlinkEvent {
-  static $bubbles_Getter(mthis) native "Event_bubbles_Getter";
+  static bubbles_Getter(mthis) native "Event_bubbles_Getter";
 
-  static $cancelable_Getter(mthis) native "Event_cancelable_Getter";
+  static cancelable_Getter(mthis) native "Event_cancelable_Getter";
 
-  static $clipboardData_Getter(mthis) native "Event_clipboardData_Getter";
+  static clipboardData_Getter(mthis) native "Event_clipboardData_Getter";
 
-  static $currentTarget_Getter(mthis) native "Event_currentTarget_Getter";
+  static currentTarget_Getter(mthis) native "Event_currentTarget_Getter";
 
-  static $defaultPrevented_Getter(mthis) native "Event_defaultPrevented_Getter";
+  static defaultPrevented_Getter(mthis) native "Event_defaultPrevented_Getter";
 
-  static $eventPhase_Getter(mthis) native "Event_eventPhase_Getter";
+  static eventPhase_Getter(mthis) native "Event_eventPhase_Getter";
 
-  static $path_Getter(mthis) native "Event_path_Getter";
+  static path_Getter(mthis) native "Event_path_Getter";
 
-  static $target_Getter(mthis) native "Event_target_Getter";
+  static target_Getter(mthis) native "Event_target_Getter";
 
-  static $timeStamp_Getter(mthis) native "Event_timeStamp_Getter";
+  static timeStamp_Getter(mthis) native "Event_timeStamp_Getter";
 
-  static $type_Getter(mthis) native "Event_type_Getter";
+  static type_Getter(mthis) native "Event_type_Getter";
 
-  static $initEvent_Callback(mthis, eventTypeArg, canBubbleArg, cancelableArg) native "Event_initEvent_Callback_RESOLVER_STRING_3_DOMString_boolean_boolean";
+  static initEvent_Callback_DOMString_boolean_boolean(mthis, eventTypeArg, canBubbleArg, cancelableArg) native "Event_initEvent_Callback_DOMString_boolean_boolean";
 
-  static $preventDefault_Callback(mthis) native "Event_preventDefault_Callback_RESOLVER_STRING_0_";
+  static preventDefault_Callback(mthis) native "Event_preventDefault_Callback";
 
-  static $stopImmediatePropagation_Callback(mthis) native "Event_stopImmediatePropagation_Callback_RESOLVER_STRING_0_";
+  static stopImmediatePropagation_Callback(mthis) native "Event_stopImmediatePropagation_Callback";
 
-  static $stopPropagation_Callback(mthis) native "Event_stopPropagation_Callback_RESOLVER_STRING_0_";
+  static stopPropagation_Callback(mthis) native "Event_stopPropagation_Callback";
 }
 
 class BlinkAudioProcessingEvent {
-  static $inputBuffer_Getter(mthis) native "AudioProcessingEvent_inputBuffer_Getter";
+  static inputBuffer_Getter(mthis) native "AudioProcessingEvent_inputBuffer_Getter";
 
-  static $outputBuffer_Getter(mthis) native "AudioProcessingEvent_outputBuffer_Getter";
+  static outputBuffer_Getter(mthis) native "AudioProcessingEvent_outputBuffer_Getter";
 }
 
 class BlinkAutocompleteErrorEvent {
-  static $reason_Getter(mthis) native "AutocompleteErrorEvent_reason_Getter";
+  static reason_Getter(mthis) native "AutocompleteErrorEvent_reason_Getter";
 }
 
 class BlinkBarProp {
-  static $visible_Getter(mthis) native "BarProp_visible_Getter";
+  static visible_Getter(mthis) native "BarProp_visible_Getter";
 }
 
 class BlinkBeforeLoadEvent {}
 
 class BlinkBeforeUnloadEvent {
-  static $returnValue_Getter(mthis) native "BeforeUnloadEvent_returnValue_Getter";
+  static returnValue_Getter(mthis) native "BeforeUnloadEvent_returnValue_Getter";
 
-  static $returnValue_Setter(mthis, value) native "BeforeUnloadEvent_returnValue_Setter";
+  static returnValue_Setter_DOMString(mthis, value) native "BeforeUnloadEvent_returnValue_Setter";
 }
 
 class BlinkBiquadFilterNode {
-  static $Q_Getter(mthis) native "BiquadFilterNode_Q_Getter";
+  static Q_Getter(mthis) native "BiquadFilterNode_Q_Getter";
 
-  static $detune_Getter(mthis) native "BiquadFilterNode_detune_Getter";
+  static detune_Getter(mthis) native "BiquadFilterNode_detune_Getter";
 
-  static $frequency_Getter(mthis) native "BiquadFilterNode_frequency_Getter";
+  static frequency_Getter(mthis) native "BiquadFilterNode_frequency_Getter";
 
-  static $gain_Getter(mthis) native "BiquadFilterNode_gain_Getter";
+  static gain_Getter(mthis) native "BiquadFilterNode_gain_Getter";
 
-  static $type_Getter(mthis) native "BiquadFilterNode_type_Getter";
+  static type_Getter(mthis) native "BiquadFilterNode_type_Getter";
 
-  static $type_Setter(mthis, value) native "BiquadFilterNode_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "BiquadFilterNode_type_Setter";
 
-  static $getFrequencyResponse_Callback(mthis, frequencyHz, magResponse, phaseResponse) native "BiquadFilterNode_getFrequencyResponse_Callback_RESOLVER_STRING_3_Float32Array_Float32Array_Float32Array";
+  static getFrequencyResponse_Callback_Float32Array_Float32Array_Float32Array(mthis, frequencyHz, magResponse, phaseResponse) native "BiquadFilterNode_getFrequencyResponse_Callback_Float32Array_Float32Array_Float32Array";
 }
 
 class BlinkBlob {
-  static $constructorCallback(blobParts, type, endings) native "Blob_constructorCallback";
+  static constructorCallback_Array_DOMString_DOMString(blobParts, type, endings) native "Blob_constructorCallback";
 
-  static $size_Getter(mthis) native "Blob_size_Getter";
+  static size_Getter(mthis) native "Blob_size_Getter";
 
-  static $type_Getter(mthis) native "Blob_type_Getter";
+  static type_Getter(mthis) native "Blob_type_Getter";
 
-  static $_slice_1_Callback(mthis, start, end, contentType) native "Blob_slice_Callback_RESOLVER_STRING_3_long long_long long_DOMString";
+  static slice_Callback_ll_ll_DOMString(mthis, start, end, contentType) native "Blob_slice_Callback_long long_long long_DOMString";
 
-  static $_slice_2_Callback(mthis, start, end) native "Blob_slice_Callback_RESOLVER_STRING_2_long long_long long";
+  static slice_Callback_ll_ll(mthis, start, end) native "Blob_slice_Callback_long long_long long";
 
-  static $_slice_3_Callback(mthis, start) native "Blob_slice_Callback_RESOLVER_STRING_1_long long";
+  static slice_Callback_ll(mthis, start) native "Blob_slice_Callback_long long";
 
-  static $_slice_4_Callback(mthis) native "Blob_slice_Callback_RESOLVER_STRING_0_";
+  static slice_Callback(mthis) native "Blob_slice_Callback";
 }
 
 class BlinkChildNode {
-  static $nextElementSibling_Getter(mthis) native "ChildNode_nextElementSibling_Getter";
+  static nextElementSibling_Getter(mthis) native "ChildNode_nextElementSibling_Getter";
 
-  static $previousElementSibling_Getter(mthis) native "ChildNode_previousElementSibling_Getter";
+  static previousElementSibling_Getter(mthis) native "ChildNode_previousElementSibling_Getter";
 
-  static $remove_Callback(mthis) native "ChildNode_remove_Callback_RESOLVER_STRING_0_";
+  static remove_Callback(mthis) native "ChildNode_remove_Callback";
 }
 
 class BlinkCharacterData {
-  static $data_Getter(mthis) native "CharacterData_data_Getter";
+  static data_Getter(mthis) native "CharacterData_data_Getter";
 
-  static $data_Setter(mthis, value) native "CharacterData_data_Setter";
+  static data_Setter_DOMString(mthis, value) native "CharacterData_data_Setter";
 
-  static $length_Getter(mthis) native "CharacterData_length_Getter";
+  static length_Getter(mthis) native "CharacterData_length_Getter";
 
-  static $appendData_Callback(mthis, data) native "CharacterData_appendData_Callback_RESOLVER_STRING_1_DOMString";
+  static appendData_Callback_DOMString(mthis, data) native "CharacterData_appendData_Callback_DOMString";
 
-  static $deleteData_Callback(mthis, offset, length) native "CharacterData_deleteData_Callback_RESOLVER_STRING_2_unsigned long_unsigned long";
+  static deleteData_Callback_ul_ul(mthis, offset, length) native "CharacterData_deleteData_Callback_unsigned long_unsigned long";
 
-  static $insertData_Callback(mthis, offset, data) native "CharacterData_insertData_Callback_RESOLVER_STRING_2_unsigned long_DOMString";
+  static insertData_Callback_ul_DOMString(mthis, offset, data) native "CharacterData_insertData_Callback_unsigned long_DOMString";
 
-  static $replaceData_Callback(mthis, offset, length, data) native "CharacterData_replaceData_Callback_RESOLVER_STRING_3_unsigned long_unsigned long_DOMString";
+  static replaceData_Callback_ul_ul_DOMString(mthis, offset, length, data) native "CharacterData_replaceData_Callback_unsigned long_unsigned long_DOMString";
 
-  static $substringData_Callback(mthis, offset, length) native "CharacterData_substringData_Callback_RESOLVER_STRING_2_unsigned long_unsigned long";
+  static substringData_Callback_ul_ul(mthis, offset, length) native "CharacterData_substringData_Callback_unsigned long_unsigned long";
 
-  static $nextElementSibling_Getter(mthis) native "CharacterData_nextElementSibling_Getter";
+  static nextElementSibling_Getter(mthis) native "CharacterData_nextElementSibling_Getter";
 
-  static $previousElementSibling_Getter(mthis) native "CharacterData_previousElementSibling_Getter";
+  static previousElementSibling_Getter(mthis) native "CharacterData_previousElementSibling_Getter";
 }
 
 class BlinkText {
-  static $wholeText_Getter(mthis) native "Text_wholeText_Getter";
+  static wholeText_Getter(mthis) native "Text_wholeText_Getter";
 
-  static $getDestinationInsertionPoints_Callback(mthis) native "Text_getDestinationInsertionPoints_Callback_RESOLVER_STRING_0_";
+  static getDestinationInsertionPoints_Callback(mthis) native "Text_getDestinationInsertionPoints_Callback";
 
-  static $splitText_Callback(mthis, offset) native "Text_splitText_Callback_RESOLVER_STRING_1_unsigned long";
+  static splitText_Callback_ul(mthis, offset) native "Text_splitText_Callback_unsigned long";
 }
 
 class BlinkCDATASection {}
 
 class BlinkCSS {
-  static $supports_Callback(mthis, property, value) native "CSS_supports_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static supports_Callback_DOMString_DOMString(mthis, property, value) native "CSS_supports_Callback_DOMString_DOMString";
 
-  static $supportsCondition_Callback(mthis, conditionText) native "CSS_supports_Callback_RESOLVER_STRING_1_DOMString";
+  static supports_Callback_DOMString(mthis, conditionText) native "CSS_supports_Callback_DOMString";
 }
 
 class BlinkCSSRule {
-  static $cssText_Getter(mthis) native "CSSRule_cssText_Getter";
+  static cssText_Getter(mthis) native "CSSRule_cssText_Getter";
 
-  static $cssText_Setter(mthis, value) native "CSSRule_cssText_Setter";
+  static cssText_Setter_DOMString(mthis, value) native "CSSRule_cssText_Setter";
 
-  static $parentRule_Getter(mthis) native "CSSRule_parentRule_Getter";
+  static parentRule_Getter(mthis) native "CSSRule_parentRule_Getter";
 
-  static $parentStyleSheet_Getter(mthis) native "CSSRule_parentStyleSheet_Getter";
+  static parentStyleSheet_Getter(mthis) native "CSSRule_parentStyleSheet_Getter";
 
-  static $type_Getter(mthis) native "CSSRule_type_Getter";
+  static type_Getter(mthis) native "CSSRule_type_Getter";
 }
 
 class BlinkCSSCharsetRule {
-  static $encoding_Getter(mthis) native "CSSCharsetRule_encoding_Getter";
+  static encoding_Getter(mthis) native "CSSCharsetRule_encoding_Getter";
 
-  static $encoding_Setter(mthis, value) native "CSSCharsetRule_encoding_Setter";
+  static encoding_Setter_DOMString(mthis, value) native "CSSCharsetRule_encoding_Setter";
 }
 
 class BlinkCSSFontFaceLoadEvent {
-  static $fontfaces_Getter(mthis) native "CSSFontFaceLoadEvent_fontfaces_Getter";
+  static fontfaces_Getter(mthis) native "CSSFontFaceLoadEvent_fontfaces_Getter";
 }
 
 class BlinkCSSFontFaceRule {
-  static $style_Getter(mthis) native "CSSFontFaceRule_style_Getter";
+  static style_Getter(mthis) native "CSSFontFaceRule_style_Getter";
 }
 
 class BlinkCSSImportRule {
-  static $href_Getter(mthis) native "CSSImportRule_href_Getter";
+  static href_Getter(mthis) native "CSSImportRule_href_Getter";
 
-  static $media_Getter(mthis) native "CSSImportRule_media_Getter";
+  static media_Getter(mthis) native "CSSImportRule_media_Getter";
 
-  static $styleSheet_Getter(mthis) native "CSSImportRule_styleSheet_Getter";
+  static styleSheet_Getter(mthis) native "CSSImportRule_styleSheet_Getter";
 }
 
 class BlinkCSSKeyframeRule {
-  static $keyText_Getter(mthis) native "CSSKeyframeRule_keyText_Getter";
+  static keyText_Getter(mthis) native "CSSKeyframeRule_keyText_Getter";
 
-  static $keyText_Setter(mthis, value) native "CSSKeyframeRule_keyText_Setter";
+  static keyText_Setter_DOMString(mthis, value) native "CSSKeyframeRule_keyText_Setter";
 
-  static $style_Getter(mthis) native "CSSKeyframeRule_style_Getter";
+  static style_Getter(mthis) native "CSSKeyframeRule_style_Getter";
 }
 
 class BlinkCSSKeyframesRule {
-  static $cssRules_Getter(mthis) native "CSSKeyframesRule_cssRules_Getter";
+  static cssRules_Getter(mthis) native "CSSKeyframesRule_cssRules_Getter";
 
-  static $name_Getter(mthis) native "CSSKeyframesRule_name_Getter";
+  static name_Getter(mthis) native "CSSKeyframesRule_name_Getter";
 
-  static $name_Setter(mthis, value) native "CSSKeyframesRule_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "CSSKeyframesRule_name_Setter";
 
-  static $__getter___Callback(mthis, index) native "CSSKeyframesRule___getter___Callback_RESOLVER_STRING_1_unsigned long";
+  static $__getter___Callback_ul(mthis, index) native "CSSKeyframesRule___getter___Callback_unsigned long";
 
-  static $deleteRule_Callback(mthis, key) native "CSSKeyframesRule_deleteRule_Callback_RESOLVER_STRING_1_DOMString";
+  static deleteRule_Callback_DOMString(mthis, key) native "CSSKeyframesRule_deleteRule_Callback_DOMString";
 
-  static $findRule_Callback(mthis, key) native "CSSKeyframesRule_findRule_Callback_RESOLVER_STRING_1_DOMString";
+  static findRule_Callback_DOMString(mthis, key) native "CSSKeyframesRule_findRule_Callback_DOMString";
 
-  static $insertRule_Callback(mthis, rule) native "CSSKeyframesRule_insertRule_Callback_RESOLVER_STRING_1_DOMString";
+  static insertRule_Callback_DOMString(mthis, rule) native "CSSKeyframesRule_insertRule_Callback_DOMString";
 }
 
 class BlinkCSSMediaRule {
-  static $cssRules_Getter(mthis) native "CSSMediaRule_cssRules_Getter";
+  static cssRules_Getter(mthis) native "CSSMediaRule_cssRules_Getter";
 
-  static $media_Getter(mthis) native "CSSMediaRule_media_Getter";
+  static media_Getter(mthis) native "CSSMediaRule_media_Getter";
 
-  static $deleteRule_Callback(mthis, index) native "CSSMediaRule_deleteRule_Callback_RESOLVER_STRING_1_unsigned long";
+  static deleteRule_Callback_ul(mthis, index) native "CSSMediaRule_deleteRule_Callback_unsigned long";
 
-  static $insertRule_Callback(mthis, rule, index) native "CSSMediaRule_insertRule_Callback_RESOLVER_STRING_2_DOMString_unsigned long";
+  static insertRule_Callback_DOMString_ul(mthis, rule, index) native "CSSMediaRule_insertRule_Callback_DOMString_unsigned long";
 }
 
 class BlinkCSSPageRule {
-  static $selectorText_Getter(mthis) native "CSSPageRule_selectorText_Getter";
+  static selectorText_Getter(mthis) native "CSSPageRule_selectorText_Getter";
 
-  static $selectorText_Setter(mthis, value) native "CSSPageRule_selectorText_Setter";
+  static selectorText_Setter_DOMString(mthis, value) native "CSSPageRule_selectorText_Setter";
 
-  static $style_Getter(mthis) native "CSSPageRule_style_Getter";
+  static style_Getter(mthis) native "CSSPageRule_style_Getter";
 }
 
 class BlinkCSSValue {}
@@ -557,313 +557,309 @@
 class BlinkCSSPrimitiveValue {}
 
 class BlinkCSSRuleList {
-  static $length_Getter(mthis) native "CSSRuleList_length_Getter";
+  static length_Getter(mthis) native "CSSRuleList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "CSSRuleList_item_Callback_RESOLVER_STRING_1_unsigned long";
-
-  static $item_Callback(mthis, index) native "CSSRuleList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "CSSRuleList_item_Callback_unsigned long";
 }
 
 class BlinkCSSStyleDeclaration {
-  static $cssText_Getter(mthis) native "CSSStyleDeclaration_cssText_Getter";
+  static cssText_Getter(mthis) native "CSSStyleDeclaration_cssText_Getter";
 
-  static $cssText_Setter(mthis, value) native "CSSStyleDeclaration_cssText_Setter";
+  static cssText_Setter_DOMString(mthis, value) native "CSSStyleDeclaration_cssText_Setter";
 
-  static $length_Getter(mthis) native "CSSStyleDeclaration_length_Getter";
+  static length_Getter(mthis) native "CSSStyleDeclaration_length_Getter";
 
-  static $parentRule_Getter(mthis) native "CSSStyleDeclaration_parentRule_Getter";
+  static parentRule_Getter(mthis) native "CSSStyleDeclaration_parentRule_Getter";
 
-  static $__propertyQuery___Callback(mthis, name) native "CSSStyleDeclaration___propertyQuery___Callback_RESOLVER_STRING_1_DOMString";
+  static $__propertyQuery___Callback_DOMString(mthis, name) native "CSSStyleDeclaration___propertyQuery___Callback_DOMString";
 
-  static $__setter___Callback(mthis, propertyName, propertyValue) native "CSSStyleDeclaration___setter___Callback";
+  static $__setter___Callback_DOMString_DOMString(mthis, propertyName, propertyValue) native "CSSStyleDeclaration___setter___Callback";
 
-  static $getPropertyPriority_Callback(mthis, propertyName) native "CSSStyleDeclaration_getPropertyPriority_Callback_RESOLVER_STRING_1_DOMString";
+  static getPropertyPriority_Callback_DOMString(mthis, propertyName) native "CSSStyleDeclaration_getPropertyPriority_Callback_DOMString";
 
-  static $getPropertyValue_Callback(mthis, propertyName) native "CSSStyleDeclaration_getPropertyValue_Callback_RESOLVER_STRING_1_DOMString";
+  static getPropertyValue_Callback_DOMString(mthis, propertyName) native "CSSStyleDeclaration_getPropertyValue_Callback_DOMString";
 
-  static $item_Callback(mthis, index) native "CSSStyleDeclaration_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "CSSStyleDeclaration_item_Callback_unsigned long";
 
-  static $removeProperty_Callback(mthis, propertyName) native "CSSStyleDeclaration_removeProperty_Callback_RESOLVER_STRING_1_DOMString";
+  static removeProperty_Callback_DOMString(mthis, propertyName) native "CSSStyleDeclaration_removeProperty_Callback_DOMString";
 
-  static $setProperty_Callback(mthis, propertyName, value, priority) native "CSSStyleDeclaration_setProperty_Callback_RESOLVER_STRING_3_DOMString_DOMString_DOMString";
+  static setProperty_Callback_DOMString_DOMString_DOMString(mthis, propertyName, value, priority) native "CSSStyleDeclaration_setProperty_Callback_DOMString_DOMString_DOMString";
 }
 
 class BlinkCSSStyleRule {
-  static $selectorText_Getter(mthis) native "CSSStyleRule_selectorText_Getter";
+  static selectorText_Getter(mthis) native "CSSStyleRule_selectorText_Getter";
 
-  static $selectorText_Setter(mthis, value) native "CSSStyleRule_selectorText_Setter";
+  static selectorText_Setter_DOMString(mthis, value) native "CSSStyleRule_selectorText_Setter";
 
-  static $style_Getter(mthis) native "CSSStyleRule_style_Getter";
+  static style_Getter(mthis) native "CSSStyleRule_style_Getter";
 }
 
 class BlinkStyleSheet {
-  static $disabled_Getter(mthis) native "StyleSheet_disabled_Getter";
+  static disabled_Getter(mthis) native "StyleSheet_disabled_Getter";
 
-  static $disabled_Setter(mthis, value) native "StyleSheet_disabled_Setter";
+  static disabled_Setter_boolean(mthis, value) native "StyleSheet_disabled_Setter";
 
-  static $href_Getter(mthis) native "StyleSheet_href_Getter";
+  static href_Getter(mthis) native "StyleSheet_href_Getter";
 
-  static $media_Getter(mthis) native "StyleSheet_media_Getter";
+  static media_Getter(mthis) native "StyleSheet_media_Getter";
 
-  static $ownerNode_Getter(mthis) native "StyleSheet_ownerNode_Getter";
+  static ownerNode_Getter(mthis) native "StyleSheet_ownerNode_Getter";
 
-  static $parentStyleSheet_Getter(mthis) native "StyleSheet_parentStyleSheet_Getter";
+  static parentStyleSheet_Getter(mthis) native "StyleSheet_parentStyleSheet_Getter";
 
-  static $title_Getter(mthis) native "StyleSheet_title_Getter";
+  static title_Getter(mthis) native "StyleSheet_title_Getter";
 
-  static $type_Getter(mthis) native "StyleSheet_type_Getter";
+  static type_Getter(mthis) native "StyleSheet_type_Getter";
 }
 
 class BlinkCSSStyleSheet {
-  static $cssRules_Getter(mthis) native "CSSStyleSheet_cssRules_Getter";
+  static cssRules_Getter(mthis) native "CSSStyleSheet_cssRules_Getter";
 
-  static $ownerRule_Getter(mthis) native "CSSStyleSheet_ownerRule_Getter";
+  static ownerRule_Getter(mthis) native "CSSStyleSheet_ownerRule_Getter";
 
-  static $rules_Getter(mthis) native "CSSStyleSheet_rules_Getter";
+  static rules_Getter(mthis) native "CSSStyleSheet_rules_Getter";
 
-  static $_addRule_1_Callback(mthis, selector, style, index) native "CSSStyleSheet_addRule_Callback_RESOLVER_STRING_3_DOMString_DOMString_unsigned long";
+  static addRule_Callback_DOMString_DOMString_ul(mthis, selector, style, index) native "CSSStyleSheet_addRule_Callback_DOMString_DOMString_unsigned long";
 
-  static $_addRule_2_Callback(mthis, selector, style) native "CSSStyleSheet_addRule_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static addRule_Callback_DOMString_DOMString(mthis, selector, style) native "CSSStyleSheet_addRule_Callback_DOMString_DOMString";
 
-  static $deleteRule_Callback(mthis, index) native "CSSStyleSheet_deleteRule_Callback_RESOLVER_STRING_1_unsigned long";
+  static deleteRule_Callback_ul(mthis, index) native "CSSStyleSheet_deleteRule_Callback_unsigned long";
 
-  static $_insertRule_1_Callback(mthis, rule, index) native "CSSStyleSheet_insertRule_Callback_RESOLVER_STRING_2_DOMString_unsigned long";
+  static insertRule_Callback_DOMString_ul(mthis, rule, index) native "CSSStyleSheet_insertRule_Callback_DOMString_unsigned long";
 
-  static $_insertRule_2_Callback(mthis, rule) native "CSSStyleSheet_insertRule_Callback_RESOLVER_STRING_1_DOMString";
+  static insertRule_Callback_DOMString(mthis, rule) native "CSSStyleSheet_insertRule_Callback_DOMString";
 
-  static $removeRule_Callback(mthis, index) native "CSSStyleSheet_removeRule_Callback_RESOLVER_STRING_1_unsigned long";
+  static removeRule_Callback_ul(mthis, index) native "CSSStyleSheet_removeRule_Callback_unsigned long";
 }
 
 class BlinkCSSSupportsRule {
-  static $conditionText_Getter(mthis) native "CSSSupportsRule_conditionText_Getter";
+  static conditionText_Getter(mthis) native "CSSSupportsRule_conditionText_Getter";
 
-  static $cssRules_Getter(mthis) native "CSSSupportsRule_cssRules_Getter";
+  static cssRules_Getter(mthis) native "CSSSupportsRule_cssRules_Getter";
 
-  static $deleteRule_Callback(mthis, index) native "CSSSupportsRule_deleteRule_Callback_RESOLVER_STRING_1_unsigned long";
+  static deleteRule_Callback_ul(mthis, index) native "CSSSupportsRule_deleteRule_Callback_unsigned long";
 
-  static $insertRule_Callback(mthis, rule, index) native "CSSSupportsRule_insertRule_Callback_RESOLVER_STRING_2_DOMString_unsigned long";
+  static insertRule_Callback_DOMString_ul(mthis, rule, index) native "CSSSupportsRule_insertRule_Callback_DOMString_unsigned long";
 }
 
 class BlinkCSSUnknownRule {}
 
 class BlinkCSSValueList {
-  static $length_Getter(mthis) native "CSSValueList_length_Getter";
+  static length_Getter(mthis) native "CSSValueList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "CSSValueList_item_Callback_RESOLVER_STRING_1_unsigned long";
-
-  static $item_Callback(mthis, index) native "CSSValueList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "CSSValueList_item_Callback_unsigned long";
 }
 
 class BlinkCSSViewportRule {
-  static $style_Getter(mthis) native "CSSViewportRule_style_Getter";
+  static style_Getter(mthis) native "CSSViewportRule_style_Getter";
 }
 
 class BlinkCanvas2DContextAttributes {
-  static $alpha_Getter(mthis) native "Canvas2DContextAttributes_alpha_Getter";
+  static alpha_Getter(mthis) native "Canvas2DContextAttributes_alpha_Getter";
 
-  static $alpha_Setter(mthis, value) native "Canvas2DContextAttributes_alpha_Setter";
+  static alpha_Setter_boolean(mthis, value) native "Canvas2DContextAttributes_alpha_Setter";
 }
 
 class BlinkCanvasGradient {
-  static $addColorStop_Callback(mthis, offset, color) native "CanvasGradient_addColorStop_Callback_RESOLVER_STRING_2_float_DOMString";
+  static addColorStop_Callback_float_DOMString(mthis, offset, color) native "CanvasGradient_addColorStop_Callback_float_DOMString";
 }
 
 class BlinkCanvasPattern {}
 
 class BlinkCanvasRenderingContext {
-  static $canvas_Getter(mthis) native "CanvasRenderingContext2D_canvas_Getter";
+  static canvas_Getter(mthis) native "CanvasRenderingContext2D_canvas_Getter";
 }
 
 class BlinkCanvasRenderingContext2D {
-  static $currentTransform_Getter(mthis) native "CanvasRenderingContext2D_currentTransform_Getter";
+  static currentTransform_Getter(mthis) native "CanvasRenderingContext2D_currentTransform_Getter";
 
-  static $currentTransform_Setter(mthis, value) native "CanvasRenderingContext2D_currentTransform_Setter";
+  static currentTransform_Setter_SVGMatrix(mthis, value) native "CanvasRenderingContext2D_currentTransform_Setter";
 
-  static $fillStyle_Getter(mthis) native "CanvasRenderingContext2D_fillStyle_Getter";
+  static fillStyle_Getter(mthis) native "CanvasRenderingContext2D_fillStyle_Getter";
 
-  static $fillStyle_Setter(mthis, value) native "CanvasRenderingContext2D_fillStyle_Setter";
+  static fillStyle_Setter_object(mthis, value) native "CanvasRenderingContext2D_fillStyle_Setter";
 
-  static $font_Getter(mthis) native "CanvasRenderingContext2D_font_Getter";
+  static font_Getter(mthis) native "CanvasRenderingContext2D_font_Getter";
 
-  static $font_Setter(mthis, value) native "CanvasRenderingContext2D_font_Setter";
+  static font_Setter_DOMString(mthis, value) native "CanvasRenderingContext2D_font_Setter";
 
-  static $globalAlpha_Getter(mthis) native "CanvasRenderingContext2D_globalAlpha_Getter";
+  static globalAlpha_Getter(mthis) native "CanvasRenderingContext2D_globalAlpha_Getter";
 
-  static $globalAlpha_Setter(mthis, value) native "CanvasRenderingContext2D_globalAlpha_Setter";
+  static globalAlpha_Setter_float(mthis, value) native "CanvasRenderingContext2D_globalAlpha_Setter";
 
-  static $globalCompositeOperation_Getter(mthis) native "CanvasRenderingContext2D_globalCompositeOperation_Getter";
+  static globalCompositeOperation_Getter(mthis) native "CanvasRenderingContext2D_globalCompositeOperation_Getter";
 
-  static $globalCompositeOperation_Setter(mthis, value) native "CanvasRenderingContext2D_globalCompositeOperation_Setter";
+  static globalCompositeOperation_Setter_DOMString(mthis, value) native "CanvasRenderingContext2D_globalCompositeOperation_Setter";
 
-  static $imageSmoothingEnabled_Getter(mthis) native "CanvasRenderingContext2D_imageSmoothingEnabled_Getter";
+  static imageSmoothingEnabled_Getter(mthis) native "CanvasRenderingContext2D_imageSmoothingEnabled_Getter";
 
-  static $imageSmoothingEnabled_Setter(mthis, value) native "CanvasRenderingContext2D_imageSmoothingEnabled_Setter";
+  static imageSmoothingEnabled_Setter_boolean(mthis, value) native "CanvasRenderingContext2D_imageSmoothingEnabled_Setter";
 
-  static $lineCap_Getter(mthis) native "CanvasRenderingContext2D_lineCap_Getter";
+  static lineCap_Getter(mthis) native "CanvasRenderingContext2D_lineCap_Getter";
 
-  static $lineCap_Setter(mthis, value) native "CanvasRenderingContext2D_lineCap_Setter";
+  static lineCap_Setter_DOMString(mthis, value) native "CanvasRenderingContext2D_lineCap_Setter";
 
-  static $lineDashOffset_Getter(mthis) native "CanvasRenderingContext2D_lineDashOffset_Getter";
+  static lineDashOffset_Getter(mthis) native "CanvasRenderingContext2D_lineDashOffset_Getter";
 
-  static $lineDashOffset_Setter(mthis, value) native "CanvasRenderingContext2D_lineDashOffset_Setter";
+  static lineDashOffset_Setter_float(mthis, value) native "CanvasRenderingContext2D_lineDashOffset_Setter";
 
-  static $lineJoin_Getter(mthis) native "CanvasRenderingContext2D_lineJoin_Getter";
+  static lineJoin_Getter(mthis) native "CanvasRenderingContext2D_lineJoin_Getter";
 
-  static $lineJoin_Setter(mthis, value) native "CanvasRenderingContext2D_lineJoin_Setter";
+  static lineJoin_Setter_DOMString(mthis, value) native "CanvasRenderingContext2D_lineJoin_Setter";
 
-  static $lineWidth_Getter(mthis) native "CanvasRenderingContext2D_lineWidth_Getter";
+  static lineWidth_Getter(mthis) native "CanvasRenderingContext2D_lineWidth_Getter";
 
-  static $lineWidth_Setter(mthis, value) native "CanvasRenderingContext2D_lineWidth_Setter";
+  static lineWidth_Setter_float(mthis, value) native "CanvasRenderingContext2D_lineWidth_Setter";
 
-  static $miterLimit_Getter(mthis) native "CanvasRenderingContext2D_miterLimit_Getter";
+  static miterLimit_Getter(mthis) native "CanvasRenderingContext2D_miterLimit_Getter";
 
-  static $miterLimit_Setter(mthis, value) native "CanvasRenderingContext2D_miterLimit_Setter";
+  static miterLimit_Setter_float(mthis, value) native "CanvasRenderingContext2D_miterLimit_Setter";
 
-  static $shadowBlur_Getter(mthis) native "CanvasRenderingContext2D_shadowBlur_Getter";
+  static shadowBlur_Getter(mthis) native "CanvasRenderingContext2D_shadowBlur_Getter";
 
-  static $shadowBlur_Setter(mthis, value) native "CanvasRenderingContext2D_shadowBlur_Setter";
+  static shadowBlur_Setter_float(mthis, value) native "CanvasRenderingContext2D_shadowBlur_Setter";
 
-  static $shadowColor_Getter(mthis) native "CanvasRenderingContext2D_shadowColor_Getter";
+  static shadowColor_Getter(mthis) native "CanvasRenderingContext2D_shadowColor_Getter";
 
-  static $shadowColor_Setter(mthis, value) native "CanvasRenderingContext2D_shadowColor_Setter";
+  static shadowColor_Setter_DOMString(mthis, value) native "CanvasRenderingContext2D_shadowColor_Setter";
 
-  static $shadowOffsetX_Getter(mthis) native "CanvasRenderingContext2D_shadowOffsetX_Getter";
+  static shadowOffsetX_Getter(mthis) native "CanvasRenderingContext2D_shadowOffsetX_Getter";
 
-  static $shadowOffsetX_Setter(mthis, value) native "CanvasRenderingContext2D_shadowOffsetX_Setter";
+  static shadowOffsetX_Setter_float(mthis, value) native "CanvasRenderingContext2D_shadowOffsetX_Setter";
 
-  static $shadowOffsetY_Getter(mthis) native "CanvasRenderingContext2D_shadowOffsetY_Getter";
+  static shadowOffsetY_Getter(mthis) native "CanvasRenderingContext2D_shadowOffsetY_Getter";
 
-  static $shadowOffsetY_Setter(mthis, value) native "CanvasRenderingContext2D_shadowOffsetY_Setter";
+  static shadowOffsetY_Setter_float(mthis, value) native "CanvasRenderingContext2D_shadowOffsetY_Setter";
 
-  static $strokeStyle_Getter(mthis) native "CanvasRenderingContext2D_strokeStyle_Getter";
+  static strokeStyle_Getter(mthis) native "CanvasRenderingContext2D_strokeStyle_Getter";
 
-  static $strokeStyle_Setter(mthis, value) native "CanvasRenderingContext2D_strokeStyle_Setter";
+  static strokeStyle_Setter_object(mthis, value) native "CanvasRenderingContext2D_strokeStyle_Setter";
 
-  static $textAlign_Getter(mthis) native "CanvasRenderingContext2D_textAlign_Getter";
+  static textAlign_Getter(mthis) native "CanvasRenderingContext2D_textAlign_Getter";
 
-  static $textAlign_Setter(mthis, value) native "CanvasRenderingContext2D_textAlign_Setter";
+  static textAlign_Setter_DOMString(mthis, value) native "CanvasRenderingContext2D_textAlign_Setter";
 
-  static $textBaseline_Getter(mthis) native "CanvasRenderingContext2D_textBaseline_Getter";
+  static textBaseline_Getter(mthis) native "CanvasRenderingContext2D_textBaseline_Getter";
 
-  static $textBaseline_Setter(mthis, value) native "CanvasRenderingContext2D_textBaseline_Setter";
+  static textBaseline_Setter_DOMString(mthis, value) native "CanvasRenderingContext2D_textBaseline_Setter";
 
-  static $arc_Callback(mthis, x, y, radius, startAngle, endAngle, anticlockwise) native "CanvasRenderingContext2D_arc_Callback_RESOLVER_STRING_6_float_float_float_float_float_boolean";
+  static arc_Callback_float_float_float_float_float_boolean(mthis, x, y, radius, startAngle, endAngle, anticlockwise) native "CanvasRenderingContext2D_arc_Callback_float_float_float_float_float_boolean";
 
-  static $arcTo_Callback(mthis, x1, y1, x2, y2, radius) native "CanvasRenderingContext2D_arcTo_Callback_RESOLVER_STRING_5_float_float_float_float_float";
+  static arcTo_Callback_float_float_float_float_float(mthis, x1, y1, x2, y2, radius) native "CanvasRenderingContext2D_arcTo_Callback_float_float_float_float_float";
 
-  static $beginPath_Callback(mthis) native "CanvasRenderingContext2D_beginPath_Callback_RESOLVER_STRING_0_";
+  static beginPath_Callback(mthis) native "CanvasRenderingContext2D_beginPath_Callback";
 
-  static $bezierCurveTo_Callback(mthis, cp1x, cp1y, cp2x, cp2y, x, y) native "CanvasRenderingContext2D_bezierCurveTo_Callback_RESOLVER_STRING_6_float_float_float_float_float_float";
+  static bezierCurveTo_Callback_float_float_float_float_float_float(mthis, cp1x, cp1y, cp2x, cp2y, x, y) native "CanvasRenderingContext2D_bezierCurveTo_Callback_float_float_float_float_float_float";
 
-  static $clearRect_Callback(mthis, x, y, width, height) native "CanvasRenderingContext2D_clearRect_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static clearRect_Callback_float_float_float_float(mthis, x, y, width, height) native "CanvasRenderingContext2D_clearRect_Callback_float_float_float_float";
 
-  static $_clip_1_Callback(mthis, winding) native "CanvasRenderingContext2D_clip_Callback_RESOLVER_STRING_1_DOMString";
+  static clip_Callback_DOMString(mthis, winding) native "CanvasRenderingContext2D_clip_Callback_DOMString";
 
-  static $_clip_2_Callback(mthis) native "CanvasRenderingContext2D_clip_Callback_RESOLVER_STRING_0_";
+  static clip_Callback(mthis) native "CanvasRenderingContext2D_clip_Callback";
 
-  static $closePath_Callback(mthis) native "CanvasRenderingContext2D_closePath_Callback_RESOLVER_STRING_0_";
+  static closePath_Callback(mthis) native "CanvasRenderingContext2D_closePath_Callback";
 
-  static $createImageData_Callback(mthis, sw, sh) native "CanvasRenderingContext2D_createImageData_Callback_RESOLVER_STRING_2_float_float";
+  static createImageData_Callback_float_float(mthis, sw, sh) native "CanvasRenderingContext2D_createImageData_Callback_float_float";
 
-  static $createImageDataFromImageData_Callback(mthis, imagedata) native "CanvasRenderingContext2D_createImageData_Callback_RESOLVER_STRING_1_ImageData";
+  static createImageData_Callback_ImageData(mthis, imagedata) native "CanvasRenderingContext2D_createImageData_Callback_ImageData";
 
-  static $createLinearGradient_Callback(mthis, x0, y0, x1, y1) native "CanvasRenderingContext2D_createLinearGradient_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static createLinearGradient_Callback_float_float_float_float(mthis, x0, y0, x1, y1) native "CanvasRenderingContext2D_createLinearGradient_Callback_float_float_float_float";
 
-  static $createPattern_Callback(mthis, canvas, repetitionType) native "CanvasRenderingContext2D_createPattern_Callback_RESOLVER_STRING_2_HTMLCanvasElement_DOMString";
+  static createPattern_Callback_HTMLCanvasElement_DOMString(mthis, canvas, repetitionType) native "CanvasRenderingContext2D_createPattern_Callback_HTMLCanvasElement_DOMString";
 
-  static $createPatternFromImage_Callback(mthis, image, repetitionType) native "CanvasRenderingContext2D_createPattern_Callback_RESOLVER_STRING_2_HTMLImageElement_DOMString";
+  static createPattern_Callback_HTMLImageElement_DOMString(mthis, image, repetitionType) native "CanvasRenderingContext2D_createPattern_Callback_HTMLImageElement_DOMString";
 
-  static $createRadialGradient_Callback(mthis, x0, y0, r0, x1, y1, r1) native "CanvasRenderingContext2D_createRadialGradient_Callback_RESOLVER_STRING_6_float_float_float_float_float_float";
+  static createRadialGradient_Callback_float_float_float_float_float_float(mthis, x0, y0, r0, x1, y1, r1) native "CanvasRenderingContext2D_createRadialGradient_Callback_float_float_float_float_float_float";
 
-  static $drawCustomFocusRing_Callback(mthis, element) native "CanvasRenderingContext2D_drawCustomFocusRing_Callback_RESOLVER_STRING_1_Element";
+  static drawCustomFocusRing_Callback_Element(mthis, element) native "CanvasRenderingContext2D_drawCustomFocusRing_Callback_Element";
 
-  static $_drawImage_1_Callback(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_Callback_RESOLVER_STRING_3_HTMLImageElement_float_float";
+  static drawImage_Callback_HTMLImageElement_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_Callback_HTMLImageElement_float_float";
 
-  static $_drawImage_2_Callback(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_Callback_RESOLVER_STRING_5_HTMLImageElement_float_float_float_float";
+  static drawImage_Callback_HTMLImageElement_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_Callback_HTMLImageElement_float_float_float_float";
 
-  static $_drawImage_3_Callback(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_Callback_RESOLVER_STRING_9_HTMLImageElement_float_float_float_float_float_float_float_float";
+  static drawImage_Callback_HTMLImageElement_float_float_float_float_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_Callback_HTMLImageElement_float_float_float_float_float_float_float_float";
 
-  static $_drawImage_4_Callback(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_Callback_RESOLVER_STRING_3_HTMLCanvasElement_float_float";
+  static drawImage_Callback_HTMLCanvasElement_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_Callback_HTMLCanvasElement_float_float";
 
-  static $_drawImage_5_Callback(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_Callback_RESOLVER_STRING_5_HTMLCanvasElement_float_float_float_float";
+  static drawImage_Callback_HTMLCanvasElement_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_Callback_HTMLCanvasElement_float_float_float_float";
 
-  static $_drawImage_6_Callback(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_Callback_RESOLVER_STRING_9_HTMLCanvasElement_float_float_float_float_float_float_float_float";
+  static drawImage_Callback_HTMLCanvasElement_float_float_float_float_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_Callback_HTMLCanvasElement_float_float_float_float_float_float_float_float";
 
-  static $_drawImage_7_Callback(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_Callback_RESOLVER_STRING_3_HTMLVideoElement_float_float";
+  static drawImage_Callback_HTMLVideoElement_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_Callback_HTMLVideoElement_float_float";
 
-  static $_drawImage_8_Callback(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_Callback_RESOLVER_STRING_5_HTMLVideoElement_float_float_float_float";
+  static drawImage_Callback_HTMLVideoElement_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_Callback_HTMLVideoElement_float_float_float_float";
 
-  static $_drawImage_9_Callback(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_Callback_RESOLVER_STRING_9_HTMLVideoElement_float_float_float_float_float_float_float_float";
+  static drawImage_Callback_HTMLVideoElement_float_float_float_float_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_Callback_HTMLVideoElement_float_float_float_float_float_float_float_float";
 
-  static $_drawImage_10_Callback(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_Callback_RESOLVER_STRING_3_ImageBitmap_float_float";
+  static drawImage_Callback_ImageBitmap_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_Callback_ImageBitmap_float_float";
 
-  static $_drawImage_11_Callback(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_Callback_RESOLVER_STRING_5_ImageBitmap_float_float_float_float";
+  static drawImage_Callback_ImageBitmap_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_Callback_ImageBitmap_float_float_float_float";
 
-  static $_drawImage_12_Callback(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_Callback_RESOLVER_STRING_9_ImageBitmap_float_float_float_float_float_float_float_float";
+  static drawImage_Callback_ImageBitmap_float_float_float_float_float_float_float_float(mthis, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_Callback_ImageBitmap_float_float_float_float_float_float_float_float";
 
-  static $ellipse_Callback(mthis, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) native "CanvasRenderingContext2D_ellipse_Callback_RESOLVER_STRING_8_float_float_float_float_float_float_float_boolean";
+  static ellipse_Callback_float_float_float_float_float_float_float_boolean(mthis, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) native "CanvasRenderingContext2D_ellipse_Callback_float_float_float_float_float_float_float_boolean";
 
-  static $_fill_1_Callback(mthis, winding) native "CanvasRenderingContext2D_fill_Callback_RESOLVER_STRING_1_DOMString";
+  static fill_Callback_DOMString(mthis, winding) native "CanvasRenderingContext2D_fill_Callback_DOMString";
 
-  static $_fill_2_Callback(mthis) native "CanvasRenderingContext2D_fill_Callback_RESOLVER_STRING_0_";
+  static fill_Callback(mthis) native "CanvasRenderingContext2D_fill_Callback";
 
-  static $fillRect_Callback(mthis, x, y, width, height) native "CanvasRenderingContext2D_fillRect_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static fillRect_Callback_float_float_float_float(mthis, x, y, width, height) native "CanvasRenderingContext2D_fillRect_Callback_float_float_float_float";
 
-  static $_fillText_1_Callback(mthis, text, x, y, maxWidth) native "CanvasRenderingContext2D_fillText_Callback_RESOLVER_STRING_4_DOMString_float_float_float";
+  static fillText_Callback_DOMString_float_float_float(mthis, text, x, y, maxWidth) native "CanvasRenderingContext2D_fillText_Callback_DOMString_float_float_float";
 
-  static $_fillText_2_Callback(mthis, text, x, y) native "CanvasRenderingContext2D_fillText_Callback_RESOLVER_STRING_3_DOMString_float_float";
+  static fillText_Callback_DOMString_float_float(mthis, text, x, y) native "CanvasRenderingContext2D_fillText_Callback_DOMString_float_float";
 
-  static $getContextAttributes_Callback(mthis) native "CanvasRenderingContext2D_getContextAttributes_Callback_RESOLVER_STRING_0_";
+  static getContextAttributes_Callback(mthis) native "CanvasRenderingContext2D_getContextAttributes_Callback";
 
-  static $getImageData_Callback(mthis, sx, sy, sw, sh) native "CanvasRenderingContext2D_getImageData_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static getImageData_Callback_float_float_float_float(mthis, sx, sy, sw, sh) native "CanvasRenderingContext2D_getImageData_Callback_float_float_float_float";
 
-  static $getLineDash_Callback(mthis) native "CanvasRenderingContext2D_getLineDash_Callback_RESOLVER_STRING_0_";
+  static getLineDash_Callback(mthis) native "CanvasRenderingContext2D_getLineDash_Callback";
 
-  static $_isPointInPath_1_Callback(mthis, x, y, winding) native "CanvasRenderingContext2D_isPointInPath_Callback_RESOLVER_STRING_3_float_float_DOMString";
+  static isPointInPath_Callback_float_float_DOMString(mthis, x, y, winding) native "CanvasRenderingContext2D_isPointInPath_Callback_float_float_DOMString";
 
-  static $_isPointInPath_2_Callback(mthis, x, y) native "CanvasRenderingContext2D_isPointInPath_Callback_RESOLVER_STRING_2_float_float";
+  static isPointInPath_Callback_float_float(mthis, x, y) native "CanvasRenderingContext2D_isPointInPath_Callback_float_float";
 
-  static $isPointInStroke_Callback(mthis, x, y) native "CanvasRenderingContext2D_isPointInStroke_Callback_RESOLVER_STRING_2_float_float";
+  static isPointInStroke_Callback_float_float(mthis, x, y) native "CanvasRenderingContext2D_isPointInStroke_Callback_float_float";
 
-  static $lineTo_Callback(mthis, x, y) native "CanvasRenderingContext2D_lineTo_Callback_RESOLVER_STRING_2_float_float";
+  static lineTo_Callback_float_float(mthis, x, y) native "CanvasRenderingContext2D_lineTo_Callback_float_float";
 
-  static $measureText_Callback(mthis, text) native "CanvasRenderingContext2D_measureText_Callback_RESOLVER_STRING_1_DOMString";
+  static measureText_Callback_DOMString(mthis, text) native "CanvasRenderingContext2D_measureText_Callback_DOMString";
 
-  static $moveTo_Callback(mthis, x, y) native "CanvasRenderingContext2D_moveTo_Callback_RESOLVER_STRING_2_float_float";
+  static moveTo_Callback_float_float(mthis, x, y) native "CanvasRenderingContext2D_moveTo_Callback_float_float";
 
-  static $_putImageData_1_Callback(mthis, imagedata, dx, dy) native "CanvasRenderingContext2D_putImageData_Callback_RESOLVER_STRING_3_ImageData_float_float";
+  static putImageData_Callback_ImageData_float_float(mthis, imagedata, dx, dy) native "CanvasRenderingContext2D_putImageData_Callback_ImageData_float_float";
 
-  static $_putImageData_2_Callback(mthis, imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native "CanvasRenderingContext2D_putImageData_Callback_RESOLVER_STRING_7_ImageData_float_float_float_float_float_float";
+  static putImageData_Callback_ImageData_float_float_float_float_float_float(mthis, imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native "CanvasRenderingContext2D_putImageData_Callback_ImageData_float_float_float_float_float_float";
 
-  static $quadraticCurveTo_Callback(mthis, cpx, cpy, x, y) native "CanvasRenderingContext2D_quadraticCurveTo_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static quadraticCurveTo_Callback_float_float_float_float(mthis, cpx, cpy, x, y) native "CanvasRenderingContext2D_quadraticCurveTo_Callback_float_float_float_float";
 
-  static $rect_Callback(mthis, x, y, width, height) native "CanvasRenderingContext2D_rect_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static rect_Callback_float_float_float_float(mthis, x, y, width, height) native "CanvasRenderingContext2D_rect_Callback_float_float_float_float";
 
-  static $resetTransform_Callback(mthis) native "CanvasRenderingContext2D_resetTransform_Callback_RESOLVER_STRING_0_";
+  static resetTransform_Callback(mthis) native "CanvasRenderingContext2D_resetTransform_Callback";
 
-  static $restore_Callback(mthis) native "CanvasRenderingContext2D_restore_Callback_RESOLVER_STRING_0_";
+  static restore_Callback(mthis) native "CanvasRenderingContext2D_restore_Callback";
 
-  static $rotate_Callback(mthis, angle) native "CanvasRenderingContext2D_rotate_Callback_RESOLVER_STRING_1_float";
+  static rotate_Callback_float(mthis, angle) native "CanvasRenderingContext2D_rotate_Callback_float";
 
-  static $save_Callback(mthis) native "CanvasRenderingContext2D_save_Callback_RESOLVER_STRING_0_";
+  static save_Callback(mthis) native "CanvasRenderingContext2D_save_Callback";
 
-  static $scale_Callback(mthis, sx, sy) native "CanvasRenderingContext2D_scale_Callback_RESOLVER_STRING_2_float_float";
+  static scale_Callback_float_float(mthis, sx, sy) native "CanvasRenderingContext2D_scale_Callback_float_float";
 
-  static $setLineDash_Callback(mthis, dash) native "CanvasRenderingContext2D_setLineDash_Callback_RESOLVER_STRING_1_sequence<unrestricted float>";
+  static setLineDash_Callback_SEQ_float_SEQ(mthis, dash) native "CanvasRenderingContext2D_setLineDash_Callback_sequence<unrestricted float>";
 
-  static $setTransform_Callback(mthis, m11, m12, m21, m22, dx, dy) native "CanvasRenderingContext2D_setTransform_Callback_RESOLVER_STRING_6_float_float_float_float_float_float";
+  static setTransform_Callback_float_float_float_float_float_float(mthis, m11, m12, m21, m22, dx, dy) native "CanvasRenderingContext2D_setTransform_Callback_float_float_float_float_float_float";
 
-  static $stroke_Callback(mthis) native "CanvasRenderingContext2D_stroke_Callback_RESOLVER_STRING_0_";
+  static stroke_Callback(mthis) native "CanvasRenderingContext2D_stroke_Callback";
 
-  static $strokeRect_Callback(mthis, x, y, width, height) native "CanvasRenderingContext2D_strokeRect_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static strokeRect_Callback_float_float_float_float(mthis, x, y, width, height) native "CanvasRenderingContext2D_strokeRect_Callback_float_float_float_float";
 
-  static $_strokeText_1_Callback(mthis, text, x, y, maxWidth) native "CanvasRenderingContext2D_strokeText_Callback_RESOLVER_STRING_4_DOMString_float_float_float";
+  static strokeText_Callback_DOMString_float_float_float(mthis, text, x, y, maxWidth) native "CanvasRenderingContext2D_strokeText_Callback_DOMString_float_float_float";
 
-  static $_strokeText_2_Callback(mthis, text, x, y) native "CanvasRenderingContext2D_strokeText_Callback_RESOLVER_STRING_3_DOMString_float_float";
+  static strokeText_Callback_DOMString_float_float(mthis, text, x, y) native "CanvasRenderingContext2D_strokeText_Callback_DOMString_float_float";
 
-  static $transform_Callback(mthis, m11, m12, m21, m22, dx, dy) native "CanvasRenderingContext2D_transform_Callback_RESOLVER_STRING_6_float_float_float_float_float_float";
+  static transform_Callback_float_float_float_float_float_float(mthis, m11, m12, m21, m22, dx, dy) native "CanvasRenderingContext2D_transform_Callback_float_float_float_float_float_float";
 
-  static $translate_Callback(mthis, tx, ty) native "CanvasRenderingContext2D_translate_Callback_RESOLVER_STRING_2_float_float";
+  static translate_Callback_float_float(mthis, tx, ty) native "CanvasRenderingContext2D_translate_Callback_float_float";
 }
 
 class BlinkChannelMergerNode {}
@@ -871,469 +867,461 @@
 class BlinkChannelSplitterNode {}
 
 class BlinkClientRect {
-  static $bottom_Getter(mthis) native "ClientRect_bottom_Getter";
+  static bottom_Getter(mthis) native "ClientRect_bottom_Getter";
 
-  static $height_Getter(mthis) native "ClientRect_height_Getter";
+  static height_Getter(mthis) native "ClientRect_height_Getter";
 
-  static $left_Getter(mthis) native "ClientRect_left_Getter";
+  static left_Getter(mthis) native "ClientRect_left_Getter";
 
-  static $right_Getter(mthis) native "ClientRect_right_Getter";
+  static right_Getter(mthis) native "ClientRect_right_Getter";
 
-  static $top_Getter(mthis) native "ClientRect_top_Getter";
+  static top_Getter(mthis) native "ClientRect_top_Getter";
 
-  static $width_Getter(mthis) native "ClientRect_width_Getter";
+  static width_Getter(mthis) native "ClientRect_width_Getter";
 }
 
 class BlinkClientRectList {
-  static $length_Getter(mthis) native "ClientRectList_length_Getter";
+  static length_Getter(mthis) native "ClientRectList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "ClientRectList_item_Callback_RESOLVER_STRING_1_unsigned long";
-
-  static $item_Callback(mthis, index) native "ClientRectList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "ClientRectList_item_Callback_unsigned long";
 }
 
 class BlinkClipboard {
-  static $dropEffect_Getter(mthis) native "DataTransfer_dropEffect_Getter";
+  static dropEffect_Getter(mthis) native "DataTransfer_dropEffect_Getter";
 
-  static $dropEffect_Setter(mthis, value) native "DataTransfer_dropEffect_Setter";
+  static dropEffect_Setter_DOMString(mthis, value) native "DataTransfer_dropEffect_Setter";
 
-  static $effectAllowed_Getter(mthis) native "DataTransfer_effectAllowed_Getter";
+  static effectAllowed_Getter(mthis) native "DataTransfer_effectAllowed_Getter";
 
-  static $effectAllowed_Setter(mthis, value) native "DataTransfer_effectAllowed_Setter";
+  static effectAllowed_Setter_DOMString(mthis, value) native "DataTransfer_effectAllowed_Setter";
 
-  static $files_Getter(mthis) native "DataTransfer_files_Getter";
+  static files_Getter(mthis) native "DataTransfer_files_Getter";
 
-  static $items_Getter(mthis) native "DataTransfer_items_Getter";
+  static items_Getter(mthis) native "DataTransfer_items_Getter";
 
-  static $types_Getter(mthis) native "DataTransfer_types_Getter";
+  static types_Getter(mthis) native "DataTransfer_types_Getter";
 
-  static $_clearData_1_Callback(mthis, type) native "DataTransfer_clearData_Callback_RESOLVER_STRING_1_DOMString";
+  static clearData_Callback_DOMString(mthis, type) native "DataTransfer_clearData_Callback_DOMString";
 
-  static $_clearData_2_Callback(mthis) native "DataTransfer_clearData_Callback_RESOLVER_STRING_0_";
+  static clearData_Callback(mthis) native "DataTransfer_clearData_Callback";
 
-  static $getData_Callback(mthis, type) native "DataTransfer_getData_Callback_RESOLVER_STRING_1_DOMString";
+  static getData_Callback_DOMString(mthis, type) native "DataTransfer_getData_Callback_DOMString";
 
-  static $setData_Callback(mthis, type, data) native "DataTransfer_setData_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static setData_Callback_DOMString_DOMString(mthis, type, data) native "DataTransfer_setData_Callback_DOMString_DOMString";
 
-  static $setDragImage_Callback(mthis, image, x, y) native "DataTransfer_setDragImage_Callback_RESOLVER_STRING_3_Element_long_long";
+  static setDragImage_Callback_Element_long_long(mthis, image, x, y) native "DataTransfer_setDragImage_Callback_Element_long_long";
 }
 
 class BlinkCloseEvent {
-  static $code_Getter(mthis) native "CloseEvent_code_Getter";
+  static code_Getter(mthis) native "CloseEvent_code_Getter";
 
-  static $reason_Getter(mthis) native "CloseEvent_reason_Getter";
+  static reason_Getter(mthis) native "CloseEvent_reason_Getter";
 
-  static $wasClean_Getter(mthis) native "CloseEvent_wasClean_Getter";
+  static wasClean_Getter(mthis) native "CloseEvent_wasClean_Getter";
 }
 
 class BlinkComment {
-  static $_create_1constructorCallback(data) native "Comment_constructorCallback_RESOLVER_STRING_1_DOMString";
+  static constructorCallback_DOMString(data) native "Comment_constructorCallback_DOMString";
 }
 
 class BlinkUIEvent {
-  static $charCode_Getter(mthis) native "UIEvent_charCode_Getter";
+  static charCode_Getter(mthis) native "UIEvent_charCode_Getter";
 
-  static $detail_Getter(mthis) native "UIEvent_detail_Getter";
+  static detail_Getter(mthis) native "UIEvent_detail_Getter";
 
-  static $keyCode_Getter(mthis) native "UIEvent_keyCode_Getter";
+  static keyCode_Getter(mthis) native "UIEvent_keyCode_Getter";
 
-  static $layerX_Getter(mthis) native "UIEvent_layerX_Getter";
+  static layerX_Getter(mthis) native "UIEvent_layerX_Getter";
 
-  static $layerY_Getter(mthis) native "UIEvent_layerY_Getter";
+  static layerY_Getter(mthis) native "UIEvent_layerY_Getter";
 
-  static $pageX_Getter(mthis) native "UIEvent_pageX_Getter";
+  static pageX_Getter(mthis) native "UIEvent_pageX_Getter";
 
-  static $pageY_Getter(mthis) native "UIEvent_pageY_Getter";
+  static pageY_Getter(mthis) native "UIEvent_pageY_Getter";
 
-  static $view_Getter(mthis) native "UIEvent_view_Getter";
+  static view_Getter(mthis) native "UIEvent_view_Getter";
 
-  static $which_Getter(mthis) native "UIEvent_which_Getter";
+  static which_Getter(mthis) native "UIEvent_which_Getter";
 
-  static $initUIEvent_Callback(mthis, type, canBubble, cancelable, view, detail) native "UIEvent_initUIEvent_Callback_RESOLVER_STRING_5_DOMString_boolean_boolean_Window_long";
+  static initUIEvent_Callback_DOMString_boolean_boolean_Window_long(mthis, type, canBubble, cancelable, view, detail) native "UIEvent_initUIEvent_Callback_DOMString_boolean_boolean_Window_long";
 }
 
 class BlinkCompositionEvent {
-  static $activeSegmentEnd_Getter(mthis) native "CompositionEvent_activeSegmentEnd_Getter";
+  static activeSegmentEnd_Getter(mthis) native "CompositionEvent_activeSegmentEnd_Getter";
 
-  static $activeSegmentStart_Getter(mthis) native "CompositionEvent_activeSegmentStart_Getter";
+  static activeSegmentStart_Getter(mthis) native "CompositionEvent_activeSegmentStart_Getter";
 
-  static $data_Getter(mthis) native "CompositionEvent_data_Getter";
+  static data_Getter(mthis) native "CompositionEvent_data_Getter";
 
-  static $initCompositionEvent_Callback(mthis, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg) native "CompositionEvent_initCompositionEvent_Callback_RESOLVER_STRING_5_DOMString_boolean_boolean_Window_DOMString";
+  static initCompositionEvent_Callback_DOMString_boolean_boolean_Window_DOMString(mthis, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg) native "CompositionEvent_initCompositionEvent_Callback_DOMString_boolean_boolean_Window_DOMString";
 }
 
 class BlinkConsoleBase {
-  static $assertCondition_Callback(mthis, condition, arg) native "ConsoleBase_assert_Callback_RESOLVER_STRING_2_boolean_object";
+  static assertCondition_Callback_boolean_object(mthis, condition, arg) native "ConsoleBase_assert_Callback_boolean_object";
 
-  static $clear_Callback(mthis, arg) native "ConsoleBase_clear_Callback_RESOLVER_STRING_1_object";
+  static clear_Callback_object(mthis, arg) native "ConsoleBase_clear_Callback_object";
 
-  static $count_Callback(mthis, arg) native "ConsoleBase_count_Callback_RESOLVER_STRING_1_object";
+  static count_Callback_object(mthis, arg) native "ConsoleBase_count_Callback_object";
 
-  static $debug_Callback(mthis, arg) native "ConsoleBase_debug_Callback_RESOLVER_STRING_1_object";
+  static debug_Callback_object(mthis, arg) native "ConsoleBase_debug_Callback_object";
 
-  static $dir_Callback(mthis, arg) native "ConsoleBase_dir_Callback_RESOLVER_STRING_1_object";
+  static dir_Callback_object(mthis, arg) native "ConsoleBase_dir_Callback_object";
 
-  static $dirxml_Callback(mthis, arg) native "ConsoleBase_dirxml_Callback_RESOLVER_STRING_1_object";
+  static dirxml_Callback_object(mthis, arg) native "ConsoleBase_dirxml_Callback_object";
 
-  static $error_Callback(mthis, arg) native "ConsoleBase_error_Callback_RESOLVER_STRING_1_object";
+  static error_Callback_object(mthis, arg) native "ConsoleBase_error_Callback_object";
 
-  static $group_Callback(mthis, arg) native "ConsoleBase_group_Callback_RESOLVER_STRING_1_object";
+  static group_Callback_object(mthis, arg) native "ConsoleBase_group_Callback_object";
 
-  static $groupCollapsed_Callback(mthis, arg) native "ConsoleBase_groupCollapsed_Callback_RESOLVER_STRING_1_object";
+  static groupCollapsed_Callback_object(mthis, arg) native "ConsoleBase_groupCollapsed_Callback_object";
 
-  static $groupEnd_Callback(mthis) native "ConsoleBase_groupEnd_Callback_RESOLVER_STRING_0_";
+  static groupEnd_Callback(mthis) native "ConsoleBase_groupEnd_Callback";
 
-  static $info_Callback(mthis, arg) native "ConsoleBase_info_Callback_RESOLVER_STRING_1_object";
+  static info_Callback_object(mthis, arg) native "ConsoleBase_info_Callback_object";
 
-  static $log_Callback(mthis, arg) native "ConsoleBase_log_Callback_RESOLVER_STRING_1_object";
+  static log_Callback_object(mthis, arg) native "ConsoleBase_log_Callback_object";
 
-  static $markTimeline_Callback(mthis, title) native "ConsoleBase_markTimeline_Callback_RESOLVER_STRING_1_DOMString";
+  static markTimeline_Callback_DOMString(mthis, title) native "ConsoleBase_markTimeline_Callback_DOMString";
 
-  static $profile_Callback(mthis, title) native "ConsoleBase_profile_Callback_RESOLVER_STRING_1_DOMString";
+  static profile_Callback_DOMString(mthis, title) native "ConsoleBase_profile_Callback_DOMString";
 
-  static $profileEnd_Callback(mthis, title) native "ConsoleBase_profileEnd_Callback_RESOLVER_STRING_1_DOMString";
+  static profileEnd_Callback_DOMString(mthis, title) native "ConsoleBase_profileEnd_Callback_DOMString";
 
-  static $table_Callback(mthis, arg) native "ConsoleBase_table_Callback_RESOLVER_STRING_1_object";
+  static table_Callback_object(mthis, arg) native "ConsoleBase_table_Callback_object";
 
-  static $time_Callback(mthis, title) native "ConsoleBase_time_Callback_RESOLVER_STRING_1_DOMString";
+  static time_Callback_DOMString(mthis, title) native "ConsoleBase_time_Callback_DOMString";
 
-  static $timeEnd_Callback(mthis, title) native "ConsoleBase_timeEnd_Callback_RESOLVER_STRING_1_DOMString";
+  static timeEnd_Callback_DOMString(mthis, title) native "ConsoleBase_timeEnd_Callback_DOMString";
 
-  static $timeStamp_Callback(mthis, title) native "ConsoleBase_timeStamp_Callback_RESOLVER_STRING_1_DOMString";
+  static timeStamp_Callback_DOMString(mthis, title) native "ConsoleBase_timeStamp_Callback_DOMString";
 
-  static $timeline_Callback(mthis, title) native "ConsoleBase_timeline_Callback_RESOLVER_STRING_1_DOMString";
+  static timeline_Callback_DOMString(mthis, title) native "ConsoleBase_timeline_Callback_DOMString";
 
-  static $timelineEnd_Callback(mthis, title) native "ConsoleBase_timelineEnd_Callback_RESOLVER_STRING_1_DOMString";
+  static timelineEnd_Callback_DOMString(mthis, title) native "ConsoleBase_timelineEnd_Callback_DOMString";
 
-  static $trace_Callback(mthis, arg) native "ConsoleBase_trace_Callback_RESOLVER_STRING_1_object";
+  static trace_Callback_object(mthis, arg) native "ConsoleBase_trace_Callback_object";
 
-  static $warn_Callback(mthis, arg) native "ConsoleBase_warn_Callback_RESOLVER_STRING_1_object";
+  static warn_Callback_object(mthis, arg) native "ConsoleBase_warn_Callback_object";
 }
 
 class BlinkConsole {
-  static $memory_Getter(mthis) native "Console_memory_Getter";
+  static memory_Getter(mthis) native "Console_memory_Getter";
 }
 
 class BlinkConvolverNode {
-  static $buffer_Getter(mthis) native "ConvolverNode_buffer_Getter";
+  static buffer_Getter(mthis) native "ConvolverNode_buffer_Getter";
 
-  static $buffer_Setter(mthis, value) native "ConvolverNode_buffer_Setter";
+  static buffer_Setter_AudioBuffer(mthis, value) native "ConvolverNode_buffer_Setter";
 
-  static $normalize_Getter(mthis) native "ConvolverNode_normalize_Getter";
+  static normalize_Getter(mthis) native "ConvolverNode_normalize_Getter";
 
-  static $normalize_Setter(mthis, value) native "ConvolverNode_normalize_Setter";
+  static normalize_Setter_boolean(mthis, value) native "ConvolverNode_normalize_Setter";
 }
 
 class BlinkCoordinates {
-  static $accuracy_Getter(mthis) native "Coordinates_accuracy_Getter";
+  static accuracy_Getter(mthis) native "Coordinates_accuracy_Getter";
 
-  static $altitude_Getter(mthis) native "Coordinates_altitude_Getter";
+  static altitude_Getter(mthis) native "Coordinates_altitude_Getter";
 
-  static $altitudeAccuracy_Getter(mthis) native "Coordinates_altitudeAccuracy_Getter";
+  static altitudeAccuracy_Getter(mthis) native "Coordinates_altitudeAccuracy_Getter";
 
-  static $heading_Getter(mthis) native "Coordinates_heading_Getter";
+  static heading_Getter(mthis) native "Coordinates_heading_Getter";
 
-  static $latitude_Getter(mthis) native "Coordinates_latitude_Getter";
+  static latitude_Getter(mthis) native "Coordinates_latitude_Getter";
 
-  static $longitude_Getter(mthis) native "Coordinates_longitude_Getter";
+  static longitude_Getter(mthis) native "Coordinates_longitude_Getter";
 
-  static $speed_Getter(mthis) native "Coordinates_speed_Getter";
+  static speed_Getter(mthis) native "Coordinates_speed_Getter";
 }
 
 class BlinkCounter {}
 
 class BlinkCrypto {
-  static $subtle_Getter(mthis) native "Crypto_subtle_Getter";
+  static subtle_Getter(mthis) native "Crypto_subtle_Getter";
 
-  static $getRandomValues_Callback(mthis, array) native "Crypto_getRandomValues_Callback";
+  static getRandomValues_Callback_ArrayBufferView(mthis, array) native "Crypto_getRandomValues_Callback";
 }
 
 class BlinkCustomEvent {
-  static $detail_Getter(mthis) native "CustomEvent_detail_Getter";
+  static detail_Getter(mthis) native "CustomEvent_detail_Getter";
 
-  static $initCustomEvent_Callback(mthis, typeArg, canBubbleArg, cancelableArg, detailArg) native "CustomEvent_initCustomEvent_Callback";
+  static initCustomEvent_Callback_DOMString_boolean_boolean_ScriptValue(mthis, typeArg, canBubbleArg, cancelableArg, detailArg) native "CustomEvent_initCustomEvent_Callback";
 }
 
 class BlinkDOMError {
-  static $message_Getter(mthis) native "DOMError_message_Getter";
+  static message_Getter(mthis) native "DOMError_message_Getter";
 
-  static $name_Getter(mthis) native "DOMError_name_Getter";
+  static name_Getter(mthis) native "DOMError_name_Getter";
 }
 
 class BlinkDOMException {
-  static $message_Getter(mthis) native "DOMException_message_Getter";
+  static message_Getter(mthis) native "DOMException_message_Getter";
 
-  static $name_Getter(mthis) native "DOMException_name_Getter";
+  static name_Getter(mthis) native "DOMException_name_Getter";
 
-  static $toString_Callback(mthis) native "DOMException_toString_Callback_RESOLVER_STRING_0_";
+  static toString_Callback(mthis) native "DOMException_toString_Callback";
 }
 
 class BlinkDOMFileSystem {
-  static $name_Getter(mthis) native "DOMFileSystem_name_Getter";
+  static name_Getter(mthis) native "DOMFileSystem_name_Getter";
 
-  static $root_Getter(mthis) native "DOMFileSystem_root_Getter";
+  static root_Getter(mthis) native "DOMFileSystem_root_Getter";
 }
 
 class BlinkDOMFileSystemSync {}
 
 class BlinkDOMImplementation {
-  static $createDocument_Callback(mthis, namespaceURI, qualifiedName, doctype) native "DOMImplementation_createDocument_Callback_RESOLVER_STRING_3_DOMString_DOMString_DocumentType";
+  static createDocument_Callback_DOMString_DOMString_DocumentType(mthis, namespaceURI, qualifiedName, doctype) native "DOMImplementation_createDocument_Callback_DOMString_DOMString_DocumentType";
 
-  static $createDocumentType_Callback(mthis, qualifiedName, publicId, systemId) native "DOMImplementation_createDocumentType_Callback_RESOLVER_STRING_3_DOMString_DOMString_DOMString";
+  static createDocumentType_Callback_DOMString_DOMString_DOMString(mthis, qualifiedName, publicId, systemId) native "DOMImplementation_createDocumentType_Callback_DOMString_DOMString_DOMString";
 
-  static $createHTMLDocument_Callback(mthis, title) native "DOMImplementation_createHTMLDocument_Callback_RESOLVER_STRING_1_DOMString";
+  static createHTMLDocument_Callback_DOMString(mthis, title) native "DOMImplementation_createHTMLDocument_Callback_DOMString";
 
-  static $hasFeature_Callback(mthis, feature, version) native "DOMImplementation_hasFeature_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static hasFeature_Callback_DOMString_DOMString(mthis, feature, version) native "DOMImplementation_hasFeature_Callback_DOMString_DOMString";
 }
 
 class BlinkDOMParser {
-  static $_create_1constructorCallback() native "DOMParser_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "DOMParser_constructorCallback";
 
-  static $parseFromString_Callback(mthis, str, contentType) native "DOMParser_parseFromString_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static parseFromString_Callback_DOMString_DOMString(mthis, str, contentType) native "DOMParser_parseFromString_Callback_DOMString_DOMString";
 }
 
 class BlinkDOMTokenList {
-  static $length_Getter(mthis) native "DOMTokenList_length_Getter";
+  static length_Getter(mthis) native "DOMTokenList_length_Getter";
 
-  static $contains_Callback(mthis, token) native "DOMTokenList_contains_Callback_RESOLVER_STRING_1_DOMString";
+  static contains_Callback_DOMString(mthis, token) native "DOMTokenList_contains_Callback_DOMString";
 
-  static $item_Callback(mthis, index) native "DOMTokenList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "DOMTokenList_item_Callback_unsigned long";
 
-  static $toString_Callback(mthis) native "DOMTokenList_toString_Callback_RESOLVER_STRING_0_";
+  static toString_Callback(mthis) native "DOMTokenList_toString_Callback";
 
-  static $_toggle_1_Callback(mthis, token, force) native "DOMTokenList_toggle_Callback_RESOLVER_STRING_2_DOMString_boolean";
+  static toggle_Callback_DOMString_boolean(mthis, token, force) native "DOMTokenList_toggle_Callback_DOMString_boolean";
 
-  static $_toggle_2_Callback(mthis, token) native "DOMTokenList_toggle_Callback_RESOLVER_STRING_1_DOMString";
+  static toggle_Callback_DOMString(mthis, token) native "DOMTokenList_toggle_Callback_DOMString";
 }
 
 class BlinkDOMSettableTokenList {
-  static $value_Getter(mthis) native "DOMSettableTokenList_value_Getter";
+  static value_Getter(mthis) native "DOMSettableTokenList_value_Getter";
 
-  static $value_Setter(mthis, value) native "DOMSettableTokenList_value_Setter";
+  static value_Setter_DOMString(mthis, value) native "DOMSettableTokenList_value_Setter";
 
-  static $__getter___Callback(mthis, index) native "DOMSettableTokenList___getter___Callback_RESOLVER_STRING_1_unsigned long";
+  static $__getter___Callback_ul(mthis, index) native "DOMSettableTokenList___getter___Callback_unsigned long";
 }
 
 class BlinkDOMStringList {
-  static $length_Getter(mthis) native "DOMStringList_length_Getter";
+  static length_Getter(mthis) native "DOMStringList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "DOMStringList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static contains_Callback_DOMString(mthis, string) native "DOMStringList_contains_Callback_DOMString";
 
-  static $contains_Callback(mthis, string) native "DOMStringList_contains_Callback_RESOLVER_STRING_1_DOMString";
-
-  static $item_Callback(mthis, index) native "DOMStringList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "DOMStringList_item_Callback_unsigned long";
 }
 
 class BlinkDOMStringMap {
-  static $___delete___1_Callback(mthis, index_OR_name) native "DOMStringMap___delete___Callback_RESOLVER_STRING_1_unsigned long";
+  static $__delete___Callback_ul(mthis, index_OR_name) native "DOMStringMap___delete___Callback_unsigned long";
 
-  static $___delete___2_Callback(mthis, index_OR_name) native "DOMStringMap___delete___Callback_RESOLVER_STRING_1_DOMString";
+  static $__delete___Callback_DOMString(mthis, index_OR_name) native "DOMStringMap___delete___Callback_DOMString";
 
-  static $___getter___1_Callback(mthis, index_OR_name) native "DOMStringMap___getter___Callback_RESOLVER_STRING_1_unsigned long";
+  static $__getter___Callback_ul(mthis, index_OR_name) native "DOMStringMap___getter___Callback_unsigned long";
 
-  static $___getter___2_Callback(mthis, index_OR_name) native "DOMStringMap___getter___Callback_RESOLVER_STRING_1_DOMString";
+  static $__getter___Callback_DOMString(mthis, index_OR_name) native "DOMStringMap___getter___Callback_DOMString";
 
-  static $___setter___1_Callback(mthis, index_OR_name, value) native "DOMStringMap___setter___Callback_RESOLVER_STRING_2_unsigned long_DOMString";
+  static $__setter___Callback_ul_DOMString(mthis, index_OR_name, value) native "DOMStringMap___setter___Callback_unsigned long_DOMString";
 
-  static $___setter___2_Callback(mthis, index_OR_name, value) native "DOMStringMap___setter___Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static $__setter___Callback_DOMString_DOMString(mthis, index_OR_name, value) native "DOMStringMap___setter___Callback_DOMString_DOMString";
 }
 
 class BlinkDataTransferItem {
-  static $kind_Getter(mthis) native "DataTransferItem_kind_Getter";
+  static kind_Getter(mthis) native "DataTransferItem_kind_Getter";
 
-  static $type_Getter(mthis) native "DataTransferItem_type_Getter";
+  static type_Getter(mthis) native "DataTransferItem_type_Getter";
 
-  static $getAsFile_Callback(mthis) native "DataTransferItem_getAsFile_Callback_RESOLVER_STRING_0_";
+  static getAsFile_Callback(mthis) native "DataTransferItem_getAsFile_Callback";
 
-  static $getAsString_Callback(mthis, callback) native "DataTransferItem_getAsString_Callback_RESOLVER_STRING_1_StringCallback";
+  static getAsString_Callback_StringCallback(mthis, callback) native "DataTransferItem_getAsString_Callback_StringCallback";
 
-  static $webkitGetAsEntry_Callback(mthis) native "DataTransferItem_webkitGetAsEntry_Callback_RESOLVER_STRING_0_";
+  static webkitGetAsEntry_Callback(mthis) native "DataTransferItem_webkitGetAsEntry_Callback";
 }
 
 class BlinkDataTransferItemList {
-  static $length_Getter(mthis) native "DataTransferItemList_length_Getter";
+  static length_Getter(mthis) native "DataTransferItemList_length_Getter";
 
-  static $__getter___Callback(mthis, index) native "DataTransferItemList___getter___Callback_RESOLVER_STRING_1_unsigned long";
+  static $__getter___Callback_ul(mthis, index) native "DataTransferItemList___getter___Callback_unsigned long";
 
-  static $_add_1_Callback(mthis, data_OR_file) native "DataTransferItemList_add_Callback_RESOLVER_STRING_1_File";
+  static add_Callback_File(mthis, data_OR_file) native "DataTransferItemList_add_Callback_File";
 
-  static $_add_2_Callback(mthis, data_OR_file, type) native "DataTransferItemList_add_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static add_Callback_DOMString_DOMString(mthis, data_OR_file, type) native "DataTransferItemList_add_Callback_DOMString_DOMString";
 
-  static $addData_Callback(mthis, data, type) native "DataTransferItemList_add_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static clear_Callback(mthis) native "DataTransferItemList_clear_Callback";
 
-  static $addFile_Callback(mthis, file) native "DataTransferItemList_add_Callback_RESOLVER_STRING_1_File";
-
-  static $clear_Callback(mthis) native "DataTransferItemList_clear_Callback_RESOLVER_STRING_0_";
-
-  static $remove_Callback(mthis, index) native "DataTransferItemList_remove_Callback_RESOLVER_STRING_1_unsigned long";
+  static remove_Callback_ul(mthis, index) native "DataTransferItemList_remove_Callback_unsigned long";
 }
 
 class BlinkDatabase {
-  static $version_Getter(mthis) native "Database_version_Getter";
+  static version_Getter(mthis) native "Database_version_Getter";
 
-  static $changeVersion_Callback(mthis, oldVersion, newVersion, callback, errorCallback, successCallback) native "Database_changeVersion_Callback_RESOLVER_STRING_5_DOMString_DOMString_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback";
+  static changeVersion_Callback_DOMString_DOMString_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback(mthis, oldVersion, newVersion, callback, errorCallback, successCallback) native "Database_changeVersion_Callback_DOMString_DOMString_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback";
 
-  static $readTransaction_Callback(mthis, callback, errorCallback, successCallback) native "Database_readTransaction_Callback_RESOLVER_STRING_3_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback";
+  static readTransaction_Callback_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback(mthis, callback, errorCallback, successCallback) native "Database_readTransaction_Callback_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback";
 
-  static $transaction_Callback(mthis, callback, errorCallback, successCallback) native "Database_transaction_Callback_RESOLVER_STRING_3_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback";
+  static transaction_Callback_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback(mthis, callback, errorCallback, successCallback) native "Database_transaction_Callback_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback";
 }
 
 class BlinkDatabaseSync {}
 
 class BlinkWindowBase64 {
-  static $atob_Callback(mthis, string) native "WindowBase64_atob_Callback_RESOLVER_STRING_1_DOMString";
+  static atob_Callback_DOMString(mthis, string) native "WindowBase64_atob_Callback_DOMString";
 
-  static $btoa_Callback(mthis, string) native "WindowBase64_btoa_Callback_RESOLVER_STRING_1_DOMString";
+  static btoa_Callback_DOMString(mthis, string) native "WindowBase64_btoa_Callback_DOMString";
 }
 
 class BlinkWindowTimers {
-  static $clearInterval_Callback(mthis, handle) native "WindowTimers_clearInterval_Callback_RESOLVER_STRING_1_long";
+  static clearInterval_Callback_long(mthis, handle) native "WindowTimers_clearInterval_Callback_long";
 
-  static $clearTimeout_Callback(mthis, handle) native "WindowTimers_clearTimeout_Callback_RESOLVER_STRING_1_long";
+  static clearTimeout_Callback_long(mthis, handle) native "WindowTimers_clearTimeout_Callback_long";
 
-  static $setInterval_Callback(mthis, handler, timeout) native "WindowTimers_setInterval_Callback";
+  static setInterval_Callback_ScriptValue_long(mthis, handler, timeout) native "WindowTimers_setInterval_Callback";
 
-  static $setTimeout_Callback(mthis, handler, timeout) native "WindowTimers_setTimeout_Callback";
+  static setTimeout_Callback_ScriptValue_long(mthis, handler, timeout) native "WindowTimers_setTimeout_Callback";
 }
 
 class BlinkWorkerGlobalScope {
-  static $console_Getter(mthis) native "WorkerGlobalScope_console_Getter";
+  static console_Getter(mthis) native "WorkerGlobalScope_console_Getter";
 
-  static $crypto_Getter(mthis) native "WorkerGlobalScope_crypto_Getter";
+  static crypto_Getter(mthis) native "WorkerGlobalScope_crypto_Getter";
 
-  static $indexedDB_Getter(mthis) native "WorkerGlobalScope_indexedDB_Getter";
+  static indexedDB_Getter(mthis) native "WorkerGlobalScope_indexedDB_Getter";
 
-  static $location_Getter(mthis) native "WorkerGlobalScope_location_Getter";
+  static location_Getter(mthis) native "WorkerGlobalScope_location_Getter";
 
-  static $navigator_Getter(mthis) native "WorkerGlobalScope_navigator_Getter";
+  static navigator_Getter(mthis) native "WorkerGlobalScope_navigator_Getter";
 
-  static $performance_Getter(mthis) native "WorkerGlobalScope_performance_Getter";
+  static performance_Getter(mthis) native "WorkerGlobalScope_performance_Getter";
 
-  static $self_Getter(mthis) native "WorkerGlobalScope_self_Getter";
+  static self_Getter(mthis) native "WorkerGlobalScope_self_Getter";
 
-  static $close_Callback(mthis) native "WorkerGlobalScope_close_Callback_RESOLVER_STRING_0_";
+  static close_Callback(mthis) native "WorkerGlobalScope_close_Callback";
 
-  static $openDatabase_Callback(mthis, name, version, displayName, estimatedSize, creationCallback) native "WorkerGlobalScope_openDatabase_Callback_RESOLVER_STRING_5_DOMString_DOMString_DOMString_unsigned long_DatabaseCallback";
+  static openDatabase_Callback_DOMString_DOMString_DOMString_ul_DatabaseCallback(mthis, name, version, displayName, estimatedSize, creationCallback) native "WorkerGlobalScope_openDatabase_Callback_DOMString_DOMString_DOMString_unsigned long_DatabaseCallback";
 
-  static $openDatabaseSync_Callback(mthis, name, version, displayName, estimatedSize, creationCallback) native "WorkerGlobalScope_openDatabaseSync_Callback_RESOLVER_STRING_5_DOMString_DOMString_DOMString_unsigned long_DatabaseCallback";
+  static openDatabaseSync_Callback_DOMString_DOMString_DOMString_ul_DatabaseCallback(mthis, name, version, displayName, estimatedSize, creationCallback) native "WorkerGlobalScope_openDatabaseSync_Callback_DOMString_DOMString_DOMString_unsigned long_DatabaseCallback";
 
-  static $webkitRequestFileSystem_Callback(mthis, type, size, successCallback, errorCallback) native "WorkerGlobalScope_webkitRequestFileSystem_Callback_RESOLVER_STRING_4_unsigned short_long long_FileSystemCallback_ErrorCallback";
+  static webkitRequestFileSystem_Callback_us_ll_FileSystemCallback_ErrorCallback(mthis, type, size, successCallback, errorCallback) native "WorkerGlobalScope_webkitRequestFileSystem_Callback_unsigned short_long long_FileSystemCallback_ErrorCallback";
 
-  static $webkitRequestFileSystemSync_Callback(mthis, type, size) native "WorkerGlobalScope_webkitRequestFileSystemSync_Callback_RESOLVER_STRING_2_unsigned short_long long";
+  static webkitRequestFileSystemSync_Callback_us_ll(mthis, type, size) native "WorkerGlobalScope_webkitRequestFileSystemSync_Callback_unsigned short_long long";
 
-  static $webkitResolveLocalFileSystemSyncURL_Callback(mthis, url) native "WorkerGlobalScope_webkitResolveLocalFileSystemSyncURL_Callback_RESOLVER_STRING_1_DOMString";
+  static webkitResolveLocalFileSystemSyncURL_Callback_DOMString(mthis, url) native "WorkerGlobalScope_webkitResolveLocalFileSystemSyncURL_Callback_DOMString";
 
-  static $webkitResolveLocalFileSystemURL_Callback(mthis, url, successCallback, errorCallback) native "WorkerGlobalScope_webkitResolveLocalFileSystemURL_Callback_RESOLVER_STRING_3_DOMString_EntryCallback_ErrorCallback";
+  static webkitResolveLocalFileSystemURL_Callback_DOMString_EntryCallback_ErrorCallback(mthis, url, successCallback, errorCallback) native "WorkerGlobalScope_webkitResolveLocalFileSystemURL_Callback_DOMString_EntryCallback_ErrorCallback";
 
-  static $atob_Callback(mthis, string) native "WorkerGlobalScope_atob_Callback_RESOLVER_STRING_1_DOMString";
+  static atob_Callback_DOMString(mthis, string) native "WorkerGlobalScope_atob_Callback_DOMString";
 
-  static $btoa_Callback(mthis, string) native "WorkerGlobalScope_btoa_Callback_RESOLVER_STRING_1_DOMString";
+  static btoa_Callback_DOMString(mthis, string) native "WorkerGlobalScope_btoa_Callback_DOMString";
 
-  static $clearInterval_Callback(mthis, handle) native "WorkerGlobalScope_clearInterval_Callback_RESOLVER_STRING_1_long";
+  static clearInterval_Callback_long(mthis, handle) native "WorkerGlobalScope_clearInterval_Callback_long";
 
-  static $clearTimeout_Callback(mthis, handle) native "WorkerGlobalScope_clearTimeout_Callback_RESOLVER_STRING_1_long";
+  static clearTimeout_Callback_long(mthis, handle) native "WorkerGlobalScope_clearTimeout_Callback_long";
 
-  static $setInterval_Callback(mthis, handler, timeout) native "WorkerGlobalScope_setInterval_Callback";
+  static setInterval_Callback_ScriptValue_long(mthis, handler, timeout) native "WorkerGlobalScope_setInterval_Callback";
 
-  static $setTimeout_Callback(mthis, handler, timeout) native "WorkerGlobalScope_setTimeout_Callback";
+  static setTimeout_Callback_ScriptValue_long(mthis, handler, timeout) native "WorkerGlobalScope_setTimeout_Callback";
 }
 
 class BlinkDedicatedWorkerGlobalScope {
-  static $postMessage_Callback(mthis, message, messagePorts) native "DedicatedWorkerGlobalScope_postMessage_Callback";
+  static postMessage_Callback_ScriptValue_A_MessagePort_A(mthis, message, messagePorts) native "DedicatedWorkerGlobalScope_postMessage_Callback";
 }
 
 class BlinkDelayNode {
-  static $delayTime_Getter(mthis) native "DelayNode_delayTime_Getter";
+  static delayTime_Getter(mthis) native "DelayNode_delayTime_Getter";
 }
 
 class BlinkDeprecatedStorageInfo {
-  static $queryUsageAndQuota_Callback(mthis, storageType, usageCallback, errorCallback) native "DeprecatedStorageInfo_queryUsageAndQuota_Callback_RESOLVER_STRING_3_unsigned short_StorageUsageCallback_StorageErrorCallback";
+  static queryUsageAndQuota_Callback_us_StorageUsageCallback_StorageErrorCallback(mthis, storageType, usageCallback, errorCallback) native "DeprecatedStorageInfo_queryUsageAndQuota_Callback_unsigned short_StorageUsageCallback_StorageErrorCallback";
 
-  static $requestQuota_Callback(mthis, storageType, newQuotaInBytes, quotaCallback, errorCallback) native "DeprecatedStorageInfo_requestQuota_Callback_RESOLVER_STRING_4_unsigned short_unsigned long long_StorageQuotaCallback_StorageErrorCallback";
+  static requestQuota_Callback_us_ull_StorageQuotaCallback_StorageErrorCallback(mthis, storageType, newQuotaInBytes, quotaCallback, errorCallback) native "DeprecatedStorageInfo_requestQuota_Callback_unsigned short_unsigned long long_StorageQuotaCallback_StorageErrorCallback";
 }
 
 class BlinkDeprecatedStorageQuota {
-  static $queryUsageAndQuota_Callback(mthis, usageCallback, errorCallback) native "DeprecatedStorageQuota_queryUsageAndQuota_Callback_RESOLVER_STRING_2_StorageUsageCallback_StorageErrorCallback";
+  static queryUsageAndQuota_Callback_StorageUsageCallback_StorageErrorCallback(mthis, usageCallback, errorCallback) native "DeprecatedStorageQuota_queryUsageAndQuota_Callback_StorageUsageCallback_StorageErrorCallback";
 
-  static $requestQuota_Callback(mthis, newQuotaInBytes, quotaCallback, errorCallback) native "DeprecatedStorageQuota_requestQuota_Callback_RESOLVER_STRING_3_unsigned long long_StorageQuotaCallback_StorageErrorCallback";
+  static requestQuota_Callback_ull_StorageQuotaCallback_StorageErrorCallback(mthis, newQuotaInBytes, quotaCallback, errorCallback) native "DeprecatedStorageQuota_requestQuota_Callback_unsigned long long_StorageQuotaCallback_StorageErrorCallback";
 }
 
 class BlinkDeviceAcceleration {
-  static $x_Getter(mthis) native "DeviceAcceleration_x_Getter";
+  static x_Getter(mthis) native "DeviceAcceleration_x_Getter";
 
-  static $y_Getter(mthis) native "DeviceAcceleration_y_Getter";
+  static y_Getter(mthis) native "DeviceAcceleration_y_Getter";
 
-  static $z_Getter(mthis) native "DeviceAcceleration_z_Getter";
+  static z_Getter(mthis) native "DeviceAcceleration_z_Getter";
 }
 
 class BlinkDeviceMotionEvent {
-  static $acceleration_Getter(mthis) native "DeviceMotionEvent_acceleration_Getter";
+  static acceleration_Getter(mthis) native "DeviceMotionEvent_acceleration_Getter";
 
-  static $accelerationIncludingGravity_Getter(mthis) native "DeviceMotionEvent_accelerationIncludingGravity_Getter";
+  static accelerationIncludingGravity_Getter(mthis) native "DeviceMotionEvent_accelerationIncludingGravity_Getter";
 
-  static $interval_Getter(mthis) native "DeviceMotionEvent_interval_Getter";
+  static interval_Getter(mthis) native "DeviceMotionEvent_interval_Getter";
 
-  static $rotationRate_Getter(mthis) native "DeviceMotionEvent_rotationRate_Getter";
+  static rotationRate_Getter(mthis) native "DeviceMotionEvent_rotationRate_Getter";
 
-  static $initDeviceMotionEvent_Callback(mthis, type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval) native "DeviceMotionEvent_initDeviceMotionEvent_Callback";
+  static initDeviceMotionEvent_Callback_DOMString_boolean_boolean_DeviceAcceleration_DeviceAcceleration_DeviceRotationRate_double(mthis, type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval) native "DeviceMotionEvent_initDeviceMotionEvent_Callback";
 }
 
 class BlinkDeviceOrientationEvent {
-  static $absolute_Getter(mthis) native "DeviceOrientationEvent_absolute_Getter";
+  static absolute_Getter(mthis) native "DeviceOrientationEvent_absolute_Getter";
 
-  static $alpha_Getter(mthis) native "DeviceOrientationEvent_alpha_Getter";
+  static alpha_Getter(mthis) native "DeviceOrientationEvent_alpha_Getter";
 
-  static $beta_Getter(mthis) native "DeviceOrientationEvent_beta_Getter";
+  static beta_Getter(mthis) native "DeviceOrientationEvent_beta_Getter";
 
-  static $gamma_Getter(mthis) native "DeviceOrientationEvent_gamma_Getter";
+  static gamma_Getter(mthis) native "DeviceOrientationEvent_gamma_Getter";
 
-  static $initDeviceOrientationEvent_Callback(mthis, type, bubbles, cancelable, alpha, beta, gamma, absolute) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
+  static initDeviceOrientationEvent_Callback_DOMString_boolean_boolean_double_double_double_boolean(mthis, type, bubbles, cancelable, alpha, beta, gamma, absolute) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
 }
 
 class BlinkDeviceRotationRate {
-  static $alpha_Getter(mthis) native "DeviceRotationRate_alpha_Getter";
+  static alpha_Getter(mthis) native "DeviceRotationRate_alpha_Getter";
 
-  static $beta_Getter(mthis) native "DeviceRotationRate_beta_Getter";
+  static beta_Getter(mthis) native "DeviceRotationRate_beta_Getter";
 
-  static $gamma_Getter(mthis) native "DeviceRotationRate_gamma_Getter";
+  static gamma_Getter(mthis) native "DeviceRotationRate_gamma_Getter";
 }
 
 class BlinkEntry {
-  static $filesystem_Getter(mthis) native "Entry_filesystem_Getter";
+  static filesystem_Getter(mthis) native "Entry_filesystem_Getter";
 
-  static $fullPath_Getter(mthis) native "Entry_fullPath_Getter";
+  static fullPath_Getter(mthis) native "Entry_fullPath_Getter";
 
-  static $isDirectory_Getter(mthis) native "Entry_isDirectory_Getter";
+  static isDirectory_Getter(mthis) native "Entry_isDirectory_Getter";
 
-  static $isFile_Getter(mthis) native "Entry_isFile_Getter";
+  static isFile_Getter(mthis) native "Entry_isFile_Getter";
 
-  static $name_Getter(mthis) native "Entry_name_Getter";
+  static name_Getter(mthis) native "Entry_name_Getter";
 
-  static $_copyTo_1_Callback(mthis, parent, name, successCallback, errorCallback) native "Entry_copyTo_Callback_RESOLVER_STRING_4_DirectoryEntry_DOMString_EntryCallback_ErrorCallback";
+  static copyTo_Callback_DirectoryEntry_DOMString_EntryCallback_ErrorCallback(mthis, parent, name, successCallback, errorCallback) native "Entry_copyTo_Callback_DirectoryEntry_DOMString_EntryCallback_ErrorCallback";
 
-  static $_copyTo_2_Callback(mthis, parent) native "Entry_copyTo_Callback_RESOLVER_STRING_1_DirectoryEntry";
+  static copyTo_Callback_DirectoryEntry(mthis, parent) native "Entry_copyTo_Callback_DirectoryEntry";
 
-  static $getMetadata_Callback(mthis, successCallback, errorCallback) native "Entry_getMetadata_Callback_RESOLVER_STRING_2_MetadataCallback_ErrorCallback";
+  static getMetadata_Callback_MetadataCallback_ErrorCallback(mthis, successCallback, errorCallback) native "Entry_getMetadata_Callback_MetadataCallback_ErrorCallback";
 
-  static $getParent_Callback(mthis, successCallback, errorCallback) native "Entry_getParent_Callback_RESOLVER_STRING_2_EntryCallback_ErrorCallback";
+  static getParent_Callback_EntryCallback_ErrorCallback(mthis, successCallback, errorCallback) native "Entry_getParent_Callback_EntryCallback_ErrorCallback";
 
-  static $_moveTo_1_Callback(mthis, parent, name, successCallback, errorCallback) native "Entry_moveTo_Callback_RESOLVER_STRING_4_DirectoryEntry_DOMString_EntryCallback_ErrorCallback";
+  static moveTo_Callback_DirectoryEntry_DOMString_EntryCallback_ErrorCallback(mthis, parent, name, successCallback, errorCallback) native "Entry_moveTo_Callback_DirectoryEntry_DOMString_EntryCallback_ErrorCallback";
 
-  static $_moveTo_2_Callback(mthis, parent) native "Entry_moveTo_Callback_RESOLVER_STRING_1_DirectoryEntry";
+  static moveTo_Callback_DirectoryEntry(mthis, parent) native "Entry_moveTo_Callback_DirectoryEntry";
 
-  static $remove_Callback(mthis, successCallback, errorCallback) native "Entry_remove_Callback_RESOLVER_STRING_2_VoidCallback_ErrorCallback";
+  static remove_Callback_VoidCallback_ErrorCallback(mthis, successCallback, errorCallback) native "Entry_remove_Callback_VoidCallback_ErrorCallback";
 
-  static $toURL_Callback(mthis) native "Entry_toURL_Callback_RESOLVER_STRING_0_";
+  static toURL_Callback(mthis) native "Entry_toURL_Callback";
 }
 
 class BlinkDirectoryEntry {
-  static $createReader_Callback(mthis) native "DirectoryEntry_createReader_Callback_RESOLVER_STRING_0_";
+  static createReader_Callback(mthis) native "DirectoryEntry_createReader_Callback";
 
-  static $getDirectory_Callback(mthis, path, options, successCallback, errorCallback) native "DirectoryEntry_getDirectory_Callback_RESOLVER_STRING_4_DOMString_Dictionary_EntryCallback_ErrorCallback";
+  static getDirectory_Callback_DOMString_Dictionary_EntryCallback_ErrorCallback(mthis, path, options, successCallback, errorCallback) native "DirectoryEntry_getDirectory_Callback_DOMString_Dictionary_EntryCallback_ErrorCallback";
 
-  static $getFile_Callback(mthis, path, options, successCallback, errorCallback) native "DirectoryEntry_getFile_Callback_RESOLVER_STRING_4_DOMString_Dictionary_EntryCallback_ErrorCallback";
+  static getFile_Callback_DOMString_Dictionary_EntryCallback_ErrorCallback(mthis, path, options, successCallback, errorCallback) native "DirectoryEntry_getFile_Callback_DOMString_Dictionary_EntryCallback_ErrorCallback";
 
-  static $removeRecursively_Callback(mthis, successCallback, errorCallback) native "DirectoryEntry_removeRecursively_Callback_RESOLVER_STRING_2_VoidCallback_ErrorCallback";
+  static removeRecursively_Callback_VoidCallback_ErrorCallback(mthis, successCallback, errorCallback) native "DirectoryEntry_removeRecursively_Callback_VoidCallback_ErrorCallback";
 }
 
 class BlinkEntrySync {}
@@ -1341,7 +1329,7 @@
 class BlinkDirectoryEntrySync {}
 
 class BlinkDirectoryReader {
-  static $readEntries_Callback(mthis, successCallback, errorCallback) native "DirectoryReader_readEntries_Callback_RESOLVER_STRING_2_EntriesCallback_ErrorCallback";
+  static readEntries_Callback_EntriesCallback_ErrorCallback(mthis, successCallback, errorCallback) native "DirectoryReader_readEntries_Callback_EntriesCallback_ErrorCallback";
 }
 
 class BlinkDirectoryReaderSync {}
@@ -1349,179 +1337,179 @@
 class BlinkGlobalEventHandlers {}
 
 class BlinkParentNode {
-  static $childElementCount_Getter(mthis) native "ParentNode_childElementCount_Getter";
+  static childElementCount_Getter(mthis) native "ParentNode_childElementCount_Getter";
 
-  static $children_Getter(mthis) native "ParentNode_children_Getter";
+  static children_Getter(mthis) native "ParentNode_children_Getter";
 
-  static $firstElementChild_Getter(mthis) native "ParentNode_firstElementChild_Getter";
+  static firstElementChild_Getter(mthis) native "ParentNode_firstElementChild_Getter";
 
-  static $lastElementChild_Getter(mthis) native "ParentNode_lastElementChild_Getter";
+  static lastElementChild_Getter(mthis) native "ParentNode_lastElementChild_Getter";
 }
 
 class BlinkDocument {
-  static $activeElement_Getter(mthis) native "Document_activeElement_Getter";
+  static activeElement_Getter(mthis) native "Document_activeElement_Getter";
 
-  static $body_Getter(mthis) native "Document_body_Getter";
+  static body_Getter(mthis) native "Document_body_Getter";
 
-  static $body_Setter(mthis, value) native "Document_body_Setter";
+  static body_Setter_HTMLElement(mthis, value) native "Document_body_Setter";
 
-  static $cookie_Getter(mthis) native "Document_cookie_Getter";
+  static cookie_Getter(mthis) native "Document_cookie_Getter";
 
-  static $cookie_Setter(mthis, value) native "Document_cookie_Setter";
+  static cookie_Setter_DOMString(mthis, value) native "Document_cookie_Setter";
 
-  static $currentScript_Getter(mthis) native "Document_currentScript_Getter";
+  static currentScript_Getter(mthis) native "Document_currentScript_Getter";
 
-  static $defaultView_Getter(mthis) native "Document_defaultView_Getter";
+  static defaultView_Getter(mthis) native "Document_defaultView_Getter";
 
-  static $documentElement_Getter(mthis) native "Document_documentElement_Getter";
+  static documentElement_Getter(mthis) native "Document_documentElement_Getter";
 
-  static $domain_Getter(mthis) native "Document_domain_Getter";
+  static domain_Getter(mthis) native "Document_domain_Getter";
 
-  static $fonts_Getter(mthis) native "Document_fonts_Getter";
+  static fonts_Getter(mthis) native "Document_fonts_Getter";
 
-  static $head_Getter(mthis) native "Document_head_Getter";
+  static head_Getter(mthis) native "Document_head_Getter";
 
-  static $hidden_Getter(mthis) native "Document_hidden_Getter";
+  static hidden_Getter(mthis) native "Document_hidden_Getter";
 
-  static $implementation_Getter(mthis) native "Document_implementation_Getter";
+  static implementation_Getter(mthis) native "Document_implementation_Getter";
 
-  static $lastModified_Getter(mthis) native "Document_lastModified_Getter";
+  static lastModified_Getter(mthis) native "Document_lastModified_Getter";
 
-  static $preferredStylesheetSet_Getter(mthis) native "Document_preferredStylesheetSet_Getter";
+  static preferredStylesheetSet_Getter(mthis) native "Document_preferredStylesheetSet_Getter";
 
-  static $readyState_Getter(mthis) native "Document_readyState_Getter";
+  static readyState_Getter(mthis) native "Document_readyState_Getter";
 
-  static $referrer_Getter(mthis) native "Document_referrer_Getter";
+  static referrer_Getter(mthis) native "Document_referrer_Getter";
 
-  static $rootElement_Getter(mthis) native "Document_rootElement_Getter";
+  static rootElement_Getter(mthis) native "Document_rootElement_Getter";
 
-  static $selectedStylesheetSet_Getter(mthis) native "Document_selectedStylesheetSet_Getter";
+  static selectedStylesheetSet_Getter(mthis) native "Document_selectedStylesheetSet_Getter";
 
-  static $selectedStylesheetSet_Setter(mthis, value) native "Document_selectedStylesheetSet_Setter";
+  static selectedStylesheetSet_Setter_DOMString(mthis, value) native "Document_selectedStylesheetSet_Setter";
 
-  static $styleSheets_Getter(mthis) native "Document_styleSheets_Getter";
+  static styleSheets_Getter(mthis) native "Document_styleSheets_Getter";
 
-  static $timeline_Getter(mthis) native "Document_timeline_Getter";
+  static timeline_Getter(mthis) native "Document_timeline_Getter";
 
-  static $title_Getter(mthis) native "Document_title_Getter";
+  static title_Getter(mthis) native "Document_title_Getter";
 
-  static $title_Setter(mthis, value) native "Document_title_Setter";
+  static title_Setter_DOMString(mthis, value) native "Document_title_Setter";
 
-  static $visibilityState_Getter(mthis) native "Document_visibilityState_Getter";
+  static visibilityState_Getter(mthis) native "Document_visibilityState_Getter";
 
-  static $webkitFullscreenElement_Getter(mthis) native "Document_webkitFullscreenElement_Getter";
+  static webkitFullscreenElement_Getter(mthis) native "Document_webkitFullscreenElement_Getter";
 
-  static $webkitFullscreenEnabled_Getter(mthis) native "Document_webkitFullscreenEnabled_Getter";
+  static webkitFullscreenEnabled_Getter(mthis) native "Document_webkitFullscreenEnabled_Getter";
 
-  static $webkitHidden_Getter(mthis) native "Document_webkitHidden_Getter";
+  static webkitHidden_Getter(mthis) native "Document_webkitHidden_Getter";
 
-  static $webkitPointerLockElement_Getter(mthis) native "Document_webkitPointerLockElement_Getter";
+  static webkitPointerLockElement_Getter(mthis) native "Document_webkitPointerLockElement_Getter";
 
-  static $webkitVisibilityState_Getter(mthis) native "Document_webkitVisibilityState_Getter";
+  static webkitVisibilityState_Getter(mthis) native "Document_webkitVisibilityState_Getter";
 
-  static $adoptNode_Callback(mthis, node) native "Document_adoptNode_Callback_RESOLVER_STRING_1_Node";
+  static adoptNode_Callback_Node(mthis, node) native "Document_adoptNode_Callback_Node";
 
-  static $caretRangeFromPoint_Callback(mthis, x, y) native "Document_caretRangeFromPoint_Callback_RESOLVER_STRING_2_long_long";
+  static caretRangeFromPoint_Callback_long_long(mthis, x, y) native "Document_caretRangeFromPoint_Callback_long_long";
 
-  static $createDocumentFragment_Callback(mthis) native "Document_createDocumentFragment_Callback_RESOLVER_STRING_0_";
+  static createDocumentFragment_Callback(mthis) native "Document_createDocumentFragment_Callback";
 
-  static $createElement_Callback(mthis, localName_OR_tagName, typeExtension) native "Document_createElement_Callback";
+  static createElement_Callback_DOMString(mthis, localName_OR_tagName, typeExtension) native "Document_createElement_Callback";
 
-  static $createElementNS_Callback(mthis, namespaceURI, qualifiedName, typeExtension) native "Document_createElementNS_Callback";
+  static createElementNS_Callback_DOMString_DOMString(mthis, namespaceURI, qualifiedName, typeExtension) native "Document_createElementNS_Callback";
 
-  static $_createEvent_1_Callback(mthis, eventType) native "Document_createEvent_Callback_RESOLVER_STRING_1_DOMString";
+  static createEvent_Callback_DOMString(mthis, eventType) native "Document_createEvent_Callback_DOMString";
 
-  static $_createEvent_2_Callback(mthis) native "Document_createEvent_Callback_RESOLVER_STRING_0_";
+  static createEvent_Callback(mthis) native "Document_createEvent_Callback";
 
-  static $_createNodeIterator_1_Callback(mthis, root, whatToShow, filter) native "Document_createNodeIterator_Callback_RESOLVER_STRING_3_Node_unsigned long_NodeFilter";
+  static createNodeIterator_Callback_Node_ul_NodeFilter(mthis, root, whatToShow, filter) native "Document_createNodeIterator_Callback_Node_unsigned long_NodeFilter";
 
-  static $_createNodeIterator_2_Callback(mthis, root, whatToShow) native "Document_createNodeIterator_Callback_RESOLVER_STRING_2_Node_unsigned long";
+  static createNodeIterator_Callback_Node_ul(mthis, root, whatToShow) native "Document_createNodeIterator_Callback_Node_unsigned long";
 
-  static $_createNodeIterator_3_Callback(mthis, root) native "Document_createNodeIterator_Callback_RESOLVER_STRING_1_Node";
+  static createNodeIterator_Callback_Node(mthis, root) native "Document_createNodeIterator_Callback_Node";
 
-  static $createRange_Callback(mthis) native "Document_createRange_Callback_RESOLVER_STRING_0_";
+  static createRange_Callback(mthis) native "Document_createRange_Callback";
 
-  static $createTextNode_Callback(mthis, data) native "Document_createTextNode_Callback_RESOLVER_STRING_1_DOMString";
+  static createTextNode_Callback_DOMString(mthis, data) native "Document_createTextNode_Callback_DOMString";
 
-  static $createTouch_Callback(mthis, window, target, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce) native "Document_createTouch_Callback_RESOLVER_STRING_11_Window_EventTarget_long_long_long_long_long_long_long_float_float";
+  static createTouch_Callback_Window_EventTarget_long_long_long_long_long_long_long_float_float(mthis, window, target, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce) native "Document_createTouch_Callback_Window_EventTarget_long_long_long_long_long_long_long_float_float";
 
-  static $_createTreeWalker_1_Callback(mthis, root, whatToShow, filter) native "Document_createTreeWalker_Callback_RESOLVER_STRING_3_Node_unsigned long_NodeFilter";
+  static createTreeWalker_Callback_Node_ul_NodeFilter(mthis, root, whatToShow, filter) native "Document_createTreeWalker_Callback_Node_unsigned long_NodeFilter";
 
-  static $_createTreeWalker_2_Callback(mthis, root, whatToShow) native "Document_createTreeWalker_Callback_RESOLVER_STRING_2_Node_unsigned long";
+  static createTreeWalker_Callback_Node_ul(mthis, root, whatToShow) native "Document_createTreeWalker_Callback_Node_unsigned long";
 
-  static $_createTreeWalker_3_Callback(mthis, root) native "Document_createTreeWalker_Callback_RESOLVER_STRING_1_Node";
+  static createTreeWalker_Callback_Node(mthis, root) native "Document_createTreeWalker_Callback_Node";
 
-  static $elementFromPoint_Callback(mthis, x, y) native "Document_elementFromPoint_Callback_RESOLVER_STRING_2_long_long";
+  static elementFromPoint_Callback_long_long(mthis, x, y) native "Document_elementFromPoint_Callback_long_long";
 
-  static $execCommand_Callback(mthis, command, userInterface, value) native "Document_execCommand_Callback_RESOLVER_STRING_3_DOMString_boolean_DOMString";
+  static execCommand_Callback_DOMString_boolean_DOMString(mthis, command, userInterface, value) native "Document_execCommand_Callback_DOMString_boolean_DOMString";
 
-  static $getCSSCanvasContext_Callback(mthis, contextId, name, width, height) native "Document_getCSSCanvasContext_Callback_RESOLVER_STRING_4_DOMString_DOMString_long_long";
+  static getCSSCanvasContext_Callback_DOMString_DOMString_long_long(mthis, contextId, name, width, height) native "Document_getCSSCanvasContext_Callback_DOMString_DOMString_long_long";
 
-  static $getElementById_Callback(mthis, elementId) native "Document_getElementById_Callback_RESOLVER_STRING_1_DOMString";
+  static getElementById_Callback_DOMString(mthis, elementId) native "Document_getElementById_Callback_DOMString";
 
-  static $getElementsByClassName_Callback(mthis, classNames) native "Document_getElementsByClassName_Callback_RESOLVER_STRING_1_DOMString";
+  static getElementsByClassName_Callback_DOMString(mthis, classNames) native "Document_getElementsByClassName_Callback_DOMString";
 
-  static $getElementsByName_Callback(mthis, elementName) native "Document_getElementsByName_Callback_RESOLVER_STRING_1_DOMString";
+  static getElementsByName_Callback_DOMString(mthis, elementName) native "Document_getElementsByName_Callback_DOMString";
 
-  static $getElementsByTagName_Callback(mthis, localName) native "Document_getElementsByTagName_Callback_RESOLVER_STRING_1_DOMString";
+  static getElementsByTagName_Callback_DOMString(mthis, localName) native "Document_getElementsByTagName_Callback_DOMString";
 
-  static $_importNode_1_Callback(mthis, node, deep) native "Document_importNode_Callback_RESOLVER_STRING_2_Node_boolean";
+  static importNode_Callback_Node_boolean(mthis, node, deep) native "Document_importNode_Callback_Node_boolean";
 
-  static $_importNode_2_Callback(mthis, node) native "Document_importNode_Callback_RESOLVER_STRING_1_Node";
+  static importNode_Callback_Node(mthis, node) native "Document_importNode_Callback_Node";
 
-  static $queryCommandEnabled_Callback(mthis, command) native "Document_queryCommandEnabled_Callback_RESOLVER_STRING_1_DOMString";
+  static queryCommandEnabled_Callback_DOMString(mthis, command) native "Document_queryCommandEnabled_Callback_DOMString";
 
-  static $queryCommandIndeterm_Callback(mthis, command) native "Document_queryCommandIndeterm_Callback_RESOLVER_STRING_1_DOMString";
+  static queryCommandIndeterm_Callback_DOMString(mthis, command) native "Document_queryCommandIndeterm_Callback_DOMString";
 
-  static $queryCommandState_Callback(mthis, command) native "Document_queryCommandState_Callback_RESOLVER_STRING_1_DOMString";
+  static queryCommandState_Callback_DOMString(mthis, command) native "Document_queryCommandState_Callback_DOMString";
 
-  static $queryCommandSupported_Callback(mthis, command) native "Document_queryCommandSupported_Callback_RESOLVER_STRING_1_DOMString";
+  static queryCommandSupported_Callback_DOMString(mthis, command) native "Document_queryCommandSupported_Callback_DOMString";
 
-  static $queryCommandValue_Callback(mthis, command) native "Document_queryCommandValue_Callback_RESOLVER_STRING_1_DOMString";
+  static queryCommandValue_Callback_DOMString(mthis, command) native "Document_queryCommandValue_Callback_DOMString";
 
-  static $querySelector_Callback(mthis, selectors) native "Document_querySelector_Callback_RESOLVER_STRING_1_DOMString";
+  static querySelector_Callback_DOMString(mthis, selectors) native "Document_querySelector_Callback_DOMString";
 
-  static $querySelectorAll_Callback(mthis, selectors) native "Document_querySelectorAll_Callback_RESOLVER_STRING_1_DOMString";
+  static querySelectorAll_Callback_DOMString(mthis, selectors) native "Document_querySelectorAll_Callback_DOMString";
 
-  static $webkitExitFullscreen_Callback(mthis) native "Document_webkitExitFullscreen_Callback_RESOLVER_STRING_0_";
+  static webkitExitFullscreen_Callback(mthis) native "Document_webkitExitFullscreen_Callback";
 
-  static $webkitExitPointerLock_Callback(mthis) native "Document_webkitExitPointerLock_Callback_RESOLVER_STRING_0_";
+  static webkitExitPointerLock_Callback(mthis) native "Document_webkitExitPointerLock_Callback";
 
-  static $childElementCount_Getter(mthis) native "Document_childElementCount_Getter";
+  static childElementCount_Getter(mthis) native "Document_childElementCount_Getter";
 
-  static $children_Getter(mthis) native "Document_children_Getter";
+  static children_Getter(mthis) native "Document_children_Getter";
 
-  static $firstElementChild_Getter(mthis) native "Document_firstElementChild_Getter";
+  static firstElementChild_Getter(mthis) native "Document_firstElementChild_Getter";
 
-  static $lastElementChild_Getter(mthis) native "Document_lastElementChild_Getter";
+  static lastElementChild_Getter(mthis) native "Document_lastElementChild_Getter";
 }
 
 class BlinkDocumentFragment {
-  static $querySelector_Callback(mthis, selectors) native "DocumentFragment_querySelector_Callback_RESOLVER_STRING_1_DOMString";
+  static querySelector_Callback_DOMString(mthis, selectors) native "DocumentFragment_querySelector_Callback_DOMString";
 
-  static $querySelectorAll_Callback(mthis, selectors) native "DocumentFragment_querySelectorAll_Callback_RESOLVER_STRING_1_DOMString";
+  static querySelectorAll_Callback_DOMString(mthis, selectors) native "DocumentFragment_querySelectorAll_Callback_DOMString";
 
-  static $childElementCount_Getter(mthis) native "DocumentFragment_childElementCount_Getter";
+  static childElementCount_Getter(mthis) native "DocumentFragment_childElementCount_Getter";
 
-  static $firstElementChild_Getter(mthis) native "DocumentFragment_firstElementChild_Getter";
+  static firstElementChild_Getter(mthis) native "DocumentFragment_firstElementChild_Getter";
 
-  static $lastElementChild_Getter(mthis) native "DocumentFragment_lastElementChild_Getter";
+  static lastElementChild_Getter(mthis) native "DocumentFragment_lastElementChild_Getter";
 }
 
 class BlinkDocumentType {}
 
 class BlinkDynamicsCompressorNode {
-  static $attack_Getter(mthis) native "DynamicsCompressorNode_attack_Getter";
+  static attack_Getter(mthis) native "DynamicsCompressorNode_attack_Getter";
 
-  static $knee_Getter(mthis) native "DynamicsCompressorNode_knee_Getter";
+  static knee_Getter(mthis) native "DynamicsCompressorNode_knee_Getter";
 
-  static $ratio_Getter(mthis) native "DynamicsCompressorNode_ratio_Getter";
+  static ratio_Getter(mthis) native "DynamicsCompressorNode_ratio_Getter";
 
-  static $reduction_Getter(mthis) native "DynamicsCompressorNode_reduction_Getter";
+  static reduction_Getter(mthis) native "DynamicsCompressorNode_reduction_Getter";
 
-  static $release_Getter(mthis) native "DynamicsCompressorNode_release_Getter";
+  static release_Getter(mthis) native "DynamicsCompressorNode_release_Getter";
 
-  static $threshold_Getter(mthis) native "DynamicsCompressorNode_threshold_Getter";
+  static threshold_Getter(mthis) native "DynamicsCompressorNode_threshold_Getter";
 }
 
 class BlinkEXTFragDepth {}
@@ -1529,703 +1517,699 @@
 class BlinkEXTTextureFilterAnisotropic {}
 
 class BlinkElement {
-  static $attributes_Getter(mthis) native "Element_attributes_Getter";
+  static attributes_Getter(mthis) native "Element_attributes_Getter";
 
-  static $className_Getter(mthis) native "Element_className_Getter";
+  static className_Getter(mthis) native "Element_className_Getter";
 
-  static $className_Setter(mthis, value) native "Element_className_Setter";
+  static className_Setter_DOMString(mthis, value) native "Element_className_Setter";
 
-  static $clientHeight_Getter(mthis) native "Element_clientHeight_Getter";
+  static clientHeight_Getter(mthis) native "Element_clientHeight_Getter";
 
-  static $clientLeft_Getter(mthis) native "Element_clientLeft_Getter";
+  static clientLeft_Getter(mthis) native "Element_clientLeft_Getter";
 
-  static $clientTop_Getter(mthis) native "Element_clientTop_Getter";
+  static clientTop_Getter(mthis) native "Element_clientTop_Getter";
 
-  static $clientWidth_Getter(mthis) native "Element_clientWidth_Getter";
+  static clientWidth_Getter(mthis) native "Element_clientWidth_Getter";
 
-  static $id_Getter(mthis) native "Element_id_Getter";
+  static id_Getter(mthis) native "Element_id_Getter";
 
-  static $id_Setter(mthis, value) native "Element_id_Setter";
+  static id_Setter_DOMString(mthis, value) native "Element_id_Setter";
 
-  static $innerHTML_Getter(mthis) native "Element_innerHTML_Getter";
+  static innerHTML_Getter(mthis) native "Element_innerHTML_Getter";
 
-  static $innerHTML_Setter(mthis, value) native "Element_innerHTML_Setter";
+  static innerHTML_Setter_DOMString(mthis, value) native "Element_innerHTML_Setter";
 
-  static $localName_Getter(mthis) native "Element_localName_Getter";
+  static localName_Getter(mthis) native "Element_localName_Getter";
 
-  static $namespaceURI_Getter(mthis) native "Element_namespaceURI_Getter";
+  static namespaceURI_Getter(mthis) native "Element_namespaceURI_Getter";
 
-  static $offsetHeight_Getter(mthis) native "Element_offsetHeight_Getter";
+  static offsetHeight_Getter(mthis) native "Element_offsetHeight_Getter";
 
-  static $offsetLeft_Getter(mthis) native "Element_offsetLeft_Getter";
+  static offsetLeft_Getter(mthis) native "Element_offsetLeft_Getter";
 
-  static $offsetParent_Getter(mthis) native "Element_offsetParent_Getter";
+  static offsetParent_Getter(mthis) native "Element_offsetParent_Getter";
 
-  static $offsetTop_Getter(mthis) native "Element_offsetTop_Getter";
+  static offsetTop_Getter(mthis) native "Element_offsetTop_Getter";
 
-  static $offsetWidth_Getter(mthis) native "Element_offsetWidth_Getter";
+  static offsetWidth_Getter(mthis) native "Element_offsetWidth_Getter";
 
-  static $outerHTML_Getter(mthis) native "Element_outerHTML_Getter";
+  static outerHTML_Getter(mthis) native "Element_outerHTML_Getter";
 
-  static $scrollHeight_Getter(mthis) native "Element_scrollHeight_Getter";
+  static scrollHeight_Getter(mthis) native "Element_scrollHeight_Getter";
 
-  static $scrollLeft_Getter(mthis) native "Element_scrollLeft_Getter";
+  static scrollLeft_Getter(mthis) native "Element_scrollLeft_Getter";
 
-  static $scrollLeft_Setter(mthis, value) native "Element_scrollLeft_Setter";
+  static scrollLeft_Setter_long(mthis, value) native "Element_scrollLeft_Setter";
 
-  static $scrollTop_Getter(mthis) native "Element_scrollTop_Getter";
+  static scrollTop_Getter(mthis) native "Element_scrollTop_Getter";
 
-  static $scrollTop_Setter(mthis, value) native "Element_scrollTop_Setter";
+  static scrollTop_Setter_long(mthis, value) native "Element_scrollTop_Setter";
 
-  static $scrollWidth_Getter(mthis) native "Element_scrollWidth_Getter";
+  static scrollWidth_Getter(mthis) native "Element_scrollWidth_Getter";
 
-  static $shadowRoot_Getter(mthis) native "Element_shadowRoot_Getter";
+  static shadowRoot_Getter(mthis) native "Element_shadowRoot_Getter";
 
-  static $style_Getter(mthis) native "Element_style_Getter";
+  static style_Getter(mthis) native "Element_style_Getter";
 
-  static $tagName_Getter(mthis) native "Element_tagName_Getter";
+  static tagName_Getter(mthis) native "Element_tagName_Getter";
 
-  static $_animate_1_Callback(mthis, keyframes, timingInput) native "Element_animate_Callback_RESOLVER_STRING_2_sequence<Dictionary>_Dictionary";
+  static animate_Callback_SEQ_Dictionary_SEQ_Dictionary(mthis, keyframes, timingInput) native "Element_animate_Callback_sequence<Dictionary>_Dictionary";
 
-  static $_animate_2_Callback(mthis, keyframes, timingInput) native "Element_animate_Callback_RESOLVER_STRING_2_sequence<Dictionary>_double";
+  static animate_Callback_SEQ_Dictionary_SEQ_double(mthis, keyframes, timingInput) native "Element_animate_Callback_sequence<Dictionary>_double";
 
-  static $_animate_3_Callback(mthis, keyframes) native "Element_animate_Callback_RESOLVER_STRING_1_sequence<Dictionary>";
+  static animate_Callback_SEQ_Dictionary_SEQ(mthis, keyframes) native "Element_animate_Callback_sequence<Dictionary>";
 
-  static $blur_Callback(mthis) native "Element_blur_Callback_RESOLVER_STRING_0_";
+  static blur_Callback(mthis) native "Element_blur_Callback";
 
-  static $createShadowRoot_Callback(mthis) native "Element_createShadowRoot_Callback_RESOLVER_STRING_0_";
+  static createShadowRoot_Callback(mthis) native "Element_createShadowRoot_Callback";
 
-  static $focus_Callback(mthis) native "Element_focus_Callback_RESOLVER_STRING_0_";
+  static focus_Callback(mthis) native "Element_focus_Callback";
 
-  static $getAttribute_Callback(mthis, name) native "Element_getAttribute_Callback_RESOLVER_STRING_1_DOMString";
+  static getAttribute_Callback_DOMString(mthis, name) native "Element_getAttribute_Callback_DOMString";
 
-  static $getAttributeNS_Callback(mthis, namespaceURI, localName) native "Element_getAttributeNS_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static getAttributeNS_Callback_DOMString_DOMString(mthis, namespaceURI, localName) native "Element_getAttributeNS_Callback_DOMString_DOMString";
 
-  static $getBoundingClientRect_Callback(mthis) native "Element_getBoundingClientRect_Callback_RESOLVER_STRING_0_";
+  static getBoundingClientRect_Callback(mthis) native "Element_getBoundingClientRect_Callback";
 
-  static $getClientRects_Callback(mthis) native "Element_getClientRects_Callback_RESOLVER_STRING_0_";
+  static getClientRects_Callback(mthis) native "Element_getClientRects_Callback";
 
-  static $getDestinationInsertionPoints_Callback(mthis) native "Element_getDestinationInsertionPoints_Callback_RESOLVER_STRING_0_";
+  static getDestinationInsertionPoints_Callback(mthis) native "Element_getDestinationInsertionPoints_Callback";
 
-  static $getElementsByClassName_Callback(mthis, classNames) native "Element_getElementsByClassName_Callback_RESOLVER_STRING_1_DOMString";
+  static getElementsByClassName_Callback_DOMString(mthis, classNames) native "Element_getElementsByClassName_Callback_DOMString";
 
-  static $getElementsByTagName_Callback(mthis, name) native "Element_getElementsByTagName_Callback_RESOLVER_STRING_1_DOMString";
+  static getElementsByTagName_Callback_DOMString(mthis, name) native "Element_getElementsByTagName_Callback_DOMString";
 
-  static $hasAttribute_Callback(mthis, name) native "Element_hasAttribute_Callback_RESOLVER_STRING_1_DOMString";
+  static hasAttribute_Callback_DOMString(mthis, name) native "Element_hasAttribute_Callback_DOMString";
 
-  static $hasAttributeNS_Callback(mthis, namespaceURI, localName) native "Element_hasAttributeNS_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static hasAttributeNS_Callback_DOMString_DOMString(mthis, namespaceURI, localName) native "Element_hasAttributeNS_Callback_DOMString_DOMString";
 
-  static $insertAdjacentElement_Callback(mthis, where, element) native "Element_insertAdjacentElement_Callback_RESOLVER_STRING_2_DOMString_Element";
+  static insertAdjacentElement_Callback_DOMString_Element(mthis, where, element) native "Element_insertAdjacentElement_Callback_DOMString_Element";
 
-  static $insertAdjacentHTML_Callback(mthis, where, html) native "Element_insertAdjacentHTML_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static insertAdjacentHTML_Callback_DOMString_DOMString(mthis, where, html) native "Element_insertAdjacentHTML_Callback_DOMString_DOMString";
 
-  static $insertAdjacentText_Callback(mthis, where, text) native "Element_insertAdjacentText_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static insertAdjacentText_Callback_DOMString_DOMString(mthis, where, text) native "Element_insertAdjacentText_Callback_DOMString_DOMString";
 
-  static $matches_Callback(mthis, selectors) native "Element_matches_Callback_RESOLVER_STRING_1_DOMString";
+  static matches_Callback_DOMString(mthis, selectors) native "Element_matches_Callback_DOMString";
 
-  static $querySelector_Callback(mthis, selectors) native "Element_querySelector_Callback_RESOLVER_STRING_1_DOMString";
+  static querySelector_Callback_DOMString(mthis, selectors) native "Element_querySelector_Callback_DOMString";
 
-  static $querySelectorAll_Callback(mthis, selectors) native "Element_querySelectorAll_Callback_RESOLVER_STRING_1_DOMString";
+  static querySelectorAll_Callback_DOMString(mthis, selectors) native "Element_querySelectorAll_Callback_DOMString";
 
-  static $removeAttribute_Callback(mthis, name) native "Element_removeAttribute_Callback_RESOLVER_STRING_1_DOMString";
+  static removeAttribute_Callback_DOMString(mthis, name) native "Element_removeAttribute_Callback_DOMString";
 
-  static $removeAttributeNS_Callback(mthis, namespaceURI, localName) native "Element_removeAttributeNS_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static removeAttributeNS_Callback_DOMString_DOMString(mthis, namespaceURI, localName) native "Element_removeAttributeNS_Callback_DOMString_DOMString";
 
-  static $scrollByLines_Callback(mthis, lines) native "Element_scrollByLines_Callback_RESOLVER_STRING_1_long";
+  static scrollByLines_Callback_long(mthis, lines) native "Element_scrollByLines_Callback_long";
 
-  static $scrollByPages_Callback(mthis, pages) native "Element_scrollByPages_Callback_RESOLVER_STRING_1_long";
+  static scrollByPages_Callback_long(mthis, pages) native "Element_scrollByPages_Callback_long";
 
-  static $_scrollIntoView_1_Callback(mthis, alignWithTop) native "Element_scrollIntoView_Callback_RESOLVER_STRING_1_boolean";
+  static scrollIntoView_Callback_boolean(mthis, alignWithTop) native "Element_scrollIntoView_Callback_boolean";
 
-  static $_scrollIntoView_2_Callback(mthis) native "Element_scrollIntoView_Callback_RESOLVER_STRING_0_";
+  static scrollIntoView_Callback(mthis) native "Element_scrollIntoView_Callback";
 
-  static $_scrollIntoViewIfNeeded_1_Callback(mthis, centerIfNeeded) native "Element_scrollIntoViewIfNeeded_Callback_RESOLVER_STRING_1_boolean";
+  static scrollIntoViewIfNeeded_Callback_boolean(mthis, centerIfNeeded) native "Element_scrollIntoViewIfNeeded_Callback_boolean";
 
-  static $_scrollIntoViewIfNeeded_2_Callback(mthis) native "Element_scrollIntoViewIfNeeded_Callback_RESOLVER_STRING_0_";
+  static scrollIntoViewIfNeeded_Callback(mthis) native "Element_scrollIntoViewIfNeeded_Callback";
 
-  static $setAttribute_Callback(mthis, name, value) native "Element_setAttribute_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static setAttribute_Callback_DOMString_DOMString(mthis, name, value) native "Element_setAttribute_Callback_DOMString_DOMString";
 
-  static $setAttributeNS_Callback(mthis, namespaceURI, qualifiedName, value) native "Element_setAttributeNS_Callback_RESOLVER_STRING_3_DOMString_DOMString_DOMString";
+  static setAttributeNS_Callback_DOMString_DOMString_DOMString(mthis, namespaceURI, qualifiedName, value) native "Element_setAttributeNS_Callback_DOMString_DOMString_DOMString";
 
-  static $webkitRequestFullscreen_Callback(mthis) native "Element_webkitRequestFullscreen_Callback_RESOLVER_STRING_0_";
+  static webkitRequestFullscreen_Callback(mthis) native "Element_webkitRequestFullscreen_Callback";
 
-  static $webkitRequestPointerLock_Callback(mthis) native "Element_webkitRequestPointerLock_Callback_RESOLVER_STRING_0_";
+  static webkitRequestPointerLock_Callback(mthis) native "Element_webkitRequestPointerLock_Callback";
 
-  static $nextElementSibling_Getter(mthis) native "Element_nextElementSibling_Getter";
+  static nextElementSibling_Getter(mthis) native "Element_nextElementSibling_Getter";
 
-  static $previousElementSibling_Getter(mthis) native "Element_previousElementSibling_Getter";
+  static previousElementSibling_Getter(mthis) native "Element_previousElementSibling_Getter";
 
-  static $remove_Callback(mthis) native "Element_remove_Callback_RESOLVER_STRING_0_";
+  static remove_Callback(mthis) native "Element_remove_Callback";
 
-  static $childElementCount_Getter(mthis) native "Element_childElementCount_Getter";
+  static childElementCount_Getter(mthis) native "Element_childElementCount_Getter";
 
-  static $children_Getter(mthis) native "Element_children_Getter";
+  static children_Getter(mthis) native "Element_children_Getter";
 
-  static $firstElementChild_Getter(mthis) native "Element_firstElementChild_Getter";
+  static firstElementChild_Getter(mthis) native "Element_firstElementChild_Getter";
 
-  static $lastElementChild_Getter(mthis) native "Element_lastElementChild_Getter";
+  static lastElementChild_Getter(mthis) native "Element_lastElementChild_Getter";
 }
 
 class BlinkErrorEvent {
-  static $colno_Getter(mthis) native "ErrorEvent_colno_Getter";
+  static colno_Getter(mthis) native "ErrorEvent_colno_Getter";
 
-  static $error_Getter(mthis) native "ErrorEvent_error_Getter";
+  static error_Getter(mthis) native "ErrorEvent_error_Getter";
 
-  static $filename_Getter(mthis) native "ErrorEvent_filename_Getter";
+  static filename_Getter(mthis) native "ErrorEvent_filename_Getter";
 
-  static $lineno_Getter(mthis) native "ErrorEvent_lineno_Getter";
+  static lineno_Getter(mthis) native "ErrorEvent_lineno_Getter";
 
-  static $message_Getter(mthis) native "ErrorEvent_message_Getter";
+  static message_Getter(mthis) native "ErrorEvent_message_Getter";
 }
 
 class BlinkEventSource {
-  static $_create_1constructorCallback(url, eventSourceInit) native "EventSource_constructorCallback_RESOLVER_STRING_2_DOMString_Dictionary";
+  static constructorCallback_DOMString_Dictionary(url, eventSourceInit) native "EventSource_constructorCallback_DOMString_Dictionary";
 
-  static $readyState_Getter(mthis) native "EventSource_readyState_Getter";
+  static readyState_Getter(mthis) native "EventSource_readyState_Getter";
 
-  static $url_Getter(mthis) native "EventSource_url_Getter";
+  static url_Getter(mthis) native "EventSource_url_Getter";
 
-  static $withCredentials_Getter(mthis) native "EventSource_withCredentials_Getter";
+  static withCredentials_Getter(mthis) native "EventSource_withCredentials_Getter";
 
-  static $close_Callback(mthis) native "EventSource_close_Callback_RESOLVER_STRING_0_";
+  static close_Callback(mthis) native "EventSource_close_Callback";
 }
 
 class BlinkFile {
-  static $lastModified_Getter(mthis) native "File_lastModified_Getter";
+  static lastModified_Getter(mthis) native "File_lastModified_Getter";
 
-  static $lastModifiedDate_Getter(mthis) native "File_lastModifiedDate_Getter";
+  static lastModifiedDate_Getter(mthis) native "File_lastModifiedDate_Getter";
 
-  static $name_Getter(mthis) native "File_name_Getter";
+  static name_Getter(mthis) native "File_name_Getter";
 
-  static $webkitRelativePath_Getter(mthis) native "File_webkitRelativePath_Getter";
+  static webkitRelativePath_Getter(mthis) native "File_webkitRelativePath_Getter";
 }
 
 class BlinkFileEntry {
-  static $createWriter_Callback(mthis, successCallback, errorCallback) native "FileEntry_createWriter_Callback_RESOLVER_STRING_2_FileWriterCallback_ErrorCallback";
+  static createWriter_Callback_FileWriterCallback_ErrorCallback(mthis, successCallback, errorCallback) native "FileEntry_createWriter_Callback_FileWriterCallback_ErrorCallback";
 
-  static $file_Callback(mthis, successCallback, errorCallback) native "FileEntry_file_Callback_RESOLVER_STRING_2_FileCallback_ErrorCallback";
+  static file_Callback_FileCallback_ErrorCallback(mthis, successCallback, errorCallback) native "FileEntry_file_Callback_FileCallback_ErrorCallback";
 }
 
 class BlinkFileEntrySync {}
 
 class BlinkFileError {
-  static $code_Getter(mthis) native "FileError_code_Getter";
+  static code_Getter(mthis) native "FileError_code_Getter";
 }
 
 class BlinkFileList {
-  static $length_Getter(mthis) native "FileList_length_Getter";
+  static length_Getter(mthis) native "FileList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "FileList_item_Callback_RESOLVER_STRING_1_unsigned long";
-
-  static $item_Callback(mthis, index) native "FileList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "FileList_item_Callback_unsigned long";
 }
 
 class BlinkFileReader {
-  static $_create_1constructorCallback() native "FileReader_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "FileReader_constructorCallback";
 
-  static $error_Getter(mthis) native "FileReader_error_Getter";
+  static error_Getter(mthis) native "FileReader_error_Getter";
 
-  static $readyState_Getter(mthis) native "FileReader_readyState_Getter";
+  static readyState_Getter(mthis) native "FileReader_readyState_Getter";
 
-  static $result_Getter(mthis) native "FileReader_result_Getter";
+  static result_Getter(mthis) native "FileReader_result_Getter";
 
-  static $abort_Callback(mthis) native "FileReader_abort_Callback_RESOLVER_STRING_0_";
+  static abort_Callback(mthis) native "FileReader_abort_Callback";
 
-  static $readAsArrayBuffer_Callback(mthis, blob) native "FileReader_readAsArrayBuffer_Callback_RESOLVER_STRING_1_Blob";
+  static readAsArrayBuffer_Callback_Blob(mthis, blob) native "FileReader_readAsArrayBuffer_Callback_Blob";
 
-  static $readAsDataURL_Callback(mthis, blob) native "FileReader_readAsDataURL_Callback_RESOLVER_STRING_1_Blob";
+  static readAsDataURL_Callback_Blob(mthis, blob) native "FileReader_readAsDataURL_Callback_Blob";
 
-  static $_readAsText_1_Callback(mthis, blob, encoding) native "FileReader_readAsText_Callback_RESOLVER_STRING_2_Blob_DOMString";
+  static readAsText_Callback_Blob_DOMString(mthis, blob, encoding) native "FileReader_readAsText_Callback_Blob_DOMString";
 
-  static $_readAsText_2_Callback(mthis, blob) native "FileReader_readAsText_Callback_RESOLVER_STRING_1_Blob";
+  static readAsText_Callback_Blob(mthis, blob) native "FileReader_readAsText_Callback_Blob";
 }
 
 class BlinkFileReaderSync {
-  static $_create_1constructorCallback() native "FileReaderSync_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "FileReaderSync_constructorCallback";
 }
 
 class BlinkFileWriter {
-  static $error_Getter(mthis) native "FileWriter_error_Getter";
+  static error_Getter(mthis) native "FileWriter_error_Getter";
 
-  static $length_Getter(mthis) native "FileWriter_length_Getter";
+  static length_Getter(mthis) native "FileWriter_length_Getter";
 
-  static $position_Getter(mthis) native "FileWriter_position_Getter";
+  static position_Getter(mthis) native "FileWriter_position_Getter";
 
-  static $readyState_Getter(mthis) native "FileWriter_readyState_Getter";
+  static readyState_Getter(mthis) native "FileWriter_readyState_Getter";
 
-  static $abort_Callback(mthis) native "FileWriter_abort_Callback_RESOLVER_STRING_0_";
+  static abort_Callback(mthis) native "FileWriter_abort_Callback";
 
-  static $seek_Callback(mthis, position) native "FileWriter_seek_Callback_RESOLVER_STRING_1_long long";
+  static seek_Callback_ll(mthis, position) native "FileWriter_seek_Callback_long long";
 
-  static $truncate_Callback(mthis, size) native "FileWriter_truncate_Callback_RESOLVER_STRING_1_long long";
+  static truncate_Callback_ll(mthis, size) native "FileWriter_truncate_Callback_long long";
 
-  static $write_Callback(mthis, data) native "FileWriter_write_Callback_RESOLVER_STRING_1_Blob";
+  static write_Callback_Blob(mthis, data) native "FileWriter_write_Callback_Blob";
 }
 
 class BlinkFileWriterSync {}
 
 class BlinkFocusEvent {
-  static $relatedTarget_Getter(mthis) native "FocusEvent_relatedTarget_Getter";
+  static relatedTarget_Getter(mthis) native "FocusEvent_relatedTarget_Getter";
 }
 
 class BlinkFontFace {
-  static $_create_1constructorCallback(family, source, descriptors) native "FontFace_constructorCallback_RESOLVER_STRING_3_DOMString_DOMString_Dictionary";
+  static constructorCallback_DOMString_DOMString_Dictionary(family, source, descriptors) native "FontFace_constructorCallback_DOMString_DOMString_Dictionary";
 
-  static $family_Getter(mthis) native "FontFace_family_Getter";
+  static family_Getter(mthis) native "FontFace_family_Getter";
 
-  static $family_Setter(mthis, value) native "FontFace_family_Setter";
+  static family_Setter_DOMString(mthis, value) native "FontFace_family_Setter";
 
-  static $featureSettings_Getter(mthis) native "FontFace_featureSettings_Getter";
+  static featureSettings_Getter(mthis) native "FontFace_featureSettings_Getter";
 
-  static $featureSettings_Setter(mthis, value) native "FontFace_featureSettings_Setter";
+  static featureSettings_Setter_DOMString(mthis, value) native "FontFace_featureSettings_Setter";
 
-  static $status_Getter(mthis) native "FontFace_status_Getter";
+  static status_Getter(mthis) native "FontFace_status_Getter";
 
-  static $stretch_Getter(mthis) native "FontFace_stretch_Getter";
+  static stretch_Getter(mthis) native "FontFace_stretch_Getter";
 
-  static $stretch_Setter(mthis, value) native "FontFace_stretch_Setter";
+  static stretch_Setter_DOMString(mthis, value) native "FontFace_stretch_Setter";
 
-  static $style_Getter(mthis) native "FontFace_style_Getter";
+  static style_Getter(mthis) native "FontFace_style_Getter";
 
-  static $style_Setter(mthis, value) native "FontFace_style_Setter";
+  static style_Setter_DOMString(mthis, value) native "FontFace_style_Setter";
 
-  static $unicodeRange_Getter(mthis) native "FontFace_unicodeRange_Getter";
+  static unicodeRange_Getter(mthis) native "FontFace_unicodeRange_Getter";
 
-  static $unicodeRange_Setter(mthis, value) native "FontFace_unicodeRange_Setter";
+  static unicodeRange_Setter_DOMString(mthis, value) native "FontFace_unicodeRange_Setter";
 
-  static $variant_Getter(mthis) native "FontFace_variant_Getter";
+  static variant_Getter(mthis) native "FontFace_variant_Getter";
 
-  static $variant_Setter(mthis, value) native "FontFace_variant_Setter";
+  static variant_Setter_DOMString(mthis, value) native "FontFace_variant_Setter";
 
-  static $weight_Getter(mthis) native "FontFace_weight_Getter";
+  static weight_Getter(mthis) native "FontFace_weight_Getter";
 
-  static $weight_Setter(mthis, value) native "FontFace_weight_Setter";
+  static weight_Setter_DOMString(mthis, value) native "FontFace_weight_Setter";
 
-  static $load_Callback(mthis) native "FontFace_load_Callback_RESOLVER_STRING_0_";
+  static load_Callback(mthis) native "FontFace_load_Callback";
 }
 
 class BlinkFontFaceSet {
-  static $size_Getter(mthis) native "FontFaceSet_size_Getter";
+  static size_Getter(mthis) native "FontFaceSet_size_Getter";
 
-  static $status_Getter(mthis) native "FontFaceSet_status_Getter";
+  static status_Getter(mthis) native "FontFaceSet_status_Getter";
 
-  static $add_Callback(mthis, fontFace) native "FontFaceSet_add_Callback_RESOLVER_STRING_1_FontFace";
+  static add_Callback_FontFace(mthis, fontFace) native "FontFaceSet_add_Callback_FontFace";
 
-  static $check_Callback(mthis, font, text) native "FontFaceSet_check_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static check_Callback_DOMString_DOMString(mthis, font, text) native "FontFaceSet_check_Callback_DOMString_DOMString";
 
-  static $clear_Callback(mthis) native "FontFaceSet_clear_Callback_RESOLVER_STRING_0_";
+  static clear_Callback(mthis) native "FontFaceSet_clear_Callback";
 
-  static $delete_Callback(mthis, fontFace) native "FontFaceSet_delete_Callback_RESOLVER_STRING_1_FontFace";
+  static delete_Callback_FontFace(mthis, fontFace) native "FontFaceSet_delete_Callback_FontFace";
 
-  static $_forEach_1_Callback(mthis, callback, thisArg) native "FontFaceSet_forEach_Callback_RESOLVER_STRING_2_FontFaceSetForEachCallback_ScriptValue";
+  static forEach_Callback_FontFaceSetForEachCallback_ScriptValue(mthis, callback, thisArg) native "FontFaceSet_forEach_Callback_FontFaceSetForEachCallback_ScriptValue";
 
-  static $_forEach_2_Callback(mthis, callback) native "FontFaceSet_forEach_Callback_RESOLVER_STRING_1_FontFaceSetForEachCallback";
+  static forEach_Callback_FontFaceSetForEachCallback(mthis, callback) native "FontFaceSet_forEach_Callback_FontFaceSetForEachCallback";
 
-  static $has_Callback(mthis, fontFace) native "FontFaceSet_has_Callback_RESOLVER_STRING_1_FontFace";
+  static has_Callback_FontFace(mthis, fontFace) native "FontFaceSet_has_Callback_FontFace";
 }
 
 class BlinkFormData {
-  static $constructorCallback(form) native "FormData_constructorCallback_RESOLVER_STRING_1_HTMLFormElement";
+  static constructorCallback_HTMLFormElement(form) native "FormData_constructorCallback_HTMLFormElement";
 
-  static $append_Callback(mthis, name, value) native "FormData_append_Callback";
+  static append_Callback_DOMString_DOMString(mthis, name, value) native "FormData_append_Callback";
 
-  static $appendBlob_Callback(mthis, name, value, filename) native "FormData_append_Callback";
+  static append_Callback_DOMString_Blob_DOMString(mthis, name, value, filename) native "FormData_append_Callback";
 }
 
 class BlinkGainNode {
-  static $gain_Getter(mthis) native "GainNode_gain_Getter";
+  static gain_Getter(mthis) native "GainNode_gain_Getter";
 }
 
 class BlinkGamepad {
-  static $axes_Getter(mthis) native "Gamepad_axes_Getter";
+  static axes_Getter(mthis) native "Gamepad_axes_Getter";
 
-  static $buttons_Getter(mthis) native "WebKitGamepad_buttons_Getter";
+  static buttons_Getter(mthis) native "WebKitGamepad_buttons_Getter";
 
-  static $id_Getter(mthis) native "Gamepad_id_Getter";
+  static id_Getter(mthis) native "Gamepad_id_Getter";
 
-  static $index_Getter(mthis) native "Gamepad_index_Getter";
+  static index_Getter(mthis) native "Gamepad_index_Getter";
 
-  static $timestamp_Getter(mthis) native "Gamepad_timestamp_Getter";
+  static timestamp_Getter(mthis) native "Gamepad_timestamp_Getter";
 }
 
 class BlinkGamepadList {
-  static $length_Getter(mthis) native "GamepadList_length_Getter";
+  static length_Getter(mthis) native "GamepadList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "GamepadList_item_Callback_RESOLVER_STRING_1_unsigned long";
-
-  static $item_Callback(mthis, index) native "GamepadList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "GamepadList_item_Callback_unsigned long";
 }
 
 class BlinkGeolocation {
-  static $clearWatch_Callback(mthis, watchID) native "Geolocation_clearWatch_Callback_RESOLVER_STRING_1_long";
+  static clearWatch_Callback_long(mthis, watchID) native "Geolocation_clearWatch_Callback_long";
 
-  static $getCurrentPosition_Callback(mthis, successCallback, errorCallback, options) native "Geolocation_getCurrentPosition_Callback";
+  static getCurrentPosition_Callback_PositionCallback_PositionErrorCallback_object(mthis, successCallback, errorCallback, options) native "Geolocation_getCurrentPosition_Callback";
 
-  static $watchPosition_Callback(mthis, successCallback, errorCallback, options) native "Geolocation_watchPosition_Callback";
+  static watchPosition_Callback_PositionCallback_PositionErrorCallback_object(mthis, successCallback, errorCallback, options) native "Geolocation_watchPosition_Callback";
 }
 
 class BlinkGeoposition {
-  static $coords_Getter(mthis) native "Geoposition_coords_Getter";
+  static coords_Getter(mthis) native "Geoposition_coords_Getter";
 
-  static $timestamp_Getter(mthis) native "Geoposition_timestamp_Getter";
+  static timestamp_Getter(mthis) native "Geoposition_timestamp_Getter";
 }
 
 class BlinkHTMLAllCollection {
-  static $item_Callback(mthis, index) native "HTMLAllCollection_item_Callback";
+  static item_Callback_ul(mthis, index) native "HTMLAllCollection_item_Callback";
 }
 
 class BlinkHTMLElement {
-  static $contentEditable_Getter(mthis) native "HTMLElement_contentEditable_Getter";
+  static contentEditable_Getter(mthis) native "HTMLElement_contentEditable_Getter";
 
-  static $contentEditable_Setter(mthis, value) native "HTMLElement_contentEditable_Setter";
+  static contentEditable_Setter_DOMString(mthis, value) native "HTMLElement_contentEditable_Setter";
 
-  static $dir_Getter(mthis) native "HTMLElement_dir_Getter";
+  static dir_Getter(mthis) native "HTMLElement_dir_Getter";
 
-  static $dir_Setter(mthis, value) native "HTMLElement_dir_Setter";
+  static dir_Setter_DOMString(mthis, value) native "HTMLElement_dir_Setter";
 
-  static $draggable_Getter(mthis) native "HTMLElement_draggable_Getter";
+  static draggable_Getter(mthis) native "HTMLElement_draggable_Getter";
 
-  static $draggable_Setter(mthis, value) native "HTMLElement_draggable_Setter";
+  static draggable_Setter_boolean(mthis, value) native "HTMLElement_draggable_Setter";
 
-  static $hidden_Getter(mthis) native "HTMLElement_hidden_Getter";
+  static hidden_Getter(mthis) native "HTMLElement_hidden_Getter";
 
-  static $hidden_Setter(mthis, value) native "HTMLElement_hidden_Setter";
+  static hidden_Setter_boolean(mthis, value) native "HTMLElement_hidden_Setter";
 
-  static $inputMethodContext_Getter(mthis) native "HTMLElement_inputMethodContext_Getter";
+  static inputMethodContext_Getter(mthis) native "HTMLElement_inputMethodContext_Getter";
 
-  static $isContentEditable_Getter(mthis) native "HTMLElement_isContentEditable_Getter";
+  static isContentEditable_Getter(mthis) native "HTMLElement_isContentEditable_Getter";
 
-  static $lang_Getter(mthis) native "HTMLElement_lang_Getter";
+  static lang_Getter(mthis) native "HTMLElement_lang_Getter";
 
-  static $lang_Setter(mthis, value) native "HTMLElement_lang_Setter";
+  static lang_Setter_DOMString(mthis, value) native "HTMLElement_lang_Setter";
 
-  static $spellcheck_Getter(mthis) native "HTMLElement_spellcheck_Getter";
+  static spellcheck_Getter(mthis) native "HTMLElement_spellcheck_Getter";
 
-  static $spellcheck_Setter(mthis, value) native "HTMLElement_spellcheck_Setter";
+  static spellcheck_Setter_boolean(mthis, value) native "HTMLElement_spellcheck_Setter";
 
-  static $tabIndex_Getter(mthis) native "HTMLElement_tabIndex_Getter";
+  static tabIndex_Getter(mthis) native "HTMLElement_tabIndex_Getter";
 
-  static $tabIndex_Setter(mthis, value) native "HTMLElement_tabIndex_Setter";
+  static tabIndex_Setter_long(mthis, value) native "HTMLElement_tabIndex_Setter";
 
-  static $title_Getter(mthis) native "HTMLElement_title_Getter";
+  static title_Getter(mthis) native "HTMLElement_title_Getter";
 
-  static $title_Setter(mthis, value) native "HTMLElement_title_Setter";
+  static title_Setter_DOMString(mthis, value) native "HTMLElement_title_Setter";
 
-  static $translate_Getter(mthis) native "HTMLElement_translate_Getter";
+  static translate_Getter(mthis) native "HTMLElement_translate_Getter";
 
-  static $translate_Setter(mthis, value) native "HTMLElement_translate_Setter";
+  static translate_Setter_boolean(mthis, value) native "HTMLElement_translate_Setter";
 
-  static $webkitdropzone_Getter(mthis) native "HTMLElement_webkitdropzone_Getter";
+  static webkitdropzone_Getter(mthis) native "HTMLElement_webkitdropzone_Getter";
 
-  static $webkitdropzone_Setter(mthis, value) native "HTMLElement_webkitdropzone_Setter";
+  static webkitdropzone_Setter_DOMString(mthis, value) native "HTMLElement_webkitdropzone_Setter";
 
-  static $click_Callback(mthis) native "HTMLElement_click_Callback_RESOLVER_STRING_0_";
+  static click_Callback(mthis) native "HTMLElement_click_Callback";
 }
 
 class BlinkURLUtils {
-  static $hash_Getter(mthis) native "URL_hash_Getter";
+  static hash_Getter(mthis) native "URL_hash_Getter";
 
-  static $hash_Setter(mthis, value) native "URL_hash_Setter";
+  static hash_Setter_DOMString(mthis, value) native "URL_hash_Setter";
 
-  static $host_Getter(mthis) native "URL_host_Getter";
+  static host_Getter(mthis) native "URL_host_Getter";
 
-  static $host_Setter(mthis, value) native "URL_host_Setter";
+  static host_Setter_DOMString(mthis, value) native "URL_host_Setter";
 
-  static $hostname_Getter(mthis) native "URL_hostname_Getter";
+  static hostname_Getter(mthis) native "URL_hostname_Getter";
 
-  static $hostname_Setter(mthis, value) native "URL_hostname_Setter";
+  static hostname_Setter_DOMString(mthis, value) native "URL_hostname_Setter";
 
-  static $href_Getter(mthis) native "URL_href_Getter";
+  static href_Getter(mthis) native "URL_href_Getter";
 
-  static $href_Setter(mthis, value) native "URL_href_Setter";
+  static href_Setter_DOMString(mthis, value) native "URL_href_Setter";
 
-  static $origin_Getter(mthis) native "URL_origin_Getter";
+  static origin_Getter(mthis) native "URL_origin_Getter";
 
-  static $password_Getter(mthis) native "URL_password_Getter";
+  static password_Getter(mthis) native "URL_password_Getter";
 
-  static $password_Setter(mthis, value) native "URL_password_Setter";
+  static password_Setter_DOMString(mthis, value) native "URL_password_Setter";
 
-  static $pathname_Getter(mthis) native "URL_pathname_Getter";
+  static pathname_Getter(mthis) native "URL_pathname_Getter";
 
-  static $pathname_Setter(mthis, value) native "URL_pathname_Setter";
+  static pathname_Setter_DOMString(mthis, value) native "URL_pathname_Setter";
 
-  static $port_Getter(mthis) native "URL_port_Getter";
+  static port_Getter(mthis) native "URL_port_Getter";
 
-  static $port_Setter(mthis, value) native "URL_port_Setter";
+  static port_Setter_DOMString(mthis, value) native "URL_port_Setter";
 
-  static $protocol_Getter(mthis) native "URL_protocol_Getter";
+  static protocol_Getter(mthis) native "URL_protocol_Getter";
 
-  static $protocol_Setter(mthis, value) native "URL_protocol_Setter";
+  static protocol_Setter_DOMString(mthis, value) native "URL_protocol_Setter";
 
-  static $search_Getter(mthis) native "URL_search_Getter";
+  static search_Getter(mthis) native "URL_search_Getter";
 
-  static $search_Setter(mthis, value) native "URL_search_Setter";
+  static search_Setter_DOMString(mthis, value) native "URL_search_Setter";
 
-  static $username_Getter(mthis) native "URL_username_Getter";
+  static username_Getter(mthis) native "URL_username_Getter";
 
-  static $username_Setter(mthis, value) native "URL_username_Setter";
+  static username_Setter_DOMString(mthis, value) native "URL_username_Setter";
 
-  static $toString_Callback(mthis) native "URL_toString_Callback_RESOLVER_STRING_0_";
+  static toString_Callback(mthis) native "URL_toString_Callback";
 }
 
 class BlinkHTMLAnchorElement {
-  static $download_Getter(mthis) native "HTMLAnchorElement_download_Getter";
+  static download_Getter(mthis) native "HTMLAnchorElement_download_Getter";
 
-  static $download_Setter(mthis, value) native "HTMLAnchorElement_download_Setter";
+  static download_Setter_DOMString(mthis, value) native "HTMLAnchorElement_download_Setter";
 
-  static $hreflang_Getter(mthis) native "HTMLAnchorElement_hreflang_Getter";
+  static hreflang_Getter(mthis) native "HTMLAnchorElement_hreflang_Getter";
 
-  static $hreflang_Setter(mthis, value) native "HTMLAnchorElement_hreflang_Setter";
+  static hreflang_Setter_DOMString(mthis, value) native "HTMLAnchorElement_hreflang_Setter";
 
-  static $rel_Getter(mthis) native "HTMLAnchorElement_rel_Getter";
+  static rel_Getter(mthis) native "HTMLAnchorElement_rel_Getter";
 
-  static $rel_Setter(mthis, value) native "HTMLAnchorElement_rel_Setter";
+  static rel_Setter_DOMString(mthis, value) native "HTMLAnchorElement_rel_Setter";
 
-  static $target_Getter(mthis) native "HTMLAnchorElement_target_Getter";
+  static target_Getter(mthis) native "HTMLAnchorElement_target_Getter";
 
-  static $target_Setter(mthis, value) native "HTMLAnchorElement_target_Setter";
+  static target_Setter_DOMString(mthis, value) native "HTMLAnchorElement_target_Setter";
 
-  static $type_Getter(mthis) native "HTMLAnchorElement_type_Getter";
+  static type_Getter(mthis) native "HTMLAnchorElement_type_Getter";
 
-  static $type_Setter(mthis, value) native "HTMLAnchorElement_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "HTMLAnchorElement_type_Setter";
 
-  static $hash_Getter(mthis) native "HTMLAnchorElement_hash_Getter";
+  static hash_Getter(mthis) native "HTMLAnchorElement_hash_Getter";
 
-  static $hash_Setter(mthis, value) native "HTMLAnchorElement_hash_Setter";
+  static hash_Setter_DOMString(mthis, value) native "HTMLAnchorElement_hash_Setter";
 
-  static $host_Getter(mthis) native "HTMLAnchorElement_host_Getter";
+  static host_Getter(mthis) native "HTMLAnchorElement_host_Getter";
 
-  static $host_Setter(mthis, value) native "HTMLAnchorElement_host_Setter";
+  static host_Setter_DOMString(mthis, value) native "HTMLAnchorElement_host_Setter";
 
-  static $hostname_Getter(mthis) native "HTMLAnchorElement_hostname_Getter";
+  static hostname_Getter(mthis) native "HTMLAnchorElement_hostname_Getter";
 
-  static $hostname_Setter(mthis, value) native "HTMLAnchorElement_hostname_Setter";
+  static hostname_Setter_DOMString(mthis, value) native "HTMLAnchorElement_hostname_Setter";
 
-  static $href_Getter(mthis) native "HTMLAnchorElement_href_Getter";
+  static href_Getter(mthis) native "HTMLAnchorElement_href_Getter";
 
-  static $href_Setter(mthis, value) native "HTMLAnchorElement_href_Setter";
+  static href_Setter_DOMString(mthis, value) native "HTMLAnchorElement_href_Setter";
 
-  static $origin_Getter(mthis) native "HTMLAnchorElement_origin_Getter";
+  static origin_Getter(mthis) native "HTMLAnchorElement_origin_Getter";
 
-  static $password_Getter(mthis) native "HTMLAnchorElement_password_Getter";
+  static password_Getter(mthis) native "HTMLAnchorElement_password_Getter";
 
-  static $password_Setter(mthis, value) native "HTMLAnchorElement_password_Setter";
+  static password_Setter_DOMString(mthis, value) native "HTMLAnchorElement_password_Setter";
 
-  static $pathname_Getter(mthis) native "HTMLAnchorElement_pathname_Getter";
+  static pathname_Getter(mthis) native "HTMLAnchorElement_pathname_Getter";
 
-  static $pathname_Setter(mthis, value) native "HTMLAnchorElement_pathname_Setter";
+  static pathname_Setter_DOMString(mthis, value) native "HTMLAnchorElement_pathname_Setter";
 
-  static $port_Getter(mthis) native "HTMLAnchorElement_port_Getter";
+  static port_Getter(mthis) native "HTMLAnchorElement_port_Getter";
 
-  static $port_Setter(mthis, value) native "HTMLAnchorElement_port_Setter";
+  static port_Setter_DOMString(mthis, value) native "HTMLAnchorElement_port_Setter";
 
-  static $protocol_Getter(mthis) native "HTMLAnchorElement_protocol_Getter";
+  static protocol_Getter(mthis) native "HTMLAnchorElement_protocol_Getter";
 
-  static $protocol_Setter(mthis, value) native "HTMLAnchorElement_protocol_Setter";
+  static protocol_Setter_DOMString(mthis, value) native "HTMLAnchorElement_protocol_Setter";
 
-  static $search_Getter(mthis) native "HTMLAnchorElement_search_Getter";
+  static search_Getter(mthis) native "HTMLAnchorElement_search_Getter";
 
-  static $search_Setter(mthis, value) native "HTMLAnchorElement_search_Setter";
+  static search_Setter_DOMString(mthis, value) native "HTMLAnchorElement_search_Setter";
 
-  static $username_Getter(mthis) native "HTMLAnchorElement_username_Getter";
+  static username_Getter(mthis) native "HTMLAnchorElement_username_Getter";
 
-  static $username_Setter(mthis, value) native "HTMLAnchorElement_username_Setter";
+  static username_Setter_DOMString(mthis, value) native "HTMLAnchorElement_username_Setter";
 
-  static $toString_Callback(mthis) native "HTMLAnchorElement_toString_Callback_RESOLVER_STRING_0_";
+  static toString_Callback(mthis) native "HTMLAnchorElement_toString_Callback";
 }
 
 class BlinkHTMLAppletElement {}
 
 class BlinkHTMLAreaElement {
-  static $alt_Getter(mthis) native "HTMLAreaElement_alt_Getter";
+  static alt_Getter(mthis) native "HTMLAreaElement_alt_Getter";
 
-  static $alt_Setter(mthis, value) native "HTMLAreaElement_alt_Setter";
+  static alt_Setter_DOMString(mthis, value) native "HTMLAreaElement_alt_Setter";
 
-  static $coords_Getter(mthis) native "HTMLAreaElement_coords_Getter";
+  static coords_Getter(mthis) native "HTMLAreaElement_coords_Getter";
 
-  static $coords_Setter(mthis, value) native "HTMLAreaElement_coords_Setter";
+  static coords_Setter_DOMString(mthis, value) native "HTMLAreaElement_coords_Setter";
 
-  static $shape_Getter(mthis) native "HTMLAreaElement_shape_Getter";
+  static shape_Getter(mthis) native "HTMLAreaElement_shape_Getter";
 
-  static $shape_Setter(mthis, value) native "HTMLAreaElement_shape_Setter";
+  static shape_Setter_DOMString(mthis, value) native "HTMLAreaElement_shape_Setter";
 
-  static $target_Getter(mthis) native "HTMLAreaElement_target_Getter";
+  static target_Getter(mthis) native "HTMLAreaElement_target_Getter";
 
-  static $target_Setter(mthis, value) native "HTMLAreaElement_target_Setter";
+  static target_Setter_DOMString(mthis, value) native "HTMLAreaElement_target_Setter";
 
-  static $hash_Getter(mthis) native "HTMLAreaElement_hash_Getter";
+  static hash_Getter(mthis) native "HTMLAreaElement_hash_Getter";
 
-  static $hash_Setter(mthis, value) native "HTMLAreaElement_hash_Setter";
+  static hash_Setter_DOMString(mthis, value) native "HTMLAreaElement_hash_Setter";
 
-  static $host_Getter(mthis) native "HTMLAreaElement_host_Getter";
+  static host_Getter(mthis) native "HTMLAreaElement_host_Getter";
 
-  static $host_Setter(mthis, value) native "HTMLAreaElement_host_Setter";
+  static host_Setter_DOMString(mthis, value) native "HTMLAreaElement_host_Setter";
 
-  static $hostname_Getter(mthis) native "HTMLAreaElement_hostname_Getter";
+  static hostname_Getter(mthis) native "HTMLAreaElement_hostname_Getter";
 
-  static $hostname_Setter(mthis, value) native "HTMLAreaElement_hostname_Setter";
+  static hostname_Setter_DOMString(mthis, value) native "HTMLAreaElement_hostname_Setter";
 
-  static $href_Getter(mthis) native "HTMLAreaElement_href_Getter";
+  static href_Getter(mthis) native "HTMLAreaElement_href_Getter";
 
-  static $href_Setter(mthis, value) native "HTMLAreaElement_href_Setter";
+  static href_Setter_DOMString(mthis, value) native "HTMLAreaElement_href_Setter";
 
-  static $origin_Getter(mthis) native "HTMLAreaElement_origin_Getter";
+  static origin_Getter(mthis) native "HTMLAreaElement_origin_Getter";
 
-  static $password_Getter(mthis) native "HTMLAreaElement_password_Getter";
+  static password_Getter(mthis) native "HTMLAreaElement_password_Getter";
 
-  static $password_Setter(mthis, value) native "HTMLAreaElement_password_Setter";
+  static password_Setter_DOMString(mthis, value) native "HTMLAreaElement_password_Setter";
 
-  static $pathname_Getter(mthis) native "HTMLAreaElement_pathname_Getter";
+  static pathname_Getter(mthis) native "HTMLAreaElement_pathname_Getter";
 
-  static $pathname_Setter(mthis, value) native "HTMLAreaElement_pathname_Setter";
+  static pathname_Setter_DOMString(mthis, value) native "HTMLAreaElement_pathname_Setter";
 
-  static $port_Getter(mthis) native "HTMLAreaElement_port_Getter";
+  static port_Getter(mthis) native "HTMLAreaElement_port_Getter";
 
-  static $port_Setter(mthis, value) native "HTMLAreaElement_port_Setter";
+  static port_Setter_DOMString(mthis, value) native "HTMLAreaElement_port_Setter";
 
-  static $protocol_Getter(mthis) native "HTMLAreaElement_protocol_Getter";
+  static protocol_Getter(mthis) native "HTMLAreaElement_protocol_Getter";
 
-  static $protocol_Setter(mthis, value) native "HTMLAreaElement_protocol_Setter";
+  static protocol_Setter_DOMString(mthis, value) native "HTMLAreaElement_protocol_Setter";
 
-  static $search_Getter(mthis) native "HTMLAreaElement_search_Getter";
+  static search_Getter(mthis) native "HTMLAreaElement_search_Getter";
 
-  static $search_Setter(mthis, value) native "HTMLAreaElement_search_Setter";
+  static search_Setter_DOMString(mthis, value) native "HTMLAreaElement_search_Setter";
 
-  static $username_Getter(mthis) native "HTMLAreaElement_username_Getter";
+  static username_Getter(mthis) native "HTMLAreaElement_username_Getter";
 
-  static $username_Setter(mthis, value) native "HTMLAreaElement_username_Setter";
+  static username_Setter_DOMString(mthis, value) native "HTMLAreaElement_username_Setter";
 
-  static $toString_Callback(mthis) native "HTMLAreaElement_toString_Callback_RESOLVER_STRING_0_";
+  static toString_Callback(mthis) native "HTMLAreaElement_toString_Callback";
 }
 
 class BlinkHTMLMediaElement {
-  static $autoplay_Getter(mthis) native "HTMLMediaElement_autoplay_Getter";
+  static autoplay_Getter(mthis) native "HTMLMediaElement_autoplay_Getter";
 
-  static $autoplay_Setter(mthis, value) native "HTMLMediaElement_autoplay_Setter";
+  static autoplay_Setter_boolean(mthis, value) native "HTMLMediaElement_autoplay_Setter";
 
-  static $buffered_Getter(mthis) native "HTMLMediaElement_buffered_Getter";
+  static buffered_Getter(mthis) native "HTMLMediaElement_buffered_Getter";
 
-  static $controller_Getter(mthis) native "HTMLMediaElement_controller_Getter";
+  static controller_Getter(mthis) native "HTMLMediaElement_controller_Getter";
 
-  static $controller_Setter(mthis, value) native "HTMLMediaElement_controller_Setter";
+  static controller_Setter_MediaController(mthis, value) native "HTMLMediaElement_controller_Setter";
 
-  static $controls_Getter(mthis) native "HTMLMediaElement_controls_Getter";
+  static controls_Getter(mthis) native "HTMLMediaElement_controls_Getter";
 
-  static $controls_Setter(mthis, value) native "HTMLMediaElement_controls_Setter";
+  static controls_Setter_boolean(mthis, value) native "HTMLMediaElement_controls_Setter";
 
-  static $crossOrigin_Getter(mthis) native "HTMLMediaElement_crossOrigin_Getter";
+  static crossOrigin_Getter(mthis) native "HTMLMediaElement_crossOrigin_Getter";
 
-  static $crossOrigin_Setter(mthis, value) native "HTMLMediaElement_crossOrigin_Setter";
+  static crossOrigin_Setter_DOMString(mthis, value) native "HTMLMediaElement_crossOrigin_Setter";
 
-  static $currentSrc_Getter(mthis) native "HTMLMediaElement_currentSrc_Getter";
+  static currentSrc_Getter(mthis) native "HTMLMediaElement_currentSrc_Getter";
 
-  static $currentTime_Getter(mthis) native "HTMLMediaElement_currentTime_Getter";
+  static currentTime_Getter(mthis) native "HTMLMediaElement_currentTime_Getter";
 
-  static $currentTime_Setter(mthis, value) native "HTMLMediaElement_currentTime_Setter";
+  static currentTime_Setter_double(mthis, value) native "HTMLMediaElement_currentTime_Setter";
 
-  static $defaultMuted_Getter(mthis) native "HTMLMediaElement_defaultMuted_Getter";
+  static defaultMuted_Getter(mthis) native "HTMLMediaElement_defaultMuted_Getter";
 
-  static $defaultMuted_Setter(mthis, value) native "HTMLMediaElement_defaultMuted_Setter";
+  static defaultMuted_Setter_boolean(mthis, value) native "HTMLMediaElement_defaultMuted_Setter";
 
-  static $defaultPlaybackRate_Getter(mthis) native "HTMLMediaElement_defaultPlaybackRate_Getter";
+  static defaultPlaybackRate_Getter(mthis) native "HTMLMediaElement_defaultPlaybackRate_Getter";
 
-  static $defaultPlaybackRate_Setter(mthis, value) native "HTMLMediaElement_defaultPlaybackRate_Setter";
+  static defaultPlaybackRate_Setter_double(mthis, value) native "HTMLMediaElement_defaultPlaybackRate_Setter";
 
-  static $duration_Getter(mthis) native "HTMLMediaElement_duration_Getter";
+  static duration_Getter(mthis) native "HTMLMediaElement_duration_Getter";
 
-  static $ended_Getter(mthis) native "HTMLMediaElement_ended_Getter";
+  static ended_Getter(mthis) native "HTMLMediaElement_ended_Getter";
 
-  static $error_Getter(mthis) native "HTMLMediaElement_error_Getter";
+  static error_Getter(mthis) native "HTMLMediaElement_error_Getter";
 
-  static $loop_Getter(mthis) native "HTMLMediaElement_loop_Getter";
+  static loop_Getter(mthis) native "HTMLMediaElement_loop_Getter";
 
-  static $loop_Setter(mthis, value) native "HTMLMediaElement_loop_Setter";
+  static loop_Setter_boolean(mthis, value) native "HTMLMediaElement_loop_Setter";
 
-  static $mediaGroup_Getter(mthis) native "HTMLMediaElement_mediaGroup_Getter";
+  static mediaGroup_Getter(mthis) native "HTMLMediaElement_mediaGroup_Getter";
 
-  static $mediaGroup_Setter(mthis, value) native "HTMLMediaElement_mediaGroup_Setter";
+  static mediaGroup_Setter_DOMString(mthis, value) native "HTMLMediaElement_mediaGroup_Setter";
 
-  static $mediaKeys_Getter(mthis) native "HTMLMediaElement_mediaKeys_Getter";
+  static mediaKeys_Getter(mthis) native "HTMLMediaElement_mediaKeys_Getter";
 
-  static $muted_Getter(mthis) native "HTMLMediaElement_muted_Getter";
+  static muted_Getter(mthis) native "HTMLMediaElement_muted_Getter";
 
-  static $muted_Setter(mthis, value) native "HTMLMediaElement_muted_Setter";
+  static muted_Setter_boolean(mthis, value) native "HTMLMediaElement_muted_Setter";
 
-  static $networkState_Getter(mthis) native "HTMLMediaElement_networkState_Getter";
+  static networkState_Getter(mthis) native "HTMLMediaElement_networkState_Getter";
 
-  static $paused_Getter(mthis) native "HTMLMediaElement_paused_Getter";
+  static paused_Getter(mthis) native "HTMLMediaElement_paused_Getter";
 
-  static $playbackRate_Getter(mthis) native "HTMLMediaElement_playbackRate_Getter";
+  static playbackRate_Getter(mthis) native "HTMLMediaElement_playbackRate_Getter";
 
-  static $playbackRate_Setter(mthis, value) native "HTMLMediaElement_playbackRate_Setter";
+  static playbackRate_Setter_double(mthis, value) native "HTMLMediaElement_playbackRate_Setter";
 
-  static $played_Getter(mthis) native "HTMLMediaElement_played_Getter";
+  static played_Getter(mthis) native "HTMLMediaElement_played_Getter";
 
-  static $preload_Getter(mthis) native "HTMLMediaElement_preload_Getter";
+  static preload_Getter(mthis) native "HTMLMediaElement_preload_Getter";
 
-  static $preload_Setter(mthis, value) native "HTMLMediaElement_preload_Setter";
+  static preload_Setter_DOMString(mthis, value) native "HTMLMediaElement_preload_Setter";
 
-  static $readyState_Getter(mthis) native "HTMLMediaElement_readyState_Getter";
+  static readyState_Getter(mthis) native "HTMLMediaElement_readyState_Getter";
 
-  static $seekable_Getter(mthis) native "HTMLMediaElement_seekable_Getter";
+  static seekable_Getter(mthis) native "HTMLMediaElement_seekable_Getter";
 
-  static $seeking_Getter(mthis) native "HTMLMediaElement_seeking_Getter";
+  static seeking_Getter(mthis) native "HTMLMediaElement_seeking_Getter";
 
-  static $src_Getter(mthis) native "HTMLMediaElement_src_Getter";
+  static src_Getter(mthis) native "HTMLMediaElement_src_Getter";
 
-  static $src_Setter(mthis, value) native "HTMLMediaElement_src_Setter";
+  static src_Setter_DOMString(mthis, value) native "HTMLMediaElement_src_Setter";
 
-  static $textTracks_Getter(mthis) native "HTMLMediaElement_textTracks_Getter";
+  static textTracks_Getter(mthis) native "HTMLMediaElement_textTracks_Getter";
 
-  static $volume_Getter(mthis) native "HTMLMediaElement_volume_Getter";
+  static volume_Getter(mthis) native "HTMLMediaElement_volume_Getter";
 
-  static $volume_Setter(mthis, value) native "HTMLMediaElement_volume_Setter";
+  static volume_Setter_double(mthis, value) native "HTMLMediaElement_volume_Setter";
 
-  static $webkitAudioDecodedByteCount_Getter(mthis) native "HTMLMediaElement_webkitAudioDecodedByteCount_Getter";
+  static webkitAudioDecodedByteCount_Getter(mthis) native "HTMLMediaElement_webkitAudioDecodedByteCount_Getter";
 
-  static $webkitVideoDecodedByteCount_Getter(mthis) native "HTMLMediaElement_webkitVideoDecodedByteCount_Getter";
+  static webkitVideoDecodedByteCount_Getter(mthis) native "HTMLMediaElement_webkitVideoDecodedByteCount_Getter";
 
-  static $_addTextTrack_1_Callback(mthis, kind, label, language) native "HTMLMediaElement_addTextTrack_Callback_RESOLVER_STRING_3_DOMString_DOMString_DOMString";
+  static addTextTrack_Callback_DOMString_DOMString_DOMString(mthis, kind, label, language) native "HTMLMediaElement_addTextTrack_Callback_DOMString_DOMString_DOMString";
 
-  static $_addTextTrack_2_Callback(mthis, kind, label) native "HTMLMediaElement_addTextTrack_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static addTextTrack_Callback_DOMString_DOMString(mthis, kind, label) native "HTMLMediaElement_addTextTrack_Callback_DOMString_DOMString";
 
-  static $_addTextTrack_3_Callback(mthis, kind) native "HTMLMediaElement_addTextTrack_Callback_RESOLVER_STRING_1_DOMString";
+  static addTextTrack_Callback_DOMString(mthis, kind) native "HTMLMediaElement_addTextTrack_Callback_DOMString";
 
-  static $canPlayType_Callback(mthis, type, keySystem) native "HTMLMediaElement_canPlayType_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static canPlayType_Callback_DOMString_DOMString(mthis, type, keySystem) native "HTMLMediaElement_canPlayType_Callback_DOMString_DOMString";
 
-  static $load_Callback(mthis) native "HTMLMediaElement_load_Callback_RESOLVER_STRING_0_";
+  static load_Callback(mthis) native "HTMLMediaElement_load_Callback";
 
-  static $pause_Callback(mthis) native "HTMLMediaElement_pause_Callback_RESOLVER_STRING_0_";
+  static pause_Callback(mthis) native "HTMLMediaElement_pause_Callback";
 
-  static $play_Callback(mthis) native "HTMLMediaElement_play_Callback_RESOLVER_STRING_0_";
+  static play_Callback(mthis) native "HTMLMediaElement_play_Callback";
 
-  static $setMediaKeys_Callback(mthis, mediaKeys) native "HTMLMediaElement_setMediaKeys_Callback_RESOLVER_STRING_1_MediaKeys";
+  static setMediaKeys_Callback_MediaKeys(mthis, mediaKeys) native "HTMLMediaElement_setMediaKeys_Callback_MediaKeys";
 
-  static $_webkitAddKey_1_Callback(mthis, keySystem, key, initData, sessionId) native "HTMLMediaElement_webkitAddKey_Callback_RESOLVER_STRING_4_DOMString_Uint8Array_Uint8Array_DOMString";
+  static webkitAddKey_Callback_DOMString_Uint8Array_Uint8Array_DOMString(mthis, keySystem, key, initData, sessionId) native "HTMLMediaElement_webkitAddKey_Callback_DOMString_Uint8Array_Uint8Array_DOMString";
 
-  static $_webkitAddKey_2_Callback(mthis, keySystem, key) native "HTMLMediaElement_webkitAddKey_Callback_RESOLVER_STRING_2_DOMString_Uint8Array";
+  static webkitAddKey_Callback_DOMString_Uint8Array(mthis, keySystem, key) native "HTMLMediaElement_webkitAddKey_Callback_DOMString_Uint8Array";
 
-  static $webkitCancelKeyRequest_Callback(mthis, keySystem, sessionId) native "HTMLMediaElement_webkitCancelKeyRequest_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static webkitCancelKeyRequest_Callback_DOMString_DOMString(mthis, keySystem, sessionId) native "HTMLMediaElement_webkitCancelKeyRequest_Callback_DOMString_DOMString";
 
-  static $_webkitGenerateKeyRequest_1_Callback(mthis, keySystem, initData) native "HTMLMediaElement_webkitGenerateKeyRequest_Callback_RESOLVER_STRING_2_DOMString_Uint8Array";
+  static webkitGenerateKeyRequest_Callback_DOMString_Uint8Array(mthis, keySystem, initData) native "HTMLMediaElement_webkitGenerateKeyRequest_Callback_DOMString_Uint8Array";
 
-  static $_webkitGenerateKeyRequest_2_Callback(mthis, keySystem) native "HTMLMediaElement_webkitGenerateKeyRequest_Callback_RESOLVER_STRING_1_DOMString";
+  static webkitGenerateKeyRequest_Callback_DOMString(mthis, keySystem) native "HTMLMediaElement_webkitGenerateKeyRequest_Callback_DOMString";
 }
 
 class BlinkHTMLAudioElement {
-  static $_create_1constructorCallback(src) native "HTMLAudioElement_constructorCallback_RESOLVER_STRING_1_DOMString";
+  static constructorCallback_DOMString(src) native "HTMLAudioElement_constructorCallback_DOMString";
 }
 
 class BlinkHTMLBRElement {}
 
 class BlinkHTMLBaseElement {
-  static $href_Getter(mthis) native "HTMLBaseElement_href_Getter";
+  static href_Getter(mthis) native "HTMLBaseElement_href_Getter";
 
-  static $href_Setter(mthis, value) native "HTMLBaseElement_href_Setter";
+  static href_Setter_DOMString(mthis, value) native "HTMLBaseElement_href_Setter";
 
-  static $target_Getter(mthis) native "HTMLBaseElement_target_Getter";
+  static target_Getter(mthis) native "HTMLBaseElement_target_Getter";
 
-  static $target_Setter(mthis, value) native "HTMLBaseElement_target_Setter";
+  static target_Setter_DOMString(mthis, value) native "HTMLBaseElement_target_Setter";
 }
 
 class BlinkWindowEventHandlers {}
@@ -2233,123 +2217,121 @@
 class BlinkHTMLBodyElement {}
 
 class BlinkHTMLButtonElement {
-  static $autofocus_Getter(mthis) native "HTMLButtonElement_autofocus_Getter";
+  static autofocus_Getter(mthis) native "HTMLButtonElement_autofocus_Getter";
 
-  static $autofocus_Setter(mthis, value) native "HTMLButtonElement_autofocus_Setter";
+  static autofocus_Setter_boolean(mthis, value) native "HTMLButtonElement_autofocus_Setter";
 
-  static $disabled_Getter(mthis) native "HTMLButtonElement_disabled_Getter";
+  static disabled_Getter(mthis) native "HTMLButtonElement_disabled_Getter";
 
-  static $disabled_Setter(mthis, value) native "HTMLButtonElement_disabled_Setter";
+  static disabled_Setter_boolean(mthis, value) native "HTMLButtonElement_disabled_Setter";
 
-  static $form_Getter(mthis) native "HTMLButtonElement_form_Getter";
+  static form_Getter(mthis) native "HTMLButtonElement_form_Getter";
 
-  static $formAction_Getter(mthis) native "HTMLButtonElement_formAction_Getter";
+  static formAction_Getter(mthis) native "HTMLButtonElement_formAction_Getter";
 
-  static $formAction_Setter(mthis, value) native "HTMLButtonElement_formAction_Setter";
+  static formAction_Setter_DOMString(mthis, value) native "HTMLButtonElement_formAction_Setter";
 
-  static $formEnctype_Getter(mthis) native "HTMLButtonElement_formEnctype_Getter";
+  static formEnctype_Getter(mthis) native "HTMLButtonElement_formEnctype_Getter";
 
-  static $formEnctype_Setter(mthis, value) native "HTMLButtonElement_formEnctype_Setter";
+  static formEnctype_Setter_DOMString(mthis, value) native "HTMLButtonElement_formEnctype_Setter";
 
-  static $formMethod_Getter(mthis) native "HTMLButtonElement_formMethod_Getter";
+  static formMethod_Getter(mthis) native "HTMLButtonElement_formMethod_Getter";
 
-  static $formMethod_Setter(mthis, value) native "HTMLButtonElement_formMethod_Setter";
+  static formMethod_Setter_DOMString(mthis, value) native "HTMLButtonElement_formMethod_Setter";
 
-  static $formNoValidate_Getter(mthis) native "HTMLButtonElement_formNoValidate_Getter";
+  static formNoValidate_Getter(mthis) native "HTMLButtonElement_formNoValidate_Getter";
 
-  static $formNoValidate_Setter(mthis, value) native "HTMLButtonElement_formNoValidate_Setter";
+  static formNoValidate_Setter_boolean(mthis, value) native "HTMLButtonElement_formNoValidate_Setter";
 
-  static $formTarget_Getter(mthis) native "HTMLButtonElement_formTarget_Getter";
+  static formTarget_Getter(mthis) native "HTMLButtonElement_formTarget_Getter";
 
-  static $formTarget_Setter(mthis, value) native "HTMLButtonElement_formTarget_Setter";
+  static formTarget_Setter_DOMString(mthis, value) native "HTMLButtonElement_formTarget_Setter";
 
-  static $labels_Getter(mthis) native "HTMLButtonElement_labels_Getter";
+  static labels_Getter(mthis) native "HTMLButtonElement_labels_Getter";
 
-  static $name_Getter(mthis) native "HTMLButtonElement_name_Getter";
+  static name_Getter(mthis) native "HTMLButtonElement_name_Getter";
 
-  static $name_Setter(mthis, value) native "HTMLButtonElement_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "HTMLButtonElement_name_Setter";
 
-  static $type_Getter(mthis) native "HTMLButtonElement_type_Getter";
+  static type_Getter(mthis) native "HTMLButtonElement_type_Getter";
 
-  static $type_Setter(mthis, value) native "HTMLButtonElement_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "HTMLButtonElement_type_Setter";
 
-  static $validationMessage_Getter(mthis) native "HTMLButtonElement_validationMessage_Getter";
+  static validationMessage_Getter(mthis) native "HTMLButtonElement_validationMessage_Getter";
 
-  static $validity_Getter(mthis) native "HTMLButtonElement_validity_Getter";
+  static validity_Getter(mthis) native "HTMLButtonElement_validity_Getter";
 
-  static $value_Getter(mthis) native "HTMLButtonElement_value_Getter";
+  static value_Getter(mthis) native "HTMLButtonElement_value_Getter";
 
-  static $value_Setter(mthis, value) native "HTMLButtonElement_value_Setter";
+  static value_Setter_DOMString(mthis, value) native "HTMLButtonElement_value_Setter";
 
-  static $willValidate_Getter(mthis) native "HTMLButtonElement_willValidate_Getter";
+  static willValidate_Getter(mthis) native "HTMLButtonElement_willValidate_Getter";
 
-  static $checkValidity_Callback(mthis) native "HTMLButtonElement_checkValidity_Callback_RESOLVER_STRING_0_";
+  static checkValidity_Callback(mthis) native "HTMLButtonElement_checkValidity_Callback";
 
-  static $setCustomValidity_Callback(mthis, error) native "HTMLButtonElement_setCustomValidity_Callback_RESOLVER_STRING_1_DOMString";
+  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLButtonElement_setCustomValidity_Callback_DOMString";
 }
 
 class BlinkHTMLCanvasElement {
-  static $height_Getter(mthis) native "HTMLCanvasElement_height_Getter";
+  static height_Getter(mthis) native "HTMLCanvasElement_height_Getter";
 
-  static $height_Setter(mthis, value) native "HTMLCanvasElement_height_Setter";
+  static height_Setter_long(mthis, value) native "HTMLCanvasElement_height_Setter";
 
-  static $width_Getter(mthis) native "HTMLCanvasElement_width_Getter";
+  static width_Getter(mthis) native "HTMLCanvasElement_width_Getter";
 
-  static $width_Setter(mthis, value) native "HTMLCanvasElement_width_Setter";
+  static width_Setter_long(mthis, value) native "HTMLCanvasElement_width_Setter";
 
-  static $getContext_Callback(mthis, contextId, attrs) native "HTMLCanvasElement_getContext_Callback";
+  static getContext_Callback_DOMString_Dictionary(mthis, contextId, attrs) native "HTMLCanvasElement_getContext_Callback";
 
-  static $toDataURL_Callback(mthis, type, quality) native "HTMLCanvasElement_toDataURL_Callback";
+  static toDataURL_Callback_DOMString_float(mthis, type, quality) native "HTMLCanvasElement_toDataURL_Callback";
 }
 
 class BlinkHTMLCollection {
-  static $length_Getter(mthis) native "HTMLCollection_length_Getter";
+  static length_Getter(mthis) native "HTMLCollection_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "HTMLCollection_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "HTMLCollection_item_Callback_unsigned long";
 
-  static $item_Callback(mthis, index) native "HTMLCollection_item_Callback_RESOLVER_STRING_1_unsigned long";
-
-  static $namedItem_Callback(mthis, name) native "HTMLCollection_namedItem_Callback_RESOLVER_STRING_1_DOMString";
+  static namedItem_Callback_DOMString(mthis, name) native "HTMLCollection_namedItem_Callback_DOMString";
 }
 
 class BlinkHTMLContentElement {
-  static $resetStyleInheritance_Getter(mthis) native "HTMLContentElement_resetStyleInheritance_Getter";
+  static resetStyleInheritance_Getter(mthis) native "HTMLContentElement_resetStyleInheritance_Getter";
 
-  static $resetStyleInheritance_Setter(mthis, value) native "HTMLContentElement_resetStyleInheritance_Setter";
+  static resetStyleInheritance_Setter_boolean(mthis, value) native "HTMLContentElement_resetStyleInheritance_Setter";
 
-  static $select_Getter(mthis) native "HTMLContentElement_select_Getter";
+  static select_Getter(mthis) native "HTMLContentElement_select_Getter";
 
-  static $select_Setter(mthis, value) native "HTMLContentElement_select_Setter";
+  static select_Setter_DOMString(mthis, value) native "HTMLContentElement_select_Setter";
 
-  static $getDistributedNodes_Callback(mthis) native "HTMLContentElement_getDistributedNodes_Callback_RESOLVER_STRING_0_";
+  static getDistributedNodes_Callback(mthis) native "HTMLContentElement_getDistributedNodes_Callback";
 }
 
 class BlinkHTMLDListElement {}
 
 class BlinkHTMLDataListElement {
-  static $options_Getter(mthis) native "HTMLDataListElement_options_Getter";
+  static options_Getter(mthis) native "HTMLDataListElement_options_Getter";
 }
 
 class BlinkHTMLDetailsElement {
-  static $open_Getter(mthis) native "HTMLDetailsElement_open_Getter";
+  static open_Getter(mthis) native "HTMLDetailsElement_open_Getter";
 
-  static $open_Setter(mthis, value) native "HTMLDetailsElement_open_Setter";
+  static open_Setter_boolean(mthis, value) native "HTMLDetailsElement_open_Setter";
 }
 
 class BlinkHTMLDialogElement {
-  static $open_Getter(mthis) native "HTMLDialogElement_open_Getter";
+  static open_Getter(mthis) native "HTMLDialogElement_open_Getter";
 
-  static $open_Setter(mthis, value) native "HTMLDialogElement_open_Setter";
+  static open_Setter_boolean(mthis, value) native "HTMLDialogElement_open_Setter";
 
-  static $returnValue_Getter(mthis) native "HTMLDialogElement_returnValue_Getter";
+  static returnValue_Getter(mthis) native "HTMLDialogElement_returnValue_Getter";
 
-  static $returnValue_Setter(mthis, value) native "HTMLDialogElement_returnValue_Setter";
+  static returnValue_Setter_DOMString(mthis, value) native "HTMLDialogElement_returnValue_Setter";
 
-  static $close_Callback(mthis, returnValue) native "HTMLDialogElement_close_Callback_RESOLVER_STRING_1_DOMString";
+  static close_Callback_DOMString(mthis, returnValue) native "HTMLDialogElement_close_Callback_DOMString";
 
-  static $show_Callback(mthis) native "HTMLDialogElement_show_Callback_RESOLVER_STRING_0_";
+  static show_Callback(mthis) native "HTMLDialogElement_show_Callback";
 
-  static $showModal_Callback(mthis) native "HTMLDialogElement_showModal_Callback_RESOLVER_STRING_0_";
+  static showModal_Callback(mthis) native "HTMLDialogElement_showModal_Callback";
 }
 
 class BlinkHTMLDirectoryElement {}
@@ -2359,55 +2341,55 @@
 class BlinkHTMLDocument {}
 
 class BlinkHTMLEmbedElement {
-  static $height_Getter(mthis) native "HTMLEmbedElement_height_Getter";
+  static height_Getter(mthis) native "HTMLEmbedElement_height_Getter";
 
-  static $height_Setter(mthis, value) native "HTMLEmbedElement_height_Setter";
+  static height_Setter_DOMString(mthis, value) native "HTMLEmbedElement_height_Setter";
 
-  static $name_Getter(mthis) native "HTMLEmbedElement_name_Getter";
+  static name_Getter(mthis) native "HTMLEmbedElement_name_Getter";
 
-  static $name_Setter(mthis, value) native "HTMLEmbedElement_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "HTMLEmbedElement_name_Setter";
 
-  static $src_Getter(mthis) native "HTMLEmbedElement_src_Getter";
+  static src_Getter(mthis) native "HTMLEmbedElement_src_Getter";
 
-  static $src_Setter(mthis, value) native "HTMLEmbedElement_src_Setter";
+  static src_Setter_DOMString(mthis, value) native "HTMLEmbedElement_src_Setter";
 
-  static $type_Getter(mthis) native "HTMLEmbedElement_type_Getter";
+  static type_Getter(mthis) native "HTMLEmbedElement_type_Getter";
 
-  static $type_Setter(mthis, value) native "HTMLEmbedElement_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "HTMLEmbedElement_type_Setter";
 
-  static $width_Getter(mthis) native "HTMLEmbedElement_width_Getter";
+  static width_Getter(mthis) native "HTMLEmbedElement_width_Getter";
 
-  static $width_Setter(mthis, value) native "HTMLEmbedElement_width_Setter";
+  static width_Setter_DOMString(mthis, value) native "HTMLEmbedElement_width_Setter";
 
-  static $__getter___Callback(mthis, index_OR_name) native "HTMLEmbedElement___getter___Callback";
+  static $__getter___Callback_ul(mthis, index_OR_name) native "HTMLEmbedElement___getter___Callback";
 
-  static $__setter___Callback(mthis, index_OR_name, value) native "HTMLEmbedElement___setter___Callback";
+  static $__setter___Callback_ul_Node(mthis, index_OR_name, value) native "HTMLEmbedElement___setter___Callback";
 }
 
 class BlinkHTMLFieldSetElement {
-  static $disabled_Getter(mthis) native "HTMLFieldSetElement_disabled_Getter";
+  static disabled_Getter(mthis) native "HTMLFieldSetElement_disabled_Getter";
 
-  static $disabled_Setter(mthis, value) native "HTMLFieldSetElement_disabled_Setter";
+  static disabled_Setter_boolean(mthis, value) native "HTMLFieldSetElement_disabled_Setter";
 
-  static $elements_Getter(mthis) native "HTMLFieldSetElement_elements_Getter";
+  static elements_Getter(mthis) native "HTMLFieldSetElement_elements_Getter";
 
-  static $form_Getter(mthis) native "HTMLFieldSetElement_form_Getter";
+  static form_Getter(mthis) native "HTMLFieldSetElement_form_Getter";
 
-  static $name_Getter(mthis) native "HTMLFieldSetElement_name_Getter";
+  static name_Getter(mthis) native "HTMLFieldSetElement_name_Getter";
 
-  static $name_Setter(mthis, value) native "HTMLFieldSetElement_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "HTMLFieldSetElement_name_Setter";
 
-  static $type_Getter(mthis) native "HTMLFieldSetElement_type_Getter";
+  static type_Getter(mthis) native "HTMLFieldSetElement_type_Getter";
 
-  static $validationMessage_Getter(mthis) native "HTMLFieldSetElement_validationMessage_Getter";
+  static validationMessage_Getter(mthis) native "HTMLFieldSetElement_validationMessage_Getter";
 
-  static $validity_Getter(mthis) native "HTMLFieldSetElement_validity_Getter";
+  static validity_Getter(mthis) native "HTMLFieldSetElement_validity_Getter";
 
-  static $willValidate_Getter(mthis) native "HTMLFieldSetElement_willValidate_Getter";
+  static willValidate_Getter(mthis) native "HTMLFieldSetElement_willValidate_Getter";
 
-  static $checkValidity_Callback(mthis) native "HTMLFieldSetElement_checkValidity_Callback_RESOLVER_STRING_0_";
+  static checkValidity_Callback(mthis) native "HTMLFieldSetElement_checkValidity_Callback";
 
-  static $setCustomValidity_Callback(mthis, error) native "HTMLFieldSetElement_setCustomValidity_Callback_RESOLVER_STRING_1_DOMString";
+  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLFieldSetElement_setCustomValidity_Callback_DOMString";
 }
 
 class BlinkHTMLFontElement {}
@@ -2415,53 +2397,53 @@
 class BlinkHTMLFormControlsCollection {}
 
 class BlinkHTMLFormElement {
-  static $acceptCharset_Getter(mthis) native "HTMLFormElement_acceptCharset_Getter";
+  static acceptCharset_Getter(mthis) native "HTMLFormElement_acceptCharset_Getter";
 
-  static $acceptCharset_Setter(mthis, value) native "HTMLFormElement_acceptCharset_Setter";
+  static acceptCharset_Setter_DOMString(mthis, value) native "HTMLFormElement_acceptCharset_Setter";
 
-  static $action_Getter(mthis) native "HTMLFormElement_action_Getter";
+  static action_Getter(mthis) native "HTMLFormElement_action_Getter";
 
-  static $action_Setter(mthis, value) native "HTMLFormElement_action_Setter";
+  static action_Setter_DOMString(mthis, value) native "HTMLFormElement_action_Setter";
 
-  static $autocomplete_Getter(mthis) native "HTMLFormElement_autocomplete_Getter";
+  static autocomplete_Getter(mthis) native "HTMLFormElement_autocomplete_Getter";
 
-  static $autocomplete_Setter(mthis, value) native "HTMLFormElement_autocomplete_Setter";
+  static autocomplete_Setter_DOMString(mthis, value) native "HTMLFormElement_autocomplete_Setter";
 
-  static $encoding_Getter(mthis) native "HTMLFormElement_encoding_Getter";
+  static encoding_Getter(mthis) native "HTMLFormElement_encoding_Getter";
 
-  static $encoding_Setter(mthis, value) native "HTMLFormElement_encoding_Setter";
+  static encoding_Setter_DOMString(mthis, value) native "HTMLFormElement_encoding_Setter";
 
-  static $enctype_Getter(mthis) native "HTMLFormElement_enctype_Getter";
+  static enctype_Getter(mthis) native "HTMLFormElement_enctype_Getter";
 
-  static $enctype_Setter(mthis, value) native "HTMLFormElement_enctype_Setter";
+  static enctype_Setter_DOMString(mthis, value) native "HTMLFormElement_enctype_Setter";
 
-  static $length_Getter(mthis) native "HTMLFormElement_length_Getter";
+  static length_Getter(mthis) native "HTMLFormElement_length_Getter";
 
-  static $method_Getter(mthis) native "HTMLFormElement_method_Getter";
+  static method_Getter(mthis) native "HTMLFormElement_method_Getter";
 
-  static $method_Setter(mthis, value) native "HTMLFormElement_method_Setter";
+  static method_Setter_DOMString(mthis, value) native "HTMLFormElement_method_Setter";
 
-  static $name_Getter(mthis) native "HTMLFormElement_name_Getter";
+  static name_Getter(mthis) native "HTMLFormElement_name_Getter";
 
-  static $name_Setter(mthis, value) native "HTMLFormElement_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "HTMLFormElement_name_Setter";
 
-  static $noValidate_Getter(mthis) native "HTMLFormElement_noValidate_Getter";
+  static noValidate_Getter(mthis) native "HTMLFormElement_noValidate_Getter";
 
-  static $noValidate_Setter(mthis, value) native "HTMLFormElement_noValidate_Setter";
+  static noValidate_Setter_boolean(mthis, value) native "HTMLFormElement_noValidate_Setter";
 
-  static $target_Getter(mthis) native "HTMLFormElement_target_Getter";
+  static target_Getter(mthis) native "HTMLFormElement_target_Getter";
 
-  static $target_Setter(mthis, value) native "HTMLFormElement_target_Setter";
+  static target_Setter_DOMString(mthis, value) native "HTMLFormElement_target_Setter";
 
-  static $__getter___Callback(mthis, index) native "HTMLFormElement___getter___Callback_RESOLVER_STRING_1_unsigned long";
+  static $__getter___Callback_ul(mthis, index) native "HTMLFormElement___getter___Callback_unsigned long";
 
-  static $checkValidity_Callback(mthis) native "HTMLFormElement_checkValidity_Callback_RESOLVER_STRING_0_";
+  static checkValidity_Callback(mthis) native "HTMLFormElement_checkValidity_Callback";
 
-  static $requestAutocomplete_Callback(mthis, details) native "HTMLFormElement_requestAutocomplete_Callback_RESOLVER_STRING_1_Dictionary";
+  static requestAutocomplete_Callback_Dictionary(mthis, details) native "HTMLFormElement_requestAutocomplete_Callback_Dictionary";
 
-  static $reset_Callback(mthis) native "HTMLFormElement_reset_Callback_RESOLVER_STRING_0_";
+  static reset_Callback(mthis) native "HTMLFormElement_reset_Callback";
 
-  static $submit_Callback(mthis) native "HTMLFormElement_submit_Callback_RESOLVER_STRING_0_";
+  static submit_Callback(mthis) native "HTMLFormElement_submit_Callback";
 }
 
 class BlinkHTMLFrameElement {}
@@ -2469,9 +2451,9 @@
 class BlinkHTMLFrameSetElement {}
 
 class BlinkHTMLHRElement {
-  static $color_Getter(mthis) native "HTMLHRElement_color_Getter";
+  static color_Getter(mthis) native "HTMLHRElement_color_Getter";
 
-  static $color_Setter(mthis, value) native "HTMLHRElement_color_Setter";
+  static color_Setter_DOMString(mthis, value) native "HTMLHRElement_color_Setter";
 }
 
 class BlinkHTMLHeadElement {}
@@ -2481,371 +2463,371 @@
 class BlinkHTMLHtmlElement {}
 
 class BlinkHTMLIFrameElement {
-  static $contentWindow_Getter(mthis) native "HTMLIFrameElement_contentWindow_Getter";
+  static contentWindow_Getter(mthis) native "HTMLIFrameElement_contentWindow_Getter";
 
-  static $height_Getter(mthis) native "HTMLIFrameElement_height_Getter";
+  static height_Getter(mthis) native "HTMLIFrameElement_height_Getter";
 
-  static $height_Setter(mthis, value) native "HTMLIFrameElement_height_Setter";
+  static height_Setter_DOMString(mthis, value) native "HTMLIFrameElement_height_Setter";
 
-  static $name_Getter(mthis) native "HTMLIFrameElement_name_Getter";
+  static name_Getter(mthis) native "HTMLIFrameElement_name_Getter";
 
-  static $name_Setter(mthis, value) native "HTMLIFrameElement_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "HTMLIFrameElement_name_Setter";
 
-  static $sandbox_Getter(mthis) native "HTMLIFrameElement_sandbox_Getter";
+  static sandbox_Getter(mthis) native "HTMLIFrameElement_sandbox_Getter";
 
-  static $sandbox_Setter(mthis, value) native "HTMLIFrameElement_sandbox_Setter";
+  static sandbox_Setter_DOMString(mthis, value) native "HTMLIFrameElement_sandbox_Setter";
 
-  static $src_Getter(mthis) native "HTMLIFrameElement_src_Getter";
+  static src_Getter(mthis) native "HTMLIFrameElement_src_Getter";
 
-  static $src_Setter(mthis, value) native "HTMLIFrameElement_src_Setter";
+  static src_Setter_DOMString(mthis, value) native "HTMLIFrameElement_src_Setter";
 
-  static $srcdoc_Getter(mthis) native "HTMLIFrameElement_srcdoc_Getter";
+  static srcdoc_Getter(mthis) native "HTMLIFrameElement_srcdoc_Getter";
 
-  static $srcdoc_Setter(mthis, value) native "HTMLIFrameElement_srcdoc_Setter";
+  static srcdoc_Setter_DOMString(mthis, value) native "HTMLIFrameElement_srcdoc_Setter";
 
-  static $width_Getter(mthis) native "HTMLIFrameElement_width_Getter";
+  static width_Getter(mthis) native "HTMLIFrameElement_width_Getter";
 
-  static $width_Setter(mthis, value) native "HTMLIFrameElement_width_Setter";
+  static width_Setter_DOMString(mthis, value) native "HTMLIFrameElement_width_Setter";
 }
 
 class BlinkHTMLImageElement {
-  static $alt_Getter(mthis) native "HTMLImageElement_alt_Getter";
+  static alt_Getter(mthis) native "HTMLImageElement_alt_Getter";
 
-  static $alt_Setter(mthis, value) native "HTMLImageElement_alt_Setter";
+  static alt_Setter_DOMString(mthis, value) native "HTMLImageElement_alt_Setter";
 
-  static $complete_Getter(mthis) native "HTMLImageElement_complete_Getter";
+  static complete_Getter(mthis) native "HTMLImageElement_complete_Getter";
 
-  static $crossOrigin_Getter(mthis) native "HTMLImageElement_crossOrigin_Getter";
+  static crossOrigin_Getter(mthis) native "HTMLImageElement_crossOrigin_Getter";
 
-  static $crossOrigin_Setter(mthis, value) native "HTMLImageElement_crossOrigin_Setter";
+  static crossOrigin_Setter_DOMString(mthis, value) native "HTMLImageElement_crossOrigin_Setter";
 
-  static $height_Getter(mthis) native "HTMLImageElement_height_Getter";
+  static height_Getter(mthis) native "HTMLImageElement_height_Getter";
 
-  static $height_Setter(mthis, value) native "HTMLImageElement_height_Setter";
+  static height_Setter_long(mthis, value) native "HTMLImageElement_height_Setter";
 
-  static $isMap_Getter(mthis) native "HTMLImageElement_isMap_Getter";
+  static isMap_Getter(mthis) native "HTMLImageElement_isMap_Getter";
 
-  static $isMap_Setter(mthis, value) native "HTMLImageElement_isMap_Setter";
+  static isMap_Setter_boolean(mthis, value) native "HTMLImageElement_isMap_Setter";
 
-  static $naturalHeight_Getter(mthis) native "HTMLImageElement_naturalHeight_Getter";
+  static naturalHeight_Getter(mthis) native "HTMLImageElement_naturalHeight_Getter";
 
-  static $naturalWidth_Getter(mthis) native "HTMLImageElement_naturalWidth_Getter";
+  static naturalWidth_Getter(mthis) native "HTMLImageElement_naturalWidth_Getter";
 
-  static $src_Getter(mthis) native "HTMLImageElement_src_Getter";
+  static src_Getter(mthis) native "HTMLImageElement_src_Getter";
 
-  static $src_Setter(mthis, value) native "HTMLImageElement_src_Setter";
+  static src_Setter_DOMString(mthis, value) native "HTMLImageElement_src_Setter";
 
-  static $srcset_Getter(mthis) native "HTMLImageElement_srcset_Getter";
+  static srcset_Getter(mthis) native "HTMLImageElement_srcset_Getter";
 
-  static $srcset_Setter(mthis, value) native "HTMLImageElement_srcset_Setter";
+  static srcset_Setter_DOMString(mthis, value) native "HTMLImageElement_srcset_Setter";
 
-  static $useMap_Getter(mthis) native "HTMLImageElement_useMap_Getter";
+  static useMap_Getter(mthis) native "HTMLImageElement_useMap_Getter";
 
-  static $useMap_Setter(mthis, value) native "HTMLImageElement_useMap_Setter";
+  static useMap_Setter_DOMString(mthis, value) native "HTMLImageElement_useMap_Setter";
 
-  static $width_Getter(mthis) native "HTMLImageElement_width_Getter";
+  static width_Getter(mthis) native "HTMLImageElement_width_Getter";
 
-  static $width_Setter(mthis, value) native "HTMLImageElement_width_Setter";
+  static width_Setter_long(mthis, value) native "HTMLImageElement_width_Setter";
 }
 
 class BlinkHTMLInputElement {
-  static $accept_Getter(mthis) native "HTMLInputElement_accept_Getter";
+  static accept_Getter(mthis) native "HTMLInputElement_accept_Getter";
 
-  static $accept_Setter(mthis, value) native "HTMLInputElement_accept_Setter";
+  static accept_Setter_DOMString(mthis, value) native "HTMLInputElement_accept_Setter";
 
-  static $alt_Getter(mthis) native "HTMLInputElement_alt_Getter";
+  static alt_Getter(mthis) native "HTMLInputElement_alt_Getter";
 
-  static $alt_Setter(mthis, value) native "HTMLInputElement_alt_Setter";
+  static alt_Setter_DOMString(mthis, value) native "HTMLInputElement_alt_Setter";
 
-  static $autocomplete_Getter(mthis) native "HTMLInputElement_autocomplete_Getter";
+  static autocomplete_Getter(mthis) native "HTMLInputElement_autocomplete_Getter";
 
-  static $autocomplete_Setter(mthis, value) native "HTMLInputElement_autocomplete_Setter";
+  static autocomplete_Setter_DOMString(mthis, value) native "HTMLInputElement_autocomplete_Setter";
 
-  static $autofocus_Getter(mthis) native "HTMLInputElement_autofocus_Getter";
+  static autofocus_Getter(mthis) native "HTMLInputElement_autofocus_Getter";
 
-  static $autofocus_Setter(mthis, value) native "HTMLInputElement_autofocus_Setter";
+  static autofocus_Setter_boolean(mthis, value) native "HTMLInputElement_autofocus_Setter";
 
-  static $checked_Getter(mthis) native "HTMLInputElement_checked_Getter";
+  static checked_Getter(mthis) native "HTMLInputElement_checked_Getter";
 
-  static $checked_Setter(mthis, value) native "HTMLInputElement_checked_Setter";
+  static checked_Setter_boolean(mthis, value) native "HTMLInputElement_checked_Setter";
 
-  static $defaultChecked_Getter(mthis) native "HTMLInputElement_defaultChecked_Getter";
+  static defaultChecked_Getter(mthis) native "HTMLInputElement_defaultChecked_Getter";
 
-  static $defaultChecked_Setter(mthis, value) native "HTMLInputElement_defaultChecked_Setter";
+  static defaultChecked_Setter_boolean(mthis, value) native "HTMLInputElement_defaultChecked_Setter";
 
-  static $defaultValue_Getter(mthis) native "HTMLInputElement_defaultValue_Getter";
+  static defaultValue_Getter(mthis) native "HTMLInputElement_defaultValue_Getter";
 
-  static $defaultValue_Setter(mthis, value) native "HTMLInputElement_defaultValue_Setter";
+  static defaultValue_Setter_DOMString(mthis, value) native "HTMLInputElement_defaultValue_Setter";
 
-  static $dirName_Getter(mthis) native "HTMLInputElement_dirName_Getter";
+  static dirName_Getter(mthis) native "HTMLInputElement_dirName_Getter";
 
-  static $dirName_Setter(mthis, value) native "HTMLInputElement_dirName_Setter";
+  static dirName_Setter_DOMString(mthis, value) native "HTMLInputElement_dirName_Setter";
 
-  static $disabled_Getter(mthis) native "HTMLInputElement_disabled_Getter";
+  static disabled_Getter(mthis) native "HTMLInputElement_disabled_Getter";
 
-  static $disabled_Setter(mthis, value) native "HTMLInputElement_disabled_Setter";
+  static disabled_Setter_boolean(mthis, value) native "HTMLInputElement_disabled_Setter";
 
-  static $files_Getter(mthis) native "HTMLInputElement_files_Getter";
+  static files_Getter(mthis) native "HTMLInputElement_files_Getter";
 
-  static $files_Setter(mthis, value) native "HTMLInputElement_files_Setter";
+  static files_Setter_FileList(mthis, value) native "HTMLInputElement_files_Setter";
 
-  static $form_Getter(mthis) native "HTMLInputElement_form_Getter";
+  static form_Getter(mthis) native "HTMLInputElement_form_Getter";
 
-  static $formAction_Getter(mthis) native "HTMLInputElement_formAction_Getter";
+  static formAction_Getter(mthis) native "HTMLInputElement_formAction_Getter";
 
-  static $formAction_Setter(mthis, value) native "HTMLInputElement_formAction_Setter";
+  static formAction_Setter_DOMString(mthis, value) native "HTMLInputElement_formAction_Setter";
 
-  static $formEnctype_Getter(mthis) native "HTMLInputElement_formEnctype_Getter";
+  static formEnctype_Getter(mthis) native "HTMLInputElement_formEnctype_Getter";
 
-  static $formEnctype_Setter(mthis, value) native "HTMLInputElement_formEnctype_Setter";
+  static formEnctype_Setter_DOMString(mthis, value) native "HTMLInputElement_formEnctype_Setter";
 
-  static $formMethod_Getter(mthis) native "HTMLInputElement_formMethod_Getter";
+  static formMethod_Getter(mthis) native "HTMLInputElement_formMethod_Getter";
 
-  static $formMethod_Setter(mthis, value) native "HTMLInputElement_formMethod_Setter";
+  static formMethod_Setter_DOMString(mthis, value) native "HTMLInputElement_formMethod_Setter";
 
-  static $formNoValidate_Getter(mthis) native "HTMLInputElement_formNoValidate_Getter";
+  static formNoValidate_Getter(mthis) native "HTMLInputElement_formNoValidate_Getter";
 
-  static $formNoValidate_Setter(mthis, value) native "HTMLInputElement_formNoValidate_Setter";
+  static formNoValidate_Setter_boolean(mthis, value) native "HTMLInputElement_formNoValidate_Setter";
 
-  static $formTarget_Getter(mthis) native "HTMLInputElement_formTarget_Getter";
+  static formTarget_Getter(mthis) native "HTMLInputElement_formTarget_Getter";
 
-  static $formTarget_Setter(mthis, value) native "HTMLInputElement_formTarget_Setter";
+  static formTarget_Setter_DOMString(mthis, value) native "HTMLInputElement_formTarget_Setter";
 
-  static $height_Getter(mthis) native "HTMLInputElement_height_Getter";
+  static height_Getter(mthis) native "HTMLInputElement_height_Getter";
 
-  static $height_Setter(mthis, value) native "HTMLInputElement_height_Setter";
+  static height_Setter_ul(mthis, value) native "HTMLInputElement_height_Setter";
 
-  static $incremental_Getter(mthis) native "HTMLInputElement_incremental_Getter";
+  static incremental_Getter(mthis) native "HTMLInputElement_incremental_Getter";
 
-  static $incremental_Setter(mthis, value) native "HTMLInputElement_incremental_Setter";
+  static incremental_Setter_boolean(mthis, value) native "HTMLInputElement_incremental_Setter";
 
-  static $indeterminate_Getter(mthis) native "HTMLInputElement_indeterminate_Getter";
+  static indeterminate_Getter(mthis) native "HTMLInputElement_indeterminate_Getter";
 
-  static $indeterminate_Setter(mthis, value) native "HTMLInputElement_indeterminate_Setter";
+  static indeterminate_Setter_boolean(mthis, value) native "HTMLInputElement_indeterminate_Setter";
 
-  static $inputMode_Getter(mthis) native "HTMLInputElement_inputMode_Getter";
+  static inputMode_Getter(mthis) native "HTMLInputElement_inputMode_Getter";
 
-  static $inputMode_Setter(mthis, value) native "HTMLInputElement_inputMode_Setter";
+  static inputMode_Setter_DOMString(mthis, value) native "HTMLInputElement_inputMode_Setter";
 
-  static $labels_Getter(mthis) native "HTMLInputElement_labels_Getter";
+  static labels_Getter(mthis) native "HTMLInputElement_labels_Getter";
 
-  static $list_Getter(mthis) native "HTMLInputElement_list_Getter";
+  static list_Getter(mthis) native "HTMLInputElement_list_Getter";
 
-  static $max_Getter(mthis) native "HTMLInputElement_max_Getter";
+  static max_Getter(mthis) native "HTMLInputElement_max_Getter";
 
-  static $max_Setter(mthis, value) native "HTMLInputElement_max_Setter";
+  static max_Setter_DOMString(mthis, value) native "HTMLInputElement_max_Setter";
 
-  static $maxLength_Getter(mthis) native "HTMLInputElement_maxLength_Getter";
+  static maxLength_Getter(mthis) native "HTMLInputElement_maxLength_Getter";
 
-  static $maxLength_Setter(mthis, value) native "HTMLInputElement_maxLength_Setter";
+  static maxLength_Setter_long(mthis, value) native "HTMLInputElement_maxLength_Setter";
 
-  static $min_Getter(mthis) native "HTMLInputElement_min_Getter";
+  static min_Getter(mthis) native "HTMLInputElement_min_Getter";
 
-  static $min_Setter(mthis, value) native "HTMLInputElement_min_Setter";
+  static min_Setter_DOMString(mthis, value) native "HTMLInputElement_min_Setter";
 
-  static $multiple_Getter(mthis) native "HTMLInputElement_multiple_Getter";
+  static multiple_Getter(mthis) native "HTMLInputElement_multiple_Getter";
 
-  static $multiple_Setter(mthis, value) native "HTMLInputElement_multiple_Setter";
+  static multiple_Setter_boolean(mthis, value) native "HTMLInputElement_multiple_Setter";
 
-  static $name_Getter(mthis) native "HTMLInputElement_name_Getter";
+  static name_Getter(mthis) native "HTMLInputElement_name_Getter";
 
-  static $name_Setter(mthis, value) native "HTMLInputElement_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "HTMLInputElement_name_Setter";
 
-  static $pattern_Getter(mthis) native "HTMLInputElement_pattern_Getter";
+  static pattern_Getter(mthis) native "HTMLInputElement_pattern_Getter";
 
-  static $pattern_Setter(mthis, value) native "HTMLInputElement_pattern_Setter";
+  static pattern_Setter_DOMString(mthis, value) native "HTMLInputElement_pattern_Setter";
 
-  static $placeholder_Getter(mthis) native "HTMLInputElement_placeholder_Getter";
+  static placeholder_Getter(mthis) native "HTMLInputElement_placeholder_Getter";
 
-  static $placeholder_Setter(mthis, value) native "HTMLInputElement_placeholder_Setter";
+  static placeholder_Setter_DOMString(mthis, value) native "HTMLInputElement_placeholder_Setter";
 
-  static $readOnly_Getter(mthis) native "HTMLInputElement_readOnly_Getter";
+  static readOnly_Getter(mthis) native "HTMLInputElement_readOnly_Getter";
 
-  static $readOnly_Setter(mthis, value) native "HTMLInputElement_readOnly_Setter";
+  static readOnly_Setter_boolean(mthis, value) native "HTMLInputElement_readOnly_Setter";
 
-  static $required_Getter(mthis) native "HTMLInputElement_required_Getter";
+  static required_Getter(mthis) native "HTMLInputElement_required_Getter";
 
-  static $required_Setter(mthis, value) native "HTMLInputElement_required_Setter";
+  static required_Setter_boolean(mthis, value) native "HTMLInputElement_required_Setter";
 
-  static $selectionDirection_Getter(mthis) native "HTMLInputElement_selectionDirection_Getter";
+  static selectionDirection_Getter(mthis) native "HTMLInputElement_selectionDirection_Getter";
 
-  static $selectionDirection_Setter(mthis, value) native "HTMLInputElement_selectionDirection_Setter";
+  static selectionDirection_Setter_DOMString(mthis, value) native "HTMLInputElement_selectionDirection_Setter";
 
-  static $selectionEnd_Getter(mthis) native "HTMLInputElement_selectionEnd_Getter";
+  static selectionEnd_Getter(mthis) native "HTMLInputElement_selectionEnd_Getter";
 
-  static $selectionEnd_Setter(mthis, value) native "HTMLInputElement_selectionEnd_Setter";
+  static selectionEnd_Setter_long(mthis, value) native "HTMLInputElement_selectionEnd_Setter";
 
-  static $selectionStart_Getter(mthis) native "HTMLInputElement_selectionStart_Getter";
+  static selectionStart_Getter(mthis) native "HTMLInputElement_selectionStart_Getter";
 
-  static $selectionStart_Setter(mthis, value) native "HTMLInputElement_selectionStart_Setter";
+  static selectionStart_Setter_long(mthis, value) native "HTMLInputElement_selectionStart_Setter";
 
-  static $size_Getter(mthis) native "HTMLInputElement_size_Getter";
+  static size_Getter(mthis) native "HTMLInputElement_size_Getter";
 
-  static $size_Setter(mthis, value) native "HTMLInputElement_size_Setter";
+  static size_Setter_ul(mthis, value) native "HTMLInputElement_size_Setter";
 
-  static $src_Getter(mthis) native "HTMLInputElement_src_Getter";
+  static src_Getter(mthis) native "HTMLInputElement_src_Getter";
 
-  static $src_Setter(mthis, value) native "HTMLInputElement_src_Setter";
+  static src_Setter_DOMString(mthis, value) native "HTMLInputElement_src_Setter";
 
-  static $step_Getter(mthis) native "HTMLInputElement_step_Getter";
+  static step_Getter(mthis) native "HTMLInputElement_step_Getter";
 
-  static $step_Setter(mthis, value) native "HTMLInputElement_step_Setter";
+  static step_Setter_DOMString(mthis, value) native "HTMLInputElement_step_Setter";
 
-  static $type_Getter(mthis) native "HTMLInputElement_type_Getter";
+  static type_Getter(mthis) native "HTMLInputElement_type_Getter";
 
-  static $type_Setter(mthis, value) native "HTMLInputElement_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "HTMLInputElement_type_Setter";
 
-  static $validationMessage_Getter(mthis) native "HTMLInputElement_validationMessage_Getter";
+  static validationMessage_Getter(mthis) native "HTMLInputElement_validationMessage_Getter";
 
-  static $validity_Getter(mthis) native "HTMLInputElement_validity_Getter";
+  static validity_Getter(mthis) native "HTMLInputElement_validity_Getter";
 
-  static $value_Getter(mthis) native "HTMLInputElement_value_Getter";
+  static value_Getter(mthis) native "HTMLInputElement_value_Getter";
 
-  static $value_Setter(mthis, value) native "HTMLInputElement_value_Setter";
+  static value_Setter_DOMString(mthis, value) native "HTMLInputElement_value_Setter";
 
-  static $valueAsDate_Getter(mthis) native "HTMLInputElement_valueAsDate_Getter";
+  static valueAsDate_Getter(mthis) native "HTMLInputElement_valueAsDate_Getter";
 
-  static $valueAsDate_Setter(mthis, value) native "HTMLInputElement_valueAsDate_Setter";
+  static valueAsDate_Setter_Date(mthis, value) native "HTMLInputElement_valueAsDate_Setter";
 
-  static $valueAsNumber_Getter(mthis) native "HTMLInputElement_valueAsNumber_Getter";
+  static valueAsNumber_Getter(mthis) native "HTMLInputElement_valueAsNumber_Getter";
 
-  static $valueAsNumber_Setter(mthis, value) native "HTMLInputElement_valueAsNumber_Setter";
+  static valueAsNumber_Setter_double(mthis, value) native "HTMLInputElement_valueAsNumber_Setter";
 
-  static $webkitEntries_Getter(mthis) native "HTMLInputElement_webkitEntries_Getter";
+  static webkitEntries_Getter(mthis) native "HTMLInputElement_webkitEntries_Getter";
 
-  static $webkitdirectory_Getter(mthis) native "HTMLInputElement_webkitdirectory_Getter";
+  static webkitdirectory_Getter(mthis) native "HTMLInputElement_webkitdirectory_Getter";
 
-  static $webkitdirectory_Setter(mthis, value) native "HTMLInputElement_webkitdirectory_Setter";
+  static webkitdirectory_Setter_boolean(mthis, value) native "HTMLInputElement_webkitdirectory_Setter";
 
-  static $width_Getter(mthis) native "HTMLInputElement_width_Getter";
+  static width_Getter(mthis) native "HTMLInputElement_width_Getter";
 
-  static $width_Setter(mthis, value) native "HTMLInputElement_width_Setter";
+  static width_Setter_ul(mthis, value) native "HTMLInputElement_width_Setter";
 
-  static $willValidate_Getter(mthis) native "HTMLInputElement_willValidate_Getter";
+  static willValidate_Getter(mthis) native "HTMLInputElement_willValidate_Getter";
 
-  static $checkValidity_Callback(mthis) native "HTMLInputElement_checkValidity_Callback_RESOLVER_STRING_0_";
+  static checkValidity_Callback(mthis) native "HTMLInputElement_checkValidity_Callback";
 
-  static $select_Callback(mthis) native "HTMLInputElement_select_Callback_RESOLVER_STRING_0_";
+  static select_Callback(mthis) native "HTMLInputElement_select_Callback";
 
-  static $setCustomValidity_Callback(mthis, error) native "HTMLInputElement_setCustomValidity_Callback_RESOLVER_STRING_1_DOMString";
+  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLInputElement_setCustomValidity_Callback_DOMString";
 
-  static $_setRangeText_1_Callback(mthis, replacement) native "HTMLInputElement_setRangeText_Callback_RESOLVER_STRING_1_DOMString";
+  static setRangeText_Callback_DOMString(mthis, replacement) native "HTMLInputElement_setRangeText_Callback_DOMString";
 
-  static $_setRangeText_2_Callback(mthis, replacement, start, end, selectionMode) native "HTMLInputElement_setRangeText_Callback_RESOLVER_STRING_4_DOMString_unsigned long_unsigned long_DOMString";
+  static setRangeText_Callback_DOMString_ul_ul_DOMString(mthis, replacement, start, end, selectionMode) native "HTMLInputElement_setRangeText_Callback_DOMString_unsigned long_unsigned long_DOMString";
 
-  static $_setSelectionRange_1_Callback(mthis, start, end, direction) native "HTMLInputElement_setSelectionRange_Callback_RESOLVER_STRING_3_long_long_DOMString";
+  static setSelectionRange_Callback_long_long_DOMString(mthis, start, end, direction) native "HTMLInputElement_setSelectionRange_Callback_long_long_DOMString";
 
-  static $_setSelectionRange_2_Callback(mthis, start, end) native "HTMLInputElement_setSelectionRange_Callback_RESOLVER_STRING_2_long_long";
+  static setSelectionRange_Callback_long_long(mthis, start, end) native "HTMLInputElement_setSelectionRange_Callback_long_long";
 
-  static $_stepDown_1_Callback(mthis, n) native "HTMLInputElement_stepDown_Callback_RESOLVER_STRING_1_long";
+  static stepDown_Callback_long(mthis, n) native "HTMLInputElement_stepDown_Callback_long";
 
-  static $_stepDown_2_Callback(mthis) native "HTMLInputElement_stepDown_Callback_RESOLVER_STRING_0_";
+  static stepDown_Callback(mthis) native "HTMLInputElement_stepDown_Callback";
 
-  static $_stepUp_1_Callback(mthis, n) native "HTMLInputElement_stepUp_Callback_RESOLVER_STRING_1_long";
+  static stepUp_Callback_long(mthis, n) native "HTMLInputElement_stepUp_Callback_long";
 
-  static $_stepUp_2_Callback(mthis) native "HTMLInputElement_stepUp_Callback_RESOLVER_STRING_0_";
+  static stepUp_Callback(mthis) native "HTMLInputElement_stepUp_Callback";
 }
 
 class BlinkHTMLKeygenElement {
-  static $autofocus_Getter(mthis) native "HTMLKeygenElement_autofocus_Getter";
+  static autofocus_Getter(mthis) native "HTMLKeygenElement_autofocus_Getter";
 
-  static $autofocus_Setter(mthis, value) native "HTMLKeygenElement_autofocus_Setter";
+  static autofocus_Setter_boolean(mthis, value) native "HTMLKeygenElement_autofocus_Setter";
 
-  static $challenge_Getter(mthis) native "HTMLKeygenElement_challenge_Getter";
+  static challenge_Getter(mthis) native "HTMLKeygenElement_challenge_Getter";
 
-  static $challenge_Setter(mthis, value) native "HTMLKeygenElement_challenge_Setter";
+  static challenge_Setter_DOMString(mthis, value) native "HTMLKeygenElement_challenge_Setter";
 
-  static $disabled_Getter(mthis) native "HTMLKeygenElement_disabled_Getter";
+  static disabled_Getter(mthis) native "HTMLKeygenElement_disabled_Getter";
 
-  static $disabled_Setter(mthis, value) native "HTMLKeygenElement_disabled_Setter";
+  static disabled_Setter_boolean(mthis, value) native "HTMLKeygenElement_disabled_Setter";
 
-  static $form_Getter(mthis) native "HTMLKeygenElement_form_Getter";
+  static form_Getter(mthis) native "HTMLKeygenElement_form_Getter";
 
-  static $keytype_Getter(mthis) native "HTMLKeygenElement_keytype_Getter";
+  static keytype_Getter(mthis) native "HTMLKeygenElement_keytype_Getter";
 
-  static $keytype_Setter(mthis, value) native "HTMLKeygenElement_keytype_Setter";
+  static keytype_Setter_DOMString(mthis, value) native "HTMLKeygenElement_keytype_Setter";
 
-  static $labels_Getter(mthis) native "HTMLKeygenElement_labels_Getter";
+  static labels_Getter(mthis) native "HTMLKeygenElement_labels_Getter";
 
-  static $name_Getter(mthis) native "HTMLKeygenElement_name_Getter";
+  static name_Getter(mthis) native "HTMLKeygenElement_name_Getter";
 
-  static $name_Setter(mthis, value) native "HTMLKeygenElement_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "HTMLKeygenElement_name_Setter";
 
-  static $type_Getter(mthis) native "HTMLKeygenElement_type_Getter";
+  static type_Getter(mthis) native "HTMLKeygenElement_type_Getter";
 
-  static $validationMessage_Getter(mthis) native "HTMLKeygenElement_validationMessage_Getter";
+  static validationMessage_Getter(mthis) native "HTMLKeygenElement_validationMessage_Getter";
 
-  static $validity_Getter(mthis) native "HTMLKeygenElement_validity_Getter";
+  static validity_Getter(mthis) native "HTMLKeygenElement_validity_Getter";
 
-  static $willValidate_Getter(mthis) native "HTMLKeygenElement_willValidate_Getter";
+  static willValidate_Getter(mthis) native "HTMLKeygenElement_willValidate_Getter";
 
-  static $checkValidity_Callback(mthis) native "HTMLKeygenElement_checkValidity_Callback_RESOLVER_STRING_0_";
+  static checkValidity_Callback(mthis) native "HTMLKeygenElement_checkValidity_Callback";
 
-  static $setCustomValidity_Callback(mthis, error) native "HTMLKeygenElement_setCustomValidity_Callback_RESOLVER_STRING_1_DOMString";
+  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLKeygenElement_setCustomValidity_Callback_DOMString";
 }
 
 class BlinkHTMLLIElement {
-  static $value_Getter(mthis) native "HTMLLIElement_value_Getter";
+  static value_Getter(mthis) native "HTMLLIElement_value_Getter";
 
-  static $value_Setter(mthis, value) native "HTMLLIElement_value_Setter";
+  static value_Setter_long(mthis, value) native "HTMLLIElement_value_Setter";
 }
 
 class BlinkHTMLLabelElement {
-  static $control_Getter(mthis) native "HTMLLabelElement_control_Getter";
+  static control_Getter(mthis) native "HTMLLabelElement_control_Getter";
 
-  static $form_Getter(mthis) native "HTMLLabelElement_form_Getter";
+  static form_Getter(mthis) native "HTMLLabelElement_form_Getter";
 
-  static $htmlFor_Getter(mthis) native "HTMLLabelElement_htmlFor_Getter";
+  static htmlFor_Getter(mthis) native "HTMLLabelElement_htmlFor_Getter";
 
-  static $htmlFor_Setter(mthis, value) native "HTMLLabelElement_htmlFor_Setter";
+  static htmlFor_Setter_DOMString(mthis, value) native "HTMLLabelElement_htmlFor_Setter";
 }
 
 class BlinkHTMLLegendElement {
-  static $form_Getter(mthis) native "HTMLLegendElement_form_Getter";
+  static form_Getter(mthis) native "HTMLLegendElement_form_Getter";
 }
 
 class BlinkHTMLLinkElement {
-  static $crossOrigin_Getter(mthis) native "HTMLLinkElement_crossOrigin_Getter";
+  static crossOrigin_Getter(mthis) native "HTMLLinkElement_crossOrigin_Getter";
 
-  static $crossOrigin_Setter(mthis, value) native "HTMLLinkElement_crossOrigin_Setter";
+  static crossOrigin_Setter_DOMString(mthis, value) native "HTMLLinkElement_crossOrigin_Setter";
 
-  static $disabled_Getter(mthis) native "HTMLLinkElement_disabled_Getter";
+  static disabled_Getter(mthis) native "HTMLLinkElement_disabled_Getter";
 
-  static $disabled_Setter(mthis, value) native "HTMLLinkElement_disabled_Setter";
+  static disabled_Setter_boolean(mthis, value) native "HTMLLinkElement_disabled_Setter";
 
-  static $href_Getter(mthis) native "HTMLLinkElement_href_Getter";
+  static href_Getter(mthis) native "HTMLLinkElement_href_Getter";
 
-  static $href_Setter(mthis, value) native "HTMLLinkElement_href_Setter";
+  static href_Setter_DOMString(mthis, value) native "HTMLLinkElement_href_Setter";
 
-  static $hreflang_Getter(mthis) native "HTMLLinkElement_hreflang_Getter";
+  static hreflang_Getter(mthis) native "HTMLLinkElement_hreflang_Getter";
 
-  static $hreflang_Setter(mthis, value) native "HTMLLinkElement_hreflang_Setter";
+  static hreflang_Setter_DOMString(mthis, value) native "HTMLLinkElement_hreflang_Setter";
 
-  static $import_Getter(mthis) native "HTMLLinkElement_import_Getter";
+  static import_Getter(mthis) native "HTMLLinkElement_import_Getter";
 
-  static $media_Getter(mthis) native "HTMLLinkElement_media_Getter";
+  static media_Getter(mthis) native "HTMLLinkElement_media_Getter";
 
-  static $media_Setter(mthis, value) native "HTMLLinkElement_media_Setter";
+  static media_Setter_DOMString(mthis, value) native "HTMLLinkElement_media_Setter";
 
-  static $rel_Getter(mthis) native "HTMLLinkElement_rel_Getter";
+  static rel_Getter(mthis) native "HTMLLinkElement_rel_Getter";
 
-  static $rel_Setter(mthis, value) native "HTMLLinkElement_rel_Setter";
+  static rel_Setter_DOMString(mthis, value) native "HTMLLinkElement_rel_Setter";
 
-  static $sheet_Getter(mthis) native "HTMLLinkElement_sheet_Getter";
+  static sheet_Getter(mthis) native "HTMLLinkElement_sheet_Getter";
 
-  static $sizes_Getter(mthis) native "HTMLLinkElement_sizes_Getter";
+  static sizes_Getter(mthis) native "HTMLLinkElement_sizes_Getter";
 
-  static $type_Getter(mthis) native "HTMLLinkElement_type_Getter";
+  static type_Getter(mthis) native "HTMLLinkElement_type_Getter";
 
-  static $type_Setter(mthis, value) native "HTMLLinkElement_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "HTMLLinkElement_type_Setter";
 }
 
 class BlinkHTMLMapElement {
-  static $areas_Getter(mthis) native "HTMLMapElement_areas_Getter";
+  static areas_Getter(mthis) native "HTMLMapElement_areas_Getter";
 
-  static $name_Getter(mthis) native "HTMLMapElement_name_Getter";
+  static name_Getter(mthis) native "HTMLMapElement_name_Getter";
 
-  static $name_Setter(mthis, value) native "HTMLMapElement_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "HTMLMapElement_name_Setter";
 }
 
 class BlinkHTMLMarqueeElement {}
@@ -2853,561 +2835,561 @@
 class BlinkHTMLMenuElement {}
 
 class BlinkHTMLMetaElement {
-  static $content_Getter(mthis) native "HTMLMetaElement_content_Getter";
+  static content_Getter(mthis) native "HTMLMetaElement_content_Getter";
 
-  static $content_Setter(mthis, value) native "HTMLMetaElement_content_Setter";
+  static content_Setter_DOMString(mthis, value) native "HTMLMetaElement_content_Setter";
 
-  static $httpEquiv_Getter(mthis) native "HTMLMetaElement_httpEquiv_Getter";
+  static httpEquiv_Getter(mthis) native "HTMLMetaElement_httpEquiv_Getter";
 
-  static $httpEquiv_Setter(mthis, value) native "HTMLMetaElement_httpEquiv_Setter";
+  static httpEquiv_Setter_DOMString(mthis, value) native "HTMLMetaElement_httpEquiv_Setter";
 
-  static $name_Getter(mthis) native "HTMLMetaElement_name_Getter";
+  static name_Getter(mthis) native "HTMLMetaElement_name_Getter";
 
-  static $name_Setter(mthis, value) native "HTMLMetaElement_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "HTMLMetaElement_name_Setter";
 }
 
 class BlinkHTMLMeterElement {
-  static $high_Getter(mthis) native "HTMLMeterElement_high_Getter";
+  static high_Getter(mthis) native "HTMLMeterElement_high_Getter";
 
-  static $high_Setter(mthis, value) native "HTMLMeterElement_high_Setter";
+  static high_Setter_double(mthis, value) native "HTMLMeterElement_high_Setter";
 
-  static $labels_Getter(mthis) native "HTMLMeterElement_labels_Getter";
+  static labels_Getter(mthis) native "HTMLMeterElement_labels_Getter";
 
-  static $low_Getter(mthis) native "HTMLMeterElement_low_Getter";
+  static low_Getter(mthis) native "HTMLMeterElement_low_Getter";
 
-  static $low_Setter(mthis, value) native "HTMLMeterElement_low_Setter";
+  static low_Setter_double(mthis, value) native "HTMLMeterElement_low_Setter";
 
-  static $max_Getter(mthis) native "HTMLMeterElement_max_Getter";
+  static max_Getter(mthis) native "HTMLMeterElement_max_Getter";
 
-  static $max_Setter(mthis, value) native "HTMLMeterElement_max_Setter";
+  static max_Setter_double(mthis, value) native "HTMLMeterElement_max_Setter";
 
-  static $min_Getter(mthis) native "HTMLMeterElement_min_Getter";
+  static min_Getter(mthis) native "HTMLMeterElement_min_Getter";
 
-  static $min_Setter(mthis, value) native "HTMLMeterElement_min_Setter";
+  static min_Setter_double(mthis, value) native "HTMLMeterElement_min_Setter";
 
-  static $optimum_Getter(mthis) native "HTMLMeterElement_optimum_Getter";
+  static optimum_Getter(mthis) native "HTMLMeterElement_optimum_Getter";
 
-  static $optimum_Setter(mthis, value) native "HTMLMeterElement_optimum_Setter";
+  static optimum_Setter_double(mthis, value) native "HTMLMeterElement_optimum_Setter";
 
-  static $value_Getter(mthis) native "HTMLMeterElement_value_Getter";
+  static value_Getter(mthis) native "HTMLMeterElement_value_Getter";
 
-  static $value_Setter(mthis, value) native "HTMLMeterElement_value_Setter";
+  static value_Setter_double(mthis, value) native "HTMLMeterElement_value_Setter";
 }
 
 class BlinkHTMLModElement {
-  static $cite_Getter(mthis) native "HTMLModElement_cite_Getter";
+  static cite_Getter(mthis) native "HTMLModElement_cite_Getter";
 
-  static $cite_Setter(mthis, value) native "HTMLModElement_cite_Setter";
+  static cite_Setter_DOMString(mthis, value) native "HTMLModElement_cite_Setter";
 
-  static $dateTime_Getter(mthis) native "HTMLModElement_dateTime_Getter";
+  static dateTime_Getter(mthis) native "HTMLModElement_dateTime_Getter";
 
-  static $dateTime_Setter(mthis, value) native "HTMLModElement_dateTime_Setter";
+  static dateTime_Setter_DOMString(mthis, value) native "HTMLModElement_dateTime_Setter";
 }
 
 class BlinkHTMLOListElement {
-  static $reversed_Getter(mthis) native "HTMLOListElement_reversed_Getter";
+  static reversed_Getter(mthis) native "HTMLOListElement_reversed_Getter";
 
-  static $reversed_Setter(mthis, value) native "HTMLOListElement_reversed_Setter";
+  static reversed_Setter_boolean(mthis, value) native "HTMLOListElement_reversed_Setter";
 
-  static $start_Getter(mthis) native "HTMLOListElement_start_Getter";
+  static start_Getter(mthis) native "HTMLOListElement_start_Getter";
 
-  static $start_Setter(mthis, value) native "HTMLOListElement_start_Setter";
+  static start_Setter_long(mthis, value) native "HTMLOListElement_start_Setter";
 
-  static $type_Getter(mthis) native "HTMLOListElement_type_Getter";
+  static type_Getter(mthis) native "HTMLOListElement_type_Getter";
 
-  static $type_Setter(mthis, value) native "HTMLOListElement_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "HTMLOListElement_type_Setter";
 }
 
 class BlinkHTMLObjectElement {
-  static $data_Getter(mthis) native "HTMLObjectElement_data_Getter";
+  static data_Getter(mthis) native "HTMLObjectElement_data_Getter";
 
-  static $data_Setter(mthis, value) native "HTMLObjectElement_data_Setter";
+  static data_Setter_DOMString(mthis, value) native "HTMLObjectElement_data_Setter";
 
-  static $form_Getter(mthis) native "HTMLObjectElement_form_Getter";
+  static form_Getter(mthis) native "HTMLObjectElement_form_Getter";
 
-  static $height_Getter(mthis) native "HTMLObjectElement_height_Getter";
+  static height_Getter(mthis) native "HTMLObjectElement_height_Getter";
 
-  static $height_Setter(mthis, value) native "HTMLObjectElement_height_Setter";
+  static height_Setter_DOMString(mthis, value) native "HTMLObjectElement_height_Setter";
 
-  static $name_Getter(mthis) native "HTMLObjectElement_name_Getter";
+  static name_Getter(mthis) native "HTMLObjectElement_name_Getter";
 
-  static $name_Setter(mthis, value) native "HTMLObjectElement_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "HTMLObjectElement_name_Setter";
 
-  static $type_Getter(mthis) native "HTMLObjectElement_type_Getter";
+  static type_Getter(mthis) native "HTMLObjectElement_type_Getter";
 
-  static $type_Setter(mthis, value) native "HTMLObjectElement_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "HTMLObjectElement_type_Setter";
 
-  static $useMap_Getter(mthis) native "HTMLObjectElement_useMap_Getter";
+  static useMap_Getter(mthis) native "HTMLObjectElement_useMap_Getter";
 
-  static $useMap_Setter(mthis, value) native "HTMLObjectElement_useMap_Setter";
+  static useMap_Setter_DOMString(mthis, value) native "HTMLObjectElement_useMap_Setter";
 
-  static $validationMessage_Getter(mthis) native "HTMLObjectElement_validationMessage_Getter";
+  static validationMessage_Getter(mthis) native "HTMLObjectElement_validationMessage_Getter";
 
-  static $validity_Getter(mthis) native "HTMLObjectElement_validity_Getter";
+  static validity_Getter(mthis) native "HTMLObjectElement_validity_Getter";
 
-  static $width_Getter(mthis) native "HTMLObjectElement_width_Getter";
+  static width_Getter(mthis) native "HTMLObjectElement_width_Getter";
 
-  static $width_Setter(mthis, value) native "HTMLObjectElement_width_Setter";
+  static width_Setter_DOMString(mthis, value) native "HTMLObjectElement_width_Setter";
 
-  static $willValidate_Getter(mthis) native "HTMLObjectElement_willValidate_Getter";
+  static willValidate_Getter(mthis) native "HTMLObjectElement_willValidate_Getter";
 
-  static $__getter___Callback(mthis, index_OR_name) native "HTMLObjectElement___getter___Callback";
+  static $__getter___Callback_ul(mthis, index_OR_name) native "HTMLObjectElement___getter___Callback";
 
-  static $__setter___Callback(mthis, index_OR_name, value) native "HTMLObjectElement___setter___Callback";
+  static $__setter___Callback_ul_Node(mthis, index_OR_name, value) native "HTMLObjectElement___setter___Callback";
 
-  static $checkValidity_Callback(mthis) native "HTMLObjectElement_checkValidity_Callback_RESOLVER_STRING_0_";
+  static checkValidity_Callback(mthis) native "HTMLObjectElement_checkValidity_Callback";
 
-  static $setCustomValidity_Callback(mthis, error) native "HTMLObjectElement_setCustomValidity_Callback_RESOLVER_STRING_1_DOMString";
+  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLObjectElement_setCustomValidity_Callback_DOMString";
 }
 
 class BlinkHTMLOptGroupElement {
-  static $disabled_Getter(mthis) native "HTMLOptGroupElement_disabled_Getter";
+  static disabled_Getter(mthis) native "HTMLOptGroupElement_disabled_Getter";
 
-  static $disabled_Setter(mthis, value) native "HTMLOptGroupElement_disabled_Setter";
+  static disabled_Setter_boolean(mthis, value) native "HTMLOptGroupElement_disabled_Setter";
 
-  static $label_Getter(mthis) native "HTMLOptGroupElement_label_Getter";
+  static label_Getter(mthis) native "HTMLOptGroupElement_label_Getter";
 
-  static $label_Setter(mthis, value) native "HTMLOptGroupElement_label_Setter";
+  static label_Setter_DOMString(mthis, value) native "HTMLOptGroupElement_label_Setter";
 }
 
 class BlinkHTMLOptionElement {
-  static $_create_1constructorCallback(data, value, defaultSelected, selected) native "HTMLOptionElement_constructorCallback_RESOLVER_STRING_4_DOMString_DOMString_boolean_boolean";
+  static constructorCallback_DOMString_DOMString_boolean_boolean(data, value, defaultSelected, selected) native "HTMLOptionElement_constructorCallback_DOMString_DOMString_boolean_boolean";
 
-  static $defaultSelected_Getter(mthis) native "HTMLOptionElement_defaultSelected_Getter";
+  static defaultSelected_Getter(mthis) native "HTMLOptionElement_defaultSelected_Getter";
 
-  static $defaultSelected_Setter(mthis, value) native "HTMLOptionElement_defaultSelected_Setter";
+  static defaultSelected_Setter_boolean(mthis, value) native "HTMLOptionElement_defaultSelected_Setter";
 
-  static $disabled_Getter(mthis) native "HTMLOptionElement_disabled_Getter";
+  static disabled_Getter(mthis) native "HTMLOptionElement_disabled_Getter";
 
-  static $disabled_Setter(mthis, value) native "HTMLOptionElement_disabled_Setter";
+  static disabled_Setter_boolean(mthis, value) native "HTMLOptionElement_disabled_Setter";
 
-  static $form_Getter(mthis) native "HTMLOptionElement_form_Getter";
+  static form_Getter(mthis) native "HTMLOptionElement_form_Getter";
 
-  static $index_Getter(mthis) native "HTMLOptionElement_index_Getter";
+  static index_Getter(mthis) native "HTMLOptionElement_index_Getter";
 
-  static $label_Getter(mthis) native "HTMLOptionElement_label_Getter";
+  static label_Getter(mthis) native "HTMLOptionElement_label_Getter";
 
-  static $label_Setter(mthis, value) native "HTMLOptionElement_label_Setter";
+  static label_Setter_DOMString(mthis, value) native "HTMLOptionElement_label_Setter";
 
-  static $selected_Getter(mthis) native "HTMLOptionElement_selected_Getter";
+  static selected_Getter(mthis) native "HTMLOptionElement_selected_Getter";
 
-  static $selected_Setter(mthis, value) native "HTMLOptionElement_selected_Setter";
+  static selected_Setter_boolean(mthis, value) native "HTMLOptionElement_selected_Setter";
 
-  static $value_Getter(mthis) native "HTMLOptionElement_value_Getter";
+  static value_Getter(mthis) native "HTMLOptionElement_value_Getter";
 
-  static $value_Setter(mthis, value) native "HTMLOptionElement_value_Setter";
+  static value_Setter_DOMString(mthis, value) native "HTMLOptionElement_value_Setter";
 }
 
 class BlinkHTMLOptionsCollection {}
 
 class BlinkHTMLOutputElement {
-  static $defaultValue_Getter(mthis) native "HTMLOutputElement_defaultValue_Getter";
+  static defaultValue_Getter(mthis) native "HTMLOutputElement_defaultValue_Getter";
 
-  static $defaultValue_Setter(mthis, value) native "HTMLOutputElement_defaultValue_Setter";
+  static defaultValue_Setter_DOMString(mthis, value) native "HTMLOutputElement_defaultValue_Setter";
 
-  static $form_Getter(mthis) native "HTMLOutputElement_form_Getter";
+  static form_Getter(mthis) native "HTMLOutputElement_form_Getter";
 
-  static $htmlFor_Getter(mthis) native "HTMLOutputElement_htmlFor_Getter";
+  static htmlFor_Getter(mthis) native "HTMLOutputElement_htmlFor_Getter";
 
-  static $labels_Getter(mthis) native "HTMLOutputElement_labels_Getter";
+  static labels_Getter(mthis) native "HTMLOutputElement_labels_Getter";
 
-  static $name_Getter(mthis) native "HTMLOutputElement_name_Getter";
+  static name_Getter(mthis) native "HTMLOutputElement_name_Getter";
 
-  static $name_Setter(mthis, value) native "HTMLOutputElement_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "HTMLOutputElement_name_Setter";
 
-  static $type_Getter(mthis) native "HTMLOutputElement_type_Getter";
+  static type_Getter(mthis) native "HTMLOutputElement_type_Getter";
 
-  static $validationMessage_Getter(mthis) native "HTMLOutputElement_validationMessage_Getter";
+  static validationMessage_Getter(mthis) native "HTMLOutputElement_validationMessage_Getter";
 
-  static $validity_Getter(mthis) native "HTMLOutputElement_validity_Getter";
+  static validity_Getter(mthis) native "HTMLOutputElement_validity_Getter";
 
-  static $value_Getter(mthis) native "HTMLOutputElement_value_Getter";
+  static value_Getter(mthis) native "HTMLOutputElement_value_Getter";
 
-  static $value_Setter(mthis, value) native "HTMLOutputElement_value_Setter";
+  static value_Setter_DOMString(mthis, value) native "HTMLOutputElement_value_Setter";
 
-  static $willValidate_Getter(mthis) native "HTMLOutputElement_willValidate_Getter";
+  static willValidate_Getter(mthis) native "HTMLOutputElement_willValidate_Getter";
 
-  static $checkValidity_Callback(mthis) native "HTMLOutputElement_checkValidity_Callback_RESOLVER_STRING_0_";
+  static checkValidity_Callback(mthis) native "HTMLOutputElement_checkValidity_Callback";
 
-  static $setCustomValidity_Callback(mthis, error) native "HTMLOutputElement_setCustomValidity_Callback_RESOLVER_STRING_1_DOMString";
+  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLOutputElement_setCustomValidity_Callback_DOMString";
 }
 
 class BlinkHTMLParagraphElement {}
 
 class BlinkHTMLParamElement {
-  static $name_Getter(mthis) native "HTMLParamElement_name_Getter";
+  static name_Getter(mthis) native "HTMLParamElement_name_Getter";
 
-  static $name_Setter(mthis, value) native "HTMLParamElement_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "HTMLParamElement_name_Setter";
 
-  static $value_Getter(mthis) native "HTMLParamElement_value_Getter";
+  static value_Getter(mthis) native "HTMLParamElement_value_Getter";
 
-  static $value_Setter(mthis, value) native "HTMLParamElement_value_Setter";
+  static value_Setter_DOMString(mthis, value) native "HTMLParamElement_value_Setter";
 }
 
 class BlinkHTMLPreElement {}
 
 class BlinkHTMLProgressElement {
-  static $labels_Getter(mthis) native "HTMLProgressElement_labels_Getter";
+  static labels_Getter(mthis) native "HTMLProgressElement_labels_Getter";
 
-  static $max_Getter(mthis) native "HTMLProgressElement_max_Getter";
+  static max_Getter(mthis) native "HTMLProgressElement_max_Getter";
 
-  static $max_Setter(mthis, value) native "HTMLProgressElement_max_Setter";
+  static max_Setter_double(mthis, value) native "HTMLProgressElement_max_Setter";
 
-  static $position_Getter(mthis) native "HTMLProgressElement_position_Getter";
+  static position_Getter(mthis) native "HTMLProgressElement_position_Getter";
 
-  static $value_Getter(mthis) native "HTMLProgressElement_value_Getter";
+  static value_Getter(mthis) native "HTMLProgressElement_value_Getter";
 
-  static $value_Setter(mthis, value) native "HTMLProgressElement_value_Setter";
+  static value_Setter_double(mthis, value) native "HTMLProgressElement_value_Setter";
 }
 
 class BlinkHTMLQuoteElement {
-  static $cite_Getter(mthis) native "HTMLQuoteElement_cite_Getter";
+  static cite_Getter(mthis) native "HTMLQuoteElement_cite_Getter";
 
-  static $cite_Setter(mthis, value) native "HTMLQuoteElement_cite_Setter";
+  static cite_Setter_DOMString(mthis, value) native "HTMLQuoteElement_cite_Setter";
 }
 
 class BlinkHTMLScriptElement {
-  static $async_Getter(mthis) native "HTMLScriptElement_async_Getter";
+  static async_Getter(mthis) native "HTMLScriptElement_async_Getter";
 
-  static $async_Setter(mthis, value) native "HTMLScriptElement_async_Setter";
+  static async_Setter_boolean(mthis, value) native "HTMLScriptElement_async_Setter";
 
-  static $charset_Getter(mthis) native "HTMLScriptElement_charset_Getter";
+  static charset_Getter(mthis) native "HTMLScriptElement_charset_Getter";
 
-  static $charset_Setter(mthis, value) native "HTMLScriptElement_charset_Setter";
+  static charset_Setter_DOMString(mthis, value) native "HTMLScriptElement_charset_Setter";
 
-  static $crossOrigin_Getter(mthis) native "HTMLScriptElement_crossOrigin_Getter";
+  static crossOrigin_Getter(mthis) native "HTMLScriptElement_crossOrigin_Getter";
 
-  static $crossOrigin_Setter(mthis, value) native "HTMLScriptElement_crossOrigin_Setter";
+  static crossOrigin_Setter_DOMString(mthis, value) native "HTMLScriptElement_crossOrigin_Setter";
 
-  static $defer_Getter(mthis) native "HTMLScriptElement_defer_Getter";
+  static defer_Getter(mthis) native "HTMLScriptElement_defer_Getter";
 
-  static $defer_Setter(mthis, value) native "HTMLScriptElement_defer_Setter";
+  static defer_Setter_boolean(mthis, value) native "HTMLScriptElement_defer_Setter";
 
-  static $nonce_Getter(mthis) native "HTMLScriptElement_nonce_Getter";
+  static nonce_Getter(mthis) native "HTMLScriptElement_nonce_Getter";
 
-  static $nonce_Setter(mthis, value) native "HTMLScriptElement_nonce_Setter";
+  static nonce_Setter_DOMString(mthis, value) native "HTMLScriptElement_nonce_Setter";
 
-  static $src_Getter(mthis) native "HTMLScriptElement_src_Getter";
+  static src_Getter(mthis) native "HTMLScriptElement_src_Getter";
 
-  static $src_Setter(mthis, value) native "HTMLScriptElement_src_Setter";
+  static src_Setter_DOMString(mthis, value) native "HTMLScriptElement_src_Setter";
 
-  static $type_Getter(mthis) native "HTMLScriptElement_type_Getter";
+  static type_Getter(mthis) native "HTMLScriptElement_type_Getter";
 
-  static $type_Setter(mthis, value) native "HTMLScriptElement_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "HTMLScriptElement_type_Setter";
 }
 
 class BlinkHTMLSelectElement {
-  static $autofocus_Getter(mthis) native "HTMLSelectElement_autofocus_Getter";
+  static autofocus_Getter(mthis) native "HTMLSelectElement_autofocus_Getter";
 
-  static $autofocus_Setter(mthis, value) native "HTMLSelectElement_autofocus_Setter";
+  static autofocus_Setter_boolean(mthis, value) native "HTMLSelectElement_autofocus_Setter";
 
-  static $disabled_Getter(mthis) native "HTMLSelectElement_disabled_Getter";
+  static disabled_Getter(mthis) native "HTMLSelectElement_disabled_Getter";
 
-  static $disabled_Setter(mthis, value) native "HTMLSelectElement_disabled_Setter";
+  static disabled_Setter_boolean(mthis, value) native "HTMLSelectElement_disabled_Setter";
 
-  static $form_Getter(mthis) native "HTMLSelectElement_form_Getter";
+  static form_Getter(mthis) native "HTMLSelectElement_form_Getter";
 
-  static $labels_Getter(mthis) native "HTMLSelectElement_labels_Getter";
+  static labels_Getter(mthis) native "HTMLSelectElement_labels_Getter";
 
-  static $length_Getter(mthis) native "HTMLSelectElement_length_Getter";
+  static length_Getter(mthis) native "HTMLSelectElement_length_Getter";
 
-  static $length_Setter(mthis, value) native "HTMLSelectElement_length_Setter";
+  static length_Setter_ul(mthis, value) native "HTMLSelectElement_length_Setter";
 
-  static $multiple_Getter(mthis) native "HTMLSelectElement_multiple_Getter";
+  static multiple_Getter(mthis) native "HTMLSelectElement_multiple_Getter";
 
-  static $multiple_Setter(mthis, value) native "HTMLSelectElement_multiple_Setter";
+  static multiple_Setter_boolean(mthis, value) native "HTMLSelectElement_multiple_Setter";
 
-  static $name_Getter(mthis) native "HTMLSelectElement_name_Getter";
+  static name_Getter(mthis) native "HTMLSelectElement_name_Getter";
 
-  static $name_Setter(mthis, value) native "HTMLSelectElement_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "HTMLSelectElement_name_Setter";
 
-  static $required_Getter(mthis) native "HTMLSelectElement_required_Getter";
+  static required_Getter(mthis) native "HTMLSelectElement_required_Getter";
 
-  static $required_Setter(mthis, value) native "HTMLSelectElement_required_Setter";
+  static required_Setter_boolean(mthis, value) native "HTMLSelectElement_required_Setter";
 
-  static $selectedIndex_Getter(mthis) native "HTMLSelectElement_selectedIndex_Getter";
+  static selectedIndex_Getter(mthis) native "HTMLSelectElement_selectedIndex_Getter";
 
-  static $selectedIndex_Setter(mthis, value) native "HTMLSelectElement_selectedIndex_Setter";
+  static selectedIndex_Setter_long(mthis, value) native "HTMLSelectElement_selectedIndex_Setter";
 
-  static $size_Getter(mthis) native "HTMLSelectElement_size_Getter";
+  static size_Getter(mthis) native "HTMLSelectElement_size_Getter";
 
-  static $size_Setter(mthis, value) native "HTMLSelectElement_size_Setter";
+  static size_Setter_long(mthis, value) native "HTMLSelectElement_size_Setter";
 
-  static $type_Getter(mthis) native "HTMLSelectElement_type_Getter";
+  static type_Getter(mthis) native "HTMLSelectElement_type_Getter";
 
-  static $validationMessage_Getter(mthis) native "HTMLSelectElement_validationMessage_Getter";
+  static validationMessage_Getter(mthis) native "HTMLSelectElement_validationMessage_Getter";
 
-  static $validity_Getter(mthis) native "HTMLSelectElement_validity_Getter";
+  static validity_Getter(mthis) native "HTMLSelectElement_validity_Getter";
 
-  static $value_Getter(mthis) native "HTMLSelectElement_value_Getter";
+  static value_Getter(mthis) native "HTMLSelectElement_value_Getter";
 
-  static $value_Setter(mthis, value) native "HTMLSelectElement_value_Setter";
+  static value_Setter_DOMString(mthis, value) native "HTMLSelectElement_value_Setter";
 
-  static $willValidate_Getter(mthis) native "HTMLSelectElement_willValidate_Getter";
+  static willValidate_Getter(mthis) native "HTMLSelectElement_willValidate_Getter";
 
-  static $__setter___Callback(mthis, index, value) native "HTMLSelectElement___setter___Callback_RESOLVER_STRING_2_unsigned long_HTMLOptionElement";
+  static $__setter___Callback_ul_HTMLOptionElement(mthis, index, value) native "HTMLSelectElement___setter___Callback_unsigned long_HTMLOptionElement";
 
-  static $checkValidity_Callback(mthis) native "HTMLSelectElement_checkValidity_Callback_RESOLVER_STRING_0_";
+  static checkValidity_Callback(mthis) native "HTMLSelectElement_checkValidity_Callback";
 
-  static $item_Callback(mthis, index) native "HTMLSelectElement_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "HTMLSelectElement_item_Callback_unsigned long";
 
-  static $namedItem_Callback(mthis, name) native "HTMLSelectElement_namedItem_Callback_RESOLVER_STRING_1_DOMString";
+  static namedItem_Callback_DOMString(mthis, name) native "HTMLSelectElement_namedItem_Callback_DOMString";
 
-  static $setCustomValidity_Callback(mthis, error) native "HTMLSelectElement_setCustomValidity_Callback_RESOLVER_STRING_1_DOMString";
+  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLSelectElement_setCustomValidity_Callback_DOMString";
 }
 
 class BlinkHTMLShadowElement {
-  static $resetStyleInheritance_Getter(mthis) native "HTMLShadowElement_resetStyleInheritance_Getter";
+  static resetStyleInheritance_Getter(mthis) native "HTMLShadowElement_resetStyleInheritance_Getter";
 
-  static $resetStyleInheritance_Setter(mthis, value) native "HTMLShadowElement_resetStyleInheritance_Setter";
+  static resetStyleInheritance_Setter_boolean(mthis, value) native "HTMLShadowElement_resetStyleInheritance_Setter";
 
-  static $getDistributedNodes_Callback(mthis) native "HTMLShadowElement_getDistributedNodes_Callback_RESOLVER_STRING_0_";
+  static getDistributedNodes_Callback(mthis) native "HTMLShadowElement_getDistributedNodes_Callback";
 }
 
 class BlinkHTMLSourceElement {
-  static $media_Getter(mthis) native "HTMLSourceElement_media_Getter";
+  static media_Getter(mthis) native "HTMLSourceElement_media_Getter";
 
-  static $media_Setter(mthis, value) native "HTMLSourceElement_media_Setter";
+  static media_Setter_DOMString(mthis, value) native "HTMLSourceElement_media_Setter";
 
-  static $src_Getter(mthis) native "HTMLSourceElement_src_Getter";
+  static src_Getter(mthis) native "HTMLSourceElement_src_Getter";
 
-  static $src_Setter(mthis, value) native "HTMLSourceElement_src_Setter";
+  static src_Setter_DOMString(mthis, value) native "HTMLSourceElement_src_Setter";
 
-  static $type_Getter(mthis) native "HTMLSourceElement_type_Getter";
+  static type_Getter(mthis) native "HTMLSourceElement_type_Getter";
 
-  static $type_Setter(mthis, value) native "HTMLSourceElement_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "HTMLSourceElement_type_Setter";
 }
 
 class BlinkHTMLSpanElement {}
 
 class BlinkHTMLStyleElement {
-  static $disabled_Getter(mthis) native "HTMLStyleElement_disabled_Getter";
+  static disabled_Getter(mthis) native "HTMLStyleElement_disabled_Getter";
 
-  static $disabled_Setter(mthis, value) native "HTMLStyleElement_disabled_Setter";
+  static disabled_Setter_boolean(mthis, value) native "HTMLStyleElement_disabled_Setter";
 
-  static $media_Getter(mthis) native "HTMLStyleElement_media_Getter";
+  static media_Getter(mthis) native "HTMLStyleElement_media_Getter";
 
-  static $media_Setter(mthis, value) native "HTMLStyleElement_media_Setter";
+  static media_Setter_DOMString(mthis, value) native "HTMLStyleElement_media_Setter";
 
-  static $scoped_Getter(mthis) native "HTMLStyleElement_scoped_Getter";
+  static scoped_Getter(mthis) native "HTMLStyleElement_scoped_Getter";
 
-  static $scoped_Setter(mthis, value) native "HTMLStyleElement_scoped_Setter";
+  static scoped_Setter_boolean(mthis, value) native "HTMLStyleElement_scoped_Setter";
 
-  static $sheet_Getter(mthis) native "HTMLStyleElement_sheet_Getter";
+  static sheet_Getter(mthis) native "HTMLStyleElement_sheet_Getter";
 
-  static $type_Getter(mthis) native "HTMLStyleElement_type_Getter";
+  static type_Getter(mthis) native "HTMLStyleElement_type_Getter";
 
-  static $type_Setter(mthis, value) native "HTMLStyleElement_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "HTMLStyleElement_type_Setter";
 }
 
 class BlinkHTMLTableCaptionElement {}
 
 class BlinkHTMLTableCellElement {
-  static $cellIndex_Getter(mthis) native "HTMLTableCellElement_cellIndex_Getter";
+  static cellIndex_Getter(mthis) native "HTMLTableCellElement_cellIndex_Getter";
 
-  static $colSpan_Getter(mthis) native "HTMLTableCellElement_colSpan_Getter";
+  static colSpan_Getter(mthis) native "HTMLTableCellElement_colSpan_Getter";
 
-  static $colSpan_Setter(mthis, value) native "HTMLTableCellElement_colSpan_Setter";
+  static colSpan_Setter_long(mthis, value) native "HTMLTableCellElement_colSpan_Setter";
 
-  static $headers_Getter(mthis) native "HTMLTableCellElement_headers_Getter";
+  static headers_Getter(mthis) native "HTMLTableCellElement_headers_Getter";
 
-  static $headers_Setter(mthis, value) native "HTMLTableCellElement_headers_Setter";
+  static headers_Setter_DOMString(mthis, value) native "HTMLTableCellElement_headers_Setter";
 
-  static $rowSpan_Getter(mthis) native "HTMLTableCellElement_rowSpan_Getter";
+  static rowSpan_Getter(mthis) native "HTMLTableCellElement_rowSpan_Getter";
 
-  static $rowSpan_Setter(mthis, value) native "HTMLTableCellElement_rowSpan_Setter";
+  static rowSpan_Setter_long(mthis, value) native "HTMLTableCellElement_rowSpan_Setter";
 }
 
 class BlinkHTMLTableColElement {
-  static $span_Getter(mthis) native "HTMLTableColElement_span_Getter";
+  static span_Getter(mthis) native "HTMLTableColElement_span_Getter";
 
-  static $span_Setter(mthis, value) native "HTMLTableColElement_span_Setter";
+  static span_Setter_long(mthis, value) native "HTMLTableColElement_span_Setter";
 }
 
 class BlinkHTMLTableElement {
-  static $caption_Getter(mthis) native "HTMLTableElement_caption_Getter";
+  static caption_Getter(mthis) native "HTMLTableElement_caption_Getter";
 
-  static $caption_Setter(mthis, value) native "HTMLTableElement_caption_Setter";
+  static caption_Setter_HTMLTableCaptionElement(mthis, value) native "HTMLTableElement_caption_Setter";
 
-  static $rows_Getter(mthis) native "HTMLTableElement_rows_Getter";
+  static rows_Getter(mthis) native "HTMLTableElement_rows_Getter";
 
-  static $tBodies_Getter(mthis) native "HTMLTableElement_tBodies_Getter";
+  static tBodies_Getter(mthis) native "HTMLTableElement_tBodies_Getter";
 
-  static $tFoot_Getter(mthis) native "HTMLTableElement_tFoot_Getter";
+  static tFoot_Getter(mthis) native "HTMLTableElement_tFoot_Getter";
 
-  static $tFoot_Setter(mthis, value) native "HTMLTableElement_tFoot_Setter";
+  static tFoot_Setter_HTMLTableSectionElement(mthis, value) native "HTMLTableElement_tFoot_Setter";
 
-  static $tHead_Getter(mthis) native "HTMLTableElement_tHead_Getter";
+  static tHead_Getter(mthis) native "HTMLTableElement_tHead_Getter";
 
-  static $tHead_Setter(mthis, value) native "HTMLTableElement_tHead_Setter";
+  static tHead_Setter_HTMLTableSectionElement(mthis, value) native "HTMLTableElement_tHead_Setter";
 
-  static $createCaption_Callback(mthis) native "HTMLTableElement_createCaption_Callback_RESOLVER_STRING_0_";
+  static createCaption_Callback(mthis) native "HTMLTableElement_createCaption_Callback";
 
-  static $createTBody_Callback(mthis) native "HTMLTableElement_createTBody_Callback_RESOLVER_STRING_0_";
+  static createTBody_Callback(mthis) native "HTMLTableElement_createTBody_Callback";
 
-  static $createTFoot_Callback(mthis) native "HTMLTableElement_createTFoot_Callback_RESOLVER_STRING_0_";
+  static createTFoot_Callback(mthis) native "HTMLTableElement_createTFoot_Callback";
 
-  static $createTHead_Callback(mthis) native "HTMLTableElement_createTHead_Callback_RESOLVER_STRING_0_";
+  static createTHead_Callback(mthis) native "HTMLTableElement_createTHead_Callback";
 
-  static $deleteCaption_Callback(mthis) native "HTMLTableElement_deleteCaption_Callback_RESOLVER_STRING_0_";
+  static deleteCaption_Callback(mthis) native "HTMLTableElement_deleteCaption_Callback";
 
-  static $deleteRow_Callback(mthis, index) native "HTMLTableElement_deleteRow_Callback_RESOLVER_STRING_1_long";
+  static deleteRow_Callback_long(mthis, index) native "HTMLTableElement_deleteRow_Callback_long";
 
-  static $deleteTFoot_Callback(mthis) native "HTMLTableElement_deleteTFoot_Callback_RESOLVER_STRING_0_";
+  static deleteTFoot_Callback(mthis) native "HTMLTableElement_deleteTFoot_Callback";
 
-  static $deleteTHead_Callback(mthis) native "HTMLTableElement_deleteTHead_Callback_RESOLVER_STRING_0_";
+  static deleteTHead_Callback(mthis) native "HTMLTableElement_deleteTHead_Callback";
 
-  static $insertRow_Callback(mthis, index) native "HTMLTableElement_insertRow_Callback_RESOLVER_STRING_1_long";
+  static insertRow_Callback_long(mthis, index) native "HTMLTableElement_insertRow_Callback_long";
 }
 
 class BlinkHTMLTableRowElement {
-  static $cells_Getter(mthis) native "HTMLTableRowElement_cells_Getter";
+  static cells_Getter(mthis) native "HTMLTableRowElement_cells_Getter";
 
-  static $rowIndex_Getter(mthis) native "HTMLTableRowElement_rowIndex_Getter";
+  static rowIndex_Getter(mthis) native "HTMLTableRowElement_rowIndex_Getter";
 
-  static $sectionRowIndex_Getter(mthis) native "HTMLTableRowElement_sectionRowIndex_Getter";
+  static sectionRowIndex_Getter(mthis) native "HTMLTableRowElement_sectionRowIndex_Getter";
 
-  static $deleteCell_Callback(mthis, index) native "HTMLTableRowElement_deleteCell_Callback_RESOLVER_STRING_1_long";
+  static deleteCell_Callback_long(mthis, index) native "HTMLTableRowElement_deleteCell_Callback_long";
 
-  static $insertCell_Callback(mthis, index) native "HTMLTableRowElement_insertCell_Callback_RESOLVER_STRING_1_long";
+  static insertCell_Callback_long(mthis, index) native "HTMLTableRowElement_insertCell_Callback_long";
 }
 
 class BlinkHTMLTableSectionElement {
-  static $rows_Getter(mthis) native "HTMLTableSectionElement_rows_Getter";
+  static rows_Getter(mthis) native "HTMLTableSectionElement_rows_Getter";
 
-  static $deleteRow_Callback(mthis, index) native "HTMLTableSectionElement_deleteRow_Callback_RESOLVER_STRING_1_long";
+  static deleteRow_Callback_long(mthis, index) native "HTMLTableSectionElement_deleteRow_Callback_long";
 
-  static $insertRow_Callback(mthis, index) native "HTMLTableSectionElement_insertRow_Callback_RESOLVER_STRING_1_long";
+  static insertRow_Callback_long(mthis, index) native "HTMLTableSectionElement_insertRow_Callback_long";
 }
 
 class BlinkHTMLTemplateElement {
-  static $content_Getter(mthis) native "HTMLTemplateElement_content_Getter";
+  static content_Getter(mthis) native "HTMLTemplateElement_content_Getter";
 }
 
 class BlinkHTMLTextAreaElement {
-  static $autofocus_Getter(mthis) native "HTMLTextAreaElement_autofocus_Getter";
+  static autofocus_Getter(mthis) native "HTMLTextAreaElement_autofocus_Getter";
 
-  static $autofocus_Setter(mthis, value) native "HTMLTextAreaElement_autofocus_Setter";
+  static autofocus_Setter_boolean(mthis, value) native "HTMLTextAreaElement_autofocus_Setter";
 
-  static $cols_Getter(mthis) native "HTMLTextAreaElement_cols_Getter";
+  static cols_Getter(mthis) native "HTMLTextAreaElement_cols_Getter";
 
-  static $cols_Setter(mthis, value) native "HTMLTextAreaElement_cols_Setter";
+  static cols_Setter_long(mthis, value) native "HTMLTextAreaElement_cols_Setter";
 
-  static $defaultValue_Getter(mthis) native "HTMLTextAreaElement_defaultValue_Getter";
+  static defaultValue_Getter(mthis) native "HTMLTextAreaElement_defaultValue_Getter";
 
-  static $defaultValue_Setter(mthis, value) native "HTMLTextAreaElement_defaultValue_Setter";
+  static defaultValue_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_defaultValue_Setter";
 
-  static $dirName_Getter(mthis) native "HTMLTextAreaElement_dirName_Getter";
+  static dirName_Getter(mthis) native "HTMLTextAreaElement_dirName_Getter";
 
-  static $dirName_Setter(mthis, value) native "HTMLTextAreaElement_dirName_Setter";
+  static dirName_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_dirName_Setter";
 
-  static $disabled_Getter(mthis) native "HTMLTextAreaElement_disabled_Getter";
+  static disabled_Getter(mthis) native "HTMLTextAreaElement_disabled_Getter";
 
-  static $disabled_Setter(mthis, value) native "HTMLTextAreaElement_disabled_Setter";
+  static disabled_Setter_boolean(mthis, value) native "HTMLTextAreaElement_disabled_Setter";
 
-  static $form_Getter(mthis) native "HTMLTextAreaElement_form_Getter";
+  static form_Getter(mthis) native "HTMLTextAreaElement_form_Getter";
 
-  static $inputMode_Getter(mthis) native "HTMLTextAreaElement_inputMode_Getter";
+  static inputMode_Getter(mthis) native "HTMLTextAreaElement_inputMode_Getter";
 
-  static $inputMode_Setter(mthis, value) native "HTMLTextAreaElement_inputMode_Setter";
+  static inputMode_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_inputMode_Setter";
 
-  static $labels_Getter(mthis) native "HTMLTextAreaElement_labels_Getter";
+  static labels_Getter(mthis) native "HTMLTextAreaElement_labels_Getter";
 
-  static $maxLength_Getter(mthis) native "HTMLTextAreaElement_maxLength_Getter";
+  static maxLength_Getter(mthis) native "HTMLTextAreaElement_maxLength_Getter";
 
-  static $maxLength_Setter(mthis, value) native "HTMLTextAreaElement_maxLength_Setter";
+  static maxLength_Setter_long(mthis, value) native "HTMLTextAreaElement_maxLength_Setter";
 
-  static $name_Getter(mthis) native "HTMLTextAreaElement_name_Getter";
+  static name_Getter(mthis) native "HTMLTextAreaElement_name_Getter";
 
-  static $name_Setter(mthis, value) native "HTMLTextAreaElement_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_name_Setter";
 
-  static $placeholder_Getter(mthis) native "HTMLTextAreaElement_placeholder_Getter";
+  static placeholder_Getter(mthis) native "HTMLTextAreaElement_placeholder_Getter";
 
-  static $placeholder_Setter(mthis, value) native "HTMLTextAreaElement_placeholder_Setter";
+  static placeholder_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_placeholder_Setter";
 
-  static $readOnly_Getter(mthis) native "HTMLTextAreaElement_readOnly_Getter";
+  static readOnly_Getter(mthis) native "HTMLTextAreaElement_readOnly_Getter";
 
-  static $readOnly_Setter(mthis, value) native "HTMLTextAreaElement_readOnly_Setter";
+  static readOnly_Setter_boolean(mthis, value) native "HTMLTextAreaElement_readOnly_Setter";
 
-  static $required_Getter(mthis) native "HTMLTextAreaElement_required_Getter";
+  static required_Getter(mthis) native "HTMLTextAreaElement_required_Getter";
 
-  static $required_Setter(mthis, value) native "HTMLTextAreaElement_required_Setter";
+  static required_Setter_boolean(mthis, value) native "HTMLTextAreaElement_required_Setter";
 
-  static $rows_Getter(mthis) native "HTMLTextAreaElement_rows_Getter";
+  static rows_Getter(mthis) native "HTMLTextAreaElement_rows_Getter";
 
-  static $rows_Setter(mthis, value) native "HTMLTextAreaElement_rows_Setter";
+  static rows_Setter_long(mthis, value) native "HTMLTextAreaElement_rows_Setter";
 
-  static $selectionDirection_Getter(mthis) native "HTMLTextAreaElement_selectionDirection_Getter";
+  static selectionDirection_Getter(mthis) native "HTMLTextAreaElement_selectionDirection_Getter";
 
-  static $selectionDirection_Setter(mthis, value) native "HTMLTextAreaElement_selectionDirection_Setter";
+  static selectionDirection_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_selectionDirection_Setter";
 
-  static $selectionEnd_Getter(mthis) native "HTMLTextAreaElement_selectionEnd_Getter";
+  static selectionEnd_Getter(mthis) native "HTMLTextAreaElement_selectionEnd_Getter";
 
-  static $selectionEnd_Setter(mthis, value) native "HTMLTextAreaElement_selectionEnd_Setter";
+  static selectionEnd_Setter_long(mthis, value) native "HTMLTextAreaElement_selectionEnd_Setter";
 
-  static $selectionStart_Getter(mthis) native "HTMLTextAreaElement_selectionStart_Getter";
+  static selectionStart_Getter(mthis) native "HTMLTextAreaElement_selectionStart_Getter";
 
-  static $selectionStart_Setter(mthis, value) native "HTMLTextAreaElement_selectionStart_Setter";
+  static selectionStart_Setter_long(mthis, value) native "HTMLTextAreaElement_selectionStart_Setter";
 
-  static $textLength_Getter(mthis) native "HTMLTextAreaElement_textLength_Getter";
+  static textLength_Getter(mthis) native "HTMLTextAreaElement_textLength_Getter";
 
-  static $type_Getter(mthis) native "HTMLTextAreaElement_type_Getter";
+  static type_Getter(mthis) native "HTMLTextAreaElement_type_Getter";
 
-  static $validationMessage_Getter(mthis) native "HTMLTextAreaElement_validationMessage_Getter";
+  static validationMessage_Getter(mthis) native "HTMLTextAreaElement_validationMessage_Getter";
 
-  static $validity_Getter(mthis) native "HTMLTextAreaElement_validity_Getter";
+  static validity_Getter(mthis) native "HTMLTextAreaElement_validity_Getter";
 
-  static $value_Getter(mthis) native "HTMLTextAreaElement_value_Getter";
+  static value_Getter(mthis) native "HTMLTextAreaElement_value_Getter";
 
-  static $value_Setter(mthis, value) native "HTMLTextAreaElement_value_Setter";
+  static value_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_value_Setter";
 
-  static $willValidate_Getter(mthis) native "HTMLTextAreaElement_willValidate_Getter";
+  static willValidate_Getter(mthis) native "HTMLTextAreaElement_willValidate_Getter";
 
-  static $wrap_Getter(mthis) native "HTMLTextAreaElement_wrap_Getter";
+  static wrap_Getter(mthis) native "HTMLTextAreaElement_wrap_Getter";
 
-  static $wrap_Setter(mthis, value) native "HTMLTextAreaElement_wrap_Setter";
+  static wrap_Setter_DOMString(mthis, value) native "HTMLTextAreaElement_wrap_Setter";
 
-  static $checkValidity_Callback(mthis) native "HTMLTextAreaElement_checkValidity_Callback_RESOLVER_STRING_0_";
+  static checkValidity_Callback(mthis) native "HTMLTextAreaElement_checkValidity_Callback";
 
-  static $select_Callback(mthis) native "HTMLTextAreaElement_select_Callback_RESOLVER_STRING_0_";
+  static select_Callback(mthis) native "HTMLTextAreaElement_select_Callback";
 
-  static $setCustomValidity_Callback(mthis, error) native "HTMLTextAreaElement_setCustomValidity_Callback_RESOLVER_STRING_1_DOMString";
+  static setCustomValidity_Callback_DOMString(mthis, error) native "HTMLTextAreaElement_setCustomValidity_Callback_DOMString";
 
-  static $_setRangeText_1_Callback(mthis, replacement) native "HTMLTextAreaElement_setRangeText_Callback_RESOLVER_STRING_1_DOMString";
+  static setRangeText_Callback_DOMString(mthis, replacement) native "HTMLTextAreaElement_setRangeText_Callback_DOMString";
 
-  static $_setRangeText_2_Callback(mthis, replacement, start, end, selectionMode) native "HTMLTextAreaElement_setRangeText_Callback_RESOLVER_STRING_4_DOMString_unsigned long_unsigned long_DOMString";
+  static setRangeText_Callback_DOMString_ul_ul_DOMString(mthis, replacement, start, end, selectionMode) native "HTMLTextAreaElement_setRangeText_Callback_DOMString_unsigned long_unsigned long_DOMString";
 
-  static $_setSelectionRange_1_Callback(mthis, start, end, direction) native "HTMLTextAreaElement_setSelectionRange_Callback_RESOLVER_STRING_3_long_long_DOMString";
+  static setSelectionRange_Callback_long_long_DOMString(mthis, start, end, direction) native "HTMLTextAreaElement_setSelectionRange_Callback_long_long_DOMString";
 
-  static $_setSelectionRange_2_Callback(mthis, start, end) native "HTMLTextAreaElement_setSelectionRange_Callback_RESOLVER_STRING_2_long_long";
+  static setSelectionRange_Callback_long_long(mthis, start, end) native "HTMLTextAreaElement_setSelectionRange_Callback_long_long";
 }
 
 class BlinkHTMLTitleElement {}
 
 class BlinkHTMLTrackElement {
-  static $default_Getter(mthis) native "HTMLTrackElement_default_Getter";
+  static default_Getter(mthis) native "HTMLTrackElement_default_Getter";
 
-  static $default_Setter(mthis, value) native "HTMLTrackElement_default_Setter";
+  static default_Setter_boolean(mthis, value) native "HTMLTrackElement_default_Setter";
 
-  static $kind_Getter(mthis) native "HTMLTrackElement_kind_Getter";
+  static kind_Getter(mthis) native "HTMLTrackElement_kind_Getter";
 
-  static $kind_Setter(mthis, value) native "HTMLTrackElement_kind_Setter";
+  static kind_Setter_DOMString(mthis, value) native "HTMLTrackElement_kind_Setter";
 
-  static $label_Getter(mthis) native "HTMLTrackElement_label_Getter";
+  static label_Getter(mthis) native "HTMLTrackElement_label_Getter";
 
-  static $label_Setter(mthis, value) native "HTMLTrackElement_label_Setter";
+  static label_Setter_DOMString(mthis, value) native "HTMLTrackElement_label_Setter";
 
-  static $readyState_Getter(mthis) native "HTMLTrackElement_readyState_Getter";
+  static readyState_Getter(mthis) native "HTMLTrackElement_readyState_Getter";
 
-  static $src_Getter(mthis) native "HTMLTrackElement_src_Getter";
+  static src_Getter(mthis) native "HTMLTrackElement_src_Getter";
 
-  static $src_Setter(mthis, value) native "HTMLTrackElement_src_Setter";
+  static src_Setter_DOMString(mthis, value) native "HTMLTrackElement_src_Setter";
 
-  static $srclang_Getter(mthis) native "HTMLTrackElement_srclang_Getter";
+  static srclang_Getter(mthis) native "HTMLTrackElement_srclang_Getter";
 
-  static $srclang_Setter(mthis, value) native "HTMLTrackElement_srclang_Setter";
+  static srclang_Setter_DOMString(mthis, value) native "HTMLTrackElement_srclang_Setter";
 
-  static $track_Getter(mthis) native "HTMLTrackElement_track_Getter";
+  static track_Getter(mthis) native "HTMLTrackElement_track_Getter";
 }
 
 class BlinkHTMLUListElement {}
@@ -3415,887 +3397,875 @@
 class BlinkHTMLUnknownElement {}
 
 class BlinkHTMLVideoElement {
-  static $height_Getter(mthis) native "HTMLVideoElement_height_Getter";
+  static height_Getter(mthis) native "HTMLVideoElement_height_Getter";
 
-  static $height_Setter(mthis, value) native "HTMLVideoElement_height_Setter";
+  static height_Setter_ul(mthis, value) native "HTMLVideoElement_height_Setter";
 
-  static $poster_Getter(mthis) native "HTMLVideoElement_poster_Getter";
+  static poster_Getter(mthis) native "HTMLVideoElement_poster_Getter";
 
-  static $poster_Setter(mthis, value) native "HTMLVideoElement_poster_Setter";
+  static poster_Setter_DOMString(mthis, value) native "HTMLVideoElement_poster_Setter";
 
-  static $videoHeight_Getter(mthis) native "HTMLVideoElement_videoHeight_Getter";
+  static videoHeight_Getter(mthis) native "HTMLVideoElement_videoHeight_Getter";
 
-  static $videoWidth_Getter(mthis) native "HTMLVideoElement_videoWidth_Getter";
+  static videoWidth_Getter(mthis) native "HTMLVideoElement_videoWidth_Getter";
 
-  static $webkitDecodedFrameCount_Getter(mthis) native "HTMLVideoElement_webkitDecodedFrameCount_Getter";
+  static webkitDecodedFrameCount_Getter(mthis) native "HTMLVideoElement_webkitDecodedFrameCount_Getter";
 
-  static $webkitDroppedFrameCount_Getter(mthis) native "HTMLVideoElement_webkitDroppedFrameCount_Getter";
+  static webkitDroppedFrameCount_Getter(mthis) native "HTMLVideoElement_webkitDroppedFrameCount_Getter";
 
-  static $width_Getter(mthis) native "HTMLVideoElement_width_Getter";
+  static width_Getter(mthis) native "HTMLVideoElement_width_Getter";
 
-  static $width_Setter(mthis, value) native "HTMLVideoElement_width_Setter";
+  static width_Setter_ul(mthis, value) native "HTMLVideoElement_width_Setter";
 
-  static $getVideoPlaybackQuality_Callback(mthis) native "HTMLVideoElement_getVideoPlaybackQuality_Callback_RESOLVER_STRING_0_";
+  static getVideoPlaybackQuality_Callback(mthis) native "HTMLVideoElement_getVideoPlaybackQuality_Callback";
 
-  static $webkitEnterFullscreen_Callback(mthis) native "HTMLVideoElement_webkitEnterFullscreen_Callback_RESOLVER_STRING_0_";
+  static webkitEnterFullscreen_Callback(mthis) native "HTMLVideoElement_webkitEnterFullscreen_Callback";
 
-  static $webkitExitFullscreen_Callback(mthis) native "HTMLVideoElement_webkitExitFullscreen_Callback_RESOLVER_STRING_0_";
+  static webkitExitFullscreen_Callback(mthis) native "HTMLVideoElement_webkitExitFullscreen_Callback";
 }
 
 class BlinkHashChangeEvent {
-  static $newURL_Getter(mthis) native "HashChangeEvent_newURL_Getter";
+  static newURL_Getter(mthis) native "HashChangeEvent_newURL_Getter";
 
-  static $oldURL_Getter(mthis) native "HashChangeEvent_oldURL_Getter";
+  static oldURL_Getter(mthis) native "HashChangeEvent_oldURL_Getter";
 
-  static $initHashChangeEvent_Callback(mthis, type, canBubble, cancelable, oldURL, newURL) native "HashChangeEvent_initHashChangeEvent_Callback_RESOLVER_STRING_5_DOMString_boolean_boolean_DOMString_DOMString";
+  static initHashChangeEvent_Callback_DOMString_boolean_boolean_DOMString_DOMString(mthis, type, canBubble, cancelable, oldURL, newURL) native "HashChangeEvent_initHashChangeEvent_Callback_DOMString_boolean_boolean_DOMString_DOMString";
 }
 
 class BlinkHistory {
-  static $length_Getter(mthis) native "History_length_Getter";
+  static length_Getter(mthis) native "History_length_Getter";
 
-  static $state_Getter(mthis) native "History_state_Getter";
+  static state_Getter(mthis) native "History_state_Getter";
 
-  static $back_Callback(mthis) native "History_back_Callback_RESOLVER_STRING_0_";
+  static back_Callback(mthis) native "History_back_Callback";
 
-  static $forward_Callback(mthis) native "History_forward_Callback_RESOLVER_STRING_0_";
+  static forward_Callback(mthis) native "History_forward_Callback";
 
-  static $go_Callback(mthis, distance) native "History_go_Callback_RESOLVER_STRING_1_long";
+  static go_Callback_long(mthis, distance) native "History_go_Callback_long";
 
-  static $pushState_Callback(mthis, data, title, url) native "History_pushState_Callback";
+  static pushState_Callback_ScriptValue_DOMString_DOMString(mthis, data, title, url) native "History_pushState_Callback";
 
-  static $replaceState_Callback(mthis, data, title, url) native "History_replaceState_Callback";
+  static replaceState_Callback_ScriptValue_DOMString_DOMString(mthis, data, title, url) native "History_replaceState_Callback";
 }
 
 class BlinkIDBCursor {
-  static $direction_Getter(mthis) native "IDBCursor_direction_Getter";
+  static direction_Getter(mthis) native "IDBCursor_direction_Getter";
 
-  static $key_Getter(mthis) native "IDBCursor_key_Getter";
+  static key_Getter(mthis) native "IDBCursor_key_Getter";
 
-  static $primaryKey_Getter(mthis) native "IDBCursor_primaryKey_Getter";
+  static primaryKey_Getter(mthis) native "IDBCursor_primaryKey_Getter";
 
-  static $source_Getter(mthis) native "IDBCursor_source_Getter";
+  static source_Getter(mthis) native "IDBCursor_source_Getter";
 
-  static $advance_Callback(mthis, count) native "IDBCursor_advance_Callback_RESOLVER_STRING_1_unsigned long";
+  static advance_Callback_ul(mthis, count) native "IDBCursor_advance_Callback_unsigned long";
 
-  static $continuePrimaryKey_Callback(mthis, key, primaryKey) native "IDBCursor_continuePrimaryKey_Callback_RESOLVER_STRING_2_ScriptValue_ScriptValue";
+  static continuePrimaryKey_Callback_ScriptValue_ScriptValue(mthis, key, primaryKey) native "IDBCursor_continuePrimaryKey_Callback_ScriptValue_ScriptValue";
 
-  static $delete_Callback(mthis) native "IDBCursor_delete_Callback_RESOLVER_STRING_0_";
+  static delete_Callback(mthis) native "IDBCursor_delete_Callback";
 
-  static $next_Callback(mthis, key) native "IDBCursor_continue_Callback_RESOLVER_STRING_1_ScriptValue";
+  static continue_Callback_ScriptValue(mthis, key) native "IDBCursor_continue_Callback_ScriptValue";
 
-  static $update_Callback(mthis, value) native "IDBCursor_update_Callback_RESOLVER_STRING_1_ScriptValue";
+  static update_Callback_ScriptValue(mthis, value) native "IDBCursor_update_Callback_ScriptValue";
 }
 
 class BlinkIDBCursorWithValue {
-  static $value_Getter(mthis) native "IDBCursorWithValue_value_Getter";
+  static value_Getter(mthis) native "IDBCursorWithValue_value_Getter";
 }
 
 class BlinkIDBDatabase {
-  static $name_Getter(mthis) native "IDBDatabase_name_Getter";
+  static name_Getter(mthis) native "IDBDatabase_name_Getter";
 
-  static $objectStoreNames_Getter(mthis) native "IDBDatabase_objectStoreNames_Getter";
+  static objectStoreNames_Getter(mthis) native "IDBDatabase_objectStoreNames_Getter";
 
-  static $version_Getter(mthis) native "IDBDatabase_version_Getter";
+  static version_Getter(mthis) native "IDBDatabase_version_Getter";
 
-  static $close_Callback(mthis) native "IDBDatabase_close_Callback_RESOLVER_STRING_0_";
+  static close_Callback(mthis) native "IDBDatabase_close_Callback";
 
-  static $createObjectStore_Callback(mthis, name, options) native "IDBDatabase_createObjectStore_Callback_RESOLVER_STRING_2_DOMString_Dictionary";
+  static createObjectStore_Callback_DOMString_Dictionary(mthis, name, options) native "IDBDatabase_createObjectStore_Callback_DOMString_Dictionary";
 
-  static $deleteObjectStore_Callback(mthis, name) native "IDBDatabase_deleteObjectStore_Callback_RESOLVER_STRING_1_DOMString";
+  static deleteObjectStore_Callback_DOMString(mthis, name) native "IDBDatabase_deleteObjectStore_Callback_DOMString";
 
-  static $_transaction_1_Callback(mthis, storeName_OR_storeNames, mode) native "IDBDatabase_transaction_Callback_RESOLVER_STRING_2_DOMStringList_DOMString";
+  static transaction_Callback_DOMStringList_DOMString(mthis, storeName_OR_storeNames, mode) native "IDBDatabase_transaction_Callback_DOMStringList_DOMString";
 
-  static $_transaction_2_Callback(mthis, storeName_OR_storeNames, mode) native "IDBDatabase_transaction_Callback_RESOLVER_STRING_2_sequence<DOMString>_DOMString";
+  static transaction_Callback_SEQ_DOMString_SEQ_DOMString(mthis, storeName_OR_storeNames, mode) native "IDBDatabase_transaction_Callback_sequence<DOMString>_DOMString";
 
-  static $_transaction_3_Callback(mthis, storeName_OR_storeNames, mode) native "IDBDatabase_transaction_Callback_RESOLVER_STRING_2_DOMString_DOMString";
-
-  static $transactionList_Callback(mthis, storeNames, mode) native "IDBDatabase_transaction_Callback_RESOLVER_STRING_2_sequence<DOMString>_DOMString";
-
-  static $transactionStore_Callback(mthis, storeName, mode) native "IDBDatabase_transaction_Callback_RESOLVER_STRING_2_DOMString_DOMString";
-
-  static $transactionStores_Callback(mthis, storeNames, mode) native "IDBDatabase_transaction_Callback_RESOLVER_STRING_2_DOMStringList_DOMString";
+  static transaction_Callback_DOMString_DOMString(mthis, storeName_OR_storeNames, mode) native "IDBDatabase_transaction_Callback_DOMString_DOMString";
 }
 
 class BlinkIDBFactory {
-  static $cmp_Callback(mthis, first, second) native "IDBFactory_cmp_Callback_RESOLVER_STRING_2_ScriptValue_ScriptValue";
+  static cmp_Callback_ScriptValue_ScriptValue(mthis, first, second) native "IDBFactory_cmp_Callback_ScriptValue_ScriptValue";
 
-  static $deleteDatabase_Callback(mthis, name) native "IDBFactory_deleteDatabase_Callback_RESOLVER_STRING_1_DOMString";
+  static deleteDatabase_Callback_DOMString(mthis, name) native "IDBFactory_deleteDatabase_Callback_DOMString";
 
-  static $_open_1_Callback(mthis, name, version) native "IDBFactory_open_Callback_RESOLVER_STRING_2_DOMString_unsigned long long";
+  static open_Callback_DOMString_ull(mthis, name, version) native "IDBFactory_open_Callback_DOMString_unsigned long long";
 
-  static $_open_2_Callback(mthis, name) native "IDBFactory_open_Callback_RESOLVER_STRING_1_DOMString";
+  static open_Callback_DOMString(mthis, name) native "IDBFactory_open_Callback_DOMString";
 
-  static $webkitGetDatabaseNames_Callback(mthis) native "IDBFactory_webkitGetDatabaseNames_Callback_RESOLVER_STRING_0_";
+  static webkitGetDatabaseNames_Callback(mthis) native "IDBFactory_webkitGetDatabaseNames_Callback";
 }
 
 class BlinkIDBIndex {
-  static $keyPath_Getter(mthis) native "IDBIndex_keyPath_Getter";
+  static keyPath_Getter(mthis) native "IDBIndex_keyPath_Getter";
 
-  static $multiEntry_Getter(mthis) native "IDBIndex_multiEntry_Getter";
+  static multiEntry_Getter(mthis) native "IDBIndex_multiEntry_Getter";
 
-  static $name_Getter(mthis) native "IDBIndex_name_Getter";
+  static name_Getter(mthis) native "IDBIndex_name_Getter";
 
-  static $objectStore_Getter(mthis) native "IDBIndex_objectStore_Getter";
+  static objectStore_Getter(mthis) native "IDBIndex_objectStore_Getter";
 
-  static $unique_Getter(mthis) native "IDBIndex_unique_Getter";
+  static unique_Getter(mthis) native "IDBIndex_unique_Getter";
 
-  static $count_Callback(mthis, key) native "IDBIndex_count_Callback_RESOLVER_STRING_1_ScriptValue";
+  static count_Callback_ScriptValue(mthis, key) native "IDBIndex_count_Callback_ScriptValue";
 
-  static $get_Callback(mthis, key) native "IDBIndex_get_Callback_RESOLVER_STRING_1_ScriptValue";
+  static get_Callback_ScriptValue(mthis, key) native "IDBIndex_get_Callback_ScriptValue";
 
-  static $getKey_Callback(mthis, key) native "IDBIndex_getKey_Callback_RESOLVER_STRING_1_ScriptValue";
+  static getKey_Callback_ScriptValue(mthis, key) native "IDBIndex_getKey_Callback_ScriptValue";
 
-  static $openCursor_Callback(mthis, key, direction) native "IDBIndex_openCursor_Callback_RESOLVER_STRING_2_ScriptValue_DOMString";
+  static openCursor_Callback_ScriptValue_DOMString(mthis, key, direction) native "IDBIndex_openCursor_Callback_ScriptValue_DOMString";
 
-  static $openKeyCursor_Callback(mthis, key, direction) native "IDBIndex_openKeyCursor_Callback_RESOLVER_STRING_2_ScriptValue_DOMString";
+  static openKeyCursor_Callback_ScriptValue_DOMString(mthis, key, direction) native "IDBIndex_openKeyCursor_Callback_ScriptValue_DOMString";
 }
 
 class BlinkIDBKeyRange {
-  static $lower_Getter(mthis) native "IDBKeyRange_lower_Getter";
+  static lower_Getter(mthis) native "IDBKeyRange_lower_Getter";
 
-  static $lowerOpen_Getter(mthis) native "IDBKeyRange_lowerOpen_Getter";
+  static lowerOpen_Getter(mthis) native "IDBKeyRange_lowerOpen_Getter";
 
-  static $upper_Getter(mthis) native "IDBKeyRange_upper_Getter";
+  static upper_Getter(mthis) native "IDBKeyRange_upper_Getter";
 
-  static $upperOpen_Getter(mthis) native "IDBKeyRange_upperOpen_Getter";
+  static upperOpen_Getter(mthis) native "IDBKeyRange_upperOpen_Getter";
 
-  static $bound__Callback(lower, upper, lowerOpen, upperOpen) native "IDBKeyRange_bound_Callback_RESOLVER_STRING_4_ScriptValue_ScriptValue_boolean_boolean";
+  static bound_Callback_ScriptValue_ScriptValue_boolean_boolean(lower, upper, lowerOpen, upperOpen) native "IDBKeyRange_bound_Callback_ScriptValue_ScriptValue_boolean_boolean";
 
-  static $lowerBound__Callback(bound, open) native "IDBKeyRange_lowerBound_Callback_RESOLVER_STRING_2_ScriptValue_boolean";
+  static lowerBound_Callback_ScriptValue_boolean(bound, open) native "IDBKeyRange_lowerBound_Callback_ScriptValue_boolean";
 
-  static $only__Callback(value) native "IDBKeyRange_only_Callback_RESOLVER_STRING_1_ScriptValue";
+  static only_Callback_ScriptValue(value) native "IDBKeyRange_only_Callback_ScriptValue";
 
-  static $upperBound__Callback(bound, open) native "IDBKeyRange_upperBound_Callback_RESOLVER_STRING_2_ScriptValue_boolean";
+  static upperBound_Callback_ScriptValue_boolean(bound, open) native "IDBKeyRange_upperBound_Callback_ScriptValue_boolean";
 }
 
 class BlinkIDBObjectStore {
-  static $autoIncrement_Getter(mthis) native "IDBObjectStore_autoIncrement_Getter";
+  static autoIncrement_Getter(mthis) native "IDBObjectStore_autoIncrement_Getter";
 
-  static $indexNames_Getter(mthis) native "IDBObjectStore_indexNames_Getter";
+  static indexNames_Getter(mthis) native "IDBObjectStore_indexNames_Getter";
 
-  static $keyPath_Getter(mthis) native "IDBObjectStore_keyPath_Getter";
+  static keyPath_Getter(mthis) native "IDBObjectStore_keyPath_Getter";
 
-  static $name_Getter(mthis) native "IDBObjectStore_name_Getter";
+  static name_Getter(mthis) native "IDBObjectStore_name_Getter";
 
-  static $transaction_Getter(mthis) native "IDBObjectStore_transaction_Getter";
+  static transaction_Getter(mthis) native "IDBObjectStore_transaction_Getter";
 
-  static $add_Callback(mthis, value, key) native "IDBObjectStore_add_Callback_RESOLVER_STRING_2_ScriptValue_ScriptValue";
+  static add_Callback_ScriptValue_ScriptValue(mthis, value, key) native "IDBObjectStore_add_Callback_ScriptValue_ScriptValue";
 
-  static $clear_Callback(mthis) native "IDBObjectStore_clear_Callback_RESOLVER_STRING_0_";
+  static clear_Callback(mthis) native "IDBObjectStore_clear_Callback";
 
-  static $count_Callback(mthis, key) native "IDBObjectStore_count_Callback_RESOLVER_STRING_1_ScriptValue";
+  static count_Callback_ScriptValue(mthis, key) native "IDBObjectStore_count_Callback_ScriptValue";
 
-  static $_createIndex_1_Callback(mthis, name, keyPath, options) native "IDBObjectStore_createIndex_Callback_RESOLVER_STRING_3_DOMString_sequence<DOMString>_Dictionary";
+  static createIndex_Callback_DOMString_SEQ_DOMString_SEQ_Dictionary(mthis, name, keyPath, options) native "IDBObjectStore_createIndex_Callback_DOMString_sequence<DOMString>_Dictionary";
 
-  static $_createIndex_2_Callback(mthis, name, keyPath, options) native "IDBObjectStore_createIndex_Callback_RESOLVER_STRING_3_DOMString_DOMString_Dictionary";
+  static createIndex_Callback_DOMString_DOMString_Dictionary(mthis, name, keyPath, options) native "IDBObjectStore_createIndex_Callback_DOMString_DOMString_Dictionary";
 
-  static $delete_Callback(mthis, key) native "IDBObjectStore_delete_Callback_RESOLVER_STRING_1_ScriptValue";
+  static delete_Callback_ScriptValue(mthis, key) native "IDBObjectStore_delete_Callback_ScriptValue";
 
-  static $deleteIndex_Callback(mthis, name) native "IDBObjectStore_deleteIndex_Callback_RESOLVER_STRING_1_DOMString";
+  static deleteIndex_Callback_DOMString(mthis, name) native "IDBObjectStore_deleteIndex_Callback_DOMString";
 
-  static $get_Callback(mthis, key) native "IDBObjectStore_get_Callback_RESOLVER_STRING_1_ScriptValue";
+  static get_Callback_ScriptValue(mthis, key) native "IDBObjectStore_get_Callback_ScriptValue";
 
-  static $index_Callback(mthis, name) native "IDBObjectStore_index_Callback_RESOLVER_STRING_1_DOMString";
+  static index_Callback_DOMString(mthis, name) native "IDBObjectStore_index_Callback_DOMString";
 
-  static $openCursor_Callback(mthis, key, direction) native "IDBObjectStore_openCursor_Callback_RESOLVER_STRING_2_ScriptValue_DOMString";
+  static openCursor_Callback_ScriptValue_DOMString(mthis, key, direction) native "IDBObjectStore_openCursor_Callback_ScriptValue_DOMString";
 
-  static $openKeyCursor_Callback(mthis, range, direction) native "IDBObjectStore_openKeyCursor_Callback_RESOLVER_STRING_2_ScriptValue_DOMString";
+  static openKeyCursor_Callback_ScriptValue_DOMString(mthis, range, direction) native "IDBObjectStore_openKeyCursor_Callback_ScriptValue_DOMString";
 
-  static $put_Callback(mthis, value, key) native "IDBObjectStore_put_Callback_RESOLVER_STRING_2_ScriptValue_ScriptValue";
+  static put_Callback_ScriptValue_ScriptValue(mthis, value, key) native "IDBObjectStore_put_Callback_ScriptValue_ScriptValue";
 }
 
 class BlinkIDBRequest {
-  static $error_Getter(mthis) native "IDBRequest_error_Getter";
+  static error_Getter(mthis) native "IDBRequest_error_Getter";
 
-  static $readyState_Getter(mthis) native "IDBRequest_readyState_Getter";
+  static readyState_Getter(mthis) native "IDBRequest_readyState_Getter";
 
-  static $result_Getter(mthis) native "IDBRequest_result_Getter";
+  static result_Getter(mthis) native "IDBRequest_result_Getter";
 
-  static $source_Getter(mthis) native "IDBRequest_source_Getter";
+  static source_Getter(mthis) native "IDBRequest_source_Getter";
 
-  static $transaction_Getter(mthis) native "IDBRequest_transaction_Getter";
+  static transaction_Getter(mthis) native "IDBRequest_transaction_Getter";
 }
 
 class BlinkIDBOpenDBRequest {}
 
 class BlinkIDBTransaction {
-  static $db_Getter(mthis) native "IDBTransaction_db_Getter";
+  static db_Getter(mthis) native "IDBTransaction_db_Getter";
 
-  static $error_Getter(mthis) native "IDBTransaction_error_Getter";
+  static error_Getter(mthis) native "IDBTransaction_error_Getter";
 
-  static $mode_Getter(mthis) native "IDBTransaction_mode_Getter";
+  static mode_Getter(mthis) native "IDBTransaction_mode_Getter";
 
-  static $abort_Callback(mthis) native "IDBTransaction_abort_Callback_RESOLVER_STRING_0_";
+  static abort_Callback(mthis) native "IDBTransaction_abort_Callback";
 
-  static $objectStore_Callback(mthis, name) native "IDBTransaction_objectStore_Callback_RESOLVER_STRING_1_DOMString";
+  static objectStore_Callback_DOMString(mthis, name) native "IDBTransaction_objectStore_Callback_DOMString";
 }
 
 class BlinkIDBVersionChangeEvent {
-  static $dataLoss_Getter(mthis) native "IDBVersionChangeEvent_dataLoss_Getter";
+  static dataLoss_Getter(mthis) native "IDBVersionChangeEvent_dataLoss_Getter";
 
-  static $dataLossMessage_Getter(mthis) native "IDBVersionChangeEvent_dataLossMessage_Getter";
+  static dataLossMessage_Getter(mthis) native "IDBVersionChangeEvent_dataLossMessage_Getter";
 
-  static $newVersion_Getter(mthis) native "IDBVersionChangeEvent_newVersion_Getter";
+  static newVersion_Getter(mthis) native "IDBVersionChangeEvent_newVersion_Getter";
 
-  static $oldVersion_Getter(mthis) native "IDBVersionChangeEvent_oldVersion_Getter";
+  static oldVersion_Getter(mthis) native "IDBVersionChangeEvent_oldVersion_Getter";
 }
 
 class BlinkImageBitmap {
-  static $height_Getter(mthis) native "ImageBitmap_height_Getter";
+  static height_Getter(mthis) native "ImageBitmap_height_Getter";
 
-  static $width_Getter(mthis) native "ImageBitmap_width_Getter";
+  static width_Getter(mthis) native "ImageBitmap_width_Getter";
 }
 
 class BlinkImageData {
-  static $data_Getter(mthis) native "ImageData_data_Getter";
+  static data_Getter(mthis) native "ImageData_data_Getter";
 
-  static $height_Getter(mthis) native "ImageData_height_Getter";
+  static height_Getter(mthis) native "ImageData_height_Getter";
 
-  static $width_Getter(mthis) native "ImageData_width_Getter";
+  static width_Getter(mthis) native "ImageData_width_Getter";
 }
 
 class BlinkInjectedScriptHost {
-  static $inspect_Callback(mthis, objectId, hints) native "InjectedScriptHost_inspect_Callback";
+  static inspect_Callback_ScriptValue_ScriptValue(mthis, objectId, hints) native "InjectedScriptHost_inspect_Callback";
 }
 
 class BlinkInputMethodContext {
-  static $compositionEndOffset_Getter(mthis) native "InputMethodContext_compositionEndOffset_Getter";
+  static compositionEndOffset_Getter(mthis) native "InputMethodContext_compositionEndOffset_Getter";
 
-  static $compositionStartOffset_Getter(mthis) native "InputMethodContext_compositionStartOffset_Getter";
+  static compositionStartOffset_Getter(mthis) native "InputMethodContext_compositionStartOffset_Getter";
 
-  static $locale_Getter(mthis) native "InputMethodContext_locale_Getter";
+  static locale_Getter(mthis) native "InputMethodContext_locale_Getter";
 
-  static $target_Getter(mthis) native "InputMethodContext_target_Getter";
+  static target_Getter(mthis) native "InputMethodContext_target_Getter";
 
-  static $confirmComposition_Callback(mthis) native "InputMethodContext_confirmComposition_Callback_RESOLVER_STRING_0_";
+  static confirmComposition_Callback(mthis) native "InputMethodContext_confirmComposition_Callback";
 }
 
 class BlinkInstallPhaseEvent {
-  static $waitUntil_Callback(mthis, value) native "InstallPhaseEvent_waitUntil_Callback_RESOLVER_STRING_1_ScriptValue";
+  static waitUntil_Callback_ScriptValue(mthis, value) native "InstallPhaseEvent_waitUntil_Callback_ScriptValue";
 }
 
 class BlinkInstallEvent {
-  static $replace_Callback(mthis) native "InstallEvent_replace_Callback_RESOLVER_STRING_0_";
+  static replace_Callback(mthis) native "InstallEvent_replace_Callback";
 }
 
 class BlinkKey {
-  static $algorithm_Getter(mthis) native "Key_algorithm_Getter";
+  static algorithm_Getter(mthis) native "Key_algorithm_Getter";
 
-  static $extractable_Getter(mthis) native "Key_extractable_Getter";
+  static extractable_Getter(mthis) native "Key_extractable_Getter";
 
-  static $type_Getter(mthis) native "Key_type_Getter";
+  static type_Getter(mthis) native "Key_type_Getter";
 
-  static $usages_Getter(mthis) native "Key_usages_Getter";
+  static usages_Getter(mthis) native "Key_usages_Getter";
 }
 
 class BlinkKeyPair {
-  static $privateKey_Getter(mthis) native "KeyPair_privateKey_Getter";
+  static privateKey_Getter(mthis) native "KeyPair_privateKey_Getter";
 
-  static $publicKey_Getter(mthis) native "KeyPair_publicKey_Getter";
+  static publicKey_Getter(mthis) native "KeyPair_publicKey_Getter";
 }
 
 class BlinkKeyboardEvent {
-  static $altGraphKey_Getter(mthis) native "KeyboardEvent_altGraphKey_Getter";
+  static altGraphKey_Getter(mthis) native "KeyboardEvent_altGraphKey_Getter";
 
-  static $altKey_Getter(mthis) native "KeyboardEvent_altKey_Getter";
+  static altKey_Getter(mthis) native "KeyboardEvent_altKey_Getter";
 
-  static $ctrlKey_Getter(mthis) native "KeyboardEvent_ctrlKey_Getter";
+  static ctrlKey_Getter(mthis) native "KeyboardEvent_ctrlKey_Getter";
 
-  static $keyIdentifier_Getter(mthis) native "KeyboardEvent_keyIdentifier_Getter";
+  static keyIdentifier_Getter(mthis) native "KeyboardEvent_keyIdentifier_Getter";
 
-  static $keyLocation_Getter(mthis) native "KeyboardEvent_keyLocation_Getter";
+  static keyLocation_Getter(mthis) native "KeyboardEvent_keyLocation_Getter";
 
-  static $location_Getter(mthis) native "KeyboardEvent_location_Getter";
+  static location_Getter(mthis) native "KeyboardEvent_location_Getter";
 
-  static $metaKey_Getter(mthis) native "KeyboardEvent_metaKey_Getter";
+  static metaKey_Getter(mthis) native "KeyboardEvent_metaKey_Getter";
 
-  static $repeat_Getter(mthis) native "KeyboardEvent_repeat_Getter";
+  static repeat_Getter(mthis) native "KeyboardEvent_repeat_Getter";
 
-  static $shiftKey_Getter(mthis) native "KeyboardEvent_shiftKey_Getter";
+  static shiftKey_Getter(mthis) native "KeyboardEvent_shiftKey_Getter";
 
-  static $getModifierState_Callback(mthis, keyArgument) native "KeyboardEvent_getModifierState_Callback_RESOLVER_STRING_1_DOMString";
+  static getModifierState_Callback_DOMString(mthis, keyArgument) native "KeyboardEvent_getModifierState_Callback_DOMString";
 
-  static $initKeyboardEvent_Callback(mthis, type, canBubble, cancelable, view, keyIdentifier, location, ctrlKey, altKey, shiftKey, metaKey, altGraphKey) native "KeyboardEvent_initKeyboardEvent_Callback_RESOLVER_STRING_11_DOMString_boolean_boolean_Window_DOMString_unsigned long_boolean_boolean_boolean_boolean_boolean";
+  static initKeyboardEvent_Callback_DOMString_boolean_boolean_Window_DOMString_ul_boolean_boolean_boolean_boolean_boolean(mthis, type, canBubble, cancelable, view, keyIdentifier, location, ctrlKey, altKey, shiftKey, metaKey, altGraphKey) native "KeyboardEvent_initKeyboardEvent_Callback_DOMString_boolean_boolean_Window_DOMString_unsigned long_boolean_boolean_boolean_boolean_boolean";
 }
 
 class BlinkLocation {
-  static $ancestorOrigins_Getter(mthis) native "Location_ancestorOrigins_Getter";
+  static ancestorOrigins_Getter(mthis) native "Location_ancestorOrigins_Getter";
 
-  static $hash_Getter(mthis) native "Location_hash_Getter";
+  static hash_Getter(mthis) native "Location_hash_Getter";
 
-  static $hash_Setter(mthis, value) native "Location_hash_Setter";
+  static hash_Setter_DOMString(mthis, value) native "Location_hash_Setter";
 
-  static $host_Getter(mthis) native "Location_host_Getter";
+  static host_Getter(mthis) native "Location_host_Getter";
 
-  static $host_Setter(mthis, value) native "Location_host_Setter";
+  static host_Setter_DOMString(mthis, value) native "Location_host_Setter";
 
-  static $hostname_Getter(mthis) native "Location_hostname_Getter";
+  static hostname_Getter(mthis) native "Location_hostname_Getter";
 
-  static $hostname_Setter(mthis, value) native "Location_hostname_Setter";
+  static hostname_Setter_DOMString(mthis, value) native "Location_hostname_Setter";
 
-  static $href_Getter(mthis) native "Location_href_Getter";
+  static href_Getter(mthis) native "Location_href_Getter";
 
-  static $href_Setter(mthis, value) native "Location_href_Setter";
+  static href_Setter_DOMString(mthis, value) native "Location_href_Setter";
 
-  static $origin_Getter(mthis) native "Location_origin_Getter";
+  static origin_Getter(mthis) native "Location_origin_Getter";
 
-  static $pathname_Getter(mthis) native "Location_pathname_Getter";
+  static pathname_Getter(mthis) native "Location_pathname_Getter";
 
-  static $pathname_Setter(mthis, value) native "Location_pathname_Setter";
+  static pathname_Setter_DOMString(mthis, value) native "Location_pathname_Setter";
 
-  static $port_Getter(mthis) native "Location_port_Getter";
+  static port_Getter(mthis) native "Location_port_Getter";
 
-  static $port_Setter(mthis, value) native "Location_port_Setter";
+  static port_Setter_DOMString(mthis, value) native "Location_port_Setter";
 
-  static $protocol_Getter(mthis) native "Location_protocol_Getter";
+  static protocol_Getter(mthis) native "Location_protocol_Getter";
 
-  static $protocol_Setter(mthis, value) native "Location_protocol_Setter";
+  static protocol_Setter_DOMString(mthis, value) native "Location_protocol_Setter";
 
-  static $search_Getter(mthis) native "Location_search_Getter";
+  static search_Getter(mthis) native "Location_search_Getter";
 
-  static $search_Setter(mthis, value) native "Location_search_Setter";
+  static search_Setter_DOMString(mthis, value) native "Location_search_Setter";
 
-  static $assign_Callback(mthis, url) native "Location_assign_Callback";
+  static assign_Callback_DOMString(mthis, url) native "Location_assign_Callback";
 
-  static $reload_Callback(mthis) native "Location_reload_Callback";
+  static reload_Callback(mthis) native "Location_reload_Callback";
 
-  static $replace_Callback(mthis, url) native "Location_replace_Callback";
+  static replace_Callback_DOMString(mthis, url) native "Location_replace_Callback";
 
-  static $toString_Callback(mthis) native "Location_toString_Callback_RESOLVER_STRING_0_";
+  static toString_Callback(mthis) native "Location_toString_Callback";
 }
 
 class BlinkMIDIAccess {
-  static $inputs_Callback(mthis) native "MIDIAccess_inputs_Callback_RESOLVER_STRING_0_";
+  static inputs_Callback(mthis) native "MIDIAccess_inputs_Callback";
 
-  static $outputs_Callback(mthis) native "MIDIAccess_outputs_Callback_RESOLVER_STRING_0_";
+  static outputs_Callback(mthis) native "MIDIAccess_outputs_Callback";
 }
 
 class BlinkMIDIAccessPromise {
-  static $then_Callback(mthis, successCallback, errorCallback) native "MIDIAccessPromise_then_Callback_RESOLVER_STRING_2_MIDISuccessCallback_MIDIErrorCallback";
+  static then_Callback_MIDISuccessCallback_MIDIErrorCallback(mthis, successCallback, errorCallback) native "MIDIAccessPromise_then_Callback_MIDISuccessCallback_MIDIErrorCallback";
 }
 
 class BlinkMIDIConnectionEvent {
-  static $port_Getter(mthis) native "MIDIConnectionEvent_port_Getter";
+  static port_Getter(mthis) native "MIDIConnectionEvent_port_Getter";
 }
 
 class BlinkMIDIPort {
-  static $id_Getter(mthis) native "MIDIPort_id_Getter";
+  static id_Getter(mthis) native "MIDIPort_id_Getter";
 
-  static $manufacturer_Getter(mthis) native "MIDIPort_manufacturer_Getter";
+  static manufacturer_Getter(mthis) native "MIDIPort_manufacturer_Getter";
 
-  static $name_Getter(mthis) native "MIDIPort_name_Getter";
+  static name_Getter(mthis) native "MIDIPort_name_Getter";
 
-  static $type_Getter(mthis) native "MIDIPort_type_Getter";
+  static type_Getter(mthis) native "MIDIPort_type_Getter";
 
-  static $version_Getter(mthis) native "MIDIPort_version_Getter";
+  static version_Getter(mthis) native "MIDIPort_version_Getter";
 }
 
 class BlinkMIDIInput {}
 
 class BlinkMIDIMessageEvent {
-  static $data_Getter(mthis) native "MIDIMessageEvent_data_Getter";
+  static data_Getter(mthis) native "MIDIMessageEvent_data_Getter";
 
-  static $receivedTime_Getter(mthis) native "MIDIMessageEvent_receivedTime_Getter";
+  static receivedTime_Getter(mthis) native "MIDIMessageEvent_receivedTime_Getter";
 }
 
 class BlinkMIDIOutput {
-  static $_send_1_Callback(mthis, data, timestamp) native "MIDIOutput_send_Callback_RESOLVER_STRING_2_Uint8Array_double";
+  static send_Callback_Uint8Array_double(mthis, data, timestamp) native "MIDIOutput_send_Callback_Uint8Array_double";
 
-  static $_send_2_Callback(mthis, data) native "MIDIOutput_send_Callback_RESOLVER_STRING_1_Uint8Array";
+  static send_Callback_Uint8Array(mthis, data) native "MIDIOutput_send_Callback_Uint8Array";
 }
 
 class BlinkMediaController {
-  static $_create_1constructorCallback() native "MediaController_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "MediaController_constructorCallback";
 
-  static $buffered_Getter(mthis) native "MediaController_buffered_Getter";
+  static buffered_Getter(mthis) native "MediaController_buffered_Getter";
 
-  static $currentTime_Getter(mthis) native "MediaController_currentTime_Getter";
+  static currentTime_Getter(mthis) native "MediaController_currentTime_Getter";
 
-  static $currentTime_Setter(mthis, value) native "MediaController_currentTime_Setter";
+  static currentTime_Setter_double(mthis, value) native "MediaController_currentTime_Setter";
 
-  static $defaultPlaybackRate_Getter(mthis) native "MediaController_defaultPlaybackRate_Getter";
+  static defaultPlaybackRate_Getter(mthis) native "MediaController_defaultPlaybackRate_Getter";
 
-  static $defaultPlaybackRate_Setter(mthis, value) native "MediaController_defaultPlaybackRate_Setter";
+  static defaultPlaybackRate_Setter_double(mthis, value) native "MediaController_defaultPlaybackRate_Setter";
 
-  static $duration_Getter(mthis) native "MediaController_duration_Getter";
+  static duration_Getter(mthis) native "MediaController_duration_Getter";
 
-  static $muted_Getter(mthis) native "MediaController_muted_Getter";
+  static muted_Getter(mthis) native "MediaController_muted_Getter";
 
-  static $muted_Setter(mthis, value) native "MediaController_muted_Setter";
+  static muted_Setter_boolean(mthis, value) native "MediaController_muted_Setter";
 
-  static $paused_Getter(mthis) native "MediaController_paused_Getter";
+  static paused_Getter(mthis) native "MediaController_paused_Getter";
 
-  static $playbackRate_Getter(mthis) native "MediaController_playbackRate_Getter";
+  static playbackRate_Getter(mthis) native "MediaController_playbackRate_Getter";
 
-  static $playbackRate_Setter(mthis, value) native "MediaController_playbackRate_Setter";
+  static playbackRate_Setter_double(mthis, value) native "MediaController_playbackRate_Setter";
 
-  static $playbackState_Getter(mthis) native "MediaController_playbackState_Getter";
+  static playbackState_Getter(mthis) native "MediaController_playbackState_Getter";
 
-  static $played_Getter(mthis) native "MediaController_played_Getter";
+  static played_Getter(mthis) native "MediaController_played_Getter";
 
-  static $seekable_Getter(mthis) native "MediaController_seekable_Getter";
+  static seekable_Getter(mthis) native "MediaController_seekable_Getter";
 
-  static $volume_Getter(mthis) native "MediaController_volume_Getter";
+  static volume_Getter(mthis) native "MediaController_volume_Getter";
 
-  static $volume_Setter(mthis, value) native "MediaController_volume_Setter";
+  static volume_Setter_double(mthis, value) native "MediaController_volume_Setter";
 
-  static $pause_Callback(mthis) native "MediaController_pause_Callback_RESOLVER_STRING_0_";
+  static pause_Callback(mthis) native "MediaController_pause_Callback";
 
-  static $play_Callback(mthis) native "MediaController_play_Callback_RESOLVER_STRING_0_";
+  static play_Callback(mthis) native "MediaController_play_Callback";
 
-  static $unpause_Callback(mthis) native "MediaController_unpause_Callback_RESOLVER_STRING_0_";
+  static unpause_Callback(mthis) native "MediaController_unpause_Callback";
 }
 
 class BlinkMediaElementAudioSourceNode {
-  static $mediaElement_Getter(mthis) native "MediaElementAudioSourceNode_mediaElement_Getter";
+  static mediaElement_Getter(mthis) native "MediaElementAudioSourceNode_mediaElement_Getter";
 }
 
 class BlinkMediaError {
-  static $code_Getter(mthis) native "MediaError_code_Getter";
+  static code_Getter(mthis) native "MediaError_code_Getter";
 }
 
 class BlinkMediaKeyError {
-  static $code_Getter(mthis) native "MediaKeyError_code_Getter";
+  static code_Getter(mthis) native "MediaKeyError_code_Getter";
 
-  static $systemCode_Getter(mthis) native "MediaKeyError_systemCode_Getter";
+  static systemCode_Getter(mthis) native "MediaKeyError_systemCode_Getter";
 }
 
 class BlinkMediaKeyEvent {
-  static $defaultURL_Getter(mthis) native "MediaKeyEvent_defaultURL_Getter";
+  static defaultURL_Getter(mthis) native "MediaKeyEvent_defaultURL_Getter";
 
-  static $errorCode_Getter(mthis) native "MediaKeyEvent_errorCode_Getter";
+  static errorCode_Getter(mthis) native "MediaKeyEvent_errorCode_Getter";
 
-  static $initData_Getter(mthis) native "MediaKeyEvent_initData_Getter";
+  static initData_Getter(mthis) native "MediaKeyEvent_initData_Getter";
 
-  static $keySystem_Getter(mthis) native "MediaKeyEvent_keySystem_Getter";
+  static keySystem_Getter(mthis) native "MediaKeyEvent_keySystem_Getter";
 
-  static $message_Getter(mthis) native "MediaKeyEvent_message_Getter";
+  static message_Getter(mthis) native "MediaKeyEvent_message_Getter";
 
-  static $sessionId_Getter(mthis) native "MediaKeyEvent_sessionId_Getter";
+  static sessionId_Getter(mthis) native "MediaKeyEvent_sessionId_Getter";
 
-  static $systemCode_Getter(mthis) native "MediaKeyEvent_systemCode_Getter";
+  static systemCode_Getter(mthis) native "MediaKeyEvent_systemCode_Getter";
 }
 
 class BlinkMediaKeyMessageEvent {
-  static $destinationURL_Getter(mthis) native "MediaKeyMessageEvent_destinationURL_Getter";
+  static destinationURL_Getter(mthis) native "MediaKeyMessageEvent_destinationURL_Getter";
 
-  static $message_Getter(mthis) native "MediaKeyMessageEvent_message_Getter";
+  static message_Getter(mthis) native "MediaKeyMessageEvent_message_Getter";
 }
 
 class BlinkMediaKeyNeededEvent {
-  static $contentType_Getter(mthis) native "MediaKeyNeededEvent_contentType_Getter";
+  static contentType_Getter(mthis) native "MediaKeyNeededEvent_contentType_Getter";
 
-  static $initData_Getter(mthis) native "MediaKeyNeededEvent_initData_Getter";
+  static initData_Getter(mthis) native "MediaKeyNeededEvent_initData_Getter";
 }
 
 class BlinkMediaKeySession {
-  static $error_Getter(mthis) native "MediaKeySession_error_Getter";
+  static error_Getter(mthis) native "MediaKeySession_error_Getter";
 
-  static $keySystem_Getter(mthis) native "MediaKeySession_keySystem_Getter";
+  static keySystem_Getter(mthis) native "MediaKeySession_keySystem_Getter";
 
-  static $sessionId_Getter(mthis) native "MediaKeySession_sessionId_Getter";
+  static sessionId_Getter(mthis) native "MediaKeySession_sessionId_Getter";
 
-  static $release_Callback(mthis) native "MediaKeySession_release_Callback_RESOLVER_STRING_0_";
+  static release_Callback(mthis) native "MediaKeySession_release_Callback";
 
-  static $update_Callback(mthis, response) native "MediaKeySession_update_Callback_RESOLVER_STRING_1_Uint8Array";
+  static update_Callback_Uint8Array(mthis, response) native "MediaKeySession_update_Callback_Uint8Array";
 }
 
 class BlinkMediaKeys {
-  static $_create_1constructorCallback(keySystem) native "MediaKeys_constructorCallback_RESOLVER_STRING_1_DOMString";
+  static constructorCallback_DOMString(keySystem) native "MediaKeys_constructorCallback_DOMString";
 
-  static $keySystem_Getter(mthis) native "MediaKeys_keySystem_Getter";
+  static keySystem_Getter(mthis) native "MediaKeys_keySystem_Getter";
 
-  static $createSession_Callback(mthis, type, initData) native "MediaKeys_createSession_Callback_RESOLVER_STRING_2_DOMString_Uint8Array";
+  static createSession_Callback_DOMString_Uint8Array(mthis, type, initData) native "MediaKeys_createSession_Callback_DOMString_Uint8Array";
 }
 
 class BlinkMediaList {
-  static $length_Getter(mthis) native "MediaList_length_Getter";
+  static length_Getter(mthis) native "MediaList_length_Getter";
 
-  static $mediaText_Getter(mthis) native "MediaList_mediaText_Getter";
+  static mediaText_Getter(mthis) native "MediaList_mediaText_Getter";
 
-  static $mediaText_Setter(mthis, value) native "MediaList_mediaText_Setter";
+  static mediaText_Setter_DOMString(mthis, value) native "MediaList_mediaText_Setter";
 
-  static $appendMedium_Callback(mthis, newMedium) native "MediaList_appendMedium_Callback_RESOLVER_STRING_1_DOMString";
+  static appendMedium_Callback_DOMString(mthis, newMedium) native "MediaList_appendMedium_Callback_DOMString";
 
-  static $deleteMedium_Callback(mthis, oldMedium) native "MediaList_deleteMedium_Callback_RESOLVER_STRING_1_DOMString";
+  static deleteMedium_Callback_DOMString(mthis, oldMedium) native "MediaList_deleteMedium_Callback_DOMString";
 
-  static $item_Callback(mthis, index) native "MediaList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "MediaList_item_Callback_unsigned long";
 }
 
 class BlinkMediaQueryList {
-  static $matches_Getter(mthis) native "MediaQueryList_matches_Getter";
+  static matches_Getter(mthis) native "MediaQueryList_matches_Getter";
 
-  static $media_Getter(mthis) native "MediaQueryList_media_Getter";
+  static media_Getter(mthis) native "MediaQueryList_media_Getter";
 }
 
 class BlinkMediaSource {
-  static $_create_1constructorCallback() native "MediaSource_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "MediaSource_constructorCallback";
 
-  static $activeSourceBuffers_Getter(mthis) native "MediaSource_activeSourceBuffers_Getter";
+  static activeSourceBuffers_Getter(mthis) native "MediaSource_activeSourceBuffers_Getter";
 
-  static $duration_Getter(mthis) native "MediaSource_duration_Getter";
+  static duration_Getter(mthis) native "MediaSource_duration_Getter";
 
-  static $duration_Setter(mthis, value) native "MediaSource_duration_Setter";
+  static duration_Setter_double(mthis, value) native "MediaSource_duration_Setter";
 
-  static $readyState_Getter(mthis) native "MediaSource_readyState_Getter";
+  static readyState_Getter(mthis) native "MediaSource_readyState_Getter";
 
-  static $sourceBuffers_Getter(mthis) native "MediaSource_sourceBuffers_Getter";
+  static sourceBuffers_Getter(mthis) native "MediaSource_sourceBuffers_Getter";
 
-  static $addSourceBuffer_Callback(mthis, type) native "MediaSource_addSourceBuffer_Callback_RESOLVER_STRING_1_DOMString";
+  static addSourceBuffer_Callback_DOMString(mthis, type) native "MediaSource_addSourceBuffer_Callback_DOMString";
 
-  static $_endOfStream_1_Callback(mthis, error) native "MediaSource_endOfStream_Callback_RESOLVER_STRING_1_DOMString";
+  static endOfStream_Callback_DOMString(mthis, error) native "MediaSource_endOfStream_Callback_DOMString";
 
-  static $_endOfStream_2_Callback(mthis) native "MediaSource_endOfStream_Callback_RESOLVER_STRING_0_";
+  static endOfStream_Callback(mthis) native "MediaSource_endOfStream_Callback";
 
-  static $isTypeSupported_Callback(type) native "MediaSource_isTypeSupported_Callback_RESOLVER_STRING_1_DOMString";
+  static isTypeSupported_Callback_DOMString(type) native "MediaSource_isTypeSupported_Callback_DOMString";
 
-  static $removeSourceBuffer_Callback(mthis, buffer) native "MediaSource_removeSourceBuffer_Callback_RESOLVER_STRING_1_SourceBuffer";
+  static removeSourceBuffer_Callback_SourceBuffer(mthis, buffer) native "MediaSource_removeSourceBuffer_Callback_SourceBuffer";
 }
 
 class BlinkMediaStream {
-  static $_create_1constructorCallback() native "MediaStream_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "MediaStream_constructorCallback";
 
-  static $_create_2constructorCallback(stream_OR_tracks) native "MediaStream_constructorCallback_RESOLVER_STRING_1_MediaStream";
+  static constructorCallback_MediaStream(stream_OR_tracks) native "MediaStream_constructorCallback_MediaStream";
 
-  static $_create_3constructorCallback(stream_OR_tracks) native "MediaStream_constructorCallback_RESOLVER_STRING_1_MediaStreamTrack[]";
+  static constructorCallback_A_MediaStreamTrack_A(stream_OR_tracks) native "MediaStream_constructorCallback_MediaStreamTrack[]";
 
-  static $ended_Getter(mthis) native "MediaStream_ended_Getter";
+  static ended_Getter(mthis) native "MediaStream_ended_Getter";
 
-  static $id_Getter(mthis) native "MediaStream_id_Getter";
+  static id_Getter(mthis) native "MediaStream_id_Getter";
 
-  static $label_Getter(mthis) native "MediaStream_label_Getter";
+  static label_Getter(mthis) native "MediaStream_label_Getter";
 
-  static $addTrack_Callback(mthis, track) native "MediaStream_addTrack_Callback_RESOLVER_STRING_1_MediaStreamTrack";
+  static addTrack_Callback_MediaStreamTrack(mthis, track) native "MediaStream_addTrack_Callback_MediaStreamTrack";
 
-  static $getAudioTracks_Callback(mthis) native "MediaStream_getAudioTracks_Callback_RESOLVER_STRING_0_";
+  static getAudioTracks_Callback(mthis) native "MediaStream_getAudioTracks_Callback";
 
-  static $getTrackById_Callback(mthis, trackId) native "MediaStream_getTrackById_Callback_RESOLVER_STRING_1_DOMString";
+  static getTrackById_Callback_DOMString(mthis, trackId) native "MediaStream_getTrackById_Callback_DOMString";
 
-  static $getVideoTracks_Callback(mthis) native "MediaStream_getVideoTracks_Callback_RESOLVER_STRING_0_";
+  static getVideoTracks_Callback(mthis) native "MediaStream_getVideoTracks_Callback";
 
-  static $removeTrack_Callback(mthis, track) native "MediaStream_removeTrack_Callback_RESOLVER_STRING_1_MediaStreamTrack";
+  static removeTrack_Callback_MediaStreamTrack(mthis, track) native "MediaStream_removeTrack_Callback_MediaStreamTrack";
 
-  static $stop_Callback(mthis) native "MediaStream_stop_Callback_RESOLVER_STRING_0_";
+  static stop_Callback(mthis) native "MediaStream_stop_Callback";
 }
 
 class BlinkMediaStreamAudioDestinationNode {
-  static $stream_Getter(mthis) native "MediaStreamAudioDestinationNode_stream_Getter";
+  static stream_Getter(mthis) native "MediaStreamAudioDestinationNode_stream_Getter";
 }
 
 class BlinkMediaStreamAudioSourceNode {
-  static $mediaStream_Getter(mthis) native "MediaStreamAudioSourceNode_mediaStream_Getter";
+  static mediaStream_Getter(mthis) native "MediaStreamAudioSourceNode_mediaStream_Getter";
 }
 
 class BlinkMediaStreamEvent {
-  static $stream_Getter(mthis) native "MediaStreamEvent_stream_Getter";
+  static stream_Getter(mthis) native "MediaStreamEvent_stream_Getter";
 }
 
 class BlinkMediaStreamTrack {
-  static $enabled_Getter(mthis) native "MediaStreamTrack_enabled_Getter";
+  static enabled_Getter(mthis) native "MediaStreamTrack_enabled_Getter";
 
-  static $enabled_Setter(mthis, value) native "MediaStreamTrack_enabled_Setter";
+  static enabled_Setter_boolean(mthis, value) native "MediaStreamTrack_enabled_Setter";
 
-  static $id_Getter(mthis) native "MediaStreamTrack_id_Getter";
+  static id_Getter(mthis) native "MediaStreamTrack_id_Getter";
 
-  static $kind_Getter(mthis) native "MediaStreamTrack_kind_Getter";
+  static kind_Getter(mthis) native "MediaStreamTrack_kind_Getter";
 
-  static $label_Getter(mthis) native "MediaStreamTrack_label_Getter";
+  static label_Getter(mthis) native "MediaStreamTrack_label_Getter";
 
-  static $readyState_Getter(mthis) native "MediaStreamTrack_readyState_Getter";
+  static readyState_Getter(mthis) native "MediaStreamTrack_readyState_Getter";
 
-  static $getSources_Callback(callback) native "MediaStreamTrack_getSources_Callback_RESOLVER_STRING_1_MediaStreamTrackSourcesCallback";
+  static getSources_Callback_MediaStreamTrackSourcesCallback(callback) native "MediaStreamTrack_getSources_Callback_MediaStreamTrackSourcesCallback";
 
-  static $stop_Callback(mthis) native "MediaStreamTrack_stop_Callback_RESOLVER_STRING_0_";
+  static stop_Callback(mthis) native "MediaStreamTrack_stop_Callback";
 }
 
 class BlinkMediaStreamTrackEvent {
-  static $track_Getter(mthis) native "MediaStreamTrackEvent_track_Getter";
+  static track_Getter(mthis) native "MediaStreamTrackEvent_track_Getter";
 }
 
 class BlinkMemoryInfo {
-  static $jsHeapSizeLimit_Getter(mthis) native "MemoryInfo_jsHeapSizeLimit_Getter";
+  static jsHeapSizeLimit_Getter(mthis) native "MemoryInfo_jsHeapSizeLimit_Getter";
 
-  static $totalJSHeapSize_Getter(mthis) native "MemoryInfo_totalJSHeapSize_Getter";
+  static totalJSHeapSize_Getter(mthis) native "MemoryInfo_totalJSHeapSize_Getter";
 
-  static $usedJSHeapSize_Getter(mthis) native "MemoryInfo_usedJSHeapSize_Getter";
+  static usedJSHeapSize_Getter(mthis) native "MemoryInfo_usedJSHeapSize_Getter";
 }
 
 class BlinkMessageChannel {
-  static $port1_Getter(mthis) native "MessageChannel_port1_Getter";
+  static port1_Getter(mthis) native "MessageChannel_port1_Getter";
 
-  static $port2_Getter(mthis) native "MessageChannel_port2_Getter";
+  static port2_Getter(mthis) native "MessageChannel_port2_Getter";
 }
 
 class BlinkMessageEvent {
-  static $data_Getter(mthis) native "MessageEvent_data_Getter";
+  static data_Getter(mthis) native "MessageEvent_data_Getter";
 
-  static $lastEventId_Getter(mthis) native "MessageEvent_lastEventId_Getter";
+  static lastEventId_Getter(mthis) native "MessageEvent_lastEventId_Getter";
 
-  static $origin_Getter(mthis) native "MessageEvent_origin_Getter";
+  static origin_Getter(mthis) native "MessageEvent_origin_Getter";
 
-  static $source_Getter(mthis) native "MessageEvent_source_Getter";
+  static source_Getter(mthis) native "MessageEvent_source_Getter";
 
-  static $initMessageEvent_Callback(mthis, typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, messagePorts) native "MessageEvent_initMessageEvent_Callback";
+  static initMessageEvent_Callback_DOMString_boolean_boolean_ScriptValue_DOMString_DOMString_Window_A_MessagePort_A(mthis, typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, messagePorts) native "MessageEvent_initMessageEvent_Callback";
 }
 
 class BlinkMessagePort {
-  static $close_Callback(mthis) native "MessagePort_close_Callback_RESOLVER_STRING_0_";
+  static close_Callback(mthis) native "MessagePort_close_Callback";
 
-  static $postMessage_Callback(mthis, message, messagePorts) native "MessagePort_postMessage_Callback";
+  static postMessage_Callback_ScriptValue_A_MessagePort_A(mthis, message, messagePorts) native "MessagePort_postMessage_Callback";
 
-  static $start_Callback(mthis) native "MessagePort_start_Callback_RESOLVER_STRING_0_";
+  static start_Callback(mthis) native "MessagePort_start_Callback";
 }
 
 class BlinkMetadata {
-  static $modificationTime_Getter(mthis) native "Metadata_modificationTime_Getter";
+  static modificationTime_Getter(mthis) native "Metadata_modificationTime_Getter";
 
-  static $size_Getter(mthis) native "Metadata_size_Getter";
+  static size_Getter(mthis) native "Metadata_size_Getter";
 }
 
 class BlinkMimeType {
-  static $description_Getter(mthis) native "MimeType_description_Getter";
+  static description_Getter(mthis) native "MimeType_description_Getter";
 
-  static $enabledPlugin_Getter(mthis) native "MimeType_enabledPlugin_Getter";
+  static enabledPlugin_Getter(mthis) native "MimeType_enabledPlugin_Getter";
 
-  static $suffixes_Getter(mthis) native "MimeType_suffixes_Getter";
+  static suffixes_Getter(mthis) native "MimeType_suffixes_Getter";
 
-  static $type_Getter(mthis) native "MimeType_type_Getter";
+  static type_Getter(mthis) native "MimeType_type_Getter";
 }
 
 class BlinkMimeTypeArray {
-  static $length_Getter(mthis) native "MimeTypeArray_length_Getter";
+  static length_Getter(mthis) native "MimeTypeArray_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "MimeTypeArray_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static $__getter___Callback_DOMString(mthis, name) native "MimeTypeArray___getter___Callback_DOMString";
 
-  static $__getter___Callback(mthis, name) native "MimeTypeArray___getter___Callback_RESOLVER_STRING_1_DOMString";
+  static item_Callback_ul(mthis, index) native "MimeTypeArray_item_Callback_unsigned long";
 
-  static $item_Callback(mthis, index) native "MimeTypeArray_item_Callback_RESOLVER_STRING_1_unsigned long";
-
-  static $namedItem_Callback(mthis, name) native "MimeTypeArray_namedItem_Callback_RESOLVER_STRING_1_DOMString";
+  static namedItem_Callback_DOMString(mthis, name) native "MimeTypeArray_namedItem_Callback_DOMString";
 }
 
 class BlinkMouseEvent {
-  static $altKey_Getter(mthis) native "MouseEvent_altKey_Getter";
+  static altKey_Getter(mthis) native "MouseEvent_altKey_Getter";
 
-  static $button_Getter(mthis) native "MouseEvent_button_Getter";
+  static button_Getter(mthis) native "MouseEvent_button_Getter";
 
-  static $clientX_Getter(mthis) native "MouseEvent_clientX_Getter";
+  static clientX_Getter(mthis) native "MouseEvent_clientX_Getter";
 
-  static $clientY_Getter(mthis) native "MouseEvent_clientY_Getter";
+  static clientY_Getter(mthis) native "MouseEvent_clientY_Getter";
 
-  static $ctrlKey_Getter(mthis) native "MouseEvent_ctrlKey_Getter";
+  static ctrlKey_Getter(mthis) native "MouseEvent_ctrlKey_Getter";
 
-  static $dataTransfer_Getter(mthis) native "MouseEvent_dataTransfer_Getter";
+  static dataTransfer_Getter(mthis) native "MouseEvent_dataTransfer_Getter";
 
-  static $fromElement_Getter(mthis) native "MouseEvent_fromElement_Getter";
+  static fromElement_Getter(mthis) native "MouseEvent_fromElement_Getter";
 
-  static $metaKey_Getter(mthis) native "MouseEvent_metaKey_Getter";
+  static metaKey_Getter(mthis) native "MouseEvent_metaKey_Getter";
 
-  static $offsetX_Getter(mthis) native "MouseEvent_offsetX_Getter";
+  static offsetX_Getter(mthis) native "MouseEvent_offsetX_Getter";
 
-  static $offsetY_Getter(mthis) native "MouseEvent_offsetY_Getter";
+  static offsetY_Getter(mthis) native "MouseEvent_offsetY_Getter";
 
-  static $relatedTarget_Getter(mthis) native "MouseEvent_relatedTarget_Getter";
+  static relatedTarget_Getter(mthis) native "MouseEvent_relatedTarget_Getter";
 
-  static $screenX_Getter(mthis) native "MouseEvent_screenX_Getter";
+  static screenX_Getter(mthis) native "MouseEvent_screenX_Getter";
 
-  static $screenY_Getter(mthis) native "MouseEvent_screenY_Getter";
+  static screenY_Getter(mthis) native "MouseEvent_screenY_Getter";
 
-  static $shiftKey_Getter(mthis) native "MouseEvent_shiftKey_Getter";
+  static shiftKey_Getter(mthis) native "MouseEvent_shiftKey_Getter";
 
-  static $toElement_Getter(mthis) native "MouseEvent_toElement_Getter";
+  static toElement_Getter(mthis) native "MouseEvent_toElement_Getter";
 
-  static $webkitMovementX_Getter(mthis) native "MouseEvent_webkitMovementX_Getter";
+  static webkitMovementX_Getter(mthis) native "MouseEvent_webkitMovementX_Getter";
 
-  static $webkitMovementY_Getter(mthis) native "MouseEvent_webkitMovementY_Getter";
+  static webkitMovementY_Getter(mthis) native "MouseEvent_webkitMovementY_Getter";
 
-  static $initMouseEvent_Callback(mthis, type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) native "MouseEvent_initMouseEvent_Callback_RESOLVER_STRING_15_DOMString_boolean_boolean_Window_long_long_long_long_long_boolean_boolean_boolean_boolean_unsigned short_EventTarget";
+  static initMouseEvent_Callback_DOMString_boolean_boolean_Window_long_long_long_long_long_boolean_boolean_boolean_boolean_us_EventTarget(mthis, type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) native "MouseEvent_initMouseEvent_Callback_DOMString_boolean_boolean_Window_long_long_long_long_long_boolean_boolean_boolean_boolean_unsigned short_EventTarget";
 }
 
 class BlinkMutationEvent {}
 
 class BlinkMutationObserver {
-  static $constructorCallback(callback) native "MutationObserver_constructorCallback";
+  static constructorCallback_MutationCallback(callback) native "MutationObserver_constructorCallback";
 
-  static $disconnect_Callback(mthis) native "MutationObserver_disconnect_Callback_RESOLVER_STRING_0_";
+  static disconnect_Callback(mthis) native "MutationObserver_disconnect_Callback";
 
-  static $observe_Callback(mthis, target, options) native "MutationObserver_observe_Callback_RESOLVER_STRING_2_Node_Dictionary";
+  static observe_Callback_Node_Dictionary(mthis, target, options) native "MutationObserver_observe_Callback_Node_Dictionary";
 
-  static $takeRecords_Callback(mthis) native "MutationObserver_takeRecords_Callback_RESOLVER_STRING_0_";
+  static takeRecords_Callback(mthis) native "MutationObserver_takeRecords_Callback";
 }
 
 class BlinkMutationRecord {
-  static $addedNodes_Getter(mthis) native "MutationRecord_addedNodes_Getter";
+  static addedNodes_Getter(mthis) native "MutationRecord_addedNodes_Getter";
 
-  static $attributeName_Getter(mthis) native "MutationRecord_attributeName_Getter";
+  static attributeName_Getter(mthis) native "MutationRecord_attributeName_Getter";
 
-  static $attributeNamespace_Getter(mthis) native "MutationRecord_attributeNamespace_Getter";
+  static attributeNamespace_Getter(mthis) native "MutationRecord_attributeNamespace_Getter";
 
-  static $nextSibling_Getter(mthis) native "MutationRecord_nextSibling_Getter";
+  static nextSibling_Getter(mthis) native "MutationRecord_nextSibling_Getter";
 
-  static $oldValue_Getter(mthis) native "MutationRecord_oldValue_Getter";
+  static oldValue_Getter(mthis) native "MutationRecord_oldValue_Getter";
 
-  static $previousSibling_Getter(mthis) native "MutationRecord_previousSibling_Getter";
+  static previousSibling_Getter(mthis) native "MutationRecord_previousSibling_Getter";
 
-  static $removedNodes_Getter(mthis) native "MutationRecord_removedNodes_Getter";
+  static removedNodes_Getter(mthis) native "MutationRecord_removedNodes_Getter";
 
-  static $target_Getter(mthis) native "MutationRecord_target_Getter";
+  static target_Getter(mthis) native "MutationRecord_target_Getter";
 
-  static $type_Getter(mthis) native "MutationRecord_type_Getter";
+  static type_Getter(mthis) native "MutationRecord_type_Getter";
 }
 
 class BlinkNamedNodeMap {
-  static $length_Getter(mthis) native "NamedNodeMap_length_Getter";
+  static length_Getter(mthis) native "NamedNodeMap_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "NamedNodeMap_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static $__getter___Callback_DOMString(mthis, name) native "NamedNodeMap___getter___Callback_DOMString";
 
-  static $__getter___Callback(mthis, name) native "NamedNodeMap___getter___Callback_RESOLVER_STRING_1_DOMString";
+  static getNamedItem_Callback_DOMString(mthis, name) native "NamedNodeMap_getNamedItem_Callback_DOMString";
 
-  static $getNamedItem_Callback(mthis, name) native "NamedNodeMap_getNamedItem_Callback_RESOLVER_STRING_1_DOMString";
+  static getNamedItemNS_Callback_DOMString_DOMString(mthis, namespaceURI, localName) native "NamedNodeMap_getNamedItemNS_Callback_DOMString_DOMString";
 
-  static $getNamedItemNS_Callback(mthis, namespaceURI, localName) native "NamedNodeMap_getNamedItemNS_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static item_Callback_ul(mthis, index) native "NamedNodeMap_item_Callback_unsigned long";
 
-  static $item_Callback(mthis, index) native "NamedNodeMap_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static removeNamedItem_Callback_DOMString(mthis, name) native "NamedNodeMap_removeNamedItem_Callback_DOMString";
 
-  static $removeNamedItem_Callback(mthis, name) native "NamedNodeMap_removeNamedItem_Callback_RESOLVER_STRING_1_DOMString";
+  static removeNamedItemNS_Callback_DOMString_DOMString(mthis, namespaceURI, localName) native "NamedNodeMap_removeNamedItemNS_Callback_DOMString_DOMString";
 
-  static $removeNamedItemNS_Callback(mthis, namespaceURI, localName) native "NamedNodeMap_removeNamedItemNS_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static setNamedItem_Callback_Node(mthis, node) native "NamedNodeMap_setNamedItem_Callback_Node";
 
-  static $setNamedItem_Callback(mthis, node) native "NamedNodeMap_setNamedItem_Callback_RESOLVER_STRING_1_Node";
-
-  static $setNamedItemNS_Callback(mthis, node) native "NamedNodeMap_setNamedItemNS_Callback_RESOLVER_STRING_1_Node";
+  static setNamedItemNS_Callback_Node(mthis, node) native "NamedNodeMap_setNamedItemNS_Callback_Node";
 }
 
 class BlinkNavigatorID {
-  static $appCodeName_Getter(mthis) native "Navigator_appCodeName_Getter";
+  static appCodeName_Getter(mthis) native "Navigator_appCodeName_Getter";
 
-  static $appName_Getter(mthis) native "Navigator_appName_Getter";
+  static appName_Getter(mthis) native "Navigator_appName_Getter";
 
-  static $appVersion_Getter(mthis) native "Navigator_appVersion_Getter";
+  static appVersion_Getter(mthis) native "Navigator_appVersion_Getter";
 
-  static $platform_Getter(mthis) native "Navigator_platform_Getter";
+  static platform_Getter(mthis) native "Navigator_platform_Getter";
 
-  static $product_Getter(mthis) native "Navigator_product_Getter";
+  static product_Getter(mthis) native "Navigator_product_Getter";
 
-  static $userAgent_Getter(mthis) native "Navigator_userAgent_Getter";
+  static userAgent_Getter(mthis) native "Navigator_userAgent_Getter";
 }
 
 class BlinkNavigatorOnLine {
-  static $onLine_Getter(mthis) native "NavigatorOnLine_onLine_Getter";
+  static onLine_Getter(mthis) native "NavigatorOnLine_onLine_Getter";
 }
 
 class BlinkNavigator {
-  static $cookieEnabled_Getter(mthis) native "Navigator_cookieEnabled_Getter";
+  static cookieEnabled_Getter(mthis) native "Navigator_cookieEnabled_Getter";
 
-  static $doNotTrack_Getter(mthis) native "Navigator_doNotTrack_Getter";
+  static doNotTrack_Getter(mthis) native "Navigator_doNotTrack_Getter";
 
-  static $geolocation_Getter(mthis) native "Navigator_geolocation_Getter";
+  static geolocation_Getter(mthis) native "Navigator_geolocation_Getter";
 
-  static $language_Getter(mthis) native "Navigator_language_Getter";
+  static language_Getter(mthis) native "Navigator_language_Getter";
 
-  static $maxTouchPoints_Getter(mthis) native "Navigator_maxTouchPoints_Getter";
+  static maxTouchPoints_Getter(mthis) native "Navigator_maxTouchPoints_Getter";
 
-  static $mimeTypes_Getter(mthis) native "Navigator_mimeTypes_Getter";
+  static mimeTypes_Getter(mthis) native "Navigator_mimeTypes_Getter";
 
-  static $productSub_Getter(mthis) native "Navigator_productSub_Getter";
+  static productSub_Getter(mthis) native "Navigator_productSub_Getter";
 
-  static $serviceWorker_Getter(mthis) native "Navigator_serviceWorker_Getter";
+  static serviceWorker_Getter(mthis) native "Navigator_serviceWorker_Getter";
 
-  static $storageQuota_Getter(mthis) native "Navigator_storageQuota_Getter";
+  static storageQuota_Getter(mthis) native "Navigator_storageQuota_Getter";
 
-  static $vendor_Getter(mthis) native "Navigator_vendor_Getter";
+  static vendor_Getter(mthis) native "Navigator_vendor_Getter";
 
-  static $vendorSub_Getter(mthis) native "Navigator_vendorSub_Getter";
+  static vendorSub_Getter(mthis) native "Navigator_vendorSub_Getter";
 
-  static $webkitPersistentStorage_Getter(mthis) native "Navigator_webkitPersistentStorage_Getter";
+  static webkitPersistentStorage_Getter(mthis) native "Navigator_webkitPersistentStorage_Getter";
 
-  static $webkitTemporaryStorage_Getter(mthis) native "Navigator_webkitTemporaryStorage_Getter";
+  static webkitTemporaryStorage_Getter(mthis) native "Navigator_webkitTemporaryStorage_Getter";
 
-  static $getStorageUpdates_Callback(mthis) native "Navigator_getStorageUpdates_Callback_RESOLVER_STRING_0_";
+  static getStorageUpdates_Callback(mthis) native "Navigator_getStorageUpdates_Callback";
 
-  static $isProtocolHandlerRegistered_Callback(mthis, scheme, url) native "Navigator_isProtocolHandlerRegistered_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static isProtocolHandlerRegistered_Callback_DOMString_DOMString(mthis, scheme, url) native "Navigator_isProtocolHandlerRegistered_Callback_DOMString_DOMString";
 
-  static $registerProtocolHandler_Callback(mthis, scheme, url, title) native "Navigator_registerProtocolHandler_Callback_RESOLVER_STRING_3_DOMString_DOMString_DOMString";
+  static registerProtocolHandler_Callback_DOMString_DOMString_DOMString(mthis, scheme, url, title) native "Navigator_registerProtocolHandler_Callback_DOMString_DOMString_DOMString";
 
-  static $requestMIDIAccess_Callback(mthis, options) native "Navigator_requestMIDIAccess_Callback_RESOLVER_STRING_1_Dictionary";
+  static requestMIDIAccess_Callback_Dictionary(mthis, options) native "Navigator_requestMIDIAccess_Callback_Dictionary";
 
-  static $unregisterProtocolHandler_Callback(mthis, scheme, url) native "Navigator_unregisterProtocolHandler_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static unregisterProtocolHandler_Callback_DOMString_DOMString(mthis, scheme, url) native "Navigator_unregisterProtocolHandler_Callback_DOMString_DOMString";
 
-  static $webkitGetGamepads_Callback(mthis) native "Navigator_webkitGetGamepads_Callback_RESOLVER_STRING_0_";
+  static webkitGetGamepads_Callback(mthis) native "Navigator_webkitGetGamepads_Callback";
 
-  static $webkitGetUserMedia_Callback(mthis, options, successCallback, errorCallback) native "Navigator_webkitGetUserMedia_Callback_RESOLVER_STRING_3_Dictionary_NavigatorUserMediaSuccessCallback_NavigatorUserMediaErrorCallback";
+  static webkitGetUserMedia_Callback_Dictionary_NavigatorUserMediaSuccessCallback_NavigatorUserMediaErrorCallback(mthis, options, successCallback, errorCallback) native "Navigator_webkitGetUserMedia_Callback_Dictionary_NavigatorUserMediaSuccessCallback_NavigatorUserMediaErrorCallback";
 
-  static $appCodeName_Getter(mthis) native "Navigator_appCodeName_Getter";
+  static appCodeName_Getter(mthis) native "Navigator_appCodeName_Getter";
 
-  static $appName_Getter(mthis) native "Navigator_appName_Getter";
+  static appName_Getter(mthis) native "Navigator_appName_Getter";
 
-  static $appVersion_Getter(mthis) native "Navigator_appVersion_Getter";
+  static appVersion_Getter(mthis) native "Navigator_appVersion_Getter";
 
-  static $platform_Getter(mthis) native "Navigator_platform_Getter";
+  static platform_Getter(mthis) native "Navigator_platform_Getter";
 
-  static $product_Getter(mthis) native "Navigator_product_Getter";
+  static product_Getter(mthis) native "Navigator_product_Getter";
 
-  static $userAgent_Getter(mthis) native "Navigator_userAgent_Getter";
+  static userAgent_Getter(mthis) native "Navigator_userAgent_Getter";
 
-  static $onLine_Getter(mthis) native "Navigator_onLine_Getter";
+  static onLine_Getter(mthis) native "Navigator_onLine_Getter";
 }
 
 class BlinkNavigatorUserMediaError {
-  static $constraintName_Getter(mthis) native "NavigatorUserMediaError_constraintName_Getter";
+  static constraintName_Getter(mthis) native "NavigatorUserMediaError_constraintName_Getter";
 
-  static $message_Getter(mthis) native "NavigatorUserMediaError_message_Getter";
+  static message_Getter(mthis) native "NavigatorUserMediaError_message_Getter";
 
-  static $name_Getter(mthis) native "NavigatorUserMediaError_name_Getter";
+  static name_Getter(mthis) native "NavigatorUserMediaError_name_Getter";
 }
 
 class BlinkNodeFilter {}
 
 class BlinkNodeIterator {
-  static $pointerBeforeReferenceNode_Getter(mthis) native "NodeIterator_pointerBeforeReferenceNode_Getter";
+  static pointerBeforeReferenceNode_Getter(mthis) native "NodeIterator_pointerBeforeReferenceNode_Getter";
 
-  static $referenceNode_Getter(mthis) native "NodeIterator_referenceNode_Getter";
+  static referenceNode_Getter(mthis) native "NodeIterator_referenceNode_Getter";
 
-  static $root_Getter(mthis) native "NodeIterator_root_Getter";
+  static root_Getter(mthis) native "NodeIterator_root_Getter";
 
-  static $whatToShow_Getter(mthis) native "NodeIterator_whatToShow_Getter";
+  static whatToShow_Getter(mthis) native "NodeIterator_whatToShow_Getter";
 
-  static $detach_Callback(mthis) native "NodeIterator_detach_Callback_RESOLVER_STRING_0_";
+  static detach_Callback(mthis) native "NodeIterator_detach_Callback";
 
-  static $nextNode_Callback(mthis) native "NodeIterator_nextNode_Callback_RESOLVER_STRING_0_";
+  static nextNode_Callback(mthis) native "NodeIterator_nextNode_Callback";
 
-  static $previousNode_Callback(mthis) native "NodeIterator_previousNode_Callback_RESOLVER_STRING_0_";
+  static previousNode_Callback(mthis) native "NodeIterator_previousNode_Callback";
 }
 
 class BlinkNodeList {
-  static $length_Getter(mthis) native "NodeList_length_Getter";
+  static length_Getter(mthis) native "NodeList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "NodeList_item_Callback_RESOLVER_STRING_1_unsigned long";
-
-  static $item_Callback(mthis, index) native "NodeList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "NodeList_item_Callback_unsigned long";
 }
 
 class BlinkNotation {}
 
 class BlinkNotification {
-  static $_create_1constructorCallback(title, options) native "Notification_constructorCallback_RESOLVER_STRING_2_DOMString_Dictionary";
+  static constructorCallback_DOMString_Dictionary(title, options) native "Notification_constructorCallback_DOMString_Dictionary";
 
-  static $body_Getter(mthis) native "Notification_body_Getter";
+  static body_Getter(mthis) native "Notification_body_Getter";
 
-  static $dir_Getter(mthis) native "Notification_dir_Getter";
+  static dir_Getter(mthis) native "Notification_dir_Getter";
 
-  static $icon_Getter(mthis) native "Notification_icon_Getter";
+  static icon_Getter(mthis) native "Notification_icon_Getter";
 
-  static $lang_Getter(mthis) native "Notification_lang_Getter";
+  static lang_Getter(mthis) native "Notification_lang_Getter";
 
-  static $permission_Getter(mthis) native "Notification_permission_Getter";
+  static permission_Getter(mthis) native "Notification_permission_Getter";
 
-  static $tag_Getter(mthis) native "Notification_tag_Getter";
+  static tag_Getter(mthis) native "Notification_tag_Getter";
 
-  static $title_Getter(mthis) native "Notification_title_Getter";
+  static title_Getter(mthis) native "Notification_title_Getter";
 
-  static $close_Callback(mthis) native "Notification_close_Callback_RESOLVER_STRING_0_";
+  static close_Callback(mthis) native "Notification_close_Callback";
 
-  static $requestPermission_Callback(callback) native "Notification_requestPermission_Callback_RESOLVER_STRING_1_NotificationPermissionCallback";
+  static requestPermission_Callback_NotificationPermissionCallback(callback) native "Notification_requestPermission_Callback_NotificationPermissionCallback";
 }
 
 class BlinkNotificationCenter {}
@@ -4313,161 +4283,161 @@
 class BlinkOESTextureHalfFloatLinear {}
 
 class BlinkOESVertexArrayObject {
-  static $bindVertexArrayOES_Callback(mthis, arrayObject) native "OESVertexArrayObject_bindVertexArrayOES_Callback_RESOLVER_STRING_1_WebGLVertexArrayObjectOES";
+  static bindVertexArrayOES_Callback_WebGLVertexArrayObjectOES(mthis, arrayObject) native "OESVertexArrayObject_bindVertexArrayOES_Callback_WebGLVertexArrayObjectOES";
 
-  static $createVertexArrayOES_Callback(mthis) native "OESVertexArrayObject_createVertexArrayOES_Callback_RESOLVER_STRING_0_";
+  static createVertexArrayOES_Callback(mthis) native "OESVertexArrayObject_createVertexArrayOES_Callback";
 
-  static $deleteVertexArrayOES_Callback(mthis, arrayObject) native "OESVertexArrayObject_deleteVertexArrayOES_Callback_RESOLVER_STRING_1_WebGLVertexArrayObjectOES";
+  static deleteVertexArrayOES_Callback_WebGLVertexArrayObjectOES(mthis, arrayObject) native "OESVertexArrayObject_deleteVertexArrayOES_Callback_WebGLVertexArrayObjectOES";
 
-  static $isVertexArrayOES_Callback(mthis, arrayObject) native "OESVertexArrayObject_isVertexArrayOES_Callback_RESOLVER_STRING_1_WebGLVertexArrayObjectOES";
+  static isVertexArrayOES_Callback_WebGLVertexArrayObjectOES(mthis, arrayObject) native "OESVertexArrayObject_isVertexArrayOES_Callback_WebGLVertexArrayObjectOES";
 }
 
 class BlinkOfflineAudioCompletionEvent {
-  static $renderedBuffer_Getter(mthis) native "OfflineAudioCompletionEvent_renderedBuffer_Getter";
+  static renderedBuffer_Getter(mthis) native "OfflineAudioCompletionEvent_renderedBuffer_Getter";
 }
 
 class BlinkOfflineAudioContext {
-  static $_create_1constructorCallback(numberOfChannels, numberOfFrames, sampleRate) native "OfflineAudioContext_constructorCallback_RESOLVER_STRING_3_unsigned long_unsigned long_float";
+  static constructorCallback_ul_ul_float(numberOfChannels, numberOfFrames, sampleRate) native "OfflineAudioContext_constructorCallback_unsigned long_unsigned long_float";
 }
 
 class BlinkOscillatorNode {
-  static $detune_Getter(mthis) native "OscillatorNode_detune_Getter";
+  static detune_Getter(mthis) native "OscillatorNode_detune_Getter";
 
-  static $frequency_Getter(mthis) native "OscillatorNode_frequency_Getter";
+  static frequency_Getter(mthis) native "OscillatorNode_frequency_Getter";
 
-  static $type_Getter(mthis) native "OscillatorNode_type_Getter";
+  static type_Getter(mthis) native "OscillatorNode_type_Getter";
 
-  static $type_Setter(mthis, value) native "OscillatorNode_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "OscillatorNode_type_Setter";
 
-  static $noteOff_Callback(mthis, when) native "OscillatorNode_noteOff_Callback_RESOLVER_STRING_1_double";
+  static noteOff_Callback_double(mthis, when) native "OscillatorNode_noteOff_Callback_double";
 
-  static $noteOn_Callback(mthis, when) native "OscillatorNode_noteOn_Callback_RESOLVER_STRING_1_double";
+  static noteOn_Callback_double(mthis, when) native "OscillatorNode_noteOn_Callback_double";
 
-  static $setPeriodicWave_Callback(mthis, periodicWave) native "OscillatorNode_setPeriodicWave_Callback_RESOLVER_STRING_1_PeriodicWave";
+  static setPeriodicWave_Callback_PeriodicWave(mthis, periodicWave) native "OscillatorNode_setPeriodicWave_Callback_PeriodicWave";
 
-  static $_start_1_Callback(mthis, when) native "OscillatorNode_start_Callback_RESOLVER_STRING_1_double";
+  static start_Callback_double(mthis, when) native "OscillatorNode_start_Callback_double";
 
-  static $_start_2_Callback(mthis) native "OscillatorNode_start_Callback_RESOLVER_STRING_0_";
+  static start_Callback(mthis) native "OscillatorNode_start_Callback";
 
-  static $_stop_1_Callback(mthis, when) native "OscillatorNode_stop_Callback_RESOLVER_STRING_1_double";
+  static stop_Callback_double(mthis, when) native "OscillatorNode_stop_Callback_double";
 
-  static $_stop_2_Callback(mthis) native "OscillatorNode_stop_Callback_RESOLVER_STRING_0_";
+  static stop_Callback(mthis) native "OscillatorNode_stop_Callback";
 }
 
 class BlinkOverflowEvent {
-  static $horizontalOverflow_Getter(mthis) native "OverflowEvent_horizontalOverflow_Getter";
+  static horizontalOverflow_Getter(mthis) native "OverflowEvent_horizontalOverflow_Getter";
 
-  static $orient_Getter(mthis) native "OverflowEvent_orient_Getter";
+  static orient_Getter(mthis) native "OverflowEvent_orient_Getter";
 
-  static $verticalOverflow_Getter(mthis) native "OverflowEvent_verticalOverflow_Getter";
+  static verticalOverflow_Getter(mthis) native "OverflowEvent_verticalOverflow_Getter";
 }
 
 class BlinkPagePopupController {}
 
 class BlinkPageTransitionEvent {
-  static $persisted_Getter(mthis) native "PageTransitionEvent_persisted_Getter";
+  static persisted_Getter(mthis) native "PageTransitionEvent_persisted_Getter";
 }
 
 class BlinkPannerNode {
-  static $coneInnerAngle_Getter(mthis) native "PannerNode_coneInnerAngle_Getter";
+  static coneInnerAngle_Getter(mthis) native "PannerNode_coneInnerAngle_Getter";
 
-  static $coneInnerAngle_Setter(mthis, value) native "PannerNode_coneInnerAngle_Setter";
+  static coneInnerAngle_Setter_double(mthis, value) native "PannerNode_coneInnerAngle_Setter";
 
-  static $coneOuterAngle_Getter(mthis) native "PannerNode_coneOuterAngle_Getter";
+  static coneOuterAngle_Getter(mthis) native "PannerNode_coneOuterAngle_Getter";
 
-  static $coneOuterAngle_Setter(mthis, value) native "PannerNode_coneOuterAngle_Setter";
+  static coneOuterAngle_Setter_double(mthis, value) native "PannerNode_coneOuterAngle_Setter";
 
-  static $coneOuterGain_Getter(mthis) native "PannerNode_coneOuterGain_Getter";
+  static coneOuterGain_Getter(mthis) native "PannerNode_coneOuterGain_Getter";
 
-  static $coneOuterGain_Setter(mthis, value) native "PannerNode_coneOuterGain_Setter";
+  static coneOuterGain_Setter_double(mthis, value) native "PannerNode_coneOuterGain_Setter";
 
-  static $distanceModel_Getter(mthis) native "PannerNode_distanceModel_Getter";
+  static distanceModel_Getter(mthis) native "PannerNode_distanceModel_Getter";
 
-  static $distanceModel_Setter(mthis, value) native "PannerNode_distanceModel_Setter";
+  static distanceModel_Setter_DOMString(mthis, value) native "PannerNode_distanceModel_Setter";
 
-  static $maxDistance_Getter(mthis) native "PannerNode_maxDistance_Getter";
+  static maxDistance_Getter(mthis) native "PannerNode_maxDistance_Getter";
 
-  static $maxDistance_Setter(mthis, value) native "PannerNode_maxDistance_Setter";
+  static maxDistance_Setter_double(mthis, value) native "PannerNode_maxDistance_Setter";
 
-  static $panningModel_Getter(mthis) native "PannerNode_panningModel_Getter";
+  static panningModel_Getter(mthis) native "PannerNode_panningModel_Getter";
 
-  static $panningModel_Setter(mthis, value) native "PannerNode_panningModel_Setter";
+  static panningModel_Setter_DOMString(mthis, value) native "PannerNode_panningModel_Setter";
 
-  static $refDistance_Getter(mthis) native "PannerNode_refDistance_Getter";
+  static refDistance_Getter(mthis) native "PannerNode_refDistance_Getter";
 
-  static $refDistance_Setter(mthis, value) native "PannerNode_refDistance_Setter";
+  static refDistance_Setter_double(mthis, value) native "PannerNode_refDistance_Setter";
 
-  static $rolloffFactor_Getter(mthis) native "PannerNode_rolloffFactor_Getter";
+  static rolloffFactor_Getter(mthis) native "PannerNode_rolloffFactor_Getter";
 
-  static $rolloffFactor_Setter(mthis, value) native "PannerNode_rolloffFactor_Setter";
+  static rolloffFactor_Setter_double(mthis, value) native "PannerNode_rolloffFactor_Setter";
 
-  static $setOrientation_Callback(mthis, x, y, z) native "PannerNode_setOrientation_Callback_RESOLVER_STRING_3_float_float_float";
+  static setOrientation_Callback_float_float_float(mthis, x, y, z) native "PannerNode_setOrientation_Callback_float_float_float";
 
-  static $setPosition_Callback(mthis, x, y, z) native "PannerNode_setPosition_Callback_RESOLVER_STRING_3_float_float_float";
+  static setPosition_Callback_float_float_float(mthis, x, y, z) native "PannerNode_setPosition_Callback_float_float_float";
 
-  static $setVelocity_Callback(mthis, x, y, z) native "PannerNode_setVelocity_Callback_RESOLVER_STRING_3_float_float_float";
+  static setVelocity_Callback_float_float_float(mthis, x, y, z) native "PannerNode_setVelocity_Callback_float_float_float";
 }
 
 class BlinkPath {
-  static $_create_1constructorCallback() native "Path2D_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "Path_constructorCallback";
 
-  static $_create_2constructorCallback(path_OR_text) native "Path2D_constructorCallback_RESOLVER_STRING_1_Path2D";
+  static constructorCallback_Path2D(path_OR_text) native "Path_constructorCallback_Path2D";
 
-  static $_create_3constructorCallback(path_OR_text) native "Path2D_constructorCallback_RESOLVER_STRING_1_DOMString";
+  static constructorCallback_DOMString(path_OR_text) native "Path_constructorCallback_DOMString";
 
-  static $arc_Callback(mthis, x, y, radius, startAngle, endAngle, anticlockwise) native "Path2D_arc_Callback_RESOLVER_STRING_6_float_float_float_float_float_boolean";
+  static arc_Callback_float_float_float_float_float_boolean(mthis, x, y, radius, startAngle, endAngle, anticlockwise) native "Path2D_arc_Callback_float_float_float_float_float_boolean";
 
-  static $arcTo_Callback(mthis, x1, y1, x2, y2, radius) native "Path2D_arcTo_Callback_RESOLVER_STRING_5_float_float_float_float_float";
+  static arcTo_Callback_float_float_float_float_float(mthis, x1, y1, x2, y2, radius) native "Path2D_arcTo_Callback_float_float_float_float_float";
 
-  static $bezierCurveTo_Callback(mthis, cp1x, cp1y, cp2x, cp2y, x, y) native "Path2D_bezierCurveTo_Callback_RESOLVER_STRING_6_float_float_float_float_float_float";
+  static bezierCurveTo_Callback_float_float_float_float_float_float(mthis, cp1x, cp1y, cp2x, cp2y, x, y) native "Path2D_bezierCurveTo_Callback_float_float_float_float_float_float";
 
-  static $closePath_Callback(mthis) native "Path2D_closePath_Callback_RESOLVER_STRING_0_";
+  static closePath_Callback(mthis) native "Path2D_closePath_Callback";
 
-  static $lineTo_Callback(mthis, x, y) native "Path2D_lineTo_Callback_RESOLVER_STRING_2_float_float";
+  static lineTo_Callback_float_float(mthis, x, y) native "Path2D_lineTo_Callback_float_float";
 
-  static $moveTo_Callback(mthis, x, y) native "Path2D_moveTo_Callback_RESOLVER_STRING_2_float_float";
+  static moveTo_Callback_float_float(mthis, x, y) native "Path2D_moveTo_Callback_float_float";
 
-  static $quadraticCurveTo_Callback(mthis, cpx, cpy, x, y) native "Path2D_quadraticCurveTo_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static quadraticCurveTo_Callback_float_float_float_float(mthis, cpx, cpy, x, y) native "Path2D_quadraticCurveTo_Callback_float_float_float_float";
 
-  static $rect_Callback(mthis, x, y, width, height) native "Path2D_rect_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static rect_Callback_float_float_float_float(mthis, x, y, width, height) native "Path2D_rect_Callback_float_float_float_float";
 }
 
 class BlinkPerformance {
-  static $memory_Getter(mthis) native "Performance_memory_Getter";
+  static memory_Getter(mthis) native "Performance_memory_Getter";
 
-  static $navigation_Getter(mthis) native "Performance_navigation_Getter";
+  static navigation_Getter(mthis) native "Performance_navigation_Getter";
 
-  static $timing_Getter(mthis) native "Performance_timing_Getter";
+  static timing_Getter(mthis) native "Performance_timing_Getter";
 
-  static $clearMarks_Callback(mthis, markName) native "Performance_clearMarks_Callback_RESOLVER_STRING_1_DOMString";
+  static clearMarks_Callback_DOMString(mthis, markName) native "Performance_clearMarks_Callback_DOMString";
 
-  static $clearMeasures_Callback(mthis, measureName) native "Performance_clearMeasures_Callback_RESOLVER_STRING_1_DOMString";
+  static clearMeasures_Callback_DOMString(mthis, measureName) native "Performance_clearMeasures_Callback_DOMString";
 
-  static $getEntries_Callback(mthis) native "Performance_getEntries_Callback_RESOLVER_STRING_0_";
+  static getEntries_Callback(mthis) native "Performance_getEntries_Callback";
 
-  static $getEntriesByName_Callback(mthis, name, entryType) native "Performance_getEntriesByName_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static getEntriesByName_Callback_DOMString_DOMString(mthis, name, entryType) native "Performance_getEntriesByName_Callback_DOMString_DOMString";
 
-  static $getEntriesByType_Callback(mthis, entryType) native "Performance_getEntriesByType_Callback_RESOLVER_STRING_1_DOMString";
+  static getEntriesByType_Callback_DOMString(mthis, entryType) native "Performance_getEntriesByType_Callback_DOMString";
 
-  static $mark_Callback(mthis, markName) native "Performance_mark_Callback_RESOLVER_STRING_1_DOMString";
+  static mark_Callback_DOMString(mthis, markName) native "Performance_mark_Callback_DOMString";
 
-  static $measure_Callback(mthis, measureName, startMark, endMark) native "Performance_measure_Callback_RESOLVER_STRING_3_DOMString_DOMString_DOMString";
+  static measure_Callback_DOMString_DOMString_DOMString(mthis, measureName, startMark, endMark) native "Performance_measure_Callback_DOMString_DOMString_DOMString";
 
-  static $now_Callback(mthis) native "Performance_now_Callback_RESOLVER_STRING_0_";
+  static now_Callback(mthis) native "Performance_now_Callback";
 
-  static $webkitClearResourceTimings_Callback(mthis) native "Performance_webkitClearResourceTimings_Callback_RESOLVER_STRING_0_";
+  static webkitClearResourceTimings_Callback(mthis) native "Performance_webkitClearResourceTimings_Callback";
 
-  static $webkitSetResourceTimingBufferSize_Callback(mthis, maxSize) native "Performance_webkitSetResourceTimingBufferSize_Callback_RESOLVER_STRING_1_unsigned long";
+  static webkitSetResourceTimingBufferSize_Callback_ul(mthis, maxSize) native "Performance_webkitSetResourceTimingBufferSize_Callback_unsigned long";
 }
 
 class BlinkPerformanceEntry {
-  static $duration_Getter(mthis) native "PerformanceEntry_duration_Getter";
+  static duration_Getter(mthis) native "PerformanceEntry_duration_Getter";
 
-  static $entryType_Getter(mthis) native "PerformanceEntry_entryType_Getter";
+  static entryType_Getter(mthis) native "PerformanceEntry_entryType_Getter";
 
-  static $name_Getter(mthis) native "PerformanceEntry_name_Getter";
+  static name_Getter(mthis) native "PerformanceEntry_name_Getter";
 
-  static $startTime_Getter(mthis) native "PerformanceEntry_startTime_Getter";
+  static startTime_Getter(mthis) native "PerformanceEntry_startTime_Getter";
 }
 
 class BlinkPerformanceMark {}
@@ -4475,595 +4445,583 @@
 class BlinkPerformanceMeasure {}
 
 class BlinkPerformanceNavigation {
-  static $redirectCount_Getter(mthis) native "PerformanceNavigation_redirectCount_Getter";
+  static redirectCount_Getter(mthis) native "PerformanceNavigation_redirectCount_Getter";
 
-  static $type_Getter(mthis) native "PerformanceNavigation_type_Getter";
+  static type_Getter(mthis) native "PerformanceNavigation_type_Getter";
 }
 
 class BlinkPerformanceResourceTiming {
-  static $connectEnd_Getter(mthis) native "PerformanceResourceTiming_connectEnd_Getter";
+  static connectEnd_Getter(mthis) native "PerformanceResourceTiming_connectEnd_Getter";
 
-  static $connectStart_Getter(mthis) native "PerformanceResourceTiming_connectStart_Getter";
+  static connectStart_Getter(mthis) native "PerformanceResourceTiming_connectStart_Getter";
 
-  static $domainLookupEnd_Getter(mthis) native "PerformanceResourceTiming_domainLookupEnd_Getter";
+  static domainLookupEnd_Getter(mthis) native "PerformanceResourceTiming_domainLookupEnd_Getter";
 
-  static $domainLookupStart_Getter(mthis) native "PerformanceResourceTiming_domainLookupStart_Getter";
+  static domainLookupStart_Getter(mthis) native "PerformanceResourceTiming_domainLookupStart_Getter";
 
-  static $fetchStart_Getter(mthis) native "PerformanceResourceTiming_fetchStart_Getter";
+  static fetchStart_Getter(mthis) native "PerformanceResourceTiming_fetchStart_Getter";
 
-  static $initiatorType_Getter(mthis) native "PerformanceResourceTiming_initiatorType_Getter";
+  static initiatorType_Getter(mthis) native "PerformanceResourceTiming_initiatorType_Getter";
 
-  static $redirectEnd_Getter(mthis) native "PerformanceResourceTiming_redirectEnd_Getter";
+  static redirectEnd_Getter(mthis) native "PerformanceResourceTiming_redirectEnd_Getter";
 
-  static $redirectStart_Getter(mthis) native "PerformanceResourceTiming_redirectStart_Getter";
+  static redirectStart_Getter(mthis) native "PerformanceResourceTiming_redirectStart_Getter";
 
-  static $requestStart_Getter(mthis) native "PerformanceResourceTiming_requestStart_Getter";
+  static requestStart_Getter(mthis) native "PerformanceResourceTiming_requestStart_Getter";
 
-  static $responseEnd_Getter(mthis) native "PerformanceResourceTiming_responseEnd_Getter";
+  static responseEnd_Getter(mthis) native "PerformanceResourceTiming_responseEnd_Getter";
 
-  static $responseStart_Getter(mthis) native "PerformanceResourceTiming_responseStart_Getter";
+  static responseStart_Getter(mthis) native "PerformanceResourceTiming_responseStart_Getter";
 
-  static $secureConnectionStart_Getter(mthis) native "PerformanceResourceTiming_secureConnectionStart_Getter";
+  static secureConnectionStart_Getter(mthis) native "PerformanceResourceTiming_secureConnectionStart_Getter";
 }
 
 class BlinkPerformanceTiming {
-  static $connectEnd_Getter(mthis) native "PerformanceTiming_connectEnd_Getter";
+  static connectEnd_Getter(mthis) native "PerformanceTiming_connectEnd_Getter";
 
-  static $connectStart_Getter(mthis) native "PerformanceTiming_connectStart_Getter";
+  static connectStart_Getter(mthis) native "PerformanceTiming_connectStart_Getter";
 
-  static $domComplete_Getter(mthis) native "PerformanceTiming_domComplete_Getter";
+  static domComplete_Getter(mthis) native "PerformanceTiming_domComplete_Getter";
 
-  static $domContentLoadedEventEnd_Getter(mthis) native "PerformanceTiming_domContentLoadedEventEnd_Getter";
+  static domContentLoadedEventEnd_Getter(mthis) native "PerformanceTiming_domContentLoadedEventEnd_Getter";
 
-  static $domContentLoadedEventStart_Getter(mthis) native "PerformanceTiming_domContentLoadedEventStart_Getter";
+  static domContentLoadedEventStart_Getter(mthis) native "PerformanceTiming_domContentLoadedEventStart_Getter";
 
-  static $domInteractive_Getter(mthis) native "PerformanceTiming_domInteractive_Getter";
+  static domInteractive_Getter(mthis) native "PerformanceTiming_domInteractive_Getter";
 
-  static $domLoading_Getter(mthis) native "PerformanceTiming_domLoading_Getter";
+  static domLoading_Getter(mthis) native "PerformanceTiming_domLoading_Getter";
 
-  static $domainLookupEnd_Getter(mthis) native "PerformanceTiming_domainLookupEnd_Getter";
+  static domainLookupEnd_Getter(mthis) native "PerformanceTiming_domainLookupEnd_Getter";
 
-  static $domainLookupStart_Getter(mthis) native "PerformanceTiming_domainLookupStart_Getter";
+  static domainLookupStart_Getter(mthis) native "PerformanceTiming_domainLookupStart_Getter";
 
-  static $fetchStart_Getter(mthis) native "PerformanceTiming_fetchStart_Getter";
+  static fetchStart_Getter(mthis) native "PerformanceTiming_fetchStart_Getter";
 
-  static $loadEventEnd_Getter(mthis) native "PerformanceTiming_loadEventEnd_Getter";
+  static loadEventEnd_Getter(mthis) native "PerformanceTiming_loadEventEnd_Getter";
 
-  static $loadEventStart_Getter(mthis) native "PerformanceTiming_loadEventStart_Getter";
+  static loadEventStart_Getter(mthis) native "PerformanceTiming_loadEventStart_Getter";
 
-  static $navigationStart_Getter(mthis) native "PerformanceTiming_navigationStart_Getter";
+  static navigationStart_Getter(mthis) native "PerformanceTiming_navigationStart_Getter";
 
-  static $redirectEnd_Getter(mthis) native "PerformanceTiming_redirectEnd_Getter";
+  static redirectEnd_Getter(mthis) native "PerformanceTiming_redirectEnd_Getter";
 
-  static $redirectStart_Getter(mthis) native "PerformanceTiming_redirectStart_Getter";
+  static redirectStart_Getter(mthis) native "PerformanceTiming_redirectStart_Getter";
 
-  static $requestStart_Getter(mthis) native "PerformanceTiming_requestStart_Getter";
+  static requestStart_Getter(mthis) native "PerformanceTiming_requestStart_Getter";
 
-  static $responseEnd_Getter(mthis) native "PerformanceTiming_responseEnd_Getter";
+  static responseEnd_Getter(mthis) native "PerformanceTiming_responseEnd_Getter";
 
-  static $responseStart_Getter(mthis) native "PerformanceTiming_responseStart_Getter";
+  static responseStart_Getter(mthis) native "PerformanceTiming_responseStart_Getter";
 
-  static $secureConnectionStart_Getter(mthis) native "PerformanceTiming_secureConnectionStart_Getter";
+  static secureConnectionStart_Getter(mthis) native "PerformanceTiming_secureConnectionStart_Getter";
 
-  static $unloadEventEnd_Getter(mthis) native "PerformanceTiming_unloadEventEnd_Getter";
+  static unloadEventEnd_Getter(mthis) native "PerformanceTiming_unloadEventEnd_Getter";
 
-  static $unloadEventStart_Getter(mthis) native "PerformanceTiming_unloadEventStart_Getter";
+  static unloadEventStart_Getter(mthis) native "PerformanceTiming_unloadEventStart_Getter";
 }
 
 class BlinkPeriodicWave {}
 
 class BlinkPlayer {
-  static $currentTime_Getter(mthis) native "AnimationPlayer_currentTime_Getter";
+  static currentTime_Getter(mthis) native "AnimationPlayer_currentTime_Getter";
 
-  static $currentTime_Setter(mthis, value) native "AnimationPlayer_currentTime_Setter";
+  static currentTime_Setter_double(mthis, value) native "AnimationPlayer_currentTime_Setter";
 
-  static $finished_Getter(mthis) native "AnimationPlayer_finished_Getter";
+  static finished_Getter(mthis) native "AnimationPlayer_finished_Getter";
 
-  static $paused_Getter(mthis) native "AnimationPlayer_paused_Getter";
+  static paused_Getter(mthis) native "AnimationPlayer_paused_Getter";
 
-  static $playbackRate_Getter(mthis) native "AnimationPlayer_playbackRate_Getter";
+  static playbackRate_Getter(mthis) native "AnimationPlayer_playbackRate_Getter";
 
-  static $playbackRate_Setter(mthis, value) native "AnimationPlayer_playbackRate_Setter";
+  static playbackRate_Setter_double(mthis, value) native "AnimationPlayer_playbackRate_Setter";
 
-  static $source_Getter(mthis) native "AnimationPlayer_source_Getter";
+  static source_Getter(mthis) native "AnimationPlayer_source_Getter";
 
-  static $source_Setter(mthis, value) native "AnimationPlayer_source_Setter";
+  static source_Setter_TimedItem(mthis, value) native "AnimationPlayer_source_Setter";
 
-  static $startTime_Getter(mthis) native "AnimationPlayer_startTime_Getter";
+  static startTime_Getter(mthis) native "AnimationPlayer_startTime_Getter";
 
-  static $startTime_Setter(mthis, value) native "AnimationPlayer_startTime_Setter";
+  static startTime_Setter_double(mthis, value) native "AnimationPlayer_startTime_Setter";
 
-  static $timeLag_Getter(mthis) native "AnimationPlayer_timeLag_Getter";
+  static timeLag_Getter(mthis) native "AnimationPlayer_timeLag_Getter";
 
-  static $cancel_Callback(mthis) native "AnimationPlayer_cancel_Callback_RESOLVER_STRING_0_";
+  static cancel_Callback(mthis) native "AnimationPlayer_cancel_Callback";
 
-  static $finish_Callback(mthis) native "AnimationPlayer_finish_Callback_RESOLVER_STRING_0_";
+  static finish_Callback(mthis) native "AnimationPlayer_finish_Callback";
 
-  static $pause_Callback(mthis) native "AnimationPlayer_pause_Callback_RESOLVER_STRING_0_";
+  static pause_Callback(mthis) native "AnimationPlayer_pause_Callback";
 
-  static $play_Callback(mthis) native "AnimationPlayer_play_Callback_RESOLVER_STRING_0_";
+  static play_Callback(mthis) native "AnimationPlayer_play_Callback";
 
-  static $reverse_Callback(mthis) native "AnimationPlayer_reverse_Callback_RESOLVER_STRING_0_";
+  static reverse_Callback(mthis) native "AnimationPlayer_reverse_Callback";
 }
 
 class BlinkPlugin {
-  static $description_Getter(mthis) native "Plugin_description_Getter";
+  static description_Getter(mthis) native "Plugin_description_Getter";
 
-  static $filename_Getter(mthis) native "Plugin_filename_Getter";
+  static filename_Getter(mthis) native "Plugin_filename_Getter";
 
-  static $length_Getter(mthis) native "Plugin_length_Getter";
+  static length_Getter(mthis) native "Plugin_length_Getter";
 
-  static $name_Getter(mthis) native "Plugin_name_Getter";
+  static name_Getter(mthis) native "Plugin_name_Getter";
 
-  static $__getter___Callback(mthis, name) native "Plugin___getter___Callback_RESOLVER_STRING_1_DOMString";
+  static $__getter___Callback_DOMString(mthis, name) native "Plugin___getter___Callback_DOMString";
 
-  static $item_Callback(mthis, index) native "Plugin_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "Plugin_item_Callback_unsigned long";
 
-  static $namedItem_Callback(mthis, name) native "Plugin_namedItem_Callback_RESOLVER_STRING_1_DOMString";
+  static namedItem_Callback_DOMString(mthis, name) native "Plugin_namedItem_Callback_DOMString";
 }
 
 class BlinkPluginArray {
-  static $length_Getter(mthis) native "PluginArray_length_Getter";
+  static length_Getter(mthis) native "PluginArray_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "PluginArray_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static $__getter___Callback_DOMString(mthis, name) native "PluginArray___getter___Callback_DOMString";
 
-  static $__getter___Callback(mthis, name) native "PluginArray___getter___Callback_RESOLVER_STRING_1_DOMString";
+  static item_Callback_ul(mthis, index) native "PluginArray_item_Callback_unsigned long";
 
-  static $item_Callback(mthis, index) native "PluginArray_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static namedItem_Callback_DOMString(mthis, name) native "PluginArray_namedItem_Callback_DOMString";
 
-  static $namedItem_Callback(mthis, name) native "PluginArray_namedItem_Callback_RESOLVER_STRING_1_DOMString";
-
-  static $refresh_Callback(mthis, reload) native "PluginArray_refresh_Callback_RESOLVER_STRING_1_boolean";
+  static refresh_Callback_boolean(mthis, reload) native "PluginArray_refresh_Callback_boolean";
 }
 
 class BlinkPopStateEvent {
-  static $state_Getter(mthis) native "PopStateEvent_state_Getter";
+  static state_Getter(mthis) native "PopStateEvent_state_Getter";
 }
 
 class BlinkPositionError {
-  static $code_Getter(mthis) native "PositionError_code_Getter";
+  static code_Getter(mthis) native "PositionError_code_Getter";
 
-  static $message_Getter(mthis) native "PositionError_message_Getter";
+  static message_Getter(mthis) native "PositionError_message_Getter";
 }
 
 class BlinkProcessingInstruction {
-  static $sheet_Getter(mthis) native "ProcessingInstruction_sheet_Getter";
+  static sheet_Getter(mthis) native "ProcessingInstruction_sheet_Getter";
 
-  static $target_Getter(mthis) native "ProcessingInstruction_target_Getter";
+  static target_Getter(mthis) native "ProcessingInstruction_target_Getter";
 }
 
 class BlinkProgressEvent {
-  static $lengthComputable_Getter(mthis) native "ProgressEvent_lengthComputable_Getter";
+  static lengthComputable_Getter(mthis) native "ProgressEvent_lengthComputable_Getter";
 
-  static $loaded_Getter(mthis) native "ProgressEvent_loaded_Getter";
+  static loaded_Getter(mthis) native "ProgressEvent_loaded_Getter";
 
-  static $total_Getter(mthis) native "ProgressEvent_total_Getter";
+  static total_Getter(mthis) native "ProgressEvent_total_Getter";
 }
 
 class BlinkRGBColor {}
 
 class BlinkRTCDTMFSender {
-  static $canInsertDTMF_Getter(mthis) native "RTCDTMFSender_canInsertDTMF_Getter";
+  static canInsertDTMF_Getter(mthis) native "RTCDTMFSender_canInsertDTMF_Getter";
 
-  static $duration_Getter(mthis) native "RTCDTMFSender_duration_Getter";
+  static duration_Getter(mthis) native "RTCDTMFSender_duration_Getter";
 
-  static $interToneGap_Getter(mthis) native "RTCDTMFSender_interToneGap_Getter";
+  static interToneGap_Getter(mthis) native "RTCDTMFSender_interToneGap_Getter";
 
-  static $toneBuffer_Getter(mthis) native "RTCDTMFSender_toneBuffer_Getter";
+  static toneBuffer_Getter(mthis) native "RTCDTMFSender_toneBuffer_Getter";
 
-  static $track_Getter(mthis) native "RTCDTMFSender_track_Getter";
+  static track_Getter(mthis) native "RTCDTMFSender_track_Getter";
 
-  static $_insertDTMF_1_Callback(mthis, tones, duration, interToneGap) native "RTCDTMFSender_insertDTMF_Callback_RESOLVER_STRING_3_DOMString_long_long";
+  static insertDTMF_Callback_DOMString_long_long(mthis, tones, duration, interToneGap) native "RTCDTMFSender_insertDTMF_Callback_DOMString_long_long";
 
-  static $_insertDTMF_2_Callback(mthis, tones, duration) native "RTCDTMFSender_insertDTMF_Callback_RESOLVER_STRING_2_DOMString_long";
+  static insertDTMF_Callback_DOMString_long(mthis, tones, duration) native "RTCDTMFSender_insertDTMF_Callback_DOMString_long";
 
-  static $_insertDTMF_3_Callback(mthis, tones) native "RTCDTMFSender_insertDTMF_Callback_RESOLVER_STRING_1_DOMString";
+  static insertDTMF_Callback_DOMString(mthis, tones) native "RTCDTMFSender_insertDTMF_Callback_DOMString";
 }
 
 class BlinkRTCDTMFToneChangeEvent {
-  static $tone_Getter(mthis) native "RTCDTMFToneChangeEvent_tone_Getter";
+  static tone_Getter(mthis) native "RTCDTMFToneChangeEvent_tone_Getter";
 }
 
 class BlinkRTCDataChannel {
-  static $binaryType_Getter(mthis) native "RTCDataChannel_binaryType_Getter";
+  static binaryType_Getter(mthis) native "RTCDataChannel_binaryType_Getter";
 
-  static $binaryType_Setter(mthis, value) native "RTCDataChannel_binaryType_Setter";
+  static binaryType_Setter_DOMString(mthis, value) native "RTCDataChannel_binaryType_Setter";
 
-  static $bufferedAmount_Getter(mthis) native "RTCDataChannel_bufferedAmount_Getter";
+  static bufferedAmount_Getter(mthis) native "RTCDataChannel_bufferedAmount_Getter";
 
-  static $id_Getter(mthis) native "RTCDataChannel_id_Getter";
+  static id_Getter(mthis) native "RTCDataChannel_id_Getter";
 
-  static $label_Getter(mthis) native "RTCDataChannel_label_Getter";
+  static label_Getter(mthis) native "RTCDataChannel_label_Getter";
 
-  static $maxRetransmitTime_Getter(mthis) native "RTCDataChannel_maxRetransmitTime_Getter";
+  static maxRetransmitTime_Getter(mthis) native "RTCDataChannel_maxRetransmitTime_Getter";
 
-  static $maxRetransmits_Getter(mthis) native "RTCDataChannel_maxRetransmits_Getter";
+  static maxRetransmits_Getter(mthis) native "RTCDataChannel_maxRetransmits_Getter";
 
-  static $negotiated_Getter(mthis) native "RTCDataChannel_negotiated_Getter";
+  static negotiated_Getter(mthis) native "RTCDataChannel_negotiated_Getter";
 
-  static $ordered_Getter(mthis) native "RTCDataChannel_ordered_Getter";
+  static ordered_Getter(mthis) native "RTCDataChannel_ordered_Getter";
 
-  static $protocol_Getter(mthis) native "RTCDataChannel_protocol_Getter";
+  static protocol_Getter(mthis) native "RTCDataChannel_protocol_Getter";
 
-  static $readyState_Getter(mthis) native "RTCDataChannel_readyState_Getter";
+  static readyState_Getter(mthis) native "RTCDataChannel_readyState_Getter";
 
-  static $reliable_Getter(mthis) native "RTCDataChannel_reliable_Getter";
+  static reliable_Getter(mthis) native "RTCDataChannel_reliable_Getter";
 
-  static $close_Callback(mthis) native "RTCDataChannel_close_Callback_RESOLVER_STRING_0_";
+  static close_Callback(mthis) native "RTCDataChannel_close_Callback";
 
-  static $_send_1_Callback(mthis, data) native "RTCDataChannel_send_Callback_RESOLVER_STRING_1_ArrayBufferView";
+  static send_Callback_ArrayBufferView(mthis, data) native "RTCDataChannel_send_Callback_ArrayBufferView";
 
-  static $_send_2_Callback(mthis, data) native "RTCDataChannel_send_Callback_RESOLVER_STRING_1_ArrayBuffer";
+  static send_Callback_ArrayBuffer(mthis, data) native "RTCDataChannel_send_Callback_ArrayBuffer";
 
-  static $_send_3_Callback(mthis, data) native "RTCDataChannel_send_Callback_RESOLVER_STRING_1_Blob";
+  static send_Callback_Blob(mthis, data) native "RTCDataChannel_send_Callback_Blob";
 
-  static $_send_4_Callback(mthis, data) native "RTCDataChannel_send_Callback_RESOLVER_STRING_1_DOMString";
-
-  static $sendBlob_Callback(mthis, data) native "RTCDataChannel_send_Callback_RESOLVER_STRING_1_Blob";
-
-  static $sendByteBuffer_Callback(mthis, data) native "RTCDataChannel_send_Callback_RESOLVER_STRING_1_ArrayBuffer";
-
-  static $sendString_Callback(mthis, data) native "RTCDataChannel_send_Callback_RESOLVER_STRING_1_DOMString";
-
-  static $sendTypedData_Callback(mthis, data) native "RTCDataChannel_send_Callback_RESOLVER_STRING_1_ArrayBufferView";
+  static send_Callback_DOMString(mthis, data) native "RTCDataChannel_send_Callback_DOMString";
 }
 
 class BlinkRTCDataChannelEvent {
-  static $channel_Getter(mthis) native "RTCDataChannelEvent_channel_Getter";
+  static channel_Getter(mthis) native "RTCDataChannelEvent_channel_Getter";
 }
 
 class BlinkRTCIceCandidate {
-  static $_create_1constructorCallback(dictionary) native "RTCIceCandidate_constructorCallback_RESOLVER_STRING_1_Dictionary";
+  static constructorCallback_Dictionary(dictionary) native "RTCIceCandidate_constructorCallback_Dictionary";
 
-  static $candidate_Getter(mthis) native "RTCIceCandidate_candidate_Getter";
+  static candidate_Getter(mthis) native "RTCIceCandidate_candidate_Getter";
 
-  static $sdpMLineIndex_Getter(mthis) native "RTCIceCandidate_sdpMLineIndex_Getter";
+  static sdpMLineIndex_Getter(mthis) native "RTCIceCandidate_sdpMLineIndex_Getter";
 
-  static $sdpMid_Getter(mthis) native "RTCIceCandidate_sdpMid_Getter";
+  static sdpMid_Getter(mthis) native "RTCIceCandidate_sdpMid_Getter";
 }
 
 class BlinkRTCIceCandidateEvent {
-  static $candidate_Getter(mthis) native "RTCIceCandidateEvent_candidate_Getter";
+  static candidate_Getter(mthis) native "RTCIceCandidateEvent_candidate_Getter";
 }
 
 class BlinkRTCPeerConnection {
-  static $_create_1constructorCallback(rtcIceServers, mediaConstraints) native "RTCPeerConnection_constructorCallback_RESOLVER_STRING_2_Dictionary_Dictionary";
+  static constructorCallback_Dictionary_Dictionary(rtcIceServers, mediaConstraints) native "RTCPeerConnection_constructorCallback_Dictionary_Dictionary";
 
-  static $iceConnectionState_Getter(mthis) native "RTCPeerConnection_iceConnectionState_Getter";
+  static iceConnectionState_Getter(mthis) native "RTCPeerConnection_iceConnectionState_Getter";
 
-  static $iceGatheringState_Getter(mthis) native "RTCPeerConnection_iceGatheringState_Getter";
+  static iceGatheringState_Getter(mthis) native "RTCPeerConnection_iceGatheringState_Getter";
 
-  static $localDescription_Getter(mthis) native "RTCPeerConnection_localDescription_Getter";
+  static localDescription_Getter(mthis) native "RTCPeerConnection_localDescription_Getter";
 
-  static $remoteDescription_Getter(mthis) native "RTCPeerConnection_remoteDescription_Getter";
+  static remoteDescription_Getter(mthis) native "RTCPeerConnection_remoteDescription_Getter";
 
-  static $signalingState_Getter(mthis) native "RTCPeerConnection_signalingState_Getter";
+  static signalingState_Getter(mthis) native "RTCPeerConnection_signalingState_Getter";
 
-  static $addIceCandidate_Callback(mthis, candidate, successCallback, failureCallback) native "RTCPeerConnection_addIceCandidate_Callback_RESOLVER_STRING_3_RTCIceCandidate_VoidCallback_RTCErrorCallback";
+  static addIceCandidate_Callback_RTCIceCandidate_VoidCallback_RTCErrorCallback(mthis, candidate, successCallback, failureCallback) native "RTCPeerConnection_addIceCandidate_Callback_RTCIceCandidate_VoidCallback_RTCErrorCallback";
 
-  static $addStream_Callback(mthis, stream, mediaConstraints) native "RTCPeerConnection_addStream_Callback_RESOLVER_STRING_2_MediaStream_Dictionary";
+  static addStream_Callback_MediaStream_Dictionary(mthis, stream, mediaConstraints) native "RTCPeerConnection_addStream_Callback_MediaStream_Dictionary";
 
-  static $close_Callback(mthis) native "RTCPeerConnection_close_Callback_RESOLVER_STRING_0_";
+  static close_Callback(mthis) native "RTCPeerConnection_close_Callback";
 
-  static $createAnswer_Callback(mthis, successCallback, failureCallback, mediaConstraints) native "RTCPeerConnection_createAnswer_Callback_RESOLVER_STRING_3_RTCSessionDescriptionCallback_RTCErrorCallback_Dictionary";
+  static createAnswer_Callback_RTCSessionDescriptionCallback_RTCErrorCallback_Dictionary(mthis, successCallback, failureCallback, mediaConstraints) native "RTCPeerConnection_createAnswer_Callback_RTCSessionDescriptionCallback_RTCErrorCallback_Dictionary";
 
-  static $createDTMFSender_Callback(mthis, track) native "RTCPeerConnection_createDTMFSender_Callback_RESOLVER_STRING_1_MediaStreamTrack";
+  static createDTMFSender_Callback_MediaStreamTrack(mthis, track) native "RTCPeerConnection_createDTMFSender_Callback_MediaStreamTrack";
 
-  static $createDataChannel_Callback(mthis, label, options) native "RTCPeerConnection_createDataChannel_Callback_RESOLVER_STRING_2_DOMString_Dictionary";
+  static createDataChannel_Callback_DOMString_Dictionary(mthis, label, options) native "RTCPeerConnection_createDataChannel_Callback_DOMString_Dictionary";
 
-  static $createOffer_Callback(mthis, successCallback, failureCallback, mediaConstraints) native "RTCPeerConnection_createOffer_Callback_RESOLVER_STRING_3_RTCSessionDescriptionCallback_RTCErrorCallback_Dictionary";
+  static createOffer_Callback_RTCSessionDescriptionCallback_RTCErrorCallback_Dictionary(mthis, successCallback, failureCallback, mediaConstraints) native "RTCPeerConnection_createOffer_Callback_RTCSessionDescriptionCallback_RTCErrorCallback_Dictionary";
 
-  static $getLocalStreams_Callback(mthis) native "RTCPeerConnection_getLocalStreams_Callback_RESOLVER_STRING_0_";
+  static getLocalStreams_Callback(mthis) native "RTCPeerConnection_getLocalStreams_Callback";
 
-  static $getRemoteStreams_Callback(mthis) native "RTCPeerConnection_getRemoteStreams_Callback_RESOLVER_STRING_0_";
+  static getRemoteStreams_Callback(mthis) native "RTCPeerConnection_getRemoteStreams_Callback";
 
-  static $getStats_Callback(mthis, successCallback, selector) native "RTCPeerConnection_getStats_Callback_RESOLVER_STRING_2_RTCStatsCallback_MediaStreamTrack";
+  static getStats_Callback_RTCStatsCallback_MediaStreamTrack(mthis, successCallback, selector) native "RTCPeerConnection_getStats_Callback_RTCStatsCallback_MediaStreamTrack";
 
-  static $getStreamById_Callback(mthis, streamId) native "RTCPeerConnection_getStreamById_Callback_RESOLVER_STRING_1_DOMString";
+  static getStreamById_Callback_DOMString(mthis, streamId) native "RTCPeerConnection_getStreamById_Callback_DOMString";
 
-  static $removeStream_Callback(mthis, stream) native "RTCPeerConnection_removeStream_Callback_RESOLVER_STRING_1_MediaStream";
+  static removeStream_Callback_MediaStream(mthis, stream) native "RTCPeerConnection_removeStream_Callback_MediaStream";
 
-  static $setLocalDescription_Callback(mthis, description, successCallback, failureCallback) native "RTCPeerConnection_setLocalDescription_Callback_RESOLVER_STRING_3_RTCSessionDescription_VoidCallback_RTCErrorCallback";
+  static setLocalDescription_Callback_RTCSessionDescription_VoidCallback_RTCErrorCallback(mthis, description, successCallback, failureCallback) native "RTCPeerConnection_setLocalDescription_Callback_RTCSessionDescription_VoidCallback_RTCErrorCallback";
 
-  static $setRemoteDescription_Callback(mthis, description, successCallback, failureCallback) native "RTCPeerConnection_setRemoteDescription_Callback_RESOLVER_STRING_3_RTCSessionDescription_VoidCallback_RTCErrorCallback";
+  static setRemoteDescription_Callback_RTCSessionDescription_VoidCallback_RTCErrorCallback(mthis, description, successCallback, failureCallback) native "RTCPeerConnection_setRemoteDescription_Callback_RTCSessionDescription_VoidCallback_RTCErrorCallback";
 
-  static $updateIce_Callback(mthis, configuration, mediaConstraints) native "RTCPeerConnection_updateIce_Callback_RESOLVER_STRING_2_Dictionary_Dictionary";
+  static updateIce_Callback_Dictionary_Dictionary(mthis, configuration, mediaConstraints) native "RTCPeerConnection_updateIce_Callback_Dictionary_Dictionary";
 }
 
 class BlinkRTCSessionDescription {
-  static $_create_1constructorCallback(descriptionInitDict) native "RTCSessionDescription_constructorCallback_RESOLVER_STRING_1_Dictionary";
+  static constructorCallback_Dictionary(descriptionInitDict) native "RTCSessionDescription_constructorCallback_Dictionary";
 
-  static $sdp_Getter(mthis) native "RTCSessionDescription_sdp_Getter";
+  static sdp_Getter(mthis) native "RTCSessionDescription_sdp_Getter";
 
-  static $sdp_Setter(mthis, value) native "RTCSessionDescription_sdp_Setter";
+  static sdp_Setter_DOMString(mthis, value) native "RTCSessionDescription_sdp_Setter";
 
-  static $type_Getter(mthis) native "RTCSessionDescription_type_Getter";
+  static type_Getter(mthis) native "RTCSessionDescription_type_Getter";
 
-  static $type_Setter(mthis, value) native "RTCSessionDescription_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "RTCSessionDescription_type_Setter";
 }
 
 class BlinkRTCStatsReport {
-  static $id_Getter(mthis) native "RTCStatsReport_id_Getter";
+  static id_Getter(mthis) native "RTCStatsReport_id_Getter";
 
-  static $local_Getter(mthis) native "RTCStatsReport_local_Getter";
+  static local_Getter(mthis) native "RTCStatsReport_local_Getter";
 
-  static $remote_Getter(mthis) native "RTCStatsReport_remote_Getter";
+  static remote_Getter(mthis) native "RTCStatsReport_remote_Getter";
 
-  static $timestamp_Getter(mthis) native "RTCStatsReport_timestamp_Getter";
+  static timestamp_Getter(mthis) native "RTCStatsReport_timestamp_Getter";
 
-  static $type_Getter(mthis) native "RTCStatsReport_type_Getter";
+  static type_Getter(mthis) native "RTCStatsReport_type_Getter";
 
-  static $names_Callback(mthis) native "RTCStatsReport_names_Callback_RESOLVER_STRING_0_";
+  static names_Callback(mthis) native "RTCStatsReport_names_Callback";
 
-  static $stat_Callback(mthis, name) native "RTCStatsReport_stat_Callback_RESOLVER_STRING_1_DOMString";
+  static stat_Callback_DOMString(mthis, name) native "RTCStatsReport_stat_Callback_DOMString";
 }
 
 class BlinkRTCStatsResponse {
-  static $__getter___Callback(mthis, name) native "RTCStatsResponse___getter___Callback_RESOLVER_STRING_1_DOMString";
+  static $__getter___Callback_DOMString(mthis, name) native "RTCStatsResponse___getter___Callback_DOMString";
 
-  static $namedItem_Callback(mthis, name) native "RTCStatsResponse_namedItem_Callback_RESOLVER_STRING_1_DOMString";
+  static namedItem_Callback_DOMString(mthis, name) native "RTCStatsResponse_namedItem_Callback_DOMString";
 
-  static $result_Callback(mthis) native "RTCStatsResponse_result_Callback_RESOLVER_STRING_0_";
+  static result_Callback(mthis) native "RTCStatsResponse_result_Callback";
 }
 
 class BlinkRadioNodeList {}
 
 class BlinkRange {
-  static $collapsed_Getter(mthis) native "Range_collapsed_Getter";
+  static collapsed_Getter(mthis) native "Range_collapsed_Getter";
 
-  static $commonAncestorContainer_Getter(mthis) native "Range_commonAncestorContainer_Getter";
+  static commonAncestorContainer_Getter(mthis) native "Range_commonAncestorContainer_Getter";
 
-  static $endContainer_Getter(mthis) native "Range_endContainer_Getter";
+  static endContainer_Getter(mthis) native "Range_endContainer_Getter";
 
-  static $endOffset_Getter(mthis) native "Range_endOffset_Getter";
+  static endOffset_Getter(mthis) native "Range_endOffset_Getter";
 
-  static $startContainer_Getter(mthis) native "Range_startContainer_Getter";
+  static startContainer_Getter(mthis) native "Range_startContainer_Getter";
 
-  static $startOffset_Getter(mthis) native "Range_startOffset_Getter";
+  static startOffset_Getter(mthis) native "Range_startOffset_Getter";
 
-  static $cloneContents_Callback(mthis) native "Range_cloneContents_Callback_RESOLVER_STRING_0_";
+  static cloneContents_Callback(mthis) native "Range_cloneContents_Callback";
 
-  static $cloneRange_Callback(mthis) native "Range_cloneRange_Callback_RESOLVER_STRING_0_";
+  static cloneRange_Callback(mthis) native "Range_cloneRange_Callback";
 
-  static $collapse_Callback(mthis, toStart) native "Range_collapse_Callback_RESOLVER_STRING_1_boolean";
+  static collapse_Callback_boolean(mthis, toStart) native "Range_collapse_Callback_boolean";
 
-  static $comparePoint_Callback(mthis, refNode, offset) native "Range_comparePoint_Callback_RESOLVER_STRING_2_Node_long";
+  static comparePoint_Callback_Node_long(mthis, refNode, offset) native "Range_comparePoint_Callback_Node_long";
 
-  static $createContextualFragment_Callback(mthis, html) native "Range_createContextualFragment_Callback_RESOLVER_STRING_1_DOMString";
+  static createContextualFragment_Callback_DOMString(mthis, html) native "Range_createContextualFragment_Callback_DOMString";
 
-  static $deleteContents_Callback(mthis) native "Range_deleteContents_Callback_RESOLVER_STRING_0_";
+  static deleteContents_Callback(mthis) native "Range_deleteContents_Callback";
 
-  static $detach_Callback(mthis) native "Range_detach_Callback_RESOLVER_STRING_0_";
+  static detach_Callback(mthis) native "Range_detach_Callback";
 
-  static $expand_Callback(mthis, unit) native "Range_expand_Callback_RESOLVER_STRING_1_DOMString";
+  static expand_Callback_DOMString(mthis, unit) native "Range_expand_Callback_DOMString";
 
-  static $extractContents_Callback(mthis) native "Range_extractContents_Callback_RESOLVER_STRING_0_";
+  static extractContents_Callback(mthis) native "Range_extractContents_Callback";
 
-  static $getBoundingClientRect_Callback(mthis) native "Range_getBoundingClientRect_Callback_RESOLVER_STRING_0_";
+  static getBoundingClientRect_Callback(mthis) native "Range_getBoundingClientRect_Callback";
 
-  static $getClientRects_Callback(mthis) native "Range_getClientRects_Callback_RESOLVER_STRING_0_";
+  static getClientRects_Callback(mthis) native "Range_getClientRects_Callback";
 
-  static $insertNode_Callback(mthis, newNode) native "Range_insertNode_Callback_RESOLVER_STRING_1_Node";
+  static insertNode_Callback_Node(mthis, newNode) native "Range_insertNode_Callback_Node";
 
-  static $isPointInRange_Callback(mthis, refNode, offset) native "Range_isPointInRange_Callback_RESOLVER_STRING_2_Node_long";
+  static isPointInRange_Callback_Node_long(mthis, refNode, offset) native "Range_isPointInRange_Callback_Node_long";
 
-  static $selectNode_Callback(mthis, refNode) native "Range_selectNode_Callback_RESOLVER_STRING_1_Node";
+  static selectNode_Callback_Node(mthis, refNode) native "Range_selectNode_Callback_Node";
 
-  static $selectNodeContents_Callback(mthis, refNode) native "Range_selectNodeContents_Callback_RESOLVER_STRING_1_Node";
+  static selectNodeContents_Callback_Node(mthis, refNode) native "Range_selectNodeContents_Callback_Node";
 
-  static $setEnd_Callback(mthis, refNode, offset) native "Range_setEnd_Callback_RESOLVER_STRING_2_Node_long";
+  static setEnd_Callback_Node_long(mthis, refNode, offset) native "Range_setEnd_Callback_Node_long";
 
-  static $setEndAfter_Callback(mthis, refNode) native "Range_setEndAfter_Callback_RESOLVER_STRING_1_Node";
+  static setEndAfter_Callback_Node(mthis, refNode) native "Range_setEndAfter_Callback_Node";
 
-  static $setEndBefore_Callback(mthis, refNode) native "Range_setEndBefore_Callback_RESOLVER_STRING_1_Node";
+  static setEndBefore_Callback_Node(mthis, refNode) native "Range_setEndBefore_Callback_Node";
 
-  static $setStart_Callback(mthis, refNode, offset) native "Range_setStart_Callback_RESOLVER_STRING_2_Node_long";
+  static setStart_Callback_Node_long(mthis, refNode, offset) native "Range_setStart_Callback_Node_long";
 
-  static $setStartAfter_Callback(mthis, refNode) native "Range_setStartAfter_Callback_RESOLVER_STRING_1_Node";
+  static setStartAfter_Callback_Node(mthis, refNode) native "Range_setStartAfter_Callback_Node";
 
-  static $setStartBefore_Callback(mthis, refNode) native "Range_setStartBefore_Callback_RESOLVER_STRING_1_Node";
+  static setStartBefore_Callback_Node(mthis, refNode) native "Range_setStartBefore_Callback_Node";
 
-  static $surroundContents_Callback(mthis, newParent) native "Range_surroundContents_Callback_RESOLVER_STRING_1_Node";
+  static surroundContents_Callback_Node(mthis, newParent) native "Range_surroundContents_Callback_Node";
 
-  static $toString_Callback(mthis) native "Range_toString_Callback_RESOLVER_STRING_0_";
+  static toString_Callback(mthis) native "Range_toString_Callback";
 }
 
 class BlinkRect {}
 
 class BlinkResourceProgressEvent {
-  static $url_Getter(mthis) native "ResourceProgressEvent_url_Getter";
+  static url_Getter(mthis) native "ResourceProgressEvent_url_Getter";
 }
 
 class BlinkSQLError {
-  static $code_Getter(mthis) native "SQLError_code_Getter";
+  static code_Getter(mthis) native "SQLError_code_Getter";
 
-  static $message_Getter(mthis) native "SQLError_message_Getter";
+  static message_Getter(mthis) native "SQLError_message_Getter";
 }
 
 class BlinkSQLResultSet {
-  static $insertId_Getter(mthis) native "SQLResultSet_insertId_Getter";
+  static insertId_Getter(mthis) native "SQLResultSet_insertId_Getter";
 
-  static $rows_Getter(mthis) native "SQLResultSet_rows_Getter";
+  static rows_Getter(mthis) native "SQLResultSet_rows_Getter";
 
-  static $rowsAffected_Getter(mthis) native "SQLResultSet_rowsAffected_Getter";
+  static rowsAffected_Getter(mthis) native "SQLResultSet_rowsAffected_Getter";
 }
 
 class BlinkSQLResultSetRowList {
-  static $length_Getter(mthis) native "SQLResultSetRowList_length_Getter";
+  static length_Getter(mthis) native "SQLResultSetRowList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "SQLResultSetRowList_item_Callback";
-
-  static $item_Callback(mthis, index) native "SQLResultSetRowList_item_Callback";
+  static item_Callback_ul(mthis, index) native "SQLResultSetRowList_item_Callback";
 }
 
 class BlinkSQLTransaction {
-  static $executeSql_Callback(mthis, sqlStatement, arguments, callback, errorCallback) native "SQLTransaction_executeSql_Callback";
+  static executeSql_Callback_DOMString_A_object_A_SQLStatementCallback_SQLStatementErrorCallback(mthis, sqlStatement, arguments, callback, errorCallback) native "SQLTransaction_executeSql_Callback";
 }
 
 class BlinkSQLTransactionSync {}
 
 class BlinkSVGElement {
-  static $className_Getter(mthis) native "SVGElement_className_Getter";
+  static className_Getter(mthis) native "SVGElement_className_Getter";
 
-  static $ownerSVGElement_Getter(mthis) native "SVGElement_ownerSVGElement_Getter";
+  static ownerSVGElement_Getter(mthis) native "SVGElement_ownerSVGElement_Getter";
 
-  static $style_Getter(mthis) native "SVGElement_style_Getter";
+  static style_Getter(mthis) native "SVGElement_style_Getter";
 
-  static $viewportElement_Getter(mthis) native "SVGElement_viewportElement_Getter";
+  static viewportElement_Getter(mthis) native "SVGElement_viewportElement_Getter";
 
-  static $xmlbase_Getter(mthis) native "SVGElement_xmlbase_Getter";
+  static xmlbase_Getter(mthis) native "SVGElement_xmlbase_Getter";
 
-  static $xmlbase_Setter(mthis, value) native "SVGElement_xmlbase_Setter";
+  static xmlbase_Setter_DOMString(mthis, value) native "SVGElement_xmlbase_Setter";
 
-  static $xmllang_Getter(mthis) native "SVGElement_xmllang_Getter";
+  static xmllang_Getter(mthis) native "SVGElement_xmllang_Getter";
 
-  static $xmllang_Setter(mthis, value) native "SVGElement_xmllang_Setter";
+  static xmllang_Setter_DOMString(mthis, value) native "SVGElement_xmllang_Setter";
 
-  static $xmlspace_Getter(mthis) native "SVGElement_xmlspace_Getter";
+  static xmlspace_Getter(mthis) native "SVGElement_xmlspace_Getter";
 
-  static $xmlspace_Setter(mthis, value) native "SVGElement_xmlspace_Setter";
+  static xmlspace_Setter_DOMString(mthis, value) native "SVGElement_xmlspace_Setter";
 }
 
 class BlinkSVGTests {
-  static $requiredExtensions_Getter(mthis) native "SVGTests_requiredExtensions_Getter";
+  static requiredExtensions_Getter(mthis) native "SVGTests_requiredExtensions_Getter";
 
-  static $requiredFeatures_Getter(mthis) native "SVGTests_requiredFeatures_Getter";
+  static requiredFeatures_Getter(mthis) native "SVGTests_requiredFeatures_Getter";
 
-  static $systemLanguage_Getter(mthis) native "SVGTests_systemLanguage_Getter";
+  static systemLanguage_Getter(mthis) native "SVGTests_systemLanguage_Getter";
 
-  static $hasExtension_Callback(mthis, extension) native "SVGTests_hasExtension_Callback_RESOLVER_STRING_1_DOMString";
+  static hasExtension_Callback_DOMString(mthis, extension) native "SVGTests_hasExtension_Callback_DOMString";
 }
 
 class BlinkSVGGraphicsElement {
-  static $farthestViewportElement_Getter(mthis) native "SVGGraphicsElement_farthestViewportElement_Getter";
+  static farthestViewportElement_Getter(mthis) native "SVGGraphicsElement_farthestViewportElement_Getter";
 
-  static $nearestViewportElement_Getter(mthis) native "SVGGraphicsElement_nearestViewportElement_Getter";
+  static nearestViewportElement_Getter(mthis) native "SVGGraphicsElement_nearestViewportElement_Getter";
 
-  static $transform_Getter(mthis) native "SVGGraphicsElement_transform_Getter";
+  static transform_Getter(mthis) native "SVGGraphicsElement_transform_Getter";
 
-  static $getBBox_Callback(mthis) native "SVGGraphicsElement_getBBox_Callback_RESOLVER_STRING_0_";
+  static getBBox_Callback(mthis) native "SVGGraphicsElement_getBBox_Callback";
 
-  static $getCTM_Callback(mthis) native "SVGGraphicsElement_getCTM_Callback_RESOLVER_STRING_0_";
+  static getCTM_Callback(mthis) native "SVGGraphicsElement_getCTM_Callback";
 
-  static $getScreenCTM_Callback(mthis) native "SVGGraphicsElement_getScreenCTM_Callback_RESOLVER_STRING_0_";
+  static getScreenCTM_Callback(mthis) native "SVGGraphicsElement_getScreenCTM_Callback";
 
-  static $getTransformToElement_Callback(mthis, element) native "SVGGraphicsElement_getTransformToElement_Callback_RESOLVER_STRING_1_SVGElement";
+  static getTransformToElement_Callback_SVGElement(mthis, element) native "SVGGraphicsElement_getTransformToElement_Callback_SVGElement";
 
-  static $requiredExtensions_Getter(mthis) native "SVGGraphicsElement_requiredExtensions_Getter";
+  static requiredExtensions_Getter(mthis) native "SVGGraphicsElement_requiredExtensions_Getter";
 
-  static $requiredFeatures_Getter(mthis) native "SVGGraphicsElement_requiredFeatures_Getter";
+  static requiredFeatures_Getter(mthis) native "SVGGraphicsElement_requiredFeatures_Getter";
 
-  static $systemLanguage_Getter(mthis) native "SVGGraphicsElement_systemLanguage_Getter";
+  static systemLanguage_Getter(mthis) native "SVGGraphicsElement_systemLanguage_Getter";
 
-  static $hasExtension_Callback(mthis, extension) native "SVGGraphicsElement_hasExtension_Callback_RESOLVER_STRING_1_DOMString";
+  static hasExtension_Callback_DOMString(mthis, extension) native "SVGGraphicsElement_hasExtension_Callback_DOMString";
 }
 
 class BlinkSVGURIReference {
-  static $href_Getter(mthis) native "SVGURIReference_href_Getter";
+  static href_Getter(mthis) native "SVGURIReference_href_Getter";
 }
 
 class BlinkSVGAElement {
-  static $target_Getter(mthis) native "SVGAElement_target_Getter";
+  static target_Getter(mthis) native "SVGAElement_target_Getter";
 
-  static $href_Getter(mthis) native "SVGAElement_href_Getter";
+  static href_Getter(mthis) native "SVGAElement_href_Getter";
 }
 
 class BlinkSVGAltGlyphDefElement {}
 
 class BlinkSVGTextContentElement {
-  static $lengthAdjust_Getter(mthis) native "SVGTextContentElement_lengthAdjust_Getter";
+  static lengthAdjust_Getter(mthis) native "SVGTextContentElement_lengthAdjust_Getter";
 
-  static $textLength_Getter(mthis) native "SVGTextContentElement_textLength_Getter";
+  static textLength_Getter(mthis) native "SVGTextContentElement_textLength_Getter";
 
-  static $getCharNumAtPosition_Callback(mthis, point) native "SVGTextContentElement_getCharNumAtPosition_Callback_RESOLVER_STRING_1_SVGPoint";
+  static getCharNumAtPosition_Callback_SVGPoint(mthis, point) native "SVGTextContentElement_getCharNumAtPosition_Callback_SVGPoint";
 
-  static $getComputedTextLength_Callback(mthis) native "SVGTextContentElement_getComputedTextLength_Callback_RESOLVER_STRING_0_";
+  static getComputedTextLength_Callback(mthis) native "SVGTextContentElement_getComputedTextLength_Callback";
 
-  static $getEndPositionOfChar_Callback(mthis, offset) native "SVGTextContentElement_getEndPositionOfChar_Callback_RESOLVER_STRING_1_unsigned long";
+  static getEndPositionOfChar_Callback_ul(mthis, offset) native "SVGTextContentElement_getEndPositionOfChar_Callback_unsigned long";
 
-  static $getExtentOfChar_Callback(mthis, offset) native "SVGTextContentElement_getExtentOfChar_Callback_RESOLVER_STRING_1_unsigned long";
+  static getExtentOfChar_Callback_ul(mthis, offset) native "SVGTextContentElement_getExtentOfChar_Callback_unsigned long";
 
-  static $getNumberOfChars_Callback(mthis) native "SVGTextContentElement_getNumberOfChars_Callback_RESOLVER_STRING_0_";
+  static getNumberOfChars_Callback(mthis) native "SVGTextContentElement_getNumberOfChars_Callback";
 
-  static $getRotationOfChar_Callback(mthis, offset) native "SVGTextContentElement_getRotationOfChar_Callback_RESOLVER_STRING_1_unsigned long";
+  static getRotationOfChar_Callback_ul(mthis, offset) native "SVGTextContentElement_getRotationOfChar_Callback_unsigned long";
 
-  static $getStartPositionOfChar_Callback(mthis, offset) native "SVGTextContentElement_getStartPositionOfChar_Callback_RESOLVER_STRING_1_unsigned long";
+  static getStartPositionOfChar_Callback_ul(mthis, offset) native "SVGTextContentElement_getStartPositionOfChar_Callback_unsigned long";
 
-  static $getSubStringLength_Callback(mthis, offset, length) native "SVGTextContentElement_getSubStringLength_Callback_RESOLVER_STRING_2_unsigned long_unsigned long";
+  static getSubStringLength_Callback_ul_ul(mthis, offset, length) native "SVGTextContentElement_getSubStringLength_Callback_unsigned long_unsigned long";
 
-  static $selectSubString_Callback(mthis, offset, length) native "SVGTextContentElement_selectSubString_Callback_RESOLVER_STRING_2_unsigned long_unsigned long";
+  static selectSubString_Callback_ul_ul(mthis, offset, length) native "SVGTextContentElement_selectSubString_Callback_unsigned long_unsigned long";
 }
 
 class BlinkSVGTextPositioningElement {
-  static $dx_Getter(mthis) native "SVGTextPositioningElement_dx_Getter";
+  static dx_Getter(mthis) native "SVGTextPositioningElement_dx_Getter";
 
-  static $dy_Getter(mthis) native "SVGTextPositioningElement_dy_Getter";
+  static dy_Getter(mthis) native "SVGTextPositioningElement_dy_Getter";
 
-  static $rotate_Getter(mthis) native "SVGTextPositioningElement_rotate_Getter";
+  static rotate_Getter(mthis) native "SVGTextPositioningElement_rotate_Getter";
 
-  static $x_Getter(mthis) native "SVGTextPositioningElement_x_Getter";
+  static x_Getter(mthis) native "SVGTextPositioningElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGTextPositioningElement_y_Getter";
+  static y_Getter(mthis) native "SVGTextPositioningElement_y_Getter";
 }
 
 class BlinkSVGAltGlyphElement {
-  static $format_Getter(mthis) native "SVGAltGlyphElement_format_Getter";
+  static format_Getter(mthis) native "SVGAltGlyphElement_format_Getter";
 
-  static $format_Setter(mthis, value) native "SVGAltGlyphElement_format_Setter";
+  static format_Setter_DOMString(mthis, value) native "SVGAltGlyphElement_format_Setter";
 
-  static $glyphRef_Getter(mthis) native "SVGAltGlyphElement_glyphRef_Getter";
+  static glyphRef_Getter(mthis) native "SVGAltGlyphElement_glyphRef_Getter";
 
-  static $glyphRef_Setter(mthis, value) native "SVGAltGlyphElement_glyphRef_Setter";
+  static glyphRef_Setter_DOMString(mthis, value) native "SVGAltGlyphElement_glyphRef_Setter";
 
-  static $href_Getter(mthis) native "SVGAltGlyphElement_href_Getter";
+  static href_Getter(mthis) native "SVGAltGlyphElement_href_Getter";
 }
 
 class BlinkSVGAltGlyphItemElement {}
 
 class BlinkSVGAngle {
-  static $unitType_Getter(mthis) native "SVGAngle_unitType_Getter";
+  static unitType_Getter(mthis) native "SVGAngle_unitType_Getter";
 
-  static $value_Getter(mthis) native "SVGAngle_value_Getter";
+  static value_Getter(mthis) native "SVGAngle_value_Getter";
 
-  static $value_Setter(mthis, value) native "SVGAngle_value_Setter";
+  static value_Setter_float(mthis, value) native "SVGAngle_value_Setter";
 
-  static $valueAsString_Getter(mthis) native "SVGAngle_valueAsString_Getter";
+  static valueAsString_Getter(mthis) native "SVGAngle_valueAsString_Getter";
 
-  static $valueAsString_Setter(mthis, value) native "SVGAngle_valueAsString_Setter";
+  static valueAsString_Setter_DOMString(mthis, value) native "SVGAngle_valueAsString_Setter";
 
-  static $valueInSpecifiedUnits_Getter(mthis) native "SVGAngle_valueInSpecifiedUnits_Getter";
+  static valueInSpecifiedUnits_Getter(mthis) native "SVGAngle_valueInSpecifiedUnits_Getter";
 
-  static $valueInSpecifiedUnits_Setter(mthis, value) native "SVGAngle_valueInSpecifiedUnits_Setter";
+  static valueInSpecifiedUnits_Setter_float(mthis, value) native "SVGAngle_valueInSpecifiedUnits_Setter";
 
-  static $convertToSpecifiedUnits_Callback(mthis, unitType) native "SVGAngle_convertToSpecifiedUnits_Callback_RESOLVER_STRING_1_unsigned short";
+  static convertToSpecifiedUnits_Callback_us(mthis, unitType) native "SVGAngle_convertToSpecifiedUnits_Callback_unsigned short";
 
-  static $newValueSpecifiedUnits_Callback(mthis, unitType, valueInSpecifiedUnits) native "SVGAngle_newValueSpecifiedUnits_Callback_RESOLVER_STRING_2_unsigned short_float";
+  static newValueSpecifiedUnits_Callback_us_float(mthis, unitType, valueInSpecifiedUnits) native "SVGAngle_newValueSpecifiedUnits_Callback_unsigned short_float";
 }
 
 class BlinkSVGAnimationElement {
-  static $targetElement_Getter(mthis) native "SVGAnimationElement_targetElement_Getter";
+  static targetElement_Getter(mthis) native "SVGAnimationElement_targetElement_Getter";
 
-  static $beginElement_Callback(mthis) native "SVGAnimationElement_beginElement_Callback_RESOLVER_STRING_0_";
+  static beginElement_Callback(mthis) native "SVGAnimationElement_beginElement_Callback";
 
-  static $beginElementAt_Callback(mthis, offset) native "SVGAnimationElement_beginElementAt_Callback_RESOLVER_STRING_1_float";
+  static beginElementAt_Callback_float(mthis, offset) native "SVGAnimationElement_beginElementAt_Callback_float";
 
-  static $endElement_Callback(mthis) native "SVGAnimationElement_endElement_Callback_RESOLVER_STRING_0_";
+  static endElement_Callback(mthis) native "SVGAnimationElement_endElement_Callback";
 
-  static $endElementAt_Callback(mthis, offset) native "SVGAnimationElement_endElementAt_Callback_RESOLVER_STRING_1_float";
+  static endElementAt_Callback_float(mthis, offset) native "SVGAnimationElement_endElementAt_Callback_float";
 
-  static $getCurrentTime_Callback(mthis) native "SVGAnimationElement_getCurrentTime_Callback_RESOLVER_STRING_0_";
+  static getCurrentTime_Callback(mthis) native "SVGAnimationElement_getCurrentTime_Callback";
 
-  static $getSimpleDuration_Callback(mthis) native "SVGAnimationElement_getSimpleDuration_Callback_RESOLVER_STRING_0_";
+  static getSimpleDuration_Callback(mthis) native "SVGAnimationElement_getSimpleDuration_Callback";
 
-  static $getStartTime_Callback(mthis) native "SVGAnimationElement_getStartTime_Callback_RESOLVER_STRING_0_";
+  static getStartTime_Callback(mthis) native "SVGAnimationElement_getStartTime_Callback";
 
-  static $requiredExtensions_Getter(mthis) native "SVGAnimationElement_requiredExtensions_Getter";
+  static requiredExtensions_Getter(mthis) native "SVGAnimationElement_requiredExtensions_Getter";
 
-  static $requiredFeatures_Getter(mthis) native "SVGAnimationElement_requiredFeatures_Getter";
+  static requiredFeatures_Getter(mthis) native "SVGAnimationElement_requiredFeatures_Getter";
 
-  static $systemLanguage_Getter(mthis) native "SVGAnimationElement_systemLanguage_Getter";
+  static systemLanguage_Getter(mthis) native "SVGAnimationElement_systemLanguage_Getter";
 
-  static $hasExtension_Callback(mthis, extension) native "SVGAnimationElement_hasExtension_Callback_RESOLVER_STRING_1_DOMString";
+  static hasExtension_Callback_DOMString(mthis, extension) native "SVGAnimationElement_hasExtension_Callback_DOMString";
 }
 
 class BlinkSVGAnimateElement {}
@@ -5073,103 +5031,103 @@
 class BlinkSVGAnimateTransformElement {}
 
 class BlinkSVGAnimatedAngle {
-  static $animVal_Getter(mthis) native "SVGAnimatedAngle_animVal_Getter";
+  static animVal_Getter(mthis) native "SVGAnimatedAngle_animVal_Getter";
 
-  static $baseVal_Getter(mthis) native "SVGAnimatedAngle_baseVal_Getter";
+  static baseVal_Getter(mthis) native "SVGAnimatedAngle_baseVal_Getter";
 }
 
 class BlinkSVGAnimatedBoolean {
-  static $animVal_Getter(mthis) native "SVGAnimatedBoolean_animVal_Getter";
+  static animVal_Getter(mthis) native "SVGAnimatedBoolean_animVal_Getter";
 
-  static $baseVal_Getter(mthis) native "SVGAnimatedBoolean_baseVal_Getter";
+  static baseVal_Getter(mthis) native "SVGAnimatedBoolean_baseVal_Getter";
 
-  static $baseVal_Setter(mthis, value) native "SVGAnimatedBoolean_baseVal_Setter";
+  static baseVal_Setter_boolean(mthis, value) native "SVGAnimatedBoolean_baseVal_Setter";
 }
 
 class BlinkSVGAnimatedEnumeration {
-  static $animVal_Getter(mthis) native "SVGAnimatedEnumeration_animVal_Getter";
+  static animVal_Getter(mthis) native "SVGAnimatedEnumeration_animVal_Getter";
 
-  static $baseVal_Getter(mthis) native "SVGAnimatedEnumeration_baseVal_Getter";
+  static baseVal_Getter(mthis) native "SVGAnimatedEnumeration_baseVal_Getter";
 
-  static $baseVal_Setter(mthis, value) native "SVGAnimatedEnumeration_baseVal_Setter";
+  static baseVal_Setter_us(mthis, value) native "SVGAnimatedEnumeration_baseVal_Setter";
 }
 
 class BlinkSVGAnimatedInteger {
-  static $animVal_Getter(mthis) native "SVGAnimatedInteger_animVal_Getter";
+  static animVal_Getter(mthis) native "SVGAnimatedInteger_animVal_Getter";
 
-  static $baseVal_Getter(mthis) native "SVGAnimatedInteger_baseVal_Getter";
+  static baseVal_Getter(mthis) native "SVGAnimatedInteger_baseVal_Getter";
 
-  static $baseVal_Setter(mthis, value) native "SVGAnimatedInteger_baseVal_Setter";
+  static baseVal_Setter_long(mthis, value) native "SVGAnimatedInteger_baseVal_Setter";
 }
 
 class BlinkSVGAnimatedLength {
-  static $animVal_Getter(mthis) native "SVGAnimatedLength_animVal_Getter";
+  static animVal_Getter(mthis) native "SVGAnimatedLength_animVal_Getter";
 
-  static $baseVal_Getter(mthis) native "SVGAnimatedLength_baseVal_Getter";
+  static baseVal_Getter(mthis) native "SVGAnimatedLength_baseVal_Getter";
 }
 
 class BlinkSVGAnimatedLengthList {
-  static $animVal_Getter(mthis) native "SVGAnimatedLengthList_animVal_Getter";
+  static animVal_Getter(mthis) native "SVGAnimatedLengthList_animVal_Getter";
 
-  static $baseVal_Getter(mthis) native "SVGAnimatedLengthList_baseVal_Getter";
+  static baseVal_Getter(mthis) native "SVGAnimatedLengthList_baseVal_Getter";
 }
 
 class BlinkSVGAnimatedNumber {
-  static $animVal_Getter(mthis) native "SVGAnimatedNumber_animVal_Getter";
+  static animVal_Getter(mthis) native "SVGAnimatedNumber_animVal_Getter";
 
-  static $baseVal_Getter(mthis) native "SVGAnimatedNumber_baseVal_Getter";
+  static baseVal_Getter(mthis) native "SVGAnimatedNumber_baseVal_Getter";
 
-  static $baseVal_Setter(mthis, value) native "SVGAnimatedNumber_baseVal_Setter";
+  static baseVal_Setter_float(mthis, value) native "SVGAnimatedNumber_baseVal_Setter";
 }
 
 class BlinkSVGAnimatedNumberList {
-  static $animVal_Getter(mthis) native "SVGAnimatedNumberList_animVal_Getter";
+  static animVal_Getter(mthis) native "SVGAnimatedNumberList_animVal_Getter";
 
-  static $baseVal_Getter(mthis) native "SVGAnimatedNumberList_baseVal_Getter";
+  static baseVal_Getter(mthis) native "SVGAnimatedNumberList_baseVal_Getter";
 }
 
 class BlinkSVGAnimatedPreserveAspectRatio {
-  static $animVal_Getter(mthis) native "SVGAnimatedPreserveAspectRatio_animVal_Getter";
+  static animVal_Getter(mthis) native "SVGAnimatedPreserveAspectRatio_animVal_Getter";
 
-  static $baseVal_Getter(mthis) native "SVGAnimatedPreserveAspectRatio_baseVal_Getter";
+  static baseVal_Getter(mthis) native "SVGAnimatedPreserveAspectRatio_baseVal_Getter";
 }
 
 class BlinkSVGAnimatedRect {
-  static $animVal_Getter(mthis) native "SVGAnimatedRect_animVal_Getter";
+  static animVal_Getter(mthis) native "SVGAnimatedRect_animVal_Getter";
 
-  static $baseVal_Getter(mthis) native "SVGAnimatedRect_baseVal_Getter";
+  static baseVal_Getter(mthis) native "SVGAnimatedRect_baseVal_Getter";
 }
 
 class BlinkSVGAnimatedString {
-  static $animVal_Getter(mthis) native "SVGAnimatedString_animVal_Getter";
+  static animVal_Getter(mthis) native "SVGAnimatedString_animVal_Getter";
 
-  static $baseVal_Getter(mthis) native "SVGAnimatedString_baseVal_Getter";
+  static baseVal_Getter(mthis) native "SVGAnimatedString_baseVal_Getter";
 
-  static $baseVal_Setter(mthis, value) native "SVGAnimatedString_baseVal_Setter";
+  static baseVal_Setter_DOMString(mthis, value) native "SVGAnimatedString_baseVal_Setter";
 }
 
 class BlinkSVGAnimatedTransformList {
-  static $animVal_Getter(mthis) native "SVGAnimatedTransformList_animVal_Getter";
+  static animVal_Getter(mthis) native "SVGAnimatedTransformList_animVal_Getter";
 
-  static $baseVal_Getter(mthis) native "SVGAnimatedTransformList_baseVal_Getter";
+  static baseVal_Getter(mthis) native "SVGAnimatedTransformList_baseVal_Getter";
 }
 
 class BlinkSVGGeometryElement {
-  static $isPointInFill_Callback(mthis, point) native "SVGGeometryElement_isPointInFill_Callback_RESOLVER_STRING_1_SVGPoint";
+  static isPointInFill_Callback_SVGPoint(mthis, point) native "SVGGeometryElement_isPointInFill_Callback_SVGPoint";
 
-  static $isPointInStroke_Callback(mthis, point) native "SVGGeometryElement_isPointInStroke_Callback_RESOLVER_STRING_1_SVGPoint";
+  static isPointInStroke_Callback_SVGPoint(mthis, point) native "SVGGeometryElement_isPointInStroke_Callback_SVGPoint";
 }
 
 class BlinkSVGCircleElement {
-  static $cx_Getter(mthis) native "SVGCircleElement_cx_Getter";
+  static cx_Getter(mthis) native "SVGCircleElement_cx_Getter";
 
-  static $cy_Getter(mthis) native "SVGCircleElement_cy_Getter";
+  static cy_Getter(mthis) native "SVGCircleElement_cy_Getter";
 
-  static $r_Getter(mthis) native "SVGCircleElement_r_Getter";
+  static r_Getter(mthis) native "SVGCircleElement_r_Getter";
 }
 
 class BlinkSVGClipPathElement {
-  static $clipPathUnits_Getter(mthis) native "SVGClipPathElement_clipPathUnits_Getter";
+  static clipPathUnits_Getter(mthis) native "SVGClipPathElement_clipPathUnits_Getter";
 }
 
 class BlinkSVGComponentTransferFunctionElement {}
@@ -5183,225 +5141,223 @@
 class BlinkSVGDiscardElement {}
 
 class BlinkSVGElementInstance {
-  static $correspondingElement_Getter(mthis) native "SVGElementInstance_correspondingElement_Getter";
+  static correspondingElement_Getter(mthis) native "SVGElementInstance_correspondingElement_Getter";
 
-  static $correspondingUseElement_Getter(mthis) native "SVGElementInstance_correspondingUseElement_Getter";
+  static correspondingUseElement_Getter(mthis) native "SVGElementInstance_correspondingUseElement_Getter";
 
-  static $firstChild_Getter(mthis) native "SVGElementInstance_firstChild_Getter";
+  static firstChild_Getter(mthis) native "SVGElementInstance_firstChild_Getter";
 
-  static $lastChild_Getter(mthis) native "SVGElementInstance_lastChild_Getter";
+  static lastChild_Getter(mthis) native "SVGElementInstance_lastChild_Getter";
 
-  static $nextSibling_Getter(mthis) native "SVGElementInstance_nextSibling_Getter";
+  static nextSibling_Getter(mthis) native "SVGElementInstance_nextSibling_Getter";
 
-  static $parentNode_Getter(mthis) native "SVGElementInstance_parentNode_Getter";
+  static parentNode_Getter(mthis) native "SVGElementInstance_parentNode_Getter";
 
-  static $previousSibling_Getter(mthis) native "SVGElementInstance_previousSibling_Getter";
+  static previousSibling_Getter(mthis) native "SVGElementInstance_previousSibling_Getter";
 }
 
 class BlinkSVGElementInstanceList {
-  static $length_Getter(mthis) native "SVGElementInstanceList_length_Getter";
+  static length_Getter(mthis) native "SVGElementInstanceList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "SVGElementInstanceList_item_Callback_RESOLVER_STRING_1_unsigned long";
-
-  static $item_Callback(mthis, index) native "SVGElementInstanceList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "SVGElementInstanceList_item_Callback_unsigned long";
 }
 
 class BlinkSVGEllipseElement {
-  static $cx_Getter(mthis) native "SVGEllipseElement_cx_Getter";
+  static cx_Getter(mthis) native "SVGEllipseElement_cx_Getter";
 
-  static $cy_Getter(mthis) native "SVGEllipseElement_cy_Getter";
+  static cy_Getter(mthis) native "SVGEllipseElement_cy_Getter";
 
-  static $rx_Getter(mthis) native "SVGEllipseElement_rx_Getter";
+  static rx_Getter(mthis) native "SVGEllipseElement_rx_Getter";
 
-  static $ry_Getter(mthis) native "SVGEllipseElement_ry_Getter";
+  static ry_Getter(mthis) native "SVGEllipseElement_ry_Getter";
 }
 
 class BlinkSVGFilterPrimitiveStandardAttributes {
-  static $height_Getter(mthis) native "SVGFilterPrimitiveStandardAttributes_height_Getter";
+  static height_Getter(mthis) native "SVGFilterPrimitiveStandardAttributes_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFilterPrimitiveStandardAttributes_result_Getter";
+  static result_Getter(mthis) native "SVGFilterPrimitiveStandardAttributes_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFilterPrimitiveStandardAttributes_width_Getter";
+  static width_Getter(mthis) native "SVGFilterPrimitiveStandardAttributes_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFilterPrimitiveStandardAttributes_x_Getter";
+  static x_Getter(mthis) native "SVGFilterPrimitiveStandardAttributes_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFilterPrimitiveStandardAttributes_y_Getter";
+  static y_Getter(mthis) native "SVGFilterPrimitiveStandardAttributes_y_Getter";
 }
 
 class BlinkSVGFEBlendElement {
-  static $in1_Getter(mthis) native "SVGFEBlendElement_in1_Getter";
+  static in1_Getter(mthis) native "SVGFEBlendElement_in1_Getter";
 
-  static $in2_Getter(mthis) native "SVGFEBlendElement_in2_Getter";
+  static in2_Getter(mthis) native "SVGFEBlendElement_in2_Getter";
 
-  static $mode_Getter(mthis) native "SVGFEBlendElement_mode_Getter";
+  static mode_Getter(mthis) native "SVGFEBlendElement_mode_Getter";
 
-  static $height_Getter(mthis) native "SVGFEBlendElement_height_Getter";
+  static height_Getter(mthis) native "SVGFEBlendElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFEBlendElement_result_Getter";
+  static result_Getter(mthis) native "SVGFEBlendElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFEBlendElement_width_Getter";
+  static width_Getter(mthis) native "SVGFEBlendElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFEBlendElement_x_Getter";
+  static x_Getter(mthis) native "SVGFEBlendElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFEBlendElement_y_Getter";
+  static y_Getter(mthis) native "SVGFEBlendElement_y_Getter";
 }
 
 class BlinkSVGFEColorMatrixElement {
-  static $in1_Getter(mthis) native "SVGFEColorMatrixElement_in1_Getter";
+  static in1_Getter(mthis) native "SVGFEColorMatrixElement_in1_Getter";
 
-  static $type_Getter(mthis) native "SVGFEColorMatrixElement_type_Getter";
+  static type_Getter(mthis) native "SVGFEColorMatrixElement_type_Getter";
 
-  static $values_Getter(mthis) native "SVGFEColorMatrixElement_values_Getter";
+  static values_Getter(mthis) native "SVGFEColorMatrixElement_values_Getter";
 
-  static $height_Getter(mthis) native "SVGFEColorMatrixElement_height_Getter";
+  static height_Getter(mthis) native "SVGFEColorMatrixElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFEColorMatrixElement_result_Getter";
+  static result_Getter(mthis) native "SVGFEColorMatrixElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFEColorMatrixElement_width_Getter";
+  static width_Getter(mthis) native "SVGFEColorMatrixElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFEColorMatrixElement_x_Getter";
+  static x_Getter(mthis) native "SVGFEColorMatrixElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFEColorMatrixElement_y_Getter";
+  static y_Getter(mthis) native "SVGFEColorMatrixElement_y_Getter";
 }
 
 class BlinkSVGFEComponentTransferElement {
-  static $in1_Getter(mthis) native "SVGFEComponentTransferElement_in1_Getter";
+  static in1_Getter(mthis) native "SVGFEComponentTransferElement_in1_Getter";
 
-  static $height_Getter(mthis) native "SVGFEComponentTransferElement_height_Getter";
+  static height_Getter(mthis) native "SVGFEComponentTransferElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFEComponentTransferElement_result_Getter";
+  static result_Getter(mthis) native "SVGFEComponentTransferElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFEComponentTransferElement_width_Getter";
+  static width_Getter(mthis) native "SVGFEComponentTransferElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFEComponentTransferElement_x_Getter";
+  static x_Getter(mthis) native "SVGFEComponentTransferElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFEComponentTransferElement_y_Getter";
+  static y_Getter(mthis) native "SVGFEComponentTransferElement_y_Getter";
 }
 
 class BlinkSVGFECompositeElement {
-  static $in1_Getter(mthis) native "SVGFECompositeElement_in1_Getter";
+  static in1_Getter(mthis) native "SVGFECompositeElement_in1_Getter";
 
-  static $in2_Getter(mthis) native "SVGFECompositeElement_in2_Getter";
+  static in2_Getter(mthis) native "SVGFECompositeElement_in2_Getter";
 
-  static $k1_Getter(mthis) native "SVGFECompositeElement_k1_Getter";
+  static k1_Getter(mthis) native "SVGFECompositeElement_k1_Getter";
 
-  static $k2_Getter(mthis) native "SVGFECompositeElement_k2_Getter";
+  static k2_Getter(mthis) native "SVGFECompositeElement_k2_Getter";
 
-  static $k3_Getter(mthis) native "SVGFECompositeElement_k3_Getter";
+  static k3_Getter(mthis) native "SVGFECompositeElement_k3_Getter";
 
-  static $k4_Getter(mthis) native "SVGFECompositeElement_k4_Getter";
+  static k4_Getter(mthis) native "SVGFECompositeElement_k4_Getter";
 
-  static $operator_Getter(mthis) native "SVGFECompositeElement_operator_Getter";
+  static operator_Getter(mthis) native "SVGFECompositeElement_operator_Getter";
 
-  static $height_Getter(mthis) native "SVGFECompositeElement_height_Getter";
+  static height_Getter(mthis) native "SVGFECompositeElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFECompositeElement_result_Getter";
+  static result_Getter(mthis) native "SVGFECompositeElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFECompositeElement_width_Getter";
+  static width_Getter(mthis) native "SVGFECompositeElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFECompositeElement_x_Getter";
+  static x_Getter(mthis) native "SVGFECompositeElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFECompositeElement_y_Getter";
+  static y_Getter(mthis) native "SVGFECompositeElement_y_Getter";
 }
 
 class BlinkSVGFEConvolveMatrixElement {
-  static $bias_Getter(mthis) native "SVGFEConvolveMatrixElement_bias_Getter";
+  static bias_Getter(mthis) native "SVGFEConvolveMatrixElement_bias_Getter";
 
-  static $divisor_Getter(mthis) native "SVGFEConvolveMatrixElement_divisor_Getter";
+  static divisor_Getter(mthis) native "SVGFEConvolveMatrixElement_divisor_Getter";
 
-  static $edgeMode_Getter(mthis) native "SVGFEConvolveMatrixElement_edgeMode_Getter";
+  static edgeMode_Getter(mthis) native "SVGFEConvolveMatrixElement_edgeMode_Getter";
 
-  static $in1_Getter(mthis) native "SVGFEConvolveMatrixElement_in1_Getter";
+  static in1_Getter(mthis) native "SVGFEConvolveMatrixElement_in1_Getter";
 
-  static $kernelMatrix_Getter(mthis) native "SVGFEConvolveMatrixElement_kernelMatrix_Getter";
+  static kernelMatrix_Getter(mthis) native "SVGFEConvolveMatrixElement_kernelMatrix_Getter";
 
-  static $kernelUnitLengthX_Getter(mthis) native "SVGFEConvolveMatrixElement_kernelUnitLengthX_Getter";
+  static kernelUnitLengthX_Getter(mthis) native "SVGFEConvolveMatrixElement_kernelUnitLengthX_Getter";
 
-  static $kernelUnitLengthY_Getter(mthis) native "SVGFEConvolveMatrixElement_kernelUnitLengthY_Getter";
+  static kernelUnitLengthY_Getter(mthis) native "SVGFEConvolveMatrixElement_kernelUnitLengthY_Getter";
 
-  static $orderX_Getter(mthis) native "SVGFEConvolveMatrixElement_orderX_Getter";
+  static orderX_Getter(mthis) native "SVGFEConvolveMatrixElement_orderX_Getter";
 
-  static $orderY_Getter(mthis) native "SVGFEConvolveMatrixElement_orderY_Getter";
+  static orderY_Getter(mthis) native "SVGFEConvolveMatrixElement_orderY_Getter";
 
-  static $preserveAlpha_Getter(mthis) native "SVGFEConvolveMatrixElement_preserveAlpha_Getter";
+  static preserveAlpha_Getter(mthis) native "SVGFEConvolveMatrixElement_preserveAlpha_Getter";
 
-  static $targetX_Getter(mthis) native "SVGFEConvolveMatrixElement_targetX_Getter";
+  static targetX_Getter(mthis) native "SVGFEConvolveMatrixElement_targetX_Getter";
 
-  static $targetY_Getter(mthis) native "SVGFEConvolveMatrixElement_targetY_Getter";
+  static targetY_Getter(mthis) native "SVGFEConvolveMatrixElement_targetY_Getter";
 
-  static $height_Getter(mthis) native "SVGFEConvolveMatrixElement_height_Getter";
+  static height_Getter(mthis) native "SVGFEConvolveMatrixElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFEConvolveMatrixElement_result_Getter";
+  static result_Getter(mthis) native "SVGFEConvolveMatrixElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFEConvolveMatrixElement_width_Getter";
+  static width_Getter(mthis) native "SVGFEConvolveMatrixElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFEConvolveMatrixElement_x_Getter";
+  static x_Getter(mthis) native "SVGFEConvolveMatrixElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFEConvolveMatrixElement_y_Getter";
+  static y_Getter(mthis) native "SVGFEConvolveMatrixElement_y_Getter";
 }
 
 class BlinkSVGFEDiffuseLightingElement {
-  static $diffuseConstant_Getter(mthis) native "SVGFEDiffuseLightingElement_diffuseConstant_Getter";
+  static diffuseConstant_Getter(mthis) native "SVGFEDiffuseLightingElement_diffuseConstant_Getter";
 
-  static $in1_Getter(mthis) native "SVGFEDiffuseLightingElement_in1_Getter";
+  static in1_Getter(mthis) native "SVGFEDiffuseLightingElement_in1_Getter";
 
-  static $kernelUnitLengthX_Getter(mthis) native "SVGFEDiffuseLightingElement_kernelUnitLengthX_Getter";
+  static kernelUnitLengthX_Getter(mthis) native "SVGFEDiffuseLightingElement_kernelUnitLengthX_Getter";
 
-  static $kernelUnitLengthY_Getter(mthis) native "SVGFEDiffuseLightingElement_kernelUnitLengthY_Getter";
+  static kernelUnitLengthY_Getter(mthis) native "SVGFEDiffuseLightingElement_kernelUnitLengthY_Getter";
 
-  static $surfaceScale_Getter(mthis) native "SVGFEDiffuseLightingElement_surfaceScale_Getter";
+  static surfaceScale_Getter(mthis) native "SVGFEDiffuseLightingElement_surfaceScale_Getter";
 
-  static $height_Getter(mthis) native "SVGFEDiffuseLightingElement_height_Getter";
+  static height_Getter(mthis) native "SVGFEDiffuseLightingElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFEDiffuseLightingElement_result_Getter";
+  static result_Getter(mthis) native "SVGFEDiffuseLightingElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFEDiffuseLightingElement_width_Getter";
+  static width_Getter(mthis) native "SVGFEDiffuseLightingElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFEDiffuseLightingElement_x_Getter";
+  static x_Getter(mthis) native "SVGFEDiffuseLightingElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFEDiffuseLightingElement_y_Getter";
+  static y_Getter(mthis) native "SVGFEDiffuseLightingElement_y_Getter";
 }
 
 class BlinkSVGFEDisplacementMapElement {
-  static $in1_Getter(mthis) native "SVGFEDisplacementMapElement_in1_Getter";
+  static in1_Getter(mthis) native "SVGFEDisplacementMapElement_in1_Getter";
 
-  static $in2_Getter(mthis) native "SVGFEDisplacementMapElement_in2_Getter";
+  static in2_Getter(mthis) native "SVGFEDisplacementMapElement_in2_Getter";
 
-  static $scale_Getter(mthis) native "SVGFEDisplacementMapElement_scale_Getter";
+  static scale_Getter(mthis) native "SVGFEDisplacementMapElement_scale_Getter";
 
-  static $xChannelSelector_Getter(mthis) native "SVGFEDisplacementMapElement_xChannelSelector_Getter";
+  static xChannelSelector_Getter(mthis) native "SVGFEDisplacementMapElement_xChannelSelector_Getter";
 
-  static $yChannelSelector_Getter(mthis) native "SVGFEDisplacementMapElement_yChannelSelector_Getter";
+  static yChannelSelector_Getter(mthis) native "SVGFEDisplacementMapElement_yChannelSelector_Getter";
 
-  static $height_Getter(mthis) native "SVGFEDisplacementMapElement_height_Getter";
+  static height_Getter(mthis) native "SVGFEDisplacementMapElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFEDisplacementMapElement_result_Getter";
+  static result_Getter(mthis) native "SVGFEDisplacementMapElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFEDisplacementMapElement_width_Getter";
+  static width_Getter(mthis) native "SVGFEDisplacementMapElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFEDisplacementMapElement_x_Getter";
+  static x_Getter(mthis) native "SVGFEDisplacementMapElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFEDisplacementMapElement_y_Getter";
+  static y_Getter(mthis) native "SVGFEDisplacementMapElement_y_Getter";
 }
 
 class BlinkSVGFEDistantLightElement {
-  static $azimuth_Getter(mthis) native "SVGFEDistantLightElement_azimuth_Getter";
+  static azimuth_Getter(mthis) native "SVGFEDistantLightElement_azimuth_Getter";
 
-  static $elevation_Getter(mthis) native "SVGFEDistantLightElement_elevation_Getter";
+  static elevation_Getter(mthis) native "SVGFEDistantLightElement_elevation_Getter";
 }
 
 class BlinkSVGFEDropShadowElement {}
 
 class BlinkSVGFEFloodElement {
-  static $height_Getter(mthis) native "SVGFEFloodElement_height_Getter";
+  static height_Getter(mthis) native "SVGFEFloodElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFEFloodElement_result_Getter";
+  static result_Getter(mthis) native "SVGFEFloodElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFEFloodElement_width_Getter";
+  static width_Getter(mthis) native "SVGFEFloodElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFEFloodElement_x_Getter";
+  static x_Getter(mthis) native "SVGFEFloodElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFEFloodElement_y_Getter";
+  static y_Getter(mthis) native "SVGFEFloodElement_y_Getter";
 }
 
 class BlinkSVGFEFuncAElement {}
@@ -5413,207 +5369,207 @@
 class BlinkSVGFEFuncRElement {}
 
 class BlinkSVGFEGaussianBlurElement {
-  static $in1_Getter(mthis) native "SVGFEGaussianBlurElement_in1_Getter";
+  static in1_Getter(mthis) native "SVGFEGaussianBlurElement_in1_Getter";
 
-  static $stdDeviationX_Getter(mthis) native "SVGFEGaussianBlurElement_stdDeviationX_Getter";
+  static stdDeviationX_Getter(mthis) native "SVGFEGaussianBlurElement_stdDeviationX_Getter";
 
-  static $stdDeviationY_Getter(mthis) native "SVGFEGaussianBlurElement_stdDeviationY_Getter";
+  static stdDeviationY_Getter(mthis) native "SVGFEGaussianBlurElement_stdDeviationY_Getter";
 
-  static $setStdDeviation_Callback(mthis, stdDeviationX, stdDeviationY) native "SVGFEGaussianBlurElement_setStdDeviation_Callback_RESOLVER_STRING_2_float_float";
+  static setStdDeviation_Callback_float_float(mthis, stdDeviationX, stdDeviationY) native "SVGFEGaussianBlurElement_setStdDeviation_Callback_float_float";
 
-  static $height_Getter(mthis) native "SVGFEGaussianBlurElement_height_Getter";
+  static height_Getter(mthis) native "SVGFEGaussianBlurElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFEGaussianBlurElement_result_Getter";
+  static result_Getter(mthis) native "SVGFEGaussianBlurElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFEGaussianBlurElement_width_Getter";
+  static width_Getter(mthis) native "SVGFEGaussianBlurElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFEGaussianBlurElement_x_Getter";
+  static x_Getter(mthis) native "SVGFEGaussianBlurElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFEGaussianBlurElement_y_Getter";
+  static y_Getter(mthis) native "SVGFEGaussianBlurElement_y_Getter";
 }
 
 class BlinkSVGFEImageElement {
-  static $preserveAspectRatio_Getter(mthis) native "SVGFEImageElement_preserveAspectRatio_Getter";
+  static preserveAspectRatio_Getter(mthis) native "SVGFEImageElement_preserveAspectRatio_Getter";
 
-  static $height_Getter(mthis) native "SVGFEImageElement_height_Getter";
+  static height_Getter(mthis) native "SVGFEImageElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFEImageElement_result_Getter";
+  static result_Getter(mthis) native "SVGFEImageElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFEImageElement_width_Getter";
+  static width_Getter(mthis) native "SVGFEImageElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFEImageElement_x_Getter";
+  static x_Getter(mthis) native "SVGFEImageElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFEImageElement_y_Getter";
+  static y_Getter(mthis) native "SVGFEImageElement_y_Getter";
 
-  static $href_Getter(mthis) native "SVGFEImageElement_href_Getter";
+  static href_Getter(mthis) native "SVGFEImageElement_href_Getter";
 }
 
 class BlinkSVGFEMergeElement {
-  static $height_Getter(mthis) native "SVGFEMergeElement_height_Getter";
+  static height_Getter(mthis) native "SVGFEMergeElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFEMergeElement_result_Getter";
+  static result_Getter(mthis) native "SVGFEMergeElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFEMergeElement_width_Getter";
+  static width_Getter(mthis) native "SVGFEMergeElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFEMergeElement_x_Getter";
+  static x_Getter(mthis) native "SVGFEMergeElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFEMergeElement_y_Getter";
+  static y_Getter(mthis) native "SVGFEMergeElement_y_Getter";
 }
 
 class BlinkSVGFEMergeNodeElement {
-  static $in1_Getter(mthis) native "SVGFEMergeNodeElement_in1_Getter";
+  static in1_Getter(mthis) native "SVGFEMergeNodeElement_in1_Getter";
 }
 
 class BlinkSVGFEMorphologyElement {
-  static $in1_Getter(mthis) native "SVGFEMorphologyElement_in1_Getter";
+  static in1_Getter(mthis) native "SVGFEMorphologyElement_in1_Getter";
 
-  static $operator_Getter(mthis) native "SVGFEMorphologyElement_operator_Getter";
+  static operator_Getter(mthis) native "SVGFEMorphologyElement_operator_Getter";
 
-  static $radiusX_Getter(mthis) native "SVGFEMorphologyElement_radiusX_Getter";
+  static radiusX_Getter(mthis) native "SVGFEMorphologyElement_radiusX_Getter";
 
-  static $radiusY_Getter(mthis) native "SVGFEMorphologyElement_radiusY_Getter";
+  static radiusY_Getter(mthis) native "SVGFEMorphologyElement_radiusY_Getter";
 
-  static $setRadius_Callback(mthis, radiusX, radiusY) native "SVGFEMorphologyElement_setRadius_Callback_RESOLVER_STRING_2_float_float";
+  static setRadius_Callback_float_float(mthis, radiusX, radiusY) native "SVGFEMorphologyElement_setRadius_Callback_float_float";
 
-  static $height_Getter(mthis) native "SVGFEMorphologyElement_height_Getter";
+  static height_Getter(mthis) native "SVGFEMorphologyElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFEMorphologyElement_result_Getter";
+  static result_Getter(mthis) native "SVGFEMorphologyElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFEMorphologyElement_width_Getter";
+  static width_Getter(mthis) native "SVGFEMorphologyElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFEMorphologyElement_x_Getter";
+  static x_Getter(mthis) native "SVGFEMorphologyElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFEMorphologyElement_y_Getter";
+  static y_Getter(mthis) native "SVGFEMorphologyElement_y_Getter";
 }
 
 class BlinkSVGFEOffsetElement {
-  static $dx_Getter(mthis) native "SVGFEOffsetElement_dx_Getter";
+  static dx_Getter(mthis) native "SVGFEOffsetElement_dx_Getter";
 
-  static $dy_Getter(mthis) native "SVGFEOffsetElement_dy_Getter";
+  static dy_Getter(mthis) native "SVGFEOffsetElement_dy_Getter";
 
-  static $in1_Getter(mthis) native "SVGFEOffsetElement_in1_Getter";
+  static in1_Getter(mthis) native "SVGFEOffsetElement_in1_Getter";
 
-  static $height_Getter(mthis) native "SVGFEOffsetElement_height_Getter";
+  static height_Getter(mthis) native "SVGFEOffsetElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFEOffsetElement_result_Getter";
+  static result_Getter(mthis) native "SVGFEOffsetElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFEOffsetElement_width_Getter";
+  static width_Getter(mthis) native "SVGFEOffsetElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFEOffsetElement_x_Getter";
+  static x_Getter(mthis) native "SVGFEOffsetElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFEOffsetElement_y_Getter";
+  static y_Getter(mthis) native "SVGFEOffsetElement_y_Getter";
 }
 
 class BlinkSVGFEPointLightElement {
-  static $x_Getter(mthis) native "SVGFEPointLightElement_x_Getter";
+  static x_Getter(mthis) native "SVGFEPointLightElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFEPointLightElement_y_Getter";
+  static y_Getter(mthis) native "SVGFEPointLightElement_y_Getter";
 
-  static $z_Getter(mthis) native "SVGFEPointLightElement_z_Getter";
+  static z_Getter(mthis) native "SVGFEPointLightElement_z_Getter";
 }
 
 class BlinkSVGFESpecularLightingElement {
-  static $in1_Getter(mthis) native "SVGFESpecularLightingElement_in1_Getter";
+  static in1_Getter(mthis) native "SVGFESpecularLightingElement_in1_Getter";
 
-  static $specularConstant_Getter(mthis) native "SVGFESpecularLightingElement_specularConstant_Getter";
+  static specularConstant_Getter(mthis) native "SVGFESpecularLightingElement_specularConstant_Getter";
 
-  static $specularExponent_Getter(mthis) native "SVGFESpecularLightingElement_specularExponent_Getter";
+  static specularExponent_Getter(mthis) native "SVGFESpecularLightingElement_specularExponent_Getter";
 
-  static $surfaceScale_Getter(mthis) native "SVGFESpecularLightingElement_surfaceScale_Getter";
+  static surfaceScale_Getter(mthis) native "SVGFESpecularLightingElement_surfaceScale_Getter";
 
-  static $height_Getter(mthis) native "SVGFESpecularLightingElement_height_Getter";
+  static height_Getter(mthis) native "SVGFESpecularLightingElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFESpecularLightingElement_result_Getter";
+  static result_Getter(mthis) native "SVGFESpecularLightingElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFESpecularLightingElement_width_Getter";
+  static width_Getter(mthis) native "SVGFESpecularLightingElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFESpecularLightingElement_x_Getter";
+  static x_Getter(mthis) native "SVGFESpecularLightingElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFESpecularLightingElement_y_Getter";
+  static y_Getter(mthis) native "SVGFESpecularLightingElement_y_Getter";
 }
 
 class BlinkSVGFESpotLightElement {
-  static $limitingConeAngle_Getter(mthis) native "SVGFESpotLightElement_limitingConeAngle_Getter";
+  static limitingConeAngle_Getter(mthis) native "SVGFESpotLightElement_limitingConeAngle_Getter";
 
-  static $pointsAtX_Getter(mthis) native "SVGFESpotLightElement_pointsAtX_Getter";
+  static pointsAtX_Getter(mthis) native "SVGFESpotLightElement_pointsAtX_Getter";
 
-  static $pointsAtY_Getter(mthis) native "SVGFESpotLightElement_pointsAtY_Getter";
+  static pointsAtY_Getter(mthis) native "SVGFESpotLightElement_pointsAtY_Getter";
 
-  static $pointsAtZ_Getter(mthis) native "SVGFESpotLightElement_pointsAtZ_Getter";
+  static pointsAtZ_Getter(mthis) native "SVGFESpotLightElement_pointsAtZ_Getter";
 
-  static $specularExponent_Getter(mthis) native "SVGFESpotLightElement_specularExponent_Getter";
+  static specularExponent_Getter(mthis) native "SVGFESpotLightElement_specularExponent_Getter";
 
-  static $x_Getter(mthis) native "SVGFESpotLightElement_x_Getter";
+  static x_Getter(mthis) native "SVGFESpotLightElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFESpotLightElement_y_Getter";
+  static y_Getter(mthis) native "SVGFESpotLightElement_y_Getter";
 
-  static $z_Getter(mthis) native "SVGFESpotLightElement_z_Getter";
+  static z_Getter(mthis) native "SVGFESpotLightElement_z_Getter";
 }
 
 class BlinkSVGFETileElement {
-  static $in1_Getter(mthis) native "SVGFETileElement_in1_Getter";
+  static in1_Getter(mthis) native "SVGFETileElement_in1_Getter";
 
-  static $height_Getter(mthis) native "SVGFETileElement_height_Getter";
+  static height_Getter(mthis) native "SVGFETileElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFETileElement_result_Getter";
+  static result_Getter(mthis) native "SVGFETileElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFETileElement_width_Getter";
+  static width_Getter(mthis) native "SVGFETileElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFETileElement_x_Getter";
+  static x_Getter(mthis) native "SVGFETileElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFETileElement_y_Getter";
+  static y_Getter(mthis) native "SVGFETileElement_y_Getter";
 }
 
 class BlinkSVGFETurbulenceElement {
-  static $baseFrequencyX_Getter(mthis) native "SVGFETurbulenceElement_baseFrequencyX_Getter";
+  static baseFrequencyX_Getter(mthis) native "SVGFETurbulenceElement_baseFrequencyX_Getter";
 
-  static $baseFrequencyY_Getter(mthis) native "SVGFETurbulenceElement_baseFrequencyY_Getter";
+  static baseFrequencyY_Getter(mthis) native "SVGFETurbulenceElement_baseFrequencyY_Getter";
 
-  static $numOctaves_Getter(mthis) native "SVGFETurbulenceElement_numOctaves_Getter";
+  static numOctaves_Getter(mthis) native "SVGFETurbulenceElement_numOctaves_Getter";
 
-  static $seed_Getter(mthis) native "SVGFETurbulenceElement_seed_Getter";
+  static seed_Getter(mthis) native "SVGFETurbulenceElement_seed_Getter";
 
-  static $stitchTiles_Getter(mthis) native "SVGFETurbulenceElement_stitchTiles_Getter";
+  static stitchTiles_Getter(mthis) native "SVGFETurbulenceElement_stitchTiles_Getter";
 
-  static $type_Getter(mthis) native "SVGFETurbulenceElement_type_Getter";
+  static type_Getter(mthis) native "SVGFETurbulenceElement_type_Getter";
 
-  static $height_Getter(mthis) native "SVGFETurbulenceElement_height_Getter";
+  static height_Getter(mthis) native "SVGFETurbulenceElement_height_Getter";
 
-  static $result_Getter(mthis) native "SVGFETurbulenceElement_result_Getter";
+  static result_Getter(mthis) native "SVGFETurbulenceElement_result_Getter";
 
-  static $width_Getter(mthis) native "SVGFETurbulenceElement_width_Getter";
+  static width_Getter(mthis) native "SVGFETurbulenceElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFETurbulenceElement_x_Getter";
+  static x_Getter(mthis) native "SVGFETurbulenceElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFETurbulenceElement_y_Getter";
+  static y_Getter(mthis) native "SVGFETurbulenceElement_y_Getter";
 }
 
 class BlinkSVGFilterElement {
-  static $filterResX_Getter(mthis) native "SVGFilterElement_filterResX_Getter";
+  static filterResX_Getter(mthis) native "SVGFilterElement_filterResX_Getter";
 
-  static $filterResY_Getter(mthis) native "SVGFilterElement_filterResY_Getter";
+  static filterResY_Getter(mthis) native "SVGFilterElement_filterResY_Getter";
 
-  static $filterUnits_Getter(mthis) native "SVGFilterElement_filterUnits_Getter";
+  static filterUnits_Getter(mthis) native "SVGFilterElement_filterUnits_Getter";
 
-  static $height_Getter(mthis) native "SVGFilterElement_height_Getter";
+  static height_Getter(mthis) native "SVGFilterElement_height_Getter";
 
-  static $primitiveUnits_Getter(mthis) native "SVGFilterElement_primitiveUnits_Getter";
+  static primitiveUnits_Getter(mthis) native "SVGFilterElement_primitiveUnits_Getter";
 
-  static $width_Getter(mthis) native "SVGFilterElement_width_Getter";
+  static width_Getter(mthis) native "SVGFilterElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGFilterElement_x_Getter";
+  static x_Getter(mthis) native "SVGFilterElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGFilterElement_y_Getter";
+  static y_Getter(mthis) native "SVGFilterElement_y_Getter";
 
-  static $setFilterRes_Callback(mthis, filterResX, filterResY) native "SVGFilterElement_setFilterRes_Callback_RESOLVER_STRING_2_unsigned long_unsigned long";
+  static setFilterRes_Callback_ul_ul(mthis, filterResX, filterResY) native "SVGFilterElement_setFilterRes_Callback_unsigned long_unsigned long";
 
-  static $href_Getter(mthis) native "SVGFilterElement_href_Getter";
+  static href_Getter(mthis) native "SVGFilterElement_href_Getter";
 }
 
 class BlinkSVGFitToViewBox {
-  static $preserveAspectRatio_Getter(mthis) native "SVGFitToViewBox_preserveAspectRatio_Getter";
+  static preserveAspectRatio_Getter(mthis) native "SVGFitToViewBox_preserveAspectRatio_Getter";
 
-  static $viewBox_Getter(mthis) native "SVGFitToViewBox_viewBox_Getter";
+  static viewBox_Getter(mthis) native "SVGFitToViewBox_viewBox_Getter";
 }
 
 class BlinkSVGFontElement {}
@@ -5629,13 +5585,13 @@
 class BlinkSVGFontFaceUriElement {}
 
 class BlinkSVGForeignObjectElement {
-  static $height_Getter(mthis) native "SVGForeignObjectElement_height_Getter";
+  static height_Getter(mthis) native "SVGForeignObjectElement_height_Getter";
 
-  static $width_Getter(mthis) native "SVGForeignObjectElement_width_Getter";
+  static width_Getter(mthis) native "SVGForeignObjectElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGForeignObjectElement_x_Getter";
+  static x_Getter(mthis) native "SVGForeignObjectElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGForeignObjectElement_y_Getter";
+  static y_Getter(mthis) native "SVGForeignObjectElement_y_Getter";
 }
 
 class BlinkSVGGElement {}
@@ -5645,183 +5601,183 @@
 class BlinkSVGGlyphRefElement {}
 
 class BlinkSVGGradientElement {
-  static $gradientTransform_Getter(mthis) native "SVGGradientElement_gradientTransform_Getter";
+  static gradientTransform_Getter(mthis) native "SVGGradientElement_gradientTransform_Getter";
 
-  static $gradientUnits_Getter(mthis) native "SVGGradientElement_gradientUnits_Getter";
+  static gradientUnits_Getter(mthis) native "SVGGradientElement_gradientUnits_Getter";
 
-  static $spreadMethod_Getter(mthis) native "SVGGradientElement_spreadMethod_Getter";
+  static spreadMethod_Getter(mthis) native "SVGGradientElement_spreadMethod_Getter";
 
-  static $href_Getter(mthis) native "SVGGradientElement_href_Getter";
+  static href_Getter(mthis) native "SVGGradientElement_href_Getter";
 }
 
 class BlinkSVGHKernElement {}
 
 class BlinkSVGImageElement {
-  static $height_Getter(mthis) native "SVGImageElement_height_Getter";
+  static height_Getter(mthis) native "SVGImageElement_height_Getter";
 
-  static $preserveAspectRatio_Getter(mthis) native "SVGImageElement_preserveAspectRatio_Getter";
+  static preserveAspectRatio_Getter(mthis) native "SVGImageElement_preserveAspectRatio_Getter";
 
-  static $width_Getter(mthis) native "SVGImageElement_width_Getter";
+  static width_Getter(mthis) native "SVGImageElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGImageElement_x_Getter";
+  static x_Getter(mthis) native "SVGImageElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGImageElement_y_Getter";
+  static y_Getter(mthis) native "SVGImageElement_y_Getter";
 
-  static $href_Getter(mthis) native "SVGImageElement_href_Getter";
+  static href_Getter(mthis) native "SVGImageElement_href_Getter";
 }
 
 class BlinkSVGLength {
-  static $unitType_Getter(mthis) native "SVGLength_unitType_Getter";
+  static unitType_Getter(mthis) native "SVGLength_unitType_Getter";
 
-  static $value_Getter(mthis) native "SVGLength_value_Getter";
+  static value_Getter(mthis) native "SVGLength_value_Getter";
 
-  static $value_Setter(mthis, value) native "SVGLength_value_Setter";
+  static value_Setter_float(mthis, value) native "SVGLength_value_Setter";
 
-  static $valueAsString_Getter(mthis) native "SVGLength_valueAsString_Getter";
+  static valueAsString_Getter(mthis) native "SVGLength_valueAsString_Getter";
 
-  static $valueAsString_Setter(mthis, value) native "SVGLength_valueAsString_Setter";
+  static valueAsString_Setter_DOMString(mthis, value) native "SVGLength_valueAsString_Setter";
 
-  static $valueInSpecifiedUnits_Getter(mthis) native "SVGLength_valueInSpecifiedUnits_Getter";
+  static valueInSpecifiedUnits_Getter(mthis) native "SVGLength_valueInSpecifiedUnits_Getter";
 
-  static $valueInSpecifiedUnits_Setter(mthis, value) native "SVGLength_valueInSpecifiedUnits_Setter";
+  static valueInSpecifiedUnits_Setter_float(mthis, value) native "SVGLength_valueInSpecifiedUnits_Setter";
 
-  static $convertToSpecifiedUnits_Callback(mthis, unitType) native "SVGLength_convertToSpecifiedUnits_Callback_RESOLVER_STRING_1_unsigned short";
+  static convertToSpecifiedUnits_Callback_us(mthis, unitType) native "SVGLength_convertToSpecifiedUnits_Callback_unsigned short";
 
-  static $newValueSpecifiedUnits_Callback(mthis, unitType, valueInSpecifiedUnits) native "SVGLength_newValueSpecifiedUnits_Callback_RESOLVER_STRING_2_unsigned short_float";
+  static newValueSpecifiedUnits_Callback_us_float(mthis, unitType, valueInSpecifiedUnits) native "SVGLength_newValueSpecifiedUnits_Callback_unsigned short_float";
 }
 
 class BlinkSVGLengthList {
-  static $numberOfItems_Getter(mthis) native "SVGLengthList_numberOfItems_Getter";
+  static numberOfItems_Getter(mthis) native "SVGLengthList_numberOfItems_Getter";
 
-  static $appendItem_Callback(mthis, item) native "SVGLengthList_appendItem_Callback_RESOLVER_STRING_1_SVGLength";
+  static appendItem_Callback_SVGLength(mthis, item) native "SVGLengthList_appendItem_Callback_SVGLength";
 
-  static $clear_Callback(mthis) native "SVGLengthList_clear_Callback_RESOLVER_STRING_0_";
+  static clear_Callback(mthis) native "SVGLengthList_clear_Callback";
 
-  static $getItem_Callback(mthis, index) native "SVGLengthList_getItem_Callback_RESOLVER_STRING_1_unsigned long";
+  static getItem_Callback_ul(mthis, index) native "SVGLengthList_getItem_Callback_unsigned long";
 
-  static $initialize_Callback(mthis, item) native "SVGLengthList_initialize_Callback_RESOLVER_STRING_1_SVGLength";
+  static initialize_Callback_SVGLength(mthis, item) native "SVGLengthList_initialize_Callback_SVGLength";
 
-  static $insertItemBefore_Callback(mthis, item, index) native "SVGLengthList_insertItemBefore_Callback_RESOLVER_STRING_2_SVGLength_unsigned long";
+  static insertItemBefore_Callback_SVGLength_ul(mthis, item, index) native "SVGLengthList_insertItemBefore_Callback_SVGLength_unsigned long";
 
-  static $removeItem_Callback(mthis, index) native "SVGLengthList_removeItem_Callback_RESOLVER_STRING_1_unsigned long";
+  static removeItem_Callback_ul(mthis, index) native "SVGLengthList_removeItem_Callback_unsigned long";
 
-  static $replaceItem_Callback(mthis, item, index) native "SVGLengthList_replaceItem_Callback_RESOLVER_STRING_2_SVGLength_unsigned long";
+  static replaceItem_Callback_SVGLength_ul(mthis, item, index) native "SVGLengthList_replaceItem_Callback_SVGLength_unsigned long";
 }
 
 class BlinkSVGLineElement {
-  static $x1_Getter(mthis) native "SVGLineElement_x1_Getter";
+  static x1_Getter(mthis) native "SVGLineElement_x1_Getter";
 
-  static $x2_Getter(mthis) native "SVGLineElement_x2_Getter";
+  static x2_Getter(mthis) native "SVGLineElement_x2_Getter";
 
-  static $y1_Getter(mthis) native "SVGLineElement_y1_Getter";
+  static y1_Getter(mthis) native "SVGLineElement_y1_Getter";
 
-  static $y2_Getter(mthis) native "SVGLineElement_y2_Getter";
+  static y2_Getter(mthis) native "SVGLineElement_y2_Getter";
 }
 
 class BlinkSVGLinearGradientElement {
-  static $x1_Getter(mthis) native "SVGLinearGradientElement_x1_Getter";
+  static x1_Getter(mthis) native "SVGLinearGradientElement_x1_Getter";
 
-  static $x2_Getter(mthis) native "SVGLinearGradientElement_x2_Getter";
+  static x2_Getter(mthis) native "SVGLinearGradientElement_x2_Getter";
 
-  static $y1_Getter(mthis) native "SVGLinearGradientElement_y1_Getter";
+  static y1_Getter(mthis) native "SVGLinearGradientElement_y1_Getter";
 
-  static $y2_Getter(mthis) native "SVGLinearGradientElement_y2_Getter";
+  static y2_Getter(mthis) native "SVGLinearGradientElement_y2_Getter";
 }
 
 class BlinkSVGMPathElement {}
 
 class BlinkSVGMarkerElement {
-  static $markerHeight_Getter(mthis) native "SVGMarkerElement_markerHeight_Getter";
+  static markerHeight_Getter(mthis) native "SVGMarkerElement_markerHeight_Getter";
 
-  static $markerUnits_Getter(mthis) native "SVGMarkerElement_markerUnits_Getter";
+  static markerUnits_Getter(mthis) native "SVGMarkerElement_markerUnits_Getter";
 
-  static $markerWidth_Getter(mthis) native "SVGMarkerElement_markerWidth_Getter";
+  static markerWidth_Getter(mthis) native "SVGMarkerElement_markerWidth_Getter";
 
-  static $orientAngle_Getter(mthis) native "SVGMarkerElement_orientAngle_Getter";
+  static orientAngle_Getter(mthis) native "SVGMarkerElement_orientAngle_Getter";
 
-  static $orientType_Getter(mthis) native "SVGMarkerElement_orientType_Getter";
+  static orientType_Getter(mthis) native "SVGMarkerElement_orientType_Getter";
 
-  static $refX_Getter(mthis) native "SVGMarkerElement_refX_Getter";
+  static refX_Getter(mthis) native "SVGMarkerElement_refX_Getter";
 
-  static $refY_Getter(mthis) native "SVGMarkerElement_refY_Getter";
+  static refY_Getter(mthis) native "SVGMarkerElement_refY_Getter";
 
-  static $setOrientToAngle_Callback(mthis, angle) native "SVGMarkerElement_setOrientToAngle_Callback_RESOLVER_STRING_1_SVGAngle";
+  static setOrientToAngle_Callback_SVGAngle(mthis, angle) native "SVGMarkerElement_setOrientToAngle_Callback_SVGAngle";
 
-  static $setOrientToAuto_Callback(mthis) native "SVGMarkerElement_setOrientToAuto_Callback_RESOLVER_STRING_0_";
+  static setOrientToAuto_Callback(mthis) native "SVGMarkerElement_setOrientToAuto_Callback";
 
-  static $preserveAspectRatio_Getter(mthis) native "SVGMarkerElement_preserveAspectRatio_Getter";
+  static preserveAspectRatio_Getter(mthis) native "SVGMarkerElement_preserveAspectRatio_Getter";
 
-  static $viewBox_Getter(mthis) native "SVGMarkerElement_viewBox_Getter";
+  static viewBox_Getter(mthis) native "SVGMarkerElement_viewBox_Getter";
 }
 
 class BlinkSVGMaskElement {
-  static $height_Getter(mthis) native "SVGMaskElement_height_Getter";
+  static height_Getter(mthis) native "SVGMaskElement_height_Getter";
 
-  static $maskContentUnits_Getter(mthis) native "SVGMaskElement_maskContentUnits_Getter";
+  static maskContentUnits_Getter(mthis) native "SVGMaskElement_maskContentUnits_Getter";
 
-  static $maskUnits_Getter(mthis) native "SVGMaskElement_maskUnits_Getter";
+  static maskUnits_Getter(mthis) native "SVGMaskElement_maskUnits_Getter";
 
-  static $width_Getter(mthis) native "SVGMaskElement_width_Getter";
+  static width_Getter(mthis) native "SVGMaskElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGMaskElement_x_Getter";
+  static x_Getter(mthis) native "SVGMaskElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGMaskElement_y_Getter";
+  static y_Getter(mthis) native "SVGMaskElement_y_Getter";
 
-  static $requiredExtensions_Getter(mthis) native "SVGMaskElement_requiredExtensions_Getter";
+  static requiredExtensions_Getter(mthis) native "SVGMaskElement_requiredExtensions_Getter";
 
-  static $requiredFeatures_Getter(mthis) native "SVGMaskElement_requiredFeatures_Getter";
+  static requiredFeatures_Getter(mthis) native "SVGMaskElement_requiredFeatures_Getter";
 
-  static $systemLanguage_Getter(mthis) native "SVGMaskElement_systemLanguage_Getter";
+  static systemLanguage_Getter(mthis) native "SVGMaskElement_systemLanguage_Getter";
 
-  static $hasExtension_Callback(mthis, extension) native "SVGMaskElement_hasExtension_Callback_RESOLVER_STRING_1_DOMString";
+  static hasExtension_Callback_DOMString(mthis, extension) native "SVGMaskElement_hasExtension_Callback_DOMString";
 }
 
 class BlinkSVGMatrix {
-  static $a_Getter(mthis) native "SVGMatrix_a_Getter";
+  static a_Getter(mthis) native "SVGMatrix_a_Getter";
 
-  static $a_Setter(mthis, value) native "SVGMatrix_a_Setter";
+  static a_Setter_double(mthis, value) native "SVGMatrix_a_Setter";
 
-  static $b_Getter(mthis) native "SVGMatrix_b_Getter";
+  static b_Getter(mthis) native "SVGMatrix_b_Getter";
 
-  static $b_Setter(mthis, value) native "SVGMatrix_b_Setter";
+  static b_Setter_double(mthis, value) native "SVGMatrix_b_Setter";
 
-  static $c_Getter(mthis) native "SVGMatrix_c_Getter";
+  static c_Getter(mthis) native "SVGMatrix_c_Getter";
 
-  static $c_Setter(mthis, value) native "SVGMatrix_c_Setter";
+  static c_Setter_double(mthis, value) native "SVGMatrix_c_Setter";
 
-  static $d_Getter(mthis) native "SVGMatrix_d_Getter";
+  static d_Getter(mthis) native "SVGMatrix_d_Getter";
 
-  static $d_Setter(mthis, value) native "SVGMatrix_d_Setter";
+  static d_Setter_double(mthis, value) native "SVGMatrix_d_Setter";
 
-  static $e_Getter(mthis) native "SVGMatrix_e_Getter";
+  static e_Getter(mthis) native "SVGMatrix_e_Getter";
 
-  static $e_Setter(mthis, value) native "SVGMatrix_e_Setter";
+  static e_Setter_double(mthis, value) native "SVGMatrix_e_Setter";
 
-  static $f_Getter(mthis) native "SVGMatrix_f_Getter";
+  static f_Getter(mthis) native "SVGMatrix_f_Getter";
 
-  static $f_Setter(mthis, value) native "SVGMatrix_f_Setter";
+  static f_Setter_double(mthis, value) native "SVGMatrix_f_Setter";
 
-  static $flipX_Callback(mthis) native "SVGMatrix_flipX_Callback_RESOLVER_STRING_0_";
+  static flipX_Callback(mthis) native "SVGMatrix_flipX_Callback";
 
-  static $flipY_Callback(mthis) native "SVGMatrix_flipY_Callback_RESOLVER_STRING_0_";
+  static flipY_Callback(mthis) native "SVGMatrix_flipY_Callback";
 
-  static $inverse_Callback(mthis) native "SVGMatrix_inverse_Callback_RESOLVER_STRING_0_";
+  static inverse_Callback(mthis) native "SVGMatrix_inverse_Callback";
 
-  static $multiply_Callback(mthis, secondMatrix) native "SVGMatrix_multiply_Callback_RESOLVER_STRING_1_SVGMatrix";
+  static multiply_Callback_SVGMatrix(mthis, secondMatrix) native "SVGMatrix_multiply_Callback_SVGMatrix";
 
-  static $rotate_Callback(mthis, angle) native "SVGMatrix_rotate_Callback_RESOLVER_STRING_1_float";
+  static rotate_Callback_float(mthis, angle) native "SVGMatrix_rotate_Callback_float";
 
-  static $rotateFromVector_Callback(mthis, x, y) native "SVGMatrix_rotateFromVector_Callback_RESOLVER_STRING_2_float_float";
+  static rotateFromVector_Callback_float_float(mthis, x, y) native "SVGMatrix_rotateFromVector_Callback_float_float";
 
-  static $scale_Callback(mthis, scaleFactor) native "SVGMatrix_scale_Callback_RESOLVER_STRING_1_float";
+  static scale_Callback_float(mthis, scaleFactor) native "SVGMatrix_scale_Callback_float";
 
-  static $scaleNonUniform_Callback(mthis, scaleFactorX, scaleFactorY) native "SVGMatrix_scaleNonUniform_Callback_RESOLVER_STRING_2_float_float";
+  static scaleNonUniform_Callback_float_float(mthis, scaleFactorX, scaleFactorY) native "SVGMatrix_scaleNonUniform_Callback_float_float";
 
-  static $skewX_Callback(mthis, angle) native "SVGMatrix_skewX_Callback_RESOLVER_STRING_1_float";
+  static skewX_Callback_float(mthis, angle) native "SVGMatrix_skewX_Callback_float";
 
-  static $skewY_Callback(mthis, angle) native "SVGMatrix_skewY_Callback_RESOLVER_STRING_1_float";
+  static skewY_Callback_float(mthis, angle) native "SVGMatrix_skewY_Callback_float";
 
-  static $translate_Callback(mthis, x, y) native "SVGMatrix_translate_Callback_RESOLVER_STRING_2_float_float";
+  static translate_Callback_float_float(mthis, x, y) native "SVGMatrix_translate_Callback_float_float";
 }
 
 class BlinkSVGMetadataElement {}
@@ -5829,655 +5785,655 @@
 class BlinkSVGMissingGlyphElement {}
 
 class BlinkSVGNumber {
-  static $value_Getter(mthis) native "SVGNumber_value_Getter";
+  static value_Getter(mthis) native "SVGNumber_value_Getter";
 
-  static $value_Setter(mthis, value) native "SVGNumber_value_Setter";
+  static value_Setter_float(mthis, value) native "SVGNumber_value_Setter";
 }
 
 class BlinkSVGNumberList {
-  static $numberOfItems_Getter(mthis) native "SVGNumberList_numberOfItems_Getter";
+  static numberOfItems_Getter(mthis) native "SVGNumberList_numberOfItems_Getter";
 
-  static $appendItem_Callback(mthis, item) native "SVGNumberList_appendItem_Callback_RESOLVER_STRING_1_SVGNumber";
+  static appendItem_Callback_SVGNumber(mthis, item) native "SVGNumberList_appendItem_Callback_SVGNumber";
 
-  static $clear_Callback(mthis) native "SVGNumberList_clear_Callback_RESOLVER_STRING_0_";
+  static clear_Callback(mthis) native "SVGNumberList_clear_Callback";
 
-  static $getItem_Callback(mthis, index) native "SVGNumberList_getItem_Callback_RESOLVER_STRING_1_unsigned long";
+  static getItem_Callback_ul(mthis, index) native "SVGNumberList_getItem_Callback_unsigned long";
 
-  static $initialize_Callback(mthis, item) native "SVGNumberList_initialize_Callback_RESOLVER_STRING_1_SVGNumber";
+  static initialize_Callback_SVGNumber(mthis, item) native "SVGNumberList_initialize_Callback_SVGNumber";
 
-  static $insertItemBefore_Callback(mthis, item, index) native "SVGNumberList_insertItemBefore_Callback_RESOLVER_STRING_2_SVGNumber_unsigned long";
+  static insertItemBefore_Callback_SVGNumber_ul(mthis, item, index) native "SVGNumberList_insertItemBefore_Callback_SVGNumber_unsigned long";
 
-  static $removeItem_Callback(mthis, index) native "SVGNumberList_removeItem_Callback_RESOLVER_STRING_1_unsigned long";
+  static removeItem_Callback_ul(mthis, index) native "SVGNumberList_removeItem_Callback_unsigned long";
 
-  static $replaceItem_Callback(mthis, item, index) native "SVGNumberList_replaceItem_Callback_RESOLVER_STRING_2_SVGNumber_unsigned long";
+  static replaceItem_Callback_SVGNumber_ul(mthis, item, index) native "SVGNumberList_replaceItem_Callback_SVGNumber_unsigned long";
 }
 
 class BlinkSVGPathElement {
-  static $animatedNormalizedPathSegList_Getter(mthis) native "SVGPathElement_animatedNormalizedPathSegList_Getter";
+  static animatedNormalizedPathSegList_Getter(mthis) native "SVGPathElement_animatedNormalizedPathSegList_Getter";
 
-  static $animatedPathSegList_Getter(mthis) native "SVGPathElement_animatedPathSegList_Getter";
+  static animatedPathSegList_Getter(mthis) native "SVGPathElement_animatedPathSegList_Getter";
 
-  static $normalizedPathSegList_Getter(mthis) native "SVGPathElement_normalizedPathSegList_Getter";
+  static normalizedPathSegList_Getter(mthis) native "SVGPathElement_normalizedPathSegList_Getter";
 
-  static $pathLength_Getter(mthis) native "SVGPathElement_pathLength_Getter";
+  static pathLength_Getter(mthis) native "SVGPathElement_pathLength_Getter";
 
-  static $pathSegList_Getter(mthis) native "SVGPathElement_pathSegList_Getter";
+  static pathSegList_Getter(mthis) native "SVGPathElement_pathSegList_Getter";
 
-  static $createSVGPathSegArcAbs_Callback(mthis, x, y, r1, r2, angle, largeArcFlag, sweepFlag) native "SVGPathElement_createSVGPathSegArcAbs_Callback_RESOLVER_STRING_7_float_float_float_float_float_boolean_boolean";
+  static createSVGPathSegArcAbs_Callback_float_float_float_float_float_boolean_boolean(mthis, x, y, r1, r2, angle, largeArcFlag, sweepFlag) native "SVGPathElement_createSVGPathSegArcAbs_Callback_float_float_float_float_float_boolean_boolean";
 
-  static $createSVGPathSegArcRel_Callback(mthis, x, y, r1, r2, angle, largeArcFlag, sweepFlag) native "SVGPathElement_createSVGPathSegArcRel_Callback_RESOLVER_STRING_7_float_float_float_float_float_boolean_boolean";
+  static createSVGPathSegArcRel_Callback_float_float_float_float_float_boolean_boolean(mthis, x, y, r1, r2, angle, largeArcFlag, sweepFlag) native "SVGPathElement_createSVGPathSegArcRel_Callback_float_float_float_float_float_boolean_boolean";
 
-  static $createSVGPathSegClosePath_Callback(mthis) native "SVGPathElement_createSVGPathSegClosePath_Callback_RESOLVER_STRING_0_";
+  static createSVGPathSegClosePath_Callback(mthis) native "SVGPathElement_createSVGPathSegClosePath_Callback";
 
-  static $createSVGPathSegCurvetoCubicAbs_Callback(mthis, x, y, x1, y1, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicAbs_Callback_RESOLVER_STRING_6_float_float_float_float_float_float";
+  static createSVGPathSegCurvetoCubicAbs_Callback_float_float_float_float_float_float(mthis, x, y, x1, y1, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicAbs_Callback_float_float_float_float_float_float";
 
-  static $createSVGPathSegCurvetoCubicRel_Callback(mthis, x, y, x1, y1, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicRel_Callback_RESOLVER_STRING_6_float_float_float_float_float_float";
+  static createSVGPathSegCurvetoCubicRel_Callback_float_float_float_float_float_float(mthis, x, y, x1, y1, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicRel_Callback_float_float_float_float_float_float";
 
-  static $createSVGPathSegCurvetoCubicSmoothAbs_Callback(mthis, x, y, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothAbs_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static createSVGPathSegCurvetoCubicSmoothAbs_Callback_float_float_float_float(mthis, x, y, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothAbs_Callback_float_float_float_float";
 
-  static $createSVGPathSegCurvetoCubicSmoothRel_Callback(mthis, x, y, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothRel_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static createSVGPathSegCurvetoCubicSmoothRel_Callback_float_float_float_float(mthis, x, y, x2, y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothRel_Callback_float_float_float_float";
 
-  static $createSVGPathSegCurvetoQuadraticAbs_Callback(mthis, x, y, x1, y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticAbs_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static createSVGPathSegCurvetoQuadraticAbs_Callback_float_float_float_float(mthis, x, y, x1, y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticAbs_Callback_float_float_float_float";
 
-  static $createSVGPathSegCurvetoQuadraticRel_Callback(mthis, x, y, x1, y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticRel_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static createSVGPathSegCurvetoQuadraticRel_Callback_float_float_float_float(mthis, x, y, x1, y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticRel_Callback_float_float_float_float";
 
-  static $createSVGPathSegCurvetoQuadraticSmoothAbs_Callback(mthis, x, y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_RESOLVER_STRING_2_float_float";
+  static createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_float_float(mthis, x, y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_float_float";
 
-  static $createSVGPathSegCurvetoQuadraticSmoothRel_Callback(mthis, x, y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothRel_Callback_RESOLVER_STRING_2_float_float";
+  static createSVGPathSegCurvetoQuadraticSmoothRel_Callback_float_float(mthis, x, y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothRel_Callback_float_float";
 
-  static $createSVGPathSegLinetoAbs_Callback(mthis, x, y) native "SVGPathElement_createSVGPathSegLinetoAbs_Callback_RESOLVER_STRING_2_float_float";
+  static createSVGPathSegLinetoAbs_Callback_float_float(mthis, x, y) native "SVGPathElement_createSVGPathSegLinetoAbs_Callback_float_float";
 
-  static $createSVGPathSegLinetoHorizontalAbs_Callback(mthis, x) native "SVGPathElement_createSVGPathSegLinetoHorizontalAbs_Callback_RESOLVER_STRING_1_float";
+  static createSVGPathSegLinetoHorizontalAbs_Callback_float(mthis, x) native "SVGPathElement_createSVGPathSegLinetoHorizontalAbs_Callback_float";
 
-  static $createSVGPathSegLinetoHorizontalRel_Callback(mthis, x) native "SVGPathElement_createSVGPathSegLinetoHorizontalRel_Callback_RESOLVER_STRING_1_float";
+  static createSVGPathSegLinetoHorizontalRel_Callback_float(mthis, x) native "SVGPathElement_createSVGPathSegLinetoHorizontalRel_Callback_float";
 
-  static $createSVGPathSegLinetoRel_Callback(mthis, x, y) native "SVGPathElement_createSVGPathSegLinetoRel_Callback_RESOLVER_STRING_2_float_float";
+  static createSVGPathSegLinetoRel_Callback_float_float(mthis, x, y) native "SVGPathElement_createSVGPathSegLinetoRel_Callback_float_float";
 
-  static $createSVGPathSegLinetoVerticalAbs_Callback(mthis, y) native "SVGPathElement_createSVGPathSegLinetoVerticalAbs_Callback_RESOLVER_STRING_1_float";
+  static createSVGPathSegLinetoVerticalAbs_Callback_float(mthis, y) native "SVGPathElement_createSVGPathSegLinetoVerticalAbs_Callback_float";
 
-  static $createSVGPathSegLinetoVerticalRel_Callback(mthis, y) native "SVGPathElement_createSVGPathSegLinetoVerticalRel_Callback_RESOLVER_STRING_1_float";
+  static createSVGPathSegLinetoVerticalRel_Callback_float(mthis, y) native "SVGPathElement_createSVGPathSegLinetoVerticalRel_Callback_float";
 
-  static $createSVGPathSegMovetoAbs_Callback(mthis, x, y) native "SVGPathElement_createSVGPathSegMovetoAbs_Callback_RESOLVER_STRING_2_float_float";
+  static createSVGPathSegMovetoAbs_Callback_float_float(mthis, x, y) native "SVGPathElement_createSVGPathSegMovetoAbs_Callback_float_float";
 
-  static $createSVGPathSegMovetoRel_Callback(mthis, x, y) native "SVGPathElement_createSVGPathSegMovetoRel_Callback_RESOLVER_STRING_2_float_float";
+  static createSVGPathSegMovetoRel_Callback_float_float(mthis, x, y) native "SVGPathElement_createSVGPathSegMovetoRel_Callback_float_float";
 
-  static $getPathSegAtLength_Callback(mthis, distance) native "SVGPathElement_getPathSegAtLength_Callback_RESOLVER_STRING_1_float";
+  static getPathSegAtLength_Callback_float(mthis, distance) native "SVGPathElement_getPathSegAtLength_Callback_float";
 
-  static $getPointAtLength_Callback(mthis, distance) native "SVGPathElement_getPointAtLength_Callback_RESOLVER_STRING_1_float";
+  static getPointAtLength_Callback_float(mthis, distance) native "SVGPathElement_getPointAtLength_Callback_float";
 
-  static $getTotalLength_Callback(mthis) native "SVGPathElement_getTotalLength_Callback_RESOLVER_STRING_0_";
+  static getTotalLength_Callback(mthis) native "SVGPathElement_getTotalLength_Callback";
 }
 
 class BlinkSVGPathSeg {
-  static $pathSegType_Getter(mthis) native "SVGPathSeg_pathSegType_Getter";
+  static pathSegType_Getter(mthis) native "SVGPathSeg_pathSegType_Getter";
 
-  static $pathSegTypeAsLetter_Getter(mthis) native "SVGPathSeg_pathSegTypeAsLetter_Getter";
+  static pathSegTypeAsLetter_Getter(mthis) native "SVGPathSeg_pathSegTypeAsLetter_Getter";
 }
 
 class BlinkSVGPathSegArcAbs {
-  static $angle_Getter(mthis) native "SVGPathSegArcAbs_angle_Getter";
+  static angle_Getter(mthis) native "SVGPathSegArcAbs_angle_Getter";
 
-  static $angle_Setter(mthis, value) native "SVGPathSegArcAbs_angle_Setter";
+  static angle_Setter_float(mthis, value) native "SVGPathSegArcAbs_angle_Setter";
 
-  static $largeArcFlag_Getter(mthis) native "SVGPathSegArcAbs_largeArcFlag_Getter";
+  static largeArcFlag_Getter(mthis) native "SVGPathSegArcAbs_largeArcFlag_Getter";
 
-  static $largeArcFlag_Setter(mthis, value) native "SVGPathSegArcAbs_largeArcFlag_Setter";
+  static largeArcFlag_Setter_boolean(mthis, value) native "SVGPathSegArcAbs_largeArcFlag_Setter";
 
-  static $r1_Getter(mthis) native "SVGPathSegArcAbs_r1_Getter";
+  static r1_Getter(mthis) native "SVGPathSegArcAbs_r1_Getter";
 
-  static $r1_Setter(mthis, value) native "SVGPathSegArcAbs_r1_Setter";
+  static r1_Setter_float(mthis, value) native "SVGPathSegArcAbs_r1_Setter";
 
-  static $r2_Getter(mthis) native "SVGPathSegArcAbs_r2_Getter";
+  static r2_Getter(mthis) native "SVGPathSegArcAbs_r2_Getter";
 
-  static $r2_Setter(mthis, value) native "SVGPathSegArcAbs_r2_Setter";
+  static r2_Setter_float(mthis, value) native "SVGPathSegArcAbs_r2_Setter";
 
-  static $sweepFlag_Getter(mthis) native "SVGPathSegArcAbs_sweepFlag_Getter";
+  static sweepFlag_Getter(mthis) native "SVGPathSegArcAbs_sweepFlag_Getter";
 
-  static $sweepFlag_Setter(mthis, value) native "SVGPathSegArcAbs_sweepFlag_Setter";
+  static sweepFlag_Setter_boolean(mthis, value) native "SVGPathSegArcAbs_sweepFlag_Setter";
 
-  static $x_Getter(mthis) native "SVGPathSegArcAbs_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegArcAbs_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegArcAbs_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegArcAbs_x_Setter";
 
-  static $y_Getter(mthis) native "SVGPathSegArcAbs_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegArcAbs_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegArcAbs_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegArcAbs_y_Setter";
 }
 
 class BlinkSVGPathSegArcRel {
-  static $angle_Getter(mthis) native "SVGPathSegArcRel_angle_Getter";
+  static angle_Getter(mthis) native "SVGPathSegArcRel_angle_Getter";
 
-  static $angle_Setter(mthis, value) native "SVGPathSegArcRel_angle_Setter";
+  static angle_Setter_float(mthis, value) native "SVGPathSegArcRel_angle_Setter";
 
-  static $largeArcFlag_Getter(mthis) native "SVGPathSegArcRel_largeArcFlag_Getter";
+  static largeArcFlag_Getter(mthis) native "SVGPathSegArcRel_largeArcFlag_Getter";
 
-  static $largeArcFlag_Setter(mthis, value) native "SVGPathSegArcRel_largeArcFlag_Setter";
+  static largeArcFlag_Setter_boolean(mthis, value) native "SVGPathSegArcRel_largeArcFlag_Setter";
 
-  static $r1_Getter(mthis) native "SVGPathSegArcRel_r1_Getter";
+  static r1_Getter(mthis) native "SVGPathSegArcRel_r1_Getter";
 
-  static $r1_Setter(mthis, value) native "SVGPathSegArcRel_r1_Setter";
+  static r1_Setter_float(mthis, value) native "SVGPathSegArcRel_r1_Setter";
 
-  static $r2_Getter(mthis) native "SVGPathSegArcRel_r2_Getter";
+  static r2_Getter(mthis) native "SVGPathSegArcRel_r2_Getter";
 
-  static $r2_Setter(mthis, value) native "SVGPathSegArcRel_r2_Setter";
+  static r2_Setter_float(mthis, value) native "SVGPathSegArcRel_r2_Setter";
 
-  static $sweepFlag_Getter(mthis) native "SVGPathSegArcRel_sweepFlag_Getter";
+  static sweepFlag_Getter(mthis) native "SVGPathSegArcRel_sweepFlag_Getter";
 
-  static $sweepFlag_Setter(mthis, value) native "SVGPathSegArcRel_sweepFlag_Setter";
+  static sweepFlag_Setter_boolean(mthis, value) native "SVGPathSegArcRel_sweepFlag_Setter";
 
-  static $x_Getter(mthis) native "SVGPathSegArcRel_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegArcRel_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegArcRel_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegArcRel_x_Setter";
 
-  static $y_Getter(mthis) native "SVGPathSegArcRel_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegArcRel_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegArcRel_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegArcRel_y_Setter";
 }
 
 class BlinkSVGPathSegClosePath {}
 
 class BlinkSVGPathSegCurvetoCubicAbs {
-  static $x_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegCurvetoCubicAbs_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicAbs_x_Setter";
 
-  static $x1_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_x1_Getter";
+  static x1_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_x1_Getter";
 
-  static $x1_Setter(mthis, value) native "SVGPathSegCurvetoCubicAbs_x1_Setter";
+  static x1_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicAbs_x1_Setter";
 
-  static $x2_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_x2_Getter";
+  static x2_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_x2_Getter";
 
-  static $x2_Setter(mthis, value) native "SVGPathSegCurvetoCubicAbs_x2_Setter";
+  static x2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicAbs_x2_Setter";
 
-  static $y_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegCurvetoCubicAbs_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicAbs_y_Setter";
 
-  static $y1_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_y1_Getter";
+  static y1_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_y1_Getter";
 
-  static $y1_Setter(mthis, value) native "SVGPathSegCurvetoCubicAbs_y1_Setter";
+  static y1_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicAbs_y1_Setter";
 
-  static $y2_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_y2_Getter";
+  static y2_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_y2_Getter";
 
-  static $y2_Setter(mthis, value) native "SVGPathSegCurvetoCubicAbs_y2_Setter";
+  static y2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicAbs_y2_Setter";
 }
 
 class BlinkSVGPathSegCurvetoCubicRel {
-  static $x_Getter(mthis) native "SVGPathSegCurvetoCubicRel_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegCurvetoCubicRel_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegCurvetoCubicRel_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicRel_x_Setter";
 
-  static $x1_Getter(mthis) native "SVGPathSegCurvetoCubicRel_x1_Getter";
+  static x1_Getter(mthis) native "SVGPathSegCurvetoCubicRel_x1_Getter";
 
-  static $x1_Setter(mthis, value) native "SVGPathSegCurvetoCubicRel_x1_Setter";
+  static x1_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicRel_x1_Setter";
 
-  static $x2_Getter(mthis) native "SVGPathSegCurvetoCubicRel_x2_Getter";
+  static x2_Getter(mthis) native "SVGPathSegCurvetoCubicRel_x2_Getter";
 
-  static $x2_Setter(mthis, value) native "SVGPathSegCurvetoCubicRel_x2_Setter";
+  static x2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicRel_x2_Setter";
 
-  static $y_Getter(mthis) native "SVGPathSegCurvetoCubicRel_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegCurvetoCubicRel_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegCurvetoCubicRel_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicRel_y_Setter";
 
-  static $y1_Getter(mthis) native "SVGPathSegCurvetoCubicRel_y1_Getter";
+  static y1_Getter(mthis) native "SVGPathSegCurvetoCubicRel_y1_Getter";
 
-  static $y1_Setter(mthis, value) native "SVGPathSegCurvetoCubicRel_y1_Setter";
+  static y1_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicRel_y1_Setter";
 
-  static $y2_Getter(mthis) native "SVGPathSegCurvetoCubicRel_y2_Getter";
+  static y2_Getter(mthis) native "SVGPathSegCurvetoCubicRel_y2_Getter";
 
-  static $y2_Setter(mthis, value) native "SVGPathSegCurvetoCubicRel_y2_Setter";
+  static y2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicRel_y2_Setter";
 }
 
 class BlinkSVGPathSegCurvetoCubicSmoothAbs {
-  static $x_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_x_Setter";
 
-  static $x2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_x2_Getter";
+  static x2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_x2_Getter";
 
-  static $x2_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_x2_Setter";
+  static x2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_x2_Setter";
 
-  static $y_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_y_Setter";
 
-  static $y2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_y2_Getter";
+  static y2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_y2_Getter";
 
-  static $y2_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_y2_Setter";
+  static y2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothAbs_y2_Setter";
 }
 
 class BlinkSVGPathSegCurvetoCubicSmoothRel {
-  static $x_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_x_Setter";
 
-  static $x2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_x2_Getter";
+  static x2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_x2_Getter";
 
-  static $x2_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_x2_Setter";
+  static x2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_x2_Setter";
 
-  static $y_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_y_Setter";
 
-  static $y2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_y2_Getter";
+  static y2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_y2_Getter";
 
-  static $y2_Setter(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_y2_Setter";
+  static y2_Setter_float(mthis, value) native "SVGPathSegCurvetoCubicSmoothRel_y2_Setter";
 }
 
 class BlinkSVGPathSegCurvetoQuadraticAbs {
-  static $x_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_x_Setter";
 
-  static $x1_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_x1_Getter";
+  static x1_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_x1_Getter";
 
-  static $x1_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_x1_Setter";
+  static x1_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_x1_Setter";
 
-  static $y_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_y_Setter";
 
-  static $y1_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_y1_Getter";
+  static y1_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_y1_Getter";
 
-  static $y1_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_y1_Setter";
+  static y1_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticAbs_y1_Setter";
 }
 
 class BlinkSVGPathSegCurvetoQuadraticRel {
-  static $x_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticRel_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticRel_x_Setter";
 
-  static $x1_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_x1_Getter";
+  static x1_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_x1_Getter";
 
-  static $x1_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticRel_x1_Setter";
+  static x1_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticRel_x1_Setter";
 
-  static $y_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticRel_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticRel_y_Setter";
 
-  static $y1_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_y1_Getter";
+  static y1_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_y1_Getter";
 
-  static $y1_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticRel_y1_Setter";
+  static y1_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticRel_y1_Setter";
 }
 
 class BlinkSVGPathSegCurvetoQuadraticSmoothAbs {
-  static $x_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothAbs_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothAbs_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothAbs_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothAbs_x_Setter";
 
-  static $y_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothAbs_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothAbs_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothAbs_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothAbs_y_Setter";
 }
 
 class BlinkSVGPathSegCurvetoQuadraticSmoothRel {
-  static $x_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothRel_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothRel_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothRel_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothRel_x_Setter";
 
-  static $y_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothRel_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothRel_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothRel_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegCurvetoQuadraticSmoothRel_y_Setter";
 }
 
 class BlinkSVGPathSegLinetoAbs {
-  static $x_Getter(mthis) native "SVGPathSegLinetoAbs_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegLinetoAbs_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegLinetoAbs_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegLinetoAbs_x_Setter";
 
-  static $y_Getter(mthis) native "SVGPathSegLinetoAbs_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegLinetoAbs_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegLinetoAbs_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegLinetoAbs_y_Setter";
 }
 
 class BlinkSVGPathSegLinetoHorizontalAbs {
-  static $x_Getter(mthis) native "SVGPathSegLinetoHorizontalAbs_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegLinetoHorizontalAbs_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegLinetoHorizontalAbs_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegLinetoHorizontalAbs_x_Setter";
 }
 
 class BlinkSVGPathSegLinetoHorizontalRel {
-  static $x_Getter(mthis) native "SVGPathSegLinetoHorizontalRel_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegLinetoHorizontalRel_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegLinetoHorizontalRel_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegLinetoHorizontalRel_x_Setter";
 }
 
 class BlinkSVGPathSegLinetoRel {
-  static $x_Getter(mthis) native "SVGPathSegLinetoRel_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegLinetoRel_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegLinetoRel_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegLinetoRel_x_Setter";
 
-  static $y_Getter(mthis) native "SVGPathSegLinetoRel_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegLinetoRel_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegLinetoRel_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegLinetoRel_y_Setter";
 }
 
 class BlinkSVGPathSegLinetoVerticalAbs {
-  static $y_Getter(mthis) native "SVGPathSegLinetoVerticalAbs_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegLinetoVerticalAbs_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegLinetoVerticalAbs_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegLinetoVerticalAbs_y_Setter";
 }
 
 class BlinkSVGPathSegLinetoVerticalRel {
-  static $y_Getter(mthis) native "SVGPathSegLinetoVerticalRel_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegLinetoVerticalRel_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegLinetoVerticalRel_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegLinetoVerticalRel_y_Setter";
 }
 
 class BlinkSVGPathSegList {
-  static $numberOfItems_Getter(mthis) native "SVGPathSegList_numberOfItems_Getter";
+  static numberOfItems_Getter(mthis) native "SVGPathSegList_numberOfItems_Getter";
 
-  static $appendItem_Callback(mthis, newItem) native "SVGPathSegList_appendItem_Callback_RESOLVER_STRING_1_SVGPathSeg";
+  static appendItem_Callback_SVGPathSeg(mthis, newItem) native "SVGPathSegList_appendItem_Callback_SVGPathSeg";
 
-  static $clear_Callback(mthis) native "SVGPathSegList_clear_Callback_RESOLVER_STRING_0_";
+  static clear_Callback(mthis) native "SVGPathSegList_clear_Callback";
 
-  static $getItem_Callback(mthis, index) native "SVGPathSegList_getItem_Callback_RESOLVER_STRING_1_unsigned long";
+  static getItem_Callback_ul(mthis, index) native "SVGPathSegList_getItem_Callback_unsigned long";
 
-  static $initialize_Callback(mthis, newItem) native "SVGPathSegList_initialize_Callback_RESOLVER_STRING_1_SVGPathSeg";
+  static initialize_Callback_SVGPathSeg(mthis, newItem) native "SVGPathSegList_initialize_Callback_SVGPathSeg";
 
-  static $insertItemBefore_Callback(mthis, newItem, index) native "SVGPathSegList_insertItemBefore_Callback_RESOLVER_STRING_2_SVGPathSeg_unsigned long";
+  static insertItemBefore_Callback_SVGPathSeg_ul(mthis, newItem, index) native "SVGPathSegList_insertItemBefore_Callback_SVGPathSeg_unsigned long";
 
-  static $removeItem_Callback(mthis, index) native "SVGPathSegList_removeItem_Callback_RESOLVER_STRING_1_unsigned long";
+  static removeItem_Callback_ul(mthis, index) native "SVGPathSegList_removeItem_Callback_unsigned long";
 
-  static $replaceItem_Callback(mthis, newItem, index) native "SVGPathSegList_replaceItem_Callback_RESOLVER_STRING_2_SVGPathSeg_unsigned long";
+  static replaceItem_Callback_SVGPathSeg_ul(mthis, newItem, index) native "SVGPathSegList_replaceItem_Callback_SVGPathSeg_unsigned long";
 }
 
 class BlinkSVGPathSegMovetoAbs {
-  static $x_Getter(mthis) native "SVGPathSegMovetoAbs_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegMovetoAbs_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegMovetoAbs_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegMovetoAbs_x_Setter";
 
-  static $y_Getter(mthis) native "SVGPathSegMovetoAbs_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegMovetoAbs_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegMovetoAbs_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegMovetoAbs_y_Setter";
 }
 
 class BlinkSVGPathSegMovetoRel {
-  static $x_Getter(mthis) native "SVGPathSegMovetoRel_x_Getter";
+  static x_Getter(mthis) native "SVGPathSegMovetoRel_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPathSegMovetoRel_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPathSegMovetoRel_x_Setter";
 
-  static $y_Getter(mthis) native "SVGPathSegMovetoRel_y_Getter";
+  static y_Getter(mthis) native "SVGPathSegMovetoRel_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPathSegMovetoRel_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPathSegMovetoRel_y_Setter";
 }
 
 class BlinkSVGPatternElement {
-  static $height_Getter(mthis) native "SVGPatternElement_height_Getter";
+  static height_Getter(mthis) native "SVGPatternElement_height_Getter";
 
-  static $patternContentUnits_Getter(mthis) native "SVGPatternElement_patternContentUnits_Getter";
+  static patternContentUnits_Getter(mthis) native "SVGPatternElement_patternContentUnits_Getter";
 
-  static $patternTransform_Getter(mthis) native "SVGPatternElement_patternTransform_Getter";
+  static patternTransform_Getter(mthis) native "SVGPatternElement_patternTransform_Getter";
 
-  static $patternUnits_Getter(mthis) native "SVGPatternElement_patternUnits_Getter";
+  static patternUnits_Getter(mthis) native "SVGPatternElement_patternUnits_Getter";
 
-  static $width_Getter(mthis) native "SVGPatternElement_width_Getter";
+  static width_Getter(mthis) native "SVGPatternElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGPatternElement_x_Getter";
+  static x_Getter(mthis) native "SVGPatternElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGPatternElement_y_Getter";
+  static y_Getter(mthis) native "SVGPatternElement_y_Getter";
 
-  static $preserveAspectRatio_Getter(mthis) native "SVGPatternElement_preserveAspectRatio_Getter";
+  static preserveAspectRatio_Getter(mthis) native "SVGPatternElement_preserveAspectRatio_Getter";
 
-  static $viewBox_Getter(mthis) native "SVGPatternElement_viewBox_Getter";
+  static viewBox_Getter(mthis) native "SVGPatternElement_viewBox_Getter";
 
-  static $requiredExtensions_Getter(mthis) native "SVGPatternElement_requiredExtensions_Getter";
+  static requiredExtensions_Getter(mthis) native "SVGPatternElement_requiredExtensions_Getter";
 
-  static $requiredFeatures_Getter(mthis) native "SVGPatternElement_requiredFeatures_Getter";
+  static requiredFeatures_Getter(mthis) native "SVGPatternElement_requiredFeatures_Getter";
 
-  static $systemLanguage_Getter(mthis) native "SVGPatternElement_systemLanguage_Getter";
+  static systemLanguage_Getter(mthis) native "SVGPatternElement_systemLanguage_Getter";
 
-  static $hasExtension_Callback(mthis, extension) native "SVGPatternElement_hasExtension_Callback_RESOLVER_STRING_1_DOMString";
+  static hasExtension_Callback_DOMString(mthis, extension) native "SVGPatternElement_hasExtension_Callback_DOMString";
 
-  static $href_Getter(mthis) native "SVGPatternElement_href_Getter";
+  static href_Getter(mthis) native "SVGPatternElement_href_Getter";
 }
 
 class BlinkSVGPoint {
-  static $x_Getter(mthis) native "SVGPoint_x_Getter";
+  static x_Getter(mthis) native "SVGPoint_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGPoint_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGPoint_x_Setter";
 
-  static $y_Getter(mthis) native "SVGPoint_y_Getter";
+  static y_Getter(mthis) native "SVGPoint_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGPoint_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGPoint_y_Setter";
 
-  static $matrixTransform_Callback(mthis, matrix) native "SVGPoint_matrixTransform_Callback_RESOLVER_STRING_1_SVGMatrix";
+  static matrixTransform_Callback_SVGMatrix(mthis, matrix) native "SVGPoint_matrixTransform_Callback_SVGMatrix";
 }
 
 class BlinkSVGPointList {
-  static $numberOfItems_Getter(mthis) native "SVGPointList_numberOfItems_Getter";
+  static numberOfItems_Getter(mthis) native "SVGPointList_numberOfItems_Getter";
 
-  static $appendItem_Callback(mthis, item) native "SVGPointList_appendItem_Callback_RESOLVER_STRING_1_SVGPoint";
+  static appendItem_Callback_SVGPoint(mthis, item) native "SVGPointList_appendItem_Callback_SVGPoint";
 
-  static $clear_Callback(mthis) native "SVGPointList_clear_Callback_RESOLVER_STRING_0_";
+  static clear_Callback(mthis) native "SVGPointList_clear_Callback";
 
-  static $getItem_Callback(mthis, index) native "SVGPointList_getItem_Callback_RESOLVER_STRING_1_unsigned long";
+  static getItem_Callback_ul(mthis, index) native "SVGPointList_getItem_Callback_unsigned long";
 
-  static $initialize_Callback(mthis, item) native "SVGPointList_initialize_Callback_RESOLVER_STRING_1_SVGPoint";
+  static initialize_Callback_SVGPoint(mthis, item) native "SVGPointList_initialize_Callback_SVGPoint";
 
-  static $insertItemBefore_Callback(mthis, item, index) native "SVGPointList_insertItemBefore_Callback_RESOLVER_STRING_2_SVGPoint_unsigned long";
+  static insertItemBefore_Callback_SVGPoint_ul(mthis, item, index) native "SVGPointList_insertItemBefore_Callback_SVGPoint_unsigned long";
 
-  static $removeItem_Callback(mthis, index) native "SVGPointList_removeItem_Callback_RESOLVER_STRING_1_unsigned long";
+  static removeItem_Callback_ul(mthis, index) native "SVGPointList_removeItem_Callback_unsigned long";
 
-  static $replaceItem_Callback(mthis, item, index) native "SVGPointList_replaceItem_Callback_RESOLVER_STRING_2_SVGPoint_unsigned long";
+  static replaceItem_Callback_SVGPoint_ul(mthis, item, index) native "SVGPointList_replaceItem_Callback_SVGPoint_unsigned long";
 }
 
 class BlinkSVGPolygonElement {
-  static $animatedPoints_Getter(mthis) native "SVGPolygonElement_animatedPoints_Getter";
+  static animatedPoints_Getter(mthis) native "SVGPolygonElement_animatedPoints_Getter";
 
-  static $points_Getter(mthis) native "SVGPolygonElement_points_Getter";
+  static points_Getter(mthis) native "SVGPolygonElement_points_Getter";
 }
 
 class BlinkSVGPolylineElement {
-  static $animatedPoints_Getter(mthis) native "SVGPolylineElement_animatedPoints_Getter";
+  static animatedPoints_Getter(mthis) native "SVGPolylineElement_animatedPoints_Getter";
 
-  static $points_Getter(mthis) native "SVGPolylineElement_points_Getter";
+  static points_Getter(mthis) native "SVGPolylineElement_points_Getter";
 }
 
 class BlinkSVGPreserveAspectRatio {
-  static $align_Getter(mthis) native "SVGPreserveAspectRatio_align_Getter";
+  static align_Getter(mthis) native "SVGPreserveAspectRatio_align_Getter";
 
-  static $align_Setter(mthis, value) native "SVGPreserveAspectRatio_align_Setter";
+  static align_Setter_us(mthis, value) native "SVGPreserveAspectRatio_align_Setter";
 
-  static $meetOrSlice_Getter(mthis) native "SVGPreserveAspectRatio_meetOrSlice_Getter";
+  static meetOrSlice_Getter(mthis) native "SVGPreserveAspectRatio_meetOrSlice_Getter";
 
-  static $meetOrSlice_Setter(mthis, value) native "SVGPreserveAspectRatio_meetOrSlice_Setter";
+  static meetOrSlice_Setter_us(mthis, value) native "SVGPreserveAspectRatio_meetOrSlice_Setter";
 }
 
 class BlinkSVGRadialGradientElement {
-  static $cx_Getter(mthis) native "SVGRadialGradientElement_cx_Getter";
+  static cx_Getter(mthis) native "SVGRadialGradientElement_cx_Getter";
 
-  static $cy_Getter(mthis) native "SVGRadialGradientElement_cy_Getter";
+  static cy_Getter(mthis) native "SVGRadialGradientElement_cy_Getter";
 
-  static $fr_Getter(mthis) native "SVGRadialGradientElement_fr_Getter";
+  static fr_Getter(mthis) native "SVGRadialGradientElement_fr_Getter";
 
-  static $fx_Getter(mthis) native "SVGRadialGradientElement_fx_Getter";
+  static fx_Getter(mthis) native "SVGRadialGradientElement_fx_Getter";
 
-  static $fy_Getter(mthis) native "SVGRadialGradientElement_fy_Getter";
+  static fy_Getter(mthis) native "SVGRadialGradientElement_fy_Getter";
 
-  static $r_Getter(mthis) native "SVGRadialGradientElement_r_Getter";
+  static r_Getter(mthis) native "SVGRadialGradientElement_r_Getter";
 }
 
 class BlinkSVGRect {
-  static $height_Getter(mthis) native "SVGRect_height_Getter";
+  static height_Getter(mthis) native "SVGRect_height_Getter";
 
-  static $height_Setter(mthis, value) native "SVGRect_height_Setter";
+  static height_Setter_float(mthis, value) native "SVGRect_height_Setter";
 
-  static $width_Getter(mthis) native "SVGRect_width_Getter";
+  static width_Getter(mthis) native "SVGRect_width_Getter";
 
-  static $width_Setter(mthis, value) native "SVGRect_width_Setter";
+  static width_Setter_float(mthis, value) native "SVGRect_width_Setter";
 
-  static $x_Getter(mthis) native "SVGRect_x_Getter";
+  static x_Getter(mthis) native "SVGRect_x_Getter";
 
-  static $x_Setter(mthis, value) native "SVGRect_x_Setter";
+  static x_Setter_float(mthis, value) native "SVGRect_x_Setter";
 
-  static $y_Getter(mthis) native "SVGRect_y_Getter";
+  static y_Getter(mthis) native "SVGRect_y_Getter";
 
-  static $y_Setter(mthis, value) native "SVGRect_y_Setter";
+  static y_Setter_float(mthis, value) native "SVGRect_y_Setter";
 }
 
 class BlinkSVGRectElement {
-  static $height_Getter(mthis) native "SVGRectElement_height_Getter";
+  static height_Getter(mthis) native "SVGRectElement_height_Getter";
 
-  static $rx_Getter(mthis) native "SVGRectElement_rx_Getter";
+  static rx_Getter(mthis) native "SVGRectElement_rx_Getter";
 
-  static $ry_Getter(mthis) native "SVGRectElement_ry_Getter";
+  static ry_Getter(mthis) native "SVGRectElement_ry_Getter";
 
-  static $width_Getter(mthis) native "SVGRectElement_width_Getter";
+  static width_Getter(mthis) native "SVGRectElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGRectElement_x_Getter";
+  static x_Getter(mthis) native "SVGRectElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGRectElement_y_Getter";
+  static y_Getter(mthis) native "SVGRectElement_y_Getter";
 }
 
 class BlinkSVGRenderingIntent {}
 
 class BlinkSVGZoomAndPan {
-  static $zoomAndPan_Getter(mthis) native "SVGZoomAndPan_zoomAndPan_Getter";
+  static zoomAndPan_Getter(mthis) native "SVGZoomAndPan_zoomAndPan_Getter";
 
-  static $zoomAndPan_Setter(mthis, value) native "SVGZoomAndPan_zoomAndPan_Setter";
+  static zoomAndPan_Setter_us(mthis, value) native "SVGZoomAndPan_zoomAndPan_Setter";
 }
 
 class BlinkSVGSVGElement {
-  static $currentScale_Getter(mthis) native "SVGSVGElement_currentScale_Getter";
+  static currentScale_Getter(mthis) native "SVGSVGElement_currentScale_Getter";
 
-  static $currentScale_Setter(mthis, value) native "SVGSVGElement_currentScale_Setter";
+  static currentScale_Setter_float(mthis, value) native "SVGSVGElement_currentScale_Setter";
 
-  static $currentTranslate_Getter(mthis) native "SVGSVGElement_currentTranslate_Getter";
+  static currentTranslate_Getter(mthis) native "SVGSVGElement_currentTranslate_Getter";
 
-  static $currentView_Getter(mthis) native "SVGSVGElement_currentView_Getter";
+  static currentView_Getter(mthis) native "SVGSVGElement_currentView_Getter";
 
-  static $height_Getter(mthis) native "SVGSVGElement_height_Getter";
+  static height_Getter(mthis) native "SVGSVGElement_height_Getter";
 
-  static $pixelUnitToMillimeterX_Getter(mthis) native "SVGSVGElement_pixelUnitToMillimeterX_Getter";
+  static pixelUnitToMillimeterX_Getter(mthis) native "SVGSVGElement_pixelUnitToMillimeterX_Getter";
 
-  static $pixelUnitToMillimeterY_Getter(mthis) native "SVGSVGElement_pixelUnitToMillimeterY_Getter";
+  static pixelUnitToMillimeterY_Getter(mthis) native "SVGSVGElement_pixelUnitToMillimeterY_Getter";
 
-  static $screenPixelToMillimeterX_Getter(mthis) native "SVGSVGElement_screenPixelToMillimeterX_Getter";
+  static screenPixelToMillimeterX_Getter(mthis) native "SVGSVGElement_screenPixelToMillimeterX_Getter";
 
-  static $screenPixelToMillimeterY_Getter(mthis) native "SVGSVGElement_screenPixelToMillimeterY_Getter";
+  static screenPixelToMillimeterY_Getter(mthis) native "SVGSVGElement_screenPixelToMillimeterY_Getter";
 
-  static $useCurrentView_Getter(mthis) native "SVGSVGElement_useCurrentView_Getter";
+  static useCurrentView_Getter(mthis) native "SVGSVGElement_useCurrentView_Getter";
 
-  static $viewport_Getter(mthis) native "SVGSVGElement_viewport_Getter";
+  static viewport_Getter(mthis) native "SVGSVGElement_viewport_Getter";
 
-  static $width_Getter(mthis) native "SVGSVGElement_width_Getter";
+  static width_Getter(mthis) native "SVGSVGElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGSVGElement_x_Getter";
+  static x_Getter(mthis) native "SVGSVGElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGSVGElement_y_Getter";
+  static y_Getter(mthis) native "SVGSVGElement_y_Getter";
 
-  static $animationsPaused_Callback(mthis) native "SVGSVGElement_animationsPaused_Callback_RESOLVER_STRING_0_";
+  static animationsPaused_Callback(mthis) native "SVGSVGElement_animationsPaused_Callback";
 
-  static $checkEnclosure_Callback(mthis, element, rect) native "SVGSVGElement_checkEnclosure_Callback_RESOLVER_STRING_2_SVGElement_SVGRect";
+  static checkEnclosure_Callback_SVGElement_SVGRect(mthis, element, rect) native "SVGSVGElement_checkEnclosure_Callback_SVGElement_SVGRect";
 
-  static $checkIntersection_Callback(mthis, element, rect) native "SVGSVGElement_checkIntersection_Callback_RESOLVER_STRING_2_SVGElement_SVGRect";
+  static checkIntersection_Callback_SVGElement_SVGRect(mthis, element, rect) native "SVGSVGElement_checkIntersection_Callback_SVGElement_SVGRect";
 
-  static $createSVGAngle_Callback(mthis) native "SVGSVGElement_createSVGAngle_Callback_RESOLVER_STRING_0_";
+  static createSVGAngle_Callback(mthis) native "SVGSVGElement_createSVGAngle_Callback";
 
-  static $createSVGLength_Callback(mthis) native "SVGSVGElement_createSVGLength_Callback_RESOLVER_STRING_0_";
+  static createSVGLength_Callback(mthis) native "SVGSVGElement_createSVGLength_Callback";
 
-  static $createSVGMatrix_Callback(mthis) native "SVGSVGElement_createSVGMatrix_Callback_RESOLVER_STRING_0_";
+  static createSVGMatrix_Callback(mthis) native "SVGSVGElement_createSVGMatrix_Callback";
 
-  static $createSVGNumber_Callback(mthis) native "SVGSVGElement_createSVGNumber_Callback_RESOLVER_STRING_0_";
+  static createSVGNumber_Callback(mthis) native "SVGSVGElement_createSVGNumber_Callback";
 
-  static $createSVGPoint_Callback(mthis) native "SVGSVGElement_createSVGPoint_Callback_RESOLVER_STRING_0_";
+  static createSVGPoint_Callback(mthis) native "SVGSVGElement_createSVGPoint_Callback";
 
-  static $createSVGRect_Callback(mthis) native "SVGSVGElement_createSVGRect_Callback_RESOLVER_STRING_0_";
+  static createSVGRect_Callback(mthis) native "SVGSVGElement_createSVGRect_Callback";
 
-  static $createSVGTransform_Callback(mthis) native "SVGSVGElement_createSVGTransform_Callback_RESOLVER_STRING_0_";
+  static createSVGTransform_Callback(mthis) native "SVGSVGElement_createSVGTransform_Callback";
 
-  static $createSVGTransformFromMatrix_Callback(mthis, matrix) native "SVGSVGElement_createSVGTransformFromMatrix_Callback_RESOLVER_STRING_1_SVGMatrix";
+  static createSVGTransformFromMatrix_Callback_SVGMatrix(mthis, matrix) native "SVGSVGElement_createSVGTransformFromMatrix_Callback_SVGMatrix";
 
-  static $deselectAll_Callback(mthis) native "SVGSVGElement_deselectAll_Callback_RESOLVER_STRING_0_";
+  static deselectAll_Callback(mthis) native "SVGSVGElement_deselectAll_Callback";
 
-  static $forceRedraw_Callback(mthis) native "SVGSVGElement_forceRedraw_Callback_RESOLVER_STRING_0_";
+  static forceRedraw_Callback(mthis) native "SVGSVGElement_forceRedraw_Callback";
 
-  static $getCurrentTime_Callback(mthis) native "SVGSVGElement_getCurrentTime_Callback_RESOLVER_STRING_0_";
+  static getCurrentTime_Callback(mthis) native "SVGSVGElement_getCurrentTime_Callback";
 
-  static $getElementById_Callback(mthis, elementId) native "SVGSVGElement_getElementById_Callback_RESOLVER_STRING_1_DOMString";
+  static getElementById_Callback_DOMString(mthis, elementId) native "SVGSVGElement_getElementById_Callback_DOMString";
 
-  static $getEnclosureList_Callback(mthis, rect, referenceElement) native "SVGSVGElement_getEnclosureList_Callback_RESOLVER_STRING_2_SVGRect_SVGElement";
+  static getEnclosureList_Callback_SVGRect_SVGElement(mthis, rect, referenceElement) native "SVGSVGElement_getEnclosureList_Callback_SVGRect_SVGElement";
 
-  static $getIntersectionList_Callback(mthis, rect, referenceElement) native "SVGSVGElement_getIntersectionList_Callback_RESOLVER_STRING_2_SVGRect_SVGElement";
+  static getIntersectionList_Callback_SVGRect_SVGElement(mthis, rect, referenceElement) native "SVGSVGElement_getIntersectionList_Callback_SVGRect_SVGElement";
 
-  static $pauseAnimations_Callback(mthis) native "SVGSVGElement_pauseAnimations_Callback_RESOLVER_STRING_0_";
+  static pauseAnimations_Callback(mthis) native "SVGSVGElement_pauseAnimations_Callback";
 
-  static $setCurrentTime_Callback(mthis, seconds) native "SVGSVGElement_setCurrentTime_Callback_RESOLVER_STRING_1_float";
+  static setCurrentTime_Callback_float(mthis, seconds) native "SVGSVGElement_setCurrentTime_Callback_float";
 
-  static $suspendRedraw_Callback(mthis, maxWaitMilliseconds) native "SVGSVGElement_suspendRedraw_Callback_RESOLVER_STRING_1_unsigned long";
+  static suspendRedraw_Callback_ul(mthis, maxWaitMilliseconds) native "SVGSVGElement_suspendRedraw_Callback_unsigned long";
 
-  static $unpauseAnimations_Callback(mthis) native "SVGSVGElement_unpauseAnimations_Callback_RESOLVER_STRING_0_";
+  static unpauseAnimations_Callback(mthis) native "SVGSVGElement_unpauseAnimations_Callback";
 
-  static $unsuspendRedraw_Callback(mthis, suspendHandleId) native "SVGSVGElement_unsuspendRedraw_Callback_RESOLVER_STRING_1_unsigned long";
+  static unsuspendRedraw_Callback_ul(mthis, suspendHandleId) native "SVGSVGElement_unsuspendRedraw_Callback_unsigned long";
 
-  static $unsuspendRedrawAll_Callback(mthis) native "SVGSVGElement_unsuspendRedrawAll_Callback_RESOLVER_STRING_0_";
+  static unsuspendRedrawAll_Callback(mthis) native "SVGSVGElement_unsuspendRedrawAll_Callback";
 
-  static $preserveAspectRatio_Getter(mthis) native "SVGSVGElement_preserveAspectRatio_Getter";
+  static preserveAspectRatio_Getter(mthis) native "SVGSVGElement_preserveAspectRatio_Getter";
 
-  static $viewBox_Getter(mthis) native "SVGSVGElement_viewBox_Getter";
+  static viewBox_Getter(mthis) native "SVGSVGElement_viewBox_Getter";
 
-  static $zoomAndPan_Getter(mthis) native "SVGSVGElement_zoomAndPan_Getter";
+  static zoomAndPan_Getter(mthis) native "SVGSVGElement_zoomAndPan_Getter";
 
-  static $zoomAndPan_Setter(mthis, value) native "SVGSVGElement_zoomAndPan_Setter";
+  static zoomAndPan_Setter_us(mthis, value) native "SVGSVGElement_zoomAndPan_Setter";
 }
 
 class BlinkSVGScriptElement {
-  static $type_Getter(mthis) native "SVGScriptElement_type_Getter";
+  static type_Getter(mthis) native "SVGScriptElement_type_Getter";
 
-  static $type_Setter(mthis, value) native "SVGScriptElement_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "SVGScriptElement_type_Setter";
 
-  static $href_Getter(mthis) native "SVGScriptElement_href_Getter";
+  static href_Getter(mthis) native "SVGScriptElement_href_Getter";
 }
 
 class BlinkSVGSetElement {}
 
 class BlinkSVGStopElement {
-  static $offset_Getter(mthis) native "SVGStopElement_offset_Getter";
+  static offset_Getter(mthis) native "SVGStopElement_offset_Getter";
 }
 
 class BlinkSVGStringList {
-  static $numberOfItems_Getter(mthis) native "SVGStringList_numberOfItems_Getter";
+  static numberOfItems_Getter(mthis) native "SVGStringList_numberOfItems_Getter";
 
-  static $appendItem_Callback(mthis, item) native "SVGStringList_appendItem_Callback_RESOLVER_STRING_1_DOMString";
+  static appendItem_Callback_DOMString(mthis, item) native "SVGStringList_appendItem_Callback_DOMString";
 
-  static $clear_Callback(mthis) native "SVGStringList_clear_Callback_RESOLVER_STRING_0_";
+  static clear_Callback(mthis) native "SVGStringList_clear_Callback";
 
-  static $getItem_Callback(mthis, index) native "SVGStringList_getItem_Callback_RESOLVER_STRING_1_unsigned long";
+  static getItem_Callback_ul(mthis, index) native "SVGStringList_getItem_Callback_unsigned long";
 
-  static $initialize_Callback(mthis, item) native "SVGStringList_initialize_Callback_RESOLVER_STRING_1_DOMString";
+  static initialize_Callback_DOMString(mthis, item) native "SVGStringList_initialize_Callback_DOMString";
 
-  static $insertItemBefore_Callback(mthis, item, index) native "SVGStringList_insertItemBefore_Callback_RESOLVER_STRING_2_DOMString_unsigned long";
+  static insertItemBefore_Callback_DOMString_ul(mthis, item, index) native "SVGStringList_insertItemBefore_Callback_DOMString_unsigned long";
 
-  static $removeItem_Callback(mthis, index) native "SVGStringList_removeItem_Callback_RESOLVER_STRING_1_unsigned long";
+  static removeItem_Callback_ul(mthis, index) native "SVGStringList_removeItem_Callback_unsigned long";
 
-  static $replaceItem_Callback(mthis, item, index) native "SVGStringList_replaceItem_Callback_RESOLVER_STRING_2_DOMString_unsigned long";
+  static replaceItem_Callback_DOMString_ul(mthis, item, index) native "SVGStringList_replaceItem_Callback_DOMString_unsigned long";
 }
 
 class BlinkSVGStyleElement {
-  static $disabled_Getter(mthis) native "SVGStyleElement_disabled_Getter";
+  static disabled_Getter(mthis) native "SVGStyleElement_disabled_Getter";
 
-  static $disabled_Setter(mthis, value) native "SVGStyleElement_disabled_Setter";
+  static disabled_Setter_boolean(mthis, value) native "SVGStyleElement_disabled_Setter";
 
-  static $media_Getter(mthis) native "SVGStyleElement_media_Getter";
+  static media_Getter(mthis) native "SVGStyleElement_media_Getter";
 
-  static $media_Setter(mthis, value) native "SVGStyleElement_media_Setter";
+  static media_Setter_DOMString(mthis, value) native "SVGStyleElement_media_Setter";
 
-  static $title_Getter(mthis) native "SVGStyleElement_title_Getter";
+  static title_Getter(mthis) native "SVGStyleElement_title_Getter";
 
-  static $title_Setter(mthis, value) native "SVGStyleElement_title_Setter";
+  static title_Setter_DOMString(mthis, value) native "SVGStyleElement_title_Setter";
 
-  static $type_Getter(mthis) native "SVGStyleElement_type_Getter";
+  static type_Getter(mthis) native "SVGStyleElement_type_Getter";
 
-  static $type_Setter(mthis, value) native "SVGStyleElement_type_Setter";
+  static type_Setter_DOMString(mthis, value) native "SVGStyleElement_type_Setter";
 }
 
 class BlinkSVGSwitchElement {}
 
 class BlinkSVGSymbolElement {
-  static $preserveAspectRatio_Getter(mthis) native "SVGSymbolElement_preserveAspectRatio_Getter";
+  static preserveAspectRatio_Getter(mthis) native "SVGSymbolElement_preserveAspectRatio_Getter";
 
-  static $viewBox_Getter(mthis) native "SVGSymbolElement_viewBox_Getter";
+  static viewBox_Getter(mthis) native "SVGSymbolElement_viewBox_Getter";
 }
 
 class BlinkSVGTSpanElement {}
@@ -6485,237 +6441,237 @@
 class BlinkSVGTextElement {}
 
 class BlinkSVGTextPathElement {
-  static $method_Getter(mthis) native "SVGTextPathElement_method_Getter";
+  static method_Getter(mthis) native "SVGTextPathElement_method_Getter";
 
-  static $spacing_Getter(mthis) native "SVGTextPathElement_spacing_Getter";
+  static spacing_Getter(mthis) native "SVGTextPathElement_spacing_Getter";
 
-  static $startOffset_Getter(mthis) native "SVGTextPathElement_startOffset_Getter";
+  static startOffset_Getter(mthis) native "SVGTextPathElement_startOffset_Getter";
 
-  static $href_Getter(mthis) native "SVGTextPathElement_href_Getter";
+  static href_Getter(mthis) native "SVGTextPathElement_href_Getter";
 }
 
 class BlinkSVGTitleElement {}
 
 class BlinkSVGTransform {
-  static $angle_Getter(mthis) native "SVGTransform_angle_Getter";
+  static angle_Getter(mthis) native "SVGTransform_angle_Getter";
 
-  static $matrix_Getter(mthis) native "SVGTransform_matrix_Getter";
+  static matrix_Getter(mthis) native "SVGTransform_matrix_Getter";
 
-  static $type_Getter(mthis) native "SVGTransform_type_Getter";
+  static type_Getter(mthis) native "SVGTransform_type_Getter";
 
-  static $setMatrix_Callback(mthis, matrix) native "SVGTransform_setMatrix_Callback_RESOLVER_STRING_1_SVGMatrix";
+  static setMatrix_Callback_SVGMatrix(mthis, matrix) native "SVGTransform_setMatrix_Callback_SVGMatrix";
 
-  static $setRotate_Callback(mthis, angle, cx, cy) native "SVGTransform_setRotate_Callback_RESOLVER_STRING_3_float_float_float";
+  static setRotate_Callback_float_float_float(mthis, angle, cx, cy) native "SVGTransform_setRotate_Callback_float_float_float";
 
-  static $setScale_Callback(mthis, sx, sy) native "SVGTransform_setScale_Callback_RESOLVER_STRING_2_float_float";
+  static setScale_Callback_float_float(mthis, sx, sy) native "SVGTransform_setScale_Callback_float_float";
 
-  static $setSkewX_Callback(mthis, angle) native "SVGTransform_setSkewX_Callback_RESOLVER_STRING_1_float";
+  static setSkewX_Callback_float(mthis, angle) native "SVGTransform_setSkewX_Callback_float";
 
-  static $setSkewY_Callback(mthis, angle) native "SVGTransform_setSkewY_Callback_RESOLVER_STRING_1_float";
+  static setSkewY_Callback_float(mthis, angle) native "SVGTransform_setSkewY_Callback_float";
 
-  static $setTranslate_Callback(mthis, tx, ty) native "SVGTransform_setTranslate_Callback_RESOLVER_STRING_2_float_float";
+  static setTranslate_Callback_float_float(mthis, tx, ty) native "SVGTransform_setTranslate_Callback_float_float";
 }
 
 class BlinkSVGTransformList {
-  static $numberOfItems_Getter(mthis) native "SVGTransformList_numberOfItems_Getter";
+  static numberOfItems_Getter(mthis) native "SVGTransformList_numberOfItems_Getter";
 
-  static $appendItem_Callback(mthis, item) native "SVGTransformList_appendItem_Callback_RESOLVER_STRING_1_SVGTransform";
+  static appendItem_Callback_SVGTransform(mthis, item) native "SVGTransformList_appendItem_Callback_SVGTransform";
 
-  static $clear_Callback(mthis) native "SVGTransformList_clear_Callback_RESOLVER_STRING_0_";
+  static clear_Callback(mthis) native "SVGTransformList_clear_Callback";
 
-  static $consolidate_Callback(mthis) native "SVGTransformList_consolidate_Callback_RESOLVER_STRING_0_";
+  static consolidate_Callback(mthis) native "SVGTransformList_consolidate_Callback";
 
-  static $createSVGTransformFromMatrix_Callback(mthis, matrix) native "SVGTransformList_createSVGTransformFromMatrix_Callback_RESOLVER_STRING_1_SVGMatrix";
+  static createSVGTransformFromMatrix_Callback_SVGMatrix(mthis, matrix) native "SVGTransformList_createSVGTransformFromMatrix_Callback_SVGMatrix";
 
-  static $getItem_Callback(mthis, index) native "SVGTransformList_getItem_Callback_RESOLVER_STRING_1_unsigned long";
+  static getItem_Callback_ul(mthis, index) native "SVGTransformList_getItem_Callback_unsigned long";
 
-  static $initialize_Callback(mthis, item) native "SVGTransformList_initialize_Callback_RESOLVER_STRING_1_SVGTransform";
+  static initialize_Callback_SVGTransform(mthis, item) native "SVGTransformList_initialize_Callback_SVGTransform";
 
-  static $insertItemBefore_Callback(mthis, item, index) native "SVGTransformList_insertItemBefore_Callback_RESOLVER_STRING_2_SVGTransform_unsigned long";
+  static insertItemBefore_Callback_SVGTransform_ul(mthis, item, index) native "SVGTransformList_insertItemBefore_Callback_SVGTransform_unsigned long";
 
-  static $removeItem_Callback(mthis, index) native "SVGTransformList_removeItem_Callback_RESOLVER_STRING_1_unsigned long";
+  static removeItem_Callback_ul(mthis, index) native "SVGTransformList_removeItem_Callback_unsigned long";
 
-  static $replaceItem_Callback(mthis, item, index) native "SVGTransformList_replaceItem_Callback_RESOLVER_STRING_2_SVGTransform_unsigned long";
+  static replaceItem_Callback_SVGTransform_ul(mthis, item, index) native "SVGTransformList_replaceItem_Callback_SVGTransform_unsigned long";
 }
 
 class BlinkSVGUnitTypes {}
 
 class BlinkSVGUseElement {
-  static $animatedInstanceRoot_Getter(mthis) native "SVGUseElement_animatedInstanceRoot_Getter";
+  static animatedInstanceRoot_Getter(mthis) native "SVGUseElement_animatedInstanceRoot_Getter";
 
-  static $height_Getter(mthis) native "SVGUseElement_height_Getter";
+  static height_Getter(mthis) native "SVGUseElement_height_Getter";
 
-  static $instanceRoot_Getter(mthis) native "SVGUseElement_instanceRoot_Getter";
+  static instanceRoot_Getter(mthis) native "SVGUseElement_instanceRoot_Getter";
 
-  static $width_Getter(mthis) native "SVGUseElement_width_Getter";
+  static width_Getter(mthis) native "SVGUseElement_width_Getter";
 
-  static $x_Getter(mthis) native "SVGUseElement_x_Getter";
+  static x_Getter(mthis) native "SVGUseElement_x_Getter";
 
-  static $y_Getter(mthis) native "SVGUseElement_y_Getter";
+  static y_Getter(mthis) native "SVGUseElement_y_Getter";
 
-  static $requiredExtensions_Getter(mthis) native "SVGGraphicsElement_requiredExtensions_Getter";
+  static requiredExtensions_Getter(mthis) native "SVGGraphicsElement_requiredExtensions_Getter";
 
-  static $requiredFeatures_Getter(mthis) native "SVGGraphicsElement_requiredFeatures_Getter";
+  static requiredFeatures_Getter(mthis) native "SVGGraphicsElement_requiredFeatures_Getter";
 
-  static $systemLanguage_Getter(mthis) native "SVGGraphicsElement_systemLanguage_Getter";
+  static systemLanguage_Getter(mthis) native "SVGGraphicsElement_systemLanguage_Getter";
 
-  static $hasExtension_Callback(mthis, extension) native "SVGGraphicsElement_hasExtension_Callback_RESOLVER_STRING_1_DOMString";
+  static hasExtension_Callback_DOMString(mthis, extension) native "SVGGraphicsElement_hasExtension_Callback_DOMString";
 
-  static $href_Getter(mthis) native "SVGUseElement_href_Getter";
+  static href_Getter(mthis) native "SVGUseElement_href_Getter";
 }
 
 class BlinkSVGVKernElement {}
 
 class BlinkSVGViewElement {
-  static $viewTarget_Getter(mthis) native "SVGViewElement_viewTarget_Getter";
+  static viewTarget_Getter(mthis) native "SVGViewElement_viewTarget_Getter";
 
-  static $preserveAspectRatio_Getter(mthis) native "SVGViewElement_preserveAspectRatio_Getter";
+  static preserveAspectRatio_Getter(mthis) native "SVGViewElement_preserveAspectRatio_Getter";
 
-  static $viewBox_Getter(mthis) native "SVGViewElement_viewBox_Getter";
+  static viewBox_Getter(mthis) native "SVGViewElement_viewBox_Getter";
 
-  static $zoomAndPan_Getter(mthis) native "SVGViewElement_zoomAndPan_Getter";
+  static zoomAndPan_Getter(mthis) native "SVGViewElement_zoomAndPan_Getter";
 
-  static $zoomAndPan_Setter(mthis, value) native "SVGViewElement_zoomAndPan_Setter";
+  static zoomAndPan_Setter_us(mthis, value) native "SVGViewElement_zoomAndPan_Setter";
 }
 
 class BlinkSVGViewSpec {
-  static $preserveAspectRatioString_Getter(mthis) native "SVGViewSpec_preserveAspectRatioString_Getter";
+  static preserveAspectRatioString_Getter(mthis) native "SVGViewSpec_preserveAspectRatioString_Getter";
 
-  static $transform_Getter(mthis) native "SVGViewSpec_transform_Getter";
+  static transform_Getter(mthis) native "SVGViewSpec_transform_Getter";
 
-  static $transformString_Getter(mthis) native "SVGViewSpec_transformString_Getter";
+  static transformString_Getter(mthis) native "SVGViewSpec_transformString_Getter";
 
-  static $viewBoxString_Getter(mthis) native "SVGViewSpec_viewBoxString_Getter";
+  static viewBoxString_Getter(mthis) native "SVGViewSpec_viewBoxString_Getter";
 
-  static $viewTarget_Getter(mthis) native "SVGViewSpec_viewTarget_Getter";
+  static viewTarget_Getter(mthis) native "SVGViewSpec_viewTarget_Getter";
 
-  static $viewTargetString_Getter(mthis) native "SVGViewSpec_viewTargetString_Getter";
+  static viewTargetString_Getter(mthis) native "SVGViewSpec_viewTargetString_Getter";
 
-  static $preserveAspectRatio_Getter(mthis) native "SVGViewSpec_preserveAspectRatio_Getter";
+  static preserveAspectRatio_Getter(mthis) native "SVGViewSpec_preserveAspectRatio_Getter";
 
-  static $viewBox_Getter(mthis) native "SVGViewSpec_viewBox_Getter";
+  static viewBox_Getter(mthis) native "SVGViewSpec_viewBox_Getter";
 
-  static $zoomAndPan_Getter(mthis) native "SVGViewSpec_zoomAndPan_Getter";
+  static zoomAndPan_Getter(mthis) native "SVGViewSpec_zoomAndPan_Getter";
 
-  static $zoomAndPan_Setter(mthis, value) native "SVGViewSpec_zoomAndPan_Setter";
+  static zoomAndPan_Setter_us(mthis, value) native "SVGViewSpec_zoomAndPan_Setter";
 }
 
 class BlinkSVGZoomEvent {
-  static $newScale_Getter(mthis) native "SVGZoomEvent_newScale_Getter";
+  static newScale_Getter(mthis) native "SVGZoomEvent_newScale_Getter";
 
-  static $newTranslate_Getter(mthis) native "SVGZoomEvent_newTranslate_Getter";
+  static newTranslate_Getter(mthis) native "SVGZoomEvent_newTranslate_Getter";
 
-  static $previousScale_Getter(mthis) native "SVGZoomEvent_previousScale_Getter";
+  static previousScale_Getter(mthis) native "SVGZoomEvent_previousScale_Getter";
 
-  static $previousTranslate_Getter(mthis) native "SVGZoomEvent_previousTranslate_Getter";
+  static previousTranslate_Getter(mthis) native "SVGZoomEvent_previousTranslate_Getter";
 
-  static $zoomRectScreen_Getter(mthis) native "SVGZoomEvent_zoomRectScreen_Getter";
+  static zoomRectScreen_Getter(mthis) native "SVGZoomEvent_zoomRectScreen_Getter";
 }
 
 class BlinkScreen {
-  static $availHeight_Getter(mthis) native "Screen_availHeight_Getter";
+  static availHeight_Getter(mthis) native "Screen_availHeight_Getter";
 
-  static $availLeft_Getter(mthis) native "Screen_availLeft_Getter";
+  static availLeft_Getter(mthis) native "Screen_availLeft_Getter";
 
-  static $availTop_Getter(mthis) native "Screen_availTop_Getter";
+  static availTop_Getter(mthis) native "Screen_availTop_Getter";
 
-  static $availWidth_Getter(mthis) native "Screen_availWidth_Getter";
+  static availWidth_Getter(mthis) native "Screen_availWidth_Getter";
 
-  static $colorDepth_Getter(mthis) native "Screen_colorDepth_Getter";
+  static colorDepth_Getter(mthis) native "Screen_colorDepth_Getter";
 
-  static $height_Getter(mthis) native "Screen_height_Getter";
+  static height_Getter(mthis) native "Screen_height_Getter";
 
-  static $orientation_Getter(mthis) native "Screen_orientation_Getter";
+  static orientation_Getter(mthis) native "Screen_orientation_Getter";
 
-  static $pixelDepth_Getter(mthis) native "Screen_pixelDepth_Getter";
+  static pixelDepth_Getter(mthis) native "Screen_pixelDepth_Getter";
 
-  static $width_Getter(mthis) native "Screen_width_Getter";
+  static width_Getter(mthis) native "Screen_width_Getter";
 
-  static $lockOrientation_Callback(mthis, orientation) native "Screen_lockOrientation_Callback_RESOLVER_STRING_1_DOMString";
+  static lockOrientation_Callback_DOMString(mthis, orientation) native "Screen_lockOrientation_Callback_DOMString";
 
-  static $unlockOrientation_Callback(mthis) native "Screen_unlockOrientation_Callback_RESOLVER_STRING_0_";
+  static unlockOrientation_Callback(mthis) native "Screen_unlockOrientation_Callback";
 }
 
 class BlinkScriptProcessorNode {
-  static $bufferSize_Getter(mthis) native "ScriptProcessorNode_bufferSize_Getter";
+  static bufferSize_Getter(mthis) native "ScriptProcessorNode_bufferSize_Getter";
 
-  static $_setEventListener_Callback(mthis, eventListener) native "ScriptProcessorNode_setEventListener_Callback";
+  static $_setEventListener_Callback_EventListener(mthis, eventListener) native "ScriptProcessorNode_setEventListener_Callback";
 }
 
 class BlinkSecurityPolicyViolationEvent {
-  static $blockedURI_Getter(mthis) native "SecurityPolicyViolationEvent_blockedURI_Getter";
+  static blockedURI_Getter(mthis) native "SecurityPolicyViolationEvent_blockedURI_Getter";
 
-  static $columnNumber_Getter(mthis) native "SecurityPolicyViolationEvent_columnNumber_Getter";
+  static columnNumber_Getter(mthis) native "SecurityPolicyViolationEvent_columnNumber_Getter";
 
-  static $documentURI_Getter(mthis) native "SecurityPolicyViolationEvent_documentURI_Getter";
+  static documentURI_Getter(mthis) native "SecurityPolicyViolationEvent_documentURI_Getter";
 
-  static $effectiveDirective_Getter(mthis) native "SecurityPolicyViolationEvent_effectiveDirective_Getter";
+  static effectiveDirective_Getter(mthis) native "SecurityPolicyViolationEvent_effectiveDirective_Getter";
 
-  static $lineNumber_Getter(mthis) native "SecurityPolicyViolationEvent_lineNumber_Getter";
+  static lineNumber_Getter(mthis) native "SecurityPolicyViolationEvent_lineNumber_Getter";
 
-  static $originalPolicy_Getter(mthis) native "SecurityPolicyViolationEvent_originalPolicy_Getter";
+  static originalPolicy_Getter(mthis) native "SecurityPolicyViolationEvent_originalPolicy_Getter";
 
-  static $referrer_Getter(mthis) native "SecurityPolicyViolationEvent_referrer_Getter";
+  static referrer_Getter(mthis) native "SecurityPolicyViolationEvent_referrer_Getter";
 
-  static $sourceFile_Getter(mthis) native "SecurityPolicyViolationEvent_sourceFile_Getter";
+  static sourceFile_Getter(mthis) native "SecurityPolicyViolationEvent_sourceFile_Getter";
 
-  static $statusCode_Getter(mthis) native "SecurityPolicyViolationEvent_statusCode_Getter";
+  static statusCode_Getter(mthis) native "SecurityPolicyViolationEvent_statusCode_Getter";
 
-  static $violatedDirective_Getter(mthis) native "SecurityPolicyViolationEvent_violatedDirective_Getter";
+  static violatedDirective_Getter(mthis) native "SecurityPolicyViolationEvent_violatedDirective_Getter";
 }
 
 class BlinkSelection {
-  static $anchorNode_Getter(mthis) native "Selection_anchorNode_Getter";
+  static anchorNode_Getter(mthis) native "Selection_anchorNode_Getter";
 
-  static $anchorOffset_Getter(mthis) native "Selection_anchorOffset_Getter";
+  static anchorOffset_Getter(mthis) native "Selection_anchorOffset_Getter";
 
-  static $baseNode_Getter(mthis) native "Selection_baseNode_Getter";
+  static baseNode_Getter(mthis) native "Selection_baseNode_Getter";
 
-  static $baseOffset_Getter(mthis) native "Selection_baseOffset_Getter";
+  static baseOffset_Getter(mthis) native "Selection_baseOffset_Getter";
 
-  static $extentNode_Getter(mthis) native "Selection_extentNode_Getter";
+  static extentNode_Getter(mthis) native "Selection_extentNode_Getter";
 
-  static $extentOffset_Getter(mthis) native "Selection_extentOffset_Getter";
+  static extentOffset_Getter(mthis) native "Selection_extentOffset_Getter";
 
-  static $focusNode_Getter(mthis) native "Selection_focusNode_Getter";
+  static focusNode_Getter(mthis) native "Selection_focusNode_Getter";
 
-  static $focusOffset_Getter(mthis) native "Selection_focusOffset_Getter";
+  static focusOffset_Getter(mthis) native "Selection_focusOffset_Getter";
 
-  static $isCollapsed_Getter(mthis) native "Selection_isCollapsed_Getter";
+  static isCollapsed_Getter(mthis) native "Selection_isCollapsed_Getter";
 
-  static $rangeCount_Getter(mthis) native "Selection_rangeCount_Getter";
+  static rangeCount_Getter(mthis) native "Selection_rangeCount_Getter";
 
-  static $type_Getter(mthis) native "Selection_type_Getter";
+  static type_Getter(mthis) native "Selection_type_Getter";
 
-  static $addRange_Callback(mthis, range) native "Selection_addRange_Callback_RESOLVER_STRING_1_Range";
+  static addRange_Callback_Range(mthis, range) native "Selection_addRange_Callback_Range";
 
-  static $collapse_Callback(mthis, node, index) native "Selection_collapse_Callback_RESOLVER_STRING_2_Node_long";
+  static collapse_Callback_Node_long(mthis, node, index) native "Selection_collapse_Callback_Node_long";
 
-  static $collapseToEnd_Callback(mthis) native "Selection_collapseToEnd_Callback_RESOLVER_STRING_0_";
+  static collapseToEnd_Callback(mthis) native "Selection_collapseToEnd_Callback";
 
-  static $collapseToStart_Callback(mthis) native "Selection_collapseToStart_Callback_RESOLVER_STRING_0_";
+  static collapseToStart_Callback(mthis) native "Selection_collapseToStart_Callback";
 
-  static $containsNode_Callback(mthis, node, allowPartial) native "Selection_containsNode_Callback_RESOLVER_STRING_2_Node_boolean";
+  static containsNode_Callback_Node_boolean(mthis, node, allowPartial) native "Selection_containsNode_Callback_Node_boolean";
 
-  static $deleteFromDocument_Callback(mthis) native "Selection_deleteFromDocument_Callback_RESOLVER_STRING_0_";
+  static deleteFromDocument_Callback(mthis) native "Selection_deleteFromDocument_Callback";
 
-  static $empty_Callback(mthis) native "Selection_empty_Callback_RESOLVER_STRING_0_";
+  static empty_Callback(mthis) native "Selection_empty_Callback";
 
-  static $extend_Callback(mthis, node, offset) native "Selection_extend_Callback_RESOLVER_STRING_2_Node_long";
+  static extend_Callback_Node_long(mthis, node, offset) native "Selection_extend_Callback_Node_long";
 
-  static $getRangeAt_Callback(mthis, index) native "Selection_getRangeAt_Callback_RESOLVER_STRING_1_long";
+  static getRangeAt_Callback_long(mthis, index) native "Selection_getRangeAt_Callback_long";
 
-  static $modify_Callback(mthis, alter, direction, granularity) native "Selection_modify_Callback_RESOLVER_STRING_3_DOMString_DOMString_DOMString";
+  static modify_Callback_DOMString_DOMString_DOMString(mthis, alter, direction, granularity) native "Selection_modify_Callback_DOMString_DOMString_DOMString";
 
-  static $removeAllRanges_Callback(mthis) native "Selection_removeAllRanges_Callback_RESOLVER_STRING_0_";
+  static removeAllRanges_Callback(mthis) native "Selection_removeAllRanges_Callback";
 
-  static $selectAllChildren_Callback(mthis, node) native "Selection_selectAllChildren_Callback_RESOLVER_STRING_1_Node";
+  static selectAllChildren_Callback_Node(mthis, node) native "Selection_selectAllChildren_Callback_Node";
 
-  static $setBaseAndExtent_Callback(mthis, baseNode, baseOffset, extentNode, extentOffset) native "Selection_setBaseAndExtent_Callback_RESOLVER_STRING_4_Node_long_Node_long";
+  static setBaseAndExtent_Callback_Node_long_Node_long(mthis, baseNode, baseOffset, extentNode, extentOffset) native "Selection_setBaseAndExtent_Callback_Node_long_Node_long";
 
-  static $setPosition_Callback(mthis, node, offset) native "Selection_setPosition_Callback_RESOLVER_STRING_2_Node_long";
+  static setPosition_Callback_Node_long(mthis, node, offset) native "Selection_setPosition_Callback_Node_long";
 
-  static $toString_Callback(mthis) native "Selection_toString_Callback_RESOLVER_STRING_0_";
+  static toString_Callback(mthis) native "Selection_toString_Callback";
 }
 
 class BlinkServiceWorker {}
@@ -6725,127 +6681,123 @@
 class BlinkServiceWorkerGlobalScope {}
 
 class BlinkShadowRoot {
-  static $activeElement_Getter(mthis) native "ShadowRoot_activeElement_Getter";
+  static activeElement_Getter(mthis) native "ShadowRoot_activeElement_Getter";
 
-  static $host_Getter(mthis) native "ShadowRoot_host_Getter";
+  static host_Getter(mthis) native "ShadowRoot_host_Getter";
 
-  static $innerHTML_Getter(mthis) native "ShadowRoot_innerHTML_Getter";
+  static innerHTML_Getter(mthis) native "ShadowRoot_innerHTML_Getter";
 
-  static $innerHTML_Setter(mthis, value) native "ShadowRoot_innerHTML_Setter";
+  static innerHTML_Setter_DOMString(mthis, value) native "ShadowRoot_innerHTML_Setter";
 
-  static $olderShadowRoot_Getter(mthis) native "ShadowRoot_olderShadowRoot_Getter";
+  static olderShadowRoot_Getter(mthis) native "ShadowRoot_olderShadowRoot_Getter";
 
-  static $resetStyleInheritance_Getter(mthis) native "ShadowRoot_resetStyleInheritance_Getter";
+  static resetStyleInheritance_Getter(mthis) native "ShadowRoot_resetStyleInheritance_Getter";
 
-  static $resetStyleInheritance_Setter(mthis, value) native "ShadowRoot_resetStyleInheritance_Setter";
+  static resetStyleInheritance_Setter_boolean(mthis, value) native "ShadowRoot_resetStyleInheritance_Setter";
 
-  static $styleSheets_Getter(mthis) native "ShadowRoot_styleSheets_Getter";
+  static styleSheets_Getter(mthis) native "ShadowRoot_styleSheets_Getter";
 
-  static $cloneNode_Callback(mthis, deep) native "ShadowRoot_cloneNode_Callback_RESOLVER_STRING_1_boolean";
+  static cloneNode_Callback_boolean(mthis, deep) native "ShadowRoot_cloneNode_Callback_boolean";
 
-  static $elementFromPoint_Callback(mthis, x, y) native "ShadowRoot_elementFromPoint_Callback_RESOLVER_STRING_2_long_long";
+  static elementFromPoint_Callback_long_long(mthis, x, y) native "ShadowRoot_elementFromPoint_Callback_long_long";
 
-  static $getElementById_Callback(mthis, elementId) native "ShadowRoot_getElementById_Callback_RESOLVER_STRING_1_DOMString";
+  static getElementById_Callback_DOMString(mthis, elementId) native "ShadowRoot_getElementById_Callback_DOMString";
 
-  static $getElementsByClassName_Callback(mthis, className) native "ShadowRoot_getElementsByClassName_Callback_RESOLVER_STRING_1_DOMString";
+  static getElementsByClassName_Callback_DOMString(mthis, className) native "ShadowRoot_getElementsByClassName_Callback_DOMString";
 
-  static $getElementsByTagName_Callback(mthis, tagName) native "ShadowRoot_getElementsByTagName_Callback_RESOLVER_STRING_1_DOMString";
+  static getElementsByTagName_Callback_DOMString(mthis, tagName) native "ShadowRoot_getElementsByTagName_Callback_DOMString";
 
-  static $getSelection_Callback(mthis) native "ShadowRoot_getSelection_Callback_RESOLVER_STRING_0_";
+  static getSelection_Callback(mthis) native "ShadowRoot_getSelection_Callback";
 }
 
 class BlinkSharedWorker {
-  static $_create_1constructorCallback(scriptURL, name) native "SharedWorker_constructorCallback_RESOLVER_STRING_2_DOMString_DOMString";
+  static constructorCallback_DOMString_DOMString(scriptURL, name) native "SharedWorker_constructorCallback_DOMString_DOMString";
 
-  static $port_Getter(mthis) native "SharedWorker_port_Getter";
+  static port_Getter(mthis) native "SharedWorker_port_Getter";
 
-  static $workerStart_Getter(mthis) native "SharedWorker_workerStart_Getter";
+  static workerStart_Getter(mthis) native "SharedWorker_workerStart_Getter";
 }
 
 class BlinkSharedWorkerGlobalScope {
-  static $name_Getter(mthis) native "SharedWorkerGlobalScope_name_Getter";
+  static name_Getter(mthis) native "SharedWorkerGlobalScope_name_Getter";
 }
 
 class BlinkSourceBuffer {
-  static $appendWindowEnd_Getter(mthis) native "SourceBuffer_appendWindowEnd_Getter";
+  static appendWindowEnd_Getter(mthis) native "SourceBuffer_appendWindowEnd_Getter";
 
-  static $appendWindowEnd_Setter(mthis, value) native "SourceBuffer_appendWindowEnd_Setter";
+  static appendWindowEnd_Setter_double(mthis, value) native "SourceBuffer_appendWindowEnd_Setter";
 
-  static $appendWindowStart_Getter(mthis) native "SourceBuffer_appendWindowStart_Getter";
+  static appendWindowStart_Getter(mthis) native "SourceBuffer_appendWindowStart_Getter";
 
-  static $appendWindowStart_Setter(mthis, value) native "SourceBuffer_appendWindowStart_Setter";
+  static appendWindowStart_Setter_double(mthis, value) native "SourceBuffer_appendWindowStart_Setter";
 
-  static $buffered_Getter(mthis) native "SourceBuffer_buffered_Getter";
+  static buffered_Getter(mthis) native "SourceBuffer_buffered_Getter";
 
-  static $mode_Getter(mthis) native "SourceBuffer_mode_Getter";
+  static mode_Getter(mthis) native "SourceBuffer_mode_Getter";
 
-  static $mode_Setter(mthis, value) native "SourceBuffer_mode_Setter";
+  static mode_Setter_DOMString(mthis, value) native "SourceBuffer_mode_Setter";
 
-  static $timestampOffset_Getter(mthis) native "SourceBuffer_timestampOffset_Getter";
+  static timestampOffset_Getter(mthis) native "SourceBuffer_timestampOffset_Getter";
 
-  static $timestampOffset_Setter(mthis, value) native "SourceBuffer_timestampOffset_Setter";
+  static timestampOffset_Setter_double(mthis, value) native "SourceBuffer_timestampOffset_Setter";
 
-  static $updating_Getter(mthis) native "SourceBuffer_updating_Getter";
+  static updating_Getter(mthis) native "SourceBuffer_updating_Getter";
 
-  static $abort_Callback(mthis) native "SourceBuffer_abort_Callback_RESOLVER_STRING_0_";
+  static abort_Callback(mthis) native "SourceBuffer_abort_Callback";
 
-  static $appendBuffer_Callback(mthis, data) native "SourceBuffer_appendBuffer_Callback_RESOLVER_STRING_1_ArrayBuffer";
+  static appendBuffer_Callback_ArrayBuffer(mthis, data) native "SourceBuffer_appendBuffer_Callback_ArrayBuffer";
 
-  static $_appendStream_1_Callback(mthis, stream, maxSize) native "SourceBuffer_appendStream_Callback_RESOLVER_STRING_2_Stream_unsigned long long";
+  static appendStream_Callback_Stream_ull(mthis, stream, maxSize) native "SourceBuffer_appendStream_Callback_Stream_unsigned long long";
 
-  static $_appendStream_2_Callback(mthis, stream) native "SourceBuffer_appendStream_Callback_RESOLVER_STRING_1_Stream";
+  static appendStream_Callback_Stream(mthis, stream) native "SourceBuffer_appendStream_Callback_Stream";
 
-  static $appendTypedData_Callback(mthis, data) native "SourceBuffer_appendBuffer_Callback_RESOLVER_STRING_1_ArrayBufferView";
+  static appendBuffer_Callback_ArrayBufferView(mthis, data) native "SourceBuffer_appendBuffer_Callback_ArrayBufferView";
 
-  static $remove_Callback(mthis, start, end) native "SourceBuffer_remove_Callback_RESOLVER_STRING_2_double_double";
+  static remove_Callback_double_double(mthis, start, end) native "SourceBuffer_remove_Callback_double_double";
 }
 
 class BlinkSourceBufferList {
-  static $length_Getter(mthis) native "SourceBufferList_length_Getter";
+  static length_Getter(mthis) native "SourceBufferList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "SourceBufferList_item_Callback_RESOLVER_STRING_1_unsigned long";
-
-  static $item_Callback(mthis, index) native "SourceBufferList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "SourceBufferList_item_Callback_unsigned long";
 }
 
 class BlinkSourceInfo {
-  static $facing_Getter(mthis) native "SourceInfo_facing_Getter";
+  static facing_Getter(mthis) native "SourceInfo_facing_Getter";
 
-  static $id_Getter(mthis) native "SourceInfo_id_Getter";
+  static id_Getter(mthis) native "SourceInfo_id_Getter";
 
-  static $kind_Getter(mthis) native "SourceInfo_kind_Getter";
+  static kind_Getter(mthis) native "SourceInfo_kind_Getter";
 
-  static $label_Getter(mthis) native "SourceInfo_label_Getter";
+  static label_Getter(mthis) native "SourceInfo_label_Getter";
 }
 
 class BlinkSpeechGrammar {
-  static $_create_1constructorCallback() native "SpeechGrammar_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "SpeechGrammar_constructorCallback";
 
-  static $src_Getter(mthis) native "SpeechGrammar_src_Getter";
+  static src_Getter(mthis) native "SpeechGrammar_src_Getter";
 
-  static $src_Setter(mthis, value) native "SpeechGrammar_src_Setter";
+  static src_Setter_DOMString(mthis, value) native "SpeechGrammar_src_Setter";
 
-  static $weight_Getter(mthis) native "SpeechGrammar_weight_Getter";
+  static weight_Getter(mthis) native "SpeechGrammar_weight_Getter";
 
-  static $weight_Setter(mthis, value) native "SpeechGrammar_weight_Setter";
+  static weight_Setter_float(mthis, value) native "SpeechGrammar_weight_Setter";
 }
 
 class BlinkSpeechGrammarList {
-  static $_create_1constructorCallback() native "SpeechGrammarList_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "SpeechGrammarList_constructorCallback";
 
-  static $length_Getter(mthis) native "SpeechGrammarList_length_Getter";
+  static length_Getter(mthis) native "SpeechGrammarList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "SpeechGrammarList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static addFromString_Callback_DOMString_float(mthis, string, weight) native "SpeechGrammarList_addFromString_Callback_DOMString_float";
 
-  static $_addFromString_1_Callback(mthis, string, weight) native "SpeechGrammarList_addFromString_Callback_RESOLVER_STRING_2_DOMString_float";
+  static addFromString_Callback_DOMString(mthis, string) native "SpeechGrammarList_addFromString_Callback_DOMString";
 
-  static $_addFromString_2_Callback(mthis, string) native "SpeechGrammarList_addFromString_Callback_RESOLVER_STRING_1_DOMString";
+  static addFromUri_Callback_DOMString_float(mthis, src, weight) native "SpeechGrammarList_addFromUri_Callback_DOMString_float";
 
-  static $_addFromUri_1_Callback(mthis, src, weight) native "SpeechGrammarList_addFromUri_Callback_RESOLVER_STRING_2_DOMString_float";
+  static addFromUri_Callback_DOMString(mthis, src) native "SpeechGrammarList_addFromUri_Callback_DOMString";
 
-  static $_addFromUri_2_Callback(mthis, src) native "SpeechGrammarList_addFromUri_Callback_RESOLVER_STRING_1_DOMString";
-
-  static $item_Callback(mthis, index) native "SpeechGrammarList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "SpeechGrammarList_item_Callback_unsigned long";
 }
 
 class BlinkSpeechInputEvent {}
@@ -6853,647 +6805,629 @@
 class BlinkSpeechInputResult {}
 
 class BlinkSpeechInputResultList {
-  static $length_Getter(mthis) native "SpeechInputResultList_length_Getter";
+  static length_Getter(mthis) native "SpeechInputResultList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "SpeechInputResultList_item_Callback_RESOLVER_STRING_1_unsigned long";
-
-  static $item_Callback(mthis, index) native "SpeechInputResultList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "SpeechInputResultList_item_Callback_unsigned long";
 }
 
 class BlinkSpeechRecognition {
-  static $_create_1constructorCallback() native "SpeechRecognition_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "SpeechRecognition_constructorCallback";
 
-  static $continuous_Getter(mthis) native "SpeechRecognition_continuous_Getter";
+  static continuous_Getter(mthis) native "SpeechRecognition_continuous_Getter";
 
-  static $continuous_Setter(mthis, value) native "SpeechRecognition_continuous_Setter";
+  static continuous_Setter_boolean(mthis, value) native "SpeechRecognition_continuous_Setter";
 
-  static $grammars_Getter(mthis) native "SpeechRecognition_grammars_Getter";
+  static grammars_Getter(mthis) native "SpeechRecognition_grammars_Getter";
 
-  static $grammars_Setter(mthis, value) native "SpeechRecognition_grammars_Setter";
+  static grammars_Setter_SpeechGrammarList(mthis, value) native "SpeechRecognition_grammars_Setter";
 
-  static $interimResults_Getter(mthis) native "SpeechRecognition_interimResults_Getter";
+  static interimResults_Getter(mthis) native "SpeechRecognition_interimResults_Getter";
 
-  static $interimResults_Setter(mthis, value) native "SpeechRecognition_interimResults_Setter";
+  static interimResults_Setter_boolean(mthis, value) native "SpeechRecognition_interimResults_Setter";
 
-  static $lang_Getter(mthis) native "SpeechRecognition_lang_Getter";
+  static lang_Getter(mthis) native "SpeechRecognition_lang_Getter";
 
-  static $lang_Setter(mthis, value) native "SpeechRecognition_lang_Setter";
+  static lang_Setter_DOMString(mthis, value) native "SpeechRecognition_lang_Setter";
 
-  static $maxAlternatives_Getter(mthis) native "SpeechRecognition_maxAlternatives_Getter";
+  static maxAlternatives_Getter(mthis) native "SpeechRecognition_maxAlternatives_Getter";
 
-  static $maxAlternatives_Setter(mthis, value) native "SpeechRecognition_maxAlternatives_Setter";
+  static maxAlternatives_Setter_ul(mthis, value) native "SpeechRecognition_maxAlternatives_Setter";
 
-  static $abort_Callback(mthis) native "SpeechRecognition_abort_Callback_RESOLVER_STRING_0_";
+  static abort_Callback(mthis) native "SpeechRecognition_abort_Callback";
 
-  static $start_Callback(mthis) native "SpeechRecognition_start_Callback_RESOLVER_STRING_0_";
+  static start_Callback(mthis) native "SpeechRecognition_start_Callback";
 
-  static $stop_Callback(mthis) native "SpeechRecognition_stop_Callback_RESOLVER_STRING_0_";
+  static stop_Callback(mthis) native "SpeechRecognition_stop_Callback";
 }
 
 class BlinkSpeechRecognitionAlternative {
-  static $confidence_Getter(mthis) native "SpeechRecognitionAlternative_confidence_Getter";
+  static confidence_Getter(mthis) native "SpeechRecognitionAlternative_confidence_Getter";
 
-  static $transcript_Getter(mthis) native "SpeechRecognitionAlternative_transcript_Getter";
+  static transcript_Getter(mthis) native "SpeechRecognitionAlternative_transcript_Getter";
 }
 
 class BlinkSpeechRecognitionError {
-  static $error_Getter(mthis) native "SpeechRecognitionError_error_Getter";
+  static error_Getter(mthis) native "SpeechRecognitionError_error_Getter";
 
-  static $message_Getter(mthis) native "SpeechRecognitionError_message_Getter";
+  static message_Getter(mthis) native "SpeechRecognitionError_message_Getter";
 }
 
 class BlinkSpeechRecognitionEvent {
-  static $emma_Getter(mthis) native "SpeechRecognitionEvent_emma_Getter";
+  static emma_Getter(mthis) native "SpeechRecognitionEvent_emma_Getter";
 
-  static $interpretation_Getter(mthis) native "SpeechRecognitionEvent_interpretation_Getter";
+  static interpretation_Getter(mthis) native "SpeechRecognitionEvent_interpretation_Getter";
 
-  static $resultIndex_Getter(mthis) native "SpeechRecognitionEvent_resultIndex_Getter";
+  static resultIndex_Getter(mthis) native "SpeechRecognitionEvent_resultIndex_Getter";
 
-  static $results_Getter(mthis) native "SpeechRecognitionEvent_results_Getter";
+  static results_Getter(mthis) native "SpeechRecognitionEvent_results_Getter";
 }
 
 class BlinkSpeechRecognitionResult {
-  static $isFinal_Getter(mthis) native "SpeechRecognitionResult_isFinal_Getter";
+  static isFinal_Getter(mthis) native "SpeechRecognitionResult_isFinal_Getter";
 
-  static $length_Getter(mthis) native "SpeechRecognitionResult_length_Getter";
+  static length_Getter(mthis) native "SpeechRecognitionResult_length_Getter";
 
-  static $item_Callback(mthis, index) native "SpeechRecognitionResult_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "SpeechRecognitionResult_item_Callback_unsigned long";
 }
 
 class BlinkSpeechRecognitionResultList {
-  static $length_Getter(mthis) native "SpeechRecognitionResultList_length_Getter";
+  static length_Getter(mthis) native "SpeechRecognitionResultList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "SpeechRecognitionResultList_item_Callback_RESOLVER_STRING_1_unsigned long";
-
-  static $item_Callback(mthis, index) native "SpeechRecognitionResultList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "SpeechRecognitionResultList_item_Callback_unsigned long";
 }
 
 class BlinkSpeechSynthesis {
-  static $paused_Getter(mthis) native "SpeechSynthesis_paused_Getter";
+  static paused_Getter(mthis) native "SpeechSynthesis_paused_Getter";
 
-  static $pending_Getter(mthis) native "SpeechSynthesis_pending_Getter";
+  static pending_Getter(mthis) native "SpeechSynthesis_pending_Getter";
 
-  static $speaking_Getter(mthis) native "SpeechSynthesis_speaking_Getter";
+  static speaking_Getter(mthis) native "SpeechSynthesis_speaking_Getter";
 
-  static $cancel_Callback(mthis) native "SpeechSynthesis_cancel_Callback_RESOLVER_STRING_0_";
+  static cancel_Callback(mthis) native "SpeechSynthesis_cancel_Callback";
 
-  static $getVoices_Callback(mthis) native "SpeechSynthesis_getVoices_Callback_RESOLVER_STRING_0_";
+  static getVoices_Callback(mthis) native "SpeechSynthesis_getVoices_Callback";
 
-  static $pause_Callback(mthis) native "SpeechSynthesis_pause_Callback_RESOLVER_STRING_0_";
+  static pause_Callback(mthis) native "SpeechSynthesis_pause_Callback";
 
-  static $resume_Callback(mthis) native "SpeechSynthesis_resume_Callback_RESOLVER_STRING_0_";
+  static resume_Callback(mthis) native "SpeechSynthesis_resume_Callback";
 
-  static $speak_Callback(mthis, utterance) native "SpeechSynthesis_speak_Callback_RESOLVER_STRING_1_SpeechSynthesisUtterance";
+  static speak_Callback_SpeechSynthesisUtterance(mthis, utterance) native "SpeechSynthesis_speak_Callback_SpeechSynthesisUtterance";
 }
 
 class BlinkSpeechSynthesisEvent {
-  static $charIndex_Getter(mthis) native "SpeechSynthesisEvent_charIndex_Getter";
+  static charIndex_Getter(mthis) native "SpeechSynthesisEvent_charIndex_Getter";
 
-  static $elapsedTime_Getter(mthis) native "SpeechSynthesisEvent_elapsedTime_Getter";
+  static elapsedTime_Getter(mthis) native "SpeechSynthesisEvent_elapsedTime_Getter";
 
-  static $name_Getter(mthis) native "SpeechSynthesisEvent_name_Getter";
+  static name_Getter(mthis) native "SpeechSynthesisEvent_name_Getter";
 }
 
 class BlinkSpeechSynthesisUtterance {
-  static $_create_1constructorCallback(text) native "SpeechSynthesisUtterance_constructorCallback_RESOLVER_STRING_1_DOMString";
+  static constructorCallback_DOMString(text) native "SpeechSynthesisUtterance_constructorCallback_DOMString";
 
-  static $lang_Getter(mthis) native "SpeechSynthesisUtterance_lang_Getter";
+  static lang_Getter(mthis) native "SpeechSynthesisUtterance_lang_Getter";
 
-  static $lang_Setter(mthis, value) native "SpeechSynthesisUtterance_lang_Setter";
+  static lang_Setter_DOMString(mthis, value) native "SpeechSynthesisUtterance_lang_Setter";
 
-  static $pitch_Getter(mthis) native "SpeechSynthesisUtterance_pitch_Getter";
+  static pitch_Getter(mthis) native "SpeechSynthesisUtterance_pitch_Getter";
 
-  static $pitch_Setter(mthis, value) native "SpeechSynthesisUtterance_pitch_Setter";
+  static pitch_Setter_float(mthis, value) native "SpeechSynthesisUtterance_pitch_Setter";
 
-  static $rate_Getter(mthis) native "SpeechSynthesisUtterance_rate_Getter";
+  static rate_Getter(mthis) native "SpeechSynthesisUtterance_rate_Getter";
 
-  static $rate_Setter(mthis, value) native "SpeechSynthesisUtterance_rate_Setter";
+  static rate_Setter_float(mthis, value) native "SpeechSynthesisUtterance_rate_Setter";
 
-  static $text_Getter(mthis) native "SpeechSynthesisUtterance_text_Getter";
+  static text_Getter(mthis) native "SpeechSynthesisUtterance_text_Getter";
 
-  static $text_Setter(mthis, value) native "SpeechSynthesisUtterance_text_Setter";
+  static text_Setter_DOMString(mthis, value) native "SpeechSynthesisUtterance_text_Setter";
 
-  static $voice_Getter(mthis) native "SpeechSynthesisUtterance_voice_Getter";
+  static voice_Getter(mthis) native "SpeechSynthesisUtterance_voice_Getter";
 
-  static $voice_Setter(mthis, value) native "SpeechSynthesisUtterance_voice_Setter";
+  static voice_Setter_SpeechSynthesisVoice(mthis, value) native "SpeechSynthesisUtterance_voice_Setter";
 
-  static $volume_Getter(mthis) native "SpeechSynthesisUtterance_volume_Getter";
+  static volume_Getter(mthis) native "SpeechSynthesisUtterance_volume_Getter";
 
-  static $volume_Setter(mthis, value) native "SpeechSynthesisUtterance_volume_Setter";
+  static volume_Setter_float(mthis, value) native "SpeechSynthesisUtterance_volume_Setter";
 }
 
 class BlinkSpeechSynthesisVoice {
-  static $default_Getter(mthis) native "SpeechSynthesisVoice_default_Getter";
+  static default_Getter(mthis) native "SpeechSynthesisVoice_default_Getter";
 
-  static $lang_Getter(mthis) native "SpeechSynthesisVoice_lang_Getter";
+  static lang_Getter(mthis) native "SpeechSynthesisVoice_lang_Getter";
 
-  static $localService_Getter(mthis) native "SpeechSynthesisVoice_localService_Getter";
+  static localService_Getter(mthis) native "SpeechSynthesisVoice_localService_Getter";
 
-  static $name_Getter(mthis) native "SpeechSynthesisVoice_name_Getter";
+  static name_Getter(mthis) native "SpeechSynthesisVoice_name_Getter";
 
-  static $voiceURI_Getter(mthis) native "SpeechSynthesisVoice_voiceURI_Getter";
+  static voiceURI_Getter(mthis) native "SpeechSynthesisVoice_voiceURI_Getter";
 }
 
 class BlinkStorage {
-  static $length_Getter(mthis) native "Storage_length_Getter";
+  static length_Getter(mthis) native "Storage_length_Getter";
 
-  static $___delete___1_Callback(mthis, index_OR_name) native "Storage___delete___Callback_RESOLVER_STRING_1_unsigned long";
+  static $__delete___Callback_ul(mthis, index_OR_name) native "Storage___delete___Callback_unsigned long";
 
-  static $___delete___2_Callback(mthis, index_OR_name) native "Storage___delete___Callback_RESOLVER_STRING_1_DOMString";
+  static $__delete___Callback_DOMString(mthis, index_OR_name) native "Storage___delete___Callback_DOMString";
 
-  static $___getter___1_Callback(mthis, index_OR_name) native "Storage___getter___Callback_RESOLVER_STRING_1_unsigned long";
+  static $__getter___Callback_ul(mthis, index_OR_name) native "Storage___getter___Callback_unsigned long";
 
-  static $___getter___2_Callback(mthis, index_OR_name) native "Storage___getter___Callback_RESOLVER_STRING_1_DOMString";
+  static $__getter___Callback_DOMString(mthis, index_OR_name) native "Storage___getter___Callback_DOMString";
 
-  static $___setter___1_Callback(mthis, index_OR_name, value) native "Storage___setter___Callback_RESOLVER_STRING_2_unsigned long_DOMString";
+  static $__setter___Callback_ul_DOMString(mthis, index_OR_name, value) native "Storage___setter___Callback_unsigned long_DOMString";
 
-  static $___setter___2_Callback(mthis, index_OR_name, value) native "Storage___setter___Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static $__setter___Callback_DOMString_DOMString(mthis, index_OR_name, value) native "Storage___setter___Callback_DOMString_DOMString";
 
-  static $clear_Callback(mthis) native "Storage_clear_Callback_RESOLVER_STRING_0_";
+  static clear_Callback(mthis) native "Storage_clear_Callback";
 
-  static $getItem_Callback(mthis, key) native "Storage_getItem_Callback_RESOLVER_STRING_1_DOMString";
+  static getItem_Callback_DOMString(mthis, key) native "Storage_getItem_Callback_DOMString";
 
-  static $key_Callback(mthis, index) native "Storage_key_Callback_RESOLVER_STRING_1_unsigned long";
+  static key_Callback_ul(mthis, index) native "Storage_key_Callback_unsigned long";
 
-  static $removeItem_Callback(mthis, key) native "Storage_removeItem_Callback_RESOLVER_STRING_1_DOMString";
+  static removeItem_Callback_DOMString(mthis, key) native "Storage_removeItem_Callback_DOMString";
 
-  static $setItem_Callback(mthis, key, data) native "Storage_setItem_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static setItem_Callback_DOMString_DOMString(mthis, key, data) native "Storage_setItem_Callback_DOMString_DOMString";
 }
 
 class BlinkStorageEvent {
-  static $key_Getter(mthis) native "StorageEvent_key_Getter";
+  static key_Getter(mthis) native "StorageEvent_key_Getter";
 
-  static $newValue_Getter(mthis) native "StorageEvent_newValue_Getter";
+  static newValue_Getter(mthis) native "StorageEvent_newValue_Getter";
 
-  static $oldValue_Getter(mthis) native "StorageEvent_oldValue_Getter";
+  static oldValue_Getter(mthis) native "StorageEvent_oldValue_Getter";
 
-  static $storageArea_Getter(mthis) native "StorageEvent_storageArea_Getter";
+  static storageArea_Getter(mthis) native "StorageEvent_storageArea_Getter";
 
-  static $url_Getter(mthis) native "StorageEvent_url_Getter";
+  static url_Getter(mthis) native "StorageEvent_url_Getter";
 
-  static $initStorageEvent_Callback(mthis, typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg) native "StorageEvent_initStorageEvent_Callback_RESOLVER_STRING_8_DOMString_boolean_boolean_DOMString_DOMString_DOMString_DOMString_Storage";
+  static initStorageEvent_Callback_DOMString_boolean_boolean_DOMString_DOMString_DOMString_DOMString_Storage(mthis, typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg) native "StorageEvent_initStorageEvent_Callback_DOMString_boolean_boolean_DOMString_DOMString_DOMString_DOMString_Storage";
 }
 
 class BlinkStorageInfo {
-  static $quota_Getter(mthis) native "StorageInfo_quota_Getter";
+  static quota_Getter(mthis) native "StorageInfo_quota_Getter";
 
-  static $usage_Getter(mthis) native "StorageInfo_usage_Getter";
+  static usage_Getter(mthis) native "StorageInfo_usage_Getter";
 }
 
 class BlinkStorageQuota {
-  static $supportedTypes_Getter(mthis) native "StorageQuota_supportedTypes_Getter";
+  static supportedTypes_Getter(mthis) native "StorageQuota_supportedTypes_Getter";
 }
 
 class BlinkStream {
-  static $type_Getter(mthis) native "Stream_type_Getter";
+  static type_Getter(mthis) native "Stream_type_Getter";
 }
 
 class BlinkStyleMedia {
-  static $type_Getter(mthis) native "StyleMedia_type_Getter";
+  static type_Getter(mthis) native "StyleMedia_type_Getter";
 
-  static $matchMedium_Callback(mthis, mediaquery) native "StyleMedia_matchMedium_Callback_RESOLVER_STRING_1_DOMString";
+  static matchMedium_Callback_DOMString(mthis, mediaquery) native "StyleMedia_matchMedium_Callback_DOMString";
 }
 
 class BlinkStyleSheetList {
-  static $length_Getter(mthis) native "StyleSheetList_length_Getter";
+  static length_Getter(mthis) native "StyleSheetList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "StyleSheetList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static $__getter___Callback_DOMString(mthis, name) native "StyleSheetList___getter___Callback_DOMString";
 
-  static $__getter___Callback(mthis, name) native "StyleSheetList___getter___Callback_RESOLVER_STRING_1_DOMString";
-
-  static $item_Callback(mthis, index) native "StyleSheetList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "StyleSheetList_item_Callback_unsigned long";
 }
 
 class BlinkSubtleCrypto {}
 
 class BlinkTextEvent {
-  static $data_Getter(mthis) native "TextEvent_data_Getter";
+  static data_Getter(mthis) native "TextEvent_data_Getter";
 
-  static $initTextEvent_Callback(mthis, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg) native "TextEvent_initTextEvent_Callback_RESOLVER_STRING_5_DOMString_boolean_boolean_Window_DOMString";
+  static initTextEvent_Callback_DOMString_boolean_boolean_Window_DOMString(mthis, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg) native "TextEvent_initTextEvent_Callback_DOMString_boolean_boolean_Window_DOMString";
 }
 
 class BlinkTextMetrics {
-  static $width_Getter(mthis) native "TextMetrics_width_Getter";
+  static width_Getter(mthis) native "TextMetrics_width_Getter";
 }
 
 class BlinkTextTrack {
-  static $activeCues_Getter(mthis) native "TextTrack_activeCues_Getter";
+  static activeCues_Getter(mthis) native "TextTrack_activeCues_Getter";
 
-  static $cues_Getter(mthis) native "TextTrack_cues_Getter";
+  static cues_Getter(mthis) native "TextTrack_cues_Getter";
 
-  static $id_Getter(mthis) native "TextTrack_id_Getter";
+  static id_Getter(mthis) native "TextTrack_id_Getter";
 
-  static $kind_Getter(mthis) native "TextTrack_kind_Getter";
+  static kind_Getter(mthis) native "TextTrack_kind_Getter";
 
-  static $label_Getter(mthis) native "TextTrack_label_Getter";
+  static label_Getter(mthis) native "TextTrack_label_Getter";
 
-  static $language_Getter(mthis) native "TextTrack_language_Getter";
+  static language_Getter(mthis) native "TextTrack_language_Getter";
 
-  static $mode_Getter(mthis) native "TextTrack_mode_Getter";
+  static mode_Getter(mthis) native "TextTrack_mode_Getter";
 
-  static $mode_Setter(mthis, value) native "TextTrack_mode_Setter";
+  static mode_Setter_DOMString(mthis, value) native "TextTrack_mode_Setter";
 
-  static $regions_Getter(mthis) native "TextTrack_regions_Getter";
+  static regions_Getter(mthis) native "TextTrack_regions_Getter";
 
-  static $addCue_Callback(mthis, cue) native "TextTrack_addCue_Callback_RESOLVER_STRING_1_TextTrackCue";
+  static addCue_Callback_TextTrackCue(mthis, cue) native "TextTrack_addCue_Callback_TextTrackCue";
 
-  static $addRegion_Callback(mthis, region) native "TextTrack_addRegion_Callback_RESOLVER_STRING_1_VTTRegion";
+  static addRegion_Callback_VTTRegion(mthis, region) native "TextTrack_addRegion_Callback_VTTRegion";
 
-  static $removeCue_Callback(mthis, cue) native "TextTrack_removeCue_Callback_RESOLVER_STRING_1_TextTrackCue";
+  static removeCue_Callback_TextTrackCue(mthis, cue) native "TextTrack_removeCue_Callback_TextTrackCue";
 
-  static $removeRegion_Callback(mthis, region) native "TextTrack_removeRegion_Callback_RESOLVER_STRING_1_VTTRegion";
+  static removeRegion_Callback_VTTRegion(mthis, region) native "TextTrack_removeRegion_Callback_VTTRegion";
 }
 
 class BlinkTextTrackCue {
-  static $endTime_Getter(mthis) native "TextTrackCue_endTime_Getter";
+  static endTime_Getter(mthis) native "TextTrackCue_endTime_Getter";
 
-  static $endTime_Setter(mthis, value) native "TextTrackCue_endTime_Setter";
+  static endTime_Setter_double(mthis, value) native "TextTrackCue_endTime_Setter";
 
-  static $id_Getter(mthis) native "TextTrackCue_id_Getter";
+  static id_Getter(mthis) native "TextTrackCue_id_Getter";
 
-  static $id_Setter(mthis, value) native "TextTrackCue_id_Setter";
+  static id_Setter_DOMString(mthis, value) native "TextTrackCue_id_Setter";
 
-  static $pauseOnExit_Getter(mthis) native "TextTrackCue_pauseOnExit_Getter";
+  static pauseOnExit_Getter(mthis) native "TextTrackCue_pauseOnExit_Getter";
 
-  static $pauseOnExit_Setter(mthis, value) native "TextTrackCue_pauseOnExit_Setter";
+  static pauseOnExit_Setter_boolean(mthis, value) native "TextTrackCue_pauseOnExit_Setter";
 
-  static $startTime_Getter(mthis) native "TextTrackCue_startTime_Getter";
+  static startTime_Getter(mthis) native "TextTrackCue_startTime_Getter";
 
-  static $startTime_Setter(mthis, value) native "TextTrackCue_startTime_Setter";
+  static startTime_Setter_double(mthis, value) native "TextTrackCue_startTime_Setter";
 
-  static $track_Getter(mthis) native "TextTrackCue_track_Getter";
+  static track_Getter(mthis) native "TextTrackCue_track_Getter";
 }
 
 class BlinkTextTrackCueList {
-  static $length_Getter(mthis) native "TextTrackCueList_length_Getter";
+  static length_Getter(mthis) native "TextTrackCueList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "TextTrackCueList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static getCueById_Callback_DOMString(mthis, id) native "TextTrackCueList_getCueById_Callback_DOMString";
 
-  static $getCueById_Callback(mthis, id) native "TextTrackCueList_getCueById_Callback_RESOLVER_STRING_1_DOMString";
-
-  static $item_Callback(mthis, index) native "TextTrackCueList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "TextTrackCueList_item_Callback_unsigned long";
 }
 
 class BlinkTextTrackList {
-  static $length_Getter(mthis) native "TextTrackList_length_Getter";
+  static length_Getter(mthis) native "TextTrackList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "TextTrackList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static getTrackById_Callback_DOMString(mthis, id) native "TextTrackList_getTrackById_Callback_DOMString";
 
-  static $getTrackById_Callback(mthis, id) native "TextTrackList_getTrackById_Callback_RESOLVER_STRING_1_DOMString";
-
-  static $item_Callback(mthis, index) native "TextTrackList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "TextTrackList_item_Callback_unsigned long";
 }
 
 class BlinkTimeRanges {
-  static $length_Getter(mthis) native "TimeRanges_length_Getter";
+  static length_Getter(mthis) native "TimeRanges_length_Getter";
 
-  static $end_Callback(mthis, index) native "TimeRanges_end_Callback_RESOLVER_STRING_1_unsigned long";
+  static end_Callback_ul(mthis, index) native "TimeRanges_end_Callback_unsigned long";
 
-  static $start_Callback(mthis, index) native "TimeRanges_start_Callback_RESOLVER_STRING_1_unsigned long";
+  static start_Callback_ul(mthis, index) native "TimeRanges_start_Callback_unsigned long";
 }
 
 class BlinkTimeline {
-  static $play_Callback(mthis, source) native "Timeline_play_Callback_RESOLVER_STRING_1_TimedItem";
+  static play_Callback_TimedItem(mthis, source) native "Timeline_play_Callback_TimedItem";
 }
 
 class BlinkTiming {
-  static $delay_Getter(mthis) native "Timing_delay_Getter";
+  static delay_Getter(mthis) native "Timing_delay_Getter";
 
-  static $delay_Setter(mthis, value) native "Timing_delay_Setter";
+  static delay_Setter_double(mthis, value) native "Timing_delay_Setter";
 
-  static $direction_Getter(mthis) native "Timing_direction_Getter";
+  static direction_Getter(mthis) native "Timing_direction_Getter";
 
-  static $direction_Setter(mthis, value) native "Timing_direction_Setter";
+  static direction_Setter_DOMString(mthis, value) native "Timing_direction_Setter";
 
-  static $easing_Getter(mthis) native "Timing_easing_Getter";
+  static easing_Getter(mthis) native "Timing_easing_Getter";
 
-  static $easing_Setter(mthis, value) native "Timing_easing_Setter";
+  static easing_Setter_DOMString(mthis, value) native "Timing_easing_Setter";
 
-  static $endDelay_Getter(mthis) native "Timing_endDelay_Getter";
+  static endDelay_Getter(mthis) native "Timing_endDelay_Getter";
 
-  static $endDelay_Setter(mthis, value) native "Timing_endDelay_Setter";
+  static endDelay_Setter_double(mthis, value) native "Timing_endDelay_Setter";
 
-  static $fill_Getter(mthis) native "Timing_fill_Getter";
+  static fill_Getter(mthis) native "Timing_fill_Getter";
 
-  static $fill_Setter(mthis, value) native "Timing_fill_Setter";
+  static fill_Setter_DOMString(mthis, value) native "Timing_fill_Setter";
 
-  static $iterationStart_Getter(mthis) native "Timing_iterationStart_Getter";
+  static iterationStart_Getter(mthis) native "Timing_iterationStart_Getter";
 
-  static $iterationStart_Setter(mthis, value) native "Timing_iterationStart_Setter";
+  static iterationStart_Setter_double(mthis, value) native "Timing_iterationStart_Setter";
 
-  static $iterations_Getter(mthis) native "Timing_iterations_Getter";
+  static iterations_Getter(mthis) native "Timing_iterations_Getter";
 
-  static $iterations_Setter(mthis, value) native "Timing_iterations_Setter";
+  static iterations_Setter_double(mthis, value) native "Timing_iterations_Setter";
 
-  static $playbackRate_Getter(mthis) native "Timing_playbackRate_Getter";
+  static playbackRate_Getter(mthis) native "Timing_playbackRate_Getter";
 
-  static $playbackRate_Setter(mthis, value) native "Timing_playbackRate_Setter";
+  static playbackRate_Setter_double(mthis, value) native "Timing_playbackRate_Setter";
 
-  static $__setter___Callback(mthis, name, duration) native "Timing___setter___Callback_RESOLVER_STRING_2_DOMString_double";
+  static $__setter___Callback_DOMString_double(mthis, name, duration) native "Timing___setter___Callback_DOMString_double";
 }
 
 class BlinkTouch {
-  static $clientX_Getter(mthis) native "Touch_clientX_Getter";
+  static clientX_Getter(mthis) native "Touch_clientX_Getter";
 
-  static $clientY_Getter(mthis) native "Touch_clientY_Getter";
+  static clientY_Getter(mthis) native "Touch_clientY_Getter";
 
-  static $identifier_Getter(mthis) native "Touch_identifier_Getter";
+  static identifier_Getter(mthis) native "Touch_identifier_Getter";
 
-  static $pageX_Getter(mthis) native "Touch_pageX_Getter";
+  static pageX_Getter(mthis) native "Touch_pageX_Getter";
 
-  static $pageY_Getter(mthis) native "Touch_pageY_Getter";
+  static pageY_Getter(mthis) native "Touch_pageY_Getter";
 
-  static $screenX_Getter(mthis) native "Touch_screenX_Getter";
+  static screenX_Getter(mthis) native "Touch_screenX_Getter";
 
-  static $screenY_Getter(mthis) native "Touch_screenY_Getter";
+  static screenY_Getter(mthis) native "Touch_screenY_Getter";
 
-  static $target_Getter(mthis) native "Touch_target_Getter";
+  static target_Getter(mthis) native "Touch_target_Getter";
 
-  static $webkitForce_Getter(mthis) native "Touch_webkitForce_Getter";
+  static webkitForce_Getter(mthis) native "Touch_webkitForce_Getter";
 
-  static $webkitRadiusX_Getter(mthis) native "Touch_webkitRadiusX_Getter";
+  static webkitRadiusX_Getter(mthis) native "Touch_webkitRadiusX_Getter";
 
-  static $webkitRadiusY_Getter(mthis) native "Touch_webkitRadiusY_Getter";
+  static webkitRadiusY_Getter(mthis) native "Touch_webkitRadiusY_Getter";
 
-  static $webkitRotationAngle_Getter(mthis) native "Touch_webkitRotationAngle_Getter";
+  static webkitRotationAngle_Getter(mthis) native "Touch_webkitRotationAngle_Getter";
 }
 
 class BlinkTouchEvent {
-  static $altKey_Getter(mthis) native "TouchEvent_altKey_Getter";
+  static altKey_Getter(mthis) native "TouchEvent_altKey_Getter";
 
-  static $changedTouches_Getter(mthis) native "TouchEvent_changedTouches_Getter";
+  static changedTouches_Getter(mthis) native "TouchEvent_changedTouches_Getter";
 
-  static $ctrlKey_Getter(mthis) native "TouchEvent_ctrlKey_Getter";
+  static ctrlKey_Getter(mthis) native "TouchEvent_ctrlKey_Getter";
 
-  static $metaKey_Getter(mthis) native "TouchEvent_metaKey_Getter";
+  static metaKey_Getter(mthis) native "TouchEvent_metaKey_Getter";
 
-  static $shiftKey_Getter(mthis) native "TouchEvent_shiftKey_Getter";
+  static shiftKey_Getter(mthis) native "TouchEvent_shiftKey_Getter";
 
-  static $targetTouches_Getter(mthis) native "TouchEvent_targetTouches_Getter";
+  static targetTouches_Getter(mthis) native "TouchEvent_targetTouches_Getter";
 
-  static $touches_Getter(mthis) native "TouchEvent_touches_Getter";
+  static touches_Getter(mthis) native "TouchEvent_touches_Getter";
 
-  static $initTouchEvent_Callback(mthis, touches, targetTouches, changedTouches, type, view, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey) native "TouchEvent_initTouchEvent_Callback_RESOLVER_STRING_13_TouchList_TouchList_TouchList_DOMString_Window_long_long_long_long_boolean_boolean_boolean_boolean";
+  static initTouchEvent_Callback_TouchList_TouchList_TouchList_DOMString_Window_long_long_long_long_boolean_boolean_boolean_boolean(mthis, touches, targetTouches, changedTouches, type, view, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey) native "TouchEvent_initTouchEvent_Callback_TouchList_TouchList_TouchList_DOMString_Window_long_long_long_long_boolean_boolean_boolean_boolean";
 }
 
 class BlinkTouchList {
-  static $length_Getter(mthis) native "TouchList_length_Getter";
+  static length_Getter(mthis) native "TouchList_length_Getter";
 
-  static $NativeIndexed_Getter(mthis, index) native "TouchList_item_Callback_RESOLVER_STRING_1_unsigned long";
-
-  static $item_Callback(mthis, index) native "TouchList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "TouchList_item_Callback_unsigned long";
 }
 
 class BlinkTrackEvent {
-  static $track_Getter(mthis) native "TrackEvent_track_Getter";
+  static track_Getter(mthis) native "TrackEvent_track_Getter";
 }
 
 class BlinkTransitionEvent {
-  static $elapsedTime_Getter(mthis) native "TransitionEvent_elapsedTime_Getter";
+  static elapsedTime_Getter(mthis) native "TransitionEvent_elapsedTime_Getter";
 
-  static $propertyName_Getter(mthis) native "TransitionEvent_propertyName_Getter";
+  static propertyName_Getter(mthis) native "TransitionEvent_propertyName_Getter";
 
-  static $pseudoElement_Getter(mthis) native "TransitionEvent_pseudoElement_Getter";
+  static pseudoElement_Getter(mthis) native "TransitionEvent_pseudoElement_Getter";
 }
 
 class BlinkTreeWalker {
-  static $currentNode_Getter(mthis) native "TreeWalker_currentNode_Getter";
+  static currentNode_Getter(mthis) native "TreeWalker_currentNode_Getter";
 
-  static $currentNode_Setter(mthis, value) native "TreeWalker_currentNode_Setter";
+  static currentNode_Setter_Node(mthis, value) native "TreeWalker_currentNode_Setter";
 
-  static $filter_Getter(mthis) native "TreeWalker_filter_Getter";
+  static filter_Getter(mthis) native "TreeWalker_filter_Getter";
 
-  static $root_Getter(mthis) native "TreeWalker_root_Getter";
+  static root_Getter(mthis) native "TreeWalker_root_Getter";
 
-  static $whatToShow_Getter(mthis) native "TreeWalker_whatToShow_Getter";
+  static whatToShow_Getter(mthis) native "TreeWalker_whatToShow_Getter";
 
-  static $firstChild_Callback(mthis) native "TreeWalker_firstChild_Callback_RESOLVER_STRING_0_";
+  static firstChild_Callback(mthis) native "TreeWalker_firstChild_Callback";
 
-  static $lastChild_Callback(mthis) native "TreeWalker_lastChild_Callback_RESOLVER_STRING_0_";
+  static lastChild_Callback(mthis) native "TreeWalker_lastChild_Callback";
 
-  static $nextNode_Callback(mthis) native "TreeWalker_nextNode_Callback_RESOLVER_STRING_0_";
+  static nextNode_Callback(mthis) native "TreeWalker_nextNode_Callback";
 
-  static $nextSibling_Callback(mthis) native "TreeWalker_nextSibling_Callback_RESOLVER_STRING_0_";
+  static nextSibling_Callback(mthis) native "TreeWalker_nextSibling_Callback";
 
-  static $parentNode_Callback(mthis) native "TreeWalker_parentNode_Callback_RESOLVER_STRING_0_";
+  static parentNode_Callback(mthis) native "TreeWalker_parentNode_Callback";
 
-  static $previousNode_Callback(mthis) native "TreeWalker_previousNode_Callback_RESOLVER_STRING_0_";
+  static previousNode_Callback(mthis) native "TreeWalker_previousNode_Callback";
 
-  static $previousSibling_Callback(mthis) native "TreeWalker_previousSibling_Callback_RESOLVER_STRING_0_";
+  static previousSibling_Callback(mthis) native "TreeWalker_previousSibling_Callback";
 }
 
 class BlinkURL {
-  static $_createObjectURL_1_Callback(blob_OR_source_OR_stream) native "URL_createObjectURL_Callback_RESOLVER_STRING_1_Blob";
+  static createObjectURL_Callback_Blob(blob_OR_source_OR_stream) native "URL_createObjectURL_Callback_Blob";
 
-  static $_createObjectURL_2_Callback(blob_OR_source_OR_stream) native "URL_createObjectURL_Callback_RESOLVER_STRING_1_MediaSource";
+  static createObjectURL_Callback_MediaStream(blob_OR_source_OR_stream) native "URL_createObjectURL_Callback_MediaStream";
 
-  static $_createObjectURL_3_Callback(blob_OR_source_OR_stream) native "URL_createObjectURL_Callback_RESOLVER_STRING_1_MediaStream";
+  static createObjectURL_Callback_MediaSource(blob_OR_source_OR_stream) native "URL_createObjectURL_Callback_MediaSource";
 
-  static $createObjectUrlFromBlob_Callback(blob) native "URL_createObjectURL_Callback_RESOLVER_STRING_1_Blob";
+  static revokeObjectURL_Callback_DOMString(url) native "URL_revokeObjectURL_Callback_DOMString";
 
-  static $createObjectUrlFromSource_Callback(source) native "URL_createObjectURL_Callback_RESOLVER_STRING_1_MediaSource";
+  static hash_Getter(mthis) native "URL_hash_Getter";
 
-  static $createObjectUrlFromStream_Callback(stream) native "URL_createObjectURL_Callback_RESOLVER_STRING_1_MediaStream";
+  static hash_Setter_DOMString(mthis, value) native "URL_hash_Setter";
 
-  static $revokeObjectURL_Callback(url) native "URL_revokeObjectURL_Callback_RESOLVER_STRING_1_DOMString";
+  static host_Getter(mthis) native "URL_host_Getter";
 
-  static $hash_Getter(mthis) native "URL_hash_Getter";
+  static host_Setter_DOMString(mthis, value) native "URL_host_Setter";
 
-  static $hash_Setter(mthis, value) native "URL_hash_Setter";
+  static hostname_Getter(mthis) native "URL_hostname_Getter";
 
-  static $host_Getter(mthis) native "URL_host_Getter";
+  static hostname_Setter_DOMString(mthis, value) native "URL_hostname_Setter";
 
-  static $host_Setter(mthis, value) native "URL_host_Setter";
+  static href_Getter(mthis) native "URL_href_Getter";
 
-  static $hostname_Getter(mthis) native "URL_hostname_Getter";
+  static href_Setter_DOMString(mthis, value) native "URL_href_Setter";
 
-  static $hostname_Setter(mthis, value) native "URL_hostname_Setter";
+  static origin_Getter(mthis) native "URL_origin_Getter";
 
-  static $href_Getter(mthis) native "URL_href_Getter";
+  static password_Getter(mthis) native "URL_password_Getter";
 
-  static $href_Setter(mthis, value) native "URL_href_Setter";
+  static password_Setter_DOMString(mthis, value) native "URL_password_Setter";
 
-  static $origin_Getter(mthis) native "URL_origin_Getter";
+  static pathname_Getter(mthis) native "URL_pathname_Getter";
 
-  static $password_Getter(mthis) native "URL_password_Getter";
+  static pathname_Setter_DOMString(mthis, value) native "URL_pathname_Setter";
 
-  static $password_Setter(mthis, value) native "URL_password_Setter";
+  static port_Getter(mthis) native "URL_port_Getter";
 
-  static $pathname_Getter(mthis) native "URL_pathname_Getter";
+  static port_Setter_DOMString(mthis, value) native "URL_port_Setter";
 
-  static $pathname_Setter(mthis, value) native "URL_pathname_Setter";
+  static protocol_Getter(mthis) native "URL_protocol_Getter";
 
-  static $port_Getter(mthis) native "URL_port_Getter";
+  static protocol_Setter_DOMString(mthis, value) native "URL_protocol_Setter";
 
-  static $port_Setter(mthis, value) native "URL_port_Setter";
+  static search_Getter(mthis) native "URL_search_Getter";
 
-  static $protocol_Getter(mthis) native "URL_protocol_Getter";
+  static search_Setter_DOMString(mthis, value) native "URL_search_Setter";
 
-  static $protocol_Setter(mthis, value) native "URL_protocol_Setter";
+  static username_Getter(mthis) native "URL_username_Getter";
 
-  static $search_Getter(mthis) native "URL_search_Getter";
+  static username_Setter_DOMString(mthis, value) native "URL_username_Setter";
 
-  static $search_Setter(mthis, value) native "URL_search_Setter";
-
-  static $username_Getter(mthis) native "URL_username_Getter";
-
-  static $username_Setter(mthis, value) native "URL_username_Setter";
-
-  static $toString_Callback(mthis) native "URL_toString_Callback_RESOLVER_STRING_0_";
+  static toString_Callback(mthis) native "URL_toString_Callback";
 }
 
 class BlinkURLUtilsReadOnly {
-  static $hash_Getter(mthis) native "WorkerLocation_hash_Getter";
+  static hash_Getter(mthis) native "WorkerLocation_hash_Getter";
 
-  static $host_Getter(mthis) native "WorkerLocation_host_Getter";
+  static host_Getter(mthis) native "WorkerLocation_host_Getter";
 
-  static $hostname_Getter(mthis) native "WorkerLocation_hostname_Getter";
+  static hostname_Getter(mthis) native "WorkerLocation_hostname_Getter";
 
-  static $href_Getter(mthis) native "WorkerLocation_href_Getter";
+  static href_Getter(mthis) native "WorkerLocation_href_Getter";
 
-  static $pathname_Getter(mthis) native "WorkerLocation_pathname_Getter";
+  static pathname_Getter(mthis) native "WorkerLocation_pathname_Getter";
 
-  static $port_Getter(mthis) native "WorkerLocation_port_Getter";
+  static port_Getter(mthis) native "WorkerLocation_port_Getter";
 
-  static $protocol_Getter(mthis) native "WorkerLocation_protocol_Getter";
+  static protocol_Getter(mthis) native "WorkerLocation_protocol_Getter";
 
-  static $search_Getter(mthis) native "WorkerLocation_search_Getter";
+  static search_Getter(mthis) native "WorkerLocation_search_Getter";
 
-  static $toString_Callback(mthis) native "WorkerLocation_toString_Callback_RESOLVER_STRING_0_";
+  static toString_Callback(mthis) native "WorkerLocation_toString_Callback";
 }
 
 class BlinkVTTCue {
-  static $_create_1constructorCallback(startTime, endTime, text) native "VTTCue_constructorCallback_RESOLVER_STRING_3_double_double_DOMString";
+  static constructorCallback_double_double_DOMString(startTime, endTime, text) native "VTTCue_constructorCallback_double_double_DOMString";
 
-  static $align_Getter(mthis) native "VTTCue_align_Getter";
+  static align_Getter(mthis) native "VTTCue_align_Getter";
 
-  static $align_Setter(mthis, value) native "VTTCue_align_Setter";
+  static align_Setter_DOMString(mthis, value) native "VTTCue_align_Setter";
 
-  static $line_Getter(mthis) native "VTTCue_line_Getter";
+  static line_Getter(mthis) native "VTTCue_line_Getter";
 
-  static $line_Setter(mthis, value) native "VTTCue_line_Setter";
+  static line_Setter_long(mthis, value) native "VTTCue_line_Setter";
 
-  static $position_Getter(mthis) native "VTTCue_position_Getter";
+  static position_Getter(mthis) native "VTTCue_position_Getter";
 
-  static $position_Setter(mthis, value) native "VTTCue_position_Setter";
+  static position_Setter_long(mthis, value) native "VTTCue_position_Setter";
 
-  static $regionId_Getter(mthis) native "VTTCue_regionId_Getter";
+  static regionId_Getter(mthis) native "VTTCue_regionId_Getter";
 
-  static $regionId_Setter(mthis, value) native "VTTCue_regionId_Setter";
+  static regionId_Setter_DOMString(mthis, value) native "VTTCue_regionId_Setter";
 
-  static $size_Getter(mthis) native "VTTCue_size_Getter";
+  static size_Getter(mthis) native "VTTCue_size_Getter";
 
-  static $size_Setter(mthis, value) native "VTTCue_size_Setter";
+  static size_Setter_long(mthis, value) native "VTTCue_size_Setter";
 
-  static $snapToLines_Getter(mthis) native "VTTCue_snapToLines_Getter";
+  static snapToLines_Getter(mthis) native "VTTCue_snapToLines_Getter";
 
-  static $snapToLines_Setter(mthis, value) native "VTTCue_snapToLines_Setter";
+  static snapToLines_Setter_boolean(mthis, value) native "VTTCue_snapToLines_Setter";
 
-  static $text_Getter(mthis) native "VTTCue_text_Getter";
+  static text_Getter(mthis) native "VTTCue_text_Getter";
 
-  static $text_Setter(mthis, value) native "VTTCue_text_Setter";
+  static text_Setter_DOMString(mthis, value) native "VTTCue_text_Setter";
 
-  static $vertical_Getter(mthis) native "VTTCue_vertical_Getter";
+  static vertical_Getter(mthis) native "VTTCue_vertical_Getter";
 
-  static $vertical_Setter(mthis, value) native "VTTCue_vertical_Setter";
+  static vertical_Setter_DOMString(mthis, value) native "VTTCue_vertical_Setter";
 
-  static $getCueAsHTML_Callback(mthis) native "VTTCue_getCueAsHTML_Callback_RESOLVER_STRING_0_";
+  static getCueAsHTML_Callback(mthis) native "VTTCue_getCueAsHTML_Callback";
 }
 
 class BlinkVTTRegion {
-  static $_create_1constructorCallback() native "VTTRegion_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "VTTRegion_constructorCallback";
 
-  static $height_Getter(mthis) native "VTTRegion_height_Getter";
+  static height_Getter(mthis) native "VTTRegion_height_Getter";
 
-  static $height_Setter(mthis, value) native "VTTRegion_height_Setter";
+  static height_Setter_long(mthis, value) native "VTTRegion_height_Setter";
 
-  static $id_Getter(mthis) native "VTTRegion_id_Getter";
+  static id_Getter(mthis) native "VTTRegion_id_Getter";
 
-  static $id_Setter(mthis, value) native "VTTRegion_id_Setter";
+  static id_Setter_DOMString(mthis, value) native "VTTRegion_id_Setter";
 
-  static $regionAnchorX_Getter(mthis) native "VTTRegion_regionAnchorX_Getter";
+  static regionAnchorX_Getter(mthis) native "VTTRegion_regionAnchorX_Getter";
 
-  static $regionAnchorX_Setter(mthis, value) native "VTTRegion_regionAnchorX_Setter";
+  static regionAnchorX_Setter_double(mthis, value) native "VTTRegion_regionAnchorX_Setter";
 
-  static $regionAnchorY_Getter(mthis) native "VTTRegion_regionAnchorY_Getter";
+  static regionAnchorY_Getter(mthis) native "VTTRegion_regionAnchorY_Getter";
 
-  static $regionAnchorY_Setter(mthis, value) native "VTTRegion_regionAnchorY_Setter";
+  static regionAnchorY_Setter_double(mthis, value) native "VTTRegion_regionAnchorY_Setter";
 
-  static $scroll_Getter(mthis) native "VTTRegion_scroll_Getter";
+  static scroll_Getter(mthis) native "VTTRegion_scroll_Getter";
 
-  static $scroll_Setter(mthis, value) native "VTTRegion_scroll_Setter";
+  static scroll_Setter_DOMString(mthis, value) native "VTTRegion_scroll_Setter";
 
-  static $track_Getter(mthis) native "VTTRegion_track_Getter";
+  static track_Getter(mthis) native "VTTRegion_track_Getter";
 
-  static $viewportAnchorX_Getter(mthis) native "VTTRegion_viewportAnchorX_Getter";
+  static viewportAnchorX_Getter(mthis) native "VTTRegion_viewportAnchorX_Getter";
 
-  static $viewportAnchorX_Setter(mthis, value) native "VTTRegion_viewportAnchorX_Setter";
+  static viewportAnchorX_Setter_double(mthis, value) native "VTTRegion_viewportAnchorX_Setter";
 
-  static $viewportAnchorY_Getter(mthis) native "VTTRegion_viewportAnchorY_Getter";
+  static viewportAnchorY_Getter(mthis) native "VTTRegion_viewportAnchorY_Getter";
 
-  static $viewportAnchorY_Setter(mthis, value) native "VTTRegion_viewportAnchorY_Setter";
+  static viewportAnchorY_Setter_double(mthis, value) native "VTTRegion_viewportAnchorY_Setter";
 
-  static $width_Getter(mthis) native "VTTRegion_width_Getter";
+  static width_Getter(mthis) native "VTTRegion_width_Getter";
 
-  static $width_Setter(mthis, value) native "VTTRegion_width_Setter";
+  static width_Setter_double(mthis, value) native "VTTRegion_width_Setter";
 }
 
 class BlinkVTTRegionList {
-  static $length_Getter(mthis) native "VTTRegionList_length_Getter";
+  static length_Getter(mthis) native "VTTRegionList_length_Getter";
 
-  static $getRegionById_Callback(mthis, id) native "VTTRegionList_getRegionById_Callback_RESOLVER_STRING_1_DOMString";
+  static getRegionById_Callback_DOMString(mthis, id) native "VTTRegionList_getRegionById_Callback_DOMString";
 
-  static $item_Callback(mthis, index) native "VTTRegionList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "VTTRegionList_item_Callback_unsigned long";
 }
 
 class BlinkValidityState {
-  static $badInput_Getter(mthis) native "ValidityState_badInput_Getter";
+  static badInput_Getter(mthis) native "ValidityState_badInput_Getter";
 
-  static $customError_Getter(mthis) native "ValidityState_customError_Getter";
+  static customError_Getter(mthis) native "ValidityState_customError_Getter";
 
-  static $patternMismatch_Getter(mthis) native "ValidityState_patternMismatch_Getter";
+  static patternMismatch_Getter(mthis) native "ValidityState_patternMismatch_Getter";
 
-  static $rangeOverflow_Getter(mthis) native "ValidityState_rangeOverflow_Getter";
+  static rangeOverflow_Getter(mthis) native "ValidityState_rangeOverflow_Getter";
 
-  static $rangeUnderflow_Getter(mthis) native "ValidityState_rangeUnderflow_Getter";
+  static rangeUnderflow_Getter(mthis) native "ValidityState_rangeUnderflow_Getter";
 
-  static $stepMismatch_Getter(mthis) native "ValidityState_stepMismatch_Getter";
+  static stepMismatch_Getter(mthis) native "ValidityState_stepMismatch_Getter";
 
-  static $tooLong_Getter(mthis) native "ValidityState_tooLong_Getter";
+  static tooLong_Getter(mthis) native "ValidityState_tooLong_Getter";
 
-  static $typeMismatch_Getter(mthis) native "ValidityState_typeMismatch_Getter";
+  static typeMismatch_Getter(mthis) native "ValidityState_typeMismatch_Getter";
 
-  static $valid_Getter(mthis) native "ValidityState_valid_Getter";
+  static valid_Getter(mthis) native "ValidityState_valid_Getter";
 
-  static $valueMissing_Getter(mthis) native "ValidityState_valueMissing_Getter";
+  static valueMissing_Getter(mthis) native "ValidityState_valueMissing_Getter";
 }
 
 class BlinkVideoPlaybackQuality {
-  static $corruptedVideoFrames_Getter(mthis) native "VideoPlaybackQuality_corruptedVideoFrames_Getter";
+  static corruptedVideoFrames_Getter(mthis) native "VideoPlaybackQuality_corruptedVideoFrames_Getter";
 
-  static $creationTime_Getter(mthis) native "VideoPlaybackQuality_creationTime_Getter";
+  static creationTime_Getter(mthis) native "VideoPlaybackQuality_creationTime_Getter";
 
-  static $droppedVideoFrames_Getter(mthis) native "VideoPlaybackQuality_droppedVideoFrames_Getter";
+  static droppedVideoFrames_Getter(mthis) native "VideoPlaybackQuality_droppedVideoFrames_Getter";
 
-  static $totalVideoFrames_Getter(mthis) native "VideoPlaybackQuality_totalVideoFrames_Getter";
+  static totalVideoFrames_Getter(mthis) native "VideoPlaybackQuality_totalVideoFrames_Getter";
 }
 
 class BlinkWaveShaperNode {
-  static $curve_Getter(mthis) native "WaveShaperNode_curve_Getter";
+  static curve_Getter(mthis) native "WaveShaperNode_curve_Getter";
 
-  static $curve_Setter(mthis, value) native "WaveShaperNode_curve_Setter";
+  static curve_Setter_Float32Array(mthis, value) native "WaveShaperNode_curve_Setter";
 
-  static $oversample_Getter(mthis) native "WaveShaperNode_oversample_Getter";
+  static oversample_Getter(mthis) native "WaveShaperNode_oversample_Getter";
 
-  static $oversample_Setter(mthis, value) native "WaveShaperNode_oversample_Setter";
+  static oversample_Setter_DOMString(mthis, value) native "WaveShaperNode_oversample_Setter";
 }
 
 class BlinkWebGLActiveInfo {
-  static $name_Getter(mthis) native "WebGLActiveInfo_name_Getter";
+  static name_Getter(mthis) native "WebGLActiveInfo_name_Getter";
 
-  static $size_Getter(mthis) native "WebGLActiveInfo_size_Getter";
+  static size_Getter(mthis) native "WebGLActiveInfo_size_Getter";
 
-  static $type_Getter(mthis) native "WebGLActiveInfo_type_Getter";
+  static type_Getter(mthis) native "WebGLActiveInfo_type_Getter";
 }
 
 class BlinkWebGLBuffer {}
@@ -7505,57 +7439,57 @@
 class BlinkWebGLCompressedTextureS3TC {}
 
 class BlinkWebGLContextAttributes {
-  static $alpha_Getter(mthis) native "WebGLContextAttributes_alpha_Getter";
+  static alpha_Getter(mthis) native "WebGLContextAttributes_alpha_Getter";
 
-  static $alpha_Setter(mthis, value) native "WebGLContextAttributes_alpha_Setter";
+  static alpha_Setter_boolean(mthis, value) native "WebGLContextAttributes_alpha_Setter";
 
-  static $antialias_Getter(mthis) native "WebGLContextAttributes_antialias_Getter";
+  static antialias_Getter(mthis) native "WebGLContextAttributes_antialias_Getter";
 
-  static $antialias_Setter(mthis, value) native "WebGLContextAttributes_antialias_Setter";
+  static antialias_Setter_boolean(mthis, value) native "WebGLContextAttributes_antialias_Setter";
 
-  static $depth_Getter(mthis) native "WebGLContextAttributes_depth_Getter";
+  static depth_Getter(mthis) native "WebGLContextAttributes_depth_Getter";
 
-  static $depth_Setter(mthis, value) native "WebGLContextAttributes_depth_Setter";
+  static depth_Setter_boolean(mthis, value) native "WebGLContextAttributes_depth_Setter";
 
-  static $failIfMajorPerformanceCaveat_Getter(mthis) native "WebGLContextAttributes_failIfMajorPerformanceCaveat_Getter";
+  static failIfMajorPerformanceCaveat_Getter(mthis) native "WebGLContextAttributes_failIfMajorPerformanceCaveat_Getter";
 
-  static $failIfMajorPerformanceCaveat_Setter(mthis, value) native "WebGLContextAttributes_failIfMajorPerformanceCaveat_Setter";
+  static failIfMajorPerformanceCaveat_Setter_boolean(mthis, value) native "WebGLContextAttributes_failIfMajorPerformanceCaveat_Setter";
 
-  static $premultipliedAlpha_Getter(mthis) native "WebGLContextAttributes_premultipliedAlpha_Getter";
+  static premultipliedAlpha_Getter(mthis) native "WebGLContextAttributes_premultipliedAlpha_Getter";
 
-  static $premultipliedAlpha_Setter(mthis, value) native "WebGLContextAttributes_premultipliedAlpha_Setter";
+  static premultipliedAlpha_Setter_boolean(mthis, value) native "WebGLContextAttributes_premultipliedAlpha_Setter";
 
-  static $preserveDrawingBuffer_Getter(mthis) native "WebGLContextAttributes_preserveDrawingBuffer_Getter";
+  static preserveDrawingBuffer_Getter(mthis) native "WebGLContextAttributes_preserveDrawingBuffer_Getter";
 
-  static $preserveDrawingBuffer_Setter(mthis, value) native "WebGLContextAttributes_preserveDrawingBuffer_Setter";
+  static preserveDrawingBuffer_Setter_boolean(mthis, value) native "WebGLContextAttributes_preserveDrawingBuffer_Setter";
 
-  static $stencil_Getter(mthis) native "WebGLContextAttributes_stencil_Getter";
+  static stencil_Getter(mthis) native "WebGLContextAttributes_stencil_Getter";
 
-  static $stencil_Setter(mthis, value) native "WebGLContextAttributes_stencil_Setter";
+  static stencil_Setter_boolean(mthis, value) native "WebGLContextAttributes_stencil_Setter";
 }
 
 class BlinkWebGLContextEvent {
-  static $statusMessage_Getter(mthis) native "WebGLContextEvent_statusMessage_Getter";
+  static statusMessage_Getter(mthis) native "WebGLContextEvent_statusMessage_Getter";
 }
 
 class BlinkWebGLDebugRendererInfo {}
 
 class BlinkWebGLDebugShaders {
-  static $getTranslatedShaderSource_Callback(mthis, shader) native "WebGLDebugShaders_getTranslatedShaderSource_Callback_RESOLVER_STRING_1_WebGLShader";
+  static getTranslatedShaderSource_Callback_WebGLShader(mthis, shader) native "WebGLDebugShaders_getTranslatedShaderSource_Callback_WebGLShader";
 }
 
 class BlinkWebGLDepthTexture {}
 
 class BlinkWebGLDrawBuffers {
-  static $drawBuffersWEBGL_Callback(mthis, buffers) native "WebGLDrawBuffers_drawBuffersWEBGL_Callback_RESOLVER_STRING_1_sequence<unsigned long>";
+  static drawBuffersWEBGL_Callback_SEQ_GLenum_SEQ(mthis, buffers) native "WebGLDrawBuffers_drawBuffersWEBGL_Callback_sequence<unsigned long>";
 }
 
 class BlinkWebGLFramebuffer {}
 
 class BlinkWebGLLoseContext {
-  static $loseContext_Callback(mthis) native "WebGLLoseContext_loseContext_Callback_RESOLVER_STRING_0_";
+  static loseContext_Callback(mthis) native "WebGLLoseContext_loseContext_Callback";
 
-  static $restoreContext_Callback(mthis) native "WebGLLoseContext_restoreContext_Callback_RESOLVER_STRING_0_";
+  static restoreContext_Callback(mthis) native "WebGLLoseContext_restoreContext_Callback";
 }
 
 class BlinkWebGLProgram {}
@@ -7563,337 +7497,313 @@
 class BlinkWebGLRenderbuffer {}
 
 class BlinkWebGLRenderingContext {
-  static $drawingBufferHeight_Getter(mthis) native "WebGLRenderingContext_drawingBufferHeight_Getter";
+  static drawingBufferHeight_Getter(mthis) native "WebGLRenderingContext_drawingBufferHeight_Getter";
 
-  static $drawingBufferWidth_Getter(mthis) native "WebGLRenderingContext_drawingBufferWidth_Getter";
+  static drawingBufferWidth_Getter(mthis) native "WebGLRenderingContext_drawingBufferWidth_Getter";
 
-  static $activeTexture_Callback(mthis, texture) native "WebGLRenderingContext_activeTexture_Callback_RESOLVER_STRING_1_unsigned long";
+  static activeTexture_Callback_ul(mthis, texture) native "WebGLRenderingContext_activeTexture_Callback_unsigned long";
 
-  static $attachShader_Callback(mthis, program, shader) native "WebGLRenderingContext_attachShader_Callback_RESOLVER_STRING_2_WebGLProgram_WebGLShader";
+  static attachShader_Callback_WebGLProgram_WebGLShader(mthis, program, shader) native "WebGLRenderingContext_attachShader_Callback_WebGLProgram_WebGLShader";
 
-  static $bindAttribLocation_Callback(mthis, program, index, name) native "WebGLRenderingContext_bindAttribLocation_Callback_RESOLVER_STRING_3_WebGLProgram_unsigned long_DOMString";
+  static bindAttribLocation_Callback_WebGLProgram_ul_DOMString(mthis, program, index, name) native "WebGLRenderingContext_bindAttribLocation_Callback_WebGLProgram_unsigned long_DOMString";
 
-  static $bindBuffer_Callback(mthis, target, buffer) native "WebGLRenderingContext_bindBuffer_Callback_RESOLVER_STRING_2_unsigned long_WebGLBuffer";
+  static bindBuffer_Callback_ul_WebGLBuffer(mthis, target, buffer) native "WebGLRenderingContext_bindBuffer_Callback_unsigned long_WebGLBuffer";
 
-  static $bindFramebuffer_Callback(mthis, target, framebuffer) native "WebGLRenderingContext_bindFramebuffer_Callback_RESOLVER_STRING_2_unsigned long_WebGLFramebuffer";
+  static bindFramebuffer_Callback_ul_WebGLFramebuffer(mthis, target, framebuffer) native "WebGLRenderingContext_bindFramebuffer_Callback_unsigned long_WebGLFramebuffer";
 
-  static $bindRenderbuffer_Callback(mthis, target, renderbuffer) native "WebGLRenderingContext_bindRenderbuffer_Callback_RESOLVER_STRING_2_unsigned long_WebGLRenderbuffer";
+  static bindRenderbuffer_Callback_ul_WebGLRenderbuffer(mthis, target, renderbuffer) native "WebGLRenderingContext_bindRenderbuffer_Callback_unsigned long_WebGLRenderbuffer";
 
-  static $bindTexture_Callback(mthis, target, texture) native "WebGLRenderingContext_bindTexture_Callback_RESOLVER_STRING_2_unsigned long_WebGLTexture";
+  static bindTexture_Callback_ul_WebGLTexture(mthis, target, texture) native "WebGLRenderingContext_bindTexture_Callback_unsigned long_WebGLTexture";
 
-  static $blendColor_Callback(mthis, red, green, blue, alpha) native "WebGLRenderingContext_blendColor_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static blendColor_Callback_float_float_float_float(mthis, red, green, blue, alpha) native "WebGLRenderingContext_blendColor_Callback_float_float_float_float";
 
-  static $blendEquation_Callback(mthis, mode) native "WebGLRenderingContext_blendEquation_Callback_RESOLVER_STRING_1_unsigned long";
+  static blendEquation_Callback_ul(mthis, mode) native "WebGLRenderingContext_blendEquation_Callback_unsigned long";
 
-  static $blendEquationSeparate_Callback(mthis, modeRGB, modeAlpha) native "WebGLRenderingContext_blendEquationSeparate_Callback_RESOLVER_STRING_2_unsigned long_unsigned long";
+  static blendEquationSeparate_Callback_ul_ul(mthis, modeRGB, modeAlpha) native "WebGLRenderingContext_blendEquationSeparate_Callback_unsigned long_unsigned long";
 
-  static $blendFunc_Callback(mthis, sfactor, dfactor) native "WebGLRenderingContext_blendFunc_Callback_RESOLVER_STRING_2_unsigned long_unsigned long";
+  static blendFunc_Callback_ul_ul(mthis, sfactor, dfactor) native "WebGLRenderingContext_blendFunc_Callback_unsigned long_unsigned long";
 
-  static $blendFuncSeparate_Callback(mthis, srcRGB, dstRGB, srcAlpha, dstAlpha) native "WebGLRenderingContext_blendFuncSeparate_Callback_RESOLVER_STRING_4_unsigned long_unsigned long_unsigned long_unsigned long";
+  static blendFuncSeparate_Callback_ul_ul_ul_ul(mthis, srcRGB, dstRGB, srcAlpha, dstAlpha) native "WebGLRenderingContext_blendFuncSeparate_Callback_unsigned long_unsigned long_unsigned long_unsigned long";
 
-  static $bufferByteData_Callback(mthis, target, data, usage) native "WebGLRenderingContext_bufferData_Callback_RESOLVER_STRING_3_unsigned long_ArrayBuffer_unsigned long";
+  static bufferData_Callback_ul_ArrayBuffer_ul(mthis, target, data, usage) native "WebGLRenderingContext_bufferData_Callback_unsigned long_ArrayBuffer_unsigned long";
 
-  static $_bufferData_1_Callback(mthis, target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_Callback_RESOLVER_STRING_3_unsigned long_ArrayBufferView_unsigned long";
+  static bufferData_Callback_ul_ArrayBufferView_ul(mthis, target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_Callback_unsigned long_ArrayBufferView_unsigned long";
 
-  static $_bufferData_2_Callback(mthis, target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_Callback_RESOLVER_STRING_3_unsigned long_ArrayBuffer_unsigned long";
+  static bufferData_Callback_ul_ll_ul(mthis, target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_Callback_unsigned long_long long_unsigned long";
 
-  static $_bufferData_3_Callback(mthis, target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_Callback_RESOLVER_STRING_3_unsigned long_long long_unsigned long";
+  static bufferSubData_Callback_ul_ll_ArrayBuffer(mthis, target, offset, data) native "WebGLRenderingContext_bufferSubData_Callback_unsigned long_long long_ArrayBuffer";
 
-  static $bufferDataTyped_Callback(mthis, target, data, usage) native "WebGLRenderingContext_bufferData_Callback_RESOLVER_STRING_3_unsigned long_ArrayBufferView_unsigned long";
+  static bufferSubData_Callback_ul_ll_ArrayBufferView(mthis, target, offset, data) native "WebGLRenderingContext_bufferSubData_Callback_unsigned long_long long_ArrayBufferView";
 
-  static $bufferSubByteData_Callback(mthis, target, offset, data) native "WebGLRenderingContext_bufferSubData_Callback_RESOLVER_STRING_3_unsigned long_long long_ArrayBuffer";
+  static checkFramebufferStatus_Callback_ul(mthis, target) native "WebGLRenderingContext_checkFramebufferStatus_Callback_unsigned long";
 
-  static $_bufferSubData_1_Callback(mthis, target, offset, data) native "WebGLRenderingContext_bufferSubData_Callback_RESOLVER_STRING_3_unsigned long_long long_ArrayBufferView";
+  static clear_Callback_ul(mthis, mask) native "WebGLRenderingContext_clear_Callback_unsigned long";
 
-  static $_bufferSubData_2_Callback(mthis, target, offset, data) native "WebGLRenderingContext_bufferSubData_Callback_RESOLVER_STRING_3_unsigned long_long long_ArrayBuffer";
+  static clearColor_Callback_float_float_float_float(mthis, red, green, blue, alpha) native "WebGLRenderingContext_clearColor_Callback_float_float_float_float";
 
-  static $bufferSubDataTyped_Callback(mthis, target, offset, data) native "WebGLRenderingContext_bufferSubData_Callback_RESOLVER_STRING_3_unsigned long_long long_ArrayBufferView";
+  static clearDepth_Callback_float(mthis, depth) native "WebGLRenderingContext_clearDepth_Callback_float";
 
-  static $checkFramebufferStatus_Callback(mthis, target) native "WebGLRenderingContext_checkFramebufferStatus_Callback_RESOLVER_STRING_1_unsigned long";
+  static clearStencil_Callback_long(mthis, s) native "WebGLRenderingContext_clearStencil_Callback_long";
 
-  static $clear_Callback(mthis, mask) native "WebGLRenderingContext_clear_Callback_RESOLVER_STRING_1_unsigned long";
+  static colorMask_Callback_boolean_boolean_boolean_boolean(mthis, red, green, blue, alpha) native "WebGLRenderingContext_colorMask_Callback_boolean_boolean_boolean_boolean";
 
-  static $clearColor_Callback(mthis, red, green, blue, alpha) native "WebGLRenderingContext_clearColor_Callback_RESOLVER_STRING_4_float_float_float_float";
+  static compileShader_Callback_WebGLShader(mthis, shader) native "WebGLRenderingContext_compileShader_Callback_WebGLShader";
 
-  static $clearDepth_Callback(mthis, depth) native "WebGLRenderingContext_clearDepth_Callback_RESOLVER_STRING_1_float";
+  static compressedTexImage2D_Callback_ul_long_ul_long_long_long_ArrayBufferView(mthis, target, level, internalformat, width, height, border, data) native "WebGLRenderingContext_compressedTexImage2D_Callback_unsigned long_long_unsigned long_long_long_long_ArrayBufferView";
 
-  static $clearStencil_Callback(mthis, s) native "WebGLRenderingContext_clearStencil_Callback_RESOLVER_STRING_1_long";
+  static compressedTexSubImage2D_Callback_ul_long_long_long_long_long_ul_ArrayBufferView(mthis, target, level, xoffset, yoffset, width, height, format, data) native "WebGLRenderingContext_compressedTexSubImage2D_Callback_unsigned long_long_long_long_long_long_unsigned long_ArrayBufferView";
 
-  static $colorMask_Callback(mthis, red, green, blue, alpha) native "WebGLRenderingContext_colorMask_Callback_RESOLVER_STRING_4_boolean_boolean_boolean_boolean";
+  static copyTexImage2D_Callback_ul_long_ul_long_long_long_long_long(mthis, target, level, internalformat, x, y, width, height, border) native "WebGLRenderingContext_copyTexImage2D_Callback_unsigned long_long_unsigned long_long_long_long_long_long";
 
-  static $compileShader_Callback(mthis, shader) native "WebGLRenderingContext_compileShader_Callback_RESOLVER_STRING_1_WebGLShader";
+  static copyTexSubImage2D_Callback_ul_long_long_long_long_long_long_long(mthis, target, level, xoffset, yoffset, x, y, width, height) native "WebGLRenderingContext_copyTexSubImage2D_Callback_unsigned long_long_long_long_long_long_long_long";
 
-  static $compressedTexImage2D_Callback(mthis, target, level, internalformat, width, height, border, data) native "WebGLRenderingContext_compressedTexImage2D_Callback_RESOLVER_STRING_7_unsigned long_long_unsigned long_long_long_long_ArrayBufferView";
+  static createBuffer_Callback(mthis) native "WebGLRenderingContext_createBuffer_Callback";
 
-  static $compressedTexSubImage2D_Callback(mthis, target, level, xoffset, yoffset, width, height, format, data) native "WebGLRenderingContext_compressedTexSubImage2D_Callback_RESOLVER_STRING_8_unsigned long_long_long_long_long_long_unsigned long_ArrayBufferView";
+  static createFramebuffer_Callback(mthis) native "WebGLRenderingContext_createFramebuffer_Callback";
 
-  static $copyTexImage2D_Callback(mthis, target, level, internalformat, x, y, width, height, border) native "WebGLRenderingContext_copyTexImage2D_Callback_RESOLVER_STRING_8_unsigned long_long_unsigned long_long_long_long_long_long";
+  static createProgram_Callback(mthis) native "WebGLRenderingContext_createProgram_Callback";
 
-  static $copyTexSubImage2D_Callback(mthis, target, level, xoffset, yoffset, x, y, width, height) native "WebGLRenderingContext_copyTexSubImage2D_Callback_RESOLVER_STRING_8_unsigned long_long_long_long_long_long_long_long";
+  static createRenderbuffer_Callback(mthis) native "WebGLRenderingContext_createRenderbuffer_Callback";
 
-  static $createBuffer_Callback(mthis) native "WebGLRenderingContext_createBuffer_Callback_RESOLVER_STRING_0_";
+  static createShader_Callback_ul(mthis, type) native "WebGLRenderingContext_createShader_Callback_unsigned long";
 
-  static $createFramebuffer_Callback(mthis) native "WebGLRenderingContext_createFramebuffer_Callback_RESOLVER_STRING_0_";
+  static createTexture_Callback(mthis) native "WebGLRenderingContext_createTexture_Callback";
 
-  static $createProgram_Callback(mthis) native "WebGLRenderingContext_createProgram_Callback_RESOLVER_STRING_0_";
+  static cullFace_Callback_ul(mthis, mode) native "WebGLRenderingContext_cullFace_Callback_unsigned long";
 
-  static $createRenderbuffer_Callback(mthis) native "WebGLRenderingContext_createRenderbuffer_Callback_RESOLVER_STRING_0_";
+  static deleteBuffer_Callback_WebGLBuffer(mthis, buffer) native "WebGLRenderingContext_deleteBuffer_Callback_WebGLBuffer";
 
-  static $createShader_Callback(mthis, type) native "WebGLRenderingContext_createShader_Callback_RESOLVER_STRING_1_unsigned long";
+  static deleteFramebuffer_Callback_WebGLFramebuffer(mthis, framebuffer) native "WebGLRenderingContext_deleteFramebuffer_Callback_WebGLFramebuffer";
 
-  static $createTexture_Callback(mthis) native "WebGLRenderingContext_createTexture_Callback_RESOLVER_STRING_0_";
+  static deleteProgram_Callback_WebGLProgram(mthis, program) native "WebGLRenderingContext_deleteProgram_Callback_WebGLProgram";
 
-  static $cullFace_Callback(mthis, mode) native "WebGLRenderingContext_cullFace_Callback_RESOLVER_STRING_1_unsigned long";
+  static deleteRenderbuffer_Callback_WebGLRenderbuffer(mthis, renderbuffer) native "WebGLRenderingContext_deleteRenderbuffer_Callback_WebGLRenderbuffer";
 
-  static $deleteBuffer_Callback(mthis, buffer) native "WebGLRenderingContext_deleteBuffer_Callback_RESOLVER_STRING_1_WebGLBuffer";
+  static deleteShader_Callback_WebGLShader(mthis, shader) native "WebGLRenderingContext_deleteShader_Callback_WebGLShader";
 
-  static $deleteFramebuffer_Callback(mthis, framebuffer) native "WebGLRenderingContext_deleteFramebuffer_Callback_RESOLVER_STRING_1_WebGLFramebuffer";
+  static deleteTexture_Callback_WebGLTexture(mthis, texture) native "WebGLRenderingContext_deleteTexture_Callback_WebGLTexture";
 
-  static $deleteProgram_Callback(mthis, program) native "WebGLRenderingContext_deleteProgram_Callback_RESOLVER_STRING_1_WebGLProgram";
+  static depthFunc_Callback_ul(mthis, func) native "WebGLRenderingContext_depthFunc_Callback_unsigned long";
 
-  static $deleteRenderbuffer_Callback(mthis, renderbuffer) native "WebGLRenderingContext_deleteRenderbuffer_Callback_RESOLVER_STRING_1_WebGLRenderbuffer";
+  static depthMask_Callback_boolean(mthis, flag) native "WebGLRenderingContext_depthMask_Callback_boolean";
 
-  static $deleteShader_Callback(mthis, shader) native "WebGLRenderingContext_deleteShader_Callback_RESOLVER_STRING_1_WebGLShader";
+  static depthRange_Callback_float_float(mthis, zNear, zFar) native "WebGLRenderingContext_depthRange_Callback_float_float";
 
-  static $deleteTexture_Callback(mthis, texture) native "WebGLRenderingContext_deleteTexture_Callback_RESOLVER_STRING_1_WebGLTexture";
+  static detachShader_Callback_WebGLProgram_WebGLShader(mthis, program, shader) native "WebGLRenderingContext_detachShader_Callback_WebGLProgram_WebGLShader";
 
-  static $depthFunc_Callback(mthis, func) native "WebGLRenderingContext_depthFunc_Callback_RESOLVER_STRING_1_unsigned long";
+  static disable_Callback_ul(mthis, cap) native "WebGLRenderingContext_disable_Callback_unsigned long";
 
-  static $depthMask_Callback(mthis, flag) native "WebGLRenderingContext_depthMask_Callback_RESOLVER_STRING_1_boolean";
+  static disableVertexAttribArray_Callback_ul(mthis, index) native "WebGLRenderingContext_disableVertexAttribArray_Callback_unsigned long";
 
-  static $depthRange_Callback(mthis, zNear, zFar) native "WebGLRenderingContext_depthRange_Callback_RESOLVER_STRING_2_float_float";
+  static drawArrays_Callback_ul_long_long(mthis, mode, first, count) native "WebGLRenderingContext_drawArrays_Callback_unsigned long_long_long";
 
-  static $detachShader_Callback(mthis, program, shader) native "WebGLRenderingContext_detachShader_Callback_RESOLVER_STRING_2_WebGLProgram_WebGLShader";
+  static drawElements_Callback_ul_long_ul_ll(mthis, mode, count, type, offset) native "WebGLRenderingContext_drawElements_Callback_unsigned long_long_unsigned long_long long";
 
-  static $disable_Callback(mthis, cap) native "WebGLRenderingContext_disable_Callback_RESOLVER_STRING_1_unsigned long";
+  static enable_Callback_ul(mthis, cap) native "WebGLRenderingContext_enable_Callback_unsigned long";
 
-  static $disableVertexAttribArray_Callback(mthis, index) native "WebGLRenderingContext_disableVertexAttribArray_Callback_RESOLVER_STRING_1_unsigned long";
+  static enableVertexAttribArray_Callback_ul(mthis, index) native "WebGLRenderingContext_enableVertexAttribArray_Callback_unsigned long";
 
-  static $drawArrays_Callback(mthis, mode, first, count) native "WebGLRenderingContext_drawArrays_Callback_RESOLVER_STRING_3_unsigned long_long_long";
+  static finish_Callback(mthis) native "WebGLRenderingContext_finish_Callback";
 
-  static $drawElements_Callback(mthis, mode, count, type, offset) native "WebGLRenderingContext_drawElements_Callback_RESOLVER_STRING_4_unsigned long_long_unsigned long_long long";
+  static flush_Callback(mthis) native "WebGLRenderingContext_flush_Callback";
 
-  static $enable_Callback(mthis, cap) native "WebGLRenderingContext_enable_Callback_RESOLVER_STRING_1_unsigned long";
+  static framebufferRenderbuffer_Callback_ul_ul_ul_WebGLRenderbuffer(mthis, target, attachment, renderbuffertarget, renderbuffer) native "WebGLRenderingContext_framebufferRenderbuffer_Callback_unsigned long_unsigned long_unsigned long_WebGLRenderbuffer";
 
-  static $enableVertexAttribArray_Callback(mthis, index) native "WebGLRenderingContext_enableVertexAttribArray_Callback_RESOLVER_STRING_1_unsigned long";
+  static framebufferTexture2D_Callback_ul_ul_ul_WebGLTexture_long(mthis, target, attachment, textarget, texture, level) native "WebGLRenderingContext_framebufferTexture2D_Callback_unsigned long_unsigned long_unsigned long_WebGLTexture_long";
 
-  static $finish_Callback(mthis) native "WebGLRenderingContext_finish_Callback_RESOLVER_STRING_0_";
+  static frontFace_Callback_ul(mthis, mode) native "WebGLRenderingContext_frontFace_Callback_unsigned long";
 
-  static $flush_Callback(mthis) native "WebGLRenderingContext_flush_Callback_RESOLVER_STRING_0_";
+  static generateMipmap_Callback_ul(mthis, target) native "WebGLRenderingContext_generateMipmap_Callback_unsigned long";
 
-  static $framebufferRenderbuffer_Callback(mthis, target, attachment, renderbuffertarget, renderbuffer) native "WebGLRenderingContext_framebufferRenderbuffer_Callback_RESOLVER_STRING_4_unsigned long_unsigned long_unsigned long_WebGLRenderbuffer";
+  static getActiveAttrib_Callback_WebGLProgram_ul(mthis, program, index) native "WebGLRenderingContext_getActiveAttrib_Callback_WebGLProgram_unsigned long";
 
-  static $framebufferTexture2D_Callback(mthis, target, attachment, textarget, texture, level) native "WebGLRenderingContext_framebufferTexture2D_Callback_RESOLVER_STRING_5_unsigned long_unsigned long_unsigned long_WebGLTexture_long";
+  static getActiveUniform_Callback_WebGLProgram_ul(mthis, program, index) native "WebGLRenderingContext_getActiveUniform_Callback_WebGLProgram_unsigned long";
 
-  static $frontFace_Callback(mthis, mode) native "WebGLRenderingContext_frontFace_Callback_RESOLVER_STRING_1_unsigned long";
+  static getAttachedShaders_Callback_WebGLProgram(mthis, program) native "WebGLRenderingContext_getAttachedShaders_Callback";
 
-  static $generateMipmap_Callback(mthis, target) native "WebGLRenderingContext_generateMipmap_Callback_RESOLVER_STRING_1_unsigned long";
+  static getAttribLocation_Callback_WebGLProgram_DOMString(mthis, program, name) native "WebGLRenderingContext_getAttribLocation_Callback_WebGLProgram_DOMString";
 
-  static $getActiveAttrib_Callback(mthis, program, index) native "WebGLRenderingContext_getActiveAttrib_Callback_RESOLVER_STRING_2_WebGLProgram_unsigned long";
+  static getBufferParameter_Callback_ul_ul(mthis, target, pname) native "WebGLRenderingContext_getBufferParameter_Callback";
 
-  static $getActiveUniform_Callback(mthis, program, index) native "WebGLRenderingContext_getActiveUniform_Callback_RESOLVER_STRING_2_WebGLProgram_unsigned long";
+  static getContextAttributes_Callback(mthis) native "WebGLRenderingContext_getContextAttributes_Callback";
 
-  static $getAttachedShaders_Callback(mthis, program) native "WebGLRenderingContext_getAttachedShaders_Callback";
+  static getError_Callback(mthis) native "WebGLRenderingContext_getError_Callback";
 
-  static $getAttribLocation_Callback(mthis, program, name) native "WebGLRenderingContext_getAttribLocation_Callback_RESOLVER_STRING_2_WebGLProgram_DOMString";
+  static getExtension_Callback_DOMString(mthis, name) native "WebGLRenderingContext_getExtension_Callback";
 
-  static $getBufferParameter_Callback(mthis, target, pname) native "WebGLRenderingContext_getBufferParameter_Callback";
+  static getFramebufferAttachmentParameter_Callback_ul_ul_ul(mthis, target, attachment, pname) native "WebGLRenderingContext_getFramebufferAttachmentParameter_Callback";
 
-  static $getContextAttributes_Callback(mthis) native "WebGLRenderingContext_getContextAttributes_Callback_RESOLVER_STRING_0_";
+  static getParameter_Callback_ul(mthis, pname) native "WebGLRenderingContext_getParameter_Callback";
 
-  static $getError_Callback(mthis) native "WebGLRenderingContext_getError_Callback_RESOLVER_STRING_0_";
+  static getProgramInfoLog_Callback_WebGLProgram(mthis, program) native "WebGLRenderingContext_getProgramInfoLog_Callback_WebGLProgram";
 
-  static $getExtension_Callback(mthis, name) native "WebGLRenderingContext_getExtension_Callback";
+  static getProgramParameter_Callback_WebGLProgram_ul(mthis, program, pname) native "WebGLRenderingContext_getProgramParameter_Callback";
 
-  static $getFramebufferAttachmentParameter_Callback(mthis, target, attachment, pname) native "WebGLRenderingContext_getFramebufferAttachmentParameter_Callback";
+  static getRenderbufferParameter_Callback_ul_ul(mthis, target, pname) native "WebGLRenderingContext_getRenderbufferParameter_Callback";
 
-  static $getParameter_Callback(mthis, pname) native "WebGLRenderingContext_getParameter_Callback";
+  static getShaderInfoLog_Callback_WebGLShader(mthis, shader) native "WebGLRenderingContext_getShaderInfoLog_Callback_WebGLShader";
 
-  static $getProgramInfoLog_Callback(mthis, program) native "WebGLRenderingContext_getProgramInfoLog_Callback_RESOLVER_STRING_1_WebGLProgram";
+  static getShaderParameter_Callback_WebGLShader_ul(mthis, shader, pname) native "WebGLRenderingContext_getShaderParameter_Callback";
 
-  static $getProgramParameter_Callback(mthis, program, pname) native "WebGLRenderingContext_getProgramParameter_Callback";
+  static getShaderPrecisionFormat_Callback_ul_ul(mthis, shadertype, precisiontype) native "WebGLRenderingContext_getShaderPrecisionFormat_Callback_unsigned long_unsigned long";
 
-  static $getRenderbufferParameter_Callback(mthis, target, pname) native "WebGLRenderingContext_getRenderbufferParameter_Callback";
+  static getShaderSource_Callback_WebGLShader(mthis, shader) native "WebGLRenderingContext_getShaderSource_Callback_WebGLShader";
 
-  static $getShaderInfoLog_Callback(mthis, shader) native "WebGLRenderingContext_getShaderInfoLog_Callback_RESOLVER_STRING_1_WebGLShader";
+  static getSupportedExtensions_Callback(mthis) native "WebGLRenderingContext_getSupportedExtensions_Callback";
 
-  static $getShaderParameter_Callback(mthis, shader, pname) native "WebGLRenderingContext_getShaderParameter_Callback";
+  static getTexParameter_Callback_ul_ul(mthis, target, pname) native "WebGLRenderingContext_getTexParameter_Callback";
 
-  static $getShaderPrecisionFormat_Callback(mthis, shadertype, precisiontype) native "WebGLRenderingContext_getShaderPrecisionFormat_Callback_RESOLVER_STRING_2_unsigned long_unsigned long";
+  static getUniform_Callback_WebGLProgram_WebGLUniformLocation(mthis, program, location) native "WebGLRenderingContext_getUniform_Callback";
 
-  static $getShaderSource_Callback(mthis, shader) native "WebGLRenderingContext_getShaderSource_Callback_RESOLVER_STRING_1_WebGLShader";
+  static getUniformLocation_Callback_WebGLProgram_DOMString(mthis, program, name) native "WebGLRenderingContext_getUniformLocation_Callback_WebGLProgram_DOMString";
 
-  static $getSupportedExtensions_Callback(mthis) native "WebGLRenderingContext_getSupportedExtensions_Callback";
-
-  static $getTexParameter_Callback(mthis, target, pname) native "WebGLRenderingContext_getTexParameter_Callback";
-
-  static $getUniform_Callback(mthis, program, location) native "WebGLRenderingContext_getUniform_Callback";
-
-  static $getUniformLocation_Callback(mthis, program, name) native "WebGLRenderingContext_getUniformLocation_Callback_RESOLVER_STRING_2_WebGLProgram_DOMString";
-
-  static $getVertexAttrib_Callback(mthis, index, pname) native "WebGLRenderingContext_getVertexAttrib_Callback";
-
-  static $getVertexAttribOffset_Callback(mthis, index, pname) native "WebGLRenderingContext_getVertexAttribOffset_Callback_RESOLVER_STRING_2_unsigned long_unsigned long";
-
-  static $hint_Callback(mthis, target, mode) native "WebGLRenderingContext_hint_Callback_RESOLVER_STRING_2_unsigned long_unsigned long";
-
-  static $isBuffer_Callback(mthis, buffer) native "WebGLRenderingContext_isBuffer_Callback_RESOLVER_STRING_1_WebGLBuffer";
-
-  static $isContextLost_Callback(mthis) native "WebGLRenderingContext_isContextLost_Callback_RESOLVER_STRING_0_";
-
-  static $isEnabled_Callback(mthis, cap) native "WebGLRenderingContext_isEnabled_Callback_RESOLVER_STRING_1_unsigned long";
-
-  static $isFramebuffer_Callback(mthis, framebuffer) native "WebGLRenderingContext_isFramebuffer_Callback_RESOLVER_STRING_1_WebGLFramebuffer";
-
-  static $isProgram_Callback(mthis, program) native "WebGLRenderingContext_isProgram_Callback_RESOLVER_STRING_1_WebGLProgram";
-
-  static $isRenderbuffer_Callback(mthis, renderbuffer) native "WebGLRenderingContext_isRenderbuffer_Callback_RESOLVER_STRING_1_WebGLRenderbuffer";
+  static getVertexAttrib_Callback_ul_ul(mthis, index, pname) native "WebGLRenderingContext_getVertexAttrib_Callback";
 
-  static $isShader_Callback(mthis, shader) native "WebGLRenderingContext_isShader_Callback_RESOLVER_STRING_1_WebGLShader";
+  static getVertexAttribOffset_Callback_ul_ul(mthis, index, pname) native "WebGLRenderingContext_getVertexAttribOffset_Callback_unsigned long_unsigned long";
 
-  static $isTexture_Callback(mthis, texture) native "WebGLRenderingContext_isTexture_Callback_RESOLVER_STRING_1_WebGLTexture";
+  static hint_Callback_ul_ul(mthis, target, mode) native "WebGLRenderingContext_hint_Callback_unsigned long_unsigned long";
 
-  static $lineWidth_Callback(mthis, width) native "WebGLRenderingContext_lineWidth_Callback_RESOLVER_STRING_1_float";
+  static isBuffer_Callback_WebGLBuffer(mthis, buffer) native "WebGLRenderingContext_isBuffer_Callback_WebGLBuffer";
 
-  static $linkProgram_Callback(mthis, program) native "WebGLRenderingContext_linkProgram_Callback_RESOLVER_STRING_1_WebGLProgram";
+  static isContextLost_Callback(mthis) native "WebGLRenderingContext_isContextLost_Callback";
 
-  static $pixelStorei_Callback(mthis, pname, param) native "WebGLRenderingContext_pixelStorei_Callback_RESOLVER_STRING_2_unsigned long_long";
+  static isEnabled_Callback_ul(mthis, cap) native "WebGLRenderingContext_isEnabled_Callback_unsigned long";
 
-  static $polygonOffset_Callback(mthis, factor, units) native "WebGLRenderingContext_polygonOffset_Callback_RESOLVER_STRING_2_float_float";
+  static isFramebuffer_Callback_WebGLFramebuffer(mthis, framebuffer) native "WebGLRenderingContext_isFramebuffer_Callback_WebGLFramebuffer";
 
-  static $readPixels_Callback(mthis, x, y, width, height, format, type, pixels) native "WebGLRenderingContext_readPixels_Callback_RESOLVER_STRING_7_long_long_long_long_unsigned long_unsigned long_ArrayBufferView";
+  static isProgram_Callback_WebGLProgram(mthis, program) native "WebGLRenderingContext_isProgram_Callback_WebGLProgram";
 
-  static $renderbufferStorage_Callback(mthis, target, internalformat, width, height) native "WebGLRenderingContext_renderbufferStorage_Callback_RESOLVER_STRING_4_unsigned long_unsigned long_long_long";
+  static isRenderbuffer_Callback_WebGLRenderbuffer(mthis, renderbuffer) native "WebGLRenderingContext_isRenderbuffer_Callback_WebGLRenderbuffer";
 
-  static $sampleCoverage_Callback(mthis, value, invert) native "WebGLRenderingContext_sampleCoverage_Callback_RESOLVER_STRING_2_float_boolean";
+  static isShader_Callback_WebGLShader(mthis, shader) native "WebGLRenderingContext_isShader_Callback_WebGLShader";
 
-  static $scissor_Callback(mthis, x, y, width, height) native "WebGLRenderingContext_scissor_Callback_RESOLVER_STRING_4_long_long_long_long";
+  static isTexture_Callback_WebGLTexture(mthis, texture) native "WebGLRenderingContext_isTexture_Callback_WebGLTexture";
 
-  static $shaderSource_Callback(mthis, shader, string) native "WebGLRenderingContext_shaderSource_Callback_RESOLVER_STRING_2_WebGLShader_DOMString";
+  static lineWidth_Callback_float(mthis, width) native "WebGLRenderingContext_lineWidth_Callback_float";
 
-  static $stencilFunc_Callback(mthis, func, ref, mask) native "WebGLRenderingContext_stencilFunc_Callback_RESOLVER_STRING_3_unsigned long_long_unsigned long";
+  static linkProgram_Callback_WebGLProgram(mthis, program) native "WebGLRenderingContext_linkProgram_Callback_WebGLProgram";
 
-  static $stencilFuncSeparate_Callback(mthis, face, func, ref, mask) native "WebGLRenderingContext_stencilFuncSeparate_Callback_RESOLVER_STRING_4_unsigned long_unsigned long_long_unsigned long";
+  static pixelStorei_Callback_ul_long(mthis, pname, param) native "WebGLRenderingContext_pixelStorei_Callback_unsigned long_long";
 
-  static $stencilMask_Callback(mthis, mask) native "WebGLRenderingContext_stencilMask_Callback_RESOLVER_STRING_1_unsigned long";
+  static polygonOffset_Callback_float_float(mthis, factor, units) native "WebGLRenderingContext_polygonOffset_Callback_float_float";
 
-  static $stencilMaskSeparate_Callback(mthis, face, mask) native "WebGLRenderingContext_stencilMaskSeparate_Callback_RESOLVER_STRING_2_unsigned long_unsigned long";
+  static readPixels_Callback_long_long_long_long_ul_ul_ArrayBufferView(mthis, x, y, width, height, format, type, pixels) native "WebGLRenderingContext_readPixels_Callback_long_long_long_long_unsigned long_unsigned long_ArrayBufferView";
 
-  static $stencilOp_Callback(mthis, fail, zfail, zpass) native "WebGLRenderingContext_stencilOp_Callback_RESOLVER_STRING_3_unsigned long_unsigned long_unsigned long";
+  static renderbufferStorage_Callback_ul_ul_long_long(mthis, target, internalformat, width, height) native "WebGLRenderingContext_renderbufferStorage_Callback_unsigned long_unsigned long_long_long";
 
-  static $stencilOpSeparate_Callback(mthis, face, fail, zfail, zpass) native "WebGLRenderingContext_stencilOpSeparate_Callback_RESOLVER_STRING_4_unsigned long_unsigned long_unsigned long_unsigned long";
+  static sampleCoverage_Callback_float_boolean(mthis, value, invert) native "WebGLRenderingContext_sampleCoverage_Callback_float_boolean";
 
-  static $_texImage2D_1_Callback(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels) native "WebGLRenderingContext_texImage2D_Callback_RESOLVER_STRING_9_unsigned long_long_unsigned long_long_long_long_unsigned long_unsigned long_ArrayBufferView";
+  static scissor_Callback_long_long_long_long(mthis, x, y, width, height) native "WebGLRenderingContext_scissor_Callback_long_long_long_long";
 
-  static $_texImage2D_2_Callback(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_Callback_RESOLVER_STRING_6_unsigned long_long_unsigned long_unsigned long_unsigned long_ImageData";
+  static shaderSource_Callback_WebGLShader_DOMString(mthis, shader, string) native "WebGLRenderingContext_shaderSource_Callback_WebGLShader_DOMString";
 
-  static $_texImage2D_3_Callback(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_Callback_RESOLVER_STRING_6_unsigned long_long_unsigned long_unsigned long_unsigned long_HTMLImageElement";
+  static stencilFunc_Callback_ul_long_ul(mthis, func, ref, mask) native "WebGLRenderingContext_stencilFunc_Callback_unsigned long_long_unsigned long";
 
-  static $_texImage2D_4_Callback(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_Callback_RESOLVER_STRING_6_unsigned long_long_unsigned long_unsigned long_unsigned long_HTMLCanvasElement";
+  static stencilFuncSeparate_Callback_ul_ul_long_ul(mthis, face, func, ref, mask) native "WebGLRenderingContext_stencilFuncSeparate_Callback_unsigned long_unsigned long_long_unsigned long";
 
-  static $_texImage2D_5_Callback(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_Callback_RESOLVER_STRING_6_unsigned long_long_unsigned long_unsigned long_unsigned long_HTMLVideoElement";
+  static stencilMask_Callback_ul(mthis, mask) native "WebGLRenderingContext_stencilMask_Callback_unsigned long";
 
-  static $texImage2DCanvas_Callback(mthis, target, level, internalformat, format, type, canvas) native "WebGLRenderingContext_texImage2D_Callback_RESOLVER_STRING_6_unsigned long_long_unsigned long_unsigned long_unsigned long_HTMLCanvasElement";
+  static stencilMaskSeparate_Callback_ul_ul(mthis, face, mask) native "WebGLRenderingContext_stencilMaskSeparate_Callback_unsigned long_unsigned long";
 
-  static $texImage2DImage_Callback(mthis, target, level, internalformat, format, type, image) native "WebGLRenderingContext_texImage2D_Callback_RESOLVER_STRING_6_unsigned long_long_unsigned long_unsigned long_unsigned long_HTMLImageElement";
+  static stencilOp_Callback_ul_ul_ul(mthis, fail, zfail, zpass) native "WebGLRenderingContext_stencilOp_Callback_unsigned long_unsigned long_unsigned long";
 
-  static $texImage2DImageData_Callback(mthis, target, level, internalformat, format, type, pixels) native "WebGLRenderingContext_texImage2D_Callback_RESOLVER_STRING_6_unsigned long_long_unsigned long_unsigned long_unsigned long_ImageData";
+  static stencilOpSeparate_Callback_ul_ul_ul_ul(mthis, face, fail, zfail, zpass) native "WebGLRenderingContext_stencilOpSeparate_Callback_unsigned long_unsigned long_unsigned long_unsigned long";
 
-  static $texImage2DVideo_Callback(mthis, target, level, internalformat, format, type, video) native "WebGLRenderingContext_texImage2D_Callback_RESOLVER_STRING_6_unsigned long_long_unsigned long_unsigned long_unsigned long_HTMLVideoElement";
+  static texImage2D_Callback_ul_long_ul_long_long_long_ul_ul_ArrayBufferView(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels) native "WebGLRenderingContext_texImage2D_Callback_unsigned long_long_unsigned long_long_long_long_unsigned long_unsigned long_ArrayBufferView";
 
-  static $texParameterf_Callback(mthis, target, pname, param) native "WebGLRenderingContext_texParameterf_Callback_RESOLVER_STRING_3_unsigned long_unsigned long_float";
+  static texImage2D_Callback_ul_long_ul_ul_ul_ImageData(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_Callback_unsigned long_long_unsigned long_unsigned long_unsigned long_ImageData";
 
-  static $texParameteri_Callback(mthis, target, pname, param) native "WebGLRenderingContext_texParameteri_Callback_RESOLVER_STRING_3_unsigned long_unsigned long_long";
+  static texImage2D_Callback_ul_long_ul_ul_ul_HTMLImageElement(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_Callback_unsigned long_long_unsigned long_unsigned long_unsigned long_HTMLImageElement";
 
-  static $_texSubImage2D_1_Callback(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels) native "WebGLRenderingContext_texSubImage2D_Callback_RESOLVER_STRING_9_unsigned long_long_long_long_long_long_unsigned long_unsigned long_ArrayBufferView";
+  static texImage2D_Callback_ul_long_ul_ul_ul_HTMLCanvasElement(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_Callback_unsigned long_long_unsigned long_unsigned long_unsigned long_HTMLCanvasElement";
 
-  static $_texSubImage2D_2_Callback(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_Callback_RESOLVER_STRING_7_unsigned long_long_long_long_unsigned long_unsigned long_ImageData";
+  static texImage2D_Callback_ul_long_ul_ul_ul_HTMLVideoElement(mthis, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_Callback_unsigned long_long_unsigned long_unsigned long_unsigned long_HTMLVideoElement";
 
-  static $_texSubImage2D_3_Callback(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_Callback_RESOLVER_STRING_7_unsigned long_long_long_long_unsigned long_unsigned long_HTMLImageElement";
+  static texParameterf_Callback_ul_ul_float(mthis, target, pname, param) native "WebGLRenderingContext_texParameterf_Callback_unsigned long_unsigned long_float";
 
-  static $_texSubImage2D_4_Callback(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_Callback_RESOLVER_STRING_7_unsigned long_long_long_long_unsigned long_unsigned long_HTMLCanvasElement";
+  static texParameteri_Callback_ul_ul_long(mthis, target, pname, param) native "WebGLRenderingContext_texParameteri_Callback_unsigned long_unsigned long_long";
 
-  static $_texSubImage2D_5_Callback(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_Callback_RESOLVER_STRING_7_unsigned long_long_long_long_unsigned long_unsigned long_HTMLVideoElement";
+  static texSubImage2D_Callback_ul_long_long_long_long_long_ul_ul_ArrayBufferView(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels) native "WebGLRenderingContext_texSubImage2D_Callback_unsigned long_long_long_long_long_long_unsigned long_unsigned long_ArrayBufferView";
 
-  static $texSubImage2DCanvas_Callback(mthis, target, level, xoffset, yoffset, format, type, canvas) native "WebGLRenderingContext_texSubImage2D_Callback_RESOLVER_STRING_7_unsigned long_long_long_long_unsigned long_unsigned long_HTMLCanvasElement";
+  static texSubImage2D_Callback_ul_long_long_long_ul_ul_ImageData(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_Callback_unsigned long_long_long_long_unsigned long_unsigned long_ImageData";
 
-  static $texSubImage2DImage_Callback(mthis, target, level, xoffset, yoffset, format, type, image) native "WebGLRenderingContext_texSubImage2D_Callback_RESOLVER_STRING_7_unsigned long_long_long_long_unsigned long_unsigned long_HTMLImageElement";
+  static texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLImageElement(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_Callback_unsigned long_long_long_long_unsigned long_unsigned long_HTMLImageElement";
 
-  static $texSubImage2DImageData_Callback(mthis, target, level, xoffset, yoffset, format, type, pixels) native "WebGLRenderingContext_texSubImage2D_Callback_RESOLVER_STRING_7_unsigned long_long_long_long_unsigned long_unsigned long_ImageData";
+  static texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLCanvasElement(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_Callback_unsigned long_long_long_long_unsigned long_unsigned long_HTMLCanvasElement";
 
-  static $texSubImage2DVideo_Callback(mthis, target, level, xoffset, yoffset, format, type, video) native "WebGLRenderingContext_texSubImage2D_Callback_RESOLVER_STRING_7_unsigned long_long_long_long_unsigned long_unsigned long_HTMLVideoElement";
+  static texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLVideoElement(mthis, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_Callback_unsigned long_long_long_long_unsigned long_unsigned long_HTMLVideoElement";
 
-  static $uniform1f_Callback(mthis, location, x) native "WebGLRenderingContext_uniform1f_Callback_RESOLVER_STRING_2_WebGLUniformLocation_float";
+  static uniform1f_Callback_WebGLUniformLocation_float(mthis, location, x) native "WebGLRenderingContext_uniform1f_Callback_WebGLUniformLocation_float";
 
-  static $uniform1fv_Callback(mthis, location, v) native "WebGLRenderingContext_uniform1fv_Callback";
+  static uniform1fv_Callback_WebGLUniformLocation_Float32Array(mthis, location, v) native "WebGLRenderingContext_uniform1fv_Callback";
 
-  static $uniform1i_Callback(mthis, location, x) native "WebGLRenderingContext_uniform1i_Callback_RESOLVER_STRING_2_WebGLUniformLocation_long";
+  static uniform1i_Callback_WebGLUniformLocation_long(mthis, location, x) native "WebGLRenderingContext_uniform1i_Callback_WebGLUniformLocation_long";
 
-  static $uniform1iv_Callback(mthis, location, v) native "WebGLRenderingContext_uniform1iv_Callback";
+  static uniform1iv_Callback_WebGLUniformLocation_Int32Array(mthis, location, v) native "WebGLRenderingContext_uniform1iv_Callback";
 
-  static $uniform2f_Callback(mthis, location, x, y) native "WebGLRenderingContext_uniform2f_Callback_RESOLVER_STRING_3_WebGLUniformLocation_float_float";
+  static uniform2f_Callback_WebGLUniformLocation_float_float(mthis, location, x, y) native "WebGLRenderingContext_uniform2f_Callback_WebGLUniformLocation_float_float";
 
-  static $uniform2fv_Callback(mthis, location, v) native "WebGLRenderingContext_uniform2fv_Callback";
+  static uniform2fv_Callback_WebGLUniformLocation_Float32Array(mthis, location, v) native "WebGLRenderingContext_uniform2fv_Callback";
 
-  static $uniform2i_Callback(mthis, location, x, y) native "WebGLRenderingContext_uniform2i_Callback_RESOLVER_STRING_3_WebGLUniformLocation_long_long";
+  static uniform2i_Callback_WebGLUniformLocation_long_long(mthis, location, x, y) native "WebGLRenderingContext_uniform2i_Callback_WebGLUniformLocation_long_long";
 
-  static $uniform2iv_Callback(mthis, location, v) native "WebGLRenderingContext_uniform2iv_Callback";
+  static uniform2iv_Callback_WebGLUniformLocation_Int32Array(mthis, location, v) native "WebGLRenderingContext_uniform2iv_Callback";
 
-  static $uniform3f_Callback(mthis, location, x, y, z) native "WebGLRenderingContext_uniform3f_Callback_RESOLVER_STRING_4_WebGLUniformLocation_float_float_float";
+  static uniform3f_Callback_WebGLUniformLocation_float_float_float(mthis, location, x, y, z) native "WebGLRenderingContext_uniform3f_Callback_WebGLUniformLocation_float_float_float";
 
-  static $uniform3fv_Callback(mthis, location, v) native "WebGLRenderingContext_uniform3fv_Callback";
+  static uniform3fv_Callback_WebGLUniformLocation_Float32Array(mthis, location, v) native "WebGLRenderingContext_uniform3fv_Callback";
 
-  static $uniform3i_Callback(mthis, location, x, y, z) native "WebGLRenderingContext_uniform3i_Callback_RESOLVER_STRING_4_WebGLUniformLocation_long_long_long";
+  static uniform3i_Callback_WebGLUniformLocation_long_long_long(mthis, location, x, y, z) native "WebGLRenderingContext_uniform3i_Callback_WebGLUniformLocation_long_long_long";
 
-  static $uniform3iv_Callback(mthis, location, v) native "WebGLRenderingContext_uniform3iv_Callback";
+  static uniform3iv_Callback_WebGLUniformLocation_Int32Array(mthis, location, v) native "WebGLRenderingContext_uniform3iv_Callback";
 
-  static $uniform4f_Callback(mthis, location, x, y, z, w) native "WebGLRenderingContext_uniform4f_Callback_RESOLVER_STRING_5_WebGLUniformLocation_float_float_float_float";
+  static uniform4f_Callback_WebGLUniformLocation_float_float_float_float(mthis, location, x, y, z, w) native "WebGLRenderingContext_uniform4f_Callback_WebGLUniformLocation_float_float_float_float";
 
-  static $uniform4fv_Callback(mthis, location, v) native "WebGLRenderingContext_uniform4fv_Callback";
+  static uniform4fv_Callback_WebGLUniformLocation_Float32Array(mthis, location, v) native "WebGLRenderingContext_uniform4fv_Callback";
 
-  static $uniform4i_Callback(mthis, location, x, y, z, w) native "WebGLRenderingContext_uniform4i_Callback_RESOLVER_STRING_5_WebGLUniformLocation_long_long_long_long";
+  static uniform4i_Callback_WebGLUniformLocation_long_long_long_long(mthis, location, x, y, z, w) native "WebGLRenderingContext_uniform4i_Callback_WebGLUniformLocation_long_long_long_long";
 
-  static $uniform4iv_Callback(mthis, location, v) native "WebGLRenderingContext_uniform4iv_Callback";
+  static uniform4iv_Callback_WebGLUniformLocation_Int32Array(mthis, location, v) native "WebGLRenderingContext_uniform4iv_Callback";
 
-  static $uniformMatrix2fv_Callback(mthis, location, transpose, array) native "WebGLRenderingContext_uniformMatrix2fv_Callback";
+  static uniformMatrix2fv_Callback_WebGLUniformLocation_boolean_Float32Array(mthis, location, transpose, array) native "WebGLRenderingContext_uniformMatrix2fv_Callback";
 
-  static $uniformMatrix3fv_Callback(mthis, location, transpose, array) native "WebGLRenderingContext_uniformMatrix3fv_Callback";
+  static uniformMatrix3fv_Callback_WebGLUniformLocation_boolean_Float32Array(mthis, location, transpose, array) native "WebGLRenderingContext_uniformMatrix3fv_Callback";
 
-  static $uniformMatrix4fv_Callback(mthis, location, transpose, array) native "WebGLRenderingContext_uniformMatrix4fv_Callback";
+  static uniformMatrix4fv_Callback_WebGLUniformLocation_boolean_Float32Array(mthis, location, transpose, array) native "WebGLRenderingContext_uniformMatrix4fv_Callback";
 
-  static $useProgram_Callback(mthis, program) native "WebGLRenderingContext_useProgram_Callback_RESOLVER_STRING_1_WebGLProgram";
+  static useProgram_Callback_WebGLProgram(mthis, program) native "WebGLRenderingContext_useProgram_Callback_WebGLProgram";
 
-  static $validateProgram_Callback(mthis, program) native "WebGLRenderingContext_validateProgram_Callback_RESOLVER_STRING_1_WebGLProgram";
+  static validateProgram_Callback_WebGLProgram(mthis, program) native "WebGLRenderingContext_validateProgram_Callback_WebGLProgram";
 
-  static $vertexAttrib1f_Callback(mthis, indx, x) native "WebGLRenderingContext_vertexAttrib1f_Callback_RESOLVER_STRING_2_unsigned long_float";
+  static vertexAttrib1f_Callback_ul_float(mthis, indx, x) native "WebGLRenderingContext_vertexAttrib1f_Callback_unsigned long_float";
 
-  static $vertexAttrib1fv_Callback(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib1fv_Callback";
+  static vertexAttrib1fv_Callback_ul_Float32Array(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib1fv_Callback";
 
-  static $vertexAttrib2f_Callback(mthis, indx, x, y) native "WebGLRenderingContext_vertexAttrib2f_Callback_RESOLVER_STRING_3_unsigned long_float_float";
+  static vertexAttrib2f_Callback_ul_float_float(mthis, indx, x, y) native "WebGLRenderingContext_vertexAttrib2f_Callback_unsigned long_float_float";
 
-  static $vertexAttrib2fv_Callback(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib2fv_Callback";
+  static vertexAttrib2fv_Callback_ul_Float32Array(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib2fv_Callback";
 
-  static $vertexAttrib3f_Callback(mthis, indx, x, y, z) native "WebGLRenderingContext_vertexAttrib3f_Callback_RESOLVER_STRING_4_unsigned long_float_float_float";
+  static vertexAttrib3f_Callback_ul_float_float_float(mthis, indx, x, y, z) native "WebGLRenderingContext_vertexAttrib3f_Callback_unsigned long_float_float_float";
 
-  static $vertexAttrib3fv_Callback(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib3fv_Callback";
+  static vertexAttrib3fv_Callback_ul_Float32Array(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib3fv_Callback";
 
-  static $vertexAttrib4f_Callback(mthis, indx, x, y, z, w) native "WebGLRenderingContext_vertexAttrib4f_Callback_RESOLVER_STRING_5_unsigned long_float_float_float_float";
+  static vertexAttrib4f_Callback_ul_float_float_float_float(mthis, indx, x, y, z, w) native "WebGLRenderingContext_vertexAttrib4f_Callback_unsigned long_float_float_float_float";
 
-  static $vertexAttrib4fv_Callback(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib4fv_Callback";
+  static vertexAttrib4fv_Callback_ul_Float32Array(mthis, indx, values) native "WebGLRenderingContext_vertexAttrib4fv_Callback";
 
-  static $vertexAttribPointer_Callback(mthis, indx, size, type, normalized, stride, offset) native "WebGLRenderingContext_vertexAttribPointer_Callback_RESOLVER_STRING_6_unsigned long_long_unsigned long_boolean_long_long long";
+  static vertexAttribPointer_Callback_ul_long_ul_boolean_long_ll(mthis, indx, size, type, normalized, stride, offset) native "WebGLRenderingContext_vertexAttribPointer_Callback_unsigned long_long_unsigned long_boolean_long_long long";
 
-  static $viewport_Callback(mthis, x, y, width, height) native "WebGLRenderingContext_viewport_Callback_RESOLVER_STRING_4_long_long_long_long";
+  static viewport_Callback_long_long_long_long(mthis, x, y, width, height) native "WebGLRenderingContext_viewport_Callback_long_long_long_long";
 }
 
 class BlinkWebGLShader {}
 
 class BlinkWebGLShaderPrecisionFormat {
-  static $precision_Getter(mthis) native "WebGLShaderPrecisionFormat_precision_Getter";
+  static precision_Getter(mthis) native "WebGLShaderPrecisionFormat_precision_Getter";
 
-  static $rangeMax_Getter(mthis) native "WebGLShaderPrecisionFormat_rangeMax_Getter";
+  static rangeMax_Getter(mthis) native "WebGLShaderPrecisionFormat_rangeMax_Getter";
 
-  static $rangeMin_Getter(mthis) native "WebGLShaderPrecisionFormat_rangeMin_Getter";
+  static rangeMin_Getter(mthis) native "WebGLShaderPrecisionFormat_rangeMin_Getter";
 }
 
 class BlinkWebGLTexture {}
@@ -7903,289 +7813,281 @@
 class BlinkWebGLVertexArrayObjectOES {}
 
 class BlinkWebKitAnimationEvent {
-  static $animationName_Getter(mthis) native "WebKitAnimationEvent_animationName_Getter";
+  static animationName_Getter(mthis) native "WebKitAnimationEvent_animationName_Getter";
 
-  static $elapsedTime_Getter(mthis) native "WebKitAnimationEvent_elapsedTime_Getter";
+  static elapsedTime_Getter(mthis) native "WebKitAnimationEvent_elapsedTime_Getter";
 }
 
 class BlinkWebKitCSSFilterRule {
-  static $style_Getter(mthis) native "WebKitCSSFilterRule_style_Getter";
+  static style_Getter(mthis) native "WebKitCSSFilterRule_style_Getter";
 }
 
 class BlinkWebKitCSSFilterValue {}
 
 class BlinkWebKitCSSMatrix {
-  static $_create_1constructorCallback(cssValue) native "WebKitCSSMatrix_constructorCallback_RESOLVER_STRING_1_DOMString";
+  static constructorCallback_DOMString(cssValue) native "WebKitCSSMatrix_constructorCallback_DOMString";
 }
 
 class BlinkWebKitCSSTransformValue {}
 
 class BlinkWebKitMediaSource {
-  static $_create_1constructorCallback() native "WebKitMediaSource_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "WebKitMediaSource_constructorCallback";
 }
 
 class BlinkWebKitNotification {}
 
 class BlinkWebKitPoint {
-  static $constructorCallback(x, y) native "WebKitPoint_constructorCallback";
+  static constructorCallback_float_float(x, y) native "WebKitPoint_constructorCallback";
 
-  static $x_Getter(mthis) native "WebKitPoint_x_Getter";
+  static x_Getter(mthis) native "WebKitPoint_x_Getter";
 
-  static $x_Setter(mthis, value) native "WebKitPoint_x_Setter";
+  static x_Setter_float(mthis, value) native "WebKitPoint_x_Setter";
 
-  static $y_Getter(mthis) native "WebKitPoint_y_Getter";
+  static y_Getter(mthis) native "WebKitPoint_y_Getter";
 
-  static $y_Setter(mthis, value) native "WebKitPoint_y_Setter";
+  static y_Setter_float(mthis, value) native "WebKitPoint_y_Setter";
 }
 
 class BlinkWebKitSourceBuffer {}
 
 class BlinkWebKitSourceBufferList {
-  static $item_Callback(mthis, index) native "WebKitSourceBufferList_item_Callback_RESOLVER_STRING_1_unsigned long";
+  static item_Callback_ul(mthis, index) native "WebKitSourceBufferList_item_Callback_unsigned long";
 }
 
 class BlinkWebSocket {
-  static $_create_1constructorCallback(url) native "WebSocket_constructorCallback_RESOLVER_STRING_1_DOMString";
+  static constructorCallback_DOMString(url) native "WebSocket_constructorCallback_DOMString";
 
-  static $_create_2constructorCallback(url, protocol_OR_protocols) native "WebSocket_constructorCallback_RESOLVER_STRING_2_DOMString_sequence<DOMString>";
+  static constructorCallback_DOMString_SEQ_DOMString_SEQ(url, protocol_OR_protocols) native "WebSocket_constructorCallback_DOMString_sequence<DOMString>";
 
-  static $_create_3constructorCallback(url, protocol_OR_protocols) native "WebSocket_constructorCallback_RESOLVER_STRING_2_DOMString_DOMString";
+  static constructorCallback_DOMString_DOMString(url, protocol_OR_protocols) native "WebSocket_constructorCallback_DOMString_DOMString";
 
-  static $binaryType_Getter(mthis) native "WebSocket_binaryType_Getter";
+  static binaryType_Getter(mthis) native "WebSocket_binaryType_Getter";
 
-  static $binaryType_Setter(mthis, value) native "WebSocket_binaryType_Setter";
+  static binaryType_Setter_DOMString(mthis, value) native "WebSocket_binaryType_Setter";
 
-  static $bufferedAmount_Getter(mthis) native "WebSocket_bufferedAmount_Getter";
+  static bufferedAmount_Getter(mthis) native "WebSocket_bufferedAmount_Getter";
 
-  static $extensions_Getter(mthis) native "WebSocket_extensions_Getter";
+  static extensions_Getter(mthis) native "WebSocket_extensions_Getter";
 
-  static $protocol_Getter(mthis) native "WebSocket_protocol_Getter";
+  static protocol_Getter(mthis) native "WebSocket_protocol_Getter";
 
-  static $readyState_Getter(mthis) native "WebSocket_readyState_Getter";
+  static readyState_Getter(mthis) native "WebSocket_readyState_Getter";
 
-  static $url_Getter(mthis) native "WebSocket_url_Getter";
+  static url_Getter(mthis) native "WebSocket_url_Getter";
 
-  static $_close_1_Callback(mthis, code, reason) native "WebSocket_close_Callback_RESOLVER_STRING_2_unsigned short_DOMString";
+  static close_Callback_us_DOMString(mthis, code, reason) native "WebSocket_close_Callback_unsigned short_DOMString";
 
-  static $_close_2_Callback(mthis, code) native "WebSocket_close_Callback_RESOLVER_STRING_1_unsigned short";
+  static close_Callback_us(mthis, code) native "WebSocket_close_Callback_unsigned short";
 
-  static $_close_3_Callback(mthis) native "WebSocket_close_Callback_RESOLVER_STRING_0_";
+  static close_Callback(mthis) native "WebSocket_close_Callback";
 
-  static $_send_1_Callback(mthis, data) native "WebSocket_send_Callback_RESOLVER_STRING_1_ArrayBufferView";
+  static send_Callback_ArrayBufferView(mthis, data) native "WebSocket_send_Callback_ArrayBufferView";
 
-  static $_send_2_Callback(mthis, data) native "WebSocket_send_Callback_RESOLVER_STRING_1_ArrayBuffer";
+  static send_Callback_ArrayBuffer(mthis, data) native "WebSocket_send_Callback_ArrayBuffer";
 
-  static $_send_3_Callback(mthis, data) native "WebSocket_send_Callback_RESOLVER_STRING_1_Blob";
+  static send_Callback_Blob(mthis, data) native "WebSocket_send_Callback_Blob";
 
-  static $_send_4_Callback(mthis, data) native "WebSocket_send_Callback_RESOLVER_STRING_1_DOMString";
-
-  static $sendBlob_Callback(mthis, data) native "WebSocket_send_Callback_RESOLVER_STRING_1_Blob";
-
-  static $sendByteBuffer_Callback(mthis, data) native "WebSocket_send_Callback_RESOLVER_STRING_1_ArrayBuffer";
-
-  static $sendString_Callback(mthis, data) native "WebSocket_send_Callback_RESOLVER_STRING_1_DOMString";
-
-  static $sendTypedData_Callback(mthis, data) native "WebSocket_send_Callback_RESOLVER_STRING_1_ArrayBufferView";
+  static send_Callback_DOMString(mthis, data) native "WebSocket_send_Callback_DOMString";
 }
 
 class BlinkWheelEvent {
-  static $deltaMode_Getter(mthis) native "WheelEvent_deltaMode_Getter";
+  static deltaMode_Getter(mthis) native "WheelEvent_deltaMode_Getter";
 
-  static $deltaX_Getter(mthis) native "WheelEvent_deltaX_Getter";
+  static deltaX_Getter(mthis) native "WheelEvent_deltaX_Getter";
 
-  static $deltaY_Getter(mthis) native "WheelEvent_deltaY_Getter";
+  static deltaY_Getter(mthis) native "WheelEvent_deltaY_Getter";
 
-  static $deltaZ_Getter(mthis) native "WheelEvent_deltaZ_Getter";
+  static deltaZ_Getter(mthis) native "WheelEvent_deltaZ_Getter";
 
-  static $webkitDirectionInvertedFromDevice_Getter(mthis) native "WheelEvent_webkitDirectionInvertedFromDevice_Getter";
+  static webkitDirectionInvertedFromDevice_Getter(mthis) native "WheelEvent_webkitDirectionInvertedFromDevice_Getter";
 
-  static $wheelDeltaX_Getter(mthis) native "WheelEvent_wheelDeltaX_Getter";
+  static wheelDeltaX_Getter(mthis) native "WheelEvent_wheelDeltaX_Getter";
 
-  static $wheelDeltaY_Getter(mthis) native "WheelEvent_wheelDeltaY_Getter";
+  static wheelDeltaY_Getter(mthis) native "WheelEvent_wheelDeltaY_Getter";
 
-  static $initWebKitWheelEvent_Callback(mthis, wheelDeltaX, wheelDeltaY, view, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey) native "WheelEvent_initWebKitWheelEvent_Callback_RESOLVER_STRING_11_long_long_Window_long_long_long_long_boolean_boolean_boolean_boolean";
+  static initWebKitWheelEvent_Callback_long_long_Window_long_long_long_long_boolean_boolean_boolean_boolean(mthis, wheelDeltaX, wheelDeltaY, view, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey) native "WheelEvent_initWebKitWheelEvent_Callback_long_long_Window_long_long_long_long_boolean_boolean_boolean_boolean";
 }
 
 class BlinkWindow {
-  static $CSS_Getter(mthis) native "Window_CSS_Getter";
+  static CSS_Getter(mthis) native "Window_CSS_Getter";
 
-  static $applicationCache_Getter(mthis) native "Window_applicationCache_Getter";
+  static applicationCache_Getter(mthis) native "Window_applicationCache_Getter";
 
-  static $closed_Getter(mthis) native "Window_closed_Getter";
+  static closed_Getter(mthis) native "Window_closed_Getter";
 
-  static $console_Getter(mthis) native "Window_console_Getter";
+  static console_Getter(mthis) native "Window_console_Getter";
 
-  static $crypto_Getter(mthis) native "Window_crypto_Getter";
+  static crypto_Getter(mthis) native "Window_crypto_Getter";
 
-  static $defaultStatus_Getter(mthis) native "Window_defaultStatus_Getter";
+  static defaultStatus_Getter(mthis) native "Window_defaultStatus_Getter";
 
-  static $defaultStatus_Setter(mthis, value) native "Window_defaultStatus_Setter";
+  static defaultStatus_Setter_DOMString(mthis, value) native "Window_defaultStatus_Setter";
 
-  static $defaultstatus_Getter(mthis) native "Window_defaultstatus_Getter";
+  static defaultstatus_Getter(mthis) native "Window_defaultstatus_Getter";
 
-  static $defaultstatus_Setter(mthis, value) native "Window_defaultstatus_Setter";
+  static defaultstatus_Setter_DOMString(mthis, value) native "Window_defaultstatus_Setter";
 
-  static $devicePixelRatio_Getter(mthis) native "Window_devicePixelRatio_Getter";
+  static devicePixelRatio_Getter(mthis) native "Window_devicePixelRatio_Getter";
 
-  static $document_Getter(mthis) native "Window_document_Getter";
+  static document_Getter(mthis) native "Window_document_Getter";
 
-  static $history_Getter(mthis) native "Window_history_Getter";
+  static history_Getter(mthis) native "Window_history_Getter";
 
-  static $indexedDB_Getter(mthis) native "Window_indexedDB_Getter";
+  static indexedDB_Getter(mthis) native "Window_indexedDB_Getter";
 
-  static $innerHeight_Getter(mthis) native "Window_innerHeight_Getter";
+  static innerHeight_Getter(mthis) native "Window_innerHeight_Getter";
 
-  static $innerWidth_Getter(mthis) native "Window_innerWidth_Getter";
+  static innerWidth_Getter(mthis) native "Window_innerWidth_Getter";
 
-  static $localStorage_Getter(mthis) native "Window_localStorage_Getter";
+  static localStorage_Getter(mthis) native "Window_localStorage_Getter";
 
-  static $location_Getter(mthis) native "Window_location_Getter";
+  static location_Getter(mthis) native "Window_location_Getter";
 
-  static $locationbar_Getter(mthis) native "Window_locationbar_Getter";
+  static locationbar_Getter(mthis) native "Window_locationbar_Getter";
 
-  static $menubar_Getter(mthis) native "Window_menubar_Getter";
+  static menubar_Getter(mthis) native "Window_menubar_Getter";
 
-  static $name_Getter(mthis) native "Window_name_Getter";
+  static name_Getter(mthis) native "Window_name_Getter";
 
-  static $name_Setter(mthis, value) native "Window_name_Setter";
+  static name_Setter_DOMString(mthis, value) native "Window_name_Setter";
 
-  static $navigator_Getter(mthis) native "Window_navigator_Getter";
+  static navigator_Getter(mthis) native "Window_navigator_Getter";
 
-  static $offscreenBuffering_Getter(mthis) native "Window_offscreenBuffering_Getter";
+  static offscreenBuffering_Getter(mthis) native "Window_offscreenBuffering_Getter";
 
-  static $opener_Getter(mthis) native "Window_opener_Getter";
+  static opener_Getter(mthis) native "Window_opener_Getter";
 
-  static $opener_Setter(mthis, value) native "Window_opener_Setter";
+  static opener_Setter_Window(mthis, value) native "Window_opener_Setter";
 
-  static $orientation_Getter(mthis) native "Window_orientation_Getter";
+  static orientation_Getter(mthis) native "Window_orientation_Getter";
 
-  static $outerHeight_Getter(mthis) native "Window_outerHeight_Getter";
+  static outerHeight_Getter(mthis) native "Window_outerHeight_Getter";
 
-  static $outerWidth_Getter(mthis) native "Window_outerWidth_Getter";
+  static outerWidth_Getter(mthis) native "Window_outerWidth_Getter";
 
-  static $pageXOffset_Getter(mthis) native "Window_pageXOffset_Getter";
+  static pageXOffset_Getter(mthis) native "Window_pageXOffset_Getter";
 
-  static $pageYOffset_Getter(mthis) native "Window_pageYOffset_Getter";
+  static pageYOffset_Getter(mthis) native "Window_pageYOffset_Getter";
 
-  static $parent_Getter(mthis) native "Window_parent_Getter";
+  static parent_Getter(mthis) native "Window_parent_Getter";
 
-  static $performance_Getter(mthis) native "Window_performance_Getter";
+  static performance_Getter(mthis) native "Window_performance_Getter";
 
-  static $screen_Getter(mthis) native "Window_screen_Getter";
+  static screen_Getter(mthis) native "Window_screen_Getter";
 
-  static $screenLeft_Getter(mthis) native "Window_screenLeft_Getter";
+  static screenLeft_Getter(mthis) native "Window_screenLeft_Getter";
 
-  static $screenTop_Getter(mthis) native "Window_screenTop_Getter";
+  static screenTop_Getter(mthis) native "Window_screenTop_Getter";
 
-  static $screenX_Getter(mthis) native "Window_screenX_Getter";
+  static screenX_Getter(mthis) native "Window_screenX_Getter";
 
-  static $screenY_Getter(mthis) native "Window_screenY_Getter";
+  static screenY_Getter(mthis) native "Window_screenY_Getter";
 
-  static $scrollX_Getter(mthis) native "Window_scrollX_Getter";
+  static scrollX_Getter(mthis) native "Window_scrollX_Getter";
 
-  static $scrollY_Getter(mthis) native "Window_scrollY_Getter";
+  static scrollY_Getter(mthis) native "Window_scrollY_Getter";
 
-  static $scrollbars_Getter(mthis) native "Window_scrollbars_Getter";
+  static scrollbars_Getter(mthis) native "Window_scrollbars_Getter";
 
-  static $self_Getter(mthis) native "Window_self_Getter";
+  static self_Getter(mthis) native "Window_self_Getter";
 
-  static $sessionStorage_Getter(mthis) native "Window_sessionStorage_Getter";
+  static sessionStorage_Getter(mthis) native "Window_sessionStorage_Getter";
 
-  static $speechSynthesis_Getter(mthis) native "Window_speechSynthesis_Getter";
+  static speechSynthesis_Getter(mthis) native "Window_speechSynthesis_Getter";
 
-  static $status_Getter(mthis) native "Window_status_Getter";
+  static status_Getter(mthis) native "Window_status_Getter";
 
-  static $status_Setter(mthis, value) native "Window_status_Setter";
+  static status_Setter_DOMString(mthis, value) native "Window_status_Setter";
 
-  static $statusbar_Getter(mthis) native "Window_statusbar_Getter";
+  static statusbar_Getter(mthis) native "Window_statusbar_Getter";
 
-  static $styleMedia_Getter(mthis) native "Window_styleMedia_Getter";
+  static styleMedia_Getter(mthis) native "Window_styleMedia_Getter";
 
-  static $toolbar_Getter(mthis) native "Window_toolbar_Getter";
+  static toolbar_Getter(mthis) native "Window_toolbar_Getter";
 
-  static $top_Getter(mthis) native "Window_top_Getter";
+  static top_Getter(mthis) native "Window_top_Getter";
 
-  static $window_Getter(mthis) native "Window_window_Getter";
+  static window_Getter(mthis) native "Window_window_Getter";
 
-  static $___getter___1_Callback(mthis, index_OR_name) native "Window___getter___Callback_RESOLVER_STRING_1_unsigned long";
+  static $__getter___Callback_ul(mthis, index_OR_name) native "Window___getter___Callback_unsigned long";
 
-  static $___getter___2_Callback(mthis, index_OR_name) native "Window___getter___Callback";
+  static $__getter___Callback_DOMString(mthis, index_OR_name) native "Window___getter___Callback";
 
-  static $alert_Callback(mthis, message) native "Window_alert_Callback_RESOLVER_STRING_1_DOMString";
+  static alert_Callback_DOMString(mthis, message) native "Window_alert_Callback_DOMString";
 
-  static $cancelAnimationFrame_Callback(mthis, id) native "Window_cancelAnimationFrame_Callback_RESOLVER_STRING_1_long";
+  static cancelAnimationFrame_Callback_long(mthis, id) native "Window_cancelAnimationFrame_Callback_long";
 
-  static $close_Callback(mthis) native "Window_close_Callback_RESOLVER_STRING_0_";
+  static close_Callback(mthis) native "Window_close_Callback";
 
-  static $confirm_Callback(mthis, message) native "Window_confirm_Callback_RESOLVER_STRING_1_DOMString";
+  static confirm_Callback_DOMString(mthis, message) native "Window_confirm_Callback_DOMString";
 
-  static $find_Callback(mthis, string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog) native "Window_find_Callback_RESOLVER_STRING_7_DOMString_boolean_boolean_boolean_boolean_boolean_boolean";
+  static find_Callback_DOMString_boolean_boolean_boolean_boolean_boolean_boolean(mthis, string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog) native "Window_find_Callback_DOMString_boolean_boolean_boolean_boolean_boolean_boolean";
 
-  static $getComputedStyle_Callback(mthis, element, pseudoElement) native "Window_getComputedStyle_Callback_RESOLVER_STRING_2_Element_DOMString";
+  static getComputedStyle_Callback_Element_DOMString(mthis, element, pseudoElement) native "Window_getComputedStyle_Callback_Element_DOMString";
 
-  static $getMatchedCSSRules_Callback(mthis, element, pseudoElement) native "Window_getMatchedCSSRules_Callback_RESOLVER_STRING_2_Element_DOMString";
+  static getMatchedCSSRules_Callback_Element_DOMString(mthis, element, pseudoElement) native "Window_getMatchedCSSRules_Callback_Element_DOMString";
 
-  static $getSelection_Callback(mthis) native "Window_getSelection_Callback_RESOLVER_STRING_0_";
+  static getSelection_Callback(mthis) native "Window_getSelection_Callback";
 
-  static $matchMedia_Callback(mthis, query) native "Window_matchMedia_Callback_RESOLVER_STRING_1_DOMString";
+  static matchMedia_Callback_DOMString(mthis, query) native "Window_matchMedia_Callback_DOMString";
 
-  static $moveBy_Callback(mthis, x, y) native "Window_moveBy_Callback_RESOLVER_STRING_2_float_float";
+  static moveBy_Callback_float_float(mthis, x, y) native "Window_moveBy_Callback_float_float";
 
-  static $moveTo_Callback(mthis, x, y) native "Window_moveTo_Callback_RESOLVER_STRING_2_float_float";
+  static moveTo_Callback_float_float(mthis, x, y) native "Window_moveTo_Callback_float_float";
 
-  static $open_Callback(mthis, url, name, options) native "Window_open_Callback";
+  static open_Callback_DOMString_DOMString_DOMString(mthis, url, name, options) native "Window_open_Callback";
 
-  static $openDatabase_Callback(mthis, name, version, displayName, estimatedSize, creationCallback) native "Window_openDatabase_Callback_RESOLVER_STRING_5_DOMString_DOMString_DOMString_unsigned long_DatabaseCallback";
+  static openDatabase_Callback_DOMString_DOMString_DOMString_ul_DatabaseCallback(mthis, name, version, displayName, estimatedSize, creationCallback) native "Window_openDatabase_Callback_DOMString_DOMString_DOMString_unsigned long_DatabaseCallback";
 
-  static $postMessage_Callback(mthis, message, targetOrigin, messagePorts) native "Window_postMessage_Callback";
+  static postMessage_Callback_SerializedScriptValue_DOMString_A_MessagePort_A(mthis, message, targetOrigin, messagePorts) native "Window_postMessage_Callback";
 
-  static $print_Callback(mthis) native "Window_print_Callback_RESOLVER_STRING_0_";
+  static print_Callback(mthis) native "Window_print_Callback";
 
-  static $requestAnimationFrame_Callback(mthis, callback) native "Window_requestAnimationFrame_Callback_RESOLVER_STRING_1_RequestAnimationFrameCallback";
+  static requestAnimationFrame_Callback_RequestAnimationFrameCallback(mthis, callback) native "Window_requestAnimationFrame_Callback_RequestAnimationFrameCallback";
 
-  static $resizeBy_Callback(mthis, x, y) native "Window_resizeBy_Callback_RESOLVER_STRING_2_float_float";
+  static resizeBy_Callback_float_float(mthis, x, y) native "Window_resizeBy_Callback_float_float";
 
-  static $resizeTo_Callback(mthis, width, height) native "Window_resizeTo_Callback_RESOLVER_STRING_2_float_float";
+  static resizeTo_Callback_float_float(mthis, width, height) native "Window_resizeTo_Callback_float_float";
 
-  static $scroll_Callback(mthis, x, y, scrollOptions) native "Window_scroll_Callback_RESOLVER_STRING_3_long_long_Dictionary";
+  static scroll_Callback_long_long_Dictionary(mthis, x, y, scrollOptions) native "Window_scroll_Callback_long_long_Dictionary";
 
-  static $scrollBy_Callback(mthis, x, y, scrollOptions) native "Window_scrollBy_Callback_RESOLVER_STRING_3_long_long_Dictionary";
+  static scrollBy_Callback_long_long_Dictionary(mthis, x, y, scrollOptions) native "Window_scrollBy_Callback_long_long_Dictionary";
 
-  static $scrollTo_Callback(mthis, x, y, scrollOptions) native "Window_scrollTo_Callback_RESOLVER_STRING_3_long_long_Dictionary";
+  static scrollTo_Callback_long_long_Dictionary(mthis, x, y, scrollOptions) native "Window_scrollTo_Callback_long_long_Dictionary";
 
-  static $showModalDialog_Callback(mthis, url, dialogArgs, featureArgs) native "Window_showModalDialog_Callback";
+  static showModalDialog_Callback_DOMString_ScriptValue_DOMString(mthis, url, dialogArgs, featureArgs) native "Window_showModalDialog_Callback";
 
-  static $stop_Callback(mthis) native "Window_stop_Callback_RESOLVER_STRING_0_";
+  static stop_Callback(mthis) native "Window_stop_Callback";
 
-  static $toString_Callback(mthis) native "Window_toString_Callback";
+  static toString_Callback(mthis) native "Window_toString_Callback";
 
-  static $webkitConvertPointFromNodeToPage_Callback(mthis, node, p) native "Window_webkitConvertPointFromNodeToPage_Callback_RESOLVER_STRING_2_Node_WebKitPoint";
+  static webkitConvertPointFromNodeToPage_Callback_Node_WebKitPoint(mthis, node, p) native "Window_webkitConvertPointFromNodeToPage_Callback_Node_WebKitPoint";
 
-  static $webkitConvertPointFromPageToNode_Callback(mthis, node, p) native "Window_webkitConvertPointFromPageToNode_Callback_RESOLVER_STRING_2_Node_WebKitPoint";
+  static webkitConvertPointFromPageToNode_Callback_Node_WebKitPoint(mthis, node, p) native "Window_webkitConvertPointFromPageToNode_Callback_Node_WebKitPoint";
 
-  static $webkitRequestFileSystem_Callback(mthis, type, size, successCallback, errorCallback) native "Window_webkitRequestFileSystem_Callback_RESOLVER_STRING_4_unsigned short_long long_FileSystemCallback_ErrorCallback";
+  static webkitRequestFileSystem_Callback_us_ll_FileSystemCallback_ErrorCallback(mthis, type, size, successCallback, errorCallback) native "Window_webkitRequestFileSystem_Callback_unsigned short_long long_FileSystemCallback_ErrorCallback";
 
-  static $webkitResolveLocalFileSystemURL_Callback(mthis, url, successCallback, errorCallback) native "Window_webkitResolveLocalFileSystemURL_Callback_RESOLVER_STRING_3_DOMString_EntryCallback_ErrorCallback";
+  static webkitResolveLocalFileSystemURL_Callback_DOMString_EntryCallback_ErrorCallback(mthis, url, successCallback, errorCallback) native "Window_webkitResolveLocalFileSystemURL_Callback_DOMString_EntryCallback_ErrorCallback";
 
-  static $atob_Callback(mthis, string) native "Window_atob_Callback_RESOLVER_STRING_1_DOMString";
+  static atob_Callback_DOMString(mthis, string) native "Window_atob_Callback_DOMString";
 
-  static $btoa_Callback(mthis, string) native "Window_btoa_Callback_RESOLVER_STRING_1_DOMString";
+  static btoa_Callback_DOMString(mthis, string) native "Window_btoa_Callback_DOMString";
 
-  static $clearInterval_Callback(mthis, handle) native "Window_clearInterval_Callback_RESOLVER_STRING_1_long";
+  static clearInterval_Callback_long(mthis, handle) native "Window_clearInterval_Callback_long";
 
-  static $clearTimeout_Callback(mthis, handle) native "Window_clearTimeout_Callback_RESOLVER_STRING_1_long";
+  static clearTimeout_Callback_long(mthis, handle) native "Window_clearTimeout_Callback_long";
 
-  static $setInterval_Callback(mthis, handler, timeout) native "Window_setInterval_Callback";
+  static setInterval_Callback_ScriptValue_long(mthis, handler, timeout) native "Window_setInterval_Callback";
 
-  static $setTimeout_Callback(mthis, handler, timeout) native "Window_setTimeout_Callback";
+  static setTimeout_Callback_ScriptValue_long(mthis, handler, timeout) native "Window_setTimeout_Callback";
 }
 
 class BlinkWorker {
-  static $_create_1constructorCallback(scriptUrl) native "Worker_constructorCallback_RESOLVER_STRING_1_DOMString";
+  static constructorCallback_DOMString(scriptUrl) native "Worker_constructorCallback_DOMString";
 
-  static $postMessage_Callback(mthis, message, messagePorts) native "Worker_postMessage_Callback";
+  static postMessage_Callback_SerializedScriptValue_A_MessagePort_A(mthis, message, messagePorts) native "Worker_postMessage_Callback";
 
-  static $terminate_Callback(mthis) native "Worker_terminate_Callback_RESOLVER_STRING_0_";
+  static terminate_Callback(mthis) native "Worker_terminate_Callback";
 }
 
 class BlinkWorkerConsole {}
@@ -8197,7 +8099,7 @@
 class BlinkWorkerNavigator {}
 
 class BlinkWorkerPerformance {
-  static $now_Callback(mthis) native "WorkerPerformance_now_Callback_RESOLVER_STRING_0_";
+  static now_Callback(mthis) native "WorkerPerformance_now_Callback";
 }
 
 class BlinkXMLDocument {}
@@ -8205,47 +8107,47 @@
 class BlinkXMLHttpRequestEventTarget {}
 
 class BlinkXMLHttpRequest {
-  static $constructorCallback() native "XMLHttpRequest_constructorCallback";
+  static constructorCallback() native "XMLHttpRequest_constructorCallback";
 
-  static $readyState_Getter(mthis) native "XMLHttpRequest_readyState_Getter";
+  static readyState_Getter(mthis) native "XMLHttpRequest_readyState_Getter";
 
-  static $response_Getter(mthis) native "XMLHttpRequest_response_Getter";
+  static response_Getter(mthis) native "XMLHttpRequest_response_Getter";
 
-  static $responseText_Getter(mthis) native "XMLHttpRequest_responseText_Getter";
+  static responseText_Getter(mthis) native "XMLHttpRequest_responseText_Getter";
 
-  static $responseType_Getter(mthis) native "XMLHttpRequest_responseType_Getter";
+  static responseType_Getter(mthis) native "XMLHttpRequest_responseType_Getter";
 
-  static $responseType_Setter(mthis, value) native "XMLHttpRequest_responseType_Setter";
+  static responseType_Setter_DOMString(mthis, value) native "XMLHttpRequest_responseType_Setter";
 
-  static $responseXML_Getter(mthis) native "XMLHttpRequest_responseXML_Getter";
+  static responseXML_Getter(mthis) native "XMLHttpRequest_responseXML_Getter";
 
-  static $status_Getter(mthis) native "XMLHttpRequest_status_Getter";
+  static status_Getter(mthis) native "XMLHttpRequest_status_Getter";
 
-  static $statusText_Getter(mthis) native "XMLHttpRequest_statusText_Getter";
+  static statusText_Getter(mthis) native "XMLHttpRequest_statusText_Getter";
 
-  static $timeout_Getter(mthis) native "XMLHttpRequest_timeout_Getter";
+  static timeout_Getter(mthis) native "XMLHttpRequest_timeout_Getter";
 
-  static $timeout_Setter(mthis, value) native "XMLHttpRequest_timeout_Setter";
+  static timeout_Setter_ul(mthis, value) native "XMLHttpRequest_timeout_Setter";
 
-  static $upload_Getter(mthis) native "XMLHttpRequest_upload_Getter";
+  static upload_Getter(mthis) native "XMLHttpRequest_upload_Getter";
 
-  static $withCredentials_Getter(mthis) native "XMLHttpRequest_withCredentials_Getter";
+  static withCredentials_Getter(mthis) native "XMLHttpRequest_withCredentials_Getter";
 
-  static $withCredentials_Setter(mthis, value) native "XMLHttpRequest_withCredentials_Setter";
+  static withCredentials_Setter_boolean(mthis, value) native "XMLHttpRequest_withCredentials_Setter";
 
-  static $abort_Callback(mthis) native "XMLHttpRequest_abort_Callback_RESOLVER_STRING_0_";
+  static abort_Callback(mthis) native "XMLHttpRequest_abort_Callback";
 
-  static $getAllResponseHeaders_Callback(mthis) native "XMLHttpRequest_getAllResponseHeaders_Callback_RESOLVER_STRING_0_";
+  static getAllResponseHeaders_Callback(mthis) native "XMLHttpRequest_getAllResponseHeaders_Callback";
 
-  static $getResponseHeader_Callback(mthis, header) native "XMLHttpRequest_getResponseHeader_Callback_RESOLVER_STRING_1_DOMString";
+  static getResponseHeader_Callback_DOMString(mthis, header) native "XMLHttpRequest_getResponseHeader_Callback_DOMString";
 
-  static $open_Callback(mthis, method, url, async, user, password) native "XMLHttpRequest_open_Callback";
+  static open_Callback_DOMString_DOMString_boolean_DOMString_DOMString(mthis, method, url, async, user, password) native "XMLHttpRequest_open_Callback";
 
-  static $overrideMimeType_Callback(mthis, override) native "XMLHttpRequest_overrideMimeType_Callback_RESOLVER_STRING_1_DOMString";
+  static overrideMimeType_Callback_DOMString(mthis, override) native "XMLHttpRequest_overrideMimeType_Callback_DOMString";
 
-  static $send_Callback(mthis, data) native "XMLHttpRequest_send_Callback";
+  static send_Callback(mthis, data) native "XMLHttpRequest_send_Callback";
 
-  static $setRequestHeader_Callback(mthis, header, value) native "XMLHttpRequest_setRequestHeader_Callback_RESOLVER_STRING_2_DOMString_DOMString";
+  static setRequestHeader_Callback_DOMString_DOMString(mthis, header, value) native "XMLHttpRequest_setRequestHeader_Callback_DOMString_DOMString";
 }
 
 class BlinkXMLHttpRequestProgressEvent {}
@@ -8253,67 +8155,67 @@
 class BlinkXMLHttpRequestUpload {}
 
 class BlinkXMLSerializer {
-  static $_create_1constructorCallback() native "XMLSerializer_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "XMLSerializer_constructorCallback";
 
-  static $serializeToString_Callback(mthis, node) native "XMLSerializer_serializeToString_Callback_RESOLVER_STRING_1_Node";
+  static serializeToString_Callback_Node(mthis, node) native "XMLSerializer_serializeToString_Callback_Node";
 }
 
 class BlinkXPathEvaluator {
-  static $_create_1constructorCallback() native "XPathEvaluator_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "XPathEvaluator_constructorCallback";
 
-  static $createExpression_Callback(mthis, expression, resolver) native "XPathEvaluator_createExpression_Callback_RESOLVER_STRING_2_DOMString_XPathNSResolver";
+  static createExpression_Callback_DOMString_XPathNSResolver(mthis, expression, resolver) native "XPathEvaluator_createExpression_Callback_DOMString_XPathNSResolver";
 
-  static $createNSResolver_Callback(mthis, nodeResolver) native "XPathEvaluator_createNSResolver_Callback_RESOLVER_STRING_1_Node";
+  static createNSResolver_Callback_Node(mthis, nodeResolver) native "XPathEvaluator_createNSResolver_Callback_Node";
 
-  static $evaluate_Callback(mthis, expression, contextNode, resolver, type, inResult) native "XPathEvaluator_evaluate_Callback_RESOLVER_STRING_5_DOMString_Node_XPathNSResolver_unsigned short_XPathResult";
+  static evaluate_Callback_DOMString_Node_XPathNSResolver_us_XPathResult(mthis, expression, contextNode, resolver, type, inResult) native "XPathEvaluator_evaluate_Callback_DOMString_Node_XPathNSResolver_unsigned short_XPathResult";
 }
 
 class BlinkXPathExpression {
-  static $evaluate_Callback(mthis, contextNode, type, inResult) native "XPathExpression_evaluate_Callback_RESOLVER_STRING_3_Node_unsigned short_XPathResult";
+  static evaluate_Callback_Node_us_XPathResult(mthis, contextNode, type, inResult) native "XPathExpression_evaluate_Callback_Node_unsigned short_XPathResult";
 }
 
 class BlinkXPathNSResolver {
-  static $lookupNamespaceURI_Callback(mthis, prefix) native "XPathNSResolver_lookupNamespaceURI_Callback_RESOLVER_STRING_1_DOMString";
+  static lookupNamespaceURI_Callback_DOMString(mthis, prefix) native "XPathNSResolver_lookupNamespaceURI_Callback_DOMString";
 }
 
 class BlinkXPathResult {
-  static $booleanValue_Getter(mthis) native "XPathResult_booleanValue_Getter";
+  static booleanValue_Getter(mthis) native "XPathResult_booleanValue_Getter";
 
-  static $invalidIteratorState_Getter(mthis) native "XPathResult_invalidIteratorState_Getter";
+  static invalidIteratorState_Getter(mthis) native "XPathResult_invalidIteratorState_Getter";
 
-  static $numberValue_Getter(mthis) native "XPathResult_numberValue_Getter";
+  static numberValue_Getter(mthis) native "XPathResult_numberValue_Getter";
 
-  static $resultType_Getter(mthis) native "XPathResult_resultType_Getter";
+  static resultType_Getter(mthis) native "XPathResult_resultType_Getter";
 
-  static $singleNodeValue_Getter(mthis) native "XPathResult_singleNodeValue_Getter";
+  static singleNodeValue_Getter(mthis) native "XPathResult_singleNodeValue_Getter";
 
-  static $snapshotLength_Getter(mthis) native "XPathResult_snapshotLength_Getter";
+  static snapshotLength_Getter(mthis) native "XPathResult_snapshotLength_Getter";
 
-  static $stringValue_Getter(mthis) native "XPathResult_stringValue_Getter";
+  static stringValue_Getter(mthis) native "XPathResult_stringValue_Getter";
 
-  static $iterateNext_Callback(mthis) native "XPathResult_iterateNext_Callback_RESOLVER_STRING_0_";
+  static iterateNext_Callback(mthis) native "XPathResult_iterateNext_Callback";
 
-  static $snapshotItem_Callback(mthis, index) native "XPathResult_snapshotItem_Callback_RESOLVER_STRING_1_unsigned long";
+  static snapshotItem_Callback_ul(mthis, index) native "XPathResult_snapshotItem_Callback_unsigned long";
 }
 
 class BlinkXSLTProcessor {
-  static $_create_1constructorCallback() native "XSLTProcessor_constructorCallback_RESOLVER_STRING_0_";
+  static constructorCallback() native "XSLTProcessor_constructorCallback";
 
-  static $clearParameters_Callback(mthis) native "XSLTProcessor_clearParameters_Callback_RESOLVER_STRING_0_";
+  static clearParameters_Callback(mthis) native "XSLTProcessor_clearParameters_Callback";
 
-  static $getParameter_Callback(mthis, namespaceURI, localName) native "XSLTProcessor_getParameter_Callback";
+  static getParameter_Callback_DOMString_DOMString(mthis, namespaceURI, localName) native "XSLTProcessor_getParameter_Callback";
 
-  static $importStylesheet_Callback(mthis, stylesheet) native "XSLTProcessor_importStylesheet_Callback_RESOLVER_STRING_1_Node";
+  static importStylesheet_Callback_Node(mthis, stylesheet) native "XSLTProcessor_importStylesheet_Callback_Node";
 
-  static $removeParameter_Callback(mthis, namespaceURI, localName) native "XSLTProcessor_removeParameter_Callback";
+  static removeParameter_Callback_DOMString_DOMString(mthis, namespaceURI, localName) native "XSLTProcessor_removeParameter_Callback";
 
-  static $reset_Callback(mthis) native "XSLTProcessor_reset_Callback_RESOLVER_STRING_0_";
+  static reset_Callback(mthis) native "XSLTProcessor_reset_Callback";
 
-  static $setParameter_Callback(mthis, namespaceURI, localName, value) native "XSLTProcessor_setParameter_Callback";
+  static setParameter_Callback_DOMString_DOMString_DOMString(mthis, namespaceURI, localName, value) native "XSLTProcessor_setParameter_Callback";
 
-  static $transformToDocument_Callback(mthis, source) native "XSLTProcessor_transformToDocument_Callback_RESOLVER_STRING_1_Node";
+  static transformToDocument_Callback_Node(mthis, source) native "XSLTProcessor_transformToDocument_Callback_Node";
 
-  static $transformToFragment_Callback(mthis, source, docVal) native "XSLTProcessor_transformToFragment_Callback_RESOLVER_STRING_2_Node_Document";
+  static transformToFragment_Callback_Node_Document(mthis, source, docVal) native "XSLTProcessor_transformToFragment_Callback_Node_Document";
 }
 
 
@@ -8353,18 +8255,18 @@
 
   static get_top(_DOMWindowCrossFrame) native "Window_top_Getter";
 
-  static close(_DOMWindowCrossFrame) native "Window_close_Callback_RESOLVER_STRING_0_";
+  static close(_DOMWindowCrossFrame) native "Window_close_Callback";
 
   static postMessage(_DOMWindowCrossFrame, message, targetOrigin, [messagePorts]) native "Window_postMessage_Callback";
 }
 
 class Blink_HistoryCrossFrame {
   // _HistoryCrossFrame native entry points
-  static back(_HistoryCrossFrame) native "History_back_Callback_RESOLVER_STRING_0_";
+  static back(_HistoryCrossFrame) native "History_back_Callback";
 
-  static forward(_HistoryCrossFrame) native "History_forward_Callback_RESOLVER_STRING_0_";
+  static forward(_HistoryCrossFrame) native "History_forward_Callback";
 
-  static go(_HistoryCrossFrame, distance) native "History_go_Callback_RESOLVER_STRING_1_long";
+  static go(_HistoryCrossFrame, distance) native "History_go_Callback_long";
 }
 
 class Blink_LocationCrossFrame {
diff --git a/sdk/lib/_internal/compiler/implementation/closure.dart b/sdk/lib/_internal/compiler/implementation/closure.dart
index 5ad9384..689ac95 100644
--- a/sdk/lib/_internal/compiler/implementation/closure.dart
+++ b/sdk/lib/_internal/compiler/implementation/closure.dart
@@ -879,6 +879,8 @@
     return sb.toString();
   }
 
+  JavaScriptBackend get backend => compiler.backend;
+
   ClosureClassMap globalizeClosure(FunctionExpression node,
                                    LocalFunctionElement element) {
     String closureName = computeClosureName(element);
@@ -888,6 +890,7 @@
         new SynthesizedCallMethodElementX(Compiler.CALL_OPERATOR_NAME,
                                           element,
                                           globalizedElement);
+    backend.maybeMarkClosureAsNeededForReflection(globalizedElement, callElement, element);
     MemberElement enclosing = element.memberContext;
     enclosing.nestedClosures.add(callElement);
     globalizedElement.addMember(callElement, compiler);
diff --git a/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart b/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
index 1710012..e717c15 100644
--- a/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
+++ b/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
@@ -230,6 +230,7 @@
   }
 }
 
+// TODO(johnniwinther): Change to create [ConstExp] instead of [Constant].
 class CompileTimeConstantEvaluator extends Visitor {
   bool isEvaluatingConstant;
   final ConstantCompilerBase handler;
diff --git a/sdk/lib/_internal/compiler/implementation/compiler.dart b/sdk/lib/_internal/compiler/implementation/compiler.dart
index 20b914c..c278a58 100644
--- a/sdk/lib/_internal/compiler/implementation/compiler.dart
+++ b/sdk/lib/_internal/compiler/implementation/compiler.dart
@@ -278,9 +278,9 @@
   /// Called during codegen when [constant] has been used.
   void registerCompileTimeConstant(Constant constant, Registry registry) {}
 
-  /// Called during resolution when a metadata [constant] for [annotatedElement]
-  /// has been evaluated.
-  void registerMetadataConstant(Constant constant,
+  /// Called during resolution when a constant value for [metadata] on
+  /// [annotatedElement] has been evaluated.
+  void registerMetadataConstant(MetadataAnnotation metadata,
                                 Element annotatedElement,
                                 Registry registry) {}
 
@@ -1316,7 +1316,7 @@
     Selector.canonicalizedValues.clear();
     TypedSelector.canonicalizedValues.clear();
 
-    assert(uri != null || analyzeOnly);
+    assert(uri != null || analyzeOnly || hasIncrementalSupport);
     return new Future.sync(() {
       if (librariesToAnalyzeWhenRun != null) {
         return Future.forEach(librariesToAnalyzeWhenRun, (libraryUri) {
@@ -2002,6 +2002,8 @@
   String get name => 'Unknown task';
   int get timing => (watch != null) ? watch.elapsedMilliseconds : 0;
 
+  int get timingMicroseconds => (watch != null) ? watch.elapsedMicroseconds : 0;
+
   UserTag getProfilerTag() {
     if (profilerTag == null) profilerTag = new UserTag(name);
     return profilerTag;
diff --git a/sdk/lib/_internal/compiler/implementation/constants.dart b/sdk/lib/_internal/compiler/implementation/constants.dart
index b7a5fb2..cc7d11d 100644
--- a/sdk/lib/_internal/compiler/implementation/constants.dart
+++ b/sdk/lib/_internal/compiler/implementation/constants.dart
@@ -609,7 +609,7 @@
     if (compiler.backend.isInterceptorClass(type.element)) {
       return compiler.typesTask.nonNullType;
     }
-    return new ti.TypeMask.nonNullExact(type.element);
+    return new ti.TypeMask.nonNullExact(type.element, compiler.world);
   }
 
   accept(ConstantVisitor visitor) => visitor.visitConstructed(this);
diff --git a/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_builder.dart b/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_builder.dart
index eac20c1..fc8be3b 100644
--- a/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_builder.dart
@@ -52,32 +52,33 @@
         if (canBuild(element)) {
           TreeElements elementsMapping = element.resolvedAst.elements;
           element = element.implementation;
+          compiler.withCurrentElement(element, () {
+            SourceFile sourceFile = elementSourceFile(element);
+            IrBuilderVisitor builder =
+                new IrBuilderVisitor(elementsMapping, compiler, sourceFile);
+            ir.FunctionDefinition function;
+            ElementKind kind = element.kind;
+            if (kind == ElementKind.GENERATIVE_CONSTRUCTOR) {
+              // TODO(lry): build ir for constructors.
+            } else if (element.isDeferredLoaderGetter) {
+              // TODO(sigurdm): Build ir for deferred loader functions.
+            } else if (kind == ElementKind.GENERATIVE_CONSTRUCTOR_BODY ||
+                kind == ElementKind.FUNCTION ||
+                kind == ElementKind.GETTER ||
+                kind == ElementKind.SETTER) {
+              function = builder.buildFunction(element);
+            } else if (kind == ElementKind.FIELD) {
+              // TODO(lry): build ir for lazy initializers of static fields.
+            } else {
+              compiler.internalError(element, 'Unexpected element kind $kind.');
+            }
 
-          SourceFile sourceFile = elementSourceFile(element);
-          IrBuilderVisitor builder =
-              new IrBuilderVisitor(elementsMapping, compiler, sourceFile);
-          ir.FunctionDefinition function;
-          ElementKind kind = element.kind;
-          if (kind == ElementKind.GENERATIVE_CONSTRUCTOR) {
-            // TODO(lry): build ir for constructors.
-          } else if (element.isDeferredLoaderGetter) {
-            // TODO(sigurdm): Build ir for deferred loader functions.
-          } else if (kind == ElementKind.GENERATIVE_CONSTRUCTOR_BODY ||
-              kind == ElementKind.FUNCTION ||
-              kind == ElementKind.GETTER ||
-              kind == ElementKind.SETTER) {
-            function = builder.buildFunction(element);
-          } else if (kind == ElementKind.FIELD) {
-            // TODO(lry): build ir for lazy initializers of static fields.
-          } else {
-            compiler.internalError(element, 'Unexpected element kind $kind.');
-          }
-
-          if (function != null) {
-            nodes[element] = function;
-            compiler.tracer.traceCompilation(element.name, null);
-            compiler.tracer.traceGraph("IR Builder", function);
-          }
+            if (function != null) {
+              nodes[element] = function;
+              compiler.tracer.traceCompilation(element.name, null);
+              compiler.tracer.traceGraph("IR Builder", function);
+            }
+          });
         }
       });
     });
@@ -357,6 +358,32 @@
         (k) => new ir.InvokeStatic(element, selector, k, arguments));
   }
 
+  // TODO(johnniwinther): Build constants directly through [ConstExp] when these
+  // are created from analyzer2dart.
+  ir.Constant buildIntegerLiteral(int value) {
+    assert(isOpen);
+    ir.Node prim = makePrimConst(constantSystem.createInt(value));
+    add(new ir.LetPrim(prim));
+    return prim;
+  }
+
+
+  /// Creates a return statement `return value;` or `return;` if [value] is
+  /// null.
+  void buildReturn([ir.Primitive value]) {
+    // Build(Return(e), C) = C'[InvokeContinuation(return, x)]
+    //   where (C', x) = Build(e, C)
+    //
+    // Return without a subexpression is translated as if it were return null.
+    assert(isOpen);
+    if (value == null) {
+      value = makePrimConst(constantSystem.createNull());
+      add(new ir.LetPrim(value));
+    }
+    add(new ir.InvokeContinuation(returnContinuation, [value]));
+    current = null;
+  }
+
 }
 
 /**
@@ -365,6 +392,7 @@
  * an expression.
  */
 class IrBuilderVisitor extends ResolvedVisitor<ir.Primitive> with IrBuilder {
+  final Compiler compiler;
   final SourceFile sourceFile;
   final List<ir.Parameter> parameters;
 
@@ -402,14 +430,14 @@
   final DetectClosureVariables closureLocals;
 
   /// Construct a top-level visitor.
-  IrBuilderVisitor(TreeElements elements, Compiler compiler, this.sourceFile)
+  IrBuilderVisitor(TreeElements elements, this.compiler, this.sourceFile)
       : parameters = <ir.Parameter>[],
         environment = new Environment.empty(),
         breakCollectors = <JumpCollector>[],
         continueCollectors = <JumpCollector>[],
         localConstants = <ConstDeclaration>[],
         closureLocals = new DetectClosureVariables(elements),
-        super(elements, compiler) {
+        super(elements) {
     constantSystem = compiler.backend.constantSystem;
     constantBuilder = new ConstExpBuilder(this);
   }
@@ -421,7 +449,8 @@
   /// environment.  It has its own context for building an IR expression, so
   /// the built expression is not plugged into the parent's context.
   IrBuilderVisitor.delimited(IrBuilderVisitor parent)
-      : sourceFile = parent.sourceFile,
+      : compiler = parent.compiler,
+        sourceFile = parent.sourceFile,
         parameters = <ir.Parameter>[],
         environment = new Environment.from(parent.environment),
         breakCollectors = parent.breakCollectors,
@@ -430,7 +459,7 @@
         localConstants = parent.localConstants,
         currentFunction = parent.currentFunction,
         closureLocals = parent.closureLocals,
-        super(parent.elements, parent.compiler) {
+        super(parent.elements) {
     constantSystem = parent.constantSystem;
     returnContinuation = parent.returnContinuation;
   }
@@ -444,7 +473,8 @@
   /// which may be eliminated later if they are redundant---if they take on
   /// the same value at all invocation sites.
   IrBuilderVisitor.recursive(IrBuilderVisitor parent)
-      : sourceFile = parent.sourceFile,
+      : compiler = parent.compiler,
+        sourceFile = parent.sourceFile,
         parameters = <ir.Parameter>[],
         environment = new Environment.empty(),
         breakCollectors = parent.breakCollectors,
@@ -453,7 +483,7 @@
         localConstants = parent.localConstants,
         currentFunction = parent.currentFunction,
         closureLocals = parent.closureLocals,
-        super(parent.elements, parent.compiler) {
+        super(parent.elements) {
     constantSystem = parent.constantSystem;
     returnContinuation = parent.returnContinuation;
     for (Element element in parent.environment.index2variable) {
@@ -1027,18 +1057,13 @@
   //
   // Return without a subexpression is translated as if it were return null.
   ir.Primitive visitReturn(ast.Return node) {
-    assert(isOpen);
     // TODO(lry): support native returns.
     if (node.beginToken.value == 'native') return giveup(node, 'Native return');
-    ir.Primitive value;
     if (node.expression == null) {
-      value = makePrimConst(constantSystem.createNull());
-      add(new ir.LetPrim(value));
+      buildReturn();
     } else {
-      value = visit(node.expression);
+      buildReturn(visit(node.expression));
     }
-    add(new ir.InvokeContinuation(returnContinuation, [value]));
-    current = null;
     return null;
   }
 
diff --git a/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_nodes.dart b/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_nodes.dart
index 151def6..a338d84 100644
--- a/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_nodes.dart
@@ -7,7 +7,7 @@
 library dart2js.ir_nodes;
 
 import '../dart2jslib.dart' as dart2js show Constant, ConstructedConstant,
-  StringConstant, ListConstant, MapConstant;
+  StringConstant, ListConstant, MapConstant, invariant;
 import '../elements/elements.dart';
 import '../universe/universe.dart' show Selector, SelectorKind;
 import '../dart_types.dart' show DartType, GenericType;
@@ -260,9 +260,16 @@
                     List<Definition> args)
       : continuation = new Reference(cont),
         arguments = _referenceList(args) {
-    assert(target.isErroneous || target.isConstructor);
-    assert(target.isErroneous || type.isDynamic ||
-           type.element == target.enclosingElement);
+    assert(dart2js.invariant(target,
+        target.isErroneous || target.isConstructor,
+        message: "Constructor invocation target is not a constructor: "
+                 "$target."));
+    assert(dart2js.invariant(target,
+        target.isErroneous ||
+        type.isDynamic ||
+        type.element == target.enclosingClass.declaration,
+        message: "Constructor invocation type ${type} does not match enclosing "
+                 "class of target ${target}."));
   }
 
   accept(Visitor visitor) => visitor.visitInvokeConstructor(this);
diff --git a/sdk/lib/_internal/compiler/implementation/dart2js.dart b/sdk/lib/_internal/compiler/implementation/dart2js.dart
index 877393a..e030603 100644
--- a/sdk/lib/_internal/compiler/implementation/dart2js.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart2js.dart
@@ -9,7 +9,6 @@
 import 'dart:io'
     show exit, File, FileMode, Platform, RandomAccessFile, FileSystemException,
          stdin, stderr;
-import 'dart:math' as math;
 
 import '../compiler.dart' as api;
 import 'source_file.dart';
@@ -101,7 +100,6 @@
 FormattingDiagnosticHandler diagnosticHandler;
 
 Future compile(List<String> argv) {
-  bool isWindows = (Platform.operatingSystem == 'windows');
   stackTraceFilePrefix = '$currentDirectory';
   Uri libraryRoot = currentDirectory;
   Uri out = currentDirectory.resolve('out.js');
@@ -259,17 +257,6 @@
     }
   }
 
-  Uri computePrecompiledUri() {
-    String extension = 'precompiled.js';
-    String outPath = out.path;
-    if (outPath.endsWith('.js')) {
-      outPath = outPath.substring(0, outPath.length - 3);
-      return out.resolve('$outPath.$extension');
-    } else {
-      return out.resolve(extension);
-    }
-  }
-
   List<String> arguments = <String>[];
   List<OptionHandler> handlers = <OptionHandler>[
     new OptionHandler('-[chvm?]+', handleShortOptions),
@@ -333,7 +320,9 @@
 
   if (hasDisallowUnsafeEval) {
     String precompiledName =
-        relativize(currentDirectory, computePrecompiledUri(), isWindows);
+        relativize(currentDirectory,
+                   RandomAccessFileOutputProvider.computePrecompiledUri(out),
+                   Platform.isWindows);
     helpAndFail("Option '--disallow-unsafe-eval' has been removed."
                 " Instead, the compiler generates a file named"
                 " '$precompiledName'.");
@@ -371,12 +360,12 @@
 
   diagnosticHandler.info('Package root is $packageRoot');
 
-  int totalCharactersWritten = 0;
-
   options.add('--out=$out');
   options.add('--source-map=$sourceMapOut');
 
-  List<String> allOutputFiles = new List<String>();
+  RandomAccessFileOutputProvider outputProvider =
+      new RandomAccessFileOutputProvider(
+          out, sourceMapOut, onInfo: diagnosticHandler.info, onFailure: fail);
 
   compilationDone(String code) {
     if (analyzeOnly) return;
@@ -387,105 +376,29 @@
                 getDepsOutput(inputProvider.sourceFiles));
     diagnosticHandler.info(
          'Compiled ${inputProvider.dartCharactersRead} characters Dart '
-         '-> $totalCharactersWritten characters $outputLanguage '
-         'in ${relativize(currentDirectory, out, isWindows)}');
+         '-> ${outputProvider.totalCharactersWritten} characters '
+         '$outputLanguage in '
+         '${relativize(currentDirectory, out, Platform.isWindows)}');
     if (diagnosticHandler.verbose) {
       String input = uriPathToNative(arguments[0]);
       print('Dart file ($input) compiled to $outputLanguage.');
       print('Wrote the following files:');
-      for (String filename in allOutputFiles) {
+      for (String filename in outputProvider.allOutputFiles) {
         print("  $filename");
       }
     } else if (!explicitOut) {
       String input = uriPathToNative(arguments[0]);
-      String output = relativize(currentDirectory, out, isWindows);
+      String output = relativize(currentDirectory, out, Platform.isWindows);
       print('Dart file ($input) compiled to $outputLanguage: $output');
     }
   }
 
-  EventSink<String> outputProvider(String name, String extension) {
-    Uri uri;
-    String sourceMapFileName;
-    bool isPrimaryOutput = false;
-    if (name == '') {
-      if (extension == 'js' || extension == 'dart') {
-        isPrimaryOutput = true;
-        uri = out;
-        sourceMapFileName =
-            sourceMapOut.path.substring(sourceMapOut.path.lastIndexOf('/') + 1);
-      } else if (extension == 'precompiled.js') {
-        uri = computePrecompiledUri();
-        diagnosticHandler.info(
-            "File ($uri) is compatible with header"
-            " \"Content-Security-Policy: script-src 'self'\"");
-      } else if (extension == 'js.map' || extension == 'dart.map') {
-        uri = sourceMapOut;
-      } else if (extension == 'info.html' || extension == "info.json") {
-        String outName = out.path.substring(out.path.lastIndexOf('/') + 1);
-        uri = out.resolve('$outName.$extension');
-      } else {
-        fail('Unknown extension: $extension');
-      }
-    } else {
-      uri = out.resolve('$name.$extension');
-    }
-
-    if (uri.scheme != 'file') {
-      fail('Unhandled scheme ${uri.scheme} in $uri.');
-    }
-
-    RandomAccessFile output;
-    try {
-      output = new File(uri.toFilePath()).openSync(mode: FileMode.WRITE);
-    } on FileSystemException catch(e) {
-      fail('$e');
-    }
-
-    allOutputFiles.add(relativize(currentDirectory, uri, isWindows));
-
-    int charactersWritten = 0;
-
-    writeStringSync(String data) {
-      // Write the data in chunks of 8kb, otherwise we risk running OOM.
-      int chunkSize = 8*1024;
-
-      int offset = 0;
-      while (offset < data.length) {
-        output.writeStringSync(
-            data.substring(offset, math.min(offset + chunkSize, data.length)));
-        offset += chunkSize;
-      }
-      charactersWritten += data.length;
-    }
-
-    onDone() {
-      output.closeSync();
-      if (isPrimaryOutput) {
-        totalCharactersWritten += charactersWritten;
-      }
-    }
-
-    return new EventSinkWrapper(writeStringSync, onDone);
-  }
-
   return compileFunc(uri, libraryRoot, packageRoot,
                      inputProvider, diagnosticHandler,
                      options, outputProvider, environment)
             .then(compilationDone);
 }
 
-class EventSinkWrapper extends EventSink<String> {
-  var onAdd, onClose;
-
-  EventSinkWrapper(this.onAdd, this.onClose);
-
-  void add(String data) => onAdd(data);
-
-  void addError(error, [StackTrace stackTrace]) => throw error;
-
-  void close() => onClose();
-}
-
 class AbortLeg {
   final message;
   AbortLeg(this.message);
@@ -629,7 +542,7 @@
   --dump-info
     Generates an out.info.json file with information about the generated code.
     You can inspect the generated file with the viewer at:
-    http://dart-lang.github.io/dump-info-visualizer/build/web/viewer.html
+    https://dart-lang.github.io/dump-info-visualizer/
 
 '''.trim());
 }
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
index 1dbd625..0c060b7 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
@@ -19,36 +19,21 @@
 
 class DartBackend extends Backend {
   final List<CompilerTask> tasks;
-  final bool forceStripTypes;
   final bool stripAsserts;
-  // TODO(antonm): make available from command-line options.
-  final bool outputAst = false;
-  final Map<ClassNode, List<Node>> memberNodes;
-
-  /// If `true`, libraries are generated into separate files.
-  final bool multiFile;
-
-  PlaceholderRenamer placeholderRenamer;
 
   // TODO(zarah) Maybe change this to a command-line option.
   // Right now, it is set by the tests.
   bool useMirrorHelperLibrary = false;
 
-  /// Initialized if the useMirrorHelperLibrary field is set.
-  MirrorRenamer mirrorRenamer;
+  /// Updated to a [MirrorRenamerImpl] instance if the [useMirrorHelperLibrary]
+  /// field is set and mirror are needed.
+  MirrorRenamer mirrorRenamer = const MirrorRenamer();
 
-  /// Initialized when dart:mirrors is loaded if the useMirrorHelperLibrary
-  /// field is set.
-  LibraryElement mirrorHelperLibrary;
-  /// Initialized when dart:mirrors is loaded if the useMirrorHelperLibrary
-  /// field is set.
-  FunctionElement mirrorHelperGetNameFunction;
-  /// Initialized when dart:mirrors is loaded if the useMirrorHelperLibrary
-  /// field is set.
-  Element mirrorHelperSymbolsMap;
+  final DartOutputter outputter;
 
-  Iterable<Element> get resolvedElements =>
-      compiler.enqueuer.resolution.resolvedElements;
+  // Used in test.
+  PlaceholderRenamer get placeholderRenamer => outputter.renamer;
+  Map<ClassNode, List<Node>> get memberNodes => outputter.output.memberNodes;
 
   ConstantSystem get constantSystem {
     return constantCompilerTask.constantCompiler.constantSystem;
@@ -72,7 +57,7 @@
    * These restrictions can be less strict.
    */
   bool isSafeToRemoveTypeDeclarations(
-      Map<ClassElement, Set<Element>> classMembers) {
+      Map<ClassElement, Iterable<Element>> classMembers) {
     ClassElement typeErrorElement = compiler.coreLibrary.find('TypeError');
     if (classMembers.containsKey(typeErrorElement) ||
         compiler.resolverWorld.isChecks.any(
@@ -105,12 +90,15 @@
     return true;
   }
 
-  DartBackend(Compiler compiler, List<String> strips, {this.multiFile})
+  DartBackend(Compiler compiler, List<String> strips, {bool multiFile})
       : tasks = <CompilerTask>[],
-        memberNodes = new Map<ClassNode, List<Node>>(),
-        forceStripTypes = strips.indexOf('types') != -1,
         stripAsserts = strips.indexOf('asserts') != -1,
-        constantCompilerTask  = new DartConstantTask(compiler),
+        constantCompilerTask = new DartConstantTask(compiler),
+        outputter = new DartOutputter(
+            compiler, compiler.outputProvider,
+            forceStripTypes: strips.indexOf('types') != -1,
+            multiFile: multiFile,
+            enableMinification: compiler.enableMinification),
         super(compiler) {
     resolutionCallbacks = new DartResolutionCallbacks(this);
   }
@@ -139,19 +127,6 @@
 
   void codegen(CodegenWorkItem work) { }
 
-  bool isUserLibrary(LibraryElement lib) => !lib.isPlatformLibrary;
-
-  /**
-   * Tells whether we should output given element. Corelib classes like
-   * Object should not be in the resulting code.
-   */
-  bool shouldOutput(Element element) {
-    return (isUserLibrary(element.library) &&
-            !element.isSynthesized &&
-            element is !AbstractFieldElement)
-        || element.library == mirrorHelperLibrary;
-  }
-
   /// Create an [ElementAst] from the CPS IR.
   static ElementAst createElementAst(Compiler compiler,
                                      Tracer tracer,
@@ -207,80 +182,8 @@
   }
 
   void assembleProgram() {
-    // Conservatively traverse all platform libraries and collect member names.
-    // TODO(antonm): ideally we should only collect names of used members,
-    // however as of today there are problems with names of some core library
-    // interfaces, most probably for interfaces of literals.
-    final fixedMemberNames = new Set<String>();
 
-    Map<Element, LibraryElement> reexportingLibraries =
-        <Element, LibraryElement>{};
-
-    for (final library in compiler.libraryLoader.libraries) {
-      if (!library.isPlatformLibrary) continue;
-      library.forEachLocalMember((Element element) {
-        if (element.isClass) {
-          ClassElement classElement = element;
-          assert(invariant(classElement, classElement.isResolved,
-              message: "Unresolved platform class."));
-          classElement.forEachLocalMember((member) {
-            final name = member.name;
-            // Skip operator names.
-            if (!name.startsWith(r'operator$')) {
-              // Fetch name of named constructors and factories if any,
-              // otherwise store regular name.
-              // TODO(antonm): better way to analyze the name.
-              fixedMemberNames.add(name.split(r'$').last);
-            }
-          });
-        }
-        // Even class names are added due to a delicate problem we have:
-        // if one imports dart:core with a prefix, we cannot tell prefix.name
-        // from dynamic invocation (alas!).  So we'd better err on preserving
-        // those names.
-        fixedMemberNames.add(element.name);
-      });
-
-      for (Element export in library.exports) {
-        if (!library.isInternalLibrary &&
-            export.library.isInternalLibrary) {
-          // If an element of an internal library is reexported by a platform
-          // library, we have to import the reexporting library instead of the
-          // internal library, because the internal library is an
-          // implementation detail of dart2js.
-          reexportingLibraries[export] = library;
-        }
-      }
-    }
-    // As of now names of named optionals are not renamed. Therefore add all
-    // field names used as named optionals into [fixedMemberNames].
-    for (final element in resolvedElements) {
-      if (!element.isConstructor) continue;
-      Link<Element> optionalParameters =
-          element.functionSignature.optionalParameters;
-      for (final optional in optionalParameters) {
-        if (!optional.isInitializingFormal) continue;
-        fixedMemberNames.add(optional.name);
-      }
-    }
-    // The VM will automatically invoke the call method of objects
-    // that are invoked as functions. Make sure to not rename that.
-    fixedMemberNames.add('call');
-    // TODO(antonm): TypeError.srcType and TypeError.dstType are defined in
-    // runtime/lib/error.dart. Overall, all DartVM specific libs should be
-    // accounted for.
-    fixedMemberNames.add('srcType');
-    fixedMemberNames.add('dstType');
-
-    if (useMirrorHelperLibrary && compiler.mirrorsLibrary != null) {
-        mirrorRenamer = new MirrorRenamer(compiler, this);
-    } else {
-      useMirrorHelperLibrary = false;
-    }
-
-    final elementAsts = new Map<Element, ElementAst>();
-
-    ElementAst parse(AstElement element) {
+    ElementAst computeElementAst(AstElement element) {
       if (!compiler.irBuilder.hasIr(element)) {
         return new ElementAst(element);
       } else {
@@ -290,17 +193,11 @@
       }
     }
 
-    List<LibraryElement> userLibraries =
-        compiler.libraryLoader.libraries.where(isUserLibrary).toList();
-
-    Set<Element> topLevelElements = new Set<Element>();
-    Map<ClassElement, Set<Element>> classMembers =
-        new Map<ClassElement, Set<Element>>();
-
-    // Build all top level elements to emit and necessary class members.
-    var newTypedefElementCallback, newClassElementCallback;
-
-    void processElement(Element element, ElementAst elementAst) {
+    // TODO(johnniwinther): Remove the need for this method.
+    void postProcessElementAst(
+        AstElement element, ElementAst elementAst,
+        newTypedefElementCallback,
+        newClassElementCallback) {
       ReferencedElementCollector collector =
           new ReferencedElementCollector(compiler,
                                          element,
@@ -308,252 +205,50 @@
                                          newTypedefElementCallback,
                                          newClassElementCallback);
       collector.collect();
-      elementAsts[element] = elementAst;
     }
 
-    addTopLevel(AstElement element, ElementAst elementAst) {
-      if (topLevelElements.contains(element)) return;
-      topLevelElements.add(element);
-      processElement(element, elementAst);
+    /**
+     * Tells whether we should output given element. Corelib classes like
+     * Object should not be in the resulting code.
+     */
+    bool shouldOutput(Element element) {
+      return (!element.library.isPlatformLibrary &&
+              !element.isSynthesized &&
+              element is! AbstractFieldElement)
+          || mirrorRenamer.isMirrorHelperLibrary(element.library);
     }
 
-    addClass(ClassElement classElement) {
-      addTopLevel(classElement, new ElementAst(classElement));
-      classMembers.putIfAbsent(classElement, () => new Set());
-    }
+    String assembledCode = outputter.assembleProgram(
+        libraries: compiler.libraryLoader.libraries,
+        instantiatedClasses: compiler.resolverWorld.instantiatedClasses,
+        resolvedElements: compiler.enqueuer.resolution.resolvedElements,
+        usedTypeLiterals: usedTypeLiterals,
+        postProcessElementAst: postProcessElementAst,
+        computeElementAst: computeElementAst,
+        shouldOutput: shouldOutput,
+        isSafeToRemoveTypeDeclarations: isSafeToRemoveTypeDeclarations,
+        sortElements: sortElements,
+        mirrorRenamer: mirrorRenamer,
+        mainFunction: compiler.mainFunction,
+        outputUri: compiler.outputUri);
+    compiler.assembledCode = assembledCode;
 
-    newTypedefElementCallback = (TypedefElement element) {
-      if (!shouldOutput(element)) return;
-      addTopLevel(element, new ElementAst(element));
-    };
-    newClassElementCallback = (ClassElement classElement) {
-      if (!shouldOutput(classElement)) return;
-      addClass(classElement);
-    };
-
-    compiler.resolverWorld.instantiatedClasses.forEach(
-        (ClassElement classElement) {
-      if (shouldOutput(classElement)) addClass(classElement);
-    });
-    resolvedElements.forEach((element) {
-      if (!shouldOutput(element) ||
-          !compiler.enqueuer.resolution.hasBeenResolved(element)) {
-        return;
-      }
-      ElementAst elementAst = parse(element);
-
-      if (element.isClassMember) {
-        ClassElement enclosingClass = element.enclosingClass;
-        assert(enclosingClass.isClass);
-        assert(enclosingClass.isTopLevel);
-        assert(shouldOutput(enclosingClass));
-        addClass(enclosingClass);
-        classMembers[enclosingClass].add(element);
-        processElement(element, elementAst);
-      } else {
-        if (element.isTopLevel) {
-          addTopLevel(element, elementAst);
-        }
-      }
-    });
-    Set<ClassElement> emitNoMembersFor = new Set<ClassElement>();
-    usedTypeLiterals.forEach((ClassElement element) {
-      if (shouldOutput(element)) {
-        if (!topLevelElements.contains(element)) {
-          // The class is only referenced by type literals.
-          emitNoMembersFor.add(element);
-        }
-        addClass(element);
-      }
-    });
-
-    // Create all necessary placeholders.
-    PlaceholderCollector collector =
-        new PlaceholderCollector(compiler, fixedMemberNames, elementAsts);
-    makePlaceholders(element) {
-      bool oldUseHelper = useMirrorHelperLibrary;
-      useMirrorHelperLibrary = (useMirrorHelperLibrary
-                               && element.library != mirrorHelperLibrary);
-      collector.collect(element);
-      useMirrorHelperLibrary = oldUseHelper;
-
-      if (element.isClass) {
-        classMembers[element].forEach(makePlaceholders);
-      }
-    }
-    topLevelElements.forEach(makePlaceholders);
-    // Create renames.
-    bool shouldCutDeclarationTypes = forceStripTypes
-        || (compiler.enableMinification
-            && isSafeToRemoveTypeDeclarations(classMembers));
-
-    placeholderRenamer =
-        new PlaceholderRenamer(compiler, fixedMemberNames, reexportingLibraries,
-            cutDeclarationTypes: shouldCutDeclarationTypes);
-
-    placeholderRenamer.computeRenames(collector);
-
-    // Sort elements.
-    final List<Element> sortedTopLevels = sortElements(topLevelElements);
-    final Map<ClassElement, List<Element>> sortedClassMembers =
-        new Map<ClassElement, List<Element>>();
-    classMembers.forEach((classElement, members) {
-      sortedClassMembers[classElement] = sortElements(members);
-    });
-
-    if (outputAst) {
-      // TODO(antonm): Ideally XML should be a separate backend.
-      // TODO(antonm): obey renames and minification, at least as an option.
-      StringBuffer sb = new StringBuffer();
-      outputElement(element) {
-        sb.write(element.parseNode(compiler).toDebugString());
-      }
-
-      // Emit XML for AST instead of the program.
-      for (final topLevel in sortedTopLevels) {
-        if (topLevel.isClass && !emitNoMembersFor.contains(topLevel)) {
-          // TODO(antonm): add some class info.
-          sortedClassMembers[topLevel].forEach(outputElement);
-        } else {
-          outputElement(topLevel);
-        }
-      }
-      compiler.assembledCode = '<Program>\n$sb</Program>\n';
-      return;
-    }
-
-    final List<Node> topLevelNodes = <Node>[];
-    for (final element in sortedTopLevels) {
-      topLevelNodes.add(elementAsts[element].ast);
-      if (element.isClass && !element.isMixinApplication) {
-        final members = <Node>[];
-        for (final member in sortedClassMembers[element]) {
-          members.add(elementAsts[member].ast);
-        }
-        memberNodes[elementAsts[element].ast] = members;
-      }
-    }
-
-    if (useMirrorHelperLibrary) {
-      mirrorRenamer.addRenames(placeholderRenamer.renames,
-                               topLevelNodes, collector);
-    }
-
-    Map<LibraryElement, String> outputPaths = new Map<LibraryElement, String>();
-    Map<LibraryElement, EmitterUnparser> unparsers =
-        new Map<LibraryElement, EmitterUnparser>();
-
-    // The single unparser used if we collect all the output in one file.
-    EmitterUnparser mainUnparser = multiFile
-        ? null
-        : new EmitterUnparser(placeholderRenamer.renames,
-            stripTypes: forceStripTypes,
-            minify: compiler.enableMinification);
-
-    if (multiFile) {
-      // TODO(sigurdm): Factor handling of library-paths out from emitting.
-      String mainName = compiler.outputUri.pathSegments.last;
-      String mainBaseName = mainName.endsWith(".dart")
-          ? mainName.substring(0, mainName.length - 5)
-          : mainName;
-      // Map each library to a path based on the uri of the original
-      // library and [compiler.outputUri].
-      Set<String> usedLibraryPaths = new Set<String>();
-      for (LibraryElement library in userLibraries) {
-        if (library == compiler.mainApp) {
-          outputPaths[library] = mainBaseName;
-        } else {
-          List<String> names =
-              library.canonicalUri.pathSegments.last.split(".");
-          if (names.last == "dart") {
-            names = names.sublist(0, names.length - 1);
-          }
-          outputPaths[library] =
-              "$mainBaseName.${makeUnique(names.join("."), usedLibraryPaths)}";
-        }
-      }
-
-      /// Rewrites imports/exports to refer to the paths given in [outputPaths].
-      for(LibraryElement outputLibrary in userLibraries) {
-        EmitterUnparser unparser = new EmitterUnparser(
-            placeholderRenamer.renames,
-            stripTypes: forceStripTypes,
-            minify: compiler.enableMinification);
-        unparsers[outputLibrary] = unparser;
-        LibraryName libraryName = outputLibrary.libraryTag;
-        if (libraryName != null) {
-          unparser.visitLibraryName(libraryName);
-        }
-        for (LibraryTag tag in outputLibrary.tags) {
-          if (tag is! LibraryDependency) continue;
-          LibraryDependency dependency = tag;
-          LibraryElement libraryElement =
-              outputLibrary.getLibraryFromTag(dependency);
-          String uri = outputPaths.containsKey(libraryElement)
-              ? "${outputPaths[libraryElement]}.dart"
-              : libraryElement.canonicalUri.toString();
-          if (dependency is Import) {
-            unparser.unparseImportTag(uri);
-          } else {
-            unparser.unparseExportTag(uri);
-          }
-        }
-      }
-    } else {
-      for(LibraryElement library in placeholderRenamer.platformImports) {
-        if (library.isPlatformLibrary && !library.isInternalLibrary) {
-          mainUnparser.unparseImportTag(library.canonicalUri.toString());
-        }
-      }
-    }
-
-    for (int i = 0; i < sortedTopLevels.length; i++) {
-      Element element = sortedTopLevels[i];
-      Node node = topLevelNodes[i];
-      Unparser unparser = multiFile ? unparsers[element.library] : mainUnparser;
-      if (node is ClassNode) {
-        // TODO(smok): Filter out default constructors here.
-        unparser.unparseClassWithBody(node, memberNodes[node]);
-      } else {
-        unparser.unparse(node);
-      }
-      unparser.newline();
-    }
-
-    int totalSize = 0;
-    if (multiFile) {
-      for(LibraryElement outputLibrary in userLibraries) {
-        // TODO(sigurdm): Make the unparser output directly into the buffer instead
-        // of caching in `.result`.
-        String code = unparsers[outputLibrary].result;
-        totalSize += code.length;
-        compiler.outputProvider(outputPaths[outputLibrary], "dart")
-             ..add(code)
-             ..close();
-      }
-      // TODO(sigurdm): We should get rid of compiler.assembledCode.
-      compiler.assembledCode = unparsers[compiler.mainApp].result;
-    } else {
-      compiler.assembledCode = mainUnparser.result;
-      compiler.outputProvider("", "dart")
-           ..add(compiler.assembledCode)
-           ..close();
-
-      totalSize = compiler.assembledCode.length;
-    }
+    int totalSize = assembledCode.length;
 
     // Output verbose info about size ratio of resulting bundle to all
     // referenced non-platform sources.
-    logResultBundleSizeInfo(topLevelElements, totalSize);
+    logResultBundleSizeInfo(
+        outputter.libraryInfo.userLibraries,
+        outputter.elementInfo.topLevelElements,
+        assembledCode.length);
   }
 
-  void logResultBundleSizeInfo(Set<Element> topLevelElements,
+  void logResultBundleSizeInfo(Iterable<LibraryElement> userLibraries,
+                               Iterable<Element> topLevelElements,
                                int totalOutputSize) {
-    Iterable<LibraryElement> referencedLibraries =
-        compiler.libraryLoader.libraries.where(isUserLibrary);
     // Sum total size of scripts in each referenced library.
     int nonPlatformSize = 0;
-    for (LibraryElement lib in referencedLibraries) {
+    for (LibraryElement lib in userLibraries) {
       for (CompilationUnitElement compilationUnit in lib.compilationUnits) {
         nonPlatformSize += compilationUnit.script.file.length;
       }
@@ -583,35 +278,20 @@
       return compiler.libraryLoader.loadLibrary(
           compiler.translateResolvedUri(
               loadedLibraries[Compiler.DART_MIRRORS],
-              MirrorRenamer.DART_MIRROR_HELPER, null)).
-          then((LibraryElement element) {
-        mirrorHelperLibrary = element;
-        mirrorHelperGetNameFunction = mirrorHelperLibrary.find(
-            MirrorRenamer.MIRROR_HELPER_GET_NAME_FUNCTION);
-        mirrorHelperSymbolsMap = mirrorHelperLibrary.find(
-            MirrorRenamer.MIRROR_HELPER_SYMBOLS_MAP_NAME);
+              MirrorRenamerImpl.DART_MIRROR_HELPER, null)).
+          then((LibraryElement library) {
+        mirrorRenamer = new MirrorRenamerImpl(compiler, this, library);
       });
     }
     return new Future.value();
   }
 
-  void registerStaticSend(Element element, Node node) {
-    if (useMirrorHelperLibrary) {
-      mirrorRenamer.registerStaticSend(element, node);
-    }
-  }
-
-  void registerMirrorHelperElement(Element element, Node node) {
-    if (mirrorHelperLibrary != null
-        && element.library == mirrorHelperLibrary) {
-      mirrorRenamer.registerHelperElement(element, node);
-    }
-  }
-
   void registerStaticUse(Element element, Enqueuer enqueuer) {
-    if (useMirrorHelperLibrary &&
-        element == compiler.mirrorSystemGetNameFunction) {
-      enqueuer.addToWorkList(mirrorHelperGetNameFunction);
+    if (element == compiler.mirrorSystemGetNameFunction) {
+      FunctionElement getNameFunction = mirrorRenamer.getNameFunction;
+      if (getNameFunction != null) {
+        enqueuer.addToWorkList(getNameFunction);
+      }
     }
   }
 }
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/backend_ast_to_frontend_ast.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/backend_ast_to_frontend_ast.dart
index 320add2..9db5ef2 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/backend_ast_to_frontend_ast.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/backend_ast_to_frontend_ast.dart
@@ -23,6 +23,10 @@
 /// backend.
 const bool INSERT_NEW_BACKEND_COMMENT = true;
 
+/// The comment inserted in front of every function body.
+const String NEW_BACKEND_COMMENT =
+    INSERT_NEW_BACKEND_COMMENT ? '/* new backend */ ' : '';
+
 /// Converts backend ASTs to frontend ASTs.
 class TreePrinter {
   dart2js.TreeElementMapping treeElements;
@@ -236,11 +240,12 @@
 
   tree.Node makeStaticReceiver(elements.Element element) {
     if (treeElements == null) return null;
-    if (element.enclosingElement is elements.ClassElement) {
+    if (element.isStatic) {
+      elements.ClassElement enclosingClass = element.enclosingClass;
       tree.Send send = new tree.Send(
           null,
-          makeIdentifier(element.enclosingElement.name));
-      treeElements[send] = element.enclosingElement;
+          makeIdentifier(enclosingClass.name));
+      treeElements[send] = enclosingClass;
       return send;
     } else {
       return null;
@@ -579,7 +584,7 @@
 
   /// A comment token to be inserted when [INSERT_NEW_BACKEND_COMMENT] is true.
   final SymbolToken newBackendComment = new SymbolToken(
-      const PrecedenceInfo('/* new backend */ ', 0, OPEN_CURLY_BRACKET_TOKEN),
+      const PrecedenceInfo(NEW_BACKEND_COMMENT, 0, OPEN_CURLY_BRACKET_TOKEN),
       -1);
 
   tree.Node makeFunctionBody(Statement stmt) {
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/dart_backend.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/dart_backend.dart
index ea26d4d..051a49b 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/dart_backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/dart_backend.dart
@@ -24,6 +24,7 @@
 import 'backend_ast_nodes.dart' as backend_ast;
 import 'backend_ast_to_frontend_ast.dart' as backend2frontend;
 import '../tracer.dart';
+import '../../compiler.dart' show CompilerOutputProvider;
 
 import '../scanner/scannerlib.dart' show StringToken,
                                          Keyword,
@@ -35,3 +36,4 @@
 part 'backend.dart';
 part 'renamer.dart';
 part 'placeholder_collector.dart';
+part 'outputter.dart';
\ No newline at end of file
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/outputter.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/outputter.dart
new file mode 100644
index 0000000..77ea482
--- /dev/null
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/outputter.dart
@@ -0,0 +1,558 @@
+// Copyright (c) 2014, 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.
+
+part of dart_backend;
+
+typedef bool IsSafeToRemoveTypeDeclarations(
+    Map<ClassElement, Iterable<Element>> classMembers);
+typedef void ElementCallback<E>(E element);
+typedef void ElementPostProcessFunction(
+    AstElement element, ElementAst elementAst,
+    ElementCallback<TypedefElement> typedefCallback,
+    ElementCallback<ClassElement> classCallback);
+typedef ElementAst ComputeElementAstFunction(AstElement element);
+typedef bool ElementFilter(Element element);
+typedef List<Element> ElementSorter(Iterable<Element> elements);
+
+/// Output engine for dart2dart that is shared between the dart2js and the
+/// analyzer implementations of dart2dart.
+class DartOutputter {
+  final DiagnosticListener listener;
+  final CompilerOutputProvider outputProvider;
+  final bool forceStripTypes;
+
+  // TODO(antonm): make available from command-line options.
+  final bool outputAst = false;
+  final bool enableMinification;
+
+  /// If `true`, libraries are generated into separate files.
+  final bool multiFile;
+
+  /// Internal structures accessible for tests and logging.
+  // TODO(johnniwinther): Clean this up.
+  PlaceholderRenamer renamer;
+  MainOutputGenerator output;
+  LibraryInfo libraryInfo;
+  ElementInfo elementInfo;
+
+  // TODO(johnniwinther): Support recompilation.
+  DartOutputter(this.listener, this.outputProvider,
+                {bool this.forceStripTypes: false,
+                 bool this.enableMinification: false,
+                 bool this.multiFile: false});
+
+  /// Generate Dart code for the program starting at [mainFunction].
+  ///
+  /// [libraries] is the set of all libraries (user/package/sdk) that are
+  /// referenced in the program.
+  ///
+  /// [instantiatedClasses] is the set of classes that are potentially
+  /// instantiated in the program.
+  ///
+  /// [resolvedElements] is the set of methods, constructors, and fields that
+  /// are potentially accessed/called in the program.
+  ///
+  /// The [sortElements] function is used to sort [instantiatedClasses] and
+  /// [resolvedElements] in the generated output.
+  String assembleProgram({
+      MirrorRenamer mirrorRenamer: const MirrorRenamer(),
+      Iterable<LibraryElement> libraries,
+      Iterable<Element> instantiatedClasses,
+      Iterable<Element> resolvedElements,
+      Iterable<ClassElement> usedTypeLiterals: const <ClassElement>[],
+      FunctionElement mainFunction,
+      Uri outputUri,
+      ElementPostProcessFunction postProcessElementAst,
+      ComputeElementAstFunction computeElementAst,
+      ElementFilter shouldOutput,
+      IsSafeToRemoveTypeDeclarations isSafeToRemoveTypeDeclarations,
+      ElementSorter sortElements}) {
+
+    assert(invariant(NO_LOCATION_SPANNABLE, libraries != null,
+        message: "'libraries' must be non-null."));
+    assert(invariant(NO_LOCATION_SPANNABLE, instantiatedClasses != null,
+        message: "'instantiatedClasses' must be non-null."));
+    assert(invariant(NO_LOCATION_SPANNABLE, resolvedElements != null,
+        message: "'resolvedElements' must be non-null."));
+    assert(invariant(NO_LOCATION_SPANNABLE, mainFunction != null,
+        message: "'mainFunction' must be non-null."));
+    assert(invariant(NO_LOCATION_SPANNABLE, computeElementAst != null,
+        message: "'computeElementAst' must be non-null."));
+    assert(invariant(NO_LOCATION_SPANNABLE, shouldOutput != null,
+        message: "'shouldOutput' must be non-null."));
+    assert(invariant(NO_LOCATION_SPANNABLE,
+        isSafeToRemoveTypeDeclarations != null,
+        message: "'isSafeToRemoveTypeDeclarations' must be non-null."));
+
+    if (sortElements == null) {
+      // Ensure deterministic output order.
+      sortElements = (Iterable<Element> elements) {
+        List<Element> list = elements.toList();
+        list.sort((Element a, Element b) => a.name.compareTo(b.name));
+        return list;
+      };
+    }
+
+    libraryInfo = LibraryInfo.processLibraries(libraries, resolvedElements);
+
+    elementInfo = ElementInfoProcessor.createElementInfo(
+        instantiatedClasses,
+        resolvedElements,
+        usedTypeLiterals,
+        postProcessElementAst: postProcessElementAst,
+        parseElementAst: computeElementAst,
+        shouldOutput: shouldOutput,
+        sortElements: sortElements);
+
+    PlaceholderCollector collector = collectPlaceholders(
+        listener,
+        mirrorRenamer,
+        mainFunction,
+        libraryInfo,
+        elementInfo);
+
+    renamer = createRenamer(
+        collector,
+        libraryInfo,
+        elementInfo,
+        enableMinification: enableMinification,
+        forceStripTypes: forceStripTypes,
+        isSafeToRemoveTypeDeclarations: isSafeToRemoveTypeDeclarations);
+
+    String assembledCode;
+    if (outputAst) {
+      assembledCode = astOutput(listener, elementInfo);
+    } else {
+      output = new MainOutputGenerator();
+      assembledCode = output.generateCode(
+          libraryInfo,
+          elementInfo,
+          collector,
+          renamer,
+          mainFunction,
+          outputUri,
+          outputProvider,
+          mirrorRenamer,
+          multiFile: multiFile,
+          forceStripTypes: forceStripTypes,
+          enableMinification: enableMinification);
+    }
+    return assembledCode;
+  }
+
+  static PlaceholderCollector collectPlaceholders(
+      DiagnosticListener listener,
+      MirrorRenamer mirrorRenamer,
+      FunctionElement mainFunction,
+      LibraryInfo libraryInfo,
+      ElementInfo elementInfo) {
+    // Create all necessary placeholders.
+    PlaceholderCollector collector = new PlaceholderCollector(
+        listener,
+        mirrorRenamer,
+        libraryInfo.fixedMemberNames,
+        elementInfo.elementAsts,
+        mainFunction);
+
+    makePlaceholders(element) {
+      collector.collect(element);
+
+      if (element.isClass) {
+        elementInfo.classMembers[element].forEach(makePlaceholders);
+      }
+    }
+    elementInfo.topLevelElements.forEach(makePlaceholders);
+    return collector;
+  }
+
+  static PlaceholderRenamer createRenamer(
+      PlaceholderCollector collector,
+      LibraryInfo libraryInfo,
+      ElementInfo elementInfo,
+      {bool enableMinification: false,
+       bool forceStripTypes: false,
+       isSafeToRemoveTypeDeclarations}) {
+    // Create renames.
+    bool shouldCutDeclarationTypes = forceStripTypes
+        || (enableMinification
+            && isSafeToRemoveTypeDeclarations(elementInfo.classMembers));
+
+    PlaceholderRenamer placeholderRenamer = new PlaceholderRenamer(
+        libraryInfo.fixedMemberNames, libraryInfo.reexportingLibraries,
+        cutDeclarationTypes: shouldCutDeclarationTypes,
+        enableMinification: enableMinification);
+
+    placeholderRenamer.computeRenames(collector);
+    return placeholderRenamer;
+  }
+
+  static String astOutput(DiagnosticListener listener,
+                          ElementInfo elementInfo) {
+    // TODO(antonm): Ideally XML should be a separate backend.
+    // TODO(antonm): obey renames and minification, at least as an option.
+    StringBuffer sb = new StringBuffer();
+    outputElement(element) {
+      sb.write(element.parseNode(listener).toDebugString());
+    }
+
+    // Emit XML for AST instead of the program.
+    for (Element topLevel in elementInfo.topLevelElements) {
+      if (topLevel.isClass &&
+          !elementInfo.emitNoMembersFor.contains(topLevel)) {
+        // TODO(antonm): add some class info.
+        elementInfo.classMembers[topLevel].forEach(outputElement);
+      } else {
+        outputElement(topLevel);
+      }
+    }
+    return '<Program>\n$sb</Program>\n';
+  }
+}
+
+class LibraryInfo {
+  final Set<String> fixedMemberNames;
+  final Map<Element, LibraryElement> reexportingLibraries;
+  final List<LibraryElement> userLibraries;
+
+  LibraryInfo(this.fixedMemberNames,
+              this.reexportingLibraries,
+              this.userLibraries);
+
+  static LibraryInfo processLibraries(
+      Iterable<LibraryElement> libraries,
+      Iterable<AstElement> resolvedElements) {
+    Set<String> fixedMemberNames = new Set<String>();
+    Map<Element, LibraryElement> reexportingLibraries =
+          <Element, LibraryElement>{};
+    List<LibraryElement> userLibraries = <LibraryElement>[];
+    // Conservatively traverse all platform libraries and collect member names.
+    // TODO(antonm): ideally we should only collect names of used members,
+    // however as of today there are problems with names of some core library
+    // interfaces, most probably for interfaces of literals.
+
+    for (LibraryElement library in libraries) {
+      if (!library.isPlatformLibrary) {
+        userLibraries.add(library);
+        continue;
+      }
+      library.forEachLocalMember((Element element) {
+        if (element.isClass) {
+          ClassElement classElement = element;
+          assert(invariant(classElement, classElement.isResolved,
+              message: "Unresolved platform class."));
+          classElement.forEachLocalMember((member) {
+            String name = member.name;
+            // Skip operator names.
+            if (!name.startsWith(r'operator$')) {
+              // Fetch name of named constructors and factories if any,
+              // otherwise store regular name.
+              // TODO(antonm): better way to analyze the name.
+              fixedMemberNames.add(name.split(r'$').last);
+            }
+          });
+        }
+        // Even class names are added due to a delicate problem we have:
+        // if one imports dart:core with a prefix, we cannot tell prefix.name
+        // from dynamic invocation (alas!).  So we'd better err on preserving
+        // those names.
+        fixedMemberNames.add(element.name);
+      });
+
+      for (Element export in library.exports) {
+        if (!library.isInternalLibrary &&
+            export.library.isInternalLibrary) {
+          // If an element of an internal library is reexported by a platform
+          // library, we have to import the reexporting library instead of the
+          // internal library, because the internal library is an
+          // implementation detail of dart2js.
+          reexportingLibraries[export] = library;
+        }
+      }
+    }
+    // As of now names of named optionals are not renamed. Therefore add all
+    // field names used as named optionals into [fixedMemberNames].
+    for (final element in resolvedElements) {
+      if (!element.isConstructor) continue;
+      Link<Element> optionalParameters =
+          element.functionSignature.optionalParameters;
+      for (final optional in optionalParameters) {
+        if (!optional.isInitializingFormal) continue;
+        fixedMemberNames.add(optional.name);
+      }
+    }
+    // The VM will automatically invoke the call method of objects
+    // that are invoked as functions. Make sure to not rename that.
+    fixedMemberNames.add('call');
+    // TODO(antonm): TypeError.srcType and TypeError.dstType are defined in
+    // runtime/lib/error.dart. Overall, all DartVM specific libs should be
+    // accounted for.
+    fixedMemberNames.add('srcType');
+    fixedMemberNames.add('dstType');
+
+    return new LibraryInfo(
+        fixedMemberNames, reexportingLibraries, userLibraries);
+  }
+}
+
+class ElementInfo {
+  final Map<Element, ElementAst> elementAsts;
+  final Iterable<Element> topLevelElements;
+  final Map<ClassElement, Iterable<Element>> classMembers;
+  final Iterable<ClassElement> emitNoMembersFor;
+
+  ElementInfo(this.elementAsts,
+              this.topLevelElements,
+              this.classMembers,
+              this.emitNoMembersFor);
+}
+
+class ElementInfoProcessor implements ElementInfo {
+  final Map<Element, ElementAst> elementAsts = new Map<Element, ElementAst>();
+  final Set<Element> topLevelElements = new Set<Element>();
+  final Map<ClassElement, Set<Element>> classMembers =
+      new Map<ClassElement, Set<Element>>();
+  final Set<ClassElement> emitNoMembersFor = new Set<ClassElement>();
+  final ElementPostProcessFunction postProcessElementAst;
+  final ComputeElementAstFunction parseElementAst;
+  final ElementFilter shouldOutput;
+
+  ElementInfoProcessor(
+      {this.postProcessElementAst,
+       this.parseElementAst,
+       this.shouldOutput});
+
+  static ElementInfo createElementInfo(
+      Iterable<ClassElement> instantiatedClasses,
+      Iterable<AstElement> resolvedElements,
+      Iterable<ClassElement> usedTypeLiterals,
+      {ElementPostProcessFunction postProcessElementAst,
+       ComputeElementAstFunction parseElementAst,
+       ElementFilter shouldOutput,
+       ElementSorter sortElements}) {
+    ElementInfoProcessor processor = new ElementInfoProcessor(
+        postProcessElementAst: postProcessElementAst,
+        parseElementAst: parseElementAst,
+        shouldOutput: shouldOutput);
+    return processor.process(
+        instantiatedClasses, resolvedElements, usedTypeLiterals,
+        sortElements: sortElements);
+  }
+
+  ElementInfo process(Iterable<ClassElement> instantiatedClasses,
+                      Iterable<AstElement> resolvedElements,
+                      Iterable<ClassElement> usedTypeLiterals,
+                      {ElementSorter sortElements}) {
+    // Build all top level elements to emit and necessary class members.
+    instantiatedClasses.where(shouldOutput).forEach(addClass);
+    resolvedElements.where(shouldOutput).forEach(addMember);
+    usedTypeLiterals.forEach((ClassElement element) {
+      if (shouldOutput(element)) {
+        if (!topLevelElements.contains(element)) {
+          // The class is only referenced by type literals.
+          emitNoMembersFor.add(element);
+        }
+        addClass(element);
+      }
+    });
+
+    // Sort elements.
+    List<Element> sortedTopLevels = sortElements(topLevelElements);
+    Map<ClassElement, List<Element>> sortedClassMembers =
+        new Map<ClassElement, List<Element>>();
+    classMembers.forEach((classElement, members) {
+      sortedClassMembers[classElement] = sortElements(members);
+    });
+
+    return new ElementInfo(
+        elementAsts, sortedTopLevels, sortedClassMembers, emitNoMembersFor);
+  }
+
+  void processElement(Element element, ElementAst elementAst) {
+    if (postProcessElementAst != null) {
+      postProcessElementAst(element, elementAst,
+                            newTypedefElementCallback,
+                            newClassElementCallback);
+    }
+    elementAsts[element] = elementAst;
+  }
+
+  void addTopLevel(AstElement element, ElementAst elementAst) {
+    if (topLevelElements.contains(element)) return;
+    topLevelElements.add(element);
+    processElement(element, elementAst);
+  }
+
+  void addClass(ClassElement classElement) {
+    addTopLevel(classElement, new ElementAst(classElement));
+    classMembers.putIfAbsent(classElement, () => new Set());
+  }
+
+  void newTypedefElementCallback(TypedefElement element) {
+    if (!shouldOutput(element)) return;
+    addTopLevel(element, new ElementAst(element));
+  }
+
+  void newClassElementCallback(ClassElement classElement) {
+    if (!shouldOutput(classElement)) return;
+    addClass(classElement);
+  }
+
+  void addMember(element) {
+    ElementAst elementAst = parseElementAst(element);
+    if (element.isClassMember) {
+      ClassElement enclosingClass = element.enclosingClass;
+      assert(enclosingClass.isClass);
+      assert(enclosingClass.isTopLevel);
+      assert(shouldOutput(enclosingClass));
+      addClass(enclosingClass);
+      classMembers[enclosingClass].add(element);
+      processElement(element, elementAst);
+    } else {
+      if (element.isTopLevel) {
+        addTopLevel(element, elementAst);
+      }
+    }
+  }
+}
+
+/// Main output generator for [DartOutputter] that emits dart code through a
+/// [CompilerOutputProvider].
+class MainOutputGenerator {
+  final Map<ClassNode, List<Node>> memberNodes =
+       new Map<ClassNode, List<Node>>();
+  final List<Node> topLevelNodes = <Node>[];
+
+  String generateCode(
+      LibraryInfo libraryInfo,
+      ElementInfo elementInfo,
+      PlaceholderCollector collector,
+      PlaceholderRenamer placeholderRenamer,
+      FunctionElement mainFunction,
+      Uri outputUri,
+      CompilerOutputProvider outputProvider,
+      MirrorRenamer mirrorRenamer,
+      {bool multiFile: false,
+       bool forceStripTypes: false,
+       bool enableMinification: false}) {
+    for (Element element in elementInfo.topLevelElements) {
+      topLevelNodes.add(elementInfo.elementAsts[element].ast);
+      if (element.isClass && !element.isMixinApplication) {
+        final members = <Node>[];
+        for (Element member in elementInfo.classMembers[element]) {
+          members.add(elementInfo.elementAsts[member].ast);
+        }
+        memberNodes[elementInfo.elementAsts[element].ast] = members;
+      }
+    }
+
+    mirrorRenamer.addRenames(placeholderRenamer.renames,
+                             topLevelNodes, collector);
+
+    Map<LibraryElement, String> outputPaths = new Map<LibraryElement, String>();
+    Map<LibraryElement, EmitterUnparser> unparsers =
+        new Map<LibraryElement, EmitterUnparser>();
+
+    // The single unparser used if we collect all the output in one file.
+    EmitterUnparser mainUnparser = multiFile
+        ? null
+        : new EmitterUnparser(placeholderRenamer.renames,
+            stripTypes: forceStripTypes,
+            minify: enableMinification);
+
+    if (multiFile) {
+      // TODO(sigurdm): Factor handling of library-paths out from emitting.
+      String mainName = outputUri.pathSegments.last;
+      String mainBaseName = mainName.endsWith(".dart")
+          ? mainName.substring(0, mainName.length - 5)
+          : mainName;
+      // Map each library to a path based on the uri of the original
+      // library and [compiler.outputUri].
+      Set<String> usedLibraryPaths = new Set<String>();
+      for (LibraryElement library in libraryInfo.userLibraries) {
+        if (library == mainFunction.library) {
+          outputPaths[library] = mainBaseName;
+        } else {
+          List<String> names =
+              library.canonicalUri.pathSegments.last.split(".");
+          if (names.last == "dart") {
+            names = names.sublist(0, names.length - 1);
+          }
+          outputPaths[library] =
+              "$mainBaseName.${makeUnique(names.join("."), usedLibraryPaths)}";
+        }
+      }
+
+      /// Rewrites imports/exports to refer to the paths given in [outputPaths].
+      for(LibraryElement outputLibrary in libraryInfo.userLibraries) {
+        EmitterUnparser unparser = new EmitterUnparser(
+            placeholderRenamer.renames,
+            stripTypes: forceStripTypes,
+            minify: enableMinification);
+        unparsers[outputLibrary] = unparser;
+        LibraryName libraryName = outputLibrary.libraryTag;
+        if (libraryName != null) {
+          unparser.visitLibraryName(libraryName);
+        }
+        for (LibraryTag tag in outputLibrary.tags) {
+          if (tag is! LibraryDependency) continue;
+          LibraryDependency dependency = tag;
+          LibraryElement libraryElement =
+              outputLibrary.getLibraryFromTag(dependency);
+          String uri = outputPaths.containsKey(libraryElement)
+              ? "${outputPaths[libraryElement]}.dart"
+              : libraryElement.canonicalUri.toString();
+          if (dependency is Import) {
+            unparser.unparseImportTag(uri);
+          } else {
+            unparser.unparseExportTag(uri);
+          }
+        }
+      }
+    } else {
+      for(LibraryElement library in placeholderRenamer.platformImports) {
+        if (library.isPlatformLibrary && !library.isInternalLibrary) {
+          mainUnparser.unparseImportTag(library.canonicalUri.toString());
+        }
+      }
+    }
+
+    for (int i = 0; i < elementInfo.topLevelElements.length; i++) {
+      Element element = elementInfo.topLevelElements.elementAt(i);
+      Node node = topLevelNodes[i];
+      Unparser unparser = multiFile ? unparsers[element.library] : mainUnparser;
+      if (node is ClassNode) {
+        // TODO(smok): Filter out default constructors here.
+        unparser.unparseClassWithBody(node, memberNodes[node]);
+      } else {
+        unparser.unparse(node);
+      }
+      unparser.newline();
+    }
+
+    int totalSize = 0;
+    String assembledCode;
+    if (multiFile) {
+      for(LibraryElement outputLibrary in libraryInfo.userLibraries) {
+        // TODO(sigurdm): Make the unparser output directly into the buffer
+        // instead of caching in `.result`.
+        String code = unparsers[outputLibrary].result;
+        totalSize += code.length;
+        outputProvider(outputPaths[outputLibrary], "dart")
+             ..add(code)
+             ..close();
+      }
+      // TODO(sigurdm): We should get rid of compiler.assembledCode.
+      assembledCode = unparsers[mainFunction.library].result;
+    } else {
+      assembledCode = mainUnparser.result;
+      outputProvider("", "dart")
+           ..add(assembledCode)
+           ..close();
+
+      totalSize = assembledCode.length;
+    }
+
+    return assembledCode;
+  }
+}
\ No newline at end of file
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 3dfbe0b..2b98939b 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
@@ -40,9 +40,8 @@
 class SendVisitor extends ResolvedVisitor {
   final PlaceholderCollector collector;
 
-  SendVisitor(collector, TreeElements elements)
-      : this.collector = collector,
-        super(elements, collector.compiler);
+  SendVisitor(this.collector, TreeElements elements)
+      : super(elements);
 
   visitOperatorSend(Send node) {
   }
@@ -107,7 +106,8 @@
 
   visitStaticSend(Send node) {
     Element element = elements[node];
-    collector.backend.registerStaticSend(element, node);
+    collector.mirrorRenamer.registerStaticSend(
+        collector.currentElement, element, node);
 
     if (Elements.isUnresolved(element)
         || elements.isAssert(node)
@@ -155,7 +155,9 @@
 }
 
 class PlaceholderCollector extends Visitor {
-  final Compiler compiler;
+  final DiagnosticListener listener;
+  final MirrorRenamer mirrorRenamer;
+  final FunctionElement mainFunction;
   final Set<String> fixedMemberNames; // member names which cannot be renamed.
   final Map<Element, ElementAst> elementAsts;
   final Set<Node> prefixNodesToErase = new Set<Node>();
@@ -176,14 +178,12 @@
   FunctionElement topmostEnclosingFunction;
   TreeElements treeElements;
 
-  LibraryElement get coreLibrary => compiler.coreLibrary;
-  FunctionElement get entryFunction => compiler.mainFunction;
-  DartBackend get backend => compiler.backend;
-
   get currentFunctionScope => functionScopes.putIfAbsent(
       topmostEnclosingFunction, () => new FunctionScope());
 
-  PlaceholderCollector(this.compiler, this.fixedMemberNames, this.elementAsts);
+  PlaceholderCollector(this.listener, this.mirrorRenamer,
+                       this.fixedMemberNames, this.elementAsts,
+                       this.mainFunction);
 
   void collectFunctionDeclarationPlaceholders(
       FunctionElement element, FunctionExpression node) {
@@ -245,13 +245,10 @@
     currentLocalPlaceholders = new Map<String, LocalPlaceholder>();
     if (!(element is ConstructorElement && element.isRedirectingFactory)) {
       // Do not visit the body of redirecting factories.
-      compiler.withCurrentElement(element, () {
+      listener.withCurrentElement(element, () {
         elementNode.accept(this);
       });
     }
-    if (element == backend.mirrorHelperSymbolsMap) {
-      backend.registerMirrorHelperElement(element, elementNode);
-    }
   }
 
   // TODO(karlklose): should we create placeholders for these?
@@ -342,8 +339,8 @@
     assert(node != null);
     assert(element != null);
     LibraryElement library = element.library;
-    if (identical(element, entryFunction)) return;
-    if (identical(library, coreLibrary)) return;
+    if (identical(element, mainFunction)) return;
+    if (library.isDartCore) return;
 
     if (library.isPlatformLibrary && !element.isTopLevel) {
       return;
@@ -458,7 +455,7 @@
   }
 
   void internalError(String reason, {Node node}) {
-    compiler.internalError(node, reason);
+    listener.internalError(node, reason);
   }
 
   visit(Node node) => (node == null) ? null : node.accept(this);
@@ -626,9 +623,6 @@
     if (element != null) {
       tryMakePrivateIdentifier(node.name, element);
 
-      if (element == backend.mirrorHelperGetNameFunction) {
-        backend.registerMirrorHelperElement(element, node);
-      }
       // Rename only local functions.
       if (topmostEnclosingFunction == null) {
         topmostEnclosingFunction = element;
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/renamer.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/renamer.dart
index 37e9b47..414737e 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/renamer.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/renamer.dart
@@ -76,7 +76,7 @@
   /// libraries.
   final Set<LibraryElement> platformImports = new Set<LibraryElement>();
 
-  final Compiler _compiler;
+  final bool enableMinification;
   final Set<String> fixedMemberNames;
   final Map<Element, LibraryElement> reexportingLibraries;
   final bool cutDeclarationTypes;
@@ -92,8 +92,9 @@
 
   Generator _generator;
 
-  PlaceholderRenamer(this._compiler, this.fixedMemberNames,
-      this.reexportingLibraries, {this.cutDeclarationTypes}) ;
+  PlaceholderRenamer(this.fixedMemberNames,
+                     this.reexportingLibraries,
+                     {this.enableMinification, this.cutDeclarationTypes});
 
   void _renameNodes(Iterable<Node> nodes, String renamer(Node node)) {
     for (Node node in sorted(nodes, _compareNodes)) {
@@ -141,7 +142,7 @@
         library = reexportingLibraries[entity];
       }
       if (library.isPlatformLibrary) {
-        if (library != _compiler.coreLibrary) {
+        if (library.canonicalUri != Compiler.DART_CORE) {
           platformImports.add(library);
         }
         if (library.isInternalLibrary) {
@@ -264,7 +265,7 @@
     _forbiddenIdentifiers.addAll(Keyword.keywords.keys);
     _forbiddenIdentifiers.add('main');
 
-    if (_compiler.enableMinification) {
+    if (enableMinification) {
       _computeMinifiedRenames(placeholderCollector);
     } else {
       _computeNonMinifiedRenames(placeholderCollector);
diff --git a/sdk/lib/_internal/compiler/implementation/deferred_load.dart b/sdk/lib/_internal/compiler/implementation/deferred_load.dart
index f7c030a..41a8312 100644
--- a/sdk/lib/_internal/compiler/implementation/deferred_load.dart
+++ b/sdk/lib/_internal/compiler/implementation/deferred_load.dart
@@ -138,8 +138,8 @@
   /// [lib1]]} would mean that in order to load "lib1" first the hunk
   /// lib1_lib2_lib2 should be loaded, then the hunks lib1_lib2 and lib1_lib3
   /// can be loaded in parallel. And finally lib1 can be loaded.
-  final Map<String, List<List<OutputUnit>>> hunksToLoad =
-      new Map<String, List<List<OutputUnit>>>();
+  final Map<String, List<OutputUnit>> hunksToLoad =
+      new Map<String, List<OutputUnit>>();
   final Map<Import, String> importDeferName = new Map<Import, String>();
 
   /// A mapping from elements and constants to their output unit. Query this via
@@ -238,41 +238,6 @@
         .imports.add(import);
   }
 
-  /// Answers whether the [import] has a [DeferredLibrary] annotation.
-  bool _isImportDeferred(Import import) {
-    return _allDeferredImports.containsKey(import);
-  }
-
-  /// Checks whether the [import] has a [DeferredLibrary] annotation and stores
-  /// the information in [_allDeferredImports] and on the corresponding
-  /// prefixElement.
-  void _markIfDeferred(Import import, LibraryElement library) {
-    // Check if the import is deferred by a keyword.
-    if (import.isDeferred) {
-      _allDeferredImports[import] = library.getLibraryFromTag(import);
-      return;
-    }
-    // Check if the import is deferred by a metadata annotation.
-    Link<MetadataAnnotation> metadataList = import.metadata;
-    if (metadataList == null) return;
-    for (MetadataAnnotation metadata in metadataList) {
-      metadata.ensureResolved(compiler);
-      Element element = metadata.value.computeType(compiler).element;
-      if (element == deferredLibraryClass) {
-        _allDeferredImports[import] = library.getLibraryFromTag(import);
-        // On encountering a deferred library without a prefix we report an
-        // error, but continue the compilation to possibly give more
-        // information. Therefore it is neccessary to check if there is a prefix
-        // here.
-        Element maybePrefix = library.find(import.prefix.toString());
-        if (maybePrefix != null && maybePrefix.isPrefix) {
-          PrefixElement prefix = maybePrefix;
-          prefix.markAsDeferred(import);
-        }
-      }
-    }
-  }
-
   /// Answers whether [element] is explicitly deferred when referred to from
   /// [library].
   bool _isExplicitlyDeferred(Element element, LibraryElement library) {
@@ -284,7 +249,7 @@
     // is explicitly deferred, we say the element is explicitly deferred.
     // TODO(sigurdm): We might want to give a warning if the imports do not
     // agree.
-    return imports.every(_isImportDeferred);
+    return imports.every((Import import) => import.isDeferred);
   }
 
   /// Returns a [Link] of every [Import] that imports [element] into [library].
@@ -413,8 +378,7 @@
         for (LibraryTag tag in library.tags) {
           if (tag is! LibraryDependency) continue;
           LibraryDependency libraryDependency = tag;
-          if (!(libraryDependency is Import
-              && _isImportDeferred(libraryDependency))) {
+          if (!(libraryDependency is Import && libraryDependency.isDeferred)) {
             LibraryElement importedLibrary = library.getLibraryFromTag(tag);
             traverseLibrary(importedLibrary);
           }
@@ -585,18 +549,11 @@
     // For each deferred import we find out which outputUnits to load.
     for (Import import in _allDeferredImports.keys) {
       if (import == _fakeMainImport) continue;
-      hunksToLoad[importDeferName[import]] = new List<List<OutputUnit>>();
-      int lastNumberOfImports = 0;
-      List<OutputUnit> currentLastList;
+      hunksToLoad[importDeferName[import]] = new List<OutputUnit>();
       for (OutputUnit outputUnit in sortedOutputUnits) {
         if (outputUnit == mainOutputUnit) continue;
         if (outputUnit.imports.contains(import)) {
-          if (outputUnit.imports.length != lastNumberOfImports) {
-            lastNumberOfImports = outputUnit.imports.length;
-            currentLastList = new List<OutputUnit>();
-            hunksToLoad[importDeferName[import]].add(currentLastList);
-          }
-          currentLastList.add(outputUnit);
+          hunksToLoad[importDeferName[import]].add(outputUnit);
         }
       }
     }
@@ -694,14 +651,27 @@
         for (LibraryTag tag in library.tags) {
           if (tag is! Import) continue;
           Import import = tag;
-          _markIfDeferred(import, library);
+
+          /// Give an error if the old annotation-based syntax has been used.
+          Link<MetadataAnnotation> metadataList = import.metadata;
+          if (metadataList != null) {
+            for (MetadataAnnotation metadata in metadataList) {
+              metadata.ensureResolved(compiler);
+              Element element = metadata.value.computeType(compiler).element;
+              if (element == deferredLibraryClass) {
+                 compiler.reportFatalError(import, MessageKind.DEFERRED_OLD_SYNTAX);
+              }
+            }
+          }
+
           String prefix = (import.prefix != null)
               ? import.prefix.toString()
               : null;
           // The last import we saw with the same prefix.
           Import previousDeferredImport = prefixDeferredImport[prefix];
-          bool isDeferred = _isImportDeferred(import);
-          if (isDeferred) {
+          if (import.isDeferred) {
+            _allDeferredImports[import] = library.getLibraryFromTag(import);
+
             if (prefix == null) {
               compiler.reportError(import,
                   MessageKind.DEFERRED_LIBRARY_WITHOUT_PREFIX);
@@ -713,7 +683,7 @@
           }
           if (prefix != null) {
             if (previousDeferredImport != null ||
-                (isDeferred && usedPrefixes.contains(prefix))) {
+                (import.isDeferred && usedPrefixes.contains(prefix))) {
               Import failingImport = (previousDeferredImport != null)
                   ? previousDeferredImport
                   : import;
diff --git a/sdk/lib/_internal/compiler/implementation/dump_info.dart b/sdk/lib/_internal/compiler/implementation/dump_info.dart
index 51a1bd6..366d8a9 100644
--- a/sdk/lib/_internal/compiler/implementation/dump_info.dart
+++ b/sdk/lib/_internal/compiler/implementation/dump_info.dart
@@ -12,12 +12,18 @@
 
 import 'elements/elements.dart';
 import 'elements/visitor.dart';
-import 'dart2jslib.dart' show Backend, CodeBuffer, Compiler, CompilerTask;
+import 'dart2jslib.dart' show
+    Backend,
+    CodeBuffer,
+    Compiler,
+    CompilerTask,
+    MessageKind;
 import 'types/types.dart' show TypeMask;
 import 'deferred_load.dart' show OutputUnit;
 import 'js_backend/js_backend.dart' show JavaScriptBackend;
 import 'js/js.dart' as jsAst;
 import 'universe/universe.dart' show Selector;
+import 'util/util.dart' show NO_LOCATION_SPANNABLE;
 
 /// Maps objects to an id.  Supports lookups in
 /// both directions.
@@ -414,10 +420,15 @@
 
   final Map<Element, Set<Selector>> selectorsFromElement = {};
   final Map<Element, int> inlineCount = <Element, int>{};
+  // A mapping from an element to a list of elements that are
+  // inlined inside of it.
+  final Map<Element, List<Element>> inlineMap = <Element, List<Element>>{};
 
   void registerInlined(Element element, Element inlinedFrom) {
     inlineCount.putIfAbsent(element, () => 0);
     inlineCount[element] += 1;
+    inlineMap.putIfAbsent(inlinedFrom, () => new List<Element>());
+    inlineMap[inlinedFrom].add(element);
   }
 
   /**
@@ -567,7 +578,8 @@
     JsonEncoder encoder = const JsonEncoder();
     DateTime startToJsonTime = new DateTime.now();
 
-    Map<String, List<String>> holding = <String, List<String>>{};
+    Map<String, List<Map<String, String>>> holding =
+        <String, List<Map<String, String>>>{};
     for (Element fn in infoCollector.mapper.functions) {
       Iterable<Selection> pulling = getRetaining(fn);
       // Don't bother recording an empty list of dependencies.
@@ -590,6 +602,23 @@
       }
     }
 
+    // Track dependencies that come from inlining.
+    for (Element element in inlineMap.keys) {
+      String keyId = infoCollector.idOf(element);
+      if (keyId != null) {
+        for (Element held in inlineMap[element]) {
+          String valueId = infoCollector.idOf(held);
+          if (valueId != null) {
+            holding.putIfAbsent(keyId, () => new List<Map<String, String>>())
+              .add(<String, String>{
+                "id": valueId,
+                "mask": "inlined"
+              });
+          }
+        }
+      }
+    }
+
     List<Map<String, dynamic>> outputUnits =
         new List<Map<String, dynamic>>();
 
@@ -630,5 +659,9 @@
       encoder.startChunkedConversion(
           new StringConversionSink.fromStringSink(buffer));
     sink.add(outJson);
+    compiler.reportInfo(NO_LOCATION_SPANNABLE,
+        const MessageKind(
+            "View the dumped .info.json file at "
+            "https://dart-lang.github.io/dump-info-visualizer"));
   }
 }
diff --git a/sdk/lib/_internal/compiler/implementation/elements/elements.dart b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
index 19a3dfe..6c42664 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/elements.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
@@ -25,6 +25,7 @@
                                  isPrivateName;
 
 import '../dart_types.dart';
+import '../helpers/helpers.dart';
 
 import '../scanner/scannerlib.dart' show Token,
                                          isUserDefinableOperator,
@@ -460,14 +461,13 @@
   }
 
   static bool isStaticOrTopLevel(Element element) {
-    // TODO(ager): This should not be necessary when patch support has
-    // been reworked.
-    if (!Elements.isUnresolved(element)
-        && element.isStatic) {
-      return true;
-    }
-    return !Elements.isUnresolved(element)
-           && !element.isAmbiguous
+    // TODO(johnniwinther): Clean this up. This currently returns true for a
+    // PartialConstructorElement, SynthesizedConstructorElementX, and
+    // TypeVariableElementX though neither `element.isStatic` nor
+    // `element.isTopLevel` is true.
+    if (Elements.isUnresolved(element)) return false;
+    if (element.isStatic || element.isTopLevel) return true;
+    return !element.isAmbiguous
            && !element.isInstanceMember
            && !element.isPrefix
            && element.enclosingElement != null
@@ -855,6 +855,10 @@
    * libraries the canonical uri is of the form [:dart:x:].
    */
   Uri get canonicalUri;
+
+  /// Returns `true` if this library is 'dart:core'.
+  bool get isDartCore;
+
   CompilationUnitElement get entryCompilationUnit;
   Link<CompilationUnitElement> get compilationUnits;
   Iterable<LibraryTag> get tags;
@@ -971,7 +975,7 @@
   MemberElement get memberContext;
 }
 
-/// A top-level or static field or method, or a constructor.
+/// A top-level, static or instance field or method, or a constructor.
 ///
 /// A [MemberElement] is the outermost executable element for any executable
 /// context.
diff --git a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
index 03dc477..0a27aee 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
@@ -269,6 +269,8 @@
                     String name, Element enclosing)
       : super(name, ElementKind.ERROR, enclosing);
 
+  bool get isTopLevel => false;
+
   bool get isSynthesized => true;
 
   AbstractFieldElement abstractField;
@@ -426,6 +428,8 @@
   }
 
   accept(ElementVisitor visitor) => visitor.visitAmbiguousElement(this);
+
+  bool get isTopLevel => false;
 }
 
 class ScopeX {
@@ -736,6 +740,8 @@
     }
   }
 
+  bool get isDartCore => canonicalUri == Compiler.DART_CORE;
+
   Link<MetadataAnnotation> get metadata {
     return (libraryTag == null) ? super.metadata : libraryTag.metadata;
   }
@@ -977,6 +983,8 @@
   PrefixElementX(String prefix, Element enclosing, this.firstPosition)
       : super(prefix, ElementKind.PREFIX, enclosing);
 
+  bool get isTopLevel => false;
+
   Element lookupLocalMember(String memberName) => importScope[memberName];
 
   DartType computeType(Compiler compiler) => const DynamicType();
@@ -1236,6 +1244,11 @@
   accept(ElementVisitor visitor) => visitor.visitFieldElement(this);
 
   MemberElement get memberContext => this;
+
+  void reuseElement() {
+    super.reuseElement();
+    nestedClosures.clear();
+  }
 }
 
 /// [Element] for a parameter-like element.
@@ -1592,6 +1605,11 @@
       : super(name, kind, modifiers, enclosing, hasNoBody);
 
   MemberElement get memberContext => this;
+
+  void reuseElement() {
+    super.reuseElement();
+    nestedClosures.clear();
+  }
 }
 
 class LocalFunctionElementX extends BaseFunctionElementX
@@ -1698,6 +1716,7 @@
 
   bool get isGetter => true;
 
+  bool get isTopLevel => true;
   // By having position null, the enclosing elements location is printed in
   // error messages.
   Token get position => null;
diff --git a/sdk/lib/_internal/compiler/implementation/enqueue.dart b/sdk/lib/_internal/compiler/implementation/enqueue.dart
index 2b2dfd4..7d26a26 100644
--- a/sdk/lib/_internal/compiler/implementation/enqueue.dart
+++ b/sdk/lib/_internal/compiler/implementation/enqueue.dart
@@ -803,6 +803,10 @@
     nativeEnqueuer.registerJsCall(node, resolver);
   }
 
+  void registerJsEmbeddedGlobalCall(Send node, ResolverVisitor resolver) {
+    nativeEnqueuer.registerJsEmbeddedGlobalCall(node, resolver);
+  }
+
   void _logSpecificSummary(log(message)) {
     log('Resolved ${resolvedElements.length} elements.');
   }
diff --git a/sdk/lib/_internal/compiler/implementation/hash/sha1.dart b/sdk/lib/_internal/compiler/implementation/hash/sha1.dart
new file mode 100644
index 0000000..949621d
--- /dev/null
+++ b/sdk/lib/_internal/compiler/implementation/hash/sha1.dart
@@ -0,0 +1,377 @@
+// 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.
+
+/**
+ * SHA-1.
+ * Ripped from package:crypto.
+ */
+library sha1;
+
+import 'dart:math' show pow;
+import 'dart:convert';
+
+/// Returns the base64-encoded SHA-1 hash of the utf-8 bytes of [input].
+String hashOfString(String input) {
+  Hash hasher = new SHA1();
+  hasher.add(const Utf8Encoder().convert(input));
+  return _bytesToBase64(hasher.close());
+}
+
+/**
+ * Converts a list of bytes into a Base 64 encoded string.
+ *
+ * The list can be any list of integers in the range 0..255,
+ * for example a message digest.
+ *
+ * If [addLineSeparator] is true, the resulting string will  be
+ * broken into lines of 76 characters, separated by "\r\n".
+ *
+ * If [urlSafe] is true, the result is URL and filename safe.
+ *
+ * Based on [RFC 4648](http://tools.ietf.org/html/rfc4648)
+ *
+ */
+String _bytesToBase64(List<int> bytes,
+                            {bool urlSafe : false,
+                             bool addLineSeparator : false}) {
+  return _CryptoUtils.bytesToBase64(bytes,
+                                    urlSafe,
+                                    addLineSeparator);
+}
+
+
+// Constants.
+const _MASK_8 = 0xff;
+const _MASK_32 = 0xffffffff;
+const _BITS_PER_BYTE = 8;
+const _BYTES_PER_WORD = 4;
+
+// Helper functions used by more than one hasher.
+
+// Rotate left limiting to unsigned 32-bit values.
+int _rotl32(int val, int shift) {
+var mod_shift = shift & 31;
+return ((val << mod_shift) & _MASK_32) |
+   ((val & _MASK_32) >> (32 - mod_shift));
+}
+
+// Base class encapsulating common behavior for cryptographic hash
+// functions.
+abstract class _HashBase implements Hash {
+  final int _chunkSizeInWords;
+  final int _digestSizeInWords;
+  final bool _bigEndianWords;
+  final List<int> _currentChunk;
+  final List<int> _h;
+  int _lengthInBytes = 0;
+  List<int> _pendingData;
+  bool _digestCalled = false;
+
+  _HashBase(int chunkSizeInWords,
+            int digestSizeInWords,
+            bool this._bigEndianWords)
+      : _pendingData = [],
+        _currentChunk = new List(chunkSizeInWords),
+        _h = new List(digestSizeInWords),
+        _chunkSizeInWords = chunkSizeInWords,
+        _digestSizeInWords = digestSizeInWords;
+
+  // Update the hasher with more data.
+  void add(List<int> data) {
+     if (_digestCalled) {
+       throw new StateError(
+           'Hash update method called after digest was retrieved');
+     }
+     _lengthInBytes += data.length;
+     _pendingData.addAll(data);
+     _iterate();
+  }
+
+  // Finish the hash computation and return the digest string.
+  List<int> close() {
+    if (_digestCalled) {
+      return _resultAsBytes();
+    }
+    _digestCalled = true;
+    _finalizeData();
+    _iterate();
+    assert(_pendingData.length == 0);
+    return _resultAsBytes();
+  }
+
+  // Returns the block size of the hash in bytes.
+  int get blockSize {
+   return _chunkSizeInWords * _BYTES_PER_WORD;
+  }
+
+  // One round of the hash computation.
+  void _updateHash(List<int> m);
+
+  // Helper methods.
+  int _add32(x, y) => (x + y) & _MASK_32;
+  int _roundUp(val, n) => (val + n - 1) & -n;
+
+  // Compute the final result as a list of bytes from the hash words.
+  List<int> _resultAsBytes() {
+    var result = [];
+    for (var i = 0; i < _h.length; i++) {
+      result.addAll(_wordToBytes(_h[i]));
+    }
+    return result;
+  }
+
+  // Converts a list of bytes to a chunk of 32-bit words.
+  void _bytesToChunk(List<int> data, int dataIndex) {
+    assert((data.length - dataIndex) >= (_chunkSizeInWords * _BYTES_PER_WORD));
+
+    for (var wordIndex = 0; wordIndex < _chunkSizeInWords; wordIndex++) {
+      var w3 = _bigEndianWords ? data[dataIndex] : data[dataIndex + 3];
+      var w2 = _bigEndianWords ? data[dataIndex + 1] : data[dataIndex + 2];
+      var w1 = _bigEndianWords ? data[dataIndex + 2] : data[dataIndex + 1];
+      var w0 = _bigEndianWords ? data[dataIndex + 3] : data[dataIndex];
+      dataIndex += 4;
+      var word = (w3 & 0xff) << 24;
+      word |= (w2 & _MASK_8) << 16;
+      word |= (w1 & _MASK_8) << 8;
+      word |= (w0 & _MASK_8);
+      _currentChunk[wordIndex] = word;
+    }
+  }
+
+  // Convert a 32-bit word to four bytes.
+  List<int> _wordToBytes(int word) {
+    List<int> bytes = new List(_BYTES_PER_WORD);
+    bytes[0] = (word >> (_bigEndianWords ? 24 : 0)) & _MASK_8;
+    bytes[1] = (word >> (_bigEndianWords ? 16 : 8)) & _MASK_8;
+    bytes[2] = (word >> (_bigEndianWords ? 8 : 16)) & _MASK_8;
+    bytes[3] = (word >> (_bigEndianWords ? 0 : 24)) & _MASK_8;
+    return bytes;
+  }
+
+  // Iterate through data updating the hash computation for each
+  // chunk.
+  void _iterate() {
+    var len = _pendingData.length;
+    var chunkSizeInBytes = _chunkSizeInWords * _BYTES_PER_WORD;
+    if (len >= chunkSizeInBytes) {
+      var index = 0;
+      for (; (len - index) >= chunkSizeInBytes; index += chunkSizeInBytes) {
+        _bytesToChunk(_pendingData, index);
+        _updateHash(_currentChunk);
+      }
+      _pendingData = _pendingData.sublist(index, len);
+    }
+  }
+
+  // Finalize the data. Add a 1 bit to the end of the message. Expand with
+  // 0 bits and add the length of the message.
+  void _finalizeData() {
+    _pendingData.add(0x80);
+    var contentsLength = _lengthInBytes + 9;
+    var chunkSizeInBytes = _chunkSizeInWords * _BYTES_PER_WORD;
+    var finalizedLength = _roundUp(contentsLength, chunkSizeInBytes);
+    var zeroPadding = finalizedLength - contentsLength;
+    for (var i = 0; i < zeroPadding; i++) {
+      _pendingData.add(0);
+    }
+    var lengthInBits = _lengthInBytes * _BITS_PER_BYTE;
+    assert(lengthInBits < pow(2, 32));
+    if (_bigEndianWords) {
+      _pendingData.addAll(_wordToBytes(0));
+      _pendingData.addAll(_wordToBytes(lengthInBits & _MASK_32));
+    } else {
+      _pendingData.addAll(_wordToBytes(lengthInBits & _MASK_32));
+      _pendingData.addAll(_wordToBytes(0));
+    }
+  }
+}
+
+
+/**
+ * Interface for cryptographic hash functions.
+ *
+ * The [add] method is used to add data to the hash. The [close] method
+ * is used to extract the message digest.
+ *
+ * Once the [close] method has been called no more data can be added using the
+ * [add] method. If [add] is called after the first call to [close] a
+ * HashException is thrown.
+ *
+ * If multiple instances of a given Hash is needed the [newInstance]
+ * method can provide a new instance.
+ */
+// TODO(floitsch): make Hash implement Sink, EventSink or similar.
+abstract class Hash {
+  /**
+   * Add a list of bytes to the hash computation.
+   */
+  void add(List<int> data);
+
+  /**
+   * Finish the hash computation and extract the message digest as
+   * a list of bytes.
+   */
+  List<int> close();
+
+  /**
+   * Internal block size of the hash in bytes.
+   *
+   * This is exposed for use by the HMAC class which needs to know the
+   * block size for the [Hash] it is using.
+   */
+  int get blockSize;
+}
+
+/**
+ * SHA1 hash function implementation.
+ */
+class SHA1 extends _HashBase {
+  final List<int> _w;
+
+  // Construct a SHA1 hasher object.
+  SHA1() : _w = new List(80), super(16, 5, true) {
+    _h[0] = 0x67452301;
+    _h[1] = 0xEFCDAB89;
+    _h[2] = 0x98BADCFE;
+    _h[3] = 0x10325476;
+    _h[4] = 0xC3D2E1F0;
+  }
+
+  // Compute one iteration of the SHA1 algorithm with a chunk of
+  // 16 32-bit pieces.
+  void _updateHash(List<int> m) {
+    assert(m.length == 16);
+
+    var a = _h[0];
+    var b = _h[1];
+    var c = _h[2];
+    var d = _h[3];
+    var e = _h[4];
+
+    for (var i = 0; i < 80; i++) {
+      if (i < 16) {
+        _w[i] = m[i];
+      } else {
+        var n = _w[i - 3] ^ _w[i - 8] ^ _w[i - 14] ^ _w[i - 16];
+        _w[i] = _rotl32(n, 1);
+      }
+      var t = _add32(_add32(_rotl32(a, 5), e), _w[i]);
+      if (i < 20) {
+        t = _add32(_add32(t, (b & c) | (~b & d)), 0x5A827999);
+      } else if (i < 40) {
+        t = _add32(_add32(t, (b ^ c ^ d)), 0x6ED9EBA1);
+      } else if (i < 60) {
+        t = _add32(_add32(t, (b & c) | (b & d) | (c & d)), 0x8F1BBCDC);
+      } else {
+        t = _add32(_add32(t, b ^ c ^ d), 0xCA62C1D6);
+      }
+
+      e = d;
+      d = c;
+      c = _rotl32(b, 30);
+      b = a;
+      a = t & _MASK_32;
+    }
+
+    _h[0] = _add32(a, _h[0]);
+    _h[1] = _add32(b, _h[1]);
+    _h[2] = _add32(c, _h[2]);
+    _h[3] = _add32(d, _h[3]);
+    _h[4] = _add32(e, _h[4]);
+  }
+}
+
+abstract class _CryptoUtils {
+
+  static const int PAD = 61; // '='
+  static const int CR = 13;  // '\r'
+  static const int LF = 10;  // '\n'
+  static const int LINE_LENGTH = 76;
+
+  static const String _encodeTable =
+      "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+  static const String _encodeTableUrlSafe =
+      "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
+
+  // Lookup table used for finding Base 64 alphabet index of a given byte.
+  // -2 : Outside Base 64 alphabet.
+  // -1 : '\r' or '\n'
+  //  0 : = (Padding character).
+  // >0 : Base 64 alphabet index of given byte.
+  static const List<int> _decodeTable =
+      const [ -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -2, -2, -1, -2, -2,
+              -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
+              -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 62, -2, 62, -2, 63,
+              52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -2, -2, -2,  0, -2, -2,
+              -2,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
+              15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -2, -2, -2, -2, 63,
+              -2, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+              41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -2, -2, -2, -2, -2,
+              -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
+              -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
+              -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
+              -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
+              -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
+              -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
+              -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
+              -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2 ];
+
+  static String bytesToBase64(List<int> bytes,
+                              [bool urlSafe = false,
+                               bool addLineSeparator = false]) {
+    int len = bytes.length;
+    if (len == 0) {
+      return "";
+    }
+    final String lookup = urlSafe ? _encodeTableUrlSafe : _encodeTable;
+    // Size of 24 bit chunks.
+    final int remainderLength = len.remainder(3);
+    final int chunkLength = len - remainderLength;
+    // Size of base output.
+    int outputLen = ((len ~/ 3) * 4) + ((remainderLength > 0) ? 4 : 0);
+    // Add extra for line separators.
+    if (addLineSeparator) {
+      outputLen += ((outputLen - 1) ~/ LINE_LENGTH) << 1;
+    }
+    List<int> out = new List<int>(outputLen);
+
+    // Encode 24 bit chunks.
+    int j = 0, i = 0, c = 0;
+    while (i < chunkLength) {
+      int x = ((bytes[i++] << 16) & 0xFFFFFF) |
+              ((bytes[i++] << 8) & 0xFFFFFF) |
+                bytes[i++];
+      out[j++] = lookup.codeUnitAt(x >> 18);
+      out[j++] = lookup.codeUnitAt((x >> 12) & 0x3F);
+      out[j++] = lookup.codeUnitAt((x >> 6)  & 0x3F);
+      out[j++] = lookup.codeUnitAt(x & 0x3f);
+      // Add optional line separator for each 76 char output.
+      if (addLineSeparator && ++c == 19 && j < outputLen - 2) {
+        out[j++] = CR;
+        out[j++] = LF;
+        c = 0;
+      }
+    }
+
+    // If input length if not a multiple of 3, encode remaining bytes and
+    // add padding.
+    if (remainderLength == 1) {
+      int x = bytes[i];
+      out[j++] = lookup.codeUnitAt(x >> 2);
+      out[j++] = lookup.codeUnitAt((x << 4) & 0x3F);
+      out[j++] = PAD;
+      out[j++] = PAD;
+    } else if (remainderLength == 2) {
+      int x = bytes[i];
+      int y = bytes[i + 1];
+      out[j++] = lookup.codeUnitAt(x >> 2);
+      out[j++] = lookup.codeUnitAt(((x << 4) | (y >> 4)) & 0x3F);
+      out[j++] = lookup.codeUnitAt((y << 2) & 0x3F);
+      out[j++] = PAD;
+    }
+
+    return new String.fromCharCodes(out);
+  }
+}
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/closure_tracer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/closure_tracer.dart
index b0b0c85..7d882cd 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/closure_tracer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/closure_tracer.dart
@@ -6,6 +6,8 @@
 
 class ClosureTracerVisitor extends TracerVisitor<ApplyableTypeInformation> {
   final Iterable<FunctionElement> tracedElements;
+  final List<CallSiteTypeInformation> callsToAnalyze =
+      new List<CallSiteTypeInformation>();
 
   ClosureTracerVisitor(this.tracedElements, tracedType, inferrer)
       : super(tracedType, inferrer);
@@ -15,20 +17,17 @@
       e.functionSignature.forEachParameter((Element parameter) {
         ElementTypeInformation info =
             inferrer.types.getInferredTypeOf(parameter);
-        info.abandonInferencing = info.abandonInferencing &&
-                                  !info.mightResume;
+        info.maybeResume();
       });
     }
     analyze();
+    if (!continueAnalyzing) return;
+    callsToAnalyze.forEach(analyzeCall);
     for(FunctionElement e in tracedElements) {
       e.functionSignature.forEachParameter((Element parameter) {
         ElementTypeInformation info =
             inferrer.types.getInferredTypeOf(parameter);
-        if (continueAnalyzing) {
-          info.disableInferenceForClosures = false;
-        } else {
-          info.giveUp(inferrer);
-        }
+        info.disableInferenceForClosures = false;
       });
     }
   }
@@ -40,6 +39,10 @@
     }
   }
 
+  void registerCallForLaterAnalysis(CallSiteTypeInformation info) {
+    callsToAnalyze.add(info);
+  }
+
   void analyzeCall(CallSiteTypeInformation info) {
     Selector selector = info.selector;
     tracedElements.forEach((FunctionElement functionElement) {
@@ -52,7 +55,7 @@
   visitClosureCallSiteTypeInformation(ClosureCallSiteTypeInformation info) {
     super.visitClosureCallSiteTypeInformation(info);
     if (info.closure == currentUser) {
-      analyzeCall(info);
+      registerCallForLaterAnalysis(info);
     } else {
       bailout('Passed to a closure');
     }
@@ -73,7 +76,7 @@
         && inferrer.types.getInferredTypeOf(called) == currentUser) {
       // This node can be a closure call as well. For example, `foo()`
       // where `foo` is a getter.
-      analyzeCall(info);
+      registerCallForLaterAnalysis(info);
     }
     if (checkIfFunctionApply(called) &&
         info.arguments != null &&
@@ -101,7 +104,7 @@
           tagAsFunctionApplyTarget("dynamic call");
         }
       } else if (info.targets.any((element) => checkIfCurrentUser(element))) {
-        analyzeCall(info);
+        registerCallForLaterAnalysis(info);
       }
     } else if (info.selector.isGetter &&
         info.selector.name == Compiler.CALL_OPERATOR_NAME) {
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/concrete_types_inferrer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/concrete_types_inferrer.dart
index 4b8732b..218a613 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/concrete_types_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/concrete_types_inferrer.dart
@@ -437,7 +437,7 @@
         return new TypeMask.nonNullSubclass(compiler.backend.intImplementation,
                                             compiler.world);
       } else {
-        return new TypeMask.nonNullExact(element.declaration);
+        return new TypeMask.nonNullExact(element.declaration, compiler.world);
       }
     }
   }
@@ -1294,7 +1294,7 @@
       Element enclosing = field.enclosingElement;
       if (enclosing.isClass) {
         ClassElement cls = enclosing;
-        TypeMask receiverMask = new TypeMask.exact(cls.declaration);
+        TypeMask receiverMask = new TypeMask.exact(cls.declaration, classWorld);
         TypeMask resultMask = types.concreteTypeToTypeMask(result);
         augmentInferredSelectorType(selector, receiverMask, resultMask);
       }
@@ -1561,7 +1561,8 @@
           || receiverType == compiler.backend.intImplementation)
               ? new TypeMask.nonNullSubclass(receiverType.declaration,
                   compiler.world)
-              : new TypeMask.nonNullExact(receiverType.declaration);
+              : new TypeMask.nonNullExact(receiverType.declaration,
+                  compiler.world);
       TypeMask resultMask = types.concreteTypeToTypeMask(result);
       augmentInferredSelectorType(selector, receiverMask, resultMask);
     }
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/inferrer_visitor.dart b/sdk/lib/_internal/compiler/implementation/inferrer/inferrer_visitor.dart
index 91fad25..609f7d1 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/inferrer_visitor.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/inferrer_visitor.dart
@@ -602,6 +602,7 @@
 
 abstract class InferrerVisitor
     <T, E extends MinimalInferrerEngine<T>> extends ResolvedVisitor<T> {
+  final Compiler compiler;
   final AstElement analyzedElement;
   final TypeSystem<T> types;
   final E inferrer;
@@ -632,12 +633,11 @@
   InferrerVisitor(AstElement analyzedElement,
                   this.inferrer,
                   this.types,
-                  Compiler compiler,
+                  this.compiler,
                   [LocalsHandler<T> handler])
     : this.analyzedElement = analyzedElement,
       this.locals = handler,
-      super(analyzedElement.resolvedAst.elements,
-            compiler) {
+      super(analyzedElement.resolvedAst.elements) {
     if (handler != null) return;
     Node node = analyzedElement.node;
     FieldInitializationScope<T> fieldScope =
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/list_tracer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/list_tracer.dart
index 82ee9b5..b12f219 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/list_tracer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/list_tracer.dart
@@ -127,8 +127,8 @@
 
 
 class ListTracerVisitor extends TracerVisitor<ListTypeInformation> {
-  // The [List] of found assignments to the list.
-  List<TypeInformation> assignments = <TypeInformation>[];
+  // The [Set] of found assignments to the list.
+  Set<TypeInformation> assignments = new Setlet<TypeInformation>();
   bool callsGrowableMethod = false;
 
   ListTracerVisitor(tracedType, inferrer) : super(tracedType, inferrer);
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/node_tracer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/node_tracer.dart
index add2abf..dd5884b 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/node_tracer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/node_tracer.dart
@@ -352,20 +352,25 @@
     return outermost.declaration != element.declaration;
   }
 
-  void visitElementTypeInformation(ElementTypeInformation info) {
+  void visitMemberTypeInformation(MemberTypeInformation info) {
     Element element = info.element;
-    if (element.isParameter
-        && inferrer.isNativeElement(element.enclosingElement)) {
-      bailout('Passed to a native method');
-    }
     if (info.isClosurized) {
       bailout('Returned from a closurized method');
     }
     if (isClosure(info.element)) {
       bailout('Returned from a closure');
     }
-    if (compiler.backend.isAccessibleByReflection(info.element)) {
-      bailout('Escape in reflection');
+    if (!inferrer.compiler.backend
+        .canBeUsedForGlobalOptimizations(info.element)) {
+      bailout('Escape to code that has special backend treatment');
+    }
+    addNewEscapeInformation(info);
+  }
+
+  void visitParameterTypeInformation(ParameterTypeInformation info) {
+    Element element = info.element;
+    if (inferrer.isNativeElement(element.enclosingElement)) {
+      bailout('Passed to a native method');
     }
     if (!inferrer.compiler.backend
         .canBeUsedForGlobalOptimizations(info.element)) {
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart
index d9dc1c5..4191472 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart
@@ -102,7 +102,7 @@
   TypeMask nonNullSubclass(ClassElement type)
       => new TypeMask.nonNullSubclass(type.declaration, classWorld);
   TypeMask nonNullExact(ClassElement type)
-      => new TypeMask.nonNullExact(type.declaration);
+      => new TypeMask.nonNullExact(type.declaration, classWorld);
   TypeMask nonNullEmpty() => new TypeMask.nonNullEmpty();
 
   TypeMask allocateList(TypeMask type,
@@ -596,6 +596,11 @@
   }
 
   T visitFunctionExpression(ast.FunctionExpression node) {
+    // We loose track of [this] in closures (see issue 20840). To be on
+    // the safe side, we mark [this] as exposed here. We could do better by
+    // analyzing the closure.
+    // TODO(herhut): Analyze whether closure exposes this.
+    isThisExposed = true;
     LocalFunctionElement element = elements.getFunctionDefinition(node);
     // We don't put the closure in the work queue of the
     // inferrer, because it will share information with its enclosing
@@ -1005,8 +1010,11 @@
     // we have to forward the call to the effective target of the
     // factory.
     if (element.isFactoryConstructor) {
-      ConstructorElement constructor = element;
-      if (constructor.isRedirectingFactory) {
+      // TODO(herhut): Remove the while loop once effectiveTarget forwards to
+      //               patches.
+      while (element.isFactoryConstructor) {
+        ConstructorElement constructor = element;
+        if (!constructor.isRedirectingFactory) break;
         element = constructor.effectiveTarget.implementation;
       }
     }
@@ -1063,7 +1071,7 @@
     Selector selector = elements.getSelector(node);
     String name = selector.name;
     handleStaticSend(node, selector, elements[node], arguments);
-    if (name == 'JS') {
+    if (name == 'JS' || name == 'JS_EMBEDDED_GLOBAL') {
       native.NativeBehavior nativeBehavior =
           compiler.enqueuer.resolution.nativeEnqueuer.getNativeBehaviorOf(node);
       sideEffects.add(nativeBehavior.sideEffects);
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart
index a0c03e9..f7b6761 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart
@@ -22,7 +22,7 @@
          TreeElementMapping;
 import 'inferrer_visitor.dart' show TypeSystem, ArgumentsTypes;
 import '../native_handler.dart' as native;
-import '../util/util.dart' show Spannable, Setlet;
+import '../util/util.dart' show Spannable, Setlet, ImmutableEmptySet;
 import 'simple_types_inferrer.dart';
 
 part 'type_graph_nodes.dart';
@@ -68,6 +68,19 @@
     nonNullEmptyType = getConcreteTypeFor(const TypeMask.nonNullEmpty());
   }
 
+  /// Used to group [TypeInformation] nodes by the element that triggered their
+  /// creation.
+  MemberTypeInformation _currentMember = null;
+  MemberTypeInformation get currentMember => _currentMember;
+
+  void withMember(MemberElement element, action) {
+    assert(invariant(element, _currentMember == null,
+        message: "Already constructing graph for $_currentMember."));
+    _currentMember = getInferredTypeOf(element);
+    action();
+    _currentMember = null;
+  }
+
   TypeInformation nullTypeCache;
   TypeInformation get nullType {
     if (nullTypeCache != null) return nullTypeCache;
@@ -254,7 +267,7 @@
   ElementTypeInformation getInferredTypeOf(Element element) {
     element = element.implementation;
     return typeInformations.putIfAbsent(element, () {
-      return new ElementTypeInformation(element);
+      return new ElementTypeInformation(element, this);
     });
   }
 
@@ -289,7 +302,8 @@
   }
 
   TypeInformation nonNullExact(ClassElement type) {
-    return getConcreteTypeFor(new TypeMask.nonNullExact(type.declaration));
+    return getConcreteTypeFor(
+        new TypeMask.nonNullExact(type.declaration, classWorld));
   }
 
   TypeInformation nonNullEmpty() {
@@ -319,16 +333,17 @@
     ContainerTypeMask mask = new ContainerTypeMask(
         type.type, node, enclosing, elementTypeMask, inferredLength);
     ElementInContainerTypeInformation element =
-        new ElementInContainerTypeInformation(elementType);
+        new ElementInContainerTypeInformation(currentMember, elementType);
     element.inferred = isElementInferred;
 
     allocatedTypes.add(element);
     return allocatedLists[node] =
-        new ListTypeInformation(mask, element, length);
+        new ListTypeInformation(currentMember, mask, element, length);
   }
 
   TypeInformation allocateClosure(ast.Node node, Element element) {
-    TypeInformation result = new ClosureTypeInformation(node, element);
+    TypeInformation result =
+        new ClosureTypeInformation(currentMember, node, element);
     allocatedClosures.add(result);
     return result;
   }
@@ -356,13 +371,15 @@
                                        keyType,
                                        valueType);
 
-    TypeInformation keyTypeInfo = new KeyInMapTypeInformation(null);
-    TypeInformation valueTypeInfo = new ValueInMapTypeInformation(null);
+    TypeInformation keyTypeInfo =
+        new KeyInMapTypeInformation(currentMember, null);
+    TypeInformation valueTypeInfo =
+        new ValueInMapTypeInformation(currentMember, null);
     allocatedTypes.add(keyTypeInfo);
     allocatedTypes.add(valueTypeInfo);
 
     MapTypeInformation map =
-        new MapTypeInformation(mask, keyTypeInfo, valueTypeInfo);
+        new MapTypeInformation(currentMember, mask, keyTypeInfo, valueTypeInfo);
 
     for (int i = 0; i < keyTypes.length; ++i) {
       TypeInformation newType =
@@ -390,7 +407,7 @@
   TypeInformation allocateDiamondPhi(TypeInformation firstInput,
                                      TypeInformation secondInput) {
     PhiElementTypeInformation result =
-        new PhiElementTypeInformation(null, false, null);
+        new PhiElementTypeInformation(currentMember, null, false, null);
     result.addAssignment(firstInput);
     result.addAssignment(secondInput);
     allocatedTypes.add(result);
@@ -408,7 +425,7 @@
       return inputType;
     }
     PhiElementTypeInformation result =
-        new PhiElementTypeInformation(node, true, variable);
+        new PhiElementTypeInformation(currentMember, node, true, variable);
     allocatedTypes.add(result);
     result.addAssignment(inputType);
     return result;
@@ -442,8 +459,8 @@
 }
 
 /**
- * A work queue for the inferrer. It filters out nodes on
- * which we gave up on inferencing, as well as ensures through
+ * A work queue for the inferrer. It filters out nodes that are tagged as
+ * [TypeInformation.doNotEnqueue], as well as ensures through
  * [TypeInformation.inQueue] that a node is in the queue only once at
  * a time.
  */
@@ -451,7 +468,7 @@
   final Queue<TypeInformation> queue = new Queue<TypeInformation>();
 
   void add(TypeInformation element) {
-    if (element.abandonInferencing) return;
+    if (element.doNotEnqueue) return;
     if (element.inQueue) return;
     queue.addLast(element);
     element.inQueue = true;
@@ -538,7 +555,7 @@
     info.bailedOut = false;
     info.elementType.inferred = true;
     TypeMask fixedListType = compiler.typesTask.fixedListType;
-    if (info.originalContainerType.forwardTo == fixedListType) {
+    if (info.originalType.forwardTo == fixedListType) {
       info.checksGrowable = tracer.callsGrowableMethod;
     }
     tracer.assignments.forEach(info.elementType.addAssignment);
@@ -582,10 +599,9 @@
         compiler.log('Added $addedInGraph elements in inferencing graph.');
         compiler.progress.reset();
       }
-      // Force the creation of the [ElementTypeInformation] to ensure it is
-      // in the graph.
-      types.getInferredTypeOf(element);
-      analyze(element, null);
+      // This also forces the creation of the [ElementTypeInformation] to ensure
+      // it is in the graph.
+      types.withMember(element, () => analyze(element, null));
     });
     compiler.log('Added $addedInGraph elements in inferencing graph.');
 
@@ -663,14 +679,14 @@
     if (_PRINT_SUMMARY) {
       types.allocatedLists.values.forEach((ListTypeInformation info) {
         print('${info.type} '
-              'for ${info.originalContainerType.allocationNode} '
-              'at ${info.originalContainerType.allocationElement} '
+              'for ${info.originalType.allocationNode} '
+              'at ${info.originalType.allocationElement} '
               'after ${info.refineCount}');
       });
       types.allocatedMaps.values.forEach((MapTypeInformation info) {
         print('${info.type} '
-              'for ${(info.type as MapTypeMask).allocationNode} '
-              'at ${(info.type as MapTypeMask).allocationElement} '
+              'for ${info.originalType.allocationNode} '
+              'at ${info.originalType.allocationElement} '
               'after ${info.refineCount}');
       });
       types.allocatedClosures.forEach((TypeInformation info) {
@@ -797,17 +813,23 @@
       TypeInformation info = workQueue.remove();
       TypeMask oldType = info.type;
       TypeMask newType = info.refine(this);
+      // Check that refinement has not accidentially changed the type.
+      assert(oldType == info.type);
+      if (info.abandonInferencing) info.doNotEnqueue = true;
       if ((info.type = newType) != oldType) {
         overallRefineCount++;
         info.refineCount++;
-        workQueue.addAll(info.users);
-        if (info.hasStableType(this)) {
-          info.stabilize(this);
-        } else if (info.refineCount > MAX_CHANGE_COUNT) {
+        if (info.refineCount > MAX_CHANGE_COUNT) {
           if (_ANOMALY_WARN) {
             print("ANOMALY WARNING: max refinement reached for $info");
           }
           info.giveUp(this);
+          info.type = info.refine(this);
+          info.doNotEnqueue = true;
+        }
+        workQueue.addAll(info.users);
+        if (info.hasStableType(this)) {
+          info.stabilize(this);
         }
       }
     }
@@ -846,7 +868,7 @@
     } else if (selector != null && selector.isGetter) {
       // We are tearing a function off and thus create a closure.
       assert(callee.isFunction);
-      ElementTypeInformation info = types.getInferredTypeOf(callee);
+      MemberTypeInformation info = types.getInferredTypeOf(callee);
       if (remove) {
         info.closurizedCount--;
       } else {
@@ -861,9 +883,9 @@
         FunctionElement function = callee.implementation;
         FunctionSignature signature = function.functionSignature;
         signature.forEachParameter((Element parameter) {
-          ElementTypeInformation info = types.getInferredTypeOf(parameter);
-          info.giveUp(this, clearAssignments: false);
-          if (addToQueue) workQueue.addAll(info.users);
+          ParameterTypeInformation info = types.getInferredTypeOf(parameter);
+          info.tagAsTearOffClosureParameter(this);
+          if (addToQueue) workQueue.add(info);
         });
       }
     } else {
@@ -918,7 +940,7 @@
         List<TypeInformation> assignments = info.assignments;
         for (int i = 0; i < assignments.length; i++) {
           if (assignments[i] == existing) {
-            info.assignments[i] = type;
+            assignments[i] = type;
             type.addUser(info);
           }
         }
@@ -940,7 +962,7 @@
    */
   TypeInformation getDefaultTypeOfParameter(Element parameter) {
     return defaultTypeOfParameter.putIfAbsent(parameter, () {
-      return new PlaceholderTypeInformation();
+      return new PlaceholderTypeInformation(types.currentMember);
     });
   }
 
@@ -1012,7 +1034,8 @@
                                         SideEffects sideEffects,
                                         bool inLoop) {
     CallSiteTypeInformation info = new StaticCallSiteTypeInformation(
-          node, caller, callee, selector, arguments, inLoop);
+          types.currentMember, node, caller, callee, selector, arguments,
+          inLoop);
     info.addToGraph(this);
     allocatedCalls.add(info);
     updateSideEffects(sideEffects, selector, callee);
@@ -1036,7 +1059,8 @@
     });
 
     CallSiteTypeInformation info = new DynamicCallSiteTypeInformation(
-          node, caller, selector, receiverType, arguments, inLoop);
+          types.currentMember, node, caller, selector, receiverType, arguments,
+          inLoop);
 
     info.addToGraph(this);
     allocatedCalls.add(info);
@@ -1053,7 +1077,8 @@
     sideEffects.setDependsOnSomething();
     sideEffects.setAllSideEffects();
     CallSiteTypeInformation info = new ClosureCallSiteTypeInformation(
-          node, caller, selector, closure, arguments, inLoop);
+          types.currentMember, node, caller, selector, closure, arguments,
+          inLoop);
     info.addToGraph(this);
     allocatedCalls.add(info);
     return info;
@@ -1113,7 +1138,8 @@
       throw new UnsupportedError(
           "Cannot query the type inferrer when type inference is disabled.");
     }
-    return types.getInferredTypeOf(element).callers;
+    MemberTypeInformation info = types.getInferredTypeOf(element);
+    return info.callers;
   }
 
   /**
@@ -1231,7 +1257,7 @@
 
   bool isCalledOnce(Element element) {
     if (compiler.disableTypeInference) return false;
-    ElementTypeInformation info = inferrer.types.getInferredTypeOf(element);
+    MemberTypeInformation info = inferrer.types.getInferredTypeOf(element);
     return info.isCalledOnce();
   }
 
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_nodes.dart b/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_nodes.dart
index 3499bcd..72ae2ba 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_nodes.dart
@@ -16,18 +16,24 @@
  * - Type of the element in a container
  *
  * A node has a set of assignments and users. Assignments are used to
- * compute the type of the node ([TypeInformation.refine]). Users are
+ * compute the type of the node ([TypeInformation.computeType]). Users are
  * added to the inferrer's work queue when the type of the node
  * changes.
  */
 abstract class TypeInformation {
-  var /* List|Set */ users;
+  Set<TypeInformation> users;
   var /* List|ParameterAssignments */ assignments;
 
   /// The type the inferrer has found for this [TypeInformation].
   /// Initially empty.
   TypeMask type = const TypeMask.nonNullEmpty();
 
+  /// The graph node of the member this [TypeInformation] node belongs to
+  final MemberTypeInformation context;
+
+  /// The element this
+  MemberElement get contextMember => context == null ? null : context.element;
+
   /// We abandon inference in certain cases (complex cyclic flow, native
   /// behaviours, etc.). In some case, we might resume inference in the
   /// closure tracer, which is handled by checking whether [assignments] has
@@ -43,6 +49,13 @@
   /// work queue.
   bool inQueue = false;
 
+  /// Used to disable enqueueing of type informations where we know that their
+  /// type will not change for other reasons than being stable. For example,
+  /// if inference is disabled for a type and it is hardwired to dynamic, this
+  /// is set to true to spare recomputing dynamic again and again. Changing this
+  /// to false should never change inference outcome, just make is slower.
+  bool doNotEnqueue = false;
+
   /// Whether this [TypeInformation] has a stable [type] that will not
   /// change.
   bool isStable = false;
@@ -53,10 +66,20 @@
 
   bool get isConcrete => false;
 
-  TypeInformation([users, assignments])
-      : users = (users == null) ? new Setlet<TypeInformation>() : users,
-        assignments = (assignments == null) ? <TypeInformation>[] : assignments;
+  TypeInformation(this.context) : assignments = <TypeInformation>[],
+                                  users = new Setlet<TypeInformation>();
 
+  TypeInformation.noAssignments(this.context)
+      : assignments = const <TypeInformation>[],
+        users = new Setlet<TypeInformation>();
+
+  TypeInformation.untracked()
+      : assignments = const <TypeInformation>[],
+        users = const ImmutableEmptySet(),
+        context = null;
+
+  TypeInformation.withAssignments(this.context, this.assignments)
+      : users = new Setlet<TypeInformation>();
 
   void addUser(TypeInformation user) {
     assert(!user.isConcrete);
@@ -99,12 +122,25 @@
   }
 
   TypeMask refine(TypeGraphInferrerEngine inferrer) {
-    return type;
+    return abandonInferencing ? safeType(inferrer) : computeType(inferrer);
+  }
+
+  /**
+   * Computes a new type for this [TypeInformation] node depending on its
+   * potentially updated inputs.
+   */
+  TypeMask computeType(TypeGraphInferrerEngine inferrer);
+
+  /**
+   * Returns an approximation for this [TypeInformation] node that is always
+   * safe to use. Used when abandoning inference on a node.
+   */
+  TypeMask safeType(TypeGraphInferrerEngine inferrer) {
+    return inferrer.types.dynamicType.type;
   }
 
   void giveUp(TypeGraphInferrerEngine inferrer, {bool clearAssignments: true}) {
     abandonInferencing = true;
-    type = inferrer.types.dynamicType.type;
     // Do not remove [this] as a user of nodes in [assignments],
     // because our tracing analysis could be interested in tracing
     // this node.
@@ -115,7 +151,7 @@
 
   void clear() {
     assignments = STOP_TRACKING_ASSIGNMENTS_MARKER;
-    users = const <TypeInformation>[];
+    users = const ImmutableEmptySet();
   }
 
   /// Reset the analysis of this node by making its type empty.
@@ -150,12 +186,16 @@
     abandonInferencing = true;
     isStable = true;
   }
+
+  void maybeResume() {
+    if (!mightResume) return;
+    abandonInferencing = false;
+    doNotEnqueue = false;
+  }
 }
 
-abstract class ApplyableTypeInformation extends TypeInformation {
+abstract class ApplyableTypeInformation implements TypeInformation {
   bool mightBePassedToFunctionApply = false;
-
-  ApplyableTypeInformation([users, assignments]) : super(users, assignments);
 }
 
 /**
@@ -167,12 +207,13 @@
  * [getDefaultTypeOfParameter] and [setDefaultTypeOfParameter] for details.
  */
 class PlaceholderTypeInformation extends TypeInformation {
+  PlaceholderTypeInformation(MemberTypeInformation context) : super(context);
 
   void accept(TypeInformationVisitor visitor) {
     throw new UnsupportedError("Cannot visit placeholder");
   }
 
-  TypeMask refine(TypeGraphInferrerEngine inferrer) {
+  TypeMask computeType(TypeGraphInferrerEngine inferrer) {
     throw new UnsupportedError("Cannot refine placeholder");
   }
 
@@ -254,12 +295,42 @@
  *   trust their type annotation.
  *
  */
-class ElementTypeInformation extends ApplyableTypeInformation  {
+abstract class ElementTypeInformation extends TypeInformation {
   final Element element;
 
   /// Marker to disable inference for closures in [handleSpecialCases].
   bool disableInferenceForClosures = true;
 
+  factory ElementTypeInformation(Element element, TypeInformationSystem types) {
+    if (element.isParameter || element.isInitializingFormal) {
+      ParameterElement parameter = element;
+      if (parameter.functionDeclaration.isInstanceMember) {
+        return new ParameterTypeInformation._instanceMember(element, types);
+      }
+      return new ParameterTypeInformation._internal(element, types);
+    }
+    return new MemberTypeInformation._internal(element);
+  }
+
+  ElementTypeInformation._internal(MemberTypeInformation context, this.element)
+      : super(context);
+  ElementTypeInformation._withAssignments(MemberTypeInformation context,
+      this.element, assignments)
+      : super.withAssignments(context, assignments);
+}
+
+/**
+ * A node representing members in the broadest sense:
+ *
+ * - Functions
+ * - Constructors
+ * - Fields (also synthetic ones due to closures)
+ *
+ * These should never be created directly but instead are constructed by
+ * the [ElementTypeInformation] factory.
+ */
+class MemberTypeInformation extends ElementTypeInformation
+    with ApplyableTypeInformation {
   /**
    * If [element] is a function, [closurizedCount] is the number of
    * times it is closurized. The value gets updated while infering.
@@ -276,17 +347,8 @@
    */
   final Map<Element, Setlet<Spannable>> _callers = new Map<Element, Setlet>();
 
-  ElementTypeInformation.internal(this.element, assignments)
-      : super(null, assignments);
-
-  factory ElementTypeInformation(Element element) {
-    var assignments = null;
-    if (element.enclosingElement.isInstanceMember &&
-        (element.isParameter || element.isInitializingFormal)) {
-      assignments = new ParameterAssignments();
-    }
-    return new ElementTypeInformation.internal(element, assignments);
-  }
+  MemberTypeInformation._internal(Element element)
+      : super._internal(null, element);
 
   void addCall(Element caller, Spannable node) {
     assert(node is ast.Node || node is cps_ir.Node || node is Element);
@@ -322,43 +384,11 @@
   bool get isStable => super.isStable && !isClosurized;
 
   TypeMask handleSpecialCases(TypeGraphInferrerEngine inferrer) {
-    if (abandonInferencing) return type;
-
-    if (element.isParameter) {
-      Element enclosing = element.enclosingElement;
-      if (Elements.isLocal(enclosing) && disableInferenceForClosures) {
-        // Do not infer types for parameters of closures. We do not
-        // clear the assignments in case the closure is successfully
-        // traced.
-        giveUp(inferrer, clearAssignments: false);
-        return type;
-      } else if (enclosing.isInstanceMember &&
-                 (enclosing.name == Compiler.NO_SUCH_METHOD ||
-                  (enclosing.name == Compiler.CALL_OPERATOR_NAME &&
-                   disableInferenceForClosures))) {
-        // Do not infer types for parameters of [noSuchMethod] and
-        // [call] instance methods.
-        giveUp(inferrer);
-        return type;
-      } else if (enclosing == inferrer.mainElement) {
-        // The implicit call to main is not seen by the inferrer,
-        // therefore we explicitly set the type of its parameters as
-        // dynamic.
-        // TODO(14566): synthesize a call instead to get the exact
-        // types.
-        giveUp(inferrer);
-        return type;
-      }
-    }
-    if (element.isField ||
-        element.isParameter ||
-        element.isInitializingFormal) {
-      if (!inferrer.compiler.backend.canBeUsedForGlobalOptimizations(element)) {
-        // Do not infer types for fields and parameters being assigned
-        // by synthesized calls.
-        giveUp(inferrer);
-        return type;
-      }
+    if (element.isField &&
+        !inferrer.compiler.backend.canBeUsedForGlobalOptimizations(element)) {
+      // Do not infer types for fields being assigned by synthesized calls.
+      giveUp(inferrer);
+      return safeType(inferrer);
     }
     if (inferrer.isNativeElement(element)) {
       // Use the type annotation as the type for native elements. We
@@ -375,7 +405,7 @@
         TypedElement typedElement = element;
         var elementType = typedElement.type;
         if (elementType.kind != TypeKind.FUNCTION) {
-          return type;
+          return safeType(inferrer);
         } else {
           return inferrer.typeOfNativeBehavior(
               native.NativeBehavior.ofMethod(element, inferrer.compiler)).type;
@@ -400,8 +430,6 @@
   TypeMask potentiallyNarrowType(TypeMask mask,
                                  TypeGraphInferrerEngine inferrer) {
     Compiler compiler = inferrer.compiler;
-    // Parameters are being explicitly checked in the method.
-    if (element.isParameter || element.isInitializingFormal) return mask;
     if (!compiler.trustTypeAnnotations && !compiler.enableTypeAssertions) {
       return mask;
     }
@@ -415,28 +443,22 @@
     return new TypeMaskSystem(compiler).narrowType(mask, type);
   }
 
-  TypeMask refine(TypeGraphInferrerEngine inferrer) {
+  TypeMask computeType(TypeGraphInferrerEngine inferrer) {
     TypeMask special = handleSpecialCases(inferrer);
     if (special != null) return potentiallyNarrowType(special, inferrer);
     return potentiallyNarrowType(
         inferrer.types.computeTypeMask(assignments), inferrer);
   }
 
-  String toString() => 'Element $element $type';
+  String toString() => 'MemberElement $element $type';
 
   accept(TypeInformationVisitor visitor) {
-    return visitor.visitElementTypeInformation(this);
+    return visitor.visitMemberTypeInformation(this);
   }
 
   Element get owner => element.outermostEnclosingMemberOrTopLevel;
 
   bool hasStableType(TypeGraphInferrerEngine inferrer) {
-    // The number of assignments of parameters of instance methods is
-    // not stable. Therefore such a parameter cannot be stable.
-    if (element.isParameter && element.enclosingElement.isInstanceMember) {
-      return false;
-    }
-
     // The number of assignments of non-final fields is
     // not stable. Therefore such a field cannot be stable.
     if (element.isField && !(element.isConst || element.isFinal)) {
@@ -450,6 +472,103 @@
 }
 
 /**
+ * A node representing parameters:
+ *
+ * - Parameters
+ * - Initializing formals
+ *
+ * These should never be created directly but instead are constructed by
+ * the [ElementTypeInformation] factory.
+ */
+class ParameterTypeInformation extends ElementTypeInformation {
+  ParameterTypeInformation._internal(ParameterElement element,
+                                     TypeInformationSystem types)
+      : super._internal(types.getInferredTypeOf(element.functionDeclaration),
+                        element) {
+    assert(!element.functionDeclaration.isInstanceMember);
+  }
+
+  ParameterTypeInformation._instanceMember(ParameterElement element,
+                                           TypeInformationSystem types)
+      : super._withAssignments(
+          types.getInferredTypeOf(element.functionDeclaration),
+          element,
+          new ParameterAssignments()) {
+    assert(element.functionDeclaration.isInstanceMember);
+  }
+
+  bool isTearOffClosureParameter = false;
+
+  void tagAsTearOffClosureParameter(TypeGraphInferrerEngine inferrer) {
+    assert(element.isParameter);
+    isTearOffClosureParameter = true;
+  }
+
+  // TODO(herhut): Cleanup into one conditional.
+  TypeMask handleSpecialCases(TypeGraphInferrerEngine inferrer) {
+    if (!inferrer.compiler.backend.canBeUsedForGlobalOptimizations(element)) {
+      // Do not infer types for fields and parameters being assigned
+      // by synthesized calls.
+      giveUp(inferrer);
+      return safeType(inferrer);
+    }
+
+    // The below do not apply to parameters of constructors, so skip
+    // initializing formals.
+    if (element.isInitializingFormal) return null;
+
+    Element enclosing = element.enclosingElement;
+    if ((isTearOffClosureParameter || Elements.isLocal(enclosing)) &&
+        disableInferenceForClosures) {
+      // Do not infer types for parameters of closures. We do not
+      // clear the assignments in case the closure is successfully
+      // traced.
+      giveUp(inferrer, clearAssignments: false);
+      return safeType(inferrer);
+    }
+    if (enclosing.isInstanceMember &&
+        (enclosing.name == Compiler.NO_SUCH_METHOD ||
+        (enclosing.name == Compiler.CALL_OPERATOR_NAME &&
+         disableInferenceForClosures))) {
+      // Do not infer types for parameters of [noSuchMethod] and
+      // [call] instance methods.
+      giveUp(inferrer);
+      return safeType(inferrer);
+    }
+    if (enclosing == inferrer.mainElement) {
+      // The implicit call to main is not seen by the inferrer,
+      // therefore we explicitly set the type of its parameters as
+      // dynamic.
+      // TODO(14566): synthesize a call instead to get the exact
+      // types.
+      giveUp(inferrer);
+      return safeType(inferrer);
+    }
+
+    return null;
+  }
+
+  TypeMask computeType(TypeGraphInferrerEngine inferrer) {
+    TypeMask special = handleSpecialCases(inferrer);
+    if (special != null) return special;
+    return inferrer.types.computeTypeMask(assignments);
+  }
+
+  bool hasStableType(TypeGraphInferrerEngine inferrer) {
+    // The number of assignments of parameters of instance methods is
+    // not stable. Therefore such a parameter cannot be stable.
+    if (element.enclosingElement.isInstanceMember) {
+      return false;
+    }
+    return super.hasStableType(inferrer);
+  }
+
+  accept(TypeInformationVisitor visitor) {
+    return visitor.visitParameterTypeInformation(this);
+  }
+}
+
+/**
  * A [CallSiteTypeInformation] is a call found in the AST, or a
  * synthesized call for implicit calls in Dart (such as forwarding
  * factories). The [call] field is a [ast.Node] for the former, and an
@@ -459,7 +578,8 @@
  * any assignment. They rely on the [caller] field for static calls,
  * and [selector] and [receiver] fields for dynamic calls.
  */
-abstract class CallSiteTypeInformation extends ApplyableTypeInformation {
+abstract class CallSiteTypeInformation extends TypeInformation
+    with ApplyableTypeInformation {
   final Spannable call;
   final Element caller;
   final Selector selector;
@@ -467,11 +587,12 @@
   final bool inLoop;
 
   CallSiteTypeInformation(
+      MemberTypeInformation context,
       this.call,
       this.caller,
       this.selector,
       this.arguments,
-      this.inLoop) : super(null, const <TypeInformation>[]);
+      this.inLoop) : super.noAssignments(context);
 
   String toString() => 'Call site $call $type';
 
@@ -488,15 +609,17 @@
   final Element calledElement;
 
   StaticCallSiteTypeInformation(
+      MemberTypeInformation context,
       Spannable call,
       Element enclosing,
       this.calledElement,
       Selector selector,
       ArgumentsTypes arguments,
-      bool inLoop) : super(call, enclosing, selector, arguments, inLoop);
+      bool inLoop)
+      : super(context, call, enclosing, selector, arguments, inLoop);
 
   void addToGraph(TypeGraphInferrerEngine inferrer) {
-    ElementTypeInformation callee =
+    MemberTypeInformation callee =
         inferrer.types.getInferredTypeOf(calledElement);
     callee.addCall(caller, call);
     callee.addUser(this);
@@ -516,7 +639,7 @@
     return selector == null;
   }
 
-  TypeMask refine(TypeGraphInferrerEngine inferrer) {
+  TypeMask computeType(TypeGraphInferrerEngine inferrer) {
     if (isSynthesized) {
       assert(arguments != null);
       return inferrer.types.getInferredTypeOf(calledElement).type;
@@ -554,12 +677,14 @@
   Iterable<Element> targets;
 
   DynamicCallSiteTypeInformation(
+      MemberTypeInformation context,
       Spannable call,
       Element enclosing,
       Selector selector,
       this.receiver,
       ArgumentsTypes arguments,
-      bool inLoop) : super(call, enclosing, selector, arguments, inLoop);
+      bool inLoop)
+      : super(context, call, enclosing, selector, arguments, inLoop);
 
   void addToGraph(TypeGraphInferrerEngine inferrer) {
     assert(receiver != null);
@@ -570,7 +695,7 @@
       arguments.forEach((info) => info.addUser(this));
     }
     for (Element element in targets) {
-      ElementTypeInformation callee = inferrer.types.getInferredTypeOf(element);
+      MemberTypeInformation callee = inferrer.types.getInferredTypeOf(element);
       callee.addCall(caller, call);
       callee.addUser(this);
       inferrer.updateParameterAssignments(
@@ -679,7 +804,7 @@
     return null;
   }
 
-  TypeMask refine(TypeGraphInferrerEngine inferrer) {
+  TypeMask computeType(TypeGraphInferrerEngine inferrer) {
     Iterable<Element> oldTargets = targets;
     Selector typedSelector = computeTypedSelector(inferrer);
     inferrer.updateSelectorInTree(caller, call, typedSelector);
@@ -702,7 +827,7 @@
     // for all these targets.
     TypeMask newType = inferrer.types.joinTypeMasks(targets.map((element) {
       if (!oldTargets.contains(element)) {
-        ElementTypeInformation callee =
+        MemberTypeInformation callee =
             inferrer.types.getInferredTypeOf(element);
         callee.addCall(caller, call);
         callee.addUser(this);
@@ -760,7 +885,7 @@
     // anymore.
     oldTargets.forEach((element) {
       if (!targets.contains(element)) {
-        ElementTypeInformation callee =
+        MemberTypeInformation callee =
             inferrer.types.getInferredTypeOf(element);
         callee.removeCall(caller, call);
         callee.removeUser(this);
@@ -774,17 +899,19 @@
   }
 
   void giveUp(TypeGraphInferrerEngine inferrer, {bool clearAssignments: true}) {
-    inferrer.updateSelectorInTree(caller, call, selector);
-    Iterable<Element> oldTargets = targets;
-    targets = inferrer.compiler.world.allFunctions.filter(selector);
-    for (Element element in targets) {
-      if (!oldTargets.contains(element)) {
-        ElementTypeInformation callee =
-            inferrer.types.getInferredTypeOf(element);
-        callee.addCall(caller, call);
-        inferrer.updateParameterAssignments(
-            this, element, arguments, selector, remove: false,
-            addToQueue: true);
+    if (!abandonInferencing) {
+      inferrer.updateSelectorInTree(caller, call, selector);
+      Iterable<Element> oldTargets = targets;
+      targets = inferrer.compiler.world.allFunctions.filter(selector);
+      for (Element element in targets) {
+        if (!oldTargets.contains(element)) {
+          MemberTypeInformation callee =
+              inferrer.types.getInferredTypeOf(element);
+          callee.addCall(caller, call);
+          inferrer.updateParameterAssignments(
+              this, element, arguments, selector, remove: false,
+              addToQueue: true);
+        }
       }
     }
     super.giveUp(inferrer, clearAssignments: clearAssignments);
@@ -820,21 +947,21 @@
   final TypeInformation closure;
 
   ClosureCallSiteTypeInformation(
+      MemberTypeInformation context,
       Spannable call,
       Element enclosing,
       Selector selector,
       this.closure,
       ArgumentsTypes arguments,
-      bool inLoop) : super(call, enclosing, selector, arguments, inLoop);
+      bool inLoop)
+      : super(context, call, enclosing, selector, arguments, inLoop);
 
   void addToGraph(TypeGraphInferrerEngine inferrer) {
     arguments.forEach((info) => info.addUser(this));
     closure.addUser(this);
   }
 
-  TypeMask refine(TypeGraphInferrerEngine inferrer) {
-    return inferrer.types.dynamicType.type;
-  }
+  TypeMask computeType(TypeGraphInferrerEngine inferrer) => safeType(inferrer);
 
   Iterable<Element> get callees {
     throw new UnsupportedError("Cannot compute callees of a closure call.");
@@ -868,8 +995,7 @@
  * type.
  */
 class ConcreteTypeInformation extends TypeInformation {
-  ConcreteTypeInformation(TypeMask type)
-      : super(const <TypeInformation>[], const <TypeInformation>[]) {
+  ConcreteTypeInformation(TypeMask type) : super.untracked() {
     this.type = type;
     this.isStable = true;
   }
@@ -891,6 +1017,8 @@
     assert(false);
   }
 
+  TypeMask computeType(TypeGraphInferrerEngine inferrer) => type;
+
   void reset(TypeGraphInferrerEngine inferrer) {
     assert(false);
   }
@@ -901,9 +1029,7 @@
     return visitor.visitConcreteTypeInformation(this);
   }
 
-  bool hasStableType(TypeGraphInferrerEngine inferrer) {
-    return true;
-  }
+  bool hasStableType(TypeGraphInferrerEngine inferrer) => true;
 }
 
 class StringLiteralTypeInformation extends ConcreteTypeInformation {
@@ -943,7 +1069,8 @@
 class NarrowTypeInformation extends TypeInformation {
   final TypeMask typeAnnotation;
 
-  NarrowTypeInformation(narrowedType, this.typeAnnotation) {
+  NarrowTypeInformation(TypeInformation narrowedType, this.typeAnnotation)
+      : super(narrowedType.context) {
     addAssignment(narrowedType);
   }
 
@@ -952,7 +1079,7 @@
     assert(assignments.length == 1);
   }
 
-  TypeMask refine(TypeGraphInferrerEngine inferrer) {
+  TypeMask computeType(TypeGraphInferrerEngine inferrer) {
     TypeMask input = assignments[0].type;
     TypeMask intersection = input.intersection(typeAnnotation,
         inferrer.classWorld);
@@ -985,14 +1112,14 @@
   /** Whether the element type in that container has been inferred. */
   bool inferred = false;
 
-  InferredTypeInformation(parentType) {
+  InferredTypeInformation(MemberTypeInformation context,
+                          TypeInformation parentType)
+      : super(context) {
     if (parentType != null) addAssignment(parentType);
   }
 
-  TypeMask refine(TypeGraphInferrerEngine inferrer) {
-    if (!inferred) {
-      return inferrer.types.dynamicType.type;
-    }
+  TypeMask computeType(TypeGraphInferrerEngine inferrer) {
+    if (!inferred) return safeType(inferrer);
     return inferrer.types.computeTypeMask(assignments);
   }
 
@@ -1009,7 +1136,7 @@
   final ElementInContainerTypeInformation elementType;
 
   /** The container type before it is inferred. */
-  final ContainerTypeMask originalContainerType;
+  final ContainerTypeMask originalType;
 
   /** The length at the allocation site. */
   final int originalLength;
@@ -1030,11 +1157,13 @@
   bool bailedOut = true;
   bool analyzed = false;
 
-  ListTypeInformation(this.originalContainerType,
+  ListTypeInformation(MemberTypeInformation context,
+                      this.originalType,
                       this.elementType,
-                      this.originalLength) {
-    type = originalContainerType;
-    inferredLength = originalContainerType.length;
+                      this.originalLength)
+      : super(context) {
+    type = originalType;
+    inferredLength = originalType.length;
     elementType.addUser(this);
   }
 
@@ -1048,30 +1177,21 @@
     return elementType.isStable && super.hasStableType(inferrer);
   }
 
-  TypeMask refine(TypeGraphInferrerEngine inferrer) {
+  TypeMask computeType(TypeGraphInferrerEngine inferrer) {
     var mask = type;
     if (!mask.isContainer ||
         mask.elementType != elementType.type ||
         mask.length != inferredLength) {
-      return new ContainerTypeMask(originalContainerType.forwardTo,
-                                   originalContainerType.allocationNode,
-                                   originalContainerType.allocationElement,
+      return new ContainerTypeMask(originalType.forwardTo,
+                                   originalType.allocationNode,
+                                   originalType.allocationElement,
                                    elementType.type,
                                    inferredLength);
     }
     return mask;
   }
 
-  void giveUp(TypeGraphInferrerEngine inferrer, {bool clearAssignments: true}) {
-    super.giveUp(inferrer, clearAssignments: clearAssignments);
-    // We still know that this node represents a container, so we explicitly
-    // preserve that information here.
-    type = new ContainerTypeMask(originalContainerType.forwardTo,
-                                 originalContainerType.allocationNode,
-                                 originalContainerType.allocationElement,
-                                 inferrer.types.dynamicType.type,
-                                 null);
-  }
+  TypeMask safeType(TypeGraphInferrerEngine inferrer) => originalType;
 }
 
 /**
@@ -1079,7 +1199,9 @@
  * elements in a [ListTypeInformation].
  */
 class ElementInContainerTypeInformation extends InferredTypeInformation {
-  ElementInContainerTypeInformation(elementType) : super(elementType);
+  ElementInContainerTypeInformation(MemberTypeInformation context,
+      elementType)
+      : super(context, elementType);
 
   String toString() => 'Element in container $type';
 
@@ -1099,7 +1221,7 @@
   // These fields track the overall type of the keys/values in the map.
   final KeyInMapTypeInformation keyType;
   final ValueInMapTypeInformation valueType;
-  final MapTypeMask initialType;
+  final MapTypeMask originalType;
 
   // The set of [TypeInformation] where values from the traced map could
   // flow in.
@@ -1114,10 +1236,14 @@
 
   bool get inDictionaryMode => !bailedOut && _allKeysAreStrings;
 
-  MapTypeInformation(this.initialType, this.keyType, this.valueType) {
+  MapTypeInformation(MemberTypeInformation context,
+                     this.originalType,
+                     this.keyType,
+                     this.valueType)
+      : super(context) {
     keyType.addUser(this);
     valueType.addUser(this);
-    type = initialType;
+    type = originalType;
   }
 
   TypeInformation addEntryAssignment(TypeInformation key,
@@ -1126,8 +1252,10 @@
     TypeInformation newInfo = null;
     if (_allKeysAreStrings && key is StringLiteralTypeInformation) {
       String keyString = key.asString();
-      typeInfoMap.putIfAbsent(keyString,
-          () => newInfo = new ValueInMapTypeInformation(null, nonNull));
+      typeInfoMap.putIfAbsent(keyString, () {
+          newInfo = new ValueInMapTypeInformation(context, null, nonNull);
+          return newInfo;
+      });
       typeInfoMap[keyString].addAssignment(value);
     } else {
       _allKeysAreStrings = false;
@@ -1145,7 +1273,8 @@
     if (_allKeysAreStrings && other.inDictionaryMode) {
       other.typeInfoMap.forEach((keyString, value) {
         typeInfoMap.putIfAbsent(keyString, () {
-          TypeInformation newInfo = new ValueInMapTypeInformation(null, false);
+          TypeInformation newInfo =
+              new ValueInMapTypeInformation(context, null, false);
           newInfos.add(newInfo);
           return newInfo;
         });
@@ -1180,22 +1309,22 @@
       for (var key in typeInfoMap.keys) {
         mappings[key] = typeInfoMap[key].type;
       }
-      return new DictionaryTypeMask(initialType.forwardTo,
-                                    initialType.allocationNode,
-                                    initialType.allocationElement,
+      return new DictionaryTypeMask(originalType.forwardTo,
+                                    originalType.allocationNode,
+                                    originalType.allocationElement,
                                     keyType.type,
                                     valueType.type,
                                     mappings);
     } else {
-      return new MapTypeMask(initialType.forwardTo,
-                             initialType.allocationNode,
-                             initialType.allocationElement,
+      return new MapTypeMask(originalType.forwardTo,
+                             originalType.allocationNode,
+                             originalType.allocationElement,
                              keyType.type,
                              valueType.type);
     }
   }
 
-  TypeMask refine(TypeGraphInferrerEngine inferrer) {
+  TypeMask computeType(TypeGraphInferrerEngine inferrer) {
     if (type.isDictionary != inDictionaryMode) {
       return toTypeMask(inferrer);
     } else if (type.isDictionary) {
@@ -1225,6 +1354,8 @@
     return type;
   }
 
+  TypeMask safeType(TypeGraphInferrerEngine inferrer) => originalType;
+
   bool hasStableType(TypeGraphInferrerEngine inferrer) {
     return keyType.isStable &&
            valueType.isStable &&
@@ -1241,16 +1372,14 @@
  * for the keys in a [MapTypeInformation]
  */
 class KeyInMapTypeInformation extends InferredTypeInformation {
-  KeyInMapTypeInformation(TypeInformation keyType) : super(keyType);
+  KeyInMapTypeInformation(MemberTypeInformation context,
+      TypeInformation keyType)
+      : super(context, keyType);
 
   accept(TypeInformationVisitor visitor) {
     return visitor.visitKeyInMapTypeInformation(this);
   }
 
-  TypeMask refine(TypeGraphInferrerEngine inferrer) {
-    return super.refine(inferrer);
-  }
-
   String toString() => 'Key in Map $type';
 }
 
@@ -1264,15 +1393,17 @@
   // mode can ever be marked as [nonNull].
   final bool nonNull;
 
-  ValueInMapTypeInformation(TypeInformation valueType, [this.nonNull = false])
-      : super(valueType);
+  ValueInMapTypeInformation(MemberTypeInformation context,
+      TypeInformation valueType, [this.nonNull = false])
+      : super(context, valueType);
 
   accept(TypeInformationVisitor visitor) {
     return visitor.visitValueInMapTypeInformation(this);
   }
 
-  TypeMask refine(TypeGraphInferrerEngine inferrer) {
-    return nonNull ? super.refine(inferrer) : super.refine(inferrer).nullable();
+  TypeMask computeType(TypeGraphInferrerEngine inferrer) {
+    return nonNull ? super.computeType(inferrer)
+                   : super.computeType(inferrer).nullable();
   }
 
   String toString() => 'Value in Map $type';
@@ -1287,9 +1418,11 @@
   final bool isLoopPhi;
   final Local variable;
 
-  PhiElementTypeInformation(this.branchNode, this.isLoopPhi, this.variable);
+  PhiElementTypeInformation(MemberTypeInformation context, this.branchNode,
+                            this.isLoopPhi, this.variable)
+      : super(context);
 
-  TypeMask refine(TypeGraphInferrerEngine inferrer) {
+  TypeMask computeType(TypeGraphInferrerEngine inferrer) {
     return inferrer.types.computeTypeMask(assignments);
   }
 
@@ -1300,13 +1433,18 @@
   }
 }
 
-class ClosureTypeInformation extends ApplyableTypeInformation {
+class ClosureTypeInformation extends TypeInformation
+    with ApplyableTypeInformation {
   final ast.Node node;
   final Element element;
 
-  ClosureTypeInformation(this.node, this.element);
+  ClosureTypeInformation(MemberTypeInformation context, this.node,
+                         this.element)
+      : super(context);
 
-  TypeMask refine(TypeGraphInferrerEngine inferrer) {
+  TypeMask computeType(TypeGraphInferrerEngine inferrer) => safeType(inferrer);
+
+  TypeMask safeType(TypeGraphInferrerEngine inferrer) {
     return inferrer.types.functionType.type;
   }
 
@@ -1335,6 +1473,7 @@
   T visitClosureCallSiteTypeInformation(ClosureCallSiteTypeInformation info);
   T visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info);
   T visitDynamicCallSiteTypeInformation(DynamicCallSiteTypeInformation info);
-  T visitElementTypeInformation(ElementTypeInformation info);
+  T visitMemberTypeInformation(MemberTypeInformation info);
+  T visitParameterTypeInformation(ParameterTypeInformation info);
   T visitClosureTypeInformation(ClosureTypeInformation info);
 }
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
index 30301f4..09dcfef 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
@@ -56,6 +56,8 @@
   static final Uri DART_JS_HELPER = new Uri(scheme: 'dart', path: '_js_helper');
   static final Uri DART_INTERCEPTORS =
       new Uri(scheme: 'dart', path: '_interceptors');
+  static final Uri DART_INTERNAL =
+      new Uri(scheme: 'dart', path: '_internal');
   static final Uri DART_FOREIGN_HELPER =
       new Uri(scheme: 'dart', path: '_foreign_helper');
   static final Uri DART_JS_MIRRORS =
@@ -70,6 +72,24 @@
   static const String INVOKE_ON = '_getCachedInvocation';
   static const String START_ROOT_ISOLATE = 'startRootIsolate';
 
+
+  /// The list of functions for classes in the [internalLibrary] that we want
+  /// to inline always.  Any function in this list must be inlinable with
+  /// respect to the conditions used in [InlineWeeder.canInline], except for
+  /// size/complexity heuristics.
+  static const Map<String, List<String>> ALWAYS_INLINE =
+      const <String, List<String>> {
+    'IterableMixinWorkaround': const <String>['forEach'],
+  };
+
+  /// List of [FunctionElement]s that we want to inline always.  This list is
+  /// filled when resolution is complete by looking up in [internalLibrary].
+  List<FunctionElement> functionsToAlwaysInline;
+
+  /// Reference to the internal library to lookup functions to always inline.
+  LibraryElement internalLibrary;
+
+
   /// Set of classes that need to be considered for reflection although not
   /// otherwise visible during resolution.
   Iterable<ClassElement> get classesRequiredForReflection {
@@ -204,7 +224,8 @@
   TypeMask _fixedArrayTypeCache;
   TypeMask get fixedArrayType {
     if (_fixedArrayTypeCache == null) {
-      _fixedArrayTypeCache = new TypeMask.nonNullExact(jsFixedArrayClass);
+      _fixedArrayTypeCache = new TypeMask.nonNullExact(jsFixedArrayClass,
+          compiler.world);
     }
     return _fixedArrayTypeCache;
   }
@@ -213,7 +234,7 @@
   TypeMask get extendableArrayType {
     if (_extendableArrayTypeCache == null) {
       _extendableArrayTypeCache =
-          new TypeMask.nonNullExact(jsExtendableArrayClass);
+          new TypeMask.nonNullExact(jsExtendableArrayClass, compiler.world);
     }
     return _extendableArrayTypeCache;
   }
@@ -375,7 +396,7 @@
 
   /// Set of methods that are needed by reflection. Computed using
   /// [computeMembersNeededForReflection] on first use.
-  Iterable<Element> _membersNeededForReflection = null;
+  Set<Element> _membersNeededForReflection = null;
   Iterable<Element> get membersNeededForReflection {
     assert(_membersNeededForReflection != null);
     return _membersNeededForReflection;
@@ -407,7 +428,7 @@
 
   JavaScriptConstantTask constantCompilerTask;
 
-  JavaScriptionResolutionCallbacks resolutionCallbacks;
+  JavaScriptResolutionCallbacks resolutionCallbacks;
 
   JavaScriptBackend(Compiler compiler, bool generateSourceMap)
       : namer = determineNamer(compiler),
@@ -423,7 +444,7 @@
     typeVariableHandler = new TypeVariableHandler(this);
     customElementsAnalysis = new CustomElementsAnalysis(this);
     constantCompilerTask = new JavaScriptConstantTask(compiler);
-    resolutionCallbacks = new JavaScriptionResolutionCallbacks(this);
+    resolutionCallbacks = new JavaScriptResolutionCallbacks(this);
   }
 
   ConstantSystem get constantSystem => constants.constantSystem;
@@ -726,10 +747,11 @@
     }
   }
 
-  void registerMetadataConstant(Constant constant,
+  void registerMetadataConstant(MetadataAnnotation metadata,
                                 Element annotatedElement,
                                 Registry registry) {
     assert(registry.isForResolution);
+    Constant constant = constants.getConstantForMetadata(metadata);
     registerCompileTimeConstant(constant, registry);
     metadataConstants.add(new Dependency(constant, annotatedElement));
   }
@@ -885,6 +907,26 @@
     super.onResolutionComplete();
     computeMembersNeededForReflection();
     rti.computeClassesNeedingRti();
+    computeFunctionsToAlwaysInline();
+  }
+
+  void computeFunctionsToAlwaysInline() {
+    functionsToAlwaysInline = <FunctionElement>[];
+    if (internalLibrary == null) return;
+
+    // Try to find all functions intended to always inline.  If their enclosing
+    // class is not resolved we skip the methods, but it is an error to mention
+    // a function or class that cannot be found.
+    for (String className in ALWAYS_INLINE.keys) {
+      ClassElement cls = find(internalLibrary, className);
+      if (cls.resolutionState != STATE_DONE) continue;
+      for (String functionName in ALWAYS_INLINE[className]) {
+        Element function = cls.lookupMember(functionName);
+        assert(invariant(cls, function is FunctionElement,
+            message: 'unable to find function $functionName in $className'));
+        functionsToAlwaysInline.add(function);
+      }
+    }
   }
 
   void registerGetRuntimeTypeArgument(Registry registry) {
@@ -1564,8 +1606,6 @@
     return symbolsUsed.contains(name);
   }
 
-  bool get rememberLazies => isTreeShakingDisabled;
-
   bool retainMetadataOf(Element element) {
     if (mustRetainMetadata) hasRetainedMetadata = true;
     if (mustRetainMetadata && referencedFromMirrorSystem(element)) {
@@ -1583,6 +1623,8 @@
     Uri uri = library.canonicalUri;
     if (uri == DART_JS_HELPER) {
       jsHelperLibrary = library;
+    } else if (uri == DART_INTERNAL) {
+      internalLibrary = library;
     } else if (uri ==  DART_INTERCEPTORS) {
       interceptorsLibrary = library;
     } else if (uri ==  DART_FOREIGN_HELPER) {
@@ -1798,15 +1840,6 @@
     if (element.isClass) {
       element = getDartClass(element);
     }
-    // We have to treat closure classes specially here, as they only come into
-    // existence after [membersNeededForReflection] has been computed.
-    if (element is SynthesizedCallMethodElementX) {
-      SynthesizedCallMethodElementX closure = element;
-      element = closure.expression;
-    } else if (element is ClosureClassElement) {
-      ClosureClassElement closure = element;
-      element = closure.methodElement;
-    }
     return membersNeededForReflection.contains(element);
   }
 
@@ -1870,7 +1903,8 @@
   computeMembersNeededForReflection() {
     if (_membersNeededForReflection != null) return;
     if (compiler.mirrorsLibrary == null) {
-      _membersNeededForReflection = const [];
+      _membersNeededForReflection = new Set<Element>();
+      return;
     }
     // Compute a mapping from class to the closures it contains, so we
     // can include the correct ones when including the class.
@@ -1990,15 +2024,28 @@
     _membersNeededForReflection = reflectableMembers;
   }
 
+  // TODO(20791): compute closure classes after resolution and move this code to
+  // [computeMembersNeededForReflection].
+  void maybeMarkClosureAsNeededForReflection(
+      ClosureClassElement globalizedElement,
+      FunctionElement callFunction,
+      FunctionElement function) {
+    if (!_membersNeededForReflection.contains(function)) return;
+    _membersNeededForReflection.add(callFunction);
+    _membersNeededForReflection.add(globalizedElement);
+  }
+
   jsAst.Call generateIsJsIndexableCall(jsAst.Expression use1,
                                        jsAst.Expression use2) {
-    String dispatchPropertyName = 'init.dispatchPropertyName';
+    String dispatchPropertyName = embeddedNames.DISPATCH_PROPERTY_NAME;
+    jsAst.Expression dispatchProperty =
+        emitter.generateEmbeddedGlobalAccess(dispatchPropertyName);
 
     // We pass the dispatch property record to the isJsIndexable
     // helper rather than reading it inside the helper to increase the
     // chance of making the dispatch record access monomorphic.
-    jsAst.PropertyAccess record = new jsAst.PropertyAccess(
-        use2, js(dispatchPropertyName));
+    jsAst.PropertyAccess record =
+        new jsAst.PropertyAccess(use2, dispatchProperty);
 
     List<jsAst.Expression> arguments = <jsAst.Expression>[use1, record];
     FunctionElement helper = findHelper('isJsIndexable');
@@ -2163,10 +2210,10 @@
   }
 }
 
-class JavaScriptionResolutionCallbacks extends ResolutionCallbacks {
+class JavaScriptResolutionCallbacks extends ResolutionCallbacks {
   final JavaScriptBackend backend;
 
-  JavaScriptionResolutionCallbacks(this.backend);
+  JavaScriptResolutionCallbacks(this.backend);
 
   void registerBackendStaticInvocation(Element element, Registry registry) {
     registry.registerStaticInvocation(backend.registerBackendUse(element));
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/custom_elements_analysis.dart b/sdk/lib/_internal/compiler/implementation/js_backend/custom_elements_analysis.dart
index 695edbb..ade211d 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/custom_elements_analysis.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/custom_elements_analysis.dart
@@ -70,6 +70,7 @@
     classElement.ensureResolved(compiler);
     if (!Elements.isNativeOrExtendsNative(classElement)) return;
     if (classElement.isMixinApplication) return;
+    if (classElement.isAbstract) return;
     joinFor(enqueuer).instantiatedClasses.add(classElement);
   }
 
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart
index b9c668f..fc16283 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart
@@ -12,6 +12,8 @@
 import '../js_emitter/js_emitter.dart'
     show Emitter, CodeEmitterTask, ClassBuilder, MetadataEmitter;
 
+import '../../js_lib/shared/embedded_names.dart' as embeddedNames;
+
 import '../dart2jslib.dart';
 import '../dart_types.dart';
 import '../js/js.dart' as jsAst;
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart b/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
index 568dfc8..2d054aa 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
@@ -260,6 +260,10 @@
   final Map<Constant, String> constantLongNames;
   ConstantCanonicalHasher constantHasher;
 
+  // All alphanumeric characters.
+  static const String _alphaNumeric =
+      'abcdefghijklmnopqrstuvwxyzABZDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
+
   Namer(Compiler compiler)
       : compiler = compiler,
         globals = new Map<Element, String>(),
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 45af651..0eee1af 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
@@ -161,6 +161,21 @@
   String get makeConstListProperty
       => namer.getMappedInstanceName('makeConstantList');
 
+  /// For deferred loading we communicate the initializers via this global var.
+  final String deferredInitializers = r"$dart_deferred_initializers";
+
+  /// All the global state can be passed around with this variable.
+  String get globalsHolder => namer.getMappedGlobalName("globalsHolder");
+
+  jsAst.Expression generateEmbeddedGlobalAccess(String global) {
+    return js(generateEmbeddedGlobalAccessString(global));
+  }
+
+  String generateEmbeddedGlobalAccessString(String global) {
+    // TODO(floitsch): don't use 'init' as global embedder storage.
+    return '$initName.$global';
+  }
+
   jsAst.FunctionDeclaration get generateAccessorFunction {
     const RANGE1_SIZE = RANGE1_LAST - RANGE1_FIRST + 1;
     const RANGE2_SIZE = RANGE2_LAST - RANGE2_FIRST + 1;
@@ -320,12 +335,20 @@
     // object and copy over the members.
 
     String reflectableField = namer.reflectableField;
+    jsAst.Expression allClassesAccess =
+        generateEmbeddedGlobalAccess(embeddedNames.ALL_CLASSES);
+    jsAst.Expression metadataAccess =
+        generateEmbeddedGlobalAccess(embeddedNames.METADATA);
+    jsAst.Expression interceptorsByTagAccess =
+        generateEmbeddedGlobalAccess(embeddedNames.INTERCEPTORS_BY_TAG);
+    jsAst.Expression leafTagsAccess =
+        generateEmbeddedGlobalAccess(embeddedNames.LEAF_TAGS);
 
     return js('''
       function(collectedClasses, isolateProperties, existingIsolateProperties) {
-        var pendingClasses = {};
-        if (!init.allClasses) init.allClasses = {};
-        var allClasses = init.allClasses;
+        var pendingClasses = Object.create(null);
+        if (!#) # = Object.create(null);  // embedded allClasses.
+        var allClasses = #;  // embedded allClasses;
 
         if (#)  // DEBUG_FAST_OBJECTS
           print("Number of classes: " +
@@ -343,66 +366,64 @@
         }
 
         for (var cls in collectedClasses) {
-          if (hasOwnProperty.call(collectedClasses, cls)) {
-            var desc = collectedClasses[cls];
-            if (desc instanceof Array) desc = desc[1];
+          var desc = collectedClasses[cls];
+          if (desc instanceof Array) desc = desc[1];
 
-            /* The 'fields' are either a constructor function or a
-             * string encoding fields, constructor and superclass.  Get
-             * the superclass and the fields in the format
-             *   '[name/]Super;field1,field2'
-             * from the CLASS_DESCRIPTOR_PROPERTY property on the descriptor.
-             * The 'name/' is optional and contains the name that should be used
-             * when printing the runtime type string.  It is used, for example,
-             * to print the runtime type JSInt as 'int'.
-             */
-            var classData = desc["${namer.classDescriptorProperty}"],
-                supr, name = cls, fields = classData;
-            if (#)  // backend.hasRetainedMetadata
-              if (typeof classData == "object" &&
-                  classData instanceof Array) {
-                classData = fields = classData[0];
-              }
-            if (typeof classData == "string") {
-              var split = classData.split("/");
-              if (split.length == 2) {
-                name = split[0];
-                fields = split[1];
-              }
+          /* The 'fields' are either a constructor function or a
+           * string encoding fields, constructor and superclass.  Get
+           * the superclass and the fields in the format
+           *   '[name/]Super;field1,field2'
+           * from the CLASS_DESCRIPTOR_PROPERTY property on the descriptor.
+           * The 'name/' is optional and contains the name that should be used
+           * when printing the runtime type string.  It is used, for example,
+           * to print the runtime type JSInt as 'int'.
+           */
+          var classData = desc["${namer.classDescriptorProperty}"],
+              supr, name = cls, fields = classData;
+          if (#)  // backend.hasRetainedMetadata
+            if (typeof classData == "object" &&
+                classData instanceof Array) {
+              classData = fields = classData[0];
             }
-
-            var s = fields.split(";");
-            fields = s[1] == "" ? [] : s[1].split(",");
-            supr = s[0];
-            split = supr.split(":");
+          if (typeof classData == "string") {
+            var split = classData.split("/");
             if (split.length == 2) {
-              supr = split[0];
-              var functionSignature = split[1];
-              if (functionSignature)
-                desc.\$signature = (function(s) {
-                    return function(){ return init.metadata[s]; };
-                  })(functionSignature);
+              name = split[0];
+              fields = split[1];
             }
-
-            if (#)  // needsMixinSupport
-              if (supr && supr.indexOf("+") > 0) {
-                s = supr.split("+");
-                supr = s[0];
-                var mixin = collectedClasses[s[1]];
-                if (mixin instanceof Array) mixin = mixin[1];
-                for(var d in mixin) {
-                  if (hasOwnProperty.call(mixin, d) &&
-                      !hasOwnProperty.call(desc, d))
-                    desc[d] = mixin[d];
-                }
-              }
-
-            if (typeof dart_precompiled != "function") {
-              combinedConstructorFunction += defineClass(name, cls, fields);
-              constructorsList.push(cls);
-            }
-            if (supr) pendingClasses[cls] = supr;
           }
+
+          var s = fields.split(";");
+          fields = s[1] == "" ? [] : s[1].split(",");
+          supr = s[0];
+          split = supr.split(":");
+          if (split.length == 2) {
+            supr = split[0];
+            var functionSignature = split[1];
+            if (functionSignature)
+              desc.\$signature = (function(s) {
+                  return function(){ return #[s]; };  // embedded metadata.
+                })(functionSignature);
+          }
+
+          if (#)  // needsMixinSupport
+            if (supr && supr.indexOf("+") > 0) {
+              s = supr.split("+");
+              supr = s[0];
+              var mixin = collectedClasses[s[1]];
+              if (mixin instanceof Array) mixin = mixin[1];
+              for (var d in mixin) {
+                if (hasOwnProperty.call(mixin, d) &&
+                    !hasOwnProperty.call(desc, d))
+                  desc[d] = mixin[d];
+              }
+            }
+
+          if (typeof dart_precompiled != "function") {
+            combinedConstructorFunction += defineClass(name, cls, fields);
+            constructorsList.push(cls);
+          }
+          if (supr) pendingClasses[cls] = supr;
         }
 
         if (typeof dart_precompiled != "function") {
@@ -431,9 +452,9 @@
 
         constructors = null;
 
-        var finishedClasses = {};
-        init.interceptorsByTag = Object.create(null);
-        init.leafTags = {};
+        var finishedClasses = Object.create(null);
+        # = Object.create(null);  // embedded interceptorsByTag.
+        # = Object.create(null);  // embedded leafTags.
 
         #;  // buildFinishClass(),
 
@@ -441,10 +462,15 @@
 
         for (var cls in pendingClasses) finishClass(cls);
       }''', [
+          allClassesAccess, allClassesAccess,
+          allClassesAccess,
           DEBUG_FAST_OBJECTS,
           backend.hasRetainedMetadata,
+          metadataAccess,
           needsMixinSupport,
           backend.isTreeShakingDisabled,
+          interceptorsByTagAccess,
+          leafTagsAccess,
           buildFinishClass(),
           nsmEmitter.buildTrivialNsmHandlers()]);
   }
@@ -456,16 +482,15 @@
   jsAst.FunctionDeclaration buildFinishClass() {
     String specProperty = '"${namer.nativeSpecProperty}"';  // "%"
 
+    jsAst.Expression interceptorsByTagAccess =
+        generateEmbeddedGlobalAccess(embeddedNames.INTERCEPTORS_BY_TAG);
+    jsAst.Expression leafTagsAccess =
+        generateEmbeddedGlobalAccess(embeddedNames.LEAF_TAGS);
+
     return js.statement('''
       function finishClass(cls) {
 
-        // TODO(8540): Remove this work around.
-        // Opera does not support 'getOwnPropertyNames'. Therefore we use
-        //   hasOwnProperty instead.
-        var hasOwnProperty = Object.prototype.hasOwnProperty;
-
-        if (hasOwnProperty.call(finishedClasses, cls)) return;
-
+        if (finishedClasses[cls]) return;
         finishedClasses[cls] = true;
 
         var superclass = pendingClasses[cls];
@@ -506,13 +531,13 @@
           //
           // The information is used to build tables referenced by
           // getNativeInterceptor and custom element support.
-          if (hasOwnProperty.call(prototype, $specProperty)) {
+          if (Object.prototype.hasOwnProperty.call(prototype, $specProperty)) {
             var nativeSpec = prototype[$specProperty].split(";");
             if (nativeSpec[0]) {
               var tags = nativeSpec[0].split("|");
               for (var i = 0; i < tags.length; i++) {
-                init.interceptorsByTag[tags[i]] = constructor;
-                init.leafTags[tags[i]] = true;
+                #[tags[i]] = constructor;  // embedded interceptorsByTag.
+                #[tags[i]] = true;  // embedded leafTags.
               }
             }
             if (nativeSpec[1]) {
@@ -526,14 +551,19 @@
                   }
                 }
                 for (i = 0; i < tags.length; i++) {
-                  init.interceptorsByTag[tags[i]] = constructor;
-                  init.leafTags[tags[i]] = false;
+                  #[tags[i]] = constructor;  // embedded interceptorsByTag.
+                  #[tags[i]] = false;  // embedded leafTags.
                 }
               }
             }
           }
         }
-      }''', [!nativeClasses.isEmpty, true]);
+      }''', [!nativeClasses.isEmpty,
+             interceptorsByTagAccess,
+             leafTagsAccess,
+             true,
+             interceptorsByTagAccess,
+             leafTagsAccess]);
   }
 
   jsAst.Fun get finishIsolateConstructorFunction {
@@ -550,12 +580,34 @@
           for (var staticName in isolateProperties)
             if (hasOwnProperty.call(isolateProperties, staticName))
               this[staticName] = isolateProperties[staticName];
+
+          // Reset lazy initializers to null.
+          // When forcing the object to fast mode (below) v8 will consider
+          // functions as part the object's map. Since we will change them
+          // (after the first call to the getter), we would have a map
+          // transition.
+          var lazies = init.lazies;
+          for (var lazyInit in lazies) {
+             var lazyInitName = lazies[lazyInit];
+             if (hasOwnProperty.call(lazies, lazyInitName)) {
+               this[lazyInitName] = null;
+             }
+          }
+
           // Use the newly created object as prototype. In Chrome,
           // this creates a hidden class for the object and makes
           // sure it is fast to access.
           function ForceEfficientMap() {}
           ForceEfficientMap.prototype = this;
           new ForceEfficientMap();
+
+          // Now, after being a fast map we can set the lazies again.
+          for (var lazyInit in lazies) {
+            lazyInitName = lazies[lazyInit];
+            if (hasOwnProperty.call(isolateProperties, lazyInitName)) {
+              this[lazyInitName] = isolateProperties[lazyInitName];
+            }
+          }
         }
         Isolate.prototype = oldIsolate.prototype;
         Isolate.prototype.constructor = Isolate;
@@ -575,13 +627,13 @@
     String isolate = namer.currentIsolate;
     jsAst.Expression cyclicThrow =
         namer.elementAccess(backend.getCyclicThrowHelper());
+    jsAst.Expression laziesAccess =
+        generateEmbeddedGlobalAccess(embeddedNames.LAZIES);
 
     return js('''
       function (prototype, staticName, fieldName, getterName, lazyValue) {
-        if (#) {
-          if (!init.lazies) init.lazies = {};
-          init.lazies[fieldName] = getterName;
-        }
+        if (!#) # = Object.create(null);
+        #[fieldName] = getterName;
 
         var sentinelUndefined = {};
         var sentinelInProgress = {};
@@ -612,7 +664,9 @@
           }
         }
       }
-    ''', [backend.rememberLazies, cyclicThrow]);
+    ''', [laziesAccess, laziesAccess,
+          laziesAccess,
+          cyclicThrow]);
   }
 
   List buildDefineClassAndFinishClassFunctionsIfNecessary() {
@@ -1022,9 +1076,14 @@
   }
 
   /**
-   * Emits code that sets `init.isolateTag` to a unique string.
+   * Emits code that sets the `isolateTag embedded global to a unique string.
    */
   jsAst.Expression generateIsolateAffinityTagInitialization() {
+    jsAst.Expression getIsolateTagAccess =
+        generateEmbeddedGlobalAccess(embeddedNames.GET_ISOLATE_TAG);
+    jsAst.Expression isolateTagAccess =
+        generateEmbeddedGlobalAccess(embeddedNames.ISOLATE_TAG);
+
     return js('''
       !function() {
         // On V8, the 'intern' function converts a string to a symbol, which
@@ -1035,8 +1094,8 @@
           return Object.keys(convertToFastObject(o))[0];
         }
 
-        init.getIsolateTag = function(name) {
-          return intern("___dart_" + name + init.isolateTag);
+        # = function(name) {  // embedded getIsolateTag
+          return intern("___dart_" + name + #);  // embedded isolateTag
         };
 
         // To ensure that different programs loaded into the same context (page)
@@ -1051,17 +1110,24 @@
           var property = intern(rootProperty + "_" + i + "_");
           if (!(property in usedProperties)) {
             usedProperties[property] = 1;
-            init.isolateTag = property;
+            # = property;  // embedded isolateTag
             break;
           }
         }
       }()
-    ''');
+    ''', [getIsolateTagAccess,
+          isolateTagAccess,
+          isolateTagAccess]);
   }
 
   jsAst.Expression generateDispatchPropertyNameInitialization() {
-    return js(
-        'init.dispatchPropertyName = init.getIsolateTag("dispatch_record")');
+    jsAst.Expression dispatchPropertyNameAccess =
+        generateEmbeddedGlobalAccess(embeddedNames.DISPATCH_PROPERTY_NAME);
+    jsAst.Expression getIsolateTagAccess =
+        generateEmbeddedGlobalAccess(embeddedNames.GET_ISOLATE_TAG);
+    return js('# = #("dispatch_record")',
+        [dispatchPropertyNameAccess,
+         getIsolateTagAccess]);
   }
 
   String generateIsolateTagRoot() {
@@ -1095,6 +1161,9 @@
       buffer.write(N);
     }
 
+    jsAst.Expression currentScriptAccess =
+        generateEmbeddedGlobalAccess(embeddedNames.CURRENT_SCRIPT);
+
     addComment('BEGIN invoke [main].', buffer);
     // This code finds the currently executing script by listening to the
     // onload event of all script tags and getting the first script which
@@ -1122,14 +1191,16 @@
     scripts[i].addEventListener("load", onLoad, false);
   }
 })(function(currentScript) {
-  init.currentScript = currentScript;
+  # = currentScript;  // embedded currentScript.
 
   if (typeof dartMainRunner === "function") {
-    dartMainRunner(#, []);
+    dartMainRunner(#, []);  // mainCallClosure.
   } else {
-    #([]);
+    #([]);  // mainCallClosure.
   }
-})$N''', [mainCallClosure, mainCallClosure]);
+})$N''', [currentScriptAccess,
+          mainCallClosure,
+          mainCallClosure]);
 
     buffer.write(';');
     buffer.write(jsAst.prettyPrint(invokeMain,
@@ -1276,7 +1347,7 @@
   void emitInitFunction(CodeBuffer buffer) {
     jsAst.FunctionDeclaration decl = js.statement('''
       function init() {
-        $isolateProperties = {};
+        $isolateProperties = Object.create(null);
         #; #; #;
       }''', [
           buildDefineClassAndFinishClassFunctionsIfNecessary(),
@@ -1406,30 +1477,56 @@
         return;
       }
 
+      // Maps each output unit to a codebuffers with the library descriptors of
+      // the output unit emitted to it.
+      Map<OutputUnit, CodeBuffer> libraryDescriptorBuffers =
+          new Map<OutputUnit, CodeBuffer>();
+
       OutputUnit mainOutputUnit = compiler.deferredLoadTask.mainOutputUnit;
 
       mainBuffer.add(buildGeneratedBy());
       addComment(HOOKS_API_USAGE, mainBuffer);
 
-      if (!compiler.deferredLoadTask.isProgramSplit) {
-        mainBuffer.add('(function(${namer.currentIsolate})$_{$n');
-      }
+      /// For deferred loading we communicate the initializers via this global
+      /// variable. The deferred hunks will add their initialization to this.
+      /// The semicolon is important in minified mode, without it the
+      /// following parenthesis looks like a call to the object literal.
+      mainBuffer..add(
+          'if$_(typeof(${deferredInitializers})$_===$_"undefined")$_'
+          '${deferredInitializers} = Object.create(null);$n');
 
       // Using a named function here produces easier to read stack traces in
       // Chrome/V8.
-      mainBuffer.add('function dart(){${_}this.x$_=${_}0$_}');
+      mainBuffer.add('(function(${namer.currentIsolate})$_{\n');
+      if (compiler.deferredLoadTask.isProgramSplit) {
+        /// We collect all the global state of the, so it can be passed to the
+        /// initializer of deferred files.
+        mainBuffer.add('var ${globalsHolder}$_=${_}Object.create(null)$N');
+      }
+      mainBuffer.add('function dart()$_{$n'
+          '${_}${_}this.x$_=${_}0$N'
+          '${_}${_}delete this.x$N'
+          '}$n');
       for (String globalObject in Namer.reservedGlobalObjectNames) {
         // The global objects start as so-called "slow objects". For V8, this
         // means that it won't try to make map transitions as we add properties
         // to these objects. Later on, we attempt to turn these objects into
         // fast objects by calling "convertToFastObject" (see
         // [emitConvertToFastObjectFunction]).
-        mainBuffer
-            ..write('var ${globalObject}$_=${_}new dart$N')
-            ..write('delete ${globalObject}.x$N');
+        mainBuffer.write('var ${globalObject}$_=${_}');
+        if(compiler.deferredLoadTask.isProgramSplit) {
+          mainBuffer.add('${globalsHolder}.$globalObject$_=${_}');
+        }
+        mainBuffer.write('new dart$N');
       }
 
       mainBuffer.add('function ${namer.isolateName}()$_{}\n');
+      if (compiler.deferredLoadTask.isProgramSplit) {
+        mainBuffer
+          .write('${globalsHolder}.${namer.isolateName}$_=$_'
+                 '${namer.isolateName}$N'
+                 '${globalsHolder}.init$_=${_}init$N');
+      }
       mainBuffer.add('init()$N$n');
       // Shorten the code by using [namer.currentIsolate] as temporary.
       isolateProperties = namer.currentIsolate;
@@ -1445,7 +1542,7 @@
           typedefsNeededForReflection.isEmpty)) {
         // Shorten the code by using "$$" as temporary.
         classesCollector = r"$$";
-        mainBuffer.add('var $classesCollector$_=$_{}$N$n');
+        mainBuffer.add('var $classesCollector$_=${_}Object.create(null)$N$n');
       }
 
       // Emit native classes on [nativeBuffer].
@@ -1478,10 +1575,6 @@
       // the classesCollector variable.
       classesCollector = 'classesCollector should not be used from now on';
 
-      // For each output unit, the library descriptors written to it.
-      Map<OutputUnit, CodeBuffer> libraryDescriptorBuffers =
-          new Map<OutputUnit, CodeBuffer>();
-
       // TODO(sigurdm): Need to check this for each outputUnit.
       if (!elementDescriptors.isEmpty) {
         var oldClassesCollector = classesCollector;
@@ -1544,10 +1637,13 @@
             var value = js.string('${mangledFieldNames[key]}');
             properties.add(new jsAst.Property(js.string(key), value));
           }
+
+          jsAst.Expression mangledNamesAccess =
+              generateEmbeddedGlobalAccess(embeddedNames.MANGLED_NAMES);
           var map = new jsAst.ObjectInitializer(properties);
           mainBuffer.write(
               jsAst.prettyPrint(
-                  js.statement('init.mangledNames = #', map),
+                  js.statement('# = #', [mangledNamesAccess, map]),
                   compiler,
                   monitor: compiler.dumpInfoTask));
           if (compiler.enableMinification) {
@@ -1562,10 +1658,12 @@
             var value = js.string('${mangledGlobalFieldNames[key]}');
             properties.add(new jsAst.Property(js.string(key), value));
           }
+          jsAst.Expression mangledGlobalNamesAccess =
+              generateEmbeddedGlobalAccess(embeddedNames.MANGLED_GLOBAL_NAMES);
           var map = new jsAst.ObjectInitializer(properties);
           mainBuffer.write(
               jsAst.prettyPrint(
-                  js.statement('init.mangledGlobalNames = #', map),
+                  js.statement('# = #', [mangledGlobalNamesAccess, map]),
                   compiler,
                   monitor: compiler.dumpInfoTask));
           if (compiler.enableMinification) {
@@ -1622,26 +1720,90 @@
       computeNeededConstants();
       emitCompileTimeConstants(mainBuffer, mainOutputUnit);
 
-      // Write a javascript mapping from Deferred import load ids (derrived from
-      // the import prefix.) to a list of lists of js hunks to load.
-      // TODO(sigurdm): Create a syntax tree for this.
-      // TODO(sigurdm): Also find out where to place it.
-      mainBuffer.write("\$.libraries_to_load = {");
-      for (String loadId in compiler.deferredLoadTask.hunksToLoad.keys) {
-        // TODO(sigurdm): Escape these strings.
-        mainBuffer.write('"$loadId":[');
-        for (List<OutputUnit> outputUnits in
-            compiler.deferredLoadTask.hunksToLoad[loadId]) {
-          mainBuffer.write("[");
+      /// Map from OutputUnit to a hash of its content. The hash uniquely
+      /// identifies the code of the output-unit. It does not include
+      /// boilerplate JS code, like the sourcemap directives or the hash itself.
+      Map<OutputUnit, String> deferredLoadHashes =
+          emitDeferredCode(libraryDescriptorBuffers);
+      if (compiler.deferredLoadTask.isProgramSplit) {
+        mainBuffer.write('$initName.isHunkLoaded$_=${_}'
+            'function(hunkHash)$_{${_}'
+              'return !!$deferredInitializers[hunkHash]'
+            '$_}$N'
+            '$initName.initializeLoadedHunk$_=${_}'
+            'function(hunkHash)$_{$_'
+              '$deferredInitializers[hunkHash]($globalsHolder)'
+            '$_}$N');
+        // Write a javascript mapping from Deferred import load ids (derrived
+        // from the import prefix.) to a list of lists of js hunks to load.
+        // TODO(sigurdm): Create a syntax tree for this.
+        // TODO(sigurdm): Also find out where to place it.
+
+        Map<String, List<String>> deferredLibraryUris =
+            new Map<String, List<String>>();
+        Map<String, List<String>> deferredLibraryHashes =
+            new Map<String, List<String>>();
+
+        compiler.deferredLoadTask.hunksToLoad.forEach(
+                      (String loadId, List<OutputUnit>outputUnits) {
+          List<String> uris = new List<String>();
+          List<String> hashes = new List<String>();
+          deferredLibraryHashes[loadId] = new List<String>();
+          for (OutputUnit outputUnit in outputUnits) {
+            uris.add("${outputUnit.partFileName(compiler)}.part.js");
+            hashes.add(deferredLoadHashes[outputUnit]);
+          }
+
+          deferredLibraryUris[loadId] = uris;
+          deferredLibraryHashes[loadId] = hashes;
+        });
+
+        void emitMapping(String name, Map<String, List<String>> mapping) {
+          List<jsAst.Property> properties = new List<jsAst.Property>();
+          mapping.forEach((String key, List<String> values) {
+            properties.add(new jsAst.Property(js.escapedString(key),
+                new jsAst.ArrayInitializer.from(
+                    values.map(js.escapedString))));
+          });
+          jsAst.Node initializer =
+              new jsAst.ObjectInitializer(properties, isOneLiner: true);
+
+          mainBuffer..write("$name$_=$_")
+                    ..write(jsAst.prettyPrint(
+                        initializer,
+                        compiler, monitor: compiler.dumpInfoTask))
+                    ..write(";$n");
+        }
+
+        emitMapping("$initName.deferredLibraryUris", deferredLibraryUris);
+        emitMapping("$initName.deferredLibraryHashes", deferredLibraryHashes);
+
+
+        mainBuffer.write("$initName.librariesToLoad$_=$_{");
+        compiler.deferredLoadTask.hunksToLoad.forEach(
+            (String loadId, List<OutputUnit>outputUnits) {
+          mainBuffer.write('"$loadId":$_[');
           for (OutputUnit outputUnit in outputUnits) {
             mainBuffer
-              .write('"${outputUnit.partFileName(compiler)}.part.js", ');
+                .write('["${outputUnit.partFileName(compiler)}.part.js",$_'
+                       '"${deferredLoadHashes[outputUnit]}"],$_');
           }
-          mainBuffer.write("],");
-        }
-        mainBuffer.write("],\n");
+          mainBuffer.write("],$_");
+        });
+        mainBuffer.write("}$N");
+        mainBuffer.write("$initName.librariesToLoad$_=$_{");
+        compiler.deferredLoadTask.hunksToLoad.forEach(
+            (String loadId, List<OutputUnit>outputUnits) {
+          mainBuffer.write('"$loadId":$_[');
+          for (OutputUnit outputUnit in outputUnits) {
+            mainBuffer
+                .write('["${outputUnit.partFileName(compiler)}.part.js",$_'
+                       '"${deferredLoadHashes[outputUnit]}"],$_');
+          }
+          mainBuffer.write("],$_");
+        });
+        mainBuffer.write("}$N");
       }
-      mainBuffer.write("}$N");
       // Static field initializations require the classes and compile-time
       // constants to be set up.
       emitStaticNonFinalFieldInitializations(mainBuffer);
@@ -1710,11 +1872,7 @@
           buildPrecompiledFunction();
       emitInitFunction(mainBuffer);
       emitMain(mainBuffer);
-      if (!compiler.deferredLoadTask.isProgramSplit) {
-        mainBuffer.add('})()\n');
-      } else {
-        mainBuffer.add('\n');
-      }
+      mainBuffer.add('})()\n');
 
       if (compiler.useContentSecurityPolicy) {
         mainBuffer.write(
@@ -1766,7 +1924,6 @@
             ..add(cspBuffer.getText())
             ..close();
       }
-      emitDeferredCode(libraryDescriptorBuffers);
 
       if (backend.requiresPreamble &&
           !backend.htmlLibraryIsLoaded) {
@@ -1815,7 +1972,14 @@
         compiler.deferredLoadTask.outputUnitForElement(element));
   }
 
-  void emitDeferredCode(Map<OutputUnit, CodeBuffer> libraryDescriptorBuffers) {
+  /// Emits code for all output units except the main.
+  /// Returns a mapping from outputUnit to a hash of the corresponding hunk that
+  /// can be used for calling the initializer.
+  Map<OutputUnit, String> emitDeferredCode(
+      Map<OutputUnit, CodeBuffer> libraryDescriptorBuffers) {
+
+    Map<OutputUnit, String> hunkHashes = new Map<OutputUnit, String>();
+
     for (OutputUnit outputUnit in compiler.deferredLoadTask.allOutputUnits) {
       if (outputUnit == compiler.deferredLoadTask.mainOutputUnit) continue;
 
@@ -1826,20 +1990,29 @@
       var oldClassesCollector = classesCollector;
       classesCollector = r"$$";
 
-      outputBuffer
-        ..write(buildGeneratedBy());
-      if (libraryDescriptorBuffer != null) {
+      String hunkName = "${outputUnit.partFileName(compiler)}.part.js";
+
+      outputBuffer..write(buildGeneratedBy())
+        ..write('${deferredInitializers}.current$_=$_'
+                'function$_(${globalsHolder}) {$N');
+      for (String globalObject in Namer.reservedGlobalObjectNames) {
         outputBuffer
-          ..write('var old${namer.currentIsolate}$_='
-                  '$_${namer.currentIsolate}$N'
+            .write('var $globalObject$_=$_'
+                   '${globalsHolder}.$globalObject$N');
+      }
+      outputBuffer
+          .write('var init$_=$_${globalsHolder}.init$N');
+      if (libraryDescriptorBuffer != null) {
       // TODO(ahe): This defines a lot of properties on the
       // Isolate.prototype object.  We know this will turn it into a
       // slow object in V8, so instead we should do something similar
       // to Isolate.$finishIsolateConstructor.
-                  '${namer.currentIsolate}$_='
-                  '$_${namer.isolateName}.prototype$N$n'
-                  // The classesCollector object ($$).
-                  '$classesCollector$_=$_{};$n')
+         outputBuffer
+             ..write('var ${namer.isolateName}$_=$_'
+                     '${globalsHolder}.${namer.isolateName}$N')
+            ..write('var ${namer.currentIsolate}$_=$_$isolatePropertiesName$N')
+            // The classesCollector object ($$).
+            ..write('$classesCollector$_=${_}Object.create(null);$n')
           ..write('(')
           ..write(
               jsAst.prettyPrint(
@@ -1856,10 +2029,6 @@
               '$_$isolatePropertiesName)$N');
         }
 
-        outputBuffer.write(
-          // Reset the classesCollector ($$).
-          '$classesCollector$_=${_}null$N$n'
-          '${namer.currentIsolate}$_=${_}old${namer.currentIsolate}$N');
       }
 
       classesCollector = oldClassesCollector;
@@ -1867,15 +2036,25 @@
       typeTestEmitter.emitRuntimeTypeSupport(outputBuffer, outputUnit);
 
       emitCompileTimeConstants(outputBuffer, outputUnit);
-
+      outputBuffer.write('}$N');
       String code = outputBuffer.getText();
+
+      // Make a unique hash of the code (before the sourcemaps are added)
+      // This will be used to retrieve the initializing function from the global
+      // variable.
+      String hash = hashOfString(code);
+
       outputBuffers[outputUnit] = outputBuffer;
       compiler.outputProvider(outputUnit.partFileName(compiler), 'part.js')
         ..add(code)
+        ..add('${deferredInitializers}["$hash"]$_=$_'
+                '${deferredInitializers}.current')
         ..close();
 
+      hunkHashes[outputUnit] = hash;
       // TODO(johnniwinther): Support source maps for deferred code.
     }
+    return hunkHashes;
   }
 
   String buildGeneratedBy() {
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/js_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/js_emitter.dart
index 5ef90e4..cc0c7eb 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/js_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/js_emitter.dart
@@ -4,6 +4,8 @@
 
 library dart2js.js_emitter;
 
+import '../hash/sha1.dart' show hashOfString;
+
 import '../common.dart';
 
 import '../js/js.dart' as jsAst;
@@ -19,13 +21,11 @@
 import '../dart2jslib.dart' show
     CodeBuffer;
 
+import '../elements/elements.dart' show ConstructorBodyElement, ElementKind, ParameterElement, TypeVariableElement;
+
 import '../dart_types.dart' show
     TypedefType;
 
-import '../elements/elements.dart' show
-    ConstructorBodyElement,
-    ParameterElement,
-    TypeVariableElement;
 
 import '../js/js.dart' show
     js, templateManager;
@@ -74,7 +74,10 @@
 import '../deferred_load.dart' show
     OutputUnit;
 
-import '../runtime_data.dart' as encoding;
+import '../../js_lib/shared/runtime_data.dart' as encoding;
+import '../../js_lib/shared/embedded_names.dart' as embeddedNames;
+
+import '../hash/sha1.dart';
 
 part 'class_builder.dart';
 part 'class_emitter.dart';
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/metadata_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/metadata_emitter.dart
index e1149fb..1c8cfa4 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/metadata_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/metadata_emitter.dart
@@ -95,7 +95,10 @@
   }
 
   void emitMetadata(CodeBuffer buffer) {
-    buffer.write('init.metadata$_=$_[');
+    JavaScriptBackend backend = compiler.backend;
+    String metadataAccess = backend.emitter.generateEmbeddedGlobalAccessString(
+          embeddedNames.METADATA);
+    buffer.write('$metadataAccess$_=$_[');
     for (String metadata in globalMetadata) {
       if (metadata is String) {
         if (metadata != 'null') {
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart
index 2a05f19..a1d3610 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart
@@ -19,6 +19,7 @@
                                         JavaScriptBackend backend) {
   Namer namer = backend.namer;
   Compiler compiler = backend.compiler;
+  CodeEmitterTask emitter = backend.emitter;
 
   String metadataField = '"${namer.metadataField}"';
   String reflectableField = namer.reflectableField;
@@ -36,16 +37,31 @@
       ? ' 3 * optionalParameterCount + 2 * requiredParameterCount + 3'
       : ' 2 * optionalParameterCount + requiredParameterCount + 3';
 
+  jsAst.Expression typeInformationAccess =
+      emitter.generateEmbeddedGlobalAccess(embeddedNames.TYPE_INFORMATION);
+  jsAst.Expression globalFunctionsAccess =
+      emitter.generateEmbeddedGlobalAccess(embeddedNames.GLOBAL_FUNCTIONS);
+  jsAst.Expression staticsAccess =
+      emitter.generateEmbeddedGlobalAccess(embeddedNames.STATICS);
+  jsAst.Expression interceptedNamesAccess =
+      emitter.generateEmbeddedGlobalAccess(embeddedNames.INTERCEPTED_NAMES);
+  jsAst.Expression mangledGlobalNamesAccess =
+      emitter.generateEmbeddedGlobalAccess(embeddedNames.MANGLED_GLOBAL_NAMES);
+  jsAst.Expression mangledNamesAccess =
+      emitter.generateEmbeddedGlobalAccess(embeddedNames.MANGLED_NAMES);
+  jsAst.Expression librariesAccess =
+      emitter.generateEmbeddedGlobalAccess(embeddedNames.LIBRARIES);
 
-  String header = '''
+  jsAst.Statement header = js.statement('''
 // [map] returns an object literal that V8 shouldn not try to optimize with a
 // hidden class. This prevents a potential performance problem where V8 tries
 // to build a hidden class for an object used as a hashMap.
+// It requires fewer characters to declare a variable as a parameter than
+// with `var`.
+  function map(x){x=Object.create(null);x.x=0;delete x.x;return x}
+''');
 
-  function map(x){x={x:x};delete x.x;return x}
-''';
-
-  String processStatics = '''
+  jsAst.Statement processStatics = js.statement('''
     function processStatics(descriptor) {
       for (var property in descriptor) {
         if (!hasOwnProperty.call(descriptor, property)) continue;
@@ -59,7 +75,7 @@
           if (flag > 0)
             descriptor[previousProperty].$reflectableField = flag;
           if (element && element.length)
-            init.typeInformation[previousProperty] = element;
+            #[previousProperty] = element;  // embedded typeInformation.
         } else if (firstChar === "@") {
           property = property.substring(1);
           ${namer.currentIsolate}[property][$metadataField] = element;
@@ -73,7 +89,7 @@
         } else if (typeof element === "function") {
           globalObject[previousProperty = property] = element;
           functions.push(property);
-          init.globalFunctions[property] = element;
+          #[property] = element;  // embedded globalFunctions.
         } else if (element.constructor === Array) {
           addStubs(globalObject, element, property,
                    true, descriptor, functions);
@@ -85,7 +101,7 @@
             if (!hasOwnProperty.call(element, prop)) continue;
             firstChar = prop.substring(0, 1);
             if (prop === "static") {
-              processStatics(init.statics[property] = element[prop]);
+              processStatics(#[property] = element[prop]);  // embedded statics.
             } else if (firstChar === "+") {
               mangledNames[previousProp] = prop.substring(1);
               var flag = element[prop];
@@ -117,14 +133,14 @@
         }
       }
     }
-''';
+''', [typeInformationAccess, globalFunctionsAccess, staticsAccess]);
 
 
   /**
    * See [dart2js.js_emitter.ContainerBuilder.addMemberMethod] for format of
    * [array].
    */
-  String addStubs = '''
+  jsAst.Statement addStubs = js.statement('''
   function addStubs(descriptor, array, name, isStatic,
                     originalDescriptor, functions) {
     var f, funcs =
@@ -166,20 +182,20 @@
       descriptor[name].\$getter = f;
       f.\$getterStub = true;
       // Used to create an isolate using spawnFunction.
-      if (isStatic) init.globalFunctions[name] = f;
+      if (isStatic) #[name] = f;  // embedded globalFunctions.
       originalDescriptor[getterStubName] = descriptor[getterStubName] = f;
       funcs.push(f);
       if (getterStubName) functions.push(getterStubName);
       f.\$stubName = getterStubName;
       f.\$callName = null;
-      if (isIntercepted) init.interceptedNames[getterStubName] = true;
+      if (isIntercepted) #[getterStubName] = true; // embedded interceptedNames.
     }
     if (isReflectable) {
       for (var i = 0; i < funcs.length; i++) {
         funcs[i].$reflectableField = 1;
         funcs[i].$reflectionInfoField = array;
       }
-      var mangledNames = isStatic ? init.mangledGlobalNames : init.mangledNames;
+      var mangledNames = isStatic ? # : #;  // embedded mangledGlobalNames, mangledNames
       var unmangledName = ${readString("array", "unmangledNameIndex")};
       // The function is either a getter, a setter, or a method.
       // If it is a method, it might also have a tear-off closure.
@@ -198,24 +214,25 @@
       if (optionalParameterCount) descriptor[unmangledName + "*"] = funcs[0];
     }
   }
-''';
+''', [globalFunctionsAccess, interceptedNamesAccess,
+      mangledGlobalNamesAccess, mangledNamesAccess]);
 
   List<jsAst.Statement> tearOffCode = buildTearOffCode(backend);
 
-  String init = '''
+  jsAst.Statement init = js.statement('''{
   var functionCounter = 0;
   var tearOffGetter = (typeof dart_precompiled == "function")
       ? tearOffGetterCsp : tearOffGetterNoCsp;
-  if (!init.libraries) init.libraries = [];
-  if (!init.mangledNames) init.mangledNames = map();
-  if (!init.mangledGlobalNames) init.mangledGlobalNames = map();
-  if (!init.statics) init.statics = map();
-  if (!init.typeInformation) init.typeInformation = map();
-  if (!init.globalFunctions) init.globalFunctions = map();
-  if (!init.interceptedNames) init.interceptedNames = map();
-  var libraries = init.libraries;
-  var mangledNames = init.mangledNames;
-  var mangledGlobalNames = init.mangledGlobalNames;
+  if (!#) # = [];  // embedded libraries.
+  if (!#) # = map();  // embedded mangledNames.
+  if (!#) # = map();  // embedded mangledGlobalNames.
+  if (!#) # = map();  // embedded statics.
+  if (!#) # = map();  // embedded typeInformation.
+  if (!#) # = map();  // embedded globalFunctions.
+  if (!#) # = map();  // embedded interceptedNames.
+  var libraries = #;  // embeded libraries.
+  var mangledNames = #;  // embedded mangledNames.
+  var mangledGlobalNames = #;  // embedded mangledGlobalNames.
   var hasOwnProperty = Object.prototype.hasOwnProperty;
   var length = reflectionData.length;
   for (var i = 0; i < length; i++) {
@@ -246,17 +263,26 @@
     libraries.push([name, uri, classes, functions, metadata, fields, isRoot,
                     globalObject]);
   }
-''';
+}''', [librariesAccess, librariesAccess,
+       mangledNamesAccess, mangledNamesAccess,
+       mangledGlobalNamesAccess, mangledGlobalNamesAccess,
+       staticsAccess, staticsAccess,
+       typeInformationAccess, typeInformationAccess,
+       globalFunctionsAccess, globalFunctionsAccess,
+       interceptedNamesAccess, interceptedNamesAccess,
+       librariesAccess,
+       mangledNamesAccess,
+       mangledGlobalNamesAccess]);
 
   return js('''
 (function (reflectionData) {
   "use strict";
-  $header
-  $processStatics
-  $addStubs
+  #; // header
+  #; // processStatics
+  #; // addStubs
   #; // tearOffCode
-  $init
-})'''  , [tearOffCode]);
+  #; // init
+})''', [header, processStatics, addStubs, tearOffCode, init]);
 }
 
 
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/type_test_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/type_test_emitter.dart
index 407ec71..f900462 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/type_test_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/type_test_emitter.dart
@@ -401,10 +401,21 @@
       return false;
     }
 
+    bool canBeReflectedAsFunction(Element element) {
+      return element.kind == ElementKind.FUNCTION ||
+          element.kind == ElementKind.GETTER ||
+          element.kind == ElementKind.SETTER ||
+          element.kind == ElementKind.GENERATIVE_CONSTRUCTOR;
+    }
+
+    bool canBeReified(Element element) {
+      return (canTearOff(element) || backend.isAccessibleByReflection(element));
+    }
+
+    // Find all types referenced from the types of elements that can be
+    // reflected on 'as functions'.
     backend.generatedCode.keys.where((element) {
-      return element is FunctionElement &&
-          element is! ConstructorBodyElement &&
-          (canTearOff(element) || backend.isAccessibleByReflection(element));
+      return canBeReflectedAsFunction(element) && canBeReified(element);
     }).forEach((FunctionElement function) {
       DartType type = function.computeType(compiler);
       for (ClassElement cls in backend.rti.getReferencedClasses(type)) {
diff --git a/sdk/lib/_internal/compiler/implementation/library_loader.dart b/sdk/lib/_internal/compiler/implementation/library_loader.dart
index 969d5b8..ef540c5 100644
--- a/sdk/lib/_internal/compiler/implementation/library_loader.dart
+++ b/sdk/lib/_internal/compiler/implementation/library_loader.dart
@@ -397,6 +397,22 @@
     });
   }
 
+  /// True if the uris are pointing to a library that is shared between dart2js
+  /// and the core libraries. By construction they must be imported into the
+  /// runtime, and, at the same time, into dart2js. This can lead to
+  /// duplicated imports, like in the docgen.
+  // TODO(johnniwinther): is this necessary, or should we change docgen not
+  //   to include both libraries (compiler and lib) at the same time?
+  bool _isSharedDart2jsLibrary(Uri uri1, Uri uri2) {
+    bool inJsLibShared(Uri uri) {
+      List<String> segments = uri.pathSegments;
+      if (segments.length < 3) return false;
+      if (segments[segments.length - 2] != 'shared') return false;
+      return (segments[segments.length - 3] == 'js_lib');
+    }
+    return inJsLibShared(uri1) && inJsLibShared(uri2);
+  }
+
   void checkDuplicatedLibraryName(LibraryElement library) {
     Uri resourceUri = library.entryCompilationUnit.script.resourceUri;
     LibraryName tag = library.libraryTag;
@@ -422,7 +438,8 @@
     } else if (tag != null) {
       String name = library.getLibraryOrScriptName();
       existing = libraryNames.putIfAbsent(name, () => library);
-      if (!identical(existing, library)) {
+      if (!identical(existing, library) &&
+          !_isSharedDart2jsLibrary(resourceUri, existing.canonicalUri)) {
         compiler.withCurrentElement(library, () {
           compiler.reportWarning(tag.name,
               MessageKind.DUPLICATED_LIBRARY_NAME,
diff --git a/sdk/lib/_internal/compiler/implementation/mirror_renamer/mirror_renamer.dart b/sdk/lib/_internal/compiler/implementation/mirror_renamer/mirror_renamer.dart
index 929479c..7f89b3c 100644
--- a/sdk/lib/_internal/compiler/implementation/mirror_renamer/mirror_renamer.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirror_renamer/mirror_renamer.dart
@@ -12,3 +12,18 @@
                                                 PlaceholderCollector;
 
 part 'renamer.dart';
+
+class MirrorRenamer {
+  const MirrorRenamer();
+
+  LibraryElement get helperLibrary => null;
+
+  FunctionElement get getNameFunction => null;
+
+  bool isMirrorHelperLibrary(LibraryElement element) => false;
+
+  void registerStaticSend(Element currentElement, Element target, Node node) {}
+
+  void addRenames(Map<Node, String> renames, List<Node> topLevelNodes,
+                  PlaceholderCollector placeholderCollector) {}
+}
diff --git a/sdk/lib/_internal/compiler/implementation/mirror_renamer/renamer.dart b/sdk/lib/_internal/compiler/implementation/mirror_renamer/renamer.dart
index 3b32fec..4f206c1 100644
--- a/sdk/lib/_internal/compiler/implementation/mirror_renamer/renamer.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirror_renamer/renamer.dart
@@ -4,39 +4,57 @@
 
 part of mirror_renamer;
 
-class MirrorRenamer {
+class MirrorRenamerImpl implements MirrorRenamer {
   static const String MIRROR_HELPER_GET_NAME_FUNCTION = 'helperGetName';
   static final Uri DART_MIRROR_HELPER =
       new Uri(scheme: 'dart', path: '_mirror_helper');
   static const String MIRROR_HELPER_SYMBOLS_MAP_NAME = '_SYMBOLS';
 
+  /// Initialized when dart:mirrors is loaded if the useMirrorHelperLibrary
+  /// field is set.
+  final LibraryElement helperLibrary;
+
+  /// Initialized when dart:mirrors is loaded if the useMirrorHelperLibrary
+  /// field is set.
+  final FunctionElement getNameFunction;
+
+  /// Initialized when dart:mirrors is loaded if the useMirrorHelperLibrary
+  /// field is set.
+  final FieldElement symbolsMapVariable;
+
   /// Maps mangled name to original name.
   Map<String, String> symbols = new Map<String, String>();
+
   /// Contains all occurrencs of MirrorSystem.getName() calls in the user code.
   List<Node> mirrorSystemGetNameNodes = <Node>[];
+
   /**
    *  Initialized when the placeholderCollector collects the FunctionElement
    *  backend.mirrorHelperGetNameFunction which represents the helperGetName
    *  function in _mirror_helper.
    */
-  FunctionExpression mirrorHelperGetNameFunctionNode;
-  VariableDefinitions mirrorHelperSymbolsMapNode;
+  FunctionExpression get getNameFunctionNode => getNameFunction.node;
+  VariableDefinitions get symbolsMapNode => symbolsMapVariable.node;
   Compiler compiler;
   DartBackend backend;
 
-  MirrorRenamer(this.compiler, this.backend);
+  MirrorRenamerImpl(this.compiler, this.backend, LibraryElement library)
+      : this.helperLibrary = library,
+        getNameFunction = library.find(
+            MirrorRenamerImpl.MIRROR_HELPER_GET_NAME_FUNCTION),
+        symbolsMapVariable = library.find(
+            MirrorRenamerImpl.MIRROR_HELPER_SYMBOLS_MAP_NAME);
 
-  void registerStaticSend(Element element, Send node) {
-  if (element == compiler.mirrorSystemGetNameFunction) {
-    mirrorSystemGetNameNodes.add(node);
+  bool isMirrorHelperLibrary(LibraryElement element) {
+    return element == helperLibrary;
   }
- }
 
-  void registerHelperElement(Element element, Node node) {
-    if (element == backend.mirrorHelperGetNameFunction) {
-      mirrorHelperGetNameFunctionNode = node;
-    } else if (element == backend.mirrorHelperSymbolsMap) {
-      mirrorHelperSymbolsMapNode = node;
+  void registerStaticSend(Element currentElement, Element target, Send node) {
+    if (target == compiler.mirrorSystemGetNameFunction &&
+        currentElement.library != helperLibrary) {
+      // Access to `MirrorSystem.getName` that needs to be redirected to the
+      // [getNameFunction].
+      mirrorSystemGetNameNodes.add(node);
     }
   }
 
@@ -70,9 +88,9 @@
     }
 
     Identifier symbolsMapIdentifier =
-        mirrorHelperSymbolsMapNode.definitions.nodes.head.asSend().selector;
+        symbolsMapNode.definitions.nodes.head.asSend().selector;
     assert(symbolsMapIdentifier != null);
-    topLevelNodes.remove(mirrorHelperSymbolsMapNode);
+    topLevelNodes.remove(symbolsMapNode);
 
     StringBuffer sb = new StringBuffer(
         'const ${renames[symbolsMapIdentifier]} = const<String,String>{');
@@ -93,7 +111,7 @@
 
     // Replace calls to Mirrorsystem.getName with calls to helper function.
     mirrorSystemGetNameNodes.forEach((node) {
-      renames[node.selector] = renames[mirrorHelperGetNameFunctionNode.name];
+      renames[node.selector] = renames[getNameFunctionNode.name];
       renames[node.receiver] = '';
     });
   }
diff --git a/sdk/lib/_internal/compiler/implementation/native_handler.dart b/sdk/lib/_internal/compiler/implementation/native_handler.dart
index c9f38ad..74d3ccf 100644
--- a/sdk/lib/_internal/compiler/implementation/native_handler.dart
+++ b/sdk/lib/_internal/compiler/implementation/native_handler.dart
@@ -68,6 +68,18 @@
   // TODO(sra): The entry from codegen will not have a resolver.
   void registerJsCall(Send node, ResolverVisitor resolver) {}
 
+  /**
+   * Handles JS-embedded global calls, which can be an instantiation point for
+   * types.
+   *
+   * For example, the following code instantiates and returns a String class
+   *
+   *     JS_EMBEDDED_GLOBAL('String', 'foo')
+   *
+   */
+  // TODO(sra): The entry from codegen will not have a resolver.
+  void registerJsEmbeddedGlobalCall(Send node, ResolverVisitor resolver) {}
+
   /// Emits a summary information using the [log] function.
   void logSummary(log(message)) {}
 
@@ -464,6 +476,14 @@
     flushQueue();
   }
 
+  void registerJsEmbeddedGlobalCall(Send node, ResolverVisitor resolver) {
+    NativeBehavior behavior =
+        NativeBehavior.ofJsEmbeddedGlobalCall(node, compiler, resolver);
+    processNativeBehavior(behavior, node);
+    nativeBehaviors[node] = behavior;
+    flushQueue();
+  }
+
   NativeBehavior getNativeBehaviorOf(Send node) => nativeBehaviors[node];
 
   processNativeBehavior(NativeBehavior behavior, cause) {
@@ -941,6 +961,62 @@
     return behavior;
   }
 
+  static NativeBehavior ofJsEmbeddedGlobalCall(Send jsGlobalCall,
+                                               Compiler compiler,
+                                               resolver) {
+    // The first argument of a JS-embedded global call is a string encoding
+    // the type of the code.
+    //
+    //  'Type1|Type2'.  A union type.
+    //  '=Object'.      A JavaScript Object, no subtype.
+
+    Link<Node> argNodes = jsGlobalCall.arguments;
+    if (argNodes.isEmpty) {
+      compiler.internalError(jsGlobalCall,
+          "JS embedded global expression has no type.");
+    }
+
+    // We don't check the given name. That needs to be done at a later point.
+    // This is, because we want to allow non-literals as names.
+    if (argNodes.tail.isEmpty) {
+      compiler.internalError(jsGlobalCall, 'Embedded Global is missing name');
+    }
+
+    if (!argNodes.tail.tail.isEmpty) {
+      compiler.internalError(argNodes.tail.tail.head,
+          'Embedded Global has more than 2 arguments');
+    }
+
+    LiteralString specLiteral = argNodes.head.asLiteralString();
+    if (specLiteral == null) {
+      // TODO(sra): We could accept a type identifier? e.g. JS(bool, '1<2').  It
+      // is not very satisfactory because it does not work for void, dynamic.
+      compiler.internalError(argNodes.head, "Unexpected first argument.");
+    }
+
+    NativeBehavior behavior = new NativeBehavior();
+
+    String specString = specLiteral.dartString.slowToString();
+
+    resolveType(String typeString) {
+      return _parseType(
+          typeString,
+          compiler,
+          (name) => resolver.resolveTypeFromString(specLiteral, name),
+          jsGlobalCall);
+    }
+
+    processSpecString(compiler, jsGlobalCall,
+                      specString,
+                      resolveType: resolveType,
+                      typesReturned: behavior.typesReturned,
+                      typesInstantiated: behavior.typesInstantiated,
+                      objectType: compiler.objectClass.computeType(compiler),
+                      nullType: compiler.nullClass.computeType(compiler));
+
+    return behavior;
+  }
+
   static NativeBehavior ofMethod(FunctionElement method, Compiler compiler) {
     FunctionType type = method.computeType(compiler);
     var behavior = new NativeBehavior();
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
index 8b7644a..0b76aec 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/members.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
@@ -1407,7 +1407,7 @@
       // and the annotated element instead. This will allow the backend to
       // retrieve the backend constant and only register metadata on the
       // elements for which it is needed. (Issue 17732).
-      registry.registerMetadataConstant(annotation.value, annotatedElement);
+      registry.registerMetadataConstant(annotation, annotatedElement);
       annotation.resolutionState = STATE_DONE;
     }));
   }
@@ -2922,6 +2922,8 @@
       if (target != null && target.isForeign(compiler.backend)) {
         if (selector.name == 'JS') {
           registry.registerJsCall(node, this);
+        } else if (selector.name == 'JS_EMBEDDED_GLOBAL') {
+          registry.registerJsEmbeddedGlobalCall(node, this);
         } else if (selector.name == 'JS_INTERCEPTOR_CONSTANT') {
           if (!node.argumentsNode.isEmpty) {
             Node argument = node.argumentsNode.nodes.head;
@@ -4917,6 +4919,10 @@
         message: "TreeElements have not been computed for $this."));
     return _treeElements;
   }
+
+  void reuseElement() {
+    _treeElements = null;
+  }
 }
 
 /// The result of resolving a node.
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/registry.dart b/sdk/lib/_internal/compiler/implementation/resolution/registry.dart
index 605eaf2..8b36ab6 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/registry.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/registry.dart
@@ -205,8 +205,9 @@
     backend.resolutionCallbacks.onLazyField(this);
   }
 
-  void registerMetadataConstant(Constant constant, Element annotatedElement) {
-    backend.registerMetadataConstant(constant, annotatedElement, this);
+  void registerMetadataConstant(MetadataAnnotation metadata,
+                                Element annotatedElement) {
+    backend.registerMetadataConstant(metadata, annotatedElement, this);
   }
 
   void registerThrowRuntimeError() {
@@ -267,6 +268,12 @@
     world.registerJsCall(node, visitor);
   }
 
+  // TODO(johnniwinther): Remove the [ResolverVisitor] dependency. Its only
+  // needed to lookup types in the current scope.
+  void registerJsEmbeddedGlobalCall(Node node, ResolverVisitor visitor) {
+    world.registerJsEmbeddedGlobalCall(node, visitor);
+  }
+
   void registerGetOfStaticFunction(FunctionElement element) {
     world.registerGetOfStaticFunction(element);
   }
diff --git a/sdk/lib/_internal/compiler/implementation/resolved_visitor.dart b/sdk/lib/_internal/compiler/implementation/resolved_visitor.dart
index 717b0a5..5d4ae3b 100644
--- a/sdk/lib/_internal/compiler/implementation/resolved_visitor.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolved_visitor.dart
@@ -5,10 +5,9 @@
 part of dart2js;
 
 abstract class ResolvedVisitor<R> extends Visitor<R> {
-  final Compiler compiler;
   TreeElements elements;
 
-  ResolvedVisitor(this.elements, this.compiler);
+  ResolvedVisitor(this.elements);
 
   R visitSend(Send node) {
     Element element = elements[node];
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart b/sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart
index 5af5ee0..6c43527 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart
@@ -10,17 +10,18 @@
   Token parseClassBody(Token token) => fullParseClassBody(token);
 }
 
-class PartialClassElement extends ClassElementX {
-  final Token beginToken;
-  final Token endToken;
+class PartialClassElement extends ClassElementX with PartialElement {
   ClassNode cachedNode;
 
   PartialClassElement(String name,
-                      Token this.beginToken,
-                      Token this.endToken,
+                      Token beginToken,
+                      Token endToken,
                       Element enclosing,
                       int id)
-      : super(name, enclosing, id, STATE_NOT_STARTED);
+      : super(name, enclosing, id, STATE_NOT_STARTED) {
+    this.beginToken = beginToken;
+    this.endToken = endToken;
+  }
 
   void set supertypeLoadState(int state) {
     assert(state == supertypeLoadState + 1);
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
index 468473e..6fa7cc2 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
@@ -934,8 +934,9 @@
     NodeList typeVariables = popNode(); // TOOD(karlklose): do not throw away.
     Identifier name = popNode();
     TypeAnnotation returnType = popNode();
-    pushElement(new PartialTypedefElement(name.source, compilationUnitElement,
-                                          typedefKeyword));
+    pushElement(
+        new PartialTypedefElement(
+            name.source, compilationUnitElement, typedefKeyword, endToken));
     rejectBuiltInIdentifier(name);
   }
 
@@ -2170,8 +2171,8 @@
 }
 
 abstract class PartialElement {
-  Token get beginToken;
-  Token get endToken;
+  Token beginToken;
+  Token endToken;
 
   bool hasParseError = false;
 
@@ -2255,14 +2256,13 @@
 }
 
 class PartialFieldList extends VariableList with PartialElement {
-  final Token beginToken;
-  final Token endToken;
-
-  PartialFieldList(this.beginToken,
-                   this.endToken,
+  PartialFieldList(Token beginToken,
+                   Token endToken,
                    Modifiers modifiers,
                    bool hasParseError)
       : super(modifiers) {
+    super.beginToken = beginToken;
+    super.endToken = endToken;
     super.hasParseError = hasParseError;
   }
 
@@ -2310,11 +2310,19 @@
   }
 }
 
-class PartialTypedefElement extends TypedefElementX {
-  final Token token;
+class PartialTypedefElement extends TypedefElementX with PartialElement {
 
-  PartialTypedefElement(String name, Element enclosing, this.token)
-      : super(name, enclosing);
+  PartialTypedefElement(
+      String name,
+      Element enclosing,
+      Token beginToken,
+      Token endToken)
+      : super(name, enclosing) {
+    this.beginToken = beginToken;
+    this.endToken = endToken;
+  }
+
+  Token get token => beginToken;
 
   Node parseNode(DiagnosticListener listener) {
     if (cachedNode != null) return cachedNode;
diff --git a/sdk/lib/_internal/compiler/implementation/source_file.dart b/sdk/lib/_internal/compiler/implementation/source_file.dart
index af1a2be..c7ccdbb 100644
--- a/sdk/lib/_internal/compiler/implementation/source_file.dart
+++ b/sdk/lib/_internal/compiler/implementation/source_file.dart
@@ -181,6 +181,20 @@
   int lengthCache = -1;
 }
 
+class CachingUtf8BytesSourceFile extends Utf8BytesSourceFile {
+  String cachedText;
+
+  CachingUtf8BytesSourceFile(String filename, List<int> content)
+      : super(filename, content);
+
+  String slowText() {
+    if (cachedText == null) {
+      cachedText = super.slowText();
+    }
+    return cachedText;
+  }
+}
+
 class StringSourceFile extends SourceFile {
 
   final String text;
diff --git a/sdk/lib/_internal/compiler/implementation/source_file_provider.dart b/sdk/lib/_internal/compiler/implementation/source_file_provider.dart
index 6441ed0..144d638 100644
--- a/sdk/lib/_internal/compiler/implementation/source_file_provider.dart
+++ b/sdk/lib/_internal/compiler/implementation/source_file_provider.dart
@@ -7,8 +7,9 @@
 import 'dart:async';
 import 'dart:convert';
 import 'dart:io';
+import 'dart:math' as math;
 
-import '../compiler.dart' as api show Diagnostic;
+import '../compiler.dart' as api show Diagnostic, DiagnosticHandler;
 import 'dart2js.dart' show AbortLeg;
 import 'colors.dart' as colors;
 import 'source_file.dart';
@@ -49,12 +50,14 @@
           "(${ex.osError})");
     }
     dartCharactersRead += source.length;
-    sourceFiles[resourceUri.toString()] = new Utf8BytesSourceFile(
-        relativize(cwd, resourceUri, isWindows), source);
+    sourceFiles[resourceUri.toString()] =
+        new CachingUtf8BytesSourceFile(relativizeUri(resourceUri), source);
     return new Future.value(source);
   }
 
   Future/*<List<int> | String>*/ call(Uri resourceUri);
+
+  relativizeUri(Uri uri) => relativize(cwd, uri, isWindows);
 }
 
 class CompilerSourceFileProvider extends SourceFileProvider {
@@ -160,7 +163,8 @@
       if (file != null) {
         print(file.getLocationMessage(color(message), begin, end, true, color));
       } else {
-        throw '$uri: file is null';
+        print('${provider.relativizeUri(uri)}@$begin+${end - begin}:'
+              ' [$kind] ${color(message)}');
       }
     }
     if (fatal && ++fatalCount >= throwOnErrorCount && throwOnError) {
@@ -173,3 +177,107 @@
     return diagnosticHandler(uri, begin, end, message, kind);
   }
 }
+
+typedef void MessageCallback(String message);
+
+class RandomAccessFileOutputProvider {
+  final Uri out;
+  final Uri sourceMapOut;
+  final MessageCallback onInfo;
+  final MessageCallback onFailure;
+
+  int totalCharactersWritten = 0;
+  List<String> allOutputFiles = new List<String>();
+
+  RandomAccessFileOutputProvider(this.out,
+                                 this.sourceMapOut,
+                                 {this.onInfo,
+                                  this.onFailure});
+
+  static Uri computePrecompiledUri(Uri out) {
+    String extension = 'precompiled.js';
+    String outPath = out.path;
+    if (outPath.endsWith('.js')) {
+      outPath = outPath.substring(0, outPath.length - 3);
+      return out.resolve('$outPath.$extension');
+    } else {
+      return out.resolve(extension);
+    }
+  }
+
+  EventSink<String> call(String name, String extension) {
+    Uri uri;
+    String sourceMapFileName;
+    bool isPrimaryOutput = false;
+    if (name == '') {
+      if (extension == 'js' || extension == 'dart') {
+        isPrimaryOutput = true;
+        uri = out;
+        sourceMapFileName =
+            sourceMapOut.path.substring(sourceMapOut.path.lastIndexOf('/') + 1);
+      } else if (extension == 'precompiled.js') {
+        uri = computePrecompiledUri(out);
+        onInfo("File ($uri) is compatible with header"
+               " \"Content-Security-Policy: script-src 'self'\"");
+      } else if (extension == 'js.map' || extension == 'dart.map') {
+        uri = sourceMapOut;
+      } else if (extension == 'info.html' || extension == "info.json") {
+        String outName = out.path.substring(out.path.lastIndexOf('/') + 1);
+        uri = out.resolve('$outName.$extension');
+      } else {
+        onFailure('Unknown extension: $extension');
+      }
+    } else {
+      uri = out.resolve('$name.$extension');
+    }
+
+    if (uri.scheme != 'file') {
+      onFailure('Unhandled scheme ${uri.scheme} in $uri.');
+    }
+
+    RandomAccessFile output;
+    try {
+      output = new File(uri.toFilePath()).openSync(mode: FileMode.WRITE);
+    } on FileSystemException catch(e) {
+      onFailure('$e');
+    }
+
+    allOutputFiles.add(relativize(currentDirectory, uri, Platform.isWindows));
+
+    int charactersWritten = 0;
+
+    writeStringSync(String data) {
+      // Write the data in chunks of 8kb, otherwise we risk running OOM.
+      int chunkSize = 8*1024;
+
+      int offset = 0;
+      while (offset < data.length) {
+        output.writeStringSync(
+            data.substring(offset, math.min(offset + chunkSize, data.length)));
+        offset += chunkSize;
+      }
+      charactersWritten += data.length;
+    }
+
+    onDone() {
+      output.closeSync();
+      if (isPrimaryOutput) {
+        totalCharactersWritten += charactersWritten;
+      }
+    }
+
+    return new EventSinkWrapper(writeStringSync, onDone);
+  }
+}
+
+class EventSinkWrapper extends EventSink<String> {
+  var onAdd, onClose;
+
+  EventSinkWrapper(this.onAdd, this.onClose);
+
+  void add(String data) => onAdd(data);
+
+  void addError(error, [StackTrace stackTrace]) => throw error;
+
+  void close() => onClose();
+}
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
index 06ebf89..b2c7094 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
@@ -322,8 +322,9 @@
           new SyntheticLocal('receiver', executableContext);
       // Unlike `this`, receiver is nullable since direct calls to generative
       // constructor call the constructor with `null`.
+      ClassWorld classWorld = compiler.world;
       HParameterValue value =
-          new HParameterValue(parameter, new TypeMask.exact(cls));
+          new HParameterValue(parameter, new TypeMask.exact(cls, classWorld));
       builder.graph.explicitReceiverParameter = value;
       builder.graph.entry.addAtEntry(value);
     }
@@ -902,6 +903,7 @@
  * This class builds SSA nodes for functions represented in AST.
  */
 class SsaBuilder extends ResolvedVisitor {
+  final Compiler compiler;
   final JavaScriptBackend backend;
   final ConstantSystem constantSystem;
   final CodegenWorkItem work;
@@ -985,11 +987,12 @@
   SsaBuilder(JavaScriptBackend backend,
              CodegenWorkItem work,
              this.nativeEmitter)
-    : this.backend = backend,
+    : this.compiler = backend.compiler,
+      this.backend = backend,
       this.constantSystem = backend.constantSystem,
       this.work = work,
       this.rti = backend.rti,
-      super(work.resolutionTree, backend.compiler) {
+      super(work.resolutionTree) {
     localsHandler = new LocalsHandler(this, work.element);
     sourceElementStack.add(work.element);
   }
@@ -1254,6 +1257,13 @@
 
       if (cachedCanBeInlined == true) return cachedCanBeInlined;
 
+      if (backend.functionsToAlwaysInline.contains(function)) {
+        // Inline this function regardless of it's size.
+        assert(InlineWeeder.canBeInlined(function.node, -1, false,
+                                         allowLoops: true));
+        return true;
+      }
+
       int numParameters = function.functionSignature.parameterCount;
       int maxInliningNodes;
       bool useMaxInliningNodes = true;
@@ -1269,9 +1279,7 @@
       // inlining stack are called only once as well, we know we will
       // save on output size by inlining this method.
       TypesInferrer inferrer = compiler.typesTask.typesInferrer;
-      if (inferrer.isCalledOnce(element)
-          && (inliningStack.every(
-                  (entry) => inferrer.isCalledOnce(entry.function)))) {
+      if (inferrer.isCalledOnce(element) && allInlinedFunctionsCalledOnce) {
         useMaxInliningNodes = false;
       }
       bool canInline;
@@ -1322,6 +1330,10 @@
     return false;
   }
 
+  bool get allInlinedFunctionsCalledOnce {
+    return inliningStack.isEmpty || inliningStack.last.allFunctionsCalledOnce;
+  }
+
   inlinedFrom(Element element, f()) {
     assert(element is FunctionElement || element is VariableElement);
     return compiler.withCurrentElement(element, () {
@@ -1968,7 +1980,8 @@
         includeSuperAndInjectedMembers: true);
 
     InterfaceType type = classElement.thisType;
-    TypeMask ssaType = new TypeMask.nonNullExact(classElement.declaration);
+    TypeMask ssaType =
+        new TypeMask.nonNullExact(classElement.declaration, compiler.world);
     List<DartType> instantiatedTypes;
     addInlinedInstantiation(type);
     if (!currentInlinedInstantiations.isEmpty) {
@@ -2911,7 +2924,8 @@
       capturedVariables.add(localsHandler.readLocal(capturedLocal));
     });
 
-    TypeMask type = new TypeMask.nonNullExact(compiler.functionClass);
+    TypeMask type =
+        new TypeMask.nonNullExact(compiler.functionClass, compiler.world);
     push(new HForeignNew(closureClassElement, type, capturedVariables));
 
     Element methodElement = nestedClosureData.closureElement;
@@ -3578,6 +3592,50 @@
                 argument, string.dartString.slowToString())));
   }
 
+  void handleForeignJsEmbeddedGlobal(ast.Send node) {
+    List<ast.Node> arguments = node.arguments.toList();
+    ast.Node globalNameNode;
+    switch (arguments.length) {
+    case 0:
+    case 1:
+      compiler.reportError(
+          node, MessageKind.GENERIC,
+          {'text': 'Error: Expected two arguments to JS_EMBEDDED_GLOBAL.'});
+      return;
+    case 2:
+      // The type has been extracted earlier. We are only interested in the
+      // name in this function.
+      globalNameNode = arguments[1];
+      break;
+    default:
+      for (int i = 2; i < arguments.length; i++) {
+        compiler.reportError(
+            arguments[i], MessageKind.GENERIC,
+            {'text': 'Error: Extra argument to JS_EMBEDDED_GLOBAL.'});
+      }
+      return;
+    }
+    visit(arguments[1]);
+    HInstruction globalNameHNode = pop();
+    if (!globalNameHNode.isConstantString()) {
+      compiler.reportError(
+          arguments[1], MessageKind.GENERIC,
+          {'text': 'Error: Expected String as second argument '
+                   'to JS_EMBEDDED_GLOBAL.'});
+      return;
+    }
+    HConstant hConstant = globalNameHNode;
+    StringConstant constant = hConstant.constant;
+    String globalName = constant.value.slowToString();
+    js.Template expr = js.js.expressionTemplateYielding(
+        backend.emitter.generateEmbeddedGlobalAccess(globalName));
+    native.NativeBehavior nativeBehavior =
+        compiler.enqueuer.resolution.nativeEnqueuer.getNativeBehaviorOf(node);
+    TypeMask ssaType =
+        TypeMaskFactory.fromNativeBehavior(nativeBehavior, compiler);
+    push(new HForeign(expr, ssaType, const []));
+  }
+
   void handleJsInterceptorConstant(ast.Send node) {
     // Single argument must be a TypeConstant which is converted into a
     // InterceptorConstant.
@@ -3764,6 +3822,8 @@
       handleForeignJsCurrentIsolate(node);
     } else if (name == 'JS_GET_NAME') {
       handleForeignJsGetName(node);
+    } else if (name == 'JS_EMBEDDED_GLOBAL') {
+      handleForeignJsEmbeddedGlobal(node);
     } else if (name == 'JS_GET_FLAG') {
       handleForeingJsGetFlag(node);
     } else if (name == 'JS_EFFECT') {
@@ -4098,11 +4158,11 @@
         ClassElement cls = element.enclosingClass;
         assert(cls.thisType.element.isNative);
         return inferred.containsAll(compiler.world)
-            ? new TypeMask.nonNullExact(cls.thisType.element)
+            ? new TypeMask.nonNullExact(cls.thisType.element, compiler.world)
             : inferred;
       } else if (element.isGenerativeConstructor) {
         ClassElement cls = element.enclosingClass;
-        return new TypeMask.nonNullExact(cls.thisType.element);
+        return new TypeMask.nonNullExact(cls.thisType.element, compiler.world);
       } else {
         return TypeMaskFactory.inferredReturnTypeForElement(
             originalElement, compiler);
@@ -4544,11 +4604,11 @@
           && selector.name == "length";
       if (isLength || selector.isIndex) {
         TypeMask type = new TypeMask.nonNullExact(
-            element.enclosingClass.declaration);
+            element.enclosingClass.declaration, compiler.world);
         return type.satisfies(backend.jsIndexableClass, compiler.world);
       } else if (selector.isIndexSet) {
         TypeMask type = new TypeMask.nonNullExact(
-            element.enclosingClass.declaration);
+            element.enclosingClass.declaration, compiler.world);
         return type.satisfies(backend.jsMutableIndexableClass, compiler.world);
       } else {
         return false;
@@ -5867,9 +5927,11 @@
   void enterInlinedMethod(FunctionElement function,
                           ast.Node _,
                           List<HInstruction> compiledArguments) {
+    TypesInferrer inferrer = compiler.typesTask.typesInferrer;
     AstInliningState state = new AstInliningState(
         function, returnLocal, returnType, elements, stack, localsHandler,
-        inTryStatement);
+        inTryStatement,
+        allInlinedFunctionsCalledOnce && inferrer.isCalledOnce(function));
     inliningStack.add(state);
 
     // Setting up the state of the (AST) builder is performed even when the
@@ -5994,6 +6056,9 @@
  * This class visits the method that is a candidate for inlining and
  * finds whether it is too difficult to inline.
  */
+// TODO(karlklose): refactor to make it possible to distinguish between
+// implementation restrictions (for example, we *can't* inline multiple returns)
+// and heuristics (we *shouldn't* inline large functions).
 class InlineWeeder extends ast.Visitor {
   // Invariant: *INSIDE_LOOP* > *OUTSIDE_LOOP*
   static const INLINING_NODES_OUTSIDE_LOOP = 18;
@@ -6006,14 +6071,18 @@
   int nodeCount = 0;
   final int maxInliningNodes;
   final bool useMaxInliningNodes;
+  final bool allowLoops;
 
-  InlineWeeder(this.maxInliningNodes, this.useMaxInliningNodes);
+  InlineWeeder(this.maxInliningNodes,
+               this.useMaxInliningNodes,
+               this.allowLoops);
 
   static bool canBeInlined(ast.FunctionExpression functionExpression,
                            int maxInliningNodes,
-                           bool useMaxInliningNodes) {
+                           bool useMaxInliningNodes,
+                           {bool allowLoops: false}) {
     InlineWeeder weeder =
-        new InlineWeeder(maxInliningNodes, useMaxInliningNodes);
+        new InlineWeeder(maxInliningNodes, useMaxInliningNodes, allowLoops);
     weeder.visit(functionExpression.initializers);
     weeder.visit(functionExpression.body);
     return !weeder.tooDifficult;
@@ -6061,7 +6130,7 @@
     // It's actually not difficult to inline a method with a loop, but
     // our measurements show that it's currently better to not inline a
     // method that contains a loop.
-    tooDifficult = true;
+    if (!allowLoops) tooDifficult = true;
   }
 
   void visitRedirectingFactoryBody(ast.RedirectingFactoryBody node) {
@@ -6116,6 +6185,7 @@
   final List<HInstruction> oldStack;
   final LocalsHandler oldLocalsHandler;
   final bool inTryStatement;
+  final bool allFunctionsCalledOnce;
 
   AstInliningState(FunctionElement function,
                    this.oldReturnLocal,
@@ -6123,7 +6193,9 @@
                    this.oldElements,
                    this.oldStack,
                    this.oldLocalsHandler,
-                   this.inTryStatement): super(function);
+                   this.inTryStatement,
+                   this.allFunctionsCalledOnce)
+      : super(function);
 }
 
 class SsaBranch {
@@ -6366,9 +6438,9 @@
 }
 
 class TypeBuilder implements DartTypeVisitor<dynamic, SsaBuilder> {
-  final World world;
+  final ClassWorld classWorld;
 
-  TypeBuilder(this.world);
+  TypeBuilder(this.classWorld);
 
   void visitType(DartType type, _) {
     throw 'Internal error $type';
@@ -6376,13 +6448,13 @@
 
   void visitVoidType(VoidType type, SsaBuilder builder) {
     ClassElement cls = builder.backend.findHelper('VoidRuntimeType');
-    builder.push(new HVoidType(type, new TypeMask.exact(cls)));
+    builder.push(new HVoidType(type, new TypeMask.exact(cls, classWorld)));
   }
 
   void visitTypeVariableType(TypeVariableType type,
                              SsaBuilder builder) {
     ClassElement cls = builder.backend.findHelper('RuntimeType');
-    TypeMask instructionType = new TypeMask.subclass(cls, world);
+    TypeMask instructionType = new TypeMask.subclass(cls, classWorld);
     if (!builder.sourceElement.enclosingElement.isClosure &&
         builder.sourceElement.isInstanceMember) {
       HInstruction receiver = builder.localsHandler.readThis();
@@ -6420,7 +6492,8 @@
     }
 
     ClassElement cls = builder.backend.findHelper('RuntimeFunctionType');
-    builder.push(new HFunctionType(inputs, type, new TypeMask.exact(cls)));
+    builder.push(new HFunctionType(inputs, type,
+        new TypeMask.exact(cls, classWorld)));
   }
 
   void visitMalformedType(MalformedType type, SsaBuilder builder) {
@@ -6447,7 +6520,8 @@
     } else {
       cls = builder.backend.findHelper('RuntimeTypeGeneric');
     }
-    builder.push(new HInterfaceType(inputs, type, new TypeMask.exact(cls)));
+    builder.push(new HInterfaceType(inputs, type,
+        new TypeMask.exact(cls, classWorld)));
   }
 
   void visitTypedefType(TypedefType type, SsaBuilder builder) {
@@ -6459,6 +6533,6 @@
   void visitDynamicType(DynamicType type, SsaBuilder builder) {
     JavaScriptBackend backend = builder.compiler.backend;
     ClassElement cls = backend.findHelper('DynamicRuntimeType');
-    builder.push(new HDynamicType(type, new TypeMask.exact(cls)));
+    builder.push(new HDynamicType(type, new TypeMask.exact(cls, classWorld)));
   }
 }
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
index d34a26d..7048194 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
@@ -1575,7 +1575,8 @@
       // type because our optimizations might end up in a state where the
       // invoke dynamic knows more than the receiver.
       ClassElement enclosing = node.element.enclosingClass;
-      TypeMask receiverType = new TypeMask.nonNullExact(enclosing.declaration);
+      TypeMask receiverType =
+          new TypeMask.nonNullExact(enclosing.declaration, compiler.world);
       return new TypedSelector(receiverType, selector, compiler.world);
     }
     // If [JSInvocationMirror._invokeOn] is enabled, and this call
@@ -1673,7 +1674,8 @@
         // If the selector we need to register a typed getter to the
         // [world]. The emitter needs to know if it needs to emit a
         // bound closure for a method.
-        TypeMask receiverType = new TypeMask.nonNullExact(superClass);
+        TypeMask receiverType =
+            new TypeMask.nonNullExact(superClass, compiler.world);
         selector = new TypedSelector(receiverType, selector, compiler.world);
         // TODO(floitsch): we know the target. We shouldn't register a
         // dynamic getter.
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
index 0f31a5b..8e2df58 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
@@ -634,6 +634,7 @@
     // raw type.
     } else if (!RuntimeTypes.hasTypeArguments(type)) {
       TypeMask expressionMask = expression.instructionType;
+      assert(TypeMask.isNormalized(expressionMask, classWorld));
       TypeMask typeMask = (element == compiler.nullClass)
           ? new TypeMask.subtype(element, classWorld)
           : new TypeMask.nonNullSubtype(element, classWorld);
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/types.dart b/sdk/lib/_internal/compiler/implementation/ssa/types.dart
index 404518ca..cc95023 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/types.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/types.dart
@@ -56,7 +56,7 @@
     ClassWorld classWorld = compiler.world;
     JavaScriptBackend backend = compiler.backend;
     if (type == native.SpecialType.JsObject) {
-      return new TypeMask.nonNullExact(compiler.objectClass);
+      return new TypeMask.nonNullExact(compiler.objectClass, classWorld);
     } else if (type.isVoid) {
       return backend.nullType;
     } else if (type.element == compiler.nullClass) {
diff --git a/sdk/lib/_internal/compiler/implementation/types/type_mask.dart b/sdk/lib/_internal/compiler/implementation/types/type_mask.dart
index 19babe0..478f14f 100644
--- a/sdk/lib/_internal/compiler/implementation/types/type_mask.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/type_mask.dart
@@ -20,14 +20,22 @@
 
   const factory TypeMask.empty() = FlatTypeMask.empty;
 
-  factory TypeMask.exact(ClassElement base)
-      => new FlatTypeMask.exact(base);
+  factory TypeMask.exact(ClassElement base, ClassWorld classWorld) {
+    assert(invariant(base, classWorld.isInstantiated(base),
+        message: "Cannot create extact type mask for uninstantiated class"));
+    return new FlatTypeMask.exact(base);
+  }
+
+  factory TypeMask.exactOrEmpty(ClassElement base, ClassWorld classWorld) {
+    if (classWorld.isInstantiated(base)) return new FlatTypeMask.exact(base);
+    return const TypeMask.empty();
+  }
 
   factory TypeMask.subclass(ClassElement base, ClassWorld classWorld) {
     if (classWorld.hasAnySubclass(base)) {
       return new FlatTypeMask.subclass(base);
     } else {
-      return new FlatTypeMask.exact(base);
+      return new TypeMask.exactOrEmpty(base, classWorld);
     }
   }
 
@@ -38,20 +46,31 @@
     if (classWorld.hasAnySubtype(base)) {
       return new FlatTypeMask.subtype(base);
     } else {
-      return new FlatTypeMask.exact(base);
+      return new TypeMask.exactOrEmpty(base, classWorld);
     }
   }
 
   const factory TypeMask.nonNullEmpty() = FlatTypeMask.nonNullEmpty;
 
-  factory TypeMask.nonNullExact(ClassElement base)
-      => new FlatTypeMask.nonNullExact(base);
+  factory TypeMask.nonNullExact(ClassElement base, ClassWorld classWorld) {
+    assert(invariant(base, classWorld.isInstantiated(base),
+        message: "Cannot create extact type mask for uninstantiated class"));
+    return new FlatTypeMask.nonNullExact(base);
+  }
+
+  factory TypeMask.nonNullExactOrEmpty(ClassElement base,
+      ClassWorld classWorld) {
+    if (classWorld.isInstantiated(base)) {
+      return new FlatTypeMask.nonNullExact(base);
+    }
+    return const TypeMask.nonNullEmpty();
+  }
 
   factory TypeMask.nonNullSubclass(ClassElement base, ClassWorld classWorld) {
     if (classWorld.hasAnySubclass(base)) {
       return new FlatTypeMask.nonNullSubclass(base);
     } else {
-      return new FlatTypeMask.nonNullExact(base);
+      return new TypeMask.nonNullExactOrEmpty(base, classWorld);
     }
   }
 
@@ -62,7 +81,7 @@
     if (classWorld.hasAnySubtype(base)) {
       return new FlatTypeMask.nonNullSubtype(base);
     } else {
-      return new FlatTypeMask.nonNullExact(base);
+      return new TypeMask.nonNullExactOrEmpty(base, classWorld);
     }
   }
 
@@ -85,12 +104,14 @@
    * Checks whether this mask uses the smallest possible representation for
    * its types. Currently, we normalize subtype and subclass to exact if no
    * subtypes or subclasses are present and subtype to subclass if only
-   * subclasses exist.
+   * subclasses exist. We also normalize exact to empty if the corresponding
+   * baseclass was never instantiated.
    */
   static bool isNormalized(TypeMask mask, ClassWorld classWorld) {
     mask = nonForwardingMask(mask);
     if (mask is FlatTypeMask) {
-      if (mask.isExact || mask.isEmpty) return true;
+      if (mask.isEmpty) return true;
+      if (mask.isExact) return classWorld.isInstantiated(mask.base);
       if (mask.isSubclass) return classWorld.hasAnySubclass(mask.base);
       assert(mask.isSubtype);
       return classWorld.hasAnySubtype(mask.base) &&
diff --git a/sdk/lib/_internal/compiler/implementation/types/types.dart b/sdk/lib/_internal/compiler/implementation/types/types.dart
index 55e62bd..ec1d4d6 100644
--- a/sdk/lib/_internal/compiler/implementation/types/types.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/types.dart
@@ -111,7 +111,7 @@
   TypeMask get uint31Type {
     if (uint31TypeCache == null) {
       uint31TypeCache = new TypeMask.nonNullExact(
-          compiler.backend.uint31Implementation);
+          compiler.backend.uint31Implementation, compiler.world);
     }
     return uint31TypeCache;
   }
@@ -127,7 +127,7 @@
   TypeMask get doubleType {
     if (doubleTypeCache == null) {
       doubleTypeCache = new TypeMask.nonNullExact(
-          compiler.backend.doubleImplementation);
+          compiler.backend.doubleImplementation, compiler.world);
     }
     return doubleTypeCache;
   }
@@ -143,7 +143,7 @@
   TypeMask get boolType {
     if (boolTypeCache == null) {
       boolTypeCache = new TypeMask.nonNullExact(
-          compiler.backend.boolImplementation);
+          compiler.backend.boolImplementation, compiler.world);
     }
     return boolTypeCache;
   }
@@ -159,7 +159,7 @@
   TypeMask get listType {
     if (listTypeCache == null) {
       listTypeCache = new TypeMask.nonNullExact(
-          compiler.backend.listImplementation);
+          compiler.backend.listImplementation, compiler.world);
     }
     return listTypeCache;
   }
@@ -167,7 +167,7 @@
   TypeMask get constListType {
     if (constListTypeCache == null) {
       constListTypeCache = new TypeMask.nonNullExact(
-          compiler.backend.constListImplementation);
+          compiler.backend.constListImplementation, compiler.world);
     }
     return constListTypeCache;
   }
@@ -175,7 +175,7 @@
   TypeMask get fixedListType {
     if (fixedListTypeCache == null) {
       fixedListTypeCache = new TypeMask.nonNullExact(
-          compiler.backend.fixedListImplementation);
+          compiler.backend.fixedListImplementation, compiler.world);
     }
     return fixedListTypeCache;
   }
@@ -183,7 +183,7 @@
   TypeMask get growableListType {
     if (growableListTypeCache == null) {
       growableListTypeCache = new TypeMask.nonNullExact(
-          compiler.backend.growableListImplementation);
+          compiler.backend.growableListImplementation, compiler.world);
     }
     return growableListTypeCache;
   }
@@ -207,7 +207,7 @@
   TypeMask get stringType {
     if (stringTypeCache == null) {
       stringTypeCache = new TypeMask.nonNullExact(
-          compiler.backend.stringImplementation);
+          compiler.backend.stringImplementation, compiler.world);
     }
     return stringTypeCache;
   }
@@ -215,7 +215,7 @@
   TypeMask get typeType {
     if (typeTypeCache == null) {
       typeTypeCache = new TypeMask.nonNullExact(
-          compiler.backend.typeImplementation);
+          compiler.backend.typeImplementation, compiler.world);
     }
     return typeTypeCache;
   }
diff --git a/sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart b/sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart
index c67c254c..083cf7f 100644
--- a/sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart
@@ -50,7 +50,7 @@
         for (int i = 0; i < disjoint.length; i++) {
           FlatTypeMask current = disjoint[i];
           if (current == null) continue;
-          TypeMask newMask = mask.union(current, classWorld);
+          TypeMask newMask = flatMask.union(current, classWorld);
           // If we have found a disjoint union, continue iterating.
           if (newMask.isUnion) continue;
           covered = true;
@@ -63,7 +63,7 @@
           // [newMask] may contain different information than [mask],
           // like nullability.
           disjoint[i] = newMask;
-          mask = newMask;
+          flatMask = newMask;
 
           if (inListIndex != -1) {
             // If the mask was already covered, we remove the previous
@@ -77,7 +77,7 @@
         }
         // If none of the masks in [disjoint] covers [mask], we just
         // add [mask] to the list.
-        if (!covered) disjoint.add(mask);
+        if (!covered) disjoint.add(flatMask);
       }
     }
   }
diff --git a/sdk/lib/_internal/compiler/implementation/universe/universe.dart b/sdk/lib/_internal/compiler/implementation/universe/universe.dart
index 63c539d..896233c 100644
--- a/sdk/lib/_internal/compiler/implementation/universe/universe.dart
+++ b/sdk/lib/_internal/compiler/implementation/universe/universe.dart
@@ -662,7 +662,8 @@
 
   factory TypedSelector.exact(
       ClassElement base, Selector selector, World world)
-          => new TypedSelector(new TypeMask.exact(base), selector, world);
+          => new TypedSelector(new TypeMask.exact(base, world), selector,
+              world);
 
   factory TypedSelector.subclass(
       ClassElement base, Selector selector, World world)
diff --git a/sdk/lib/_internal/compiler/implementation/use_unused_api.dart b/sdk/lib/_internal/compiler/implementation/use_unused_api.dart
index d5c2d43..5a7de69 100644
--- a/sdk/lib/_internal/compiler/implementation/use_unused_api.dart
+++ b/sdk/lib/_internal/compiler/implementation/use_unused_api.dart
@@ -20,6 +20,8 @@
 
 import 'elements/elements.dart' as elements;
 
+import 'elements/modelx.dart' as modelx;
+
 import 'elements/visitor.dart' as elements_visitor;
 
 import 'js/js.dart' as js;
@@ -55,6 +57,7 @@
   useNode(null);
   useUtil(null);
   useSetlet(null);
+  useImmutableEmptySet(null);
   useElementVisitor(new ElementVisitor());
   useJs(new js.Program(null));
   useJs(new js.Blob(null));
@@ -65,8 +68,8 @@
   useSsa(null);
   useCodeBuffer(null);
   usedByTests();
-  useElements(null, null);
-  useIr(null, null);
+  useElements(null, null, null);
+  useIr(null, null, null);
   useCompiler(null);
 }
 
@@ -130,6 +133,11 @@
 
 void useSetlet(util.Setlet setlet) {
   setlet.difference(setlet);
+  setlet.retainWhere(null);
+}
+
+void useImmutableEmptySet(util.ImmutableEmptySet set) {
+  set.retainWhere(null);
 }
 
 void useElementVisitor(ElementVisitor visitor) {
@@ -205,14 +213,16 @@
   sourceFileProvider.readStringFromUri(null);
 }
 
-useElements(elements.ClassElement e, elements.Name n) {
+useElements(elements.ClassElement e, elements.Name n, modelx.FieldElementX f) {
   e.lookupClassMember(null);
   e.lookupInterfaceMember(null);
   n.isAccessibleFrom(null);
+  f.reuseElement();
 }
 
 useIr(cps_ir_nodes_sexpr.SExpressionStringifier stringifier,
-      ir_builder.IrBuilderTask task) {
+      ir_builder.IrBuilderTask task,
+      ir_builder.IrBuilder builder) {
   new cps_ir_nodes_sexpr.SExpressionStringifier();
   stringifier
     ..newContinuationName()
@@ -229,6 +239,8 @@
   task
     ..hasIr(null)
     ..getIr(null);
+  builder
+    ..buildIntegerLiteral(null);
 }
 
 useCompiler(dart2jslib.Compiler compiler) {
diff --git a/sdk/lib/_internal/compiler/implementation/util/emptyset.dart b/sdk/lib/_internal/compiler/implementation/util/emptyset.dart
new file mode 100644
index 0000000..d70376f
--- /dev/null
+++ b/sdk/lib/_internal/compiler/implementation/util/emptyset.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2014, 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 dart2js.util.emptyset;
+
+import 'dart:collection' show IterableBase;
+
+class ImmutableEmptySet<E> extends IterableBase<E> implements Set<E> {
+  const ImmutableEmptySet();
+
+  get iterator => const _EmptySetIterator();
+  int get length => 0;
+  bool get isEmpty => true;
+
+  get _immutableError => throw new UnsupportedError("EmptySet is immutable");
+
+  bool add (E element) => _immutableError;
+  void addAll(Iterable<E> elements) => _immutableError;
+
+  E lookup(E element) => null;
+  bool remove(E element) => false;
+  void removeAll(Iterable<E> elements) {}
+  void removeWhere(bool test(E element)) {}
+  void retainAll(Iterable<E> elements) {}
+  void retainWhere(bool test(E element)) {}
+  void forEach(void action(E element)) {}
+  void clear() {}
+
+  bool contains(E element) => false;
+  bool containsAll(Iterable<E> other) => other.isEmpty;
+
+  Set<E> union(Set<E> other) => new Set.from(other);
+  Set<E> intersection(Set<E> other) => this;
+  Set<E> difference(Set<E> other) => this;
+  Set<E> toSet() => new Set();
+}
+
+class _EmptySetIterator<E> implements Iterator<E> {
+  const _EmptySetIterator();
+
+  E get current => null;
+  bool moveNext() => false;
+}
diff --git a/sdk/lib/_internal/compiler/implementation/util/util.dart b/sdk/lib/_internal/compiler/implementation/util/util.dart
index 535b8b7..7c75819 100644
--- a/sdk/lib/_internal/compiler/implementation/util/util.dart
+++ b/sdk/lib/_internal/compiler/implementation/util/util.dart
@@ -4,12 +4,12 @@
 
 library dart2js.util;
 
-import 'dart:collection';
 import 'util_implementation.dart';
 import 'characters.dart';
 
 export 'setlet.dart';
 export 'maplet.dart';
+export 'emptyset.dart';
 
 part 'indentation.dart';
 part 'link.dart';
diff --git a/sdk/lib/_internal/compiler/implementation/warnings.dart b/sdk/lib/_internal/compiler/implementation/warnings.dart
index 6fc0277..8b1c8a5 100644
--- a/sdk/lib/_internal/compiler/implementation/warnings.dart
+++ b/sdk/lib/_internal/compiler/implementation/warnings.dart
@@ -1185,6 +1185,12 @@
           howToFix:
             "Try adding a prefix to the import.");
 
+  static const MessageKind DEFERRED_OLD_SYNTAX =
+      const MessageKind(
+          "The DeferredLibrary annotation is obsolete.",
+          howToFix:
+            "Use the \"import 'lib.dart' deferred as prefix\" syntax instead.");
+
   static const MessageKind DEFERRED_LIBRARY_DUPLICATE_PREFIX =
       const MessageKind(
           "The prefix of this deferred import is not unique.",
@@ -1959,7 +1965,7 @@
   static const MessageKind PREAMBLE = const MessageKind(
     "When run on the command-line, the compiled output might"
     " require a preamble file located in:\n"
-    "  <sdk>/lib/_internal/lib/preambles.");
+    "  <sdk>/lib/_internal/compiler/js_lib/preambles.");
 
   //////////////////////////////////////////////////////////////////////////////
   // Patch errors start.
diff --git a/sdk/lib/_internal/lib/annotations.dart b/sdk/lib/_internal/compiler/js_lib/annotations.dart
similarity index 100%
rename from sdk/lib/_internal/lib/annotations.dart
rename to sdk/lib/_internal/compiler/js_lib/annotations.dart
diff --git a/sdk/lib/_internal/compiler/js_lib/async_patch.dart b/sdk/lib/_internal/compiler/js_lib/async_patch.dart
new file mode 100644
index 0000000..e0813ad
--- /dev/null
+++ b/sdk/lib/_internal/compiler/js_lib/async_patch.dart
@@ -0,0 +1,125 @@
+// 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.
+
+// Patch file for the dart:async library.
+
+import 'dart:_js_helper' show
+    patch,
+    Primitives,
+    convertDartClosureToJS,
+    requiresPreamble;
+import 'dart:_isolate_helper' show
+    IsolateNatives,
+    TimerImpl,
+    leaveJsAsync,
+    enterJsAsync,
+    isWorker;
+
+import 'dart:_foreign_helper' show JS;
+
+@patch
+class _AsyncRun {
+  @patch
+  static void _scheduleImmediate(void callback()) {
+    scheduleImmediateClosure(callback);
+  }
+
+  // Lazily initialized.
+  static final Function scheduleImmediateClosure =
+      _initializeScheduleImmediate();
+
+  static Function _initializeScheduleImmediate() {
+    requiresPreamble();
+    if (JS('', 'self.scheduleImmediate') != null) {
+      return _scheduleImmediateJsOverride;
+    }
+    if (JS('', 'self.MutationObserver') != null &&
+        JS('', 'self.document') != null) {
+      // Use mutationObservers.
+      var div = JS('', 'self.document.createElement("div")');
+      var span = JS('', 'self.document.createElement("span")');
+      var storedCallback;
+
+      internalCallback(_) {
+        leaveJsAsync();
+        var f = storedCallback;
+        storedCallback = null;
+        f();
+      };
+
+      var observer = JS('', 'new self.MutationObserver(#)',
+          convertDartClosureToJS(internalCallback, 1));
+      JS('', '#.observe(#, { childList: true })',
+          observer, div);
+
+      return (void callback()) {
+        assert(storedCallback == null);
+        enterJsAsync();
+        storedCallback = callback;
+        // Because of a broken shadow-dom polyfill we have to change the
+        // children instead a cheap property.
+        // See https://github.com/Polymer/ShadowDOM/issues/468
+        JS('', '#.firstChild ? #.removeChild(#): #.appendChild(#)',
+            div, div, span, div, span);
+      };
+    } else if (JS('', 'self.setImmediate') != null) {
+      return _scheduleImmediateWithSetImmediate;
+    }
+    // TODO(20055): We should use DOM promises when available.
+    return _scheduleImmediateWithTimer;
+  }
+
+  static void _scheduleImmediateJsOverride(void callback()) {
+    internalCallback() {
+      leaveJsAsync();
+      callback();
+    };
+    enterJsAsync();
+    JS('void', 'self.scheduleImmediate(#)',
+       convertDartClosureToJS(internalCallback, 0));
+  }
+
+  static void _scheduleImmediateWithSetImmediate(void callback()) {
+    internalCallback() {
+      leaveJsAsync();
+      callback();
+    };
+    enterJsAsync();
+    JS('void', 'self.setImmediate(#)',
+       convertDartClosureToJS(internalCallback, 0));
+  }
+
+  static void _scheduleImmediateWithTimer(void callback()) {
+    Timer._createTimer(Duration.ZERO, callback);
+  }
+}
+
+@patch
+class DeferredLibrary {
+  @patch
+  Future<Null> load() {
+    throw 'DeferredLibrary not supported. '
+          'please use the `import "lib.dart" deferred as lib` syntax.';
+  }
+}
+
+@patch
+class Timer {
+  @patch
+  static Timer _createTimer(Duration duration, void callback()) {
+    int milliseconds = duration.inMilliseconds;
+    if (milliseconds < 0) milliseconds = 0;
+    return new TimerImpl(milliseconds, callback);
+  }
+
+  @patch
+  static Timer _createPeriodicTimer(Duration duration,
+                             void callback(Timer timer)) {
+    int milliseconds = duration.inMilliseconds;
+    if (milliseconds < 0) milliseconds = 0;
+    return new TimerImpl.periodic(milliseconds, callback);
+  }
+}
+
+bool get _hasDocument => JS('String', 'typeof document') == 'object';
diff --git a/sdk/lib/_internal/lib/collection_patch.dart b/sdk/lib/_internal/compiler/js_lib/collection_patch.dart
similarity index 100%
rename from sdk/lib/_internal/lib/collection_patch.dart
rename to sdk/lib/_internal/compiler/js_lib/collection_patch.dart
diff --git a/sdk/lib/_internal/lib/constant_map.dart b/sdk/lib/_internal/compiler/js_lib/constant_map.dart
similarity index 100%
rename from sdk/lib/_internal/lib/constant_map.dart
rename to sdk/lib/_internal/compiler/js_lib/constant_map.dart
diff --git a/sdk/lib/_internal/lib/convert_patch.dart b/sdk/lib/_internal/compiler/js_lib/convert_patch.dart
similarity index 100%
rename from sdk/lib/_internal/lib/convert_patch.dart
rename to sdk/lib/_internal/compiler/js_lib/convert_patch.dart
diff --git a/sdk/lib/_internal/lib/core_patch.dart b/sdk/lib/_internal/compiler/js_lib/core_patch.dart
similarity index 100%
rename from sdk/lib/_internal/lib/core_patch.dart
rename to sdk/lib/_internal/compiler/js_lib/core_patch.dart
diff --git a/sdk/lib/_internal/compiler/js_lib/foreign_helper.dart b/sdk/lib/_internal/compiler/js_lib/foreign_helper.dart
new file mode 100644
index 0000000..c151154
--- /dev/null
+++ b/sdk/lib/_internal/compiler/js_lib/foreign_helper.dart
@@ -0,0 +1,293 @@
+// 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.
+
+library _foreign_helper;
+
+/**
+ * Emits a JavaScript code fragment parameterized by arguments.
+ *
+ * Hash characters `#` in the [codeTemplate] are replaced in left-to-right order
+ * with expressions that contain the values of, or evaluate to, the arguments.
+ * The number of hash marks must match the number or arguments.  Although
+ * declared with arguments [arg0] through [arg2], the form actually has no limit
+ * on the number of arguments.
+ *
+ * The [typeDescription] argument is interpreted as a description of the
+ * behavior of the JavaScript code.  Currently it describes the types that may
+ * be returned by the expression, with the additional behavior that the returned
+ * values may be fresh instances of the types.  The type information must be
+ * correct as it is trusted by the compiler in optimizations, and it must be
+ * precise as possible since it is used for native live type analysis to
+ * tree-shake large parts of the DOM libraries.  If poorly written, the
+ * [typeDescription] will cause unnecessarily bloated programs.  (You can check
+ * for this by compiling with `--verbose`; there is an info message describing
+ * the number of native (DOM) types that can be removed, which usually should be
+ * greater than zero.)
+ *
+ * The [typeDescription] is a [String] which contains a union of types separated
+ * by vertical bar `|` symbols, e.g.  `"num|String"` describes the union of
+ * numbers and Strings.  There is no type in Dart that is this precise.  The
+ * Dart alternative would be `Object` or `dynamic`, but these types imply that
+ * the JS-code might also be creating instances of all the DOM types.  If `null`
+ * is possible, it must be specified explicitly, e.g. `"String|Null"`.
+ * [typeDescription] has several extensions to help describe the behavior more
+ * accurately.  In addition to the union type already described:
+ *
+ *  + `=Object` is a plain JavaScript object.  Some DOM methods return instances
+ *     that have no corresponing Dart type (e.g. cross-frame documents),
+ *     `=Object` can be used to describe these untyped' values.
+ *
+ *  + `var` (or empty string).  If the entire [typeDescription] is `var` (or
+ *    empty string) then the type is `dynamic` but the code is known to not
+ *    create any instances.
+ *
+ * Examples:
+ *
+ *     // Parent window might be an opaque cross-frame window.
+ *     var thing = JS('=Object|Window', '#.parent', myWindow);
+ *
+ * Guidelines:
+ *
+ *  + Do not use any parameter, local, method or field names in the
+ *    [codeTemplate].  These names are all subject to arbitrary renaming by the
+ *    compiler.  Pass the values in via `#` substition, and test with the
+ *    `--minify` dart2js command-line option.
+ *
+ *  + The substituted expressions are values, not locations.
+ *
+ *        JS('void', '# += "x"', this.field);
+ *
+ *    `this.field` might not be a substituted as a reference to the field.  The
+ *    generated code might accidentally work as intended, but it also might be
+ *
+ *        var t1 = this.field;
+ *        t1 += "x";
+ *
+ *    or
+ *
+ *        this.get$field() += "x";
+ *
+ *    The remedy in this case is to expand the `+=` operator, leaving all
+ *    references to the Dart field as Dart code:
+ *
+ *        this.field = JS('String', '# + "x"', this.field);
+ *
+ *  + Never use `#` in function bodies.
+ *
+ *    This is a variation on the previous guideline.  Since `#` is replaced with
+ *    an *expression* and the expression is only valid in the immediate context,
+ *    `#` should never appear in a function body.  Doing so might defer the
+ *    evaluation of the expression, and its side effects, until the function is
+ *    called.
+ *
+ *    For example,
+ *
+ *        var value = foo();
+ *        var f = JS('', 'function(){return #}', value)
+ *
+ *    might result in no immediate call to `foo` and a call to `foo` on every
+ *    call to the JavaScript function bound to `f`.  This is better:
+ *
+ *        var f = JS('',
+ *            '(function(val) { return function(){return val}; })(#)', value);
+ *
+ *    Since `#` occurs in the immediately evaluated expression, the expression
+ *    is immediately evaluated and bound to `val` in the immediate call.
+ *
+ *
+ * Additional notes.
+ *
+ * In the future we may extend [typeDescription] to include other aspects of the
+ * behavior, for example, separating the returned types from the instantiated
+ * types, or including effects to allow the compiler to perform more
+ * optimizations around the code.  This might be an extension of [JS] or a new
+ * function similar to [JS] with additional arguments for the new information.
+ */
+// Add additional optional arguments if needed. The method is treated internally
+// as a variable argument method.
+JS(String typeDescription, String codeTemplate,
+    [arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11])
+{}
+
+/**
+ * Returns the isolate in which this code is running.
+ */
+IsolateContext JS_CURRENT_ISOLATE_CONTEXT() {}
+
+abstract class IsolateContext {
+  /// Holds a (native) JavaScript instance of Isolate, see
+  /// finishIsolateConstructorFunction in emitter.dart.
+  get isolateStatics;
+}
+
+/**
+ * Invokes [function] in the context of [isolate].
+ */
+JS_CALL_IN_ISOLATE(isolate, Function function) {}
+
+/**
+ * Converts the Dart closure [function] into a JavaScript closure.
+ *
+ * Warning: This is no different from [RAW_DART_FUNCTION_REF] which means care
+ * must be taken to store the current isolate.
+ */
+DART_CLOSURE_TO_JS(Function function) {}
+
+/**
+ * Returns a raw reference to the JavaScript function which implements
+ * [function].
+ *
+ * Warning: this is dangerous, you should probably use
+ * [DART_CLOSURE_TO_JS] instead. The returned object is not a valid
+ * Dart closure, does not store the isolate context or arity.
+ *
+ * A valid example of where this can be used is as the second argument
+ * to V8's Error.captureStackTrace. See
+ * https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi.
+ */
+RAW_DART_FUNCTION_REF(Function function) {}
+
+/**
+ * Sets the current isolate to [isolate].
+ */
+void JS_SET_CURRENT_ISOLATE(isolate) {}
+
+/**
+ * Creates an isolate and returns it.
+ */
+JS_CREATE_ISOLATE() {}
+
+/**
+ * Returns the JavaScript constructor function for Dart's Object class.
+ * This can be used for type tests, as in
+ *
+ *     if (JS('bool', '# instanceof #', obj, JS_DART_OBJECT_CONSTRUCTOR()))
+ *       ...
+ */
+JS_DART_OBJECT_CONSTRUCTOR() {}
+
+/**
+ * Returns the interceptor for class [type].  The interceptor is the type's
+ * constructor's `prototype` property.  [type] will typically be the class, not
+ * an interface, e.g. `JS_INTERCEPTOR_CONSTANT(JSInt)`, not
+ * `JS_INTERCEPTOR_CONSTANT(int)`.
+ */
+JS_INTERCEPTOR_CONSTANT(Type type) {}
+
+/**
+ * Returns the prefix used for generated is checks on classes.
+ */
+String JS_OPERATOR_IS_PREFIX() {}
+
+/**
+ * Returns the prefix used for generated type argument substitutions on classes.
+ */
+String JS_OPERATOR_AS_PREFIX() {}
+
+/// Returns the name of the class `Object` in the generated code.
+String JS_OBJECT_CLASS_NAME() {}
+
+/// Returns the name of the class `Null` in the generated code.
+String JS_NULL_CLASS_NAME() {}
+
+/// Returns the name of the class `Function` in the generated code.
+String JS_FUNCTION_CLASS_NAME() {}
+
+/**
+ * Returns the field name used for determining if an object or its
+ * interceptor has JavaScript indexing behavior.
+ */
+String JS_IS_INDEXABLE_FIELD_NAME() {}
+
+/**
+ * Returns the object corresponding to Namer.CURRENT_ISOLATE.
+ */
+JS_CURRENT_ISOLATE() {}
+
+/// Returns the name used for generated function types on classes and methods.
+String JS_SIGNATURE_NAME() {}
+
+/// Returns the name used to tag function type representations in JavaScript.
+String JS_FUNCTION_TYPE_TAG() {}
+
+/**
+ * Returns the name used to tag void return in function type representations
+ * in JavaScript.
+ */
+String JS_FUNCTION_TYPE_VOID_RETURN_TAG() {}
+
+/**
+ * Returns the name used to tag return types in function type representations
+ * in JavaScript.
+ */
+String JS_FUNCTION_TYPE_RETURN_TYPE_TAG() {}
+
+/**
+ * Returns the name used to tag required parameters in function type
+ * representations in JavaScript.
+ */
+String JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG() {}
+
+/**
+ * Returns the name used to tag optional parameters in function type
+ * representations in JavaScript.
+ */
+String JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG() {}
+
+/**
+ * Returns the name used to tag named parameters in function type
+ * representations in JavaScript.
+ */
+String JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG() {}
+
+/// Returns the JS name for [name] from the Namer.
+String JS_GET_NAME(String name) {}
+
+/// Reads an embedded global.
+///
+/// The [name] should be a constant defined in the `_embedded_names` library.
+JS_EMBEDDED_GLOBAL(String typeDescription, String name) {}
+
+/// Returns the state of a flag that is determined by the state of the compiler
+/// when the program has been analyzed.
+bool JS_GET_FLAG(String name) {}
+
+/**
+ * Pretend [code] is executed.  Generates no executable code.  This is used to
+ * model effects at some other point in external code.  For example, the
+ * following models an assignment to foo with an unknown value.
+ *
+ *     var foo;
+ *
+ *     main() {
+ *       JS_EFFECT((_){ foo = _; })
+ *     }
+ *
+ * TODO(sra): Replace this hack with something to mark the volatile or
+ * externally initialized elements.
+ */
+void JS_EFFECT(Function code) { code(null); }
+
+/**
+ * Use this class for creating constants that hold JavaScript code.
+ * For example:
+ *
+ * const constant = JS_CONST('typeof window != "undefined");
+ *
+ * This code will generate:
+ * $.JS_CONST_1 = typeof window != "undefined";
+ */
+class JS_CONST {
+  final String code;
+  const JS_CONST(this.code);
+}
+
+/**
+ * JavaScript string concatenation. Inputs must be Strings.  Corresponds to the
+ * HStringConcat SSA instruction and may be constant-folded.
+ */
+String JS_STRING_CONCAT(String a, String b) {
+  // This body is unused, only here for type analysis.
+  return JS('String', '# + #', a, b);
+}
diff --git a/sdk/lib/_internal/compiler/js_lib/interceptors.dart b/sdk/lib/_internal/compiler/js_lib/interceptors.dart
new file mode 100644
index 0000000..ea4d901
--- /dev/null
+++ b/sdk/lib/_internal/compiler/js_lib/interceptors.dart
@@ -0,0 +1,411 @@
+// 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.
+
+library _interceptors;
+
+import 'shared/embedded_names.dart' show
+    DISPATCH_PROPERTY_NAME;
+
+import 'dart:collection';
+import 'dart:_internal' hide Symbol;
+import "dart:_internal" as _symbol_dev show Symbol;
+import 'dart:_js_helper' show allMatchesInStringUnchecked,
+                              Null,
+                              JSSyntaxRegExp,
+                              Primitives,
+                              checkInt,
+                              checkNull,
+                              checkNum,
+                              checkString,
+                              defineProperty,
+                              getRuntimeType,
+                              initNativeDispatch,
+                              initNativeDispatchFlag,
+                              regExpGetNative,
+                              stringContainsUnchecked,
+                              stringLastIndexOfUnchecked,
+                              stringReplaceAllFuncUnchecked,
+                              stringReplaceAllUnchecked,
+                              stringReplaceFirstUnchecked,
+                              lookupAndCacheInterceptor,
+                              lookupDispatchRecord,
+                              StringMatch,
+                              firstMatchAfter,
+                              NoInline;
+import 'dart:_foreign_helper' show
+    JS,
+    JS_EFFECT,
+    JS_EMBEDDED_GLOBAL,
+    JS_INTERCEPTOR_CONSTANT,
+    JS_STRING_CONCAT;
+import 'dart:math' show Random;
+
+part 'js_array.dart';
+part 'js_number.dart';
+part 'js_string.dart';
+
+String _symbolToString(Symbol symbol) => _symbol_dev.Symbol.getName(symbol);
+
+_symbolMapToStringMap(Map<Symbol, dynamic> map) {
+  if (map == null) return null;
+  var result = new Map<String, dynamic>();
+  map.forEach((Symbol key, value) {
+    result[_symbolToString(key)] = value;
+  });
+  return result;
+}
+
+/**
+ * Get the interceptor for [object]. Called by the compiler when it needs
+ * to emit a call to an intercepted method, that is a method that is
+ * defined in an interceptor class.
+ */
+getInterceptor(object) {
+  // This is a magic method: the compiler does specialization of it
+  // depending on the uses of intercepted methods and instantiated
+  // primitive types.
+
+  // The [JS] call prevents the type analyzer from making assumptions about the
+  // return type.
+  return JS('', 'void 0');
+}
+
+getDispatchProperty(object) {
+  return JS('', '#[#]',
+      object, JS_EMBEDDED_GLOBAL('String', DISPATCH_PROPERTY_NAME));
+}
+
+setDispatchProperty(object, value) {
+  defineProperty(object,
+                JS_EMBEDDED_GLOBAL('String', DISPATCH_PROPERTY_NAME),
+                value);
+}
+
+// Avoid inlining this method because inlining gives us multiple allocation
+// points for records which is bad because it leads to polymorphic access.
+@NoInline()
+makeDispatchRecord(interceptor, proto, extension, indexability) {
+  // Dispatch records are stored in the prototype chain, and in some cases, on
+  // instances.
+  //
+  // The record layout and field usage is designed to minimize the number of
+  // operations on the common paths.
+  //
+  // [interceptor] is the interceptor - a holder of methods for the object,
+  // i.e. the prototype of the interceptor class.
+  //
+  // [proto] is usually the prototype, used to check that the dispatch record
+  // matches the object and is not the dispatch record of a superclass.  Other
+  // values:
+  //  - `false` for leaf classes that need no check.
+  //  - `true` for Dart classes where the object is its own interceptor (unused)
+  //  - a function used to continue matching.
+  //
+  // [extension] is used for irregular cases.
+  //
+  // [indexability] is used to cache whether or not the object
+  // implements JavaScriptIndexingBehavior.
+  //
+  //     proto  interceptor extension action
+  //     -----  ----------- --------- ------
+  //     false  I                     use interceptor I
+  //     true   -                     use object
+  //     P      I                     if object's prototype is P, use I
+  //     F      -           P         if object's prototype is P, call F
+
+  return JS('', '{i: #, p: #, e: #, x: #}',
+            interceptor, proto, extension, indexability);
+}
+
+dispatchRecordInterceptor(record) => JS('', '#.i', record);
+dispatchRecordProto(record) => JS('', '#.p', record);
+dispatchRecordExtension(record) => JS('', '#.e', record);
+dispatchRecordIndexability(record) => JS('bool|Null', '#.x', record);
+
+/**
+ * Returns the interceptor for a native class instance. Used by
+ * [getInterceptor].
+ */
+getNativeInterceptor(object) {
+  var record = getDispatchProperty(object);
+
+  if (record == null) {
+    if (initNativeDispatchFlag == null) {
+      initNativeDispatch();
+      record = getDispatchProperty(object);
+    }
+  }
+
+  if (record != null) {
+    var proto = dispatchRecordProto(record);
+    if (false == proto) return dispatchRecordInterceptor(record);
+    if (true == proto) return object;
+    var objectProto = JS('', 'Object.getPrototypeOf(#)', object);
+    if (JS('bool', '# === #', proto, objectProto)) {
+      return dispatchRecordInterceptor(record);
+    }
+
+    var extension = dispatchRecordExtension(record);
+    if (JS('bool', '# === #', extension, objectProto)) {
+      // TODO(sra): The discriminator returns a tag.  The tag is an uncached or
+      // instance-cached tag, defaulting to instance-cached if caching
+      // unspecified.
+      var discriminatedTag = JS('', '(#)(#, #)', proto, object, record);
+      throw new UnimplementedError('Return interceptor for $discriminatedTag');
+    }
+  }
+
+  var interceptor = lookupAndCacheInterceptor(object);
+  if (interceptor == null) {
+    // JavaScript Objects created via object literals and `Object.create(null)`
+    // are 'plain' Objects.  This test could be simplified and the dispatch path
+    // be faster if Object.prototype was pre-patched with a non-leaf dispatch
+    // record.
+    var proto = JS('', 'Object.getPrototypeOf(#)', object);
+    if (JS('bool', '# == null || # === Object.prototype', proto, proto)) {
+      return JS_INTERCEPTOR_CONSTANT(PlainJavaScriptObject);
+    } else {
+      return JS_INTERCEPTOR_CONSTANT(UnknownJavaScriptObject);
+    }
+  }
+
+  return interceptor;
+}
+
+/**
+ * If [JSInvocationMirror._invokeOn] is being used, this variable
+ * contains a JavaScript array with the names of methods that are
+ * intercepted.
+ */
+var interceptedNames;
+
+
+/**
+ * Data structure used to map a [Type] to the [Interceptor] and constructors for
+ * that type.  It is JavaScript array of 3N entries of adjacent slots containing
+ * a [Type], followed by an [Interceptor] class for the type, followed by a
+ * JavaScript object map for the constructors.
+ *
+ * The value of this variable is set by the compiler and contains only types
+ * that are user extensions of native classes where the type occurs as a
+ * constant in the program.
+ *
+ * The compiler, in CustomElementsAnalysis, assumes that [mapTypeToInterceptor]
+ * is accessed only by code that also calls [findIndexForWebComponentType].  If
+ * this assumption is invalidated, the compiler will have to be updated.
+ */
+// TODO(sra): Mark this as initialized to a constant with unknown value.
+var mapTypeToInterceptor;
+
+int findIndexForNativeSubclassType(Type type) {
+  if (JS('bool', '# == null', mapTypeToInterceptor)) return null;
+  List map = JS('JSFixedArray', '#', mapTypeToInterceptor);
+  for (int i = 0; i + 1 < map.length; i += 3) {
+    if (type == map[i]) {
+      return i;
+    }
+  }
+  return null;
+}
+
+findInterceptorConstructorForType(Type type) {
+  var index = findIndexForNativeSubclassType(type);
+  if (index == null) return null;
+  List map = JS('JSFixedArray', '#', mapTypeToInterceptor);
+  return map[index + 1];
+}
+
+/**
+ * Returns a JavaScript function that runs the constructor on its argument, or
+ * `null` if there is no such constructor.
+ *
+ * The returned function takes one argument, the web component object.
+ */
+findConstructorForNativeSubclassType(Type type, String name) {
+  var index = findIndexForNativeSubclassType(type);
+  if (index == null) return null;
+  List map = JS('JSFixedArray', '#', mapTypeToInterceptor);
+  var constructorMap = map[index + 2];
+  var constructorFn = JS('', '#[#]', constructorMap, name);
+  return constructorFn;
+}
+
+findInterceptorForType(Type type) {
+  var constructor = findInterceptorConstructorForType(type);
+  if (constructor == null) return null;
+  return JS('', '#.prototype', constructor);
+}
+
+/**
+ * The base interceptor class.
+ *
+ * The code `r.foo(a)` is compiled to `getInterceptor(r).foo$1(r, a)`.  The
+ * value returned by [getInterceptor] holds the methods separately from the
+ * state of the instance.  The compiler converts the methods on an interceptor
+ * to take the Dart `this` argument as an explicit `receiver` argument.  The
+ * JavaScript `this` parameter is bound to the interceptor.
+ *
+ * In order to have uniform call sites, if a method is defined on an
+ * interceptor, methods of that name on plain unintercepted classes also use the
+ * interceptor calling convention.  The plain classes are _self-interceptors_,
+ * and for them, `getInterceptor(r)` returns `r`.  Methods on plain
+ * unintercepted classes have a redundant `receiver` argument and should ignore
+ * it in favour of `this`.
+ *
+ * In the case of mixins, a method may be placed on both an intercepted class
+ * and an unintercepted class.  In this case, the method must use the `receiver`
+ * parameter.
+ *
+ *
+ * There are various optimizations of the general call pattern.
+ *
+ * When the interceptor can be statically determined, it can be used directly:
+ *
+ *     CONSTANT_INTERCEPTOR.foo$1(r, a)
+ *
+ * If there are only a few classes, [getInterceptor] can be specialized with a
+ * more efficient dispatch:
+ *
+ *     getInterceptor$specialized(r).foo$1(r, a)
+ *
+ * If it can be determined that the receiver is an unintercepted class, it can
+ * be called directly:
+ *
+ *     r.foo$1(r, a)
+ *
+ * If, further, it is known that the call site cannot call a foo that is
+ * mixed-in to a native class, then it is known that the explicit receiver is
+ * ignored, and space-saving dummy value can be passed instead:
+ *
+ *     r.foo$1(0, a)
+ *
+ * This class defines implementations of *all* methods on [Object] so no
+ * interceptor inherits an implementation from [Object].  This enables the
+ * implementations on Object to ignore the explicit receiver argument, which
+ * allows dummy receiver optimization.
+ */
+abstract class Interceptor {
+  const Interceptor();
+
+  bool operator ==(other) => identical(this, other);
+
+  int get hashCode => Primitives.objectHashCode(this);
+
+  String toString() => Primitives.objectToString(this);
+
+  dynamic noSuchMethod(Invocation invocation) {
+    throw new NoSuchMethodError(
+        this,
+        invocation.memberName,
+        invocation.positionalArguments,
+        invocation.namedArguments);
+  }
+
+  Type get runtimeType => getRuntimeType(this);
+}
+
+/**
+ * The interceptor class for [bool].
+ */
+class JSBool extends Interceptor implements bool {
+  const JSBool();
+
+  // Note: if you change this, also change the function [S].
+  String toString() => JS('String', r'String(#)', this);
+
+  // The values here are SMIs, co-prime and differ about half of the bit
+  // positions, including the low bit, so they are different mod 2^k.
+  int get hashCode => this ? (2 * 3 * 23 * 3761) : (269 * 811);
+
+  Type get runtimeType => bool;
+}
+
+/**
+ * The interceptor class for [Null].
+ *
+ * This class defines implementations for *all* methods on [Object] since
+ * the methods on Object assume the receiver is non-null.  This means that
+ * JSNull will always be in the interceptor set for methods defined on Object.
+ */
+class JSNull extends Interceptor implements Null {
+  const JSNull();
+
+  bool operator ==(other) => identical(null, other);
+
+  // Note: if you change this, also change the function [S].
+  String toString() => 'null';
+
+  int get hashCode => 0;
+
+  // The spec guarantees that `null` is the singleton instance of the `Null`
+  // class. In the mirrors library we also have to patch the `type` getter to
+  // special case `null`.
+  Type get runtimeType => Null;
+
+  dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+/**
+ * The supertype for JSString and JSArray. Used by the backend as to
+ * have a type mask that contains the objects that we can use the
+ * native JS [] operator and length on.
+ */
+abstract class JSIndexable {
+  int get length;
+  operator[](int index);
+}
+
+/**
+ * The supertype for JSMutableArray and
+ * JavaScriptIndexingBehavior. Used by the backend to have a type mask
+ * that contains the objects we can use the JS []= operator on.
+ */
+abstract class JSMutableIndexable extends JSIndexable {
+  operator[]=(int index, var value);
+}
+
+/**
+ * The interface implemented by JavaScript objects.  These are methods in
+ * addition to the regular Dart Object methods like [Object.hashCode].
+ *
+ * This is the type that should be exported by a JavaScript interop library.
+ */
+abstract class JSObject {
+}
+
+
+/**
+ * Interceptor base class for JavaScript objects not recognized as some more
+ * specific native type.
+ */
+abstract class JavaScriptObject extends Interceptor implements JSObject {
+  const JavaScriptObject();
+
+  // It would be impolite to stash a property on the object.
+  int get hashCode => 0;
+
+  Type get runtimeType => JSObject;
+}
+
+
+/**
+ * Interceptor for plain JavaScript objects created as JavaScript object
+ * literals or `new Object()`.
+ */
+class PlainJavaScriptObject extends JavaScriptObject {
+  const PlainJavaScriptObject();
+}
+
+
+/**
+ * Interceptor for unclassified JavaScript objects, typically objects with a
+ * non-trivial prototype chain.
+ *
+ * This class also serves as a fallback for unknown JavaScript exceptions.
+ */
+class UnknownJavaScriptObject extends JavaScriptObject {
+  const UnknownJavaScriptObject();
+
+  String toString() => JS('String', 'String(#)', this);
+}
diff --git a/sdk/lib/_internal/lib/internal_patch.dart b/sdk/lib/_internal/compiler/js_lib/internal_patch.dart
similarity index 100%
rename from sdk/lib/_internal/lib/internal_patch.dart
rename to sdk/lib/_internal/compiler/js_lib/internal_patch.dart
diff --git a/sdk/lib/_internal/lib/io_patch.dart b/sdk/lib/_internal/compiler/js_lib/io_patch.dart
similarity index 100%
rename from sdk/lib/_internal/lib/io_patch.dart
rename to sdk/lib/_internal/compiler/js_lib/io_patch.dart
diff --git a/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart b/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart
new file mode 100644
index 0000000..dabbb2e
--- /dev/null
+++ b/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart
@@ -0,0 +1,1822 @@
+// 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.
+
+library _isolate_helper;
+
+import 'shared/embedded_names.dart' show
+    CURRENT_SCRIPT,
+    GLOBAL_FUNCTIONS;
+
+import 'dart:async';
+import 'dart:collection' show Queue, HashMap;
+import 'dart:isolate';
+import 'dart:_js_helper' show
+    Closure,
+    Null,
+    Primitives,
+    convertDartClosureToJS,
+    random64,
+    requiresPreamble;
+import 'dart:_foreign_helper' show DART_CLOSURE_TO_JS,
+                                   JS,
+                                   JS_CREATE_ISOLATE,
+                                   JS_CURRENT_ISOLATE_CONTEXT,
+                                   JS_CURRENT_ISOLATE,
+                                   JS_EMBEDDED_GLOBAL,
+                                   JS_SET_CURRENT_ISOLATE,
+                                   IsolateContext;
+import 'dart:_interceptors' show JSExtendableArray;
+
+/**
+ * Called by the compiler to support switching
+ * between isolates when we get a callback from the DOM.
+ */
+_callInIsolate(_IsolateContext isolate, Function function) {
+  var result = isolate.eval(function);
+  _globalState.topEventLoop.run();
+  return result;
+}
+
+/// Marks entering a JavaScript async operation to keep the worker alive.
+///
+/// To be called by library code before starting an async operation controlled
+/// by the JavaScript event handler.
+///
+/// Also call [leaveJsAsync] in all callback handlers marking the end of that
+/// async operation (also error handlers) so the worker can be released.
+///
+/// These functions only has to be called for code that can be run from a
+/// worker-isolate (so not for general dom operations).
+enterJsAsync() {
+  _globalState.topEventLoop._activeJsAsyncCount++;
+}
+
+/// Marks leaving a javascript async operation.
+///
+/// See [enterJsAsync].
+leaveJsAsync() {
+  _globalState.topEventLoop._activeJsAsyncCount--;
+  assert(_globalState.topEventLoop._activeJsAsyncCount >= 0);
+}
+
+/// Returns true if we are currently in a worker context.
+bool isWorker() => _globalState.isWorker;
+
+/**
+ * Called by the compiler to fetch the current isolate context.
+ */
+_IsolateContext _currentIsolate() => _globalState.currentContext;
+
+/**
+ * Wrapper that takes the dart entry point and runs it within an isolate. The
+ * dart2js compiler will inject a call of the form
+ * [: startRootIsolate(main); :] when it determines that this wrapping
+ * is needed. For single-isolate applications (e.g. hello world), this
+ * call is not emitted.
+ */
+void startRootIsolate(entry, args) {
+  // The dartMainRunner can inject a new arguments array. We pass the arguments
+  // through a "JS", so that the type-inferrer loses track of it.
+  args = JS("", "#", args);
+  if (args == null) args = [];
+  if (args is! List) {
+    throw new ArgumentError("Arguments to main must be a List: $args");
+  }
+  _globalState = new _Manager(entry);
+
+  // Don't start the main loop again, if we are in a worker.
+  if (_globalState.isWorker) return;
+  final rootContext = new _IsolateContext();
+  _globalState.rootContext = rootContext;
+
+  // BUG(5151491): Setting currentContext should not be necessary, but
+  // because closures passed to the DOM as event handlers do not bind their
+  // isolate automatically we try to give them a reasonable context to live in
+  // by having a "default" isolate (the first one created).
+  _globalState.currentContext = rootContext;
+  if (entry is _MainFunctionArgs) {
+    rootContext.eval(() { entry(args); });
+  } else if (entry is _MainFunctionArgsMessage) {
+    rootContext.eval(() { entry(args, null); });
+  } else {
+    rootContext.eval(entry);
+  }
+  _globalState.topEventLoop.run();
+}
+
+/********************************************************
+  Inserted from lib/isolate/dart2js/isolateimpl.dart
+ ********************************************************/
+
+/**
+ * Concepts used here:
+ *
+ * "manager" - A manager contains one or more isolates, schedules their
+ * execution, and performs other plumbing on their behalf.  The isolate
+ * present at the creation of the manager is designated as its "root isolate".
+ * A manager may, for example, be implemented on a web Worker.
+ *
+ * [_Manager] - State present within a manager (exactly once, as a global).
+ *
+ * [_ManagerStub] - A handle held within one manager that allows interaction
+ * with another manager.  A target manager may be addressed by zero or more
+ * [_ManagerStub]s.
+ * TODO(ahe): The _ManagerStub concept is broken.  It was an attempt
+ * to create a common interface between the native Worker class and
+ * _MainManagerStub.
+ */
+
+/**
+ * A native object that is shared across isolates. This object is visible to all
+ * isolates running under the same manager (either UI or background web worker).
+ *
+ * This is code that is intended to 'escape' the isolate boundaries in order to
+ * implement the semantics of isolates in JavaScript. Without this we would have
+ * been forced to implement more code (including the top-level event loop) in
+ * JavaScript itself.
+ */
+// TODO(eub, sigmund): move the "manager" to be entirely in JS.
+// Running any Dart code outside the context of an isolate gives it
+// the chance to break the isolate abstraction.
+_Manager get _globalState => JS("_Manager", "init.globalState");
+
+set _globalState(_Manager val) {
+  JS("void", "init.globalState = #", val);
+}
+
+/** State associated with the current manager. See [globalState]. */
+// TODO(sigmund): split in multiple classes: global, thread, main-worker states?
+class _Manager {
+
+  /** Next available isolate id within this [_Manager]. */
+  int nextIsolateId = 0;
+
+  /** id assigned to this [_Manager]. */
+  int currentManagerId = 0;
+
+  /**
+   * Next available manager id. Only used by the main manager to assign a unique
+   * id to each manager created by it.
+   */
+  int nextManagerId = 1;
+
+  /** Context for the currently running [Isolate]. */
+  _IsolateContext currentContext = null;
+
+  /** Context for the root [Isolate] that first run in this [_Manager]. */
+  _IsolateContext rootContext = null;
+
+  /** The top-level event loop. */
+  _EventLoop topEventLoop;
+
+  /** Whether this program is running from the command line. */
+  bool fromCommandLine;
+
+  /** Whether this [_Manager] is running as a web worker. */
+  bool isWorker;
+
+  /** Whether we support spawning web workers. */
+  bool supportsWorkers;
+
+  /**
+   * Whether to use web workers when implementing isolates. Set to false for
+   * debugging/testing.
+   */
+  bool get useWorkers => supportsWorkers;
+
+  /**
+   * Whether to use the web-worker JSON-based message serialization protocol. By
+   * default this is only used with web workers. For debugging, you can force
+   * using this protocol by changing this field value to [:true:].
+   */
+  bool get needSerialization => useWorkers;
+
+  /**
+   * Registry of isolates. Isolates must be registered if, and only if, receive
+   * ports are alive.  Normally no open receive-ports means that the isolate is
+   * dead, but DOM callbacks could resurrect it.
+   */
+  Map<int, _IsolateContext> isolates;
+
+  /** Reference to the main [_Manager].  Null in the main [_Manager] itself. */
+  _MainManagerStub mainManager;
+
+  /// Registry of active Web Workers.  Only used in the main [_Manager].
+  Map<int, dynamic /* Worker */> managers;
+
+  /** The entry point given by [startRootIsolate]. */
+  final Function entry;
+
+  _Manager(this.entry) {
+    _nativeDetectEnvironment();
+    topEventLoop = new _EventLoop();
+    isolates = new Map<int, _IsolateContext>();
+    managers = new Map<int, dynamic>();
+    if (isWorker) {  // "if we are not the main manager ourself" is the intent.
+      mainManager = new _MainManagerStub();
+      _nativeInitWorkerMessageHandler();
+    }
+  }
+
+  void _nativeDetectEnvironment() {
+    bool isWindowDefined = globalWindow != null;
+    bool isWorkerDefined = globalWorker != null;
+
+    isWorker = !isWindowDefined && globalPostMessageDefined;
+    supportsWorkers = isWorker
+       || (isWorkerDefined && IsolateNatives.thisScript != null);
+    fromCommandLine = !isWindowDefined && !isWorker;
+  }
+
+  void _nativeInitWorkerMessageHandler() {
+    var function = JS('',
+        "(function (f, a) { return function (e) { f(a, e); }})(#, #)",
+        DART_CLOSURE_TO_JS(IsolateNatives._processWorkerMessage),
+        mainManager);
+    JS("void", r"self.onmessage = #", function);
+    // We ensure dartPrint is defined so that the implementation of the Dart
+    // print method knows what to call.
+    JS('', '''self.dartPrint = self.dartPrint || (function(serialize) {
+  return function (object) {
+    if (self.console && self.console.log) {
+      self.console.log(object)
+    } else {
+      self.postMessage(serialize(object));
+    }
+  }
+})(#)''', DART_CLOSURE_TO_JS(_serializePrintMessage));
+  }
+
+  static _serializePrintMessage(object) {
+    return _serializeMessage({"command": "print", "msg": object});
+  }
+
+  /**
+   * Close the worker running this code if all isolates are done and
+   * there are no active async JavaScript tasks still running.
+   */
+  void maybeCloseWorker() {
+    if (isWorker
+        && isolates.isEmpty
+        && topEventLoop._activeJsAsyncCount == 0) {
+      mainManager.postMessage(_serializeMessage({'command': 'close'}));
+    }
+  }
+}
+
+/** Context information tracked for each isolate. */
+class _IsolateContext implements IsolateContext {
+  /** Current isolate id. */
+  final int id = _globalState.nextIsolateId++;
+
+  /** Registry of receive ports currently active on this isolate. */
+  final Map<int, RawReceivePortImpl> ports = new Map<int, RawReceivePortImpl>();
+
+  /** Registry of weak receive ports currently active on this isolate. */
+  final Set<int> weakPorts = new Set<int>();
+
+  /** Holds isolate globals (statics and top-level properties). */
+  // native object containing all globals of an isolate.
+  final isolateStatics = JS_CREATE_ISOLATE();
+
+  final RawReceivePortImpl controlPort = new RawReceivePortImpl._controlPort();
+
+  final Capability pauseCapability = new Capability();
+  final Capability terminateCapability = new Capability();  // License to kill.
+
+  /// Boolean flag set when the initial method of the isolate has been executed.
+  ///
+  /// Used to avoid considering the isolate dead when it has no open
+  /// receive ports and no scheduled timers, because it hasn't had time to
+  /// create them yet.
+  bool initialized = false;
+
+  // TODO(lrn): Store these in single "PauseState" object, so they don't take
+  // up as much room when not pausing.
+  bool isPaused = false;
+  List<_IsolateEvent> delayedEvents = [];
+  Set<Capability> pauseTokens = new Set();
+
+  // Container with the "on exit" handler send-ports.
+  var doneHandlers;
+
+  /**
+   * Queue of functions to call when the current event is complete.
+   *
+   * These events are not just put at the front of the event queue, because
+   * they represent control messages, and should be handled even if the
+   * event queue is paused.
+   */
+  var _scheduledControlEvents;
+  bool _isExecutingEvent = false;
+
+  /** Whether uncaught errors are considered fatal. */
+  bool errorsAreFatal = true;
+
+  // Set of ports that listen to uncaught errors.
+  Set<SendPort> errorPorts = new Set();
+
+  _IsolateContext() {
+    this.registerWeak(controlPort._id, controlPort);
+  }
+
+  void addPause(Capability authentification, Capability resume) {
+    if (pauseCapability != authentification) return;
+    if (pauseTokens.add(resume) && !isPaused) {
+      isPaused = true;
+    }
+    _updateGlobalState();
+  }
+
+  void removePause(Capability resume) {
+    if (!isPaused) return;
+    pauseTokens.remove(resume);
+    if (pauseTokens.isEmpty) {
+      while(delayedEvents.isNotEmpty) {
+        _IsolateEvent event = delayedEvents.removeLast();
+        _globalState.topEventLoop.prequeue(event);
+      }
+      isPaused = false;
+    }
+    _updateGlobalState();
+  }
+
+  void addDoneListener(SendPort responsePort) {
+    if (doneHandlers == null) {
+      doneHandlers = [];
+    }
+    // If necessary, we can switch doneHandlers to a Set if it gets larger.
+    // That is not expected to happen in practice.
+    if (doneHandlers.contains(responsePort)) return;
+    doneHandlers.add(responsePort);
+  }
+
+  void removeDoneListener(SendPort responsePort) {
+    if (doneHandlers == null) return;
+    doneHandlers.remove(responsePort);
+  }
+
+  void setErrorsFatal(Capability authentification, bool errorsAreFatal) {
+    if (terminateCapability != authentification) return;
+    this.errorsAreFatal = errorsAreFatal;
+  }
+
+  void handlePing(SendPort responsePort, int pingType) {
+    if (pingType == Isolate.IMMEDIATE ||
+        (pingType == Isolate.BEFORE_NEXT_EVENT &&
+         !_isExecutingEvent)) {
+      responsePort.send(null);
+      return;
+    }
+    void respond() { responsePort.send(null); }
+    if (pingType == Isolate.AS_EVENT) {
+      _globalState.topEventLoop.enqueue(this, respond, "ping");
+      return;
+    }
+    assert(pingType == Isolate.BEFORE_NEXT_EVENT);
+    if (_scheduledControlEvents == null) {
+      _scheduledControlEvents = new Queue();
+    }
+    _scheduledControlEvents.addLast(respond);
+  }
+
+  void handleKill(Capability authentification, int priority) {
+    if (this.terminateCapability != authentification) return;
+    if (priority == Isolate.IMMEDIATE ||
+        (priority == Isolate.BEFORE_NEXT_EVENT &&
+         !_isExecutingEvent)) {
+      kill();
+      return;
+    }
+    if (priority == Isolate.AS_EVENT) {
+      _globalState.topEventLoop.enqueue(this, kill, "kill");
+      return;
+    }
+    assert(priority == Isolate.BEFORE_NEXT_EVENT);
+    if (_scheduledControlEvents == null) {
+      _scheduledControlEvents = new Queue();
+    }
+    _scheduledControlEvents.addLast(kill);
+  }
+
+  void addErrorListener(SendPort port) {
+    errorPorts.add(port);
+  }
+
+  void removeErrorListener(SendPort port) {
+    errorPorts.remove(port);
+  }
+
+  /** Function called with an uncaught error. */
+  void handleUncaughtError(error, StackTrace stackTrace) {
+    // Just print the error if there is no error listener registered.
+    if (errorPorts.isEmpty) {
+      // An uncaught error in the root isolate will terminate the program?
+      if (errorsAreFatal && identical(this, _globalState.rootContext)) {
+        // The error will be rethrown to reach the global scope, so
+        // don't print it.
+        return;
+      }
+      if (JS('bool', 'self.console && self.console.error')) {
+        JS('void', 'self.console.error(#, #)', error, stackTrace);
+      } else {
+        print(error);
+        if (stackTrace != null) print(stackTrace);
+      }
+      return;
+    }
+    List message = new List(2)
+        ..[0] = error.toString()
+        ..[1] = (stackTrace == null) ? null : stackTrace.toString();
+    for (SendPort port in errorPorts) port.send(message);
+  }
+
+  /**
+   * Run [code] in the context of the isolate represented by [this].
+   */
+  dynamic eval(Function code) {
+    var old = _globalState.currentContext;
+    _globalState.currentContext = this;
+    this._setGlobals();
+    var result = null;
+    _isExecutingEvent = true;
+    try {
+      result = code();
+    } catch (e, s) {
+      handleUncaughtError(e, s);
+      if (errorsAreFatal) {
+        kill();
+        // An uncaught error in the root context terminates all isolates.
+        if (identical(this, _globalState.rootContext)) {
+          rethrow;
+        }
+      }
+    } finally {
+      _isExecutingEvent = false;
+      _globalState.currentContext = old;
+      if (old != null) old._setGlobals();
+      if (_scheduledControlEvents != null) {
+        while (_scheduledControlEvents.isNotEmpty) {
+          (_scheduledControlEvents.removeFirst())();
+        }
+      }
+    }
+    return result;
+  }
+
+  void _setGlobals() {
+    JS_SET_CURRENT_ISOLATE(isolateStatics);
+  }
+
+  /**
+   * Handle messages comming in on the control port.
+   *
+   * These events do not go through the event queue.
+   * The `_globalState.currentContext` context is not set to this context
+   * during the handling.
+   */
+  void handleControlMessage(message) {
+    switch (message[0]) {
+      case "pause":
+        addPause(message[1], message[2]);
+        break;
+      case "resume":
+        removePause(message[1]);
+        break;
+      case 'add-ondone':
+        addDoneListener(message[1]);
+        break;
+      case 'remove-ondone':
+        removeDoneListener(message[1]);
+        break;
+      case 'set-errors-fatal':
+        setErrorsFatal(message[1], message[2]);
+        break;
+      case "ping":
+        handlePing(message[1], message[2]);
+        break;
+      case "kill":
+        handleKill(message[1], message[2]);
+        break;
+      case "getErrors":
+        addErrorListener(message[1]);
+        break;
+      case "stopErrors":
+        removeErrorListener(message[1]);
+        break;
+      default:
+    }
+  }
+
+  /** Looks up a port registered for this isolate. */
+  RawReceivePortImpl lookup(int portId) => ports[portId];
+
+  void _addRegistration(int portId, RawReceivePortImpl port) {
+    if (ports.containsKey(portId)) {
+      throw new Exception("Registry: ports must be registered only once.");
+    }
+    ports[portId] = port;
+  }
+
+  /** Registers a port on this isolate. */
+  void register(int portId, RawReceivePortImpl port)  {
+    _addRegistration(portId, port);
+    _updateGlobalState();
+  }
+
+  /**
+   * Registers a weak port on this isolate.
+   *
+   * The port does not keep the isolate active.
+   */
+  void registerWeak(int portId, RawReceivePortImpl port)  {
+    weakPorts.add(portId);
+    _addRegistration(portId, port);
+  }
+
+  void _updateGlobalState() {
+    if (ports.length - weakPorts.length > 0 || isPaused || !initialized) {
+      _globalState.isolates[id] = this; // indicate this isolate is active
+    } else {
+      kill();
+    }
+  }
+
+  void kill() {
+    if (_scheduledControlEvents != null) {
+      // Kill all pending events.
+      _scheduledControlEvents.clear();
+    }
+    // Stop listening on all ports.
+    // This should happen before sending events to done handlers, in case
+    // we are listening on ourselves.
+    // Closes all ports, including control port.
+    for (var port in ports.values) {
+      port._close();
+    }
+    ports.clear();
+    weakPorts.clear();
+    _globalState.isolates.remove(id); // indicate this isolate is not active
+    errorPorts.clear();
+    if (doneHandlers != null) {
+      for (SendPort port in doneHandlers) {
+        port.send(null);
+      }
+      doneHandlers = null;
+    }
+  }
+
+  /** Unregister a port on this isolate. */
+  void unregister(int portId) {
+    ports.remove(portId);
+    weakPorts.remove(portId);
+    _updateGlobalState();
+  }
+}
+
+/** Represent the event loop on a javascript thread (DOM or worker). */
+class _EventLoop {
+  final Queue<_IsolateEvent> events = new Queue<_IsolateEvent>();
+
+  /// The number of waiting callbacks not controlled by the dart event loop.
+  ///
+  /// This could be timers or http requests. The worker will only be killed if
+  /// this count reaches 0.
+  /// Access this by using [enterJsAsync] before starting a JavaScript async
+  /// operation and [leaveJsAsync] when the callback has fired.
+  int _activeJsAsyncCount = 0;
+
+  _EventLoop();
+
+  void enqueue(isolate, fn, msg) {
+    events.addLast(new _IsolateEvent(isolate, fn, msg));
+  }
+
+  void prequeue(_IsolateEvent event) {
+    events.addFirst(event);
+  }
+
+  _IsolateEvent dequeue() {
+    if (events.isEmpty) return null;
+    return events.removeFirst();
+  }
+
+  void checkOpenReceivePortsFromCommandLine() {
+    if (_globalState.rootContext != null
+        && _globalState.isolates.containsKey(_globalState.rootContext.id)
+        && _globalState.fromCommandLine
+        && _globalState.rootContext.ports.isEmpty) {
+      // We want to reach here only on the main [_Manager] and only
+      // on the command-line.  In the browser the isolate might
+      // still be alive due to DOM callbacks, but the presumption is
+      // that on the command-line, no future events can be injected
+      // into the event queue once it's empty.  Node has setTimeout
+      // so this presumption is incorrect there.  We think(?) that
+      // in d8 this assumption is valid.
+      throw new Exception("Program exited with open ReceivePorts.");
+    }
+  }
+
+  /** Process a single event, if any. */
+  bool runIteration() {
+    final event = dequeue();
+    if (event == null) {
+      checkOpenReceivePortsFromCommandLine();
+      _globalState.maybeCloseWorker();
+      return false;
+    }
+    event.process();
+    return true;
+  }
+
+  /**
+   * Runs multiple iterations of the run-loop. If possible, each iteration is
+   * run asynchronously.
+   */
+  void _runHelper() {
+    if (globalWindow != null) {
+      // Run each iteration from the browser's top event loop.
+      void next() {
+        if (!runIteration()) return;
+        Timer.run(next);
+      }
+      next();
+    } else {
+      // Run synchronously until no more iterations are available.
+      while (runIteration()) {}
+    }
+  }
+
+  /**
+   * Call [_runHelper] but ensure that worker exceptions are propragated.
+   */
+  void run() {
+    if (!_globalState.isWorker) {
+      _runHelper();
+    } else {
+      try {
+        _runHelper();
+      } catch (e, trace) {
+        _globalState.mainManager.postMessage(_serializeMessage(
+            {'command': 'error', 'msg': '$e\n$trace' }));
+      }
+    }
+  }
+}
+
+/** An event in the top-level event queue. */
+class _IsolateEvent {
+  _IsolateContext isolate;
+  Function fn;
+  String message;
+
+  _IsolateEvent(this.isolate, this.fn, this.message);
+
+  void process() {
+    if (isolate.isPaused) {
+      isolate.delayedEvents.add(this);
+      return;
+    }
+    isolate.eval(fn);
+  }
+}
+
+/** A stub for interacting with the main manager. */
+class _MainManagerStub {
+  void postMessage(msg) {
+    // "self" is a way to refer to the global context object that
+    // works in HTML pages and in Web Workers.  It does not work in d8
+    // and Firefox jsshell, because that would have been too easy.
+    //
+    // See: http://www.w3.org/TR/workers/#the-global-scope
+    // and: http://www.w3.org/TR/Window/#dfn-self-attribute
+    requiresPreamble();
+    JS("void", r"self.postMessage(#)", msg);
+  }
+}
+
+const String _SPAWNED_SIGNAL = "spawned";
+const String _SPAWN_FAILED_SIGNAL = "spawn failed";
+
+get globalWindow {
+  requiresPreamble();
+  return JS('', "self.window");
+}
+
+get globalWorker {
+  requiresPreamble();
+  return JS('', "self.Worker");
+}
+bool get globalPostMessageDefined {
+  requiresPreamble();
+  return JS('bool', "!!self.postMessage");
+}
+
+typedef _MainFunction();
+typedef _MainFunctionArgs(args);
+typedef _MainFunctionArgsMessage(args, message);
+
+/// Note: IsolateNatives depends on _globalState which is only set up correctly
+/// when 'dart:isolate' has been imported.
+class IsolateNatives {
+
+  // We set [enableSpawnWorker] to true (not null) when calling isolate
+  // primitives that require support for spawning workers. The field starts out
+  // by being null, and dart2js' type inference will track if it can have a
+  // non-null value. So by testing if this value is not null, we generate code
+  // that dart2js knows is dead when worker support isn't needed.
+  // TODO(herhut): Initialize this to false when able to track compile-time
+  // constants.
+  static var enableSpawnWorker;
+
+  static String thisScript = computeThisScript();
+
+  /// Associates an ID with a native worker object.
+  static final Expando<int> workerIds = new Expando<int>();
+
+  /**
+   * The src url for the script tag that loaded this Used to create
+   * JavaScript workers.
+   */
+  static String computeThisScript() {
+    var currentScript = JS_EMBEDDED_GLOBAL('', CURRENT_SCRIPT);
+    if (currentScript != null) {
+      return JS('String', 'String(#.src)', currentScript);
+    }
+    if (Primitives.isD8) return computeThisScriptD8();
+    if (Primitives.isJsshell) return computeThisScriptJsshell();
+    // A worker has no script tag - so get an url from a stack-trace.
+    if (_globalState.isWorker) return computeThisScriptFromTrace();
+    return null;
+  }
+
+  static String computeThisScriptJsshell() {
+    return JS('String|Null', 'thisFilename()');
+  }
+
+  // TODO(ahe): The following is for supporting D8.  We should move this code
+  // to a helper library that is only loaded when testing on D8.
+  static String computeThisScriptD8() => computeThisScriptFromTrace();
+
+  static String computeThisScriptFromTrace() {
+    var stack = JS('String|Null', 'new Error().stack');
+    if (stack == null) {
+      // According to Internet Explorer documentation, the stack
+      // property is not set until the exception is thrown. The stack
+      // property was not provided until IE10.
+      stack = JS('String|Null',
+                 '(function() {'
+                 'try { throw new Error() } catch(e) { return e.stack }'
+                 '})()');
+      if (stack == null) throw new UnsupportedError('No stack trace');
+    }
+    var pattern, matches;
+
+    // This pattern matches V8, Chrome, and Internet Explorer stack
+    // traces that look like this:
+    // Error
+    //     at methodName (URI:LINE:COLUMN)
+    pattern = JS('',
+                 r'new RegExp("^ *at [^(]*\\((.*):[0-9]*:[0-9]*\\)$", "m")');
+
+
+    matches = JS('JSExtendableArray|Null', '#.match(#)', stack, pattern);
+    if (matches != null) return JS('String', '#[1]', matches);
+
+    // This pattern matches Firefox stack traces that look like this:
+    // methodName@URI:LINE
+    pattern = JS('', r'new RegExp("^[^@]*@(.*):[0-9]*$", "m")');
+
+    matches = JS('JSExtendableArray|Null', '#.match(#)', stack, pattern);
+    if (matches != null) return JS('String', '#[1]', matches);
+
+    throw new UnsupportedError('Cannot extract URI from "$stack"');
+  }
+
+  /**
+   * Assume that [e] is a browser message event and extract its message data.
+   * We don't import the dom explicitly so, when workers are disabled, this
+   * library can also run on top of nodejs.
+   */
+  static _getEventData(e) => JS("", "#.data", e);
+
+  /**
+   * Process messages on a worker, either to control the worker instance or to
+   * pass messages along to the isolate running in the worker.
+   */
+  static void _processWorkerMessage(/* Worker */ sender, e) {
+    var msg = _deserializeMessage(_getEventData(e));
+    switch (msg['command']) {
+      case 'start':
+        _globalState.currentManagerId = msg['id'];
+        String functionName = msg['functionName'];
+        Function entryPoint = (functionName == null)
+            ? _globalState.entry
+            : _getJSFunctionFromName(functionName);
+        var args = msg['args'];
+        var message = _deserializeMessage(msg['msg']);
+        var isSpawnUri = msg['isSpawnUri'];
+        var startPaused = msg['startPaused'];
+        var replyTo = _deserializeMessage(msg['replyTo']);
+        var context = new _IsolateContext();
+        _globalState.topEventLoop.enqueue(context, () {
+          _startIsolate(entryPoint, args, message,
+                        isSpawnUri, startPaused, replyTo);
+        }, 'worker-start');
+        // Make sure we always have a current context in this worker.
+        // TODO(7907): This is currently needed because we're using
+        // Timers to implement Futures, and this isolate library
+        // implementation uses Futures. We should either stop using
+        // Futures in this library, or re-adapt if Futures get a
+        // different implementation.
+        _globalState.currentContext = context;
+        _globalState.topEventLoop.run();
+        break;
+      case 'spawn-worker':
+        if (enableSpawnWorker != null) handleSpawnWorkerRequest(msg);
+        break;
+      case 'message':
+        SendPort port = msg['port'];
+        // If the port has been closed, we ignore the message.
+        if (port != null) {
+          msg['port'].send(msg['msg']);
+        }
+        _globalState.topEventLoop.run();
+        break;
+      case 'close':
+        _globalState.managers.remove(workerIds[sender]);
+        JS('void', '#.terminate()', sender);
+        _globalState.topEventLoop.run();
+        break;
+      case 'log':
+        _log(msg['msg']);
+        break;
+      case 'print':
+        if (_globalState.isWorker) {
+          _globalState.mainManager.postMessage(
+              _serializeMessage({'command': 'print', 'msg': msg}));
+        } else {
+          print(msg['msg']);
+        }
+        break;
+      case 'error':
+        throw msg['msg'];
+    }
+  }
+
+  static handleSpawnWorkerRequest(msg) {
+    var replyPort = msg['replyPort'];
+    spawn(msg['functionName'], msg['uri'],
+          msg['args'], msg['msg'],
+          false, msg['isSpawnUri'], msg['startPaused']).then((msg) {
+      replyPort.send(msg);
+    }, onError: (String errorMessage) {
+      replyPort.send([_SPAWN_FAILED_SIGNAL, errorMessage]);
+    });
+  }
+
+  /** Log a message, forwarding to the main [_Manager] if appropriate. */
+  static _log(msg) {
+    if (_globalState.isWorker) {
+      _globalState.mainManager.postMessage(
+          _serializeMessage({'command': 'log', 'msg': msg }));
+    } else {
+      try {
+        _consoleLog(msg);
+      } catch (e, trace) {
+        throw new Exception(trace);
+      }
+    }
+  }
+
+  static void _consoleLog(msg) {
+    requiresPreamble();
+    JS("void", r"self.console.log(#)", msg);
+  }
+
+  static _getJSFunctionFromName(String functionName) {
+    var globalFunctionsContainer = JS_EMBEDDED_GLOBAL("", GLOBAL_FUNCTIONS);
+    return JS("", "#[#]()", globalFunctionsContainer, functionName);
+  }
+
+  /**
+   * Get a string name for the function, if possible.  The result for
+   * anonymous functions is browser-dependent -- it may be "" or "anonymous"
+   * but you should probably not count on this.
+   */
+  static String _getJSFunctionName(Function f) {
+    return (f is Closure) ? JS("String|Null", r'#.$name', f) : null;
+  }
+
+  /** Create a new JavaScript object instance given its constructor. */
+  static dynamic _allocate(var ctor) {
+    return JS("", "new #()", ctor);
+  }
+
+  static Future<List> spawnFunction(void topLevelFunction(message),
+                                    var message,
+                                    bool startPaused) {
+    IsolateNatives.enableSpawnWorker = true;
+    final name = _getJSFunctionName(topLevelFunction);
+    if (name == null) {
+      throw new UnsupportedError(
+          "only top-level functions can be spawned.");
+    }
+    bool isLight = false;
+    bool isSpawnUri = false;
+    return spawn(name, null, null, message, isLight, isSpawnUri, startPaused);
+  }
+
+  static Future<List> spawnUri(Uri uri, List<String> args, var message,
+                               bool startPaused) {
+    IsolateNatives.enableSpawnWorker = true;
+    bool isLight = false;
+    bool isSpawnUri = true;
+    return spawn(null, uri.toString(), args, message,
+                 isLight, isSpawnUri, startPaused);
+  }
+
+  // TODO(sigmund): clean up above, after we make the new API the default:
+
+  /// If [uri] is `null` it is replaced with the current script.
+  static Future<List> spawn(String functionName, String uri,
+                            List<String> args, message,
+                            bool isLight, bool isSpawnUri, bool startPaused) {
+    // Assume that the compiled version of the Dart file lives just next to the
+    // dart file.
+    // TODO(floitsch): support precompiled version of dart2js output.
+    if (uri != null && uri.endsWith(".dart")) uri += ".js";
+
+    ReceivePort port = new ReceivePort();
+    Completer<List> completer = new Completer();
+    port.first.then((msg) {
+      if (msg[0] == _SPAWNED_SIGNAL) {
+        completer.complete(msg);
+      } else {
+        assert(msg[0] == _SPAWN_FAILED_SIGNAL);
+        completer.completeError(msg[1]);
+      }
+    });
+
+    SendPort signalReply = port.sendPort;
+
+    if (_globalState.useWorkers && !isLight) {
+      _startWorker(
+          functionName, uri, args, message, isSpawnUri, startPaused,
+          signalReply, (String message) => completer.completeError(message));
+    } else {
+      _startNonWorker(
+          functionName, uri, args, message, isSpawnUri, startPaused,
+          signalReply);
+    }
+    return completer.future;
+  }
+
+  static void _startWorker(
+      String functionName, String uri,
+      List<String> args, message,
+      bool isSpawnUri,
+      bool startPaused,
+      SendPort replyPort,
+      void onError(String message)) {
+    if (_globalState.isWorker) {
+      _globalState.mainManager.postMessage(_serializeMessage({
+          'command': 'spawn-worker',
+          'functionName': functionName,
+          'args': args,
+          'msg': message,
+          'uri': uri,
+          'isSpawnUri': isSpawnUri,
+          'startPaused': startPaused,
+          'replyPort': replyPort}));
+    } else {
+      _spawnWorker(functionName, uri, args, message,
+                   isSpawnUri, startPaused, replyPort, onError);
+    }
+  }
+
+  static void _startNonWorker(
+      String functionName, String uri,
+      List<String> args, var message,
+      bool isSpawnUri,
+      bool startPaused,
+      SendPort replyPort) {
+    // TODO(eub): support IE9 using an iframe -- Dart issue 1702.
+    if (uri != null) {
+      throw new UnsupportedError(
+          "Currently spawnUri is not supported without web workers.");
+    }
+    message = _serializeMessage(message);
+    args = _serializeMessage(args);  // Or just args.toList() ?
+    _globalState.topEventLoop.enqueue(new _IsolateContext(), () {
+      final func = _getJSFunctionFromName(functionName);
+      _startIsolate(func, args, message, isSpawnUri, startPaused, replyPort);
+    }, 'nonworker start');
+  }
+
+  static void _startIsolate(Function topLevel,
+                            List<String> args, message,
+                            bool isSpawnUri,
+                            bool startPaused,
+                            SendPort replyTo) {
+    _IsolateContext context = JS_CURRENT_ISOLATE_CONTEXT();
+    Primitives.initializeStatics(context.id);
+    // The isolate's port does not keep the isolate open.
+    replyTo.send([_SPAWNED_SIGNAL,
+                  context.controlPort.sendPort,
+                  context.pauseCapability,
+                  context.terminateCapability]);
+
+    void runStartFunction() {
+      context.initialized = true;
+      if (!isSpawnUri) {
+        topLevel(message);
+      } else if (topLevel is _MainFunctionArgsMessage) {
+        topLevel(args, message);
+      } else if (topLevel is _MainFunctionArgs) {
+        topLevel(args);
+      } else {
+        topLevel();
+      }
+    }
+
+    if (startPaused) {
+      context.addPause(context.pauseCapability, context.pauseCapability);
+      _globalState.topEventLoop.enqueue(context, runStartFunction,
+                                        'start isolate');
+    } else {
+      runStartFunction();
+    }
+  }
+
+  /**
+   * Spawns an isolate in a worker. [factoryName] is the Javascript constructor
+   * name for the isolate entry point class.
+   */
+  static void _spawnWorker(functionName, String uri,
+                           List<String> args, message,
+                           bool isSpawnUri,
+                           bool startPaused,
+                           SendPort replyPort,
+                           void onError(String message)) {
+    if (uri == null) uri = thisScript;
+    final worker = JS('var', 'new Worker(#)', uri);
+    // Trampolines are used when wanting to call a Dart closure from
+    // JavaScript.  The helper function DART_CLOSURE_TO_JS only accepts
+    // top-level or static methods, and the trampoline allows us to capture
+    // arguments and values which can be passed to a static method.
+    final onerrorTrampoline = JS(
+        '',
+        '''
+(function (f, u, c) {
+  return function(e) {
+    return f(e, u, c)
+  }
+})(#, #, #)''',
+        DART_CLOSURE_TO_JS(workerOnError), uri, onError);
+    JS('void', '#.onerror = #', worker, onerrorTrampoline);
+
+    var processWorkerMessageTrampoline = JS(
+        '',
+        """
+(function (f, a) {
+  return function (e) {
+    // We can stop listening for errors when the first message is received as
+    // we only listen for messages to determine if the uri was bad.
+    e.onerror = null;
+    return f(a, e);
+  }
+})(#, #)""",
+        DART_CLOSURE_TO_JS(_processWorkerMessage),
+        worker);
+    JS('void', '#.onmessage = #', worker, processWorkerMessageTrampoline);
+    var workerId = _globalState.nextManagerId++;
+    // We also store the id on the worker itself so that we can unregister it.
+    workerIds[worker] = workerId;
+    _globalState.managers[workerId] = worker;
+    JS('void', '#.postMessage(#)', worker, _serializeMessage({
+        'command': 'start',
+        'id': workerId,
+        // Note: we serialize replyPort twice because the child worker needs to
+        // first deserialize the worker id, before it can correctly deserialize
+        // the port (port deserialization is sensitive to what is the current
+        // workerId).
+        'replyTo': _serializeMessage(replyPort),
+        'args': args,
+        'msg': _serializeMessage(message),
+        'isSpawnUri': isSpawnUri,
+        'startPaused': startPaused,
+        'functionName': functionName }));
+  }
+
+  static bool workerOnError(
+      /* Event */ event,
+      String uri,
+      void onError(String message)) {
+    // Attempt to shut up the browser, as the error has been handled.  Chrome
+    // ignores this :-(
+    JS('void', '#.preventDefault()', event);
+    String message = JS('String|Null', '#.message', event);
+    if (message == null) {
+      // Some browsers, including Chrome, fail to provide a proper error
+      // event.
+      message = 'Error spawning worker for $uri';
+    } else {
+      message = 'Error spawning worker for $uri ($message)';
+    }
+    onError(message);
+    return true;
+  }
+}
+
+/********************************************************
+  Inserted from lib/isolate/dart2js/ports.dart
+ ********************************************************/
+
+/** Common functionality to all send ports. */
+abstract class _BaseSendPort implements SendPort {
+  /** Id for the destination isolate. */
+  final int _isolateId;
+
+  const _BaseSendPort(this._isolateId);
+
+  void _checkReplyTo(SendPort replyTo) {
+    if (replyTo != null
+        && replyTo is! _NativeJsSendPort
+        && replyTo is! _WorkerSendPort) {
+      throw new Exception("SendPort.send: Illegal replyTo port type");
+    }
+  }
+
+  void send(var message);
+  bool operator ==(var other);
+  int get hashCode;
+}
+
+/** A send port that delivers messages in-memory via native JavaScript calls. */
+class _NativeJsSendPort extends _BaseSendPort implements SendPort {
+  final RawReceivePortImpl _receivePort;
+
+  const _NativeJsSendPort(this._receivePort, int isolateId) : super(isolateId);
+
+  void send(var message) {
+    // Check that the isolate still runs and the port is still open
+    final isolate = _globalState.isolates[_isolateId];
+    if (isolate == null) return;
+    if (_receivePort._isClosed) return;
+    // We force serialization/deserialization as a simple way to ensure
+    // isolate communication restrictions are respected between isolates that
+    // live in the same worker. [_NativeJsSendPort] delivers both messages
+    // from the same worker and messages from other workers. In particular,
+    // messages sent from a worker via a [_WorkerSendPort] are received at
+    // [_processWorkerMessage] and forwarded to a native port. In such cases,
+    // here we'll see [_globalState.currentContext == null].
+    final shouldSerialize = _globalState.currentContext != null
+        && _globalState.currentContext.id != _isolateId;
+    var msg = message;
+    if (shouldSerialize) {
+      msg = _serializeMessage(msg);
+    }
+    if (isolate.controlPort == _receivePort) {
+      isolate.handleControlMessage(msg);
+      return;
+    }
+    _globalState.topEventLoop.enqueue(isolate, () {
+      if (!_receivePort._isClosed) {
+        if (shouldSerialize) {
+          msg = _deserializeMessage(msg);
+        }
+        _receivePort._add(msg);
+      }
+    }, 'receive $message');
+  }
+
+  bool operator ==(var other) => (other is _NativeJsSendPort) &&
+      (_receivePort == other._receivePort);
+
+  int get hashCode => _receivePort._id;
+}
+
+/** A send port that delivers messages via worker.postMessage. */
+// TODO(eub): abstract this for iframes.
+class _WorkerSendPort extends _BaseSendPort implements SendPort {
+  final int _workerId;
+  final int _receivePortId;
+
+  const _WorkerSendPort(this._workerId, int isolateId, this._receivePortId)
+      : super(isolateId);
+
+  void send(var message) {
+    final workerMessage = _serializeMessage({
+        'command': 'message',
+        'port': this,
+        'msg': message});
+
+    if (_globalState.isWorker) {
+      // Communication from one worker to another go through the
+      // main worker.
+      _globalState.mainManager.postMessage(workerMessage);
+    } else {
+      // Deliver the message only if the worker is still alive.
+      /* Worker */ var manager = _globalState.managers[_workerId];
+      if (manager != null) {
+        JS('void', '#.postMessage(#)', manager, workerMessage);
+      }
+    }
+  }
+
+  bool operator ==(var other) {
+    return (other is _WorkerSendPort) &&
+        (_workerId == other._workerId) &&
+        (_isolateId == other._isolateId) &&
+        (_receivePortId == other._receivePortId);
+  }
+
+  int get hashCode {
+    // TODO(sigmund): use a standard hash when we get one available in corelib.
+    return (_workerId << 16) ^ (_isolateId << 8) ^ _receivePortId;
+  }
+}
+
+class RawReceivePortImpl implements RawReceivePort {
+  static int _nextFreeId = 1;
+
+  final int _id;
+  Function _handler;
+  bool _isClosed = false;
+
+  RawReceivePortImpl(this._handler) : _id = _nextFreeId++ {
+    _globalState.currentContext.register(_id, this);
+  }
+
+  RawReceivePortImpl.weak(this._handler) : _id = _nextFreeId++ {
+    _globalState.currentContext.registerWeak(_id, this);
+  }
+
+  // Creates the control port of an isolate.
+  // This is created before the isolate context object itself,
+  // so it cannot access the static _nextFreeId field.
+  RawReceivePortImpl._controlPort() : _handler = null, _id = 0;
+
+  void set handler(Function newHandler) {
+    _handler = newHandler;
+  }
+
+  // Close the port without unregistering it.
+  // Used by an isolate context to close all ports when shutting down.
+  void _close() {
+    _isClosed = true;
+    _handler = null;
+  }
+
+  void close() {
+    if (_isClosed) return;
+    _isClosed = true;
+    _handler = null;
+    _globalState.currentContext.unregister(_id);
+  }
+
+  void _add(dataEvent) {
+    if (_isClosed) return;
+    _handler(dataEvent);
+  }
+
+  SendPort get sendPort {
+    return new _NativeJsSendPort(this, _globalState.currentContext.id);
+  }
+}
+
+class ReceivePortImpl extends Stream implements ReceivePort {
+  final RawReceivePort _rawPort;
+  StreamController _controller;
+
+  ReceivePortImpl() : this.fromRawReceivePort(new RawReceivePortImpl(null));
+
+  ReceivePortImpl.weak()
+      : this.fromRawReceivePort(new RawReceivePortImpl.weak(null));
+
+  ReceivePortImpl.fromRawReceivePort(this._rawPort) {
+    _controller = new StreamController(onCancel: close, sync: true);
+    _rawPort.handler = _controller.add;
+  }
+
+  StreamSubscription listen(void onData(var event),
+                            {Function onError,
+                             void onDone(),
+                             bool cancelOnError}) {
+    return _controller.stream.listen(onData, onError: onError, onDone: onDone,
+                                     cancelOnError: cancelOnError);
+  }
+
+  void close() {
+    _rawPort.close();
+    _controller.close();
+  }
+
+  SendPort get sendPort => _rawPort.sendPort;
+}
+
+
+/********************************************************
+  Inserted from lib/isolate/dart2js/messages.dart
+ ********************************************************/
+
+// Defines message visitors, serialization, and deserialization.
+
+/** Serialize [message] (or simulate serialization). */
+_serializeMessage(message) {
+  if (_globalState.needSerialization) {
+    return new _JsSerializer().traverse(message);
+  } else {
+    return new _JsCopier().traverse(message);
+  }
+}
+
+/** Deserialize [message] (or simulate deserialization). */
+_deserializeMessage(message) {
+  if (_globalState.needSerialization) {
+    return new _JsDeserializer().deserialize(message);
+  } else {
+    // Nothing more to do.
+    return message;
+  }
+}
+
+class _JsSerializer extends _Serializer {
+
+  _JsSerializer() : super() { _visited = new _JsVisitedMap(); }
+
+  visitSendPort(SendPort x) {
+    if (x is _NativeJsSendPort) return visitNativeJsSendPort(x);
+    if (x is _WorkerSendPort) return visitWorkerSendPort(x);
+    throw "Illegal underlying port $x";
+  }
+
+  visitCapability(Capability x) {
+    if (x is CapabilityImpl) {
+      return ['capability', x._id];
+    }
+    throw "Capability not serializable: $x";
+  }
+
+  visitNativeJsSendPort(_NativeJsSendPort port) {
+    return ['sendport', _globalState.currentManagerId,
+        port._isolateId, port._receivePort._id];
+  }
+
+  visitWorkerSendPort(_WorkerSendPort port) {
+    return ['sendport', port._workerId, port._isolateId, port._receivePortId];
+  }
+}
+
+
+class _JsCopier extends _Copier {
+
+  _JsCopier() : super() { _visited = new _JsVisitedMap(); }
+
+  visitSendPort(SendPort x) {
+    if (x is _NativeJsSendPort) return visitNativeJsSendPort(x);
+    if (x is _WorkerSendPort) return visitWorkerSendPort(x);
+    throw "Illegal underlying port $x";
+  }
+
+  visitCapability(Capability x) {
+    if (x is CapabilityImpl) {
+      return new CapabilityImpl._internal(x._id);
+    }
+    throw "Capability not serializable: $x";
+  }
+
+  SendPort visitNativeJsSendPort(_NativeJsSendPort port) {
+    return new _NativeJsSendPort(port._receivePort, port._isolateId);
+  }
+
+  SendPort visitWorkerSendPort(_WorkerSendPort port) {
+    return new _WorkerSendPort(
+        port._workerId, port._isolateId, port._receivePortId);
+  }
+}
+
+class _JsDeserializer extends _Deserializer {
+
+  SendPort deserializeSendPort(List list) {
+    int managerId = list[1];
+    int isolateId = list[2];
+    int receivePortId = list[3];
+    // If two isolates are in the same manager, we use NativeJsSendPorts to
+    // deliver messages directly without using postMessage.
+    if (managerId == _globalState.currentManagerId) {
+      var isolate = _globalState.isolates[isolateId];
+      if (isolate == null) return null; // Isolate has been closed.
+      var receivePort = isolate.lookup(receivePortId);
+      if (receivePort == null) return null; // Port has been closed.
+      return new _NativeJsSendPort(receivePort, isolateId);
+    } else {
+      return new _WorkerSendPort(managerId, isolateId, receivePortId);
+    }
+  }
+
+  Capability deserializeCapability(List list) {
+    return new CapabilityImpl._internal(list[1]);
+  }
+}
+
+class _JsVisitedMap implements _MessageTraverserVisitedMap {
+  List tagged;
+
+  /** Retrieves any information stored in the native object [object]. */
+  operator[](var object) {
+    return _getAttachedInfo(object);
+  }
+
+  /** Injects some information into the native [object]. */
+  void operator[]=(var object, var info) {
+    tagged.add(object);
+    _setAttachedInfo(object, info);
+  }
+
+  /** Get ready to rumble. */
+  void reset() {
+    assert(tagged == null);
+    tagged = new List();
+  }
+
+  /** Remove all information injected in the native objects. */
+  void cleanup() {
+    for (int i = 0, length = tagged.length; i < length; i++) {
+      _clearAttachedInfo(tagged[i]);
+    }
+    tagged = null;
+  }
+
+  void _clearAttachedInfo(var o) {
+    JS("void", "#['__MessageTraverser__attached_info__'] = #", o, null);
+  }
+
+  void _setAttachedInfo(var o, var info) {
+    JS("void", "#['__MessageTraverser__attached_info__'] = #", o, info);
+  }
+
+  _getAttachedInfo(var o) {
+    return JS("", "#['__MessageTraverser__attached_info__']", o);
+  }
+}
+
+// only visible for testing purposes
+// TODO(sigmund): remove once we can disable privacy for testing (bug #1882)
+class TestingOnly {
+  static copy(x) {
+    return new _JsCopier().traverse(x);
+  }
+
+  // only visible for testing purposes
+  static serialize(x) {
+    _Serializer serializer = new _JsSerializer();
+    _Deserializer deserializer = new _JsDeserializer();
+    return deserializer.deserialize(serializer.traverse(x));
+  }
+}
+
+/********************************************************
+  Inserted from lib/isolate/serialization.dart
+ ********************************************************/
+
+class _MessageTraverserVisitedMap {
+
+  operator[](var object) => null;
+  void operator[]=(var object, var info) { }
+
+  void reset() { }
+  void cleanup() { }
+
+}
+
+/** Abstract visitor for dart objects that can be sent as isolate messages. */
+abstract class _MessageTraverser {
+
+  _MessageTraverserVisitedMap _visited;
+  _MessageTraverser() : _visited = new _MessageTraverserVisitedMap();
+
+  /** Visitor's entry point. */
+  traverse(var x) {
+    if (isPrimitive(x)) return visitPrimitive(x);
+    _visited.reset();
+    var result;
+    try {
+      result = _dispatch(x);
+    } finally {
+      _visited.cleanup();
+    }
+    return result;
+  }
+
+  _dispatch(var x) {
+    // This code likely fails for user classes implementing
+    // SendPort and Capability because it assumes the internal classes.
+    if (isPrimitive(x)) return visitPrimitive(x);
+    if (x is List) return visitList(x);
+    if (x is Map) return visitMap(x);
+    if (x is SendPort) return visitSendPort(x);
+    if (x is Capability) return visitCapability(x);
+
+    // Overridable fallback.
+    return visitObject(x);
+  }
+
+  visitPrimitive(x);
+  visitList(List x);
+  visitMap(Map x);
+  visitSendPort(SendPort x);
+  visitCapability(Capability x);
+
+  visitObject(Object x) {
+    // TODO(floitsch): make this a real exception. (which one)?
+    throw "Message serialization: Illegal value $x passed";
+  }
+
+  static bool isPrimitive(x) {
+    return (x == null) || (x is String) || (x is num) || (x is bool);
+  }
+}
+
+
+/** A visitor that recursively copies a message. */
+class _Copier extends _MessageTraverser {
+
+  visitPrimitive(x) => x;
+
+  List visitList(List list) {
+    List copy = _visited[list];
+    if (copy != null) return copy;
+
+    int len = list.length;
+
+    // TODO(floitsch): we loose the generic type of the List.
+    copy = new List(len);
+    _visited[list] = copy;
+    for (int i = 0; i < len; i++) {
+      copy[i] = _dispatch(list[i]);
+    }
+    return copy;
+  }
+
+  Map visitMap(Map map) {
+    Map copy = _visited[map];
+    if (copy != null) return copy;
+
+    // TODO(floitsch): we loose the generic type of the map.
+    copy = new Map();
+    _visited[map] = copy;
+    map.forEach((key, val) {
+      copy[_dispatch(key)] = _dispatch(val);
+    });
+    return copy;
+  }
+
+  visitSendPort(SendPort x) => throw new UnimplementedError();
+
+  visitCapability(Capability x) => throw new UnimplementedError();
+}
+
+/** Visitor that serializes a message as a JSON array. */
+class _Serializer extends _MessageTraverser {
+  int _nextFreeRefId = 0;
+
+  visitPrimitive(x) => x;
+
+  visitList(List list) {
+    int copyId = _visited[list];
+    if (copyId != null) return ['ref', copyId];
+
+    int id = _nextFreeRefId++;
+    _visited[list] = id;
+    var jsArray = _serializeList(list);
+    // TODO(floitsch): we are losing the generic type.
+    return ['list', id, jsArray];
+  }
+
+  visitMap(Map map) {
+    int copyId = _visited[map];
+    if (copyId != null) return ['ref', copyId];
+
+    int id = _nextFreeRefId++;
+    _visited[map] = id;
+    var keys = _serializeList(map.keys.toList());
+    var values = _serializeList(map.values.toList());
+    // TODO(floitsch): we are losing the generic type.
+    return ['map', id, keys, values];
+  }
+
+  _serializeList(List list) {
+    int len = list.length;
+    // Use a growable list because we do not add extra properties on
+    // them.
+    var result = new List()..length = len;
+    for (int i = 0; i < len; i++) {
+      result[i] = _dispatch(list[i]);
+    }
+    return result;
+  }
+
+  visitSendPort(SendPort x) => throw new UnimplementedError();
+
+  visitCapability(Capability x) => throw new UnimplementedError();
+}
+
+/** Deserializes arrays created with [_Serializer]. */
+abstract class _Deserializer {
+  Map<int, dynamic> _deserialized;
+
+  _Deserializer();
+
+  static bool isPrimitive(x) {
+    return (x == null) || (x is String) || (x is num) || (x is bool);
+  }
+
+  deserialize(x) {
+    if (isPrimitive(x)) return x;
+    // TODO(floitsch): this should be new HashMap<int, dynamic>()
+    _deserialized = new HashMap();
+    return _deserializeHelper(x);
+  }
+
+  _deserializeHelper(x) {
+    if (isPrimitive(x)) return x;
+    assert(x is List);
+    switch (x[0]) {
+      case 'ref': return _deserializeRef(x);
+      case 'list': return _deserializeList(x);
+      case 'map': return _deserializeMap(x);
+      case 'sendport': return deserializeSendPort(x);
+      case 'capability': return deserializeCapability(x);
+      default: return deserializeObject(x);
+    }
+  }
+
+  _deserializeRef(List x) {
+    int id = x[1];
+    var result = _deserialized[id];
+    assert(result != null);
+    return result;
+  }
+
+  List _deserializeList(List x) {
+    int id = x[1];
+    // We rely on the fact that Dart-lists are directly mapped to Js-arrays.
+    List dartList = x[2];
+    _deserialized[id] = dartList;
+    int len = dartList.length;
+    for (int i = 0; i < len; i++) {
+      dartList[i] = _deserializeHelper(dartList[i]);
+    }
+    return dartList;
+  }
+
+  Map _deserializeMap(List x) {
+    Map result = new Map();
+    int id = x[1];
+    _deserialized[id] = result;
+    List keys = x[2];
+    List values = x[3];
+    int len = keys.length;
+    assert(len == values.length);
+    for (int i = 0; i < len; i++) {
+      var key = _deserializeHelper(keys[i]);
+      var value = _deserializeHelper(values[i]);
+      result[key] = value;
+    }
+    return result;
+  }
+
+  deserializeSendPort(List x);
+
+  deserializeCapability(List x);
+
+  deserializeObject(List x) {
+    // TODO(floitsch): Use real exception (which one?).
+    throw "Unexpected serialized object";
+  }
+}
+
+class TimerImpl implements Timer {
+  final bool _once;
+  bool _inEventLoop = false;
+  int _handle;
+
+  TimerImpl(int milliseconds, void callback())
+      : _once = true {
+    if (milliseconds == 0 && (!hasTimer() || _globalState.isWorker)) {
+
+      void internalCallback() {
+        _handle = null;
+        callback();
+      }
+
+      // Setting _handle to something different from null indicates that the
+      // callback has not been run. Hence, the choice of 1 is arbitrary.
+      _handle = 1;
+
+      // This makes a dependency between the async library and the
+      // event loop of the isolate library. The compiler makes sure
+      // that the event loop is compiled if [Timer] is used.
+      // TODO(7907): In case of web workers, we need to use the event
+      // loop instead of setTimeout, to make sure the futures get executed in
+      // order.
+      _globalState.topEventLoop.enqueue(
+          _globalState.currentContext, internalCallback, 'timer');
+      _inEventLoop = true;
+    } else if (hasTimer()) {
+
+      void internalCallback() {
+        _handle = null;
+        leaveJsAsync();
+        callback();
+      }
+
+      enterJsAsync();
+
+      _handle = JS('int', 'self.setTimeout(#, #)',
+                   convertDartClosureToJS(internalCallback, 0),
+                   milliseconds);
+    } else {
+      assert(milliseconds > 0);
+      throw new UnsupportedError("Timer greater than 0.");
+    }
+  }
+
+  TimerImpl.periodic(int milliseconds, void callback(Timer timer))
+      : _once = false {
+    if (hasTimer()) {
+      enterJsAsync();
+      _handle = JS('int', 'self.setInterval(#, #)',
+                   convertDartClosureToJS(() { callback(this); }, 0),
+                   milliseconds);
+    } else {
+      throw new UnsupportedError("Periodic timer.");
+    }
+  }
+
+  void cancel() {
+    if (hasTimer()) {
+      if (_inEventLoop) {
+        throw new UnsupportedError("Timer in event loop cannot be canceled.");
+      }
+      if (_handle == null) return;
+      leaveJsAsync();
+      if (_once) {
+        JS('void', 'self.clearTimeout(#)', _handle);
+      } else {
+        JS('void', 'self.clearInterval(#)', _handle);
+      }
+      _handle = null;
+    } else {
+      throw new UnsupportedError("Canceling a timer.");
+    }
+  }
+
+  bool get isActive => _handle != null;
+}
+
+bool hasTimer() {
+  requiresPreamble();
+  return JS('', 'self.setTimeout') != null;
+}
+
+
+/**
+ * Implementation class for [Capability].
+ *
+ * It has the same name to make it harder for users to distinguish.
+ */
+class CapabilityImpl implements Capability {
+  /** Internal random secret identifying the capability. */
+  final int _id;
+
+  CapabilityImpl() : this._internal(random64());
+
+  CapabilityImpl._internal(this._id);
+
+  int get hashCode {
+    // Thomas Wang 32 bit Mix.
+    // http://www.concentric.net/~Ttwang/tech/inthash.htm
+    // (via https://gist.github.com/badboy/6267743)
+    int hash = _id;
+    hash = (hash >> 0) ^ (hash ~/ 0x100000000);  // To 32 bit from ~64.
+    hash = (~hash + (hash << 15)) & 0xFFFFFFFF;
+    hash ^= hash >> 12;
+    hash = (hash * 5) & 0xFFFFFFFF;
+    hash ^= hash >> 4;
+    hash = (hash * 2057) & 0xFFFFFFFF;
+    hash ^= hash >> 16;
+    return hash;
+  }
+
+  bool operator==(Object other) {
+    if (identical(other, this)) return true;
+    if (other is CapabilityImpl) {
+      return identical(_id, other._id);
+    }
+    return false;
+  }
+}
diff --git a/sdk/lib/_internal/compiler/js_lib/isolate_patch.dart b/sdk/lib/_internal/compiler/js_lib/isolate_patch.dart
new file mode 100644
index 0000000..cbba9e5
--- /dev/null
+++ b/sdk/lib/_internal/compiler/js_lib/isolate_patch.dart
@@ -0,0 +1,153 @@
+// 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.
+
+// Patch file for the dart:isolate library.
+
+import 'dart:_js_helper' show patch;
+import 'dart:_isolate_helper' show CapabilityImpl,
+                                   CloseToken,
+                                   IsolateNatives,
+                                   JsIsolateSink,
+                                   ReceivePortImpl,
+                                   RawReceivePortImpl;
+
+@patch
+class Isolate {
+  @patch
+  static Future<Isolate> spawn(void entryPoint(message), var message,
+                                     { bool paused: false }) {
+    try {
+      return IsolateNatives.spawnFunction(entryPoint, message, paused)
+          .then((msg) => new Isolate(msg[1],
+                                     pauseCapability: msg[2],
+                                     terminateCapability: msg[3]));
+    } catch (e, st) {
+      return new Future<Isolate>.error(e, st);
+    }
+  }
+
+  @patch
+  static Future<Isolate> spawnUri(
+      Uri uri, List<String> args, var message, { bool paused: false,
+                                                 Uri packageRoot }) {
+    if (packageRoot != null) throw new UnimplementedError("packageRoot");
+    try {
+      if (args is List<String>) {
+        for (int i = 0; i < args.length; i++) {
+          if (args[i] is! String) {
+            throw new ArgumentError("Args must be a list of Strings $args");
+          }
+        }
+      } else if (args != null) {
+        throw new ArgumentError("Args must be a list of Strings $args");
+      }
+      return IsolateNatives.spawnUri(uri, args, message, paused)
+          .then((msg) => new Isolate(msg[1],
+                                     pauseCapability: msg[2],
+                                     terminateCapability: msg[3]));
+    } catch (e, st) {
+      return new Future<Isolate>.error(e, st);
+    }
+  }
+
+  @patch
+  void _pause(Capability resumeCapability) {
+    var message = new List(3)
+        ..[0] = "pause"
+        ..[1] = pauseCapability
+        ..[2] = resumeCapability;
+    controlPort.send(message);
+  }
+
+  @patch
+  void resume(Capability resumeCapability) {
+    var message = new List(2)
+        ..[0] = "resume"
+        ..[1] = resumeCapability;
+    controlPort.send(message);
+  }
+
+  @patch
+  void addOnExitListener(SendPort responsePort) {
+    // TODO(lrn): Can we have an internal method that checks if the receiving
+    // isolate of a SendPort is still alive?
+    var message = new List(2)
+        ..[0] = "add-ondone"
+        ..[1] = responsePort;
+    controlPort.send(message);
+  }
+
+  @patch
+  void removeOnExitListener(SendPort responsePort) {
+    var message = new List(2)
+        ..[0] = "remove-ondone"
+        ..[1] = responsePort;
+    controlPort.send(message);
+  }
+
+  @patch
+  void setErrorsFatal(bool errorsAreFatal) {
+    var message = new List(3)
+        ..[0] = "set-errors-fatal"
+        ..[1] = terminateCapability
+        ..[2] = errorsAreFatal;
+    controlPort.send(message);
+  }
+
+  @patch
+  void kill([int priority = BEFORE_NEXT_EVENT]) {
+    controlPort.send(["kill", terminateCapability, priority]);
+  }
+
+  @patch
+  void ping(SendPort responsePort, [int pingType = IMMEDIATE]) {
+    var message = new List(3)
+        ..[0] = "ping"
+        ..[1] = responsePort
+        ..[2] = pingType;
+    controlPort.send(message);
+  }
+
+  @patch
+  void addErrorListener(SendPort port) {
+    var message = new List(2)
+        ..[0] = "getErrors"
+        ..[1] = port;
+    controlPort.send(message);
+  }
+
+  @patch
+  void removeErrorListener(SendPort port) {
+    var message = new List(2)
+        ..[0] = "stopErrors"
+        ..[1] = port;
+    controlPort.send(message);
+  }
+}
+
+/** Default factory for receive ports. */
+@patch
+class ReceivePort {
+  @patch
+  factory ReceivePort() = ReceivePortImpl;
+
+  @patch
+  factory ReceivePort.fromRawReceivePort(RawReceivePort rawPort) {
+    return new ReceivePortImpl.fromRawReceivePort(rawPort);
+  }
+}
+
+@patch
+class RawReceivePort {
+  @patch
+  factory RawReceivePort([void handler(event)]) {
+    return new RawReceivePortImpl(handler);
+  }
+}
+
+@patch
+class Capability {
+  @patch
+  factory Capability() = CapabilityImpl;
+}
diff --git a/sdk/lib/_internal/compiler/js_lib/js_array.dart b/sdk/lib/_internal/compiler/js_lib/js_array.dart
new file mode 100644
index 0000000..c817e11
--- /dev/null
+++ b/sdk/lib/_internal/compiler/js_lib/js_array.dart
@@ -0,0 +1,387 @@
+// 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.
+
+part of _interceptors;
+
+/**
+ * The interceptor class for [List]. The compiler recognizes this
+ * class as an interceptor, and changes references to [:this:] to
+ * actually use the receiver of the method, which is generated as an extra
+ * argument added to each member.
+ */
+class JSArray<E> extends Interceptor implements List<E>, JSIndexable {
+
+  const JSArray();
+
+  /**
+   * Returns a fresh JavaScript Array, marked as fixed-length.
+   *
+   * [length] must be a non-negative integer.
+   */
+  factory JSArray.fixed(int length)  {
+    // Explicit type test is necessary to guard against JavaScript conversions
+    // in unchecked mode.
+    if ((length is !int) || (length < 0)) {
+      throw new ArgumentError("Length must be a non-negative integer: $length");
+    }
+    return new JSArray<E>.markFixed(JS('', 'new Array(#)', length));
+  }
+
+  /**
+   * Returns a fresh growable JavaScript Array of zero length length.
+   */
+  factory JSArray.emptyGrowable() => new JSArray<E>.markGrowable(JS('', '[]'));
+
+  /**
+   * Returns a fresh growable JavaScript Array with initial length.
+   *
+   * [validatedLength] must be a non-negative integer.
+   */
+  factory JSArray.growable(int length) {
+    // Explicit type test is necessary to guard against JavaScript conversions
+    // in unchecked mode.
+    if ((length is !int) || (length < 0)) {
+      throw new ArgumentError("Length must be a non-negative integer: $length");
+    }
+    return new JSArray<E>.markGrowable(JS('', 'new Array(#)', length));
+  }
+
+  /**
+   * Constructor for adding type parameters to an existing JavaScript Array.
+   * The compiler specially recognizes this constructor.
+   *
+   *     var a = new JSArray<int>.typed(JS('JSExtendableArray', '[]'));
+   *     a is List<int>    --> true
+   *     a is List<String> --> false
+   *
+   * Usually either the [JSArray.markFixed] or [JSArray.markGrowable]
+   * constructors is used instead.
+   *
+   * The input must be a JavaScript Array.  The JS form is just a re-assertion
+   * to help type analysis when the input type is sloppy.
+   */
+  factory JSArray.typed(allocation) => JS('JSArray', '#', allocation);
+
+  factory JSArray.markFixed(allocation) =>
+      JS('JSFixedArray', '#', markFixedList(new JSArray<E>.typed(allocation)));
+
+  factory JSArray.markGrowable(allocation) =>
+      JS('JSExtendableArray', '#', new JSArray<E>.typed(allocation));
+
+  static List markFixedList(List list) {
+    JS('void', r'#.fixed$length = init', list);
+    return JS('JSFixedArray', '#', list);
+  }
+
+  checkMutable(reason) {
+    if (this is !JSMutableArray) {
+      throw new UnsupportedError(reason);
+    }
+  }
+
+  checkGrowable(reason) {
+    if (this is !JSExtendableArray) {
+      throw new UnsupportedError(reason);
+    }
+  }
+
+  void add(E value) {
+    checkGrowable('add');
+    JS('void', r'#.push(#)', this, value);
+  }
+
+  E removeAt(int index) {
+    if (index is !int) throw new ArgumentError(index);
+    if (index < 0 || index >= length) {
+      throw new RangeError.value(index);
+    }
+    checkGrowable('removeAt');
+    return JS('var', r'#.splice(#, 1)[0]', this, index);
+  }
+
+  void insert(int index, E value) {
+    if (index is !int) throw new ArgumentError(index);
+    if (index < 0 || index > length) {
+      throw new RangeError.value(index);
+    }
+    checkGrowable('insert');
+    JS('void', r'#.splice(#, 0, #)', this, index, value);
+  }
+
+  void insertAll(int index, Iterable<E> iterable) {
+    checkGrowable('insertAll');
+    IterableMixinWorkaround.insertAllList(this, index, iterable);
+  }
+
+  void setAll(int index, Iterable<E> iterable) {
+    checkMutable('setAll');
+    IterableMixinWorkaround.setAllList(this, index, iterable);
+  }
+
+  E removeLast() {
+    checkGrowable('removeLast');
+    if (length == 0) throw new RangeError.value(-1);
+    return JS('var', r'#.pop()', this);
+  }
+
+  bool remove(Object element) {
+    checkGrowable('remove');
+    for (int i = 0; i < this.length; i++) {
+      if (this[i] == element) {
+        JS('var', r'#.splice(#, 1)', this, i);
+        return true;
+      }
+    }
+    return false;
+  }
+
+  void removeWhere(bool test(E element)) {
+    // This could, and should, be optimized.
+    IterableMixinWorkaround.removeWhereList(this, test);
+  }
+
+  void retainWhere(bool test(E element)) {
+    IterableMixinWorkaround.removeWhereList(this,
+                                            (E element) => !test(element));
+  }
+
+  Iterable<E> where(bool f(E element)) {
+    return new IterableMixinWorkaround<E>().where(this, f);
+  }
+
+  Iterable expand(Iterable f(E element)) {
+    return IterableMixinWorkaround.expand(this, f);
+  }
+
+  void addAll(Iterable<E> collection) {
+    for (E e in collection) {
+      this.add(e);
+    }
+  }
+
+  void clear() {
+    length = 0;
+  }
+
+  void forEach(void f(E element)) {
+    int getLength() => JS('int', '#.length', this);
+    int length = getLength();
+    for (int i = 0; i < length; i++) {
+      f(JS('', '#[#]', this, i));
+      if (length != getLength()) {
+        throw new ConcurrentModificationError(this);
+      }
+    }
+  }
+
+  Iterable map(f(E element)) {
+    return IterableMixinWorkaround.mapList(this, f);
+  }
+
+  String join([String separator = ""]) {
+    var list = new List(this.length);
+    for (int i = 0; i < this.length; i++) {
+      list[i] = "${this[i]}";
+    }
+    return JS('String', "#.join(#)", list, separator);
+  }
+
+  Iterable<E> take(int n) {
+    return new IterableMixinWorkaround<E>().takeList(this, n);
+  }
+
+  Iterable<E> takeWhile(bool test(E value)) {
+    return new IterableMixinWorkaround<E>().takeWhile(this, test);
+  }
+
+  Iterable<E> skip(int n) {
+    return new IterableMixinWorkaround<E>().skipList(this, n);
+  }
+
+  Iterable<E> skipWhile(bool test(E value)) {
+    return new IterableMixinWorkaround<E>().skipWhile(this, test);
+  }
+
+  E reduce(E combine(E value, E element)) {
+    return IterableMixinWorkaround.reduce(this, combine);
+  }
+
+  fold(initialValue, combine(previousValue, E element)) {
+    return IterableMixinWorkaround.fold(this, initialValue, combine);
+  }
+
+  dynamic firstWhere(bool test(E value), {Object orElse()}) {
+    return IterableMixinWorkaround.firstWhere(this, test, orElse);
+  }
+
+  dynamic lastWhere(bool test(E value), {Object orElse()}) {
+    return IterableMixinWorkaround.lastWhereList(this, test, orElse);
+  }
+
+  E singleWhere(bool test(E value)) {
+    return IterableMixinWorkaround.singleWhere(this, test);
+  }
+
+  E elementAt(int index) {
+    return this[index];
+  }
+
+  List<E> sublist(int start, [int end]) {
+    checkNull(start); // TODO(ahe): This is not specified but co19 tests it.
+    if (start is !int) throw new ArgumentError(start);
+    if (start < 0 || start > length) {
+      throw new RangeError.range(start, 0, length);
+    }
+    if (end == null) {
+      end = length;
+    } else {
+      if (end is !int) throw new ArgumentError(end);
+      if (end < start || end > length) {
+        throw new RangeError.range(end, start, length);
+      }
+    }
+    if (start == end) return <E>[];
+    return new JSArray<E>.markGrowable(
+        JS('', r'#.slice(#, #)', this, start, end));
+  }
+
+
+  Iterable<E> getRange(int start, int end) {
+    return new IterableMixinWorkaround<E>().getRangeList(this, start, end);
+  }
+
+  E get first {
+    if (length > 0) return this[0];
+    throw new StateError("No elements");
+  }
+
+  E get last {
+    if (length > 0) return this[length - 1];
+    throw new StateError("No elements");
+  }
+
+  E get single {
+    if (length == 1) return this[0];
+    if (length == 0) throw new StateError("No elements");
+    throw new StateError("More than one element");
+  }
+
+  void removeRange(int start, int end) {
+    checkGrowable('removeRange');
+    int receiverLength = this.length;
+    if (start < 0 || start > receiverLength) {
+      throw new RangeError.range(start, 0, receiverLength);
+    }
+    if (end < start || end > receiverLength) {
+      throw new RangeError.range(end, start, receiverLength);
+    }
+    Lists.copy(this,
+               end,
+               this,
+               start,
+               receiverLength - end);
+    this.length = receiverLength - (end - start);
+  }
+
+  void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
+    checkMutable('set range');
+    IterableMixinWorkaround.setRangeList(this, start, end, iterable, skipCount);
+  }
+
+  void fillRange(int start, int end, [E fillValue]) {
+    checkMutable('fill range');
+    IterableMixinWorkaround.fillRangeList(this, start, end, fillValue);
+  }
+
+  void replaceRange(int start, int end, Iterable<E> iterable) {
+    checkGrowable('removeRange');
+    IterableMixinWorkaround.replaceRangeList(this, start, end, iterable);
+  }
+
+  bool any(bool f(E element)) => IterableMixinWorkaround.any(this, f);
+
+  bool every(bool f(E element)) => IterableMixinWorkaround.every(this, f);
+
+  Iterable<E> get reversed =>
+      new IterableMixinWorkaround<E>().reversedList(this);
+
+  void sort([int compare(E a, E b)]) {
+    checkMutable('sort');
+    IterableMixinWorkaround.sortList(this, compare);
+  }
+
+  void shuffle([Random random]) {
+    IterableMixinWorkaround.shuffleList(this, random);
+  }
+
+  int indexOf(Object element, [int start = 0]) {
+    return IterableMixinWorkaround.indexOfList(this, element, start);
+  }
+
+  int lastIndexOf(Object element, [int start]) {
+    return IterableMixinWorkaround.lastIndexOfList(this, element, start);
+  }
+
+  bool contains(Object other) {
+    for (int i = 0; i < length; i++) {
+      if (this[i] == other) return true;
+    }
+    return false;
+  }
+
+  bool get isEmpty => length == 0;
+
+  bool get isNotEmpty => !isEmpty;
+
+  String toString() => ListBase.listToString(this);
+
+  List<E> toList({ bool growable: true }) {
+    if (growable) {
+      return new JSArray<E>.markGrowable(JS('', '#.slice()', this));
+    } else {
+      return new JSArray<E>.markFixed(JS('', '#.slice()', this));
+    }
+  }
+
+  Set<E> toSet() => new Set<E>.from(this);
+
+  Iterator<E> get iterator => new ListIterator<E>(this);
+
+  int get hashCode => Primitives.objectHashCode(this);
+
+  int get length => JS('JSUInt32', r'#.length', this);
+
+  void set length(int newLength) {
+    if (newLength is !int) throw new ArgumentError(newLength);
+    if (newLength < 0) throw new RangeError.value(newLength);
+    checkGrowable('set length');
+    JS('void', r'#.length = #', this, newLength);
+  }
+
+  E operator [](int index) {
+    if (index is !int) throw new ArgumentError(index);
+    if (index >= length || index < 0) throw new RangeError.value(index);
+    return JS('var', '#[#]', this, index);
+  }
+
+  void operator []=(int index, E value) {
+    checkMutable('indexed set');
+    if (index is !int) throw new ArgumentError(index);
+    if (index >= length || index < 0) throw new RangeError.value(index);
+    JS('void', r'#[#] = #', this, index, value);
+  }
+
+  Map<int, E> asMap() {
+    return new IterableMixinWorkaround<E>().asMapList(this);
+  }
+}
+
+/**
+ * Dummy subclasses that allow the backend to track more precise
+ * information about arrays through their type. The CPA type inference
+ * relies on the fact that these classes do not override [] nor []=.
+ */
+class JSMutableArray<E> extends JSArray<E> implements JSMutableIndexable {}
+class JSFixedArray<E> extends JSMutableArray<E> {}
+class JSExtendableArray<E> extends JSMutableArray<E> {}
diff --git a/sdk/lib/_internal/compiler/js_lib/js_helper.dart b/sdk/lib/_internal/compiler/js_lib/js_helper.dart
new file mode 100644
index 0000000..e56c3c8
--- /dev/null
+++ b/sdk/lib/_internal/compiler/js_lib/js_helper.dart
@@ -0,0 +1,3394 @@
+// 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 _js_helper;
+
+import 'shared/embedded_names.dart' show
+    ALL_CLASSES,
+    GET_ISOLATE_TAG,
+    INTERCEPTED_NAMES,
+    INTERCEPTORS_BY_TAG,
+    LEAF_TAGS,
+    METADATA;
+
+import 'dart:collection';
+import 'dart:_isolate_helper' show
+    IsolateNatives,
+    leaveJsAsync,
+    enterJsAsync,
+    isWorker;
+
+import 'dart:async' show Future, DeferredLoadException, Completer;
+
+import 'dart:_foreign_helper' show
+    DART_CLOSURE_TO_JS,
+    JS,
+    JS_CALL_IN_ISOLATE,
+    JS_CONST,
+    JS_CURRENT_ISOLATE,
+    JS_CURRENT_ISOLATE_CONTEXT,
+    JS_DART_OBJECT_CONSTRUCTOR,
+    JS_EFFECT,
+    JS_EMBEDDED_GLOBAL,
+    JS_FUNCTION_CLASS_NAME,
+    JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG,
+    JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG,
+    JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG,
+    JS_FUNCTION_TYPE_RETURN_TYPE_TAG,
+    JS_FUNCTION_TYPE_TAG,
+    JS_FUNCTION_TYPE_VOID_RETURN_TAG,
+    JS_GET_NAME,
+    JS_GET_FLAG,
+    JS_HAS_EQUALS,
+    JS_IS_INDEXABLE_FIELD_NAME,
+    JS_NULL_CLASS_NAME,
+    JS_OBJECT_CLASS_NAME,
+    JS_OPERATOR_AS_PREFIX,
+    JS_OPERATOR_IS_PREFIX,
+    JS_SIGNATURE_NAME,
+    JS_STRING_CONCAT,
+    RAW_DART_FUNCTION_REF;
+
+import 'dart:_interceptors';
+import 'dart:_internal' as _symbol_dev;
+import 'dart:_internal' show MappedIterable;
+
+import 'dart:_js_names' show
+    extractKeys,
+    mangledNames,
+    unmangleGlobalNameIfPreservedAnyways,
+    unmangleAllIdentifiersIfPreservedAnyways;
+
+part 'annotations.dart';
+part 'constant_map.dart';
+part 'native_helper.dart';
+part 'regexp_helper.dart';
+part 'string_helper.dart';
+part 'js_rti.dart';
+
+class _Patch {
+  const _Patch();
+}
+
+const _Patch patch = const _Patch();
+
+/// No-op method that is called to inform the compiler that preambles might
+/// be needed when executing the resulting JS file in a command-line
+/// JS engine.
+requiresPreamble() {}
+
+bool isJsIndexable(var object, var record) {
+  if (record != null) {
+    var result = dispatchRecordIndexability(record);
+    if (result != null) return result;
+  }
+  return object is JavaScriptIndexingBehavior;
+}
+
+String S(value) {
+  if (value is String) return value;
+  if (value is num) {
+    if (value != 0) {
+      // ""+x is faster than String(x) for integers on most browsers.
+      return JS('String', r'"" + (#)', value);
+    }
+  } else if (true == value) {
+    return 'true';
+  } else if (false == value) {
+    return 'false';
+  } else if (value == null) {
+    return 'null';
+  }
+  var res = value.toString();
+  if (res is !String) throw new ArgumentError(value);
+  return res;
+}
+
+createInvocationMirror(String name, internalName, kind, arguments,
+                       argumentNames) {
+  return new JSInvocationMirror(name,
+                                internalName,
+                                kind,
+                                arguments,
+                                argumentNames);
+}
+
+createUnmangledInvocationMirror(Symbol symbol, internalName, kind, arguments,
+                                argumentNames) {
+  return new JSInvocationMirror(symbol,
+                                internalName,
+                                kind,
+                                arguments,
+                                argumentNames);
+}
+
+void throwInvalidReflectionError(String memberName) {
+  throw new UnsupportedError("Can't use '$memberName' in reflection "
+      "because it is not included in a @MirrorsUsed annotation.");
+}
+
+/// Helper to print the given method information to the console the first
+/// time it is called with it.
+@NoInline()
+void traceHelper(String method) {
+  if (JS('bool', '!this.cache')) {
+    JS('', 'this.cache = Object.create(null)');
+  }
+  if (JS('bool', '!this.cache[#]', method)) {
+    JS('', 'console.log(#)', method);
+    JS('', 'this.cache[#] = true', method);
+  }
+}
+
+class JSInvocationMirror implements Invocation {
+  static const METHOD = 0;
+  static const GETTER = 1;
+  static const SETTER = 2;
+
+  /// When [_memberName] is a String, it holds the mangled name of this
+  /// invocation.  When it is a Symbol, it holds the unmangled name.
+  var /* String or Symbol */ _memberName;
+  final String _internalName;
+  final int _kind;
+  final List _arguments;
+  final List _namedArgumentNames;
+  /** Map from argument name to index in _arguments. */
+  Map<String, dynamic> _namedIndices = null;
+
+  JSInvocationMirror(this._memberName,
+                     this._internalName,
+                     this._kind,
+                     this._arguments,
+                     this._namedArgumentNames);
+
+  Symbol get memberName {
+    if (_memberName is Symbol) return _memberName;
+    String name = _memberName;
+    String unmangledName = mangledNames[name];
+    if (unmangledName != null) {
+      name = unmangledName.split(':')[0];
+    } else {
+      if (mangledNames[_internalName] == null) {
+        print("Warning: '$name' is used reflectively but not in MirrorsUsed. "
+              "This will break minified code.");
+      }
+    }
+    _memberName = new _symbol_dev.Symbol.unvalidated(name);
+    return _memberName;
+  }
+
+  bool get isMethod => _kind == METHOD;
+  bool get isGetter => _kind == GETTER;
+  bool get isSetter => _kind == SETTER;
+  bool get isAccessor => _kind != METHOD;
+
+  List get positionalArguments {
+    if (isGetter) return const [];
+    var argumentCount = _arguments.length - _namedArgumentNames.length;
+    if (argumentCount == 0) return const [];
+    var list = [];
+    for (var index = 0 ; index < argumentCount ; index++) {
+      list.add(_arguments[index]);
+    }
+    return makeLiteralListConst(list);
+  }
+
+  Map<Symbol, dynamic> get namedArguments {
+    // TODO: Make maps const (issue 10471)
+    if (isAccessor) return <Symbol, dynamic>{};
+    int namedArgumentCount = _namedArgumentNames.length;
+    int namedArgumentsStartIndex = _arguments.length - namedArgumentCount;
+    if (namedArgumentCount == 0) return <Symbol, dynamic>{};
+    var map = new Map<Symbol, dynamic>();
+    for (int i = 0; i < namedArgumentCount; i++) {
+      map[new _symbol_dev.Symbol.unvalidated(_namedArgumentNames[i])] =
+          _arguments[namedArgumentsStartIndex + i];
+    }
+    return map;
+  }
+
+  _getCachedInvocation(Object object) {
+    var interceptor = getInterceptor(object);
+    var receiver = object;
+    var name = _internalName;
+    var arguments = _arguments;
+    var embeddedInterceptedNames = JS_EMBEDDED_GLOBAL('', INTERCEPTED_NAMES);
+    // TODO(ngeoffray): If this functionality ever become performance
+    // critical, we might want to dynamically change [interceptedNames]
+    // to be a JavaScript object with intercepted names as property
+    // instead of a JavaScript array.
+    // TODO(floitsch): we already add stubs (tear-off getters) as properties
+    // in the embedded global interceptedNames.
+    // Finish the transition and always use the object as hashtable.
+    bool isIntercepted =
+        JS("bool",
+            'Object.prototype.hasOwnProperty.call(#, #) || #.indexOf(#) !== -1',
+            embeddedInterceptedNames, name, interceptedNames, name);
+    if (isIntercepted) {
+      receiver = interceptor;
+      if (JS('bool', '# === #', object, interceptor)) {
+        interceptor = null;
+      }
+    } else {
+      interceptor = null;
+    }
+    bool isCatchAll = false;
+    var method = JS('var', '#[#]', receiver, name);
+    if (JS('bool', 'typeof # != "function"', method) ) {
+      String baseName = _symbol_dev.Symbol.getName(memberName);
+      method = JS('', '#[# + "*"]', receiver, baseName);
+      if (method == null) {
+        interceptor = getInterceptor(object);
+        method = JS('', '#[# + "*"]', interceptor, baseName);
+        if (method != null) {
+          isIntercepted = true;
+          receiver = interceptor;
+        } else {
+          interceptor = null;
+        }
+      }
+      isCatchAll = true;
+    }
+    if (JS('bool', 'typeof # == "function"', method)) {
+      if (isCatchAll) {
+        return new CachedCatchAllInvocation(
+            name, method, isIntercepted, interceptor);
+      } else {
+        return new CachedInvocation(name, method, isIntercepted, interceptor);
+      }
+    } else {
+      // In this case, receiver doesn't implement name.  So we should
+      // invoke noSuchMethod instead (which will often throw a
+      // NoSuchMethodError).
+      return new CachedNoSuchMethodInvocation(interceptor);
+    }
+  }
+
+  /// This method is called by [InstanceMirror.delegate].
+  static invokeFromMirror(JSInvocationMirror invocation, Object victim) {
+    var cached = invocation._getCachedInvocation(victim);
+    if (cached.isNoSuchMethod) {
+      return cached.invokeOn(victim, invocation);
+    } else {
+      return cached.invokeOn(victim, invocation._arguments);
+    }
+  }
+
+  static getCachedInvocation(JSInvocationMirror invocation, Object victim) {
+    return invocation._getCachedInvocation(victim);
+  }
+}
+
+class CachedInvocation {
+  // The mangled name of this invocation.
+  String mangledName;
+
+  /// The JS function to call.
+  var jsFunction;
+
+  /// True if this is an intercepted call.
+  bool isIntercepted;
+
+  /// Non-null interceptor if this is an intercepted call through an
+  /// [Interceptor].
+  Interceptor cachedInterceptor;
+
+  CachedInvocation(this.mangledName,
+                   this.jsFunction,
+                   this.isIntercepted,
+                   this.cachedInterceptor);
+
+  bool get isNoSuchMethod => false;
+  bool get isGetterStub => JS("bool", "!!#.\$getterStub", jsFunction);
+
+  /// Applies [jsFunction] to [victim] with [arguments].
+  /// Users of this class must take care to check the arguments first.
+  invokeOn(Object victim, List arguments) {
+    var receiver = victim;
+    if (!isIntercepted) {
+      if (arguments is! JSArray) arguments = new List.from(arguments);
+    } else {
+      arguments = [victim]..addAll(arguments);
+      if (cachedInterceptor != null) receiver = cachedInterceptor;
+    }
+    return JS("var", "#.apply(#, #)", jsFunction, receiver, arguments);
+  }
+}
+
+class CachedCatchAllInvocation extends CachedInvocation {
+  final ReflectionInfo info;
+
+  CachedCatchAllInvocation(String name,
+                           jsFunction,
+                           bool isIntercepted,
+                           Interceptor cachedInterceptor)
+      : info = new ReflectionInfo(jsFunction),
+        super(name, jsFunction, isIntercepted, cachedInterceptor);
+
+  bool get isGetterStub => false;
+
+  invokeOn(Object victim, List arguments) {
+    var receiver = victim;
+    int providedArgumentCount;
+    int fullParameterCount =
+        info.requiredParameterCount + info.optionalParameterCount;
+    if (!isIntercepted) {
+      if (arguments is JSArray) {
+        providedArgumentCount = arguments.length;
+        // If we need to add extra arguments before calling, we have
+        // to copy the arguments array.
+        if (providedArgumentCount < fullParameterCount) {
+          arguments = new List.from(arguments);
+        }
+      } else {
+        arguments = new List.from(arguments);
+        providedArgumentCount = arguments.length;
+      }
+    } else {
+      arguments = [victim]..addAll(arguments);
+      if (cachedInterceptor != null) receiver = cachedInterceptor;
+      providedArgumentCount = arguments.length - 1;
+    }
+    if (info.areOptionalParametersNamed &&
+        (providedArgumentCount > info.requiredParameterCount)) {
+      throw new UnimplementedNoSuchMethodError(
+          "Invocation of unstubbed method '${info.reflectionName}'"
+          " with ${arguments.length} arguments.");
+    } else if (providedArgumentCount < info.requiredParameterCount) {
+      throw new UnimplementedNoSuchMethodError(
+          "Invocation of unstubbed method '${info.reflectionName}'"
+          " with $providedArgumentCount arguments (too few).");
+    } else if (providedArgumentCount > fullParameterCount) {
+      throw new UnimplementedNoSuchMethodError(
+          "Invocation of unstubbed method '${info.reflectionName}'"
+          " with $providedArgumentCount arguments (too many).");
+    }
+    for (int i = providedArgumentCount; i < fullParameterCount; i++) {
+      arguments.add(getMetadata(info.defaultValue(i)));
+    }
+    return JS("var", "#.apply(#, #)", jsFunction, receiver, arguments);
+  }
+}
+
+class CachedNoSuchMethodInvocation {
+  /// Non-null interceptor if this is an intercepted call through an
+  /// [Interceptor].
+  var interceptor;
+
+  CachedNoSuchMethodInvocation(this.interceptor);
+
+  bool get isNoSuchMethod => true;
+  bool get isGetterStub => false;
+
+  invokeOn(Object victim, Invocation invocation) {
+    var receiver = (interceptor == null) ? victim : interceptor;
+    return receiver.noSuchMethod(invocation);
+  }
+}
+
+class ReflectionInfo {
+  static const int REQUIRED_PARAMETERS_INFO = 0;
+  static const int OPTIONAL_PARAMETERS_INFO = 1;
+  static const int FUNCTION_TYPE_INDEX = 2;
+  static const int FIRST_DEFAULT_ARGUMENT = 3;
+
+  /// A JavaScript function object.
+  final jsFunction;
+
+  /// Raw reflection information.
+  final List data;
+
+  /// Is this a getter or a setter.
+  final bool isAccessor;
+
+  /// Number of required parameters.
+  final int requiredParameterCount;
+
+  /// Number of optional parameters.
+  final int optionalParameterCount;
+
+  /// Are optional parameters named.
+  final bool areOptionalParametersNamed;
+
+  /// Either an index to the function type in the embedded `metadata` global or
+  /// a JavaScript function object which can compute such a type (presumably
+  /// due to free type variables).
+  final functionType;
+
+  List cachedSortedIndices;
+
+  ReflectionInfo.internal(this.jsFunction,
+                          this.data,
+                          this.isAccessor,
+                          this.requiredParameterCount,
+                          this.optionalParameterCount,
+                          this.areOptionalParametersNamed,
+                          this.functionType);
+
+  factory ReflectionInfo(jsFunction) {
+    List data = JS('JSExtendableArray|Null', r'#.$reflectionInfo', jsFunction);
+    if (data == null) return null;
+    data = JSArray.markFixedList(data);
+
+    int requiredParametersInfo =
+        JS('int', '#[#]', data, REQUIRED_PARAMETERS_INFO);
+    int requiredParameterCount = JS('int', '# >> 1', requiredParametersInfo);
+    bool isAccessor = (requiredParametersInfo & 1) == 1;
+
+    int optionalParametersInfo =
+        JS('int', '#[#]', data, OPTIONAL_PARAMETERS_INFO);
+    int optionalParameterCount = JS('int', '# >> 1', optionalParametersInfo);
+    bool areOptionalParametersNamed = (optionalParametersInfo & 1) == 1;
+
+    var functionType = JS('', '#[#]', data, FUNCTION_TYPE_INDEX);
+    return new ReflectionInfo.internal(
+        jsFunction, data, isAccessor, requiredParameterCount,
+        optionalParameterCount, areOptionalParametersNamed, functionType);
+  }
+
+  String parameterName(int parameter) {
+    int metadataIndex;
+    if (JS_GET_FLAG('MUST_RETAIN_METADATA')) {
+      metadataIndex = JS('int', '#[2 * # + # + #]', data,
+          parameter, optionalParameterCount, FIRST_DEFAULT_ARGUMENT);
+    } else {
+      metadataIndex = JS('int', '#[# + # + #]', data,
+          parameter, optionalParameterCount, FIRST_DEFAULT_ARGUMENT);
+    }
+    var metadata = JS_EMBEDDED_GLOBAL('', METADATA);
+    return JS('String', '#[#]', metadata, metadataIndex);
+  }
+
+  List<int> parameterMetadataAnnotations(int parameter) {
+    if (!JS_GET_FLAG('MUST_RETAIN_METADATA')) {
+      throw new StateError('metadata has not been preserved');
+    } else {
+      return JS('', '#[2 * # + # + # + 1]', data, parameter,
+          optionalParameterCount, FIRST_DEFAULT_ARGUMENT);
+    }
+  }
+
+  int defaultValue(int parameter) {
+    if (parameter < requiredParameterCount) return null;
+    return JS('int', '#[# + # - #]', data,
+              FIRST_DEFAULT_ARGUMENT, parameter, requiredParameterCount);
+  }
+
+  /// Returns the default value of the [parameter]th entry of the list of
+  /// parameters sorted by name.
+  int defaultValueInOrder(int parameter) {
+    if (parameter < requiredParameterCount) return null;
+
+    if (!areOptionalParametersNamed || optionalParameterCount == 1) {
+      return defaultValue(parameter);
+    }
+
+    int index = sortedIndex(parameter - requiredParameterCount);
+    return defaultValue(index);
+  }
+
+  /// Returns the default value of the [parameter]th entry of the list of
+  /// parameters sorted by name.
+  String parameterNameInOrder(int parameter) {
+    if (parameter < requiredParameterCount) return null;
+
+    if (!areOptionalParametersNamed ||
+        optionalParameterCount == 1) {
+      return parameterName(parameter);
+    }
+
+    int index = sortedIndex(parameter - requiredParameterCount);
+    return parameterName(index);
+  }
+
+  /// Computes the index of the parameter in the list of named parameters sorted
+  /// by their name.
+  int sortedIndex(int unsortedIndex) {
+    if (cachedSortedIndices == null) {
+      // TODO(karlklose): cache this between [ReflectionInfo] instances or cache
+      // [ReflectionInfo] instances by [jsFunction].
+      cachedSortedIndices = new List(optionalParameterCount);
+      Map<String, int> positions = <String, int>{};
+      for (int i = 0; i < optionalParameterCount; i++) {
+        int index = requiredParameterCount + i;
+        positions[parameterName(index)] = index;
+      }
+      int index = 0;
+      (positions.keys.toList()..sort()).forEach((String name) {
+        cachedSortedIndices[index++] = positions[name];
+      });
+    }
+    return cachedSortedIndices[unsortedIndex];
+  }
+
+  @NoInline()
+  computeFunctionRti(jsConstructor) {
+    if (JS('bool', 'typeof # == "number"', functionType)) {
+      return getMetadata(functionType);
+    } else if (JS('bool', 'typeof # == "function"', functionType)) {
+      var fakeInstance = JS('', 'new #()', jsConstructor);
+      setRuntimeTypeInfo(
+          fakeInstance, JS('JSExtendableArray', '#["<>"]', fakeInstance));
+      return JS('=Object|Null', r'#.apply({$receiver:#})',
+                functionType, fakeInstance);
+    } else {
+      throw new RuntimeError('Unexpected function type');
+    }
+  }
+
+  String get reflectionName => JS('String', r'#.$reflectionName', jsFunction);
+}
+
+getMetadata(int index) {
+  var metadata = JS_EMBEDDED_GLOBAL('', METADATA);
+  return JS('', '#[#]', metadata, index);
+}
+
+class Primitives {
+  /// Isolate-unique ID for caching [JsClosureMirror.function].
+  /// Note the initial value is used by the first isolate (or if there are no
+  /// isolates), new isolates will update this value to avoid conflicts by
+  /// calling [initializeStatics].
+  static String mirrorFunctionCacheName = '\$cachedFunction';
+
+  /// Isolate-unique ID for caching [JsInstanceMirror._invoke].
+  static String mirrorInvokeCacheName = '\$cachedInvocation';
+
+  /// Called when creating a new isolate (see _IsolateContext constructor in
+  /// isolate_helper.dart).
+  /// Please don't add complicated code to this method, as it will impact
+  /// start-up performance.
+  static void initializeStatics(int id) {
+    // Benchmarking shows significant performance improvements if this is a
+    // fixed value.
+    mirrorFunctionCacheName += '_$id';
+    mirrorInvokeCacheName += '_$id';
+  }
+
+  static int objectHashCode(object) {
+    int hash = JS('int|Null', r'#.$identityHash', object);
+    if (hash == null) {
+      hash = JS('int', '(Math.random() * 0x3fffffff) | 0');
+      JS('void', r'#.$identityHash = #', object, hash);
+    }
+    return JS('int', '#', hash);
+  }
+
+  static _throwFormatException(String string) {
+    throw new FormatException(string);
+  }
+
+  static int parseInt(String source,
+                      int radix,
+                      int handleError(String source)) {
+    if (handleError == null) handleError = _throwFormatException;
+
+    checkString(source);
+    var match = JS('JSExtendableArray|Null',
+        r'/^\s*[+-]?((0x[a-f0-9]+)|(\d+)|([a-z0-9]+))\s*$/i.exec(#)',
+        source);
+    int digitsIndex = 1;
+    int hexIndex = 2;
+    int decimalIndex = 3;
+    int nonDecimalHexIndex = 4;
+    if (radix == null) {
+      radix = 10;
+      if (match != null) {
+        if (match[hexIndex] != null) {
+          // Cannot fail because we know that the digits are all hex.
+          return JS('num', r'parseInt(#, 16)', source);
+        }
+        if (match[decimalIndex] != null) {
+          // Cannot fail because we know that the digits are all decimal.
+          return JS('num', r'parseInt(#, 10)', source);
+        }
+        return handleError(source);
+      }
+    } else {
+      if (radix is! int) throw new ArgumentError("Radix is not an integer");
+      if (radix < 2 || radix > 36) {
+        throw new RangeError("Radix $radix not in range 2..36");
+      }
+      if (match != null) {
+        if (radix == 10 && match[decimalIndex] != null) {
+          // Cannot fail because we know that the digits are all decimal.
+          return JS('num', r'parseInt(#, 10)', source);
+        }
+        if (radix < 10 || match[decimalIndex] == null) {
+          // We know that the characters must be ASCII as otherwise the
+          // regexp wouldn't have matched. Lowercasing by doing `| 0x20` is thus
+          // guaranteed to be a safe operation, since it preserves digits
+          // and lower-cases ASCII letters.
+          int maxCharCode;
+          if (radix <= 10) {
+            // Allow all digits less than the radix. For example 0, 1, 2 for
+            // radix 3.
+            // "0".codeUnitAt(0) + radix - 1;
+            maxCharCode = 0x30 + radix - 1;
+          } else {
+            // Letters are located after the digits in ASCII. Therefore we
+            // only check for the character code. The regexp above made already
+            // sure that the string does not contain anything but digits or
+            // letters.
+            // "a".codeUnitAt(0) + (radix - 10) - 1;
+            maxCharCode = 0x61 + radix - 10 - 1;
+          }
+          String digitsPart = match[digitsIndex];
+          for (int i = 0; i < digitsPart.length; i++) {
+            int characterCode = digitsPart.codeUnitAt(0) | 0x20;
+            if (digitsPart.codeUnitAt(i) > maxCharCode) {
+              return handleError(source);
+            }
+          }
+        }
+      }
+    }
+    if (match == null) return handleError(source);
+    return JS('num', r'parseInt(#, #)', source, radix);
+  }
+
+  static double parseDouble(String source, double handleError(String source)) {
+    checkString(source);
+    if (handleError == null) handleError = _throwFormatException;
+    // Notice that JS parseFloat accepts garbage at the end of the string.
+    // Accept only:
+    // - [+/-]NaN
+    // - [+/-]Infinity
+    // - a Dart double literal
+    // We do allow leading or trailing whitespace.
+    if (!JS('bool',
+            r'/^\s*[+-]?(?:Infinity|NaN|'
+                r'(?:\.\d+|\d+(?:\.\d*)?)(?:[eE][+-]?\d+)?)\s*$/.test(#)',
+            source)) {
+      return handleError(source);
+    }
+    var result = JS('num', r'parseFloat(#)', source);
+    if (result.isNaN) {
+      var trimmed = source.trim();
+      if (trimmed == 'NaN' || trimmed == '+NaN' || trimmed == '-NaN') {
+        return result;
+      }
+      return handleError(source);
+    }
+    return result;
+  }
+
+  /** [: r"$".codeUnitAt(0) :] */
+  static const int DOLLAR_CHAR_VALUE = 36;
+
+  /// Creates a string containing the complete type for the class [className]
+  /// with the given type arguments.
+  ///
+  /// In minified mode, uses the unminified names if available.
+  static String formatType(String className, List typeArguments) {
+    return unmangleAllIdentifiersIfPreservedAnyways
+        ('$className${joinArguments(typeArguments, 0)}');
+  }
+
+  /// Returns the type of [object] as a string (including type arguments).
+  ///
+  /// In minified mode, uses the unminified names if available.
+  static String objectTypeName(Object object) {
+    String name = constructorNameFallback(getInterceptor(object));
+    if (name == 'Object') {
+      // Try to decompile the constructor by turning it into a string and get
+      // the name out of that. If the decompiled name is a string containing an
+      // identifier, we use that instead of the very generic 'Object'.
+      var decompiled =
+          JS('var', r'#.match(/^\s*function\s*(\S*)\s*\(/)[1]',
+              JS('var', r'String(#.constructor)', object));
+      if (decompiled is String)
+        if (JS('bool', r'/^\w+$/.test(#)', decompiled))
+          name = decompiled;
+    }
+    // TODO(kasperl): If the namer gave us a fresh global name, we may
+    // want to remove the numeric suffix that makes it unique too.
+    if (name.length > 1 && identical(name.codeUnitAt(0), DOLLAR_CHAR_VALUE)) {
+      name = name.substring(1);
+    }
+    return formatType(name, getRuntimeTypeInfo(object));
+  }
+
+  /// In minified mode, uses the unminified names if available.
+  static String objectToString(Object object) {
+    String name = objectTypeName(object);
+    return "Instance of '$name'";
+  }
+
+  static num dateNow() => JS('num', r'Date.now()');
+
+  static void initTicker() {
+    if (timerFrequency != null) return;
+    // Start with low-resolution. We overwrite the fields if we find better.
+    timerFrequency = 1000;
+    timerTicks = dateNow;
+    if (JS('bool', 'typeof window == "undefined"')) return;
+    var window = JS('var', 'window');
+    if (window == null) return;
+    var performance = JS('var', '#.performance', window);
+    if (performance == null) return;
+    if (JS('bool', 'typeof #.now != "function"', performance)) return;
+    timerFrequency = 1000000;
+    timerTicks = () => (1000 * JS('num', '#.now()', performance)).floor();
+  }
+
+  static int timerFrequency;
+  static Function timerTicks;
+
+  static bool get isD8 {
+    return JS('bool',
+              'typeof version == "function"'
+              ' && typeof os == "object" && "system" in os');
+  }
+
+  static bool get isJsshell {
+    return JS('bool',
+              'typeof version == "function" && typeof system == "function"');
+  }
+
+  static String currentUri() {
+    requiresPreamble();
+    // In a browser return self.location.href.
+    if (JS('bool', '!!self.location')) {
+      return JS('String', 'self.location.href');
+    }
+
+    return null;
+  }
+
+  // This is to avoid stack overflows due to very large argument arrays in
+  // apply().  It fixes http://dartbug.com/6919
+  static String _fromCharCodeApply(List<int> array) {
+    String result = "";
+    const kMaxApply = 500;
+    int end = array.length;
+    for (var i = 0; i < end; i += kMaxApply) {
+      var subarray;
+      if (end <= kMaxApply) {
+        subarray = array;
+      } else {
+        subarray = JS('JSExtendableArray', r'#.slice(#, #)', array,
+                      i, i + kMaxApply < end ? i + kMaxApply : end);
+      }
+      result = JS('String', '# + String.fromCharCode.apply(#, #)',
+                  result, null, subarray);
+    }
+    return result;
+  }
+
+  static String stringFromCodePoints(codePoints) {
+    List<int> a = <int>[];
+    for (var i in codePoints) {
+      if (i is !int) throw new ArgumentError(i);
+      if (i <= 0xffff) {
+        a.add(i);
+      } else if (i <= 0x10ffff) {
+        a.add(0xd800 + ((((i - 0x10000) >> 10) & 0x3ff)));
+        a.add(0xdc00 + (i & 0x3ff));
+      } else {
+        throw new ArgumentError(i);
+      }
+    }
+    return _fromCharCodeApply(a);
+  }
+
+  static String stringFromCharCodes(charCodes) {
+    for (var i in charCodes) {
+      if (i is !int) throw new ArgumentError(i);
+      if (i < 0) throw new ArgumentError(i);
+      if (i > 0xffff) return stringFromCodePoints(charCodes);
+    }
+    return _fromCharCodeApply(charCodes);
+  }
+
+  static String stringFromCharCode(charCode) {
+    if (0 <= charCode) {
+      if (charCode <= 0xffff) {
+        return JS('String', 'String.fromCharCode(#)', charCode);
+      }
+      if (charCode <= 0x10ffff) {
+        var bits = charCode - 0x10000;
+        var low = 0xDC00 | (bits & 0x3ff);
+        var high = 0xD800 | (bits >> 10);
+        return  JS('String', 'String.fromCharCode(#, #)', high, low);
+      }
+    }
+    throw new RangeError.range(charCode, 0, 0x10ffff);
+  }
+
+  static String stringConcatUnchecked(String string1, String string2) {
+    return JS_STRING_CONCAT(string1, string2);
+  }
+
+  static String flattenString(String str) {
+    return JS('', "#.charCodeAt(0) == 0 ? # : #", str, str, str);
+  }
+
+  static String getTimeZoneName(receiver) {
+    // Firefox and Chrome emit the timezone in parenthesis.
+    // Example: "Wed May 16 2012 21:13:00 GMT+0200 (CEST)".
+    // We extract this name using a regexp.
+    var d = lazyAsJsDate(receiver);
+    List match = JS('JSArray|Null', r'/\((.*)\)/.exec(#.toString())', d);
+    if (match != null) return match[1];
+
+    // Internet Explorer 10+ emits the zone name without parenthesis:
+    // Example: Thu Oct 31 14:07:44 PDT 2013
+    match = JS('JSArray|Null',
+                // Thu followed by a space.
+                r'/^[A-Z,a-z]{3}\s'
+                // Oct 31 followed by space.
+                r'[A-Z,a-z]{3}\s\d+\s'
+                // Time followed by a space.
+                r'\d{2}:\d{2}:\d{2}\s'
+                // The time zone name followed by a space.
+                r'([A-Z]{3,5})\s'
+                // The year.
+                r'\d{4}$/'
+                '.exec(#.toString())',
+                d);
+    if (match != null) return match[1];
+
+    // IE 9 and Opera don't provide the zone name. We fall back to emitting the
+    // UTC/GMT offset.
+    // Example (IE9): Wed Nov 20 09:51:00 UTC+0100 2013
+    //       (Opera): Wed Nov 20 2013 11:03:38 GMT+0100
+    match = JS('JSArray|Null', r'/(?:GMT|UTC)[+-]\d{4}/.exec(#.toString())', d);
+    if (match != null) return match[0];
+    return "";
+  }
+
+  static int getTimeZoneOffsetInMinutes(receiver) {
+    // Note that JS and Dart disagree on the sign of the offset.
+    return -JS('int', r'#.getTimezoneOffset()', lazyAsJsDate(receiver));
+  }
+
+  static valueFromDecomposedDate(years, month, day, hours, minutes, seconds,
+                                 milliseconds, isUtc) {
+    final int MAX_MILLISECONDS_SINCE_EPOCH = 8640000000000000;
+    checkInt(years);
+    checkInt(month);
+    checkInt(day);
+    checkInt(hours);
+    checkInt(minutes);
+    checkInt(seconds);
+    checkInt(milliseconds);
+    checkBool(isUtc);
+    var jsMonth = month - 1;
+    var value;
+    if (isUtc) {
+      value = JS('num', r'Date.UTC(#, #, #, #, #, #, #)',
+                 years, jsMonth, day, hours, minutes, seconds, milliseconds);
+    } else {
+      value = JS('num', r'new Date(#, #, #, #, #, #, #).valueOf()',
+                 years, jsMonth, day, hours, minutes, seconds, milliseconds);
+    }
+    if (value.isNaN ||
+        value < -MAX_MILLISECONDS_SINCE_EPOCH ||
+        value > MAX_MILLISECONDS_SINCE_EPOCH) {
+      return null;
+    }
+    if (years <= 0 || years < 100) return patchUpY2K(value, years, isUtc);
+    return value;
+  }
+
+  static patchUpY2K(value, years, isUtc) {
+    var date = JS('', r'new Date(#)', value);
+    if (isUtc) {
+      JS('num', r'#.setUTCFullYear(#)', date, years);
+    } else {
+      JS('num', r'#.setFullYear(#)', date, years);
+    }
+    return JS('num', r'#.valueOf()', date);
+  }
+
+  // Lazily keep a JS Date stored in the JS object.
+  static lazyAsJsDate(receiver) {
+    if (JS('bool', r'#.date === (void 0)', receiver)) {
+      JS('void', r'#.date = new Date(#)', receiver,
+         receiver.millisecondsSinceEpoch);
+    }
+    return JS('var', r'#.date', receiver);
+  }
+
+  // The getters for date and time parts below add a positive integer to ensure
+  // that the result is really an integer, because the JavaScript implementation
+  // may return -0.0 instead of 0.
+
+  static getYear(receiver) {
+    return (receiver.isUtc)
+      ? JS('int', r'(#.getUTCFullYear() + 0)', lazyAsJsDate(receiver))
+      : JS('int', r'(#.getFullYear() + 0)', lazyAsJsDate(receiver));
+  }
+
+  static getMonth(receiver) {
+    return (receiver.isUtc)
+      ? JS('int', r'#.getUTCMonth() + 1', lazyAsJsDate(receiver))
+      : JS('int', r'#.getMonth() + 1', lazyAsJsDate(receiver));
+  }
+
+  static getDay(receiver) {
+    return (receiver.isUtc)
+      ? JS('int', r'(#.getUTCDate() + 0)', lazyAsJsDate(receiver))
+      : JS('int', r'(#.getDate() + 0)', lazyAsJsDate(receiver));
+  }
+
+  static getHours(receiver) {
+    return (receiver.isUtc)
+      ? JS('int', r'(#.getUTCHours() + 0)', lazyAsJsDate(receiver))
+      : JS('int', r'(#.getHours() + 0)', lazyAsJsDate(receiver));
+  }
+
+  static getMinutes(receiver) {
+    return (receiver.isUtc)
+      ? JS('int', r'(#.getUTCMinutes() + 0)', lazyAsJsDate(receiver))
+      : JS('int', r'(#.getMinutes() + 0)', lazyAsJsDate(receiver));
+  }
+
+  static getSeconds(receiver) {
+    return (receiver.isUtc)
+      ? JS('int', r'(#.getUTCSeconds() + 0)', lazyAsJsDate(receiver))
+      : JS('int', r'(#.getSeconds() + 0)', lazyAsJsDate(receiver));
+  }
+
+  static getMilliseconds(receiver) {
+    return (receiver.isUtc)
+      ? JS('int', r'(#.getUTCMilliseconds() + 0)', lazyAsJsDate(receiver))
+      : JS('int', r'(#.getMilliseconds() + 0)', lazyAsJsDate(receiver));
+  }
+
+  static getWeekday(receiver) {
+    int weekday = (receiver.isUtc)
+      ? JS('int', r'#.getUTCDay() + 0', lazyAsJsDate(receiver))
+      : JS('int', r'#.getDay() + 0', lazyAsJsDate(receiver));
+    // Adjust by one because JS weeks start on Sunday.
+    return (weekday + 6) % 7 + 1;
+  }
+
+  static valueFromDateString(str) {
+    if (str is !String) throw new ArgumentError(str);
+    var value = JS('num', r'Date.parse(#)', str);
+    if (value.isNaN) throw new ArgumentError(str);
+    return value;
+  }
+
+  static getProperty(object, key) {
+    if (object == null || object is bool || object is num || object is String) {
+      throw new ArgumentError(object);
+    }
+    return JS('var', '#[#]', object, key);
+  }
+
+  static void setProperty(object, key, value) {
+    if (object == null || object is bool || object is num || object is String) {
+      throw new ArgumentError(object);
+    }
+    JS('void', '#[#] = #', object, key, value);
+  }
+
+  static functionNoSuchMethod(function,
+                              List positionalArguments,
+                              Map<String, dynamic> namedArguments) {
+    int argumentCount = 0;
+    List arguments = [];
+    List namedArgumentList = [];
+
+    if (positionalArguments != null) {
+      argumentCount += positionalArguments.length;
+      arguments.addAll(positionalArguments);
+    }
+
+    String names = '';
+    if (namedArguments != null && !namedArguments.isEmpty) {
+      namedArguments.forEach((String name, argument) {
+        names = '$names\$$name';
+        namedArgumentList.add(name);
+        arguments.add(argument);
+        argumentCount++;
+      });
+    }
+
+    String selectorName =
+      '${JS_GET_NAME("CALL_PREFIX")}\$$argumentCount$names';
+
+    return function.noSuchMethod(
+        createUnmangledInvocationMirror(
+            #call,
+            selectorName,
+            JSInvocationMirror.METHOD,
+            arguments,
+            namedArgumentList));
+  }
+
+  static applyFunction(Function function,
+                       List positionalArguments,
+                       Map<String, dynamic> namedArguments) {
+    if (namedArguments != null && !namedArguments.isEmpty) {
+      // TODO(ahe): The following code can be shared with
+      // JsInstanceMirror.invoke.
+      var interceptor = getInterceptor(function);
+      var jsFunction = JS('', '#["call*"]', interceptor);
+
+      if (jsFunction == null) {
+        return functionNoSuchMethod(
+            function, positionalArguments, namedArguments);
+      }
+      ReflectionInfo info = new ReflectionInfo(jsFunction);
+      if (info == null || !info.areOptionalParametersNamed) {
+        return functionNoSuchMethod(
+            function, positionalArguments, namedArguments);
+      }
+
+      if (positionalArguments != null) {
+        positionalArguments = new List.from(positionalArguments);
+      } else {
+        positionalArguments = [];
+      }
+      // Check the number of positional arguments is valid.
+      if (info.requiredParameterCount != positionalArguments.length) {
+        return functionNoSuchMethod(
+            function, positionalArguments, namedArguments);
+      }
+      var defaultArguments = new Map();
+      for (int i = 0; i < info.optionalParameterCount; i++) {
+        int index = i + info.requiredParameterCount;
+        var parameterName = info.parameterNameInOrder(index);
+        var value = info.defaultValueInOrder(index);
+        var defaultValue = getMetadata(value);
+        defaultArguments[parameterName] = defaultValue;
+      }
+      bool bad = false;
+      namedArguments.forEach((String parameter, value) {
+        if (defaultArguments.containsKey(parameter)) {
+          defaultArguments[parameter] = value;
+        } else {
+          // Extraneous named argument.
+          bad = true;
+        }
+      });
+      if (bad) {
+        return functionNoSuchMethod(
+            function, positionalArguments, namedArguments);
+      }
+      positionalArguments.addAll(defaultArguments.values);
+      return JS('', '#.apply(#, #)', jsFunction, function, positionalArguments);
+    }
+
+    int argumentCount = 0;
+    List arguments = [];
+
+    if (positionalArguments != null) {
+      argumentCount += positionalArguments.length;
+      arguments.addAll(positionalArguments);
+    }
+
+    String selectorName = '${JS_GET_NAME("CALL_PREFIX")}\$$argumentCount';
+    var jsFunction = JS('var', '#[#]', function, selectorName);
+    if (jsFunction == null) {
+
+      // TODO(ahe): This might occur for optional arguments if there is no call
+      // selector with that many arguments.
+
+      return
+          functionNoSuchMethod(function, positionalArguments, namedArguments);
+    }
+    // We bound 'this' to [function] because of how we compile
+    // closures: escaped local variables are stored and accessed through
+    // [function].
+    return JS('var', '#.apply(#, #)', jsFunction, function, arguments);
+  }
+
+  static _mangledNameMatchesType(String mangledName, TypeImpl type) {
+    return JS('bool', '# == #', mangledName, type._typeName);
+  }
+
+  static bool identicalImplementation(a, b) {
+    return JS('bool', '# == null', a)
+      ? JS('bool', '# == null', b)
+      : JS('bool', '# === #', a, b);
+  }
+
+  static StackTrace extractStackTrace(Error error) {
+    return getTraceFromException(JS('', r'#.$thrownJsError', error));
+  }
+}
+
+/// Helper class for allocating and using JS object literals as caches.
+class JsCache {
+  /// Returns a JavaScript object suitable for use as a cache.
+  static allocate() {
+    var result = JS('=Object', 'Object.create(null)');
+    // Deleting a property makes V8 assume that it shouldn't create a hidden
+    // class for [result] and map transitions. Although these map transitions
+    // pay off if there are many cache hits for the same keys, it becomes
+    // really slow when there aren't many repeated hits.
+    JS('void', '#.x=0', result);
+    JS('void', 'delete #.x', result);
+    return result;
+  }
+
+  static fetch(cache, String key) {
+    return JS('', '#[#]', cache, key);
+  }
+
+  static void update(cache, String key, value) {
+    JS('void', '#[#] = #', cache, key, value);
+  }
+}
+
+/**
+ * Called by generated code to throw an illegal-argument exception,
+ * for example, if a non-integer index is given to an optimized
+ * indexed access.
+ */
+iae(argument) {
+  throw new ArgumentError(argument);
+}
+
+/**
+ * Called by generated code to throw an index-out-of-range exception,
+ * for example, if a bounds check fails in an optimized indexed
+ * access.  This may also be called when the index is not an integer, in
+ * which case it throws an illegal-argument exception instead, like
+ * [iae], or when the receiver is null.
+ */
+ioore(receiver, index) {
+  if (receiver == null) receiver.length; // Force a NoSuchMethodError.
+  if (index is !int) iae(index);
+  throw new RangeError.value(index);
+}
+
+stringLastIndexOfUnchecked(receiver, element, start)
+  => JS('int', r'#.lastIndexOf(#, #)', receiver, element, start);
+
+
+checkNull(object) {
+  if (object == null) throw new ArgumentError(null);
+  return object;
+}
+
+checkNum(value) {
+  if (value is !num) {
+    throw new ArgumentError(value);
+  }
+  return value;
+}
+
+checkInt(value) {
+  if (value is !int) {
+    throw new ArgumentError(value);
+  }
+  return value;
+}
+
+checkBool(value) {
+  if (value is !bool) {
+    throw new ArgumentError(value);
+  }
+  return value;
+}
+
+checkString(value) {
+  if (value is !String) {
+    throw new ArgumentError(value);
+  }
+  return value;
+}
+
+/**
+ * Wrap the given Dart object and record a stack trace.
+ *
+ * The code in [unwrapException] deals with getting the original Dart
+ * object out of the wrapper again.
+ */
+@NoInline()
+wrapException(ex) {
+  if (ex == null) ex = new NullThrownError();
+  var wrapper = JS('', 'new Error()');
+  // [unwrapException] looks for the property 'dartException'.
+  JS('void', '#.dartException = #', wrapper, ex);
+
+  if (JS('bool', '"defineProperty" in Object')) {
+    // Define a JavaScript getter for 'message'. This is to work around V8 bug
+    // (https://code.google.com/p/v8/issues/detail?id=2519).  The default
+    // toString on Error returns the value of 'message' if 'name' is
+    // empty. Setting toString directly doesn't work, see the bug.
+    JS('void', 'Object.defineProperty(#, "message", { get: # })',
+       wrapper, DART_CLOSURE_TO_JS(toStringWrapper));
+    JS('void', '#.name = ""', wrapper);
+  } else {
+    // In the unlikely event the browser doesn't support Object.defineProperty,
+    // hope that it just calls toString.
+    JS('void', '#.toString = #', wrapper, DART_CLOSURE_TO_JS(toStringWrapper));
+  }
+
+  return wrapper;
+}
+
+/// Do not call directly.
+toStringWrapper() {
+  // This method gets installed as toString on a JavaScript object. Due to the
+  // weird scope rules of JavaScript, JS 'this' will refer to that object.
+  return JS('', r'this.dartException').toString();
+}
+
+/**
+ * This wraps the exception and does the throw.  It is possible to call this in
+ * a JS expression context, where the throw statement is not allowed.  Helpers
+ * are never inlined, so we don't risk inlining the throw statement into an
+ * expression context.
+ */
+throwExpression(ex) {
+  JS('void', 'throw #', wrapException(ex));
+}
+
+makeLiteralListConst(list) {
+  JS('bool', r'#.immutable$list = #', list, true);
+  JS('bool', r'#.fixed$length = #', list, true);
+  return list;
+}
+
+throwRuntimeError(message) {
+  throw new RuntimeError(message);
+}
+
+throwAbstractClassInstantiationError(className) {
+  throw new AbstractClassInstantiationError(className);
+}
+
+
+/**
+ * Helper class for building patterns recognizing native type errors.
+ */
+class TypeErrorDecoder {
+  // Field names are private to help tree-shaking.
+
+  /// A regular expression which matches is matched against an error message.
+  final String _pattern;
+
+  /// The group index of "arguments" in [_pattern], or -1 if _pattern has no
+  /// match for "arguments".
+  final int _arguments;
+
+  /// The group index of "argumentsExpr" in [_pattern], or -1 if _pattern has
+  /// no match for "argumentsExpr".
+  final int _argumentsExpr;
+
+  /// The group index of "expr" in [_pattern], or -1 if _pattern has no match
+  /// for "expr".
+  final int _expr;
+
+  /// The group index of "method" in [_pattern], or -1 if _pattern has no match
+  /// for "method".
+  final int _method;
+
+  /// The group index of "receiver" in [_pattern], or -1 if _pattern has no
+  /// match for "receiver".
+  final int _receiver;
+
+  /// Pattern used to recognize a NoSuchMethodError error (and
+  /// possibly extract the method name).
+  static final TypeErrorDecoder noSuchMethodPattern =
+      extractPattern(provokeCallErrorOn(buildJavaScriptObject()));
+
+  /// Pattern used to recognize an "object not a closure" error (and
+  /// possibly extract the method name).
+  static final TypeErrorDecoder notClosurePattern =
+      extractPattern(provokeCallErrorOn(buildJavaScriptObjectWithNonClosure()));
+
+  /// Pattern used to recognize a NoSuchMethodError on JavaScript null
+  /// call.
+  static final TypeErrorDecoder nullCallPattern =
+      extractPattern(provokeCallErrorOn(JS('', 'null')));
+
+  /// Pattern used to recognize a NoSuchMethodError on JavaScript literal null
+  /// call.
+  static final TypeErrorDecoder nullLiteralCallPattern =
+      extractPattern(provokeCallErrorOnNull());
+
+  /// Pattern used to recognize a NoSuchMethodError on JavaScript
+  /// undefined call.
+  static final TypeErrorDecoder undefinedCallPattern =
+      extractPattern(provokeCallErrorOn(JS('', 'void 0')));
+
+  /// Pattern used to recognize a NoSuchMethodError on JavaScript literal
+  /// undefined call.
+  static final TypeErrorDecoder undefinedLiteralCallPattern =
+      extractPattern(provokeCallErrorOnUndefined());
+
+  /// Pattern used to recognize a NoSuchMethodError on JavaScript null
+  /// property access.
+  static final TypeErrorDecoder nullPropertyPattern =
+      extractPattern(provokePropertyErrorOn(JS('', 'null')));
+
+  /// Pattern used to recognize a NoSuchMethodError on JavaScript literal null
+  /// property access.
+  static final TypeErrorDecoder nullLiteralPropertyPattern =
+      extractPattern(provokePropertyErrorOnNull());
+
+  /// Pattern used to recognize a NoSuchMethodError on JavaScript
+  /// undefined property access.
+  static final TypeErrorDecoder undefinedPropertyPattern =
+      extractPattern(provokePropertyErrorOn(JS('', 'void 0')));
+
+  /// Pattern used to recognize a NoSuchMethodError on JavaScript literal
+  /// undefined property access.
+  static final TypeErrorDecoder undefinedLiteralPropertyPattern =
+      extractPattern(provokePropertyErrorOnUndefined());
+
+  TypeErrorDecoder(this._arguments,
+                   this._argumentsExpr,
+                   this._expr,
+                   this._method,
+                   this._receiver,
+                   this._pattern);
+
+  /// Returns a JavaScript object literal (map) with at most the
+  /// following keys:
+  ///
+  /// * arguments: The arguments as formatted by the JavaScript
+  ///   engine. No browsers are known to provide this information.
+  ///
+  /// * argumentsExpr: The syntax of the arguments (JavaScript source
+  ///   code). No browsers are known to provide this information.
+  ///
+  /// * expr: The syntax of the receiver expression (JavaScript source
+  ///   code). Firefox provides this information, for example: "$expr$.$method$
+  ///   is not a function".
+  ///
+  /// * method: The name of the called method (mangled name). At least Firefox
+  ///   and Chrome/V8 provides this information, for example, "Object [object
+  ///   Object] has no method '$method$'".
+  ///
+  /// * receiver: The string representation of the receiver. Chrome/V8
+  ///   used to provide this information (by calling user-defined
+  ///   JavaScript toString on receiver), but it has degenerated into
+  ///   "[object Object]" in recent versions.
+  matchTypeError(message) {
+    var match = JS('JSExtendableArray|Null',
+        'new RegExp(#).exec(#)', _pattern, message);
+    if (match == null) return null;
+    var result = JS('', 'Object.create(null)');
+    if (_arguments != -1) {
+      JS('', '#.arguments = #[# + 1]', result, match, _arguments);
+    }
+    if (_argumentsExpr != -1) {
+      JS('', '#.argumentsExpr = #[# + 1]', result, match, _argumentsExpr);
+    }
+    if (_expr != -1) {
+      JS('', '#.expr = #[# + 1]', result, match, _expr);
+    }
+    if (_method != -1) {
+      JS('', '#.method = #[# + 1]', result, match, _method);
+    }
+    if (_receiver != -1) {
+      JS('', '#.receiver = #[# + 1]', result, match, _receiver);
+    }
+
+    return result;
+  }
+
+  /// Builds a JavaScript Object with a toString method saying
+  /// r"$receiver$".
+  static buildJavaScriptObject() {
+    return JS('', r'{ toString: function() { return "$receiver$"; } }');
+  }
+
+  /// Builds a JavaScript Object with a toString method saying
+  /// r"$receiver$". The property "$method" is defined, but is not a function.
+  static buildJavaScriptObjectWithNonClosure() {
+    return JS('', r'{ $method$: null, '
+              r'toString: function() { return "$receiver$"; } }');
+  }
+
+  /// Extract a pattern from a JavaScript TypeError message.
+  ///
+  /// The patterns are extracted by forcing TypeErrors on known
+  /// objects thus forcing known strings into the error message. The
+  /// known strings are then replaced with wildcards which in theory
+  /// makes it possible to recognize the desired information even if
+  /// the error messages are reworded or translated.
+  static extractPattern(String message) {
+    // Some JavaScript implementations (V8 at least) include a
+    // representation of the receiver in the error message, however,
+    // this representation is not always [: receiver.toString() :],
+    // sometimes it is [: Object.prototype.toString(receiver) :], and
+    // sometimes it is an implementation specific method (but that
+    // doesn't seem to happen for object literals). So sometimes we
+    // get the text "[object Object]". The shortest way to get that
+    // string is using "String({})".
+    // See: http://code.google.com/p/v8/issues/detail?id=2519.
+    message = JS('String', r"#.replace(String({}), '$receiver$')", message);
+
+    // Since we want to create a new regular expression from an unknown string,
+    // we must escape all regular expression syntax.
+    message = JS('String', r"#.replace(new RegExp(#, 'g'), '\\$&')",
+                 message, ESCAPE_REGEXP);
+
+    // Look for the special pattern \$camelCase\$ (all the $ symbols
+    // have been escaped already), as we will soon be inserting
+    // regular expression syntax that we want interpreted by RegExp.
+    List<String> match =
+        JS('JSExtendableArray|Null', r"#.match(/\\\$[a-zA-Z]+\\\$/g)", message);
+    if (match == null) match = [];
+
+    // Find the positions within the substring matches of the error message
+    // components.  This will help us extract information later, such as the
+    // method name.
+    int arguments = JS('int', '#.indexOf(#)', match, r'\$arguments\$');
+    int argumentsExpr = JS('int', '#.indexOf(#)', match, r'\$argumentsExpr\$');
+    int expr = JS('int', '#.indexOf(#)', match, r'\$expr\$');
+    int method = JS('int', '#.indexOf(#)', match, r'\$method\$');
+    int receiver = JS('int', '#.indexOf(#)', match, r'\$receiver\$');
+
+    // Replace the patterns with a regular expression wildcard.
+    // Note: in a perfect world, one would use "(.*)", but not in
+    // JavaScript, "." does not match newlines.
+    String pattern = JS('String',
+                        r"#.replace('\\$arguments\\$', '((?:x|[^x])*)')"
+                        r".replace('\\$argumentsExpr\\$',  '((?:x|[^x])*)')"
+                        r".replace('\\$expr\\$',  '((?:x|[^x])*)')"
+                        r".replace('\\$method\\$',  '((?:x|[^x])*)')"
+                        r".replace('\\$receiver\\$',  '((?:x|[^x])*)')",
+                        message);
+
+    return new TypeErrorDecoder(arguments,
+                                argumentsExpr,
+                                expr,
+                                method,
+                                receiver,
+                                pattern);
+  }
+
+  /// Provokes a TypeError and returns its message.
+  ///
+  /// The error is provoked so all known variable content can be recognized and
+  /// a pattern can be inferred.
+  static String provokeCallErrorOn(expression) {
+    // This function is carefully created to maximize the possibility
+    // of decoding the TypeError message and turning it into a general
+    // pattern.
+    //
+    // The idea is to inject something known into something unknown.  The
+    // unknown entity is the error message that the browser provides with a
+    // TypeError.  It is a human readable message, possibly localized in a
+    // language no dart2js engineer understand.  We assume that $name$ would
+    // never naturally occur in a human readable error message, yet it is easy
+    // to decode.
+    //
+    // For example, evaluate this in V8 version 3.13.7.6:
+    //
+    // var $expr$ = null; $expr$.$method$()
+    //
+    // The VM throws an instance of TypeError whose message property contains
+    // "Cannot call method '$method$' of null".  We can then reasonably assume
+    // that if the string contains $method$, that's where the method name will
+    // be in general.  Call this automatically reverse engineering the error
+    // format string in V8.
+    //
+    // So the error message from V8 is turned into this regular expression:
+    //
+    // "Cannot call method '(.*)' of null"
+    //
+    // Similarly, if we evaluate:
+    //
+    // var $expr$ = {toString: function() { return '$receiver$'; }};
+    // $expr$.$method$()
+    //
+    // We get this message: "Object $receiver$ has no method '$method$'"
+    //
+    // Which is turned into this regular expression:
+    //
+    // "Object (.*) has no method '(.*)'"
+    //
+    // Firefox/jsshell is slightly different, it tries to include the source
+    // code that caused the exception, so we get this message: "$expr$.$method$
+    // is not a function" which is turned into this regular expression:
+    //
+    // "(.*)\\.(.*) is not a function"
+
+    var function = JS('', r"""function($expr$) {
+  var $argumentsExpr$ = '$arguments$';
+  try {
+    $expr$.$method$($argumentsExpr$);
+  } catch (e) {
+    return e.message;
+  }
+}""");
+    return JS('String', '(#)(#)', function, expression);
+  }
+
+  /// Similar to [provokeCallErrorOn], but provokes an error directly on
+  /// literal "null" expression.
+  static String provokeCallErrorOnNull() {
+    // See [provokeCallErrorOn] for a detailed explanation.
+    var function = JS('', r"""function() {
+  var $argumentsExpr$ = '$arguments$';
+  try {
+    null.$method$($argumentsExpr$);
+  } catch (e) {
+    return e.message;
+  }
+}""");
+    return JS('String', '(#)()', function);
+  }
+
+  /// Similar to [provokeCallErrorOnNull], but provokes an error directly on
+  /// (void 0), that is, "undefined".
+  static String provokeCallErrorOnUndefined() {
+    // See [provokeCallErrorOn] for a detailed explanation.
+    var function = JS('', r"""function() {
+  var $argumentsExpr$ = '$arguments$';
+  try {
+    (void 0).$method$($argumentsExpr$);
+  } catch (e) {
+    return e.message;
+  }
+}""");
+    return JS('String', '(#)()', function);
+  }
+
+  /// Similar to [provokeCallErrorOn], but provokes a property access
+  /// error.
+  static String provokePropertyErrorOn(expression) {
+    // See [provokeCallErrorOn] for a detailed explanation.
+    var function = JS('', r"""function($expr$) {
+  try {
+    $expr$.$method$;
+  } catch (e) {
+    return e.message;
+  }
+}""");
+    return JS('String', '(#)(#)', function, expression);
+  }
+
+  /// Similar to [provokePropertyErrorOn], but provokes an property access
+  /// error directly on literal "null" expression.
+  static String provokePropertyErrorOnNull() {
+    // See [provokeCallErrorOn] for a detailed explanation.
+    var function = JS('', r"""function() {
+  try {
+    null.$method$;
+  } catch (e) {
+    return e.message;
+  }
+}""");
+    return JS('String', '(#)()', function);
+  }
+
+  /// Similar to [provokePropertyErrorOnNull], but provokes an property access
+  /// error directly on (void 0), that is, "undefined".
+  static String provokePropertyErrorOnUndefined() {
+    // See [provokeCallErrorOn] for a detailed explanation.
+    var function = JS('', r"""function() {
+  try {
+    (void 0).$method$;
+  } catch (e) {
+    return e.message;
+  }
+}""");
+    return JS('String', '(#)()', function);
+  }
+}
+
+class NullError extends Error implements NoSuchMethodError {
+  final String _message;
+  final String _method;
+
+  NullError(this._message, match)
+      : _method = match == null ? null : JS('', '#.method', match);
+
+  String toString() {
+    if (_method == null) return 'NullError: $_message';
+    return 'NullError: Cannot call "$_method" on null';
+  }
+}
+
+class JsNoSuchMethodError extends Error implements NoSuchMethodError {
+  final String _message;
+  final String _method;
+  final String _receiver;
+
+  JsNoSuchMethodError(this._message, match)
+      : _method = match == null ? null : JS('String|Null', '#.method', match),
+        _receiver =
+            match == null ? null : JS('String|Null', '#.receiver', match);
+
+  String toString() {
+    if (_method == null) return 'NoSuchMethodError: $_message';
+    if (_receiver == null) {
+      return 'NoSuchMethodError: Cannot call "$_method" ($_message)';
+    }
+    return 'NoSuchMethodError: Cannot call "$_method" on "$_receiver" '
+        '($_message)';
+  }
+}
+
+class UnknownJsTypeError extends Error {
+  final String _message;
+
+  UnknownJsTypeError(this._message);
+
+  String toString() => _message.isEmpty ? 'Error' : 'Error: $_message';
+}
+
+/**
+ * Called from catch blocks in generated code to extract the Dart
+ * exception from the thrown value. The thrown value may have been
+ * created by [wrapException] or it may be a 'native' JS exception.
+ *
+ * Some native exceptions are mapped to new Dart instances, others are
+ * returned unmodified.
+ */
+unwrapException(ex) {
+  /// If error implements Error, save [ex] in [error.$thrownJsError].
+  /// Otherwise, do nothing. Later, the stack trace can then be extraced from
+  /// [ex].
+  saveStackTrace(error) {
+    if (error is Error) {
+      var thrownStackTrace = JS('', r'#.$thrownJsError', error);
+      if (thrownStackTrace == null) {
+        JS('void', r'#.$thrownJsError = #', error, ex);
+      }
+    }
+    return error;
+  }
+
+  // Note that we are checking if the object has the property. If it
+  // has, it could be set to null if the thrown value is null.
+  if (ex == null) return null;
+  if (JS('bool', 'typeof # !== "object"', ex)) return ex;
+
+  if (JS('bool', r'"dartException" in #', ex)) {
+    return saveStackTrace(JS('', r'#.dartException', ex));
+  } else if (!JS('bool', r'"message" in #', ex)) {
+    return ex;
+  }
+
+  // Grab hold of the exception message. This field is available on
+  // all supported browsers.
+  var message = JS('var', r'#.message', ex);
+
+  // Internet Explorer has an error number.  This is the most reliable way to
+  // detect specific errors, so check for this first.
+  if (JS('bool', '"number" in #', ex)
+      && JS('bool', 'typeof #.number == "number"', ex)) {
+    int number = JS('int', '#.number', ex);
+
+    // From http://msdn.microsoft.com/en-us/library/ie/hc53e755(v=vs.94).aspx
+    // "number" is a 32-bit word. The error code is the low 16 bits, and the
+    // facility code is the upper 16 bits.
+    var ieErrorCode = number & 0xffff;
+    var ieFacilityNumber = (number >> 16) & 0x1fff;
+
+    // http://msdn.microsoft.com/en-us/library/aa264975(v=vs.60).aspx
+    // http://msdn.microsoft.com/en-us/library/ie/1dk3k160(v=vs.94).aspx
+    if (ieFacilityNumber == 10) {
+      switch (ieErrorCode) {
+      case 438:
+        return saveStackTrace(
+            new JsNoSuchMethodError('$message (Error $ieErrorCode)', null));
+      case 445:
+      case 5007:
+        return saveStackTrace(
+            new NullError('$message (Error $ieErrorCode)', null));
+      }
+    }
+  }
+
+  if (JS('bool', r'# instanceof TypeError', ex)) {
+    var match;
+    // Using JS to give type hints to the compiler to help tree-shaking.
+    // TODO(ahe): That should be unnecessary due to type inference.
+    var nsme =
+        JS('TypeErrorDecoder', '#', TypeErrorDecoder.noSuchMethodPattern);
+    var notClosure =
+        JS('TypeErrorDecoder', '#', TypeErrorDecoder.notClosurePattern);
+    var nullCall =
+        JS('TypeErrorDecoder', '#', TypeErrorDecoder.nullCallPattern);
+    var nullLiteralCall =
+        JS('TypeErrorDecoder', '#', TypeErrorDecoder.nullLiteralCallPattern);
+    var undefCall =
+        JS('TypeErrorDecoder', '#', TypeErrorDecoder.undefinedCallPattern);
+    var undefLiteralCall =
+        JS('TypeErrorDecoder', '#',
+           TypeErrorDecoder.undefinedLiteralCallPattern);
+    var nullProperty =
+        JS('TypeErrorDecoder', '#', TypeErrorDecoder.nullPropertyPattern);
+    var nullLiteralProperty =
+        JS('TypeErrorDecoder', '#',
+           TypeErrorDecoder.nullLiteralPropertyPattern);
+    var undefProperty =
+        JS('TypeErrorDecoder', '#', TypeErrorDecoder.undefinedPropertyPattern);
+    var undefLiteralProperty =
+        JS('TypeErrorDecoder', '#',
+           TypeErrorDecoder.undefinedLiteralPropertyPattern);
+    if ((match = nsme.matchTypeError(message)) != null) {
+      return saveStackTrace(new JsNoSuchMethodError(message, match));
+    } else if ((match = notClosure.matchTypeError(message)) != null) {
+      // notClosure may match "({c:null}).c()" or "({c:1}).c()", so we
+      // cannot tell if this an attempt to invoke call on null or a
+      // non-function object.
+      // But we do know the method name is "call".
+      JS('', '#.method = "call"', match);
+      return saveStackTrace(new JsNoSuchMethodError(message, match));
+    } else if ((match = nullCall.matchTypeError(message)) != null ||
+               (match = nullLiteralCall.matchTypeError(message)) != null ||
+               (match = undefCall.matchTypeError(message)) != null ||
+               (match = undefLiteralCall.matchTypeError(message)) != null ||
+               (match = nullProperty.matchTypeError(message)) != null ||
+               (match = nullLiteralCall.matchTypeError(message)) != null ||
+               (match = undefProperty.matchTypeError(message)) != null ||
+               (match = undefLiteralProperty.matchTypeError(message)) != null) {
+      return saveStackTrace(new NullError(message, match));
+    }
+
+    // If we cannot determine what kind of error this is, we fall back
+    // to reporting this as a generic error. It's probably better than
+    // nothing.
+    return saveStackTrace(
+        new UnknownJsTypeError(message is String ? message : ''));
+  }
+
+  if (JS('bool', r'# instanceof RangeError', ex)) {
+    if (message is String && contains(message, 'call stack')) {
+      return new StackOverflowError();
+    }
+
+    // In general, a RangeError is thrown when trying to pass a number
+    // as an argument to a function that does not allow a range that
+    // includes that number.
+    return saveStackTrace(new ArgumentError());
+  }
+
+  // Check for the Firefox specific stack overflow signal.
+  if (JS('bool',
+         r'typeof InternalError == "function" && # instanceof InternalError',
+         ex)) {
+    if (message is String && message == 'too much recursion') {
+      return new StackOverflowError();
+    }
+  }
+
+  // Just return the exception. We should not wrap it because in case
+  // the exception comes from the DOM, it is a JavaScript
+  // object backed by a native Dart class.
+  return ex;
+}
+
+/**
+ * Called by generated code to fetch the stack trace from an
+ * exception. Should never return null.
+ */
+StackTrace getTraceFromException(exception) => new _StackTrace(exception);
+
+class _StackTrace implements StackTrace {
+  var _exception;
+  String _trace;
+  _StackTrace(this._exception);
+
+  String toString() {
+    if (_trace != null) return _trace;
+
+    String trace;
+    if (JS('bool', 'typeof # === "object"', _exception)) {
+      trace = JS("String|Null", r"#.stack", _exception);
+    }
+    return _trace = (trace == null) ? '' : trace;
+  }
+}
+
+int objectHashCode(var object) {
+  if (object == null || JS('bool', "typeof # != 'object'", object)) {
+    return object.hashCode;
+  } else {
+    return Primitives.objectHashCode(object);
+  }
+}
+
+/**
+ * Called by generated code to build a map literal. [keyValuePairs] is
+ * a list of key, value, key, value, ..., etc.
+ */
+fillLiteralMap(keyValuePairs, Map result) {
+  // TODO(johnniwinther): Use JSArray to optimize this code instead of calling
+  // [getLength] and [getIndex].
+  int index = 0;
+  int length = getLength(keyValuePairs);
+  while (index < length) {
+    var key = getIndex(keyValuePairs, index++);
+    var value = getIndex(keyValuePairs, index++);
+    result[key] = value;
+  }
+  return result;
+}
+
+invokeClosure(Function closure,
+              var isolate,
+              int numberOfArguments,
+              var arg1,
+              var arg2,
+              var arg3,
+              var arg4) {
+  if (numberOfArguments == 0) {
+    return JS_CALL_IN_ISOLATE(isolate, () => closure());
+  } else if (numberOfArguments == 1) {
+    return JS_CALL_IN_ISOLATE(isolate, () => closure(arg1));
+  } else if (numberOfArguments == 2) {
+    return JS_CALL_IN_ISOLATE(isolate, () => closure(arg1, arg2));
+  } else if (numberOfArguments == 3) {
+    return JS_CALL_IN_ISOLATE(isolate, () => closure(arg1, arg2, arg3));
+  } else if (numberOfArguments == 4) {
+    return JS_CALL_IN_ISOLATE(isolate, () => closure(arg1, arg2, arg3, arg4));
+  } else {
+    throw new Exception(
+        'Unsupported number of arguments for wrapped closure');
+  }
+}
+
+/**
+ * Called by generated code to convert a Dart closure to a JS
+ * closure when the Dart closure is passed to the DOM.
+ */
+convertDartClosureToJS(closure, int arity) {
+  if (closure == null) return null;
+  var function = JS('var', r'#.$identity', closure);
+  if (JS('bool', r'!!#', function)) return function;
+
+  // We use $0 and $1 to not clash with variable names used by the
+  // compiler and/or minifier.
+  function = JS('var',
+                '(function(closure, arity, context, invoke) {'
+                '  return function(a1, a2, a3, a4) {'
+                '     return invoke(closure, context, arity, a1, a2, a3, a4);'
+                '  };'
+                '})(#,#,#,#)',
+                closure,
+                arity,
+                // Capture the current isolate now.  Remember that "#"
+                // in JS is simply textual substitution of compiled
+                // expressions.
+                JS_CURRENT_ISOLATE_CONTEXT(),
+                DART_CLOSURE_TO_JS(invokeClosure));
+
+  JS('void', r'#.$identity = #', closure, function);
+  return function;
+}
+
+/**
+ * Super class for Dart closures.
+ */
+abstract class Closure implements Function {
+  // TODO(ahe): These constants must be in sync with
+  // reflection_data_parser.dart.
+  static const FUNCTION_INDEX = 0;
+  static const NAME_INDEX = 1;
+  static const CALL_NAME_INDEX = 2;
+  static const REQUIRED_PARAMETER_INDEX = 3;
+  static const OPTIONAL_PARAMETER_INDEX = 4;
+  static const DEFAULT_ARGUMENTS_INDEX = 5;
+
+  /**
+   * Global counter to prevent reusing function code objects.
+   *
+   * V8 will share the underlying function code objects when the same string is
+   * passed to "new Function".  Shared function code objects can lead to
+   * sub-optimal performance due to polymorhism, and can be prevented by
+   * ensuring the strings are different.
+   */
+  static int functionCounter = 0;
+
+  Closure();
+
+  /**
+   * Creates a new closure class for use by implicit getters associated with a
+   * method.
+   *
+   * In other words, creates a tear-off closure.
+   *
+   * Called from [closureFromTearOff] as well as from reflection when tearing
+   * of a method via [:getField:].
+   *
+   * This method assumes that [functions] was created by the JavaScript function
+   * `addStubs` in `reflection_data_parser.dart`. That is, a list of JavaScript
+   * function objects with properties `$stubName` and `$callName`.
+   *
+   * Further assumes that [reflectionInfo] is the end of the array created by
+   * [dart2js.js_emitter.ContainerBuilder.addMemberMethod] starting with
+   * required parameter count.
+   *
+   * Caution: this function may be called when building constants.
+   * TODO(ahe): Don't call this function when building constants.
+   */
+  static fromTearOff(receiver,
+                     List functions,
+                     List reflectionInfo,
+                     bool isStatic,
+                     jsArguments,
+                     String propertyName) {
+    JS_EFFECT(() {
+      BoundClosure.receiverOf(JS('BoundClosure', 'void 0'));
+      BoundClosure.selfOf(JS('BoundClosure', 'void 0'));
+    });
+    // TODO(ahe): All the place below using \$ should be rewritten to go
+    // through the namer.
+    var function = JS('', '#[#]', functions, 0);
+    String name = JS('String|Null', '#.\$stubName', function);
+    String callName = JS('String|Null', '#.\$callName', function);
+
+    JS('', '#.\$reflectionInfo = #', function, reflectionInfo);
+    ReflectionInfo info = new ReflectionInfo(function);
+
+    var functionType = info.functionType;
+
+    // function tmp() {};
+    // tmp.prototype = BC.prototype;
+    // var proto = new tmp;
+    // for each computed prototype property:
+    //   proto[property] = ...;
+    // proto._init = BC;
+    // var dynClosureConstructor =
+    //     new Function('self', 'target', 'receiver', 'name',
+    //                  'this._init(self, target, receiver, name)');
+    // proto.constructor = dynClosureConstructor; // Necessary?
+    // dynClosureConstructor.prototype = proto;
+    // return dynClosureConstructor;
+
+    // We need to create a new subclass of either TearOffClosure or
+    // BoundClosure.  For this, we need to create an object whose prototype is
+    // the prototype is either TearOffClosure.prototype or
+    // BoundClosure.prototype, respectively in pseudo JavaScript code. The
+    // simplest way to access the JavaScript construction function of a Dart
+    // class is to create an instance and access its constructor property.  The
+    // newly created instance could in theory be used directly as the
+    // prototype, but it might include additional fields that we don't need.
+    // So we only use the new instance to access the constructor property and
+    // use Object.create to create the desired prototype.
+    var prototype = isStatic
+        // TODO(ahe): Safe to use Object.create?
+        ? JS('TearOffClosure', 'Object.create(#.constructor.prototype)',
+             new TearOffClosure())
+        : JS('BoundClosure', 'Object.create(#.constructor.prototype)',
+             new BoundClosure(null, null, null, null));
+
+    JS('', '#.\$initialize = #', prototype, JS('', '#.constructor', prototype));
+    var constructor = isStatic
+        ? JS('', 'function(){this.\$initialize()}')
+        : isCsp
+            ? JS('', 'function(a,b,c,d) {this.\$initialize(a,b,c,d)}')
+            : JS('',
+                 'new Function("a","b","c","d",'
+                     '"this.\$initialize(a,b,c,d);"+#)',
+                 functionCounter++);
+
+    // TODO(ahe): Is it necessary to set the constructor property?
+    JS('', '#.constructor = #', prototype, constructor);
+
+    JS('', '#.prototype = #', constructor, prototype);
+
+    // Create a closure and "monkey" patch it with call stubs.
+    var trampoline = function;
+    var isIntercepted = false;
+    if (!isStatic) {
+      if (JS('bool', '#.length == 1', jsArguments)) {
+        // Intercepted call.
+        isIntercepted = true;
+      }
+      trampoline = forwardCallTo(receiver, function, isIntercepted);
+      JS('', '#.\$reflectionInfo = #', trampoline, reflectionInfo);
+    } else {
+      JS('', '#.\$name = #', prototype, propertyName);
+    }
+
+    var signatureFunction;
+    if (JS('bool', 'typeof # == "number"', functionType)) {
+      var metadata = JS_EMBEDDED_GLOBAL('', METADATA);
+      // It is ok, if the access is inlined into the JS. The access is safe in
+      // and outside the function. In fact we prefer if there is a textual
+      // inlining.
+      signatureFunction =
+          JS('', '(function(s){return function(){return #[s]}})(#)',
+              metadata,
+              functionType);
+    } else if (!isStatic
+               && JS('bool', 'typeof # == "function"', functionType)) {
+      var getReceiver = isIntercepted
+          ? RAW_DART_FUNCTION_REF(BoundClosure.receiverOf)
+          : RAW_DART_FUNCTION_REF(BoundClosure.selfOf);
+      signatureFunction = JS(
+        '',
+        'function(f,r){'
+          'return function(){'
+            'return f.apply({\$receiver:r(this)},arguments)'
+          '}'
+        '}(#,#)', functionType, getReceiver);
+    } else {
+      throw 'Error in reflectionInfo.';
+    }
+
+    JS('', '#.\$signature = #', prototype, signatureFunction);
+
+    JS('', '#[#] = #', prototype, callName, trampoline);
+    for (int i = 1; i < functions.length; i++) {
+      var stub = functions[i];
+      var stubCallName = JS('String|Null', '#.\$callName', stub);
+      if (stubCallName != null) {
+        JS('', '#[#] = #', prototype, stubCallName,
+           isStatic ? stub : forwardCallTo(receiver, stub, isIntercepted));
+      }
+    }
+
+    JS('', '#["call*"] = #', prototype, trampoline);
+
+    return constructor;
+  }
+
+  static cspForwardCall(int arity, bool isSuperCall, String stubName,
+                        function) {
+    var getSelf = RAW_DART_FUNCTION_REF(BoundClosure.selfOf);
+    // Handle intercepted stub-names with the default slow case.
+    if (isSuperCall) arity = -1;
+    switch (arity) {
+    case 0:
+      return JS(
+          '',
+          'function(n,S){'
+            'return function(){'
+              'return S(this)[n]()'
+            '}'
+          '}(#,#)', stubName, getSelf);
+    case 1:
+      return JS(
+          '',
+          'function(n,S){'
+            'return function(a){'
+              'return S(this)[n](a)'
+            '}'
+          '}(#,#)', stubName, getSelf);
+    case 2:
+      return JS(
+          '',
+          'function(n,S){'
+            'return function(a,b){'
+              'return S(this)[n](a,b)'
+            '}'
+          '}(#,#)', stubName, getSelf);
+    case 3:
+      return JS(
+          '',
+          'function(n,S){'
+            'return function(a,b,c){'
+              'return S(this)[n](a,b,c)'
+            '}'
+          '}(#,#)', stubName, getSelf);
+    case 4:
+      return JS(
+          '',
+          'function(n,S){'
+            'return function(a,b,c,d){'
+              'return S(this)[n](a,b,c,d)'
+            '}'
+          '}(#,#)', stubName, getSelf);
+    case 5:
+      return JS(
+          '',
+          'function(n,S){'
+            'return function(a,b,c,d,e){'
+              'return S(this)[n](a,b,c,d,e)'
+            '}'
+          '}(#,#)', stubName, getSelf);
+    default:
+      return JS(
+          '',
+          'function(f,s){'
+            'return function(){'
+              'return f.apply(s(this),arguments)'
+            '}'
+          '}(#,#)', function, getSelf);
+    }
+  }
+
+  static bool get isCsp => JS('bool', 'typeof dart_precompiled == "function"');
+
+  static forwardCallTo(receiver, function, bool isIntercepted) {
+    if (isIntercepted) return forwardInterceptedCallTo(receiver, function);
+    String stubName = JS('String|Null', '#.\$stubName', function);
+    int arity = JS('int', '#.length', function);
+    var lookedUpFunction = JS("", "#[#]", receiver, stubName);
+    // The receiver[stubName] may not be equal to the function if we try to
+    // forward to a super-method. Especially when we create a bound closure
+    // of a super-call we need to make sure that we don't forward back to the
+    // dynamically looked up function.
+    bool isSuperCall = !identical(function, lookedUpFunction);
+
+    if (isCsp || isSuperCall || arity >= 27) {
+      return cspForwardCall(arity, isSuperCall, stubName, function);
+    }
+
+    if (arity == 0) {
+      return JS(
+          '',
+          '(new Function(#))()',
+          'return function(){'
+            'return this.${BoundClosure.selfFieldName()}.$stubName();'
+            '${functionCounter++}'
+          '}');
+    }
+    assert (1 <= arity && arity < 27);
+    String arguments = JS(
+        'String',
+        '"abcdefghijklmnopqrstuvwxyz".split("").splice(0,#).join(",")',
+        arity);
+    return JS(
+        '',
+        '(new Function(#))()',
+        'return function($arguments){'
+          'return this.${BoundClosure.selfFieldName()}.$stubName($arguments);'
+          '${functionCounter++}'
+        '}');
+  }
+
+  static cspForwardInterceptedCall(int arity, bool isSuperCall,
+                                   String name, function) {
+    var getSelf = RAW_DART_FUNCTION_REF(BoundClosure.selfOf);
+    var getReceiver = RAW_DART_FUNCTION_REF(BoundClosure.receiverOf);
+    // Handle intercepted stub-names with the default slow case.
+    if (isSuperCall) arity = -1;
+    switch (arity) {
+    case 0:
+      // Intercepted functions always takes at least one argument (the
+      // receiver).
+      throw new RuntimeError('Intercepted function with no arguments.');
+    case 1:
+      return JS(
+          '',
+          'function(n,s,r){'
+            'return function(){'
+              'return s(this)[n](r(this))'
+            '}'
+          '}(#,#,#)', name, getSelf, getReceiver);
+    case 2:
+      return JS(
+          '',
+          'function(n,s,r){'
+            'return function(a){'
+              'return s(this)[n](r(this),a)'
+            '}'
+          '}(#,#,#)', name, getSelf, getReceiver);
+    case 3:
+      return JS(
+          '',
+          'function(n,s,r){'
+            'return function(a,b){'
+              'return s(this)[n](r(this),a,b)'
+            '}'
+          '}(#,#,#)', name, getSelf, getReceiver);
+    case 4:
+      return JS(
+          '',
+          'function(n,s,r){'
+            'return function(a,b,c){'
+              'return s(this)[n](r(this),a,b,c)'
+            '}'
+          '}(#,#,#)', name, getSelf, getReceiver);
+    case 5:
+      return JS(
+          '',
+          'function(n,s,r){'
+            'return function(a,b,c,d){'
+              'return s(this)[n](r(this),a,b,c,d)'
+            '}'
+          '}(#,#,#)', name, getSelf, getReceiver);
+    case 6:
+      return JS(
+          '',
+          'function(n,s,r){'
+            'return function(a,b,c,d,e){'
+              'return s(this)[n](r(this),a,b,c,d,e)'
+            '}'
+          '}(#,#,#)', name, getSelf, getReceiver);
+    default:
+      return JS(
+          '',
+          'function(f,s,r,a){'
+            'return function(){'
+              'a=[r(this)];'
+              'Array.prototype.push.apply(a,arguments);'
+              'return f.apply(s(this),a)'
+            '}'
+          '}(#,#,#)', function, getSelf, getReceiver);
+    }
+  }
+
+  static forwardInterceptedCallTo(receiver, function) {
+    String selfField = BoundClosure.selfFieldName();
+    String receiverField = BoundClosure.receiverFieldName();
+    String stubName = JS('String|Null', '#.\$stubName', function);
+    int arity = JS('int', '#.length', function);
+    bool isCsp = JS('bool', 'typeof dart_precompiled == "function"');
+    var lookedUpFunction = JS("", "#[#]", receiver, stubName);
+    // The receiver[stubName] may not be equal to the function if we try to
+    // forward to a super-method. Especially when we create a bound closure
+    // of a super-call we need to make sure that we don't forward back to the
+    // dynamically looked up function.
+    bool isSuperCall = !identical(function, lookedUpFunction);
+
+    if (isCsp || isSuperCall || arity >= 28) {
+      return cspForwardInterceptedCall(arity, isSuperCall, stubName,
+                                       function);
+    }
+    if (arity == 1) {
+      return JS(
+          '',
+          '(new Function(#))()',
+          'return function(){'
+            'return this.$selfField.$stubName(this.$receiverField);'
+            '${functionCounter++}'
+          '}');
+    }
+    assert(1 < arity && arity < 28);
+    String arguments = JS(
+        'String',
+        '"abcdefghijklmnopqrstuvwxyz".split("").splice(0,#).join(",")',
+        arity - 1);
+    return JS(
+        '',
+        '(new Function(#))()',
+        'return function($arguments){'
+          'return this.$selfField.$stubName(this.$receiverField, $arguments);'
+          '${functionCounter++}'
+        '}');
+  }
+
+  // The backend adds a special getter of the form
+  //
+  // Closure get call => this;
+  //
+  // to allow tearing off a closure from itself. We do this magically in the
+  // backend rather than simply adding it here, as we do not want this getter
+  // to be visible to resolution and the generation of extra stubs.
+
+  String toString() => "Closure";
+}
+
+/// Called from implicit method getter (aka tear-off).
+closureFromTearOff(receiver,
+                   functions,
+                   reflectionInfo,
+                   isStatic,
+                   jsArguments,
+                   name) {
+  return Closure.fromTearOff(
+      receiver,
+      JSArray.markFixedList(functions),
+      JSArray.markFixedList(reflectionInfo),
+      JS('bool', '!!#', isStatic),
+      jsArguments,
+      JS('String', '#', name));
+}
+
+/// Represents an implicit closure of a function.
+class TearOffClosure extends Closure {
+}
+
+/// Represents a 'tear-off' closure, that is an instance method bound
+/// to a specific receiver (instance).
+class BoundClosure extends TearOffClosure {
+  /// The receiver or interceptor.
+  // TODO(ahe): This could just be the interceptor, we always know if
+  // we need the interceptor when generating the call method.
+  final _self;
+
+  /// The method.
+  final _target;
+
+  /// The receiver. Null if [_self] is not an interceptor.
+  final _receiver;
+
+  /// The name of the function. Only used by the mirror system.
+  final String _name;
+
+  BoundClosure(this._self, this._target, this._receiver, this._name);
+
+  bool operator==(other) {
+    if (identical(this, other)) return true;
+    if (other is! BoundClosure) return false;
+    return JS('bool', '# === # && # === # && # === #',
+        _self, other._self,
+        _target, other._target,
+        _receiver, other._receiver);
+  }
+
+  int get hashCode {
+    int receiverHashCode;
+    if (_receiver == null) {
+      // A bound closure on a regular Dart object, just use the
+      // identity hash code.
+      receiverHashCode = Primitives.objectHashCode(_self);
+    } else if (JS('String', 'typeof #', _receiver) != 'object') {
+      // A bound closure on a primitive JavaScript type. We
+      // use the hashCode method we define for those primitive types.
+      receiverHashCode = _receiver.hashCode;
+    } else {
+      // A bound closure on an intercepted native class, just use the
+      // identity hash code.
+      receiverHashCode = Primitives.objectHashCode(_receiver);
+    }
+    return receiverHashCode ^ Primitives.objectHashCode(_target);
+  }
+
+  @NoInline()
+  static selfOf(BoundClosure closure) => closure._self;
+
+  static targetOf(BoundClosure closure) => closure._target;
+
+  @NoInline()
+  static receiverOf(BoundClosure closure) => closure._receiver;
+
+  static nameOf(BoundClosure closure) => closure._name;
+
+  static String selfFieldNameCache;
+
+  static String selfFieldName() {
+    if (selfFieldNameCache == null) {
+      selfFieldNameCache = computeFieldNamed('self');
+    }
+    return selfFieldNameCache;
+  }
+
+  static String receiverFieldNameCache;
+
+  static String receiverFieldName() {
+    if (receiverFieldNameCache == null) {
+      receiverFieldNameCache = computeFieldNamed('receiver');
+    }
+    return receiverFieldNameCache;
+  }
+
+  @NoInline() @NoSideEffects()
+  static String computeFieldNamed(String fieldName) {
+    var template = new BoundClosure('self', 'target', 'receiver', 'name');
+    var names = JSArray.markFixedList(
+        JS('', 'Object.getOwnPropertyNames(#)', template));
+    for (int i = 0; i < names.length; i++) {
+      var name = names[i];
+      if (JS('bool', '#[#] === #', template, name, fieldName)) {
+        return JS('String', '#', name);
+      }
+    }
+  }
+}
+
+bool jsHasOwnProperty(var jsObject, String property) {
+  return JS('bool', r'#.hasOwnProperty(#)', jsObject, property);
+}
+
+jsPropertyAccess(var jsObject, String property) {
+  return JS('var', r'#[#]', jsObject, property);
+}
+
+/**
+ * Called at the end of unaborted switch cases to get the singleton
+ * FallThroughError exception that will be thrown.
+ */
+getFallThroughError() => new FallThroughErrorImplementation();
+
+/**
+ * A metadata annotation describing the types instantiated by a native element.
+ *
+ * The annotation is valid on a native method and a field of a native class.
+ *
+ * By default, a field of a native class is seen as an instantiation point for
+ * all native classes that are a subtype of the field's type, and a native
+ * method is seen as an instantiation point fo all native classes that are a
+ * subtype of the method's return type, or the argument types of the declared
+ * type of the method's callback parameter.
+ *
+ * An @[Creates] annotation overrides the default set of instantiated types.  If
+ * one or more @[Creates] annotations are present, the type of the native
+ * element is ignored, and the union of @[Creates] annotations is used instead.
+ * The names in the strings are resolved and the program will fail to compile
+ * with dart2js if they do not name types.
+ *
+ * The argument to [Creates] is a string.  The string is parsed as the names of
+ * one or more types, separated by vertical bars `|`.  There are some special
+ * names:
+ *
+ * * `=Object`. This means 'exactly Object', which is a plain JavaScript object
+ *   with properties and none of the subtypes of Object.
+ *
+ * Example: we may know that a method always returns a specific implementation:
+ *
+ *     @Creates('_NodeList')
+ *     List<Node> getElementsByTagName(String tag) native;
+ *
+ * Useful trick: A method can be marked as not instantiating any native classes
+ * with the annotation `@Creates('Null')`.  This is useful for fields on native
+ * classes that are used only in Dart code.
+ *
+ *     @Creates('Null')
+ *     var _cachedFoo;
+ */
+class Creates {
+  final String types;
+  const Creates(this.types);
+}
+
+/**
+ * A metadata annotation describing the types returned or yielded by a native
+ * element.
+ *
+ * The annotation is valid on a native method and a field of a native class.
+ *
+ * By default, a native method or field is seen as returning or yielding all
+ * subtypes if the method return type or field type.  This annotation allows a
+ * more precise set of types to be specified.
+ *
+ * See [Creates] for the syntax of the argument.
+ *
+ * Example: IndexedDB keys are numbers, strings and JavaScript Arrays of keys.
+ *
+ *     @Returns('String|num|JSExtendableArray')
+ *     dynamic key;
+ *
+ *     // Equivalent:
+ *     @Returns('String') @Returns('num') @Returns('JSExtendableArray')
+ *     dynamic key;
+ */
+class Returns {
+  final String types;
+  const Returns(this.types);
+}
+
+/**
+ * A metadata annotation placed on native methods and fields of native classes
+ * to specify the JavaScript name.
+ *
+ * This example declares a Dart field + getter + setter called `$dom_title` that
+ * corresponds to the JavaScript property `title`.
+ *
+ *     class Docmument native "*Foo" {
+ *       @JSName('title')
+ *       String $dom_title;
+ *     }
+ */
+class JSName {
+  final String name;
+  const JSName(this.name);
+}
+
+/**
+ * The following methods are called by the runtime to implement
+ * checked mode and casts. We specialize each primitive type (eg int, bool), and
+ * use the compiler's convention to do is-checks on regular objects.
+ */
+boolConversionCheck(value) {
+  if (value is bool) return value;
+  // One of the following checks will always fail.
+  boolTypeCheck(value);
+  assert(value != null);
+  return false;
+}
+
+stringTypeCheck(value) {
+  if (value == null) return value;
+  if (value is String) return value;
+  throw new TypeErrorImplementation(value, 'String');
+}
+
+stringTypeCast(value) {
+  if (value is String || value == null) return value;
+  // TODO(lrn): When reified types are available, pass value.class and String.
+  throw new CastErrorImplementation(
+      Primitives.objectTypeName(value), 'String');
+}
+
+doubleTypeCheck(value) {
+  if (value == null) return value;
+  if (value is double) return value;
+  throw new TypeErrorImplementation(value, 'double');
+}
+
+doubleTypeCast(value) {
+  if (value is double || value == null) return value;
+  throw new CastErrorImplementation(
+      Primitives.objectTypeName(value), 'double');
+}
+
+numTypeCheck(value) {
+  if (value == null) return value;
+  if (value is num) return value;
+  throw new TypeErrorImplementation(value, 'num');
+}
+
+numTypeCast(value) {
+  if (value is num || value == null) return value;
+  throw new CastErrorImplementation(
+      Primitives.objectTypeName(value), 'num');
+}
+
+boolTypeCheck(value) {
+  if (value == null) return value;
+  if (value is bool) return value;
+  throw new TypeErrorImplementation(value, 'bool');
+}
+
+boolTypeCast(value) {
+  if (value is bool || value == null) return value;
+  throw new CastErrorImplementation(
+      Primitives.objectTypeName(value), 'bool');
+}
+
+intTypeCheck(value) {
+  if (value == null) return value;
+  if (value is int) return value;
+  throw new TypeErrorImplementation(value, 'int');
+}
+
+intTypeCast(value) {
+  if (value is int || value == null) return value;
+  throw new CastErrorImplementation(
+      Primitives.objectTypeName(value), 'int');
+}
+
+void propertyTypeError(value, property) {
+  // Cuts the property name to the class name.
+  String name = property.substring(3, property.length);
+  throw new TypeErrorImplementation(value, name);
+}
+
+void propertyTypeCastError(value, property) {
+  // Cuts the property name to the class name.
+  String actualType = Primitives.objectTypeName(value);
+  String expectedType = property.substring(3, property.length);
+  throw new CastErrorImplementation(actualType, expectedType);
+}
+
+/**
+ * For types that are not supertypes of native (eg DOM) types,
+ * we emit a simple property check to check that an object implements
+ * that type.
+ */
+propertyTypeCheck(value, property) {
+  if (value == null) return value;
+  if (JS('bool', '!!#[#]', value, property)) return value;
+  propertyTypeError(value, property);
+}
+
+/**
+ * For types that are not supertypes of native (eg DOM) types,
+ * we emit a simple property check to check that an object implements
+ * that type.
+ */
+propertyTypeCast(value, property) {
+  if (value == null || JS('bool', '!!#[#]', value, property)) return value;
+  propertyTypeCastError(value, property);
+}
+
+/**
+ * For types that are supertypes of native (eg DOM) types, we use the
+ * interceptor for the class because we cannot add a JS property to the
+ * prototype at load time.
+ */
+interceptedTypeCheck(value, property) {
+  if (value == null) return value;
+  if ((identical(JS('String', 'typeof #', value), 'object'))
+      && JS('bool', '#[#]', getInterceptor(value), property)) {
+    return value;
+  }
+  propertyTypeError(value, property);
+}
+
+/**
+ * For types that are supertypes of native (eg DOM) types, we use the
+ * interceptor for the class because we cannot add a JS property to the
+ * prototype at load time.
+ */
+interceptedTypeCast(value, property) {
+  if (value == null
+      || ((JS('bool', 'typeof # === "object"', value))
+          && JS('bool', '#[#]', getInterceptor(value), property))) {
+    return value;
+  }
+  propertyTypeCastError(value, property);
+}
+
+/**
+ * Specialization of the type check for num and String and their
+ * supertype since [value] can be a JS primitive.
+ */
+numberOrStringSuperTypeCheck(value, property) {
+  if (value == null) return value;
+  if (value is String) return value;
+  if (value is num) return value;
+  if (JS('bool', '!!#[#]', value, property)) return value;
+  propertyTypeError(value, property);
+}
+
+numberOrStringSuperTypeCast(value, property) {
+  if (value is String) return value;
+  if (value is num) return value;
+  return propertyTypeCast(value, property);
+}
+
+numberOrStringSuperNativeTypeCheck(value, property) {
+  if (value == null) return value;
+  if (value is String) return value;
+  if (value is num) return value;
+  if (JS('bool', '#[#]', getInterceptor(value), property)) return value;
+  propertyTypeError(value, property);
+}
+
+numberOrStringSuperNativeTypeCast(value, property) {
+  if (value == null) return value;
+  if (value is String) return value;
+  if (value is num) return value;
+  if (JS('bool', '#[#]', getInterceptor(value), property)) return value;
+  propertyTypeCastError(value, property);
+}
+
+/**
+ * Specialization of the type check for String and its supertype
+ * since [value] can be a JS primitive.
+ */
+stringSuperTypeCheck(value, property) {
+  if (value == null) return value;
+  if (value is String) return value;
+  if (JS('bool', '!!#[#]', value, property)) return value;
+  propertyTypeError(value, property);
+}
+
+stringSuperTypeCast(value, property) {
+  if (value is String) return value;
+  return propertyTypeCast(value, property);
+}
+
+stringSuperNativeTypeCheck(value, property) {
+  if (value == null) return value;
+  if (value is String) return value;
+  if (JS('bool', '#[#]', getInterceptor(value), property)) return value;
+  propertyTypeError(value, property);
+}
+
+stringSuperNativeTypeCast(value, property) {
+  if (value is String || value == null) return value;
+  if (JS('bool', '#[#]', getInterceptor(value), property)) return value;
+  propertyTypeCastError(value, property);
+}
+
+/**
+ * Specialization of the type check for List and its supertypes,
+ * since [value] can be a JS array.
+ */
+listTypeCheck(value) {
+  if (value == null) return value;
+  if (value is List) return value;
+  throw new TypeErrorImplementation(value, 'List');
+}
+
+listTypeCast(value) {
+  if (value is List || value == null) return value;
+  throw new CastErrorImplementation(
+      Primitives.objectTypeName(value), 'List');
+}
+
+listSuperTypeCheck(value, property) {
+  if (value == null) return value;
+  if (value is List) return value;
+  if (JS('bool', '!!#[#]', value, property)) return value;
+  propertyTypeError(value, property);
+}
+
+listSuperTypeCast(value, property) {
+  if (value is List) return value;
+  return propertyTypeCast(value, property);
+}
+
+listSuperNativeTypeCheck(value, property) {
+  if (value == null) return value;
+  if (value is List) return value;
+  if (JS('bool', '#[#]', getInterceptor(value), property)) return value;
+  propertyTypeError(value, property);
+}
+
+listSuperNativeTypeCast(value, property) {
+  if (value is List || value == null) return value;
+  if (JS('bool', '#[#]', getInterceptor(value), property)) return value;
+  propertyTypeCastError(value, property);
+}
+
+voidTypeCheck(value) {
+  if (value == null) return value;
+  throw new TypeErrorImplementation(value, 'void');
+}
+
+checkMalformedType(value, message) {
+  if (value == null) return value;
+  throw new TypeErrorImplementation.fromMessage(message);
+}
+
+@NoInline()
+void checkDeferredIsLoaded(String loadId, String uri) {
+  if (!_loadedLibraries.contains(loadId)) {
+    throw new DeferredNotLoadedError(uri);
+  }
+}
+
+/**
+ * Special interface recognized by the compiler and implemented by DOM
+ * objects that support integer indexing. This interface is not
+ * visible to anyone, and is only injected into special libraries.
+ */
+abstract class JavaScriptIndexingBehavior extends JSMutableIndexable {
+}
+
+// TODO(lrn): These exceptions should be implemented in core.
+// When they are, remove the 'Implementation' here.
+
+/** Thrown by type assertions that fail. */
+class TypeErrorImplementation extends Error implements TypeError {
+  final String message;
+
+  /**
+   * Normal type error caused by a failed subtype test.
+   */
+  TypeErrorImplementation(Object value, String type)
+      : message = "type '${Primitives.objectTypeName(value)}' is not a subtype "
+                  "of type '$type'";
+
+  TypeErrorImplementation.fromMessage(String this.message);
+
+  String toString() => message;
+}
+
+/** Thrown by the 'as' operator if the cast isn't valid. */
+class CastErrorImplementation extends Error implements CastError {
+  // TODO(lrn): Rename to CastError (and move implementation into core).
+  final String message;
+
+  /**
+   * Normal cast error caused by a failed type cast.
+   */
+  CastErrorImplementation(Object actualType, Object expectedType)
+      : message = "CastError: Casting value of type $actualType to"
+                  " incompatible type $expectedType";
+
+  String toString() => message;
+}
+
+class FallThroughErrorImplementation extends FallThroughError {
+  FallThroughErrorImplementation();
+  String toString() => "Switch case fall-through.";
+}
+
+/**
+ * Helper function for implementing asserts. The compiler treats this specially.
+ */
+void assertHelper(condition) {
+  // Do a bool check first because it is common and faster than 'is Function'.
+  if (condition is !bool) {
+    if (condition is Function) condition = condition();
+    if (condition is !bool) {
+      throw new TypeErrorImplementation(condition, 'bool');
+    }
+  }
+  // Compare to true to avoid boolean conversion check in checked
+  // mode.
+  if (true != condition) throw new AssertionError();
+}
+
+/**
+ * Called by generated code when a method that must be statically
+ * resolved cannot be found.
+ */
+void throwNoSuchMethod(obj, name, arguments, expectedArgumentNames) {
+  Symbol memberName = new _symbol_dev.Symbol.unvalidated(name);
+  throw new NoSuchMethodError(obj, memberName, arguments,
+                              new Map<Symbol, dynamic>(),
+                              expectedArgumentNames);
+}
+
+/**
+ * Called by generated code when a static field's initializer references the
+ * field that is currently being initialized.
+ */
+void throwCyclicInit(String staticName) {
+  throw new CyclicInitializationError(
+      "Cyclic initialization for static $staticName");
+}
+
+/**
+ * Error thrown when a runtime error occurs.
+ */
+class RuntimeError extends Error {
+  final message;
+  RuntimeError(this.message);
+  String toString() => "RuntimeError: $message";
+}
+
+class DeferredNotLoadedError extends Error implements NoSuchMethodError {
+  String libraryName;
+
+  DeferredNotLoadedError(this.libraryName);
+
+  String toString() {
+    return "Deferred library $libraryName was not loaded.";
+  }
+}
+
+abstract class RuntimeType {
+  const RuntimeType();
+
+  toRti();
+}
+
+class RuntimeFunctionType extends RuntimeType {
+  final RuntimeType returnType;
+  final List<RuntimeType> parameterTypes;
+  final List<RuntimeType> optionalParameterTypes;
+  final namedParameters;
+
+  static var /* bool */ inAssert = false;
+
+  RuntimeFunctionType(this.returnType,
+                      this.parameterTypes,
+                      this.optionalParameterTypes,
+                      this.namedParameters);
+
+  bool get isVoid => returnType is VoidRuntimeType;
+
+  /// Called from generated code. [expression] is a Dart object and this method
+  /// returns true if [this] is a supertype of [expression].
+  @NoInline() @NoSideEffects()
+  bool _isTest(expression) {
+    var functionTypeObject = _extractFunctionTypeObjectFrom(expression);
+    return functionTypeObject == null
+        ? false
+        : isFunctionSubtype(functionTypeObject, toRti());
+  }
+
+  @NoInline() @NoSideEffects()
+  _asCheck(expression) {
+    // Type inferrer doesn't think this is called with dynamic arguments.
+    return _check(JS('', '#', expression), true);
+  }
+
+  @NoInline() @NoSideEffects()
+  _assertCheck(expression) {
+    if (inAssert) return null;
+    inAssert = true; // Don't try to check this library itself.
+    try {
+      // Type inferrer don't think this is called with dynamic arguments.
+      return _check(JS('', '#', expression), false);
+    } finally {
+      inAssert = false;
+    }
+  }
+
+  _check(expression, bool isCast) {
+    if (expression == null) return null;
+    if (_isTest(expression)) return expression;
+
+    var self = new FunctionTypeInfoDecoderRing(toRti()).toString();
+    if (isCast) {
+      var functionTypeObject = _extractFunctionTypeObjectFrom(expression);
+      var pretty;
+      if (functionTypeObject != null) {
+        pretty = new FunctionTypeInfoDecoderRing(functionTypeObject).toString();
+      } else {
+        pretty = Primitives.objectTypeName(expression);
+      }
+      throw new CastErrorImplementation(pretty, self);
+    } else {
+      // TODO(ahe): Pass "pretty" function-type to TypeErrorImplementation?
+      throw new TypeErrorImplementation(expression, self);
+    }
+  }
+
+  _extractFunctionTypeObjectFrom(o) {
+    var interceptor = getInterceptor(o);
+    return JS('bool', '# in #', JS_SIGNATURE_NAME(), interceptor)
+        ? JS('', '#[#]()', interceptor, JS_SIGNATURE_NAME())
+        : null;
+  }
+
+  toRti() {
+    var result = JS('=Object', '{ #: "dynafunc" }', JS_FUNCTION_TYPE_TAG());
+    if (isVoid) {
+      JS('', '#[#] = true', result, JS_FUNCTION_TYPE_VOID_RETURN_TAG());
+    } else {
+      if (returnType is! DynamicRuntimeType) {
+        JS('', '#[#] = #', result, JS_FUNCTION_TYPE_RETURN_TYPE_TAG(),
+           returnType.toRti());
+      }
+    }
+    if (parameterTypes != null && !parameterTypes.isEmpty) {
+      JS('', '#[#] = #', result, JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG(),
+         listToRti(parameterTypes));
+    }
+
+    if (optionalParameterTypes != null && !optionalParameterTypes.isEmpty) {
+      JS('', '#[#] = #', result, JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG(),
+         listToRti(optionalParameterTypes));
+    }
+
+    if (namedParameters != null) {
+      var namedRti = JS('=Object', 'Object.create(null)');
+      var keys = extractKeys(namedParameters);
+      for (var i = 0; i < keys.length; i++) {
+        var name = keys[i];
+        var rti = JS('', '#[#]', namedParameters, name).toRti();
+        JS('', '#[#] = #', namedRti, name, rti);
+      }
+      JS('', '#[#] = #', result, JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG(),
+         namedRti);
+    }
+
+    return result;
+  }
+
+  static listToRti(list) {
+    list = JS('JSFixedArray', '#', list);
+    var result = JS('JSExtendableArray', '[]');
+    for (var i = 0; i < list.length; i++) {
+      JS('', '#.push(#)', result, list[i].toRti());
+    }
+    return result;
+  }
+
+  String toString() {
+    String result = '(';
+    bool needsComma = false;
+    if (parameterTypes != null) {
+      for (var i = 0; i < parameterTypes.length; i++) {
+        RuntimeType type = parameterTypes[i];
+        if (needsComma) result += ', ';
+        result += '$type';
+        needsComma = true;
+      }
+    }
+    if (optionalParameterTypes != null && !optionalParameterTypes.isEmpty) {
+      if (needsComma) result += ', ';
+      needsComma = false;
+      result += '[';
+      for (var i = 0; i < optionalParameterTypes.length; i++) {
+        RuntimeType type = optionalParameterTypes[i];
+        if (needsComma) result += ', ';
+        result += '$type';
+        needsComma = true;
+      }
+      result += ']';
+    } else if (namedParameters != null) {
+      if (needsComma) result += ', ';
+      needsComma = false;
+      result += '{';
+      var keys = extractKeys(namedParameters);
+      for (var i = 0; i < keys.length; i++) {
+        var name = keys[i];
+        if (needsComma) result += ', ';
+        var rti = JS('', '#[#]', namedParameters, name).toRti();
+        result += '$rti ${JS("String", "#", name)}';
+        needsComma = true;
+      }
+      result += '}';
+    }
+
+    result += ') -> $returnType';
+    return result;
+  }
+}
+
+RuntimeFunctionType buildFunctionType(returnType,
+                                      parameterTypes,
+                                      optionalParameterTypes) {
+  return new RuntimeFunctionType(
+      returnType,
+      parameterTypes,
+      optionalParameterTypes,
+      null);
+}
+
+RuntimeFunctionType buildNamedFunctionType(returnType,
+                                           parameterTypes,
+                                           namedParameters) {
+  return new RuntimeFunctionType(
+      returnType,
+      parameterTypes,
+      null,
+      namedParameters);
+}
+
+RuntimeType buildInterfaceType(rti, typeArguments) {
+  String name = JS('String|Null', r'#.name', rti);
+  if (typeArguments == null || typeArguments.isEmpty) {
+    return new RuntimeTypePlain(name);
+  }
+  return new RuntimeTypeGeneric(name, typeArguments, null);
+}
+
+class DynamicRuntimeType extends RuntimeType {
+  const DynamicRuntimeType();
+
+  String toString() => 'dynamic';
+
+  toRti() => null;
+}
+
+RuntimeType getDynamicRuntimeType() => const DynamicRuntimeType();
+
+class VoidRuntimeType extends RuntimeType {
+  const VoidRuntimeType();
+
+  String toString() => 'void';
+
+  toRti() => throw 'internal error';
+}
+
+RuntimeType getVoidRuntimeType() => const VoidRuntimeType();
+
+/**
+ * Meta helper for function type tests.
+ *
+ * A "meta helper" is a helper function that is never called but simulates how
+ * generated code behaves as far as resolution and type inference is concerned.
+ */
+functionTypeTestMetaHelper() {
+  var dyn = JS('', 'x');
+  var dyn2 = JS('', 'x');
+  List fixedListOrNull = JS('JSFixedArray|Null', 'x');
+  List fixedListOrNull2 = JS('JSFixedArray|Null', 'x');
+  List fixedList = JS('JSFixedArray', 'x');
+  // TODO(ahe): Can we use [UnknownJavaScriptObject] below?
+  var /* UnknownJavaScriptObject */ jsObject = JS('=Object', 'x');
+
+  buildFunctionType(dyn, fixedListOrNull, fixedListOrNull2);
+  buildNamedFunctionType(dyn, fixedList, jsObject);
+  buildInterfaceType(dyn, fixedListOrNull);
+  getDynamicRuntimeType();
+  getVoidRuntimeType();
+  convertRtiToRuntimeType(dyn);
+  dyn._isTest(dyn2);
+  dyn._asCheck(dyn2);
+  dyn._assertCheck(dyn2);
+}
+
+RuntimeType convertRtiToRuntimeType(rti) {
+  if (rti == null) {
+    return getDynamicRuntimeType();
+  } else if (JS('bool', 'typeof # == "function"', rti)) {
+    return new RuntimeTypePlain(JS('String', r'rti.name'));
+  } else if (JS('bool', '#.constructor == Array', rti)) {
+    List list = JS('JSFixedArray', '#', rti);
+    String name = JS('String', r'#.name', list[0]);
+    List arguments = [];
+    for (int i = 1; i < list.length; i++) {
+      arguments.add(convertRtiToRuntimeType(list[i]));
+    }
+    return new RuntimeTypeGeneric(name, arguments, rti);
+  } else if (JS('bool', '"func" in #', rti)) {
+    return new FunctionTypeInfoDecoderRing(rti).toRuntimeType();
+  } else {
+    throw new RuntimeError(
+        "Cannot convert "
+        "'${JS('String', 'JSON.stringify(#)', rti)}' to RuntimeType.");
+  }
+}
+
+class RuntimeTypePlain extends RuntimeType {
+  final String name;
+
+  RuntimeTypePlain(this.name);
+
+  toRti() {
+    var allClasses = JS_EMBEDDED_GLOBAL('', ALL_CLASSES);
+    var rti = JS('', '#[#]', allClasses, name);
+    if (rti == null) throw "no type for '$name'";
+    return rti;
+  }
+
+  String toString() => name;
+}
+
+class RuntimeTypeGeneric extends RuntimeType {
+  final String name;
+  final List<RuntimeType> arguments;
+  var rti;
+
+  RuntimeTypeGeneric(this.name, this.arguments, this.rti);
+
+  toRti() {
+    if (rti != null) return rti;
+    var allClasses = JS_EMBEDDED_GLOBAL('', ALL_CLASSES);
+    var result = JS('JSExtendableArray', '[#[#]]', allClasses, name);
+    if (result[0] == null) {
+      throw "no type for '$name<...>'";
+    }
+    for (RuntimeType argument in arguments) {
+      JS('', '#.push(#)', result, argument.toRti());
+    }
+    return rti = result;
+  }
+
+  String toString() => '$name<${arguments.join(", ")}>';
+}
+
+class FunctionTypeInfoDecoderRing {
+  final _typeData;
+  String _cachedToString;
+
+  FunctionTypeInfoDecoderRing(this._typeData);
+
+  bool get _hasReturnType => JS('bool', '"ret" in #', _typeData);
+  get _returnType => JS('', '#.ret', _typeData);
+
+  bool get _isVoid => JS('bool', '!!#.void', _typeData);
+
+  bool get _hasArguments => JS('bool', '"args" in #', _typeData);
+  List get _arguments => JS('JSExtendableArray', '#.args', _typeData);
+
+  bool get _hasOptionalArguments => JS('bool', '"opt" in #', _typeData);
+  List get _optionalArguments => JS('JSExtendableArray', '#.opt', _typeData);
+
+  bool get _hasNamedArguments => JS('bool', '"named" in #', _typeData);
+  get _namedArguments => JS('=Object', '#.named', _typeData);
+
+  RuntimeType toRuntimeType() {
+    // TODO(ahe): Implement this (and update return type).
+    return const DynamicRuntimeType();
+  }
+
+  String _convert(type) {
+    String result = runtimeTypeToString(type);
+    if (result != null) return result;
+    if (JS('bool', '"func" in #', type)) {
+      return new FunctionTypeInfoDecoderRing(type).toString();
+    } else {
+      throw 'bad type';
+    }
+  }
+
+  String toString() {
+    if (_cachedToString != null) return _cachedToString;
+    var s = "(";
+    var sep = '';
+    if (_hasArguments) {
+      for (var argument in _arguments) {
+        s += sep;
+        s += _convert(argument);
+        sep = ', ';
+      }
+    }
+    if (_hasOptionalArguments) {
+      s += '$sep[';
+      sep = '';
+      for (var argument in _optionalArguments) {
+        s += sep;
+        s += _convert(argument);
+        sep = ', ';
+      }
+      s += ']';
+    }
+    if (_hasNamedArguments) {
+      s += '$sep{';
+      sep = '';
+      for (var name in extractKeys(_namedArguments)) {
+        s += sep;
+        s += '$name: ';
+        s += _convert(JS('', '#[#]', _namedArguments, name));
+        sep = ', ';
+      }
+      s += '}';
+    }
+    s += ') -> ';
+    if (_isVoid) {
+      s += 'void';
+    } else if (_hasReturnType) {
+      s += _convert(_returnType);
+    } else {
+      s += 'dynamic';
+    }
+    return _cachedToString = "$s";
+  }
+}
+
+// TODO(ahe): Remove this class and call noSuchMethod instead.
+class UnimplementedNoSuchMethodError extends Error
+    implements NoSuchMethodError {
+  final String _message;
+
+  UnimplementedNoSuchMethodError(this._message);
+
+  String toString() => "Unsupported operation: $_message";
+}
+
+/**
+ * Creates a random number with 64 bits of randomness.
+ *
+ * This will be truncated to the 53 bits available in a double.
+ */
+int random64() {
+  // TODO(lrn): Use a secure random source.
+  int int32a = JS("int", "(Math.random() * 0x100000000) >>> 0");
+  int int32b = JS("int", "(Math.random() * 0x100000000) >>> 0");
+  return int32a + int32b * 0x100000000;
+}
+
+/**
+ * Returns a property name for placing data on JavaScript objects shared between
+ * DOM isolates.  This happens when multiple programs are loaded in the same
+ * JavaScript context (i.e. page).  The name is based on [name] but with an
+ * additional part that is unique for each isolate.
+ *
+ * The form of the name is '___dart_$name_$id'.
+ */
+String getIsolateAffinityTag(String name) {
+  var isolateTagGetter =
+      JS_EMBEDDED_GLOBAL('', GET_ISOLATE_TAG);
+  return JS('String', '#(#)', isolateTagGetter, name);
+}
+
+typedef Future<Null> LoadLibraryFunctionType();
+
+LoadLibraryFunctionType _loadLibraryWrapper(String loadId) {
+  return () => loadDeferredLibrary(loadId);
+}
+
+final Map<String, Future<Null>> _loadingLibraries = <String, Future<Null>>{};
+final Set<String> _loadedLibraries = new Set<String>();
+
+Future<Null> loadDeferredLibrary(String loadId) {
+  // For each loadId there is a list of hunk-uris to load, and a corresponding
+  // list of hashes. These are stored in the app-global scope.
+  List<String> uris = JS('JSExtendableArray|Null',
+      'init.deferredLibraryUris[#]', loadId);
+  List<String> hashes = JS('JSExtendableArray|Null',
+      'init.deferredLibraryHashes[#]', loadId);
+  if (uris == null) return new Future.value(null);
+  // The indices into `uris` and `hashes` that we want to load.
+  List<int> indices = new List.generate(uris.length, (i) => i);
+  return Future.wait(indices
+      // Filter away indices for hunks that have already been loaded.
+      .where((int i) => !JS('bool','init.isHunkLoaded(#)', hashes[i]))
+      // Load the rest.
+      .map((int i) => _loadHunk(uris[i]))).then((_) {
+    // Now all hunks have been loaded, we call all their initializers
+    for (String hash in hashes) {
+      // TODO(floitsch): Replace unsafe access to embedded global.
+      JS('void', 'init.initializeLoadedHunk(#)', hash);
+    }
+    _loadedLibraries.add(loadId);
+  });
+}
+
+Future<Null> _loadHunk(String hunkName) {
+  // TODO(ahe): Validate libraryName.  Kasper points out that you want
+  // to be able to experiment with the effect of toggling @DeferLoad,
+  // so perhaps we should silently ignore "bad" library names.
+  Future<Null> future = _loadingLibraries[hunkName];
+  if (future != null) {
+    return future.then((_) => null);
+  }
+
+  String uri = IsolateNatives.thisScript;
+
+  int index = uri.lastIndexOf('/');
+  uri = '${uri.substring(0, index + 1)}$hunkName';
+
+  if (Primitives.isJsshell || Primitives.isD8) {
+    // TODO(ahe): Move this code to a JavaScript command helper script that is
+    // not included in generated output.
+    return _loadingLibraries[hunkName] = new Future<Null>(() {
+      try {
+        // Create a new function to avoid getting access to current function
+        // context.
+        JS('void', '(new Function(#))()', 'load("$uri")');
+      } catch (error, stackTrace) {
+        throw new DeferredLoadException("Loading $uri failed.");
+      }
+      return null;
+    });
+  } else if (isWorker()) {
+    // We are in a web worker. Load the code with an XMLHttpRequest.
+    return _loadingLibraries[hunkName] = new Future<Null>(() {
+      Completer completer = new Completer<Null>();
+      enterJsAsync();
+      Future<Null> leavingFuture = completer.future.whenComplete(() {
+        leaveJsAsync();
+      });
+
+      int index = uri.lastIndexOf('/');
+      uri = '${uri.substring(0, index + 1)}$hunkName';
+      var xhr = JS('dynamic', 'new XMLHttpRequest()');
+      JS('void', '#.open("GET", #)', xhr, uri);
+      JS('void', '#.addEventListener("load", #, false)',
+         xhr, convertDartClosureToJS((event) {
+        if (JS('int', '#.status', xhr) != 200) {
+          completer.completeError(
+              new DeferredLoadException("Loading $uri failed."));
+          return;
+        }
+        String code = JS('String', '#.responseText', xhr);
+        try {
+          // Create a new function to avoid getting access to current function
+          // context.
+          JS('void', '(new Function(#))()', code);
+        } catch (error, stackTrace) {
+          completer.completeError(
+            new DeferredLoadException("Evaluating $uri failed."));
+          return;
+        }
+        completer.complete(null);
+      }, 1));
+
+      var fail = convertDartClosureToJS((event) {
+        new DeferredLoadException("Loading $uri failed.");
+      }, 1);
+      JS('void', '#.addEventListener("error", #, false)', xhr, fail);
+      JS('void', '#.addEventListener("abort", #, false)', xhr, fail);
+
+      JS('void', '#.send()', xhr);
+      return leavingFuture;
+    });
+  }
+  // We are in a dom-context.
+  return _loadingLibraries[hunkName] = new Future<Null>(() {
+    Completer completer = new Completer<Null>();
+    // Inject a script tag.
+    var script = JS('', 'document.createElement("script")');
+    JS('', '#.type = "text/javascript"', script);
+    JS('', '#.src = #', script, uri);
+    JS('', '#.addEventListener("load", #, false)',
+       script, convertDartClosureToJS((event) {
+      completer.complete(null);
+    }, 1));
+    JS('', '#.addEventListener("error", #, false)',
+       script, convertDartClosureToJS((event) {
+      completer.completeError(
+          new DeferredLoadException("Loading $uri failed."));
+    }, 1));
+    JS('', 'document.body.appendChild(#)', script);
+
+    return completer.future;
+  });
+}
+
+class MainError extends Error implements NoSuchMethodError {
+  final String _message;
+
+  MainError(this._message);
+
+  String toString() => 'NoSuchMethodError: $_message';
+}
+
+void missingMain() {
+  throw new MainError("No top-level function named 'main'.");
+}
+
+void badMain() {
+  throw new MainError("'main' is not a function.");
+}
+
+void mainHasTooManyParameters() {
+  throw new MainError("'main' expects too many parameters.");
+}
diff --git a/sdk/lib/_internal/compiler/js_lib/js_mirrors.dart b/sdk/lib/_internal/compiler/js_lib/js_mirrors.dart
new file mode 100644
index 0000000..3ff9789
--- /dev/null
+++ b/sdk/lib/_internal/compiler/js_lib/js_mirrors.dart
@@ -0,0 +1,2946 @@
+// 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 dart._js_mirrors;
+
+import 'shared/runtime_data.dart' as encoding;
+import 'shared/embedded_names.dart' show
+    ALL_CLASSES,
+    LAZIES,
+    LIBRARIES,
+    STATICS,
+    TYPE_INFORMATION;
+
+import 'dart:collection' show
+    UnmodifiableListView,
+    UnmodifiableMapView;
+
+import 'dart:mirrors';
+
+import 'dart:_foreign_helper' show
+    JS,
+    JS_CURRENT_ISOLATE,
+    JS_CURRENT_ISOLATE_CONTEXT,
+    JS_EMBEDDED_GLOBAL,
+    JS_GET_NAME;
+
+import 'dart:_internal' as _symbol_dev;
+
+import 'dart:_js_helper' show
+    BoundClosure,
+    CachedInvocation,
+    Closure,
+    JSInvocationMirror,
+    JsCache,
+    Null,
+    Primitives,
+    ReflectionInfo,
+    RuntimeError,
+    TearOffClosure,
+    TypeVariable,
+    UnimplementedNoSuchMethodError,
+    createRuntimeType,
+    createUnmangledInvocationMirror,
+    getMangledTypeName,
+    getMetadata,
+    getRuntimeType,
+    runtimeTypeToString,
+    setRuntimeTypeInfo,
+    throwInvalidReflectionError,
+    TypeImpl;
+
+import 'dart:_interceptors' show
+    Interceptor,
+    JSArray,
+    JSExtendableArray,
+    getInterceptor;
+
+import 'dart:_js_names';
+
+const String METHODS_WITH_OPTIONAL_ARGUMENTS = r'$methodsWithOptionalArguments';
+
+bool hasReflectableProperty(var jsFunction) {
+  return JS('bool', '# in #', JS_GET_NAME("REFLECTABLE"), jsFunction);
+}
+
+/// No-op method that is called to inform the compiler that tree-shaking needs
+/// to be disabled.
+disableTreeShaking() => preserveNames();
+
+/// No-op method that is called to inform the compiler that metadata must be
+/// preserved at runtime.
+preserveMetadata() {}
+
+/// No-op method that is called to inform the compiler that the compiler must
+/// preserve the URIs.
+preserveUris() {}
+
+/// No-op method that is called to inform the compiler that the compiler must
+/// preserve the library names.
+preserveLibraryNames() {}
+
+String getName(Symbol symbol) {
+  preserveNames();
+  return n(symbol);
+}
+
+class JsMirrorSystem implements MirrorSystem {
+  UnmodifiableMapView<Uri, LibraryMirror> _cachedLibraries;
+
+  final IsolateMirror isolate = new JsIsolateMirror();
+
+  JsTypeMirror get dynamicType => _dynamicType;
+  JsTypeMirror get voidType => _voidType;
+
+  static final JsTypeMirror _dynamicType =
+      new JsTypeMirror(const Symbol('dynamic'));
+  static final JsTypeMirror _voidType = new JsTypeMirror(const Symbol('void'));
+
+  static final Map<String, List<LibraryMirror>> librariesByName =
+      computeLibrariesByName();
+
+  Map<Uri, LibraryMirror> get libraries {
+    if (_cachedLibraries != null) return _cachedLibraries;
+    Map<Uri, LibraryMirror> result = new Map();
+    for (List<LibraryMirror> list in librariesByName.values) {
+      for (LibraryMirror library in list) {
+        result[library.uri] = library;
+      }
+    }
+    return _cachedLibraries =
+        new UnmodifiableMapView<Uri, LibraryMirror>(result);
+  }
+
+  LibraryMirror findLibrary(Symbol libraryName) {
+    return librariesByName[n(libraryName)].single;
+  }
+
+  static Map<String, List<LibraryMirror>> computeLibrariesByName() {
+    disableTreeShaking();
+    var result = new Map<String, List<LibraryMirror>>();
+    var jsLibraries = JS_EMBEDDED_GLOBAL('JSExtendableArray|Null', LIBRARIES);
+    if (jsLibraries == null) return result;
+    for (List data in jsLibraries) {
+      String name = data[0];
+      Uri uri = Uri.parse(data[1]);
+      List<String> classes = data[2];
+      List<String> functions = data[3];
+      var metadataFunction = data[4];
+      var fields = data[5];
+      bool isRoot = data[6];
+      var globalObject = data[7];
+      List metadata = (metadataFunction == null)
+          ? const [] : JS('List', '#()', metadataFunction);
+      var libraries = result.putIfAbsent(name, () => <LibraryMirror>[]);
+      libraries.add(
+          new JsLibraryMirror(
+              s(name), uri, classes, functions, metadata, fields, isRoot,
+              globalObject));
+    }
+    return result;
+  }
+}
+
+abstract class JsMirror implements Mirror {
+  const JsMirror();
+
+  String get _prettyName;
+
+  String toString() => _prettyName;
+
+  // TODO(ahe): Remove this method from the API.
+  MirrorSystem get mirrors => currentJsMirrorSystem;
+
+  _getField(JsMirror receiver) {
+    throw new UnimplementedError();
+  }
+
+  void _setField(JsMirror receiver, Object arg) {
+    throw new UnimplementedError();
+  }
+
+  _loadField(String name) {
+    throw new UnimplementedError();
+  }
+
+  void _storeField(String name, Object arg) {
+    throw new UnimplementedError();
+  }
+}
+
+// This class is somewhat silly in the current implementation.
+class JsIsolateMirror extends JsMirror implements IsolateMirror {
+  final _isolateContext = JS_CURRENT_ISOLATE_CONTEXT();
+
+  String get _prettyName => 'Isolate';
+
+  String get debugName {
+    String id = _isolateContext == null ? 'X' : _isolateContext.id.toString();
+    // Using name similar to what the VM uses.
+    return '${n(rootLibrary.simpleName)}-$id';
+  }
+
+  bool get isCurrent => JS_CURRENT_ISOLATE_CONTEXT() == _isolateContext;
+
+  LibraryMirror get rootLibrary {
+    return currentJsMirrorSystem.libraries.values.firstWhere(
+        (JsLibraryMirror library) => library._isRoot);
+  }
+}
+
+abstract class JsDeclarationMirror extends JsMirror
+    implements DeclarationMirror {
+  final Symbol simpleName;
+
+  const JsDeclarationMirror(this.simpleName);
+
+  Symbol get qualifiedName => computeQualifiedName(owner, simpleName);
+
+  bool get isPrivate => n(simpleName).startsWith('_');
+
+  bool get isTopLevel => owner != null && owner is LibraryMirror;
+
+  // TODO(ahe): This should use qualifiedName.
+  String toString() => "$_prettyName on '${n(simpleName)}'";
+
+  List<JsMethodMirror> get _methods {
+    throw new RuntimeError('Should not call _methods');
+  }
+
+  _invoke(List positionalArguments, Map<Symbol, dynamic> namedArguments) {
+    throw new RuntimeError('Should not call _invoke');
+  }
+
+  // TODO(ahe): Implement this.
+  SourceLocation get location => throw new UnimplementedError();
+}
+
+class JsTypeVariableMirror extends JsTypeMirror implements TypeVariableMirror {
+  final DeclarationMirror owner;
+  final TypeVariable _typeVariable;
+  final int _metadataIndex;
+  TypeMirror _cachedUpperBound;
+
+  JsTypeVariableMirror(TypeVariable typeVariable, this.owner,
+                       this._metadataIndex)
+      : this._typeVariable = typeVariable,
+        super(s(typeVariable.name));
+
+  bool operator ==(other) {
+    return (other is JsTypeVariableMirror &&
+        simpleName == other.simpleName &&
+        owner == other.owner);
+  }
+
+  int get hashCode {
+    int code = 0x3FFFFFFF & (JsTypeVariableMirror).hashCode;
+    code ^= 17 * simpleName.hashCode;
+    code ^= 19 * owner.hashCode;
+    return code;
+  }
+
+  String get _prettyName => 'TypeVariableMirror';
+
+  bool get isTopLevel => false;
+  bool get isStatic => false;
+
+  TypeMirror get upperBound {
+    if (_cachedUpperBound != null) return _cachedUpperBound;
+    return _cachedUpperBound = typeMirrorFromRuntimeTypeRepresentation(
+        owner, getMetadata(_typeVariable.bound));
+  }
+
+  bool isSubtypeOf(TypeMirror other) => throw new UnimplementedError();
+  bool isAssignableTo(TypeMirror other) => throw new UnimplementedError();
+
+  _asRuntimeType() => _metadataIndex;
+}
+
+class JsTypeMirror extends JsDeclarationMirror implements TypeMirror {
+  JsTypeMirror(Symbol simpleName)
+      : super(simpleName);
+
+  String get _prettyName => 'TypeMirror';
+
+  DeclarationMirror get owner => null;
+
+  // TODO(ahe): Doesn't match the specification, see http://dartbug.com/11569.
+  bool get isTopLevel => true;
+
+  // TODO(ahe): Implement these.
+  List<InstanceMirror> get metadata => throw new UnimplementedError();
+
+  bool get hasReflectedType => false;
+  Type get reflectedType {
+    throw new UnsupportedError("This type does not support reflectedType");
+  }
+
+  List<TypeVariableMirror> get typeVariables => const <TypeVariableMirror>[];
+  List<TypeMirror> get typeArguments => const <TypeMirror>[];
+
+  bool get isOriginalDeclaration => true;
+  TypeMirror get originalDeclaration => this;
+
+  bool isSubtypeOf(TypeMirror other) => throw new UnimplementedError();
+  bool isAssignableTo(TypeMirror other) => throw new UnimplementedError();
+
+  _asRuntimeType() {
+    if (this == JsMirrorSystem._dynamicType) return null;
+    if (this == JsMirrorSystem._voidType) return null;
+    throw new RuntimeError('Should not call _asRuntimeType');
+  }
+}
+
+class JsLibraryMirror extends JsDeclarationMirror with JsObjectMirror
+    implements LibraryMirror {
+  final Uri _uri;
+  final List<String> _classes;
+  final List<String> _functions;
+  final List _metadata;
+  final String _compactFieldSpecification;
+  final bool _isRoot;
+  final _globalObject;
+  List<JsMethodMirror> _cachedFunctionMirrors;
+  List<VariableMirror> _cachedFields;
+  UnmodifiableMapView<Symbol, ClassMirror> _cachedClasses;
+  UnmodifiableMapView<Symbol, MethodMirror> _cachedFunctions;
+  UnmodifiableMapView<Symbol, MethodMirror> _cachedGetters;
+  UnmodifiableMapView<Symbol, MethodMirror> _cachedSetters;
+  UnmodifiableMapView<Symbol, VariableMirror> _cachedVariables;
+  UnmodifiableMapView<Symbol, Mirror> _cachedMembers;
+  UnmodifiableMapView<Symbol, DeclarationMirror> _cachedDeclarations;
+  UnmodifiableListView<InstanceMirror> _cachedMetadata;
+
+  JsLibraryMirror(Symbol simpleName,
+                  this._uri,
+                  this._classes,
+                  this._functions,
+                  this._metadata,
+                  this._compactFieldSpecification,
+                  this._isRoot,
+                  this._globalObject)
+      : super(simpleName) {
+    preserveLibraryNames();
+  }
+
+  String get _prettyName => 'LibraryMirror';
+
+  Uri get uri {
+    preserveUris();
+    return _uri;
+  }
+
+  Symbol get qualifiedName => simpleName;
+
+  List<JsMethodMirror> get _methods => _functionMirrors;
+
+  Map<Symbol, ClassMirror> get __classes {
+    if (_cachedClasses != null) return _cachedClasses;
+    var result = new Map();
+    for (String className in _classes) {
+      var cls = reflectClassByMangledName(className);
+      if (cls is ClassMirror) {
+        cls = cls.originalDeclaration;
+      }
+      if (cls is JsClassMirror) {
+        result[cls.simpleName] = cls;
+        cls._owner = this;
+      } else  if (cls is JsTypedefMirror) {
+        result[cls.simpleName] = cls;
+      }
+    }
+    return _cachedClasses =
+        new UnmodifiableMapView<Symbol, ClassMirror>(result);
+  }
+
+  InstanceMirror setField(Symbol fieldName, Object arg) {
+    String name = n(fieldName);
+    if (name.endsWith('=')) throw new ArgumentError('');
+    var mirror = __functions[s('$name=')];
+    if (mirror == null) mirror = __variables[fieldName];
+    if (mirror == null) {
+      throw new NoSuchStaticMethodError.method(
+          null, setterSymbol(fieldName), [arg], null);
+    }
+    mirror._setField(this, arg);
+    return reflect(arg);
+  }
+
+  InstanceMirror getField(Symbol fieldName) {
+    JsMirror mirror = __members[fieldName];
+    if (mirror == null) {
+      throw new NoSuchStaticMethodError.method(null, fieldName, [], null);
+    }
+    if (mirror is! MethodMirror) return reflect(mirror._getField(this));
+    JsMethodMirror methodMirror = mirror;
+    if (methodMirror.isGetter) return reflect(mirror._getField(this));
+    assert(methodMirror.isRegularMethod);
+    var getter = JS("", "#['\$getter']", methodMirror._jsFunction);
+    if (getter == null) throw new UnimplementedError();
+    return reflect(JS("", "#()", getter));
+  }
+
+  InstanceMirror invoke(Symbol memberName,
+                        List positionalArguments,
+                        [Map<Symbol, dynamic> namedArguments]) {
+    if (namedArguments != null && !namedArguments.isEmpty) {
+      throw new UnsupportedError('Named arguments are not implemented.');
+    }
+    JsDeclarationMirror mirror = __members[memberName];
+
+    if (mirror is JsMethodMirror && !mirror.canInvokeReflectively()) {
+      throwInvalidReflectionError(n(memberName));
+    }
+    if (mirror == null || mirror is JsMethodMirror && mirror.isSetter) {
+      throw new NoSuchStaticMethodError.method(
+          null, memberName, positionalArguments, namedArguments);
+    }
+    if (mirror is JsMethodMirror && !mirror.isGetter) {
+      return reflect(mirror._invoke(positionalArguments, namedArguments));
+    }
+    return getField(memberName)
+        .invoke(#call, positionalArguments, namedArguments);
+  }
+
+  _loadField(String name) {
+    // TODO(ahe): What about lazily initialized fields? See
+    // [JsClassMirror.getField].
+
+    // '$' (JS_CURRENT_ISOLATE()) stores state which is read directly, so we
+    // shouldn't use [_globalObject] here.
+    assert(JS('bool', '# in #', name, JS_CURRENT_ISOLATE()));
+    return JS('', '#[#]', JS_CURRENT_ISOLATE(), name);
+  }
+
+  void _storeField(String name, Object arg) {
+    // '$' (JS_CURRENT_ISOLATE()) stores state which is stored directly, so we
+    // shouldn't use [_globalObject] here.
+    assert(JS('bool', '# in #', name, JS_CURRENT_ISOLATE()));
+    JS('void', '#[#] = #', JS_CURRENT_ISOLATE(), name, arg);
+  }
+
+  List<JsMethodMirror> get _functionMirrors {
+    if (_cachedFunctionMirrors != null) return _cachedFunctionMirrors;
+    var result = new List<JsMethodMirror>();
+    for (int i = 0; i < _functions.length; i++) {
+      String name = _functions[i];
+      var jsFunction = JS('', '#[#]', _globalObject, name);
+      String unmangledName = mangledGlobalNames[name];
+      if (unmangledName == null ||
+          JS('bool', "!!#['\$getterStub']", jsFunction)) {
+        // If there is no unmangledName, [jsFunction] is either a synthetic
+        // implementation detail, or something that is excluded
+        // by @MirrorsUsed.
+        // If it has a getterStub property it is a synthetic stub.
+        // TODO(floitsch): Remove the getterStub hack.
+        continue;
+      }
+      bool isConstructor = unmangledName.startsWith('new ');
+      bool isStatic = !isConstructor; // Top-level functions are static, but
+                                      // constructors are not.
+      if (isConstructor) {
+        unmangledName = unmangledName.substring(4).replaceAll(r'$', '.');
+      }
+      JsMethodMirror mirror =
+          new JsMethodMirror.fromUnmangledName(
+              unmangledName, jsFunction, isStatic, isConstructor);
+      result.add(mirror);
+      mirror._owner = this;
+    }
+    return _cachedFunctionMirrors = result;
+  }
+
+  List<VariableMirror> get _fields {
+    if (_cachedFields != null) return _cachedFields;
+    var result = <VariableMirror>[];
+    parseCompactFieldSpecification(
+        this, _compactFieldSpecification, true, result);
+    return _cachedFields = result;
+  }
+
+  Map<Symbol, MethodMirror> get __functions {
+    if (_cachedFunctions != null) return _cachedFunctions;
+    var result = new Map();
+    for (JsMethodMirror mirror in _functionMirrors) {
+      if (!mirror.isConstructor) result[mirror.simpleName] = mirror;
+    }
+    return _cachedFunctions =
+        new UnmodifiableMapView<Symbol, MethodMirror>(result);
+  }
+
+  Map<Symbol, MethodMirror> get __getters {
+    if (_cachedGetters != null) return _cachedGetters;
+    var result = new Map();
+    // TODO(ahe): Implement this.
+    return _cachedGetters =
+        new UnmodifiableMapView<Symbol, MethodMirror>(result);
+  }
+
+  Map<Symbol, MethodMirror> get __setters {
+    if (_cachedSetters != null) return _cachedSetters;
+    var result = new Map();
+    // TODO(ahe): Implement this.
+    return _cachedSetters =
+        new UnmodifiableMapView<Symbol, MethodMirror>(result);
+  }
+
+  Map<Symbol, VariableMirror> get __variables {
+    if (_cachedVariables != null) return _cachedVariables;
+    var result = new Map();
+    for (JsVariableMirror mirror in _fields) {
+      result[mirror.simpleName] = mirror;
+    }
+    return _cachedVariables =
+        new UnmodifiableMapView<Symbol, VariableMirror>(result);
+  }
+
+  Map<Symbol, Mirror> get __members {
+    if (_cachedMembers !=  null) return _cachedMembers;
+    Map<Symbol, Mirror> result = new Map.from(__classes);
+    addToResult(Symbol key, Mirror value) {
+      result[key] = value;
+    }
+    __functions.forEach(addToResult);
+    __getters.forEach(addToResult);
+    __setters.forEach(addToResult);
+    __variables.forEach(addToResult);
+    return _cachedMembers = new UnmodifiableMapView<Symbol, Mirror>(result);
+  }
+
+  Map<Symbol, DeclarationMirror> get declarations {
+    if (_cachedDeclarations != null) return _cachedDeclarations;
+    var result = new Map<Symbol, DeclarationMirror>();
+    addToResult(Symbol key, Mirror value) {
+      result[key] = value;
+    }
+    __members.forEach(addToResult);
+    return _cachedDeclarations =
+        new UnmodifiableMapView<Symbol, DeclarationMirror>(result);
+  }
+
+  List<InstanceMirror> get metadata {
+    if (_cachedMetadata != null) return _cachedMetadata;
+    preserveMetadata();
+    return _cachedMetadata =
+        new UnmodifiableListView<InstanceMirror>(_metadata.map(reflect));
+  }
+
+  // TODO(ahe): Test this getter.
+  DeclarationMirror get owner => null;
+
+  List<LibraryDependencyMirror> get libraryDependencies
+      => throw new UnimplementedError();
+}
+
+String n(Symbol symbol) => _symbol_dev.Symbol.getName(symbol);
+
+Symbol s(String name) {
+  if (name == null) return null;
+  return new _symbol_dev.Symbol.unvalidated(name);
+}
+
+Symbol setterSymbol(Symbol symbol) => s("${n(symbol)}=");
+
+final JsMirrorSystem currentJsMirrorSystem = new JsMirrorSystem();
+
+InstanceMirror reflect(Object reflectee) {
+  if (reflectee is Closure) {
+    return new JsClosureMirror(reflectee);
+  } else {
+    return new JsInstanceMirror(reflectee);
+  }
+}
+
+TypeMirror reflectType(Type key) {
+  return reflectClassByMangledName(getMangledTypeName(key));
+}
+
+TypeMirror reflectClassByMangledName(String mangledName) {
+  String unmangledName = mangledGlobalNames[mangledName];
+  if (mangledName == 'dynamic') return JsMirrorSystem._dynamicType;
+  if (mangledName == 'void') return JsMirrorSystem._voidType;
+  if (unmangledName == null) unmangledName = mangledName;
+  return reflectClassByName(s(unmangledName), mangledName);
+}
+
+var classMirrors;
+
+TypeMirror reflectClassByName(Symbol symbol, String mangledName) {
+  if (classMirrors == null) classMirrors = JsCache.allocate();
+  var mirror = JsCache.fetch(classMirrors, mangledName);
+  if (mirror != null) return mirror;
+  disableTreeShaking();
+  int typeArgIndex = mangledName.indexOf("<");
+  if (typeArgIndex != -1) {
+    mirror = new JsTypeBoundClassMirror(reflectClassByMangledName(
+        mangledName.substring(0, typeArgIndex)).originalDeclaration,
+        // Remove the angle brackets enclosing the type arguments.
+        mangledName.substring(typeArgIndex + 1, mangledName.length - 1));
+    JsCache.update(classMirrors, mangledName, mirror);
+    return mirror;
+  }
+  var allClasses = JS_EMBEDDED_GLOBAL('', ALL_CLASSES);
+  var constructor = JS('var', '#[#]', allClasses, mangledName);
+  if (constructor == null) {
+    // Probably an intercepted class.
+    // TODO(ahe): How to handle intercepted classes?
+    throw new UnsupportedError('Cannot find class for: ${n(symbol)}');
+  }
+  var descriptor = JS('', '#["@"]', constructor);
+  var fields;
+  var fieldsMetadata;
+  if (descriptor == null) {
+    // This is a native class, or an intercepted class.
+    // TODO(ahe): Preserve descriptor for such classes.
+  } else {
+    fields = JS('', '#[#]', descriptor,
+        JS_GET_NAME('CLASS_DESCRIPTOR_PROPERTY'));
+    if (fields is List) {
+      fieldsMetadata = fields.getRange(1, fields.length).toList();
+      fields = fields[0];
+    }
+    if (fields is! String) {
+      // TODO(ahe): This is CSP mode.  Find a way to determine the
+      // fields of this class.
+      fields = '';
+    }
+  }
+
+  if (encoding.isTypedefDescriptor(fields)) {
+    int index = encoding.getTypeFromTypedef(fields);
+    mirror = new JsTypedefMirror(symbol, mangledName, getMetadata(index));
+  } else {
+    var superclassName = fields.split(';')[0];
+    var mixins = superclassName.split('+');
+    if (mixins.length > 1 && mangledGlobalNames[mangledName] == null) {
+      mirror = reflectMixinApplication(mixins, mangledName);
+    } else {
+      ClassMirror classMirror = new JsClassMirror(
+          symbol, mangledName, constructor, fields, fieldsMetadata);
+      List typeVariables =
+          JS('JSExtendableArray|Null', '#.prototype["<>"]', constructor);
+      if (typeVariables == null || typeVariables.length == 0) {
+        mirror = classMirror;
+      } else {
+        String typeArguments = 'dynamic';
+        for (int i = 1; i < typeVariables.length; i++) {
+          typeArguments += ',dynamic';
+        }
+        mirror = new JsTypeBoundClassMirror(classMirror, typeArguments);
+      }
+    }
+  }
+
+  JsCache.update(classMirrors, mangledName, mirror);
+  return mirror;
+}
+
+Map<Symbol, MethodMirror> filterMethods(List<MethodMirror> methods) {
+  var result = new Map();
+  for (JsMethodMirror method in methods) {
+    if (!method.isConstructor && !method.isGetter && !method.isSetter) {
+      result[method.simpleName] = method;
+    }
+  }
+  return result;
+}
+
+Map<Symbol, MethodMirror> filterConstructors(methods) {
+  var result = new Map();
+  for (JsMethodMirror method in methods) {
+    if (method.isConstructor) {
+      result[method.simpleName] = method;
+    }
+  }
+  return result;
+}
+
+Map<Symbol, MethodMirror> filterGetters(List<MethodMirror> methods,
+                                        Map<Symbol, VariableMirror> fields) {
+  var result = new Map();
+  for (JsMethodMirror method in methods) {
+    if (method.isGetter) {
+
+      // TODO(ahe): This is a hack to remove getters corresponding to a field.
+      if (fields[method.simpleName] != null) continue;
+
+      result[method.simpleName] = method;
+    }
+  }
+  return result;
+}
+
+Map<Symbol, MethodMirror> filterSetters(List<MethodMirror> methods,
+                                        Map<Symbol, VariableMirror> fields) {
+  var result = new Map();
+  for (JsMethodMirror method in methods) {
+    if (method.isSetter) {
+
+      // TODO(ahe): This is a hack to remove setters corresponding to a field.
+      String name = n(method.simpleName);
+      name = name.substring(0, name.length - 1); // Remove '='.
+      if (fields[s(name)] != null) continue;
+
+      result[method.simpleName] = method;
+    }
+  }
+  return result;
+}
+
+Map<Symbol, Mirror> filterMembers(List<MethodMirror> methods,
+                                  Map<Symbol, VariableMirror> variables) {
+  Map<Symbol, Mirror> result = new Map.from(variables);
+  for (JsMethodMirror method in methods) {
+    if (method.isSetter) {
+      String name = n(method.simpleName);
+      name = name.substring(0, name.length - 1);
+      // Filter-out setters corresponding to variables.
+      if (result[s(name)] is VariableMirror) continue;
+    }
+    // Constructors aren't 'members'.
+    if (method.isConstructor) continue;
+    // Use putIfAbsent to filter-out getters corresponding to variables.
+    result.putIfAbsent(method.simpleName, () => method);
+  }
+  return result;
+}
+
+int counter = 0;
+
+ClassMirror reflectMixinApplication(mixinNames, String mangledName) {
+  disableTreeShaking();
+  var mixins = [];
+  for (String mangledName in mixinNames) {
+    mixins.add(reflectClassByMangledName(mangledName));
+  }
+  var it = mixins.iterator;
+  it.moveNext();
+  var superclass = it.current;
+  while (it.moveNext()) {
+    superclass = new JsMixinApplication(superclass, it.current, mangledName);
+  }
+  return superclass;
+}
+
+class JsMixinApplication extends JsTypeMirror with JsObjectMirror
+    implements ClassMirror {
+  final ClassMirror superclass;
+  final ClassMirror mixin;
+  Symbol _cachedSimpleName;
+  Map<Symbol, MethodMirror> _cachedInstanceMembers;
+
+  JsMixinApplication(ClassMirror superclass, ClassMirror mixin,
+                     String mangledName)
+      : this.superclass = superclass,
+        this.mixin = mixin,
+        super(s(mangledName));
+
+  String get _prettyName => 'ClassMirror';
+
+  Symbol get simpleName {
+    if (_cachedSimpleName != null) return _cachedSimpleName;
+    String superName = n(superclass.qualifiedName);
+    return _cachedSimpleName = (superName.contains(' with '))
+        ? s('$superName, ${n(mixin.qualifiedName)}')
+        : s('$superName with ${n(mixin.qualifiedName)}');
+  }
+
+  Symbol get qualifiedName => simpleName;
+
+  // TODO(ahe): Remove this method, only here to silence warning.
+  get _mixin => mixin;
+
+  Map<Symbol, Mirror> get __members => _mixin.__members;
+
+  Map<Symbol, MethodMirror> get __methods => _mixin.__methods;
+
+  Map<Symbol, MethodMirror> get __getters => _mixin.__getters;
+
+  Map<Symbol, MethodMirror> get __setters => _mixin.__setters;
+
+  Map<Symbol, VariableMirror> get __variables => _mixin.__variables;
+
+  Map<Symbol, DeclarationMirror> get declarations => mixin.declarations;
+
+  Map<Symbol, MethodMirror> get instanceMembers {
+    if (_cachedInstanceMembers == null) {
+      var result = new Map<Symbol, MethodMirror>();
+      if (superclass != null) {
+        result.addAll(superclass.instanceMembers);
+      }
+      result.addAll(mixin.instanceMembers);
+      _cachedInstanceMembers = result;
+    }
+    return _cachedInstanceMembers;
+  }
+
+  Map<Symbol, MethodMirror> get staticMembers => mixin.staticMembers;
+
+  _asRuntimeType() => null;
+
+  InstanceMirror invoke(
+      Symbol memberName,
+      List positionalArguments,
+      [Map<Symbol,dynamic> namedArguments]) {
+    throw new NoSuchStaticMethodError.method(
+        null, memberName, positionalArguments, namedArguments);
+  }
+
+  InstanceMirror getField(Symbol fieldName) {
+    throw new NoSuchStaticMethodError.method(null, fieldName, null, null);
+  }
+
+  InstanceMirror setField(Symbol fieldName, Object arg) {
+    throw new NoSuchStaticMethodError.method(
+        null, setterSymbol(fieldName), [arg], null);
+  }
+
+  List<ClassMirror> get superinterfaces => [mixin];
+
+  Map<Symbol, MethodMirror> get __constructors => _mixin.__constructors;
+
+  InstanceMirror newInstance(
+      Symbol constructorName,
+      List positionalArguments,
+      [Map<Symbol,dynamic> namedArguments]) {
+    throw new UnsupportedError(
+        "Can't instantiate mixin application '${n(qualifiedName)}'");
+  }
+
+  bool get isOriginalDeclaration => true;
+
+  ClassMirror get originalDeclaration => this;
+
+  // TODO(ahe): Implement this.
+  List<TypeVariableMirror> get typeVariables {
+    throw new UnimplementedError();
+  }
+
+  List<TypeMirror> get typeArguments => const <TypeMirror>[];
+
+  bool get isAbstract => throw new UnimplementedError();
+
+  bool isSubclassOf(ClassMirror other) {
+    superclass.isSubclassOf(other) || mixin.isSubclassOf(other);
+  }
+
+  bool isSubtypeOf(TypeMirror other) => throw new UnimplementedError();
+
+  bool isAssignableTo(TypeMirror other) => throw new UnimplementedError();
+}
+
+abstract class JsObjectMirror implements ObjectMirror {
+}
+
+class JsInstanceMirror extends JsObjectMirror implements InstanceMirror {
+  final reflectee;
+
+  JsInstanceMirror(this.reflectee);
+
+  bool get hasReflectee => true;
+
+  ClassMirror get type {
+    // The spec guarantees that `null` is the singleton instance of the `Null`
+    // class.
+    if (reflectee == null) return reflectClass(Null);
+    return reflectType(getRuntimeType(reflectee));
+  }
+
+  InstanceMirror invoke(Symbol memberName,
+                        List positionalArguments,
+                        [Map<Symbol,dynamic> namedArguments]) {
+    if (namedArguments == null) namedArguments = const {};
+    // We can safely pass positionalArguments to _invoke as it will wrap it in
+    // a JSArray if needed.
+    return _invoke(memberName, JSInvocationMirror.METHOD,
+                   positionalArguments, namedArguments);
+  }
+
+  InstanceMirror _invokeMethodWithNamedArguments(
+      String reflectiveName,
+      List positionalArguments, Map<Symbol,dynamic> namedArguments) {
+    assert(namedArguments.isNotEmpty);
+    var interceptor = getInterceptor(reflectee);
+
+    var jsFunction = JS('', '#[#]', interceptor, reflectiveName);
+    if (jsFunction == null) {
+      // TODO(ahe): Invoke noSuchMethod.
+      throw new UnimplementedNoSuchMethodError(
+          'Invoking noSuchMethod with named arguments not implemented');
+    }
+    ReflectionInfo info = new ReflectionInfo(jsFunction);
+    if (jsFunction == null) {
+      // TODO(ahe): Invoke noSuchMethod.
+      throw new UnimplementedNoSuchMethodError(
+          'Invoking noSuchMethod with named arguments not implemented');
+    }
+
+    positionalArguments = new List.from(positionalArguments);
+    // Check the number of positional arguments is valid.
+    if (info.requiredParameterCount != positionalArguments.length) {
+      // TODO(ahe): Invoke noSuchMethod.
+      throw new UnimplementedNoSuchMethodError(
+          'Invoking noSuchMethod with named arguments not implemented');
+    }
+    var defaultArguments = new Map();
+    for (int i = 0; i < info.optionalParameterCount; i++) {
+      var parameterName = info.parameterName(i + info.requiredParameterCount);
+      var defaultValue =
+          getMetadata(info.defaultValue(i + info.requiredParameterCount));
+      defaultArguments[parameterName] = defaultValue;
+    }
+    namedArguments.forEach((Symbol symbol, value) {
+      String parameter = n(symbol);
+      if (defaultArguments.containsKey(parameter)) {
+        defaultArguments[parameter] = value;
+      } else {
+        // Extraneous named argument.
+        // TODO(ahe): Invoke noSuchMethod.
+        throw new UnimplementedNoSuchMethodError(
+            'Invoking noSuchMethod with named arguments not implemented');
+      }
+    });
+    positionalArguments.addAll(defaultArguments.values);
+    // TODO(ahe): Handle intercepted methods.
+    return reflect(
+        JS('', '#.apply(#, #)', jsFunction, reflectee, positionalArguments));
+  }
+
+  /// Grabs hold of the class-specific invocation cache for the reflectee.
+  /// All reflectees with the same class share the same cache. The cache
+  /// maps reflective names to cached invocation objects with enough decoded
+  /// reflective information to know how to to invoke a specific member.
+  get _classInvocationCache {
+    String cacheName = Primitives.mirrorInvokeCacheName;
+    var cacheHolder = (reflectee == null) ? getInterceptor(null) : reflectee;
+    var cache = JS('', r'#.constructor[#]', cacheHolder, cacheName);
+    if (cache == null) {
+      cache = JsCache.allocate();
+      JS('void', r'#.constructor[#] = #', cacheHolder, cacheName, cache);
+    }
+    return cache;
+  }
+
+  String _computeReflectiveName(Symbol symbolName, int type,
+                                List positionalArguments,
+                                Map<Symbol, dynamic> namedArguments) {
+    String name = n(symbolName);
+    switch (type) {
+      case JSInvocationMirror.GETTER: return name;
+      case JSInvocationMirror.SETTER: return '$name=';
+      case JSInvocationMirror.METHOD:
+        if (namedArguments.isNotEmpty) return '$name*';
+        int nbArgs = positionalArguments.length as int;
+        return "$name:$nbArgs:0";
+    }
+    throw new RuntimeError("Could not compute reflective name for $name");
+  }
+
+  /**
+   * Returns a `CachedInvocation` or `CachedNoSuchMethodInvocation` for the
+   * given member.
+   *
+   * Caches the result.
+   */
+  _getCachedInvocation(Symbol name, int type, String reflectiveName,
+      List positionalArguments, Map<Symbol,dynamic> namedArguments) {
+
+    var cache = _classInvocationCache;
+    var cacheEntry = JsCache.fetch(cache, reflectiveName);
+    var result;
+    if (cacheEntry == null) {
+      disableTreeShaking();
+      String mangledName = reflectiveNames[reflectiveName];
+      List<String> argumentNames = const [];
+
+      // TODO(ahe): We don't need to create an invocation mirror here. The
+      // logic from JSInvocationMirror.getCachedInvocation could easily be
+      // inlined here.
+      Invocation invocation = createUnmangledInvocationMirror(
+          name, mangledName, type, positionalArguments, argumentNames);
+
+      cacheEntry =
+          JSInvocationMirror.getCachedInvocation(invocation, reflectee);
+      JsCache.update(cache, reflectiveName, cacheEntry);
+    }
+    return cacheEntry;
+  }
+
+  bool _isReflectable(CachedInvocation cachedInvocation) {
+    // TODO(floitsch): tear-off closure does not guarantee that the
+    // function is reflectable.
+    var method = cachedInvocation.jsFunction;
+    return hasReflectableProperty(method) || reflectee is TearOffClosure;
+  }
+
+  /// Invoke the member specified through name and type on the reflectee.
+  /// As a side-effect, this populates the class-specific invocation cache
+  /// for the reflectee.
+  InstanceMirror _invoke(Symbol name,
+                         int type,
+                         List positionalArguments,
+                         Map<Symbol,dynamic> namedArguments) {
+    String reflectiveName =
+        _computeReflectiveName(name, type, positionalArguments, namedArguments);
+
+    if (namedArguments.isNotEmpty) {
+      // TODO(floitsch): first, make sure it's not a getter.
+      return _invokeMethodWithNamedArguments(
+          reflectiveName, positionalArguments, namedArguments);
+    }
+    var cacheEntry = _getCachedInvocation(
+        name, type, reflectiveName, positionalArguments, namedArguments);
+
+    if (cacheEntry.isNoSuchMethod || !_isReflectable(cacheEntry)) {
+      // Could be that we want to invoke a getter, or get a method.
+      if (type == JSInvocationMirror.METHOD && _instanceFieldExists(name)) {
+        return getField(name).invoke(
+            #call, positionalArguments, namedArguments);
+      }
+
+      if (type == JSInvocationMirror.SETTER) {
+        // For setters we report the setter name "field=".
+        name = s("${n(name)}=");
+      }
+
+      if (!cacheEntry.isNoSuchMethod) {
+        // Not reflectable.
+        throwInvalidReflectionError(reflectiveName);
+      }
+
+      String mangledName = reflectiveNames[reflectiveName];
+      // TODO(ahe): Get the argument names.
+      List<String> argumentNames = [];
+      Invocation invocation = createUnmangledInvocationMirror(
+          name, mangledName, type, positionalArguments, argumentNames);
+      return reflect(cacheEntry.invokeOn(reflectee, invocation));
+    } else {
+      return reflect(cacheEntry.invokeOn(reflectee, positionalArguments));
+    }
+  }
+
+  InstanceMirror setField(Symbol fieldName, Object arg) {
+    _invoke(fieldName, JSInvocationMirror.SETTER, [arg], const {});
+    return reflect(arg);
+  }
+
+  // JS helpers for getField optimizations.
+  static bool isUndefined(x)
+      => JS('bool', 'typeof # == "undefined"', x);
+  static bool isMissingCache(x)
+      => JS('bool', 'typeof # == "number"', x);
+  static bool isMissingProbe(Symbol symbol)
+      => JS('bool', 'typeof #.\$p == "undefined"', symbol);
+  static bool isEvalAllowed()
+      => JS('bool', 'typeof dart_precompiled != "function"');
+
+
+  /// The getter cache is lazily allocated after a couple
+  /// of invocations of [InstanceMirror.getField]. The delay is
+  /// used to avoid too aggressive caching and dynamic function
+  /// generation for rarely used mirrors. The cache is specific to
+  /// this [InstanceMirror] and maps reflective names to functions
+  /// that will invoke the corresponding getter on the reflectee.
+  /// The reflectee is passed to the function as the first argument
+  /// to avoid the overhead of fetching it from this mirror repeatedly.
+  /// The cache is lazily initialized to a JS object so we can
+  /// benefit from "map transitions" in the underlying JavaScript
+  /// engine to speed up cache probing.
+  var _getterCache = 4;
+
+  bool _instanceFieldExists(Symbol name) {
+    int getterType = JSInvocationMirror.GETTER;
+    String getterName =
+        _computeReflectiveName(name, getterType, const [], const {});
+    var getterCacheEntry = _getCachedInvocation(
+        name, getterType, getterName, const [], const {});
+    return !getterCacheEntry.isNoSuchMethod && !getterCacheEntry.isGetterStub;
+  }
+
+  InstanceMirror getField(Symbol fieldName) {
+    FASTPATH: {
+      var cache = _getterCache;
+      if (isMissingCache(cache) || isMissingProbe(fieldName)) break FASTPATH;
+      // If the [fieldName] has an associated probe function, we can use
+      // it to read from the getter cache specific to this [InstanceMirror].
+      var getter = JS('', '#.\$p(#)', fieldName, cache);
+      if (isUndefined(getter)) break FASTPATH;
+      // Call the getter passing the reflectee as the first argument.
+      var value = JS('', '#(#)', getter, reflectee);
+      // The getter has an associate cache of the last [InstanceMirror]
+      // returned to avoid repeated invocations of [reflect]. To validate
+      // the cache, we check that the value returned by the getter is the
+      // same value as last time.
+      if (JS('bool', '# === #.v', value, getter)) {
+        return JS('InstanceMirror', '#.m', getter);
+      } else {
+        var result = reflect(value);
+        JS('void', '#.v = #', getter, value);
+        JS('void', '#.m = #', getter, result);
+        return result;
+      }
+    }
+    return _getFieldSlow(fieldName);
+  }
+
+  InstanceMirror _getFieldSlow(Symbol fieldName) {
+    // First do the slow-case getter invocation. As a side-effect of this,
+    // the invocation cache is filled in so we can query it afterwards.
+    var result =
+        _invoke(fieldName, JSInvocationMirror.GETTER, const [], const {});
+    String name = n(fieldName);
+    var cacheEntry = JsCache.fetch(_classInvocationCache, name);
+    if (cacheEntry.isNoSuchMethod) {
+      return result;
+    }
+
+    // Make sure we have a getter cache in this [InstanceMirror].
+    var cache = _getterCache;
+    if (isMissingCache(cache)) {
+      if ((_getterCache = --cache) != 0) return result;
+      cache = _getterCache = JS('=Object', 'Object.create(null)');
+    }
+
+    // Make sure that symbol [fieldName] has a cache probing function ($p).
+    bool useEval = isEvalAllowed();
+    if (isMissingProbe(fieldName)) {
+      var probe = _newProbeFn(name, useEval);
+      JS('void', '#.\$p = #', fieldName, probe);
+    }
+
+    // Create a new getter function and install it in the cache.
+    var mangledName = cacheEntry.mangledName;
+    var getter = (cacheEntry.isIntercepted)
+        ? _newInterceptedGetterFn(mangledName, useEval)
+        : _newGetterFn(mangledName, useEval);
+    JS('void', '#[#] = #', cache, name, getter);
+
+    // Initialize the last value (v) and last mirror (m) on the
+    // newly generated getter to be a sentinel value that is hard
+    // to get hold of through user code.
+    JS('void', '#.v = #.m = #', getter, getter, cache);
+
+    // Return the result of the slow-path getter invocation.
+    return result;
+  }
+
+  _newProbeFn(String id, bool useEval) {
+    if (useEval) {
+      // We give the probe function a name to make it appear nicely in
+      // profiles and when debugging. The name also makes the source code
+      // for the function more "unique" so the underlying JavaScript
+      // engine is less likely to re-use an existing piece of generated
+      // code as the result of calling eval. In return, this leads to
+      // less polymorphic access in the probe function.
+      var body = "(function probe\$$id(c){return c.$id})";
+      return JS('', '(function(b){return eval(b)})(#)', body);
+    } else {
+      return JS('', '(function(n){return(function(c){return c[n]})})(#)', id);
+    }
+  }
+
+  _newGetterFn(String name, bool useEval) {
+    if (!useEval) return _newGetterNoEvalFn(name);
+    // We give the getter function a name that associates it with the
+    // class of the reflectee. This makes it easier to spot in profiles
+    // and when debugging, but it also means that the underlying JavaScript
+    // engine will only share the generated code for accessors on the
+    // same class (through caching of eval'ed code). This makes the
+    // generated call to the getter - e.g. o.get$foo() - much more likely
+    // to be monomorphic and inlineable.
+    String className = JS('String', '#.constructor.name', reflectee);
+    var body = "(function $className\$$name(o){return o.$name()})";
+    return JS('', '(function(b){return eval(b)})(#)', body);
+  }
+
+  _newGetterNoEvalFn(n) => JS('',
+      '(function(n){return(function(o){return o[n]()})})(#)', n);
+
+  _newInterceptedGetterFn(String name, bool useEval) {
+    var object = reflectee;
+    // It is possible that the interceptor for a given object is the object
+    // itself, so it is important not to share the code that captures the
+    // interceptor between multiple different instances of [InstanceMirror].
+    var interceptor = getInterceptor(object);
+    if (!useEval) return _newInterceptGetterNoEvalFn(name, interceptor);
+    String className = JS('String', '#.constructor.name', interceptor);
+    String functionName = '$className\$$name';
+    var body =
+        '(function(i) {'
+        '  function $functionName(o){return i.$name(o)}'
+        '  return $functionName;'
+        '})';
+    return JS('', '(function(b){return eval(b)})(#)(#)', body, interceptor);
+  }
+
+  _newInterceptGetterNoEvalFn(n, i) => JS('',
+      '(function(n,i){return(function(o){return i[n](o)})})(#,#)', n, i);
+
+  delegate(Invocation invocation) {
+    return JSInvocationMirror.invokeFromMirror(invocation, reflectee);
+  }
+
+  operator ==(other) {
+    return other is JsInstanceMirror &&
+           identical(reflectee, other.reflectee);
+  }
+
+  int get hashCode {
+    // Avoid hash collisions with the reflectee. This constant is in Smi range
+    // and happens to be the inner padding from RFC 2104.
+    return identityHashCode(reflectee) ^ 0x36363636;
+  }
+
+  String toString() => 'InstanceMirror on ${Error.safeToString(reflectee)}';
+
+  // TODO(ahe): Remove this method from the API.
+  MirrorSystem get mirrors => currentJsMirrorSystem;
+}
+
+/**
+ * ClassMirror for generic classes where the type parameters are bound.
+ *
+ * [typeArguments] will return a list of the type arguments, in constrast
+ * to JsCLassMirror that returns an empty list since it represents original
+ * declarations and classes that are not generic.
+ */
+class JsTypeBoundClassMirror extends JsDeclarationMirror
+    implements ClassMirror {
+  final JsClassMirror _class;
+
+  /**
+   * When instantiated this field will hold a string representing the list of
+   * type arguments for the class, i.e. what is inside the outermost angle
+   * brackets. Then, when get typeArguments is called the first time, the string
+   * is parsed into the actual list of TypeMirrors, and stored in
+   * [_cachedTypeArguments]. Due to type substitution of, for instance,
+   * superclasses the mangled name of the class and hence this string is needed
+   * after [_cachedTypeArguments] has been computed.
+   *
+   * If an integer is encountered as a type argument, it represents the type
+   * variable at the corresponding entry in [emitter.globalMetadata].
+   */
+  String _typeArguments;
+
+  UnmodifiableListView<TypeMirror> _cachedTypeArguments;
+  UnmodifiableMapView<Symbol, DeclarationMirror> _cachedDeclarations;
+  UnmodifiableMapView<Symbol, DeclarationMirror> _cachedMembers;
+  UnmodifiableMapView<Symbol, MethodMirror> _cachedConstructors;
+  Map<Symbol, VariableMirror> _cachedVariables;
+  Map<Symbol, MethodMirror> _cachedGetters;
+  Map<Symbol, MethodMirror> _cachedSetters;
+  Map<Symbol, MethodMirror> _cachedMethodsMap;
+  List<JsMethodMirror> _cachedMethods;
+  ClassMirror _superclass;
+  List<ClassMirror> _cachedSuperinterfaces;
+  Map<Symbol, MethodMirror> _cachedInstanceMembers;
+  Map<Symbol, MethodMirror> _cachedStaticMembers;
+
+  JsTypeBoundClassMirror(JsClassMirror originalDeclaration, this._typeArguments)
+      : _class = originalDeclaration,
+        super(originalDeclaration.simpleName);
+
+  String get _prettyName => 'ClassMirror';
+
+  String toString() {
+    String result = '$_prettyName on ${n(simpleName)}';
+    if (typeArguments != null) {
+      result = "$result<${typeArguments.join(', ')}>";
+    }
+    return result;
+  }
+
+  String get _mangledName {
+    for (TypeMirror typeArgument in typeArguments) {
+      if (typeArgument != JsMirrorSystem._dynamicType) {
+        return '${_class._mangledName}<$_typeArguments>';
+      }
+    }
+    // When all type arguments are dynamic, the canonical representation is to
+    // drop them.
+    return _class._mangledName;
+  }
+
+  List<TypeVariableMirror> get typeVariables => _class.typeVariables;
+
+  List<TypeMirror> get typeArguments {
+    if (_cachedTypeArguments != null) return _cachedTypeArguments;
+    List result = new List();
+
+    addTypeArgument(String typeArgument) {
+      int parsedIndex = int.parse(typeArgument, onError: (_) => -1);
+      if (parsedIndex == -1) {
+        result.add(reflectClassByMangledName(typeArgument.trim()));
+      } else {
+        TypeVariable typeVariable = getMetadata(parsedIndex);
+        TypeMirror owner = reflectClass(typeVariable.owner);
+        TypeVariableMirror typeMirror =
+            new JsTypeVariableMirror(typeVariable, owner, parsedIndex);
+        result.add(typeMirror);
+      }
+    }
+
+    if (_typeArguments.indexOf('<') == -1) {
+      _typeArguments.split(',').forEach((t) => addTypeArgument(t));
+    } else {
+      int level = 0;
+      String currentTypeArgument = '';
+
+      for (int i = 0; i < _typeArguments.length; i++) {
+        var character = _typeArguments[i];
+        if (character == ' ') {
+          continue;
+        } else if (character == '<') {
+          currentTypeArgument += character;
+          level++;
+        } else if (character == '>') {
+          currentTypeArgument += character;
+          level--;
+        } else if (character == ',') {
+          if (level > 0) {
+            currentTypeArgument += character;
+          } else {
+            addTypeArgument(currentTypeArgument);
+            currentTypeArgument = '';
+          }
+        } else {
+          currentTypeArgument += character;
+        }
+      }
+      addTypeArgument(currentTypeArgument);
+    }
+    return _cachedTypeArguments = new UnmodifiableListView(result);
+  }
+
+  List<JsMethodMirror> get _methods {
+    if (_cachedMethods != null) return _cachedMethods;
+    return _cachedMethods =_class._getMethodsWithOwner(this);
+  }
+
+  Map<Symbol, MethodMirror> get __methods {
+    if (_cachedMethodsMap != null) return _cachedMethodsMap;
+    return _cachedMethodsMap = new UnmodifiableMapView<Symbol, MethodMirror>(
+        filterMethods(_methods));
+  }
+
+  Map<Symbol, MethodMirror> get __constructors {
+    if (_cachedConstructors != null) return _cachedConstructors;
+    return _cachedConstructors =
+        new UnmodifiableMapView<Symbol, MethodMirror>(
+            filterConstructors(_methods));
+  }
+
+  Map<Symbol, MethodMirror> get __getters {
+    if (_cachedGetters != null) return _cachedGetters;
+    return _cachedGetters = new UnmodifiableMapView<Symbol, MethodMirror>(
+        filterGetters(_methods, __variables));
+  }
+
+  Map<Symbol, MethodMirror> get __setters {
+    if (_cachedSetters != null) return _cachedSetters;
+    return _cachedSetters = new UnmodifiableMapView<Symbol, MethodMirror>(
+        filterSetters(_methods, __variables));
+  }
+
+  Map<Symbol, VariableMirror> get __variables {
+    if (_cachedVariables != null) return _cachedVariables;
+    var result = new Map();
+    for (JsVariableMirror mirror in  _class._getFieldsWithOwner(this)) {
+      result[mirror.simpleName] = mirror;
+    }
+    return _cachedVariables =
+        new UnmodifiableMapView<Symbol, VariableMirror>(result);
+  }
+
+  Map<Symbol, DeclarationMirror> get __members {
+    if (_cachedMembers != null) return _cachedMembers;
+    return _cachedMembers = new UnmodifiableMapView<Symbol, DeclarationMirror>(
+        filterMembers(_methods, __variables));
+  }
+
+  Map<Symbol, DeclarationMirror> get declarations {
+    if (_cachedDeclarations != null) return _cachedDeclarations;
+    Map<Symbol, DeclarationMirror> result =
+        new Map<Symbol, DeclarationMirror>();
+    result.addAll(__members);
+    result.addAll(__constructors);
+    typeVariables.forEach((tv) => result[tv.simpleName] = tv);
+    return _cachedDeclarations =
+        new UnmodifiableMapView<Symbol, DeclarationMirror>(result);
+  }
+
+  Map<Symbol, MethodMirror> get staticMembers {
+    if (_cachedStaticMembers == null) {
+      var result = new Map<Symbol, MethodMirror>();
+      declarations.values.forEach((decl) {
+        if (decl is MethodMirror && decl.isStatic && !decl.isConstructor) {
+          result[decl.simpleName] = decl;
+        }
+        if (decl is VariableMirror && decl.isStatic) {
+          var getterName = decl.simpleName;
+          result[getterName] = new JsSyntheticAccessor(
+              this, getterName, true, true, false, decl);
+          if (!decl.isFinal) {
+            var setterName = setterSymbol(decl.simpleName);
+            result[setterName] = new JsSyntheticAccessor(
+                this, setterName, false, true, false, decl);
+          }
+        }
+      });
+      _cachedStaticMembers = result;
+    }
+    return _cachedStaticMembers;
+  }
+
+  Map<Symbol, MethodMirror> get instanceMembers {
+    if (_cachedInstanceMembers == null) {
+      var result = new Map<Symbol, MethodMirror>();
+      if (superclass != null) {
+        result.addAll(superclass.instanceMembers);
+      }
+      declarations.values.forEach((decl) {
+        if (decl is MethodMirror && !decl.isStatic &&
+            !decl.isConstructor && !decl.isAbstract) {
+          result[decl.simpleName] = decl;
+        }
+        if (decl is VariableMirror && !decl.isStatic) {
+          var getterName = decl.simpleName;
+          result[getterName] = new JsSyntheticAccessor(
+              this, getterName, true, false, false, decl);
+          if (!decl.isFinal) {
+            var setterName = setterSymbol(decl.simpleName);
+            result[setterName] = new JsSyntheticAccessor(
+                this, setterName, false, false, false, decl);
+          }
+        }
+      });
+      _cachedInstanceMembers = result;
+    }
+    return _cachedInstanceMembers;
+  }
+
+  InstanceMirror setField(Symbol fieldName, Object arg) {
+    return _class.setField(fieldName, arg);
+  }
+
+  InstanceMirror getField(Symbol fieldName) => _class.getField(fieldName);
+
+  InstanceMirror newInstance(Symbol constructorName,
+                             List positionalArguments,
+                             [Map<Symbol, dynamic> namedArguments]) {
+    var instance = _class._getInvokedInstance(constructorName,
+                                              positionalArguments,
+                                              namedArguments);
+    return reflect(setRuntimeTypeInfo(
+        instance, typeArguments.map((t) => t._asRuntimeType()).toList()));
+  }
+
+  _asRuntimeType() {
+    return [_class._jsConstructor].addAll(
+        typeArguments.map((t) => t._asRuntimeType()));
+  }
+
+  JsLibraryMirror get owner => _class.owner;
+
+  List<InstanceMirror> get metadata => _class.metadata;
+
+  ClassMirror get superclass {
+    if (_superclass != null) return _superclass;
+
+    var typeInformationContainer = JS_EMBEDDED_GLOBAL('', TYPE_INFORMATION);
+    List<int> typeInformation =
+        JS('List|Null', '#[#]', typeInformationContainer, _class._mangledName);
+    assert(typeInformation != null);
+    var type = getMetadata(typeInformation[0]);
+    return _superclass = typeMirrorFromRuntimeTypeRepresentation(this, type);
+  }
+
+  InstanceMirror invoke(Symbol memberName,
+                        List positionalArguments,
+                        [Map<Symbol,dynamic> namedArguments]) {
+    return _class.invoke(memberName, positionalArguments, namedArguments);
+  }
+
+  bool get isOriginalDeclaration => false;
+
+  ClassMirror get originalDeclaration => _class;
+
+  List<ClassMirror> get superinterfaces {
+    if (_cachedSuperinterfaces != null) return _cachedSuperinterfaces;
+    return _cachedSuperinterfaces = _class._getSuperinterfacesWithOwner(this);
+  }
+
+  bool get isPrivate => _class.isPrivate;
+
+  bool get isTopLevel => _class.isTopLevel;
+
+  bool get isAbstract => _class.isAbstract;
+
+  bool isSubclassOf(ClassMirror other) => _class.isSubclassOf(other);
+
+  SourceLocation get location => _class.location;
+
+  MirrorSystem get mirrors => _class.mirrors;
+
+  Symbol get qualifiedName => _class.qualifiedName;
+
+  bool get hasReflectedType => true;
+
+  Type get reflectedType => createRuntimeType(_mangledName);
+
+  Symbol get simpleName => _class.simpleName;
+
+  // TODO(ahe): Implement this.
+  ClassMirror get mixin => throw new UnimplementedError();
+
+  bool isSubtypeOf(TypeMirror other) => throw new UnimplementedError();
+
+  bool isAssignableTo(TypeMirror other) => throw new UnimplementedError();
+}
+
+class JsSyntheticAccessor implements MethodMirror {
+  final DeclarationMirror owner;
+  final Symbol simpleName;
+  final bool isGetter;
+  final bool isStatic;
+  final bool isTopLevel;
+  final _target;  /// The field or type that introduces the synthetic accessor.
+
+  JsSyntheticAccessor(this.owner,
+                      this.simpleName,
+                      this.isGetter,
+                      this.isStatic,
+                      this.isTopLevel,
+                      this._target);
+
+  bool get isSynthetic => true;
+  bool get isRegularMethod => false;
+  bool get isOperator => false;
+  bool get isConstructor => false;
+  bool get isConstConstructor => false;
+  bool get isGenerativeConstructor => false;
+  bool get isFactoryConstructor => false;
+  bool get isRedirectingConstructor => false;
+  bool get isAbstract => false;
+
+  bool get isSetter => !isGetter;
+  bool get isPrivate => n(simpleName).startsWith('_');
+
+  Symbol get qualifiedName => computeQualifiedName(owner, simpleName);
+  Symbol get constructorName => const Symbol('');
+
+  TypeMirror get returnType => _target.type;
+  List<ParameterMirror> get parameters {
+    if (isGetter) return const [];
+    return new UnmodifiableListView(
+        [new JsSyntheticSetterParameter(this, this._target)]);
+  }
+
+  List<InstanceMirror> get metadata => const [];
+  String get source => null;
+  SourceLocation get location => throw new UnimplementedError();
+}
+
+class JsSyntheticSetterParameter implements ParameterMirror {
+  final DeclarationMirror owner;
+  final VariableMirror _target;
+
+  JsSyntheticSetterParameter(this.owner, this._target);
+
+  Symbol get simpleName => _target.simpleName;
+  Symbol get qualifiedName => computeQualifiedName(owner, simpleName);
+  TypeMirror get type => _target.type;
+
+  bool get isOptional => false;
+  bool get isNamed => false;
+  bool get isStatic => false;
+  bool get isTopLevel => false;
+  bool get isConst => false;
+  bool get isFinal => true;
+  bool get isPrivate => false;
+  bool get hasDefaultValue => false;
+  InstanceMirror get defaultValue => null;
+  List<InstanceMirror> get metadata => const [];
+  SourceLocation get location => throw new UnimplementedError();
+}
+
+class JsClassMirror extends JsTypeMirror with JsObjectMirror
+    implements ClassMirror {
+  final String _mangledName;
+  final _jsConstructor;
+  final String _fieldsDescriptor;
+  final List _fieldsMetadata;
+  final _jsConstructorCache = JsCache.allocate();
+  List _metadata;
+  ClassMirror _superclass;
+  List<JsMethodMirror> _cachedMethods;
+  List<VariableMirror> _cachedFields;
+  UnmodifiableMapView<Symbol, MethodMirror> _cachedConstructors;
+  UnmodifiableMapView<Symbol, MethodMirror> _cachedMethodsMap;
+  UnmodifiableMapView<Symbol, MethodMirror> _cachedGetters;
+  UnmodifiableMapView<Symbol, MethodMirror> _cachedSetters;
+  UnmodifiableMapView<Symbol, VariableMirror> _cachedVariables;
+  UnmodifiableMapView<Symbol, Mirror> _cachedMembers;
+  UnmodifiableMapView<Symbol, DeclarationMirror> _cachedDeclarations;
+  UnmodifiableListView<InstanceMirror> _cachedMetadata;
+  UnmodifiableListView<ClassMirror> _cachedSuperinterfaces;
+  UnmodifiableListView<TypeVariableMirror> _cachedTypeVariables;
+  Map<Symbol, MethodMirror> _cachedInstanceMembers;
+  Map<Symbol, MethodMirror> _cachedStaticMembers;
+
+  // Set as side-effect of accessing JsLibraryMirror.classes.
+  JsLibraryMirror _owner;
+
+  JsClassMirror(Symbol simpleName,
+                this._mangledName,
+                this._jsConstructor,
+                this._fieldsDescriptor,
+                this._fieldsMetadata)
+      : super(simpleName);
+
+  String get _prettyName => 'ClassMirror';
+
+  Map<Symbol, MethodMirror> get __constructors {
+    if (_cachedConstructors != null) return _cachedConstructors;
+    return _cachedConstructors =
+        new UnmodifiableMapView<Symbol, MethodMirror>(
+            filterConstructors(_methods));
+  }
+
+  _asRuntimeType() {
+    if (typeVariables.isEmpty)  return _jsConstructor;
+    var type = [_jsConstructor];
+    for (int i = 0; i < typeVariables.length; i ++) {
+      type.add(JsMirrorSystem._dynamicType._asRuntimeType);
+    }
+    return type;
+  }
+
+  List<JsMethodMirror> _getMethodsWithOwner(DeclarationMirror methodOwner) {
+    var prototype = JS('', '#.prototype', _jsConstructor);
+    List<String> keys = extractKeys(prototype);
+    var result = <JsMethodMirror>[];
+    for (String key in keys) {
+      if (isReflectiveDataInPrototype(key)) continue;
+      String simpleName = mangledNames[key];
+      // [simpleName] can be null if [key] represents an implementation
+      // detail, for example, a bailout method, or runtime type support.
+      // It might also be null if the user has limited what is reified for
+      // reflection with metadata.
+      if (simpleName == null) continue;
+      var function = JS('', '#[#]', prototype, key);
+      if (isNoSuchMethodStub(function)) continue;
+      var mirror =
+          new JsMethodMirror.fromUnmangledName(
+              simpleName, function, false, false);
+      result.add(mirror);
+      mirror._owner = methodOwner;
+    }
+
+    var statics = JS_EMBEDDED_GLOBAL('', STATICS);
+    keys = extractKeys(JS('', '#[#]', statics, _mangledName));
+    for (String mangledName in keys) {
+      if (isReflectiveDataInPrototype(mangledName)) continue;
+      String unmangledName = mangledName;
+      var jsFunction = JS('', '#[#]', owner._globalObject, mangledName);
+
+      bool isConstructor = false;
+      if (hasReflectableProperty(jsFunction)) {
+        String reflectionName =
+            JS('String|Null', r'#.$reflectionName', jsFunction);
+        if (reflectionName == null) continue;
+        isConstructor = reflectionName.startsWith('new ');
+        if (isConstructor) {
+          reflectionName = reflectionName.substring(4).replaceAll(r'$', '.');
+        }
+        unmangledName = reflectionName;
+      } else {
+        continue;
+      }
+      bool isStatic = !isConstructor; // Constructors are not static.
+      JsMethodMirror mirror =
+          new JsMethodMirror.fromUnmangledName(
+              unmangledName, jsFunction, isStatic, isConstructor);
+      result.add(mirror);
+      mirror._owner = methodOwner;
+    }
+
+    return result;
+  }
+
+  List<JsMethodMirror> get _methods {
+    if (_cachedMethods != null) return _cachedMethods;
+    return _cachedMethods = _getMethodsWithOwner(this);
+  }
+
+  List<VariableMirror> _getFieldsWithOwner(DeclarationMirror fieldOwner) {
+    var result = <VariableMirror>[];
+
+    var instanceFieldSpecfication = _fieldsDescriptor.split(';')[1];
+    if (_fieldsMetadata != null) {
+      instanceFieldSpecfication =
+          [instanceFieldSpecfication]..addAll(_fieldsMetadata);
+    }
+    parseCompactFieldSpecification(
+        fieldOwner, instanceFieldSpecfication, false, result);
+
+    var statics = JS_EMBEDDED_GLOBAL('', STATICS);
+    var staticDescriptor = JS('', '#[#]', statics, _mangledName);
+    if (staticDescriptor != null) {
+      parseCompactFieldSpecification(
+          fieldOwner,
+          JS('', '#[#]',
+              staticDescriptor, JS_GET_NAME('CLASS_DESCRIPTOR_PROPERTY')),
+          true, result);
+    }
+    return result;
+  }
+
+  List<VariableMirror> get _fields {
+    if (_cachedFields != null) return _cachedFields;
+    return _cachedFields = _getFieldsWithOwner(this);
+  }
+
+  Map<Symbol, MethodMirror> get __methods {
+    if (_cachedMethodsMap != null) return _cachedMethodsMap;
+    return _cachedMethodsMap =
+        new UnmodifiableMapView<Symbol, MethodMirror>(filterMethods(_methods));
+  }
+
+  Map<Symbol, MethodMirror> get __getters {
+    if (_cachedGetters != null) return _cachedGetters;
+    return _cachedGetters = new UnmodifiableMapView<Symbol, MethodMirror>(
+        filterGetters(_methods, __variables));
+  }
+
+  Map<Symbol, MethodMirror> get __setters {
+    if (_cachedSetters != null) return _cachedSetters;
+    return _cachedSetters = new UnmodifiableMapView<Symbol, MethodMirror>(
+        filterSetters(_methods, __variables));
+  }
+
+  Map<Symbol, VariableMirror> get __variables {
+    if (_cachedVariables != null) return _cachedVariables;
+    var result = new Map();
+    for (JsVariableMirror mirror in _fields) {
+      result[mirror.simpleName] = mirror;
+    }
+    return _cachedVariables =
+        new UnmodifiableMapView<Symbol, VariableMirror>(result);
+  }
+
+  Map<Symbol, Mirror> get __members {
+    if (_cachedMembers != null) return _cachedMembers;
+    return _cachedMembers = new UnmodifiableMapView<Symbol, Mirror>(
+        filterMembers(_methods, __variables));
+  }
+
+  Map<Symbol, DeclarationMirror> get declarations {
+    if (_cachedDeclarations != null) return _cachedDeclarations;
+    var result = new Map<Symbol, DeclarationMirror>();
+    addToResult(Symbol key, Mirror value) {
+      result[key] = value;
+    }
+    __members.forEach(addToResult);
+    __constructors.forEach(addToResult);
+    typeVariables.forEach((tv) => result[tv.simpleName] = tv);
+    return _cachedDeclarations =
+        new UnmodifiableMapView<Symbol, DeclarationMirror>(result);
+  }
+
+  Map<Symbol, MethodMirror> get staticMembers {
+    if (_cachedStaticMembers == null) {
+      var result = new Map<Symbol, MethodMirror>();
+      declarations.values.forEach((decl) {
+        if (decl is MethodMirror && decl.isStatic && !decl.isConstructor) {
+          result[decl.simpleName] = decl;
+        }
+        if (decl is VariableMirror && decl.isStatic) {
+          var getterName = decl.simpleName;
+          result[getterName] = new JsSyntheticAccessor(
+              this, getterName, true, true, false, decl);
+          if (!decl.isFinal) {
+            var setterName = setterSymbol(decl.simpleName);
+            result[setterName] = new JsSyntheticAccessor(
+                this, setterName, false, true, false, decl);
+          }
+        }
+      });
+      _cachedStaticMembers = result;
+    }
+    return _cachedStaticMembers;
+  }
+
+  Map<Symbol, MethodMirror> get instanceMembers {
+    if (_cachedInstanceMembers == null) {
+      var result = new Map<Symbol, MethodMirror>();
+      if (superclass != null) {
+        result.addAll(superclass.instanceMembers);
+      }
+      declarations.values.forEach((decl) {
+        if (decl is MethodMirror && !decl.isStatic &&
+            !decl.isConstructor && !decl.isAbstract) {
+          result[decl.simpleName] = decl;
+        }
+        if (decl is VariableMirror && !decl.isStatic) {
+          var getterName = decl.simpleName;
+          result[getterName] = new JsSyntheticAccessor(
+              this, getterName, true, false, false, decl);
+          if (!decl.isFinal) {
+            var setterName = setterSymbol(decl.simpleName);
+            result[setterName] = new JsSyntheticAccessor(
+                this, setterName, false, false, false, decl);
+          }
+        }
+      });
+      _cachedInstanceMembers = result;
+    }
+    return _cachedInstanceMembers;
+  }
+
+  InstanceMirror setField(Symbol fieldName, Object arg) {
+    JsVariableMirror mirror = __variables[fieldName];
+    if (mirror != null && mirror.isStatic && !mirror.isFinal) {
+      // '$' (JS_CURRENT_ISOLATE()) stores state which is stored directly, so
+      // we shouldn't use [JsLibraryMirror._globalObject] here.
+      String jsName = mirror._jsName;
+      if (!JS('bool', '# in #', jsName, JS_CURRENT_ISOLATE())) {
+        throw new RuntimeError('Cannot find "$jsName" in current isolate.');
+      }
+      JS('void', '#[#] = #', JS_CURRENT_ISOLATE(), jsName, arg);
+      return reflect(arg);
+    }
+    Symbol setterName = setterSymbol(fieldName);
+    if (mirror == null) {
+      JsMethodMirror setter = __setters[setterName];
+      if (setter != null) {
+        setter._invoke([arg], const {});
+        return reflect(arg);
+      }
+    }
+    throw new NoSuchStaticMethodError.method(null, setterName, [arg], null);
+  }
+
+  bool _staticFieldExists(Symbol fieldName) {
+    JsVariableMirror mirror = __variables[fieldName];
+    if (mirror != null) return mirror.isStatic;
+    JsMethodMirror getter = __getters[fieldName];
+    return getter != null && getter.isStatic;
+  }
+
+  InstanceMirror getField(Symbol fieldName) {
+    JsVariableMirror mirror = __variables[fieldName];
+    if (mirror != null && mirror.isStatic) {
+      String jsName = mirror._jsName;
+      // '$' (JS_CURRENT_ISOLATE()) stores state which is read directly, so
+      // we shouldn't use [JsLibraryMirror._globalObject] here.
+      if (!JS('bool', '# in #', jsName, JS_CURRENT_ISOLATE())) {
+        throw new RuntimeError('Cannot find "$jsName" in current isolate.');
+      }
+      var lazies = JS_EMBEDDED_GLOBAL('', LAZIES);
+      if (JS('bool', '# in #', jsName, lazies)) {
+        String getterName = JS('String', '#[#]', lazies, jsName);
+        return reflect(JS('', '#[#]()', JS_CURRENT_ISOLATE(), getterName));
+      } else {
+        return reflect(JS('', '#[#]', JS_CURRENT_ISOLATE(), jsName));
+      }
+    }
+    JsMethodMirror getter = __getters[fieldName];
+    if (getter != null && getter.isStatic) {
+      return reflect(getter._invoke(const [], const {}));
+    }
+    // If the fieldName designates a static function we have to return
+    // its closure.
+    JsMethodMirror method = __methods[fieldName];
+    if (method != null && method.isStatic) {
+      // We invoke the same getter that Dart code would execute. During
+      // initialization we have stored that getter on the function (so that
+      // we can find it more easily here).
+      var getter = JS("", "#['\$getter']", method._jsFunction);
+      if (getter == null) throw new UnimplementedError();
+      return reflect(JS("", "#()", getter));
+    }
+    throw new NoSuchStaticMethodError.method(null, fieldName, null, null);
+  }
+
+  _getInvokedInstance(Symbol constructorName,
+                      List positionalArguments,
+                      [Map<Symbol, dynamic> namedArguments]) {
+     if (namedArguments != null && !namedArguments.isEmpty) {
+       throw new UnsupportedError('Named arguments are not implemented.');
+     }
+     JsMethodMirror mirror =
+         JsCache.fetch(_jsConstructorCache, n(constructorName));
+     if (mirror == null) {
+       mirror = __constructors.values.firstWhere(
+           (m) => m.constructorName == constructorName,
+           orElse: () {
+             throw new NoSuchStaticMethodError.method(
+                 null, constructorName, positionalArguments, namedArguments);
+           });
+       JsCache.update(_jsConstructorCache, n(constructorName), mirror);
+     }
+     return mirror._invoke(positionalArguments, namedArguments);
+   }
+
+  InstanceMirror newInstance(Symbol constructorName,
+                             List positionalArguments,
+                             [Map<Symbol, dynamic> namedArguments]) {
+    return reflect(_getInvokedInstance(constructorName,
+                                       positionalArguments,
+                                       namedArguments));
+  }
+
+  JsLibraryMirror get owner {
+    if (_owner == null) {
+      for (var list in JsMirrorSystem.librariesByName.values) {
+        for (JsLibraryMirror library in list) {
+          // This will set _owner field on all classes as a side
+          // effect.  This gives us a fast path to reflect on a
+          // class without parsing reflection data.
+          library.__classes;
+        }
+      }
+      if (_owner == null) {
+        throw new StateError('Class "${n(simpleName)}" has no owner');
+      }
+    }
+    return _owner;
+  }
+
+  List<InstanceMirror> get metadata {
+    if (_cachedMetadata != null) return _cachedMetadata;
+    if (_metadata == null) {
+      _metadata = extractMetadata(JS('', '#.prototype', _jsConstructor));
+    }
+    return _cachedMetadata =
+        new UnmodifiableListView<InstanceMirror>(_metadata.map(reflect));
+  }
+
+  ClassMirror get superclass {
+    if (_superclass == null) {
+      var typeInformationContainer = JS_EMBEDDED_GLOBAL('', TYPE_INFORMATION);
+      List<int> typeInformation =
+          JS('List|Null', '#[#]', typeInformationContainer, _mangledName);
+      if (typeInformation != null) {
+        var type = getMetadata(typeInformation[0]);
+        _superclass = typeMirrorFromRuntimeTypeRepresentation(this, type);
+      } else {
+        var superclassName = _fieldsDescriptor.split(';')[0];
+        // TODO(zarah): Remove special handing of mixins.
+        var mixins = superclassName.split('+');
+        if (mixins.length > 1) {
+          if (mixins.length != 2) {
+            throw new RuntimeError('Strange mixin: $_fieldsDescriptor');
+          }
+          _superclass = reflectClassByMangledName(mixins[0]);
+        } else {
+          // Use _superclass == this to represent class with no superclass
+          // (Object).
+          _superclass = (superclassName == '')
+              ? this : reflectClassByMangledName(superclassName);
+          }
+        }
+      }
+    return _superclass == this ? null : _superclass;
+  }
+
+  InstanceMirror invoke(Symbol memberName,
+                        List positionalArguments,
+                        [Map<Symbol,dynamic> namedArguments]) {
+    // Mirror API gotcha: Calling [invoke] on a ClassMirror means invoke a
+    // static method.
+
+    if (namedArguments != null && !namedArguments.isEmpty) {
+      throw new UnsupportedError('Named arguments are not implemented.');
+    }
+    JsMethodMirror mirror = __methods[memberName];
+
+    if (mirror == null && _staticFieldExists(memberName)) {
+      return getField(memberName)
+          .invoke(#call, positionalArguments, namedArguments);
+    }
+    if (mirror == null || !mirror.isStatic) {
+      throw new NoSuchStaticMethodError.method(
+          null, memberName, positionalArguments, namedArguments);
+    }
+    if (!mirror.canInvokeReflectively()) {
+      throwInvalidReflectionError(n(memberName));
+    }
+    return reflect(mirror._invoke(positionalArguments, namedArguments));
+  }
+
+  bool get isOriginalDeclaration => true;
+
+  ClassMirror get originalDeclaration => this;
+
+  List<ClassMirror> _getSuperinterfacesWithOwner(DeclarationMirror owner) {
+    var typeInformationContainer = JS_EMBEDDED_GLOBAL('', TYPE_INFORMATION);
+    List<int> typeInformation =
+        JS('List|Null', '#[#]', typeInformationContainer, _mangledName);
+    List<ClassMirror> result = const <ClassMirror>[];
+    if (typeInformation != null) {
+      ClassMirror lookupType(int i) {
+        var type = getMetadata(i);
+        return typeMirrorFromRuntimeTypeRepresentation(owner, type);
+      }
+
+      //We skip the first since it is the supertype.
+      result = typeInformation.skip(1).map(lookupType).toList();
+    }
+
+    return new UnmodifiableListView<ClassMirror>(result);
+  }
+
+  List<ClassMirror> get superinterfaces {
+    if (_cachedSuperinterfaces != null) return _cachedSuperinterfaces;
+    return _cachedSuperinterfaces = _getSuperinterfacesWithOwner(this);
+  }
+
+  List<TypeVariableMirror> get typeVariables {
+   if (_cachedTypeVariables != null) return _cachedTypeVariables;
+   List result = new List();
+   List typeVariables =
+        JS('JSExtendableArray|Null', '#.prototype["<>"]', _jsConstructor);
+    if (typeVariables == null) return result;
+    for (int i = 0; i < typeVariables.length; i++) {
+      TypeVariable typeVariable = getMetadata(typeVariables[i]);
+      result.add(new JsTypeVariableMirror(typeVariable, this,
+                                          typeVariables[i]));
+    }
+    return _cachedTypeVariables = new UnmodifiableListView(result);
+  }
+
+  List<TypeMirror> get typeArguments => const <TypeMirror>[];
+
+  bool get hasReflectedType => typeVariables.length == 0;
+
+  Type get reflectedType {
+    if (!hasReflectedType) {
+      throw new UnsupportedError(
+          "Declarations of generics have no reflected type");
+    }
+    return createRuntimeType(_mangledName);
+  }
+
+  // TODO(ahe): Implement this.
+  ClassMirror get mixin => throw new UnimplementedError();
+
+  bool get isAbstract => throw new UnimplementedError();
+
+  bool isSubclassOf(ClassMirror other) {
+    if (other is! ClassMirror) {
+      throw new ArgumentError(other);
+    }
+    if (other is JsFunctionTypeMirror) {
+      return false;
+    } if (other is JsClassMirror &&
+          JS('bool', '# == #', other._jsConstructor, _jsConstructor)) {
+      return true;
+    } else if (superclass == null) {
+      return false;
+    } else {
+      return superclass.isSubclassOf(other);
+    }
+  }
+}
+
+class JsVariableMirror extends JsDeclarationMirror implements VariableMirror {
+
+  // TODO(ahe): The values in these fields are virtually untested.
+  final String _jsName;
+  final bool isFinal;
+  final bool isStatic;
+  final _metadataFunction;
+  final DeclarationMirror _owner;
+  final int _type;
+  List _metadata;
+
+  JsVariableMirror(Symbol simpleName,
+                   this._jsName,
+                   this._type,
+                   this.isFinal,
+                   this.isStatic,
+                   this._metadataFunction,
+                   this._owner)
+      : super(simpleName);
+
+  factory JsVariableMirror.from(String descriptor,
+                                metadataFunction,
+                                JsDeclarationMirror owner,
+                                bool isStatic) {
+    List<String> fieldInformation = descriptor.split('-');
+    if (fieldInformation.length == 1) {
+      // The field is not available for reflection.
+      // TODO(ahe): Should return an unreflectable field.
+      return null;
+    }
+
+    String field = fieldInformation[0];
+    int length = field.length;
+    var code = fieldCode(field.codeUnitAt(length - 1));
+    bool isFinal = false;
+    if (code == 0) return null; // Inherited field.
+    bool hasGetter = (code & 3) != 0;
+    bool hasSetter = (code >> 2) != 0;
+    isFinal = !hasSetter;
+    length--;
+    String jsName;
+    String accessorName = jsName = field.substring(0, length);
+    int divider = field.indexOf(':');
+    if (divider > 0) {
+      accessorName = accessorName.substring(0, divider);
+      jsName = field.substring(divider + 1);
+    }
+    var unmangledName;
+    if (isStatic) {
+      unmangledName = mangledGlobalNames[accessorName];
+    } else {
+      String getterPrefix = JS_GET_NAME('GETTER_PREFIX');
+      unmangledName = mangledNames['$getterPrefix$accessorName'];
+    }
+    if (unmangledName == null) unmangledName = accessorName;
+    if (!hasSetter) {
+      // TODO(ahe): This is a hack to handle checked setters in checked mode.
+      var setterName = s('$unmangledName=');
+      for (JsMethodMirror method in owner._methods) {
+        if (method.simpleName == setterName) {
+          isFinal = false;
+          break;
+        }
+      }
+    }
+    int type = int.parse(fieldInformation[1]);
+    return new JsVariableMirror(s(unmangledName),
+                                jsName,
+                                type,
+                                isFinal,
+                                isStatic,
+                                metadataFunction,
+                                owner);
+  }
+
+  String get _prettyName => 'VariableMirror';
+
+  TypeMirror get type {
+    return typeMirrorFromRuntimeTypeRepresentation(owner, getMetadata(_type));
+  }
+
+  DeclarationMirror get owner => _owner;
+
+  List<InstanceMirror> get metadata {
+    preserveMetadata();
+    if (_metadata == null) {
+      _metadata = (_metadataFunction == null)
+          ? const [] : JS('', '#()', _metadataFunction);
+    }
+    return _metadata.map(reflect).toList();
+  }
+
+  static int fieldCode(int code) {
+    if (code >= 60 && code <= 64) return code - 59;
+    if (code >= 123 && code <= 126) return code - 117;
+    if (code >= 37 && code <= 43) return code - 27;
+    return 0;
+  }
+
+  _getField(JsMirror receiver) => receiver._loadField(_jsName);
+
+  void _setField(JsMirror receiver, Object arg) {
+    if (isFinal) {
+      // TODO(floitsch): when the field is non-static we don't want to have
+      // a mirror as receiver.
+      if (isStatic) {
+        throw new NoSuchStaticMethodError.method(
+            null, setterSymbol(simpleName), [arg], null);
+      }
+      throw new NoSuchMethodError(this, setterSymbol(simpleName), [arg], null);
+    }
+    receiver._storeField(_jsName, arg);
+  }
+
+  // TODO(ahe): Implement this method.
+  bool get isConst => throw new UnimplementedError();
+}
+
+class JsClosureMirror extends JsInstanceMirror implements ClosureMirror {
+  JsClosureMirror(reflectee)
+      : super(reflectee);
+
+  MethodMirror get function {
+    String cacheName = Primitives.mirrorFunctionCacheName;
+    JsMethodMirror cachedFunction;
+    // TODO(ahe): Restore caching.
+    //= JS('JsMethodMirror|Null', r'#.constructor[#]', reflectee, cacheName);
+    if (cachedFunction != null) return cachedFunction;
+    disableTreeShaking();
+    // TODO(ahe): What about optional parameters (named or not).
+    String callPrefix = "${JS_GET_NAME("CALL_PREFIX")}\$";
+    var extractCallName = JS('', r'''
+function(reflectee) {
+  for (var property in reflectee) {
+    if (# == property.substring(0, #) &&
+        property[#] >= '0' &&
+        property[#] <= '9') return property;
+  }
+  return null;
+}
+''', callPrefix, callPrefix.length, callPrefix.length, callPrefix.length);
+    String callName = JS('String|Null', '#(#)', extractCallName, reflectee);
+    if (callName == null) {
+      throw new RuntimeError('Cannot find callName on "$reflectee"');
+    }
+    // TODO(floitsch): What about optional parameters?
+    int parameterCount = int.parse(callName.split(r'$')[1]);
+    if (reflectee is BoundClosure) {
+      var target = BoundClosure.targetOf(reflectee);
+      var self = BoundClosure.selfOf(reflectee);
+      var name = mangledNames[BoundClosure.nameOf(reflectee)];
+      if (name == null) {
+        throwInvalidReflectionError(name);
+      }
+      cachedFunction = new JsMethodMirror.fromUnmangledName(
+          name, target, false, false);
+    } else {
+      bool isStatic = true; // TODO(ahe): Compute isStatic correctly.
+      var jsFunction = JS('', '#[#]', reflectee, callName);
+      var dummyOptionalParameterCount = 0;
+      cachedFunction = new JsMethodMirror(
+          s(callName), jsFunction, parameterCount, dummyOptionalParameterCount,
+          false, false, isStatic, false, false);
+    }
+    JS('void', r'#.constructor[#] = #', reflectee, cacheName, cachedFunction);
+    return cachedFunction;
+  }
+
+  InstanceMirror apply(List positionalArguments,
+                       [Map<Symbol, dynamic> namedArguments]) {
+    return reflect(
+        Function.apply(reflectee, positionalArguments, namedArguments));
+  }
+
+  String toString() => "ClosureMirror on '${Error.safeToString(reflectee)}'";
+
+  // TODO(ahe): Implement this method.
+  String get source => throw new UnimplementedError();
+}
+
+class JsMethodMirror extends JsDeclarationMirror implements MethodMirror {
+  final _jsFunction;
+  final int _requiredParameterCount;
+  final int _optionalParameterCount;
+  final bool isGetter;
+  final bool isSetter;
+  final bool isStatic;
+  final bool isConstructor;
+  final bool isOperator;
+  DeclarationMirror _owner;
+  List _metadata;
+  TypeMirror _returnType;
+  UnmodifiableListView<ParameterMirror> _parameters;
+
+  JsMethodMirror(Symbol simpleName,
+                 this._jsFunction,
+                 this._requiredParameterCount,
+                 this._optionalParameterCount,
+                 this.isGetter,
+                 this.isSetter,
+                 this.isStatic,
+                 this.isConstructor,
+                 this.isOperator)
+      : super(simpleName);
+
+  factory JsMethodMirror.fromUnmangledName(String name,
+                                           jsFunction,
+                                           bool isStatic,
+                                           bool isConstructor) {
+    List<String> info = name.split(':');
+    name = info[0];
+    bool isOperator = isOperatorName(name);
+    bool isSetter = !isOperator && name.endsWith('=');
+    int requiredParameterCount = 0;
+    int optionalParameterCount = 0;
+    bool isGetter = false;
+    if (info.length == 1) {
+      if (isSetter) {
+        requiredParameterCount = 1;
+      } else {
+        isGetter = true;
+        requiredParameterCount = 0;
+      }
+    } else {
+      requiredParameterCount = int.parse(info[1]);
+      optionalParameterCount = int.parse(info[2]);
+    }
+    return new JsMethodMirror(
+        s(name), jsFunction, requiredParameterCount, optionalParameterCount,
+        isGetter, isSetter, isStatic, isConstructor, isOperator);
+  }
+
+  String get _prettyName => 'MethodMirror';
+
+  int get _parameterCount => _requiredParameterCount + _optionalParameterCount;
+
+  List<ParameterMirror> get parameters {
+    if (_parameters != null) return _parameters;
+    metadata; // Compute _parameters as a side-effect of extracting metadata.
+    return _parameters;
+  }
+
+  bool canInvokeReflectively() {
+    return hasReflectableProperty(_jsFunction);
+  }
+
+  DeclarationMirror get owner => _owner;
+
+  TypeMirror get returnType {
+    metadata; // Compute _returnType as a side-effect of extracting metadata.
+    return _returnType;
+  }
+
+  List<InstanceMirror> get metadata {
+    if (_metadata == null) {
+      var raw = extractMetadata(_jsFunction);
+      var formals = new List(_parameterCount);
+      ReflectionInfo info = new ReflectionInfo(_jsFunction);
+      if (info != null) {
+        assert(_parameterCount
+               == info.requiredParameterCount + info.optionalParameterCount);
+        var functionType = info.functionType;
+        var type;
+        if (functionType is int) {
+          type = new JsFunctionTypeMirror(info.computeFunctionRti(null), this);
+          assert(_parameterCount == type.parameters.length);
+        } else if (isTopLevel) {
+          type = new JsFunctionTypeMirror(info.computeFunctionRti(null), owner);
+        } else {
+          TypeMirror ownerType = owner;
+          JsClassMirror ownerClass = ownerType.originalDeclaration;
+          type = new JsFunctionTypeMirror(
+              info.computeFunctionRti(ownerClass._jsConstructor),
+              owner);
+        }
+        // Constructors aren't reified with their return type.
+        if (isConstructor) {
+          _returnType = owner;
+        } else {
+          _returnType = type.returnType;
+        }
+        int i = 0;
+        bool isNamed = info.areOptionalParametersNamed;
+        for (JsParameterMirror parameter in type.parameters) {
+          var name = info.parameterName(i);
+          List<int> annotations = info.parameterMetadataAnnotations(i);
+          var p;
+          if (i < info.requiredParameterCount) {
+            p = new JsParameterMirror(name, this, parameter._type,
+                metadataList: annotations);
+          } else {
+            var defaultValue = info.defaultValue(i);
+            p = new JsParameterMirror(
+                name, this, parameter._type, metadataList: annotations,
+                isOptional: true, isNamed: isNamed, defaultValue: defaultValue);
+          }
+          formals[i++] = p;
+        }
+      }
+      _parameters = new UnmodifiableListView<ParameterMirror>(formals);
+      _metadata = new UnmodifiableListView(raw.map(reflect));
+    }
+    return _metadata;
+  }
+
+  Symbol get constructorName {
+    // TODO(ahe): I believe it is more appropriate to throw an exception or
+    // return null.
+    if (!isConstructor) return const Symbol('');
+    String name = n(simpleName);
+    int index = name.indexOf('.');
+    if (index == -1) return const Symbol('');
+    return s(name.substring(index + 1));
+  }
+
+  _invoke(List positionalArguments, Map<Symbol, dynamic> namedArguments) {
+    if (namedArguments != null && !namedArguments.isEmpty) {
+      throw new UnsupportedError('Named arguments are not implemented.');
+    }
+    if (!isStatic && !isConstructor) {
+      throw new RuntimeError('Cannot invoke instance method without receiver.');
+    }
+    int positionalLength = positionalArguments.length;
+    if (positionalLength < _requiredParameterCount ||
+        positionalLength >  _parameterCount ||
+        _jsFunction == null) {
+      // TODO(ahe): What receiver to use?
+      throw new NoSuchMethodError(
+          owner, simpleName, positionalArguments, namedArguments);
+    }
+    if (positionalLength < _parameterCount) {
+      // Fill up with default values.
+      // Make a copy so we don't modify the input.
+      positionalArguments = positionalArguments.toList();
+      for (int i = positionalLength; i < parameters.length; i++) {
+        JsParameterMirror parameter = parameters[i];
+        positionalArguments.add(parameter.defaultValue.reflectee);
+      }
+    }
+    // Using JS_CURRENT_ISOLATE() ('$') here is actually correct, although
+    // _jsFunction may not be a property of '$', most static functions do not
+    // care who their receiver is. But to lazy getters, it is important that
+    // 'this' is '$'.
+    return JS('', r'#.apply(#, #)', _jsFunction, JS_CURRENT_ISOLATE(),
+              new List.from(positionalArguments));
+  }
+
+  _getField(JsMirror receiver) {
+    if (isGetter) {
+      return _invoke([], null);
+    } else {
+      // TODO(ahe): Closurize method.
+      throw new UnimplementedError('getField on $receiver');
+    }
+  }
+
+  _setField(JsMirror receiver, Object arg) {
+    if (isSetter) {
+      return _invoke([arg], null);
+    } else {
+      throw new NoSuchMethodError(this, setterSymbol(simpleName), [], null);
+    }
+  }
+
+  // Abstract methods are tree-shaken away.
+  bool get isAbstract => false;
+
+  // TODO(ahe, 14633): This might not be true for all cases.
+  bool get isSynthetic => false;
+
+  // TODO(ahe): Test this.
+  bool get isRegularMethod => !isGetter && !isSetter && !isConstructor;
+
+  // TODO(ahe): Implement this method.
+  bool get isConstConstructor => throw new UnimplementedError();
+
+  // TODO(ahe): Implement this method.
+  bool get isGenerativeConstructor => throw new UnimplementedError();
+
+  // TODO(ahe): Implement this method.
+  bool get isRedirectingConstructor => throw new UnimplementedError();
+
+  // TODO(ahe): Implement this method.
+  bool get isFactoryConstructor => throw new UnimplementedError();
+
+  // TODO(ahe): Implement this method.
+  String get source => throw new UnimplementedError();
+}
+
+class JsParameterMirror extends JsDeclarationMirror implements ParameterMirror {
+  final DeclarationMirror owner;
+  // A JS object representing the type.
+  final _type;
+
+  final bool isOptional;
+
+  final bool isNamed;
+
+  final int _defaultValue;
+
+  final List<int> metadataList;
+
+  JsParameterMirror(String unmangledName,
+                    this.owner,
+                    this._type,
+                     {this.metadataList: const <int>[],
+                     this.isOptional: false,
+                     this.isNamed: false,
+                     defaultValue})
+      : _defaultValue = defaultValue,
+        super(s(unmangledName));
+
+  String get _prettyName => 'ParameterMirror';
+
+  TypeMirror get type {
+    return typeMirrorFromRuntimeTypeRepresentation(owner, _type);
+  }
+
+  // Only true for static fields, never for a parameter.
+  bool get isStatic => false;
+
+  // TODO(ahe): Implement this.
+  bool get isFinal => false;
+
+  // TODO(ahe): Implement this.
+  bool get isConst => false;
+
+  bool get hasDefaultValue => _defaultValue != null;
+
+  get defaultValue {
+    return hasDefaultValue ? reflect(getMetadata(_defaultValue)) : null;
+  }
+
+  List<InstanceMirror> get metadata {
+    preserveMetadata();
+    return metadataList.map((int i) => reflect(getMetadata(i))).toList();
+  }
+}
+
+class JsTypedefMirror extends JsDeclarationMirror implements TypedefMirror {
+  final String _mangledName;
+  JsFunctionTypeMirror referent;
+
+  JsTypedefMirror(Symbol simpleName,  this._mangledName, _typeData)
+      : super(simpleName) {
+    referent = new JsFunctionTypeMirror(_typeData, this);
+  }
+
+  JsFunctionTypeMirror get value => referent;
+
+  String get _prettyName => 'TypedefMirror';
+
+  bool get hasReflectedType => throw new UnimplementedError();
+
+  Type get reflectedType => throw new UnimplementedError();
+
+  // TODO(ahe): Implement this method.
+  List<TypeVariableMirror> get typeVariables => throw new UnimplementedError();
+
+  // TODO(ahe): Implement this method.
+  List<TypeMirror> get typeArguments => throw new UnimplementedError();
+
+  // TODO(ahe): Implement this method.
+  bool get isOriginalDeclaration => throw new UnimplementedError();
+
+  // TODO(ahe): Implement this method.
+  TypeMirror get originalDeclaration => throw new UnimplementedError();
+
+  // TODO(ahe): Implement this method.
+  DeclarationMirror get owner => throw new UnimplementedError();
+
+  // TODO(ahe): Implement this method.
+  List<InstanceMirror> get metadata => throw new UnimplementedError();
+
+  bool isSubtypeOf(TypeMirror other) => throw new UnimplementedError();
+  bool isAssignableTo(TypeMirror other) => throw new UnimplementedError();
+}
+
+// TODO(ahe): Remove this class when API is updated.
+class BrokenClassMirror {
+  bool get hasReflectedType => throw new UnimplementedError();
+  Type get reflectedType => throw new UnimplementedError();
+  ClassMirror get superclass => throw new UnimplementedError();
+  List<ClassMirror> get superinterfaces => throw new UnimplementedError();
+  Map<Symbol, DeclarationMirror> get declarations
+      => throw new UnimplementedError();
+  Map<Symbol, MethodMirror> get instanceMembers
+      => throw new UnimplementedError();
+  Map<Symbol, MethodMirror> get staticMembers => throw new UnimplementedError();
+  ClassMirror get mixin => throw new UnimplementedError();
+  InstanceMirror newInstance(
+      Symbol constructorName,
+      List positionalArguments,
+      [Map<Symbol, dynamic> namedArguments]) => throw new UnimplementedError();
+  InstanceMirror invoke(Symbol memberName,
+                        List positionalArguments,
+                        [Map<Symbol, dynamic> namedArguments])
+      => throw new UnimplementedError();
+  InstanceMirror getField(Symbol fieldName) => throw new UnimplementedError();
+  InstanceMirror setField(Symbol fieldName, Object value)
+      => throw new UnimplementedError();
+  List<TypeVariableMirror> get typeVariables => throw new UnimplementedError();
+  List<TypeMirror> get typeArguments => throw new UnimplementedError();
+  TypeMirror get originalDeclaration => throw new UnimplementedError();
+  Symbol get simpleName => throw new UnimplementedError();
+  Symbol get qualifiedName => throw new UnimplementedError();
+  bool get isPrivate => throw new UnimplementedError();
+  bool get isTopLevel => throw new UnimplementedError();
+  SourceLocation get location => throw new UnimplementedError();
+  List<InstanceMirror> get metadata => throw new UnimplementedError();
+}
+
+class JsFunctionTypeMirror extends BrokenClassMirror
+    implements FunctionTypeMirror {
+  final _typeData;
+  String _cachedToString;
+  TypeMirror _cachedReturnType;
+  UnmodifiableListView<ParameterMirror> _cachedParameters;
+  DeclarationMirror owner;
+
+  JsFunctionTypeMirror(this._typeData, this.owner);
+
+  bool get _hasReturnType => JS('bool', '"ret" in #', _typeData);
+  get _returnType => JS('', '#.ret', _typeData);
+
+  bool get _isVoid => JS('bool', '!!#.void', _typeData);
+
+  bool get _hasArguments => JS('bool', '"args" in #', _typeData);
+  List get _arguments => JS('JSExtendableArray', '#.args', _typeData);
+
+  bool get _hasOptionalArguments => JS('bool', '"opt" in #', _typeData);
+  List get _optionalArguments => JS('JSExtendableArray', '#.opt', _typeData);
+
+  bool get _hasNamedArguments => JS('bool', '"named" in #', _typeData);
+  get _namedArguments => JS('=Object', '#.named', _typeData);
+  bool get isOriginalDeclaration => true;
+
+  bool get isAbstract => false;
+
+  TypeMirror get returnType {
+    if (_cachedReturnType != null) return _cachedReturnType;
+    if (_isVoid) return _cachedReturnType = JsMirrorSystem._voidType;
+    if (!_hasReturnType) return _cachedReturnType = JsMirrorSystem._dynamicType;
+    return _cachedReturnType =
+        typeMirrorFromRuntimeTypeRepresentation(owner, _returnType);
+  }
+
+  List<ParameterMirror> get parameters {
+    if (_cachedParameters != null) return _cachedParameters;
+    List result = [];
+    int parameterCount = 0;
+    if (_hasArguments) {
+      for (var type in _arguments) {
+        result.add(
+            new JsParameterMirror('argument${parameterCount++}', this, type));
+      }
+    }
+    if (_hasOptionalArguments) {
+      for (var type in _optionalArguments) {
+        result.add(
+            new JsParameterMirror('argument${parameterCount++}', this, type));
+      }
+    }
+    if (_hasNamedArguments) {
+      for (var name in extractKeys(_namedArguments)) {
+        var type = JS('', '#[#]', _namedArguments, name);
+        result.add(new JsParameterMirror(name, this, type));
+      }
+    }
+    return _cachedParameters = new UnmodifiableListView<ParameterMirror>(
+        result);
+  }
+
+  String _unmangleIfPreserved(String mangled) {
+    String result = unmangleGlobalNameIfPreservedAnyways(mangled);
+    if (result != null) return result;
+    return mangled;
+  }
+
+  String toString() {
+    if (_cachedToString != null) return _cachedToString;
+    var s = "FunctionTypeMirror on '(";
+    var sep = '';
+    if (_hasArguments) {
+      for (var argument in _arguments) {
+        s += sep;
+        s += _unmangleIfPreserved(runtimeTypeToString(argument));
+        sep = ', ';
+      }
+    }
+    if (_hasOptionalArguments) {
+      s += '$sep[';
+      sep = '';
+      for (var argument in _optionalArguments) {
+        s += sep;
+        s += _unmangleIfPreserved(runtimeTypeToString(argument));
+        sep = ', ';
+      }
+      s += ']';
+    }
+    if (_hasNamedArguments) {
+      s += '$sep{';
+      sep = '';
+      for (var name in extractKeys(_namedArguments)) {
+        s += sep;
+        s += '$name: ';
+        s += _unmangleIfPreserved(
+            runtimeTypeToString(JS('', '#[#]', _namedArguments, name)));
+        sep = ', ';
+      }
+      s += '}';
+    }
+    s += ') -> ';
+    if (_isVoid) {
+      s += 'void';
+    } else if (_hasReturnType) {
+      s += _unmangleIfPreserved(runtimeTypeToString(_returnType));
+    } else {
+      s += 'dynamic';
+    }
+    return _cachedToString = "$s'";
+  }
+
+  bool isSubclassOf(ClassMirror other) => false;
+
+  bool isSubtypeOf(TypeMirror other) => throw new UnimplementedError();
+
+  bool isAssignableTo(TypeMirror other) => throw new UnimplementedError();
+
+  // TODO(ahe): Implement this method.
+  MethodMirror get callMethod => throw new UnimplementedError();
+}
+
+int findTypeVariableIndex(List<TypeVariableMirror> typeVariables, String name) {
+  for (int i = 0; i < typeVariables.length; i++) {
+    if (typeVariables[i].simpleName == s(name)) {
+      return i;
+    }
+  }
+  throw new ArgumentError('Type variable not present in list.');
+}
+
+TypeMirror typeMirrorFromRuntimeTypeRepresentation(
+    DeclarationMirror owner,
+    var /*int|List|JsFunction|TypeImpl*/ type) {
+  // TODO(ahe): This method might benefit from using convertRtiToRuntimeType
+  // instead of working on strings.
+  ClassMirror ownerClass;
+  DeclarationMirror context = owner;
+  while (context != null) {
+    if (context is ClassMirror) {
+      ownerClass = context;
+      break;
+    }
+    // TODO(ahe): Get type parameters and arguments from typedefs.
+    if (context is TypedefMirror) break;
+    context = context.owner;
+  }
+
+  String representation;
+  if (type == null) {
+    return JsMirrorSystem._dynamicType;
+  } else if (type is TypeImpl) {
+    return reflectType(type);
+  } else if (ownerClass == null) {
+    representation = runtimeTypeToString(type);
+  } else if (ownerClass.isOriginalDeclaration) {
+    if (type is num) {
+      // [type] represents a type variable so in the context of an original
+      // declaration the corresponding type variable should be returned.
+      TypeVariable typeVariable = getMetadata(type);
+      List<TypeVariableMirror> typeVariables = ownerClass.typeVariables;
+      int index = findTypeVariableIndex(typeVariables, typeVariable.name);
+      return typeVariables[index];
+    } else {
+      // Nested type variables will be retrieved lazily (the integer
+      // representation is kept in the string) so they are not processed here.
+      representation = runtimeTypeToString(type);
+    }
+  } else {
+    TypeMirror getTypeArgument(int index) {
+      TypeVariable typeVariable = getMetadata(index);
+      int variableIndex =
+          findTypeVariableIndex(ownerClass.typeVariables, typeVariable.name);
+      return ownerClass.typeArguments[variableIndex];
+    }
+
+    if (type is num) {
+      // [type] represents a type variable used as type argument for example
+      // the type argument of Bar: class Foo<T> extends Bar<T> {}
+      TypeMirror typeArgument = getTypeArgument(type);
+      if (typeArgument is JsTypeVariableMirror)
+        return typeArgument;
+    }
+    String substituteTypeVariable(int index) {
+      var typeArgument = getTypeArgument(index);
+      if (typeArgument is JsTypeVariableMirror) {
+        return '${typeArgument._metadataIndex}';
+      }
+      if (typeArgument is! JsClassMirror &&
+          typeArgument is! JsTypeBoundClassMirror) {
+        if (typeArgument == JsMirrorSystem._dynamicType) {
+          return 'dynamic';
+        } else if (typeArgument == JsMirrorSystem._voidType) {
+          return 'void';
+        } else {
+          // TODO(ahe): This case shouldn't happen.
+          return 'dynamic';
+        }
+      }
+      return typeArgument._mangledName;
+    }
+    representation =
+        runtimeTypeToString(type, onTypeVariable: substituteTypeVariable);
+  }
+  if (representation != null) {
+    return reflectClassByMangledName(
+        getMangledTypeName(createRuntimeType(representation)));
+  }
+  if (type != null && JS('', '#.typedef', type) != null) {
+    return typeMirrorFromRuntimeTypeRepresentation(
+        owner, JS('', '#.typedef', type));
+  } else if (type != null && JS('', '#.func', type) != null) {
+    return new JsFunctionTypeMirror(type, owner);
+  }
+  return reflectClass(Function);
+}
+
+Symbol computeQualifiedName(DeclarationMirror owner, Symbol simpleName) {
+  if (owner == null) return simpleName;
+  String ownerName = n(owner.qualifiedName);
+  return s('$ownerName.${n(simpleName)}');
+}
+
+List extractMetadata(victim) {
+  preserveMetadata();
+  var metadataFunction;
+  if (JS('bool', 'Object.prototype.hasOwnProperty.call(#, "@")', victim)) {
+    metadataFunction = JS('', '#["@"]', victim);
+  }
+  if (metadataFunction != null) return JS('', '#()', metadataFunction);
+  if (JS('bool', 'typeof # != "function"', victim)) return const [];
+  if (JS('bool', '# in #', r'$metadataIndex', victim)) {
+    return JSArray.markFixedList(
+        JS('JSExtendableArray',
+           r'#.$reflectionInfo.splice(#.$metadataIndex)', victim, victim))
+        .map((int i) => getMetadata(i)).toList();
+  }
+  return const [];
+}
+
+void parseCompactFieldSpecification(
+    JsDeclarationMirror owner,
+    fieldSpecification,
+    bool isStatic,
+    List<Mirror> result) {
+  List fieldsMetadata = null;
+  List<String> fields;
+  if (fieldSpecification is List) {
+    fields = splitFields(fieldSpecification[0], ',');
+    fieldsMetadata = fieldSpecification.sublist(1);
+  } else if (fieldSpecification is String) {
+    fields = splitFields(fieldSpecification, ',');
+  } else {
+    fields = [];
+  }
+  int fieldNumber = 0;
+  for (String field in fields) {
+    var metadata;
+    if (fieldsMetadata != null) {
+      metadata = fieldsMetadata[fieldNumber++];
+    }
+    var mirror = new JsVariableMirror.from(field, metadata, owner, isStatic);
+    if (mirror != null) {
+      result.add(mirror);
+    }
+  }
+}
+
+/// Similar to [String.split], but returns an empty list if [string] is empty.
+List<String> splitFields(String string, Pattern pattern) {
+  if (string.isEmpty) return <String>[];
+  return string.split(pattern);
+}
+
+bool isOperatorName(String name) {
+  switch (name) {
+  case '==':
+  case '[]':
+  case '*':
+  case '/':
+  case '%':
+  case '~/':
+  case '+':
+  case '<<':
+  case '>>':
+  case '>=':
+  case '>':
+  case '<=':
+  case '<':
+  case '&':
+  case '^':
+  case '|':
+  case '-':
+  case 'unary-':
+  case '[]=':
+  case '~':
+    return true;
+  default:
+    return false;
+  }
+}
+
+/// Returns true if the key represent ancillary reflection data, that is, not a
+/// method.
+bool isReflectiveDataInPrototype(String key) {
+  if (key == JS_GET_NAME('CLASS_DESCRIPTOR_PROPERTY') ||
+      key == METHODS_WITH_OPTIONAL_ARGUMENTS) {
+    return true;
+  }
+  String firstChar = key[0];
+  return firstChar == '*' || firstChar == '+';
+}
+
+bool isNoSuchMethodStub(var jsFunction) {
+  return JS('bool', r'#.$reflectable == 2', jsFunction);
+}
+
+class NoSuchStaticMethodError extends Error implements NoSuchMethodError {
+  static const int MISSING_CONSTRUCTOR = 0;
+  static const int MISSING_METHOD = 1;
+  final ClassMirror _cls;
+  final Symbol _name;
+  final List _positionalArguments;
+  final Map<Symbol, dynamic> _namedArguments;
+  final int _kind;
+
+  NoSuchStaticMethodError.missingConstructor(
+      this._cls,
+      this._name,
+      this._positionalArguments,
+      this._namedArguments)
+      : _kind = MISSING_CONSTRUCTOR;
+
+  /// If the given class is `null` the static method/getter/setter is top-level.
+  NoSuchStaticMethodError.method(
+      this._cls,
+      this._name,
+      this._positionalArguments,
+      this._namedArguments)
+      : _kind = MISSING_METHOD;
+
+  String toString() {
+    // TODO(floitsch): show arguments.
+    switch(_kind) {
+    case MISSING_CONSTRUCTOR:
+      return
+          "NoSuchMethodError: No constructor named '${n(_name)}' in class"
+          " '${n(_cls.qualifiedName)}'.";
+    case MISSING_METHOD:
+      if (_cls == null) {
+        return "NoSuchMethodError: No top-level method named '${n(_name)}'.";
+      }
+      return "NoSuchMethodError: No static method named '${n(_name)}' in"
+             " class '${n(_cls.qualifiedName)}'";
+    default:
+      return 'NoSuchMethodError';
+    }
+  }
+}
+
+Symbol getSymbol(String name, LibraryMirror library) {
+  if (_isPublicSymbol(name)) {
+    return new _symbol_dev.Symbol.validated(name);
+  }
+  if (library == null) {
+    throw new ArgumentError(
+        "Library required for private symbol name: $name");
+  }
+  if (!_symbol_dev.Symbol.isValidSymbol(name)) {
+    throw new ArgumentError("Not a valid symbol name: $name");
+  }
+  throw new UnimplementedError(
+      "MirrorSystem.getSymbol not implemented for private names");
+}
+
+bool _isPublicSymbol(String name) {
+  // A symbol is public if it doesn't start with '_' and it doesn't
+  // have a part (following a '.') that starts with '_'.
+  const int UNDERSCORE = 0x5f;
+  if (name.isEmpty) return true;
+  int index = -1;
+  do {
+    if (name.codeUnitAt(index + 1) == UNDERSCORE) return false;
+    index = name.indexOf('.', index + 1);
+  } while (index >= 0 && index + 1 < name.length);
+  return true;
+}
diff --git a/sdk/lib/_internal/compiler/js_lib/js_names.dart b/sdk/lib/_internal/compiler/js_lib/js_names.dart
new file mode 100644
index 0000000..f30edfd
--- /dev/null
+++ b/sdk/lib/_internal/compiler/js_lib/js_names.dart
@@ -0,0 +1,115 @@
+// 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 dart._js_names;
+
+import 'shared/embedded_names.dart' show
+    MANGLED_GLOBAL_NAMES,
+    MANGLED_NAMES;
+
+import 'dart:_foreign_helper' show
+    JS,
+    JS_EMBEDDED_GLOBAL,
+    JS_GET_NAME;
+
+import 'dart:_js_helper' show
+    JsCache,
+    NoInline;
+
+import 'dart:_interceptors' show JSArray;
+
+/// No-op method that is called to inform the compiler that unmangled named
+/// must be preserved.
+preserveNames() {}
+
+/// A map from mangled names to "reflective" names, that is, unmangled names
+/// with some additional information, such as, number of required arguments.
+/// This map is for mangled names used as instance members.
+final Map<String, String> mangledNames =
+    computeMangledNames(
+        JS_EMBEDDED_GLOBAL('=Object', MANGLED_NAMES),
+        false);
+
+/// A map from "reflective" names to mangled names (the reverse of
+/// [mangledNames]).
+final Map<String, String> reflectiveNames =
+    computeReflectiveNames(mangledNames);
+
+/// A map from mangled names to "reflective" names (see [mangledNames]).  This
+/// map is for globals, that is, static and top-level members.
+final Map<String, String> mangledGlobalNames = computeMangledNames(
+        JS_EMBEDDED_GLOBAL('=Object', MANGLED_GLOBAL_NAMES),
+        true);
+
+/// A map from "reflective" names to mangled names (the reverse of
+/// [mangledGlobalNames]).
+final Map<String, String> reflectiveGlobalNames =
+    computeReflectiveNames(mangledGlobalNames);
+
+/// [jsMangledNames] is a JavaScript object literal.  The keys are the mangled
+/// names, and the values are the "reflective" names.
+Map<String, String> computeMangledNames(jsMangledNames, bool isGlobal) {
+  preserveNames();
+  var keys = extractKeys(jsMangledNames);
+  var result = <String, String>{};
+  String getterPrefix = JS_GET_NAME('GETTER_PREFIX');
+  int getterPrefixLength = getterPrefix.length;
+  String setterPrefix = JS_GET_NAME('SETTER_PREFIX');
+  for (String key in keys) {
+    String value = JS('String', '#[#]', jsMangledNames, key);
+    result[key] = value;
+    if (!isGlobal) {
+      if (key.startsWith(getterPrefix)) {
+        result['$setterPrefix${key.substring(getterPrefixLength)}'] = '$value=';
+      }
+    }
+  }
+  return result;
+}
+
+Map<String, String> computeReflectiveNames(Map<String, String> map) {
+  preserveNames();
+  var result = <String, String>{};
+  map.forEach((String mangledName, String reflectiveName) {
+    result[reflectiveName] = mangledName;
+  });
+  return result;
+}
+
+@NoInline()
+List extractKeys(victim) {
+  var result = JS('', '''
+(function(victim, hasOwnProperty) {
+  var result = [];
+  for (var key in victim) {
+    if (hasOwnProperty.call(victim, key)) result.push(key);
+  }
+  return result;
+})(#, Object.prototype.hasOwnProperty)''', victim);
+  return new JSArray.markFixed(result);
+}
+
+/**
+ * Returns the (global) unmangled version of [name].
+ *
+ * Normally, you should use [mangledGlobalNames] directly, but this method
+ * doesn't tell the compiler to preserve names. So this method only returns a
+ * non-null value if some other component has made the compiler preserve names.
+ *
+ * This is used, for example, to return unmangled names from TypeImpl.toString
+ * *if* names are being preserved for other reasons (use of dart:mirrors, for
+ * example).
+ */
+String unmangleGlobalNameIfPreservedAnyways(String name) {
+  var names = JS_EMBEDDED_GLOBAL('=Object', MANGLED_GLOBAL_NAMES);
+  return JsCache.fetch(names, name);
+}
+
+String unmangleAllIdentifiersIfPreservedAnyways(String str) {
+  return JS("String",
+            r"(#).replace(/[^<,> ]+/g,"
+            r"function(m) { return #[m] || m; })",
+            str,
+            JS_EMBEDDED_GLOBAL('', MANGLED_GLOBAL_NAMES));
+}
\ No newline at end of file
diff --git a/sdk/lib/_internal/lib/js_number.dart b/sdk/lib/_internal/compiler/js_lib/js_number.dart
similarity index 100%
rename from sdk/lib/_internal/lib/js_number.dart
rename to sdk/lib/_internal/compiler/js_lib/js_number.dart
diff --git a/sdk/lib/_internal/lib/js_primitives.dart b/sdk/lib/_internal/compiler/js_lib/js_primitives.dart
similarity index 100%
rename from sdk/lib/_internal/lib/js_primitives.dart
rename to sdk/lib/_internal/compiler/js_lib/js_primitives.dart
diff --git a/sdk/lib/_internal/lib/js_rti.dart b/sdk/lib/_internal/compiler/js_lib/js_rti.dart
similarity index 100%
rename from sdk/lib/_internal/lib/js_rti.dart
rename to sdk/lib/_internal/compiler/js_lib/js_rti.dart
diff --git a/sdk/lib/_internal/lib/js_string.dart b/sdk/lib/_internal/compiler/js_lib/js_string.dart
similarity index 100%
rename from sdk/lib/_internal/lib/js_string.dart
rename to sdk/lib/_internal/compiler/js_lib/js_string.dart
diff --git a/sdk/lib/_internal/lib/math_patch.dart b/sdk/lib/_internal/compiler/js_lib/math_patch.dart
similarity index 100%
rename from sdk/lib/_internal/lib/math_patch.dart
rename to sdk/lib/_internal/compiler/js_lib/math_patch.dart
diff --git a/sdk/lib/_internal/lib/mirror_helper.dart b/sdk/lib/_internal/compiler/js_lib/mirror_helper.dart
similarity index 100%
rename from sdk/lib/_internal/lib/mirror_helper.dart
rename to sdk/lib/_internal/compiler/js_lib/mirror_helper.dart
diff --git a/sdk/lib/_internal/lib/mirrors_patch.dart b/sdk/lib/_internal/compiler/js_lib/mirrors_patch.dart
similarity index 100%
rename from sdk/lib/_internal/lib/mirrors_patch.dart
rename to sdk/lib/_internal/compiler/js_lib/mirrors_patch.dart
diff --git a/sdk/lib/_internal/compiler/js_lib/native_helper.dart b/sdk/lib/_internal/compiler/js_lib/native_helper.dart
new file mode 100644
index 0000000..7de3c6f
--- /dev/null
+++ b/sdk/lib/_internal/compiler/js_lib/native_helper.dart
@@ -0,0 +1,648 @@
+// 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.
+
+part of _js_helper;
+
+
+// TODO(ngeoffray): stop using this method once our optimizers can
+// change str1.contains(str2) into str1.indexOf(str2) != -1.
+bool contains(String userAgent, String name) {
+  return JS('int', '#.indexOf(#)', userAgent, name) != -1;
+}
+
+int arrayLength(List array) {
+  return JS('int', '#.length', array);
+}
+
+arrayGet(List array, int index) {
+  return JS('var', '#[#]', array, index);
+}
+
+void arraySet(List array, int index, var value) {
+  JS('var', '#[#] = #', array, index, value);
+}
+
+propertyGet(var object, String property) {
+  return JS('var', '#[#]', object, property);
+}
+
+bool callHasOwnProperty(var function, var object, String property) {
+  return JS('bool', '#.call(#, #)', function, object, property);
+}
+
+void propertySet(var object, String property, var value) {
+  JS('var', '#[#] = #', object, property, value);
+}
+
+getPropertyFromPrototype(var object, String name) {
+  return JS('var', 'Object.getPrototypeOf(#)[#]', object, name);
+}
+
+/**
+ * Returns a String tag identifying the type of the native object, or `null`.
+ * The tag is not the name of the type, but usually the name of the JavaScript
+ * constructor function.  Initialized by [initHooks].
+ */
+Function getTagFunction;
+
+/**
+ * If a lookup via [getTagFunction] on an object [object] that has [tag] fails,
+ * this function is called to provide an alternate tag.  This allows us to fail
+ * gracefully if we can make a good guess, for example, when browsers add novel
+ * kinds of HTMLElement that we have never heard of.  Initialized by
+ * [initHooks].
+ */
+Function alternateTagFunction;
+
+/**
+ * Returns the prototype for the JavaScript constructor named by an input tag.
+ * Returns `null` if there is no such constructor, or if pre-patching of the
+ * constructor is to be avoided.  Initialized by [initHooks].
+ */
+Function prototypeForTagFunction;
+
+
+String toStringForNativeObject(var obj) {
+  // TODO(sra): Is this code dead?
+  // [getTagFunction] might be uninitialized, but in usual usage, toString has
+  // been called via an interceptor and initialized it.
+  String name = getTagFunction == null
+      ? '<Unknown>'
+      : JS('String', '#', getTagFunction(obj));
+  return 'Instance of $name';
+}
+
+int hashCodeForNativeObject(object) => Primitives.objectHashCode(object);
+
+/**
+ * Sets a JavaScript property on an object.
+ */
+void defineProperty(var obj, String property, var value) {
+  JS('void',
+      'Object.defineProperty(#, #, '
+          '{value: #, enumerable: false, writable: true, configurable: true})',
+      obj,
+      property,
+      value);
+}
+
+
+// Is [obj] an instance of a Dart-defined class?
+bool isDartObject(obj) {
+  // Some of the extra parens here are necessary.
+  return JS('bool', '((#) instanceof (#))', obj, JS_DART_OBJECT_CONSTRUCTOR());
+}
+
+/**
+ * A JavaScript object mapping tags to the constructors of interceptors.
+ * This is a JavaScript object with no prototype.
+ *
+ * Example: 'HTMLImageElement' maps to the ImageElement class constructor.
+ */
+get interceptorsByTag => JS_EMBEDDED_GLOBAL('=Object', INTERCEPTORS_BY_TAG);
+
+/**
+ * A JavaScript object mapping tags to `true` or `false`.
+ *
+ * Example: 'HTMLImageElement' maps to `true` since, as there are no subclasses
+ * of ImageElement, it is a leaf class in the native class hierarchy.
+ */
+get leafTags => JS_EMBEDDED_GLOBAL('=Object', LEAF_TAGS);
+
+String findDispatchTagForInterceptorClass(interceptorClassConstructor) {
+  return JS('', r'#.$nativeSuperclassTag', interceptorClassConstructor);
+}
+
+/**
+ * Cache of dispatch records for instances.  This is a JavaScript object used as
+ * a map.  Keys are instance tags, e.g. "!SomeThing".  The cache permits the
+ * sharing of one dispatch record between multiple instances.
+ */
+var dispatchRecordsForInstanceTags;
+
+/**
+ * Cache of interceptors indexed by uncacheable tags, e.g. "~SomeThing".
+ * This is a JavaScript object used as a map.
+ */
+var interceptorsForUncacheableTags;
+
+
+lookupInterceptor(String tag) {
+  return propertyGet(interceptorsByTag, tag);
+}
+
+
+// Dispatch tag marks are optional prefixes for a dispatch tag that direct how
+// the interceptor for the tag may be cached.
+
+/// No caching permitted.
+const UNCACHED_MARK = '~';
+
+/// Dispatch record must be cached per instance
+const INSTANCE_CACHED_MARK = '!';
+
+/// Dispatch record is cached on immediate prototype.
+const LEAF_MARK = '-';
+
+/// Dispatch record is cached on immediate prototype with a prototype
+/// verification to prevent the interceptor being associated with a subclass
+/// before a dispatch record is cached on the subclass.
+const INTERIOR_MARK = '+';
+
+/// A 'discriminator' function is to be used. TBD.
+const DISCRIMINATED_MARK = '*';
+
+
+/**
+ * Returns the interceptor for a native object, or returns `null` if not found.
+ *
+ * A dispatch record is cached according to the specification of the dispatch
+ * tag for [obj].
+ */
+lookupAndCacheInterceptor(obj) {
+  assert(!isDartObject(obj));
+  String tag = getTagFunction(obj);
+
+  // Fast path for instance (and uncached) tags because the lookup is repeated
+  // for each instance (or getInterceptor call).
+  var record = propertyGet(dispatchRecordsForInstanceTags, tag);
+  if (record != null) return patchInstance(obj, record);
+  var interceptor = propertyGet(interceptorsForUncacheableTags, tag);
+  if (interceptor != null) return interceptor;
+
+  // This lookup works for derived dispatch tags because we add them all in
+  // [initNativeDispatch].
+  var interceptorClass = lookupInterceptor(tag);
+  if (interceptorClass == null) {
+    tag = alternateTagFunction(obj, tag);
+    if (tag != null) {
+      // Fast path for instance and uncached tags again.
+      record = propertyGet(dispatchRecordsForInstanceTags, tag);
+      if (record != null) return patchInstance(obj, record);
+      interceptor = propertyGet(interceptorsForUncacheableTags, tag);
+      if (interceptor != null) return interceptor;
+
+      interceptorClass = lookupInterceptor(tag);
+    }
+  }
+
+  if (interceptorClass == null) {
+    // This object is not known to Dart.  There could be several reasons for
+    // that, including (but not limited to):
+    //
+    // * A bug in native code (hopefully this is caught during development).
+    // * An unknown DOM object encountered.
+    // * JavaScript code running in an unexpected context.  For example, on
+    //   node.js.
+    return null;
+  }
+
+  interceptor = JS('', '#.prototype', interceptorClass);
+
+  var mark = JS('String|Null', '#[0]', tag);
+
+  if (mark == INSTANCE_CACHED_MARK) {
+    record = makeLeafDispatchRecord(interceptor);
+    propertySet(dispatchRecordsForInstanceTags, tag, record);
+    return patchInstance(obj, record);
+  }
+
+  if (mark == UNCACHED_MARK) {
+    propertySet(interceptorsForUncacheableTags, tag, interceptor);
+    return interceptor;
+  }
+
+  if (mark == LEAF_MARK) {
+    return patchProto(obj, makeLeafDispatchRecord(interceptor));
+  }
+
+  if (mark == INTERIOR_MARK) {
+    return patchInteriorProto(obj, interceptor);
+  }
+
+  if (mark == DISCRIMINATED_MARK) {
+    // TODO(sra): Use discriminator of tag.
+    throw new UnimplementedError(tag);
+  }
+
+  // [tag] was not explicitly an interior or leaf tag, so
+  var isLeaf = JS('bool', '(#[#]) === true', leafTags, tag);
+  if (isLeaf) {
+    return patchProto(obj, makeLeafDispatchRecord(interceptor));
+  } else {
+    return patchInteriorProto(obj, interceptor);
+  }
+}
+
+patchInstance(obj, record) {
+  setDispatchProperty(obj, record);
+  return dispatchRecordInterceptor(record);
+}
+
+patchProto(obj, record) {
+  setDispatchProperty(JS('', 'Object.getPrototypeOf(#)', obj), record);
+  return dispatchRecordInterceptor(record);
+}
+
+patchInteriorProto(obj, interceptor) {
+  var proto = JS('', 'Object.getPrototypeOf(#)', obj);
+  var record = makeDispatchRecord(interceptor, proto, null, null);
+  setDispatchProperty(proto, record);
+  return interceptor;
+}
+
+
+makeLeafDispatchRecord(interceptor) {
+  var fieldName = JS_IS_INDEXABLE_FIELD_NAME();
+  bool indexability = JS('bool', r'!!#[#]', interceptor, fieldName);
+  return makeDispatchRecord(interceptor, false, null, indexability);
+}
+
+makeDefaultDispatchRecord(tag, interceptorClass, proto) {
+  var interceptor = JS('', '#.prototype', interceptorClass);
+  var isLeaf = JS('bool', '(#[#]) === true', leafTags, tag);
+  if (isLeaf) {
+    return makeLeafDispatchRecord(interceptor);
+  } else {
+    return makeDispatchRecord(interceptor, proto, null, null);
+  }
+}
+
+/**
+ * [proto] should have no shadowing prototypes that are not also assigned a
+ * dispatch rescord.
+ */
+setNativeSubclassDispatchRecord(proto, interceptor) {
+  setDispatchProperty(proto, makeLeafDispatchRecord(interceptor));
+}
+
+String constructorNameFallback(object) {
+  return JS('String', '#(#)', _constructorNameFallback, object);
+}
+
+
+var initNativeDispatchFlag;  // null or true
+
+void initNativeDispatch() {
+  if (true == initNativeDispatchFlag) return;
+  initNativeDispatchFlag = true;
+  initNativeDispatchContinue();
+}
+
+void initNativeDispatchContinue() {
+
+  dispatchRecordsForInstanceTags = JS('', 'Object.create(null)');
+  interceptorsForUncacheableTags = JS('', 'Object.create(null)');
+
+  initHooks();
+
+  // Try to pro-actively patch prototypes of DOM objects.  For each of our known
+  // tags `TAG`, if `window.TAG` is a (constructor) function, set the dispatch
+  // property if the function's prototype to a dispatch record.
+  var map = interceptorsByTag;
+  var tags = JS('JSMutableArray', 'Object.getOwnPropertyNames(#)', map);
+
+  if (JS('bool', 'typeof window != "undefined"')) {
+    var context = JS('=Object', 'window');
+    var fun = JS('=Object', 'function () {}');
+    for (int i = 0; i < tags.length; i++) {
+      var tag = tags[i];
+      var proto = prototypeForTagFunction(tag);
+      if (proto != null) {
+        var interceptorClass = JS('', '#[#]', map, tag);
+        var record = makeDefaultDispatchRecord(tag, interceptorClass, proto);
+        if (record != null) {
+          setDispatchProperty(proto, record);
+          // Ensure the modified prototype is still fast by assigning it to
+          // the prototype property of a function object.
+          JS('', '#.prototype = #', fun, proto);
+        }
+      }
+    }
+  }
+
+  // [interceptorsByTag] maps 'plain' dispatch tags.  Add all the derived
+  // dispatch tags to simplify lookup of derived tags.
+  for (int i = 0; i < tags.length; i++) {
+    var tag = JS('String', '#[#]', tags, i);
+    if (JS('bool', '/^[A-Za-z_]/.test(#)', tag)) {
+      var interceptorClass = propertyGet(map, tag);
+      propertySet(map, INSTANCE_CACHED_MARK + tag, interceptorClass);
+      propertySet(map, UNCACHED_MARK + tag, interceptorClass);
+      propertySet(map, LEAF_MARK + tag, interceptorClass);
+      propertySet(map, INTERIOR_MARK + tag, interceptorClass);
+      propertySet(map, DISCRIMINATED_MARK + tag, interceptorClass);
+    }
+  }
+}
+
+
+/**
+ * Initializes [getTagFunction] and [alternateTagFunction].
+ *
+ * These functions are 'hook functions', collectively 'hooks'.  They initialized
+ * by applying a series of hooks transformers.  Built-in hooks transformers deal
+ * with various known browser behaviours.
+ *
+ * Each hook tranformer takes a 'hooks' input which is a JavaScript object
+ * containing the hook functions, and returns the same or a new object with
+ * replacements.  The replacements can wrap the originals to provide alternate
+ * or modified behaviour.
+ *
+ *     { getTag: function(obj) {...},
+ *       getUnknownTag: function(obj, tag) {...},
+ *       prototypeForTag: function(tag) {...},
+ *       discriminator: function(tag) {...},
+ *      }
+ *
+ * * getTag(obj) returns the dispatch tag, or `null`.
+ * * getUnknownTag(obj, tag) returns a tag when [getTag] fails.
+ * * prototypeForTag(tag) returns the prototype of the constructor for tag,
+ *   or `null` if not available or prepatching is undesirable.
+ * * discriminator(tag) returns a function TBD.
+ *
+ * The web site can adapt a dart2js application by loading code ahead of the
+ * dart2js application that defines hook transformers to be after the built in
+ * ones.  Code defining a transformer HT should use the following pattern to
+ * ensure multiple transformers can be composed:
+ *
+ *     (dartNativeDispatchHooksTransformer =
+ *      window.dartNativeDispatchHooksTransformer || []).push(HT);
+ *
+ *
+ * TODO: Implement and describe dispatch tags and their caching methods.
+ */
+void initHooks() {
+  // The initial simple hooks:
+  var hooks = JS('', '#()', _baseHooks);
+
+  // Customize for browsers where `object.constructor.name` fails:
+  var _fallbackConstructorHooksTransformer =
+      JS('', '#(#)', _fallbackConstructorHooksTransformerGenerator,
+          _constructorNameFallback);
+  hooks = applyHooksTransformer(_fallbackConstructorHooksTransformer, hooks);
+
+  // Customize for browsers:
+  hooks = applyHooksTransformer(_firefoxHooksTransformer, hooks);
+  hooks = applyHooksTransformer(_ieHooksTransformer, hooks);
+  hooks = applyHooksTransformer(_operaHooksTransformer, hooks);
+  hooks = applyHooksTransformer(_safariHooksTransformer, hooks);
+
+  hooks = applyHooksTransformer(_fixDocumentHooksTransformer, hooks);
+
+  // TODO(sra): Update ShadowDOM polyfil to use
+  // [dartNativeDispatchHooksTransformer] and remove this hook.
+  hooks = applyHooksTransformer(_dartExperimentalFixupGetTagHooksTransformer,
+      hooks);
+
+  // Apply global hooks.
+  //
+  // If defined, dartNativeDispatchHookdTransformer should be a single function
+  // of a JavaScript Array of functions.
+
+  if (JS('bool', 'typeof dartNativeDispatchHooksTransformer != "undefined"')) {
+    var transformers = JS('', 'dartNativeDispatchHooksTransformer');
+    if (JS('bool', 'typeof # == "function"', transformers)) {
+      transformers = [transformers];
+    }
+    if (JS('bool', '#.constructor == Array', transformers)) {
+      for (int i = 0; i < JS('int', '#.length', transformers); i++) {
+        var transformer = JS('', '#[#]', transformers, i);
+        if (JS('bool', 'typeof # == "function"', transformer)) {
+          hooks = applyHooksTransformer(transformer, hooks);
+        }
+      }
+    }
+  }
+
+  var getTag = JS('', '#.getTag', hooks);
+  var getUnknownTag = JS('', '#.getUnknownTag', hooks);
+  var prototypeForTag = JS('', '#.prototypeForTag', hooks);
+
+  getTagFunction = (o) => JS('String|Null', '#(#)', getTag, o);
+  alternateTagFunction =
+      (o, String tag) => JS('String|Null', '#(#, #)', getUnknownTag, o, tag);
+  prototypeForTagFunction =
+      (String tag) => JS('', '#(#)', prototypeForTag, tag);
+}
+
+applyHooksTransformer(transformer, hooks) {
+  var newHooks = JS('=Object|Null', '#(#)', transformer, hooks);
+  return JS('', '# || #', newHooks, hooks);
+}
+
+// JavaScript code fragments.
+//
+// This is a temporary place for the JavaScript code.
+//
+// TODO(sra): These code fragments are not minified.  They could be generated by
+// the code emitter, or JS_CONST could be improved to parse entire functions and
+// take care of the minification.
+
+const _baseHooks = const JS_CONST(r'''
+function() {
+  function typeNameInChrome(o) {
+    var name = o.constructor.name;
+    if (name) return name;
+    var s = Object.prototype.toString.call(o);
+    return s.substring(8, s.length - 1);
+  }
+  function getUnknownTag(object, tag) {
+    // This code really belongs in [getUnknownTagGenericBrowser] but having it
+    // here allows [getUnknownTag] to be tested on d8.
+    if (/^HTML[A-Z].*Element$/.test(tag)) {
+      // Check that it is not a simple JavaScript object.
+      var name = Object.prototype.toString.call(object);
+      if (name == "[object Object]") return null;
+      return "HTMLElement";
+    }
+  }
+  function getUnknownTagGenericBrowser(object, tag) {
+    if (self.HTMLElement && object instanceof HTMLElement) return "HTMLElement";
+    return getUnknownTag(object, tag);
+  }
+  function prototypeForTag(tag) {
+    if (typeof window == "undefined") return null;
+    if (typeof window[tag] == "undefined") return null;
+    var constructor = window[tag];
+    if (typeof constructor != "function") return null;
+    return constructor.prototype;
+  }
+  function discriminator(tag) { return null; }
+
+  var isBrowser = typeof navigator == "object";
+
+  return {
+    getTag: typeNameInChrome,
+    getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag,
+    prototypeForTag: prototypeForTag,
+    discriminator: discriminator };
+}''');
+
+
+/**
+ * Returns the name of the constructor function for browsers where
+ * `object.constructor.name` is not reliable.
+ *
+ * This function is split out of [_fallbackConstructorHooksTransformerGenerator]
+ * as it is called from both the dispatch hooks and via
+ * [constructorNameFallback] from objectToString.
+ */
+const _constructorNameFallback = const JS_CONST(r'''
+function getTagFallback(o) {
+  var constructor = o.constructor;
+  if (typeof constructor == "function") {
+    var name = constructor.name;
+    // If the name is a non-empty string, we use that as the type name of this
+    // object.  There are various cases where that does not work, so we have to
+    // detect them and fall through to the toString() based implementation.
+
+    if (typeof name == "string" &&
+
+        // Sometimes the string is empty.  This test also catches minified
+        // shadow dom polyfil wrapper for Window on Firefox where the faked
+        // constructor name does not 'stick'.  The shortest real DOM object
+        // names have three characters (e.g. URL, CSS).
+        name.length > 2 &&
+
+        // On Firefox we often get "Object" as the constructor name, even for
+        // more specialized DOM objects.
+        name !== "Object" &&
+
+        // This can happen in Opera.
+        name !== "Function.prototype") {
+      return name;
+    }
+  }
+  var s = Object.prototype.toString.call(o);
+  return s.substring(8, s.length - 1);
+}''');
+
+
+const _fallbackConstructorHooksTransformerGenerator = const JS_CONST(r'''
+function(getTagFallback) {
+  return function(hooks) {
+    // If we are not in a browser, assume we are in d8.
+    // TODO(sra): Recognize jsshell.
+    if (typeof navigator != "object") return hooks;
+
+    var ua = navigator.userAgent;
+    // TODO(antonm): remove a reference to DumpRenderTree.
+    if (ua.indexOf("DumpRenderTree") >= 0) return hooks;
+    if (ua.indexOf("Chrome") >= 0) {
+      // Confirm constructor name is usable for dispatch.
+      function confirm(p) {
+        return typeof window == "object" && window[p] && window[p].name == p;
+      }
+      if (confirm("Window") && confirm("HTMLElement")) return hooks;
+    }
+
+    hooks.getTag = getTagFallback;
+  };
+}''');
+
+
+const _ieHooksTransformer = const JS_CONST(r'''
+function(hooks) {
+  var userAgent = typeof navigator == "object" ? navigator.userAgent : "";
+  if (userAgent.indexOf("Trident/") == -1) return hooks;
+
+  var getTag = hooks.getTag;
+
+  var quickMap = {
+    "BeforeUnloadEvent": "Event",
+    "DataTransfer": "Clipboard",
+    "HTMLDDElement": "HTMLElement",
+    "HTMLDTElement": "HTMLElement",
+    "HTMLPhraseElement": "HTMLElement",
+    "Position": "Geoposition"
+  };
+
+  function getTagIE(o) {
+    var tag = getTag(o);
+    var newTag = quickMap[tag];
+    if (newTag) return newTag;
+    // Patches for types which report themselves as Objects.
+    if (tag == "Object") {
+      if (window.DataView && (o instanceof window.DataView)) return "DataView";
+    }
+    return tag;
+  }
+
+  function prototypeForTagIE(tag) {
+    var constructor = window[tag];
+    if (constructor == null) return null;
+    return constructor.prototype;
+  }
+
+  hooks.getTag = getTagIE;
+  hooks.prototypeForTag = prototypeForTagIE;
+}''');
+
+const _fixDocumentHooksTransformer = const JS_CONST(r'''
+function(hooks) {
+  var getTag = hooks.getTag;
+  var prototypeForTag = hooks.prototypeForTag;
+  function getTagFixed(o) {
+    var tag = getTag(o);
+    if (tag == "Document") {
+      // Some browsers and the polymer polyfill call both HTML and XML documents
+      // "Document", so we check for the xmlVersion property, which is the empty
+      // string on HTML documents. Since both dart:html classes Document and
+      // HtmlDocument share the same type, we must patch the instances and not
+      // the prototype.
+      if (!!o.xmlVersion) return "!Document";
+      return "!HTMLDocument";
+    }
+    return tag;
+  }
+
+  function prototypeForTagFixed(tag) {
+    if (tag == "Document") return null;  // Do not pre-patch Document.
+    return prototypeForTag(tag);
+  }
+
+  hooks.getTag = getTagFixed;
+  hooks.prototypeForTag = prototypeForTagFixed;
+}''');
+
+const _firefoxHooksTransformer = const JS_CONST(r'''
+function(hooks) {
+  var userAgent = typeof navigator == "object" ? navigator.userAgent : "";
+  if (userAgent.indexOf("Firefox") == -1) return hooks;
+
+  var getTag = hooks.getTag;
+
+  var quickMap = {
+    "BeforeUnloadEvent": "Event",
+    "DataTransfer": "Clipboard",
+    "GeoGeolocation": "Geolocation",
+    "Location": "!Location",               // Fixes issue 18151
+    "WorkerMessageEvent": "MessageEvent",
+    "XMLDocument": "!Document"};
+
+  function getTagFirefox(o) {
+    var tag = getTag(o);
+    return quickMap[tag] || tag;
+  }
+
+  hooks.getTag = getTagFirefox;
+}''');
+
+
+const _operaHooksTransformer = const JS_CONST(r'''
+function(hooks) { return hooks; }
+''');
+
+
+const _safariHooksTransformer = const JS_CONST(r'''
+function(hooks) { return hooks; }
+''');
+
+
+const _dartExperimentalFixupGetTagHooksTransformer = const JS_CONST(r'''
+function(hooks) {
+  if (typeof dartExperimentalFixupGetTag != "function") return hooks;
+  hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag);
+}''');
diff --git a/sdk/lib/_internal/lib/native_typed_data.dart b/sdk/lib/_internal/compiler/js_lib/native_typed_data.dart
similarity index 100%
rename from sdk/lib/_internal/lib/native_typed_data.dart
rename to sdk/lib/_internal/compiler/js_lib/native_typed_data.dart
diff --git a/sdk/lib/_internal/compiler/js_lib/preambles/README b/sdk/lib/_internal/compiler/js_lib/preambles/README
new file mode 100644
index 0000000..7eb614e
--- /dev/null
+++ b/sdk/lib/_internal/compiler/js_lib/preambles/README
@@ -0,0 +1,17 @@
+The files in this directory polyfill some of the functionality that browsers
+provide. When running command-line JS evaluators it is frequently necessary to
+execute the preambles before executing the output of dart2js.
+
+=Usage=
+- d8:
+    d8 <sdk>/lib/_internal/compiler/js_lib/preambles/d8.js <output>.js
+
+- jsshell:
+    jsshell -f <sdk>/lib/_internal/compiler/js_lib/preambles/d8.js -f <output>.js
+
+- node.js:
+  The d8 preamble file works for most programs.
+
+  Unfortunately we are not aware of any easy way to provide multiple input files
+  to node. It seems to be necessary to concatenate the d8 preamble and the
+  dart2js output.
diff --git a/sdk/lib/_internal/lib/preambles/d8.js b/sdk/lib/_internal/compiler/js_lib/preambles/d8.js
similarity index 100%
rename from sdk/lib/_internal/lib/preambles/d8.js
rename to sdk/lib/_internal/compiler/js_lib/preambles/d8.js
diff --git a/sdk/lib/_internal/lib/preambles/jsshell.js b/sdk/lib/_internal/compiler/js_lib/preambles/jsshell.js
similarity index 100%
rename from sdk/lib/_internal/lib/preambles/jsshell.js
rename to sdk/lib/_internal/compiler/js_lib/preambles/jsshell.js
diff --git a/sdk/lib/_internal/lib/regexp_helper.dart b/sdk/lib/_internal/compiler/js_lib/regexp_helper.dart
similarity index 100%
rename from sdk/lib/_internal/lib/regexp_helper.dart
rename to sdk/lib/_internal/compiler/js_lib/regexp_helper.dart
diff --git a/sdk/lib/_internal/compiler/js_lib/shared/embedded_names.dart b/sdk/lib/_internal/compiler/js_lib/shared/embedded_names.dart
new file mode 100644
index 0000000..ade914d4
--- /dev/null
+++ b/sdk/lib/_internal/compiler/js_lib/shared/embedded_names.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2014, 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.
+
+/// Contains the names of globals that are embedded into the output by the
+/// compiler.
+///
+/// Variables embedded this way should be access with `JS_EMBEDDED_GLOBAL` from
+/// the `_foreign_helper` library.
+///
+/// This library is shared between the compiler and the runtime system.
+library dart2js._embedded_names;
+
+const DISPATCH_PROPERTY_NAME = "dispatchPropertyName";
+const TYPE_INFORMATION = 'typeInformation';
+const GLOBAL_FUNCTIONS = 'globalFunctions';
+const STATICS = 'statics';
+const INTERCEPTED_NAMES = 'interceptedNames';
+const MANGLED_GLOBAL_NAMES = 'mangledGlobalNames';
+const MANGLED_NAMES = 'mangledNames';
+const LIBRARIES = 'libraries';
+const ALL_CLASSES = 'allClasses';
+const METADATA = 'metadata';
+const INTERCEPTORS_BY_TAG = 'interceptorsByTag';
+const LEAF_TAGS = 'leafTags';
+const LAZIES = 'lazies';
+const GET_ISOLATE_TAG = 'getIsolateTag';
+const ISOLATE_TAG = 'isolateTag';
+const CURRENT_SCRIPT = 'currentScript';
\ No newline at end of file
diff --git a/sdk/lib/_internal/compiler/implementation/runtime_data.dart b/sdk/lib/_internal/compiler/js_lib/shared/runtime_data.dart
similarity index 100%
rename from sdk/lib/_internal/compiler/implementation/runtime_data.dart
rename to sdk/lib/_internal/compiler/js_lib/shared/runtime_data.dart
diff --git a/sdk/lib/_internal/lib/string_helper.dart b/sdk/lib/_internal/compiler/js_lib/string_helper.dart
similarity index 100%
rename from sdk/lib/_internal/lib/string_helper.dart
rename to sdk/lib/_internal/compiler/js_lib/string_helper.dart
diff --git a/sdk/lib/_internal/lib/typed_data_patch.dart b/sdk/lib/_internal/compiler/js_lib/typed_data_patch.dart
similarity index 100%
rename from sdk/lib/_internal/lib/typed_data_patch.dart
rename to sdk/lib/_internal/compiler/js_lib/typed_data_patch.dart
diff --git a/sdk/lib/_internal/lib/async_patch.dart b/sdk/lib/_internal/lib/async_patch.dart
deleted file mode 100644
index 004f433..0000000
--- a/sdk/lib/_internal/lib/async_patch.dart
+++ /dev/null
@@ -1,116 +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.
-
-// Patch file for the dart:async library.
-
-import 'dart:_js_helper' show
-    patch,
-    Primitives,
-    convertDartClosureToJS,
-    loadDeferredLibrary,
-    requiresPreamble;
-import 'dart:_isolate_helper' show
-    IsolateNatives,
-    TimerImpl,
-    leaveJsAsync,
-    enterJsAsync,
-    isWorker;
-
-import 'dart:_foreign_helper' show JS;
-
-@patch
-class _AsyncRun {
-  @patch
-  static void _scheduleImmediate(void callback()) {
-    scheduleImmediateClosure(callback);
-  }
-
-  // Lazily initialized.
-  static final Function scheduleImmediateClosure =
-      _initializeScheduleImmediate();
-
-  static Function _initializeScheduleImmediate() {
-    requiresPreamble();
-    if (JS('', 'self.scheduleImmediate') != null) {
-      return _scheduleImmediateJsOverride;
-    }
-    if (JS('', 'self.MutationObserver') != null &&
-        JS('', 'self.document') != null) {
-      // Use mutationObservers.
-      var div = JS('', 'self.document.createElement("div")');
-      var span = JS('', 'self.document.createElement("span")');
-      var storedCallback;
-
-      internalCallback(_) {
-        leaveJsAsync();
-        var f = storedCallback;
-        storedCallback = null;
-        f();
-      };
-
-      var observer = JS('', 'new self.MutationObserver(#)',
-          convertDartClosureToJS(internalCallback, 1));
-      JS('', '#.observe(#, { childList: true })',
-          observer, div);
-
-      return (void callback()) {
-        assert(storedCallback == null);
-        enterJsAsync();
-        storedCallback = callback;
-        // Because of a broken shadow-dom polyfill we have to change the
-        // children instead a cheap property.
-        // See https://github.com/Polymer/ShadowDOM/issues/468
-        JS('', '#.firstChild ? #.removeChild(#): #.appendChild(#)',
-            div, div, span, div, span);
-      };
-
-    }
-    // TODO(9002): don't use the Timer to enqueue the immediate callback.
-    // Also check for other JS options like setImmediate.
-    // TODO(20055): We should use DOM promises when available.
-    return _scheduleImmediateWithTimer;
-  }
-
-  static void _scheduleImmediateJsOverride(void callback()) {
-    internalCallback() {
-      leaveJsAsync();
-      callback();
-    };
-    enterJsAsync();
-    JS('void', 'self.scheduleImmediate(#)',
-       convertDartClosureToJS(internalCallback, 0));
-  }
-
-  static void _scheduleImmediateWithTimer(void callback()) {
-    Timer._createTimer(Duration.ZERO, callback);
-  }
-}
-
-@patch
-class DeferredLibrary {
-  @patch
-  Future<Null> load() {
-    return loadDeferredLibrary(libraryName, uri);
-  }
-}
-
-@patch
-class Timer {
-  @patch
-  static Timer _createTimer(Duration duration, void callback()) {
-    int milliseconds = duration.inMilliseconds;
-    if (milliseconds < 0) milliseconds = 0;
-    return new TimerImpl(milliseconds, callback);
-  }
-
-  @patch
-  static Timer _createPeriodicTimer(Duration duration,
-                             void callback(Timer timer)) {
-    int milliseconds = duration.inMilliseconds;
-    if (milliseconds < 0) milliseconds = 0;
-    return new TimerImpl.periodic(milliseconds, callback);
-  }
-}
-
-bool get _hasDocument => JS('String', 'typeof document') == 'object';
diff --git a/sdk/lib/_internal/lib/foreign_helper.dart b/sdk/lib/_internal/lib/foreign_helper.dart
deleted file mode 100644
index febc75f..0000000
--- a/sdk/lib/_internal/lib/foreign_helper.dart
+++ /dev/null
@@ -1,290 +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.
-
-library _foreign_helper;
-
-/**
- * Emits a JavaScript code fragment parameterized by arguments.
- *
- * Hash characters `#` in the [codeTemplate] are replaced in left-to-right order
- * with expressions that contain the values of, or evaluate to, the arguments.
- * The number of hash marks must match the number or arguments.  Although
- * declared with arguments [arg0] through [arg2], the form actually has no limit
- * on the number of arguments.
- *
- * The [typeDescription] argument is interpreted as a description of the
- * behavior of the JavaScript code.  Currently it describes the types that may
- * be returned by the expression, with the additional behavior that the returned
- * values may be fresh instances of the types.  The type information must be
- * correct as it is trusted by the compiler in optimizations, and it must be
- * precise as possible since it is used for native live type analysis to
- * tree-shake large parts of the DOM libraries.  If poorly written, the
- * [typeDescription] will cause unnecessarily bloated programs.  (You can check
- * for this by compiling with `--verbose`; there is an info message describing
- * the number of native (DOM) types that can be removed, which usually should be
- * greater than zero.)
- *
- * The [typeDescription] is a [String] which contains a union of types separated
- * by vertical bar `|` symbols, e.g.  `"num|String"` describes the union of
- * numbers and Strings.  There is no type in Dart that is this precise.  The
- * Dart alternative would be `Object` or `dynamic`, but these types imply that
- * the JS-code might also be creating instances of all the DOM types.  If `null`
- * is possible, it must be specified explicitly, e.g. `"String|Null"`.
- * [typeDescription] has several extensions to help describe the behavior more
- * accurately.  In addition to the union type already described:
- *
- *  + `=Object` is a plain JavaScript object.  Some DOM methods return instances
- *     that have no corresponing Dart type (e.g. cross-frame documents),
- *     `=Object` can be used to describe these untyped' values.
- *
- *  + `var` (or empty string).  If the entire [typeDescription] is `var` (or
- *    empty string) then the type is `dynamic` but the code is known to not
- *    create any instances.
- *
- * Examples:
- *
- *     // Parent window might be an opaque cross-frame window.
- *     var thing = JS('=Object|Window', '#.parent', myWindow);
- *
- * Guidelines:
- *
- *  + Do not use any parameter, local, method or field names in the
- *    [codeTemplate].  These names are all subject to arbitrary renaming by the
- *    compiler.  Pass the values in via `#` substition, and test with the
- *    `--minify` dart2js command-line option.
- *
- *  + The substituted expressions are values, not locations.
- *
- *        JS('void', '# += "x"', this.field);
- *
- *    `this.field` might not be a substituted as a reference to the field.  The
- *    generated code might accidentally work as intended, but it also might be
- *
- *        var t1 = this.field;
- *        t1 += "x";
- *
- *    or
- *
- *        this.get$field() += "x";
- *
- *    The remedy in this case is to expand the `+=` operator, leaving all
- *    references to the Dart field as Dart code:
- *
- *        this.field = JS('String', '# + "x"', this.field);
- *
- *  + Never use `#` in function bodies.
- *
- *    This is a variation on the previous guideline.  Since `#` is replaced with
- *    an *expression* and the expression is only valid in the immediate context,
- *    `#` should never appear in a function body.  Doing so might defer the
- *    evaluation of the expression, and its side effects, until the function is
- *    called.
- *
- *    For example,
- *
- *        var value = foo();
- *        var f = JS('', 'function(){return #}', value)
- *
- *    might result in no immediate call to `foo` and a call to `foo` on every
- *    call to the JavaScript function bound to `f`.  This is better:
- *
- *        var f = JS('',
- *            '(function(val) { return function(){return val}; })(#)', value);
- *
- *    Since `#` occurs in the immediately evaluated expression, the expression
- *    is immediately evaluated and bound to `val` in the immediate call.
- *
- *
- * Additional notes.
- *
- * In the future we may extend [typeDescription] to include other aspects of the
- * behavior, for example, separating the returned types from the instantiated
- * types, or including effects to allow the compiler to perform more
- * optimizations around the code.  This might be an extension of [JS] or a new
- * function similar to [JS] with additional arguments for the new information.
- */
-// Add additional optional arguments if needed. The method is treated internally
-// as a variable argument method.
-JS(String typeDescription, String codeTemplate,
-    [arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11])
-{}
-
-/**
- * Returns the isolate in which this code is running.
- */
-IsolateContext JS_CURRENT_ISOLATE_CONTEXT() {}
-
-abstract class IsolateContext {
-  /// Holds a (native) JavaScript instance of Isolate, see
-  /// finishIsolateConstructorFunction in emitter.dart.
-  get isolateStatics;
-}
-
-/**
- * Invokes [function] in the context of [isolate].
- */
-JS_CALL_IN_ISOLATE(isolate, Function function) {}
-
-/**
- * Converts the Dart closure [function] into a JavaScript closure.
- *
- * Warning: This is no different from [RAW_DART_FUNCTION_REF] which means care
- * must be taken to store the current isolate.
- */
-DART_CLOSURE_TO_JS(Function function) {}
-
-/**
- * Returns a raw reference to the JavaScript function which implements
- * [function].
- *
- * Warning: this is dangerous, you should probably use
- * [DART_CLOSURE_TO_JS] instead. The returned object is not a valid
- * Dart closure, does not store the isolate context or arity.
- *
- * A valid example of where this can be used is as the second argument
- * to V8's Error.captureStackTrace. See
- * https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi.
- */
-RAW_DART_FUNCTION_REF(Function function) {}
-
-/**
- * Sets the current isolate to [isolate].
- */
-void JS_SET_CURRENT_ISOLATE(isolate) {}
-
-/**
- * Creates an isolate and returns it.
- */
-JS_CREATE_ISOLATE() {}
-
-/**
- * Returns the JavaScript constructor function for Dart's Object class.
- * This can be used for type tests, as in
- *
- *     if (JS('bool', '# instanceof #', obj, JS_DART_OBJECT_CONSTRUCTOR()))
- *       ...
- */
-JS_DART_OBJECT_CONSTRUCTOR() {}
-
-/**
- * Returns the interceptor for class [type].  The interceptor is the type's
- * constructor's `prototype` property.  [type] will typically be the class, not
- * an interface, e.g. `JS_INTERCEPTOR_CONSTANT(JSInt)`, not
- * `JS_INTERCEPTOR_CONSTANT(int)`.
- */
-JS_INTERCEPTOR_CONSTANT(Type type) {}
-
-/**
- * Returns the prefix used for generated is checks on classes.
- */
-String JS_OPERATOR_IS_PREFIX() {}
-
-/**
- * Returns the prefix used for generated type argument substitutions on classes.
- */
-String JS_OPERATOR_AS_PREFIX() {}
-
-/// Returns the name of the class `Object` in the generated code.
-String JS_OBJECT_CLASS_NAME() {}
-
-/// Returns the name of the class `Null` in the generated code.
-String JS_NULL_CLASS_NAME() {}
-
-/// Returns the name of the class `Function` in the generated code.
-String JS_FUNCTION_CLASS_NAME() {}
-
-/**
- * Returns the field name used for determining if an object or its
- * interceptor has JavaScript indexing behavior.
- */
-String JS_IS_INDEXABLE_FIELD_NAME() {}
-
-/**
- * Returns the object corresponding to Namer.CURRENT_ISOLATE.
- */
-JS_CURRENT_ISOLATE() {}
-
-/// Returns the name used for generated function types on classes and methods.
-String JS_SIGNATURE_NAME() {}
-
-/// Returns the name used to tag function type representations in JavaScript.
-String JS_FUNCTION_TYPE_TAG() {}
-
-/**
- * Returns the name used to tag void return in function type representations
- * in JavaScript.
- */
-String JS_FUNCTION_TYPE_VOID_RETURN_TAG() {}
-
-/**
- * Returns the name used to tag return types in function type representations
- * in JavaScript.
- */
-String JS_FUNCTION_TYPE_RETURN_TYPE_TAG() {}
-
-/**
- * Returns the name used to tag required parameters in function type
- * representations in JavaScript.
- */
-String JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG() {}
-
-/**
- * Returns the name used to tag optional parameters in function type
- * representations in JavaScript.
- */
-String JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG() {}
-
-/**
- * Returns the name used to tag named parameters in function type
- * representations in JavaScript.
- */
-String JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG() {}
-
-/**
- * Obtain [name] from Namer.
- */
-String JS_GET_NAME(String name) {}
-
-/// Returns the state of a flag that is determined by the state of the compiler
-/// when the program has been analyzed.
-bool JS_GET_FLAG(String name) {}
-
-/**
- * Pretend [code] is executed.  Generates no executable code.  This is used to
- * model effects at some other point in external code.  For example, the
- * following models an assignment to foo with an unknown value.
- *
- *     var foo;
- *
- *     main() {
- *       JS_EFFECT((_){ foo = _; })
- *     }
- *
- * TODO(sra): Replace this hack with something to mark the volatile or
- * externally initialized elements.
- */
-void JS_EFFECT(Function code) { code(null); }
-
-/**
- * Use this class for creating constants that hold JavaScript code.
- * For example:
- *
- * const constant = JS_CONST('typeof window != "undefined");
- *
- * This code will generate:
- * $.JS_CONST_1 = typeof window != "undefined";
- */
-class JS_CONST {
-  final String code;
-  const JS_CONST(this.code);
-}
-
-/**
- * JavaScript string concatenation. Inputs must be Strings.  Corresponds to the
- * HStringConcat SSA instruction and may be constant-folded.
- */
-String JS_STRING_CONCAT(String a, String b) {
-  // This body is unused, only here for type analysis.
-  return JS('String', '# + #', a, b);
-}
diff --git a/sdk/lib/_internal/lib/interceptors.dart b/sdk/lib/_internal/lib/interceptors.dart
deleted file mode 100644
index 32355ae..0000000
--- a/sdk/lib/_internal/lib/interceptors.dart
+++ /dev/null
@@ -1,402 +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.
-
-library _interceptors;
-
-import 'dart:collection';
-import 'dart:_internal' hide Symbol;
-import "dart:_internal" as _symbol_dev show Symbol;
-import 'dart:_js_helper' show allMatchesInStringUnchecked,
-                              Null,
-                              JSSyntaxRegExp,
-                              Primitives,
-                              checkInt,
-                              checkNull,
-                              checkNum,
-                              checkString,
-                              defineProperty,
-                              getRuntimeType,
-                              initNativeDispatch,
-                              initNativeDispatchFlag,
-                              regExpGetNative,
-                              stringContainsUnchecked,
-                              stringLastIndexOfUnchecked,
-                              stringReplaceAllFuncUnchecked,
-                              stringReplaceAllUnchecked,
-                              stringReplaceFirstUnchecked,
-                              lookupAndCacheInterceptor,
-                              lookupDispatchRecord,
-                              StringMatch,
-                              firstMatchAfter,
-                              NoInline;
-import 'dart:_foreign_helper' show
-    JS, JS_EFFECT, JS_INTERCEPTOR_CONSTANT, JS_STRING_CONCAT;
-import 'dart:math' show Random;
-
-part 'js_array.dart';
-part 'js_number.dart';
-part 'js_string.dart';
-
-String _symbolToString(Symbol symbol) => _symbol_dev.Symbol.getName(symbol);
-
-_symbolMapToStringMap(Map<Symbol, dynamic> map) {
-  if (map == null) return null;
-  var result = new Map<String, dynamic>();
-  map.forEach((Symbol key, value) {
-    result[_symbolToString(key)] = value;
-  });
-  return result;
-}
-
-/**
- * Get the interceptor for [object]. Called by the compiler when it needs
- * to emit a call to an intercepted method, that is a method that is
- * defined in an interceptor class.
- */
-getInterceptor(object) {
-  // This is a magic method: the compiler does specialization of it
-  // depending on the uses of intercepted methods and instantiated
-  // primitive types.
-
-  // The [JS] call prevents the type analyzer from making assumptions about the
-  // return type.
-  return JS('', 'void 0');
-}
-
-getDispatchProperty(object) {
-  return JS('', '#[#]', object, JS('String', 'init.dispatchPropertyName'));
-}
-
-setDispatchProperty(object, value) {
-  defineProperty(object, JS('String', 'init.dispatchPropertyName'), value);
-}
-
-makeDispatchRecord(interceptor, proto, extension, indexability) {
-  // Dispatch records are stored in the prototype chain, and in some cases, on
-  // instances.
-  //
-  // The record layout and field usage is designed to minimize the number of
-  // operations on the common paths.
-  //
-  // [interceptor] is the interceptor - a holder of methods for the object,
-  // i.e. the prototype of the interceptor class.
-  //
-  // [proto] is usually the prototype, used to check that the dispatch record
-  // matches the object and is not the dispatch record of a superclass.  Other
-  // values:
-  //  - `false` for leaf classes that need no check.
-  //  - `true` for Dart classes where the object is its own interceptor (unused)
-  //  - a function used to continue matching.
-  //
-  // [extension] is used for irregular cases.
-  //
-  // [indexability] is used to cache whether or not the object
-  // implements JavaScriptIndexingBehavior.
-  //
-  //     proto  interceptor extension action
-  //     -----  ----------- --------- ------
-  //     false  I                     use interceptor I
-  //     true   -                     use object
-  //     P      I                     if object's prototype is P, use I
-  //     F      -           P         if object's prototype is P, call F
-
-  // BUG(10903): Remove this hack. It is needed to avoid inlining this
-  // method because inlining gives us multiple allocation points for
-  // records which is bad because it leads to polymorphic access.
-  if (false) return null;
-  return JS('', '{i: #, p: #, e: #, x: #}',
-            interceptor, proto, extension, indexability);
-}
-
-dispatchRecordInterceptor(record) => JS('', '#.i', record);
-dispatchRecordProto(record) => JS('', '#.p', record);
-dispatchRecordExtension(record) => JS('', '#.e', record);
-dispatchRecordIndexability(record) => JS('bool|Null', '#.x', record);
-
-/**
- * Returns the interceptor for a native class instance. Used by
- * [getInterceptor].
- */
-getNativeInterceptor(object) {
-  var record = getDispatchProperty(object);
-
-  if (record == null) {
-    if (initNativeDispatchFlag == null) {
-      initNativeDispatch();
-      record = getDispatchProperty(object);
-    }
-  }
-
-  if (record != null) {
-    var proto = dispatchRecordProto(record);
-    if (false == proto) return dispatchRecordInterceptor(record);
-    if (true == proto) return object;
-    var objectProto = JS('', 'Object.getPrototypeOf(#)', object);
-    if (JS('bool', '# === #', proto, objectProto)) {
-      return dispatchRecordInterceptor(record);
-    }
-
-    var extension = dispatchRecordExtension(record);
-    if (JS('bool', '# === #', extension, objectProto)) {
-      // TODO(sra): The discriminator returns a tag.  The tag is an uncached or
-      // instance-cached tag, defaulting to instance-cached if caching
-      // unspecified.
-      var discriminatedTag = JS('', '(#)(#, #)', proto, object, record);
-      throw new UnimplementedError('Return interceptor for $discriminatedTag');
-    }
-  }
-
-  var interceptor = lookupAndCacheInterceptor(object);
-  if (interceptor == null) {
-    // JavaScript Objects created via object literals and `Object.create(null)`
-    // are 'plain' Objects.  This test could be simplified and the dispatch path
-    // be faster if Object.prototype was pre-patched with a non-leaf dispatch
-    // record.
-    var proto = JS('', 'Object.getPrototypeOf(#)', object);
-    if (JS('bool', '# == null || # === Object.prototype', proto, proto)) {
-      return JS_INTERCEPTOR_CONSTANT(PlainJavaScriptObject);
-    } else {
-      return JS_INTERCEPTOR_CONSTANT(UnknownJavaScriptObject);
-    }
-  }
-
-  return interceptor;
-}
-
-/**
- * If [JSInvocationMirror._invokeOn] is being used, this variable
- * contains a JavaScript array with the names of methods that are
- * intercepted.
- */
-var interceptedNames;
-
-
-/**
- * Data structure used to map a [Type] to the [Interceptor] and constructors for
- * that type.  It is JavaScript array of 3N entries of adjacent slots containing
- * a [Type], followed by an [Interceptor] class for the type, followed by a
- * JavaScript object map for the constructors.
- *
- * The value of this variable is set by the compiler and contains only types
- * that are user extensions of native classes where the type occurs as a
- * constant in the program.
- *
- * The compiler, in CustomElementsAnalysis, assumes that [mapTypeToInterceptor]
- * is accessed only by code that also calls [findIndexForWebComponentType].  If
- * this assumption is invalidated, the compiler will have to be updated.
- */
-// TODO(sra): Mark this as initialized to a constant with unknown value.
-var mapTypeToInterceptor;
-
-int findIndexForNativeSubclassType(Type type) {
-  if (JS('bool', '# == null', mapTypeToInterceptor)) return null;
-  List map = JS('JSFixedArray', '#', mapTypeToInterceptor);
-  for (int i = 0; i + 1 < map.length; i += 3) {
-    if (type == map[i]) {
-      return i;
-    }
-  }
-  return null;
-}
-
-findInterceptorConstructorForType(Type type) {
-  var index = findIndexForNativeSubclassType(type);
-  if (index == null) return null;
-  List map = JS('JSFixedArray', '#', mapTypeToInterceptor);
-  return map[index + 1];
-}
-
-/**
- * Returns a JavaScript function that runs the constructor on its argument, or
- * `null` if there is no such constructor.
- *
- * The returned function takes one argument, the web component object.
- */
-findConstructorForNativeSubclassType(Type type, String name) {
-  var index = findIndexForNativeSubclassType(type);
-  if (index == null) return null;
-  List map = JS('JSFixedArray', '#', mapTypeToInterceptor);
-  var constructorMap = map[index + 2];
-  var constructorFn = JS('', '#[#]', constructorMap, name);
-  return constructorFn;
-}
-
-findInterceptorForType(Type type) {
-  var constructor = findInterceptorConstructorForType(type);
-  if (constructor == null) return null;
-  return JS('', '#.prototype', constructor);
-}
-
-/**
- * The base interceptor class.
- *
- * The code `r.foo(a)` is compiled to `getInterceptor(r).foo$1(r, a)`.  The
- * value returned by [getInterceptor] holds the methods separately from the
- * state of the instance.  The compiler converts the methods on an interceptor
- * to take the Dart `this` argument as an explicit `receiver` argument.  The
- * JavaScript `this` parameter is bound to the interceptor.
- *
- * In order to have uniform call sites, if a method is defined on an
- * interceptor, methods of that name on plain unintercepted classes also use the
- * interceptor calling convention.  The plain classes are _self-interceptors_,
- * and for them, `getInterceptor(r)` returns `r`.  Methods on plain
- * unintercepted classes have a redundant `receiver` argument and should ignore
- * it in favour of `this`.
- *
- * In the case of mixins, a method may be placed on both an intercepted class
- * and an unintercepted class.  In this case, the method must use the `receiver`
- * parameter.
- *
- *
- * There are various optimizations of the general call pattern.
- *
- * When the interceptor can be statically determined, it can be used directly:
- *
- *     CONSTANT_INTERCEPTOR.foo$1(r, a)
- *
- * If there are only a few classes, [getInterceptor] can be specialized with a
- * more efficient dispatch:
- *
- *     getInterceptor$specialized(r).foo$1(r, a)
- *
- * If it can be determined that the receiver is an unintercepted class, it can
- * be called directly:
- *
- *     r.foo$1(r, a)
- *
- * If, further, it is known that the call site cannot call a foo that is
- * mixed-in to a native class, then it is known that the explicit receiver is
- * ignored, and space-saving dummy value can be passed instead:
- *
- *     r.foo$1(0, a)
- *
- * This class defines implementations of *all* methods on [Object] so no
- * interceptor inherits an implementation from [Object].  This enables the
- * implementations on Object to ignore the explicit receiver argument, which
- * allows dummy receiver optimization.
- */
-abstract class Interceptor {
-  const Interceptor();
-
-  bool operator ==(other) => identical(this, other);
-
-  int get hashCode => Primitives.objectHashCode(this);
-
-  String toString() => Primitives.objectToString(this);
-
-  dynamic noSuchMethod(Invocation invocation) {
-    throw new NoSuchMethodError(
-        this,
-        invocation.memberName,
-        invocation.positionalArguments,
-        invocation.namedArguments);
-  }
-
-  Type get runtimeType => getRuntimeType(this);
-}
-
-/**
- * The interceptor class for [bool].
- */
-class JSBool extends Interceptor implements bool {
-  const JSBool();
-
-  // Note: if you change this, also change the function [S].
-  String toString() => JS('String', r'String(#)', this);
-
-  // The values here are SMIs, co-prime and differ about half of the bit
-  // positions, including the low bit, so they are different mod 2^k.
-  int get hashCode => this ? (2 * 3 * 23 * 3761) : (269 * 811);
-
-  Type get runtimeType => bool;
-}
-
-/**
- * The interceptor class for [Null].
- *
- * This class defines implementations for *all* methods on [Object] since
- * the methods on Object assume the receiver is non-null.  This means that
- * JSNull will always be in the interceptor set for methods defined on Object.
- */
-class JSNull extends Interceptor implements Null {
-  const JSNull();
-
-  bool operator ==(other) => identical(null, other);
-
-  // Note: if you change this, also change the function [S].
-  String toString() => 'null';
-
-  int get hashCode => 0;
-
-  // The spec guarantees that `null` is the singleton instance of the `Null`
-  // class. In the mirrors library we also have to patch the `type` getter to
-  // special case `null`.
-  Type get runtimeType => Null;
-
-  dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-/**
- * The supertype for JSString and JSArray. Used by the backend as to
- * have a type mask that contains the objects that we can use the
- * native JS [] operator and length on.
- */
-abstract class JSIndexable {
-  int get length;
-  operator[](int index);
-}
-
-/**
- * The supertype for JSMutableArray and
- * JavaScriptIndexingBehavior. Used by the backend to have a type mask
- * that contains the objects we can use the JS []= operator on.
- */
-abstract class JSMutableIndexable extends JSIndexable {
-  operator[]=(int index, var value);
-}
-
-/**
- * The interface implemented by JavaScript objects.  These are methods in
- * addition to the regular Dart Object methods like [Object.hashCode].
- *
- * This is the type that should be exported by a JavaScript interop library.
- */
-abstract class JSObject {
-}
-
-
-/**
- * Interceptor base class for JavaScript objects not recognized as some more
- * specific native type.
- */
-abstract class JavaScriptObject extends Interceptor implements JSObject {
-  const JavaScriptObject();
-
-  // It would be impolite to stash a property on the object.
-  int get hashCode => 0;
-
-  Type get runtimeType => JSObject;
-}
-
-
-/**
- * Interceptor for plain JavaScript objects created as JavaScript object
- * literals or `new Object()`.
- */
-class PlainJavaScriptObject extends JavaScriptObject {
-  const PlainJavaScriptObject();
-}
-
-
-/**
- * Interceptor for unclassified JavaScript objects, typically objects with a
- * non-trivial prototype chain.
- *
- * This class also serves as a fallback for unknown JavaScript exceptions.
- */
-class UnknownJavaScriptObject extends JavaScriptObject {
-  const UnknownJavaScriptObject();
-
-  String toString() => JS('String', 'String(#)', this);
-}
diff --git a/sdk/lib/_internal/lib/isolate_helper.dart b/sdk/lib/_internal/lib/isolate_helper.dart
deleted file mode 100644
index 093093e..0000000
--- a/sdk/lib/_internal/lib/isolate_helper.dart
+++ /dev/null
@@ -1,1816 +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.
-
-library _isolate_helper;
-
-import 'dart:async';
-import 'dart:collection' show Queue, HashMap;
-import 'dart:isolate';
-import 'dart:_js_helper' show
-    Closure,
-    Null,
-    Primitives,
-    convertDartClosureToJS,
-    random64,
-    requiresPreamble;
-import 'dart:_foreign_helper' show DART_CLOSURE_TO_JS,
-                                   JS,
-                                   JS_CREATE_ISOLATE,
-                                   JS_CURRENT_ISOLATE_CONTEXT,
-                                   JS_CURRENT_ISOLATE,
-                                   JS_SET_CURRENT_ISOLATE,
-                                   IsolateContext;
-import 'dart:_interceptors' show JSExtendableArray;
-
-/**
- * Called by the compiler to support switching
- * between isolates when we get a callback from the DOM.
- */
-_callInIsolate(_IsolateContext isolate, Function function) {
-  var result = isolate.eval(function);
-  _globalState.topEventLoop.run();
-  return result;
-}
-
-/// Marks entering a JavaScript async operation to keep the worker alive.
-///
-/// To be called by library code before starting an async operation controlled
-/// by the JavaScript event handler.
-///
-/// Also call [leaveJsAsync] in all callback handlers marking the end of that
-/// async operation (also error handlers) so the worker can be released.
-///
-/// These functions only has to be called for code that can be run from a
-/// worker-isolate (so not for general dom operations).
-enterJsAsync() {
-  _globalState.topEventLoop._activeJsAsyncCount++;
-}
-
-/// Marks leaving a javascript async operation.
-///
-/// See [enterJsAsync].
-leaveJsAsync() {
-  _globalState.topEventLoop._activeJsAsyncCount--;
-  assert(_globalState.topEventLoop._activeJsAsyncCount >= 0);
-}
-
-/// Returns true if we are currently in a worker context.
-bool isWorker() => _globalState.isWorker;
-
-/**
- * Called by the compiler to fetch the current isolate context.
- */
-_IsolateContext _currentIsolate() => _globalState.currentContext;
-
-/**
- * Wrapper that takes the dart entry point and runs it within an isolate. The
- * dart2js compiler will inject a call of the form
- * [: startRootIsolate(main); :] when it determines that this wrapping
- * is needed. For single-isolate applications (e.g. hello world), this
- * call is not emitted.
- */
-void startRootIsolate(entry, args) {
-  // The dartMainRunner can inject a new arguments array. We pass the arguments
-  // through a "JS", so that the type-inferrer loses track of it.
-  args = JS("", "#", args);
-  if (args == null) args = [];
-  if (args is! List) {
-    throw new ArgumentError("Arguments to main must be a List: $args");
-  }
-  _globalState = new _Manager(entry);
-
-  // Don't start the main loop again, if we are in a worker.
-  if (_globalState.isWorker) return;
-  final rootContext = new _IsolateContext();
-  _globalState.rootContext = rootContext;
-
-  // BUG(5151491): Setting currentContext should not be necessary, but
-  // because closures passed to the DOM as event handlers do not bind their
-  // isolate automatically we try to give them a reasonable context to live in
-  // by having a "default" isolate (the first one created).
-  _globalState.currentContext = rootContext;
-  if (entry is _MainFunctionArgs) {
-    rootContext.eval(() { entry(args); });
-  } else if (entry is _MainFunctionArgsMessage) {
-    rootContext.eval(() { entry(args, null); });
-  } else {
-    rootContext.eval(entry);
-  }
-  _globalState.topEventLoop.run();
-}
-
-/********************************************************
-  Inserted from lib/isolate/dart2js/isolateimpl.dart
- ********************************************************/
-
-/**
- * Concepts used here:
- *
- * "manager" - A manager contains one or more isolates, schedules their
- * execution, and performs other plumbing on their behalf.  The isolate
- * present at the creation of the manager is designated as its "root isolate".
- * A manager may, for example, be implemented on a web Worker.
- *
- * [_Manager] - State present within a manager (exactly once, as a global).
- *
- * [_ManagerStub] - A handle held within one manager that allows interaction
- * with another manager.  A target manager may be addressed by zero or more
- * [_ManagerStub]s.
- * TODO(ahe): The _ManagerStub concept is broken.  It was an attempt
- * to create a common interface between the native Worker class and
- * _MainManagerStub.
- */
-
-/**
- * A native object that is shared across isolates. This object is visible to all
- * isolates running under the same manager (either UI or background web worker).
- *
- * This is code that is intended to 'escape' the isolate boundaries in order to
- * implement the semantics of isolates in JavaScript. Without this we would have
- * been forced to implement more code (including the top-level event loop) in
- * JavaScript itself.
- */
-// TODO(eub, sigmund): move the "manager" to be entirely in JS.
-// Running any Dart code outside the context of an isolate gives it
-// the chance to break the isolate abstraction.
-_Manager get _globalState => JS("_Manager", "init.globalState");
-
-set _globalState(_Manager val) {
-  JS("void", "init.globalState = #", val);
-}
-
-/** State associated with the current manager. See [globalState]. */
-// TODO(sigmund): split in multiple classes: global, thread, main-worker states?
-class _Manager {
-
-  /** Next available isolate id within this [_Manager]. */
-  int nextIsolateId = 0;
-
-  /** id assigned to this [_Manager]. */
-  int currentManagerId = 0;
-
-  /**
-   * Next available manager id. Only used by the main manager to assign a unique
-   * id to each manager created by it.
-   */
-  int nextManagerId = 1;
-
-  /** Context for the currently running [Isolate]. */
-  _IsolateContext currentContext = null;
-
-  /** Context for the root [Isolate] that first run in this [_Manager]. */
-  _IsolateContext rootContext = null;
-
-  /** The top-level event loop. */
-  _EventLoop topEventLoop;
-
-  /** Whether this program is running from the command line. */
-  bool fromCommandLine;
-
-  /** Whether this [_Manager] is running as a web worker. */
-  bool isWorker;
-
-  /** Whether we support spawning web workers. */
-  bool supportsWorkers;
-
-  /**
-   * Whether to use web workers when implementing isolates. Set to false for
-   * debugging/testing.
-   */
-  bool get useWorkers => supportsWorkers;
-
-  /**
-   * Whether to use the web-worker JSON-based message serialization protocol. By
-   * default this is only used with web workers. For debugging, you can force
-   * using this protocol by changing this field value to [:true:].
-   */
-  bool get needSerialization => useWorkers;
-
-  /**
-   * Registry of isolates. Isolates must be registered if, and only if, receive
-   * ports are alive.  Normally no open receive-ports means that the isolate is
-   * dead, but DOM callbacks could resurrect it.
-   */
-  Map<int, _IsolateContext> isolates;
-
-  /** Reference to the main [_Manager].  Null in the main [_Manager] itself. */
-  _MainManagerStub mainManager;
-
-  /// Registry of active Web Workers.  Only used in the main [_Manager].
-  Map<int, dynamic /* Worker */> managers;
-
-  /** The entry point given by [startRootIsolate]. */
-  final Function entry;
-
-  _Manager(this.entry) {
-    _nativeDetectEnvironment();
-    topEventLoop = new _EventLoop();
-    isolates = new Map<int, _IsolateContext>();
-    managers = new Map<int, dynamic>();
-    if (isWorker) {  // "if we are not the main manager ourself" is the intent.
-      mainManager = new _MainManagerStub();
-      _nativeInitWorkerMessageHandler();
-    }
-  }
-
-  void _nativeDetectEnvironment() {
-    bool isWindowDefined = globalWindow != null;
-    bool isWorkerDefined = globalWorker != null;
-
-    isWorker = !isWindowDefined && globalPostMessageDefined;
-    supportsWorkers = isWorker
-       || (isWorkerDefined && IsolateNatives.thisScript != null);
-    fromCommandLine = !isWindowDefined && !isWorker;
-  }
-
-  void _nativeInitWorkerMessageHandler() {
-    var function = JS('',
-        "(function (f, a) { return function (e) { f(a, e); }})(#, #)",
-        DART_CLOSURE_TO_JS(IsolateNatives._processWorkerMessage),
-        mainManager);
-    JS("void", r"self.onmessage = #", function);
-    // We ensure dartPrint is defined so that the implementation of the Dart
-    // print method knows what to call.
-    JS('', '''self.dartPrint = self.dartPrint || (function(serialize) {
-  return function (object) {
-    if (self.console && self.console.log) {
-      self.console.log(object)
-    } else {
-      self.postMessage(serialize(object));
-    }
-  }
-})(#)''', DART_CLOSURE_TO_JS(_serializePrintMessage));
-  }
-
-  static _serializePrintMessage(object) {
-    return _serializeMessage({"command": "print", "msg": object});
-  }
-
-  /**
-   * Close the worker running this code if all isolates are done and
-   * there are no active async JavaScript tasks still running.
-   */
-  void maybeCloseWorker() {
-    if (isWorker
-        && isolates.isEmpty
-        && topEventLoop._activeJsAsyncCount == 0) {
-      mainManager.postMessage(_serializeMessage({'command': 'close'}));
-    }
-  }
-}
-
-/** Context information tracked for each isolate. */
-class _IsolateContext implements IsolateContext {
-  /** Current isolate id. */
-  final int id = _globalState.nextIsolateId++;
-
-  /** Registry of receive ports currently active on this isolate. */
-  final Map<int, RawReceivePortImpl> ports = new Map<int, RawReceivePortImpl>();
-
-  /** Registry of weak receive ports currently active on this isolate. */
-  final Set<int> weakPorts = new Set<int>();
-
-  /** Holds isolate globals (statics and top-level properties). */
-  // native object containing all globals of an isolate.
-  final isolateStatics = JS_CREATE_ISOLATE();
-
-  final RawReceivePortImpl controlPort = new RawReceivePortImpl._controlPort();
-
-  final Capability pauseCapability = new Capability();
-  final Capability terminateCapability = new Capability();  // License to kill.
-
-  /// Boolean flag set when the initial method of the isolate has been executed.
-  ///
-  /// Used to avoid considering the isolate dead when it has no open
-  /// receive ports and no scheduled timers, because it hasn't had time to
-  /// create them yet.
-  bool initialized = false;
-
-  // TODO(lrn): Store these in single "PauseState" object, so they don't take
-  // up as much room when not pausing.
-  bool isPaused = false;
-  List<_IsolateEvent> delayedEvents = [];
-  Set<Capability> pauseTokens = new Set();
-
-  // Container with the "on exit" handler send-ports.
-  var doneHandlers;
-
-  /**
-   * Queue of functions to call when the current event is complete.
-   *
-   * These events are not just put at the front of the event queue, because
-   * they represent control messages, and should be handled even if the
-   * event queue is paused.
-   */
-  var _scheduledControlEvents;
-  bool _isExecutingEvent = false;
-
-  /** Whether uncaught errors are considered fatal. */
-  bool errorsAreFatal = true;
-
-  // Set of ports that listen to uncaught errors.
-  Set<SendPort> errorPorts = new Set();
-
-  _IsolateContext() {
-    this.registerWeak(controlPort._id, controlPort);
-  }
-
-  void addPause(Capability authentification, Capability resume) {
-    if (pauseCapability != authentification) return;
-    if (pauseTokens.add(resume) && !isPaused) {
-      isPaused = true;
-    }
-    _updateGlobalState();
-  }
-
-  void removePause(Capability resume) {
-    if (!isPaused) return;
-    pauseTokens.remove(resume);
-    if (pauseTokens.isEmpty) {
-      while(delayedEvents.isNotEmpty) {
-        _IsolateEvent event = delayedEvents.removeLast();
-        _globalState.topEventLoop.prequeue(event);
-      }
-      isPaused = false;
-    }
-    _updateGlobalState();
-  }
-
-  void addDoneListener(SendPort responsePort) {
-    if (doneHandlers == null) {
-      doneHandlers = [];
-    }
-    // If necessary, we can switch doneHandlers to a Set if it gets larger.
-    // That is not expected to happen in practice.
-    if (doneHandlers.contains(responsePort)) return;
-    doneHandlers.add(responsePort);
-  }
-
-  void removeDoneListener(SendPort responsePort) {
-    if (doneHandlers == null) return;
-    doneHandlers.remove(responsePort);
-  }
-
-  void setErrorsFatal(Capability authentification, bool errorsAreFatal) {
-    if (terminateCapability != authentification) return;
-    this.errorsAreFatal = errorsAreFatal;
-  }
-
-  void handlePing(SendPort responsePort, int pingType) {
-    if (pingType == Isolate.IMMEDIATE ||
-        (pingType == Isolate.BEFORE_NEXT_EVENT &&
-         !_isExecutingEvent)) {
-      responsePort.send(null);
-      return;
-    }
-    void respond() { responsePort.send(null); }
-    if (pingType == Isolate.AS_EVENT) {
-      _globalState.topEventLoop.enqueue(this, respond, "ping");
-      return;
-    }
-    assert(pingType == Isolate.BEFORE_NEXT_EVENT);
-    if (_scheduledControlEvents == null) {
-      _scheduledControlEvents = new Queue();
-    }
-    _scheduledControlEvents.addLast(respond);
-  }
-
-  void handleKill(Capability authentification, int priority) {
-    if (this.terminateCapability != authentification) return;
-    if (priority == Isolate.IMMEDIATE ||
-        (priority == Isolate.BEFORE_NEXT_EVENT &&
-         !_isExecutingEvent)) {
-      kill();
-      return;
-    }
-    if (priority == Isolate.AS_EVENT) {
-      _globalState.topEventLoop.enqueue(this, kill, "kill");
-      return;
-    }
-    assert(priority == Isolate.BEFORE_NEXT_EVENT);
-    if (_scheduledControlEvents == null) {
-      _scheduledControlEvents = new Queue();
-    }
-    _scheduledControlEvents.addLast(kill);
-  }
-
-  void addErrorListener(SendPort port) {
-    errorPorts.add(port);
-  }
-
-  void removeErrorListener(SendPort port) {
-    errorPorts.remove(port);
-  }
-
-  /** Function called with an uncaught error. */
-  void handleUncaughtError(error, StackTrace stackTrace) {
-    // Just print the error if there is no error listener registered.
-    if (errorPorts.isEmpty) {
-      // An uncaught error in the root isolate will terminate the program?
-      if (errorsAreFatal && identical(this, _globalState.rootContext)) {
-        // The error will be rethrown to reach the global scope, so
-        // don't print it.
-        return;
-      }
-      if (JS('bool', 'self.console && self.console.error')) {
-        JS('void', 'self.console.error(#, #)', error, stackTrace);
-      } else {
-        print(error);
-        if (stackTrace != null) print(stackTrace);
-      }
-      return;
-    }
-    List message = new List(2)
-        ..[0] = error.toString()
-        ..[1] = (stackTrace == null) ? null : stackTrace.toString();
-    for (SendPort port in errorPorts) port.send(message);
-  }
-
-  /**
-   * Run [code] in the context of the isolate represented by [this].
-   */
-  dynamic eval(Function code) {
-    var old = _globalState.currentContext;
-    _globalState.currentContext = this;
-    this._setGlobals();
-    var result = null;
-    _isExecutingEvent = true;
-    try {
-      result = code();
-    } catch (e, s) {
-      handleUncaughtError(e, s);
-      if (errorsAreFatal) {
-        kill();
-        // An uncaught error in the root context terminates all isolates.
-        if (identical(this, _globalState.rootContext)) {
-          rethrow;
-        }
-      }
-    } finally {
-      _isExecutingEvent = false;
-      _globalState.currentContext = old;
-      if (old != null) old._setGlobals();
-      if (_scheduledControlEvents != null) {
-        while (_scheduledControlEvents.isNotEmpty) {
-          (_scheduledControlEvents.removeFirst())();
-        }
-      }
-    }
-    return result;
-  }
-
-  void _setGlobals() {
-    JS_SET_CURRENT_ISOLATE(isolateStatics);
-  }
-
-  /**
-   * Handle messages comming in on the control port.
-   *
-   * These events do not go through the event queue.
-   * The `_globalState.currentContext` context is not set to this context
-   * during the handling.
-   */
-  void handleControlMessage(message) {
-    switch (message[0]) {
-      case "pause":
-        addPause(message[1], message[2]);
-        break;
-      case "resume":
-        removePause(message[1]);
-        break;
-      case 'add-ondone':
-        addDoneListener(message[1]);
-        break;
-      case 'remove-ondone':
-        removeDoneListener(message[1]);
-        break;
-      case 'set-errors-fatal':
-        setErrorsFatal(message[1], message[2]);
-        break;
-      case "ping":
-        handlePing(message[1], message[2]);
-        break;
-      case "kill":
-        handleKill(message[1], message[2]);
-        break;
-      case "getErrors":
-        addErrorListener(message[1]);
-        break;
-      case "stopErrors":
-        removeErrorListener(message[1]);
-        break;
-      default:
-    }
-  }
-
-  /** Looks up a port registered for this isolate. */
-  RawReceivePortImpl lookup(int portId) => ports[portId];
-
-  void _addRegistration(int portId, RawReceivePortImpl port) {
-    if (ports.containsKey(portId)) {
-      throw new Exception("Registry: ports must be registered only once.");
-    }
-    ports[portId] = port;
-  }
-
-  /** Registers a port on this isolate. */
-  void register(int portId, RawReceivePortImpl port)  {
-    _addRegistration(portId, port);
-    _updateGlobalState();
-  }
-
-  /**
-   * Registers a weak port on this isolate.
-   *
-   * The port does not keep the isolate active.
-   */
-  void registerWeak(int portId, RawReceivePortImpl port)  {
-    weakPorts.add(portId);
-    _addRegistration(portId, port);
-  }
-
-  void _updateGlobalState() {
-    if (ports.length - weakPorts.length > 0 || isPaused || !initialized) {
-      _globalState.isolates[id] = this; // indicate this isolate is active
-    } else {
-      kill();
-    }
-  }
-
-  void kill() {
-    if (_scheduledControlEvents != null) {
-      // Kill all pending events.
-      _scheduledControlEvents.clear();
-    }
-    // Stop listening on all ports.
-    // This should happen before sending events to done handlers, in case
-    // we are listening on ourselves.
-    // Closes all ports, including control port.
-    for (var port in ports.values) {
-      port._close();
-    }
-    ports.clear();
-    weakPorts.clear();
-    _globalState.isolates.remove(id); // indicate this isolate is not active
-    errorPorts.clear();
-    if (doneHandlers != null) {
-      for (SendPort port in doneHandlers) {
-        port.send(null);
-      }
-      doneHandlers = null;
-    }
-  }
-
-  /** Unregister a port on this isolate. */
-  void unregister(int portId) {
-    ports.remove(portId);
-    weakPorts.remove(portId);
-    _updateGlobalState();
-  }
-}
-
-/** Represent the event loop on a javascript thread (DOM or worker). */
-class _EventLoop {
-  final Queue<_IsolateEvent> events = new Queue<_IsolateEvent>();
-
-  /// The number of waiting callbacks not controlled by the dart event loop.
-  ///
-  /// This could be timers or http requests. The worker will only be killed if
-  /// this count reaches 0.
-  /// Access this by using [enterJsAsync] before starting a JavaScript async
-  /// operation and [leaveJsAsync] when the callback has fired.
-  int _activeJsAsyncCount = 0;
-
-  _EventLoop();
-
-  void enqueue(isolate, fn, msg) {
-    events.addLast(new _IsolateEvent(isolate, fn, msg));
-  }
-
-  void prequeue(_IsolateEvent event) {
-    events.addFirst(event);
-  }
-
-  _IsolateEvent dequeue() {
-    if (events.isEmpty) return null;
-    return events.removeFirst();
-  }
-
-  void checkOpenReceivePortsFromCommandLine() {
-    if (_globalState.rootContext != null
-        && _globalState.isolates.containsKey(_globalState.rootContext.id)
-        && _globalState.fromCommandLine
-        && _globalState.rootContext.ports.isEmpty) {
-      // We want to reach here only on the main [_Manager] and only
-      // on the command-line.  In the browser the isolate might
-      // still be alive due to DOM callbacks, but the presumption is
-      // that on the command-line, no future events can be injected
-      // into the event queue once it's empty.  Node has setTimeout
-      // so this presumption is incorrect there.  We think(?) that
-      // in d8 this assumption is valid.
-      throw new Exception("Program exited with open ReceivePorts.");
-    }
-  }
-
-  /** Process a single event, if any. */
-  bool runIteration() {
-    final event = dequeue();
-    if (event == null) {
-      checkOpenReceivePortsFromCommandLine();
-      _globalState.maybeCloseWorker();
-      return false;
-    }
-    event.process();
-    return true;
-  }
-
-  /**
-   * Runs multiple iterations of the run-loop. If possible, each iteration is
-   * run asynchronously.
-   */
-  void _runHelper() {
-    if (globalWindow != null) {
-      // Run each iteration from the browser's top event loop.
-      void next() {
-        if (!runIteration()) return;
-        Timer.run(next);
-      }
-      next();
-    } else {
-      // Run synchronously until no more iterations are available.
-      while (runIteration()) {}
-    }
-  }
-
-  /**
-   * Call [_runHelper] but ensure that worker exceptions are propragated.
-   */
-  void run() {
-    if (!_globalState.isWorker) {
-      _runHelper();
-    } else {
-      try {
-        _runHelper();
-      } catch (e, trace) {
-        _globalState.mainManager.postMessage(_serializeMessage(
-            {'command': 'error', 'msg': '$e\n$trace' }));
-      }
-    }
-  }
-}
-
-/** An event in the top-level event queue. */
-class _IsolateEvent {
-  _IsolateContext isolate;
-  Function fn;
-  String message;
-
-  _IsolateEvent(this.isolate, this.fn, this.message);
-
-  void process() {
-    if (isolate.isPaused) {
-      isolate.delayedEvents.add(this);
-      return;
-    }
-    isolate.eval(fn);
-  }
-}
-
-/** A stub for interacting with the main manager. */
-class _MainManagerStub {
-  void postMessage(msg) {
-    // "self" is a way to refer to the global context object that
-    // works in HTML pages and in Web Workers.  It does not work in d8
-    // and Firefox jsshell, because that would have been too easy.
-    //
-    // See: http://www.w3.org/TR/workers/#the-global-scope
-    // and: http://www.w3.org/TR/Window/#dfn-self-attribute
-    requiresPreamble();
-    JS("void", r"self.postMessage(#)", msg);
-  }
-}
-
-const String _SPAWNED_SIGNAL = "spawned";
-const String _SPAWN_FAILED_SIGNAL = "spawn failed";
-
-get globalWindow {
-  requiresPreamble();
-  return JS('', "self.window");
-}
-
-get globalWorker {
-  requiresPreamble();
-  return JS('', "self.Worker");
-}
-bool get globalPostMessageDefined {
-  requiresPreamble();
-  return JS('bool', "!!self.postMessage");
-}
-
-typedef _MainFunction();
-typedef _MainFunctionArgs(args);
-typedef _MainFunctionArgsMessage(args, message);
-
-/// Note: IsolateNatives depends on _globalState which is only set up correctly
-/// when 'dart:isolate' has been imported.
-class IsolateNatives {
-
-  // We set [enableSpawnWorker] to true (not null) when calling isolate
-  // primitives that require support for spawning workers. The field starts out
-  // by being null, and dart2js' type inference will track if it can have a
-  // non-null value. So by testing if this value is not null, we generate code
-  // that dart2js knows is dead when worker support isn't needed.
-  // TODO(herhut): Initialize this to false when able to track compile-time
-  // constants.
-  static var enableSpawnWorker;
-
-  static String thisScript = computeThisScript();
-
-  /// Associates an ID with a native worker object.
-  static final Expando<int> workerIds = new Expando<int>();
-
-  /**
-   * The src url for the script tag that loaded this Used to create
-   * JavaScript workers.
-   */
-  static String computeThisScript() {
-    var currentScript = JS('', r'init.currentScript');
-    if (currentScript != null) {
-      return JS('String', 'String(#.src)', currentScript);
-    }
-    if (Primitives.isD8) return computeThisScriptD8();
-    if (Primitives.isJsshell) return computeThisScriptJsshell();
-    // A worker has no script tag - so get an url from a stack-trace.
-    if (_globalState.isWorker) return computeThisScriptFromTrace();
-    return null;
-  }
-
-  static String computeThisScriptJsshell() {
-    return JS('String|Null', 'thisFilename()');
-  }
-
-  // TODO(ahe): The following is for supporting D8.  We should move this code
-  // to a helper library that is only loaded when testing on D8.
-  static String computeThisScriptD8() => computeThisScriptFromTrace();
-
-  static String computeThisScriptFromTrace() {
-    var stack = JS('String|Null', 'new Error().stack');
-    if (stack == null) {
-      // According to Internet Explorer documentation, the stack
-      // property is not set until the exception is thrown. The stack
-      // property was not provided until IE10.
-      stack = JS('String|Null',
-                 '(function() {'
-                 'try { throw new Error() } catch(e) { return e.stack }'
-                 '})()');
-      if (stack == null) throw new UnsupportedError('No stack trace');
-    }
-    var pattern, matches;
-
-    // This pattern matches V8, Chrome, and Internet Explorer stack
-    // traces that look like this:
-    // Error
-    //     at methodName (URI:LINE:COLUMN)
-    pattern = JS('',
-                 r'new RegExp("^ *at [^(]*\\((.*):[0-9]*:[0-9]*\\)$", "m")');
-
-
-    matches = JS('JSExtendableArray|Null', '#.match(#)', stack, pattern);
-    if (matches != null) return JS('String', '#[1]', matches);
-
-    // This pattern matches Firefox stack traces that look like this:
-    // methodName@URI:LINE
-    pattern = JS('', r'new RegExp("^[^@]*@(.*):[0-9]*$", "m")');
-
-    matches = JS('JSExtendableArray|Null', '#.match(#)', stack, pattern);
-    if (matches != null) return JS('String', '#[1]', matches);
-
-    throw new UnsupportedError('Cannot extract URI from "$stack"');
-  }
-
-  /**
-   * Assume that [e] is a browser message event and extract its message data.
-   * We don't import the dom explicitly so, when workers are disabled, this
-   * library can also run on top of nodejs.
-   */
-  static _getEventData(e) => JS("", "#.data", e);
-
-  /**
-   * Process messages on a worker, either to control the worker instance or to
-   * pass messages along to the isolate running in the worker.
-   */
-  static void _processWorkerMessage(/* Worker */ sender, e) {
-    var msg = _deserializeMessage(_getEventData(e));
-    switch (msg['command']) {
-      case 'start':
-        _globalState.currentManagerId = msg['id'];
-        String functionName = msg['functionName'];
-        Function entryPoint = (functionName == null)
-            ? _globalState.entry
-            : _getJSFunctionFromName(functionName);
-        var args = msg['args'];
-        var message = _deserializeMessage(msg['msg']);
-        var isSpawnUri = msg['isSpawnUri'];
-        var startPaused = msg['startPaused'];
-        var replyTo = _deserializeMessage(msg['replyTo']);
-        var context = new _IsolateContext();
-        _globalState.topEventLoop.enqueue(context, () {
-          _startIsolate(entryPoint, args, message,
-                        isSpawnUri, startPaused, replyTo);
-        }, 'worker-start');
-        // Make sure we always have a current context in this worker.
-        // TODO(7907): This is currently needed because we're using
-        // Timers to implement Futures, and this isolate library
-        // implementation uses Futures. We should either stop using
-        // Futures in this library, or re-adapt if Futures get a
-        // different implementation.
-        _globalState.currentContext = context;
-        _globalState.topEventLoop.run();
-        break;
-      case 'spawn-worker':
-        if (enableSpawnWorker != null) handleSpawnWorkerRequest(msg);
-        break;
-      case 'message':
-        SendPort port = msg['port'];
-        // If the port has been closed, we ignore the message.
-        if (port != null) {
-          msg['port'].send(msg['msg']);
-        }
-        _globalState.topEventLoop.run();
-        break;
-      case 'close':
-        _globalState.managers.remove(workerIds[sender]);
-        JS('void', '#.terminate()', sender);
-        _globalState.topEventLoop.run();
-        break;
-      case 'log':
-        _log(msg['msg']);
-        break;
-      case 'print':
-        if (_globalState.isWorker) {
-          _globalState.mainManager.postMessage(
-              _serializeMessage({'command': 'print', 'msg': msg}));
-        } else {
-          print(msg['msg']);
-        }
-        break;
-      case 'error':
-        throw msg['msg'];
-    }
-  }
-
-  static handleSpawnWorkerRequest(msg) {
-    var replyPort = msg['replyPort'];
-    spawn(msg['functionName'], msg['uri'],
-          msg['args'], msg['msg'],
-          false, msg['isSpawnUri'], msg['startPaused']).then((msg) {
-      replyPort.send(msg);
-    }, onError: (String errorMessage) {
-      replyPort.send([_SPAWN_FAILED_SIGNAL, errorMessage]);
-    });
-  }
-
-  /** Log a message, forwarding to the main [_Manager] if appropriate. */
-  static _log(msg) {
-    if (_globalState.isWorker) {
-      _globalState.mainManager.postMessage(
-          _serializeMessage({'command': 'log', 'msg': msg }));
-    } else {
-      try {
-        _consoleLog(msg);
-      } catch (e, trace) {
-        throw new Exception(trace);
-      }
-    }
-  }
-
-  static void _consoleLog(msg) {
-    requiresPreamble();
-    JS("void", r"self.console.log(#)", msg);
-  }
-
-  static _getJSFunctionFromName(String functionName) {
-    return JS("", "init.globalFunctions[#]()", functionName);
-  }
-
-  /**
-   * Get a string name for the function, if possible.  The result for
-   * anonymous functions is browser-dependent -- it may be "" or "anonymous"
-   * but you should probably not count on this.
-   */
-  static String _getJSFunctionName(Function f) {
-    return (f is Closure) ? JS("String|Null", r'#.$name', f) : null;
-  }
-
-  /** Create a new JavaScript object instance given its constructor. */
-  static dynamic _allocate(var ctor) {
-    return JS("", "new #()", ctor);
-  }
-
-  static Future<List> spawnFunction(void topLevelFunction(message),
-                                    var message,
-                                    bool startPaused) {
-    IsolateNatives.enableSpawnWorker = true;
-    final name = _getJSFunctionName(topLevelFunction);
-    if (name == null) {
-      throw new UnsupportedError(
-          "only top-level functions can be spawned.");
-    }
-    bool isLight = false;
-    bool isSpawnUri = false;
-    return spawn(name, null, null, message, isLight, isSpawnUri, startPaused);
-  }
-
-  static Future<List> spawnUri(Uri uri, List<String> args, var message,
-                               bool startPaused) {
-    IsolateNatives.enableSpawnWorker = true;
-    bool isLight = false;
-    bool isSpawnUri = true;
-    return spawn(null, uri.toString(), args, message,
-                 isLight, isSpawnUri, startPaused);
-  }
-
-  // TODO(sigmund): clean up above, after we make the new API the default:
-
-  /// If [uri] is `null` it is replaced with the current script.
-  static Future<List> spawn(String functionName, String uri,
-                            List<String> args, message,
-                            bool isLight, bool isSpawnUri, bool startPaused) {
-    // Assume that the compiled version of the Dart file lives just next to the
-    // dart file.
-    // TODO(floitsch): support precompiled version of dart2js output.
-    if (uri != null && uri.endsWith(".dart")) uri += ".js";
-
-    ReceivePort port = new ReceivePort();
-    Completer<List> completer = new Completer();
-    port.first.then((msg) {
-      if (msg[0] == _SPAWNED_SIGNAL) {
-        completer.complete(msg);
-      } else {
-        assert(msg[0] == _SPAWN_FAILED_SIGNAL);
-        completer.completeError(msg[1]);
-      }
-    });
-
-    SendPort signalReply = port.sendPort;
-
-    if (_globalState.useWorkers && !isLight) {
-      _startWorker(
-          functionName, uri, args, message, isSpawnUri, startPaused,
-          signalReply, (String message) => completer.completeError(message));
-    } else {
-      _startNonWorker(
-          functionName, uri, args, message, isSpawnUri, startPaused,
-          signalReply);
-    }
-    return completer.future;
-  }
-
-  static void _startWorker(
-      String functionName, String uri,
-      List<String> args, message,
-      bool isSpawnUri,
-      bool startPaused,
-      SendPort replyPort,
-      void onError(String message)) {
-    if (_globalState.isWorker) {
-      _globalState.mainManager.postMessage(_serializeMessage({
-          'command': 'spawn-worker',
-          'functionName': functionName,
-          'args': args,
-          'msg': message,
-          'uri': uri,
-          'isSpawnUri': isSpawnUri,
-          'startPaused': startPaused,
-          'replyPort': replyPort}));
-    } else {
-      _spawnWorker(functionName, uri, args, message,
-                   isSpawnUri, startPaused, replyPort, onError);
-    }
-  }
-
-  static void _startNonWorker(
-      String functionName, String uri,
-      List<String> args, var message,
-      bool isSpawnUri,
-      bool startPaused,
-      SendPort replyPort) {
-    // TODO(eub): support IE9 using an iframe -- Dart issue 1702.
-    if (uri != null) {
-      throw new UnsupportedError(
-          "Currently spawnUri is not supported without web workers.");
-    }
-    message = _serializeMessage(message);
-    args = _serializeMessage(args);  // Or just args.toList() ?
-    _globalState.topEventLoop.enqueue(new _IsolateContext(), () {
-      final func = _getJSFunctionFromName(functionName);
-      _startIsolate(func, args, message, isSpawnUri, startPaused, replyPort);
-    }, 'nonworker start');
-  }
-
-  static void _startIsolate(Function topLevel,
-                            List<String> args, message,
-                            bool isSpawnUri,
-                            bool startPaused,
-                            SendPort replyTo) {
-    _IsolateContext context = JS_CURRENT_ISOLATE_CONTEXT();
-    Primitives.initializeStatics(context.id);
-    // The isolate's port does not keep the isolate open.
-    replyTo.send([_SPAWNED_SIGNAL,
-                  context.controlPort.sendPort,
-                  context.pauseCapability,
-                  context.terminateCapability]);
-
-    void runStartFunction() {
-      context.initialized = true;
-      if (!isSpawnUri) {
-        topLevel(message);
-      } else if (topLevel is _MainFunctionArgsMessage) {
-        topLevel(args, message);
-      } else if (topLevel is _MainFunctionArgs) {
-        topLevel(args);
-      } else {
-        topLevel();
-      }
-    }
-
-    if (startPaused) {
-      context.addPause(context.pauseCapability, context.pauseCapability);
-      _globalState.topEventLoop.enqueue(context, runStartFunction,
-                                        'start isolate');
-    } else {
-      runStartFunction();
-    }
-  }
-
-  /**
-   * Spawns an isolate in a worker. [factoryName] is the Javascript constructor
-   * name for the isolate entry point class.
-   */
-  static void _spawnWorker(functionName, String uri,
-                           List<String> args, message,
-                           bool isSpawnUri,
-                           bool startPaused,
-                           SendPort replyPort,
-                           void onError(String message)) {
-    if (uri == null) uri = thisScript;
-    final worker = JS('var', 'new Worker(#)', uri);
-    // Trampolines are used when wanting to call a Dart closure from
-    // JavaScript.  The helper function DART_CLOSURE_TO_JS only accepts
-    // top-level or static methods, and the trampoline allows us to capture
-    // arguments and values which can be passed to a static method.
-    final onerrorTrampoline = JS(
-        '',
-        '''
-(function (f, u, c) {
-  return function(e) {
-    return f(e, u, c)
-  }
-})(#, #, #)''',
-        DART_CLOSURE_TO_JS(workerOnError), uri, onError);
-    JS('void', '#.onerror = #', worker, onerrorTrampoline);
-
-    var processWorkerMessageTrampoline = JS(
-        '',
-        """
-(function (f, a) {
-  return function (e) {
-    // We can stop listening for errors when the first message is received as
-    // we only listen for messages to determine if the uri was bad.
-    e.onerror = null;
-    return f(a, e);
-  }
-})(#, #)""",
-        DART_CLOSURE_TO_JS(_processWorkerMessage),
-        worker);
-    JS('void', '#.onmessage = #', worker, processWorkerMessageTrampoline);
-    var workerId = _globalState.nextManagerId++;
-    // We also store the id on the worker itself so that we can unregister it.
-    workerIds[worker] = workerId;
-    _globalState.managers[workerId] = worker;
-    JS('void', '#.postMessage(#)', worker, _serializeMessage({
-        'command': 'start',
-        'id': workerId,
-        // Note: we serialize replyPort twice because the child worker needs to
-        // first deserialize the worker id, before it can correctly deserialize
-        // the port (port deserialization is sensitive to what is the current
-        // workerId).
-        'replyTo': _serializeMessage(replyPort),
-        'args': args,
-        'msg': _serializeMessage(message),
-        'isSpawnUri': isSpawnUri,
-        'startPaused': startPaused,
-        'functionName': functionName }));
-  }
-
-  static bool workerOnError(
-      /* Event */ event,
-      String uri,
-      void onError(String message)) {
-    // Attempt to shut up the browser, as the error has been handled.  Chrome
-    // ignores this :-(
-    JS('void', '#.preventDefault()', event);
-    String message = JS('String|Null', '#.message', event);
-    if (message == null) {
-      // Some browsers, including Chrome, fail to provide a proper error
-      // event.
-      message = 'Error spawning worker for $uri';
-    } else {
-      message = 'Error spawning worker for $uri ($message)';
-    }
-    onError(message);
-    return true;
-  }
-}
-
-/********************************************************
-  Inserted from lib/isolate/dart2js/ports.dart
- ********************************************************/
-
-/** Common functionality to all send ports. */
-abstract class _BaseSendPort implements SendPort {
-  /** Id for the destination isolate. */
-  final int _isolateId;
-
-  const _BaseSendPort(this._isolateId);
-
-  void _checkReplyTo(SendPort replyTo) {
-    if (replyTo != null
-        && replyTo is! _NativeJsSendPort
-        && replyTo is! _WorkerSendPort) {
-      throw new Exception("SendPort.send: Illegal replyTo port type");
-    }
-  }
-
-  void send(var message);
-  bool operator ==(var other);
-  int get hashCode;
-}
-
-/** A send port that delivers messages in-memory via native JavaScript calls. */
-class _NativeJsSendPort extends _BaseSendPort implements SendPort {
-  final RawReceivePortImpl _receivePort;
-
-  const _NativeJsSendPort(this._receivePort, int isolateId) : super(isolateId);
-
-  void send(var message) {
-    // Check that the isolate still runs and the port is still open
-    final isolate = _globalState.isolates[_isolateId];
-    if (isolate == null) return;
-    if (_receivePort._isClosed) return;
-    // We force serialization/deserialization as a simple way to ensure
-    // isolate communication restrictions are respected between isolates that
-    // live in the same worker. [_NativeJsSendPort] delivers both messages
-    // from the same worker and messages from other workers. In particular,
-    // messages sent from a worker via a [_WorkerSendPort] are received at
-    // [_processWorkerMessage] and forwarded to a native port. In such cases,
-    // here we'll see [_globalState.currentContext == null].
-    final shouldSerialize = _globalState.currentContext != null
-        && _globalState.currentContext.id != _isolateId;
-    var msg = message;
-    if (shouldSerialize) {
-      msg = _serializeMessage(msg);
-    }
-    if (isolate.controlPort == _receivePort) {
-      isolate.handleControlMessage(msg);
-      return;
-    }
-    _globalState.topEventLoop.enqueue(isolate, () {
-      if (!_receivePort._isClosed) {
-        if (shouldSerialize) {
-          msg = _deserializeMessage(msg);
-        }
-        _receivePort._add(msg);
-      }
-    }, 'receive $message');
-  }
-
-  bool operator ==(var other) => (other is _NativeJsSendPort) &&
-      (_receivePort == other._receivePort);
-
-  int get hashCode => _receivePort._id;
-}
-
-/** A send port that delivers messages via worker.postMessage. */
-// TODO(eub): abstract this for iframes.
-class _WorkerSendPort extends _BaseSendPort implements SendPort {
-  final int _workerId;
-  final int _receivePortId;
-
-  const _WorkerSendPort(this._workerId, int isolateId, this._receivePortId)
-      : super(isolateId);
-
-  void send(var message) {
-    final workerMessage = _serializeMessage({
-        'command': 'message',
-        'port': this,
-        'msg': message});
-
-    if (_globalState.isWorker) {
-      // Communication from one worker to another go through the
-      // main worker.
-      _globalState.mainManager.postMessage(workerMessage);
-    } else {
-      // Deliver the message only if the worker is still alive.
-      /* Worker */ var manager = _globalState.managers[_workerId];
-      if (manager != null) {
-        JS('void', '#.postMessage(#)', manager, workerMessage);
-      }
-    }
-  }
-
-  bool operator ==(var other) {
-    return (other is _WorkerSendPort) &&
-        (_workerId == other._workerId) &&
-        (_isolateId == other._isolateId) &&
-        (_receivePortId == other._receivePortId);
-  }
-
-  int get hashCode {
-    // TODO(sigmund): use a standard hash when we get one available in corelib.
-    return (_workerId << 16) ^ (_isolateId << 8) ^ _receivePortId;
-  }
-}
-
-class RawReceivePortImpl implements RawReceivePort {
-  static int _nextFreeId = 1;
-
-  final int _id;
-  Function _handler;
-  bool _isClosed = false;
-
-  RawReceivePortImpl(this._handler) : _id = _nextFreeId++ {
-    _globalState.currentContext.register(_id, this);
-  }
-
-  RawReceivePortImpl.weak(this._handler) : _id = _nextFreeId++ {
-    _globalState.currentContext.registerWeak(_id, this);
-  }
-
-  // Creates the control port of an isolate.
-  // This is created before the isolate context object itself,
-  // so it cannot access the static _nextFreeId field.
-  RawReceivePortImpl._controlPort() : _handler = null, _id = 0;
-
-  void set handler(Function newHandler) {
-    _handler = newHandler;
-  }
-
-  // Close the port without unregistering it.
-  // Used by an isolate context to close all ports when shutting down.
-  void _close() {
-    _isClosed = true;
-    _handler = null;
-  }
-
-  void close() {
-    if (_isClosed) return;
-    _isClosed = true;
-    _handler = null;
-    _globalState.currentContext.unregister(_id);
-  }
-
-  void _add(dataEvent) {
-    if (_isClosed) return;
-    _handler(dataEvent);
-  }
-
-  SendPort get sendPort {
-    return new _NativeJsSendPort(this, _globalState.currentContext.id);
-  }
-}
-
-class ReceivePortImpl extends Stream implements ReceivePort {
-  final RawReceivePort _rawPort;
-  StreamController _controller;
-
-  ReceivePortImpl() : this.fromRawReceivePort(new RawReceivePortImpl(null));
-
-  ReceivePortImpl.weak()
-      : this.fromRawReceivePort(new RawReceivePortImpl.weak(null));
-
-  ReceivePortImpl.fromRawReceivePort(this._rawPort) {
-    _controller = new StreamController(onCancel: close, sync: true);
-    _rawPort.handler = _controller.add;
-  }
-
-  StreamSubscription listen(void onData(var event),
-                            {Function onError,
-                             void onDone(),
-                             bool cancelOnError}) {
-    return _controller.stream.listen(onData, onError: onError, onDone: onDone,
-                                     cancelOnError: cancelOnError);
-  }
-
-  void close() {
-    _rawPort.close();
-    _controller.close();
-  }
-
-  SendPort get sendPort => _rawPort.sendPort;
-}
-
-
-/********************************************************
-  Inserted from lib/isolate/dart2js/messages.dart
- ********************************************************/
-
-// Defines message visitors, serialization, and deserialization.
-
-/** Serialize [message] (or simulate serialization). */
-_serializeMessage(message) {
-  if (_globalState.needSerialization) {
-    return new _JsSerializer().traverse(message);
-  } else {
-    return new _JsCopier().traverse(message);
-  }
-}
-
-/** Deserialize [message] (or simulate deserialization). */
-_deserializeMessage(message) {
-  if (_globalState.needSerialization) {
-    return new _JsDeserializer().deserialize(message);
-  } else {
-    // Nothing more to do.
-    return message;
-  }
-}
-
-class _JsSerializer extends _Serializer {
-
-  _JsSerializer() : super() { _visited = new _JsVisitedMap(); }
-
-  visitSendPort(SendPort x) {
-    if (x is _NativeJsSendPort) return visitNativeJsSendPort(x);
-    if (x is _WorkerSendPort) return visitWorkerSendPort(x);
-    throw "Illegal underlying port $x";
-  }
-
-  visitCapability(Capability x) {
-    if (x is CapabilityImpl) {
-      return ['capability', x._id];
-    }
-    throw "Capability not serializable: $x";
-  }
-
-  visitNativeJsSendPort(_NativeJsSendPort port) {
-    return ['sendport', _globalState.currentManagerId,
-        port._isolateId, port._receivePort._id];
-  }
-
-  visitWorkerSendPort(_WorkerSendPort port) {
-    return ['sendport', port._workerId, port._isolateId, port._receivePortId];
-  }
-}
-
-
-class _JsCopier extends _Copier {
-
-  _JsCopier() : super() { _visited = new _JsVisitedMap(); }
-
-  visitSendPort(SendPort x) {
-    if (x is _NativeJsSendPort) return visitNativeJsSendPort(x);
-    if (x is _WorkerSendPort) return visitWorkerSendPort(x);
-    throw "Illegal underlying port $x";
-  }
-
-  visitCapability(Capability x) {
-    if (x is CapabilityImpl) {
-      return new CapabilityImpl._internal(x._id);
-    }
-    throw "Capability not serializable: $x";
-  }
-
-  SendPort visitNativeJsSendPort(_NativeJsSendPort port) {
-    return new _NativeJsSendPort(port._receivePort, port._isolateId);
-  }
-
-  SendPort visitWorkerSendPort(_WorkerSendPort port) {
-    return new _WorkerSendPort(
-        port._workerId, port._isolateId, port._receivePortId);
-  }
-}
-
-class _JsDeserializer extends _Deserializer {
-
-  SendPort deserializeSendPort(List list) {
-    int managerId = list[1];
-    int isolateId = list[2];
-    int receivePortId = list[3];
-    // If two isolates are in the same manager, we use NativeJsSendPorts to
-    // deliver messages directly without using postMessage.
-    if (managerId == _globalState.currentManagerId) {
-      var isolate = _globalState.isolates[isolateId];
-      if (isolate == null) return null; // Isolate has been closed.
-      var receivePort = isolate.lookup(receivePortId);
-      if (receivePort == null) return null; // Port has been closed.
-      return new _NativeJsSendPort(receivePort, isolateId);
-    } else {
-      return new _WorkerSendPort(managerId, isolateId, receivePortId);
-    }
-  }
-
-  Capability deserializeCapability(List list) {
-    return new CapabilityImpl._internal(list[1]);
-  }
-}
-
-class _JsVisitedMap implements _MessageTraverserVisitedMap {
-  List tagged;
-
-  /** Retrieves any information stored in the native object [object]. */
-  operator[](var object) {
-    return _getAttachedInfo(object);
-  }
-
-  /** Injects some information into the native [object]. */
-  void operator[]=(var object, var info) {
-    tagged.add(object);
-    _setAttachedInfo(object, info);
-  }
-
-  /** Get ready to rumble. */
-  void reset() {
-    assert(tagged == null);
-    tagged = new List();
-  }
-
-  /** Remove all information injected in the native objects. */
-  void cleanup() {
-    for (int i = 0, length = tagged.length; i < length; i++) {
-      _clearAttachedInfo(tagged[i]);
-    }
-    tagged = null;
-  }
-
-  void _clearAttachedInfo(var o) {
-    JS("void", "#['__MessageTraverser__attached_info__'] = #", o, null);
-  }
-
-  void _setAttachedInfo(var o, var info) {
-    JS("void", "#['__MessageTraverser__attached_info__'] = #", o, info);
-  }
-
-  _getAttachedInfo(var o) {
-    return JS("", "#['__MessageTraverser__attached_info__']", o);
-  }
-}
-
-// only visible for testing purposes
-// TODO(sigmund): remove once we can disable privacy for testing (bug #1882)
-class TestingOnly {
-  static copy(x) {
-    return new _JsCopier().traverse(x);
-  }
-
-  // only visible for testing purposes
-  static serialize(x) {
-    _Serializer serializer = new _JsSerializer();
-    _Deserializer deserializer = new _JsDeserializer();
-    return deserializer.deserialize(serializer.traverse(x));
-  }
-}
-
-/********************************************************
-  Inserted from lib/isolate/serialization.dart
- ********************************************************/
-
-class _MessageTraverserVisitedMap {
-
-  operator[](var object) => null;
-  void operator[]=(var object, var info) { }
-
-  void reset() { }
-  void cleanup() { }
-
-}
-
-/** Abstract visitor for dart objects that can be sent as isolate messages. */
-abstract class _MessageTraverser {
-
-  _MessageTraverserVisitedMap _visited;
-  _MessageTraverser() : _visited = new _MessageTraverserVisitedMap();
-
-  /** Visitor's entry point. */
-  traverse(var x) {
-    if (isPrimitive(x)) return visitPrimitive(x);
-    _visited.reset();
-    var result;
-    try {
-      result = _dispatch(x);
-    } finally {
-      _visited.cleanup();
-    }
-    return result;
-  }
-
-  _dispatch(var x) {
-    // This code likely fails for user classes implementing
-    // SendPort and Capability because it assumes the internal classes.
-    if (isPrimitive(x)) return visitPrimitive(x);
-    if (x is List) return visitList(x);
-    if (x is Map) return visitMap(x);
-    if (x is SendPort) return visitSendPort(x);
-    if (x is Capability) return visitCapability(x);
-
-    // Overridable fallback.
-    return visitObject(x);
-  }
-
-  visitPrimitive(x);
-  visitList(List x);
-  visitMap(Map x);
-  visitSendPort(SendPort x);
-  visitCapability(Capability x);
-
-  visitObject(Object x) {
-    // TODO(floitsch): make this a real exception. (which one)?
-    throw "Message serialization: Illegal value $x passed";
-  }
-
-  static bool isPrimitive(x) {
-    return (x == null) || (x is String) || (x is num) || (x is bool);
-  }
-}
-
-
-/** A visitor that recursively copies a message. */
-class _Copier extends _MessageTraverser {
-
-  visitPrimitive(x) => x;
-
-  List visitList(List list) {
-    List copy = _visited[list];
-    if (copy != null) return copy;
-
-    int len = list.length;
-
-    // TODO(floitsch): we loose the generic type of the List.
-    copy = new List(len);
-    _visited[list] = copy;
-    for (int i = 0; i < len; i++) {
-      copy[i] = _dispatch(list[i]);
-    }
-    return copy;
-  }
-
-  Map visitMap(Map map) {
-    Map copy = _visited[map];
-    if (copy != null) return copy;
-
-    // TODO(floitsch): we loose the generic type of the map.
-    copy = new Map();
-    _visited[map] = copy;
-    map.forEach((key, val) {
-      copy[_dispatch(key)] = _dispatch(val);
-    });
-    return copy;
-  }
-
-  visitSendPort(SendPort x) => throw new UnimplementedError();
-
-  visitCapability(Capability x) => throw new UnimplementedError();
-}
-
-/** Visitor that serializes a message as a JSON array. */
-class _Serializer extends _MessageTraverser {
-  int _nextFreeRefId = 0;
-
-  visitPrimitive(x) => x;
-
-  visitList(List list) {
-    int copyId = _visited[list];
-    if (copyId != null) return ['ref', copyId];
-
-    int id = _nextFreeRefId++;
-    _visited[list] = id;
-    var jsArray = _serializeList(list);
-    // TODO(floitsch): we are losing the generic type.
-    return ['list', id, jsArray];
-  }
-
-  visitMap(Map map) {
-    int copyId = _visited[map];
-    if (copyId != null) return ['ref', copyId];
-
-    int id = _nextFreeRefId++;
-    _visited[map] = id;
-    var keys = _serializeList(map.keys.toList());
-    var values = _serializeList(map.values.toList());
-    // TODO(floitsch): we are losing the generic type.
-    return ['map', id, keys, values];
-  }
-
-  _serializeList(List list) {
-    int len = list.length;
-    // Use a growable list because we do not add extra properties on
-    // them.
-    var result = new List()..length = len;
-    for (int i = 0; i < len; i++) {
-      result[i] = _dispatch(list[i]);
-    }
-    return result;
-  }
-
-  visitSendPort(SendPort x) => throw new UnimplementedError();
-
-  visitCapability(Capability x) => throw new UnimplementedError();
-}
-
-/** Deserializes arrays created with [_Serializer]. */
-abstract class _Deserializer {
-  Map<int, dynamic> _deserialized;
-
-  _Deserializer();
-
-  static bool isPrimitive(x) {
-    return (x == null) || (x is String) || (x is num) || (x is bool);
-  }
-
-  deserialize(x) {
-    if (isPrimitive(x)) return x;
-    // TODO(floitsch): this should be new HashMap<int, dynamic>()
-    _deserialized = new HashMap();
-    return _deserializeHelper(x);
-  }
-
-  _deserializeHelper(x) {
-    if (isPrimitive(x)) return x;
-    assert(x is List);
-    switch (x[0]) {
-      case 'ref': return _deserializeRef(x);
-      case 'list': return _deserializeList(x);
-      case 'map': return _deserializeMap(x);
-      case 'sendport': return deserializeSendPort(x);
-      case 'capability': return deserializeCapability(x);
-      default: return deserializeObject(x);
-    }
-  }
-
-  _deserializeRef(List x) {
-    int id = x[1];
-    var result = _deserialized[id];
-    assert(result != null);
-    return result;
-  }
-
-  List _deserializeList(List x) {
-    int id = x[1];
-    // We rely on the fact that Dart-lists are directly mapped to Js-arrays.
-    List dartList = x[2];
-    _deserialized[id] = dartList;
-    int len = dartList.length;
-    for (int i = 0; i < len; i++) {
-      dartList[i] = _deserializeHelper(dartList[i]);
-    }
-    return dartList;
-  }
-
-  Map _deserializeMap(List x) {
-    Map result = new Map();
-    int id = x[1];
-    _deserialized[id] = result;
-    List keys = x[2];
-    List values = x[3];
-    int len = keys.length;
-    assert(len == values.length);
-    for (int i = 0; i < len; i++) {
-      var key = _deserializeHelper(keys[i]);
-      var value = _deserializeHelper(values[i]);
-      result[key] = value;
-    }
-    return result;
-  }
-
-  deserializeSendPort(List x);
-
-  deserializeCapability(List x);
-
-  deserializeObject(List x) {
-    // TODO(floitsch): Use real exception (which one?).
-    throw "Unexpected serialized object";
-  }
-}
-
-class TimerImpl implements Timer {
-  final bool _once;
-  bool _inEventLoop = false;
-  int _handle;
-
-  TimerImpl(int milliseconds, void callback())
-      : _once = true {
-    if (milliseconds == 0 && (!hasTimer() || _globalState.isWorker)) {
-
-      void internalCallback() {
-        _handle = null;
-        callback();
-      }
-
-      // Setting _handle to something different from null indicates that the
-      // callback has not been run. Hence, the choice of 1 is arbitrary.
-      _handle = 1;
-
-      // This makes a dependency between the async library and the
-      // event loop of the isolate library. The compiler makes sure
-      // that the event loop is compiled if [Timer] is used.
-      // TODO(7907): In case of web workers, we need to use the event
-      // loop instead of setTimeout, to make sure the futures get executed in
-      // order.
-      _globalState.topEventLoop.enqueue(
-          _globalState.currentContext, internalCallback, 'timer');
-      _inEventLoop = true;
-    } else if (hasTimer()) {
-
-      void internalCallback() {
-        _handle = null;
-        leaveJsAsync();
-        callback();
-      }
-
-      enterJsAsync();
-
-      _handle = JS('int', 'self.setTimeout(#, #)',
-                   convertDartClosureToJS(internalCallback, 0),
-                   milliseconds);
-    } else {
-      assert(milliseconds > 0);
-      throw new UnsupportedError("Timer greater than 0.");
-    }
-  }
-
-  TimerImpl.periodic(int milliseconds, void callback(Timer timer))
-      : _once = false {
-    if (hasTimer()) {
-      enterJsAsync();
-      _handle = JS('int', 'self.setInterval(#, #)',
-                   convertDartClosureToJS(() { callback(this); }, 0),
-                   milliseconds);
-    } else {
-      throw new UnsupportedError("Periodic timer.");
-    }
-  }
-
-  void cancel() {
-    if (hasTimer()) {
-      if (_inEventLoop) {
-        throw new UnsupportedError("Timer in event loop cannot be canceled.");
-      }
-      if (_handle == null) return;
-      leaveJsAsync();
-      if (_once) {
-        JS('void', 'self.clearTimeout(#)', _handle);
-      } else {
-        JS('void', 'self.clearInterval(#)', _handle);
-      }
-      _handle = null;
-    } else {
-      throw new UnsupportedError("Canceling a timer.");
-    }
-  }
-
-  bool get isActive => _handle != null;
-}
-
-bool hasTimer() {
-  requiresPreamble();
-  return JS('', 'self.setTimeout') != null;
-}
-
-
-/**
- * Implementation class for [Capability].
- *
- * It has the same name to make it harder for users to distinguish.
- */
-class CapabilityImpl implements Capability {
-  /** Internal random secret identifying the capability. */
-  final int _id;
-
-  CapabilityImpl() : this._internal(random64());
-
-  CapabilityImpl._internal(this._id);
-
-  int get hashCode {
-    // Thomas Wang 32 bit Mix.
-    // http://www.concentric.net/~Ttwang/tech/inthash.htm
-    // (via https://gist.github.com/badboy/6267743)
-    int hash = _id;
-    hash = (hash >> 0) ^ (hash ~/ 0x100000000);  // To 32 bit from ~64.
-    hash = (~hash + (hash << 15)) & 0xFFFFFFFF;
-    hash ^= hash >> 12;
-    hash = (hash * 5) & 0xFFFFFFFF;
-    hash ^= hash >> 4;
-    hash = (hash * 2057) & 0xFFFFFFFF;
-    hash ^= hash >> 16;
-    return hash;
-  }
-
-  bool operator==(Object other) {
-    if (identical(other, this)) return true;
-    if (other is CapabilityImpl) {
-      return identical(_id, other._id);
-    }
-    return false;
-  }
-}
diff --git a/sdk/lib/_internal/lib/isolate_patch.dart b/sdk/lib/_internal/lib/isolate_patch.dart
deleted file mode 100644
index dc41e53..0000000
--- a/sdk/lib/_internal/lib/isolate_patch.dart
+++ /dev/null
@@ -1,151 +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.
-
-// Patch file for the dart:isolate library.
-
-import 'dart:_js_helper' show patch;
-import 'dart:_isolate_helper' show CapabilityImpl,
-                                   CloseToken,
-                                   IsolateNatives,
-                                   JsIsolateSink,
-                                   ReceivePortImpl,
-                                   RawReceivePortImpl;
-
-@patch
-class Isolate {
-  @patch
-  static Future<Isolate> spawn(void entryPoint(message), var message,
-                                     { bool paused: false }) {
-    try {
-      return IsolateNatives.spawnFunction(entryPoint, message, paused)
-          .then((msg) => new Isolate(msg[1],
-                                     pauseCapability: msg[2],
-                                     terminateCapability: msg[3]));
-    } catch (e, st) {
-      return new Future<Isolate>.error(e, st);
-    }
-  }
-
-  @patch
-  static Future<Isolate> spawnUri(
-      Uri uri, List<String> args, var message, { bool paused: false }) {
-    try {
-      if (args is List<String>) {
-        for (int i = 0; i < args.length; i++) {
-          if (args[i] is! String) {
-            throw new ArgumentError("Args must be a list of Strings $args");
-          }
-        }
-      } else if (args != null) {
-        throw new ArgumentError("Args must be a list of Strings $args");
-      }
-      return IsolateNatives.spawnUri(uri, args, message, paused)
-          .then((msg) => new Isolate(msg[1],
-                                     pauseCapability: msg[2],
-                                     terminateCapability: msg[3]));
-    } catch (e, st) {
-      return new Future<Isolate>.error(e, st);
-    }
-  }
-
-  @patch
-  void _pause(Capability resumeCapability) {
-    var message = new List(3)
-        ..[0] = "pause"
-        ..[1] = pauseCapability
-        ..[2] = resumeCapability;
-    controlPort.send(message);
-  }
-
-  @patch
-  void resume(Capability resumeCapability) {
-    var message = new List(2)
-        ..[0] = "resume"
-        ..[1] = resumeCapability;
-    controlPort.send(message);
-  }
-
-  @patch
-  void addOnExitListener(SendPort responsePort) {
-    // TODO(lrn): Can we have an internal method that checks if the receiving
-    // isolate of a SendPort is still alive?
-    var message = new List(2)
-        ..[0] = "add-ondone"
-        ..[1] = responsePort;
-    controlPort.send(message);
-  }
-
-  @patch
-  void removeOnExitListener(SendPort responsePort) {
-    var message = new List(2)
-        ..[0] = "remove-ondone"
-        ..[1] = responsePort;
-    controlPort.send(message);
-  }
-
-  @patch
-  void setErrorsFatal(bool errorsAreFatal) {
-    var message = new List(3)
-        ..[0] = "set-errors-fatal"
-        ..[1] = terminateCapability
-        ..[2] = errorsAreFatal;
-    controlPort.send(message);
-  }
-
-  @patch
-  void kill([int priority = BEFORE_NEXT_EVENT]) {
-    controlPort.send(["kill", terminateCapability, priority]);
-  }
-
-  @patch
-  void ping(SendPort responsePort, [int pingType = IMMEDIATE]) {
-    var message = new List(3)
-        ..[0] = "ping"
-        ..[1] = responsePort
-        ..[2] = pingType;
-    controlPort.send(message);
-  }
-
-  @patch
-  void addErrorListener(SendPort port) {
-    var message = new List(2)
-        ..[0] = "getErrors"
-        ..[1] = port;
-    controlPort.send(message);
-  }
-
-  @patch
-  void removeErrorListener(SendPort port) {
-    var message = new List(2)
-        ..[0] = "stopErrors"
-        ..[1] = port;
-    controlPort.send(message);
-  }
-}
-
-/** Default factory for receive ports. */
-@patch
-class ReceivePort {
-  @patch
-  factory ReceivePort() = ReceivePortImpl;
-
-  @patch
-  factory ReceivePort.fromRawReceivePort(RawReceivePort rawPort) {
-    return new ReceivePortImpl.fromRawReceivePort(rawPort);
-  }
-}
-
-@patch
-class RawReceivePort {
-  @patch
-  factory RawReceivePort([void handler(event)]) {
-    return new RawReceivePortImpl(handler);
-  }
-}
-
-@patch
-class Capability {
-  @patch
-  factory Capability() = CapabilityImpl;
-}
diff --git a/sdk/lib/_internal/lib/js_array.dart b/sdk/lib/_internal/lib/js_array.dart
deleted file mode 100644
index 7345230..0000000
--- a/sdk/lib/_internal/lib/js_array.dart
+++ /dev/null
@@ -1,380 +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.
-
-part of _interceptors;
-
-/**
- * The interceptor class for [List]. The compiler recognizes this
- * class as an interceptor, and changes references to [:this:] to
- * actually use the receiver of the method, which is generated as an extra
- * argument added to each member.
- */
-class JSArray<E> extends Interceptor implements List<E>, JSIndexable {
-
-  const JSArray();
-
-  /**
-   * Returns a fresh JavaScript Array, marked as fixed-length.
-   *
-   * [length] must be a non-negative integer.
-   */
-  factory JSArray.fixed(int length)  {
-    // Explicit type test is necessary to guard against JavaScript conversions
-    // in unchecked mode.
-    if ((length is !int) || (length < 0)) {
-      throw new ArgumentError("Length must be a non-negative integer: $length");
-    }
-    return new JSArray<E>.markFixed(JS('', 'new Array(#)', length));
-  }
-
-  /**
-   * Returns a fresh growable JavaScript Array of zero length length.
-   */
-  factory JSArray.emptyGrowable() => new JSArray<E>.markGrowable(JS('', '[]'));
-
-  /**
-   * Returns a fresh growable JavaScript Array with initial length.
-   *
-   * [validatedLength] must be a non-negative integer.
-   */
-  factory JSArray.growable(int length) {
-    // Explicit type test is necessary to guard against JavaScript conversions
-    // in unchecked mode.
-    if ((length is !int) || (length < 0)) {
-      throw new ArgumentError("Length must be a non-negative integer: $length");
-    }
-    return new JSArray<E>.markGrowable(JS('', 'new Array(#)', length));
-  }
-
-  /**
-   * Constructor for adding type parameters to an existing JavaScript Array.
-   * The compiler specially recognizes this constructor.
-   *
-   *     var a = new JSArray<int>.typed(JS('JSExtendableArray', '[]'));
-   *     a is List<int>    --> true
-   *     a is List<String> --> false
-   *
-   * Usually either the [JSArray.markFixed] or [JSArray.markGrowable]
-   * constructors is used instead.
-   *
-   * The input must be a JavaScript Array.  The JS form is just a re-assertion
-   * to help type analysis when the input type is sloppy.
-   */
-  factory JSArray.typed(allocation) => JS('JSArray', '#', allocation);
-
-  factory JSArray.markFixed(allocation) =>
-      JS('JSFixedArray', '#', markFixedList(new JSArray<E>.typed(allocation)));
-
-  factory JSArray.markGrowable(allocation) =>
-      JS('JSExtendableArray', '#', new JSArray<E>.typed(allocation));
-
-  static List markFixedList(List list) {
-    JS('void', r'#.fixed$length = init', list);
-    return JS('JSFixedArray', '#', list);
-  }
-
-  checkMutable(reason) {
-    if (this is !JSMutableArray) {
-      throw new UnsupportedError(reason);
-    }
-  }
-
-  checkGrowable(reason) {
-    if (this is !JSExtendableArray) {
-      throw new UnsupportedError(reason);
-    }
-  }
-
-  void add(E value) {
-    checkGrowable('add');
-    JS('void', r'#.push(#)', this, value);
-  }
-
-  E removeAt(int index) {
-    if (index is !int) throw new ArgumentError(index);
-    if (index < 0 || index >= length) {
-      throw new RangeError.value(index);
-    }
-    checkGrowable('removeAt');
-    return JS('var', r'#.splice(#, 1)[0]', this, index);
-  }
-
-  void insert(int index, E value) {
-    if (index is !int) throw new ArgumentError(index);
-    if (index < 0 || index > length) {
-      throw new RangeError.value(index);
-    }
-    checkGrowable('insert');
-    JS('void', r'#.splice(#, 0, #)', this, index, value);
-  }
-
-  void insertAll(int index, Iterable<E> iterable) {
-    checkGrowable('insertAll');
-    IterableMixinWorkaround.insertAllList(this, index, iterable);
-  }
-
-  void setAll(int index, Iterable<E> iterable) {
-    checkMutable('setAll');
-    IterableMixinWorkaround.setAllList(this, index, iterable);
-  }
-
-  E removeLast() {
-    checkGrowable('removeLast');
-    if (length == 0) throw new RangeError.value(-1);
-    return JS('var', r'#.pop()', this);
-  }
-
-  bool remove(Object element) {
-    checkGrowable('remove');
-    for (int i = 0; i < this.length; i++) {
-      if (this[i] == element) {
-        JS('var', r'#.splice(#, 1)', this, i);
-        return true;
-      }
-    }
-    return false;
-  }
-
-  void removeWhere(bool test(E element)) {
-    // This could, and should, be optimized.
-    IterableMixinWorkaround.removeWhereList(this, test);
-  }
-
-  void retainWhere(bool test(E element)) {
-    IterableMixinWorkaround.removeWhereList(this,
-                                            (E element) => !test(element));
-  }
-
-  Iterable<E> where(bool f(E element)) {
-    return new IterableMixinWorkaround<E>().where(this, f);
-  }
-
-  Iterable expand(Iterable f(E element)) {
-    return IterableMixinWorkaround.expand(this, f);
-  }
-
-  void addAll(Iterable<E> collection) {
-    for (E e in collection) {
-      this.add(e);
-    }
-  }
-
-  void clear() {
-    length = 0;
-  }
-
-  void forEach(void f(E element)) {
-    return IterableMixinWorkaround.forEach(this, f);
-  }
-
-  Iterable map(f(E element)) {
-    return IterableMixinWorkaround.mapList(this, f);
-  }
-
-  String join([String separator = ""]) {
-    var list = new List(this.length);
-    for (int i = 0; i < this.length; i++) {
-      list[i] = "${this[i]}";
-    }
-    return JS('String', "#.join(#)", list, separator);
-  }
-
-  Iterable<E> take(int n) {
-    return new IterableMixinWorkaround<E>().takeList(this, n);
-  }
-
-  Iterable<E> takeWhile(bool test(E value)) {
-    return new IterableMixinWorkaround<E>().takeWhile(this, test);
-  }
-
-  Iterable<E> skip(int n) {
-    return new IterableMixinWorkaround<E>().skipList(this, n);
-  }
-
-  Iterable<E> skipWhile(bool test(E value)) {
-    return new IterableMixinWorkaround<E>().skipWhile(this, test);
-  }
-
-  E reduce(E combine(E value, E element)) {
-    return IterableMixinWorkaround.reduce(this, combine);
-  }
-
-  fold(initialValue, combine(previousValue, E element)) {
-    return IterableMixinWorkaround.fold(this, initialValue, combine);
-  }
-
-  dynamic firstWhere(bool test(E value), {Object orElse()}) {
-    return IterableMixinWorkaround.firstWhere(this, test, orElse);
-  }
-
-  dynamic lastWhere(bool test(E value), {Object orElse()}) {
-    return IterableMixinWorkaround.lastWhereList(this, test, orElse);
-  }
-
-  E singleWhere(bool test(E value)) {
-    return IterableMixinWorkaround.singleWhere(this, test);
-  }
-
-  E elementAt(int index) {
-    return this[index];
-  }
-
-  List<E> sublist(int start, [int end]) {
-    checkNull(start); // TODO(ahe): This is not specified but co19 tests it.
-    if (start is !int) throw new ArgumentError(start);
-    if (start < 0 || start > length) {
-      throw new RangeError.range(start, 0, length);
-    }
-    if (end == null) {
-      end = length;
-    } else {
-      if (end is !int) throw new ArgumentError(end);
-      if (end < start || end > length) {
-        throw new RangeError.range(end, start, length);
-      }
-    }
-    if (start == end) return <E>[];
-    return new JSArray<E>.markGrowable(
-        JS('', r'#.slice(#, #)', this, start, end));
-  }
-
-
-  Iterable<E> getRange(int start, int end) {
-    return new IterableMixinWorkaround<E>().getRangeList(this, start, end);
-  }
-
-  E get first {
-    if (length > 0) return this[0];
-    throw new StateError("No elements");
-  }
-
-  E get last {
-    if (length > 0) return this[length - 1];
-    throw new StateError("No elements");
-  }
-
-  E get single {
-    if (length == 1) return this[0];
-    if (length == 0) throw new StateError("No elements");
-    throw new StateError("More than one element");
-  }
-
-  void removeRange(int start, int end) {
-    checkGrowable('removeRange');
-    int receiverLength = this.length;
-    if (start < 0 || start > receiverLength) {
-      throw new RangeError.range(start, 0, receiverLength);
-    }
-    if (end < start || end > receiverLength) {
-      throw new RangeError.range(end, start, receiverLength);
-    }
-    Lists.copy(this,
-               end,
-               this,
-               start,
-               receiverLength - end);
-    this.length = receiverLength - (end - start);
-  }
-
-  void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
-    checkMutable('set range');
-    IterableMixinWorkaround.setRangeList(this, start, end, iterable, skipCount);
-  }
-
-  void fillRange(int start, int end, [E fillValue]) {
-    checkMutable('fill range');
-    IterableMixinWorkaround.fillRangeList(this, start, end, fillValue);
-  }
-
-  void replaceRange(int start, int end, Iterable<E> iterable) {
-    checkGrowable('removeRange');
-    IterableMixinWorkaround.replaceRangeList(this, start, end, iterable);
-  }
-
-  bool any(bool f(E element)) => IterableMixinWorkaround.any(this, f);
-
-  bool every(bool f(E element)) => IterableMixinWorkaround.every(this, f);
-
-  Iterable<E> get reversed =>
-      new IterableMixinWorkaround<E>().reversedList(this);
-
-  void sort([int compare(E a, E b)]) {
-    checkMutable('sort');
-    IterableMixinWorkaround.sortList(this, compare);
-  }
-
-  void shuffle([Random random]) {
-    IterableMixinWorkaround.shuffleList(this, random);
-  }
-
-  int indexOf(Object element, [int start = 0]) {
-    return IterableMixinWorkaround.indexOfList(this, element, start);
-  }
-
-  int lastIndexOf(Object element, [int start]) {
-    return IterableMixinWorkaround.lastIndexOfList(this, element, start);
-  }
-
-  bool contains(Object other) {
-    for (int i = 0; i < length; i++) {
-      if (this[i] == other) return true;
-    }
-    return false;
-  }
-
-  bool get isEmpty => length == 0;
-
-  bool get isNotEmpty => !isEmpty;
-
-  String toString() => ListBase.listToString(this);
-
-  List<E> toList({ bool growable: true }) {
-    if (growable) {
-      return new JSArray<E>.markGrowable(JS('', '#.slice()', this));
-    } else {
-      return new JSArray<E>.markFixed(JS('', '#.slice()', this));
-    }
-  }
-
-  Set<E> toSet() => new Set<E>.from(this);
-
-  Iterator<E> get iterator => new ListIterator<E>(this);
-
-  int get hashCode => Primitives.objectHashCode(this);
-
-  int get length => JS('JSUInt32', r'#.length', this);
-
-  void set length(int newLength) {
-    if (newLength is !int) throw new ArgumentError(newLength);
-    if (newLength < 0) throw new RangeError.value(newLength);
-    checkGrowable('set length');
-    JS('void', r'#.length = #', this, newLength);
-  }
-
-  E operator [](int index) {
-    if (index is !int) throw new ArgumentError(index);
-    if (index >= length || index < 0) throw new RangeError.value(index);
-    return JS('var', '#[#]', this, index);
-  }
-
-  void operator []=(int index, E value) {
-    checkMutable('indexed set');
-    if (index is !int) throw new ArgumentError(index);
-    if (index >= length || index < 0) throw new RangeError.value(index);
-    JS('void', r'#[#] = #', this, index, value);
-  }
-
-  Map<int, E> asMap() {
-    return new IterableMixinWorkaround<E>().asMapList(this);
-  }
-}
-
-/**
- * Dummy subclasses that allow the backend to track more precise
- * information about arrays through their type. The CPA type inference
- * relies on the fact that these classes do not override [] nor []=.
- */
-class JSMutableArray<E> extends JSArray<E> implements JSMutableIndexable {}
-class JSFixedArray<E> extends JSMutableArray<E> {}
-class JSExtendableArray<E> extends JSMutableArray<E> {}
diff --git a/sdk/lib/_internal/lib/js_helper.dart b/sdk/lib/_internal/lib/js_helper.dart
deleted file mode 100644
index 45d38b1..0000000
--- a/sdk/lib/_internal/lib/js_helper.dart
+++ /dev/null
@@ -1,3361 +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.
-
-library _js_helper;
-
-import 'dart:collection';
-import 'dart:_isolate_helper' show
-    IsolateNatives,
-    leaveJsAsync,
-    enterJsAsync,
-    isWorker;
-
-import 'dart:async' show Future, DeferredLoadException, Completer;
-
-import 'dart:_foreign_helper' show
-    DART_CLOSURE_TO_JS,
-    JS,
-    JS_CALL_IN_ISOLATE,
-    JS_CONST,
-    JS_CURRENT_ISOLATE,
-    JS_CURRENT_ISOLATE_CONTEXT,
-    JS_DART_OBJECT_CONSTRUCTOR,
-    JS_EFFECT,
-    JS_FUNCTION_CLASS_NAME,
-    JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG,
-    JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG,
-    JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG,
-    JS_FUNCTION_TYPE_RETURN_TYPE_TAG,
-    JS_FUNCTION_TYPE_TAG,
-    JS_FUNCTION_TYPE_VOID_RETURN_TAG,
-    JS_GET_NAME,
-    JS_GET_FLAG,
-    JS_HAS_EQUALS,
-    JS_IS_INDEXABLE_FIELD_NAME,
-    JS_NULL_CLASS_NAME,
-    JS_OBJECT_CLASS_NAME,
-    JS_OPERATOR_AS_PREFIX,
-    JS_OPERATOR_IS_PREFIX,
-    JS_SIGNATURE_NAME,
-    JS_STRING_CONCAT,
-    RAW_DART_FUNCTION_REF;
-
-import 'dart:_interceptors';
-import 'dart:_internal' as _symbol_dev;
-import 'dart:_internal' show MappedIterable;
-
-import 'dart:_js_names' show
-    extractKeys,
-    mangledNames,
-    unmangleGlobalNameIfPreservedAnyways,
-    unmangleAllIdentifiersIfPreservedAnyways;
-
-part 'annotations.dart';
-part 'constant_map.dart';
-part 'native_helper.dart';
-part 'regexp_helper.dart';
-part 'string_helper.dart';
-part 'js_rti.dart';
-
-class _Patch {
-  const _Patch();
-}
-
-const _Patch patch = const _Patch();
-
-/// No-op method that is called to inform the compiler that preambles might
-/// be needed when executing the resulting JS file in a command-line
-/// JS engine.
-requiresPreamble() {}
-
-bool isJsIndexable(var object, var record) {
-  if (record != null) {
-    var result = dispatchRecordIndexability(record);
-    if (result != null) return result;
-  }
-  return object is JavaScriptIndexingBehavior;
-}
-
-String S(value) {
-  if (value is String) return value;
-  if (value is num) {
-    if (value != 0) {
-      // ""+x is faster than String(x) for integers on most browsers.
-      return JS('String', r'"" + (#)', value);
-    }
-  } else if (true == value) {
-    return 'true';
-  } else if (false == value) {
-    return 'false';
-  } else if (value == null) {
-    return 'null';
-  }
-  var res = value.toString();
-  if (res is !String) throw new ArgumentError(value);
-  return res;
-}
-
-createInvocationMirror(String name, internalName, kind, arguments,
-                       argumentNames) {
-  return new JSInvocationMirror(name,
-                                internalName,
-                                kind,
-                                arguments,
-                                argumentNames);
-}
-
-createUnmangledInvocationMirror(Symbol symbol, internalName, kind, arguments,
-                                argumentNames) {
-  return new JSInvocationMirror(symbol,
-                                internalName,
-                                kind,
-                                arguments,
-                                argumentNames);
-}
-
-void throwInvalidReflectionError(String memberName) {
-  throw new UnsupportedError("Can't use '$memberName' in reflection "
-      "because it is not included in a @MirrorsUsed annotation.");
-}
-
-/// Helper to print the given method information to the console the first
-/// time it is called with it.
-@NoInline()
-void traceHelper(String method) {
-  if (JS('bool', '!this.cache')) {
-    JS('', 'this.cache = Object.create(null)');
-  }
-  if (JS('bool', '!this.cache[#]', method)) {
-    JS('', 'console.log(#)', method);
-    JS('', 'this.cache[#] = true', method);
-  }
-}
-
-class JSInvocationMirror implements Invocation {
-  static const METHOD = 0;
-  static const GETTER = 1;
-  static const SETTER = 2;
-
-  /// When [_memberName] is a String, it holds the mangled name of this
-  /// invocation.  When it is a Symbol, it holds the unmangled name.
-  var /* String or Symbol */ _memberName;
-  final String _internalName;
-  final int _kind;
-  final List _arguments;
-  final List _namedArgumentNames;
-  /** Map from argument name to index in _arguments. */
-  Map<String, dynamic> _namedIndices = null;
-
-  JSInvocationMirror(this._memberName,
-                     this._internalName,
-                     this._kind,
-                     this._arguments,
-                     this._namedArgumentNames);
-
-  Symbol get memberName {
-    if (_memberName is Symbol) return _memberName;
-    String name = _memberName;
-    String unmangledName = mangledNames[name];
-    if (unmangledName != null) {
-      name = unmangledName.split(':')[0];
-    } else {
-      if (mangledNames[_internalName] == null) {
-        print("Warning: '$name' is used reflectively but not in MirrorsUsed. "
-              "This will break minified code.");
-      }
-    }
-    _memberName = new _symbol_dev.Symbol.unvalidated(name);
-    return _memberName;
-  }
-
-  bool get isMethod => _kind == METHOD;
-  bool get isGetter => _kind == GETTER;
-  bool get isSetter => _kind == SETTER;
-  bool get isAccessor => _kind != METHOD;
-
-  List get positionalArguments {
-    if (isGetter) return const [];
-    var argumentCount = _arguments.length - _namedArgumentNames.length;
-    if (argumentCount == 0) return const [];
-    var list = [];
-    for (var index = 0 ; index < argumentCount ; index++) {
-      list.add(_arguments[index]);
-    }
-    return makeLiteralListConst(list);
-  }
-
-  Map<Symbol, dynamic> get namedArguments {
-    // TODO: Make maps const (issue 10471)
-    if (isAccessor) return <Symbol, dynamic>{};
-    int namedArgumentCount = _namedArgumentNames.length;
-    int namedArgumentsStartIndex = _arguments.length - namedArgumentCount;
-    if (namedArgumentCount == 0) return <Symbol, dynamic>{};
-    var map = new Map<Symbol, dynamic>();
-    for (int i = 0; i < namedArgumentCount; i++) {
-      map[new _symbol_dev.Symbol.unvalidated(_namedArgumentNames[i])] =
-          _arguments[namedArgumentsStartIndex + i];
-    }
-    return map;
-  }
-
-  _getCachedInvocation(Object object) {
-    var interceptor = getInterceptor(object);
-    var receiver = object;
-    var name = _internalName;
-    var arguments = _arguments;
-    // TODO(ngeoffray): If this functionality ever become performance
-    // critical, we might want to dynamically change [interceptedNames]
-    // to be a JavaScript object with intercepted names as property
-    // instead of a JavaScript array.
-    // TODO(floitsch): we already add stubs (tear-off getters) as properties
-    // in init.interceptedNames.
-    // Finish the transition and always use the object as hashtable.
-    bool isIntercepted =
-        JS("bool",
-            'Object.prototype.hasOwnProperty.call(init.interceptedNames, #) ||'
-            '#.indexOf(#) !== -1',
-            name, interceptedNames, name);
-    if (isIntercepted) {
-      receiver = interceptor;
-      if (JS('bool', '# === #', object, interceptor)) {
-        interceptor = null;
-      }
-    } else {
-      interceptor = null;
-    }
-    bool isCatchAll = false;
-    var method = JS('var', '#[#]', receiver, name);
-    if (JS('bool', 'typeof # != "function"', method) ) {
-      String baseName = _symbol_dev.Symbol.getName(memberName);
-      method = JS('', '#[# + "*"]', receiver, baseName);
-      if (method == null) {
-        interceptor = getInterceptor(object);
-        method = JS('', '#[# + "*"]', interceptor, baseName);
-        if (method != null) {
-          isIntercepted = true;
-          receiver = interceptor;
-        } else {
-          interceptor = null;
-        }
-      }
-      isCatchAll = true;
-    }
-    if (JS('bool', 'typeof # == "function"', method)) {
-      if (isCatchAll) {
-        return new CachedCatchAllInvocation(
-            name, method, isIntercepted, interceptor);
-      } else {
-        return new CachedInvocation(name, method, isIntercepted, interceptor);
-      }
-    } else {
-      // In this case, receiver doesn't implement name.  So we should
-      // invoke noSuchMethod instead (which will often throw a
-      // NoSuchMethodError).
-      return new CachedNoSuchMethodInvocation(interceptor);
-    }
-  }
-
-  /// This method is called by [InstanceMirror.delegate].
-  static invokeFromMirror(JSInvocationMirror invocation, Object victim) {
-    var cached = invocation._getCachedInvocation(victim);
-    if (cached.isNoSuchMethod) {
-      return cached.invokeOn(victim, invocation);
-    } else {
-      return cached.invokeOn(victim, invocation._arguments);
-    }
-  }
-
-  static getCachedInvocation(JSInvocationMirror invocation, Object victim) {
-    return invocation._getCachedInvocation(victim);
-  }
-}
-
-class CachedInvocation {
-  // The mangled name of this invocation.
-  String mangledName;
-
-  /// The JS function to call.
-  var jsFunction;
-
-  /// True if this is an intercepted call.
-  bool isIntercepted;
-
-  /// Non-null interceptor if this is an intercepted call through an
-  /// [Interceptor].
-  Interceptor cachedInterceptor;
-
-  CachedInvocation(this.mangledName,
-                   this.jsFunction,
-                   this.isIntercepted,
-                   this.cachedInterceptor);
-
-  bool get isNoSuchMethod => false;
-  bool get isGetterStub => JS("bool", "!!#.\$getterStub", jsFunction);
-
-  /// Applies [jsFunction] to [victim] with [arguments].
-  /// Users of this class must take care to check the arguments first.
-  invokeOn(Object victim, List arguments) {
-    var receiver = victim;
-    if (!isIntercepted) {
-      if (arguments is! JSArray) arguments = new List.from(arguments);
-    } else {
-      arguments = [victim]..addAll(arguments);
-      if (cachedInterceptor != null) receiver = cachedInterceptor;
-    }
-    return JS("var", "#.apply(#, #)", jsFunction, receiver, arguments);
-  }
-}
-
-class CachedCatchAllInvocation extends CachedInvocation {
-  final ReflectionInfo info;
-
-  CachedCatchAllInvocation(String name,
-                           jsFunction,
-                           bool isIntercepted,
-                           Interceptor cachedInterceptor)
-      : info = new ReflectionInfo(jsFunction),
-        super(name, jsFunction, isIntercepted, cachedInterceptor);
-
-  bool get isGetterStub => false;
-
-  invokeOn(Object victim, List arguments) {
-    var receiver = victim;
-    int providedArgumentCount;
-    int fullParameterCount =
-        info.requiredParameterCount + info.optionalParameterCount;
-    if (!isIntercepted) {
-      if (arguments is JSArray) {
-        providedArgumentCount = arguments.length;
-        // If we need to add extra arguments before calling, we have
-        // to copy the arguments array.
-        if (providedArgumentCount < fullParameterCount) {
-          arguments = new List.from(arguments);
-        }
-      } else {
-        arguments = new List.from(arguments);
-        providedArgumentCount = arguments.length;
-      }
-    } else {
-      arguments = [victim]..addAll(arguments);
-      if (cachedInterceptor != null) receiver = cachedInterceptor;
-      providedArgumentCount = arguments.length - 1;
-    }
-    if (info.areOptionalParametersNamed &&
-        (providedArgumentCount > info.requiredParameterCount)) {
-      throw new UnimplementedNoSuchMethodError(
-          "Invocation of unstubbed method '${info.reflectionName}'"
-          " with ${arguments.length} arguments.");
-    } else if (providedArgumentCount < info.requiredParameterCount) {
-      throw new UnimplementedNoSuchMethodError(
-          "Invocation of unstubbed method '${info.reflectionName}'"
-          " with $providedArgumentCount arguments (too few).");
-    } else if (providedArgumentCount > fullParameterCount) {
-      throw new UnimplementedNoSuchMethodError(
-          "Invocation of unstubbed method '${info.reflectionName}'"
-          " with $providedArgumentCount arguments (too many).");
-    }
-    for (int i = providedArgumentCount; i < fullParameterCount; i++) {
-      arguments.add(getMetadata(info.defaultValue(i)));
-    }
-    return JS("var", "#.apply(#, #)", jsFunction, receiver, arguments);
-  }
-}
-
-class CachedNoSuchMethodInvocation {
-  /// Non-null interceptor if this is an intercepted call through an
-  /// [Interceptor].
-  var interceptor;
-
-  CachedNoSuchMethodInvocation(this.interceptor);
-
-  bool get isNoSuchMethod => true;
-  bool get isGetterStub => false;
-
-  invokeOn(Object victim, Invocation invocation) {
-    var receiver = (interceptor == null) ? victim : interceptor;
-    return receiver.noSuchMethod(invocation);
-  }
-}
-
-class ReflectionInfo {
-  static const int REQUIRED_PARAMETERS_INFO = 0;
-  static const int OPTIONAL_PARAMETERS_INFO = 1;
-  static const int FUNCTION_TYPE_INDEX = 2;
-  static const int FIRST_DEFAULT_ARGUMENT = 3;
-
-  /// A JavaScript function object.
-  final jsFunction;
-
-  /// Raw reflection information.
-  final List data;
-
-  /// Is this a getter or a setter.
-  final bool isAccessor;
-
-  /// Number of required parameters.
-  final int requiredParameterCount;
-
-  /// Number of optional parameters.
-  final int optionalParameterCount;
-
-  /// Are optional parameters named.
-  final bool areOptionalParametersNamed;
-
-  /// Either an index to the function type in [:init.metadata:] or a JavaScript
-  /// function object which can compute such a type (presumably due to free
-  /// type variables).
-  final functionType;
-
-  List cachedSortedIndices;
-
-  ReflectionInfo.internal(this.jsFunction,
-                          this.data,
-                          this.isAccessor,
-                          this.requiredParameterCount,
-                          this.optionalParameterCount,
-                          this.areOptionalParametersNamed,
-                          this.functionType);
-
-  factory ReflectionInfo(jsFunction) {
-    List data = JS('JSExtendableArray|Null', r'#.$reflectionInfo', jsFunction);
-    if (data == null) return null;
-    data = JSArray.markFixedList(data);
-
-    int requiredParametersInfo =
-        JS('int', '#[#]', data, REQUIRED_PARAMETERS_INFO);
-    int requiredParameterCount = JS('int', '# >> 1', requiredParametersInfo);
-    bool isAccessor = (requiredParametersInfo & 1) == 1;
-
-    int optionalParametersInfo =
-        JS('int', '#[#]', data, OPTIONAL_PARAMETERS_INFO);
-    int optionalParameterCount = JS('int', '# >> 1', optionalParametersInfo);
-    bool areOptionalParametersNamed = (optionalParametersInfo & 1) == 1;
-
-    var functionType = JS('', '#[#]', data, FUNCTION_TYPE_INDEX);
-    return new ReflectionInfo.internal(
-        jsFunction, data, isAccessor, requiredParameterCount,
-        optionalParameterCount, areOptionalParametersNamed, functionType);
-  }
-
-  String parameterName(int parameter) {
-    int metadataIndex;
-    if (JS_GET_FLAG('MUST_RETAIN_METADATA')) {
-      metadataIndex = JS('int', '#[2 * # + # + #]', data,
-          parameter, optionalParameterCount, FIRST_DEFAULT_ARGUMENT);
-    } else {
-      metadataIndex = JS('int', '#[# + # + #]', data,
-          parameter, optionalParameterCount, FIRST_DEFAULT_ARGUMENT);
-    }
-    return JS('String', 'init.metadata[#]', metadataIndex);
-  }
-
-  List<int> parameterMetadataAnnotations(int parameter) {
-    if (!JS_GET_FLAG('MUST_RETAIN_METADATA')) {
-      throw new StateError('metadata has not been preserved');
-    } else {
-      return JS('', '#[2 * # + # + # + 1]', data, parameter,
-          optionalParameterCount, FIRST_DEFAULT_ARGUMENT);
-    }
-  }
-
-  int defaultValue(int parameter) {
-    if (parameter < requiredParameterCount) return null;
-    return JS('int', '#[# + # - #]', data,
-              FIRST_DEFAULT_ARGUMENT, parameter, requiredParameterCount);
-  }
-
-  /// Returns the default value of the [parameter]th entry of the list of
-  /// parameters sorted by name.
-  int defaultValueInOrder(int parameter) {
-    if (parameter < requiredParameterCount) return null;
-
-    if (!areOptionalParametersNamed || optionalParameterCount == 1) {
-      return defaultValue(parameter);
-    }
-
-    int index = sortedIndex(parameter - requiredParameterCount);
-    return defaultValue(index);
-  }
-
-  /// Returns the default value of the [parameter]th entry of the list of
-  /// parameters sorted by name.
-  String parameterNameInOrder(int parameter) {
-    if (parameter < requiredParameterCount) return null;
-
-    if (!areOptionalParametersNamed ||
-        optionalParameterCount == 1) {
-      return parameterName(parameter);
-    }
-
-    int index = sortedIndex(parameter - requiredParameterCount);
-    return parameterName(index);
-  }
-
-  /// Computes the index of the parameter in the list of named parameters sorted
-  /// by their name.
-  int sortedIndex(int unsortedIndex) {
-    if (cachedSortedIndices == null) {
-      // TODO(karlklose): cache this between [ReflectionInfo] instances or cache
-      // [ReflectionInfo] instances by [jsFunction].
-      cachedSortedIndices = new List(optionalParameterCount);
-      Map<String, int> positions = <String, int>{};
-      for (int i = 0; i < optionalParameterCount; i++) {
-        int index = requiredParameterCount + i;
-        positions[parameterName(index)] = index;
-      }
-      int index = 0;
-      (positions.keys.toList()..sort()).forEach((String name) {
-        cachedSortedIndices[index++] = positions[name];
-      });
-    }
-    return cachedSortedIndices[unsortedIndex];
-  }
-
-  @NoInline()
-  computeFunctionRti(jsConstructor) {
-    if (JS('bool', 'typeof # == "number"', functionType)) {
-      return getMetadata(functionType);
-    } else if (JS('bool', 'typeof # == "function"', functionType)) {
-      var fakeInstance = JS('', 'new #()', jsConstructor);
-      setRuntimeTypeInfo(
-          fakeInstance, JS('JSExtendableArray', '#["<>"]', fakeInstance));
-      return JS('=Object|Null', r'#.apply({$receiver:#})',
-                functionType, fakeInstance);
-    } else {
-      throw new RuntimeError('Unexpected function type');
-    }
-  }
-
-  String get reflectionName => JS('String', r'#.$reflectionName', jsFunction);
-}
-
-getMetadata(int index) => JS('', 'init.metadata[#]', index);
-
-class Primitives {
-  /// Isolate-unique ID for caching [JsClosureMirror.function].
-  /// Note the initial value is used by the first isolate (or if there are no
-  /// isolates), new isolates will update this value to avoid conflicts by
-  /// calling [initializeStatics].
-  static String mirrorFunctionCacheName = '\$cachedFunction';
-
-  /// Isolate-unique ID for caching [JsInstanceMirror._invoke].
-  static String mirrorInvokeCacheName = '\$cachedInvocation';
-
-  /// Called when creating a new isolate (see _IsolateContext constructor in
-  /// isolate_helper.dart).
-  /// Please don't add complicated code to this method, as it will impact
-  /// start-up performance.
-  static void initializeStatics(int id) {
-    // Benchmarking shows significant performance improvements if this is a
-    // fixed value.
-    mirrorFunctionCacheName += '_$id';
-    mirrorInvokeCacheName += '_$id';
-  }
-
-  static int objectHashCode(object) {
-    int hash = JS('int|Null', r'#.$identityHash', object);
-    if (hash == null) {
-      hash = JS('int', '(Math.random() * 0x3fffffff) | 0');
-      JS('void', r'#.$identityHash = #', object, hash);
-    }
-    return JS('int', '#', hash);
-  }
-
-  static _throwFormatException(String string) {
-    throw new FormatException(string);
-  }
-
-  static int parseInt(String source,
-                      int radix,
-                      int handleError(String source)) {
-    if (handleError == null) handleError = _throwFormatException;
-
-    checkString(source);
-    var match = JS('JSExtendableArray|Null',
-        r'/^\s*[+-]?((0x[a-f0-9]+)|(\d+)|([a-z0-9]+))\s*$/i.exec(#)',
-        source);
-    int digitsIndex = 1;
-    int hexIndex = 2;
-    int decimalIndex = 3;
-    int nonDecimalHexIndex = 4;
-    if (radix == null) {
-      radix = 10;
-      if (match != null) {
-        if (match[hexIndex] != null) {
-          // Cannot fail because we know that the digits are all hex.
-          return JS('num', r'parseInt(#, 16)', source);
-        }
-        if (match[decimalIndex] != null) {
-          // Cannot fail because we know that the digits are all decimal.
-          return JS('num', r'parseInt(#, 10)', source);
-        }
-        return handleError(source);
-      }
-    } else {
-      if (radix is! int) throw new ArgumentError("Radix is not an integer");
-      if (radix < 2 || radix > 36) {
-        throw new RangeError("Radix $radix not in range 2..36");
-      }
-      if (match != null) {
-        if (radix == 10 && match[decimalIndex] != null) {
-          // Cannot fail because we know that the digits are all decimal.
-          return JS('num', r'parseInt(#, 10)', source);
-        }
-        if (radix < 10 || match[decimalIndex] == null) {
-          // We know that the characters must be ASCII as otherwise the
-          // regexp wouldn't have matched. Lowercasing by doing `| 0x20` is thus
-          // guaranteed to be a safe operation, since it preserves digits
-          // and lower-cases ASCII letters.
-          int maxCharCode;
-          if (radix <= 10) {
-            // Allow all digits less than the radix. For example 0, 1, 2 for
-            // radix 3.
-            // "0".codeUnitAt(0) + radix - 1;
-            maxCharCode = 0x30 + radix - 1;
-          } else {
-            // Letters are located after the digits in ASCII. Therefore we
-            // only check for the character code. The regexp above made already
-            // sure that the string does not contain anything but digits or
-            // letters.
-            // "a".codeUnitAt(0) + (radix - 10) - 1;
-            maxCharCode = 0x61 + radix - 10 - 1;
-          }
-          String digitsPart = match[digitsIndex];
-          for (int i = 0; i < digitsPart.length; i++) {
-            int characterCode = digitsPart.codeUnitAt(0) | 0x20;
-            if (digitsPart.codeUnitAt(i) > maxCharCode) {
-              return handleError(source);
-            }
-          }
-        }
-      }
-    }
-    if (match == null) return handleError(source);
-    return JS('num', r'parseInt(#, #)', source, radix);
-  }
-
-  static double parseDouble(String source, double handleError(String source)) {
-    checkString(source);
-    if (handleError == null) handleError = _throwFormatException;
-    // Notice that JS parseFloat accepts garbage at the end of the string.
-    // Accept only:
-    // - [+/-]NaN
-    // - [+/-]Infinity
-    // - a Dart double literal
-    // We do allow leading or trailing whitespace.
-    if (!JS('bool',
-            r'/^\s*[+-]?(?:Infinity|NaN|'
-                r'(?:\.\d+|\d+(?:\.\d*)?)(?:[eE][+-]?\d+)?)\s*$/.test(#)',
-            source)) {
-      return handleError(source);
-    }
-    var result = JS('num', r'parseFloat(#)', source);
-    if (result.isNaN) {
-      var trimmed = source.trim();
-      if (trimmed == 'NaN' || trimmed == '+NaN' || trimmed == '-NaN') {
-        return result;
-      }
-      return handleError(source);
-    }
-    return result;
-  }
-
-  /** [: r"$".codeUnitAt(0) :] */
-  static const int DOLLAR_CHAR_VALUE = 36;
-
-  /// Creates a string containing the complete type for the class [className]
-  /// with the given type arguments.
-  ///
-  /// In minified mode, uses the unminified names if available.
-  static String formatType(String className, List typeArguments) {
-    return unmangleAllIdentifiersIfPreservedAnyways
-        ('$className${joinArguments(typeArguments, 0)}');
-  }
-
-  /// Returns the type of [object] as a string (including type arguments).
-  ///
-  /// In minified mode, uses the unminified names if available.
-  static String objectTypeName(Object object) {
-    String name = constructorNameFallback(getInterceptor(object));
-    if (name == 'Object') {
-      // Try to decompile the constructor by turning it into a string and get
-      // the name out of that. If the decompiled name is a string containing an
-      // identifier, we use that instead of the very generic 'Object'.
-      var decompiled =
-          JS('var', r'#.match(/^\s*function\s*(\S*)\s*\(/)[1]',
-              JS('var', r'String(#.constructor)', object));
-      if (decompiled is String)
-        if (JS('bool', r'/^\w+$/.test(#)', decompiled))
-          name = decompiled;
-    }
-    // TODO(kasperl): If the namer gave us a fresh global name, we may
-    // want to remove the numeric suffix that makes it unique too.
-    if (name.length > 1 && identical(name.codeUnitAt(0), DOLLAR_CHAR_VALUE)) {
-      name = name.substring(1);
-    }
-    return formatType(name, getRuntimeTypeInfo(object));
-  }
-
-  /// In minified mode, uses the unminified names if available.
-  static String objectToString(Object object) {
-    String name = objectTypeName(object);
-    return "Instance of '$name'";
-  }
-
-  static num dateNow() => JS('num', r'Date.now()');
-
-  static void initTicker() {
-    if (timerFrequency != null) return;
-    // Start with low-resolution. We overwrite the fields if we find better.
-    timerFrequency = 1000;
-    timerTicks = dateNow;
-    if (JS('bool', 'typeof window == "undefined"')) return;
-    var window = JS('var', 'window');
-    if (window == null) return;
-    var performance = JS('var', '#.performance', window);
-    if (performance == null) return;
-    if (JS('bool', 'typeof #.now != "function"', performance)) return;
-    timerFrequency = 1000000;
-    timerTicks = () => (1000 * JS('num', '#.now()', performance)).floor();
-  }
-
-  static int timerFrequency;
-  static Function timerTicks;
-
-  static bool get isD8 {
-    return JS('bool',
-              'typeof version == "function"'
-              ' && typeof os == "object" && "system" in os');
-  }
-
-  static bool get isJsshell {
-    return JS('bool',
-              'typeof version == "function" && typeof system == "function"');
-  }
-
-  static String currentUri() {
-    requiresPreamble();
-    // In a browser return self.location.href.
-    if (JS('bool', '!!self.location')) {
-      return JS('String', 'self.location.href');
-    }
-
-    return null;
-  }
-
-  // This is to avoid stack overflows due to very large argument arrays in
-  // apply().  It fixes http://dartbug.com/6919
-  static String _fromCharCodeApply(List<int> array) {
-    String result = "";
-    const kMaxApply = 500;
-    int end = array.length;
-    for (var i = 0; i < end; i += kMaxApply) {
-      var subarray;
-      if (end <= kMaxApply) {
-        subarray = array;
-      } else {
-        subarray = JS('JSExtendableArray', r'#.slice(#, #)', array,
-                      i, i + kMaxApply < end ? i + kMaxApply : end);
-      }
-      result = JS('String', '# + String.fromCharCode.apply(#, #)',
-                  result, null, subarray);
-    }
-    return result;
-  }
-
-  static String stringFromCodePoints(codePoints) {
-    List<int> a = <int>[];
-    for (var i in codePoints) {
-      if (i is !int) throw new ArgumentError(i);
-      if (i <= 0xffff) {
-        a.add(i);
-      } else if (i <= 0x10ffff) {
-        a.add(0xd800 + ((((i - 0x10000) >> 10) & 0x3ff)));
-        a.add(0xdc00 + (i & 0x3ff));
-      } else {
-        throw new ArgumentError(i);
-      }
-    }
-    return _fromCharCodeApply(a);
-  }
-
-  static String stringFromCharCodes(charCodes) {
-    for (var i in charCodes) {
-      if (i is !int) throw new ArgumentError(i);
-      if (i < 0) throw new ArgumentError(i);
-      if (i > 0xffff) return stringFromCodePoints(charCodes);
-    }
-    return _fromCharCodeApply(charCodes);
-  }
-
-  static String stringFromCharCode(charCode) {
-    if (0 <= charCode) {
-      if (charCode <= 0xffff) {
-        return JS('String', 'String.fromCharCode(#)', charCode);
-      }
-      if (charCode <= 0x10ffff) {
-        var bits = charCode - 0x10000;
-        var low = 0xDC00 | (bits & 0x3ff);
-        var high = 0xD800 | (bits >> 10);
-        return  JS('String', 'String.fromCharCode(#, #)', high, low);
-      }
-    }
-    throw new RangeError.range(charCode, 0, 0x10ffff);
-  }
-
-  static String stringConcatUnchecked(String string1, String string2) {
-    return JS_STRING_CONCAT(string1, string2);
-  }
-
-  static String flattenString(String str) {
-    return JS('', "#.charCodeAt(0) == 0 ? # : #", str, str, str);
-  }
-
-  static String getTimeZoneName(receiver) {
-    // Firefox and Chrome emit the timezone in parenthesis.
-    // Example: "Wed May 16 2012 21:13:00 GMT+0200 (CEST)".
-    // We extract this name using a regexp.
-    var d = lazyAsJsDate(receiver);
-    List match = JS('JSArray|Null', r'/\((.*)\)/.exec(#.toString())', d);
-    if (match != null) return match[1];
-
-    // Internet Explorer 10+ emits the zone name without parenthesis:
-    // Example: Thu Oct 31 14:07:44 PDT 2013
-    match = JS('JSArray|Null',
-                // Thu followed by a space.
-                r'/^[A-Z,a-z]{3}\s'
-                // Oct 31 followed by space.
-                r'[A-Z,a-z]{3}\s\d+\s'
-                // Time followed by a space.
-                r'\d{2}:\d{2}:\d{2}\s'
-                // The time zone name followed by a space.
-                r'([A-Z]{3,5})\s'
-                // The year.
-                r'\d{4}$/'
-                '.exec(#.toString())',
-                d);
-    if (match != null) return match[1];
-
-    // IE 9 and Opera don't provide the zone name. We fall back to emitting the
-    // UTC/GMT offset.
-    // Example (IE9): Wed Nov 20 09:51:00 UTC+0100 2013
-    //       (Opera): Wed Nov 20 2013 11:03:38 GMT+0100
-    match = JS('JSArray|Null', r'/(?:GMT|UTC)[+-]\d{4}/.exec(#.toString())', d);
-    if (match != null) return match[0];
-    return "";
-  }
-
-  static int getTimeZoneOffsetInMinutes(receiver) {
-    // Note that JS and Dart disagree on the sign of the offset.
-    return -JS('int', r'#.getTimezoneOffset()', lazyAsJsDate(receiver));
-  }
-
-  static valueFromDecomposedDate(years, month, day, hours, minutes, seconds,
-                                 milliseconds, isUtc) {
-    final int MAX_MILLISECONDS_SINCE_EPOCH = 8640000000000000;
-    checkInt(years);
-    checkInt(month);
-    checkInt(day);
-    checkInt(hours);
-    checkInt(minutes);
-    checkInt(seconds);
-    checkInt(milliseconds);
-    checkBool(isUtc);
-    var jsMonth = month - 1;
-    var value;
-    if (isUtc) {
-      value = JS('num', r'Date.UTC(#, #, #, #, #, #, #)',
-                 years, jsMonth, day, hours, minutes, seconds, milliseconds);
-    } else {
-      value = JS('num', r'new Date(#, #, #, #, #, #, #).valueOf()',
-                 years, jsMonth, day, hours, minutes, seconds, milliseconds);
-    }
-    if (value.isNaN ||
-        value < -MAX_MILLISECONDS_SINCE_EPOCH ||
-        value > MAX_MILLISECONDS_SINCE_EPOCH) {
-      return null;
-    }
-    if (years <= 0 || years < 100) return patchUpY2K(value, years, isUtc);
-    return value;
-  }
-
-  static patchUpY2K(value, years, isUtc) {
-    var date = JS('', r'new Date(#)', value);
-    if (isUtc) {
-      JS('num', r'#.setUTCFullYear(#)', date, years);
-    } else {
-      JS('num', r'#.setFullYear(#)', date, years);
-    }
-    return JS('num', r'#.valueOf()', date);
-  }
-
-  // Lazily keep a JS Date stored in the JS object.
-  static lazyAsJsDate(receiver) {
-    if (JS('bool', r'#.date === (void 0)', receiver)) {
-      JS('void', r'#.date = new Date(#)', receiver,
-         receiver.millisecondsSinceEpoch);
-    }
-    return JS('var', r'#.date', receiver);
-  }
-
-  // The getters for date and time parts below add a positive integer to ensure
-  // that the result is really an integer, because the JavaScript implementation
-  // may return -0.0 instead of 0.
-
-  static getYear(receiver) {
-    return (receiver.isUtc)
-      ? JS('int', r'(#.getUTCFullYear() + 0)', lazyAsJsDate(receiver))
-      : JS('int', r'(#.getFullYear() + 0)', lazyAsJsDate(receiver));
-  }
-
-  static getMonth(receiver) {
-    return (receiver.isUtc)
-      ? JS('int', r'#.getUTCMonth() + 1', lazyAsJsDate(receiver))
-      : JS('int', r'#.getMonth() + 1', lazyAsJsDate(receiver));
-  }
-
-  static getDay(receiver) {
-    return (receiver.isUtc)
-      ? JS('int', r'(#.getUTCDate() + 0)', lazyAsJsDate(receiver))
-      : JS('int', r'(#.getDate() + 0)', lazyAsJsDate(receiver));
-  }
-
-  static getHours(receiver) {
-    return (receiver.isUtc)
-      ? JS('int', r'(#.getUTCHours() + 0)', lazyAsJsDate(receiver))
-      : JS('int', r'(#.getHours() + 0)', lazyAsJsDate(receiver));
-  }
-
-  static getMinutes(receiver) {
-    return (receiver.isUtc)
-      ? JS('int', r'(#.getUTCMinutes() + 0)', lazyAsJsDate(receiver))
-      : JS('int', r'(#.getMinutes() + 0)', lazyAsJsDate(receiver));
-  }
-
-  static getSeconds(receiver) {
-    return (receiver.isUtc)
-      ? JS('int', r'(#.getUTCSeconds() + 0)', lazyAsJsDate(receiver))
-      : JS('int', r'(#.getSeconds() + 0)', lazyAsJsDate(receiver));
-  }
-
-  static getMilliseconds(receiver) {
-    return (receiver.isUtc)
-      ? JS('int', r'(#.getUTCMilliseconds() + 0)', lazyAsJsDate(receiver))
-      : JS('int', r'(#.getMilliseconds() + 0)', lazyAsJsDate(receiver));
-  }
-
-  static getWeekday(receiver) {
-    int weekday = (receiver.isUtc)
-      ? JS('int', r'#.getUTCDay() + 0', lazyAsJsDate(receiver))
-      : JS('int', r'#.getDay() + 0', lazyAsJsDate(receiver));
-    // Adjust by one because JS weeks start on Sunday.
-    return (weekday + 6) % 7 + 1;
-  }
-
-  static valueFromDateString(str) {
-    if (str is !String) throw new ArgumentError(str);
-    var value = JS('num', r'Date.parse(#)', str);
-    if (value.isNaN) throw new ArgumentError(str);
-    return value;
-  }
-
-  static getProperty(object, key) {
-    if (object == null || object is bool || object is num || object is String) {
-      throw new ArgumentError(object);
-    }
-    return JS('var', '#[#]', object, key);
-  }
-
-  static void setProperty(object, key, value) {
-    if (object == null || object is bool || object is num || object is String) {
-      throw new ArgumentError(object);
-    }
-    JS('void', '#[#] = #', object, key, value);
-  }
-
-  static functionNoSuchMethod(function,
-                              List positionalArguments,
-                              Map<String, dynamic> namedArguments) {
-    int argumentCount = 0;
-    List arguments = [];
-    List namedArgumentList = [];
-
-    if (positionalArguments != null) {
-      argumentCount += positionalArguments.length;
-      arguments.addAll(positionalArguments);
-    }
-
-    String names = '';
-    if (namedArguments != null && !namedArguments.isEmpty) {
-      namedArguments.forEach((String name, argument) {
-        names = '$names\$$name';
-        namedArgumentList.add(name);
-        arguments.add(argument);
-        argumentCount++;
-      });
-    }
-
-    String selectorName =
-      '${JS_GET_NAME("CALL_PREFIX")}\$$argumentCount$names';
-
-    return function.noSuchMethod(
-        createUnmangledInvocationMirror(
-            #call,
-            selectorName,
-            JSInvocationMirror.METHOD,
-            arguments,
-            namedArgumentList));
-  }
-
-  static applyFunction(Function function,
-                       List positionalArguments,
-                       Map<String, dynamic> namedArguments) {
-    if (namedArguments != null && !namedArguments.isEmpty) {
-      // TODO(ahe): The following code can be shared with
-      // JsInstanceMirror.invoke.
-      var interceptor = getInterceptor(function);
-      var jsFunction = JS('', '#["call*"]', interceptor);
-
-      if (jsFunction == null) {
-        return functionNoSuchMethod(
-            function, positionalArguments, namedArguments);
-      }
-      ReflectionInfo info = new ReflectionInfo(jsFunction);
-      if (info == null || !info.areOptionalParametersNamed) {
-        return functionNoSuchMethod(
-            function, positionalArguments, namedArguments);
-      }
-
-      if (positionalArguments != null) {
-        positionalArguments = new List.from(positionalArguments);
-      } else {
-        positionalArguments = [];
-      }
-      // Check the number of positional arguments is valid.
-      if (info.requiredParameterCount != positionalArguments.length) {
-        return functionNoSuchMethod(
-            function, positionalArguments, namedArguments);
-      }
-      var defaultArguments = new Map();
-      for (int i = 0; i < info.optionalParameterCount; i++) {
-        int index = i + info.requiredParameterCount;
-        var parameterName = info.parameterNameInOrder(index);
-        var value = info.defaultValueInOrder(index);
-        var defaultValue = getMetadata(value);
-        defaultArguments[parameterName] = defaultValue;
-      }
-      bool bad = false;
-      namedArguments.forEach((String parameter, value) {
-        if (defaultArguments.containsKey(parameter)) {
-          defaultArguments[parameter] = value;
-        } else {
-          // Extraneous named argument.
-          bad = true;
-        }
-      });
-      if (bad) {
-        return functionNoSuchMethod(
-            function, positionalArguments, namedArguments);
-      }
-      positionalArguments.addAll(defaultArguments.values);
-      return JS('', '#.apply(#, #)', jsFunction, function, positionalArguments);
-    }
-
-    int argumentCount = 0;
-    List arguments = [];
-
-    if (positionalArguments != null) {
-      argumentCount += positionalArguments.length;
-      arguments.addAll(positionalArguments);
-    }
-
-    String selectorName = '${JS_GET_NAME("CALL_PREFIX")}\$$argumentCount';
-    var jsFunction = JS('var', '#[#]', function, selectorName);
-    if (jsFunction == null) {
-
-      // TODO(ahe): This might occur for optional arguments if there is no call
-      // selector with that many arguments.
-
-      return
-          functionNoSuchMethod(function, positionalArguments, namedArguments);
-    }
-    // We bound 'this' to [function] because of how we compile
-    // closures: escaped local variables are stored and accessed through
-    // [function].
-    return JS('var', '#.apply(#, #)', jsFunction, function, arguments);
-  }
-
-  static _mangledNameMatchesType(String mangledName, TypeImpl type) {
-    return JS('bool', '# == #', mangledName, type._typeName);
-  }
-
-  static bool identicalImplementation(a, b) {
-    return JS('bool', '# == null', a)
-      ? JS('bool', '# == null', b)
-      : JS('bool', '# === #', a, b);
-  }
-
-  static StackTrace extractStackTrace(Error error) {
-    return getTraceFromException(JS('', r'#.$thrownJsError', error));
-  }
-}
-
-/// Helper class for allocating and using JS object literals as caches.
-class JsCache {
-  /// Returns a JavaScript object suitable for use as a cache.
-  static allocate() {
-    var result = JS('=Object', 'Object.create(null)');
-    // Deleting a property makes V8 assume that it shouldn't create a hidden
-    // class for [result] and map transitions. Although these map transitions
-    // pay off if there are many cache hits for the same keys, it becomes
-    // really slow when there aren't many repeated hits.
-    JS('void', '#.x=0', result);
-    JS('void', 'delete #.x', result);
-    return result;
-  }
-
-  static fetch(cache, String key) {
-    return JS('', '#[#]', cache, key);
-  }
-
-  static void update(cache, String key, value) {
-    JS('void', '#[#] = #', cache, key, value);
-  }
-}
-
-/**
- * Called by generated code to throw an illegal-argument exception,
- * for example, if a non-integer index is given to an optimized
- * indexed access.
- */
-iae(argument) {
-  throw new ArgumentError(argument);
-}
-
-/**
- * Called by generated code to throw an index-out-of-range exception,
- * for example, if a bounds check fails in an optimized indexed
- * access.  This may also be called when the index is not an integer, in
- * which case it throws an illegal-argument exception instead, like
- * [iae], or when the receiver is null.
- */
-ioore(receiver, index) {
-  if (receiver == null) receiver.length; // Force a NoSuchMethodError.
-  if (index is !int) iae(index);
-  throw new RangeError.value(index);
-}
-
-stringLastIndexOfUnchecked(receiver, element, start)
-  => JS('int', r'#.lastIndexOf(#, #)', receiver, element, start);
-
-
-checkNull(object) {
-  if (object == null) throw new ArgumentError(null);
-  return object;
-}
-
-checkNum(value) {
-  if (value is !num) {
-    throw new ArgumentError(value);
-  }
-  return value;
-}
-
-checkInt(value) {
-  if (value is !int) {
-    throw new ArgumentError(value);
-  }
-  return value;
-}
-
-checkBool(value) {
-  if (value is !bool) {
-    throw new ArgumentError(value);
-  }
-  return value;
-}
-
-checkString(value) {
-  if (value is !String) {
-    throw new ArgumentError(value);
-  }
-  return value;
-}
-
-/**
- * Wrap the given Dart object and record a stack trace.
- *
- * The code in [unwrapException] deals with getting the original Dart
- * object out of the wrapper again.
- */
-@NoInline()
-wrapException(ex) {
-  if (ex == null) ex = new NullThrownError();
-  var wrapper = JS('', 'new Error()');
-  // [unwrapException] looks for the property 'dartException'.
-  JS('void', '#.dartException = #', wrapper, ex);
-
-  if (JS('bool', '"defineProperty" in Object')) {
-    // Define a JavaScript getter for 'message'. This is to work around V8 bug
-    // (https://code.google.com/p/v8/issues/detail?id=2519).  The default
-    // toString on Error returns the value of 'message' if 'name' is
-    // empty. Setting toString directly doesn't work, see the bug.
-    JS('void', 'Object.defineProperty(#, "message", { get: # })',
-       wrapper, DART_CLOSURE_TO_JS(toStringWrapper));
-    JS('void', '#.name = ""', wrapper);
-  } else {
-    // In the unlikely event the browser doesn't support Object.defineProperty,
-    // hope that it just calls toString.
-    JS('void', '#.toString = #', wrapper, DART_CLOSURE_TO_JS(toStringWrapper));
-  }
-
-  return wrapper;
-}
-
-/// Do not call directly.
-toStringWrapper() {
-  // This method gets installed as toString on a JavaScript object. Due to the
-  // weird scope rules of JavaScript, JS 'this' will refer to that object.
-  return JS('', r'this.dartException').toString();
-}
-
-/**
- * This wraps the exception and does the throw.  It is possible to call this in
- * a JS expression context, where the throw statement is not allowed.  Helpers
- * are never inlined, so we don't risk inlining the throw statement into an
- * expression context.
- */
-throwExpression(ex) {
-  JS('void', 'throw #', wrapException(ex));
-}
-
-makeLiteralListConst(list) {
-  JS('bool', r'#.immutable$list = #', list, true);
-  JS('bool', r'#.fixed$length = #', list, true);
-  return list;
-}
-
-throwRuntimeError(message) {
-  throw new RuntimeError(message);
-}
-
-throwAbstractClassInstantiationError(className) {
-  throw new AbstractClassInstantiationError(className);
-}
-
-
-/**
- * Helper class for building patterns recognizing native type errors.
- */
-class TypeErrorDecoder {
-  // Field names are private to help tree-shaking.
-
-  /// A regular expression which matches is matched against an error message.
-  final String _pattern;
-
-  /// The group index of "arguments" in [_pattern], or -1 if _pattern has no
-  /// match for "arguments".
-  final int _arguments;
-
-  /// The group index of "argumentsExpr" in [_pattern], or -1 if _pattern has
-  /// no match for "argumentsExpr".
-  final int _argumentsExpr;
-
-  /// The group index of "expr" in [_pattern], or -1 if _pattern has no match
-  /// for "expr".
-  final int _expr;
-
-  /// The group index of "method" in [_pattern], or -1 if _pattern has no match
-  /// for "method".
-  final int _method;
-
-  /// The group index of "receiver" in [_pattern], or -1 if _pattern has no
-  /// match for "receiver".
-  final int _receiver;
-
-  /// Pattern used to recognize a NoSuchMethodError error (and
-  /// possibly extract the method name).
-  static final TypeErrorDecoder noSuchMethodPattern =
-      extractPattern(provokeCallErrorOn(buildJavaScriptObject()));
-
-  /// Pattern used to recognize an "object not a closure" error (and
-  /// possibly extract the method name).
-  static final TypeErrorDecoder notClosurePattern =
-      extractPattern(provokeCallErrorOn(buildJavaScriptObjectWithNonClosure()));
-
-  /// Pattern used to recognize a NoSuchMethodError on JavaScript null
-  /// call.
-  static final TypeErrorDecoder nullCallPattern =
-      extractPattern(provokeCallErrorOn(JS('', 'null')));
-
-  /// Pattern used to recognize a NoSuchMethodError on JavaScript literal null
-  /// call.
-  static final TypeErrorDecoder nullLiteralCallPattern =
-      extractPattern(provokeCallErrorOnNull());
-
-  /// Pattern used to recognize a NoSuchMethodError on JavaScript
-  /// undefined call.
-  static final TypeErrorDecoder undefinedCallPattern =
-      extractPattern(provokeCallErrorOn(JS('', 'void 0')));
-
-  /// Pattern used to recognize a NoSuchMethodError on JavaScript literal
-  /// undefined call.
-  static final TypeErrorDecoder undefinedLiteralCallPattern =
-      extractPattern(provokeCallErrorOnUndefined());
-
-  /// Pattern used to recognize a NoSuchMethodError on JavaScript null
-  /// property access.
-  static final TypeErrorDecoder nullPropertyPattern =
-      extractPattern(provokePropertyErrorOn(JS('', 'null')));
-
-  /// Pattern used to recognize a NoSuchMethodError on JavaScript literal null
-  /// property access.
-  static final TypeErrorDecoder nullLiteralPropertyPattern =
-      extractPattern(provokePropertyErrorOnNull());
-
-  /// Pattern used to recognize a NoSuchMethodError on JavaScript
-  /// undefined property access.
-  static final TypeErrorDecoder undefinedPropertyPattern =
-      extractPattern(provokePropertyErrorOn(JS('', 'void 0')));
-
-  /// Pattern used to recognize a NoSuchMethodError on JavaScript literal
-  /// undefined property access.
-  static final TypeErrorDecoder undefinedLiteralPropertyPattern =
-      extractPattern(provokePropertyErrorOnUndefined());
-
-  TypeErrorDecoder(this._arguments,
-                   this._argumentsExpr,
-                   this._expr,
-                   this._method,
-                   this._receiver,
-                   this._pattern);
-
-  /// Returns a JavaScript object literal (map) with at most the
-  /// following keys:
-  ///
-  /// * arguments: The arguments as formatted by the JavaScript
-  ///   engine. No browsers are known to provide this information.
-  ///
-  /// * argumentsExpr: The syntax of the arguments (JavaScript source
-  ///   code). No browsers are known to provide this information.
-  ///
-  /// * expr: The syntax of the receiver expression (JavaScript source
-  ///   code). Firefox provides this information, for example: "$expr$.$method$
-  ///   is not a function".
-  ///
-  /// * method: The name of the called method (mangled name). At least Firefox
-  ///   and Chrome/V8 provides this information, for example, "Object [object
-  ///   Object] has no method '$method$'".
-  ///
-  /// * receiver: The string representation of the receiver. Chrome/V8
-  ///   used to provide this information (by calling user-defined
-  ///   JavaScript toString on receiver), but it has degenerated into
-  ///   "[object Object]" in recent versions.
-  matchTypeError(message) {
-    var match = JS('JSExtendableArray|Null',
-        'new RegExp(#).exec(#)', _pattern, message);
-    if (match == null) return null;
-    var result = JS('', '{}');
-    if (_arguments != -1) {
-      JS('', '#.arguments = #[# + 1]', result, match, _arguments);
-    }
-    if (_argumentsExpr != -1) {
-      JS('', '#.argumentsExpr = #[# + 1]', result, match, _argumentsExpr);
-    }
-    if (_expr != -1) {
-      JS('', '#.expr = #[# + 1]', result, match, _expr);
-    }
-    if (_method != -1) {
-      JS('', '#.method = #[# + 1]', result, match, _method);
-    }
-    if (_receiver != -1) {
-      JS('', '#.receiver = #[# + 1]', result, match, _receiver);
-    }
-
-    return result;
-  }
-
-  /// Builds a JavaScript Object with a toString method saying
-  /// r"$receiver$".
-  static buildJavaScriptObject() {
-    return JS('', r'{ toString: function() { return "$receiver$"; } }');
-  }
-
-  /// Builds a JavaScript Object with a toString method saying
-  /// r"$receiver$". The property "$method" is defined, but is not a function.
-  static buildJavaScriptObjectWithNonClosure() {
-    return JS('', r'{ $method$: null, '
-              r'toString: function() { return "$receiver$"; } }');
-  }
-
-  /// Extract a pattern from a JavaScript TypeError message.
-  ///
-  /// The patterns are extracted by forcing TypeErrors on known
-  /// objects thus forcing known strings into the error message. The
-  /// known strings are then replaced with wildcards which in theory
-  /// makes it possible to recognize the desired information even if
-  /// the error messages are reworded or translated.
-  static extractPattern(String message) {
-    // Some JavaScript implementations (V8 at least) include a
-    // representation of the receiver in the error message, however,
-    // this representation is not always [: receiver.toString() :],
-    // sometimes it is [: Object.prototype.toString(receiver) :], and
-    // sometimes it is an implementation specific method (but that
-    // doesn't seem to happen for object literals). So sometimes we
-    // get the text "[object Object]". The shortest way to get that
-    // string is using "String({})".
-    // See: http://code.google.com/p/v8/issues/detail?id=2519.
-    message = JS('String', r"#.replace(String({}), '$receiver$')", message);
-
-    // Since we want to create a new regular expression from an unknown string,
-    // we must escape all regular expression syntax.
-    message = JS('String', r"#.replace(new RegExp(#, 'g'), '\\$&')",
-                 message, ESCAPE_REGEXP);
-
-    // Look for the special pattern \$camelCase\$ (all the $ symbols
-    // have been escaped already), as we will soon be inserting
-    // regular expression syntax that we want interpreted by RegExp.
-    List<String> match =
-        JS('JSExtendableArray|Null', r"#.match(/\\\$[a-zA-Z]+\\\$/g)", message);
-    if (match == null) match = [];
-
-    // Find the positions within the substring matches of the error message
-    // components.  This will help us extract information later, such as the
-    // method name.
-    int arguments = JS('int', '#.indexOf(#)', match, r'\$arguments\$');
-    int argumentsExpr = JS('int', '#.indexOf(#)', match, r'\$argumentsExpr\$');
-    int expr = JS('int', '#.indexOf(#)', match, r'\$expr\$');
-    int method = JS('int', '#.indexOf(#)', match, r'\$method\$');
-    int receiver = JS('int', '#.indexOf(#)', match, r'\$receiver\$');
-
-    // Replace the patterns with a regular expression wildcard.
-    // Note: in a perfect world, one would use "(.*)", but not in
-    // JavaScript, "." does not match newlines.
-    String pattern = JS('String',
-                        r"#.replace('\\$arguments\\$', '((?:x|[^x])*)')"
-                        r".replace('\\$argumentsExpr\\$',  '((?:x|[^x])*)')"
-                        r".replace('\\$expr\\$',  '((?:x|[^x])*)')"
-                        r".replace('\\$method\\$',  '((?:x|[^x])*)')"
-                        r".replace('\\$receiver\\$',  '((?:x|[^x])*)')",
-                        message);
-
-    return new TypeErrorDecoder(arguments,
-                                argumentsExpr,
-                                expr,
-                                method,
-                                receiver,
-                                pattern);
-  }
-
-  /// Provokes a TypeError and returns its message.
-  ///
-  /// The error is provoked so all known variable content can be recognized and
-  /// a pattern can be inferred.
-  static String provokeCallErrorOn(expression) {
-    // This function is carefully created to maximize the possibility
-    // of decoding the TypeError message and turning it into a general
-    // pattern.
-    //
-    // The idea is to inject something known into something unknown.  The
-    // unknown entity is the error message that the browser provides with a
-    // TypeError.  It is a human readable message, possibly localized in a
-    // language no dart2js engineer understand.  We assume that $name$ would
-    // never naturally occur in a human readable error message, yet it is easy
-    // to decode.
-    //
-    // For example, evaluate this in V8 version 3.13.7.6:
-    //
-    // var $expr$ = null; $expr$.$method$()
-    //
-    // The VM throws an instance of TypeError whose message property contains
-    // "Cannot call method '$method$' of null".  We can then reasonably assume
-    // that if the string contains $method$, that's where the method name will
-    // be in general.  Call this automatically reverse engineering the error
-    // format string in V8.
-    //
-    // So the error message from V8 is turned into this regular expression:
-    //
-    // "Cannot call method '(.*)' of null"
-    //
-    // Similarly, if we evaluate:
-    //
-    // var $expr$ = {toString: function() { return '$receiver$'; }};
-    // $expr$.$method$()
-    //
-    // We get this message: "Object $receiver$ has no method '$method$'"
-    //
-    // Which is turned into this regular expression:
-    //
-    // "Object (.*) has no method '(.*)'"
-    //
-    // Firefox/jsshell is slightly different, it tries to include the source
-    // code that caused the exception, so we get this message: "$expr$.$method$
-    // is not a function" which is turned into this regular expression:
-    //
-    // "(.*)\\.(.*) is not a function"
-
-    var function = JS('', r"""function($expr$) {
-  var $argumentsExpr$ = '$arguments$';
-  try {
-    $expr$.$method$($argumentsExpr$);
-  } catch (e) {
-    return e.message;
-  }
-}""");
-    return JS('String', '(#)(#)', function, expression);
-  }
-
-  /// Similar to [provokeCallErrorOn], but provokes an error directly on
-  /// literal "null" expression.
-  static String provokeCallErrorOnNull() {
-    // See [provokeCallErrorOn] for a detailed explanation.
-    var function = JS('', r"""function() {
-  var $argumentsExpr$ = '$arguments$';
-  try {
-    null.$method$($argumentsExpr$);
-  } catch (e) {
-    return e.message;
-  }
-}""");
-    return JS('String', '(#)()', function);
-  }
-
-  /// Similar to [provokeCallErrorOnNull], but provokes an error directly on
-  /// (void 0), that is, "undefined".
-  static String provokeCallErrorOnUndefined() {
-    // See [provokeCallErrorOn] for a detailed explanation.
-    var function = JS('', r"""function() {
-  var $argumentsExpr$ = '$arguments$';
-  try {
-    (void 0).$method$($argumentsExpr$);
-  } catch (e) {
-    return e.message;
-  }
-}""");
-    return JS('String', '(#)()', function);
-  }
-
-  /// Similar to [provokeCallErrorOn], but provokes a property access
-  /// error.
-  static String provokePropertyErrorOn(expression) {
-    // See [provokeCallErrorOn] for a detailed explanation.
-    var function = JS('', r"""function($expr$) {
-  try {
-    $expr$.$method$;
-  } catch (e) {
-    return e.message;
-  }
-}""");
-    return JS('String', '(#)(#)', function, expression);
-  }
-
-  /// Similar to [provokePropertyErrorOn], but provokes an property access
-  /// error directly on literal "null" expression.
-  static String provokePropertyErrorOnNull() {
-    // See [provokeCallErrorOn] for a detailed explanation.
-    var function = JS('', r"""function() {
-  try {
-    null.$method$;
-  } catch (e) {
-    return e.message;
-  }
-}""");
-    return JS('String', '(#)()', function);
-  }
-
-  /// Similar to [provokePropertyErrorOnNull], but provokes an property access
-  /// error directly on (void 0), that is, "undefined".
-  static String provokePropertyErrorOnUndefined() {
-    // See [provokeCallErrorOn] for a detailed explanation.
-    var function = JS('', r"""function() {
-  try {
-    (void 0).$method$;
-  } catch (e) {
-    return e.message;
-  }
-}""");
-    return JS('String', '(#)()', function);
-  }
-}
-
-class NullError extends Error implements NoSuchMethodError {
-  final String _message;
-  final String _method;
-
-  NullError(this._message, match)
-      : _method = match == null ? null : JS('', '#.method', match);
-
-  String toString() {
-    if (_method == null) return 'NullError: $_message';
-    return 'NullError: Cannot call "$_method" on null';
-  }
-}
-
-class JsNoSuchMethodError extends Error implements NoSuchMethodError {
-  final String _message;
-  final String _method;
-  final String _receiver;
-
-  JsNoSuchMethodError(this._message, match)
-      : _method = match == null ? null : JS('String|Null', '#.method', match),
-        _receiver =
-            match == null ? null : JS('String|Null', '#.receiver', match);
-
-  String toString() {
-    if (_method == null) return 'NoSuchMethodError: $_message';
-    if (_receiver == null) {
-      return 'NoSuchMethodError: Cannot call "$_method" ($_message)';
-    }
-    return 'NoSuchMethodError: Cannot call "$_method" on "$_receiver" '
-        '($_message)';
-  }
-}
-
-class UnknownJsTypeError extends Error {
-  final String _message;
-
-  UnknownJsTypeError(this._message);
-
-  String toString() => _message.isEmpty ? 'Error' : 'Error: $_message';
-}
-
-/**
- * Called from catch blocks in generated code to extract the Dart
- * exception from the thrown value. The thrown value may have been
- * created by [wrapException] or it may be a 'native' JS exception.
- *
- * Some native exceptions are mapped to new Dart instances, others are
- * returned unmodified.
- */
-unwrapException(ex) {
-  /// If error implements Error, save [ex] in [error.$thrownJsError].
-  /// Otherwise, do nothing. Later, the stack trace can then be extraced from
-  /// [ex].
-  saveStackTrace(error) {
-    if (error is Error) {
-      var thrownStackTrace = JS('', r'#.$thrownJsError', error);
-      if (thrownStackTrace == null) {
-        JS('void', r'#.$thrownJsError = #', error, ex);
-      }
-    }
-    return error;
-  }
-
-  // Note that we are checking if the object has the property. If it
-  // has, it could be set to null if the thrown value is null.
-  if (ex == null) return null;
-  if (JS('bool', 'typeof # !== "object"', ex)) return ex;
-
-  if (JS('bool', r'"dartException" in #', ex)) {
-    return saveStackTrace(JS('', r'#.dartException', ex));
-  } else if (!JS('bool', r'"message" in #', ex)) {
-    return ex;
-  }
-
-  // Grab hold of the exception message. This field is available on
-  // all supported browsers.
-  var message = JS('var', r'#.message', ex);
-
-  // Internet Explorer has an error number.  This is the most reliable way to
-  // detect specific errors, so check for this first.
-  if (JS('bool', '"number" in #', ex)
-      && JS('bool', 'typeof #.number == "number"', ex)) {
-    int number = JS('int', '#.number', ex);
-
-    // From http://msdn.microsoft.com/en-us/library/ie/hc53e755(v=vs.94).aspx
-    // "number" is a 32-bit word. The error code is the low 16 bits, and the
-    // facility code is the upper 16 bits.
-    var ieErrorCode = number & 0xffff;
-    var ieFacilityNumber = (number >> 16) & 0x1fff;
-
-    // http://msdn.microsoft.com/en-us/library/aa264975(v=vs.60).aspx
-    // http://msdn.microsoft.com/en-us/library/ie/1dk3k160(v=vs.94).aspx
-    if (ieFacilityNumber == 10) {
-      switch (ieErrorCode) {
-      case 438:
-        return saveStackTrace(
-            new JsNoSuchMethodError('$message (Error $ieErrorCode)', null));
-      case 445:
-      case 5007:
-        return saveStackTrace(
-            new NullError('$message (Error $ieErrorCode)', null));
-      }
-    }
-  }
-
-  if (JS('bool', r'# instanceof TypeError', ex)) {
-    var match;
-    // Using JS to give type hints to the compiler to help tree-shaking.
-    // TODO(ahe): That should be unnecessary due to type inference.
-    var nsme =
-        JS('TypeErrorDecoder', '#', TypeErrorDecoder.noSuchMethodPattern);
-    var notClosure =
-        JS('TypeErrorDecoder', '#', TypeErrorDecoder.notClosurePattern);
-    var nullCall =
-        JS('TypeErrorDecoder', '#', TypeErrorDecoder.nullCallPattern);
-    var nullLiteralCall =
-        JS('TypeErrorDecoder', '#', TypeErrorDecoder.nullLiteralCallPattern);
-    var undefCall =
-        JS('TypeErrorDecoder', '#', TypeErrorDecoder.undefinedCallPattern);
-    var undefLiteralCall =
-        JS('TypeErrorDecoder', '#',
-           TypeErrorDecoder.undefinedLiteralCallPattern);
-    var nullProperty =
-        JS('TypeErrorDecoder', '#', TypeErrorDecoder.nullPropertyPattern);
-    var nullLiteralProperty =
-        JS('TypeErrorDecoder', '#',
-           TypeErrorDecoder.nullLiteralPropertyPattern);
-    var undefProperty =
-        JS('TypeErrorDecoder', '#', TypeErrorDecoder.undefinedPropertyPattern);
-    var undefLiteralProperty =
-        JS('TypeErrorDecoder', '#',
-           TypeErrorDecoder.undefinedLiteralPropertyPattern);
-    if ((match = nsme.matchTypeError(message)) != null) {
-      return saveStackTrace(new JsNoSuchMethodError(message, match));
-    } else if ((match = notClosure.matchTypeError(message)) != null) {
-      // notClosure may match "({c:null}).c()" or "({c:1}).c()", so we
-      // cannot tell if this an attempt to invoke call on null or a
-      // non-function object.
-      // But we do know the method name is "call".
-      JS('', '#.method = "call"', match);
-      return saveStackTrace(new JsNoSuchMethodError(message, match));
-    } else if ((match = nullCall.matchTypeError(message)) != null ||
-               (match = nullLiteralCall.matchTypeError(message)) != null ||
-               (match = undefCall.matchTypeError(message)) != null ||
-               (match = undefLiteralCall.matchTypeError(message)) != null ||
-               (match = nullProperty.matchTypeError(message)) != null ||
-               (match = nullLiteralCall.matchTypeError(message)) != null ||
-               (match = undefProperty.matchTypeError(message)) != null ||
-               (match = undefLiteralProperty.matchTypeError(message)) != null) {
-      return saveStackTrace(new NullError(message, match));
-    }
-
-    // If we cannot determine what kind of error this is, we fall back
-    // to reporting this as a generic error. It's probably better than
-    // nothing.
-    return saveStackTrace(
-        new UnknownJsTypeError(message is String ? message : ''));
-  }
-
-  if (JS('bool', r'# instanceof RangeError', ex)) {
-    if (message is String && contains(message, 'call stack')) {
-      return new StackOverflowError();
-    }
-
-    // In general, a RangeError is thrown when trying to pass a number
-    // as an argument to a function that does not allow a range that
-    // includes that number.
-    return saveStackTrace(new ArgumentError());
-  }
-
-  // Check for the Firefox specific stack overflow signal.
-  if (JS('bool',
-         r'typeof InternalError == "function" && # instanceof InternalError',
-         ex)) {
-    if (message is String && message == 'too much recursion') {
-      return new StackOverflowError();
-    }
-  }
-
-  // Just return the exception. We should not wrap it because in case
-  // the exception comes from the DOM, it is a JavaScript
-  // object backed by a native Dart class.
-  return ex;
-}
-
-/**
- * Called by generated code to fetch the stack trace from an
- * exception. Should never return null.
- */
-StackTrace getTraceFromException(exception) => new _StackTrace(exception);
-
-class _StackTrace implements StackTrace {
-  var _exception;
-  String _trace;
-  _StackTrace(this._exception);
-
-  String toString() {
-    if (_trace != null) return _trace;
-
-    String trace;
-    if (JS('bool', 'typeof # === "object"', _exception)) {
-      trace = JS("String|Null", r"#.stack", _exception);
-    }
-    return _trace = (trace == null) ? '' : trace;
-  }
-}
-
-int objectHashCode(var object) {
-  if (object == null || JS('bool', "typeof # != 'object'", object)) {
-    return object.hashCode;
-  } else {
-    return Primitives.objectHashCode(object);
-  }
-}
-
-/**
- * Called by generated code to build a map literal. [keyValuePairs] is
- * a list of key, value, key, value, ..., etc.
- */
-fillLiteralMap(keyValuePairs, Map result) {
-  // TODO(johnniwinther): Use JSArray to optimize this code instead of calling
-  // [getLength] and [getIndex].
-  int index = 0;
-  int length = getLength(keyValuePairs);
-  while (index < length) {
-    var key = getIndex(keyValuePairs, index++);
-    var value = getIndex(keyValuePairs, index++);
-    result[key] = value;
-  }
-  return result;
-}
-
-invokeClosure(Function closure,
-              var isolate,
-              int numberOfArguments,
-              var arg1,
-              var arg2,
-              var arg3,
-              var arg4) {
-  if (numberOfArguments == 0) {
-    return JS_CALL_IN_ISOLATE(isolate, () => closure());
-  } else if (numberOfArguments == 1) {
-    return JS_CALL_IN_ISOLATE(isolate, () => closure(arg1));
-  } else if (numberOfArguments == 2) {
-    return JS_CALL_IN_ISOLATE(isolate, () => closure(arg1, arg2));
-  } else if (numberOfArguments == 3) {
-    return JS_CALL_IN_ISOLATE(isolate, () => closure(arg1, arg2, arg3));
-  } else if (numberOfArguments == 4) {
-    return JS_CALL_IN_ISOLATE(isolate, () => closure(arg1, arg2, arg3, arg4));
-  } else {
-    throw new Exception(
-        'Unsupported number of arguments for wrapped closure');
-  }
-}
-
-/**
- * Called by generated code to convert a Dart closure to a JS
- * closure when the Dart closure is passed to the DOM.
- */
-convertDartClosureToJS(closure, int arity) {
-  if (closure == null) return null;
-  var function = JS('var', r'#.$identity', closure);
-  if (JS('bool', r'!!#', function)) return function;
-
-  // We use $0 and $1 to not clash with variable names used by the
-  // compiler and/or minifier.
-  function = JS('var',
-                '(function(closure, arity, context, invoke) {'
-                '  return function(a1, a2, a3, a4) {'
-                '     return invoke(closure, context, arity, a1, a2, a3, a4);'
-                '  };'
-                '})(#,#,#,#)',
-                closure,
-                arity,
-                // Capture the current isolate now.  Remember that "#"
-                // in JS is simply textual substitution of compiled
-                // expressions.
-                JS_CURRENT_ISOLATE_CONTEXT(),
-                DART_CLOSURE_TO_JS(invokeClosure));
-
-  JS('void', r'#.$identity = #', closure, function);
-  return function;
-}
-
-/**
- * Super class for Dart closures.
- */
-abstract class Closure implements Function {
-  // TODO(ahe): These constants must be in sync with
-  // reflection_data_parser.dart.
-  static const FUNCTION_INDEX = 0;
-  static const NAME_INDEX = 1;
-  static const CALL_NAME_INDEX = 2;
-  static const REQUIRED_PARAMETER_INDEX = 3;
-  static const OPTIONAL_PARAMETER_INDEX = 4;
-  static const DEFAULT_ARGUMENTS_INDEX = 5;
-
-  /**
-   * Global counter to prevent reusing function code objects.
-   *
-   * V8 will share the underlying function code objects when the same string is
-   * passed to "new Function".  Shared function code objects can lead to
-   * sub-optimal performance due to polymorhism, and can be prevented by
-   * ensuring the strings are different.
-   */
-  static int functionCounter = 0;
-
-  Closure();
-
-  /**
-   * Creates a new closure class for use by implicit getters associated with a
-   * method.
-   *
-   * In other words, creates a tear-off closure.
-   *
-   * Called from [closureFromTearOff] as well as from reflection when tearing
-   * of a method via [:getField:].
-   *
-   * This method assumes that [functions] was created by the JavaScript function
-   * `addStubs` in `reflection_data_parser.dart`. That is, a list of JavaScript
-   * function objects with properties `$stubName` and `$callName`.
-   *
-   * Further assumes that [reflectionInfo] is the end of the array created by
-   * [dart2js.js_emitter.ContainerBuilder.addMemberMethod] starting with
-   * required parameter count.
-   *
-   * Caution: this function may be called when building constants.
-   * TODO(ahe): Don't call this function when building constants.
-   */
-  static fromTearOff(receiver,
-                     List functions,
-                     List reflectionInfo,
-                     bool isStatic,
-                     jsArguments,
-                     String propertyName) {
-    JS_EFFECT(() {
-      BoundClosure.receiverOf(JS('BoundClosure', 'void 0'));
-      BoundClosure.selfOf(JS('BoundClosure', 'void 0'));
-    });
-    // TODO(ahe): All the place below using \$ should be rewritten to go
-    // through the namer.
-    var function = JS('', '#[#]', functions, 0);
-    String name = JS('String|Null', '#.\$stubName', function);
-    String callName = JS('String|Null', '#.\$callName', function);
-
-    JS('', '#.\$reflectionInfo = #', function, reflectionInfo);
-    ReflectionInfo info = new ReflectionInfo(function);
-
-    var functionType = info.functionType;
-
-    // function tmp() {};
-    // tmp.prototype = BC.prototype;
-    // var proto = new tmp;
-    // for each computed prototype property:
-    //   proto[property] = ...;
-    // proto._init = BC;
-    // var dynClosureConstructor =
-    //     new Function('self', 'target', 'receiver', 'name',
-    //                  'this._init(self, target, receiver, name)');
-    // proto.constructor = dynClosureConstructor; // Necessary?
-    // dynClosureConstructor.prototype = proto;
-    // return dynClosureConstructor;
-
-    // We need to create a new subclass of either TearOffClosure or
-    // BoundClosure.  For this, we need to create an object whose prototype is
-    // the prototype is either TearOffClosure.prototype or
-    // BoundClosure.prototype, respectively in pseudo JavaScript code. The
-    // simplest way to access the JavaScript construction function of a Dart
-    // class is to create an instance and access its constructor property.  The
-    // newly created instance could in theory be used directly as the
-    // prototype, but it might include additional fields that we don't need.
-    // So we only use the new instance to access the constructor property and
-    // use Object.create to create the desired prototype.
-    var prototype = isStatic
-        // TODO(ahe): Safe to use Object.create?
-        ? JS('TearOffClosure', 'Object.create(#.constructor.prototype)',
-             new TearOffClosure())
-        : JS('BoundClosure', 'Object.create(#.constructor.prototype)',
-             new BoundClosure(null, null, null, null));
-
-    JS('', '#.\$initialize = #', prototype, JS('', '#.constructor', prototype));
-    var constructor = isStatic
-        ? JS('', 'function(){this.\$initialize()}')
-        : isCsp
-            ? JS('', 'function(a,b,c,d) {this.\$initialize(a,b,c,d)}')
-            : JS('',
-                 'new Function("a","b","c","d",'
-                     '"this.\$initialize(a,b,c,d);"+#)',
-                 functionCounter++);
-
-    // TODO(ahe): Is it necessary to set the constructor property?
-    JS('', '#.constructor = #', prototype, constructor);
-
-    JS('', '#.prototype = #', constructor, prototype);
-
-    // Create a closure and "monkey" patch it with call stubs.
-    var trampoline = function;
-    var isIntercepted = false;
-    if (!isStatic) {
-      if (JS('bool', '#.length == 1', jsArguments)) {
-        // Intercepted call.
-        isIntercepted = true;
-      }
-      trampoline = forwardCallTo(receiver, function, isIntercepted);
-      JS('', '#.\$reflectionInfo = #', trampoline, reflectionInfo);
-    } else {
-      JS('', '#.\$name = #', prototype, propertyName);
-    }
-
-    var signatureFunction;
-    if (JS('bool', 'typeof # == "number"', functionType)) {
-      signatureFunction =
-          JS('', '(function(s){return function(){return init.metadata[s]}})(#)',
-             functionType);
-    } else if (!isStatic
-               && JS('bool', 'typeof # == "function"', functionType)) {
-      var getReceiver = isIntercepted
-          ? RAW_DART_FUNCTION_REF(BoundClosure.receiverOf)
-          : RAW_DART_FUNCTION_REF(BoundClosure.selfOf);
-      signatureFunction = JS(
-        '',
-        'function(f,r){'
-          'return function(){'
-            'return f.apply({\$receiver:r(this)},arguments)'
-          '}'
-        '}(#,#)', functionType, getReceiver);
-    } else {
-      throw 'Error in reflectionInfo.';
-    }
-
-    JS('', '#.\$signature = #', prototype, signatureFunction);
-
-    JS('', '#[#] = #', prototype, callName, trampoline);
-    for (int i = 1; i < functions.length; i++) {
-      var stub = functions[i];
-      var stubCallName = JS('String|Null', '#.\$callName', stub);
-      if (stubCallName != null) {
-        JS('', '#[#] = #', prototype, stubCallName,
-           isStatic ? stub : forwardCallTo(receiver, stub, isIntercepted));
-      }
-    }
-
-    JS('', '#["call*"] = #', prototype, trampoline);
-
-    return constructor;
-  }
-
-  static cspForwardCall(int arity, bool isSuperCall, String stubName,
-                        function) {
-    var getSelf = RAW_DART_FUNCTION_REF(BoundClosure.selfOf);
-    // Handle intercepted stub-names with the default slow case.
-    if (isSuperCall) arity = -1;
-    switch (arity) {
-    case 0:
-      return JS(
-          '',
-          'function(n,S){'
-            'return function(){'
-              'return S(this)[n]()'
-            '}'
-          '}(#,#)', stubName, getSelf);
-    case 1:
-      return JS(
-          '',
-          'function(n,S){'
-            'return function(a){'
-              'return S(this)[n](a)'
-            '}'
-          '}(#,#)', stubName, getSelf);
-    case 2:
-      return JS(
-          '',
-          'function(n,S){'
-            'return function(a,b){'
-              'return S(this)[n](a,b)'
-            '}'
-          '}(#,#)', stubName, getSelf);
-    case 3:
-      return JS(
-          '',
-          'function(n,S){'
-            'return function(a,b,c){'
-              'return S(this)[n](a,b,c)'
-            '}'
-          '}(#,#)', stubName, getSelf);
-    case 4:
-      return JS(
-          '',
-          'function(n,S){'
-            'return function(a,b,c,d){'
-              'return S(this)[n](a,b,c,d)'
-            '}'
-          '}(#,#)', stubName, getSelf);
-    case 5:
-      return JS(
-          '',
-          'function(n,S){'
-            'return function(a,b,c,d,e){'
-              'return S(this)[n](a,b,c,d,e)'
-            '}'
-          '}(#,#)', stubName, getSelf);
-    default:
-      return JS(
-          '',
-          'function(f,s){'
-            'return function(){'
-              'return f.apply(s(this),arguments)'
-            '}'
-          '}(#,#)', function, getSelf);
-    }
-  }
-
-  static bool get isCsp => JS('bool', 'typeof dart_precompiled == "function"');
-
-  static forwardCallTo(receiver, function, bool isIntercepted) {
-    if (isIntercepted) return forwardInterceptedCallTo(receiver, function);
-    String stubName = JS('String|Null', '#.\$stubName', function);
-    int arity = JS('int', '#.length', function);
-    var lookedUpFunction = JS("", "#[#]", receiver, stubName);
-    // The receiver[stubName] may not be equal to the function if we try to
-    // forward to a super-method. Especially when we create a bound closure
-    // of a super-call we need to make sure that we don't forward back to the
-    // dynamically looked up function.
-    bool isSuperCall = !identical(function, lookedUpFunction);
-
-    if (isCsp || isSuperCall || arity >= 27) {
-      return cspForwardCall(arity, isSuperCall, stubName, function);
-    }
-
-    if (arity == 0) {
-      return JS(
-          '',
-          '(new Function(#))()',
-          'return function(){'
-            'return this.${BoundClosure.selfFieldName()}.$stubName();'
-            '${functionCounter++}'
-          '}');
-    }
-    assert (1 <= arity && arity < 27);
-    String arguments = JS(
-        'String',
-        '"abcdefghijklmnopqrstuvwxyz".split("").splice(0,#).join(",")',
-        arity);
-    return JS(
-        '',
-        '(new Function(#))()',
-        'return function($arguments){'
-          'return this.${BoundClosure.selfFieldName()}.$stubName($arguments);'
-          '${functionCounter++}'
-        '}');
-  }
-
-  static cspForwardInterceptedCall(int arity, bool isSuperCall,
-                                   String name, function) {
-    var getSelf = RAW_DART_FUNCTION_REF(BoundClosure.selfOf);
-    var getReceiver = RAW_DART_FUNCTION_REF(BoundClosure.receiverOf);
-    // Handle intercepted stub-names with the default slow case.
-    if (isSuperCall) arity = -1;
-    switch (arity) {
-    case 0:
-      // Intercepted functions always takes at least one argument (the
-      // receiver).
-      throw new RuntimeError('Intercepted function with no arguments.');
-    case 1:
-      return JS(
-          '',
-          'function(n,s,r){'
-            'return function(){'
-              'return s(this)[n](r(this))'
-            '}'
-          '}(#,#,#)', name, getSelf, getReceiver);
-    case 2:
-      return JS(
-          '',
-          'function(n,s,r){'
-            'return function(a){'
-              'return s(this)[n](r(this),a)'
-            '}'
-          '}(#,#,#)', name, getSelf, getReceiver);
-    case 3:
-      return JS(
-          '',
-          'function(n,s,r){'
-            'return function(a,b){'
-              'return s(this)[n](r(this),a,b)'
-            '}'
-          '}(#,#,#)', name, getSelf, getReceiver);
-    case 4:
-      return JS(
-          '',
-          'function(n,s,r){'
-            'return function(a,b,c){'
-              'return s(this)[n](r(this),a,b,c)'
-            '}'
-          '}(#,#,#)', name, getSelf, getReceiver);
-    case 5:
-      return JS(
-          '',
-          'function(n,s,r){'
-            'return function(a,b,c,d){'
-              'return s(this)[n](r(this),a,b,c,d)'
-            '}'
-          '}(#,#,#)', name, getSelf, getReceiver);
-    case 6:
-      return JS(
-          '',
-          'function(n,s,r){'
-            'return function(a,b,c,d,e){'
-              'return s(this)[n](r(this),a,b,c,d,e)'
-            '}'
-          '}(#,#,#)', name, getSelf, getReceiver);
-    default:
-      return JS(
-          '',
-          'function(f,s,r,a){'
-            'return function(){'
-              'a=[r(this)];'
-              'Array.prototype.push.apply(a,arguments);'
-              'return f.apply(s(this),a)'
-            '}'
-          '}(#,#,#)', function, getSelf, getReceiver);
-    }
-  }
-
-  static forwardInterceptedCallTo(receiver, function) {
-    String selfField = BoundClosure.selfFieldName();
-    String receiverField = BoundClosure.receiverFieldName();
-    String stubName = JS('String|Null', '#.\$stubName', function);
-    int arity = JS('int', '#.length', function);
-    bool isCsp = JS('bool', 'typeof dart_precompiled == "function"');
-    var lookedUpFunction = JS("", "#[#]", receiver, stubName);
-    // The receiver[stubName] may not be equal to the function if we try to
-    // forward to a super-method. Especially when we create a bound closure
-    // of a super-call we need to make sure that we don't forward back to the
-    // dynamically looked up function.
-    bool isSuperCall = !identical(function, lookedUpFunction);
-
-    if (isCsp || isSuperCall || arity >= 28) {
-      return cspForwardInterceptedCall(arity, isSuperCall, stubName,
-                                       function);
-    }
-    if (arity == 1) {
-      return JS(
-          '',
-          '(new Function(#))()',
-          'return function(){'
-            'return this.$selfField.$stubName(this.$receiverField);'
-            '${functionCounter++}'
-          '}');
-    }
-    assert(1 < arity && arity < 28);
-    String arguments = JS(
-        'String',
-        '"abcdefghijklmnopqrstuvwxyz".split("").splice(0,#).join(",")',
-        arity - 1);
-    return JS(
-        '',
-        '(new Function(#))()',
-        'return function($arguments){'
-          'return this.$selfField.$stubName(this.$receiverField, $arguments);'
-          '${functionCounter++}'
-        '}');
-  }
-
-  // The backend adds a special getter of the form
-  //
-  // Closure get call => this;
-  //
-  // to allow tearing off a closure from itself. We do this magically in the
-  // backend rather than simply adding it here, as we do not want this getter
-  // to be visible to resolution and the generation of extra stubs.
-
-  String toString() => "Closure";
-}
-
-/// Called from implicit method getter (aka tear-off).
-closureFromTearOff(receiver,
-                   functions,
-                   reflectionInfo,
-                   isStatic,
-                   jsArguments,
-                   name) {
-  return Closure.fromTearOff(
-      receiver,
-      JSArray.markFixedList(functions),
-      JSArray.markFixedList(reflectionInfo),
-      JS('bool', '!!#', isStatic),
-      jsArguments,
-      JS('String', '#', name));
-}
-
-/// Represents an implicit closure of a function.
-class TearOffClosure extends Closure {
-}
-
-/// Represents a 'tear-off' closure, that is an instance method bound
-/// to a specific receiver (instance).
-class BoundClosure extends TearOffClosure {
-  /// The receiver or interceptor.
-  // TODO(ahe): This could just be the interceptor, we always know if
-  // we need the interceptor when generating the call method.
-  final _self;
-
-  /// The method.
-  final _target;
-
-  /// The receiver. Null if [_self] is not an interceptor.
-  final _receiver;
-
-  /// The name of the function. Only used by the mirror system.
-  final String _name;
-
-  BoundClosure(this._self, this._target, this._receiver, this._name);
-
-  bool operator==(other) {
-    if (identical(this, other)) return true;
-    if (other is! BoundClosure) return false;
-    return JS('bool', '# === # && # === # && # === #',
-        _self, other._self,
-        _target, other._target,
-        _receiver, other._receiver);
-  }
-
-  int get hashCode {
-    int receiverHashCode;
-    if (_receiver == null) {
-      // A bound closure on a regular Dart object, just use the
-      // identity hash code.
-      receiverHashCode = Primitives.objectHashCode(_self);
-    } else if (JS('String', 'typeof #', _receiver) != 'object') {
-      // A bound closure on a primitive JavaScript type. We
-      // use the hashCode method we define for those primitive types.
-      receiverHashCode = _receiver.hashCode;
-    } else {
-      // A bound closure on an intercepted native class, just use the
-      // identity hash code.
-      receiverHashCode = Primitives.objectHashCode(_receiver);
-    }
-    return receiverHashCode ^ Primitives.objectHashCode(_target);
-  }
-
-  @NoInline()
-  static selfOf(BoundClosure closure) => closure._self;
-
-  static targetOf(BoundClosure closure) => closure._target;
-
-  @NoInline()
-  static receiverOf(BoundClosure closure) => closure._receiver;
-
-  static nameOf(BoundClosure closure) => closure._name;
-
-  static String selfFieldNameCache;
-
-  static String selfFieldName() {
-    if (selfFieldNameCache == null) {
-      selfFieldNameCache = computeFieldNamed('self');
-    }
-    return selfFieldNameCache;
-  }
-
-  static String receiverFieldNameCache;
-
-  static String receiverFieldName() {
-    if (receiverFieldNameCache == null) {
-      receiverFieldNameCache = computeFieldNamed('receiver');
-    }
-    return receiverFieldNameCache;
-  }
-
-  @NoInline() @NoSideEffects()
-  static String computeFieldNamed(String fieldName) {
-    var template = new BoundClosure('self', 'target', 'receiver', 'name');
-    var names = JSArray.markFixedList(
-        JS('', 'Object.getOwnPropertyNames(#)', template));
-    for (int i = 0; i < names.length; i++) {
-      var name = names[i];
-      if (JS('bool', '#[#] === #', template, name, fieldName)) {
-        return JS('String', '#', name);
-      }
-    }
-  }
-}
-
-bool jsHasOwnProperty(var jsObject, String property) {
-  return JS('bool', r'#.hasOwnProperty(#)', jsObject, property);
-}
-
-jsPropertyAccess(var jsObject, String property) {
-  return JS('var', r'#[#]', jsObject, property);
-}
-
-/**
- * Called at the end of unaborted switch cases to get the singleton
- * FallThroughError exception that will be thrown.
- */
-getFallThroughError() => new FallThroughErrorImplementation();
-
-/**
- * A metadata annotation describing the types instantiated by a native element.
- *
- * The annotation is valid on a native method and a field of a native class.
- *
- * By default, a field of a native class is seen as an instantiation point for
- * all native classes that are a subtype of the field's type, and a native
- * method is seen as an instantiation point fo all native classes that are a
- * subtype of the method's return type, or the argument types of the declared
- * type of the method's callback parameter.
- *
- * An @[Creates] annotation overrides the default set of instantiated types.  If
- * one or more @[Creates] annotations are present, the type of the native
- * element is ignored, and the union of @[Creates] annotations is used instead.
- * The names in the strings are resolved and the program will fail to compile
- * with dart2js if they do not name types.
- *
- * The argument to [Creates] is a string.  The string is parsed as the names of
- * one or more types, separated by vertical bars `|`.  There are some special
- * names:
- *
- * * `=Object`. This means 'exactly Object', which is a plain JavaScript object
- *   with properties and none of the subtypes of Object.
- *
- * Example: we may know that a method always returns a specific implementation:
- *
- *     @Creates('_NodeList')
- *     List<Node> getElementsByTagName(String tag) native;
- *
- * Useful trick: A method can be marked as not instantiating any native classes
- * with the annotation `@Creates('Null')`.  This is useful for fields on native
- * classes that are used only in Dart code.
- *
- *     @Creates('Null')
- *     var _cachedFoo;
- */
-class Creates {
-  final String types;
-  const Creates(this.types);
-}
-
-/**
- * A metadata annotation describing the types returned or yielded by a native
- * element.
- *
- * The annotation is valid on a native method and a field of a native class.
- *
- * By default, a native method or field is seen as returning or yielding all
- * subtypes if the method return type or field type.  This annotation allows a
- * more precise set of types to be specified.
- *
- * See [Creates] for the syntax of the argument.
- *
- * Example: IndexedDB keys are numbers, strings and JavaScript Arrays of keys.
- *
- *     @Returns('String|num|JSExtendableArray')
- *     dynamic key;
- *
- *     // Equivalent:
- *     @Returns('String') @Returns('num') @Returns('JSExtendableArray')
- *     dynamic key;
- */
-class Returns {
-  final String types;
-  const Returns(this.types);
-}
-
-/**
- * A metadata annotation placed on native methods and fields of native classes
- * to specify the JavaScript name.
- *
- * This example declares a Dart field + getter + setter called `$dom_title` that
- * corresponds to the JavaScript property `title`.
- *
- *     class Docmument native "*Foo" {
- *       @JSName('title')
- *       String $dom_title;
- *     }
- */
-class JSName {
-  final String name;
-  const JSName(this.name);
-}
-
-/**
- * The following methods are called by the runtime to implement
- * checked mode and casts. We specialize each primitive type (eg int, bool), and
- * use the compiler's convention to do is-checks on regular objects.
- */
-boolConversionCheck(value) {
-  if (value is bool) return value;
-  // One of the following checks will always fail.
-  boolTypeCheck(value);
-  assert(value != null);
-  return false;
-}
-
-stringTypeCheck(value) {
-  if (value == null) return value;
-  if (value is String) return value;
-  throw new TypeErrorImplementation(value, 'String');
-}
-
-stringTypeCast(value) {
-  if (value is String || value == null) return value;
-  // TODO(lrn): When reified types are available, pass value.class and String.
-  throw new CastErrorImplementation(
-      Primitives.objectTypeName(value), 'String');
-}
-
-doubleTypeCheck(value) {
-  if (value == null) return value;
-  if (value is double) return value;
-  throw new TypeErrorImplementation(value, 'double');
-}
-
-doubleTypeCast(value) {
-  if (value is double || value == null) return value;
-  throw new CastErrorImplementation(
-      Primitives.objectTypeName(value), 'double');
-}
-
-numTypeCheck(value) {
-  if (value == null) return value;
-  if (value is num) return value;
-  throw new TypeErrorImplementation(value, 'num');
-}
-
-numTypeCast(value) {
-  if (value is num || value == null) return value;
-  throw new CastErrorImplementation(
-      Primitives.objectTypeName(value), 'num');
-}
-
-boolTypeCheck(value) {
-  if (value == null) return value;
-  if (value is bool) return value;
-  throw new TypeErrorImplementation(value, 'bool');
-}
-
-boolTypeCast(value) {
-  if (value is bool || value == null) return value;
-  throw new CastErrorImplementation(
-      Primitives.objectTypeName(value), 'bool');
-}
-
-intTypeCheck(value) {
-  if (value == null) return value;
-  if (value is int) return value;
-  throw new TypeErrorImplementation(value, 'int');
-}
-
-intTypeCast(value) {
-  if (value is int || value == null) return value;
-  throw new CastErrorImplementation(
-      Primitives.objectTypeName(value), 'int');
-}
-
-void propertyTypeError(value, property) {
-  // Cuts the property name to the class name.
-  String name = property.substring(3, property.length);
-  throw new TypeErrorImplementation(value, name);
-}
-
-void propertyTypeCastError(value, property) {
-  // Cuts the property name to the class name.
-  String actualType = Primitives.objectTypeName(value);
-  String expectedType = property.substring(3, property.length);
-  throw new CastErrorImplementation(actualType, expectedType);
-}
-
-/**
- * For types that are not supertypes of native (eg DOM) types,
- * we emit a simple property check to check that an object implements
- * that type.
- */
-propertyTypeCheck(value, property) {
-  if (value == null) return value;
-  if (JS('bool', '!!#[#]', value, property)) return value;
-  propertyTypeError(value, property);
-}
-
-/**
- * For types that are not supertypes of native (eg DOM) types,
- * we emit a simple property check to check that an object implements
- * that type.
- */
-propertyTypeCast(value, property) {
-  if (value == null || JS('bool', '!!#[#]', value, property)) return value;
-  propertyTypeCastError(value, property);
-}
-
-/**
- * For types that are supertypes of native (eg DOM) types, we use the
- * interceptor for the class because we cannot add a JS property to the
- * prototype at load time.
- */
-interceptedTypeCheck(value, property) {
-  if (value == null) return value;
-  if ((identical(JS('String', 'typeof #', value), 'object'))
-      && JS('bool', '#[#]', getInterceptor(value), property)) {
-    return value;
-  }
-  propertyTypeError(value, property);
-}
-
-/**
- * For types that are supertypes of native (eg DOM) types, we use the
- * interceptor for the class because we cannot add a JS property to the
- * prototype at load time.
- */
-interceptedTypeCast(value, property) {
-  if (value == null
-      || ((JS('bool', 'typeof # === "object"', value))
-          && JS('bool', '#[#]', getInterceptor(value), property))) {
-    return value;
-  }
-  propertyTypeCastError(value, property);
-}
-
-/**
- * Specialization of the type check for num and String and their
- * supertype since [value] can be a JS primitive.
- */
-numberOrStringSuperTypeCheck(value, property) {
-  if (value == null) return value;
-  if (value is String) return value;
-  if (value is num) return value;
-  if (JS('bool', '!!#[#]', value, property)) return value;
-  propertyTypeError(value, property);
-}
-
-numberOrStringSuperTypeCast(value, property) {
-  if (value is String) return value;
-  if (value is num) return value;
-  return propertyTypeCast(value, property);
-}
-
-numberOrStringSuperNativeTypeCheck(value, property) {
-  if (value == null) return value;
-  if (value is String) return value;
-  if (value is num) return value;
-  if (JS('bool', '#[#]', getInterceptor(value), property)) return value;
-  propertyTypeError(value, property);
-}
-
-numberOrStringSuperNativeTypeCast(value, property) {
-  if (value == null) return value;
-  if (value is String) return value;
-  if (value is num) return value;
-  if (JS('bool', '#[#]', getInterceptor(value), property)) return value;
-  propertyTypeCastError(value, property);
-}
-
-/**
- * Specialization of the type check for String and its supertype
- * since [value] can be a JS primitive.
- */
-stringSuperTypeCheck(value, property) {
-  if (value == null) return value;
-  if (value is String) return value;
-  if (JS('bool', '!!#[#]', value, property)) return value;
-  propertyTypeError(value, property);
-}
-
-stringSuperTypeCast(value, property) {
-  if (value is String) return value;
-  return propertyTypeCast(value, property);
-}
-
-stringSuperNativeTypeCheck(value, property) {
-  if (value == null) return value;
-  if (value is String) return value;
-  if (JS('bool', '#[#]', getInterceptor(value), property)) return value;
-  propertyTypeError(value, property);
-}
-
-stringSuperNativeTypeCast(value, property) {
-  if (value is String || value == null) return value;
-  if (JS('bool', '#[#]', getInterceptor(value), property)) return value;
-  propertyTypeCastError(value, property);
-}
-
-/**
- * Specialization of the type check for List and its supertypes,
- * since [value] can be a JS array.
- */
-listTypeCheck(value) {
-  if (value == null) return value;
-  if (value is List) return value;
-  throw new TypeErrorImplementation(value, 'List');
-}
-
-listTypeCast(value) {
-  if (value is List || value == null) return value;
-  throw new CastErrorImplementation(
-      Primitives.objectTypeName(value), 'List');
-}
-
-listSuperTypeCheck(value, property) {
-  if (value == null) return value;
-  if (value is List) return value;
-  if (JS('bool', '!!#[#]', value, property)) return value;
-  propertyTypeError(value, property);
-}
-
-listSuperTypeCast(value, property) {
-  if (value is List) return value;
-  return propertyTypeCast(value, property);
-}
-
-listSuperNativeTypeCheck(value, property) {
-  if (value == null) return value;
-  if (value is List) return value;
-  if (JS('bool', '#[#]', getInterceptor(value), property)) return value;
-  propertyTypeError(value, property);
-}
-
-listSuperNativeTypeCast(value, property) {
-  if (value is List || value == null) return value;
-  if (JS('bool', '#[#]', getInterceptor(value), property)) return value;
-  propertyTypeCastError(value, property);
-}
-
-voidTypeCheck(value) {
-  if (value == null) return value;
-  throw new TypeErrorImplementation(value, 'void');
-}
-
-checkMalformedType(value, message) {
-  if (value == null) return value;
-  throw new TypeErrorImplementation.fromMessage(message);
-}
-
-@NoInline()
-void checkDeferredIsLoaded(String loadId, String uri) {
-  if (!_loadedLibraries.contains(loadId)) {
-    throw new DeferredNotLoadedError(uri);
-  }
-}
-
-/**
- * Special interface recognized by the compiler and implemented by DOM
- * objects that support integer indexing. This interface is not
- * visible to anyone, and is only injected into special libraries.
- */
-abstract class JavaScriptIndexingBehavior extends JSMutableIndexable {
-}
-
-// TODO(lrn): These exceptions should be implemented in core.
-// When they are, remove the 'Implementation' here.
-
-/** Thrown by type assertions that fail. */
-class TypeErrorImplementation extends Error implements TypeError {
-  final String message;
-
-  /**
-   * Normal type error caused by a failed subtype test.
-   */
-  TypeErrorImplementation(Object value, String type)
-      : message = "type '${Primitives.objectTypeName(value)}' is not a subtype "
-                  "of type '$type'";
-
-  TypeErrorImplementation.fromMessage(String this.message);
-
-  String toString() => message;
-}
-
-/** Thrown by the 'as' operator if the cast isn't valid. */
-class CastErrorImplementation extends Error implements CastError {
-  // TODO(lrn): Rename to CastError (and move implementation into core).
-  final String message;
-
-  /**
-   * Normal cast error caused by a failed type cast.
-   */
-  CastErrorImplementation(Object actualType, Object expectedType)
-      : message = "CastError: Casting value of type $actualType to"
-                  " incompatible type $expectedType";
-
-  String toString() => message;
-}
-
-class FallThroughErrorImplementation extends FallThroughError {
-  FallThroughErrorImplementation();
-  String toString() => "Switch case fall-through.";
-}
-
-/**
- * Helper function for implementing asserts. The compiler treats this specially.
- */
-void assertHelper(condition) {
-  // Do a bool check first because it is common and faster than 'is Function'.
-  if (condition is !bool) {
-    if (condition is Function) condition = condition();
-    if (condition is !bool) {
-      throw new TypeErrorImplementation(condition, 'bool');
-    }
-  }
-  // Compare to true to avoid boolean conversion check in checked
-  // mode.
-  if (true != condition) throw new AssertionError();
-}
-
-/**
- * Called by generated code when a method that must be statically
- * resolved cannot be found.
- */
-void throwNoSuchMethod(obj, name, arguments, expectedArgumentNames) {
-  Symbol memberName = new _symbol_dev.Symbol.unvalidated(name);
-  throw new NoSuchMethodError(obj, memberName, arguments,
-                              new Map<Symbol, dynamic>(),
-                              expectedArgumentNames);
-}
-
-/**
- * Called by generated code when a static field's initializer references the
- * field that is currently being initialized.
- */
-void throwCyclicInit(String staticName) {
-  throw new CyclicInitializationError(
-      "Cyclic initialization for static $staticName");
-}
-
-/**
- * Error thrown when a runtime error occurs.
- */
-class RuntimeError extends Error {
-  final message;
-  RuntimeError(this.message);
-  String toString() => "RuntimeError: $message";
-}
-
-class DeferredNotLoadedError extends Error implements NoSuchMethodError {
-  String libraryName;
-
-  DeferredNotLoadedError(this.libraryName);
-
-  String toString() {
-    return "Deferred library $libraryName was not loaded.";
-  }
-}
-
-abstract class RuntimeType {
-  const RuntimeType();
-
-  toRti();
-}
-
-class RuntimeFunctionType extends RuntimeType {
-  final RuntimeType returnType;
-  final List<RuntimeType> parameterTypes;
-  final List<RuntimeType> optionalParameterTypes;
-  final namedParameters;
-
-  static var /* bool */ inAssert = false;
-
-  RuntimeFunctionType(this.returnType,
-                      this.parameterTypes,
-                      this.optionalParameterTypes,
-                      this.namedParameters);
-
-  bool get isVoid => returnType is VoidRuntimeType;
-
-  /// Called from generated code. [expression] is a Dart object and this method
-  /// returns true if [this] is a supertype of [expression].
-  @NoInline() @NoSideEffects()
-  bool _isTest(expression) {
-    var functionTypeObject = _extractFunctionTypeObjectFrom(expression);
-    return functionTypeObject == null
-        ? false
-        : isFunctionSubtype(functionTypeObject, toRti());
-  }
-
-  @NoInline() @NoSideEffects()
-  _asCheck(expression) {
-    // Type inferrer doesn't think this is called with dynamic arguments.
-    return _check(JS('', '#', expression), true);
-  }
-
-  @NoInline() @NoSideEffects()
-  _assertCheck(expression) {
-    if (inAssert) return null;
-    inAssert = true; // Don't try to check this library itself.
-    try {
-      // Type inferrer don't think this is called with dynamic arguments.
-      return _check(JS('', '#', expression), false);
-    } finally {
-      inAssert = false;
-    }
-  }
-
-  _check(expression, bool isCast) {
-    if (expression == null) return null;
-    if (_isTest(expression)) return expression;
-
-    var self = new FunctionTypeInfoDecoderRing(toRti()).toString();
-    if (isCast) {
-      var functionTypeObject = _extractFunctionTypeObjectFrom(expression);
-      var pretty;
-      if (functionTypeObject != null) {
-        pretty = new FunctionTypeInfoDecoderRing(functionTypeObject).toString();
-      } else {
-        pretty = Primitives.objectTypeName(expression);
-      }
-      throw new CastErrorImplementation(pretty, self);
-    } else {
-      // TODO(ahe): Pass "pretty" function-type to TypeErrorImplementation?
-      throw new TypeErrorImplementation(expression, self);
-    }
-  }
-
-  _extractFunctionTypeObjectFrom(o) {
-    var interceptor = getInterceptor(o);
-    return JS('bool', '# in #', JS_SIGNATURE_NAME(), interceptor)
-        ? JS('', '#[#]()', interceptor, JS_SIGNATURE_NAME())
-        : null;
-  }
-
-  toRti() {
-    var result = JS('=Object', '{ #: "dynafunc" }', JS_FUNCTION_TYPE_TAG());
-    if (isVoid) {
-      JS('', '#[#] = true', result, JS_FUNCTION_TYPE_VOID_RETURN_TAG());
-    } else {
-      if (returnType is! DynamicRuntimeType) {
-        JS('', '#[#] = #', result, JS_FUNCTION_TYPE_RETURN_TYPE_TAG(),
-           returnType.toRti());
-      }
-    }
-    if (parameterTypes != null && !parameterTypes.isEmpty) {
-      JS('', '#[#] = #', result, JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG(),
-         listToRti(parameterTypes));
-    }
-
-    if (optionalParameterTypes != null && !optionalParameterTypes.isEmpty) {
-      JS('', '#[#] = #', result, JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG(),
-         listToRti(optionalParameterTypes));
-    }
-
-    if (namedParameters != null) {
-      var namedRti = JS('=Object', '{}');
-      var keys = extractKeys(namedParameters);
-      for (var i = 0; i < keys.length; i++) {
-        var name = keys[i];
-        var rti = JS('', '#[#]', namedParameters, name).toRti();
-        JS('', '#[#] = #', namedRti, name, rti);
-      }
-      JS('', '#[#] = #', result, JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG(),
-         namedRti);
-    }
-
-    return result;
-  }
-
-  static listToRti(list) {
-    list = JS('JSFixedArray', '#', list);
-    var result = JS('JSExtendableArray', '[]');
-    for (var i = 0; i < list.length; i++) {
-      JS('', '#.push(#)', result, list[i].toRti());
-    }
-    return result;
-  }
-
-  String toString() {
-    String result = '(';
-    bool needsComma = false;
-    if (parameterTypes != null) {
-      for (var i = 0; i < parameterTypes.length; i++) {
-        RuntimeType type = parameterTypes[i];
-        if (needsComma) result += ', ';
-        result += '$type';
-        needsComma = true;
-      }
-    }
-    if (optionalParameterTypes != null && !optionalParameterTypes.isEmpty) {
-      if (needsComma) result += ', ';
-      needsComma = false;
-      result += '[';
-      for (var i = 0; i < optionalParameterTypes.length; i++) {
-        RuntimeType type = optionalParameterTypes[i];
-        if (needsComma) result += ', ';
-        result += '$type';
-        needsComma = true;
-      }
-      result += ']';
-    } else if (namedParameters != null) {
-      if (needsComma) result += ', ';
-      needsComma = false;
-      result += '{';
-      var keys = extractKeys(namedParameters);
-      for (var i = 0; i < keys.length; i++) {
-        var name = keys[i];
-        if (needsComma) result += ', ';
-        var rti = JS('', '#[#]', namedParameters, name).toRti();
-        result += '$rti ${JS("String", "#", name)}';
-        needsComma = true;
-      }
-      result += '}';
-    }
-
-    result += ') -> $returnType';
-    return result;
-  }
-}
-
-RuntimeFunctionType buildFunctionType(returnType,
-                                      parameterTypes,
-                                      optionalParameterTypes) {
-  return new RuntimeFunctionType(
-      returnType,
-      parameterTypes,
-      optionalParameterTypes,
-      null);
-}
-
-RuntimeFunctionType buildNamedFunctionType(returnType,
-                                           parameterTypes,
-                                           namedParameters) {
-  return new RuntimeFunctionType(
-      returnType,
-      parameterTypes,
-      null,
-      namedParameters);
-}
-
-RuntimeType buildInterfaceType(rti, typeArguments) {
-  String name = JS('String|Null', r'#.name', rti);
-  if (typeArguments == null || typeArguments.isEmpty) {
-    return new RuntimeTypePlain(name);
-  }
-  return new RuntimeTypeGeneric(name, typeArguments, null);
-}
-
-class DynamicRuntimeType extends RuntimeType {
-  const DynamicRuntimeType();
-
-  String toString() => 'dynamic';
-
-  toRti() => null;
-}
-
-RuntimeType getDynamicRuntimeType() => const DynamicRuntimeType();
-
-class VoidRuntimeType extends RuntimeType {
-  const VoidRuntimeType();
-
-  String toString() => 'void';
-
-  toRti() => throw 'internal error';
-}
-
-RuntimeType getVoidRuntimeType() => const VoidRuntimeType();
-
-/**
- * Meta helper for function type tests.
- *
- * A "meta helper" is a helper function that is never called but simulates how
- * generated code behaves as far as resolution and type inference is concerned.
- */
-functionTypeTestMetaHelper() {
-  var dyn = JS('', 'x');
-  var dyn2 = JS('', 'x');
-  List fixedListOrNull = JS('JSFixedArray|Null', 'x');
-  List fixedListOrNull2 = JS('JSFixedArray|Null', 'x');
-  List fixedList = JS('JSFixedArray', 'x');
-  // TODO(ahe): Can we use [UnknownJavaScriptObject] below?
-  var /* UnknownJavaScriptObject */ jsObject = JS('=Object', 'x');
-
-  buildFunctionType(dyn, fixedListOrNull, fixedListOrNull2);
-  buildNamedFunctionType(dyn, fixedList, jsObject);
-  buildInterfaceType(dyn, fixedListOrNull);
-  getDynamicRuntimeType();
-  getVoidRuntimeType();
-  convertRtiToRuntimeType(dyn);
-  dyn._isTest(dyn2);
-  dyn._asCheck(dyn2);
-  dyn._assertCheck(dyn2);
-}
-
-RuntimeType convertRtiToRuntimeType(rti) {
-  if (rti == null) {
-    return getDynamicRuntimeType();
-  } else if (JS('bool', 'typeof # == "function"', rti)) {
-    return new RuntimeTypePlain(JS('String', r'rti.name'));
-  } else if (JS('bool', '#.constructor == Array', rti)) {
-    List list = JS('JSFixedArray', '#', rti);
-    String name = JS('String', r'#.name', list[0]);
-    List arguments = [];
-    for (int i = 1; i < list.length; i++) {
-      arguments.add(convertRtiToRuntimeType(list[i]));
-    }
-    return new RuntimeTypeGeneric(name, arguments, rti);
-  } else if (JS('bool', '"func" in #', rti)) {
-    return new FunctionTypeInfoDecoderRing(rti).toRuntimeType();
-  } else {
-    throw new RuntimeError(
-        "Cannot convert "
-        "'${JS('String', 'JSON.stringify(#)', rti)}' to RuntimeType.");
-  }
-}
-
-class RuntimeTypePlain extends RuntimeType {
-  final String name;
-
-  RuntimeTypePlain(this.name);
-
-  toRti() {
-    var rti = JS('', 'init.allClasses[#]', name);
-    if (rti == null) throw "no type for '$name'";
-    return rti;
-  }
-
-  String toString() => name;
-}
-
-class RuntimeTypeGeneric extends RuntimeType {
-  final String name;
-  final List<RuntimeType> arguments;
-  var rti;
-
-  RuntimeTypeGeneric(this.name, this.arguments, this.rti);
-
-  toRti() {
-    if (rti != null) return rti;
-    var result = JS('JSExtendableArray', '[init.allClasses[#]]', name);
-    if (result[0] == null) {
-      throw "no type for '$name<...>'";
-    }
-    for (RuntimeType argument in arguments) {
-      JS('', '#.push(#)', result, argument.toRti());
-    }
-    return rti = result;
-  }
-
-  String toString() => '$name<${arguments.join(", ")}>';
-}
-
-class FunctionTypeInfoDecoderRing {
-  final _typeData;
-  String _cachedToString;
-
-  FunctionTypeInfoDecoderRing(this._typeData);
-
-  bool get _hasReturnType => JS('bool', '"ret" in #', _typeData);
-  get _returnType => JS('', '#.ret', _typeData);
-
-  bool get _isVoid => JS('bool', '!!#.void', _typeData);
-
-  bool get _hasArguments => JS('bool', '"args" in #', _typeData);
-  List get _arguments => JS('JSExtendableArray', '#.args', _typeData);
-
-  bool get _hasOptionalArguments => JS('bool', '"opt" in #', _typeData);
-  List get _optionalArguments => JS('JSExtendableArray', '#.opt', _typeData);
-
-  bool get _hasNamedArguments => JS('bool', '"named" in #', _typeData);
-  get _namedArguments => JS('=Object', '#.named', _typeData);
-
-  RuntimeType toRuntimeType() {
-    // TODO(ahe): Implement this (and update return type).
-    return const DynamicRuntimeType();
-  }
-
-  String _convert(type) {
-    String result = runtimeTypeToString(type);
-    if (result != null) return result;
-    if (JS('bool', '"func" in #', type)) {
-      return new FunctionTypeInfoDecoderRing(type).toString();
-    } else {
-      throw 'bad type';
-    }
-  }
-
-  String toString() {
-    if (_cachedToString != null) return _cachedToString;
-    var s = "(";
-    var sep = '';
-    if (_hasArguments) {
-      for (var argument in _arguments) {
-        s += sep;
-        s += _convert(argument);
-        sep = ', ';
-      }
-    }
-    if (_hasOptionalArguments) {
-      s += '$sep[';
-      sep = '';
-      for (var argument in _optionalArguments) {
-        s += sep;
-        s += _convert(argument);
-        sep = ', ';
-      }
-      s += ']';
-    }
-    if (_hasNamedArguments) {
-      s += '$sep{';
-      sep = '';
-      for (var name in extractKeys(_namedArguments)) {
-        s += sep;
-        s += '$name: ';
-        s += _convert(JS('', '#[#]', _namedArguments, name));
-        sep = ', ';
-      }
-      s += '}';
-    }
-    s += ') -> ';
-    if (_isVoid) {
-      s += 'void';
-    } else if (_hasReturnType) {
-      s += _convert(_returnType);
-    } else {
-      s += 'dynamic';
-    }
-    return _cachedToString = "$s";
-  }
-}
-
-// TODO(ahe): Remove this class and call noSuchMethod instead.
-class UnimplementedNoSuchMethodError extends Error
-    implements NoSuchMethodError {
-  final String _message;
-
-  UnimplementedNoSuchMethodError(this._message);
-
-  String toString() => "Unsupported operation: $_message";
-}
-
-/**
- * Creates a random number with 64 bits of randomness.
- *
- * This will be truncated to the 53 bits available in a double.
- */
-int random64() {
-  // TODO(lrn): Use a secure random source.
-  int int32a = JS("int", "(Math.random() * 0x100000000) >>> 0");
-  int int32b = JS("int", "(Math.random() * 0x100000000) >>> 0");
-  return int32a + int32b * 0x100000000;
-}
-
-/**
- * Returns a property name for placing data on JavaScript objects shared between
- * DOM isolates.  This happens when multiple programs are loaded in the same
- * JavaScript context (i.e. page).  The name is based on [name] but with an
- * additional part that is unique for each isolate.
- *
- * The form of the name is '___dart_$name_$id'.
- */
-String getIsolateAffinityTag(String name) {
-  return JS('String', 'init.getIsolateTag(#)', name);
-}
-
-typedef Future<Null> LoadLibraryFunctionType();
-
-LoadLibraryFunctionType _loadLibraryWrapper(String loadId) {
-  return () => loadDeferredLibrary(loadId);
-}
-
-final Map<String, Future<Null>> _loadingLibraries = <String, Future<Null>>{};
-final Set<String> _loadedLibraries = new Set<String>();
-
-Future<Null> loadDeferredLibrary(String loadId, [String uri]) {
-  List<List<String>> hunkLists = JS('JSExtendableArray|Null',
-      '\$.libraries_to_load[#]', loadId);
-  if (hunkLists == null) return new Future.value(null);
-
-  return Future.forEach(hunkLists, (hunkNames) {
-    Iterable<Future<Null>> allLoads =
-        hunkNames.map((hunkName) => _loadHunk(hunkName, uri));
-    return Future.wait(allLoads).then((_) => null);
-  }).then((_) => _loadedLibraries.add(loadId));
-}
-
-Future<Null> _loadHunk(String hunkName, String uri) {
-  // TODO(ahe): Validate libraryName.  Kasper points out that you want
-  // to be able to experiment with the effect of toggling @DeferLoad,
-  // so perhaps we should silently ignore "bad" library names.
-  Future<Null> future = _loadingLibraries[hunkName];
-  if (future != null) {
-    return future.then((_) => null);
-  }
-
-  if (uri == null) {
-    uri = IsolateNatives.thisScript;
-  }
-  int index = uri.lastIndexOf('/');
-  uri = '${uri.substring(0, index + 1)}$hunkName';
-
-  if (Primitives.isJsshell || Primitives.isD8) {
-    // TODO(ahe): Move this code to a JavaScript command helper script that is
-    // not included in generated output.
-    return _loadingLibraries[hunkName] = new Future<Null>(() {
-      try {
-        // Create a new function to avoid getting access to current function
-        // context.
-        JS('void', '(new Function(#))()', 'load("$uri")');
-      } catch (error, stackTrace) {
-        throw new DeferredLoadException("Loading $uri failed.");
-      }
-      return null;
-    });
-  } else if (isWorker()) {
-    // We are in a web worker. Load the code with an XMLHttpRequest.
-    return _loadingLibraries[hunkName] = new Future<Null>(() {
-      Completer completer = new Completer<Null>();
-      enterJsAsync();
-      Future<Null> leavingFuture = completer.future.whenComplete(() {
-        leaveJsAsync();
-      });
-
-      int index = uri.lastIndexOf('/');
-      uri = '${uri.substring(0, index + 1)}$hunkName';
-      var xhr = JS('dynamic', 'new XMLHttpRequest()');
-      JS('void', '#.open("GET", #)', xhr, uri);
-      JS('void', '#.addEventListener("load", #, false)',
-         xhr, convertDartClosureToJS((event) {
-        if (JS('int', '#.status', xhr) != 200) {
-          completer.completeError(
-              new DeferredLoadException("Loading $uri failed."));
-          return;
-        }
-        String code = JS('String', '#.responseText', xhr);
-        try {
-          // Create a new function to avoid getting access to current function
-          // context.
-          JS('void', '(new Function(#))()', code);
-        } catch (error, stackTrace) {
-          completer.completeError(
-            new DeferredLoadException("Evaluating $uri failed."));
-          return;
-        }
-        completer.complete(null);
-      }, 1));
-
-      var fail = convertDartClosureToJS((event) {
-        new DeferredLoadException("Loading $uri failed.");
-      }, 1);
-      JS('void', '#.addEventListener("error", #, false)', xhr, fail);
-      JS('void', '#.addEventListener("abort", #, false)', xhr, fail);
-
-      JS('void', '#.send()', xhr);
-      return leavingFuture;
-    });
-  }
-  // We are in a dom-context.
-  return _loadingLibraries[hunkName] = new Future<Null>(() {
-    Completer completer = new Completer<Null>();
-    // Inject a script tag.
-    var script = JS('', 'document.createElement("script")');
-    JS('', '#.type = "text/javascript"', script);
-    JS('', '#.src = #', script, uri);
-    JS('', '#.addEventListener("load", #, false)',
-       script, convertDartClosureToJS((event) {
-      completer.complete(null);
-    }, 1));
-    JS('', '#.addEventListener("error", #, false)',
-       script, convertDartClosureToJS((event) {
-      completer.completeError(
-          new DeferredLoadException("Loading $uri failed."));
-    }, 1));
-    JS('', 'document.body.appendChild(#)', script);
-
-    return completer.future;
-  });
-}
-
-class MainError extends Error implements NoSuchMethodError {
-  final String _message;
-
-  MainError(this._message);
-
-  String toString() => 'NoSuchMethodError: $_message';
-}
-
-void missingMain() {
-  throw new MainError("No top-level function named 'main'.");
-}
-
-void badMain() {
-  throw new MainError("'main' is not a function.");
-}
-
-void mainHasTooManyParameters() {
-  throw new MainError("'main' expects too many parameters.");
-}
diff --git a/sdk/lib/_internal/lib/js_mirrors.dart b/sdk/lib/_internal/lib/js_mirrors.dart
deleted file mode 100644
index 70f37ea..0000000
--- a/sdk/lib/_internal/lib/js_mirrors.dart
+++ /dev/null
@@ -1,2931 +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.
-
-library dart._js_mirrors;
-
-import '../compiler/implementation/runtime_data.dart' as encoding;
-
-import 'dart:collection' show
-    UnmodifiableListView,
-    UnmodifiableMapView;
-
-import 'dart:mirrors';
-
-import 'dart:_foreign_helper' show
-    JS,
-    JS_CURRENT_ISOLATE,
-    JS_CURRENT_ISOLATE_CONTEXT,
-    JS_GET_NAME;
-
-import 'dart:_internal' as _symbol_dev;
-
-import 'dart:_js_helper' show
-    BoundClosure,
-    CachedInvocation,
-    Closure,
-    JSInvocationMirror,
-    JsCache,
-    Null,
-    Primitives,
-    ReflectionInfo,
-    RuntimeError,
-    TearOffClosure,
-    TypeVariable,
-    UnimplementedNoSuchMethodError,
-    createRuntimeType,
-    createUnmangledInvocationMirror,
-    getMangledTypeName,
-    getMetadata,
-    getRuntimeType,
-    runtimeTypeToString,
-    setRuntimeTypeInfo,
-    throwInvalidReflectionError;
-
-import 'dart:_interceptors' show
-    Interceptor,
-    JSArray,
-    JSExtendableArray,
-    getInterceptor;
-
-import 'dart:_js_names';
-
-const String METHODS_WITH_OPTIONAL_ARGUMENTS = r'$methodsWithOptionalArguments';
-
-bool hasReflectableProperty(var jsFunction) {
-  return JS('bool', '# in #', JS_GET_NAME("REFLECTABLE"), jsFunction);
-}
-
-/// No-op method that is called to inform the compiler that tree-shaking needs
-/// to be disabled.
-disableTreeShaking() => preserveNames();
-
-/// No-op method that is called to inform the compiler that metadata must be
-/// preserved at runtime.
-preserveMetadata() {}
-
-/// No-op method that is called to inform the compiler that the compiler must
-/// preserve the URIs.
-preserveUris() {}
-
-/// No-op method that is called to inform the compiler that the compiler must
-/// preserve the library names.
-preserveLibraryNames() {}
-
-String getName(Symbol symbol) {
-  preserveNames();
-  return n(symbol);
-}
-
-class JsMirrorSystem implements MirrorSystem {
-  UnmodifiableMapView<Uri, LibraryMirror> _cachedLibraries;
-
-  final IsolateMirror isolate = new JsIsolateMirror();
-
-  JsTypeMirror get dynamicType => _dynamicType;
-  JsTypeMirror get voidType => _voidType;
-
-  static final JsTypeMirror _dynamicType =
-      new JsTypeMirror(const Symbol('dynamic'));
-  static final JsTypeMirror _voidType = new JsTypeMirror(const Symbol('void'));
-
-  static final Map<String, List<LibraryMirror>> librariesByName =
-      computeLibrariesByName();
-
-  Map<Uri, LibraryMirror> get libraries {
-    if (_cachedLibraries != null) return _cachedLibraries;
-    Map<Uri, LibraryMirror> result = new Map();
-    for (List<LibraryMirror> list in librariesByName.values) {
-      for (LibraryMirror library in list) {
-        result[library.uri] = library;
-      }
-    }
-    return _cachedLibraries =
-        new UnmodifiableMapView<Uri, LibraryMirror>(result);
-  }
-
-  LibraryMirror findLibrary(Symbol libraryName) {
-    return librariesByName[n(libraryName)].single;
-  }
-
-  static Map<String, List<LibraryMirror>> computeLibrariesByName() {
-    disableTreeShaking();
-    var result = new Map<String, List<LibraryMirror>>();
-    var jsLibraries = JS('JSExtendableArray|Null', 'init.libraries');
-    if (jsLibraries == null) return result;
-    for (List data in jsLibraries) {
-      String name = data[0];
-      Uri uri = Uri.parse(data[1]);
-      List<String> classes = data[2];
-      List<String> functions = data[3];
-      var metadataFunction = data[4];
-      var fields = data[5];
-      bool isRoot = data[6];
-      var globalObject = data[7];
-      List metadata = (metadataFunction == null)
-          ? const [] : JS('List', '#()', metadataFunction);
-      var libraries = result.putIfAbsent(name, () => <LibraryMirror>[]);
-      libraries.add(
-          new JsLibraryMirror(
-              s(name), uri, classes, functions, metadata, fields, isRoot,
-              globalObject));
-    }
-    return result;
-  }
-}
-
-abstract class JsMirror implements Mirror {
-  const JsMirror();
-
-  String get _prettyName;
-
-  String toString() => _prettyName;
-
-  // TODO(ahe): Remove this method from the API.
-  MirrorSystem get mirrors => currentJsMirrorSystem;
-
-  _getField(JsMirror receiver) {
-    throw new UnimplementedError();
-  }
-
-  void _setField(JsMirror receiver, Object arg) {
-    throw new UnimplementedError();
-  }
-
-  _loadField(String name) {
-    throw new UnimplementedError();
-  }
-
-  void _storeField(String name, Object arg) {
-    throw new UnimplementedError();
-  }
-}
-
-// This class is somewhat silly in the current implementation.
-class JsIsolateMirror extends JsMirror implements IsolateMirror {
-  final _isolateContext = JS_CURRENT_ISOLATE_CONTEXT();
-
-  String get _prettyName => 'Isolate';
-
-  String get debugName {
-    String id = _isolateContext == null ? 'X' : _isolateContext.id.toString();
-    // Using name similar to what the VM uses.
-    return '${n(rootLibrary.simpleName)}-$id';
-  }
-
-  bool get isCurrent => JS_CURRENT_ISOLATE_CONTEXT() == _isolateContext;
-
-  LibraryMirror get rootLibrary {
-    return currentJsMirrorSystem.libraries.values.firstWhere(
-        (JsLibraryMirror library) => library._isRoot);
-  }
-}
-
-abstract class JsDeclarationMirror extends JsMirror
-    implements DeclarationMirror {
-  final Symbol simpleName;
-
-  const JsDeclarationMirror(this.simpleName);
-
-  Symbol get qualifiedName => computeQualifiedName(owner, simpleName);
-
-  bool get isPrivate => n(simpleName).startsWith('_');
-
-  bool get isTopLevel => owner != null && owner is LibraryMirror;
-
-  // TODO(ahe): This should use qualifiedName.
-  String toString() => "$_prettyName on '${n(simpleName)}'";
-
-  List<JsMethodMirror> get _methods {
-    throw new RuntimeError('Should not call _methods');
-  }
-
-  _invoke(List positionalArguments, Map<Symbol, dynamic> namedArguments) {
-    throw new RuntimeError('Should not call _invoke');
-  }
-
-  // TODO(ahe): Implement this.
-  SourceLocation get location => throw new UnimplementedError();
-}
-
-class JsTypeVariableMirror extends JsTypeMirror implements TypeVariableMirror {
-  final DeclarationMirror owner;
-  final TypeVariable _typeVariable;
-  final int _metadataIndex;
-  TypeMirror _cachedUpperBound;
-
-  JsTypeVariableMirror(TypeVariable typeVariable, this.owner,
-                       this._metadataIndex)
-      : this._typeVariable = typeVariable,
-        super(s(typeVariable.name));
-
-  bool operator ==(other) {
-    return (other is JsTypeVariableMirror &&
-        simpleName == other.simpleName &&
-        owner == other.owner);
-  }
-
-  int get hashCode {
-    int code = 0x3FFFFFFF & (JsTypeVariableMirror).hashCode;
-    code ^= 17 * simpleName.hashCode;
-    code ^= 19 * owner.hashCode;
-    return code;
-  }
-
-  String get _prettyName => 'TypeVariableMirror';
-
-  bool get isTopLevel => false;
-  bool get isStatic => false;
-
-  TypeMirror get upperBound {
-    if (_cachedUpperBound != null) return _cachedUpperBound;
-    return _cachedUpperBound = typeMirrorFromRuntimeTypeRepresentation(
-        owner, getMetadata(_typeVariable.bound));
-  }
-
-  bool isSubtypeOf(TypeMirror other) => throw new UnimplementedError();
-  bool isAssignableTo(TypeMirror other) => throw new UnimplementedError();
-
-  _asRuntimeType() => _metadataIndex;
-}
-
-class JsTypeMirror extends JsDeclarationMirror implements TypeMirror {
-  JsTypeMirror(Symbol simpleName)
-      : super(simpleName);
-
-  String get _prettyName => 'TypeMirror';
-
-  DeclarationMirror get owner => null;
-
-  // TODO(ahe): Doesn't match the specification, see http://dartbug.com/11569.
-  bool get isTopLevel => true;
-
-  // TODO(ahe): Implement these.
-  List<InstanceMirror> get metadata => throw new UnimplementedError();
-
-  bool get hasReflectedType => false;
-  Type get reflectedType {
-    throw new UnsupportedError("This type does not support reflectedType");
-  }
-
-  List<TypeVariableMirror> get typeVariables => const <TypeVariableMirror>[];
-  List<TypeMirror> get typeArguments => const <TypeMirror>[];
-
-  bool get isOriginalDeclaration => true;
-  TypeMirror get originalDeclaration => this;
-
-  bool isSubtypeOf(TypeMirror other) => throw new UnimplementedError();
-  bool isAssignableTo(TypeMirror other) => throw new UnimplementedError();
-
-  _asRuntimeType() {
-    if (this == JsMirrorSystem._dynamicType) return null;
-    if (this == JsMirrorSystem._voidType) return null;
-    throw new RuntimeError('Should not call _asRuntimeType');
-  }
-}
-
-class JsLibraryMirror extends JsDeclarationMirror with JsObjectMirror
-    implements LibraryMirror {
-  final Uri _uri;
-  final List<String> _classes;
-  final List<String> _functions;
-  final List _metadata;
-  final String _compactFieldSpecification;
-  final bool _isRoot;
-  final _globalObject;
-  List<JsMethodMirror> _cachedFunctionMirrors;
-  List<VariableMirror> _cachedFields;
-  UnmodifiableMapView<Symbol, ClassMirror> _cachedClasses;
-  UnmodifiableMapView<Symbol, MethodMirror> _cachedFunctions;
-  UnmodifiableMapView<Symbol, MethodMirror> _cachedGetters;
-  UnmodifiableMapView<Symbol, MethodMirror> _cachedSetters;
-  UnmodifiableMapView<Symbol, VariableMirror> _cachedVariables;
-  UnmodifiableMapView<Symbol, Mirror> _cachedMembers;
-  UnmodifiableMapView<Symbol, DeclarationMirror> _cachedDeclarations;
-  UnmodifiableListView<InstanceMirror> _cachedMetadata;
-
-  JsLibraryMirror(Symbol simpleName,
-                  this._uri,
-                  this._classes,
-                  this._functions,
-                  this._metadata,
-                  this._compactFieldSpecification,
-                  this._isRoot,
-                  this._globalObject)
-      : super(simpleName) {
-    preserveLibraryNames();
-  }
-
-  String get _prettyName => 'LibraryMirror';
-
-  Uri get uri {
-    preserveUris();
-    return _uri;
-  }
-
-  Symbol get qualifiedName => simpleName;
-
-  List<JsMethodMirror> get _methods => _functionMirrors;
-
-  Map<Symbol, ClassMirror> get __classes {
-    if (_cachedClasses != null) return _cachedClasses;
-    var result = new Map();
-    for (String className in _classes) {
-      var cls = reflectClassByMangledName(className);
-      if (cls is ClassMirror) {
-        cls = cls.originalDeclaration;
-      }
-      if (cls is JsClassMirror) {
-        result[cls.simpleName] = cls;
-        cls._owner = this;
-      } else  if (cls is JsTypedefMirror) {
-        result[cls.simpleName] = cls;
-      }
-    }
-    return _cachedClasses =
-        new UnmodifiableMapView<Symbol, ClassMirror>(result);
-  }
-
-  InstanceMirror setField(Symbol fieldName, Object arg) {
-    String name = n(fieldName);
-    if (name.endsWith('=')) throw new ArgumentError('');
-    var mirror = __functions[s('$name=')];
-    if (mirror == null) mirror = __variables[fieldName];
-    if (mirror == null) {
-      throw new NoSuchStaticMethodError.method(
-          null, setterSymbol(fieldName), [arg], null);
-    }
-    mirror._setField(this, arg);
-    return reflect(arg);
-  }
-
-  InstanceMirror getField(Symbol fieldName) {
-    JsMirror mirror = __members[fieldName];
-    if (mirror == null) {
-      throw new NoSuchStaticMethodError.method(null, fieldName, [], null);
-    }
-    if (mirror is! MethodMirror) return reflect(mirror._getField(this));
-    JsMethodMirror methodMirror = mirror;
-    if (methodMirror.isGetter) return reflect(mirror._getField(this));
-    assert(methodMirror.isRegularMethod);
-    var getter = JS("", "#['\$getter']", methodMirror._jsFunction);
-    if (getter == null) throw new UnimplementedError();
-    return reflect(JS("", "#()", getter));
-  }
-
-  InstanceMirror invoke(Symbol memberName,
-                        List positionalArguments,
-                        [Map<Symbol, dynamic> namedArguments]) {
-    if (namedArguments != null && !namedArguments.isEmpty) {
-      throw new UnsupportedError('Named arguments are not implemented.');
-    }
-    JsDeclarationMirror mirror = __members[memberName];
-
-    if (mirror is JsMethodMirror && !mirror.canInvokeReflectively()) {
-      throwInvalidReflectionError(n(memberName));
-    }
-    if (mirror == null || mirror is JsMethodMirror && mirror.isSetter) {
-      throw new NoSuchStaticMethodError.method(
-          null, memberName, positionalArguments, namedArguments);
-    }
-    if (mirror is JsMethodMirror && !mirror.isGetter) {
-      return reflect(mirror._invoke(positionalArguments, namedArguments));
-    }
-    return getField(memberName)
-        .invoke(#call, positionalArguments, namedArguments);
-  }
-
-  _loadField(String name) {
-    // TODO(ahe): What about lazily initialized fields? See
-    // [JsClassMirror.getField].
-
-    // '$' (JS_CURRENT_ISOLATE()) stores state which is read directly, so we
-    // shouldn't use [_globalObject] here.
-    assert(JS('bool', '# in #', name, JS_CURRENT_ISOLATE()));
-    return JS('', '#[#]', JS_CURRENT_ISOLATE(), name);
-  }
-
-  void _storeField(String name, Object arg) {
-    // '$' (JS_CURRENT_ISOLATE()) stores state which is stored directly, so we
-    // shouldn't use [_globalObject] here.
-    assert(JS('bool', '# in #', name, JS_CURRENT_ISOLATE()));
-    JS('void', '#[#] = #', JS_CURRENT_ISOLATE(), name, arg);
-  }
-
-  List<JsMethodMirror> get _functionMirrors {
-    if (_cachedFunctionMirrors != null) return _cachedFunctionMirrors;
-    var result = new List<JsMethodMirror>();
-    for (int i = 0; i < _functions.length; i++) {
-      String name = _functions[i];
-      var jsFunction = JS('', '#[#]', _globalObject, name);
-      String unmangledName = mangledGlobalNames[name];
-      if (unmangledName == null ||
-          JS('bool', "!!#['\$getterStub']", jsFunction)) {
-        // If there is no unmangledName, [jsFunction] is either a synthetic
-        // implementation detail, or something that is excluded
-        // by @MirrorsUsed.
-        // If it has a getterStub property it is a synthetic stub.
-        // TODO(floitsch): Remove the getterStub hack.
-        continue;
-      }
-      bool isConstructor = unmangledName.startsWith('new ');
-      bool isStatic = !isConstructor; // Top-level functions are static, but
-                                      // constructors are not.
-      if (isConstructor) {
-        unmangledName = unmangledName.substring(4).replaceAll(r'$', '.');
-      }
-      JsMethodMirror mirror =
-          new JsMethodMirror.fromUnmangledName(
-              unmangledName, jsFunction, isStatic, isConstructor);
-      result.add(mirror);
-      mirror._owner = this;
-    }
-    return _cachedFunctionMirrors = result;
-  }
-
-  List<VariableMirror> get _fields {
-    if (_cachedFields != null) return _cachedFields;
-    var result = <VariableMirror>[];
-    parseCompactFieldSpecification(
-        this, _compactFieldSpecification, true, result);
-    return _cachedFields = result;
-  }
-
-  Map<Symbol, MethodMirror> get __functions {
-    if (_cachedFunctions != null) return _cachedFunctions;
-    var result = new Map();
-    for (JsMethodMirror mirror in _functionMirrors) {
-      if (!mirror.isConstructor) result[mirror.simpleName] = mirror;
-    }
-    return _cachedFunctions =
-        new UnmodifiableMapView<Symbol, MethodMirror>(result);
-  }
-
-  Map<Symbol, MethodMirror> get __getters {
-    if (_cachedGetters != null) return _cachedGetters;
-    var result = new Map();
-    // TODO(ahe): Implement this.
-    return _cachedGetters =
-        new UnmodifiableMapView<Symbol, MethodMirror>(result);
-  }
-
-  Map<Symbol, MethodMirror> get __setters {
-    if (_cachedSetters != null) return _cachedSetters;
-    var result = new Map();
-    // TODO(ahe): Implement this.
-    return _cachedSetters =
-        new UnmodifiableMapView<Symbol, MethodMirror>(result);
-  }
-
-  Map<Symbol, VariableMirror> get __variables {
-    if (_cachedVariables != null) return _cachedVariables;
-    var result = new Map();
-    for (JsVariableMirror mirror in _fields) {
-      result[mirror.simpleName] = mirror;
-    }
-    return _cachedVariables =
-        new UnmodifiableMapView<Symbol, VariableMirror>(result);
-  }
-
-  Map<Symbol, Mirror> get __members {
-    if (_cachedMembers !=  null) return _cachedMembers;
-    Map<Symbol, Mirror> result = new Map.from(__classes);
-    addToResult(Symbol key, Mirror value) {
-      result[key] = value;
-    }
-    __functions.forEach(addToResult);
-    __getters.forEach(addToResult);
-    __setters.forEach(addToResult);
-    __variables.forEach(addToResult);
-    return _cachedMembers = new UnmodifiableMapView<Symbol, Mirror>(result);
-  }
-
-  Map<Symbol, DeclarationMirror> get declarations {
-    if (_cachedDeclarations != null) return _cachedDeclarations;
-    var result = new Map<Symbol, DeclarationMirror>();
-    addToResult(Symbol key, Mirror value) {
-      result[key] = value;
-    }
-    __members.forEach(addToResult);
-    return _cachedDeclarations =
-        new UnmodifiableMapView<Symbol, DeclarationMirror>(result);
-  }
-
-  List<InstanceMirror> get metadata {
-    if (_cachedMetadata != null) return _cachedMetadata;
-    preserveMetadata();
-    return _cachedMetadata =
-        new UnmodifiableListView<InstanceMirror>(_metadata.map(reflect));
-  }
-
-  // TODO(ahe): Test this getter.
-  DeclarationMirror get owner => null;
-
-  List<LibraryDependencyMirror> get libraryDependencies
-      => throw new UnimplementedError();
-}
-
-String n(Symbol symbol) => _symbol_dev.Symbol.getName(symbol);
-
-Symbol s(String name) {
-  if (name == null) return null;
-  return new _symbol_dev.Symbol.unvalidated(name);
-}
-
-Symbol setterSymbol(Symbol symbol) => s("${n(symbol)}=");
-
-final JsMirrorSystem currentJsMirrorSystem = new JsMirrorSystem();
-
-InstanceMirror reflect(Object reflectee) {
-  if (reflectee is Closure) {
-    return new JsClosureMirror(reflectee);
-  } else {
-    return new JsInstanceMirror(reflectee);
-  }
-}
-
-TypeMirror reflectType(Type key) {
-  return reflectClassByMangledName(getMangledTypeName(key));
-}
-
-TypeMirror reflectClassByMangledName(String mangledName) {
-  String unmangledName = mangledGlobalNames[mangledName];
-  if (mangledName == 'dynamic') return JsMirrorSystem._dynamicType;
-  if (mangledName == 'void') return JsMirrorSystem._voidType;
-  if (unmangledName == null) unmangledName = mangledName;
-  return reflectClassByName(s(unmangledName), mangledName);
-}
-
-var classMirrors;
-
-TypeMirror reflectClassByName(Symbol symbol, String mangledName) {
-  if (classMirrors == null) classMirrors = JsCache.allocate();
-  var mirror = JsCache.fetch(classMirrors, mangledName);
-  if (mirror != null) return mirror;
-  disableTreeShaking();
-  int typeArgIndex = mangledName.indexOf("<");
-  if (typeArgIndex != -1) {
-    mirror = new JsTypeBoundClassMirror(reflectClassByMangledName(
-        mangledName.substring(0, typeArgIndex)).originalDeclaration,
-        // Remove the angle brackets enclosing the type arguments.
-        mangledName.substring(typeArgIndex + 1, mangledName.length - 1));
-    JsCache.update(classMirrors, mangledName, mirror);
-    return mirror;
-  }
-  var constructor = JS('var', 'init.allClasses[#]', mangledName);
-  if (constructor == null) {
-    // Probably an intercepted class.
-    // TODO(ahe): How to handle intercepted classes?
-    throw new UnsupportedError('Cannot find class for: ${n(symbol)}');
-  }
-  var descriptor = JS('', '#["@"]', constructor);
-  var fields;
-  var fieldsMetadata;
-  if (descriptor == null) {
-    // This is a native class, or an intercepted class.
-    // TODO(ahe): Preserve descriptor for such classes.
-  } else {
-    fields = JS('', '#[#]', descriptor,
-        JS_GET_NAME('CLASS_DESCRIPTOR_PROPERTY'));
-    if (fields is List) {
-      fieldsMetadata = fields.getRange(1, fields.length).toList();
-      fields = fields[0];
-    }
-    if (fields is! String) {
-      // TODO(ahe): This is CSP mode.  Find a way to determine the
-      // fields of this class.
-      fields = '';
-    }
-  }
-
-  if (encoding.isTypedefDescriptor(fields)) {
-    int index = encoding.getTypeFromTypedef(fields);
-    mirror = new JsTypedefMirror(symbol, mangledName, getMetadata(index));
-  } else {
-    var superclassName = fields.split(';')[0];
-    var mixins = superclassName.split('+');
-    if (mixins.length > 1 && mangledGlobalNames[mangledName] == null) {
-      mirror = reflectMixinApplication(mixins, mangledName);
-    } else {
-      ClassMirror classMirror = new JsClassMirror(
-          symbol, mangledName, constructor, fields, fieldsMetadata);
-      List typeVariables =
-          JS('JSExtendableArray|Null', '#.prototype["<>"]', constructor);
-      if (typeVariables == null || typeVariables.length == 0) {
-        mirror = classMirror;
-      } else {
-        String typeArguments = 'dynamic';
-        for (int i = 1; i < typeVariables.length; i++) {
-          typeArguments += ',dynamic';
-        }
-        mirror = new JsTypeBoundClassMirror(classMirror, typeArguments);
-      }
-    }
-  }
-
-  JsCache.update(classMirrors, mangledName, mirror);
-  return mirror;
-}
-
-Map<Symbol, MethodMirror> filterMethods(List<MethodMirror> methods) {
-  var result = new Map();
-  for (JsMethodMirror method in methods) {
-    if (!method.isConstructor && !method.isGetter && !method.isSetter) {
-      result[method.simpleName] = method;
-    }
-  }
-  return result;
-}
-
-Map<Symbol, MethodMirror> filterConstructors(methods) {
-  var result = new Map();
-  for (JsMethodMirror method in methods) {
-    if (method.isConstructor) {
-      result[method.simpleName] = method;
-    }
-  }
-  return result;
-}
-
-Map<Symbol, MethodMirror> filterGetters(List<MethodMirror> methods,
-                                        Map<Symbol, VariableMirror> fields) {
-  var result = new Map();
-  for (JsMethodMirror method in methods) {
-    if (method.isGetter) {
-
-      // TODO(ahe): This is a hack to remove getters corresponding to a field.
-      if (fields[method.simpleName] != null) continue;
-
-      result[method.simpleName] = method;
-    }
-  }
-  return result;
-}
-
-Map<Symbol, MethodMirror> filterSetters(List<MethodMirror> methods,
-                                        Map<Symbol, VariableMirror> fields) {
-  var result = new Map();
-  for (JsMethodMirror method in methods) {
-    if (method.isSetter) {
-
-      // TODO(ahe): This is a hack to remove setters corresponding to a field.
-      String name = n(method.simpleName);
-      name = name.substring(0, name.length - 1); // Remove '='.
-      if (fields[s(name)] != null) continue;
-
-      result[method.simpleName] = method;
-    }
-  }
-  return result;
-}
-
-Map<Symbol, Mirror> filterMembers(List<MethodMirror> methods,
-                                  Map<Symbol, VariableMirror> variables) {
-  Map<Symbol, Mirror> result = new Map.from(variables);
-  for (JsMethodMirror method in methods) {
-    if (method.isSetter) {
-      String name = n(method.simpleName);
-      name = name.substring(0, name.length - 1);
-      // Filter-out setters corresponding to variables.
-      if (result[s(name)] is VariableMirror) continue;
-    }
-    // Constructors aren't 'members'.
-    if (method.isConstructor) continue;
-    // Use putIfAbsent to filter-out getters corresponding to variables.
-    result.putIfAbsent(method.simpleName, () => method);
-  }
-  return result;
-}
-
-int counter = 0;
-
-ClassMirror reflectMixinApplication(mixinNames, String mangledName) {
-  disableTreeShaking();
-  var mixins = [];
-  for (String mangledName in mixinNames) {
-    mixins.add(reflectClassByMangledName(mangledName));
-  }
-  var it = mixins.iterator;
-  it.moveNext();
-  var superclass = it.current;
-  while (it.moveNext()) {
-    superclass = new JsMixinApplication(superclass, it.current, mangledName);
-  }
-  return superclass;
-}
-
-class JsMixinApplication extends JsTypeMirror with JsObjectMirror
-    implements ClassMirror {
-  final ClassMirror superclass;
-  final ClassMirror mixin;
-  Symbol _cachedSimpleName;
-  Map<Symbol, MethodMirror> _cachedInstanceMembers;
-
-  JsMixinApplication(ClassMirror superclass, ClassMirror mixin,
-                     String mangledName)
-      : this.superclass = superclass,
-        this.mixin = mixin,
-        super(s(mangledName));
-
-  String get _prettyName => 'ClassMirror';
-
-  Symbol get simpleName {
-    if (_cachedSimpleName != null) return _cachedSimpleName;
-    String superName = n(superclass.qualifiedName);
-    return _cachedSimpleName = (superName.contains(' with '))
-        ? s('$superName, ${n(mixin.qualifiedName)}')
-        : s('$superName with ${n(mixin.qualifiedName)}');
-  }
-
-  Symbol get qualifiedName => simpleName;
-
-  // TODO(ahe): Remove this method, only here to silence warning.
-  get _mixin => mixin;
-
-  Map<Symbol, Mirror> get __members => _mixin.__members;
-
-  Map<Symbol, MethodMirror> get __methods => _mixin.__methods;
-
-  Map<Symbol, MethodMirror> get __getters => _mixin.__getters;
-
-  Map<Symbol, MethodMirror> get __setters => _mixin.__setters;
-
-  Map<Symbol, VariableMirror> get __variables => _mixin.__variables;
-
-  Map<Symbol, DeclarationMirror> get declarations => mixin.declarations;
-
-  Map<Symbol, MethodMirror> get instanceMembers {
-    if (_cachedInstanceMembers == null) {
-      var result = new Map<Symbol, MethodMirror>();
-      if (superclass != null) {
-        result.addAll(superclass.instanceMembers);
-      }
-      result.addAll(mixin.instanceMembers);
-      _cachedInstanceMembers = result;
-    }
-    return _cachedInstanceMembers;
-  }
-
-  Map<Symbol, MethodMirror> get staticMembers => mixin.staticMembers;
-
-  _asRuntimeType() => null;
-
-  InstanceMirror invoke(
-      Symbol memberName,
-      List positionalArguments,
-      [Map<Symbol,dynamic> namedArguments]) {
-    throw new NoSuchStaticMethodError.method(
-        null, memberName, positionalArguments, namedArguments);
-  }
-
-  InstanceMirror getField(Symbol fieldName) {
-    throw new NoSuchStaticMethodError.method(null, fieldName, null, null);
-  }
-
-  InstanceMirror setField(Symbol fieldName, Object arg) {
-    throw new NoSuchStaticMethodError.method(
-        null, setterSymbol(fieldName), [arg], null);
-  }
-
-  List<ClassMirror> get superinterfaces => [mixin];
-
-  Map<Symbol, MethodMirror> get __constructors => _mixin.__constructors;
-
-  InstanceMirror newInstance(
-      Symbol constructorName,
-      List positionalArguments,
-      [Map<Symbol,dynamic> namedArguments]) {
-    throw new UnsupportedError(
-        "Can't instantiate mixin application '${n(qualifiedName)}'");
-  }
-
-  bool get isOriginalDeclaration => true;
-
-  ClassMirror get originalDeclaration => this;
-
-  // TODO(ahe): Implement this.
-  List<TypeVariableMirror> get typeVariables {
-    throw new UnimplementedError();
-  }
-
-  List<TypeMirror> get typeArguments => const <TypeMirror>[];
-
-  bool get isAbstract => throw new UnimplementedError();
-
-  bool isSubclassOf(ClassMirror other) {
-    superclass.isSubclassOf(other) || mixin.isSubclassOf(other);
-  }
-
-  bool isSubtypeOf(TypeMirror other) => throw new UnimplementedError();
-
-  bool isAssignableTo(TypeMirror other) => throw new UnimplementedError();
-}
-
-abstract class JsObjectMirror implements ObjectMirror {
-}
-
-class JsInstanceMirror extends JsObjectMirror implements InstanceMirror {
-  final reflectee;
-
-  JsInstanceMirror(this.reflectee);
-
-  bool get hasReflectee => true;
-
-  ClassMirror get type {
-    // The spec guarantees that `null` is the singleton instance of the `Null`
-    // class.
-    if (reflectee == null) return reflectClass(Null);
-    return reflectType(getRuntimeType(reflectee));
-  }
-
-  InstanceMirror invoke(Symbol memberName,
-                        List positionalArguments,
-                        [Map<Symbol,dynamic> namedArguments]) {
-    if (namedArguments == null) namedArguments = const {};
-    // We can safely pass positionalArguments to _invoke as it will wrap it in
-    // a JSArray if needed.
-    return _invoke(memberName, JSInvocationMirror.METHOD,
-                   positionalArguments, namedArguments);
-  }
-
-  InstanceMirror _invokeMethodWithNamedArguments(
-      String reflectiveName,
-      List positionalArguments, Map<Symbol,dynamic> namedArguments) {
-    assert(namedArguments.isNotEmpty);
-    var interceptor = getInterceptor(reflectee);
-
-    var jsFunction = JS('', '#[#]', interceptor, reflectiveName);
-    if (jsFunction == null) {
-      // TODO(ahe): Invoke noSuchMethod.
-      throw new UnimplementedNoSuchMethodError(
-          'Invoking noSuchMethod with named arguments not implemented');
-    }
-    ReflectionInfo info = new ReflectionInfo(jsFunction);
-    if (jsFunction == null) {
-      // TODO(ahe): Invoke noSuchMethod.
-      throw new UnimplementedNoSuchMethodError(
-          'Invoking noSuchMethod with named arguments not implemented');
-    }
-
-    positionalArguments = new List.from(positionalArguments);
-    // Check the number of positional arguments is valid.
-    if (info.requiredParameterCount != positionalArguments.length) {
-      // TODO(ahe): Invoke noSuchMethod.
-      throw new UnimplementedNoSuchMethodError(
-          'Invoking noSuchMethod with named arguments not implemented');
-    }
-    var defaultArguments = new Map();
-    for (int i = 0; i < info.optionalParameterCount; i++) {
-      var parameterName = info.parameterName(i + info.requiredParameterCount);
-      var defaultValue =
-          getMetadata(info.defaultValue(i + info.requiredParameterCount));
-      defaultArguments[parameterName] = defaultValue;
-    }
-    namedArguments.forEach((Symbol symbol, value) {
-      String parameter = n(symbol);
-      if (defaultArguments.containsKey(parameter)) {
-        defaultArguments[parameter] = value;
-      } else {
-        // Extraneous named argument.
-        // TODO(ahe): Invoke noSuchMethod.
-        throw new UnimplementedNoSuchMethodError(
-            'Invoking noSuchMethod with named arguments not implemented');
-      }
-    });
-    positionalArguments.addAll(defaultArguments.values);
-    // TODO(ahe): Handle intercepted methods.
-    return reflect(
-        JS('', '#.apply(#, #)', jsFunction, reflectee, positionalArguments));
-  }
-
-  /// Grabs hold of the class-specific invocation cache for the reflectee.
-  /// All reflectees with the same class share the same cache. The cache
-  /// maps reflective names to cached invocation objects with enough decoded
-  /// reflective information to know how to to invoke a specific member.
-  get _classInvocationCache {
-    String cacheName = Primitives.mirrorInvokeCacheName;
-    var cacheHolder = (reflectee == null) ? getInterceptor(null) : reflectee;
-    var cache = JS('', r'#.constructor[#]', cacheHolder, cacheName);
-    if (cache == null) {
-      cache = JsCache.allocate();
-      JS('void', r'#.constructor[#] = #', cacheHolder, cacheName, cache);
-    }
-    return cache;
-  }
-
-  String _computeReflectiveName(Symbol symbolName, int type,
-                                List positionalArguments,
-                                Map<Symbol, dynamic> namedArguments) {
-    String name = n(symbolName);
-    switch (type) {
-      case JSInvocationMirror.GETTER: return name;
-      case JSInvocationMirror.SETTER: return '$name=';
-      case JSInvocationMirror.METHOD:
-        if (namedArguments.isNotEmpty) return '$name*';
-        int nbArgs = positionalArguments.length as int;
-        return "$name:$nbArgs:0";
-    }
-    throw new RuntimeError("Could not compute reflective name for $name");
-  }
-
-  /**
-   * Returns a `CachedInvocation` or `CachedNoSuchMethodInvocation` for the
-   * given member.
-   *
-   * Caches the result.
-   */
-  _getCachedInvocation(Symbol name, int type, String reflectiveName,
-      List positionalArguments, Map<Symbol,dynamic> namedArguments) {
-
-    var cache = _classInvocationCache;
-    var cacheEntry = JsCache.fetch(cache, reflectiveName);
-    var result;
-    if (cacheEntry == null) {
-      disableTreeShaking();
-      String mangledName = reflectiveNames[reflectiveName];
-      List<String> argumentNames = const [];
-
-      // TODO(ahe): We don't need to create an invocation mirror here. The
-      // logic from JSInvocationMirror.getCachedInvocation could easily be
-      // inlined here.
-      Invocation invocation = createUnmangledInvocationMirror(
-          name, mangledName, type, positionalArguments, argumentNames);
-
-      cacheEntry =
-          JSInvocationMirror.getCachedInvocation(invocation, reflectee);
-      JsCache.update(cache, reflectiveName, cacheEntry);
-    }
-    return cacheEntry;
-  }
-
-  bool _isReflectable(CachedInvocation cachedInvocation) {
-    // TODO(floitsch): tear-off closure does not guarantee that the
-    // function is reflectable.
-    var method = cachedInvocation.jsFunction;
-    return hasReflectableProperty(method) || reflectee is TearOffClosure;
-  }
-
-  /// Invoke the member specified through name and type on the reflectee.
-  /// As a side-effect, this populates the class-specific invocation cache
-  /// for the reflectee.
-  InstanceMirror _invoke(Symbol name,
-                         int type,
-                         List positionalArguments,
-                         Map<Symbol,dynamic> namedArguments) {
-    String reflectiveName =
-        _computeReflectiveName(name, type, positionalArguments, namedArguments);
-
-    if (namedArguments.isNotEmpty) {
-      // TODO(floitsch): first, make sure it's not a getter.
-      return _invokeMethodWithNamedArguments(
-          reflectiveName, positionalArguments, namedArguments);
-    }
-    var cacheEntry = _getCachedInvocation(
-        name, type, reflectiveName, positionalArguments, namedArguments);
-
-    if (cacheEntry.isNoSuchMethod || !_isReflectable(cacheEntry)) {
-      // Could be that we want to invoke a getter, or get a method.
-      if (type == JSInvocationMirror.METHOD && _instanceFieldExists(name)) {
-        return getField(name).invoke(
-            #call, positionalArguments, namedArguments);
-      }
-
-      if (type == JSInvocationMirror.SETTER) {
-        // For setters we report the setter name "field=".
-        name = s("${n(name)}=");
-      }
-
-      if (!cacheEntry.isNoSuchMethod) {
-        // Not reflectable.
-        throwInvalidReflectionError(reflectiveName);
-      }
-
-      String mangledName = reflectiveNames[reflectiveName];
-      // TODO(ahe): Get the argument names.
-      List<String> argumentNames = [];
-      Invocation invocation = createUnmangledInvocationMirror(
-          name, mangledName, type, positionalArguments, argumentNames);
-      return reflect(cacheEntry.invokeOn(reflectee, invocation));
-    } else {
-      return reflect(cacheEntry.invokeOn(reflectee, positionalArguments));
-    }
-  }
-
-  InstanceMirror setField(Symbol fieldName, Object arg) {
-    _invoke(fieldName, JSInvocationMirror.SETTER, [arg], const {});
-    return reflect(arg);
-  }
-
-  // JS helpers for getField optimizations.
-  static bool isUndefined(x)
-      => JS('bool', 'typeof # == "undefined"', x);
-  static bool isMissingCache(x)
-      => JS('bool', 'typeof # == "number"', x);
-  static bool isMissingProbe(Symbol symbol)
-      => JS('bool', 'typeof #.\$p == "undefined"', symbol);
-  static bool isEvalAllowed()
-      => JS('bool', 'typeof dart_precompiled != "function"');
-
-
-  /// The getter cache is lazily allocated after a couple
-  /// of invocations of [InstanceMirror.getField]. The delay is
-  /// used to avoid too aggressive caching and dynamic function
-  /// generation for rarely used mirrors. The cache is specific to
-  /// this [InstanceMirror] and maps reflective names to functions
-  /// that will invoke the corresponding getter on the reflectee.
-  /// The reflectee is passed to the function as the first argument
-  /// to avoid the overhead of fetching it from this mirror repeatedly.
-  /// The cache is lazily initialized to a JS object so we can
-  /// benefit from "map transitions" in the underlying JavaScript
-  /// engine to speed up cache probing.
-  var _getterCache = 4;
-
-  bool _instanceFieldExists(Symbol name) {
-    int getterType = JSInvocationMirror.GETTER;
-    String getterName =
-        _computeReflectiveName(name, getterType, const [], const {});
-    var getterCacheEntry = _getCachedInvocation(
-        name, getterType, getterName, const [], const {});
-    return !getterCacheEntry.isNoSuchMethod && !getterCacheEntry.isGetterStub;
-  }
-
-  InstanceMirror getField(Symbol fieldName) {
-    FASTPATH: {
-      var cache = _getterCache;
-      if (isMissingCache(cache) || isMissingProbe(fieldName)) break FASTPATH;
-      // If the [fieldName] has an associated probe function, we can use
-      // it to read from the getter cache specific to this [InstanceMirror].
-      var getter = JS('', '#.\$p(#)', fieldName, cache);
-      if (isUndefined(getter)) break FASTPATH;
-      // Call the getter passing the reflectee as the first argument.
-      var value = JS('', '#(#)', getter, reflectee);
-      // The getter has an associate cache of the last [InstanceMirror]
-      // returned to avoid repeated invocations of [reflect]. To validate
-      // the cache, we check that the value returned by the getter is the
-      // same value as last time.
-      if (JS('bool', '# === #.v', value, getter)) {
-        return JS('InstanceMirror', '#.m', getter);
-      } else {
-        var result = reflect(value);
-        JS('void', '#.v = #', getter, value);
-        JS('void', '#.m = #', getter, result);
-        return result;
-      }
-    }
-    return _getFieldSlow(fieldName);
-  }
-
-  InstanceMirror _getFieldSlow(Symbol fieldName) {
-    // First do the slow-case getter invocation. As a side-effect of this,
-    // the invocation cache is filled in so we can query it afterwards.
-    var result =
-        _invoke(fieldName, JSInvocationMirror.GETTER, const [], const {});
-    String name = n(fieldName);
-    var cacheEntry = JsCache.fetch(_classInvocationCache, name);
-    if (cacheEntry.isNoSuchMethod) {
-      return result;
-    }
-
-    // Make sure we have a getter cache in this [InstanceMirror].
-    var cache = _getterCache;
-    if (isMissingCache(cache)) {
-      if ((_getterCache = --cache) != 0) return result;
-      cache = _getterCache = JS('=Object', 'Object.create(null)');
-    }
-
-    // Make sure that symbol [fieldName] has a cache probing function ($p).
-    bool useEval = isEvalAllowed();
-    if (isMissingProbe(fieldName)) {
-      var probe = _newProbeFn(name, useEval);
-      JS('void', '#.\$p = #', fieldName, probe);
-    }
-
-    // Create a new getter function and install it in the cache.
-    var mangledName = cacheEntry.mangledName;
-    var getter = (cacheEntry.isIntercepted)
-        ? _newInterceptedGetterFn(mangledName, useEval)
-        : _newGetterFn(mangledName, useEval);
-    JS('void', '#[#] = #', cache, name, getter);
-
-    // Initialize the last value (v) and last mirror (m) on the
-    // newly generated getter to be a sentinel value that is hard
-    // to get hold of through user code.
-    JS('void', '#.v = #.m = #', getter, getter, cache);
-
-    // Return the result of the slow-path getter invocation.
-    return result;
-  }
-
-  _newProbeFn(String id, bool useEval) {
-    if (useEval) {
-      // We give the probe function a name to make it appear nicely in
-      // profiles and when debugging. The name also makes the source code
-      // for the function more "unique" so the underlying JavaScript
-      // engine is less likely to re-use an existing piece of generated
-      // code as the result of calling eval. In return, this leads to
-      // less polymorphic access in the probe function.
-      var body = "(function probe\$$id(c){return c.$id})";
-      return JS('', '(function(b){return eval(b)})(#)', body);
-    } else {
-      return JS('', '(function(n){return(function(c){return c[n]})})(#)', id);
-    }
-  }
-
-  _newGetterFn(String name, bool useEval) {
-    if (!useEval) return _newGetterNoEvalFn(name);
-    // We give the getter function a name that associates it with the
-    // class of the reflectee. This makes it easier to spot in profiles
-    // and when debugging, but it also means that the underlying JavaScript
-    // engine will only share the generated code for accessors on the
-    // same class (through caching of eval'ed code). This makes the
-    // generated call to the getter - e.g. o.get$foo() - much more likely
-    // to be monomorphic and inlineable.
-    String className = JS('String', '#.constructor.name', reflectee);
-    var body = "(function $className\$$name(o){return o.$name()})";
-    return JS('', '(function(b){return eval(b)})(#)', body);
-  }
-
-  _newGetterNoEvalFn(n) => JS('',
-      '(function(n){return(function(o){return o[n]()})})(#)', n);
-
-  _newInterceptedGetterFn(String name, bool useEval) {
-    var object = reflectee;
-    // It is possible that the interceptor for a given object is the object
-    // itself, so it is important not to share the code that captures the
-    // interceptor between multiple different instances of [InstanceMirror].
-    var interceptor = getInterceptor(object);
-    if (!useEval) return _newInterceptGetterNoEvalFn(name, interceptor);
-    String className = JS('String', '#.constructor.name', interceptor);
-    String functionName = '$className\$$name';
-    var body =
-        '(function(i) {'
-        '  function $functionName(o){return i.$name(o)}'
-        '  return $functionName;'
-        '})';
-    return JS('', '(function(b){return eval(b)})(#)(#)', body, interceptor);
-  }
-
-  _newInterceptGetterNoEvalFn(n, i) => JS('',
-      '(function(n,i){return(function(o){return i[n](o)})})(#,#)', n, i);
-
-  delegate(Invocation invocation) {
-    return JSInvocationMirror.invokeFromMirror(invocation, reflectee);
-  }
-
-  operator ==(other) {
-    return other is JsInstanceMirror &&
-           identical(reflectee, other.reflectee);
-  }
-
-  int get hashCode {
-    // Avoid hash collisions with the reflectee. This constant is in Smi range
-    // and happens to be the inner padding from RFC 2104.
-    return identityHashCode(reflectee) ^ 0x36363636;
-  }
-
-  String toString() => 'InstanceMirror on ${Error.safeToString(reflectee)}';
-
-  // TODO(ahe): Remove this method from the API.
-  MirrorSystem get mirrors => currentJsMirrorSystem;
-}
-
-/**
- * ClassMirror for generic classes where the type parameters are bound.
- *
- * [typeArguments] will return a list of the type arguments, in constrast
- * to JsCLassMirror that returns an empty list since it represents original
- * declarations and classes that are not generic.
- */
-class JsTypeBoundClassMirror extends JsDeclarationMirror
-    implements ClassMirror {
-  final JsClassMirror _class;
-
-  /**
-   * When instantiated this field will hold a string representing the list of
-   * type arguments for the class, i.e. what is inside the outermost angle
-   * brackets. Then, when get typeArguments is called the first time, the string
-   * is parsed into the actual list of TypeMirrors, and stored in
-   * [_cachedTypeArguments]. Due to type substitution of, for instance,
-   * superclasses the mangled name of the class and hence this string is needed
-   * after [_cachedTypeArguments] has been computed.
-   *
-   * If an integer is encountered as a type argument, it represents the type
-   * variable at the corresponding entry in [emitter.globalMetadata].
-   */
-  String _typeArguments;
-
-  UnmodifiableListView<TypeMirror> _cachedTypeArguments;
-  UnmodifiableMapView<Symbol, DeclarationMirror> _cachedDeclarations;
-  UnmodifiableMapView<Symbol, DeclarationMirror> _cachedMembers;
-  UnmodifiableMapView<Symbol, MethodMirror> _cachedConstructors;
-  Map<Symbol, VariableMirror> _cachedVariables;
-  Map<Symbol, MethodMirror> _cachedGetters;
-  Map<Symbol, MethodMirror> _cachedSetters;
-  Map<Symbol, MethodMirror> _cachedMethodsMap;
-  List<JsMethodMirror> _cachedMethods;
-  ClassMirror _superclass;
-  List<ClassMirror> _cachedSuperinterfaces;
-  Map<Symbol, MethodMirror> _cachedInstanceMembers;
-  Map<Symbol, MethodMirror> _cachedStaticMembers;
-
-  JsTypeBoundClassMirror(JsClassMirror originalDeclaration, this._typeArguments)
-      : _class = originalDeclaration,
-        super(originalDeclaration.simpleName);
-
-  String get _prettyName => 'ClassMirror';
-
-  String toString() {
-    String result = '$_prettyName on ${n(simpleName)}';
-    if (typeArguments != null) {
-      result = "$result<${typeArguments.join(', ')}>";
-    }
-    return result;
-  }
-
-  String get _mangledName {
-    for (TypeMirror typeArgument in typeArguments) {
-      if (typeArgument != JsMirrorSystem._dynamicType) {
-        return '${_class._mangledName}<$_typeArguments>';
-      }
-    }
-    // When all type arguments are dynamic, the canonical representation is to
-    // drop them.
-    return _class._mangledName;
-  }
-
-  List<TypeVariableMirror> get typeVariables => _class.typeVariables;
-
-  List<TypeMirror> get typeArguments {
-    if (_cachedTypeArguments != null) return _cachedTypeArguments;
-    List result = new List();
-
-    addTypeArgument(String typeArgument) {
-      int parsedIndex = int.parse(typeArgument, onError: (_) => -1);
-      if (parsedIndex == -1) {
-        result.add(reflectClassByMangledName(typeArgument.trim()));
-      } else {
-        TypeVariable typeVariable = getMetadata(parsedIndex);
-        TypeMirror owner = reflectClass(typeVariable.owner);
-        TypeVariableMirror typeMirror =
-            new JsTypeVariableMirror(typeVariable, owner, parsedIndex);
-        result.add(typeMirror);
-      }
-    }
-
-    if (_typeArguments.indexOf('<') == -1) {
-      _typeArguments.split(',').forEach((t) => addTypeArgument(t));
-    } else {
-      int level = 0;
-      String currentTypeArgument = '';
-
-      for (int i = 0; i < _typeArguments.length; i++) {
-        var character = _typeArguments[i];
-        if (character == ' ') {
-          continue;
-        } else if (character == '<') {
-          currentTypeArgument += character;
-          level++;
-        } else if (character == '>') {
-          currentTypeArgument += character;
-          level--;
-        } else if (character == ',') {
-          if (level > 0) {
-            currentTypeArgument += character;
-          } else {
-            addTypeArgument(currentTypeArgument);
-            currentTypeArgument = '';
-          }
-        } else {
-          currentTypeArgument += character;
-        }
-      }
-      addTypeArgument(currentTypeArgument);
-    }
-    return _cachedTypeArguments = new UnmodifiableListView(result);
-  }
-
-  List<JsMethodMirror> get _methods {
-    if (_cachedMethods != null) return _cachedMethods;
-    return _cachedMethods =_class._getMethodsWithOwner(this);
-  }
-
-  Map<Symbol, MethodMirror> get __methods {
-    if (_cachedMethodsMap != null) return _cachedMethodsMap;
-    return _cachedMethodsMap = new UnmodifiableMapView<Symbol, MethodMirror>(
-        filterMethods(_methods));
-  }
-
-  Map<Symbol, MethodMirror> get __constructors {
-    if (_cachedConstructors != null) return _cachedConstructors;
-    return _cachedConstructors =
-        new UnmodifiableMapView<Symbol, MethodMirror>(
-            filterConstructors(_methods));
-  }
-
-  Map<Symbol, MethodMirror> get __getters {
-    if (_cachedGetters != null) return _cachedGetters;
-    return _cachedGetters = new UnmodifiableMapView<Symbol, MethodMirror>(
-        filterGetters(_methods, __variables));
-  }
-
-  Map<Symbol, MethodMirror> get __setters {
-    if (_cachedSetters != null) return _cachedSetters;
-    return _cachedSetters = new UnmodifiableMapView<Symbol, MethodMirror>(
-        filterSetters(_methods, __variables));
-  }
-
-  Map<Symbol, VariableMirror> get __variables {
-    if (_cachedVariables != null) return _cachedVariables;
-    var result = new Map();
-    for (JsVariableMirror mirror in  _class._getFieldsWithOwner(this)) {
-      result[mirror.simpleName] = mirror;
-    }
-    return _cachedVariables =
-        new UnmodifiableMapView<Symbol, VariableMirror>(result);
-  }
-
-  Map<Symbol, DeclarationMirror> get __members {
-    if (_cachedMembers != null) return _cachedMembers;
-    return _cachedMembers = new UnmodifiableMapView<Symbol, DeclarationMirror>(
-        filterMembers(_methods, __variables));
-  }
-
-  Map<Symbol, DeclarationMirror> get declarations {
-    if (_cachedDeclarations != null) return _cachedDeclarations;
-    Map<Symbol, DeclarationMirror> result =
-        new Map<Symbol, DeclarationMirror>();
-    result.addAll(__members);
-    result.addAll(__constructors);
-    typeVariables.forEach((tv) => result[tv.simpleName] = tv);
-    return _cachedDeclarations =
-        new UnmodifiableMapView<Symbol, DeclarationMirror>(result);
-  }
-
-  Map<Symbol, MethodMirror> get staticMembers {
-    if (_cachedStaticMembers == null) {
-      var result = new Map<Symbol, MethodMirror>();
-      declarations.values.forEach((decl) {
-        if (decl is MethodMirror && decl.isStatic && !decl.isConstructor) {
-          result[decl.simpleName] = decl;
-        }
-        if (decl is VariableMirror && decl.isStatic) {
-          var getterName = decl.simpleName;
-          result[getterName] = new JsSyntheticAccessor(
-              this, getterName, true, true, false, decl);
-          if (!decl.isFinal) {
-            var setterName = setterSymbol(decl.simpleName);
-            result[setterName] = new JsSyntheticAccessor(
-                this, setterName, false, true, false, decl);
-          }
-        }
-      });
-      _cachedStaticMembers = result;
-    }
-    return _cachedStaticMembers;
-  }
-
-  Map<Symbol, MethodMirror> get instanceMembers {
-    if (_cachedInstanceMembers == null) {
-      var result = new Map<Symbol, MethodMirror>();
-      if (superclass != null) {
-        result.addAll(superclass.instanceMembers);
-      }
-      declarations.values.forEach((decl) {
-        if (decl is MethodMirror && !decl.isStatic &&
-            !decl.isConstructor && !decl.isAbstract) {
-          result[decl.simpleName] = decl;
-        }
-        if (decl is VariableMirror && !decl.isStatic) {
-          var getterName = decl.simpleName;
-          result[getterName] = new JsSyntheticAccessor(
-              this, getterName, true, false, false, decl);
-          if (!decl.isFinal) {
-            var setterName = setterSymbol(decl.simpleName);
-            result[setterName] = new JsSyntheticAccessor(
-                this, setterName, false, false, false, decl);
-          }
-        }
-      });
-      _cachedInstanceMembers = result;
-    }
-    return _cachedInstanceMembers;
-  }
-
-  InstanceMirror setField(Symbol fieldName, Object arg) {
-    return _class.setField(fieldName, arg);
-  }
-
-  InstanceMirror getField(Symbol fieldName) => _class.getField(fieldName);
-
-  InstanceMirror newInstance(Symbol constructorName,
-                             List positionalArguments,
-                             [Map<Symbol, dynamic> namedArguments]) {
-    var instance = _class._getInvokedInstance(constructorName,
-                                              positionalArguments,
-                                              namedArguments);
-    return reflect(setRuntimeTypeInfo(
-        instance, typeArguments.map((t) => t._asRuntimeType()).toList()));
-  }
-
-  _asRuntimeType() {
-    return [_class._jsConstructor].addAll(
-        typeArguments.map((t) => t._asRuntimeType()));
-  }
-
-  JsLibraryMirror get owner => _class.owner;
-
-  List<InstanceMirror> get metadata => _class.metadata;
-
-  ClassMirror get superclass {
-    if (_superclass != null) return _superclass;
-
-    List<int> typeInformation =
-        JS('List|Null', 'init.typeInformation[#]', _class._mangledName);
-    assert(typeInformation != null);
-    var type = getMetadata(typeInformation[0]);
-    return _superclass = typeMirrorFromRuntimeTypeRepresentation(this, type);
-  }
-
-  InstanceMirror invoke(Symbol memberName,
-                        List positionalArguments,
-                        [Map<Symbol,dynamic> namedArguments]) {
-    return _class.invoke(memberName, positionalArguments, namedArguments);
-  }
-
-  bool get isOriginalDeclaration => false;
-
-  ClassMirror get originalDeclaration => _class;
-
-  List<ClassMirror> get superinterfaces {
-    if (_cachedSuperinterfaces != null) return _cachedSuperinterfaces;
-    return _cachedSuperinterfaces = _class._getSuperinterfacesWithOwner(this);
-  }
-
-  bool get isPrivate => _class.isPrivate;
-
-  bool get isTopLevel => _class.isTopLevel;
-
-  bool get isAbstract => _class.isAbstract;
-
-  bool isSubclassOf(ClassMirror other) => _class.isSubclassOf(other);
-
-  SourceLocation get location => _class.location;
-
-  MirrorSystem get mirrors => _class.mirrors;
-
-  Symbol get qualifiedName => _class.qualifiedName;
-
-  bool get hasReflectedType => true;
-
-  Type get reflectedType => createRuntimeType(_mangledName);
-
-  Symbol get simpleName => _class.simpleName;
-
-  // TODO(ahe): Implement this.
-  ClassMirror get mixin => throw new UnimplementedError();
-
-  bool isSubtypeOf(TypeMirror other) => throw new UnimplementedError();
-
-  bool isAssignableTo(TypeMirror other) => throw new UnimplementedError();
-}
-
-class JsSyntheticAccessor implements MethodMirror {
-  final DeclarationMirror owner;
-  final Symbol simpleName;
-  final bool isGetter;
-  final bool isStatic;
-  final bool isTopLevel;
-  final _target;  /// The field or type that introduces the synthetic accessor.
-
-  JsSyntheticAccessor(this.owner,
-                      this.simpleName,
-                      this.isGetter,
-                      this.isStatic,
-                      this.isTopLevel,
-                      this._target);
-
-  bool get isSynthetic => true;
-  bool get isRegularMethod => false;
-  bool get isOperator => false;
-  bool get isConstructor => false;
-  bool get isConstConstructor => false;
-  bool get isGenerativeConstructor => false;
-  bool get isFactoryConstructor => false;
-  bool get isRedirectingConstructor => false;
-  bool get isAbstract => false;
-
-  bool get isSetter => !isGetter;
-  bool get isPrivate => n(simpleName).startsWith('_');
-
-  Symbol get qualifiedName => computeQualifiedName(owner, simpleName);
-  Symbol get constructorName => const Symbol('');
-
-  TypeMirror get returnType => _target.type;
-  List<ParameterMirror> get parameters {
-    if (isGetter) return const [];
-    return new UnmodifiableListView(
-        [new JsSyntheticSetterParameter(this, this._target)]);
-  }
-
-  List<InstanceMirror> get metadata => const [];
-  String get source => null;
-  SourceLocation get location => throw new UnimplementedError();
-}
-
-class JsSyntheticSetterParameter implements ParameterMirror {
-  final DeclarationMirror owner;
-  final VariableMirror _target;
-
-  JsSyntheticSetterParameter(this.owner, this._target);
-
-  Symbol get simpleName => _target.simpleName;
-  Symbol get qualifiedName => computeQualifiedName(owner, simpleName);
-  TypeMirror get type => _target.type;
-
-  bool get isOptional => false;
-  bool get isNamed => false;
-  bool get isStatic => false;
-  bool get isTopLevel => false;
-  bool get isConst => false;
-  bool get isFinal => true;
-  bool get isPrivate => false;
-  bool get hasDefaultValue => false;
-  InstanceMirror get defaultValue => null;
-  List<InstanceMirror> get metadata => const [];
-  SourceLocation get location => throw new UnimplementedError();
-}
-
-class JsClassMirror extends JsTypeMirror with JsObjectMirror
-    implements ClassMirror {
-  final String _mangledName;
-  final _jsConstructor;
-  final String _fieldsDescriptor;
-  final List _fieldsMetadata;
-  final _jsConstructorCache = JsCache.allocate();
-  List _metadata;
-  ClassMirror _superclass;
-  List<JsMethodMirror> _cachedMethods;
-  List<VariableMirror> _cachedFields;
-  UnmodifiableMapView<Symbol, MethodMirror> _cachedConstructors;
-  UnmodifiableMapView<Symbol, MethodMirror> _cachedMethodsMap;
-  UnmodifiableMapView<Symbol, MethodMirror> _cachedGetters;
-  UnmodifiableMapView<Symbol, MethodMirror> _cachedSetters;
-  UnmodifiableMapView<Symbol, VariableMirror> _cachedVariables;
-  UnmodifiableMapView<Symbol, Mirror> _cachedMembers;
-  UnmodifiableMapView<Symbol, DeclarationMirror> _cachedDeclarations;
-  UnmodifiableListView<InstanceMirror> _cachedMetadata;
-  UnmodifiableListView<ClassMirror> _cachedSuperinterfaces;
-  UnmodifiableListView<TypeVariableMirror> _cachedTypeVariables;
-  Map<Symbol, MethodMirror> _cachedInstanceMembers;
-  Map<Symbol, MethodMirror> _cachedStaticMembers;
-
-  // Set as side-effect of accessing JsLibraryMirror.classes.
-  JsLibraryMirror _owner;
-
-  JsClassMirror(Symbol simpleName,
-                this._mangledName,
-                this._jsConstructor,
-                this._fieldsDescriptor,
-                this._fieldsMetadata)
-      : super(simpleName);
-
-  String get _prettyName => 'ClassMirror';
-
-  Map<Symbol, MethodMirror> get __constructors {
-    if (_cachedConstructors != null) return _cachedConstructors;
-    return _cachedConstructors =
-        new UnmodifiableMapView<Symbol, MethodMirror>(
-            filterConstructors(_methods));
-  }
-
-  _asRuntimeType() {
-    if (typeVariables.isEmpty)  return _jsConstructor;
-    var type = [_jsConstructor];
-    for (int i = 0; i < typeVariables.length; i ++) {
-      type.add(JsMirrorSystem._dynamicType._asRuntimeType);
-    }
-    return type;
-  }
-
-  List<JsMethodMirror> _getMethodsWithOwner(DeclarationMirror methodOwner) {
-    var prototype = JS('', '#.prototype', _jsConstructor);
-    List<String> keys = extractKeys(prototype);
-    var result = <JsMethodMirror>[];
-    for (String key in keys) {
-      if (isReflectiveDataInPrototype(key)) continue;
-      String simpleName = mangledNames[key];
-      // [simpleName] can be null if [key] represents an implementation
-      // detail, for example, a bailout method, or runtime type support.
-      // It might also be null if the user has limited what is reified for
-      // reflection with metadata.
-      if (simpleName == null) continue;
-      var function = JS('', '#[#]', prototype, key);
-      if (isNoSuchMethodStub(function)) continue;
-      var mirror =
-          new JsMethodMirror.fromUnmangledName(
-              simpleName, function, false, false);
-      result.add(mirror);
-      mirror._owner = methodOwner;
-    }
-
-    keys = extractKeys(JS('', 'init.statics[#]', _mangledName));
-    for (String mangledName in keys) {
-      if (isReflectiveDataInPrototype(mangledName)) continue;
-      String unmangledName = mangledName;
-      var jsFunction = JS('', '#[#]', owner._globalObject, mangledName);
-
-      bool isConstructor = false;
-      if (hasReflectableProperty(jsFunction)) {
-        String reflectionName =
-            JS('String|Null', r'#.$reflectionName', jsFunction);
-        if (reflectionName == null) continue;
-        isConstructor = reflectionName.startsWith('new ');
-        if (isConstructor) {
-          reflectionName = reflectionName.substring(4).replaceAll(r'$', '.');
-        }
-        unmangledName = reflectionName;
-      } else {
-        continue;
-      }
-      bool isStatic = !isConstructor; // Constructors are not static.
-      JsMethodMirror mirror =
-          new JsMethodMirror.fromUnmangledName(
-              unmangledName, jsFunction, isStatic, isConstructor);
-      result.add(mirror);
-      mirror._owner = methodOwner;
-    }
-
-    return result;
-  }
-
-  List<JsMethodMirror> get _methods {
-    if (_cachedMethods != null) return _cachedMethods;
-    return _cachedMethods = _getMethodsWithOwner(this);
-  }
-
-  List<VariableMirror> _getFieldsWithOwner(DeclarationMirror fieldOwner) {
-    var result = <VariableMirror>[];
-
-    var instanceFieldSpecfication = _fieldsDescriptor.split(';')[1];
-    if (_fieldsMetadata != null) {
-      instanceFieldSpecfication =
-          [instanceFieldSpecfication]..addAll(_fieldsMetadata);
-    }
-    parseCompactFieldSpecification(
-        fieldOwner, instanceFieldSpecfication, false, result);
-
-    var staticDescriptor = JS('', 'init.statics[#]', _mangledName);
-    if (staticDescriptor != null) {
-      parseCompactFieldSpecification(
-          fieldOwner,
-          JS('', '#[#]',
-              staticDescriptor, JS_GET_NAME('CLASS_DESCRIPTOR_PROPERTY')),
-          true, result);
-    }
-    return result;
-  }
-
-  List<VariableMirror> get _fields {
-    if (_cachedFields != null) return _cachedFields;
-    return _cachedFields = _getFieldsWithOwner(this);
-  }
-
-  Map<Symbol, MethodMirror> get __methods {
-    if (_cachedMethodsMap != null) return _cachedMethodsMap;
-    return _cachedMethodsMap =
-        new UnmodifiableMapView<Symbol, MethodMirror>(filterMethods(_methods));
-  }
-
-  Map<Symbol, MethodMirror> get __getters {
-    if (_cachedGetters != null) return _cachedGetters;
-    return _cachedGetters = new UnmodifiableMapView<Symbol, MethodMirror>(
-        filterGetters(_methods, __variables));
-  }
-
-  Map<Symbol, MethodMirror> get __setters {
-    if (_cachedSetters != null) return _cachedSetters;
-    return _cachedSetters = new UnmodifiableMapView<Symbol, MethodMirror>(
-        filterSetters(_methods, __variables));
-  }
-
-  Map<Symbol, VariableMirror> get __variables {
-    if (_cachedVariables != null) return _cachedVariables;
-    var result = new Map();
-    for (JsVariableMirror mirror in _fields) {
-      result[mirror.simpleName] = mirror;
-    }
-    return _cachedVariables =
-        new UnmodifiableMapView<Symbol, VariableMirror>(result);
-  }
-
-  Map<Symbol, Mirror> get __members {
-    if (_cachedMembers != null) return _cachedMembers;
-    return _cachedMembers = new UnmodifiableMapView<Symbol, Mirror>(
-        filterMembers(_methods, __variables));
-  }
-
-  Map<Symbol, DeclarationMirror> get declarations {
-    if (_cachedDeclarations != null) return _cachedDeclarations;
-    var result = new Map<Symbol, DeclarationMirror>();
-    addToResult(Symbol key, Mirror value) {
-      result[key] = value;
-    }
-    __members.forEach(addToResult);
-    __constructors.forEach(addToResult);
-    typeVariables.forEach((tv) => result[tv.simpleName] = tv);
-    return _cachedDeclarations =
-        new UnmodifiableMapView<Symbol, DeclarationMirror>(result);
-  }
-
-  Map<Symbol, MethodMirror> get staticMembers {
-    if (_cachedStaticMembers == null) {
-      var result = new Map<Symbol, MethodMirror>();
-      declarations.values.forEach((decl) {
-        if (decl is MethodMirror && decl.isStatic && !decl.isConstructor) {
-          result[decl.simpleName] = decl;
-        }
-        if (decl is VariableMirror && decl.isStatic) {
-          var getterName = decl.simpleName;
-          result[getterName] = new JsSyntheticAccessor(
-              this, getterName, true, true, false, decl);
-          if (!decl.isFinal) {
-            var setterName = setterSymbol(decl.simpleName);
-            result[setterName] = new JsSyntheticAccessor(
-                this, setterName, false, true, false, decl);
-          }
-        }
-      });
-      _cachedStaticMembers = result;
-    }
-    return _cachedStaticMembers;
-  }
-
-  Map<Symbol, MethodMirror> get instanceMembers {
-    if (_cachedInstanceMembers == null) {
-      var result = new Map<Symbol, MethodMirror>();
-      if (superclass != null) {
-        result.addAll(superclass.instanceMembers);
-      }
-      declarations.values.forEach((decl) {
-        if (decl is MethodMirror && !decl.isStatic &&
-            !decl.isConstructor && !decl.isAbstract) {
-          result[decl.simpleName] = decl;
-        }
-        if (decl is VariableMirror && !decl.isStatic) {
-          var getterName = decl.simpleName;
-          result[getterName] = new JsSyntheticAccessor(
-              this, getterName, true, false, false, decl);
-          if (!decl.isFinal) {
-            var setterName = setterSymbol(decl.simpleName);
-            result[setterName] = new JsSyntheticAccessor(
-                this, setterName, false, false, false, decl);
-          }
-        }
-      });
-      _cachedInstanceMembers = result;
-    }
-    return _cachedInstanceMembers;
-  }
-
-  InstanceMirror setField(Symbol fieldName, Object arg) {
-    JsVariableMirror mirror = __variables[fieldName];
-    if (mirror != null && mirror.isStatic && !mirror.isFinal) {
-      // '$' (JS_CURRENT_ISOLATE()) stores state which is stored directly, so
-      // we shouldn't use [JsLibraryMirror._globalObject] here.
-      String jsName = mirror._jsName;
-      if (!JS('bool', '# in #', jsName, JS_CURRENT_ISOLATE())) {
-        throw new RuntimeError('Cannot find "$jsName" in current isolate.');
-      }
-      JS('void', '#[#] = #', JS_CURRENT_ISOLATE(), jsName, arg);
-      return reflect(arg);
-    }
-    Symbol setterName = setterSymbol(fieldName);
-    if (mirror == null) {
-      JsMethodMirror setter = __setters[setterName];
-      if (setter != null) {
-        setter._invoke([arg], const {});
-        return reflect(arg);
-      }
-    }
-    throw new NoSuchStaticMethodError.method(null, setterName, [arg], null);
-  }
-
-  bool _staticFieldExists(Symbol fieldName) {
-    JsVariableMirror mirror = __variables[fieldName];
-    if (mirror != null) return mirror.isStatic;
-    JsMethodMirror getter = __getters[fieldName];
-    return getter != null && getter.isStatic;
-  }
-
-  InstanceMirror getField(Symbol fieldName) {
-    JsVariableMirror mirror = __variables[fieldName];
-    if (mirror != null && mirror.isStatic) {
-      String jsName = mirror._jsName;
-      // '$' (JS_CURRENT_ISOLATE()) stores state which is read directly, so
-      // we shouldn't use [JsLibraryMirror._globalObject] here.
-      if (!JS('bool', '# in #', jsName, JS_CURRENT_ISOLATE())) {
-        throw new RuntimeError('Cannot find "$jsName" in current isolate.');
-      }
-      if (JS('bool', '# in init.lazies', jsName)) {
-        String getterName = JS('String', 'init.lazies[#]', jsName);
-        return reflect(JS('', '#[#]()', JS_CURRENT_ISOLATE(), getterName));
-      } else {
-        return reflect(JS('', '#[#]', JS_CURRENT_ISOLATE(), jsName));
-      }
-    }
-    JsMethodMirror getter = __getters[fieldName];
-    if (getter != null && getter.isStatic) {
-      return reflect(getter._invoke(const [], const {}));
-    }
-    // If the fieldName designates a static function we have to return
-    // its closure.
-    JsMethodMirror method = __methods[fieldName];
-    if (method != null && method.isStatic) {
-      // We invoke the same getter that Dart code would execute. During
-      // initialization we have stored that getter on the function (so that
-      // we can find it more easily here).
-      var getter = JS("", "#['\$getter']", method._jsFunction);
-      if (getter == null) throw new UnimplementedError();
-      return reflect(JS("", "#()", getter));
-    }
-    throw new NoSuchStaticMethodError.method(null, fieldName, null, null);
-  }
-
-  _getInvokedInstance(Symbol constructorName,
-                      List positionalArguments,
-                      [Map<Symbol, dynamic> namedArguments]) {
-     if (namedArguments != null && !namedArguments.isEmpty) {
-       throw new UnsupportedError('Named arguments are not implemented.');
-     }
-     JsMethodMirror mirror =
-         JsCache.fetch(_jsConstructorCache, n(constructorName));
-     if (mirror == null) {
-       mirror = __constructors.values.firstWhere(
-           (m) => m.constructorName == constructorName,
-           orElse: () {
-             throw new NoSuchStaticMethodError.method(
-                 null, constructorName, positionalArguments, namedArguments);
-           });
-       JsCache.update(_jsConstructorCache, n(constructorName), mirror);
-     }
-     return mirror._invoke(positionalArguments, namedArguments);
-   }
-
-  InstanceMirror newInstance(Symbol constructorName,
-                             List positionalArguments,
-                             [Map<Symbol, dynamic> namedArguments]) {
-    return reflect(_getInvokedInstance(constructorName,
-                                       positionalArguments,
-                                       namedArguments));
-  }
-
-  JsLibraryMirror get owner {
-    if (_owner == null) {
-      for (var list in JsMirrorSystem.librariesByName.values) {
-        for (JsLibraryMirror library in list) {
-          // This will set _owner field on all classes as a side
-          // effect.  This gives us a fast path to reflect on a
-          // class without parsing reflection data.
-          library.__classes;
-        }
-      }
-      if (_owner == null) {
-        throw new StateError('Class "${n(simpleName)}" has no owner');
-      }
-    }
-    return _owner;
-  }
-
-  List<InstanceMirror> get metadata {
-    if (_cachedMetadata != null) return _cachedMetadata;
-    if (_metadata == null) {
-      _metadata = extractMetadata(JS('', '#.prototype', _jsConstructor));
-    }
-    return _cachedMetadata =
-        new UnmodifiableListView<InstanceMirror>(_metadata.map(reflect));
-  }
-
-  ClassMirror get superclass {
-    if (_superclass == null) {
-      List<int> typeInformation =
-          JS('List|Null', 'init.typeInformation[#]', _mangledName);
-      if (typeInformation != null) {
-        var type = getMetadata(typeInformation[0]);
-        _superclass = typeMirrorFromRuntimeTypeRepresentation(this, type);
-      } else {
-        var superclassName = _fieldsDescriptor.split(';')[0];
-        // TODO(zarah): Remove special handing of mixins.
-        var mixins = superclassName.split('+');
-        if (mixins.length > 1) {
-          if (mixins.length != 2) {
-            throw new RuntimeError('Strange mixin: $_fieldsDescriptor');
-          }
-          _superclass = reflectClassByMangledName(mixins[0]);
-        } else {
-          // Use _superclass == this to represent class with no superclass
-          // (Object).
-          _superclass = (superclassName == '')
-              ? this : reflectClassByMangledName(superclassName);
-          }
-        }
-      }
-    return _superclass == this ? null : _superclass;
-  }
-
-  InstanceMirror invoke(Symbol memberName,
-                        List positionalArguments,
-                        [Map<Symbol,dynamic> namedArguments]) {
-    // Mirror API gotcha: Calling [invoke] on a ClassMirror means invoke a
-    // static method.
-
-    if (namedArguments != null && !namedArguments.isEmpty) {
-      throw new UnsupportedError('Named arguments are not implemented.');
-    }
-    JsMethodMirror mirror = __methods[memberName];
-
-    if (mirror == null && _staticFieldExists(memberName)) {
-      return getField(memberName)
-          .invoke(#call, positionalArguments, namedArguments);
-    }
-    if (mirror == null || !mirror.isStatic) {
-      throw new NoSuchStaticMethodError.method(
-          null, memberName, positionalArguments, namedArguments);
-    }
-    if (!mirror.canInvokeReflectively()) {
-      throwInvalidReflectionError(n(memberName));
-    }
-    return reflect(mirror._invoke(positionalArguments, namedArguments));
-  }
-
-  bool get isOriginalDeclaration => true;
-
-  ClassMirror get originalDeclaration => this;
-
-  List<ClassMirror> _getSuperinterfacesWithOwner(DeclarationMirror owner) {
-    List<int> typeInformation =
-        JS('List|Null', 'init.typeInformation[#]', _mangledName);
-    List<ClassMirror> result = const <ClassMirror>[];
-    if (typeInformation != null) {
-      ClassMirror lookupType(int i) {
-        var type = getMetadata(i);
-        return typeMirrorFromRuntimeTypeRepresentation(owner, type);
-      }
-
-      //We skip the first since it is the supertype.
-      result = typeInformation.skip(1).map(lookupType).toList();
-    }
-
-    return new UnmodifiableListView<ClassMirror>(result);
-  }
-
-  List<ClassMirror> get superinterfaces {
-    if (_cachedSuperinterfaces != null) return _cachedSuperinterfaces;
-    return _cachedSuperinterfaces = _getSuperinterfacesWithOwner(this);
-  }
-
-  List<TypeVariableMirror> get typeVariables {
-   if (_cachedTypeVariables != null) return _cachedTypeVariables;
-   List result = new List();
-   List typeVariables =
-        JS('JSExtendableArray|Null', '#.prototype["<>"]', _jsConstructor);
-    if (typeVariables == null) return result;
-    for (int i = 0; i < typeVariables.length; i++) {
-      TypeVariable typeVariable = getMetadata(typeVariables[i]);
-      result.add(new JsTypeVariableMirror(typeVariable, this,
-                                          typeVariables[i]));
-    }
-    return _cachedTypeVariables = new UnmodifiableListView(result);
-  }
-
-  List<TypeMirror> get typeArguments => const <TypeMirror>[];
-
-  bool get hasReflectedType => typeVariables.length == 0;
-
-  Type get reflectedType {
-    if (!hasReflectedType) {
-      throw new UnsupportedError(
-          "Declarations of generics have no reflected type");
-    }
-    return createRuntimeType(_mangledName);
-  }
-
-  // TODO(ahe): Implement this.
-  ClassMirror get mixin => throw new UnimplementedError();
-
-  bool get isAbstract => throw new UnimplementedError();
-
-  bool isSubclassOf(ClassMirror other) {
-    if (other is! ClassMirror) {
-      throw new ArgumentError(other);
-    }
-    if (other is JsFunctionTypeMirror) {
-      return false;
-    } if (other is JsClassMirror &&
-          JS('bool', '# == #', other._jsConstructor, _jsConstructor)) {
-      return true;
-    } else if (superclass == null) {
-      return false;
-    } else {
-      return superclass.isSubclassOf(other);
-    }
-  }
-}
-
-class JsVariableMirror extends JsDeclarationMirror implements VariableMirror {
-
-  // TODO(ahe): The values in these fields are virtually untested.
-  final String _jsName;
-  final bool isFinal;
-  final bool isStatic;
-  final _metadataFunction;
-  final DeclarationMirror _owner;
-  final int _type;
-  List _metadata;
-
-  JsVariableMirror(Symbol simpleName,
-                   this._jsName,
-                   this._type,
-                   this.isFinal,
-                   this.isStatic,
-                   this._metadataFunction,
-                   this._owner)
-      : super(simpleName);
-
-  factory JsVariableMirror.from(String descriptor,
-                                metadataFunction,
-                                JsDeclarationMirror owner,
-                                bool isStatic) {
-    List<String> fieldInformation = descriptor.split('-');
-    if (fieldInformation.length == 1) {
-      // The field is not available for reflection.
-      // TODO(ahe): Should return an unreflectable field.
-      return null;
-    }
-
-    String field = fieldInformation[0];
-    int length = field.length;
-    var code = fieldCode(field.codeUnitAt(length - 1));
-    bool isFinal = false;
-    if (code == 0) return null; // Inherited field.
-    bool hasGetter = (code & 3) != 0;
-    bool hasSetter = (code >> 2) != 0;
-    isFinal = !hasSetter;
-    length--;
-    String jsName;
-    String accessorName = jsName = field.substring(0, length);
-    int divider = field.indexOf(':');
-    if (divider > 0) {
-      accessorName = accessorName.substring(0, divider);
-      jsName = field.substring(divider + 1);
-    }
-    var unmangledName;
-    if (isStatic) {
-      unmangledName = mangledGlobalNames[accessorName];
-    } else {
-      String getterPrefix = JS_GET_NAME('GETTER_PREFIX');
-      unmangledName = mangledNames['$getterPrefix$accessorName'];
-    }
-    if (unmangledName == null) unmangledName = accessorName;
-    if (!hasSetter) {
-      // TODO(ahe): This is a hack to handle checked setters in checked mode.
-      var setterName = s('$unmangledName=');
-      for (JsMethodMirror method in owner._methods) {
-        if (method.simpleName == setterName) {
-          isFinal = false;
-          break;
-        }
-      }
-    }
-    int type = int.parse(fieldInformation[1]);
-    return new JsVariableMirror(s(unmangledName),
-                                jsName,
-                                type,
-                                isFinal,
-                                isStatic,
-                                metadataFunction,
-                                owner);
-  }
-
-  String get _prettyName => 'VariableMirror';
-
-  TypeMirror get type {
-    return typeMirrorFromRuntimeTypeRepresentation(owner, getMetadata(_type));
-  }
-
-  DeclarationMirror get owner => _owner;
-
-  List<InstanceMirror> get metadata {
-    preserveMetadata();
-    if (_metadata == null) {
-      _metadata = (_metadataFunction == null)
-          ? const [] : JS('', '#()', _metadataFunction);
-    }
-    return _metadata.map(reflect).toList();
-  }
-
-  static int fieldCode(int code) {
-    if (code >= 60 && code <= 64) return code - 59;
-    if (code >= 123 && code <= 126) return code - 117;
-    if (code >= 37 && code <= 43) return code - 27;
-    return 0;
-  }
-
-  _getField(JsMirror receiver) => receiver._loadField(_jsName);
-
-  void _setField(JsMirror receiver, Object arg) {
-    if (isFinal) {
-      // TODO(floitsch): when the field is non-static we don't want to have
-      // a mirror as receiver.
-      if (isStatic) {
-        throw new NoSuchStaticMethodError.method(
-            null, setterSymbol(simpleName), [arg], null);
-      }
-      throw new NoSuchMethodError(this, setterSymbol(simpleName), [arg], null);
-    }
-    receiver._storeField(_jsName, arg);
-  }
-
-  // TODO(ahe): Implement this method.
-  bool get isConst => throw new UnimplementedError();
-}
-
-class JsClosureMirror extends JsInstanceMirror implements ClosureMirror {
-  JsClosureMirror(reflectee)
-      : super(reflectee);
-
-  MethodMirror get function {
-    String cacheName = Primitives.mirrorFunctionCacheName;
-    JsMethodMirror cachedFunction;
-    // TODO(ahe): Restore caching.
-    //= JS('JsMethodMirror|Null', r'#.constructor[#]', reflectee, cacheName);
-    if (cachedFunction != null) return cachedFunction;
-    disableTreeShaking();
-    // TODO(ahe): What about optional parameters (named or not).
-    String callPrefix = "${JS_GET_NAME("CALL_PREFIX")}\$";
-    var extractCallName = JS('', r'''
-function(reflectee) {
-  for (var property in reflectee) {
-    if (# == property.substring(0, #) &&
-        property[#] >= '0' &&
-        property[#] <= '9') return property;
-  }
-  return null;
-}
-''', callPrefix, callPrefix.length, callPrefix.length, callPrefix.length);
-    String callName = JS('String|Null', '#(#)', extractCallName, reflectee);
-    if (callName == null) {
-      throw new RuntimeError('Cannot find callName on "$reflectee"');
-    }
-    // TODO(floitsch): What about optional parameters?
-    int parameterCount = int.parse(callName.split(r'$')[1]);
-    if (reflectee is BoundClosure) {
-      var target = BoundClosure.targetOf(reflectee);
-      var self = BoundClosure.selfOf(reflectee);
-      var name = mangledNames[BoundClosure.nameOf(reflectee)];
-      if (name == null) {
-        throwInvalidReflectionError(name);
-      }
-      cachedFunction = new JsMethodMirror.fromUnmangledName(
-          name, target, false, false);
-    } else {
-      bool isStatic = true; // TODO(ahe): Compute isStatic correctly.
-      var jsFunction = JS('', '#[#]', reflectee, callName);
-      var dummyOptionalParameterCount = 0;
-      cachedFunction = new JsMethodMirror(
-          s(callName), jsFunction, parameterCount, dummyOptionalParameterCount,
-          false, false, isStatic, false, false);
-    }
-    JS('void', r'#.constructor[#] = #', reflectee, cacheName, cachedFunction);
-    return cachedFunction;
-  }
-
-  InstanceMirror apply(List positionalArguments,
-                       [Map<Symbol, dynamic> namedArguments]) {
-    return reflect(
-        Function.apply(reflectee, positionalArguments, namedArguments));
-  }
-
-  String toString() => "ClosureMirror on '${Error.safeToString(reflectee)}'";
-
-  // TODO(ahe): Implement this method.
-  String get source => throw new UnimplementedError();
-}
-
-class JsMethodMirror extends JsDeclarationMirror implements MethodMirror {
-  final _jsFunction;
-  final int _requiredParameterCount;
-  final int _optionalParameterCount;
-  final bool isGetter;
-  final bool isSetter;
-  final bool isStatic;
-  final bool isConstructor;
-  final bool isOperator;
-  DeclarationMirror _owner;
-  List _metadata;
-  TypeMirror _returnType;
-  UnmodifiableListView<ParameterMirror> _parameters;
-
-  JsMethodMirror(Symbol simpleName,
-                 this._jsFunction,
-                 this._requiredParameterCount,
-                 this._optionalParameterCount,
-                 this.isGetter,
-                 this.isSetter,
-                 this.isStatic,
-                 this.isConstructor,
-                 this.isOperator)
-      : super(simpleName);
-
-  factory JsMethodMirror.fromUnmangledName(String name,
-                                           jsFunction,
-                                           bool isStatic,
-                                           bool isConstructor) {
-    List<String> info = name.split(':');
-    name = info[0];
-    bool isOperator = isOperatorName(name);
-    bool isSetter = !isOperator && name.endsWith('=');
-    int requiredParameterCount = 0;
-    int optionalParameterCount = 0;
-    bool isGetter = false;
-    if (info.length == 1) {
-      if (isSetter) {
-        requiredParameterCount = 1;
-      } else {
-        isGetter = true;
-        requiredParameterCount = 0;
-      }
-    } else {
-      requiredParameterCount = int.parse(info[1]);
-      optionalParameterCount = int.parse(info[2]);
-    }
-    return new JsMethodMirror(
-        s(name), jsFunction, requiredParameterCount, optionalParameterCount,
-        isGetter, isSetter, isStatic, isConstructor, isOperator);
-  }
-
-  String get _prettyName => 'MethodMirror';
-
-  int get _parameterCount => _requiredParameterCount + _optionalParameterCount;
-
-  List<ParameterMirror> get parameters {
-    if (_parameters != null) return _parameters;
-    metadata; // Compute _parameters as a side-effect of extracting metadata.
-    return _parameters;
-  }
-
-  bool canInvokeReflectively() {
-    return hasReflectableProperty(_jsFunction);
-  }
-
-  DeclarationMirror get owner => _owner;
-
-  TypeMirror get returnType {
-    metadata; // Compute _returnType as a side-effect of extracting metadata.
-    return _returnType;
-  }
-
-  List<InstanceMirror> get metadata {
-    if (_metadata == null) {
-      var raw = extractMetadata(_jsFunction);
-      var formals = new List(_parameterCount);
-      ReflectionInfo info = new ReflectionInfo(_jsFunction);
-      if (info != null) {
-        assert(_parameterCount
-               == info.requiredParameterCount + info.optionalParameterCount);
-        var functionType = info.functionType;
-        var type;
-        if (functionType is int) {
-          type = new JsFunctionTypeMirror(info.computeFunctionRti(null), this);
-          assert(_parameterCount == type.parameters.length);
-        } else if (isTopLevel) {
-          type = new JsFunctionTypeMirror(info.computeFunctionRti(null), owner);
-        } else {
-          TypeMirror ownerType = owner;
-          JsClassMirror ownerClass = ownerType.originalDeclaration;
-          type = new JsFunctionTypeMirror(
-              info.computeFunctionRti(ownerClass._jsConstructor),
-              owner);
-        }
-        // Constructors aren't reified with their return type.
-        if (isConstructor) {
-          _returnType = owner;
-        } else {
-          _returnType = type.returnType;
-        }
-        int i = 0;
-        bool isNamed = info.areOptionalParametersNamed;
-        for (JsParameterMirror parameter in type.parameters) {
-          var name = info.parameterName(i);
-          List<int> annotations = info.parameterMetadataAnnotations(i);
-          var p;
-          if (i < info.requiredParameterCount) {
-            p = new JsParameterMirror(name, this, parameter._type,
-                metadataList: annotations);
-          } else {
-            var defaultValue = info.defaultValue(i);
-            p = new JsParameterMirror(
-                name, this, parameter._type, metadataList: annotations,
-                isOptional: true, isNamed: isNamed, defaultValue: defaultValue);
-          }
-          formals[i++] = p;
-        }
-      }
-      _parameters = new UnmodifiableListView<ParameterMirror>(formals);
-      _metadata = new UnmodifiableListView(raw.map(reflect));
-    }
-    return _metadata;
-  }
-
-  Symbol get constructorName {
-    // TODO(ahe): I believe it is more appropriate to throw an exception or
-    // return null.
-    if (!isConstructor) return const Symbol('');
-    String name = n(simpleName);
-    int index = name.indexOf('.');
-    if (index == -1) return const Symbol('');
-    return s(name.substring(index + 1));
-  }
-
-  _invoke(List positionalArguments, Map<Symbol, dynamic> namedArguments) {
-    if (namedArguments != null && !namedArguments.isEmpty) {
-      throw new UnsupportedError('Named arguments are not implemented.');
-    }
-    if (!isStatic && !isConstructor) {
-      throw new RuntimeError('Cannot invoke instance method without receiver.');
-    }
-    int positionalLength = positionalArguments.length;
-    if (positionalLength < _requiredParameterCount ||
-        positionalLength >  _parameterCount ||
-        _jsFunction == null) {
-      // TODO(ahe): What receiver to use?
-      throw new NoSuchMethodError(
-          owner, simpleName, positionalArguments, namedArguments);
-    }
-    if (positionalLength < _parameterCount) {
-      // Fill up with default values.
-      // Make a copy so we don't modify the input.
-      positionalArguments = positionalArguments.toList();
-      for (int i = positionalLength; i < parameters.length; i++) {
-        JsParameterMirror parameter = parameters[i];
-        positionalArguments.add(parameter.defaultValue.reflectee);
-      }
-    }
-    // Using JS_CURRENT_ISOLATE() ('$') here is actually correct, although
-    // _jsFunction may not be a property of '$', most static functions do not
-    // care who their receiver is. But to lazy getters, it is important that
-    // 'this' is '$'.
-    return JS('', r'#.apply(#, #)', _jsFunction, JS_CURRENT_ISOLATE(),
-              new List.from(positionalArguments));
-  }
-
-  _getField(JsMirror receiver) {
-    if (isGetter) {
-      return _invoke([], null);
-    } else {
-      // TODO(ahe): Closurize method.
-      throw new UnimplementedError('getField on $receiver');
-    }
-  }
-
-  _setField(JsMirror receiver, Object arg) {
-    if (isSetter) {
-      return _invoke([arg], null);
-    } else {
-      throw new NoSuchMethodError(this, setterSymbol(simpleName), [], null);
-    }
-  }
-
-  // Abstract methods are tree-shaken away.
-  bool get isAbstract => false;
-
-  // TODO(ahe, 14633): This might not be true for all cases.
-  bool get isSynthetic => false;
-
-  // TODO(ahe): Test this.
-  bool get isRegularMethod => !isGetter && !isSetter && !isConstructor;
-
-  // TODO(ahe): Implement this method.
-  bool get isConstConstructor => throw new UnimplementedError();
-
-  // TODO(ahe): Implement this method.
-  bool get isGenerativeConstructor => throw new UnimplementedError();
-
-  // TODO(ahe): Implement this method.
-  bool get isRedirectingConstructor => throw new UnimplementedError();
-
-  // TODO(ahe): Implement this method.
-  bool get isFactoryConstructor => throw new UnimplementedError();
-
-  // TODO(ahe): Implement this method.
-  String get source => throw new UnimplementedError();
-}
-
-class JsParameterMirror extends JsDeclarationMirror implements ParameterMirror {
-  final DeclarationMirror owner;
-  // A JS object representing the type.
-  final _type;
-
-  final bool isOptional;
-
-  final bool isNamed;
-
-  final int _defaultValue;
-
-  final List<int> metadataList;
-
-  JsParameterMirror(String unmangledName,
-                    this.owner,
-                    this._type,
-                     {this.metadataList: const <int>[],
-                     this.isOptional: false,
-                     this.isNamed: false,
-                     defaultValue})
-      : _defaultValue = defaultValue,
-        super(s(unmangledName));
-
-  String get _prettyName => 'ParameterMirror';
-
-  TypeMirror get type {
-    return typeMirrorFromRuntimeTypeRepresentation(owner, _type);
-  }
-
-  // Only true for static fields, never for a parameter.
-  bool get isStatic => false;
-
-  // TODO(ahe): Implement this.
-  bool get isFinal => false;
-
-  // TODO(ahe): Implement this.
-  bool get isConst => false;
-
-  bool get hasDefaultValue => _defaultValue != null;
-
-  get defaultValue {
-    return hasDefaultValue ? reflect(getMetadata(_defaultValue)) : null;
-  }
-
-  List<InstanceMirror> get metadata {
-    preserveMetadata();
-    return metadataList.map((int i) => reflect(getMetadata(i))).toList();
-  }
-}
-
-class JsTypedefMirror extends JsDeclarationMirror implements TypedefMirror {
-  final String _mangledName;
-  JsFunctionTypeMirror referent;
-
-  JsTypedefMirror(Symbol simpleName,  this._mangledName, _typeData)
-      : super(simpleName) {
-    referent = new JsFunctionTypeMirror(_typeData, this);
-  }
-
-  JsFunctionTypeMirror get value => referent;
-
-  String get _prettyName => 'TypedefMirror';
-
-  bool get hasReflectedType => throw new UnimplementedError();
-
-  Type get reflectedType => throw new UnimplementedError();
-
-  // TODO(ahe): Implement this method.
-  List<TypeVariableMirror> get typeVariables => throw new UnimplementedError();
-
-  // TODO(ahe): Implement this method.
-  List<TypeMirror> get typeArguments => throw new UnimplementedError();
-
-  // TODO(ahe): Implement this method.
-  bool get isOriginalDeclaration => throw new UnimplementedError();
-
-  // TODO(ahe): Implement this method.
-  TypeMirror get originalDeclaration => throw new UnimplementedError();
-
-  // TODO(ahe): Implement this method.
-  DeclarationMirror get owner => throw new UnimplementedError();
-
-  // TODO(ahe): Implement this method.
-  List<InstanceMirror> get metadata => throw new UnimplementedError();
-
-  bool isSubtypeOf(TypeMirror other) => throw new UnimplementedError();
-  bool isAssignableTo(TypeMirror other) => throw new UnimplementedError();
-}
-
-// TODO(ahe): Remove this class when API is updated.
-class BrokenClassMirror {
-  bool get hasReflectedType => throw new UnimplementedError();
-  Type get reflectedType => throw new UnimplementedError();
-  ClassMirror get superclass => throw new UnimplementedError();
-  List<ClassMirror> get superinterfaces => throw new UnimplementedError();
-  Map<Symbol, DeclarationMirror> get declarations
-      => throw new UnimplementedError();
-  Map<Symbol, MethodMirror> get instanceMembers
-      => throw new UnimplementedError();
-  Map<Symbol, MethodMirror> get staticMembers => throw new UnimplementedError();
-  ClassMirror get mixin => throw new UnimplementedError();
-  InstanceMirror newInstance(
-      Symbol constructorName,
-      List positionalArguments,
-      [Map<Symbol, dynamic> namedArguments]) => throw new UnimplementedError();
-  InstanceMirror invoke(Symbol memberName,
-                        List positionalArguments,
-                        [Map<Symbol, dynamic> namedArguments])
-      => throw new UnimplementedError();
-  InstanceMirror getField(Symbol fieldName) => throw new UnimplementedError();
-  InstanceMirror setField(Symbol fieldName, Object value)
-      => throw new UnimplementedError();
-  List<TypeVariableMirror> get typeVariables => throw new UnimplementedError();
-  List<TypeMirror> get typeArguments => throw new UnimplementedError();
-  TypeMirror get originalDeclaration => throw new UnimplementedError();
-  Symbol get simpleName => throw new UnimplementedError();
-  Symbol get qualifiedName => throw new UnimplementedError();
-  bool get isPrivate => throw new UnimplementedError();
-  bool get isTopLevel => throw new UnimplementedError();
-  SourceLocation get location => throw new UnimplementedError();
-  List<InstanceMirror> get metadata => throw new UnimplementedError();
-}
-
-class JsFunctionTypeMirror extends BrokenClassMirror
-    implements FunctionTypeMirror {
-  final _typeData;
-  String _cachedToString;
-  TypeMirror _cachedReturnType;
-  UnmodifiableListView<ParameterMirror> _cachedParameters;
-  DeclarationMirror owner;
-
-  JsFunctionTypeMirror(this._typeData, this.owner);
-
-  bool get _hasReturnType => JS('bool', '"ret" in #', _typeData);
-  get _returnType => JS('', '#.ret', _typeData);
-
-  bool get _isVoid => JS('bool', '!!#.void', _typeData);
-
-  bool get _hasArguments => JS('bool', '"args" in #', _typeData);
-  List get _arguments => JS('JSExtendableArray', '#.args', _typeData);
-
-  bool get _hasOptionalArguments => JS('bool', '"opt" in #', _typeData);
-  List get _optionalArguments => JS('JSExtendableArray', '#.opt', _typeData);
-
-  bool get _hasNamedArguments => JS('bool', '"named" in #', _typeData);
-  get _namedArguments => JS('=Object', '#.named', _typeData);
-  bool get isOriginalDeclaration => true;
-
-  bool get isAbstract => false;
-
-  TypeMirror get returnType {
-    if (_cachedReturnType != null) return _cachedReturnType;
-    if (_isVoid) return _cachedReturnType = JsMirrorSystem._voidType;
-    if (!_hasReturnType) return _cachedReturnType = JsMirrorSystem._dynamicType;
-    return _cachedReturnType =
-        typeMirrorFromRuntimeTypeRepresentation(owner, _returnType);
-  }
-
-  List<ParameterMirror> get parameters {
-    if (_cachedParameters != null) return _cachedParameters;
-    List result = [];
-    int parameterCount = 0;
-    if (_hasArguments) {
-      for (var type in _arguments) {
-        result.add(
-            new JsParameterMirror('argument${parameterCount++}', this, type));
-      }
-    }
-    if (_hasOptionalArguments) {
-      for (var type in _optionalArguments) {
-        result.add(
-            new JsParameterMirror('argument${parameterCount++}', this, type));
-      }
-    }
-    if (_hasNamedArguments) {
-      for (var name in extractKeys(_namedArguments)) {
-        var type = JS('', '#[#]', _namedArguments, name);
-        result.add(new JsParameterMirror(name, this, type));
-      }
-    }
-    return _cachedParameters = new UnmodifiableListView<ParameterMirror>(
-        result);
-  }
-
-  String _unmangleIfPreserved(String mangled) {
-    String result = unmangleGlobalNameIfPreservedAnyways(mangled);
-    if (result != null) return result;
-    return mangled;
-  }
-
-  String toString() {
-    if (_cachedToString != null) return _cachedToString;
-    var s = "FunctionTypeMirror on '(";
-    var sep = '';
-    if (_hasArguments) {
-      for (var argument in _arguments) {
-        s += sep;
-        s += _unmangleIfPreserved(runtimeTypeToString(argument));
-        sep = ', ';
-      }
-    }
-    if (_hasOptionalArguments) {
-      s += '$sep[';
-      sep = '';
-      for (var argument in _optionalArguments) {
-        s += sep;
-        s += _unmangleIfPreserved(runtimeTypeToString(argument));
-        sep = ', ';
-      }
-      s += ']';
-    }
-    if (_hasNamedArguments) {
-      s += '$sep{';
-      sep = '';
-      for (var name in extractKeys(_namedArguments)) {
-        s += sep;
-        s += '$name: ';
-        s += _unmangleIfPreserved(
-            runtimeTypeToString(JS('', '#[#]', _namedArguments, name)));
-        sep = ', ';
-      }
-      s += '}';
-    }
-    s += ') -> ';
-    if (_isVoid) {
-      s += 'void';
-    } else if (_hasReturnType) {
-      s += _unmangleIfPreserved(runtimeTypeToString(_returnType));
-    } else {
-      s += 'dynamic';
-    }
-    return _cachedToString = "$s'";
-  }
-
-  bool isSubclassOf(ClassMirror other) => false;
-
-  bool isSubtypeOf(TypeMirror other) => throw new UnimplementedError();
-
-  bool isAssignableTo(TypeMirror other) => throw new UnimplementedError();
-
-  // TODO(ahe): Implement this method.
-  MethodMirror get callMethod => throw new UnimplementedError();
-}
-
-int findTypeVariableIndex(List<TypeVariableMirror> typeVariables, String name) {
-  for (int i = 0; i < typeVariables.length; i++) {
-    if (typeVariables[i].simpleName == s(name)) {
-      return i;
-    }
-  }
-  throw new ArgumentError('Type variable not present in list.');
-}
-
-TypeMirror typeMirrorFromRuntimeTypeRepresentation(
-    DeclarationMirror owner,
-    var /*int|List|JsFunction*/ type) {
-  // TODO(ahe): This method might benefit from using convertRtiToRuntimeType
-  // instead of working on strings.
-  ClassMirror ownerClass;
-  DeclarationMirror context = owner;
-  while (context != null) {
-    if (context is ClassMirror) {
-      ownerClass = context;
-      break;
-    }
-    // TODO(ahe): Get type parameters and arguments from typedefs.
-    if (context is TypedefMirror) break;
-    context = context.owner;
-  }
-
-  String representation;
-  if (type == null) {
-    return JsMirrorSystem._dynamicType;
-  } else if (type is Type) {
-    return reflectType(type);
-  } else if (ownerClass == null) {
-    representation = runtimeTypeToString(type);
-  } else if (ownerClass.isOriginalDeclaration) {
-    if (type is num) {
-      // [type] represents a type variable so in the context of an original
-      // declaration the corresponding type variable should be returned.
-      TypeVariable typeVariable = getMetadata(type);
-      List<TypeVariableMirror> typeVariables = ownerClass.typeVariables;
-      int index = findTypeVariableIndex(typeVariables, typeVariable.name);
-      return typeVariables[index];
-    } else {
-      // Nested type variables will be retrieved lazily (the integer
-      // representation is kept in the string) so they are not processed here.
-      representation = runtimeTypeToString(type);
-    }
-  } else {
-    TypeMirror getTypeArgument(int index) {
-      TypeVariable typeVariable = getMetadata(index);
-      int variableIndex =
-          findTypeVariableIndex(ownerClass.typeVariables, typeVariable.name);
-      return ownerClass.typeArguments[variableIndex];
-    }
-
-    if (type is num) {
-      // [type] represents a type variable used as type argument for example
-      // the type argument of Bar: class Foo<T> extends Bar<T> {}
-      TypeMirror typeArgument = getTypeArgument(type);
-      if (typeArgument is JsTypeVariableMirror)
-        return typeArgument;
-    }
-    String substituteTypeVariable(int index) {
-      var typeArgument = getTypeArgument(index);
-      if (typeArgument is JsTypeVariableMirror) {
-        return '${typeArgument._metadataIndex}';
-      }
-      if (typeArgument is! JsClassMirror &&
-          typeArgument is! JsTypeBoundClassMirror) {
-        if (typeArgument == JsMirrorSystem._dynamicType) {
-          return 'dynamic';
-        } else if (typeArgument == JsMirrorSystem._voidType) {
-          return 'void';
-        } else {
-          // TODO(ahe): This case shouldn't happen.
-          return 'dynamic';
-        }
-      }
-      return typeArgument._mangledName;
-    }
-    representation =
-        runtimeTypeToString(type, onTypeVariable: substituteTypeVariable);
-  }
-  if (representation != null) {
-    return reflectClassByMangledName(
-        getMangledTypeName(createRuntimeType(representation)));
-  }
-  if (type != null && JS('Object|Null', '#.typedef', type) != null) {
-    return typeMirrorFromRuntimeTypeRepresentation(
-        owner, JS('Object', '#.typedef', type));
-  } else if (type != null && JS('Object|Null', '#.func', type) != null) {
-    return new JsFunctionTypeMirror(type, owner);
-  }
-  return reflectClass(Function);
-}
-
-Symbol computeQualifiedName(DeclarationMirror owner, Symbol simpleName) {
-  if (owner == null) return simpleName;
-  String ownerName = n(owner.qualifiedName);
-  return s('$ownerName.${n(simpleName)}');
-}
-
-List extractMetadata(victim) {
-  preserveMetadata();
-  var metadataFunction;
-  if (JS('bool', 'Object.prototype.hasOwnProperty.call(#, "@")', victim)) {
-    metadataFunction = JS('', '#["@"]', victim);
-  }
-  if (metadataFunction != null) return JS('', '#()', metadataFunction);
-  if (JS('bool', 'typeof # != "function"', victim)) return const [];
-  if (JS('bool', '# in #', r'$metadataIndex', victim)) {
-    return JSArray.markFixedList(
-        JS('JSExtendableArray',
-           r'#.$reflectionInfo.splice(#.$metadataIndex)', victim, victim))
-        .map((int i) => getMetadata(i)).toList();
-  }
-  return const [];
-}
-
-void parseCompactFieldSpecification(
-    JsDeclarationMirror owner,
-    fieldSpecification,
-    bool isStatic,
-    List<Mirror> result) {
-  List fieldsMetadata = null;
-  List<String> fields;
-  if (fieldSpecification is List) {
-    fields = splitFields(fieldSpecification[0], ',');
-    fieldsMetadata = fieldSpecification.sublist(1);
-  } else if (fieldSpecification is String) {
-    fields = splitFields(fieldSpecification, ',');
-  } else {
-    fields = [];
-  }
-  int fieldNumber = 0;
-  for (String field in fields) {
-    var metadata;
-    if (fieldsMetadata != null) {
-      metadata = fieldsMetadata[fieldNumber++];
-    }
-    var mirror = new JsVariableMirror.from(field, metadata, owner, isStatic);
-    if (mirror != null) {
-      result.add(mirror);
-    }
-  }
-}
-
-/// Similar to [String.split], but returns an empty list if [string] is empty.
-List<String> splitFields(String string, Pattern pattern) {
-  if (string.isEmpty) return <String>[];
-  return string.split(pattern);
-}
-
-bool isOperatorName(String name) {
-  switch (name) {
-  case '==':
-  case '[]':
-  case '*':
-  case '/':
-  case '%':
-  case '~/':
-  case '+':
-  case '<<':
-  case '>>':
-  case '>=':
-  case '>':
-  case '<=':
-  case '<':
-  case '&':
-  case '^':
-  case '|':
-  case '-':
-  case 'unary-':
-  case '[]=':
-  case '~':
-    return true;
-  default:
-    return false;
-  }
-}
-
-/// Returns true if the key represent ancillary reflection data, that is, not a
-/// method.
-bool isReflectiveDataInPrototype(String key) {
-  if (key == JS_GET_NAME('CLASS_DESCRIPTOR_PROPERTY') ||
-      key == METHODS_WITH_OPTIONAL_ARGUMENTS) {
-    return true;
-  }
-  String firstChar = key[0];
-  return firstChar == '*' || firstChar == '+';
-}
-
-bool isNoSuchMethodStub(var jsFunction) {
-  return JS('bool', r'#.$reflectable == 2', jsFunction);
-}
-
-class NoSuchStaticMethodError extends Error implements NoSuchMethodError {
-  static const int MISSING_CONSTRUCTOR = 0;
-  static const int MISSING_METHOD = 1;
-  final ClassMirror _cls;
-  final Symbol _name;
-  final List _positionalArguments;
-  final Map<Symbol, dynamic> _namedArguments;
-  final int _kind;
-
-  NoSuchStaticMethodError.missingConstructor(
-      this._cls,
-      this._name,
-      this._positionalArguments,
-      this._namedArguments)
-      : _kind = MISSING_CONSTRUCTOR;
-
-  /// If the given class is `null` the static method/getter/setter is top-level.
-  NoSuchStaticMethodError.method(
-      this._cls,
-      this._name,
-      this._positionalArguments,
-      this._namedArguments)
-      : _kind = MISSING_METHOD;
-
-  String toString() {
-    // TODO(floitsch): show arguments.
-    switch(_kind) {
-    case MISSING_CONSTRUCTOR:
-      return
-          "NoSuchMethodError: No constructor named '${n(_name)}' in class"
-          " '${n(_cls.qualifiedName)}'.";
-    case MISSING_METHOD:
-      if (_cls == null) {
-        return "NoSuchMethodError: No top-level method named '${n(_name)}'.";
-      }
-      return "NoSuchMethodError: No static method named '${n(_name)}' in"
-             " class '${n(_cls.qualifiedName)}'";
-    default:
-      return 'NoSuchMethodError';
-    }
-  }
-}
-
-Symbol getSymbol(String name, LibraryMirror library) {
-  if (_isPublicSymbol(name)) {
-    return new _symbol_dev.Symbol.validated(name);
-  }
-  if (library == null) {
-    throw new ArgumentError(
-        "Library required for private symbol name: $name");
-  }
-  if (!_symbol_dev.Symbol.isValidSymbol(name)) {
-    throw new ArgumentError("Not a valid symbol name: $name");
-  }
-  throw new UnimplementedError(
-      "MirrorSystem.getSymbol not implemented for private names");
-}
-
-bool _isPublicSymbol(String name) {
-  // A symbol is public if it doesn't start with '_' and it doesn't
-  // have a part (following a '.') that starts with '_'.
-  const int UNDERSCORE = 0x5f;
-  if (name.isEmpty) return true;
-  int index = -1;
-  do {
-    if (name.codeUnitAt(index + 1) == UNDERSCORE) return false;
-    index = name.indexOf('.', index + 1);
-  } while (index >= 0 && index + 1 < name.length);
-  return true;
-}
diff --git a/sdk/lib/_internal/lib/js_names.dart b/sdk/lib/_internal/lib/js_names.dart
deleted file mode 100644
index 387265e..0000000
--- a/sdk/lib/_internal/lib/js_names.dart
+++ /dev/null
@@ -1,106 +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.
-
-library dart._js_names;
-
-import 'dart:_foreign_helper' show
-    JS,
-    JS_GET_NAME;
-
-import 'dart:_js_helper' show
-    JsCache,
-    NoInline;
-
-import 'dart:_interceptors' show JSArray;
-
-/// No-op method that is called to inform the compiler that unmangled named
-/// must be preserved.
-preserveNames() {}
-
-/// A map from mangled names to "reflective" names, that is, unmangled names
-/// with some additional information, such as, number of required arguments.
-/// This map is for mangled names used as instance members.
-final Map<String, String> mangledNames =
-    computeMangledNames(JS('=Object', 'init.mangledNames'), false);
-
-/// A map from "reflective" names to mangled names (the reverse of
-/// [mangledNames]).
-final Map<String, String> reflectiveNames =
-    computeReflectiveNames(mangledNames);
-
-/// A map from mangled names to "reflective" names (see [mangledNames]).  This
-/// map is for globals, that is, static and top-level members.
-final Map<String, String> mangledGlobalNames =
-    computeMangledNames(JS('=Object', 'init.mangledGlobalNames'), true);
-
-/// A map from "reflective" names to mangled names (the reverse of
-/// [mangledGlobalNames]).
-final Map<String, String> reflectiveGlobalNames =
-    computeReflectiveNames(mangledGlobalNames);
-
-/// [jsMangledNames] is a JavaScript object literal.  The keys are the mangled
-/// names, and the values are the "reflective" names.
-Map<String, String> computeMangledNames(jsMangledNames, bool isGlobal) {
-  preserveNames();
-  var keys = extractKeys(jsMangledNames);
-  var result = <String, String>{};
-  String getterPrefix = JS_GET_NAME('GETTER_PREFIX');
-  int getterPrefixLength = getterPrefix.length;
-  String setterPrefix = JS_GET_NAME('SETTER_PREFIX');
-  for (String key in keys) {
-    String value = JS('String', '#[#]', jsMangledNames, key);
-    result[key] = value;
-    if (!isGlobal) {
-      if (key.startsWith(getterPrefix)) {
-        result['$setterPrefix${key.substring(getterPrefixLength)}'] = '$value=';
-      }
-    }
-  }
-  return result;
-}
-
-Map<String, String> computeReflectiveNames(Map<String, String> map) {
-  preserveNames();
-  var result = <String, String>{};
-  map.forEach((String mangledName, String reflectiveName) {
-    result[reflectiveName] = mangledName;
-  });
-  return result;
-}
-
-@NoInline()
-List extractKeys(victim) {
-  var result = JS('', '''
-(function(victim, hasOwnProperty) {
-  var result = [];
-  for (var key in victim) {
-    if (hasOwnProperty.call(victim, key)) result.push(key);
-  }
-  return result;
-})(#, Object.prototype.hasOwnProperty)''', victim);
-  return new JSArray.markFixed(result);
-}
-
-/**
- * Returns the (global) unmangled version of [name].
- *
- * Normally, you should use [mangledGlobalNames] directly, but this method
- * doesn't tell the compiler to preserve names. So this method only returns a
- * non-null value if some other component has made the compiler preserve names.
- *
- * This is used, for example, to return unmangled names from TypeImpl.toString
- * *if* names are being preserved for other reasons (use of dart:mirrors, for
- * example).
- */
-String unmangleGlobalNameIfPreservedAnyways(String name) {
-  var names = JS('=Object', 'init.mangledGlobalNames');
-  return JsCache.fetch(names, name);
-}
-
-String unmangleAllIdentifiersIfPreservedAnyways(String str) {
-  return JS("String",
-            r"(#).replace(/[^<,> ]+/g,"
-            r"function(m) { return init.mangledGlobalNames[m] || m; })",
-            str);
-}
\ No newline at end of file
diff --git a/sdk/lib/_internal/lib/native_helper.dart b/sdk/lib/_internal/lib/native_helper.dart
deleted file mode 100644
index e865d99..0000000
--- a/sdk/lib/_internal/lib/native_helper.dart
+++ /dev/null
@@ -1,652 +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.
-
-part of _js_helper;
-
-
-// TODO(ngeoffray): stop using this method once our optimizers can
-// change str1.contains(str2) into str1.indexOf(str2) != -1.
-bool contains(String userAgent, String name) {
-  return JS('int', '#.indexOf(#)', userAgent, name) != -1;
-}
-
-int arrayLength(List array) {
-  return JS('int', '#.length', array);
-}
-
-arrayGet(List array, int index) {
-  return JS('var', '#[#]', array, index);
-}
-
-void arraySet(List array, int index, var value) {
-  JS('var', '#[#] = #', array, index, value);
-}
-
-propertyGet(var object, String property) {
-  return JS('var', '#[#]', object, property);
-}
-
-bool callHasOwnProperty(var function, var object, String property) {
-  return JS('bool', '#.call(#, #)', function, object, property);
-}
-
-void propertySet(var object, String property, var value) {
-  JS('var', '#[#] = #', object, property, value);
-}
-
-getPropertyFromPrototype(var object, String name) {
-  return JS('var', 'Object.getPrototypeOf(#)[#]', object, name);
-}
-
-newJsObject() {
-  return JS('var', '{}');
-}
-
-/**
- * Returns a String tag identifying the type of the native object, or `null`.
- * The tag is not the name of the type, but usually the name of the JavaScript
- * constructor function.  Initialized by [initHooks].
- */
-Function getTagFunction;
-
-/**
- * If a lookup via [getTagFunction] on an object [object] that has [tag] fails,
- * this function is called to provide an alternate tag.  This allows us to fail
- * gracefully if we can make a good guess, for example, when browsers add novel
- * kinds of HTMLElement that we have never heard of.  Initialized by
- * [initHooks].
- */
-Function alternateTagFunction;
-
-/**
- * Returns the prototype for the JavaScript constructor named by an input tag.
- * Returns `null` if there is no such constructor, or if pre-patching of the
- * constructor is to be avoided.  Initialized by [initHooks].
- */
-Function prototypeForTagFunction;
-
-
-String toStringForNativeObject(var obj) {
-  // TODO(sra): Is this code dead?
-  // [getTagFunction] might be uninitialized, but in usual usage, toString has
-  // been called via an interceptor and initialized it.
-  String name = getTagFunction == null
-      ? '<Unknown>'
-      : JS('String', '#', getTagFunction(obj));
-  return 'Instance of $name';
-}
-
-int hashCodeForNativeObject(object) => Primitives.objectHashCode(object);
-
-/**
- * Sets a JavaScript property on an object.
- */
-void defineProperty(var obj, String property, var value) {
-  JS('void',
-      'Object.defineProperty(#, #, '
-          '{value: #, enumerable: false, writable: true, configurable: true})',
-      obj,
-      property,
-      value);
-}
-
-
-// Is [obj] an instance of a Dart-defined class?
-bool isDartObject(obj) {
-  // Some of the extra parens here are necessary.
-  return JS('bool', '((#) instanceof (#))', obj, JS_DART_OBJECT_CONSTRUCTOR());
-}
-
-/**
- * A JavaScript object mapping tags to the constructors of interceptors.
- * This is a JavaScript object with no prototype.
- *
- * Example: 'HTMLImageElement' maps to the ImageElement class constructor.
- */
-get interceptorsByTag => JS('=Object', 'init.interceptorsByTag');
-
-/**
- * A JavaScript object mapping tags to `true` or `false`.
- *
- * Example: 'HTMLImageElement' maps to `true` since, as there are no subclasses
- * of ImageElement, it is a leaf class in the native class hierarchy.
- */
-get leafTags => JS('=Object', 'init.leafTags');
-
-String findDispatchTagForInterceptorClass(interceptorClassConstructor) {
-  return JS('', r'#.$nativeSuperclassTag', interceptorClassConstructor);
-}
-
-/**
- * Cache of dispatch records for instances.  This is a JavaScript object used as
- * a map.  Keys are instance tags, e.g. "!SomeThing".  The cache permits the
- * sharing of one dispatch record between multiple instances.
- */
-var dispatchRecordsForInstanceTags;
-
-/**
- * Cache of interceptors indexed by uncacheable tags, e.g. "~SomeThing".
- * This is a JavaScript object used as a map.
- */
-var interceptorsForUncacheableTags;
-
-
-lookupInterceptor(String tag) {
-  return propertyGet(interceptorsByTag, tag);
-}
-
-
-// Dispatch tag marks are optional prefixes for a dispatch tag that direct how
-// the interceptor for the tag may be cached.
-
-/// No caching permitted.
-const UNCACHED_MARK = '~';
-
-/// Dispatch record must be cached per instance
-const INSTANCE_CACHED_MARK = '!';
-
-/// Dispatch record is cached on immediate prototype.
-const LEAF_MARK = '-';
-
-/// Dispatch record is cached on immediate prototype with a prototype
-/// verification to prevent the interceptor being associated with a subclass
-/// before a dispatch record is cached on the subclass.
-const INTERIOR_MARK = '+';
-
-/// A 'discriminator' function is to be used. TBD.
-const DISCRIMINATED_MARK = '*';
-
-
-/**
- * Returns the interceptor for a native object, or returns `null` if not found.
- *
- * A dispatch record is cached according to the specification of the dispatch
- * tag for [obj].
- */
-lookupAndCacheInterceptor(obj) {
-  assert(!isDartObject(obj));
-  String tag = getTagFunction(obj);
-
-  // Fast path for instance (and uncached) tags because the lookup is repeated
-  // for each instance (or getInterceptor call).
-  var record = propertyGet(dispatchRecordsForInstanceTags, tag);
-  if (record != null) return patchInstance(obj, record);
-  var interceptor = propertyGet(interceptorsForUncacheableTags, tag);
-  if (interceptor != null) return interceptor;
-
-  // This lookup works for derived dispatch tags because we add them all in
-  // [initNativeDispatch].
-  var interceptorClass = lookupInterceptor(tag);
-  if (interceptorClass == null) {
-    tag = alternateTagFunction(obj, tag);
-    if (tag != null) {
-      // Fast path for instance and uncached tags again.
-      record = propertyGet(dispatchRecordsForInstanceTags, tag);
-      if (record != null) return patchInstance(obj, record);
-      interceptor = propertyGet(interceptorsForUncacheableTags, tag);
-      if (interceptor != null) return interceptor;
-
-      interceptorClass = lookupInterceptor(tag);
-    }
-  }
-
-  if (interceptorClass == null) {
-    // This object is not known to Dart.  There could be several reasons for
-    // that, including (but not limited to):
-    //
-    // * A bug in native code (hopefully this is caught during development).
-    // * An unknown DOM object encountered.
-    // * JavaScript code running in an unexpected context.  For example, on
-    //   node.js.
-    return null;
-  }
-
-  interceptor = JS('', '#.prototype', interceptorClass);
-
-  var mark = JS('String|Null', '#[0]', tag);
-
-  if (mark == INSTANCE_CACHED_MARK) {
-    record = makeLeafDispatchRecord(interceptor);
-    propertySet(dispatchRecordsForInstanceTags, tag, record);
-    return patchInstance(obj, record);
-  }
-
-  if (mark == UNCACHED_MARK) {
-    propertySet(interceptorsForUncacheableTags, tag, interceptor);
-    return interceptor;
-  }
-
-  if (mark == LEAF_MARK) {
-    return patchProto(obj, makeLeafDispatchRecord(interceptor));
-  }
-
-  if (mark == INTERIOR_MARK) {
-    return patchInteriorProto(obj, interceptor);
-  }
-
-  if (mark == DISCRIMINATED_MARK) {
-    // TODO(sra): Use discriminator of tag.
-    throw new UnimplementedError(tag);
-  }
-
-  // [tag] was not explicitly an interior or leaf tag, so
-  var isLeaf = JS('bool', '(#[#]) === true', leafTags, tag);
-  if (isLeaf) {
-    return patchProto(obj, makeLeafDispatchRecord(interceptor));
-  } else {
-    return patchInteriorProto(obj, interceptor);
-  }
-}
-
-patchInstance(obj, record) {
-  setDispatchProperty(obj, record);
-  return dispatchRecordInterceptor(record);
-}
-
-patchProto(obj, record) {
-  setDispatchProperty(JS('', 'Object.getPrototypeOf(#)', obj), record);
-  return dispatchRecordInterceptor(record);
-}
-
-patchInteriorProto(obj, interceptor) {
-  var proto = JS('', 'Object.getPrototypeOf(#)', obj);
-  var record = makeDispatchRecord(interceptor, proto, null, null);
-  setDispatchProperty(proto, record);
-  return interceptor;
-}
-
-
-makeLeafDispatchRecord(interceptor) {
-  var fieldName = JS_IS_INDEXABLE_FIELD_NAME();
-  bool indexability = JS('bool', r'!!#[#]', interceptor, fieldName);
-  return makeDispatchRecord(interceptor, false, null, indexability);
-}
-
-makeDefaultDispatchRecord(tag, interceptorClass, proto) {
-  var interceptor = JS('', '#.prototype', interceptorClass);
-  var isLeaf = JS('bool', '(#[#]) === true', leafTags, tag);
-  if (isLeaf) {
-    return makeLeafDispatchRecord(interceptor);
-  } else {
-    return makeDispatchRecord(interceptor, proto, null, null);
-  }
-}
-
-/**
- * [proto] should have no shadowing prototypes that are not also assigned a
- * dispatch rescord.
- */
-setNativeSubclassDispatchRecord(proto, interceptor) {
-  setDispatchProperty(proto, makeLeafDispatchRecord(interceptor));
-}
-
-String constructorNameFallback(object) {
-  return JS('String', '#(#)', _constructorNameFallback, object);
-}
-
-
-var initNativeDispatchFlag;  // null or true
-
-void initNativeDispatch() {
-  if (true == initNativeDispatchFlag) return;
-  initNativeDispatchFlag = true;
-  initNativeDispatchContinue();
-}
-
-void initNativeDispatchContinue() {
-
-  dispatchRecordsForInstanceTags = JS('', 'Object.create(null)');
-  interceptorsForUncacheableTags = JS('', 'Object.create(null)');
-
-  initHooks();
-
-  // Try to pro-actively patch prototypes of DOM objects.  For each of our known
-  // tags `TAG`, if `window.TAG` is a (constructor) function, set the dispatch
-  // property if the function's prototype to a dispatch record.
-  var map = interceptorsByTag;
-  var tags = JS('JSMutableArray', 'Object.getOwnPropertyNames(#)', map);
-
-  if (JS('bool', 'typeof window != "undefined"')) {
-    var context = JS('=Object', 'window');
-    var fun = JS('=Object', 'function () {}');
-    for (int i = 0; i < tags.length; i++) {
-      var tag = tags[i];
-      var proto = prototypeForTagFunction(tag);
-      if (proto != null) {
-        var interceptorClass = JS('', '#[#]', map, tag);
-        var record = makeDefaultDispatchRecord(tag, interceptorClass, proto);
-        if (record != null) {
-          setDispatchProperty(proto, record);
-          // Ensure the modified prototype is still fast by assigning it to
-          // the prototype property of a function object.
-          JS('', '#.prototype = #', fun, proto);
-        }
-      }
-    }
-  }
-
-  // [interceptorsByTag] maps 'plain' dispatch tags.  Add all the derived
-  // dispatch tags to simplify lookup of derived tags.
-  for (int i = 0; i < tags.length; i++) {
-    var tag = JS('String', '#[#]', tags, i);
-    if (JS('bool', '/^[A-Za-z_]/.test(#)', tag)) {
-      var interceptorClass = propertyGet(map, tag);
-      propertySet(map, INSTANCE_CACHED_MARK + tag, interceptorClass);
-      propertySet(map, UNCACHED_MARK + tag, interceptorClass);
-      propertySet(map, LEAF_MARK + tag, interceptorClass);
-      propertySet(map, INTERIOR_MARK + tag, interceptorClass);
-      propertySet(map, DISCRIMINATED_MARK + tag, interceptorClass);
-    }
-  }
-}
-
-
-/**
- * Initializes [getTagFunction] and [alternateTagFunction].
- *
- * These functions are 'hook functions', collectively 'hooks'.  They initialized
- * by applying a series of hooks transformers.  Built-in hooks transformers deal
- * with various known browser behaviours.
- *
- * Each hook tranformer takes a 'hooks' input which is a JavaScript object
- * containing the hook functions, and returns the same or a new object with
- * replacements.  The replacements can wrap the originals to provide alternate
- * or modified behaviour.
- *
- *     { getTag: function(obj) {...},
- *       getUnknownTag: function(obj, tag) {...},
- *       prototypeForTag: function(tag) {...},
- *       discriminator: function(tag) {...},
- *      }
- *
- * * getTag(obj) returns the dispatch tag, or `null`.
- * * getUnknownTag(obj, tag) returns a tag when [getTag] fails.
- * * prototypeForTag(tag) returns the prototype of the constructor for tag,
- *   or `null` if not available or prepatching is undesirable.
- * * discriminator(tag) returns a function TBD.
- *
- * The web site can adapt a dart2js application by loading code ahead of the
- * dart2js application that defines hook transformers to be after the built in
- * ones.  Code defining a transformer HT should use the following pattern to
- * ensure multiple transformers can be composed:
- *
- *     (dartNativeDispatchHooksTransformer =
- *      window.dartNativeDispatchHooksTransformer || []).push(HT);
- *
- *
- * TODO: Implement and describe dispatch tags and their caching methods.
- */
-void initHooks() {
-  // The initial simple hooks:
-  var hooks = JS('', '#()', _baseHooks);
-
-  // Customize for browsers where `object.constructor.name` fails:
-  var _fallbackConstructorHooksTransformer =
-      JS('', '#(#)', _fallbackConstructorHooksTransformerGenerator,
-          _constructorNameFallback);
-  hooks = applyHooksTransformer(_fallbackConstructorHooksTransformer, hooks);
-
-  // Customize for browsers:
-  hooks = applyHooksTransformer(_firefoxHooksTransformer, hooks);
-  hooks = applyHooksTransformer(_ieHooksTransformer, hooks);
-  hooks = applyHooksTransformer(_operaHooksTransformer, hooks);
-  hooks = applyHooksTransformer(_safariHooksTransformer, hooks);
-
-  hooks = applyHooksTransformer(_fixDocumentHooksTransformer, hooks);
-
-  // TODO(sra): Update ShadowDOM polyfil to use
-  // [dartNativeDispatchHooksTransformer] and remove this hook.
-  hooks = applyHooksTransformer(_dartExperimentalFixupGetTagHooksTransformer,
-      hooks);
-
-  // Apply global hooks.
-  //
-  // If defined, dartNativeDispatchHookdTransformer should be a single function
-  // of a JavaScript Array of functions.
-
-  if (JS('bool', 'typeof dartNativeDispatchHooksTransformer != "undefined"')) {
-    var transformers = JS('', 'dartNativeDispatchHooksTransformer');
-    if (JS('bool', 'typeof # == "function"', transformers)) {
-      transformers = [transformers];
-    }
-    if (JS('bool', '#.constructor == Array', transformers)) {
-      for (int i = 0; i < JS('int', '#.length', transformers); i++) {
-        var transformer = JS('', '#[#]', transformers, i);
-        if (JS('bool', 'typeof # == "function"', transformer)) {
-          hooks = applyHooksTransformer(transformer, hooks);
-        }
-      }
-    }
-  }
-
-  var getTag = JS('', '#.getTag', hooks);
-  var getUnknownTag = JS('', '#.getUnknownTag', hooks);
-  var prototypeForTag = JS('', '#.prototypeForTag', hooks);
-
-  getTagFunction = (o) => JS('String|Null', '#(#)', getTag, o);
-  alternateTagFunction =
-      (o, String tag) => JS('String|Null', '#(#, #)', getUnknownTag, o, tag);
-  prototypeForTagFunction =
-      (String tag) => JS('', '#(#)', prototypeForTag, tag);
-}
-
-applyHooksTransformer(transformer, hooks) {
-  var newHooks = JS('=Object|Null', '#(#)', transformer, hooks);
-  return JS('', '# || #', newHooks, hooks);
-}
-
-// JavaScript code fragments.
-//
-// This is a temporary place for the JavaScript code.
-//
-// TODO(sra): These code fragments are not minified.  They could be generated by
-// the code emitter, or JS_CONST could be improved to parse entire functions and
-// take care of the minification.
-
-const _baseHooks = const JS_CONST(r'''
-function() {
-  function typeNameInChrome(o) {
-    var name = o.constructor.name;
-    if (name) return name;
-    var s = Object.prototype.toString.call(o);
-    return s.substring(8, s.length - 1);
-  }
-  function getUnknownTag(object, tag) {
-    // This code really belongs in [getUnknownTagGenericBrowser] but having it
-    // here allows [getUnknownTag] to be tested on d8.
-    if (/^HTML[A-Z].*Element$/.test(tag)) {
-      // Check that it is not a simple JavaScript object.
-      var name = Object.prototype.toString.call(object);
-      if (name == "[object Object]") return null;
-      return "HTMLElement";
-    }
-  }
-  function getUnknownTagGenericBrowser(object, tag) {
-    if (self.HTMLElement && object instanceof HTMLElement) return "HTMLElement";
-    return getUnknownTag(object, tag);
-  }
-  function prototypeForTag(tag) {
-    if (typeof window == "undefined") return null;
-    if (typeof window[tag] == "undefined") return null;
-    var constructor = window[tag];
-    if (typeof constructor != "function") return null;
-    return constructor.prototype;
-  }
-  function discriminator(tag) { return null; }
-
-  var isBrowser = typeof navigator == "object";
-
-  return {
-    getTag: typeNameInChrome,
-    getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag,
-    prototypeForTag: prototypeForTag,
-    discriminator: discriminator };
-}''');
-
-
-/**
- * Returns the name of the constructor function for browsers where
- * `object.constructor.name` is not reliable.
- *
- * This function is split out of [_fallbackConstructorHooksTransformerGenerator]
- * as it is called from both the dispatch hooks and via
- * [constructorNameFallback] from objectToString.
- */
-const _constructorNameFallback = const JS_CONST(r'''
-function getTagFallback(o) {
-  var constructor = o.constructor;
-  if (typeof constructor == "function") {
-    var name = constructor.name;
-    // If the name is a non-empty string, we use that as the type name of this
-    // object.  There are various cases where that does not work, so we have to
-    // detect them and fall through to the toString() based implementation.
-
-    if (typeof name == "string" &&
-
-        // Sometimes the string is empty.  This test also catches minified
-        // shadow dom polyfil wrapper for Window on Firefox where the faked
-        // constructor name does not 'stick'.  The shortest real DOM object
-        // names have three characters (e.g. URL, CSS).
-        name.length > 2 &&
-
-        // On Firefox we often get "Object" as the constructor name, even for
-        // more specialized DOM objects.
-        name !== "Object" &&
-
-        // This can happen in Opera.
-        name !== "Function.prototype") {
-      return name;
-    }
-  }
-  var s = Object.prototype.toString.call(o);
-  return s.substring(8, s.length - 1);
-}''');
-
-
-const _fallbackConstructorHooksTransformerGenerator = const JS_CONST(r'''
-function(getTagFallback) {
-  return function(hooks) {
-    // If we are not in a browser, assume we are in d8.
-    // TODO(sra): Recognize jsshell.
-    if (typeof navigator != "object") return hooks;
-
-    var ua = navigator.userAgent;
-    // TODO(antonm): remove a reference to DumpRenderTree.
-    if (ua.indexOf("DumpRenderTree") >= 0) return hooks;
-    if (ua.indexOf("Chrome") >= 0) {
-      // Confirm constructor name is usable for dispatch.
-      function confirm(p) {
-        return typeof window == "object" && window[p] && window[p].name == p;
-      }
-      if (confirm("Window") && confirm("HTMLElement")) return hooks;
-    }
-
-    hooks.getTag = getTagFallback;
-  };
-}''');
-
-
-const _ieHooksTransformer = const JS_CONST(r'''
-function(hooks) {
-  var userAgent = typeof navigator == "object" ? navigator.userAgent : "";
-  if (userAgent.indexOf("Trident/") == -1) return hooks;
-
-  var getTag = hooks.getTag;
-
-  var quickMap = {
-    "BeforeUnloadEvent": "Event",
-    "DataTransfer": "Clipboard",
-    "HTMLDDElement": "HTMLElement",
-    "HTMLDTElement": "HTMLElement",
-    "HTMLPhraseElement": "HTMLElement",
-    "Position": "Geoposition"
-  };
-
-  function getTagIE(o) {
-    var tag = getTag(o);
-    var newTag = quickMap[tag];
-    if (newTag) return newTag;
-    // Patches for types which report themselves as Objects.
-    if (tag == "Object") {
-      if (window.DataView && (o instanceof window.DataView)) return "DataView";
-    }
-    return tag;
-  }
-
-  function prototypeForTagIE(tag) {
-    var constructor = window[tag];
-    if (constructor == null) return null;
-    return constructor.prototype;
-  }
-
-  hooks.getTag = getTagIE;
-  hooks.prototypeForTag = prototypeForTagIE;
-}''');
-
-const _fixDocumentHooksTransformer = const JS_CONST(r'''
-function(hooks) {
-  var getTag = hooks.getTag;
-  var prototypeForTag = hooks.prototypeForTag;
-  function getTagFixed(o) {
-    var tag = getTag(o);
-    if (tag == "Document") {
-      // Some browsers and the polymer polyfill call both HTML and XML documents
-      // "Document", so we check for the xmlVersion property, which is the empty
-      // string on HTML documents. Since both dart:html classes Document and
-      // HtmlDocument share the same type, we must patch the instances and not
-      // the prototype.
-      if (!!o.xmlVersion) return "!Document";
-      return "!HTMLDocument";
-    }
-    return tag;
-  }
-
-  function prototypeForTagFixed(tag) {
-    if (tag == "Document") return null;  // Do not pre-patch Document.
-    return prototypeForTag(tag);
-  }
-
-  hooks.getTag = getTagFixed;
-  hooks.prototypeForTag = prototypeForTagFixed;
-}''');
-
-const _firefoxHooksTransformer = const JS_CONST(r'''
-function(hooks) {
-  var userAgent = typeof navigator == "object" ? navigator.userAgent : "";
-  if (userAgent.indexOf("Firefox") == -1) return hooks;
-
-  var getTag = hooks.getTag;
-
-  var quickMap = {
-    "BeforeUnloadEvent": "Event",
-    "DataTransfer": "Clipboard",
-    "GeoGeolocation": "Geolocation",
-    "Location": "!Location",               // Fixes issue 18151
-    "WorkerMessageEvent": "MessageEvent",
-    "XMLDocument": "!Document"};
-
-  function getTagFirefox(o) {
-    var tag = getTag(o);
-    return quickMap[tag] || tag;
-  }
-
-  hooks.getTag = getTagFirefox;
-}''');
-
-
-const _operaHooksTransformer = const JS_CONST(r'''
-function(hooks) { return hooks; }
-''');
-
-
-const _safariHooksTransformer = const JS_CONST(r'''
-function(hooks) { return hooks; }
-''');
-
-
-const _dartExperimentalFixupGetTagHooksTransformer = const JS_CONST(r'''
-function(hooks) {
-  if (typeof dartExperimentalFixupGetTag != "function") return hooks;
-  hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag);
-}''');
diff --git a/sdk/lib/_internal/lib/preambles/README b/sdk/lib/_internal/lib/preambles/README
deleted file mode 100644
index d764d51..0000000
--- a/sdk/lib/_internal/lib/preambles/README
+++ /dev/null
@@ -1,17 +0,0 @@
-The files in this directory polyfill some of the functionality that browsers
-provide. When running command-line JS evaluators it is frequently necessary to
-execute the preambles before executing the output of dart2js.
-
-=Usage=
-- d8:
-    d8 <sdk>/lib/_internal/lib/preambles/d8.js <output>.js
-
-- jsshell:
-    jsshell -f <sdk>/lib/_internal/lib/preambles/d8.js -f <output>.js
-
-- node.js:
-  The d8 preamble file works for most programs.
-
-  Unfortunately we are not aware of any easy way to provide multiple input files
-  to node. It seems to be necessary to concatenate the d8 preamble and the
-  dart2js output.
diff --git a/sdk/lib/_internal/libraries.dart b/sdk/lib/_internal/libraries.dart
index e3ce435..78f2060 100644
--- a/sdk/lib/_internal/libraries.dart
+++ b/sdk/lib/_internal/libraries.dart
@@ -25,7 +25,7 @@
   "async": const LibraryInfo(
       "async/async.dart",
       maturity: Maturity.STABLE,
-      dart2jsPatchPath: "_internal/lib/async_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/js_lib/async_patch.dart"),
 
   "_blink": const LibraryInfo(
       "_blink/dartium/_blink_dartium.dart",
@@ -42,17 +42,17 @@
   "collection": const LibraryInfo(
       "collection/collection.dart",
       maturity: Maturity.STABLE,
-      dart2jsPatchPath: "_internal/lib/collection_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/js_lib/collection_patch.dart"),
 
   "convert": const LibraryInfo(
       "convert/convert.dart",
       maturity: Maturity.STABLE,
-      dart2jsPatchPath: "_internal/lib/convert_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/js_lib/convert_patch.dart"),
 
   "core": const LibraryInfo(
       "core/core.dart",
       maturity: Maturity.STABLE,
-      dart2jsPatchPath: "_internal/lib/core_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/js_lib/core_patch.dart"),
 
   "html": const LibraryInfo(
       "html/dartium/html_dartium.dart",
@@ -78,12 +78,12 @@
       "io/io.dart",
       category: "Server",
       maturity: Maturity.STABLE,
-      dart2jsPatchPath: "_internal/lib/io_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/js_lib/io_patch.dart"),
 
   "isolate": const LibraryInfo(
       "isolate/isolate.dart",
       maturity: Maturity.STABLE,
-      dart2jsPatchPath: "_internal/lib/isolate_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/js_lib/isolate_patch.dart"),
 
   "js": const LibraryInfo(
       "js/dartium/js_dartium.dart",
@@ -94,12 +94,12 @@
   "math": const LibraryInfo(
       "math/math.dart",
       maturity: Maturity.STABLE,
-      dart2jsPatchPath: "_internal/lib/math_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/js_lib/math_patch.dart"),
 
   "mirrors": const LibraryInfo(
       "mirrors/mirrors.dart",
       maturity: Maturity.UNSTABLE,
-      dart2jsPatchPath: "_internal/lib/mirrors_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/js_lib/mirrors_patch.dart"),
 
   "profiler": const LibraryInfo(
       "profiler/profiler.dart",
@@ -115,10 +115,10 @@
   "typed_data": const LibraryInfo(
       "typed_data/typed_data.dart",
       maturity: Maturity.STABLE,
-      dart2jsPatchPath: "_internal/lib/typed_data_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/js_lib/typed_data_patch.dart"),
 
   "_native_typed_data": const LibraryInfo(
-      "_internal/lib/native_typed_data.dart",
+      "_internal/compiler/js_lib/native_typed_data.dart",
       category: "Internal",
       implementation: true,
       documented: false,
@@ -153,46 +153,46 @@
       category: "Internal",
       documented: false,
       dart2jsPatchPath:
-          "_internal/lib/internal_patch.dart"),
+          "_internal/compiler/js_lib/internal_patch.dart"),
 
   "_js_helper": const LibraryInfo(
-      "_internal/lib/js_helper.dart",
+      "_internal/compiler/js_lib/js_helper.dart",
       category: "Internal",
       documented: false,
       platforms: DART2JS_PLATFORM),
 
   "_interceptors": const LibraryInfo(
-      "_internal/lib/interceptors.dart",
+      "_internal/compiler/js_lib/interceptors.dart",
       category: "Internal",
       documented: false,
       platforms: DART2JS_PLATFORM),
 
   "_foreign_helper": const LibraryInfo(
-      "_internal/lib/foreign_helper.dart",
+      "_internal/compiler/js_lib/foreign_helper.dart",
       category: "Internal",
       documented: false,
       platforms: DART2JS_PLATFORM),
 
   "_isolate_helper": const LibraryInfo(
-      "_internal/lib/isolate_helper.dart",
+      "_internal/compiler/js_lib/isolate_helper.dart",
       category: "Internal",
       documented: false,
       platforms: DART2JS_PLATFORM),
 
   "_js_mirrors": const LibraryInfo(
-      "_internal/lib/js_mirrors.dart",
+      "_internal/compiler/js_lib/js_mirrors.dart",
       category: "Internal",
       documented: false,
       platforms: DART2JS_PLATFORM),
 
   "_js_names": const LibraryInfo(
-      "_internal/lib/js_names.dart",
+      "_internal/compiler/js_lib/js_names.dart",
       category: "Internal",
       documented: false,
       platforms: DART2JS_PLATFORM),
 
   "_js_primitives": const LibraryInfo(
-      "_internal/lib/js_primitives.dart",
+      "_internal/compiler/js_lib/js_primitives.dart",
       category: "Internal",
       documented: false,
       platforms: DART2JS_PLATFORM),
@@ -200,7 +200,7 @@
   // TODO(ahe): This library is only for dart2dart, perhaps it should use a
   // different platform.
   "_mirror_helper": const LibraryInfo(
-      "_internal/lib/mirror_helper.dart",
+      "_internal/compiler/js_lib/mirror_helper.dart",
       category: "Internal",
       documented: false,
       platforms: DART2JS_PLATFORM)
diff --git a/sdk/lib/_internal/pub/bin/async_compile.dart b/sdk/lib/_internal/pub/bin/async_compile.dart
index a6f27c0..c0d13e64 100644
--- a/sdk/lib/_internal/pub/bin/async_compile.dart
+++ b/sdk/lib/_internal/pub/bin/async_compile.dart
@@ -4,17 +4,11 @@
 
 import 'dart:io';
 
+import 'package:args/args.dart';
+import 'package:analyzer/src/services/formatter_impl.dart';
 import 'package:async_await/async_await.dart' as async_await;
 import 'package:path/path.dart' as p;
 
-/// A changing string that indicates the "version" or timestamp of the compiler
-/// that the current sources were compiled against.
-///
-/// Increment this whenever a meaningful change in the async/await compiler
-/// itself is landed. Bumping this will force all previously compiled files
-/// that were compiled against an older compiler to be recompiled.
-const COMPILER_VERSION = "1";
-
 /// The path to pub's root directory (sdk/lib/_internal/pub) in the Dart repo.
 ///
 /// This assumes this script is itself being run from within the repo.
@@ -24,13 +18,22 @@
 final sourceUrl = p.toUri(sourceDir).toString();
 
 /// The directory that compiler output should be written to.
-String buildDir;
+final generatedDir = p.join(p.dirname(sourceDir), 'pub_generated');
 
 /// `true` if any file failed to compile.
 bool hadFailure = false;
 
+bool verbose = false;
+
+/// Prefix for imports in pub that import dart2js libraries.
 final _compilerPattern = new RegExp(r"import '(\.\./)+compiler");
 
+/// Matches the Git commit hash of the compiler stored in the README.md file.
+///
+/// This is used both to find the current commit and replace it with the new
+/// one.
+final _commitPattern = new RegExp(r"[a-f0-9]{40}");
+
 /// This runs the async/await compiler on all of the pub source code.
 ///
 /// It reads from the repo and writes the compiled output into the given build
@@ -38,28 +41,56 @@
 /// compile files that haven't changed since the last time they were compiled.
 // TODO(rnystrom): Remove this when #104 is fixed.
 void main(List<String> arguments) {
-  _validate(arguments.isNotEmpty, "Missing build directory.");
-  _validate(arguments.length <= 2, "Unexpected arguments.");
-  if (arguments.length == 2) {
-    _validate(arguments[1] == "--silent",
-        "Invalid argument '${arguments[1]}");
-  }
+  var parser = new ArgParser(allowTrailingOptions: true);
 
-  // Create the build output directory if it's not already there.
-  buildDir = p.join(p.normalize(arguments[0]), "pub_async");
-  new Directory(buildDir).createSync(recursive: true);
+  parser.addFlag("verbose", callback: (value) => verbose = value);
 
-  // See if the current sources were compiled against a different version of the
-  // compiler.
-  var versionPath = p.join(buildDir, "compiler.version");
-  var version = "none";
+  var force = false;
+  parser.addFlag("force", callback: (value) => force = value);
+
+  var buildDir;
+
   try {
-    version = new File(versionPath).readAsStringSync();
-  } on IOException catch (ex) {
-    // Do nothing. The version file didn't exist.
+    var rest = parser.parse(arguments).rest;
+    if (rest.isEmpty) {
+      throw new FormatException('Missing build directory.');
+    } else if (rest.length > 1) {
+      throw new FormatException(
+          'Unexpected arguments: ${rest.skip(1).join(" ")}.');
+    }
+
+    buildDir = rest.first;
+  } on FormatException catch(ex) {
+    stderr.writeln(ex);
+    stderr.writeln();
+    stderr.writeln(
+        "Usage: dart async_compile.dart [--verbose] [--force] <build dir>");
+    exit(64);
   }
 
-  var silent = arguments.length == 2 && arguments[1] == "--silent";
+  // See what version (i.e. Git commit) of the async-await compiler we
+  // currently have. If this is different from the version that was used to
+  // compile the sources, recompile everything.
+  var result = Process.runSync("git", ["rev-parse", "HEAD"], workingDirectory:
+      p.join(sourceDir, "../../../../third_party/pkg/async_await"));
+  if (result.exitCode != 0) {
+    stderr.writeln("Could not get Git revision of async_await compiler.");
+    exit(1);
+  }
+
+  var currentCommit = result.stdout.trim();
+
+  var readmePath = p.join(generatedDir, "README.md");
+  var lastCommit;
+  var readme = new File(readmePath).readAsStringSync();
+  var match = _commitPattern.firstMatch(readme);
+  if (match == null) {
+    stderr.writeln("Could not find compiler commit hash in README.md.");
+    exit(1);
+  }
+
+  lastCommit = match[0];
+
   var numFiles = 0;
   var numCompiled = 0;
 
@@ -67,28 +98,31 @@
   for (var entry in new Directory(sourceDir).listSync(recursive: true)) {
     if (p.extension(entry.path) != ".dart") continue;
 
-    // Skip tests.
-    // TODO(rnystrom): Do we want to use this for tests too?
-    if (p.isWithin(p.join(sourceDir, "test"), entry.path)) continue;
-
     numFiles++;
     var relative = p.relative(entry.path, from: sourceDir);
 
     var sourceFile = entry as File;
-    var destPath = p.join(buildDir, relative);
+    var destPath = p.join(generatedDir, relative);
     var destFile = new File(destPath);
-    if (version != COMPILER_VERSION ||
+    if (force ||
+        currentCommit != lastCommit ||
         !destFile.existsSync() ||
         entry.lastModifiedSync().isAfter(destFile.lastModifiedSync())) {
       _compile(sourceFile.path, sourceFile.readAsStringSync(), destPath);
       numCompiled++;
-      if (!silent) print("Compiled ${sourceFile.path}.");
+      if (verbose) print("Compiled $relative");
     }
   }
 
-  _writeFile(versionPath, COMPILER_VERSION);
+  // Update the README.
+  if (currentCommit != lastCommit) {
+    readme = readme.replaceAll(_commitPattern, currentCommit);
+    _writeFile(readmePath, readme);
+  }
 
-  if (!silent) print("Compiled $numCompiled out of $numFiles files.");
+  if (verbose) print("Compiled $numCompiled out of $numFiles files");
+
+  if (numCompiled > 0) _generateSnapshot(buildDir);
 
   if (hadFailure) exit(1);
 }
@@ -120,7 +154,13 @@
   }
 
   try {
-    return async_await.compile(source);
+    source = async_await.compile(source);
+
+    // Reformat the result since the compiler ditches all whitespace.
+    // TODO(rnystrom): Remove when this is fixed:
+    // https://github.com/dart-lang/async_await/issues/12
+    var result = new CodeFormatter().format(CodeKind.COMPILATION_UNIT, source);
+    return result.source;
   } catch (ex) {
     stderr.writeln("Async compile failed on $sourcePath:\n$ex");
     hadFailure = true;
@@ -135,19 +175,35 @@
 /// to fix those to be valid relative imports from the build directory.
 String _fixDart2jsImports(String sourcePath, String source, String destPath) {
   var compilerDir = p.url.join(sourceUrl, "../compiler");
-  var relative = p.url.relative(compilerDir, from: p.dirname(destPath));
+  var relative = p.url.relative(compilerDir,
+      from: p.url.dirname(p.toUri(destPath).toString()));
   return source.replaceAll(_compilerPattern, "import '$relative");
 }
 
-/// Validates command-line argument usage and exits with [message] if [valid]
-/// is `false`.
-void _validate(bool valid, String message) {
-  if (valid) return;
+/// Regenerate the pub snapshot from the async/await-compiled output. We do
+/// this here since the tests need it and it's faster than doing a full SDK
+/// build.
+void _generateSnapshot(String buildDir) {
+  buildDir = p.normalize(buildDir);
 
-  stderr.writeln(message);
-  stderr.writeln();
-  stderr.writeln("Usage: dart async_compile.dart <build dir> [--silent]");
-  exit(64);
+  var entrypoint = p.join(generatedDir, 'bin/pub.dart');
+  var packageRoot = p.join(buildDir, 'packages');
+  var snapshot = p.join(buildDir, 'dart-sdk/bin/snapshots/pub.dart.snapshot');
+
+  var result = Process.runSync(Platform.executable, [
+    "--package-root=$packageRoot",
+    "--snapshot=$snapshot",
+    entrypoint
+  ]);
+
+  if (result.exitCode != 0) {
+    stderr.writeln("Failed to generate snapshot:");
+    if (result.stderr.trim().isNotEmpty) stderr.writeln(result.stderr);
+    if (result.stdout.trim().isNotEmpty) stderr.writeln(result.stdout);
+    exit(result.exitCode);
+  }
+
+  if (verbose) print("Created pub snapshot");
 }
 
 /// Deletes the file at [path], ignoring any IO errors that occur.
@@ -172,4 +228,4 @@
   } on IOException catch (ex) {
     // Do nothing.
   }
-}
\ No newline at end of file
+}
diff --git a/sdk/lib/_internal/pub/bin/pub.dart b/sdk/lib/_internal/pub/bin/pub.dart
index 8f7fa4e..67cefeb 100644
--- a/sdk/lib/_internal/pub/bin/pub.dart
+++ b/sdk/lib/_internal/pub/bin/pub.dart
@@ -129,7 +129,7 @@
 }
 
 /// Walks the command tree and runs the selected pub command.
-Future invokeCommand(String cacheDir, ArgResults mainOptions) {
+Future invokeCommand(String cacheDir, ArgResults mainOptions) async {
   var commands = PubCommand.mainCommands;
   var command;
   var commandString = "pub";
@@ -174,26 +174,25 @@
         'Command "${options.name}" does not take any arguments.');
   }
 
-  return syncFuture(() {
+  try {
+    // TODO(rnystrom): Use await here when this is fixed:
+    // https://github.com/dart-lang/async_await/issues/40.
     return command.run(cacheDir, mainOptions, options);
-  }).whenComplete(() {
+  } finally {
     command.cache.deleteTempDir();
-  });
+  }
 }
 
 /// Checks that pub is running on a supported platform.
 ///
 /// If it isn't, it prints an error message and exits. Completes when the
 /// validation is done.
-Future validatePlatform() {
-  return syncFuture(() {
-    if (Platform.operatingSystem != 'windows') return null;
+Future validatePlatform() async {
+  if (Platform.operatingSystem != 'windows') return;
 
-    return runProcess('ver', []).then((result) {
-      if (result.stdout.join('\n').contains('XP')) {
-        log.error('Sorry, but pub is not supported on Windows XP.');
-        return flushThenExit(exit_codes.USAGE);
-      }
-    });
-  });
+  var result = await runProcess('ver', []);
+  if (result.stdout.join('\n').contains('XP')) {
+    log.error('Sorry, but pub is not supported on Windows XP.');
+    await flushThenExit(exit_codes.USAGE);
+  }
 }
diff --git a/sdk/lib/_internal/pub/lib/src/command/cache_repair.dart b/sdk/lib/_internal/pub/lib/src/command/cache_repair.dart
index b16efe2..dfeab5e 100644
--- a/sdk/lib/_internal/pub/lib/src/command/cache_repair.dart
+++ b/sdk/lib/_internal/pub/lib/src/command/cache_repair.dart
@@ -19,33 +19,33 @@
   String get usage => "pub cache repair";
   String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-cache.html";
 
-  Future onRun() {
+  Future onRun() async {
     var successes = 0;
     var failures = 0;
 
     // Repair every cached source.
-    return Future.forEach(cache.sources.where(
-        (source) => source is CachedSource), (source) {
-      return source.repairCachedPackages().then((results) {
-        successes += results.first;
-        failures += results.last;
-      });
-    }).then((_) {
-      if (successes > 0) {
-        var packages = pluralize("package", successes);
-        log.message("Reinstalled ${log.green(successes)} $packages.");
-      }
+    for (var source in cache.sources) {
+      if (source is! CachedSource) continue;
 
-      if (failures > 0) {
-        var packages = pluralize("package", failures);
-        log.message("Failed to reinstall ${log.red(failures)} $packages.");
-      }
+      var results = await source.repairCachedPackages();
+      successes += results.first;
+      failures += results.last;
+    }
 
-      if (successes == 0 && failures == 0) {
-        log.message("No packages in cache, so nothing to repair.");
-      }
+    if (successes > 0) {
+      var packages = pluralize("package", successes);
+      log.message("Reinstalled ${log.green(successes)} $packages.");
+    }
 
-      if (failures > 0) return flushThenExit(exit_codes.UNAVAILABLE);
-    });
+    if (failures > 0) {
+      var packages = pluralize("package", failures);
+      log.message("Failed to reinstall ${log.red(failures)} $packages.");
+    }
+
+    if (successes == 0 && failures == 0) {
+      log.message("No packages in cache, so nothing to repair.");
+    }
+
+    if (failures > 0) await flushThenExit(exit_codes.UNAVAILABLE);
   }
 }
diff --git a/sdk/lib/_internal/pub/lib/src/command/downgrade.dart b/sdk/lib/_internal/pub/lib/src/command/downgrade.dart
index 94e8fc6..d3313a4 100644
--- a/sdk/lib/_internal/pub/lib/src/command/downgrade.dart
+++ b/sdk/lib/_internal/pub/lib/src/command/downgrade.dart
@@ -28,14 +28,13 @@
         help: "Report what dependencies would change but don't change any.");
   }
 
-  Future onRun() {
+  Future onRun() async {
     var dryRun = commandOptions['dry-run'];
-    return entrypoint.acquireDependencies(SolveType.DOWNGRADE,
-        useLatest: commandOptions.rest, dryRun: dryRun).then((_) {
-      if (isOffline) {
-        log.warning("Warning: Downgrading when offline may not update you to "
-            "the oldest versions of your dependencies.");
-      }
-    });
+    await entrypoint.acquireDependencies(SolveType.DOWNGRADE,
+        useLatest: commandOptions.rest, dryRun: dryRun);
+    if (isOffline) {
+      log.warning("Warning: Downgrading when offline may not update you to "
+          "the oldest versions of your dependencies.");
+    }
   }
 }
diff --git a/sdk/lib/_internal/pub/lib/src/command/serve.dart b/sdk/lib/_internal/pub/lib/src/command/serve.dart
index 0d6a84d..1d7db15 100644
--- a/sdk/lib/_internal/pub/lib/src/command/serve.dart
+++ b/sdk/lib/_internal/pub/lib/src/command/serve.dart
@@ -79,7 +79,7 @@
         help: 'Force the use of a polling filesystem watcher.');
   }
 
-  Future onRunTransformerCommand() {
+  Future onRunTransformerCommand() async {
     var port = parseInt(commandOptions['port'], 'port');
     var adminPort = commandOptions['admin-port'] == null ? null :
         parseInt(commandOptions['admin-port'], 'admin port');
@@ -87,91 +87,87 @@
     var watcherType = commandOptions['force-poll'] ?
         WatcherType.POLLING : WatcherType.AUTO;
 
-    return AssetEnvironment.create(entrypoint, mode, watcherType: watcherType,
-        hostname: hostname, basePort: port, useDart2JS: useDart2JS)
-        .then((environment) {
+    var environment = await AssetEnvironment.create(entrypoint, mode,
+        watcherType: watcherType, hostname: hostname, basePort: port,
+        useDart2JS: useDart2JS);
+    var directoryLength = sourceDirectories.map((dir) => dir.length)
+        .reduce(math.max);
 
-      var directoryLength = sourceDirectories.map((dir) => dir.length)
-          .reduce(math.max);
+    var server = await environment.startAdminServer(adminPort);
+    server.results.listen((_) {
+      // The admin server produces no result values.
+      assert(false);
+    }, onError: _fatalError);
 
-      return environment.startAdminServer(adminPort).then((server) {
-        server.results.listen((_) {
-          // The admin server produces no result values.
-          assert(false);
-        }, onError: _fatalError);
+    if (logAdminUrl) {
+      log.message("Running admin server on "
+          "${log.bold('http://$hostname:${server.port}')}");
+    }
 
-        if (logAdminUrl) {
-          log.message("Running admin server on "
-              "${log.bold('http://$hostname:${server.port}')}");
-        }
+    // Start up the servers. We pause updates while this is happening so
+    // that we don't log spurious build results in the middle of listing
+    // out the bound servers.
+    environment.pauseUpdates();
+    for (var directory in sourceDirectories) {
+      await _startServer(environment, directory, directoryLength);
+    }
 
-        // Start up the servers. We pause updates while this is happening so
-        // that we don't log spurious build results in the middle of listing
-        // out the bound servers.
-        environment.pauseUpdates();
-        return Future.forEach(sourceDirectories, (directory) {
-          return _startServer(environment, directory, directoryLength);
-        });
-      }).then((_) {
-        // Now that the servers are up and logged, send them to barback.
-        environment.barback.errors.listen((error) {
-          log.error(log.red("Build error:\n$error"));
-        });
-
-        environment.barback.results.listen((result) {
-          if (result.succeeded) {
-            // TODO(rnystrom): Report using growl/inotify-send where available.
-            log.message("Build completed ${log.green('successfully')}");
-          } else {
-            log.message("Build completed with "
-                "${log.red(result.errors.length)} errors.");
-          }
-        }, onError: _fatalError);
-
-        environment.resumeUpdates();
-        return _completer.future;
-      });
+    // Now that the servers are up and logged, send them to barback.
+    environment.barback.errors.listen((error) {
+      log.error(log.red("Build error:\n$error"));
     });
+
+    environment.barback.results.listen((result) {
+      if (result.succeeded) {
+        // TODO(rnystrom): Report using growl/inotify-send where available.
+        log.message("Build completed ${log.green('successfully')}");
+      } else {
+        log.message("Build completed with "
+            "${log.red(result.errors.length)} errors.");
+      }
+    }, onError: _fatalError);
+
+    environment.resumeUpdates();
+    await _completer.future;
   }
 
   Future _startServer(AssetEnvironment environment, String rootDirectory,
-      int directoryLength) {
-    return environment.serveDirectory(rootDirectory).then((server) {
-      // In release mode, strip out .dart files since all relevant ones have
-      // been compiled to JavaScript already.
-      if (mode == BarbackMode.RELEASE) {
-        server.allowAsset = (url) => !url.path.endsWith(".dart");
+      int directoryLength) async {
+    var server = await environment.serveDirectory(rootDirectory);
+    // In release mode, strip out .dart files since all relevant ones have
+    // been compiled to JavaScript already.
+    if (mode == BarbackMode.RELEASE) {
+      server.allowAsset = (url) => !url.path.endsWith(".dart");
+    }
+
+    // Add two characters to account for "[" and "]".
+    var prefix = log.gray(
+        padRight("[${server.rootDirectory}]", directoryLength + 2));
+
+    server.results.listen((result) {
+      var buffer = new StringBuffer();
+      buffer.write("$prefix ");
+
+      if (result.isSuccess) {
+        buffer.write(
+            "${log.green('GET')} ${result.url.path} $_arrow ${result.id}");
+      } else {
+        buffer.write("${log.red('GET')} ${result.url.path} $_arrow");
+
+        var error = result.error.toString();
+        if (error.contains("\n")) {
+          buffer.write("\n${prefixLines(error)}");
+        } else {
+          buffer.write(" $error");
+        }
       }
 
-      // Add two characters to account for "[" and "]".
-      var prefix = log.gray(
-          padRight("[${server.rootDirectory}]", directoryLength + 2));
+      log.message(buffer);
+    }, onError: _fatalError);
 
-      server.results.listen((result) {
-        var buffer = new StringBuffer();
-        buffer.write("$prefix ");
-
-        if (result.isSuccess) {
-          buffer.write(
-              "${log.green('GET')} ${result.url.path} $_arrow ${result.id}");
-        } else {
-          buffer.write("${log.red('GET')} ${result.url.path} $_arrow");
-
-          var error = result.error.toString();
-          if (error.contains("\n")) {
-            buffer.write("\n${prefixLines(error)}");
-          } else {
-            buffer.write(" $error");
-          }
-        }
-
-        log.message(buffer);
-      }, onError: _fatalError);
-
-      log.message("Serving ${entrypoint.root.name} "
-          "${padRight(server.rootDirectory, directoryLength)} "
-          "on ${log.bold('http://$hostname:${server.port}')}");
-    });
+    log.message("Serving ${entrypoint.root.name} "
+        "${padRight(server.rootDirectory, directoryLength)} "
+        "on ${log.bold('http://$hostname:${server.port}')}");
   }
 
   /// Reports [error] and exits the server.
diff --git a/sdk/lib/_internal/pub/lib/src/command/upgrade.dart b/sdk/lib/_internal/pub/lib/src/command/upgrade.dart
index c42c33b..841a3ef 100644
--- a/sdk/lib/_internal/pub/lib/src/command/upgrade.dart
+++ b/sdk/lib/_internal/pub/lib/src/command/upgrade.dart
@@ -29,14 +29,13 @@
         help: "Report what dependencies would change but don't change any.");
   }
 
-  Future onRun() {
+  Future onRun() async {
     var dryRun = commandOptions['dry-run'];
-    return entrypoint.acquireDependencies(SolveType.UPGRADE,
-        useLatest: commandOptions.rest, dryRun: dryRun).then((_) {
-      if (isOffline) {
-        log.warning("Warning: Upgrading when offline may not update you to the "
-                    "latest versions of your dependencies.");
-      }
-    });
+    await entrypoint.acquireDependencies(SolveType.UPGRADE,
+        useLatest: commandOptions.rest, dryRun: dryRun);
+    if (isOffline) {
+      log.warning("Warning: Upgrading when offline may not update you to the "
+                  "latest versions of your dependencies.");
+    }
   }
 }
diff --git a/sdk/lib/_internal/pub/lib/src/entrypoint.dart b/sdk/lib/_internal/pub/lib/src/entrypoint.dart
index c1f0e7d..fddd024 100644
--- a/sdk/lib/_internal/pub/lib/src/entrypoint.dart
+++ b/sdk/lib/_internal/pub/lib/src/entrypoint.dart
@@ -164,6 +164,7 @@
 
     // If the existing executable was compiled with a different SDK, we need to
     // recompile regardless of what changed.
+    // TODO(nweiz): Use the VM to check this when issue 20802 is fixed.
     var sdkMatches = fileExists(sdkVersionPath) &&
         readTextFile(sdkVersionPath) == "${sdk.version}\n";
     if (!sdkMatches) changed = null;
diff --git a/sdk/lib/_internal/pub/lib/src/executable.dart b/sdk/lib/_internal/pub/lib/src/executable.dart
index 7951392..b4d6cf5 100644
--- a/sdk/lib/_internal/pub/lib/src/executable.dart
+++ b/sdk/lib/_internal/pub/lib/src/executable.dart
@@ -16,7 +16,6 @@
 import 'exit_codes.dart' as exit_codes;
 import 'io.dart';
 import 'log.dart' as log;
-import 'sdk.dart' as sdk;
 import 'utils.dart';
 
 /// Runs [executable] from [package] reachable from [entrypoint].
@@ -30,7 +29,7 @@
 ///
 /// Returns the exit code of the spawned app.
 Future<int> runExecutable(Entrypoint entrypoint, String package,
-    String executable, Iterable<String> args, {bool isGlobal: false}) {
+    String executable, Iterable<String> args, {bool isGlobal: false}) async {
   // Unless the user overrides the verbosity, we want to filter out the
   // normal pub output shown while loading the environment.
   if (log.verbosity == log.Verbosity.NORMAL) {
@@ -55,24 +54,21 @@
     executable = p.join("bin", executable);
   }
 
-  var environment;
   // TODO(nweiz): Use [packages] to only load assets from packages that the
   // executable might load.
-  return AssetEnvironment.create(entrypoint, BarbackMode.RELEASE,
-      useDart2JS: false).then((_environment) {
-    environment = _environment;
+  var environment = await AssetEnvironment.create(entrypoint,
+      BarbackMode.RELEASE, useDart2JS: false);
+  environment.barback.errors.listen((error) {
+    log.error(log.red("Build error:\n$error"));
+  });
 
-    environment.barback.errors.listen((error) {
-      log.error(log.red("Build error:\n$error"));
-    });
-
-    if (package == entrypoint.root.name) {
-      // Serve the entire root-most directory containing the entrypoint. That
-      // ensures that, for example, things like `import '../../utils.dart';`
-      // will work from within some deeply nested script.
-      return environment.serveDirectory(rootDir);
-    }
-
+  var server;
+  if (package == entrypoint.root.name) {
+    // Serve the entire root-most directory containing the entrypoint. That
+    // ensures that, for example, things like `import '../../utils.dart';`
+    // will work from within some deeply nested script.
+    server = await environment.serveDirectory(rootDir);
+  } else {
     // Make sure the dependency exists.
     var dep = entrypoint.root.immediateDependencies.firstWhere(
         (dep) => dep.name == package, orElse: () => null);
@@ -87,59 +83,29 @@
     }
 
     // For other packages, always use the "bin" directory.
-    return environment.servePackageBinDirectory(package);
-  }).then((server) {
-    // Try to make sure the entrypoint script exists (or is generated) before
-    // we spawn the process to run it.
-    var assetPath = "${p.url.joinAll(p.split(executable))}.dart";
-    var id = new AssetId(server.package, assetPath);
-    return environment.barback.getAssetById(id).then((_) {
-      var vmArgs = [];
+    server = await environment.servePackageBinDirectory(package);
+  }
 
-      // Run in checked mode.
-      // TODO(rnystrom): Make this configurable.
-      vmArgs.add("--checked");
+  // Try to make sure the entrypoint script exists (or is generated) before
+  // we spawn the process to run it.
+  var assetPath = "${p.url.joinAll(p.split(executable))}.dart";
+  var id = new AssetId(server.package, assetPath);
+  // TODO(rnystrom): Use try/catch here when
+  // https://github.com/dart-lang/async_await/issues/4 is fixed.
+  return environment.barback.getAssetById(id).then((_) async {
+    var vmArgs = [];
 
-      // Get the URL of the executable, relative to the server's root directory.
-      var relativePath = p.url.relative(assetPath,
-          from: p.url.joinAll(p.split(server.rootDirectory)));
-      vmArgs.add(server.url.resolve(relativePath).toString());
-      vmArgs.addAll(args);
+    // Run in checked mode.
+    // TODO(rnystrom): Make this configurable.
+    vmArgs.add("--checked");
 
-      return Process.start(Platform.executable, vmArgs).then((process) {
-        // Note: we're not using process.std___.pipe(std___) here because
-        // that prevents pub from also writing to the output streams.
-        process.stderr.listen(stderr.add);
-        process.stdout.listen(stdout.add);
-        stdin.listen(process.stdin.add);
+    // Get the URL of the executable, relative to the server's root directory.
+    var relativePath = p.url.relative(assetPath,
+        from: p.url.joinAll(p.split(server.rootDirectory)));
+    vmArgs.add(server.url.resolve(relativePath).toString());
+    vmArgs.addAll(args);
 
-        return process.exitCode;
-      });
-    }).catchError((error, stackTrace) {
-      if (error is! AssetNotFoundException) throw error;
-
-      var message = "Could not find ${log.bold(executable + ".dart")}";
-      if (package != entrypoint.root.name) {
-        message += " in package ${log.bold(server.package)}";
-      }
-
-      log.error("$message.");
-      log.fine(new Chain.forTrace(stackTrace));
-      return exit_codes.NO_INPUT;
-    });
-  });
-}
-
-/// Runs the snapshot at [path] with [args] and hooks its stdout, stderr, and
-/// sdtin to this process's.
-///
-/// Returns the snapshot's exit code.
-///
-/// This doesn't do any validation of the snapshot's SDK version.
-Future<int> runSnapshot(String path, Iterable<String> args) {
-  var vmArgs = [path]..addAll(args);
-
-  return Process.start(Platform.executable, vmArgs).then((process) {
+    var process = await Process.start(Platform.executable, vmArgs);
     // Note: we're not using process.std___.pipe(std___) here because
     // that prevents pub from also writing to the output streams.
     process.stderr.listen(stderr.add);
@@ -147,34 +113,78 @@
     stdin.listen(process.stdin.add);
 
     return process.exitCode;
+  }).catchError((error, stackTrace) {
+    if (error is! AssetNotFoundException) throw error;
+
+    var message = "Could not find ${log.bold(executable + ".dart")}";
+    if (package != entrypoint.root.name) {
+      message += " in package ${log.bold(server.package)}";
+    }
+
+    log.error("$message.");
+    log.fine(new Chain.forTrace(stackTrace));
+    return exit_codes.NO_INPUT;
   });
 }
 
+/// Runs the snapshot at [path] with [args] and hooks its stdout, stderr, and
+/// sdtin to this process's.
+///
+/// If [recompile] is passed, it's called if the snapshot is out-of-date. It's
+/// expected to regenerate a snapshot at [path], after which the snapshot will
+/// be re-run. It may return a Future.
+///
+/// If [checked] is set, runs the snapshot in checked mode.
+///
+/// Returns the snapshot's exit code.
+///
+/// This doesn't do any validation of the snapshot's SDK version.
+Future<int> runSnapshot(String path, Iterable<String> args, {recompile(),
+    bool checked: false}) async {
+  var vmArgs = [path]..addAll(args);
+
+  // TODO(nweiz): pass a flag to silence the "Wrong full snapshot version"
+  // message when issue 20784 is fixed.
+  if (checked) vmArgs.insert(0, "--checked");
+
+  // We need to split stdin so that we can send the same input both to the
+  // first and second process, if we start more than one.
+  var stdin1;
+  var stdin2;
+  if (recompile == null) {
+    stdin1 = stdin;
+  } else {
+    var pair = tee(stdin);
+    stdin1 = pair.first;
+    stdin2 = pair.last;
+  }
+
+  runProcess(input) async {
+    var process = await Process.start(Platform.executable, vmArgs);
+
+    // Note: we're not using process.std___.pipe(std___) here because
+    // that prevents pub from also writing to the output streams.
+    process.stderr.listen(stderr.add);
+    process.stdout.listen(stdout.add);
+    input.listen(process.stdin.add);
+
+    return process.exitCode;
+  }
+
+  var exitCode = await runProcess(stdin1);
+  if (recompile == null || exitCode != 255) return exitCode;
+
+  // Exit code 255 indicates that the snapshot version was out-of-date. If we
+  // can recompile, do so.
+  await recompile();
+  return runProcess(stdin2);
+}
+
 /// Runs the executable snapshot at [snapshotPath].
-Future _runCachedExecutable(Entrypoint entrypoint, String snapshotPath,
+Future<int> _runCachedExecutable(Entrypoint entrypoint, String snapshotPath,
     List<String> args) {
-  return syncFuture(() {
-    // If the snapshot was compiled with a different SDK version, we need to
-    // recompile it.
-    var sdkVersionPath = p.join(".pub", "bin", "sdk-version");
-    if (fileExists(sdkVersionPath) &&
-        readTextFile(sdkVersionPath) == "${sdk.version}\n") {
-      return null;
-    }
-
-    log.fine("Precompiled executables are out of date.");
+  return runSnapshot(snapshotPath, args, checked: true, recompile: () {
+    log.fine("Precompiled executable is out of date.");
     return entrypoint.precompileExecutables();
-  }).then((_) {
-    var vmArgs = ["--checked", snapshotPath]..addAll(args);
-
-    return Process.start(Platform.executable, vmArgs).then((process) {
-      // Note: we're not using process.std___.pipe(std___) here because
-      // that prevents pub from also writing to the output streams.
-      process.stderr.listen(stderr.add);
-      process.stdout.listen(stdout.add);
-      stdin.listen(process.stdin.add);
-
-      return process.exitCode;
-    });
   });
 }
diff --git a/sdk/lib/_internal/pub/lib/src/global_packages.dart b/sdk/lib/_internal/pub/lib/src/global_packages.dart
index 08f9fb1..6f3da60 100644
--- a/sdk/lib/_internal/pub/lib/src/global_packages.dart
+++ b/sdk/lib/_internal/pub/lib/src/global_packages.dart
@@ -18,9 +18,7 @@
 import 'log.dart' as log;
 import 'package.dart';
 import 'pubspec.dart';
-import 'package_graph.dart';
 import 'system_cache.dart';
-import 'sdk.dart' as sdk;
 import 'solver/version_solver.dart';
 import 'source/cached.dart';
 import 'source/git.dart';
@@ -68,19 +66,18 @@
 
   /// Caches the package located in the Git repository [repo] and makes it the
   /// active global version.
-  Future activateGit(String repo) {
+  Future activateGit(String repo) async {
     var source = cache.sources["git"] as GitSource;
-    return source.getPackageNameFromRepo(repo).then((name) {
-      // Call this just to log what the current active package is, if any.
-      _describeActive(name);
+    var name = await source.getPackageNameFromRepo(repo);
+    // Call this just to log what the current active package is, if any.
+    _describeActive(name);
 
-      // TODO(nweiz): Add some special handling for git repos that contain path
-      // dependencies. Their executables shouldn't be cached, and there should
-      // be a mechanism for redoing dependency resolution if a path pubspec has
-      // changed (see also issue 20499).
-      return _installInCache(
-          new PackageDep(name, "git", VersionConstraint.any, repo));
-    });
+    // TODO(nweiz): Add some special handling for git repos that contain path
+    // dependencies. Their executables shouldn't be cached, and there should
+    // be a mechanism for redoing dependency resolution if a path pubspec has
+    // changed (see also issue 20499).
+    await _installInCache(
+        new PackageDep(name, "git", VersionConstraint.any, repo));
   }
 
   /// Finds the latest version of the hosted package with [name] that matches
@@ -91,32 +88,31 @@
   }
 
   /// Makes the local package at [path] globally active.
-  Future activatePath(String path) {
+  Future activatePath(String path) async {
     var entrypoint = new Entrypoint(path, cache);
 
     // Get the package's dependencies.
-    return entrypoint.ensureLockFileIsUpToDate().then((_) {
-      var name = entrypoint.root.name;
+    await entrypoint.ensureLockFileIsUpToDate();
+    var name = entrypoint.root.name;
 
-      // Call this just to log what the current active package is, if any.
-      _describeActive(name);
+    // Call this just to log what the current active package is, if any.
+    _describeActive(name);
 
-      // Write a lockfile that points to the local package.
-      var fullPath = canonicalize(entrypoint.root.dir);
-      var id = new PackageId(name, "path", entrypoint.root.version,
-          PathSource.describePath(fullPath));
+    // Write a lockfile that points to the local package.
+    var fullPath = canonicalize(entrypoint.root.dir);
+    var id = new PackageId(name, "path", entrypoint.root.version,
+        PathSource.describePath(fullPath));
 
-      // TODO(rnystrom): Look in "bin" and display list of binaries that
-      // user can run.
-      _writeLockFile(name, new LockFile([id]));
+    // TODO(rnystrom): Look in "bin" and display list of binaries that
+    // user can run.
+    _writeLockFile(name, new LockFile([id]));
 
-      var binDir = p.join(_directory, name, 'bin');
-      if (dirExists(binDir)) deleteEntry(binDir);
-    });
+    var binDir = p.join(_directory, name, 'bin');
+    if (dirExists(binDir)) deleteEntry(binDir);
   }
 
   /// Installs the package [dep] and its dependencies into the system cache.
-  Future _installInCache(PackageDep dep) {
+  Future _installInCache(PackageDep dep) async {
     var source = cache.sources[dep.source];
 
     // Create a dummy package with just [dep] so we can do resolution on it.
@@ -124,28 +120,26 @@
         dependencies: [dep], sources: cache.sources));
 
     // Resolve it and download its dependencies.
-    return resolveVersions(SolveType.GET, cache.sources, root).then((result) {
-      if (!result.succeeded) {
-        // If the package specified by the user doesn't exist, we want to
-        // surface that as a [DataError] with the associated exit code.
-        if (result.error.package != dep.name) throw result.error;
-        if (result.error is NoVersionException) dataError(result.error.message);
-        throw result.error;
-      }
-      result.showReport(SolveType.GET);
+    var result = await resolveVersions(SolveType.GET, cache.sources, root);
+    if (!result.succeeded) {
+      // If the package specified by the user doesn't exist, we want to
+      // surface that as a [DataError] with the associated exit code.
+      if (result.error.package != dep.name) throw result.error;
+      if (result.error is NoVersionException) dataError(result.error.message);
+      throw result.error;
+    }
+    result.showReport(SolveType.GET);
 
-      // Make sure all of the dependencies are locally installed.
-      return Future.wait(result.packages.map(_cacheDependency)).then((ids) {
-        var lockFile = new LockFile(ids);
+    // Make sure all of the dependencies are locally installed.
+    var ids = await Future.wait(result.packages.map(_cacheDependency));
+    var lockFile = new LockFile(ids);
 
-        // Load the package graph from [result] so we don't need to re-parse all
-        // the pubspecs.
-        return new Entrypoint.inMemory(root, lockFile, cache)
-            .loadPackageGraph(result)
-            .then((graph) => _precompileExecutables(graph.entrypoint, dep.name))
-            .then((_) => _writeLockFile(dep.name, lockFile));
-      });
-    });
+    // Load the package graph from [result] so we don't need to re-parse all
+    // the pubspecs.
+    var graph = await new Entrypoint.inMemory(root, lockFile, cache)
+        .loadPackageGraph(result);
+    await _precompileExecutables(graph.entrypoint, dep.name);
+    _writeLockFile(dep.name, lockFile);
   }
 
   /// Precompiles the executables for [package] and saves them in the global
@@ -153,9 +147,7 @@
   Future _precompileExecutables(Entrypoint entrypoint, String package) {
     return log.progress("Precompiling executables", () {
       var binDir = p.join(_directory, package, 'bin');
-      var sdkVersionPath = p.join(binDir, 'sdk-version');
       cleanDir(binDir);
-      writeTextFile(sdkVersionPath, "${sdk.version}\n");
 
       return AssetEnvironment.create(entrypoint, BarbackMode.RELEASE,
           useDart2JS: false).then((environment) {
@@ -171,15 +163,14 @@
   /// Downloads [id] into the system cache if it's a cached package.
   ///
   /// Returns the resolved [PackageId] for [id].
-  Future<PackageId> _cacheDependency(PackageId id) {
+  Future<PackageId> _cacheDependency(PackageId id) async {
     var source = cache.sources[id.source];
 
-    return syncFuture(() {
-      if (id.isRoot) return null;
-      if (source is! CachedSource) return null;
+    if (!id.isRoot && source is CachedSource) {
+      await source.downloadToSystemCache(id);
+    }
 
-      return source.downloadToSystemCache(id);
-    }).then((_) => source.resolveId(id));
+    return source.resolveId(id);
   }
 
   /// Finishes activating package [package] by saving [lockFile] in the cache.
@@ -249,6 +240,8 @@
   ///
   /// Returns an [Entrypoint] loaded with the active package if found.
   Future<Entrypoint> find(String name) {
+    // TODO(rnystrom): Use async/await here when on __ catch is supported.
+    // See: https://github.com/dart-lang/async_await/issues/27
     return syncFuture(() {
       var lockFilePath = _getLockFilePath(name);
       var lockFile;
@@ -317,18 +310,14 @@
       log.verbosity = log.Verbosity.WARNING;
     }
 
-    return syncFuture(() {
-      var sdkVersionPath = p.join(binDir, 'sdk-version');
-      var snapshotVersion = readTextFile(sdkVersionPath);
-      if (snapshotVersion == "${sdk.version}\n") return null;
-      log.fine("$package:$executable was compiled with Dart "
-          "${snapshotVersion.trim()} and needs to be recompiled.");
-
+    var snapshotPath = p.join(binDir, '$executable.dart.snapshot');
+    return exe.runSnapshot(snapshotPath, args, recompile: () {
+      log.fine("$package:$executable is out of date and needs to be "
+          "recompiled.");
       return find(package)
           .then((entrypoint) => entrypoint.loadPackageGraph())
           .then((graph) => _precompileExecutables(graph.entrypoint, package));
-    }).then((_) =>
-        exe.runSnapshot(p.join(binDir, '$executable.dart.snapshot'), args));
+    });
   }
 
   /// Gets the path to the lock file for an activated cached package with
diff --git a/sdk/lib/_internal/pub/lib/src/utils.dart b/sdk/lib/_internal/pub/lib/src/utils.dart
index 3abeefd..7af41e5 100644
--- a/sdk/lib/_internal/pub/lib/src/utils.dart
+++ b/sdk/lib/_internal/pub/lib/src/utils.dart
@@ -8,7 +8,10 @@
 import 'dart:async';
 import "dart:convert";
 import 'dart:io';
-@MirrorsUsed(targets: 'pub.io')
+
+// This is used by [libraryPath]. It must be kept up-to-date with all libraries
+// whose paths are looked up using that function.
+@MirrorsUsed(targets: const ['pub.io', 'test_pub'])
 import 'dart:mirrors';
 
 import "package:crypto/crypto.dart";
diff --git a/sdk/lib/_internal/pub/test/asset/out-of-date.snapshot b/sdk/lib/_internal/pub/test/asset/out-of-date.snapshot
new file mode 100644
index 0000000..38c3b9d
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/asset/out-of-date.snapshot
Binary files differ
diff --git a/sdk/lib/_internal/pub/test/descriptor.dart b/sdk/lib/_internal/pub/test/descriptor.dart
index aec82a3..67db472 100644
--- a/sdk/lib/_internal/pub/test/descriptor.dart
+++ b/sdk/lib/_internal/pub/test/descriptor.dart
@@ -9,6 +9,7 @@
 import 'package:scheduled_test/scheduled_server.dart';
 import 'package:scheduled_test/descriptor.dart';
 
+import '../lib/src/io.dart';
 import '../lib/src/utils.dart';
 import 'descriptor/git.dart';
 import 'descriptor/tar.dart';
@@ -35,6 +36,13 @@
   ])
 ]);
 
+/// Returns a descriptor of a snapshot that can't be run by the current VM.
+///
+/// This snapshot was generated by the VM on r39611, the revision immediately
+/// before snapshot versioning was added.
+FileDescriptor outOfDateSnapshot(String name) =>
+    binaryFile(name, readBinaryFile(testAssetPath('out-of-date.snapshot')));
+
 /// Describes a file named `pubspec.yaml` with the given YAML-serialized
 /// [contents], which should be a serializable object.
 ///
diff --git a/sdk/lib/_internal/pub/test/global/activate/snaphots_hosted_executables_test.dart b/sdk/lib/_internal/pub/test/global/activate/snaphots_hosted_executables_test.dart
deleted file mode 100644
index 79ce0d7..0000000
--- a/sdk/lib/_internal/pub/test/global/activate/snaphots_hosted_executables_test.dart
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2014, 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:scheduled_test/scheduled_test.dart';
-
-import '../../descriptor.dart' as d;
-import '../../test_pub.dart';
-
-main() {
-  initConfig();
-  integration('snapshots the executables for a hosted package', () {
-    servePackages((builder) {
-      builder.serve("foo", "1.0.0", contents: [
-        d.dir('bin', [
-          d.file("hello.dart", "void main() => print('hello!');"),
-          d.file("goodbye.dart", "void main() => print('goodbye!');"),
-          d.file("shell.sh", "echo shell"),
-          d.dir("subdir", [
-            d.file("sub.dart", "void main() => print('sub!');")
-          ])
-        ])
-      ]);
-    });
-
-    schedulePub(args: ["global", "activate", "foo"], output: allOf([
-      contains('Precompiled foo:hello.'),
-      contains("Precompiled foo:goodbye.")
-    ]));
-
-    d.dir(cachePath, [
-      d.dir('global_packages', [
-        d.dir('foo', [
-          d.matcherFile('pubspec.lock', contains('1.0.0')),
-          d.dir('bin', [
-            d.file('sdk-version', '0.1.2+3\n'),
-            d.matcherFile('hello.dart.snapshot', contains('hello!')),
-            d.matcherFile('goodbye.dart.snapshot', contains('goodbye!')),
-            d.nothing('shell.sh.snapshot'),
-            d.nothing('subdir')
-          ])
-        ])
-      ])
-    ]).validate();
-  });
-}
diff --git a/sdk/lib/_internal/pub/test/global/activate/snapshots_git_executables_test.dart b/sdk/lib/_internal/pub/test/global/activate/snapshots_git_executables_test.dart
index 35274c1..cfabaa9 100644
--- a/sdk/lib/_internal/pub/test/global/activate/snapshots_git_executables_test.dart
+++ b/sdk/lib/_internal/pub/test/global/activate/snapshots_git_executables_test.dart
@@ -35,7 +35,6 @@
         d.dir('foo', [
           d.matcherFile('pubspec.lock', contains('1.0.0')),
           d.dir('bin', [
-            d.file('sdk-version', '0.1.2+3\n'),
             d.matcherFile('hello.dart.snapshot', contains('hello!')),
             d.matcherFile('goodbye.dart.snapshot', contains('goodbye!')),
             d.nothing('shell.sh.snapshot'),
diff --git a/sdk/lib/_internal/pub/test/global/activate/snapshots_hosted_executables_test.dart b/sdk/lib/_internal/pub/test/global/activate/snapshots_hosted_executables_test.dart
new file mode 100644
index 0000000..5bd0257
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/global/activate/snapshots_hosted_executables_test.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2014, 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:scheduled_test/scheduled_test.dart';
+
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+
+main() {
+  initConfig();
+  integration('snapshots the executables for a hosted package', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0", contents: [
+        d.dir('bin', [
+          d.file("hello.dart", "void main() => print('hello!');"),
+          d.file("goodbye.dart", "void main() => print('goodbye!');"),
+          d.file("shell.sh", "echo shell"),
+          d.dir("subdir", [
+            d.file("sub.dart", "void main() => print('sub!');")
+          ])
+        ])
+      ]);
+    });
+
+    schedulePub(args: ["global", "activate", "foo"], output: allOf([
+      contains('Precompiled foo:hello.'),
+      contains("Precompiled foo:goodbye.")
+    ]));
+
+    d.dir(cachePath, [
+      d.dir('global_packages', [
+        d.dir('foo', [
+          d.matcherFile('pubspec.lock', contains('1.0.0')),
+          d.dir('bin', [
+            d.matcherFile('hello.dart.snapshot', contains('hello!')),
+            d.matcherFile('goodbye.dart.snapshot', contains('goodbye!')),
+            d.nothing('shell.sh.snapshot'),
+            d.nothing('subdir')
+          ])
+        ])
+      ])
+    ]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub/test/global/run/recompiles_if_sdk_is_out_of_date_test.dart b/sdk/lib/_internal/pub/test/global/run/recompiles_if_sdk_is_out_of_date_test.dart
index df4b029..bb38dd7 100644
--- a/sdk/lib/_internal/pub/test/global/run/recompiles_if_sdk_is_out_of_date_test.dart
+++ b/sdk/lib/_internal/pub/test/global/run/recompiles_if_sdk_is_out_of_date_test.dart
@@ -24,10 +24,7 @@
     d.dir(cachePath, [
       d.dir('global_packages', [
         d.dir('foo', [
-          d.dir('bin', [
-            d.file('sdk-version', '0.0.1\n'),
-            d.file('script.dart.snapshot', 'junk')
-          ])
+          d.dir('bin', [d.outOfDateSnapshot('script.dart.snapshot')])
         ])
       ])
     ]).create();
@@ -43,7 +40,6 @@
       d.dir('global_packages', [
         d.dir('foo', [
           d.dir('bin', [
-            d.file('sdk-version', '0.1.2+3\n'),
             d.matcherFile('script.dart.snapshot', contains('ok'))
           ])
         ])
diff --git a/sdk/lib/_internal/pub/test/snapshot/recompiles_if_the_sdk_is_out_of_date_test.dart b/sdk/lib/_internal/pub/test/snapshot/recompiles_if_the_sdk_is_out_of_date_test.dart
index 41870c7..1d8d213 100644
--- a/sdk/lib/_internal/pub/test/snapshot/recompiles_if_the_sdk_is_out_of_date_test.dart
+++ b/sdk/lib/_internal/pub/test/snapshot/recompiles_if_the_sdk_is_out_of_date_test.dart
@@ -26,8 +26,7 @@
     pubGet(output: contains("Precompiled foo:hello."));
 
     d.dir(p.join(appPath, '.pub', 'bin'), [
-      d.file('sdk-version', '0.0.1'),
-      d.dir('foo', [d.file('hello.dart.snapshot', 'junk')])
+      d.dir('foo', [d.outOfDateSnapshot('hello.dart.snapshot')])
     ]).create();
 
     var process = pubRun(args: ['foo:hello']);
diff --git a/sdk/lib/_internal/pub/test/test_pub.dart b/sdk/lib/_internal/pub/test/test_pub.dart
index d2e9589..b2b2541 100644
--- a/sdk/lib/_internal/pub/test/test_pub.dart
+++ b/sdk/lib/_internal/pub/test/test_pub.dart
@@ -476,39 +476,6 @@
   pub.writeLine("y");
 }
 
-/// Whether the async/await compiler has already been run.
-///
-/// If a test suite runs pub more than once, we only need to run the compiler
-/// the first time.
-// TODO(rnystrom): Remove this when #104 is fixed.
-bool _compiledAsync = false;
-
-/// Gets the path to the pub entrypoint Dart script to run.
-// TODO(rnystrom): This exists to run the async/await compiler on pub and then
-// get the path to the output of that. Once #104 is fixed, remove this.
-String _getPubPath(String dartBin) {
-  var buildDir = p.join(p.dirname(dartBin), '../../');
-
-  // Ensure the async/await compiler has been run once for this test suite. The
-  // compiler itself will only re-compile source files that have actually
-  // changed, so this is a no-op if everything is already compiled.
-  if (!_compiledAsync) {
-    var result = Process.runSync(dartBin, [
-      '--package-root=$_packageRoot/',
-      p.join(testDirectory, '..', 'bin', 'async_compile.dart'),
-      buildDir,
-      '--silent'
-    ]);
-    stdout.write(result.stdout);
-    stderr.write(result.stderr);
-    if (result.exitCode != 0) fail("Async/await compiler failed.");
-
-    _compiledAsync = true;
-  }
-
-  return p.join(buildDir, 'pub_async/bin/pub.dart');
-}
-
 /// Starts a Pub process and returns a [ScheduledProcess] that supports
 /// interaction with that process.
 ///
@@ -530,14 +497,15 @@
     dartBin = p.absolute(dartBin);
   }
 
-  // Find the main pub entrypoint.
-  var pubPath = _getPubPath(dartBin);
-  // TODO(rnystrom): Replace the above line with the following when #104 is
-  // fixed.
-  //var pubPath = p.join(testDirectory, '..', 'bin', 'pub.dart');
-
-  var dartArgs = ['--package-root=$_packageRoot/', '--checked', pubPath,
-      '--verbose'];
+  // Always run pub from a snapshot. Since we require the SDK to be built, the
+  // snapshot should be there. Note that this *does* mean that the snapshot has
+  // to be manually updated when changing code before running the tests.
+  // Otherwise, you will test against stale data.
+  //
+  // Using the snapshot makes running the tests much faster, which is why we
+  // make this trade-off.
+  var pubPath = p.join(p.dirname(dartBin), 'snapshots/pub.dart.snapshot');
+  var dartArgs = [pubPath, '--verbose'];
   dartArgs.addAll(args);
 
   if (tokenEndpoint == null) tokenEndpoint = new Future.value();
@@ -825,6 +793,18 @@
   return package;
 }
 
+/// Resolves [target] relative to the path to pub's `test/asset` directory.
+String testAssetPath(String target) {
+  var libPath = libraryPath('test_pub');
+
+  // We are running from the generated directory, but non-dart assets are only
+  // in the canonical directory.
+  // TODO(rnystrom): Remove this when #104 is fixed.
+  libPath = libPath.replaceAll('pub_generated', 'pub');
+
+  return p.join(p.dirname(libPath), 'asset', target);
+}
+
 /// Returns a Map in the format used by the pub.dartlang.org API to represent a
 /// package version.
 ///
diff --git a/sdk/lib/_internal/pub_generated/README.md b/sdk/lib/_internal/pub_generated/README.md
new file mode 100644
index 0000000..37c9434
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/README.md
@@ -0,0 +1,18 @@
+Pub is currently dogfooding the new Dart async/await syntax. Since the Dart VM
+doesn't natively support it yet, we are using the [async-await][] compiler
+package.
+
+[async-await]: https://github.com/dart-lang/async_await
+
+We run that to compile pub-using-await from sdk/lib/_internal/pub down to
+vanilla Dart code which is what you see here. To interoperate more easily with
+the rest of the repositry, we check in that generated code.
+
+When bug #104 is fixed, we can remove this entirely.
+
+The code here was compiled using the async-await compiler at commit:
+
+    6228072d2a3fd87d6d4e8b147853c74486fdb581
+
+(Note: this file is also parsed by a tool to update the above commit, so be
+careful not to reformat it.)
diff --git a/sdk/lib/_internal/pub_generated/asset/dart/serialize.dart b/sdk/lib/_internal/pub_generated/asset/dart/serialize.dart
new file mode 100644
index 0000000..f37ab70
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/asset/dart/serialize.dart
@@ -0,0 +1,184 @@
+// Copyright (c) 2014, 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 pub.asset.serialize;
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:barback/barback.dart';
+
+//# if source_maps >=0.9.0 <0.10.0
+//> import 'package:source_maps/span.dart';
+//# end
+
+//# if source_span
+import 'package:source_span/source_span.dart';
+//# end
+
+import 'serialize/exception.dart';
+import 'utils.dart';
+
+export 'serialize/aggregate_transform.dart';
+export 'serialize/exception.dart';
+export 'serialize/transform.dart';
+export 'serialize/transformer.dart';
+
+/// Converts [id] into a serializable map.
+Map serializeId(AssetId id) => {'package': id.package, 'path': id.path};
+
+/// Converts a serializable map into an [AssetId].
+AssetId deserializeId(Map id) => new AssetId(id['package'], id['path']);
+
+/// Converts [span] into a serializable map.
+///
+/// [span] may be a [SourceSpan] or a [Span].
+Map serializeSpan(span) {
+  // TODO(nweiz): convert FileSpans to FileSpans.
+  // Handily, this code works for both source_map and source_span spans.
+  return {
+    'sourceUrl': span.sourceUrl.toString(),
+    'start': serializeLocation(span.start),
+    'end': serializeLocation(span.end),
+    'text': span.text,
+  };
+}
+
+/// Converts a serializable map into a [SourceSpan].
+SourceSpan deserializeSpan(Map span) {
+  return new SourceSpan(
+      deserializeLocation(span['start']),
+      deserializeLocation(span['end']),
+      span['text']);
+}
+
+/// Converts [location] into a serializable map.
+///
+/// [location] may be a [SourceLocation] or a [SourceLocation].
+Map serializeLocation(location) {
+//# if source_maps >=0.9.0 <0.10.0
+//>  if (location is Location) {
+//>    return {
+//>      'sourceUrl': location.sourceUrl,
+//>      'offset': location.offset,
+//>      'line': location.line,
+//>      'column': location.column
+//>    };
+//>  }
+//# end
+
+//# if source_span
+  // TODO(nweiz): convert FileLocations to FileLocations.
+  if (location is SourceLocation) {
+    return {
+      'sourceUrl': location.sourceUrl.toString(),
+      'offset': location.offset,
+      'line': location.line,
+      'column': location.column
+    };
+  }
+//# end
+
+  throw new ArgumentError("Unknown type ${location.runtimeType} for location.");
+}
+
+/// Converts a serializable map into a [Location].
+SourceLocation deserializeLocation(Map location) {
+  return new SourceLocation(location['offset'],
+      sourceUrl: location['sourceUrl'],
+      line: location['line'],
+      column: location['column']);
+}
+
+/// Converts [stream] into a serializable map.
+///
+/// [serializeEvent] is used to serialize each event from the stream.
+Map serializeStream(Stream stream, serializeEvent(event)) {
+  var receivePort = new ReceivePort();
+  var map = {'replyTo': receivePort.sendPort};
+
+  receivePort.first.then((message) {
+    var sendPort = message['replyTo'];
+    stream.listen((event) {
+      sendPort.send({
+        'type': 'event',
+        'value': serializeEvent(event)
+      });
+    }, onError: (error, stackTrace) {
+      sendPort.send({
+        'type': 'error',
+        'error': serializeException(error, stackTrace)
+      });
+    }, onDone: () => sendPort.send({'type': 'done'}));
+  });
+
+  return map;
+}
+
+/// Converts a serializable map into a [Stream].
+///
+/// [deserializeEvent] is used to deserialize each event from the stream.
+Stream deserializeStream(Map stream, deserializeEvent(event)) {
+  return callbackStream(() {
+    var receivePort = new ReceivePort();
+    stream['replyTo'].send({'replyTo': receivePort.sendPort});
+
+    var controller = new StreamController(sync: true);
+    receivePort.listen((event) {
+      switch (event['type']) {
+        case 'event':
+          controller.add(deserializeEvent(event['value']));
+          break;
+        case 'error':
+          var exception = deserializeException(event['error']);
+          controller.addError(exception, exception.stackTrace);
+          break;
+        case 'done':
+          controller.close();
+          receivePort.close();
+          break;
+      }
+    });
+
+    return controller.stream;
+  });
+}
+
+/// Wraps [message] and sends it across [port], then waits for a response which
+/// should be sent using [respond].
+///
+/// The returned Future will complete to the value or error returned by
+/// [respond].
+Future call(SendPort port, message) {
+  var receivePort = new ReceivePort();
+  port.send({
+    'message': message,
+    'replyTo': receivePort.sendPort
+  });
+
+  return receivePort.first.then((response) {
+    if (response['type'] == 'success') return response['value'];
+    assert(response['type'] == 'error');
+    var exception = deserializeException(response['error']);
+    return new Future.error(exception, exception.stackTrace);
+  });
+}
+
+/// Responds to a message sent by [call].
+///
+/// [wrappedMessage] is the raw message sent by [call]. This unwraps it and
+/// passes the contents of the message to [callback], then sends the return
+/// value of [callback] back to [call]. If [callback] returns a Future or
+/// throws an error, that will also be sent.
+void respond(wrappedMessage, callback(message)) {
+  var replyTo = wrappedMessage['replyTo'];
+  new Future.sync(() => callback(wrappedMessage['message']))
+      .then((result) => replyTo.send({'type': 'success', 'value': result}))
+      .catchError((error, stackTrace) {
+    replyTo.send({
+      'type': 'error',
+      'error': serializeException(error, stackTrace)
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/asset/dart/serialize/aggregate_transform.dart b/sdk/lib/_internal/pub_generated/asset/dart/serialize/aggregate_transform.dart
new file mode 100644
index 0000000..5b7acc8
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/asset/dart/serialize/aggregate_transform.dart
@@ -0,0 +1,173 @@
+// Copyright (c) 2014, 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 pub.asset.serialize.aggregate_transform;
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:barback/barback.dart';
+// TODO(nweiz): don't import from "src" once issue 14966 is fixed.
+import 'package:barback/src/internal_asset.dart';
+
+import '../serialize.dart';
+import 'get_input_transform.dart';
+
+/// Serialize the methods shared between [AggregateTransform] and
+/// [DeclaringAggregateTransform].
+///
+/// [additionalFields] contains additional serialized fields to add to the
+/// serialized transform. [methodHandlers] is a set of additional methods. Each
+/// value should take a JSON message and return the response (which may be a
+/// Future).
+Map _serializeBaseAggregateTransform(transform, Map additionalFields,
+    Map<String, Function> methodHandlers) {
+  var receivePort = new ReceivePort();
+  receivePort.listen((wrappedMessage) {
+    respond(wrappedMessage, (message) {
+      var handler = methodHandlers[message['type']];
+      if (handler != null) return handler(message);
+
+      if (message['type'] == 'consumePrimary') {
+        transform.consumePrimary(deserializeId(message['assetId']));
+        return null;
+      }
+
+      assert(message['type'] == 'log');
+      var method = {
+        'Info': transform.logger.info,
+        'Fine': transform.logger.fine,
+        'Warning': transform.logger.warning,
+        'Error': transform.logger.error
+      }[message['level']];
+      assert(method != null);
+
+      var assetId = message['assetId'] == null ? null :
+        deserializeId(message['assetId']);
+      var span = message['span'] == null ? null :
+        deserializeSpan(message['span']);
+      method(message['message'], asset: assetId, span: span);
+    });
+  });
+
+  return {
+    'port': receivePort.sendPort,
+    'key': transform.key,
+    'package': transform.package
+  }..addAll(additionalFields);
+}
+
+/// Converts [transform] into a serializable map.
+Map serializeAggregateTransform(AggregateTransform transform) {
+  return _serializeBaseAggregateTransform(transform, {
+    'primaryInputs': serializeStream(transform.primaryInputs, serializeAsset)
+  }, {
+    'getInput': (message) => transform.getInput(deserializeId(message['id']))
+        .then((asset) => serializeAsset(asset)),
+    'addOutput': (message) =>
+        transform.addOutput(deserializeAsset(message['output']))
+  });
+}
+
+/// Converts [transform] into a serializable map.
+Map serializeDeclaringAggregateTransform(
+    DeclaringAggregateTransform transform) {
+  return _serializeBaseAggregateTransform(transform, {
+    'primaryIds': serializeStream(transform.primaryIds, serializeId)
+  }, {
+    'declareOutput': (message) =>
+        transform.declareOutput(deserializeId(message['output']))
+  });
+}
+
+/// The base class for wrappers for [AggregateTransform]s that are in the host
+/// isolate.
+class _ForeignBaseAggregateTransform {
+  /// The port with which we communicate with the host isolate.
+  ///
+  /// This port and all messages sent across it are specific to this transform.
+  final SendPort _port;
+
+  final String key;
+
+  final String package;
+
+  TransformLogger get logger => _logger;
+  TransformLogger _logger;
+
+  _ForeignBaseAggregateTransform(Map transform)
+      : _port = transform['port'],
+        key = transform['key'],
+        package = transform['package'] {
+    _logger = new TransformLogger((assetId, level, message, span) {
+      call(_port, {
+        'type': 'log',
+        'level': level.name,
+        'message': message,
+        'assetId': assetId == null ? null : serializeId(assetId),
+        'span': span == null ? null : serializeSpan(span)
+      });
+    });
+  }
+
+  void consumePrimary(AssetId id) {
+    call(_port, {'type': 'consumePrimary', 'assetId': serializeId(id)});
+  }
+}
+
+// We can get away with only removing the class declarations in incompatible
+// barback versions because merely referencing undefined types in type
+// annotations isn't a static error. Only implementing an undefined interface is
+// a static error.
+//# if barback >=0.14.1
+
+/// A wrapper for an [AggregateTransform] that's in the host isolate.
+///
+/// This retrieves inputs from and sends outputs and logs to the host isolate.
+class ForeignAggregateTransform extends _ForeignBaseAggregateTransform
+    with GetInputTransform implements AggregateTransform {
+  final Stream<Asset> primaryInputs;
+
+  /// Creates a transform from a serialized map sent from the host isolate.
+  ForeignAggregateTransform(Map transform)
+      : primaryInputs = deserializeStream(
+            transform['primaryInputs'], deserializeAsset),
+        super(transform);
+
+  Future<Asset> getInput(AssetId id) {
+    return call(_port, {
+      'type': 'getInput',
+      'id': serializeId(id)
+    }).then(deserializeAsset);
+  }
+
+  void addOutput(Asset output) {
+    call(_port, {
+      'type': 'addOutput',
+      'output': serializeAsset(output)
+    });
+  }
+}
+
+/// A wrapper for a [DeclaringAggregateTransform] that's in the host isolate.
+class ForeignDeclaringAggregateTransform
+    extends _ForeignBaseAggregateTransform
+    implements DeclaringAggregateTransform {
+  final Stream<AssetId> primaryIds;
+
+  /// Creates a transform from a serializable map sent from the host isolate.
+  ForeignDeclaringAggregateTransform(Map transform)
+      : primaryIds = deserializeStream(
+            transform['primaryIds'], deserializeId),
+        super(transform);
+
+  void declareOutput(AssetId id) {
+    call(_port, {
+      'type': 'declareOutput',
+      'output': serializeId(id)
+    });
+  }
+}
+
+//# end
diff --git a/sdk/lib/_internal/pub_generated/asset/dart/serialize/exception.dart b/sdk/lib/_internal/pub_generated/asset/dart/serialize/exception.dart
new file mode 100644
index 0000000..26040a9
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/asset/dart/serialize/exception.dart
@@ -0,0 +1,102 @@
+// Copyright (c) 2014, 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 pub.asset.serialize.exception;
+
+import 'package:barback/barback.dart';
+import 'package:stack_trace/stack_trace.dart';
+
+import '../utils.dart';
+
+/// An exception that was originally raised in another isolate.
+///
+/// Exception objects can't cross isolate boundaries in general, so this class
+/// wraps as much information as can be consistently serialized.
+class CrossIsolateException implements Exception {
+  /// The name of the type of exception thrown.
+  ///
+  /// This is the return value of [error.runtimeType.toString()]. Keep in mind
+  /// that objects in different libraries may have the same type name.
+  final String type;
+
+  /// The exception's message, or its [toString] if it didn't expose a `message`
+  /// property.
+  final String message;
+
+  /// The exception's stack chain, or `null` if no stack chain was available.
+  final Chain stackTrace;
+
+  /// Loads a [CrossIsolateException] from a serialized representation.
+  ///
+  /// [error] should be the result of [CrossIsolateException.serialize].
+  CrossIsolateException.deserialize(Map error)
+      : type = error['type'],
+        message = error['message'],
+        stackTrace = error['stack'] == null ? null :
+            new Chain.parse(error['stack']);
+
+  /// Serializes [error] to an object that can safely be passed across isolate
+  /// boundaries.
+  static Map serialize(error, [StackTrace stack]) {
+    if (stack == null && error is Error) stack = error.stackTrace;
+    return {
+      'type': error.runtimeType.toString(),
+      'message': getErrorMessage(error),
+      'stack': stack == null ? null : new Chain.forTrace(stack).toString()
+    };
+  }
+
+  String toString() => "$message\n$stackTrace";
+}
+
+/// An [AssetNotFoundException] that was originally raised in another isolate. 
+class _CrossIsolateAssetNotFoundException extends CrossIsolateException
+    implements AssetNotFoundException {
+  final AssetId id;
+
+  String get message => "Could not find asset $id.";
+
+  /// Loads a [_CrossIsolateAssetNotFoundException] from a serialized
+  /// representation.
+  ///
+  /// [error] should be the result of
+  /// [_CrossIsolateAssetNotFoundException.serialize].
+  _CrossIsolateAssetNotFoundException.deserialize(Map error)
+      : id = new AssetId(error['package'], error['path']),
+        super.deserialize(error);
+
+  /// Serializes [error] to an object that can safely be passed across isolate
+  /// boundaries.
+  static Map serialize(AssetNotFoundException error, [StackTrace stack]) {
+    var map = CrossIsolateException.serialize(error);
+    map['package'] = error.id.package;
+    map['path'] = error.id.path;
+    return map;
+  }
+}
+
+/// Serializes [error] to an object that can safely be passed across isolate
+/// boundaries.
+///
+/// This handles [AssetNotFoundException]s specially, ensuring that their
+/// metadata is preserved.
+Map serializeException(error, [StackTrace stack]) {
+  if (error is AssetNotFoundException) {
+    return _CrossIsolateAssetNotFoundException.serialize(error, stack);
+  } else {
+    return CrossIsolateException.serialize(error, stack);
+  }
+}
+
+/// Loads an exception from a serialized representation.
+///
+/// This handles [AssetNotFoundException]s specially, ensuring that their
+/// metadata is preserved.
+CrossIsolateException deserializeException(Map error) {
+  if (error['type'] == 'AssetNotFoundException') {
+    return new _CrossIsolateAssetNotFoundException.deserialize(error);
+  } else {
+    return new CrossIsolateException.deserialize(error);
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/asset/dart/serialize/get_input_transform.dart b/sdk/lib/_internal/pub_generated/asset/dart/serialize/get_input_transform.dart
new file mode 100644
index 0000000..9ab6540
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/asset/dart/serialize/get_input_transform.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2014, 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 pub.asset.serialize.get_input_transform;
+
+import 'dart:async';
+import 'dart:convert';
+
+import 'package:barback/barback.dart';
+
+import '../utils.dart';
+
+/// A mixin for transforms that support [getInput] and the associated suite of
+/// methods.
+abstract class GetInputTransform {
+  Future<Asset> getInput(AssetId id);
+
+  Future<String> readInputAsString(AssetId id, {Encoding encoding}) {
+    if (encoding == null) encoding = UTF8;
+    return getInput(id).then((input) =>
+        input.readAsString(encoding: encoding));
+  }
+
+  Stream<List<int>> readInput(AssetId id) =>
+      futureStream(getInput(id).then((input) => input.read()));
+
+  Future<bool> hasInput(AssetId id) {
+    return getInput(id).then((_) => true).catchError((error) {
+      if (error is AssetNotFoundException && error.id == id) return false;
+      throw error;
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/asset/dart/serialize/transform.dart b/sdk/lib/_internal/pub_generated/asset/dart/serialize/transform.dart
new file mode 100644
index 0000000..911f6f6
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/asset/dart/serialize/transform.dart
@@ -0,0 +1,149 @@
+// Copyright (c) 2014, 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 pub.asset.serialize.transform;
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:barback/barback.dart';
+// TODO(nweiz): don't import from "src" once issue 14966 is fixed.
+import 'package:barback/src/internal_asset.dart';
+
+import '../serialize.dart';
+import 'get_input_transform.dart';
+
+/// Serialize the methods shared between [Transform] and [DeclaringTransform].
+///
+/// [additionalFields] contains additional serialized fields to add to the
+/// serialized transform. [methodHandlers] is a set of additional methods. Each
+/// value should take a JSON message and return the response (which may be a
+/// Future).
+Map _serializeBaseTransform(transform, Map additionalFields,
+    Map<String, Function> methodHandlers) {
+  var receivePort = new ReceivePort();
+  receivePort.listen((wrappedMessage) {
+    respond(wrappedMessage, (message) {
+      var handler = methodHandlers[message['type']];
+      if (handler != null) return handler(message);
+
+      if (message['type'] == 'consumePrimary') {
+        transform.consumePrimary();
+        return null;
+      }
+
+      assert(message['type'] == 'log');
+      var method = {
+        'Info': transform.logger.info,
+        'Fine': transform.logger.fine,
+        'Warning': transform.logger.warning,
+        'Error': transform.logger.error
+      }[message['level']];
+      assert(method != null);
+
+      var assetId = message['assetId'] == null ? null :
+        deserializeId(message['assetId']);
+      var span = message['span'] == null ? null :
+        deserializeSpan(message['span']);
+      method(message['message'], asset: assetId, span: span);
+    });
+  });
+
+  return {'port': receivePort.sendPort}..addAll(additionalFields);
+}
+
+/// Converts [transform] into a serializable map.
+Map serializeTransform(Transform transform) {
+  return _serializeBaseTransform(transform, {
+    'primaryInput': serializeAsset(transform.primaryInput)
+  }, {
+    'getInput': (message) => transform.getInput(deserializeId(message['id']))
+        .then((asset) => serializeAsset(asset)),
+    'addOutput': (message) =>
+        transform.addOutput(deserializeAsset(message['output']))
+  });
+}
+
+/// Converts [transform] into a serializable map.
+Map serializeDeclaringTransform(DeclaringTransform transform) {
+  return _serializeBaseTransform(transform, {
+    'primaryId': serializeId(transform.primaryId)
+  }, {
+    'declareOutput': (message) =>
+        transform.declareOutput(deserializeId(message['output']))
+  });
+}
+
+/// The base class for wrappers for [Transform]s that are in the host isolate.
+class _ForeignBaseTransform {
+  /// The port with which we communicate with the host isolate.
+  ///
+  /// This port and all messages sent across it are specific to this transform.
+  final SendPort _port;
+
+  TransformLogger get logger => _logger;
+  TransformLogger _logger;
+
+  _ForeignBaseTransform(Map transform)
+      : _port = transform['port'] {
+    _logger = new TransformLogger((assetId, level, message, span) {
+      call(_port, {
+        'type': 'log',
+        'level': level.name,
+        'message': message,
+        'assetId': assetId == null ? null : serializeId(assetId),
+        'span': span == null ? null : serializeSpan(span)
+      });
+    });
+  }
+
+  void consumePrimary() {
+    call(_port, {'type': 'consumePrimary'});
+  }
+}
+
+/// A wrapper for a [Transform] that's in the host isolate.
+///
+/// This retrieves inputs from and sends outputs and logs to the host isolate.
+class ForeignTransform extends _ForeignBaseTransform
+    with GetInputTransform implements Transform {
+  final Asset primaryInput;
+
+  /// Creates a transform from a serialized map sent from the host isolate.
+  ForeignTransform(Map transform)
+      : primaryInput = deserializeAsset(transform['primaryInput']),
+        super(transform);
+
+  Future<Asset> getInput(AssetId id) {
+    return call(_port, {
+      'type': 'getInput',
+      'id': serializeId(id)
+    }).then(deserializeAsset);
+  }
+
+  void addOutput(Asset output) {
+    call(_port, {
+      'type': 'addOutput',
+      'output': serializeAsset(output)
+    });
+  }
+}
+
+/// A wrapper for a [DeclaringTransform] that's in the host isolate.
+class ForeignDeclaringTransform extends _ForeignBaseTransform
+    implements DeclaringTransform {
+  final AssetId primaryId;
+
+  /// Creates a transform from a serializable map sent from the host isolate.
+  ForeignDeclaringTransform(Map transform)
+      : primaryId = deserializeId(transform['primaryId']),
+        super(transform);
+
+  void declareOutput(AssetId id) {
+    call(_port, {
+      'type': 'declareOutput',
+      'output': serializeId(id)
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/asset/dart/serialize/transformer.dart b/sdk/lib/_internal/pub_generated/asset/dart/serialize/transformer.dart
new file mode 100644
index 0000000..16d02de
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/asset/dart/serialize/transformer.dart
@@ -0,0 +1,126 @@
+// Copyright (c) 2014, 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 pub.asset.serialize.transformer;
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:barback/barback.dart';
+
+import '../serialize.dart';
+import 'transform.dart';
+
+/// Converts [transformer] into a serializable map.
+Map _serializeTransformer(Transformer transformer) {
+  var port = new ReceivePort();
+  port.listen((wrappedMessage) {
+    respond(wrappedMessage, (message) {
+      if (message['type'] == 'isPrimary') {
+        return transformer.isPrimary(deserializeId(message['id']));
+      } else if (message['type'] == 'declareOutputs') {
+        return new Future.sync(() {
+          return (transformer as DeclaringTransformer).declareOutputs(
+              new ForeignDeclaringTransform(message['transform']));
+        }).then((_) => null);
+      } else {
+        assert(message['type'] == 'apply');
+
+        // Make sure we return null so that if the transformer's [apply] returns
+        // a non-serializable value it doesn't cause problems.
+        return new Future.sync(() {
+          return transformer.apply(new ForeignTransform(message['transform']));
+        }).then((_) => null);
+      }
+    });
+  });
+
+  var type;
+  if (transformer is LazyTransformer) {
+    type = 'LazyTransformer';
+  } else if (transformer is DeclaringTransformer) {
+    type = 'DeclaringTransformer';
+  } else {
+    type = 'Transformer';
+  }
+
+  return {
+    'type': type,
+    'toString': transformer.toString(),
+    'port': port.sendPort
+  };
+}
+
+/// Converts [transformer] into a serializable map.
+Map _serializeAggregateTransformer(AggregateTransformer transformer) {
+  var port = new ReceivePort();
+  port.listen((wrappedMessage) {
+    respond(wrappedMessage, (message) {
+      if (message['type'] == 'classifyPrimary') {
+        return transformer.classifyPrimary(deserializeId(message['id']));
+      } else if (message['type'] == 'declareOutputs') {
+        return new Future.sync(() {
+          return (transformer as DeclaringAggregateTransformer).declareOutputs(
+              new ForeignDeclaringAggregateTransform(message['transform']));
+        }).then((_) => null);
+      } else {
+        assert(message['type'] == 'apply');
+
+        // Make sure we return null so that if the transformer's [apply] returns
+        // a non-serializable value it doesn't cause problems.
+        return new Future.sync(() {
+          return transformer.apply(
+              new ForeignAggregateTransform(message['transform']));
+        }).then((_) => null);
+      }
+    });
+  });
+
+  var type;
+  if (transformer is LazyAggregateTransformer) {
+    type = 'LazyAggregateTransformer';
+  } else if (transformer is DeclaringAggregateTransformer) {
+    type = 'DeclaringAggregateTransformer';
+  } else {
+    type = 'AggregateTransformer';
+  }
+
+  return {
+    'type': type,
+    'toString': transformer.toString(),
+    'port': port.sendPort
+  };
+}
+
+// Converts [group] into a serializable map.
+Map _serializeTransformerGroup(TransformerGroup group) {
+  if (group.phases == null) {
+    throw "TransformerGroup $group phases cannot be null.";
+  }
+
+  return {
+    'type': 'TransformerGroup',
+    'toString': group.toString(),
+    'phases': group.phases.map((phase) {
+      return phase.map(serializeTransformerLike).toList();
+    }).toList()
+  };
+}
+
+/// Converts [transformerLike] into a serializable map.
+///
+/// [transformerLike] can be a [Transformer], an [AggregateTransformer], or a
+/// [TransformerGroup].
+Map serializeTransformerLike(transformerLike) {
+  if (transformerLike is Transformer) {
+    return _serializeTransformer(transformerLike);
+  } else if (transformerLike is TransformerGroup) {
+    return _serializeTransformerGroup(transformerLike);
+  } else {
+    // This has to be last, since "transformerLike is AggregateTransformer" will
+    // throw on older versions of barback.
+    assert(transformerLike is AggregateTransformer);
+    return _serializeAggregateTransformer(transformerLike);
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/asset/dart/transformer_isolate.dart b/sdk/lib/_internal/pub_generated/asset/dart/transformer_isolate.dart
new file mode 100644
index 0000000..a3d6a71
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/asset/dart/transformer_isolate.dart
@@ -0,0 +1,103 @@
+// Copyright (c) 2014, 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 pub.asset.transformer_isolate;
+
+import 'dart:convert';
+import 'dart:isolate';
+import 'dart:mirrors';
+
+import 'package:barback/barback.dart';
+
+import 'serialize.dart';
+
+/// Sets up the initial communication with the host isolate.
+void loadTransformers(SendPort replyTo) {
+  var port = new ReceivePort();
+  replyTo.send(port.sendPort);
+  port.listen((wrappedMessage) {
+    // TODO(nweiz): When issue 19228 is fixed, spin up a separate isolate for
+    // libraries loaded beyond the first so they can run in parallel.
+    respond(wrappedMessage, (message) {
+      var library = Uri.parse(message['library']);
+      var configuration = JSON.decode(message['configuration']);
+      var mode = new BarbackMode(message['mode']);
+      return _initialize(library, configuration, mode).
+          map(serializeTransformerLike).toList();
+    });
+  });
+}
+
+/// Loads all the transformers and groups defined in [uri].
+///
+/// Loads the library, finds any [Transformer] or [TransformerGroup] subclasses
+/// in it, instantiates them with [configuration] and [mode], and returns them.
+List _initialize(Uri uri, Map configuration, BarbackMode mode) {
+  var mirrors = currentMirrorSystem();
+  var transformerClass = reflectClass(Transformer);
+  var aggregateClass = _aggregateTransformerClass;
+  var groupClass = reflectClass(TransformerGroup);
+
+  var seen = new Set();
+  var transformers = [];
+
+  loadFromLibrary(library) {
+    if (seen.contains(library)) return;
+    seen.add(library);
+
+    // Load transformers from libraries exported by [library].
+    for (var dependency in library.libraryDependencies) {
+      if (!dependency.isExport) continue;
+      loadFromLibrary(dependency.targetLibrary);
+    }
+
+    // TODO(nweiz): if no valid transformers are found, throw an error message
+    // describing candidates and why they were rejected.
+    transformers.addAll(library.declarations.values.map((declaration) {
+      if (declaration is! ClassMirror) return null;
+      var classMirror = declaration;
+      if (classMirror.isPrivate) return null;
+      if (classMirror.isAbstract) return null;
+      if (!classMirror.isSubtypeOf(transformerClass) &&
+          !classMirror.isSubtypeOf(groupClass) &&
+          (aggregateClass == null ||
+              !classMirror.isSubtypeOf(aggregateClass))) {
+        return null;
+      }
+
+      var constructor = _getConstructor(classMirror, 'asPlugin');
+      if (constructor == null) return null;
+      if (constructor.parameters.isEmpty) {
+        if (configuration.isNotEmpty) return null;
+        return classMirror.newInstance(const Symbol('asPlugin'), []).reflectee;
+      }
+      if (constructor.parameters.length != 1) return null;
+
+      return classMirror.newInstance(const Symbol('asPlugin'),
+          [new BarbackSettings(configuration, mode)]).reflectee;
+    }).where((classMirror) => classMirror != null));
+  }
+
+  loadFromLibrary(mirrors.libraries[uri]);
+  return transformers;
+}
+
+// TODO(nweiz): clean this up when issue 13248 is fixed.
+MethodMirror _getConstructor(ClassMirror classMirror, String constructor) {
+  var name = new Symbol("${MirrorSystem.getName(classMirror.simpleName)}"
+      ".$constructor");
+  var candidate = classMirror.declarations[name];
+  if (candidate is MethodMirror && candidate.isConstructor) return candidate;
+  return null;
+}
+
+// Older barbacks don't support [AggregateTransformer], and calling
+// [reflectClass] on an undefined class will throw an error, so we just define a
+// null getter for them.
+//# if barback >=0.14.1
+ClassMirror get _aggregateTransformerClass =>
+    reflectClass(AggregateTransformer);
+//# else
+//>   ClassMirror get _aggregateTransformerClass => null;
+//# end
diff --git a/sdk/lib/_internal/pub_generated/asset/dart/utils.dart b/sdk/lib/_internal/pub_generated/asset/dart/utils.dart
new file mode 100644
index 0000000..72150ed
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/asset/dart/utils.dart
@@ -0,0 +1,86 @@
+// Copyright (c) 2014, 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.
+
+/// Functions go in this file as opposed to lib/src/utils.dart if they need to
+/// be accessible to the transformer-loading isolate.
+library pub.asset.utils;
+
+import 'dart:async';
+
+/// A regular expression to match the exception prefix that some exceptions'
+/// [Object.toString] values contain.
+final _exceptionPrefix = new RegExp(r'^([A-Z][a-zA-Z]*)?(Exception|Error): ');
+
+/// Get a string description of an exception.
+///
+/// Many exceptions include the exception class name at the beginning of their
+/// [toString], so we remove that if it exists.
+String getErrorMessage(error) =>
+  error.toString().replaceFirst(_exceptionPrefix, '');
+
+/// Returns a buffered stream that will emit the same values as the stream
+/// returned by [future] once [future] completes.
+///
+/// If [future] completes to an error, the return value will emit that error and
+/// then close.
+///
+/// If [broadcast] is true, a broadcast stream is returned. This assumes that
+/// the stream returned by [future] will be a broadcast stream as well.
+/// [broadcast] defaults to false.
+Stream futureStream(Future<Stream> future, {bool broadcast: false}) {
+  var subscription;
+  var controller;
+
+  future = future.catchError((e, stackTrace) {
+    // Since [controller] is synchronous, it's likely that emitting an error
+    // will cause it to be cancelled before we call close.
+    if (controller != null) controller.addError(e, stackTrace);
+    if (controller != null) controller.close();
+    controller = null;
+  });
+
+  onListen() {
+    future.then((stream) {
+      if (controller == null) return;
+      subscription = stream.listen(
+          controller.add,
+          onError: controller.addError,
+          onDone: controller.close);
+    });
+  }
+
+  onCancel() {
+    if (subscription != null) subscription.cancel();
+    subscription = null;
+    controller = null;
+  }
+
+  if (broadcast) {
+    controller = new StreamController.broadcast(
+        sync: true, onListen: onListen, onCancel: onCancel);
+  } else {
+    controller = new StreamController(
+        sync: true, onListen: onListen, onCancel: onCancel);
+  }
+  return controller.stream;
+}
+
+/// Returns a [Stream] that will emit the same values as the stream returned by
+/// [callback].
+///
+/// [callback] will only be called when the returned [Stream] gets a subscriber.
+Stream callbackStream(Stream callback()) {
+  var subscription;
+  var controller;
+  controller = new StreamController(onListen: () {
+    subscription = callback().listen(controller.add,
+        onError: controller.addError,
+        onDone: controller.close);
+  },
+      onCancel: () => subscription.cancel(),
+      onPause: () => subscription.pause(),
+      onResume: () => subscription.resume(),
+      sync: true);
+  return controller.stream;
+}
diff --git a/sdk/lib/_internal/pub_generated/bin/async_compile.dart b/sdk/lib/_internal/pub_generated/bin/async_compile.dart
new file mode 100644
index 0000000..b291ab3
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/bin/async_compile.dart
@@ -0,0 +1,135 @@
+import 'dart:io';
+import 'package:args/args.dart';
+import 'package:analyzer/src/services/formatter_impl.dart';
+import 'package:async_await/async_await.dart' as async_await;
+import 'package:path/path.dart' as p;
+final sourceDir = p.dirname(p.dirname(p.fromUri(Platform.script)));
+final sourceUrl = p.toUri(sourceDir).toString();
+final generatedDir = p.join(p.dirname(sourceDir), 'pub_generated');
+bool hadFailure = false;
+bool verbose = false;
+final _compilerPattern = new RegExp(r"import '(\.\./)+compiler");
+final _commitPattern = new RegExp(r"[a-f0-9]{40}");
+void main(List<String> arguments) {
+  var parser = new ArgParser(allowTrailingOptions: true);
+  parser.addFlag("verbose", callback: (value) => verbose = value);
+  var force = false;
+  parser.addFlag("force", callback: (value) => force = value);
+  var buildDir;
+  try {
+    var rest = parser.parse(arguments).rest;
+    if (rest.isEmpty) {
+      throw new FormatException('Missing build directory.');
+    } else if (rest.length > 1) {
+      throw new FormatException(
+          'Unexpected arguments: ${rest.skip(1).join(" ")}.');
+    }
+    buildDir = rest.first;
+  } on FormatException catch (ex) {
+    stderr.writeln(ex);
+    stderr.writeln();
+    stderr.writeln(
+        "Usage: dart async_compile.dart [--verbose] [--force] <build dir>");
+    exit(64);
+  }
+  var result = Process.runSync(
+      "git",
+      ["rev-parse", "HEAD"],
+      workingDirectory: p.join(sourceDir, "../../../../third_party/pkg/async_await"));
+  if (result.exitCode != 0) {
+    stderr.writeln("Could not get Git revision of async_await compiler.");
+    exit(1);
+  }
+  var currentCommit = result.stdout.trim();
+  var readmePath = p.join(generatedDir, "README.md");
+  var lastCommit;
+  var readme = new File(readmePath).readAsStringSync();
+  var match = _commitPattern.firstMatch(readme);
+  if (match == null) {
+    stderr.writeln("Could not find compiler commit hash in README.md.");
+    exit(1);
+  }
+  lastCommit = match[0];
+  var numFiles = 0;
+  var numCompiled = 0;
+  for (var entry in new Directory(sourceDir).listSync(recursive: true)) {
+    if (p.extension(entry.path) != ".dart") continue;
+    numFiles++;
+    var relative = p.relative(entry.path, from: sourceDir);
+    var sourceFile = entry as File;
+    var destPath = p.join(generatedDir, relative);
+    var destFile = new File(destPath);
+    if (force ||
+        currentCommit != lastCommit ||
+        !destFile.existsSync() ||
+        entry.lastModifiedSync().isAfter(destFile.lastModifiedSync())) {
+      _compile(sourceFile.path, sourceFile.readAsStringSync(), destPath);
+      numCompiled++;
+      if (verbose) print("Compiled $relative");
+    }
+  }
+  if (currentCommit != lastCommit) {
+    readme = readme.replaceAll(_commitPattern, currentCommit);
+    _writeFile(readmePath, readme);
+  }
+  if (verbose) print("Compiled $numCompiled out of $numFiles files");
+  if (numCompiled > 0) _generateSnapshot(buildDir);
+  if (hadFailure) exit(1);
+}
+void _compile(String sourcePath, String source, String destPath) {
+  var destDir = new Directory(p.dirname(destPath));
+  destDir.createSync(recursive: true);
+  source = _translateAsyncAwait(sourcePath, source);
+  if (source != null) source = _fixDart2jsImports(sourcePath, source, destPath);
+  if (source == null) {
+    _deleteFile(destPath);
+  } else {
+    _writeFile(destPath, source);
+  }
+}
+String _translateAsyncAwait(String sourcePath, String source) {
+  if (p.isWithin(p.join(sourceDir, "asset"), sourcePath)) {
+    return source;
+  }
+  try {
+    source = async_await.compile(source);
+    var result = new CodeFormatter().format(CodeKind.COMPILATION_UNIT, source);
+    return result.source;
+  } catch (ex) {
+    stderr.writeln("Async compile failed on $sourcePath:\n$ex");
+    hadFailure = true;
+    return null;
+  }
+}
+String _fixDart2jsImports(String sourcePath, String source, String destPath) {
+  var compilerDir = p.url.join(sourceUrl, "../compiler");
+  var relative =
+      p.url.relative(compilerDir, from: p.url.dirname(p.toUri(destPath).toString()));
+  return source.replaceAll(_compilerPattern, "import '$relative");
+}
+void _generateSnapshot(String buildDir) {
+  buildDir = p.normalize(buildDir);
+  var entrypoint = p.join(generatedDir, 'bin/pub.dart');
+  var packageRoot = p.join(buildDir, 'packages');
+  var snapshot = p.join(buildDir, 'dart-sdk/bin/snapshots/pub.dart.snapshot');
+  var result = Process.runSync(
+      Platform.executable,
+      ["--package-root=$packageRoot", "--snapshot=$snapshot", entrypoint]);
+  if (result.exitCode != 0) {
+    stderr.writeln("Failed to generate snapshot:");
+    if (result.stderr.trim().isNotEmpty) stderr.writeln(result.stderr);
+    if (result.stdout.trim().isNotEmpty) stderr.writeln(result.stdout);
+    exit(result.exitCode);
+  }
+  if (verbose) print("Created pub snapshot");
+}
+void _deleteFile(String path) {
+  try {
+    new File(path).deleteSync();
+  } on IOException catch (ex) {}
+}
+void _writeFile(String path, String contents) {
+  try {
+    new File(path).writeAsStringSync(contents);
+  } on IOException catch (ex) {}
+}
diff --git a/sdk/lib/_internal/pub_generated/bin/pub.dart b/sdk/lib/_internal/pub_generated/bin/pub.dart
new file mode 100644
index 0000000..ae5c7a0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/bin/pub.dart
@@ -0,0 +1,254 @@
+import 'dart:async';
+import 'dart:io';
+import 'package:args/args.dart';
+import 'package:http/http.dart' as http;
+import 'package:path/path.dart' as path;
+import 'package:stack_trace/stack_trace.dart';
+import '../lib/src/command.dart';
+import '../lib/src/exceptions.dart';
+import '../lib/src/exit_codes.dart' as exit_codes;
+import '../lib/src/http.dart';
+import '../lib/src/io.dart';
+import '../lib/src/log.dart' as log;
+import '../lib/src/sdk.dart' as sdk;
+import '../lib/src/solver/version_solver.dart';
+import '../lib/src/utils.dart';
+void main(List<String> arguments) {
+  ArgResults options;
+  try {
+    options = PubCommand.pubArgParser.parse(arguments);
+  } on FormatException catch (e) {
+    log.error(e.message);
+    log.error('Run "pub help" to see available options.');
+    flushThenExit(exit_codes.USAGE);
+    return;
+  }
+  log.withPrejudice = options['with-prejudice'];
+  if (options['version']) {
+    log.message('Pub ${sdk.version}');
+    return;
+  }
+  if (options['help']) {
+    PubCommand.printGlobalUsage();
+    return;
+  }
+  if (options['trace']) {
+    log.recordTranscript();
+  }
+  switch (options['verbosity']) {
+    case 'normal':
+      log.verbosity = log.Verbosity.NORMAL;
+      break;
+    case 'io':
+      log.verbosity = log.Verbosity.IO;
+      break;
+    case 'solver':
+      log.verbosity = log.Verbosity.SOLVER;
+      break;
+    case 'all':
+      log.verbosity = log.Verbosity.ALL;
+      break;
+    default:
+      if (options['verbose']) {
+        log.verbosity = log.Verbosity.ALL;
+      }
+      break;
+  }
+  log.fine('Pub ${sdk.version}');
+  var cacheDir;
+  if (Platform.environment.containsKey('PUB_CACHE')) {
+    cacheDir = Platform.environment['PUB_CACHE'];
+  } else if (Platform.operatingSystem == 'windows') {
+    var appData = Platform.environment['APPDATA'];
+    cacheDir = path.join(appData, 'Pub', 'Cache');
+  } else {
+    cacheDir = '${Platform.environment['HOME']}/.pub-cache';
+  }
+  validatePlatform().then((_) => runPub(cacheDir, options, arguments));
+}
+void runPub(String cacheDir, ArgResults options, List<String> arguments) {
+  var captureStackChains =
+      options['trace'] ||
+      options['verbose'] ||
+      options['verbosity'] == 'all';
+  captureErrors(
+      () => invokeCommand(cacheDir, options),
+      captureStackChains: captureStackChains).catchError((error, Chain chain) {
+    log.exception(error, chain);
+    if (options['trace']) {
+      log.dumpTranscript();
+    } else if (!isUserFacingException(error)) {
+      log.error("""
+This is an unexpected error. Please run
+
+    pub --trace ${arguments.map((arg) => "'$arg'").join(' ')}
+
+and include the results in a bug report on http://dartbug.com/new.
+""");
+    }
+    return flushThenExit(chooseExitCode(error));
+  }).then((_) {
+    return flushThenExit(exit_codes.SUCCESS);
+  });
+}
+int chooseExitCode(exception) {
+  while (exception is WrappedException) exception = exception.innerError;
+  if (exception is HttpException ||
+      exception is http.ClientException ||
+      exception is SocketException ||
+      exception is PubHttpException ||
+      exception is DependencyNotFoundException) {
+    return exit_codes.UNAVAILABLE;
+  } else if (exception is FormatException || exception is DataException) {
+    return exit_codes.DATA;
+  } else if (exception is UsageException) {
+    return exit_codes.USAGE;
+  } else {
+    return 1;
+  }
+}
+Future invokeCommand(String cacheDir, ArgResults mainOptions) {
+  final completer0 = new Completer();
+  scheduleMicrotask(() {
+    try {
+      var commands = PubCommand.mainCommands;
+      var command;
+      var commandString = "pub";
+      var options = mainOptions;
+      break0(x2) {
+        join0() {
+          join1(x0) {
+            completer0.complete(null);
+          }
+          finally0(cont0, v0) {
+            command.cache.deleteTempDir();
+            cont0(v0);
+          }
+          catch0(e0) {
+            finally0(join1, null);
+          }
+          try {
+            finally0((v1) {
+              completer0.complete(v1);
+            }, command.run(cacheDir, mainOptions, options));
+          } catch (e1) {
+            catch0(e1);
+          }
+        }
+        if (!command.takesArguments && options.rest.isNotEmpty) {
+          command.usageError(
+              'Command "${options.name}" does not take any arguments.');
+          join0();
+        } else {
+          join0();
+        }
+      }
+      continue0(x3) {
+        if (commands.isNotEmpty) {
+          Future.wait([]).then((x1) {
+            join2() {
+              options = options.command;
+              command = commands[options.name];
+              commands = command.subcommands;
+              commandString += " ${options.name}";
+              join3() {
+                continue0(null);
+              }
+              if (options['help']) {
+                command.printUsage();
+                completer0.complete(new Future.value());
+              } else {
+                join3();
+              }
+            }
+            if (options.command == null) {
+              join4() {
+                join2();
+              }
+              if (options.rest.isEmpty) {
+                join5() {
+                  command.usageError(
+                      'Missing subcommand for "${commandString}".');
+                  join4();
+                }
+                if (command == null) {
+                  PubCommand.printGlobalUsage();
+                  completer0.complete(new Future.value());
+                } else {
+                  join5();
+                }
+              } else {
+                join6() {
+                  command.usageError(
+                      'Could not find a subcommand named '
+                          '"${options.rest[0]}" for "${commandString}".');
+                  join4();
+                }
+                if (command == null) {
+                  PubCommand.usageErrorWithCommands(
+                      commands,
+                      'Could not find a command named "${options.rest[0]}".');
+                  join6();
+                } else {
+                  join6();
+                }
+              }
+            } else {
+              join2();
+            }
+          });
+        } else {
+          break0(null);
+        }
+      }
+      continue0(null);
+    } catch (e2) {
+      completer0.completeError(e2);
+    }
+  });
+  return completer0.future;
+}
+Future validatePlatform() {
+  final completer0 = new Completer();
+  scheduleMicrotask(() {
+    try {
+      join0() {
+        runProcess('ver', []).then((x0) {
+          try {
+            var result = x0;
+            join1() {
+              completer0.complete(null);
+            }
+            if (result.stdout.join('\n').contains('XP')) {
+              log.error('Sorry, but pub is not supported on Windows XP.');
+              flushThenExit(exit_codes.USAGE).then((x1) {
+                try {
+                  x1;
+                  join1();
+                } catch (e1) {
+                  completer0.completeError(e1);
+                }
+              }, onError: (e2) {
+                completer0.completeError(e2);
+              });
+            } else {
+              join1();
+            }
+          } catch (e0) {
+            completer0.completeError(e0);
+          }
+        }, onError: (e3) {
+          completer0.completeError(e3);
+        });
+      }
+      if (Platform.operatingSystem != 'windows') {
+        completer0.complete(null);
+      } else {
+        join0();
+      }
+    } catch (e4) {
+      completer0.completeError(e4);
+    }
+  });
+  return completer0.future;
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/ascii_tree.dart b/sdk/lib/_internal/pub_generated/lib/src/ascii_tree.dart
new file mode 100644
index 0000000..b54a4b7
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/ascii_tree.dart
@@ -0,0 +1,69 @@
+library pub.ascii_tree;
+import 'package:path/path.dart' as path;
+import 'log.dart' as log;
+import 'utils.dart';
+String fromFiles(List<String> files, {String baseDir, bool showAllChildren}) {
+  var root = {};
+  for (var file in files) {
+    if (baseDir != null) file = path.relative(file, from: baseDir);
+    var parts = path.split(file);
+    var directory = root;
+    for (var part in path.split(file)) {
+      directory = directory.putIfAbsent(part, () => {});
+    }
+  }
+  return fromMap(root, showAllChildren: showAllChildren);
+}
+String fromMap(Map map, {bool showAllChildren}) {
+  var buffer = new StringBuffer();
+  _draw(buffer, "", null, map, showAllChildren: showAllChildren);
+  return buffer.toString();
+}
+void _drawLine(StringBuffer buffer, String prefix, bool isLastChild,
+    String name) {
+  buffer.write(prefix);
+  if (name != null) {
+    if (isLastChild) {
+      buffer.write(log.gray("'-- "));
+    } else {
+      buffer.write(log.gray("|-- "));
+    }
+  }
+  buffer.writeln(name);
+}
+String _getPrefix(bool isRoot, bool isLast) {
+  if (isRoot) return "";
+  if (isLast) return "    ";
+  return log.gray("|   ");
+}
+void _draw(StringBuffer buffer, String prefix, String name, Map children,
+    {bool showAllChildren, bool isLast: false}) {
+  if (showAllChildren == null) showAllChildren = false;
+  if (name != null) _drawLine(buffer, prefix, isLast, name);
+  var childNames = ordered(children.keys);
+  drawChild(bool isLastChild, String child) {
+    var childPrefix = _getPrefix(name == null, isLast);
+    _draw(
+        buffer,
+        '$prefix$childPrefix',
+        child,
+        children[child],
+        showAllChildren: showAllChildren,
+        isLast: isLastChild);
+  }
+  if (name == null || showAllChildren || childNames.length <= 10) {
+    for (var i = 0; i < childNames.length; i++) {
+      drawChild(i == childNames.length - 1, childNames[i]);
+    }
+  } else {
+    drawChild(false, childNames[0]);
+    drawChild(false, childNames[1]);
+    drawChild(false, childNames[2]);
+    buffer.write(prefix);
+    buffer.write(_getPrefix(name == null, isLast));
+    buffer.writeln(log.gray('| (${childNames.length - 6} more...)'));
+    drawChild(false, childNames[childNames.length - 3]);
+    drawChild(false, childNames[childNames.length - 2]);
+    drawChild(true, childNames[childNames.length - 1]);
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback.dart b/sdk/lib/_internal/pub_generated/lib/src/barback.dart
new file mode 100644
index 0000000..8e1707a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback.dart
@@ -0,0 +1,31 @@
+library pub.barback;
+import 'package:barback/barback.dart';
+import 'package:path/path.dart' as p;
+import 'version.dart';
+final pubConstraints = {
+  "barback": new VersionConstraint.parse(">=0.13.0 <0.15.1"),
+  "source_span": new VersionConstraint.parse(">=1.0.0 <2.0.0"),
+  "stack_trace": new VersionConstraint.parse(">=0.9.1 <2.0.0")
+};
+Uri idToPackageUri(AssetId id) {
+  if (!id.path.startsWith('lib/')) {
+    throw new ArgumentError("Asset id $id doesn't identify a library.");
+  }
+  return new Uri(
+      scheme: 'package',
+      path: p.url.join(id.package, id.path.replaceFirst('lib/', '')));
+}
+AssetId packagesUrlToId(Uri url) {
+  var parts = p.url.split(url.path);
+  if (parts.isNotEmpty && parts.first == "/") parts = parts.skip(1).toList();
+  if (parts.isEmpty) return null;
+  var index = parts.indexOf("packages");
+  if (index == -1) return null;
+  if (parts.length <= index + 1) {
+    throw new FormatException(
+        'Invalid URL path "${url.path}". Expected package name ' 'after "packages".');
+  }
+  var package = parts[index + 1];
+  var assetPath = p.url.join("lib", p.url.joinAll(parts.skip(index + 2)));
+  return new AssetId(package, assetPath);
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/admin_server.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/admin_server.dart
new file mode 100644
index 0000000..e4312fe
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/admin_server.dart
@@ -0,0 +1,46 @@
+library pub.barback.admin_server;
+import 'dart:async';
+import 'dart:io';
+import 'package:http_parser/http_parser.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import 'package:shelf_web_socket/shelf_web_socket.dart';
+import 'package:stack_trace/stack_trace.dart';
+import '../io.dart';
+import '../log.dart' as log;
+import 'asset_environment.dart';
+import 'base_server.dart';
+import 'web_socket_api.dart';
+class AdminServer extends BaseServer {
+  final _webSockets = new Set<CompatibleWebSocket>();
+  shelf.Handler _handler;
+  static Future<AdminServer> bind(AssetEnvironment environment, String host,
+      int port) {
+    return Chain.track(bindServer(host, port)).then((server) {
+      log.fine('Bound admin server to $host:$port.');
+      return new AdminServer._(environment, server);
+    });
+  }
+  AdminServer._(AssetEnvironment environment, HttpServer server)
+      : super(environment, server) {
+    _handler = new shelf.Cascade().add(
+        webSocketHandler(_handleWebSocket)).add(_handleHttp).handler;
+  }
+  Future close() {
+    var futures = [super.close()];
+    futures.addAll(_webSockets.map((socket) => socket.close()));
+    return Future.wait(futures);
+  }
+  handleRequest(shelf.Request request) => _handler(request);
+  _handleHttp(shelf.Request request) {
+    logRequest(request, "501 Not Implemented");
+    return new shelf.Response(
+        501,
+        body: "Currently this server only accepts Web Socket connections.");
+  }
+  void _handleWebSocket(CompatibleWebSocket socket) {
+    _webSockets.add(socket);
+    var api = new WebSocketApi(socket, environment);
+    api.listen().whenComplete(
+        () => _webSockets.remove(api)).catchError(addError);
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/asset_environment.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/asset_environment.dart
new file mode 100644
index 0000000..99f15f5
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/asset_environment.dart
@@ -0,0 +1,460 @@
+library pub.barback.asset_environment;
+import 'dart:async';
+import 'dart:io';
+import 'package:barback/barback.dart';
+import 'package:path/path.dart' as path;
+import 'package:watcher/watcher.dart';
+import '../entrypoint.dart';
+import '../exceptions.dart';
+import '../io.dart';
+import '../log.dart' as log;
+import '../package.dart';
+import '../package_graph.dart';
+import '../sdk.dart' as sdk;
+import '../source/cached.dart';
+import '../utils.dart';
+import 'admin_server.dart';
+import 'barback_server.dart';
+import 'dart_forwarding_transformer.dart';
+import 'dart2js_transformer.dart';
+import 'load_all_transformers.dart';
+import 'pub_package_provider.dart';
+import 'source_directory.dart';
+class AssetEnvironment {
+  static Future<AssetEnvironment> create(Entrypoint entrypoint,
+      BarbackMode mode, {WatcherType watcherType, String hostname, int basePort,
+      Iterable<String> packages, bool useDart2JS: true}) {
+    if (watcherType == null) watcherType = WatcherType.NONE;
+    if (hostname == null) hostname = "localhost";
+    if (basePort == null) basePort = 0;
+    return entrypoint.loadPackageGraph().then((graph) {
+      log.fine("Loaded package graph.");
+      var barback = new Barback(new PubPackageProvider(graph, packages));
+      barback.log.listen(_log);
+      var environment = new AssetEnvironment._(
+          graph,
+          barback,
+          mode,
+          watcherType,
+          hostname,
+          basePort,
+          packages);
+      return environment._load(useDart2JS: useDart2JS).then((_) => environment);
+    });
+  }
+  AdminServer _adminServer;
+  final _directories = new Map<String, SourceDirectory>();
+  final Barback barback;
+  Package get rootPackage => graph.entrypoint.root;
+  final PackageGraph graph;
+  final BarbackMode mode;
+  final _builtInTransformers = <Transformer>[];
+  final WatcherType _watcherType;
+  final String _hostname;
+  final int _basePort;
+  final Set<String> packages;
+  Set<AssetId> _modifiedSources;
+  AssetEnvironment._(PackageGraph graph, this.barback, this.mode,
+      this._watcherType, this._hostname, this._basePort, Iterable<String> packages)
+      : graph = graph,
+        packages = packages == null ?
+          graph.packages.keys.toSet() :
+          packages.toSet();
+  Iterable<Transformer> getBuiltInTransformers(Package package) {
+    if (package.name != rootPackage.name) return null;
+    if (_builtInTransformers.isEmpty) return null;
+    return _builtInTransformers;
+  }
+  Future<AdminServer> startAdminServer([int port]) {
+    assert(_adminServer == null);
+    if (port == null) port = _basePort == 0 ? 0 : _basePort - 1;
+    return AdminServer.bind(this, _hostname, port).then((server) => _adminServer =
+        server);
+  }
+  Future<BarbackServer> serveDirectory(String rootDirectory) {
+    var directory = _directories[rootDirectory];
+    if (directory != null) {
+      return directory.server.then((server) {
+        log.fine('Already serving $rootDirectory on ${server.url}.');
+        return server;
+      });
+    }
+    var overlapping = _directories.keys.where(
+        (directory) =>
+            path.isWithin(directory, rootDirectory) ||
+                path.isWithin(rootDirectory, directory)).toList();
+    if (overlapping.isNotEmpty) {
+      return new Future.error(
+          new OverlappingSourceDirectoryException(overlapping));
+    }
+    var port = _basePort;
+    if (port != 0) {
+      var boundPorts =
+          _directories.values.map((directory) => directory.port).toSet();
+      while (boundPorts.contains(port)) {
+        port++;
+      }
+    }
+    var sourceDirectory =
+        new SourceDirectory(this, rootDirectory, _hostname, port);
+    _directories[rootDirectory] = sourceDirectory;
+    return _provideDirectorySources(
+        rootPackage,
+        rootDirectory).then((subscription) {
+      sourceDirectory.watchSubscription = subscription;
+      return sourceDirectory.serve();
+    });
+  }
+  Future<BarbackServer> servePackageBinDirectory(String package) {
+    return _provideDirectorySources(
+        graph.packages[package],
+        "bin").then(
+            (_) =>
+                BarbackServer.bind(this, _hostname, 0, package: package, rootDirectory: "bin"));
+  }
+  Future precompileExecutables(String packageName, String directory,
+      {Iterable<AssetId> executableIds}) {
+    if (executableIds == null) {
+      executableIds = graph.packages[packageName].executableIds;
+    }
+    log.fine("executables for $packageName: $executableIds");
+    if (executableIds.isEmpty) return null;
+    var package = graph.packages[packageName];
+    return servePackageBinDirectory(packageName).then((server) {
+      return waitAndPrintErrors(executableIds.map((id) {
+        var basename = path.url.basename(id.path);
+        var snapshotPath = path.join(directory, "$basename.snapshot");
+        return runProcess(
+            Platform.executable,
+            [
+                '--snapshot=$snapshotPath',
+                server.url.resolve(basename).toString()]).then((result) {
+          if (result.success) {
+            log.message("Precompiled ${_formatExecutable(id)}.");
+          } else {
+            deleteEntry(snapshotPath);
+            throw new ApplicationException(
+                log.yellow("Failed to precompile " "${_formatExecutable(id)}:\n") +
+                    result.stderr.join('\n'));
+          }
+        });
+      })).whenComplete(() {
+        server.close();
+      });
+    });
+  }
+  String _formatExecutable(AssetId id) =>
+      log.bold("${id.package}:${path.basenameWithoutExtension(id.path)}");
+  Future<Uri> unserveDirectory(String rootDirectory) {
+    log.fine("Unserving $rootDirectory.");
+    var directory = _directories.remove(rootDirectory);
+    if (directory == null) return new Future.value();
+    return directory.server.then((server) {
+      var url = server.url;
+      return directory.close().then((_) {
+        _removeDirectorySources(rootDirectory);
+        return url;
+      });
+    });
+  }
+  String getSourceDirectoryContaining(String assetPath) =>
+      _directories.values.firstWhere(
+          (dir) => path.isWithin(dir.directory, assetPath)).directory;
+  Future<List<Uri>> getUrlsForAssetPath(String assetPath) {
+    return _lookUpPathInServerRoot(assetPath).then((urls) {
+      if (urls.isNotEmpty) return urls;
+      return _lookUpPathInPackagesDirectory(assetPath);
+    }).then((urls) {
+      if (urls.isNotEmpty) return urls;
+      return _lookUpPathInDependency(assetPath);
+    });
+  }
+  Future<List<Uri>> _lookUpPathInServerRoot(String assetPath) {
+    return Future.wait(
+        _directories.values.where(
+            (dir) => path.isWithin(dir.directory, assetPath)).map((dir) {
+      var relativePath = path.relative(assetPath, from: dir.directory);
+      return dir.server.then(
+          (server) => server.url.resolveUri(path.toUri(relativePath)));
+    }));
+  }
+  Future<List<Uri>> _lookUpPathInPackagesDirectory(String assetPath) {
+    var components = path.split(path.relative(assetPath));
+    if (components.first != "packages") return new Future.value([]);
+    if (!packages.contains(components[1])) return new Future.value([]);
+    return Future.wait(_directories.values.map((dir) {
+      return dir.server.then(
+          (server) => server.url.resolveUri(path.toUri(assetPath)));
+    }));
+  }
+  Future<List<Uri>> _lookUpPathInDependency(String assetPath) {
+    for (var packageName in packages) {
+      var package = graph.packages[packageName];
+      var libDir = path.join(package.dir, 'lib');
+      var assetDir = path.join(package.dir, 'asset');
+      var uri;
+      if (path.isWithin(libDir, assetPath)) {
+        uri = path.toUri(
+            path.join('packages', package.name, path.relative(assetPath, from: libDir)));
+      } else if (path.isWithin(assetDir, assetPath)) {
+        uri = path.toUri(
+            path.join('assets', package.name, path.relative(assetPath, from: assetDir)));
+      } else {
+        continue;
+      }
+      return Future.wait(_directories.values.map((dir) {
+        return dir.server.then((server) => server.url.resolveUri(uri));
+      }));
+    }
+    return new Future.value([]);
+  }
+  Future<AssetId> getAssetIdForUrl(Uri url) {
+    return Future.wait(
+        _directories.values.map((dir) => dir.server)).then((servers) {
+      var server = servers.firstWhere((server) {
+        if (server.port != url.port) return false;
+        return isLoopback(server.address.host) == isLoopback(url.host) ||
+            server.address.host == url.host;
+      }, orElse: () => null);
+      if (server == null) return null;
+      return server.urlToId(url);
+    });
+  }
+  bool containsPath(String sourcePath) {
+    var directories = ["lib"];
+    directories.addAll(_directories.keys);
+    return directories.any((dir) => path.isWithin(dir, sourcePath));
+  }
+  void pauseUpdates() {
+    assert(_modifiedSources == null);
+    _modifiedSources = new Set<AssetId>();
+  }
+  void resumeUpdates() {
+    assert(_modifiedSources != null);
+    barback.updateSources(_modifiedSources);
+    _modifiedSources = null;
+  }
+  Future _load({bool useDart2JS}) {
+    return log.progress("Initializing barback", () {
+      var containsDart2JS = graph.entrypoint.root.pubspec.transformers.any(
+          (transformers) =>
+              transformers.any((config) => config.id.package == '\$dart2js'));
+      if (!containsDart2JS && useDart2JS) {
+        _builtInTransformers.addAll(
+            [new Dart2JSTransformer(this, mode), new DartForwardingTransformer(mode)]);
+      }
+      var dartPath = assetPath('dart');
+      var pubSources = listDir(
+          dartPath,
+          recursive: true).where(
+              (file) => path.extension(file) == ".dart").map((library) {
+        var idPath = path.join('lib', path.relative(library, from: dartPath));
+        return new AssetId('\$pub', path.toUri(idPath).toString());
+      });
+      var libPath = path.join(sdk.rootDirectory, "lib");
+      var sdkSources = listDir(
+          libPath,
+          recursive: true).where((file) => path.extension(file) == ".dart").map((file) {
+        var idPath =
+            path.join("lib", path.relative(file, from: sdk.rootDirectory));
+        return new AssetId('\$sdk', path.toUri(idPath).toString());
+      });
+      var transformerServer;
+      return BarbackServer.bind(this, _hostname, 0).then((server) {
+        transformerServer = server;
+        var errorStream = barback.errors.map((error) {
+          if (error is! AssetLoadException) throw error;
+          log.error(log.red(error.message));
+          log.fine(error.stackTrace.terse);
+        });
+        return _withStreamErrors(() {
+          return log.progress("Loading source assets", () {
+            barback.updateSources(pubSources);
+            barback.updateSources(sdkSources);
+            return _provideSources();
+          });
+        }, [errorStream, barback.results]);
+      }).then((_) {
+        log.fine("Provided sources.");
+        var completer = new Completer();
+        var errorStream = barback.errors.map((error) {
+          if (error is! TransformerException) throw error;
+          var message = error.error.toString();
+          if (error.stackTrace != null) {
+            message += "\n" + error.stackTrace.terse.toString();
+          }
+          _log(
+              new LogEntry(
+                  error.transform,
+                  error.transform.primaryId,
+                  LogLevel.ERROR,
+                  message,
+                  null));
+        });
+        return _withStreamErrors(() {
+          return log.progress("Loading transformers", () {
+            return loadAllTransformers(
+                this,
+                transformerServer).then((_) => transformerServer.close());
+          }, fine: true);
+        }, [errorStream, barback.results, transformerServer.results]);
+      }).then((_) => barback.removeSources(pubSources));
+    }, fine: true);
+  }
+  Future _provideSources() {
+    return Future.wait(packages.map((package) {
+      return _provideDirectorySources(graph.packages[package], "lib");
+    }));
+  }
+  Future<StreamSubscription<WatchEvent>>
+      _provideDirectorySources(Package package, String dir) {
+    log.fine("Providing sources for ${package.name}|$dir.");
+    if (_watcherType == WatcherType.NONE) {
+      _updateDirectorySources(package, dir);
+      return new Future.value();
+    }
+    return _watchDirectorySources(package, dir).then((_) {
+      _updateDirectorySources(package, dir);
+    });
+  }
+  void _updateDirectorySources(Package package, String dir) {
+    var ids = _listDirectorySources(package, dir);
+    if (_modifiedSources == null) {
+      barback.updateSources(ids);
+    } else {
+      _modifiedSources.addAll(ids);
+    }
+  }
+  void _removeDirectorySources(String dir) {
+    var ids = _listDirectorySources(rootPackage, dir);
+    if (_modifiedSources == null) {
+      barback.removeSources(ids);
+    } else {
+      _modifiedSources.removeAll(ids);
+    }
+  }
+  Iterable<AssetId> _listDirectorySources(Package package, String dir) {
+    var subdirectory = path.join(package.dir, dir);
+    if (!dirExists(subdirectory)) return [];
+    return package.listFiles(beneath: subdirectory).map((file) {
+      var relative = path.relative(file, from: package.dir);
+      if (Platform.operatingSystem == 'windows') {
+        relative = relative.replaceAll("\\", "/");
+      }
+      var uri = new Uri(pathSegments: relative.split("/"));
+      return new AssetId(package.name, uri.toString());
+    });
+  }
+  Future<StreamSubscription<WatchEvent>> _watchDirectorySources(Package package,
+      String dir) {
+    var packageId = graph.lockFile.packages[package.name];
+    if (packageId != null &&
+        graph.entrypoint.cache.sources[packageId.source] is CachedSource) {
+      return new Future.value();
+    }
+    var subdirectory = path.join(package.dir, dir);
+    if (!dirExists(subdirectory)) return new Future.value();
+    var watcher = _watcherType.create(subdirectory);
+    var subscription = watcher.events.listen((event) {
+      var parts = path.split(event.path);
+      if (parts.contains("packages")) return;
+      if (event.path.endsWith(".dart.js")) return;
+      if (event.path.endsWith(".dart.js.map")) return;
+      if (event.path.endsWith(".dart.precompiled.js")) return;
+      var idPath = path.relative(event.path, from: package.dir);
+      var id = new AssetId(package.name, path.toUri(idPath).toString());
+      if (event.type == ChangeType.REMOVE) {
+        if (_modifiedSources != null) {
+          _modifiedSources.remove(id);
+        } else {
+          barback.removeSources([id]);
+        }
+      } else if (_modifiedSources != null) {
+        _modifiedSources.add(id);
+      } else {
+        barback.updateSources([id]);
+      }
+    });
+    return watcher.ready.then((_) => subscription);
+  }
+  Future _withStreamErrors(Future futureCallback(), List<Stream> streams) {
+    var completer = new Completer.sync();
+    var subscriptions = streams.map(
+        (stream) => stream.listen((_) {}, onError: completer.complete)).toList();
+    syncFuture(futureCallback).then((_) {
+      if (!completer.isCompleted) completer.complete();
+    }).catchError((error, stackTrace) {
+      if (!completer.isCompleted) completer.completeError(error, stackTrace);
+    });
+    return completer.future.whenComplete(() {
+      for (var subscription in subscriptions) {
+        subscription.cancel();
+      }
+    });
+  }
+}
+void _log(LogEntry entry) {
+  messageMentions(text) =>
+      entry.message.toLowerCase().contains(text.toLowerCase());
+  messageMentionsAsset(id) =>
+      messageMentions(id.toString()) ||
+          messageMentions(path.fromUri(entry.assetId.path));
+  var prefixParts = [];
+  if (!messageMentions(entry.level.name)) {
+    prefixParts.add("${entry.level} from");
+  }
+  prefixParts.add(entry.transform.transformer);
+  if (!messageMentionsAsset(entry.transform.primaryId)) {
+    prefixParts.add("on ${entry.transform.primaryId}");
+  }
+  if (entry.assetId != entry.transform.primaryId &&
+      !messageMentionsAsset(entry.assetId)) {
+    prefixParts.add("with input ${entry.assetId}");
+  }
+  var prefix = "[${prefixParts.join(' ')}]:";
+  var message = entry.message;
+  if (entry.span != null) {
+    message = entry.span.message(entry.message);
+  }
+  switch (entry.level) {
+    case LogLevel.ERROR:
+      log.error("${log.red(prefix)}\n$message");
+      break;
+    case LogLevel.WARNING:
+      log.warning("${log.yellow(prefix)}\n$message");
+      break;
+    case LogLevel.INFO:
+      log.message("${log.cyan(prefix)}\n$message");
+      break;
+    case LogLevel.FINE:
+      log.fine("${log.gray(prefix)}\n$message");
+      break;
+  }
+}
+class OverlappingSourceDirectoryException implements Exception {
+  final List<String> overlappingDirectories;
+  OverlappingSourceDirectoryException(this.overlappingDirectories);
+}
+abstract class WatcherType {
+  static const AUTO = const _AutoWatcherType();
+  static const POLLING = const _PollingWatcherType();
+  static const NONE = const _NoneWatcherType();
+  DirectoryWatcher create(String directory);
+  String toString();
+}
+class _AutoWatcherType implements WatcherType {
+  const _AutoWatcherType();
+  DirectoryWatcher create(String directory) => new DirectoryWatcher(directory);
+  String toString() => "auto";
+}
+class _PollingWatcherType implements WatcherType {
+  const _PollingWatcherType();
+  DirectoryWatcher create(String directory) =>
+      new PollingDirectoryWatcher(directory);
+  String toString() => "polling";
+}
+class _NoneWatcherType implements WatcherType {
+  const _NoneWatcherType();
+  DirectoryWatcher create(String directory) => null;
+  String toString() => "none";
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/barback_server.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/barback_server.dart
new file mode 100644
index 0000000..fbf05c2
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/barback_server.dart
@@ -0,0 +1,113 @@
+library pub.barback.server;
+import 'dart:async';
+import 'dart:io';
+import 'package:barback/barback.dart';
+import 'package:mime/mime.dart';
+import 'package:path/path.dart' as path;
+import 'package:shelf/shelf.dart' as shelf;
+import 'package:stack_trace/stack_trace.dart';
+import '../barback.dart';
+import '../io.dart';
+import '../log.dart' as log;
+import '../utils.dart';
+import 'base_server.dart';
+import 'asset_environment.dart';
+typedef bool AllowAsset(AssetId id);
+class BarbackServer extends BaseServer<BarbackServerResult> {
+  final String package;
+  final String rootDirectory;
+  AllowAsset allowAsset;
+  static Future<BarbackServer> bind(AssetEnvironment environment, String host,
+      int port, {String package, String rootDirectory}) {
+    if (package == null) package = environment.rootPackage.name;
+    return Chain.track(bindServer(host, port)).then((server) {
+      if (rootDirectory == null) {
+        log.fine('Serving packages on $host:$port.');
+      } else {
+        log.fine('Bound "$rootDirectory" to $host:$port.');
+      }
+      return new BarbackServer._(environment, server, package, rootDirectory);
+    });
+  }
+  BarbackServer._(AssetEnvironment environment, HttpServer server, this.package,
+      this.rootDirectory)
+      : super(environment, server);
+  AssetId urlToId(Uri url) {
+    var id = packagesUrlToId(url);
+    if (id != null) return id;
+    if (rootDirectory == null) {
+      throw new FormatException(
+          "This server cannot serve out of the root directory. Got $url.");
+    }
+    var parts = path.url.split(url.path);
+    if (parts.isNotEmpty && parts.first == "/") parts = parts.skip(1);
+    var relativePath = path.url.join(rootDirectory, path.url.joinAll(parts));
+    return new AssetId(package, relativePath);
+  }
+  handleRequest(shelf.Request request) {
+    if (request.method != "GET" && request.method != "HEAD") {
+      return methodNotAllowed(request);
+    }
+    var id;
+    try {
+      id = urlToId(request.url);
+    } on FormatException catch (ex) {
+      return notFound(request, error: ex.message);
+    }
+    if (allowAsset != null && !allowAsset(id)) {
+      return notFound(
+          request,
+          error: "Asset $id is not available in this configuration.",
+          asset: id);
+    }
+    return environment.barback.getAssetById(id).then((result) {
+      return result;
+    }).then((asset) => _serveAsset(request, asset)).catchError((error, trace) {
+      if (error is! AssetNotFoundException) throw error;
+      return environment.barback.getAssetById(
+          id.addExtension("/index.html")).then((asset) {
+        if (request.url.path.endsWith('/')) return _serveAsset(request, asset);
+        logRequest(request, "302 Redirect to ${request.url}/");
+        return new shelf.Response.found('${request.url}/');
+      }).catchError((newError, newTrace) {
+        throw newError is AssetNotFoundException ? error : newError;
+      });
+    }).catchError((error, trace) {
+      if (error is! AssetNotFoundException) {
+        trace = new Chain.forTrace(trace);
+        logRequest(request, "$error\n$trace");
+        addError(error, trace);
+        close();
+        return new shelf.Response.internalServerError();
+      }
+      addResult(new BarbackServerResult._failure(request.url, id, error));
+      return notFound(request, asset: id);
+    });
+  }
+  Future<shelf.Response> _serveAsset(shelf.Request request, Asset asset) {
+    return validateStream(asset.read()).then((stream) {
+      addResult(new BarbackServerResult._success(request.url, asset.id));
+      var headers = {};
+      var mimeType = lookupMimeType(asset.id.path);
+      if (mimeType != null) headers['Content-Type'] = mimeType;
+      return new shelf.Response.ok(stream, headers: headers);
+    }).catchError((error, trace) {
+      addResult(new BarbackServerResult._failure(request.url, asset.id, error));
+      if (error is FileSystemException) {
+        return notFound(request, error: error.toString(), asset: asset.id);
+      }
+      trace = new Chain.forTrace(trace);
+      logRequest(request, "$error\n$trace");
+      return new shelf.Response.internalServerError(body: error.toString());
+    });
+  }
+}
+class BarbackServerResult {
+  final Uri url;
+  final AssetId id;
+  final error;
+  bool get isSuccess => error == null;
+  bool get isFailure => !isSuccess;
+  BarbackServerResult._success(this.url, this.id) : error = null;
+  BarbackServerResult._failure(this.url, this.id, this.error);
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/base_server.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/base_server.dart
new file mode 100644
index 0000000..cb1234c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/base_server.dart
@@ -0,0 +1,89 @@
+library pub.barback.base_server;
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+import 'package:barback/barback.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import 'package:shelf/shelf_io.dart' as shelf_io;
+import 'package:stack_trace/stack_trace.dart';
+import '../log.dart' as log;
+import '../utils.dart';
+import 'asset_environment.dart';
+abstract class BaseServer<T> {
+  final AssetEnvironment environment;
+  final HttpServer _server;
+  int get port => _server.port;
+  InternetAddress get address => _server.address;
+  Uri get url => baseUrlForAddress(_server.address, port);
+  Stream<T> get results => _resultsController.stream;
+  final _resultsController = new StreamController<T>.broadcast();
+  BaseServer(this.environment, this._server) {
+    shelf_io.serveRequests(
+        Chain.track(_server),
+        const shelf.Pipeline().addMiddleware(
+            shelf.createMiddleware(
+                errorHandler: _handleError)).addMiddleware(
+                    shelf.createMiddleware(
+                        responseHandler: _disableGzip)).addHandler(handleRequest));
+  }
+  Future close() {
+    return Future.wait([_server.close(), _resultsController.close()]);
+  }
+  handleRequest(shelf.Request request);
+  shelf.Response methodNotAllowed(shelf.Request request) {
+    logRequest(request, "405 Method Not Allowed");
+    return new shelf.Response(
+        405,
+        body: "The ${request.method} method is not allowed for ${request.url}.",
+        headers: {
+      'Allow': 'GET, HEAD'
+    });
+  }
+  shelf.Response notFound(shelf.Request request, {String error,
+      AssetId asset}) {
+    logRequest(request, "Not Found");
+    var body = new StringBuffer();
+    body.writeln("""
+        <!DOCTYPE html>
+        <head>
+        <title>404 Not Found</title>
+        </head>
+        <body>
+        <h1>404 Not Found</h1>""");
+    if (asset != null) {
+      body.writeln(
+          "<p>Could not find asset "
+              "<code>${HTML_ESCAPE.convert(asset.path)}</code> in package "
+              "<code>${HTML_ESCAPE.convert(asset.package)}</code>.</p>");
+    }
+    if (error != null) {
+      body.writeln("<p>Error: ${HTML_ESCAPE.convert(error)}</p>");
+    }
+    body.writeln("""
+        </body>""");
+    return new shelf.Response.notFound(body.toString(), headers: {
+      'Content-Type': 'text/html; charset=utf-8'
+    });
+  }
+  void logRequest(shelf.Request request, String message) =>
+      log.fine("$this ${request.method} ${request.url}\n$message");
+  void addResult(T result) {
+    _resultsController.add(result);
+  }
+  void addError(error, [stackTrace]) {
+    _resultsController.addError(error, stackTrace);
+  }
+  _handleError(error, StackTrace stackTrace) {
+    _resultsController.addError(error, stackTrace);
+    close();
+    return new shelf.Response.internalServerError();
+  }
+  _disableGzip(shelf.Response response) {
+    if (!response.headers.containsKey('Content-Encoding')) {
+      return response.change(headers: {
+        'Content-Encoding': ''
+      });
+    }
+    return response;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/cycle_exception.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/cycle_exception.dart
new file mode 100644
index 0000000..b516cd7
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/cycle_exception.dart
@@ -0,0 +1,29 @@
+library pub.barback.cycle_exception;
+import '../exceptions.dart';
+class CycleException implements ApplicationException {
+  final String _step;
+  final CycleException _next;
+  List<String> get steps {
+    if (_step == null) return [];
+    var exception = this;
+    var steps = [];
+    while (exception != null) {
+      steps.add(exception._step);
+      exception = exception._next;
+    }
+    return steps;
+  }
+  String get message {
+    var steps = this.steps;
+    if (steps.isEmpty) return "Transformer cycle detected.";
+    return "Transformer cycle detected:\n" +
+        steps.map((step) => "  $step").join("\n");
+  }
+  CycleException([this._step]) : _next = null;
+  CycleException._(this._step, this._next);
+  CycleException prependStep(String step) {
+    if (_step == null) return new CycleException(step);
+    return new CycleException._(step, this);
+  }
+  String toString() => message;
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/dart2js_transformer.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/dart2js_transformer.dart
new file mode 100644
index 0000000..50efc65
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/dart2js_transformer.dart
@@ -0,0 +1,270 @@
+library pub.dart2js_transformer;
+import 'dart:async';
+import 'dart:convert';
+import 'package:analyzer/analyzer.dart';
+import 'package:barback/barback.dart';
+import 'package:path/path.dart' as path;
+import 'package:pool/pool.dart';
+import 'package:stack_trace/stack_trace.dart';
+import '../../../../compiler/compiler.dart' as compiler;
+import '../../../../compiler/implementation/dart2js.dart' show AbortLeg;
+import '../../../../compiler/implementation/source_file.dart';
+import '../barback.dart';
+import '../dart.dart' as dart;
+import '../utils.dart';
+import 'asset_environment.dart';
+final _validOptions = new Set<String>.from(
+    [
+        'commandLineOptions',
+        'checked',
+        'csp',
+        'minify',
+        'verbose',
+        'environment',
+        'analyzeAll',
+        'suppressWarnings',
+        'suppressHints',
+        'suppressPackageWarnings',
+        'terse']);
+class Dart2JSTransformer extends Transformer implements LazyTransformer {
+  static final _pool = new Pool(1);
+  final AssetEnvironment _environment;
+  final BarbackSettings _settings;
+  bool get _generateSourceMaps => _settings.mode != BarbackMode.RELEASE;
+  Dart2JSTransformer.withSettings(this._environment, this._settings) {
+    var invalidOptions =
+        _settings.configuration.keys.toSet().difference(_validOptions);
+    if (invalidOptions.isEmpty) return;
+    throw new FormatException(
+        "Unrecognized dart2js " "${pluralize('option', invalidOptions.length)} "
+            "${toSentence(invalidOptions.map((option) => '"$option"'))}.");
+  }
+  Dart2JSTransformer(AssetEnvironment environment, BarbackMode mode)
+      : this.withSettings(environment, new BarbackSettings({}, mode));
+  bool isPrimary(AssetId id) {
+    if (id.extension != ".dart") return false;
+    return !id.path.startsWith("lib/");
+  }
+  Future apply(Transform transform) {
+    return _isEntrypoint(transform.primaryInput).then((isEntrypoint) {
+      if (!isEntrypoint) return null;
+      return _pool.withResource(() {
+        transform.logger.info("Compiling ${transform.primaryInput.id}...");
+        var stopwatch = new Stopwatch()..start();
+        return _doCompilation(transform).then((_) {
+          stopwatch.stop();
+          transform.logger.info(
+              "Took ${stopwatch.elapsed} to compile " "${transform.primaryInput.id}.");
+        });
+      });
+    });
+  }
+  void declareOutputs(DeclaringTransform transform) {
+    var primaryId = transform.primaryId;
+    transform.declareOutput(primaryId.addExtension(".js"));
+    transform.declareOutput(primaryId.addExtension(".precompiled.js"));
+    if (_generateSourceMaps) {
+      transform.declareOutput(primaryId.addExtension(".js.map"));
+    }
+  }
+  Future<bool> _isEntrypoint(Asset asset) {
+    return asset.readAsString().then((code) {
+      try {
+        var name = asset.id.path;
+        if (asset.id.package != _environment.rootPackage.name) {
+          name += " in ${asset.id.package}";
+        }
+        var parsed = parseCompilationUnit(code, name: name);
+        return dart.isEntrypoint(parsed);
+      } on AnalyzerErrorGroup catch (e) {
+        return true;
+      }
+    });
+  }
+  Future _doCompilation(Transform transform) {
+    var provider = new _BarbackCompilerProvider(
+        _environment,
+        transform,
+        generateSourceMaps: _generateSourceMaps);
+    var id = transform.primaryInput.id;
+    var entrypoint =
+        path.join(_environment.graph.packages[id.package].dir, id.path);
+    return Chain.track(
+        dart.compile(
+            entrypoint,
+            provider,
+            commandLineOptions: _configCommandLineOptions,
+            csp: _configBool('csp'),
+            checked: _configBool('checked'),
+            minify: _configBool(
+                'minify',
+                defaultsTo: _settings.mode == BarbackMode.RELEASE),
+            verbose: _configBool('verbose'),
+            environment: _configEnvironment,
+            packageRoot: path.join(_environment.rootPackage.dir, "packages"),
+            analyzeAll: _configBool('analyzeAll'),
+            suppressWarnings: _configBool('suppressWarnings'),
+            suppressHints: _configBool('suppressHints'),
+            suppressPackageWarnings: _configBool(
+                'suppressPackageWarnings',
+                defaultsTo: true),
+            terse: _configBool('terse'),
+            includeSourceMapUrls: _settings.mode != BarbackMode.RELEASE));
+  }
+  List<String> get _configCommandLineOptions {
+    if (!_settings.configuration.containsKey('commandLineOptions')) return null;
+    var options = _settings.configuration['commandLineOptions'];
+    if (options is List && options.every((option) => option is String)) {
+      return options;
+    }
+    throw new FormatException(
+        'Invalid value for '
+            '\$dart2js.commandLineOptions: ${JSON.encode(options)} (expected list '
+            'of strings).');
+  }
+  Map<String, String> get _configEnvironment {
+    if (!_settings.configuration.containsKey('environment')) return null;
+    var environment = _settings.configuration['environment'];
+    if (environment is Map &&
+        environment.keys.every((key) => key is String) &&
+        environment.values.every((key) => key is String)) {
+      return environment;
+    }
+    throw new FormatException(
+        'Invalid value for \$dart2js.environment: '
+            '${JSON.encode(environment)} (expected map from strings to strings).');
+  }
+  bool _configBool(String name, {bool defaultsTo: false}) {
+    if (!_settings.configuration.containsKey(name)) return defaultsTo;
+    var value = _settings.configuration[name];
+    if (value is bool) return value;
+    throw new FormatException(
+        'Invalid value for \$dart2js.$name: '
+            '${JSON.encode(value)} (expected true or false).');
+  }
+}
+class _BarbackCompilerProvider implements dart.CompilerProvider {
+  Uri get libraryRoot => Uri.parse("${path.toUri(_libraryRootPath)}/");
+  final AssetEnvironment _environment;
+  final Transform _transform;
+  String _libraryRootPath;
+  final _sourceFiles = new Map<String, SourceFile>();
+  var _showWarnings = true;
+  var _showHints = true;
+  var _verbose = false;
+  var _throwOnError = false;
+  var _isAborting = false;
+  final bool generateSourceMaps;
+  compiler.Diagnostic _lastKind = null;
+  static final int _FATAL =
+      compiler.Diagnostic.CRASH.ordinal |
+      compiler.Diagnostic.ERROR.ordinal;
+  static final int _INFO =
+      compiler.Diagnostic.INFO.ordinal |
+      compiler.Diagnostic.VERBOSE_INFO.ordinal;
+  _BarbackCompilerProvider(this._environment, this._transform,
+      {this.generateSourceMaps: true}) {
+    var buildDir =
+        _environment.getSourceDirectoryContaining(_transform.primaryInput.id.path);
+    _libraryRootPath =
+        path.join(_environment.rootPackage.dir, buildDir, "packages", r"$sdk");
+  }
+  Future<String> provideInput(Uri resourceUri) {
+    assert(resourceUri.isAbsolute);
+    assert(resourceUri.scheme == "file");
+    var sourcePath = path.fromUri(resourceUri);
+    return _readResource(resourceUri).then((source) {
+      _sourceFiles[resourceUri.toString()] =
+          new StringSourceFile(path.relative(sourcePath), source);
+      return source;
+    });
+  }
+  EventSink<String> provideOutput(String name, String extension) {
+    if (!generateSourceMaps && extension.endsWith(".map")) {
+      return new NullSink<String>();
+    }
+    var primaryId = _transform.primaryInput.id;
+    var outPath;
+    if (name == "") {
+      outPath = _transform.primaryInput.id.path;
+    } else {
+      var dirname = path.url.dirname(_transform.primaryInput.id.path);
+      outPath = path.url.join(dirname, name);
+    }
+    var id = new AssetId(primaryId.package, "$outPath.$extension");
+    var sink = new StreamController<String>();
+    var stream = UTF8.encoder.bind(sink.stream);
+    _transform.addOutput(new Asset.fromStream(id, stream));
+    return sink;
+  }
+  void handleDiagnostic(Uri uri, int begin, int end, String message,
+      compiler.Diagnostic kind) {
+    if (kind.name == "source map") return;
+    if (_isAborting) return;
+    _isAborting = (kind == compiler.Diagnostic.CRASH);
+    var isInfo = (kind.ordinal & _INFO) != 0;
+    if (isInfo && uri == null && kind != compiler.Diagnostic.INFO) {
+      if (!_verbose && kind == compiler.Diagnostic.VERBOSE_INFO) return;
+      _transform.logger.info(message);
+      return;
+    }
+    if (kind != compiler.Diagnostic.INFO) _lastKind = kind;
+    var logFn;
+    if (kind == compiler.Diagnostic.ERROR) {
+      logFn = _transform.logger.error;
+    } else if (kind == compiler.Diagnostic.WARNING) {
+      if (!_showWarnings) return;
+      logFn = _transform.logger.warning;
+    } else if (kind == compiler.Diagnostic.HINT) {
+      if (!_showHints) return;
+      logFn = _transform.logger.warning;
+    } else if (kind == compiler.Diagnostic.CRASH) {
+      logFn = _transform.logger.error;
+    } else if (kind == compiler.Diagnostic.INFO) {
+      if (_lastKind == compiler.Diagnostic.WARNING && !_showWarnings) return;
+      if (_lastKind == compiler.Diagnostic.HINT && !_showHints) return;
+      logFn = _transform.logger.info;
+    } else {
+      throw new Exception('Unknown kind: $kind (${kind.ordinal})');
+    }
+    var fatal = (kind.ordinal & _FATAL) != 0;
+    if (uri == null) {
+      logFn(message);
+    } else {
+      SourceFile file = _sourceFiles[uri.toString()];
+      if (file == null) {
+        logFn('$uri: $message');
+      } else {
+        logFn(file.getLocationMessage(message, begin, end, true, (i) => i));
+      }
+    }
+    if (fatal && _throwOnError) {
+      _isAborting = true;
+      throw new AbortLeg(message);
+    }
+  }
+  Future<String> _readResource(Uri url) {
+    return syncFuture(() {
+      var id = _sourceUrlToId(url);
+      if (id != null) return _transform.readInputAsString(id);
+      throw new Exception(
+          "Cannot read $url because it is outside of the build environment.");
+    });
+  }
+  AssetId _sourceUrlToId(Uri url) {
+    var id = packagesUrlToId(url);
+    if (id != null) return id;
+    var sourcePath = path.fromUri(url);
+    if (_environment.containsPath(sourcePath)) {
+      var relative = path.toUri(
+          path.relative(sourcePath, from: _environment.rootPackage.dir)).toString();
+      return new AssetId(_environment.rootPackage.name, relative);
+    }
+    return null;
+  }
+}
+class NullSink<T> implements EventSink<T> {
+  void add(T event) {}
+  void addError(errorEvent, [StackTrace stackTrace]) {}
+  void close() {}
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/dart_forwarding_transformer.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/dart_forwarding_transformer.dart
new file mode 100644
index 0000000..af8aea2
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/dart_forwarding_transformer.dart
@@ -0,0 +1,14 @@
+library pub.dart_forwarding_transformer;
+import 'dart:async';
+import 'package:barback/barback.dart';
+import '../utils.dart';
+class DartForwardingTransformer extends Transformer {
+  final BarbackMode _mode;
+  DartForwardingTransformer(this._mode);
+  String get allowedExtensions => ".dart";
+  Future apply(Transform transform) {
+    return newFuture(() {
+      transform.addOutput(transform.primaryInput);
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/excluding_aggregate_transformer.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/excluding_aggregate_transformer.dart
new file mode 100644
index 0000000..bbb304f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/excluding_aggregate_transformer.dart
@@ -0,0 +1,44 @@
+library pub.excluding_aggregate_transformer;
+import 'dart:async';
+import 'package:barback/barback.dart';
+import 'transformer_config.dart';
+class ExcludingAggregateTransformer extends AggregateTransformer {
+  static AggregateTransformer wrap(AggregateTransformer inner,
+      TransformerConfig config) {
+    if (!config.hasExclusions) return inner;
+    if (inner is LazyAggregateTransformer) {
+      return new _LazyExcludingAggregateTransformer(
+          inner as LazyAggregateTransformer,
+          config);
+    } else if (inner is DeclaringAggregateTransformer) {
+      return new _DeclaringExcludingAggregateTransformer(
+          inner as DeclaringAggregateTransformer,
+          config);
+    } else {
+      return new ExcludingAggregateTransformer._(inner, config);
+    }
+  }
+  final AggregateTransformer _inner;
+  final TransformerConfig _config;
+  ExcludingAggregateTransformer._(this._inner, this._config);
+  classifyPrimary(AssetId id) {
+    if (!_config.canTransform(id.path)) return null;
+    return _inner.classifyPrimary(id);
+  }
+  Future apply(AggregateTransform transform) => _inner.apply(transform);
+  String toString() => _inner.toString();
+}
+class _DeclaringExcludingAggregateTransformer extends
+    ExcludingAggregateTransformer implements DeclaringAggregateTransformer {
+  _DeclaringExcludingAggregateTransformer(DeclaringAggregateTransformer inner,
+      TransformerConfig config)
+      : super._(inner as AggregateTransformer, config);
+  Future declareOutputs(DeclaringAggregateTransform transform) =>
+      (_inner as DeclaringAggregateTransformer).declareOutputs(transform);
+}
+class _LazyExcludingAggregateTransformer extends
+    _DeclaringExcludingAggregateTransformer implements LazyAggregateTransformer {
+  _LazyExcludingAggregateTransformer(DeclaringAggregateTransformer inner,
+      TransformerConfig config)
+      : super(inner, config);
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/excluding_transformer.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/excluding_transformer.dart
new file mode 100644
index 0000000..4bd8cd8
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/excluding_transformer.dart
@@ -0,0 +1,41 @@
+library pub.excluding_transformer;
+import 'dart:async';
+import 'package:barback/barback.dart';
+import 'transformer_config.dart';
+class ExcludingTransformer extends Transformer {
+  static Transformer wrap(Transformer inner, TransformerConfig config) {
+    if (!config.hasExclusions) return inner;
+    if (inner is LazyTransformer) {
+      return new _LazyExcludingTransformer(inner as LazyTransformer, config);
+    } else if (inner is DeclaringTransformer) {
+      return new _DeclaringExcludingTransformer(
+          inner as DeclaringTransformer,
+          config);
+    } else {
+      return new ExcludingTransformer._(inner, config);
+    }
+  }
+  final Transformer _inner;
+  final TransformerConfig _config;
+  ExcludingTransformer._(this._inner, this._config);
+  isPrimary(AssetId id) {
+    if (!_config.canTransform(id.path)) return false;
+    return _inner.isPrimary(id);
+  }
+  Future apply(Transform transform) => _inner.apply(transform);
+  String toString() => _inner.toString();
+}
+class _DeclaringExcludingTransformer extends ExcludingTransformer implements
+    DeclaringTransformer {
+  _DeclaringExcludingTransformer(DeclaringTransformer inner,
+      TransformerConfig config)
+      : super._(inner as Transformer, config);
+  Future declareOutputs(DeclaringTransform transform) =>
+      (_inner as DeclaringTransformer).declareOutputs(transform);
+}
+class _LazyExcludingTransformer extends _DeclaringExcludingTransformer
+    implements LazyTransformer {
+  _LazyExcludingTransformer(DeclaringTransformer inner,
+      TransformerConfig config)
+      : super(inner, config);
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/foreign_transformer.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/foreign_transformer.dart
new file mode 100644
index 0000000..d663fac
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/foreign_transformer.dart
@@ -0,0 +1,120 @@
+library pub.foreign_transformer;
+import 'dart:async';
+import 'dart:isolate';
+import 'package:barback/barback.dart';
+import '../../../asset/dart/serialize.dart';
+import 'excluding_transformer.dart';
+import 'excluding_aggregate_transformer.dart';
+import 'transformer_config.dart';
+class _ForeignTransformer extends Transformer {
+  final SendPort _port;
+  final String _toString;
+  _ForeignTransformer(Map map)
+      : _port = map['port'],
+        _toString = map['toString'];
+  Future<bool> isPrimary(AssetId id) {
+    return call(_port, {
+      'type': 'isPrimary',
+      'id': serializeId(id)
+    });
+  }
+  Future apply(Transform transform) {
+    return call(_port, {
+      'type': 'apply',
+      'transform': serializeTransform(transform)
+    });
+  }
+  String toString() => _toString;
+}
+class _ForeignDeclaringTransformer extends _ForeignTransformer implements
+    DeclaringTransformer {
+  _ForeignDeclaringTransformer(Map map) : super(map);
+  Future declareOutputs(DeclaringTransform transform) {
+    return call(_port, {
+      'type': 'declareOutputs',
+      'transform': serializeDeclaringTransform(transform)
+    });
+  }
+}
+class _ForeignLazyTransformer extends _ForeignDeclaringTransformer implements
+    LazyTransformer {
+  _ForeignLazyTransformer(Map map) : super(map);
+}
+class _ForeignAggregateTransformer extends AggregateTransformer {
+  final SendPort _port;
+  final String _toString;
+  _ForeignAggregateTransformer(Map map)
+      : _port = map['port'],
+        _toString = map['toString'];
+  Future<String> classifyPrimary(AssetId id) {
+    return call(_port, {
+      'type': 'classifyPrimary',
+      'id': serializeId(id)
+    });
+  }
+  Future apply(AggregateTransform transform) {
+    return call(_port, {
+      'type': 'apply',
+      'transform': serializeAggregateTransform(transform)
+    });
+  }
+  String toString() => _toString;
+}
+class _ForeignDeclaringAggregateTransformer extends _ForeignAggregateTransformer
+    implements DeclaringAggregateTransformer {
+  _ForeignDeclaringAggregateTransformer(Map map) : super(map);
+  Future declareOutputs(DeclaringAggregateTransform transform) {
+    return call(_port, {
+      'type': 'declareOutputs',
+      'transform': serializeDeclaringAggregateTransform(transform)
+    });
+  }
+}
+class _ForeignLazyAggregateTransformer extends
+    _ForeignDeclaringAggregateTransformer implements LazyAggregateTransformer {
+  _ForeignLazyAggregateTransformer(Map map) : super(map);
+}
+class _ForeignGroup implements TransformerGroup {
+  final Iterable<Iterable> phases;
+  final String _toString;
+  _ForeignGroup(TransformerConfig config, Map map)
+      : phases = map['phases'].map((phase) {
+        return phase.map(
+            (transformer) => deserializeTransformerLike(transformer, config)).toList();
+      }).toList(),
+        _toString = map['toString'];
+  String toString() => _toString;
+}
+deserializeTransformerLike(Map map, TransformerConfig config) {
+  var transformer;
+  switch (map['type']) {
+    case 'TransformerGroup':
+      return new _ForeignGroup(config, map);
+    case 'Transformer':
+      transformer = new _ForeignTransformer(map);
+      break;
+    case 'DeclaringTransformer':
+      transformer = new _ForeignDeclaringTransformer(map);
+      break;
+    case 'LazyTransformer':
+      transformer = new _ForeignLazyTransformer(map);
+      break;
+    case 'AggregateTransformer':
+      transformer = new _ForeignAggregateTransformer(map);
+      break;
+    case 'DeclaringAggregateTransformer':
+      transformer = new _ForeignDeclaringAggregateTransformer(map);
+      break;
+    case 'LazyAggregateTransformer':
+      transformer = new _ForeignLazyAggregateTransformer(map);
+      break;
+    default:
+      assert(false);
+  }
+  if (transformer is Transformer) {
+    return ExcludingTransformer.wrap(transformer, config);
+  } else {
+    assert(transformer is AggregateTransformer);
+    return ExcludingAggregateTransformer.wrap(transformer, config);
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/load_all_transformers.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/load_all_transformers.dart
new file mode 100644
index 0000000..94127b0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/load_all_transformers.dart
@@ -0,0 +1,168 @@
+library pub.load_all_transformers;
+import 'dart:async';
+import 'package:barback/barback.dart';
+import '../log.dart' as log;
+import '../package_graph.dart';
+import '../utils.dart';
+import 'asset_environment.dart';
+import 'barback_server.dart';
+import 'dart2js_transformer.dart';
+import 'excluding_transformer.dart';
+import 'rewrite_import_transformer.dart';
+import 'transformer_config.dart';
+import 'transformer_id.dart';
+import 'transformer_isolate.dart';
+import 'transformers_needed_by_transformers.dart';
+Future loadAllTransformers(AssetEnvironment environment,
+    BarbackServer transformerServer) {
+  var transformersNeededByTransformers =
+      computeTransformersNeededByTransformers(environment.graph);
+  var buffer = new StringBuffer();
+  buffer.writeln("Transformer dependencies:");
+  transformersNeededByTransformers.forEach((id, dependencies) {
+    if (dependencies.isEmpty) {
+      buffer.writeln("$id: -");
+    } else {
+      buffer.writeln("$id: ${toSentence(dependencies)}");
+    }
+  });
+  log.fine(buffer);
+  var phasedTransformers = _phaseTransformers(transformersNeededByTransformers);
+  var packagesThatUseTransformers =
+      _packagesThatUseTransformers(environment.graph);
+  var loader = new _TransformerLoader(environment, transformerServer);
+  var rewrite = new RewriteImportTransformer();
+  for (var package in environment.packages) {
+    environment.barback.updateTransformers(package, [[rewrite]]);
+  }
+  environment.barback.updateTransformers(r'$pub', [[rewrite]]);
+  return Future.forEach(phasedTransformers, (phase) {
+    return loader.load(phase).then((_) {
+      var packagesToUpdate =
+          unionAll(phase.map((id) => packagesThatUseTransformers[id]));
+      return Future.wait(packagesToUpdate.map((packageName) {
+        var package = environment.graph.packages[packageName];
+        return loader.transformersForPhases(
+            package.pubspec.transformers).then((phases) {
+          phases.insert(0, new Set.from([rewrite]));
+          environment.barback.updateTransformers(packageName, phases);
+        });
+      }));
+    });
+  }).then((_) {
+    return Future.wait(environment.graph.packages.values.map((package) {
+      return loader.transformersForPhases(
+          package.pubspec.transformers).then((phases) {
+        var transformers = environment.getBuiltInTransformers(package);
+        if (transformers != null) phases.add(transformers);
+        newFuture(
+            () => environment.barback.updateTransformers(package.name, phases));
+      });
+    }));
+  });
+}
+List<Set<TransformerId>> _phaseTransformers(Map<TransformerId,
+    Set<TransformerId>> transformerDependencies) {
+  var phaseNumbers = {};
+  var phases = [];
+  phaseNumberFor(id) {
+    if (phaseNumbers.containsKey(id)) return phaseNumbers[id];
+    var dependencies = transformerDependencies[id];
+    phaseNumbers[id] =
+        dependencies.isEmpty ? 0 : maxAll(dependencies.map(phaseNumberFor)) + 1;
+    return phaseNumbers[id];
+  }
+  for (var id in transformerDependencies.keys) {
+    var phaseNumber = phaseNumberFor(id);
+    if (phases.length <= phaseNumber) phases.length = phaseNumber + 1;
+    if (phases[phaseNumber] == null) phases[phaseNumber] = new Set();
+    phases[phaseNumber].add(id);
+  }
+  return phases;
+}
+Map<TransformerId, Set<String>> _packagesThatUseTransformers(PackageGraph graph)
+    {
+  var results = {};
+  for (var package in graph.packages.values) {
+    for (var phase in package.pubspec.transformers) {
+      for (var config in phase) {
+        results.putIfAbsent(config.id, () => new Set()).add(package.name);
+      }
+    }
+  }
+  return results;
+}
+class _TransformerLoader {
+  final AssetEnvironment _environment;
+  final BarbackServer _transformerServer;
+  final _isolates = new Map<TransformerId, TransformerIsolate>();
+  final _transformers = new Map<TransformerConfig, Set<Transformer>>();
+  final _transformerUsers = new Map<TransformerId, Set<String>>();
+  _TransformerLoader(this._environment, this._transformerServer) {
+    for (var package in _environment.graph.packages.values) {
+      for (var config in unionAll(package.pubspec.transformers)) {
+        _transformerUsers.putIfAbsent(
+            config.id,
+            () => new Set<String>()).add(package.name);
+      }
+    }
+  }
+  Future load(Iterable<TransformerId> ids) {
+    ids = ids.where((id) => !_isolates.containsKey(id)).toList();
+    if (ids.isEmpty) return new Future.value();
+    return log.progress("Loading ${toSentence(ids)} transformers", () {
+      return TransformerIsolate.spawn(_environment, _transformerServer, ids);
+    }).then((isolate) {
+      for (var id in ids) {
+        _isolates[id] = isolate;
+      }
+    });
+  }
+  Future<Set<Transformer>> transformersFor(TransformerConfig config) {
+    if (_transformers.containsKey(config)) {
+      return new Future.value(_transformers[config]);
+    } else if (_isolates.containsKey(config.id)) {
+      return _isolates[config.id].create(config).then((transformers) {
+        if (transformers.isNotEmpty) {
+          _transformers[config] = transformers;
+          return transformers;
+        }
+        var message = "No transformers";
+        if (config.configuration.isNotEmpty) {
+          message += " that accept configuration";
+        }
+        var location;
+        if (config.id.path == null) {
+          location =
+              'package:${config.id.package}/transformer.dart or '
+                  'package:${config.id.package}/${config.id.package}.dart';
+        } else {
+          location = 'package:$config.dart';
+        }
+        var users = toSentence(ordered(_transformerUsers[config.id]));
+        fail("$message were defined in $location,\n" "required by $users.");
+      });
+    } else if (config.id.package != '\$dart2js') {
+      return new Future.value(new Set());
+    }
+    var transformer;
+    try {
+      transformer = new Dart2JSTransformer.withSettings(
+          _environment,
+          new BarbackSettings(config.configuration, _environment.mode));
+    } on FormatException catch (error, stackTrace) {
+      fail(error.message, error, stackTrace);
+    }
+    _transformers[config] =
+        new Set.from([ExcludingTransformer.wrap(transformer, config)]);
+    return new Future.value(_transformers[config]);
+  }
+  Future<List<Set<Transformer>>>
+      transformersForPhases(Iterable<Set<TransformerConfig>> phases) {
+    return Future.wait(phases.map((phase) {
+      return waitAndPrintErrors(phase.map(transformersFor)).then(unionAll);
+    })).then((phases) {
+      return phases.toList();
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/pub_package_provider.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/pub_package_provider.dart
new file mode 100644
index 0000000..52250d4
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/pub_package_provider.dart
@@ -0,0 +1,45 @@
+library pub.pub_package_provider;
+import 'dart:async';
+import 'package:barback/barback.dart';
+import 'package:path/path.dart' as path;
+import '../io.dart';
+import '../package_graph.dart';
+import '../preprocess.dart';
+import '../sdk.dart' as sdk;
+import '../utils.dart';
+class PubPackageProvider implements PackageProvider {
+  final PackageGraph _graph;
+  final List<String> packages;
+  PubPackageProvider(PackageGraph graph, [Iterable<String> packages])
+      : _graph = graph,
+        packages = [
+          r"$pub",
+          r"$sdk"]..addAll(packages == null ? graph.packages.keys : packages);
+  Future<Asset> getAsset(AssetId id) {
+    if (id.package == r'$pub') {
+      var components = path.url.split(id.path);
+      assert(components.isNotEmpty);
+      assert(components.first == 'lib');
+      components[0] = 'dart';
+      var file = assetPath(path.joinAll(components));
+      if (!_graph.packages.containsKey("barback")) {
+        return new Future.value(new Asset.fromPath(id, file));
+      }
+      var versions =
+          mapMap(_graph.packages, value: (_, package) => package.version);
+      var contents = readTextFile(file);
+      contents = preprocess(contents, versions, path.toUri(file));
+      return new Future.value(new Asset.fromString(id, contents));
+    }
+    if (id.package == r'$sdk') {
+      var parts = path.split(path.fromUri(id.path));
+      assert(parts.isNotEmpty && parts[0] == 'lib');
+      parts = parts.skip(1);
+      var file = path.join(sdk.rootDirectory, path.joinAll(parts));
+      return new Future.value(new Asset.fromPath(id, file));
+    }
+    var nativePath = path.fromUri(id.path);
+    var file = path.join(_graph.packages[id.package].dir, nativePath);
+    return new Future.value(new Asset.fromPath(id, file));
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/rewrite_import_transformer.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/rewrite_import_transformer.dart
new file mode 100644
index 0000000..bea129e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/rewrite_import_transformer.dart
@@ -0,0 +1,26 @@
+library pub.rewrite_import_transformer;
+import 'dart:async';
+import 'package:barback/barback.dart';
+import '../dart.dart';
+class RewriteImportTransformer extends Transformer {
+  String get allowedExtensions => '.dart';
+  Future apply(Transform transform) {
+    return transform.primaryInput.readAsString().then((contents) {
+      var directives =
+          parseImportsAndExports(contents, name: transform.primaryInput.id.toString());
+      var buffer = new StringBuffer();
+      var index = 0;
+      for (var directive in directives) {
+        var uri = Uri.parse(directive.uri.stringValue);
+        if (uri.scheme != 'package') continue;
+        buffer
+            ..write(contents.substring(index, directive.uri.literal.offset))
+            ..write('"/packages/${uri.path}"');
+        index = directive.uri.literal.end;
+      }
+      buffer.write(contents.substring(index, contents.length));
+      transform.addOutput(
+          new Asset.fromString(transform.primaryInput.id, buffer.toString()));
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/source_directory.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/source_directory.dart
new file mode 100644
index 0000000..14b0646
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/source_directory.dart
@@ -0,0 +1,35 @@
+library pub.barback.source_directory;
+import 'dart:async';
+import 'package:watcher/watcher.dart';
+import 'asset_environment.dart';
+import 'barback_server.dart';
+class SourceDirectory {
+  final AssetEnvironment _environment;
+  final String directory;
+  final String hostname;
+  final int port;
+  Future<BarbackServer> get server => _serverCompleter.future;
+  final _serverCompleter = new Completer<BarbackServer>();
+  StreamSubscription<WatchEvent> watchSubscription;
+  SourceDirectory(this._environment, this.directory, this.hostname, this.port);
+  Future<BarbackServer> serve() {
+    return BarbackServer.bind(
+        _environment,
+        hostname,
+        port,
+        rootDirectory: directory).then((server) {
+      _serverCompleter.complete(server);
+      return server;
+    });
+  }
+  Future close() {
+    return server.then((server) {
+      var futures = [server.close()];
+      if (watchSubscription != null) {
+        var cancel = watchSubscription.cancel();
+        if (cancel != null) futures.add(cancel);
+      }
+      return Future.wait(futures);
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_config.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_config.dart
new file mode 100644
index 0000000..1969c5c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_config.dart
@@ -0,0 +1,75 @@
+library pub.barback.transformer_config;
+import 'package:path/path.dart' as p;
+import 'package:source_span/source_span.dart';
+import 'package:yaml/yaml.dart';
+import 'transformer_id.dart';
+class TransformerConfig {
+  final TransformerId id;
+  final Map configuration;
+  final SourceSpan span;
+  final Set<String> includes;
+  final Set<String> excludes;
+  bool get hasExclusions => includes != null || excludes != null;
+  bool get canTransformPublicFiles {
+    if (includes == null) return true;
+    return includes.any(
+        (path) => p.url.isWithin('lib', path) || p.url.isWithin('bin', path));
+  }
+  factory TransformerConfig.parse(String identifier, SourceSpan identifierSpan,
+      YamlMap configuration) =>
+      new TransformerConfig(
+          new TransformerId.parse(identifier, identifierSpan),
+          configuration);
+  factory TransformerConfig(TransformerId id, YamlMap configurationNode) {
+    parseField(key) {
+      if (!configurationNode.containsKey(key)) return null;
+      var fieldNode = configurationNode.nodes[key];
+      var field = fieldNode.value;
+      if (field is String) return new Set.from([field]);
+      if (field is List) {
+        for (var node in field.nodes) {
+          if (node.value is String) continue;
+          throw new SourceSpanFormatException(
+              '"$key" field may contain only strings.',
+              node.span);
+        }
+        return new Set.from(field);
+      } else {
+        throw new SourceSpanFormatException(
+            '"$key" field must be a string or list.',
+            fieldNode.span);
+      }
+    }
+    var includes = null;
+    var excludes = null;
+    var configuration;
+    var span;
+    if (configurationNode == null) {
+      configuration = {};
+      span = id.span;
+    } else {
+      configuration = new Map.from(configurationNode);
+      span = configurationNode.span;
+      includes = parseField("\$include");
+      configuration.remove("\$include");
+      excludes = parseField("\$exclude");
+      configuration.remove("\$exclude");
+      for (var key in configuration.keys) {
+        if (key is! String || !key.startsWith(r'$')) continue;
+        throw new SourceSpanFormatException(
+            'Unknown reserved field.',
+            configurationNode.nodes[key].span);
+      }
+    }
+    return new TransformerConfig._(id, configuration, span, includes, excludes);
+  }
+  TransformerConfig._(this.id, this.configuration, this.span, this.includes,
+      this.excludes);
+  String toString() => id.toString();
+  bool canTransform(String pathWithinPackage) {
+    if (excludes != null) {
+      if (excludes.contains(pathWithinPackage)) return false;
+    }
+    return includes == null || includes.contains(pathWithinPackage);
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_id.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_id.dart
new file mode 100644
index 0000000..c209c70
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_id.dart
@@ -0,0 +1,53 @@
+library pub.barback.transformer_id;
+import 'dart:async';
+import 'package:barback/barback.dart';
+import 'package:path/path.dart' as p;
+import 'package:source_span/source_span.dart';
+import '../io.dart';
+import '../utils.dart';
+const _BUILT_IN_TRANSFORMERS = const ['\$dart2js'];
+class TransformerId {
+  final String package;
+  final String path;
+  final SourceSpan span;
+  bool get isBuiltInTransformer => package.startsWith('\$');
+  factory TransformerId.parse(String identifier, SourceSpan span) {
+    if (identifier.isEmpty) {
+      throw new FormatException('Invalid library identifier: "".');
+    }
+    var parts = split1(identifier, "/");
+    if (parts.length == 1) {
+      return new TransformerId(parts.single, null, span);
+    }
+    return new TransformerId(parts.first, parts.last, span);
+  }
+  TransformerId(this.package, this.path, this.span) {
+    if (!package.startsWith('\$')) return;
+    if (_BUILT_IN_TRANSFORMERS.contains(package)) return;
+    throw new SourceSpanFormatException(
+        'Unsupported built-in transformer $package.',
+        span);
+  }
+  bool operator ==(other) =>
+      other is TransformerId && other.package == package && other.path == path;
+  int get hashCode => package.hashCode ^ path.hashCode;
+  String toString() => path == null ? package : '$package/$path';
+  Future<AssetId> getAssetId(Barback barback) {
+    if (path != null) {
+      return new Future.value(new AssetId(package, 'lib/$path.dart'));
+    }
+    var transformerAsset = new AssetId(package, 'lib/transformer.dart');
+    return barback.getAssetById(
+        transformerAsset).then(
+            (_) =>
+                transformerAsset).catchError(
+                    (e) => new AssetId(package, 'lib/$package.dart'),
+                    test: (e) => e is AssetNotFoundException);
+  }
+  String getFullPath(String packageDir) {
+    if (path != null) return p.join(packageDir, 'lib', p.fromUri('$path.dart'));
+    var transformerPath = p.join(packageDir, 'lib', 'transformer.dart');
+    if (fileExists(transformerPath)) return transformerPath;
+    return p.join(packageDir, 'lib', '$package.dart');
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_isolate.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_isolate.dart
new file mode 100644
index 0000000..7e7f14c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_isolate.dart
@@ -0,0 +1,84 @@
+library pub.transformer_isolate;
+import 'dart:async';
+import 'dart:convert';
+import 'dart:isolate';
+import 'package:barback/barback.dart';
+import 'package:source_span/source_span.dart';
+import 'package:stack_trace/stack_trace.dart';
+import '../../../asset/dart/serialize.dart';
+import '../barback.dart';
+import '../exceptions.dart';
+import '../dart.dart' as dart;
+import '../log.dart' as log;
+import '../utils.dart';
+import 'asset_environment.dart';
+import 'barback_server.dart';
+import 'foreign_transformer.dart';
+import 'transformer_config.dart';
+import 'transformer_id.dart';
+class TransformerIsolate {
+  final SendPort _port;
+  final Map<TransformerId, Uri> _idsToUrls;
+  final BarbackMode _mode;
+  static Future<TransformerIsolate> spawn(AssetEnvironment environment,
+      BarbackServer transformerServer, List<TransformerId> ids) {
+    return mapFromIterableAsync(ids, value: (id) {
+      return id.getAssetId(environment.barback);
+    }).then((idsToAssetIds) {
+      var baseUrl = transformerServer.url;
+      var idsToUrls = mapMap(idsToAssetIds, value: (id, assetId) {
+        var path = assetId.path.replaceFirst('lib/', '');
+        return baseUrl.resolve('packages/${id.package}/$path');
+      });
+      var code = new StringBuffer();
+      code.writeln("import 'dart:isolate';");
+      for (var url in idsToUrls.values) {
+        code.writeln("import '$url';");
+      }
+      code.writeln(
+          "import " "r'$baseUrl/packages/\$pub/transformer_isolate.dart';");
+      code.writeln(
+          "void main(_, SendPort replyTo) => loadTransformers(replyTo);");
+      log.fine("Loading transformers from $ids");
+      var port = new ReceivePort();
+      return dart.runInIsolate(
+          code.toString(),
+          port.sendPort).then((_) => port.first).then((sendPort) {
+        return new TransformerIsolate._(sendPort, environment.mode, idsToUrls);
+      }).catchError((error, stackTrace) {
+        if (error is! CrossIsolateException) throw error;
+        if (error.type != 'IsolateSpawnException') throw error;
+        var firstErrorLine = error.message.split('\n')[1];
+        var missingTransformer = idsToUrls.keys.firstWhere(
+            (id) =>
+                firstErrorLine.startsWith("Uncaught Error: Failure getting ${idsToUrls[id]}:"),
+            orElse: () => throw error);
+        var packageUri = idToPackageUri(idsToAssetIds[missingTransformer]);
+        fail('Transformer library "$packageUri" not found.', error, stackTrace);
+      });
+    });
+  }
+  TransformerIsolate._(this._port, this._mode, this._idsToUrls);
+  Future<Set<Transformer>> create(TransformerConfig config) {
+    return call(_port, {
+      'library': _idsToUrls[config.id].toString(),
+      'mode': _mode.name,
+      'configuration': JSON.encode(config.configuration)
+    }).then((transformers) {
+      transformers = transformers.map(
+          (transformer) => deserializeTransformerLike(transformer, config)).toSet();
+      log.fine("Transformers from $config: $transformers");
+      return transformers;
+    }).catchError((error, stackTrace) {
+      throw new TransformerLoadError(error, config.span);
+    });
+  }
+}
+class TransformerLoadError extends SourceSpanException implements
+    WrappedException {
+  final CrossIsolateException innerError;
+  Chain get innerChain => innerError.stackTrace;
+  TransformerLoadError(CrossIsolateException error, SourceSpan span)
+      : innerError = error,
+        super("Error loading transformer: ${error.message}", span);
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/transformers_needed_by_transformers.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/transformers_needed_by_transformers.dart
new file mode 100644
index 0000000..1830c9b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/transformers_needed_by_transformers.dart
@@ -0,0 +1,228 @@
+library pub.barback.transformers_needed_by_transformers;
+import 'package:path/path.dart' as p;
+import '../dart.dart';
+import '../io.dart';
+import '../package.dart';
+import '../package_graph.dart';
+import '../utils.dart';
+import 'cycle_exception.dart';
+import 'transformer_config.dart';
+import 'transformer_id.dart';
+Map<TransformerId, Set<TransformerId>>
+    computeTransformersNeededByTransformers(PackageGraph graph) {
+  var result = {};
+  var computer = new _DependencyComputer(graph);
+  for (var packageName in ordered(graph.packages.keys)) {
+    var package = graph.packages[packageName];
+    for (var phase in package.pubspec.transformers) {
+      for (var config in phase) {
+        var id = config.id;
+        if (id.isBuiltInTransformer) continue;
+        if (id.package != graph.entrypoint.root.name &&
+            !config.canTransformPublicFiles) {
+          continue;
+        }
+        result[id] = computer.transformersNeededByTransformer(id);
+      }
+    }
+  }
+  return result;
+}
+class _DependencyComputer {
+  final PackageGraph _graph;
+  final _loadingPackageComputers = new Set<String>();
+  final _packageComputers = new Map<String, _PackageDependencyComputer>();
+  final _transformersNeededByPackages = new Map<String, Set<TransformerId>>();
+  _DependencyComputer(this._graph) {
+    ordered(_graph.packages.keys).forEach(_loadPackageComputer);
+  }
+  Set<TransformerId> transformersNeededByTransformer(TransformerId id) {
+    if (id.isBuiltInTransformer) return new Set();
+    _loadPackageComputer(id.package);
+    return _packageComputers[id.package].transformersNeededByTransformer(id);
+  }
+  Set<TransformerId> transformersNeededByPackageUri(Uri packageUri) {
+    var components = p.split(p.fromUri(packageUri.path));
+    var packageName = components.first;
+    var package = _graph.packages[packageName];
+    if (package == null) {
+      fail(
+          'A transformer imported unknown package "$packageName" (in ' '"$packageUri").');
+    }
+    var library = p.join(package.dir, 'lib', p.joinAll(components.skip(1)));
+    _loadPackageComputer(packageName);
+    return _packageComputers[packageName].transformersNeededByLibrary(library);
+  }
+  Set<TransformerId> transformersNeededByPackage(String rootPackage) {
+    if (_transformersNeededByPackages.containsKey(rootPackage)) {
+      return _transformersNeededByPackages[rootPackage];
+    }
+    var results = new Set();
+    var seen = new Set();
+    traversePackage(packageName) {
+      if (seen.contains(packageName)) return;
+      seen.add(packageName);
+      var package = _graph.packages[packageName];
+      for (var phase in package.pubspec.transformers) {
+        for (var config in phase) {
+          var id = config.id;
+          if (id.isBuiltInTransformer) continue;
+          if (_loadingPackageComputers.contains(id.package)) {
+            throw new CycleException("$packageName is transformed by $id");
+          }
+          results.add(id);
+        }
+      }
+      var dependencies = packageName == _graph.entrypoint.root.name ?
+          package.immediateDependencies :
+          package.dependencies;
+      for (var dep in dependencies) {
+        try {
+          traversePackage(dep.name);
+        } on CycleException catch (error) {
+          throw error.prependStep("$packageName depends on ${dep.name}");
+        }
+      }
+    }
+    traversePackage(rootPackage);
+    _transformersNeededByPackages[rootPackage] = results;
+    return results;
+  }
+  void _loadPackageComputer(String packageName) {
+    if (_loadingPackageComputers.contains(packageName)) {
+      throw new CycleException();
+    }
+    if (_packageComputers.containsKey(packageName)) return;
+    _loadingPackageComputers.add(packageName);
+    _packageComputers[packageName] =
+        new _PackageDependencyComputer(this, packageName);
+    _loadingPackageComputers.remove(packageName);
+  }
+}
+class _PackageDependencyComputer {
+  final _DependencyComputer _dependencyComputer;
+  final Package _package;
+  final _applicableTransformers = new Set<TransformerConfig>();
+  final _directives = new Map<Uri, Set<Uri>>();
+  final _activeLibraries = new Set<String>();
+  final _transformersNeededByTransformers =
+      new Map<TransformerId, Set<TransformerId>>();
+  final _transitiveExternalDirectives = new Map<String, Set<Uri>>();
+  _PackageDependencyComputer(_DependencyComputer dependencyComputer,
+      String packageName)
+      : _dependencyComputer = dependencyComputer,
+        _package = dependencyComputer._graph.packages[packageName] {
+    for (var phase in _package.pubspec.transformers) {
+      for (var config in phase) {
+        var id = config.id;
+        try {
+          if (id.package != _package.name) {
+            _dependencyComputer.transformersNeededByTransformer(id);
+          } else {
+            _transformersNeededByTransformers[id] =
+                transformersNeededByLibrary(id.getFullPath(_package.dir));
+          }
+        } on CycleException catch (error) {
+          throw error.prependStep("$packageName is transformed by $id");
+        }
+      }
+      _transitiveExternalDirectives.clear();
+      _applicableTransformers.addAll(phase);
+    }
+  }
+  Set<TransformerId> transformersNeededByTransformer(TransformerId id) {
+    assert(id.package == _package.name);
+    if (_transformersNeededByTransformers.containsKey(id)) {
+      return _transformersNeededByTransformers[id];
+    }
+    _transformersNeededByTransformers[id] =
+        transformersNeededByLibrary(id.getFullPath(_package.dir));
+    return _transformersNeededByTransformers[id];
+  }
+  Set<TransformerId> transformersNeededByLibrary(String library) {
+    library = p.normalize(library);
+    if (_activeLibraries.contains(library)) return new Set();
+    _activeLibraries.add(library);
+    try {
+      var externalDirectives = _getTransitiveExternalDirectives(library);
+      if (externalDirectives == null) {
+        var rootName = _dependencyComputer._graph.entrypoint.root.name;
+        var dependencies = _package.name == rootName ?
+            _package.immediateDependencies :
+            _package.dependencies;
+        return _applicableTransformers.map(
+            (config) => config.id).toSet().union(unionAll(dependencies.map((dep) {
+          try {
+            return _dependencyComputer.transformersNeededByPackage(dep.name);
+          } on CycleException catch (error) {
+            throw error.prependStep("${_package.name} depends on ${dep.name}");
+          }
+        })));
+      } else {
+        return unionAll(externalDirectives.map((uri) {
+          try {
+            return _dependencyComputer.transformersNeededByPackageUri(uri);
+          } on CycleException catch (error) {
+            var packageName = p.url.split(uri.path).first;
+            throw error.prependStep("${_package.name} depends on $packageName");
+          }
+        }));
+      }
+    } finally {
+      _activeLibraries.remove(library);
+    }
+  }
+  Set<Uri> _getTransitiveExternalDirectives(String rootLibrary) {
+    rootLibrary = p.normalize(rootLibrary);
+    if (_transitiveExternalDirectives.containsKey(rootLibrary)) {
+      return _transitiveExternalDirectives[rootLibrary];
+    }
+    var results = new Set();
+    var seen = new Set();
+    traverseLibrary(library) {
+      library = p.normalize(library);
+      if (seen.contains(library)) return true;
+      seen.add(library);
+      var directives = _getDirectives(library);
+      if (directives == null) return false;
+      for (var uri in directives) {
+        var path;
+        if (uri.scheme == 'package') {
+          var components = p.split(p.fromUri(uri.path));
+          if (components.first != _package.name) {
+            results.add(uri);
+            continue;
+          }
+          path = p.join(_package.dir, 'lib', p.joinAll(components.skip(1)));
+        } else if (uri.scheme == '' || uri.scheme == 'file') {
+          path = p.join(p.dirname(library), p.fromUri(uri));
+        } else {
+          continue;
+        }
+        if (!traverseLibrary(path)) return false;
+      }
+      return true;
+    }
+    _transitiveExternalDirectives[rootLibrary] =
+        traverseLibrary(rootLibrary) ? results : null;
+    return _transitiveExternalDirectives[rootLibrary];
+  }
+  Set<Uri> _getDirectives(String library) {
+    var libraryUri = p.toUri(p.normalize(library));
+    var relative = p.toUri(p.relative(library, from: _package.dir)).path;
+    if (_applicableTransformers.any(
+        (config) => config.canTransform(relative))) {
+      _directives[libraryUri] = null;
+      return null;
+    }
+    if (_directives.containsKey(libraryUri)) return _directives[libraryUri];
+    if (!fileExists(library)) {
+      _directives[libraryUri] = null;
+      return null;
+    }
+    _directives[libraryUri] = parseImportsAndExports(
+        readTextFile(library),
+        name: library).map((directive) => Uri.parse(directive.uri.stringValue)).toSet();
+    return _directives[libraryUri];
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/web_socket_api.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/web_socket_api.dart
new file mode 100644
index 0000000..8f495d1
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/web_socket_api.dart
@@ -0,0 +1,118 @@
+library pub.barback.web_socket_api;
+import 'dart:async';
+import 'dart:io';
+import 'package:http_parser/http_parser.dart';
+import 'package:path/path.dart' as path;
+import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
+import '../exit_codes.dart' as exit_codes;
+import '../io.dart';
+import '../log.dart' as log;
+import '../utils.dart';
+import 'asset_environment.dart';
+class WebSocketApi {
+  final AssetEnvironment _environment;
+  final json_rpc.Server _server;
+  bool _exitOnClose = false;
+  WebSocketApi(CompatibleWebSocket socket, this._environment)
+      : _server = new json_rpc.Server(socket) {
+    _server.registerMethod("urlToAssetId", _urlToAssetId);
+    _server.registerMethod("pathToUrls", _pathToUrls);
+    _server.registerMethod("serveDirectory", _serveDirectory);
+    _server.registerMethod("unserveDirectory", _unserveDirectory);
+    _server.registerMethod("exitOnClose", () {
+      _exitOnClose = true;
+    });
+  }
+  Future listen() {
+    return _server.listen().then((_) {
+      if (!_exitOnClose) return;
+      log.message("WebSocket connection closed, terminating.");
+      flushThenExit(exit_codes.SUCCESS);
+    });
+  }
+  Future<Map> _urlToAssetId(json_rpc.Parameters params) {
+    var url = params["url"].asUri;
+    var line = params["line"].asIntOr(null);
+    return _environment.getAssetIdForUrl(url).then((id) {
+      if (id == null) {
+        throw new json_rpc.RpcException(
+            _Error.NOT_SERVED,
+            '"${url.host}:${url.port}" is not being served by pub.');
+      }
+      var result = {
+        "package": id.package,
+        "path": id.path
+      };
+      if (line != null) result["line"] = line;
+      return result;
+    });
+  }
+  Future<Map> _pathToUrls(json_rpc.Parameters params) {
+    var assetPath = params["path"].asString;
+    var line = params["line"].asIntOr(null);
+    return _environment.getUrlsForAssetPath(assetPath).then((urls) {
+      if (urls.isEmpty) {
+        throw new json_rpc.RpcException(
+            _Error.NOT_SERVED,
+            'Asset path "$assetPath" is not currently being served.');
+      }
+      var result = {
+        "urls": urls.map((url) => url.toString()).toList()
+      };
+      if (line != null) result["line"] = line;
+      return result;
+    });
+  }
+  Future<Map> _serveDirectory(json_rpc.Parameters params) {
+    var rootDirectory = _validateRelativePath(params, "path");
+    return _environment.serveDirectory(rootDirectory).then((server) {
+      return {
+        "url": server.url.toString()
+      };
+    }).catchError((error) {
+      if (error is! OverlappingSourceDirectoryException) throw error;
+      var dir = pluralize(
+          "directory",
+          error.overlappingDirectories.length,
+          plural: "directories");
+      var overlapping =
+          toSentence(error.overlappingDirectories.map((dir) => '"$dir"'));
+      print("data: ${error.overlappingDirectories}");
+      throw new json_rpc.RpcException(
+          _Error.OVERLAPPING,
+          'Path "$rootDirectory" overlaps already served $dir $overlapping.',
+          data: {
+        "directories": error.overlappingDirectories
+      });
+    });
+  }
+  Future<Map> _unserveDirectory(json_rpc.Parameters params) {
+    var rootDirectory = _validateRelativePath(params, "path");
+    return _environment.unserveDirectory(rootDirectory).then((url) {
+      if (url == null) {
+        throw new json_rpc.RpcException(
+            _Error.NOT_SERVED,
+            'Directory "$rootDirectory" is not bound to a server.');
+      }
+      return {
+        "url": url.toString()
+      };
+    });
+  }
+  String _validateRelativePath(json_rpc.Parameters params, String key) {
+    var pathString = params[key].asString;
+    if (!path.isRelative(pathString)) {
+      throw new json_rpc.RpcException.invalidParams(
+          '"$key" must be a relative path. Got "$pathString".');
+    }
+    if (!path.isWithin(".", pathString)) {
+      throw new json_rpc.RpcException.invalidParams(
+          '"$key" cannot reach out of its containing directory. ' 'Got "$pathString".');
+    }
+    return pathString;
+  }
+}
+class _Error {
+  static const NOT_SERVED = 1;
+  static const OVERLAPPING = 2;
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command.dart b/sdk/lib/_internal/pub_generated/lib/src/command.dart
new file mode 100644
index 0000000..5efe0f7
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command.dart
@@ -0,0 +1,223 @@
+library pub.command;
+import 'dart:async';
+import 'dart:math' as math;
+import 'package:args/args.dart';
+import 'package:path/path.dart' as path;
+import 'command/build.dart';
+import 'command/cache.dart';
+import 'command/deps.dart';
+import 'command/downgrade.dart';
+import 'command/get.dart';
+import 'command/global.dart';
+import 'command/help.dart';
+import 'command/lish.dart';
+import 'command/list_package_dirs.dart';
+import 'command/run.dart';
+import 'command/serve.dart';
+import 'command/upgrade.dart';
+import 'command/uploader.dart';
+import 'command/version.dart';
+import 'entrypoint.dart';
+import 'exceptions.dart';
+import 'log.dart' as log;
+import 'global_packages.dart';
+import 'system_cache.dart';
+import 'utils.dart';
+abstract class PubCommand {
+  static final Map<String, PubCommand> mainCommands = _initCommands();
+  static final pubArgParser = _initArgParser();
+  static void printGlobalUsage() {
+    var buffer = new StringBuffer();
+    buffer.writeln('Pub is a package manager for Dart.');
+    buffer.writeln();
+    buffer.writeln('Usage: pub <command> [arguments]');
+    buffer.writeln();
+    buffer.writeln('Global options:');
+    buffer.writeln(pubArgParser.getUsage());
+    buffer.writeln();
+    buffer.write(_listCommands(mainCommands));
+    buffer.writeln();
+    buffer.writeln(
+        'Run "pub help [command]" for more information about a command.');
+    buffer.writeln(
+        'See http://dartlang.org/tools/pub for detailed documentation.');
+    log.message(buffer);
+  }
+  static void usageErrorWithCommands(Map<String, PubCommand> commands,
+      String message) {
+    throw new UsageException(message, _listCommands(commands));
+  }
+  static String _listCommands(Map<String, PubCommand> commands) {
+    if (commands.isEmpty) return "";
+    var names =
+        commands.keys.where((name) => !commands[name].aliases.contains(name));
+    var visible = names.where((name) => !commands[name].hidden);
+    if (visible.isNotEmpty) names = visible;
+    names = ordered(names);
+    var length = names.map((name) => name.length).reduce(math.max);
+    var isSubcommand = commands != mainCommands;
+    var buffer = new StringBuffer();
+    buffer.writeln('Available ${isSubcommand ? "sub" : ""}commands:');
+    for (var name in names) {
+      buffer.writeln(
+          '  ${padRight(name, length)}   '
+              '${commands[name].description.split("\n").first}');
+    }
+    return buffer.toString();
+  }
+  SystemCache get cache => _cache;
+  SystemCache _cache;
+  GlobalPackages get globals => _globals;
+  GlobalPackages _globals;
+  ArgResults get globalOptions => _globalOptions;
+  ArgResults _globalOptions;
+  ArgResults get commandOptions => _commandOptions;
+  ArgResults _commandOptions;
+  Entrypoint get entrypoint {
+    if (_entrypoint == null) {
+      _entrypoint = new Entrypoint(
+          path.current,
+          _cache,
+          packageSymlinks: globalOptions['package-symlinks']);
+    }
+    return _entrypoint;
+  }
+  Entrypoint _entrypoint;
+  String get description;
+  bool get hidden {
+    if (subcommands.isEmpty) return false;
+    return subcommands.values.every((subcommand) => subcommand.hidden);
+  }
+  String get usage;
+  String get docUrl => null;
+  bool get takesArguments => false;
+  bool get allowTrailingOptions => true;
+  final aliases = const <String>[];
+  ArgParser get commandParser => _commandParser;
+  ArgParser _commandParser;
+  final subcommands = <String, PubCommand>{};
+  bool get isOffline => false;
+  PubCommand() {
+    _commandParser = new ArgParser(allowTrailingOptions: allowTrailingOptions);
+    commandParser.addFlag(
+        'help',
+        abbr: 'h',
+        negatable: false,
+        help: 'Print usage information for this command.');
+  }
+  Future run(String cacheDir, ArgResults globalOptions, ArgResults options) {
+    _globalOptions = globalOptions;
+    _commandOptions = options;
+    _cache = new SystemCache.withSources(cacheDir, isOffline: isOffline);
+    _globals = new GlobalPackages(_cache);
+    return syncFuture(onRun);
+  }
+  Future onRun() {
+    assert(false);
+    return null;
+  }
+  void printUsage([String description]) {
+    if (description == null) description = this.description;
+    log.message('$description\n\n${_getUsage()}');
+  }
+  void usageError(String message) {
+    throw new UsageException(message, _getUsage());
+  }
+  int parseInt(String intString, String name) {
+    try {
+      return int.parse(intString);
+    } on FormatException catch (_) {
+      usageError('Could not parse $name "$intString".');
+    }
+  }
+  String _getUsage() {
+    var buffer = new StringBuffer();
+    buffer.write('Usage: $usage');
+    var commandUsage = commandParser.getUsage();
+    if (!commandUsage.isEmpty) {
+      buffer.writeln();
+      buffer.writeln(commandUsage);
+    }
+    if (subcommands.isNotEmpty) {
+      buffer.writeln();
+      buffer.write(_listCommands(subcommands));
+    }
+    buffer.writeln();
+    buffer.writeln('Run "pub help" to see global options.');
+    if (docUrl != null) {
+      buffer.writeln("See $docUrl for detailed documentation.");
+    }
+    return buffer.toString();
+  }
+}
+_initCommands() {
+  var commands = {
+    'build': new BuildCommand(),
+    'cache': new CacheCommand(),
+    'deps': new DepsCommand(),
+    'downgrade': new DowngradeCommand(),
+    'global': new GlobalCommand(),
+    'get': new GetCommand(),
+    'help': new HelpCommand(),
+    'list-package-dirs': new ListPackageDirsCommand(),
+    'publish': new LishCommand(),
+    'run': new RunCommand(),
+    'serve': new ServeCommand(),
+    'upgrade': new UpgradeCommand(),
+    'uploader': new UploaderCommand(),
+    'version': new VersionCommand()
+  };
+  for (var command in commands.values.toList()) {
+    for (var alias in command.aliases) {
+      commands[alias] = command;
+    }
+  }
+  return commands;
+}
+ArgParser _initArgParser() {
+  var argParser = new ArgParser(allowTrailingOptions: true);
+  argParser.addFlag(
+      'help',
+      abbr: 'h',
+      negatable: false,
+      help: 'Print this usage information.');
+  argParser.addFlag('version', negatable: false, help: 'Print pub version.');
+  argParser.addFlag(
+      'trace',
+      help: 'Print debugging information when an error occurs.');
+  argParser.addOption(
+      'verbosity',
+      help: 'Control output verbosity.',
+      allowed: ['normal', 'io', 'solver', 'all'],
+      allowedHelp: {
+    'normal': 'Show errors, warnings, and user messages.',
+    'io': 'Also show IO operations.',
+    'solver': 'Show steps during version resolution.',
+    'all': 'Show all output including internal tracing messages.'
+  });
+  argParser.addFlag(
+      'verbose',
+      abbr: 'v',
+      negatable: false,
+      help: 'Shortcut for "--verbosity=all".');
+  argParser.addFlag(
+      'with-prejudice',
+      hide: !isAprilFools,
+      negatable: false,
+      help: 'Execute commands with prejudice.');
+  argParser.addFlag(
+      'package-symlinks',
+      hide: true,
+      negatable: true,
+      defaultsTo: true);
+  PubCommand.mainCommands.forEach((name, command) {
+    _registerCommand(name, command, argParser);
+  });
+  return argParser;
+}
+void _registerCommand(String name, PubCommand command, ArgParser parser) {
+  parser.addCommand(name, command.commandParser);
+  command.subcommands.forEach((name, subcommand) {
+    _registerCommand(name, subcommand, command.commandParser);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/barback.dart b/sdk/lib/_internal/pub_generated/lib/src/command/barback.dart
new file mode 100644
index 0000000..08ffdb0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/barback.dart
@@ -0,0 +1,124 @@
+library pub.command.barback;
+import 'dart:async';
+import 'package:barback/barback.dart';
+import 'package:path/path.dart' as path;
+import '../command.dart';
+import '../io.dart';
+import '../log.dart' as log;
+import '../utils.dart';
+final _arrow = getSpecial('\u2192', '=>');
+final _allSourceDirectories =
+    new Set<String>.from(["benchmark", "bin", "example", "test", "web"]);
+abstract class BarbackCommand extends PubCommand {
+  final takesArguments = true;
+  BarbackMode get mode => new BarbackMode(commandOptions["mode"]);
+  final sourceDirectories = new Set<String>();
+  BarbackMode get defaultMode => BarbackMode.RELEASE;
+  List<String> get defaultSourceDirectories;
+  BarbackCommand() {
+    commandParser.addOption(
+        "mode",
+        defaultsTo: defaultMode.toString(),
+        help: "Mode to run transformers in.");
+    commandParser.addFlag(
+        "all",
+        help: "Use all default source directories.",
+        defaultsTo: false,
+        negatable: false);
+  }
+  Future onRun() {
+    log.json.enabled = commandOptions.options.contains("format") &&
+        commandOptions["format"] == "json";
+    _parseSourceDirectories();
+    return onRunTransformerCommand();
+  }
+  Future onRunTransformerCommand();
+  void _parseSourceDirectories() {
+    if (commandOptions["all"]) {
+      _addAllDefaultSources();
+      return;
+    }
+    if (commandOptions.rest.isEmpty) {
+      _addDefaultSources();
+      return;
+    }
+    sourceDirectories.addAll(commandOptions.rest);
+    var disallowed = sourceDirectories.where((dir) {
+      var parts = path.split(path.normalize(dir));
+      return parts.isNotEmpty && parts.first == "lib";
+    });
+    if (disallowed.isNotEmpty) {
+      usageError(_directorySentence(disallowed, "is", "are", "not allowed"));
+    }
+    var invalid = sourceDirectories.where((dir) => !path.isWithin('.', dir));
+    if (invalid.isNotEmpty) {
+      usageError(
+          _directorySentence(invalid, "isn't", "aren't", "in this package"));
+    }
+    var missing = sourceDirectories.where(
+        (dir) => !dirExists(path.join(entrypoint.root.dir, dir)));
+    if (missing.isNotEmpty) {
+      dataError(_directorySentence(missing, "does", "do", "not exist"));
+    }
+    var sources = sourceDirectories.toList();
+    var overlapping = new Set();
+    for (var i = 0; i < sources.length; i++) {
+      for (var j = i + 1; j < sources.length; j++) {
+        if (path.isWithin(sources[i], sources[j]) ||
+            path.isWithin(sources[j], sources[i])) {
+          overlapping.add(sources[i]);
+          overlapping.add(sources[j]);
+        }
+      }
+    }
+    if (overlapping.isNotEmpty) {
+      usageError(
+          _directorySentence(overlapping, "cannot", "cannot", "overlap"));
+    }
+  }
+  void _addAllDefaultSources() {
+    if (commandOptions.rest.isNotEmpty) {
+      usageError('Directory names are not allowed if "--all" is passed.');
+    }
+    var dirs = _allSourceDirectories.where(
+        (dir) => dirExists(path.join(entrypoint.root.dir, dir)));
+    if (dirs.isEmpty) {
+      var defaultDirs =
+          toSentence(_allSourceDirectories.map((name) => '"$name"'));
+      dataError(
+          'There are no source directories present.\n'
+              'The default directories are $defaultDirs.');
+    }
+    sourceDirectories.addAll(dirs);
+  }
+  void _addDefaultSources() {
+    sourceDirectories.addAll(
+        defaultSourceDirectories.where(
+            (dir) => dirExists(path.join(entrypoint.root.dir, dir))));
+    if (sourceDirectories.isEmpty) {
+      var defaults;
+      if (defaultSourceDirectories.length == 1) {
+        defaults = 'a "${defaultSourceDirectories.first}" directory';
+      } else {
+        defaults =
+            '"${defaultSourceDirectories[0]}" and/or '
+                '"${defaultSourceDirectories[1]}" directories';
+      }
+      dataError(
+          "Your package must have $defaults,\n"
+              "or you must specify the source directories.");
+    }
+  }
+  String _directorySentence(Iterable<String> directoryNames,
+      String singularVerb, String pluralVerb, String suffix) {
+    var directories =
+        pluralize('Directory', directoryNames.length, plural: 'Directories');
+    var names = toSentence(directoryNames.map((dir) => '"$dir"'));
+    var verb =
+        pluralize(singularVerb, directoryNames.length, plural: pluralVerb);
+    var result = "$directories $names $verb";
+    if (suffix != null) result += " $suffix";
+    result += ".";
+    return result;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/build.dart b/sdk/lib/_internal/pub_generated/lib/src/command/build.dart
new file mode 100644
index 0000000..f68194c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/build.dart
@@ -0,0 +1,196 @@
+library pub.command.build;
+import 'dart:async';
+import 'package:barback/barback.dart';
+import 'package:path/path.dart' as path;
+import '../barback/asset_environment.dart';
+import '../exit_codes.dart' as exit_codes;
+import '../io.dart';
+import '../log.dart' as log;
+import '../utils.dart';
+import 'barback.dart';
+final _arrow = getSpecial('\u2192', '=>');
+class BuildCommand extends BarbackCommand {
+  String get description => "Apply transformers to build a package.";
+  String get usage => "pub build [options] [directories...]";
+  String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-build.html";
+  List<String> get aliases => const ["deploy", "settle-up"];
+  String get outputDirectory => commandOptions["output"];
+  List<String> get defaultSourceDirectories => ["web"];
+  int builtFiles = 0;
+  BuildCommand() {
+    commandParser.addOption(
+        "format",
+        help: "How output should be displayed.",
+        allowed: ["text", "json"],
+        defaultsTo: "text");
+    commandParser.addOption(
+        "output",
+        abbr: "o",
+        help: "Directory to write build outputs to.",
+        defaultsTo: "build");
+  }
+  Future onRunTransformerCommand() {
+    final completer0 = new Completer();
+    scheduleMicrotask(() {
+      try {
+        cleanDir(outputDirectory);
+        var errorsJson = [];
+        var logJson = [];
+        completer0.complete(
+            AssetEnvironment.create(
+                entrypoint,
+                mode,
+                useDart2JS: true).then(((environment) {
+          environment.barback.errors.listen((error) {
+            log.error(log.red("Build error:\n$error"));
+            if (log.json.enabled) {
+              errorsJson.add({
+                "error": error.toString()
+              });
+            }
+          });
+          if (log.json.enabled) {
+            environment.barback.log.listen(
+                (entry) => logJson.add(_logEntryToJson(entry)));
+          }
+          return log.progress("Building ${entrypoint.root.name}", () {
+            return Future.wait(
+                sourceDirectories.map((dir) => environment.serveDirectory(dir))).then((_) {
+              return environment.barback.getAllAssets();
+            });
+          }).then((assets) {
+            var dart2JSEntrypoints = assets.where(
+                (asset) => asset.id.path.endsWith(".dart.js")).map((asset) => asset.id);
+            return Future.wait(assets.map(_writeAsset)).then((_) {
+              builtFiles += _copyBrowserJsFiles(dart2JSEntrypoints);
+              log.message(
+                  'Built $builtFiles ${pluralize('file', builtFiles)} ' 'to "$outputDirectory".');
+              log.json.message({
+                "buildResult": "success",
+                "outputDirectory": outputDirectory,
+                "numFiles": builtFiles,
+                "log": logJson
+              });
+            });
+          });
+        })).catchError(((error) {
+          if (error is! BarbackException) throw error;
+          log.error(log.red("Build failed."));
+          log.json.message({
+            "buildResult": "failure",
+            "errors": errorsJson,
+            "log": logJson
+          });
+          return flushThenExit(exit_codes.DATA);
+        })));
+      } catch (e0) {
+        completer0.completeError(e0);
+      }
+    });
+    return completer0.future;
+  }
+  Future _writeAsset(Asset asset) {
+    final completer0 = new Completer();
+    scheduleMicrotask(() {
+      try {
+        join0() {
+          var destPath = _idToPath(asset.id);
+          join1() {
+            completer0.complete(_writeOutputFile(asset, destPath));
+          }
+          if (path.isWithin("packages", destPath)) {
+            completer0.complete(
+                Future.wait(
+                    sourceDirectories.map(
+                        ((buildDir) => _writeOutputFile(asset, path.join(buildDir, destPath))))));
+          } else {
+            join1();
+          }
+        }
+        if (mode == BarbackMode.RELEASE && asset.id.extension == ".dart") {
+          completer0.complete(null);
+        } else {
+          join0();
+        }
+      } catch (e0) {
+        completer0.completeError(e0);
+      }
+    });
+    return completer0.future;
+  }
+  String _idToPath(AssetId id) {
+    var parts = path.split(path.fromUri(id.path));
+    if (parts.length < 2) {
+      throw new FormatException(
+          "Can not build assets from top-level directory.");
+    }
+    if (parts[0] == "lib") {
+      return path.join("packages", id.package, path.joinAll(parts.skip(1)));
+    }
+    assert(id.package == entrypoint.root.name);
+    return path.joinAll(parts);
+  }
+  Future _writeOutputFile(Asset asset, String relativePath) {
+    builtFiles++;
+    var destPath = path.join(outputDirectory, relativePath);
+    ensureDir(path.dirname(destPath));
+    return createFileFromStream(asset.read(), destPath);
+  }
+  int _copyBrowserJsFiles(Iterable<AssetId> entrypoints) {
+    if (!entrypoint.root.immediateDependencies.any(
+        (dep) => dep.name == 'browser' && dep.source == 'hosted')) {
+      return 0;
+    }
+    var entrypointDirs = entrypoints.map(
+        (id) =>
+            path.dirname(
+                path.fromUri(id.path))).where((dir) => path.split(dir).length > 1).toSet();
+    for (var dir in entrypointDirs) {
+      _addBrowserJs(dir, "dart");
+      _addBrowserJs(dir, "interop");
+    }
+    return entrypointDirs.length * 2;
+  }
+  void _addBrowserJs(String directory, String name) {
+    var jsPath = path.join(
+        entrypoint.root.dir,
+        outputDirectory,
+        directory,
+        'packages',
+        'browser',
+        '$name.js');
+    ensureDir(path.dirname(jsPath));
+    copyFile(path.join(entrypoint.packagesDir, 'browser', '$name.js'), jsPath);
+  }
+  Map _logEntryToJson(LogEntry entry) {
+    var data = {
+      "level": entry.level.name,
+      "transformer": {
+        "name": entry.transform.transformer.toString(),
+        "primaryInput": {
+          "package": entry.transform.primaryId.package,
+          "path": entry.transform.primaryId.path
+        }
+      },
+      "assetId": {
+        "package": entry.assetId.package,
+        "path": entry.assetId.path
+      },
+      "message": entry.message
+    };
+    if (entry.span != null) {
+      data["span"] = {
+        "url": entry.span.sourceUrl,
+        "start": {
+          "line": entry.span.start.line,
+          "column": entry.span.start.column
+        },
+        "end": {
+          "line": entry.span.end.line,
+          "column": entry.span.end.column
+        }
+      };
+    }
+    return data;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/cache.dart b/sdk/lib/_internal/pub_generated/lib/src/command/cache.dart
new file mode 100644
index 0000000..aba582a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/cache.dart
@@ -0,0 +1,15 @@
+library pub.command.cache;
+import '../command.dart';
+import 'cache_add.dart';
+import 'cache_list.dart';
+import 'cache_repair.dart';
+class CacheCommand extends PubCommand {
+  String get description => "Work with the system cache.";
+  String get usage => "pub cache <subcommand>";
+  String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-cache.html";
+  final subcommands = {
+    "add": new CacheAddCommand(),
+    "list": new CacheListCommand(),
+    "repair": new CacheRepairCommand()
+  };
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/cache_add.dart b/sdk/lib/_internal/pub_generated/lib/src/command/cache_add.dart
new file mode 100644
index 0000000..8e9d45b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/cache_add.dart
@@ -0,0 +1,64 @@
+library pub.command.cache_add;
+import 'dart:async';
+import '../command.dart';
+import '../log.dart' as log;
+import '../package.dart';
+import '../utils.dart';
+import '../version.dart';
+class CacheAddCommand extends PubCommand {
+  String get description => "Install a package.";
+  String get usage =>
+      "pub cache add <package> [--version <constraint>] [--all]";
+  String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-cache.html";
+  bool get takesArguments => true;
+  CacheAddCommand() {
+    commandParser.addFlag(
+        "all",
+        help: "Install all matching versions.",
+        negatable: false);
+    commandParser.addOption("version", abbr: "v", help: "Version constraint.");
+  }
+  Future onRun() {
+    if (commandOptions.rest.isEmpty) {
+      usageError("No package to add given.");
+    }
+    if (commandOptions.rest.length > 1) {
+      var unexpected = commandOptions.rest.skip(1).map((arg) => '"$arg"');
+      var arguments = pluralize("argument", unexpected.length);
+      usageError("Unexpected $arguments ${toSentence(unexpected)}.");
+    }
+    var package = commandOptions.rest.single;
+    var constraint = VersionConstraint.any;
+    if (commandOptions["version"] != null) {
+      try {
+        constraint = new VersionConstraint.parse(commandOptions["version"]);
+      } on FormatException catch (error) {
+        usageError(error.message);
+      }
+    }
+    var source = cache.sources["hosted"];
+    return source.getVersions(package, package).then((versions) {
+      versions = versions.where(constraint.allows).toList();
+      if (versions.isEmpty) {
+        fail("Package $package has no versions that match $constraint.");
+      }
+      downloadVersion(Version version) {
+        var id = new PackageId(package, source.name, version, package);
+        return cache.contains(id).then((contained) {
+          if (contained) {
+            log.message("Already cached ${id.name} ${id.version}.");
+            return null;
+          }
+          return source.downloadToSystemCache(id);
+        });
+      }
+      if (commandOptions["all"]) {
+        versions.sort();
+        return Future.forEach(versions, downloadVersion);
+      } else {
+        versions.sort(Version.prioritize);
+        return downloadVersion(versions.last);
+      }
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/cache_list.dart b/sdk/lib/_internal/pub_generated/lib/src/command/cache_list.dart
new file mode 100644
index 0000000..61b54b9
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/cache_list.dart
@@ -0,0 +1,25 @@
+library pub.command.cache_list;
+import 'dart:async';
+import 'dart:convert';
+import '../command.dart';
+import '../log.dart' as log;
+import '../source/cached.dart';
+class CacheListCommand extends PubCommand {
+  String get description => "List packages in the system cache.";
+  String get usage => "pub cache list";
+  bool get hidden => true;
+  Future onRun() {
+    var packagesObj = <String, Map>{};
+    var source = cache.sources.defaultSource as CachedSource;
+    for (var package in source.getCachedPackages()) {
+      var packageInfo = packagesObj.putIfAbsent(package.name, () => {});
+      packageInfo[package.version.toString()] = {
+        'location': package.dir
+      };
+    }
+    log.message(JSON.encode({
+      'packages': packagesObj
+    }));
+    return null;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/cache_repair.dart b/sdk/lib/_internal/pub_generated/lib/src/command/cache_repair.dart
new file mode 100644
index 0000000..0df9b16
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/cache_repair.dart
@@ -0,0 +1,101 @@
+library pub.command.cache_repair;
+import 'dart:async';
+import '../command.dart';
+import '../exit_codes.dart' as exit_codes;
+import '../io.dart';
+import '../log.dart' as log;
+import '../source/cached.dart';
+import '../utils.dart';
+class CacheRepairCommand extends PubCommand {
+  String get description => "Reinstall cached packages.";
+  String get usage => "pub cache repair";
+  String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-cache.html";
+  Future onRun() {
+    final completer0 = new Completer();
+    scheduleMicrotask(() {
+      try {
+        var successes = 0;
+        var failures = 0;
+        var it0 = cache.sources.iterator;
+        break0(x3) {
+          join0() {
+            join1() {
+              join2() {
+                join3() {
+                  completer0.complete(null);
+                }
+                if (failures > 0) {
+                  flushThenExit(exit_codes.UNAVAILABLE).then((x0) {
+                    try {
+                      x0;
+                      join3();
+                    } catch (e0) {
+                      completer0.completeError(e0);
+                    }
+                  }, onError: (e1) {
+                    completer0.completeError(e1);
+                  });
+                } else {
+                  join3();
+                }
+              }
+              if (successes == 0 && failures == 0) {
+                log.message("No packages in cache, so nothing to repair.");
+                join2();
+              } else {
+                join2();
+              }
+            }
+            if (failures > 0) {
+              var packages = pluralize("package", failures);
+              log.message(
+                  "Failed to reinstall ${log.red(failures)} ${packages}.");
+              join1();
+            } else {
+              join1();
+            }
+          }
+          if (successes > 0) {
+            var packages = pluralize("package", successes);
+            log.message("Reinstalled ${log.green(successes)} ${packages}.");
+            join0();
+          } else {
+            join0();
+          }
+        }
+        continue0(x4) {
+          if (it0.moveNext()) {
+            Future.wait([]).then((x2) {
+              var source = it0.current;
+              join4() {
+                source.repairCachedPackages().then((x1) {
+                  try {
+                    var results = x1;
+                    successes += results.first;
+                    failures += results.last;
+                    continue0(null);
+                  } catch (e2) {
+                    completer0.completeError(e2);
+                  }
+                }, onError: (e3) {
+                  completer0.completeError(e3);
+                });
+              }
+              if (source is! CachedSource) {
+                continue0(null);
+              } else {
+                join4();
+              }
+            });
+          } else {
+            break0(null);
+          }
+        }
+        continue0(null);
+      } catch (e4) {
+        completer0.completeError(e4);
+      }
+    });
+    return completer0.future;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/deps.dart b/sdk/lib/_internal/pub_generated/lib/src/command/deps.dart
new file mode 100644
index 0000000..5131f1f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/deps.dart
@@ -0,0 +1,137 @@
+library pub.command.list;
+import 'dart:async';
+import 'dart:collection';
+import '../ascii_tree.dart' as tree;
+import '../command.dart';
+import '../log.dart' as log;
+import '../package.dart';
+import '../package_graph.dart';
+import '../utils.dart';
+class DepsCommand extends PubCommand {
+  String get description => "Print package dependencies.";
+  List<String> get aliases => const ["dependencies", "tab"];
+  String get usage => "pub deps";
+  String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-deps.html";
+  PackageGraph _graph;
+  StringBuffer _buffer;
+  DepsCommand() {
+    commandParser.addOption(
+        "style",
+        abbr: "s",
+        help: "How output should be displayed.",
+        allowed: ["compact", "tree", "list"],
+        defaultsTo: "tree");
+  }
+  Future onRun() {
+    return entrypoint.loadPackageGraph().then((graph) {
+      _graph = graph;
+      _buffer = new StringBuffer();
+      _buffer.writeln(_labelPackage(entrypoint.root));
+      switch (commandOptions["style"]) {
+        case "compact":
+          _outputCompact();
+          break;
+        case "list":
+          _outputList();
+          break;
+        case "tree":
+          _outputTree();
+          break;
+      }
+      log.message(_buffer);
+    });
+  }
+  void _outputCompact() {
+    var root = entrypoint.root;
+    _outputCompactPackages(
+        "dependencies",
+        root.dependencies.map((dep) => dep.name));
+    _outputCompactPackages(
+        "dev dependencies",
+        root.devDependencies.map((dep) => dep.name));
+    _outputCompactPackages(
+        "dependency overrides",
+        root.dependencyOverrides.map((dep) => dep.name));
+    var transitive = _getTransitiveDependencies();
+    _outputCompactPackages("transitive dependencies", transitive);
+  }
+  _outputCompactPackages(String section, Iterable<String> names) {
+    if (names.isEmpty) return;
+    _buffer.writeln();
+    _buffer.writeln("$section:");
+    for (var name in ordered(names)) {
+      var package = _graph.packages[name];
+      _buffer.write("- ${_labelPackage(package)}");
+      if (package.dependencies.isEmpty) {
+        _buffer.writeln();
+      } else {
+        var depNames = package.dependencies.map((dep) => dep.name);
+        var depsList = "[${depNames.join(' ')}]";
+        _buffer.writeln(" ${log.gray(depsList)}");
+      }
+    }
+  }
+  void _outputList() {
+    var root = entrypoint.root;
+    _outputListSection(
+        "dependencies",
+        root.dependencies.map((dep) => dep.name));
+    _outputListSection(
+        "dev dependencies",
+        root.devDependencies.map((dep) => dep.name));
+    _outputListSection(
+        "dependency overrides",
+        root.dependencyOverrides.map((dep) => dep.name));
+    var transitive = _getTransitiveDependencies();
+    if (transitive.isEmpty) return;
+    _outputListSection("transitive dependencies", ordered(transitive));
+  }
+  _outputListSection(String name, Iterable<String> deps) {
+    if (deps.isEmpty) return;
+    _buffer.writeln();
+    _buffer.writeln("$name:");
+    for (var name in deps) {
+      var package = _graph.packages[name];
+      _buffer.writeln("- ${_labelPackage(package)}");
+      for (var dep in package.dependencies) {
+        _buffer.writeln(
+            "  - ${log.bold(dep.name)} ${log.gray(dep.constraint)}");
+      }
+    }
+  }
+  void _outputTree() {
+    var toWalk = new Queue<Pair<Package, Map>>();
+    var visited = new Set<String>();
+    var packageTree = {};
+    for (var dep in entrypoint.root.immediateDependencies) {
+      toWalk.add(new Pair(_graph.packages[dep.name], packageTree));
+    }
+    while (toWalk.isNotEmpty) {
+      var pair = toWalk.removeFirst();
+      var package = pair.first;
+      var map = pair.last;
+      if (visited.contains(package.name)) {
+        map[log.gray('${package.name}...')] = {};
+        continue;
+      }
+      visited.add(package.name);
+      var childMap = {};
+      map[_labelPackage(package)] = childMap;
+      for (var dep in package.dependencies) {
+        toWalk.add(new Pair(_graph.packages[dep.name], childMap));
+      }
+    }
+    _buffer.write(tree.fromMap(packageTree, showAllChildren: true));
+  }
+  String _labelPackage(Package package) =>
+      "${log.bold(package.name)} ${package.version}";
+  Set<String> _getTransitiveDependencies() {
+    var transitive = _graph.packages.keys.toSet();
+    var root = entrypoint.root;
+    transitive.remove(root.name);
+    transitive.removeAll(root.dependencies.map((dep) => dep.name));
+    transitive.removeAll(root.devDependencies.map((dep) => dep.name));
+    transitive.removeAll(root.dependencyOverrides.map((dep) => dep.name));
+    return transitive;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/downgrade.dart b/sdk/lib/_internal/pub_generated/lib/src/command/downgrade.dart
new file mode 100644
index 0000000..5e340a8
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/downgrade.dart
@@ -0,0 +1,57 @@
+library pub.command.downgrade;
+import 'dart:async';
+import '../command.dart';
+import '../log.dart' as log;
+import '../solver/version_solver.dart';
+class DowngradeCommand extends PubCommand {
+  String get description =>
+      "Downgrade the current package's dependencies to oldest versions.\n\n"
+          "This doesn't modify the lockfile, so it can be reset with \"pub get\".";
+  String get usage => "pub downgrade [dependencies...]";
+  bool get takesArguments => true;
+  bool get isOffline => commandOptions['offline'];
+  DowngradeCommand() {
+    commandParser.addFlag(
+        'offline',
+        help: 'Use cached packages instead of accessing the network.');
+    commandParser.addFlag(
+        'dry-run',
+        abbr: 'n',
+        negatable: false,
+        help: "Report what dependencies would change but don't change any.");
+  }
+  Future onRun() {
+    final completer0 = new Completer();
+    scheduleMicrotask(() {
+      try {
+        var dryRun = commandOptions['dry-run'];
+        entrypoint.acquireDependencies(
+            SolveType.DOWNGRADE,
+            useLatest: commandOptions.rest,
+            dryRun: dryRun).then((x0) {
+          try {
+            x0;
+            join0() {
+              completer0.complete(null);
+            }
+            if (isOffline) {
+              log.warning(
+                  "Warning: Downgrading when offline may not update you to "
+                      "the oldest versions of your dependencies.");
+              join0();
+            } else {
+              join0();
+            }
+          } catch (e0) {
+            completer0.completeError(e0);
+          }
+        }, onError: (e1) {
+          completer0.completeError(e1);
+        });
+      } catch (e2) {
+        completer0.completeError(e2);
+      }
+    });
+    return completer0.future;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/get.dart b/sdk/lib/_internal/pub_generated/lib/src/command/get.dart
new file mode 100644
index 0000000..a1fc8c5
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/get.dart
@@ -0,0 +1,26 @@
+library pub.command.get;
+import 'dart:async';
+import '../command.dart';
+import '../solver/version_solver.dart';
+class GetCommand extends PubCommand {
+  String get description => "Get the current package's dependencies.";
+  String get usage => "pub get";
+  String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-get.html";
+  List<String> get aliases => const ["install"];
+  bool get isOffline => commandOptions["offline"];
+  GetCommand() {
+    commandParser.addFlag(
+        'offline',
+        help: 'Use cached packages instead of accessing the network.');
+    commandParser.addFlag(
+        'dry-run',
+        abbr: 'n',
+        negatable: false,
+        help: "Report what dependencies would change but don't change any.");
+  }
+  Future onRun() {
+    return entrypoint.acquireDependencies(
+        SolveType.GET,
+        dryRun: commandOptions['dry-run']);
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/global.dart b/sdk/lib/_internal/pub_generated/lib/src/command/global.dart
new file mode 100644
index 0000000..adbe2b0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/global.dart
@@ -0,0 +1,16 @@
+library pub.command.global;
+import '../command.dart';
+import 'global_activate.dart';
+import 'global_deactivate.dart';
+import 'global_list.dart';
+import 'global_run.dart';
+class GlobalCommand extends PubCommand {
+  String get description => "Work with global packages.";
+  String get usage => "pub global <subcommand>";
+  final subcommands = {
+    "activate": new GlobalActivateCommand(),
+    "deactivate": new GlobalDeactivateCommand(),
+    "list": new GlobalListCommand(),
+    "run": new GlobalRunCommand()
+  };
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/global_activate.dart b/sdk/lib/_internal/pub_generated/lib/src/command/global_activate.dart
new file mode 100644
index 0000000..c6a2e22
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/global_activate.dart
@@ -0,0 +1,56 @@
+library pub.command.global_activate;
+import 'dart:async';
+import '../command.dart';
+import '../utils.dart';
+import '../version.dart';
+class GlobalActivateCommand extends PubCommand {
+  String get description => "Make a package's executables globally available.";
+  String get usage => "pub global activate <package...>";
+  bool get takesArguments => true;
+  GlobalActivateCommand() {
+    commandParser.addOption(
+        "source",
+        abbr: "s",
+        help: "The source used to find the package.",
+        allowed: ["git", "hosted", "path"],
+        defaultsTo: "hosted");
+  }
+  Future onRun() {
+    var args = commandOptions.rest;
+    readArg([String error]) {
+      if (args.isEmpty) usageError(error);
+      var arg = args.first;
+      args = args.skip(1);
+      return arg;
+    }
+    validateNoExtraArgs() {
+      if (args.isEmpty) return;
+      var unexpected = args.map((arg) => '"$arg"');
+      var arguments = pluralize("argument", unexpected.length);
+      usageError("Unexpected $arguments ${toSentence(unexpected)}.");
+    }
+    switch (commandOptions["source"]) {
+      case "git":
+        var repo = readArg("No Git repository given.");
+        validateNoExtraArgs();
+        return globals.activateGit(repo);
+      case "hosted":
+        var package = readArg("No package to activate given.");
+        var constraint = VersionConstraint.any;
+        if (args.isNotEmpty) {
+          try {
+            constraint = new VersionConstraint.parse(readArg());
+          } on FormatException catch (error) {
+            usageError(error.message);
+          }
+        }
+        validateNoExtraArgs();
+        return globals.activateHosted(package, constraint);
+      case "path":
+        var path = readArg("No package to activate given.");
+        validateNoExtraArgs();
+        return globals.activatePath(path);
+    }
+    throw "unreachable";
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/global_deactivate.dart b/sdk/lib/_internal/pub_generated/lib/src/command/global_deactivate.dart
new file mode 100644
index 0000000..6fd534a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/global_deactivate.dart
@@ -0,0 +1,24 @@
+library pub.command.global_deactivate;
+import 'dart:async';
+import '../command.dart';
+import '../log.dart' as log;
+import '../utils.dart';
+class GlobalDeactivateCommand extends PubCommand {
+  String get description => "Remove a previously activated package.";
+  String get usage => "pub global deactivate <package>";
+  bool get takesArguments => true;
+  Future onRun() {
+    if (commandOptions.rest.isEmpty) {
+      usageError("No package to deactivate given.");
+    }
+    if (commandOptions.rest.length > 1) {
+      var unexpected = commandOptions.rest.skip(1).map((arg) => '"$arg"');
+      var arguments = pluralize("argument", unexpected.length);
+      usageError("Unexpected $arguments ${toSentence(unexpected)}.");
+    }
+    if (!globals.deactivate(commandOptions.rest.first, logDeactivate: true)) {
+      dataError("No active package ${log.bold(commandOptions.rest.first)}.");
+    }
+    return null;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/global_list.dart b/sdk/lib/_internal/pub_generated/lib/src/command/global_list.dart
new file mode 100644
index 0000000..a781f21
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/global_list.dart
@@ -0,0 +1,12 @@
+library pub.command.global_list;
+import 'dart:async';
+import '../command.dart';
+class GlobalListCommand extends PubCommand {
+  bool get allowTrailingOptions => false;
+  String get description => 'List globally activated packages.';
+  String get usage => 'pub global list';
+  Future onRun() {
+    globals.listActivePackages();
+    return null;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/global_run.dart b/sdk/lib/_internal/pub_generated/lib/src/command/global_run.dart
new file mode 100644
index 0000000..6fffe0f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/global_run.dart
@@ -0,0 +1,74 @@
+library pub.command.global_run;
+import 'dart:async';
+import 'package:path/path.dart' as p;
+import '../command.dart';
+import '../io.dart';
+import '../utils.dart';
+class GlobalRunCommand extends PubCommand {
+  bool get takesArguments => true;
+  bool get allowTrailingOptions => false;
+  String get description =>
+      "Run an executable from a globally activated package.\n"
+          "NOTE: We are currently optimizing this command's startup time.";
+  String get usage => "pub global run <package>:<executable> [args...]";
+  Future onRun() {
+    final completer0 = new Completer();
+    scheduleMicrotask(() {
+      try {
+        join0() {
+          var package;
+          var executable = commandOptions.rest[0];
+          join1() {
+            var args = commandOptions.rest.skip(1).toList();
+            join2() {
+              globals.runExecutable(package, executable, args).then((x0) {
+                try {
+                  var exitCode = x0;
+                  flushThenExit(exitCode).then((x1) {
+                    try {
+                      x1;
+                      completer0.complete(null);
+                    } catch (e1) {
+                      completer0.completeError(e1);
+                    }
+                  }, onError: (e2) {
+                    completer0.completeError(e2);
+                  });
+                } catch (e0) {
+                  completer0.completeError(e0);
+                }
+              }, onError: (e3) {
+                completer0.completeError(e3);
+              });
+            }
+            if (p.split(executable).length > 1) {
+              usageError(
+                  'Cannot run an executable in a subdirectory of a global ' + 'package.');
+              join2();
+            } else {
+              join2();
+            }
+          }
+          if (executable.contains(":")) {
+            var parts = split1(executable, ":");
+            package = parts[0];
+            executable = parts[1];
+            join1();
+          } else {
+            package = executable;
+            join1();
+          }
+        }
+        if (commandOptions.rest.isEmpty) {
+          usageError("Must specify an executable to run.");
+          join0();
+        } else {
+          join0();
+        }
+      } catch (e4) {
+        completer0.completeError(e4);
+      }
+    });
+    return completer0.future;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/help.dart b/sdk/lib/_internal/pub_generated/lib/src/command/help.dart
new file mode 100644
index 0000000..29ad64a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/help.dart
@@ -0,0 +1,37 @@
+library pub.command.help;
+import 'dart:async';
+import '../command.dart';
+class HelpCommand extends PubCommand {
+  String get description => "Display help information for Pub.";
+  String get usage => "pub help [command]";
+  bool get takesArguments => true;
+  Future onRun() {
+    if (commandOptions.rest.isEmpty) {
+      PubCommand.printGlobalUsage();
+      return null;
+    }
+    var commands = PubCommand.mainCommands;
+    var command = null;
+    var commandString = "pub";
+    for (var name in commandOptions.rest) {
+      if (commands.isEmpty) {
+        command.usageError(
+            'Command "$commandString" does not expect a subcommand.');
+      }
+      if (commands[name] == null) {
+        if (command == null) {
+          PubCommand.usageErrorWithCommands(
+              commands,
+              'Could not find a command named "$name".');
+        }
+        command.usageError(
+            'Could not find a subcommand named "$name" for "$commandString".');
+      }
+      command = commands[name];
+      commands = command.subcommands;
+      commandString += " $name";
+    }
+    command.printUsage();
+    return null;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/lish.dart b/sdk/lib/_internal/pub_generated/lib/src/command/lish.dart
new file mode 100644
index 0000000..49deff8
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/lish.dart
@@ -0,0 +1,148 @@
+library pub.command.lish;
+import 'dart:async';
+import 'package:http/http.dart' as http;
+import '../command.dart';
+import '../ascii_tree.dart' as tree;
+import '../http.dart';
+import '../io.dart';
+import '../log.dart' as log;
+import '../oauth2.dart' as oauth2;
+import '../source/hosted.dart';
+import '../utils.dart';
+import '../validator.dart';
+class LishCommand extends PubCommand {
+  String get description => "Publish the current package to pub.dartlang.org.";
+  String get usage => "pub publish [options]";
+  String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-lish.html";
+  List<String> get aliases => const ["lish", "lush"];
+  Uri get server {
+    if (commandOptions.wasParsed('server')) {
+      return Uri.parse(commandOptions['server']);
+    }
+    if (entrypoint.root.pubspec.publishTo != null) {
+      return Uri.parse(entrypoint.root.pubspec.publishTo);
+    }
+    return Uri.parse(HostedSource.defaultUrl);
+  }
+  bool get dryRun => commandOptions['dry-run'];
+  bool get force => commandOptions['force'];
+  LishCommand() {
+    commandParser.addFlag(
+        'dry-run',
+        abbr: 'n',
+        negatable: false,
+        help: 'Validate but do not publish the package.');
+    commandParser.addFlag(
+        'force',
+        abbr: 'f',
+        negatable: false,
+        help: 'Publish without confirmation if there are no errors.');
+    commandParser.addOption(
+        'server',
+        defaultsTo: HostedSource.defaultUrl,
+        help: 'The package server to which to upload this package.');
+  }
+  Future _publish(packageBytes) {
+    var cloudStorageUrl;
+    return oauth2.withClient(cache, (client) {
+      return log.progress('Uploading', () {
+        var newUri = server.resolve("/api/packages/versions/new");
+        return client.get(newUri, headers: PUB_API_HEADERS).then((response) {
+          var parameters = parseJsonResponse(response);
+          var url = _expectField(parameters, 'url', response);
+          if (url is! String) invalidServerResponse(response);
+          cloudStorageUrl = Uri.parse(url);
+          var request = new http.MultipartRequest('POST', cloudStorageUrl);
+          request.headers['Pub-Request-Timeout'] = 'None';
+          var fields = _expectField(parameters, 'fields', response);
+          if (fields is! Map) invalidServerResponse(response);
+          fields.forEach((key, value) {
+            if (value is! String) invalidServerResponse(response);
+            request.fields[key] = value;
+          });
+          request.followRedirects = false;
+          request.files.add(
+              new http.MultipartFile.fromBytes(
+                  'file',
+                  packageBytes,
+                  filename: 'package.tar.gz'));
+          return client.send(request);
+        }).then(http.Response.fromStream).then((response) {
+          var location = response.headers['location'];
+          if (location == null) throw new PubHttpException(response);
+          return location;
+        }).then(
+            (location) =>
+                client.get(location, headers: PUB_API_HEADERS)).then(handleJsonSuccess);
+      });
+    }).catchError((error) {
+      if (error is! PubHttpException) throw error;
+      var url = error.response.request.url;
+      if (urisEqual(url, cloudStorageUrl)) {
+        fail('Failed to upload the package.');
+      } else if (urisEqual(Uri.parse(url.origin), Uri.parse(server.origin))) {
+        handleJsonError(error.response);
+      } else {
+        throw error;
+      }
+    });
+  }
+  Future onRun() {
+    if (force && dryRun) {
+      usageError('Cannot use both --force and --dry-run.');
+    }
+    if (entrypoint.root.pubspec.isPrivate) {
+      dataError(
+          'A private package cannot be published.\n'
+              'You can enable this by changing the "publish_to" field in your ' 'pubspec.');
+    }
+    var files = entrypoint.root.listFiles();
+    log.fine('Archiving and publishing ${entrypoint.root}.');
+    var package = entrypoint.root;
+    log.message(
+        'Publishing ${package.name} ${package.version} to $server:\n'
+            '${tree.fromFiles(files, baseDir: entrypoint.root.dir)}');
+    var packageBytesFuture =
+        createTarGz(files, baseDir: entrypoint.root.dir).toBytes();
+    return _validate(
+        packageBytesFuture.then((bytes) => bytes.length)).then((isValid) {
+      if (isValid) return packageBytesFuture.then(_publish);
+    });
+  }
+  _expectField(Map map, String key, http.Response response) {
+    if (map.containsKey(key)) return map[key];
+    invalidServerResponse(response);
+  }
+  Future<bool> _validate(Future<int> packageSize) {
+    return Validator.runAll(entrypoint, packageSize).then((pair) {
+      var errors = pair.first;
+      var warnings = pair.last;
+      if (!errors.isEmpty) {
+        log.error(
+            "Sorry, your package is missing "
+                "${(errors.length > 1) ? 'some requirements' : 'a requirement'} "
+                "and can't be published yet.\nFor more information, see: "
+                "http://pub.dartlang.org/doc/pub-lish.html.\n");
+        return false;
+      }
+      if (force) return true;
+      if (dryRun) {
+        var s = warnings.length == 1 ? '' : 's';
+        log.warning("\nPackage has ${warnings.length} warning$s.");
+        return false;
+      }
+      var message = '\nLooks great! Are you ready to upload your package';
+      if (!warnings.isEmpty) {
+        var s = warnings.length == 1 ? '' : 's';
+        message = "\nPackage has ${warnings.length} warning$s. Upload anyway";
+      }
+      return confirm(message).then((confirmed) {
+        if (!confirmed) {
+          log.error("Package upload canceled.");
+          return false;
+        }
+        return true;
+      });
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/list_package_dirs.dart b/sdk/lib/_internal/pub_generated/lib/src/command/list_package_dirs.dart
new file mode 100644
index 0000000..128ee92
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/list_package_dirs.dart
@@ -0,0 +1,38 @@
+library pub.command.list_package_dirs;
+import 'dart:async';
+import 'package:path/path.dart' as path;
+import '../command.dart';
+import '../log.dart' as log;
+import '../utils.dart';
+class ListPackageDirsCommand extends PubCommand {
+  String get description => "Print local paths to dependencies.";
+  String get usage => "pub list-package-dirs";
+  bool get hidden => true;
+  ListPackageDirsCommand() {
+    commandParser.addOption(
+        "format",
+        help: "How output should be displayed.",
+        allowed: ["json"]);
+  }
+  Future onRun() {
+    log.json.enabled = true;
+    if (!entrypoint.lockFileExists) {
+      dataError('Package "myapp" has no lockfile. Please run "pub get" first.');
+    }
+    var output = {};
+    var packages = {};
+    var futures = [];
+    entrypoint.lockFile.packages.forEach((name, package) {
+      var source = entrypoint.cache.sources[package.source];
+      futures.add(source.getDirectory(package).then((packageDir) {
+        packages[name] = path.join(packageDir, "lib");
+      }));
+    });
+    output["packages"] = packages;
+    packages[entrypoint.root.name] = path.join(entrypoint.root.dir, "lib");
+    output["input_files"] = [entrypoint.lockFilePath, entrypoint.pubspecPath];
+    return Future.wait(futures).then((_) {
+      log.json.message(output);
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/run.dart b/sdk/lib/_internal/pub_generated/lib/src/command/run.dart
new file mode 100644
index 0000000..0cb0064
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/run.dart
@@ -0,0 +1,74 @@
+library pub.command.run;
+import 'dart:async';
+import 'package:path/path.dart' as p;
+import '../command.dart';
+import '../executable.dart';
+import '../io.dart';
+import '../utils.dart';
+class RunCommand extends PubCommand {
+  bool get takesArguments => true;
+  bool get allowTrailingOptions => false;
+  String get description =>
+      "Run an executable from a package.\n"
+          "NOTE: We are currently optimizing this command's startup time.";
+  String get usage => "pub run <executable> [args...]";
+  Future onRun() {
+    final completer0 = new Completer();
+    scheduleMicrotask(() {
+      try {
+        join0() {
+          var package = entrypoint.root.name;
+          var executable = commandOptions.rest[0];
+          var args = commandOptions.rest.skip(1).toList();
+          join1() {
+            runExecutable(entrypoint, package, executable, args).then((x0) {
+              try {
+                var exitCode = x0;
+                flushThenExit(exitCode).then((x1) {
+                  try {
+                    x1;
+                    completer0.complete(null);
+                  } catch (e1) {
+                    completer0.completeError(e1);
+                  }
+                }, onError: (e2) {
+                  completer0.completeError(e2);
+                });
+              } catch (e0) {
+                completer0.completeError(e0);
+              }
+            }, onError: (e3) {
+              completer0.completeError(e3);
+            });
+          }
+          if (executable.contains(":")) {
+            var components = split1(executable, ":");
+            package = components[0];
+            executable = components[1];
+            join2() {
+              join1();
+            }
+            if (p.split(executable).length > 1) {
+              usageError(
+                  "Cannot run an executable in a subdirectory of a " + "dependency.");
+              join2();
+            } else {
+              join2();
+            }
+          } else {
+            join1();
+          }
+        }
+        if (commandOptions.rest.isEmpty) {
+          usageError("Must specify an executable to run.");
+          join0();
+        } else {
+          join0();
+        }
+      } catch (e4) {
+        completer0.completeError(e4);
+      }
+    });
+    return completer0.future;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/serve.dart b/sdk/lib/_internal/pub_generated/lib/src/command/serve.dart
new file mode 100644
index 0000000..8255ec1
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/serve.dart
@@ -0,0 +1,221 @@
+library pub.command.serve;
+import 'dart:async';
+import 'dart:math' as math;
+import 'package:barback/barback.dart';
+import '../barback/asset_environment.dart';
+import '../barback/pub_package_provider.dart';
+import '../log.dart' as log;
+import '../utils.dart';
+import 'barback.dart';
+final _arrow = getSpecial('\u2192', '=>');
+class ServeCommand extends BarbackCommand {
+  String get description =>
+      'Run a local web development server.\n\n'
+          'By default, this serves "web/" and "test/", but an explicit list of \n'
+          'directories to serve can be provided as well.';
+  String get usage => "pub serve [directories...]";
+  String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-serve.html";
+  PubPackageProvider _provider;
+  String get hostname => commandOptions['hostname'];
+  int get port => parseInt(commandOptions['port'], 'port');
+  int get adminPort {
+    var adminPort = commandOptions['admin-port'];
+    return adminPort == null ? null : parseInt(adminPort, 'admin port');
+  }
+  bool get useDart2JS => commandOptions['dart2js'];
+  bool get logAdminUrl => commandOptions['log-admin-url'];
+  BarbackMode get defaultMode => BarbackMode.DEBUG;
+  List<String> get defaultSourceDirectories => ["web", "test"];
+  final _completer = new Completer();
+  ServeCommand() {
+    commandParser.addOption(
+        'hostname',
+        defaultsTo: 'localhost',
+        help: 'The hostname to listen on.');
+    commandParser.addOption(
+        'port',
+        defaultsTo: '8080',
+        help: 'The base port to listen on.');
+    commandParser.addFlag('log-admin-url', defaultsTo: false, hide: true);
+    commandParser.addOption('admin-port', hide: true);
+    commandParser.addFlag(
+        'dart2js',
+        defaultsTo: true,
+        help: 'Compile Dart to JavaScript.');
+    commandParser.addFlag(
+        'force-poll',
+        defaultsTo: false,
+        help: 'Force the use of a polling filesystem watcher.');
+  }
+  Future onRunTransformerCommand() {
+    final completer0 = new Completer();
+    scheduleMicrotask(() {
+      try {
+        var port = parseInt(commandOptions['port'], 'port');
+        join0(x0) {
+          var adminPort = x0;
+          join1(x1) {
+            var watcherType = x1;
+            AssetEnvironment.create(
+                entrypoint,
+                mode,
+                watcherType: watcherType,
+                hostname: hostname,
+                basePort: port,
+                useDart2JS: useDart2JS).then((x2) {
+              try {
+                var environment = x2;
+                var directoryLength =
+                    sourceDirectories.map(((dir) => dir.length)).reduce(math.max);
+                environment.startAdminServer(adminPort).then((x3) {
+                  try {
+                    var server = x3;
+                    server.results.listen(((_) {
+                      assert(false);
+                    }), onError: _fatalError);
+                    join2() {
+                      environment.pauseUpdates();
+                      var it0 = sourceDirectories.iterator;
+                      break0(x7) {
+                        environment.barback.errors.listen(((error) {
+                          log.error(log.red("Build error:\n$error"));
+                        }));
+                        environment.barback.results.listen(((result) {
+                          if (result.succeeded) {
+                            log.message(
+                                "Build completed ${log.green('successfully')}");
+                          } else {
+                            log.message(
+                                "Build completed with " "${log.red(result.errors.length)} errors.");
+                          }
+                        }), onError: _fatalError);
+                        environment.resumeUpdates();
+                        _completer.future.then((x4) {
+                          try {
+                            x4;
+                            completer0.complete(null);
+                          } catch (e2) {
+                            completer0.completeError(e2);
+                          }
+                        }, onError: (e3) {
+                          completer0.completeError(e3);
+                        });
+                      }
+                      continue0(x8) {
+                        if (it0.moveNext()) {
+                          Future.wait([]).then((x6) {
+                            var directory = it0.current;
+                            _startServer(
+                                environment,
+                                directory,
+                                directoryLength).then((x5) {
+                              try {
+                                x5;
+                                continue0(null);
+                              } catch (e4) {
+                                completer0.completeError(e4);
+                              }
+                            }, onError: (e5) {
+                              completer0.completeError(e5);
+                            });
+                          });
+                        } else {
+                          break0(null);
+                        }
+                      }
+                      continue0(null);
+                    }
+                    if (logAdminUrl) {
+                      log.message(
+                          "Running admin server on " "${log.bold('http://${hostname}:${server.port}')}");
+                      join2();
+                    } else {
+                      join2();
+                    }
+                  } catch (e1) {
+                    completer0.completeError(e1);
+                  }
+                }, onError: (e6) {
+                  completer0.completeError(e6);
+                });
+              } catch (e0) {
+                completer0.completeError(e0);
+              }
+            }, onError: (e7) {
+              completer0.completeError(e7);
+            });
+          }
+          if (commandOptions['force-poll']) {
+            join1(WatcherType.POLLING);
+          } else {
+            join1(WatcherType.AUTO);
+          }
+        }
+        if (commandOptions['admin-port'] == null) {
+          join0(null);
+        } else {
+          join0(parseInt(commandOptions['admin-port'], 'admin port'));
+        }
+      } catch (e8) {
+        completer0.completeError(e8);
+      }
+    });
+    return completer0.future;
+  }
+  Future _startServer(AssetEnvironment environment, String rootDirectory,
+      int directoryLength) {
+    final completer0 = new Completer();
+    scheduleMicrotask(() {
+      try {
+        environment.serveDirectory(rootDirectory).then((x0) {
+          try {
+            var server = x0;
+            join0() {
+              var prefix =
+                  log.gray(padRight("[${server.rootDirectory}]", directoryLength + 2));
+              server.results.listen(((result) {
+                var buffer = new StringBuffer();
+                buffer.write("$prefix ");
+                if (result.isSuccess) {
+                  buffer.write(
+                      "${log.green('GET')} ${result.url.path} $_arrow ${result.id}");
+                } else {
+                  buffer.write("${log.red('GET')} ${result.url.path} $_arrow");
+                  var error = result.error.toString();
+                  if (error.contains("\n")) {
+                    buffer.write("\n${prefixLines(error)}");
+                  } else {
+                    buffer.write(" $error");
+                  }
+                }
+                log.message(buffer);
+              }), onError: _fatalError);
+              log.message(
+                  "Serving ${entrypoint.root.name} "
+                      "${padRight(server.rootDirectory, directoryLength)} "
+                      "on ${log.bold('http://${hostname}:${server.port}')}");
+              completer0.complete(null);
+            }
+            if (mode == BarbackMode.RELEASE) {
+              server.allowAsset = ((url) => !url.path.endsWith(".dart"));
+              join0();
+            } else {
+              join0();
+            }
+          } catch (e0) {
+            completer0.completeError(e0);
+          }
+        }, onError: (e1) {
+          completer0.completeError(e1);
+        });
+      } catch (e2) {
+        completer0.completeError(e2);
+      }
+    });
+    return completer0.future;
+  }
+  void _fatalError(error, [stackTrace]) {
+    if (_completer.isCompleted) return;
+    _completer.completeError(error, stackTrace);
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/upgrade.dart b/sdk/lib/_internal/pub_generated/lib/src/command/upgrade.dart
new file mode 100644
index 0000000..fde39fe
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/upgrade.dart
@@ -0,0 +1,58 @@
+library pub.command.upgrade;
+import 'dart:async';
+import '../command.dart';
+import '../log.dart' as log;
+import '../solver/version_solver.dart';
+class UpgradeCommand extends PubCommand {
+  String get description =>
+      "Upgrade the current package's dependencies to latest versions.";
+  String get usage => "pub upgrade [dependencies...]";
+  String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-upgrade.html";
+  List<String> get aliases => const ["update"];
+  bool get takesArguments => true;
+  bool get isOffline => commandOptions['offline'];
+  UpgradeCommand() {
+    commandParser.addFlag(
+        'offline',
+        help: 'Use cached packages instead of accessing the network.');
+    commandParser.addFlag(
+        'dry-run',
+        abbr: 'n',
+        negatable: false,
+        help: "Report what dependencies would change but don't change any.");
+  }
+  Future onRun() {
+    final completer0 = new Completer();
+    scheduleMicrotask(() {
+      try {
+        var dryRun = commandOptions['dry-run'];
+        entrypoint.acquireDependencies(
+            SolveType.UPGRADE,
+            useLatest: commandOptions.rest,
+            dryRun: dryRun).then((x0) {
+          try {
+            x0;
+            join0() {
+              completer0.complete(null);
+            }
+            if (isOffline) {
+              log.warning(
+                  "Warning: Upgrading when offline may not update you to the "
+                      "latest versions of your dependencies.");
+              join0();
+            } else {
+              join0();
+            }
+          } catch (e0) {
+            completer0.completeError(e0);
+          }
+        }, onError: (e1) {
+          completer0.completeError(e1);
+        });
+      } catch (e2) {
+        completer0.completeError(e2);
+      }
+    });
+    return completer0.future;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/uploader.dart b/sdk/lib/_internal/pub_generated/lib/src/command/uploader.dart
new file mode 100644
index 0000000..64f8d01
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/uploader.dart
@@ -0,0 +1,72 @@
+library pub.command.uploader;
+import 'dart:async';
+import 'package:path/path.dart' as path;
+import '../command.dart';
+import '../entrypoint.dart';
+import '../exit_codes.dart' as exit_codes;
+import '../http.dart';
+import '../io.dart';
+import '../log.dart' as log;
+import '../oauth2.dart' as oauth2;
+import '../source/hosted.dart';
+import '../utils.dart';
+class UploaderCommand extends PubCommand {
+  String get description =>
+      "Manage uploaders for a package on pub.dartlang.org.";
+  String get usage => "pub uploader [options] {add/remove} <email>";
+  String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-uploader.html";
+  bool get takesArguments => true;
+  Uri get server => Uri.parse(commandOptions['server']);
+  UploaderCommand() {
+    commandParser.addOption(
+        'server',
+        defaultsTo: HostedSource.defaultUrl,
+        help: 'The package server on which the package is hosted.');
+    commandParser.addOption(
+        'package',
+        help: 'The package whose uploaders will be modified.\n'
+            '(defaults to the current package)');
+  }
+  Future onRun() {
+    if (commandOptions.rest.isEmpty) {
+      log.error('No uploader command given.');
+      this.printUsage();
+      return flushThenExit(exit_codes.USAGE);
+    }
+    var rest = commandOptions.rest.toList();
+    var command = rest.removeAt(0);
+    if (!['add', 'remove'].contains(command)) {
+      log.error('Unknown uploader command "$command".');
+      this.printUsage();
+      return flushThenExit(exit_codes.USAGE);
+    } else if (rest.isEmpty) {
+      log.error('No uploader given for "pub uploader $command".');
+      this.printUsage();
+      return flushThenExit(exit_codes.USAGE);
+    }
+    return syncFuture(() {
+      var package = commandOptions['package'];
+      if (package != null) return package;
+      return new Entrypoint(path.current, cache).root.name;
+    }).then((package) {
+      var uploader = rest[0];
+      return oauth2.withClient(cache, (client) {
+        if (command == 'add') {
+          var url =
+              server.resolve("/api/packages/" "${Uri.encodeComponent(package)}/uploaders");
+          return client.post(url, headers: PUB_API_HEADERS, body: {
+            "email": uploader
+          });
+        } else {
+          var url = server.resolve(
+              "/api/packages/" "${Uri.encodeComponent(package)}/uploaders/"
+                  "${Uri.encodeComponent(uploader)}");
+          return client.delete(url, headers: PUB_API_HEADERS);
+        }
+      });
+    }).then(
+        handleJsonSuccess).catchError(
+            (error) => handleJsonError(error.response),
+            test: (e) => e is PubHttpException);
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/version.dart b/sdk/lib/_internal/pub_generated/lib/src/command/version.dart
new file mode 100644
index 0000000..208c2f5
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/version.dart
@@ -0,0 +1,13 @@
+library pub.command.version;
+import 'dart:async';
+import '../command.dart';
+import '../log.dart' as log;
+import '../sdk.dart' as sdk;
+class VersionCommand extends PubCommand {
+  String get description => "Print pub version.";
+  String get usage => "pub version";
+  Future onRun() {
+    log.message("Pub ${sdk.version}");
+    return null;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/dart.dart b/sdk/lib/_internal/pub_generated/lib/src/dart.dart
new file mode 100644
index 0000000..f5cf582
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/dart.dart
@@ -0,0 +1,107 @@
+library pub.dart;
+import 'dart:async';
+import 'dart:isolate';
+import 'package:analyzer/analyzer.dart';
+import 'package:path/path.dart' as path;
+import 'package:stack_trace/stack_trace.dart';
+import '../../../compiler/compiler.dart' as compiler;
+import '../../../compiler/implementation/filenames.dart' show appendSlash;
+import '../../asset/dart/serialize.dart';
+import 'io.dart';
+import 'utils.dart';
+abstract class CompilerProvider {
+  Uri get libraryRoot;
+  Future provideInput(Uri uri);
+  void handleDiagnostic(Uri uri, int begin, int end, String message,
+      compiler.Diagnostic kind);
+  EventSink<String> provideOutput(String name, String extension);
+}
+Future compile(String entrypoint, CompilerProvider provider,
+    {Iterable<String> commandLineOptions, bool checked: false, bool csp: false,
+    bool minify: true, bool verbose: false, Map<String, String> environment,
+    String packageRoot, bool analyzeAll: false, bool suppressWarnings: false,
+    bool suppressHints: false, bool suppressPackageWarnings: true, bool terse:
+    false, bool includeSourceMapUrls: false, bool toDart: false}) {
+  return syncFuture(() {
+    var options = <String>['--categories=Client,Server'];
+    if (checked) options.add('--enable-checked-mode');
+    if (csp) options.add('--csp');
+    if (minify) options.add('--minify');
+    if (verbose) options.add('--verbose');
+    if (analyzeAll) options.add('--analyze-all');
+    if (suppressWarnings) options.add('--suppress-warnings');
+    if (suppressHints) options.add('--suppress-hints');
+    if (!suppressPackageWarnings) options.add('--show-package-warnings');
+    if (terse) options.add('--terse');
+    if (toDart) options.add('--output-type=dart');
+    var sourceUrl = path.toUri(entrypoint);
+    options.add("--out=$sourceUrl.js");
+    if (includeSourceMapUrls) {
+      options.add("--source-map=$sourceUrl.js.map");
+    }
+    if (environment == null) environment = {};
+    if (commandLineOptions != null) options.addAll(commandLineOptions);
+    if (packageRoot == null) {
+      packageRoot = path.join(path.dirname(entrypoint), 'packages');
+    }
+    return Chain.track(
+        compiler.compile(
+            path.toUri(entrypoint),
+            provider.libraryRoot,
+            path.toUri(appendSlash(packageRoot)),
+            provider.provideInput,
+            provider.handleDiagnostic,
+            options,
+            provider.provideOutput,
+            environment));
+  });
+}
+bool isEntrypoint(CompilationUnit dart) {
+  return dart.declarations.any((node) {
+    return node is FunctionDeclaration &&
+        node.name.name == "main" &&
+        node.functionExpression.parameters.parameters.length <= 2;
+  });
+}
+List<UriBasedDirective> parseImportsAndExports(String contents, {String name}) {
+  var collector = new _DirectiveCollector();
+  parseDirectives(contents, name: name).accept(collector);
+  return collector.directives;
+}
+class _DirectiveCollector extends GeneralizingAstVisitor {
+  final directives = <UriBasedDirective>[];
+  visitUriBasedDirective(UriBasedDirective node) => directives.add(node);
+}
+Future runInIsolate(String code, message) {
+  return withTempDir((dir) {
+    var dartPath = path.join(dir, 'runInIsolate.dart');
+    writeTextFile(dartPath, code, dontLogContents: true);
+    var port = new ReceivePort();
+    return Chain.track(Isolate.spawn(_isolateBuffer, {
+      'replyTo': port.sendPort,
+      'uri': path.toUri(dartPath).toString(),
+      'message': message
+    })).then((_) => port.first).then((response) {
+      if (response['type'] == 'success') return null;
+      assert(response['type'] == 'error');
+      return new Future.error(
+          new CrossIsolateException.deserialize(response['error']),
+          new Chain.current());
+    });
+  });
+}
+void _isolateBuffer(message) {
+  var replyTo = message['replyTo'];
+  Chain.track(
+      Isolate.spawnUri(
+          Uri.parse(message['uri']),
+          [],
+          message['message'])).then((_) => replyTo.send({
+    'type': 'success'
+  })).catchError((e, stack) {
+    replyTo.send({
+      'type': 'error',
+      'error': CrossIsolateException.serialize(e, stack)
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/entrypoint.dart b/sdk/lib/_internal/pub_generated/lib/src/entrypoint.dart
new file mode 100644
index 0000000..b36827b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/entrypoint.dart
@@ -0,0 +1,281 @@
+library pub.entrypoint;
+import 'dart:async';
+import 'package:path/path.dart' as path;
+import 'package:barback/barback.dart';
+import 'barback/asset_environment.dart';
+import 'io.dart';
+import 'lock_file.dart';
+import 'log.dart' as log;
+import 'package.dart';
+import 'package_graph.dart';
+import 'sdk.dart' as sdk;
+import 'solver/version_solver.dart';
+import 'source/cached.dart';
+import 'system_cache.dart';
+import 'utils.dart';
+class Entrypoint {
+  final Package root;
+  final SystemCache cache;
+  final bool _packageSymlinks;
+  LockFile _lockFile;
+  PackageGraph _packageGraph;
+  Entrypoint(String rootDir, SystemCache cache, {bool packageSymlinks: true})
+      : root = new Package.load(null, rootDir, cache.sources),
+        cache = cache,
+        _packageSymlinks = packageSymlinks;
+  Entrypoint.inMemory(this.root, this._lockFile, this.cache)
+      : _packageSymlinks = false;
+  String get packagesDir => path.join(root.dir, 'packages');
+  bool get lockFileExists => _lockFile != null || entryExists(lockFilePath);
+  LockFile get lockFile {
+    if (_lockFile != null) return _lockFile;
+    if (!lockFileExists) {
+      _lockFile = new LockFile.empty();
+    } else {
+      _lockFile = new LockFile.load(lockFilePath, cache.sources);
+    }
+    return _lockFile;
+  }
+  String get pubspecPath => path.join(root.dir, 'pubspec.yaml');
+  String get lockFilePath => path.join(root.dir, 'pubspec.lock');
+  Future acquireDependencies(SolveType type, {List<String> useLatest,
+      bool dryRun: false}) {
+    return syncFuture(() {
+      return resolveVersions(
+          type,
+          cache.sources,
+          root,
+          lockFile: lockFile,
+          useLatest: useLatest);
+    }).then((result) {
+      if (!result.succeeded) throw result.error;
+      result.showReport(type);
+      if (dryRun) {
+        result.summarizeChanges(type, dryRun: dryRun);
+        return null;
+      }
+      if (_packageSymlinks) {
+        cleanDir(packagesDir);
+      } else {
+        deleteEntry(packagesDir);
+      }
+      return Future.wait(result.packages.map(_get)).then((ids) {
+        _saveLockFile(ids);
+        if (_packageSymlinks) _linkSelf();
+        _linkOrDeleteSecondaryPackageDirs();
+        result.summarizeChanges(type, dryRun: dryRun);
+        return loadPackageGraph(result);
+      }).then((packageGraph) {
+        return precompileExecutables(
+            changed: result.changedPackages).catchError((error, stackTrace) {
+          log.exception(error, stackTrace);
+        });
+      });
+    });
+  }
+  Future precompileExecutables({Iterable<String> changed}) {
+    if (changed != null) changed = changed.toSet();
+    var binDir = path.join('.pub', 'bin');
+    var sdkVersionPath = path.join(binDir, 'sdk-version');
+    var sdkMatches =
+        fileExists(sdkVersionPath) &&
+        readTextFile(sdkVersionPath) == "${sdk.version}\n";
+    if (!sdkMatches) changed = null;
+    return loadPackageGraph().then((graph) {
+      var executables = new Map.fromIterable(
+          root.immediateDependencies,
+          key: (dep) => dep.name,
+          value: (dep) => _executablesForPackage(graph, dep.name, changed));
+      for (var package in executables.keys.toList()) {
+        if (executables[package].isEmpty) executables.remove(package);
+      }
+      if (!sdkMatches) deleteEntry(binDir);
+      if (executables.isEmpty) return null;
+      return log.progress("Precompiling executables", () {
+        ensureDir(binDir);
+        writeTextFile(sdkVersionPath, "${sdk.version}\n");
+        var packagesToLoad = unionAll(
+            executables.keys.map(
+                graph.transitiveDependencies)).map((package) => package.name).toSet();
+        return AssetEnvironment.create(
+            this,
+            BarbackMode.RELEASE,
+            packages: packagesToLoad,
+            useDart2JS: false).then((environment) {
+          environment.barback.errors.listen((error) {
+            log.error(log.red("Build error:\n$error"));
+          });
+          return waitAndPrintErrors(executables.keys.map((package) {
+            var dir = path.join(binDir, package);
+            cleanDir(dir);
+            return environment.precompileExecutables(
+                package,
+                dir,
+                executableIds: executables[package]);
+          }));
+        });
+      });
+    });
+  }
+  List<AssetId> _executablesForPackage(PackageGraph graph, String packageName,
+      Set<String> changed) {
+    var package = graph.packages[packageName];
+    var binDir = path.join(package.dir, 'bin');
+    if (!dirExists(binDir)) return [];
+    var deps = graph.transitiveDependencies(packageName);
+    var hasUncachedDependency = deps.any((package) {
+      var source = cache.sources[graph.lockFile.packages[package.name].source];
+      return source is! CachedSource;
+    });
+    if (hasUncachedDependency) return [];
+    var executables = package.executableIds;
+    if (changed == null) return executables;
+    if (deps.any((package) => changed.contains(package.name))) {
+      return executables;
+    }
+    var executablesExist = executables.every(
+        (executable) =>
+            fileExists(
+                path.join(
+                    '.pub',
+                    'bin',
+                    packageName,
+                    "${path.url.basename(executable.path)}.snapshot")));
+    if (!executablesExist) return executables;
+    return [];
+  }
+  Future<PackageId> _get(PackageId id) {
+    if (id.isRoot) return new Future.value(id);
+    var source = cache.sources[id.source];
+    return syncFuture(() {
+      if (!_packageSymlinks) {
+        if (source is! CachedSource) return null;
+        return source.downloadToSystemCache(id);
+      }
+      var packageDir = path.join(packagesDir, id.name);
+      if (entryExists(packageDir)) deleteEntry(packageDir);
+      return source.get(id, packageDir);
+    }).then((_) => source.resolveId(id));
+  }
+  bool _isLockFileUpToDate(LockFile lockFile) {
+    return root.immediateDependencies.every((package) {
+      var locked = lockFile.packages[package.name];
+      if (locked == null) return false;
+      if (package.source != locked.source) return false;
+      if (!package.constraint.allows(locked.version)) return false;
+      var source = cache.sources[package.source];
+      if (source == null) return false;
+      return source.descriptionsEqual(package.description, locked.description);
+    });
+  }
+  Future<bool> _arePackagesAvailable(LockFile lockFile) {
+    return Future.wait(lockFile.packages.values.map((package) {
+      var source = cache.sources[package.source];
+      assert(source != null);
+      if (source is! CachedSource) return new Future.value(true);
+      return source.getDirectory(package).then((dir) {
+        return dirExists(dir) || fileExists(path.join(dir, "pubspec.yaml"));
+      });
+    })).then((results) {
+      return results.every((result) => result);
+    });
+  }
+  Future ensureLockFileIsUpToDate() {
+    return syncFuture(() {
+      if (!_isLockFileUpToDate(lockFile)) {
+        if (lockFileExists) {
+          log.message(
+              "Your pubspec has changed, so we need to update your lockfile:");
+        } else {
+          log.message(
+              "You don't have a lockfile, so we need to generate that:");
+        }
+        return false;
+      }
+      return _arePackagesAvailable(lockFile).then((available) {
+        if (!available) {
+          log.message(
+              "You are missing some dependencies, so we need to install them " "first:");
+        }
+        return available;
+      });
+    }).then((upToDate) {
+      if (upToDate) return null;
+      return acquireDependencies(SolveType.GET);
+    });
+  }
+  Future<PackageGraph> loadPackageGraph([SolveResult result]) {
+    if (_packageGraph != null) return new Future.value(_packageGraph);
+    return syncFuture(() {
+      if (result != null) {
+        return Future.wait(result.packages.map((id) {
+          return cache.sources[id.source].getDirectory(
+              id).then((dir) => new Package(result.pubspecs[id.name], dir));
+        })).then((packages) {
+          return new PackageGraph(
+              this,
+              new LockFile(result.packages),
+              new Map.fromIterable(packages, key: (package) => package.name));
+        });
+      } else {
+        return ensureLockFileIsUpToDate().then((_) {
+          return Future.wait(lockFile.packages.values.map((id) {
+            var source = cache.sources[id.source];
+            return source.getDirectory(
+                id).then((dir) => new Package.load(id.name, dir, cache.sources));
+          })).then((packages) {
+            var packageMap = new Map.fromIterable(packages, key: (p) => p.name);
+            packageMap[root.name] = root;
+            return new PackageGraph(this, lockFile, packageMap);
+          });
+        });
+      }
+    }).then((graph) {
+      _packageGraph = graph;
+      return graph;
+    });
+  }
+  void _saveLockFile(List<PackageId> packageIds) {
+    _lockFile = new LockFile(packageIds);
+    var lockFilePath = path.join(root.dir, 'pubspec.lock');
+    writeTextFile(lockFilePath, _lockFile.serialize(root.dir, cache.sources));
+  }
+  void _linkSelf() {
+    var linkPath = path.join(packagesDir, root.name);
+    if (entryExists(linkPath)) return;
+    ensureDir(packagesDir);
+    createPackageSymlink(
+        root.name,
+        root.dir,
+        linkPath,
+        isSelfLink: true,
+        relative: true);
+  }
+  void _linkOrDeleteSecondaryPackageDirs() {
+    var binDir = path.join(root.dir, 'bin');
+    if (dirExists(binDir)) _linkOrDeleteSecondaryPackageDir(binDir);
+    for (var dir in ['benchmark', 'example', 'test', 'tool', 'web']) {
+      _linkOrDeleteSecondaryPackageDirsRecursively(path.join(root.dir, dir));
+    }
+  }
+  void _linkOrDeleteSecondaryPackageDirsRecursively(String dir) {
+    if (!dirExists(dir)) return;
+    _linkOrDeleteSecondaryPackageDir(dir);
+    _listDirWithoutPackages(
+        dir).where(dirExists).forEach(_linkOrDeleteSecondaryPackageDir);
+  }
+  List<String> _listDirWithoutPackages(dir) {
+    return flatten(listDir(dir).map((file) {
+      if (path.basename(file) == 'packages') return [];
+      if (!dirExists(file)) return [];
+      var fileAndSubfiles = [file];
+      fileAndSubfiles.addAll(_listDirWithoutPackages(file));
+      return fileAndSubfiles;
+    }));
+  }
+  void _linkOrDeleteSecondaryPackageDir(String dir) {
+    var symlink = path.join(dir, 'packages');
+    if (entryExists(symlink)) deleteEntry(symlink);
+    if (_packageSymlinks) createSymlink(packagesDir, symlink, relative: true);
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/error_group.dart b/sdk/lib/_internal/pub_generated/lib/src/error_group.dart
new file mode 100644
index 0000000..0262085
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/error_group.dart
@@ -0,0 +1,143 @@
+library pub.error_group;
+import 'dart:async';
+class ErrorGroup {
+  final _futures = <_ErrorGroupFuture>[];
+  final _streams = <_ErrorGroupStream>[];
+  var _isDone = false;
+  final _doneCompleter = new Completer();
+  _ErrorGroupFuture _done;
+  Future get done => _done;
+  ErrorGroup() {
+    this._done = new _ErrorGroupFuture(this, _doneCompleter.future);
+  }
+  Future registerFuture(Future future) {
+    if (_isDone) {
+      throw new StateError(
+          "Can't register new members on a complete " "ErrorGroup.");
+    }
+    var wrapped = new _ErrorGroupFuture(this, future);
+    _futures.add(wrapped);
+    return wrapped;
+  }
+  Stream registerStream(Stream stream) {
+    if (_isDone) {
+      throw new StateError(
+          "Can't register new members on a complete " "ErrorGroup.");
+    }
+    var wrapped = new _ErrorGroupStream(this, stream);
+    _streams.add(wrapped);
+    return wrapped;
+  }
+  void signalError(var error, [StackTrace stackTrace]) {
+    if (_isDone) {
+      throw new StateError("Can't signal errors on a complete ErrorGroup.");
+    }
+    _signalError(error, stackTrace);
+  }
+  void _signalError(var error, [StackTrace stackTrace]) {
+    if (_isDone) return;
+    var caught = false;
+    for (var future in _futures) {
+      if (future._isDone || future._hasListeners) caught = true;
+      future._signalError(error, stackTrace);
+    }
+    for (var stream in _streams) {
+      if (stream._isDone || stream._hasListeners) caught = true;
+      stream._signalError(error, stackTrace);
+    }
+    _isDone = true;
+    _done._signalError(error, stackTrace);
+    if (!caught && !_done._hasListeners) scheduleMicrotask(() {
+      throw error;
+    });
+  }
+  void _signalFutureComplete(_ErrorGroupFuture future) {
+    if (_isDone) return;
+    _isDone = _futures.every((future) => future._isDone) &&
+        _streams.every((stream) => stream._isDone);
+    if (_isDone) _doneCompleter.complete();
+  }
+  void _signalStreamComplete(_ErrorGroupStream stream) {
+    if (_isDone) return;
+    _isDone = _futures.every((future) => future._isDone) &&
+        _streams.every((stream) => stream._isDone);
+    if (_isDone) _doneCompleter.complete();
+  }
+}
+class _ErrorGroupFuture implements Future {
+  final ErrorGroup _group;
+  var _isDone = false;
+  final _completer = new Completer();
+  bool _hasListeners = false;
+  _ErrorGroupFuture(this._group, Future inner) {
+    inner.then((value) {
+      if (!_isDone) _completer.complete(value);
+      _isDone = true;
+      _group._signalFutureComplete(this);
+    }).catchError(_group._signalError);
+    _completer.future.catchError((_) {});
+  }
+  Future then(onValue(value), {Function onError}) {
+    _hasListeners = true;
+    return _completer.future.then(onValue, onError: onError);
+  }
+  Future catchError(Function onError, {bool test(Object error)}) {
+    _hasListeners = true;
+    return _completer.future.catchError(onError, test: test);
+  }
+  Future whenComplete(void action()) {
+    _hasListeners = true;
+    return _completer.future.whenComplete(action);
+  }
+  Future timeout(Duration timeLimit, {void onTimeout()}) {
+    _hasListeners = true;
+    return _completer.future.timeout(timeLimit, onTimeout: onTimeout);
+  }
+  Stream asStream() {
+    _hasListeners = true;
+    return _completer.future.asStream();
+  }
+  void _signalError(var error, [StackTrace stackTrace]) {
+    if (!_isDone) _completer.completeError(error, stackTrace);
+    _isDone = true;
+  }
+}
+class _ErrorGroupStream extends Stream {
+  final ErrorGroup _group;
+  var _isDone = false;
+  final StreamController _controller;
+  Stream _stream;
+  StreamSubscription _subscription;
+  bool get _hasListeners => _controller.hasListener;
+  _ErrorGroupStream(this._group, Stream inner)
+      : _controller = new StreamController(sync: true) {
+    _stream = inner.isBroadcast ?
+        _controller.stream.asBroadcastStream(onCancel: (sub) => sub.cancel()) :
+        _controller.stream;
+    _subscription = inner.listen((v) {
+      _controller.add(v);
+    }, onError: (e, [stackTrace]) {
+      _group._signalError(e, stackTrace);
+    }, onDone: () {
+      _isDone = true;
+      _group._signalStreamComplete(this);
+      _controller.close();
+    });
+  }
+  StreamSubscription listen(void onData(value), {Function onError, void
+      onDone(), bool cancelOnError}) {
+    return _stream.listen(
+        onData,
+        onError: onError,
+        onDone: onDone,
+        cancelOnError: true);
+  }
+  void _signalError(var e, [StackTrace stackTrace]) {
+    if (_isDone) return;
+    _subscription.cancel();
+    new Future.value().then((_) {
+      _controller.addError(e, stackTrace);
+      _controller.close();
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/exceptions.dart b/sdk/lib/_internal/pub_generated/lib/src/exceptions.dart
new file mode 100644
index 0000000..f3851a5
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/exceptions.dart
@@ -0,0 +1,74 @@
+library pub.exceptions;
+import 'dart:io';
+import 'dart:isolate';
+import "package:analyzer/analyzer.dart";
+import "package:http/http.dart" as http;
+import "package:stack_trace/stack_trace.dart";
+import "package:yaml/yaml.dart";
+import '../../asset/dart/serialize.dart';
+class ApplicationException implements Exception {
+  final String message;
+  ApplicationException(this.message);
+  String toString() => message;
+}
+class FileException implements ApplicationException {
+  final String message;
+  final String path;
+  FileException(this.message, this.path);
+  String toString() => message;
+}
+class WrappedException extends ApplicationException {
+  final innerError;
+  final Chain innerChain;
+  WrappedException(String message, this.innerError, [StackTrace innerTrace])
+      : innerChain = innerTrace == null ? null : new Chain.forTrace(innerTrace),
+        super(message);
+}
+class SilentException extends WrappedException {
+  SilentException(innerError, [StackTrace innerTrace])
+      : super(innerError.toString(), innerError, innerTrace);
+}
+class UsageException extends ApplicationException {
+  String _usage;
+  UsageException(String message, this._usage) : super(message);
+  String toString() => "$message\n\n$_usage";
+}
+class DataException extends ApplicationException {
+  DataException(String message) : super(message);
+}
+class PackageNotFoundException extends WrappedException {
+  PackageNotFoundException(String message, [innerError, StackTrace innerTrace])
+      : super(message, innerError, innerTrace);
+}
+final _userFacingExceptions = new Set<String>.from(
+    [
+        'ApplicationException',
+        'GitException',
+        'ClientException',
+        'AnalyzerError',
+        'AnalyzerErrorGroup',
+        'IsolateSpawnException',
+        'CertificateException',
+        'FileSystemException',
+        'HandshakeException',
+        'HttpException',
+        'IOException',
+        'ProcessException',
+        'RedirectException',
+        'SignalException',
+        'SocketException',
+        'StdoutException',
+        'TlsException',
+        'WebSocketException']);
+bool isUserFacingException(error) {
+  if (error is CrossIsolateException) {
+    return _userFacingExceptions.contains(error.type);
+  }
+  return error is ApplicationException ||
+      error is AnalyzerError ||
+      error is AnalyzerErrorGroup ||
+      error is IsolateSpawnException ||
+      error is IOException ||
+      error is http.ClientException ||
+      error is YamlException;
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/executable.dart b/sdk/lib/_internal/pub_generated/lib/src/executable.dart
new file mode 100644
index 0000000..006ba7e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/executable.dart
@@ -0,0 +1,247 @@
+library pub.executable;
+import 'dart:async';
+import 'dart:io';
+import 'package:barback/barback.dart';
+import 'package:path/path.dart' as p;
+import 'package:stack_trace/stack_trace.dart';
+import 'barback/asset_environment.dart';
+import 'entrypoint.dart';
+import 'exit_codes.dart' as exit_codes;
+import 'io.dart';
+import 'log.dart' as log;
+import 'utils.dart';
+Future<int> runExecutable(Entrypoint entrypoint, String package,
+    String executable, Iterable<String> args, {bool isGlobal: false}) {
+  final completer0 = new Completer();
+  scheduleMicrotask(() {
+    try {
+      join0() {
+        var localSnapshotPath =
+            p.join(".pub", "bin", package, "${executable}.dart.snapshot");
+        join1() {
+          var rootDir = "bin";
+          var parts = p.split(executable);
+          join2() {
+            AssetEnvironment.create(
+                entrypoint,
+                BarbackMode.RELEASE,
+                useDart2JS: false).then((x0) {
+              try {
+                var environment = x0;
+                environment.barback.errors.listen(((error) {
+                  log.error(log.red("Build error:\n$error"));
+                }));
+                var server;
+                join3() {
+                  var assetPath = "${p.url.joinAll(p.split(executable))}.dart";
+                  var id = new AssetId(server.package, assetPath);
+                  completer0.complete(
+                      environment.barback.getAssetById(id).then(((_) {
+                    final completer0 = new Completer();
+                    scheduleMicrotask(() {
+                      try {
+                        var vmArgs = [];
+                        vmArgs.add("--checked");
+                        var relativePath =
+                            p.url.relative(assetPath, from: p.url.joinAll(p.split(server.rootDirectory)));
+                        vmArgs.add(server.url.resolve(relativePath).toString());
+                        vmArgs.addAll(args);
+                        Process.start(Platform.executable, vmArgs).then((x0) {
+                          try {
+                            var process = x0;
+                            process.stderr.listen(stderr.add);
+                            process.stdout.listen(stdout.add);
+                            stdin.listen(process.stdin.add);
+                            completer0.complete(process.exitCode);
+                          } catch (e0) {
+                            completer0.completeError(e0);
+                          }
+                        }, onError: (e1) {
+                          completer0.completeError(e1);
+                        });
+                      } catch (e2) {
+                        completer0.completeError(e2);
+                      }
+                    });
+                    return completer0.future;
+                  })).catchError(((error, stackTrace) {
+                    if (error is! AssetNotFoundException) throw error;
+                    var message =
+                        "Could not find ${log.bold(executable + ".dart")}";
+                    if (package != entrypoint.root.name) {
+                      message += " in package ${log.bold(server.package)}";
+                    }
+                    log.error("$message.");
+                    log.fine(new Chain.forTrace(stackTrace));
+                    return exit_codes.NO_INPUT;
+                  })));
+                }
+                if (package == entrypoint.root.name) {
+                  environment.serveDirectory(rootDir).then((x1) {
+                    try {
+                      server = x1;
+                      join3();
+                    } catch (e1) {
+                      completer0.completeError(e1);
+                    }
+                  }, onError: (e2) {
+                    completer0.completeError(e2);
+                  });
+                } else {
+                  var dep = entrypoint.root.immediateDependencies.firstWhere(
+                      ((dep) => dep.name == package),
+                      orElse: (() => null));
+                  join4() {
+                    environment.servePackageBinDirectory(package).then((x2) {
+                      try {
+                        server = x2;
+                        join3();
+                      } catch (e3) {
+                        completer0.completeError(e3);
+                      }
+                    }, onError: (e4) {
+                      completer0.completeError(e4);
+                    });
+                  }
+                  if (dep == null) {
+                    join5() {
+                      join4();
+                    }
+                    if (environment.graph.packages.containsKey(package)) {
+                      dataError(
+                          'Package "${package}" is not an immediate dependency.\n'
+                              'Cannot run executables in transitive dependencies.');
+                      join5();
+                    } else {
+                      dataError(
+                          'Could not find package "${package}". Did you forget to ' 'add a dependency?');
+                      join5();
+                    }
+                  } else {
+                    join4();
+                  }
+                }
+              } catch (e0) {
+                completer0.completeError(e0);
+              }
+            }, onError: (e5) {
+              completer0.completeError(e5);
+            });
+          }
+          if (parts.length > 1) {
+            assert(!isGlobal && package == entrypoint.root.name);
+            rootDir = parts.first;
+            join2();
+          } else {
+            executable = p.join("bin", executable);
+            join2();
+          }
+        }
+        if (!isGlobal && fileExists(localSnapshotPath)) {
+          completer0.complete(
+              _runCachedExecutable(entrypoint, localSnapshotPath, args));
+        } else {
+          join1();
+        }
+      }
+      if (log.verbosity == log.Verbosity.NORMAL) {
+        log.verbosity = log.Verbosity.WARNING;
+        join0();
+      } else {
+        join0();
+      }
+    } catch (e6) {
+      completer0.completeError(e6);
+    }
+  });
+  return completer0.future;
+}
+Future<int> runSnapshot(String path, Iterable<String> args, {recompile(),
+    bool checked: false}) {
+  final completer0 = new Completer();
+  scheduleMicrotask(() {
+    try {
+      var vmArgs = [path]..addAll(args);
+      join0() {
+        var stdin1;
+        var stdin2;
+        join1() {
+          runProcess(input) {
+            final completer0 = new Completer();
+            scheduleMicrotask(() {
+              try {
+                Process.start(Platform.executable, vmArgs).then((x0) {
+                  try {
+                    var process = x0;
+                    process.stderr.listen(stderr.add);
+                    process.stdout.listen(stdout.add);
+                    input.listen(process.stdin.add);
+                    completer0.complete(process.exitCode);
+                  } catch (e0) {
+                    completer0.completeError(e0);
+                  }
+                }, onError: (e1) {
+                  completer0.completeError(e1);
+                });
+              } catch (e2) {
+                completer0.completeError(e2);
+              }
+            });
+            return completer0.future;
+          }
+          runProcess(stdin1).then((x0) {
+            try {
+              var exitCode = x0;
+              join2() {
+                recompile().then((x1) {
+                  try {
+                    x1;
+                    completer0.complete(runProcess(stdin2));
+                  } catch (e1) {
+                    completer0.completeError(e1);
+                  }
+                }, onError: (e2) {
+                  completer0.completeError(e2);
+                });
+              }
+              if (recompile == null || exitCode != 255) {
+                completer0.complete(exitCode);
+              } else {
+                join2();
+              }
+            } catch (e0) {
+              completer0.completeError(e0);
+            }
+          }, onError: (e3) {
+            completer0.completeError(e3);
+          });
+        }
+        if (recompile == null) {
+          stdin1 = stdin;
+          join1();
+        } else {
+          var pair = tee(stdin);
+          stdin1 = pair.first;
+          stdin2 = pair.last;
+          join1();
+        }
+      }
+      if (checked) {
+        vmArgs.insert(0, "--checked");
+        join0();
+      } else {
+        join0();
+      }
+    } catch (e4) {
+      completer0.completeError(e4);
+    }
+  });
+  return completer0.future;
+}
+Future<int> _runCachedExecutable(Entrypoint entrypoint, String snapshotPath,
+    List<String> args) {
+  return runSnapshot(snapshotPath, args, checked: true, recompile: () {
+    log.fine("Precompiled executable is out of date.");
+    return entrypoint.precompileExecutables();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/exit_codes.dart b/sdk/lib/_internal/pub_generated/lib/src/exit_codes.dart
new file mode 100644
index 0000000..a498c28
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/exit_codes.dart
@@ -0,0 +1,17 @@
+library pub.exit_codes;
+const SUCCESS = 0;
+const USAGE = 64;
+const DATA = 65;
+const NO_INPUT = 66;
+const NO_USER = 67;
+const NO_HOST = 68;
+const UNAVAILABLE = 69;
+const SOFTWARE = 70;
+const OS = 71;
+const OS_FILE = 72;
+const CANT_CREATE = 73;
+const IO = 74;
+const TEMP_FAIL = 75;
+const PROTOCOL = 76;
+const NO_PERM = 77;
+const CONFIG = 78;
diff --git a/sdk/lib/_internal/pub_generated/lib/src/git.dart b/sdk/lib/_internal/pub_generated/lib/src/git.dart
new file mode 100644
index 0000000..cd61507
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/git.dart
@@ -0,0 +1,75 @@
+library pub.git;
+import 'dart:async';
+import 'dart:io';
+import 'package:stack_trace/stack_trace.dart';
+import 'exceptions.dart';
+import 'io.dart';
+import 'log.dart' as log;
+import 'utils.dart';
+class GitException implements ApplicationException {
+  final List<String> args;
+  final String stderr;
+  String get message => 'Git error. Command: git ${args.join(" ")}\n$stderr';
+  GitException(Iterable<String> args, this.stderr) : args = args.toList();
+  String toString() => message;
+}
+bool get isInstalled {
+  if (_isInstalledCache != null) return _isInstalledCache;
+  _isInstalledCache = _gitCommand != null;
+  return _isInstalledCache;
+}
+bool _isInstalledCache;
+Future<List<String>> run(List<String> args, {String workingDir, Map<String,
+    String> environment}) {
+  if (!isInstalled) {
+    fail(
+        "Cannot find a Git executable.\n" "Please ensure Git is correctly installed.");
+  }
+  return runProcess(
+      _gitCommand,
+      args,
+      workingDir: workingDir,
+      environment: environment).then((result) {
+    if (!result.success) throw new GitException(args, result.stderr.join("\n"));
+    return result.stdout;
+  });
+}
+List<String> runSync(List<String> args, {String workingDir, Map<String,
+    String> environment}) {
+  if (!isInstalled) {
+    fail(
+        "Cannot find a Git executable.\n" "Please ensure Git is correctly installed.");
+  }
+  var result = runProcessSync(
+      _gitCommand,
+      args,
+      workingDir: workingDir,
+      environment: environment);
+  if (!result.success) throw new GitException(args, result.stderr.join("\n"));
+  return result.stdout;
+}
+String get _gitCommand {
+  if (_commandCache != null) return _commandCache;
+  var command;
+  if (_tryGitCommand("git")) {
+    _commandCache = "git";
+  } else if (_tryGitCommand("git.cmd")) {
+    _commandCache = "git.cmd";
+  } else {
+    return null;
+  }
+  log.fine('Determined git command $command.');
+  return _commandCache;
+}
+String _commandCache;
+bool _tryGitCommand(String command) {
+  try {
+    var result = runProcessSync(command, ["--version"]);
+    var regexp = new RegExp("^git version");
+    return result.stdout.length == 1 && regexp.hasMatch(result.stdout.single);
+  } on ProcessException catch (error, stackTrace) {
+    var chain = new Chain.forTrace(stackTrace);
+    log.message('Git command is not "$command": $error\n$chain');
+    return false;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/global_packages.dart b/sdk/lib/_internal/pub_generated/lib/src/global_packages.dart
new file mode 100644
index 0000000..c122234
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/global_packages.dart
@@ -0,0 +1,357 @@
+library pub.global_packages;
+import 'dart:async';
+import 'dart:io';
+import 'package:path/path.dart' as p;
+import 'package:barback/barback.dart';
+import 'barback/asset_environment.dart';
+import 'entrypoint.dart';
+import 'executable.dart' as exe;
+import 'io.dart';
+import 'lock_file.dart';
+import 'log.dart' as log;
+import 'package.dart';
+import 'pubspec.dart';
+import 'system_cache.dart';
+import 'solver/version_solver.dart';
+import 'source/cached.dart';
+import 'source/git.dart';
+import 'source/path.dart';
+import 'utils.dart';
+import 'version.dart';
+class GlobalPackages {
+  final SystemCache cache;
+  String get _directory => p.join(cache.rootDir, "global_packages");
+  GlobalPackages(this.cache);
+  Future activateGit(String repo) {
+    final completer0 = new Completer();
+    scheduleMicrotask(() {
+      try {
+        var source = cache.sources["git"] as GitSource;
+        source.getPackageNameFromRepo(repo).then((x0) {
+          try {
+            var name = x0;
+            _describeActive(name);
+            _installInCache(
+                new PackageDep(name, "git", VersionConstraint.any, repo)).then((x1) {
+              try {
+                x1;
+                completer0.complete(null);
+              } catch (e1) {
+                completer0.completeError(e1);
+              }
+            }, onError: (e2) {
+              completer0.completeError(e2);
+            });
+          } catch (e0) {
+            completer0.completeError(e0);
+          }
+        }, onError: (e3) {
+          completer0.completeError(e3);
+        });
+      } catch (e4) {
+        completer0.completeError(e4);
+      }
+    });
+    return completer0.future;
+  }
+  Future activateHosted(String name, VersionConstraint constraint) {
+    _describeActive(name);
+    return _installInCache(new PackageDep(name, "hosted", constraint, name));
+  }
+  Future activatePath(String path) {
+    final completer0 = new Completer();
+    scheduleMicrotask(() {
+      try {
+        var entrypoint = new Entrypoint(path, cache);
+        entrypoint.ensureLockFileIsUpToDate().then((x0) {
+          try {
+            x0;
+            var name = entrypoint.root.name;
+            _describeActive(name);
+            var fullPath = canonicalize(entrypoint.root.dir);
+            var id = new PackageId(
+                name,
+                "path",
+                entrypoint.root.version,
+                PathSource.describePath(fullPath));
+            _writeLockFile(name, new LockFile([id]));
+            var binDir = p.join(_directory, name, 'bin');
+            join0() {
+              completer0.complete(null);
+            }
+            if (dirExists(binDir)) {
+              deleteEntry(binDir);
+              join0();
+            } else {
+              join0();
+            }
+          } catch (e0) {
+            completer0.completeError(e0);
+          }
+        }, onError: (e1) {
+          completer0.completeError(e1);
+        });
+      } catch (e2) {
+        completer0.completeError(e2);
+      }
+    });
+    return completer0.future;
+  }
+  Future _installInCache(PackageDep dep) {
+    final completer0 = new Completer();
+    scheduleMicrotask(() {
+      try {
+        var source = cache.sources[dep.source];
+        var root = new Package.inMemory(
+            new Pubspec(
+                "pub global activate",
+                dependencies: [dep],
+                sources: cache.sources));
+        resolveVersions(SolveType.GET, cache.sources, root).then((x0) {
+          try {
+            var result = x0;
+            join0() {
+              result.showReport(SolveType.GET);
+              Future.wait(result.packages.map(_cacheDependency)).then((x1) {
+                try {
+                  var ids = x1;
+                  var lockFile = new LockFile(ids);
+                  new Entrypoint.inMemory(
+                      root,
+                      lockFile,
+                      cache).loadPackageGraph(result).then((x2) {
+                    try {
+                      var graph = x2;
+                      _precompileExecutables(
+                          graph.entrypoint,
+                          dep.name).then((x3) {
+                        try {
+                          x3;
+                          _writeLockFile(dep.name, lockFile);
+                          completer0.complete(null);
+                        } catch (e3) {
+                          completer0.completeError(e3);
+                        }
+                      }, onError: (e4) {
+                        completer0.completeError(e4);
+                      });
+                    } catch (e2) {
+                      completer0.completeError(e2);
+                    }
+                  }, onError: (e5) {
+                    completer0.completeError(e5);
+                  });
+                } catch (e1) {
+                  completer0.completeError(e1);
+                }
+              }, onError: (e6) {
+                completer0.completeError(e6);
+              });
+            }
+            if (!result.succeeded) {
+              join1() {
+                join2() {
+                  completer0.completeError(result.error);
+                }
+                if (result.error is NoVersionException) {
+                  dataError(result.error.message);
+                  join2();
+                } else {
+                  join2();
+                }
+              }
+              if (result.error.package != dep.name) {
+                completer0.completeError(result.error);
+              } else {
+                join1();
+              }
+            } else {
+              join0();
+            }
+          } catch (e0) {
+            completer0.completeError(e0);
+          }
+        }, onError: (e7) {
+          completer0.completeError(e7);
+        });
+      } catch (e8) {
+        completer0.completeError(e8);
+      }
+    });
+    return completer0.future;
+  }
+  Future _precompileExecutables(Entrypoint entrypoint, String package) {
+    return log.progress("Precompiling executables", () {
+      var binDir = p.join(_directory, package, 'bin');
+      cleanDir(binDir);
+      return AssetEnvironment.create(
+          entrypoint,
+          BarbackMode.RELEASE,
+          useDart2JS: false).then((environment) {
+        environment.barback.errors.listen((error) {
+          log.error(log.red("Build error:\n$error"));
+        });
+        return environment.precompileExecutables(package, binDir);
+      });
+    });
+  }
+  Future<PackageId> _cacheDependency(PackageId id) {
+    final completer0 = new Completer();
+    scheduleMicrotask(() {
+      try {
+        var source = cache.sources[id.source];
+        join0() {
+          completer0.complete(source.resolveId(id));
+        }
+        if (!id.isRoot && source is CachedSource) {
+          source.downloadToSystemCache(id).then((x0) {
+            try {
+              x0;
+              join0();
+            } catch (e0) {
+              completer0.completeError(e0);
+            }
+          }, onError: (e1) {
+            completer0.completeError(e1);
+          });
+        } else {
+          join0();
+        }
+      } catch (e2) {
+        completer0.completeError(e2);
+      }
+    });
+    return completer0.future;
+  }
+  void _writeLockFile(String package, LockFile lockFile) {
+    ensureDir(p.join(_directory, package));
+    var oldPath = p.join(_directory, "$package.lock");
+    if (fileExists(oldPath)) deleteEntry(oldPath);
+    writeTextFile(
+        _getLockFilePath(package),
+        lockFile.serialize(cache.rootDir, cache.sources));
+    var id = lockFile.packages[package];
+    log.message('Activated ${_formatPackage(id)}.');
+  }
+  void _describeActive(String name) {
+    try {
+      var lockFile = new LockFile.load(_getLockFilePath(name), cache.sources);
+      var id = lockFile.packages[name];
+      if (id.source == 'git') {
+        var url = GitSource.urlFromDescription(id.description);
+        log.message(
+            'Package ${log.bold(name)} is currently active from Git '
+                'repository "${url}".');
+      } else if (id.source == 'path') {
+        var path = PathSource.pathFromDescription(id.description);
+        log.message(
+            'Package ${log.bold(name)} is currently active at path ' '"$path".');
+      } else {
+        log.message(
+            'Package ${log.bold(name)} is currently active at version '
+                '${log.bold(id.version)}.');
+      }
+    } on IOException catch (error) {
+      return null;
+    }
+  }
+  bool deactivate(String name, {bool logDeactivate: false}) {
+    var dir = p.join(_directory, name);
+    if (!dirExists(dir)) return false;
+    if (logDeactivate) {
+      var lockFile = new LockFile.load(_getLockFilePath(name), cache.sources);
+      var id = lockFile.packages[name];
+      log.message('Deactivated package ${_formatPackage(id)}.');
+    }
+    deleteEntry(dir);
+    return true;
+  }
+  Future<Entrypoint> find(String name) {
+    return syncFuture(() {
+      var lockFilePath = _getLockFilePath(name);
+      var lockFile;
+      try {
+        lockFile = new LockFile.load(lockFilePath, cache.sources);
+      } on IOException catch (error) {
+        var oldLockFilePath = p.join(_directory, '$name.lock');
+        try {
+          lockFile = new LockFile.load(oldLockFilePath, cache.sources);
+        } on IOException catch (error) {
+          dataError("No active package ${log.bold(name)}.");
+        }
+        ensureDir(p.dirname(lockFilePath));
+        new File(oldLockFilePath).renameSync(lockFilePath);
+      }
+      var id = lockFile.packages[name];
+      lockFile.packages.remove(name);
+      var source = cache.sources[id.source];
+      if (source is CachedSource) {
+        return cache.sources[id.source].getDirectory(
+            id).then((dir) => new Package.load(name, dir, cache.sources)).then((package) {
+          return new Entrypoint.inMemory(package, lockFile, cache);
+        });
+      }
+      assert(id.source == "path");
+      return new Entrypoint(
+          PathSource.pathFromDescription(id.description),
+          cache);
+    });
+  }
+  Future<int> runExecutable(String package, String executable,
+      Iterable<String> args) {
+    var binDir = p.join(_directory, package, 'bin');
+    if (!fileExists(p.join(binDir, '$executable.dart.snapshot'))) {
+      return find(package).then((entrypoint) {
+        return exe.runExecutable(
+            entrypoint,
+            package,
+            executable,
+            args,
+            isGlobal: true);
+      });
+    }
+    if (log.verbosity == log.Verbosity.NORMAL) {
+      log.verbosity = log.Verbosity.WARNING;
+    }
+    var snapshotPath = p.join(binDir, '$executable.dart.snapshot');
+    return exe.runSnapshot(snapshotPath, args, recompile: () {
+      log.fine(
+          "$package:$executable is out of date and needs to be " "recompiled.");
+      return find(
+          package).then(
+              (entrypoint) =>
+                  entrypoint.loadPackageGraph()).then(
+                      (graph) => _precompileExecutables(graph.entrypoint, package));
+    });
+  }
+  String _getLockFilePath(String name) =>
+      p.join(_directory, name, "pubspec.lock");
+  void listActivePackages() {
+    if (!dirExists(_directory)) return;
+    loadPackageId(file, name) {
+      var lockFile = new LockFile.load(p.join(_directory, file), cache.sources);
+      return lockFile.packages[name];
+    }
+    var packages = listDir(_directory).map((entry) {
+      if (fileExists(entry)) {
+        return loadPackageId(entry, p.basenameWithoutExtension(entry));
+      } else {
+        return loadPackageId(p.join(entry, 'pubspec.lock'), p.basename(entry));
+      }
+    }).toList();
+    packages
+        ..sort((id1, id2) => id1.name.compareTo(id2.name))
+        ..forEach((id) => log.message(_formatPackage(id)));
+  }
+  String _formatPackage(PackageId id) {
+    if (id.source == 'git') {
+      var url = GitSource.urlFromDescription(id.description);
+      return '${log.bold(id.name)} ${id.version} from Git repository "$url"';
+    } else if (id.source == 'path') {
+      var path = PathSource.pathFromDescription(id.description);
+      return '${log.bold(id.name)} ${id.version} at path "$path"';
+    } else {
+      return '${log.bold(id.name)} ${id.version}';
+    }
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/http.dart b/sdk/lib/_internal/pub_generated/lib/src/http.dart
new file mode 100644
index 0000000..3c1f419
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/http.dart
@@ -0,0 +1,182 @@
+library pub.http;
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+import 'package:http/http.dart' as http;
+import 'package:http_throttle/http_throttle.dart';
+import 'io.dart';
+import 'log.dart' as log;
+import 'oauth2.dart' as oauth2;
+import 'sdk.dart' as sdk;
+import 'utils.dart';
+final HTTP_TIMEOUT = 30 * 1000;
+final _CENSORED_FIELDS = const ['refresh_token', 'authorization'];
+final PUB_API_HEADERS = const {
+  'Accept': 'application/vnd.pub.v2+json'
+};
+class _PubHttpClient extends http.BaseClient {
+  final _requestStopwatches = new Map<http.BaseRequest, Stopwatch>();
+  http.Client _inner;
+  _PubHttpClient([http.Client inner])
+      : this._inner = inner == null ? new http.Client() : inner;
+  Future<http.StreamedResponse> send(http.BaseRequest request) {
+    _requestStopwatches[request] = new Stopwatch()..start();
+    request.headers[HttpHeaders.USER_AGENT] = "Dart pub ${sdk.version}";
+    _logRequest(request);
+    var stackTrace;
+    try {
+      throw null;
+    } catch (_, localStackTrace) {
+      stackTrace = localStackTrace;
+    }
+    var timeoutLength = HTTP_TIMEOUT;
+    var timeoutString = request.headers.remove('Pub-Request-Timeout');
+    if (timeoutString == 'None') {
+      timeoutLength = null;
+    } else if (timeoutString != null) {
+      timeoutLength = int.parse(timeoutString);
+    }
+    var future = _inner.send(request).then((streamedResponse) {
+      _logResponse(streamedResponse);
+      var status = streamedResponse.statusCode;
+      var tokenRequest =
+          urisEqual(streamedResponse.request.url, oauth2.tokenEndpoint);
+      if (status < 400 || status == 401 || (status == 400 && tokenRequest)) {
+        return streamedResponse;
+      }
+      if (status == 406 &&
+          request.headers['Accept'] == PUB_API_HEADERS['Accept']) {
+        fail(
+            "Pub ${sdk.version} is incompatible with the current version of "
+                "${request.url.host}.\n" "Upgrade pub to the latest version and try again.");
+      }
+      if (status == 500 &&
+          (request.url.host == "pub.dartlang.org" ||
+              request.url.host == "storage.googleapis.com")) {
+        var message =
+            "HTTP error 500: Internal Server Error at " "${request.url}.";
+        if (request.url.host == "pub.dartlang.org" ||
+            request.url.host == "storage.googleapis.com") {
+          message +=
+              "\nThis is likely a transient error. Please try again " "later.";
+        }
+        fail(message);
+      }
+      return http.Response.fromStream(streamedResponse).then((response) {
+        throw new PubHttpException(response);
+      });
+    }).catchError((error, stackTrace) {
+      if (error is SocketException && error.osError != null) {
+        if (error.osError.errorCode == 8 ||
+            error.osError.errorCode == -2 ||
+            error.osError.errorCode == -5 ||
+            error.osError.errorCode == 11001 ||
+            error.osError.errorCode == 11004) {
+          fail(
+              'Could not resolve URL "${request.url.origin}".',
+              error,
+              stackTrace);
+        } else if (error.osError.errorCode == -12276) {
+          fail(
+              'Unable to validate SSL certificate for ' '"${request.url.origin}".',
+              error,
+              stackTrace);
+        }
+      }
+      throw error;
+    });
+    if (timeoutLength == null) return future;
+    return timeout(
+        future,
+        timeoutLength,
+        request.url,
+        'fetching URL "${request.url}"');
+  }
+  void _logRequest(http.BaseRequest request) {
+    var requestLog = new StringBuffer();
+    requestLog.writeln("HTTP ${request.method} ${request.url}");
+    request.headers.forEach(
+        (name, value) => requestLog.writeln(_logField(name, value)));
+    if (request.method == 'POST') {
+      var contentTypeString = request.headers[HttpHeaders.CONTENT_TYPE];
+      if (contentTypeString == null) contentTypeString = '';
+      var contentType = ContentType.parse(contentTypeString);
+      if (request is http.MultipartRequest) {
+        requestLog.writeln();
+        requestLog.writeln("Body fields:");
+        request.fields.forEach(
+            (name, value) => requestLog.writeln(_logField(name, value)));
+      } else if (request is http.Request) {
+        if (contentType.value == 'application/x-www-form-urlencoded') {
+          requestLog.writeln();
+          requestLog.writeln("Body fields:");
+          request.bodyFields.forEach(
+              (name, value) => requestLog.writeln(_logField(name, value)));
+        } else if (contentType.value == 'text/plain' ||
+            contentType.value == 'application/json') {
+          requestLog.write(request.body);
+        }
+      }
+    }
+    log.fine(requestLog.toString().trim());
+  }
+  void _logResponse(http.StreamedResponse response) {
+    var responseLog = new StringBuffer();
+    var request = response.request;
+    var stopwatch = _requestStopwatches.remove(request)..stop();
+    responseLog.writeln(
+        "HTTP response ${response.statusCode} "
+            "${response.reasonPhrase} for ${request.method} ${request.url}");
+    responseLog.writeln("took ${stopwatch.elapsed}");
+    response.headers.forEach(
+        (name, value) => responseLog.writeln(_logField(name, value)));
+    log.fine(responseLog.toString().trim());
+  }
+  String _logField(String name, String value) {
+    if (_CENSORED_FIELDS.contains(name.toLowerCase())) {
+      return "$name: <censored>";
+    } else {
+      return "$name: $value";
+    }
+  }
+}
+final _pubClient = new _PubHttpClient();
+final httpClient = new ThrottleClient(16, _pubClient);
+http.Client get innerHttpClient => _pubClient._inner;
+set innerHttpClient(http.Client client) => _pubClient._inner = client;
+void handleJsonSuccess(http.Response response) {
+  var parsed = parseJsonResponse(response);
+  if (parsed['success'] is! Map ||
+      !parsed['success'].containsKey('message') ||
+      parsed['success']['message'] is! String) {
+    invalidServerResponse(response);
+  }
+  log.message(parsed['success']['message']);
+}
+void handleJsonError(http.Response response) {
+  var errorMap = parseJsonResponse(response);
+  if (errorMap['error'] is! Map ||
+      !errorMap['error'].containsKey('message') ||
+      errorMap['error']['message'] is! String) {
+    invalidServerResponse(response);
+  }
+  fail(errorMap['error']['message']);
+}
+Map parseJsonResponse(http.Response response) {
+  var value;
+  try {
+    value = JSON.decode(response.body);
+  } on FormatException catch (e) {
+    invalidServerResponse(response);
+  }
+  if (value is! Map) invalidServerResponse(response);
+  return value;
+}
+void invalidServerResponse(http.Response response) =>
+    fail('Invalid server response:\n${response.body}');
+class PubHttpException implements Exception {
+  final http.Response response;
+  const PubHttpException(this.response);
+  String toString() =>
+      'HTTP error ${response.statusCode}: ' '${response.reasonPhrase}';
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/io.dart b/sdk/lib/_internal/pub_generated/lib/src/io.dart
new file mode 100644
index 0000000..dd0d560
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/io.dart
@@ -0,0 +1,550 @@
+library pub.io;
+import 'dart:async';
+import 'dart:collection';
+import 'dart:convert';
+import 'dart:io';
+import 'package:path/path.dart' as path;
+import 'package:pool/pool.dart';
+import 'package:http/http.dart' show ByteStream;
+import 'package:http_multi_server/http_multi_server.dart';
+import 'package:stack_trace/stack_trace.dart';
+import 'exit_codes.dart' as exit_codes;
+import 'exceptions.dart';
+import 'error_group.dart';
+import 'log.dart' as log;
+import 'sdk.dart' as sdk;
+import 'utils.dart';
+export 'package:http/http.dart' show ByteStream;
+final _descriptorPool = new Pool(32);
+bool entryExists(String path) =>
+    dirExists(path) || fileExists(path) || linkExists(path);
+bool linkExists(String link) => new Link(link).existsSync();
+bool fileExists(String file) => new File(file).existsSync();
+String canonicalize(String pathString) {
+  var seen = new Set<String>();
+  var components =
+      new Queue<String>.from(path.split(path.normalize(path.absolute(pathString))));
+  var newPath = components.removeFirst();
+  while (!components.isEmpty) {
+    seen.add(path.join(newPath, path.joinAll(components)));
+    var resolvedPath =
+        resolveLink(path.join(newPath, components.removeFirst()));
+    var relative = path.relative(resolvedPath, from: newPath);
+    if (relative == '.') continue;
+    var relativeComponents = new Queue<String>.from(path.split(relative));
+    if (path.isAbsolute(relative)) {
+      if (seen.contains(relative)) {
+        newPath = relative;
+      } else {
+        newPath = relativeComponents.removeFirst();
+        relativeComponents.addAll(components);
+        components = relativeComponents;
+      }
+      continue;
+    }
+    while (relativeComponents.first == '..') {
+      newPath = path.dirname(newPath);
+      relativeComponents.removeFirst();
+    }
+    if (relativeComponents.length == 1) {
+      newPath = path.join(newPath, relativeComponents.single);
+      continue;
+    }
+    var newSubPath = path.join(newPath, path.joinAll(relativeComponents));
+    if (seen.contains(newSubPath)) {
+      newPath = newSubPath;
+      continue;
+    }
+    relativeComponents.addAll(components);
+    components = relativeComponents;
+  }
+  return newPath;
+}
+String resolveLink(String link) {
+  var seen = new Set<String>();
+  while (linkExists(link) && !seen.contains(link)) {
+    seen.add(link);
+    link =
+        path.normalize(path.join(path.dirname(link), new Link(link).targetSync()));
+  }
+  return link;
+}
+String readTextFile(String file) =>
+    new File(file).readAsStringSync(encoding: UTF8);
+List<int> readBinaryFile(String file) {
+  log.io("Reading binary file $file.");
+  var contents = new File(file).readAsBytesSync();
+  log.io("Read ${contents.length} bytes from $file.");
+  return contents;
+}
+String writeTextFile(String file, String contents, {bool dontLogContents:
+    false}) {
+  log.io("Writing ${contents.length} characters to text file $file.");
+  if (!dontLogContents && contents.length < 1024 * 1024) {
+    log.fine("Contents:\n$contents");
+  }
+  new File(file).writeAsStringSync(contents);
+  return file;
+}
+String writeBinaryFile(String file, List<int> contents) {
+  log.io("Writing ${contents.length} bytes to binary file $file.");
+  new File(file).openSync(mode: FileMode.WRITE)
+      ..writeFromSync(contents)
+      ..closeSync();
+  log.fine("Wrote text file $file.");
+  return file;
+}
+Future<String> createFileFromStream(Stream<List<int>> stream, String file) {
+  log.io("Creating $file from stream.");
+  return _descriptorPool.withResource(() {
+    return Chain.track(stream.pipe(new File(file).openWrite())).then((_) {
+      log.fine("Created $file from stream.");
+      return file;
+    });
+  });
+}
+void copyFiles(Iterable<String> files, String baseDir, String destination) {
+  for (var file in files) {
+    var newPath = path.join(destination, path.relative(file, from: baseDir));
+    ensureDir(path.dirname(newPath));
+    copyFile(file, newPath);
+  }
+}
+void copyFile(String source, String destination) {
+  writeBinaryFile(destination, readBinaryFile(source));
+}
+String createDir(String dir) {
+  new Directory(dir).createSync();
+  return dir;
+}
+String ensureDir(String dir) {
+  new Directory(dir).createSync(recursive: true);
+  return dir;
+}
+String createTempDir(String base, String prefix) {
+  var tempDir = new Directory(base).createTempSync(prefix);
+  log.io("Created temp directory ${tempDir.path}");
+  return tempDir.path;
+}
+String createSystemTempDir() {
+  var tempDir = Directory.systemTemp.createTempSync('pub_');
+  log.io("Created temp directory ${tempDir.path}");
+  return tempDir.path;
+}
+List<String> listDir(String dir, {bool recursive: false, bool includeHidden:
+    false, bool includeDirs: true, Iterable<String> whitelist}) {
+  if (whitelist == null) whitelist = [];
+  var whitelistFilter = createFileFilter(whitelist);
+  return new Directory(
+      dir).listSync(recursive: recursive, followLinks: true).where((entity) {
+    if (!includeDirs && entity is Directory) return false;
+    if (entity is Link) return false;
+    if (includeHidden) return true;
+    assert(entity.path.startsWith(dir));
+    var pathInDir = entity.path.substring(dir.length);
+    var whitelistedBasename =
+        whitelistFilter.firstWhere(pathInDir.contains, orElse: () => null);
+    if (whitelistedBasename != null) {
+      pathInDir =
+          pathInDir.substring(0, pathInDir.length - whitelistedBasename.length);
+    }
+    if (pathInDir.contains("/.")) return false;
+    if (Platform.operatingSystem != "windows") return true;
+    return !pathInDir.contains("\\.");
+  }).map((entity) => entity.path).toList();
+}
+bool dirExists(String dir) => new Directory(dir).existsSync();
+void _attempt(String description, void operation()) {
+  if (Platform.operatingSystem != 'windows') {
+    operation();
+    return;
+  }
+  getErrorReason(error) {
+    if (error.osError.errorCode == 5) {
+      return "access was denied";
+    }
+    if (error.osError.errorCode == 32) {
+      return "it was in use by another process";
+    }
+    return null;
+  }
+  for (var i = 0; i < 2; i++) {
+    try {
+      operation();
+      return;
+    } on FileSystemException catch (error) {
+      var reason = getErrorReason(error);
+      if (reason == null) rethrow;
+      log.io("Failed to $description because $reason. " "Retrying in 50ms.");
+      sleep(new Duration(milliseconds: 50));
+    }
+  }
+  try {
+    operation();
+  } on FileSystemException catch (error) {
+    var reason = getErrorReason(error);
+    if (reason == null) rethrow;
+    fail(
+        "Failed to $description because $reason.\n"
+            "This may be caused by a virus scanner or having a file\n"
+            "in the directory open in another application.");
+  }
+}
+void deleteEntry(String path) {
+  _attempt("delete entry", () {
+    if (linkExists(path)) {
+      log.io("Deleting link $path.");
+      new Link(path).deleteSync();
+    } else if (dirExists(path)) {
+      log.io("Deleting directory $path.");
+      new Directory(path).deleteSync(recursive: true);
+    } else if (fileExists(path)) {
+      log.io("Deleting file $path.");
+      new File(path).deleteSync();
+    }
+  });
+}
+void cleanDir(String dir) {
+  if (entryExists(dir)) deleteEntry(dir);
+  ensureDir(dir);
+}
+void renameDir(String from, String to) {
+  _attempt("rename directory", () {
+    log.io("Renaming directory $from to $to.");
+    try {
+      new Directory(from).renameSync(to);
+    } on IOException catch (error) {
+      if (entryExists(to)) deleteEntry(to);
+      rethrow;
+    }
+  });
+}
+void createSymlink(String target, String symlink, {bool relative: false}) {
+  if (relative) {
+    if (Platform.operatingSystem == 'windows') {
+      target = path.normalize(path.absolute(target));
+    } else {
+      var symlinkDir = canonicalize(path.dirname(symlink));
+      target = path.normalize(path.relative(target, from: symlinkDir));
+    }
+  }
+  log.fine("Creating $symlink pointing to $target");
+  new Link(symlink).createSync(target);
+}
+void createPackageSymlink(String name, String target, String symlink,
+    {bool isSelfLink: false, bool relative: false}) {
+  target = path.join(target, 'lib');
+  if (!dirExists(target)) return;
+  log.fine("Creating ${isSelfLink ? "self" : ""}link for package '$name'.");
+  createSymlink(target, symlink, relative: relative);
+}
+final bool runningFromSdk = Platform.script.path.endsWith('.snapshot');
+String assetPath(String target) {
+  if (runningFromSdk) {
+    return path.join(
+        sdk.rootDirectory,
+        'lib',
+        '_internal',
+        'pub',
+        'asset',
+        target);
+  } else {
+    return path.join(
+        path.dirname(libraryPath('pub.io')),
+        '..',
+        '..',
+        'asset',
+        target);
+  }
+}
+String get repoRoot {
+  if (runningFromSdk) {
+    throw new StateError("Can't get the repo root from the SDK.");
+  }
+  var libDir = path.dirname(libraryPath('pub.io'));
+  if (libDir.contains('pub_async')) {
+    return path.normalize(path.join(libDir, '..', '..', '..', '..', '..'));
+  }
+  return path.normalize(path.join(libDir, '..', '..', '..', '..', '..', '..'));
+}
+final Stream<String> stdinLines =
+    streamToLines(new ByteStream(Chain.track(stdin)).toStringStream());
+Future<bool> confirm(String message) {
+  log.fine('Showing confirm message: $message');
+  if (runningAsTest) {
+    log.message("$message (y/n)?");
+  } else {
+    stdout.write(log.format("$message (y/n)? "));
+  }
+  return streamFirst(
+      stdinLines).then((line) => new RegExp(r"^[yY]").hasMatch(line));
+}
+Future drainStream(Stream stream) {
+  return stream.fold(null, (x, y) {});
+}
+Future flushThenExit(int status) {
+  return Future.wait(
+      [
+          Chain.track(stdout.close()),
+          Chain.track(stderr.close())]).then((_) => exit(status));
+}
+Pair<EventSink, Future> consumerToSink(StreamConsumer consumer) {
+  var controller = new StreamController(sync: true);
+  var done = controller.stream.pipe(consumer);
+  return new Pair<EventSink, Future>(controller.sink, done);
+}
+Future store(Stream stream, EventSink sink, {bool cancelOnError: true,
+    bool closeSink: true}) {
+  var completer = new Completer();
+  stream.listen(sink.add, onError: (e, stackTrace) {
+    sink.addError(e, stackTrace);
+    if (cancelOnError) {
+      completer.complete();
+      if (closeSink) sink.close();
+    }
+  }, onDone: () {
+    if (closeSink) sink.close();
+    completer.complete();
+  }, cancelOnError: cancelOnError);
+  return completer.future;
+}
+Future<PubProcessResult> runProcess(String executable, List<String> args,
+    {workingDir, Map<String, String> environment}) {
+  return _descriptorPool.withResource(() {
+    return _doProcess(
+        Process.run,
+        executable,
+        args,
+        workingDir,
+        environment).then((result) {
+      var pubResult =
+          new PubProcessResult(result.stdout, result.stderr, result.exitCode);
+      log.processResult(executable, pubResult);
+      return pubResult;
+    });
+  });
+}
+Future<PubProcess> startProcess(String executable, List<String> args,
+    {workingDir, Map<String, String> environment}) {
+  return _descriptorPool.request().then((resource) {
+    return _doProcess(
+        Process.start,
+        executable,
+        args,
+        workingDir,
+        environment).then((ioProcess) {
+      var process = new PubProcess(ioProcess);
+      process.exitCode.whenComplete(resource.release);
+      return process;
+    });
+  });
+}
+PubProcessResult runProcessSync(String executable, List<String> args,
+    {String workingDir, Map<String, String> environment}) {
+  var result =
+      _doProcess(Process.runSync, executable, args, workingDir, environment);
+  var pubResult =
+      new PubProcessResult(result.stdout, result.stderr, result.exitCode);
+  log.processResult(executable, pubResult);
+  return pubResult;
+}
+class PubProcess {
+  final Process _process;
+  EventSink<List<int>> _stdin;
+  Future _stdinClosed;
+  ByteStream _stdout;
+  ByteStream _stderr;
+  Future<int> _exitCode;
+  EventSink<List<int>> get stdin => _stdin;
+  Future get stdinClosed => _stdinClosed;
+  ByteStream get stdout => _stdout;
+  ByteStream get stderr => _stderr;
+  Future<int> get exitCode => _exitCode;
+  PubProcess(Process process) : _process = process {
+    var errorGroup = new ErrorGroup();
+    var pair = consumerToSink(process.stdin);
+    _stdin = pair.first;
+    _stdinClosed = errorGroup.registerFuture(Chain.track(pair.last));
+    _stdout =
+        new ByteStream(errorGroup.registerStream(Chain.track(process.stdout)));
+    _stderr =
+        new ByteStream(errorGroup.registerStream(Chain.track(process.stderr)));
+    var exitCodeCompleter = new Completer();
+    _exitCode =
+        errorGroup.registerFuture(Chain.track(exitCodeCompleter.future));
+    _process.exitCode.then((code) => exitCodeCompleter.complete(code));
+  }
+  bool kill([ProcessSignal signal = ProcessSignal.SIGTERM]) =>
+      _process.kill(signal);
+}
+_doProcess(Function fn, String executable, List<String> args, String workingDir,
+    Map<String, String> environment) {
+  if ((Platform.operatingSystem == "windows") &&
+      (executable.indexOf('\\') == -1)) {
+    args = flatten(["/c", executable, args]);
+    executable = "cmd";
+  }
+  log.process(executable, args, workingDir == null ? '.' : workingDir);
+  return fn(
+      executable,
+      args,
+      workingDirectory: workingDir,
+      environment: environment);
+}
+Future timeout(Future input, int milliseconds, Uri url, String description) {
+  var completer = new Completer();
+  var duration = new Duration(milliseconds: milliseconds);
+  var timer = new Timer(duration, () {
+    var message =
+        'Timed out after ${niceDuration(duration)} while ' '$description.';
+    if (url.host == "pub.dartlang.org" ||
+        url.host == "storage.googleapis.com") {
+      message += "\nThis is likely a transient error. Please try again later.";
+    }
+    completer.completeError(new TimeoutException(message), new Chain.current());
+  });
+  input.then((value) {
+    if (completer.isCompleted) return;
+    timer.cancel();
+    completer.complete(value);
+  }).catchError((e, stackTrace) {
+    if (completer.isCompleted) return;
+    timer.cancel();
+    completer.completeError(e, stackTrace);
+  });
+  return completer.future;
+}
+Future withTempDir(Future fn(String path)) {
+  return syncFuture(() {
+    var tempDir = createSystemTempDir();
+    return syncFuture(
+        () => fn(tempDir)).whenComplete(() => deleteEntry(tempDir));
+  });
+}
+Future<HttpServer> bindServer(String host, int port) {
+  if (host == 'localhost') return HttpMultiServer.loopback(port);
+  return HttpServer.bind(host, port);
+}
+Future<bool> extractTarGz(Stream<List<int>> stream, String destination) {
+  log.fine("Extracting .tar.gz stream to $destination.");
+  if (Platform.operatingSystem == "windows") {
+    return _extractTarGzWindows(stream, destination);
+  }
+  var args = ["--extract", "--gunzip", "--directory", destination];
+  if (_noUnknownKeyword) {
+    args.insert(0, "--warning=no-unknown-keyword");
+  }
+  return startProcess("tar", args).then((process) {
+    store(process.stdout.handleError((_) {}), stdout, closeSink: false);
+    store(process.stderr.handleError((_) {}), stderr, closeSink: false);
+    return Future.wait([store(stream, process.stdin), process.exitCode]);
+  }).then((results) {
+    var exitCode = results[1];
+    if (exitCode != exit_codes.SUCCESS) {
+      throw new Exception(
+          "Failed to extract .tar.gz stream to $destination " "(exit code $exitCode).");
+    }
+    log.fine("Extracted .tar.gz stream to $destination. Exit code $exitCode.");
+  });
+}
+final bool _noUnknownKeyword = _computeNoUnknownKeyword();
+bool _computeNoUnknownKeyword() {
+  if (!Platform.isLinux) return false;
+  var result = Process.runSync("tar", ["--version"]);
+  if (result.exitCode != 0) {
+    throw new ApplicationException(
+        "Failed to run tar (exit code ${result.exitCode}):\n${result.stderr}");
+  }
+  var match =
+      new RegExp(r"^tar \(GNU tar\) (\d+).(\d+)\n").firstMatch(result.stdout);
+  if (match == null) return false;
+  var major = int.parse(match[1]);
+  var minor = int.parse(match[2]);
+  return major >= 2 || (major == 1 && minor >= 23);
+}
+String get pathTo7zip {
+  if (runningFromSdk) return assetPath(path.join('7zip', '7za.exe'));
+  return path.join(repoRoot, 'third_party', '7zip', '7za.exe');
+}
+Future<bool> _extractTarGzWindows(Stream<List<int>> stream, String destination)
+    {
+  return withTempDir((tempDir) {
+    var dataFile = path.join(tempDir, 'data.tar.gz');
+    return createFileFromStream(stream, dataFile).then((_) {
+      return runProcess(pathTo7zip, ['e', 'data.tar.gz'], workingDir: tempDir);
+    }).then((result) {
+      if (result.exitCode != exit_codes.SUCCESS) {
+        throw new Exception(
+            'Could not un-gzip (exit code ${result.exitCode}). ' 'Error:\n'
+                '${result.stdout.join("\n")}\n' '${result.stderr.join("\n")}');
+      }
+      var tarFile = listDir(
+          tempDir).firstWhere((file) => path.extension(file) == '.tar', orElse: () {
+        throw new FormatException('The gzip file did not contain a tar file.');
+      });
+      return runProcess(pathTo7zip, ['x', tarFile], workingDir: destination);
+    }).then((result) {
+      if (result.exitCode != exit_codes.SUCCESS) {
+        throw new Exception(
+            'Could not un-tar (exit code ${result.exitCode}). ' 'Error:\n'
+                '${result.stdout.join("\n")}\n' '${result.stderr.join("\n")}');
+      }
+      return true;
+    });
+  });
+}
+ByteStream createTarGz(List contents, {baseDir}) {
+  return new ByteStream(futureStream(syncFuture(() {
+    var buffer = new StringBuffer();
+    buffer.write('Creating .tag.gz stream containing:\n');
+    contents.forEach((file) => buffer.write('$file\n'));
+    log.fine(buffer.toString());
+    if (baseDir == null) baseDir = path.current;
+    baseDir = path.absolute(baseDir);
+    contents = contents.map((entry) {
+      entry = path.absolute(entry);
+      if (!path.isWithin(baseDir, entry)) {
+        throw new ArgumentError('Entry $entry is not inside $baseDir.');
+      }
+      return path.relative(entry, from: baseDir);
+    }).toList();
+    if (Platform.operatingSystem != "windows") {
+      var args = ["--create", "--gzip", "--directory", baseDir];
+      args.addAll(contents);
+      return startProcess("tar", args).then((process) => process.stdout);
+    }
+    var tempDir = createSystemTempDir();
+    return syncFuture(() {
+      var tarFile = path.join(tempDir, "intermediate.tar");
+      var args = ["a", "-w$baseDir", tarFile];
+      args.addAll(contents.map((entry) => '-i!$entry'));
+      return runProcess(pathTo7zip, args, workingDir: baseDir).then((_) {
+        args = ["a", "unused", "-tgzip", "-so", tarFile];
+        return startProcess(pathTo7zip, args);
+      }).then((process) => process.stdout);
+    }).then((stream) {
+      return stream.transform(onDoneTransformer(() => deleteEntry(tempDir)));
+    }).catchError((e) {
+      deleteEntry(tempDir);
+      throw e;
+    });
+  })));
+}
+class PubProcessResult {
+  final List<String> stdout;
+  final List<String> stderr;
+  final int exitCode;
+  PubProcessResult(String stdout, String stderr, this.exitCode)
+      : this.stdout = _toLines(stdout),
+        this.stderr = _toLines(stderr);
+  static List<String> _toLines(String output) {
+    var lines = splitLines(output);
+    if (!lines.isEmpty && lines.last == "") lines.removeLast();
+    return lines;
+  }
+  bool get success => exitCode == exit_codes.SUCCESS;
+}
+Uri _getUri(uri) {
+  if (uri is Uri) return uri;
+  return Uri.parse(uri);
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/lock_file.dart b/sdk/lib/_internal/pub_generated/lib/src/lock_file.dart
new file mode 100644
index 0000000..51f81fa
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/lock_file.dart
@@ -0,0 +1,97 @@
+library pub.lock_file;
+import 'package:path/path.dart' as p;
+import 'package:source_span/source_span.dart';
+import 'package:yaml/yaml.dart';
+import 'io.dart';
+import 'package.dart';
+import 'source_registry.dart';
+import 'utils.dart';
+import 'version.dart';
+class LockFile {
+  Map<String, PackageId> packages;
+  factory LockFile(List<PackageId> ids) {
+    var lockFile = new LockFile.empty();
+    for (var id in ids) {
+      if (!id.isRoot) lockFile.packages[id.name] = id;
+    }
+    return lockFile;
+  }
+  LockFile._(this.packages);
+  LockFile.empty() : packages = <String, PackageId>{};
+  factory LockFile.load(String filePath, SourceRegistry sources) {
+    return LockFile._parse(filePath, readTextFile(filePath), sources);
+  }
+  factory LockFile.parse(String contents, SourceRegistry sources) {
+    return LockFile._parse(null, contents, sources);
+  }
+  static LockFile _parse(String filePath, String contents,
+      SourceRegistry sources) {
+    var packages = <String, PackageId>{};
+    if (contents.trim() == '') return new LockFile.empty();
+    var sourceUrl;
+    if (filePath != null) sourceUrl = p.toUri(filePath);
+    var parsed = loadYamlNode(contents, sourceUrl: sourceUrl);
+    _validate(parsed is Map, 'The lockfile must be a YAML mapping.', parsed);
+    var packageEntries = parsed['packages'];
+    if (packageEntries != null) {
+      _validate(
+          packageEntries is Map,
+          'The "packages" field must be a map.',
+          parsed.nodes['packages']);
+      packageEntries.forEach((name, spec) {
+        _validate(
+            spec.containsKey('version'),
+            'Package $name is missing a version.',
+            spec);
+        var version = new Version.parse(spec['version']);
+        _validate(
+            spec.containsKey('source'),
+            'Package $name is missing a source.',
+            spec);
+        var sourceName = spec['source'];
+        _validate(
+            spec.containsKey('description'),
+            'Package $name is missing a description.',
+            spec);
+        var description = spec['description'];
+        var source = sources[sourceName];
+        try {
+          description =
+              source.parseDescription(filePath, description, fromLockFile: true);
+        } on FormatException catch (ex) {
+          throw new SourceSpanFormatException(
+              ex.message,
+              spec.nodes['source'].span);
+        }
+        var id = new PackageId(name, sourceName, version, description);
+        _validate(
+            name == id.name,
+            "Package name $name doesn't match ${id.name}.",
+            spec);
+        packages[name] = id;
+      });
+    }
+    return new LockFile._(packages);
+  }
+  static void _validate(bool condition, String message, YamlNode node) {
+    if (condition) return;
+    throw new SourceSpanFormatException(message, node.span);
+  }
+  String serialize(String packageDir, SourceRegistry sources) {
+    var data = {};
+    packages.forEach((name, package) {
+      var description =
+          sources[package.source].serializeDescription(packageDir, package.description);
+      data[name] = {
+        'version': package.version.toString(),
+        'source': package.source,
+        'description': description
+      };
+    });
+    return """
+# Generated by pub
+# See http://pub.dartlang.org/doc/glossary.html#lockfile
+${yamlToString({'packages' : data})}
+""";
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/log.dart b/sdk/lib/_internal/pub_generated/lib/src/log.dart
new file mode 100644
index 0000000..8fb991a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/log.dart
@@ -0,0 +1,298 @@
+library pub.log;
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+import 'package:path/path.dart' as p;
+import 'package:source_span/source_span.dart';
+import 'package:stack_trace/stack_trace.dart';
+import 'exceptions.dart';
+import 'io.dart';
+import 'progress.dart';
+import 'transcript.dart';
+import 'utils.dart';
+final json = new _JsonLogger();
+Verbosity verbosity = Verbosity.NORMAL;
+bool withPrejudice = false;
+const _MAX_TRANSCRIPT = 10000;
+Transcript<Entry> _transcript;
+final _progresses = new Set<Progress>();
+Progress _animatedProgress;
+final _cyan = getSpecial('\u001b[36m');
+final _green = getSpecial('\u001b[32m');
+final _magenta = getSpecial('\u001b[35m');
+final _red = getSpecial('\u001b[31m');
+final _yellow = getSpecial('\u001b[33m');
+final _gray = getSpecial('\u001b[1;30m');
+final _none = getSpecial('\u001b[0m');
+final _noColor = getSpecial('\u001b[39m');
+final _bold = getSpecial('\u001b[1m');
+class Level {
+  static const ERROR = const Level._("ERR ");
+  static const WARNING = const Level._("WARN");
+  static const MESSAGE = const Level._("MSG ");
+  static const IO = const Level._("IO  ");
+  static const SOLVER = const Level._("SLVR");
+  static const FINE = const Level._("FINE");
+  const Level._(this.name);
+  final String name;
+  String toString() => name;
+}
+typedef _LogFn(Entry entry);
+class Verbosity {
+  static const NONE = const Verbosity._("none", const {
+    Level.ERROR: null,
+    Level.WARNING: null,
+    Level.MESSAGE: null,
+    Level.IO: null,
+    Level.SOLVER: null,
+    Level.FINE: null
+  });
+  static const WARNING = const Verbosity._("warning", const {
+    Level.ERROR: _logToStderr,
+    Level.WARNING: _logToStderr,
+    Level.MESSAGE: null,
+    Level.IO: null,
+    Level.SOLVER: null,
+    Level.FINE: null
+  });
+  static const NORMAL = const Verbosity._("normal", const {
+    Level.ERROR: _logToStderr,
+    Level.WARNING: _logToStderr,
+    Level.MESSAGE: _logToStdout,
+    Level.IO: null,
+    Level.SOLVER: null,
+    Level.FINE: null
+  });
+  static const IO = const Verbosity._("io", const {
+    Level.ERROR: _logToStderrWithLabel,
+    Level.WARNING: _logToStderrWithLabel,
+    Level.MESSAGE: _logToStdoutWithLabel,
+    Level.IO: _logToStderrWithLabel,
+    Level.SOLVER: null,
+    Level.FINE: null
+  });
+  static const SOLVER = const Verbosity._("solver", const {
+    Level.ERROR: _logToStderr,
+    Level.WARNING: _logToStderr,
+    Level.MESSAGE: _logToStdout,
+    Level.IO: null,
+    Level.SOLVER: _logToStdout,
+    Level.FINE: null
+  });
+  static const ALL = const Verbosity._("all", const {
+    Level.ERROR: _logToStderrWithLabel,
+    Level.WARNING: _logToStderrWithLabel,
+    Level.MESSAGE: _logToStdoutWithLabel,
+    Level.IO: _logToStderrWithLabel,
+    Level.SOLVER: _logToStderrWithLabel,
+    Level.FINE: _logToStderrWithLabel
+  });
+  const Verbosity._(this.name, this._loggers);
+  final String name;
+  final Map<Level, _LogFn> _loggers;
+  bool isLevelVisible(Level level) => _loggers[level] != null;
+  String toString() => name;
+}
+class Entry {
+  final Level level;
+  final List<String> lines;
+  Entry(this.level, this.lines);
+}
+void error(message, [error]) {
+  if (error != null) {
+    message = "$message: $error";
+    var trace;
+    if (error is Error) trace = error.stackTrace;
+    if (trace != null) {
+      message = "$message\nStackTrace: $trace";
+    }
+  }
+  write(Level.ERROR, message);
+}
+void warning(message) => write(Level.WARNING, message);
+void message(message) => write(Level.MESSAGE, message);
+void io(message) => write(Level.IO, message);
+void solver(message) => write(Level.SOLVER, message);
+void fine(message) => write(Level.FINE, message);
+void write(Level level, message) {
+  message = message.toString();
+  var lines = splitLines(message);
+  if (lines.isNotEmpty && lines.last == "") {
+    lines.removeLast();
+  }
+  var entry = new Entry(level, lines.map(format).toList());
+  var logFn = verbosity._loggers[level];
+  if (logFn != null) logFn(entry);
+  if (_transcript != null) _transcript.add(entry);
+}
+final _capitalizedAnsiEscape = new RegExp(r'\u001b\[\d+(;\d+)?M');
+String format(String string) {
+  if (!withPrejudice) return string;
+  string = string.toUpperCase().replaceAllMapped(
+      _capitalizedAnsiEscape,
+      (match) => match[0].toLowerCase());
+  return "$_bold$string$_none";
+}
+Future ioAsync(String startMessage, Future operation, [String
+    endMessage(value)]) {
+  if (endMessage == null) {
+    io("Begin $startMessage.");
+  } else {
+    io(startMessage);
+  }
+  return operation.then((result) {
+    if (endMessage == null) {
+      io("End $startMessage.");
+    } else {
+      io(endMessage(result));
+    }
+    return result;
+  });
+}
+void process(String executable, List<String> arguments, String workingDirectory)
+    {
+  io(
+      "Spawning \"$executable ${arguments.join(' ')}\" in "
+          "${p.absolute(workingDirectory)}");
+}
+void processResult(String executable, PubProcessResult result) {
+  var buffer = new StringBuffer();
+  buffer.writeln("Finished $executable. Exit code ${result.exitCode}.");
+  dumpOutput(String name, List<String> output) {
+    if (output.length == 0) {
+      buffer.writeln("Nothing output on $name.");
+    } else {
+      buffer.writeln("$name:");
+      var numLines = 0;
+      for (var line in output) {
+        if (++numLines > 1000) {
+          buffer.writeln(
+              '[${output.length - 1000}] more lines of output ' 'truncated...]');
+          break;
+        }
+        buffer.writeln("| $line");
+      }
+    }
+  }
+  dumpOutput("stdout", result.stdout);
+  dumpOutput("stderr", result.stderr);
+  io(buffer.toString().trim());
+}
+void exception(exception, [StackTrace trace]) {
+  if (exception is SilentException) return;
+  var chain = trace == null ? new Chain.current() : new Chain.forTrace(trace);
+  if (exception is SourceSpanException) {
+    error(exception.toString(color: canUseSpecialChars));
+  } else {
+    error(getErrorMessage(exception));
+  }
+  fine("Exception type: ${exception.runtimeType}");
+  if (json.enabled) {
+    if (exception is UsageException) {
+      json.error(exception.message);
+    } else {
+      json.error(exception);
+    }
+  }
+  if (!isUserFacingException(exception)) {
+    error(chain.terse);
+  } else {
+    fine(chain.terse);
+  }
+  if (exception is WrappedException && exception.innerError != null) {
+    var message = "Wrapped exception: ${exception.innerError}";
+    if (exception.innerChain != null) {
+      message = "$message\n${exception.innerChain}";
+    }
+    fine(message);
+  }
+}
+void recordTranscript() {
+  _transcript = new Transcript<Entry>(_MAX_TRANSCRIPT);
+}
+void dumpTranscript() {
+  if (_transcript == null) return;
+  stderr.writeln('---- Log transcript ----');
+  _transcript.forEach((entry) {
+    _printToStream(stderr, entry, showLabel: true);
+  }, (discarded) {
+    stderr.writeln('---- ($discarded discarded) ----');
+  });
+  stderr.writeln('---- End log transcript ----');
+}
+Future progress(String message, Future callback(), {bool fine: false}) {
+  _stopProgress();
+  var progress = new Progress(message, fine: fine);
+  _animatedProgress = progress;
+  _progresses.add(progress);
+  return callback().whenComplete(() {
+    progress.stop();
+    _progresses.remove(progress);
+  });
+}
+void _stopProgress() {
+  if (_animatedProgress != null) _animatedProgress.stopAnimating();
+  _animatedProgress = null;
+}
+String bold(text) => withPrejudice ? text : "$_bold$text$_none";
+String gray(text) =>
+    withPrejudice ? "$_gray$text$_noColor" : "$_gray$text$_none";
+String cyan(text) => "$_cyan$text$_noColor";
+String green(text) => "$_green$text$_noColor";
+String magenta(text) => "$_magenta$text$_noColor";
+String red(text) => "$_red$text$_noColor";
+String yellow(text) => "$_yellow$text$_noColor";
+void _logToStdout(Entry entry) {
+  _logToStream(stdout, entry, showLabel: false);
+}
+void _logToStdoutWithLabel(Entry entry) {
+  _logToStream(stdout, entry, showLabel: true);
+}
+void _logToStderr(Entry entry) {
+  _logToStream(stderr, entry, showLabel: false);
+}
+void _logToStderrWithLabel(Entry entry) {
+  _logToStream(stderr, entry, showLabel: true);
+}
+void _logToStream(IOSink sink, Entry entry, {bool showLabel}) {
+  if (json.enabled) return;
+  _printToStream(sink, entry, showLabel: showLabel);
+}
+void _printToStream(IOSink sink, Entry entry, {bool showLabel}) {
+  _stopProgress();
+  bool firstLine = true;
+  for (var line in entry.lines) {
+    if (showLabel) {
+      if (firstLine) {
+        sink.write('${entry.level.name}: ');
+      } else {
+        sink.write('    | ');
+      }
+    }
+    sink.writeln(line);
+    firstLine = false;
+  }
+}
+class _JsonLogger {
+  bool enabled = false;
+  void error(error, [stackTrace]) {
+    var errorJson = {
+      "error": error.toString()
+    };
+    if (stackTrace == null && error is Error) stackTrace = error.stackTrace;
+    if (stackTrace != null) {
+      errorJson["stackTrace"] = new Chain.forTrace(stackTrace).toString();
+    }
+    if (error is SourceSpanException && error.span.sourceUrl != null) {
+      errorJson["path"] = p.fromUri(error.span.sourceUrl);
+    }
+    if (error is FileException) {
+      errorJson["path"] = error.path;
+    }
+    this.message(errorJson);
+  }
+  void message(message) {
+    if (!enabled) return;
+    print(JSON.encode(message));
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/oauth2.dart b/sdk/lib/_internal/pub_generated/lib/src/oauth2.dart
new file mode 100644
index 0000000..ece7b2f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/oauth2.dart
@@ -0,0 +1,136 @@
+library pub.oauth2;
+import 'dart:async';
+import 'dart:io';
+import 'package:oauth2/oauth2.dart';
+import 'package:path/path.dart' as path;
+import 'package:shelf/shelf.dart' as shelf;
+import 'package:shelf/shelf_io.dart' as shelf_io;
+import 'http.dart';
+import 'io.dart';
+import 'log.dart' as log;
+import 'system_cache.dart';
+import 'utils.dart';
+export 'package:oauth2/oauth2.dart';
+final _identifier =
+    '818368855108-8grd2eg9tj9f38os6f1urbcvsq399u8n.apps.' 'googleusercontent.com';
+final _secret = 'SWeqj8seoJW0w7_CpEPFLX0K';
+final authorizationEndpoint = Uri.parse(
+    'https://accounts.google.com/o/oauth2/auth?access_type=offline'
+        '&approval_prompt=force');
+Uri get tokenEndpoint {
+  var tokenEndpoint = Platform.environment['_PUB_TEST_TOKEN_ENDPOINT'];
+  if (tokenEndpoint != null) {
+    return Uri.parse(tokenEndpoint);
+  } else {
+    return _tokenEndpoint;
+  }
+}
+final _tokenEndpoint = Uri.parse('https://accounts.google.com/o/oauth2/token');
+final _scopes = ['https://www.googleapis.com/auth/userinfo.email'];
+Credentials _credentials;
+void clearCredentials(SystemCache cache) {
+  _credentials = null;
+  var credentialsFile = _credentialsFile(cache);
+  if (entryExists(credentialsFile)) deleteEntry(credentialsFile);
+}
+Future withClient(SystemCache cache, Future fn(Client client)) {
+  return _getClient(cache).then((client) {
+    var completer = new Completer();
+    return fn(client).whenComplete(() {
+      client.close();
+      _saveCredentials(cache, client.credentials);
+    });
+  }).catchError((error) {
+    if (error is ExpirationException) {
+      log.error(
+          "Pub's authorization to upload packages has expired and "
+              "can't be automatically refreshed.");
+      return withClient(cache, fn);
+    } else if (error is AuthorizationException) {
+      var message = "OAuth2 authorization failed";
+      if (error.description != null) {
+        message = "$message (${error.description})";
+      }
+      log.error("$message.");
+      clearCredentials(cache);
+      return withClient(cache, fn);
+    } else {
+      throw error;
+    }
+  });
+}
+Future<Client> _getClient(SystemCache cache) {
+  return new Future.sync(() {
+    var credentials = _loadCredentials(cache);
+    if (credentials == null) return _authorize();
+    var client =
+        new Client(_identifier, _secret, credentials, httpClient: httpClient);
+    _saveCredentials(cache, client.credentials);
+    return client;
+  });
+}
+Credentials _loadCredentials(SystemCache cache) {
+  log.fine('Loading OAuth2 credentials.');
+  try {
+    if (_credentials != null) return _credentials;
+    var path = _credentialsFile(cache);
+    if (!fileExists(path)) return null;
+    var credentials = new Credentials.fromJson(readTextFile(path));
+    if (credentials.isExpired && !credentials.canRefresh) {
+      log.error(
+          "Pub's authorization to upload packages has expired and "
+              "can't be automatically refreshed.");
+      return null;
+    }
+    return credentials;
+  } catch (e) {
+    log.error(
+        'Warning: could not load the saved OAuth2 credentials: $e\n'
+            'Obtaining new credentials...');
+    return null;
+  }
+}
+void _saveCredentials(SystemCache cache, Credentials credentials) {
+  log.fine('Saving OAuth2 credentials.');
+  _credentials = credentials;
+  var credentialsPath = _credentialsFile(cache);
+  ensureDir(path.dirname(credentialsPath));
+  writeTextFile(credentialsPath, credentials.toJson(), dontLogContents: true);
+}
+String _credentialsFile(SystemCache cache) =>
+    path.join(cache.rootDir, 'credentials.json');
+Future<Client> _authorize() {
+  var grant = new AuthorizationCodeGrant(
+      _identifier,
+      _secret,
+      authorizationEndpoint,
+      tokenEndpoint,
+      httpClient: httpClient);
+  var completer = new Completer();
+  bindServer('localhost', 0).then((server) {
+    shelf_io.serveRequests(server, (request) {
+      if (request.url.path != "/") {
+        return new shelf.Response.notFound('Invalid URI.');
+      }
+      log.message('Authorization received, processing...');
+      var queryString = request.url.query;
+      if (queryString == null) queryString = '';
+      server.close();
+      chainToCompleter(
+          grant.handleAuthorizationResponse(queryToMap(queryString)),
+          completer);
+      return new shelf.Response.found('http://pub.dartlang.org/authorized');
+    });
+    var authUrl = grant.getAuthorizationUrl(
+        Uri.parse('http://localhost:${server.port}'),
+        scopes: _scopes);
+    log.message(
+        'Pub needs your authorization to upload packages on your behalf.\n'
+            'In a web browser, go to $authUrl\n' 'Then click "Allow access".\n\n'
+            'Waiting for your authorization...');
+  });
+  return completer.future.then((client) {
+    log.message('Successfully authorized.\n');
+    return client;
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/package.dart b/sdk/lib/_internal/pub_generated/lib/src/package.dart
new file mode 100644
index 0000000..73b5b05
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/package.dart
@@ -0,0 +1,165 @@
+library pub.package;
+import 'dart:io';
+import 'package:path/path.dart' as path;
+import 'package:barback/barback.dart';
+import 'io.dart';
+import 'git.dart' as git;
+import 'pubspec.dart';
+import 'source_registry.dart';
+import 'utils.dart';
+import 'version.dart';
+final _README_REGEXP = new RegExp(r"^README($|\.)", caseSensitive: false);
+class Package {
+  static int orderByNameAndVersion(Package a, Package b) {
+    var name = a.name.compareTo(b.name);
+    if (name != 0) return name;
+    return a.version.compareTo(b.version);
+  }
+  final String dir;
+  String get name {
+    if (pubspec.name != null) return pubspec.name;
+    if (dir != null) return path.basename(dir);
+    return null;
+  }
+  Version get version => pubspec.version;
+  final Pubspec pubspec;
+  List<PackageDep> get dependencies => pubspec.dependencies;
+  List<PackageDep> get devDependencies => pubspec.devDependencies;
+  List<PackageDep> get dependencyOverrides => pubspec.dependencyOverrides;
+  Set<PackageDep> get immediateDependencies {
+    var deps = {};
+    addToMap(dep) {
+      deps[dep.name] = dep;
+    }
+    dependencies.forEach(addToMap);
+    devDependencies.forEach(addToMap);
+    dependencyOverrides.forEach(addToMap);
+    return deps.values.toSet();
+  }
+  List<AssetId> get executableIds {
+    var binDir = path.join(dir, 'bin');
+    if (!dirExists(binDir)) return [];
+    return ordered(
+        listFiles(
+            beneath: binDir,
+            recursive: false)).where(
+                (executable) => path.extension(executable) == '.dart').map((executable) {
+      return new AssetId(
+          name,
+          path.toUri(path.relative(executable, from: dir)).toString());
+    }).toList();
+  }
+  String get readmePath {
+    var readmes = listDir(
+        dir).map(path.basename).where((entry) => entry.contains(_README_REGEXP));
+    if (readmes.isEmpty) return null;
+    return path.join(dir, readmes.reduce((readme1, readme2) {
+      var extensions1 = ".".allMatches(readme1).length;
+      var extensions2 = ".".allMatches(readme2).length;
+      var comparison = extensions1.compareTo(extensions2);
+      if (comparison == 0) comparison = readme1.compareTo(readme2);
+      return (comparison <= 0) ? readme1 : readme2;
+    }));
+  }
+  Package.load(String name, String packageDir, SourceRegistry sources)
+      : dir = packageDir,
+        pubspec = new Pubspec.load(packageDir, sources, expectedName: name);
+  Package.inMemory(this.pubspec) : dir = null;
+  Package(this.pubspec, this.dir);
+  static final _WHITELISTED_FILES = const ['.htaccess'];
+  static final _blacklistedFiles = createFileFilter(['pubspec.lock']);
+  static final _blacklistedDirs = createDirectoryFilter(['packages']);
+  List<String> listFiles({String beneath, recursive: true}) {
+    if (beneath == null) beneath = dir;
+    var files;
+    if (git.isInstalled && dirExists(path.join(dir, '.git'))) {
+      var relativeBeneath = path.relative(beneath, from: dir);
+      files = git.runSync(
+          ["ls-files", "--cached", "--others", "--exclude-standard", relativeBeneath],
+          workingDir: dir);
+      if (!recursive) {
+        var relativeStart =
+            relativeBeneath == '.' ? 0 : relativeBeneath.length + 1;
+        files = files.where((file) => !file.contains('/', relativeStart));
+      }
+      files = files.map((file) {
+        if (Platform.operatingSystem != 'windows') return "$dir/$file";
+        return "$dir\\${file.replaceAll("/", "\\")}";
+      }).where((file) {
+        return fileExists(file);
+      });
+    } else {
+      files = listDir(
+          beneath,
+          recursive: recursive,
+          includeDirs: false,
+          whitelist: _WHITELISTED_FILES);
+    }
+    return files.where((file) {
+      assert(file.startsWith(beneath));
+      file = file.substring(beneath.length);
+      return !_blacklistedFiles.any(file.endsWith) &&
+          !_blacklistedDirs.any(file.contains);
+    }).toList();
+  }
+  String toString() => '$name $version ($dir)';
+}
+class _PackageName {
+  _PackageName(this.name, this.source, this.description);
+  final String name;
+  final String source;
+  final description;
+  bool get isRoot => source == null;
+  String toString() {
+    if (isRoot) return "$name (root)";
+    return "$name from $source";
+  }
+  PackageRef toRef() => new PackageRef(name, source, description);
+  PackageId atVersion(Version version) =>
+      new PackageId(name, source, version, description);
+  PackageDep withConstraint(VersionConstraint constraint) =>
+      new PackageDep(name, source, constraint, description);
+}
+class PackageRef extends _PackageName {
+  PackageRef(String name, String source, description)
+      : super(name, source, description);
+  int get hashCode => name.hashCode ^ source.hashCode;
+  bool operator ==(other) {
+    return other is PackageRef && other.name == name && other.source == source;
+  }
+}
+class PackageId extends _PackageName {
+  final Version version;
+  PackageId(String name, String source, this.version, description)
+      : super(name, source, description);
+  PackageId.root(Package package)
+      : version = package.version,
+        super(package.name, null, package.name);
+  int get hashCode => name.hashCode ^ source.hashCode ^ version.hashCode;
+  bool operator ==(other) {
+    return other is PackageId &&
+        other.name == name &&
+        other.source == source &&
+        other.version == version;
+  }
+  String toString() {
+    if (isRoot) return "$name $version (root)";
+    return "$name $version from $source";
+  }
+}
+class PackageDep extends _PackageName {
+  final VersionConstraint constraint;
+  PackageDep(String name, String source, this.constraint, description)
+      : super(name, source, description);
+  String toString() {
+    if (isRoot) return "$name $constraint (root)";
+    return "$name $constraint from $source ($description)";
+  }
+  int get hashCode => name.hashCode ^ source.hashCode;
+  bool operator ==(other) {
+    return other is PackageDep &&
+        other.name == name &&
+        other.source == source &&
+        other.constraint == constraint;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/package_graph.dart b/sdk/lib/_internal/pub_generated/lib/src/package_graph.dart
new file mode 100644
index 0000000..26326c8
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/package_graph.dart
@@ -0,0 +1,25 @@
+library pub.package_graph;
+import 'entrypoint.dart';
+import 'lock_file.dart';
+import 'package.dart';
+import 'utils.dart';
+class PackageGraph {
+  final Entrypoint entrypoint;
+  final LockFile lockFile;
+  final Map<String, Package> packages;
+  Map<String, Set<Package>> _transitiveDependencies;
+  PackageGraph(this.entrypoint, this.lockFile, this.packages);
+  Set<Package> transitiveDependencies(String package) {
+    if (package == entrypoint.root.name) return packages.values.toSet();
+    if (_transitiveDependencies == null) {
+      var closure = transitiveClosure(
+          mapMap(
+              packages,
+              value: (_, package) => package.dependencies.map((dep) => dep.name)));
+      _transitiveDependencies = mapMap(
+          closure,
+          value: (_, names) => names.map((name) => packages[name]).toSet());
+    }
+    return _transitiveDependencies[package];
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/preprocess.dart b/sdk/lib/_internal/pub_generated/lib/src/preprocess.dart
new file mode 100644
index 0000000..04805af
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/preprocess.dart
@@ -0,0 +1,76 @@
+library pub.preprocess;
+import 'package:string_scanner/string_scanner.dart';
+import 'version.dart';
+String preprocess(String input, Map<String, Version> versions, sourceUrl) {
+  if (!input.contains(new RegExp(r"^//[>#]", multiLine: true))) return input;
+  return new _Preprocessor(input, versions, sourceUrl).run();
+}
+class _Preprocessor {
+  final StringScanner _scanner;
+  final Map<String, Version> _versions;
+  final _buffer = new StringBuffer();
+  _Preprocessor(String input, this._versions, sourceUrl)
+      : _scanner = new StringScanner(input, sourceUrl: sourceUrl);
+  String run() {
+    while (!_scanner.isDone) {
+      if (_scanner.scan(new RegExp(r"//#[ \t]*"))) {
+        _if();
+      } else {
+        _emitText();
+      }
+    }
+    _scanner.expectDone();
+    return _buffer.toString();
+  }
+  void _emitText() {
+    while (!_scanner.isDone && !_scanner.matches("//#")) {
+      if (_scanner.scan("//>")) {
+        if (!_scanner.matches("\n")) _scanner.expect(" ");
+      }
+      _scanner.scan(new RegExp(r"[^\n]*\n?"));
+      _buffer.write(_scanner.lastMatch[0]);
+    }
+  }
+  void _ignoreText() {
+    while (!_scanner.isDone && !_scanner.matches("//#")) {
+      _scanner.scan(new RegExp(r"[^\n]*\n?"));
+    }
+  }
+  void _if() {
+    _scanner.expect(new RegExp(r"if[ \t]+"), name: "if statement");
+    _scanner.expect(new RegExp(r"[a-zA-Z0-9_]+"), name: "package name");
+    var package = _scanner.lastMatch[0];
+    _scanner.scan(new RegExp(r"[ \t]*"));
+    var constraint = VersionConstraint.any;
+    if (_scanner.scan(new RegExp(r"[^\n]+"))) {
+      try {
+        constraint = new VersionConstraint.parse(_scanner.lastMatch[0]);
+      } on FormatException catch (error) {
+        _scanner.error("Invalid version constraint: ${error.message}");
+      }
+    }
+    _scanner.expect("\n");
+    var allowed =
+        _versions.containsKey(package) &&
+        constraint.allows(_versions[package]);
+    if (allowed) {
+      _emitText();
+    } else {
+      _ignoreText();
+    }
+    _scanner.expect("//#");
+    _scanner.scan(new RegExp(r"[ \t]*"));
+    if (_scanner.scan("else")) {
+      _scanner.expect("\n");
+      if (allowed) {
+        _ignoreText();
+      } else {
+        _emitText();
+      }
+      _scanner.expect("//#");
+      _scanner.scan(new RegExp(r"[ \t]*"));
+    }
+    _scanner.expect("end");
+    if (!_scanner.isDone) _scanner.expect("\n");
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/progress.dart b/sdk/lib/_internal/pub_generated/lib/src/progress.dart
new file mode 100644
index 0000000..3d2454b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/progress.dart
@@ -0,0 +1,48 @@
+library pub.progress;
+import 'dart:async';
+import 'dart:io';
+import 'log.dart' as log;
+import 'utils.dart';
+class Progress {
+  Timer _timer;
+  final _stopwatch = new Stopwatch();
+  final String _message;
+  String get _time => "(${niceDuration(_stopwatch.elapsed)})";
+  Progress(this._message, {bool fine: false}) {
+    _stopwatch.start();
+    var level = fine ? log.Level.FINE : log.Level.MESSAGE;
+    if (stdioType(stdout) != StdioType.TERMINAL ||
+        !log.verbosity.isLevelVisible(level) ||
+        log.json.enabled ||
+        fine ||
+        log.verbosity.isLevelVisible(log.Level.FINE)) {
+      log.write(level, "$_message...");
+      return;
+    }
+    _update();
+    _timer = new Timer.periodic(new Duration(milliseconds: 100), (_) {
+      _update();
+    });
+  }
+  void stop() {
+    _stopwatch.stop();
+    log.fine("$_message finished $_time.");
+    if (_timer == null) return;
+    _timer.cancel();
+    _timer = null;
+    _update();
+    stdout.writeln();
+  }
+  void stopAnimating() {
+    if (_timer == null) return;
+    stdout.writeln(log.format("\r$_message..."));
+    _timer.cancel();
+    _timer = null;
+  }
+  void _update() {
+    stdout.write(log.format("\r$_message... "));
+    if (_stopwatch.elapsed.inSeconds > 0) {
+      stdout.write(log.gray(_time));
+    }
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/pubspec.dart b/sdk/lib/_internal/pub_generated/lib/src/pubspec.dart
new file mode 100644
index 0000000..ce32ae2
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/pubspec.dart
@@ -0,0 +1,387 @@
+library pub.pubspec;
+import 'package:path/path.dart' as path;
+import 'package:source_span/source_span.dart';
+import 'package:yaml/yaml.dart';
+import 'barback/transformer_config.dart';
+import 'exceptions.dart';
+import 'io.dart';
+import 'package.dart';
+import 'source_registry.dart';
+import 'utils.dart';
+import 'version.dart';
+class Pubspec {
+  final SourceRegistry _sources;
+  Uri get _location => fields.span.sourceUrl;
+  final YamlMap fields;
+  String get name {
+    if (_name != null) return _name;
+    var name = fields['name'];
+    if (name == null) {
+      throw new PubspecException(
+          'Missing the required "name" field.',
+          fields.span);
+    } else if (name is! String) {
+      throw new PubspecException(
+          '"name" field must be a string.',
+          fields.nodes['name'].span);
+    }
+    _name = name;
+    return _name;
+  }
+  String _name;
+  Version get version {
+    if (_version != null) return _version;
+    var version = fields['version'];
+    if (version == null) {
+      _version = Version.none;
+      return _version;
+    }
+    var span = fields.nodes['version'].span;
+    if (version is! String) {
+      _error('"version" field must be a string.', span);
+    }
+    _version =
+        _wrapFormatException('version number', span, () => new Version.parse(version));
+    return _version;
+  }
+  Version _version;
+  List<PackageDep> get dependencies {
+    if (_dependencies != null) return _dependencies;
+    _dependencies = _parseDependencies('dependencies');
+    if (_devDependencies == null) {
+      _checkDependencyOverlap(_dependencies, devDependencies);
+    }
+    return _dependencies;
+  }
+  List<PackageDep> _dependencies;
+  List<PackageDep> get devDependencies {
+    if (_devDependencies != null) return _devDependencies;
+    _devDependencies = _parseDependencies('dev_dependencies');
+    if (_dependencies == null) {
+      _checkDependencyOverlap(dependencies, _devDependencies);
+    }
+    return _devDependencies;
+  }
+  List<PackageDep> _devDependencies;
+  List<PackageDep> get dependencyOverrides {
+    if (_dependencyOverrides != null) return _dependencyOverrides;
+    _dependencyOverrides = _parseDependencies('dependency_overrides');
+    return _dependencyOverrides;
+  }
+  List<PackageDep> _dependencyOverrides;
+  List<Set<TransformerConfig>> get transformers {
+    if (_transformers != null) return _transformers;
+    var transformers = fields['transformers'];
+    if (transformers == null) {
+      _transformers = [];
+      return _transformers;
+    }
+    if (transformers is! List) {
+      _error(
+          '"transformers" field must be a list.',
+          fields.nodes['transformers'].span);
+    }
+    var i = 0;
+    _transformers = transformers.nodes.map((phase) {
+      var phaseNodes = phase is YamlList ? phase.nodes : [phase];
+      return phaseNodes.map((transformerNode) {
+        var transformer = transformerNode.value;
+        if (transformer is! String && transformer is! Map) {
+          _error(
+              'A transformer must be a string or map.',
+              transformerNode.span);
+        }
+        var libraryNode;
+        var configurationNode;
+        if (transformer is String) {
+          libraryNode = transformerNode;
+        } else {
+          if (transformer.length != 1) {
+            _error(
+                'A transformer map must have a single key: the transformer ' 'identifier.',
+                transformerNode.span);
+          } else if (transformer.keys.single is! String) {
+            _error(
+                'A transformer identifier must be a string.',
+                transformer.nodes.keys.single.span);
+          }
+          libraryNode = transformer.nodes.keys.single;
+          configurationNode = transformer.nodes.values.single;
+          if (configurationNode is! YamlMap) {
+            _error(
+                "A transformer's configuration must be a map.",
+                configurationNode.span);
+          }
+        }
+        var config = _wrapSpanFormatException('transformer config', () {
+          return new TransformerConfig.parse(
+              libraryNode.value,
+              libraryNode.span,
+              configurationNode);
+        });
+        var package = config.id.package;
+        if (package != name &&
+            !config.id.isBuiltInTransformer &&
+            !dependencies.any((ref) => ref.name == package) &&
+            !devDependencies.any((ref) => ref.name == package) &&
+            !dependencyOverrides.any((ref) => ref.name == package)) {
+          _error('"$package" is not a dependency.', libraryNode.span);
+        }
+        return config;
+      }).toSet();
+    }).toList();
+    return _transformers;
+  }
+  List<Set<TransformerConfig>> _transformers;
+  PubspecEnvironment get environment {
+    if (_environment != null) return _environment;
+    var yaml = fields['environment'];
+    if (yaml == null) {
+      _environment = new PubspecEnvironment(VersionConstraint.any);
+      return _environment;
+    }
+    if (yaml is! Map) {
+      _error(
+          '"environment" field must be a map.',
+          fields.nodes['environment'].span);
+    }
+    _environment =
+        new PubspecEnvironment(_parseVersionConstraint(yaml.nodes['sdk']));
+    return _environment;
+  }
+  PubspecEnvironment _environment;
+  String get publishTo {
+    if (_parsedPublishTo) return _publishTo;
+    var publishTo = fields['publish_to'];
+    if (publishTo != null) {
+      var span = fields.nodes['publish_to'].span;
+      if (publishTo is! String) {
+        _error('"publish_to" field must be a string.', span);
+      }
+      if (publishTo != "none") {
+        _wrapFormatException(
+            '"publish_to" field',
+            span,
+            () => Uri.parse(publishTo));
+      }
+    }
+    _parsedPublishTo = true;
+    _publishTo = publishTo;
+    return _publishTo;
+  }
+  bool _parsedPublishTo = false;
+  String _publishTo;
+  bool get isPrivate => publishTo == "none";
+  bool get isEmpty =>
+      name == null && version == Version.none && dependencies.isEmpty;
+  factory Pubspec.load(String packageDir, SourceRegistry sources,
+      {String expectedName}) {
+    var pubspecPath = path.join(packageDir, 'pubspec.yaml');
+    var pubspecUri = path.toUri(pubspecPath);
+    if (!fileExists(pubspecPath)) {
+      throw new FileException(
+          'Could not find a file named "pubspec.yaml" in "$packageDir".',
+          pubspecPath);
+    }
+    return new Pubspec.parse(
+        readTextFile(pubspecPath),
+        sources,
+        expectedName: expectedName,
+        location: pubspecUri);
+  }
+  Pubspec(this._name, {Version version, Iterable<PackageDep> dependencies,
+      Iterable<PackageDep> devDependencies, Iterable<PackageDep> dependencyOverrides,
+      VersionConstraint sdkConstraint,
+      Iterable<Iterable<TransformerConfig>> transformers, Map fields,
+      SourceRegistry sources})
+      : _version = version,
+        _dependencies = dependencies == null ? null : dependencies.toList(),
+        _devDependencies = devDependencies == null ?
+          null :
+          devDependencies.toList(),
+        _dependencyOverrides = dependencyOverrides == null ?
+          null :
+          dependencyOverrides.toList(),
+        _environment = new PubspecEnvironment(sdkConstraint),
+        _transformers = transformers == null ?
+          [] :
+          transformers.map((phase) => phase.toSet()).toList(),
+        fields = fields == null ? new YamlMap() : new YamlMap.wrap(fields),
+        _sources = sources;
+  Pubspec.empty()
+      : _sources = null,
+        _name = null,
+        _version = Version.none,
+        _dependencies = <PackageDep>[],
+        _devDependencies = <PackageDep>[],
+        _environment = new PubspecEnvironment(),
+        _transformers = <Set<TransformerConfig>>[],
+        fields = new YamlMap();
+  Pubspec.fromMap(Map fields, this._sources, {String expectedName,
+      Uri location})
+      : fields = fields is YamlMap ?
+          fields :
+          new YamlMap.wrap(fields, sourceUrl: location) {
+    if (expectedName == null) return;
+    if (name == expectedName) return;
+    throw new PubspecException(
+        '"name" field doesn\'t match expected name ' '"$expectedName".',
+        this.fields.nodes["name"].span);
+  }
+  factory Pubspec.parse(String contents, SourceRegistry sources,
+      {String expectedName, Uri location}) {
+    var pubspecNode = loadYamlNode(contents, sourceUrl: location);
+    if (pubspecNode is YamlScalar && pubspecNode.value == null) {
+      pubspecNode = new YamlMap(sourceUrl: location);
+    } else if (pubspecNode is! YamlMap) {
+      throw new PubspecException(
+          'The pubspec must be a YAML mapping.',
+          pubspecNode.span);
+    }
+    return new Pubspec.fromMap(
+        pubspecNode,
+        sources,
+        expectedName: expectedName,
+        location: location);
+  }
+  List<PubspecException> get allErrors {
+    var errors = <PubspecException>[];
+    _getError(fn()) {
+      try {
+        fn();
+      } on PubspecException catch (e) {
+        errors.add(e);
+      }
+    }
+    _getError(() => this.name);
+    _getError(() => this.version);
+    _getError(() => this.dependencies);
+    _getError(() => this.devDependencies);
+    _getError(() => this.transformers);
+    _getError(() => this.environment);
+    _getError(() => this.publishTo);
+    return errors;
+  }
+  List<PackageDep> _parseDependencies(String field) {
+    var dependencies = <PackageDep>[];
+    var yaml = fields[field];
+    if (yaml == null) return dependencies;
+    if (yaml is! Map) {
+      _error('"$field" field must be a map.', fields.nodes[field].span);
+    }
+    var nonStringNode =
+        yaml.nodes.keys.firstWhere((e) => e.value is! String, orElse: () => null);
+    if (nonStringNode != null) {
+      _error('A dependency name must be a string.', nonStringNode.span);
+    }
+    yaml.nodes.forEach((nameNode, specNode) {
+      var name = nameNode.value;
+      var spec = specNode.value;
+      if (fields['name'] != null && name == this.name) {
+        _error('A package may not list itself as a dependency.', nameNode.span);
+      }
+      var descriptionNode;
+      var sourceName;
+      var versionConstraint = new VersionRange();
+      if (spec == null) {
+        descriptionNode = nameNode;
+        sourceName = _sources.defaultSource.name;
+      } else if (spec is String) {
+        descriptionNode = nameNode;
+        sourceName = _sources.defaultSource.name;
+        versionConstraint = _parseVersionConstraint(specNode);
+      } else if (spec is Map) {
+        spec = new Map.from(spec);
+        if (spec.containsKey('version')) {
+          spec.remove('version');
+          versionConstraint =
+              _parseVersionConstraint(specNode.nodes['version']);
+        }
+        var sourceNames = spec.keys.toList();
+        if (sourceNames.length > 1) {
+          _error('A dependency may only have one source.', specNode.span);
+        }
+        sourceName = sourceNames.single;
+        if (sourceName is! String) {
+          _error(
+              'A source name must be a string.',
+              specNode.nodes.keys.single.span);
+        }
+        descriptionNode = specNode.nodes[sourceName];
+      } else {
+        _error(
+            'A dependency specification must be a string or a mapping.',
+            specNode.span);
+      }
+      var description =
+          _wrapFormatException('description', descriptionNode.span, () {
+        var pubspecPath;
+        if (_location != null && _isFileUri(_location)) {
+          pubspecPath = path.fromUri(_location);
+        }
+        return _sources[sourceName].parseDescription(
+            pubspecPath,
+            descriptionNode.value,
+            fromLockFile: false);
+      });
+      dependencies.add(
+          new PackageDep(name, sourceName, versionConstraint, description));
+    });
+    return dependencies;
+  }
+  VersionConstraint _parseVersionConstraint(YamlNode node) {
+    if (node.value == null) return VersionConstraint.any;
+    if (node.value is! String) {
+      _error('A version constraint must be a string.', node.span);
+    }
+    return _wrapFormatException(
+        'version constraint',
+        node.span,
+        () => new VersionConstraint.parse(node.value));
+  }
+  void _checkDependencyOverlap(List<PackageDep> dependencies,
+      List<PackageDep> devDependencies) {
+    var dependencyNames = dependencies.map((dep) => dep.name).toSet();
+    var collisions =
+        dependencyNames.intersection(devDependencies.map((dep) => dep.name).toSet());
+    if (collisions.isEmpty) return;
+    var span = fields["dependencies"].nodes.keys.firstWhere(
+        (key) => collisions.contains(key.value)).span;
+    _error(
+        '${pluralize('Package', collisions.length)} '
+            '${toSentence(collisions.map((package) => '"$package"'))} cannot '
+            'appear in both "dependencies" and "dev_dependencies".',
+        span);
+  }
+  _wrapFormatException(String description, SourceSpan span, fn()) {
+    try {
+      return fn();
+    } on FormatException catch (e) {
+      _error('Invalid $description: ${e.message}', span);
+    }
+  }
+  _wrapSpanFormatException(String description, fn()) {
+    try {
+      return fn();
+    } on SourceSpanFormatException catch (e) {
+      _error('Invalid $description: ${e.message}', e.span);
+    }
+  }
+  void _error(String message, SourceSpan span) {
+    var name;
+    try {
+      name = this.name;
+    } on PubspecException catch (_) {}
+    throw new PubspecException(message, span);
+  }
+}
+class PubspecEnvironment {
+  final VersionConstraint sdkVersion;
+  PubspecEnvironment([VersionConstraint sdk])
+      : sdkVersion = sdk != null ? sdk : VersionConstraint.any;
+}
+class PubspecException extends SourceSpanFormatException implements
+    ApplicationException {
+  PubspecException(String message, SourceSpan span) : super(message, span);
+}
+bool _isFileUri(Uri uri) => uri.scheme == 'file' || uri.scheme == '';
diff --git a/sdk/lib/_internal/pub_generated/lib/src/sdk.dart b/sdk/lib/_internal/pub_generated/lib/src/sdk.dart
new file mode 100644
index 0000000..5a49dfc
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/sdk.dart
@@ -0,0 +1,16 @@
+library pub.sdk;
+import 'dart:io';
+import 'package:path/path.dart' as path;
+import 'io.dart';
+import 'version.dart';
+final String rootDirectory =
+    runningFromSdk ? _rootDirectory : path.join(repoRoot, "sdk");
+final String _rootDirectory = path.dirname(path.dirname(Platform.executable));
+Version version = _getVersion();
+Version _getVersion() {
+  var sdkVersion = Platform.environment["_PUB_TEST_SDK_VERSION"];
+  if (sdkVersion != null) return new Version.parse(sdkVersion);
+  var revisionPath = path.join(_rootDirectory, "version");
+  var version = readTextFile(revisionPath).trim();
+  return new Version.parse(version);
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/solver/backtracking_solver.dart b/sdk/lib/_internal/pub_generated/lib/src/solver/backtracking_solver.dart
new file mode 100644
index 0000000..04fc159
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/solver/backtracking_solver.dart
@@ -0,0 +1,416 @@
+library pub.solver.backtracking_solver;
+import 'dart:async';
+import 'dart:collection' show Queue;
+import '../barback.dart' as barback;
+import '../exceptions.dart';
+import '../lock_file.dart';
+import '../log.dart' as log;
+import '../package.dart';
+import '../pubspec.dart';
+import '../sdk.dart' as sdk;
+import '../source_registry.dart';
+import '../source/unknown.dart';
+import '../utils.dart';
+import '../version.dart';
+import 'dependency_queue.dart';
+import 'version_queue.dart';
+import 'version_solver.dart';
+class BacktrackingSolver {
+  final SolveType type;
+  final SourceRegistry sources;
+  final Package root;
+  final LockFile lockFile;
+  final PubspecCache cache;
+  final _forceLatest = new Set<String>();
+  final _overrides = new Map<String, PackageDep>();
+  final _selected = <VersionQueue>[];
+  int get attemptedSolutions => _attemptedSolutions;
+  var _attemptedSolutions = 1;
+  BacktrackingSolver(SolveType type, SourceRegistry sources, this.root,
+      this.lockFile, List<String> useLatest)
+      : type = type,
+        sources = sources,
+        cache = new PubspecCache(type, sources) {
+    for (var package in useLatest) {
+      _forceLatest.add(package);
+    }
+    for (var override in root.dependencyOverrides) {
+      _overrides[override.name] = override;
+    }
+  }
+  Future<SolveResult> solve() {
+    var stopwatch = new Stopwatch();
+    _logParameters();
+    var overrides = _overrides.values.toList();
+    overrides.sort((a, b) => a.name.compareTo(b.name));
+    return newFuture(() {
+      stopwatch.start();
+      cache.cache(new PackageId.root(root), root.pubspec);
+      _validateSdkConstraint(root.pubspec);
+      return _traverseSolution();
+    }).then((packages) {
+      var pubspecs = new Map.fromIterable(
+          packages,
+          key: (id) => id.name,
+          value: (id) => cache.getCachedPubspec(id));
+      return new SolveResult.success(
+          sources,
+          root,
+          lockFile,
+          packages,
+          overrides,
+          pubspecs,
+          _getAvailableVersions(packages),
+          attemptedSolutions);
+    }).catchError((error) {
+      if (error is! SolveFailure) throw error;
+      return new SolveResult.failure(
+          sources,
+          root,
+          lockFile,
+          overrides,
+          error,
+          attemptedSolutions);
+    }).whenComplete(() {
+      var buffer = new StringBuffer();
+      buffer.writeln('${runtimeType} took ${stopwatch.elapsed} seconds.');
+      buffer.writeln(cache.describeResults());
+      log.solver(buffer);
+    });
+  }
+  Map<String, List<Version>> _getAvailableVersions(List<PackageId> packages) {
+    var availableVersions = new Map<String, List<Version>>();
+    for (var package in packages) {
+      var cached = cache.getCachedVersions(package.toRef());
+      var versions;
+      if (cached != null) {
+        versions = cached.map((id) => id.version).toList();
+      } else {
+        versions = [package.version];
+      }
+      availableVersions[package.name] = versions;
+    }
+    return availableVersions;
+  }
+  PackageId select(VersionQueue versions) {
+    _selected.add(versions);
+    logSolve();
+    return versions.current;
+  }
+  PackageId getSelected(String name) {
+    if (root.name == name) return new PackageId.root(root);
+    for (var i = _selected.length - 1; i >= 0; i--) {
+      if (_selected[i].current.name == name) return _selected[i].current;
+    }
+    return null;
+  }
+  PackageId getLocked(String package) {
+    if (type == SolveType.GET) return lockFile.packages[package];
+    if (type == SolveType.DOWNGRADE) {
+      var locked = lockFile.packages[package];
+      if (locked != null && !sources[locked.source].hasMultipleVersions) {
+        return locked;
+      }
+    }
+    if (_forceLatest.isEmpty || _forceLatest.contains(package)) return null;
+    return lockFile.packages[package];
+  }
+  Future<List<PackageId>> _traverseSolution() => resetStack(() {
+    return new Traverser(this).traverse().catchError((error) {
+      if (error is! SolveFailure) throw error;
+      return _backtrack(error).then((canTry) {
+        if (canTry) {
+          _attemptedSolutions++;
+          return _traverseSolution();
+        }
+        throw error;
+      });
+    });
+  });
+  Future<bool> _backtrack(SolveFailure failure) {
+    if (_selected.isEmpty) return new Future.value(false);
+    var dependers = _getTransitiveDependers(failure.package);
+    for (var selected in _selected) {
+      if (dependers.contains(selected.current.name)) {
+        selected.fail();
+      }
+    }
+    advanceVersion() {
+      _backjump(failure);
+      var previous = _selected.last.current;
+      return _selected.last.advance().then((success) {
+        if (success) {
+          logSolve();
+          return true;
+        }
+        logSolve('$previous is last version, backtracking');
+        _selected.removeLast();
+        if (_selected.isEmpty) return false;
+        return advanceVersion();
+      });
+    }
+    return advanceVersion();
+  }
+  void _backjump(SolveFailure failure) {
+    for (var i = _selected.length - 1; i >= 0; i--) {
+      var selected = _selected[i].current;
+      if (failure is DisjointConstraintException &&
+          selected.name == failure.package) {
+        logSolve("skipping past disjoint selected ${selected.name}");
+        continue;
+      }
+      if (_selected[i].hasFailed) {
+        logSolve('backjump to ${selected.name}');
+        _selected.removeRange(i + 1, _selected.length);
+        return;
+      }
+    }
+    _selected.removeRange(1, _selected.length);
+  }
+  Set<String> _getTransitiveDependers(String dependency) {
+    var dependers = new Map<String, Set<String>>();
+    addDependencies(name, deps) {
+      dependers.putIfAbsent(name, () => new Set<String>());
+      for (var dep in deps) {
+        dependers.putIfAbsent(dep.name, () => new Set<String>()).add(name);
+      }
+    }
+    for (var i = 0; i < _selected.length; i++) {
+      var id = _selected[i].current;
+      var pubspec = cache.getCachedPubspec(id);
+      if (pubspec != null) addDependencies(id.name, pubspec.dependencies);
+    }
+    addDependencies(root.name, root.immediateDependencies);
+    var visited = new Set<String>();
+    walk(String package) {
+      if (visited.contains(package)) return;
+      visited.add(package);
+      var depender = dependers[package].forEach(walk);
+    }
+    walk(dependency);
+    return visited;
+  }
+  void _logParameters() {
+    var buffer = new StringBuffer();
+    buffer.writeln("Solving dependencies:");
+    for (var package in root.dependencies) {
+      buffer.write("- $package");
+      var locked = getLocked(package.name);
+      if (_forceLatest.contains(package.name)) {
+        buffer.write(" (use latest)");
+      } else if (locked != null) {
+        var version = locked.version;
+        buffer.write(" (locked to $version)");
+      }
+      buffer.writeln();
+    }
+    log.solver(buffer.toString().trim());
+  }
+  void logSolve([String message]) {
+    if (message == null) {
+      if (_selected.isEmpty) {
+        message = "* start at root";
+      } else {
+        message = "* select ${_selected.last.current}";
+      }
+    } else {
+      message = prefixLines(message);
+    }
+    var prefix = _selected.skip(1).map((_) => '| ').join();
+    log.solver(prefixLines(message, prefix: prefix));
+  }
+}
+class Traverser {
+  final BacktrackingSolver _solver;
+  final _packages = new Queue<PackageId>();
+  final _visited = new Set<PackageId>();
+  final _dependencies = <String, List<Dependency>>{};
+  Traverser(this._solver);
+  Future<List<PackageId>> traverse() {
+    _packages.add(new PackageId.root(_solver.root));
+    return _traversePackage();
+  }
+  Future<List<PackageId>> _traversePackage() {
+    if (_packages.isEmpty) {
+      return new Future<List<PackageId>>.value(_visited.toList());
+    }
+    var id = _packages.removeFirst();
+    if (_visited.contains(id)) {
+      return _traversePackage();
+    }
+    _visited.add(id);
+    return _solver.cache.getPubspec(id).then((pubspec) {
+      _validateSdkConstraint(pubspec);
+      var deps = pubspec.dependencies.toSet();
+      if (id.isRoot) {
+        deps.addAll(pubspec.devDependencies);
+        deps.addAll(_solver._overrides.values);
+      }
+      deps = deps.map((dep) {
+        var override = _solver._overrides[dep.name];
+        if (override != null) return override;
+        return dep;
+      }).toSet();
+      for (var dep in deps) {
+        if (!dep.isRoot && _solver.sources[dep.source] is UnknownSource) {
+          throw new UnknownSourceException(
+              id.name,
+              [new Dependency(id.name, id.version, dep)]);
+        }
+      }
+      return _traverseDeps(id, new DependencyQueue(_solver, deps));
+    }).catchError((error) {
+      if (error is! PackageNotFoundException) throw error;
+      throw new NoVersionException(id.name, null, id.version, []);
+    });
+  }
+  Future<List<PackageId>> _traverseDeps(PackageId depender,
+      DependencyQueue deps) {
+    if (deps.isEmpty) return _traversePackage();
+    return resetStack(() {
+      return deps.advance().then((dep) {
+        var dependency = new Dependency(depender.name, depender.version, dep);
+        return _registerDependency(dependency).then((_) {
+          if (dep.name == "barback") return _addImplicitDependencies();
+        });
+      }).then((_) => _traverseDeps(depender, deps));
+    });
+  }
+  Future _registerDependency(Dependency dependency) {
+    return syncFuture(() {
+      _validateDependency(dependency);
+      var dep = dependency.dep;
+      var dependencies = _getDependencies(dep.name);
+      dependencies.add(dependency);
+      var constraint = _getConstraint(dep.name);
+      if (constraint.isEmpty) {
+        var constraints = dependencies.map(
+            (dep) => "  ${dep.dep.constraint} from ${dep.depender}").join('\n');
+        _solver.logSolve('disjoint constraints on ${dep.name}:\n$constraints');
+        throw new DisjointConstraintException(dep.name, dependencies);
+      }
+      var selected = _validateSelected(dep, constraint);
+      if (selected != null) {
+        _packages.add(selected);
+        return null;
+      }
+      var locked = _getValidLocked(dep.name);
+      return VersionQueue.create(locked, () {
+        return _getAllowedVersions(dep);
+      }).then((versions) => _packages.add(_solver.select(versions)));
+    });
+  }
+  Future<Iterable<PackageId>> _getAllowedVersions(PackageDep dep) {
+    var constraint = _getConstraint(dep.name);
+    return _solver.cache.getVersions(dep.toRef()).then((versions) {
+      var allowed = versions.where((id) => constraint.allows(id.version));
+      if (allowed.isEmpty) {
+        _solver.logSolve('no versions for ${dep.name} match $constraint');
+        throw new NoVersionException(
+            dep.name,
+            null,
+            constraint,
+            _getDependencies(dep.name));
+      }
+      if (_solver._forceLatest.contains(dep.name)) allowed = [allowed.first];
+      var locked = _getValidLocked(dep.name);
+      if (locked != null) {
+        allowed = allowed.where((dep) => dep.version != locked.version);
+      }
+      return allowed;
+    }).catchError((error, stackTrace) {
+      if (error is PackageNotFoundException) {
+        throw new DependencyNotFoundException(
+            dep.name,
+            error,
+            _getDependencies(dep.name));
+      }
+      throw error;
+    });
+  }
+  void _validateDependency(Dependency dependency) {
+    var dep = dependency.dep;
+    var required = _getRequired(dep.name);
+    if (required == null) return;
+    if (required.dep.source != dep.source) {
+      _solver.logSolve(
+          'source mismatch on ${dep.name}: ${required.dep.source} ' '!= ${dep.source}');
+      throw new SourceMismatchException(dep.name, [required, dependency]);
+    }
+    var source = _solver.sources[dep.source];
+    if (!source.descriptionsEqual(dep.description, required.dep.description)) {
+      _solver.logSolve(
+          'description mismatch on ${dep.name}: '
+              '${required.dep.description} != ${dep.description}');
+      throw new DescriptionMismatchException(dep.name, [required, dependency]);
+    }
+  }
+  PackageId _validateSelected(PackageDep dep, VersionConstraint constraint) {
+    var selected = _solver.getSelected(dep.name);
+    if (selected == null) return null;
+    if (!dep.constraint.allows(selected.version)) {
+      _solver.logSolve('selection $selected does not match $constraint');
+      throw new NoVersionException(
+          dep.name,
+          selected.version,
+          constraint,
+          _getDependencies(dep.name));
+    }
+    return selected;
+  }
+  Future _addImplicitDependencies() {
+    if (_getDependencies("barback").length != 1) return new Future.value();
+    return Future.wait(barback.pubConstraints.keys.map((depName) {
+      var constraint = barback.pubConstraints[depName];
+      _solver.logSolve(
+          'add implicit $constraint pub dependency on ' '$depName');
+      var override = _solver._overrides[depName];
+      var pubDep = override == null ?
+          new PackageDep(depName, "hosted", constraint, depName) :
+          override.withConstraint(constraint);
+      return _registerDependency(
+          new Dependency("pub itself", Version.none, pubDep));
+    }));
+  }
+  List<Dependency> _getDependencies(String name) {
+    return _dependencies.putIfAbsent(name, () => <Dependency>[]);
+  }
+  Dependency _getRequired(String name) {
+    return _getDependencies(
+        name).firstWhere((dep) => !dep.dep.isRoot, orElse: () => null);
+  }
+  VersionConstraint _getConstraint(String name) {
+    var constraint = _getDependencies(
+        name).map(
+            (dep) =>
+                dep.dep.constraint).fold(VersionConstraint.any, (a, b) => a.intersect(b));
+    return constraint;
+  }
+  PackageId _getValidLocked(String name) {
+    var package = _solver.getLocked(name);
+    if (package == null) return null;
+    var constraint = _getConstraint(name);
+    if (!constraint.allows(package.version)) {
+      _solver.logSolve('$package is locked but does not match $constraint');
+      return null;
+    } else {
+      _solver.logSolve('$package is locked');
+    }
+    var required = _getRequired(name);
+    if (required != null) {
+      if (package.source != required.dep.source) return null;
+      var source = _solver.sources[package.source];
+      if (!source.descriptionsEqual(
+          package.description,
+          required.dep.description)) return null;
+    }
+    return package;
+  }
+}
+void _validateSdkConstraint(Pubspec pubspec) {
+  if (pubspec.environment.sdkVersion.allows(sdk.version)) return;
+  throw new BadSdkVersionException(
+      pubspec.name,
+      'Package ${pubspec.name} requires SDK version '
+          '${pubspec.environment.sdkVersion} but the current SDK is ' '${sdk.version}.');
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/solver/dependency_queue.dart b/sdk/lib/_internal/pub_generated/lib/src/solver/dependency_queue.dart
new file mode 100644
index 0000000..f2651f4
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/solver/dependency_queue.dart
@@ -0,0 +1,73 @@
+library pub.solver.dependency_queue;
+import 'dart:async';
+import 'dart:collection' show Queue;
+import '../log.dart' as log;
+import '../package.dart';
+import 'backtracking_solver.dart';
+class DependencyQueue {
+  final BacktrackingSolver _solver;
+  final Queue<PackageDep> _presorted;
+  final List<PackageDep> _remaining;
+  bool _isSorted = false;
+  bool get isEmpty => _presorted.isEmpty && _remaining.isEmpty;
+  Future _sortFuture;
+  factory DependencyQueue(BacktrackingSolver solver, Iterable<PackageDep> deps)
+      {
+    var presorted = <PackageDep>[];
+    var remaining = <PackageDep>[];
+    for (var dep in deps) {
+      if (solver.getSelected(dep.name) != null ||
+          solver.getLocked(dep.name) != null) {
+        presorted.add(dep);
+      } else {
+        remaining.add(dep);
+      }
+    }
+    presorted.sort((a, b) => a.name.compareTo(b.name));
+    return new DependencyQueue._(
+        solver,
+        new Queue<PackageDep>.from(presorted),
+        remaining);
+  }
+  DependencyQueue._(this._solver, this._presorted, this._remaining);
+  Future<PackageDep> advance() {
+    if (_presorted.isNotEmpty) {
+      return new Future.value(_presorted.removeFirst());
+    }
+    if (!_isSorted) return _sort().then((_) => _remaining.removeAt(0));
+    return new Future.value(_remaining.removeAt(0));
+  }
+  Future _sort() {
+    assert(_sortFuture == null);
+    _sortFuture = Future.wait(_remaining.map(_getNumVersions)).then((versions) {
+      _sortFuture = null;
+      var versionMap = new Map.fromIterables(_remaining, versions);
+      _remaining.sort((a, b) {
+        if (versionMap[a] != versionMap[b]) {
+          return versionMap[a].compareTo(versionMap[b]);
+        }
+        return a.name.compareTo(b.name);
+      });
+      _isSorted = true;
+    });
+    return _sortFuture;
+  }
+  Future<int> _getNumVersions(PackageDep dep) {
+    if (dep.isRoot) {
+      return new Future.value(1);
+    }
+    return _solver.cache.getVersions(dep.toRef()).then((versions) {
+      for (var rootDep in _solver.root.immediateDependencies) {
+        if (rootDep.name == dep.name) {
+          versions =
+              versions.where((id) => rootDep.constraint.allows(id.version));
+          break;
+        }
+      }
+      return versions.length;
+    }).catchError((error, trace) {
+      log.solver("Could not get versions for $dep:\n$error\n\n$trace");
+      return 0;
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/solver/solve_report.dart b/sdk/lib/_internal/pub_generated/lib/src/solver/solve_report.dart
new file mode 100644
index 0000000..b4902e0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/solver/solve_report.dart
@@ -0,0 +1,163 @@
+library pub.solver.solve_report;
+import '../lock_file.dart';
+import '../log.dart' as log;
+import '../package.dart';
+import '../source_registry.dart';
+import '../utils.dart';
+import '../version.dart';
+import 'version_solver.dart';
+class SolveReport {
+  final SolveType _type;
+  final SourceRegistry _sources;
+  final Package _root;
+  final LockFile _previousLockFile;
+  final SolveResult _result;
+  final _dependencies = new Map<String, PackageId>();
+  final _output = new StringBuffer();
+  SolveReport(this._type, this._sources, this._root, this._previousLockFile,
+      this._result) {
+    for (var id in _result.packages) {
+      _dependencies[id.name] = id;
+    }
+  }
+  void show() {
+    _reportChanges();
+    _reportOverrides();
+  }
+  void summarize({bool dryRun: false}) {
+    var dependencies = _dependencies.keys.toSet();
+    dependencies.addAll(_previousLockFile.packages.keys);
+    dependencies.remove(_root.name);
+    var numChanged = dependencies.where((name) {
+      var oldId = _previousLockFile.packages[name];
+      var newId = _dependencies[name];
+      if (oldId == null) return true;
+      if (newId == null) return true;
+      return !_sources.idsEqual(oldId, newId);
+    }).length;
+    if (dryRun) {
+      if (numChanged == 0) {
+        log.message("No dependencies would change.");
+      } else if (numChanged == 1) {
+        log.message("Would change $numChanged dependency.");
+      } else {
+        log.message("Would change $numChanged dependencies.");
+      }
+    } else {
+      if (numChanged == 0) {
+        if (_type == SolveType.GET) {
+          log.message("Got dependencies!");
+        } else {
+          log.message("No dependencies changed.");
+        }
+      } else if (numChanged == 1) {
+        log.message("Changed $numChanged dependency!");
+      } else {
+        log.message("Changed $numChanged dependencies!");
+      }
+    }
+  }
+  void _reportChanges() {
+    _output.clear();
+    var names = _result.packages.map((id) => id.name).toList();
+    names.remove(_root.name);
+    names.sort();
+    names.forEach(_reportPackage);
+    var removed = _previousLockFile.packages.keys.toSet();
+    removed.removeAll(names);
+    if (removed.isNotEmpty) {
+      _output.writeln("These packages are no longer being depended on:");
+      removed = removed.toList();
+      removed.sort();
+      removed.forEach((name) => _reportPackage(name, alwaysShow: true));
+    }
+    log.message(_output);
+  }
+  void _reportOverrides() {
+    _output.clear();
+    if (_result.overrides.isNotEmpty) {
+      _output.writeln("Warning: You are using these overridden dependencies:");
+      var overrides = _result.overrides.map((dep) => dep.name).toList();
+      overrides.sort((a, b) => a.compareTo(b));
+      overrides.forEach(
+          (name) => _reportPackage(name, alwaysShow: true, highlightOverride: false));
+      log.warning(_output);
+    }
+  }
+  void _reportPackage(String name, {bool alwaysShow: false,
+      bool highlightOverride: true}) {
+    var newId = _dependencies[name];
+    var oldId = _previousLockFile.packages[name];
+    var id = newId != null ? newId : oldId;
+    var isOverridden =
+        _result.overrides.map((dep) => dep.name).contains(id.name);
+    var changed = false;
+    var addedOrRemoved = false;
+    var icon;
+    if (isOverridden) {
+      icon = log.magenta("! ");
+    } else if (newId == null) {
+      icon = log.red("- ");
+      addedOrRemoved = true;
+    } else if (oldId == null) {
+      icon = log.green("+ ");
+      addedOrRemoved = true;
+    } else if (!_sources.idDescriptionsEqual(oldId, newId)) {
+      icon = log.cyan("* ");
+      changed = true;
+    } else if (oldId.version < newId.version) {
+      icon = log.green("> ");
+      changed = true;
+    } else if (oldId.version > newId.version) {
+      icon = log.cyan("< ");
+      changed = true;
+    } else {
+      icon = "  ";
+    }
+    if (_type == SolveType.GET && !(alwaysShow || changed || addedOrRemoved)) {
+      return;
+    }
+    _output.write(icon);
+    _output.write(log.bold(id.name));
+    _output.write(" ");
+    _writeId(id);
+    if (changed) {
+      _output.write(" (was ");
+      _writeId(oldId);
+      _output.write(")");
+    }
+    if (isOverridden && highlightOverride) {
+      _output.write(" ${log.magenta('(overridden)')}");
+    }
+    if (newId != null && _type != SolveType.DOWNGRADE) {
+      var versions = _result.availableVersions[newId.name];
+      var newerStable = false;
+      var newerUnstable = false;
+      for (var version in versions) {
+        if (version > newId.version) {
+          if (version.isPreRelease) {
+            newerUnstable = true;
+          } else {
+            newerStable = true;
+          }
+        }
+      }
+      var message;
+      if (newerStable) {
+        message = "(${maxAll(versions, Version.prioritize)} available)";
+      } else if (newerUnstable) {
+        message = "(${maxAll(versions)} available)";
+      }
+      if (message != null) _output.write(" ${log.cyan(message)}");
+    }
+    _output.writeln();
+  }
+  void _writeId(PackageId id) {
+    _output.write(id.version);
+    var source = _sources[id.source];
+    if (source != _sources.defaultSource) {
+      var description = source.formatDescription(_root.dir, id.description);
+      _output.write(" from ${id.source} $description");
+    }
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/solver/version_queue.dart b/sdk/lib/_internal/pub_generated/lib/src/solver/version_queue.dart
new file mode 100644
index 0000000..aa3a851
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/solver/version_queue.dart
@@ -0,0 +1,42 @@
+library pub.solver.version_queue;
+import 'dart:async';
+import 'dart:collection' show Queue;
+import '../package.dart';
+typedef Future<Iterable<PackageId>> PackageIdGenerator();
+class VersionQueue {
+  Queue<PackageId> _allowed;
+  final PackageIdGenerator _allowedGenerator;
+  PackageId _locked;
+  PackageId get current {
+    if (_locked != null) return _locked;
+    return _allowed.first;
+  }
+  bool get hasFailed => _hasFailed;
+  bool _hasFailed = false;
+  static Future<VersionQueue> create(PackageId locked,
+      PackageIdGenerator allowedGenerator) {
+    var versions = new VersionQueue._(locked, allowedGenerator);
+    if (locked != null) return new Future.value(versions);
+    return versions._calculateAllowed().then((_) => versions);
+  }
+  VersionQueue._(this._locked, this._allowedGenerator);
+  Future<bool> advance() {
+    _hasFailed = false;
+    if (_locked != null) {
+      return _calculateAllowed().then((_) {
+        _locked = null;
+        return _allowed.isNotEmpty;
+      });
+    }
+    _allowed.removeFirst();
+    return new Future.value(_allowed.isNotEmpty);
+  }
+  void fail() {
+    _hasFailed = true;
+  }
+  Future _calculateAllowed() {
+    return _allowedGenerator().then((allowed) {
+      _allowed = new Queue<PackageId>.from(allowed);
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/solver/version_solver.dart b/sdk/lib/_internal/pub_generated/lib/src/solver/version_solver.dart
new file mode 100644
index 0000000..9071520
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/solver/version_solver.dart
@@ -0,0 +1,269 @@
+library pub.solver.version_solver;
+import 'dart:async';
+import "dart:convert";
+import 'package:stack_trace/stack_trace.dart';
+import '../exceptions.dart';
+import '../lock_file.dart';
+import '../log.dart' as log;
+import '../package.dart';
+import '../pubspec.dart';
+import '../source_registry.dart';
+import '../version.dart';
+import '../utils.dart';
+import 'backtracking_solver.dart';
+import 'solve_report.dart';
+Future<SolveResult> resolveVersions(SolveType type, SourceRegistry sources,
+    Package root, {LockFile lockFile, List<String> useLatest}) {
+  if (lockFile == null) lockFile = new LockFile.empty();
+  if (useLatest == null) useLatest = [];
+  return log.progress('Resolving dependencies', () {
+    return new BacktrackingSolver(
+        type,
+        sources,
+        root,
+        lockFile,
+        useLatest).solve();
+  });
+}
+class SolveResult {
+  bool get succeeded => error == null;
+  final List<PackageId> packages;
+  final List<PackageDep> overrides;
+  final Map<String, Pubspec> pubspecs;
+  final Map<String, List<Version>> availableVersions;
+  final SolveFailure error;
+  final int attemptedSolutions;
+  final SourceRegistry _sources;
+  final Package _root;
+  final LockFile _previousLockFile;
+  Set<String> get changedPackages {
+    if (packages == null) return null;
+    var changed = packages.where(
+        (id) =>
+            !_sources.idsEqual(
+                _previousLockFile.packages[id.name],
+                id)).map((id) => id.name).toSet();
+    return changed.union(
+        _previousLockFile.packages.keys.where(
+            (package) => !availableVersions.containsKey(package)).toSet());
+  }
+  SolveResult.success(this._sources, this._root, this._previousLockFile,
+      this.packages, this.overrides, this.pubspecs, this.availableVersions,
+      this.attemptedSolutions)
+      : error = null;
+  SolveResult.failure(this._sources, this._root, this._previousLockFile,
+      this.overrides, this.error, this.attemptedSolutions)
+      : this.packages = null,
+        this.pubspecs = null,
+        this.availableVersions = {};
+  void showReport(SolveType type) {
+    new SolveReport(type, _sources, _root, _previousLockFile, this).show();
+  }
+  void summarizeChanges(SolveType type, {bool dryRun: false}) {
+    new SolveReport(
+        type,
+        _sources,
+        _root,
+        _previousLockFile,
+        this).summarize(dryRun: dryRun);
+  }
+  String toString() {
+    if (!succeeded) {
+      return 'Failed to solve after $attemptedSolutions attempts:\n' '$error';
+    }
+    return 'Took $attemptedSolutions tries to resolve to\n'
+        '- ${packages.join("\n- ")}';
+  }
+}
+class PubspecCache {
+  final SourceRegistry _sources;
+  final _versions = new Map<PackageRef, List<PackageId>>();
+  final _versionErrors = new Map<PackageRef, Pair<Object, Chain>>();
+  final _pubspecs = new Map<PackageId, Pubspec>();
+  final SolveType _type;
+  int _versionCacheMisses = 0;
+  int _versionCacheHits = 0;
+  int _pubspecCacheMisses = 0;
+  int _pubspecCacheHits = 0;
+  PubspecCache(this._type, this._sources);
+  void cache(PackageId id, Pubspec pubspec) {
+    _pubspecs[id] = pubspec;
+  }
+  Future<Pubspec> getPubspec(PackageId id) {
+    if (_pubspecs.containsKey(id)) {
+      _pubspecCacheHits++;
+      return new Future<Pubspec>.value(_pubspecs[id]);
+    }
+    _pubspecCacheMisses++;
+    var source = _sources[id.source];
+    return source.describe(id).then((pubspec) {
+      _pubspecs[id] = pubspec;
+      return pubspec;
+    });
+  }
+  Pubspec getCachedPubspec(PackageId id) => _pubspecs[id];
+  Future<List<PackageId>> getVersions(PackageRef package) {
+    if (package.isRoot) {
+      throw new StateError("Cannot get versions for root package $package.");
+    }
+    var versions = _versions[package];
+    if (versions != null) {
+      _versionCacheHits++;
+      return new Future.value(versions);
+    }
+    var error = _versionErrors[package];
+    if (error != null) {
+      _versionCacheHits++;
+      return new Future.error(error.first, error.last);
+    }
+    _versionCacheMisses++;
+    var source = _sources[package.source];
+    return source.getVersions(
+        package.name,
+        package.description).then((versions) {
+      versions.sort(
+          _type == SolveType.DOWNGRADE ? Version.antiPrioritize : Version.prioritize);
+      var ids =
+          versions.reversed.map((version) => package.atVersion(version)).toList();
+      _versions[package] = ids;
+      return ids;
+    }).catchError((error, trace) {
+      log.solver("Could not get versions for $package:\n$error\n\n$trace");
+      _versionErrors[package] = new Pair(error, new Chain.forTrace(trace));
+      throw error;
+    });
+  }
+  List<PackageId> getCachedVersions(PackageRef package) => _versions[package];
+  String describeResults() {
+    var results = '''- Requested $_versionCacheMisses version lists
+- Looked up $_versionCacheHits cached version lists
+- Requested $_pubspecCacheMisses pubspecs
+- Looked up $_pubspecCacheHits cached pubspecs
+''';
+    return results;
+  }
+  String _debugDescribePackageGraph() {
+    var packages = {};
+    _pubspecs.forEach((id, pubspec) {
+      var deps = {};
+      packages["${id.name} ${id.version}"] = deps;
+      for (var dep in pubspec.dependencies) {
+        deps[dep.name] = dep.constraint.toString();
+      }
+    });
+    _versions.forEach((ref, versions) {
+      for (var id in versions) {
+        packages.putIfAbsent("${id.name} ${id.version}", () => {});
+      }
+    });
+    return JSON.encode(packages);
+  }
+}
+class Dependency {
+  final String depender;
+  final Version dependerVersion;
+  final PackageDep dep;
+  bool get isMagic => depender.contains(" ");
+  Dependency(this.depender, this.dependerVersion, this.dep);
+  String toString() => '$depender $dependerVersion -> $dep';
+}
+class SolveType {
+  static const GET = const SolveType._("get");
+  static const UPGRADE = const SolveType._("upgrade");
+  static const DOWNGRADE = const SolveType._("downgrade");
+  final String _name;
+  const SolveType._(this._name);
+  String toString() => _name;
+}
+abstract class SolveFailure implements ApplicationException {
+  final String package;
+  final Iterable<Dependency> dependencies;
+  String get message => toString();
+  String get _message {
+    throw new UnimplementedError("Must override _message or toString().");
+  }
+  SolveFailure(this.package, Iterable<Dependency> dependencies)
+      : dependencies = dependencies != null ? dependencies : <Dependency>[];
+  String toString() {
+    if (dependencies.isEmpty) return _message;
+    var buffer = new StringBuffer();
+    buffer.write("$_message:");
+    var sorted = dependencies.toList();
+    sorted.sort((a, b) => a.depender.compareTo(b.depender));
+    for (var dep in sorted) {
+      buffer.writeln();
+      buffer.write("- ${log.bold(dep.depender)}");
+      if (!dep.isMagic) buffer.write(" ${dep.dependerVersion}");
+      buffer.write(" ${_describeDependency(dep.dep)}");
+    }
+    return buffer.toString();
+  }
+  String _describeDependency(PackageDep dep) =>
+      "depends on version ${dep.constraint}";
+}
+class BadSdkVersionException extends SolveFailure {
+  final String _message;
+  BadSdkVersionException(String package, String message)
+      : super(package, null),
+        _message = message;
+}
+class NoVersionException extends SolveFailure {
+  final VersionConstraint constraint;
+  final Version version;
+  NoVersionException(String package, this.version, this.constraint,
+      Iterable<Dependency> dependencies)
+      : super(package, dependencies);
+  String get _message {
+    if (version == null) {
+      return "Package $package has no versions that match $constraint derived "
+          "from";
+    }
+    return "Package $package $version does not match $constraint derived from";
+  }
+}
+class CouldNotUpgradeException extends SolveFailure {
+  final VersionConstraint constraint;
+  final Version best;
+  CouldNotUpgradeException(String package, this.constraint, this.best)
+      : super(package, null);
+  String get _message =>
+      "The latest version of $package, $best, does not match $constraint.";
+}
+class DisjointConstraintException extends SolveFailure {
+  DisjointConstraintException(String package, Iterable<Dependency> dependencies)
+      : super(package, dependencies);
+  String get _message => "Incompatible version constraints on $package";
+}
+class SourceMismatchException extends SolveFailure {
+  String get _message => "Incompatible dependencies on $package";
+  SourceMismatchException(String package, Iterable<Dependency> dependencies)
+      : super(package, dependencies);
+  String _describeDependency(PackageDep dep) =>
+      "depends on it from source ${dep.source}";
+}
+class UnknownSourceException extends SolveFailure {
+  UnknownSourceException(String package, Iterable<Dependency> dependencies)
+      : super(package, dependencies);
+  String toString() {
+    var dep = dependencies.single;
+    return 'Package ${dep.depender} depends on ${dep.dep.name} from unknown '
+        'source "${dep.dep.source}".';
+  }
+}
+class DescriptionMismatchException extends SolveFailure {
+  String get _message => "Incompatible dependencies on $package";
+  DescriptionMismatchException(String package,
+      Iterable<Dependency> dependencies)
+      : super(package, dependencies);
+  String _describeDependency(PackageDep dep) {
+    return "depends on it with description ${JSON.encode(dep.description)}";
+  }
+}
+class DependencyNotFoundException extends SolveFailure {
+  final PackageNotFoundException _innerException;
+  String get _message => "${_innerException.message}\nDepended on by";
+  DependencyNotFoundException(String package, this._innerException,
+      Iterable<Dependency> dependencies)
+      : super(package, dependencies);
+  String _describeDependency(PackageDep dep) => "";
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/source.dart b/sdk/lib/_internal/pub_generated/lib/src/source.dart
new file mode 100644
index 0000000..f5a33fe
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/source.dart
@@ -0,0 +1,45 @@
+library pub.source;
+import 'dart:async';
+import 'package.dart';
+import 'pubspec.dart';
+import 'system_cache.dart';
+import 'version.dart';
+abstract class Source {
+  String get name;
+  final bool hasMultipleVersions = false;
+  bool get isDefault => systemCache.sources.defaultSource == this;
+  SystemCache get systemCache {
+    assert(_systemCache != null);
+    return _systemCache;
+  }
+  SystemCache _systemCache;
+  void bind(SystemCache systemCache) {
+    assert(_systemCache == null);
+    this._systemCache = systemCache;
+  }
+  Future<List<Version>> getVersions(String name, description) {
+    var id = new PackageId(name, this.name, Version.none, description);
+    return describe(id).then((pubspec) => [pubspec.version]);
+  }
+  Future<Pubspec> describe(PackageId id) {
+    if (id.isRoot) throw new ArgumentError("Cannot describe the root package.");
+    if (id.source != name) {
+      throw new ArgumentError("Package $id does not use source $name.");
+    }
+    return doDescribe(id);
+  }
+  Future<Pubspec> doDescribe(PackageId id);
+  Future get(PackageId id, String symlink);
+  Future<String> getDirectory(PackageId id);
+  dynamic parseDescription(String containingPath, description,
+      {bool fromLockFile: false});
+  dynamic serializeDescription(String containingPath, description) {
+    return description;
+  }
+  String formatDescription(String containingPath, description) {
+    return description.toString();
+  }
+  bool descriptionsEqual(description1, description2);
+  Future<PackageId> resolveId(PackageId id) => new Future.value(id);
+  String toString() => name;
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/source/cached.dart b/sdk/lib/_internal/pub_generated/lib/src/source/cached.dart
new file mode 100644
index 0000000..e3823ea
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/source/cached.dart
@@ -0,0 +1,33 @@
+library pub.source.cached;
+import 'dart:async';
+import 'package:path/path.dart' as path;
+import '../io.dart';
+import '../package.dart';
+import '../pubspec.dart';
+import '../source.dart';
+import '../utils.dart';
+abstract class CachedSource extends Source {
+  String get systemCacheRoot => path.join(systemCache.rootDir, name);
+  Future<Pubspec> doDescribe(PackageId id) {
+    return getDirectory(id).then((packageDir) {
+      if (fileExists(path.join(packageDir, "pubspec.yaml"))) {
+        return new Pubspec.load(
+            packageDir,
+            systemCache.sources,
+            expectedName: id.name);
+      }
+      return describeUncached(id);
+    });
+  }
+  Future<Pubspec> describeUncached(PackageId id);
+  Future get(PackageId id, String symlink) {
+    return downloadToSystemCache(id).then((pkg) {
+      createPackageSymlink(id.name, pkg.dir, symlink);
+    });
+  }
+  Future<bool> isInSystemCache(PackageId id) =>
+      getDirectory(id).then(dirExists);
+  Future<Package> downloadToSystemCache(PackageId id);
+  List<Package> getCachedPackages();
+  Future<Pair<int, int>> repairCachedPackages();
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/source/git.dart b/sdk/lib/_internal/pub_generated/lib/src/source/git.dart
new file mode 100644
index 0000000..5a04d12
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/source/git.dart
@@ -0,0 +1,194 @@
+library pub.source.git;
+import 'dart:async';
+import 'package:path/path.dart' as path;
+import '../git.dart' as git;
+import '../io.dart';
+import '../log.dart' as log;
+import '../package.dart';
+import '../pubspec.dart';
+import '../utils.dart';
+import 'cached.dart';
+class GitSource extends CachedSource {
+  static String urlFromDescription(description) => description["url"];
+  final name = "git";
+  final _updatedRepos = new Set<String>();
+  Future<String> getPackageNameFromRepo(String repo) {
+    return withTempDir((tempDir) {
+      return _clone(repo, tempDir, shallow: true).then((_) {
+        var pubspec = new Pubspec.load(tempDir, systemCache.sources);
+        return pubspec.name;
+      });
+    });
+  }
+  Future<Pubspec> describeUncached(PackageId id) {
+    return downloadToSystemCache(id).then((package) => package.pubspec);
+  }
+  Future<Package> downloadToSystemCache(PackageId id) {
+    var revisionCachePath;
+    if (!git.isInstalled) {
+      fail(
+          "Cannot get ${id.name} from Git (${_getUrl(id)}).\n"
+              "Please ensure Git is correctly installed.");
+    }
+    ensureDir(path.join(systemCacheRoot, 'cache'));
+    return _ensureRevision(id).then((_) => getDirectory(id)).then((path) {
+      revisionCachePath = path;
+      if (entryExists(revisionCachePath)) return null;
+      return _clone(_repoCachePath(id), revisionCachePath, mirror: false);
+    }).then((_) {
+      var ref = _getEffectiveRef(id);
+      if (ref == 'HEAD') return null;
+      return _checkOut(revisionCachePath, ref);
+    }).then((_) {
+      return new Package.load(id.name, revisionCachePath, systemCache.sources);
+    });
+  }
+  Future<String> getDirectory(PackageId id) {
+    return _ensureRevision(id).then((rev) {
+      var revisionCacheName = '${id.name}-$rev';
+      return path.join(systemCacheRoot, revisionCacheName);
+    });
+  }
+  dynamic parseDescription(String containingPath, description,
+      {bool fromLockFile: false}) {
+    if (description is String) return description;
+    if (description is! Map || !description.containsKey('url')) {
+      throw new FormatException(
+          "The description must be a Git URL or a map " "with a 'url' key.");
+    }
+    var parsed = new Map.from(description);
+    parsed.remove('url');
+    parsed.remove('ref');
+    if (fromLockFile) parsed.remove('resolved-ref');
+    if (!parsed.isEmpty) {
+      var plural = parsed.length > 1;
+      var keys = parsed.keys.join(', ');
+      throw new FormatException("Invalid key${plural ? 's' : ''}: $keys.");
+    }
+    return description;
+  }
+  bool descriptionsEqual(description1, description2) {
+    return _getUrl(description1) == _getUrl(description2) &&
+        _getRef(description1) == _getRef(description2);
+  }
+  Future<PackageId> resolveId(PackageId id) {
+    return _ensureRevision(id).then((revision) {
+      var description = {
+        'url': _getUrl(id),
+        'ref': _getRef(id)
+      };
+      description['resolved-ref'] = revision;
+      return new PackageId(id.name, name, id.version, description);
+    });
+  }
+  List<Package> getCachedPackages() {
+    throw new UnimplementedError(
+        "The git source doesn't support listing its cached packages yet.");
+  }
+  Future<Pair<int, int>> repairCachedPackages() {
+    if (!dirExists(systemCacheRoot)) return new Future.value(new Pair(0, 0));
+    var successes = 0;
+    var failures = 0;
+    var packages = listDir(
+        systemCacheRoot).where(
+            (entry) =>
+                dirExists(
+                    path.join(
+                        entry,
+                        ".git"))).map(
+                            (packageDir) =>
+                                new Package.load(null, packageDir, systemCache.sources)).toList();
+    packages.sort(Package.orderByNameAndVersion);
+    return Future.wait(packages.map((package) {
+      log.message(
+          "Resetting Git repository for "
+              "${log.bold(package.name)} ${package.version}...");
+      return git.run(
+          ["clean", "-d", "--force", "-x"],
+          workingDir: package.dir).then((_) {
+        return git.run(["reset", "--hard", "HEAD"], workingDir: package.dir);
+      }).then((_) {
+        successes++;
+      }).catchError((error, stackTrace) {
+        failures++;
+        log.error(
+            "Failed to reset ${log.bold(package.name)} "
+                "${package.version}. Error:\n$error");
+        log.fine(stackTrace);
+        failures++;
+      }, test: (error) => error is git.GitException);
+    })).then((_) => new Pair(successes, failures));
+  }
+  Future<String> _ensureRevision(PackageId id) {
+    return syncFuture(() {
+      var path = _repoCachePath(id);
+      if (!entryExists(path)) {
+        return _clone(
+            _getUrl(id),
+            path,
+            mirror: true).then((_) => _revParse(id));
+      }
+      var description = id.description;
+      if (description is! Map || !description.containsKey('resolved-ref')) {
+        return _updateRepoCache(id).then((_) => _revParse(id));
+      }
+      return _revParse(id).catchError((error) {
+        if (error is! git.GitException) throw error;
+        return _updateRepoCache(id).then((_) => _revParse(id));
+      });
+    });
+  }
+  Future _updateRepoCache(PackageId id) {
+    var path = _repoCachePath(id);
+    if (_updatedRepos.contains(path)) return new Future.value();
+    return git.run(["fetch"], workingDir: path).then((_) {
+      _updatedRepos.add(path);
+    });
+  }
+  Future<String> _revParse(PackageId id) {
+    return git.run(
+        ["rev-parse", _getEffectiveRef(id)],
+        workingDir: _repoCachePath(id)).then((result) => result.first);
+  }
+  Future _clone(String from, String to, {bool mirror: false, bool shallow:
+      false}) {
+    return syncFuture(() {
+      ensureDir(to);
+      var args = ["clone", from, to];
+      if (mirror) args.insert(1, "--mirror");
+      if (shallow) args.insertAll(1, ["--depth", "1"]);
+      return git.run(args);
+    }).then((result) => null);
+  }
+  Future _checkOut(String repoPath, String ref) {
+    return git.run(
+        ["checkout", ref],
+        workingDir: repoPath).then((result) => null);
+  }
+  String _repoCachePath(PackageId id) {
+    var repoCacheName = '${id.name}-${sha1(_getUrl(id))}';
+    return path.join(systemCacheRoot, 'cache', repoCacheName);
+  }
+  String _getUrl(description) {
+    description = _getDescription(description);
+    if (description is String) return description;
+    return description['url'];
+  }
+  String _getEffectiveRef(description) {
+    description = _getDescription(description);
+    if (description is Map && description.containsKey('resolved-ref')) {
+      return description['resolved-ref'];
+    }
+    var ref = _getRef(description);
+    return ref == null ? 'HEAD' : ref;
+  }
+  String _getRef(description) {
+    description = _getDescription(description);
+    if (description is String) return null;
+    return description['ref'];
+  }
+  _getDescription(description) {
+    if (description is PackageId) return description.description;
+    return description;
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/source/hosted.dart b/sdk/lib/_internal/pub_generated/lib/src/source/hosted.dart
new file mode 100644
index 0000000..265b673
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/source/hosted.dart
@@ -0,0 +1,238 @@
+library pub.source.hosted;
+import 'dart:async';
+import 'dart:io' as io;
+import "dart:convert";
+import 'package:http/http.dart' as http;
+import 'package:path/path.dart' as path;
+import '../exceptions.dart';
+import '../http.dart';
+import '../io.dart';
+import '../log.dart' as log;
+import '../package.dart';
+import '../pubspec.dart';
+import '../utils.dart';
+import '../version.dart';
+import 'cached.dart';
+class HostedSource extends CachedSource {
+  final name = "hosted";
+  final hasMultipleVersions = true;
+  static String get defaultUrl {
+    var url = io.Platform.environment["PUB_HOSTED_URL"];
+    if (url != null) return url;
+    return "https://pub.dartlang.org";
+  }
+  Future<List<Version>> getVersions(String name, description) {
+    var url =
+        _makeUrl(description, (server, package) => "$server/api/packages/$package");
+    log.io("Get versions from $url.");
+    return httpClient.read(url, headers: PUB_API_HEADERS).then((body) {
+      var doc = JSON.decode(body);
+      return doc['versions'].map(
+          (version) => new Version.parse(version['version'])).toList();
+    }).catchError((ex, stackTrace) {
+      var parsed = _parseDescription(description);
+      _throwFriendlyError(ex, stackTrace, parsed.first, parsed.last);
+    });
+  }
+  Future<Pubspec> describeUncached(PackageId id) {
+    var url = _makeVersionUrl(
+        id,
+        (server, package, version) =>
+            "$server/api/packages/$package/versions/$version");
+    log.io("Describe package at $url.");
+    return httpClient.read(url, headers: PUB_API_HEADERS).then((version) {
+      version = JSON.decode(version);
+      return new Pubspec.fromMap(
+          version['pubspec'],
+          systemCache.sources,
+          expectedName: id.name,
+          location: url);
+    }).catchError((ex, stackTrace) {
+      var parsed = _parseDescription(id.description);
+      _throwFriendlyError(ex, stackTrace, id.name, parsed.last);
+    });
+  }
+  Future<Package> downloadToSystemCache(PackageId id) {
+    return isInSystemCache(id).then((inCache) {
+      if (inCache) return true;
+      var packageDir = _getDirectory(id);
+      ensureDir(path.dirname(packageDir));
+      var parsed = _parseDescription(id.description);
+      return _download(parsed.last, parsed.first, id.version, packageDir);
+    }).then((found) {
+      if (!found) fail('Package $id not found.');
+      return new Package.load(id.name, _getDirectory(id), systemCache.sources);
+    });
+  }
+  Future<String> getDirectory(PackageId id) =>
+      new Future.value(_getDirectory(id));
+  String _getDirectory(PackageId id) {
+    var parsed = _parseDescription(id.description);
+    var dir = _urlToDirectory(parsed.last);
+    return path.join(systemCacheRoot, dir, "${parsed.first}-${id.version}");
+  }
+  String packageName(description) => _parseDescription(description).first;
+  bool descriptionsEqual(description1, description2) =>
+      _parseDescription(description1) == _parseDescription(description2);
+  dynamic parseDescription(String containingPath, description,
+      {bool fromLockFile: false}) {
+    _parseDescription(description);
+    return description;
+  }
+  Future<Pair<int, int>> repairCachedPackages() {
+    if (!dirExists(systemCacheRoot)) return new Future.value(new Pair(0, 0));
+    var successes = 0;
+    var failures = 0;
+    return Future.wait(listDir(systemCacheRoot).map((serverDir) {
+      var url = _directoryToUrl(path.basename(serverDir));
+      var packages = _getCachedPackagesInDirectory(path.basename(serverDir));
+      packages.sort(Package.orderByNameAndVersion);
+      return Future.wait(packages.map((package) {
+        return _download(
+            url,
+            package.name,
+            package.version,
+            package.dir).then((_) {
+          successes++;
+        }).catchError((error, stackTrace) {
+          failures++;
+          var message =
+              "Failed to repair ${log.bold(package.name)} " "${package.version}";
+          if (url != defaultUrl) message += " from $url";
+          log.error("$message. Error:\n$error");
+          log.fine(stackTrace);
+        });
+      }));
+    })).then((_) => new Pair(successes, failures));
+  }
+  List<Package> getCachedPackages() {
+    return _getCachedPackagesInDirectory(_urlToDirectory(defaultUrl));
+  }
+  List<Package> _getCachedPackagesInDirectory(String dir) {
+    var cacheDir = path.join(systemCacheRoot, dir);
+    if (!dirExists(cacheDir)) return [];
+    return listDir(
+        cacheDir).map(
+            (entry) => new Package.load(null, entry, systemCache.sources)).toList();
+  }
+  Future<bool> _download(String server, String package, Version version,
+      String destPath) {
+    return syncFuture(() {
+      var url = Uri.parse("$server/packages/$package/versions/$version.tar.gz");
+      log.io("Get package from $url.");
+      log.message('Downloading ${log.bold(package)} ${version}...');
+      var tempDir = systemCache.createTempDir();
+      return httpClient.send(
+          new http.Request(
+              "GET",
+              url)).then((response) => response.stream).then((stream) {
+        return timeout(
+            extractTarGz(stream, tempDir),
+            HTTP_TIMEOUT,
+            url,
+            'downloading $url');
+      }).then((_) {
+        if (dirExists(destPath)) deleteEntry(destPath);
+        renameDir(tempDir, destPath);
+        return true;
+      });
+    });
+  }
+  void _throwFriendlyError(error, StackTrace stackTrace, String package,
+      String url) {
+    if (error is PubHttpException && error.response.statusCode == 404) {
+      throw new PackageNotFoundException(
+          "Could not find package $package at $url.",
+          error,
+          stackTrace);
+    }
+    if (error is TimeoutException) {
+      fail(
+          "Timed out trying to find package $package at $url.",
+          error,
+          stackTrace);
+    }
+    if (error is io.SocketException) {
+      fail(
+          "Got socket error trying to find package $package at $url.",
+          error,
+          stackTrace);
+    }
+    throw error;
+  }
+}
+class OfflineHostedSource extends HostedSource {
+  Future<List<Version>> getVersions(String name, description) {
+    return newFuture(() {
+      var parsed = _parseDescription(description);
+      var server = parsed.last;
+      log.io(
+          "Finding versions of $name in " "$systemCacheRoot/${_urlToDirectory(server)}");
+      return _getCachedPackagesInDirectory(
+          _urlToDirectory(
+              server)).where(
+                  (package) => package.name == name).map((package) => package.version).toList();
+    }).then((versions) {
+      if (versions.isEmpty) fail("Could not find package $name in cache.");
+      return versions;
+    });
+  }
+  Future<bool> _download(String server, String package, Version version,
+      String destPath) {
+    throw new UnsupportedError("Cannot download packages when offline.");
+  }
+  Future<Pubspec> doDescribeUncached(PackageId id) {
+    throw new UnsupportedError("Cannot describe packages when offline.");
+  }
+}
+String _urlToDirectory(String url) {
+  url = url.replaceAllMapped(
+      new RegExp(r"^https?://(127\.0\.0\.1|\[::1\])?"),
+      (match) => match[1] == null ? '' : 'localhost');
+  return replace(
+      url,
+      new RegExp(r'[<>:"\\/|?*%]'),
+      (match) => '%${match[0].codeUnitAt(0)}');
+}
+String _directoryToUrl(String url) {
+  var chars = '<>:"\\/|?*%';
+  for (var i = 0; i < chars.length; i++) {
+    var c = chars.substring(i, i + 1);
+    url = url.replaceAll("%${c.codeUnitAt(0)}", c);
+  }
+  var scheme = "https";
+  if (isLoopback(url.replaceAll(new RegExp(":.*"), ""))) scheme = "http";
+  return "$scheme://$url";
+}
+Uri _makeUrl(description, String pattern(String server, String package)) {
+  var parsed = _parseDescription(description);
+  var server = parsed.last;
+  var package = Uri.encodeComponent(parsed.first);
+  return Uri.parse(pattern(server, package));
+}
+Uri _makeVersionUrl(PackageId id, String pattern(String server, String package,
+    String version)) {
+  var parsed = _parseDescription(id.description);
+  var server = parsed.last;
+  var package = Uri.encodeComponent(parsed.first);
+  var version = Uri.encodeComponent(id.version.toString());
+  return Uri.parse(pattern(server, package, version));
+}
+Pair<String, String> _parseDescription(description) {
+  if (description is String) {
+    return new Pair<String, String>(description, HostedSource.defaultUrl);
+  }
+  if (description is! Map) {
+    throw new FormatException("The description must be a package name or map.");
+  }
+  if (!description.containsKey("name")) {
+    throw new FormatException("The description map must contain a 'name' key.");
+  }
+  var name = description["name"];
+  if (name is! String) {
+    throw new FormatException("The 'name' key must have a string value.");
+  }
+  var url = description["url"];
+  if (url == null) url = HostedSource.defaultUrl;
+  return new Pair<String, String>(name, url);
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/source/path.dart b/sdk/lib/_internal/pub_generated/lib/src/source/path.dart
new file mode 100644
index 0000000..017b8d4
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/source/path.dart
@@ -0,0 +1,98 @@
+library pub.source.path;
+import 'dart:async';
+import 'package:path/path.dart' as p;
+import '../exceptions.dart';
+import '../io.dart';
+import '../package.dart';
+import '../pubspec.dart';
+import '../source.dart';
+import '../utils.dart';
+class PathSource extends Source {
+  static describePath(String path) {
+    return {
+      "path": path,
+      "relative": p.isRelative(path)
+    };
+  }
+  static String pathFromDescription(description) => description["path"];
+  final name = 'path';
+  Future<Pubspec> doDescribe(PackageId id) {
+    return syncFuture(() {
+      var dir = _validatePath(id.name, id.description);
+      return new Pubspec.load(dir, systemCache.sources, expectedName: id.name);
+    });
+  }
+  bool descriptionsEqual(description1, description2) {
+    var path1 = canonicalize(description1["path"]);
+    var path2 = canonicalize(description2["path"]);
+    return path1 == path2;
+  }
+  Future get(PackageId id, String symlink) {
+    return syncFuture(() {
+      var dir = _validatePath(id.name, id.description);
+      createPackageSymlink(
+          id.name,
+          dir,
+          symlink,
+          relative: id.description["relative"]);
+    });
+  }
+  Future<String> getDirectory(PackageId id) =>
+      newFuture(() => _validatePath(id.name, id.description));
+  dynamic parseDescription(String containingPath, description,
+      {bool fromLockFile: false}) {
+    if (fromLockFile) {
+      if (description is! Map) {
+        throw new FormatException("The description must be a map.");
+      }
+      if (description["path"] is! String) {
+        throw new FormatException(
+            "The 'path' field of the description must " "be a string.");
+      }
+      if (description["relative"] is! bool) {
+        throw new FormatException(
+            "The 'relative' field of the description " "must be a boolean.");
+      }
+      return description;
+    }
+    if (description is! String) {
+      throw new FormatException("The description must be a path string.");
+    }
+    var isRelative = p.isRelative(description);
+    if (p.isRelative(description)) {
+      assert(containingPath != null);
+      description = p.normalize(p.join(p.dirname(containingPath), description));
+    }
+    return {
+      "path": description,
+      "relative": isRelative
+    };
+  }
+  dynamic serializeDescription(String containingPath, description) {
+    if (description["relative"]) {
+      return {
+        "path": p.relative(description['path'], from: containingPath),
+        "relative": true
+      };
+    }
+    return description;
+  }
+  String formatDescription(String containingPath, description) {
+    var sourcePath = description["path"];
+    if (description["relative"]) {
+      sourcePath = p.relative(description['path'], from: containingPath);
+    }
+    return sourcePath;
+  }
+  String _validatePath(String name, description) {
+    var dir = description["path"];
+    if (dirExists(dir)) return dir;
+    if (fileExists(dir)) {
+      fail(
+          'Path dependency for package $name must refer to a directory, '
+              'not a file. Was "$dir".');
+    }
+    throw new PackageNotFoundException(
+        'Could not find package $name at "$dir".');
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/source/unknown.dart b/sdk/lib/_internal/pub_generated/lib/src/source/unknown.dart
new file mode 100644
index 0000000..3bcfbac
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/source/unknown.dart
@@ -0,0 +1,24 @@
+library pub.source.unknown;
+import 'dart:async';
+import '../package.dart';
+import '../pubspec.dart';
+import '../source.dart';
+class UnknownSource extends Source {
+  final String name;
+  UnknownSource(this.name);
+  bool operator ==(other) => other is UnknownSource && other.name == name;
+  int get hashCode => name.hashCode;
+  Future<Pubspec> doDescribe(PackageId id) =>
+      throw new UnsupportedError(
+          "Cannot describe a package from unknown source '$name'.");
+  Future get(PackageId id, String symlink) =>
+      throw new UnsupportedError("Cannot get an unknown source '$name'.");
+  Future<String> getDirectory(PackageId id) =>
+      throw new UnsupportedError(
+          "Cannot find a package from an unknown source '$name'.");
+  bool descriptionsEqual(description1, description2) =>
+      description1 == description2;
+  dynamic parseDescription(String containingPath, description,
+      {bool fromLockFile: false}) =>
+      description;
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/source_registry.dart b/sdk/lib/_internal/pub_generated/lib/src/source_registry.dart
new file mode 100644
index 0000000..220f859
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/source_registry.dart
@@ -0,0 +1,45 @@
+library pub.source_registry;
+import 'dart:collection';
+import 'package.dart';
+import 'source.dart';
+import 'source/unknown.dart';
+class SourceRegistry extends IterableBase<Source> {
+  final _sources = new Map<String, Source>();
+  Source _default;
+  Source get defaultSource => _default;
+  Iterator<Source> get iterator {
+    var sources = _sources.values.toList();
+    sources.sort((a, b) => a.name.compareTo(b.name));
+    return sources.iterator;
+  }
+  bool idsEqual(PackageId id1, PackageId id2) {
+    if (id1 != id2) return false;
+    if (id1 == null && id2 == null) return true;
+    return idDescriptionsEqual(id1, id2);
+  }
+  bool idDescriptionsEqual(PackageId id1, PackageId id2) {
+    if (id1.source != id2.source) return false;
+    return this[id1.source].descriptionsEqual(id1.description, id2.description);
+  }
+  void setDefault(String name) {
+    if (!_sources.containsKey(name)) {
+      throw new StateError('Default source $name is not in the registry');
+    }
+    _default = _sources[name];
+  }
+  void register(Source source) {
+    if (_sources.containsKey(source.name)) {
+      throw new StateError(
+          'Source registry already has a source named ' '${source.name}');
+    }
+    _sources[source.name] = source;
+  }
+  Source operator [](String name) {
+    if (name == null) {
+      if (defaultSource != null) return defaultSource;
+      throw new StateError('No default source has been registered');
+    }
+    if (_sources.containsKey(name)) return _sources[name];
+    return new UnknownSource(name);
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/system_cache.dart b/sdk/lib/_internal/pub_generated/lib/src/system_cache.dart
new file mode 100644
index 0000000..d558ad0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/system_cache.dart
@@ -0,0 +1,50 @@
+library pub.system_cache;
+import 'dart:async';
+import 'package:path/path.dart' as path;
+import 'io.dart';
+import 'io.dart' as io show createTempDir;
+import 'log.dart' as log;
+import 'package.dart';
+import 'source/cached.dart';
+import 'source/git.dart';
+import 'source/hosted.dart';
+import 'source/path.dart';
+import 'source.dart';
+import 'source_registry.dart';
+class SystemCache {
+  final String rootDir;
+  String get tempDir => path.join(rootDir, '_temp');
+  final sources = new SourceRegistry();
+  SystemCache(this.rootDir);
+  factory SystemCache.withSources(String rootDir, {bool isOffline: false}) {
+    var cache = new SystemCache(rootDir);
+    cache.register(new GitSource());
+    if (isOffline) {
+      cache.register(new OfflineHostedSource());
+    } else {
+      cache.register(new HostedSource());
+    }
+    cache.register(new PathSource());
+    cache.sources.setDefault('hosted');
+    return cache;
+  }
+  void register(Source source) {
+    source.bind(this);
+    sources.register(source);
+  }
+  Future<bool> contains(PackageId id) {
+    var source = sources[id.source];
+    if (source is! CachedSource) {
+      throw new ArgumentError("Package $id is not cacheable.");
+    }
+    return source.isInSystemCache(id);
+  }
+  String createTempDir() {
+    var temp = ensureDir(tempDir);
+    return io.createTempDir(temp, 'dir');
+  }
+  void deleteTempDir() {
+    log.fine('Clean up system cache temp directory $tempDir.');
+    if (dirExists(tempDir)) deleteEntry(tempDir);
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/transcript.dart b/sdk/lib/_internal/pub_generated/lib/src/transcript.dart
new file mode 100644
index 0000000..38702e1
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/transcript.dart
@@ -0,0 +1,30 @@
+library pub.transcript;
+import 'dart:collection';
+class Transcript<T> {
+  final int max;
+  int get discarded => _discarded;
+  int _discarded = 0;
+  final _oldest = new List<T>();
+  final _newest = new Queue<T>();
+  Transcript(this.max);
+  void add(T entry) {
+    if (discarded > 0) {
+      _newest.removeFirst();
+      _discarded++;
+    } else if (_newest.length == max) {
+      while (_newest.length > max ~/ 2) {
+        _oldest.add(_newest.removeFirst());
+      }
+      _newest.removeFirst();
+      _discarded++;
+    }
+    _newest.add(entry);
+  }
+  void forEach(void onEntry(T entry), [void onGap(int)]) {
+    if (_oldest.isNotEmpty) {
+      _oldest.forEach(onEntry);
+      if (onGap != null) onGap(discarded);
+    }
+    _newest.forEach(onEntry);
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/utils.dart b/sdk/lib/_internal/pub_generated/lib/src/utils.dart
new file mode 100644
index 0000000..dcaf044
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/utils.dart
@@ -0,0 +1,537 @@
+library pub.utils;
+import 'dart:async';
+import "dart:convert";
+import 'dart:io';
+@MirrorsUsed(targets: const ['pub.io', 'test_pub'])
+import 'dart:mirrors';
+import "package:crypto/crypto.dart";
+import 'package:path/path.dart' as path;
+import "package:stack_trace/stack_trace.dart";
+import 'exceptions.dart';
+import 'log.dart' as log;
+export '../../asset/dart/utils.dart';
+class Pair<E, F> {
+  E first;
+  F last;
+  Pair(this.first, this.last);
+  String toString() => '($first, $last)';
+  bool operator ==(other) {
+    if (other is! Pair) return false;
+    return other.first == first && other.last == last;
+  }
+  int get hashCode => first.hashCode ^ last.hashCode;
+}
+class FutureGroup<T> {
+  int _pending = 0;
+  Completer<List<T>> _completer = new Completer<List<T>>();
+  final List<Future<T>> futures = <Future<T>>[];
+  bool completed = false;
+  final List<T> _values = <T>[];
+  Future<T> add(Future<T> task) {
+    if (completed) {
+      throw new StateError("The FutureGroup has already completed.");
+    }
+    _pending++;
+    futures.add(task.then((value) {
+      if (completed) return;
+      _pending--;
+      _values.add(value);
+      if (_pending <= 0) {
+        completed = true;
+        _completer.complete(_values);
+      }
+    }).catchError((e, stackTrace) {
+      if (completed) return;
+      completed = true;
+      _completer.completeError(e, stackTrace);
+    }));
+    return task;
+  }
+  Future<List> get future => _completer.future;
+}
+Future newFuture(callback()) => new Future.value().then((_) => callback());
+Future syncFuture(callback()) => Chain.track(new Future.sync(callback));
+Future captureErrors(Future callback(), {bool captureStackChains: false}) {
+  var completer = new Completer();
+  var wrappedCallback = () {
+    new Future.sync(
+        callback).then(completer.complete).catchError((e, stackTrace) {
+      if (stackTrace != null) {
+        stackTrace = new Chain.forTrace(stackTrace);
+      } else {
+        stackTrace = new Chain([]);
+      }
+      completer.completeError(e, stackTrace);
+    });
+  };
+  if (captureStackChains) {
+    Chain.capture(wrappedCallback, onError: completer.completeError);
+  } else {
+    runZoned(wrappedCallback, onError: (e, stackTrace) {
+      if (stackTrace == null) {
+        stackTrace = new Chain.current();
+      } else {
+        stackTrace = new Chain([new Trace.from(stackTrace)]);
+      }
+      completer.completeError(e, stackTrace);
+    });
+  }
+  return completer.future;
+}
+Future waitAndPrintErrors(Iterable<Future> futures) {
+  return Future.wait(futures.map((future) {
+    return future.catchError((error, stackTrace) {
+      log.exception(error, stackTrace);
+      throw error;
+    });
+  })).catchError((error, stackTrace) {
+    throw new SilentException(error, stackTrace);
+  });
+}
+StreamTransformer onDoneTransformer(void onDone()) {
+  return new StreamTransformer.fromHandlers(handleDone: (sink) {
+    onDone();
+    sink.close();
+  });
+}
+String padRight(String source, int length) {
+  final result = new StringBuffer();
+  result.write(source);
+  while (result.length < length) {
+    result.write(' ');
+  }
+  return result.toString();
+}
+String toSentence(Iterable iter) {
+  if (iter.length == 1) return iter.first.toString();
+  return iter.take(iter.length - 1).join(", ") + " and ${iter.last}";
+}
+String pluralize(String name, int number, {String plural}) {
+  if (number == 1) return name;
+  if (plural != null) return plural;
+  return '${name}s';
+}
+String quoteRegExp(String string) {
+  for (var metacharacter in r"\^$.*+?()[]{}|".split("")) {
+    string = string.replaceAll(metacharacter, "\\$metacharacter");
+  }
+  return string;
+}
+Uri baseUrlForAddress(InternetAddress address, int port) {
+  if (address.isLoopback) {
+    return new Uri(scheme: "http", host: "localhost", port: port);
+  }
+  if (address.type == InternetAddressType.IP_V6) {
+    return new Uri(scheme: "http", host: "[${address.address}]", port: port);
+  }
+  return new Uri(scheme: "http", host: address.address, port: port);
+}
+bool isLoopback(String host) {
+  if (host == 'localhost') return true;
+  if (host.startsWith("[") && host.endsWith("]")) {
+    host = host.substring(1, host.length - 1);
+  }
+  try {
+    return new InternetAddress(host).isLoopback;
+  } on ArgumentError catch (_) {
+    return false;
+  }
+}
+List flatten(Iterable nested) {
+  var result = [];
+  helper(list) {
+    for (var element in list) {
+      if (element is List) {
+        helper(element);
+      } else {
+        result.add(element);
+      }
+    }
+  }
+  helper(nested);
+  return result;
+}
+Set setMinus(Iterable minuend, Iterable subtrahend) {
+  var minuendSet = new Set.from(minuend);
+  minuendSet.removeAll(subtrahend);
+  return minuendSet;
+}
+List ordered(Iterable<Comparable> iter) {
+  var list = iter.toList();
+  list.sort();
+  return list;
+}
+minBy(Iterable iter, Comparable f(element)) {
+  var min = null;
+  var minComparable = null;
+  for (var element in iter) {
+    var comparable = f(element);
+    if (minComparable == null || comparable.compareTo(minComparable) < 0) {
+      min = element;
+      minComparable = comparable;
+    }
+  }
+  return min;
+}
+Iterable<Pair> pairs(Iterable iter) {
+  var previous = iter.first;
+  return iter.skip(1).map((element) {
+    var oldPrevious = previous;
+    previous = element;
+    return new Pair(oldPrevious, element);
+  });
+}
+Map mapMap(Map map, {key(key, value), value(key, value)}) {
+  if (key == null) key = (key, _) => key;
+  if (value == null) value = (_, value) => value;
+  var result = {};
+  map.forEach((mapKey, mapValue) {
+    result[key(mapKey, mapValue)] = value(mapKey, mapValue);
+  });
+  return result;
+}
+Future<Map> mapFromIterableAsync(Iterable iter, {key(element), value(element)})
+    {
+  if (key == null) key = (element) => element;
+  if (value == null) value = (element) => element;
+  var map = new Map();
+  return Future.wait(iter.map((element) {
+    return Future.wait(
+        [
+            syncFuture(() => key(element)),
+            syncFuture(() => value(element))]).then((results) {
+      map[results[0]] = results[1];
+    });
+  })).then((_) => map);
+}
+Map<dynamic, Set> transitiveClosure(Map<dynamic, Iterable> graph) {
+  var result = {};
+  graph.forEach((vertex, edges) {
+    result[vertex] = new Set.from(edges)..add(vertex);
+  });
+  for (var vertex1 in graph.keys) {
+    for (var vertex2 in graph.keys) {
+      for (var vertex3 in graph.keys) {
+        if (result[vertex2].contains(vertex1) &&
+            result[vertex1].contains(vertex3)) {
+          result[vertex2].add(vertex3);
+        }
+      }
+    }
+  }
+  return result;
+}
+Set<String> createFileFilter(Iterable<String> files) {
+  return files.expand((file) {
+    var result = ["/$file"];
+    if (Platform.operatingSystem == 'windows') result.add("\\$file");
+    return result;
+  }).toSet();
+}
+Set<String> createDirectoryFilter(Iterable<String> dirs) {
+  return dirs.expand((dir) {
+    var result = ["/$dir/"];
+    if (Platform.operatingSystem == 'windows') {
+      result
+          ..add("/$dir\\")
+          ..add("\\$dir/")
+          ..add("\\$dir\\");
+    }
+    return result;
+  }).toSet();
+}
+maxAll(Iterable iter, [int compare(element1, element2)]) {
+  if (compare == null) compare = Comparable.compare;
+  return iter.reduce(
+      (max, element) => compare(element, max) > 0 ? element : max);
+}
+minAll(Iterable iter, [int compare(element1, element2)]) {
+  if (compare == null) compare = Comparable.compare;
+  return iter.reduce(
+      (max, element) => compare(element, max) < 0 ? element : max);
+}
+String replace(String source, Pattern matcher, String fn(Match)) {
+  var buffer = new StringBuffer();
+  var start = 0;
+  for (var match in matcher.allMatches(source)) {
+    buffer.write(source.substring(start, match.start));
+    start = match.end;
+    buffer.write(fn(match));
+  }
+  buffer.write(source.substring(start));
+  return buffer.toString();
+}
+bool endsWithPattern(String str, Pattern matcher) {
+  for (var match in matcher.allMatches(str)) {
+    if (match.end == str.length) return true;
+  }
+  return false;
+}
+String sha1(String source) {
+  var sha = new SHA1();
+  sha.add(source.codeUnits);
+  return CryptoUtils.bytesToHex(sha.close());
+}
+void chainToCompleter(Future future, Completer completer) {
+  future.then(completer.complete, onError: completer.completeError);
+}
+Future<Stream> validateStream(Stream stream) {
+  var completer = new Completer<Stream>();
+  var controller = new StreamController(sync: true);
+  StreamSubscription subscription;
+  subscription = stream.listen((value) {
+    if (!completer.isCompleted) completer.complete(controller.stream);
+    controller.add(value);
+  }, onError: (error, [stackTrace]) {
+    if (completer.isCompleted) {
+      controller.addError(error, stackTrace);
+      return;
+    }
+    completer.completeError(error, stackTrace);
+    subscription.cancel();
+  }, onDone: () {
+    if (!completer.isCompleted) completer.complete(controller.stream);
+    controller.close();
+  });
+  return completer.future;
+}
+Future streamFirst(Stream stream) {
+  var completer = new Completer();
+  var subscription;
+  subscription = stream.listen((value) {
+    subscription.cancel();
+    completer.complete(value);
+  }, onError: (e, [stackTrace]) {
+    completer.completeError(e, stackTrace);
+  }, onDone: () {
+    completer.completeError(new StateError("No elements"), new Chain.current());
+  }, cancelOnError: true);
+  return completer.future;
+}
+Pair<Stream, StreamSubscription> streamWithSubscription(Stream stream) {
+  var controller = stream.isBroadcast ?
+      new StreamController.broadcast(sync: true) :
+      new StreamController(sync: true);
+  var subscription = stream.listen(
+      controller.add,
+      onError: controller.addError,
+      onDone: controller.close);
+  return new Pair<Stream, StreamSubscription>(controller.stream, subscription);
+}
+Pair<Stream, Stream> tee(Stream stream) {
+  var controller1 = new StreamController(sync: true);
+  var controller2 = new StreamController(sync: true);
+  stream.listen((value) {
+    controller1.add(value);
+    controller2.add(value);
+  }, onError: (error, [stackTrace]) {
+    controller1.addError(error, stackTrace);
+    controller2.addError(error, stackTrace);
+  }, onDone: () {
+    controller1.close();
+    controller2.close();
+  });
+  return new Pair<Stream, Stream>(controller1.stream, controller2.stream);
+}
+Stream mergeStreams(Stream stream1, Stream stream2) {
+  var doneCount = 0;
+  var controller = new StreamController(sync: true);
+  for (var stream in [stream1, stream2]) {
+    stream.listen(controller.add, onError: controller.addError, onDone: () {
+      doneCount++;
+      if (doneCount == 2) controller.close();
+    });
+  }
+  return controller.stream;
+}
+final _trailingCR = new RegExp(r"\r$");
+List<String> splitLines(String text) =>
+    text.split("\n").map((line) => line.replaceFirst(_trailingCR, "")).toList();
+Stream<String> streamToLines(Stream<String> stream) {
+  var buffer = new StringBuffer();
+  return stream.transform(
+      new StreamTransformer.fromHandlers(handleData: (chunk, sink) {
+    var lines = splitLines(chunk);
+    var leftover = lines.removeLast();
+    for (var line in lines) {
+      if (!buffer.isEmpty) {
+        buffer.write(line);
+        line = buffer.toString();
+        buffer = new StringBuffer();
+      }
+      sink.add(line);
+    }
+    buffer.write(leftover);
+  }, handleDone: (sink) {
+    if (!buffer.isEmpty) sink.add(buffer.toString());
+    sink.close();
+  }));
+}
+Future<Iterable> futureWhere(Iterable iter, test(value)) {
+  return Future.wait(iter.map((e) {
+    var result = test(e);
+    if (result is! Future) result = new Future.value(result);
+    return result.then((result) => new Pair(e, result));
+  })).then(
+      (pairs) =>
+          pairs.where(
+              (pair) => pair.last)).then((pairs) => pairs.map((pair) => pair.first));
+}
+List<String> split1(String toSplit, String pattern) {
+  if (toSplit.isEmpty) return <String>[];
+  var index = toSplit.indexOf(pattern);
+  if (index == -1) return [toSplit];
+  return [
+      toSplit.substring(0, index),
+      toSplit.substring(index + pattern.length)];
+}
+Uri addQueryParameters(Uri url, Map<String, String> parameters) {
+  var queryMap = queryToMap(url.query);
+  queryMap.addAll(parameters);
+  return url.resolve("?${mapToQuery(queryMap)}");
+}
+Map<String, String> queryToMap(String queryList) {
+  var map = {};
+  for (var pair in queryList.split("&")) {
+    var split = split1(pair, "=");
+    if (split.isEmpty) continue;
+    var key = urlDecode(split[0]);
+    var value = split.length > 1 ? urlDecode(split[1]) : "";
+    map[key] = value;
+  }
+  return map;
+}
+String mapToQuery(Map<String, String> map) {
+  var pairs = <List<String>>[];
+  map.forEach((key, value) {
+    key = Uri.encodeQueryComponent(key);
+    value =
+        (value == null || value.isEmpty) ? null : Uri.encodeQueryComponent(value);
+    pairs.add([key, value]);
+  });
+  return pairs.map((pair) {
+    if (pair[1] == null) return pair[0];
+    return "${pair[0]}=${pair[1]}";
+  }).join("&");
+}
+Set unionAll(Iterable<Set> sets) =>
+    sets.fold(new Set(), (union, set) => union.union(set));
+bool urisEqual(Uri uri1, Uri uri2) =>
+    canonicalizeUri(uri1) == canonicalizeUri(uri2);
+Uri canonicalizeUri(Uri uri) {
+  return uri;
+}
+String nicePath(String inputPath) {
+  var relative = path.relative(inputPath);
+  var split = path.split(relative);
+  if (split.length > 1 && split[0] == '..' && split[1] == '..') {
+    return path.absolute(inputPath);
+  }
+  return relative;
+}
+String niceDuration(Duration duration) {
+  var result = duration.inMinutes > 0 ? "${duration.inMinutes}:" : "";
+  var s = duration.inSeconds % 59;
+  var ms = (duration.inMilliseconds % 1000) ~/ 100;
+  return result + "$s.${ms}s";
+}
+String urlDecode(String encoded) =>
+    Uri.decodeComponent(encoded.replaceAll("+", " "));
+Future awaitObject(object) {
+  if (object is Future) return object.then(awaitObject);
+  if (object is Iterable) {
+    return Future.wait(object.map(awaitObject).toList());
+  }
+  if (object is! Map) return new Future.value(object);
+  var pairs = <Future<Pair>>[];
+  object.forEach((key, value) {
+    pairs.add(awaitObject(value).then((resolved) => new Pair(key, resolved)));
+  });
+  return Future.wait(pairs).then((resolvedPairs) {
+    var map = {};
+    for (var pair in resolvedPairs) {
+      map[pair.first] = pair.last;
+    }
+    return map;
+  });
+}
+String libraryPath(String libraryName) {
+  var lib = currentMirrorSystem().findLibrary(new Symbol(libraryName));
+  return path.fromUri(lib.uri);
+}
+bool get canUseSpecialChars =>
+    !runningAsTest &&
+        Platform.operatingSystem != 'windows' &&
+        stdioType(stdout) == StdioType.TERMINAL;
+String getSpecial(String special, [String onWindows = '']) =>
+    canUseSpecialChars ? special : onWindows;
+String prefixLines(String text, {String prefix: '| ', String firstPrefix}) {
+  var lines = text.split('\n');
+  if (firstPrefix == null) {
+    return lines.map((line) => '$prefix$line').join('\n');
+  }
+  var firstLine = "$firstPrefix${lines.first}";
+  lines = lines.skip(1).map((line) => '$prefix$line').toList();
+  lines.insert(0, firstLine);
+  return lines.join('\n');
+}
+bool runningAsTest = Platform.environment.containsKey('_PUB_TESTING');
+bool get isAprilFools {
+  if (runningAsTest) return false;
+  var date = new DateTime.now();
+  return date.month == 4 && date.day == 1;
+}
+Future resetStack(fn()) {
+  var completer = new Completer();
+  newFuture(fn).then((val) {
+    scheduleMicrotask(() => completer.complete(val));
+  }).catchError((err, stackTrace) {
+    scheduleMicrotask(() => completer.completeError(err, stackTrace));
+  });
+  return completer.future;
+}
+final _unquotableYamlString = new RegExp(r"^[a-zA-Z_-][a-zA-Z_0-9-]*$");
+String yamlToString(data) {
+  var buffer = new StringBuffer();
+  _stringify(bool isMapValue, String indent, data) {
+    if (data is Map && !data.isEmpty) {
+      if (isMapValue) {
+        buffer.writeln();
+        indent += '  ';
+      }
+      var keys = data.keys.toList();
+      keys.sort((a, b) => a.toString().compareTo(b.toString()));
+      var first = true;
+      for (var key in keys) {
+        if (!first) buffer.writeln();
+        first = false;
+        var keyString = key;
+        if (key is! String || !_unquotableYamlString.hasMatch(key)) {
+          keyString = JSON.encode(key);
+        }
+        buffer.write('$indent$keyString:');
+        _stringify(true, indent, data[key]);
+      }
+      return;
+    }
+    var string = data;
+    if (data is! String || !_unquotableYamlString.hasMatch(data)) {
+      string = JSON.encode(data);
+    }
+    if (isMapValue) {
+      buffer.write(' $string');
+    } else {
+      buffer.write('$indent$string');
+    }
+  }
+  _stringify(false, '', data);
+  return buffer.toString();
+}
+void fail(String message, [innerError, StackTrace innerTrace]) {
+  if (innerError != null) {
+    throw new WrappedException(message, innerError, innerTrace);
+  } else {
+    throw new ApplicationException(message);
+  }
+}
+void dataError(String message) => throw new DataException(message);
diff --git a/sdk/lib/_internal/pub_generated/lib/src/validator.dart b/sdk/lib/_internal/pub_generated/lib/src/validator.dart
new file mode 100644
index 0000000..27f071b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/validator.dart
@@ -0,0 +1,56 @@
+library pub.validator;
+import 'dart:async';
+import 'entrypoint.dart';
+import 'log.dart' as log;
+import 'utils.dart';
+import 'validator/compiled_dartdoc.dart';
+import 'validator/dependency.dart';
+import 'validator/dependency_override.dart';
+import 'validator/directory.dart';
+import 'validator/license.dart';
+import 'validator/name.dart';
+import 'validator/pubspec_field.dart';
+import 'validator/size.dart';
+import 'validator/utf8_readme.dart';
+abstract class Validator {
+  final Entrypoint entrypoint;
+  final errors = <String>[];
+  final warnings = <String>[];
+  Validator(this.entrypoint);
+  Future validate();
+  static Future<Pair<List<String>, List<String>>> runAll(Entrypoint entrypoint,
+      [Future<int> packageSize]) {
+    var validators = [
+        new LicenseValidator(entrypoint),
+        new NameValidator(entrypoint),
+        new PubspecFieldValidator(entrypoint),
+        new DependencyValidator(entrypoint),
+        new DependencyOverrideValidator(entrypoint),
+        new DirectoryValidator(entrypoint),
+        new CompiledDartdocValidator(entrypoint),
+        new Utf8ReadmeValidator(entrypoint)];
+    if (packageSize != null) {
+      validators.add(new SizeValidator(entrypoint, packageSize));
+    }
+    return Future.wait(
+        validators.map((validator) => validator.validate())).then((_) {
+      var errors = flatten(validators.map((validator) => validator.errors));
+      var warnings = flatten(validators.map((validator) => validator.warnings));
+      if (!errors.isEmpty) {
+        log.error("Missing requirements:");
+        for (var error in errors) {
+          log.error("* ${error.split('\n').join('\n  ')}");
+        }
+        log.error("");
+      }
+      if (!warnings.isEmpty) {
+        log.warning("Suggestions:");
+        for (var warning in warnings) {
+          log.warning("* ${warning.split('\n').join('\n  ')}");
+        }
+        log.warning("");
+      }
+      return new Pair<List<String>, List<String>>(errors, warnings);
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/validator/compiled_dartdoc.dart b/sdk/lib/_internal/pub_generated/lib/src/validator/compiled_dartdoc.dart
new file mode 100644
index 0000000..3dc88b4
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/validator/compiled_dartdoc.dart
@@ -0,0 +1,29 @@
+library pub.validator.compiled_dartdoc;
+import 'dart:async';
+import 'package:path/path.dart' as path;
+import '../entrypoint.dart';
+import '../io.dart';
+import '../utils.dart';
+import '../validator.dart';
+class CompiledDartdocValidator extends Validator {
+  CompiledDartdocValidator(Entrypoint entrypoint) : super(entrypoint);
+  Future validate() {
+    return syncFuture(() {
+      for (var entry in entrypoint.root.listFiles()) {
+        if (path.basename(entry) != "nav.json") continue;
+        var dir = path.dirname(entry);
+        var files = [
+            entry,
+            path.join(dir, "index.html"),
+            path.join(dir, "styles.css"),
+            path.join(dir, "dart-logo-small.png"),
+            path.join(dir, "client-live-nav.js")];
+        if (files.every((val) => fileExists(val))) {
+          warnings.add(
+              "Avoid putting generated documentation in " "${path.relative(dir)}.\n"
+                  "Generated documentation bloats the package with redundant " "data.");
+        }
+      }
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/validator/dependency.dart b/sdk/lib/_internal/pub_generated/lib/src/validator/dependency.dart
new file mode 100644
index 0000000..ddafcbe
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/validator/dependency.dart
@@ -0,0 +1,110 @@
+library pub.validator.dependency;
+import 'dart:async';
+import '../entrypoint.dart';
+import '../log.dart' as log;
+import '../package.dart';
+import '../validator.dart';
+import '../version.dart';
+class DependencyValidator extends Validator {
+  DependencyValidator(Entrypoint entrypoint) : super(entrypoint);
+  Future validate() {
+    return Future.forEach(entrypoint.root.pubspec.dependencies, (dependency) {
+      if (dependency.source != "hosted") {
+        return _warnAboutSource(dependency);
+      }
+      if (dependency.constraint.isAny) {
+        _warnAboutNoConstraint(dependency);
+      } else if (dependency.constraint is Version) {
+        _warnAboutSingleVersionConstraint(dependency);
+      } else if (dependency.constraint is VersionRange) {
+        if (dependency.constraint.min == null) {
+          _warnAboutNoConstraintLowerBound(dependency);
+        } else if (dependency.constraint.max == null) {
+          _warnAboutNoConstraintUpperBound(dependency);
+        }
+      }
+      return new Future.value();
+    });
+  }
+  Future _warnAboutSource(PackageDep dep) {
+    return entrypoint.cache.sources['hosted'].getVersions(
+        dep.name,
+        dep.name).catchError((e) => <Version>[]).then((versions) {
+      var constraint;
+      var primary = Version.primary(versions);
+      if (primary != null) {
+        constraint = _constraintForVersion(primary);
+      } else {
+        constraint = dep.constraint.toString();
+        if (!dep.constraint.isAny && dep.constraint is! Version) {
+          constraint = '"$constraint"';
+        }
+      }
+      var messages = warnings;
+      if (dep.source == "path") {
+        messages = errors;
+      }
+      messages.add(
+          'Don\'t depend on "${dep.name}" from the ${dep.source} '
+              'source. Use the hosted source instead. For example:\n' '\n' 'dependencies:\n'
+              '  ${dep.name}: $constraint\n' '\n'
+              'Using the hosted source ensures that everyone can download your '
+              'package\'s dependencies along with your package.');
+    });
+  }
+  void _warnAboutNoConstraint(PackageDep dep) {
+    var message =
+        'Your dependency on "${dep.name}" should have a version ' 'constraint.';
+    var locked = entrypoint.lockFile.packages[dep.name];
+    if (locked != null) {
+      message =
+          '$message For example:\n' '\n' 'dependencies:\n'
+              '  ${dep.name}: ${_constraintForVersion(locked.version)}\n';
+    }
+    warnings.add(
+        "$message\n"
+            'Without a constraint, you\'re promising to support ${log.bold("all")} '
+            'future versions of "${dep.name}".');
+  }
+  void _warnAboutSingleVersionConstraint(PackageDep dep) {
+    warnings.add(
+        'Your dependency on "${dep.name}" should allow more than one version. '
+            'For example:\n' '\n' 'dependencies:\n'
+            '  ${dep.name}: ${_constraintForVersion(dep.constraint)}\n' '\n'
+            'Constraints that are too tight will make it difficult for people to '
+            'use your package\n'
+            'along with other packages that also depend on "${dep.name}".');
+  }
+  void _warnAboutNoConstraintLowerBound(PackageDep dep) {
+    var message = 'Your dependency on "${dep.name}" should have a lower bound.';
+    var locked = entrypoint.lockFile.packages[dep.name];
+    if (locked != null) {
+      var constraint;
+      if (locked.version == (dep.constraint as VersionRange).max) {
+        constraint = _constraintForVersion(locked.version);
+      } else {
+        constraint = '">=${locked.version} ${dep.constraint}"';
+      }
+      message =
+          '$message For example:\n' '\n' 'dependencies:\n' '  ${dep.name}: $constraint\n';
+    }
+    warnings.add(
+        "$message\n"
+            'Without a constraint, you\'re promising to support ${log.bold("all")} '
+            'previous versions of "${dep.name}".');
+  }
+  void _warnAboutNoConstraintUpperBound(PackageDep dep) {
+    warnings.add(
+        'Your dependency on "${dep.name}" should have an upper bound. For ' 'example:\n'
+            '\n' 'dependencies:\n' '  ${dep.name}: "${dep.constraint} '
+            '${_upperBoundForVersion((dep.constraint as VersionRange).min)}"\n' '\n'
+            'Without an upper bound, you\'re promising to support '
+            '${log.bold("all")} future versions of ${dep.name}.');
+  }
+  String _constraintForVersion(Version version) =>
+      '">=$version ${_upperBoundForVersion(version)}"';
+  String _upperBoundForVersion(Version version) {
+    if (version.major != 0) return '<${version.major + 1}.0.0';
+    return '<${version.major}.${version.minor + 1}.0';
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/validator/dependency_override.dart b/sdk/lib/_internal/pub_generated/lib/src/validator/dependency_override.dart
new file mode 100644
index 0000000..c233356
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/validator/dependency_override.dart
@@ -0,0 +1,16 @@
+library pub.validator.dependency_override;
+import 'dart:async';
+import '../entrypoint.dart';
+import '../validator.dart';
+class DependencyOverrideValidator extends Validator {
+  DependencyOverrideValidator(Entrypoint entrypoint) : super(entrypoint);
+  Future validate() {
+    if (entrypoint.root.dependencyOverrides.isNotEmpty) {
+      errors.add(
+          'Your pubspec.yaml must not have a "dependency_overrides" field.\n'
+              'This ensures you test your package against the same versions of '
+              'its dependencies\n' 'that users will have when they use it.');
+    }
+    return new Future.value();
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/validator/directory.dart b/sdk/lib/_internal/pub_generated/lib/src/validator/directory.dart
new file mode 100644
index 0000000..133b3da
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/validator/directory.dart
@@ -0,0 +1,37 @@
+library pub.validator.directory;
+import 'dart:async';
+import 'package:path/path.dart' as path;
+import '../entrypoint.dart';
+import '../io.dart';
+import '../utils.dart';
+import '../validator.dart';
+class DirectoryValidator extends Validator {
+  DirectoryValidator(Entrypoint entrypoint) : super(entrypoint);
+  static final _PLURAL_NAMES = [
+      "benchmarks",
+      "docs",
+      "examples",
+      "tests",
+      "tools"];
+  Future validate() {
+    return syncFuture(() {
+      for (var dir in listDir(entrypoint.root.dir)) {
+        if (!dirExists(dir)) continue;
+        dir = path.basename(dir);
+        if (_PLURAL_NAMES.contains(dir)) {
+          var singularName = dir.substring(0, dir.length - 1);
+          warnings.add(
+              'Rename the top-level "$dir" directory to ' '"$singularName".\n'
+                  'The Pub layout convention is to use singular directory ' 'names.\n'
+                  'Plural names won\'t be correctly identified by Pub and other ' 'tools.');
+        }
+        if (dir.contains(new RegExp(r"^samples?$"))) {
+          warnings.add(
+              'Rename the top-level "$dir" directory to "example".\n'
+                  'This allows Pub to find your examples and create "packages" '
+                  'directories for them.\n');
+        }
+      }
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/validator/license.dart b/sdk/lib/_internal/pub_generated/lib/src/validator/license.dart
new file mode 100644
index 0000000..8d19d54
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/validator/license.dart
@@ -0,0 +1,23 @@
+library pub.validator.license;
+import 'dart:async';
+import 'package:path/path.dart' as path;
+import '../entrypoint.dart';
+import '../io.dart';
+import '../utils.dart';
+import '../validator.dart';
+class LicenseValidator extends Validator {
+  LicenseValidator(Entrypoint entrypoint) : super(entrypoint);
+  Future validate() {
+    return syncFuture(() {
+      var licenseLike =
+          new RegExp(r"^([a-zA-Z0-9]+[-_])?(LICENSE|COPYING)(\..*)?$");
+      if (listDir(
+          entrypoint.root.dir).map(path.basename).any(licenseLike.hasMatch)) {
+        return;
+      }
+      errors.add(
+          "You must have a COPYING or LICENSE file in the root directory.\n"
+              "An open-source license helps ensure people can legally use your " "code.");
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/validator/name.dart b/sdk/lib/_internal/pub_generated/lib/src/validator/name.dart
new file mode 100644
index 0000000..10171e1
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/validator/name.dart
@@ -0,0 +1,113 @@
+library pub.validator.name;
+import 'dart:async';
+import 'package:path/path.dart' as path;
+import '../entrypoint.dart';
+import '../io.dart';
+import '../utils.dart';
+import '../validator.dart';
+final _RESERVED_WORDS = [
+    "assert",
+    "break",
+    "case",
+    "catch",
+    "class",
+    "const",
+    "continue",
+    "default",
+    "do",
+    "else",
+    "extends",
+    "false",
+    "final",
+    "finally",
+    "for",
+    "if",
+    "in",
+    "is",
+    "new",
+    "null",
+    "return",
+    "super",
+    "switch",
+    "this",
+    "throw",
+    "true",
+    "try",
+    "var",
+    "void",
+    "while",
+    "with"];
+class NameValidator extends Validator {
+  NameValidator(Entrypoint entrypoint) : super(entrypoint);
+  Future validate() {
+    return syncFuture(() {
+      _checkName(
+          entrypoint.root.name,
+          'Package name "${entrypoint.root.name}"',
+          isPackage: true);
+      var libraries = _libraries;
+      for (var library in libraries) {
+        var libName = path.basenameWithoutExtension(library);
+        _checkName(
+            libName,
+            'The name of "$library", "$libName",',
+            isPackage: false);
+      }
+      if (libraries.length == 1) {
+        var libName = path.basenameWithoutExtension(libraries[0]);
+        if (libName == entrypoint.root.name) return;
+        warnings.add(
+            'The name of "${libraries[0]}", "$libName", should match '
+                'the name of the package, "${entrypoint.root.name}".\n'
+                'This helps users know what library to import.');
+      }
+    });
+  }
+  List<String> get _libraries {
+    var libDir = path.join(entrypoint.root.dir, "lib");
+    if (!dirExists(libDir)) return [];
+    return entrypoint.root.listFiles(
+        beneath: libDir).map(
+            (file) =>
+                path.relative(
+                    file,
+                    from: path.dirname(
+                        libDir))).where(
+                            (file) =>
+                                !path.split(file).contains("src") && path.extension(file) == '.dart').toList();
+  }
+  void _checkName(String name, String description, {bool isPackage}) {
+    var messages = isPackage ? errors : warnings;
+    if (name == "") {
+      errors.add("$description may not be empty.");
+    } else if (!new RegExp(r"^[a-zA-Z0-9_]*$").hasMatch(name)) {
+      messages.add(
+          "$description may only contain letters, numbers, and " "underscores.\n"
+              "Using a valid Dart identifier makes the name usable in Dart code.");
+    } else if (!new RegExp(r"^[a-zA-Z_]").hasMatch(name)) {
+      messages.add(
+          "$description must begin with a letter or underscore.\n"
+              "Using a valid Dart identifier makes the name usable in Dart code.");
+    } else if (_RESERVED_WORDS.contains(name.toLowerCase())) {
+      messages.add(
+          "$description may not be a reserved word in Dart.\n"
+              "Using a valid Dart identifier makes the name usable in Dart code.");
+    } else if (new RegExp(r"[A-Z]").hasMatch(name)) {
+      warnings.add(
+          '$description should be lower-case. Maybe use ' '"${_unCamelCase(name)}"?');
+    }
+  }
+  String _unCamelCase(String source) {
+    var builder = new StringBuffer();
+    var lastMatchEnd = 0;
+    for (var match in new RegExp(r"[a-z]([A-Z])").allMatches(source)) {
+      builder
+          ..write(source.substring(lastMatchEnd, match.start + 1))
+          ..write("_")
+          ..write(match.group(1).toLowerCase());
+      lastMatchEnd = match.end;
+    }
+    builder.write(source.substring(lastMatchEnd));
+    return builder.toString().toLowerCase();
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/validator/pubspec_field.dart b/sdk/lib/_internal/pub_generated/lib/src/validator/pubspec_field.dart
new file mode 100644
index 0000000..250afd7
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/validator/pubspec_field.dart
@@ -0,0 +1,80 @@
+library pub.validator.pubspec_field;
+import 'dart:async';
+import '../entrypoint.dart';
+import '../validator.dart';
+class PubspecFieldValidator extends Validator {
+  PubspecFieldValidator(Entrypoint entrypoint) : super(entrypoint);
+  Future validate() {
+    _validateAuthors();
+    _validateFieldIsString('description');
+    _validateFieldIsString('homepage');
+    _validateFieldUrl('homepage');
+    _validateFieldUrl('documentation');
+    _validateFieldIsString('version');
+    for (var error in entrypoint.root.pubspec.allErrors) {
+      errors.add('In your pubspec.yaml, ${error.message}');
+    }
+    return new Future.value();
+  }
+  void _validateAuthors() {
+    var pubspec = entrypoint.root.pubspec;
+    var author = pubspec.fields['author'];
+    var authors = pubspec.fields['authors'];
+    if (author == null && authors == null) {
+      errors.add('Your pubspec.yaml must have an "author" or "authors" field.');
+      return;
+    }
+    if (author != null && author is! String) {
+      errors.add(
+          'Your pubspec.yaml\'s "author" field must be a string, but it '
+              'was "$author".');
+      return;
+    }
+    if (authors != null &&
+        (authors is! List || authors.any((author) => author is! String))) {
+      errors.add(
+          'Your pubspec.yaml\'s "authors" field must be a list, but '
+              'it was "$authors".');
+      return;
+    }
+    if (authors == null) authors = [author];
+    var hasName = new RegExp(r"^ *[^< ]");
+    var hasEmail = new RegExp(r"<[^>]+> *$");
+    for (var authorName in authors) {
+      if (!hasName.hasMatch(authorName)) {
+        warnings.add(
+            'Author "$authorName" in pubspec.yaml should have a ' 'name.');
+      }
+      if (!hasEmail.hasMatch(authorName)) {
+        warnings.add(
+            'Author "$authorName" in pubspec.yaml should have an '
+                'email address\n(e.g. "name <email>").');
+      }
+    }
+  }
+  void _validateFieldIsString(String field) {
+    var value = entrypoint.root.pubspec.fields[field];
+    if (value == null) {
+      errors.add('Your pubspec.yaml is missing a "$field" field.');
+    } else if (value is! String) {
+      errors.add(
+          'Your pubspec.yaml\'s "$field" field must be a string, but '
+              'it was "$value".');
+    }
+  }
+  void _validateFieldUrl(String field) {
+    var url = entrypoint.root.pubspec.fields[field];
+    if (url == null) return;
+    if (url is! String) {
+      errors.add(
+          'Your pubspec.yaml\'s "$field" field must be a string, but ' 'it was "$url".');
+      return;
+    }
+    var goodScheme = new RegExp(r'^https?:');
+    if (!goodScheme.hasMatch(url)) {
+      errors.add(
+          'Your pubspec.yaml\'s "$field" field must be an "http:" or '
+              '"https:" URL, but it was "$url".');
+    }
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/validator/size.dart b/sdk/lib/_internal/pub_generated/lib/src/validator/size.dart
new file mode 100644
index 0000000..675587c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/validator/size.dart
@@ -0,0 +1,18 @@
+library pub.validator.size;
+import 'dart:async';
+import 'dart:math' as math;
+import '../entrypoint.dart';
+import '../validator.dart';
+const _MAX_SIZE = 10 * 1024 * 1024;
+class SizeValidator extends Validator {
+  final Future<int> packageSize;
+  SizeValidator(Entrypoint entrypoint, this.packageSize) : super(entrypoint);
+  Future validate() {
+    return packageSize.then((size) {
+      if (size <= _MAX_SIZE) return;
+      var sizeInMb = (size / math.pow(2, 20)).toStringAsPrecision(4);
+      errors.add(
+          "Your package is $sizeInMb MB. Hosted packages must be " "smaller than 10 MB.");
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/validator/utf8_readme.dart b/sdk/lib/_internal/pub_generated/lib/src/validator/utf8_readme.dart
new file mode 100644
index 0000000..2f81ba5
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/validator/utf8_readme.dart
@@ -0,0 +1,24 @@
+library pub.validator.utf8_readme;
+import 'dart:async';
+import 'dart:convert';
+import '../entrypoint.dart';
+import '../io.dart';
+import '../utils.dart';
+import '../validator.dart';
+class Utf8ReadmeValidator extends Validator {
+  Utf8ReadmeValidator(Entrypoint entrypoint) : super(entrypoint);
+  Future validate() {
+    return syncFuture(() {
+      var readme = entrypoint.root.readmePath;
+      if (readme == null) return;
+      var bytes = readBinaryFile(readme);
+      try {
+        UTF8.decode(bytes);
+      } on FormatException catch (_) {
+        warnings.add(
+            "$readme contains invalid UTF-8.\n"
+                "This will cause it to be displayed incorrectly on " "pub.dartlang.org.");
+      }
+    });
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/lib/src/version.dart b/sdk/lib/_internal/pub_generated/lib/src/version.dart
new file mode 100644
index 0000000..215b8af
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/lib/src/version.dart
@@ -0,0 +1,341 @@
+library pub.version;
+import 'dart:math';
+import 'package:collection/equality.dart';
+final _START_VERSION = new RegExp(
+    r'^' r'(\d+).(\d+).(\d+)' r'(-([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?'
+        r'(\+([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?');
+final _COMPLETE_VERSION = new RegExp("${_START_VERSION.pattern}\$");
+final _START_COMPARISON = new RegExp(r"^[<>]=?");
+final _equality = const IterableEquality();
+class Version implements Comparable<Version>, VersionConstraint {
+  static Version get none => new Version(0, 0, 0);
+  static int prioritize(Version a, Version b) {
+    if (a.isPreRelease && !b.isPreRelease) return -1;
+    if (!a.isPreRelease && b.isPreRelease) return 1;
+    return a.compareTo(b);
+  }
+  static int antiPrioritize(Version a, Version b) {
+    if (a.isPreRelease && !b.isPreRelease) return -1;
+    if (!a.isPreRelease && b.isPreRelease) return 1;
+    return b.compareTo(a);
+  }
+  final int major;
+  final int minor;
+  final int patch;
+  final List preRelease;
+  final List build;
+  final String _text;
+  Version._(this.major, this.minor, this.patch, String preRelease, String build,
+      this._text)
+      : preRelease = preRelease == null ? [] : _splitParts(preRelease),
+        build = build == null ? [] : _splitParts(build) {
+    if (major <
+        0) throw new ArgumentError('Major version must be non-negative.');
+    if (minor <
+        0) throw new ArgumentError('Minor version must be non-negative.');
+    if (patch <
+        0) throw new ArgumentError('Patch version must be non-negative.');
+  }
+  factory Version(int major, int minor, int patch, {String pre, String build}) {
+    var text = "$major.$minor.$patch";
+    if (pre != null) text += "-$pre";
+    if (build != null) text += "+$build";
+    return new Version._(major, minor, patch, pre, build, text);
+  }
+  factory Version.parse(String text) {
+    final match = _COMPLETE_VERSION.firstMatch(text);
+    if (match == null) {
+      throw new FormatException('Could not parse "$text".');
+    }
+    try {
+      int major = int.parse(match[1]);
+      int minor = int.parse(match[2]);
+      int patch = int.parse(match[3]);
+      String preRelease = match[5];
+      String build = match[8];
+      return new Version._(major, minor, patch, preRelease, build, text);
+    } on FormatException catch (ex) {
+      throw new FormatException('Could not parse "$text".');
+    }
+  }
+  static Version primary(List<Version> versions) {
+    var primary;
+    for (var version in versions) {
+      if (primary == null ||
+          (!version.isPreRelease && primary.isPreRelease) ||
+          (version.isPreRelease == primary.isPreRelease && version > primary)) {
+        primary = version;
+      }
+    }
+    return primary;
+  }
+  static List _splitParts(String text) {
+    return text.split('.').map((part) {
+      try {
+        return int.parse(part);
+      } on FormatException catch (ex) {
+        return part;
+      }
+    }).toList();
+  }
+  bool operator ==(other) {
+    if (other is! Version) return false;
+    return major == other.major &&
+        minor == other.minor &&
+        patch == other.patch &&
+        _equality.equals(preRelease, other.preRelease) &&
+        _equality.equals(build, other.build);
+  }
+  int get hashCode =>
+      major ^ minor ^ patch ^ _equality.hash(preRelease) ^ _equality.hash(build);
+  bool operator <(Version other) => compareTo(other) < 0;
+  bool operator >(Version other) => compareTo(other) > 0;
+  bool operator <=(Version other) => compareTo(other) <= 0;
+  bool operator >=(Version other) => compareTo(other) >= 0;
+  bool get isAny => false;
+  bool get isEmpty => false;
+  bool get isPreRelease => preRelease.isNotEmpty;
+  Version get nextMajor {
+    if (isPreRelease && minor == 0 && patch == 0) {
+      return new Version(major, minor, patch);
+    }
+    return new Version(major + 1, 0, 0);
+  }
+  Version get nextMinor {
+    if (isPreRelease && patch == 0) {
+      return new Version(major, minor, patch);
+    }
+    return new Version(major, minor + 1, 0);
+  }
+  Version get nextPatch {
+    if (isPreRelease) {
+      return new Version(major, minor, patch);
+    }
+    return new Version(major, minor, patch + 1);
+  }
+  bool allows(Version other) => this == other;
+  VersionConstraint intersect(VersionConstraint other) {
+    if (other.isEmpty) return other;
+    if (other is VersionRange) return other.intersect(this);
+    if (other is Version) {
+      return this == other ? this : VersionConstraint.empty;
+    }
+    throw new ArgumentError('Unknown VersionConstraint type $other.');
+  }
+  int compareTo(Version other) {
+    if (major != other.major) return major.compareTo(other.major);
+    if (minor != other.minor) return minor.compareTo(other.minor);
+    if (patch != other.patch) return patch.compareTo(other.patch);
+    if (!isPreRelease && other.isPreRelease) return 1;
+    if (!other.isPreRelease && isPreRelease) return -1;
+    var comparison = _compareLists(preRelease, other.preRelease);
+    if (comparison != 0) return comparison;
+    if (build.isEmpty && other.build.isNotEmpty) return -1;
+    if (other.build.isEmpty && build.isNotEmpty) return 1;
+    return _compareLists(build, other.build);
+  }
+  String toString() => _text;
+  int _compareLists(List a, List b) {
+    for (var i = 0; i < max(a.length, b.length); i++) {
+      var aPart = (i < a.length) ? a[i] : null;
+      var bPart = (i < b.length) ? b[i] : null;
+      if (aPart == bPart) continue;
+      if (aPart == null) return -1;
+      if (bPart == null) return 1;
+      if (aPart is num) {
+        if (bPart is num) {
+          return aPart.compareTo(bPart);
+        } else {
+          return -1;
+        }
+      } else {
+        if (bPart is num) {
+          return 1;
+        } else {
+          return aPart.compareTo(bPart);
+        }
+      }
+    }
+    return 0;
+  }
+}
+abstract class VersionConstraint {
+  static VersionConstraint any = new VersionRange();
+  static VersionConstraint empty = const _EmptyVersion();
+  factory VersionConstraint.parse(String text) {
+    if (text.trim() == "any") return new VersionRange();
+    var originalText = text;
+    var constraints = <VersionConstraint>[];
+    void skipWhitespace() {
+      text = text.trim();
+    }
+    Version matchVersion() {
+      var version = _START_VERSION.firstMatch(text);
+      if (version == null) return null;
+      text = text.substring(version.end);
+      return new Version.parse(version[0]);
+    }
+    VersionConstraint matchComparison() {
+      var comparison = _START_COMPARISON.firstMatch(text);
+      if (comparison == null) return null;
+      var op = comparison[0];
+      text = text.substring(comparison.end);
+      skipWhitespace();
+      var version = matchVersion();
+      if (version == null) {
+        throw new FormatException(
+            'Expected version number after "$op" in ' '"$originalText", got "$text".');
+      }
+      switch (op) {
+        case '<=':
+          return new VersionRange(max: version, includeMax: true);
+        case '<':
+          return new VersionRange(max: version, includeMax: false);
+        case '>=':
+          return new VersionRange(min: version, includeMin: true);
+        case '>':
+          return new VersionRange(min: version, includeMin: false);
+      }
+      throw "Unreachable.";
+    }
+    while (true) {
+      skipWhitespace();
+      if (text.isEmpty) break;
+      var version = matchVersion();
+      if (version != null) {
+        constraints.add(version);
+        continue;
+      }
+      var comparison = matchComparison();
+      if (comparison != null) {
+        constraints.add(comparison);
+        continue;
+      }
+      throw new FormatException(
+          'Could not parse version "$originalText". ' 'Unknown text at "$text".');
+    }
+    if (constraints.isEmpty) {
+      throw new FormatException('Cannot parse an empty string.');
+    }
+    return new VersionConstraint.intersection(constraints);
+  }
+  factory
+      VersionConstraint.intersection(Iterable<VersionConstraint> constraints) {
+    var constraint = new VersionRange();
+    for (var other in constraints) {
+      constraint = constraint.intersect(other);
+    }
+    return constraint;
+  }
+  bool get isEmpty;
+  bool get isAny;
+  bool allows(Version version);
+  VersionConstraint intersect(VersionConstraint other);
+}
+class VersionRange implements VersionConstraint {
+  final Version min;
+  final Version max;
+  final bool includeMin;
+  final bool includeMax;
+  VersionRange({this.min, this.max, this.includeMin: false, this.includeMax:
+      false}) {
+    if (min != null && max != null && min > max) {
+      throw new ArgumentError(
+          'Minimum version ("$min") must be less than maximum ("$max").');
+    }
+  }
+  bool operator ==(other) {
+    if (other is! VersionRange) return false;
+    return min == other.min &&
+        max == other.max &&
+        includeMin == other.includeMin &&
+        includeMax == other.includeMax;
+  }
+  bool get isEmpty => false;
+  bool get isAny => min == null && max == null;
+  bool allows(Version other) {
+    if (min != null) {
+      if (other < min) return false;
+      if (!includeMin && other == min) return false;
+    }
+    if (max != null) {
+      if (other > max) return false;
+      if (!includeMax && other == max) return false;
+      if (!includeMax &&
+          !max.isPreRelease &&
+          other.isPreRelease &&
+          other.major == max.major &&
+          other.minor == max.minor &&
+          other.patch == max.patch) {
+        return false;
+      }
+    }
+    return true;
+  }
+  VersionConstraint intersect(VersionConstraint other) {
+    if (other.isEmpty) return other;
+    if (other is Version) {
+      return allows(other) ? other : VersionConstraint.empty;
+    }
+    if (other is VersionRange) {
+      var intersectMin = min;
+      var intersectIncludeMin = includeMin;
+      var intersectMax = max;
+      var intersectIncludeMax = includeMax;
+      if (other.min ==
+          null) {} else if (intersectMin == null || intersectMin < other.min) {
+        intersectMin = other.min;
+        intersectIncludeMin = other.includeMin;
+      } else if (intersectMin == other.min && !other.includeMin) {
+        intersectIncludeMin = false;
+      }
+      if (other.max ==
+          null) {} else if (intersectMax == null || intersectMax > other.max) {
+        intersectMax = other.max;
+        intersectIncludeMax = other.includeMax;
+      } else if (intersectMax == other.max && !other.includeMax) {
+        intersectIncludeMax = false;
+      }
+      if (intersectMin == null && intersectMax == null) {
+        return new VersionRange();
+      }
+      if (intersectMin == intersectMax) {
+        if (intersectIncludeMin && intersectIncludeMax) return intersectMin;
+        return VersionConstraint.empty;
+      }
+      if (intersectMin != null &&
+          intersectMax != null &&
+          intersectMin > intersectMax) {
+        return VersionConstraint.empty;
+      }
+      return new VersionRange(
+          min: intersectMin,
+          max: intersectMax,
+          includeMin: intersectIncludeMin,
+          includeMax: intersectIncludeMax);
+    }
+    throw new ArgumentError('Unknown VersionConstraint type $other.');
+  }
+  String toString() {
+    var buffer = new StringBuffer();
+    if (min != null) {
+      buffer.write(includeMin ? '>=' : '>');
+      buffer.write(min);
+    }
+    if (max != null) {
+      if (min != null) buffer.write(' ');
+      buffer.write(includeMax ? '<=' : '<');
+      buffer.write(max);
+    }
+    if (min == null && max == null) buffer.write('any');
+    return buffer.toString();
+  }
+}
+class _EmptyVersion implements VersionConstraint {
+  const _EmptyVersion();
+  bool get isEmpty => true;
+  bool get isAny => false;
+  bool allows(Version other) => false;
+  VersionConstraint intersect(VersionConstraint other) => this;
+  String toString() => '<empty>';
+}
diff --git a/sdk/lib/_internal/pub_generated/pub.status b/sdk/lib/_internal/pub_generated/pub.status
new file mode 100644
index 0000000..ac7f648
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/pub.status
@@ -0,0 +1,19 @@
+# Copyright (c) 2014, 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/dart2js/compiles_generated_file_from_dependency_test: Pass, Slow
+test/serve/web_socket/url_to_asset_id_test: Pass, Slow
+test/transformer/loads_a_diamond_transformer_dependency_graph_test: Pass, Slow
+
+# Pub only runs on the VM, so just rule out all compilers.
+[ $compiler == dart2js || $compiler == dart2dart ]
+*: Skip
+
+# Pub only runs on the standalone VM, not the browser.
+[ $runtime == drt || $runtime == dartium || $runtime == opera ]
+*: Skip
+
+[ $runtime == vm && $system == windows ]
+test/run/app_can_read_from_stdin_test: Fail # Issue 19448
+test/real_version_test: RuntimeError # Issue 20882
diff --git a/sdk/lib/_internal/pub_generated/test/ascii_tree_test.dart b/sdk/lib/_internal/pub_generated/test/ascii_tree_test.dart
new file mode 100644
index 0000000..435416c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/ascii_tree_test.dart
@@ -0,0 +1,226 @@
+library lock_file_test;
+import 'package:unittest/unittest.dart';
+import '../lib/src/ascii_tree.dart' as tree;
+import '../lib/src/utils.dart';
+main() {
+  runningAsTest = true;
+  group('tree.fromFiles', () {
+    test('no files', () {
+      expect(tree.fromFiles([]), equals(""));
+    });
+    test('up to ten files in one directory are shown', () {
+      var files = [
+          "dir/a.dart",
+          "dir/b.dart",
+          "dir/c.dart",
+          "dir/d.dart",
+          "dir/e.dart",
+          "dir/f.dart",
+          "dir/g.dart",
+          "dir/h.dart",
+          "dir/i.dart",
+          "dir/j.dart"];
+      expect(tree.fromFiles(files), equals("""
+'-- dir
+    |-- a.dart
+    |-- b.dart
+    |-- c.dart
+    |-- d.dart
+    |-- e.dart
+    |-- f.dart
+    |-- g.dart
+    |-- h.dart
+    |-- i.dart
+    '-- j.dart
+"""));
+    });
+    test('files are elided if there are more than ten', () {
+      var files = [
+          "dir/a.dart",
+          "dir/b.dart",
+          "dir/c.dart",
+          "dir/d.dart",
+          "dir/e.dart",
+          "dir/f.dart",
+          "dir/g.dart",
+          "dir/h.dart",
+          "dir/i.dart",
+          "dir/j.dart",
+          "dir/k.dart"];
+      expect(tree.fromFiles(files), equals("""
+'-- dir
+    |-- a.dart
+    |-- b.dart
+    |-- c.dart
+    | (5 more...)
+    |-- i.dart
+    |-- j.dart
+    '-- k.dart
+"""));
+    });
+    test('files are not elided at the top level', () {
+      var files = [
+          "a.dart",
+          "b.dart",
+          "c.dart",
+          "d.dart",
+          "e.dart",
+          "f.dart",
+          "g.dart",
+          "h.dart",
+          "i.dart",
+          "j.dart",
+          "k.dart"];
+      expect(tree.fromFiles(files), equals("""
+|-- a.dart
+|-- b.dart
+|-- c.dart
+|-- d.dart
+|-- e.dart
+|-- f.dart
+|-- g.dart
+|-- h.dart
+|-- i.dart
+|-- j.dart
+'-- k.dart
+"""));
+    });
+    test('a complex example', () {
+      var files = [
+          "TODO",
+          "example/console_example.dart",
+          "example/main.dart",
+          "example/web copy/web_example.dart",
+          "test/absolute_test.dart",
+          "test/basename_test.dart",
+          "test/dirname_test.dart",
+          "test/extension_test.dart",
+          "test/is_absolute_test.dart",
+          "test/is_relative_test.dart",
+          "test/join_test.dart",
+          "test/normalize_test.dart",
+          "test/relative_test.dart",
+          "test/split_test.dart",
+          ".gitignore",
+          "README.md",
+          "lib/path.dart",
+          "pubspec.yaml",
+          "test/all_test.dart",
+          "test/path_posix_test.dart",
+          "test/path_windows_test.dart"];
+      expect(tree.fromFiles(files), equals("""
+|-- .gitignore
+|-- README.md
+|-- TODO
+|-- example
+|   |-- console_example.dart
+|   |-- main.dart
+|   '-- web copy
+|       '-- web_example.dart
+|-- lib
+|   '-- path.dart
+|-- pubspec.yaml
+'-- test
+    |-- absolute_test.dart
+    |-- all_test.dart
+    |-- basename_test.dart
+    | (7 more...)
+    |-- path_windows_test.dart
+    |-- relative_test.dart
+    '-- split_test.dart
+"""));
+    });
+  });
+  group('treeFromMap', () {
+    test('empty map', () {
+      expect(tree.fromMap({}), equals(""));
+    });
+    test('a complex example', () {
+      var map = {
+        ".gitignore": {},
+        "README.md": {},
+        "TODO": {},
+        "example": {
+          "console_example.dart": {},
+          "main.dart": {},
+          "web copy": {
+            "web_example.dart": {}
+          }
+        },
+        "lib": {
+          "path.dart": {}
+        },
+        "pubspec.yaml": {},
+        "test": {
+          "absolute_test.dart": {},
+          "basename_test.dart": {},
+          "dirname_test.dart": {},
+          "extension_test.dart": {},
+          "is_absolute_test.dart": {},
+          "is_relative_test.dart": {},
+          "join_test.dart": {},
+          "normalize_test.dart": {},
+          "relative_test.dart": {},
+          "split_test.dart": {}
+        }
+      };
+      expect(tree.fromMap(map), equals("""
+|-- .gitignore
+|-- README.md
+|-- TODO
+|-- example
+|   |-- console_example.dart
+|   |-- main.dart
+|   '-- web copy
+|       '-- web_example.dart
+|-- lib
+|   '-- path.dart
+|-- pubspec.yaml
+'-- test
+    |-- absolute_test.dart
+    |-- basename_test.dart
+    |-- dirname_test.dart
+    |-- extension_test.dart
+    |-- is_absolute_test.dart
+    |-- is_relative_test.dart
+    |-- join_test.dart
+    |-- normalize_test.dart
+    |-- relative_test.dart
+    '-- split_test.dart
+"""));
+    });
+  });
+  test('does not elide children if showAllChildren is true', () {
+    var map = {
+      'dir': {
+        'a.dart': {},
+        'b.dart': {},
+        'c.dart': {},
+        'd.dart': {},
+        'e.dart': {},
+        'f.dart': {},
+        'g.dart': {},
+        'h.dart': {},
+        'i.dart': {},
+        'j.dart': {},
+        'k.dart': {},
+        'l.dart': {}
+      }
+    };
+    expect(tree.fromMap(map, showAllChildren: true), equals("""
+'-- dir
+    |-- a.dart
+    |-- b.dart
+    |-- c.dart
+    |-- d.dart
+    |-- e.dart
+    |-- f.dart
+    |-- g.dart
+    |-- h.dart
+    |-- i.dart
+    |-- j.dart
+    |-- k.dart
+    '-- l.dart
+"""));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/barback/all_includes_all_default_directories_test.dart b/sdk/lib/_internal/pub_generated/test/barback/all_includes_all_default_directories_test.dart
new file mode 100644
index 0000000..f77a754
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/barback/all_includes_all_default_directories_test.dart
@@ -0,0 +1,46 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../serve/utils.dart';
+import '../test_pub.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir('benchmark', [d.file('file.txt', 'benchmark')]),
+            d.dir('bin', [d.file('file.txt', 'bin')]),
+            d.dir('example', [d.file('file.txt', 'example')]),
+            d.dir('test', [d.file('file.txt', 'test')]),
+            d.dir('web', [d.file('file.txt', 'web')]),
+            d.dir('unknown', [d.file('file.txt', 'unknown')])]).create();
+  });
+  integration("build --all finds assets in default source directories", () {
+    schedulePub(
+        args: ["build", "--all"],
+        output: new RegExp(r'Built 5 files to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir('benchmark', [d.file('file.txt', 'benchmark')]),
+                    d.dir('bin', [d.file('file.txt', 'bin')]),
+                    d.dir('example', [d.file('file.txt', 'example')]),
+                    d.dir('test', [d.file('file.txt', 'test')]),
+                    d.dir('web', [d.file('file.txt', 'web')]),
+                    d.nothing('unknown')])]).validate();
+  });
+  integration("serve --all finds assets in default source directories", () {
+    pubServe(args: ["--all"]);
+    requestShouldSucceed("file.txt", "benchmark", root: "benchmark");
+    requestShouldSucceed("file.txt", "bin", root: "bin");
+    requestShouldSucceed("file.txt", "example", root: "example");
+    requestShouldSucceed("file.txt", "test", root: "test");
+    requestShouldSucceed("file.txt", "web", root: "web");
+    expectNotServed("unknown");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/barback/directory_args_test.dart b/sdk/lib/_internal/pub_generated/test/barback/directory_args_test.dart
new file mode 100644
index 0000000..763ea29
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/barback/directory_args_test.dart
@@ -0,0 +1,40 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir('bar', [d.file('file.txt', 'bar')]),
+            d.dir('foo', [d.file('file.txt', 'foo')]),
+            d.dir('test', [d.file('file.txt', 'test')]),
+            d.dir('web', [d.file('file.txt', 'web')])]).create();
+  });
+  integration("builds only the given directories", () {
+    schedulePub(
+        args: ["build", "foo", "bar"],
+        output: new RegExp(r'Built 2 files to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir('bar', [d.file('file.txt', 'bar')]),
+                    d.dir('foo', [d.file('file.txt', 'foo')]),
+                    d.nothing('test'),
+                    d.nothing('web')])]).validate();
+  });
+  integration("serves only the given directories", () {
+    pubServe(args: ["foo", "bar"]);
+    requestShouldSucceed("file.txt", "bar", root: "bar");
+    requestShouldSucceed("file.txt", "foo", root: "foo");
+    expectNotServed("test");
+    expectNotServed("web");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/barback/fails_if_args_with_all_test.dart b/sdk/lib/_internal/pub_generated/test/barback/fails_if_args_with_all_test.dart
new file mode 100644
index 0000000..9a8681d
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/barback/fails_if_args_with_all_test.dart
@@ -0,0 +1,16 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.appDir().create();
+  });
+  pubBuildAndServeShouldFail(
+      "if a directory is passed with --all",
+      args: ["example", "--all"],
+      error: 'Directory names are not allowed if "--all" is passed.',
+      exitCode: exit_codes.USAGE);
+}
diff --git a/sdk/lib/_internal/pub_generated/test/barback/fails_if_dir_arg_does_not_exist_test.dart b/sdk/lib/_internal/pub_generated/test/barback/fails_if_dir_arg_does_not_exist_test.dart
new file mode 100644
index 0000000..f059877
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/barback/fails_if_dir_arg_does_not_exist_test.dart
@@ -0,0 +1,18 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("bar", [d.file("file.txt", "contents")])]).create();
+  });
+  pubBuildAndServeShouldFail(
+      "if a specified directory doesn't exist",
+      args: ["foo", "bar", "baz"],
+      error: 'Directories "foo" and "baz" do not exist.',
+      exitCode: exit_codes.DATA);
+}
diff --git a/sdk/lib/_internal/pub_generated/test/barback/fails_if_dir_outside_package_test.dart b/sdk/lib/_internal/pub_generated/test/barback/fails_if_dir_outside_package_test.dart
new file mode 100644
index 0000000..883d2ca
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/barback/fails_if_dir_outside_package_test.dart
@@ -0,0 +1,16 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.appDir().create();
+  });
+  pubBuildAndServeShouldFail(
+      "if source directory reaches outside the package",
+      args: [".."],
+      error: 'Directory ".." isn\'t in this package.',
+      exitCode: exit_codes.USAGE);
+}
diff --git a/sdk/lib/_internal/pub_generated/test/barback/fails_if_no_default_dirs_test.dart b/sdk/lib/_internal/pub_generated/test/barback/fails_if_no_default_dirs_test.dart
new file mode 100644
index 0000000..394cab6
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/barback/fails_if_no_default_dirs_test.dart
@@ -0,0 +1,19 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.appDir().create();
+  });
+  pubBuildAndServeShouldFail(
+      "if no directories were passed and no default " "ones exist",
+      args: [],
+      buildError: 'Your package must have a "web" directory,\n'
+          'or you must specify the source directories.',
+      serveError: 'Your package must have "web" and/or "test" directories,\n'
+          'or you must specify the source directories.',
+      exitCode: exit_codes.DATA);
+}
diff --git a/sdk/lib/_internal/pub_generated/test/barback/fails_on_all_with_no_buildable_directories_test.dart b/sdk/lib/_internal/pub_generated/test/barback/fails_on_all_with_no_buildable_directories_test.dart
new file mode 100644
index 0000000..df675aa
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/barback/fails_on_all_with_no_buildable_directories_test.dart
@@ -0,0 +1,18 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.appDir().create();
+  });
+  pubBuildAndServeShouldFail(
+      "on --all with no default source directories",
+      args: ["--all"],
+      error: 'There are no source directories present.\n'
+          'The default directories are "benchmark", "bin", "example", '
+          '"test" and "web".',
+      exitCode: exit_codes.DATA);
+}
diff --git a/sdk/lib/_internal/pub_generated/test/barback/fails_on_disallowed_directories_test.dart b/sdk/lib/_internal/pub_generated/test/barback/fails_on_disallowed_directories_test.dart
new file mode 100644
index 0000000..a16e7a6
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/barback/fails_on_disallowed_directories_test.dart
@@ -0,0 +1,18 @@
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.appDir().create();
+  });
+  var libSub = path.join("lib", "sub");
+  pubBuildAndServeShouldFail(
+      "if given directories are not allowed",
+      args: [libSub, "lib"],
+      error: 'Directories "$libSub" and "lib" are not allowed.',
+      exitCode: exit_codes.USAGE);
+}
diff --git a/sdk/lib/_internal/pub_generated/test/barback/fails_on_overlapping_directories_test.dart b/sdk/lib/_internal/pub_generated/test/barback/fails_on_overlapping_directories_test.dart
new file mode 100644
index 0000000..c194bc4
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/barback/fails_on_overlapping_directories_test.dart
@@ -0,0 +1,43 @@
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [
+                    d.dir(
+                        "sub1",
+                        [
+                            d.file("file.txt", "contents"),
+                            d.dir("sub2", [d.file("file.txt", "contents")]),
+                            d.dir("sub3", [d.file("file.txt", "contents")])])])]).create();
+  });
+  var webSub1 = path.join("web", "sub1");
+  var webSub1Sub2 = path.join("web", "sub1", "sub2");
+  var webSub1Sub3 = path.join("web", "sub1", "sub3");
+  pubBuildAndServeShouldFail(
+      "if a superdirectory follows a subdirectory",
+      args: [webSub1Sub2, webSub1],
+      error: 'Directories "$webSub1Sub2" and "$webSub1" cannot overlap.',
+      exitCode: exit_codes.USAGE);
+  pubBuildAndServeShouldFail(
+      "if a subdirectory follows a superdirectory",
+      args: [webSub1, webSub1Sub2],
+      error: 'Directories "$webSub1" and "$webSub1Sub2" cannot overlap.',
+      exitCode: exit_codes.USAGE);
+  pubBuildAndServeShouldFail(
+      "if multiple directories overlap",
+      args: [webSub1, webSub1Sub2, webSub1Sub3],
+      error: 'Directories "$webSub1", "$webSub1Sub2" and "$webSub1Sub3" '
+          'cannot overlap.',
+      exitCode: exit_codes.USAGE);
+}
diff --git a/sdk/lib/_internal/pub_generated/test/barback/subdirectories_test.dart b/sdk/lib/_internal/pub_generated/test/barback/subdirectories_test.dart
new file mode 100644
index 0000000..824d4b7
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/barback/subdirectories_test.dart
@@ -0,0 +1,47 @@
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../serve/utils.dart';
+import '../test_pub.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [
+                    d.dir("one", [d.dir("inner", [d.file("file.txt", "one")])]),
+                    d.dir("two", [d.dir("inner", [d.file("file.txt", "two")])]),
+                    d.dir("nope", [d.dir("inner", [d.file("file.txt", "nope")])])])]).create();
+  });
+  var webOne = p.join("web", "one");
+  var webTwoInner = p.join("web", "two", "inner");
+  integration("builds subdirectories", () {
+    schedulePub(
+        args: ["build", webOne, webTwoInner],
+        output: new RegExp(r'Built 2 files to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                "build",
+                [
+                    d.dir(
+                        "web",
+                        [
+                            d.dir("one", [d.dir("inner", [d.file("file.txt", "one")])]),
+                            d.dir("two", [d.dir("inner", [d.file("file.txt", "two")])]),
+                            d.nothing("nope")])])]).validate();
+  });
+  integration("serves subdirectories", () {
+    pubServe(args: [webOne, webTwoInner]);
+    requestShouldSucceed("inner/file.txt", "one", root: webOne);
+    requestShouldSucceed("file.txt", "two", root: webTwoInner);
+    expectNotServed("web");
+    expectNotServed(p.join("web", "three"));
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/barback/utils.dart b/sdk/lib/_internal/pub_generated/test/barback/utils.dart
new file mode 100644
index 0000000..d57ad30
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/barback/utils.dart
@@ -0,0 +1,37 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../test_pub.dart';
+void pubBuildAndServeShouldFail(String description, {List<String> args,
+    String error, String buildError, String serveError, int exitCode}) {
+  if (error != null) {
+    assert(buildError == null);
+    buildError = error;
+    assert(serveError == null);
+    serveError = error;
+  }
+  var buildExpectation = buildError;
+  var serveExpectation = serveError;
+  if (exitCode == exit_codes.USAGE) {
+    buildExpectation =
+        allOf(startsWith(buildExpectation), contains("Usage: pub build"));
+    serveExpectation =
+        allOf(startsWith(serveExpectation), contains("Usage: pub serve"));
+  }
+  integration("build fails $description", () {
+    schedulePub(
+        args: ["build"]..addAll(args),
+        error: buildExpectation,
+        exitCode: exitCode);
+  });
+  integration("build --format json fails $description", () {
+    schedulePub(args: ["build", "--format", "json"]..addAll(args), outputJson: {
+      "error": buildError
+    }, exitCode: exitCode);
+  });
+  integration("serve fails $description", () {
+    schedulePub(
+        args: ["serve"]..addAll(args),
+        error: serveExpectation,
+        exitCode: exitCode);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/allows_arbitrary_modes_test.dart b/sdk/lib/_internal/pub_generated/test/build/allows_arbitrary_modes_test.dart
new file mode 100644
index 0000000..cd9173e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/allows_arbitrary_modes_test.dart
@@ -0,0 +1,40 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class ModeTransformer extends Transformer {
+  final BarbackSettings settings;
+  ModeTransformer.asPlugin(this.settings);
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    return new Future.value().then((_) {
+      var id = transform.primaryInput.id.changeExtension(".out");
+      transform.addOutput(new Asset.fromString(id, settings.mode.toString()));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("allows user-defined mode names", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", TRANSFORMER)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      schedulePub(args: ["build", "--mode", "depeche"]);
+      d.dir(
+          appPath,
+          [d.dir('build', [d.dir('web', [d.file('foo.out', 'depeche')])])]).validate();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/can_specify_output_directory_test.dart b/sdk/lib/_internal/pub_generated/test/build/can_specify_output_directory_test.dart
new file mode 100644
index 0000000..2aa08f47
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/can_specify_output_directory_test.dart
@@ -0,0 +1,23 @@
+library pub_tests;
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("can specify the output directory to build into", () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir('web', [d.file('file.txt', 'web')])]).create();
+    var outDir = path.join("out", "dir");
+    schedulePub(
+        args: ["build", "-o", outDir],
+        output: contains('Built 1 file to "$outDir".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                "out",
+                [d.dir("dir", [d.dir("web", [d.file("file.txt", "web")])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/cleans_entire_build_directory_test.dart b/sdk/lib/_internal/pub_generated/test/build/cleans_entire_build_directory_test.dart
new file mode 100644
index 0000000..40a1425
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/cleans_entire_build_directory_test.dart
@@ -0,0 +1,27 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("cleans entire build directory before a build", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir('example', [d.file('file.txt', 'example')]),
+            d.dir('test', [d.file('file.txt', 'test')])]).create();
+    schedulePub(
+        args: ["build", "example"],
+        output: new RegExp(r'Built 1 file to "build".'));
+    schedulePub(
+        args: ["build", "test"],
+        output: new RegExp(r'Built 1 file to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.nothing('example'),
+                    d.dir('test', [d.file('file.txt', 'test')])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/copies_browser_js_next_to_entrypoints_test.dart b/sdk/lib/_internal/pub_generated/test/build/copies_browser_js_next_to_entrypoints_test.dart
new file mode 100644
index 0000000..ad6e2f3
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/copies_browser_js_next_to_entrypoints_test.dart
@@ -0,0 +1,90 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("compiles dart.js and interop.js next to entrypoints", () {
+    currentSchedule.timeout *= 3;
+    serveBrowserPackage();
+    d.dir(appPath, [d.appPubspec({
+        "browser": "1.0.0"
+      }),
+          d.dir(
+              'foo',
+              [
+                  d.file('file.dart', 'void main() => print("hello");'),
+                  d.dir(
+                      'subdir',
+                      [d.file('subfile.dart', 'void main() => print("subhello");')])]),
+          d.dir(
+              'web',
+              [
+                  d.file('file.dart', 'void main() => print("hello");'),
+                  d.dir(
+                      'subweb',
+                      [d.file('subfile.dart', 'void main() => print("subhello");')])])]).create();
+    pubGet();
+    schedulePub(
+        args: ["build", "foo", "web"],
+        output: new RegExp(r'Built 16 files to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir(
+                        'foo',
+                        [
+                            d.matcherFile('file.dart.js', isNot(isEmpty)),
+                            d.matcherFile('file.dart.precompiled.js', isNot(isEmpty)),
+                            d.dir(
+                                'packages',
+                                [
+                                    d.dir(
+                                        'browser',
+                                        [
+                                            d.file('dart.js', 'contents of dart.js'),
+                                            d.file('interop.js', 'contents of interop.js')])]),
+                            d.dir(
+                                'subdir',
+                                [
+                                    d.dir(
+                                        'packages',
+                                        [
+                                            d.dir(
+                                                'browser',
+                                                [
+                                                    d.file('dart.js', 'contents of dart.js'),
+                                                    d.file('interop.js', 'contents of interop.js')])]),
+                                    d.matcherFile('subfile.dart.js', isNot(isEmpty)),
+                                    d.matcherFile('subfile.dart.precompiled.js', isNot(isEmpty))])]),
+                    d.dir(
+                        'web',
+                        [
+                            d.matcherFile('file.dart.js', isNot(isEmpty)),
+                            d.matcherFile('file.dart.precompiled.js', isNot(isEmpty)),
+                            d.dir(
+                                'packages',
+                                [
+                                    d.dir(
+                                        'browser',
+                                        [
+                                            d.file('dart.js', 'contents of dart.js'),
+                                            d.file('interop.js', 'contents of interop.js')])]),
+                            d.dir(
+                                'subweb',
+                                [
+                                    d.dir(
+                                        'packages',
+                                        [
+                                            d.dir(
+                                                'browser',
+                                                [
+                                                    d.file('dart.js', 'contents of dart.js'),
+                                                    d.file('interop.js', 'contents of interop.js')])]),
+                                    d.matcherFile('subfile.dart.js', isNot(isEmpty)),
+                                    d.matcherFile('subfile.dart.precompiled.js', isNot(isEmpty))])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/copies_browser_js_with_dependency_override_test.dart b/sdk/lib/_internal/pub_generated/test/build/copies_browser_js_with_dependency_override_test.dart
new file mode 100644
index 0000000..ca5f7c1
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/copies_browser_js_with_dependency_override_test.dart
@@ -0,0 +1,44 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      "compiles dart.js and interop.js next to entrypoints when "
+          "browser is a dependency_override",
+      () {
+    currentSchedule.timeout *= 3;
+    serveBrowserPackage();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependency_overrides": {
+          "browser": "any"
+        }
+      }),
+          d.dir(
+              'web',
+              [d.file('file.dart', 'void main() => print("hello");')])]).create();
+    pubGet();
+    schedulePub(
+        args: ["build", "--all"],
+        output: new RegExp(r'Built 4 files to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir(
+                        'web',
+                        [
+                            d.dir(
+                                'packages',
+                                [
+                                    d.dir(
+                                        'browser',
+                                        [
+                                            d.file('dart.js', 'contents of dart.js'),
+                                            d.file('interop.js', 'contents of interop.js')])])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/copies_browser_js_with_dev_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/build/copies_browser_js_with_dev_dependency_test.dart
new file mode 100644
index 0000000..ef2821c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/copies_browser_js_with_dev_dependency_test.dart
@@ -0,0 +1,44 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      "compiles dart.js and interop.js next to entrypoints when "
+          "browser is a dev dependency",
+      () {
+    currentSchedule.timeout *= 3;
+    serveBrowserPackage();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dev_dependencies": {
+          "browser": "any"
+        }
+      }),
+          d.dir(
+              'web',
+              [d.file('file.dart', 'void main() => print("hello");')])]).create();
+    pubGet();
+    schedulePub(
+        args: ["build", "--all"],
+        output: new RegExp(r'Built 4 files to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir(
+                        'web',
+                        [
+                            d.dir(
+                                'packages',
+                                [
+                                    d.dir(
+                                        'browser',
+                                        [
+                                            d.file('dart.js', 'contents of dart.js'),
+                                            d.file('interop.js', 'contents of interop.js')])])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/copies_non_dart_files_to_build_test.dart b/sdk/lib/_internal/pub_generated/test/build/copies_non_dart_files_to_build_test.dart
new file mode 100644
index 0000000..58c2e63
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/copies_non_dart_files_to_build_test.dart
@@ -0,0 +1,31 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("copies non-Dart files to build/", () {
+    servePackages((builder) => builder.serve("browser", "1.0.0"));
+    d.dir(appPath, [d.appPubspec({
+        "browser": "1.0.0"
+      }),
+          d.dir(
+              'web',
+              [
+                  d.file('file.txt', 'contents'),
+                  d.dir('subdir', [d.file('subfile.txt', 'subcontents')])])]).create();
+    schedulePub(
+        args: ["build"],
+        output: new RegExp(r'Built 2 files to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir(
+                        'web',
+                        [
+                            d.nothing('packages'),
+                            d.file('file.txt', 'contents'),
+                            d.dir('subdir', [d.file('subfile.txt', 'subcontents')])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/defaults_to_release_mode_test.dart b/sdk/lib/_internal/pub_generated/test/build/defaults_to_release_mode_test.dart
new file mode 100644
index 0000000..f09665c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/defaults_to_release_mode_test.dart
@@ -0,0 +1,40 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class ModeTransformer extends Transformer {
+  final BarbackSettings settings;
+  ModeTransformer.asPlugin(this.settings);
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    return new Future.value().then((_) {
+      var id = transform.primaryInput.id.changeExtension(".out");
+      transform.addOutput(new Asset.fromString(id, settings.mode.toString()));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("defaults to release mode", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", TRANSFORMER)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      schedulePub(args: ["build"]);
+      d.dir(
+          appPath,
+          [d.dir('build', [d.dir('web', [d.file('foo.out', 'release')])])]).validate();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/handles_long_paths_test.dart b/sdk/lib/_internal/pub_generated/test/build/handles_long_paths_test.dart
new file mode 100644
index 0000000..88e6fd6
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/handles_long_paths_test.dart
@@ -0,0 +1,38 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:path/path.dart' as path;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("handles long relative paths", () {
+    currentSchedule.timeout *= 3;
+    d.dir(
+        "some_long_dependency_name",
+        [
+            d.libPubspec("foo", "0.0.1"),
+            d.dir("lib", [d.file("foo.txt", "foo")])]).create();
+    var longPath = "";
+    for (var i = 0; i < 100; i++) {
+      longPath = path.join(longPath, "..", "some_long_dependency_name");
+    }
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": longPath
+        }
+      }), d.dir("web", [d.file("index.html", "html")])]).create();
+    schedulePub(
+        args: ["build"],
+        output: new RegExp(r'Built 2 files to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir(
+                        'web',
+                        [
+                            d.file("index.html", "html"),
+                            d.dir('packages', [d.dir('foo', [d.file('foo.txt', 'foo')])])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/includes_assets_from_dependencies_test.dart b/sdk/lib/_internal/pub_generated/test/build/includes_assets_from_dependencies_test.dart
new file mode 100644
index 0000000..4f60927
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/includes_assets_from_dependencies_test.dart
@@ -0,0 +1,61 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("includes assets from the 'lib' directory of dependencies", () {
+    currentSchedule.timeout *= 3;
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "0.0.1"),
+            d.dir(
+                "lib",
+                [
+                    d.file("foo.txt", "foo"),
+                    d.dir("sub", [d.file("bar.txt", "bar")])])]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      }),
+          d.dir("example", [d.file("index.html", "html")]),
+          d.dir(
+              "web",
+              [
+                  d.file("index.html", "html"),
+                  d.dir("sub", [d.file("index.html", "html")])])]).create();
+    schedulePub(
+        args: ["build", "--all"],
+        output: new RegExp(r'Built 7 files to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir(
+                        'example',
+                        [
+                            d.file("index.html", "html"),
+                            d.dir(
+                                'packages',
+                                [
+                                    d.dir(
+                                        'foo',
+                                        [d.file('foo.txt', 'foo'), d.dir('sub', [d.file('bar.txt', 'bar')])])])]),
+                    d.dir(
+                        'web',
+                        [
+                            d.file("index.html", "html"),
+                            d.dir(
+                                'packages',
+                                [
+                                    d.dir(
+                                        'foo',
+                                        [d.file('foo.txt', 'foo'), d.dir('sub', [d.file('bar.txt', 'bar')])])]),
+                            d.dir(
+                                "sub",
+                                [d.file("index.html", "html"), d.nothing("packages")])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/includes_dart_files_from_dependencies_in_debug_test.dart b/sdk/lib/_internal/pub_generated/test/build/includes_dart_files_from_dependencies_in_debug_test.dart
new file mode 100644
index 0000000..72f265f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/includes_dart_files_from_dependencies_in_debug_test.dart
@@ -0,0 +1,56 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("includes .dart files from dependencies in debug mode", () {
+    currentSchedule.timeout *= 3;
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "0.0.1"),
+            d.dir(
+                "lib",
+                [
+                    d.file('foo.dart', 'foo() => print("hello");'),
+                    d.dir("sub", [d.file('bar.dart', 'bar() => print("hello");')])])]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      }),
+          d.dir(
+              "example",
+              [
+                  d.file("main.dart", 'myapp() => print("not entrypoint");'),
+                  d.dir(
+                      "sub",
+                      [d.file("main.dart", 'myapp() => print("not entrypoint");')])])]).create();
+    schedulePub(
+        args: ["build", "--mode", "debug", "example"],
+        output: new RegExp(r'Built \d+ files to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir(
+                        'example',
+                        [
+                            d.file("main.dart", 'myapp() => print("not entrypoint");'),
+                            d.dir(
+                                'packages',
+                                [
+                                    d.dir(
+                                        'foo',
+                                        [
+                                            d.file('foo.dart', 'foo() => print("hello");'),
+                                            d.dir("sub", [d.file('bar.dart', 'bar() => print("hello");')])])]),
+                            d.dir(
+                                "sub",
+                                [
+                                    d.file("main.dart", 'myapp() => print("not entrypoint");'),
+                                    d.nothing("packages")])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/includes_dart_files_in_debug_mode_test.dart b/sdk/lib/_internal/pub_generated/test/build/includes_dart_files_in_debug_mode_test.dart
new file mode 100644
index 0000000..3b9d5c7
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/includes_dart_files_in_debug_mode_test.dart
@@ -0,0 +1,39 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("includes Dart files in debug mode", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                'web',
+                [
+                    d.file('file1.dart', 'var main = () => print("hello");'),
+                    d.file('file2.dart', 'void main(arg1, arg2, arg3) => print("hello");'),
+                    d.file('file3.dart', 'class Foo { void main() => print("hello"); }'),
+                    d.file('file4.dart', 'var foo;')])]).create();
+    schedulePub(
+        args: ["build", "--mode", "debug"],
+        output: new RegExp(r'Built \d+ files to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir(
+                        'web',
+                        [
+                            d.nothing('file1.dart.js'),
+                            d.matcherFile('file1.dart', isNot(isEmpty)),
+                            d.nothing('file2.dart.js'),
+                            d.matcherFile('file2.dart', isNot(isEmpty)),
+                            d.nothing('file3.dart.js'),
+                            d.matcherFile('file3.dart', isNot(isEmpty)),
+                            d.nothing('file4.dart.js'),
+                            d.matcherFile('file4.dart', isNot(isEmpty))])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/outputs_error_to_json_test.dart b/sdk/lib/_internal/pub_generated/test/build/outputs_error_to_json_test.dart
new file mode 100644
index 0000000..b1a894f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/outputs_error_to_json_test.dart
@@ -0,0 +1,41 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class RewriteTransformer extends Transformer {
+  RewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) => throw new Exception('oh no!');
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("outputs error to JSON in a failed build", () {
+      currentSchedule.timeout *= 2;
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp"]
+        }),
+            d.dir("lib", [d.file("transformer.dart", TRANSFORMER)]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      schedulePub(args: ["build", "--format", "json"], outputJson: {
+        "buildResult": "failure",
+        "errors": [{
+            "error": startsWith(
+                "Transform Rewrite on myapp|web/foo.txt " "threw error: oh no!")
+          }],
+        "log": []
+      }, exitCode: exit_codes.DATA);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/outputs_results_to_json_test.dart b/sdk/lib/_internal/pub_generated/test/build/outputs_results_to_json_test.dart
new file mode 100644
index 0000000..407151b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/outputs_results_to_json_test.dart
@@ -0,0 +1,64 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("outputs results to JSON in a successful build", () {
+    currentSchedule.timeout *= 3;
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                'web',
+                [d.file('main.dart', 'void main() => print("hello");')])]).create();
+    schedulePub(args: ["build", "--format", "json"], outputJson: {
+      'buildResult': 'success',
+      'outputDirectory': 'build',
+      'numFiles': 2,
+      'log': [{
+          'level': 'Info',
+          'transformer': {
+            'name': 'Dart2JS',
+            'primaryInput': {
+              'package': 'myapp',
+              'path': 'web/main.dart'
+            }
+          },
+          'assetId': {
+            'package': 'myapp',
+            'path': 'web/main.dart'
+          },
+          'message': 'Compiling myapp|web/main.dart...'
+        }, {
+          'level': 'Info',
+          'transformer': {
+            'name': 'Dart2JS',
+            'primaryInput': {
+              'package': 'myapp',
+              'path': 'web/main.dart'
+            }
+          },
+          'assetId': {
+            'package': 'myapp',
+            'path': 'web/main.dart'
+          },
+          'message': contains(r'to compile myapp|web/main.dart.')
+        }, {
+          'level': 'Fine',
+          'transformer': {
+            'name': 'Dart2JS',
+            'primaryInput': {
+              'package': 'myapp',
+              'path': 'web/main.dart'
+            }
+          },
+          'assetId': {
+            'package': 'myapp',
+            'path': 'web/main.dart'
+          },
+          'message': contains(r'Took')
+        }]
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/preserves_htaccess_test.dart b/sdk/lib/_internal/pub_generated/test/build/preserves_htaccess_test.dart
new file mode 100644
index 0000000..645e5ac
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/preserves_htaccess_test.dart
@@ -0,0 +1,26 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("preserves .htaccess as a special case", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                'web',
+                [d.file('.htaccess', 'fblthp'), d.file('.hidden', 'asdfgh')])]).create();
+    schedulePub(
+        args: ["build"],
+        output: new RegExp(r'Built \d+ files? to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir(
+                        'web',
+                        [d.file('.htaccess', 'fblthp'), d.nothing('.hidden')])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/build/utils.dart b/sdk/lib/_internal/pub_generated/test/build/utils.dart
new file mode 100644
index 0000000..8390866
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/build/utils.dart
@@ -0,0 +1,36 @@
+import 'dart:convert';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+void serveBrowserPackage() {
+  serve([d.dir('api', [d.dir('packages', [d.file('browser', JSON.encode({
+          'versions': [packageVersionApiMap(packageMap('browser', '1.0.0'))]
+        })),
+            d.dir(
+                'browser',
+                [
+                    d.dir(
+                        'versions',
+                        [
+                            d.file(
+                                '1.0.0',
+                                JSON.encode(
+                                    packageVersionApiMap(packageMap('browser', '1.0.0'), full: true)))])])])]),
+            d.dir(
+                'packages',
+                [
+                    d.dir(
+                        'browser',
+                        [
+                            d.dir(
+                                'versions',
+                                [
+                                    d.tar(
+                                        '1.0.0.tar.gz',
+                                        [
+                                            d.file('pubspec.yaml', yaml(packageMap("browser", "1.0.0"))),
+                                            d.dir(
+                                                'lib',
+                                                [
+                                                    d.file('dart.js', 'contents of dart.js'),
+                                                    d.file('interop.js', 'contents of interop.js')])])])])])]);
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/add/adds_latest_matching_version_test.dart b/sdk/lib/_internal/pub_generated/test/cache/add/adds_latest_matching_version_test.dart
new file mode 100644
index 0000000..ed64004
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/add/adds_latest_matching_version_test.dart
@@ -0,0 +1,27 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      'adds the latest version of the package matching the ' 'version constraint',
+      () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.2");
+      builder.serve("foo", "1.2.3");
+      builder.serve("foo", "2.0.0-dev");
+      builder.serve("foo", "2.0.0");
+    });
+    schedulePub(
+        args: ["cache", "add", "foo", "-v", ">=1.0.0 <2.0.0"],
+        output: 'Downloading foo 1.2.3...');
+    d.cacheDir({
+      "foo": "1.2.3"
+    }).validate();
+    d.hostedCache(
+        [
+            d.nothing("foo-1.2.2"),
+            d.nothing("foo-2.0.0-dev"),
+            d.nothing("foo-2.0.0")]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/add/adds_latest_version_test.dart b/sdk/lib/_internal/pub_generated/test/cache/add/adds_latest_version_test.dart
new file mode 100644
index 0000000..96d08d7
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/add/adds_latest_version_test.dart
@@ -0,0 +1,19 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('adds the latest stable version of the package', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.2");
+      builder.serve("foo", "1.2.3");
+      builder.serve("foo", "1.2.4-dev");
+    });
+    schedulePub(
+        args: ["cache", "add", "foo"],
+        output: 'Downloading foo 1.2.3...');
+    d.cacheDir({
+      "foo": "1.2.3"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/add/all_adds_all_matching_versions_test.dart b/sdk/lib/_internal/pub_generated/test/cache/add/all_adds_all_matching_versions_test.dart
new file mode 100644
index 0000000..24d0efc
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/add/all_adds_all_matching_versions_test.dart
@@ -0,0 +1,29 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('"--all" adds all matching versions of the package', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.2");
+      builder.serve("foo", "1.2.3-dev");
+      builder.serve("foo", "1.2.3");
+      builder.serve("foo", "2.0.0");
+    });
+    schedulePub(
+        args: ["cache", "add", "foo", "-v", ">=1.0.0 <2.0.0", "--all"],
+        output: '''
+          Downloading foo 1.2.2...
+          Downloading foo 1.2.3-dev...
+          Downloading foo 1.2.3...''');
+    d.cacheDir({
+      "foo": "1.2.2"
+    }).validate();
+    d.cacheDir({
+      "foo": "1.2.3-dev"
+    }).validate();
+    d.cacheDir({
+      "foo": "1.2.3"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/add/all_with_some_versions_present_test.dart b/sdk/lib/_internal/pub_generated/test/cache/add/all_with_some_versions_present_test.dart
new file mode 100644
index 0000000..d9c0321
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/add/all_with_some_versions_present_test.dart
@@ -0,0 +1,37 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('"--all" adds all non-installed versions of the package', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.1");
+      builder.serve("foo", "1.2.2");
+      builder.serve("foo", "1.2.3");
+      builder.serve("foo", "2.0.0");
+    });
+    schedulePub(
+        args: ["cache", "add", "foo", "-v", "1.2.1"],
+        output: 'Downloading foo 1.2.1...');
+    schedulePub(
+        args: ["cache", "add", "foo", "-v", "1.2.3"],
+        output: 'Downloading foo 1.2.3...');
+    schedulePub(args: ["cache", "add", "foo", "--all"], output: '''
+          Already cached foo 1.2.1.
+          Downloading foo 1.2.2...
+          Already cached foo 1.2.3.
+          Downloading foo 2.0.0...''');
+    d.cacheDir({
+      "foo": "1.2.1"
+    }).validate();
+    d.cacheDir({
+      "foo": "1.2.2"
+    }).validate();
+    d.cacheDir({
+      "foo": "1.2.3"
+    }).validate();
+    d.cacheDir({
+      "foo": "2.0.0"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/add/already_cached_test.dart b/sdk/lib/_internal/pub_generated/test/cache/add/already_cached_test.dart
new file mode 100644
index 0000000..316c38f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/add/already_cached_test.dart
@@ -0,0 +1,20 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('does nothing if the package is already cached', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.3");
+    });
+    schedulePub(
+        args: ["cache", "add", "foo"],
+        output: 'Downloading foo 1.2.3...');
+    schedulePub(
+        args: ["cache", "add", "foo"],
+        output: 'Already cached foo 1.2.3.');
+    d.cacheDir({
+      "foo": "1.2.3"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/add/bad_version_test.dart b/sdk/lib/_internal/pub_generated/test/cache/add/bad_version_test.dart
new file mode 100644
index 0000000..3f4963b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/add/bad_version_test.dart
@@ -0,0 +1,19 @@
+library pub_tests;
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('fails if the version constraint cannot be parsed', () {
+    schedulePub(args: ["cache", "add", "foo", "-v", "1.0"], error: """
+            Could not parse version "1.0". Unknown text at "1.0".
+            
+            Usage: pub cache add <package> [--version <constraint>] [--all]
+            -h, --help       Print usage information for this command.
+                --all        Install all matching versions.
+            -v, --version    Version constraint.
+
+            Run "pub help" to see global options.
+            See http://dartlang.org/tools/pub/cmd/pub-cache.html for detailed documentation.
+            """, exitCode: exit_codes.USAGE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/add/missing_package_arg_test.dart b/sdk/lib/_internal/pub_generated/test/cache/add/missing_package_arg_test.dart
new file mode 100644
index 0000000..669c937
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/add/missing_package_arg_test.dart
@@ -0,0 +1,19 @@
+library pub_tests;
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('fails if no package was given', () {
+    schedulePub(args: ["cache", "add"], error: """
+            No package to add given.
+            
+            Usage: pub cache add <package> [--version <constraint>] [--all]
+            -h, --help       Print usage information for this command.
+                --all        Install all matching versions.
+            -v, --version    Version constraint.
+
+            Run "pub help" to see global options.
+            See http://dartlang.org/tools/pub/cmd/pub-cache.html for detailed documentation.
+            """, exitCode: exit_codes.USAGE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/add/no_matching_version_test.dart b/sdk/lib/_internal/pub_generated/test/cache/add/no_matching_version_test.dart
new file mode 100644
index 0000000..090b6ff
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/add/no_matching_version_test.dart
@@ -0,0 +1,15 @@
+library pub_tests;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('fails if no version matches the version constraint', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.2");
+      builder.serve("foo", "1.2.3");
+    });
+    schedulePub(
+        args: ["cache", "add", "foo", "-v", ">2.0.0"],
+        error: 'Package foo has no versions that match >2.0.0.',
+        exitCode: 1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/add/package_not_found_test.dart b/sdk/lib/_internal/pub_generated/test/cache/add/package_not_found_test.dart
new file mode 100644
index 0000000..b40dd63
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/add/package_not_found_test.dart
@@ -0,0 +1,13 @@
+library pub_tests;
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('fails if the package cound not be found on the source', () {
+    serveNoPackages();
+    schedulePub(
+        args: ["cache", "add", "foo"],
+        error: new RegExp(r"Could not find package foo at http://.*"),
+        exitCode: exit_codes.UNAVAILABLE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/add/unexpected_arguments_test.dart b/sdk/lib/_internal/pub_generated/test/cache/add/unexpected_arguments_test.dart
new file mode 100644
index 0000000..7a87518
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/add/unexpected_arguments_test.dart
@@ -0,0 +1,19 @@
+library pub_tests;
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('fails if there are extra arguments', () {
+    schedulePub(args: ["cache", "add", "foo", "bar", "baz"], error: """
+            Unexpected arguments "bar" and "baz".
+            
+            Usage: pub cache add <package> [--version <constraint>] [--all]
+            -h, --help       Print usage information for this command.
+                --all        Install all matching versions.
+            -v, --version    Version constraint.
+
+            Run "pub help" to see global options.
+            See http://dartlang.org/tools/pub/cmd/pub-cache.html for detailed documentation.
+            """, exitCode: exit_codes.USAGE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/list_test.dart b/sdk/lib/_internal/pub_generated/test/cache/list_test.dart
new file mode 100644
index 0000000..cfce207
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/list_test.dart
@@ -0,0 +1,79 @@
+library pub_cache_test;
+import 'package:path/path.dart' as path;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  hostedDir(package) {
+    return path.join(
+        sandboxDir,
+        cachePath,
+        "hosted",
+        "pub.dartlang.org",
+        package);
+  }
+  integration('running pub cache list when there is no cache', () {
+    schedulePub(args: ['cache', 'list'], output: '{"packages":{}}');
+  });
+  integration('running pub cache list on empty cache', () {
+    d.dir(
+        cachePath,
+        [d.dir('hosted', [d.dir('pub.dartlang.org', [])])]).create();
+    schedulePub(args: ['cache', 'list'], outputJson: {
+      "packages": {}
+    });
+  });
+  integration('running pub cache list', () {
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'hosted',
+                [
+                    d.dir(
+                        'pub.dartlang.org',
+                        [
+                            d.dir("foo-1.2.3", [d.libPubspec("foo", "1.2.3"), d.libDir("foo")]),
+                            d.dir(
+                                "bar-2.0.0",
+                                [d.libPubspec("bar", "2.0.0"), d.libDir("bar")])])])]).create();
+    schedulePub(args: ['cache', 'list'], outputJson: {
+      "packages": {
+        "bar": {
+          "2.0.0": {
+            "location": hostedDir('bar-2.0.0')
+          }
+        },
+        "foo": {
+          "1.2.3": {
+            "location": hostedDir('foo-1.2.3')
+          }
+        }
+      }
+    });
+  });
+  integration('includes packages containing deps with bad sources', () {
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'hosted',
+                [
+                    d.dir(
+                        'pub.dartlang.org',
+                        [d.dir("foo-1.2.3", [d.libPubspec("foo", "1.2.3", deps: {
+              "bar": {
+                "bad": "bar"
+              }
+            }), d.libDir("foo")])])])]).create();
+    schedulePub(args: ['cache', 'list'], outputJson: {
+      "packages": {
+        "foo": {
+          "1.2.3": {
+            "location": hostedDir('foo-1.2.3')
+          }
+        }
+      }
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/repair/empty_cache_test.dart b/sdk/lib/_internal/pub_generated/test/cache/repair/empty_cache_test.dart
new file mode 100644
index 0000000..e078722
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/repair/empty_cache_test.dart
@@ -0,0 +1,10 @@
+library pub_tests;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('does nothing if the cache is empty', () {
+    schedulePub(
+        args: ["cache", "repair"],
+        output: "No packages in cache, so nothing to repair.");
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/repair/handles_failure_test.dart b/sdk/lib/_internal/pub_generated/test/cache/repair/handles_failure_test.dart
new file mode 100644
index 0000000..e626869
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/repair/handles_failure_test.dart
@@ -0,0 +1,40 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('handles failure to reinstall some packages', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.3");
+      builder.serve("foo", "1.2.5");
+    });
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'hosted',
+                [
+                    d.async(
+                        port.then(
+                            (p) =>
+                                d.dir(
+                                    'localhost%58$p',
+                                    [
+                                        d.dir("foo-1.2.3", [d.libPubspec("foo", "1.2.3"), d.file("broken.txt")]),
+                                        d.dir("foo-1.2.4", [d.libPubspec("foo", "1.2.4"), d.file("broken.txt")]),
+                                        d.dir(
+                                            "foo-1.2.5",
+                                            [d.libPubspec("foo", "1.2.5"), d.file("broken.txt")])])))])]).create();
+    var pub = startPub(args: ["cache", "repair"]);
+    pub.stdout.expect("Downloading foo 1.2.3...");
+    pub.stdout.expect("Downloading foo 1.2.4...");
+    pub.stdout.expect("Downloading foo 1.2.5...");
+    pub.stderr.expect(startsWith("Failed to repair foo 1.2.4. Error:"));
+    pub.stderr.expect("HTTP error 404: Not Found");
+    pub.stdout.expect("Reinstalled 2 packages.");
+    pub.stdout.expect("Failed to reinstall 1 package.");
+    pub.shouldExit(exit_codes.UNAVAILABLE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/repair/reinstalls_git_packages_test.dart b/sdk/lib/_internal/pub_generated/test/cache/repair/reinstalls_git_packages_test.dart
new file mode 100644
index 0000000..812b7b7
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/repair/reinstalls_git_packages_test.dart
@@ -0,0 +1,42 @@
+library pub_tests;
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../../lib/src/io.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('reinstalls previously cached git packages', () {
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet();
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.1')]).commit();
+    pubUpgrade();
+    var fooDirs;
+    schedule(() {
+      var gitCacheDir = path.join(sandboxDir, cachePath, "git");
+      fooDirs = listDir(
+          gitCacheDir).where((dir) => path.basename(dir).startsWith("foo-")).toList();
+      for (var dir in fooDirs) {
+        deleteEntry(path.join(dir, "lib", "foo.dart"));
+      }
+    });
+    schedulePub(args: ["cache", "repair"], output: '''
+          Resetting Git repository for foo 1.0.0...
+          Resetting Git repository for foo 1.0.1...
+          Reinstalled 2 packages.''');
+    schedule(() {
+      var fooLibs = fooDirs.map((dir) {
+        var fooDirName = path.basename(dir);
+        return d.dir(
+            fooDirName,
+            [d.dir("lib", [d.file("foo.dart", 'main() => "foo";')])]);
+      }).toList();
+      d.dir(cachePath, [d.dir("git", fooLibs)]).validate();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/cache/repair/reinstalls_hosted_packages_test.dart b/sdk/lib/_internal/pub_generated/test/cache/repair/reinstalls_hosted_packages_test.dart
new file mode 100644
index 0000000..5e710a0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/cache/repair/reinstalls_hosted_packages_test.dart
@@ -0,0 +1,42 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('reinstalls previously cached hosted packages', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.3");
+      builder.serve("foo", "1.2.4");
+      builder.serve("foo", "1.2.5");
+      builder.serve("bar", "1.2.3");
+      builder.serve("bar", "1.2.4");
+    });
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'hosted',
+                [
+                    d.async(
+                        port.then(
+                            (p) =>
+                                d.dir(
+                                    'localhost%58$p',
+                                    [
+                                        d.dir("foo-1.2.3", [d.libPubspec("foo", "1.2.3"), d.file("broken.txt")]),
+                                        d.dir("foo-1.2.5", [d.libPubspec("foo", "1.2.5"), d.file("broken.txt")]),
+                                        d.dir(
+                                            "bar-1.2.4",
+                                            [d.libPubspec("bar", "1.2.4"), d.file("broken.txt")])])))])]).create();
+    schedulePub(args: ["cache", "repair"], output: '''
+          Downloading bar 1.2.4...
+          Downloading foo 1.2.3...
+          Downloading foo 1.2.5...
+          Reinstalled 3 packages.''');
+    d.hostedCache(
+        [
+            d.dir("bar-1.2.4", [d.nothing("broken.txt")]),
+            d.dir("foo-1.2.3", [d.nothing("broken.txt")]),
+            d.dir("foo-1.2.5", [d.nothing("broken.txt")])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/allows_import_in_dart_code_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/allows_import_in_dart_code_test.dart
new file mode 100644
index 0000000..ba3dbe1
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/allows_import_in_dart_code_test.dart
@@ -0,0 +1,34 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  integration("handles imports in the Dart code", () {
+    d.dir(
+        "foo",
+        [d.libPubspec("foo", "0.0.1"), d.dir("lib", [d.file("foo.dart", """
+library foo;
+foo() => 'footext';
+""")])]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      }), d.dir("lib", [d.file("lib.dart", """
+library lib;
+lib() => 'libtext';
+""")]), d.dir("web", [d.file("main.dart", """
+import 'package:foo/foo.dart';
+import 'package:myapp/lib.dart';
+void main() {
+  print(foo());
+  print(lib());
+}
+""")])]).create();
+    pubServe(shouldGetFirst: true);
+    requestShouldSucceed("main.dart.js", contains("footext"));
+    requestShouldSucceed("main.dart.js", contains("libtext"));
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/compiles_entrypoints_in_root_package_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/compiles_entrypoints_in_root_package_test.dart
new file mode 100644
index 0000000..15bb7f9
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/compiles_entrypoints_in_root_package_test.dart
@@ -0,0 +1,81 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("compiles Dart entrypoints in root package to JS", () {
+    currentSchedule.timeout *= 3;
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                'benchmark',
+                [
+                    d.file('file.dart', 'void main() => print("hello");'),
+                    d.file('lib.dart', 'void foo() => print("hello");'),
+                    d.dir('subdir', [d.file('subfile.dart', 'void main() => print("ping");')])]),
+            d.dir(
+                'foo',
+                [
+                    d.file('file.dart', 'void main() => print("hello");'),
+                    d.file('lib.dart', 'void foo() => print("hello");'),
+                    d.dir('subdir', [d.file('subfile.dart', 'void main() => print("ping");')])]),
+            d.dir(
+                'web',
+                [
+                    d.file('file.dart', 'void main() => print("hello");'),
+                    d.file('lib.dart', 'void foo() => print("hello");'),
+                    d.dir(
+                        'subdir',
+                        [d.file('subfile.dart', 'void main() => print("ping");')])])]).create();
+    schedulePub(
+        args: ["build", "benchmark", "foo", "web"],
+        output: new RegExp(r'Built 12 files to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir(
+                        'benchmark',
+                        [
+                            d.matcherFile('file.dart.js', isNot(isEmpty)),
+                            d.matcherFile('file.dart.precompiled.js', isNot(isEmpty)),
+                            d.nothing('file.dart'),
+                            d.nothing('lib.dart'),
+                            d.dir(
+                                'subdir',
+                                [
+                                    d.matcherFile('subfile.dart.js', isNot(isEmpty)),
+                                    d.matcherFile('subfile.dart.precompiled.js', isNot(isEmpty)),
+                                    d.nothing('subfile.dart')])]),
+                    d.dir(
+                        'foo',
+                        [
+                            d.matcherFile('file.dart.js', isNot(isEmpty)),
+                            d.matcherFile('file.dart.precompiled.js', isNot(isEmpty)),
+                            d.nothing('file.dart'),
+                            d.nothing('lib.dart'),
+                            d.dir(
+                                'subdir',
+                                [
+                                    d.matcherFile('subfile.dart.js', isNot(isEmpty)),
+                                    d.matcherFile('subfile.dart.precompiled.js', isNot(isEmpty)),
+                                    d.nothing('subfile.dart')])]),
+                    d.dir(
+                        'web',
+                        [
+                            d.matcherFile('file.dart.js', isNot(isEmpty)),
+                            d.matcherFile('file.dart.precompiled.js', isNot(isEmpty)),
+                            d.nothing('file.dart'),
+                            d.nothing('lib.dart'),
+                            d.dir(
+                                'subdir',
+                                [
+                                    d.matcherFile('subfile.dart.js', isNot(isEmpty)),
+                                    d.matcherFile('subfile.dart.precompiled.js', isNot(isEmpty)),
+                                    d.nothing('subfile.dart')])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/compiles_generated_dart_file_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/compiles_generated_dart_file_test.dart
new file mode 100644
index 0000000..4af573e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/compiles_generated_dart_file_test.dart
@@ -0,0 +1,25 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("compiles a generated Dart file to JS", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "version": "0.0.1",
+          "transformers": ["myapp/transformer"]
+        }),
+            d.dir("lib", [d.file("transformer.dart", dartTransformer("munge"))]),
+            d.dir("web", [d.file("main.dart", """
+const TOKEN = "before";
+void main() => print(TOKEN);
+""")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("main.dart.js", contains("(before, munge)"));
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/compiles_generated_file_from_dependency_outside_web_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/compiles_generated_file_from_dependency_outside_web_test.dart
new file mode 100644
index 0000000..c952fd5
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/compiles_generated_file_from_dependency_outside_web_test.dart
@@ -0,0 +1,33 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration(
+        "compiles a Dart file that imports a generated file to JS " "outside web/",
+        () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "version": "0.0.1",
+          "transformers": ["myapp/transformer"]
+        }),
+            d.dir("lib", [d.file("transformer.dart", dartTransformer("munge"))]),
+            d.dir("test", [d.file("main.dart", """
+import "other.dart";
+void main() => print(TOKEN);
+"""), d.file("other.dart", """
+library other;
+const TOKEN = "before";
+""")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe(args: ["test"]);
+      requestShouldSucceed(
+          "main.dart.js",
+          contains("(before, munge)"),
+          root: "test");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/compiles_generated_file_from_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/compiles_generated_file_from_dependency_test.dart
new file mode 100644
index 0000000..86533b4
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/compiles_generated_file_from_dependency_test.dart
@@ -0,0 +1,35 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration(
+        "compiles a Dart file that imports a generated file in another "
+            "package to JS",
+        () {
+      d.dir("foo", [d.pubspec({
+          "name": "foo",
+          "version": "0.0.1",
+          "transformers": ["foo/transformer"]
+        }), d.dir("lib", [d.file("foo.dart", """
+library foo;
+const TOKEN = "before";
+foo() => TOKEN;
+"""), d.file("transformer.dart", dartTransformer("munge"))])]).create();
+      d.dir(appPath, [d.appPubspec({
+          "foo": {
+            "path": "../foo"
+          }
+        }), d.dir("web", [d.file("main.dart", """
+import "package:foo/foo.dart";
+main() => print(foo());
+""")])]).create();
+      createLockFile("myapp", sandbox: ["foo"], pkg: ["barback"]);
+      pubServe();
+      requestShouldSucceed("main.dart.js", contains("(before, munge)"));
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/compiles_imported_generated_file_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/compiles_imported_generated_file_test.dart
new file mode 100644
index 0000000..9e43b60
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/compiles_imported_generated_file_test.dart
@@ -0,0 +1,28 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("compiles a Dart file that imports a generated file to JS", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "version": "0.0.1",
+          "transformers": ["myapp/transformer"]
+        }),
+            d.dir("lib", [d.file("transformer.dart", dartTransformer("munge"))]),
+            d.dir("web", [d.file("main.dart", """
+import "other.dart";
+void main() => print(TOKEN);
+"""), d.file("other.dart", """
+library other;
+const TOKEN = "before";
+""")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("main.dart.js", contains("(before, munge)"));
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/converts_isolate_entrypoint_in_web_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/converts_isolate_entrypoint_in_web_test.dart
new file mode 100644
index 0000000..acfbe4b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/converts_isolate_entrypoint_in_web_test.dart
@@ -0,0 +1,24 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  integration("converts a Dart isolate entrypoint in web to JS", () {
+    currentSchedule.timeout *= 2;
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [
+                    d.file(
+                        "isolate.dart",
+                        "void main(List<String> args, SendPort "
+                            "sendPort) => print('hello');")])]).create();
+    pubServe();
+    requestShouldSucceed("isolate.dart.js", contains("hello"));
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/does_not_compile_if_disabled_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/does_not_compile_if_disabled_test.dart
new file mode 100644
index 0000000..3b1ba22
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/does_not_compile_if_disabled_test.dart
@@ -0,0 +1,18 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  integration("does not compile if dart2js is disabled", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [d.file("main.dart", "void main() => print('hello');")])]).create();
+    pubServe(args: ["--no-dart2js"]);
+    requestShould404("main.dart.js");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/does_not_compile_until_its_output_is_requested_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/does_not_compile_until_its_output_is_requested_test.dart
new file mode 100644
index 0000000..f73badd
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/does_not_compile_until_its_output_is_requested_test.dart
@@ -0,0 +1,22 @@
+import 'package:scheduled_test/scheduled_stream.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  integration("does not compile until its output is requested", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "version": "0.0.1"
+      }),
+          d.dir("web", [d.file("syntax-error.dart", "syntax error")])]).create();
+    var server = pubServe();
+    server.stdout.expect("Build completed successfully");
+    requestShould404("syntax-error.dart.js");
+    server.stdout.expect(
+        emitsLines(
+            "[Info from Dart2JS]:\n" "Compiling myapp|web/syntax-error.dart..."));
+    server.stdout.expect(consumeThrough("Build completed with 1 errors."));
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/does_not_support_invalid_command_line_options_type_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/does_not_support_invalid_command_line_options_type_test.dart
new file mode 100644
index 0000000..86af8e3
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/does_not_support_invalid_command_line_options_type_test.dart
@@ -0,0 +1,24 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  integration("doesn't support invalid commandLineOptions type", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "transformers": [{
+            "\$dart2js": {
+              "commandLineOptions": "foo"
+            }
+          }]
+      }), d.dir("web", [d.file("main.dart", "void main() {}")])]).create();
+    var server = pubServe();
+    requestShould404("main.dart.js");
+    server.stderr.expect(
+        emitsLines(
+            'Build error:\n' 'Transform Dart2JS on myapp|web/main.dart threw error: '
+                'Invalid value for \$dart2js.commandLineOptions: '
+                '"foo" (expected list of strings).'));
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/does_not_support_invalid_environment_type_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/does_not_support_invalid_environment_type_test.dart
new file mode 100644
index 0000000..97c0b2a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/does_not_support_invalid_environment_type_test.dart
@@ -0,0 +1,24 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  integration("doesn't support invalid environment type", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "transformers": [{
+            "\$dart2js": {
+              "environment": "foo"
+            }
+          }]
+      }), d.dir("web", [d.file("main.dart", "void main() {}")])]).create();
+    var server = pubServe();
+    requestShould404("main.dart.js");
+    server.stderr.expect(
+        emitsLines(
+            'Build error:\n' 'Transform Dart2JS on myapp|web/main.dart threw error: '
+                'Invalid value for \$dart2js.environment: "foo" '
+                '(expected map from strings to strings).'));
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/does_not_support_invalid_option_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/does_not_support_invalid_option_test.dart
new file mode 100644
index 0000000..6ad75eb
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/does_not_support_invalid_option_test.dart
@@ -0,0 +1,20 @@
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  integration("doesn't support an invalid dart2js option", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "transformers": [{
+            "\$dart2js": {
+              "invalidOption": true
+            }
+          }]
+      })]).create();
+    var pub = startPubServe();
+    pub.stderr.expect('Unrecognized dart2js option "invalidOption".');
+    pub.shouldExit(exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/doesnt_support_invalid_type_for_boolean_option_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/doesnt_support_invalid_type_for_boolean_option_test.dart
new file mode 100644
index 0000000..b82b2c3
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/doesnt_support_invalid_type_for_boolean_option_test.dart
@@ -0,0 +1,23 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  integration("doesn't support invalid type for boolean option", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "transformers": [{
+            "\$dart2js": {
+              "checked": "foo"
+            }
+          }]
+      }), d.dir("web", [d.file("main.dart", "void main() {}")])]).create();
+    var server = pubServe();
+    requestShould404("main.dart.js");
+    server.stderr.expect(
+        emitsLines(
+            'Build error:\n' 'Transform Dart2JS on myapp|web/main.dart threw error: '
+                'Invalid value for \$dart2js.checked: "foo" ' '(expected true or false).'));
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/ignores_entrypoint_in_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/ignores_entrypoint_in_dependency_test.dart
new file mode 100644
index 0000000..743302f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/ignores_entrypoint_in_dependency_test.dart
@@ -0,0 +1,21 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  integration("ignores a Dart entrypoint in a dependency", () {
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "0.0.1"),
+            d.dir("lib", [d.file("lib.dart", "main() => print('foo');")])]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    pubServe(shouldGetFirst: true);
+    requestShould404("web/packages/foo/lib.dart.js");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/ignores_entrypoints_in_lib_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/ignores_entrypoints_in_lib_test.dart
new file mode 100644
index 0000000..9298656
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/ignores_entrypoints_in_lib_test.dart
@@ -0,0 +1,26 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir('lib', [d.file('file.dart', 'void main() => print("hello");')]),
+            d.dir('web', [d.file('index.html', 'html')])]).create();
+  });
+  integration("build ignores Dart entrypoints in lib", () {
+    schedulePub(
+        args: ["build", "--all"],
+        output: new RegExp(r'Built 1 file to "build".'));
+    d.dir(appPath, [d.dir('build', [d.nothing('lib')])]).validate();
+  });
+  integration("serve ignores Dart entrypoints in lib", () {
+    pubServe();
+    requestShould404("packages/myapp/main.dart.js");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/ignores_non_entrypoint_dart_files_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/ignores_non_entrypoint_dart_files_test.dart
new file mode 100644
index 0000000..518aff1
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/ignores_non_entrypoint_dart_files_test.dart
@@ -0,0 +1,34 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                'web',
+                [
+                    d.file('file1.dart', 'var main = () => print("hello");'),
+                    d.file('file2.dart', 'void main(arg1, arg2, arg3) => print("hello");'),
+                    d.file('file3.dart', 'class Foo { void main() => print("hello"); }'),
+                    d.file('file4.dart', 'var foo;')])]).create();
+  });
+  integration("build ignores non-entrypoint Dart files", () {
+    schedulePub(
+        args: ["build"],
+        output: new RegExp(r'Built 0 files to "build".'));
+    d.dir(appPath, [d.dir('build', [d.nothing('web')])]).validate();
+  });
+  integration("serve ignores non-entrypoint Dart files", () {
+    pubServe();
+    requestShould404("file1.dart.js");
+    requestShould404("file2.dart.js");
+    requestShould404("file3.dart.js");
+    requestShould404("file4.dart.js");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/includes_source_maps_in_debug_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/includes_source_maps_in_debug_test.dart
new file mode 100644
index 0000000..c309384
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/includes_source_maps_in_debug_test.dart
@@ -0,0 +1,32 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("includes source map URLs in a debug build", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [d.file("main.dart", "void main() => print('hello');")])]).create();
+    schedulePub(
+        args: ["build", "--mode", "debug"],
+        output: new RegExp(r'Built \d+ files to "build".'),
+        exitCode: 0);
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir(
+                        'web',
+                        [
+                            d.matcherFile('main.dart.js', contains("# sourceMappingURL=main.dart.js.map")),
+                            d.matcherFile(
+                                'main.dart.js.map',
+                                contains('"file": "main.dart.js"'))])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/minifies_in_release_mode_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/minifies_in_release_mode_test.dart
new file mode 100644
index 0000000..0101422
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/minifies_in_release_mode_test.dart
@@ -0,0 +1,18 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  integration("generates minified JS in release mode", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [d.file("main.dart", "void main() => print('hello');")])]).create();
+    pubServe(args: ["--mode", "release"]);
+    requestShouldSucceed("main.dart.js", isMinifiedDart2JSOutput);
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/minify_configuration_overrides_mode_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/minify_configuration_overrides_mode_test.dart
new file mode 100644
index 0000000..4842d53
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/minify_configuration_overrides_mode_test.dart
@@ -0,0 +1,19 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  integration("minify configuration overrides the mode", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "transformers": [{
+            "\$dart2js": {
+              "minify": true
+            }
+          }]
+      })]).create();
+    pubServe();
+    requestShouldSucceed("main.dart.js", isMinifiedDart2JSOutput);
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/omits_source_map_in_release_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/omits_source_map_in_release_test.dart
new file mode 100644
index 0000000..91e9f7a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/omits_source_map_in_release_test.dart
@@ -0,0 +1,21 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("omits source maps from a release build", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [d.file("main.dart", "void main() => print('hello');")])]).create();
+    schedulePub(
+        args: ["build"],
+        output: new RegExp(r'Built 2 files to "build".'),
+        exitCode: 0);
+    d.dir(
+        appPath,
+        [d.dir('build', [d.dir('web', [d.nothing('main.dart.js.map')])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/output_can_be_consumed_by_successive_phases.dart b/sdk/lib/_internal/pub_generated/test/dart2js/output_can_be_consumed_by_successive_phases.dart
new file mode 100644
index 0000000..3672b07
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/output_can_be_consumed_by_successive_phases.dart
@@ -0,0 +1,40 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const JS_REWRITE_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class RewriteTransformer extends Transformer {
+  RewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.js';
+
+  Future apply(Transform transform) {
+    return transform.primaryInput.readAsString().then((contents) {
+      var id = transform.primaryInput.id.changeExtension(".out");
+      transform.addOutput(new Asset.fromString(id, contents));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("output can be consumed by successive phases", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["\$dart2js", "myapp/src/transformer"]
+        }),
+            d.dir(
+                "lib",
+                [d.dir("src", [d.file("transformer.dart", JS_REWRITE_TRANSFORMER)])]),
+            d.dir("web", [d.file("main.dart", "void main() {}")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("main.dart.out", isUnminifiedDart2JSOutput);
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/outputs_deferred_libraries_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/outputs_deferred_libraries_test.dart
new file mode 100644
index 0000000..13a050b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/outputs_deferred_libraries_test.dart
@@ -0,0 +1,58 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+const MAIN = """
+import 'dart:async';
+
+import 'a.dart' deferred as a;
+import 'b.dart' deferred as b;
+
+void main() {
+  Future.wait([lazyA.loadLibrary(), lazyB.loadLibrary()]).then((_) {
+    a.fn();
+    b.fn();
+  });
+}
+""";
+const A = """
+library a;
+
+fn() => print("a");
+""";
+const B = """
+library b;
+
+fn() => print("b");
+""";
+main() {
+  initConfig();
+  integration("compiles deferred libraries to separate outputs", () {
+    currentSchedule.timeout *= 3;
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                'web',
+                [
+                    d.file('main.dart', MAIN),
+                    d.file('a.dart', A),
+                    d.file('b.dart', B)])]).create();
+    schedulePub(
+        args: ["build"],
+        output: new RegExp(r'Built 4 files to "build".'));
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir(
+                        'web',
+                        [
+                            d.matcherFile('main.dart.js', isNot(isEmpty)),
+                            d.matcherFile('main.dart.precompiled.js', isNot(isEmpty)),
+                            d.matcherFile('main.dart.js_1.part.js', isNot(isEmpty)),
+                            d.matcherFile('main.dart.js_2.part.js', isNot(isEmpty))])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/passes_along_environment_constants_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/passes_along_environment_constants_test.dart
new file mode 100644
index 0000000..acc2de6
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/passes_along_environment_constants_test.dart
@@ -0,0 +1,28 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  integration("passes along environment constants", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "transformers": [{
+            "\$dart2js": {
+              "environment": {
+                'CONSTANT': 'true'
+              }
+            }
+          }]
+      }), d.dir("web", [d.file("main.dart", """
+void main() {
+  if (const bool.fromEnvironment('CONSTANT')) {
+    print("hello");
+  }
+}
+""")])]).create();
+    pubServe();
+    requestShouldSucceed("main.dart.js", contains("hello"));
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/reports_dart_parse_errors_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/reports_dart_parse_errors_test.dart
new file mode 100644
index 0000000..9d39e35
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/reports_dart_parse_errors_test.dart
@@ -0,0 +1,39 @@
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("reports Dart parse errors", () {
+    currentSchedule.timeout *= 3;
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                'web',
+                [
+                    d.file('file.txt', 'contents'),
+                    d.file('file.dart', 'void void;'),
+                    d.dir('subdir', [d.file('subfile.dart', 'void void;')])])]).create();
+    var pub = startPub(args: ["build"]);
+    pub.stdout.expect(startsWith("Loading source assets..."));
+    pub.stdout.expect(startsWith("Building myapp..."));
+    var consumeFile = consumeThrough(
+        inOrder(
+            ["[Error from Dart2JS]:", startsWith(p.join("web", "file.dart") + ":")]));
+    var consumeSubfile = consumeThrough(
+        inOrder(
+            [
+                "[Error from Dart2JS]:",
+                startsWith(p.join("web", "subdir", "subfile.dart") + ":")]));
+    pub.stderr.expect(
+        either(
+            inOrder([consumeFile, consumeSubfile]),
+            inOrder([consumeSubfile, consumeFile])));
+    pub.shouldExit(exit_codes.DATA);
+    d.dir(appPath, [d.dir('build', [d.nothing('web')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/source_maps_include_core_libs_in_subdirectory_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/source_maps_include_core_libs_in_subdirectory_test.dart
new file mode 100644
index 0000000..7cd6e77
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/source_maps_include_core_libs_in_subdirectory_test.dart
@@ -0,0 +1,37 @@
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../serve/utils.dart';
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "Dart core libraries are available to source maps when the "
+          "build directory is a subdirectory",
+      () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [
+                    d.dir(
+                        "sub",
+                        [
+                            d.file(
+                                "main.dart",
+                                "main() => new StringBuffer().writeAll(['s']);")])])]).create();
+    var webSub = path.join("web", "sub");
+    pubServe(args: [webSub]);
+    requestShouldSucceed(
+        "main.dart.js.map",
+        contains(r"packages/$sdk/lib/core/string_buffer.dart"),
+        root: webSub);
+    requestShouldSucceed(
+        r"packages/$sdk/lib/core/string_buffer.dart",
+        contains("class StringBuffer"),
+        root: webSub);
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/source_maps_include_core_libs_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/source_maps_include_core_libs_test.dart
new file mode 100644
index 0000000..b685b62
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/source_maps_include_core_libs_test.dart
@@ -0,0 +1,59 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("Dart core libraries are available to source maps", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [
+                    d.file("main.dart", "main() => new StringBuffer().writeAll(['s']);"),
+                    d.dir(
+                        "sub",
+                        [
+                            d.file(
+                                "main.dart",
+                                "main() => new StringBuffer().writeAll(['s']);")])])]).create();
+    schedulePub(
+        args: ["build", "--mode", "debug"],
+        output: new RegExp(r'Built \d+ files to "build".'),
+        exitCode: 0);
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                "build",
+                [
+                    d.dir(
+                        "web",
+                        [
+                            d.matcherFile(
+                                "main.dart.js.map",
+                                contains(r"packages/$sdk/lib/core/string_buffer.dart")),
+                            d.dir(
+                                "sub",
+                                [
+                                    d.matcherFile(
+                                        "main.dart.js.map",
+                                        contains(r"../packages/$sdk/lib/core/string_buffer.dart"))]),
+                            d.dir(
+                                "packages",
+                                [
+                                    d.dir(
+                                        r"$sdk",
+                                        [
+                                            d.dir(
+                                                "lib",
+                                                [
+                                                    d.dir(
+                                                        r"core",
+                                                        [
+                                                            d.matcherFile(
+                                                                "string_buffer.dart",
+                                                                contains("class StringBuffer"))])])])])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/supports_configuration_with_build_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/supports_configuration_with_build_test.dart
new file mode 100644
index 0000000..219fc05
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/supports_configuration_with_build_test.dart
@@ -0,0 +1,82 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "compiles dart.js and interop.js next to entrypoints when "
+          "dartjs is explicitly configured",
+      () {
+    currentSchedule.timeout *= 3;
+    serve([d.dir('api', [d.dir('packages', [d.file('browser', JSON.encode({
+            'versions': [packageVersionApiMap(packageMap('browser', '1.0.0'))]
+          })),
+              d.dir(
+                  'browser',
+                  [
+                      d.dir(
+                          'versions',
+                          [
+                              d.file(
+                                  '1.0.0',
+                                  JSON.encode(
+                                      packageVersionApiMap(packageMap('browser', '1.0.0'), full: true)))])])])]),
+              d.dir(
+                  'packages',
+                  [
+                      d.dir(
+                          'browser',
+                          [
+                              d.dir(
+                                  'versions',
+                                  [
+                                      d.tar(
+                                          '1.0.0.tar.gz',
+                                          [
+                                              d.file('pubspec.yaml', yaml(packageMap("browser", "1.0.0"))),
+                                              d.dir(
+                                                  'lib',
+                                                  [
+                                                      d.file('dart.js', 'contents of dart.js'),
+                                                      d.file('interop.js', 'contents of interop.js')])])])])])]);
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "browser": "1.0.0"
+        },
+        "transformers": [{
+            "\$dart2js": {
+              "minify": true
+            }
+          }]
+      }),
+          d.dir(
+              'web',
+              [d.file('file.dart', 'void main() => print("hello");')])]).create();
+    pubGet();
+    schedulePub(
+        args: ["build"],
+        output: new RegExp(r'Built 4 files to "build".'),
+        exitCode: 0);
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                'build',
+                [
+                    d.dir(
+                        'web',
+                        [
+                            d.matcherFile('file.dart.js', isMinifiedDart2JSOutput),
+                            d.matcherFile('file.dart.precompiled.js', isNot(isEmpty)),
+                            d.dir(
+                                'packages',
+                                [
+                                    d.dir(
+                                        'browser',
+                                        [
+                                            d.file('dart.js', 'contents of dart.js'),
+                                            d.file('interop.js', 'contents of interop.js')])])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/supports_valid_options_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/supports_valid_options_test.dart
new file mode 100644
index 0000000..57b2ccb
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/supports_valid_options_test.dart
@@ -0,0 +1,32 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  integration("supports most dart2js command-line options", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "transformers": [{
+            "\$dart2js": {
+              "commandLineOptions": ["--enable-diagnostic-colors"],
+              "checked": true,
+              "csp": true,
+              "minify": true,
+              "verbose": true,
+              "environment": {
+                "name": "value"
+              },
+              "analyzeAll": true,
+              "suppressWarnings": true,
+              "suppressHints": true,
+              "suppressPackageWarnings": false,
+              "terse": true
+            }
+          }]
+      })]).create();
+    pubServe();
+    requestShouldSucceed("main.dart.js", isNot(isEmpty));
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dart2js/unminified_in_nonrelease_mode_test.dart b/sdk/lib/_internal/pub_generated/test/dart2js/unminified_in_nonrelease_mode_test.dart
new file mode 100644
index 0000000..8c7ab10
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dart2js/unminified_in_nonrelease_mode_test.dart
@@ -0,0 +1,18 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  integration("generates unminified JS when not in release mode", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [d.file("main.dart", "void main() => print('hello');")])]).create();
+    pubServe(args: ["--mode", "whatever"]);
+    requestShouldSucceed("main.dart.js", isUnminifiedDart2JSOutput);
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dependency_override_test.dart b/sdk/lib/_internal/pub_generated/test/dependency_override_test.dart
new file mode 100644
index 0000000..6d7e979
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dependency_override_test.dart
@@ -0,0 +1,93 @@
+import 'package:path/path.dart' as path;
+import 'descriptor.dart' as d;
+import 'test_pub.dart';
+main() {
+  initConfig();
+  forBothPubGetAndUpgrade((command) {
+    integration("chooses best version matching override constraint", () {
+      servePackages((builder) {
+        builder.serve("foo", "1.0.0");
+        builder.serve("foo", "2.0.0");
+        builder.serve("foo", "3.0.0");
+      });
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "dependencies": {
+            "foo": ">2.0.0"
+          },
+          "dependency_overrides": {
+            "foo": "<3.0.0"
+          }
+        })]).create();
+      pubCommand(command);
+      d.packagesDir({
+        "foo": "2.0.0"
+      }).validate();
+    });
+    integration("treats override as implicit dependency", () {
+      servePackages((builder) {
+        builder.serve("foo", "1.0.0");
+      });
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "dependency_overrides": {
+            "foo": "any"
+          }
+        })]).create();
+      pubCommand(command);
+      d.packagesDir({
+        "foo": "1.0.0"
+      }).validate();
+    });
+    integration("ignores other constraints on overridden package", () {
+      servePackages((builder) {
+        builder.serve("foo", "1.0.0");
+        builder.serve("foo", "2.0.0");
+        builder.serve("foo", "3.0.0");
+        builder.serve("bar", "1.0.0", pubspec: {
+          "dependencies": {
+            "foo": "5.0.0-nonexistent"
+          }
+        });
+      });
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "dependencies": {
+            "bar": "any"
+          },
+          "dependency_overrides": {
+            "foo": "<3.0.0"
+          }
+        })]).create();
+      pubCommand(command);
+      d.packagesDir({
+        "foo": "2.0.0",
+        "bar": "1.0.0"
+      }).validate();
+    });
+    integration("warns about overridden dependencies", () {
+      servePackages((builder) {
+        builder.serve("foo", "1.0.0");
+        builder.serve("bar", "1.0.0");
+      });
+      d.dir("baz", [d.libDir("baz"), d.libPubspec("baz", "0.0.1")]).create();
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "dependency_overrides": {
+            "foo": "any",
+            "bar": "any",
+            "baz": {
+              "path": "../baz"
+            }
+          }
+        })]).create();
+      var bazPath = path.join("..", "baz");
+      schedulePub(args: [command.name], output: command.success, error: """
+          Warning: You are using these overridden dependencies:
+          ! bar 1.0.0
+          ! baz 0.0.1 from path $bazPath
+          ! foo 1.0.0
+          """);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/deps_test.dart b/sdk/lib/_internal/pub_generated/test/deps_test.dart
new file mode 100644
index 0000000..06fddb6
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/deps_test.dart
@@ -0,0 +1,128 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'descriptor.dart' as d;
+import 'test_pub.dart';
+main() {
+  initConfig();
+  setUp(() {
+    servePackages((builder) {
+      builder.serve("normal", "1.2.3", deps: {
+        "transitive": "any",
+        "circular_a": "any"
+      });
+      builder.serve("transitive", "1.2.3", deps: {
+        "shared": "any"
+      });
+      builder.serve("shared", "1.2.3", deps: {
+        "other": "any"
+      });
+      builder.serve("unittest", "1.2.3", deps: {
+        "shared": "any"
+      });
+      builder.serve("other", "1.0.0");
+      builder.serve("overridden", "1.0.0");
+      builder.serve("overridden", "2.0.0");
+      builder.serve("override_only", "1.2.3");
+      builder.serve("circular_a", "1.2.3", deps: {
+        "circular_b": "any"
+      });
+      builder.serve("circular_b", "1.2.3", deps: {
+        "circular_a": "any"
+      });
+    });
+    d.dir(
+        "from_path",
+        [d.libDir("from_path"), d.libPubspec("from_path", "1.2.3")]).create();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "normal": "any",
+          "overridden": "1.0.0",
+          "from_path": {
+            "path": "../from_path"
+          }
+        },
+        "dev_dependencies": {
+          "unittest": "any"
+        },
+        "dependency_overrides": {
+          "overridden": "2.0.0",
+          "override_only": "any"
+        }
+      })]).create();
+  });
+  integration("lists dependencies in compact form", () {
+    pubGet();
+    schedulePub(args: ['deps', '-s', 'compact'], output: '''
+        myapp 0.0.0
+
+        dependencies:
+        - from_path 1.2.3
+        - normal 1.2.3 [transitive circular_a]
+        - overridden 2.0.0
+
+        dev dependencies:
+        - unittest 1.2.3 [shared]
+
+        dependency overrides:
+        - overridden 2.0.0
+        - override_only 1.2.3
+
+        transitive dependencies:
+        - circular_a 1.2.3 [circular_b]
+        - circular_b 1.2.3 [circular_a]
+        - other 1.0.0
+        - shared 1.2.3 [other]
+        - transitive 1.2.3 [shared]
+        ''');
+  });
+  integration("lists dependencies in list form", () {
+    pubGet();
+    schedulePub(args: ['deps', '--style', 'list'], output: '''
+        myapp 0.0.0
+
+        dependencies:
+        - from_path 1.2.3
+        - normal 1.2.3
+          - transitive any
+          - circular_a any
+        - overridden 2.0.0
+
+        dev dependencies:
+        - unittest 1.2.3
+          - shared any
+
+        dependency overrides:
+        - overridden 2.0.0
+        - override_only 1.2.3
+
+        transitive dependencies:
+        - circular_a 1.2.3
+          - circular_b any
+        - circular_b 1.2.3
+          - circular_a any
+        - other 1.0.0
+        - shared 1.2.3
+          - other any
+        - transitive 1.2.3
+          - shared any
+        ''');
+  });
+  integration("lists dependencies in tree form", () {
+    pubGet();
+    schedulePub(args: ['deps'], output: '''
+        myapp 0.0.0
+        |-- from_path 1.2.3
+        |-- normal 1.2.3
+        |   |-- circular_a 1.2.3
+        |   |   '-- circular_b 1.2.3
+        |   |       '-- circular_a...
+        |   '-- transitive 1.2.3
+        |       '-- shared...
+        |-- overridden 2.0.0
+        |-- override_only 1.2.3
+        '-- unittest 1.2.3
+            '-- shared 1.2.3
+                '-- other 1.0.0
+        ''');
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/descriptor.dart b/sdk/lib/_internal/pub_generated/test/descriptor.dart
new file mode 100644
index 0000000..83ed013
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/descriptor.dart
@@ -0,0 +1,111 @@
+library descriptor;
+import 'package:oauth2/oauth2.dart' as oauth2;
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:scheduled_test/descriptor.dart';
+import '../lib/src/io.dart';
+import '../lib/src/utils.dart';
+import 'descriptor/git.dart';
+import 'descriptor/tar.dart';
+import 'test_pub.dart';
+export 'package:scheduled_test/descriptor.dart';
+export 'descriptor/git.dart';
+export 'descriptor/tar.dart';
+GitRepoDescriptor git(String name, [Iterable<Descriptor> contents]) =>
+    new GitRepoDescriptor(name, contents == null ? <Descriptor>[] : contents);
+TarFileDescriptor tar(String name, [Iterable<Descriptor> contents]) =>
+    new TarFileDescriptor(name, contents == null ? <Descriptor>[] : contents);
+Descriptor get validPackage =>
+    dir(
+        appPath,
+        [
+            libPubspec("test_pkg", "1.0.0"),
+            file("LICENSE", "Eh, do what you want."),
+            dir("lib", [file("test_pkg.dart", "int i = 1;")])]);
+FileDescriptor outOfDateSnapshot(String name) =>
+    binaryFile(name, readBinaryFile(testAssetPath('out-of-date.snapshot')));
+Descriptor pubspec(Map contents) {
+  return async(
+      awaitObject(
+          contents).then(
+              (resolvedContents) => file("pubspec.yaml", yaml(resolvedContents))));
+}
+Descriptor appPubspec([Map dependencies]) {
+  var map = {
+    "name": "myapp"
+  };
+  if (dependencies != null) map["dependencies"] = dependencies;
+  return pubspec(map);
+}
+Descriptor libPubspec(String name, String version, {Map deps, String sdk}) {
+  var map = packageMap(name, version, deps);
+  if (sdk != null) map["environment"] = {
+    "sdk": sdk
+  };
+  return pubspec(map);
+}
+Descriptor libDir(String name, [String code]) {
+  if (code == null) code = name;
+  return dir("lib", [file("$name.dart", 'main() => "$code";')]);
+}
+Descriptor gitPackageRevisionCacheDir(String name, [int modifier]) {
+  var value = name;
+  if (modifier != null) value = "$name $modifier";
+  return pattern(
+      new RegExp("$name${r'-[a-f0-9]+'}"),
+      (dirName) => dir(dirName, [libDir(name, value)]));
+}
+Descriptor gitPackageRepoCacheDir(String name) {
+  return pattern(
+      new RegExp("$name${r'-[a-f0-9]+'}"),
+      (dirName) =>
+          dir(dirName, [dir('hooks'), dir('info'), dir('objects'), dir('refs')]));
+}
+Descriptor packagesDir(Map<String, String> packages) {
+  var contents = <Descriptor>[];
+  packages.forEach((name, version) {
+    if (version == null) {
+      contents.add(nothing(name));
+    } else {
+      contents.add(
+          dir(name, [file("$name.dart", 'main() => "$name $version";')]));
+    }
+  });
+  return dir(packagesPath, contents);
+}
+Descriptor cacheDir(Map packages, {bool includePubspecs: false}) {
+  var contents = <Descriptor>[];
+  packages.forEach((name, versions) {
+    if (versions is! List) versions = [versions];
+    for (var version in versions) {
+      var packageContents = [libDir(name, '$name $version')];
+      if (includePubspecs) {
+        packageContents.add(libPubspec(name, version));
+      }
+      contents.add(dir("$name-$version", packageContents));
+    }
+  });
+  return hostedCache(contents);
+}
+Descriptor hostedCache(Iterable<Descriptor> contents) {
+  return dir(
+      cachePath,
+      [dir('hosted', [async(port.then((p) => dir('localhost%58$p', contents)))])]);
+}
+Descriptor credentialsFile(ScheduledServer server, String accessToken,
+    {String refreshToken, DateTime expiration}) {
+  return async(server.url.then((url) {
+    return dir(
+        cachePath,
+        [
+            file(
+                'credentials.json',
+                new oauth2.Credentials(
+                    accessToken,
+                    refreshToken,
+                    url.resolve('/token'),
+                    ['https://www.googleapis.com/auth/userinfo.email'],
+                    expiration).toJson())]);
+  }));
+}
+DirectoryDescriptor appDir([Map dependencies]) =>
+    dir(appPath, [appPubspec(dependencies)]);
diff --git a/sdk/lib/_internal/pub_generated/test/descriptor/git.dart b/sdk/lib/_internal/pub_generated/test/descriptor/git.dart
new file mode 100644
index 0000000..1235a09
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/descriptor/git.dart
@@ -0,0 +1,45 @@
+library descriptor.git;
+import 'dart:async';
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/descriptor.dart';
+import '../../lib/src/git.dart' as git;
+class GitRepoDescriptor extends DirectoryDescriptor {
+  GitRepoDescriptor(String name, List<Descriptor> contents)
+      : super(name, contents);
+  Future create([String parent]) => schedule(() {
+    return super.create(parent).then((_) {
+      return _runGitCommands(
+          parent,
+          [['init'], ['add', '.'], ['commit', '-m', 'initial commit']]);
+    });
+  }, 'creating Git repo:\n${describe()}');
+  Future commit([String parent]) => schedule(() {
+    return super.create(parent).then((_) {
+      return _runGitCommands(
+          parent,
+          [['add', '.'], ['commit', '-m', 'update']]);
+    });
+  }, 'committing Git repo:\n${describe()}');
+  Future<String> revParse(String ref, [String parent]) => schedule(() {
+    return _runGit(['rev-parse', ref], parent).then((output) => output[0]);
+  }, 'parsing revision $ref for Git repo:\n${describe()}');
+  Future runGit(List<String> args, [String parent]) => schedule(() {
+    return _runGit(args, parent);
+  }, "running 'git ${args.join(' ')}' in Git repo:\n${describe()}");
+  Future _runGitCommands(String parent, List<List<String>> commands) =>
+      Future.forEach(commands, (command) => _runGit(command, parent));
+  Future<List<String>> _runGit(List<String> args, String parent) {
+    var environment = {
+      'GIT_AUTHOR_NAME': 'Pub Test',
+      'GIT_AUTHOR_EMAIL': 'pub@dartlang.org',
+      'GIT_COMMITTER_NAME': 'Pub Test',
+      'GIT_COMMITTER_EMAIL': 'pub@dartlang.org'
+    };
+    if (parent == null) parent = defaultRoot;
+    return git.run(
+        args,
+        workingDir: path.join(parent, name),
+        environment: environment);
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/test/descriptor/tar.dart b/sdk/lib/_internal/pub_generated/test/descriptor/tar.dart
new file mode 100644
index 0000000..2a89bbd
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/descriptor/tar.dart
@@ -0,0 +1,36 @@
+library descriptor.tar;
+import 'dart:async';
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/descriptor.dart';
+import '../../lib/src/io.dart';
+class TarFileDescriptor extends DirectoryDescriptor implements
+    ReadableDescriptor {
+  TarFileDescriptor(String name, List<Descriptor> contents)
+      : super(name, contents);
+  Future<String> create([String parent]) => schedule(() {
+    if (parent == null) parent = defaultRoot;
+    return withTempDir((tempDir) {
+      return Future.wait(contents.map((entry) {
+        return entry.create(tempDir);
+      })).then((_) {
+        var createdContents =
+            listDir(tempDir, recursive: true, includeHidden: true);
+        return createTarGz(createdContents, baseDir: tempDir).toBytes();
+      }).then((bytes) {
+        var file = path.join(parent, name);
+        writeBinaryFile(file, bytes);
+        return file;
+      });
+    });
+  }, 'creating tar file:\n${describe()}');
+  Future validate([String parent]) {
+    throw new UnimplementedError("TODO(nweiz): implement this");
+  }
+  Stream<List<int>> read() {
+    return new Stream<List<int>>.fromFuture(withTempDir((tempDir) {
+      return create(
+          tempDir).then((_) => readBinaryFile(path.join(tempDir, name)));
+    }));
+  }
+}
diff --git a/sdk/lib/_internal/pub_generated/test/dev_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/dev_dependency_test.dart
new file mode 100644
index 0000000..3cb1ea9
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/dev_dependency_test.dart
@@ -0,0 +1,71 @@
+import 'descriptor.dart' as d;
+import 'test_pub.dart';
+main() {
+  initConfig();
+  integration("includes root package's dev dependencies", () {
+    d.dir('foo', [d.libDir('foo'), d.libPubspec('foo', '0.0.1')]).create();
+    d.dir('bar', [d.libDir('bar'), d.libPubspec('bar', '0.0.1')]).create();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dev_dependencies": {
+          "foo": {
+            "path": "../foo"
+          },
+          "bar": {
+            "path": "../bar"
+          }
+        }
+      })]).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [
+            d.dir("foo", [d.file("foo.dart", 'main() => "foo";')]),
+            d.dir("bar", [d.file("bar.dart", 'main() => "bar";')])]).validate();
+  });
+  integration("includes dev dependency's transitive dependencies", () {
+    d.dir('foo', [d.libDir('foo'), d.libPubspec('foo', '0.0.1', deps: {
+        "bar": {
+          "path": "../bar"
+        }
+      })]).create();
+    d.dir('bar', [d.libDir('bar'), d.libPubspec('bar', '0.0.1')]).create();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dev_dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        }
+      })]).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [
+            d.dir("foo", [d.file("foo.dart", 'main() => "foo";')]),
+            d.dir("bar", [d.file("bar.dart", 'main() => "bar";')])]).validate();
+  });
+  integration("ignores transitive dependency's dev dependencies", () {
+    d.dir('foo', [d.libDir('foo'), d.pubspec({
+        "name": "foo",
+        "version": "0.0.1",
+        "dev_dependencies": {
+          "bar": {
+            "path": "../bar"
+          }
+        }
+      })]).create();
+    d.dir('bar', [d.libDir('bar'), d.libPubspec('bar', '0.0.1')]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [
+            d.dir("foo", [d.file("foo.dart", 'main() => "foo";')]),
+            d.nothing("bar")]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/downgrade/does_not_show_other_versions_test.dart b/sdk/lib/_internal/pub_generated/test/downgrade/does_not_show_other_versions_test.dart
new file mode 100644
index 0000000..cdb89e2
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/downgrade/does_not_show_other_versions_test.dart
@@ -0,0 +1,22 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("does not show how many other versions are available", () {
+    servePackages((builder) {
+      builder.serve("downgraded", "1.0.0");
+      builder.serve("downgraded", "2.0.0");
+      builder.serve("downgraded", "3.0.0-dev");
+    });
+    d.appDir({
+      "downgraded": "3.0.0-dev"
+    }).create();
+    pubGet();
+    d.appDir({
+      "downgraded": ">=2.0.0"
+    }).create();
+    pubDowngrade(output: contains("downgraded 2.0.0 (was 3.0.0-dev)"));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/downgrade/doesnt_change_git_dependencies_test.dart b/sdk/lib/_internal/pub_generated/test/downgrade/doesnt_change_git_dependencies_test.dart
new file mode 100644
index 0000000..89f2e18
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/downgrade/doesnt_change_git_dependencies_test.dart
@@ -0,0 +1,25 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("doesn't change git dependencies", () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+    d.git(
+        'foo.git',
+        [d.libDir('foo', 'foo 2'), d.libPubspec('foo', '1.0.0')]).commit();
+    pubDowngrade();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/downgrade/dry_run_does_not_apply_changes_test.dart b/sdk/lib/_internal/pub_generated/test/downgrade/dry_run_does_not_apply_changes_test.dart
new file mode 100644
index 0000000..9786b22
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/downgrade/dry_run_does_not_apply_changes_test.dart
@@ -0,0 +1,33 @@
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("--dry-run shows report but does not apply changes", () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0");
+      builder.serve("foo", "2.0.0");
+    });
+    d.appDir({
+      "foo": "2.0.0"
+    }).create();
+    pubGet();
+    d.appDir({
+      "foo": "any"
+    }).create();
+    schedule(() {
+      deleteEntry(path.join(sandboxDir, appPath, "packages"));
+    });
+    pubDowngrade(
+        args: ["--dry-run"],
+        output: allOf(
+            [contains("< foo 1.0.0"), contains("Would change 1 dependency.")]));
+    d.dir(
+        appPath,
+        [
+            d.matcherFile("pubspec.lock", contains("2.0.0")),
+            d.nothing("packages")]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/downgrade/unlock_dependers_test.dart b/sdk/lib/_internal/pub_generated/test/downgrade/unlock_dependers_test.dart
new file mode 100644
index 0000000..3041109
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/downgrade/unlock_dependers_test.dart
@@ -0,0 +1,36 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "downgrades a locked package's dependers in order to get it to " "min version",
+      () {
+    servePackages((builder) {
+      builder.serve("foo", "2.0.0", deps: {
+        "bar": ">1.0.0"
+      });
+      builder.serve("bar", "2.0.0");
+    });
+    d.appDir({
+      "foo": "any",
+      "bar": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "2.0.0",
+      "bar": "2.0.0"
+    }).validate();
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0", deps: {
+        "bar": "any"
+      });
+      builder.serve("bar", "1.0.0");
+    });
+    pubDowngrade(args: ['bar']);
+    d.packagesDir({
+      "foo": "1.0.0",
+      "bar": "1.0.0"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/downgrade/unlock_if_necessary_test.dart b/sdk/lib/_internal/pub_generated/test/downgrade/unlock_if_necessary_test.dart
new file mode 100644
index 0000000..19caef9
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/downgrade/unlock_if_necessary_test.dart
@@ -0,0 +1,35 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "downgrades one locked hosted package's dependencies if it's " "necessary",
+      () {
+    servePackages((builder) {
+      builder.serve("foo", "2.0.0", deps: {
+        "foo_dep": "any"
+      });
+      builder.serve("foo_dep", "2.0.0");
+    });
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "2.0.0",
+      "foo_dep": "2.0.0"
+    }).validate();
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0", deps: {
+        "foo_dep": "<2.0.0"
+      });
+      builder.serve("foo_dep", "1.0.0");
+    });
+    pubDowngrade(args: ['foo']);
+    d.packagesDir({
+      "foo": "1.0.0",
+      "foo_dep": "1.0.0"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/error_group_test.dart b/sdk/lib/_internal/pub_generated/test/error_group_test.dart
new file mode 100644
index 0000000..23680b8
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/error_group_test.dart
@@ -0,0 +1,414 @@
+library error_group_test;
+import 'dart:async';
+import 'package:unittest/unittest.dart';
+import '../lib/src/error_group.dart';
+import '../lib/src/utils.dart';
+ErrorGroup errorGroup;
+main() {
+  group('with no futures or streams', () {
+    setUp(() {
+      errorGroup = new ErrorGroup();
+    });
+    test('should pass signaled errors to .done', () {
+      expect(errorGroup.done, throwsFormatException);
+      errorGroup.signalError(new FormatException());
+    });
+    test(
+        "shouldn't allow additional futures or streams once an error has been "
+            "signaled",
+        () {
+      expect(errorGroup.done, throwsFormatException);
+      errorGroup.signalError(new FormatException());
+      expect(
+          () => errorGroup.registerFuture(new Future.value()),
+          throwsStateError);
+      expect(
+          () => errorGroup.registerStream(new StreamController(sync: true).stream),
+          throwsStateError);
+    });
+  });
+  group('with a single future', () {
+    Completer completer;
+    Future future;
+    setUp(() {
+      errorGroup = new ErrorGroup();
+      completer = new Completer();
+      future = errorGroup.registerFuture(completer.future);
+    });
+    test('should pass through a value from the future', () {
+      expect(future, completion(equals('value')));
+      expect(errorGroup.done, completes);
+      completer.complete('value');
+    });
+    test(
+        "shouldn't allow additional futures or streams once .done has " "been called",
+        () {
+      completer.complete('value');
+      expect(
+          completer.future.then((_) => errorGroup.registerFuture(new Future.value())),
+          throwsStateError);
+      expect(
+          completer.future.then(
+              (_) => errorGroup.registerStream(new StreamController(sync: true).stream)),
+          throwsStateError);
+    });
+    test(
+        'should pass through an exception from the future if it has a ' 'listener',
+        () {
+      expect(future, throwsFormatException);
+      completer.completeError(new FormatException());
+    });
+    test(
+        'should notify the error group of an exception from the future even '
+            'if it has a listener',
+        () {
+      expect(future, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+      completer.completeError(new FormatException());
+    });
+    test(
+        'should pass a signaled exception to the future if it has a listener '
+            'and should ignore a subsequent value from that future',
+        () {
+      expect(future, throwsFormatException);
+      errorGroup.signalError(new FormatException());
+      completer.complete('value');
+    });
+    test(
+        'should pass a signaled exception to the future if it has a listener '
+            'and should ignore a subsequent exception from that future',
+        () {
+      expect(future, throwsFormatException);
+      errorGroup.signalError(new FormatException());
+      completer.completeError(new ArgumentError());
+    });
+    test(
+        'should notify the error group of a signaled exception even if the '
+            'future has a listener',
+        () {
+      expect(future, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+      errorGroup.signalError(new FormatException());
+    });
+    test(
+        "should complete .done if the future receives a value even if the "
+            "future doesn't have a listener",
+        () {
+      expect(errorGroup.done, completes);
+      completer.complete('value');
+      expect(errorGroup.done.then((_) => future), completion(equals('value')));
+    });
+    test(
+        "should pipe an exception from the future to .done if the future "
+            "doesn't have a listener",
+        () {
+      expect(errorGroup.done, throwsFormatException);
+      completer.completeError(new FormatException());
+      expect(errorGroup.done.catchError((_) {
+        expect(future, throwsFormatException);
+      }), completes);
+    });
+    test(
+        "should pass a signaled exception to .done if the future doesn't have "
+            "a listener",
+        () {
+      expect(errorGroup.done, throwsFormatException);
+      errorGroup.signalError(new FormatException());
+      expect(errorGroup.done.catchError((_) {
+        completer.complete('value');
+        expect(future, throwsFormatException);
+      }), completes);
+    });
+  });
+  group('with multiple futures', () {
+    Completer completer1;
+    Completer completer2;
+    Future future1;
+    Future future2;
+    setUp(() {
+      errorGroup = new ErrorGroup();
+      completer1 = new Completer();
+      completer2 = new Completer();
+      future1 = errorGroup.registerFuture(completer1.future);
+      future2 = errorGroup.registerFuture(completer2.future);
+    });
+    test(
+        "should pipe exceptions from one future to the other and to " ".complete",
+        () {
+      expect(future1, throwsFormatException);
+      expect(future2, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+      completer1.completeError(new FormatException());
+    });
+    test(
+        "each future should be able to complete with a value " "independently",
+        () {
+      expect(future1, completion(equals('value1')));
+      expect(future2, completion(equals('value2')));
+      expect(errorGroup.done, completes);
+      completer1.complete('value1');
+      completer2.complete('value2');
+    });
+    test(
+        "shouldn't throw a top-level exception if a future receives an error "
+            "after the other listened future completes",
+        () {
+      expect(future1, completion(equals('value')));
+      completer1.complete('value');
+      expect(future1.then((_) {
+        completer2.completeError(new FormatException());
+      }), completes);
+    });
+    test(
+        "shouldn't throw a top-level exception if an error is signaled after "
+            "one listened future completes",
+        () {
+      expect(future1, completion(equals('value')));
+      completer1.complete('value');
+      expect(future1.then((_) {
+        errorGroup.signalError(new FormatException());
+      }), completes);
+    });
+  });
+  group('with a single stream', () {
+    StreamController controller;
+    Stream stream;
+    setUp(() {
+      errorGroup = new ErrorGroup();
+      controller = new StreamController.broadcast(sync: true);
+      stream = errorGroup.registerStream(controller.stream);
+    });
+    test('should pass through values from the stream', () {
+      StreamIterator iter = new StreamIterator(stream);
+      iter.moveNext().then((hasNext) {
+        expect(hasNext, isTrue);
+        expect(iter.current, equals(1));
+        iter.moveNext().then((hasNext) {
+          expect(hasNext, isTrue);
+          expect(iter.current, equals(2));
+          expect(iter.moveNext(), completion(isFalse));
+        });
+      });
+      expect(errorGroup.done, completes);
+      controller
+          ..add(1)
+          ..add(2)
+          ..close();
+    });
+    test(
+        'should pass through an error from the stream if it has a ' 'listener',
+        () {
+      expect(stream.first, throwsFormatException);
+      controller.addError(new FormatException());
+    });
+    test(
+        'should notify the error group of an exception from the stream even '
+            'if it has a listener',
+        () {
+      expect(stream.first, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+      controller.addError(new FormatException());
+    });
+    test(
+        'should pass a signaled exception to the stream if it has a listener '
+            'and should unsubscribe that stream',
+        () {
+      expect(stream.first, throwsFormatException);
+      errorGroup.signalError(new FormatException());
+      expect(newFuture(() {
+        controller.add('value');
+      }), completes);
+    });
+    test(
+        'should notify the error group of a signaled exception even if the '
+            'stream has a listener',
+        () {
+      expect(stream.first, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+      errorGroup.signalError(new FormatException());
+    });
+    test(
+        "should see one value and complete .done when the stream is done even "
+            "if the stream doesn't have a listener",
+        () {
+      expect(errorGroup.done, completes);
+      controller.add('value');
+      controller.close();
+      expect(
+          errorGroup.done.then((_) => stream.toList()),
+          completion(equals(['value'])));
+    });
+  });
+  group('with a single single-subscription stream', () {
+    StreamController controller;
+    Stream stream;
+    setUp(() {
+      errorGroup = new ErrorGroup();
+      controller = new StreamController(sync: true);
+      stream = errorGroup.registerStream(controller.stream);
+    });
+    test(
+        "should complete .done when the stream is done even if the stream "
+            "doesn't have a listener",
+        () {
+      expect(errorGroup.done, completes);
+      controller.add('value');
+      controller.close();
+      expect(
+          errorGroup.done.then((_) => stream.toList()),
+          completion(equals(['value'])));
+    });
+    test(
+        "should pipe an exception from the stream to .done if the stream "
+            "doesn't have a listener",
+        () {
+      expect(errorGroup.done, throwsFormatException);
+      controller.addError(new FormatException());
+      expect(errorGroup.done.catchError((_) {
+        controller.add('value');
+        expect(stream.first, throwsFormatException);
+      }), completes);
+    });
+    test(
+        "should pass a signaled exception to .done if the stream doesn't "
+            "have a listener",
+        () {
+      expect(errorGroup.done, throwsFormatException);
+      errorGroup.signalError(new FormatException());
+      expect(errorGroup.done.catchError((_) {
+        controller.add('value');
+        expect(stream.first, throwsFormatException);
+      }), completes);
+    });
+  });
+  group('with multiple streams', () {
+    StreamController controller1;
+    StreamController controller2;
+    Stream stream1;
+    Stream stream2;
+    setUp(() {
+      errorGroup = new ErrorGroup();
+      controller1 = new StreamController.broadcast(sync: true);
+      controller2 = new StreamController.broadcast(sync: true);
+      stream1 = errorGroup.registerStream(controller1.stream);
+      stream2 = errorGroup.registerStream(controller2.stream);
+    });
+    test(
+        "should pipe exceptions from one stream to the other and to .done",
+        () {
+      expect(stream1.first, throwsFormatException);
+      expect(stream2.first, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+      controller1.addError(new FormatException());
+    });
+    test("each future should be able to emit values independently", () {
+      expect(stream1.toList(), completion(equals(['value1.1', 'value1.2'])));
+      expect(stream2.toList(), completion(equals(['value2.1', 'value2.2'])));
+      expect(errorGroup.done, completes);
+      controller1
+          ..add('value1.1')
+          ..add('value1.2')
+          ..close();
+      controller2
+          ..add('value2.1')
+          ..add('value2.2')
+          ..close();
+    });
+    test(
+        "shouldn't throw a top-level exception if a stream receives an error "
+            "after the other listened stream completes",
+        () {
+      var signal = new Completer();
+      expect(
+          stream1.toList().whenComplete(signal.complete),
+          completion(equals(['value1', 'value2'])));
+      controller1
+          ..add('value1')
+          ..add('value2')
+          ..close();
+      expect(signal.future.then((_) {
+        controller2.addError(new FormatException());
+      }), completes);
+    });
+    test(
+        "shouldn't throw a top-level exception if an error is signaled after "
+            "one listened stream completes",
+        () {
+      var signal = new Completer();
+      expect(
+          stream1.toList().whenComplete(signal.complete),
+          completion(equals(['value1', 'value2'])));
+      controller1
+          ..add('value1')
+          ..add('value2')
+          ..close();
+      expect(signal.future.then((_) {
+        errorGroup.signalError(new FormatException());
+      }), completes);
+    });
+  });
+  group('with a stream and a future', () {
+    StreamController controller;
+    Stream stream;
+    Completer completer;
+    Future future;
+    setUp(() {
+      errorGroup = new ErrorGroup();
+      controller = new StreamController.broadcast(sync: true);
+      stream = errorGroup.registerStream(controller.stream);
+      completer = new Completer();
+      future = errorGroup.registerFuture(completer.future);
+    });
+    test("should pipe exceptions from the stream to the future", () {
+      expect(stream.first, throwsFormatException);
+      expect(future, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+      controller.addError(new FormatException());
+    });
+    test("should pipe exceptions from the future to the stream", () {
+      expect(stream.first, throwsFormatException);
+      expect(future, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+      completer.completeError(new FormatException());
+    });
+    test(
+        "the stream and the future should be able to complete/emit values "
+            "independently",
+        () {
+      expect(stream.toList(), completion(equals(['value1.1', 'value1.2'])));
+      expect(future, completion(equals('value2.0')));
+      expect(errorGroup.done, completes);
+      controller
+          ..add('value1.1')
+          ..add('value1.2')
+          ..close();
+      completer.complete('value2.0');
+    });
+    test(
+        "shouldn't throw a top-level exception if the stream receives an error "
+            "after the listened future completes",
+        () {
+      expect(future, completion(equals('value')));
+      completer.complete('value');
+      expect(future.then((_) {
+        controller.addError(new FormatException());
+      }), completes);
+    });
+    test(
+        "shouldn't throw a top-level exception if the future receives an "
+            "error after the listened stream completes",
+        () {
+      var signal = new Completer();
+      expect(
+          stream.toList().whenComplete(signal.complete),
+          completion(equals(['value1', 'value2'])));
+      controller
+          ..add('value1')
+          ..add('value2')
+          ..close();
+      expect(signal.future.then((_) {
+        completer.completeError(new FormatException());
+      }), completes);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/broken_symlink_test.dart b/sdk/lib/_internal/pub_generated/test/get/broken_symlink_test.dart
new file mode 100644
index 0000000..1363e95
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/broken_symlink_test.dart
@@ -0,0 +1,35 @@
+library pub_tests;
+import 'package:path/path.dart' as path;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('replaces a broken "packages" symlink', () {
+    d.dir(appPath, [d.appPubspec(), d.libDir('foo'), d.dir("bin")]).create();
+    scheduleSymlink("nonexistent", path.join(appPath, "packages"));
+    pubGet();
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                "bin",
+                [
+                    d.dir(
+                        "packages",
+                        [d.dir("myapp", [d.file('foo.dart', 'main() => "foo";')])])])]).validate();
+  });
+  integration('replaces a broken secondary "packages" symlink', () {
+    d.dir(appPath, [d.appPubspec(), d.libDir('foo'), d.dir("bin")]).create();
+    scheduleSymlink("nonexistent", path.join(appPath, "bin", "packages"));
+    pubGet();
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                "bin",
+                [
+                    d.dir(
+                        "packages",
+                        [d.dir("myapp", [d.file('foo.dart', 'main() => "foo";')])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/dry_run_does_not_apply_changes_test.dart b/sdk/lib/_internal/pub_generated/test/get/dry_run_does_not_apply_changes_test.dart
new file mode 100644
index 0000000..3fc7aa2
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/dry_run_does_not_apply_changes_test.dart
@@ -0,0 +1,21 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("--dry-run shows but does not apply changes", () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0");
+    });
+    d.appDir({
+      "foo": "1.0.0"
+    }).create();
+    pubGet(
+        args: ["--dry-run"],
+        output: allOf(
+            [contains("+ foo 1.0.0"), contains("Would change 1 dependency.")]));
+    d.dir(
+        appPath,
+        [d.nothing("pubspec.lock"), d.nothing("packages")]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/check_out_and_upgrade_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/check_out_and_upgrade_test.dart
new file mode 100644
index 0000000..1ff9fe4
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/check_out_and_upgrade_test.dart
@@ -0,0 +1,43 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('checks out and upgrades a package from Git', () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'git',
+                [
+                    d.dir('cache', [d.gitPackageRepoCacheDir('foo')]),
+                    d.gitPackageRevisionCacheDir('foo')])]).validate();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+    d.git(
+        'foo.git',
+        [d.libDir('foo', 'foo 2'), d.libPubspec('foo', '1.0.0')]).commit();
+    pubUpgrade();
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'git',
+                [
+                    d.dir('cache', [d.gitPackageRepoCacheDir('foo')]),
+                    d.gitPackageRevisionCacheDir('foo'),
+                    d.gitPackageRevisionCacheDir('foo', 2)])]).validate();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo 2";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/check_out_branch_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/check_out_branch_test.dart
new file mode 100644
index 0000000..76de129
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/check_out_branch_test.dart
@@ -0,0 +1,28 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('checks out a package at a specific branch from Git', () {
+    ensureGit();
+    var repo =
+        d.git('foo.git', [d.libDir('foo', 'foo 1'), d.libPubspec('foo', '1.0.0')]);
+    repo.create();
+    repo.runGit(["branch", "old"]);
+    d.git(
+        'foo.git',
+        [d.libDir('foo', 'foo 2'), d.libPubspec('foo', '1.0.0')]).commit();
+    d.appDir({
+      "foo": {
+        "git": {
+          "url": "../foo.git",
+          "ref": "old"
+        }
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo 1";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/check_out_revision_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/check_out_revision_test.dart
new file mode 100644
index 0000000..9389907
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/check_out_revision_test.dart
@@ -0,0 +1,28 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('checks out a package at a specific revision from Git', () {
+    ensureGit();
+    var repo =
+        d.git('foo.git', [d.libDir('foo', 'foo 1'), d.libPubspec('foo', '1.0.0')]);
+    repo.create();
+    var commit = repo.revParse('HEAD');
+    d.git(
+        'foo.git',
+        [d.libDir('foo', 'foo 2'), d.libPubspec('foo', '1.0.0')]).commit();
+    d.appDir({
+      "foo": {
+        "git": {
+          "url": "../foo.git",
+          "ref": commit
+        }
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo 1";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/check_out_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/check_out_test.dart
new file mode 100644
index 0000000..04e0aff
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/check_out_test.dart
@@ -0,0 +1,27 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('checks out a package from Git', () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'git',
+                [
+                    d.dir('cache', [d.gitPackageRepoCacheDir('foo')]),
+                    d.gitPackageRevisionCacheDir('foo')])]).validate();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/check_out_transitive_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/check_out_transitive_test.dart
new file mode 100644
index 0000000..941a5b8
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/check_out_transitive_test.dart
@@ -0,0 +1,37 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('checks out packages transitively from Git', () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.0', deps: {
+        "bar": {
+          "git": "../bar.git"
+        }
+      })]).create();
+    d.git('bar.git', [d.libDir('bar'), d.libPubspec('bar', '1.0.0')]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'git',
+                [
+                    d.dir(
+                        'cache',
+                        [d.gitPackageRepoCacheDir('foo'), d.gitPackageRepoCacheDir('bar')]),
+                    d.gitPackageRevisionCacheDir('foo'),
+                    d.gitPackageRevisionCacheDir('bar')])]).validate();
+    d.dir(
+        packagesPath,
+        [
+            d.dir('foo', [d.file('foo.dart', 'main() => "foo";')]),
+            d.dir('bar', [d.file('bar.dart', 'main() => "bar";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/check_out_twice_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/check_out_twice_test.dart
new file mode 100644
index 0000000..f2fc87e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/check_out_twice_test.dart
@@ -0,0 +1,28 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('checks out a package from Git twice', () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'git',
+                [
+                    d.dir('cache', [d.gitPackageRepoCacheDir('foo')]),
+                    d.gitPackageRevisionCacheDir('foo')])]).validate();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+    pubUpgrade();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/check_out_with_trailing_slash_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/check_out_with_trailing_slash_test.dart
new file mode 100644
index 0000000..0f966e9
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/check_out_with_trailing_slash_test.dart
@@ -0,0 +1,32 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  group("(regression)", () {
+    integration('checks out a package from Git with a trailing slash', () {
+      ensureGit();
+      d.git(
+          'foo.git',
+          [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]).create();
+      d.appDir({
+        "foo": {
+          "git": "../foo.git/"
+        }
+      }).create();
+      pubGet();
+      d.dir(
+          cachePath,
+          [
+              d.dir(
+                  'git',
+                  [
+                      d.dir('cache', [d.gitPackageRepoCacheDir('foo')]),
+                      d.gitPackageRevisionCacheDir('foo')])]).validate();
+      d.dir(
+          packagesPath,
+          [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/dependency_name_match_pubspec_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/dependency_name_match_pubspec_test.dart
new file mode 100644
index 0000000..114e0d1
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/dependency_name_match_pubspec_test.dart
@@ -0,0 +1,22 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      'requires the dependency name to match the remote pubspec ' 'name',
+      () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]).create();
+    d.dir(appPath, [d.appPubspec({
+        "weirdname": {
+          "git": "../foo.git"
+        }
+      })]).create();
+    pubGet(
+        error: contains('"name" field doesn\'t match expected name ' '"weirdname".'),
+        exitCode: exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/different_repo_name_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/different_repo_name_test.dart
new file mode 100644
index 0000000..4fc5f6a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/different_repo_name_test.dart
@@ -0,0 +1,26 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      'doesn\'t require the repository name to match the name in the ' 'pubspec',
+      () {
+    ensureGit();
+    d.git(
+        'foo.git',
+        [d.libDir('weirdname'), d.libPubspec('weirdname', '1.0.0')]).create();
+    d.dir(appPath, [d.appPubspec({
+        "weirdname": {
+          "git": "../foo.git"
+        }
+      })]).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [
+            d.dir(
+                'weirdname',
+                [d.file('weirdname.dart', 'main() => "weirdname";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/doesnt_fetch_if_nothing_changes_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/doesnt_fetch_if_nothing_changes_test.dart
new file mode 100644
index 0000000..e8a97a5
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/doesnt_fetch_if_nothing_changes_test.dart
@@ -0,0 +1,31 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../../lib/src/io.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration("doesn't re-fetch a repository if nothing changes", () {
+    ensureGit();
+    var repo =
+        d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]);
+    repo.create();
+    d.appDir({
+      "foo": {
+        "git": {
+          "url": "../foo.git"
+        }
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+    schedule(() => deleteEntry(p.join(sandboxDir, 'foo.git')));
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/lock_version_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/lock_version_test.dart
new file mode 100644
index 0000000..917bb44
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/lock_version_test.dart
@@ -0,0 +1,30 @@
+library pub_tests;
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../../lib/src/io.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('keeps a Git package locked to the version in the lockfile', () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+    schedule(() => deleteEntry(path.join(sandboxDir, packagesPath)));
+    d.git(
+        'foo.git',
+        [d.libDir('foo', 'foo 2'), d.libPubspec('foo', '1.0.0')]).commit();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/locked_revision_without_repo_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/locked_revision_without_repo_test.dart
new file mode 100644
index 0000000..17369f6
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/locked_revision_without_repo_test.dart
@@ -0,0 +1,31 @@
+library pub_tests;
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../../lib/src/io.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('checks out the repository for a locked revision', () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+    schedule(() => deleteEntry(path.join(sandboxDir, packagesPath)));
+    schedule(() => deleteEntry(path.join(sandboxDir, cachePath)));
+    d.git(
+        'foo.git',
+        [d.libDir('foo', 'foo 2'), d.libPubspec('foo', '1.0.0')]).commit();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/require_pubspec_name_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/require_pubspec_name_test.dart
new file mode 100644
index 0000000..2450c24
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/require_pubspec_name_test.dart
@@ -0,0 +1,22 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      'requires the dependency to have a pubspec with a name ' 'field',
+      () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo'), d.pubspec({})]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet(
+        error: contains('Missing the required "name" field.'),
+        exitCode: exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/require_pubspec_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/require_pubspec_test.dart
new file mode 100644
index 0000000..774d370
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/require_pubspec_test.dart
@@ -0,0 +1,18 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('requires the dependency to have a pubspec', () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo')]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet(
+        error: new RegExp(
+            r'Could not find a file named "pubspec\.yaml" ' r'in "[^\n]*"\.'));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/stay_locked_if_compatible_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/stay_locked_if_compatible_test.dart
new file mode 100644
index 0000000..7181577
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/stay_locked_if_compatible_test.dart
@@ -0,0 +1,36 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "doesn't upgrade a locked Git package with a new compatible " "constraint",
+      () {
+    ensureGit();
+    d.git(
+        'foo.git',
+        [d.libDir('foo', 'foo 1.0.0'), d.libPubspec("foo", "1.0.0")]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo 1.0.0";')])]).validate();
+    d.git(
+        'foo.git',
+        [d.libDir('foo', 'foo 1.0.1'), d.libPubspec("foo", "1.0.1")]).commit();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git",
+        "version": ">=1.0.0"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo 1.0.0";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/git/unlock_if_incompatible_test.dart b/sdk/lib/_internal/pub_generated/test/get/git/unlock_if_incompatible_test.dart
new file mode 100644
index 0000000..85f8dfe
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/git/unlock_if_incompatible_test.dart
@@ -0,0 +1,34 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      'upgrades a locked Git package with a new incompatible ' 'constraint',
+      () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '0.5.0')]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+    d.git(
+        'foo.git',
+        [d.libDir('foo', 'foo 1.0.0'), d.libPubspec("foo", "1.0.0")]).commit();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git",
+        "version": ">=1.0.0"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo 1.0.0";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/hosted/avoid_network_requests_test.dart b/sdk/lib/_internal/pub_generated/test/get/hosted/avoid_network_requests_test.dart
new file mode 100644
index 0000000..000c11c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/hosted/avoid_network_requests_test.dart
@@ -0,0 +1,40 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('only requests versions that are needed during solving', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0");
+      builder.serve("foo", "1.1.0");
+      builder.serve("foo", "1.2.0");
+      builder.serve("bar", "1.0.0");
+      builder.serve("bar", "1.1.0");
+      builder.serve("bar", "1.2.0");
+    });
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubGet();
+    getRequestedPaths();
+    d.appDir({
+      "foo": "any",
+      "bar": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.2.0",
+      "bar": "1.2.0"
+    }).validate();
+    getRequestedPaths().then((paths) {
+      expect(
+          paths,
+          unorderedEquals(
+              [
+                  "api/packages/bar",
+                  "api/packages/bar/versions/1.2.0",
+                  "packages/bar/versions/1.2.0.tar.gz"]));
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/hosted/cached_pubspec_test.dart b/sdk/lib/_internal/pub_generated/test/get/hosted/cached_pubspec_test.dart
new file mode 100644
index 0000000..82703f0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/hosted/cached_pubspec_test.dart
@@ -0,0 +1,25 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('does not request a pubspec for a cached package', () {
+    servePackages((builder) => builder.serve("foo", "1.2.3"));
+    d.appDir({
+      "foo": "1.2.3"
+    }).create();
+    pubGet();
+    getRequestedPaths();
+    d.cacheDir({
+      "foo": "1.2.3"
+    }).validate();
+    d.packagesDir({
+      "foo": "1.2.3"
+    }).validate();
+    pubGet();
+    getRequestedPaths().then((paths) {
+      expect(paths, isNot(contains("packages/foo/versions/1.2.3.yaml")));
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/hosted/do_not_upgrade_on_removed_constraints_test.dart b/sdk/lib/_internal/pub_generated/test/get/hosted/do_not_upgrade_on_removed_constraints_test.dart
new file mode 100644
index 0000000..56f77b6
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/hosted/do_not_upgrade_on_removed_constraints_test.dart
@@ -0,0 +1,39 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "doesn't upgrade dependencies whose constraints have been " "removed",
+      () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0", deps: {
+        "shared-dep": "any"
+      });
+      builder.serve("bar", "1.0.0", deps: {
+        "shared-dep": "<2.0.0"
+      });
+      builder.serve("shared-dep", "1.0.0");
+      builder.serve("shared-dep", "2.0.0");
+    });
+    d.appDir({
+      "foo": "any",
+      "bar": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.0",
+      "bar": "1.0.0",
+      "shared-dep": "1.0.0"
+    }).validate();
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.0",
+      "bar": null,
+      "shared-dep": "1.0.0"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/hosted/does_no_network_requests_when_possible_test.dart b/sdk/lib/_internal/pub_generated/test/get/hosted/does_no_network_requests_when_possible_test.dart
new file mode 100644
index 0000000..928716a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/hosted/does_no_network_requests_when_possible_test.dart
@@ -0,0 +1,29 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('does not request versions if the lockfile is up to date', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0");
+      builder.serve("foo", "1.1.0");
+      builder.serve("foo", "1.2.0");
+    });
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubGet();
+    getRequestedPaths();
+    pubGet();
+    d.cacheDir({
+      "foo": "1.2.0"
+    }).validate();
+    d.packagesDir({
+      "foo": "1.2.0"
+    }).validate();
+    getRequestedPaths().then((paths) {
+      expect(paths, isEmpty);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/hosted/get_test.dart b/sdk/lib/_internal/pub_generated/test/get/hosted/get_test.dart
new file mode 100644
index 0000000..fe324dc
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/hosted/get_test.dart
@@ -0,0 +1,30 @@
+library pub_tests;
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('gets a package from a pub server', () {
+    servePackages((builder) => builder.serve("foo", "1.2.3"));
+    d.appDir({
+      "foo": "1.2.3"
+    }).create();
+    pubGet();
+    d.cacheDir({
+      "foo": "1.2.3"
+    }).validate();
+    d.packagesDir({
+      "foo": "1.2.3"
+    }).validate();
+  });
+  integration('URL encodes the package name', () {
+    serveNoPackages();
+    d.appDir({
+      "bad name!": "1.2.3"
+    }).create();
+    pubGet(
+        error: new RegExp(
+            r"Could not find package bad name! at http://localhost:\d+\."),
+        exitCode: exit_codes.UNAVAILABLE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/hosted/get_transitive_test.dart b/sdk/lib/_internal/pub_generated/test/get/hosted/get_transitive_test.dart
new file mode 100644
index 0000000..bf1d6bf
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/hosted/get_transitive_test.dart
@@ -0,0 +1,28 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('gets packages transitively from a pub server', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.3", deps: {
+        "bar": "2.0.4"
+      });
+      builder.serve("bar", "2.0.3");
+      builder.serve("bar", "2.0.4");
+      builder.serve("bar", "2.0.5");
+    });
+    d.appDir({
+      "foo": "1.2.3"
+    }).create();
+    pubGet();
+    d.cacheDir({
+      "foo": "1.2.3",
+      "bar": "2.0.4"
+    }).validate();
+    d.packagesDir({
+      "foo": "1.2.3",
+      "bar": "2.0.4"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/hosted/resolve_constraints_test.dart b/sdk/lib/_internal/pub_generated/test/get/hosted/resolve_constraints_test.dart
new file mode 100644
index 0000000..07d3a65
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/hosted/resolve_constraints_test.dart
@@ -0,0 +1,34 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('resolves version constraints from a pub server', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.3", deps: {
+        "baz": ">=2.0.0"
+      });
+      builder.serve("bar", "2.3.4", deps: {
+        "baz": "<3.0.0"
+      });
+      builder.serve("baz", "2.0.3");
+      builder.serve("baz", "2.0.4");
+      builder.serve("baz", "3.0.1");
+    });
+    d.appDir({
+      "foo": "any",
+      "bar": "any"
+    }).create();
+    pubGet();
+    d.cacheDir({
+      "foo": "1.2.3",
+      "bar": "2.3.4",
+      "baz": "2.0.4"
+    }).validate();
+    d.packagesDir({
+      "foo": "1.2.3",
+      "bar": "2.3.4",
+      "baz": "2.0.4"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/hosted/stay_locked_if_compatible_test.dart b/sdk/lib/_internal/pub_generated/test/get/hosted/stay_locked_if_compatible_test.dart
new file mode 100644
index 0000000..039a2ae
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/hosted/stay_locked_if_compatible_test.dart
@@ -0,0 +1,27 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "doesn't upgrade a locked pub server package with a new "
+          "compatible constraint",
+      () {
+    servePackages((builder) => builder.serve("foo", "1.0.0"));
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.0"
+    }).validate();
+    servePackages((builder) => builder.serve("foo", "1.0.1"));
+    d.appDir({
+      "foo": ">=1.0.0"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.0"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/hosted/stay_locked_if_new_is_satisfied_test.dart b/sdk/lib/_internal/pub_generated/test/get/hosted/stay_locked_if_new_is_satisfied_test.dart
new file mode 100644
index 0000000..919fb31
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/hosted/stay_locked_if_new_is_satisfied_test.dart
@@ -0,0 +1,51 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "doesn't unlock dependencies if a new dependency is already " "satisfied",
+      () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0", deps: {
+        "bar": "<2.0.0"
+      });
+      builder.serve("bar", "1.0.0", deps: {
+        "baz": "<2.0.0"
+      });
+      builder.serve("baz", "1.0.0");
+    });
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.0",
+      "bar": "1.0.0",
+      "baz": "1.0.0"
+    }).validate();
+    servePackages((builder) {
+      builder.serve("foo", "2.0.0", deps: {
+        "bar": "<3.0.0"
+      });
+      builder.serve("bar", "2.0.0", deps: {
+        "baz": "<3.0.0"
+      });
+      builder.serve("baz", "2.0.0");
+      builder.serve("newdep", "2.0.0", deps: {
+        "baz": ">=1.0.0"
+      });
+    });
+    d.appDir({
+      "foo": "any",
+      "newdep": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.0",
+      "bar": "1.0.0",
+      "baz": "1.0.0",
+      "newdep": "2.0.0"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/hosted/stay_locked_test.dart b/sdk/lib/_internal/pub_generated/test/get/hosted/stay_locked_test.dart
new file mode 100644
index 0000000..6e66a10
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/hosted/stay_locked_test.dart
@@ -0,0 +1,27 @@
+library pub_tests;
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../../lib/src/io.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      'keeps a pub server package locked to the version in the ' 'lockfile',
+      () {
+    servePackages((builder) => builder.serve("foo", "1.0.0"));
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.0"
+    }).validate();
+    schedule(() => deleteEntry(path.join(sandboxDir, packagesPath)));
+    servePackages((builder) => builder.serve("foo", "1.0.1"));
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.0"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/hosted/unlock_if_incompatible_test.dart b/sdk/lib/_internal/pub_generated/test/get/hosted/unlock_if_incompatible_test.dart
new file mode 100644
index 0000000..e63f841
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/hosted/unlock_if_incompatible_test.dart
@@ -0,0 +1,26 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      'upgrades a locked pub server package with a new incompatible ' 'constraint',
+      () {
+    servePackages((builder) => builder.serve("foo", "1.0.0"));
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.0"
+    }).validate();
+    servePackages((builder) => builder.serve("foo", "1.0.1"));
+    d.appDir({
+      "foo": ">1.0.0"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.1"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/hosted/unlock_if_new_is_unsatisfied_test.dart b/sdk/lib/_internal/pub_generated/test/get/hosted/unlock_if_new_is_unsatisfied_test.dart
new file mode 100644
index 0000000..aab5d66
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/hosted/unlock_if_new_is_unsatisfied_test.dart
@@ -0,0 +1,60 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "unlocks dependencies if necessary to ensure that a new "
+          "dependency is satisfied",
+      () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0", deps: {
+        "bar": "<2.0.0"
+      });
+      builder.serve("bar", "1.0.0", deps: {
+        "baz": "<2.0.0"
+      });
+      builder.serve("baz", "1.0.0", deps: {
+        "qux": "<2.0.0"
+      });
+      builder.serve("qux", "1.0.0");
+    });
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.0",
+      "bar": "1.0.0",
+      "baz": "1.0.0",
+      "qux": "1.0.0"
+    }).validate();
+    servePackages((builder) {
+      builder.serve("foo", "2.0.0", deps: {
+        "bar": "<3.0.0"
+      });
+      builder.serve("bar", "2.0.0", deps: {
+        "baz": "<3.0.0"
+      });
+      builder.serve("baz", "2.0.0", deps: {
+        "qux": "<3.0.0"
+      });
+      builder.serve("qux", "2.0.0");
+      builder.serve("newdep", "2.0.0", deps: {
+        "baz": ">=1.5.0"
+      });
+    });
+    d.appDir({
+      "foo": "any",
+      "newdep": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "2.0.0",
+      "bar": "2.0.0",
+      "baz": "2.0.0",
+      "qux": "1.0.0",
+      "newdep": "2.0.0"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/hosted/unlock_if_version_doesnt_exist_test.dart b/sdk/lib/_internal/pub_generated/test/get/hosted/unlock_if_version_doesnt_exist_test.dart
new file mode 100644
index 0000000..0d80484
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/hosted/unlock_if_version_doesnt_exist_test.dart
@@ -0,0 +1,27 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../../lib/src/io.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      'upgrades a locked pub server package with a nonexistent version',
+      () {
+    servePackages((builder) => builder.serve("foo", "1.0.0"));
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.0"
+    }).validate();
+    schedule(() => deleteEntry(p.join(sandboxDir, cachePath)));
+    servePackages((builder) => builder.serve("foo", "1.0.1"), replace: true);
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.1"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/path/absolute_path_test.dart b/sdk/lib/_internal/pub_generated/test/get/path/absolute_path_test.dart
new file mode 100644
index 0000000..c5af665
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/path/absolute_path_test.dart
@@ -0,0 +1,23 @@
+import 'package:path/path.dart' as path;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('path dependency with absolute path', () {
+    d.dir('foo', [d.libDir('foo'), d.libPubspec('foo', '0.0.1')]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": path.join(sandboxDir, "foo")
+        }
+      })]).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir("foo", [d.file("foo.dart", 'main() => "foo";')])]).validate();
+    d.dir("moved").create();
+    scheduleRename(packagesPath, "moved/packages");
+    d.dir(
+        "moved/packages",
+        [d.dir("foo", [d.file("foo.dart", 'main() => "foo";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/path/absolute_symlink_test.dart b/sdk/lib/_internal/pub_generated/test/get/path/absolute_symlink_test.dart
new file mode 100644
index 0000000..e96f4ef
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/path/absolute_symlink_test.dart
@@ -0,0 +1,26 @@
+import 'package:path/path.dart' as path;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "generates a symlink with an absolute path if the dependency "
+          "path was absolute",
+      () {
+    d.dir("foo", [d.libDir("foo"), d.libPubspec("foo", "0.0.1")]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": path.join(sandboxDir, "foo")
+        }
+      })]).create();
+    pubGet();
+    d.dir("moved").create();
+    scheduleRename(appPath, path.join("moved", appPath));
+    d.dir(
+        "moved",
+        [
+            d.dir(
+                packagesPath,
+                [d.dir("foo", [d.file("foo.dart", 'main() => "foo";')])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/path/empty_pubspec_test.dart b/sdk/lib/_internal/pub_generated/test/get/path/empty_pubspec_test.dart
new file mode 100644
index 0000000..8eb5c93
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/path/empty_pubspec_test.dart
@@ -0,0 +1,19 @@
+import 'package:path/path.dart' as p;
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('path dependency to an empty pubspec', () {
+    d.dir('foo', [d.libDir('foo'), d.file('pubspec.yaml', '')]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    pubGet(
+        exitCode: exit_codes.DATA,
+        error: 'Error on line 1, column 1 of ${p.join('..', 'foo', 'pubspec.yaml')}: '
+            'Missing the required "name" field.');
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/path/no_pubspec_test.dart b/sdk/lib/_internal/pub_generated/test/get/path/no_pubspec_test.dart
new file mode 100644
index 0000000..9e22a1f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/path/no_pubspec_test.dart
@@ -0,0 +1,18 @@
+import 'package:path/path.dart' as path;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('path dependency to non-package directory', () {
+    d.dir('foo').create();
+    var fooPath = path.join(sandboxDir, "foo");
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": fooPath
+        }
+      })]).create();
+    pubGet(
+        error: new RegExp(
+            r'Could not find a file named "pubspec.yaml" ' r'in "[^\n]*"\.'));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/path/nonexistent_dir_test.dart b/sdk/lib/_internal/pub_generated/test/get/path/nonexistent_dir_test.dart
new file mode 100644
index 0000000..365b2be
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/path/nonexistent_dir_test.dart
@@ -0,0 +1,19 @@
+import 'package:path/path.dart' as path;
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('path dependency to non-existent directory', () {
+    var badPath = path.join(sandboxDir, "bad_path");
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": badPath
+        }
+      })]).create();
+    pubGet(error: """
+        Could not find package foo at "$badPath".
+        Depended on by:
+        - myapp 0.0.0""", exitCode: exit_codes.UNAVAILABLE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/path/path_is_file_test.dart b/sdk/lib/_internal/pub_generated/test/get/path/path_is_file_test.dart
new file mode 100644
index 0000000..2b64b4f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/path/path_is_file_test.dart
@@ -0,0 +1,19 @@
+import 'package:path/path.dart' as path;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('path dependency when path is a file', () {
+    d.dir('foo', [d.libDir('foo'), d.libPubspec('foo', '0.0.1')]).create();
+    d.file('dummy.txt', '').create();
+    var dummyPath = path.join(sandboxDir, 'dummy.txt');
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": dummyPath
+        }
+      })]).create();
+    pubGet(
+        error: 'Path dependency for package foo must refer to a '
+            'directory, not a file. Was "$dummyPath".');
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/path/relative_path_test.dart b/sdk/lib/_internal/pub_generated/test/get/path/relative_path_test.dart
new file mode 100644
index 0000000..85dcf03
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/path/relative_path_test.dart
@@ -0,0 +1,58 @@
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:unittest/unittest.dart';
+import '../../../lib/src/lock_file.dart';
+import '../../../lib/src/source_registry.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration("can use relative path", () {
+    d.dir("foo", [d.libDir("foo"), d.libPubspec("foo", "0.0.1")]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir("foo", [d.file("foo.dart", 'main() => "foo";')])]).validate();
+  });
+  integration("path is relative to containing d.pubspec", () {
+    d.dir(
+        "relative",
+        [d.dir("foo", [d.libDir("foo"), d.libPubspec("foo", "0.0.1", deps: {
+          "bar": {
+            "path": "../bar"
+          }
+        })]),
+            d.dir("bar", [d.libDir("bar"), d.libPubspec("bar", "0.0.1")])]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../relative/foo"
+        }
+      })]).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [
+            d.dir("foo", [d.file("foo.dart", 'main() => "foo";')]),
+            d.dir("bar", [d.file("bar.dart", 'main() => "bar";')])]).validate();
+  });
+  integration("relative path preserved in the lockfile", () {
+    d.dir("foo", [d.libDir("foo"), d.libPubspec("foo", "0.0.1")]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    pubGet();
+    schedule(() {
+      var lockfilePath = path.join(sandboxDir, appPath, "pubspec.lock");
+      var lockfile = new LockFile.load(lockfilePath, new SourceRegistry());
+      var description = lockfile.packages["foo"].description;
+      expect(path.isRelative(description["path"]), isTrue);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/path/relative_symlink_test.dart b/sdk/lib/_internal/pub_generated/test/get/path/relative_symlink_test.dart
new file mode 100644
index 0000000..99f51e0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/path/relative_symlink_test.dart
@@ -0,0 +1,29 @@
+import 'dart:io';
+import 'package:path/path.dart' as path;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  if (Platform.operatingSystem == "windows") return;
+  initConfig();
+  integration(
+      "generates a symlink with a relative path if the dependency "
+          "path was relative",
+      () {
+    d.dir("foo", [d.libDir("foo"), d.libPubspec("foo", "0.0.1")]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    pubGet();
+    d.dir("moved").create();
+    scheduleRename("foo", path.join("moved", "foo"));
+    scheduleRename(appPath, path.join("moved", appPath));
+    d.dir(
+        "moved",
+        [
+            d.dir(
+                packagesPath,
+                [d.dir("foo", [d.file("foo.dart", 'main() => "foo";')])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/path/shared_dependency_symlink_test.dart b/sdk/lib/_internal/pub_generated/test/get/path/shared_dependency_symlink_test.dart
new file mode 100644
index 0000000..badc9f7
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/path/shared_dependency_symlink_test.dart
@@ -0,0 +1,38 @@
+import 'package:path/path.dart' as path;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration("shared dependency with symlink", () {
+    d.dir(
+        "shared",
+        [d.libDir("shared"), d.libPubspec("shared", "0.0.1")]).create();
+    d.dir("foo", [d.libDir("foo"), d.libPubspec("foo", "0.0.1", deps: {
+        "shared": {
+          "path": "../shared"
+        }
+      })]).create();
+    d.dir("bar", [d.libDir("bar"), d.libPubspec("bar", "0.0.1", deps: {
+        "shared": {
+          "path": "../link/shared"
+        }
+      })]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        },
+        "bar": {
+          "path": "../bar"
+        }
+      })]).create();
+    d.dir("link").create();
+    scheduleSymlink("shared", path.join("link", "shared"));
+    pubGet();
+    d.dir(
+        packagesPath,
+        [
+            d.dir("foo", [d.file("foo.dart", 'main() => "foo";')]),
+            d.dir("bar", [d.file("bar.dart", 'main() => "bar";')]),
+            d.dir("shared", [d.file("shared.dart", 'main() => "shared";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/path/shared_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/get/path/shared_dependency_test.dart
new file mode 100644
index 0000000..ef92bcd
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/path/shared_dependency_test.dart
@@ -0,0 +1,96 @@
+import 'package:path/path.dart' as path;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration("shared dependency with same path", () {
+    d.dir(
+        "shared",
+        [d.libDir("shared"), d.libPubspec("shared", "0.0.1")]).create();
+    d.dir("foo", [d.libDir("foo"), d.libPubspec("foo", "0.0.1", deps: {
+        "shared": {
+          "path": "../shared"
+        }
+      })]).create();
+    d.dir("bar", [d.libDir("bar"), d.libPubspec("bar", "0.0.1", deps: {
+        "shared": {
+          "path": "../shared"
+        }
+      })]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        },
+        "bar": {
+          "path": "../bar"
+        }
+      })]).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [
+            d.dir("foo", [d.file("foo.dart", 'main() => "foo";')]),
+            d.dir("bar", [d.file("bar.dart", 'main() => "bar";')]),
+            d.dir("shared", [d.file("shared.dart", 'main() => "shared";')])]).validate();
+  });
+  integration("shared dependency with paths that normalize the same", () {
+    d.dir(
+        "shared",
+        [d.libDir("shared"), d.libPubspec("shared", "0.0.1")]).create();
+    d.dir("foo", [d.libDir("foo"), d.libPubspec("foo", "0.0.1", deps: {
+        "shared": {
+          "path": "../shared"
+        }
+      })]).create();
+    d.dir("bar", [d.libDir("bar"), d.libPubspec("bar", "0.0.1", deps: {
+        "shared": {
+          "path": "../././shared"
+        }
+      })]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        },
+        "bar": {
+          "path": "../bar"
+        }
+      })]).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [
+            d.dir("foo", [d.file("foo.dart", 'main() => "foo";')]),
+            d.dir("bar", [d.file("bar.dart", 'main() => "bar";')]),
+            d.dir("shared", [d.file("shared.dart", 'main() => "shared";')])]).validate();
+  });
+  integration("shared dependency with absolute and relative path", () {
+    d.dir(
+        "shared",
+        [d.libDir("shared"), d.libPubspec("shared", "0.0.1")]).create();
+    d.dir("foo", [d.libDir("foo"), d.libPubspec("foo", "0.0.1", deps: {
+        "shared": {
+          "path": "../shared"
+        }
+      })]).create();
+    d.dir("bar", [d.libDir("bar"), d.libPubspec("bar", "0.0.1", deps: {
+        "shared": {
+          "path": path.join(sandboxDir, "shared")
+        }
+      })]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        },
+        "bar": {
+          "path": "../bar"
+        }
+      })]).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [
+            d.dir("foo", [d.file("foo.dart", 'main() => "foo";')]),
+            d.dir("bar", [d.file("bar.dart", 'main() => "bar";')]),
+            d.dir("shared", [d.file("shared.dart", 'main() => "shared";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/relative_symlink_test.dart b/sdk/lib/_internal/pub_generated/test/get/relative_symlink_test.dart
new file mode 100644
index 0000000..c0ee776
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/relative_symlink_test.dart
@@ -0,0 +1,33 @@
+library pub_tests;
+import 'dart:io';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  if (Platform.operatingSystem == "windows") return;
+  initConfig();
+  integration('uses a relative symlink for the self link', () {
+    d.dir(appPath, [d.appPubspec(), d.libDir('foo')]).create();
+    pubGet();
+    scheduleRename(appPath, "moved");
+    d.dir(
+        "moved",
+        [
+            d.dir(
+                "packages",
+                [d.dir("myapp", [d.file('foo.dart', 'main() => "foo";')])])]).validate();
+  });
+  integration('uses a relative symlink for secondary packages directory', () {
+    d.dir(appPath, [d.appPubspec(), d.libDir('foo'), d.dir("bin")]).create();
+    pubGet();
+    scheduleRename(appPath, "moved");
+    d.dir(
+        "moved",
+        [
+            d.dir(
+                "bin",
+                [
+                    d.dir(
+                        "packages",
+                        [d.dir("myapp", [d.file('foo.dart', 'main() => "foo";')])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/get/switch_source_test.dart b/sdk/lib/_internal/pub_generated/test/get/switch_source_test.dart
new file mode 100644
index 0000000..9791952
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/get/switch_source_test.dart
@@ -0,0 +1,28 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('re-gets a package if its source has changed', () {
+    servePackages((builder) => builder.serve("foo", "1.2.3"));
+    d.dir(
+        'foo',
+        [d.libDir('foo', 'foo 0.0.1'), d.libPubspec('foo', '0.0.1')]).create();
+    d.appDir({
+      "foo": {
+        "path": "../foo"
+      }
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "0.0.1"
+    }).validate();
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.2.3"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/activate_git_after_hosted_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/activate_git_after_hosted_test.dart
new file mode 100644
index 0000000..240c1af
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/activate_git_after_hosted_test.dart
@@ -0,0 +1,32 @@
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('activating a Git package deactivates the hosted one', () {
+    ensureGit();
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "1.0.0",
+          contents: [
+              d.dir("bin", [d.file("foo.dart", "main(args) => print('hosted');")])]);
+    });
+    d.git(
+        'foo.git',
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("bin", [d.file("foo.dart", "main() => print('git');")])]).create();
+    schedulePub(args: ["global", "activate", "foo"]);
+    schedulePub(args: ["global", "activate", "-sgit", "../foo.git"], output: """
+            Package foo is currently active at version 1.0.0.
+            Resolving dependencies...
+            + foo 1.0.0 from git ../foo.git
+            Precompiling executables...
+            Loading source assets...
+            Precompiled foo:foo.
+            Activated foo 1.0.0 from Git repository "../foo.git".""");
+    var pub = pubRun(global: true, args: ["foo"]);
+    pub.stdout.expect("git");
+    pub.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/activate_hosted_after_git_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/activate_hosted_after_git_test.dart
new file mode 100644
index 0000000..70f2bf8
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/activate_hosted_after_git_test.dart
@@ -0,0 +1,35 @@
+import 'package:path/path.dart' as p;
+import '../../../lib/src/io.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('activating a hosted package deactivates the Git one', () {
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "2.0.0",
+          contents: [
+              d.dir("bin", [d.file("foo.dart", "main(args) => print('hosted');")])]);
+    });
+    d.git(
+        'foo.git',
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("bin", [d.file("foo.dart", "main() => print('git');")])]).create();
+    schedulePub(args: ["global", "activate", "-sgit", "../foo.git"]);
+    var path = canonicalize(p.join(sandboxDir, "foo"));
+    schedulePub(args: ["global", "activate", "foo"], output: """
+        Package foo is currently active from Git repository "../foo.git".
+        Resolving dependencies...
+        + foo 2.0.0
+        Downloading foo 2.0.0...
+        Precompiling executables...
+        Loading source assets...
+        Precompiled foo:foo.
+        Activated foo 2.0.0.""");
+    var pub = pubRun(global: true, args: ["foo"]);
+    pub.stdout.expect("hosted");
+    pub.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/activate_hosted_after_path_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/activate_hosted_after_path_test.dart
new file mode 100644
index 0000000..73aa646
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/activate_hosted_after_path_test.dart
@@ -0,0 +1,35 @@
+import 'package:path/path.dart' as p;
+import '../../../lib/src/io.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('activating a hosted package deactivates the path one', () {
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "2.0.0",
+          contents: [
+              d.dir("bin", [d.file("foo.dart", "main(args) => print('hosted');")])]);
+    });
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("bin", [d.file("foo.dart", "main() => print('path');")])]).create();
+    schedulePub(args: ["global", "activate", "-spath", "../foo"]);
+    var path = canonicalize(p.join(sandboxDir, "foo"));
+    schedulePub(args: ["global", "activate", "foo"], output: """
+        Package foo is currently active at path "$path".
+        Resolving dependencies...
+        + foo 2.0.0
+        Downloading foo 2.0.0...
+        Precompiling executables...
+        Loading source assets...
+        Precompiled foo:foo.
+        Activated foo 2.0.0.""");
+    var pub = pubRun(global: true, args: ["foo"]);
+    pub.stdout.expect("hosted");
+    pub.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/activate_path_after_hosted_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/activate_path_after_hosted_test.dart
new file mode 100644
index 0000000..5c9c8d7
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/activate_path_after_hosted_test.dart
@@ -0,0 +1,29 @@
+import 'package:path/path.dart' as p;
+import '../../../lib/src/io.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('activating a hosted package deactivates the path one', () {
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "1.0.0",
+          contents: [
+              d.dir("bin", [d.file("foo.dart", "main(args) => print('hosted');")])]);
+    });
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "2.0.0"),
+            d.dir("bin", [d.file("foo.dart", "main() => print('path');")])]).create();
+    schedulePub(args: ["global", "activate", "foo"]);
+    var path = canonicalize(p.join(sandboxDir, "foo"));
+    schedulePub(args: ["global", "activate", "-spath", "../foo"], output: """
+        Package foo is currently active at version 1.0.0.
+        Activated foo 2.0.0 at path "$path".""");
+    var pub = pubRun(global: true, args: ["foo"]);
+    pub.stdout.expect("path");
+    pub.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/bad_version_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/bad_version_test.dart
new file mode 100644
index 0000000..8130c3f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/bad_version_test.dart
@@ -0,0 +1,17 @@
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('fails if the version constraint cannot be parsed', () {
+    schedulePub(args: ["global", "activate", "foo", "1.0"], error: """
+            Could not parse version "1.0". Unknown text at "1.0".
+
+            Usage: pub global activate <package...>
+            -h, --help      Print usage information for this command.
+            -s, --source    The source used to find the package.
+                            [git, hosted (default), path]
+
+            Run "pub help" to see global options.
+            """, exitCode: exit_codes.USAGE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/cached_package_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/cached_package_test.dart
new file mode 100644
index 0000000..8a2a5e4
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/cached_package_test.dart
@@ -0,0 +1,25 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('can activate an already cached package', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0");
+    });
+    schedulePub(args: ["cache", "add", "foo"]);
+    schedulePub(args: ["global", "activate", "foo"], output: """
+        Resolving dependencies...
+        + foo 1.0.0
+        Precompiling executables...
+        Loading source assets...
+        Activated foo 1.0.0.""");
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'global_packages',
+                [
+                    d.dir('foo', [d.matcherFile('pubspec.lock', contains('1.0.0'))])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/constraint_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/constraint_test.dart
new file mode 100644
index 0000000..dd3ab63
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/constraint_test.dart
@@ -0,0 +1,22 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('chooses the highest version that matches the constraint', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0");
+      builder.serve("foo", "1.0.1");
+      builder.serve("foo", "1.1.0");
+      builder.serve("foo", "1.2.3");
+    });
+    schedulePub(args: ["global", "activate", "foo", "<1.1.0"]);
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'global_packages',
+                [
+                    d.dir('foo', [d.matcherFile('pubspec.lock', contains('1.0.1'))])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/constraint_with_path_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/constraint_with_path_test.dart
new file mode 100644
index 0000000..fed36ab
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/constraint_with_path_test.dart
@@ -0,0 +1,19 @@
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('fails if a version is passed with the path source', () {
+    schedulePub(
+        args: ["global", "activate", "-spath", "foo", "1.2.3"],
+        error: """
+            Unexpected argument "1.2.3".
+
+            Usage: pub global activate <package...>
+            -h, --help      Print usage information for this command.
+            -s, --source    The source used to find the package.
+                            [git, hosted (default), path]
+
+            Run "pub help" to see global options.
+            """, exitCode: exit_codes.USAGE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/different_version_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/different_version_test.dart
new file mode 100644
index 0000000..affbfc5
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/different_version_test.dart
@@ -0,0 +1,21 @@
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "discards the previous active version if it doesn't match the " "constraint",
+      () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0");
+      builder.serve("foo", "2.0.0");
+    });
+    schedulePub(args: ["global", "activate", "foo", "1.0.0"]);
+    schedulePub(args: ["global", "activate", "foo", ">1.0.0"], output: """
+        Package foo is currently active at version 1.0.0.
+        Resolving dependencies...
+        + foo 2.0.0
+        Downloading foo 2.0.0...
+        Precompiling executables...
+        Loading source assets...
+        Activated foo 2.0.0.""");
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/doesnt_snapshot_path_executables_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/doesnt_snapshot_path_executables_test.dart
new file mode 100644
index 0000000..40dac5b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/doesnt_snapshot_path_executables_test.dart
@@ -0,0 +1,29 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration("doesn't snapshots the executables for a path package", () {
+    d.dir(
+        'foo',
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir(
+                "bin",
+                [d.file("hello.dart", "void main() => print('hello!');")])]).create();
+    schedulePub(
+        args: ["global", "activate", "-spath", "../foo"],
+        output: isNot(contains('Precompiled foo:hello.')));
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'global_packages',
+                [
+                    d.dir(
+                        'foo',
+                        [
+                            d.matcherFile('pubspec.lock', contains('1.0.0')),
+                            d.nothing('bin')])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/empty_constraint_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/empty_constraint_test.dart
new file mode 100644
index 0000000..3101c4e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/empty_constraint_test.dart
@@ -0,0 +1,15 @@
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('errors if the constraint matches no versions', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0");
+      builder.serve("foo", "1.0.1");
+    });
+    schedulePub(args: ["global", "activate", "foo", ">1.1.0"], error: """
+            Package foo has no versions that match >1.1.0 derived from:
+            - pub global activate depends on version >1.1.0""",
+        exitCode: exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/git_package_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/git_package_test.dart
new file mode 100644
index 0000000..d3df043
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/git_package_test.dart
@@ -0,0 +1,20 @@
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('activates a package from a Git repo', () {
+    ensureGit();
+    d.git(
+        'foo.git',
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("bin", [d.file("foo.dart", "main() => print('ok');")])]).create();
+    schedulePub(args: ["global", "activate", "-sgit", "../foo.git"], output: '''
+            Resolving dependencies...
+            + foo 1.0.0 from git ../foo.git
+            Precompiling executables...
+            Loading source assets...
+            Precompiled foo:foo.
+            Activated foo 1.0.0 from Git repository "../foo.git".''');
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/ignores_active_version_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/ignores_active_version_test.dart
new file mode 100644
index 0000000..ab1f74d
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/ignores_active_version_test.dart
@@ -0,0 +1,19 @@
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('ignores previously activated version', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.3");
+      builder.serve("foo", "1.3.0");
+    });
+    schedulePub(args: ["global", "activate", "foo", "1.2.3"]);
+    schedulePub(args: ["global", "activate", "foo", ">1.0.0"], output: """
+        Package foo is currently active at version 1.2.3.
+        Resolving dependencies...
+        + foo 1.3.0
+        Downloading foo 1.3.0...
+        Precompiling executables...
+        Loading source assets...
+        Activated foo 1.3.0.""");
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/installs_dependencies_for_git_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/installs_dependencies_for_git_test.dart
new file mode 100644
index 0000000..8c0f4b3
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/installs_dependencies_for_git_test.dart
@@ -0,0 +1,22 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('activating a Git package installs its dependencies', () {
+    servePackages((builder) {
+      builder.serve("bar", "1.0.0", deps: {
+        "baz": "any"
+      });
+      builder.serve("baz", "1.0.0");
+    });
+    d.git('foo.git', [d.libPubspec("foo", "1.0.0", deps: {
+        "bar": "any"
+      }),
+          d.dir("bin", [d.file("foo.dart", "main() => print('ok');")])]).create();
+    schedulePub(
+        args: ["global", "activate", "-sgit", "../foo.git"],
+        output: allOf(
+            [contains("Downloading bar 1.0.0..."), contains("Downloading baz 1.0.0...")]));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/installs_dependencies_for_path_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/installs_dependencies_for_path_test.dart
new file mode 100644
index 0000000..dbad11f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/installs_dependencies_for_path_test.dart
@@ -0,0 +1,37 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('activating a path package installs dependencies', () {
+    servePackages((builder) {
+      builder.serve("bar", "1.0.0", deps: {
+        "baz": "any"
+      });
+      builder.serve("baz", "2.0.0");
+    });
+    d.dir("foo", [d.libPubspec("foo", "0.0.0", deps: {
+        "bar": "any"
+      }),
+          d.dir("bin", [d.file("foo.dart", "main() => print('ok');")])]).create();
+    var pub = startPub(args: ["global", "activate", "-spath", "../foo"]);
+    pub.stdout.expect(consumeThrough("Resolving dependencies..."));
+    pub.stdout.expect(consumeThrough("Downloading bar 1.0.0..."));
+    pub.stdout.expect(consumeThrough("Downloading baz 2.0.0..."));
+    pub.stdout.expect(
+        consumeThrough(startsWith("Activated foo 0.0.0 at path")));
+    pub.shouldExit();
+    d.dir(
+        "foo",
+        [
+            d.matcherFile(
+                "pubspec.lock",
+                allOf(
+                    [
+                        contains("bar"),
+                        contains("1.0.0"),
+                        contains("baz"),
+                        contains("2.0.0")]))]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/installs_dependencies_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/installs_dependencies_test.dart
new file mode 100644
index 0000000..17fc18a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/installs_dependencies_test.dart
@@ -0,0 +1,20 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('activating a package installs its dependencies', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0", deps: {
+        "bar": "any"
+      });
+      builder.serve("bar", "1.0.0", deps: {
+        "baz": "any"
+      });
+      builder.serve("baz", "1.0.0");
+    });
+    schedulePub(
+        args: ["global", "activate", "foo"],
+        output: allOf(
+            [contains("Downloading bar 1.0.0..."), contains("Downloading baz 1.0.0...")]));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/missing_git_repo_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/missing_git_repo_test.dart
new file mode 100644
index 0000000..4799c3a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/missing_git_repo_test.dart
@@ -0,0 +1,12 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('fails if the Git repo does not exist', () {
+    ensureGit();
+    schedulePub(
+        args: ["global", "activate", "-sgit", "../nope.git"],
+        error: contains("repository '../nope.git' does not exist"),
+        exitCode: 1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/missing_package_arg_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/missing_package_arg_test.dart
new file mode 100644
index 0000000..b2eec9e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/missing_package_arg_test.dart
@@ -0,0 +1,17 @@
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('fails if no package was given', () {
+    schedulePub(args: ["global", "activate"], error: """
+            No package to activate given.
+
+            Usage: pub global activate <package...>
+            -h, --help      Print usage information for this command.
+            -s, --source    The source used to find the package.
+                            [git, hosted (default), path]
+
+            Run "pub help" to see global options.""",
+        exitCode: exit_codes.USAGE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/path_package_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/path_package_test.dart
new file mode 100644
index 0000000..d288f7c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/path_package_test.dart
@@ -0,0 +1,18 @@
+import 'package:path/path.dart' as p;
+import '../../../lib/src/io.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('activates a package at a local path', () {
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("bin", [d.file("foo.dart", "main() => print('ok');")])]).create();
+    var path = canonicalize(p.join(sandboxDir, "foo"));
+    schedulePub(
+        args: ["global", "activate", "--source", "path", "../foo"],
+        output: 'Activated foo 1.0.0 at path "$path".');
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/reactivating_git_upgrades_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/reactivating_git_upgrades_test.dart
new file mode 100644
index 0000000..6b91686
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/reactivating_git_upgrades_test.dart
@@ -0,0 +1,23 @@
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('ignores previously activated git commit', () {
+    ensureGit();
+    d.git('foo.git', [d.libPubspec("foo", "1.0.0")]).create();
+    schedulePub(args: ["global", "activate", "-sgit", "../foo.git"], output: '''
+            Resolving dependencies...
+            + foo 1.0.0 from git ../foo.git
+            Precompiling executables...
+            Loading source assets...
+            Activated foo 1.0.0 from Git repository "../foo.git".''');
+    d.git('foo.git', [d.libPubspec("foo", "1.0.1")]).commit();
+    schedulePub(args: ["global", "activate", "-sgit", "../foo.git"], output: '''
+            Package foo is currently active from Git repository "../foo.git".
+            Resolving dependencies...
+            + foo 1.0.1 from git ../foo.git
+            Precompiling executables...
+            Loading source assets...
+            Activated foo 1.0.1 from Git repository "../foo.git".''');
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/removes_old_lockfile_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/removes_old_lockfile_test.dart
new file mode 100644
index 0000000..0e9d45a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/removes_old_lockfile_test.dart
@@ -0,0 +1,30 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('removes the 1.6-style lockfile', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0");
+    });
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'global_packages',
+                [
+                    d.file(
+                        'foo.lock',
+                        'packages: {foo: {description: foo, source: hosted, '
+                            'version: "1.0.0"}}}')])]).create();
+    schedulePub(args: ["global", "activate", "foo"]);
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'global_packages',
+                [
+                    d.nothing('foo.lock'),
+                    d.dir('foo', [d.matcherFile('pubspec.lock', contains('1.0.0'))])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/snapshots_git_executables_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/snapshots_git_executables_test.dart
new file mode 100644
index 0000000..a71ecf2
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/snapshots_git_executables_test.dart
@@ -0,0 +1,43 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('snapshots the executables for a Git repo', () {
+    ensureGit();
+    d.git(
+        'foo.git',
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir(
+                "bin",
+                [
+                    d.file("hello.dart", "void main() => print('hello!');"),
+                    d.file("goodbye.dart", "void main() => print('goodbye!');"),
+                    d.file("shell.sh", "echo shell"),
+                    d.dir(
+                        "subdir",
+                        [d.file("sub.dart", "void main() => print('sub!');")])])]).create();
+    schedulePub(
+        args: ["global", "activate", "-sgit", "../foo.git"],
+        output: allOf(
+            [contains('Precompiled foo:hello.'), contains("Precompiled foo:goodbye.")]));
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'global_packages',
+                [
+                    d.dir(
+                        'foo',
+                        [
+                            d.matcherFile('pubspec.lock', contains('1.0.0')),
+                            d.dir(
+                                'bin',
+                                [
+                                    d.matcherFile('hello.dart.snapshot', contains('hello!')),
+                                    d.matcherFile('goodbye.dart.snapshot', contains('goodbye!')),
+                                    d.nothing('shell.sh.snapshot'),
+                                    d.nothing('subdir')])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/snapshots_hosted_executables_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/snapshots_hosted_executables_test.dart
new file mode 100644
index 0000000..4aa2499
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/snapshots_hosted_executables_test.dart
@@ -0,0 +1,42 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('snapshots the executables for a hosted package', () {
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "1.0.0",
+          contents: [
+              d.dir(
+                  'bin',
+                  [
+                      d.file("hello.dart", "void main() => print('hello!');"),
+                      d.file("goodbye.dart", "void main() => print('goodbye!');"),
+                      d.file("shell.sh", "echo shell"),
+                      d.dir("subdir", [d.file("sub.dart", "void main() => print('sub!');")])])]);
+    });
+    schedulePub(
+        args: ["global", "activate", "foo"],
+        output: allOf(
+            [contains('Precompiled foo:hello.'), contains("Precompiled foo:goodbye.")]));
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'global_packages',
+                [
+                    d.dir(
+                        'foo',
+                        [
+                            d.matcherFile('pubspec.lock', contains('1.0.0')),
+                            d.dir(
+                                'bin',
+                                [
+                                    d.matcherFile('hello.dart.snapshot', contains('hello!')),
+                                    d.matcherFile('goodbye.dart.snapshot', contains('goodbye!')),
+                                    d.nothing('shell.sh.snapshot'),
+                                    d.nothing('subdir')])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/supports_version_solver_backtracking_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/supports_version_solver_backtracking_test.dart
new file mode 100644
index 0000000..237bc05
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/supports_version_solver_backtracking_test.dart
@@ -0,0 +1,28 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('performs verison solver backtracking if necessary', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.1.0", pubspec: {
+        "environment": {
+          "sdk": ">=0.1.2 <0.2.0"
+        }
+      });
+      builder.serve("foo", "1.2.0", pubspec: {
+        "environment": {
+          "sdk": ">=0.1.3 <0.2.0"
+        }
+      });
+    });
+    schedulePub(args: ["global", "activate", "foo"]);
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'global_packages',
+                [
+                    d.dir('foo', [d.matcherFile('pubspec.lock', contains('1.1.0'))])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/uncached_package_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/uncached_package_test.dart
new file mode 100644
index 0000000..613165e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/uncached_package_test.dart
@@ -0,0 +1,27 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('installs and activates the best version of a package', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0");
+      builder.serve("foo", "1.2.3");
+      builder.serve("foo", "2.0.0-wildly.unstable");
+    });
+    schedulePub(args: ["global", "activate", "foo"], output: """
+        Resolving dependencies...
+        + foo 1.2.3 (2.0.0-wildly.unstable available)
+        Downloading foo 1.2.3...
+        Precompiling executables...
+        Loading source assets...
+        Activated foo 1.2.3.""");
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'global_packages',
+                [
+                    d.dir('foo', [d.matcherFile('pubspec.lock', contains('1.2.3'))])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/unexpected_arguments_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/unexpected_arguments_test.dart
new file mode 100644
index 0000000..090a437
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/unexpected_arguments_test.dart
@@ -0,0 +1,19 @@
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('fails if there are extra arguments', () {
+    schedulePub(
+        args: ["global", "activate", "foo", "1.0.0", "bar", "baz"],
+        error: """
+            Unexpected arguments "bar" and "baz".
+
+            Usage: pub global activate <package...>
+            -h, --help      Print usage information for this command.
+            -s, --source    The source used to find the package.
+                            [git, hosted (default), path]
+
+            Run "pub help" to see global options.""",
+        exitCode: exit_codes.USAGE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/activate/unknown_package_test.dart b/sdk/lib/_internal/pub_generated/test/global/activate/unknown_package_test.dart
new file mode 100644
index 0000000..62d05642
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/activate/unknown_package_test.dart
@@ -0,0 +1,13 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('errors if the package could not be found', () {
+    serveNoPackages();
+    schedulePub(
+        args: ["global", "activate", "foo"],
+        error: startsWith("Could not find package foo at"),
+        exitCode: exit_codes.UNAVAILABLE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/deactivate/deactivate_and_reactivate_package_test.dart b/sdk/lib/_internal/pub_generated/test/global/deactivate/deactivate_and_reactivate_package_test.dart
new file mode 100644
index 0000000..8d4cf6d
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/deactivate/deactivate_and_reactivate_package_test.dart
@@ -0,0 +1,21 @@
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('activates a different version after deactivating', () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0");
+      builder.serve("foo", "2.0.0");
+    });
+    schedulePub(args: ["global", "activate", "foo", "1.0.0"]);
+    schedulePub(
+        args: ["global", "deactivate", "foo"],
+        output: "Deactivated package foo 1.0.0.");
+    schedulePub(args: ["global", "activate", "foo"], output: """
+        Resolving dependencies...
+        + foo 2.0.0
+        Downloading foo 2.0.0...
+        Precompiling executables...
+        Loading source assets...
+        Activated foo 2.0.0.""");
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/deactivate/git_package_test.dart b/sdk/lib/_internal/pub_generated/test/global/deactivate/git_package_test.dart
new file mode 100644
index 0000000..dfedf47
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/deactivate/git_package_test.dart
@@ -0,0 +1,17 @@
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('deactivates an active Git package', () {
+    ensureGit();
+    d.git(
+        'foo.git',
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("bin", [d.file("foo.dart", "main() => print('ok');")])]).create();
+    schedulePub(args: ["global", "activate", "-sgit", "../foo.git"]);
+    schedulePub(
+        args: ["global", "deactivate", "foo"],
+        output: 'Deactivated package foo 1.0.0 from Git repository "../foo.git".');
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/deactivate/hosted_package_test.dart b/sdk/lib/_internal/pub_generated/test/global/deactivate/hosted_package_test.dart
new file mode 100644
index 0000000..c961d5b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/deactivate/hosted_package_test.dart
@@ -0,0 +1,11 @@
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('deactivates an active hosted package', () {
+    servePackages((builder) => builder.serve("foo", "1.0.0"));
+    schedulePub(args: ["global", "activate", "foo"]);
+    schedulePub(
+        args: ["global", "deactivate", "foo"],
+        output: "Deactivated package foo 1.0.0.");
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/deactivate/missing_package_arg_test.dart b/sdk/lib/_internal/pub_generated/test/global/deactivate/missing_package_arg_test.dart
new file mode 100644
index 0000000..243410a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/deactivate/missing_package_arg_test.dart
@@ -0,0 +1,15 @@
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('fails if no package was given', () {
+    schedulePub(args: ["global", "deactivate"], error: """
+            No package to deactivate given.
+
+            Usage: pub global deactivate <package>
+            -h, --help    Print usage information for this command.
+
+            Run "pub help" to see global options.
+            """, exitCode: exit_codes.USAGE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/deactivate/path_package_test.dart b/sdk/lib/_internal/pub_generated/test/global/deactivate/path_package_test.dart
new file mode 100644
index 0000000..5bc00d1
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/deactivate/path_package_test.dart
@@ -0,0 +1,19 @@
+import 'package:path/path.dart' as p;
+import '../../../lib/src/io.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('deactivates an active path package', () {
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("bin", [d.file("foo.dart", "main() => print('ok');")])]).create();
+    schedulePub(args: ["global", "activate", "--source", "path", "../foo"]);
+    var path = canonicalize(p.join(sandboxDir, "foo"));
+    schedulePub(
+        args: ["global", "deactivate", "foo"],
+        output: 'Deactivated package foo 1.0.0 at path "$path".');
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/deactivate/removes_precompiled_snapshots_test.dart b/sdk/lib/_internal/pub_generated/test/global/deactivate/removes_precompiled_snapshots_test.dart
new file mode 100644
index 0000000..3768386
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/deactivate/removes_precompiled_snapshots_test.dart
@@ -0,0 +1,13 @@
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('removes precompiled snapshots', () {
+    servePackages((builder) => builder.serve("foo", "1.0.0"));
+    schedulePub(args: ["global", "activate", "foo"]);
+    schedulePub(
+        args: ["global", "deactivate", "foo"],
+        output: "Deactivated package foo 1.0.0.");
+    d.dir(cachePath, [d.dir('global_packages', [d.nothing('foo')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/deactivate/unexpected_arguments_test.dart b/sdk/lib/_internal/pub_generated/test/global/deactivate/unexpected_arguments_test.dart
new file mode 100644
index 0000000..f82d09c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/deactivate/unexpected_arguments_test.dart
@@ -0,0 +1,15 @@
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('fails if there are extra arguments', () {
+    schedulePub(args: ["global", "deactivate", "foo", "bar", "baz"], error: """
+            Unexpected arguments "bar" and "baz".
+
+            Usage: pub global deactivate <package>
+            -h, --help    Print usage information for this command.
+
+            Run "pub help" to see global options.
+            """, exitCode: exit_codes.USAGE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/deactivate/unknown_package_test.dart b/sdk/lib/_internal/pub_generated/test/global/deactivate/unknown_package_test.dart
new file mode 100644
index 0000000..33b4386
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/deactivate/unknown_package_test.dart
@@ -0,0 +1,12 @@
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('errors if the package is not activated', () {
+    serveNoPackages();
+    schedulePub(
+        args: ["global", "deactivate", "foo"],
+        error: "No active package foo.",
+        exitCode: exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/list_test.dart b/sdk/lib/_internal/pub_generated/test/global/list_test.dart
new file mode 100644
index 0000000..43ab80c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/list_test.dart
@@ -0,0 +1,54 @@
+import 'package:path/path.dart' as p;
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  solo_integration('lists an activated hosted package', () {
+    servePackages((builder) {
+      builder.serve('foo', '1.0.0');
+    });
+    schedulePub(args: ['global', 'activate', 'foo']);
+    schedulePub(args: ['global', 'list'], output: 'foo 1.0.0');
+  });
+  integration('lists an activated Git package', () {
+    ensureGit();
+    d.git(
+        'foo.git',
+        [
+            d.libPubspec('foo', '1.0.0'),
+            d.dir('bin', [d.file('foo.dart', 'main() => print("ok");')])]).create();
+    schedulePub(args: ['global', 'activate', '-sgit', '../foo.git']);
+    schedulePub(
+        args: ['global', 'list'],
+        output: 'foo 1.0.0 from Git repository "../foo.git"');
+  });
+  integration('lists an activated Path package', () {
+    d.dir(
+        'foo',
+        [
+            d.libPubspec('foo', '1.0.0'),
+            d.dir('bin', [d.file('foo.dart', 'main() => print("ok");')])]).create();
+    schedulePub(args: ['global', 'activate', '-spath', '../foo']);
+    var path = canonicalize(p.join(sandboxDir, 'foo'));
+    schedulePub(args: ['global', 'list'], output: 'foo 1.0.0 at path "$path"');
+  });
+  integration('lists activated packages in alphabetical order', () {
+    servePackages((builder) {
+      builder.serve('aaa', '1.0.0');
+      builder.serve('bbb', '1.0.0');
+      builder.serve('ccc', '1.0.0');
+    });
+    schedulePub(args: ['global', 'activate', 'ccc']);
+    schedulePub(args: ['global', 'activate', 'aaa']);
+    schedulePub(args: ['global', 'activate', 'bbb']);
+    schedulePub(args: ['global', 'list'], output: '''
+aaa 1.0.0
+bbb 1.0.0
+ccc 1.0.0
+''');
+  });
+  integration('lists nothing when no packages activated', () {
+    schedulePub(args: ['global', 'list'], output: '\n');
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/run/errors_if_outside_bin_test.dart b/sdk/lib/_internal/pub_generated/test/global/run/errors_if_outside_bin_test.dart
new file mode 100644
index 0000000..1916935
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/run/errors_if_outside_bin_test.dart
@@ -0,0 +1,25 @@
+import 'package:path/path.dart' as p;
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('errors if the script is in a subdirectory.', () {
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "1.0.0",
+          contents: [
+              d.dir("example", [d.file("script.dart", "main(args) => print('ok');")])]);
+    });
+    schedulePub(args: ["global", "activate", "foo"]);
+    schedulePub(args: ["global", "run", "foo:example/script"], error: """
+Cannot run an executable in a subdirectory of a global package.
+
+Usage: pub global run <package>:<executable> [args...]
+-h, --help    Print usage information for this command.
+
+Run "pub help" to see global options.
+""", exitCode: exit_codes.USAGE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/run/implicit_executable_name_test.dart b/sdk/lib/_internal/pub_generated/test/global/run/implicit_executable_name_test.dart
new file mode 100644
index 0000000..e085b3c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/run/implicit_executable_name_test.dart
@@ -0,0 +1,18 @@
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('defaults to the package name if the script is omitted', () {
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "1.0.0",
+          contents: [d.dir("bin", [d.file("foo.dart", "main(args) => print('foo');")])]);
+    });
+    schedulePub(args: ["global", "activate", "foo"]);
+    var pub = pubRun(global: true, args: ["foo"]);
+    pub.stdout.expect("foo");
+    pub.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/run/missing_executable_arg_test.dart b/sdk/lib/_internal/pub_generated/test/global/run/missing_executable_arg_test.dart
new file mode 100644
index 0000000..d0d42de
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/run/missing_executable_arg_test.dart
@@ -0,0 +1,15 @@
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('fails if no executable was given', () {
+    schedulePub(args: ["global", "run"], error: """
+            Must specify an executable to run.
+
+            Usage: pub global run <package>:<executable> [args...]
+            -h, --help    Print usage information for this command.
+
+            Run "pub help" to see global options.
+            """, exitCode: exit_codes.USAGE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/run/missing_path_package_test.dart b/sdk/lib/_internal/pub_generated/test/global/run/missing_path_package_test.dart
new file mode 100644
index 0000000..6ad6463
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/run/missing_path_package_test.dart
@@ -0,0 +1,21 @@
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../../lib/src/io.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('errors if the local package does not exist', () {
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("bin", [d.file("foo.dart", "main() => print('ok');")])]).create();
+    schedulePub(args: ["global", "activate", "--source", "path", "../foo"]);
+    schedule(() => deleteEntry(p.join(sandboxDir, "foo")));
+    var pub = pubRun(global: true, args: ["foo"]);
+    var path = canonicalize(p.join(sandboxDir, "foo"));
+    pub.stderr.expect('Could not find a file named "pubspec.yaml" in "$path".');
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/run/nonexistent_script_test.dart b/sdk/lib/_internal/pub_generated/test/global/run/nonexistent_script_test.dart
new file mode 100644
index 0000000..85f15a8
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/run/nonexistent_script_test.dart
@@ -0,0 +1,13 @@
+import 'package:path/path.dart' as p;
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('errors if the script does not exist.', () {
+    servePackages((builder) => builder.serve("foo", "1.0.0"));
+    schedulePub(args: ["global", "activate", "foo"]);
+    var pub = pubRun(global: true, args: ["foo:script"]);
+    pub.stderr.expect("Could not find ${p.join("bin", "script.dart")}.");
+    pub.shouldExit(exit_codes.NO_INPUT);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/run/recompiles_if_sdk_is_out_of_date_test.dart b/sdk/lib/_internal/pub_generated/test/global/run/recompiles_if_sdk_is_out_of_date_test.dart
new file mode 100644
index 0000000..0c53444
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/run/recompiles_if_sdk_is_out_of_date_test.dart
@@ -0,0 +1,42 @@
+import 'package:scheduled_test/scheduled_stream.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('recompiles a script if the SDK version is out-of-date', () {
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "1.0.0",
+          contents: [
+              d.dir("bin", [d.file("script.dart", "main(args) => print('ok');")])]);
+    });
+    schedulePub(args: ["global", "activate", "foo"]);
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'global_packages',
+                [
+                    d.dir(
+                        'foo',
+                        [d.dir('bin', [d.outOfDateSnapshot('script.dart.snapshot')])])])]).create();
+    var pub = pubRun(global: true, args: ["foo:script"]);
+    pub.stdout.expect("Precompiling executables...");
+    pub.stdout.expect(consumeThrough("ok"));
+    pub.shouldExit();
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'global_packages',
+                [
+                    d.dir(
+                        'foo',
+                        [
+                            d.dir(
+                                'bin',
+                                [d.matcherFile('script.dart.snapshot', contains('ok'))])])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/run/reflects_changes_to_local_package_test.dart b/sdk/lib/_internal/pub_generated/test/global/run/reflects_changes_to_local_package_test.dart
new file mode 100644
index 0000000..d5717af
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/run/reflects_changes_to_local_package_test.dart
@@ -0,0 +1,17 @@
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('changes in a path package are immediately reflected', () {
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("bin", [d.file("foo.dart", "main() => print('ok');")])]).create();
+    schedulePub(args: ["global", "activate", "--source", "path", "../foo"]);
+    d.file("foo/bin/foo.dart", "main() => print('changed');").create();
+    var pub = pubRun(global: true, args: ["foo"]);
+    pub.stdout.expect("changed");
+    pub.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/run/runs_git_script_test.dart b/sdk/lib/_internal/pub_generated/test/global/run/runs_git_script_test.dart
new file mode 100644
index 0000000..aaf0478
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/run/runs_git_script_test.dart
@@ -0,0 +1,17 @@
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('runs a script in a git package', () {
+    ensureGit();
+    d.git(
+        'foo.git',
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("bin", [d.file("foo.dart", "main() => print('ok');")])]).create();
+    schedulePub(args: ["global", "activate", "-sgit", "../foo.git"]);
+    var pub = pubRun(global: true, args: ["foo"]);
+    pub.stdout.expect("ok");
+    pub.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/run/runs_path_script_test.dart b/sdk/lib/_internal/pub_generated/test/global/run/runs_path_script_test.dart
new file mode 100644
index 0000000..1b77c84
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/run/runs_path_script_test.dart
@@ -0,0 +1,16 @@
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('runs a script in a path package', () {
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("bin", [d.file("foo.dart", "main() => print('ok');")])]).create();
+    schedulePub(args: ["global", "activate", "--source", "path", "../foo"]);
+    var pub = pubRun(global: true, args: ["foo"]);
+    pub.stdout.expect("ok");
+    pub.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/run/runs_script_test.dart b/sdk/lib/_internal/pub_generated/test/global/run/runs_script_test.dart
new file mode 100644
index 0000000..a60b128
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/run/runs_script_test.dart
@@ -0,0 +1,18 @@
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('runs a script in an activated package', () {
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "1.0.0",
+          contents: [
+              d.dir("bin", [d.file("script.dart", "main(args) => print('ok');")])]);
+    });
+    schedulePub(args: ["global", "activate", "foo"]);
+    var pub = pubRun(global: true, args: ["foo:script"]);
+    pub.stdout.expect("ok");
+    pub.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/run/runs_transformer_test.dart b/sdk/lib/_internal/pub_generated/test/global/run/runs_transformer_test.dart
new file mode 100644
index 0000000..9217e77
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/run/runs_transformer_test.dart
@@ -0,0 +1,41 @@
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class DartTransformer extends Transformer {
+  DartTransformer.asPlugin();
+
+  String get allowedExtensions => '.in';
+
+  void apply(Transform transform) {
+    transform.addOutput(new Asset.fromString(
+        new AssetId("foo", "bin/script.dart"),
+        "void main() => print('generated');"));
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration('runs a global script generated by a transformer', () {
+      makeGlobalPackage("foo", "1.0.0", [d.pubspec({
+          "name": "foo",
+          "version": "1.0.0",
+          "transformers": ["foo/src/transformer"]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.dir(
+                        "src",
+                        [d.file("transformer.dart", TRANSFORMER), d.file("primary.in", "")])])],
+            pkg: ['barback']);
+      var pub = pubRun(global: true, args: ["foo:script"]);
+      pub.stdout.expect("generated");
+      pub.shouldExit();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/run/unknown_package_test.dart b/sdk/lib/_internal/pub_generated/test/global/run/unknown_package_test.dart
new file mode 100644
index 0000000..0382ebc
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/run/unknown_package_test.dart
@@ -0,0 +1,13 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('errors if the package is not activated', () {
+    serveNoPackages();
+    schedulePub(
+        args: ["global", "run", "foo:bar"],
+        error: startsWith("No active package foo."),
+        exitCode: exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/global/run/uses_old_lockfile_test.dart b/sdk/lib/_internal/pub_generated/test/global/run/uses_old_lockfile_test.dart
new file mode 100644
index 0000000..932af6c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/global/run/uses_old_lockfile_test.dart
@@ -0,0 +1,40 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration('uses the 1.6-style lockfile if necessary', () {
+    servePackages((builder) {
+      builder.serve("bar", "1.0.0");
+      builder.serve("foo", "1.0.0", deps: {
+        "bar": "any"
+      }, contents: [d.dir("bin", [d.file("script.dart", """
+              import 'package:bar/bar.dart' as bar;
+
+              main(args) => print(bar.main());""")])]);
+    });
+    schedulePub(args: ["cache", "add", "foo"]);
+    schedulePub(args: ["cache", "add", "bar"]);
+    d.dir(cachePath, [d.dir('global_packages', [d.file('foo.lock', '''
+packages:
+  foo:
+    description: foo
+    source: hosted
+    version: "1.0.0"
+  bar:
+    description: bar
+    source: hosted
+    version: "1.0.0"''')])]).create();
+    var pub = pubRun(global: true, args: ["foo:script"]);
+    pub.stdout.expect("bar 1.0.0");
+    pub.shouldExit();
+    d.dir(
+        cachePath,
+        [
+            d.dir(
+                'global_packages',
+                [
+                    d.nothing('foo.lock'),
+                    d.dir('foo', [d.matcherFile('pubspec.lock', contains('1.0.0'))])])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/hosted/fail_gracefully_on_missing_package_test.dart b/sdk/lib/_internal/pub_generated/test/hosted/fail_gracefully_on_missing_package_test.dart
new file mode 100644
index 0000000..bb0ae39
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/hosted/fail_gracefully_on_missing_package_test.dart
@@ -0,0 +1,20 @@
+library pub_tests;
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../test_pub.dart';
+main() {
+  initConfig();
+  forBothPubGetAndUpgrade((command) {
+    integration('fails gracefully if the package does not exist', () {
+      serveNoPackages();
+      d.appDir({
+        "foo": "1.2.3"
+      }).create();
+      pubCommand(command, error: new RegExp(r"""
+Could not find package foo at http://localhost:\d+\.
+Depended on by:
+- myapp""", multiLine: true), exitCode: exit_codes.UNAVAILABLE);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/hosted/fail_gracefully_on_url_resolve_test.dart b/sdk/lib/_internal/pub_generated/test/hosted/fail_gracefully_on_url_resolve_test.dart
new file mode 100644
index 0000000..cfea264
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/hosted/fail_gracefully_on_url_resolve_test.dart
@@ -0,0 +1,23 @@
+library pub_tests;
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  forBothPubGetAndUpgrade((command) {
+    integration('fails gracefully if the url does not resolve', () {
+      d.dir(appPath, [d.appPubspec({
+          "foo": {
+            "hosted": {
+              "name": "foo",
+              "url": "http://pub.invalid"
+            }
+          }
+        })]).create();
+      pubCommand(
+          command,
+          error: 'Could not resolve URL "http://pub.invalid".',
+          exitCode: exit_codes.UNAVAILABLE);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/hosted/offline_test.dart b/sdk/lib/_internal/pub_generated/test/hosted/offline_test.dart
new file mode 100644
index 0000000..f62c11e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/hosted/offline_test.dart
@@ -0,0 +1,54 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  forBothPubGetAndUpgrade((command) {
+    integration('upgrades a package using the cache', () {
+      serveNoPackages();
+      d.cacheDir({
+        "foo": ["1.2.2", "1.2.3"],
+        "bar": ["1.2.3"]
+      }, includePubspecs: true).create();
+      d.appDir({
+        "foo": "any",
+        "bar": "any"
+      }).create();
+      var warning = null;
+      if (command == RunCommand.upgrade) {
+        warning =
+            "Warning: Upgrading when offline may not update you "
+                "to the latest versions of your dependencies.";
+      }
+      pubCommand(command, args: ['--offline'], warning: warning);
+      d.packagesDir({
+        "foo": "1.2.3",
+        "bar": "1.2.3"
+      }).validate();
+    });
+    integration('fails gracefully if a dependency is not cached', () {
+      serveNoPackages();
+      d.appDir({
+        "foo": "any"
+      }).create();
+      pubCommand(
+          command,
+          args: ['--offline'],
+          error: "Could not find package foo in cache.");
+    });
+    integration('fails gracefully no cached versions match', () {
+      serveNoPackages();
+      d.cacheDir({
+        "foo": ["1.2.2", "1.2.3"]
+      }, includePubspecs: true).create();
+      d.appDir({
+        "foo": ">2.0.0"
+      }).create();
+      pubCommand(
+          command,
+          args: ['--offline'],
+          error: "Package foo has no versions that match >2.0.0 derived from:\n"
+              "- myapp 0.0.0 depends on version >2.0.0");
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/hosted/remove_removed_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/hosted/remove_removed_dependency_test.dart
new file mode 100644
index 0000000..84b97c3
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/hosted/remove_removed_dependency_test.dart
@@ -0,0 +1,31 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  forBothPubGetAndUpgrade((command) {
+    integration("removes a dependency that's removed from the pubspec", () {
+      servePackages((builder) {
+        builder.serve("foo", "1.0.0");
+        builder.serve("bar", "1.0.0");
+      });
+      d.appDir({
+        "foo": "any",
+        "bar": "any"
+      }).create();
+      pubCommand(command);
+      d.packagesDir({
+        "foo": "1.0.0",
+        "bar": "1.0.0"
+      }).validate();
+      d.appDir({
+        "foo": "any"
+      }).create();
+      pubCommand(command);
+      d.packagesDir({
+        "foo": "1.0.0",
+        "bar": null
+      }).validate();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/hosted/remove_removed_transitive_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/hosted/remove_removed_transitive_dependency_test.dart
new file mode 100644
index 0000000..b8091ea
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/hosted/remove_removed_transitive_dependency_test.dart
@@ -0,0 +1,44 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  forBothPubGetAndUpgrade((command) {
+    integration(
+        "removes a transitive dependency that's no longer depended " "on",
+        () {
+      servePackages((builder) {
+        builder.serve("foo", "1.0.0", deps: {
+          "shared-dep": "any"
+        });
+        builder.serve("bar", "1.0.0", deps: {
+          "shared-dep": "any",
+          "bar-dep": "any"
+        });
+        builder.serve("shared-dep", "1.0.0");
+        builder.serve("bar-dep", "1.0.0");
+      });
+      d.appDir({
+        "foo": "any",
+        "bar": "any"
+      }).create();
+      pubCommand(command);
+      d.packagesDir({
+        "foo": "1.0.0",
+        "bar": "1.0.0",
+        "shared-dep": "1.0.0",
+        "bar-dep": "1.0.0"
+      }).validate();
+      d.appDir({
+        "foo": "any"
+      }).create();
+      pubCommand(command);
+      d.packagesDir({
+        "foo": "1.0.0",
+        "bar": null,
+        "shared-dep": "1.0.0",
+        "bar-dep": null
+      }).validate();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/hosted/version_negotiation_test.dart b/sdk/lib/_internal/pub_generated/test/hosted/version_negotiation_test.dart
new file mode 100644
index 0000000..d5b18f6
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/hosted/version_negotiation_test.dart
@@ -0,0 +1,51 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  forBothPubGetAndUpgrade((command) {
+    integration('sends the correct Accept header', () {
+      var server = new ScheduledServer();
+      d.appDir({
+        "foo": {
+          "hosted": {
+            "name": "foo",
+            "url": server.url.then((url) => url.toString())
+          }
+        }
+      }).create();
+      var pub = startPub(args: [command.name]);
+      server.handle('GET', '/api/packages/foo', (request) {
+        expect(
+            request.headers['accept'],
+            equals('application/vnd.pub.v2+json'));
+        return new shelf.Response(200);
+      });
+      pub.kill();
+    });
+    integration('prints a friendly error if the version is out-of-date', () {
+      var server = new ScheduledServer();
+      d.appDir({
+        "foo": {
+          "hosted": {
+            "name": "foo",
+            "url": server.url.then((url) => url.toString())
+          }
+        }
+      }).create();
+      var pub = startPub(args: [command.name]);
+      server.handle(
+          'GET',
+          '/api/packages/foo',
+          (request) => new shelf.Response(406));
+      pub.shouldExit(1);
+      pub.stderr.expect(
+          emitsLines(
+              "Pub 0.1.2+3 is incompatible with the current version of localhost.\n"
+                  "Upgrade pub to the latest version and try again."));
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/implicit_barback_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/implicit_barback_dependency_test.dart
new file mode 100644
index 0000000..dd7a6b6
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/implicit_barback_dependency_test.dart
@@ -0,0 +1,138 @@
+import 'descriptor.dart' as d;
+import 'test_pub.dart';
+import '../lib/src/barback.dart' as barback;
+import '../lib/src/version.dart';
+main() {
+  initConfig();
+  var constraint = barback.pubConstraints["barback"];
+  var current = constraint.min.toString();
+  var previous =
+      new Version(constraint.min.major, constraint.min.minor - 1, 0).toString();
+  var nextPatch = constraint.min.nextPatch.toString();
+  var max = constraint.max.toString();
+  var sourceSpanVersion = barback.pubConstraints["source_span"].min.toString();
+  var stackTraceVersion = barback.pubConstraints["stack_trace"].min.toString();
+  forBothPubGetAndUpgrade((command) {
+    integration("implicitly constrains barback to versions pub supports", () {
+      servePackages((builder) {
+        builder.serve("barback", previous);
+        builder.serve("barback", current);
+        builder.serve("barback", nextPatch);
+        builder.serve("barback", max);
+        builder.serve("source_span", sourceSpanVersion);
+        builder.serve("stack_trace", stackTraceVersion);
+      });
+      d.appDir({
+        "barback": "any"
+      }).create();
+      pubCommand(command);
+      d.packagesDir({
+        "barback": nextPatch
+      }).validate();
+    });
+    integration("discovers transitive dependency on barback", () {
+      servePackages((builder) {
+        builder.serve("barback", previous);
+        builder.serve("barback", current);
+        builder.serve("barback", nextPatch);
+        builder.serve("barback", max);
+        builder.serve("source_span", sourceSpanVersion);
+        builder.serve("stack_trace", stackTraceVersion);
+      });
+      d.dir(
+          "foo",
+          [d.libDir("foo", "foo 0.0.1"), d.libPubspec("foo", "0.0.1", deps: {
+          "barback": "any"
+        })]).create();
+      d.appDir({
+        "foo": {
+          "path": "../foo"
+        }
+      }).create();
+      pubCommand(command);
+      d.packagesDir({
+        "barback": nextPatch,
+        "foo": "0.0.1"
+      }).validate();
+    });
+    integration(
+        "pub's implicit constraint uses the same source and "
+            "description as a dependency override",
+        () {
+      servePackages((builder) {
+        builder.serve("source_span", sourceSpanVersion);
+        builder.serve("stack_trace", stackTraceVersion);
+      });
+      d.dir(
+          'barback',
+          [
+              d.libDir('barback', 'barback $current'),
+              d.libPubspec('barback', current)]).create();
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "dependency_overrides": {
+            "barback": {
+              "path": "../barback"
+            }
+          }
+        })]).create();
+      pubCommand(command);
+      d.packagesDir({
+        "barback": current
+      }).validate();
+    });
+  });
+  integration("unlock if the locked version doesn't meet pub's constraint", () {
+    servePackages((builder) {
+      builder.serve("barback", previous);
+      builder.serve("barback", current);
+      builder.serve("source_span", sourceSpanVersion);
+      builder.serve("stack_trace", stackTraceVersion);
+    });
+    d.appDir({
+      "barback": "any"
+    }).create();
+    createLockFile("myapp", hosted: {
+      "barback": previous
+    });
+    pubGet();
+    d.packagesDir({
+      "barback": current
+    }).validate();
+  });
+  integration(
+      "includes pub in the error if a solve failed because there "
+          "is no version available",
+      () {
+    servePackages((builder) {
+      builder.serve("barback", previous);
+      builder.serve("source_span", sourceSpanVersion);
+      builder.serve("stack_trace", stackTraceVersion);
+    });
+    d.appDir({
+      "barback": "any"
+    }).create();
+    pubGet(error: """
+Package barback 0.12.0 does not match >=$current <$max derived from:
+- myapp 0.0.0 depends on version any
+- pub itself depends on version >=$current <$max""");
+  });
+  integration(
+      "includes pub in the error if a solve failed because there "
+          "is a disjoint constraint",
+      () {
+    servePackages((builder) {
+      builder.serve("barback", previous);
+      builder.serve("barback", current);
+      builder.serve("source_span", sourceSpanVersion);
+      builder.serve("stack_trace", stackTraceVersion);
+    });
+    d.appDir({
+      "barback": previous
+    }).create();
+    pubGet(error: """
+Incompatible version constraints on barback:
+- myapp 0.0.0 depends on version $previous
+- pub itself depends on version >=$current <$max""");
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/implicit_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/implicit_dependency_test.dart
new file mode 100644
index 0000000..edc2bab
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/implicit_dependency_test.dart
@@ -0,0 +1,108 @@
+import 'descriptor.dart' as d;
+import 'test_pub.dart';
+import '../lib/src/barback.dart' as barback;
+import '../lib/src/version.dart';
+main() {
+  initConfig();
+  forBothPubGetAndUpgrade((command) {
+    integration("implicitly constrains it to versions pub supports", () {
+      servePackages((builder) {
+        builder.serve("barback", current("barback"));
+        builder.serve("stack_trace", previous("stack_trace"));
+        builder.serve("stack_trace", current("stack_trace"));
+        builder.serve("stack_trace", nextPatch("stack_trace"));
+        builder.serve("stack_trace", max("stack_trace"));
+        builder.serve("source_span", current("source_span"));
+      });
+      d.appDir({
+        "barback": "any"
+      }).create();
+      pubCommand(command);
+      d.packagesDir({
+        "stack_trace": nextPatch("stack_trace")
+      }).validate();
+    });
+    integration(
+        "pub's implicit constraint uses the same source and "
+            "description as a dependency override",
+        () {
+      servePackages((builder) {
+        builder.serve("barback", current("barback"));
+        builder.serve("stack_trace", nextPatch("stack_trace"));
+        builder.serve("source_span", current("source_span"));
+      });
+      d.dir(
+          "stack_trace",
+          [
+              d.libDir("stack_trace", 'stack_trace ${current("stack_trace")}'),
+              d.libPubspec("stack_trace", current("stack_trace"))]).create();
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "dependencies": {
+            "barback": "any"
+          },
+          "dependency_overrides": {
+            "stack_trace": {
+              "path": "../stack_trace"
+            }
+          }
+        })]).create();
+      pubCommand(command);
+      d.packagesDir({
+        "stack_trace": current("stack_trace")
+      }).validate();
+    });
+    integration(
+        "doesn't add a constraint if barback isn't in the package " "graph",
+        () {
+      servePackages((builder) {
+        builder.serve("stack_trace", previous("stack_trace"));
+        builder.serve("stack_trace", current("stack_trace"));
+        builder.serve("stack_trace", nextPatch("stack_trace"));
+        builder.serve("stack_trace", max("stack_trace"));
+        builder.serve("source_span", current("source_span"));
+      });
+      d.appDir({
+        "stack_trace": "any"
+      }).create();
+      pubCommand(command);
+      d.packagesDir({
+        "stack_trace": max("stack_trace")
+      }).validate();
+    });
+  });
+  integration(
+      "unlocks if the locked version doesn't meet pub's " "constraint",
+      () {
+    servePackages((builder) {
+      builder.serve("barback", current("barback"));
+      builder.serve("stack_trace", previous("stack_trace"));
+      builder.serve("stack_trace", current("stack_trace"));
+      builder.serve("source_span", current("source_span"));
+    });
+    d.appDir({
+      "barback": "any"
+    }).create();
+    createLockFile("myapp", hosted: {
+      "barback": current("barback"),
+      "stack_trace": previous("stack_trace")
+    });
+    pubGet();
+    d.packagesDir({
+      "stack_trace": current("stack_trace")
+    }).validate();
+  });
+}
+String current(String packageName) =>
+    barback.pubConstraints[packageName].min.toString();
+String previous(String packageName) {
+  var constraint = barback.pubConstraints[packageName];
+  return new Version(
+      constraint.min.major,
+      constraint.min.minor - 1,
+      0).toString();
+}
+String nextPatch(String packageName) =>
+    barback.pubConstraints[packageName].min.nextPatch.toString();
+String max(String packageName) =>
+    barback.pubConstraints[packageName].max.toString();
diff --git a/sdk/lib/_internal/pub_generated/test/io_test.dart b/sdk/lib/_internal/pub_generated/test/io_test.dart
new file mode 100644
index 0000000..e7eb51b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/io_test.dart
@@ -0,0 +1,329 @@
+library io_test;
+import 'dart:async';
+import 'dart:io';
+import 'package:path/path.dart' as path;
+import 'package:unittest/unittest.dart';
+import '../lib/src/io.dart';
+import 'test_pub.dart';
+main() {
+  initConfig();
+  group('listDir', () {
+    test('ignores hidden files by default', () {
+      expect(withTempDir((temp) {
+        writeTextFile(path.join(temp, 'file1.txt'), '');
+        writeTextFile(path.join(temp, 'file2.txt'), '');
+        writeTextFile(path.join(temp, '.file3.txt'), '');
+        createDir(path.join(temp, '.subdir'));
+        writeTextFile(path.join(temp, '.subdir', 'file3.txt'), '');
+        expect(
+            listDir(temp, recursive: true),
+            unorderedEquals([path.join(temp, 'file1.txt'), path.join(temp, 'file2.txt')]));
+      }), completes);
+    });
+    test('includes hidden files when told to', () {
+      expect(withTempDir((temp) {
+        writeTextFile(path.join(temp, 'file1.txt'), '');
+        writeTextFile(path.join(temp, 'file2.txt'), '');
+        writeTextFile(path.join(temp, '.file3.txt'), '');
+        createDir(path.join(temp, '.subdir'));
+        writeTextFile(path.join(temp, '.subdir', 'file3.txt'), '');
+        expect(
+            listDir(temp, recursive: true, includeHidden: true),
+            unorderedEquals(
+                [
+                    path.join(temp, 'file1.txt'),
+                    path.join(temp, 'file2.txt'),
+                    path.join(temp, '.file3.txt'),
+                    path.join(temp, '.subdir'),
+                    path.join(temp, '.subdir', 'file3.txt')]));
+      }), completes);
+    });
+    test("doesn't ignore hidden files above the directory being listed", () {
+      expect(withTempDir((temp) {
+        var dir = path.join(temp, '.foo', 'bar');
+        ensureDir(dir);
+        writeTextFile(path.join(dir, 'file1.txt'), '');
+        writeTextFile(path.join(dir, 'file2.txt'), '');
+        writeTextFile(path.join(dir, 'file3.txt'), '');
+        expect(
+            listDir(dir, recursive: true),
+            unorderedEquals(
+                [
+                    path.join(dir, 'file1.txt'),
+                    path.join(dir, 'file2.txt'),
+                    path.join(dir, 'file3.txt')]));
+      }), completes);
+    });
+  });
+  group('canonicalize', () {
+    test('resolves a non-link', () {
+      expect(withCanonicalTempDir((temp) {
+        var filePath = path.join(temp, 'file');
+        writeTextFile(filePath, '');
+        expect(canonicalize(filePath), equals(filePath));
+      }), completes);
+    });
+    test('resolves a non-existent file', () {
+      expect(withCanonicalTempDir((temp) {
+        expect(
+            canonicalize(path.join(temp, 'nothing')),
+            equals(path.join(temp, 'nothing')));
+      }), completes);
+    });
+    test('resolves a symlink', () {
+      expect(withCanonicalTempDir((temp) {
+        createDir(path.join(temp, 'linked-dir'));
+        createSymlink(path.join(temp, 'linked-dir'), path.join(temp, 'dir'));
+        expect(
+            canonicalize(path.join(temp, 'dir')),
+            equals(path.join(temp, 'linked-dir')));
+      }), completes);
+    });
+    test('resolves a relative symlink', () {
+      expect(withCanonicalTempDir((temp) {
+        createDir(path.join(temp, 'linked-dir'));
+        createSymlink(
+            path.join(temp, 'linked-dir'),
+            path.join(temp, 'dir'),
+            relative: true);
+        expect(
+            canonicalize(path.join(temp, 'dir')),
+            equals(path.join(temp, 'linked-dir')));
+      }), completes);
+    });
+    test('resolves a single-level horizontally recursive symlink', () {
+      expect(withCanonicalTempDir((temp) {
+        var linkPath = path.join(temp, 'foo');
+        createSymlink(linkPath, linkPath);
+        expect(canonicalize(linkPath), equals(linkPath));
+      }), completes);
+    });
+    test('resolves a multi-level horizontally recursive symlink', () {
+      expect(withCanonicalTempDir((temp) {
+        var fooPath = path.join(temp, 'foo');
+        var barPath = path.join(temp, 'bar');
+        var bazPath = path.join(temp, 'baz');
+        createSymlink(barPath, fooPath);
+        createSymlink(bazPath, barPath);
+        createSymlink(fooPath, bazPath);
+        expect(canonicalize(fooPath), equals(fooPath));
+        expect(canonicalize(barPath), equals(barPath));
+        expect(canonicalize(bazPath), equals(bazPath));
+        createSymlink(fooPath, path.join(temp, 'outer'));
+        expect(canonicalize(path.join(temp, 'outer')), equals(fooPath));
+      }), completes);
+    });
+    test('resolves a broken symlink', () {
+      expect(withCanonicalTempDir((temp) {
+        createSymlink(path.join(temp, 'nonexistent'), path.join(temp, 'foo'));
+        expect(
+            canonicalize(path.join(temp, 'foo')),
+            equals(path.join(temp, 'nonexistent')));
+      }), completes);
+    });
+    test('resolves multiple nested symlinks', () {
+      expect(withCanonicalTempDir((temp) {
+        var dir1 = path.join(temp, 'dir1');
+        var dir2 = path.join(temp, 'dir2');
+        var subdir1 = path.join(dir1, 'subdir1');
+        var subdir2 = path.join(dir2, 'subdir2');
+        createDir(dir2);
+        createDir(subdir2);
+        createSymlink(dir2, dir1);
+        createSymlink(subdir2, subdir1);
+        expect(
+            canonicalize(path.join(subdir1, 'file')),
+            equals(path.join(subdir2, 'file')));
+      }), completes);
+    });
+    test('resolves a nested vertical symlink', () {
+      expect(withCanonicalTempDir((temp) {
+        var dir1 = path.join(temp, 'dir1');
+        var dir2 = path.join(temp, 'dir2');
+        var subdir = path.join(dir1, 'subdir');
+        createDir(dir1);
+        createDir(dir2);
+        createSymlink(dir2, subdir);
+        expect(
+            canonicalize(path.join(subdir, 'file')),
+            equals(path.join(dir2, 'file')));
+      }), completes);
+    });
+    test('resolves a vertically recursive symlink', () {
+      expect(withCanonicalTempDir((temp) {
+        var dir = path.join(temp, 'dir');
+        var subdir = path.join(dir, 'subdir');
+        createDir(dir);
+        createSymlink(dir, subdir);
+        expect(
+            canonicalize(
+                path.join(temp, 'dir', 'subdir', 'subdir', 'subdir', 'subdir', 'file')),
+            equals(path.join(dir, 'file')));
+      }), completes);
+    });
+    test(
+        'resolves a symlink that links to a path that needs more resolving',
+        () {
+      expect(withCanonicalTempDir((temp) {
+        var dir = path.join(temp, 'dir');
+        var linkdir = path.join(temp, 'linkdir');
+        var linkfile = path.join(dir, 'link');
+        createDir(dir);
+        createSymlink(dir, linkdir);
+        createSymlink(path.join(linkdir, 'file'), linkfile);
+        expect(canonicalize(linkfile), equals(path.join(dir, 'file')));
+      }), completes);
+    });
+    test('resolves a pair of pathologically-recursive symlinks', () {
+      expect(withCanonicalTempDir((temp) {
+        var foo = path.join(temp, 'foo');
+        var subfoo = path.join(foo, 'subfoo');
+        var bar = path.join(temp, 'bar');
+        var subbar = path.join(bar, 'subbar');
+        createSymlink(subbar, foo);
+        createSymlink(subfoo, bar);
+        expect(
+            canonicalize(subfoo),
+            equals(path.join(subfoo, 'subbar', 'subfoo')));
+      }), completes);
+    });
+  });
+  testExistencePredicate(
+      "entryExists",
+      entryExists,
+      forFile: true,
+      forFileSymlink: true,
+      forMultiLevelFileSymlink: true,
+      forDirectory: true,
+      forDirectorySymlink: true,
+      forMultiLevelDirectorySymlink: true,
+      forBrokenSymlink: true,
+      forMultiLevelBrokenSymlink: true);
+  testExistencePredicate(
+      "linkExists",
+      linkExists,
+      forFile: false,
+      forFileSymlink: true,
+      forMultiLevelFileSymlink: true,
+      forDirectory: false,
+      forDirectorySymlink: true,
+      forMultiLevelDirectorySymlink: true,
+      forBrokenSymlink: true,
+      forMultiLevelBrokenSymlink: true);
+  testExistencePredicate(
+      "fileExists",
+      fileExists,
+      forFile: true,
+      forFileSymlink: true,
+      forMultiLevelFileSymlink: true,
+      forDirectory: false,
+      forDirectorySymlink: false,
+      forMultiLevelDirectorySymlink: false,
+      forBrokenSymlink: false,
+      forMultiLevelBrokenSymlink: false);
+  testExistencePredicate(
+      "dirExists",
+      dirExists,
+      forFile: false,
+      forFileSymlink: false,
+      forMultiLevelFileSymlink: false,
+      forDirectory: true,
+      forDirectorySymlink: true,
+      forMultiLevelDirectorySymlink: true,
+      forBrokenSymlink: false,
+      forMultiLevelBrokenSymlink: false);
+}
+void testExistencePredicate(String name, bool predicate(String path),
+    {bool forFile, bool forFileSymlink, bool forMultiLevelFileSymlink,
+    bool forDirectory, bool forDirectorySymlink, bool forMultiLevelDirectorySymlink,
+    bool forBrokenSymlink, bool forMultiLevelBrokenSymlink}) {
+  group(name, () {
+    test('returns $forFile for a file', () {
+      expect(withTempDir((temp) {
+        var file = path.join(temp, "test.txt");
+        writeTextFile(file, "contents");
+        expect(predicate(file), equals(forFile));
+      }), completes);
+    });
+    test('returns $forDirectory for a directory', () {
+      expect(withTempDir((temp) {
+        var file = path.join(temp, "dir");
+        createDir(file);
+        expect(predicate(file), equals(forDirectory));
+      }), completes);
+    });
+    test('returns $forDirectorySymlink for a symlink to a directory', () {
+      expect(withTempDir((temp) {
+        var targetPath = path.join(temp, "dir");
+        var symlinkPath = path.join(temp, "linkdir");
+        createDir(targetPath);
+        createSymlink(targetPath, symlinkPath);
+        expect(predicate(symlinkPath), equals(forDirectorySymlink));
+      }), completes);
+    });
+    test(
+        'returns $forMultiLevelDirectorySymlink for a multi-level symlink to '
+            'a directory',
+        () {
+      expect(withTempDir((temp) {
+        var targetPath = path.join(temp, "dir");
+        var symlink1Path = path.join(temp, "link1dir");
+        var symlink2Path = path.join(temp, "link2dir");
+        createDir(targetPath);
+        createSymlink(targetPath, symlink1Path);
+        createSymlink(symlink1Path, symlink2Path);
+        expect(predicate(symlink2Path), equals(forMultiLevelDirectorySymlink));
+      }), completes);
+    });
+    test('returns $forBrokenSymlink for a broken symlink', () {
+      expect(withTempDir((temp) {
+        var targetPath = path.join(temp, "dir");
+        var symlinkPath = path.join(temp, "linkdir");
+        createDir(targetPath);
+        createSymlink(targetPath, symlinkPath);
+        deleteEntry(targetPath);
+        expect(predicate(symlinkPath), equals(forBrokenSymlink));
+      }), completes);
+    });
+    test(
+        'returns $forMultiLevelBrokenSymlink for a multi-level broken symlink',
+        () {
+      expect(withTempDir((temp) {
+        var targetPath = path.join(temp, "dir");
+        var symlink1Path = path.join(temp, "link1dir");
+        var symlink2Path = path.join(temp, "link2dir");
+        createDir(targetPath);
+        createSymlink(targetPath, symlink1Path);
+        createSymlink(symlink1Path, symlink2Path);
+        deleteEntry(targetPath);
+        expect(predicate(symlink2Path), equals(forMultiLevelBrokenSymlink));
+      }), completes);
+    });
+    if (Platform.operatingSystem != 'windows') {
+      test('returns $forFileSymlink for a symlink to a file', () {
+        expect(withTempDir((temp) {
+          var targetPath = path.join(temp, "test.txt");
+          var symlinkPath = path.join(temp, "link.txt");
+          writeTextFile(targetPath, "contents");
+          createSymlink(targetPath, symlinkPath);
+          expect(predicate(symlinkPath), equals(forFileSymlink));
+        }), completes);
+      });
+      test(
+          'returns $forMultiLevelFileSymlink for a multi-level symlink to a ' 'file',
+          () {
+        expect(withTempDir((temp) {
+          var targetPath = path.join(temp, "test.txt");
+          var symlink1Path = path.join(temp, "link1.txt");
+          var symlink2Path = path.join(temp, "link2.txt");
+          writeTextFile(targetPath, "contents");
+          createSymlink(targetPath, symlink1Path);
+          createSymlink(symlink1Path, symlink2Path);
+          expect(predicate(symlink2Path), equals(forMultiLevelFileSymlink));
+        }), completes);
+      });
+    }
+  });
+}
+Future withCanonicalTempDir(Future fn(String path)) =>
+    withTempDir((temp) => fn(canonicalize(temp)));
diff --git a/sdk/lib/_internal/pub_generated/test/lish/archives_and_uploads_a_package_test.dart b/sdk/lib/_internal/pub_generated/test/lish/archives_and_uploads_a_package_test.dart
new file mode 100644
index 0000000..8ce2415
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/archives_and_uploads_a_package_test.dart
@@ -0,0 +1,30 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('archives and uploads a package', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    handleUploadForm(server);
+    handleUpload(server);
+    server.handle('GET', '/create', (request) {
+      return new shelf.Response.ok(JSON.encode({
+        'success': {
+          'message': 'Package test_pkg 1.0.0 uploaded!'
+        }
+      }));
+    });
+    pub.stdout.expect(startsWith('Uploading...'));
+    pub.stdout.expect('Package test_pkg 1.0.0 uploaded!');
+    pub.shouldExit(exit_codes.SUCCESS);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/cloud_storage_upload_doesnt_redirect_test.dart b/sdk/lib/_internal/pub_generated/test/lish/cloud_storage_upload_doesnt_redirect_test.dart
new file mode 100644
index 0000000..ecaf2b6
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/cloud_storage_upload_doesnt_redirect_test.dart
@@ -0,0 +1,23 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration("cloud storage upload doesn't redirect", () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    handleUploadForm(server);
+    server.handle('POST', '/upload', (request) {
+      return drainStream(request.read()).then((_) => new shelf.Response(200));
+    });
+    pub.stderr.expect('Failed to upload the package.');
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/cloud_storage_upload_provides_an_error_test.dart b/sdk/lib/_internal/pub_generated/test/lish/cloud_storage_upload_provides_an_error_test.dart
new file mode 100644
index 0000000..fd7f8ff
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/cloud_storage_upload_provides_an_error_test.dart
@@ -0,0 +1,29 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('cloud storage upload provides an error', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    handleUploadForm(server);
+    server.handle('POST', '/upload', (request) {
+      return drainStream(request.read()).then((_) {
+        return new shelf.Response.notFound(
+            '<Error><Message>Your request sucked.</Message></Error>',
+            headers: {
+          'content-type': 'application/xml'
+        });
+      });
+    });
+    pub.stderr.expect('Failed to upload the package.');
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/does_not_publish_if_private_test.dart b/sdk/lib/_internal/pub_generated/test/lish/does_not_publish_if_private_test.dart
new file mode 100644
index 0000000..b59999b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/does_not_publish_if_private_test.dart
@@ -0,0 +1,16 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('does not publish if the package is private', () {
+    var pkg = packageMap("test_pkg", "1.0.0");
+    pkg["publish_to"] = "none";
+    d.dir(appPath, [d.pubspec(pkg)]).create();
+    schedulePub(
+        args: ["lish"],
+        error: startsWith("A private package cannot be published."),
+        exitCode: exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/does_not_publish_if_private_with_server_arg_test.dart b/sdk/lib/_internal/pub_generated/test/lish/does_not_publish_if_private_with_server_arg_test.dart
new file mode 100644
index 0000000..cb442e7
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/does_not_publish_if_private_with_server_arg_test.dart
@@ -0,0 +1,19 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      'does not publish if the package is private even if a server '
+          'argument is provided',
+      () {
+    var pkg = packageMap("test_pkg", "1.0.0");
+    pkg["publish_to"] = "none";
+    d.dir(appPath, [d.pubspec(pkg)]).create();
+    schedulePub(
+        args: ["lish", "--server", "http://example.com"],
+        error: startsWith("A private package cannot be published."),
+        exitCode: exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/force_cannot_be_combined_with_dry_run_test.dart b/sdk/lib/_internal/pub_generated/test/lish/force_cannot_be_combined_with_dry_run_test.dart
new file mode 100644
index 0000000..22c0a68
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/force_cannot_be_combined_with_dry_run_test.dart
@@ -0,0 +1,23 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('--force cannot be combined with --dry-run', () {
+    schedulePub(args: ['lish', '--force', '--dry-run'], error: """
+          Cannot use both --force and --dry-run.
+          
+          Usage: pub publish [options]
+          -h, --help       Print usage information for this command.
+          -n, --dry-run    Validate but do not publish the package.
+          -f, --force      Publish without confirmation if there are no errors.
+              --server     The package server to which to upload this package.
+                           (defaults to "https://pub.dartlang.org")
+
+          Run "pub help" to see global options.
+          See http://dartlang.org/tools/pub/cmd/pub-lish.html for detailed documentation.
+          """, exitCode: exit_codes.USAGE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/force_does_not_publish_if_private_test.dart b/sdk/lib/_internal/pub_generated/test/lish/force_does_not_publish_if_private_test.dart
new file mode 100644
index 0000000..0dd0ff9
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/force_does_not_publish_if_private_test.dart
@@ -0,0 +1,16 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('force does not publish if the package is private', () {
+    var pkg = packageMap("test_pkg", "1.0.0");
+    pkg["publish_to"] = "none";
+    d.dir(appPath, [d.pubspec(pkg)]).create();
+    schedulePub(
+        args: ["lish", "--force"],
+        error: startsWith("A private package cannot be published."),
+        exitCode: exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/force_does_not_publish_if_there_are_errors_test.dart b/sdk/lib/_internal/pub_generated/test/lish/force_does_not_publish_if_there_are_errors_test.dart
new file mode 100644
index 0000000..fbf4174
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/force_does_not_publish_if_there_are_errors_test.dart
@@ -0,0 +1,21 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('--force does not publish if there are errors', () {
+    var pkg = packageMap("test_pkg", "1.0.0");
+    pkg.remove("homepage");
+    d.dir(appPath, [d.pubspec(pkg)]).create();
+    var server = new ScheduledServer();
+    var pub = startPublish(server, args: ['--force']);
+    pub.shouldExit(exit_codes.SUCCESS);
+    pub.stderr.expect(
+        consumeThrough(
+            "Sorry, your package is missing a " "requirement and can't be published yet."));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/force_publishes_if_tests_are_no_warnings_or_errors_test.dart b/sdk/lib/_internal/pub_generated/test/lish/force_publishes_if_tests_are_no_warnings_or_errors_test.dart
new file mode 100644
index 0000000..bd30a5f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/force_publishes_if_tests_are_no_warnings_or_errors_test.dart
@@ -0,0 +1,29 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('--force publishes if there are no warnings or errors', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server, args: ['--force']);
+    handleUploadForm(server);
+    handleUpload(server);
+    server.handle('GET', '/create', (request) {
+      return new shelf.Response.ok(JSON.encode({
+        'success': {
+          'message': 'Package test_pkg 1.0.0 uploaded!'
+        }
+      }));
+    });
+    pub.shouldExit(exit_codes.SUCCESS);
+    pub.stdout.expect(consumeThrough('Package test_pkg 1.0.0 uploaded!'));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/force_publishes_if_there_are_warnings_test.dart b/sdk/lib/_internal/pub_generated/test/lish/force_publishes_if_there_are_warnings_test.dart
new file mode 100644
index 0000000..ec33e40
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/force_publishes_if_there_are_warnings_test.dart
@@ -0,0 +1,37 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('--force publishes if there are warnings', () {
+    var pkg = packageMap("test_pkg", "1.0.0");
+    pkg["author"] = "Natalie Weizenbaum";
+    d.dir(appPath, [d.pubspec(pkg)]).create();
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server, args: ['--force']);
+    handleUploadForm(server);
+    handleUpload(server);
+    server.handle('GET', '/create', (request) {
+      return new shelf.Response.ok(JSON.encode({
+        'success': {
+          'message': 'Package test_pkg 1.0.0 uploaded!'
+        }
+      }));
+    });
+    pub.shouldExit(exit_codes.SUCCESS);
+    pub.stderr.expect(consumeThrough('Suggestions:'));
+    pub.stderr.expect(
+        emitsLines(
+            '* Author "Natalie Weizenbaum" in pubspec.yaml should have an email '
+                'address\n' '  (e.g. "name <email>").'));
+    pub.stdout.expect(consumeThrough('Package test_pkg 1.0.0 uploaded!'));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/package_creation_provides_a_malformed_error_test.dart b/sdk/lib/_internal/pub_generated/test/lish/package_creation_provides_a_malformed_error_test.dart
new file mode 100644
index 0000000..78e7d44
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/package_creation_provides_a_malformed_error_test.dart
@@ -0,0 +1,28 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('package creation provides a malformed error', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    handleUploadForm(server);
+    handleUpload(server);
+    var body = {
+      'error': 'Your package was too boring.'
+    };
+    server.handle('GET', '/create', (request) {
+      return new shelf.Response.notFound(JSON.encode(body));
+    });
+    pub.stderr.expect('Invalid server response:');
+    pub.stderr.expect(JSON.encode(body));
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/package_creation_provides_a_malformed_success_test.dart b/sdk/lib/_internal/pub_generated/test/lish/package_creation_provides_a_malformed_success_test.dart
new file mode 100644
index 0000000..1fbb927
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/package_creation_provides_a_malformed_success_test.dart
@@ -0,0 +1,28 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('package creation provides a malformed success', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    handleUploadForm(server);
+    handleUpload(server);
+    var body = {
+      'success': 'Your package was awesome.'
+    };
+    server.handle('GET', '/create', (request) {
+      return new shelf.Response.ok(JSON.encode(body));
+    });
+    pub.stderr.expect('Invalid server response:');
+    pub.stderr.expect(JSON.encode(body));
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/package_creation_provides_an_error_test.dart b/sdk/lib/_internal/pub_generated/test/lish/package_creation_provides_an_error_test.dart
new file mode 100644
index 0000000..eb9088a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/package_creation_provides_an_error_test.dart
@@ -0,0 +1,28 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('package creation provides an error', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    handleUploadForm(server);
+    handleUpload(server);
+    server.handle('GET', '/create', (request) {
+      return new shelf.Response.notFound(JSON.encode({
+        'error': {
+          'message': 'Your package was too boring.'
+        }
+      }));
+    });
+    pub.stderr.expect('Your package was too boring.');
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/package_creation_provides_invalid_json_test.dart b/sdk/lib/_internal/pub_generated/test/lish/package_creation_provides_invalid_json_test.dart
new file mode 100644
index 0000000..78156b5
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/package_creation_provides_invalid_json_test.dart
@@ -0,0 +1,23 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('package creation provides invalid JSON', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    handleUploadForm(server);
+    handleUpload(server);
+    server.handle('GET', '/create', (request) {
+      return new shelf.Response.ok('{not json');
+    });
+    pub.stderr.expect(emitsLines('Invalid server response:\n' '{not json'));
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/package_validation_has_a_warning_and_continues_test.dart b/sdk/lib/_internal/pub_generated/test/lish/package_validation_has_a_warning_and_continues_test.dart
new file mode 100644
index 0000000..d833598
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/package_validation_has_a_warning_and_continues_test.dart
@@ -0,0 +1,33 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('package validation has a warning and continues', () {
+    var pkg = packageMap("test_pkg", "1.0.0");
+    pkg["author"] = "Natalie Weizenbaum";
+    d.dir(appPath, [d.pubspec(pkg)]).create();
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    pub.writeLine("y");
+    handleUploadForm(server);
+    handleUpload(server);
+    server.handle('GET', '/create', (request) {
+      return new shelf.Response.ok(JSON.encode({
+        'success': {
+          'message': 'Package test_pkg 1.0.0 uploaded!'
+        }
+      }));
+    });
+    pub.shouldExit(exit_codes.SUCCESS);
+    pub.stdout.expect(consumeThrough('Package test_pkg 1.0.0 uploaded!'));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/package_validation_has_a_warning_and_is_canceled_test.dart b/sdk/lib/_internal/pub_generated/test/lish/package_validation_has_a_warning_and_is_canceled_test.dart
new file mode 100644
index 0000000..ddff44b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/package_validation_has_a_warning_and_is_canceled_test.dart
@@ -0,0 +1,20 @@
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('package validation has a warning and is canceled', () {
+    var pkg = packageMap("test_pkg", "1.0.0");
+    pkg["author"] = "Natalie Weizenbaum";
+    d.dir(appPath, [d.pubspec(pkg)]).create();
+    var server = new ScheduledServer();
+    var pub = startPublish(server);
+    pub.writeLine("n");
+    pub.shouldExit(exit_codes.SUCCESS);
+    pub.stderr.expect(consumeThrough("Package upload canceled."));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/package_validation_has_an_error_test.dart b/sdk/lib/_internal/pub_generated/test/lish/package_validation_has_an_error_test.dart
new file mode 100644
index 0000000..96a13e9
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/package_validation_has_an_error_test.dart
@@ -0,0 +1,21 @@
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('package validation has an error', () {
+    var pkg = packageMap("test_pkg", "1.0.0");
+    pkg.remove("homepage");
+    d.dir(appPath, [d.pubspec(pkg)]).create();
+    var server = new ScheduledServer();
+    var pub = startPublish(server);
+    pub.shouldExit(exit_codes.SUCCESS);
+    pub.stderr.expect(
+        consumeThrough(
+            "Sorry, your package is missing a " "requirement and can't be published yet."));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/preview_errors_if_private_test.dart b/sdk/lib/_internal/pub_generated/test/lish/preview_errors_if_private_test.dart
new file mode 100644
index 0000000..69468cd
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/preview_errors_if_private_test.dart
@@ -0,0 +1,16 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('preview shows an error if the package is private', () {
+    var pkg = packageMap("test_pkg", "1.0.0");
+    pkg["publish_to"] = "none";
+    d.dir(appPath, [d.pubspec(pkg)]).create();
+    schedulePub(
+        args: ["lish", "--dry-run"],
+        error: startsWith("A private package cannot be published."),
+        exitCode: exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/preview_package_validation_has_a_warning_test.dart b/sdk/lib/_internal/pub_generated/test/lish/preview_package_validation_has_a_warning_test.dart
new file mode 100644
index 0000000..564ad57
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/preview_package_validation_has_a_warning_test.dart
@@ -0,0 +1,23 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('preview package validation has a warning', () {
+    var pkg = packageMap("test_pkg", "1.0.0");
+    pkg["author"] = "Natalie Weizenbaum";
+    d.dir(appPath, [d.pubspec(pkg)]).create();
+    var server = new ScheduledServer();
+    var pub = startPublish(server, args: ['--dry-run']);
+    pub.shouldExit(exit_codes.SUCCESS);
+    pub.stderr.expect(consumeThrough('Suggestions:'));
+    pub.stderr.expect(
+        emitsLines(
+            '* Author "Natalie Weizenbaum" in pubspec.yaml should have an email '
+                'address\n' '  (e.g. "name <email>").\n' '\n' 'Package has 1 warning.'));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/preview_package_validation_has_no_warnings_test.dart b/sdk/lib/_internal/pub_generated/test/lish/preview_package_validation_has_no_warnings_test.dart
new file mode 100644
index 0000000..46d0dfa
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/preview_package_validation_has_no_warnings_test.dart
@@ -0,0 +1,19 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('preview package validation has no warnings', () {
+    var pkg = packageMap("test_pkg", "1.0.0");
+    pkg["author"] = "Natalie Weizenbaum <nweiz@google.com>";
+    d.dir(appPath, [d.pubspec(pkg)]).create();
+    var server = new ScheduledServer();
+    var pub = startPublish(server, args: ['--dry-run']);
+    pub.shouldExit(exit_codes.SUCCESS);
+    pub.stderr.expect(consumeThrough('Package has 0 warnings.'));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/server_arg_does_not_override_private_test.dart b/sdk/lib/_internal/pub_generated/test/lish/server_arg_does_not_override_private_test.dart
new file mode 100644
index 0000000..bf47b1a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/server_arg_does_not_override_private_test.dart
@@ -0,0 +1,16 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('an explicit --server argument does not override privacy', () {
+    var pkg = packageMap("test_pkg", "1.0.0");
+    pkg["publish_to"] = "none";
+    d.dir(appPath, [d.pubspec(pkg)]).create();
+    schedulePub(
+        args: ["lish", "--server", "http://arg.com"],
+        error: startsWith("A private package cannot be published."),
+        exitCode: exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/server_arg_overrides_publish_to_url_test.dart b/sdk/lib/_internal/pub_generated/test/lish/server_arg_overrides_publish_to_url_test.dart
new file mode 100644
index 0000000..e496cf6
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/server_arg_overrides_publish_to_url_test.dart
@@ -0,0 +1,14 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('an explicit --server argument overrides a "publish_to" url', () {
+    var pkg = packageMap("test_pkg", "1.0.0");
+    pkg["publish_to"] = "http://pubspec.com";
+    d.dir(appPath, [d.pubspec(pkg)]).create();
+    schedulePub(
+        args: ["lish", "--dry-run", "--server", "http://arg.com"],
+        output: contains("http://arg.com"));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/upload_form_fields_has_a_non_string_value_test.dart b/sdk/lib/_internal/pub_generated/test/lish/upload_form_fields_has_a_non_string_value_test.dart
new file mode 100644
index 0000000..77f44df
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/upload_form_fields_has_a_non_string_value_test.dart
@@ -0,0 +1,26 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('upload form fields has a non-string value', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    var body = {
+      'url': 'http://example.com/upload',
+      'fields': {
+        'field': 12
+      }
+    };
+    handleUploadForm(server, body);
+    pub.stderr.expect('Invalid server response:');
+    pub.stderr.expect(JSON.encode(body));
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/upload_form_fields_is_not_a_map_test.dart b/sdk/lib/_internal/pub_generated/test/lish/upload_form_fields_is_not_a_map_test.dart
new file mode 100644
index 0000000..5ba9fbb
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/upload_form_fields_is_not_a_map_test.dart
@@ -0,0 +1,24 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('upload form fields is not a map', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    var body = {
+      'url': 'http://example.com/upload',
+      'fields': 12
+    };
+    handleUploadForm(server, body);
+    pub.stderr.expect('Invalid server response:');
+    pub.stderr.expect(JSON.encode(body));
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/upload_form_is_missing_fields_test.dart b/sdk/lib/_internal/pub_generated/test/lish/upload_form_is_missing_fields_test.dart
new file mode 100644
index 0000000..d3789f3
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/upload_form_is_missing_fields_test.dart
@@ -0,0 +1,23 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('upload form is missing fields', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    var body = {
+      'url': 'http://example.com/upload'
+    };
+    handleUploadForm(server, body);
+    pub.stderr.expect('Invalid server response:');
+    pub.stderr.expect(JSON.encode(body));
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/upload_form_is_missing_url_test.dart b/sdk/lib/_internal/pub_generated/test/lish/upload_form_is_missing_url_test.dart
new file mode 100644
index 0000000..4a195d5
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/upload_form_is_missing_url_test.dart
@@ -0,0 +1,26 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('upload form is missing url', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    var body = {
+      'fields': {
+        'field1': 'value1',
+        'field2': 'value2'
+      }
+    };
+    handleUploadForm(server, body);
+    pub.stderr.expect('Invalid server response:');
+    pub.stderr.expect(JSON.encode(body));
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/upload_form_provides_an_error_test.dart b/sdk/lib/_internal/pub_generated/test/lish/upload_form_provides_an_error_test.dart
new file mode 100644
index 0000000..9f7bd36
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/upload_form_provides_an_error_test.dart
@@ -0,0 +1,25 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('upload form provides an error', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    server.handle('GET', '/api/packages/versions/new', (request) {
+      return new shelf.Response.notFound(JSON.encode({
+        'error': {
+          'message': 'your request sucked'
+        }
+      }));
+    });
+    pub.stderr.expect('your request sucked');
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/upload_form_provides_invalid_json_test.dart b/sdk/lib/_internal/pub_generated/test/lish/upload_form_provides_invalid_json_test.dart
new file mode 100644
index 0000000..a2b685b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/upload_form_provides_invalid_json_test.dart
@@ -0,0 +1,21 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('upload form provides invalid JSON', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    server.handle(
+        'GET',
+        '/api/packages/versions/new',
+        (request) => new shelf.Response.ok('{not json'));
+    pub.stderr.expect(emitsLines('Invalid server response:\n' '{not json'));
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/upload_form_url_is_not_a_string_test.dart b/sdk/lib/_internal/pub_generated/test/lish/upload_form_url_is_not_a_string_test.dart
new file mode 100644
index 0000000..148f303
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/upload_form_url_is_not_a_string_test.dart
@@ -0,0 +1,27 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('upload form url is not a string', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    var body = {
+      'url': 12,
+      'fields': {
+        'field1': 'value1',
+        'field2': 'value2'
+      }
+    };
+    handleUploadForm(server, body);
+    pub.stderr.expect('Invalid server response:');
+    pub.stderr.expect(JSON.encode(body));
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/uses_publish_to_url_test.dart b/sdk/lib/_internal/pub_generated/test/lish/uses_publish_to_url_test.dart
new file mode 100644
index 0000000..0b8ac0c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/uses_publish_to_url_test.dart
@@ -0,0 +1,14 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('preview shows an error if the package is private', () {
+    var pkg = packageMap("test_pkg", "1.0.0");
+    pkg["publish_to"] = "http://example.com";
+    d.dir(appPath, [d.pubspec(pkg)]).create();
+    schedulePub(
+        args: ["lish", "--dry-run"],
+        output: contains("Publishing test_pkg 1.0.0 to http://example.com"));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lish/utils.dart b/sdk/lib/_internal/pub_generated/test/lish/utils.dart
new file mode 100644
index 0000000..3eb771b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lish/utils.dart
@@ -0,0 +1,35 @@
+library lish.utils;
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../../lib/src/io.dart';
+void handleUploadForm(ScheduledServer server, [Map body]) {
+  server.handle('GET', '/api/packages/versions/new', (request) {
+    return server.url.then((url) {
+      expect(
+          request.headers,
+          containsPair('authorization', 'Bearer access token'));
+      if (body == null) {
+        body = {
+          'url': url.resolve('/upload').toString(),
+          'fields': {
+            'field1': 'value1',
+            'field2': 'value2'
+          }
+        };
+      }
+      return new shelf.Response.ok(JSON.encode(body), headers: {
+        'content-type': 'application/json'
+      });
+    });
+  });
+}
+void handleUpload(ScheduledServer server) {
+  server.handle('POST', '/upload', (request) {
+    return drainStream(
+        request.read()).then(
+            (_) =>
+                server.url).then((url) => new shelf.Response.found(url.resolve('/create')));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/list_package_dirs/ignores_updated_pubspec_test.dart b/sdk/lib/_internal/pub_generated/test/list_package_dirs/ignores_updated_pubspec_test.dart
new file mode 100644
index 0000000..274a149
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/list_package_dirs/ignores_updated_pubspec_test.dart
@@ -0,0 +1,28 @@
+import 'package:path/path.dart' as path;
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("uses what's in the lockfile regardless of the pubspec", () {
+    d.dir("foo", [d.libDir("foo"), d.libPubspec("foo", "1.0.0")]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": path.join(sandboxDir, "foo")
+        }
+      })]).create();
+    pubGet();
+    d.dir(appPath, [d.appPubspec({
+        "bar": "any"
+      })]).create();
+    schedulePub(args: ["list-package-dirs", "--format=json"], outputJson: {
+      "packages": {
+        "foo": path.join(sandboxDir, "foo", "lib"),
+        "myapp": canonicalize(path.join(sandboxDir, appPath, "lib"))
+      },
+      "input_files": [
+          canonicalize(path.join(sandboxDir, appPath, "pubspec.lock")),
+          canonicalize(path.join(sandboxDir, appPath, "pubspec.yaml"))]
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/list_package_dirs/includes_dev_dependencies_test.dart b/sdk/lib/_internal/pub_generated/test/list_package_dirs/includes_dev_dependencies_test.dart
new file mode 100644
index 0000000..b49bbaf
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/list_package_dirs/includes_dev_dependencies_test.dart
@@ -0,0 +1,28 @@
+import 'package:path/path.dart' as path;
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('includes dev dependencies in the results', () {
+    d.dir("foo", [d.libDir("foo"), d.libPubspec("foo", "1.0.0")]).create();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dev_dependencies": {
+          "foo": {
+            "path": path.join(sandboxDir, "foo")
+          }
+        }
+      })]).create();
+    pubGet();
+    schedulePub(args: ["list-package-dirs", "--format=json"], outputJson: {
+      "packages": {
+        "foo": path.join(sandboxDir, "foo", "lib"),
+        "myapp": canonicalize(path.join(sandboxDir, appPath, "lib"))
+      },
+      "input_files": [
+          canonicalize(path.join(sandboxDir, appPath, "pubspec.lock")),
+          canonicalize(path.join(sandboxDir, appPath, "pubspec.yaml"))]
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/list_package_dirs/lists_dependency_directories_test.dart b/sdk/lib/_internal/pub_generated/test/list_package_dirs/lists_dependency_directories_test.dart
new file mode 100644
index 0000000..177df0e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/list_package_dirs/lists_dependency_directories_test.dart
@@ -0,0 +1,36 @@
+import 'package:path/path.dart' as path;
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('prints the local paths to all packages in the lockfile', () {
+    servePackages((builder) => builder.serve("bar", "1.0.0"));
+    d.dir("foo", [d.libDir("foo"), d.libPubspec("foo", "1.0.0")]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": path.join(sandboxDir, "foo")
+        },
+        "bar": "any"
+      })]).create();
+    pubGet();
+    schedulePub(args: ["list-package-dirs", "--format=json"], outputJson: {
+      "packages": {
+        "foo": path.join(sandboxDir, "foo", "lib"),
+        "bar": port.then(
+            (p) =>
+                path.join(
+                    sandboxDir,
+                    cachePath,
+                    "hosted",
+                    "localhost%58$p",
+                    "bar-1.0.0",
+                    "lib")),
+        "myapp": canonicalize(path.join(sandboxDir, appPath, "lib"))
+      },
+      "input_files": [
+          canonicalize(path.join(sandboxDir, appPath, "pubspec.lock")),
+          canonicalize(path.join(sandboxDir, appPath, "pubspec.yaml"))]
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/list_package_dirs/lockfile_error_test.dart b/sdk/lib/_internal/pub_generated/test/list_package_dirs/lockfile_error_test.dart
new file mode 100644
index 0000000..3917150
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/list_package_dirs/lockfile_error_test.dart
@@ -0,0 +1,18 @@
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("reports the lockfile path when there is an error in it", () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.file("pubspec.lock", "some bad yaml")]).create();
+    schedulePub(args: ["list-package-dirs", "--format=json"], outputJson: {
+      "error": contains('The lockfile must be a YAML mapping.'),
+      "path": canonicalize(path.join(sandboxDir, appPath, "pubspec.lock"))
+    }, exitCode: exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/list_package_dirs/missing_pubspec_test.dart b/sdk/lib/_internal/pub_generated/test/list_package_dirs/missing_pubspec_test.dart
new file mode 100644
index 0000000..3503a8d
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/list_package_dirs/missing_pubspec_test.dart
@@ -0,0 +1,15 @@
+import 'package:path/path.dart' as path;
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("reports a missing pubspec error using JSON", () {
+    d.dir(appPath).create();
+    schedulePub(args: ["list-package-dirs", "--format=json"], outputJson: {
+      "error": 'Could not find a file named "pubspec.yaml" in "'
+          '${canonicalize(path.join(sandboxDir, appPath))}".',
+      "path": canonicalize(path.join(sandboxDir, appPath, "pubspec.yaml"))
+    }, exitCode: 1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/list_package_dirs/no_lockfile_test.dart b/sdk/lib/_internal/pub_generated/test/list_package_dirs/no_lockfile_test.dart
new file mode 100644
index 0000000..d0c2ab1
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/list_package_dirs/no_lockfile_test.dart
@@ -0,0 +1,12 @@
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('with no lockfile, exits with error', () {
+    d.dir(appPath, [d.appPubspec()]).create();
+    schedulePub(args: ["list-package-dirs", "--format=json"], outputJson: {
+      "error": 'Package "myapp" has no lockfile. Please run "pub get" first.'
+    }, exitCode: exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/list_package_dirs/pubspec_error_test.dart b/sdk/lib/_internal/pub_generated/test/list_package_dirs/pubspec_error_test.dart
new file mode 100644
index 0000000..0287dcc
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/list_package_dirs/pubspec_error_test.dart
@@ -0,0 +1,16 @@
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("reports the pubspec path when there is an error in it", () {
+    d.dir(appPath, [d.file("pubspec.yaml", "some bad yaml")]).create();
+    schedulePub(args: ["list-package-dirs", "--format=json"], outputJson: {
+      "error": contains('Error on line 1'),
+      "path": canonicalize(path.join(sandboxDir, appPath, "pubspec.yaml"))
+    }, exitCode: exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/lock_file_test.dart b/sdk/lib/_internal/pub_generated/test/lock_file_test.dart
new file mode 100644
index 0000000..ed93194
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/lock_file_test.dart
@@ -0,0 +1,193 @@
+library lock_file_test;
+import 'dart:async';
+import 'package:unittest/unittest.dart';
+import 'package:yaml/yaml.dart';
+import '../lib/src/lock_file.dart';
+import '../lib/src/package.dart';
+import '../lib/src/pubspec.dart';
+import '../lib/src/source.dart';
+import '../lib/src/source_registry.dart';
+import '../lib/src/version.dart';
+import 'test_pub.dart';
+class MockSource extends Source {
+  final String name = 'mock';
+  Future<Pubspec> doDescribe(PackageId id) =>
+      throw new UnsupportedError("Cannot describe mock packages.");
+  Future get(PackageId id, String symlink) =>
+      throw new UnsupportedError("Cannot get a mock package.");
+  Future<String> getDirectory(PackageId id) =>
+      throw new UnsupportedError("Cannot get the directory for mock packages.");
+  dynamic parseDescription(String filePath, String description,
+      {bool fromLockFile: false}) {
+    if (!description.endsWith(' desc')) throw new FormatException();
+    return description;
+  }
+  bool descriptionsEqual(description1, description2) =>
+      description1 == description2;
+  String packageName(String description) {
+    return description.substring(0, description.length - 5);
+  }
+}
+main() {
+  initConfig();
+  var sources = new SourceRegistry();
+  var mockSource = new MockSource();
+  sources.register(mockSource);
+  group('LockFile', () {
+    group('parse()', () {
+      test('returns an empty lockfile if the contents are empty', () {
+        var lockFile = new LockFile.parse('', sources);
+        expect(lockFile.packages.length, equals(0));
+      });
+      test('returns an empty lockfile if the contents are whitespace', () {
+        var lockFile = new LockFile.parse('  \t\n  ', sources);
+        expect(lockFile.packages.length, equals(0));
+      });
+      test('parses a series of package descriptions', () {
+        var lockFile = new LockFile.parse('''
+packages:
+  bar:
+    version: 1.2.3
+    source: mock
+    description: bar desc
+  foo:
+    version: 2.3.4
+    source: mock
+    description: foo desc
+''', sources);
+        expect(lockFile.packages.length, equals(2));
+        var bar = lockFile.packages['bar'];
+        expect(bar.name, equals('bar'));
+        expect(bar.version, equals(new Version(1, 2, 3)));
+        expect(bar.source, equals(mockSource.name));
+        expect(bar.description, equals('bar desc'));
+        var foo = lockFile.packages['foo'];
+        expect(foo.name, equals('foo'));
+        expect(foo.version, equals(new Version(2, 3, 4)));
+        expect(foo.source, equals(mockSource.name));
+        expect(foo.description, equals('foo desc'));
+      });
+      test("allows an unknown source", () {
+        var lockFile = new LockFile.parse('''
+packages:
+  foo:
+    source: bad
+    version: 1.2.3
+    description: foo desc
+''', sources);
+        var foo = lockFile.packages['foo'];
+        expect(foo.source, equals('bad'));
+      });
+      test("allows an empty dependency map", () {
+        var lockFile = new LockFile.parse('''
+packages:
+''', sources);
+        expect(lockFile.packages, isEmpty);
+      });
+      test("throws if the top level is not a map", () {
+        expect(() {
+          new LockFile.parse('''
+not a map
+''', sources);
+        }, throwsFormatException);
+      });
+      test("throws if the contents of 'packages' is not a map", () {
+        expect(() {
+          new LockFile.parse('''
+packages: not a map
+''', sources);
+        }, throwsFormatException);
+      });
+      test("throws if the version is missing", () {
+        expect(() {
+          new LockFile.parse('''
+packages:
+  foo:
+    source: mock
+    description: foo desc
+''', sources);
+        }, throwsFormatException);
+      });
+      test("throws if the version is invalid", () {
+        expect(() {
+          new LockFile.parse('''
+packages:
+  foo:
+    version: vorpal
+    source: mock
+    description: foo desc
+''', sources);
+        }, throwsFormatException);
+      });
+      test("throws if the source is missing", () {
+        expect(() {
+          new LockFile.parse('''
+packages:
+  foo:
+    version: 1.2.3
+    description: foo desc
+''', sources);
+        }, throwsFormatException);
+      });
+      test("throws if the description is missing", () {
+        expect(() {
+          new LockFile.parse('''
+packages:
+  foo:
+    version: 1.2.3
+    source: mock
+''', sources);
+        }, throwsFormatException);
+      });
+      test("throws if the description is invalid", () {
+        expect(() {
+          new LockFile.parse('''
+packages:
+  foo:
+    version: 1.2.3
+    source: mock
+    description: foo desc is bad
+''', sources);
+        }, throwsFormatException);
+      });
+      test("ignores extra stuff in file", () {
+        var lockFile = new LockFile.parse('''
+extra:
+  some: stuff
+packages:
+  foo:
+    bonus: not used
+    version: 1.2.3
+    source: mock
+    description: foo desc
+''', sources);
+      });
+    });
+    group('serialize()', () {
+      var lockfile;
+      setUp(() {
+        lockfile = new LockFile.empty();
+      });
+      test('dumps the lockfile to YAML', () {
+        lockfile.packages['foo'] =
+            new PackageId('foo', mockSource.name, new Version.parse('1.2.3'), 'foo desc');
+        lockfile.packages['bar'] =
+            new PackageId('bar', mockSource.name, new Version.parse('3.2.1'), 'bar desc');
+        expect(loadYaml(lockfile.serialize(null, sources)), equals({
+          'packages': {
+            'foo': {
+              'version': '1.2.3',
+              'source': 'mock',
+              'description': 'foo desc'
+            },
+            'bar': {
+              'version': '3.2.1',
+              'source': 'mock',
+              'description': 'bar desc'
+            }
+          }
+        }));
+      });
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/no_package_symlinks_test.dart b/sdk/lib/_internal/pub_generated/test/no_package_symlinks_test.dart
new file mode 100644
index 0000000..f0a6612
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/no_package_symlinks_test.dart
@@ -0,0 +1,98 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'descriptor.dart' as d;
+import 'test_pub.dart';
+main() {
+  initConfig();
+  forBothPubGetAndUpgrade((command) {
+    group("with --no-package-symlinks", () {
+      integration("installs hosted dependencies to the cache", () {
+        servePackages((builder) {
+          builder.serve("foo", "1.0.0");
+          builder.serve("bar", "1.0.0");
+        });
+        d.appDir({
+          "foo": "any",
+          "bar": "any"
+        }).create();
+        pubCommand(command, args: ["--no-package-symlinks"]);
+        d.nothing("$appPath/packages").validate();
+        d.hostedCache(
+            [
+                d.dir(
+                    "foo-1.0.0",
+                    [d.dir("lib", [d.file("foo.dart", 'main() => "foo 1.0.0";')])]),
+                d.dir(
+                    "bar-1.0.0",
+                    [d.dir("lib", [d.file("bar.dart", 'main() => "bar 1.0.0";')])])]).validate();
+      });
+      integration("installs git dependencies to the cache", () {
+        ensureGit();
+        d.git(
+            'foo.git',
+            [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]).create();
+        d.appDir({
+          "foo": {
+            "git": "../foo.git"
+          }
+        }).create();
+        pubCommand(command, args: ["--no-package-symlinks"]);
+        d.nothing("$appPath/packages").validate();
+        d.dir(
+            cachePath,
+            [
+                d.dir(
+                    'git',
+                    [
+                        d.dir('cache', [d.gitPackageRepoCacheDir('foo')]),
+                        d.gitPackageRevisionCacheDir('foo')])]).validate();
+      });
+      integration("locks path dependencies", () {
+        d.dir("foo", [d.libDir("foo"), d.libPubspec("foo", "0.0.1")]).create();
+        d.dir(appPath, [d.appPubspec({
+            "foo": {
+              "path": "../foo"
+            }
+          })]).create();
+        pubCommand(command, args: ["--no-package-symlinks"]);
+        d.nothing("$appPath/packages").validate();
+        d.matcherFile("$appPath/pubspec.lock", contains("foo"));
+      });
+      integration("removes package directories near entrypoints", () {
+        d.dir(
+            appPath,
+            [
+                d.appPubspec(),
+                d.dir("packages"),
+                d.dir("bin/packages"),
+                d.dir("web/packages"),
+                d.dir("web/subdir/packages")]).create();
+        pubCommand(command, args: ["--no-package-symlinks"]);
+        d.dir(
+            appPath,
+            [
+                d.nothing("packages"),
+                d.nothing("bin/packages"),
+                d.nothing("web/packages"),
+                d.nothing("web/subdir/packages")]).validate();
+      });
+      integration(
+          "doesn't remove package directories that pub wouldn't " "generate",
+          () {
+        d.dir(
+            appPath,
+            [
+                d.appPubspec(),
+                d.dir("packages"),
+                d.dir("bin/subdir/packages"),
+                d.dir("lib/packages")]).create();
+        pubCommand(command, args: ["--no-package-symlinks"]);
+        d.dir(
+            appPath,
+            [
+                d.nothing("packages"),
+                d.dir("bin/subdir/packages"),
+                d.dir("lib/packages")]).validate();
+      });
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/oauth2/utils.dart b/sdk/lib/_internal/pub_generated/test/oauth2/utils.dart
new file mode 100644
index 0000000..0837548
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/oauth2/utils.dart
@@ -0,0 +1,44 @@
+library oauth2.utils;
+import 'dart:convert';
+import 'package:http/http.dart' as http;
+import 'package:scheduled_test/scheduled_process.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../../lib/src/utils.dart';
+void authorizePub(ScheduledProcess pub, ScheduledServer server,
+    [String accessToken = "access token"]) {
+  pub.stdout.expect(
+      'Pub needs your authorization to upload packages on your ' 'behalf.');
+  schedule(() {
+    return pub.stdout.next().then((line) {
+      var match =
+          new RegExp(r'[?&]redirect_uri=([0-9a-zA-Z.%+-]+)[$&]').firstMatch(line);
+      expect(match, isNotNull);
+      var redirectUrl = Uri.parse(Uri.decodeComponent(match.group(1)));
+      redirectUrl = addQueryParameters(redirectUrl, {
+        'code': 'access code'
+      });
+      return (new http.Request('GET', redirectUrl)..followRedirects =
+          false).send();
+    }).then((response) {
+      expect(
+          response.headers['location'],
+          equals('http://pub.dartlang.org/authorized'));
+    });
+  });
+  handleAccessTokenRequest(server, accessToken);
+}
+void handleAccessTokenRequest(ScheduledServer server, String accessToken) {
+  server.handle('POST', '/token', (request) {
+    return request.readAsString().then((body) {
+      expect(body, matches(new RegExp(r'(^|&)code=access\+code(&|$)')));
+      return new shelf.Response.ok(JSON.encode({
+        "access_token": accessToken,
+        "token_type": "bearer"
+      }), headers: {
+        'content-type': 'application/json'
+      });
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/oauth2/with_a_malformed_credentials_authenticates_again_test.dart b/sdk/lib/_internal/pub_generated/test/oauth2/with_a_malformed_credentials_authenticates_again_test.dart
new file mode 100644
index 0000000..49bf555
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/oauth2/with_a_malformed_credentials_authenticates_again_test.dart
@@ -0,0 +1,28 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      'with a malformed credentials.json, authenticates again and '
+          'saves credentials.json',
+      () {
+    d.validPackage.create();
+    var server = new ScheduledServer();
+    d.dir(cachePath, [d.file('credentials.json', '{bad json')]).create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    authorizePub(pub, server, "new access token");
+    server.handle('GET', '/api/packages/versions/new', (request) {
+      expect(
+          request.headers,
+          containsPair('authorization', 'Bearer new access token'));
+      return new shelf.Response(200);
+    });
+    pub.shouldExit(1);
+    d.credentialsFile(server, 'new access token').validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/oauth2/with_a_pre_existing_credentials_does_not_authenticate_test.dart b/sdk/lib/_internal/pub_generated/test/oauth2/with_a_pre_existing_credentials_does_not_authenticate_test.dart
new file mode 100644
index 0000000..63b3de2
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/oauth2/with_a_pre_existing_credentials_does_not_authenticate_test.dart
@@ -0,0 +1,22 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('with a pre-existing credentials.json does not authenticate', () {
+    d.validPackage.create();
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    server.handle('GET', '/api/packages/versions/new', (request) {
+      expect(
+          request.headers,
+          containsPair('authorization', 'Bearer access token'));
+      return new shelf.Response(200);
+    });
+    pub.kill();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/oauth2/with_a_server_rejected_refresh_token_authenticates_again_test.dart b/sdk/lib/_internal/pub_generated/test/oauth2/with_a_server_rejected_refresh_token_authenticates_again_test.dart
new file mode 100644
index 0000000..96ec3080c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/oauth2/with_a_server_rejected_refresh_token_authenticates_again_test.dart
@@ -0,0 +1,43 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      'with a server-rejected refresh token, authenticates again and '
+          'saves credentials.json',
+      () {
+    d.validPackage.create();
+    var server = new ScheduledServer();
+    d.credentialsFile(
+        server,
+        'access token',
+        refreshToken: 'bad refresh token',
+        expiration: new DateTime.now().subtract(new Duration(hours: 1))).create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    server.handle('POST', '/token', (request) {
+      return drainStream(request.read()).then((_) {
+        return new shelf.Response(400, body: JSON.encode({
+          "error": "invalid_request"
+        }), headers: {
+          'content-type': 'application/json'
+        });
+      });
+    });
+    pub.stdout.expect(startsWith('Uploading...'));
+    authorizePub(pub, server, 'new access token');
+    server.handle('GET', '/api/packages/versions/new', (request) {
+      expect(
+          request.headers,
+          containsPair('authorization', 'Bearer new access token'));
+      return new shelf.Response(200);
+    });
+    pub.kill();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/oauth2/with_an_expired_credentials_refreshes_and_saves_test.dart b/sdk/lib/_internal/pub_generated/test/oauth2/with_an_expired_credentials_refreshes_and_saves_test.dart
new file mode 100644
index 0000000..913723b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/oauth2/with_an_expired_credentials_refreshes_and_saves_test.dart
@@ -0,0 +1,47 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      'with an expired credentials.json, refreshes and saves the '
+          'refreshed access token to credentials.json',
+      () {
+    d.validPackage.create();
+    var server = new ScheduledServer();
+    d.credentialsFile(
+        server,
+        'access token',
+        refreshToken: 'refresh token',
+        expiration: new DateTime.now().subtract(new Duration(hours: 1))).create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    server.handle('POST', '/token', (request) {
+      return request.readAsString().then((body) {
+        expect(
+            body,
+            matches(new RegExp(r'(^|&)refresh_token=refresh\+token(&|$)')));
+        return new shelf.Response.ok(JSON.encode({
+          "access_token": "new access token",
+          "token_type": "bearer"
+        }), headers: {
+          'content-type': 'application/json'
+        });
+      });
+    });
+    server.handle('GET', '/api/packages/versions/new', (request) {
+      expect(
+          request.headers,
+          containsPair('authorization', 'Bearer new access token'));
+      return new shelf.Response(200);
+    });
+    pub.shouldExit();
+    d.credentialsFile(
+        server,
+        'new access token',
+        refreshToken: 'refresh token').validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/oauth2/with_an_expired_credentials_without_a_refresh_token_authenticates_again_test.dart b/sdk/lib/_internal/pub_generated/test/oauth2/with_an_expired_credentials_without_a_refresh_token_authenticates_again_test.dart
new file mode 100644
index 0000000..6250238
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/oauth2/with_an_expired_credentials_without_a_refresh_token_authenticates_again_test.dart
@@ -0,0 +1,34 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      'with an expired credentials.json without a refresh token, '
+          'authenticates again and saves credentials.json',
+      () {
+    d.validPackage.create();
+    var server = new ScheduledServer();
+    d.credentialsFile(
+        server,
+        'access token',
+        expiration: new DateTime.now().subtract(new Duration(hours: 1))).create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    pub.stderr.expect(
+        "Pub's authorization to upload packages has expired and "
+            "can't be automatically refreshed.");
+    authorizePub(pub, server, "new access token");
+    server.handle('GET', '/api/packages/versions/new', (request) {
+      expect(
+          request.headers,
+          containsPair('authorization', 'Bearer new access token'));
+      return new shelf.Response(200);
+    });
+    pub.shouldExit(1);
+    d.credentialsFile(server, 'new access token').validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/oauth2/with_no_credentials_authenticates_and_saves_credentials_test.dart b/sdk/lib/_internal/pub_generated/test/oauth2/with_no_credentials_authenticates_and_saves_credentials_test.dart
new file mode 100644
index 0000000..d6f1580
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/oauth2/with_no_credentials_authenticates_and_saves_credentials_test.dart
@@ -0,0 +1,26 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      'with no credentials.json, authenticates and saves ' 'credentials.json',
+      () {
+    d.validPackage.create();
+    var server = new ScheduledServer();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    authorizePub(pub, server);
+    server.handle('GET', '/api/packages/versions/new', (request) {
+      expect(
+          request.headers,
+          containsPair('authorization', 'Bearer access token'));
+      return new shelf.Response(200);
+    });
+    pub.shouldExit(1);
+    d.credentialsFile(server, 'access token').validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/oauth2/with_server_rejected_credentials_authenticates_again_test.dart b/sdk/lib/_internal/pub_generated/test/oauth2/with_server_rejected_credentials_authenticates_again_test.dart
new file mode 100644
index 0000000..f439c86
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/oauth2/with_server_rejected_credentials_authenticates_again_test.dart
@@ -0,0 +1,32 @@
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      'with server-rejected credentials, authenticates again and saves '
+          'credentials.json',
+      () {
+    d.validPackage.create();
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPublish(server);
+    confirmPublish(pub);
+    server.handle('GET', '/api/packages/versions/new', (request) {
+      return new shelf.Response(401, body: JSON.encode({
+        'error': {
+          'message': 'your token sucks'
+        }
+      }), headers: {
+        'www-authenticate': 'Bearer error="invalid_token",'
+            ' error_description="your token sucks"'
+      });
+    });
+    pub.stderr.expect('OAuth2 authorization failed (your token sucks).');
+    pub.stdout.expect(startsWith('Uploading...'));
+    pub.kill();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/package_list_files_test.dart b/sdk/lib/_internal/pub_generated/test/package_list_files_test.dart
new file mode 100644
index 0000000..466ee82
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/package_list_files_test.dart
@@ -0,0 +1,211 @@
+library packages_list_files_test;
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../lib/src/entrypoint.dart';
+import '../lib/src/io.dart';
+import '../lib/src/system_cache.dart';
+import 'descriptor.dart' as d;
+import 'test_pub.dart';
+var root;
+var entrypoint;
+main() {
+  initConfig();
+  group('not in a git repo', () {
+    setUp(() {
+      d.appDir().create();
+      scheduleEntrypoint();
+    });
+    integration('lists files recursively', () {
+      d.dir(
+          appPath,
+          [
+              d.file('file1.txt', 'contents'),
+              d.file('file2.txt', 'contents'),
+              d.dir(
+                  'subdir',
+                  [
+                      d.file('subfile1.txt', 'subcontents'),
+                      d.file('subfile2.txt', 'subcontents')])]).create();
+      schedule(() {
+        expect(
+            entrypoint.root.listFiles(),
+            unorderedEquals(
+                [
+                    path.join(root, 'pubspec.yaml'),
+                    path.join(root, 'file1.txt'),
+                    path.join(root, 'file2.txt'),
+                    path.join(root, 'subdir', 'subfile1.txt'),
+                    path.join(root, 'subdir', 'subfile2.txt')]));
+      });
+    });
+    commonTests();
+  });
+  group('with git', () {
+    setUp(() {
+      ensureGit();
+      d.git(appPath, [d.appPubspec()]).create();
+      scheduleEntrypoint();
+    });
+    integration("includes files that are or aren't checked in", () {
+      d.dir(
+          appPath,
+          [
+              d.file('file1.txt', 'contents'),
+              d.file('file2.txt', 'contents'),
+              d.dir(
+                  'subdir',
+                  [
+                      d.file('subfile1.txt', 'subcontents'),
+                      d.file('subfile2.txt', 'subcontents')])]).create();
+      schedule(() {
+        expect(
+            entrypoint.root.listFiles(),
+            unorderedEquals(
+                [
+                    path.join(root, 'pubspec.yaml'),
+                    path.join(root, 'file1.txt'),
+                    path.join(root, 'file2.txt'),
+                    path.join(root, 'subdir', 'subfile1.txt'),
+                    path.join(root, 'subdir', 'subfile2.txt')]));
+      });
+    });
+    integration("ignores files that are gitignored", () {
+      d.dir(
+          appPath,
+          [
+              d.file('.gitignore', '*.txt'),
+              d.file('file1.txt', 'contents'),
+              d.file('file2.text', 'contents'),
+              d.dir(
+                  'subdir',
+                  [
+                      d.file('subfile1.txt', 'subcontents'),
+                      d.file('subfile2.text', 'subcontents')])]).create();
+      schedule(() {
+        expect(
+            entrypoint.root.listFiles(),
+            unorderedEquals(
+                [
+                    path.join(root, 'pubspec.yaml'),
+                    path.join(root, '.gitignore'),
+                    path.join(root, 'file2.text'),
+                    path.join(root, 'subdir', 'subfile2.text')]));
+      });
+    });
+    commonTests();
+  });
+}
+void scheduleEntrypoint() {
+  schedule(() {
+    root = path.join(sandboxDir, appPath);
+    entrypoint = new Entrypoint(root, new SystemCache.withSources(root));
+  }, 'initializing entrypoint');
+  currentSchedule.onComplete.schedule(() {
+    entrypoint = null;
+  }, 'nulling entrypoint');
+}
+void commonTests() {
+  integration('ignores broken symlinks', () {
+    d.dir(appPath, [d.dir('target')]).create();
+    scheduleSymlink(path.join(appPath, 'target'), path.join(appPath, 'link'));
+    schedule(() => deleteEntry(path.join(sandboxDir, appPath, 'target')));
+    schedule(() {
+      expect(
+          entrypoint.root.listFiles(),
+          equals([path.join(root, 'pubspec.yaml')]));
+    });
+  });
+  integration('ignores pubspec.lock files', () {
+    d.dir(
+        appPath,
+        [d.file('pubspec.lock'), d.dir('subdir', [d.file('pubspec.lock')])]).create();
+    schedule(() {
+      expect(
+          entrypoint.root.listFiles(),
+          equals([path.join(root, 'pubspec.yaml')]));
+    });
+  });
+  integration('ignores packages directories', () {
+    d.dir(
+        appPath,
+        [
+            d.dir('packages', [d.file('file.txt', 'contents')]),
+            d.dir(
+                'subdir',
+                [d.dir('packages', [d.file('subfile.txt', 'subcontents')])])]).create();
+    schedule(() {
+      expect(
+          entrypoint.root.listFiles(),
+          equals([path.join(root, 'pubspec.yaml')]));
+    });
+  });
+  integration('allows pubspec.lock directories', () {
+    d.dir(
+        appPath,
+        [d.dir('pubspec.lock', [d.file('file.txt', 'contents')])]).create();
+    schedule(() {
+      expect(
+          entrypoint.root.listFiles(),
+          unorderedEquals(
+              [
+                  path.join(root, 'pubspec.yaml'),
+                  path.join(root, 'pubspec.lock', 'file.txt')]));
+    });
+  });
+  group('and "beneath"', () {
+    integration('only lists files beneath the given root', () {
+      d.dir(
+          appPath,
+          [
+              d.file('file1.txt', 'contents'),
+              d.file('file2.txt', 'contents'),
+              d.dir(
+                  'subdir',
+                  [
+                      d.file('subfile1.txt', 'subcontents'),
+                      d.file('subfile2.txt', 'subcontents'),
+                      d.dir(
+                          'subsubdir',
+                          [
+                              d.file('subsubfile1.txt', 'subsubcontents'),
+                              d.file('subsubfile2.txt', 'subsubcontents')])])]).create();
+      schedule(() {
+        expect(
+            entrypoint.root.listFiles(beneath: path.join(root, 'subdir')),
+            unorderedEquals(
+                [
+                    path.join(root, 'subdir', 'subfile1.txt'),
+                    path.join(root, 'subdir', 'subfile2.txt'),
+                    path.join(root, 'subdir', 'subsubdir', 'subsubfile1.txt'),
+                    path.join(root, 'subdir', 'subsubdir', 'subsubfile2.txt')]));
+      });
+    });
+    integration("doesn't care if the root is blacklisted", () {
+      d.dir(
+          appPath,
+          [
+              d.file('file1.txt', 'contents'),
+              d.file('file2.txt', 'contents'),
+              d.dir(
+                  'packages',
+                  [
+                      d.file('subfile1.txt', 'subcontents'),
+                      d.file('subfile2.txt', 'subcontents'),
+                      d.dir(
+                          'subsubdir',
+                          [
+                              d.file('subsubfile1.txt', 'subsubcontents'),
+                              d.file('subsubfile2.txt', 'subsubcontents')])])]).create();
+      schedule(() {
+        expect(
+            entrypoint.root.listFiles(beneath: path.join(root, 'packages')),
+            unorderedEquals(
+                [
+                    path.join(root, 'packages', 'subfile1.txt'),
+                    path.join(root, 'packages', 'subfile2.txt'),
+                    path.join(root, 'packages', 'subsubdir', 'subsubfile1.txt'),
+                    path.join(root, 'packages', 'subsubdir', 'subsubfile2.txt')]));
+      });
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/preprocess_test.dart b/sdk/lib/_internal/pub_generated/test/preprocess_test.dart
new file mode 100644
index 0000000..37686fa
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/preprocess_test.dart
@@ -0,0 +1,270 @@
+library pub.test.preprocess_test;
+import 'package:unittest/unittest.dart';
+import '../lib/src/preprocess.dart';
+import '../lib/src/version.dart';
+import 'test_pub.dart';
+main() {
+  initConfig();
+  test("does nothing on a file without preprocessor directives", () {
+    var text = '''
+some text
+// normal comment
+// #
+ //# not beginning of line
+''';
+    expect(_preprocess(text), equals(text));
+  });
+  test("allows bare insert directive", () {
+    expect(_preprocess('//> foo'), equals('foo'));
+  });
+  test("allows empty insert directive", () {
+    expect(_preprocess('''
+//> foo
+//>
+//> bar
+'''), equals('foo\n\nbar\n'));
+  });
+  group("if", () {
+    group("with a version range", () {
+      test("removes sections with non-matching versions", () {
+        expect(_preprocess('''
+before
+//# if barback <1.0.0
+inside
+//# end
+after
+'''), equals('''
+before
+after
+'''));
+      });
+      test("doesn't insert section with non-matching versions", () {
+        expect(_preprocess('''
+before
+//# if barback <1.0.0
+//> inside
+//# end
+after
+'''), equals('''
+before
+after
+'''));
+      });
+      test("doesn't remove sections with matching versions", () {
+        expect(_preprocess('''
+before
+//# if barback >1.0.0
+inside
+//# end
+after
+'''), equals('''
+before
+inside
+after
+'''));
+      });
+      test("inserts sections with matching versions", () {
+        expect(_preprocess('''
+before
+//# if barback >1.0.0
+//> inside
+//# end
+after
+'''), equals('''
+before
+inside
+after
+'''));
+      });
+      test("allows multi-element version ranges", () {
+        expect(_preprocess('''
+before
+//# if barback >=1.0.0 <2.0.0
+inside 1
+//# end
+//# if barback >=0.9.0 <1.0.0
+inside 2
+//# end
+after
+'''), equals('''
+before
+inside 1
+after
+'''));
+      });
+    });
+    group("with a package name", () {
+      test("removes sections for a nonexistent package", () {
+        expect(_preprocess('''
+before
+//# if fblthp
+inside
+//# end
+after
+'''), equals('''
+before
+after
+'''));
+      });
+      test("doesn't insert sections for a nonexistent package", () {
+        expect(_preprocess('''
+before
+//# if fblthp
+//> inside
+//# end
+after
+'''), equals('''
+before
+after
+'''));
+      });
+      test("doesn't remove sections with an existent package", () {
+        expect(_preprocess('''
+before
+//# if barback
+inside
+//# end
+after
+'''), equals('''
+before
+inside
+after
+'''));
+      });
+      test("inserts sections with an existent package", () {
+        expect(_preprocess('''
+before
+//# if barback
+//> inside
+//# end
+after
+'''), equals('''
+before
+inside
+after
+'''));
+      });
+    });
+  });
+  group("else", () {
+    test("removes non-matching sections", () {
+      expect(_preprocess('''
+before
+//# if barback >1.0.0
+inside 1
+//# else
+inside 2
+//# end
+after
+'''), equals('''
+before
+inside 1
+after
+'''));
+    });
+    test("doesn't insert non-matching sections", () {
+      expect(_preprocess('''
+before
+//# if barback >1.0.0
+inside 1
+//# else
+//> inside 2
+//# end
+after
+'''), equals('''
+before
+inside 1
+after
+'''));
+    });
+    test("doesn't remove matching sections", () {
+      expect(_preprocess('''
+before
+//# if barback <1.0.0
+inside 1
+//# else
+inside 2
+//# end
+after
+'''), equals('''
+before
+inside 2
+after
+'''));
+    });
+    test("inserts matching sections", () {
+      expect(_preprocess('''
+before
+//# if barback <1.0.0
+inside 1
+//# else
+//> inside 2
+//# end
+after
+'''), equals('''
+before
+inside 2
+after
+'''));
+    });
+  });
+  group("errors", () {
+    test("disallows unknown statements", () {
+      expect(() => _preprocess('//# foo bar\n//# end'), throwsFormatException);
+    });
+    test("disallows insert directive without space", () {
+      expect(() => _preprocess('//>foo'), throwsFormatException);
+    });
+    group("if", () {
+      test("disallows if with no arguments", () {
+        expect(() => _preprocess('//# if\n//# end'), throwsFormatException);
+      });
+      test("disallows if with no package", () {
+        expect(
+            () => _preprocess('//# if <=1.0.0\n//# end'),
+            throwsFormatException);
+      });
+      test("disallows invalid version constraint", () {
+        expect(
+            () => _preprocess('//# if barback >=1.0\n//# end'),
+            throwsFormatException);
+      });
+      test("disallows dangling end", () {
+        expect(() => _preprocess('//# end'), throwsFormatException);
+      });
+      test("disallows if without end", () {
+        expect(
+            () => _preprocess('//# if barback >=1.0.0'),
+            throwsFormatException);
+      });
+      test("disallows nested if", () {
+        expect(() => _preprocess('''
+//# if barback >=1.0.0
+//# if barback >= 1.5.0
+//# end
+//# end
+'''), throwsFormatException);
+      });
+    });
+    group("else", () {
+      test("disallows else without if", () {
+        expect(() => _preprocess('//# else\n//# end'), throwsFormatException);
+      });
+      test("disallows else without end", () {
+        expect(
+            () => _preprocess('//# if barback >=1.0.0\n//# else'),
+            throwsFormatException);
+      });
+      test("disallows else with an argument", () {
+        expect(() => _preprocess('''
+//# if barback >=1.0.0
+//# else barback <0.5.0
+//# end
+'''), throwsFormatException);
+      });
+    });
+  });
+}
+String _preprocess(String input) => preprocess(input, {
+  'barback': new Version.parse("1.2.3")
+}, 'source/url');
diff --git a/sdk/lib/_internal/pub_generated/test/pub_get_and_upgrade_test.dart b/sdk/lib/_internal/pub_generated/test/pub_get_and_upgrade_test.dart
new file mode 100644
index 0000000..b459fcf
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/pub_get_and_upgrade_test.dart
@@ -0,0 +1,120 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../lib/src/exit_codes.dart' as exit_codes;
+import 'descriptor.dart' as d;
+import 'test_pub.dart';
+main() {
+  initConfig();
+  forBothPubGetAndUpgrade((command) {
+    group('requires', () {
+      integration('a pubspec', () {
+        d.dir(appPath, []).create();
+        pubCommand(
+            command,
+            error: new RegExp(
+                r'Could not find a file named "pubspec.yaml" ' r'in "[^\n]*"\.'));
+      });
+      integration('a pubspec with a "name" key', () {
+        d.dir(appPath, [d.pubspec({
+            "dependencies": {
+              "foo": null
+            }
+          })]).create();
+        pubCommand(
+            command,
+            error: contains('Missing the required "name" field.'),
+            exitCode: exit_codes.DATA);
+      });
+    });
+    integration('adds itself to the packages', () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp_name"
+        }), d.libDir('myapp_name')]).create();
+      pubCommand(command);
+      d.dir(
+          packagesPath,
+          [
+              d.dir(
+                  "myapp_name",
+                  [d.file('myapp_name.dart', 'main() => "myapp_name";')])]).validate();
+    });
+    integration(
+        'does not adds itself to the packages if it has no "lib" ' 'directory',
+        () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp_name"
+        })]).create();
+      pubCommand(command);
+      d.dir(packagesPath, [d.nothing("myapp_name")]).validate();
+    });
+    integration(
+        'does not add a package if it does not have a "lib" ' 'directory',
+        () {
+      d.dir('foo', [d.libPubspec('foo', '0.0.0-not.used')]).create();
+      d.dir(appPath, [d.appPubspec({
+          "foo": {
+            "path": "../foo"
+          }
+        })]).create();
+      pubCommand(command);
+      d.packagesDir({
+        "foo": null
+      }).validate();
+    });
+    integration('reports a solver failure', () {
+      d.dir('deps', [d.dir('foo', [d.pubspec({
+            "name": "foo",
+            "dependencies": {
+              "baz": {
+                "path": "../baz1"
+              }
+            }
+          })]), d.dir('bar', [d.pubspec({
+            "name": "bar",
+            "dependencies": {
+              "baz": {
+                "path": "../baz2"
+              }
+            }
+          })]),
+              d.dir('baz1', [d.libPubspec('baz', '0.0.0')]),
+              d.dir('baz2', [d.libPubspec('baz', '0.0.0')])]).create();
+      d.dir(appPath, [d.appPubspec({
+          "foo": {
+            "path": "../deps/foo"
+          },
+          "bar": {
+            "path": "../deps/bar"
+          }
+        })]).create();
+      pubCommand(
+          command,
+          error: new RegExp("^Incompatible dependencies on baz:\n"));
+    });
+    integration('does not allow a dependency on itself', () {
+      d.dir(appPath, [d.appPubspec({
+          "myapp": {
+            "path": "."
+          }
+        })]).create();
+      pubCommand(
+          command,
+          error: contains('A package may not list itself as a dependency.'),
+          exitCode: exit_codes.DATA);
+    });
+    integration('does not allow a dev dependency on itself', () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "dev_dependencies": {
+            "myapp": {
+              "path": "."
+            }
+          }
+        })]).create();
+      pubCommand(
+          command,
+          error: contains('A package may not list itself as a dependency.'),
+          exitCode: exit_codes.DATA);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/pub_test.dart b/sdk/lib/_internal/pub_generated/test/pub_test.dart
new file mode 100644
index 0000000..e0ca7d3
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/pub_test.dart
@@ -0,0 +1,298 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../lib/src/exit_codes.dart' as exit_codes;
+import 'test_pub.dart';
+final USAGE_STRING = """
+    Pub is a package manager for Dart.
+
+    Usage: pub <command> [arguments]
+
+    Global options:
+    -h, --help            Print this usage information.
+        --version         Print pub version.
+        --[no-]trace      Print debugging information when an error occurs.
+        --verbosity       Control output verbosity.
+
+              [all]       Show all output including internal tracing messages.
+              [io]        Also show IO operations.
+              [normal]    Show errors, warnings, and user messages.
+              [solver]    Show steps during version resolution.
+
+    -v, --verbose         Shortcut for "--verbosity=all".
+
+    Available commands:
+      build       Apply transformers to build a package.
+      cache       Work with the system cache.
+      deps        Print package dependencies.
+      downgrade   Downgrade the current package's dependencies to oldest versions.
+      get         Get the current package's dependencies.
+      global      Work with global packages.
+      help        Display help information for Pub.
+      publish     Publish the current package to pub.dartlang.org.
+      run         Run an executable from a package.
+      serve       Run a local web development server.
+      upgrade     Upgrade the current package's dependencies to latest versions.
+      uploader    Manage uploaders for a package on pub.dartlang.org.
+      version     Print pub version.
+
+    Run "pub help [command]" for more information about a command.
+    See http://dartlang.org/tools/pub for detailed documentation.
+    """;
+final VERSION_STRING = '''
+    Pub 0.1.2+3
+    ''';
+main() {
+  initConfig();
+  integration('running pub with no command displays usage', () {
+    schedulePub(args: [], output: USAGE_STRING);
+  });
+  integration('running pub with just --help displays usage', () {
+    schedulePub(args: ['--help'], output: USAGE_STRING);
+  });
+  integration('running pub with just -h displays usage', () {
+    schedulePub(args: ['-h'], output: USAGE_STRING);
+  });
+  integration('running pub with --with-prejudice upcases everything', () {
+    schedulePub(args: ['--with-prejudice'], output: USAGE_STRING.toUpperCase());
+  });
+  integration('running pub with --help after command shows command usage', () {
+    schedulePub(args: ['get', '--help'], output: '''
+          Get the current package's dependencies.
+
+          Usage: pub get
+          -h, --help            Print usage information for this command.
+              --[no-]offline    Use cached packages instead of accessing the network.
+          -n, --dry-run         Report what dependencies would change but don't change any.
+
+          Run "pub help" to see global options.
+          See http://dartlang.org/tools/pub/cmd/pub-get.html for detailed documentation.
+    ''');
+  });
+  integration('running pub with -h after command shows command usage', () {
+    schedulePub(args: ['get', '-h'], output: '''
+          Get the current package's dependencies.
+
+          Usage: pub get
+          -h, --help            Print usage information for this command.
+              --[no-]offline    Use cached packages instead of accessing the network.
+          -n, --dry-run         Report what dependencies would change but don't change any.
+
+          Run "pub help" to see global options.
+          See http://dartlang.org/tools/pub/cmd/pub-get.html for detailed documentation.
+    ''');
+  });
+  integration(
+      'running pub with --help after a command with subcommands shows '
+          'command usage',
+      () {
+    schedulePub(args: ['cache', '--help'], output: '''
+          Work with the system cache.
+
+          Usage: pub cache <subcommand>
+          -h, --help    Print usage information for this command.
+
+          Available subcommands:
+            add      Install a package.
+            repair   Reinstall cached packages.
+
+          Run "pub help" to see global options.
+          See http://dartlang.org/tools/pub/cmd/pub-cache.html for detailed documentation.
+     ''');
+  });
+  integration('running pub with just --version displays version', () {
+    schedulePub(args: ['--version'], output: VERSION_STRING);
+  });
+  integration('an unknown command displays an error message', () {
+    schedulePub(args: ['quylthulg'], error: '''
+        Could not find a command named "quylthulg".
+
+        Available commands:
+          build       Apply transformers to build a package.
+          cache       Work with the system cache.
+          deps        Print package dependencies.
+          downgrade   Downgrade the current package's dependencies to oldest versions.
+          get         Get the current package's dependencies.
+          global      Work with global packages.
+          help        Display help information for Pub.
+          publish     Publish the current package to pub.dartlang.org.
+          run         Run an executable from a package.
+          serve       Run a local web development server.
+          upgrade     Upgrade the current package's dependencies to latest versions.
+          uploader    Manage uploaders for a package on pub.dartlang.org.
+          version     Print pub version.
+        ''', exitCode: exit_codes.USAGE);
+  });
+  integration('an unknown subcommand displays an error message', () {
+    schedulePub(args: ['cache', 'quylthulg'], error: '''
+        Could not find a subcommand named "quylthulg" for "pub cache".
+
+        Usage: pub cache <subcommand>
+        -h, --help    Print usage information for this command.
+
+        Available subcommands:
+          add      Install a package.
+          repair   Reinstall cached packages.
+
+        Run "pub help" to see global options.
+        See http://dartlang.org/tools/pub/cmd/pub-cache.html for detailed documentation.
+        ''', exitCode: exit_codes.USAGE);
+  });
+  integration('an unknown option displays an error message', () {
+    schedulePub(args: ['--blorf'], error: '''
+        Could not find an option named "blorf".
+        Run "pub help" to see available options.
+        ''', exitCode: exit_codes.USAGE);
+  });
+  integration('an unknown command option displays an error message', () {
+    schedulePub(args: ['version', '--blorf'], error: '''
+        Could not find an option named "blorf".
+        Run "pub help" to see available options.
+        ''', exitCode: exit_codes.USAGE);
+  });
+  integration('an unexpected argument displays an error message', () {
+    schedulePub(args: ['version', 'unexpected'], error: '''
+        Command "version" does not take any arguments.
+
+        Usage: pub version
+         -h, --help    Print usage information for this command.
+
+        Run "pub help" to see global options.
+        ''', exitCode: exit_codes.USAGE);
+  });
+  integration('a missing subcommand displays an error message', () {
+    schedulePub(args: ['cache'], error: '''
+        Missing subcommand for "pub cache".
+
+        Usage: pub cache <subcommand>
+        -h, --help    Print usage information for this command.
+
+        Available subcommands:
+          add      Install a package.
+          repair   Reinstall cached packages.
+
+        Run "pub help" to see global options.
+        See http://dartlang.org/tools/pub/cmd/pub-cache.html for detailed documentation.
+        ''', exitCode: exit_codes.USAGE);
+  });
+  group('help', () {
+    integration('shows global help if no command is given', () {
+      schedulePub(args: ['help'], output: USAGE_STRING);
+    });
+    integration('shows help for a command', () {
+      schedulePub(args: ['help', 'get'], output: '''
+            Get the current package's dependencies.
+
+            Usage: pub get
+            -h, --help            Print usage information for this command.
+                --[no-]offline    Use cached packages instead of accessing the network.
+            -n, --dry-run         Report what dependencies would change but don't change any.
+
+            Run "pub help" to see global options.
+            See http://dartlang.org/tools/pub/cmd/pub-get.html for detailed documentation.
+            ''');
+    });
+    integration('shows help for a command', () {
+      schedulePub(args: ['help', 'publish'], output: '''
+            Publish the current package to pub.dartlang.org.
+
+            Usage: pub publish [options]
+            -h, --help       Print usage information for this command.
+            -n, --dry-run    Validate but do not publish the package.
+            -f, --force      Publish without confirmation if there are no errors.
+                --server     The package server to which to upload this package.
+                             (defaults to "https://pub.dartlang.org")
+
+            Run "pub help" to see global options.
+            See http://dartlang.org/tools/pub/cmd/pub-lish.html for detailed documentation.
+            ''');
+    });
+    integration('shows non-truncated help', () {
+      schedulePub(args: ['help', 'serve'], output: '''
+            Run a local web development server.
+
+            By default, this serves "web/" and "test/", but an explicit list of
+            directories to serve can be provided as well.
+
+            Usage: pub serve [directories...]
+            -h, --help               Print usage information for this command.
+                --mode               Mode to run transformers in.
+                                     (defaults to "debug")
+
+                --all                Use all default source directories.
+                --hostname           The hostname to listen on.
+                                     (defaults to "localhost")
+
+                --port               The base port to listen on.
+                                     (defaults to "8080")
+
+                --[no-]dart2js       Compile Dart to JavaScript.
+                                     (defaults to on)
+
+                --[no-]force-poll    Force the use of a polling filesystem watcher.
+
+            Run "pub help" to see global options.
+            See http://dartlang.org/tools/pub/cmd/pub-serve.html for detailed documentation.
+            ''');
+    });
+    integration('shows help for a subcommand', () {
+      schedulePub(args: ['help', 'cache', 'list'], output: '''
+            List packages in the system cache.
+
+            Usage: pub cache list
+            -h, --help    Print usage information for this command.
+
+            Run "pub help" to see global options.
+            ''');
+    });
+    integration('an unknown help command displays an error message', () {
+      schedulePub(args: ['help', 'quylthulg'], error: '''
+            Could not find a command named "quylthulg".
+
+            Available commands:
+              build       Apply transformers to build a package.
+              cache       Work with the system cache.
+              deps        Print package dependencies.
+              downgrade   Downgrade the current package's dependencies to oldest versions.
+              get         Get the current package's dependencies.
+              global      Work with global packages.
+              help        Display help information for Pub.
+              publish     Publish the current package to pub.dartlang.org.
+              run         Run an executable from a package.
+              serve       Run a local web development server.
+              upgrade     Upgrade the current package's dependencies to latest versions.
+              uploader    Manage uploaders for a package on pub.dartlang.org.
+              version     Print pub version.
+            ''', exitCode: exit_codes.USAGE);
+    });
+    integration('an unknown help subcommand displays an error message', () {
+      schedulePub(args: ['help', 'cache', 'quylthulg'], error: '''
+            Could not find a subcommand named "quylthulg" for "pub cache".
+
+            Usage: pub cache <subcommand>
+            -h, --help    Print usage information for this command.
+
+            Available subcommands:
+              add      Install a package.
+              repair   Reinstall cached packages.
+
+            Run "pub help" to see global options.
+            See http://dartlang.org/tools/pub/cmd/pub-cache.html for detailed documentation.
+            ''', exitCode: exit_codes.USAGE);
+    });
+    integration('an unexpected help subcommand displays an error message', () {
+      schedulePub(args: ['help', 'version', 'badsubcommand'], error: '''
+            Command "pub version" does not expect a subcommand.
+
+            Usage: pub version
+            -h, --help    Print usage information for this command.
+
+            Run "pub help" to see global options.
+            ''', exitCode: exit_codes.USAGE);
+    });
+  });
+  group('version', () {
+    integration('displays the current version', () {
+      schedulePub(args: ['version'], output: VERSION_STRING);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/pub_uploader_test.dart b/sdk/lib/_internal/pub_generated/test/pub_uploader_test.dart
new file mode 100644
index 0000000..db294c0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/pub_uploader_test.dart
@@ -0,0 +1,160 @@
+library pub_uploader_test;
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_process.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import '../lib/src/exit_codes.dart' as exit_codes;
+import '../lib/src/utils.dart';
+import 'descriptor.dart' as d;
+import 'test_pub.dart';
+final USAGE_STRING = '''
+Manage uploaders for a package on pub.dartlang.org.
+
+Usage: pub uploader [options] {add/remove} <email>
+-h, --help       Print usage information for this command.
+    --server     The package server on which the package is hosted.
+                 (defaults to "https://pub.dartlang.org")
+
+    --package    The package whose uploaders will be modified.
+                 (defaults to the current package)
+
+Run "pub help" to see global options.
+See http://dartlang.org/tools/pub/cmd/pub-uploader.html for detailed documentation.
+''';
+ScheduledProcess startPubUploader(ScheduledServer server, List<String> args) {
+  var tokenEndpoint =
+      server.url.then((url) => url.resolve('/token').toString());
+  args = flatten(['uploader', '--server', tokenEndpoint, args]);
+  return startPub(args: args, tokenEndpoint: tokenEndpoint);
+}
+main() {
+  initConfig();
+  group('displays usage', () {
+    integration('when run with no arguments', () {
+      schedulePub(
+          args: ['uploader'],
+          output: USAGE_STRING,
+          exitCode: exit_codes.USAGE);
+    });
+    integration('when run with only a command', () {
+      schedulePub(
+          args: ['uploader', 'add'],
+          output: USAGE_STRING,
+          exitCode: exit_codes.USAGE);
+    });
+    integration('when run with an invalid command', () {
+      schedulePub(
+          args: ['uploader', 'foo', 'email'],
+          output: USAGE_STRING,
+          exitCode: exit_codes.USAGE);
+    });
+  });
+  integration('adds an uploader', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']);
+    server.handle('POST', '/api/packages/pkg/uploaders', (request) {
+      return request.readAsString().then((body) {
+        expect(body, equals('email=email'));
+        return new shelf.Response.ok(JSON.encode({
+          'success': {
+            'message': 'Good job!'
+          }
+        }), headers: {
+          'content-type': 'application/json'
+        });
+      });
+    });
+    pub.stdout.expect('Good job!');
+    pub.shouldExit(exit_codes.SUCCESS);
+  });
+  integration('removes an uploader', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']);
+    server.handle('DELETE', '/api/packages/pkg/uploaders/email', (request) {
+      return new shelf.Response.ok(JSON.encode({
+        'success': {
+          'message': 'Good job!'
+        }
+      }), headers: {
+        'content-type': 'application/json'
+      });
+    });
+    pub.stdout.expect('Good job!');
+    pub.shouldExit(exit_codes.SUCCESS);
+  });
+  integration('defaults to the current package', () {
+    d.validPackage.create();
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPubUploader(server, ['add', 'email']);
+    server.handle('POST', '/api/packages/test_pkg/uploaders', (request) {
+      return new shelf.Response.ok(JSON.encode({
+        'success': {
+          'message': 'Good job!'
+        }
+      }), headers: {
+        'content-type': 'application/json'
+      });
+    });
+    pub.stdout.expect('Good job!');
+    pub.shouldExit(exit_codes.SUCCESS);
+  });
+  integration('add provides an error', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']);
+    server.handle('POST', '/api/packages/pkg/uploaders', (request) {
+      return new shelf.Response(400, body: JSON.encode({
+        'error': {
+          'message': 'Bad job!'
+        }
+      }), headers: {
+        'content-type': 'application/json'
+      });
+    });
+    pub.stderr.expect('Bad job!');
+    pub.shouldExit(1);
+  });
+  integration('remove provides an error', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub =
+        startPubUploader(server, ['--package', 'pkg', 'remove', 'e/mail']);
+    server.handle('DELETE', '/api/packages/pkg/uploaders/e%2Fmail', (request) {
+      return new shelf.Response(400, body: JSON.encode({
+        'error': {
+          'message': 'Bad job!'
+        }
+      }), headers: {
+        'content-type': 'application/json'
+      });
+    });
+    pub.stderr.expect('Bad job!');
+    pub.shouldExit(1);
+  });
+  integration('add provides invalid JSON', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']);
+    server.handle(
+        'POST',
+        '/api/packages/pkg/uploaders',
+        (request) => new shelf.Response.ok("{not json"));
+    pub.stderr.expect(emitsLines('Invalid server response:\n' '{not json'));
+    pub.shouldExit(1);
+  });
+  integration('remove provides invalid JSON', () {
+    var server = new ScheduledServer();
+    d.credentialsFile(server, 'access token').create();
+    var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']);
+    server.handle(
+        'DELETE',
+        '/api/packages/pkg/uploaders/email',
+        (request) => new shelf.Response.ok("{not json"));
+    pub.stderr.expect(emitsLines('Invalid server response:\n' '{not json'));
+    pub.shouldExit(1);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/pubspec_test.dart b/sdk/lib/_internal/pub_generated/test/pubspec_test.dart
new file mode 100644
index 0000000..1f308d0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/pubspec_test.dart
@@ -0,0 +1,390 @@
+library pubspec_test;
+import 'dart:async';
+import 'package:unittest/unittest.dart';
+import '../lib/src/package.dart';
+import '../lib/src/pubspec.dart';
+import '../lib/src/source.dart';
+import '../lib/src/source_registry.dart';
+import '../lib/src/version.dart';
+import 'test_pub.dart';
+class MockSource extends Source {
+  final String name = "mock";
+  Future<Pubspec> doDescribe(PackageId id) =>
+      throw new UnsupportedError("Cannot describe mock packages.");
+  Future get(PackageId id, String symlink) =>
+      throw new UnsupportedError("Cannot get a mock package.");
+  Future<String> getDirectory(PackageId id) =>
+      throw new UnsupportedError("Cannot get the directory for mock packages.");
+  dynamic parseDescription(String filePath, description, {bool fromLockFile:
+      false}) {
+    if (description != 'ok') throw new FormatException('Bad');
+    return description;
+  }
+  bool descriptionsEqual(description1, description2) =>
+      description1 == description2;
+  String packageName(description) => 'foo';
+}
+main() {
+  initConfig();
+  group('parse()', () {
+    var sources = new SourceRegistry();
+    sources.register(new MockSource());
+    var throwsPubspecException =
+        throwsA(new isInstanceOf<PubspecException>('PubspecException'));
+    expectPubspecException(String contents, fn(Pubspec pubspec),
+        [String expectedContains]) {
+      var expectation = throwsPubspecException;
+      if (expectedContains != null) {
+        expectation = throwsA(
+            allOf(
+                new isInstanceOf<PubspecException>('PubspecException'),
+                predicate((error) => error.message.contains(expectedContains))));
+      }
+      var pubspec = new Pubspec.parse(contents, sources);
+      expect(() => fn(pubspec), expectation);
+    }
+    test("doesn't eagerly throw an error for an invalid field", () {
+      new Pubspec.parse('version: not a semver', sources);
+    });
+    test(
+        "eagerly throws an error if the pubspec name doesn't match the "
+            "expected name",
+        () {
+      expect(
+          () => new Pubspec.parse("name: foo", sources, expectedName: 'bar'),
+          throwsPubspecException);
+    });
+    test(
+        "eagerly throws an error if the pubspec doesn't have a name and an "
+            "expected name is passed",
+        () {
+      expect(
+          () => new Pubspec.parse("{}", sources, expectedName: 'bar'),
+          throwsPubspecException);
+    });
+    test("allows a version constraint for dependencies", () {
+      var pubspec = new Pubspec.parse('''
+dependencies:
+  foo:
+    mock: ok
+    version: ">=1.2.3 <3.4.5"
+''', sources);
+      var foo = pubspec.dependencies[0];
+      expect(foo.name, equals('foo'));
+      expect(foo.constraint.allows(new Version(1, 2, 3)), isTrue);
+      expect(foo.constraint.allows(new Version(1, 2, 5)), isTrue);
+      expect(foo.constraint.allows(new Version(3, 4, 5)), isFalse);
+    });
+    test("allows an empty dependencies map", () {
+      var pubspec = new Pubspec.parse('''
+dependencies:
+''', sources);
+      expect(pubspec.dependencies, isEmpty);
+    });
+    test("allows a version constraint for dev dependencies", () {
+      var pubspec = new Pubspec.parse('''
+dev_dependencies:
+  foo:
+    mock: ok
+    version: ">=1.2.3 <3.4.5"
+''', sources);
+      var foo = pubspec.devDependencies[0];
+      expect(foo.name, equals('foo'));
+      expect(foo.constraint.allows(new Version(1, 2, 3)), isTrue);
+      expect(foo.constraint.allows(new Version(1, 2, 5)), isTrue);
+      expect(foo.constraint.allows(new Version(3, 4, 5)), isFalse);
+    });
+    test("allows an empty dev dependencies map", () {
+      var pubspec = new Pubspec.parse('''
+dev_dependencies:
+''', sources);
+      expect(pubspec.devDependencies, isEmpty);
+    });
+    test("allows a version constraint for dependency overrides", () {
+      var pubspec = new Pubspec.parse('''
+dependency_overrides:
+  foo:
+    mock: ok
+    version: ">=1.2.3 <3.4.5"
+''', sources);
+      var foo = pubspec.dependencyOverrides[0];
+      expect(foo.name, equals('foo'));
+      expect(foo.constraint.allows(new Version(1, 2, 3)), isTrue);
+      expect(foo.constraint.allows(new Version(1, 2, 5)), isTrue);
+      expect(foo.constraint.allows(new Version(3, 4, 5)), isFalse);
+    });
+    test("allows an empty dependency overrides map", () {
+      var pubspec = new Pubspec.parse('''
+dependency_overrides:
+''', sources);
+      expect(pubspec.dependencyOverrides, isEmpty);
+    });
+    test("allows an unknown source", () {
+      var pubspec = new Pubspec.parse('''
+dependencies:
+  foo:
+    unknown: blah
+''', sources);
+      var foo = pubspec.dependencies[0];
+      expect(foo.name, equals('foo'));
+      expect(foo.source, equals('unknown'));
+    });
+    test("throws if a package is in dependencies and dev_dependencies", () {
+      var contents = '''
+dependencies:
+  foo:
+    mock: ok
+dev_dependencies:
+  foo:
+    mock: ok
+''';
+      expectPubspecException(contents, (pubspec) => pubspec.dependencies);
+      expectPubspecException(contents, (pubspec) => pubspec.devDependencies);
+    });
+    test("throws if it dependes on itself", () {
+      expectPubspecException('''
+name: myapp
+dependencies:
+  myapp:
+    mock: ok
+''', (pubspec) => pubspec.dependencies);
+    });
+    test("throws if it has a dev dependency on itself", () {
+      expectPubspecException('''
+name: myapp
+dev_dependencies:
+  myapp:
+    mock: ok
+''', (pubspec) => pubspec.devDependencies);
+    });
+    test("throws if it has an override on itself", () {
+      expectPubspecException('''
+name: myapp
+dependency_overrides:
+  myapp:
+    mock: ok
+''', (pubspec) => pubspec.dependencyOverrides);
+    });
+    test("throws if the description isn't valid", () {
+      expectPubspecException('''
+dependencies:
+  foo:
+    mock: bad
+''', (pubspec) => pubspec.dependencies);
+    });
+    test("throws if dependency version is not a string", () {
+      expectPubspecException('''
+dependencies:
+  foo:
+    mock: ok
+    version: 1.2
+''', (pubspec) => pubspec.dependencies);
+    });
+    test("throws if version is not a version constraint", () {
+      expectPubspecException('''
+dependencies:
+  foo:
+    mock: ok
+    version: not constraint
+''', (pubspec) => pubspec.dependencies);
+    });
+    test("throws if 'name' is not a string", () {
+      expectPubspecException(
+          'name: [not, a, string]',
+          (pubspec) => pubspec.name);
+    });
+    test("throws if version is not a string", () {
+      expectPubspecException('version: 1.0', (pubspec) => pubspec.version);
+    });
+    test("throws if version is not a version", () {
+      expectPubspecException(
+          'version: not version',
+          (pubspec) => pubspec.version);
+    });
+    test("throws if transformers isn't a list", () {
+      expectPubspecException(
+          'transformers: "not list"',
+          (pubspec) => pubspec.transformers,
+          '"transformers" field must be a list');
+    });
+    test("throws if a transformer isn't a string or map", () {
+      expectPubspecException(
+          'transformers: [12]',
+          (pubspec) => pubspec.transformers,
+          'A transformer must be a string or map.');
+    });
+    test("throws if a transformer's configuration isn't a map", () {
+      expectPubspecException(
+          'transformers: [{pkg: 12}]',
+          (pubspec) => pubspec.transformers,
+          "A transformer's configuration must be a map.");
+    });
+    test(
+        "throws if a transformer's configuration contains an unknown "
+            "reserved key at the top level",
+        () {
+      expectPubspecException('''
+name: pkg
+transformers: [{pkg: {\$key: "value"}}]''',
+          (pubspec) => pubspec.transformers,
+          'Invalid transformer config: Unknown reserved field.');
+    });
+    test(
+        "doesn't throw if a transformer's configuration contains a "
+            "non-top-level key beginning with a dollar sign",
+        () {
+      var pubspec = new Pubspec.parse('''
+name: pkg
+transformers:
+- pkg: {outer: {\$inner: value}}
+''', sources);
+      var pkg = pubspec.transformers[0].single;
+      expect(pkg.configuration["outer"]["\$inner"], equals("value"));
+    });
+    test("throws if the \$include value is not a string or list", () {
+      expectPubspecException('''
+name: pkg
+transformers:
+- pkg: {\$include: 123}''',
+          (pubspec) => pubspec.transformers,
+          'Invalid transformer config: "\$include" field must be a string or ' 'list.');
+    });
+    test("throws if the \$include list contains a non-string", () {
+      expectPubspecException('''
+name: pkg
+transformers:
+- pkg: {\$include: ["ok", 123, "alright", null]}''',
+          (pubspec) => pubspec.transformers,
+          'Invalid transformer config: "\$include" field may contain only ' 'strings.');
+    });
+    test("throws if the \$exclude value is not a string or list", () {
+      expectPubspecException('''
+name: pkg
+transformers:
+- pkg: {\$exclude: 123}''',
+          (pubspec) => pubspec.transformers,
+          'Invalid transformer config: "\$exclude" field must be a string or ' 'list.');
+    });
+    test("throws if the \$exclude list contains a non-string", () {
+      expectPubspecException('''
+name: pkg
+transformers:
+- pkg: {\$exclude: ["ok", 123, "alright", null]}''',
+          (pubspec) => pubspec.transformers,
+          'Invalid transformer config: "\$exclude" field may contain only ' 'strings.');
+    });
+    test("throws if a transformer is not from a dependency", () {
+      expectPubspecException('''
+name: pkg
+transformers: [foo]
+''', (pubspec) => pubspec.transformers, '"foo" is not a dependency.');
+    });
+    test("allows a transformer from a normal dependency", () {
+      var pubspec = new Pubspec.parse('''
+name: pkg
+dependencies:
+  foo:
+    mock: ok
+transformers:
+- foo''', sources);
+      expect(pubspec.transformers[0].single.id.package, equals("foo"));
+    });
+    test("allows a transformer from a dev dependency", () {
+      var pubspec = new Pubspec.parse('''
+name: pkg
+dev_dependencies:
+  foo:
+    mock: ok
+transformers:
+- foo''', sources);
+      expect(pubspec.transformers[0].single.id.package, equals("foo"));
+    });
+    test("allows a transformer from a dependency override", () {
+      var pubspec = new Pubspec.parse('''
+name: pkg
+dependency_overrides:
+  foo:
+    mock: ok
+transformers:
+- foo''', sources);
+      expect(pubspec.transformers[0].single.id.package, equals("foo"));
+    });
+    test("allows comment-only files", () {
+      var pubspec = new Pubspec.parse('''
+# No external dependencies yet
+# Including for completeness
+# ...and hoping the spec expands to include details about author, version, etc
+# See http://www.dartlang.org/docs/pub-package-manager/ for details
+''', sources);
+      expect(pubspec.version, equals(Version.none));
+      expect(pubspec.dependencies, isEmpty);
+    });
+    group("environment", () {
+      test("defaults to any SDK constraint if environment is omitted", () {
+        var pubspec = new Pubspec.parse('', sources);
+        expect(pubspec.environment.sdkVersion, equals(VersionConstraint.any));
+      });
+      test("allows an empty environment map", () {
+        var pubspec = new Pubspec.parse('''
+environment:
+''', sources);
+        expect(pubspec.environment.sdkVersion, equals(VersionConstraint.any));
+      });
+      test("throws if the environment value isn't a map", () {
+        expectPubspecException(
+            'environment: []',
+            (pubspec) => pubspec.environment);
+      });
+      test("allows a version constraint for the sdk", () {
+        var pubspec = new Pubspec.parse('''
+environment:
+  sdk: ">=1.2.3 <2.3.4"
+''', sources);
+        expect(
+            pubspec.environment.sdkVersion,
+            equals(new VersionConstraint.parse(">=1.2.3 <2.3.4")));
+      });
+      test("throws if the sdk isn't a string", () {
+        expectPubspecException(
+            'environment: {sdk: []}',
+            (pubspec) => pubspec.environment);
+        expectPubspecException(
+            'environment: {sdk: 1.0}',
+            (pubspec) => pubspec.environment);
+      });
+      test("throws if the sdk isn't a valid version constraint", () {
+        expectPubspecException(
+            'environment: {sdk: "oopies"}',
+            (pubspec) => pubspec.environment);
+      });
+    });
+    group("publishTo", () {
+      test("defaults to null if omitted", () {
+        var pubspec = new Pubspec.parse('', sources);
+        expect(pubspec.publishTo, isNull);
+      });
+      test("throws if not a string", () {
+        expectPubspecException(
+            'publish_to: 123',
+            (pubspec) => pubspec.publishTo);
+      });
+      test("allows a URL", () {
+        var pubspec = new Pubspec.parse('''
+publish_to: http://example.com
+''', sources);
+        expect(pubspec.publishTo, equals("http://example.com"));
+      });
+      test("allows none", () {
+        var pubspec = new Pubspec.parse('''
+publish_to: none
+''', sources);
+        expect(pubspec.publishTo, equals("none"));
+      });
+      test("throws on other strings", () {
+        expectPubspecException(
+            'publish_to: http://bad.url:not-port',
+            (pubspec) => pubspec.publishTo);
+      });
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/real_version_test.dart b/sdk/lib/_internal/pub_generated/test/real_version_test.dart
new file mode 100644
index 0000000..8a624f4
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/real_version_test.dart
@@ -0,0 +1,20 @@
+library pub_tests;
+import 'dart:io';
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_process.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import '../lib/src/exit_codes.dart' as exit_codes;
+import '../lib/src/sdk.dart' as sdk;
+import 'test_pub.dart';
+main() {
+  initConfig();
+  integration('parse the real SDK "version" file', () {
+    var pubPath = path.join(
+        sdk.rootDirectory,
+        'bin',
+        Platform.operatingSystem == "windows" ? "pub.bat" : "pub");
+    var pub = new ScheduledProcess.start(pubPath, ['version']);
+    pub.stdout.expect(startsWith("Pub"));
+    pub.shouldExit(exit_codes.SUCCESS);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/app_can_read_from_stdin_test.dart b/sdk/lib/_internal/pub_generated/test/run/app_can_read_from_stdin_test.dart
new file mode 100644
index 0000000..e61a51d
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/app_can_read_from_stdin_test.dart
@@ -0,0 +1,30 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+const SCRIPT = """
+import 'dart:io';
+
+main() {
+  print("started");
+  var line1 = stdin.readLineSync();
+  print("between");
+  var line2 = stdin.readLineSync();
+  print(line1);
+  print(line2);
+}
+""";
+main() {
+  initConfig();
+  integration('the spawned application can read from stdin', () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("bin", [d.file("script.dart", SCRIPT)])]).create();
+    var pub = pubRun(args: ["script"]);
+    pub.stdout.expect("started");
+    pub.writeLine("first");
+    pub.stdout.expect("between");
+    pub.writeLine("second");
+    pub.stdout.expect("first");
+    pub.stdout.expect("second");
+    pub.shouldExit(0);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/displays_transformer_logs_test.dart b/sdk/lib/_internal/pub_generated/test/run/displays_transformer_logs_test.dart
new file mode 100644
index 0000000..e8a182e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/displays_transformer_logs_test.dart
@@ -0,0 +1,63 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+const SCRIPT = """
+import "package:myapp/lib.dart";
+main() {
+  callLib();
+}
+""";
+const LIB = """
+callLib() {
+  print("lib");
+}
+""";
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class LoggingTransformer extends Transformer implements LazyTransformer {
+  LoggingTransformer.asPlugin();
+
+  String get allowedExtensions => '.dart';
+
+  void apply(Transform transform) {
+    transform.logger.info('\${transform.primaryInput.id}.');
+    transform.logger.warning('\${transform.primaryInput.id}.');
+  }
+
+  void declareOutputs(DeclaringTransform transform) {
+    // TODO(rnystrom): Remove this when #19408 is fixed.
+    transform.declareOutput(transform.primaryId);
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration('displays transformer log messages', () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.file("lib.dart", LIB),
+                    d.dir("src", [d.file("transformer.dart", TRANSFORMER)])]),
+            d.dir("bin", [d.file("script.dart", SCRIPT)])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var pub = pubRun(args: ["script"]);
+      pub.stdout.expect("[Info from Logging]:");
+      pub.stdout.expect("myapp|bin/script.dart.");
+      pub.stderr.expect("[Warning from Logging]:");
+      pub.stderr.expect("myapp|bin/script.dart.");
+      pub.stdout.expect("[Info from Logging]:");
+      pub.stdout.expect("myapp|lib/lib.dart.");
+      pub.stderr.expect("[Warning from Logging]:");
+      pub.stderr.expect("myapp|lib/lib.dart.");
+      pub.stdout.expect("lib");
+      pub.shouldExit();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/does_not_run_on_transformer_error_test.dart b/sdk/lib/_internal/pub_generated/test/run/does_not_run_on_transformer_error_test.dart
new file mode 100644
index 0000000..b8b0f3e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/does_not_run_on_transformer_error_test.dart
@@ -0,0 +1,42 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+const SCRIPT = """
+main() {
+  print("should not get here!");
+}
+""";
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class FailingTransformer extends Transformer {
+  FailingTransformer.asPlugin();
+
+  String get allowedExtensions => '.dart';
+
+  void apply(Transform transform) {
+    // Don't run on the transformer itself.
+    if (transform.primaryInput.id.path.startsWith("lib")) return;
+    transform.logger.error('\${transform.primaryInput.id}.');
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration('does not run if a transformer has an error', () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", TRANSFORMER)])]),
+            d.dir("bin", [d.file("script.dart", SCRIPT)])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var pub = pubRun(args: ["script"]);
+      pub.stderr.expect("[Error from Failing]:");
+      pub.stderr.expect("myapp|bin/script.dart.");
+      pub.shouldExit();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/errors_if_no_executable_is_given_test.dart b/sdk/lib/_internal/pub_generated/test/run/errors_if_no_executable_is_given_test.dart
new file mode 100644
index 0000000..9b12e3f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/errors_if_no_executable_is_given_test.dart
@@ -0,0 +1,17 @@
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('Errors if the executable does not exist.', () {
+    d.dir(appPath, [d.appPubspec()]).create();
+    schedulePub(args: ["run"], error: """
+Must specify an executable to run.
+
+Usage: pub run <executable> [args...]
+-h, --help    Print usage information for this command.
+
+Run "pub help" to see global options.
+""", exitCode: exit_codes.USAGE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/errors_if_only_transitive_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/run/errors_if_only_transitive_dependency_test.dart
new file mode 100644
index 0000000..19480f5
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/errors_if_only_transitive_dependency_test.dart
@@ -0,0 +1,28 @@
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('Errors if the script is in a non-immediate dependency.', () {
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("bin", [d.file("bar.dart", "main() => print('foobar');")])]).create();
+    d.dir("bar", [d.libPubspec("bar", "1.0.0", deps: {
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    d.dir(appPath, [d.appPubspec({
+        "bar": {
+          "path": "../bar"
+        }
+      })]).create();
+    pubGet();
+    var pub = pubRun(args: ["foo:script"]);
+    pub.stderr.expect('Package "foo" is not an immediate dependency.');
+    pub.stderr.expect('Cannot run executables in transitive dependencies.');
+    pub.shouldExit(exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/errors_if_path_in_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/run/errors_if_path_in_dependency_test.dart
new file mode 100644
index 0000000..1558cdc
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/errors_if_path_in_dependency_test.dart
@@ -0,0 +1,24 @@
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      'Errors if the executable is in a subdirectory in a ' 'dependency.',
+      () {
+    d.dir("foo", [d.libPubspec("foo", "1.0.0")]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    schedulePub(args: ["run", "foo:sub/dir"], error: """
+Cannot run an executable in a subdirectory of a dependency.
+
+Usage: pub run <executable> [args...]
+-h, --help    Print usage information for this command.
+
+Run "pub help" to see global options.
+""", exitCode: exit_codes.USAGE);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/includes_parent_directories_of_entrypoint_test.dart b/sdk/lib/_internal/pub_generated/test/run/includes_parent_directories_of_entrypoint_test.dart
new file mode 100644
index 0000000..b2b654a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/includes_parent_directories_of_entrypoint_test.dart
@@ -0,0 +1,33 @@
+import 'package:path/path.dart' as path;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+const SCRIPT = r"""
+import '../../a.dart';
+import '../b.dart';
+main() {
+  print("$a $b");
+}
+""";
+main() {
+  initConfig();
+  integration(
+      'allows assets in parent directories of the entrypoint to be' 'accessed',
+      () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "tool",
+                [
+                    d.file("a.dart", "var a = 'a';"),
+                    d.dir(
+                        "a",
+                        [
+                            d.file("b.dart", "var b = 'b';"),
+                            d.dir("b", [d.file("app.dart", SCRIPT)])])])]).create();
+    var pub = pubRun(args: [path.join("tool", "a", "b", "app")]);
+    pub.stdout.expect("a b");
+    pub.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/nonexistent_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/run/nonexistent_dependency_test.dart
new file mode 100644
index 0000000..c22838e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/nonexistent_dependency_test.dart
@@ -0,0 +1,13 @@
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('Errors if the script is in an unknown package.', () {
+    d.dir(appPath, [d.appPubspec()]).create();
+    var pub = pubRun(args: ["foo:script"]);
+    pub.stderr.expect(
+        'Could not find package "foo". Did you forget to add a ' 'dependency?');
+    pub.shouldExit(exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/nonexistent_script_in_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/run/nonexistent_script_in_dependency_test.dart
new file mode 100644
index 0000000..8893479
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/nonexistent_script_in_dependency_test.dart
@@ -0,0 +1,20 @@
+import 'package:path/path.dart' as p;
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('Errors if the script in a dependency does not exist.', () {
+    d.dir("foo", [d.libPubspec("foo", "1.0.0")]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    pubGet();
+    var pub = pubRun(args: ["foo:script"]);
+    pub.stderr.expect(
+        "Could not find ${p.join("bin", "script.dart")} in package foo.");
+    pub.shouldExit(exit_codes.NO_INPUT);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/nonexistent_script_test.dart b/sdk/lib/_internal/pub_generated/test/run/nonexistent_script_test.dart
new file mode 100644
index 0000000..6fd783e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/nonexistent_script_test.dart
@@ -0,0 +1,13 @@
+import 'package:path/path.dart' as p;
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('Errors if the script does not exist.', () {
+    d.dir(appPath, [d.appPubspec()]).create();
+    var pub = pubRun(args: ["script"]);
+    pub.stderr.expect("Could not find ${p.join("bin", "script.dart")}.");
+    pub.shouldExit(exit_codes.NO_INPUT);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/passes_along_arguments_test.dart b/sdk/lib/_internal/pub_generated/test/run/passes_along_arguments_test.dart
new file mode 100644
index 0000000..ad0084d
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/passes_along_arguments_test.dart
@@ -0,0 +1,18 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+const SCRIPT = """
+main(List<String> args) {
+  print(args.join(" "));
+}
+""";
+main() {
+  initConfig();
+  integration('passes arguments to the spawned script', () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("bin", [d.file("args.dart", SCRIPT)])]).create();
+    var pub = pubRun(args: ["args", "--verbose", "-m", "--", "help"]);
+    pub.stdout.expect("--verbose -m -- help");
+    pub.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/runs_a_generated_script_test.dart b/sdk/lib/_internal/pub_generated/test/run/runs_a_generated_script_test.dart
new file mode 100644
index 0000000..3adbb95
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/runs_a_generated_script_test.dart
@@ -0,0 +1,42 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class DartTransformer extends Transformer {
+  DartTransformer.asPlugin();
+
+  String get allowedExtensions => '.in';
+
+  void apply(Transform transform) {
+    transform.addOutput(new Asset.fromString(
+        new AssetId("myapp", "bin/script.dart"),
+        "void main() => print('generated');"));
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration('runs a script generated from scratch by a transformer', () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.dir(
+                        "src",
+                        [
+                            d.file("transformer.dart", TRANSFORMER),
+                            d.file("primary.in", "")])])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var pub = pubRun(args: ["script"]);
+      pub.stdout.expect("generated");
+      pub.shouldExit();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/runs_app_in_directory_in_entrypoint_test.dart b/sdk/lib/_internal/pub_generated/test/run/runs_app_in_directory_in_entrypoint_test.dart
new file mode 100644
index 0000000..4971547
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/runs_app_in_directory_in_entrypoint_test.dart
@@ -0,0 +1,23 @@
+import 'package:path/path.dart' as path;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('runs a Dart application in the entrypoint package', () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "tool",
+                [
+                    d.file("app.dart", "main() => print('tool');"),
+                    d.dir("sub", [d.file("app.dart", "main() => print('sub');")])])]).create();
+    var pub = pubRun(args: [path.join("tool", "app")]);
+    pub.stdout.expect("tool");
+    pub.shouldExit();
+    pub = pubRun(args: [path.join("tool", "sub", "app")]);
+    pub.stdout.expect("sub");
+    pub.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/runs_app_in_entrypoint_test.dart b/sdk/lib/_internal/pub_generated/test/run/runs_app_in_entrypoint_test.dart
new file mode 100644
index 0000000..6ec3e8c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/runs_app_in_entrypoint_test.dart
@@ -0,0 +1,23 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+const SCRIPT = """
+import 'dart:io';
+
+main() {
+  stdout.writeln("stdout output");
+  stderr.writeln("stderr output");
+  exitCode = 123;
+}
+""";
+main() {
+  initConfig();
+  integration('runs a Dart application in the entrypoint package', () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("bin", [d.file("script.dart", SCRIPT)])]).create();
+    var pub = pubRun(args: ["script"]);
+    pub.stdout.expect("stdout output");
+    pub.stderr.expect("stderr output");
+    pub.shouldExit(123);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/runs_named_app_in_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/run/runs_named_app_in_dependency_test.dart
new file mode 100644
index 0000000..98e8cac
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/runs_named_app_in_dependency_test.dart
@@ -0,0 +1,21 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('runs a named Dart application in a dependency', () {
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("bin", [d.file("bar.dart", "main() => print('foobar');")])]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    pubGet();
+    var pub = pubRun(args: ["foo:bar"]);
+    pub.stdout.expect("foobar");
+    pub.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/runs_named_app_in_dev_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/run/runs_named_app_in_dev_dependency_test.dart
new file mode 100644
index 0000000..6ac8336
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/runs_named_app_in_dev_dependency_test.dart
@@ -0,0 +1,24 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration('runs a named Dart application in a dev dependency', () {
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("bin", [d.file("bar.dart", "main() => print('foobar');")])]).create();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dev_dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        }
+      })]).create();
+    pubGet();
+    var pub = pubRun(args: ["foo:bar"]);
+    pub.stdout.expect("foobar");
+    pub.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/runs_the_script_in_checked_mode_test.dart b/sdk/lib/_internal/pub_generated/test/run/runs_the_script_in_checked_mode_test.dart
new file mode 100644
index 0000000..3c6969b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/runs_the_script_in_checked_mode_test.dart
@@ -0,0 +1,20 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+const SCRIPT = """
+main() {
+  int a = true;
+}
+""";
+main() {
+  initConfig();
+  integration('runs the script in checked mode by default', () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("bin", [d.file("script.dart", SCRIPT)])]).create();
+    schedulePub(
+        args: ["run", "script"],
+        error: contains("'bool' is not a subtype of type 'int' of 'a'"),
+        exitCode: 255);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/run/runs_transformer_in_entrypoint_test.dart b/sdk/lib/_internal/pub_generated/test/run/runs_transformer_in_entrypoint_test.dart
new file mode 100644
index 0000000..e4a433b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/run/runs_transformer_in_entrypoint_test.dart
@@ -0,0 +1,28 @@
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const SCRIPT = """
+const TOKEN = "hi";
+main() {
+  print(TOKEN);
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration('runs transformers in the entrypoint package', () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir(
+                "lib",
+                [d.dir("src", [d.file("transformer.dart", dartTransformer("transformed"))])]),
+            d.dir("bin", [d.file("hi.dart", SCRIPT)])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var pub = pubRun(args: ["hi"]);
+      pub.stdout.expect("(hi, transformed)");
+      pub.shouldExit();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/404_page_test.dart b/sdk/lib/_internal/pub_generated/test/serve/404_page_test.dart
new file mode 100644
index 0000000..27b5929
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/404_page_test.dart
@@ -0,0 +1,28 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.dir(appPath, [d.appPubspec()]).create();
+  });
+  integration("the 404 page describes the missing asset", () {
+    pubServe();
+    scheduleRequest("packages/foo/missing.txt").then((response) {
+      expect(response.statusCode, equals(404));
+      expect(response.body, contains("foo"));
+      expect(response.body, contains("missing.txt"));
+    });
+    endPubServe();
+  });
+  integration("the 404 page describes the error", () {
+    pubServe();
+    scheduleRequest("packages").then((response) {
+      expect(response.statusCode, equals(404));
+      expect(response.body, contains('&quot;&#x2F;packages&quot;'));
+    });
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/allows_arbitrary_modes_test.dart b/sdk/lib/_internal/pub_generated/test/serve/allows_arbitrary_modes_test.dart
new file mode 100644
index 0000000..591463a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/allows_arbitrary_modes_test.dart
@@ -0,0 +1,40 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class ModeTransformer extends Transformer {
+  final BarbackSettings settings;
+  ModeTransformer.asPlugin(this.settings);
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    return new Future.value().then((_) {
+      var id = transform.primaryInput.id.changeExtension(".out");
+      transform.addOutput(new Asset.fromString(id, settings.mode.toString()));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("allows user-defined mode names", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", TRANSFORMER)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe(args: ["--mode", "depeche"]);
+      requestShouldSucceed("foo.out", "depeche");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/defaults_to_debug_mode_test.dart b/sdk/lib/_internal/pub_generated/test/serve/defaults_to_debug_mode_test.dart
new file mode 100644
index 0000000..bb2216d
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/defaults_to_debug_mode_test.dart
@@ -0,0 +1,40 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class ModeTransformer extends Transformer {
+  final BarbackSettings settings;
+  ModeTransformer.asPlugin(this.settings);
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    return new Future.value().then((_) {
+      var id = transform.primaryInput.id.changeExtension(".out");
+      transform.addOutput(new Asset.fromString(id, settings.mode.toString()));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("defaults to debug mode", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", TRANSFORMER)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("foo.out", "debug");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/does_not_crash_if_an_unused_dart_file_has_a_syntax_error_test.dart b/sdk/lib/_internal/pub_generated/test/serve/does_not_crash_if_an_unused_dart_file_has_a_syntax_error_test.dart
new file mode 100644
index 0000000..a3634de
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/does_not_crash_if_an_unused_dart_file_has_a_syntax_error_test.dart
@@ -0,0 +1,28 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("doesn't crash if an unused .dart file has a syntax error", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.dir(
+                        "src",
+                        [
+                            d.file("transformer.dart", REWRITE_TRANSFORMER),
+                            d.file("unused.dart", "(*&^#@")])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var server = pubServe();
+      requestShouldSucceed("foo.out", "foo.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/does_not_get_first_if_a_dependency_is_removed_test.dart b/sdk/lib/_internal/pub_generated/test/serve/does_not_get_first_if_a_dependency_is_removed_test.dart
new file mode 100644
index 0000000..394d009
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/does_not_get_first_if_a_dependency_is_removed_test.dart
@@ -0,0 +1,20 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("does not get if a dependency is removed", () {
+    d.dir("foo", [d.libPubspec("foo", "0.0.1"), d.libDir("foo")]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    pubGet();
+    d.dir(appPath, [d.appPubspec()]).create();
+    pubServe(shouldGetFirst: false);
+    requestShouldSucceed("packages/foo/foo.dart", 'main() => "foo";');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/does_not_get_first_if_git_url_did_not_change_test.dart b/sdk/lib/_internal/pub_generated/test/serve/does_not_get_first_if_git_url_did_not_change_test.dart
new file mode 100644
index 0000000..f59bf13
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/does_not_get_first_if_git_url_did_not_change_test.dart
@@ -0,0 +1,19 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("does not get first if a git dependency's url is unchanged", () {
+    d.git('foo.git', [d.libPubspec('foo', '1.0.0'), d.libDir("foo")]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet();
+    pubServe(shouldGetFirst: false);
+    requestShouldSucceed("packages/foo/foo.dart", 'main() => "foo";');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/does_not_get_first_if_locked_matches_override_test.dart b/sdk/lib/_internal/pub_generated/test/serve/does_not_get_first_if_locked_matches_override_test.dart
new file mode 100644
index 0000000..3b77876
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/does_not_get_first_if_locked_matches_override_test.dart
@@ -0,0 +1,26 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("does not get if the locked version matches the override", () {
+    d.dir("foo", [d.libPubspec("foo", "0.0.1"), d.libDir("foo")]).create();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": "any"
+        },
+        "dependency_overrides": {
+          "foo": {
+            "path": "../foo",
+            "version": ">=0.0.1"
+          }
+        }
+      })]).create();
+    pubGet();
+    pubServe(shouldGetFirst: false);
+    requestShouldSucceed("packages/foo/foo.dart", 'main() => "foo";');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/does_not_get_first_if_locked_version_matches_test.dart b/sdk/lib/_internal/pub_generated/test/serve/does_not_get_first_if_locked_version_matches_test.dart
new file mode 100644
index 0000000..d2abc8c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/does_not_get_first_if_locked_version_matches_test.dart
@@ -0,0 +1,29 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      "does not get if the locked version of a dependency is allowed "
+          "by the pubspec's constraint",
+      () {
+    d.dir("foo", [d.libPubspec("foo", "0.0.1"), d.libDir("foo")]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo",
+          "version": ">=0.0.1"
+        }
+      })]).create();
+    pubGet();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo",
+          "version": "<2.0.0"
+        }
+      })]).create();
+    pubServe(shouldGetFirst: false);
+    requestShouldSucceed("packages/foo/foo.dart", 'main() => "foo";');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/does_not_serve_dart_in_release_test.dart b/sdk/lib/_internal/pub_generated/test/serve/does_not_serve_dart_in_release_test.dart
new file mode 100644
index 0000000..007f874
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/does_not_serve_dart_in_release_test.dart
@@ -0,0 +1,32 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("does not serve .dart files in release mode", () {
+    d.dir(
+        "foo",
+        [d.libPubspec("foo", "0.0.1"), d.dir("lib", [d.file("foo.dart", """
+            library foo;
+            foo() => 'foo';
+            """)])]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      }),
+          d.dir("lib", [d.file("lib.dart", "lib() => print('hello');")]),
+          d.dir("web", [d.file("file.dart", """
+            import 'package:foo/foo.dart';
+            main() => print('hello');
+            """),
+            d.dir("sub", [d.file("sub.dart", "main() => 'foo';")])])]).create();
+    pubServe(shouldGetFirst: true, args: ["--mode", "release"]);
+    requestShould404("file.dart");
+    requestShould404("packages/myapp/lib.dart");
+    requestShould404("packages/foo/foo.dart");
+    requestShould404("sub/sub.dart");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/does_not_serve_gitignored_assets_in_a_path_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/serve/does_not_serve_gitignored_assets_in_a_path_dependency_test.dart
new file mode 100644
index 0000000..ce55ae3
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/does_not_serve_gitignored_assets_in_a_path_dependency_test.dart
@@ -0,0 +1,31 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("doesn't serve .gitignored assets in a path dependency", () {
+    ensureGit();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    d.git(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir(
+                "lib",
+                [
+                    d.file("outer.txt", "outer contents"),
+                    d.file("visible.txt", "visible"),
+                    d.dir("dir", [d.file("inner.txt", "inner contents")])]),
+            d.file(".gitignore", "/lib/outer.txt\n/lib/dir")]).create();
+    pubServe(shouldGetFirst: true);
+    requestShould404("packages/foo/outer.txt");
+    requestShould404("packages/foo/dir/inner.txt");
+    requestShouldSucceed("packages/foo/visible.txt", "visible");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/does_not_serve_gitignored_assets_test.dart b/sdk/lib/_internal/pub_generated/test/serve/does_not_serve_gitignored_assets_test.dart
new file mode 100644
index 0000000..a49736a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/does_not_serve_gitignored_assets_test.dart
@@ -0,0 +1,24 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("doesn't serve .gitignored assets", () {
+    ensureGit();
+    d.git(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [
+                    d.file("outer.txt", "outer contents"),
+                    d.dir("dir", [d.file("inner.txt", "inner contents")])]),
+            d.file(".gitignore", "/web/outer.txt\n/web/dir")]).create();
+    pubServe();
+    requestShould404("outer.txt");
+    requestShould404("dir/inner.txt");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/does_not_serve_hidden_assets_test.dart b/sdk/lib/_internal/pub_generated/test/serve/does_not_serve_hidden_assets_test.dart
new file mode 100644
index 0000000..32b503e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/does_not_serve_hidden_assets_test.dart
@@ -0,0 +1,22 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("doesn't serve hidden assets", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [
+                    d.file(".outer.txt", "outer contents"),
+                    d.dir(".dir", [d.file("inner.txt", "inner contents")])])]).create();
+    pubServe();
+    requestShould404(".outer.txt");
+    requestShould404(".dir/inner.txt");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/does_not_watch_compiled_js_files_test.dart b/sdk/lib/_internal/pub_generated/test/serve/does_not_watch_compiled_js_files_test.dart
new file mode 100644
index 0000000..6d39833
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/does_not_watch_compiled_js_files_test.dart
@@ -0,0 +1,31 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("does not watch changes to compiled JS files in the package", () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("index.html", "body")])]).create();
+    pubServe();
+    waitForBuildSuccess();
+    requestShouldSucceed("index.html", "body");
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                "web",
+                [
+                    d.file('file.dart', 'void main() => print("hello");'),
+                    d.file("other.dart.js", "should be ignored"),
+                    d.file("other.dart.js.map", "should be ignored"),
+                    d.file("other.dart.precompiled.js", "should be ignored")])]).create();
+    waitForBuildSuccess();
+    requestShouldSucceed("file.dart", 'void main() => print("hello");');
+    requestShould404("other.dart.js");
+    requestShould404("other.dart.js.map");
+    requestShould404("other.dart.precompiled.js");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_dependency_added_test.dart b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_dependency_added_test.dart
new file mode 100644
index 0000000..29a482b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_dependency_added_test.dart
@@ -0,0 +1,20 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("gets first if a dependency is not in the lock file", () {
+    d.dir("foo", [d.libPubspec("foo", "0.0.1"), d.libDir("foo")]).create();
+    d.dir(appPath, [d.appPubspec()]).create();
+    pubGet();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    pubServe(shouldGetFirst: true);
+    requestShouldSucceed("packages/foo/foo.dart", 'main() => "foo";');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_dependency_is_not_installed_test.dart b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_dependency_is_not_installed_test.dart
new file mode 100644
index 0000000..ec3e7ee
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_dependency_is_not_installed_test.dart
@@ -0,0 +1,21 @@
+library pub_tests;
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("gets first if a dependency is not installed", () {
+    servePackages((builder) => builder.serve("foo", "1.2.3"));
+    d.appDir({
+      "foo": "1.2.3"
+    }).create();
+    pubGet();
+    schedule(() => deleteEntry(path.join(sandboxDir, cachePath)));
+    pubServe(shouldGetFirst: true);
+    requestShouldSucceed("packages/foo/foo.dart", 'main() => "foo 1.2.3";');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_dependency_version_changed_test.dart b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_dependency_version_changed_test.dart
new file mode 100644
index 0000000..54878d4
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_dependency_version_changed_test.dart
@@ -0,0 +1,30 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      "gets first if a dependency's version doesn't match the one in "
+          "the lock file",
+      () {
+    d.dir("foo", [d.libPubspec("foo", "0.0.1"), d.libDir("foo")]).create();
+    d.appDir({
+      "foo": {
+        "path": "../foo",
+        "version": "0.0.1"
+      }
+    }).create();
+    pubGet();
+    d.appDir({
+      "foo": {
+        "path": "../foo",
+        "version": "0.0.2"
+      }
+    }).create();
+    d.dir("foo", [d.libPubspec("foo", "0.0.2"), d.libDir("foo")]).create();
+    pubServe(shouldGetFirst: true);
+    requestShouldSucceed("packages/foo/foo.dart", 'main() => "foo";');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_dev_dependency_changed_test.dart b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_dev_dependency_changed_test.dart
new file mode 100644
index 0000000..d9975b3
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_dev_dependency_changed_test.dart
@@ -0,0 +1,24 @@
+library pub_tests;
+import 'dart:convert';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("gets first if a dev dependency has changed", () {
+    d.dir("foo", [d.libPubspec("foo", "0.0.1"), d.libDir("foo")]).create();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dev_dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        }
+      }), d.file("pubspec.lock", JSON.encode({
+        'packages': {}
+      }))]).create();
+    pubServe(shouldGetFirst: true);
+    requestShouldSucceed("packages/foo/foo.dart", 'main() => "foo";');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_git_ref_changed_test.dart b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_git_ref_changed_test.dart
new file mode 100644
index 0000000..5c6b3f8
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_git_ref_changed_test.dart
@@ -0,0 +1,40 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      "gets first if a git dependency's ref doesn't match the one in "
+          "the lock file",
+      () {
+    var repo =
+        d.git('foo.git', [d.libDir('foo', 'before'), d.libPubspec('foo', '1.0.0')]);
+    repo.create();
+    var commit1 = repo.revParse('HEAD');
+    d.git(
+        'foo.git',
+        [d.libDir('foo', 'after'), d.libPubspec('foo', '1.0.0')]).commit();
+    var commit2 = repo.revParse('HEAD');
+    d.appDir({
+      "foo": {
+        "git": {
+          "url": "../foo.git",
+          "ref": commit1
+        }
+      }
+    }).create();
+    pubGet();
+    d.appDir({
+      "foo": {
+        "git": {
+          "url": "../foo.git",
+          "ref": commit2
+        }
+      }
+    }).create();
+    pubServe(shouldGetFirst: true);
+    requestShouldSucceed("packages/foo/foo.dart", 'main() => "after";');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_git_url_changed_test.dart b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_git_url_changed_test.dart
new file mode 100644
index 0000000..cac40c7
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_git_url_changed_test.dart
@@ -0,0 +1,32 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      "gets first if a git dependency's url doesn't match the one in "
+          "the lock file",
+      () {
+    d.git(
+        "foo-before.git",
+        [d.libPubspec("foo", "1.0.0"), d.libDir("foo", "before")]).create();
+    d.git(
+        "foo-after.git",
+        [d.libPubspec("foo", "1.0.0"), d.libDir("foo", "after")]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo-before.git"
+      }
+    }).create();
+    pubGet();
+    d.appDir({
+      "foo": {
+        "git": "../foo-after.git"
+      }
+    }).create();
+    pubServe(shouldGetFirst: true);
+    requestShouldSucceed("packages/foo/foo.dart", 'main() => "after";');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_no_lockfile_test.dart b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_no_lockfile_test.dart
new file mode 100644
index 0000000..127f89c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_no_lockfile_test.dart
@@ -0,0 +1,18 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("gets first if there is no lockfile", () {
+    d.dir("foo", [d.libPubspec("foo", "0.0.1"), d.libDir("foo")]).create();
+    d.appDir({
+      "foo": {
+        "path": "../foo"
+      }
+    }).create();
+    pubServe(shouldGetFirst: true);
+    requestShouldSucceed("packages/foo/foo.dart", 'main() => "foo";');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_path_dependency_changed_test.dart b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_path_dependency_changed_test.dart
new file mode 100644
index 0000000..1789edb
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_path_dependency_changed_test.dart
@@ -0,0 +1,32 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      "gets first if a path dependency's path doesn't match the one in "
+          "the lock file",
+      () {
+    d.dir(
+        "foo-before",
+        [d.libPubspec("foo", "0.0.1"), d.libDir("foo", "before")]).create();
+    d.dir(
+        "foo-after",
+        [d.libPubspec("foo", "0.0.1"), d.libDir("foo", "after")]).create();
+    d.appDir({
+      "foo": {
+        "path": "../foo-before"
+      }
+    }).create();
+    pubGet();
+    d.appDir({
+      "foo": {
+        "path": "../foo-after"
+      }
+    }).create();
+    pubServe(shouldGetFirst: true);
+    requestShouldSucceed("packages/foo/foo.dart", 'main() => "after";');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_source_changed_test.dart b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_source_changed_test.dart
new file mode 100644
index 0000000..9a2ef68
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_source_changed_test.dart
@@ -0,0 +1,29 @@
+library pub_tests;
+import 'dart:convert';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      "gets first if a dependency's source doesn't match the one in " "the lock file",
+      () {
+    d.dir("foo", [d.libPubspec("foo", "0.0.1"), d.libDir("foo")]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      }), d.file("pubspec.lock", JSON.encode({
+        'packages': {
+          'foo': {
+            'version': '0.0.0',
+            'source': 'hosted',
+            'description': 'foo'
+          }
+        }
+      }))]).create();
+    pubServe(shouldGetFirst: true);
+    requestShouldSucceed("packages/foo/foo.dart", 'main() => "foo";');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_transitive_dependency_is_not_installed_test.dart b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_transitive_dependency_is_not_installed_test.dart
new file mode 100644
index 0000000..4ffa350
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/gets_first_if_transitive_dependency_is_not_installed_test.dart
@@ -0,0 +1,26 @@
+library pub_tests;
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("gets first if a transitive dependency is not installed", () {
+    servePackages((builder) => builder.serve("bar", "1.2.3"));
+    d.dir("foo", [d.libPubspec("foo", "1.0.0", deps: {
+        "bar": "any"
+      }), d.libDir("foo")]).create();
+    d.appDir({
+      "foo": {
+        "path": "../foo"
+      }
+    }).create();
+    pubGet();
+    schedule(() => deleteEntry(path.join(sandboxDir, cachePath)));
+    pubServe(shouldGetFirst: true);
+    requestShouldSucceed("packages/bar/bar.dart", 'main() => "bar 1.2.3";');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/invalid_method_test.dart b/sdk/lib/_internal/pub_generated/test/serve/invalid_method_test.dart
new file mode 100644
index 0000000..ef784e2
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/invalid_method_test.dart
@@ -0,0 +1,15 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("responds with a 405 for an invalid method", () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("index.html", "<body>")])]).create();
+    pubServe();
+    postShould405("index.html");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/invalid_urls_test.dart b/sdk/lib/_internal/pub_generated/test/serve/invalid_urls_test.dart
new file mode 100644
index 0000000..dabb801
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/invalid_urls_test.dart
@@ -0,0 +1,28 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("responds with a 404 on incomplete special URLs", () {
+    d.dir("foo", [d.libPubspec("foo", "0.0.1")]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      }),
+          d.dir("lib", [d.file("packages")]),
+          d.dir("web", [d.file("packages")])]).create();
+    pubGet();
+    pubServe();
+    requestShould404("packages");
+    requestShould404("packages/");
+    requestShould404("packages/myapp");
+    requestShould404("packages/myapp/");
+    requestShould404("packages/foo");
+    requestShould404("packages/foo/");
+    requestShould404("packages/unknown");
+    requestShould404("packages/unknown/");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/missing_asset_test.dart b/sdk/lib/_internal/pub_generated/test/serve/missing_asset_test.dart
new file mode 100644
index 0000000..f1b901e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/missing_asset_test.dart
@@ -0,0 +1,15 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("responds with a 404 for missing assets", () {
+    d.dir(appPath, [d.appPubspec()]).create();
+    pubServe();
+    requestShould404("index.html");
+    requestShould404("packages/myapp/nope.dart");
+    requestShould404("dir/packages/myapp/nope.dart");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/missing_dependency_file_test.dart b/sdk/lib/_internal/pub_generated/test/serve/missing_dependency_file_test.dart
new file mode 100644
index 0000000..eb6c231
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/missing_dependency_file_test.dart
@@ -0,0 +1,20 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("responds with a 404 for a missing files in dependencies", () {
+    d.dir("foo", [d.libPubspec("foo", "0.0.1")]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    pubGet();
+    pubServe();
+    requestShould404("packages/foo/nope.dart");
+    requestShould404("dir/packages/foo/nope.dart");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/missing_file_test.dart b/sdk/lib/_internal/pub_generated/test/serve/missing_file_test.dart
new file mode 100644
index 0000000..9465bdc
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/missing_file_test.dart
@@ -0,0 +1,27 @@
+library pub_tests;
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("responds with a 404 for missing source files", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir("lib", [d.file("nope.dart", "nope")]),
+            d.dir("web", [d.file("index.html", "<body>")])]).create();
+    pubServe();
+    schedule(() {
+      deleteEntry(path.join(sandboxDir, appPath, "lib", "nope.dart"));
+      deleteEntry(path.join(sandboxDir, appPath, "web", "index.html"));
+    }, "delete files");
+    requestShould404("index.html");
+    requestShould404("packages/myapp/nope.dart");
+    requestShould404("dir/packages/myapp/nope.dart");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/native_watch_added_file_test.dart b/sdk/lib/_internal/pub_generated/test/serve/native_watch_added_file_test.dart
new file mode 100644
index 0000000..e4eccad
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/native_watch_added_file_test.dart
@@ -0,0 +1,21 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      "picks up files added after serving started when using the " "native watcher",
+      () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("index.html", "body")])]).create();
+    pubServe(args: ["--no-force-poll"]);
+    waitForBuildSuccess();
+    requestShouldSucceed("index.html", "body");
+    d.dir(appPath, [d.dir("web", [d.file("other.html", "added")])]).create();
+    waitForBuildSuccess();
+    requestShouldSucceed("other.html", "added");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/native_watch_modified_file_test.dart b/sdk/lib/_internal/pub_generated/test/serve/native_watch_modified_file_test.dart
new file mode 100644
index 0000000..1690286
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/native_watch_modified_file_test.dart
@@ -0,0 +1,20 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      "watches modifications to files when using the native watcher",
+      () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("index.html", "before")])]).create();
+    pubServe(args: ["--no-force-poll"]);
+    requestShouldSucceed("index.html", "before");
+    d.dir(appPath, [d.dir("web", [d.file("index.html", "after")])]).create();
+    waitForBuildSuccess();
+    requestShouldSucceed("index.html", "after");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/native_watch_removed_file_test.dart b/sdk/lib/_internal/pub_generated/test/serve/native_watch_removed_file_test.dart
new file mode 100644
index 0000000..e05708d
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/native_watch_removed_file_test.dart
@@ -0,0 +1,24 @@
+library pub_tests;
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration(
+      "stop serving a file that is removed when using the native " "watcher",
+      () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("index.html", "body")])]).create();
+    pubServe(args: ["--no-force-poll"]);
+    requestShouldSucceed("index.html", "body");
+    schedule(
+        () => deleteEntry(path.join(sandboxDir, appPath, "web", "index.html")));
+    waitForBuildSuccess();
+    requestShould404("index.html");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/serve_from_app_lib_test.dart b/sdk/lib/_internal/pub_generated/test/serve/serve_from_app_lib_test.dart
new file mode 100644
index 0000000..9701114
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/serve_from_app_lib_test.dart
@@ -0,0 +1,24 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("'packages' URLs look in the app's lib directory", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "lib",
+                [
+                    d.file("lib.dart", "foo() => 'foo';"),
+                    d.dir("sub", [d.file("lib.dart", "bar() => 'bar';")])])]).create();
+    pubServe();
+    requestShouldSucceed("packages/myapp/lib.dart", "foo() => 'foo';");
+    requestShouldSucceed("packages/myapp/sub/lib.dart", "bar() => 'bar';");
+    requestShouldSucceed("foo/packages/myapp/lib.dart", "foo() => 'foo';");
+    requestShouldSucceed("a/b/packages/myapp/sub/lib.dart", "bar() => 'bar';");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/serve_from_app_web_test.dart b/sdk/lib/_internal/pub_generated/test/serve/serve_from_app_web_test.dart
new file mode 100644
index 0000000..9edc578
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/serve_from_app_web_test.dart
@@ -0,0 +1,29 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("finds files in the app's web directory", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [
+                    d.file("index.html", "<body>"),
+                    d.file("file.dart", "main() => print('hello');"),
+                    d.dir(
+                        "sub",
+                        [
+                            d.file("file.html", "<body>in subdir</body>"),
+                            d.file("lib.dart", "main() => 'foo';")])])]).create();
+    pubServe();
+    requestShouldSucceed("index.html", "<body>");
+    requestShouldSucceed("file.dart", "main() => print('hello');");
+    requestShouldSucceed("sub/file.html", "<body>in subdir</body>");
+    requestShouldSucceed("sub/lib.dart", "main() => 'foo';");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/serve_from_dependency_lib_test.dart b/sdk/lib/_internal/pub_generated/test/serve/serve_from_dependency_lib_test.dart
new file mode 100644
index 0000000..d0cedfb
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/serve_from_dependency_lib_test.dart
@@ -0,0 +1,29 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("'packages' URLs look in the dependency's lib directory", () {
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "0.0.1"),
+            d.dir(
+                "lib",
+                [
+                    d.file("lib.dart", "foo() => 'foo';"),
+                    d.dir("sub", [d.file("lib.dart", "bar() => 'bar';")])])]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    pubServe(shouldGetFirst: true);
+    requestShouldSucceed("packages/foo/lib.dart", "foo() => 'foo';");
+    requestShouldSucceed("packages/foo/sub/lib.dart", "bar() => 'bar';");
+    requestShouldSucceed("foo/packages/foo/lib.dart", "foo() => 'foo';");
+    requestShouldSucceed("a/b/packages/foo/sub/lib.dart", "bar() => 'bar';");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/serves_file_with_space_test.dart b/sdk/lib/_internal/pub_generated/test/serve/serves_file_with_space_test.dart
new file mode 100644
index 0000000..94fecfd
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/serves_file_with_space_test.dart
@@ -0,0 +1,22 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("serves a filename with a space", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [
+                    d.file("foo bar.txt", "outer contents"),
+                    d.dir("sub dir", [d.file("inner.txt", "inner contents")])])]).create();
+    pubServe();
+    requestShouldSucceed("foo%20bar.txt", "outer contents");
+    requestShouldSucceed("sub%20dir/inner.txt", "inner contents");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/serves_hidden_assets_that_arent_gitignored_test.dart b/sdk/lib/_internal/pub_generated/test/serve/serves_hidden_assets_that_arent_gitignored_test.dart
new file mode 100644
index 0000000..4c59aa9
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/serves_hidden_assets_that_arent_gitignored_test.dart
@@ -0,0 +1,23 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("serves hidden assets that aren't .gitignored", () {
+    ensureGit();
+    d.git(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [
+                    d.file(".outer.txt", "outer contents"),
+                    d.dir(".dir", [d.file("inner.txt", "inner contents")])])]).create();
+    pubServe();
+    requestShouldSucceed(".outer.txt", "outer contents");
+    requestShouldSucceed(".dir/inner.txt", "inner contents");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/serves_index_html_for_directories_test.dart b/sdk/lib/_internal/pub_generated/test/serve/serves_index_html_for_directories_test.dart
new file mode 100644
index 0000000..3fbc8ff
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/serves_index_html_for_directories_test.dart
@@ -0,0 +1,23 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("serves index.html for directories", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [
+                    d.file("index.html", "<body>super"),
+                    d.dir("sub", [d.file("index.html", "<body>sub")])])]).create();
+    pubServe();
+    requestShouldSucceed("", "<body>super");
+    requestShouldSucceed("sub/", "<body>sub");
+    requestShouldRedirect("sub", "/sub/");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/serves_web_and_test_dirs_by_default_test.dart b/sdk/lib/_internal/pub_generated/test/serve/serves_web_and_test_dirs_by_default_test.dart
new file mode 100644
index 0000000..c017916
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/serves_web_and_test_dirs_by_default_test.dart
@@ -0,0 +1,21 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("serves web/ and test/ dirs by default", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir("web", [d.file("foo", "contents")]),
+            d.dir("test", [d.file("bar", "contents")]),
+            d.dir("example", [d.file("baz", "contents")])]).create();
+    pubServe();
+    requestShouldSucceed("foo", "contents", root: "web");
+    requestShouldSucceed("bar", "contents", root: "test");
+    requestShould404("baz", root: "web");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/supports_user_defined_declaring_transformers_test.dart b/sdk/lib/_internal/pub_generated/test/serve/supports_user_defined_declaring_transformers_test.dart
new file mode 100644
index 0000000..737c5e8
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/supports_user_defined_declaring_transformers_test.dart
@@ -0,0 +1,58 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+const DECLARING_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class DeclaringRewriteTransformer extends Transformer
+    implements DeclaringTransformer {
+  DeclaringRewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.out';
+
+  Future apply(Transform transform) {
+    transform.logger.info('Rewriting \${transform.primaryInput.id}.');
+    return transform.primaryInput.readAsString().then((contents) {
+      var id = transform.primaryInput.id.changeExtension(".final");
+      transform.addOutput(new Asset.fromString(id, "\$contents.final"));
+    });
+  }
+
+  Future declareOutputs(DeclaringTransform transform) {
+    transform.declareOutput(transform.primaryId.changeExtension(".final"));
+    return new Future.value();
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("supports a user-defined declaring transformer", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/lazy", "myapp/src/declaring"]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.dir(
+                        "src",
+                        [
+                            d.file("lazy.dart", LAZY_TRANSFORMER),
+                            d.file("declaring.dart", DECLARING_TRANSFORMER)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var server = pubServe();
+      server.stdout.expect('Build completed successfully');
+      requestShouldSucceed("foo.final", "foo.out.final");
+      server.stdout.expect(
+          emitsLines(
+              '[Info from LazyRewrite]:\n' 'Rewriting myapp|web/foo.txt.\n'
+                  '[Info from DeclaringRewrite]:\n' 'Rewriting myapp|web/foo.out.'));
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/supports_user_defined_lazy_transformers_test.dart b/sdk/lib/_internal/pub_generated/test/serve/supports_user_defined_lazy_transformers_test.dart
new file mode 100644
index 0000000..56c810f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/supports_user_defined_lazy_transformers_test.dart
@@ -0,0 +1,24 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("supports a user-defined lazy transformer", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", LAZY_TRANSFORMER)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var server = pubServe();
+      server.stdout.expect('Build completed successfully');
+      requestShouldSucceed("foo.out", "foo.out");
+      server.stdout.expect(
+          emitsLines('[Info from LazyRewrite]:\n' 'Rewriting myapp|web/foo.txt.'));
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/unknown_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/serve/unknown_dependency_test.dart
new file mode 100644
index 0000000..b3f78d5
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/unknown_dependency_test.dart
@@ -0,0 +1,16 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("responds with a 404 unknown dependencies", () {
+    d.dir(appPath, [d.appPubspec()]).create();
+    pubServe();
+    requestShould404("packages/foo/nope.dart");
+    requestShould404("assets/foo/nope.png");
+    requestShould404("dir/packages/foo/nope.dart");
+    requestShould404("dir/assets/foo/nope.png");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/uses_appropriate_mime_types_test.dart b/sdk/lib/_internal/pub_generated/test/serve/uses_appropriate_mime_types_test.dart
new file mode 100644
index 0000000..6004936
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/uses_appropriate_mime_types_test.dart
@@ -0,0 +1,39 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("uses appropriate mime types", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [
+                    d.file("index.html", "<body>"),
+                    d.file("file.dart", "main() => print('hello');"),
+                    d.file("file.js", "console.log('hello');"),
+                    d.file("file.css", "body {color: blue}")])]).create();
+    pubServe();
+    requestShouldSucceed(
+        "index.html",
+        anything,
+        headers: containsPair('content-type', 'text/html'));
+    requestShouldSucceed(
+        "file.dart",
+        anything,
+        headers: containsPair('content-type', 'application/dart'));
+    requestShouldSucceed(
+        "file.js",
+        anything,
+        headers: containsPair('content-type', 'application/javascript'));
+    requestShouldSucceed(
+        "file.css",
+        anything,
+        headers: containsPair('content-type', 'text/css'));
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/utils.dart b/sdk/lib/_internal/pub_generated/test/serve/utils.dart
new file mode 100644
index 0000000..c1c2c2a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/utils.dart
@@ -0,0 +1,285 @@
+library pub_tests;
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+import 'package:http/http.dart' as http;
+import 'package:scheduled_test/scheduled_process.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:stack_trace/stack_trace.dart';
+import '../../lib/src/utils.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+ScheduledProcess _pubServer;
+int _adminPort;
+final _ports = new Map<String, int>();
+Completer _portsCompleter;
+WebSocket _webSocket;
+Stream _webSocketBroadcastStream;
+const REWRITE_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class RewriteTransformer extends Transformer {
+  RewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    return transform.primaryInput.readAsString().then((contents) {
+      var id = transform.primaryInput.id.changeExtension(".out");
+      transform.addOutput(new Asset.fromString(id, "\$contents.out"));
+    });
+  }
+}
+""";
+const LAZY_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class LazyRewriteTransformer extends Transformer implements LazyTransformer {
+  LazyRewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    transform.logger.info('Rewriting \${transform.primaryInput.id}.');
+    return transform.primaryInput.readAsString().then((contents) {
+      var id = transform.primaryInput.id.changeExtension(".out");
+      transform.addOutput(new Asset.fromString(id, "\$contents.out"));
+    });
+  }
+
+  Future declareOutputs(DeclaringTransform transform) {
+    transform.declareOutput(transform.primaryId.changeExtension(".out"));
+    return new Future.value();
+  }
+}
+""";
+const NOT_SERVED = 1;
+String dartTransformer(String id, {String import}) {
+  if (import != null) {
+    id = '$id imports \${$import.TOKEN}';
+    import = 'import "package:$import/$import.dart" as $import;';
+  } else {
+    import = '';
+  }
+  return """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+$import
+
+import 'dart:io';
+
+const TOKEN = "$id";
+
+final _tokenRegExp = new RegExp(r'^const TOKEN = "(.*?)";\$', multiLine: true);
+
+class DartTransformer extends Transformer {
+  final BarbackSettings _settings;
+
+  DartTransformer.asPlugin(this._settings);
+
+  String get allowedExtensions => '.dart';
+
+  Future apply(Transform transform) {
+    return transform.primaryInput.readAsString().then((contents) {
+      transform.addOutput(new Asset.fromString(transform.primaryInput.id,
+          contents.replaceAllMapped(_tokenRegExp, (match) {
+        var token = TOKEN;
+        var addition = _settings.configuration["addition"];
+        if (addition != null) token += addition;
+        return 'const TOKEN = "(\${match[1]}, \$token)";';
+      })));
+    });
+  }
+}
+""";
+}
+ScheduledProcess startPubServe({Iterable<String> args, bool createWebDir: true})
+    {
+  var pubArgs = ["serve", "--port=0", "--force-poll", "--log-admin-url"];
+  if (args != null) pubArgs.addAll(args);
+  currentSchedule.timeout *= 1.5;
+  if (createWebDir) d.dir(appPath, [d.dir("web")]).create();
+  return startPub(args: pubArgs);
+}
+ScheduledProcess pubServe({bool shouldGetFirst: false, bool createWebDir: true,
+    Iterable<String> args}) {
+  _pubServer = startPubServe(args: args, createWebDir: createWebDir);
+  _portsCompleter = new Completer();
+  currentSchedule.onComplete.schedule(() {
+    _portsCompleter = null;
+    _ports.clear();
+    if (_webSocket != null) {
+      _webSocket.close();
+      _webSocket = null;
+      _webSocketBroadcastStream = null;
+    }
+  });
+  if (shouldGetFirst) {
+    _pubServer.stdout.expect(
+        consumeThrough(
+            anyOf(["Got dependencies!", matches(new RegExp(r"^Changed \d+ dependenc"))])));
+  }
+  _pubServer.stdout.expect(startsWith("Loading source assets..."));
+  _pubServer.stdout.expect(consumeWhile(matches("Loading .* transformers...")));
+  _pubServer.stdout.expect(predicate(_parseAdminPort));
+  _pubServer.stdout.expect(
+      consumeWhile(predicate(_parsePort, 'emits server url')));
+  schedule(() {
+    expect(_ports, isNot(isEmpty));
+    _portsCompleter.complete();
+  });
+  return _pubServer;
+}
+final _parsePortRegExp = new RegExp(r"([^ ]+) +on http://localhost:(\d+)");
+bool _parseAdminPort(String line) {
+  var match = _parsePortRegExp.firstMatch(line);
+  if (match == null) return false;
+  _adminPort = int.parse(match[2]);
+  return true;
+}
+bool _parsePort(String line) {
+  var match = _parsePortRegExp.firstMatch(line);
+  if (match == null) return false;
+  _ports[match[1]] = int.parse(match[2]);
+  return true;
+}
+void endPubServe() {
+  _pubServer.kill();
+}
+Future<http.Response> scheduleRequest(String urlPath, {String root}) {
+  return schedule(() {
+    return http.get(_getServerUrlSync(root, urlPath));
+  }, "request $urlPath");
+}
+void requestShouldSucceed(String urlPath, expectation, {String root, headers}) {
+  scheduleRequest(urlPath, root: root).then((response) {
+    if (expectation != null) expect(response.body, expectation);
+    if (headers != null) expect(response.headers, headers);
+  });
+}
+void requestShould404(String urlPath, {String root}) {
+  scheduleRequest(urlPath, root: root).then((response) {
+    expect(response.statusCode, equals(404));
+  });
+}
+void requestShouldRedirect(String urlPath, redirectTarget, {String root}) {
+  schedule(() {
+    var request =
+        new http.Request("GET", Uri.parse(_getServerUrlSync(root, urlPath)));
+    request.followRedirects = false;
+    return request.send().then((response) {
+      expect(response.statusCode ~/ 100, equals(3));
+      expect(response.headers, containsPair('location', redirectTarget));
+    });
+  }, "request $urlPath");
+}
+void postShould405(String urlPath, {String root}) {
+  schedule(() {
+    return http.post(_getServerUrlSync(root, urlPath)).then((response) {
+      expect(response.statusCode, equals(405));
+    });
+  }, "request $urlPath");
+}
+void requestShouldNotConnect(String urlPath, {String root}) {
+  schedule(() {
+    return expect(
+        http.get(_getServerUrlSync(root, urlPath)),
+        throwsA(new isInstanceOf<SocketException>()));
+  }, "request $urlPath");
+}
+void waitForBuildSuccess() =>
+    _pubServer.stdout.expect(consumeThrough(contains("successfully")));
+Future _ensureWebSocket() {
+  if (_webSocket != null) return new Future.value();
+  expect(_pubServer, isNotNull);
+  expect(_adminPort, isNotNull);
+  return WebSocket.connect("ws://localhost:$_adminPort").then((socket) {
+    _webSocket = socket;
+    _webSocketBroadcastStream = _webSocket.map(JSON.decode).asBroadcastStream();
+  });
+}
+void closeWebSocket() {
+  schedule(() {
+    return _ensureWebSocket().then((_) => _webSocket.close()).then((_) => _webSocket =
+        null);
+  }, "closing web socket");
+}
+Future<Map> webSocketRequest(String method, [Map params]) {
+  var completer = new Completer();
+  schedule(() {
+    return Future.wait(
+        [_ensureWebSocket(), awaitObject(params)]).then((results) {
+      var resolvedParams = results[1];
+      chainToCompleter(
+          currentSchedule.wrapFuture(_jsonRpcRequest(method, resolvedParams)),
+          completer);
+    });
+  }, "send $method with $params to web socket");
+  return completer.future;
+}
+Future<Map> expectWebSocketResult(String method, Map params, result) {
+  return schedule(() {
+    return Future.wait(
+        [webSocketRequest(method, params), awaitObject(result)]).then((results) {
+      var response = results[0];
+      var resolvedResult = results[1];
+      expect(response["result"], resolvedResult);
+      return response["result"];
+    });
+  }, "send $method with $params to web socket and expect $result");
+}
+Future expectWebSocketError(String method, Map params, errorCode, errorMessage,
+    {data}) {
+  return schedule(() {
+    return webSocketRequest(method, params).then((response) {
+      expect(response["error"]["code"], errorCode);
+      expect(response["error"]["message"], errorMessage);
+      if (data != null) {
+        expect(response["error"]["data"], data);
+      }
+      return response["error"]["data"];
+    });
+  }, "send $method with $params to web socket and expect error $errorCode");
+}
+Future expectNotServed(String root) {
+  return schedule(() {
+    expect(_ports.containsKey(root), isFalse);
+  });
+}
+var _rpcId = 0;
+Future<Map> _jsonRpcRequest(String method, [Map params]) {
+  var id = _rpcId++;
+  var message = {
+    "jsonrpc": "2.0",
+    "method": method,
+    "id": id
+  };
+  if (params != null) message["params"] = params;
+  _webSocket.add(JSON.encode(message));
+  return Chain.track(
+      _webSocketBroadcastStream.firstWhere(
+          (response) => response["id"] == id)).then((value) {
+    currentSchedule.addDebugInfo(
+        "Web Socket request $method with params $params\n" "Result: $value");
+    expect(value["id"], equals(id));
+    return value;
+  });
+}
+Future<String> getServerUrl([String root, String path]) =>
+    _portsCompleter.future.then((_) => _getServerUrlSync(root, path));
+registerServerPort(String root, int port) {
+  _ports[root] = port;
+}
+String _getServerUrlSync([String root, String path]) {
+  if (root == null) root = 'web';
+  expect(_ports, contains(root));
+  var url = "http://localhost:${_ports[root]}";
+  if (path != null) url = "$url/$path";
+  return url;
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/watch_added_file_test.dart b/sdk/lib/_internal/pub_generated/test/serve/watch_added_file_test.dart
new file mode 100644
index 0000000..9da2b7b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/watch_added_file_test.dart
@@ -0,0 +1,19 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("picks up files added after serving started", () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("index.html", "body")])]).create();
+    pubServe();
+    waitForBuildSuccess();
+    requestShouldSucceed("index.html", "body");
+    d.dir(appPath, [d.dir("web", [d.file("other.html", "added")])]).create();
+    waitForBuildSuccess();
+    requestShouldSucceed("other.html", "added");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/watch_modified_file_test.dart b/sdk/lib/_internal/pub_generated/test/serve/watch_modified_file_test.dart
new file mode 100644
index 0000000..c15b865
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/watch_modified_file_test.dart
@@ -0,0 +1,18 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("watches modifications to files", () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("index.html", "before")])]).create();
+    pubServe();
+    requestShouldSucceed("index.html", "before");
+    d.dir(appPath, [d.dir("web", [d.file("index.html", "after")])]).create();
+    waitForBuildSuccess();
+    requestShouldSucceed("index.html", "after");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/watch_removed_file_test.dart b/sdk/lib/_internal/pub_generated/test/serve/watch_removed_file_test.dart
new file mode 100644
index 0000000..747d6ca
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/watch_removed_file_test.dart
@@ -0,0 +1,22 @@
+library pub_tests;
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+main() {
+  initConfig();
+  integration("stop serving a file that is removed", () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("index.html", "body")])]).create();
+    pubServe();
+    requestShouldSucceed("index.html", "body");
+    schedule(
+        () => deleteEntry(path.join(sandboxDir, appPath, "web", "index.html")));
+    waitForBuildSuccess();
+    requestShould404("index.html");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/exit_on_close_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/exit_on_close_test.dart
new file mode 100644
index 0000000..384bfff
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/exit_on_close_test.dart
@@ -0,0 +1,24 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  integration("exits when the connection closes", () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("index.html", "<body>")])]).create();
+    var server = pubServe();
+    expectWebSocketResult("urlToAssetId", {
+      "url": getServerUrl("web", "index.html")
+    }, {
+      "package": "myapp",
+      "path": "web/index.html"
+    });
+    expectWebSocketResult("exitOnClose", null, null);
+    closeWebSocket();
+    server.stdout.expect("Build completed successfully");
+    server.stdout.expect("WebSocket connection closed, terminating.");
+    server.shouldExit(0);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/path_to_urls_errors_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/path_to_urls_errors_test.dart
new file mode 100644
index 0000000..6c40138
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/path_to_urls_errors_test.dart
@@ -0,0 +1,47 @@
+library pub_tests;
+import 'package:json_rpc_2/error_code.dart' as rpc_error_code;
+import 'package:path/path.dart' as p;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  integration("pathToUrls errors on bad inputs", () {
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      }),
+          d.file("top-level.txt", "top-level"),
+          d.dir("bin", [d.file("foo.txt", "foo")]),
+          d.dir("lib", [d.file("myapp.dart", "myapp")])]).create();
+    pubServe(shouldGetFirst: true);
+    expectWebSocketError("pathToUrls", {
+      "path": 123
+    },
+        rpc_error_code.INVALID_PARAMS,
+        'Parameter "path" for method "pathToUrls" must be a string, but was ' '123.');
+    expectWebSocketError("pathToUrls", {
+      "path": "main.dart",
+      "line": 12.34
+    },
+        rpc_error_code.INVALID_PARAMS,
+        'Parameter "line" for method "pathToUrls" must be an integer, but was '
+            '12.34.');
+    expectNotServed(p.join('bin', 'foo.txt'));
+    expectNotServed(p.join('nope', 'foo.txt'));
+    expectNotServed(p.join("..", "bar", "lib", "bar.txt"));
+    expectNotServed(p.join("..", "foo", "web", "foo.txt"));
+    endPubServe();
+  });
+}
+void expectNotServed(String path) {
+  expectWebSocketError("pathToUrls", {
+    "path": path
+  }, NOT_SERVED, 'Asset path "$path" is not currently being served.');
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/path_to_urls_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/path_to_urls_test.dart
new file mode 100644
index 0000000..5e01873
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/path_to_urls_test.dart
@@ -0,0 +1,96 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import '../../../lib/src/io.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  integration("pathToUrls converts asset ids to matching URL paths", () {
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("lib", [d.file("foo.dart", "foo() => null;")])]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      }),
+          d.dir(
+              "test",
+              [d.file("index.html", "<body>"), d.dir("sub", [d.file("bar.html", "bar")])]),
+          d.dir("lib", [d.file("app.dart", "app() => null;")]),
+          d.dir(
+              "web",
+              [d.file("index.html", "<body>"), d.dir("sub", [d.file("bar.html", "bar")])]),
+          d.dir("randomdir", [d.file("index.html", "<body>")])]).create();
+    pubServe(args: ["test", "web", "randomdir"], shouldGetFirst: true);
+    expectWebSocketResult("pathToUrls", {
+      "path": p.join("web", "index.html")
+    }, {
+      "urls": [getServerUrl("web", "index.html")]
+    });
+    expectWebSocketResult("pathToUrls", {
+      "path": p.join("web", "sub", "bar.html")
+    }, {
+      "urls": [getServerUrl("web", "sub/bar.html")]
+    });
+    expectWebSocketResult("pathToUrls", {
+      "path": p.join("test", "index.html")
+    }, {
+      "urls": [getServerUrl("test", "index.html")]
+    });
+    expectWebSocketResult("pathToUrls", {
+      "path": p.join("test", "sub", "bar.html")
+    }, {
+      "urls": [getServerUrl("test", "sub/bar.html")]
+    });
+    expectWebSocketResult("pathToUrls", {
+      "path": p.join("randomdir", "index.html")
+    }, {
+      "urls": [getServerUrl("randomdir", "index.html")]
+    });
+    expectWebSocketResult("pathToUrls", {
+      "path": p.join("lib", "app.dart")
+    }, {
+      "urls": [
+          getServerUrl("test", "packages/myapp/app.dart"),
+          getServerUrl("web", "packages/myapp/app.dart"),
+          getServerUrl("randomdir", "packages/myapp/app.dart")]
+    });
+    expectWebSocketResult("pathToUrls", {
+      "path": p.join("packages", "myapp", "app.dart")
+    }, {
+      "urls": [
+          getServerUrl("test", "packages/myapp/app.dart"),
+          getServerUrl("web", "packages/myapp/app.dart"),
+          getServerUrl("randomdir", "packages/myapp/app.dart")]
+    });
+    expectWebSocketResult("pathToUrls", {
+      "path": p.join("packages", "foo", "foo.dart")
+    }, {
+      "urls": [
+          getServerUrl("test", "packages/foo/foo.dart"),
+          getServerUrl("web", "packages/foo/foo.dart"),
+          getServerUrl("randomdir", "packages/foo/foo.dart")]
+    });
+    expectWebSocketResult("pathToUrls", {
+      "path": p.join("..", "foo", "lib", "foo.dart")
+    }, {
+      "urls": [
+          getServerUrl("test", "packages/foo/foo.dart"),
+          getServerUrl("web", "packages/foo/foo.dart"),
+          getServerUrl("randomdir", "packages/foo/foo.dart")]
+    });
+    expectWebSocketResult("pathToUrls", {
+      "path": canonicalize(p.join(sandboxDir, "foo", "lib", "foo.dart"))
+    }, {
+      "urls": [
+          getServerUrl("test", "packages/foo/foo.dart"),
+          getServerUrl("web", "packages/foo/foo.dart"),
+          getServerUrl("randomdir", "packages/foo/foo.dart")]
+    });
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/path_to_urls_with_line_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/path_to_urls_with_line_test.dart
new file mode 100644
index 0000000..019b263
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/path_to_urls_with_line_test.dart
@@ -0,0 +1,22 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  integration("pathToUrls provides output line if given source", () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("main.dart", "main")])]).create();
+    pubServe();
+    expectWebSocketResult("pathToUrls", {
+      "path": p.join("web", "main.dart"),
+      "line": 12345
+    }, {
+      "urls": [getServerUrl("web", "main.dart")],
+      "line": 12345
+    });
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_already_served_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_already_served_test.dart
new file mode 100644
index 0000000..144b82c1
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_already_served_test.dart
@@ -0,0 +1,19 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  integration("returns the old URL if the directory is already served", () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("index.html", "<body>")])]).create();
+    pubServe();
+    expectWebSocketResult("serveDirectory", {
+      "path": "web"
+    }, {
+      "url": getServerUrl("web")
+    });
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_and_immediately_request_asset_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_and_immediately_request_asset_test.dart
new file mode 100644
index 0000000..5490241
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_and_immediately_request_asset_test.dart
@@ -0,0 +1,29 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  integration(
+      "binds a directory to a new port and immediately requests an "
+          "asset URL from that server",
+      () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir("test", [d.file("index.html", "<test body>")]),
+            d.dir("web", [d.file("index.html", "<body>")])]).create();
+    pubServe(args: ["web"]);
+    expect(webSocketRequest("serveDirectory", {
+      "path": "test"
+    }), completes);
+    expectWebSocketResult("pathToUrls", {
+      "path": "test/index.html"
+    }, {
+      "urls": [endsWith("/index.html")]
+    });
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_and_immediately_serve_again_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_and_immediately_serve_again_test.dart
new file mode 100644
index 0000000..0a2e0e6
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_and_immediately_serve_again_test.dart
@@ -0,0 +1,32 @@
+library pub_tests;
+import 'dart:async';
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  integration(
+      "binds a directory to a new port and immediately binds that " "directory again",
+      () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir("test", [d.file("index.html", "<test body>")]),
+            d.dir("web", [d.file("index.html", "<body>")])]).create();
+    pubServe(args: ["web"]);
+    schedule(() {
+      return Future.wait([webSocketRequest("serveDirectory", {
+          "path": "test"
+        }), webSocketRequest("serveDirectory", {
+          "path": "test"
+        })]).then((results) {
+        expect(results[0], contains("result"));
+        expect(results[1], contains("result"));
+        expect(results[0]["result"], equals(results[1]["result"]));
+      });
+    });
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_and_immediately_unserve_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_and_immediately_unserve_test.dart
new file mode 100644
index 0000000..6ba107f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_and_immediately_unserve_test.dart
@@ -0,0 +1,35 @@
+library pub_tests;
+import 'dart:async';
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  integration(
+      "binds a directory to a new port and immediately unbinds that " "directory",
+      () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir("test", [d.file("index.html", "<test body>")]),
+            d.dir("web", [d.file("index.html", "<body>")])]).create();
+    pubServe(args: ["web"]);
+    var serveRequest = webSocketRequest("serveDirectory", {
+      "path": "test"
+    });
+    var unserveRequest = webSocketRequest("unserveDirectory", {
+      "path": "test"
+    });
+    schedule(() {
+      return Future.wait([serveRequest, unserveRequest]).then((results) {
+        expect(results[0], contains("result"));
+        expect(results[1], contains("result"));
+        expect(results[0]["result"]["url"], matches(r"http://localhost:\d+"));
+        expect(results[0]["result"], equals(results[1]["result"]));
+      });
+    });
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_arg_errors_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_arg_errors_test.dart
new file mode 100644
index 0000000..25337b5
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_arg_errors_test.dart
@@ -0,0 +1,43 @@
+library pub_tests;
+import 'package:json_rpc_2/error_code.dart' as rpc_error_code;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("index.html", "<body>")])]).create();
+  });
+  integration("responds with an error if 'path' is not a string", () {
+    pubServe();
+    expectWebSocketError("serveDirectory", {
+      "path": 123
+    },
+        rpc_error_code.INVALID_PARAMS,
+        'Parameter "path" for method "serveDirectory" must be a string, but '
+            'was 123.');
+    endPubServe();
+  });
+  integration("responds with an error if 'path' is absolute", () {
+    pubServe();
+    expectWebSocketError("serveDirectory", {
+      "path": "/absolute.txt"
+    },
+        rpc_error_code.INVALID_PARAMS,
+        '"path" must be a relative path. Got "/absolute.txt".');
+    endPubServe();
+  });
+  integration("responds with an error if 'path' reaches out", () {
+    pubServe();
+    expectWebSocketError("serveDirectory", {
+      "path": "a/../../bad.txt"
+    },
+        rpc_error_code.INVALID_PARAMS,
+        '"path" cannot reach out of its containing directory. Got '
+            '"a/../../bad.txt".');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_overlapping_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_overlapping_test.dart
new file mode 100644
index 0000000..3cbdcc1
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_overlapping_test.dart
@@ -0,0 +1,29 @@
+library pub_tests;
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  integration("fails if the directory overlaps one already being served", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir(
+                "web",
+                [
+                    d.file("index.html", "<body>"),
+                    d.dir("sub", [d.file("index.html", "<sub>")])])]).create();
+    pubServe();
+    var webSub = path.join("web", "sub");
+    expectWebSocketError("serveDirectory", {
+      "path": webSub
+    },
+        2,
+        'Path "$webSub" overlaps already served directory "web".',
+        data: containsPair("directories", ["web"]));
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_test.dart
new file mode 100644
index 0000000..6777ab3
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/serve_directory_test.dart
@@ -0,0 +1,30 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  integration("binds a directory to a new port", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir("test", [d.file("index.html", "<test body>")]),
+            d.dir("web", [d.file("index.html", "<body>")])]).create();
+    pubServe(args: ["web"]);
+    expectWebSocketResult("serveDirectory", {
+      "path": "test"
+    }, {
+      "url": matches(r"http://localhost:\d+")
+    }).then((response) {
+      var url = Uri.parse(response["url"]);
+      registerServerPort("test", url.port);
+    });
+    requestShouldSucceed("index.html", "<test body>", root: "test");
+    d.dir(appPath, [d.dir("test", [d.file("index.html", "after")])]).create();
+    waitForBuildSuccess();
+    requestShouldSucceed("index.html", "after", root: "test");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/unserve_directory_arg_errors_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/unserve_directory_arg_errors_test.dart
new file mode 100644
index 0000000..3e79524
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/unserve_directory_arg_errors_test.dart
@@ -0,0 +1,43 @@
+library pub_tests;
+import 'package:json_rpc_2/error_code.dart' as rpc_error_code;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("index.html", "<body>")])]).create();
+  });
+  integration("responds with an error if 'path' is not a string", () {
+    pubServe();
+    expectWebSocketError("unserveDirectory", {
+      "path": 123
+    },
+        rpc_error_code.INVALID_PARAMS,
+        'Parameter "path" for method "unserveDirectory" must be a string, but '
+            'was 123.');
+    endPubServe();
+  });
+  integration("responds with an error if 'path' is absolute", () {
+    pubServe();
+    expectWebSocketError("unserveDirectory", {
+      "path": "/absolute.txt"
+    },
+        rpc_error_code.INVALID_PARAMS,
+        '"path" must be a relative path. Got "/absolute.txt".');
+    endPubServe();
+  });
+  integration("responds with an error if 'path' reaches out", () {
+    pubServe();
+    expectWebSocketError("unserveDirectory", {
+      "path": "a/../../bad.txt"
+    },
+        rpc_error_code.INVALID_PARAMS,
+        '"path" cannot reach out of its containing directory. Got '
+            '"a/../../bad.txt".');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/unserve_directory_not_served_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/unserve_directory_not_served_test.dart
new file mode 100644
index 0000000..6b49c16
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/unserve_directory_not_served_test.dart
@@ -0,0 +1,17 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  integration("errors if the directory is not served", () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("index.html", "<body>")])]).create();
+    pubServe();
+    expectWebSocketError("unserveDirectory", {
+      "path": "test"
+    }, NOT_SERVED, 'Directory "test" is not bound to a server.');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/unserve_directory_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/unserve_directory_test.dart
new file mode 100644
index 0000000..2e6be06
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/unserve_directory_test.dart
@@ -0,0 +1,26 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  integration("unbinds a directory from a port", () {
+    d.dir(
+        appPath,
+        [
+            d.appPubspec(),
+            d.dir("test", [d.file("index.html", "<test body>")]),
+            d.dir("web", [d.file("index.html", "<body>")])]).create();
+    pubServe();
+    requestShouldSucceed("index.html", "<body>");
+    requestShouldSucceed("index.html", "<test body>", root: "test");
+    expectWebSocketResult("unserveDirectory", {
+      "path": "test"
+    }, {
+      "url": getServerUrl("test")
+    });
+    requestShouldNotConnect("index.html", root: "test");
+    requestShouldSucceed("index.html", "<body>");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/url_to_asset_id_errors_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/url_to_asset_id_errors_test.dart
new file mode 100644
index 0000000..d1fe009
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/url_to_asset_id_errors_test.dart
@@ -0,0 +1,25 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.dir(appPath, [d.appPubspec()]).create();
+  });
+  integration("responds with NOT_SERVED for an unknown domain", () {
+    pubServe();
+    expectWebSocketError("urlToAssetId", {
+      "url": "http://example.com:80/index.html"
+    }, NOT_SERVED, '"example.com:80" is not being served by pub.');
+    endPubServe();
+  });
+  integration("responds with NOT_SERVED for an unknown port", () {
+    pubServe();
+    expectWebSocketError("urlToAssetId", {
+      "url": "http://localhost:80/index.html"
+    }, NOT_SERVED, '"localhost:80" is not being served by pub.');
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/url_to_asset_id_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/url_to_asset_id_test.dart
new file mode 100644
index 0000000..9538594
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/url_to_asset_id_test.dart
@@ -0,0 +1,95 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  setUp(() {
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "0.0.1"),
+            d.dir("lib", [d.file("foo.dart", "foo")])]).create();
+    d.dir(appPath, [d.appPubspec({
+        "foo": {
+          "path": "../foo"
+        }
+      }),
+          d.dir("lib", [d.file("myapp.dart", "myapp")]),
+          d.dir(
+              "test",
+              [d.file("index.html", "<body>"), d.dir("sub", [d.file("bar.html", "bar")])]),
+          d.dir(
+              "web",
+              [
+                  d.file("index.html", "<body>"),
+                  d.dir("sub", [d.file("bar.html", "bar")])])]).create();
+  });
+  integration("converts URLs to matching asset ids in web/", () {
+    pubServe(shouldGetFirst: true);
+    expectWebSocketResult("urlToAssetId", {
+      "url": getServerUrl("web", "index.html")
+    }, {
+      "package": "myapp",
+      "path": "web/index.html"
+    });
+    endPubServe();
+  });
+  integration(
+      "converts URLs to matching asset ids in subdirectories of web/",
+      () {
+    pubServe(shouldGetFirst: true);
+    expectWebSocketResult("urlToAssetId", {
+      "url": getServerUrl("web", "sub/bar.html")
+    }, {
+      "package": "myapp",
+      "path": "web/sub/bar.html"
+    });
+    endPubServe();
+  });
+  integration("converts URLs to matching asset ids in test/", () {
+    pubServe(shouldGetFirst: true);
+    expectWebSocketResult("urlToAssetId", {
+      "url": getServerUrl("test", "index.html")
+    }, {
+      "package": "myapp",
+      "path": "test/index.html"
+    });
+    endPubServe();
+  });
+  integration(
+      "converts URLs to matching asset ids in subdirectories of test/",
+      () {
+    pubServe(shouldGetFirst: true);
+    expectWebSocketResult("urlToAssetId", {
+      "url": getServerUrl("test", "sub/bar.html")
+    }, {
+      "package": "myapp",
+      "path": "test/sub/bar.html"
+    });
+    endPubServe();
+  });
+  integration(
+      "converts URLs to matching asset ids in the entrypoint's lib/",
+      () {
+    pubServe(shouldGetFirst: true);
+    expectWebSocketResult("urlToAssetId", {
+      "url": getServerUrl("web", "packages/myapp/myapp.dart")
+    }, {
+      "package": "myapp",
+      "path": "lib/myapp.dart"
+    });
+    endPubServe();
+  });
+  integration("converts URLs to matching asset ids in a dependency's lib/", () {
+    pubServe(shouldGetFirst: true);
+    expectWebSocketResult("urlToAssetId", {
+      "url": getServerUrl("web", "packages/foo/foo.dart")
+    }, {
+      "package": "foo",
+      "path": "lib/foo.dart"
+    });
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve/web_socket/url_to_asset_id_with_line_test.dart b/sdk/lib/_internal/pub_generated/test/serve/web_socket/url_to_asset_id_with_line_test.dart
new file mode 100644
index 0000000..a6cdb8f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve/web_socket/url_to_asset_id_with_line_test.dart
@@ -0,0 +1,22 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../utils.dart';
+main() {
+  initConfig();
+  integration("provides output line number if given source one", () {
+    d.dir(
+        appPath,
+        [d.appPubspec(), d.dir("web", [d.file("main.dart", "main")])]).create();
+    pubServe();
+    expectWebSocketResult("urlToAssetId", {
+      "url": getServerUrl("web", "main.dart"),
+      "line": 12345
+    }, {
+      "package": "myapp",
+      "path": "web/main.dart",
+      "line": 12345
+    });
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/serve_packages.dart b/sdk/lib/_internal/pub_generated/test/serve_packages.dart
new file mode 100644
index 0000000..297a2e2
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/serve_packages.dart
@@ -0,0 +1,113 @@
+library serve_packages;
+import 'dart:async';
+import 'dart:convert';
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:yaml/yaml.dart';
+import '../lib/src/io.dart';
+import '../lib/src/utils.dart';
+import '../lib/src/version.dart';
+import 'descriptor.dart' as d;
+import 'test_pub.dart';
+d.DirectoryDescriptor _servedApiPackageDir;
+d.DirectoryDescriptor _servedPackageDir;
+PackageServerBuilder _builder;
+void servePackages(void callback(PackageServerBuilder builder), {bool replace:
+    false}) {
+  if (_servedPackageDir == null) {
+    _builder = new PackageServerBuilder();
+    _servedApiPackageDir = d.dir('packages', []);
+    _servedPackageDir = d.dir('packages', []);
+    serve([d.dir('api', [_servedApiPackageDir]), _servedPackageDir]);
+    currentSchedule.onComplete.schedule(() {
+      _builder = null;
+      _servedApiPackageDir = null;
+      _servedPackageDir = null;
+    }, 'cleaning up served packages');
+  }
+  schedule(() {
+    if (replace) _builder = new PackageServerBuilder();
+    callback(_builder);
+    return _builder._await().then((resolvedPubspecs) {
+      _servedApiPackageDir.contents.clear();
+      _servedPackageDir.contents.clear();
+      _builder._packages.forEach((name, versions) {
+        _servedApiPackageDir.contents.addAll([d.file('$name', JSON.encode({
+            'name': name,
+            'uploaders': ['nweiz@google.com'],
+            'versions': versions.map(
+                (version) => packageVersionApiMap(version.pubspec)).toList()
+          })), d.dir(name, [d.dir('versions', versions.map((version) {
+              return d.file(
+                  version.version.toString(),
+                  JSON.encode(packageVersionApiMap(version.pubspec, full: true)));
+            }))])]);
+        _servedPackageDir.contents.add(
+            d.dir(
+                name,
+                [
+                    d.dir(
+                        'versions',
+                        versions.map(
+                            (version) => d.tar('${version.version}.tar.gz', version.contents)))]));
+      });
+    });
+  }, 'initializing the package server');
+}
+void serveNoPackages() => servePackages((_) {}, replace: true);
+class PackageServerBuilder {
+  final _packages = new Map<String, List<_ServedPackage>>();
+  var _futures = new FutureGroup();
+  void serve(String name, String version, {Map deps, Map pubspec,
+      Iterable<d.Descriptor> contents}) {
+    _futures.add(
+        Future.wait([awaitObject(deps), awaitObject(pubspec)]).then((pair) {
+      var resolvedDeps = pair.first;
+      var resolvedPubspec = pair.last;
+      var pubspecFields = {
+        "name": name,
+        "version": version
+      };
+      if (resolvedPubspec != null) pubspecFields.addAll(resolvedPubspec);
+      if (resolvedDeps != null) pubspecFields["dependencies"] = resolvedDeps;
+      if (contents == null) contents = [d.libDir(name, "$name $version")];
+      contents =
+          [d.file("pubspec.yaml", yaml(pubspecFields))]..addAll(contents);
+      var packages = _packages.putIfAbsent(name, () => []);
+      packages.add(new _ServedPackage(pubspecFields, contents));
+    }));
+  }
+  void serveRepoPackage(String package) {
+    _addPackage(name) {
+      if (_packages.containsKey(name)) return;
+      _packages[name] = [];
+      var pubspec = new Map.from(
+          loadYaml(readTextFile(p.join(repoRoot, 'pkg', name, 'pubspec.yaml'))));
+      pubspec.remove('environment');
+      _packages[name].add(
+          new _ServedPackage(
+              pubspec,
+              [
+                  d.file('pubspec.yaml', yaml(pubspec)),
+                  new d.DirectoryDescriptor.fromFilesystem(
+                      'lib',
+                      p.join(repoRoot, 'pkg', name, 'lib'))]));
+      if (pubspec.containsKey('dependencies')) {
+        pubspec['dependencies'].keys.forEach(_addPackage);
+      }
+    }
+    _addPackage(package);
+  }
+  Future _await() {
+    if (_futures.futures.isEmpty) return new Future.value();
+    return _futures.future.then((_) {
+      _futures = new FutureGroup();
+    });
+  }
+}
+class _ServedPackage {
+  final Map pubspec;
+  final List<d.Descriptor> contents;
+  Version get version => new Version.parse(pubspec['version']);
+  _ServedPackage(this.pubspec, this.contents);
+}
diff --git a/sdk/lib/_internal/pub_generated/test/snapshot/creates_a_snapshot_for_immediate_and_transitive_dep_test.dart b/sdk/lib/_internal/pub_generated/test/snapshot/creates_a_snapshot_for_immediate_and_transitive_dep_test.dart
new file mode 100644
index 0000000..5720653
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/snapshot/creates_a_snapshot_for_immediate_and_transitive_dep_test.dart
@@ -0,0 +1,52 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "creates a snapshot for an immediate dependency that's also a "
+          "transitive dependency",
+      () {
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "1.2.3",
+          contents: [
+              d.dir(
+                  "bin",
+                  [
+                      d.file("hello.dart", "void main() => print('hello!');"),
+                      d.file("goodbye.dart", "void main() => print('goodbye!');"),
+                      d.file("shell.sh", "echo shell"),
+                      d.dir("subdir", [d.file("sub.dart", "void main() => print('sub!');")])])]);
+      builder.serve("bar", "1.2.3", deps: {
+        "foo": "1.2.3"
+      });
+    });
+    d.appDir({
+      "foo": "1.2.3"
+    }).create();
+    pubGet(
+        output: allOf(
+            [contains("Precompiled foo:hello."), contains("Precompiled foo:goodbye.")]));
+    d.dir(
+        p.join(appPath, '.pub', 'bin'),
+        [
+            d.file('sdk-version', '0.1.2+3\n'),
+            d.dir(
+                'foo',
+                [
+                    d.matcherFile('hello.dart.snapshot', contains('hello!')),
+                    d.matcherFile('goodbye.dart.snapshot', contains('goodbye!')),
+                    d.nothing('shell.sh.snapshot'),
+                    d.nothing('subdir')])]).validate();
+    var process = pubRun(args: ['foo:hello']);
+    process.stdout.expect("hello!");
+    process.shouldExit();
+    process = pubRun(args: ['foo:goodbye']);
+    process.stdout.expect("goodbye!");
+    process.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/snapshot/creates_a_snapshot_test.dart b/sdk/lib/_internal/pub_generated/test/snapshot/creates_a_snapshot_test.dart
new file mode 100644
index 0000000..2aaeaab
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/snapshot/creates_a_snapshot_test.dart
@@ -0,0 +1,48 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "creates a snapshot for an immediate dependency's executables",
+      () {
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "1.2.3",
+          contents: [
+              d.dir(
+                  "bin",
+                  [
+                      d.file("hello.dart", "void main() => print('hello!');"),
+                      d.file("goodbye.dart", "void main() => print('goodbye!');"),
+                      d.file("shell.sh", "echo shell"),
+                      d.dir("subdir", [d.file("sub.dart", "void main() => print('sub!');")])])]);
+    });
+    d.appDir({
+      "foo": "1.2.3"
+    }).create();
+    pubGet(
+        output: allOf(
+            [contains("Precompiled foo:hello."), contains("Precompiled foo:goodbye.")]));
+    d.dir(
+        p.join(appPath, '.pub', 'bin'),
+        [
+            d.file('sdk-version', '0.1.2+3\n'),
+            d.dir(
+                'foo',
+                [
+                    d.matcherFile('hello.dart.snapshot', contains('hello!')),
+                    d.matcherFile('goodbye.dart.snapshot', contains('goodbye!')),
+                    d.nothing('shell.sh.snapshot'),
+                    d.nothing('subdir')])]).validate();
+    var process = pubRun(args: ['foo:hello']);
+    process.stdout.expect("hello!");
+    process.shouldExit();
+    process = pubRun(args: ['foo:goodbye']);
+    process.stdout.expect("goodbye!");
+    process.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/snapshot/doesnt_resnapshot_when_a_dependency_is_unchanged_test.dart b/sdk/lib/_internal/pub_generated/test/snapshot/doesnt_resnapshot_when_a_dependency_is_unchanged_test.dart
new file mode 100644
index 0000000..acbf482
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/snapshot/doesnt_resnapshot_when_a_dependency_is_unchanged_test.dart
@@ -0,0 +1,32 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "doesn't recreate a snapshot when no dependencies of a package " "have changed",
+      () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.3", deps: {
+        "bar": "any"
+      },
+          contents: [
+              d.dir("bin", [d.file("hello.dart", "void main() => print('hello!');")])]);
+      builder.serve("bar", "1.2.3");
+    });
+    d.appDir({
+      "foo": "1.2.3"
+    }).create();
+    pubGet(output: contains("Precompiled foo:hello."));
+    pubUpgrade(output: isNot(contains("Precompiled foo:hello.")));
+    d.dir(
+        p.join(appPath, '.pub', 'bin'),
+        [
+            d.file('sdk-version', '0.1.2+3\n'),
+            d.dir(
+                'foo',
+                [d.matcherFile('hello.dart.snapshot', contains('hello!'))])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/snapshot/doesnt_snapshot_an_entrypoint_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/snapshot/doesnt_snapshot_an_entrypoint_dependency_test.dart
new file mode 100644
index 0000000..3305d23
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/snapshot/doesnt_snapshot_an_entrypoint_dependency_test.dart
@@ -0,0 +1,27 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "doesn't create a snapshot for a package that depends on the " "entrypoint",
+      () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.3", deps: {
+        'bar': '1.2.3'
+      },
+          contents: [
+              d.dir("bin", [d.file("hello.dart", "void main() => print('hello!');")])]);
+      builder.serve("bar", "1.2.3", deps: {
+        'myapp': 'any'
+      });
+    });
+    d.appDir({
+      "foo": "1.2.3"
+    }).create();
+    pubGet();
+    d.nothing(p.join(appPath, '.pub', 'bin')).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/snapshot/doesnt_snapshot_path_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/snapshot/doesnt_snapshot_path_dependency_test.dart
new file mode 100644
index 0000000..2d96432
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/snapshot/doesnt_snapshot_path_dependency_test.dart
@@ -0,0 +1,27 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("doesn't create a snapshot for a path dependency", () {
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.2.3"),
+            d.dir(
+                "bin",
+                [
+                    d.dir(
+                        "bin",
+                        [d.file("hello.dart", "void main() => print('hello!');")])])]).create();
+    d.appDir({
+      "foo": {
+        "path": "../foo"
+      }
+    }).create();
+    pubGet();
+    d.nothing(p.join(appPath, '.pub', 'bin')).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/snapshot/doesnt_snapshot_transitive_dependencies_test.dart b/sdk/lib/_internal/pub_generated/test/snapshot/doesnt_snapshot_transitive_dependencies_test.dart
new file mode 100644
index 0000000..e7924a4
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/snapshot/doesnt_snapshot_transitive_dependencies_test.dart
@@ -0,0 +1,27 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "doesn't create a snapshot for transitive dependencies' " "executables",
+      () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.3", deps: {
+        'bar': '1.2.3'
+      });
+      builder.serve(
+          "bar",
+          "1.2.3",
+          contents: [
+              d.dir("bin", [d.file("hello.dart", "void main() => print('hello!');")])]);
+    });
+    d.appDir({
+      "foo": "1.2.3"
+    }).create();
+    pubGet();
+    d.nothing(p.join(appPath, '.pub', 'bin', 'bar')).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/snapshot/prints_errors_for_broken_snapshots_test.dart b/sdk/lib/_internal/pub_generated/test/snapshot/prints_errors_for_broken_snapshots_test.dart
new file mode 100644
index 0000000..b658ee4
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/snapshot/prints_errors_for_broken_snapshots_test.dart
@@ -0,0 +1,54 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("prints errors for broken snapshot compilation", () {
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "1.2.3",
+          contents: [
+              d.dir(
+                  "bin",
+                  [
+                      d.file("hello.dart", "void main() { no closing brace"),
+                      d.file("goodbye.dart", "void main() { no closing brace")])]);
+      builder.serve(
+          "bar",
+          "1.2.3",
+          contents: [
+              d.dir(
+                  "bin",
+                  [
+                      d.file("hello.dart", "void main() { no closing brace"),
+                      d.file("goodbye.dart", "void main() { no closing brace")])]);
+    });
+    d.appDir({
+      "foo": "1.2.3",
+      "bar": "1.2.3"
+    }).create();
+    pubGet(
+        error: allOf(
+            [
+                contains("Failed to precompile foo:hello"),
+                contains("Failed to precompile foo:goodbye"),
+                contains("Failed to precompile bar:hello"),
+                contains("Failed to precompile bar:goodbye")]),
+        exitCode: 0);
+    d.dir(
+        p.join(appPath, '.pub', 'bin'),
+        [
+            d.file('sdk-version', '0.1.2+3\n'),
+            d.dir(
+                'foo',
+                [d.nothing('hello.dart.snapshot'), d.nothing('goodbye.dart.snapshot')]),
+            d.dir(
+                'bar',
+                [
+                    d.nothing('hello.dart.snapshot'),
+                    d.nothing('goodbye.dart.snapshot')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/snapshot/recompiles_if_the_sdk_is_out_of_date_test.dart b/sdk/lib/_internal/pub_generated/test/snapshot/recompiles_if_the_sdk_is_out_of_date_test.dart
new file mode 100644
index 0000000..cd510df
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/snapshot/recompiles_if_the_sdk_is_out_of_date_test.dart
@@ -0,0 +1,38 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "creates a snapshot for an immediate dependency's executables",
+      () {
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "5.6.7",
+          contents: [
+              d.dir("bin", [d.file("hello.dart", "void main() => print('hello!');")])]);
+    });
+    d.appDir({
+      "foo": "5.6.7"
+    }).create();
+    pubGet(output: contains("Precompiled foo:hello."));
+    d.dir(
+        p.join(appPath, '.pub', 'bin'),
+        [d.dir('foo', [d.outOfDateSnapshot('hello.dart.snapshot')])]).create();
+    var process = pubRun(args: ['foo:hello']);
+    process.stdout.expect("Precompiling executables...");
+    process.stdout.expect(consumeThrough("hello!"));
+    process.shouldExit();
+    d.dir(
+        p.join(appPath, '.pub', 'bin'),
+        [
+            d.file('sdk-version', '0.1.2+3'),
+            d.dir(
+                'foo',
+                [d.matcherFile('hello.dart.snapshot', contains('hello!'))])]).create();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/snapshot/snapshots_transformed_code_test.dart b/sdk/lib/_internal/pub_generated/test/snapshot/snapshots_transformed_code_test.dart
new file mode 100644
index 0000000..681d102
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/snapshot/snapshots_transformed_code_test.dart
@@ -0,0 +1,56 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+const REPLACE_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class ReplaceTransformer extends Transformer {
+  ReplaceTransformer.asPlugin();
+
+  String get allowedExtensions => '.dart';
+
+  Future apply(Transform transform) {
+    return transform.primaryInput.readAsString().then((contents) {
+      transform.addOutput(new Asset.fromString(transform.primaryInput.id,
+          contents.replaceAll("REPLACE ME", "hello!")));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  integration("snapshots the transformed version of an executable", () {
+    servePackages((builder) {
+      builder.serveRepoPackage('barback');
+      builder.serve("foo", "1.2.3", deps: {
+        "barback": "any"
+      }, pubspec: {
+        'transformers': ['foo']
+      },
+          contents: [
+              d.dir("lib", [d.file("foo.dart", REPLACE_TRANSFORMER)]),
+              d.dir("bin", [d.file("hello.dart", """
+final message = 'REPLACE ME';
+
+void main() => print(message);
+""")])]);
+    });
+    d.appDir({
+      "foo": "1.2.3"
+    }).create();
+    pubGet(output: contains("Precompiled foo:hello."));
+    d.dir(
+        p.join(appPath, '.pub', 'bin'),
+        [
+            d.dir(
+                'foo',
+                [d.matcherFile('hello.dart.snapshot', contains('hello!'))])]).validate();
+    var process = pubRun(args: ['foo:hello']);
+    process.stdout.expect("hello!");
+    process.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/snapshot/upgrades_snapshot_for_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/snapshot/upgrades_snapshot_for_dependency_test.dart
new file mode 100644
index 0000000..2523a0a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/snapshot/upgrades_snapshot_for_dependency_test.dart
@@ -0,0 +1,45 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("upgrades a snapshot when a dependency is upgraded", () {
+    servePackages((builder) {
+      builder.serve("foo", "1.2.3", pubspec: {
+        "dependencies": {
+          "bar": "any"
+        }
+      }, contents: [d.dir("bin", [d.file("hello.dart", """
+import 'package:bar/bar.dart';
+
+void main() => print(message);
+""")])]);
+      builder.serve(
+          "bar",
+          "1.2.3",
+          contents: [d.dir("lib", [d.file("bar.dart", "final message = 'hello!';")])]);
+    });
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubGet(output: contains("Precompiled foo:hello."));
+    d.dir(
+        p.join(appPath, '.pub', 'bin', 'foo'),
+        [d.matcherFile('hello.dart.snapshot', contains('hello!'))]).validate();
+    servePackages((builder) {
+      builder.serve(
+          "bar",
+          "1.2.4",
+          contents: [d.dir("lib", [d.file("bar.dart", "final message = 'hello 2!';")])]);
+    });
+    pubUpgrade(output: contains("Precompiled foo:hello."));
+    d.dir(
+        p.join(appPath, '.pub', 'bin', 'foo'),
+        [d.matcherFile('hello.dart.snapshot', contains('hello 2!'))]).validate();
+    var process = pubRun(args: ['foo:hello']);
+    process.stdout.expect("hello 2!");
+    process.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/snapshot/upgrades_snapshot_test.dart b/sdk/lib/_internal/pub_generated/test/snapshot/upgrades_snapshot_test.dart
new file mode 100644
index 0000000..0dda603
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/snapshot/upgrades_snapshot_test.dart
@@ -0,0 +1,38 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("upgrades a snapshot when its package is upgraded", () {
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "1.2.3",
+          contents: [
+              d.dir("bin", [d.file("hello.dart", "void main() => print('hello!');")])]);
+    });
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubGet(output: contains("Precompiled foo:hello."));
+    d.dir(
+        p.join(appPath, '.pub', 'bin', 'foo'),
+        [d.matcherFile('hello.dart.snapshot', contains('hello!'))]).validate();
+    servePackages((builder) {
+      builder.serve(
+          "foo",
+          "1.2.4",
+          contents: [
+              d.dir("bin", [d.file("hello.dart", "void main() => print('hello 2!');")])]);
+    });
+    pubUpgrade(output: contains("Precompiled foo:hello."));
+    d.dir(
+        p.join(appPath, '.pub', 'bin', 'foo'),
+        [d.matcherFile('hello.dart.snapshot', contains('hello 2!'))]).validate();
+    var process = pubRun(args: ['foo:hello']);
+    process.stdout.expect("hello 2!");
+    process.shouldExit();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/test_pub.dart b/sdk/lib/_internal/pub_generated/test/test_pub.dart
new file mode 100644
index 0000000..de08e22
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/test_pub.dart
@@ -0,0 +1,605 @@
+library test_pub;
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+import 'dart:math';
+import 'package:http/testing.dart';
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_process.dart';
+import 'package:scheduled_test/scheduled_server.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
+import 'package:scheduled_test/scheduled_test.dart' hide fail;
+import 'package:shelf/shelf.dart' as shelf;
+import 'package:shelf/shelf_io.dart' as shelf_io;
+import 'package:unittest/compact_vm_config.dart';
+import 'package:yaml/yaml.dart';
+import '../lib/src/entrypoint.dart';
+import '../lib/src/exit_codes.dart' as exit_codes;
+import '../lib/src/git.dart' as gitlib;
+import '../lib/src/http.dart';
+import '../lib/src/io.dart';
+import '../lib/src/lock_file.dart';
+import '../lib/src/log.dart' as log;
+import '../lib/src/package.dart';
+import '../lib/src/pubspec.dart';
+import '../lib/src/source/hosted.dart';
+import '../lib/src/source/path.dart';
+import '../lib/src/source_registry.dart';
+import '../lib/src/system_cache.dart';
+import '../lib/src/utils.dart';
+import '../lib/src/validator.dart';
+import '../lib/src/version.dart';
+import 'descriptor.dart' as d;
+import 'serve_packages.dart';
+export 'serve_packages.dart';
+initConfig() {
+  useCompactVMConfiguration();
+  filterStacks = true;
+  unittestConfiguration.timeout = null;
+}
+var _server;
+final _requestedPaths = <String>[];
+Completer<int> _portCompleterCache;
+Matcher isMinifiedDart2JSOutput =
+    isNot(contains("// The code supports the following hooks"));
+Matcher isUnminifiedDart2JSOutput =
+    contains("// The code supports the following hooks");
+Map<String, String> _packageOverrides;
+final _barbackVersions = _findBarbackVersions();
+final _barbackDeps = {
+  new VersionConstraint.parse("<0.15.0"): {
+    "source_maps": "0.9.4"
+  }
+};
+Map<Version, String> _findBarbackVersions() {
+  var versions = {};
+  var currentBarback = p.join(repoRoot, 'pkg', 'barback');
+  versions[new Pubspec.load(currentBarback, new SourceRegistry()).version] =
+      currentBarback;
+  for (var dir in listDir(p.join(repoRoot, 'third_party', 'pkg'))) {
+    var basename = p.basename(dir);
+    if (!basename.startsWith('barback')) continue;
+    versions[new Version.parse(split1(basename, '-').last)] = dir;
+  }
+  return versions;
+}
+void withBarbackVersions(String versionConstraint, void callback()) {
+  var constraint = new VersionConstraint.parse(versionConstraint);
+  var validVersions = _barbackVersions.keys.where(constraint.allows);
+  if (validVersions.isEmpty) {
+    throw new ArgumentError(
+        'No available barback version matches "$versionConstraint".');
+  }
+  for (var version in validVersions) {
+    group("with barback $version", () {
+      setUp(() {
+        _packageOverrides = {};
+        _packageOverrides['barback'] = _barbackVersions[version];
+        _barbackDeps.forEach((constraint, deps) {
+          if (!constraint.allows(version)) return;
+          deps.forEach((packageName, version) {
+            _packageOverrides[packageName] =
+                p.join(repoRoot, 'third_party', 'pkg', '$packageName-$version');
+          });
+        });
+        currentSchedule.onComplete.schedule(() {
+          _packageOverrides = null;
+        });
+      });
+      callback();
+    });
+  }
+}
+Completer<int> get _portCompleter {
+  if (_portCompleterCache != null) return _portCompleterCache;
+  _portCompleterCache = new Completer<int>();
+  currentSchedule.onComplete.schedule(() {
+    _portCompleterCache = null;
+  }, 'clearing the port completer');
+  return _portCompleterCache;
+}
+Future<int> get port => _portCompleter.future;
+Future<List<String>> getRequestedPaths() {
+  return schedule(() {
+    var paths = _requestedPaths.toList();
+    _requestedPaths.clear();
+    return paths;
+  }, "get previous network requests");
+}
+void serve([List<d.Descriptor> contents]) {
+  var baseDir = d.dir("serve-dir", contents);
+  _hasServer = true;
+  schedule(() {
+    return _closeServer().then((_) {
+      return shelf_io.serve((request) {
+        currentSchedule.heartbeat();
+        var path = p.posix.fromUri(request.url.path.replaceFirst("/", ""));
+        _requestedPaths.add(path);
+        return validateStream(
+            baseDir.load(
+                path)).then((stream) => new shelf.Response.ok(stream)).catchError((error) {
+          return new shelf.Response.notFound('File "$path" not found.');
+        });
+      }, 'localhost', 0).then((server) {
+        _server = server;
+        _portCompleter.complete(_server.port);
+        currentSchedule.onComplete.schedule(_closeServer);
+      });
+    });
+  }, 'starting a server serving:\n${baseDir.describe()}');
+}
+Future _closeServer() {
+  if (_server == null) return new Future.value();
+  var future = _server.close();
+  _server = null;
+  _hasServer = false;
+  _portCompleterCache = null;
+  return future;
+}
+bool _hasServer = false;
+String yaml(value) => JSON.encode(value);
+String get sandboxDir => _sandboxDir;
+String _sandboxDir;
+final String pkgPath =
+    p.absolute(p.join(p.dirname(Platform.executable), '../../../../pkg'));
+final String cachePath = "cache";
+final String appPath = "myapp";
+final String packagesPath = "$appPath/packages";
+bool _abortScheduled = false;
+class RunCommand {
+  static final get = new RunCommand(
+      'get',
+      new RegExp(r'Got dependencies!|Changed \d+ dependenc(y|ies)!'));
+  static final upgrade = new RunCommand(
+      'upgrade',
+      new RegExp(r'(No dependencies changed\.|Changed \d+ dependenc(y|ies)!)$'));
+  static final downgrade = new RunCommand(
+      'downgrade',
+      new RegExp(r'(No dependencies changed\.|Changed \d+ dependenc(y|ies)!)$'));
+  final String name;
+  final RegExp success;
+  RunCommand(this.name, this.success);
+}
+void forBothPubGetAndUpgrade(void callback(RunCommand command)) {
+  group(RunCommand.get.name, () => callback(RunCommand.get));
+  group(RunCommand.upgrade.name, () => callback(RunCommand.upgrade));
+}
+void pubCommand(RunCommand command, {Iterable<String> args, output, error,
+    warning, int exitCode}) {
+  if (error != null && warning != null) {
+    throw new ArgumentError("Cannot pass both 'error' and 'warning'.");
+  }
+  var allArgs = [command.name];
+  if (args != null) allArgs.addAll(args);
+  if (output == null) output = command.success;
+  if (error != null && exitCode == null) exitCode = 1;
+  if (error != null) output = null;
+  if (warning != null) error = warning;
+  schedulePub(args: allArgs, output: output, error: error, exitCode: exitCode);
+}
+void pubGet({Iterable<String> args, output, error, warning, int exitCode}) {
+  pubCommand(
+      RunCommand.get,
+      args: args,
+      output: output,
+      error: error,
+      warning: warning,
+      exitCode: exitCode);
+}
+void pubUpgrade({Iterable<String> args, output, error, warning, int exitCode}) {
+  pubCommand(
+      RunCommand.upgrade,
+      args: args,
+      output: output,
+      error: error,
+      warning: warning,
+      exitCode: exitCode);
+}
+void pubDowngrade({Iterable<String> args, output, error, warning, int exitCode})
+    {
+  pubCommand(
+      RunCommand.downgrade,
+      args: args,
+      output: output,
+      error: error,
+      warning: warning,
+      exitCode: exitCode);
+}
+ScheduledProcess pubRun({bool global: false, Iterable<String> args}) {
+  var pubArgs = global ? ["global", "run"] : ["run"];
+  pubArgs.addAll(args);
+  var pub = startPub(args: pubArgs);
+  pub.stdout.expect(consumeWhile(startsWith("Loading")));
+  return pub;
+}
+void integration(String description, void body()) =>
+    _integration(description, body, test);
+void solo_integration(String description, void body()) =>
+    _integration(description, body, solo_test);
+void _integration(String description, void body(), [Function testFn]) {
+  testFn(description, () {
+    currentSchedule.timeout *= 2;
+    if (Platform.operatingSystem == "windows") {
+      currentSchedule.timeout *= 2;
+    }
+    _sandboxDir = createSystemTempDir();
+    d.defaultRoot = sandboxDir;
+    currentSchedule.onComplete.schedule(
+        () => deleteEntry(_sandboxDir),
+        'deleting the sandbox directory');
+    body();
+  });
+}
+String get testDirectory => p.absolute(p.dirname(libraryPath('test_pub')));
+void scheduleRename(String from, String to) {
+  schedule(
+      () => renameDir(p.join(sandboxDir, from), p.join(sandboxDir, to)),
+      'renaming $from to $to');
+}
+void scheduleSymlink(String target, String symlink) {
+  schedule(
+      () => createSymlink(p.join(sandboxDir, target), p.join(sandboxDir, symlink)),
+      'symlinking $target to $symlink');
+}
+void schedulePub({List args, output, error, outputJson,
+    Future<Uri> tokenEndpoint, int exitCode: exit_codes.SUCCESS}) {
+  assert(output == null || outputJson == null);
+  var pub = startPub(args: args, tokenEndpoint: tokenEndpoint);
+  pub.shouldExit(exitCode);
+  var failures = [];
+  var stderr;
+  expect(
+      Future.wait(
+          [pub.stdoutStream().toList(), pub.stderrStream().toList()]).then((results) {
+    var stdout = results[0].join("\n");
+    stderr = results[1].join("\n");
+    if (outputJson == null) {
+      _validateOutput(failures, 'stdout', output, stdout);
+      return null;
+    }
+    return awaitObject(outputJson).then((resolved) {
+      _validateOutputJson(failures, 'stdout', resolved, stdout);
+    });
+  }).then((_) {
+    _validateOutput(failures, 'stderr', error, stderr);
+    if (!failures.isEmpty) throw new TestFailure(failures.join('\n'));
+  }), completes);
+}
+ScheduledProcess startPublish(ScheduledServer server, {List args}) {
+  var tokenEndpoint =
+      server.url.then((url) => url.resolve('/token').toString());
+  if (args == null) args = [];
+  args = flatten(['lish', '--server', tokenEndpoint, args]);
+  return startPub(args: args, tokenEndpoint: tokenEndpoint);
+}
+void confirmPublish(ScheduledProcess pub) {
+  pub.stdout.expect(startsWith('Publishing test_pkg 1.0.0 to '));
+  pub.stdout.expect(
+      emitsLines(
+          "|-- LICENSE\n" "|-- lib\n" "|   '-- test_pkg.dart\n" "'-- pubspec.yaml\n" "\n"
+              "Looks great! Are you ready to upload your package (y/n)?"));
+  pub.writeLine("y");
+}
+ScheduledProcess startPub({List args, Future<Uri> tokenEndpoint}) {
+  String pathInSandbox(String relPath) {
+    return p.join(p.absolute(sandboxDir), relPath);
+  }
+  ensureDir(pathInSandbox(appPath));
+  var dartBin = Platform.executable;
+  if (dartBin.contains(Platform.pathSeparator)) {
+    dartBin = p.absolute(dartBin);
+  }
+  var pubPath = p.join(p.dirname(dartBin), 'snapshots/pub.dart.snapshot');
+  var dartArgs = [pubPath, '--verbose'];
+  dartArgs.addAll(args);
+  if (tokenEndpoint == null) tokenEndpoint = new Future.value();
+  var environmentFuture = tokenEndpoint.then((tokenEndpoint) {
+    var environment = {};
+    environment['_PUB_TESTING'] = 'true';
+    environment['PUB_CACHE'] = pathInSandbox(cachePath);
+    environment['_PUB_TEST_SDK_VERSION'] = "0.1.2+3";
+    if (tokenEndpoint != null) {
+      environment['_PUB_TEST_TOKEN_ENDPOINT'] = tokenEndpoint.toString();
+    }
+    if (_hasServer) {
+      return port.then((p) {
+        environment['PUB_HOSTED_URL'] = "http://localhost:$p";
+        return environment;
+      });
+    }
+    return environment;
+  });
+  return new PubProcess.start(
+      dartBin,
+      dartArgs,
+      environment: environmentFuture,
+      workingDirectory: pathInSandbox(appPath),
+      description: args.isEmpty ? 'pub' : 'pub ${args.first}');
+}
+class PubProcess extends ScheduledProcess {
+  Stream<Pair<log.Level, String>> _log;
+  Stream<String> _stdout;
+  Stream<String> _stderr;
+  PubProcess.start(executable, arguments, {workingDirectory, environment,
+      String description, Encoding encoding: UTF8})
+      : super.start(
+          executable,
+          arguments,
+          workingDirectory: workingDirectory,
+          environment: environment,
+          description: description,
+          encoding: encoding);
+  Stream<Pair<log.Level, String>> _logStream() {
+    if (_log == null) {
+      _log = mergeStreams(
+          _outputToLog(super.stdoutStream(), log.Level.MESSAGE),
+          _outputToLog(super.stderrStream(), log.Level.ERROR));
+    }
+    var pair = tee(_log);
+    _log = pair.first;
+    return pair.last;
+  }
+  final _logLineRegExp = new RegExp(r"^([A-Z ]{4})[:|] (.*)$");
+  final _logLevels = [
+      log.Level.ERROR,
+      log.Level.WARNING,
+      log.Level.MESSAGE,
+      log.Level.IO,
+      log.Level.SOLVER,
+      log.Level.FINE].fold(<String, log.Level>{}, (levels, level) {
+    levels[level.name] = level;
+    return levels;
+  });
+  Stream<Pair<log.Level, String>> _outputToLog(Stream<String> stream,
+      log.Level defaultLevel) {
+    var lastLevel;
+    return stream.map((line) {
+      var match = _logLineRegExp.firstMatch(line);
+      if (match == null) return new Pair<log.Level, String>(defaultLevel, line);
+      var level = _logLevels[match[1]];
+      if (level == null) level = lastLevel;
+      lastLevel = level;
+      return new Pair<log.Level, String>(level, match[2]);
+    });
+  }
+  Stream<String> stdoutStream() {
+    if (_stdout == null) {
+      _stdout = _logStream().expand((entry) {
+        if (entry.first != log.Level.MESSAGE) return [];
+        return [entry.last];
+      });
+    }
+    var pair = tee(_stdout);
+    _stdout = pair.first;
+    return pair.last;
+  }
+  Stream<String> stderrStream() {
+    if (_stderr == null) {
+      _stderr = _logStream().expand((entry) {
+        if (entry.first != log.Level.ERROR &&
+            entry.first != log.Level.WARNING) {
+          return [];
+        }
+        return [entry.last];
+      });
+    }
+    var pair = tee(_stderr);
+    _stderr = pair.first;
+    return pair.last;
+  }
+}
+String get _packageRoot => p.absolute(Platform.packageRoot);
+void ensureGit() {
+  if (Platform.operatingSystem == "windows") {
+    currentSchedule.timeout = new Duration(seconds: 30);
+  }
+  if (!gitlib.isInstalled) {
+    throw new Exception("Git must be installed to run this test.");
+  }
+}
+void makeGlobalPackage(String package, String version,
+    Iterable<d.Descriptor> contents, {Iterable<String> pkg, Map<String,
+    String> hosted}) {
+  serveNoPackages();
+  d.hostedCache([d.dir("$package-$version", contents)]).create();
+  var lockFile = _createLockFile(pkg: pkg, hosted: hosted);
+  var id =
+      new PackageId(package, "hosted", new Version.parse(version), package);
+  lockFile.packages[package] = id;
+  var sources = new SourceRegistry();
+  sources.register(new HostedSource());
+  sources.register(new PathSource());
+  d.dir(
+      cachePath,
+      [
+          d.dir(
+              "global_packages",
+              [d.file("$package.lock", lockFile.serialize(null, sources))])]).create();
+}
+void createLockFile(String package, {Iterable<String> sandbox,
+    Iterable<String> pkg, Map<String, String> hosted}) {
+  var lockFile = _createLockFile(sandbox: sandbox, pkg: pkg, hosted: hosted);
+  var sources = new SourceRegistry();
+  sources.register(new HostedSource());
+  sources.register(new PathSource());
+  d.file(
+      p.join(package, 'pubspec.lock'),
+      lockFile.serialize(null, sources)).create();
+}
+LockFile _createLockFile({Iterable<String> sandbox, Iterable<String> pkg,
+    Map<String, String> hosted}) {
+  var dependencies = {};
+  if (sandbox != null) {
+    for (var package in sandbox) {
+      dependencies[package] = '../$package';
+    }
+  }
+  if (pkg != null) {
+    _addPackage(String package) {
+      if (dependencies.containsKey(package)) return;
+      var packagePath;
+      if (package == 'barback' && _packageOverrides == null) {
+        throw new StateError(
+            "createLockFile() can only create a lock file "
+                "with a barback dependency within a withBarbackVersions() " "block.");
+      }
+      if (_packageOverrides.containsKey(package)) {
+        packagePath = _packageOverrides[package];
+      } else {
+        packagePath = p.join(pkgPath, package);
+      }
+      dependencies[package] = packagePath;
+      var pubspec = loadYaml(readTextFile(p.join(packagePath, 'pubspec.yaml')));
+      var packageDeps = pubspec['dependencies'];
+      if (packageDeps == null) return;
+      packageDeps.keys.forEach(_addPackage);
+    }
+    pkg.forEach(_addPackage);
+  }
+  var lockFile = new LockFile.empty();
+  dependencies.forEach((name, dependencyPath) {
+    var id = new PackageId(name, 'path', new Version(0, 0, 0), {
+      'path': dependencyPath,
+      'relative': p.isRelative(dependencyPath)
+    });
+    lockFile.packages[name] = id;
+  });
+  if (hosted != null) {
+    hosted.forEach((name, version) {
+      var id = new PackageId(name, 'hosted', new Version.parse(version), name);
+      lockFile.packages[name] = id;
+    });
+  }
+  return lockFile;
+}
+void useMockClient(MockClient client) {
+  var oldInnerClient = innerHttpClient;
+  innerHttpClient = client;
+  currentSchedule.onComplete.schedule(() {
+    innerHttpClient = oldInnerClient;
+  }, 'de-activating the mock client');
+}
+Map packageMap(String name, String version, [Map dependencies]) {
+  var package = {
+    "name": name,
+    "version": version,
+    "author": "Natalie Weizenbaum <nweiz@google.com>",
+    "homepage": "http://pub.dartlang.org",
+    "description": "A package, I guess."
+  };
+  if (dependencies != null) package["dependencies"] = dependencies;
+  return package;
+}
+String testAssetPath(String target) {
+  var libPath = libraryPath('test_pub');
+  libPath = libPath.replaceAll('pub_generated', 'pub');
+  return p.join(p.dirname(libPath), 'asset', target);
+}
+Map packageVersionApiMap(Map pubspec, {bool full: false}) {
+  var name = pubspec['name'];
+  var version = pubspec['version'];
+  var map = {
+    'pubspec': pubspec,
+    'version': version,
+    'url': '/api/packages/$name/versions/$version',
+    'archive_url': '/packages/$name/versions/$version.tar.gz',
+    'new_dartdoc_url': '/api/packages/$name/versions/$version' '/new_dartdoc',
+    'package_url': '/api/packages/$name'
+  };
+  if (full) {
+    map.addAll({
+      'downloads': 0,
+      'created': '2012-09-25T18:38:28.685260',
+      'libraries': ['$name.dart'],
+      'uploader': ['nweiz@google.com']
+    });
+  }
+  return map;
+}
+void _validateOutput(List<String> failures, String pipe, expected,
+    String actual) {
+  if (expected == null) return;
+  if (expected is String) {
+    _validateOutputString(failures, pipe, expected, actual);
+  } else {
+    if (expected is RegExp) expected = matches(expected);
+    expect(actual, expected);
+  }
+}
+void _validateOutputString(List<String> failures, String pipe, String expected,
+    String actual) {
+  var actualLines = actual.split("\n");
+  var expectedLines = expected.split("\n");
+  if (expectedLines.last.trim() == '') {
+    expectedLines.removeLast();
+  }
+  var results = [];
+  var failed = false;
+  var length = max(expectedLines.length, actualLines.length);
+  for (var i = 0; i < length; i++) {
+    if (i >= actualLines.length) {
+      failed = true;
+      results.add('? ${expectedLines[i]}');
+    } else if (i >= expectedLines.length) {
+      failed = true;
+      results.add('X ${actualLines[i]}');
+    } else {
+      var expectedLine = expectedLines[i].trim();
+      var actualLine = actualLines[i].trim();
+      if (expectedLine != actualLine) {
+        failed = true;
+        results.add('X ${actualLines[i]}');
+      } else {
+        results.add('| ${actualLines[i]}');
+      }
+    }
+  }
+  if (failed) {
+    failures.add('Expected $pipe:');
+    failures.addAll(expectedLines.map((line) => '| $line'));
+    failures.add('Got:');
+    failures.addAll(results);
+  }
+}
+void _validateOutputJson(List<String> failures, String pipe, expected,
+    String actualText) {
+  var actual;
+  try {
+    actual = JSON.decode(actualText);
+  } on FormatException catch (error) {
+    failures.add('Expected $pipe JSON:');
+    failures.add(expected);
+    failures.add('Got invalid JSON:');
+    failures.add(actualText);
+  }
+  expect(actual, expected);
+}
+typedef Validator ValidatorCreator(Entrypoint entrypoint);
+Future<Pair<List<String>, List<String>>>
+    schedulePackageValidation(ValidatorCreator fn) {
+  return schedule(() {
+    var cache = new SystemCache.withSources(p.join(sandboxDir, cachePath));
+    return syncFuture(() {
+      var validator = fn(new Entrypoint(p.join(sandboxDir, appPath), cache));
+      return validator.validate().then((_) {
+        return new Pair(validator.errors, validator.warnings);
+      });
+    });
+  }, "validating package");
+}
+Matcher pairOf(Matcher firstMatcher, Matcher lastMatcher) =>
+    new _PairMatcher(firstMatcher, lastMatcher);
+class _PairMatcher extends Matcher {
+  final Matcher _firstMatcher;
+  final Matcher _lastMatcher;
+  _PairMatcher(this._firstMatcher, this._lastMatcher);
+  bool matches(item, Map matchState) {
+    if (item is! Pair) return false;
+    return _firstMatcher.matches(item.first, matchState) &&
+        _lastMatcher.matches(item.last, matchState);
+  }
+  Description describe(Description description) {
+    return description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]);
+  }
+}
+StreamMatcher emitsLines(String output) => inOrder(output.split("\n"));
diff --git a/sdk/lib/_internal/pub_generated/test/transcript_test.dart b/sdk/lib/_internal/pub_generated/test/transcript_test.dart
new file mode 100644
index 0000000..ff58358
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transcript_test.dart
@@ -0,0 +1,49 @@
+library version_test;
+import 'package:unittest/unittest.dart';
+import 'test_pub.dart';
+import '../lib/src/transcript.dart';
+main() {
+  initConfig();
+  test("discards from the middle once it reaches the maximum", () {
+    var transcript = new Transcript<String>(4);
+    forEachToString() {
+      var result = "";
+      transcript.forEach((entry) => result += entry, (n) => result += "[$n]");
+      return result;
+    }
+    expect(forEachToString(), equals(""));
+    transcript.add("a");
+    expect(forEachToString(), equals("a"));
+    transcript.add("b");
+    expect(forEachToString(), equals("ab"));
+    transcript.add("c");
+    expect(forEachToString(), equals("abc"));
+    transcript.add("d");
+    expect(forEachToString(), equals("abcd"));
+    transcript.add("e");
+    expect(forEachToString(), equals("ab[1]de"));
+    transcript.add("f");
+    expect(forEachToString(), equals("ab[2]ef"));
+  });
+  test("does not discard if it doesn't reach the maximum", () {
+    var transcript = new Transcript<String>(40);
+    forEachToString() {
+      var result = "";
+      transcript.forEach((entry) => result += entry, (n) => result += "[$n]");
+      return result;
+    }
+    expect(forEachToString(), equals(""));
+    transcript.add("a");
+    expect(forEachToString(), equals("a"));
+    transcript.add("b");
+    expect(forEachToString(), equals("ab"));
+    transcript.add("c");
+    expect(forEachToString(), equals("abc"));
+    transcript.add("d");
+    expect(forEachToString(), equals("abcd"));
+    transcript.add("e");
+    expect(forEachToString(), equals("abcde"));
+    transcript.add("f");
+    expect(forEachToString(), equals("abcdef"));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/a_transformer_rejects_its_config_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/a_transformer_rejects_its_config_test.dart
new file mode 100644
index 0000000..c103056
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/a_transformer_rejects_its_config_test.dart
@@ -0,0 +1,45 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const REJECT_CONFIG_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class RejectConfigTransformer extends Transformer {
+  RejectConfigTransformer.asPlugin(BarbackSettings settings) {
+    throw "I hate these settings!";
+  }
+
+  Future<bool> isPrimary(_) => new Future.value(true);
+  Future apply(Transform transform) {}
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("a transformer can reject is configuration", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [{
+              "myapp/src/transformer": {
+                'foo': 'bar'
+              }
+            }]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.dir(
+                        "src",
+                        [d.file("transformer.dart", REJECT_CONFIG_TRANSFORMER)])])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var pub = startPubServe();
+      pub.stderr.expect(
+          endsWith('Error loading transformer: I hate these ' 'settings!'));
+      pub.shouldExit(1);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/asset_not_found_exceptions_are_detectable_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/asset_not_found_exceptions_are_detectable_test.dart
new file mode 100644
index 0000000..9faf871
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/asset_not_found_exceptions_are_detectable_test.dart
@@ -0,0 +1,51 @@
+library pub_tests;
+import 'dart:convert';
+import 'package:scheduled_test/scheduled_stream.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+final transformer = """
+import 'dart:async';
+import 'dart:convert';
+
+import 'package:barback/barback.dart';
+
+class GetInputTransformer extends Transformer {
+  GetInputTransformer.asPlugin();
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    return transform.readInputAsString(new AssetId('myapp', 'nonexistent'))
+        .catchError((error) {
+      if (error is! AssetNotFoundException) throw error;
+      transform.addOutput(new Asset.fromString(transform.primaryInput.id,
+          JSON.encode({
+        'package': error.id.package,
+        'path': error.id.path
+      })));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("AssetNotFoundExceptions are detectable", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", transformer)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var server = pubServe();
+      requestShouldSucceed("foo.txt", JSON.encode({
+        "package": "myapp",
+        "path": "nonexistent"
+      }));
+      endPubServe();
+      server.stderr.expect(isDone);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/can_log_messages_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/can_log_messages_test.dart
new file mode 100644
index 0000000..43f3042
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/can_log_messages_test.dart
@@ -0,0 +1,94 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import 'package:scheduled_test/scheduled_stream.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+const SOURCE_MAPS_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+import 'package:source_maps/source_maps.dart';
+
+class RewriteTransformer extends Transformer {
+  RewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    transform.logger.info('info!');
+    transform.logger.warning('Warning!',
+        asset: transform.primaryInput.id.changeExtension('.foo'));
+    var sourceFile = new SourceFile.text(
+        'http://fake.com/not_real.dart',
+        'not a real\\ndart file');
+    transform.logger.error('ERROR!', span: new FileSpan(sourceFile, 11));
+    return transform.primaryInput.readAsString().then((contents) {
+      var id = transform.primaryInput.id.changeExtension(".out");
+      transform.addOutput(new Asset.fromString(id, "\$contents.out"));
+    });
+  }
+}
+""";
+const SOURCE_SPAN_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+import 'package:source_span/source_span.dart';
+
+class RewriteTransformer extends Transformer {
+  RewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    transform.logger.info('info!');
+    transform.logger.warning('Warning!',
+        asset: transform.primaryInput.id.changeExtension('.foo'));
+    var sourceFile = new SourceFile('not a real\\ndart file',
+        url: 'http://fake.com/not_real.dart');
+    transform.logger.error('ERROR!', span: sourceFile.span(11, 12));
+    return transform.primaryInput.readAsString().then((contents) {
+      var id = transform.primaryInput.id.changeExtension(".out");
+      transform.addOutput(new Asset.fromString(id, "\$contents.out"));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("<0.15.0", () => runTest(SOURCE_MAPS_TRANSFORMER));
+  withBarbackVersions(">=0.14.2", () => runTest(SOURCE_SPAN_TRANSFORMER));
+}
+void runTest(String transformerText) {
+  integration("can log messages", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "transformers": ["myapp/src/transformer"]
+      }),
+          d.dir("lib", [d.dir("src", [d.file("transformer.dart", transformerText)])]),
+          d.dir("web", [d.file("foo.txt", "foo")])]).create();
+    createLockFile('myapp', pkg: ['barback']);
+    var pub = startPub(args: ["build"]);
+    pub.stdout.expect(startsWith("Loading source assets..."));
+    pub.stdout.expect(consumeWhile(matches("Loading .* transformers...")));
+    pub.stdout.expect(startsWith("Building myapp..."));
+    pub.stdout.expect(emitsLines("""
+[Rewrite on myapp|web/foo.txt]:
+info!"""));
+    pub.stderr.expect(emitsLines("""
+[Rewrite on myapp|web/foo.txt with input myapp|web/foo.foo]:
+Warning!
+[Rewrite on myapp|web/foo.txt]:"""));
+    pub.stderr.expect(
+        allOf(
+            [
+                contains("2"),
+                contains("1"),
+                contains("http://fake.com/not_real.dart"),
+                contains("ERROR")]));
+    pub.stderr.expect(allow(inOrder(["d", "^"])));
+    pub.stderr.expect("Build failed.");
+    pub.shouldExit(exit_codes.DATA);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/can_use_consume_primary_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/can_use_consume_primary_test.dart
new file mode 100644
index 0000000..d3c6802
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/can_use_consume_primary_test.dart
@@ -0,0 +1,42 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class RewriteTransformer extends Transformer {
+  RewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    transform.consumePrimary();
+    return transform.primaryInput.readAsString().then((contents) {
+      var id = transform.primaryInput.id.changeExtension(".out");
+      var asset = new Asset.fromString(id, "\$contents.out");
+      transform.addOutput(asset);
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("a transform can use consumePrimary", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", TRANSFORMER)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("foo.out", "foo.out");
+      requestShould404("foo.txt");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/can_use_has_input_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/can_use_has_input_test.dart
new file mode 100644
index 0000000..b13e2f0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/can_use_has_input_test.dart
@@ -0,0 +1,44 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class RewriteTransformer extends Transformer {
+  RewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    return Future.wait([
+      transform.hasInput(transform.primaryInput.id),
+      transform.hasInput(new AssetId('hooble', 'whatsit'))
+    ]).then((results) {
+      var id = transform.primaryInput.id.changeExtension(".out");
+      var asset = new Asset.fromString(id,
+          "primary: \${results[0]}, secondary: \${results[1]}");
+      transform.addOutput(asset);
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("a transform can use hasInput", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", TRANSFORMER)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("foo.out", "primary: true, secondary: false");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/can_use_read_input_as_string_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/can_use_read_input_as_string_test.dart
new file mode 100644
index 0000000..87ed58f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/can_use_read_input_as_string_test.dart
@@ -0,0 +1,40 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class RewriteTransformer extends Transformer {
+  RewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    return transform.readInputAsString(transform.primaryInput.id)
+        .then((contents) {
+      var id = transform.primaryInput.id.changeExtension(".out");
+      transform.addOutput(new Asset.fromString(id, "\$contents.out"));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("a transform can use readInputAsString", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", TRANSFORMER)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("foo.out", "foo.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/can_use_read_input_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/can_use_read_input_test.dart
new file mode 100644
index 0000000..50bb75f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/can_use_read_input_test.dart
@@ -0,0 +1,41 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class RewriteTransformer extends Transformer {
+  RewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    return transform.readInput(transform.primaryInput.id).toList()
+        .then((contents) {
+      var id = transform.primaryInput.id.changeExtension(".out");
+      var asset = new Asset.fromString(id, "\$contents.out");
+      transform.addOutput(asset);
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("a transform can use readInputAsString", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", TRANSFORMER)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("foo.out", "[[102, 111, 111]].out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/configuration/configuration_defaults_to_empty_map_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/configuration/configuration_defaults_to_empty_map_test.dart
new file mode 100644
index 0000000..0f9a52f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/configuration/configuration_defaults_to_empty_map_test.dart
@@ -0,0 +1,44 @@
+library pub_tests;
+import 'dart:convert';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../../serve/utils.dart';
+final transformer = """
+import 'dart:async';
+import 'dart:convert';
+
+import 'package:barback/barback.dart';
+
+class ConfigTransformer extends Transformer {
+  final BarbackSettings settings;
+
+  ConfigTransformer.asPlugin(this.settings);
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    return transform.primaryInput.readAsString().then((contents) {
+      var id = transform.primaryInput.id.changeExtension(".json");
+      transform.addOutput(
+          new Asset.fromString(id, JSON.encode(settings.configuration)));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("configuration defaults to an empty map", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", transformer)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var server = pubServe();
+      requestShouldSucceed("foo.json", JSON.encode({}));
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/configuration/passes_configuration_to_a_transformer_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/configuration/passes_configuration_to_a_transformer_test.dart
new file mode 100644
index 0000000..d245784
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/configuration/passes_configuration_to_a_transformer_test.dart
@@ -0,0 +1,49 @@
+library pub_tests;
+import 'dart:convert';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../../serve/utils.dart';
+final transformer = """
+import 'dart:async';
+import 'dart:convert';
+
+import 'package:barback/barback.dart';
+
+class ConfigTransformer extends Transformer {
+  final BarbackSettings settings;
+
+  ConfigTransformer.asPlugin(this.settings);
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    return transform.primaryInput.readAsString().then((contents) {
+      var id = transform.primaryInput.id.changeExtension(".json");
+      transform.addOutput(
+        new Asset.fromString(id, JSON.encode(settings.configuration)));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("passes configuration to a transformer", () {
+      var configuration = {
+        "param": ["list", "of", "values"]
+      };
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [{
+              "myapp/src/transformer": configuration
+            }]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", transformer)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var server = pubServe();
+      requestShouldSucceed("foo.json", JSON.encode(configuration));
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/configuration/with_configuration_only_instantiates_configurable_transformers_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/configuration/with_configuration_only_instantiates_configurable_transformers_test.dart
new file mode 100644
index 0000000..e79b555
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/configuration/with_configuration_only_instantiates_configurable_transformers_test.dart
@@ -0,0 +1,65 @@
+library pub_tests;
+import 'dart:convert';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../../serve/utils.dart';
+final transformer = """
+import 'dart:async';
+import 'dart:convert';
+
+import 'package:barback/barback.dart';
+
+class ConfigTransformer extends Transformer {
+  final BarbackSettings settings;
+
+  ConfigTransformer.asPlugin(this.settings);
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    return transform.primaryInput.readAsString().then((contents) {
+      var id = transform.primaryInput.id.changeExtension(".json");
+      transform.addOutput(
+          new Asset.fromString(id, JSON.encode(settings.configuration)));
+    });
+  }
+}
+
+class RewriteTransformer extends Transformer {
+  RewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    return transform.primaryInput.readAsString().then((contents) {
+      var id = transform.primaryInput.id.changeExtension(".out");
+      transform.addOutput(new Asset.fromString(id, "\$contents.out"));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration(
+        "with configuration, only instantiates configurable " "transformers",
+        () {
+      var configuration = {
+        "param": ["list", "of", "values"]
+      };
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [{
+              "myapp/src/transformer": configuration
+            }]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", transformer)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var server = pubServe();
+      requestShouldSucceed("foo.json", JSON.encode(configuration));
+      requestShould404("foo.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/does_not_run_a_transform_on_an_input_in_another_package_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/does_not_run_a_transform_on_an_input_in_another_package_test.dart
new file mode 100644
index 0000000..1e1bdd0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/does_not_run_a_transform_on_an_input_in_another_package_test.dart
@@ -0,0 +1,30 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("does not run a transform on an input in another package", () {
+      d.dir("foo", [d.pubspec({
+          "name": "foo",
+          "version": "0.0.1",
+          "transformers": ["foo/transformer"]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.file("transformer.dart", REWRITE_TRANSFORMER),
+                    d.file("foo.txt", "foo")])]).create();
+      d.dir(appPath, [d.appPubspec({
+          "foo": {
+            "path": "../foo"
+          }
+        }), d.dir("lib", [d.file("bar.txt", "bar")])]).create();
+      createLockFile('myapp', sandbox: ['foo'], pkg: ['barback']);
+      pubServe();
+      requestShould404("packages/myapp/bar.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/exclusion/exclude_asset_list_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/exclude_asset_list_test.dart
new file mode 100644
index 0000000..7f76cfb
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/exclude_asset_list_test.dart
@@ -0,0 +1,32 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("excludes a list of assets", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [{
+              "myapp/src/transformer": {
+                "\$exclude": ["web/foo.txt", "web/sub/foo.txt"]
+              }
+            }]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", REWRITE_TRANSFORMER)])]),
+            d.dir(
+                "web",
+                [
+                    d.file("foo.txt", "foo"),
+                    d.file("bar.txt", "bar"),
+                    d.dir("sub", [d.file("foo.txt", "foo")])])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShould404("foo.out");
+      requestShould404("sub/foo.out");
+      requestShouldSucceed("bar.out", "bar.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/exclusion/exclude_asset_string_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/exclude_asset_string_test.dart
new file mode 100644
index 0000000..9ea2bf6
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/exclude_asset_string_test.dart
@@ -0,0 +1,32 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("allows a single string as the asset to exclude", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [{
+              "myapp/src/transformer": {
+                "\$exclude": "web/foo.txt"
+              }
+            }]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", REWRITE_TRANSFORMER)])]),
+            d.dir(
+                "web",
+                [
+                    d.file("foo.txt", "foo"),
+                    d.file("bar.txt", "bar"),
+                    d.dir("sub", [d.file("foo.txt", "foo")])])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShould404("foo.out");
+      requestShouldSucceed("sub/foo.out", "foo.out");
+      requestShouldSucceed("bar.out", "bar.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/exclusion/include_asset_list_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/include_asset_list_test.dart
new file mode 100644
index 0000000..4f6cb7e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/include_asset_list_test.dart
@@ -0,0 +1,32 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("includes assets", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [{
+              "myapp/src/transformer": {
+                "\$include": ["web/foo.txt", "web/sub/foo.txt"]
+              }
+            }]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", REWRITE_TRANSFORMER)])]),
+            d.dir(
+                "web",
+                [
+                    d.file("foo.txt", "foo"),
+                    d.file("bar.txt", "bar"),
+                    d.dir("sub", [d.file("foo.txt", "foo")])])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("foo.out", "foo.out");
+      requestShouldSucceed("sub/foo.out", "foo.out");
+      requestShould404("bar.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/exclusion/include_asset_string_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/include_asset_string_test.dart
new file mode 100644
index 0000000..2662583
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/include_asset_string_test.dart
@@ -0,0 +1,32 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("allows a single string as the asset to include", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [{
+              "myapp/src/transformer": {
+                "\$include": "web/foo.txt"
+              }
+            }]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", REWRITE_TRANSFORMER)])]),
+            d.dir(
+                "web",
+                [
+                    d.file("foo.txt", "foo"),
+                    d.file("bar.txt", "bar"),
+                    d.dir("sub", [d.file("foo.txt", "foo")])])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("foo.out", "foo.out");
+      requestShould404("sub/foo.out");
+      requestShould404("bar.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/exclusion/includes_before_excludes_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/includes_before_excludes_test.dart
new file mode 100644
index 0000000..4e5e84e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/includes_before_excludes_test.dart
@@ -0,0 +1,33 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("applies includes before excludes if both are present", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [{
+              "myapp/src/transformer": {
+                "\$include": ["web/a.txt", "web/b.txt"],
+                "\$exclude": "web/a.txt"
+              }
+            }]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", REWRITE_TRANSFORMER)])]),
+            d.dir(
+                "web",
+                [
+                    d.file("a.txt", "a.txt"),
+                    d.file("b.txt", "b.txt"),
+                    d.file("c.txt", "c.txt")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShould404("a.out");
+      requestShouldSucceed("b.out", "b.txt.out");
+      requestShould404("c.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/exclusion/works_on_aggregate_transformer_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/works_on_aggregate_transformer_test.dart
new file mode 100644
index 0000000..fbed5cf
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/works_on_aggregate_transformer_test.dart
@@ -0,0 +1,58 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../../serve/utils.dart';
+const AGGREGATE_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+import 'package:path/path.dart' as p;
+
+class ManyToOneTransformer extends AggregateTransformer {
+  ManyToOneTransformer.asPlugin();
+
+  String classifyPrimary(AssetId id) {
+    if (id.extension != '.txt') return null;
+    return p.url.dirname(id.path);
+  }
+
+  Future apply(AggregateTransform transform) {
+    return transform.primaryInputs.toList().then((assets) {
+      assets.sort((asset1, asset2) => asset1.id.path.compareTo(asset2.id.path));
+      return Future.wait(assets.map((asset) => asset.readAsString()));
+    }).then((contents) {
+      var id = new AssetId(transform.package,
+          p.url.join(transform.key, 'out.txt'));
+      transform.addOutput(new Asset.fromString(id, contents.join('\\n')));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions(">=0.14.1", () {
+    integration("works on an aggregate transformer", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [{
+              "myapp": {
+                "\$include": ["web/a.txt", "web/b.txt", "web/c.txt"],
+                "\$exclude": "web/a.txt"
+              }
+            }]
+        }),
+            d.dir("lib", [d.file("transformer.dart", AGGREGATE_TRANSFORMER)]),
+            d.dir(
+                "web",
+                [
+                    d.file("a.txt", "a"),
+                    d.file("b.txt", "b"),
+                    d.file("c.txt", "c"),
+                    d.file("d.txt", "d")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("out.txt", "b\nc");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/exclusion/works_on_dart2js_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/works_on_dart2js_test.dart
new file mode 100644
index 0000000..314b17d
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/works_on_dart2js_test.dart
@@ -0,0 +1,39 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_stream.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("works on the dart2js transformer", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [{
+              "\$dart2js": {
+                "\$include": ["web/a.dart", "web/b.dart"],
+                "\$exclude": "web/a.dart"
+              }
+            }]
+        }),
+            d.dir(
+                "web",
+                [
+                    d.file("a.dart", "void main() => print('hello');"),
+                    d.file("b.dart", "void main() => print('hello');"),
+                    d.file("c.dart", "void main() => print('hello');")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var server = pubServe();
+      server.stdout.expect("Build completed successfully");
+      requestShould404("a.dart.js");
+      requestShouldSucceed("b.dart.js", isNot(isEmpty));
+      server.stdout.expect(
+          consumeThrough(
+              emitsLines("[Info from Dart2JS]:\n" "Compiling myapp|web/b.dart...")));
+      server.stdout.expect(consumeThrough("Build completed successfully"));
+      requestShould404("c.dart.js");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/exclusion/works_on_lazy_transformer_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/works_on_lazy_transformer_test.dart
new file mode 100644
index 0000000..7a2adc80
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/works_on_lazy_transformer_test.dart
@@ -0,0 +1,37 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_stream.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("works on a lazy transformer", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [{
+              "myapp": {
+                "\$include": ["web/a.txt", "web/b.txt"],
+                "\$exclude": "web/a.txt"
+              }
+            }]
+        }),
+            d.dir("lib", [d.file("transformer.dart", LAZY_TRANSFORMER)]),
+            d.dir(
+                "web",
+                [d.file("a.txt", "a"), d.file("b.txt", "b"), d.file("c.txt", "c")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var server = pubServe();
+      server.stdout.expect("Build completed successfully");
+      requestShould404("a.out");
+      requestShouldSucceed("b.out", isNot(isEmpty));
+      server.stdout.expect(
+          consumeThrough(
+              emitsLines("[Info from LazyRewrite]:\n" "Rewriting myapp|web/b.txt.")));
+      server.stdout.expect(consumeThrough("Build completed successfully"));
+      requestShould404("c.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/exclusion/works_on_transformer_group_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/works_on_transformer_group_test.dart
new file mode 100644
index 0000000..b5b8927
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/exclusion/works_on_transformer_group_test.dart
@@ -0,0 +1,51 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+import '../../serve/utils.dart';
+const GROUP = """
+import 'package:barback/barback.dart';
+
+import 'transformer.dart';
+
+class RewriteGroup implements TransformerGroup {
+  RewriteGroup.asPlugin();
+
+  Iterable<Iterable> get phases => [[new RewriteTransformer.asPlugin()]];
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("works on a transformer group", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [{
+              "myapp/src/group": {
+                "\$include": ["web/a.txt", "web/b.txt"],
+                "\$exclude": "web/a.txt"
+              }
+            }]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.dir(
+                        "src",
+                        [
+                            d.file("transformer.dart", REWRITE_TRANSFORMER),
+                            d.file("group.dart", GROUP)])]),
+            d.dir(
+                "web",
+                [
+                    d.file("a.txt", "a.txt"),
+                    d.file("b.txt", "b.txt"),
+                    d.file("c.txt", "c.txt")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShould404("a.out");
+      requestShouldSucceed("b.out", "b.txt.out");
+      requestShould404("c.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_file_that_defines_no_transforms_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_file_that_defines_no_transforms_test.dart
new file mode 100644
index 0000000..3c250bd
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_file_that_defines_no_transforms_test.dart
@@ -0,0 +1,24 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_stream.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("fails to load a file that defines no transforms", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/transformer"]
+        }),
+            d.dir("lib", [d.file("transformer.dart", "library does_nothing;")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var pub = startPubServe();
+      pub.stderr.expect(startsWith('No transformers were defined in '));
+      pub.stderr.expect(startsWith('required by myapp.'));
+      pub.shouldExit(1);
+      pub.stderr.expect(never(contains('This is an unexpected error')));
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_non_existent_transform_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_non_existent_transform_test.dart
new file mode 100644
index 0000000..71ef935
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_non_existent_transform_test.dart
@@ -0,0 +1,19 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("fails to load a non-existent transform", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/transform"]
+        })]).create();
+      var pub = startPubServe();
+      pub.stderr.expect(
+          'Transformer library "package:myapp/transform.dart" not found.');
+      pub.shouldExit(1);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_pubspec_with_reserved_transformer_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_pubspec_with_reserved_transformer_test.dart
new file mode 100644
index 0000000..25f8875
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_pubspec_with_reserved_transformer_test.dart
@@ -0,0 +1,27 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("fails to load a pubspec with reserved transformer", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["\$nonexistent"]
+        }),
+            d.dir(
+                "lib",
+                [d.dir("src", [d.file("transformer.dart", REWRITE_TRANSFORMER)])])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var pub = startPubServe();
+      pub.stderr.expect(
+          contains(
+              'Invalid transformer config: Unsupported '
+                  'built-in transformer \$nonexistent.'));
+      pub.shouldExit(exit_codes.DATA);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_transform_from_a_non_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_transform_from_a_non_dependency_test.dart
new file mode 100644
index 0000000..c44de8d3
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_transform_from_a_non_dependency_test.dart
@@ -0,0 +1,20 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exit_codes.dart' as exit_codes;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("fails to load a transform from a non-dependency", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["foo"]
+        })]).create();
+      var pub = startPubServe();
+      pub.stderr.expect(contains('"foo" is not a dependency.'));
+      pub.shouldExit(exit_codes.DATA);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_transform_with_a_syntax_error_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_transform_with_a_syntax_error_test.dart
new file mode 100644
index 0000000..e99474c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_transform_with_a_syntax_error_test.dart
@@ -0,0 +1,25 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_stream.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("fails to load a transform with a syntax error", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir(
+                "lib",
+                [d.dir("src", [d.file("transformer.dart", "syntax error")])])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var pub = startPubServe();
+      pub.stderr.expect(contains("unexpected token 'syntax'"));
+      pub.shouldExit(1);
+      pub.stderr.expect(never(contains('This is an unexpected error')));
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_transform_with_an_import_error_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_transform_with_an_import_error_test.dart
new file mode 100644
index 0000000..948fb57
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_a_transform_with_an_import_error_test.dart
@@ -0,0 +1,27 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("fails to load a transform with an import error", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.dir(
+                        "src",
+                        [d.file("transformer.dart", "import 'does/not/exist.dart';")])])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var pub = startPubServe();
+      pub.stderr.expect("'Unhandled exception:");
+      pub.stderr.expect(startsWith("Uncaught Error: Failure getting "));
+      pub.shouldExit(1);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_an_unconfigurable_transformer_when_config_is_passed_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_an_unconfigurable_transformer_when_config_is_passed_test.dart
new file mode 100644
index 0000000..f85093a
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/fails_to_load_an_unconfigurable_transformer_when_config_is_passed_test.dart
@@ -0,0 +1,30 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration(
+        "fails to load an unconfigurable transformer when config is " "passed",
+        () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [{
+              "myapp/src/transformer": {
+                'foo': 'bar'
+              }
+            }]
+        }),
+            d.dir(
+                "lib",
+                [d.dir("src", [d.file("transformer.dart", REWRITE_TRANSFORMER)])])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var pub = startPubServe();
+      pub.stderr.expect(
+          startsWith('No transformers that accept configuration ' 'were defined in '));
+      pub.shouldExit(1);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/loads_a_declaring_aggregate_transformer_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/loads_a_declaring_aggregate_transformer_test.dart
new file mode 100644
index 0000000..ba549cd
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/loads_a_declaring_aggregate_transformer_test.dart
@@ -0,0 +1,58 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const AGGREGATE_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+import 'package:path/path.dart' as p;
+
+class ManyToOneTransformer extends AggregateTransformer
+    implements DeclaringAggregateTransformer {
+  ManyToOneTransformer.asPlugin();
+
+  String classifyPrimary(AssetId id) {
+    if (id.extension != '.out') return null;
+    return p.url.dirname(id.path);
+  }
+
+  Future apply(AggregateTransform transform) {
+    return transform.primaryInputs.toList().then((assets) {
+      assets.sort((asset1, asset2) => asset1.id.path.compareTo(asset2.id.path));
+      return Future.wait(assets.map((asset) => asset.readAsString()));
+    }).then((contents) {
+      var id = new AssetId(transform.package,
+          p.url.join(transform.key, 'out.final'));
+      transform.addOutput(new Asset.fromString(id, contents.join('\\n')));
+    });
+  }
+
+  void declareOutputs(DeclaringAggregateTransform transform) {
+    transform.declareOutput(new AssetId(transform.package,
+        p.url.join(transform.key, 'out.final')));
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions(">=0.14.1", () {
+    integration("loads a declaring aggregate transformer", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/lazy", "myapp/aggregate"]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.file("lazy.dart", LAZY_TRANSFORMER),
+                    d.file("aggregate.dart", AGGREGATE_TRANSFORMER)]),
+            d.dir("web", [d.file("foo.txt", "foo"), d.file("bar.txt", "bar")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var server = pubServe();
+      server.stdout.expect("Build completed successfully");
+      requestShouldSucceed("out.final", "bar.out\nfoo.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/loads_a_diamond_transformer_dependency_graph_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/loads_a_diamond_transformer_dependency_graph_test.dart
new file mode 100644
index 0000000..efd1f44
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/loads_a_diamond_transformer_dependency_graph_test.dart
@@ -0,0 +1,65 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("loads a diamond transformer dependency graph", () {
+      d.dir("top", [d.pubspec({
+          "name": "top",
+          "version": "1.0.0"
+        }),
+            d.dir("lib", [d.file("transformer.dart", dartTransformer('top'))])]).create();
+      d.dir("left", [d.pubspec({
+          "name": "left",
+          "version": "1.0.0",
+          "transformers": ["top/transformer"],
+          "dependencies": {
+            "top": {
+              "path": "../top"
+            }
+          }
+        }),
+            d.dir("lib", [d.file("transformer.dart", dartTransformer('left'))])]).create();
+      d.dir("right", [d.pubspec({
+          "name": "right",
+          "version": "1.0.0",
+          "transformers": ["top/transformer"],
+          "dependencies": {
+            "top": {
+              "path": "../top"
+            }
+          }
+        }),
+            d.dir("lib", [d.file("transformer.dart", dartTransformer('right'))])]).create();
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [
+              "left/transformer",
+              "right/transformer",
+              "myapp/transformer"],
+          "dependencies": {
+            'left': {
+              'path': '../left'
+            },
+            'right': {
+              'path': '../right'
+            }
+          }
+        }),
+            d.dir("lib", [d.file("transformer.dart", dartTransformer('myapp'))]),
+            d.dir("web", [d.file("main.dart", 'const TOKEN = "main.dart";')])]).create();
+      createLockFile(
+          'myapp',
+          sandbox: ['top', 'left', 'right'],
+          pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed(
+          "main.dart",
+          'const TOKEN = "(((main.dart, (left, top)), (right, top)), ((myapp, '
+              '(left, top)), (right, top)))";');
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/loads_a_lazy_aggregate_transformer_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/loads_a_lazy_aggregate_transformer_test.dart
new file mode 100644
index 0000000..63281e4
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/loads_a_lazy_aggregate_transformer_test.dart
@@ -0,0 +1,54 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const AGGREGATE_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+import 'package:path/path.dart' as p;
+
+class ManyToOneTransformer extends AggregateTransformer
+    implements LazyAggregateTransformer {
+  ManyToOneTransformer.asPlugin();
+
+  String classifyPrimary(AssetId id) {
+    if (id.extension != '.txt') return null;
+    return p.url.dirname(id.path);
+  }
+
+  Future apply(AggregateTransform transform) {
+    return transform.primaryInputs.toList().then((assets) {
+      assets.sort((asset1, asset2) => asset1.id.path.compareTo(asset2.id.path));
+      return Future.wait(assets.map((asset) => asset.readAsString()));
+    }).then((contents) {
+      var id = new AssetId(transform.package,
+          p.url.join(transform.key, 'out.txt'));
+      transform.addOutput(new Asset.fromString(id, contents.join('\\n')));
+    });
+  }
+
+  void declareOutputs(DeclaringAggregateTransform transform) {
+    transform.declareOutput(new AssetId(transform.package,
+        p.url.join(transform.key, 'out.txt')));
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions(">=0.14.1", () {
+    integration("loads a lazy aggregate transformer", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp"]
+        }),
+            d.dir("lib", [d.file("transformer.dart", AGGREGATE_TRANSFORMER)]),
+            d.dir("web", [d.file("foo.txt", "foo"), d.file("bar.txt", "bar")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var server = pubServe();
+      server.stdout.expect("Build completed successfully");
+      requestShouldSucceed("out.txt", "bar\nfoo");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/loads_a_transformer_defined_in_an_exported_library_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/loads_a_transformer_defined_in_an_exported_library_test.dart
new file mode 100644
index 0000000..67ba9ee
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/loads_a_transformer_defined_in_an_exported_library_test.dart
@@ -0,0 +1,25 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("loads a transformer defined in an exported library", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp"]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.file("myapp.dart", "export 'src/transformer.dart';"),
+                    d.dir("src", [d.file("transformer.dart", REWRITE_TRANSFORMER)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("foo.out", "foo.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/loads_an_aggregate_transformer_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/loads_an_aggregate_transformer_test.dart
new file mode 100644
index 0000000..fd12075
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/loads_an_aggregate_transformer_test.dart
@@ -0,0 +1,47 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const AGGREGATE_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+import 'package:path/path.dart' as p;
+
+class ManyToOneTransformer extends AggregateTransformer {
+  ManyToOneTransformer.asPlugin();
+
+  String classifyPrimary(AssetId id) {
+    if (id.extension != '.txt') return null;
+    return p.url.dirname(id.path);
+  }
+
+  Future apply(AggregateTransform transform) {
+    return transform.primaryInputs.toList().then((assets) {
+      assets.sort((asset1, asset2) => asset1.id.path.compareTo(asset2.id.path));
+      return Future.wait(assets.map((asset) => asset.readAsString()));
+    }).then((contents) {
+      var id = new AssetId(transform.package,
+          p.url.join(transform.key, 'out.txt'));
+      transform.addOutput(new Asset.fromString(id, contents.join('\\n')));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions(">=0.14.1", () {
+    integration("loads an aggregate transformer", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp"]
+        }),
+            d.dir("lib", [d.file("transformer.dart", AGGREGATE_TRANSFORMER)]),
+            d.dir("web", [d.file("foo.txt", "foo"), d.file("bar.txt", "bar")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("out.txt", "bar\nfoo");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/loads_different_configurations_from_the_same_isolate_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/loads_different_configurations_from_the_same_isolate_test.dart
new file mode 100644
index 0000000..bb64430
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/loads_different_configurations_from_the_same_isolate_test.dart
@@ -0,0 +1,57 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("loads different configurations from the same isolate", () {
+      d.dir("foo", [d.pubspec({
+          "name": "foo",
+          "version": "1.0.0",
+          "transformers": [{
+              "foo/first": {
+                "addition": " in foo"
+              }
+            }, "foo/second"]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.file("first.dart", dartTransformer('foo/first')),
+                    d.file("second.dart", dartTransformer('foo/second'))])]).create();
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [{
+              "foo/first": {
+                "addition": " in myapp",
+                "\$include": "web/first.dart"
+              }
+            }, {
+              "foo/second": {
+                "\$include": "web/second.dart"
+              }
+            }],
+          "dependencies": {
+            'foo': {
+              'path': '../foo'
+            }
+          }
+        }),
+            d.dir(
+                "web",
+                [
+                    d.file("first.dart", 'const TOKEN = "myapp/first";'),
+                    d.file("second.dart", 'const TOKEN = "myapp/second";')])]).create();
+      createLockFile('myapp', sandbox: ['foo'], pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed(
+          "first.dart",
+          'const TOKEN = "(myapp/first, foo/first in myapp)";');
+      requestShouldSucceed(
+          "second.dart",
+          'const TOKEN = "(myapp/second, (foo/second, foo/first in foo))";');
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/multiple_transformers_reject_their_config_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/multiple_transformers_reject_their_config_test.dart
new file mode 100644
index 0000000..e5f7f50
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/multiple_transformers_reject_their_config_test.dart
@@ -0,0 +1,59 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_stream.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const REJECT_CONFIG_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class RejectConfigTransformer extends Transformer {
+  RejectConfigTransformer.asPlugin(BarbackSettings settings) {
+    throw "I hate these settings!";
+  }
+
+  Future<bool> isPrimary(_) => new Future.value(true);
+  Future apply(Transform transform) {}
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration(
+        "multiple transformers in the same phase reject their " "configurations",
+        () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": [[{
+                "myapp/src/transformer": {
+                  'foo': 'bar'
+                }
+              }, {
+                "myapp/src/transformer": {
+                  'baz': 'bang'
+                }
+              }, {
+                "myapp/src/transformer": {
+                  'qux': 'fblthp'
+                }
+              }]]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.dir(
+                        "src",
+                        [d.file("transformer.dart", REJECT_CONFIG_TRANSFORMER)])])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var pub = startPubServe();
+      for (var i = 0; i < 3; i++) {
+        pub.stderr.expect(
+            consumeThrough(
+                endsWith('Error loading transformer: ' 'I hate these settings!')));
+      }
+      pub.shouldExit(1);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/prefers_transformer_to_library_name_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/prefers_transformer_to_library_name_test.dart
new file mode 100644
index 0000000..6df0c92
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/prefers_transformer_to_library_name_test.dart
@@ -0,0 +1,44 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const WRONG_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class RewriteTransformer extends Transformer {
+  RewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) {
+    return transform.primaryInput.readAsString().then((contents) {
+      var id = transform.primaryInput.id.changeExtension(".wrong");
+      transform.addOutput(new Asset.fromString(id, "\$contents.wrong"));
+    });
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("prefers transformer.dart to <package name>.dart", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp"]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.file("transformer.dart", REWRITE_TRANSFORMER),
+                    d.file("myapp.dart", WRONG_TRANSFORMER)]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("foo.out", "foo.out");
+      requestShould404("foo.wrong");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/prints_a_transform_error_in_apply_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/prints_a_transform_error_in_apply_test.dart
new file mode 100644
index 0000000..25241a9
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/prints_a_transform_error_in_apply_test.dart
@@ -0,0 +1,36 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+final transformer = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class RewriteTransformer extends Transformer {
+  RewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.txt';
+
+  Future apply(Transform transform) => throw new Exception('oh no!');
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("prints a transform error in apply", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", transformer)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var server = pubServe();
+      server.stderr.expect(
+          emitsLines(
+              'Build error:\n' 'Transform Rewrite on myapp|web/foo.txt threw error: oh no!'));
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/prints_a_transform_interface_error_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/prints_a_transform_interface_error_test.dart
new file mode 100644
index 0000000..47887bc
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/prints_a_transform_interface_error_test.dart
@@ -0,0 +1,35 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+final transformer = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class RewriteTransformer extends Transformer {
+  RewriteTransformer.asPlugin();
+
+  String get allowedExtensions => '.txt';
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("prints a transform interface error", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", transformer)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      var server = pubServe();
+      server.stderr.expect(
+          emitsLines(
+              "Build error:\n" "Transform Rewrite on myapp|web/foo.txt threw error: Class "
+                  "'RewriteTransformer' has no instance method 'apply'."));
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/runs_a_local_transform_on_the_application_package_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/runs_a_local_transform_on_the_application_package_test.dart
new file mode 100644
index 0000000..e6e1ab0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/runs_a_local_transform_on_the_application_package_test.dart
@@ -0,0 +1,21 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("runs a local transform on the application package", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", REWRITE_TRANSFORMER)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("foo.out", "foo.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/runs_a_third_party_transform_on_the_application_package_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/runs_a_third_party_transform_on_the_application_package_test.dart
new file mode 100644
index 0000000..c5ef23b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/runs_a_third_party_transform_on_the_application_package_test.dart
@@ -0,0 +1,29 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("runs a third-party transform on the application package", () {
+      d.dir(
+          "foo",
+          [
+              d.libPubspec("foo", '1.0.0'),
+              d.dir("lib", [d.file("foo.dart", REWRITE_TRANSFORMER)])]).create();
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "dependencies": {
+            "foo": {
+              "path": "../foo"
+            }
+          },
+          "transformers": ["foo"]
+        }), d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', sandbox: ['foo'], pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("foo.out", "foo.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/runs_a_third_party_transformer_on_a_local_transformer_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/runs_a_third_party_transformer_on_a_local_transformer_test.dart
new file mode 100644
index 0000000..f73e691
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/runs_a_third_party_transformer_on_a_local_transformer_test.dart
@@ -0,0 +1,33 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("runs a third-party transformer on a local transformer", () {
+      d.dir(
+          "foo",
+          [
+              d.libPubspec("foo", '1.0.0'),
+              d.dir("lib", [d.file("transformer.dart", dartTransformer('foo'))])]).create();
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["foo/transformer", "myapp/transformer"],
+          "dependencies": {
+            "foo": {
+              "path": "../foo"
+            }
+          }
+        }),
+            d.dir("lib", [d.file("transformer.dart", dartTransformer('myapp'))]),
+            d.dir("web", [d.file("main.dart", 'const TOKEN = "main.dart";')])]).create();
+      createLockFile('myapp', sandbox: ['foo'], pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed(
+          "main.dart",
+          'const TOKEN = "((main.dart, foo), (myapp, foo))";');
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/runs_a_transformer_group_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/runs_a_transformer_group_test.dart
new file mode 100644
index 0000000..a578e0e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/runs_a_transformer_group_test.dart
@@ -0,0 +1,39 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const GROUP = """
+import 'package:barback/barback.dart';
+
+import 'transformer.dart';
+
+class RewriteGroup implements TransformerGroup {
+  RewriteGroup.asPlugin();
+
+  Iterable<Iterable> get phases => [[new RewriteTransformer.asPlugin()]];
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("runs a transformer group", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/group"]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.dir(
+                        "src",
+                        [
+                            d.file("transformer.dart", REWRITE_TRANSFORMER),
+                            d.file("group.dart", GROUP)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("foo.out", "foo.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/runs_a_transformer_on_a_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/runs_a_transformer_on_a_dependency_test.dart
new file mode 100644
index 0000000..e67ecaa
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/runs_a_transformer_on_a_dependency_test.dart
@@ -0,0 +1,30 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("runs a local transformer on a dependency", () {
+      d.dir("foo", [d.pubspec({
+          "name": "foo",
+          "version": "0.0.1",
+          "transformers": ["foo/transformer"]
+        }),
+            d.dir(
+                "lib",
+                [
+                    d.file("transformer.dart", REWRITE_TRANSFORMER),
+                    d.file("foo.txt", "foo")])]).create();
+      d.dir(appPath, [d.appPubspec({
+          "foo": {
+            "path": "../foo"
+          }
+        })]).create();
+      createLockFile('myapp', sandbox: ['foo'], pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("packages/foo/foo.out", "foo.out");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/runs_one_third_party_transformer_on_another_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/runs_one_third_party_transformer_on_another_test.dart
new file mode 100644
index 0000000..0165949
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/runs_one_third_party_transformer_on_another_test.dart
@@ -0,0 +1,43 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("runs one third-party transformer on another", () {
+      d.dir("foo", [d.pubspec({
+          "name": "foo",
+          "version": "1.0.0"
+        }),
+            d.dir("lib", [d.file("transformer.dart", dartTransformer('foo'))])]).create();
+      d.dir("bar", [d.pubspec({
+          "name": "bar",
+          "version": "1.0.0",
+          "transformers": ["foo/transformer"],
+          "dependencies": {
+            "foo": {
+              "path": "../foo"
+            }
+          }
+        }),
+            d.dir("lib", [d.file("transformer.dart", dartTransformer('bar'))])]).create();
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["bar/transformer"],
+          "dependencies": {
+            'bar': {
+              'path': '../bar'
+            }
+          }
+        }),
+            d.dir("web", [d.file("main.dart", 'const TOKEN = "main.dart";')])]).create();
+      createLockFile('myapp', sandbox: ['foo', 'bar'], pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed(
+          "main.dart",
+          'const TOKEN = "(main.dart, (bar, foo))";');
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/supports_a_transformer_that_doesnt_return_futures_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/supports_a_transformer_that_doesnt_return_futures_test.dart
new file mode 100644
index 0000000..20de541
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformer/supports_a_transformer_that_doesnt_return_futures_test.dart
@@ -0,0 +1,41 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import '../serve/utils.dart';
+const TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class RewriteTransformer extends Transformer implements DeclaringTransformer {
+  RewriteTransformer.asPlugin();
+
+  bool isPrimary(AssetId id) => id.extension == '.txt';
+
+  void apply(Transform transform) {
+    transform.addOutput(new Asset.fromString(
+        transform.primaryInput.id, "new contents"));
+  }
+
+  void declareOutputs(DeclaringTransform transform) {
+    transform.declareOutput(transform.primaryId);
+  }
+}
+""";
+main() {
+  initConfig();
+  withBarbackVersions("any", () {
+    integration("supports a transformer that doesn't return futures", () {
+      d.dir(appPath, [d.pubspec({
+          "name": "myapp",
+          "transformers": ["myapp/src/transformer"]
+        }),
+            d.dir("lib", [d.dir("src", [d.file("transformer.dart", TRANSFORMER)])]),
+            d.dir("web", [d.file("foo.txt", "foo")])]).create();
+      createLockFile('myapp', pkg: ['barback']);
+      pubServe();
+      requestShouldSucceed("foo.txt", "new contents");
+      endPubServe();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/conservative_dependencies_test.dart b/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/conservative_dependencies_test.dart
new file mode 100644
index 0000000..9fd1bba
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/conservative_dependencies_test.dart
@@ -0,0 +1,424 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+void main() {
+  initConfig();
+  integration(
+      "reports previous transformers as dependencies if the "
+          "transformer is transformed",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "version": "1.0.0",
+        "dependencies": {
+          "pkg": {
+            "path": "../pkg"
+          },
+          "qux": {
+            "path": "../qux"
+          }
+        },
+        "transformers": ["pkg", "qux"]
+      })]).create();
+    d.dir("pkg", [d.pubspec({
+        "name": "pkg",
+        "version": "1.0.0",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          },
+          "bar": {
+            "path": "../bar"
+          },
+          "baz": {
+            "path": "../baz"
+          }
+        },
+        "transformers": [{
+            "foo": {
+              "\$include": "lib/pkg.dart"
+            }
+          }, {
+            "bar": {
+              "\$exclude": "lib/transformer.dart"
+            }
+          }, "baz"]
+      }),
+          d.dir(
+              "lib",
+              [d.file("pkg.dart", ""), d.file("transformer.dart", transformer())])]).create();
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("lib", [d.file("foo.dart", transformer())])]).create();
+    d.dir(
+        "bar",
+        [
+            d.libPubspec("bar", "1.0.0"),
+            d.dir("lib", [d.file("bar.dart", transformer())])]).create();
+    d.dir(
+        "baz",
+        [
+            d.libPubspec("baz", "1.0.0"),
+            d.dir("lib", [d.file("baz.dart", transformer())])]).create();
+    d.dir(
+        "qux",
+        [
+            d.libPubspec("qux", "1.0.0"),
+            d.dir("lib", [d.file("qux.dart", transformer())])]).create();
+    expectDependencies({
+      'pkg': ['foo', 'bar', 'baz'],
+      'foo': [],
+      'bar': [],
+      'baz': [],
+      'qux': []
+    });
+  });
+  integration(
+      "reports all transitive package dependencies' transformers as "
+          "dependencies if the transformer is transformed",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "pkg": {
+            "path": "../pkg"
+          },
+          "qux": {
+            "path": "../qux"
+          }
+        },
+        "transformers": ["pkg"]
+      })]).create();
+    d.dir("pkg", [d.pubspec({
+        "name": "pkg",
+        "version": "1.0.0",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          },
+          "baz": {
+            "path": "../baz"
+          }
+        },
+        "transformers": ["baz"]
+      }), d.dir("lib", [d.file("pkg.dart", transformer())])]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "version": "1.0.0",
+        "dependencies": {
+          "bar": {
+            "path": "../bar"
+          }
+        },
+        "transformers": ["foo"]
+      }), d.dir("lib", [d.file("foo.dart", transformer())])]).create();
+    d.dir("bar", [d.pubspec({
+        "name": "bar",
+        "version": "1.0.0",
+        "transformers": ["bar"]
+      }), d.dir("lib", [d.file("bar.dart", transformer())])]).create();
+    d.dir(
+        "baz",
+        [
+            d.libPubspec("baz", "1.0.0"),
+            d.dir("lib", [d.file("baz.dart", transformer())])]).create();
+    d.dir("qux", [d.pubspec({
+        "name": "qux",
+        "version": "1.0.0",
+        "transformers": ["qux"]
+      }), d.dir("lib", [d.file("qux.dart", transformer())])]).create();
+    expectDependencies({
+      'pkg': ['foo', 'bar', 'baz'],
+      'foo': [],
+      'bar': [],
+      'baz': [],
+      'qux': []
+    });
+  });
+  integration(
+      "reports previous transformers as dependencies if a "
+          "nonexistent local file is imported",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "pkg": {
+            "path": "../pkg"
+          },
+          "bar": {
+            "path": "../bar"
+          }
+        },
+        "transformers": ["pkg", "bar"]
+      })]).create();
+    d.dir("pkg", [d.pubspec({
+        "name": "pkg",
+        "version": "1.0.0",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          },
+          "bar": {
+            "path": "../bar"
+          }
+        },
+        "transformers": [{
+            "foo": {
+              "\$include": "lib/pkg.dart"
+            }
+          }]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file("pkg.dart", ""),
+                  d.file("transformer.dart", transformer(["nonexistent.dart"]))])]).create();
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("lib", [d.file("foo.dart", transformer())])]).create();
+    d.dir(
+        "bar",
+        [
+            d.libPubspec("bar", "1.0.0"),
+            d.dir("lib", [d.file("bar.dart", transformer())])]).create();
+    expectDependencies({
+      'pkg': ['foo'],
+      'foo': [],
+      'bar': []
+    });
+  });
+  integration(
+      "reports all that package's dependencies' transformers as "
+          "dependencies if a non-existent file is imported from another package",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          },
+          "qux": {
+            "path": "../qux"
+          }
+        },
+        "transformers": ["myapp"]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file(
+                      "myapp.dart",
+                      transformer(["package:foo/nonexistent.dart"]))])]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "version": "1.0.0",
+        "dependencies": {
+          "bar": {
+            "path": "../bar"
+          },
+          "baz": {
+            "path": "../baz"
+          }
+        },
+        "transformers": ["foo"]
+      }), d.dir("lib", [d.file("foo.dart", transformer())])]).create();
+    d.dir("bar", [d.pubspec({
+        "name": "bar",
+        "version": "1.0.0",
+        "transformers": ["bar"]
+      }), d.dir("lib", [d.file("bar.dart", transformer())])]).create();
+    d.dir("baz", [d.pubspec({
+        "name": "baz",
+        "version": "1.0.0",
+        "transformers": ["baz"]
+      }), d.dir("lib", [d.file("baz.dart", transformer())])]).create();
+    d.dir("qux", [d.pubspec({
+        "name": "qux",
+        "version": "1.0.0",
+        "transformers": ["qux"]
+      }), d.dir("lib", [d.file("qux.dart", transformer())])]).create();
+    expectDependencies({
+      'myapp': ['foo', 'bar', 'baz'],
+      'foo': [],
+      'bar': [],
+      'baz': [],
+      'qux': []
+    });
+  });
+  integration(
+      "reports all that package's dependencies' transformers as "
+          "dependencies if a non-existent transformer is used from another package",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          },
+          "qux": {
+            "path": "../qux"
+          }
+        },
+        "transformers": ["myapp"]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file(
+                      "myapp.dart",
+                      transformer(["package:foo/nonexistent.dart"]))])]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "version": "1.0.0",
+        "dependencies": {
+          "bar": {
+            "path": "../bar"
+          },
+          "baz": {
+            "path": "../baz"
+          }
+        },
+        "transformers": ["bar"]
+      })]).create();
+    d.dir(
+        "bar",
+        [
+            d.libPubspec("bar", "1.0.0"),
+            d.dir("lib", [d.file("bar.dart", transformer())])]).create();
+    d.dir("baz", [d.pubspec({
+        "name": "baz",
+        "version": "1.0.0",
+        "transformers": ["baz"]
+      }), d.dir("lib", [d.file("baz.dart", transformer())])]).create();
+    d.dir("qux", [d.pubspec({
+        "name": "qux",
+        "version": "1.0.0",
+        "transformers": ["qux"]
+      }), d.dir("lib", [d.file("qux.dart", transformer())])]).create();
+    expectDependencies({
+      'myapp': ['bar', 'baz'],
+      'bar': [],
+      'baz': [],
+      'qux': []
+    });
+  });
+  test("reports dependencies on transformers in past phases", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "transformers": ["myapp/first", "myapp/second", "myapp/third"]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file("first.dart", transformer()),
+                  d.file("second.dart", transformer()),
+                  d.file("third.dart", transformer())])]).create();
+    expectDependencies({
+      'myapp/first': [],
+      'myapp/second': ['myapp/first'],
+      'myapp/third': ['myapp/second', 'myapp/first']
+    });
+  });
+  integration(
+      "considers the entrypoint package's dev and override " "dependencies",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "dev_dependencies": {
+          "bar": {
+            "path": "../bar"
+          }
+        },
+        "dependency_overrides": {
+          "baz": {
+            "path": "../baz"
+          }
+        },
+        "transformers": ["foo", "myapp"]
+      }), d.dir("lib", [d.file("myapp.dart", transformer())])]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "version": "1.0.0",
+        "transformers": ["foo"]
+      }), d.dir("lib", [d.file("foo.dart", transformer())])]).create();
+    d.dir("bar", [d.pubspec({
+        "name": "bar",
+        "version": "1.0.0",
+        "transformers": ["bar"]
+      }), d.dir("lib", [d.file("bar.dart", transformer())])]).create();
+    d.dir("baz", [d.pubspec({
+        "name": "baz",
+        "version": "1.0.0",
+        "transformers": ["baz"]
+      }), d.dir("lib", [d.file("baz.dart", transformer())])]).create();
+    expectDependencies({
+      'myapp': ['foo', 'bar', 'baz'],
+      'foo': [],
+      'bar': [],
+      'baz': []
+    });
+  });
+  integration(
+      "doesn't consider a non-entrypoint package's dev and override " "dependencies",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "pkg": {
+            "path": "../pkg"
+          }
+        }
+      })]).create();
+    d.dir("pkg", [d.pubspec({
+        "name": "pkg",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "dev_dependencies": {
+          "bar": {
+            "path": "../bar"
+          }
+        },
+        "dependency_overrides": {
+          "baz": {
+            "path": "../baz"
+          }
+        },
+        "transformers": ["foo", "pkg"]
+      }), d.dir("lib", [d.file("pkg.dart", transformer())])]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "version": "1.0.0",
+        "transformers": ["foo"]
+      }), d.dir("lib", [d.file("foo.dart", transformer())])]).create();
+    d.dir("bar", [d.pubspec({
+        "name": "bar",
+        "version": "1.0.0",
+        "transformers": ["bar"]
+      }), d.dir("lib", [d.file("bar.dart", transformer())])]).create();
+    d.dir("baz", [d.pubspec({
+        "name": "baz",
+        "version": "1.0.0",
+        "transformers": ["baz"]
+      }), d.dir("lib", [d.file("baz.dart", transformer())])]).create();
+    expectDependencies({
+      'pkg': ['foo'],
+      'foo': [],
+      'bar': [],
+      'baz': []
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/cycle_test.dart b/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/cycle_test.dart
new file mode 100644
index 0000000..fefc3cf
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/cycle_test.dart
@@ -0,0 +1,231 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+void main() {
+  initConfig();
+  integration(
+      "allows a package dependency cycle that's unrelated to " "transformers",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": ["myapp/first", "myapp/second"]
+      }),
+          d.dir(
+              'lib',
+              [
+                  d.file("first.dart", transformer()),
+                  d.file("second.dart", transformer())])]).create();
+    d.dir("foo", [d.libPubspec("foo", "1.0.0", deps: {
+        "bar": {
+          "path": "../bar"
+        }
+      })]).create();
+    d.dir("bar", [d.libPubspec("bar", "1.0.0", deps: {
+        "baz": {
+          "path": "../baz"
+        }
+      })]).create();
+    d.dir("baz", [d.libPubspec("baz", "1.0.0", deps: {
+        "foo": {
+          "path": "../foo"
+        }
+      })]).create();
+    expectDependencies({
+      'myapp/first': [],
+      'myapp/second': ['myapp/first']
+    });
+  });
+  integration(
+      "disallows a package dependency cycle that may be related to " "transformers",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": ["myapp/first", "myapp/second"]
+      }),
+          d.dir(
+              'lib',
+              [
+                  d.file("first.dart", transformer()),
+                  d.file("second.dart", transformer())])]).create();
+    d.dir("foo", [d.libPubspec("foo", "1.0.0", deps: {
+        "bar": {
+          "path": "../bar"
+        }
+      })]).create();
+    d.dir("bar", [d.libPubspec("bar", "1.0.0", deps: {
+        "myapp": {
+          "path": "../myapp"
+        }
+      })]).create();
+    expectCycleException(
+        [
+            "myapp is transformed by myapp/second",
+            "myapp depends on foo",
+            "foo depends on bar",
+            "bar depends on myapp",
+            "myapp is transformed by myapp/first"]);
+  });
+  integration("disallows a transformation dependency cycle", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": ["foo"]
+      }), d.dir('lib', [d.file("myapp.dart", transformer())])]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "dependencies": {
+          "bar": {
+            "path": "../bar"
+          }
+        },
+        "transformers": ["bar"]
+      }), d.dir('lib', [d.file("foo.dart", transformer())])]).create();
+    d.dir("bar", [d.pubspec({
+        "name": "bar",
+        "dependencies": {
+          "myapp": {
+            "path": "../myapp"
+          }
+        },
+        "transformers": ["myapp"]
+      }), d.dir('lib', [d.file("bar.dart", transformer())])]).create();
+    expectCycleException(
+        [
+            "bar is transformed by myapp",
+            "myapp is transformed by foo",
+            "foo is transformed by bar"]);
+  });
+  integration(
+      "allows a cross-package import cycle that's unrelated to " "transformers",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": ["myapp"]
+      }),
+          d.dir(
+              'lib',
+              [d.file("myapp.dart", transformer(['package:foo/foo.dart']))])]).create();
+    d.dir("foo", [d.libPubspec("foo", "1.0.0", deps: {
+        "bar": {
+          "path": "../bar"
+        }
+      }),
+          d.dir('lib', [d.file("foo.dart", "import 'package:bar/bar.dart';")])]).create();
+    d.dir("bar", [d.libPubspec("bar", "1.0.0", deps: {
+        "baz": {
+          "path": "../baz"
+        }
+      }),
+          d.dir('lib', [d.file("bar.dart", "import 'package:baz/baz.dart';")])]).create();
+    d.dir("baz", [d.libPubspec("baz", "1.0.0", deps: {
+        "foo": {
+          "path": "../foo"
+        }
+      }),
+          d.dir('lib', [d.file("baz.dart", "import 'package:foo/foo.dart';")])]).create();
+    expectDependencies({
+      'myapp': []
+    });
+  });
+  integration(
+      "disallows a cross-package import cycle that's related to " "transformers",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": ["myapp"]
+      }),
+          d.dir(
+              'lib',
+              [d.file("myapp.dart", transformer(['package:foo/foo.dart']))])]).create();
+    d.dir("foo", [d.libPubspec("foo", "1.0.0", deps: {
+        "bar": {
+          "path": "../bar"
+        }
+      }),
+          d.dir('lib', [d.file("foo.dart", "import 'package:bar/bar.dart';")])]).create();
+    d.dir("bar", [d.libPubspec("bar", "1.0.0", deps: {
+        "myapp": {
+          "path": "../myapp"
+        }
+      }),
+          d.dir(
+              'lib',
+              [d.file("bar.dart", "import 'package:myapp/myapp.dart';")])]).create();
+    expectCycleException(
+        [
+            "myapp is transformed by myapp",
+            "myapp depends on foo",
+            "foo depends on bar",
+            "bar depends on myapp"]);
+  });
+  integration(
+      "allows a single-package import cycle that's unrelated to " "transformers",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": ["myapp"]
+      }),
+          d.dir(
+              'lib',
+              [
+                  d.file("myapp.dart", transformer(['foo.dart'])),
+                  d.file("foo.dart", "import 'bar.dart';"),
+                  d.file("bar.dart", "import 'baz.dart';"),
+                  d.file("baz.dart", "import 'foo.dart';")])]).create();
+    expectDependencies({
+      'myapp': []
+    });
+  });
+  integration(
+      "allows a single-package import cycle that's related to " "transformers",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": ["myapp"]
+      }),
+          d.dir(
+              'lib',
+              [
+                  d.file("myapp.dart", transformer(['foo.dart'])),
+                  d.file("foo.dart", "import 'bar.dart';"),
+                  d.file("bar.dart", "import 'myapp.dart';")])]).create();
+    expectDependencies({
+      'myapp': []
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/dev_transformers_test.dart b/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/dev_transformers_test.dart
new file mode 100644
index 0000000..2350ca8
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/dev_transformers_test.dart
@@ -0,0 +1,74 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+void main() {
+  initConfig();
+  integration(
+      "doesn't return a dependency's transformer that can't run on lib",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        }
+      })]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "version": "1.0.0",
+        "transformers": [{
+            "foo": {
+              "\$include": "test/foo_test.dart"
+            }
+          }]
+      }),
+          d.dir("lib", [d.file("foo.dart", transformer())]),
+          d.dir("test", [d.file("foo_test.dart", "")])]).create();
+    expectDependencies({});
+  });
+  integration(
+      "does return the root package's transformer that can't run on " "lib",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "transformers": [{
+            "myapp": {
+              "\$include": "test/myapp_test.dart"
+            }
+          }]
+      }),
+          d.dir("lib", [d.file("myapp.dart", transformer())]),
+          d.dir("test", [d.file("myapp_test.dart", "")])]).create();
+    expectDependencies({
+      "myapp": []
+    });
+  });
+  integration(
+      "doesn't return a dependency's transformer that can run on bin",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        }
+      })]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "version": "1.0.0",
+        "transformers": [{
+            "foo": {
+              "\$include": "bin/foo.dart"
+            }
+          }]
+      }),
+          d.dir("lib", [d.file("foo.dart", transformer())]),
+          d.dir("test", [d.file("foo_test.dart", "")])]).create();
+    expectDependencies({
+      "foo": []
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/error_test.dart b/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/error_test.dart
new file mode 100644
index 0000000..a776e21
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/error_test.dart
@@ -0,0 +1,34 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/exceptions.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+void main() {
+  initConfig();
+  integration("fails if an unknown package is imported", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "transformers": ["myapp"]
+      }),
+          d.dir(
+              'lib',
+              [d.file("myapp.dart", transformer(["package:foo/foo.dart"]))])]).create();
+    expectException(predicate((error) {
+      expect(error, new isInstanceOf<ApplicationException>());
+      expect(
+          error.message,
+          equals(
+              'A transformer imported unknown package "foo" (in '
+                  '"package:foo/foo.dart").'));
+      return true;
+    }));
+  });
+  integration("fails on a syntax error", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "transformers": ["myapp"]
+      }), d.dir('lib', [d.file("myapp.dart", "library;")])]).create();
+    expectException(new isInstanceOf<AnalyzerErrorGroup>());
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/import_dependencies_test.dart b/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/import_dependencies_test.dart
new file mode 100644
index 0000000..3e955c1
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/import_dependencies_test.dart
@@ -0,0 +1,224 @@
+library pub_tests;
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+void main() {
+  initConfig();
+  integration(
+      "reports a dependency if a transformed local file is imported",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": [{
+            "foo": {
+              "\$include": "lib/lib.dart"
+            }
+          }, "myapp"]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file("myapp.dart", ""),
+                  d.file("lib.dart", ""),
+                  d.file("transformer.dart", transformer(["lib.dart"]))])]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "version": "1.0.0"
+      }), d.dir("lib", [d.file("foo.dart", transformer())])]).create();
+    expectDependencies({
+      'myapp': ['foo'],
+      'foo': []
+    });
+  });
+  integration(
+      "reports a dependency if a transformed foreign file is imported",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": ["myapp"]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file("myapp.dart", ""),
+                  d.file("transformer.dart", transformer(["package:foo/foo.dart"]))])]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "version": "1.0.0",
+        "transformers": [{
+            "foo": {
+              "\$include": "lib/foo.dart"
+            }
+          }]
+      }),
+          d.dir(
+              "lib",
+              [d.file("foo.dart", ""), d.file("transformer.dart", transformer())])]).create();
+    expectDependencies({
+      'myapp': ['foo'],
+      'foo': []
+    });
+  });
+  integration(
+      "reports a dependency if a transformed external package file is "
+          "imported from an export",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": ["myapp"]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file("myapp.dart", ""),
+                  d.file("transformer.dart", transformer(["local.dart"])),
+                  d.file("local.dart", "export 'package:foo/foo.dart';")])]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "version": "1.0.0",
+        "transformers": [{
+            "foo": {
+              "\$include": "lib/foo.dart"
+            }
+          }]
+      }),
+          d.dir(
+              "lib",
+              [d.file("foo.dart", ""), d.file("transformer.dart", transformer())])]).create();
+    expectDependencies({
+      'myapp': ['foo'],
+      'foo': []
+    });
+  });
+  integration(
+      "reports a dependency if a transformed foreign file is "
+          "transitively imported",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": ["myapp"]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file("myapp.dart", ""),
+                  d.file("transformer.dart", transformer(["local.dart"])),
+                  d.file("local.dart", "import 'package:foo/foreign.dart';")])]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "version": "1.0.0",
+        "transformers": [{
+            "foo": {
+              "\$include": "lib/foo.dart"
+            }
+          }]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file("foo.dart", ""),
+                  d.file("transformer.dart", transformer()),
+                  d.file("foreign.dart", "import 'foo.dart';")])]).create();
+    expectDependencies({
+      'myapp': ['foo'],
+      'foo': []
+    });
+  });
+  integration(
+      "reports a dependency if a transformed foreign file is "
+          "transitively imported across packages",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": ["myapp"]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file("myapp.dart", ""),
+                  d.file("transformer.dart", transformer(["package:foo/foo.dart"]))])]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "version": "1.0.0",
+        "dependencies": {
+          "bar": {
+            "path": "../bar"
+          }
+        }
+      }),
+          d.dir("lib", [d.file("foo.dart", "import 'package:bar/bar.dart';")])]).create();
+    d.dir("bar", [d.pubspec({
+        "name": "bar",
+        "version": "1.0.0",
+        "transformers": [{
+            "bar": {
+              "\$include": "lib/bar.dart"
+            }
+          }]
+      }),
+          d.dir(
+              "lib",
+              [d.file("bar.dart", ""), d.file("transformer.dart", transformer())])]).create();
+    expectDependencies({
+      'myapp': ['bar'],
+      'bar': []
+    });
+  });
+  integration(
+      "reports a dependency if an imported file is transformed by a "
+          "different package",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": [{
+            "foo": {
+              '\$include': 'lib/local.dart'
+            }
+          }, "myapp"]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file("myapp.dart", ""),
+                  d.file("transformer.dart", transformer(["local.dart"])),
+                  d.file("local.dart", "")])]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "version": "1.0.0"
+      }), d.dir("lib", [d.file("transformer.dart", transformer())])]).create();
+    expectDependencies({
+      'myapp': ['foo'],
+      'foo': []
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/no_dependencies_test.dart b/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/no_dependencies_test.dart
new file mode 100644
index 0000000..f34cf3e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/no_dependencies_test.dart
@@ -0,0 +1,178 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+void main() {
+  initConfig();
+  integration("reports no dependencies if no transformers are used", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        }
+      })]).create();
+    d.dir("foo", [d.libPubspec("foo", "1.0.0")]).create();
+    expectDependencies({});
+  });
+  integration(
+      "reports no dependencies if a transformer is used in a "
+          "package that doesn't expose a transformer",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": ["foo"]
+      })]).create();
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("lib", [d.file("foo.dart", transformer())])]).create();
+    expectDependencies({
+      "foo": []
+    });
+  });
+  integration("reports no dependencies for non-file/package imports", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": ["myapp"]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file(
+                      "myapp.dart",
+                      transformer(
+                          ["dart:async", "http://dartlang.org/nonexistent.dart"]))])]).create();
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("lib", [d.file("foo.dart", transformer())])]).create();
+    expectDependencies({
+      "myapp": []
+    });
+  });
+  integration("reports no dependencies for a single self transformer", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "transformers": ["myapp"]
+      }), d.dir("lib", [d.file("myapp.dart", transformer())])]).create();
+    expectDependencies({
+      "myapp": []
+    });
+  });
+  integration(
+      "reports no dependencies if a transformer applies to files that "
+          "aren't used by the exposed transformer",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": [{
+            "foo": {
+              "\$include": "lib/myapp.dart"
+            }
+          }, {
+            "foo": {
+              "\$exclude": "lib/transformer.dart"
+            }
+          }, "myapp"]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file("myapp.dart", ""),
+                  d.file("transformer.dart", transformer())])]).create();
+    d.dir(
+        "foo",
+        [
+            d.libPubspec("foo", "1.0.0"),
+            d.dir("lib", [d.file("foo.dart", transformer())])]).create();
+    expectDependencies({
+      "myapp": [],
+      "foo": []
+    });
+  });
+  integration(
+      "reports no dependencies if a transformer applies to a "
+          "dependency's files that aren't used by the exposed transformer",
+      () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": {
+            "path": "../foo"
+          }
+        },
+        "transformers": ["myapp"]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file("myapp.dart", ""),
+                  d.file("transformer.dart", transformer(["package:foo/foo.dart"]))])]).create();
+    d.dir("foo", [d.pubspec({
+        "name": "foo",
+        "version": "1.0.0",
+        "transformers": [{
+            "foo": {
+              "\$exclude": "lib/foo.dart"
+            }
+          }]
+      }),
+          d.dir(
+              "lib",
+              [d.file("foo.dart", ""), d.file("transformer.dart", transformer())])]).create();
+    expectDependencies({
+      'myapp': [],
+      'foo': []
+    });
+  });
+  test("reports no dependencies on transformers in future phases", () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "transformers": [{
+            "myapp/first": {
+              "\$include": "lib/myapp.dart"
+            }
+          }, {
+            "myapp/second": {
+              "\$include": "lib/first.dart"
+            }
+          }, {
+            "myapp/third": {
+              "\$include": "lib/second.dart"
+            }
+          }]
+      }),
+          d.dir(
+              "lib",
+              [
+                  d.file("myapp.dart", ""),
+                  d.file("first.dart", transformer()),
+                  d.file("second.dart", transformer()),
+                  d.file("third.dart", transformer())])]).create();
+    expectDependencies({
+      'myapp/first': [],
+      'myapp/second': [],
+      'myapp/third': []
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/utils.dart b/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/utils.dart
new file mode 100644
index 0000000..5382961
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/transformers_needed_by_transformers/utils.dart
@@ -0,0 +1,78 @@
+library pub_tests;
+import 'package:path/path.dart' as p;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/barback/cycle_exception.dart';
+import '../../lib/src/barback/transformers_needed_by_transformers.dart';
+import '../../lib/src/entrypoint.dart';
+import '../../lib/src/io.dart';
+import '../../lib/src/package.dart';
+import '../../lib/src/package_graph.dart';
+import '../../lib/src/source/path.dart';
+import '../../lib/src/system_cache.dart';
+import '../../lib/src/utils.dart';
+import '../test_pub.dart';
+void expectDependencies(Map<String, Iterable<String>> expected) {
+  expected = mapMap(expected, value: (_, ids) => ids.toSet());
+  schedule(() {
+    var result = mapMap(
+        computeTransformersNeededByTransformers(_loadPackageGraph()),
+        key: (id, _) => id.toString(),
+        value: (_, ids) => ids.map((id) => id.toString()).toSet());
+    expect(result, equals(expected));
+  }, "expect dependencies to match $expected");
+}
+void expectException(matcher) {
+  schedule(() {
+    expect(
+        () => computeTransformersNeededByTransformers(_loadPackageGraph()),
+        throwsA(matcher));
+  }, "expect an exception: $matcher");
+}
+void expectCycleException(Iterable<String> steps) {
+  expectException(predicate((error) {
+    expect(error, new isInstanceOf<CycleException>());
+    expect(error.steps, equals(steps));
+    return true;
+  }, "cycle exception:\n${steps.map((step) => "  $step").join("\n")}"));
+}
+PackageGraph _loadPackageGraph() {
+  var packages = {};
+  var systemCache = new SystemCache(p.join(sandboxDir, cachePath));
+  systemCache.sources
+      ..register(new PathSource())
+      ..setDefault('path');
+  var entrypoint = new Entrypoint(p.join(sandboxDir, appPath), systemCache);
+  for (var package in listDir(sandboxDir)) {
+    if (!fileExists(p.join(package, 'pubspec.yaml'))) continue;
+    var packageName = p.basename(package);
+    packages[packageName] =
+        new Package.load(packageName, package, systemCache.sources);
+  }
+  loadPackage(packageName) {
+    if (packages.containsKey(packageName)) return;
+    packages[packageName] = new Package.load(
+        packageName,
+        p.join(pkgPath, packageName),
+        systemCache.sources);
+    for (var dep in packages[packageName].dependencies) {
+      loadPackage(dep.name);
+    }
+  }
+  loadPackage('barback');
+  return new PackageGraph(entrypoint, null, packages);
+}
+String transformer([Iterable<String> imports]) {
+  if (imports == null) imports = [];
+  var buffer =
+      new StringBuffer()..writeln('import "package:barback/barback.dart";');
+  for (var import in imports) {
+    buffer.writeln('import "$import";');
+  }
+  buffer.writeln("""
+NoOpTransformer extends Transformer {
+  bool isPrimary(AssetId id) => true;
+  void apply(Transform transform) {}
+}
+""");
+  return buffer.toString();
+}
diff --git a/sdk/lib/_internal/pub_generated/test/unknown_source_test.dart b/sdk/lib/_internal/pub_generated/test/unknown_source_test.dart
new file mode 100644
index 0000000..c8f7e0c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/unknown_source_test.dart
@@ -0,0 +1,61 @@
+library pub_tests;
+import 'dart:convert';
+import 'descriptor.dart' as d;
+import 'test_pub.dart';
+main() {
+  initConfig();
+  forBothPubGetAndUpgrade((command) {
+    integration('fails gracefully on a dependency from an unknown source', () {
+      d.appDir({
+        "foo": {
+          "bad": "foo"
+        }
+      }).create();
+      pubCommand(
+          command,
+          error: 'Package myapp depends on foo from unknown source "bad".');
+    });
+    integration(
+        'fails gracefully on transitive dependency from an unknown ' 'source',
+        () {
+      d.dir(
+          'foo',
+          [d.libDir('foo', 'foo 0.0.1'), d.libPubspec('foo', '0.0.1', deps: {
+          "bar": {
+            "bad": "bar"
+          }
+        })]).create();
+      d.appDir({
+        "foo": {
+          "path": "../foo"
+        }
+      }).create();
+      pubCommand(
+          command,
+          error: 'Package foo depends on bar from unknown source "bad".');
+    });
+    integration('ignores unknown source in lockfile', () {
+      d.dir('foo', [d.libDir('foo'), d.libPubspec('foo', '0.0.1')]).create();
+      d.dir(appPath, [d.appPubspec({
+          "foo": {
+            "path": "../foo"
+          }
+        })]).create();
+      d.dir(appPath, [d.file("pubspec.lock", JSON.encode({
+          'packages': {
+            'foo': {
+              'version': '0.0.0',
+              'source': 'bad',
+              'description': {
+                'name': 'foo'
+              }
+            }
+          }
+        }))]).create();
+      pubCommand(command);
+      d.dir(
+          packagesPath,
+          [d.dir("foo", [d.file("foo.dart", 'main() => "foo";')])]).validate();
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/dry_run_does_not_apply_changes_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/dry_run_does_not_apply_changes_test.dart
new file mode 100644
index 0000000..59b28be
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/dry_run_does_not_apply_changes_test.dart
@@ -0,0 +1,33 @@
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+main() {
+  initConfig();
+  integration("--dry-run shows report but does not apply changes", () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0");
+      builder.serve("foo", "2.0.0");
+    });
+    d.appDir({
+      "foo": "1.0.0"
+    }).create();
+    pubGet();
+    d.appDir({
+      "foo": "any"
+    }).create();
+    schedule(() {
+      deleteEntry(path.join(sandboxDir, appPath, "packages"));
+    });
+    pubUpgrade(
+        args: ["--dry-run"],
+        output: allOf(
+            [contains("> foo 2.0.0 (was 1.0.0)"), contains("Would change 1 dependency.")]));
+    d.dir(
+        appPath,
+        [
+            d.matcherFile("pubspec.lock", contains("1.0.0")),
+            d.nothing("packages")]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/git/do_not_upgrade_if_unneeded_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/git/do_not_upgrade_if_unneeded_test.dart
new file mode 100644
index 0000000..595147b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/git/do_not_upgrade_if_unneeded_test.dart
@@ -0,0 +1,47 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "doesn't upgrade one locked Git package's dependencies if it's "
+          "not necessary",
+      () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec("foo", "1.0.0", deps: {
+        "foo-dep": {
+          "git": "../foo-dep.git"
+        }
+      })]).create();
+    d.git(
+        'foo-dep.git',
+        [d.libDir('foo-dep'), d.libPubspec('foo-dep', '1.0.0')]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [
+            d.dir('foo', [d.file('foo.dart', 'main() => "foo";')]),
+            d.dir('foo-dep', [d.file('foo-dep.dart', 'main() => "foo-dep";')])]).validate();
+    d.git(
+        'foo.git',
+        [d.libDir('foo', 'foo 2'), d.libPubspec("foo", "1.0.0", deps: {
+        "foo-dep": {
+          "git": "../foo-dep.git"
+        }
+      })]).create();
+    d.git(
+        'foo-dep.git',
+        [d.libDir('foo-dep', 'foo-dep 2'), d.libPubspec('foo-dep', '1.0.0')]).commit();
+    pubUpgrade(args: ['foo']);
+    d.dir(
+        packagesPath,
+        [
+            d.dir('foo', [d.file('foo.dart', 'main() => "foo 2";')]),
+            d.dir('foo-dep', [d.file('foo-dep.dart', 'main() => "foo-dep";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/git/upgrade_locked_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/git/upgrade_locked_test.dart
new file mode 100644
index 0000000..6fa466ad
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/git/upgrade_locked_test.dart
@@ -0,0 +1,37 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration("upgrades locked Git packages", () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]).create();
+    d.git('bar.git', [d.libDir('bar'), d.libPubspec('bar', '1.0.0')]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      },
+      "bar": {
+        "git": "../bar.git"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [
+            d.dir('foo', [d.file('foo.dart', 'main() => "foo";')]),
+            d.dir('bar', [d.file('bar.dart', 'main() => "bar";')])]).validate();
+    d.git(
+        'foo.git',
+        [d.libDir('foo', 'foo 2'), d.libPubspec('foo', '1.0.0')]).commit();
+    d.git(
+        'bar.git',
+        [d.libDir('bar', 'bar 2'), d.libPubspec('bar', '1.0.0')]).commit();
+    pubUpgrade();
+    d.dir(
+        packagesPath,
+        [
+            d.dir('foo', [d.file('foo.dart', 'main() => "foo 2";')]),
+            d.dir('bar', [d.file('bar.dart', 'main() => "bar 2";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/git/upgrade_one_locked_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/git/upgrade_one_locked_test.dart
new file mode 100644
index 0000000..31b0c9b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/git/upgrade_one_locked_test.dart
@@ -0,0 +1,37 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration("upgrades one locked Git package but no others", () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]).create();
+    d.git('bar.git', [d.libDir('bar'), d.libPubspec('bar', '1.0.0')]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      },
+      "bar": {
+        "git": "../bar.git"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [
+            d.dir('foo', [d.file('foo.dart', 'main() => "foo";')]),
+            d.dir('bar', [d.file('bar.dart', 'main() => "bar";')])]).validate();
+    d.git(
+        'foo.git',
+        [d.libDir('foo', 'foo 2'), d.libPubspec('foo', '1.0.0')]).commit();
+    d.git(
+        'bar.git',
+        [d.libDir('bar', 'bar 2'), d.libPubspec('bar', '1.0.0')]).commit();
+    pubUpgrade(args: ['foo']);
+    d.dir(
+        packagesPath,
+        [
+            d.dir('foo', [d.file('foo.dart', 'main() => "foo 2";')]),
+            d.dir('bar', [d.file('bar.dart', 'main() => "bar";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/git/upgrade_to_incompatible_pubspec_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/git/upgrade_to_incompatible_pubspec_test.dart
new file mode 100644
index 0000000..b3a42db
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/git/upgrade_to_incompatible_pubspec_test.dart
@@ -0,0 +1,28 @@
+library pub_tests;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../../lib/src/exit_codes.dart' as exit_codes;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration("upgrades Git packages to an incompatible pubspec", () {
+    ensureGit();
+    d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]).create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+    d.git('foo.git', [d.libDir('zoo'), d.libPubspec('zoo', '1.0.0')]).commit();
+    pubUpgrade(
+        error: contains('"name" field doesn\'t match expected name ' '"foo".'),
+        exitCode: exit_codes.DATA);
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/git/upgrade_to_nonexistent_pubspec_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/git/upgrade_to_nonexistent_pubspec_test.dart
new file mode 100644
index 0000000..e1c2d4f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/git/upgrade_to_nonexistent_pubspec_test.dart
@@ -0,0 +1,29 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration("upgrades Git packages to a nonexistent pubspec", () {
+    ensureGit();
+    var repo =
+        d.git('foo.git', [d.libDir('foo'), d.libPubspec('foo', '1.0.0')]);
+    repo.create();
+    d.appDir({
+      "foo": {
+        "git": "../foo.git"
+      }
+    }).create();
+    pubGet();
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+    repo.runGit(['rm', 'pubspec.yaml']);
+    repo.runGit(['commit', '-m', 'delete']);
+    pubUpgrade(
+        error: new RegExp(
+            r'Could not find a file named "pubspec.yaml" ' r'in "[^\n]*"\.'));
+    d.dir(
+        packagesPath,
+        [d.dir('foo', [d.file('foo.dart', 'main() => "foo";')])]).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/hosted/unlock_dependers_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/hosted/unlock_dependers_test.dart
new file mode 100644
index 0000000..3813138
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/hosted/unlock_dependers_test.dart
@@ -0,0 +1,36 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "upgrades a locked package's dependers in order to get it to max " "version",
+      () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0", deps: {
+        "bar": "<2.0.0"
+      });
+      builder.serve("bar", "1.0.0");
+    });
+    d.appDir({
+      "foo": "any",
+      "bar": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.0",
+      "bar": "1.0.0"
+    }).validate();
+    servePackages((builder) {
+      builder.serve("foo", "2.0.0", deps: {
+        "bar": "<3.0.0"
+      });
+      builder.serve("bar", "2.0.0");
+    });
+    pubUpgrade(args: ['bar']);
+    d.packagesDir({
+      "foo": "2.0.0",
+      "bar": "2.0.0"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/hosted/unlock_if_necessary_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/hosted/unlock_if_necessary_test.dart
new file mode 100644
index 0000000..46e350f
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/hosted/unlock_if_necessary_test.dart
@@ -0,0 +1,35 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "upgrades one locked pub server package's dependencies if it's " "necessary",
+      () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0", deps: {
+        "foo_dep": "any"
+      });
+      builder.serve("foo_dep", "1.0.0");
+    });
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubGet();
+    d.packagesDir({
+      "foo": "1.0.0",
+      "foo_dep": "1.0.0"
+    }).validate();
+    servePackages((builder) {
+      builder.serve("foo", "2.0.0", deps: {
+        "foo_dep": ">1.0.0"
+      });
+      builder.serve("foo_dep", "2.0.0");
+    });
+    pubUpgrade(args: ['foo']);
+    d.packagesDir({
+      "foo": "2.0.0",
+      "foo_dep": "2.0.0"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/hosted/upgrade_removed_constraints_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/hosted/upgrade_removed_constraints_test.dart
new file mode 100644
index 0000000..568387b
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/hosted/upgrade_removed_constraints_test.dart
@@ -0,0 +1,37 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration("upgrades dependencies whose constraints have been removed", () {
+    servePackages((builder) {
+      builder.serve("foo", "1.0.0", deps: {
+        "shared-dep": "any"
+      });
+      builder.serve("bar", "1.0.0", deps: {
+        "shared-dep": "<2.0.0"
+      });
+      builder.serve("shared-dep", "1.0.0");
+      builder.serve("shared-dep", "2.0.0");
+    });
+    d.appDir({
+      "foo": "any",
+      "bar": "any"
+    }).create();
+    pubUpgrade();
+    d.packagesDir({
+      "foo": "1.0.0",
+      "bar": "1.0.0",
+      "shared-dep": "1.0.0"
+    }).validate();
+    d.appDir({
+      "foo": "any"
+    }).create();
+    pubUpgrade();
+    d.packagesDir({
+      "foo": "1.0.0",
+      "bar": null,
+      "shared-dep": "2.0.0"
+    }).validate();
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/report/describes_change_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/report/describes_change_test.dart
new file mode 100644
index 0000000..b37ecc1
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/report/describes_change_test.dart
@@ -0,0 +1,53 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration("shows how package changed from previous lockfile", () {
+    servePackages((builder) {
+      builder.serve("unchanged", "1.0.0");
+      builder.serve("version_changed", "1.0.0");
+      builder.serve("version_changed", "2.0.0");
+      builder.serve("source_changed", "1.0.0");
+    });
+    d.dir(
+        "source_changed",
+        [d.libDir("source_changed"), d.libPubspec("source_changed", "2.0.0")]).create();
+    d.dir(
+        "description_changed_1",
+        [
+            d.libDir("description_changed"),
+            d.libPubspec("description_changed", "1.0.0")]).create();
+    d.dir(
+        "description_changed_2",
+        [
+            d.libDir("description_changed"),
+            d.libPubspec("description_changed", "1.0.0")]).create();
+    d.appDir({
+      "unchanged": "any",
+      "version_changed": "1.0.0",
+      "source_changed": "any",
+      "description_changed": {
+        "path": "../description_changed_1"
+      }
+    }).create();
+    pubGet();
+    d.appDir({
+      "unchanged": "any",
+      "version_changed": "any",
+      "source_changed": {
+        "path": "../source_changed"
+      },
+      "description_changed": {
+        "path": "../description_changed_2"
+      }
+    }).create();
+    pubUpgrade(output: new RegExp(r"""
+Resolving dependencies\.\.\..*
+. description_changed 1\.0\.0 from path \.\.[/\\]description_changed_2 \(was 1\.0\.0 from path \.\.[/\\]description_changed_1\)
+. source_changed 2\.0\.0 from path \.\.[/\\]source_changed \(was 1\.0\.0\)
+. unchanged 1\.0\.0
+. version_changed 2\.0\.0 \(was 1\.0\.0\)
+""", multiLine: true));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/report/does_not_show_newer_versions_for_locked_packages_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/report/does_not_show_newer_versions_for_locked_packages_test.dart
new file mode 100644
index 0000000..40e8a84
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/report/does_not_show_newer_versions_for_locked_packages_test.dart
@@ -0,0 +1,33 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "does not show how many newer versions are available for "
+          "packages that are locked and not being upgraded",
+      () {
+    servePackages((builder) {
+      builder.serve("not_upgraded", "1.0.0");
+      builder.serve("not_upgraded", "2.0.0");
+      builder.serve("not_upgraded", "3.0.0-dev");
+      builder.serve("upgraded", "1.0.0");
+      builder.serve("upgraded", "2.0.0");
+      builder.serve("upgraded", "3.0.0-dev");
+    });
+    d.appDir({
+      "not_upgraded": "1.0.0",
+      "upgraded": "1.0.0"
+    }).create();
+    pubGet();
+    d.appDir({
+      "not_upgraded": "any",
+      "upgraded": "any"
+    }).create();
+    pubUpgrade(args: ["upgraded"], output: new RegExp(r"""
+Resolving dependencies\.\.\..*
+  not_upgraded 1\.0\.0
+. upgraded 2\.0\.0 \(was 1\.0\.0\) \(3\.0\.0-dev available\)
+""", multiLine: true));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/report/highlights_overrides_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/report/highlights_overrides_test.dart
new file mode 100644
index 0000000..9a940dd
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/report/highlights_overrides_test.dart
@@ -0,0 +1,19 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration("highlights overridden packages", () {
+    servePackages((builder) => builder.serve("overridden", "1.0.0"));
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependency_overrides": {
+          "overridden": "any"
+        }
+      })]).create();
+    pubUpgrade(output: new RegExp(r"""
+Resolving dependencies\.\.\..*
+! overridden 1\.0\.0 \(overridden\)
+""", multiLine: true));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/report/leading_character_shows_change_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/report/leading_character_shows_change_test.dart
new file mode 100644
index 0000000..14df3ff
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/report/leading_character_shows_change_test.dart
@@ -0,0 +1,79 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration("the character before each package describes the change", () {
+    servePackages((builder) {
+      builder.serve("added", "1.0.0");
+      builder.serve("downgraded", "1.0.0");
+      builder.serve("downgraded", "2.0.0");
+      builder.serve("overridden", "1.0.0");
+      builder.serve("removed", "1.0.0");
+      builder.serve("source_changed", "1.0.0");
+      builder.serve("upgraded", "1.0.0");
+      builder.serve("upgraded", "2.0.0");
+      builder.serve("unchanged", "1.0.0");
+    });
+    d.dir(
+        "description_changed_1",
+        [
+            d.libDir("description_changed"),
+            d.libPubspec("description_changed", "1.0.0")]).create();
+    d.dir(
+        "description_changed_2",
+        [
+            d.libDir("description_changed"),
+            d.libPubspec("description_changed", "1.0.0")]).create();
+    d.dir(
+        "source_changed",
+        [d.libDir("source_changed"), d.libPubspec("source_changed", "1.0.0")]).create();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "description_changed": {
+            "path": "../description_changed_1"
+          },
+          "downgraded": "2.0.0",
+          "removed": "any",
+          "source_changed": "any",
+          "unchanged": "any",
+          "upgraded": "1.0.0"
+        },
+        "dependency_overrides": {
+          "overridden": "any"
+        }
+      })]).create();
+    pubGet();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "added": "any",
+          "description_changed": {
+            "path": "../description_changed_2"
+          },
+          "downgraded": "1.0.0",
+          "source_changed": {
+            "path": "../source_changed"
+          },
+          "unchanged": "any",
+          "upgraded": "2.0.0"
+        },
+        "dependency_overrides": {
+          "overridden": "any"
+        }
+      })]).create();
+    pubUpgrade(output: new RegExp(r"""
+Resolving dependencies\.\.\..*
+\+ added .*
+\* description_changed .*
+< downgraded .*
+! overridden .*
+\* source_changed .*
+  unchanged .*
+> upgraded .*
+These packages are no longer being depended on:
+- removed .*
+""", multiLine: true));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/report/shows_newer_available_versions_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/report/shows_newer_available_versions_test.dart
new file mode 100644
index 0000000..c68442e
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/report/shows_newer_available_versions_test.dart
@@ -0,0 +1,42 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration("shows how many newer versions are available", () {
+    servePackages((builder) {
+      builder.serve("multiple_newer", "1.0.0");
+      builder.serve("multiple_newer", "1.0.1-unstable.1");
+      builder.serve("multiple_newer", "1.0.1");
+      builder.serve("multiple_newer", "1.0.2-unstable.1");
+      builder.serve("multiple_newer_stable", "1.0.0");
+      builder.serve("multiple_newer_stable", "1.0.1");
+      builder.serve("multiple_newer_stable", "1.0.2");
+      builder.serve("multiple_newer_unstable", "1.0.0");
+      builder.serve("multiple_newer_unstable", "1.0.1-unstable.1");
+      builder.serve("multiple_newer_unstable", "1.0.1-unstable.2");
+      builder.serve("no_newer", "1.0.0");
+      builder.serve("one_newer_unstable", "1.0.0");
+      builder.serve("one_newer_unstable", "1.0.1-unstable.1");
+      builder.serve("one_newer_stable", "1.0.0");
+      builder.serve("one_newer_stable", "1.0.1");
+    });
+    d.appDir({
+      "multiple_newer": "1.0.0",
+      "multiple_newer_stable": "1.0.0",
+      "multiple_newer_unstable": "1.0.0",
+      "no_newer": "1.0.0",
+      "one_newer_unstable": "1.0.0",
+      "one_newer_stable": "1.0.0"
+    }).create();
+    pubUpgrade(output: new RegExp(r"""
+Resolving dependencies\.\.\..*
+. multiple_newer 1\.0\.0 \(1\.0\.1 available\)
+. multiple_newer_stable 1\.0\.0 \(1\.0\.2\ available\)
+. multiple_newer_unstable 1\.0\.0 \(1\.0\.1-unstable\.2 available\)
+. no_newer 1\.0\.0
+. one_newer_stable 1\.0\.0 \(1\.0\.1 available\)
+. one_newer_unstable 1\.0\.0 \(1\.0\.1-unstable\.1 available\)
+""", multiLine: true));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/upgrade/report/shows_number_of_changed_dependencies_test.dart b/sdk/lib/_internal/pub_generated/test/upgrade/report/shows_number_of_changed_dependencies_test.dart
new file mode 100644
index 0000000..400bb70
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/upgrade/report/shows_number_of_changed_dependencies_test.dart
@@ -0,0 +1,26 @@
+library pub_tests;
+import '../../descriptor.dart' as d;
+import '../../test_pub.dart';
+main() {
+  initConfig();
+  integration(
+      "does not show how many newer versions are available for "
+          "packages that are locked and not being upgraded",
+      () {
+    servePackages((builder) {
+      builder.serve("a", "1.0.0");
+      builder.serve("b", "1.0.0");
+      builder.serve("c", "2.0.0");
+    });
+    d.appDir({
+      "a": "any"
+    }).create();
+    pubUpgrade(output: new RegExp(r"Changed 1 dependency!$"));
+    d.appDir({
+      "b": "any",
+      "c": "any"
+    }).create();
+    pubUpgrade(output: new RegExp(r"Changed 3 dependencies!$"));
+    pubUpgrade(output: new RegExp(r"No dependencies changed.$"));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/utils_test.dart b/sdk/lib/_internal/pub_generated/test/utils_test.dart
new file mode 100644
index 0000000..3d46711
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/utils_test.dart
@@ -0,0 +1,88 @@
+library utils_test;
+import 'package:unittest/unittest.dart';
+import 'test_pub.dart';
+import '../lib/src/utils.dart';
+main() {
+  initConfig();
+  group('yamlToString()', () {
+    test('null', () {
+      expect(yamlToString(null), equals('null'));
+    });
+    test('numbers', () {
+      expect(yamlToString(123), equals('123'));
+      expect(yamlToString(12.34), equals('12.34'));
+    });
+    test('does not quote strings that do not need it', () {
+      expect(yamlToString('a'), equals('a'));
+      expect(yamlToString('some-string'), equals('some-string'));
+      expect(yamlToString('hey123CAPS'), equals('hey123CAPS'));
+      expect(yamlToString("_under_score"), equals('_under_score'));
+    });
+    test('quotes other strings', () {
+      expect(yamlToString(''), equals('""'));
+      expect(yamlToString('123'), equals('"123"'));
+      expect(yamlToString('white space'), equals('"white space"'));
+      expect(yamlToString('"quote"'), equals(r'"\"quote\""'));
+      expect(yamlToString("apostrophe'"), equals('"apostrophe\'"'));
+      expect(yamlToString("new\nline"), equals(r'"new\nline"'));
+      expect(yamlToString("?unctu@t!on"), equals(r'"?unctu@t!on"'));
+    });
+    test('lists use JSON style', () {
+      expect(yamlToString([1, 2, 3]), equals('[1,2,3]'));
+    });
+    test('uses indentation for maps', () {
+      expect(yamlToString({
+        'a': {
+          'b': 1,
+          'c': 2
+        },
+        'd': 3
+      }), equals("""
+a:
+  b: 1
+  c: 2
+d: 3"""));
+    });
+    test('sorts map keys', () {
+      expect(yamlToString({
+        'a': 1,
+        'c': 2,
+        'b': 3,
+        'd': 4
+      }), equals("""
+a: 1
+b: 3
+c: 2
+d: 4"""));
+    });
+    test('quotes map keys as needed', () {
+      expect(yamlToString({
+        'no': 1,
+        'yes!': 2,
+        '123': 3
+      }), equals("""
+"123": 3
+no: 1
+"yes!": 2"""));
+    });
+    test('handles non-string map keys', () {
+      var map = new Map();
+      map[null] = "null";
+      map[123] = "num";
+      map[true] = "bool";
+      expect(yamlToString(map), equals("""
+123: num
+null: null
+true: bool"""));
+    });
+    test('handles empty maps', () {
+      expect(yamlToString({}), equals("{}"));
+      expect(yamlToString({
+        'a': {},
+        'b': {}
+      }), equals("""
+a: {}
+b: {}"""));
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/validator/compiled_dartdoc_test.dart b/sdk/lib/_internal/pub_generated/test/validator/compiled_dartdoc_test.dart
new file mode 100644
index 0000000..d5c35f9
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/validator/compiled_dartdoc_test.dart
@@ -0,0 +1,95 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/entrypoint.dart';
+import '../../lib/src/validator.dart';
+import '../../lib/src/validator/compiled_dartdoc.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+Validator compiledDartdoc(Entrypoint entrypoint) =>
+    new CompiledDartdocValidator(entrypoint);
+main() {
+  initConfig();
+  group('should consider a package valid if it', () {
+    setUp(d.validPackage.create);
+    integration('looks normal', () => expectNoValidationError(compiledDartdoc));
+    integration('has most but not all files from compiling dartdoc', () {
+      d.dir(
+          appPath,
+          [
+              d.dir(
+                  "doc-out",
+                  [
+                      d.file("nav.json", ""),
+                      d.file("index.html", ""),
+                      d.file("styles.css", ""),
+                      d.file("dart-logo-small.png", "")])]).create();
+      expectNoValidationError(compiledDartdoc);
+    });
+    integration('contains compiled dartdoc in a hidden directory', () {
+      ensureGit();
+      d.dir(
+          appPath,
+          [
+              d.dir(
+                  ".doc-out",
+                  [
+                      d.file('nav.json', ''),
+                      d.file('index.html', ''),
+                      d.file('styles.css', ''),
+                      d.file('dart-logo-small.png', ''),
+                      d.file('client-live-nav.js', '')])]).create();
+      expectNoValidationError(compiledDartdoc);
+    });
+    integration('contains compiled dartdoc in a gitignored directory', () {
+      ensureGit();
+      d.git(
+          appPath,
+          [
+              d.dir(
+                  "doc-out",
+                  [
+                      d.file('nav.json', ''),
+                      d.file('index.html', ''),
+                      d.file('styles.css', ''),
+                      d.file('dart-logo-small.png', ''),
+                      d.file('client-live-nav.js', '')]),
+              d.file(".gitignore", "/doc-out")]).create();
+      expectNoValidationError(compiledDartdoc);
+    });
+  });
+  group("should consider a package invalid if it", () {
+    integration('contains compiled dartdoc', () {
+      d.validPackage.create();
+      d.dir(
+          appPath,
+          [
+              d.dir(
+                  'doc-out',
+                  [
+                      d.file('nav.json', ''),
+                      d.file('index.html', ''),
+                      d.file('styles.css', ''),
+                      d.file('dart-logo-small.png', ''),
+                      d.file('client-live-nav.js', '')])]).create();
+      expectValidationWarning(compiledDartdoc);
+    });
+    integration(
+        'contains compiled dartdoc in a non-gitignored hidden ' 'directory',
+        () {
+      ensureGit();
+      d.validPackage.create();
+      d.git(
+          appPath,
+          [
+              d.dir(
+                  '.doc-out',
+                  [
+                      d.file('nav.json', ''),
+                      d.file('index.html', ''),
+                      d.file('styles.css', ''),
+                      d.file('dart-logo-small.png', ''),
+                      d.file('client-live-nav.js', '')])]).create();
+      expectValidationWarning(compiledDartdoc);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/validator/dependency_override_test.dart b/sdk/lib/_internal/pub_generated/test/validator/dependency_override_test.dart
new file mode 100644
index 0000000..87e5723
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/validator/dependency_override_test.dart
@@ -0,0 +1,20 @@
+import '../../lib/src/entrypoint.dart';
+import '../../lib/src/validator.dart';
+import '../../lib/src/validator/dependency_override.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+Validator dependencyOverride(Entrypoint entrypoint) =>
+    new DependencyOverrideValidator(entrypoint);
+main() {
+  initConfig();
+  integration('invalidates a package if it has dependency overrides', () {
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependency_overrides": {
+          "foo": "<3.0.0"
+        }
+      })]).create();
+    expectValidationError(dependencyOverride);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/validator/dependency_test.dart b/sdk/lib/_internal/pub_generated/test/validator/dependency_test.dart
new file mode 100644
index 0000000..3300ace
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/validator/dependency_test.dart
@@ -0,0 +1,333 @@
+import 'dart:async';
+import 'dart:convert';
+import 'package:http/http.dart' as http;
+import 'package:http/testing.dart';
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/entrypoint.dart';
+import '../../lib/src/validator.dart';
+import '../../lib/src/validator/dependency.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+Validator dependency(Entrypoint entrypoint) =>
+    new DependencyValidator(entrypoint);
+expectDependencyValidationError(String error) {
+  expect(
+      schedulePackageValidation(dependency),
+      completion(pairOf(anyElement(contains(error)), isEmpty)));
+}
+expectDependencyValidationWarning(String warning) {
+  expect(
+      schedulePackageValidation(dependency),
+      completion(pairOf(isEmpty, anyElement(contains(warning)))));
+}
+setUpDependency(Map dep, {List<String> hostedVersions}) {
+  useMockClient(new MockClient((request) {
+    expect(request.method, equals("GET"));
+    expect(request.url.path, equals("/api/packages/foo"));
+    if (hostedVersions == null) {
+      return new Future.value(new http.Response("not found", 404));
+    } else {
+      return new Future.value(new http.Response(JSON.encode({
+        "name": "foo",
+        "uploaders": ["nweiz@google.com"],
+        "versions": hostedVersions.map(
+            (version) => packageVersionApiMap(packageMap('foo', version))).toList()
+      }), 200));
+    }
+  }));
+  d.dir(appPath, [d.libPubspec("test_pkg", "1.0.0", deps: {
+      "foo": dep
+    })]).create();
+}
+main() {
+  initConfig();
+  integration('should consider a package valid if it looks normal', () {
+    d.validPackage.create();
+    expectNoValidationError(dependency);
+  });
+  group('should consider a package invalid if it', () {
+    setUp(d.validPackage.create);
+    group('has a git dependency', () {
+      group('where a hosted version exists', () {
+        integration("and should suggest the hosted primary version", () {
+          setUpDependency({
+            'git': 'git://github.com/dart-lang/foo'
+          }, hostedVersions: ["3.0.0-pre", "2.0.0", "1.0.0"]);
+          expectDependencyValidationWarning('  foo: ">=2.0.0 <3.0.0"');
+        });
+        integration(
+            "and should suggest the hosted prerelease version if "
+                "it's the only version available",
+            () {
+          setUpDependency({
+            'git': 'git://github.com/dart-lang/foo'
+          }, hostedVersions: ["3.0.0-pre", "2.0.0-pre"]);
+          expectDependencyValidationWarning('  foo: ">=3.0.0-pre <4.0.0"');
+        });
+        integration(
+            "and should suggest a tighter constraint if primary is " "pre-1.0.0",
+            () {
+          setUpDependency({
+            'git': 'git://github.com/dart-lang/foo'
+          }, hostedVersions: ["0.0.1", "0.0.2"]);
+          expectDependencyValidationWarning('  foo: ">=0.0.2 <0.1.0"');
+        });
+      });
+      group('where no hosted version exists', () {
+        integration("and should use the other source's version", () {
+          setUpDependency({
+            'git': 'git://github.com/dart-lang/foo',
+            'version': '>=1.0.0 <2.0.0'
+          });
+          expectDependencyValidationWarning('  foo: ">=1.0.0 <2.0.0"');
+        });
+        integration(
+            "and should use the other source's unquoted version if " "concrete",
+            () {
+          setUpDependency({
+            'git': 'git://github.com/dart-lang/foo',
+            'version': '0.2.3'
+          });
+          expectDependencyValidationWarning('  foo: 0.2.3');
+        });
+      });
+    });
+    group('has a path dependency', () {
+      group('where a hosted version exists', () {
+        integration("and should suggest the hosted primary version", () {
+          setUpDependency({
+            'path': path.join(sandboxDir, 'foo')
+          }, hostedVersions: ["3.0.0-pre", "2.0.0", "1.0.0"]);
+          expectDependencyValidationError('  foo: ">=2.0.0 <3.0.0"');
+        });
+        integration(
+            "and should suggest the hosted prerelease version if "
+                "it's the only version available",
+            () {
+          setUpDependency({
+            'path': path.join(sandboxDir, 'foo')
+          }, hostedVersions: ["3.0.0-pre", "2.0.0-pre"]);
+          expectDependencyValidationError('  foo: ">=3.0.0-pre <4.0.0"');
+        });
+        integration(
+            "and should suggest a tighter constraint if primary is " "pre-1.0.0",
+            () {
+          setUpDependency({
+            'path': path.join(sandboxDir, 'foo')
+          }, hostedVersions: ["0.0.1", "0.0.2"]);
+          expectDependencyValidationError('  foo: ">=0.0.2 <0.1.0"');
+        });
+      });
+      group('where no hosted version exists', () {
+        integration("and should use the other source's version", () {
+          setUpDependency({
+            'path': path.join(sandboxDir, 'foo'),
+            'version': '>=1.0.0 <2.0.0'
+          });
+          expectDependencyValidationError('  foo: ">=1.0.0 <2.0.0"');
+        });
+        integration(
+            "and should use the other source's unquoted version if " "concrete",
+            () {
+          setUpDependency({
+            'path': path.join(sandboxDir, 'foo'),
+            'version': '0.2.3'
+          });
+          expectDependencyValidationError('  foo: 0.2.3');
+        });
+      });
+    });
+    group('has an unconstrained dependency', () {
+      group('and it should not suggest a version', () {
+        integration("if there's no lockfile", () {
+          d.dir(appPath, [d.libPubspec("test_pkg", "1.0.0", deps: {
+              "foo": "any"
+            })]).create();
+          expect(
+              schedulePackageValidation(dependency),
+              completion(pairOf(isEmpty, everyElement(isNot(contains("\n  foo:"))))));
+        });
+        integration(
+            "if the lockfile doesn't have an entry for the " "dependency",
+            () {
+          d.dir(appPath, [d.libPubspec("test_pkg", "1.0.0", deps: {
+              "foo": "any"
+            }), d.file("pubspec.lock", JSON.encode({
+              'packages': {
+                'bar': {
+                  'version': '1.2.3',
+                  'source': 'hosted',
+                  'description': {
+                    'name': 'bar',
+                    'url': 'http://pub.dartlang.org'
+                  }
+                }
+              }
+            }))]).create();
+          expect(
+              schedulePackageValidation(dependency),
+              completion(pairOf(isEmpty, everyElement(isNot(contains("\n  foo:"))))));
+        });
+      });
+      group('with a lockfile', () {
+        integration(
+            'and it should suggest a constraint based on the locked ' 'version',
+            () {
+          d.dir(appPath, [d.libPubspec("test_pkg", "1.0.0", deps: {
+              "foo": "any"
+            }), d.file("pubspec.lock", JSON.encode({
+              'packages': {
+                'foo': {
+                  'version': '1.2.3',
+                  'source': 'hosted',
+                  'description': {
+                    'name': 'foo',
+                    'url': 'http://pub.dartlang.org'
+                  }
+                }
+              }
+            }))]).create();
+          expectDependencyValidationWarning('  foo: ">=1.2.3 <2.0.0"');
+        });
+        integration(
+            'and it should suggest a concrete constraint if the locked '
+                'version is pre-1.0.0',
+            () {
+          d.dir(appPath, [d.libPubspec("test_pkg", "1.0.0", deps: {
+              "foo": "any"
+            }), d.file("pubspec.lock", JSON.encode({
+              'packages': {
+                'foo': {
+                  'version': '0.1.2',
+                  'source': 'hosted',
+                  'description': {
+                    'name': 'foo',
+                    'url': 'http://pub.dartlang.org'
+                  }
+                }
+              }
+            }))]).create();
+          expectDependencyValidationWarning('  foo: ">=0.1.2 <0.2.0"');
+        });
+      });
+    });
+    integration(
+        'with a single-version dependency and it should suggest a '
+            'constraint based on the version',
+        () {
+      d.dir(appPath, [d.libPubspec("test_pkg", "1.0.0", deps: {
+          "foo": "1.2.3"
+        })]).create();
+      expectDependencyValidationWarning('  foo: ">=1.2.3 <2.0.0"');
+    });
+    group('has a dependency without a lower bound', () {
+      group('and it should not suggest a version', () {
+        integration("if there's no lockfile", () {
+          d.dir(appPath, [d.libPubspec("test_pkg", "1.0.0", deps: {
+              "foo": "<3.0.0"
+            })]).create();
+          expect(
+              schedulePackageValidation(dependency),
+              completion(pairOf(isEmpty, everyElement(isNot(contains("\n  foo:"))))));
+        });
+        integration(
+            "if the lockfile doesn't have an entry for the " "dependency",
+            () {
+          d.dir(appPath, [d.libPubspec("test_pkg", "1.0.0", deps: {
+              "foo": "<3.0.0"
+            }), d.file("pubspec.lock", JSON.encode({
+              'packages': {
+                'bar': {
+                  'version': '1.2.3',
+                  'source': 'hosted',
+                  'description': {
+                    'name': 'bar',
+                    'url': 'http://pub.dartlang.org'
+                  }
+                }
+              }
+            }))]).create();
+          expect(
+              schedulePackageValidation(dependency),
+              completion(pairOf(isEmpty, everyElement(isNot(contains("\n  foo:"))))));
+        });
+      });
+      group('with a lockfile', () {
+        integration(
+            'and it should suggest a constraint based on the locked ' 'version',
+            () {
+          d.dir(appPath, [d.libPubspec("test_pkg", "1.0.0", deps: {
+              "foo": "<3.0.0"
+            }), d.file("pubspec.lock", JSON.encode({
+              'packages': {
+                'foo': {
+                  'version': '1.2.3',
+                  'source': 'hosted',
+                  'description': {
+                    'name': 'foo',
+                    'url': 'http://pub.dartlang.org'
+                  }
+                }
+              }
+            }))]).create();
+          expectDependencyValidationWarning('  foo: ">=1.2.3 <3.0.0"');
+        });
+        integration('and it should preserve the upper-bound operator', () {
+          d.dir(appPath, [d.libPubspec("test_pkg", "1.0.0", deps: {
+              "foo": "<=3.0.0"
+            }), d.file("pubspec.lock", JSON.encode({
+              'packages': {
+                'foo': {
+                  'version': '1.2.3',
+                  'source': 'hosted',
+                  'description': {
+                    'name': 'foo',
+                    'url': 'http://pub.dartlang.org'
+                  }
+                }
+              }
+            }))]).create();
+          expectDependencyValidationWarning('  foo: ">=1.2.3 <=3.0.0"');
+        });
+        integration(
+            'and it should expand the suggested constraint if the '
+                'locked version matches the upper bound',
+            () {
+          d.dir(appPath, [d.libPubspec("test_pkg", "1.0.0", deps: {
+              "foo": "<=1.2.3"
+            }), d.file("pubspec.lock", JSON.encode({
+              'packages': {
+                'foo': {
+                  'version': '1.2.3',
+                  'source': 'hosted',
+                  'description': {
+                    'name': 'foo',
+                    'url': 'http://pub.dartlang.org'
+                  }
+                }
+              }
+            }))]).create();
+          expectDependencyValidationWarning('  foo: ">=1.2.3 <2.0.0"');
+        });
+      });
+    });
+    group('with a dependency without an upper bound', () {
+      integration(
+          'and it should suggest a constraint based on the lower bound',
+          () {
+        d.dir(appPath, [d.libPubspec("test_pkg", "1.0.0", deps: {
+            "foo": ">=1.2.3"
+          })]).create();
+        expectDependencyValidationWarning('  foo: ">=1.2.3 <2.0.0"');
+      });
+      integration('and it should preserve the lower-bound operator', () {
+        d.dir(appPath, [d.libPubspec("test_pkg", "1.0.0", deps: {
+            "foo": ">1.2.3"
+          })]).create();
+        expectDependencyValidationWarning('  foo: ">1.2.3 <2.0.0"');
+      });
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/validator/directory_test.dart b/sdk/lib/_internal/pub_generated/test/validator/directory_test.dart
new file mode 100644
index 0000000..b563e0c
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/validator/directory_test.dart
@@ -0,0 +1,39 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/entrypoint.dart';
+import '../../lib/src/validator.dart';
+import '../../lib/src/validator/directory.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+Validator directory(Entrypoint entrypoint) =>
+    new DirectoryValidator(entrypoint);
+main() {
+  initConfig();
+  group('should consider a package valid if it', () {
+    setUp(d.validPackage.create);
+    integration('looks normal', () => expectNoValidationError(directory));
+    integration('has a nested directory named "tools"', () {
+      d.dir(appPath, [d.dir("foo", [d.dir("tools")])]).create();
+      expectNoValidationError(directory);
+    });
+  });
+  group(
+      'should consider a package invalid if it has a top-level directory ' 'named',
+      () {
+    setUp(d.validPackage.create);
+    var names = [
+        "benchmarks",
+        "docs",
+        "examples",
+        "sample",
+        "samples",
+        "tests",
+        "tools"];
+    for (var name in names) {
+      integration('"$name"', () {
+        d.dir(appPath, [d.dir(name)]).create();
+        expectValidationWarning(directory);
+      });
+    }
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/validator/license_test.dart b/sdk/lib/_internal/pub_generated/test/validator/license_test.dart
new file mode 100644
index 0000000..5868af3
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/validator/license_test.dart
@@ -0,0 +1,39 @@
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/entrypoint.dart';
+import '../../lib/src/io.dart';
+import '../../lib/src/validator.dart';
+import '../../lib/src/validator/license.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+Validator license(Entrypoint entrypoint) => new LicenseValidator(entrypoint);
+main() {
+  initConfig();
+  group('should consider a package valid if it', () {
+    setUp(d.validPackage.create);
+    integration('looks normal', () => expectNoValidationError(license));
+    integration('has a COPYING file', () {
+      schedule(() => deleteEntry(path.join(sandboxDir, appPath, 'LICENSE')));
+      d.file(path.join(appPath, 'COPYING'), '').create();
+      expectNoValidationError(license);
+    });
+    integration('has a prefixed LICENSE file', () {
+      schedule(() => deleteEntry(path.join(sandboxDir, appPath, 'LICENSE')));
+      d.file(path.join(appPath, 'MIT_LICENSE'), '').create();
+      expectNoValidationError(license);
+    });
+    integration('has a suffixed LICENSE file', () {
+      schedule(() => deleteEntry(path.join(sandboxDir, appPath, 'LICENSE')));
+      d.file(path.join(appPath, 'LICENSE.md'), '').create();
+      expectNoValidationError(license);
+    });
+  });
+  integration(
+      'should consider a package invalid if it has no LICENSE file',
+      () {
+    d.validPackage.create();
+    schedule(() => deleteEntry(path.join(sandboxDir, appPath, 'LICENSE')));
+    expectValidationError(license);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/validator/name_test.dart b/sdk/lib/_internal/pub_generated/test/validator/name_test.dart
new file mode 100644
index 0000000..318a665
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/validator/name_test.dart
@@ -0,0 +1,100 @@
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/entrypoint.dart';
+import '../../lib/src/io.dart';
+import '../../lib/src/validator.dart';
+import '../../lib/src/validator/name.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+Validator name(Entrypoint entrypoint) => new NameValidator(entrypoint);
+main() {
+  initConfig();
+  group('should consider a package valid if it', () {
+    setUp(d.validPackage.create);
+    integration('looks normal', () => expectNoValidationError(name));
+    integration('has a badly-named library in lib/src', () {
+      d.dir(
+          appPath,
+          [
+              d.libPubspec("test_pkg", "1.0.0"),
+              d.dir(
+                  "lib",
+                  [
+                      d.file("test_pkg.dart", "int i = 1;"),
+                      d.dir("src", [d.file("8ball.dart", "int j = 2;")])])]).create();
+      expectNoValidationError(name);
+    });
+    integration('has a name that starts with an underscore', () {
+      d.dir(
+          appPath,
+          [
+              d.libPubspec("_test_pkg", "1.0.0"),
+              d.dir("lib", [d.file("_test_pkg.dart", "int i = 1;")])]).create();
+      expectNoValidationError(name);
+    });
+  });
+  group('should consider a package invalid if it', () {
+    setUp(d.validPackage.create);
+    integration('has an empty package name', () {
+      d.dir(appPath, [d.libPubspec("", "1.0.0")]).create();
+      expectValidationError(name);
+    });
+    integration('has a package name with an invalid character', () {
+      d.dir(appPath, [d.libPubspec("test-pkg", "1.0.0")]).create();
+      expectValidationError(name);
+    });
+    integration('has a package name that begins with a number', () {
+      d.dir(appPath, [d.libPubspec("8ball", "1.0.0")]).create();
+      expectValidationError(name);
+    });
+    integration('has a package name that contains upper-case letters', () {
+      d.dir(appPath, [d.libPubspec("TestPkg", "1.0.0")]).create();
+      expectValidationWarning(name);
+    });
+    integration('has a package name that is a Dart reserved word', () {
+      d.dir(appPath, [d.libPubspec("final", "1.0.0")]).create();
+      expectValidationError(name);
+    });
+    integration('has a library name with an invalid character', () {
+      d.dir(
+          appPath,
+          [
+              d.libPubspec("test_pkg", "1.0.0"),
+              d.dir("lib", [d.file("test-pkg.dart", "int i = 0;")])]).create();
+      expectValidationWarning(name);
+    });
+    integration('has a library name that begins with a number', () {
+      d.dir(
+          appPath,
+          [
+              d.libPubspec("test_pkg", "1.0.0"),
+              d.dir("lib", [d.file("8ball.dart", "int i = 0;")])]).create();
+      expectValidationWarning(name);
+    });
+    integration('has a library name that contains upper-case letters', () {
+      d.dir(
+          appPath,
+          [
+              d.libPubspec("test_pkg", "1.0.0"),
+              d.dir("lib", [d.file("TestPkg.dart", "int i = 0;")])]).create();
+      expectValidationWarning(name);
+    });
+    integration('has a library name that is a Dart reserved word', () {
+      d.dir(
+          appPath,
+          [
+              d.libPubspec("test_pkg", "1.0.0"),
+              d.dir("lib", [d.file("for.dart", "int i = 0;")])]).create();
+      expectValidationWarning(name);
+    });
+    integration('has a single library named differently than the package', () {
+      schedule(
+          () => deleteEntry(path.join(sandboxDir, appPath, "lib", "test_pkg.dart")));
+      d.dir(
+          appPath,
+          [d.dir("lib", [d.file("best_pkg.dart", "int i = 0;")])]).create();
+      expectValidationWarning(name);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/validator/pubspec_field_test.dart b/sdk/lib/_internal/pub_generated/test/validator/pubspec_field_test.dart
new file mode 100644
index 0000000..9f571c9
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/validator/pubspec_field_test.dart
@@ -0,0 +1,129 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/entrypoint.dart';
+import '../../lib/src/validator.dart';
+import '../../lib/src/validator/pubspec_field.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+Validator pubspecField(Entrypoint entrypoint) =>
+    new PubspecFieldValidator(entrypoint);
+main() {
+  initConfig();
+  group('should consider a package valid if it', () {
+    setUp(d.validPackage.create);
+    integration('looks normal', () => expectNoValidationError(pubspecField));
+    integration('has "authors" instead of "author"', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg["authors"] = [pkg.remove("author")];
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectNoValidationError(pubspecField);
+    });
+    integration('has an HTTPS homepage URL', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg["homepage"] = "https://pub.dartlang.org";
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectNoValidationError(pubspecField);
+    });
+    integration('has an HTTPS documentation URL', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg["documentation"] = "https://pub.dartlang.org";
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectNoValidationError(pubspecField);
+    });
+  });
+  group('should consider a package invalid if it', () {
+    setUp(d.validPackage.create);
+    integration('is missing the "homepage" field', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg.remove("homepage");
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectValidationError(pubspecField);
+    });
+    integration('is missing the "description" field', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg.remove("description");
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectValidationError(pubspecField);
+    });
+    integration('is missing the "author" field', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg.remove("author");
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectValidationError(pubspecField);
+    });
+    integration('has a non-string "homepage" field', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg["homepage"] = 12;
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectValidationError(pubspecField);
+    });
+    integration('has a non-string "description" field', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg["description"] = 12;
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectValidationError(pubspecField);
+    });
+    integration('has a non-string "author" field', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg["author"] = 12;
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectValidationError(pubspecField);
+    });
+    integration('has a non-list "authors" field', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg["authors"] = 12;
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectValidationError(pubspecField);
+    });
+    integration('has a non-string member of the "authors" field', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg["authors"] = [12];
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectValidationError(pubspecField);
+    });
+    integration('has a single author without an email', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg["author"] = "Natalie Weizenbaum";
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectValidationWarning(pubspecField);
+    });
+    integration('has one of several authors without an email', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg.remove("author");
+      pkg["authors"] = [
+          "Bob Nystrom <rnystrom@google.com>",
+          "Natalie Weizenbaum",
+          "John Messerly <jmesserly@google.com>"];
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectValidationWarning(pubspecField);
+    });
+    integration('has a single author without a name', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg["author"] = "<nweiz@google.com>";
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectValidationWarning(pubspecField);
+    });
+    integration('has one of several authors without a name', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg.remove("author");
+      pkg["authors"] = [
+          "Bob Nystrom <rnystrom@google.com>",
+          "<nweiz@google.com>",
+          "John Messerly <jmesserly@google.com>"];
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectValidationWarning(pubspecField);
+    });
+    integration('has a non-HTTP homepage URL', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg["homepage"] = "file:///foo/bar";
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectValidationError(pubspecField);
+    });
+    integration('has a non-HTTP documentation URL', () {
+      var pkg = packageMap("test_pkg", "1.0.0");
+      pkg["documentation"] = "file:///foo/bar";
+      d.dir(appPath, [d.pubspec(pkg)]).create();
+      expectValidationError(pubspecField);
+    });
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/validator/size_test.dart b/sdk/lib/_internal/pub_generated/test/validator/size_test.dart
new file mode 100644
index 0000000..e09f653
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/validator/size_test.dart
@@ -0,0 +1,21 @@
+import 'dart:async';
+import 'dart:math' as math;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/validator/size.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+Function size(int size) {
+  return (entrypoint) => new SizeValidator(entrypoint, new Future.value(size));
+}
+main() {
+  initConfig();
+  setUp(d.validPackage.create);
+  integration('should consider a package valid if it is <= 10 MB', () {
+    expectNoValidationError(size(100));
+    expectNoValidationError(size(10 * math.pow(2, 20)));
+  });
+  integration('should consider a package invalid if it is more than 10 MB', () {
+    expectValidationError(size(10 * math.pow(2, 20) + 1));
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/validator/utf8_readme_test.dart b/sdk/lib/_internal/pub_generated/test/validator/utf8_readme_test.dart
new file mode 100644
index 0000000..9f7af02
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/validator/utf8_readme_test.dart
@@ -0,0 +1,31 @@
+import 'package:scheduled_test/scheduled_test.dart';
+import '../../lib/src/entrypoint.dart';
+import '../../lib/src/validator.dart';
+import '../../lib/src/validator/utf8_readme.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+Validator utf8Readme(Entrypoint entrypoint) =>
+    new Utf8ReadmeValidator(entrypoint);
+main() {
+  initConfig();
+  group('should consider a package valid if it', () {
+    setUp(d.validPackage.create);
+    integration('looks normal', () => expectNoValidationError(utf8Readme));
+    integration('has a non-primary readme with invalid utf-8', () {
+      d.dir(
+          appPath,
+          [
+              d.file("README", "Valid utf-8"),
+              d.binaryFile("README.invalid", [192])]).create();
+      expectNoValidationError(utf8Readme);
+    });
+  });
+  integration(
+      'should consider a package invalid if it has a README with ' 'invalid utf-8',
+      () {
+    d.validPackage.create();
+    d.dir(appPath, [d.binaryFile("README", [192])]).create();
+    expectValidationWarning(utf8Readme);
+  });
+}
diff --git a/sdk/lib/_internal/pub_generated/test/validator/utils.dart b/sdk/lib/_internal/pub_generated/test/validator/utils.dart
new file mode 100644
index 0000000..b1bcbad
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/validator/utils.dart
@@ -0,0 +1,16 @@
+library validator.utils;
+import 'package:scheduled_test/scheduled_test.dart';
+import '../test_pub.dart';
+void expectNoValidationError(ValidatorCreator fn) {
+  expect(schedulePackageValidation(fn), completion(pairOf(isEmpty, isEmpty)));
+}
+void expectValidationError(ValidatorCreator fn) {
+  expect(
+      schedulePackageValidation(fn),
+      completion(pairOf(isNot(isEmpty), anything)));
+}
+void expectValidationWarning(ValidatorCreator fn) {
+  expect(
+      schedulePackageValidation(fn),
+      completion(pairOf(isEmpty, isNot(isEmpty))));
+}
diff --git a/sdk/lib/_internal/pub_generated/test/version_solver_test.dart b/sdk/lib/_internal/pub_generated/test/version_solver_test.dart
new file mode 100644
index 0000000..93ff88e2
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/version_solver_test.dart
@@ -0,0 +1,1460 @@
+library pub_upgrade_test;
+import 'dart:async';
+import 'package:unittest/unittest.dart';
+import '../lib/src/lock_file.dart';
+import '../lib/src/log.dart' as log;
+import '../lib/src/package.dart';
+import '../lib/src/pubspec.dart';
+import '../lib/src/sdk.dart' as sdk;
+import '../lib/src/source/cached.dart';
+import '../lib/src/system_cache.dart';
+import '../lib/src/utils.dart';
+import '../lib/src/version.dart';
+import '../lib/src/solver/version_solver.dart';
+import 'test_pub.dart';
+MockSource source1;
+MockSource source2;
+main() {
+  initConfig();
+  sdk.version = new Version(1, 2, 3);
+  group('basic graph', basicGraph);
+  group('with lockfile', withLockFile);
+  group('root dependency', rootDependency);
+  group('dev dependency', devDependency);
+  group('unsolvable', unsolvable);
+  group('bad source', badSource);
+  group('backtracking', backtracking);
+  group('SDK constraint', sdkConstraint);
+  group('pre-release', prerelease);
+  group('override', override);
+  group('downgrade', downgrade);
+}
+void basicGraph() {
+  testResolve('no dependencies', {
+    'myapp 0.0.0': {}
+  }, result: {
+    'myapp from root': '0.0.0'
+  });
+  testResolve('simple dependency tree', {
+    'myapp 0.0.0': {
+      'a': '1.0.0',
+      'b': '1.0.0'
+    },
+    'a 1.0.0': {
+      'aa': '1.0.0',
+      'ab': '1.0.0'
+    },
+    'aa 1.0.0': {},
+    'ab 1.0.0': {},
+    'b 1.0.0': {
+      'ba': '1.0.0',
+      'bb': '1.0.0'
+    },
+    'ba 1.0.0': {},
+    'bb 1.0.0': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '1.0.0',
+    'aa': '1.0.0',
+    'ab': '1.0.0',
+    'b': '1.0.0',
+    'ba': '1.0.0',
+    'bb': '1.0.0'
+  });
+  testResolve('shared dependency with overlapping constraints', {
+    'myapp 0.0.0': {
+      'a': '1.0.0',
+      'b': '1.0.0'
+    },
+    'a 1.0.0': {
+      'shared': '>=2.0.0 <4.0.0'
+    },
+    'b 1.0.0': {
+      'shared': '>=3.0.0 <5.0.0'
+    },
+    'shared 2.0.0': {},
+    'shared 3.0.0': {},
+    'shared 3.6.9': {},
+    'shared 4.0.0': {},
+    'shared 5.0.0': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '1.0.0',
+    'b': '1.0.0',
+    'shared': '3.6.9'
+  });
+  testResolve(
+      'shared dependency where dependent version in turn affects '
+          'other dependencies',
+      {
+    'myapp 0.0.0': {
+      'foo': '<=1.0.2',
+      'bar': '1.0.0'
+    },
+    'foo 1.0.0': {},
+    'foo 1.0.1': {
+      'bang': '1.0.0'
+    },
+    'foo 1.0.2': {
+      'whoop': '1.0.0'
+    },
+    'foo 1.0.3': {
+      'zoop': '1.0.0'
+    },
+    'bar 1.0.0': {
+      'foo': '<=1.0.1'
+    },
+    'bang 1.0.0': {},
+    'whoop 1.0.0': {},
+    'zoop 1.0.0': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'foo': '1.0.1',
+    'bar': '1.0.0',
+    'bang': '1.0.0'
+  }, maxTries: 2);
+  testResolve('circular dependency', {
+    'myapp 1.0.0': {
+      'foo': '1.0.0'
+    },
+    'foo 1.0.0': {
+      'bar': '1.0.0'
+    },
+    'bar 1.0.0': {
+      'foo': '1.0.0'
+    }
+  }, result: {
+    'myapp from root': '1.0.0',
+    'foo': '1.0.0',
+    'bar': '1.0.0'
+  });
+}
+withLockFile() {
+  testResolve('with compatible locked dependency', {
+    'myapp 0.0.0': {
+      'foo': 'any'
+    },
+    'foo 1.0.0': {
+      'bar': '1.0.0'
+    },
+    'foo 1.0.1': {
+      'bar': '1.0.1'
+    },
+    'foo 1.0.2': {
+      'bar': '1.0.2'
+    },
+    'bar 1.0.0': {},
+    'bar 1.0.1': {},
+    'bar 1.0.2': {}
+  }, lockfile: {
+    'foo': '1.0.1'
+  }, result: {
+    'myapp from root': '0.0.0',
+    'foo': '1.0.1',
+    'bar': '1.0.1'
+  });
+  testResolve('with incompatible locked dependency', {
+    'myapp 0.0.0': {
+      'foo': '>1.0.1'
+    },
+    'foo 1.0.0': {
+      'bar': '1.0.0'
+    },
+    'foo 1.0.1': {
+      'bar': '1.0.1'
+    },
+    'foo 1.0.2': {
+      'bar': '1.0.2'
+    },
+    'bar 1.0.0': {},
+    'bar 1.0.1': {},
+    'bar 1.0.2': {}
+  }, lockfile: {
+    'foo': '1.0.1'
+  }, result: {
+    'myapp from root': '0.0.0',
+    'foo': '1.0.2',
+    'bar': '1.0.2'
+  });
+  testResolve('with unrelated locked dependency', {
+    'myapp 0.0.0': {
+      'foo': 'any'
+    },
+    'foo 1.0.0': {
+      'bar': '1.0.0'
+    },
+    'foo 1.0.1': {
+      'bar': '1.0.1'
+    },
+    'foo 1.0.2': {
+      'bar': '1.0.2'
+    },
+    'bar 1.0.0': {},
+    'bar 1.0.1': {},
+    'bar 1.0.2': {},
+    'baz 1.0.0': {}
+  }, lockfile: {
+    'baz': '1.0.0'
+  }, result: {
+    'myapp from root': '0.0.0',
+    'foo': '1.0.2',
+    'bar': '1.0.2'
+  });
+  testResolve(
+      'unlocks dependencies if necessary to ensure that a new '
+          'dependency is satisfied',
+      {
+    'myapp 0.0.0': {
+      'foo': 'any',
+      'newdep': 'any'
+    },
+    'foo 1.0.0': {
+      'bar': '<2.0.0'
+    },
+    'bar 1.0.0': {
+      'baz': '<2.0.0'
+    },
+    'baz 1.0.0': {
+      'qux': '<2.0.0'
+    },
+    'qux 1.0.0': {},
+    'foo 2.0.0': {
+      'bar': '<3.0.0'
+    },
+    'bar 2.0.0': {
+      'baz': '<3.0.0'
+    },
+    'baz 2.0.0': {
+      'qux': '<3.0.0'
+    },
+    'qux 2.0.0': {},
+    'newdep 2.0.0': {
+      'baz': '>=1.5.0'
+    }
+  }, lockfile: {
+    'foo': '1.0.0',
+    'bar': '1.0.0',
+    'baz': '1.0.0',
+    'qux': '1.0.0'
+  }, result: {
+    'myapp from root': '0.0.0',
+    'foo': '2.0.0',
+    'bar': '2.0.0',
+    'baz': '2.0.0',
+    'qux': '1.0.0',
+    'newdep': '2.0.0'
+  }, maxTries: 3);
+}
+rootDependency() {
+  testResolve('with root source', {
+    'myapp 1.0.0': {
+      'foo': '1.0.0'
+    },
+    'foo 1.0.0': {
+      'myapp from root': '>=1.0.0'
+    }
+  }, result: {
+    'myapp from root': '1.0.0',
+    'foo': '1.0.0'
+  });
+  testResolve('with different source', {
+    'myapp 1.0.0': {
+      'foo': '1.0.0'
+    },
+    'foo 1.0.0': {
+      'myapp': '>=1.0.0'
+    }
+  }, result: {
+    'myapp from root': '1.0.0',
+    'foo': '1.0.0'
+  });
+  testResolve('with mismatched sources', {
+    'myapp 1.0.0': {
+      'foo': '1.0.0',
+      'bar': '1.0.0'
+    },
+    'foo 1.0.0': {
+      'myapp': '>=1.0.0'
+    },
+    'bar 1.0.0': {
+      'myapp from mock2': '>=1.0.0'
+    }
+  }, error: sourceMismatch('myapp', 'foo', 'bar'));
+  testResolve('with wrong version', {
+    'myapp 1.0.0': {
+      'foo': '1.0.0'
+    },
+    'foo 1.0.0': {
+      'myapp': '<1.0.0'
+    }
+  }, error: couldNotSolve);
+}
+devDependency() {
+  testResolve("includes root package's dev dependencies", {
+    'myapp 1.0.0': {
+      '(dev) foo': '1.0.0',
+      '(dev) bar': '1.0.0'
+    },
+    'foo 1.0.0': {},
+    'bar 1.0.0': {}
+  }, result: {
+    'myapp from root': '1.0.0',
+    'foo': '1.0.0',
+    'bar': '1.0.0'
+  });
+  testResolve("includes dev dependency's transitive dependencies", {
+    'myapp 1.0.0': {
+      '(dev) foo': '1.0.0'
+    },
+    'foo 1.0.0': {
+      'bar': '1.0.0'
+    },
+    'bar 1.0.0': {}
+  }, result: {
+    'myapp from root': '1.0.0',
+    'foo': '1.0.0',
+    'bar': '1.0.0'
+  });
+  testResolve("ignores transitive dependency's dev dependencies", {
+    'myapp 1.0.0': {
+      'foo': '1.0.0'
+    },
+    'foo 1.0.0': {
+      '(dev) bar': '1.0.0'
+    },
+    'bar 1.0.0': {}
+  }, result: {
+    'myapp from root': '1.0.0',
+    'foo': '1.0.0'
+  });
+}
+unsolvable() {
+  testResolve('no version that matches requirement', {
+    'myapp 0.0.0': {
+      'foo': '>=1.0.0 <2.0.0'
+    },
+    'foo 2.0.0': {},
+    'foo 2.1.3': {}
+  }, error: noVersion(['myapp', 'foo']));
+  testResolve('no version that matches combined constraint', {
+    'myapp 0.0.0': {
+      'foo': '1.0.0',
+      'bar': '1.0.0'
+    },
+    'foo 1.0.0': {
+      'shared': '>=2.0.0 <3.0.0'
+    },
+    'bar 1.0.0': {
+      'shared': '>=2.9.0 <4.0.0'
+    },
+    'shared 2.5.0': {},
+    'shared 3.5.0': {}
+  }, error: noVersion(['shared', 'foo', 'bar']));
+  testResolve('disjoint constraints', {
+    'myapp 0.0.0': {
+      'foo': '1.0.0',
+      'bar': '1.0.0'
+    },
+    'foo 1.0.0': {
+      'shared': '<=2.0.0'
+    },
+    'bar 1.0.0': {
+      'shared': '>3.0.0'
+    },
+    'shared 2.0.0': {},
+    'shared 4.0.0': {}
+  }, error: disjointConstraint(['shared', 'foo', 'bar']));
+  testResolve('mismatched descriptions', {
+    'myapp 0.0.0': {
+      'foo': '1.0.0',
+      'bar': '1.0.0'
+    },
+    'foo 1.0.0': {
+      'shared-x': '1.0.0'
+    },
+    'bar 1.0.0': {
+      'shared-y': '1.0.0'
+    },
+    'shared-x 1.0.0': {},
+    'shared-y 1.0.0': {}
+  }, error: descriptionMismatch('shared', 'foo', 'bar'));
+  testResolve('mismatched sources', {
+    'myapp 0.0.0': {
+      'foo': '1.0.0',
+      'bar': '1.0.0'
+    },
+    'foo 1.0.0': {
+      'shared': '1.0.0'
+    },
+    'bar 1.0.0': {
+      'shared from mock2': '1.0.0'
+    },
+    'shared 1.0.0': {},
+    'shared 1.0.0 from mock2': {}
+  }, error: sourceMismatch('shared', 'foo', 'bar'));
+  testResolve('no valid solution', {
+    'myapp 0.0.0': {
+      'a': 'any',
+      'b': 'any'
+    },
+    'a 1.0.0': {
+      'b': '1.0.0'
+    },
+    'a 2.0.0': {
+      'b': '2.0.0'
+    },
+    'b 1.0.0': {
+      'a': '2.0.0'
+    },
+    'b 2.0.0': {
+      'a': '1.0.0'
+    }
+  }, error: couldNotSolve, maxTries: 4);
+  testResolve('no version that matches while backtracking', {
+    'myapp 0.0.0': {
+      'a': 'any',
+      'b': '>1.0.0'
+    },
+    'a 1.0.0': {},
+    'b 1.0.0': {}
+  }, error: noVersion(['myapp', 'b']), maxTries: 1);
+  testResolve('...', {
+    "myapp 0.0.0": {
+      "angular": "any",
+      "collection": "any"
+    },
+    "analyzer 0.12.2": {},
+    "angular 0.10.0": {
+      "di": ">=0.0.32 <0.1.0",
+      "collection": ">=0.9.1 <1.0.0"
+    },
+    "angular 0.9.11": {
+      "di": ">=0.0.32 <0.1.0",
+      "collection": ">=0.9.1 <1.0.0"
+    },
+    "angular 0.9.10": {
+      "di": ">=0.0.32 <0.1.0",
+      "collection": ">=0.9.1 <1.0.0"
+    },
+    "collection 0.9.0": {},
+    "collection 0.9.1": {},
+    "di 0.0.37": {
+      "analyzer": ">=0.13.0 <0.14.0"
+    },
+    "di 0.0.36": {
+      "analyzer": ">=0.13.0 <0.14.0"
+    }
+  }, error: noVersion(['myapp', 'angular', 'collection']), maxTries: 9);
+}
+badSource() {
+  testResolve('fail if the root package has a bad source in dep', {
+    'myapp 0.0.0': {
+      'foo from bad': 'any'
+    }
+  }, error: unknownSource('myapp', 'foo', 'bad'));
+  testResolve('fail if the root package has a bad source in dev dep', {
+    'myapp 0.0.0': {
+      '(dev) foo from bad': 'any'
+    }
+  }, error: unknownSource('myapp', 'foo', 'bad'));
+  testResolve('fail if all versions have bad source in dep', {
+    'myapp 0.0.0': {
+      'foo': 'any'
+    },
+    'foo 1.0.0': {
+      'bar from bad': 'any'
+    },
+    'foo 1.0.1': {
+      'baz from bad': 'any'
+    },
+    'foo 1.0.3': {
+      'bang from bad': 'any'
+    }
+  }, error: unknownSource('foo', 'bar', 'bad'), maxTries: 3);
+  testResolve('ignore versions with bad source in dep', {
+    'myapp 1.0.0': {
+      'foo': 'any'
+    },
+    'foo 1.0.0': {
+      'bar': 'any'
+    },
+    'foo 1.0.1': {
+      'bar from bad': 'any'
+    },
+    'foo 1.0.3': {
+      'bar from bad': 'any'
+    },
+    'bar 1.0.0': {}
+  }, result: {
+    'myapp from root': '1.0.0',
+    'foo': '1.0.0',
+    'bar': '1.0.0'
+  }, maxTries: 3);
+}
+backtracking() {
+  testResolve('circular dependency on older version', {
+    'myapp 0.0.0': {
+      'a': '>=1.0.0'
+    },
+    'a 1.0.0': {},
+    'a 2.0.0': {
+      'b': '1.0.0'
+    },
+    'b 1.0.0': {
+      'a': '1.0.0'
+    }
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '1.0.0'
+  }, maxTries: 2);
+  testResolve('rolls back leaf versions first', {
+    'myapp 0.0.0': {
+      'a': 'any'
+    },
+    'a 1.0.0': {
+      'b': 'any'
+    },
+    'a 2.0.0': {
+      'b': 'any',
+      'c': '2.0.0'
+    },
+    'b 1.0.0': {},
+    'b 2.0.0': {
+      'c': '1.0.0'
+    },
+    'c 1.0.0': {},
+    'c 2.0.0': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '2.0.0',
+    'b': '1.0.0',
+    'c': '2.0.0'
+  }, maxTries: 2);
+  testResolve('simple transitive', {
+    'myapp 0.0.0': {
+      'foo': 'any'
+    },
+    'foo 1.0.0': {
+      'bar': '1.0.0'
+    },
+    'foo 2.0.0': {
+      'bar': '2.0.0'
+    },
+    'foo 3.0.0': {
+      'bar': '3.0.0'
+    },
+    'bar 1.0.0': {
+      'baz': 'any'
+    },
+    'bar 2.0.0': {
+      'baz': '2.0.0'
+    },
+    'bar 3.0.0': {
+      'baz': '3.0.0'
+    },
+    'baz 1.0.0': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'foo': '1.0.0',
+    'bar': '1.0.0',
+    'baz': '1.0.0'
+  }, maxTries: 3);
+  testResolve('backjump to nearer unsatisfied package', {
+    'myapp 0.0.0': {
+      'a': 'any',
+      'b': 'any'
+    },
+    'a 1.0.0': {
+      'c': '1.0.0'
+    },
+    'a 2.0.0': {
+      'c': '2.0.0-nonexistent'
+    },
+    'b 1.0.0': {},
+    'b 2.0.0': {},
+    'b 3.0.0': {},
+    'c 1.0.0': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '1.0.0',
+    'b': '3.0.0',
+    'c': '1.0.0'
+  }, maxTries: 2);
+  testResolve('backjump to conflicting source', {
+    'myapp 0.0.0': {
+      'a': 'any',
+      'b': 'any',
+      'c': 'any'
+    },
+    'a 1.0.0': {},
+    'a 1.0.0 from mock2': {},
+    'b 1.0.0': {
+      'a': 'any'
+    },
+    'b 2.0.0': {
+      'a from mock2': 'any'
+    },
+    'c 1.0.0': {},
+    'c 2.0.0': {},
+    'c 3.0.0': {},
+    'c 4.0.0': {},
+    'c 5.0.0': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '1.0.0',
+    'b': '1.0.0',
+    'c': '5.0.0'
+  }, maxTries: 2);
+  testResolve('backjump to conflicting description', {
+    'myapp 0.0.0': {
+      'a-x': 'any',
+      'b': 'any',
+      'c': 'any'
+    },
+    'a-x 1.0.0': {},
+    'a-y 1.0.0': {},
+    'b 1.0.0': {
+      'a-x': 'any'
+    },
+    'b 2.0.0': {
+      'a-y': 'any'
+    },
+    'c 1.0.0': {},
+    'c 2.0.0': {},
+    'c 3.0.0': {},
+    'c 4.0.0': {},
+    'c 5.0.0': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '1.0.0',
+    'b': '1.0.0',
+    'c': '5.0.0'
+  }, maxTries: 2);
+  testResolve('backjump to conflicting source', {
+    'myapp 0.0.0': {
+      'a': 'any',
+      'b': 'any',
+      'c': 'any'
+    },
+    'a 1.0.0': {},
+    'a 1.0.0 from mock2': {},
+    'b 1.0.0': {
+      'a from mock2': 'any'
+    },
+    'c 1.0.0': {},
+    'c 2.0.0': {},
+    'c 3.0.0': {},
+    'c 4.0.0': {},
+    'c 5.0.0': {}
+  }, error: sourceMismatch('a', 'myapp', 'b'), maxTries: 1);
+  testResolve('backjump to conflicting description', {
+    'myapp 0.0.0': {
+      'a-x': 'any',
+      'b': 'any',
+      'c': 'any'
+    },
+    'a-x 1.0.0': {},
+    'a-y 1.0.0': {},
+    'b 1.0.0': {
+      'a-y': 'any'
+    },
+    'c 1.0.0': {},
+    'c 2.0.0': {},
+    'c 3.0.0': {},
+    'c 4.0.0': {},
+    'c 5.0.0': {}
+  }, error: descriptionMismatch('a', 'myapp', 'b'), maxTries: 1);
+  testResolve('traverse into package with fewer versions first', {
+    'myapp 0.0.0': {
+      'a': 'any',
+      'b': 'any'
+    },
+    'a 1.0.0': {
+      'c': 'any'
+    },
+    'a 2.0.0': {
+      'c': 'any'
+    },
+    'a 3.0.0': {
+      'c': 'any'
+    },
+    'a 4.0.0': {
+      'c': 'any'
+    },
+    'a 5.0.0': {
+      'c': '1.0.0'
+    },
+    'b 1.0.0': {
+      'c': 'any'
+    },
+    'b 2.0.0': {
+      'c': 'any'
+    },
+    'b 3.0.0': {
+      'c': 'any'
+    },
+    'b 4.0.0': {
+      'c': '2.0.0'
+    },
+    'c 1.0.0': {},
+    'c 2.0.0': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '4.0.0',
+    'b': '4.0.0',
+    'c': '2.0.0'
+  }, maxTries: 2);
+  testResolve('take root package constraints into counting versions', {
+    "myapp 0.0.0": {
+      "foo": ">2.0.0",
+      "bar": "any"
+    },
+    "foo 1.0.0": {
+      "none": "2.0.0"
+    },
+    "foo 2.0.0": {
+      "none": "2.0.0"
+    },
+    "foo 3.0.0": {
+      "none": "2.0.0"
+    },
+    "foo 4.0.0": {
+      "none": "2.0.0"
+    },
+    "bar 1.0.0": {},
+    "bar 2.0.0": {},
+    "bar 3.0.0": {},
+    "none 1.0.0": {}
+  }, error: noVersion(["foo", "none"]), maxTries: 2);
+  var map = {
+    'myapp 0.0.0': {
+      'foo': 'any',
+      'bar': 'any'
+    },
+    'baz 0.0.0': {}
+  };
+  for (var i = 0; i < 10; i++) {
+    for (var j = 0; j < 10; j++) {
+      map['foo $i.$j.0'] = {
+        'baz': '$i.0.0'
+      };
+      map['bar $i.$j.0'] = {
+        'baz': '0.$j.0'
+      };
+    }
+  }
+  testResolve('complex backtrack', map, result: {
+    'myapp from root': '0.0.0',
+    'foo': '0.9.0',
+    'bar': '9.0.0',
+    'baz': '0.0.0'
+  }, maxTries: 100);
+  testResolve('backjump past failed package on disjoint constraint', {
+    'myapp 0.0.0': {
+      'a': 'any',
+      'foo': '>2.0.0'
+    },
+    'a 1.0.0': {
+      'foo': 'any'
+    },
+    'a 2.0.0': {
+      'foo': '<1.0.0'
+    },
+    'foo 2.0.0': {},
+    'foo 2.0.1': {},
+    'foo 2.0.2': {},
+    'foo 2.0.3': {},
+    'foo 2.0.4': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '1.0.0',
+    'foo': '2.0.4'
+  }, maxTries: 2);
+  testResolve("finds solution with less strict constraint", {
+    "myapp 1.0.0": {
+      "a": "any",
+      "c": "any",
+      "d": "any"
+    },
+    "a 2.0.0": {},
+    "a 1.0.0": {},
+    "b 1.0.0": {
+      "a": "1.0.0"
+    },
+    "c 1.0.0": {
+      "b": "any"
+    },
+    "d 2.0.0": {
+      "myapp": "any"
+    },
+    "d 1.0.0": {
+      "myapp": "<1.0.0"
+    }
+  }, result: {
+    'myapp from root': '1.0.0',
+    'a': '1.0.0',
+    'b': '1.0.0',
+    'c': '1.0.0',
+    'd': '2.0.0'
+  }, maxTries: 3);
+}
+sdkConstraint() {
+  var badVersion = '0.0.0-nope';
+  var goodVersion = sdk.version.toString();
+  testResolve('root matches SDK', {
+    'myapp 0.0.0': {
+      'sdk': goodVersion
+    }
+  }, result: {
+    'myapp from root': '0.0.0'
+  });
+  testResolve('root does not match SDK', {
+    'myapp 0.0.0': {
+      'sdk': badVersion
+    }
+  }, error: couldNotSolve);
+  testResolve('dependency does not match SDK', {
+    'myapp 0.0.0': {
+      'foo': 'any'
+    },
+    'foo 0.0.0': {
+      'sdk': badVersion
+    }
+  }, error: couldNotSolve);
+  testResolve('transitive dependency does not match SDK', {
+    'myapp 0.0.0': {
+      'foo': 'any'
+    },
+    'foo 0.0.0': {
+      'bar': 'any'
+    },
+    'bar 0.0.0': {
+      'sdk': badVersion
+    }
+  }, error: couldNotSolve);
+  testResolve('selects a dependency version that allows the SDK', {
+    'myapp 0.0.0': {
+      'foo': 'any'
+    },
+    'foo 1.0.0': {
+      'sdk': goodVersion
+    },
+    'foo 2.0.0': {
+      'sdk': goodVersion
+    },
+    'foo 3.0.0': {
+      'sdk': badVersion
+    },
+    'foo 4.0.0': {
+      'sdk': badVersion
+    }
+  }, result: {
+    'myapp from root': '0.0.0',
+    'foo': '2.0.0'
+  }, maxTries: 3);
+  testResolve('selects a transitive dependency version that allows the SDK', {
+    'myapp 0.0.0': {
+      'foo': 'any'
+    },
+    'foo 1.0.0': {
+      'bar': 'any'
+    },
+    'bar 1.0.0': {
+      'sdk': goodVersion
+    },
+    'bar 2.0.0': {
+      'sdk': goodVersion
+    },
+    'bar 3.0.0': {
+      'sdk': badVersion
+    },
+    'bar 4.0.0': {
+      'sdk': badVersion
+    }
+  }, result: {
+    'myapp from root': '0.0.0',
+    'foo': '1.0.0',
+    'bar': '2.0.0'
+  }, maxTries: 3);
+  testResolve(
+      'selects a dependency version that allows a transitive '
+          'dependency that allows the SDK',
+      {
+    'myapp 0.0.0': {
+      'foo': 'any'
+    },
+    'foo 1.0.0': {
+      'bar': '1.0.0'
+    },
+    'foo 2.0.0': {
+      'bar': '2.0.0'
+    },
+    'foo 3.0.0': {
+      'bar': '3.0.0'
+    },
+    'foo 4.0.0': {
+      'bar': '4.0.0'
+    },
+    'bar 1.0.0': {
+      'sdk': goodVersion
+    },
+    'bar 2.0.0': {
+      'sdk': goodVersion
+    },
+    'bar 3.0.0': {
+      'sdk': badVersion
+    },
+    'bar 4.0.0': {
+      'sdk': badVersion
+    }
+  }, result: {
+    'myapp from root': '0.0.0',
+    'foo': '2.0.0',
+    'bar': '2.0.0'
+  }, maxTries: 3);
+}
+void prerelease() {
+  testResolve('prefer stable versions over unstable', {
+    'myapp 0.0.0': {
+      'a': 'any'
+    },
+    'a 1.0.0': {},
+    'a 1.1.0-dev': {},
+    'a 2.0.0-dev': {},
+    'a 3.0.0-dev': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '1.0.0'
+  });
+  testResolve('use latest allowed prerelease if no stable versions match', {
+    'myapp 0.0.0': {
+      'a': '<2.0.0'
+    },
+    'a 1.0.0-dev': {},
+    'a 1.1.0-dev': {},
+    'a 1.9.0-dev': {},
+    'a 3.0.0': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '1.9.0-dev'
+  });
+  testResolve('use an earlier stable version on a < constraint', {
+    'myapp 0.0.0': {
+      'a': '<2.0.0'
+    },
+    'a 1.0.0': {},
+    'a 1.1.0': {},
+    'a 2.0.0-dev': {},
+    'a 2.0.0': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '1.1.0'
+  });
+  testResolve('prefer a stable version even if constraint mentions unstable', {
+    'myapp 0.0.0': {
+      'a': '<=2.0.0-dev'
+    },
+    'a 1.0.0': {},
+    'a 1.1.0': {},
+    'a 2.0.0-dev': {},
+    'a 2.0.0': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '1.1.0'
+  });
+}
+void override() {
+  testResolve('chooses best version matching override constraint', {
+    'myapp 0.0.0': {
+      'a': 'any'
+    },
+    'a 1.0.0': {},
+    'a 2.0.0': {},
+    'a 3.0.0': {}
+  }, overrides: {
+    'a': '<3.0.0'
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '2.0.0'
+  });
+  testResolve('uses override as dependency', {
+    'myapp 0.0.0': {},
+    'a 1.0.0': {},
+    'a 2.0.0': {},
+    'a 3.0.0': {}
+  }, overrides: {
+    'a': '<3.0.0'
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '2.0.0'
+  });
+  testResolve('ignores other constraints on overridden package', {
+    'myapp 0.0.0': {
+      'b': 'any',
+      'c': 'any'
+    },
+    'a 1.0.0': {},
+    'a 2.0.0': {},
+    'a 3.0.0': {},
+    'b 1.0.0': {
+      'a': '1.0.0'
+    },
+    'c 1.0.0': {
+      'a': '3.0.0'
+    }
+  }, overrides: {
+    'a': '2.0.0'
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '2.0.0',
+    'b': '1.0.0',
+    'c': '1.0.0'
+  });
+  testResolve('backtracks on overidden package for its constraints', {
+    'myapp 0.0.0': {
+      'shared': '2.0.0'
+    },
+    'a 1.0.0': {
+      'shared': 'any'
+    },
+    'a 2.0.0': {
+      'shared': '1.0.0'
+    },
+    'shared 1.0.0': {},
+    'shared 2.0.0': {}
+  }, overrides: {
+    'a': '<3.0.0'
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '1.0.0',
+    'shared': '2.0.0'
+  }, maxTries: 2);
+  testResolve('override compatible with locked dependency', {
+    'myapp 0.0.0': {
+      'foo': 'any'
+    },
+    'foo 1.0.0': {
+      'bar': '1.0.0'
+    },
+    'foo 1.0.1': {
+      'bar': '1.0.1'
+    },
+    'foo 1.0.2': {
+      'bar': '1.0.2'
+    },
+    'bar 1.0.0': {},
+    'bar 1.0.1': {},
+    'bar 1.0.2': {}
+  }, lockfile: {
+    'foo': '1.0.1'
+  }, overrides: {
+    'foo': '<1.0.2'
+  }, result: {
+    'myapp from root': '0.0.0',
+    'foo': '1.0.1',
+    'bar': '1.0.1'
+  });
+  testResolve('override incompatible with locked dependency', {
+    'myapp 0.0.0': {
+      'foo': 'any'
+    },
+    'foo 1.0.0': {
+      'bar': '1.0.0'
+    },
+    'foo 1.0.1': {
+      'bar': '1.0.1'
+    },
+    'foo 1.0.2': {
+      'bar': '1.0.2'
+    },
+    'bar 1.0.0': {},
+    'bar 1.0.1': {},
+    'bar 1.0.2': {}
+  }, lockfile: {
+    'foo': '1.0.1'
+  }, overrides: {
+    'foo': '>1.0.1'
+  }, result: {
+    'myapp from root': '0.0.0',
+    'foo': '1.0.2',
+    'bar': '1.0.2'
+  });
+  testResolve('no version that matches override', {
+    'myapp 0.0.0': {},
+    'foo 2.0.0': {},
+    'foo 2.1.3': {}
+  }, overrides: {
+    'foo': '>=1.0.0 <2.0.0'
+  }, error: noVersion(['myapp']));
+  testResolve('override a bad source without error', {
+    'myapp 0.0.0': {
+      'foo from bad': 'any'
+    },
+    'foo 0.0.0': {}
+  }, overrides: {
+    'foo': 'any'
+  }, result: {
+    'myapp from root': '0.0.0',
+    'foo': '0.0.0'
+  });
+}
+void downgrade() {
+  testResolve("downgrades a dependency to the lowest matching version", {
+    'myapp 0.0.0': {
+      'foo': '>=2.0.0 <3.0.0'
+    },
+    'foo 1.0.0': {},
+    'foo 2.0.0-dev': {},
+    'foo 2.0.0': {},
+    'foo 2.1.0': {}
+  }, lockfile: {
+    'foo': '2.1.0'
+  }, result: {
+    'myapp from root': '0.0.0',
+    'foo': '2.0.0'
+  }, downgrade: true);
+  testResolve(
+      'use earliest allowed prerelease if no stable versions match '
+          'while downgrading',
+      {
+    'myapp 0.0.0': {
+      'a': '>=2.0.0-dev.1 <3.0.0'
+    },
+    'a 1.0.0': {},
+    'a 2.0.0-dev.1': {},
+    'a 2.0.0-dev.2': {},
+    'a 2.0.0-dev.3': {}
+  }, result: {
+    'myapp from root': '0.0.0',
+    'a': '2.0.0-dev.1'
+  }, downgrade: true);
+}
+testResolve(String description, Map packages, {Map lockfile, Map overrides,
+    Map result, FailMatcherBuilder error, int maxTries, bool downgrade: false}) {
+  _testResolve(
+      test,
+      description,
+      packages,
+      lockfile: lockfile,
+      overrides: overrides,
+      result: result,
+      error: error,
+      maxTries: maxTries,
+      downgrade: downgrade);
+}
+solo_testResolve(String description, Map packages, {Map lockfile, Map overrides,
+    Map result, FailMatcherBuilder error, int maxTries, bool downgrade: false}) {
+  log.verbosity = log.Verbosity.SOLVER;
+  _testResolve(
+      solo_test,
+      description,
+      packages,
+      lockfile: lockfile,
+      overrides: overrides,
+      result: result,
+      error: error,
+      maxTries: maxTries,
+      downgrade: downgrade);
+}
+_testResolve(void testFn(String description, Function body), String description,
+    Map packages, {Map lockfile, Map overrides, Map result,
+    FailMatcherBuilder error, int maxTries, bool downgrade: false}) {
+  if (maxTries == null) maxTries = 1;
+  testFn(description, () {
+    var cache = new SystemCache('.');
+    source1 = new MockSource('mock1');
+    source2 = new MockSource('mock2');
+    cache.register(source1);
+    cache.register(source2);
+    cache.sources.setDefault(source1.name);
+    var root;
+    packages.forEach((description, dependencies) {
+      var id = parseSpec(description);
+      var package =
+          mockPackage(id, dependencies, id.name == 'myapp' ? overrides : null);
+      if (id.name == 'myapp') {
+        root = package;
+      } else {
+        (cache.sources[id.source] as MockSource).addPackage(
+            id.description,
+            package);
+      }
+    });
+    if (result != null) {
+      var newResult = {};
+      result.forEach((description, version) {
+        var id = parseSpec(description, version);
+        newResult[id.name] = id;
+      });
+      result = newResult;
+    }
+    var realLockFile = new LockFile.empty();
+    if (lockfile != null) {
+      lockfile.forEach((name, version) {
+        version = new Version.parse(version);
+        realLockFile.packages[name] =
+            new PackageId(name, source1.name, version, name);
+      });
+    }
+    var future = resolveVersions(
+        downgrade ? SolveType.DOWNGRADE : SolveType.GET,
+        cache.sources,
+        root,
+        lockFile: realLockFile);
+    var matcher;
+    if (result != null) {
+      matcher = new SolveSuccessMatcher(result, maxTries);
+    } else if (error != null) {
+      matcher = error(maxTries);
+    }
+    expect(future, completion(matcher));
+  });
+}
+typedef SolveFailMatcher FailMatcherBuilder(int maxTries);
+FailMatcherBuilder noVersion(List<String> packages) {
+  return (maxTries) =>
+      new SolveFailMatcher(packages, maxTries, NoVersionException);
+}
+FailMatcherBuilder disjointConstraint(List<String> packages) {
+  return (maxTries) =>
+      new SolveFailMatcher(packages, maxTries, DisjointConstraintException);
+}
+FailMatcherBuilder descriptionMismatch(String package, String depender1,
+    String depender2) {
+  return (maxTries) =>
+      new SolveFailMatcher(
+          [package, depender1, depender2],
+          maxTries,
+          DescriptionMismatchException);
+}
+SolveFailMatcher couldNotSolve(maxTries) =>
+    new SolveFailMatcher([], maxTries, null);
+FailMatcherBuilder sourceMismatch(String package, String depender1,
+    String depender2) {
+  return (maxTries) =>
+      new SolveFailMatcher(
+          [package, depender1, depender2],
+          maxTries,
+          SourceMismatchException);
+}
+unknownSource(String depender, String dependency, String source) {
+  return (maxTries) =>
+      new SolveFailMatcher(
+          [depender, dependency, source],
+          maxTries,
+          UnknownSourceException);
+}
+class SolveSuccessMatcher implements Matcher {
+  final Map<String, PackageId> _expected;
+  final int _maxTries;
+  SolveSuccessMatcher(this._expected, this._maxTries);
+  Description describe(Description description) {
+    return description.add(
+        'Solver to use at most $_maxTries attempts to find:\n'
+            '${_listPackages(_expected.values)}');
+  }
+  Description describeMismatch(SolveResult result, Description description,
+      Map state, bool verbose) {
+    if (!result.succeeded) {
+      description.add('Solver failed with:\n${result.error}');
+      return null;
+    }
+    description.add('Resolved:\n${_listPackages(result.packages)}\n');
+    description.add(state['failures']);
+    return description;
+  }
+  bool matches(SolveResult result, Map state) {
+    if (!result.succeeded) return false;
+    var expected = new Map.from(_expected);
+    var failures = new StringBuffer();
+    for (var id in result.packages) {
+      if (!expected.containsKey(id.name)) {
+        failures.writeln('Should not have selected $id');
+      } else {
+        var expectedId = expected.remove(id.name);
+        if (id != expectedId) {
+          failures.writeln('Expected $expectedId, not $id');
+        }
+      }
+    }
+    if (!expected.isEmpty) {
+      failures.writeln('Missing:\n${_listPackages(expected.values)}');
+    }
+    if (result.attemptedSolutions != 1 &&
+        result.attemptedSolutions != _maxTries) {
+      failures.writeln('Took ${result.attemptedSolutions} attempts');
+    }
+    if (!failures.isEmpty) {
+      state['failures'] = failures.toString();
+      return false;
+    }
+    return true;
+  }
+  String _listPackages(Iterable<PackageId> packages) {
+    return '- ${packages.join('\n- ')}';
+  }
+}
+class SolveFailMatcher implements Matcher {
+  final Iterable<String> _expected;
+  final int _maxTries;
+  final Type _expectedType;
+  SolveFailMatcher(this._expected, this._maxTries, this._expectedType);
+  Description describe(Description description) {
+    description.add('Solver should fail after at most $_maxTries attempts.');
+    if (!_expected.isEmpty) {
+      var textList = _expected.map((s) => '"$s"').join(", ");
+      description.add(' The error should contain $textList.');
+    }
+    return description;
+  }
+  Description describeMismatch(SolveResult result, Description description,
+      Map state, bool verbose) {
+    description.add(state['failures']);
+    return description;
+  }
+  bool matches(SolveResult result, Map state) {
+    var failures = new StringBuffer();
+    if (result.succeeded) {
+      failures.writeln('Solver succeeded');
+    } else {
+      if (_expectedType != null && result.error.runtimeType != _expectedType) {
+        failures.writeln(
+            'Should have error type $_expectedType, got ' '${result.error.runtimeType}');
+      }
+      var message = result.error.toString();
+      for (var expected in _expected) {
+        if (!message.contains(expected)) {
+          failures.writeln(
+              'Expected error to contain "$expected", got:\n$message');
+        }
+      }
+      if (result.attemptedSolutions != 1 &&
+          result.attemptedSolutions != _maxTries) {
+        failures.writeln('Took ${result.attemptedSolutions} attempts');
+      }
+    }
+    if (!failures.isEmpty) {
+      state['failures'] = failures.toString();
+      return false;
+    }
+    return true;
+  }
+}
+class MockSource extends CachedSource {
+  final _packages = <String, Map<Version, Package>>{};
+  final _requestedVersions = new Set<String>();
+  final _requestedPubspecs = new Map<String, Set<Version>>();
+  final String name;
+  final hasMultipleVersions = true;
+  MockSource(this.name);
+  dynamic parseDescription(String containingPath, description,
+      {bool fromLockFile: false}) =>
+      description;
+  bool descriptionsEqual(description1, description2) =>
+      description1 == description2;
+  Future<String> getDirectory(PackageId id) {
+    return new Future.value('${id.name}-${id.version}');
+  }
+  Future<List<Version>> getVersions(String name, String description) {
+    return syncFuture(() {
+      if (_requestedVersions.contains(description)) {
+        throw new Exception(
+            'Version list for $description was already ' 'requested.');
+      }
+      _requestedVersions.add(description);
+      if (!_packages.containsKey(description)) {
+        throw new Exception(
+            'MockSource does not have a package matching ' '"$description".');
+      }
+      return _packages[description].keys.toList();
+    });
+  }
+  Future<Pubspec> describeUncached(PackageId id) {
+    return syncFuture(() {
+      if (_requestedPubspecs.containsKey(id.description) &&
+          _requestedPubspecs[id.description].contains(id.version)) {
+        throw new Exception('Pubspec for $id was already requested.');
+      }
+      _requestedPubspecs.putIfAbsent(id.description, () => new Set<Version>());
+      _requestedPubspecs[id.description].add(id.version);
+      return _packages[id.description][id.version].pubspec;
+    });
+  }
+  Future<Package> downloadToSystemCache(PackageId id) =>
+      throw new UnsupportedError('Cannot download mock packages');
+  List<Package> getCachedPackages() =>
+      throw new UnsupportedError('Cannot get mock packages');
+  Future<Pair<int, int>> repairCachedPackages() =>
+      throw new UnsupportedError('Cannot repair mock packages');
+  void addPackage(String description, Package package) {
+    _packages.putIfAbsent(description, () => new Map<Version, Package>());
+    _packages[description][package.version] = package;
+  }
+}
+Package mockPackage(PackageId id, Map dependencyStrings, Map overrides) {
+  var sdkConstraint = null;
+  var dependencies = <PackageDep>[];
+  var devDependencies = <PackageDep>[];
+  dependencyStrings.forEach((spec, constraint) {
+    var isDev = spec.startsWith("(dev) ");
+    if (isDev) {
+      spec = spec.substring("(dev) ".length);
+    }
+    var dep =
+        parseSpec(spec).withConstraint(new VersionConstraint.parse(constraint));
+    if (dep.name == 'sdk') {
+      sdkConstraint = dep.constraint;
+      return;
+    }
+    if (isDev) {
+      devDependencies.add(dep);
+    } else {
+      dependencies.add(dep);
+    }
+  });
+  var dependencyOverrides = <PackageDep>[];
+  if (overrides != null) {
+    overrides.forEach((spec, constraint) {
+      dependencyOverrides.add(
+          parseSpec(spec).withConstraint(new VersionConstraint.parse(constraint)));
+    });
+  }
+  return new Package.inMemory(
+      new Pubspec(
+          id.name,
+          version: id.version,
+          dependencies: dependencies,
+          devDependencies: devDependencies,
+          dependencyOverrides: dependencyOverrides,
+          sdkConstraint: sdkConstraint));
+}
+PackageId parseSpec(String text, [String version]) {
+  var pattern = new RegExp(r"(([a-z_]*)(-[a-z_]+)?)( ([^ ]+))?( from (.*))?$");
+  var match = pattern.firstMatch(text);
+  if (match == null) {
+    throw new FormatException("Could not parse spec '$text'.");
+  }
+  var description = match[1];
+  var name = match[2];
+  var parsedVersion;
+  if (version != null) {
+    if (match[5] != null) {
+      throw new ArgumentError(
+          "Spec '$text' should not contain a version "
+              "since '$version' was passed in explicitly.");
+    }
+    parsedVersion = new Version.parse(version);
+  } else {
+    if (match[5] != null) {
+      parsedVersion = new Version.parse(match[5]);
+    } else {
+      parsedVersion = Version.none;
+    }
+  }
+  var source = "mock1";
+  if (match[7] != null) {
+    source = match[7];
+    if (source == "root") source = null;
+  }
+  return new PackageId(name, source, parsedVersion, description);
+}
diff --git a/sdk/lib/_internal/pub_generated/test/version_test.dart b/sdk/lib/_internal/pub_generated/test/version_test.dart
new file mode 100644
index 0000000..4f8ebc0
--- /dev/null
+++ b/sdk/lib/_internal/pub_generated/test/version_test.dart
@@ -0,0 +1,489 @@
+library version_test;
+import 'package:unittest/unittest.dart';
+import 'test_pub.dart';
+import '../lib/src/version.dart';
+main() {
+  initConfig();
+  final v114 = new Version.parse('1.1.4');
+  final v123 = new Version.parse('1.2.3');
+  final v124 = new Version.parse('1.2.4');
+  final v130 = new Version.parse('1.3.0');
+  final v140 = new Version.parse('1.4.0');
+  final v200 = new Version.parse('2.0.0');
+  final v201 = new Version.parse('2.0.1');
+  final v234 = new Version.parse('2.3.4');
+  final v250 = new Version.parse('2.5.0');
+  final v300 = new Version.parse('3.0.0');
+  group('Version', () {
+    test('none', () {
+      expect(Version.none.toString(), equals('0.0.0'));
+    });
+    group('constructor', () {
+      test('throws on negative numbers', () {
+        throwsIllegalArg(() => new Version(-1, 1, 1));
+        throwsIllegalArg(() => new Version(1, -1, 1));
+        throwsIllegalArg(() => new Version(1, 1, -1));
+      });
+    });
+    group('comparison', () {
+      var versions = [
+          '1.0.0-alpha',
+          '1.0.0-alpha.1',
+          '1.0.0-beta.2',
+          '1.0.0-beta.11',
+          '1.0.0-rc.1',
+          '1.0.0-rc.1+build.1',
+          '1.0.0',
+          '1.0.0+0.3.7',
+          '1.3.7+build',
+          '1.3.7+build.2.b8f12d7',
+          '1.3.7+build.11.e0f985a',
+          '2.0.0',
+          '2.1.0',
+          '2.2.0',
+          '2.11.0',
+          '2.11.1'];
+      test('compareTo()', () {
+        for (var i = 0; i < versions.length; i++) {
+          for (var j = 0; j < versions.length; j++) {
+            var a = new Version.parse(versions[i]);
+            var b = new Version.parse(versions[j]);
+            var expectation = i.compareTo(j);
+            expect(a.compareTo(b), equals(expectation));
+          }
+        }
+      });
+      test('operators', () {
+        for (var i = 0; i < versions.length; i++) {
+          for (var j = 0; j < versions.length; j++) {
+            var a = new Version.parse(versions[i]);
+            var b = new Version.parse(versions[j]);
+            expect(a < b, equals(i < j));
+            expect(a > b, equals(i > j));
+            expect(a <= b, equals(i <= j));
+            expect(a >= b, equals(i >= j));
+            expect(a == b, equals(i == j));
+            expect(a != b, equals(i != j));
+          }
+        }
+      });
+      test('equality', () {
+        expect(new Version.parse('01.2.3'), equals(new Version.parse('1.2.3')));
+        expect(new Version.parse('1.02.3'), equals(new Version.parse('1.2.3')));
+        expect(new Version.parse('1.2.03'), equals(new Version.parse('1.2.3')));
+        expect(
+            new Version.parse('1.2.3-01'),
+            equals(new Version.parse('1.2.3-1')));
+        expect(
+            new Version.parse('1.2.3+01'),
+            equals(new Version.parse('1.2.3+1')));
+      });
+    });
+    test('allows()', () {
+      expect(v123.allows(v123), isTrue);
+      expect(v123.allows(v114), isFalse);
+      expect(v123.allows(v124), isFalse);
+    });
+    test('intersect()', () {
+      expect(v123.intersect(v123), equals(v123));
+      expect(v123.intersect(v114).isEmpty, isTrue);
+      expect(
+          v123.intersect(new VersionRange(min: v114, max: v124)),
+          equals(v123));
+      expect(
+          v114.intersect(new VersionRange(min: v123, max: v124)).isEmpty,
+          isTrue);
+    });
+    test('isEmpty', () {
+      expect(v123.isEmpty, isFalse);
+    });
+    test('nextMajor', () {
+      expect(v123.nextMajor, equals(v200));
+      expect(v114.nextMajor, equals(v200));
+      expect(v200.nextMajor, equals(v300));
+      expect(new Version.parse('1.2.3-dev').nextMajor, equals(v200));
+      expect(new Version.parse('2.0.0-dev').nextMajor, equals(v200));
+      expect(new Version.parse('1.2.3+patch').nextMajor, equals(v200));
+    });
+    test('nextMinor', () {
+      expect(v123.nextMinor, equals(v130));
+      expect(v130.nextMinor, equals(v140));
+      expect(new Version.parse('1.2.3-dev').nextMinor, equals(v130));
+      expect(new Version.parse('1.3.0-dev').nextMinor, equals(v130));
+      expect(new Version.parse('1.2.3+patch').nextMinor, equals(v130));
+    });
+    test('nextPatch', () {
+      expect(v123.nextPatch, equals(v124));
+      expect(v200.nextPatch, equals(v201));
+      expect(new Version.parse('1.2.4-dev').nextPatch, equals(v124));
+      expect(new Version.parse('1.2.3+patch').nextPatch, equals(v124));
+    });
+    test('parse()', () {
+      expect(new Version.parse('0.0.0'), equals(new Version(0, 0, 0)));
+      expect(new Version.parse('12.34.56'), equals(new Version(12, 34, 56)));
+      expect(
+          new Version.parse('1.2.3-alpha.1'),
+          equals(new Version(1, 2, 3, pre: 'alpha.1')));
+      expect(
+          new Version.parse('1.2.3-x.7.z-92'),
+          equals(new Version(1, 2, 3, pre: 'x.7.z-92')));
+      expect(
+          new Version.parse('1.2.3+build.1'),
+          equals(new Version(1, 2, 3, build: 'build.1')));
+      expect(
+          new Version.parse('1.2.3+x.7.z-92'),
+          equals(new Version(1, 2, 3, build: 'x.7.z-92')));
+      expect(
+          new Version.parse('1.0.0-rc-1+build-1'),
+          equals(new Version(1, 0, 0, pre: 'rc-1', build: 'build-1')));
+      expect(() => new Version.parse('1.0'), throwsFormatException);
+      expect(() => new Version.parse('1.2.3.4'), throwsFormatException);
+      expect(() => new Version.parse('1234'), throwsFormatException);
+      expect(() => new Version.parse('-2.3.4'), throwsFormatException);
+      expect(() => new Version.parse('1.3-pre'), throwsFormatException);
+      expect(() => new Version.parse('1.3+build'), throwsFormatException);
+      expect(() => new Version.parse('1.3+bu?!3ild'), throwsFormatException);
+    });
+    test('toString()', () {
+      expect(new Version(0, 0, 0).toString(), equals('0.0.0'));
+      expect(new Version(12, 34, 56).toString(), equals('12.34.56'));
+      expect(
+          new Version(1, 2, 3, pre: 'alpha.1').toString(),
+          equals('1.2.3-alpha.1'));
+      expect(
+          new Version(1, 2, 3, pre: 'x.7.z-92').toString(),
+          equals('1.2.3-x.7.z-92'));
+      expect(
+          new Version(1, 2, 3, build: 'build.1').toString(),
+          equals('1.2.3+build.1'));
+      expect(
+          new Version(1, 2, 3, pre: 'pre', build: 'bui').toString(),
+          equals('1.2.3-pre+bui'));
+    });
+  });
+  group('VersionRange', () {
+    group('constructor', () {
+      test('takes a min and max', () {
+        var range = new VersionRange(min: v123, max: v124);
+        expect(range.isAny, isFalse);
+        expect(range.min, equals(v123));
+        expect(range.max, equals(v124));
+      });
+      test('allows omitting max', () {
+        var range = new VersionRange(min: v123);
+        expect(range.isAny, isFalse);
+        expect(range.min, equals(v123));
+        expect(range.max, isNull);
+      });
+      test('allows omitting min and max', () {
+        var range = new VersionRange();
+        expect(range.isAny, isTrue);
+        expect(range.min, isNull);
+        expect(range.max, isNull);
+      });
+      test('takes includeMin', () {
+        var range = new VersionRange(min: v123, includeMin: true);
+        expect(range.includeMin, isTrue);
+      });
+      test('includeMin defaults to false if omitted', () {
+        var range = new VersionRange(min: v123);
+        expect(range.includeMin, isFalse);
+      });
+      test('takes includeMax', () {
+        var range = new VersionRange(max: v123, includeMax: true);
+        expect(range.includeMax, isTrue);
+      });
+      test('includeMax defaults to false if omitted', () {
+        var range = new VersionRange(max: v123);
+        expect(range.includeMax, isFalse);
+      });
+      test('throws if min > max', () {
+        throwsIllegalArg(() => new VersionRange(min: v124, max: v123));
+      });
+    });
+    group('allows()', () {
+      test('version must be greater than min', () {
+        var range = new VersionRange(min: v123);
+        expect(range.allows(new Version.parse('1.2.2')), isFalse);
+        expect(range.allows(new Version.parse('1.2.3')), isFalse);
+        expect(range.allows(new Version.parse('1.3.3')), isTrue);
+        expect(range.allows(new Version.parse('2.3.3')), isTrue);
+      });
+      test('version must be min or greater if includeMin', () {
+        var range = new VersionRange(min: v123, includeMin: true);
+        expect(range.allows(new Version.parse('1.2.2')), isFalse);
+        expect(range.allows(new Version.parse('1.2.3')), isTrue);
+        expect(range.allows(new Version.parse('1.3.3')), isTrue);
+        expect(range.allows(new Version.parse('2.3.3')), isTrue);
+      });
+      test('pre-release versions of inclusive min are excluded', () {
+        var range = new VersionRange(min: v123, includeMin: true);
+        expect(range.allows(new Version.parse('1.2.3-dev')), isFalse);
+        expect(range.allows(new Version.parse('1.2.4-dev')), isTrue);
+      });
+      test('version must be less than max', () {
+        var range = new VersionRange(max: v234);
+        expect(range.allows(new Version.parse('2.3.3')), isTrue);
+        expect(range.allows(new Version.parse('2.3.4')), isFalse);
+        expect(range.allows(new Version.parse('2.4.3')), isFalse);
+      });
+      test('pre-release versions of non-pre-release max are excluded', () {
+        var range = new VersionRange(max: v234);
+        expect(range.allows(new Version.parse('2.3.3')), isTrue);
+        expect(range.allows(new Version.parse('2.3.4-dev')), isFalse);
+        expect(range.allows(new Version.parse('2.3.4')), isFalse);
+      });
+      test('pre-release versions of pre-release max are included', () {
+        var range = new VersionRange(max: new Version.parse('2.3.4-dev.2'));
+        expect(range.allows(new Version.parse('2.3.4-dev.1')), isTrue);
+        expect(range.allows(new Version.parse('2.3.4-dev.2')), isFalse);
+        expect(range.allows(new Version.parse('2.3.4-dev.3')), isFalse);
+      });
+      test('version must be max or less if includeMax', () {
+        var range = new VersionRange(min: v123, max: v234, includeMax: true);
+        expect(range.allows(new Version.parse('2.3.3')), isTrue);
+        expect(range.allows(new Version.parse('2.3.4')), isTrue);
+        expect(range.allows(new Version.parse('2.4.3')), isFalse);
+        expect(range.allows(new Version.parse('2.3.4-dev')), isTrue);
+      });
+      test('has no min if one was not set', () {
+        var range = new VersionRange(max: v123);
+        expect(range.allows(new Version.parse('0.0.0')), isTrue);
+        expect(range.allows(new Version.parse('1.2.3')), isFalse);
+      });
+      test('has no max if one was not set', () {
+        var range = new VersionRange(min: v123);
+        expect(range.allows(new Version.parse('1.2.3')), isFalse);
+        expect(range.allows(new Version.parse('1.3.3')), isTrue);
+        expect(range.allows(new Version.parse('999.3.3')), isTrue);
+      });
+      test('allows any version if there is no min or max', () {
+        var range = new VersionRange();
+        expect(range.allows(new Version.parse('0.0.0')), isTrue);
+        expect(range.allows(new Version.parse('999.99.9')), isTrue);
+      });
+    });
+    group('intersect()', () {
+      test('two overlapping ranges', () {
+        var a = new VersionRange(min: v123, max: v250);
+        var b = new VersionRange(min: v200, max: v300);
+        var intersect = a.intersect(b);
+        expect(intersect.min, equals(v200));
+        expect(intersect.max, equals(v250));
+        expect(intersect.includeMin, isFalse);
+        expect(intersect.includeMax, isFalse);
+      });
+      test('a non-overlapping range allows no versions', () {
+        var a = new VersionRange(min: v114, max: v124);
+        var b = new VersionRange(min: v200, max: v250);
+        expect(a.intersect(b).isEmpty, isTrue);
+      });
+      test('adjacent ranges allow no versions if exclusive', () {
+        var a = new VersionRange(min: v114, max: v124, includeMax: false);
+        var b = new VersionRange(min: v124, max: v200, includeMin: true);
+        expect(a.intersect(b).isEmpty, isTrue);
+      });
+      test('adjacent ranges allow version if inclusive', () {
+        var a = new VersionRange(min: v114, max: v124, includeMax: true);
+        var b = new VersionRange(min: v124, max: v200, includeMin: true);
+        expect(a.intersect(b), equals(v124));
+      });
+      test('with an open range', () {
+        var open = new VersionRange();
+        var a = new VersionRange(min: v114, max: v124);
+        expect(open.intersect(open), equals(open));
+        expect(a.intersect(open), equals(a));
+      });
+      test('returns the version if the range allows it', () {
+        expect(
+            new VersionRange(min: v114, max: v124).intersect(v123),
+            equals(v123));
+        expect(
+            new VersionRange(min: v123, max: v124).intersect(v114).isEmpty,
+            isTrue);
+      });
+    });
+    test('isEmpty', () {
+      expect(new VersionRange().isEmpty, isFalse);
+      expect(new VersionRange(min: v123, max: v124).isEmpty, isFalse);
+    });
+  });
+  group('VersionConstraint', () {
+    test('any', () {
+      expect(VersionConstraint.any.isAny, isTrue);
+      expect(
+          VersionConstraint.any,
+          allows(
+              [
+                  new Version.parse('0.0.0-blah'),
+                  new Version.parse('1.2.3'),
+                  new Version.parse('12345.678.90')]));
+    });
+    test('empty', () {
+      expect(VersionConstraint.empty.isEmpty, isTrue);
+      expect(VersionConstraint.empty.isAny, isFalse);
+      expect(
+          VersionConstraint.empty,
+          doesNotAllow(
+              [
+                  new Version.parse('0.0.0-blah'),
+                  new Version.parse('1.2.3'),
+                  new Version.parse('12345.678.90')]));
+    });
+    group('parse()', () {
+      test('parses an exact version', () {
+        var constraint = new VersionConstraint.parse('1.2.3-alpha');
+        expect(constraint is Version, isTrue);
+        expect(constraint, equals(new Version(1, 2, 3, pre: 'alpha')));
+      });
+      test('parses "any"', () {
+        var constraint = new VersionConstraint.parse('any');
+        expect(constraint is VersionConstraint, isTrue);
+        expect(
+            constraint,
+            allows(
+                [
+                    new Version.parse('0.0.0'),
+                    new Version.parse('1.2.3'),
+                    new Version.parse('12345.678.90')]));
+      });
+      test('parses a ">" minimum version', () {
+        expect(
+            new VersionConstraint.parse('>1.2.3'),
+            allows([new Version.parse('1.2.3+foo'), new Version.parse('1.2.4')]));
+        expect(
+            new VersionConstraint.parse('>1.2.3'),
+            doesNotAllow(
+                [
+                    new Version.parse('1.2.1'),
+                    new Version.parse('1.2.3-build'),
+                    new Version.parse('1.2.3')]));
+      });
+      test('parses a ">=" minimum version', () {
+        expect(
+            new VersionConstraint.parse('>=1.2.3'),
+            allows(
+                [
+                    new Version.parse('1.2.3'),
+                    new Version.parse('1.2.3+foo'),
+                    new Version.parse('1.2.4')]));
+        expect(
+            new VersionConstraint.parse('>=1.2.3'),
+            doesNotAllow([new Version.parse('1.2.1'), new Version.parse('1.2.3-build')]));
+      });
+      test('parses a "<" maximum version', () {
+        expect(
+            new VersionConstraint.parse('<1.2.3'),
+            allows([new Version.parse('1.2.1'), new Version.parse('1.2.2+foo')]));
+        expect(
+            new VersionConstraint.parse('<1.2.3'),
+            doesNotAllow(
+                [
+                    new Version.parse('1.2.3'),
+                    new Version.parse('1.2.3+foo'),
+                    new Version.parse('1.2.4')]));
+      });
+      test('parses a "<=" maximum version', () {
+        expect(
+            new VersionConstraint.parse('<=1.2.3'),
+            allows(
+                [
+                    new Version.parse('1.2.1'),
+                    new Version.parse('1.2.3-build'),
+                    new Version.parse('1.2.3')]));
+        expect(
+            new VersionConstraint.parse('<=1.2.3'),
+            doesNotAllow([new Version.parse('1.2.3+foo'), new Version.parse('1.2.4')]));
+      });
+      test('parses a series of space-separated constraints', () {
+        var constraint = new VersionConstraint.parse('>1.0.0 >=1.2.3 <1.3.0');
+        expect(
+            constraint,
+            allows([new Version.parse('1.2.3'), new Version.parse('1.2.5')]));
+        expect(
+            constraint,
+            doesNotAllow(
+                [
+                    new Version.parse('1.2.3-pre'),
+                    new Version.parse('1.3.0'),
+                    new Version.parse('3.4.5')]));
+      });
+      test('ignores whitespace around operators', () {
+        var constraint = new VersionConstraint.parse(' >1.0.0>=1.2.3 < 1.3.0');
+        expect(
+            constraint,
+            allows([new Version.parse('1.2.3'), new Version.parse('1.2.5')]));
+        expect(
+            constraint,
+            doesNotAllow(
+                [
+                    new Version.parse('1.2.3-pre'),
+                    new Version.parse('1.3.0'),
+                    new Version.parse('3.4.5')]));
+      });
+      test('does not allow "any" to be mixed with other constraints', () {
+        expect(
+            () => new VersionConstraint.parse('any 1.0.0'),
+            throwsFormatException);
+      });
+      test('throws FormatException on a bad string', () {
+        var bad = [
+            "",
+            "   ",
+            "foo",
+            ">foo",
+            "1.0.0 foo",
+            "1.0.0foo",
+            "anything",
+            "<>1.0.0",
+            "1.0.0<"];
+        for (var text in bad) {
+          expect(
+              () => new VersionConstraint.parse(text),
+              throwsFormatException);
+        }
+      });
+    });
+  });
+}
+class VersionConstraintMatcher implements Matcher {
+  final List<Version> _expected;
+  final bool _allow;
+  VersionConstraintMatcher(this._expected, this._allow);
+  bool matches(item, Map matchState) =>
+      (item is VersionConstraint) &&
+          _expected.every((version) => item.allows(version) == _allow);
+  Description describe(Description description) =>
+      description.add(' ${_allow ? "allows" : "does not allow"} versions');
+  Description describeMismatch(item, Description mismatchDescription,
+      Map matchState, bool verbose) {
+    if (item is! VersionConstraint) {
+      mismatchDescription.add('was not a VersionConstraint');
+      return mismatchDescription;
+    }
+    bool first = true;
+    for (var version in _expected) {
+      if (item.allows(version) != _allow) {
+        if (first) {
+          if (_allow) {
+            mismatchDescription.addDescriptionOf(item).add('did not allow ');
+          } else {
+            mismatchDescription.addDescriptionOf(item).add('allowed ');
+          }
+        } else {
+          mismatchDescription.add(' and ');
+        }
+        first = false;
+        mismatchDescription.add(version.toString());
+      }
+    }
+    return mismatchDescription;
+  }
+}
+Matcher allows(List<Version> versions) =>
+    new VersionConstraintMatcher(versions, true);
+Matcher doesNotAllow(List<Version> versions) =>
+    new VersionConstraintMatcher(versions, false);
+throwsIllegalArg(function) {
+  expect(function, throwsA((e) => e is ArgumentError));
+}
diff --git a/sdk/lib/async/deferred_load.dart b/sdk/lib/async/deferred_load.dart
index a770071..9d5c51f 100644
--- a/sdk/lib/async/deferred_load.dart
+++ b/sdk/lib/async/deferred_load.dart
@@ -7,24 +7,10 @@
 /**
  * Indicates that loading of [libraryName] is deferred.
  *
- * Applies to library imports, when used as metadata.
- *
- * Example usage:
- *
- *     @lazy
- *     import 'foo.dart' as foo;
- *
- *     const lazy = const DeferredLibrary('com.example.foo');
- *
- *     void main() {
- *       foo.method(); // Throws a NoSuchMethodError, foo is not loaded yet.
- *       lazy.load().then(onFooLoaded);
- *     }
- *
- *     void onFooLoaded(_) {
- *       foo.method();
- *     }
+ * This class is obsolete. Instead use the syntax:
+ * import "library.dart" deferred as prefix;
  */
+@Deprecated("Dart sdk v. 1.8")
 class DeferredLibrary {
   final String libraryName;
   final String uri;
diff --git a/sdk/lib/core/uri.dart b/sdk/lib/core/uri.dart
index 4b601a7..c4cb508 100644
--- a/sdk/lib/core/uri.dart
+++ b/sdk/lib/core/uri.dart
@@ -886,7 +886,7 @@
     if (port != null) {
       port = _makePort(port, scheme);
     } else {
-      port = this.port;
+      port = this._port;
       if (schemeChanged) {
         // The default port might have changed.
         port = _makePort(port, scheme);
@@ -1102,17 +1102,17 @@
    */
   static String _makeScheme(String scheme, int end) {
     if (end == 0) return "";
-    int char = scheme.codeUnitAt(0);
-    if (!_isAlphabeticCharacter(char)) {
+    final int firstCodeUnit = scheme.codeUnitAt(0);
+    if (!_isAlphabeticCharacter(firstCodeUnit)) {
       _fail(scheme, 0, "Scheme not starting with alphabetic character");
     }
-    bool allLowercase = char >= _LOWER_CASE_A;
+    bool allLowercase = firstCodeUnit >= _LOWER_CASE_A;
     for (int i = 0; i < end; i++) {
-      int codeUnit = scheme.codeUnitAt(i);
+      final int codeUnit = scheme.codeUnitAt(i);
       if (!_isSchemeCharacter(codeUnit)) {
         _fail(scheme, i, "Illegal scheme character");
       }
-      if (_LOWER_CASE_A <= char && _LOWER_CASE_Z >= char) {
+      if (codeUnit < _LOWER_CASE_A || codeUnit > _LOWER_CASE_Z) {
         allLowercase = false;
       }
     }
@@ -1358,12 +1358,41 @@
   bool get isAbsolute => scheme != "" && fragment == "";
 
   String _merge(String base, String reference) {
-    if (base == "") return "/$reference";
-    return "${base.substring(0, base.lastIndexOf("/") + 1)}$reference";
+    if (base.isEmpty) return "/$reference";
+    // Optimize for the case: absolute base, reference beginning with "../".
+    int backCount = 0;
+    int refStart = 0;
+    // Count number of "../" at beginning of reference.
+    while (reference.startsWith("../", refStart)) {
+      refStart += 3;
+      backCount++;
+    }
+
+    // Drop last segment - everything after last '/' of base.
+    int baseEnd = base.lastIndexOf('/');
+    // Drop extra segments for each leading "../" of reference.
+    while (baseEnd > 0 && backCount > 0) {
+      int newEnd = base.lastIndexOf('/', baseEnd - 1);
+      if (newEnd < 0) {
+        break;
+      }
+      int delta = baseEnd - newEnd;
+      // If we see a "." or ".." segment in base, stop here and let
+      // _removeDotSegments handle it.
+      if ((delta == 2 || delta == 3) &&
+          base.codeUnitAt(newEnd + 1) == _DOT &&
+          (delta == 2 || base.codeUnitAt(newEnd + 2) == _DOT)) {
+        break;
+      }
+      baseEnd = newEnd;
+      backCount--;
+    }
+    return base.substring(0, baseEnd + 1) +
+           reference.substring(refStart - 3 * backCount);
   }
 
   bool _hasDotSegments(String path) {
-    if (path.length > 0 && path.codeUnitAt(0) == _COLON) return true;
+    if (path.length > 0 && path.codeUnitAt(0) == _DOT) return true;
     int index = path.indexOf("/.");
     return index != -1;
   }
@@ -1996,6 +2025,7 @@
   static const int _PERCENT = 0x25;
   static const int _ASTERISK = 0x2A;
   static const int _PLUS = 0x2B;
+  static const int _DOT = 0x2E;
   static const int _SLASH = 0x2F;
   static const int _ZERO = 0x30;
   static const int _NINE = 0x39;
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index ff1d33d..da69945 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -624,7 +624,7 @@
   @DomName('Algorithm.name')
   @DocsEditable()
   @Experimental() // untriaged
-  String get name => _blink.BlinkAlgorithm.$name_Getter(this);
+  String get name => _blink.BlinkAlgorithm.name_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -656,137 +656,137 @@
 
   @DomName('HTMLAnchorElement.download')
   @DocsEditable()
-  String get download => _blink.BlinkHTMLAnchorElement.$download_Getter(this);
+  String get download => _blink.BlinkHTMLAnchorElement.download_Getter(this);
 
   @DomName('HTMLAnchorElement.download')
   @DocsEditable()
-  void set download(String value) => _blink.BlinkHTMLAnchorElement.$download_Setter(this, value);
+  void set download(String value) => _blink.BlinkHTMLAnchorElement.download_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.hreflang')
   @DocsEditable()
-  String get hreflang => _blink.BlinkHTMLAnchorElement.$hreflang_Getter(this);
+  String get hreflang => _blink.BlinkHTMLAnchorElement.hreflang_Getter(this);
 
   @DomName('HTMLAnchorElement.hreflang')
   @DocsEditable()
-  void set hreflang(String value) => _blink.BlinkHTMLAnchorElement.$hreflang_Setter(this, value);
+  void set hreflang(String value) => _blink.BlinkHTMLAnchorElement.hreflang_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.rel')
   @DocsEditable()
-  String get rel => _blink.BlinkHTMLAnchorElement.$rel_Getter(this);
+  String get rel => _blink.BlinkHTMLAnchorElement.rel_Getter(this);
 
   @DomName('HTMLAnchorElement.rel')
   @DocsEditable()
-  void set rel(String value) => _blink.BlinkHTMLAnchorElement.$rel_Setter(this, value);
+  void set rel(String value) => _blink.BlinkHTMLAnchorElement.rel_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.target')
   @DocsEditable()
-  String get target => _blink.BlinkHTMLAnchorElement.$target_Getter(this);
+  String get target => _blink.BlinkHTMLAnchorElement.target_Getter(this);
 
   @DomName('HTMLAnchorElement.target')
   @DocsEditable()
-  void set target(String value) => _blink.BlinkHTMLAnchorElement.$target_Setter(this, value);
+  void set target(String value) => _blink.BlinkHTMLAnchorElement.target_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLAnchorElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLAnchorElement.type_Getter(this);
 
   @DomName('HTMLAnchorElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLAnchorElement.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkHTMLAnchorElement.type_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.hash')
   @DocsEditable()
-  String get hash => _blink.BlinkHTMLAnchorElement.$hash_Getter(this);
+  String get hash => _blink.BlinkHTMLAnchorElement.hash_Getter(this);
 
   @DomName('HTMLAnchorElement.hash')
   @DocsEditable()
-  void set hash(String value) => _blink.BlinkHTMLAnchorElement.$hash_Setter(this, value);
+  void set hash(String value) => _blink.BlinkHTMLAnchorElement.hash_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.host')
   @DocsEditable()
-  String get host => _blink.BlinkHTMLAnchorElement.$host_Getter(this);
+  String get host => _blink.BlinkHTMLAnchorElement.host_Getter(this);
 
   @DomName('HTMLAnchorElement.host')
   @DocsEditable()
-  void set host(String value) => _blink.BlinkHTMLAnchorElement.$host_Setter(this, value);
+  void set host(String value) => _blink.BlinkHTMLAnchorElement.host_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.hostname')
   @DocsEditable()
-  String get hostname => _blink.BlinkHTMLAnchorElement.$hostname_Getter(this);
+  String get hostname => _blink.BlinkHTMLAnchorElement.hostname_Getter(this);
 
   @DomName('HTMLAnchorElement.hostname')
   @DocsEditable()
-  void set hostname(String value) => _blink.BlinkHTMLAnchorElement.$hostname_Setter(this, value);
+  void set hostname(String value) => _blink.BlinkHTMLAnchorElement.hostname_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.href')
   @DocsEditable()
-  String get href => _blink.BlinkHTMLAnchorElement.$href_Getter(this);
+  String get href => _blink.BlinkHTMLAnchorElement.href_Getter(this);
 
   @DomName('HTMLAnchorElement.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkHTMLAnchorElement.$href_Setter(this, value);
+  void set href(String value) => _blink.BlinkHTMLAnchorElement.href_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.origin')
   @DocsEditable()
   // WebKit only
   @Experimental() // non-standard
-  String get origin => _blink.BlinkHTMLAnchorElement.$origin_Getter(this);
+  String get origin => _blink.BlinkHTMLAnchorElement.origin_Getter(this);
 
   @DomName('HTMLAnchorElement.password')
   @DocsEditable()
   @Experimental() // untriaged
-  String get password => _blink.BlinkHTMLAnchorElement.$password_Getter(this);
+  String get password => _blink.BlinkHTMLAnchorElement.password_Getter(this);
 
   @DomName('HTMLAnchorElement.password')
   @DocsEditable()
   @Experimental() // untriaged
-  void set password(String value) => _blink.BlinkHTMLAnchorElement.$password_Setter(this, value);
+  void set password(String value) => _blink.BlinkHTMLAnchorElement.password_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.pathname')
   @DocsEditable()
-  String get pathname => _blink.BlinkHTMLAnchorElement.$pathname_Getter(this);
+  String get pathname => _blink.BlinkHTMLAnchorElement.pathname_Getter(this);
 
   @DomName('HTMLAnchorElement.pathname')
   @DocsEditable()
-  void set pathname(String value) => _blink.BlinkHTMLAnchorElement.$pathname_Setter(this, value);
+  void set pathname(String value) => _blink.BlinkHTMLAnchorElement.pathname_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.port')
   @DocsEditable()
-  String get port => _blink.BlinkHTMLAnchorElement.$port_Getter(this);
+  String get port => _blink.BlinkHTMLAnchorElement.port_Getter(this);
 
   @DomName('HTMLAnchorElement.port')
   @DocsEditable()
-  void set port(String value) => _blink.BlinkHTMLAnchorElement.$port_Setter(this, value);
+  void set port(String value) => _blink.BlinkHTMLAnchorElement.port_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.protocol')
   @DocsEditable()
-  String get protocol => _blink.BlinkHTMLAnchorElement.$protocol_Getter(this);
+  String get protocol => _blink.BlinkHTMLAnchorElement.protocol_Getter(this);
 
   @DomName('HTMLAnchorElement.protocol')
   @DocsEditable()
-  void set protocol(String value) => _blink.BlinkHTMLAnchorElement.$protocol_Setter(this, value);
+  void set protocol(String value) => _blink.BlinkHTMLAnchorElement.protocol_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.search')
   @DocsEditable()
-  String get search => _blink.BlinkHTMLAnchorElement.$search_Getter(this);
+  String get search => _blink.BlinkHTMLAnchorElement.search_Getter(this);
 
   @DomName('HTMLAnchorElement.search')
   @DocsEditable()
-  void set search(String value) => _blink.BlinkHTMLAnchorElement.$search_Setter(this, value);
+  void set search(String value) => _blink.BlinkHTMLAnchorElement.search_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.username')
   @DocsEditable()
   @Experimental() // untriaged
-  String get username => _blink.BlinkHTMLAnchorElement.$username_Getter(this);
+  String get username => _blink.BlinkHTMLAnchorElement.username_Getter(this);
 
   @DomName('HTMLAnchorElement.username')
   @DocsEditable()
   @Experimental() // untriaged
-  void set username(String value) => _blink.BlinkHTMLAnchorElement.$username_Setter(this, value);
+  void set username(String value) => _blink.BlinkHTMLAnchorElement.username_Setter_DOMString(this, value);
 
   @DomName('HTMLAnchorElement.toString')
   @DocsEditable()
-  String toString() => _blink.BlinkHTMLAnchorElement.$toString_Callback(this);
+  String toString() => _blink.BlinkHTMLAnchorElement.toString_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -807,13 +807,13 @@
   @DocsEditable()
   factory Animation(Element target, List<Map> keyframes, [timingInput]) {
     if ((timingInput is Map || timingInput == null) && (keyframes is List<Map> || keyframes == null) && (target is Element || target == null)) {
-      return _blink.BlinkAnimation.$_create_1constructorCallback(target, keyframes, timingInput);
+      return _blink.BlinkAnimation.constructorCallback_Element_SEQ_Dictionary_SEQ_Dictionary(target, keyframes, timingInput);
     }
     if ((timingInput is num || timingInput == null) && (keyframes is List<Map> || keyframes == null) && (target is Element || target == null)) {
-      return _blink.BlinkAnimation.$_create_2constructorCallback(target, keyframes, timingInput);
+      return _blink.BlinkAnimation.constructorCallback_Element_SEQ_Dictionary_SEQ_double(target, keyframes, timingInput);
     }
     if ((keyframes is List<Map> || keyframes == null) && (target is Element || target == null) && timingInput == null) {
-      return _blink.BlinkAnimation.$_create_3constructorCallback(target, keyframes);
+      return _blink.BlinkAnimation.constructorCallback_Element_SEQ_Dictionary_SEQ(target, keyframes);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -837,11 +837,11 @@
 
   @DomName('WebKitAnimationEvent.animationName')
   @DocsEditable()
-  String get animationName => _blink.BlinkWebKitAnimationEvent.$animationName_Getter(this);
+  String get animationName => _blink.BlinkWebKitAnimationEvent.animationName_Getter(this);
 
   @DomName('WebKitAnimationEvent.elapsedTime')
   @DocsEditable()
-  double get elapsedTime => _blink.BlinkWebKitAnimationEvent.$elapsedTime_Getter(this);
+  double get elapsedTime => _blink.BlinkWebKitAnimationEvent.elapsedTime_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -975,19 +975,19 @@
 
   @DomName('ApplicationCache.status')
   @DocsEditable()
-  int get status => _blink.BlinkApplicationCache.$status_Getter(this);
+  int get status => _blink.BlinkApplicationCache.status_Getter(this);
 
   @DomName('ApplicationCache.abort')
   @DocsEditable()
-  void abort() => _blink.BlinkApplicationCache.$abort_Callback(this);
+  void abort() => _blink.BlinkApplicationCache.abort_Callback(this);
 
   @DomName('ApplicationCache.swapCache')
   @DocsEditable()
-  void swapCache() => _blink.BlinkApplicationCache.$swapCache_Callback(this);
+  void swapCache() => _blink.BlinkApplicationCache.swapCache_Callback(this);
 
   @DomName('ApplicationCache.update')
   @DocsEditable()
-  void update() => _blink.BlinkApplicationCache.$update_Callback(this);
+  void update() => _blink.BlinkApplicationCache.update_Callback(this);
 
   /// Stream of `cached` events handled by this [ApplicationCache].
   @DomName('ApplicationCache.oncached')
@@ -1065,129 +1065,129 @@
 
   @DomName('HTMLAreaElement.alt')
   @DocsEditable()
-  String get alt => _blink.BlinkHTMLAreaElement.$alt_Getter(this);
+  String get alt => _blink.BlinkHTMLAreaElement.alt_Getter(this);
 
   @DomName('HTMLAreaElement.alt')
   @DocsEditable()
-  void set alt(String value) => _blink.BlinkHTMLAreaElement.$alt_Setter(this, value);
+  void set alt(String value) => _blink.BlinkHTMLAreaElement.alt_Setter_DOMString(this, value);
 
   @DomName('HTMLAreaElement.coords')
   @DocsEditable()
-  String get coords => _blink.BlinkHTMLAreaElement.$coords_Getter(this);
+  String get coords => _blink.BlinkHTMLAreaElement.coords_Getter(this);
 
   @DomName('HTMLAreaElement.coords')
   @DocsEditable()
-  void set coords(String value) => _blink.BlinkHTMLAreaElement.$coords_Setter(this, value);
+  void set coords(String value) => _blink.BlinkHTMLAreaElement.coords_Setter_DOMString(this, value);
 
   @DomName('HTMLAreaElement.shape')
   @DocsEditable()
-  String get shape => _blink.BlinkHTMLAreaElement.$shape_Getter(this);
+  String get shape => _blink.BlinkHTMLAreaElement.shape_Getter(this);
 
   @DomName('HTMLAreaElement.shape')
   @DocsEditable()
-  void set shape(String value) => _blink.BlinkHTMLAreaElement.$shape_Setter(this, value);
+  void set shape(String value) => _blink.BlinkHTMLAreaElement.shape_Setter_DOMString(this, value);
 
   @DomName('HTMLAreaElement.target')
   @DocsEditable()
-  String get target => _blink.BlinkHTMLAreaElement.$target_Getter(this);
+  String get target => _blink.BlinkHTMLAreaElement.target_Getter(this);
 
   @DomName('HTMLAreaElement.target')
   @DocsEditable()
-  void set target(String value) => _blink.BlinkHTMLAreaElement.$target_Setter(this, value);
+  void set target(String value) => _blink.BlinkHTMLAreaElement.target_Setter_DOMString(this, value);
 
   @DomName('HTMLAreaElement.hash')
   @DocsEditable()
-  String get hash => _blink.BlinkHTMLAreaElement.$hash_Getter(this);
+  String get hash => _blink.BlinkHTMLAreaElement.hash_Getter(this);
 
   @DomName('HTMLAreaElement.hash')
   @DocsEditable()
-  void set hash(String value) => _blink.BlinkHTMLAreaElement.$hash_Setter(this, value);
+  void set hash(String value) => _blink.BlinkHTMLAreaElement.hash_Setter_DOMString(this, value);
 
   @DomName('HTMLAreaElement.host')
   @DocsEditable()
-  String get host => _blink.BlinkHTMLAreaElement.$host_Getter(this);
+  String get host => _blink.BlinkHTMLAreaElement.host_Getter(this);
 
   @DomName('HTMLAreaElement.host')
   @DocsEditable()
-  void set host(String value) => _blink.BlinkHTMLAreaElement.$host_Setter(this, value);
+  void set host(String value) => _blink.BlinkHTMLAreaElement.host_Setter_DOMString(this, value);
 
   @DomName('HTMLAreaElement.hostname')
   @DocsEditable()
-  String get hostname => _blink.BlinkHTMLAreaElement.$hostname_Getter(this);
+  String get hostname => _blink.BlinkHTMLAreaElement.hostname_Getter(this);
 
   @DomName('HTMLAreaElement.hostname')
   @DocsEditable()
-  void set hostname(String value) => _blink.BlinkHTMLAreaElement.$hostname_Setter(this, value);
+  void set hostname(String value) => _blink.BlinkHTMLAreaElement.hostname_Setter_DOMString(this, value);
 
   @DomName('HTMLAreaElement.href')
   @DocsEditable()
-  String get href => _blink.BlinkHTMLAreaElement.$href_Getter(this);
+  String get href => _blink.BlinkHTMLAreaElement.href_Getter(this);
 
   @DomName('HTMLAreaElement.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkHTMLAreaElement.$href_Setter(this, value);
+  void set href(String value) => _blink.BlinkHTMLAreaElement.href_Setter_DOMString(this, value);
 
   @DomName('HTMLAreaElement.origin')
   @DocsEditable()
   @Experimental() // untriaged
-  String get origin => _blink.BlinkHTMLAreaElement.$origin_Getter(this);
+  String get origin => _blink.BlinkHTMLAreaElement.origin_Getter(this);
 
   @DomName('HTMLAreaElement.password')
   @DocsEditable()
   @Experimental() // untriaged
-  String get password => _blink.BlinkHTMLAreaElement.$password_Getter(this);
+  String get password => _blink.BlinkHTMLAreaElement.password_Getter(this);
 
   @DomName('HTMLAreaElement.password')
   @DocsEditable()
   @Experimental() // untriaged
-  void set password(String value) => _blink.BlinkHTMLAreaElement.$password_Setter(this, value);
+  void set password(String value) => _blink.BlinkHTMLAreaElement.password_Setter_DOMString(this, value);
 
   @DomName('HTMLAreaElement.pathname')
   @DocsEditable()
-  String get pathname => _blink.BlinkHTMLAreaElement.$pathname_Getter(this);
+  String get pathname => _blink.BlinkHTMLAreaElement.pathname_Getter(this);
 
   @DomName('HTMLAreaElement.pathname')
   @DocsEditable()
-  void set pathname(String value) => _blink.BlinkHTMLAreaElement.$pathname_Setter(this, value);
+  void set pathname(String value) => _blink.BlinkHTMLAreaElement.pathname_Setter_DOMString(this, value);
 
   @DomName('HTMLAreaElement.port')
   @DocsEditable()
-  String get port => _blink.BlinkHTMLAreaElement.$port_Getter(this);
+  String get port => _blink.BlinkHTMLAreaElement.port_Getter(this);
 
   @DomName('HTMLAreaElement.port')
   @DocsEditable()
-  void set port(String value) => _blink.BlinkHTMLAreaElement.$port_Setter(this, value);
+  void set port(String value) => _blink.BlinkHTMLAreaElement.port_Setter_DOMString(this, value);
 
   @DomName('HTMLAreaElement.protocol')
   @DocsEditable()
-  String get protocol => _blink.BlinkHTMLAreaElement.$protocol_Getter(this);
+  String get protocol => _blink.BlinkHTMLAreaElement.protocol_Getter(this);
 
   @DomName('HTMLAreaElement.protocol')
   @DocsEditable()
-  void set protocol(String value) => _blink.BlinkHTMLAreaElement.$protocol_Setter(this, value);
+  void set protocol(String value) => _blink.BlinkHTMLAreaElement.protocol_Setter_DOMString(this, value);
 
   @DomName('HTMLAreaElement.search')
   @DocsEditable()
-  String get search => _blink.BlinkHTMLAreaElement.$search_Getter(this);
+  String get search => _blink.BlinkHTMLAreaElement.search_Getter(this);
 
   @DomName('HTMLAreaElement.search')
   @DocsEditable()
-  void set search(String value) => _blink.BlinkHTMLAreaElement.$search_Setter(this, value);
+  void set search(String value) => _blink.BlinkHTMLAreaElement.search_Setter_DOMString(this, value);
 
   @DomName('HTMLAreaElement.username')
   @DocsEditable()
   @Experimental() // untriaged
-  String get username => _blink.BlinkHTMLAreaElement.$username_Getter(this);
+  String get username => _blink.BlinkHTMLAreaElement.username_Getter(this);
 
   @DomName('HTMLAreaElement.username')
   @DocsEditable()
   @Experimental() // untriaged
-  void set username(String value) => _blink.BlinkHTMLAreaElement.$username_Setter(this, value);
+  void set username(String value) => _blink.BlinkHTMLAreaElement.username_Setter_DOMString(this, value);
 
   @DomName('HTMLAreaElement.toString')
   @DocsEditable()
   @Experimental() // untriaged
-  String toString() => _blink.BlinkHTMLAreaElement.$toString_Callback(this);
+  String toString() => _blink.BlinkHTMLAreaElement.toString_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1206,7 +1206,7 @@
   @DomName('HTMLAudioElement.HTMLAudioElement')
   @DocsEditable()
   factory AudioElement([String src]) {
-    return _blink.BlinkHTMLAudioElement.$_create_1constructorCallback(src);
+    return _blink.BlinkHTMLAudioElement.constructorCallback_DOMString(src);
   }
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -1233,7 +1233,7 @@
 
   @DomName('AutocompleteErrorEvent.reason')
   @DocsEditable()
-  String get reason => _blink.BlinkAutocompleteErrorEvent.$reason_Getter(this);
+  String get reason => _blink.BlinkAutocompleteErrorEvent.reason_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1277,7 +1277,7 @@
 
   @DomName('BarProp.visible')
   @DocsEditable()
-  bool get visible => _blink.BlinkBarProp.$visible_Getter(this);
+  bool get visible => _blink.BlinkBarProp.visible_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1305,19 +1305,19 @@
 
   @DomName('HTMLBaseElement.href')
   @DocsEditable()
-  String get href => _blink.BlinkHTMLBaseElement.$href_Getter(this);
+  String get href => _blink.BlinkHTMLBaseElement.href_Getter(this);
 
   @DomName('HTMLBaseElement.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkHTMLBaseElement.$href_Setter(this, value);
+  void set href(String value) => _blink.BlinkHTMLBaseElement.href_Setter_DOMString(this, value);
 
   @DomName('HTMLBaseElement.target')
   @DocsEditable()
-  String get target => _blink.BlinkHTMLBaseElement.$target_Getter(this);
+  String get target => _blink.BlinkHTMLBaseElement.target_Getter(this);
 
   @DomName('HTMLBaseElement.target')
   @DocsEditable()
-  void set target(String value) => _blink.BlinkHTMLBaseElement.$target_Setter(this, value);
+  void set target(String value) => _blink.BlinkHTMLBaseElement.target_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1350,11 +1350,11 @@
 
   @DomName('BeforeUnloadEvent.returnValue')
   @DocsEditable()
-  String get returnValue => _blink.BlinkBeforeUnloadEvent.$returnValue_Getter(this);
+  String get returnValue => _blink.BlinkBeforeUnloadEvent.returnValue_Getter(this);
 
   @DomName('BeforeUnloadEvent.returnValue')
   @DocsEditable()
-  void set returnValue(String value) => _blink.BlinkBeforeUnloadEvent.$returnValue_Setter(this, value);
+  void set returnValue(String value) => _blink.BlinkBeforeUnloadEvent.returnValue_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1372,27 +1372,27 @@
   factory Blob(List blobParts, [String type, String endings]) => _create(blobParts, type, endings);
 
   @DocsEditable()
-  static Blob _create(blobParts, type, endings) => _blink.BlinkBlob.$constructorCallback(blobParts, type, endings);
+  static Blob _create(blobParts, type, endings) => _blink.BlinkBlob.constructorCallback_Array_DOMString_DOMString(blobParts, type, endings);
 
   @DomName('Blob.size')
   @DocsEditable()
-  int get size => _blink.BlinkBlob.$size_Getter(this);
+  int get size => _blink.BlinkBlob.size_Getter(this);
 
   @DomName('Blob.type')
   @DocsEditable()
-  String get type => _blink.BlinkBlob.$type_Getter(this);
+  String get type => _blink.BlinkBlob.type_Getter(this);
 
   Blob slice([int start, int end, String contentType]) {
     if (contentType != null) {
-      return _blink.BlinkBlob.$_slice_1_Callback(this, start, end, contentType);
+      return _blink.BlinkBlob.slice_Callback_ll_ll_DOMString(this, start, end, contentType);
     }
     if (end != null) {
-      return _blink.BlinkBlob.$_slice_2_Callback(this, start, end);
+      return _blink.BlinkBlob.slice_Callback_ll_ll(this, start, end);
     }
     if (start != null) {
-      return _blink.BlinkBlob.$_slice_3_Callback(this, start);
+      return _blink.BlinkBlob.slice_Callback_ll(this, start);
     }
-    return _blink.BlinkBlob.$_slice_4_Callback(this);
+    return _blink.BlinkBlob.slice_Callback(this);
   }
 
 }
@@ -1635,112 +1635,112 @@
 
   @DomName('HTMLButtonElement.autofocus')
   @DocsEditable()
-  bool get autofocus => _blink.BlinkHTMLButtonElement.$autofocus_Getter(this);
+  bool get autofocus => _blink.BlinkHTMLButtonElement.autofocus_Getter(this);
 
   @DomName('HTMLButtonElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLButtonElement.$autofocus_Setter(this, value);
+  void set autofocus(bool value) => _blink.BlinkHTMLButtonElement.autofocus_Setter_boolean(this, value);
 
   @DomName('HTMLButtonElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLButtonElement.$disabled_Getter(this);
+  bool get disabled => _blink.BlinkHTMLButtonElement.disabled_Getter(this);
 
   @DomName('HTMLButtonElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLButtonElement.$disabled_Setter(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLButtonElement.disabled_Setter_boolean(this, value);
 
   @DomName('HTMLButtonElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLButtonElement.$form_Getter(this);
+  FormElement get form => _blink.BlinkHTMLButtonElement.form_Getter(this);
 
   @DomName('HTMLButtonElement.formAction')
   @DocsEditable()
-  String get formAction => _blink.BlinkHTMLButtonElement.$formAction_Getter(this);
+  String get formAction => _blink.BlinkHTMLButtonElement.formAction_Getter(this);
 
   @DomName('HTMLButtonElement.formAction')
   @DocsEditable()
-  void set formAction(String value) => _blink.BlinkHTMLButtonElement.$formAction_Setter(this, value);
+  void set formAction(String value) => _blink.BlinkHTMLButtonElement.formAction_Setter_DOMString(this, value);
 
   @DomName('HTMLButtonElement.formEnctype')
   @DocsEditable()
-  String get formEnctype => _blink.BlinkHTMLButtonElement.$formEnctype_Getter(this);
+  String get formEnctype => _blink.BlinkHTMLButtonElement.formEnctype_Getter(this);
 
   @DomName('HTMLButtonElement.formEnctype')
   @DocsEditable()
-  void set formEnctype(String value) => _blink.BlinkHTMLButtonElement.$formEnctype_Setter(this, value);
+  void set formEnctype(String value) => _blink.BlinkHTMLButtonElement.formEnctype_Setter_DOMString(this, value);
 
   @DomName('HTMLButtonElement.formMethod')
   @DocsEditable()
-  String get formMethod => _blink.BlinkHTMLButtonElement.$formMethod_Getter(this);
+  String get formMethod => _blink.BlinkHTMLButtonElement.formMethod_Getter(this);
 
   @DomName('HTMLButtonElement.formMethod')
   @DocsEditable()
-  void set formMethod(String value) => _blink.BlinkHTMLButtonElement.$formMethod_Setter(this, value);
+  void set formMethod(String value) => _blink.BlinkHTMLButtonElement.formMethod_Setter_DOMString(this, value);
 
   @DomName('HTMLButtonElement.formNoValidate')
   @DocsEditable()
-  bool get formNoValidate => _blink.BlinkHTMLButtonElement.$formNoValidate_Getter(this);
+  bool get formNoValidate => _blink.BlinkHTMLButtonElement.formNoValidate_Getter(this);
 
   @DomName('HTMLButtonElement.formNoValidate')
   @DocsEditable()
-  void set formNoValidate(bool value) => _blink.BlinkHTMLButtonElement.$formNoValidate_Setter(this, value);
+  void set formNoValidate(bool value) => _blink.BlinkHTMLButtonElement.formNoValidate_Setter_boolean(this, value);
 
   @DomName('HTMLButtonElement.formTarget')
   @DocsEditable()
-  String get formTarget => _blink.BlinkHTMLButtonElement.$formTarget_Getter(this);
+  String get formTarget => _blink.BlinkHTMLButtonElement.formTarget_Getter(this);
 
   @DomName('HTMLButtonElement.formTarget')
   @DocsEditable()
-  void set formTarget(String value) => _blink.BlinkHTMLButtonElement.$formTarget_Setter(this, value);
+  void set formTarget(String value) => _blink.BlinkHTMLButtonElement.formTarget_Setter_DOMString(this, value);
 
   @DomName('HTMLButtonElement.labels')
   @DocsEditable()
   @Unstable()
-  List<Node> get labels => _blink.BlinkHTMLButtonElement.$labels_Getter(this);
+  List<Node> get labels => _blink.BlinkHTMLButtonElement.labels_Getter(this);
 
   @DomName('HTMLButtonElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLButtonElement.$name_Getter(this);
+  String get name => _blink.BlinkHTMLButtonElement.name_Getter(this);
 
   @DomName('HTMLButtonElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLButtonElement.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkHTMLButtonElement.name_Setter_DOMString(this, value);
 
   @DomName('HTMLButtonElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLButtonElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLButtonElement.type_Getter(this);
 
   @DomName('HTMLButtonElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLButtonElement.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkHTMLButtonElement.type_Setter_DOMString(this, value);
 
   @DomName('HTMLButtonElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLButtonElement.$validationMessage_Getter(this);
+  String get validationMessage => _blink.BlinkHTMLButtonElement.validationMessage_Getter(this);
 
   @DomName('HTMLButtonElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLButtonElement.$validity_Getter(this);
+  ValidityState get validity => _blink.BlinkHTMLButtonElement.validity_Getter(this);
 
   @DomName('HTMLButtonElement.value')
   @DocsEditable()
-  String get value => _blink.BlinkHTMLButtonElement.$value_Getter(this);
+  String get value => _blink.BlinkHTMLButtonElement.value_Getter(this);
 
   @DomName('HTMLButtonElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLButtonElement.$value_Setter(this, value);
+  void set value(String value) => _blink.BlinkHTMLButtonElement.value_Setter_DOMString(this, value);
 
   @DomName('HTMLButtonElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLButtonElement.$willValidate_Getter(this);
+  bool get willValidate => _blink.BlinkHTMLButtonElement.willValidate_Getter(this);
 
   @DomName('HTMLButtonElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLButtonElement.$checkValidity_Callback(this);
+  bool checkValidity() => _blink.BlinkHTMLButtonElement.checkValidity_Callback(this);
 
   @DomName('HTMLButtonElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLButtonElement.$setCustomValidity_Callback(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLButtonElement.setCustomValidity_Callback_DOMString(this, error);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1776,11 +1776,11 @@
 
   @DomName('Canvas2DContextAttributes.alpha')
   @DocsEditable()
-  bool get alpha => _blink.BlinkCanvas2DContextAttributes.$alpha_Getter(this);
+  bool get alpha => _blink.BlinkCanvas2DContextAttributes.alpha_Getter(this);
 
   @DomName('Canvas2DContextAttributes.alpha')
   @DocsEditable()
-  void set alpha(bool value) => _blink.BlinkCanvas2DContextAttributes.$alpha_Setter(this, value);
+  void set alpha(bool value) => _blink.BlinkCanvas2DContextAttributes.alpha_Setter_boolean(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1831,30 +1831,30 @@
   /// The height of this canvas element in CSS pixels.
   @DomName('HTMLCanvasElement.height')
   @DocsEditable()
-  int get height => _blink.BlinkHTMLCanvasElement.$height_Getter(this);
+  int get height => _blink.BlinkHTMLCanvasElement.height_Getter(this);
 
   /// The height of this canvas element in CSS pixels.
   @DomName('HTMLCanvasElement.height')
   @DocsEditable()
-  void set height(int value) => _blink.BlinkHTMLCanvasElement.$height_Setter(this, value);
+  void set height(int value) => _blink.BlinkHTMLCanvasElement.height_Setter_long(this, value);
 
   /// The width of this canvas element in CSS pixels.
   @DomName('HTMLCanvasElement.width')
   @DocsEditable()
-  int get width => _blink.BlinkHTMLCanvasElement.$width_Getter(this);
+  int get width => _blink.BlinkHTMLCanvasElement.width_Getter(this);
 
   /// The width of this canvas element in CSS pixels.
   @DomName('HTMLCanvasElement.width')
   @DocsEditable()
-  void set width(int value) => _blink.BlinkHTMLCanvasElement.$width_Setter(this, value);
+  void set width(int value) => _blink.BlinkHTMLCanvasElement.width_Setter_long(this, value);
 
   @DomName('HTMLCanvasElement.getContext')
   @DocsEditable()
-  CanvasRenderingContext getContext(String contextId, [Map attrs]) => _blink.BlinkHTMLCanvasElement.$getContext_Callback(this, contextId, attrs);
+  CanvasRenderingContext getContext(String contextId, [Map attrs]) => _blink.BlinkHTMLCanvasElement.getContext_Callback_DOMString_Dictionary(this, contextId, attrs);
 
   @DomName('HTMLCanvasElement.toDataURL')
   @DocsEditable()
-  String _toDataUrl(String type, [num quality]) => _blink.BlinkHTMLCanvasElement.$toDataURL_Callback(this, type, quality);
+  String _toDataUrl(String type, [num quality]) => _blink.BlinkHTMLCanvasElement.toDataURL_Callback_DOMString_float(this, type, quality);
 
   /// Stream of `webglcontextlost` events handled by this [CanvasElement].
   @DomName('HTMLCanvasElement.onwebglcontextlost')
@@ -1997,7 +1997,7 @@
    */
   @DomName('CanvasGradient.addColorStop')
   @DocsEditable()
-  void addColorStop(num offset, String color) => _blink.BlinkCanvasGradient.$addColorStop_Callback(this, offset, color);
+  void addColorStop(num offset, String color) => _blink.BlinkCanvasGradient.addColorStop_Callback_float_DOMString(this, offset, color);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2063,7 +2063,7 @@
   /// Reference to the canvas element to which this context belongs.
   @DomName('CanvasRenderingContext.canvas')
   @DocsEditable()
-  CanvasElement get canvas => _blink.BlinkCanvasRenderingContext.$canvas_Getter(this);
+  CanvasElement get canvas => _blink.BlinkCanvasRenderingContext.canvas_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2079,44 +2079,44 @@
   @DomName('CanvasRenderingContext2D.currentTransform')
   @DocsEditable()
   @Experimental() // untriaged
-  Matrix get currentTransform => _blink.BlinkCanvasRenderingContext2D.$currentTransform_Getter(this);
+  Matrix get currentTransform => _blink.BlinkCanvasRenderingContext2D.currentTransform_Getter(this);
 
   @DomName('CanvasRenderingContext2D.currentTransform')
   @DocsEditable()
   @Experimental() // untriaged
-  void set currentTransform(Matrix value) => _blink.BlinkCanvasRenderingContext2D.$currentTransform_Setter(this, value);
+  void set currentTransform(Matrix value) => _blink.BlinkCanvasRenderingContext2D.currentTransform_Setter_SVGMatrix(this, value);
 
   @DomName('CanvasRenderingContext2D.fillStyle')
   @DocsEditable()
-  Object get fillStyle => _blink.BlinkCanvasRenderingContext2D.$fillStyle_Getter(this);
+  Object get fillStyle => _blink.BlinkCanvasRenderingContext2D.fillStyle_Getter(this);
 
   @DomName('CanvasRenderingContext2D.fillStyle')
   @DocsEditable()
-  void set fillStyle(Object value) => _blink.BlinkCanvasRenderingContext2D.$fillStyle_Setter(this, value);
+  void set fillStyle(Object value) => _blink.BlinkCanvasRenderingContext2D.fillStyle_Setter_object(this, value);
 
   @DomName('CanvasRenderingContext2D.font')
   @DocsEditable()
-  String get font => _blink.BlinkCanvasRenderingContext2D.$font_Getter(this);
+  String get font => _blink.BlinkCanvasRenderingContext2D.font_Getter(this);
 
   @DomName('CanvasRenderingContext2D.font')
   @DocsEditable()
-  void set font(String value) => _blink.BlinkCanvasRenderingContext2D.$font_Setter(this, value);
+  void set font(String value) => _blink.BlinkCanvasRenderingContext2D.font_Setter_DOMString(this, value);
 
   @DomName('CanvasRenderingContext2D.globalAlpha')
   @DocsEditable()
-  num get globalAlpha => _blink.BlinkCanvasRenderingContext2D.$globalAlpha_Getter(this);
+  num get globalAlpha => _blink.BlinkCanvasRenderingContext2D.globalAlpha_Getter(this);
 
   @DomName('CanvasRenderingContext2D.globalAlpha')
   @DocsEditable()
-  void set globalAlpha(num value) => _blink.BlinkCanvasRenderingContext2D.$globalAlpha_Setter(this, value);
+  void set globalAlpha(num value) => _blink.BlinkCanvasRenderingContext2D.globalAlpha_Setter_float(this, value);
 
   @DomName('CanvasRenderingContext2D.globalCompositeOperation')
   @DocsEditable()
-  String get globalCompositeOperation => _blink.BlinkCanvasRenderingContext2D.$globalCompositeOperation_Getter(this);
+  String get globalCompositeOperation => _blink.BlinkCanvasRenderingContext2D.globalCompositeOperation_Getter(this);
 
   @DomName('CanvasRenderingContext2D.globalCompositeOperation')
   @DocsEditable()
-  void set globalCompositeOperation(String value) => _blink.BlinkCanvasRenderingContext2D.$globalCompositeOperation_Setter(this, value);
+  void set globalCompositeOperation(String value) => _blink.BlinkCanvasRenderingContext2D.globalCompositeOperation_Setter_DOMString(this, value);
 
   /**
    * Whether images and patterns on this canvas will be smoothed when this
@@ -2131,7 +2131,7 @@
   @DomName('CanvasRenderingContext2D.imageSmoothingEnabled')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get imageSmoothingEnabled => _blink.BlinkCanvasRenderingContext2D.$imageSmoothingEnabled_Getter(this);
+  bool get imageSmoothingEnabled => _blink.BlinkCanvasRenderingContext2D.imageSmoothingEnabled_Getter(this);
 
   /**
    * Whether images and patterns on this canvas will be smoothed when this
@@ -2146,213 +2146,213 @@
   @DomName('CanvasRenderingContext2D.imageSmoothingEnabled')
   @DocsEditable()
   @Experimental() // untriaged
-  void set imageSmoothingEnabled(bool value) => _blink.BlinkCanvasRenderingContext2D.$imageSmoothingEnabled_Setter(this, value);
+  void set imageSmoothingEnabled(bool value) => _blink.BlinkCanvasRenderingContext2D.imageSmoothingEnabled_Setter_boolean(this, value);
 
   @DomName('CanvasRenderingContext2D.lineCap')
   @DocsEditable()
-  String get lineCap => _blink.BlinkCanvasRenderingContext2D.$lineCap_Getter(this);
+  String get lineCap => _blink.BlinkCanvasRenderingContext2D.lineCap_Getter(this);
 
   @DomName('CanvasRenderingContext2D.lineCap')
   @DocsEditable()
-  void set lineCap(String value) => _blink.BlinkCanvasRenderingContext2D.$lineCap_Setter(this, value);
+  void set lineCap(String value) => _blink.BlinkCanvasRenderingContext2D.lineCap_Setter_DOMString(this, value);
 
   @DomName('CanvasRenderingContext2D.lineDashOffset')
   @DocsEditable()
-  num get lineDashOffset => _blink.BlinkCanvasRenderingContext2D.$lineDashOffset_Getter(this);
+  num get lineDashOffset => _blink.BlinkCanvasRenderingContext2D.lineDashOffset_Getter(this);
 
   @DomName('CanvasRenderingContext2D.lineDashOffset')
   @DocsEditable()
-  void set lineDashOffset(num value) => _blink.BlinkCanvasRenderingContext2D.$lineDashOffset_Setter(this, value);
+  void set lineDashOffset(num value) => _blink.BlinkCanvasRenderingContext2D.lineDashOffset_Setter_float(this, value);
 
   @DomName('CanvasRenderingContext2D.lineJoin')
   @DocsEditable()
-  String get lineJoin => _blink.BlinkCanvasRenderingContext2D.$lineJoin_Getter(this);
+  String get lineJoin => _blink.BlinkCanvasRenderingContext2D.lineJoin_Getter(this);
 
   @DomName('CanvasRenderingContext2D.lineJoin')
   @DocsEditable()
-  void set lineJoin(String value) => _blink.BlinkCanvasRenderingContext2D.$lineJoin_Setter(this, value);
+  void set lineJoin(String value) => _blink.BlinkCanvasRenderingContext2D.lineJoin_Setter_DOMString(this, value);
 
   @DomName('CanvasRenderingContext2D.lineWidth')
   @DocsEditable()
-  num get lineWidth => _blink.BlinkCanvasRenderingContext2D.$lineWidth_Getter(this);
+  num get lineWidth => _blink.BlinkCanvasRenderingContext2D.lineWidth_Getter(this);
 
   @DomName('CanvasRenderingContext2D.lineWidth')
   @DocsEditable()
-  void set lineWidth(num value) => _blink.BlinkCanvasRenderingContext2D.$lineWidth_Setter(this, value);
+  void set lineWidth(num value) => _blink.BlinkCanvasRenderingContext2D.lineWidth_Setter_float(this, value);
 
   @DomName('CanvasRenderingContext2D.miterLimit')
   @DocsEditable()
-  num get miterLimit => _blink.BlinkCanvasRenderingContext2D.$miterLimit_Getter(this);
+  num get miterLimit => _blink.BlinkCanvasRenderingContext2D.miterLimit_Getter(this);
 
   @DomName('CanvasRenderingContext2D.miterLimit')
   @DocsEditable()
-  void set miterLimit(num value) => _blink.BlinkCanvasRenderingContext2D.$miterLimit_Setter(this, value);
+  void set miterLimit(num value) => _blink.BlinkCanvasRenderingContext2D.miterLimit_Setter_float(this, value);
 
   @DomName('CanvasRenderingContext2D.shadowBlur')
   @DocsEditable()
-  num get shadowBlur => _blink.BlinkCanvasRenderingContext2D.$shadowBlur_Getter(this);
+  num get shadowBlur => _blink.BlinkCanvasRenderingContext2D.shadowBlur_Getter(this);
 
   @DomName('CanvasRenderingContext2D.shadowBlur')
   @DocsEditable()
-  void set shadowBlur(num value) => _blink.BlinkCanvasRenderingContext2D.$shadowBlur_Setter(this, value);
+  void set shadowBlur(num value) => _blink.BlinkCanvasRenderingContext2D.shadowBlur_Setter_float(this, value);
 
   @DomName('CanvasRenderingContext2D.shadowColor')
   @DocsEditable()
-  String get shadowColor => _blink.BlinkCanvasRenderingContext2D.$shadowColor_Getter(this);
+  String get shadowColor => _blink.BlinkCanvasRenderingContext2D.shadowColor_Getter(this);
 
   @DomName('CanvasRenderingContext2D.shadowColor')
   @DocsEditable()
-  void set shadowColor(String value) => _blink.BlinkCanvasRenderingContext2D.$shadowColor_Setter(this, value);
+  void set shadowColor(String value) => _blink.BlinkCanvasRenderingContext2D.shadowColor_Setter_DOMString(this, value);
 
   @DomName('CanvasRenderingContext2D.shadowOffsetX')
   @DocsEditable()
-  num get shadowOffsetX => _blink.BlinkCanvasRenderingContext2D.$shadowOffsetX_Getter(this);
+  num get shadowOffsetX => _blink.BlinkCanvasRenderingContext2D.shadowOffsetX_Getter(this);
 
   @DomName('CanvasRenderingContext2D.shadowOffsetX')
   @DocsEditable()
-  void set shadowOffsetX(num value) => _blink.BlinkCanvasRenderingContext2D.$shadowOffsetX_Setter(this, value);
+  void set shadowOffsetX(num value) => _blink.BlinkCanvasRenderingContext2D.shadowOffsetX_Setter_float(this, value);
 
   @DomName('CanvasRenderingContext2D.shadowOffsetY')
   @DocsEditable()
-  num get shadowOffsetY => _blink.BlinkCanvasRenderingContext2D.$shadowOffsetY_Getter(this);
+  num get shadowOffsetY => _blink.BlinkCanvasRenderingContext2D.shadowOffsetY_Getter(this);
 
   @DomName('CanvasRenderingContext2D.shadowOffsetY')
   @DocsEditable()
-  void set shadowOffsetY(num value) => _blink.BlinkCanvasRenderingContext2D.$shadowOffsetY_Setter(this, value);
+  void set shadowOffsetY(num value) => _blink.BlinkCanvasRenderingContext2D.shadowOffsetY_Setter_float(this, value);
 
   @DomName('CanvasRenderingContext2D.strokeStyle')
   @DocsEditable()
-  Object get strokeStyle => _blink.BlinkCanvasRenderingContext2D.$strokeStyle_Getter(this);
+  Object get strokeStyle => _blink.BlinkCanvasRenderingContext2D.strokeStyle_Getter(this);
 
   @DomName('CanvasRenderingContext2D.strokeStyle')
   @DocsEditable()
-  void set strokeStyle(Object value) => _blink.BlinkCanvasRenderingContext2D.$strokeStyle_Setter(this, value);
+  void set strokeStyle(Object value) => _blink.BlinkCanvasRenderingContext2D.strokeStyle_Setter_object(this, value);
 
   @DomName('CanvasRenderingContext2D.textAlign')
   @DocsEditable()
-  String get textAlign => _blink.BlinkCanvasRenderingContext2D.$textAlign_Getter(this);
+  String get textAlign => _blink.BlinkCanvasRenderingContext2D.textAlign_Getter(this);
 
   @DomName('CanvasRenderingContext2D.textAlign')
   @DocsEditable()
-  void set textAlign(String value) => _blink.BlinkCanvasRenderingContext2D.$textAlign_Setter(this, value);
+  void set textAlign(String value) => _blink.BlinkCanvasRenderingContext2D.textAlign_Setter_DOMString(this, value);
 
   @DomName('CanvasRenderingContext2D.textBaseline')
   @DocsEditable()
-  String get textBaseline => _blink.BlinkCanvasRenderingContext2D.$textBaseline_Getter(this);
+  String get textBaseline => _blink.BlinkCanvasRenderingContext2D.textBaseline_Getter(this);
 
   @DomName('CanvasRenderingContext2D.textBaseline')
   @DocsEditable()
-  void set textBaseline(String value) => _blink.BlinkCanvasRenderingContext2D.$textBaseline_Setter(this, value);
+  void set textBaseline(String value) => _blink.BlinkCanvasRenderingContext2D.textBaseline_Setter_DOMString(this, value);
 
   @DomName('CanvasRenderingContext2D.arc')
   @DocsEditable()
-  void _arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkCanvasRenderingContext2D.$arc_Callback(this, x, y, radius, startAngle, endAngle, anticlockwise);
+  void _arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkCanvasRenderingContext2D.arc_Callback_float_float_float_float_float_boolean(this, x, y, radius, startAngle, endAngle, anticlockwise);
 
   @DomName('CanvasRenderingContext2D.arcTo')
   @DocsEditable()
-  void arcTo(num x1, num y1, num x2, num y2, num radius) => _blink.BlinkCanvasRenderingContext2D.$arcTo_Callback(this, x1, y1, x2, y2, radius);
+  void arcTo(num x1, num y1, num x2, num y2, num radius) => _blink.BlinkCanvasRenderingContext2D.arcTo_Callback_float_float_float_float_float(this, x1, y1, x2, y2, radius);
 
   @DomName('CanvasRenderingContext2D.beginPath')
   @DocsEditable()
-  void beginPath() => _blink.BlinkCanvasRenderingContext2D.$beginPath_Callback(this);
+  void beginPath() => _blink.BlinkCanvasRenderingContext2D.beginPath_Callback(this);
 
   @DomName('CanvasRenderingContext2D.bezierCurveTo')
   @DocsEditable()
-  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) => _blink.BlinkCanvasRenderingContext2D.$bezierCurveTo_Callback(this, cp1x, cp1y, cp2x, cp2y, x, y);
+  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) => _blink.BlinkCanvasRenderingContext2D.bezierCurveTo_Callback_float_float_float_float_float_float(this, cp1x, cp1y, cp2x, cp2y, x, y);
 
   @DomName('CanvasRenderingContext2D.clearRect')
   @DocsEditable()
-  void clearRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.$clearRect_Callback(this, x, y, width, height);
+  void clearRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.clearRect_Callback_float_float_float_float(this, x, y, width, height);
 
   void clip([String winding]) {
     if (winding != null) {
-      _blink.BlinkCanvasRenderingContext2D.$_clip_1_Callback(this, winding);
+      _blink.BlinkCanvasRenderingContext2D.clip_Callback_DOMString(this, winding);
       return;
     }
-    _blink.BlinkCanvasRenderingContext2D.$_clip_2_Callback(this);
+    _blink.BlinkCanvasRenderingContext2D.clip_Callback(this);
     return;
   }
 
   @DomName('CanvasRenderingContext2D.closePath')
   @DocsEditable()
-  void closePath() => _blink.BlinkCanvasRenderingContext2D.$closePath_Callback(this);
+  void closePath() => _blink.BlinkCanvasRenderingContext2D.closePath_Callback(this);
 
   @DomName('CanvasRenderingContext2D.createImageData')
   @DocsEditable()
-  ImageData createImageData(num sw, num sh) => _blink.BlinkCanvasRenderingContext2D.$createImageData_Callback(this, sw, sh);
+  ImageData createImageData(num sw, num sh) => _blink.BlinkCanvasRenderingContext2D.createImageData_Callback_float_float(this, sw, sh);
 
   @DomName('CanvasRenderingContext2D.createImageDataFromImageData')
   @DocsEditable()
-  ImageData createImageDataFromImageData(ImageData imagedata) => _blink.BlinkCanvasRenderingContext2D.$createImageDataFromImageData_Callback(this, imagedata);
+  ImageData createImageDataFromImageData(ImageData imagedata) => _blink.BlinkCanvasRenderingContext2D.createImageData_Callback_ImageData(this, imagedata);
 
   @DomName('CanvasRenderingContext2D.createLinearGradient')
   @DocsEditable()
-  CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) => _blink.BlinkCanvasRenderingContext2D.$createLinearGradient_Callback(this, x0, y0, x1, y1);
+  CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) => _blink.BlinkCanvasRenderingContext2D.createLinearGradient_Callback_float_float_float_float(this, x0, y0, x1, y1);
 
   @DomName('CanvasRenderingContext2D.createPattern')
   @DocsEditable()
-  CanvasPattern createPattern(CanvasElement canvas, String repetitionType) => _blink.BlinkCanvasRenderingContext2D.$createPattern_Callback(this, canvas, repetitionType);
+  CanvasPattern createPattern(CanvasElement canvas, String repetitionType) => _blink.BlinkCanvasRenderingContext2D.createPattern_Callback_HTMLCanvasElement_DOMString(this, canvas, repetitionType);
 
   @DomName('CanvasRenderingContext2D.createPatternFromImage')
   @DocsEditable()
-  CanvasPattern createPatternFromImage(ImageElement image, String repetitionType) => _blink.BlinkCanvasRenderingContext2D.$createPatternFromImage_Callback(this, image, repetitionType);
+  CanvasPattern createPatternFromImage(ImageElement image, String repetitionType) => _blink.BlinkCanvasRenderingContext2D.createPattern_Callback_HTMLImageElement_DOMString(this, image, repetitionType);
 
   @DomName('CanvasRenderingContext2D.createRadialGradient')
   @DocsEditable()
-  CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1) => _blink.BlinkCanvasRenderingContext2D.$createRadialGradient_Callback(this, x0, y0, r0, x1, y1, r1);
+  CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1) => _blink.BlinkCanvasRenderingContext2D.createRadialGradient_Callback_float_float_float_float_float_float(this, x0, y0, r0, x1, y1, r1);
 
   @DomName('CanvasRenderingContext2D.drawCustomFocusRing')
   @DocsEditable()
   @Experimental() // untriaged
-  bool drawCustomFocusRing(Element element) => _blink.BlinkCanvasRenderingContext2D.$drawCustomFocusRing_Callback(this, element);
+  bool drawCustomFocusRing(Element element) => _blink.BlinkCanvasRenderingContext2D.drawCustomFocusRing_Callback_Element(this, element);
 
   void _drawImage(canvas_OR_image_OR_imageBitmap_OR_video, num sx_OR_x, num sy_OR_y, [num sw_OR_width, num height_OR_sh, num dx, num dy, num dw, num dh]) {
     if ((sy_OR_y is num || sy_OR_y == null) && (sx_OR_x is num || sx_OR_x == null) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageElement || canvas_OR_image_OR_imageBitmap_OR_video == null) && sw_OR_width == null && height_OR_sh == null && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.$_drawImage_1_Callback(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLImageElement_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
       return;
     }
     if ((height_OR_sh is num || height_OR_sh == null) && (sw_OR_width is num || sw_OR_width == null) && (sy_OR_y is num || sy_OR_y == null) && (sx_OR_x is num || sx_OR_x == null) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageElement || canvas_OR_image_OR_imageBitmap_OR_video == null) && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.$_drawImage_2_Callback(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLImageElement_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
     if ((dh is num || dh == null) && (dw is num || dw == null) && (dy is num || dy == null) && (dx is num || dx == null) && (height_OR_sh is num || height_OR_sh == null) && (sw_OR_width is num || sw_OR_width == null) && (sy_OR_y is num || sy_OR_y == null) && (sx_OR_x is num || sx_OR_x == null) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageElement || canvas_OR_image_OR_imageBitmap_OR_video == null)) {
-      _blink.BlinkCanvasRenderingContext2D.$_drawImage_3_Callback(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLImageElement_float_float_float_float_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
     if ((sy_OR_y is num || sy_OR_y == null) && (sx_OR_x is num || sx_OR_x == null) && (canvas_OR_image_OR_imageBitmap_OR_video is CanvasElement || canvas_OR_image_OR_imageBitmap_OR_video == null) && sw_OR_width == null && height_OR_sh == null && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.$_drawImage_4_Callback(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLCanvasElement_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
       return;
     }
     if ((height_OR_sh is num || height_OR_sh == null) && (sw_OR_width is num || sw_OR_width == null) && (sy_OR_y is num || sy_OR_y == null) && (sx_OR_x is num || sx_OR_x == null) && (canvas_OR_image_OR_imageBitmap_OR_video is CanvasElement || canvas_OR_image_OR_imageBitmap_OR_video == null) && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.$_drawImage_5_Callback(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLCanvasElement_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
     if ((dh is num || dh == null) && (dw is num || dw == null) && (dy is num || dy == null) && (dx is num || dx == null) && (height_OR_sh is num || height_OR_sh == null) && (sw_OR_width is num || sw_OR_width == null) && (sy_OR_y is num || sy_OR_y == null) && (sx_OR_x is num || sx_OR_x == null) && (canvas_OR_image_OR_imageBitmap_OR_video is CanvasElement || canvas_OR_image_OR_imageBitmap_OR_video == null)) {
-      _blink.BlinkCanvasRenderingContext2D.$_drawImage_6_Callback(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLCanvasElement_float_float_float_float_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
     if ((sy_OR_y is num || sy_OR_y == null) && (sx_OR_x is num || sx_OR_x == null) && (canvas_OR_image_OR_imageBitmap_OR_video is VideoElement || canvas_OR_image_OR_imageBitmap_OR_video == null) && sw_OR_width == null && height_OR_sh == null && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.$_drawImage_7_Callback(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLVideoElement_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
       return;
     }
     if ((height_OR_sh is num || height_OR_sh == null) && (sw_OR_width is num || sw_OR_width == null) && (sy_OR_y is num || sy_OR_y == null) && (sx_OR_x is num || sx_OR_x == null) && (canvas_OR_image_OR_imageBitmap_OR_video is VideoElement || canvas_OR_image_OR_imageBitmap_OR_video == null) && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.$_drawImage_8_Callback(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLVideoElement_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
     if ((dh is num || dh == null) && (dw is num || dw == null) && (dy is num || dy == null) && (dx is num || dx == null) && (height_OR_sh is num || height_OR_sh == null) && (sw_OR_width is num || sw_OR_width == null) && (sy_OR_y is num || sy_OR_y == null) && (sx_OR_x is num || sx_OR_x == null) && (canvas_OR_image_OR_imageBitmap_OR_video is VideoElement || canvas_OR_image_OR_imageBitmap_OR_video == null)) {
-      _blink.BlinkCanvasRenderingContext2D.$_drawImage_9_Callback(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_HTMLVideoElement_float_float_float_float_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
     if ((sy_OR_y is num || sy_OR_y == null) && (sx_OR_x is num || sx_OR_x == null) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageBitmap || canvas_OR_image_OR_imageBitmap_OR_video == null) && sw_OR_width == null && height_OR_sh == null && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.$_drawImage_10_Callback(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_ImageBitmap_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
       return;
     }
     if ((height_OR_sh is num || height_OR_sh == null) && (sw_OR_width is num || sw_OR_width == null) && (sy_OR_y is num || sy_OR_y == null) && (sx_OR_x is num || sx_OR_x == null) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageBitmap || canvas_OR_image_OR_imageBitmap_OR_video == null) && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.$_drawImage_11_Callback(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_ImageBitmap_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
     if ((dh is num || dh == null) && (dw is num || dw == null) && (dy is num || dy == null) && (dx is num || dx == null) && (height_OR_sh is num || height_OR_sh == null) && (sw_OR_width is num || sw_OR_width == null) && (sy_OR_y is num || sy_OR_y == null) && (sx_OR_x is num || sx_OR_x == null) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageBitmap || canvas_OR_image_OR_imageBitmap_OR_video == null)) {
-      _blink.BlinkCanvasRenderingContext2D.$_drawImage_12_Callback(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
+      _blink.BlinkCanvasRenderingContext2D.drawImage_Callback_ImageBitmap_float_float_float_float_float_float_float_float(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2361,27 +2361,27 @@
   @DomName('CanvasRenderingContext2D.ellipse')
   @DocsEditable()
   @Experimental() // untriaged
-  void ellipse(num x, num y, num radiusX, num radiusY, num rotation, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkCanvasRenderingContext2D.$ellipse_Callback(this, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
+  void ellipse(num x, num y, num radiusX, num radiusY, num rotation, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkCanvasRenderingContext2D.ellipse_Callback_float_float_float_float_float_float_float_boolean(this, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
 
   void fill([String winding]) {
     if (winding != null) {
-      _blink.BlinkCanvasRenderingContext2D.$_fill_1_Callback(this, winding);
+      _blink.BlinkCanvasRenderingContext2D.fill_Callback_DOMString(this, winding);
       return;
     }
-    _blink.BlinkCanvasRenderingContext2D.$_fill_2_Callback(this);
+    _blink.BlinkCanvasRenderingContext2D.fill_Callback(this);
     return;
   }
 
   @DomName('CanvasRenderingContext2D.fillRect')
   @DocsEditable()
-  void fillRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.$fillRect_Callback(this, x, y, width, height);
+  void fillRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.fillRect_Callback_float_float_float_float(this, x, y, width, height);
 
   void fillText(String text, num x, num y, [num maxWidth]) {
     if (maxWidth != null) {
-      _blink.BlinkCanvasRenderingContext2D.$_fillText_1_Callback(this, text, x, y, maxWidth);
+      _blink.BlinkCanvasRenderingContext2D.fillText_Callback_DOMString_float_float_float(this, text, x, y, maxWidth);
       return;
     }
-    _blink.BlinkCanvasRenderingContext2D.$_fillText_2_Callback(this, text, x, y);
+    _blink.BlinkCanvasRenderingContext2D.fillText_Callback_DOMString_float_float(this, text, x, y);
     return;
   }
 
@@ -2389,46 +2389,46 @@
   @DocsEditable()
   // http://wiki.whatwg.org/wiki/CanvasOpaque#Suggested_IDL
   @Experimental()
-  Canvas2DContextAttributes getContextAttributes() => _blink.BlinkCanvasRenderingContext2D.$getContextAttributes_Callback(this);
+  Canvas2DContextAttributes getContextAttributes() => _blink.BlinkCanvasRenderingContext2D.getContextAttributes_Callback(this);
 
   @DomName('CanvasRenderingContext2D.getImageData')
   @DocsEditable()
-  ImageData getImageData(num sx, num sy, num sw, num sh) => _blink.BlinkCanvasRenderingContext2D.$getImageData_Callback(this, sx, sy, sw, sh);
+  ImageData getImageData(num sx, num sy, num sw, num sh) => _blink.BlinkCanvasRenderingContext2D.getImageData_Callback_float_float_float_float(this, sx, sy, sw, sh);
 
   @DomName('CanvasRenderingContext2D.getLineDash')
   @DocsEditable()
-  List<num> _getLineDash() => _blink.BlinkCanvasRenderingContext2D.$getLineDash_Callback(this);
+  List<num> _getLineDash() => _blink.BlinkCanvasRenderingContext2D.getLineDash_Callback(this);
 
   bool isPointInPath(num x, num y, [String winding]) {
     if (winding != null) {
-      return _blink.BlinkCanvasRenderingContext2D.$_isPointInPath_1_Callback(this, x, y, winding);
+      return _blink.BlinkCanvasRenderingContext2D.isPointInPath_Callback_float_float_DOMString(this, x, y, winding);
     }
-    return _blink.BlinkCanvasRenderingContext2D.$_isPointInPath_2_Callback(this, x, y);
+    return _blink.BlinkCanvasRenderingContext2D.isPointInPath_Callback_float_float(this, x, y);
   }
 
   @DomName('CanvasRenderingContext2D.isPointInStroke')
   @DocsEditable()
-  bool isPointInStroke(num x, num y) => _blink.BlinkCanvasRenderingContext2D.$isPointInStroke_Callback(this, x, y);
+  bool isPointInStroke(num x, num y) => _blink.BlinkCanvasRenderingContext2D.isPointInStroke_Callback_float_float(this, x, y);
 
   @DomName('CanvasRenderingContext2D.lineTo')
   @DocsEditable()
-  void lineTo(num x, num y) => _blink.BlinkCanvasRenderingContext2D.$lineTo_Callback(this, x, y);
+  void lineTo(num x, num y) => _blink.BlinkCanvasRenderingContext2D.lineTo_Callback_float_float(this, x, y);
 
   @DomName('CanvasRenderingContext2D.measureText')
   @DocsEditable()
-  TextMetrics measureText(String text) => _blink.BlinkCanvasRenderingContext2D.$measureText_Callback(this, text);
+  TextMetrics measureText(String text) => _blink.BlinkCanvasRenderingContext2D.measureText_Callback_DOMString(this, text);
 
   @DomName('CanvasRenderingContext2D.moveTo')
   @DocsEditable()
-  void moveTo(num x, num y) => _blink.BlinkCanvasRenderingContext2D.$moveTo_Callback(this, x, y);
+  void moveTo(num x, num y) => _blink.BlinkCanvasRenderingContext2D.moveTo_Callback_float_float(this, x, y);
 
   void putImageData(ImageData imagedata, num dx, num dy, [num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight]) {
     if ((dy is num || dy == null) && (dx is num || dx == null) && (imagedata is ImageData || imagedata == null) && dirtyX == null && dirtyY == null && dirtyWidth == null && dirtyHeight == null) {
-      _blink.BlinkCanvasRenderingContext2D.$_putImageData_1_Callback(this, imagedata, dx, dy);
+      _blink.BlinkCanvasRenderingContext2D.putImageData_Callback_ImageData_float_float(this, imagedata, dx, dy);
       return;
     }
     if ((dirtyHeight is num || dirtyHeight == null) && (dirtyWidth is num || dirtyWidth == null) && (dirtyY is num || dirtyY == null) && (dirtyX is num || dirtyX == null) && (dy is num || dy == null) && (dx is num || dx == null) && (imagedata is ImageData || imagedata == null)) {
-      _blink.BlinkCanvasRenderingContext2D.$_putImageData_2_Callback(this, imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
+      _blink.BlinkCanvasRenderingContext2D.putImageData_Callback_ImageData_float_float_float_float_float_float(this, imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2436,65 +2436,65 @@
 
   @DomName('CanvasRenderingContext2D.quadraticCurveTo')
   @DocsEditable()
-  void quadraticCurveTo(num cpx, num cpy, num x, num y) => _blink.BlinkCanvasRenderingContext2D.$quadraticCurveTo_Callback(this, cpx, cpy, x, y);
+  void quadraticCurveTo(num cpx, num cpy, num x, num y) => _blink.BlinkCanvasRenderingContext2D.quadraticCurveTo_Callback_float_float_float_float(this, cpx, cpy, x, y);
 
   @DomName('CanvasRenderingContext2D.rect')
   @DocsEditable()
-  void rect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.$rect_Callback(this, x, y, width, height);
+  void rect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.rect_Callback_float_float_float_float(this, x, y, width, height);
 
   @DomName('CanvasRenderingContext2D.resetTransform')
   @DocsEditable()
   @Experimental() // untriaged
-  void resetTransform() => _blink.BlinkCanvasRenderingContext2D.$resetTransform_Callback(this);
+  void resetTransform() => _blink.BlinkCanvasRenderingContext2D.resetTransform_Callback(this);
 
   @DomName('CanvasRenderingContext2D.restore')
   @DocsEditable()
-  void restore() => _blink.BlinkCanvasRenderingContext2D.$restore_Callback(this);
+  void restore() => _blink.BlinkCanvasRenderingContext2D.restore_Callback(this);
 
   @DomName('CanvasRenderingContext2D.rotate')
   @DocsEditable()
-  void rotate(num angle) => _blink.BlinkCanvasRenderingContext2D.$rotate_Callback(this, angle);
+  void rotate(num angle) => _blink.BlinkCanvasRenderingContext2D.rotate_Callback_float(this, angle);
 
   @DomName('CanvasRenderingContext2D.save')
   @DocsEditable()
-  void save() => _blink.BlinkCanvasRenderingContext2D.$save_Callback(this);
+  void save() => _blink.BlinkCanvasRenderingContext2D.save_Callback(this);
 
   @DomName('CanvasRenderingContext2D.scale')
   @DocsEditable()
-  void scale(num sx, num sy) => _blink.BlinkCanvasRenderingContext2D.$scale_Callback(this, sx, sy);
+  void scale(num sx, num sy) => _blink.BlinkCanvasRenderingContext2D.scale_Callback_float_float(this, sx, sy);
 
   @DomName('CanvasRenderingContext2D.setLineDash')
   @DocsEditable()
-  void setLineDash(List<num> dash) => _blink.BlinkCanvasRenderingContext2D.$setLineDash_Callback(this, dash);
+  void setLineDash(List<num> dash) => _blink.BlinkCanvasRenderingContext2D.setLineDash_Callback_SEQ_float_SEQ(this, dash);
 
   @DomName('CanvasRenderingContext2D.setTransform')
   @DocsEditable()
-  void setTransform(num m11, num m12, num m21, num m22, num dx, num dy) => _blink.BlinkCanvasRenderingContext2D.$setTransform_Callback(this, m11, m12, m21, m22, dx, dy);
+  void setTransform(num m11, num m12, num m21, num m22, num dx, num dy) => _blink.BlinkCanvasRenderingContext2D.setTransform_Callback_float_float_float_float_float_float(this, m11, m12, m21, m22, dx, dy);
 
   @DomName('CanvasRenderingContext2D.stroke')
   @DocsEditable()
-  void stroke() => _blink.BlinkCanvasRenderingContext2D.$stroke_Callback(this);
+  void stroke() => _blink.BlinkCanvasRenderingContext2D.stroke_Callback(this);
 
   @DomName('CanvasRenderingContext2D.strokeRect')
   @DocsEditable()
-  void strokeRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.$strokeRect_Callback(this, x, y, width, height);
+  void strokeRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.strokeRect_Callback_float_float_float_float(this, x, y, width, height);
 
   void strokeText(String text, num x, num y, [num maxWidth]) {
     if (maxWidth != null) {
-      _blink.BlinkCanvasRenderingContext2D.$_strokeText_1_Callback(this, text, x, y, maxWidth);
+      _blink.BlinkCanvasRenderingContext2D.strokeText_Callback_DOMString_float_float_float(this, text, x, y, maxWidth);
       return;
     }
-    _blink.BlinkCanvasRenderingContext2D.$_strokeText_2_Callback(this, text, x, y);
+    _blink.BlinkCanvasRenderingContext2D.strokeText_Callback_DOMString_float_float(this, text, x, y);
     return;
   }
 
   @DomName('CanvasRenderingContext2D.transform')
   @DocsEditable()
-  void transform(num m11, num m12, num m21, num m22, num dx, num dy) => _blink.BlinkCanvasRenderingContext2D.$transform_Callback(this, m11, m12, m21, m22, dx, dy);
+  void transform(num m11, num m12, num m21, num m22, num dx, num dy) => _blink.BlinkCanvasRenderingContext2D.transform_Callback_float_float_float_float_float_float(this, m11, m12, m21, m22, dx, dy);
 
   @DomName('CanvasRenderingContext2D.translate')
   @DocsEditable()
-  void translate(num tx, num ty) => _blink.BlinkCanvasRenderingContext2D.$translate_Callback(this, tx, ty);
+  void translate(num tx, num ty) => _blink.BlinkCanvasRenderingContext2D.translate_Callback_float_float(this, tx, ty);
 
 
   /**
@@ -2745,43 +2745,43 @@
 
   @DomName('CharacterData.data')
   @DocsEditable()
-  String get data => _blink.BlinkCharacterData.$data_Getter(this);
+  String get data => _blink.BlinkCharacterData.data_Getter(this);
 
   @DomName('CharacterData.data')
   @DocsEditable()
-  void set data(String value) => _blink.BlinkCharacterData.$data_Setter(this, value);
+  void set data(String value) => _blink.BlinkCharacterData.data_Setter_DOMString(this, value);
 
   @DomName('CharacterData.length')
   @DocsEditable()
-  int get length => _blink.BlinkCharacterData.$length_Getter(this);
+  int get length => _blink.BlinkCharacterData.length_Getter(this);
 
   @DomName('CharacterData.appendData')
   @DocsEditable()
-  void appendData(String data) => _blink.BlinkCharacterData.$appendData_Callback(this, data);
+  void appendData(String data) => _blink.BlinkCharacterData.appendData_Callback_DOMString(this, data);
 
   @DomName('CharacterData.deleteData')
   @DocsEditable()
-  void deleteData(int offset, int length) => _blink.BlinkCharacterData.$deleteData_Callback(this, offset, length);
+  void deleteData(int offset, int length) => _blink.BlinkCharacterData.deleteData_Callback_ul_ul(this, offset, length);
 
   @DomName('CharacterData.insertData')
   @DocsEditable()
-  void insertData(int offset, String data) => _blink.BlinkCharacterData.$insertData_Callback(this, offset, data);
+  void insertData(int offset, String data) => _blink.BlinkCharacterData.insertData_Callback_ul_DOMString(this, offset, data);
 
   @DomName('CharacterData.replaceData')
   @DocsEditable()
-  void replaceData(int offset, int length, String data) => _blink.BlinkCharacterData.$replaceData_Callback(this, offset, length, data);
+  void replaceData(int offset, int length, String data) => _blink.BlinkCharacterData.replaceData_Callback_ul_ul_DOMString(this, offset, length, data);
 
   @DomName('CharacterData.substringData')
   @DocsEditable()
-  String substringData(int offset, int length) => _blink.BlinkCharacterData.$substringData_Callback(this, offset, length);
+  String substringData(int offset, int length) => _blink.BlinkCharacterData.substringData_Callback_ul_ul(this, offset, length);
 
   @DomName('CharacterData.nextElementSibling')
   @DocsEditable()
-  Element get nextElementSibling => _blink.BlinkCharacterData.$nextElementSibling_Getter(this);
+  Element get nextElementSibling => _blink.BlinkCharacterData.nextElementSibling_Getter(this);
 
   @DomName('CharacterData.previousElementSibling')
   @DocsEditable()
-  Element get previousElementSibling => _blink.BlinkCharacterData.$previousElementSibling_Getter(this);
+  Element get previousElementSibling => _blink.BlinkCharacterData.previousElementSibling_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2801,17 +2801,17 @@
   @DomName('ChildNode.nextElementSibling')
   @DocsEditable()
   @Experimental() // untriaged
-  Element get nextElementSibling => _blink.BlinkChildNode.$nextElementSibling_Getter(this);
+  Element get nextElementSibling => _blink.BlinkChildNode.nextElementSibling_Getter(this);
 
   @DomName('ChildNode.previousElementSibling')
   @DocsEditable()
   @Experimental() // untriaged
-  Element get previousElementSibling => _blink.BlinkChildNode.$previousElementSibling_Getter(this);
+  Element get previousElementSibling => _blink.BlinkChildNode.previousElementSibling_Getter(this);
 
   @DomName('ChildNode.remove')
   @DocsEditable()
   @Experimental() // untriaged
-  void remove() => _blink.BlinkChildNode.$remove_Callback(this);
+  void remove() => _blink.BlinkChildNode.remove_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2829,15 +2829,15 @@
 
   @DomName('CloseEvent.code')
   @DocsEditable()
-  int get code => _blink.BlinkCloseEvent.$code_Getter(this);
+  int get code => _blink.BlinkCloseEvent.code_Getter(this);
 
   @DomName('CloseEvent.reason')
   @DocsEditable()
-  String get reason => _blink.BlinkCloseEvent.$reason_Getter(this);
+  String get reason => _blink.BlinkCloseEvent.reason_Getter(this);
 
   @DomName('CloseEvent.wasClean')
   @DocsEditable()
-  bool get wasClean => _blink.BlinkCloseEvent.$wasClean_Getter(this);
+  bool get wasClean => _blink.BlinkCloseEvent.wasClean_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2854,7 +2854,7 @@
   @DomName('Comment.Comment')
   @DocsEditable()
   factory Comment([String data]) {
-    return _blink.BlinkComment.$_create_1constructorCallback(data);
+    return _blink.BlinkComment.constructorCallback_DOMString(data);
   }
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -2882,20 +2882,20 @@
   @DomName('CompositionEvent.activeSegmentEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  int get activeSegmentEnd => _blink.BlinkCompositionEvent.$activeSegmentEnd_Getter(this);
+  int get activeSegmentEnd => _blink.BlinkCompositionEvent.activeSegmentEnd_Getter(this);
 
   @DomName('CompositionEvent.activeSegmentStart')
   @DocsEditable()
   @Experimental() // untriaged
-  int get activeSegmentStart => _blink.BlinkCompositionEvent.$activeSegmentStart_Getter(this);
+  int get activeSegmentStart => _blink.BlinkCompositionEvent.activeSegmentStart_Getter(this);
 
   @DomName('CompositionEvent.data')
   @DocsEditable()
-  String get data => _blink.BlinkCompositionEvent.$data_Getter(this);
+  String get data => _blink.BlinkCompositionEvent.data_Getter(this);
 
   @DomName('CompositionEvent.initCompositionEvent')
   @DocsEditable()
-  void _initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) => _blink.BlinkCompositionEvent.$initCompositionEvent_Callback(this, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg);
+  void _initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) => _blink.BlinkCompositionEvent.initCompositionEvent_Callback_DOMString_boolean_boolean_Window_DOMString(this, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2914,7 +2914,7 @@
   @DomName('Console.memory')
   @DocsEditable()
   @Experimental()
-  MemoryInfo get memory => _blink.BlinkConsole.$memory_Getter(this);
+  MemoryInfo get memory => _blink.BlinkConsole.memory_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2934,117 +2934,117 @@
   @DomName('ConsoleBase.assertCondition')
   @DocsEditable()
   @Experimental() // untriaged
-  void assertCondition(bool condition, Object arg) => _blink.BlinkConsoleBase.$assertCondition_Callback(this, condition, arg);
+  void assertCondition(bool condition, Object arg) => _blink.BlinkConsoleBase.assertCondition_Callback_boolean_object(this, condition, arg);
 
   @DomName('ConsoleBase.clear')
   @DocsEditable()
   @Experimental() // untriaged
-  void clear(Object arg) => _blink.BlinkConsoleBase.$clear_Callback(this, arg);
+  void clear(Object arg) => _blink.BlinkConsoleBase.clear_Callback_object(this, arg);
 
   @DomName('ConsoleBase.count')
   @DocsEditable()
   @Experimental() // untriaged
-  void count(Object arg) => _blink.BlinkConsoleBase.$count_Callback(this, arg);
+  void count(Object arg) => _blink.BlinkConsoleBase.count_Callback_object(this, arg);
 
   @DomName('ConsoleBase.debug')
   @DocsEditable()
   @Experimental() // untriaged
-  void debug(Object arg) => _blink.BlinkConsoleBase.$debug_Callback(this, arg);
+  void debug(Object arg) => _blink.BlinkConsoleBase.debug_Callback_object(this, arg);
 
   @DomName('ConsoleBase.dir')
   @DocsEditable()
   @Experimental() // untriaged
-  void dir(Object arg) => _blink.BlinkConsoleBase.$dir_Callback(this, arg);
+  void dir(Object arg) => _blink.BlinkConsoleBase.dir_Callback_object(this, arg);
 
   @DomName('ConsoleBase.dirxml')
   @DocsEditable()
   @Experimental() // untriaged
-  void dirxml(Object arg) => _blink.BlinkConsoleBase.$dirxml_Callback(this, arg);
+  void dirxml(Object arg) => _blink.BlinkConsoleBase.dirxml_Callback_object(this, arg);
 
   @DomName('ConsoleBase.error')
   @DocsEditable()
   @Experimental() // untriaged
-  void error(Object arg) => _blink.BlinkConsoleBase.$error_Callback(this, arg);
+  void error(Object arg) => _blink.BlinkConsoleBase.error_Callback_object(this, arg);
 
   @DomName('ConsoleBase.group')
   @DocsEditable()
   @Experimental() // untriaged
-  void group(Object arg) => _blink.BlinkConsoleBase.$group_Callback(this, arg);
+  void group(Object arg) => _blink.BlinkConsoleBase.group_Callback_object(this, arg);
 
   @DomName('ConsoleBase.groupCollapsed')
   @DocsEditable()
   @Experimental() // untriaged
-  void groupCollapsed(Object arg) => _blink.BlinkConsoleBase.$groupCollapsed_Callback(this, arg);
+  void groupCollapsed(Object arg) => _blink.BlinkConsoleBase.groupCollapsed_Callback_object(this, arg);
 
   @DomName('ConsoleBase.groupEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  void groupEnd() => _blink.BlinkConsoleBase.$groupEnd_Callback(this);
+  void groupEnd() => _blink.BlinkConsoleBase.groupEnd_Callback(this);
 
   @DomName('ConsoleBase.info')
   @DocsEditable()
   @Experimental() // untriaged
-  void info(Object arg) => _blink.BlinkConsoleBase.$info_Callback(this, arg);
+  void info(Object arg) => _blink.BlinkConsoleBase.info_Callback_object(this, arg);
 
   @DomName('ConsoleBase.log')
   @DocsEditable()
   @Experimental() // untriaged
-  void log(Object arg) => _blink.BlinkConsoleBase.$log_Callback(this, arg);
+  void log(Object arg) => _blink.BlinkConsoleBase.log_Callback_object(this, arg);
 
   @DomName('ConsoleBase.markTimeline')
   @DocsEditable()
   @Experimental() // untriaged
-  void markTimeline(String title) => _blink.BlinkConsoleBase.$markTimeline_Callback(this, title);
+  void markTimeline(String title) => _blink.BlinkConsoleBase.markTimeline_Callback_DOMString(this, title);
 
   @DomName('ConsoleBase.profile')
   @DocsEditable()
   @Experimental() // untriaged
-  void profile(String title) => _blink.BlinkConsoleBase.$profile_Callback(this, title);
+  void profile(String title) => _blink.BlinkConsoleBase.profile_Callback_DOMString(this, title);
 
   @DomName('ConsoleBase.profileEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  void profileEnd(String title) => _blink.BlinkConsoleBase.$profileEnd_Callback(this, title);
+  void profileEnd(String title) => _blink.BlinkConsoleBase.profileEnd_Callback_DOMString(this, title);
 
   @DomName('ConsoleBase.table')
   @DocsEditable()
   @Experimental() // untriaged
-  void table(Object arg) => _blink.BlinkConsoleBase.$table_Callback(this, arg);
+  void table(Object arg) => _blink.BlinkConsoleBase.table_Callback_object(this, arg);
 
   @DomName('ConsoleBase.time')
   @DocsEditable()
   @Experimental() // untriaged
-  void time(String title) => _blink.BlinkConsoleBase.$time_Callback(this, title);
+  void time(String title) => _blink.BlinkConsoleBase.time_Callback_DOMString(this, title);
 
   @DomName('ConsoleBase.timeEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  void timeEnd(String title) => _blink.BlinkConsoleBase.$timeEnd_Callback(this, title);
+  void timeEnd(String title) => _blink.BlinkConsoleBase.timeEnd_Callback_DOMString(this, title);
 
   @DomName('ConsoleBase.timeStamp')
   @DocsEditable()
   @Experimental() // untriaged
-  void timeStamp(String title) => _blink.BlinkConsoleBase.$timeStamp_Callback(this, title);
+  void timeStamp(String title) => _blink.BlinkConsoleBase.timeStamp_Callback_DOMString(this, title);
 
   @DomName('ConsoleBase.timeline')
   @DocsEditable()
   @Experimental() // untriaged
-  void timeline(String title) => _blink.BlinkConsoleBase.$timeline_Callback(this, title);
+  void timeline(String title) => _blink.BlinkConsoleBase.timeline_Callback_DOMString(this, title);
 
   @DomName('ConsoleBase.timelineEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  void timelineEnd(String title) => _blink.BlinkConsoleBase.$timelineEnd_Callback(this, title);
+  void timelineEnd(String title) => _blink.BlinkConsoleBase.timelineEnd_Callback_DOMString(this, title);
 
   @DomName('ConsoleBase.trace')
   @DocsEditable()
   @Experimental() // untriaged
-  void trace(Object arg) => _blink.BlinkConsoleBase.$trace_Callback(this, arg);
+  void trace(Object arg) => _blink.BlinkConsoleBase.trace_Callback_object(this, arg);
 
   @DomName('ConsoleBase.warn')
   @DocsEditable()
   @Experimental() // untriaged
-  void warn(Object arg) => _blink.BlinkConsoleBase.$warn_Callback(this, arg);
+  void warn(Object arg) => _blink.BlinkConsoleBase.warn_Callback_object(this, arg);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3078,23 +3078,23 @@
 
   @DomName('HTMLContentElement.resetStyleInheritance')
   @DocsEditable()
-  bool get resetStyleInheritance => _blink.BlinkHTMLContentElement.$resetStyleInheritance_Getter(this);
+  bool get resetStyleInheritance => _blink.BlinkHTMLContentElement.resetStyleInheritance_Getter(this);
 
   @DomName('HTMLContentElement.resetStyleInheritance')
   @DocsEditable()
-  void set resetStyleInheritance(bool value) => _blink.BlinkHTMLContentElement.$resetStyleInheritance_Setter(this, value);
+  void set resetStyleInheritance(bool value) => _blink.BlinkHTMLContentElement.resetStyleInheritance_Setter_boolean(this, value);
 
   @DomName('HTMLContentElement.select')
   @DocsEditable()
-  String get select => _blink.BlinkHTMLContentElement.$select_Getter(this);
+  String get select => _blink.BlinkHTMLContentElement.select_Getter(this);
 
   @DomName('HTMLContentElement.select')
   @DocsEditable()
-  void set select(String value) => _blink.BlinkHTMLContentElement.$select_Setter(this, value);
+  void set select(String value) => _blink.BlinkHTMLContentElement.select_Setter_DOMString(this, value);
 
   @DomName('HTMLContentElement.getDistributedNodes')
   @DocsEditable()
-  List<Node> getDistributedNodes() => _blink.BlinkHTMLContentElement.$getDistributedNodes_Callback(this);
+  List<Node> getDistributedNodes() => _blink.BlinkHTMLContentElement.getDistributedNodes_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3112,31 +3112,31 @@
 
   @DomName('Coordinates.accuracy')
   @DocsEditable()
-  double get accuracy => _blink.BlinkCoordinates.$accuracy_Getter(this);
+  double get accuracy => _blink.BlinkCoordinates.accuracy_Getter(this);
 
   @DomName('Coordinates.altitude')
   @DocsEditable()
-  double get altitude => _blink.BlinkCoordinates.$altitude_Getter(this);
+  double get altitude => _blink.BlinkCoordinates.altitude_Getter(this);
 
   @DomName('Coordinates.altitudeAccuracy')
   @DocsEditable()
-  double get altitudeAccuracy => _blink.BlinkCoordinates.$altitudeAccuracy_Getter(this);
+  double get altitudeAccuracy => _blink.BlinkCoordinates.altitudeAccuracy_Getter(this);
 
   @DomName('Coordinates.heading')
   @DocsEditable()
-  double get heading => _blink.BlinkCoordinates.$heading_Getter(this);
+  double get heading => _blink.BlinkCoordinates.heading_Getter(this);
 
   @DomName('Coordinates.latitude')
   @DocsEditable()
-  double get latitude => _blink.BlinkCoordinates.$latitude_Getter(this);
+  double get latitude => _blink.BlinkCoordinates.latitude_Getter(this);
 
   @DomName('Coordinates.longitude')
   @DocsEditable()
-  double get longitude => _blink.BlinkCoordinates.$longitude_Getter(this);
+  double get longitude => _blink.BlinkCoordinates.longitude_Getter(this);
 
   @DomName('Coordinates.speed')
   @DocsEditable()
-  double get speed => _blink.BlinkCoordinates.$speed_Getter(this);
+  double get speed => _blink.BlinkCoordinates.speed_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3162,11 +3162,11 @@
   @DomName('Crypto.subtle')
   @DocsEditable()
   @Experimental() // untriaged
-  _SubtleCrypto get subtle => _blink.BlinkCrypto.$subtle_Getter(this);
+  _SubtleCrypto get subtle => _blink.BlinkCrypto.subtle_Getter(this);
 
   @DomName('Crypto.getRandomValues')
   @DocsEditable()
-  TypedData getRandomValues(TypedData array) => _blink.BlinkCrypto.$getRandomValues_Callback(this, array);
+  TypedData getRandomValues(TypedData array) => _blink.BlinkCrypto.getRandomValues_Callback_ArrayBufferView(this, array);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3186,22 +3186,22 @@
   @DomName('Key.algorithm')
   @DocsEditable()
   @Experimental() // untriaged
-  Algorithm get algorithm => _blink.BlinkKey.$algorithm_Getter(this);
+  Algorithm get algorithm => _blink.BlinkKey.algorithm_Getter(this);
 
   @DomName('Key.extractable')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get extractable => _blink.BlinkKey.$extractable_Getter(this);
+  bool get extractable => _blink.BlinkKey.extractable_Getter(this);
 
   @DomName('Key.type')
   @DocsEditable()
   @Experimental() // untriaged
-  String get type => _blink.BlinkKey.$type_Getter(this);
+  String get type => _blink.BlinkKey.type_Getter(this);
 
   @DomName('Key.usages')
   @DocsEditable()
   @Experimental() // untriaged
-  List<String> get usages => _blink.BlinkKey.$usages_Getter(this);
+  List<String> get usages => _blink.BlinkKey.usages_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3221,11 +3221,11 @@
 
   @DomName('CSS.supports')
   @DocsEditable()
-  bool supports(String property, String value) => _blink.BlinkCSS.$supports_Callback(this, property, value);
+  bool supports(String property, String value) => _blink.BlinkCSS.supports_Callback_DOMString_DOMString(this, property, value);
 
   @DomName('CSS.supportsCondition')
   @DocsEditable()
-  bool supportsCondition(String conditionText) => _blink.BlinkCSS.$supportsCondition_Callback(this, conditionText);
+  bool supportsCondition(String conditionText) => _blink.BlinkCSS.supports_Callback_DOMString(this, conditionText);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3245,11 +3245,11 @@
 
   @DomName('CSSCharsetRule.encoding')
   @DocsEditable()
-  String get encoding => _blink.BlinkCSSCharsetRule.$encoding_Getter(this);
+  String get encoding => _blink.BlinkCSSCharsetRule.encoding_Getter(this);
 
   @DomName('CSSCharsetRule.encoding')
   @DocsEditable()
-  void set encoding(String value) => _blink.BlinkCSSCharsetRule.$encoding_Setter(this, value);
+  void set encoding(String value) => _blink.BlinkCSSCharsetRule.encoding_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3271,7 +3271,7 @@
 
   @DomName('WebKitCSSFilterRule.style')
   @DocsEditable()
-  CssStyleDeclaration get style => _blink.BlinkWebKitCSSFilterRule.$style_Getter(this);
+  CssStyleDeclaration get style => _blink.BlinkWebKitCSSFilterRule.style_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3292,7 +3292,7 @@
   @DomName('CSSFontFaceLoadEvent.fontfaces')
   @DocsEditable()
   @Experimental() // untriaged
-  List<FontFace> get fontfaces => _blink.BlinkCSSFontFaceLoadEvent.$fontfaces_Getter(this);
+  List<FontFace> get fontfaces => _blink.BlinkCSSFontFaceLoadEvent.fontfaces_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3310,7 +3310,7 @@
 
   @DomName('CSSFontFaceRule.style')
   @DocsEditable()
-  CssStyleDeclaration get style => _blink.BlinkCSSFontFaceRule.$style_Getter(this);
+  CssStyleDeclaration get style => _blink.BlinkCSSFontFaceRule.style_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3328,15 +3328,15 @@
 
   @DomName('CSSImportRule.href')
   @DocsEditable()
-  String get href => _blink.BlinkCSSImportRule.$href_Getter(this);
+  String get href => _blink.BlinkCSSImportRule.href_Getter(this);
 
   @DomName('CSSImportRule.media')
   @DocsEditable()
-  MediaList get media => _blink.BlinkCSSImportRule.$media_Getter(this);
+  MediaList get media => _blink.BlinkCSSImportRule.media_Getter(this);
 
   @DomName('CSSImportRule.styleSheet')
   @DocsEditable()
-  CssStyleSheet get styleSheet => _blink.BlinkCSSImportRule.$styleSheet_Getter(this);
+  CssStyleSheet get styleSheet => _blink.BlinkCSSImportRule.styleSheet_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3356,17 +3356,17 @@
   @DomName('CSSKeyframeRule.keyText')
   @DocsEditable()
   @Experimental() // untriaged
-  String get keyText => _blink.BlinkCSSKeyframeRule.$keyText_Getter(this);
+  String get keyText => _blink.BlinkCSSKeyframeRule.keyText_Getter(this);
 
   @DomName('CSSKeyframeRule.keyText')
   @DocsEditable()
   @Experimental() // untriaged
-  void set keyText(String value) => _blink.BlinkCSSKeyframeRule.$keyText_Setter(this, value);
+  void set keyText(String value) => _blink.BlinkCSSKeyframeRule.keyText_Setter_DOMString(this, value);
 
   @DomName('CSSKeyframeRule.style')
   @DocsEditable()
   @Experimental() // untriaged
-  CssStyleDeclaration get style => _blink.BlinkCSSKeyframeRule.$style_Getter(this);
+  CssStyleDeclaration get style => _blink.BlinkCSSKeyframeRule.style_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3386,37 +3386,37 @@
   @DomName('CSSKeyframesRule.cssRules')
   @DocsEditable()
   @Experimental() // untriaged
-  List<CssRule> get cssRules => _blink.BlinkCSSKeyframesRule.$cssRules_Getter(this);
+  List<CssRule> get cssRules => _blink.BlinkCSSKeyframesRule.cssRules_Getter(this);
 
   @DomName('CSSKeyframesRule.name')
   @DocsEditable()
   @Experimental() // untriaged
-  String get name => _blink.BlinkCSSKeyframesRule.$name_Getter(this);
+  String get name => _blink.BlinkCSSKeyframesRule.name_Getter(this);
 
   @DomName('CSSKeyframesRule.name')
   @DocsEditable()
   @Experimental() // untriaged
-  void set name(String value) => _blink.BlinkCSSKeyframesRule.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkCSSKeyframesRule.name_Setter_DOMString(this, value);
 
   @DomName('CSSKeyframesRule.__getter__')
   @DocsEditable()
   @Experimental() // untriaged
-  CssKeyframeRule __getter__(int index) => _blink.BlinkCSSKeyframesRule.$__getter___Callback(this, index);
+  CssKeyframeRule __getter__(int index) => _blink.BlinkCSSKeyframesRule.$__getter___Callback_ul(this, index);
 
   @DomName('CSSKeyframesRule.deleteRule')
   @DocsEditable()
   @Experimental() // untriaged
-  void deleteRule(String key) => _blink.BlinkCSSKeyframesRule.$deleteRule_Callback(this, key);
+  void deleteRule(String key) => _blink.BlinkCSSKeyframesRule.deleteRule_Callback_DOMString(this, key);
 
   @DomName('CSSKeyframesRule.findRule')
   @DocsEditable()
   @Experimental() // untriaged
-  CssKeyframeRule findRule(String key) => _blink.BlinkCSSKeyframesRule.$findRule_Callback(this, key);
+  CssKeyframeRule findRule(String key) => _blink.BlinkCSSKeyframesRule.findRule_Callback_DOMString(this, key);
 
   @DomName('CSSKeyframesRule.insertRule')
   @DocsEditable()
   @Experimental() // untriaged
-  void appendRule(String rule) => _blink.BlinkCSSKeyframesRule.$insertRule_Callback(this, rule);
+  void appendRule(String rule) => _blink.BlinkCSSKeyframesRule.insertRule_Callback_DOMString(this, rule);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3434,19 +3434,19 @@
 
   @DomName('CSSMediaRule.cssRules')
   @DocsEditable()
-  List<CssRule> get cssRules => _blink.BlinkCSSMediaRule.$cssRules_Getter(this);
+  List<CssRule> get cssRules => _blink.BlinkCSSMediaRule.cssRules_Getter(this);
 
   @DomName('CSSMediaRule.media')
   @DocsEditable()
-  MediaList get media => _blink.BlinkCSSMediaRule.$media_Getter(this);
+  MediaList get media => _blink.BlinkCSSMediaRule.media_Getter(this);
 
   @DomName('CSSMediaRule.deleteRule')
   @DocsEditable()
-  void deleteRule(int index) => _blink.BlinkCSSMediaRule.$deleteRule_Callback(this, index);
+  void deleteRule(int index) => _blink.BlinkCSSMediaRule.deleteRule_Callback_ul(this, index);
 
   @DomName('CSSMediaRule.insertRule')
   @DocsEditable()
-  int insertRule(String rule, int index) => _blink.BlinkCSSMediaRule.$insertRule_Callback(this, rule, index);
+  int insertRule(String rule, int index) => _blink.BlinkCSSMediaRule.insertRule_Callback_DOMString_ul(this, rule, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3464,15 +3464,15 @@
 
   @DomName('CSSPageRule.selectorText')
   @DocsEditable()
-  String get selectorText => _blink.BlinkCSSPageRule.$selectorText_Getter(this);
+  String get selectorText => _blink.BlinkCSSPageRule.selectorText_Getter(this);
 
   @DomName('CSSPageRule.selectorText')
   @DocsEditable()
-  void set selectorText(String value) => _blink.BlinkCSSPageRule.$selectorText_Setter(this, value);
+  void set selectorText(String value) => _blink.BlinkCSSPageRule.selectorText_Setter_DOMString(this, value);
 
   @DomName('CSSPageRule.style')
   @DocsEditable()
-  CssStyleDeclaration get style => _blink.BlinkCSSPageRule.$style_Getter(this);
+  CssStyleDeclaration get style => _blink.BlinkCSSPageRule.style_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3551,23 +3551,23 @@
 
   @DomName('CSSRule.cssText')
   @DocsEditable()
-  String get cssText => _blink.BlinkCSSRule.$cssText_Getter(this);
+  String get cssText => _blink.BlinkCSSRule.cssText_Getter(this);
 
   @DomName('CSSRule.cssText')
   @DocsEditable()
-  void set cssText(String value) => _blink.BlinkCSSRule.$cssText_Setter(this, value);
+  void set cssText(String value) => _blink.BlinkCSSRule.cssText_Setter_DOMString(this, value);
 
   @DomName('CSSRule.parentRule')
   @DocsEditable()
-  CssRule get parentRule => _blink.BlinkCSSRule.$parentRule_Getter(this);
+  CssRule get parentRule => _blink.BlinkCSSRule.parentRule_Getter(this);
 
   @DomName('CSSRule.parentStyleSheet')
   @DocsEditable()
-  CssStyleSheet get parentStyleSheet => _blink.BlinkCSSRule.$parentStyleSheet_Getter(this);
+  CssStyleSheet get parentStyleSheet => _blink.BlinkCSSRule.parentStyleSheet_Getter(this);
 
   @DomName('CSSRule.type')
   @DocsEditable()
-  int get type => _blink.BlinkCSSRule.$type_Getter(this);
+  int get type => _blink.BlinkCSSRule.type_Getter(this);
 
 }
 
@@ -3629,7 +3629,7 @@
   }
 
   bool _hasProperty(String propertyName) =>
-      _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback(this, propertyName);
+      _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_DOMString(this, propertyName);
 
   @DomName('CSSStyleDeclaration.setProperty')
   void setProperty(String propertyName, String value, [String priority]) {
@@ -3664,48 +3664,48 @@
 
   @DomName('CSSStyleDeclaration.cssText')
   @DocsEditable()
-  String get cssText => _blink.BlinkCSSStyleDeclaration.$cssText_Getter(this);
+  String get cssText => _blink.BlinkCSSStyleDeclaration.cssText_Getter(this);
 
   @DomName('CSSStyleDeclaration.cssText')
   @DocsEditable()
-  void set cssText(String value) => _blink.BlinkCSSStyleDeclaration.$cssText_Setter(this, value);
+  void set cssText(String value) => _blink.BlinkCSSStyleDeclaration.cssText_Setter_DOMString(this, value);
 
   @DomName('CSSStyleDeclaration.length')
   @DocsEditable()
-  int get length => _blink.BlinkCSSStyleDeclaration.$length_Getter(this);
+  int get length => _blink.BlinkCSSStyleDeclaration.length_Getter(this);
 
   @DomName('CSSStyleDeclaration.parentRule')
   @DocsEditable()
-  CssRule get parentRule => _blink.BlinkCSSStyleDeclaration.$parentRule_Getter(this);
+  CssRule get parentRule => _blink.BlinkCSSStyleDeclaration.parentRule_Getter(this);
 
   @DomName('CSSStyleDeclaration.__propertyQuery__')
   @DocsEditable()
   @Experimental() // untriaged
-  bool __propertyQuery__(String name) => _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback(this, name);
+  bool __propertyQuery__(String name) => _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_DOMString(this, name);
 
   @DomName('CSSStyleDeclaration.__setter__')
   @DocsEditable()
-  void __setter__(String propertyName, String propertyValue) => _blink.BlinkCSSStyleDeclaration.$__setter___Callback(this, propertyName, propertyValue);
+  void __setter__(String propertyName, String propertyValue) => _blink.BlinkCSSStyleDeclaration.$__setter___Callback_DOMString_DOMString(this, propertyName, propertyValue);
 
   @DomName('CSSStyleDeclaration.getPropertyPriority')
   @DocsEditable()
-  String getPropertyPriority(String propertyName) => _blink.BlinkCSSStyleDeclaration.$getPropertyPriority_Callback(this, propertyName);
+  String getPropertyPriority(String propertyName) => _blink.BlinkCSSStyleDeclaration.getPropertyPriority_Callback_DOMString(this, propertyName);
 
   @DomName('CSSStyleDeclaration.getPropertyValue')
   @DocsEditable()
-  String _getPropertyValue(String propertyName) => _blink.BlinkCSSStyleDeclaration.$getPropertyValue_Callback(this, propertyName);
+  String _getPropertyValue(String propertyName) => _blink.BlinkCSSStyleDeclaration.getPropertyValue_Callback_DOMString(this, propertyName);
 
   @DomName('CSSStyleDeclaration.item')
   @DocsEditable()
-  String item(int index) => _blink.BlinkCSSStyleDeclaration.$item_Callback(this, index);
+  String item(int index) => _blink.BlinkCSSStyleDeclaration.item_Callback_ul(this, index);
 
   @DomName('CSSStyleDeclaration.removeProperty')
   @DocsEditable()
-  String removeProperty(String propertyName) => _blink.BlinkCSSStyleDeclaration.$removeProperty_Callback(this, propertyName);
+  String removeProperty(String propertyName) => _blink.BlinkCSSStyleDeclaration.removeProperty_Callback_DOMString(this, propertyName);
 
   @DomName('CSSStyleDeclaration.setProperty')
   @DocsEditable()
-  void _setProperty(String propertyName, String value, String priority) => _blink.BlinkCSSStyleDeclaration.$setProperty_Callback(this, propertyName, value, priority);
+  void _setProperty(String propertyName, String value, String priority) => _blink.BlinkCSSStyleDeclaration.setProperty_Callback_DOMString_DOMString_DOMString(this, propertyName, value, priority);
 
 }
 
@@ -6836,15 +6836,15 @@
 
   @DomName('CSSStyleRule.selectorText')
   @DocsEditable()
-  String get selectorText => _blink.BlinkCSSStyleRule.$selectorText_Getter(this);
+  String get selectorText => _blink.BlinkCSSStyleRule.selectorText_Getter(this);
 
   @DomName('CSSStyleRule.selectorText')
   @DocsEditable()
-  void set selectorText(String value) => _blink.BlinkCSSStyleRule.$selectorText_Setter(this, value);
+  void set selectorText(String value) => _blink.BlinkCSSStyleRule.selectorText_Setter_DOMString(this, value);
 
   @DomName('CSSStyleRule.style')
   @DocsEditable()
-  CssStyleDeclaration get style => _blink.BlinkCSSStyleRule.$style_Getter(this);
+  CssStyleDeclaration get style => _blink.BlinkCSSStyleRule.style_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6862,39 +6862,39 @@
 
   @DomName('CSSStyleSheet.cssRules')
   @DocsEditable()
-  List<CssRule> get cssRules => _blink.BlinkCSSStyleSheet.$cssRules_Getter(this);
+  List<CssRule> get cssRules => _blink.BlinkCSSStyleSheet.cssRules_Getter(this);
 
   @DomName('CSSStyleSheet.ownerRule')
   @DocsEditable()
-  CssRule get ownerRule => _blink.BlinkCSSStyleSheet.$ownerRule_Getter(this);
+  CssRule get ownerRule => _blink.BlinkCSSStyleSheet.ownerRule_Getter(this);
 
   @DomName('CSSStyleSheet.rules')
   @DocsEditable()
   @Experimental() // non-standard
-  List<CssRule> get rules => _blink.BlinkCSSStyleSheet.$rules_Getter(this);
+  List<CssRule> get rules => _blink.BlinkCSSStyleSheet.rules_Getter(this);
 
   int addRule(String selector, String style, [int index]) {
     if (index != null) {
-      return _blink.BlinkCSSStyleSheet.$_addRule_1_Callback(this, selector, style, index);
+      return _blink.BlinkCSSStyleSheet.addRule_Callback_DOMString_DOMString_ul(this, selector, style, index);
     }
-    return _blink.BlinkCSSStyleSheet.$_addRule_2_Callback(this, selector, style);
+    return _blink.BlinkCSSStyleSheet.addRule_Callback_DOMString_DOMString(this, selector, style);
   }
 
   @DomName('CSSStyleSheet.deleteRule')
   @DocsEditable()
-  void deleteRule(int index) => _blink.BlinkCSSStyleSheet.$deleteRule_Callback(this, index);
+  void deleteRule(int index) => _blink.BlinkCSSStyleSheet.deleteRule_Callback_ul(this, index);
 
   int insertRule(String rule, [int index]) {
     if (index != null) {
-      return _blink.BlinkCSSStyleSheet.$_insertRule_1_Callback(this, rule, index);
+      return _blink.BlinkCSSStyleSheet.insertRule_Callback_DOMString_ul(this, rule, index);
     }
-    return _blink.BlinkCSSStyleSheet.$_insertRule_2_Callback(this, rule);
+    return _blink.BlinkCSSStyleSheet.insertRule_Callback_DOMString(this, rule);
   }
 
   @DomName('CSSStyleSheet.removeRule')
   @DocsEditable()
   @Experimental() // non-standard
-  void removeRule(int index) => _blink.BlinkCSSStyleSheet.$removeRule_Callback(this, index);
+  void removeRule(int index) => _blink.BlinkCSSStyleSheet.removeRule_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6912,19 +6912,19 @@
 
   @DomName('CSSSupportsRule.conditionText')
   @DocsEditable()
-  String get conditionText => _blink.BlinkCSSSupportsRule.$conditionText_Getter(this);
+  String get conditionText => _blink.BlinkCSSSupportsRule.conditionText_Getter(this);
 
   @DomName('CSSSupportsRule.cssRules')
   @DocsEditable()
-  List<CssRule> get cssRules => _blink.BlinkCSSSupportsRule.$cssRules_Getter(this);
+  List<CssRule> get cssRules => _blink.BlinkCSSSupportsRule.cssRules_Getter(this);
 
   @DomName('CSSSupportsRule.deleteRule')
   @DocsEditable()
-  void deleteRule(int index) => _blink.BlinkCSSSupportsRule.$deleteRule_Callback(this, index);
+  void deleteRule(int index) => _blink.BlinkCSSSupportsRule.deleteRule_Callback_ul(this, index);
 
   @DomName('CSSSupportsRule.insertRule')
   @DocsEditable()
-  int insertRule(String rule, int index) => _blink.BlinkCSSSupportsRule.$insertRule_Callback(this, rule, index);
+  int insertRule(String rule, int index) => _blink.BlinkCSSSupportsRule.insertRule_Callback_DOMString_ul(this, rule, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6944,7 +6944,7 @@
   @DomName('CSSViewportRule.style')
   @DocsEditable()
   @Experimental() // untriaged
-  CssStyleDeclaration get style => _blink.BlinkCSSViewportRule.$style_Getter(this);
+  CssStyleDeclaration get style => _blink.BlinkCSSViewportRule.style_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6992,11 +6992,11 @@
 
   @DomName('CustomEvent.detail')
   @DocsEditable()
-  Object get _detail => _blink.BlinkCustomEvent.$detail_Getter(this);
+  Object get _detail => _blink.BlinkCustomEvent.detail_Getter(this);
 
   @DomName('CustomEvent.initCustomEvent')
   @DocsEditable()
-  void _initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg) => _blink.BlinkCustomEvent.$initCustomEvent_Callback(this, typeArg, canBubbleArg, cancelableArg, detailArg);
+  void _initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg) => _blink.BlinkCustomEvent.initCustomEvent_Callback_DOMString_boolean_boolean_ScriptValue(this, typeArg, canBubbleArg, cancelableArg, detailArg);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7055,7 +7055,7 @@
 
   @DomName('HTMLDataListElement.options')
   @DocsEditable()
-  List<Node> get options => _blink.BlinkHTMLDataListElement.$options_Getter(this);
+  List<Node> get options => _blink.BlinkHTMLDataListElement.options_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7073,38 +7073,38 @@
 
   @DomName('Clipboard.dropEffect')
   @DocsEditable()
-  String get dropEffect => _blink.BlinkClipboard.$dropEffect_Getter(this);
+  String get dropEffect => _blink.BlinkClipboard.dropEffect_Getter(this);
 
   @DomName('Clipboard.dropEffect')
   @DocsEditable()
-  void set dropEffect(String value) => _blink.BlinkClipboard.$dropEffect_Setter(this, value);
+  void set dropEffect(String value) => _blink.BlinkClipboard.dropEffect_Setter_DOMString(this, value);
 
   @DomName('Clipboard.effectAllowed')
   @DocsEditable()
-  String get effectAllowed => _blink.BlinkClipboard.$effectAllowed_Getter(this);
+  String get effectAllowed => _blink.BlinkClipboard.effectAllowed_Getter(this);
 
   @DomName('Clipboard.effectAllowed')
   @DocsEditable()
-  void set effectAllowed(String value) => _blink.BlinkClipboard.$effectAllowed_Setter(this, value);
+  void set effectAllowed(String value) => _blink.BlinkClipboard.effectAllowed_Setter_DOMString(this, value);
 
   @DomName('Clipboard.files')
   @DocsEditable()
-  List<File> get files => _blink.BlinkClipboard.$files_Getter(this);
+  List<File> get files => _blink.BlinkClipboard.files_Getter(this);
 
   @DomName('Clipboard.items')
   @DocsEditable()
-  DataTransferItemList get items => _blink.BlinkClipboard.$items_Getter(this);
+  DataTransferItemList get items => _blink.BlinkClipboard.items_Getter(this);
 
   @DomName('Clipboard.types')
   @DocsEditable()
-  List<String> get types => _blink.BlinkClipboard.$types_Getter(this);
+  List<String> get types => _blink.BlinkClipboard.types_Getter(this);
 
   void clearData([String type]) {
     if (type != null) {
-      _blink.BlinkClipboard.$_clearData_1_Callback(this, type);
+      _blink.BlinkClipboard.clearData_Callback_DOMString(this, type);
       return;
     }
-    _blink.BlinkClipboard.$_clearData_2_Callback(this);
+    _blink.BlinkClipboard.clearData_Callback(this);
     return;
   }
 
@@ -7126,15 +7126,15 @@
    */
   @DomName('Clipboard.getData')
   @DocsEditable()
-  String getData(String type) => _blink.BlinkClipboard.$getData_Callback(this, type);
+  String getData(String type) => _blink.BlinkClipboard.getData_Callback_DOMString(this, type);
 
   @DomName('Clipboard.setData')
   @DocsEditable()
-  bool setData(String type, String data) => _blink.BlinkClipboard.$setData_Callback(this, type, data);
+  bool setData(String type, String data) => _blink.BlinkClipboard.setData_Callback_DOMString_DOMString(this, type, data);
 
   @DomName('Clipboard.setDragImage')
   @DocsEditable()
-  void setDragImage(Element image, int x, int y) => _blink.BlinkClipboard.$setDragImage_Callback(this, image, x, y);
+  void setDragImage(Element image, int x, int y) => _blink.BlinkClipboard.setDragImage_Callback_Element_long_long(this, image, x, y);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7154,19 +7154,19 @@
 
   @DomName('DataTransferItem.kind')
   @DocsEditable()
-  String get kind => _blink.BlinkDataTransferItem.$kind_Getter(this);
+  String get kind => _blink.BlinkDataTransferItem.kind_Getter(this);
 
   @DomName('DataTransferItem.type')
   @DocsEditable()
-  String get type => _blink.BlinkDataTransferItem.$type_Getter(this);
+  String get type => _blink.BlinkDataTransferItem.type_Getter(this);
 
   @DomName('DataTransferItem.getAsFile')
   @DocsEditable()
-  Blob getAsFile() => _blink.BlinkDataTransferItem.$getAsFile_Callback(this);
+  Blob getAsFile() => _blink.BlinkDataTransferItem.getAsFile_Callback(this);
 
   @DomName('DataTransferItem.getAsString')
   @DocsEditable()
-  void _getAsString(_StringCallback callback) => _blink.BlinkDataTransferItem.$getAsString_Callback(this, callback);
+  void _getAsString(_StringCallback callback) => _blink.BlinkDataTransferItem.getAsString_Callback_StringCallback(this, callback);
 
   Future<String> getAsString() {
     var completer = new Completer<String>();
@@ -7180,7 +7180,7 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  Entry getAsEntry() => _blink.BlinkDataTransferItem.$webkitGetAsEntry_Callback(this);
+  Entry getAsEntry() => _blink.BlinkDataTransferItem.webkitGetAsEntry_Callback(this);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -7198,39 +7198,39 @@
 
   @DomName('DataTransferItemList.length')
   @DocsEditable()
-  int get length => _blink.BlinkDataTransferItemList.$length_Getter(this);
+  int get length => _blink.BlinkDataTransferItemList.length_Getter(this);
 
   @DomName('DataTransferItemList.__getter__')
   @DocsEditable()
   @Experimental() // untriaged
-  DataTransferItem __getter__(int index) => _blink.BlinkDataTransferItemList.$__getter___Callback(this, index);
+  DataTransferItem __getter__(int index) => _blink.BlinkDataTransferItemList.$__getter___Callback_ul(this, index);
 
   DataTransferItem add(data_OR_file, [String type]) {
     if ((data_OR_file is File || data_OR_file == null) && type == null) {
-      return _blink.BlinkDataTransferItemList.$_add_1_Callback(this, data_OR_file);
+      return _blink.BlinkDataTransferItemList.add_Callback_File(this, data_OR_file);
     }
     if ((type is String || type == null) && (data_OR_file is String || data_OR_file == null)) {
-      return _blink.BlinkDataTransferItemList.$_add_2_Callback(this, data_OR_file, type);
+      return _blink.BlinkDataTransferItemList.add_Callback_DOMString_DOMString(this, data_OR_file, type);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('DataTransferItemList.addData')
   @DocsEditable()
-  DataTransferItem addData(String data, String type) => _blink.BlinkDataTransferItemList.$addData_Callback(this, data, type);
+  DataTransferItem addData(String data, String type) => _blink.BlinkDataTransferItemList.add_Callback_DOMString_DOMString(this, data, type);
 
   @DomName('DataTransferItemList.addFile')
   @DocsEditable()
-  DataTransferItem addFile(File file) => _blink.BlinkDataTransferItemList.$addFile_Callback(this, file);
+  DataTransferItem addFile(File file) => _blink.BlinkDataTransferItemList.add_Callback_File(this, file);
 
   @DomName('DataTransferItemList.clear')
   @DocsEditable()
-  void clear() => _blink.BlinkDataTransferItemList.$clear_Callback(this);
+  void clear() => _blink.BlinkDataTransferItemList.clear_Callback(this);
 
   @DomName('DataTransferItemList.remove')
   @DocsEditable()
   @Experimental() // untriaged
-  void remove(int index) => _blink.BlinkDataTransferItemList.$remove_Callback(this, index);
+  void remove(int index) => _blink.BlinkDataTransferItemList.remove_Callback_ul(this, index);
 
 
   DataTransferItem operator[] (int index) {
@@ -7277,7 +7277,7 @@
   @DomName('DedicatedWorkerGlobalScope.postMessage')
   @DocsEditable()
   @Experimental() // untriaged
-  void postMessage(Object message, [List<MessagePort> messagePorts]) => _blink.BlinkDedicatedWorkerGlobalScope.$postMessage_Callback(this, message, messagePorts);
+  void postMessage(Object message, [List<MessagePort> messagePorts]) => _blink.BlinkDedicatedWorkerGlobalScope.postMessage_Callback_ScriptValue_A_MessagePort_A(this, message, messagePorts);
 
   /// Stream of `message` events handled by this [DedicatedWorkerGlobalScope].
   @DomName('DedicatedWorkerGlobalScope.onmessage')
@@ -7313,12 +7313,12 @@
   @DomName('DeprecatedStorageInfo.queryUsageAndQuota')
   @DocsEditable()
   @Experimental() // untriaged
-  void queryUsageAndQuota(int storageType, [StorageUsageCallback usageCallback, StorageErrorCallback errorCallback]) => _blink.BlinkDeprecatedStorageInfo.$queryUsageAndQuota_Callback(this, storageType, usageCallback, errorCallback);
+  void queryUsageAndQuota(int storageType, [StorageUsageCallback usageCallback, StorageErrorCallback errorCallback]) => _blink.BlinkDeprecatedStorageInfo.queryUsageAndQuota_Callback_us_StorageUsageCallback_StorageErrorCallback(this, storageType, usageCallback, errorCallback);
 
   @DomName('DeprecatedStorageInfo.requestQuota')
   @DocsEditable()
   @Experimental() // untriaged
-  void requestQuota(int storageType, int newQuotaInBytes, [StorageQuotaCallback quotaCallback, StorageErrorCallback errorCallback]) => _blink.BlinkDeprecatedStorageInfo.$requestQuota_Callback(this, storageType, newQuotaInBytes, quotaCallback, errorCallback);
+  void requestQuota(int storageType, int newQuotaInBytes, [StorageQuotaCallback quotaCallback, StorageErrorCallback errorCallback]) => _blink.BlinkDeprecatedStorageInfo.requestQuota_Callback_us_ull_StorageQuotaCallback_StorageErrorCallback(this, storageType, newQuotaInBytes, quotaCallback, errorCallback);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7338,12 +7338,12 @@
   @DomName('DeprecatedStorageQuota.queryUsageAndQuota')
   @DocsEditable()
   @Experimental() // untriaged
-  void queryUsageAndQuota(StorageUsageCallback usageCallback, [StorageErrorCallback errorCallback]) => _blink.BlinkDeprecatedStorageQuota.$queryUsageAndQuota_Callback(this, usageCallback, errorCallback);
+  void queryUsageAndQuota(StorageUsageCallback usageCallback, [StorageErrorCallback errorCallback]) => _blink.BlinkDeprecatedStorageQuota.queryUsageAndQuota_Callback_StorageUsageCallback_StorageErrorCallback(this, usageCallback, errorCallback);
 
   @DomName('DeprecatedStorageQuota.requestQuota')
   @DocsEditable()
   @Experimental() // untriaged
-  void requestQuota(int newQuotaInBytes, [StorageQuotaCallback quotaCallback, StorageErrorCallback errorCallback]) => _blink.BlinkDeprecatedStorageQuota.$requestQuota_Callback(this, newQuotaInBytes, quotaCallback, errorCallback);
+  void requestQuota(int newQuotaInBytes, [StorageQuotaCallback quotaCallback, StorageErrorCallback errorCallback]) => _blink.BlinkDeprecatedStorageQuota.requestQuota_Callback_ull_StorageQuotaCallback_StorageErrorCallback(this, newQuotaInBytes, quotaCallback, errorCallback);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7377,11 +7377,11 @@
 
   @DomName('HTMLDetailsElement.open')
   @DocsEditable()
-  bool get open => _blink.BlinkHTMLDetailsElement.$open_Getter(this);
+  bool get open => _blink.BlinkHTMLDetailsElement.open_Getter(this);
 
   @DomName('HTMLDetailsElement.open')
   @DocsEditable()
-  void set open(bool value) => _blink.BlinkHTMLDetailsElement.$open_Setter(this, value);
+  void set open(bool value) => _blink.BlinkHTMLDetailsElement.open_Setter_boolean(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7401,15 +7401,15 @@
 
   @DomName('DeviceAcceleration.x')
   @DocsEditable()
-  double get x => _blink.BlinkDeviceAcceleration.$x_Getter(this);
+  double get x => _blink.BlinkDeviceAcceleration.x_Getter(this);
 
   @DomName('DeviceAcceleration.y')
   @DocsEditable()
-  double get y => _blink.BlinkDeviceAcceleration.$y_Getter(this);
+  double get y => _blink.BlinkDeviceAcceleration.y_Getter(this);
 
   @DomName('DeviceAcceleration.z')
   @DocsEditable()
-  double get z => _blink.BlinkDeviceAcceleration.$z_Getter(this);
+  double get z => _blink.BlinkDeviceAcceleration.z_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7429,24 +7429,24 @@
 
   @DomName('DeviceMotionEvent.acceleration')
   @DocsEditable()
-  DeviceAcceleration get acceleration => _blink.BlinkDeviceMotionEvent.$acceleration_Getter(this);
+  DeviceAcceleration get acceleration => _blink.BlinkDeviceMotionEvent.acceleration_Getter(this);
 
   @DomName('DeviceMotionEvent.accelerationIncludingGravity')
   @DocsEditable()
-  DeviceAcceleration get accelerationIncludingGravity => _blink.BlinkDeviceMotionEvent.$accelerationIncludingGravity_Getter(this);
+  DeviceAcceleration get accelerationIncludingGravity => _blink.BlinkDeviceMotionEvent.accelerationIncludingGravity_Getter(this);
 
   @DomName('DeviceMotionEvent.interval')
   @DocsEditable()
-  double get interval => _blink.BlinkDeviceMotionEvent.$interval_Getter(this);
+  double get interval => _blink.BlinkDeviceMotionEvent.interval_Getter(this);
 
   @DomName('DeviceMotionEvent.rotationRate')
   @DocsEditable()
-  DeviceRotationRate get rotationRate => _blink.BlinkDeviceMotionEvent.$rotationRate_Getter(this);
+  DeviceRotationRate get rotationRate => _blink.BlinkDeviceMotionEvent.rotationRate_Getter(this);
 
   @DomName('DeviceMotionEvent.initDeviceMotionEvent')
   @DocsEditable()
   @Experimental() // untriaged
-  void initDeviceMotionEvent(String type, bool bubbles, bool cancelable, DeviceAcceleration acceleration, DeviceAcceleration accelerationIncludingGravity, DeviceRotationRate rotationRate, num interval) => _blink.BlinkDeviceMotionEvent.$initDeviceMotionEvent_Callback(this, type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval);
+  void initDeviceMotionEvent(String type, bool bubbles, bool cancelable, DeviceAcceleration acceleration, DeviceAcceleration accelerationIncludingGravity, DeviceRotationRate rotationRate, num interval) => _blink.BlinkDeviceMotionEvent.initDeviceMotionEvent_Callback_DOMString_boolean_boolean_DeviceAcceleration_DeviceAcceleration_DeviceRotationRate_double(this, type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -7472,23 +7472,23 @@
 
   @DomName('DeviceOrientationEvent.absolute')
   @DocsEditable()
-  bool get absolute => _blink.BlinkDeviceOrientationEvent.$absolute_Getter(this);
+  bool get absolute => _blink.BlinkDeviceOrientationEvent.absolute_Getter(this);
 
   @DomName('DeviceOrientationEvent.alpha')
   @DocsEditable()
-  double get alpha => _blink.BlinkDeviceOrientationEvent.$alpha_Getter(this);
+  double get alpha => _blink.BlinkDeviceOrientationEvent.alpha_Getter(this);
 
   @DomName('DeviceOrientationEvent.beta')
   @DocsEditable()
-  double get beta => _blink.BlinkDeviceOrientationEvent.$beta_Getter(this);
+  double get beta => _blink.BlinkDeviceOrientationEvent.beta_Getter(this);
 
   @DomName('DeviceOrientationEvent.gamma')
   @DocsEditable()
-  double get gamma => _blink.BlinkDeviceOrientationEvent.$gamma_Getter(this);
+  double get gamma => _blink.BlinkDeviceOrientationEvent.gamma_Getter(this);
 
   @DomName('DeviceOrientationEvent.initDeviceOrientationEvent')
   @DocsEditable()
-  void _initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute) => _blink.BlinkDeviceOrientationEvent.$initDeviceOrientationEvent_Callback(this, type, bubbles, cancelable, alpha, beta, gamma, absolute);
+  void _initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute) => _blink.BlinkDeviceOrientationEvent.initDeviceOrientationEvent_Callback_DOMString_boolean_boolean_double_double_double_boolean(this, type, bubbles, cancelable, alpha, beta, gamma, absolute);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7508,15 +7508,15 @@
 
   @DomName('DeviceRotationRate.alpha')
   @DocsEditable()
-  double get alpha => _blink.BlinkDeviceRotationRate.$alpha_Getter(this);
+  double get alpha => _blink.BlinkDeviceRotationRate.alpha_Getter(this);
 
   @DomName('DeviceRotationRate.beta')
   @DocsEditable()
-  double get beta => _blink.BlinkDeviceRotationRate.$beta_Getter(this);
+  double get beta => _blink.BlinkDeviceRotationRate.beta_Getter(this);
 
   @DomName('DeviceRotationRate.gamma')
   @DocsEditable()
-  double get gamma => _blink.BlinkDeviceRotationRate.$gamma_Getter(this);
+  double get gamma => _blink.BlinkDeviceRotationRate.gamma_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7541,33 +7541,33 @@
 
   @DomName('HTMLDialogElement.open')
   @DocsEditable()
-  bool get open => _blink.BlinkHTMLDialogElement.$open_Getter(this);
+  bool get open => _blink.BlinkHTMLDialogElement.open_Getter(this);
 
   @DomName('HTMLDialogElement.open')
   @DocsEditable()
-  void set open(bool value) => _blink.BlinkHTMLDialogElement.$open_Setter(this, value);
+  void set open(bool value) => _blink.BlinkHTMLDialogElement.open_Setter_boolean(this, value);
 
   @DomName('HTMLDialogElement.returnValue')
   @DocsEditable()
   @Experimental() // untriaged
-  String get returnValue => _blink.BlinkHTMLDialogElement.$returnValue_Getter(this);
+  String get returnValue => _blink.BlinkHTMLDialogElement.returnValue_Getter(this);
 
   @DomName('HTMLDialogElement.returnValue')
   @DocsEditable()
   @Experimental() // untriaged
-  void set returnValue(String value) => _blink.BlinkHTMLDialogElement.$returnValue_Setter(this, value);
+  void set returnValue(String value) => _blink.BlinkHTMLDialogElement.returnValue_Setter_DOMString(this, value);
 
   @DomName('HTMLDialogElement.close')
   @DocsEditable()
-  void close(String returnValue) => _blink.BlinkHTMLDialogElement.$close_Callback(this, returnValue);
+  void close(String returnValue) => _blink.BlinkHTMLDialogElement.close_Callback_DOMString(this, returnValue);
 
   @DomName('HTMLDialogElement.show')
   @DocsEditable()
-  void show() => _blink.BlinkHTMLDialogElement.$show_Callback(this);
+  void show() => _blink.BlinkHTMLDialogElement.show_Callback(this);
 
   @DomName('HTMLDialogElement.showModal')
   @DocsEditable()
-  void showModal() => _blink.BlinkHTMLDialogElement.$showModal_Callback(this);
+  void showModal() => _blink.BlinkHTMLDialogElement.showModal_Callback(this);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -7621,11 +7621,11 @@
 
   @DomName('DirectoryEntry.createReader')
   @DocsEditable()
-  DirectoryReader createReader() => _blink.BlinkDirectoryEntry.$createReader_Callback(this);
+  DirectoryReader createReader() => _blink.BlinkDirectoryEntry.createReader_Callback(this);
 
   @DomName('DirectoryEntry.getDirectory')
   @DocsEditable()
-  void __getDirectory(String path, {Map options, _EntryCallback successCallback, _ErrorCallback errorCallback}) => _blink.BlinkDirectoryEntry.$getDirectory_Callback(this, path, options, successCallback, errorCallback);
+  void __getDirectory(String path, {Map options, _EntryCallback successCallback, _ErrorCallback errorCallback}) => _blink.BlinkDirectoryEntry.getDirectory_Callback_DOMString_Dictionary_EntryCallback_ErrorCallback(this, path, options, successCallback, errorCallback);
 
   Future<Entry> _getDirectory(String path, {Map options}) {
     var completer = new Completer<Entry>();
@@ -7637,7 +7637,7 @@
 
   @DomName('DirectoryEntry.getFile')
   @DocsEditable()
-  void __getFile(String path, {Map options, _EntryCallback successCallback, _ErrorCallback errorCallback}) => _blink.BlinkDirectoryEntry.$getFile_Callback(this, path, options, successCallback, errorCallback);
+  void __getFile(String path, {Map options, _EntryCallback successCallback, _ErrorCallback errorCallback}) => _blink.BlinkDirectoryEntry.getFile_Callback_DOMString_Dictionary_EntryCallback_ErrorCallback(this, path, options, successCallback, errorCallback);
 
   Future<Entry> _getFile(String path, {Map options}) {
     var completer = new Completer<Entry>();
@@ -7649,7 +7649,7 @@
 
   @DomName('DirectoryEntry.removeRecursively')
   @DocsEditable()
-  void _removeRecursively(VoidCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkDirectoryEntry.$removeRecursively_Callback(this, successCallback, errorCallback);
+  void _removeRecursively(VoidCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkDirectoryEntry.removeRecursively_Callback_VoidCallback_ErrorCallback(this, successCallback, errorCallback);
 
   Future removeRecursively() {
     var completer = new Completer();
@@ -7677,7 +7677,7 @@
 
   @DomName('DirectoryReader.readEntries')
   @DocsEditable()
-  void _readEntries(_EntriesCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkDirectoryReader.$readEntries_Callback(this, successCallback, errorCallback);
+  void _readEntries(_EntriesCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkDirectoryReader.readEntries_Callback_EntriesCallback_ErrorCallback(this, successCallback, errorCallback);
 
   Future<List<Entry>> readEntries() {
     var completer = new Completer<List<Entry>>();
@@ -7819,109 +7819,109 @@
   @DomName('Document.activeElement')
   @DocsEditable()
   @Experimental() // untriaged
-  Element get activeElement => _blink.BlinkDocument.$activeElement_Getter(this);
+  Element get activeElement => _blink.BlinkDocument.activeElement_Getter(this);
 
   @DomName('Document.body')
   @DocsEditable()
-  HtmlElement get _body => _blink.BlinkDocument.$body_Getter(this);
+  HtmlElement get _body => _blink.BlinkDocument.body_Getter(this);
 
   @DomName('Document.body')
   @DocsEditable()
-  void set _body(HtmlElement value) => _blink.BlinkDocument.$body_Setter(this, value);
+  void set _body(HtmlElement value) => _blink.BlinkDocument.body_Setter_HTMLElement(this, value);
 
   @DomName('Document.cookie')
   @DocsEditable()
-  String get cookie => _blink.BlinkDocument.$cookie_Getter(this);
+  String get cookie => _blink.BlinkDocument.cookie_Getter(this);
 
   @DomName('Document.cookie')
   @DocsEditable()
-  void set cookie(String value) => _blink.BlinkDocument.$cookie_Setter(this, value);
+  void set cookie(String value) => _blink.BlinkDocument.cookie_Setter_DOMString(this, value);
 
   @DomName('Document.currentScript')
   @DocsEditable()
   @Experimental() // untriaged
-  ScriptElement get currentScript => _blink.BlinkDocument.$currentScript_Getter(this);
+  ScriptElement get currentScript => _blink.BlinkDocument.currentScript_Getter(this);
 
   @DomName('Document.defaultView')
   @DocsEditable()
-  WindowBase get window => _blink.BlinkDocument.$defaultView_Getter(this);
+  WindowBase get window => _blink.BlinkDocument.defaultView_Getter(this);
 
   @DomName('Document.documentElement')
   @DocsEditable()
-  Element get documentElement => _blink.BlinkDocument.$documentElement_Getter(this);
+  Element get documentElement => _blink.BlinkDocument.documentElement_Getter(this);
 
   @DomName('Document.domain')
   @DocsEditable()
-  String get domain => _blink.BlinkDocument.$domain_Getter(this);
+  String get domain => _blink.BlinkDocument.domain_Getter(this);
 
   @DomName('Document.fonts')
   @DocsEditable()
   @Experimental() // untriaged
-  FontFaceSet get fonts => _blink.BlinkDocument.$fonts_Getter(this);
+  FontFaceSet get fonts => _blink.BlinkDocument.fonts_Getter(this);
 
   @DomName('Document.head')
   @DocsEditable()
-  HeadElement get _head => _blink.BlinkDocument.$head_Getter(this);
+  HeadElement get _head => _blink.BlinkDocument.head_Getter(this);
 
   @DomName('Document.hidden')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get hidden => _blink.BlinkDocument.$hidden_Getter(this);
+  bool get hidden => _blink.BlinkDocument.hidden_Getter(this);
 
   @DomName('Document.implementation')
   @DocsEditable()
-  DomImplementation get implementation => _blink.BlinkDocument.$implementation_Getter(this);
+  DomImplementation get implementation => _blink.BlinkDocument.implementation_Getter(this);
 
   @DomName('Document.lastModified')
   @DocsEditable()
-  String get _lastModified => _blink.BlinkDocument.$lastModified_Getter(this);
+  String get _lastModified => _blink.BlinkDocument.lastModified_Getter(this);
 
   @DomName('Document.preferredStylesheetSet')
   @DocsEditable()
-  String get _preferredStylesheetSet => _blink.BlinkDocument.$preferredStylesheetSet_Getter(this);
+  String get _preferredStylesheetSet => _blink.BlinkDocument.preferredStylesheetSet_Getter(this);
 
   @DomName('Document.readyState')
   @DocsEditable()
-  String get readyState => _blink.BlinkDocument.$readyState_Getter(this);
+  String get readyState => _blink.BlinkDocument.readyState_Getter(this);
 
   @DomName('Document.referrer')
   @DocsEditable()
-  String get _referrer => _blink.BlinkDocument.$referrer_Getter(this);
+  String get _referrer => _blink.BlinkDocument.referrer_Getter(this);
 
   @DomName('Document.rootElement')
   @DocsEditable()
   @Experimental() // untriaged
-  SvgSvgElement get rootElement => _blink.BlinkDocument.$rootElement_Getter(this);
+  SvgSvgElement get rootElement => _blink.BlinkDocument.rootElement_Getter(this);
 
   @DomName('Document.selectedStylesheetSet')
   @DocsEditable()
-  String get _selectedStylesheetSet => _blink.BlinkDocument.$selectedStylesheetSet_Getter(this);
+  String get _selectedStylesheetSet => _blink.BlinkDocument.selectedStylesheetSet_Getter(this);
 
   @DomName('Document.selectedStylesheetSet')
   @DocsEditable()
-  void set _selectedStylesheetSet(String value) => _blink.BlinkDocument.$selectedStylesheetSet_Setter(this, value);
+  void set _selectedStylesheetSet(String value) => _blink.BlinkDocument.selectedStylesheetSet_Setter_DOMString(this, value);
 
   @DomName('Document.styleSheets')
   @DocsEditable()
-  List<StyleSheet> get _styleSheets => _blink.BlinkDocument.$styleSheets_Getter(this);
+  List<StyleSheet> get _styleSheets => _blink.BlinkDocument.styleSheets_Getter(this);
 
   @DomName('Document.timeline')
   @DocsEditable()
   @Experimental() // untriaged
-  Timeline get timeline => _blink.BlinkDocument.$timeline_Getter(this);
+  Timeline get timeline => _blink.BlinkDocument.timeline_Getter(this);
 
   @DomName('Document.title')
   @DocsEditable()
-  String get _title => _blink.BlinkDocument.$title_Getter(this);
+  String get _title => _blink.BlinkDocument.title_Getter(this);
 
   @DomName('Document.title')
   @DocsEditable()
-  void set _title(String value) => _blink.BlinkDocument.$title_Setter(this, value);
+  void set _title(String value) => _blink.BlinkDocument.title_Setter_DOMString(this, value);
 
   @DomName('Document.visibilityState')
   @DocsEditable()
   @Experimental() // untriaged
-  String get visibilityState => _blink.BlinkDocument.$visibilityState_Getter(this);
+  String get visibilityState => _blink.BlinkDocument.visibilityState_Getter(this);
 
   @DomName('Document.webkitFullscreenElement')
   @DocsEditable()
@@ -7929,7 +7929,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-document-fullscreenelement
-  Element get _webkitFullscreenElement => _blink.BlinkDocument.$webkitFullscreenElement_Getter(this);
+  Element get _webkitFullscreenElement => _blink.BlinkDocument.webkitFullscreenElement_Getter(this);
 
   @DomName('Document.webkitFullscreenEnabled')
   @DocsEditable()
@@ -7937,7 +7937,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-document-fullscreenenabled
-  bool get _webkitFullscreenEnabled => _blink.BlinkDocument.$webkitFullscreenEnabled_Getter(this);
+  bool get _webkitFullscreenEnabled => _blink.BlinkDocument.webkitFullscreenEnabled_Getter(this);
 
   @DomName('Document.webkitHidden')
   @DocsEditable()
@@ -7945,7 +7945,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PageVisibility/Overview.html#document
-  bool get _webkitHidden => _blink.BlinkDocument.$webkitHidden_Getter(this);
+  bool get _webkitHidden => _blink.BlinkDocument.webkitHidden_Getter(this);
 
   @DomName('Document.webkitPointerLockElement')
   @DocsEditable()
@@ -7953,7 +7953,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#widl-Document-pointerLockElement
-  Element get _webkitPointerLockElement => _blink.BlinkDocument.$webkitPointerLockElement_Getter(this);
+  Element get _webkitPointerLockElement => _blink.BlinkDocument.webkitPointerLockElement_Getter(this);
 
   @DomName('Document.webkitVisibilityState')
   @DocsEditable()
@@ -7961,127 +7961,127 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PageVisibility/Overview.html#dom-document-visibilitystate
-  String get _webkitVisibilityState => _blink.BlinkDocument.$webkitVisibilityState_Getter(this);
+  String get _webkitVisibilityState => _blink.BlinkDocument.webkitVisibilityState_Getter(this);
 
   @DomName('Document.adoptNode')
   @DocsEditable()
-  Node adoptNode(Node node) => _blink.BlinkDocument.$adoptNode_Callback(this, node);
+  Node adoptNode(Node node) => _blink.BlinkDocument.adoptNode_Callback_Node(this, node);
 
   @DomName('Document.caretRangeFromPoint')
   @DocsEditable()
   // http://www.w3.org/TR/2009/WD-cssom-view-20090804/#dom-documentview-caretrangefrompoint
   @Experimental()
-  Range _caretRangeFromPoint(int x, int y) => _blink.BlinkDocument.$caretRangeFromPoint_Callback(this, x, y);
+  Range _caretRangeFromPoint(int x, int y) => _blink.BlinkDocument.caretRangeFromPoint_Callback_long_long(this, x, y);
 
   @DomName('Document.createDocumentFragment')
   @DocsEditable()
-  DocumentFragment createDocumentFragment() => _blink.BlinkDocument.$createDocumentFragment_Callback(this);
+  DocumentFragment createDocumentFragment() => _blink.BlinkDocument.createDocumentFragment_Callback(this);
 
   @DomName('Document.createElement')
   @DocsEditable()
-  Element _createElement(String localName_OR_tagName, [String typeExtension]) => _blink.BlinkDocument.$createElement_Callback(this, localName_OR_tagName, typeExtension);
+  Element _createElement(String localName_OR_tagName, [String typeExtension]) => _blink.BlinkDocument.createElement_Callback_DOMString(this, localName_OR_tagName, typeExtension);
 
   @DomName('Document.createElementNS')
   @DocsEditable()
-  Element createElementNS(String namespaceURI, String qualifiedName, [String typeExtension]) => _blink.BlinkDocument.$createElementNS_Callback(this, namespaceURI, qualifiedName, typeExtension);
+  Element createElementNS(String namespaceURI, String qualifiedName, [String typeExtension]) => _blink.BlinkDocument.createElementNS_Callback_DOMString_DOMString(this, namespaceURI, qualifiedName, typeExtension);
 
   Event _createEvent([String eventType]) {
     if (eventType != null) {
-      return _blink.BlinkDocument.$_createEvent_1_Callback(this, eventType);
+      return _blink.BlinkDocument.createEvent_Callback_DOMString(this, eventType);
     }
-    return _blink.BlinkDocument.$_createEvent_2_Callback(this);
+    return _blink.BlinkDocument.createEvent_Callback(this);
   }
 
   NodeIterator _createNodeIterator(Node root, [int whatToShow, NodeFilter filter]) {
     if (filter != null) {
-      return _blink.BlinkDocument.$_createNodeIterator_1_Callback(this, root, whatToShow, filter);
+      return _blink.BlinkDocument.createNodeIterator_Callback_Node_ul_NodeFilter(this, root, whatToShow, filter);
     }
     if (whatToShow != null) {
-      return _blink.BlinkDocument.$_createNodeIterator_2_Callback(this, root, whatToShow);
+      return _blink.BlinkDocument.createNodeIterator_Callback_Node_ul(this, root, whatToShow);
     }
-    return _blink.BlinkDocument.$_createNodeIterator_3_Callback(this, root);
+    return _blink.BlinkDocument.createNodeIterator_Callback_Node(this, root);
   }
 
   @DomName('Document.createRange')
   @DocsEditable()
-  Range createRange() => _blink.BlinkDocument.$createRange_Callback(this);
+  Range createRange() => _blink.BlinkDocument.createRange_Callback(this);
 
   @DomName('Document.createTextNode')
   @DocsEditable()
-  Text _createTextNode(String data) => _blink.BlinkDocument.$createTextNode_Callback(this, data);
+  Text _createTextNode(String data) => _blink.BlinkDocument.createTextNode_Callback_DOMString(this, data);
 
   @DomName('Document.createTouch')
   @DocsEditable()
   // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
   @Experimental()
-  Touch _createTouch(Window window, EventTarget target, int identifier, int pageX, int pageY, int screenX, int screenY, int webkitRadiusX, int webkitRadiusY, num webkitRotationAngle, num webkitForce) => _blink.BlinkDocument.$createTouch_Callback(this, window, target, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce);
+  Touch _createTouch(Window window, EventTarget target, int identifier, int pageX, int pageY, int screenX, int screenY, int webkitRadiusX, int webkitRadiusY, num webkitRotationAngle, num webkitForce) => _blink.BlinkDocument.createTouch_Callback_Window_EventTarget_long_long_long_long_long_long_long_float_float(this, window, target, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce);
 
   TreeWalker _createTreeWalker(Node root, [int whatToShow, NodeFilter filter]) {
     if (filter != null) {
-      return _blink.BlinkDocument.$_createTreeWalker_1_Callback(this, root, whatToShow, filter);
+      return _blink.BlinkDocument.createTreeWalker_Callback_Node_ul_NodeFilter(this, root, whatToShow, filter);
     }
     if (whatToShow != null) {
-      return _blink.BlinkDocument.$_createTreeWalker_2_Callback(this, root, whatToShow);
+      return _blink.BlinkDocument.createTreeWalker_Callback_Node_ul(this, root, whatToShow);
     }
-    return _blink.BlinkDocument.$_createTreeWalker_3_Callback(this, root);
+    return _blink.BlinkDocument.createTreeWalker_Callback_Node(this, root);
   }
 
   @DomName('Document.elementFromPoint')
   @DocsEditable()
-  Element _elementFromPoint(int x, int y) => _blink.BlinkDocument.$elementFromPoint_Callback(this, x, y);
+  Element _elementFromPoint(int x, int y) => _blink.BlinkDocument.elementFromPoint_Callback_long_long(this, x, y);
 
   @DomName('Document.execCommand')
   @DocsEditable()
-  bool execCommand(String command, bool userInterface, String value) => _blink.BlinkDocument.$execCommand_Callback(this, command, userInterface, value);
+  bool execCommand(String command, bool userInterface, String value) => _blink.BlinkDocument.execCommand_Callback_DOMString_boolean_DOMString(this, command, userInterface, value);
 
   @DomName('Document.getCSSCanvasContext')
   @DocsEditable()
   // https://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariCSSRef/Articles/Functions.html
   @Experimental() // non-standard
-  CanvasRenderingContext _getCssCanvasContext(String contextId, String name, int width, int height) => _blink.BlinkDocument.$getCSSCanvasContext_Callback(this, contextId, name, width, height);
+  CanvasRenderingContext _getCssCanvasContext(String contextId, String name, int width, int height) => _blink.BlinkDocument.getCSSCanvasContext_Callback_DOMString_DOMString_long_long(this, contextId, name, width, height);
 
   @DomName('Document.getElementById')
   @DocsEditable()
-  Element getElementById(String elementId) => _blink.BlinkDocument.$getElementById_Callback(this, elementId);
+  Element getElementById(String elementId) => _blink.BlinkDocument.getElementById_Callback_DOMString(this, elementId);
 
   @DomName('Document.getElementsByClassName')
   @DocsEditable()
-  List<Node> getElementsByClassName(String classNames) => _blink.BlinkDocument.$getElementsByClassName_Callback(this, classNames);
+  List<Node> getElementsByClassName(String classNames) => _blink.BlinkDocument.getElementsByClassName_Callback_DOMString(this, classNames);
 
   @DomName('Document.getElementsByName')
   @DocsEditable()
-  List<Node> getElementsByName(String elementName) => _blink.BlinkDocument.$getElementsByName_Callback(this, elementName);
+  List<Node> getElementsByName(String elementName) => _blink.BlinkDocument.getElementsByName_Callback_DOMString(this, elementName);
 
   @DomName('Document.getElementsByTagName')
   @DocsEditable()
-  List<Node> getElementsByTagName(String localName) => _blink.BlinkDocument.$getElementsByTagName_Callback(this, localName);
+  List<Node> getElementsByTagName(String localName) => _blink.BlinkDocument.getElementsByTagName_Callback_DOMString(this, localName);
 
   Node importNode(Node node, [bool deep]) {
     if (deep != null) {
-      return _blink.BlinkDocument.$_importNode_1_Callback(this, node, deep);
+      return _blink.BlinkDocument.importNode_Callback_Node_boolean(this, node, deep);
     }
-    return _blink.BlinkDocument.$_importNode_2_Callback(this, node);
+    return _blink.BlinkDocument.importNode_Callback_Node(this, node);
   }
 
   @DomName('Document.queryCommandEnabled')
   @DocsEditable()
-  bool queryCommandEnabled(String command) => _blink.BlinkDocument.$queryCommandEnabled_Callback(this, command);
+  bool queryCommandEnabled(String command) => _blink.BlinkDocument.queryCommandEnabled_Callback_DOMString(this, command);
 
   @DomName('Document.queryCommandIndeterm')
   @DocsEditable()
-  bool queryCommandIndeterm(String command) => _blink.BlinkDocument.$queryCommandIndeterm_Callback(this, command);
+  bool queryCommandIndeterm(String command) => _blink.BlinkDocument.queryCommandIndeterm_Callback_DOMString(this, command);
 
   @DomName('Document.queryCommandState')
   @DocsEditable()
-  bool queryCommandState(String command) => _blink.BlinkDocument.$queryCommandState_Callback(this, command);
+  bool queryCommandState(String command) => _blink.BlinkDocument.queryCommandState_Callback_DOMString(this, command);
 
   @DomName('Document.queryCommandSupported')
   @DocsEditable()
-  bool queryCommandSupported(String command) => _blink.BlinkDocument.$queryCommandSupported_Callback(this, command);
+  bool queryCommandSupported(String command) => _blink.BlinkDocument.queryCommandSupported_Callback_DOMString(this, command);
 
   @DomName('Document.queryCommandValue')
   @DocsEditable()
-  String queryCommandValue(String command) => _blink.BlinkDocument.$queryCommandValue_Callback(this, command);
+  String queryCommandValue(String command) => _blink.BlinkDocument.queryCommandValue_Callback_DOMString(this, command);
 
   /**
    * Finds the first descendant element of this document that matches the
@@ -8102,11 +8102,11 @@
    */
   @DomName('Document.querySelector')
   @DocsEditable()
-  Element querySelector(String selectors) => _blink.BlinkDocument.$querySelector_Callback(this, selectors);
+  Element querySelector(String selectors) => _blink.BlinkDocument.querySelector_Callback_DOMString(this, selectors);
 
   @DomName('Document.querySelectorAll')
   @DocsEditable()
-  List<Node> _querySelectorAll(String selectors) => _blink.BlinkDocument.$querySelectorAll_Callback(this, selectors);
+  List<Node> _querySelectorAll(String selectors) => _blink.BlinkDocument.querySelectorAll_Callback_DOMString(this, selectors);
 
   @DomName('Document.webkitExitFullscreen')
   @DocsEditable()
@@ -8114,7 +8114,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-document-exitfullscreen
-  void _webkitExitFullscreen() => _blink.BlinkDocument.$webkitExitFullscreen_Callback(this);
+  void _webkitExitFullscreen() => _blink.BlinkDocument.webkitExitFullscreen_Callback(this);
 
   @DomName('Document.webkitExitPointerLock')
   @DocsEditable()
@@ -8122,23 +8122,23 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#widl-Document-exitPointerLock-void
-  void _webkitExitPointerLock() => _blink.BlinkDocument.$webkitExitPointerLock_Callback(this);
+  void _webkitExitPointerLock() => _blink.BlinkDocument.webkitExitPointerLock_Callback(this);
 
   @DomName('Document.childElementCount')
   @DocsEditable()
-  int get _childElementCount => _blink.BlinkDocument.$childElementCount_Getter(this);
+  int get _childElementCount => _blink.BlinkDocument.childElementCount_Getter(this);
 
   @DomName('Document.children')
   @DocsEditable()
-  List<Node> get _children => _blink.BlinkDocument.$children_Getter(this);
+  List<Node> get _children => _blink.BlinkDocument.children_Getter(this);
 
   @DomName('Document.firstElementChild')
   @DocsEditable()
-  Element get _firstElementChild => _blink.BlinkDocument.$firstElementChild_Getter(this);
+  Element get _firstElementChild => _blink.BlinkDocument.firstElementChild_Getter(this);
 
   @DomName('Document.lastElementChild')
   @DocsEditable()
-  Element get _lastElementChild => _blink.BlinkDocument.$lastElementChild_Getter(this);
+  Element get _lastElementChild => _blink.BlinkDocument.lastElementChild_Getter(this);
 
   /// Stream of `abort` events handled by this [Document].
   @DomName('Document.onabort')
@@ -8618,23 +8618,23 @@
    */
   @DomName('DocumentFragment.querySelector')
   @DocsEditable()
-  Element querySelector(String selectors) => _blink.BlinkDocumentFragment.$querySelector_Callback(this, selectors);
+  Element querySelector(String selectors) => _blink.BlinkDocumentFragment.querySelector_Callback_DOMString(this, selectors);
 
   @DomName('DocumentFragment.querySelectorAll')
   @DocsEditable()
-  List<Node> _querySelectorAll(String selectors) => _blink.BlinkDocumentFragment.$querySelectorAll_Callback(this, selectors);
+  List<Node> _querySelectorAll(String selectors) => _blink.BlinkDocumentFragment.querySelectorAll_Callback_DOMString(this, selectors);
 
   @DomName('DocumentFragment.childElementCount')
   @DocsEditable()
-  int get _childElementCount => _blink.BlinkDocumentFragment.$childElementCount_Getter(this);
+  int get _childElementCount => _blink.BlinkDocumentFragment.childElementCount_Getter(this);
 
   @DomName('DocumentFragment.firstElementChild')
   @DocsEditable()
-  Element get _firstElementChild => _blink.BlinkDocumentFragment.$firstElementChild_Getter(this);
+  Element get _firstElementChild => _blink.BlinkDocumentFragment.firstElementChild_Getter(this);
 
   @DomName('DocumentFragment.lastElementChild')
   @DocsEditable()
-  Element get _lastElementChild => _blink.BlinkDocumentFragment.$lastElementChild_Getter(this);
+  Element get _lastElementChild => _blink.BlinkDocumentFragment.lastElementChild_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8653,11 +8653,11 @@
   @DomName('DOMError.message')
   @DocsEditable()
   @Experimental() // untriaged
-  String get message => _blink.BlinkDOMError.$message_Getter(this);
+  String get message => _blink.BlinkDOMError.message_Getter(this);
 
   @DomName('DOMError.name')
   @DocsEditable()
-  String get name => _blink.BlinkDOMError.$name_Getter(this);
+  String get name => _blink.BlinkDOMError.name_Getter(this);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -8696,15 +8696,15 @@
 
   @DomName('DOMException.message')
   @DocsEditable()
-  String get message => _blink.BlinkDOMException.$message_Getter(this);
+  String get message => _blink.BlinkDOMException.message_Getter(this);
 
   @DomName('DOMException.name')
   @DocsEditable()
-  String get name => _blink.BlinkDOMException.$name_Getter(this);
+  String get name => _blink.BlinkDOMException.name_Getter(this);
 
   @DomName('DOMException.toString')
   @DocsEditable()
-  String toString() => _blink.BlinkDOMException.$toString_Callback(this);
+  String toString() => _blink.BlinkDOMException.toString_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8722,19 +8722,19 @@
 
   @DomName('DOMImplementation.createDocument')
   @DocsEditable()
-  XmlDocument createDocument(String namespaceURI, String qualifiedName, _DocumentType doctype) => _blink.BlinkDOMImplementation.$createDocument_Callback(this, namespaceURI, qualifiedName, doctype);
+  XmlDocument createDocument(String namespaceURI, String qualifiedName, _DocumentType doctype) => _blink.BlinkDOMImplementation.createDocument_Callback_DOMString_DOMString_DocumentType(this, namespaceURI, qualifiedName, doctype);
 
   @DomName('DOMImplementation.createDocumentType')
   @DocsEditable()
-  _DocumentType createDocumentType(String qualifiedName, String publicId, String systemId) => _blink.BlinkDOMImplementation.$createDocumentType_Callback(this, qualifiedName, publicId, systemId);
+  _DocumentType createDocumentType(String qualifiedName, String publicId, String systemId) => _blink.BlinkDOMImplementation.createDocumentType_Callback_DOMString_DOMString_DOMString(this, qualifiedName, publicId, systemId);
 
   @DomName('DOMImplementation.createHTMLDocument')
   @DocsEditable()
-  HtmlDocument createHtmlDocument(String title) => _blink.BlinkDOMImplementation.$createHTMLDocument_Callback(this, title);
+  HtmlDocument createHtmlDocument(String title) => _blink.BlinkDOMImplementation.createHTMLDocument_Callback_DOMString(this, title);
 
   @DomName('DOMImplementation.hasFeature')
   @DocsEditable()
-  bool hasFeature(String feature, String version) => _blink.BlinkDOMImplementation.$hasFeature_Callback(this, feature, version);
+  bool hasFeature(String feature, String version) => _blink.BlinkDOMImplementation.hasFeature_Callback_DOMString_DOMString(this, feature, version);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8753,12 +8753,12 @@
   @DomName('DOMParser.DOMParser')
   @DocsEditable()
   factory DomParser() {
-    return _blink.BlinkDOMParser.$_create_1constructorCallback();
+    return _blink.BlinkDOMParser.constructorCallback();
   }
 
   @DomName('DOMParser.parseFromString')
   @DocsEditable()
-  Document parseFromString(String str, String contentType) => _blink.BlinkDOMParser.$parseFromString_Callback(this, str, contentType);
+  Document parseFromString(String str, String contentType) => _blink.BlinkDOMParser.parseFromString_Callback_DOMString_DOMString(this, str, contentType);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8776,15 +8776,15 @@
 
   @DomName('DOMSettableTokenList.value')
   @DocsEditable()
-  String get value => _blink.BlinkDOMSettableTokenList.$value_Getter(this);
+  String get value => _blink.BlinkDOMSettableTokenList.value_Getter(this);
 
   @DomName('DOMSettableTokenList.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkDOMSettableTokenList.$value_Setter(this, value);
+  void set value(String value) => _blink.BlinkDOMSettableTokenList.value_Setter_DOMString(this, value);
 
   @DomName('DOMSettableTokenList.__getter__')
   @DocsEditable()
-  String __getter__(int index) => _blink.BlinkDOMSettableTokenList.$__getter___Callback(this, index);
+  String __getter__(int index) => _blink.BlinkDOMSettableTokenList.$__getter___Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8802,15 +8802,15 @@
 
   @DomName('DOMStringList.length')
   @DocsEditable()
-  int get length => _blink.BlinkDOMStringList.$length_Getter(this);
+  int get length => _blink.BlinkDOMStringList.length_Getter(this);
 
   String operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkDOMStringList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkDOMStringList.item_Callback_ul(this, index);
   }
 
-  String _nativeIndexedGetter(int index) => _blink.BlinkDOMStringList.$NativeIndexed_Getter(this, index);
+  String _nativeIndexedGetter(int index) => _blink.BlinkDOMStringList.item_Callback_ul(this, index);
 
   void operator[]=(int index, String value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -8852,11 +8852,11 @@
 
   @DomName('DOMStringList.contains')
   @DocsEditable()
-  bool contains(String string) => _blink.BlinkDOMStringList.$contains_Callback(this, string);
+  bool contains(String string) => _blink.BlinkDOMStringList.contains_Callback_DOMString(this, string);
 
   @DomName('DOMStringList.item')
   @DocsEditable()
-  String item(int index) => _blink.BlinkDOMStringList.$item_Callback(this, index);
+  String item(int index) => _blink.BlinkDOMStringList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8874,31 +8874,31 @@
 
   bool __delete__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkDOMStringMap.$___delete___1_Callback(this, index_OR_name);
+      return _blink.BlinkDOMStringMap.$__delete___Callback_ul(this, index_OR_name);
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkDOMStringMap.$___delete___2_Callback(this, index_OR_name);
+      return _blink.BlinkDOMStringMap.$__delete___Callback_DOMString(this, index_OR_name);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   String __getter__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkDOMStringMap.$___getter___1_Callback(this, index_OR_name);
+      return _blink.BlinkDOMStringMap.$__getter___Callback_ul(this, index_OR_name);
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkDOMStringMap.$___getter___2_Callback(this, index_OR_name);
+      return _blink.BlinkDOMStringMap.$__getter___Callback_DOMString(this, index_OR_name);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   void __setter__(index_OR_name, String value) {
     if ((value is String || value == null) && (index_OR_name is int || index_OR_name == null)) {
-      _blink.BlinkDOMStringMap.$___setter___1_Callback(this, index_OR_name, value);
+      _blink.BlinkDOMStringMap.$__setter___Callback_ul_DOMString(this, index_OR_name, value);
       return;
     }
     if ((value is String || value == null) && (index_OR_name is String || index_OR_name == null)) {
-      _blink.BlinkDOMStringMap.$___setter___2_Callback(this, index_OR_name, value);
+      _blink.BlinkDOMStringMap.$__setter___Callback_DOMString_DOMString(this, index_OR_name, value);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -8920,25 +8920,25 @@
 
   @DomName('DOMTokenList.length')
   @DocsEditable()
-  int get length => _blink.BlinkDOMTokenList.$length_Getter(this);
+  int get length => _blink.BlinkDOMTokenList.length_Getter(this);
 
   @DomName('DOMTokenList.contains')
   @DocsEditable()
-  bool contains(String token) => _blink.BlinkDOMTokenList.$contains_Callback(this, token);
+  bool contains(String token) => _blink.BlinkDOMTokenList.contains_Callback_DOMString(this, token);
 
   @DomName('DOMTokenList.item')
   @DocsEditable()
-  String item(int index) => _blink.BlinkDOMTokenList.$item_Callback(this, index);
+  String item(int index) => _blink.BlinkDOMTokenList.item_Callback_ul(this, index);
 
   @DomName('DOMTokenList.toString')
   @DocsEditable()
-  String toString() => _blink.BlinkDOMTokenList.$toString_Callback(this);
+  String toString() => _blink.BlinkDOMTokenList.toString_Callback(this);
 
   bool toggle(String token, [bool force]) {
     if (force != null) {
-      return _blink.BlinkDOMTokenList.$_toggle_1_Callback(this, token, force);
+      return _blink.BlinkDOMTokenList.toggle_Callback_DOMString_boolean(this, token, force);
     }
-    return _blink.BlinkDOMTokenList.$_toggle_2_Callback(this, token);
+    return _blink.BlinkDOMTokenList.toggle_Callback_DOMString(this, token);
   }
 
 }
@@ -10819,59 +10819,59 @@
 
   @DomName('Element.offsetHeight')
   @DocsEditable()
-  int get offsetHeight => _blink.BlinkElement.$offsetHeight_Getter(this).round();
+  int get offsetHeight => _blink.BlinkElement.offsetHeight_Getter(this).round();
 
   @DomName('Element.offsetLeft')
   @DocsEditable()
-  int get offsetLeft => _blink.BlinkElement.$offsetLeft_Getter(this).round();
+  int get offsetLeft => _blink.BlinkElement.offsetLeft_Getter(this).round();
 
   @DomName('Element.offsetTop')
   @DocsEditable()
-  int get offsetTop => _blink.BlinkElement.$offsetTop_Getter(this).round();
+  int get offsetTop => _blink.BlinkElement.offsetTop_Getter(this).round();
 
   @DomName('Element.offsetWidth')
   @DocsEditable()
-  int get offsetWidth => _blink.BlinkElement.$offsetWidth_Getter(this).round();
+  int get offsetWidth => _blink.BlinkElement.offsetWidth_Getter(this).round();
 
   @DomName('Element.clientHeight')
   @DocsEditable()
-  int get clientHeight => _blink.BlinkElement.$clientHeight_Getter(this).round();
+  int get clientHeight => _blink.BlinkElement.clientHeight_Getter(this).round();
 
   @DomName('Element.clientLeft')
   @DocsEditable()
-  int get clientLeft => _blink.BlinkElement.$clientLeft_Getter(this).round();
+  int get clientLeft => _blink.BlinkElement.clientLeft_Getter(this).round();
 
   @DomName('Element.clientTop')
   @DocsEditable()
-  int get clientTop => _blink.BlinkElement.$clientTop_Getter(this).round();
+  int get clientTop => _blink.BlinkElement.clientTop_Getter(this).round();
 
   @DomName('Element.clientWidth')
   @DocsEditable()
-  int get clientWidth => _blink.BlinkElement.$clientWidth_Getter(this).round();
+  int get clientWidth => _blink.BlinkElement.clientWidth_Getter(this).round();
 
   @DomName('Element.scrollHeight')
   @DocsEditable()
-  int get scrollHeight => _blink.BlinkElement.$scrollHeight_Getter(this).round();
+  int get scrollHeight => _blink.BlinkElement.scrollHeight_Getter(this).round();
 
   @DomName('Element.scrollLeft')
   @DocsEditable()
-  int get scrollLeft => _blink.BlinkElement.$scrollLeft_Getter(this).round();
+  int get scrollLeft => _blink.BlinkElement.scrollLeft_Getter(this).round();
 
   @DomName('Element.scrollLeft')
   @DocsEditable()
-  void set scrollLeft(int value) => _blink.BlinkElement.$scrollLeft_Setter(this, value.round());
+  void set scrollLeft(int value) => _blink.BlinkElement.scrollLeft_Setter_long(this, value.round());
 
   @DomName('Element.scrollTop')
   @DocsEditable()
-  int get scrollTop => _blink.BlinkElement.$scrollTop_Getter(this).round();
+  int get scrollTop => _blink.BlinkElement.scrollTop_Getter(this).round();
 
   @DomName('Element.scrollTop')
   @DocsEditable()
-  void set scrollTop(int value) => _blink.BlinkElement.$scrollTop_Setter(this, value.round());
+  void set scrollTop(int value) => _blink.BlinkElement.scrollTop_Setter_long(this, value.round());
 
   @DomName('Element.scrollWidth')
   @DocsEditable()
-  int get scrollWidth => _blink.BlinkElement.$scrollWidth_Getter(this).round();
+  int get scrollWidth => _blink.BlinkElement.scrollWidth_Getter(this).round();
 
   // To suppress missing implicit constructor warnings.
   factory Element._() { throw new UnsupportedError("Not supported"); }
@@ -11480,157 +11480,157 @@
 
   @DomName('Element.attributes')
   @DocsEditable()
-  _NamedNodeMap get _attributes => _blink.BlinkElement.$attributes_Getter(this);
+  _NamedNodeMap get _attributes => _blink.BlinkElement.attributes_Getter(this);
 
   @DomName('Element.className')
   @DocsEditable()
-  String get className => _blink.BlinkElement.$className_Getter(this);
+  String get className => _blink.BlinkElement.className_Getter(this);
 
   @DomName('Element.className')
   @DocsEditable()
-  void set className(String value) => _blink.BlinkElement.$className_Setter(this, value);
+  void set className(String value) => _blink.BlinkElement.className_Setter_DOMString(this, value);
 
   @DomName('Element.clientHeight')
   @DocsEditable()
-  int get _clientHeight => _blink.BlinkElement.$clientHeight_Getter(this);
+  int get _clientHeight => _blink.BlinkElement.clientHeight_Getter(this);
 
   @DomName('Element.clientLeft')
   @DocsEditable()
-  int get _clientLeft => _blink.BlinkElement.$clientLeft_Getter(this);
+  int get _clientLeft => _blink.BlinkElement.clientLeft_Getter(this);
 
   @DomName('Element.clientTop')
   @DocsEditable()
-  int get _clientTop => _blink.BlinkElement.$clientTop_Getter(this);
+  int get _clientTop => _blink.BlinkElement.clientTop_Getter(this);
 
   @DomName('Element.clientWidth')
   @DocsEditable()
-  int get _clientWidth => _blink.BlinkElement.$clientWidth_Getter(this);
+  int get _clientWidth => _blink.BlinkElement.clientWidth_Getter(this);
 
   @DomName('Element.id')
   @DocsEditable()
-  String get id => _blink.BlinkElement.$id_Getter(this);
+  String get id => _blink.BlinkElement.id_Getter(this);
 
   @DomName('Element.id')
   @DocsEditable()
-  void set id(String value) => _blink.BlinkElement.$id_Setter(this, value);
+  void set id(String value) => _blink.BlinkElement.id_Setter_DOMString(this, value);
 
   @DomName('Element.innerHTML')
   @DocsEditable()
-  String get _innerHtml => _blink.BlinkElement.$innerHTML_Getter(this);
+  String get _innerHtml => _blink.BlinkElement.innerHTML_Getter(this);
 
   @DomName('Element.innerHTML')
   @DocsEditable()
-  void set _innerHtml(String value) => _blink.BlinkElement.$innerHTML_Setter(this, value);
+  void set _innerHtml(String value) => _blink.BlinkElement.innerHTML_Setter_DOMString(this, value);
 
   @DomName('Element.localName')
   @DocsEditable()
   @Experimental() // untriaged
-  String get _localName => _blink.BlinkElement.$localName_Getter(this);
+  String get _localName => _blink.BlinkElement.localName_Getter(this);
 
   @DomName('Element.namespaceURI')
   @DocsEditable()
   @Experimental() // untriaged
-  String get _namespaceUri => _blink.BlinkElement.$namespaceURI_Getter(this);
+  String get _namespaceUri => _blink.BlinkElement.namespaceURI_Getter(this);
 
   @DomName('Element.offsetHeight')
   @DocsEditable()
-  int get _offsetHeight => _blink.BlinkElement.$offsetHeight_Getter(this);
+  int get _offsetHeight => _blink.BlinkElement.offsetHeight_Getter(this);
 
   @DomName('Element.offsetLeft')
   @DocsEditable()
-  int get _offsetLeft => _blink.BlinkElement.$offsetLeft_Getter(this);
+  int get _offsetLeft => _blink.BlinkElement.offsetLeft_Getter(this);
 
   @DomName('Element.offsetParent')
   @DocsEditable()
-  Element get offsetParent => _blink.BlinkElement.$offsetParent_Getter(this);
+  Element get offsetParent => _blink.BlinkElement.offsetParent_Getter(this);
 
   @DomName('Element.offsetTop')
   @DocsEditable()
-  int get _offsetTop => _blink.BlinkElement.$offsetTop_Getter(this);
+  int get _offsetTop => _blink.BlinkElement.offsetTop_Getter(this);
 
   @DomName('Element.offsetWidth')
   @DocsEditable()
-  int get _offsetWidth => _blink.BlinkElement.$offsetWidth_Getter(this);
+  int get _offsetWidth => _blink.BlinkElement.offsetWidth_Getter(this);
 
   @DomName('Element.outerHTML')
   @DocsEditable()
-  String get outerHtml => _blink.BlinkElement.$outerHTML_Getter(this);
+  String get outerHtml => _blink.BlinkElement.outerHTML_Getter(this);
 
   @DomName('Element.scrollHeight')
   @DocsEditable()
-  int get _scrollHeight => _blink.BlinkElement.$scrollHeight_Getter(this);
+  int get _scrollHeight => _blink.BlinkElement.scrollHeight_Getter(this);
 
   @DomName('Element.scrollLeft')
   @DocsEditable()
-  int get _scrollLeft => _blink.BlinkElement.$scrollLeft_Getter(this);
+  int get _scrollLeft => _blink.BlinkElement.scrollLeft_Getter(this);
 
   @DomName('Element.scrollLeft')
   @DocsEditable()
-  void set _scrollLeft(int value) => _blink.BlinkElement.$scrollLeft_Setter(this, value);
+  void set _scrollLeft(int value) => _blink.BlinkElement.scrollLeft_Setter_long(this, value);
 
   @DomName('Element.scrollTop')
   @DocsEditable()
-  int get _scrollTop => _blink.BlinkElement.$scrollTop_Getter(this);
+  int get _scrollTop => _blink.BlinkElement.scrollTop_Getter(this);
 
   @DomName('Element.scrollTop')
   @DocsEditable()
-  void set _scrollTop(int value) => _blink.BlinkElement.$scrollTop_Setter(this, value);
+  void set _scrollTop(int value) => _blink.BlinkElement.scrollTop_Setter_long(this, value);
 
   @DomName('Element.scrollWidth')
   @DocsEditable()
-  int get _scrollWidth => _blink.BlinkElement.$scrollWidth_Getter(this);
+  int get _scrollWidth => _blink.BlinkElement.scrollWidth_Getter(this);
 
   @DomName('Element.shadowRoot')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#api-shadow-aware-create-shadow-root
   @Experimental()
-  ShadowRoot get shadowRoot => _blink.BlinkElement.$shadowRoot_Getter(this);
+  ShadowRoot get shadowRoot => _blink.BlinkElement.shadowRoot_Getter(this);
 
   @DomName('Element.style')
   @DocsEditable()
-  CssStyleDeclaration get style => _blink.BlinkElement.$style_Getter(this);
+  CssStyleDeclaration get style => _blink.BlinkElement.style_Getter(this);
 
   @DomName('Element.tagName')
   @DocsEditable()
-  String get tagName => _blink.BlinkElement.$tagName_Getter(this);
+  String get tagName => _blink.BlinkElement.tagName_Getter(this);
 
   Animation animate(List<Map> keyframes, [timingInput]) {
     if ((timingInput is Map || timingInput == null) && (keyframes is List<Map> || keyframes == null)) {
-      return _blink.BlinkElement.$_animate_1_Callback(this, keyframes, timingInput);
+      return _blink.BlinkElement.animate_Callback_SEQ_Dictionary_SEQ_Dictionary(this, keyframes, timingInput);
     }
     if ((timingInput is num || timingInput == null) && (keyframes is List<Map> || keyframes == null)) {
-      return _blink.BlinkElement.$_animate_2_Callback(this, keyframes, timingInput);
+      return _blink.BlinkElement.animate_Callback_SEQ_Dictionary_SEQ_double(this, keyframes, timingInput);
     }
     if ((keyframes is List<Map> || keyframes == null) && timingInput == null) {
-      return _blink.BlinkElement.$_animate_3_Callback(this, keyframes);
+      return _blink.BlinkElement.animate_Callback_SEQ_Dictionary_SEQ(this, keyframes);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('Element.blur')
   @DocsEditable()
-  void blur() => _blink.BlinkElement.$blur_Callback(this);
+  void blur() => _blink.BlinkElement.blur_Callback(this);
 
   @DomName('Element.createShadowRoot')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME, '25')
   @Experimental()
   // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#api-shadow-aware-create-shadow-root
-  ShadowRoot createShadowRoot() => _blink.BlinkElement.$createShadowRoot_Callback(this);
+  ShadowRoot createShadowRoot() => _blink.BlinkElement.createShadowRoot_Callback(this);
 
   @DomName('Element.focus')
   @DocsEditable()
-  void focus() => _blink.BlinkElement.$focus_Callback(this);
+  void focus() => _blink.BlinkElement.focus_Callback(this);
 
   @DomName('Element.getAttribute')
   @DocsEditable()
   @Experimental() // untriaged
-  String getAttribute(String name) => _blink.BlinkElement.$getAttribute_Callback(this, name);
+  String getAttribute(String name) => _blink.BlinkElement.getAttribute_Callback_DOMString(this, name);
 
   @DomName('Element.getAttributeNS')
   @DocsEditable()
   @Experimental() // untriaged
-  String getAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.$getAttributeNS_Callback(this, namespaceURI, localName);
+  String getAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.getAttributeNS_Callback_DOMString_DOMString(this, namespaceURI, localName);
 
   /**
    * Returns the smallest bounding rectangle that encompasses this element's
@@ -11647,7 +11647,7 @@
    */
   @DomName('Element.getBoundingClientRect')
   @DocsEditable()
-  Rectangle getBoundingClientRect() => _blink.BlinkElement.$getBoundingClientRect_Callback(this);
+  Rectangle getBoundingClientRect() => _blink.BlinkElement.getBoundingClientRect_Callback(this);
 
   /**
    * Returns a list of bounding rectangles for each box associated with this
@@ -11664,7 +11664,7 @@
    */
   @DomName('Element.getClientRects')
   @DocsEditable()
-  List<Rectangle> getClientRects() => _blink.BlinkElement.$getClientRects_Callback(this);
+  List<Rectangle> getClientRects() => _blink.BlinkElement.getClientRects_Callback(this);
 
   /**
    * Returns a list of shadow DOM insertion points to which this element is
@@ -11679,7 +11679,7 @@
   @DomName('Element.getDestinationInsertionPoints')
   @DocsEditable()
   @Experimental() // untriaged
-  List<Node> getDestinationInsertionPoints() => _blink.BlinkElement.$getDestinationInsertionPoints_Callback(this);
+  List<Node> getDestinationInsertionPoints() => _blink.BlinkElement.getDestinationInsertionPoints_Callback(this);
 
   /**
    * Returns a list of nodes with the given class name inside this element.
@@ -11694,39 +11694,39 @@
    */
   @DomName('Element.getElementsByClassName')
   @DocsEditable()
-  List<Node> getElementsByClassName(String classNames) => _blink.BlinkElement.$getElementsByClassName_Callback(this, classNames);
+  List<Node> getElementsByClassName(String classNames) => _blink.BlinkElement.getElementsByClassName_Callback_DOMString(this, classNames);
 
   @DomName('Element.getElementsByTagName')
   @DocsEditable()
-  List<Node> _getElementsByTagName(String name) => _blink.BlinkElement.$getElementsByTagName_Callback(this, name);
+  List<Node> _getElementsByTagName(String name) => _blink.BlinkElement.getElementsByTagName_Callback_DOMString(this, name);
 
   @DomName('Element.hasAttribute')
   @DocsEditable()
-  bool _hasAttribute(String name) => _blink.BlinkElement.$hasAttribute_Callback(this, name);
+  bool _hasAttribute(String name) => _blink.BlinkElement.hasAttribute_Callback_DOMString(this, name);
 
   @DomName('Element.hasAttributeNS')
   @DocsEditable()
-  bool _hasAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.$hasAttributeNS_Callback(this, namespaceURI, localName);
+  bool _hasAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.hasAttributeNS_Callback_DOMString_DOMString(this, namespaceURI, localName);
 
   @DomName('Element.insertAdjacentElement')
   @DocsEditable()
   @Experimental() // untriaged
-  Element insertAdjacentElement(String where, Element element) => _blink.BlinkElement.$insertAdjacentElement_Callback(this, where, element);
+  Element insertAdjacentElement(String where, Element element) => _blink.BlinkElement.insertAdjacentElement_Callback_DOMString_Element(this, where, element);
 
   @DomName('Element.insertAdjacentHTML')
   @DocsEditable()
   @Experimental() // untriaged
-  void insertAdjacentHtml(String where, String html) => _blink.BlinkElement.$insertAdjacentHTML_Callback(this, where, html);
+  void insertAdjacentHtml(String where, String html) => _blink.BlinkElement.insertAdjacentHTML_Callback_DOMString_DOMString(this, where, html);
 
   @DomName('Element.insertAdjacentText')
   @DocsEditable()
   @Experimental() // untriaged
-  void insertAdjacentText(String where, String text) => _blink.BlinkElement.$insertAdjacentText_Callback(this, where, text);
+  void insertAdjacentText(String where, String text) => _blink.BlinkElement.insertAdjacentText_Callback_DOMString_DOMString(this, where, text);
 
   @DomName('Element.matches')
   @DocsEditable()
   @Experimental() // untriaged
-  bool matches(String selectors) => _blink.BlinkElement.$matches_Callback(this, selectors);
+  bool matches(String selectors) => _blink.BlinkElement.matches_Callback_DOMString(this, selectors);
 
   /**
    * Finds the first descendant element of this element that matches the
@@ -11746,19 +11746,19 @@
    */
   @DomName('Element.querySelector')
   @DocsEditable()
-  Element querySelector(String selectors) => _blink.BlinkElement.$querySelector_Callback(this, selectors);
+  Element querySelector(String selectors) => _blink.BlinkElement.querySelector_Callback_DOMString(this, selectors);
 
   @DomName('Element.querySelectorAll')
   @DocsEditable()
-  List<Node> _querySelectorAll(String selectors) => _blink.BlinkElement.$querySelectorAll_Callback(this, selectors);
+  List<Node> _querySelectorAll(String selectors) => _blink.BlinkElement.querySelectorAll_Callback_DOMString(this, selectors);
 
   @DomName('Element.removeAttribute')
   @DocsEditable()
-  void _removeAttribute(String name) => _blink.BlinkElement.$removeAttribute_Callback(this, name);
+  void _removeAttribute(String name) => _blink.BlinkElement.removeAttribute_Callback_DOMString(this, name);
 
   @DomName('Element.removeAttributeNS')
   @DocsEditable()
-  void _removeAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.$removeAttributeNS_Callback(this, namespaceURI, localName);
+  void _removeAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.removeAttributeNS_Callback_DOMString_DOMString(this, namespaceURI, localName);
 
   /**
    * Scrolls the element by a number of lines.
@@ -11770,7 +11770,7 @@
    */
   @DomName('Element.scrollByLines')
   @DocsEditable()
-  void scrollByLines(int lines) => _blink.BlinkElement.$scrollByLines_Callback(this, lines);
+  void scrollByLines(int lines) => _blink.BlinkElement.scrollByLines_Callback_long(this, lines);
 
   /**
    * Scrolls the element by a number of pages.
@@ -11782,33 +11782,33 @@
    */
   @DomName('Element.scrollByPages')
   @DocsEditable()
-  void scrollByPages(int pages) => _blink.BlinkElement.$scrollByPages_Callback(this, pages);
+  void scrollByPages(int pages) => _blink.BlinkElement.scrollByPages_Callback_long(this, pages);
 
   void _scrollIntoView([bool alignWithTop]) {
     if (alignWithTop != null) {
-      _blink.BlinkElement.$_scrollIntoView_1_Callback(this, alignWithTop);
+      _blink.BlinkElement.scrollIntoView_Callback_boolean(this, alignWithTop);
       return;
     }
-    _blink.BlinkElement.$_scrollIntoView_2_Callback(this);
+    _blink.BlinkElement.scrollIntoView_Callback(this);
     return;
   }
 
   void _scrollIntoViewIfNeeded([bool centerIfNeeded]) {
     if (centerIfNeeded != null) {
-      _blink.BlinkElement.$_scrollIntoViewIfNeeded_1_Callback(this, centerIfNeeded);
+      _blink.BlinkElement.scrollIntoViewIfNeeded_Callback_boolean(this, centerIfNeeded);
       return;
     }
-    _blink.BlinkElement.$_scrollIntoViewIfNeeded_2_Callback(this);
+    _blink.BlinkElement.scrollIntoViewIfNeeded_Callback(this);
     return;
   }
 
   @DomName('Element.setAttribute')
   @DocsEditable()
-  void setAttribute(String name, String value) => _blink.BlinkElement.$setAttribute_Callback(this, name, value);
+  void setAttribute(String name, String value) => _blink.BlinkElement.setAttribute_Callback_DOMString_DOMString(this, name, value);
 
   @DomName('Element.setAttributeNS')
   @DocsEditable()
-  void setAttributeNS(String namespaceURI, String qualifiedName, String value) => _blink.BlinkElement.$setAttributeNS_Callback(this, namespaceURI, qualifiedName, value);
+  void setAttributeNS(String namespaceURI, String qualifiedName, String value) => _blink.BlinkElement.setAttributeNS_Callback_DOMString_DOMString_DOMString(this, namespaceURI, qualifiedName, value);
 
   /**
    * Displays this element fullscreen.
@@ -11827,7 +11827,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-element-requestfullscreen
-  void requestFullscreen() => _blink.BlinkElement.$webkitRequestFullscreen_Callback(this);
+  void requestFullscreen() => _blink.BlinkElement.webkitRequestFullscreen_Callback(this);
 
   /**
    * Locks the mouse pointer to this element.
@@ -11847,35 +11847,35 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#widl-Element-requestPointerLock-void
-  void requestPointerLock() => _blink.BlinkElement.$webkitRequestPointerLock_Callback(this);
+  void requestPointerLock() => _blink.BlinkElement.webkitRequestPointerLock_Callback(this);
 
   @DomName('Element.nextElementSibling')
   @DocsEditable()
-  Element get nextElementSibling => _blink.BlinkElement.$nextElementSibling_Getter(this);
+  Element get nextElementSibling => _blink.BlinkElement.nextElementSibling_Getter(this);
 
   @DomName('Element.previousElementSibling')
   @DocsEditable()
-  Element get previousElementSibling => _blink.BlinkElement.$previousElementSibling_Getter(this);
+  Element get previousElementSibling => _blink.BlinkElement.previousElementSibling_Getter(this);
 
   @DomName('Element.remove')
   @DocsEditable()
-  void remove() => _blink.BlinkElement.$remove_Callback(this);
+  void remove() => _blink.BlinkElement.remove_Callback(this);
 
   @DomName('Element.childElementCount')
   @DocsEditable()
-  int get _childElementCount => _blink.BlinkElement.$childElementCount_Getter(this);
+  int get _childElementCount => _blink.BlinkElement.childElementCount_Getter(this);
 
   @DomName('Element.children')
   @DocsEditable()
-  List<Node> get _children => _blink.BlinkElement.$children_Getter(this);
+  List<Node> get _children => _blink.BlinkElement.children_Getter(this);
 
   @DomName('Element.firstElementChild')
   @DocsEditable()
-  Element get _firstElementChild => _blink.BlinkElement.$firstElementChild_Getter(this);
+  Element get _firstElementChild => _blink.BlinkElement.firstElementChild_Getter(this);
 
   @DomName('Element.lastElementChild')
   @DocsEditable()
-  Element get _lastElementChild => _blink.BlinkElement.$lastElementChild_Getter(this);
+  Element get _lastElementChild => _blink.BlinkElement.lastElementChild_Getter(this);
 
   /// Stream of `abort` events handled by this [Element].
   @DomName('Element.onabort')
@@ -12311,51 +12311,51 @@
 
   @DomName('HTMLEmbedElement.height')
   @DocsEditable()
-  String get height => _blink.BlinkHTMLEmbedElement.$height_Getter(this);
+  String get height => _blink.BlinkHTMLEmbedElement.height_Getter(this);
 
   @DomName('HTMLEmbedElement.height')
   @DocsEditable()
-  void set height(String value) => _blink.BlinkHTMLEmbedElement.$height_Setter(this, value);
+  void set height(String value) => _blink.BlinkHTMLEmbedElement.height_Setter_DOMString(this, value);
 
   @DomName('HTMLEmbedElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLEmbedElement.$name_Getter(this);
+  String get name => _blink.BlinkHTMLEmbedElement.name_Getter(this);
 
   @DomName('HTMLEmbedElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLEmbedElement.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkHTMLEmbedElement.name_Setter_DOMString(this, value);
 
   @DomName('HTMLEmbedElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLEmbedElement.$src_Getter(this);
+  String get src => _blink.BlinkHTMLEmbedElement.src_Getter(this);
 
   @DomName('HTMLEmbedElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLEmbedElement.$src_Setter(this, value);
+  void set src(String value) => _blink.BlinkHTMLEmbedElement.src_Setter_DOMString(this, value);
 
   @DomName('HTMLEmbedElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLEmbedElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLEmbedElement.type_Getter(this);
 
   @DomName('HTMLEmbedElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLEmbedElement.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkHTMLEmbedElement.type_Setter_DOMString(this, value);
 
   @DomName('HTMLEmbedElement.width')
   @DocsEditable()
-  String get width => _blink.BlinkHTMLEmbedElement.$width_Getter(this);
+  String get width => _blink.BlinkHTMLEmbedElement.width_Getter(this);
 
   @DomName('HTMLEmbedElement.width')
   @DocsEditable()
-  void set width(String value) => _blink.BlinkHTMLEmbedElement.$width_Setter(this, value);
+  void set width(String value) => _blink.BlinkHTMLEmbedElement.width_Setter_DOMString(this, value);
 
   @DomName('HTMLEmbedElement.__getter__')
   @DocsEditable()
-  bool __getter__(index_OR_name) => _blink.BlinkHTMLEmbedElement.$__getter___Callback(this, index_OR_name);
+  bool __getter__(index_OR_name) => _blink.BlinkHTMLEmbedElement.$__getter___Callback_ul(this, index_OR_name);
 
   @DomName('HTMLEmbedElement.__setter__')
   @DocsEditable()
-  void __setter__(index_OR_name, Node value) => _blink.BlinkHTMLEmbedElement.$__setter___Callback(this, index_OR_name, value);
+  void __setter__(index_OR_name, Node value) => _blink.BlinkHTMLEmbedElement.$__setter___Callback_ul_Node(this, index_OR_name, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12386,30 +12386,30 @@
 
   @DomName('Entry.filesystem')
   @DocsEditable()
-  FileSystem get filesystem => _blink.BlinkEntry.$filesystem_Getter(this);
+  FileSystem get filesystem => _blink.BlinkEntry.filesystem_Getter(this);
 
   @DomName('Entry.fullPath')
   @DocsEditable()
-  String get fullPath => _blink.BlinkEntry.$fullPath_Getter(this);
+  String get fullPath => _blink.BlinkEntry.fullPath_Getter(this);
 
   @DomName('Entry.isDirectory')
   @DocsEditable()
-  bool get isDirectory => _blink.BlinkEntry.$isDirectory_Getter(this);
+  bool get isDirectory => _blink.BlinkEntry.isDirectory_Getter(this);
 
   @DomName('Entry.isFile')
   @DocsEditable()
-  bool get isFile => _blink.BlinkEntry.$isFile_Getter(this);
+  bool get isFile => _blink.BlinkEntry.isFile_Getter(this);
 
   @DomName('Entry.name')
   @DocsEditable()
-  String get name => _blink.BlinkEntry.$name_Getter(this);
+  String get name => _blink.BlinkEntry.name_Getter(this);
 
   void _copyTo(DirectoryEntry parent, {String name, _EntryCallback successCallback, _ErrorCallback errorCallback}) {
     if (name != null) {
-      _blink.BlinkEntry.$_copyTo_1_Callback(this, parent, name, successCallback, errorCallback);
+      _blink.BlinkEntry.copyTo_Callback_DirectoryEntry_DOMString_EntryCallback_ErrorCallback(this, parent, name, successCallback, errorCallback);
       return;
     }
-    _blink.BlinkEntry.$_copyTo_2_Callback(this, parent);
+    _blink.BlinkEntry.copyTo_Callback_DirectoryEntry(this, parent);
     return;
   }
 
@@ -12423,7 +12423,7 @@
 
   @DomName('Entry.getMetadata')
   @DocsEditable()
-  void _getMetadata(MetadataCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkEntry.$getMetadata_Callback(this, successCallback, errorCallback);
+  void _getMetadata(MetadataCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkEntry.getMetadata_Callback_MetadataCallback_ErrorCallback(this, successCallback, errorCallback);
 
   Future<Metadata> getMetadata() {
     var completer = new Completer<Metadata>();
@@ -12435,7 +12435,7 @@
 
   @DomName('Entry.getParent')
   @DocsEditable()
-  void _getParent([_EntryCallback successCallback, _ErrorCallback errorCallback]) => _blink.BlinkEntry.$getParent_Callback(this, successCallback, errorCallback);
+  void _getParent([_EntryCallback successCallback, _ErrorCallback errorCallback]) => _blink.BlinkEntry.getParent_Callback_EntryCallback_ErrorCallback(this, successCallback, errorCallback);
 
   Future<Entry> getParent() {
     var completer = new Completer<Entry>();
@@ -12447,10 +12447,10 @@
 
   void _moveTo(DirectoryEntry parent, {String name, _EntryCallback successCallback, _ErrorCallback errorCallback}) {
     if (name != null) {
-      _blink.BlinkEntry.$_moveTo_1_Callback(this, parent, name, successCallback, errorCallback);
+      _blink.BlinkEntry.moveTo_Callback_DirectoryEntry_DOMString_EntryCallback_ErrorCallback(this, parent, name, successCallback, errorCallback);
       return;
     }
-    _blink.BlinkEntry.$_moveTo_2_Callback(this, parent);
+    _blink.BlinkEntry.moveTo_Callback_DirectoryEntry(this, parent);
     return;
   }
 
@@ -12464,7 +12464,7 @@
 
   @DomName('Entry.remove')
   @DocsEditable()
-  void _remove(VoidCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkEntry.$remove_Callback(this, successCallback, errorCallback);
+  void _remove(VoidCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkEntry.remove_Callback_VoidCallback_ErrorCallback(this, successCallback, errorCallback);
 
   Future remove() {
     var completer = new Completer();
@@ -12476,7 +12476,7 @@
 
   @DomName('Entry.toURL')
   @DocsEditable()
-  String toUrl() => _blink.BlinkEntry.$toURL_Callback(this);
+  String toUrl() => _blink.BlinkEntry.toURL_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12518,24 +12518,24 @@
   @DomName('ErrorEvent.colno')
   @DocsEditable()
   @Experimental() // untriaged
-  int get colno => _blink.BlinkErrorEvent.$colno_Getter(this);
+  int get colno => _blink.BlinkErrorEvent.colno_Getter(this);
 
   @DomName('ErrorEvent.error')
   @DocsEditable()
   @Experimental() // untriaged
-  Object get error => _blink.BlinkErrorEvent.$error_Getter(this);
+  Object get error => _blink.BlinkErrorEvent.error_Getter(this);
 
   @DomName('ErrorEvent.filename')
   @DocsEditable()
-  String get filename => _blink.BlinkErrorEvent.$filename_Getter(this);
+  String get filename => _blink.BlinkErrorEvent.filename_Getter(this);
 
   @DomName('ErrorEvent.lineno')
   @DocsEditable()
-  int get lineno => _blink.BlinkErrorEvent.$lineno_Getter(this);
+  int get lineno => _blink.BlinkErrorEvent.lineno_Getter(this);
 
   @DomName('ErrorEvent.message')
   @DocsEditable()
-  String get message => _blink.BlinkErrorEvent.$message_Getter(this);
+  String get message => _blink.BlinkErrorEvent.message_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12638,11 +12638,11 @@
 
   @DomName('Event.bubbles')
   @DocsEditable()
-  bool get bubbles => _blink.BlinkEvent.$bubbles_Getter(this);
+  bool get bubbles => _blink.BlinkEvent.bubbles_Getter(this);
 
   @DomName('Event.cancelable')
   @DocsEditable()
-  bool get cancelable => _blink.BlinkEvent.$cancelable_Getter(this);
+  bool get cancelable => _blink.BlinkEvent.cancelable_Getter(this);
 
   /**
    * Access to the system's clipboard data during copy, cut, and paste events.
@@ -12660,19 +12660,19 @@
   @Experimental()
   // Part of copy/paste
   @Experimental() // nonstandard
-  DataTransfer get clipboardData => _blink.BlinkEvent.$clipboardData_Getter(this);
+  DataTransfer get clipboardData => _blink.BlinkEvent.clipboardData_Getter(this);
 
   @DomName('Event.currentTarget')
   @DocsEditable()
-  EventTarget get currentTarget => _blink.BlinkEvent.$currentTarget_Getter(this);
+  EventTarget get currentTarget => _blink.BlinkEvent.currentTarget_Getter(this);
 
   @DomName('Event.defaultPrevented')
   @DocsEditable()
-  bool get defaultPrevented => _blink.BlinkEvent.$defaultPrevented_Getter(this);
+  bool get defaultPrevented => _blink.BlinkEvent.defaultPrevented_Getter(this);
 
   @DomName('Event.eventPhase')
   @DocsEditable()
-  int get eventPhase => _blink.BlinkEvent.$eventPhase_Getter(this);
+  int get eventPhase => _blink.BlinkEvent.eventPhase_Getter(this);
 
   /**
    * This event's path, taking into account shadow DOM.
@@ -12687,35 +12687,35 @@
   @DocsEditable()
   // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#extensions-to-event
   @Experimental()
-  List<Node> get path => _blink.BlinkEvent.$path_Getter(this);
+  List<Node> get path => _blink.BlinkEvent.path_Getter(this);
 
   @DomName('Event.target')
   @DocsEditable()
-  EventTarget get target => _blink.BlinkEvent.$target_Getter(this);
+  EventTarget get target => _blink.BlinkEvent.target_Getter(this);
 
   @DomName('Event.timeStamp')
   @DocsEditable()
-  int get timeStamp => _blink.BlinkEvent.$timeStamp_Getter(this);
+  int get timeStamp => _blink.BlinkEvent.timeStamp_Getter(this);
 
   @DomName('Event.type')
   @DocsEditable()
-  String get type => _blink.BlinkEvent.$type_Getter(this);
+  String get type => _blink.BlinkEvent.type_Getter(this);
 
   @DomName('Event.initEvent')
   @DocsEditable()
-  void _initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) => _blink.BlinkEvent.$initEvent_Callback(this, eventTypeArg, canBubbleArg, cancelableArg);
+  void _initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) => _blink.BlinkEvent.initEvent_Callback_DOMString_boolean_boolean(this, eventTypeArg, canBubbleArg, cancelableArg);
 
   @DomName('Event.preventDefault')
   @DocsEditable()
-  void preventDefault() => _blink.BlinkEvent.$preventDefault_Callback(this);
+  void preventDefault() => _blink.BlinkEvent.preventDefault_Callback(this);
 
   @DomName('Event.stopImmediatePropagation')
   @DocsEditable()
-  void stopImmediatePropagation() => _blink.BlinkEvent.$stopImmediatePropagation_Callback(this);
+  void stopImmediatePropagation() => _blink.BlinkEvent.stopImmediatePropagation_Callback(this);
 
   @DomName('Event.stopPropagation')
   @DocsEditable()
-  void stopPropagation() => _blink.BlinkEvent.$stopPropagation_Callback(this);
+  void stopPropagation() => _blink.BlinkEvent.stopPropagation_Callback(this);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -12769,7 +12769,7 @@
   @DomName('EventSource.EventSource')
   @DocsEditable()
   static EventSource _factoryEventSource(String url, [Map eventSourceInit]) {
-    return _blink.BlinkEventSource.$_create_1constructorCallback(url, eventSourceInit);
+    return _blink.BlinkEventSource.constructorCallback_DOMString_Dictionary(url, eventSourceInit);
   }
 
   @DomName('EventSource.CLOSED')
@@ -12786,19 +12786,19 @@
 
   @DomName('EventSource.readyState')
   @DocsEditable()
-  int get readyState => _blink.BlinkEventSource.$readyState_Getter(this);
+  int get readyState => _blink.BlinkEventSource.readyState_Getter(this);
 
   @DomName('EventSource.url')
   @DocsEditable()
-  String get url => _blink.BlinkEventSource.$url_Getter(this);
+  String get url => _blink.BlinkEventSource.url_Getter(this);
 
   @DomName('EventSource.withCredentials')
   @DocsEditable()
-  bool get withCredentials => _blink.BlinkEventSource.$withCredentials_Getter(this);
+  bool get withCredentials => _blink.BlinkEventSource.withCredentials_Getter(this);
 
   @DomName('EventSource.close')
   @DocsEditable()
-  void close() => _blink.BlinkEventSource.$close_Callback(this);
+  void close() => _blink.BlinkEventSource.close_Callback(this);
 
   /// Stream of `error` events handled by this [EventSource].
   @DomName('EventSource.onerror')
@@ -12923,15 +12923,15 @@
 
   @DomName('EventTarget.addEventListener')
   @DocsEditable()
-  void addEventListener(String type, EventListener listener, [bool useCapture]) => _blink.BlinkEventTarget.$addEventListener_Callback(this, type, listener, useCapture);
+  void addEventListener(String type, EventListener listener, [bool useCapture]) => _blink.BlinkEventTarget.addEventListener_Callback_DOMString_EventListener_boolean(this, type, listener, useCapture);
 
   @DomName('EventTarget.dispatchEvent')
   @DocsEditable()
-  bool dispatchEvent(Event event) => _blink.BlinkEventTarget.$dispatchEvent_Callback(this, event);
+  bool dispatchEvent(Event event) => _blink.BlinkEventTarget.dispatchEvent_Callback_Event(this, event);
 
   @DomName('EventTarget.removeEventListener')
   @DocsEditable()
-  void removeEventListener(String type, EventListener listener, [bool useCapture]) => _blink.BlinkEventTarget.$removeEventListener_Callback(this, type, listener, useCapture);
+  void removeEventListener(String type, EventListener listener, [bool useCapture]) => _blink.BlinkEventTarget.removeEventListener_Callback_DOMString_EventListener_boolean(this, type, listener, useCapture);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12960,51 +12960,51 @@
 
   @DomName('HTMLFieldSetElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLFieldSetElement.$disabled_Getter(this);
+  bool get disabled => _blink.BlinkHTMLFieldSetElement.disabled_Getter(this);
 
   @DomName('HTMLFieldSetElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLFieldSetElement.$disabled_Setter(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLFieldSetElement.disabled_Setter_boolean(this, value);
 
   @DomName('HTMLFieldSetElement.elements')
   @DocsEditable()
-  List<Node> get elements => _blink.BlinkHTMLFieldSetElement.$elements_Getter(this);
+  List<Node> get elements => _blink.BlinkHTMLFieldSetElement.elements_Getter(this);
 
   @DomName('HTMLFieldSetElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLFieldSetElement.$form_Getter(this);
+  FormElement get form => _blink.BlinkHTMLFieldSetElement.form_Getter(this);
 
   @DomName('HTMLFieldSetElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLFieldSetElement.$name_Getter(this);
+  String get name => _blink.BlinkHTMLFieldSetElement.name_Getter(this);
 
   @DomName('HTMLFieldSetElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLFieldSetElement.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkHTMLFieldSetElement.name_Setter_DOMString(this, value);
 
   @DomName('HTMLFieldSetElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLFieldSetElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLFieldSetElement.type_Getter(this);
 
   @DomName('HTMLFieldSetElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLFieldSetElement.$validationMessage_Getter(this);
+  String get validationMessage => _blink.BlinkHTMLFieldSetElement.validationMessage_Getter(this);
 
   @DomName('HTMLFieldSetElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLFieldSetElement.$validity_Getter(this);
+  ValidityState get validity => _blink.BlinkHTMLFieldSetElement.validity_Getter(this);
 
   @DomName('HTMLFieldSetElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLFieldSetElement.$willValidate_Getter(this);
+  bool get willValidate => _blink.BlinkHTMLFieldSetElement.willValidate_Getter(this);
 
   @DomName('HTMLFieldSetElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLFieldSetElement.$checkValidity_Callback(this);
+  bool checkValidity() => _blink.BlinkHTMLFieldSetElement.checkValidity_Callback(this);
 
   @DomName('HTMLFieldSetElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLFieldSetElement.$setCustomValidity_Callback(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLFieldSetElement.setCustomValidity_Callback_DOMString(this, error);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13023,15 +13023,15 @@
   @DomName('File.lastModified')
   @DocsEditable()
   @Experimental() // untriaged
-  int get lastModified => _blink.BlinkFile.$lastModified_Getter(this);
+  int get lastModified => _blink.BlinkFile.lastModified_Getter(this);
 
   @DomName('File.lastModifiedDate')
   @DocsEditable()
-  DateTime get lastModifiedDate => _blink.BlinkFile.$lastModifiedDate_Getter(this);
+  DateTime get lastModifiedDate => _blink.BlinkFile.lastModifiedDate_Getter(this);
 
   @DomName('File.name')
   @DocsEditable()
-  String get name => _blink.BlinkFile.$name_Getter(this);
+  String get name => _blink.BlinkFile.name_Getter(this);
 
   @DomName('File.webkitRelativePath')
   @DocsEditable()
@@ -13039,7 +13039,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://plus.sandbox.google.com/+AddyOsmani/posts/Dk5UhZ6zfF3
-  String get relativePath => _blink.BlinkFile.$webkitRelativePath_Getter(this);
+  String get relativePath => _blink.BlinkFile.webkitRelativePath_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13070,7 +13070,7 @@
 
   @DomName('FileEntry.createWriter')
   @DocsEditable()
-  void _createWriter(_FileWriterCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkFileEntry.$createWriter_Callback(this, successCallback, errorCallback);
+  void _createWriter(_FileWriterCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkFileEntry.createWriter_Callback_FileWriterCallback_ErrorCallback(this, successCallback, errorCallback);
 
   Future<FileWriter> createWriter() {
     var completer = new Completer<FileWriter>();
@@ -13082,7 +13082,7 @@
 
   @DomName('FileEntry.file')
   @DocsEditable()
-  void _file(_FileCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkFileEntry.$file_Callback(this, successCallback, errorCallback);
+  void _file(_FileCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkFileEntry.file_Callback_FileCallback_ErrorCallback(this, successCallback, errorCallback);
 
   Future<File> file() {
     var completer = new Completer<File>();
@@ -13158,7 +13158,7 @@
 
   @DomName('FileError.code')
   @DocsEditable()
-  int get code => _blink.BlinkFileError.$code_Getter(this);
+  int get code => _blink.BlinkFileError.code_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13176,15 +13176,15 @@
 
   @DomName('FileList.length')
   @DocsEditable()
-  int get length => _blink.BlinkFileList.$length_Getter(this);
+  int get length => _blink.BlinkFileList.length_Getter(this);
 
   File operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkFileList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkFileList.item_Callback_ul(this, index);
   }
 
-  File _nativeIndexedGetter(int index) => _blink.BlinkFileList.$NativeIndexed_Getter(this, index);
+  File _nativeIndexedGetter(int index) => _blink.BlinkFileList.item_Callback_ul(this, index);
 
   void operator[]=(int index, File value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -13226,7 +13226,7 @@
 
   @DomName('FileList.item')
   @DocsEditable()
-  File item(int index) => _blink.BlinkFileList.$item_Callback(this, index);
+  File item(int index) => _blink.BlinkFileList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
@@ -13241,7 +13241,7 @@
   @DomName('FileReader.result')
   @DocsEditable()
   Object get result {
-    var res = _blink.BlinkFileReader.$result_Getter(this);
+    var res = _blink.BlinkFileReader.result_Getter(this);
     if (res is ByteBuffer) {
       return new Uint8List.view(res);
     }
@@ -13314,7 +13314,7 @@
   @DomName('FileReader.FileReader')
   @DocsEditable()
   factory FileReader() {
-    return _blink.BlinkFileReader.$_create_1constructorCallback();
+    return _blink.BlinkFileReader.constructorCallback();
   }
 
   @DomName('FileReader.DONE')
@@ -13331,34 +13331,34 @@
 
   @DomName('FileReader.error')
   @DocsEditable()
-  FileError get error => _blink.BlinkFileReader.$error_Getter(this);
+  FileError get error => _blink.BlinkFileReader.error_Getter(this);
 
   @DomName('FileReader.readyState')
   @DocsEditable()
-  int get readyState => _blink.BlinkFileReader.$readyState_Getter(this);
+  int get readyState => _blink.BlinkFileReader.readyState_Getter(this);
 
   @DomName('FileReader.result')
   @DocsEditable()
-  Object get _result => _blink.BlinkFileReader.$result_Getter(this);
+  Object get _result => _blink.BlinkFileReader.result_Getter(this);
 
   @DomName('FileReader.abort')
   @DocsEditable()
-  void abort() => _blink.BlinkFileReader.$abort_Callback(this);
+  void abort() => _blink.BlinkFileReader.abort_Callback(this);
 
   @DomName('FileReader.readAsArrayBuffer')
   @DocsEditable()
-  void readAsArrayBuffer(Blob blob) => _blink.BlinkFileReader.$readAsArrayBuffer_Callback(this, blob);
+  void readAsArrayBuffer(Blob blob) => _blink.BlinkFileReader.readAsArrayBuffer_Callback_Blob(this, blob);
 
   @DomName('FileReader.readAsDataURL')
   @DocsEditable()
-  void readAsDataUrl(Blob blob) => _blink.BlinkFileReader.$readAsDataURL_Callback(this, blob);
+  void readAsDataUrl(Blob blob) => _blink.BlinkFileReader.readAsDataURL_Callback_Blob(this, blob);
 
   void readAsText(Blob blob, [String encoding]) {
     if (encoding != null) {
-      _blink.BlinkFileReader.$_readAsText_1_Callback(this, blob, encoding);
+      _blink.BlinkFileReader.readAsText_Callback_Blob_DOMString(this, blob, encoding);
       return;
     }
-    _blink.BlinkFileReader.$_readAsText_2_Callback(this, blob);
+    _blink.BlinkFileReader.readAsText_Callback_Blob(this, blob);
     return;
   }
 
@@ -13410,7 +13410,7 @@
   @DomName('Stream.type')
   @DocsEditable()
   @Experimental() // untriaged
-  String get type => _blink.BlinkStream.$type_Getter(this);
+  String get type => _blink.BlinkStream.type_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13434,11 +13434,11 @@
 
   @DomName('DOMFileSystem.name')
   @DocsEditable()
-  String get name => _blink.BlinkDOMFileSystem.$name_Getter(this);
+  String get name => _blink.BlinkDOMFileSystem.name_Getter(this);
 
   @DomName('DOMFileSystem.root')
   @DocsEditable()
-  DirectoryEntry get root => _blink.BlinkDOMFileSystem.$root_Getter(this);
+  DirectoryEntry get root => _blink.BlinkDOMFileSystem.root_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13541,35 +13541,35 @@
 
   @DomName('FileWriter.error')
   @DocsEditable()
-  FileError get error => _blink.BlinkFileWriter.$error_Getter(this);
+  FileError get error => _blink.BlinkFileWriter.error_Getter(this);
 
   @DomName('FileWriter.length')
   @DocsEditable()
-  int get length => _blink.BlinkFileWriter.$length_Getter(this);
+  int get length => _blink.BlinkFileWriter.length_Getter(this);
 
   @DomName('FileWriter.position')
   @DocsEditable()
-  int get position => _blink.BlinkFileWriter.$position_Getter(this);
+  int get position => _blink.BlinkFileWriter.position_Getter(this);
 
   @DomName('FileWriter.readyState')
   @DocsEditable()
-  int get readyState => _blink.BlinkFileWriter.$readyState_Getter(this);
+  int get readyState => _blink.BlinkFileWriter.readyState_Getter(this);
 
   @DomName('FileWriter.abort')
   @DocsEditable()
-  void abort() => _blink.BlinkFileWriter.$abort_Callback(this);
+  void abort() => _blink.BlinkFileWriter.abort_Callback(this);
 
   @DomName('FileWriter.seek')
   @DocsEditable()
-  void seek(int position) => _blink.BlinkFileWriter.$seek_Callback(this, position);
+  void seek(int position) => _blink.BlinkFileWriter.seek_Callback_ll(this, position);
 
   @DomName('FileWriter.truncate')
   @DocsEditable()
-  void truncate(int size) => _blink.BlinkFileWriter.$truncate_Callback(this, size);
+  void truncate(int size) => _blink.BlinkFileWriter.truncate_Callback_ll(this, size);
 
   @DomName('FileWriter.write')
   @DocsEditable()
-  void write(Blob data) => _blink.BlinkFileWriter.$write_Callback(this, data);
+  void write(Blob data) => _blink.BlinkFileWriter.write_Callback_Blob(this, data);
 
   /// Stream of `abort` events handled by this [FileWriter].
   @DomName('FileWriter.onabort')
@@ -13628,7 +13628,7 @@
 
   @DomName('FocusEvent.relatedTarget')
   @DocsEditable()
-  EventTarget get relatedTarget => _blink.BlinkFocusEvent.$relatedTarget_Getter(this);
+  EventTarget get relatedTarget => _blink.BlinkFocusEvent.relatedTarget_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13648,88 +13648,88 @@
   @DomName('FontFace.FontFace')
   @DocsEditable()
   factory FontFace(String family, String source, Map descriptors) {
-    return _blink.BlinkFontFace.$_create_1constructorCallback(family, source, descriptors);
+    return _blink.BlinkFontFace.constructorCallback_DOMString_DOMString_Dictionary(family, source, descriptors);
   }
 
   @DomName('FontFace.family')
   @DocsEditable()
   @Experimental() // untriaged
-  String get family => _blink.BlinkFontFace.$family_Getter(this);
+  String get family => _blink.BlinkFontFace.family_Getter(this);
 
   @DomName('FontFace.family')
   @DocsEditable()
   @Experimental() // untriaged
-  void set family(String value) => _blink.BlinkFontFace.$family_Setter(this, value);
+  void set family(String value) => _blink.BlinkFontFace.family_Setter_DOMString(this, value);
 
   @DomName('FontFace.featureSettings')
   @DocsEditable()
   @Experimental() // untriaged
-  String get featureSettings => _blink.BlinkFontFace.$featureSettings_Getter(this);
+  String get featureSettings => _blink.BlinkFontFace.featureSettings_Getter(this);
 
   @DomName('FontFace.featureSettings')
   @DocsEditable()
   @Experimental() // untriaged
-  void set featureSettings(String value) => _blink.BlinkFontFace.$featureSettings_Setter(this, value);
+  void set featureSettings(String value) => _blink.BlinkFontFace.featureSettings_Setter_DOMString(this, value);
 
   @DomName('FontFace.status')
   @DocsEditable()
   @Experimental() // untriaged
-  String get status => _blink.BlinkFontFace.$status_Getter(this);
+  String get status => _blink.BlinkFontFace.status_Getter(this);
 
   @DomName('FontFace.stretch')
   @DocsEditable()
   @Experimental() // untriaged
-  String get stretch => _blink.BlinkFontFace.$stretch_Getter(this);
+  String get stretch => _blink.BlinkFontFace.stretch_Getter(this);
 
   @DomName('FontFace.stretch')
   @DocsEditable()
   @Experimental() // untriaged
-  void set stretch(String value) => _blink.BlinkFontFace.$stretch_Setter(this, value);
+  void set stretch(String value) => _blink.BlinkFontFace.stretch_Setter_DOMString(this, value);
 
   @DomName('FontFace.style')
   @DocsEditable()
   @Experimental() // untriaged
-  String get style => _blink.BlinkFontFace.$style_Getter(this);
+  String get style => _blink.BlinkFontFace.style_Getter(this);
 
   @DomName('FontFace.style')
   @DocsEditable()
   @Experimental() // untriaged
-  void set style(String value) => _blink.BlinkFontFace.$style_Setter(this, value);
+  void set style(String value) => _blink.BlinkFontFace.style_Setter_DOMString(this, value);
 
   @DomName('FontFace.unicodeRange')
   @DocsEditable()
   @Experimental() // untriaged
-  String get unicodeRange => _blink.BlinkFontFace.$unicodeRange_Getter(this);
+  String get unicodeRange => _blink.BlinkFontFace.unicodeRange_Getter(this);
 
   @DomName('FontFace.unicodeRange')
   @DocsEditable()
   @Experimental() // untriaged
-  void set unicodeRange(String value) => _blink.BlinkFontFace.$unicodeRange_Setter(this, value);
+  void set unicodeRange(String value) => _blink.BlinkFontFace.unicodeRange_Setter_DOMString(this, value);
 
   @DomName('FontFace.variant')
   @DocsEditable()
   @Experimental() // untriaged
-  String get variant => _blink.BlinkFontFace.$variant_Getter(this);
+  String get variant => _blink.BlinkFontFace.variant_Getter(this);
 
   @DomName('FontFace.variant')
   @DocsEditable()
   @Experimental() // untriaged
-  void set variant(String value) => _blink.BlinkFontFace.$variant_Setter(this, value);
+  void set variant(String value) => _blink.BlinkFontFace.variant_Setter_DOMString(this, value);
 
   @DomName('FontFace.weight')
   @DocsEditable()
   @Experimental() // untriaged
-  String get weight => _blink.BlinkFontFace.$weight_Getter(this);
+  String get weight => _blink.BlinkFontFace.weight_Getter(this);
 
   @DomName('FontFace.weight')
   @DocsEditable()
   @Experimental() // untriaged
-  void set weight(String value) => _blink.BlinkFontFace.$weight_Setter(this, value);
+  void set weight(String value) => _blink.BlinkFontFace.weight_Setter_DOMString(this, value);
 
   @DomName('FontFace.load')
   @DocsEditable()
   @Experimental() // untriaged
-  void load() => _blink.BlinkFontFace.$load_Callback(this);
+  void load() => _blink.BlinkFontFace.load_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13749,46 +13749,46 @@
   @DomName('FontFaceSet.size')
   @DocsEditable()
   @Experimental() // untriaged
-  int get size => _blink.BlinkFontFaceSet.$size_Getter(this);
+  int get size => _blink.BlinkFontFaceSet.size_Getter(this);
 
   @DomName('FontFaceSet.status')
   @DocsEditable()
   @Experimental() // untriaged
-  String get status => _blink.BlinkFontFaceSet.$status_Getter(this);
+  String get status => _blink.BlinkFontFaceSet.status_Getter(this);
 
   @DomName('FontFaceSet.add')
   @DocsEditable()
   @Experimental() // untriaged
-  void add(FontFace fontFace) => _blink.BlinkFontFaceSet.$add_Callback(this, fontFace);
+  void add(FontFace fontFace) => _blink.BlinkFontFaceSet.add_Callback_FontFace(this, fontFace);
 
   @DomName('FontFaceSet.check')
   @DocsEditable()
   @Experimental() // untriaged
-  bool check(String font, String text) => _blink.BlinkFontFaceSet.$check_Callback(this, font, text);
+  bool check(String font, String text) => _blink.BlinkFontFaceSet.check_Callback_DOMString_DOMString(this, font, text);
 
   @DomName('FontFaceSet.clear')
   @DocsEditable()
   @Experimental() // untriaged
-  void clear() => _blink.BlinkFontFaceSet.$clear_Callback(this);
+  void clear() => _blink.BlinkFontFaceSet.clear_Callback(this);
 
   @DomName('FontFaceSet.delete')
   @DocsEditable()
   @Experimental() // untriaged
-  bool delete(FontFace fontFace) => _blink.BlinkFontFaceSet.$delete_Callback(this, fontFace);
+  bool delete(FontFace fontFace) => _blink.BlinkFontFaceSet.delete_Callback_FontFace(this, fontFace);
 
   void forEach(FontFaceSetForEachCallback callback, [Object thisArg]) {
     if (thisArg != null) {
-      _blink.BlinkFontFaceSet.$_forEach_1_Callback(this, callback, thisArg);
+      _blink.BlinkFontFaceSet.forEach_Callback_FontFaceSetForEachCallback_ScriptValue(this, callback, thisArg);
       return;
     }
-    _blink.BlinkFontFaceSet.$_forEach_2_Callback(this, callback);
+    _blink.BlinkFontFaceSet.forEach_Callback_FontFaceSetForEachCallback(this, callback);
     return;
   }
 
   @DomName('FontFaceSet.has')
   @DocsEditable()
   @Experimental() // untriaged
-  bool has(FontFace fontFace) => _blink.BlinkFontFaceSet.$has_Callback(this, fontFace);
+  bool has(FontFace fontFace) => _blink.BlinkFontFaceSet.has_Callback_FontFace(this, fontFace);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13823,18 +13823,18 @@
   factory FormData([FormElement form]) => _create(form);
 
   @DocsEditable()
-  static FormData _create(form) => _blink.BlinkFormData.$constructorCallback(form);
+  static FormData _create(form) => _blink.BlinkFormData.constructorCallback_HTMLFormElement(form);
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
   @DomName('FormData.append')
   @DocsEditable()
-  void append(String name, String value) => _blink.BlinkFormData.$append_Callback(this, name, value);
+  void append(String name, String value) => _blink.BlinkFormData.append_Callback_DOMString_DOMString(this, name, value);
 
   @DomName('FormData.appendBlob')
   @DocsEditable()
-  void appendBlob(String name, Blob value, [String filename]) => _blink.BlinkFormData.$appendBlob_Callback(this, name, value, filename);
+  void appendBlob(String name, Blob value, [String filename]) => _blink.BlinkFormData.append_Callback_DOMString_Blob_DOMString(this, name, value, filename);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13886,105 +13886,105 @@
 
   @DomName('HTMLFormElement.acceptCharset')
   @DocsEditable()
-  String get acceptCharset => _blink.BlinkHTMLFormElement.$acceptCharset_Getter(this);
+  String get acceptCharset => _blink.BlinkHTMLFormElement.acceptCharset_Getter(this);
 
   @DomName('HTMLFormElement.acceptCharset')
   @DocsEditable()
-  void set acceptCharset(String value) => _blink.BlinkHTMLFormElement.$acceptCharset_Setter(this, value);
+  void set acceptCharset(String value) => _blink.BlinkHTMLFormElement.acceptCharset_Setter_DOMString(this, value);
 
   @DomName('HTMLFormElement.action')
   @DocsEditable()
-  String get action => _blink.BlinkHTMLFormElement.$action_Getter(this);
+  String get action => _blink.BlinkHTMLFormElement.action_Getter(this);
 
   @DomName('HTMLFormElement.action')
   @DocsEditable()
-  void set action(String value) => _blink.BlinkHTMLFormElement.$action_Setter(this, value);
+  void set action(String value) => _blink.BlinkHTMLFormElement.action_Setter_DOMString(this, value);
 
   @DomName('HTMLFormElement.autocomplete')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#autofilling-form-controls:-the-autocomplete-attribute
   @Experimental()
-  String get autocomplete => _blink.BlinkHTMLFormElement.$autocomplete_Getter(this);
+  String get autocomplete => _blink.BlinkHTMLFormElement.autocomplete_Getter(this);
 
   @DomName('HTMLFormElement.autocomplete')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#autofilling-form-controls:-the-autocomplete-attribute
   @Experimental()
-  void set autocomplete(String value) => _blink.BlinkHTMLFormElement.$autocomplete_Setter(this, value);
+  void set autocomplete(String value) => _blink.BlinkHTMLFormElement.autocomplete_Setter_DOMString(this, value);
 
   @DomName('HTMLFormElement.encoding')
   @DocsEditable()
-  String get encoding => _blink.BlinkHTMLFormElement.$encoding_Getter(this);
+  String get encoding => _blink.BlinkHTMLFormElement.encoding_Getter(this);
 
   @DomName('HTMLFormElement.encoding')
   @DocsEditable()
-  void set encoding(String value) => _blink.BlinkHTMLFormElement.$encoding_Setter(this, value);
+  void set encoding(String value) => _blink.BlinkHTMLFormElement.encoding_Setter_DOMString(this, value);
 
   @DomName('HTMLFormElement.enctype')
   @DocsEditable()
-  String get enctype => _blink.BlinkHTMLFormElement.$enctype_Getter(this);
+  String get enctype => _blink.BlinkHTMLFormElement.enctype_Getter(this);
 
   @DomName('HTMLFormElement.enctype')
   @DocsEditable()
-  void set enctype(String value) => _blink.BlinkHTMLFormElement.$enctype_Setter(this, value);
+  void set enctype(String value) => _blink.BlinkHTMLFormElement.enctype_Setter_DOMString(this, value);
 
   @DomName('HTMLFormElement.length')
   @DocsEditable()
-  int get length => _blink.BlinkHTMLFormElement.$length_Getter(this);
+  int get length => _blink.BlinkHTMLFormElement.length_Getter(this);
 
   @DomName('HTMLFormElement.method')
   @DocsEditable()
-  String get method => _blink.BlinkHTMLFormElement.$method_Getter(this);
+  String get method => _blink.BlinkHTMLFormElement.method_Getter(this);
 
   @DomName('HTMLFormElement.method')
   @DocsEditable()
-  void set method(String value) => _blink.BlinkHTMLFormElement.$method_Setter(this, value);
+  void set method(String value) => _blink.BlinkHTMLFormElement.method_Setter_DOMString(this, value);
 
   @DomName('HTMLFormElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLFormElement.$name_Getter(this);
+  String get name => _blink.BlinkHTMLFormElement.name_Getter(this);
 
   @DomName('HTMLFormElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLFormElement.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkHTMLFormElement.name_Setter_DOMString(this, value);
 
   @DomName('HTMLFormElement.noValidate')
   @DocsEditable()
-  bool get noValidate => _blink.BlinkHTMLFormElement.$noValidate_Getter(this);
+  bool get noValidate => _blink.BlinkHTMLFormElement.noValidate_Getter(this);
 
   @DomName('HTMLFormElement.noValidate')
   @DocsEditable()
-  void set noValidate(bool value) => _blink.BlinkHTMLFormElement.$noValidate_Setter(this, value);
+  void set noValidate(bool value) => _blink.BlinkHTMLFormElement.noValidate_Setter_boolean(this, value);
 
   @DomName('HTMLFormElement.target')
   @DocsEditable()
-  String get target => _blink.BlinkHTMLFormElement.$target_Getter(this);
+  String get target => _blink.BlinkHTMLFormElement.target_Getter(this);
 
   @DomName('HTMLFormElement.target')
   @DocsEditable()
-  void set target(String value) => _blink.BlinkHTMLFormElement.$target_Setter(this, value);
+  void set target(String value) => _blink.BlinkHTMLFormElement.target_Setter_DOMString(this, value);
 
   @DomName('HTMLFormElement.__getter__')
   @DocsEditable()
-  Element __getter__(int index) => _blink.BlinkHTMLFormElement.$__getter___Callback(this, index);
+  Element __getter__(int index) => _blink.BlinkHTMLFormElement.$__getter___Callback_ul(this, index);
 
   @DomName('HTMLFormElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLFormElement.$checkValidity_Callback(this);
+  bool checkValidity() => _blink.BlinkHTMLFormElement.checkValidity_Callback(this);
 
   @DomName('HTMLFormElement.requestAutocomplete')
   @DocsEditable()
   // http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-October/037711.html
   @Experimental()
-  void requestAutocomplete(Map details) => _blink.BlinkHTMLFormElement.$requestAutocomplete_Callback(this, details);
+  void requestAutocomplete(Map details) => _blink.BlinkHTMLFormElement.requestAutocomplete_Callback_Dictionary(this, details);
 
   @DomName('HTMLFormElement.reset')
   @DocsEditable()
-  void reset() => _blink.BlinkHTMLFormElement.$reset_Callback(this);
+  void reset() => _blink.BlinkHTMLFormElement.reset_Callback(this);
 
   @DomName('HTMLFormElement.submit')
   @DocsEditable()
-  void submit() => _blink.BlinkHTMLFormElement.$submit_Callback(this);
+  void submit() => _blink.BlinkHTMLFormElement.submit_Callback(this);
 
   /// Stream of `autocomplete` events handled by this [FormElement].
   @DomName('HTMLFormElement.onautocomplete')
@@ -14018,23 +14018,23 @@
 
   @DomName('Gamepad.axes')
   @DocsEditable()
-  List<num> get axes => _blink.BlinkGamepad.$axes_Getter(this);
+  List<num> get axes => _blink.BlinkGamepad.axes_Getter(this);
 
   @DomName('Gamepad.buttons')
   @DocsEditable()
-  List<num> get buttons => _blink.BlinkGamepad.$buttons_Getter(this);
+  List<num> get buttons => _blink.BlinkGamepad.buttons_Getter(this);
 
   @DomName('Gamepad.id')
   @DocsEditable()
-  String get id => _blink.BlinkGamepad.$id_Getter(this);
+  String get id => _blink.BlinkGamepad.id_Getter(this);
 
   @DomName('Gamepad.index')
   @DocsEditable()
-  int get index => _blink.BlinkGamepad.$index_Getter(this);
+  int get index => _blink.BlinkGamepad.index_Getter(this);
 
   @DomName('Gamepad.timestamp')
   @DocsEditable()
-  int get timestamp => _blink.BlinkGamepad.$timestamp_Getter(this);
+  int get timestamp => _blink.BlinkGamepad.timestamp_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14122,15 +14122,15 @@
 
   @DomName('Geolocation.clearWatch')
   @DocsEditable()
-  void _clearWatch(int watchID) => _blink.BlinkGeolocation.$clearWatch_Callback(this, watchID);
+  void _clearWatch(int watchID) => _blink.BlinkGeolocation.clearWatch_Callback_long(this, watchID);
 
   @DomName('Geolocation.getCurrentPosition')
   @DocsEditable()
-  void _getCurrentPosition(_PositionCallback successCallback, [_PositionErrorCallback errorCallback, Object options]) => _blink.BlinkGeolocation.$getCurrentPosition_Callback(this, successCallback, errorCallback, options);
+  void _getCurrentPosition(_PositionCallback successCallback, [_PositionErrorCallback errorCallback, Object options]) => _blink.BlinkGeolocation.getCurrentPosition_Callback_PositionCallback_PositionErrorCallback_object(this, successCallback, errorCallback, options);
 
   @DomName('Geolocation.watchPosition')
   @DocsEditable()
-  int _watchPosition(_PositionCallback successCallback, [_PositionErrorCallback errorCallback, Object options]) => _blink.BlinkGeolocation.$watchPosition_Callback(this, successCallback, errorCallback, options);
+  int _watchPosition(_PositionCallback successCallback, [_PositionErrorCallback errorCallback, Object options]) => _blink.BlinkGeolocation.watchPosition_Callback_PositionCallback_PositionErrorCallback_object(this, successCallback, errorCallback, options);
 }
 
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14149,11 +14149,11 @@
 
   @DomName('Geoposition.coords')
   @DocsEditable()
-  Coordinates get coords => _blink.BlinkGeoposition.$coords_Getter(this);
+  Coordinates get coords => _blink.BlinkGeoposition.coords_Getter(this);
 
   @DomName('Geoposition.timestamp')
   @DocsEditable()
-  int get timestamp => _blink.BlinkGeoposition.$timestamp_Getter(this);
+  int get timestamp => _blink.BlinkGeoposition.timestamp_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14537,12 +14537,12 @@
   @DomName('HTMLHRElement.color')
   @DocsEditable()
   @Experimental() // untriaged
-  String get color => _blink.BlinkHTMLHRElement.$color_Getter(this);
+  String get color => _blink.BlinkHTMLHRElement.color_Getter(this);
 
   @DomName('HTMLHRElement.color')
   @DocsEditable()
   @Experimental() // untriaged
-  void set color(String value) => _blink.BlinkHTMLHRElement.$color_Setter(this, value);
+  void set color(String value) => _blink.BlinkHTMLHRElement.color_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -14572,15 +14572,15 @@
 
   @DomName('HashChangeEvent.newURL')
   @DocsEditable()
-  String get newUrl => _blink.BlinkHashChangeEvent.$newURL_Getter(this);
+  String get newUrl => _blink.BlinkHashChangeEvent.newURL_Getter(this);
 
   @DomName('HashChangeEvent.oldURL')
   @DocsEditable()
-  String get oldUrl => _blink.BlinkHashChangeEvent.$oldURL_Getter(this);
+  String get oldUrl => _blink.BlinkHashChangeEvent.oldURL_Getter(this);
 
   @DomName('HashChangeEvent.initHashChangeEvent')
   @DocsEditable()
-  void _initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL) => _blink.BlinkHashChangeEvent.$initHashChangeEvent_Callback(this, type, canBubble, cancelable, oldURL, newURL);
+  void _initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL) => _blink.BlinkHashChangeEvent.initHashChangeEvent_Callback_DOMString_boolean_boolean_DOMString_DOMString(this, type, canBubble, cancelable, oldURL, newURL);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14674,23 +14674,23 @@
 
   @DomName('History.length')
   @DocsEditable()
-  int get length => _blink.BlinkHistory.$length_Getter(this);
+  int get length => _blink.BlinkHistory.length_Getter(this);
 
   @DomName('History.state')
   @DocsEditable()
-  dynamic get state => _blink.BlinkHistory.$state_Getter(this);
+  dynamic get state => _blink.BlinkHistory.state_Getter(this);
 
   @DomName('History.back')
   @DocsEditable()
-  void back() => _blink.BlinkHistory.$back_Callback(this);
+  void back() => _blink.BlinkHistory.back_Callback(this);
 
   @DomName('History.forward')
   @DocsEditable()
-  void forward() => _blink.BlinkHistory.$forward_Callback(this);
+  void forward() => _blink.BlinkHistory.forward_Callback(this);
 
   @DomName('History.go')
   @DocsEditable()
-  void go(int distance) => _blink.BlinkHistory.$go_Callback(this, distance);
+  void go(int distance) => _blink.BlinkHistory.go_Callback_long(this, distance);
 
   @DomName('History.pushState')
   @DocsEditable()
@@ -14698,7 +14698,7 @@
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  void pushState(Object data, String title, [String url]) => _blink.BlinkHistory.$pushState_Callback(this, data, title, url);
+  void pushState(Object data, String title, [String url]) => _blink.BlinkHistory.pushState_Callback_ScriptValue_DOMString_DOMString(this, data, title, url);
 
   @DomName('History.replaceState')
   @DocsEditable()
@@ -14706,7 +14706,7 @@
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  void replaceState(Object data, String title, [String url]) => _blink.BlinkHistory.$replaceState_Callback(this, data, title, url);
+  void replaceState(Object data, String title, [String url]) => _blink.BlinkHistory.replaceState_Callback_ScriptValue_DOMString_DOMString(this, data, title, url);
 }
 // 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
@@ -14723,15 +14723,15 @@
 
   @DomName('HTMLCollection.length')
   @DocsEditable()
-  int get length => _blink.BlinkHTMLCollection.$length_Getter(this);
+  int get length => _blink.BlinkHTMLCollection.length_Getter(this);
 
   Node operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkHTMLCollection.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkHTMLCollection.item_Callback_ul(this, index);
   }
 
-  Node _nativeIndexedGetter(int index) => _blink.BlinkHTMLCollection.$NativeIndexed_Getter(this, index);
+  Node _nativeIndexedGetter(int index) => _blink.BlinkHTMLCollection.item_Callback_ul(this, index);
 
   void operator[]=(int index, Node value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -14773,11 +14773,11 @@
 
   @DomName('HTMLCollection.item')
   @DocsEditable()
-  Element item(int index) => _blink.BlinkHTMLCollection.$item_Callback(this, index);
+  Element item(int index) => _blink.BlinkHTMLCollection.item_Callback_ul(this, index);
 
   @DomName('HTMLCollection.namedItem')
   @DocsEditable()
-  Element namedItem(String name) => _blink.BlinkHTMLCollection.$namedItem_Callback(this, name);
+  Element namedItem(String name) => _blink.BlinkHTMLCollection.namedItem_Callback_DOMString(this, name);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15345,88 +15345,88 @@
 
   @DomName('HTMLElement.contentEditable')
   @DocsEditable()
-  String get contentEditable => _blink.BlinkHTMLElement.$contentEditable_Getter(this);
+  String get contentEditable => _blink.BlinkHTMLElement.contentEditable_Getter(this);
 
   @DomName('HTMLElement.contentEditable')
   @DocsEditable()
-  void set contentEditable(String value) => _blink.BlinkHTMLElement.$contentEditable_Setter(this, value);
+  void set contentEditable(String value) => _blink.BlinkHTMLElement.contentEditable_Setter_DOMString(this, value);
 
   @DomName('HTMLElement.dir')
   @DocsEditable()
-  String get dir => _blink.BlinkHTMLElement.$dir_Getter(this);
+  String get dir => _blink.BlinkHTMLElement.dir_Getter(this);
 
   @DomName('HTMLElement.dir')
   @DocsEditable()
-  void set dir(String value) => _blink.BlinkHTMLElement.$dir_Setter(this, value);
+  void set dir(String value) => _blink.BlinkHTMLElement.dir_Setter_DOMString(this, value);
 
   @DomName('HTMLElement.draggable')
   @DocsEditable()
-  bool get draggable => _blink.BlinkHTMLElement.$draggable_Getter(this);
+  bool get draggable => _blink.BlinkHTMLElement.draggable_Getter(this);
 
   @DomName('HTMLElement.draggable')
   @DocsEditable()
-  void set draggable(bool value) => _blink.BlinkHTMLElement.$draggable_Setter(this, value);
+  void set draggable(bool value) => _blink.BlinkHTMLElement.draggable_Setter_boolean(this, value);
 
   @DomName('HTMLElement.hidden')
   @DocsEditable()
-  bool get hidden => _blink.BlinkHTMLElement.$hidden_Getter(this);
+  bool get hidden => _blink.BlinkHTMLElement.hidden_Getter(this);
 
   @DomName('HTMLElement.hidden')
   @DocsEditable()
-  void set hidden(bool value) => _blink.BlinkHTMLElement.$hidden_Setter(this, value);
+  void set hidden(bool value) => _blink.BlinkHTMLElement.hidden_Setter_boolean(this, value);
 
   @DomName('HTMLElement.inputMethodContext')
   @DocsEditable()
   @Experimental() // untriaged
-  InputMethodContext get inputMethodContext => _blink.BlinkHTMLElement.$inputMethodContext_Getter(this);
+  InputMethodContext get inputMethodContext => _blink.BlinkHTMLElement.inputMethodContext_Getter(this);
 
   @DomName('HTMLElement.isContentEditable')
   @DocsEditable()
-  bool get isContentEditable => _blink.BlinkHTMLElement.$isContentEditable_Getter(this);
+  bool get isContentEditable => _blink.BlinkHTMLElement.isContentEditable_Getter(this);
 
   @DomName('HTMLElement.lang')
   @DocsEditable()
-  String get lang => _blink.BlinkHTMLElement.$lang_Getter(this);
+  String get lang => _blink.BlinkHTMLElement.lang_Getter(this);
 
   @DomName('HTMLElement.lang')
   @DocsEditable()
-  void set lang(String value) => _blink.BlinkHTMLElement.$lang_Setter(this, value);
+  void set lang(String value) => _blink.BlinkHTMLElement.lang_Setter_DOMString(this, value);
 
   @DomName('HTMLElement.spellcheck')
   @DocsEditable()
   // http://blog.whatwg.org/the-road-to-html-5-spellchecking
   @Experimental() // nonstandard
-  bool get spellcheck => _blink.BlinkHTMLElement.$spellcheck_Getter(this);
+  bool get spellcheck => _blink.BlinkHTMLElement.spellcheck_Getter(this);
 
   @DomName('HTMLElement.spellcheck')
   @DocsEditable()
   // http://blog.whatwg.org/the-road-to-html-5-spellchecking
   @Experimental() // nonstandard
-  void set spellcheck(bool value) => _blink.BlinkHTMLElement.$spellcheck_Setter(this, value);
+  void set spellcheck(bool value) => _blink.BlinkHTMLElement.spellcheck_Setter_boolean(this, value);
 
   @DomName('HTMLElement.tabIndex')
   @DocsEditable()
-  int get tabIndex => _blink.BlinkHTMLElement.$tabIndex_Getter(this);
+  int get tabIndex => _blink.BlinkHTMLElement.tabIndex_Getter(this);
 
   @DomName('HTMLElement.tabIndex')
   @DocsEditable()
-  void set tabIndex(int value) => _blink.BlinkHTMLElement.$tabIndex_Setter(this, value);
+  void set tabIndex(int value) => _blink.BlinkHTMLElement.tabIndex_Setter_long(this, value);
 
   @DomName('HTMLElement.title')
   @DocsEditable()
-  String get title => _blink.BlinkHTMLElement.$title_Getter(this);
+  String get title => _blink.BlinkHTMLElement.title_Getter(this);
 
   @DomName('HTMLElement.title')
   @DocsEditable()
-  void set title(String value) => _blink.BlinkHTMLElement.$title_Setter(this, value);
+  void set title(String value) => _blink.BlinkHTMLElement.title_Setter_DOMString(this, value);
 
   @DomName('HTMLElement.translate')
   @DocsEditable()
-  bool get translate => _blink.BlinkHTMLElement.$translate_Getter(this);
+  bool get translate => _blink.BlinkHTMLElement.translate_Getter(this);
 
   @DomName('HTMLElement.translate')
   @DocsEditable()
-  void set translate(bool value) => _blink.BlinkHTMLElement.$translate_Setter(this, value);
+  void set translate(bool value) => _blink.BlinkHTMLElement.translate_Setter_boolean(this, value);
 
   @DomName('HTMLElement.webkitdropzone')
   @DocsEditable()
@@ -15434,7 +15434,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dropzone-attribute
-  String get dropzone => _blink.BlinkHTMLElement.$webkitdropzone_Getter(this);
+  String get dropzone => _blink.BlinkHTMLElement.webkitdropzone_Getter(this);
 
   @DomName('HTMLElement.webkitdropzone')
   @DocsEditable()
@@ -15442,11 +15442,11 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dropzone-attribute
-  void set dropzone(String value) => _blink.BlinkHTMLElement.$webkitdropzone_Setter(this, value);
+  void set dropzone(String value) => _blink.BlinkHTMLElement.webkitdropzone_Setter_DOMString(this, value);
 
   @DomName('HTMLElement.click')
   @DocsEditable()
-  void click() => _blink.BlinkHTMLElement.$click_Callback(this);
+  void click() => _blink.BlinkHTMLElement.click_Callback(this);
 
   @DomName('HTMLElement.onabort')
   @DocsEditable()
@@ -16123,7 +16123,7 @@
   factory HttpRequest() => _create();
 
   @DocsEditable()
-  static HttpRequest _create() => _blink.BlinkXMLHttpRequest.$constructorCallback();
+  static HttpRequest _create() => _blink.BlinkXMLHttpRequest.constructorCallback();
 
   @DomName('XMLHttpRequest.DONE')
   @DocsEditable()
@@ -16179,7 +16179,7 @@
    */
   @DomName('XMLHttpRequest.readyState')
   @DocsEditable()
-  int get readyState => _blink.BlinkXMLHttpRequest.$readyState_Getter(this);
+  int get readyState => _blink.BlinkXMLHttpRequest.readyState_Getter(this);
 
   /**
    * The data received as a reponse from the request.
@@ -16194,14 +16194,14 @@
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  Object get response => _blink.BlinkXMLHttpRequest.$response_Getter(this);
+  Object get response => _blink.BlinkXMLHttpRequest.response_Getter(this);
 
   /**
    * The response in String form or empty String on failure.
    */
   @DomName('XMLHttpRequest.responseText')
   @DocsEditable()
-  String get responseText => _blink.BlinkXMLHttpRequest.$responseText_Getter(this);
+  String get responseText => _blink.BlinkXMLHttpRequest.responseText_Getter(this);
 
   /**
    * [String] telling the server the desired response format.
@@ -16215,7 +16215,7 @@
    */
   @DomName('XMLHttpRequest.responseType')
   @DocsEditable()
-  String get responseType => _blink.BlinkXMLHttpRequest.$responseType_Getter(this);
+  String get responseType => _blink.BlinkXMLHttpRequest.responseType_Getter(this);
 
   /**
    * [String] telling the server the desired response format.
@@ -16229,7 +16229,7 @@
    */
   @DomName('XMLHttpRequest.responseType')
   @DocsEditable()
-  void set responseType(String value) => _blink.BlinkXMLHttpRequest.$responseType_Setter(this, value);
+  void set responseType(String value) => _blink.BlinkXMLHttpRequest.responseType_Setter_DOMString(this, value);
 
   /**
    * The request response, or null on failure.
@@ -16240,7 +16240,7 @@
    */
   @DomName('XMLHttpRequest.responseXML')
   @DocsEditable()
-  Document get responseXml => _blink.BlinkXMLHttpRequest.$responseXML_Getter(this);
+  Document get responseXml => _blink.BlinkXMLHttpRequest.responseXML_Getter(this);
 
   /**
    * The http result code from the request (200, 404, etc).
@@ -16248,7 +16248,7 @@
    */
   @DomName('XMLHttpRequest.status')
   @DocsEditable()
-  int get status => _blink.BlinkXMLHttpRequest.$status_Getter(this);
+  int get status => _blink.BlinkXMLHttpRequest.status_Getter(this);
 
   /**
    * The request response string (such as \"200 OK\").
@@ -16256,7 +16256,7 @@
    */
   @DomName('XMLHttpRequest.statusText')
   @DocsEditable()
-  String get statusText => _blink.BlinkXMLHttpRequest.$statusText_Getter(this);
+  String get statusText => _blink.BlinkXMLHttpRequest.statusText_Getter(this);
 
   /**
    * Length of time before a request is automatically terminated.
@@ -16277,7 +16277,7 @@
   @DomName('XMLHttpRequest.timeout')
   @DocsEditable()
   @Experimental() // untriaged
-  int get timeout => _blink.BlinkXMLHttpRequest.$timeout_Getter(this);
+  int get timeout => _blink.BlinkXMLHttpRequest.timeout_Getter(this);
 
   /**
    * Length of time before a request is automatically terminated.
@@ -16298,7 +16298,7 @@
   @DomName('XMLHttpRequest.timeout')
   @DocsEditable()
   @Experimental() // untriaged
-  void set timeout(int value) => _blink.BlinkXMLHttpRequest.$timeout_Setter(this, value);
+  void set timeout(int value) => _blink.BlinkXMLHttpRequest.timeout_Setter_ul(this, value);
 
   /**
    * [EventTarget] that can hold listeners to track the progress of the request.
@@ -16307,7 +16307,7 @@
   @DomName('XMLHttpRequest.upload')
   @DocsEditable()
   @Unstable()
-  HttpRequestUpload get upload => _blink.BlinkXMLHttpRequest.$upload_Getter(this);
+  HttpRequestUpload get upload => _blink.BlinkXMLHttpRequest.upload_Getter(this);
 
   /**
    * True if cross-site requests should use credentials such as cookies
@@ -16317,7 +16317,7 @@
    */
   @DomName('XMLHttpRequest.withCredentials')
   @DocsEditable()
-  bool get withCredentials => _blink.BlinkXMLHttpRequest.$withCredentials_Getter(this);
+  bool get withCredentials => _blink.BlinkXMLHttpRequest.withCredentials_Getter(this);
 
   /**
    * True if cross-site requests should use credentials such as cookies
@@ -16327,7 +16327,7 @@
    */
   @DomName('XMLHttpRequest.withCredentials')
   @DocsEditable()
-  void set withCredentials(bool value) => _blink.BlinkXMLHttpRequest.$withCredentials_Setter(this, value);
+  void set withCredentials(bool value) => _blink.BlinkXMLHttpRequest.withCredentials_Setter_boolean(this, value);
 
   /**
    * Stop the current request.
@@ -16338,7 +16338,7 @@
    */
   @DomName('XMLHttpRequest.abort')
   @DocsEditable()
-  void abort() => _blink.BlinkXMLHttpRequest.$abort_Callback(this);
+  void abort() => _blink.BlinkXMLHttpRequest.abort_Callback(this);
 
   /**
    * Retrieve all the response headers from a request.
@@ -16353,7 +16353,7 @@
   @DomName('XMLHttpRequest.getAllResponseHeaders')
   @DocsEditable()
   @Unstable()
-  String getAllResponseHeaders() => _blink.BlinkXMLHttpRequest.$getAllResponseHeaders_Callback(this);
+  String getAllResponseHeaders() => _blink.BlinkXMLHttpRequest.getAllResponseHeaders_Callback(this);
 
   /**
    * Return the response header named `header`, or null if not found.
@@ -16364,7 +16364,7 @@
   @DomName('XMLHttpRequest.getResponseHeader')
   @DocsEditable()
   @Unstable()
-  String getResponseHeader(String header) => _blink.BlinkXMLHttpRequest.$getResponseHeader_Callback(this, header);
+  String getResponseHeader(String header) => _blink.BlinkXMLHttpRequest.getResponseHeader_Callback_DOMString(this, header);
 
   /**
    * Specify the desired `url`, and `method` to use in making the request.
@@ -16383,7 +16383,7 @@
    */
   @DomName('XMLHttpRequest.open')
   @DocsEditable()
-  void open(String method, String url, {bool async, String user, String password}) => _blink.BlinkXMLHttpRequest.$open_Callback(this, method, url, async, user, password);
+  void open(String method, String url, {bool async, String user, String password}) => _blink.BlinkXMLHttpRequest.open_Callback_DOMString_DOMString_boolean_DOMString_DOMString(this, method, url, async, user, password);
 
   /**
    * Specify a particular MIME type (such as `text/xml`) desired for the
@@ -16397,7 +16397,7 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  void overrideMimeType(String override) => _blink.BlinkXMLHttpRequest.$overrideMimeType_Callback(this, override);
+  void overrideMimeType(String override) => _blink.BlinkXMLHttpRequest.overrideMimeType_Callback_DOMString(this, override);
 
   /**
    * Send the request with any given `data`.
@@ -16415,7 +16415,7 @@
    */
   @DomName('XMLHttpRequest.send')
   @DocsEditable()
-  void send([data]) => _blink.BlinkXMLHttpRequest.$send_Callback(this, data);
+  void send([data]) => _blink.BlinkXMLHttpRequest.send_Callback(this, data);
 
   /**
    * Sets the value of an HTTP requst header.
@@ -16437,7 +16437,7 @@
    */
   @DomName('XMLHttpRequest.setRequestHeader')
   @DocsEditable()
-  void setRequestHeader(String header, String value) => _blink.BlinkXMLHttpRequest.$setRequestHeader_Callback(this, header, value);
+  void setRequestHeader(String header, String value) => _blink.BlinkXMLHttpRequest.setRequestHeader_Callback_DOMString_DOMString(this, header, value);
 
   /// Stream of `readystatechange` events handled by this [HttpRequest].
 /**
@@ -16632,55 +16632,55 @@
 
   @DomName('HTMLIFrameElement.contentWindow')
   @DocsEditable()
-  WindowBase get contentWindow => _blink.BlinkHTMLIFrameElement.$contentWindow_Getter(this);
+  WindowBase get contentWindow => _blink.BlinkHTMLIFrameElement.contentWindow_Getter(this);
 
   @DomName('HTMLIFrameElement.height')
   @DocsEditable()
-  String get height => _blink.BlinkHTMLIFrameElement.$height_Getter(this);
+  String get height => _blink.BlinkHTMLIFrameElement.height_Getter(this);
 
   @DomName('HTMLIFrameElement.height')
   @DocsEditable()
-  void set height(String value) => _blink.BlinkHTMLIFrameElement.$height_Setter(this, value);
+  void set height(String value) => _blink.BlinkHTMLIFrameElement.height_Setter_DOMString(this, value);
 
   @DomName('HTMLIFrameElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLIFrameElement.$name_Getter(this);
+  String get name => _blink.BlinkHTMLIFrameElement.name_Getter(this);
 
   @DomName('HTMLIFrameElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLIFrameElement.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkHTMLIFrameElement.name_Setter_DOMString(this, value);
 
   @DomName('HTMLIFrameElement.sandbox')
   @DocsEditable()
-  String get sandbox => _blink.BlinkHTMLIFrameElement.$sandbox_Getter(this);
+  String get sandbox => _blink.BlinkHTMLIFrameElement.sandbox_Getter(this);
 
   @DomName('HTMLIFrameElement.sandbox')
   @DocsEditable()
-  void set sandbox(String value) => _blink.BlinkHTMLIFrameElement.$sandbox_Setter(this, value);
+  void set sandbox(String value) => _blink.BlinkHTMLIFrameElement.sandbox_Setter_DOMString(this, value);
 
   @DomName('HTMLIFrameElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLIFrameElement.$src_Getter(this);
+  String get src => _blink.BlinkHTMLIFrameElement.src_Getter(this);
 
   @DomName('HTMLIFrameElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLIFrameElement.$src_Setter(this, value);
+  void set src(String value) => _blink.BlinkHTMLIFrameElement.src_Setter_DOMString(this, value);
 
   @DomName('HTMLIFrameElement.srcdoc')
   @DocsEditable()
-  String get srcdoc => _blink.BlinkHTMLIFrameElement.$srcdoc_Getter(this);
+  String get srcdoc => _blink.BlinkHTMLIFrameElement.srcdoc_Getter(this);
 
   @DomName('HTMLIFrameElement.srcdoc')
   @DocsEditable()
-  void set srcdoc(String value) => _blink.BlinkHTMLIFrameElement.$srcdoc_Setter(this, value);
+  void set srcdoc(String value) => _blink.BlinkHTMLIFrameElement.srcdoc_Setter_DOMString(this, value);
 
   @DomName('HTMLIFrameElement.width')
   @DocsEditable()
-  String get width => _blink.BlinkHTMLIFrameElement.$width_Getter(this);
+  String get width => _blink.BlinkHTMLIFrameElement.width_Getter(this);
 
   @DomName('HTMLIFrameElement.width')
   @DocsEditable()
-  void set width(String value) => _blink.BlinkHTMLIFrameElement.$width_Setter(this, value);
+  void set width(String value) => _blink.BlinkHTMLIFrameElement.width_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16700,12 +16700,12 @@
   @DomName('ImageBitmap.height')
   @DocsEditable()
   @Experimental() // untriaged
-  int get height => _blink.BlinkImageBitmap.$height_Getter(this);
+  int get height => _blink.BlinkImageBitmap.height_Getter(this);
 
   @DomName('ImageBitmap.width')
   @DocsEditable()
   @Experimental() // untriaged
-  int get width => _blink.BlinkImageBitmap.$width_Getter(this);
+  int get width => _blink.BlinkImageBitmap.width_Getter(this);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -16728,15 +16728,15 @@
 
   @DomName('ImageData.data')
   @DocsEditable()
-  List<int> get _data => _blink.BlinkImageData.$data_Getter(this);
+  List<int> get _data => _blink.BlinkImageData.data_Getter(this);
 
   @DomName('ImageData.height')
   @DocsEditable()
-  int get height => _blink.BlinkImageData.$height_Getter(this);
+  int get height => _blink.BlinkImageData.height_Getter(this);
 
   @DomName('ImageData.width')
   @DocsEditable()
-  int get width => _blink.BlinkImageData.$width_Getter(this);
+  int get width => _blink.BlinkImageData.width_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16767,81 +16767,81 @@
 
   @DomName('HTMLImageElement.alt')
   @DocsEditable()
-  String get alt => _blink.BlinkHTMLImageElement.$alt_Getter(this);
+  String get alt => _blink.BlinkHTMLImageElement.alt_Getter(this);
 
   @DomName('HTMLImageElement.alt')
   @DocsEditable()
-  void set alt(String value) => _blink.BlinkHTMLImageElement.$alt_Setter(this, value);
+  void set alt(String value) => _blink.BlinkHTMLImageElement.alt_Setter_DOMString(this, value);
 
   @DomName('HTMLImageElement.complete')
   @DocsEditable()
-  bool get complete => _blink.BlinkHTMLImageElement.$complete_Getter(this);
+  bool get complete => _blink.BlinkHTMLImageElement.complete_Getter(this);
 
   @DomName('HTMLImageElement.crossOrigin')
   @DocsEditable()
-  String get crossOrigin => _blink.BlinkHTMLImageElement.$crossOrigin_Getter(this);
+  String get crossOrigin => _blink.BlinkHTMLImageElement.crossOrigin_Getter(this);
 
   @DomName('HTMLImageElement.crossOrigin')
   @DocsEditable()
-  void set crossOrigin(String value) => _blink.BlinkHTMLImageElement.$crossOrigin_Setter(this, value);
+  void set crossOrigin(String value) => _blink.BlinkHTMLImageElement.crossOrigin_Setter_DOMString(this, value);
 
   @DomName('HTMLImageElement.height')
   @DocsEditable()
-  int get height => _blink.BlinkHTMLImageElement.$height_Getter(this);
+  int get height => _blink.BlinkHTMLImageElement.height_Getter(this);
 
   @DomName('HTMLImageElement.height')
   @DocsEditable()
-  void set height(int value) => _blink.BlinkHTMLImageElement.$height_Setter(this, value);
+  void set height(int value) => _blink.BlinkHTMLImageElement.height_Setter_long(this, value);
 
   @DomName('HTMLImageElement.isMap')
   @DocsEditable()
-  bool get isMap => _blink.BlinkHTMLImageElement.$isMap_Getter(this);
+  bool get isMap => _blink.BlinkHTMLImageElement.isMap_Getter(this);
 
   @DomName('HTMLImageElement.isMap')
   @DocsEditable()
-  void set isMap(bool value) => _blink.BlinkHTMLImageElement.$isMap_Setter(this, value);
+  void set isMap(bool value) => _blink.BlinkHTMLImageElement.isMap_Setter_boolean(this, value);
 
   @DomName('HTMLImageElement.naturalHeight')
   @DocsEditable()
-  int get naturalHeight => _blink.BlinkHTMLImageElement.$naturalHeight_Getter(this);
+  int get naturalHeight => _blink.BlinkHTMLImageElement.naturalHeight_Getter(this);
 
   @DomName('HTMLImageElement.naturalWidth')
   @DocsEditable()
-  int get naturalWidth => _blink.BlinkHTMLImageElement.$naturalWidth_Getter(this);
+  int get naturalWidth => _blink.BlinkHTMLImageElement.naturalWidth_Getter(this);
 
   @DomName('HTMLImageElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLImageElement.$src_Getter(this);
+  String get src => _blink.BlinkHTMLImageElement.src_Getter(this);
 
   @DomName('HTMLImageElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLImageElement.$src_Setter(this, value);
+  void set src(String value) => _blink.BlinkHTMLImageElement.src_Setter_DOMString(this, value);
 
   @DomName('HTMLImageElement.srcset')
   @DocsEditable()
   @Experimental() // untriaged
-  String get srcset => _blink.BlinkHTMLImageElement.$srcset_Getter(this);
+  String get srcset => _blink.BlinkHTMLImageElement.srcset_Getter(this);
 
   @DomName('HTMLImageElement.srcset')
   @DocsEditable()
   @Experimental() // untriaged
-  void set srcset(String value) => _blink.BlinkHTMLImageElement.$srcset_Setter(this, value);
+  void set srcset(String value) => _blink.BlinkHTMLImageElement.srcset_Setter_DOMString(this, value);
 
   @DomName('HTMLImageElement.useMap')
   @DocsEditable()
-  String get useMap => _blink.BlinkHTMLImageElement.$useMap_Getter(this);
+  String get useMap => _blink.BlinkHTMLImageElement.useMap_Getter(this);
 
   @DomName('HTMLImageElement.useMap')
   @DocsEditable()
-  void set useMap(String value) => _blink.BlinkHTMLImageElement.$useMap_Setter(this, value);
+  void set useMap(String value) => _blink.BlinkHTMLImageElement.useMap_Setter_DOMString(this, value);
 
   @DomName('HTMLImageElement.width')
   @DocsEditable()
-  int get width => _blink.BlinkHTMLImageElement.$width_Getter(this);
+  int get width => _blink.BlinkHTMLImageElement.width_Getter(this);
 
   @DomName('HTMLImageElement.width')
   @DocsEditable()
-  void set width(int value) => _blink.BlinkHTMLImageElement.$width_Setter(this, value);
+  void set width(int value) => _blink.BlinkHTMLImageElement.width_Setter_long(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16861,7 +16861,7 @@
   @DomName('InjectedScriptHost.inspect')
   @DocsEditable()
   @Experimental() // untriaged
-  void inspect(Object objectId, Object hints) => _blink.BlinkInjectedScriptHost.$inspect_Callback(this, objectId, hints);
+  void inspect(Object objectId, Object hints) => _blink.BlinkInjectedScriptHost.inspect_Callback_ScriptValue_ScriptValue(this, objectId, hints);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16929,333 +16929,333 @@
 
   @DomName('HTMLInputElement.accept')
   @DocsEditable()
-  String get accept => _blink.BlinkHTMLInputElement.$accept_Getter(this);
+  String get accept => _blink.BlinkHTMLInputElement.accept_Getter(this);
 
   @DomName('HTMLInputElement.accept')
   @DocsEditable()
-  void set accept(String value) => _blink.BlinkHTMLInputElement.$accept_Setter(this, value);
+  void set accept(String value) => _blink.BlinkHTMLInputElement.accept_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.alt')
   @DocsEditable()
-  String get alt => _blink.BlinkHTMLInputElement.$alt_Getter(this);
+  String get alt => _blink.BlinkHTMLInputElement.alt_Getter(this);
 
   @DomName('HTMLInputElement.alt')
   @DocsEditable()
-  void set alt(String value) => _blink.BlinkHTMLInputElement.$alt_Setter(this, value);
+  void set alt(String value) => _blink.BlinkHTMLInputElement.alt_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.autocomplete')
   @DocsEditable()
-  String get autocomplete => _blink.BlinkHTMLInputElement.$autocomplete_Getter(this);
+  String get autocomplete => _blink.BlinkHTMLInputElement.autocomplete_Getter(this);
 
   @DomName('HTMLInputElement.autocomplete')
   @DocsEditable()
-  void set autocomplete(String value) => _blink.BlinkHTMLInputElement.$autocomplete_Setter(this, value);
+  void set autocomplete(String value) => _blink.BlinkHTMLInputElement.autocomplete_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.autofocus')
   @DocsEditable()
-  bool get autofocus => _blink.BlinkHTMLInputElement.$autofocus_Getter(this);
+  bool get autofocus => _blink.BlinkHTMLInputElement.autofocus_Getter(this);
 
   @DomName('HTMLInputElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLInputElement.$autofocus_Setter(this, value);
+  void set autofocus(bool value) => _blink.BlinkHTMLInputElement.autofocus_Setter_boolean(this, value);
 
   @DomName('HTMLInputElement.checked')
   @DocsEditable()
-  bool get checked => _blink.BlinkHTMLInputElement.$checked_Getter(this);
+  bool get checked => _blink.BlinkHTMLInputElement.checked_Getter(this);
 
   @DomName('HTMLInputElement.checked')
   @DocsEditable()
-  void set checked(bool value) => _blink.BlinkHTMLInputElement.$checked_Setter(this, value);
+  void set checked(bool value) => _blink.BlinkHTMLInputElement.checked_Setter_boolean(this, value);
 
   @DomName('HTMLInputElement.defaultChecked')
   @DocsEditable()
-  bool get defaultChecked => _blink.BlinkHTMLInputElement.$defaultChecked_Getter(this);
+  bool get defaultChecked => _blink.BlinkHTMLInputElement.defaultChecked_Getter(this);
 
   @DomName('HTMLInputElement.defaultChecked')
   @DocsEditable()
-  void set defaultChecked(bool value) => _blink.BlinkHTMLInputElement.$defaultChecked_Setter(this, value);
+  void set defaultChecked(bool value) => _blink.BlinkHTMLInputElement.defaultChecked_Setter_boolean(this, value);
 
   @DomName('HTMLInputElement.defaultValue')
   @DocsEditable()
-  String get defaultValue => _blink.BlinkHTMLInputElement.$defaultValue_Getter(this);
+  String get defaultValue => _blink.BlinkHTMLInputElement.defaultValue_Getter(this);
 
   @DomName('HTMLInputElement.defaultValue')
   @DocsEditable()
-  void set defaultValue(String value) => _blink.BlinkHTMLInputElement.$defaultValue_Setter(this, value);
+  void set defaultValue(String value) => _blink.BlinkHTMLInputElement.defaultValue_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.dirName')
   @DocsEditable()
-  String get dirName => _blink.BlinkHTMLInputElement.$dirName_Getter(this);
+  String get dirName => _blink.BlinkHTMLInputElement.dirName_Getter(this);
 
   @DomName('HTMLInputElement.dirName')
   @DocsEditable()
-  void set dirName(String value) => _blink.BlinkHTMLInputElement.$dirName_Setter(this, value);
+  void set dirName(String value) => _blink.BlinkHTMLInputElement.dirName_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLInputElement.$disabled_Getter(this);
+  bool get disabled => _blink.BlinkHTMLInputElement.disabled_Getter(this);
 
   @DomName('HTMLInputElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLInputElement.$disabled_Setter(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLInputElement.disabled_Setter_boolean(this, value);
 
   @DomName('HTMLInputElement.files')
   @DocsEditable()
-  List<File> get files => _blink.BlinkHTMLInputElement.$files_Getter(this);
+  List<File> get files => _blink.BlinkHTMLInputElement.files_Getter(this);
 
   @DomName('HTMLInputElement.files')
   @DocsEditable()
-  void set files(List<File> value) => _blink.BlinkHTMLInputElement.$files_Setter(this, value);
+  void set files(List<File> value) => _blink.BlinkHTMLInputElement.files_Setter_FileList(this, value);
 
   @DomName('HTMLInputElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLInputElement.$form_Getter(this);
+  FormElement get form => _blink.BlinkHTMLInputElement.form_Getter(this);
 
   @DomName('HTMLInputElement.formAction')
   @DocsEditable()
-  String get formAction => _blink.BlinkHTMLInputElement.$formAction_Getter(this);
+  String get formAction => _blink.BlinkHTMLInputElement.formAction_Getter(this);
 
   @DomName('HTMLInputElement.formAction')
   @DocsEditable()
-  void set formAction(String value) => _blink.BlinkHTMLInputElement.$formAction_Setter(this, value);
+  void set formAction(String value) => _blink.BlinkHTMLInputElement.formAction_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.formEnctype')
   @DocsEditable()
-  String get formEnctype => _blink.BlinkHTMLInputElement.$formEnctype_Getter(this);
+  String get formEnctype => _blink.BlinkHTMLInputElement.formEnctype_Getter(this);
 
   @DomName('HTMLInputElement.formEnctype')
   @DocsEditable()
-  void set formEnctype(String value) => _blink.BlinkHTMLInputElement.$formEnctype_Setter(this, value);
+  void set formEnctype(String value) => _blink.BlinkHTMLInputElement.formEnctype_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.formMethod')
   @DocsEditable()
-  String get formMethod => _blink.BlinkHTMLInputElement.$formMethod_Getter(this);
+  String get formMethod => _blink.BlinkHTMLInputElement.formMethod_Getter(this);
 
   @DomName('HTMLInputElement.formMethod')
   @DocsEditable()
-  void set formMethod(String value) => _blink.BlinkHTMLInputElement.$formMethod_Setter(this, value);
+  void set formMethod(String value) => _blink.BlinkHTMLInputElement.formMethod_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.formNoValidate')
   @DocsEditable()
-  bool get formNoValidate => _blink.BlinkHTMLInputElement.$formNoValidate_Getter(this);
+  bool get formNoValidate => _blink.BlinkHTMLInputElement.formNoValidate_Getter(this);
 
   @DomName('HTMLInputElement.formNoValidate')
   @DocsEditable()
-  void set formNoValidate(bool value) => _blink.BlinkHTMLInputElement.$formNoValidate_Setter(this, value);
+  void set formNoValidate(bool value) => _blink.BlinkHTMLInputElement.formNoValidate_Setter_boolean(this, value);
 
   @DomName('HTMLInputElement.formTarget')
   @DocsEditable()
-  String get formTarget => _blink.BlinkHTMLInputElement.$formTarget_Getter(this);
+  String get formTarget => _blink.BlinkHTMLInputElement.formTarget_Getter(this);
 
   @DomName('HTMLInputElement.formTarget')
   @DocsEditable()
-  void set formTarget(String value) => _blink.BlinkHTMLInputElement.$formTarget_Setter(this, value);
+  void set formTarget(String value) => _blink.BlinkHTMLInputElement.formTarget_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.height')
   @DocsEditable()
-  int get height => _blink.BlinkHTMLInputElement.$height_Getter(this);
+  int get height => _blink.BlinkHTMLInputElement.height_Getter(this);
 
   @DomName('HTMLInputElement.height')
   @DocsEditable()
-  void set height(int value) => _blink.BlinkHTMLInputElement.$height_Setter(this, value);
+  void set height(int value) => _blink.BlinkHTMLInputElement.height_Setter_ul(this, value);
 
   @DomName('HTMLInputElement.incremental')
   @DocsEditable()
   // http://www.w3.org/TR/html-markup/input.search.html
   @Experimental()
-  bool get incremental => _blink.BlinkHTMLInputElement.$incremental_Getter(this);
+  bool get incremental => _blink.BlinkHTMLInputElement.incremental_Getter(this);
 
   @DomName('HTMLInputElement.incremental')
   @DocsEditable()
   // http://www.w3.org/TR/html-markup/input.search.html
   @Experimental()
-  void set incremental(bool value) => _blink.BlinkHTMLInputElement.$incremental_Setter(this, value);
+  void set incremental(bool value) => _blink.BlinkHTMLInputElement.incremental_Setter_boolean(this, value);
 
   @DomName('HTMLInputElement.indeterminate')
   @DocsEditable()
-  bool get indeterminate => _blink.BlinkHTMLInputElement.$indeterminate_Getter(this);
+  bool get indeterminate => _blink.BlinkHTMLInputElement.indeterminate_Getter(this);
 
   @DomName('HTMLInputElement.indeterminate')
   @DocsEditable()
-  void set indeterminate(bool value) => _blink.BlinkHTMLInputElement.$indeterminate_Setter(this, value);
+  void set indeterminate(bool value) => _blink.BlinkHTMLInputElement.indeterminate_Setter_boolean(this, value);
 
   @DomName('HTMLInputElement.inputMode')
   @DocsEditable()
   @Experimental() // untriaged
-  String get inputMode => _blink.BlinkHTMLInputElement.$inputMode_Getter(this);
+  String get inputMode => _blink.BlinkHTMLInputElement.inputMode_Getter(this);
 
   @DomName('HTMLInputElement.inputMode')
   @DocsEditable()
   @Experimental() // untriaged
-  void set inputMode(String value) => _blink.BlinkHTMLInputElement.$inputMode_Setter(this, value);
+  void set inputMode(String value) => _blink.BlinkHTMLInputElement.inputMode_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.labels')
   @DocsEditable()
-  List<Node> get labels => _blink.BlinkHTMLInputElement.$labels_Getter(this);
+  List<Node> get labels => _blink.BlinkHTMLInputElement.labels_Getter(this);
 
   @DomName('HTMLInputElement.list')
   @DocsEditable()
-  HtmlElement get list => _blink.BlinkHTMLInputElement.$list_Getter(this);
+  HtmlElement get list => _blink.BlinkHTMLInputElement.list_Getter(this);
 
   @DomName('HTMLInputElement.max')
   @DocsEditable()
-  String get max => _blink.BlinkHTMLInputElement.$max_Getter(this);
+  String get max => _blink.BlinkHTMLInputElement.max_Getter(this);
 
   @DomName('HTMLInputElement.max')
   @DocsEditable()
-  void set max(String value) => _blink.BlinkHTMLInputElement.$max_Setter(this, value);
+  void set max(String value) => _blink.BlinkHTMLInputElement.max_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.maxLength')
   @DocsEditable()
-  int get maxLength => _blink.BlinkHTMLInputElement.$maxLength_Getter(this);
+  int get maxLength => _blink.BlinkHTMLInputElement.maxLength_Getter(this);
 
   @DomName('HTMLInputElement.maxLength')
   @DocsEditable()
-  void set maxLength(int value) => _blink.BlinkHTMLInputElement.$maxLength_Setter(this, value);
+  void set maxLength(int value) => _blink.BlinkHTMLInputElement.maxLength_Setter_long(this, value);
 
   @DomName('HTMLInputElement.min')
   @DocsEditable()
-  String get min => _blink.BlinkHTMLInputElement.$min_Getter(this);
+  String get min => _blink.BlinkHTMLInputElement.min_Getter(this);
 
   @DomName('HTMLInputElement.min')
   @DocsEditable()
-  void set min(String value) => _blink.BlinkHTMLInputElement.$min_Setter(this, value);
+  void set min(String value) => _blink.BlinkHTMLInputElement.min_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.multiple')
   @DocsEditable()
-  bool get multiple => _blink.BlinkHTMLInputElement.$multiple_Getter(this);
+  bool get multiple => _blink.BlinkHTMLInputElement.multiple_Getter(this);
 
   @DomName('HTMLInputElement.multiple')
   @DocsEditable()
-  void set multiple(bool value) => _blink.BlinkHTMLInputElement.$multiple_Setter(this, value);
+  void set multiple(bool value) => _blink.BlinkHTMLInputElement.multiple_Setter_boolean(this, value);
 
   @DomName('HTMLInputElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLInputElement.$name_Getter(this);
+  String get name => _blink.BlinkHTMLInputElement.name_Getter(this);
 
   @DomName('HTMLInputElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLInputElement.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkHTMLInputElement.name_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.pattern')
   @DocsEditable()
-  String get pattern => _blink.BlinkHTMLInputElement.$pattern_Getter(this);
+  String get pattern => _blink.BlinkHTMLInputElement.pattern_Getter(this);
 
   @DomName('HTMLInputElement.pattern')
   @DocsEditable()
-  void set pattern(String value) => _blink.BlinkHTMLInputElement.$pattern_Setter(this, value);
+  void set pattern(String value) => _blink.BlinkHTMLInputElement.pattern_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.placeholder')
   @DocsEditable()
-  String get placeholder => _blink.BlinkHTMLInputElement.$placeholder_Getter(this);
+  String get placeholder => _blink.BlinkHTMLInputElement.placeholder_Getter(this);
 
   @DomName('HTMLInputElement.placeholder')
   @DocsEditable()
-  void set placeholder(String value) => _blink.BlinkHTMLInputElement.$placeholder_Setter(this, value);
+  void set placeholder(String value) => _blink.BlinkHTMLInputElement.placeholder_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.readOnly')
   @DocsEditable()
-  bool get readOnly => _blink.BlinkHTMLInputElement.$readOnly_Getter(this);
+  bool get readOnly => _blink.BlinkHTMLInputElement.readOnly_Getter(this);
 
   @DomName('HTMLInputElement.readOnly')
   @DocsEditable()
-  void set readOnly(bool value) => _blink.BlinkHTMLInputElement.$readOnly_Setter(this, value);
+  void set readOnly(bool value) => _blink.BlinkHTMLInputElement.readOnly_Setter_boolean(this, value);
 
   @DomName('HTMLInputElement.required')
   @DocsEditable()
-  bool get required => _blink.BlinkHTMLInputElement.$required_Getter(this);
+  bool get required => _blink.BlinkHTMLInputElement.required_Getter(this);
 
   @DomName('HTMLInputElement.required')
   @DocsEditable()
-  void set required(bool value) => _blink.BlinkHTMLInputElement.$required_Setter(this, value);
+  void set required(bool value) => _blink.BlinkHTMLInputElement.required_Setter_boolean(this, value);
 
   @DomName('HTMLInputElement.selectionDirection')
   @DocsEditable()
-  String get selectionDirection => _blink.BlinkHTMLInputElement.$selectionDirection_Getter(this);
+  String get selectionDirection => _blink.BlinkHTMLInputElement.selectionDirection_Getter(this);
 
   @DomName('HTMLInputElement.selectionDirection')
   @DocsEditable()
-  void set selectionDirection(String value) => _blink.BlinkHTMLInputElement.$selectionDirection_Setter(this, value);
+  void set selectionDirection(String value) => _blink.BlinkHTMLInputElement.selectionDirection_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.selectionEnd')
   @DocsEditable()
-  int get selectionEnd => _blink.BlinkHTMLInputElement.$selectionEnd_Getter(this);
+  int get selectionEnd => _blink.BlinkHTMLInputElement.selectionEnd_Getter(this);
 
   @DomName('HTMLInputElement.selectionEnd')
   @DocsEditable()
-  void set selectionEnd(int value) => _blink.BlinkHTMLInputElement.$selectionEnd_Setter(this, value);
+  void set selectionEnd(int value) => _blink.BlinkHTMLInputElement.selectionEnd_Setter_long(this, value);
 
   @DomName('HTMLInputElement.selectionStart')
   @DocsEditable()
-  int get selectionStart => _blink.BlinkHTMLInputElement.$selectionStart_Getter(this);
+  int get selectionStart => _blink.BlinkHTMLInputElement.selectionStart_Getter(this);
 
   @DomName('HTMLInputElement.selectionStart')
   @DocsEditable()
-  void set selectionStart(int value) => _blink.BlinkHTMLInputElement.$selectionStart_Setter(this, value);
+  void set selectionStart(int value) => _blink.BlinkHTMLInputElement.selectionStart_Setter_long(this, value);
 
   @DomName('HTMLInputElement.size')
   @DocsEditable()
-  int get size => _blink.BlinkHTMLInputElement.$size_Getter(this);
+  int get size => _blink.BlinkHTMLInputElement.size_Getter(this);
 
   @DomName('HTMLInputElement.size')
   @DocsEditable()
-  void set size(int value) => _blink.BlinkHTMLInputElement.$size_Setter(this, value);
+  void set size(int value) => _blink.BlinkHTMLInputElement.size_Setter_ul(this, value);
 
   @DomName('HTMLInputElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLInputElement.$src_Getter(this);
+  String get src => _blink.BlinkHTMLInputElement.src_Getter(this);
 
   @DomName('HTMLInputElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLInputElement.$src_Setter(this, value);
+  void set src(String value) => _blink.BlinkHTMLInputElement.src_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.step')
   @DocsEditable()
-  String get step => _blink.BlinkHTMLInputElement.$step_Getter(this);
+  String get step => _blink.BlinkHTMLInputElement.step_Getter(this);
 
   @DomName('HTMLInputElement.step')
   @DocsEditable()
-  void set step(String value) => _blink.BlinkHTMLInputElement.$step_Setter(this, value);
+  void set step(String value) => _blink.BlinkHTMLInputElement.step_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLInputElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLInputElement.type_Getter(this);
 
   @DomName('HTMLInputElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLInputElement.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkHTMLInputElement.type_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLInputElement.$validationMessage_Getter(this);
+  String get validationMessage => _blink.BlinkHTMLInputElement.validationMessage_Getter(this);
 
   @DomName('HTMLInputElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLInputElement.$validity_Getter(this);
+  ValidityState get validity => _blink.BlinkHTMLInputElement.validity_Getter(this);
 
   @DomName('HTMLInputElement.value')
   @DocsEditable()
-  String get value => _blink.BlinkHTMLInputElement.$value_Getter(this);
+  String get value => _blink.BlinkHTMLInputElement.value_Getter(this);
 
   @DomName('HTMLInputElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLInputElement.$value_Setter(this, value);
+  void set value(String value) => _blink.BlinkHTMLInputElement.value_Setter_DOMString(this, value);
 
   @DomName('HTMLInputElement.valueAsDate')
   @DocsEditable()
-  DateTime get valueAsDate => _blink.BlinkHTMLInputElement.$valueAsDate_Getter(this);
+  DateTime get valueAsDate => _blink.BlinkHTMLInputElement.valueAsDate_Getter(this);
 
   @DomName('HTMLInputElement.valueAsDate')
   @DocsEditable()
-  void set valueAsDate(DateTime value) => _blink.BlinkHTMLInputElement.$valueAsDate_Setter(this, value);
+  void set valueAsDate(DateTime value) => _blink.BlinkHTMLInputElement.valueAsDate_Setter_Date(this, value);
 
   @DomName('HTMLInputElement.valueAsNumber')
   @DocsEditable()
-  num get valueAsNumber => _blink.BlinkHTMLInputElement.$valueAsNumber_Getter(this);
+  num get valueAsNumber => _blink.BlinkHTMLInputElement.valueAsNumber_Getter(this);
 
   @DomName('HTMLInputElement.valueAsNumber')
   @DocsEditable()
-  void set valueAsNumber(num value) => _blink.BlinkHTMLInputElement.$valueAsNumber_Setter(this, value);
+  void set valueAsNumber(num value) => _blink.BlinkHTMLInputElement.valueAsNumber_Setter_double(this, value);
 
   @DomName('HTMLInputElement.webkitEntries')
   @DocsEditable()
@@ -17263,7 +17263,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#concept-input-type-file-selected
-  List<Entry> get entries => _blink.BlinkHTMLInputElement.$webkitEntries_Getter(this);
+  List<Entry> get entries => _blink.BlinkHTMLInputElement.webkitEntries_Getter(this);
 
   @DomName('HTMLInputElement.webkitdirectory')
   @DocsEditable()
@@ -17271,7 +17271,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://plus.sandbox.google.com/+AddyOsmani/posts/Dk5UhZ6zfF3
-  bool get directory => _blink.BlinkHTMLInputElement.$webkitdirectory_Getter(this);
+  bool get directory => _blink.BlinkHTMLInputElement.webkitdirectory_Getter(this);
 
   @DomName('HTMLInputElement.webkitdirectory')
   @DocsEditable()
@@ -17279,39 +17279,39 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://plus.sandbox.google.com/+AddyOsmani/posts/Dk5UhZ6zfF3
-  void set directory(bool value) => _blink.BlinkHTMLInputElement.$webkitdirectory_Setter(this, value);
+  void set directory(bool value) => _blink.BlinkHTMLInputElement.webkitdirectory_Setter_boolean(this, value);
 
   @DomName('HTMLInputElement.width')
   @DocsEditable()
-  int get width => _blink.BlinkHTMLInputElement.$width_Getter(this);
+  int get width => _blink.BlinkHTMLInputElement.width_Getter(this);
 
   @DomName('HTMLInputElement.width')
   @DocsEditable()
-  void set width(int value) => _blink.BlinkHTMLInputElement.$width_Setter(this, value);
+  void set width(int value) => _blink.BlinkHTMLInputElement.width_Setter_ul(this, value);
 
   @DomName('HTMLInputElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLInputElement.$willValidate_Getter(this);
+  bool get willValidate => _blink.BlinkHTMLInputElement.willValidate_Getter(this);
 
   @DomName('HTMLInputElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLInputElement.$checkValidity_Callback(this);
+  bool checkValidity() => _blink.BlinkHTMLInputElement.checkValidity_Callback(this);
 
   @DomName('HTMLInputElement.select')
   @DocsEditable()
-  void select() => _blink.BlinkHTMLInputElement.$select_Callback(this);
+  void select() => _blink.BlinkHTMLInputElement.select_Callback(this);
 
   @DomName('HTMLInputElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLInputElement.$setCustomValidity_Callback(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLInputElement.setCustomValidity_Callback_DOMString(this, error);
 
   void setRangeText(String replacement, {int start, int end, String selectionMode}) {
     if ((replacement is String || replacement == null) && start == null && end == null && selectionMode == null) {
-      _blink.BlinkHTMLInputElement.$_setRangeText_1_Callback(this, replacement);
+      _blink.BlinkHTMLInputElement.setRangeText_Callback_DOMString(this, replacement);
       return;
     }
     if ((selectionMode is String || selectionMode == null) && (end is int || end == null) && (start is int || start == null) && (replacement is String || replacement == null)) {
-      _blink.BlinkHTMLInputElement.$_setRangeText_2_Callback(this, replacement, start, end, selectionMode);
+      _blink.BlinkHTMLInputElement.setRangeText_Callback_DOMString_ul_ul_DOMString(this, replacement, start, end, selectionMode);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -17319,28 +17319,28 @@
 
   void setSelectionRange(int start, int end, [String direction]) {
     if (direction != null) {
-      _blink.BlinkHTMLInputElement.$_setSelectionRange_1_Callback(this, start, end, direction);
+      _blink.BlinkHTMLInputElement.setSelectionRange_Callback_long_long_DOMString(this, start, end, direction);
       return;
     }
-    _blink.BlinkHTMLInputElement.$_setSelectionRange_2_Callback(this, start, end);
+    _blink.BlinkHTMLInputElement.setSelectionRange_Callback_long_long(this, start, end);
     return;
   }
 
   void stepDown([int n]) {
     if (n != null) {
-      _blink.BlinkHTMLInputElement.$_stepDown_1_Callback(this, n);
+      _blink.BlinkHTMLInputElement.stepDown_Callback_long(this, n);
       return;
     }
-    _blink.BlinkHTMLInputElement.$_stepDown_2_Callback(this);
+    _blink.BlinkHTMLInputElement.stepDown_Callback(this);
     return;
   }
 
   void stepUp([int n]) {
     if (n != null) {
-      _blink.BlinkHTMLInputElement.$_stepUp_1_Callback(this, n);
+      _blink.BlinkHTMLInputElement.stepUp_Callback_long(this, n);
       return;
     }
-    _blink.BlinkHTMLInputElement.$_stepUp_2_Callback(this);
+    _blink.BlinkHTMLInputElement.stepUp_Callback(this);
     return;
   }
 
@@ -17925,25 +17925,25 @@
   @DomName('InputMethodContext.compositionEndOffset')
   @DocsEditable()
   @Experimental() // untriaged
-  int get compositionEndOffset => _blink.BlinkInputMethodContext.$compositionEndOffset_Getter(this);
+  int get compositionEndOffset => _blink.BlinkInputMethodContext.compositionEndOffset_Getter(this);
 
   @DomName('InputMethodContext.compositionStartOffset')
   @DocsEditable()
   @Experimental() // untriaged
-  int get compositionStartOffset => _blink.BlinkInputMethodContext.$compositionStartOffset_Getter(this);
+  int get compositionStartOffset => _blink.BlinkInputMethodContext.compositionStartOffset_Getter(this);
 
   @DomName('InputMethodContext.locale')
   @DocsEditable()
-  String get locale => _blink.BlinkInputMethodContext.$locale_Getter(this);
+  String get locale => _blink.BlinkInputMethodContext.locale_Getter(this);
 
   @DomName('InputMethodContext.target')
   @DocsEditable()
   @Experimental() // untriaged
-  HtmlElement get target => _blink.BlinkInputMethodContext.$target_Getter(this);
+  HtmlElement get target => _blink.BlinkInputMethodContext.target_Getter(this);
 
   @DomName('InputMethodContext.confirmComposition')
   @DocsEditable()
-  void confirmComposition() => _blink.BlinkInputMethodContext.$confirmComposition_Callback(this);
+  void confirmComposition() => _blink.BlinkInputMethodContext.confirmComposition_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17963,7 +17963,7 @@
   @DomName('InstallEvent.replace')
   @DocsEditable()
   @Experimental() // untriaged
-  void replace() => _blink.BlinkInstallEvent.$replace_Callback(this);
+  void replace() => _blink.BlinkInstallEvent.replace_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17983,7 +17983,7 @@
   @DomName('InstallPhaseEvent.waitUntil')
   @DocsEditable()
   @Experimental() // untriaged
-  void waitUntil(Object value) => _blink.BlinkInstallPhaseEvent.$waitUntil_Callback(this, value);
+  void waitUntil(Object value) => _blink.BlinkInstallPhaseEvent.waitUntil_Callback_ScriptValue(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18003,12 +18003,12 @@
   @DomName('KeyPair.privateKey')
   @DocsEditable()
   @Experimental() // untriaged
-  CryptoKey get privateKey => _blink.BlinkKeyPair.$privateKey_Getter(this);
+  CryptoKey get privateKey => _blink.BlinkKeyPair.privateKey_Getter(this);
 
   @DomName('KeyPair.publicKey')
   @DocsEditable()
   @Experimental() // untriaged
-  CryptoKey get publicKey => _blink.BlinkKeyPair.$publicKey_Getter(this);
+  CryptoKey get publicKey => _blink.BlinkKeyPair.publicKey_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18064,52 +18064,52 @@
   @DomName('KeyboardEvent.altGraphKey')
   @DocsEditable()
   @Experimental() // nonstandard
-  bool get altGraphKey => _blink.BlinkKeyboardEvent.$altGraphKey_Getter(this);
+  bool get altGraphKey => _blink.BlinkKeyboardEvent.altGraphKey_Getter(this);
 
   @DomName('KeyboardEvent.altKey')
   @DocsEditable()
-  bool get altKey => _blink.BlinkKeyboardEvent.$altKey_Getter(this);
+  bool get altKey => _blink.BlinkKeyboardEvent.altKey_Getter(this);
 
   @DomName('KeyboardEvent.ctrlKey')
   @DocsEditable()
-  bool get ctrlKey => _blink.BlinkKeyboardEvent.$ctrlKey_Getter(this);
+  bool get ctrlKey => _blink.BlinkKeyboardEvent.ctrlKey_Getter(this);
 
   @DomName('KeyboardEvent.keyIdentifier')
   @DocsEditable()
   @Experimental() // nonstandard
-  String get _keyIdentifier => _blink.BlinkKeyboardEvent.$keyIdentifier_Getter(this);
+  String get _keyIdentifier => _blink.BlinkKeyboardEvent.keyIdentifier_Getter(this);
 
   @DomName('KeyboardEvent.keyLocation')
   @DocsEditable()
   @Experimental() // nonstandard
-  int get keyLocation => _blink.BlinkKeyboardEvent.$keyLocation_Getter(this);
+  int get keyLocation => _blink.BlinkKeyboardEvent.keyLocation_Getter(this);
 
   @DomName('KeyboardEvent.location')
   @DocsEditable()
   @Experimental() // untriaged
-  int get location => _blink.BlinkKeyboardEvent.$location_Getter(this);
+  int get location => _blink.BlinkKeyboardEvent.location_Getter(this);
 
   @DomName('KeyboardEvent.metaKey')
   @DocsEditable()
-  bool get metaKey => _blink.BlinkKeyboardEvent.$metaKey_Getter(this);
+  bool get metaKey => _blink.BlinkKeyboardEvent.metaKey_Getter(this);
 
   @DomName('KeyboardEvent.repeat')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get repeat => _blink.BlinkKeyboardEvent.$repeat_Getter(this);
+  bool get repeat => _blink.BlinkKeyboardEvent.repeat_Getter(this);
 
   @DomName('KeyboardEvent.shiftKey')
   @DocsEditable()
-  bool get shiftKey => _blink.BlinkKeyboardEvent.$shiftKey_Getter(this);
+  bool get shiftKey => _blink.BlinkKeyboardEvent.shiftKey_Getter(this);
 
   @DomName('KeyboardEvent.getModifierState')
   @DocsEditable()
   @Experimental() // untriaged
-  bool getModifierState(String keyArgument) => _blink.BlinkKeyboardEvent.$getModifierState_Callback(this, keyArgument);
+  bool getModifierState(String keyArgument) => _blink.BlinkKeyboardEvent.getModifierState_Callback_DOMString(this, keyArgument);
 
   @DomName('KeyboardEvent.initKeyboardEvent')
   @DocsEditable()
-  void _initKeyboardEvent(String type, bool canBubble, bool cancelable, Window view, String keyIdentifier, int location, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey) => _blink.BlinkKeyboardEvent.$initKeyboardEvent_Callback(this, type, canBubble, cancelable, view, keyIdentifier, location, ctrlKey, altKey, shiftKey, metaKey, altGraphKey);
+  void _initKeyboardEvent(String type, bool canBubble, bool cancelable, Window view, String keyIdentifier, int location, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey) => _blink.BlinkKeyboardEvent.initKeyboardEvent_Callback_DOMString_boolean_boolean_Window_DOMString_ul_boolean_boolean_boolean_boolean_boolean(this, type, canBubble, cancelable, view, keyIdentifier, location, ctrlKey, altKey, shiftKey, metaKey, altGraphKey);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18144,76 +18144,76 @@
 
   @DomName('HTMLKeygenElement.autofocus')
   @DocsEditable()
-  bool get autofocus => _blink.BlinkHTMLKeygenElement.$autofocus_Getter(this);
+  bool get autofocus => _blink.BlinkHTMLKeygenElement.autofocus_Getter(this);
 
   @DomName('HTMLKeygenElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLKeygenElement.$autofocus_Setter(this, value);
+  void set autofocus(bool value) => _blink.BlinkHTMLKeygenElement.autofocus_Setter_boolean(this, value);
 
   @DomName('HTMLKeygenElement.challenge')
   @DocsEditable()
-  String get challenge => _blink.BlinkHTMLKeygenElement.$challenge_Getter(this);
+  String get challenge => _blink.BlinkHTMLKeygenElement.challenge_Getter(this);
 
   @DomName('HTMLKeygenElement.challenge')
   @DocsEditable()
-  void set challenge(String value) => _blink.BlinkHTMLKeygenElement.$challenge_Setter(this, value);
+  void set challenge(String value) => _blink.BlinkHTMLKeygenElement.challenge_Setter_DOMString(this, value);
 
   @DomName('HTMLKeygenElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLKeygenElement.$disabled_Getter(this);
+  bool get disabled => _blink.BlinkHTMLKeygenElement.disabled_Getter(this);
 
   @DomName('HTMLKeygenElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLKeygenElement.$disabled_Setter(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLKeygenElement.disabled_Setter_boolean(this, value);
 
   @DomName('HTMLKeygenElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLKeygenElement.$form_Getter(this);
+  FormElement get form => _blink.BlinkHTMLKeygenElement.form_Getter(this);
 
   @DomName('HTMLKeygenElement.keytype')
   @DocsEditable()
-  String get keytype => _blink.BlinkHTMLKeygenElement.$keytype_Getter(this);
+  String get keytype => _blink.BlinkHTMLKeygenElement.keytype_Getter(this);
 
   @DomName('HTMLKeygenElement.keytype')
   @DocsEditable()
-  void set keytype(String value) => _blink.BlinkHTMLKeygenElement.$keytype_Setter(this, value);
+  void set keytype(String value) => _blink.BlinkHTMLKeygenElement.keytype_Setter_DOMString(this, value);
 
   @DomName('HTMLKeygenElement.labels')
   @DocsEditable()
   @Unstable()
-  List<Node> get labels => _blink.BlinkHTMLKeygenElement.$labels_Getter(this);
+  List<Node> get labels => _blink.BlinkHTMLKeygenElement.labels_Getter(this);
 
   @DomName('HTMLKeygenElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLKeygenElement.$name_Getter(this);
+  String get name => _blink.BlinkHTMLKeygenElement.name_Getter(this);
 
   @DomName('HTMLKeygenElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLKeygenElement.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkHTMLKeygenElement.name_Setter_DOMString(this, value);
 
   @DomName('HTMLKeygenElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLKeygenElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLKeygenElement.type_Getter(this);
 
   @DomName('HTMLKeygenElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLKeygenElement.$validationMessage_Getter(this);
+  String get validationMessage => _blink.BlinkHTMLKeygenElement.validationMessage_Getter(this);
 
   @DomName('HTMLKeygenElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLKeygenElement.$validity_Getter(this);
+  ValidityState get validity => _blink.BlinkHTMLKeygenElement.validity_Getter(this);
 
   @DomName('HTMLKeygenElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLKeygenElement.$willValidate_Getter(this);
+  bool get willValidate => _blink.BlinkHTMLKeygenElement.willValidate_Getter(this);
 
   @DomName('HTMLKeygenElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLKeygenElement.$checkValidity_Callback(this);
+  bool checkValidity() => _blink.BlinkHTMLKeygenElement.checkValidity_Callback(this);
 
   @DomName('HTMLKeygenElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLKeygenElement.$setCustomValidity_Callback(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLKeygenElement.setCustomValidity_Callback_DOMString(this, error);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18241,11 +18241,11 @@
 
   @DomName('HTMLLIElement.value')
   @DocsEditable()
-  int get value => _blink.BlinkHTMLLIElement.$value_Getter(this);
+  int get value => _blink.BlinkHTMLLIElement.value_Getter(this);
 
   @DomName('HTMLLIElement.value')
   @DocsEditable()
-  void set value(int value) => _blink.BlinkHTMLLIElement.$value_Setter(this, value);
+  void set value(int value) => _blink.BlinkHTMLLIElement.value_Setter_long(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18273,19 +18273,19 @@
 
   @DomName('HTMLLabelElement.control')
   @DocsEditable()
-  HtmlElement get control => _blink.BlinkHTMLLabelElement.$control_Getter(this);
+  HtmlElement get control => _blink.BlinkHTMLLabelElement.control_Getter(this);
 
   @DomName('HTMLLabelElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLLabelElement.$form_Getter(this);
+  FormElement get form => _blink.BlinkHTMLLabelElement.form_Getter(this);
 
   @DomName('HTMLLabelElement.htmlFor')
   @DocsEditable()
-  String get htmlFor => _blink.BlinkHTMLLabelElement.$htmlFor_Getter(this);
+  String get htmlFor => _blink.BlinkHTMLLabelElement.htmlFor_Getter(this);
 
   @DomName('HTMLLabelElement.htmlFor')
   @DocsEditable()
-  void set htmlFor(String value) => _blink.BlinkHTMLLabelElement.$htmlFor_Setter(this, value);
+  void set htmlFor(String value) => _blink.BlinkHTMLLabelElement.htmlFor_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18313,7 +18313,7 @@
 
   @DomName('HTMLLegendElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLLegendElement.$form_Getter(this);
+  FormElement get form => _blink.BlinkHTMLLegendElement.form_Getter(this);
 
 }
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
@@ -18340,74 +18340,74 @@
   @DomName('HTMLLinkElement.crossOrigin')
   @DocsEditable()
   @Experimental() // untriaged
-  String get crossOrigin => _blink.BlinkHTMLLinkElement.$crossOrigin_Getter(this);
+  String get crossOrigin => _blink.BlinkHTMLLinkElement.crossOrigin_Getter(this);
 
   @DomName('HTMLLinkElement.crossOrigin')
   @DocsEditable()
   @Experimental() // untriaged
-  void set crossOrigin(String value) => _blink.BlinkHTMLLinkElement.$crossOrigin_Setter(this, value);
+  void set crossOrigin(String value) => _blink.BlinkHTMLLinkElement.crossOrigin_Setter_DOMString(this, value);
 
   @DomName('HTMLLinkElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLLinkElement.$disabled_Getter(this);
+  bool get disabled => _blink.BlinkHTMLLinkElement.disabled_Getter(this);
 
   @DomName('HTMLLinkElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLLinkElement.$disabled_Setter(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLLinkElement.disabled_Setter_boolean(this, value);
 
   @DomName('HTMLLinkElement.href')
   @DocsEditable()
-  String get href => _blink.BlinkHTMLLinkElement.$href_Getter(this);
+  String get href => _blink.BlinkHTMLLinkElement.href_Getter(this);
 
   @DomName('HTMLLinkElement.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkHTMLLinkElement.$href_Setter(this, value);
+  void set href(String value) => _blink.BlinkHTMLLinkElement.href_Setter_DOMString(this, value);
 
   @DomName('HTMLLinkElement.hreflang')
   @DocsEditable()
-  String get hreflang => _blink.BlinkHTMLLinkElement.$hreflang_Getter(this);
+  String get hreflang => _blink.BlinkHTMLLinkElement.hreflang_Getter(this);
 
   @DomName('HTMLLinkElement.hreflang')
   @DocsEditable()
-  void set hreflang(String value) => _blink.BlinkHTMLLinkElement.$hreflang_Setter(this, value);
+  void set hreflang(String value) => _blink.BlinkHTMLLinkElement.hreflang_Setter_DOMString(this, value);
 
   @DomName('HTMLLinkElement.import')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/imports/index.html#interface-import
   @Experimental()
-  Document get import => _blink.BlinkHTMLLinkElement.$import_Getter(this);
+  Document get import => _blink.BlinkHTMLLinkElement.import_Getter(this);
 
   @DomName('HTMLLinkElement.media')
   @DocsEditable()
-  String get media => _blink.BlinkHTMLLinkElement.$media_Getter(this);
+  String get media => _blink.BlinkHTMLLinkElement.media_Getter(this);
 
   @DomName('HTMLLinkElement.media')
   @DocsEditable()
-  void set media(String value) => _blink.BlinkHTMLLinkElement.$media_Setter(this, value);
+  void set media(String value) => _blink.BlinkHTMLLinkElement.media_Setter_DOMString(this, value);
 
   @DomName('HTMLLinkElement.rel')
   @DocsEditable()
-  String get rel => _blink.BlinkHTMLLinkElement.$rel_Getter(this);
+  String get rel => _blink.BlinkHTMLLinkElement.rel_Getter(this);
 
   @DomName('HTMLLinkElement.rel')
   @DocsEditable()
-  void set rel(String value) => _blink.BlinkHTMLLinkElement.$rel_Setter(this, value);
+  void set rel(String value) => _blink.BlinkHTMLLinkElement.rel_Setter_DOMString(this, value);
 
   @DomName('HTMLLinkElement.sheet')
   @DocsEditable()
-  StyleSheet get sheet => _blink.BlinkHTMLLinkElement.$sheet_Getter(this);
+  StyleSheet get sheet => _blink.BlinkHTMLLinkElement.sheet_Getter(this);
 
   @DomName('HTMLLinkElement.sizes')
   @DocsEditable()
-  DomSettableTokenList get sizes => _blink.BlinkHTMLLinkElement.$sizes_Getter(this);
+  DomSettableTokenList get sizes => _blink.BlinkHTMLLinkElement.sizes_Getter(this);
 
   @DomName('HTMLLinkElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLLinkElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLLinkElement.type_Getter(this);
 
   @DomName('HTMLLinkElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLLinkElement.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkHTMLLinkElement.type_Setter_DOMString(this, value);
 
 
     /// Checks if HTML imports are supported on the current platform.
@@ -18429,93 +18429,93 @@
   @DomName('Location.ancestorOrigins')
   @DocsEditable()
   @Experimental() // nonstandard
-  List<String> get ancestorOrigins => _blink.BlinkLocation.$ancestorOrigins_Getter(this);
+  List<String> get ancestorOrigins => _blink.BlinkLocation.ancestorOrigins_Getter(this);
 
   @DomName('Location.hash')
   @DocsEditable()
-  String get hash => _blink.BlinkLocation.$hash_Getter(this);
+  String get hash => _blink.BlinkLocation.hash_Getter(this);
 
   @DomName('Location.hash')
   @DocsEditable()
-  void set hash(String value) => _blink.BlinkLocation.$hash_Setter(this, value);
+  void set hash(String value) => _blink.BlinkLocation.hash_Setter_DOMString(this, value);
 
   @DomName('Location.host')
   @DocsEditable()
-  String get host => _blink.BlinkLocation.$host_Getter(this);
+  String get host => _blink.BlinkLocation.host_Getter(this);
 
   @DomName('Location.host')
   @DocsEditable()
-  void set host(String value) => _blink.BlinkLocation.$host_Setter(this, value);
+  void set host(String value) => _blink.BlinkLocation.host_Setter_DOMString(this, value);
 
   @DomName('Location.hostname')
   @DocsEditable()
-  String get hostname => _blink.BlinkLocation.$hostname_Getter(this);
+  String get hostname => _blink.BlinkLocation.hostname_Getter(this);
 
   @DomName('Location.hostname')
   @DocsEditable()
-  void set hostname(String value) => _blink.BlinkLocation.$hostname_Setter(this, value);
+  void set hostname(String value) => _blink.BlinkLocation.hostname_Setter_DOMString(this, value);
 
   @DomName('Location.href')
   @DocsEditable()
-  String get href => _blink.BlinkLocation.$href_Getter(this);
+  String get href => _blink.BlinkLocation.href_Getter(this);
 
   @DomName('Location.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkLocation.$href_Setter(this, value);
+  void set href(String value) => _blink.BlinkLocation.href_Setter_DOMString(this, value);
 
   @DomName('Location.origin')
   @DocsEditable()
   // http://url.spec.whatwg.org/#urlutils Webkit Only
   @Experimental() // non-standard
-  String get origin => _blink.BlinkLocation.$origin_Getter(this);
+  String get origin => _blink.BlinkLocation.origin_Getter(this);
 
   @DomName('Location.pathname')
   @DocsEditable()
-  String get pathname => _blink.BlinkLocation.$pathname_Getter(this);
+  String get pathname => _blink.BlinkLocation.pathname_Getter(this);
 
   @DomName('Location.pathname')
   @DocsEditable()
-  void set pathname(String value) => _blink.BlinkLocation.$pathname_Setter(this, value);
+  void set pathname(String value) => _blink.BlinkLocation.pathname_Setter_DOMString(this, value);
 
   @DomName('Location.port')
   @DocsEditable()
-  String get port => _blink.BlinkLocation.$port_Getter(this);
+  String get port => _blink.BlinkLocation.port_Getter(this);
 
   @DomName('Location.port')
   @DocsEditable()
-  void set port(String value) => _blink.BlinkLocation.$port_Setter(this, value);
+  void set port(String value) => _blink.BlinkLocation.port_Setter_DOMString(this, value);
 
   @DomName('Location.protocol')
   @DocsEditable()
-  String get protocol => _blink.BlinkLocation.$protocol_Getter(this);
+  String get protocol => _blink.BlinkLocation.protocol_Getter(this);
 
   @DomName('Location.protocol')
   @DocsEditable()
-  void set protocol(String value) => _blink.BlinkLocation.$protocol_Setter(this, value);
+  void set protocol(String value) => _blink.BlinkLocation.protocol_Setter_DOMString(this, value);
 
   @DomName('Location.search')
   @DocsEditable()
-  String get search => _blink.BlinkLocation.$search_Getter(this);
+  String get search => _blink.BlinkLocation.search_Getter(this);
 
   @DomName('Location.search')
   @DocsEditable()
-  void set search(String value) => _blink.BlinkLocation.$search_Setter(this, value);
+  void set search(String value) => _blink.BlinkLocation.search_Setter_DOMString(this, value);
 
   @DomName('Location.assign')
   @DocsEditable()
-  void assign(String url) => _blink.BlinkLocation.$assign_Callback(this, url);
+  void assign(String url) => _blink.BlinkLocation.assign_Callback_DOMString(this, url);
 
   @DomName('Location.reload')
   @DocsEditable()
-  void reload() => _blink.BlinkLocation.$reload_Callback(this);
+  void reload() => _blink.BlinkLocation.reload_Callback(this);
 
   @DomName('Location.replace')
   @DocsEditable()
-  void replace(String url) => _blink.BlinkLocation.$replace_Callback(this, url);
+  void replace(String url) => _blink.BlinkLocation.replace_Callback_DOMString(this, url);
 
   @DomName('Location.toString')
   @DocsEditable()
-  String toString() => _blink.BlinkLocation.$toString_Callback(this);
+  String toString() => _blink.BlinkLocation.toString_Callback(this);
 
 
 }
@@ -18565,15 +18565,15 @@
 
   @DomName('HTMLMapElement.areas')
   @DocsEditable()
-  List<Node> get areas => _blink.BlinkHTMLMapElement.$areas_Getter(this);
+  List<Node> get areas => _blink.BlinkHTMLMapElement.areas_Getter(this);
 
   @DomName('HTMLMapElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLMapElement.$name_Getter(this);
+  String get name => _blink.BlinkHTMLMapElement.name_Getter(this);
 
   @DomName('HTMLMapElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLMapElement.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkHTMLMapElement.name_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18594,84 +18594,84 @@
   @DomName('MediaController.MediaController')
   @DocsEditable()
   factory MediaController() {
-    return _blink.BlinkMediaController.$_create_1constructorCallback();
+    return _blink.BlinkMediaController.constructorCallback();
   }
 
   @DomName('MediaController.buffered')
   @DocsEditable()
-  TimeRanges get buffered => _blink.BlinkMediaController.$buffered_Getter(this);
+  TimeRanges get buffered => _blink.BlinkMediaController.buffered_Getter(this);
 
   @DomName('MediaController.currentTime')
   @DocsEditable()
-  num get currentTime => _blink.BlinkMediaController.$currentTime_Getter(this);
+  num get currentTime => _blink.BlinkMediaController.currentTime_Getter(this);
 
   @DomName('MediaController.currentTime')
   @DocsEditable()
-  void set currentTime(num value) => _blink.BlinkMediaController.$currentTime_Setter(this, value);
+  void set currentTime(num value) => _blink.BlinkMediaController.currentTime_Setter_double(this, value);
 
   @DomName('MediaController.defaultPlaybackRate')
   @DocsEditable()
-  num get defaultPlaybackRate => _blink.BlinkMediaController.$defaultPlaybackRate_Getter(this);
+  num get defaultPlaybackRate => _blink.BlinkMediaController.defaultPlaybackRate_Getter(this);
 
   @DomName('MediaController.defaultPlaybackRate')
   @DocsEditable()
-  void set defaultPlaybackRate(num value) => _blink.BlinkMediaController.$defaultPlaybackRate_Setter(this, value);
+  void set defaultPlaybackRate(num value) => _blink.BlinkMediaController.defaultPlaybackRate_Setter_double(this, value);
 
   @DomName('MediaController.duration')
   @DocsEditable()
-  double get duration => _blink.BlinkMediaController.$duration_Getter(this);
+  double get duration => _blink.BlinkMediaController.duration_Getter(this);
 
   @DomName('MediaController.muted')
   @DocsEditable()
-  bool get muted => _blink.BlinkMediaController.$muted_Getter(this);
+  bool get muted => _blink.BlinkMediaController.muted_Getter(this);
 
   @DomName('MediaController.muted')
   @DocsEditable()
-  void set muted(bool value) => _blink.BlinkMediaController.$muted_Setter(this, value);
+  void set muted(bool value) => _blink.BlinkMediaController.muted_Setter_boolean(this, value);
 
   @DomName('MediaController.paused')
   @DocsEditable()
-  bool get paused => _blink.BlinkMediaController.$paused_Getter(this);
+  bool get paused => _blink.BlinkMediaController.paused_Getter(this);
 
   @DomName('MediaController.playbackRate')
   @DocsEditable()
-  num get playbackRate => _blink.BlinkMediaController.$playbackRate_Getter(this);
+  num get playbackRate => _blink.BlinkMediaController.playbackRate_Getter(this);
 
   @DomName('MediaController.playbackRate')
   @DocsEditable()
-  void set playbackRate(num value) => _blink.BlinkMediaController.$playbackRate_Setter(this, value);
+  void set playbackRate(num value) => _blink.BlinkMediaController.playbackRate_Setter_double(this, value);
 
   @DomName('MediaController.playbackState')
   @DocsEditable()
-  String get playbackState => _blink.BlinkMediaController.$playbackState_Getter(this);
+  String get playbackState => _blink.BlinkMediaController.playbackState_Getter(this);
 
   @DomName('MediaController.played')
   @DocsEditable()
-  TimeRanges get played => _blink.BlinkMediaController.$played_Getter(this);
+  TimeRanges get played => _blink.BlinkMediaController.played_Getter(this);
 
   @DomName('MediaController.seekable')
   @DocsEditable()
-  TimeRanges get seekable => _blink.BlinkMediaController.$seekable_Getter(this);
+  TimeRanges get seekable => _blink.BlinkMediaController.seekable_Getter(this);
 
   @DomName('MediaController.volume')
   @DocsEditable()
-  num get volume => _blink.BlinkMediaController.$volume_Getter(this);
+  num get volume => _blink.BlinkMediaController.volume_Getter(this);
 
   @DomName('MediaController.volume')
   @DocsEditable()
-  void set volume(num value) => _blink.BlinkMediaController.$volume_Setter(this, value);
+  void set volume(num value) => _blink.BlinkMediaController.volume_Setter_double(this, value);
 
   @DomName('MediaController.pause')
   @DocsEditable()
-  void pause() => _blink.BlinkMediaController.$pause_Callback(this);
+  void pause() => _blink.BlinkMediaController.pause_Callback(this);
 
   @DomName('MediaController.play')
   @DocsEditable()
-  void play() => _blink.BlinkMediaController.$play_Callback(this);
+  void play() => _blink.BlinkMediaController.play_Callback(this);
 
   @DomName('MediaController.unpause')
   @DocsEditable()
-  void unpause() => _blink.BlinkMediaController.$unpause_Callback(this);
+  void unpause() => _blink.BlinkMediaController.unpause_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19000,173 +19000,173 @@
 
   @DomName('HTMLMediaElement.autoplay')
   @DocsEditable()
-  bool get autoplay => _blink.BlinkHTMLMediaElement.$autoplay_Getter(this);
+  bool get autoplay => _blink.BlinkHTMLMediaElement.autoplay_Getter(this);
 
   @DomName('HTMLMediaElement.autoplay')
   @DocsEditable()
-  void set autoplay(bool value) => _blink.BlinkHTMLMediaElement.$autoplay_Setter(this, value);
+  void set autoplay(bool value) => _blink.BlinkHTMLMediaElement.autoplay_Setter_boolean(this, value);
 
   @DomName('HTMLMediaElement.buffered')
   @DocsEditable()
-  TimeRanges get buffered => _blink.BlinkHTMLMediaElement.$buffered_Getter(this);
+  TimeRanges get buffered => _blink.BlinkHTMLMediaElement.buffered_Getter(this);
 
   @DomName('HTMLMediaElement.controller')
   @DocsEditable()
-  MediaController get controller => _blink.BlinkHTMLMediaElement.$controller_Getter(this);
+  MediaController get controller => _blink.BlinkHTMLMediaElement.controller_Getter(this);
 
   @DomName('HTMLMediaElement.controller')
   @DocsEditable()
-  void set controller(MediaController value) => _blink.BlinkHTMLMediaElement.$controller_Setter(this, value);
+  void set controller(MediaController value) => _blink.BlinkHTMLMediaElement.controller_Setter_MediaController(this, value);
 
   @DomName('HTMLMediaElement.controls')
   @DocsEditable()
-  bool get controls => _blink.BlinkHTMLMediaElement.$controls_Getter(this);
+  bool get controls => _blink.BlinkHTMLMediaElement.controls_Getter(this);
 
   @DomName('HTMLMediaElement.controls')
   @DocsEditable()
-  void set controls(bool value) => _blink.BlinkHTMLMediaElement.$controls_Setter(this, value);
+  void set controls(bool value) => _blink.BlinkHTMLMediaElement.controls_Setter_boolean(this, value);
 
   @DomName('HTMLMediaElement.crossOrigin')
   @DocsEditable()
   @Experimental() // untriaged
-  String get crossOrigin => _blink.BlinkHTMLMediaElement.$crossOrigin_Getter(this);
+  String get crossOrigin => _blink.BlinkHTMLMediaElement.crossOrigin_Getter(this);
 
   @DomName('HTMLMediaElement.crossOrigin')
   @DocsEditable()
   @Experimental() // untriaged
-  void set crossOrigin(String value) => _blink.BlinkHTMLMediaElement.$crossOrigin_Setter(this, value);
+  void set crossOrigin(String value) => _blink.BlinkHTMLMediaElement.crossOrigin_Setter_DOMString(this, value);
 
   @DomName('HTMLMediaElement.currentSrc')
   @DocsEditable()
-  String get currentSrc => _blink.BlinkHTMLMediaElement.$currentSrc_Getter(this);
+  String get currentSrc => _blink.BlinkHTMLMediaElement.currentSrc_Getter(this);
 
   @DomName('HTMLMediaElement.currentTime')
   @DocsEditable()
-  num get currentTime => _blink.BlinkHTMLMediaElement.$currentTime_Getter(this);
+  num get currentTime => _blink.BlinkHTMLMediaElement.currentTime_Getter(this);
 
   @DomName('HTMLMediaElement.currentTime')
   @DocsEditable()
-  void set currentTime(num value) => _blink.BlinkHTMLMediaElement.$currentTime_Setter(this, value);
+  void set currentTime(num value) => _blink.BlinkHTMLMediaElement.currentTime_Setter_double(this, value);
 
   @DomName('HTMLMediaElement.defaultMuted')
   @DocsEditable()
-  bool get defaultMuted => _blink.BlinkHTMLMediaElement.$defaultMuted_Getter(this);
+  bool get defaultMuted => _blink.BlinkHTMLMediaElement.defaultMuted_Getter(this);
 
   @DomName('HTMLMediaElement.defaultMuted')
   @DocsEditable()
-  void set defaultMuted(bool value) => _blink.BlinkHTMLMediaElement.$defaultMuted_Setter(this, value);
+  void set defaultMuted(bool value) => _blink.BlinkHTMLMediaElement.defaultMuted_Setter_boolean(this, value);
 
   @DomName('HTMLMediaElement.defaultPlaybackRate')
   @DocsEditable()
-  num get defaultPlaybackRate => _blink.BlinkHTMLMediaElement.$defaultPlaybackRate_Getter(this);
+  num get defaultPlaybackRate => _blink.BlinkHTMLMediaElement.defaultPlaybackRate_Getter(this);
 
   @DomName('HTMLMediaElement.defaultPlaybackRate')
   @DocsEditable()
-  void set defaultPlaybackRate(num value) => _blink.BlinkHTMLMediaElement.$defaultPlaybackRate_Setter(this, value);
+  void set defaultPlaybackRate(num value) => _blink.BlinkHTMLMediaElement.defaultPlaybackRate_Setter_double(this, value);
 
   @DomName('HTMLMediaElement.duration')
   @DocsEditable()
-  double get duration => _blink.BlinkHTMLMediaElement.$duration_Getter(this);
+  double get duration => _blink.BlinkHTMLMediaElement.duration_Getter(this);
 
   @DomName('HTMLMediaElement.ended')
   @DocsEditable()
-  bool get ended => _blink.BlinkHTMLMediaElement.$ended_Getter(this);
+  bool get ended => _blink.BlinkHTMLMediaElement.ended_Getter(this);
 
   @DomName('HTMLMediaElement.error')
   @DocsEditable()
-  MediaError get error => _blink.BlinkHTMLMediaElement.$error_Getter(this);
+  MediaError get error => _blink.BlinkHTMLMediaElement.error_Getter(this);
 
   @DomName('HTMLMediaElement.loop')
   @DocsEditable()
-  bool get loop => _blink.BlinkHTMLMediaElement.$loop_Getter(this);
+  bool get loop => _blink.BlinkHTMLMediaElement.loop_Getter(this);
 
   @DomName('HTMLMediaElement.loop')
   @DocsEditable()
-  void set loop(bool value) => _blink.BlinkHTMLMediaElement.$loop_Setter(this, value);
+  void set loop(bool value) => _blink.BlinkHTMLMediaElement.loop_Setter_boolean(this, value);
 
   @DomName('HTMLMediaElement.mediaGroup')
   @DocsEditable()
-  String get mediaGroup => _blink.BlinkHTMLMediaElement.$mediaGroup_Getter(this);
+  String get mediaGroup => _blink.BlinkHTMLMediaElement.mediaGroup_Getter(this);
 
   @DomName('HTMLMediaElement.mediaGroup')
   @DocsEditable()
-  void set mediaGroup(String value) => _blink.BlinkHTMLMediaElement.$mediaGroup_Setter(this, value);
+  void set mediaGroup(String value) => _blink.BlinkHTMLMediaElement.mediaGroup_Setter_DOMString(this, value);
 
   @DomName('HTMLMediaElement.mediaKeys')
   @DocsEditable()
   // https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html
   @Experimental()
-  MediaKeys get mediaKeys => _blink.BlinkHTMLMediaElement.$mediaKeys_Getter(this);
+  MediaKeys get mediaKeys => _blink.BlinkHTMLMediaElement.mediaKeys_Getter(this);
 
   @DomName('HTMLMediaElement.muted')
   @DocsEditable()
-  bool get muted => _blink.BlinkHTMLMediaElement.$muted_Getter(this);
+  bool get muted => _blink.BlinkHTMLMediaElement.muted_Getter(this);
 
   @DomName('HTMLMediaElement.muted')
   @DocsEditable()
-  void set muted(bool value) => _blink.BlinkHTMLMediaElement.$muted_Setter(this, value);
+  void set muted(bool value) => _blink.BlinkHTMLMediaElement.muted_Setter_boolean(this, value);
 
   @DomName('HTMLMediaElement.networkState')
   @DocsEditable()
-  int get networkState => _blink.BlinkHTMLMediaElement.$networkState_Getter(this);
+  int get networkState => _blink.BlinkHTMLMediaElement.networkState_Getter(this);
 
   @DomName('HTMLMediaElement.paused')
   @DocsEditable()
-  bool get paused => _blink.BlinkHTMLMediaElement.$paused_Getter(this);
+  bool get paused => _blink.BlinkHTMLMediaElement.paused_Getter(this);
 
   @DomName('HTMLMediaElement.playbackRate')
   @DocsEditable()
-  num get playbackRate => _blink.BlinkHTMLMediaElement.$playbackRate_Getter(this);
+  num get playbackRate => _blink.BlinkHTMLMediaElement.playbackRate_Getter(this);
 
   @DomName('HTMLMediaElement.playbackRate')
   @DocsEditable()
-  void set playbackRate(num value) => _blink.BlinkHTMLMediaElement.$playbackRate_Setter(this, value);
+  void set playbackRate(num value) => _blink.BlinkHTMLMediaElement.playbackRate_Setter_double(this, value);
 
   @DomName('HTMLMediaElement.played')
   @DocsEditable()
-  TimeRanges get played => _blink.BlinkHTMLMediaElement.$played_Getter(this);
+  TimeRanges get played => _blink.BlinkHTMLMediaElement.played_Getter(this);
 
   @DomName('HTMLMediaElement.preload')
   @DocsEditable()
-  String get preload => _blink.BlinkHTMLMediaElement.$preload_Getter(this);
+  String get preload => _blink.BlinkHTMLMediaElement.preload_Getter(this);
 
   @DomName('HTMLMediaElement.preload')
   @DocsEditable()
-  void set preload(String value) => _blink.BlinkHTMLMediaElement.$preload_Setter(this, value);
+  void set preload(String value) => _blink.BlinkHTMLMediaElement.preload_Setter_DOMString(this, value);
 
   @DomName('HTMLMediaElement.readyState')
   @DocsEditable()
-  int get readyState => _blink.BlinkHTMLMediaElement.$readyState_Getter(this);
+  int get readyState => _blink.BlinkHTMLMediaElement.readyState_Getter(this);
 
   @DomName('HTMLMediaElement.seekable')
   @DocsEditable()
-  TimeRanges get seekable => _blink.BlinkHTMLMediaElement.$seekable_Getter(this);
+  TimeRanges get seekable => _blink.BlinkHTMLMediaElement.seekable_Getter(this);
 
   @DomName('HTMLMediaElement.seeking')
   @DocsEditable()
-  bool get seeking => _blink.BlinkHTMLMediaElement.$seeking_Getter(this);
+  bool get seeking => _blink.BlinkHTMLMediaElement.seeking_Getter(this);
 
   @DomName('HTMLMediaElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLMediaElement.$src_Getter(this);
+  String get src => _blink.BlinkHTMLMediaElement.src_Getter(this);
 
   @DomName('HTMLMediaElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLMediaElement.$src_Setter(this, value);
+  void set src(String value) => _blink.BlinkHTMLMediaElement.src_Setter_DOMString(this, value);
 
   @DomName('HTMLMediaElement.textTracks')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-media-texttracks
   @Experimental()
-  TextTrackList get textTracks => _blink.BlinkHTMLMediaElement.$textTracks_Getter(this);
+  TextTrackList get textTracks => _blink.BlinkHTMLMediaElement.textTracks_Getter(this);
 
   @DomName('HTMLMediaElement.volume')
   @DocsEditable()
-  num get volume => _blink.BlinkHTMLMediaElement.$volume_Getter(this);
+  num get volume => _blink.BlinkHTMLMediaElement.volume_Getter(this);
 
   @DomName('HTMLMediaElement.volume')
   @DocsEditable()
-  void set volume(num value) => _blink.BlinkHTMLMediaElement.$volume_Setter(this, value);
+  void set volume(num value) => _blink.BlinkHTMLMediaElement.volume_Setter_double(this, value);
 
   @DomName('HTMLMediaElement.webkitAudioDecodedByteCount')
   @DocsEditable()
@@ -19174,7 +19174,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   @Experimental() // nonstandard
-  int get audioDecodedByteCount => _blink.BlinkHTMLMediaElement.$webkitAudioDecodedByteCount_Getter(this);
+  int get audioDecodedByteCount => _blink.BlinkHTMLMediaElement.webkitAudioDecodedByteCount_Getter(this);
 
   @DomName('HTMLMediaElement.webkitVideoDecodedByteCount')
   @DocsEditable()
@@ -19182,46 +19182,46 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   @Experimental() // nonstandard
-  int get videoDecodedByteCount => _blink.BlinkHTMLMediaElement.$webkitVideoDecodedByteCount_Getter(this);
+  int get videoDecodedByteCount => _blink.BlinkHTMLMediaElement.webkitVideoDecodedByteCount_Getter(this);
 
   TextTrack addTextTrack(String kind, [String label, String language]) {
     if (language != null) {
-      return _blink.BlinkHTMLMediaElement.$_addTextTrack_1_Callback(this, kind, label, language);
+      return _blink.BlinkHTMLMediaElement.addTextTrack_Callback_DOMString_DOMString_DOMString(this, kind, label, language);
     }
     if (label != null) {
-      return _blink.BlinkHTMLMediaElement.$_addTextTrack_2_Callback(this, kind, label);
+      return _blink.BlinkHTMLMediaElement.addTextTrack_Callback_DOMString_DOMString(this, kind, label);
     }
-    return _blink.BlinkHTMLMediaElement.$_addTextTrack_3_Callback(this, kind);
+    return _blink.BlinkHTMLMediaElement.addTextTrack_Callback_DOMString(this, kind);
   }
 
   @DomName('HTMLMediaElement.canPlayType')
   @DocsEditable()
   @Unstable()
-  String canPlayType(String type, [String keySystem]) => _blink.BlinkHTMLMediaElement.$canPlayType_Callback(this, type, keySystem);
+  String canPlayType(String type, [String keySystem]) => _blink.BlinkHTMLMediaElement.canPlayType_Callback_DOMString_DOMString(this, type, keySystem);
 
   @DomName('HTMLMediaElement.load')
   @DocsEditable()
-  void load() => _blink.BlinkHTMLMediaElement.$load_Callback(this);
+  void load() => _blink.BlinkHTMLMediaElement.load_Callback(this);
 
   @DomName('HTMLMediaElement.pause')
   @DocsEditable()
-  void pause() => _blink.BlinkHTMLMediaElement.$pause_Callback(this);
+  void pause() => _blink.BlinkHTMLMediaElement.pause_Callback(this);
 
   @DomName('HTMLMediaElement.play')
   @DocsEditable()
-  void play() => _blink.BlinkHTMLMediaElement.$play_Callback(this);
+  void play() => _blink.BlinkHTMLMediaElement.play_Callback(this);
 
   @DomName('HTMLMediaElement.setMediaKeys')
   @DocsEditable()
   @Experimental() // untriaged
-  void setMediaKeys(MediaKeys mediaKeys) => _blink.BlinkHTMLMediaElement.$setMediaKeys_Callback(this, mediaKeys);
+  void setMediaKeys(MediaKeys mediaKeys) => _blink.BlinkHTMLMediaElement.setMediaKeys_Callback_MediaKeys(this, mediaKeys);
 
   void addKey(String keySystem, Uint8List key, [Uint8List initData, String sessionId]) {
     if (initData != null) {
-      _blink.BlinkHTMLMediaElement.$_webkitAddKey_1_Callback(this, keySystem, key, initData, sessionId);
+      _blink.BlinkHTMLMediaElement.webkitAddKey_Callback_DOMString_Uint8Array_Uint8Array_DOMString(this, keySystem, key, initData, sessionId);
       return;
     }
-    _blink.BlinkHTMLMediaElement.$_webkitAddKey_2_Callback(this, keySystem, key);
+    _blink.BlinkHTMLMediaElement.webkitAddKey_Callback_DOMString_Uint8Array(this, keySystem, key);
     return;
   }
 
@@ -19231,14 +19231,14 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html#extensions
-  void cancelKeyRequest(String keySystem, String sessionId) => _blink.BlinkHTMLMediaElement.$webkitCancelKeyRequest_Callback(this, keySystem, sessionId);
+  void cancelKeyRequest(String keySystem, String sessionId) => _blink.BlinkHTMLMediaElement.webkitCancelKeyRequest_Callback_DOMString_DOMString(this, keySystem, sessionId);
 
   void generateKeyRequest(String keySystem, [Uint8List initData]) {
     if (initData != null) {
-      _blink.BlinkHTMLMediaElement.$_webkitGenerateKeyRequest_1_Callback(this, keySystem, initData);
+      _blink.BlinkHTMLMediaElement.webkitGenerateKeyRequest_Callback_DOMString_Uint8Array(this, keySystem, initData);
       return;
     }
-    _blink.BlinkHTMLMediaElement.$_webkitGenerateKeyRequest_2_Callback(this, keySystem);
+    _blink.BlinkHTMLMediaElement.webkitGenerateKeyRequest_Callback_DOMString(this, keySystem);
     return;
   }
 
@@ -19416,7 +19416,7 @@
 
   @DomName('MediaError.code')
   @DocsEditable()
-  int get code => _blink.BlinkMediaError.$code_Getter(this);
+  int get code => _blink.BlinkMediaError.code_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19460,12 +19460,12 @@
 
   @DomName('MediaKeyError.code')
   @DocsEditable()
-  int get code => _blink.BlinkMediaKeyError.$code_Getter(this);
+  int get code => _blink.BlinkMediaKeyError.code_Getter(this);
 
   @DomName('MediaKeyError.systemCode')
   @DocsEditable()
   @Experimental() // non-standard
-  int get systemCode => _blink.BlinkMediaKeyError.$systemCode_Getter(this);
+  int get systemCode => _blink.BlinkMediaKeyError.systemCode_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19485,31 +19485,31 @@
 
   @DomName('MediaKeyEvent.defaultURL')
   @DocsEditable()
-  String get defaultUrl => _blink.BlinkMediaKeyEvent.$defaultURL_Getter(this);
+  String get defaultUrl => _blink.BlinkMediaKeyEvent.defaultURL_Getter(this);
 
   @DomName('MediaKeyEvent.errorCode')
   @DocsEditable()
-  MediaKeyError get errorCode => _blink.BlinkMediaKeyEvent.$errorCode_Getter(this);
+  MediaKeyError get errorCode => _blink.BlinkMediaKeyEvent.errorCode_Getter(this);
 
   @DomName('MediaKeyEvent.initData')
   @DocsEditable()
-  Uint8List get initData => _blink.BlinkMediaKeyEvent.$initData_Getter(this);
+  Uint8List get initData => _blink.BlinkMediaKeyEvent.initData_Getter(this);
 
   @DomName('MediaKeyEvent.keySystem')
   @DocsEditable()
-  String get keySystem => _blink.BlinkMediaKeyEvent.$keySystem_Getter(this);
+  String get keySystem => _blink.BlinkMediaKeyEvent.keySystem_Getter(this);
 
   @DomName('MediaKeyEvent.message')
   @DocsEditable()
-  Uint8List get message => _blink.BlinkMediaKeyEvent.$message_Getter(this);
+  Uint8List get message => _blink.BlinkMediaKeyEvent.message_Getter(this);
 
   @DomName('MediaKeyEvent.sessionId')
   @DocsEditable()
-  String get sessionId => _blink.BlinkMediaKeyEvent.$sessionId_Getter(this);
+  String get sessionId => _blink.BlinkMediaKeyEvent.sessionId_Getter(this);
 
   @DomName('MediaKeyEvent.systemCode')
   @DocsEditable()
-  int get systemCode => _blink.BlinkMediaKeyEvent.$systemCode_Getter(this);
+  int get systemCode => _blink.BlinkMediaKeyEvent.systemCode_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19529,11 +19529,11 @@
 
   @DomName('MediaKeyMessageEvent.destinationURL')
   @DocsEditable()
-  String get destinationUrl => _blink.BlinkMediaKeyMessageEvent.$destinationURL_Getter(this);
+  String get destinationUrl => _blink.BlinkMediaKeyMessageEvent.destinationURL_Getter(this);
 
   @DomName('MediaKeyMessageEvent.message')
   @DocsEditable()
-  Uint8List get message => _blink.BlinkMediaKeyMessageEvent.$message_Getter(this);
+  Uint8List get message => _blink.BlinkMediaKeyMessageEvent.message_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19554,11 +19554,11 @@
   @DomName('MediaKeyNeededEvent.contentType')
   @DocsEditable()
   @Experimental() // untriaged
-  String get contentType => _blink.BlinkMediaKeyNeededEvent.$contentType_Getter(this);
+  String get contentType => _blink.BlinkMediaKeyNeededEvent.contentType_Getter(this);
 
   @DomName('MediaKeyNeededEvent.initData')
   @DocsEditable()
-  Uint8List get initData => _blink.BlinkMediaKeyNeededEvent.$initData_Getter(this);
+  Uint8List get initData => _blink.BlinkMediaKeyNeededEvent.initData_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19578,24 +19578,24 @@
 
   @DomName('MediaKeySession.error')
   @DocsEditable()
-  MediaKeyError get error => _blink.BlinkMediaKeySession.$error_Getter(this);
+  MediaKeyError get error => _blink.BlinkMediaKeySession.error_Getter(this);
 
   @DomName('MediaKeySession.keySystem')
   @DocsEditable()
-  String get keySystem => _blink.BlinkMediaKeySession.$keySystem_Getter(this);
+  String get keySystem => _blink.BlinkMediaKeySession.keySystem_Getter(this);
 
   @DomName('MediaKeySession.sessionId')
   @DocsEditable()
-  String get sessionId => _blink.BlinkMediaKeySession.$sessionId_Getter(this);
+  String get sessionId => _blink.BlinkMediaKeySession.sessionId_Getter(this);
 
   @DomName('MediaKeySession.release')
   @DocsEditable()
   @Experimental() // untriaged
-  void release() => _blink.BlinkMediaKeySession.$release_Callback(this);
+  void release() => _blink.BlinkMediaKeySession.release_Callback(this);
 
   @DomName('MediaKeySession.update')
   @DocsEditable()
-  void update(Uint8List response) => _blink.BlinkMediaKeySession.$update_Callback(this, response);
+  void update(Uint8List response) => _blink.BlinkMediaKeySession.update_Callback_Uint8Array(this, response);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19616,16 +19616,16 @@
   @DomName('MediaKeys.MediaKeys')
   @DocsEditable()
   factory MediaKeys(String keySystem) {
-    return _blink.BlinkMediaKeys.$_create_1constructorCallback(keySystem);
+    return _blink.BlinkMediaKeys.constructorCallback_DOMString(keySystem);
   }
 
   @DomName('MediaKeys.keySystem')
   @DocsEditable()
-  String get keySystem => _blink.BlinkMediaKeys.$keySystem_Getter(this);
+  String get keySystem => _blink.BlinkMediaKeys.keySystem_Getter(this);
 
   @DomName('MediaKeys.createSession')
   @DocsEditable()
-  MediaKeySession createSession(String type, Uint8List initData) => _blink.BlinkMediaKeys.$createSession_Callback(this, type, initData);
+  MediaKeySession createSession(String type, Uint8List initData) => _blink.BlinkMediaKeys.createSession_Callback_DOMString_Uint8Array(this, type, initData);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19644,27 +19644,27 @@
 
   @DomName('MediaList.length')
   @DocsEditable()
-  int get length => _blink.BlinkMediaList.$length_Getter(this);
+  int get length => _blink.BlinkMediaList.length_Getter(this);
 
   @DomName('MediaList.mediaText')
   @DocsEditable()
-  String get mediaText => _blink.BlinkMediaList.$mediaText_Getter(this);
+  String get mediaText => _blink.BlinkMediaList.mediaText_Getter(this);
 
   @DomName('MediaList.mediaText')
   @DocsEditable()
-  void set mediaText(String value) => _blink.BlinkMediaList.$mediaText_Setter(this, value);
+  void set mediaText(String value) => _blink.BlinkMediaList.mediaText_Setter_DOMString(this, value);
 
   @DomName('MediaList.appendMedium')
   @DocsEditable()
-  void appendMedium(String newMedium) => _blink.BlinkMediaList.$appendMedium_Callback(this, newMedium);
+  void appendMedium(String newMedium) => _blink.BlinkMediaList.appendMedium_Callback_DOMString(this, newMedium);
 
   @DomName('MediaList.deleteMedium')
   @DocsEditable()
-  void deleteMedium(String oldMedium) => _blink.BlinkMediaList.$deleteMedium_Callback(this, oldMedium);
+  void deleteMedium(String oldMedium) => _blink.BlinkMediaList.deleteMedium_Callback_DOMString(this, oldMedium);
 
   @DomName('MediaList.item')
   @DocsEditable()
-  String item(int index) => _blink.BlinkMediaList.$item_Callback(this, index);
+  String item(int index) => _blink.BlinkMediaList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19683,11 +19683,11 @@
 
   @DomName('MediaQueryList.matches')
   @DocsEditable()
-  bool get matches => _blink.BlinkMediaQueryList.$matches_Getter(this);
+  bool get matches => _blink.BlinkMediaQueryList.matches_Getter(this);
 
   @DomName('MediaQueryList.media')
   @DocsEditable()
-  String get media => _blink.BlinkMediaQueryList.$media_Getter(this);
+  String get media => _blink.BlinkMediaQueryList.media_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19708,49 +19708,49 @@
   @DomName('MediaSource.MediaSource')
   @DocsEditable()
   factory MediaSource() {
-    return _blink.BlinkMediaSource.$_create_1constructorCallback();
+    return _blink.BlinkMediaSource.constructorCallback();
   }
 
   @DomName('MediaSource.activeSourceBuffers')
   @DocsEditable()
-  SourceBufferList get activeSourceBuffers => _blink.BlinkMediaSource.$activeSourceBuffers_Getter(this);
+  SourceBufferList get activeSourceBuffers => _blink.BlinkMediaSource.activeSourceBuffers_Getter(this);
 
   @DomName('MediaSource.duration')
   @DocsEditable()
-  num get duration => _blink.BlinkMediaSource.$duration_Getter(this);
+  num get duration => _blink.BlinkMediaSource.duration_Getter(this);
 
   @DomName('MediaSource.duration')
   @DocsEditable()
-  void set duration(num value) => _blink.BlinkMediaSource.$duration_Setter(this, value);
+  void set duration(num value) => _blink.BlinkMediaSource.duration_Setter_double(this, value);
 
   @DomName('MediaSource.readyState')
   @DocsEditable()
-  String get readyState => _blink.BlinkMediaSource.$readyState_Getter(this);
+  String get readyState => _blink.BlinkMediaSource.readyState_Getter(this);
 
   @DomName('MediaSource.sourceBuffers')
   @DocsEditable()
-  SourceBufferList get sourceBuffers => _blink.BlinkMediaSource.$sourceBuffers_Getter(this);
+  SourceBufferList get sourceBuffers => _blink.BlinkMediaSource.sourceBuffers_Getter(this);
 
   @DomName('MediaSource.addSourceBuffer')
   @DocsEditable()
-  SourceBuffer addSourceBuffer(String type) => _blink.BlinkMediaSource.$addSourceBuffer_Callback(this, type);
+  SourceBuffer addSourceBuffer(String type) => _blink.BlinkMediaSource.addSourceBuffer_Callback_DOMString(this, type);
 
   void endOfStream([String error]) {
     if (error != null) {
-      _blink.BlinkMediaSource.$_endOfStream_1_Callback(this, error);
+      _blink.BlinkMediaSource.endOfStream_Callback_DOMString(this, error);
       return;
     }
-    _blink.BlinkMediaSource.$_endOfStream_2_Callback(this);
+    _blink.BlinkMediaSource.endOfStream_Callback(this);
     return;
   }
 
   @DomName('MediaSource.isTypeSupported')
   @DocsEditable()
-  static bool isTypeSupported(String type) => _blink.BlinkMediaSource.$isTypeSupported_Callback(type);
+  static bool isTypeSupported(String type) => _blink.BlinkMediaSource.isTypeSupported_Callback_DOMString(type);
 
   @DomName('MediaSource.removeSourceBuffer')
   @DocsEditable()
-  void removeSourceBuffer(SourceBuffer buffer) => _blink.BlinkMediaSource.$removeSourceBuffer_Callback(this, buffer);
+  void removeSourceBuffer(SourceBuffer buffer) => _blink.BlinkMediaSource.removeSourceBuffer_Callback_SourceBuffer(this, buffer);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -19800,53 +19800,53 @@
   @DocsEditable()
   factory MediaStream([stream_OR_tracks]) {
     if (stream_OR_tracks == null) {
-      return _blink.BlinkMediaStream.$_create_1constructorCallback();
+      return _blink.BlinkMediaStream.constructorCallback();
     }
     if ((stream_OR_tracks is MediaStream || stream_OR_tracks == null)) {
-      return _blink.BlinkMediaStream.$_create_2constructorCallback(stream_OR_tracks);
+      return _blink.BlinkMediaStream.constructorCallback_MediaStream(stream_OR_tracks);
     }
     if ((stream_OR_tracks is List<MediaStreamTrack> || stream_OR_tracks == null)) {
-      return _blink.BlinkMediaStream.$_create_3constructorCallback(stream_OR_tracks);
+      return _blink.BlinkMediaStream.constructorCallback_A_MediaStreamTrack_A(stream_OR_tracks);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('MediaStream.ended')
   @DocsEditable()
-  bool get ended => _blink.BlinkMediaStream.$ended_Getter(this);
+  bool get ended => _blink.BlinkMediaStream.ended_Getter(this);
 
   @DomName('MediaStream.id')
   @DocsEditable()
-  String get id => _blink.BlinkMediaStream.$id_Getter(this);
+  String get id => _blink.BlinkMediaStream.id_Getter(this);
 
   @DomName('MediaStream.label')
   @DocsEditable()
   @Experimental() // non-standard
-  String get label => _blink.BlinkMediaStream.$label_Getter(this);
+  String get label => _blink.BlinkMediaStream.label_Getter(this);
 
   @DomName('MediaStream.addTrack')
   @DocsEditable()
-  void addTrack(MediaStreamTrack track) => _blink.BlinkMediaStream.$addTrack_Callback(this, track);
+  void addTrack(MediaStreamTrack track) => _blink.BlinkMediaStream.addTrack_Callback_MediaStreamTrack(this, track);
 
   @DomName('MediaStream.getAudioTracks')
   @DocsEditable()
-  List<MediaStreamTrack> getAudioTracks() => _blink.BlinkMediaStream.$getAudioTracks_Callback(this);
+  List<MediaStreamTrack> getAudioTracks() => _blink.BlinkMediaStream.getAudioTracks_Callback(this);
 
   @DomName('MediaStream.getTrackById')
   @DocsEditable()
-  MediaStreamTrack getTrackById(String trackId) => _blink.BlinkMediaStream.$getTrackById_Callback(this, trackId);
+  MediaStreamTrack getTrackById(String trackId) => _blink.BlinkMediaStream.getTrackById_Callback_DOMString(this, trackId);
 
   @DomName('MediaStream.getVideoTracks')
   @DocsEditable()
-  List<MediaStreamTrack> getVideoTracks() => _blink.BlinkMediaStream.$getVideoTracks_Callback(this);
+  List<MediaStreamTrack> getVideoTracks() => _blink.BlinkMediaStream.getVideoTracks_Callback(this);
 
   @DomName('MediaStream.removeTrack')
   @DocsEditable()
-  void removeTrack(MediaStreamTrack track) => _blink.BlinkMediaStream.$removeTrack_Callback(this, track);
+  void removeTrack(MediaStreamTrack track) => _blink.BlinkMediaStream.removeTrack_Callback_MediaStreamTrack(this, track);
 
   @DomName('MediaStream.stop')
   @DocsEditable()
-  void stop() => _blink.BlinkMediaStream.$stop_Callback(this);
+  void stop() => _blink.BlinkMediaStream.stop_Callback(this);
 
   /// Stream of `addtrack` events handled by this [MediaStream].
   @DomName('MediaStream.onaddtrack')
@@ -19894,7 +19894,7 @@
 
   @DomName('MediaStreamEvent.stream')
   @DocsEditable()
-  MediaStream get stream => _blink.BlinkMediaStreamEvent.$stream_Getter(this);
+  MediaStream get stream => _blink.BlinkMediaStreamEvent.stream_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19945,32 +19945,32 @@
 
   @DomName('MediaStreamTrack.enabled')
   @DocsEditable()
-  bool get enabled => _blink.BlinkMediaStreamTrack.$enabled_Getter(this);
+  bool get enabled => _blink.BlinkMediaStreamTrack.enabled_Getter(this);
 
   @DomName('MediaStreamTrack.enabled')
   @DocsEditable()
-  void set enabled(bool value) => _blink.BlinkMediaStreamTrack.$enabled_Setter(this, value);
+  void set enabled(bool value) => _blink.BlinkMediaStreamTrack.enabled_Setter_boolean(this, value);
 
   @DomName('MediaStreamTrack.id')
   @DocsEditable()
-  String get id => _blink.BlinkMediaStreamTrack.$id_Getter(this);
+  String get id => _blink.BlinkMediaStreamTrack.id_Getter(this);
 
   @DomName('MediaStreamTrack.kind')
   @DocsEditable()
-  String get kind => _blink.BlinkMediaStreamTrack.$kind_Getter(this);
+  String get kind => _blink.BlinkMediaStreamTrack.kind_Getter(this);
 
   @DomName('MediaStreamTrack.label')
   @DocsEditable()
-  String get label => _blink.BlinkMediaStreamTrack.$label_Getter(this);
+  String get label => _blink.BlinkMediaStreamTrack.label_Getter(this);
 
   @DomName('MediaStreamTrack.readyState')
   @DocsEditable()
-  String get readyState => _blink.BlinkMediaStreamTrack.$readyState_Getter(this);
+  String get readyState => _blink.BlinkMediaStreamTrack.readyState_Getter(this);
 
   @DomName('MediaStreamTrack.getSources')
   @DocsEditable()
   @Experimental() // untriaged
-  static void _getSources(MediaStreamTrackSourcesCallback callback) => _blink.BlinkMediaStreamTrack.$getSources_Callback(callback);
+  static void _getSources(MediaStreamTrackSourcesCallback callback) => _blink.BlinkMediaStreamTrack.getSources_Callback_MediaStreamTrackSourcesCallback(callback);
 
   static Future<List<SourceInfo>> getSources() {
     var completer = new Completer<List<SourceInfo>>();
@@ -19982,7 +19982,7 @@
   @DomName('MediaStreamTrack.stop')
   @DocsEditable()
   @Experimental() // untriaged
-  void stop() => _blink.BlinkMediaStreamTrack.$stop_Callback(this);
+  void stop() => _blink.BlinkMediaStreamTrack.stop_Callback(this);
 
   /// Stream of `ended` events handled by this [MediaStreamTrack].
   @DomName('MediaStreamTrack.onended')
@@ -20021,7 +20021,7 @@
 
   @DomName('MediaStreamTrackEvent.track')
   @DocsEditable()
-  MediaStreamTrack get track => _blink.BlinkMediaStreamTrackEvent.$track_Getter(this);
+  MediaStreamTrack get track => _blink.BlinkMediaStreamTrackEvent.track_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20050,15 +20050,15 @@
 
   @DomName('MemoryInfo.jsHeapSizeLimit')
   @DocsEditable()
-  int get jsHeapSizeLimit => _blink.BlinkMemoryInfo.$jsHeapSizeLimit_Getter(this);
+  int get jsHeapSizeLimit => _blink.BlinkMemoryInfo.jsHeapSizeLimit_Getter(this);
 
   @DomName('MemoryInfo.totalJSHeapSize')
   @DocsEditable()
-  int get totalJSHeapSize => _blink.BlinkMemoryInfo.$totalJSHeapSize_Getter(this);
+  int get totalJSHeapSize => _blink.BlinkMemoryInfo.totalJSHeapSize_Getter(this);
 
   @DomName('MemoryInfo.usedJSHeapSize')
   @DocsEditable()
-  int get usedJSHeapSize => _blink.BlinkMemoryInfo.$usedJSHeapSize_Getter(this);
+  int get usedJSHeapSize => _blink.BlinkMemoryInfo.usedJSHeapSize_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20111,11 +20111,11 @@
 
   @DomName('MessageChannel.port1')
   @DocsEditable()
-  MessagePort get port1 => _blink.BlinkMessageChannel.$port1_Getter(this);
+  MessagePort get port1 => _blink.BlinkMessageChannel.port1_Getter(this);
 
   @DomName('MessageChannel.port2')
   @DocsEditable()
-  MessagePort get port2 => _blink.BlinkMessageChannel.$port2_Getter(this);
+  MessagePort get port2 => _blink.BlinkMessageChannel.port2_Getter(this);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -20144,24 +20144,24 @@
 
   @DomName('MessageEvent.data')
   @DocsEditable()
-  Object get data => _blink.BlinkMessageEvent.$data_Getter(this);
+  Object get data => _blink.BlinkMessageEvent.data_Getter(this);
 
   @DomName('MessageEvent.lastEventId')
   @DocsEditable()
   @Unstable()
-  String get lastEventId => _blink.BlinkMessageEvent.$lastEventId_Getter(this);
+  String get lastEventId => _blink.BlinkMessageEvent.lastEventId_Getter(this);
 
   @DomName('MessageEvent.origin')
   @DocsEditable()
-  String get origin => _blink.BlinkMessageEvent.$origin_Getter(this);
+  String get origin => _blink.BlinkMessageEvent.origin_Getter(this);
 
   @DomName('MessageEvent.source')
   @DocsEditable()
-  EventTarget get source => _blink.BlinkMessageEvent.$source_Getter(this);
+  EventTarget get source => _blink.BlinkMessageEvent.source_Getter(this);
 
   @DomName('MessageEvent.initMessageEvent')
   @DocsEditable()
-  void _initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, Window sourceArg, List<MessagePort> messagePorts) => _blink.BlinkMessageEvent.$initMessageEvent_Callback(this, typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, messagePorts);
+  void _initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, Window sourceArg, List<MessagePort> messagePorts) => _blink.BlinkMessageEvent.initMessageEvent_Callback_DOMString_boolean_boolean_ScriptValue_DOMString_DOMString_Window_A_MessagePort_A(this, typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, messagePorts);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20190,15 +20190,15 @@
 
   @DomName('MessagePort.close')
   @DocsEditable()
-  void close() => _blink.BlinkMessagePort.$close_Callback(this);
+  void close() => _blink.BlinkMessagePort.close_Callback(this);
 
   @DomName('MessagePort.postMessage')
   @DocsEditable()
-  void postMessage(Object message, [List<MessagePort> messagePorts]) => _blink.BlinkMessagePort.$postMessage_Callback(this, message, messagePorts);
+  void postMessage(Object message, [List<MessagePort> messagePorts]) => _blink.BlinkMessagePort.postMessage_Callback_ScriptValue_A_MessagePort_A(this, message, messagePorts);
 
   @DomName('MessagePort.start')
   @DocsEditable()
-  void start() => _blink.BlinkMessagePort.$start_Callback(this);
+  void start() => _blink.BlinkMessagePort.start_Callback(this);
 
   /// Stream of `message` events handled by this [MessagePort].
   @DomName('MessagePort.onmessage')
@@ -20231,27 +20231,27 @@
 
   @DomName('HTMLMetaElement.content')
   @DocsEditable()
-  String get content => _blink.BlinkHTMLMetaElement.$content_Getter(this);
+  String get content => _blink.BlinkHTMLMetaElement.content_Getter(this);
 
   @DomName('HTMLMetaElement.content')
   @DocsEditable()
-  void set content(String value) => _blink.BlinkHTMLMetaElement.$content_Setter(this, value);
+  void set content(String value) => _blink.BlinkHTMLMetaElement.content_Setter_DOMString(this, value);
 
   @DomName('HTMLMetaElement.httpEquiv')
   @DocsEditable()
-  String get httpEquiv => _blink.BlinkHTMLMetaElement.$httpEquiv_Getter(this);
+  String get httpEquiv => _blink.BlinkHTMLMetaElement.httpEquiv_Getter(this);
 
   @DomName('HTMLMetaElement.httpEquiv')
   @DocsEditable()
-  void set httpEquiv(String value) => _blink.BlinkHTMLMetaElement.$httpEquiv_Setter(this, value);
+  void set httpEquiv(String value) => _blink.BlinkHTMLMetaElement.httpEquiv_Setter_DOMString(this, value);
 
   @DomName('HTMLMetaElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLMetaElement.$name_Getter(this);
+  String get name => _blink.BlinkHTMLMetaElement.name_Getter(this);
 
   @DomName('HTMLMetaElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLMetaElement.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkHTMLMetaElement.name_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20271,11 +20271,11 @@
 
   @DomName('Metadata.modificationTime')
   @DocsEditable()
-  DateTime get modificationTime => _blink.BlinkMetadata.$modificationTime_Getter(this);
+  DateTime get modificationTime => _blink.BlinkMetadata.modificationTime_Getter(this);
 
   @DomName('Metadata.size')
   @DocsEditable()
-  int get size => _blink.BlinkMetadata.$size_Getter(this);
+  int get size => _blink.BlinkMetadata.size_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20321,56 +20321,56 @@
 
   @DomName('HTMLMeterElement.high')
   @DocsEditable()
-  num get high => _blink.BlinkHTMLMeterElement.$high_Getter(this);
+  num get high => _blink.BlinkHTMLMeterElement.high_Getter(this);
 
   @DomName('HTMLMeterElement.high')
   @DocsEditable()
-  void set high(num value) => _blink.BlinkHTMLMeterElement.$high_Setter(this, value);
+  void set high(num value) => _blink.BlinkHTMLMeterElement.high_Setter_double(this, value);
 
   @DomName('HTMLMeterElement.labels')
   @DocsEditable()
   @Unstable()
-  List<Node> get labels => _blink.BlinkHTMLMeterElement.$labels_Getter(this);
+  List<Node> get labels => _blink.BlinkHTMLMeterElement.labels_Getter(this);
 
   @DomName('HTMLMeterElement.low')
   @DocsEditable()
-  num get low => _blink.BlinkHTMLMeterElement.$low_Getter(this);
+  num get low => _blink.BlinkHTMLMeterElement.low_Getter(this);
 
   @DomName('HTMLMeterElement.low')
   @DocsEditable()
-  void set low(num value) => _blink.BlinkHTMLMeterElement.$low_Setter(this, value);
+  void set low(num value) => _blink.BlinkHTMLMeterElement.low_Setter_double(this, value);
 
   @DomName('HTMLMeterElement.max')
   @DocsEditable()
-  num get max => _blink.BlinkHTMLMeterElement.$max_Getter(this);
+  num get max => _blink.BlinkHTMLMeterElement.max_Getter(this);
 
   @DomName('HTMLMeterElement.max')
   @DocsEditable()
-  void set max(num value) => _blink.BlinkHTMLMeterElement.$max_Setter(this, value);
+  void set max(num value) => _blink.BlinkHTMLMeterElement.max_Setter_double(this, value);
 
   @DomName('HTMLMeterElement.min')
   @DocsEditable()
-  num get min => _blink.BlinkHTMLMeterElement.$min_Getter(this);
+  num get min => _blink.BlinkHTMLMeterElement.min_Getter(this);
 
   @DomName('HTMLMeterElement.min')
   @DocsEditable()
-  void set min(num value) => _blink.BlinkHTMLMeterElement.$min_Setter(this, value);
+  void set min(num value) => _blink.BlinkHTMLMeterElement.min_Setter_double(this, value);
 
   @DomName('HTMLMeterElement.optimum')
   @DocsEditable()
-  num get optimum => _blink.BlinkHTMLMeterElement.$optimum_Getter(this);
+  num get optimum => _blink.BlinkHTMLMeterElement.optimum_Getter(this);
 
   @DomName('HTMLMeterElement.optimum')
   @DocsEditable()
-  void set optimum(num value) => _blink.BlinkHTMLMeterElement.$optimum_Setter(this, value);
+  void set optimum(num value) => _blink.BlinkHTMLMeterElement.optimum_Setter_double(this, value);
 
   @DomName('HTMLMeterElement.value')
   @DocsEditable()
-  num get value => _blink.BlinkHTMLMeterElement.$value_Getter(this);
+  num get value => _blink.BlinkHTMLMeterElement.value_Getter(this);
 
   @DomName('HTMLMeterElement.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkHTMLMeterElement.$value_Setter(this, value);
+  void set value(num value) => _blink.BlinkHTMLMeterElement.value_Setter_double(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20410,11 +20410,11 @@
 
   @DomName('MIDIAccess.inputs')
   @DocsEditable()
-  List<MidiInput> inputs() => _blink.BlinkMIDIAccess.$inputs_Callback(this);
+  List<MidiInput> inputs() => _blink.BlinkMIDIAccess.inputs_Callback(this);
 
   @DomName('MIDIAccess.outputs')
   @DocsEditable()
-  List<MidiOutput> outputs() => _blink.BlinkMIDIAccess.$outputs_Callback(this);
+  List<MidiOutput> outputs() => _blink.BlinkMIDIAccess.outputs_Callback(this);
 
   /// Stream of `connect` events handled by this [MidiAccess].
   @DomName('MIDIAccess.onconnect')
@@ -20444,7 +20444,7 @@
   @DomName('MIDIAccessPromise.then')
   @DocsEditable()
   @Experimental() // untriaged
-  void then(MidiSuccessCallback successCallback, MidiErrorCallback errorCallback) => _blink.BlinkMIDIAccessPromise.$then_Callback(this, successCallback, errorCallback);
+  void then(MidiSuccessCallback successCallback, MidiErrorCallback errorCallback) => _blink.BlinkMIDIAccessPromise.then_Callback_MIDISuccessCallback_MIDIErrorCallback(this, successCallback, errorCallback);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20464,7 +20464,7 @@
 
   @DomName('MIDIConnectionEvent.port')
   @DocsEditable()
-  MidiPort get port => _blink.BlinkMIDIConnectionEvent.$port_Getter(this);
+  MidiPort get port => _blink.BlinkMIDIConnectionEvent.port_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20515,11 +20515,11 @@
 
   @DomName('MIDIMessageEvent.data')
   @DocsEditable()
-  Uint8List get data => _blink.BlinkMIDIMessageEvent.$data_Getter(this);
+  Uint8List get data => _blink.BlinkMIDIMessageEvent.data_Getter(this);
 
   @DomName('MIDIMessageEvent.receivedTime')
   @DocsEditable()
-  double get receivedTime => _blink.BlinkMIDIMessageEvent.$receivedTime_Getter(this);
+  double get receivedTime => _blink.BlinkMIDIMessageEvent.receivedTime_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20539,10 +20539,10 @@
 
   void send(Uint8List data, [num timestamp]) {
     if (timestamp != null) {
-      _blink.BlinkMIDIOutput.$_send_1_Callback(this, data, timestamp);
+      _blink.BlinkMIDIOutput.send_Callback_Uint8Array_double(this, data, timestamp);
       return;
     }
-    _blink.BlinkMIDIOutput.$_send_2_Callback(this, data);
+    _blink.BlinkMIDIOutput.send_Callback_Uint8Array(this, data);
     return;
   }
 
@@ -20574,23 +20574,23 @@
 
   @DomName('MIDIPort.id')
   @DocsEditable()
-  String get id => _blink.BlinkMIDIPort.$id_Getter(this);
+  String get id => _blink.BlinkMIDIPort.id_Getter(this);
 
   @DomName('MIDIPort.manufacturer')
   @DocsEditable()
-  String get manufacturer => _blink.BlinkMIDIPort.$manufacturer_Getter(this);
+  String get manufacturer => _blink.BlinkMIDIPort.manufacturer_Getter(this);
 
   @DomName('MIDIPort.name')
   @DocsEditable()
-  String get name => _blink.BlinkMIDIPort.$name_Getter(this);
+  String get name => _blink.BlinkMIDIPort.name_Getter(this);
 
   @DomName('MIDIPort.type')
   @DocsEditable()
-  String get type => _blink.BlinkMIDIPort.$type_Getter(this);
+  String get type => _blink.BlinkMIDIPort.type_Getter(this);
 
   @DomName('MIDIPort.version')
   @DocsEditable()
-  String get version => _blink.BlinkMIDIPort.$version_Getter(this);
+  String get version => _blink.BlinkMIDIPort.version_Getter(this);
 
   /// Stream of `disconnect` events handled by this [MidiPort].
   @DomName('MIDIPort.ondisconnect')
@@ -20614,19 +20614,19 @@
 
   @DomName('MimeType.description')
   @DocsEditable()
-  String get description => _blink.BlinkMimeType.$description_Getter(this);
+  String get description => _blink.BlinkMimeType.description_Getter(this);
 
   @DomName('MimeType.enabledPlugin')
   @DocsEditable()
-  Plugin get enabledPlugin => _blink.BlinkMimeType.$enabledPlugin_Getter(this);
+  Plugin get enabledPlugin => _blink.BlinkMimeType.enabledPlugin_Getter(this);
 
   @DomName('MimeType.suffixes')
   @DocsEditable()
-  String get suffixes => _blink.BlinkMimeType.$suffixes_Getter(this);
+  String get suffixes => _blink.BlinkMimeType.suffixes_Getter(this);
 
   @DomName('MimeType.type')
   @DocsEditable()
-  String get type => _blink.BlinkMimeType.$type_Getter(this);
+  String get type => _blink.BlinkMimeType.type_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20645,15 +20645,15 @@
 
   @DomName('MimeTypeArray.length')
   @DocsEditable()
-  int get length => _blink.BlinkMimeTypeArray.$length_Getter(this);
+  int get length => _blink.BlinkMimeTypeArray.length_Getter(this);
 
   MimeType operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkMimeTypeArray.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkMimeTypeArray.item_Callback_ul(this, index);
   }
 
-  MimeType _nativeIndexedGetter(int index) => _blink.BlinkMimeTypeArray.$NativeIndexed_Getter(this, index);
+  MimeType _nativeIndexedGetter(int index) => _blink.BlinkMimeTypeArray.item_Callback_ul(this, index);
 
   void operator[]=(int index, MimeType value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -20695,15 +20695,15 @@
 
   @DomName('MimeTypeArray.__getter__')
   @DocsEditable()
-  MimeType __getter__(String name) => _blink.BlinkMimeTypeArray.$__getter___Callback(this, name);
+  MimeType __getter__(String name) => _blink.BlinkMimeTypeArray.$__getter___Callback_DOMString(this, name);
 
   @DomName('MimeTypeArray.item')
   @DocsEditable()
-  MimeType item(int index) => _blink.BlinkMimeTypeArray.$item_Callback(this, index);
+  MimeType item(int index) => _blink.BlinkMimeTypeArray.item_Callback_ul(this, index);
 
   @DomName('MimeTypeArray.namedItem')
   @DocsEditable()
-  MimeType namedItem(String name) => _blink.BlinkMimeTypeArray.$namedItem_Callback(this, name);
+  MimeType namedItem(String name) => _blink.BlinkMimeTypeArray.namedItem_Callback_DOMString(this, name);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20728,19 +20728,19 @@
 
   @DomName('HTMLModElement.cite')
   @DocsEditable()
-  String get cite => _blink.BlinkHTMLModElement.$cite_Getter(this);
+  String get cite => _blink.BlinkHTMLModElement.cite_Getter(this);
 
   @DomName('HTMLModElement.cite')
   @DocsEditable()
-  void set cite(String value) => _blink.BlinkHTMLModElement.$cite_Setter(this, value);
+  void set cite(String value) => _blink.BlinkHTMLModElement.cite_Setter_DOMString(this, value);
 
   @DomName('HTMLModElement.dateTime')
   @DocsEditable()
-  String get dateTime => _blink.BlinkHTMLModElement.$dateTime_Getter(this);
+  String get dateTime => _blink.BlinkHTMLModElement.dateTime_Getter(this);
 
   @DomName('HTMLModElement.dateTime')
   @DocsEditable()
-  void set dateTime(String value) => _blink.BlinkHTMLModElement.$dateTime_Setter(this, value);
+  void set dateTime(String value) => _blink.BlinkHTMLModElement.dateTime_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20772,28 +20772,28 @@
 
   @DomName('MouseEvent.altKey')
   @DocsEditable()
-  bool get altKey => _blink.BlinkMouseEvent.$altKey_Getter(this);
+  bool get altKey => _blink.BlinkMouseEvent.altKey_Getter(this);
 
   @DomName('MouseEvent.button')
   @DocsEditable()
-  int get button => _blink.BlinkMouseEvent.$button_Getter(this);
+  int get button => _blink.BlinkMouseEvent.button_Getter(this);
 
   @DomName('MouseEvent.clientX')
   @DocsEditable()
-  int get _clientX => _blink.BlinkMouseEvent.$clientX_Getter(this);
+  int get _clientX => _blink.BlinkMouseEvent.clientX_Getter(this);
 
   @DomName('MouseEvent.clientY')
   @DocsEditable()
-  int get _clientY => _blink.BlinkMouseEvent.$clientY_Getter(this);
+  int get _clientY => _blink.BlinkMouseEvent.clientY_Getter(this);
 
   @DomName('MouseEvent.ctrlKey')
   @DocsEditable()
-  bool get ctrlKey => _blink.BlinkMouseEvent.$ctrlKey_Getter(this);
+  bool get ctrlKey => _blink.BlinkMouseEvent.ctrlKey_Getter(this);
 
   @DomName('MouseEvent.dataTransfer')
   @DocsEditable()
   @Unstable()
-  DataTransfer get dataTransfer => _blink.BlinkMouseEvent.$dataTransfer_Getter(this);
+  DataTransfer get dataTransfer => _blink.BlinkMouseEvent.dataTransfer_Getter(this);
 
   /**
    * The nonstandard way to access the element that the mouse comes
@@ -20805,37 +20805,37 @@
   @DomName('MouseEvent.fromElement')
   @DocsEditable()
   @deprecated
-  Node get fromElement => _blink.BlinkMouseEvent.$fromElement_Getter(this);
+  Node get fromElement => _blink.BlinkMouseEvent.fromElement_Getter(this);
 
   @DomName('MouseEvent.metaKey')
   @DocsEditable()
-  bool get metaKey => _blink.BlinkMouseEvent.$metaKey_Getter(this);
+  bool get metaKey => _blink.BlinkMouseEvent.metaKey_Getter(this);
 
   @DomName('MouseEvent.offsetX')
   @DocsEditable()
   @Unstable()
-  int get _offsetX => _blink.BlinkMouseEvent.$offsetX_Getter(this);
+  int get _offsetX => _blink.BlinkMouseEvent.offsetX_Getter(this);
 
   @DomName('MouseEvent.offsetY')
   @DocsEditable()
   @Unstable()
-  int get _offsetY => _blink.BlinkMouseEvent.$offsetY_Getter(this);
+  int get _offsetY => _blink.BlinkMouseEvent.offsetY_Getter(this);
 
   @DomName('MouseEvent.relatedTarget')
   @DocsEditable()
-  EventTarget get relatedTarget => _blink.BlinkMouseEvent.$relatedTarget_Getter(this);
+  EventTarget get relatedTarget => _blink.BlinkMouseEvent.relatedTarget_Getter(this);
 
   @DomName('MouseEvent.screenX')
   @DocsEditable()
-  int get _screenX => _blink.BlinkMouseEvent.$screenX_Getter(this);
+  int get _screenX => _blink.BlinkMouseEvent.screenX_Getter(this);
 
   @DomName('MouseEvent.screenY')
   @DocsEditable()
-  int get _screenY => _blink.BlinkMouseEvent.$screenY_Getter(this);
+  int get _screenY => _blink.BlinkMouseEvent.screenY_Getter(this);
 
   @DomName('MouseEvent.shiftKey')
   @DocsEditable()
-  bool get shiftKey => _blink.BlinkMouseEvent.$shiftKey_Getter(this);
+  bool get shiftKey => _blink.BlinkMouseEvent.shiftKey_Getter(this);
 
   /**
    * The nonstandard way to access the element that the mouse goes
@@ -20847,25 +20847,25 @@
   @DomName('MouseEvent.toElement')
   @DocsEditable()
   @deprecated
-  Node get toElement => _blink.BlinkMouseEvent.$toElement_Getter(this);
+  Node get toElement => _blink.BlinkMouseEvent.toElement_Getter(this);
 
   @DomName('MouseEvent.webkitMovementX')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  int get _webkitMovementX => _blink.BlinkMouseEvent.$webkitMovementX_Getter(this);
+  int get _webkitMovementX => _blink.BlinkMouseEvent.webkitMovementX_Getter(this);
 
   @DomName('MouseEvent.webkitMovementY')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  int get _webkitMovementY => _blink.BlinkMouseEvent.$webkitMovementY_Getter(this);
+  int get _webkitMovementY => _blink.BlinkMouseEvent.webkitMovementY_Getter(this);
 
   @DomName('MouseEvent.initMouseEvent')
   @DocsEditable()
-  void _initMouseEvent(String type, bool canBubble, bool cancelable, Window view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget) => _blink.BlinkMouseEvent.$initMouseEvent_Callback(this, type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);
+  void _initMouseEvent(String type, bool canBubble, bool cancelable, Window view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget) => _blink.BlinkMouseEvent.initMouseEvent_Callback_DOMString_boolean_boolean_Window_long_long_long_long_long_boolean_boolean_boolean_boolean_us_EventTarget(this, type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);
 
 
   @deprecated
@@ -20935,19 +20935,19 @@
   factory MutationObserver._(MutationCallback callback) => _create(callback);
 
   @DocsEditable()
-  static MutationObserver _create(callback) => _blink.BlinkMutationObserver.$constructorCallback(callback);
+  static MutationObserver _create(callback) => _blink.BlinkMutationObserver.constructorCallback_MutationCallback(callback);
 
   @DomName('MutationObserver.disconnect')
   @DocsEditable()
-  void disconnect() => _blink.BlinkMutationObserver.$disconnect_Callback(this);
+  void disconnect() => _blink.BlinkMutationObserver.disconnect_Callback(this);
 
   @DomName('MutationObserver.observe')
   @DocsEditable()
-  void _observe(Node target, Map options) => _blink.BlinkMutationObserver.$observe_Callback(this, target, options);
+  void _observe(Node target, Map options) => _blink.BlinkMutationObserver.observe_Callback_Node_Dictionary(this, target, options);
 
   @DomName('MutationObserver.takeRecords')
   @DocsEditable()
-  List<MutationRecord> takeRecords() => _blink.BlinkMutationObserver.$takeRecords_Callback(this);
+  List<MutationRecord> takeRecords() => _blink.BlinkMutationObserver.takeRecords_Callback(this);
 
   /**
    * Checks to see if the mutation observer API is supported on the current
@@ -21032,39 +21032,39 @@
 
   @DomName('MutationRecord.addedNodes')
   @DocsEditable()
-  List<Node> get addedNodes => _blink.BlinkMutationRecord.$addedNodes_Getter(this);
+  List<Node> get addedNodes => _blink.BlinkMutationRecord.addedNodes_Getter(this);
 
   @DomName('MutationRecord.attributeName')
   @DocsEditable()
-  String get attributeName => _blink.BlinkMutationRecord.$attributeName_Getter(this);
+  String get attributeName => _blink.BlinkMutationRecord.attributeName_Getter(this);
 
   @DomName('MutationRecord.attributeNamespace')
   @DocsEditable()
-  String get attributeNamespace => _blink.BlinkMutationRecord.$attributeNamespace_Getter(this);
+  String get attributeNamespace => _blink.BlinkMutationRecord.attributeNamespace_Getter(this);
 
   @DomName('MutationRecord.nextSibling')
   @DocsEditable()
-  Node get nextSibling => _blink.BlinkMutationRecord.$nextSibling_Getter(this);
+  Node get nextSibling => _blink.BlinkMutationRecord.nextSibling_Getter(this);
 
   @DomName('MutationRecord.oldValue')
   @DocsEditable()
-  String get oldValue => _blink.BlinkMutationRecord.$oldValue_Getter(this);
+  String get oldValue => _blink.BlinkMutationRecord.oldValue_Getter(this);
 
   @DomName('MutationRecord.previousSibling')
   @DocsEditable()
-  Node get previousSibling => _blink.BlinkMutationRecord.$previousSibling_Getter(this);
+  Node get previousSibling => _blink.BlinkMutationRecord.previousSibling_Getter(this);
 
   @DomName('MutationRecord.removedNodes')
   @DocsEditable()
-  List<Node> get removedNodes => _blink.BlinkMutationRecord.$removedNodes_Getter(this);
+  List<Node> get removedNodes => _blink.BlinkMutationRecord.removedNodes_Getter(this);
 
   @DomName('MutationRecord.target')
   @DocsEditable()
-  Node get target => _blink.BlinkMutationRecord.$target_Getter(this);
+  Node get target => _blink.BlinkMutationRecord.target_Getter(this);
 
   @DomName('MutationRecord.type')
   @DocsEditable()
-  String get type => _blink.BlinkMutationRecord.$type_Getter(this);
+  String get type => _blink.BlinkMutationRecord.type_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21137,57 +21137,57 @@
   @DomName('Navigator.cookieEnabled')
   @DocsEditable()
   @Unstable()
-  bool get cookieEnabled => _blink.BlinkNavigator.$cookieEnabled_Getter(this);
+  bool get cookieEnabled => _blink.BlinkNavigator.cookieEnabled_Getter(this);
 
   @DomName('Navigator.doNotTrack')
   @DocsEditable()
   // http://www.w3.org/2011/tracking-protection/drafts/tracking-dnt.html#js-dom
   @Experimental() // experimental
-  String get doNotTrack => _blink.BlinkNavigator.$doNotTrack_Getter(this);
+  String get doNotTrack => _blink.BlinkNavigator.doNotTrack_Getter(this);
 
   @DomName('Navigator.geolocation')
   @DocsEditable()
   @Unstable()
-  Geolocation get geolocation => _blink.BlinkNavigator.$geolocation_Getter(this);
+  Geolocation get geolocation => _blink.BlinkNavigator.geolocation_Getter(this);
 
   @DomName('Navigator.language')
   @DocsEditable()
-  String get language => _blink.BlinkNavigator.$language_Getter(this);
+  String get language => _blink.BlinkNavigator.language_Getter(this);
 
   @DomName('Navigator.maxTouchPoints')
   @DocsEditable()
   @Experimental() // untriaged
-  int get maxTouchPoints => _blink.BlinkNavigator.$maxTouchPoints_Getter(this);
+  int get maxTouchPoints => _blink.BlinkNavigator.maxTouchPoints_Getter(this);
 
   @DomName('Navigator.mimeTypes')
   @DocsEditable()
   @Experimental() // nonstandard
-  MimeTypeArray get mimeTypes => _blink.BlinkNavigator.$mimeTypes_Getter(this);
+  MimeTypeArray get mimeTypes => _blink.BlinkNavigator.mimeTypes_Getter(this);
 
   @DomName('Navigator.productSub')
   @DocsEditable()
   @Unstable()
-  String get productSub => _blink.BlinkNavigator.$productSub_Getter(this);
+  String get productSub => _blink.BlinkNavigator.productSub_Getter(this);
 
   @DomName('Navigator.serviceWorker')
   @DocsEditable()
   @Experimental() // untriaged
-  ServiceWorkerContainer get serviceWorker => _blink.BlinkNavigator.$serviceWorker_Getter(this);
+  ServiceWorkerContainer get serviceWorker => _blink.BlinkNavigator.serviceWorker_Getter(this);
 
   @DomName('Navigator.storageQuota')
   @DocsEditable()
   @Experimental() // untriaged
-  StorageQuota get storageQuota => _blink.BlinkNavigator.$storageQuota_Getter(this);
+  StorageQuota get storageQuota => _blink.BlinkNavigator.storageQuota_Getter(this);
 
   @DomName('Navigator.vendor')
   @DocsEditable()
   @Unstable()
-  String get vendor => _blink.BlinkNavigator.$vendor_Getter(this);
+  String get vendor => _blink.BlinkNavigator.vendor_Getter(this);
 
   @DomName('Navigator.vendorSub')
   @DocsEditable()
   @Unstable()
-  String get vendorSub => _blink.BlinkNavigator.$vendorSub_Getter(this);
+  String get vendorSub => _blink.BlinkNavigator.vendorSub_Getter(this);
 
   @DomName('Navigator.webkitPersistentStorage')
   @DocsEditable()
@@ -21195,7 +21195,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://www.w3.org/TR/quota-api/#accessing-storagequota
-  DeprecatedStorageQuota get persistentStorage => _blink.BlinkNavigator.$webkitPersistentStorage_Getter(this);
+  DeprecatedStorageQuota get persistentStorage => _blink.BlinkNavigator.webkitPersistentStorage_Getter(this);
 
   @DomName('Navigator.webkitTemporaryStorage')
   @DocsEditable()
@@ -21203,33 +21203,33 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://www.w3.org/TR/quota-api/#accessing-storagequota
-  DeprecatedStorageQuota get temporaryStorage => _blink.BlinkNavigator.$webkitTemporaryStorage_Getter(this);
+  DeprecatedStorageQuota get temporaryStorage => _blink.BlinkNavigator.webkitTemporaryStorage_Getter(this);
 
   @DomName('Navigator.getStorageUpdates')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#navigatorstorageutils
   @Experimental()
-  void getStorageUpdates() => _blink.BlinkNavigator.$getStorageUpdates_Callback(this);
+  void getStorageUpdates() => _blink.BlinkNavigator.getStorageUpdates_Callback(this);
 
   @DomName('Navigator.isProtocolHandlerRegistered')
   @DocsEditable()
   @Experimental() // untriaged
-  String isProtocolHandlerRegistered(String scheme, String url) => _blink.BlinkNavigator.$isProtocolHandlerRegistered_Callback(this, scheme, url);
+  String isProtocolHandlerRegistered(String scheme, String url) => _blink.BlinkNavigator.isProtocolHandlerRegistered_Callback_DOMString_DOMString(this, scheme, url);
 
   @DomName('Navigator.registerProtocolHandler')
   @DocsEditable()
   @Unstable()
-  void registerProtocolHandler(String scheme, String url, String title) => _blink.BlinkNavigator.$registerProtocolHandler_Callback(this, scheme, url, title);
+  void registerProtocolHandler(String scheme, String url, String title) => _blink.BlinkNavigator.registerProtocolHandler_Callback_DOMString_DOMString_DOMString(this, scheme, url, title);
 
   @DomName('Navigator.requestMIDIAccess')
   @DocsEditable()
   @Experimental() // untriaged
-  MidiAccessPromise requestMidiAccess([Map options]) => _blink.BlinkNavigator.$requestMIDIAccess_Callback(this, options);
+  MidiAccessPromise requestMidiAccess([Map options]) => _blink.BlinkNavigator.requestMIDIAccess_Callback_Dictionary(this, options);
 
   @DomName('Navigator.unregisterProtocolHandler')
   @DocsEditable()
   @Experimental() // untriaged
-  void unregisterProtocolHandler(String scheme, String url) => _blink.BlinkNavigator.$unregisterProtocolHandler_Callback(this, scheme, url);
+  void unregisterProtocolHandler(String scheme, String url) => _blink.BlinkNavigator.unregisterProtocolHandler_Callback_DOMString_DOMString(this, scheme, url);
 
   @DomName('Navigator.webkitGetGamepads')
   @DocsEditable()
@@ -21237,44 +21237,44 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html#widl-Navigator-getGamepads-Gamepad
-  List<Gamepad> getGamepads() => _blink.BlinkNavigator.$webkitGetGamepads_Callback(this);
+  List<Gamepad> getGamepads() => _blink.BlinkNavigator.webkitGetGamepads_Callback(this);
 
   @DomName('Navigator.webkitGetUserMedia')
   @DocsEditable()
   // http://dev.w3.org/2011/webrtc/editor/getusermedia.html#navigatorusermedia
   @Experimental()
-  void _getUserMedia(Map options, _NavigatorUserMediaSuccessCallback successCallback, [_NavigatorUserMediaErrorCallback errorCallback]) => _blink.BlinkNavigator.$webkitGetUserMedia_Callback(this, options, successCallback, errorCallback);
+  void _getUserMedia(Map options, _NavigatorUserMediaSuccessCallback successCallback, [_NavigatorUserMediaErrorCallback errorCallback]) => _blink.BlinkNavigator.webkitGetUserMedia_Callback_Dictionary_NavigatorUserMediaSuccessCallback_NavigatorUserMediaErrorCallback(this, options, successCallback, errorCallback);
 
   @DomName('Navigator.appCodeName')
   @DocsEditable()
   @Experimental() // non-standard
-  String get appCodeName => _blink.BlinkNavigator.$appCodeName_Getter(this);
+  String get appCodeName => _blink.BlinkNavigator.appCodeName_Getter(this);
 
   @DomName('Navigator.appName')
   @DocsEditable()
-  String get appName => _blink.BlinkNavigator.$appName_Getter(this);
+  String get appName => _blink.BlinkNavigator.appName_Getter(this);
 
   @DomName('Navigator.appVersion')
   @DocsEditable()
-  String get appVersion => _blink.BlinkNavigator.$appVersion_Getter(this);
+  String get appVersion => _blink.BlinkNavigator.appVersion_Getter(this);
 
   @DomName('Navigator.platform')
   @DocsEditable()
-  String get platform => _blink.BlinkNavigator.$platform_Getter(this);
+  String get platform => _blink.BlinkNavigator.platform_Getter(this);
 
   @DomName('Navigator.product')
   @DocsEditable()
   @Unstable()
-  String get product => _blink.BlinkNavigator.$product_Getter(this);
+  String get product => _blink.BlinkNavigator.product_Getter(this);
 
   @DomName('Navigator.userAgent')
   @DocsEditable()
-  String get userAgent => _blink.BlinkNavigator.$userAgent_Getter(this);
+  String get userAgent => _blink.BlinkNavigator.userAgent_Getter(this);
 
   @DomName('Navigator.onLine')
   @DocsEditable()
   @Unstable()
-  bool get onLine => _blink.BlinkNavigator.$onLine_Getter(this);
+  bool get onLine => _blink.BlinkNavigator.onLine_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21294,32 +21294,32 @@
   @DomName('NavigatorID.appCodeName')
   @DocsEditable()
   @Experimental() // untriaged
-  String get appCodeName => _blink.BlinkNavigatorID.$appCodeName_Getter(this);
+  String get appCodeName => _blink.BlinkNavigatorID.appCodeName_Getter(this);
 
   @DomName('NavigatorID.appName')
   @DocsEditable()
   @Experimental() // untriaged
-  String get appName => _blink.BlinkNavigatorID.$appName_Getter(this);
+  String get appName => _blink.BlinkNavigatorID.appName_Getter(this);
 
   @DomName('NavigatorID.appVersion')
   @DocsEditable()
   @Experimental() // untriaged
-  String get appVersion => _blink.BlinkNavigatorID.$appVersion_Getter(this);
+  String get appVersion => _blink.BlinkNavigatorID.appVersion_Getter(this);
 
   @DomName('NavigatorID.platform')
   @DocsEditable()
   @Experimental() // untriaged
-  String get platform => _blink.BlinkNavigatorID.$platform_Getter(this);
+  String get platform => _blink.BlinkNavigatorID.platform_Getter(this);
 
   @DomName('NavigatorID.product')
   @DocsEditable()
   @Experimental() // untriaged
-  String get product => _blink.BlinkNavigatorID.$product_Getter(this);
+  String get product => _blink.BlinkNavigatorID.product_Getter(this);
 
   @DomName('NavigatorID.userAgent')
   @DocsEditable()
   @Experimental() // untriaged
-  String get userAgent => _blink.BlinkNavigatorID.$userAgent_Getter(this);
+  String get userAgent => _blink.BlinkNavigatorID.userAgent_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21339,7 +21339,7 @@
   @DomName('NavigatorOnLine.onLine')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get onLine => _blink.BlinkNavigatorOnLine.$onLine_Getter(this);
+  bool get onLine => _blink.BlinkNavigatorOnLine.onLine_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21359,15 +21359,15 @@
 
   @DomName('NavigatorUserMediaError.constraintName')
   @DocsEditable()
-  String get constraintName => _blink.BlinkNavigatorUserMediaError.$constraintName_Getter(this);
+  String get constraintName => _blink.BlinkNavigatorUserMediaError.constraintName_Getter(this);
 
   @DomName('NavigatorUserMediaError.message')
   @DocsEditable()
-  String get message => _blink.BlinkNavigatorUserMediaError.$message_Getter(this);
+  String get message => _blink.BlinkNavigatorUserMediaError.message_Getter(this);
 
   @DomName('NavigatorUserMediaError.name')
   @DocsEditable()
-  String get name => _blink.BlinkNavigatorUserMediaError.$name_Getter(this);
+  String get name => _blink.BlinkNavigatorUserMediaError.name_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21697,7 +21697,7 @@
 
   @DomName('Node.baseURI')
   @DocsEditable()
-  String get baseUri => _blink.BlinkNode.$baseURI_Getter(this);
+  String get baseUri => _blink.BlinkNode.baseURI_Getter(this);
 
   /**
    * A list of this node's children.
@@ -21710,7 +21710,7 @@
    */
   @DomName('Node.childNodes')
   @DocsEditable()
-  List<Node> get childNodes => _blink.BlinkNode.$childNodes_Getter(this);
+  List<Node> get childNodes => _blink.BlinkNode.childNodes_Getter(this);
 
   /**
    * The first child of this node.
@@ -21723,7 +21723,7 @@
    */
   @DomName('Node.firstChild')
   @DocsEditable()
-  Node get firstChild => _blink.BlinkNode.$firstChild_Getter(this);
+  Node get firstChild => _blink.BlinkNode.firstChild_Getter(this);
 
   /**
    * The last child of this node.
@@ -21736,15 +21736,15 @@
    */
   @DomName('Node.lastChild')
   @DocsEditable()
-  Node get lastChild => _blink.BlinkNode.$lastChild_Getter(this);
+  Node get lastChild => _blink.BlinkNode.lastChild_Getter(this);
 
   @DomName('Node.localName')
   @DocsEditable()
-  String get _localName => _blink.BlinkNode.$localName_Getter(this);
+  String get _localName => _blink.BlinkNode.localName_Getter(this);
 
   @DomName('Node.namespaceURI')
   @DocsEditable()
-  String get _namespaceUri => _blink.BlinkNode.$namespaceURI_Getter(this);
+  String get _namespaceUri => _blink.BlinkNode.namespaceURI_Getter(this);
 
   /**
    * The next sibling node.
@@ -21757,7 +21757,7 @@
    */
   @DomName('Node.nextSibling')
   @DocsEditable()
-  Node get nextNode => _blink.BlinkNode.$nextSibling_Getter(this);
+  Node get nextNode => _blink.BlinkNode.nextSibling_Getter(this);
 
   /**
    * The name of this node.
@@ -21773,7 +21773,7 @@
    */
   @DomName('Node.nodeName')
   @DocsEditable()
-  String get nodeName => _blink.BlinkNode.$nodeName_Getter(this);
+  String get nodeName => _blink.BlinkNode.nodeName_Getter(this);
 
   /**
    * The type of node.
@@ -21800,7 +21800,7 @@
    */
   @DomName('Node.nodeType')
   @DocsEditable()
-  int get nodeType => _blink.BlinkNode.$nodeType_Getter(this);
+  int get nodeType => _blink.BlinkNode.nodeType_Getter(this);
 
   /**
    * The value of this node.
@@ -21816,7 +21816,7 @@
    */
   @DomName('Node.nodeValue')
   @DocsEditable()
-  String get nodeValue => _blink.BlinkNode.$nodeValue_Getter(this);
+  String get nodeValue => _blink.BlinkNode.nodeValue_Getter(this);
 
   /**
    * The document this node belongs to.
@@ -21831,7 +21831,7 @@
    */
   @DomName('Node.ownerDocument')
   @DocsEditable()
-  Document get ownerDocument => _blink.BlinkNode.$ownerDocument_Getter(this);
+  Document get ownerDocument => _blink.BlinkNode.ownerDocument_Getter(this);
 
   /**
    * The parent element of this node.
@@ -21847,7 +21847,7 @@
    */
   @DomName('Node.parentElement')
   @DocsEditable()
-  Element get parent => _blink.BlinkNode.$parentElement_Getter(this);
+  Element get parent => _blink.BlinkNode.parentElement_Getter(this);
 
   /**
    * The parent node of this node.
@@ -21860,7 +21860,7 @@
    */
   @DomName('Node.parentNode')
   @DocsEditable()
-  Node get parentNode => _blink.BlinkNode.$parentNode_Getter(this);
+  Node get parentNode => _blink.BlinkNode.parentNode_Getter(this);
 
   /**
    * The previous sibling node.
@@ -21873,7 +21873,7 @@
    */
   @DomName('Node.previousSibling')
   @DocsEditable()
-  Node get previousNode => _blink.BlinkNode.$previousSibling_Getter(this);
+  Node get previousNode => _blink.BlinkNode.previousSibling_Getter(this);
 
   /**
    * All text within this node and its decendents.
@@ -21886,7 +21886,7 @@
    */
   @DomName('Node.textContent')
   @DocsEditable()
-  String get text => _blink.BlinkNode.$textContent_Getter(this);
+  String get text => _blink.BlinkNode.textContent_Getter(this);
 
   /**
    * All text within this node and its decendents.
@@ -21899,7 +21899,7 @@
    */
   @DomName('Node.textContent')
   @DocsEditable()
-  void set text(String value) => _blink.BlinkNode.$textContent_Setter(this, value);
+  void set text(String value) => _blink.BlinkNode.textContent_Setter_DOMString(this, value);
 
   /**
    * Adds a node to the end of the child [nodes] list of this node.
@@ -21912,7 +21912,7 @@
    */
   @DomName('Node.appendChild')
   @DocsEditable()
-  Node append(Node newChild) => _blink.BlinkNode.$appendChild_Callback(this, newChild);
+  Node append(Node newChild) => _blink.BlinkNode.appendChild_Callback_Node(this, newChild);
 
   /**
    * Returns a copy of this node.
@@ -21928,7 +21928,7 @@
    */
   @DomName('Node.cloneNode')
   @DocsEditable()
-  Node clone(bool deep) => _blink.BlinkNode.$cloneNode_Callback(this, deep);
+  Node clone(bool deep) => _blink.BlinkNode.cloneNode_Callback_boolean(this, deep);
 
   /**
    * Returns true if this node contains the specified node.
@@ -21940,7 +21940,7 @@
    */
   @DomName('Node.contains')
   @DocsEditable()
-  bool contains(Node other) => _blink.BlinkNode.$contains_Callback(this, other);
+  bool contains(Node other) => _blink.BlinkNode.contains_Callback_Node(this, other);
 
   /**
    * Returns true if this node has any children.
@@ -21953,7 +21953,7 @@
    */
   @DomName('Node.hasChildNodes')
   @DocsEditable()
-  bool hasChildNodes() => _blink.BlinkNode.$hasChildNodes_Callback(this);
+  bool hasChildNodes() => _blink.BlinkNode.hasChildNodes_Callback(this);
 
   /**
    * Inserts all of the nodes into this node directly before refChild.
@@ -21966,15 +21966,15 @@
    */
   @DomName('Node.insertBefore')
   @DocsEditable()
-  Node insertBefore(Node newChild, Node refChild) => _blink.BlinkNode.$insertBefore_Callback(this, newChild, refChild);
+  Node insertBefore(Node newChild, Node refChild) => _blink.BlinkNode.insertBefore_Callback_Node_Node(this, newChild, refChild);
 
   @DomName('Node.removeChild')
   @DocsEditable()
-  Node _removeChild(Node oldChild) => _blink.BlinkNode.$removeChild_Callback(this, oldChild);
+  Node _removeChild(Node oldChild) => _blink.BlinkNode.removeChild_Callback_Node(this, oldChild);
 
   @DomName('Node.replaceChild')
   @DocsEditable()
-  Node _replaceChild(Node newChild, Node oldChild) => _blink.BlinkNode.$replaceChild_Callback(this, newChild, oldChild);
+  Node _replaceChild(Node newChild, Node oldChild) => _blink.BlinkNode.replaceChild_Callback_Node_Node(this, newChild, oldChild);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22052,31 +22052,31 @@
 
   @DomName('NodeIterator.pointerBeforeReferenceNode')
   @DocsEditable()
-  bool get pointerBeforeReferenceNode => _blink.BlinkNodeIterator.$pointerBeforeReferenceNode_Getter(this);
+  bool get pointerBeforeReferenceNode => _blink.BlinkNodeIterator.pointerBeforeReferenceNode_Getter(this);
 
   @DomName('NodeIterator.referenceNode')
   @DocsEditable()
-  Node get referenceNode => _blink.BlinkNodeIterator.$referenceNode_Getter(this);
+  Node get referenceNode => _blink.BlinkNodeIterator.referenceNode_Getter(this);
 
   @DomName('NodeIterator.root')
   @DocsEditable()
-  Node get root => _blink.BlinkNodeIterator.$root_Getter(this);
+  Node get root => _blink.BlinkNodeIterator.root_Getter(this);
 
   @DomName('NodeIterator.whatToShow')
   @DocsEditable()
-  int get whatToShow => _blink.BlinkNodeIterator.$whatToShow_Getter(this);
+  int get whatToShow => _blink.BlinkNodeIterator.whatToShow_Getter(this);
 
   @DomName('NodeIterator.detach')
   @DocsEditable()
-  void detach() => _blink.BlinkNodeIterator.$detach_Callback(this);
+  void detach() => _blink.BlinkNodeIterator.detach_Callback(this);
 
   @DomName('NodeIterator.nextNode')
   @DocsEditable()
-  Node nextNode() => _blink.BlinkNodeIterator.$nextNode_Callback(this);
+  Node nextNode() => _blink.BlinkNodeIterator.nextNode_Callback(this);
 
   @DomName('NodeIterator.previousNode')
   @DocsEditable()
-  Node previousNode() => _blink.BlinkNodeIterator.$previousNode_Callback(this);
+  Node previousNode() => _blink.BlinkNodeIterator.previousNode_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22094,15 +22094,15 @@
 
   @DomName('NodeList.length')
   @DocsEditable()
-  int get length => _blink.BlinkNodeList.$length_Getter(this);
+  int get length => _blink.BlinkNodeList.length_Getter(this);
 
   Node operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkNodeList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkNodeList.item_Callback_ul(this, index);
   }
 
-  Node _nativeIndexedGetter(int index) => _blink.BlinkNodeList.$NativeIndexed_Getter(this, index);
+  Node _nativeIndexedGetter(int index) => _blink.BlinkNodeList.item_Callback_ul(this, index);
 
   void operator[]=(int index, Node value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -22144,7 +22144,7 @@
 
   @DomName('NodeList.item')
   @DocsEditable()
-  Node _item(int index) => _blink.BlinkNodeList.$item_Callback(this, index);
+  Node _item(int index) => _blink.BlinkNodeList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -22215,50 +22215,50 @@
   @DomName('Notification.Notification')
   @DocsEditable()
   static Notification _factoryNotification(String title, [Map options]) {
-    return _blink.BlinkNotification.$_create_1constructorCallback(title, options);
+    return _blink.BlinkNotification.constructorCallback_DOMString_Dictionary(title, options);
   }
 
   @DomName('Notification.body')
   @DocsEditable()
   @Experimental() // untriaged
-  String get body => _blink.BlinkNotification.$body_Getter(this);
+  String get body => _blink.BlinkNotification.body_Getter(this);
 
   @DomName('Notification.dir')
   @DocsEditable()
   @Experimental() // nonstandard
-  String get dir => _blink.BlinkNotification.$dir_Getter(this);
+  String get dir => _blink.BlinkNotification.dir_Getter(this);
 
   @DomName('Notification.icon')
   @DocsEditable()
   @Experimental() // untriaged
-  String get icon => _blink.BlinkNotification.$icon_Getter(this);
+  String get icon => _blink.BlinkNotification.icon_Getter(this);
 
   @DomName('Notification.lang')
   @DocsEditable()
   @Experimental() // untriaged
-  String get lang => _blink.BlinkNotification.$lang_Getter(this);
+  String get lang => _blink.BlinkNotification.lang_Getter(this);
 
   @DomName('Notification.permission')
   @DocsEditable()
-  String get permission => _blink.BlinkNotification.$permission_Getter(this);
+  String get permission => _blink.BlinkNotification.permission_Getter(this);
 
   @DomName('Notification.tag')
   @DocsEditable()
   @Experimental() // nonstandard
-  String get tag => _blink.BlinkNotification.$tag_Getter(this);
+  String get tag => _blink.BlinkNotification.tag_Getter(this);
 
   @DomName('Notification.title')
   @DocsEditable()
   @Experimental() // untriaged
-  String get title => _blink.BlinkNotification.$title_Getter(this);
+  String get title => _blink.BlinkNotification.title_Getter(this);
 
   @DomName('Notification.close')
   @DocsEditable()
-  void close() => _blink.BlinkNotification.$close_Callback(this);
+  void close() => _blink.BlinkNotification.close_Callback(this);
 
   @DomName('Notification.requestPermission')
   @DocsEditable()
-  static void _requestPermission([_NotificationPermissionCallback callback]) => _blink.BlinkNotification.$requestPermission_Callback(callback);
+  static void _requestPermission([_NotificationPermissionCallback callback]) => _blink.BlinkNotification.requestPermission_Callback_NotificationPermissionCallback(callback);
 
   static Future<String> requestPermission() {
     var completer = new Completer<String>();
@@ -22324,27 +22324,27 @@
 
   @DomName('HTMLOListElement.reversed')
   @DocsEditable()
-  bool get reversed => _blink.BlinkHTMLOListElement.$reversed_Getter(this);
+  bool get reversed => _blink.BlinkHTMLOListElement.reversed_Getter(this);
 
   @DomName('HTMLOListElement.reversed')
   @DocsEditable()
-  void set reversed(bool value) => _blink.BlinkHTMLOListElement.$reversed_Setter(this, value);
+  void set reversed(bool value) => _blink.BlinkHTMLOListElement.reversed_Setter_boolean(this, value);
 
   @DomName('HTMLOListElement.start')
   @DocsEditable()
-  int get start => _blink.BlinkHTMLOListElement.$start_Getter(this);
+  int get start => _blink.BlinkHTMLOListElement.start_Getter(this);
 
   @DomName('HTMLOListElement.start')
   @DocsEditable()
-  void set start(int value) => _blink.BlinkHTMLOListElement.$start_Setter(this, value);
+  void set start(int value) => _blink.BlinkHTMLOListElement.start_Setter_long(this, value);
 
   @DomName('HTMLOListElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLOListElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLOListElement.type_Getter(this);
 
   @DomName('HTMLOListElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLOListElement.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkHTMLOListElement.type_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22379,83 +22379,83 @@
 
   @DomName('HTMLObjectElement.data')
   @DocsEditable()
-  String get data => _blink.BlinkHTMLObjectElement.$data_Getter(this);
+  String get data => _blink.BlinkHTMLObjectElement.data_Getter(this);
 
   @DomName('HTMLObjectElement.data')
   @DocsEditable()
-  void set data(String value) => _blink.BlinkHTMLObjectElement.$data_Setter(this, value);
+  void set data(String value) => _blink.BlinkHTMLObjectElement.data_Setter_DOMString(this, value);
 
   @DomName('HTMLObjectElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLObjectElement.$form_Getter(this);
+  FormElement get form => _blink.BlinkHTMLObjectElement.form_Getter(this);
 
   @DomName('HTMLObjectElement.height')
   @DocsEditable()
-  String get height => _blink.BlinkHTMLObjectElement.$height_Getter(this);
+  String get height => _blink.BlinkHTMLObjectElement.height_Getter(this);
 
   @DomName('HTMLObjectElement.height')
   @DocsEditable()
-  void set height(String value) => _blink.BlinkHTMLObjectElement.$height_Setter(this, value);
+  void set height(String value) => _blink.BlinkHTMLObjectElement.height_Setter_DOMString(this, value);
 
   @DomName('HTMLObjectElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLObjectElement.$name_Getter(this);
+  String get name => _blink.BlinkHTMLObjectElement.name_Getter(this);
 
   @DomName('HTMLObjectElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLObjectElement.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkHTMLObjectElement.name_Setter_DOMString(this, value);
 
   @DomName('HTMLObjectElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLObjectElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLObjectElement.type_Getter(this);
 
   @DomName('HTMLObjectElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLObjectElement.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkHTMLObjectElement.type_Setter_DOMString(this, value);
 
   @DomName('HTMLObjectElement.useMap')
   @DocsEditable()
-  String get useMap => _blink.BlinkHTMLObjectElement.$useMap_Getter(this);
+  String get useMap => _blink.BlinkHTMLObjectElement.useMap_Getter(this);
 
   @DomName('HTMLObjectElement.useMap')
   @DocsEditable()
-  void set useMap(String value) => _blink.BlinkHTMLObjectElement.$useMap_Setter(this, value);
+  void set useMap(String value) => _blink.BlinkHTMLObjectElement.useMap_Setter_DOMString(this, value);
 
   @DomName('HTMLObjectElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLObjectElement.$validationMessage_Getter(this);
+  String get validationMessage => _blink.BlinkHTMLObjectElement.validationMessage_Getter(this);
 
   @DomName('HTMLObjectElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLObjectElement.$validity_Getter(this);
+  ValidityState get validity => _blink.BlinkHTMLObjectElement.validity_Getter(this);
 
   @DomName('HTMLObjectElement.width')
   @DocsEditable()
-  String get width => _blink.BlinkHTMLObjectElement.$width_Getter(this);
+  String get width => _blink.BlinkHTMLObjectElement.width_Getter(this);
 
   @DomName('HTMLObjectElement.width')
   @DocsEditable()
-  void set width(String value) => _blink.BlinkHTMLObjectElement.$width_Setter(this, value);
+  void set width(String value) => _blink.BlinkHTMLObjectElement.width_Setter_DOMString(this, value);
 
   @DomName('HTMLObjectElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLObjectElement.$willValidate_Getter(this);
+  bool get willValidate => _blink.BlinkHTMLObjectElement.willValidate_Getter(this);
 
   @DomName('HTMLObjectElement.__getter__')
   @DocsEditable()
-  bool __getter__(index_OR_name) => _blink.BlinkHTMLObjectElement.$__getter___Callback(this, index_OR_name);
+  bool __getter__(index_OR_name) => _blink.BlinkHTMLObjectElement.$__getter___Callback_ul(this, index_OR_name);
 
   @DomName('HTMLObjectElement.__setter__')
   @DocsEditable()
-  void __setter__(index_OR_name, Node value) => _blink.BlinkHTMLObjectElement.$__setter___Callback(this, index_OR_name, value);
+  void __setter__(index_OR_name, Node value) => _blink.BlinkHTMLObjectElement.$__setter___Callback_ul_Node(this, index_OR_name, value);
 
   @DomName('HTMLObjectElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLObjectElement.$checkValidity_Callback(this);
+  bool checkValidity() => _blink.BlinkHTMLObjectElement.checkValidity_Callback(this);
 
   @DomName('HTMLObjectElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLObjectElement.$setCustomValidity_Callback(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLObjectElement.setCustomValidity_Callback_DOMString(this, error);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22483,19 +22483,19 @@
 
   @DomName('HTMLOptGroupElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLOptGroupElement.$disabled_Getter(this);
+  bool get disabled => _blink.BlinkHTMLOptGroupElement.disabled_Getter(this);
 
   @DomName('HTMLOptGroupElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLOptGroupElement.$disabled_Setter(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLOptGroupElement.disabled_Setter_boolean(this, value);
 
   @DomName('HTMLOptGroupElement.label')
   @DocsEditable()
-  String get label => _blink.BlinkHTMLOptGroupElement.$label_Getter(this);
+  String get label => _blink.BlinkHTMLOptGroupElement.label_Getter(this);
 
   @DomName('HTMLOptGroupElement.label')
   @DocsEditable()
-  void set label(String value) => _blink.BlinkHTMLOptGroupElement.$label_Setter(this, value);
+  void set label(String value) => _blink.BlinkHTMLOptGroupElement.label_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -22512,7 +22512,7 @@
   @DomName('HTMLOptionElement.HTMLOptionElement')
   @DocsEditable()
   factory OptionElement._([String data, String value, bool defaultSelected, bool selected]) {
-    return _blink.BlinkHTMLOptionElement.$_create_1constructorCallback(data, value, defaultSelected, selected);
+    return _blink.BlinkHTMLOptionElement.constructorCallback_DOMString_DOMString_boolean_boolean(data, value, defaultSelected, selected);
   }
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -22523,51 +22523,51 @@
 
   @DomName('HTMLOptionElement.defaultSelected')
   @DocsEditable()
-  bool get defaultSelected => _blink.BlinkHTMLOptionElement.$defaultSelected_Getter(this);
+  bool get defaultSelected => _blink.BlinkHTMLOptionElement.defaultSelected_Getter(this);
 
   @DomName('HTMLOptionElement.defaultSelected')
   @DocsEditable()
-  void set defaultSelected(bool value) => _blink.BlinkHTMLOptionElement.$defaultSelected_Setter(this, value);
+  void set defaultSelected(bool value) => _blink.BlinkHTMLOptionElement.defaultSelected_Setter_boolean(this, value);
 
   @DomName('HTMLOptionElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLOptionElement.$disabled_Getter(this);
+  bool get disabled => _blink.BlinkHTMLOptionElement.disabled_Getter(this);
 
   @DomName('HTMLOptionElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLOptionElement.$disabled_Setter(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLOptionElement.disabled_Setter_boolean(this, value);
 
   @DomName('HTMLOptionElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLOptionElement.$form_Getter(this);
+  FormElement get form => _blink.BlinkHTMLOptionElement.form_Getter(this);
 
   @DomName('HTMLOptionElement.index')
   @DocsEditable()
-  int get index => _blink.BlinkHTMLOptionElement.$index_Getter(this);
+  int get index => _blink.BlinkHTMLOptionElement.index_Getter(this);
 
   @DomName('HTMLOptionElement.label')
   @DocsEditable()
-  String get label => _blink.BlinkHTMLOptionElement.$label_Getter(this);
+  String get label => _blink.BlinkHTMLOptionElement.label_Getter(this);
 
   @DomName('HTMLOptionElement.label')
   @DocsEditable()
-  void set label(String value) => _blink.BlinkHTMLOptionElement.$label_Setter(this, value);
+  void set label(String value) => _blink.BlinkHTMLOptionElement.label_Setter_DOMString(this, value);
 
   @DomName('HTMLOptionElement.selected')
   @DocsEditable()
-  bool get selected => _blink.BlinkHTMLOptionElement.$selected_Getter(this);
+  bool get selected => _blink.BlinkHTMLOptionElement.selected_Getter(this);
 
   @DomName('HTMLOptionElement.selected')
   @DocsEditable()
-  void set selected(bool value) => _blink.BlinkHTMLOptionElement.$selected_Setter(this, value);
+  void set selected(bool value) => _blink.BlinkHTMLOptionElement.selected_Setter_boolean(this, value);
 
   @DomName('HTMLOptionElement.value')
   @DocsEditable()
-  String get value => _blink.BlinkHTMLOptionElement.$value_Getter(this);
+  String get value => _blink.BlinkHTMLOptionElement.value_Getter(this);
 
   @DomName('HTMLOptionElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLOptionElement.$value_Setter(this, value);
+  void set value(String value) => _blink.BlinkHTMLOptionElement.value_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22601,64 +22601,64 @@
 
   @DomName('HTMLOutputElement.defaultValue')
   @DocsEditable()
-  String get defaultValue => _blink.BlinkHTMLOutputElement.$defaultValue_Getter(this);
+  String get defaultValue => _blink.BlinkHTMLOutputElement.defaultValue_Getter(this);
 
   @DomName('HTMLOutputElement.defaultValue')
   @DocsEditable()
-  void set defaultValue(String value) => _blink.BlinkHTMLOutputElement.$defaultValue_Setter(this, value);
+  void set defaultValue(String value) => _blink.BlinkHTMLOutputElement.defaultValue_Setter_DOMString(this, value);
 
   @DomName('HTMLOutputElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLOutputElement.$form_Getter(this);
+  FormElement get form => _blink.BlinkHTMLOutputElement.form_Getter(this);
 
   @DomName('HTMLOutputElement.htmlFor')
   @DocsEditable()
-  DomSettableTokenList get htmlFor => _blink.BlinkHTMLOutputElement.$htmlFor_Getter(this);
+  DomSettableTokenList get htmlFor => _blink.BlinkHTMLOutputElement.htmlFor_Getter(this);
 
   @DomName('HTMLOutputElement.labels')
   @DocsEditable()
   @Unstable()
-  List<Node> get labels => _blink.BlinkHTMLOutputElement.$labels_Getter(this);
+  List<Node> get labels => _blink.BlinkHTMLOutputElement.labels_Getter(this);
 
   @DomName('HTMLOutputElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLOutputElement.$name_Getter(this);
+  String get name => _blink.BlinkHTMLOutputElement.name_Getter(this);
 
   @DomName('HTMLOutputElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLOutputElement.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkHTMLOutputElement.name_Setter_DOMString(this, value);
 
   @DomName('HTMLOutputElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLOutputElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLOutputElement.type_Getter(this);
 
   @DomName('HTMLOutputElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLOutputElement.$validationMessage_Getter(this);
+  String get validationMessage => _blink.BlinkHTMLOutputElement.validationMessage_Getter(this);
 
   @DomName('HTMLOutputElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLOutputElement.$validity_Getter(this);
+  ValidityState get validity => _blink.BlinkHTMLOutputElement.validity_Getter(this);
 
   @DomName('HTMLOutputElement.value')
   @DocsEditable()
-  String get value => _blink.BlinkHTMLOutputElement.$value_Getter(this);
+  String get value => _blink.BlinkHTMLOutputElement.value_Getter(this);
 
   @DomName('HTMLOutputElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLOutputElement.$value_Setter(this, value);
+  void set value(String value) => _blink.BlinkHTMLOutputElement.value_Setter_DOMString(this, value);
 
   @DomName('HTMLOutputElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLOutputElement.$willValidate_Getter(this);
+  bool get willValidate => _blink.BlinkHTMLOutputElement.willValidate_Getter(this);
 
   @DomName('HTMLOutputElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLOutputElement.$checkValidity_Callback(this);
+  bool checkValidity() => _blink.BlinkHTMLOutputElement.checkValidity_Callback(this);
 
   @DomName('HTMLOutputElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLOutputElement.$setCustomValidity_Callback(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLOutputElement.setCustomValidity_Callback_DOMString(this, error);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22689,15 +22689,15 @@
 
   @DomName('OverflowEvent.horizontalOverflow')
   @DocsEditable()
-  bool get horizontalOverflow => _blink.BlinkOverflowEvent.$horizontalOverflow_Getter(this);
+  bool get horizontalOverflow => _blink.BlinkOverflowEvent.horizontalOverflow_Getter(this);
 
   @DomName('OverflowEvent.orient')
   @DocsEditable()
-  int get orient => _blink.BlinkOverflowEvent.$orient_Getter(this);
+  int get orient => _blink.BlinkOverflowEvent.orient_Getter(this);
 
   @DomName('OverflowEvent.verticalOverflow')
   @DocsEditable()
-  bool get verticalOverflow => _blink.BlinkOverflowEvent.$verticalOverflow_Getter(this);
+  bool get verticalOverflow => _blink.BlinkOverflowEvent.verticalOverflow_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22717,7 +22717,7 @@
 
   @DomName('PageTransitionEvent.persisted')
   @DocsEditable()
-  bool get persisted => _blink.BlinkPageTransitionEvent.$persisted_Getter(this);
+  bool get persisted => _blink.BlinkPageTransitionEvent.persisted_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22770,19 +22770,19 @@
 
   @DomName('HTMLParamElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLParamElement.$name_Getter(this);
+  String get name => _blink.BlinkHTMLParamElement.name_Getter(this);
 
   @DomName('HTMLParamElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLParamElement.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkHTMLParamElement.name_Setter_DOMString(this, value);
 
   @DomName('HTMLParamElement.value')
   @DocsEditable()
-  String get value => _blink.BlinkHTMLParamElement.$value_Getter(this);
+  String get value => _blink.BlinkHTMLParamElement.value_Getter(this);
 
   @DomName('HTMLParamElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLParamElement.$value_Setter(this, value);
+  void set value(String value) => _blink.BlinkHTMLParamElement.value_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22802,22 +22802,22 @@
   @DomName('ParentNode.childElementCount')
   @DocsEditable()
   @Experimental() // untriaged
-  int get _childElementCount => _blink.BlinkParentNode.$childElementCount_Getter(this);
+  int get _childElementCount => _blink.BlinkParentNode.childElementCount_Getter(this);
 
   @DomName('ParentNode.children')
   @DocsEditable()
   @Experimental() // untriaged
-  List<Node> get _children => _blink.BlinkParentNode.$children_Getter(this);
+  List<Node> get _children => _blink.BlinkParentNode.children_Getter(this);
 
   @DomName('ParentNode.firstElementChild')
   @DocsEditable()
   @Experimental() // untriaged
-  Element get _firstElementChild => _blink.BlinkParentNode.$firstElementChild_Getter(this);
+  Element get _firstElementChild => _blink.BlinkParentNode.firstElementChild_Getter(this);
 
   @DomName('ParentNode.lastElementChild')
   @DocsEditable()
   @Experimental() // untriaged
-  Element get _lastElementChild => _blink.BlinkParentNode.$lastElementChild_Getter(this);
+  Element get _lastElementChild => _blink.BlinkParentNode.lastElementChild_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22839,48 +22839,48 @@
   @DocsEditable()
   factory Path([path_OR_text]) {
     if (path_OR_text == null) {
-      return _blink.BlinkPath.$_create_1constructorCallback();
+      return _blink.BlinkPath.constructorCallback();
     }
     if ((path_OR_text is Path || path_OR_text == null)) {
-      return _blink.BlinkPath.$_create_2constructorCallback(path_OR_text);
+      return _blink.BlinkPath.constructorCallback_Path2D(path_OR_text);
     }
     if ((path_OR_text is String || path_OR_text == null)) {
-      return _blink.BlinkPath.$_create_3constructorCallback(path_OR_text);
+      return _blink.BlinkPath.constructorCallback_DOMString(path_OR_text);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('Path.arc')
   @DocsEditable()
-  void arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkPath.$arc_Callback(this, x, y, radius, startAngle, endAngle, anticlockwise);
+  void arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkPath.arc_Callback_float_float_float_float_float_boolean(this, x, y, radius, startAngle, endAngle, anticlockwise);
 
   @DomName('Path.arcTo')
   @DocsEditable()
-  void arcTo(num x1, num y1, num x2, num y2, num radius) => _blink.BlinkPath.$arcTo_Callback(this, x1, y1, x2, y2, radius);
+  void arcTo(num x1, num y1, num x2, num y2, num radius) => _blink.BlinkPath.arcTo_Callback_float_float_float_float_float(this, x1, y1, x2, y2, radius);
 
   @DomName('Path.bezierCurveTo')
   @DocsEditable()
-  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) => _blink.BlinkPath.$bezierCurveTo_Callback(this, cp1x, cp1y, cp2x, cp2y, x, y);
+  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) => _blink.BlinkPath.bezierCurveTo_Callback_float_float_float_float_float_float(this, cp1x, cp1y, cp2x, cp2y, x, y);
 
   @DomName('Path.closePath')
   @DocsEditable()
-  void closePath() => _blink.BlinkPath.$closePath_Callback(this);
+  void closePath() => _blink.BlinkPath.closePath_Callback(this);
 
   @DomName('Path.lineTo')
   @DocsEditable()
-  void lineTo(num x, num y) => _blink.BlinkPath.$lineTo_Callback(this, x, y);
+  void lineTo(num x, num y) => _blink.BlinkPath.lineTo_Callback_float_float(this, x, y);
 
   @DomName('Path.moveTo')
   @DocsEditable()
-  void moveTo(num x, num y) => _blink.BlinkPath.$moveTo_Callback(this, x, y);
+  void moveTo(num x, num y) => _blink.BlinkPath.moveTo_Callback_float_float(this, x, y);
 
   @DomName('Path.quadraticCurveTo')
   @DocsEditable()
-  void quadraticCurveTo(num cpx, num cpy, num x, num y) => _blink.BlinkPath.$quadraticCurveTo_Callback(this, cpx, cpy, x, y);
+  void quadraticCurveTo(num cpx, num cpy, num x, num y) => _blink.BlinkPath.quadraticCurveTo_Callback_float_float_float_float(this, cpx, cpy, x, y);
 
   @DomName('Path.rect')
   @DocsEditable()
-  void rect(num x, num y, num width, num height) => _blink.BlinkPath.$rect_Callback(this, x, y, width, height);
+  void rect(num x, num y, num width, num height) => _blink.BlinkPath.rect_Callback_float_float_float_float(this, x, y, width, height);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22919,61 +22919,61 @@
   @DomName('Performance.memory')
   @DocsEditable()
   @Experimental() // nonstandard
-  MemoryInfo get memory => _blink.BlinkPerformance.$memory_Getter(this);
+  MemoryInfo get memory => _blink.BlinkPerformance.memory_Getter(this);
 
   @DomName('Performance.navigation')
   @DocsEditable()
-  PerformanceNavigation get navigation => _blink.BlinkPerformance.$navigation_Getter(this);
+  PerformanceNavigation get navigation => _blink.BlinkPerformance.navigation_Getter(this);
 
   @DomName('Performance.timing')
   @DocsEditable()
-  PerformanceTiming get timing => _blink.BlinkPerformance.$timing_Getter(this);
+  PerformanceTiming get timing => _blink.BlinkPerformance.timing_Getter(this);
 
   @DomName('Performance.clearMarks')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
   @Experimental()
-  void clearMarks(String markName) => _blink.BlinkPerformance.$clearMarks_Callback(this, markName);
+  void clearMarks(String markName) => _blink.BlinkPerformance.clearMarks_Callback_DOMString(this, markName);
 
   @DomName('Performance.clearMeasures')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
   @Experimental()
-  void clearMeasures(String measureName) => _blink.BlinkPerformance.$clearMeasures_Callback(this, measureName);
+  void clearMeasures(String measureName) => _blink.BlinkPerformance.clearMeasures_Callback_DOMString(this, measureName);
 
   @DomName('Performance.getEntries')
   @DocsEditable()
   // http://www.w3.org/TR/performance-timeline/#sec-window.performance-attribute
   @Experimental()
-  List<PerformanceEntry> getEntries() => _blink.BlinkPerformance.$getEntries_Callback(this);
+  List<PerformanceEntry> getEntries() => _blink.BlinkPerformance.getEntries_Callback(this);
 
   @DomName('Performance.getEntriesByName')
   @DocsEditable()
   // http://www.w3.org/TR/performance-timeline/#sec-window.performance-attribute
   @Experimental()
-  List<PerformanceEntry> getEntriesByName(String name, String entryType) => _blink.BlinkPerformance.$getEntriesByName_Callback(this, name, entryType);
+  List<PerformanceEntry> getEntriesByName(String name, String entryType) => _blink.BlinkPerformance.getEntriesByName_Callback_DOMString_DOMString(this, name, entryType);
 
   @DomName('Performance.getEntriesByType')
   @DocsEditable()
   // http://www.w3.org/TR/performance-timeline/#sec-window.performance-attribute
   @Experimental()
-  List<PerformanceEntry> getEntriesByType(String entryType) => _blink.BlinkPerformance.$getEntriesByType_Callback(this, entryType);
+  List<PerformanceEntry> getEntriesByType(String entryType) => _blink.BlinkPerformance.getEntriesByType_Callback_DOMString(this, entryType);
 
   @DomName('Performance.mark')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
   @Experimental()
-  void mark(String markName) => _blink.BlinkPerformance.$mark_Callback(this, markName);
+  void mark(String markName) => _blink.BlinkPerformance.mark_Callback_DOMString(this, markName);
 
   @DomName('Performance.measure')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
   @Experimental()
-  void measure(String measureName, String startMark, String endMark) => _blink.BlinkPerformance.$measure_Callback(this, measureName, startMark, endMark);
+  void measure(String measureName, String startMark, String endMark) => _blink.BlinkPerformance.measure_Callback_DOMString_DOMString_DOMString(this, measureName, startMark, endMark);
 
   @DomName('Performance.now')
   @DocsEditable()
-  double now() => _blink.BlinkPerformance.$now_Callback(this);
+  double now() => _blink.BlinkPerformance.now_Callback(this);
 
   @DomName('Performance.webkitClearResourceTimings')
   @DocsEditable()
@@ -22981,7 +22981,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://www.w3c-test.org/webperf/specs/ResourceTiming/#extensions-performance-interface
-  void clearResourceTimings() => _blink.BlinkPerformance.$webkitClearResourceTimings_Callback(this);
+  void clearResourceTimings() => _blink.BlinkPerformance.webkitClearResourceTimings_Callback(this);
 
   @DomName('Performance.webkitSetResourceTimingBufferSize')
   @DocsEditable()
@@ -22989,7 +22989,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://www.w3c-test.org/webperf/specs/ResourceTiming/#performanceresourcetiming-methods
-  void setResourceTimingBufferSize(int maxSize) => _blink.BlinkPerformance.$webkitSetResourceTimingBufferSize_Callback(this, maxSize);
+  void setResourceTimingBufferSize(int maxSize) => _blink.BlinkPerformance.webkitSetResourceTimingBufferSize_Callback_ul(this, maxSize);
 
   /// Stream of `resourcetimingbufferfull` events handled by this [Performance].
   @DomName('Performance.onwebkitresourcetimingbufferfull')
@@ -23016,19 +23016,19 @@
 
   @DomName('PerformanceEntry.duration')
   @DocsEditable()
-  double get duration => _blink.BlinkPerformanceEntry.$duration_Getter(this);
+  double get duration => _blink.BlinkPerformanceEntry.duration_Getter(this);
 
   @DomName('PerformanceEntry.entryType')
   @DocsEditable()
-  String get entryType => _blink.BlinkPerformanceEntry.$entryType_Getter(this);
+  String get entryType => _blink.BlinkPerformanceEntry.entryType_Getter(this);
 
   @DomName('PerformanceEntry.name')
   @DocsEditable()
-  String get name => _blink.BlinkPerformanceEntry.$name_Getter(this);
+  String get name => _blink.BlinkPerformanceEntry.name_Getter(this);
 
   @DomName('PerformanceEntry.startTime')
   @DocsEditable()
-  double get startTime => _blink.BlinkPerformanceEntry.$startTime_Getter(this);
+  double get startTime => _blink.BlinkPerformanceEntry.startTime_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23095,11 +23095,11 @@
 
   @DomName('PerformanceNavigation.redirectCount')
   @DocsEditable()
-  int get redirectCount => _blink.BlinkPerformanceNavigation.$redirectCount_Getter(this);
+  int get redirectCount => _blink.BlinkPerformanceNavigation.redirectCount_Getter(this);
 
   @DomName('PerformanceNavigation.type')
   @DocsEditable()
-  int get type => _blink.BlinkPerformanceNavigation.$type_Getter(this);
+  int get type => _blink.BlinkPerformanceNavigation.type_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23119,54 +23119,54 @@
 
   @DomName('PerformanceResourceTiming.connectEnd')
   @DocsEditable()
-  double get connectEnd => _blink.BlinkPerformanceResourceTiming.$connectEnd_Getter(this);
+  double get connectEnd => _blink.BlinkPerformanceResourceTiming.connectEnd_Getter(this);
 
   @DomName('PerformanceResourceTiming.connectStart')
   @DocsEditable()
-  double get connectStart => _blink.BlinkPerformanceResourceTiming.$connectStart_Getter(this);
+  double get connectStart => _blink.BlinkPerformanceResourceTiming.connectStart_Getter(this);
 
   @DomName('PerformanceResourceTiming.domainLookupEnd')
   @DocsEditable()
-  double get domainLookupEnd => _blink.BlinkPerformanceResourceTiming.$domainLookupEnd_Getter(this);
+  double get domainLookupEnd => _blink.BlinkPerformanceResourceTiming.domainLookupEnd_Getter(this);
 
   @DomName('PerformanceResourceTiming.domainLookupStart')
   @DocsEditable()
-  double get domainLookupStart => _blink.BlinkPerformanceResourceTiming.$domainLookupStart_Getter(this);
+  double get domainLookupStart => _blink.BlinkPerformanceResourceTiming.domainLookupStart_Getter(this);
 
   @DomName('PerformanceResourceTiming.fetchStart')
   @DocsEditable()
-  double get fetchStart => _blink.BlinkPerformanceResourceTiming.$fetchStart_Getter(this);
+  double get fetchStart => _blink.BlinkPerformanceResourceTiming.fetchStart_Getter(this);
 
   @DomName('PerformanceResourceTiming.initiatorType')
   @DocsEditable()
-  String get initiatorType => _blink.BlinkPerformanceResourceTiming.$initiatorType_Getter(this);
+  String get initiatorType => _blink.BlinkPerformanceResourceTiming.initiatorType_Getter(this);
 
   @DomName('PerformanceResourceTiming.redirectEnd')
   @DocsEditable()
-  double get redirectEnd => _blink.BlinkPerformanceResourceTiming.$redirectEnd_Getter(this);
+  double get redirectEnd => _blink.BlinkPerformanceResourceTiming.redirectEnd_Getter(this);
 
   @DomName('PerformanceResourceTiming.redirectStart')
   @DocsEditable()
-  double get redirectStart => _blink.BlinkPerformanceResourceTiming.$redirectStart_Getter(this);
+  double get redirectStart => _blink.BlinkPerformanceResourceTiming.redirectStart_Getter(this);
 
   @DomName('PerformanceResourceTiming.requestStart')
   @DocsEditable()
   @Experimental() // nonstandard
-  double get requestStart => _blink.BlinkPerformanceResourceTiming.$requestStart_Getter(this);
+  double get requestStart => _blink.BlinkPerformanceResourceTiming.requestStart_Getter(this);
 
   @DomName('PerformanceResourceTiming.responseEnd')
   @DocsEditable()
   @Experimental() // nonstandard
-  double get responseEnd => _blink.BlinkPerformanceResourceTiming.$responseEnd_Getter(this);
+  double get responseEnd => _blink.BlinkPerformanceResourceTiming.responseEnd_Getter(this);
 
   @DomName('PerformanceResourceTiming.responseStart')
   @DocsEditable()
   @Experimental() // nonstandard
-  double get responseStart => _blink.BlinkPerformanceResourceTiming.$responseStart_Getter(this);
+  double get responseStart => _blink.BlinkPerformanceResourceTiming.responseStart_Getter(this);
 
   @DomName('PerformanceResourceTiming.secureConnectionStart')
   @DocsEditable()
-  double get secureConnectionStart => _blink.BlinkPerformanceResourceTiming.$secureConnectionStart_Getter(this);
+  double get secureConnectionStart => _blink.BlinkPerformanceResourceTiming.secureConnectionStart_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23185,87 +23185,87 @@
 
   @DomName('PerformanceTiming.connectEnd')
   @DocsEditable()
-  int get connectEnd => _blink.BlinkPerformanceTiming.$connectEnd_Getter(this);
+  int get connectEnd => _blink.BlinkPerformanceTiming.connectEnd_Getter(this);
 
   @DomName('PerformanceTiming.connectStart')
   @DocsEditable()
-  int get connectStart => _blink.BlinkPerformanceTiming.$connectStart_Getter(this);
+  int get connectStart => _blink.BlinkPerformanceTiming.connectStart_Getter(this);
 
   @DomName('PerformanceTiming.domComplete')
   @DocsEditable()
-  int get domComplete => _blink.BlinkPerformanceTiming.$domComplete_Getter(this);
+  int get domComplete => _blink.BlinkPerformanceTiming.domComplete_Getter(this);
 
   @DomName('PerformanceTiming.domContentLoadedEventEnd')
   @DocsEditable()
-  int get domContentLoadedEventEnd => _blink.BlinkPerformanceTiming.$domContentLoadedEventEnd_Getter(this);
+  int get domContentLoadedEventEnd => _blink.BlinkPerformanceTiming.domContentLoadedEventEnd_Getter(this);
 
   @DomName('PerformanceTiming.domContentLoadedEventStart')
   @DocsEditable()
-  int get domContentLoadedEventStart => _blink.BlinkPerformanceTiming.$domContentLoadedEventStart_Getter(this);
+  int get domContentLoadedEventStart => _blink.BlinkPerformanceTiming.domContentLoadedEventStart_Getter(this);
 
   @DomName('PerformanceTiming.domInteractive')
   @DocsEditable()
-  int get domInteractive => _blink.BlinkPerformanceTiming.$domInteractive_Getter(this);
+  int get domInteractive => _blink.BlinkPerformanceTiming.domInteractive_Getter(this);
 
   @DomName('PerformanceTiming.domLoading')
   @DocsEditable()
-  int get domLoading => _blink.BlinkPerformanceTiming.$domLoading_Getter(this);
+  int get domLoading => _blink.BlinkPerformanceTiming.domLoading_Getter(this);
 
   @DomName('PerformanceTiming.domainLookupEnd')
   @DocsEditable()
-  int get domainLookupEnd => _blink.BlinkPerformanceTiming.$domainLookupEnd_Getter(this);
+  int get domainLookupEnd => _blink.BlinkPerformanceTiming.domainLookupEnd_Getter(this);
 
   @DomName('PerformanceTiming.domainLookupStart')
   @DocsEditable()
-  int get domainLookupStart => _blink.BlinkPerformanceTiming.$domainLookupStart_Getter(this);
+  int get domainLookupStart => _blink.BlinkPerformanceTiming.domainLookupStart_Getter(this);
 
   @DomName('PerformanceTiming.fetchStart')
   @DocsEditable()
-  int get fetchStart => _blink.BlinkPerformanceTiming.$fetchStart_Getter(this);
+  int get fetchStart => _blink.BlinkPerformanceTiming.fetchStart_Getter(this);
 
   @DomName('PerformanceTiming.loadEventEnd')
   @DocsEditable()
-  int get loadEventEnd => _blink.BlinkPerformanceTiming.$loadEventEnd_Getter(this);
+  int get loadEventEnd => _blink.BlinkPerformanceTiming.loadEventEnd_Getter(this);
 
   @DomName('PerformanceTiming.loadEventStart')
   @DocsEditable()
-  int get loadEventStart => _blink.BlinkPerformanceTiming.$loadEventStart_Getter(this);
+  int get loadEventStart => _blink.BlinkPerformanceTiming.loadEventStart_Getter(this);
 
   @DomName('PerformanceTiming.navigationStart')
   @DocsEditable()
-  int get navigationStart => _blink.BlinkPerformanceTiming.$navigationStart_Getter(this);
+  int get navigationStart => _blink.BlinkPerformanceTiming.navigationStart_Getter(this);
 
   @DomName('PerformanceTiming.redirectEnd')
   @DocsEditable()
-  int get redirectEnd => _blink.BlinkPerformanceTiming.$redirectEnd_Getter(this);
+  int get redirectEnd => _blink.BlinkPerformanceTiming.redirectEnd_Getter(this);
 
   @DomName('PerformanceTiming.redirectStart')
   @DocsEditable()
-  int get redirectStart => _blink.BlinkPerformanceTiming.$redirectStart_Getter(this);
+  int get redirectStart => _blink.BlinkPerformanceTiming.redirectStart_Getter(this);
 
   @DomName('PerformanceTiming.requestStart')
   @DocsEditable()
-  int get requestStart => _blink.BlinkPerformanceTiming.$requestStart_Getter(this);
+  int get requestStart => _blink.BlinkPerformanceTiming.requestStart_Getter(this);
 
   @DomName('PerformanceTiming.responseEnd')
   @DocsEditable()
-  int get responseEnd => _blink.BlinkPerformanceTiming.$responseEnd_Getter(this);
+  int get responseEnd => _blink.BlinkPerformanceTiming.responseEnd_Getter(this);
 
   @DomName('PerformanceTiming.responseStart')
   @DocsEditable()
-  int get responseStart => _blink.BlinkPerformanceTiming.$responseStart_Getter(this);
+  int get responseStart => _blink.BlinkPerformanceTiming.responseStart_Getter(this);
 
   @DomName('PerformanceTiming.secureConnectionStart')
   @DocsEditable()
-  int get secureConnectionStart => _blink.BlinkPerformanceTiming.$secureConnectionStart_Getter(this);
+  int get secureConnectionStart => _blink.BlinkPerformanceTiming.secureConnectionStart_Getter(this);
 
   @DomName('PerformanceTiming.unloadEventEnd')
   @DocsEditable()
-  int get unloadEventEnd => _blink.BlinkPerformanceTiming.$unloadEventEnd_Getter(this);
+  int get unloadEventEnd => _blink.BlinkPerformanceTiming.unloadEventEnd_Getter(this);
 
   @DomName('PerformanceTiming.unloadEventStart')
   @DocsEditable()
-  int get unloadEventStart => _blink.BlinkPerformanceTiming.$unloadEventStart_Getter(this);
+  int get unloadEventStart => _blink.BlinkPerformanceTiming.unloadEventStart_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23285,82 +23285,82 @@
   @DomName('Player.currentTime')
   @DocsEditable()
   @Experimental() // untriaged
-  num get currentTime => _blink.BlinkPlayer.$currentTime_Getter(this);
+  num get currentTime => _blink.BlinkPlayer.currentTime_Getter(this);
 
   @DomName('Player.currentTime')
   @DocsEditable()
   @Experimental() // untriaged
-  void set currentTime(num value) => _blink.BlinkPlayer.$currentTime_Setter(this, value);
+  void set currentTime(num value) => _blink.BlinkPlayer.currentTime_Setter_double(this, value);
 
   @DomName('Player.finished')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get finished => _blink.BlinkPlayer.$finished_Getter(this);
+  bool get finished => _blink.BlinkPlayer.finished_Getter(this);
 
   @DomName('Player.paused')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get paused => _blink.BlinkPlayer.$paused_Getter(this);
+  bool get paused => _blink.BlinkPlayer.paused_Getter(this);
 
   @DomName('Player.playbackRate')
   @DocsEditable()
   @Experimental() // untriaged
-  num get playbackRate => _blink.BlinkPlayer.$playbackRate_Getter(this);
+  num get playbackRate => _blink.BlinkPlayer.playbackRate_Getter(this);
 
   @DomName('Player.playbackRate')
   @DocsEditable()
   @Experimental() // untriaged
-  void set playbackRate(num value) => _blink.BlinkPlayer.$playbackRate_Setter(this, value);
+  void set playbackRate(num value) => _blink.BlinkPlayer.playbackRate_Setter_double(this, value);
 
   @DomName('Player.source')
   @DocsEditable()
   @Experimental() // untriaged
-  TimedItem get source => _blink.BlinkPlayer.$source_Getter(this);
+  TimedItem get source => _blink.BlinkPlayer.source_Getter(this);
 
   @DomName('Player.source')
   @DocsEditable()
   @Experimental() // untriaged
-  void set source(TimedItem value) => _blink.BlinkPlayer.$source_Setter(this, value);
+  void set source(TimedItem value) => _blink.BlinkPlayer.source_Setter_TimedItem(this, value);
 
   @DomName('Player.startTime')
   @DocsEditable()
   @Experimental() // untriaged
-  num get startTime => _blink.BlinkPlayer.$startTime_Getter(this);
+  num get startTime => _blink.BlinkPlayer.startTime_Getter(this);
 
   @DomName('Player.startTime')
   @DocsEditable()
   @Experimental() // untriaged
-  void set startTime(num value) => _blink.BlinkPlayer.$startTime_Setter(this, value);
+  void set startTime(num value) => _blink.BlinkPlayer.startTime_Setter_double(this, value);
 
   @DomName('Player.timeLag')
   @DocsEditable()
   @Experimental() // untriaged
-  double get timeLag => _blink.BlinkPlayer.$timeLag_Getter(this);
+  double get timeLag => _blink.BlinkPlayer.timeLag_Getter(this);
 
   @DomName('Player.cancel')
   @DocsEditable()
   @Experimental() // untriaged
-  void cancel() => _blink.BlinkPlayer.$cancel_Callback(this);
+  void cancel() => _blink.BlinkPlayer.cancel_Callback(this);
 
   @DomName('Player.finish')
   @DocsEditable()
   @Experimental() // untriaged
-  void finish() => _blink.BlinkPlayer.$finish_Callback(this);
+  void finish() => _blink.BlinkPlayer.finish_Callback(this);
 
   @DomName('Player.pause')
   @DocsEditable()
   @Experimental() // untriaged
-  void pause() => _blink.BlinkPlayer.$pause_Callback(this);
+  void pause() => _blink.BlinkPlayer.pause_Callback(this);
 
   @DomName('Player.play')
   @DocsEditable()
   @Experimental() // untriaged
-  void play() => _blink.BlinkPlayer.$play_Callback(this);
+  void play() => _blink.BlinkPlayer.play_Callback(this);
 
   @DomName('Player.reverse')
   @DocsEditable()
   @Experimental() // untriaged
-  void reverse() => _blink.BlinkPlayer.$reverse_Callback(this);
+  void reverse() => _blink.BlinkPlayer.reverse_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23379,31 +23379,31 @@
 
   @DomName('Plugin.description')
   @DocsEditable()
-  String get description => _blink.BlinkPlugin.$description_Getter(this);
+  String get description => _blink.BlinkPlugin.description_Getter(this);
 
   @DomName('Plugin.filename')
   @DocsEditable()
-  String get filename => _blink.BlinkPlugin.$filename_Getter(this);
+  String get filename => _blink.BlinkPlugin.filename_Getter(this);
 
   @DomName('Plugin.length')
   @DocsEditable()
-  int get length => _blink.BlinkPlugin.$length_Getter(this);
+  int get length => _blink.BlinkPlugin.length_Getter(this);
 
   @DomName('Plugin.name')
   @DocsEditable()
-  String get name => _blink.BlinkPlugin.$name_Getter(this);
+  String get name => _blink.BlinkPlugin.name_Getter(this);
 
   @DomName('Plugin.__getter__')
   @DocsEditable()
-  MimeType __getter__(String name) => _blink.BlinkPlugin.$__getter___Callback(this, name);
+  MimeType __getter__(String name) => _blink.BlinkPlugin.$__getter___Callback_DOMString(this, name);
 
   @DomName('Plugin.item')
   @DocsEditable()
-  MimeType item(int index) => _blink.BlinkPlugin.$item_Callback(this, index);
+  MimeType item(int index) => _blink.BlinkPlugin.item_Callback_ul(this, index);
 
   @DomName('Plugin.namedItem')
   @DocsEditable()
-  MimeType namedItem(String name) => _blink.BlinkPlugin.$namedItem_Callback(this, name);
+  MimeType namedItem(String name) => _blink.BlinkPlugin.namedItem_Callback_DOMString(this, name);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23422,15 +23422,15 @@
 
   @DomName('PluginArray.length')
   @DocsEditable()
-  int get length => _blink.BlinkPluginArray.$length_Getter(this);
+  int get length => _blink.BlinkPluginArray.length_Getter(this);
 
   Plugin operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkPluginArray.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkPluginArray.item_Callback_ul(this, index);
   }
 
-  Plugin _nativeIndexedGetter(int index) => _blink.BlinkPluginArray.$NativeIndexed_Getter(this, index);
+  Plugin _nativeIndexedGetter(int index) => _blink.BlinkPluginArray.item_Callback_ul(this, index);
 
   void operator[]=(int index, Plugin value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -23472,19 +23472,19 @@
 
   @DomName('PluginArray.__getter__')
   @DocsEditable()
-  Plugin __getter__(String name) => _blink.BlinkPluginArray.$__getter___Callback(this, name);
+  Plugin __getter__(String name) => _blink.BlinkPluginArray.$__getter___Callback_DOMString(this, name);
 
   @DomName('PluginArray.item')
   @DocsEditable()
-  Plugin item(int index) => _blink.BlinkPluginArray.$item_Callback(this, index);
+  Plugin item(int index) => _blink.BlinkPluginArray.item_Callback_ul(this, index);
 
   @DomName('PluginArray.namedItem')
   @DocsEditable()
-  Plugin namedItem(String name) => _blink.BlinkPluginArray.$namedItem_Callback(this, name);
+  Plugin namedItem(String name) => _blink.BlinkPluginArray.namedItem_Callback_DOMString(this, name);
 
   @DomName('PluginArray.refresh')
   @DocsEditable()
-  void refresh(bool reload) => _blink.BlinkPluginArray.$refresh_Callback(this, reload);
+  void refresh(bool reload) => _blink.BlinkPluginArray.refresh_Callback_boolean(this, reload);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23506,7 +23506,7 @@
 
   @DomName('PopStateEvent.state')
   @DocsEditable()
-  Object get state => _blink.BlinkPopStateEvent.$state_Getter(this);
+  Object get state => _blink.BlinkPopStateEvent.state_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23547,11 +23547,11 @@
 
   @DomName('PositionError.code')
   @DocsEditable()
-  int get code => _blink.BlinkPositionError.$code_Getter(this);
+  int get code => _blink.BlinkPositionError.code_Getter(this);
 
   @DomName('PositionError.message')
   @DocsEditable()
-  String get message => _blink.BlinkPositionError.$message_Getter(this);
+  String get message => _blink.BlinkPositionError.message_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23605,11 +23605,11 @@
   @DomName('ProcessingInstruction.sheet')
   @DocsEditable()
   @Experimental() // non-standard
-  StyleSheet get sheet => _blink.BlinkProcessingInstruction.$sheet_Getter(this);
+  StyleSheet get sheet => _blink.BlinkProcessingInstruction.sheet_Getter(this);
 
   @DomName('ProcessingInstruction.target')
   @DocsEditable()
-  String get target => _blink.BlinkProcessingInstruction.$target_Getter(this);
+  String get target => _blink.BlinkProcessingInstruction.target_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23645,27 +23645,27 @@
   @DomName('HTMLProgressElement.labels')
   @DocsEditable()
   @Unstable()
-  List<Node> get labels => _blink.BlinkHTMLProgressElement.$labels_Getter(this);
+  List<Node> get labels => _blink.BlinkHTMLProgressElement.labels_Getter(this);
 
   @DomName('HTMLProgressElement.max')
   @DocsEditable()
-  num get max => _blink.BlinkHTMLProgressElement.$max_Getter(this);
+  num get max => _blink.BlinkHTMLProgressElement.max_Getter(this);
 
   @DomName('HTMLProgressElement.max')
   @DocsEditable()
-  void set max(num value) => _blink.BlinkHTMLProgressElement.$max_Setter(this, value);
+  void set max(num value) => _blink.BlinkHTMLProgressElement.max_Setter_double(this, value);
 
   @DomName('HTMLProgressElement.position')
   @DocsEditable()
-  double get position => _blink.BlinkHTMLProgressElement.$position_Getter(this);
+  double get position => _blink.BlinkHTMLProgressElement.position_Getter(this);
 
   @DomName('HTMLProgressElement.value')
   @DocsEditable()
-  num get value => _blink.BlinkHTMLProgressElement.$value_Getter(this);
+  num get value => _blink.BlinkHTMLProgressElement.value_Getter(this);
 
   @DomName('HTMLProgressElement.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkHTMLProgressElement.$value_Setter(this, value);
+  void set value(num value) => _blink.BlinkHTMLProgressElement.value_Setter_double(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23683,15 +23683,15 @@
 
   @DomName('ProgressEvent.lengthComputable')
   @DocsEditable()
-  bool get lengthComputable => _blink.BlinkProgressEvent.$lengthComputable_Getter(this);
+  bool get lengthComputable => _blink.BlinkProgressEvent.lengthComputable_Getter(this);
 
   @DomName('ProgressEvent.loaded')
   @DocsEditable()
-  int get loaded => _blink.BlinkProgressEvent.$loaded_Getter(this);
+  int get loaded => _blink.BlinkProgressEvent.loaded_Getter(this);
 
   @DomName('ProgressEvent.total')
   @DocsEditable()
-  int get total => _blink.BlinkProgressEvent.$total_Getter(this);
+  int get total => _blink.BlinkProgressEvent.total_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23719,11 +23719,11 @@
 
   @DomName('HTMLQuoteElement.cite')
   @DocsEditable()
-  String get cite => _blink.BlinkHTMLQuoteElement.$cite_Getter(this);
+  String get cite => _blink.BlinkHTMLQuoteElement.cite_Getter(this);
 
   @DomName('HTMLQuoteElement.cite')
   @DocsEditable()
-  void set cite(String value) => _blink.BlinkHTMLQuoteElement.$cite_Setter(this, value);
+  void set cite(String value) => _blink.BlinkHTMLQuoteElement.cite_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23814,120 +23814,120 @@
 
   @DomName('Range.collapsed')
   @DocsEditable()
-  bool get collapsed => _blink.BlinkRange.$collapsed_Getter(this);
+  bool get collapsed => _blink.BlinkRange.collapsed_Getter(this);
 
   @DomName('Range.commonAncestorContainer')
   @DocsEditable()
-  Node get commonAncestorContainer => _blink.BlinkRange.$commonAncestorContainer_Getter(this);
+  Node get commonAncestorContainer => _blink.BlinkRange.commonAncestorContainer_Getter(this);
 
   @DomName('Range.endContainer')
   @DocsEditable()
-  Node get endContainer => _blink.BlinkRange.$endContainer_Getter(this);
+  Node get endContainer => _blink.BlinkRange.endContainer_Getter(this);
 
   @DomName('Range.endOffset')
   @DocsEditable()
-  int get endOffset => _blink.BlinkRange.$endOffset_Getter(this);
+  int get endOffset => _blink.BlinkRange.endOffset_Getter(this);
 
   @DomName('Range.startContainer')
   @DocsEditable()
-  Node get startContainer => _blink.BlinkRange.$startContainer_Getter(this);
+  Node get startContainer => _blink.BlinkRange.startContainer_Getter(this);
 
   @DomName('Range.startOffset')
   @DocsEditable()
-  int get startOffset => _blink.BlinkRange.$startOffset_Getter(this);
+  int get startOffset => _blink.BlinkRange.startOffset_Getter(this);
 
   @DomName('Range.cloneContents')
   @DocsEditable()
-  DocumentFragment cloneContents() => _blink.BlinkRange.$cloneContents_Callback(this);
+  DocumentFragment cloneContents() => _blink.BlinkRange.cloneContents_Callback(this);
 
   @DomName('Range.cloneRange')
   @DocsEditable()
-  Range cloneRange() => _blink.BlinkRange.$cloneRange_Callback(this);
+  Range cloneRange() => _blink.BlinkRange.cloneRange_Callback(this);
 
   @DomName('Range.collapse')
   @DocsEditable()
-  void collapse(bool toStart) => _blink.BlinkRange.$collapse_Callback(this, toStart);
+  void collapse(bool toStart) => _blink.BlinkRange.collapse_Callback_boolean(this, toStart);
 
   @DomName('Range.comparePoint')
   @DocsEditable()
-  int comparePoint(Node refNode, int offset) => _blink.BlinkRange.$comparePoint_Callback(this, refNode, offset);
+  int comparePoint(Node refNode, int offset) => _blink.BlinkRange.comparePoint_Callback_Node_long(this, refNode, offset);
 
   @DomName('Range.createContextualFragment')
   @DocsEditable()
-  DocumentFragment createContextualFragment(String html) => _blink.BlinkRange.$createContextualFragment_Callback(this, html);
+  DocumentFragment createContextualFragment(String html) => _blink.BlinkRange.createContextualFragment_Callback_DOMString(this, html);
 
   @DomName('Range.deleteContents')
   @DocsEditable()
-  void deleteContents() => _blink.BlinkRange.$deleteContents_Callback(this);
+  void deleteContents() => _blink.BlinkRange.deleteContents_Callback(this);
 
   @DomName('Range.detach')
   @DocsEditable()
-  void detach() => _blink.BlinkRange.$detach_Callback(this);
+  void detach() => _blink.BlinkRange.detach_Callback(this);
 
   @DomName('Range.expand')
   @DocsEditable()
   @Experimental() // non-standard
-  void expand(String unit) => _blink.BlinkRange.$expand_Callback(this, unit);
+  void expand(String unit) => _blink.BlinkRange.expand_Callback_DOMString(this, unit);
 
   @DomName('Range.extractContents')
   @DocsEditable()
-  DocumentFragment extractContents() => _blink.BlinkRange.$extractContents_Callback(this);
+  DocumentFragment extractContents() => _blink.BlinkRange.extractContents_Callback(this);
 
   @DomName('Range.getBoundingClientRect')
   @DocsEditable()
-  Rectangle getBoundingClientRect() => _blink.BlinkRange.$getBoundingClientRect_Callback(this);
+  Rectangle getBoundingClientRect() => _blink.BlinkRange.getBoundingClientRect_Callback(this);
 
   @DomName('Range.getClientRects')
   @DocsEditable()
-  List<Rectangle> getClientRects() => _blink.BlinkRange.$getClientRects_Callback(this);
+  List<Rectangle> getClientRects() => _blink.BlinkRange.getClientRects_Callback(this);
 
   @DomName('Range.insertNode')
   @DocsEditable()
-  void insertNode(Node newNode) => _blink.BlinkRange.$insertNode_Callback(this, newNode);
+  void insertNode(Node newNode) => _blink.BlinkRange.insertNode_Callback_Node(this, newNode);
 
   @DomName('Range.isPointInRange')
   @DocsEditable()
-  bool isPointInRange(Node refNode, int offset) => _blink.BlinkRange.$isPointInRange_Callback(this, refNode, offset);
+  bool isPointInRange(Node refNode, int offset) => _blink.BlinkRange.isPointInRange_Callback_Node_long(this, refNode, offset);
 
   @DomName('Range.selectNode')
   @DocsEditable()
-  void selectNode(Node refNode) => _blink.BlinkRange.$selectNode_Callback(this, refNode);
+  void selectNode(Node refNode) => _blink.BlinkRange.selectNode_Callback_Node(this, refNode);
 
   @DomName('Range.selectNodeContents')
   @DocsEditable()
-  void selectNodeContents(Node refNode) => _blink.BlinkRange.$selectNodeContents_Callback(this, refNode);
+  void selectNodeContents(Node refNode) => _blink.BlinkRange.selectNodeContents_Callback_Node(this, refNode);
 
   @DomName('Range.setEnd')
   @DocsEditable()
-  void setEnd(Node refNode, int offset) => _blink.BlinkRange.$setEnd_Callback(this, refNode, offset);
+  void setEnd(Node refNode, int offset) => _blink.BlinkRange.setEnd_Callback_Node_long(this, refNode, offset);
 
   @DomName('Range.setEndAfter')
   @DocsEditable()
-  void setEndAfter(Node refNode) => _blink.BlinkRange.$setEndAfter_Callback(this, refNode);
+  void setEndAfter(Node refNode) => _blink.BlinkRange.setEndAfter_Callback_Node(this, refNode);
 
   @DomName('Range.setEndBefore')
   @DocsEditable()
-  void setEndBefore(Node refNode) => _blink.BlinkRange.$setEndBefore_Callback(this, refNode);
+  void setEndBefore(Node refNode) => _blink.BlinkRange.setEndBefore_Callback_Node(this, refNode);
 
   @DomName('Range.setStart')
   @DocsEditable()
-  void setStart(Node refNode, int offset) => _blink.BlinkRange.$setStart_Callback(this, refNode, offset);
+  void setStart(Node refNode, int offset) => _blink.BlinkRange.setStart_Callback_Node_long(this, refNode, offset);
 
   @DomName('Range.setStartAfter')
   @DocsEditable()
-  void setStartAfter(Node refNode) => _blink.BlinkRange.$setStartAfter_Callback(this, refNode);
+  void setStartAfter(Node refNode) => _blink.BlinkRange.setStartAfter_Callback_Node(this, refNode);
 
   @DomName('Range.setStartBefore')
   @DocsEditable()
-  void setStartBefore(Node refNode) => _blink.BlinkRange.$setStartBefore_Callback(this, refNode);
+  void setStartBefore(Node refNode) => _blink.BlinkRange.setStartBefore_Callback_Node(this, refNode);
 
   @DomName('Range.surroundContents')
   @DocsEditable()
-  void surroundContents(Node newParent) => _blink.BlinkRange.$surroundContents_Callback(this, newParent);
+  void surroundContents(Node newParent) => _blink.BlinkRange.surroundContents_Callback_Node(this, newParent);
 
   @DomName('Range.toString')
   @DocsEditable()
-  String toString() => _blink.BlinkRange.$toString_Callback(this);
+  String toString() => _blink.BlinkRange.toString_Callback(this);
 
 
   /**
@@ -23965,7 +23965,7 @@
 
   @DomName('ResourceProgressEvent.url')
   @DocsEditable()
-  String get url => _blink.BlinkResourceProgressEvent.$url_Getter(this);
+  String get url => _blink.BlinkResourceProgressEvent.url_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24025,77 +24025,77 @@
 
   @DomName('RTCDataChannel.binaryType')
   @DocsEditable()
-  String get binaryType => _blink.BlinkRTCDataChannel.$binaryType_Getter(this);
+  String get binaryType => _blink.BlinkRTCDataChannel.binaryType_Getter(this);
 
   @DomName('RTCDataChannel.binaryType')
   @DocsEditable()
-  void set binaryType(String value) => _blink.BlinkRTCDataChannel.$binaryType_Setter(this, value);
+  void set binaryType(String value) => _blink.BlinkRTCDataChannel.binaryType_Setter_DOMString(this, value);
 
   @DomName('RTCDataChannel.bufferedAmount')
   @DocsEditable()
-  int get bufferedAmount => _blink.BlinkRTCDataChannel.$bufferedAmount_Getter(this);
+  int get bufferedAmount => _blink.BlinkRTCDataChannel.bufferedAmount_Getter(this);
 
   @DomName('RTCDataChannel.id')
   @DocsEditable()
   @Experimental() // untriaged
-  int get id => _blink.BlinkRTCDataChannel.$id_Getter(this);
+  int get id => _blink.BlinkRTCDataChannel.id_Getter(this);
 
   @DomName('RTCDataChannel.label')
   @DocsEditable()
-  String get label => _blink.BlinkRTCDataChannel.$label_Getter(this);
+  String get label => _blink.BlinkRTCDataChannel.label_Getter(this);
 
   @DomName('RTCDataChannel.maxRetransmitTime')
   @DocsEditable()
   @Experimental() // untriaged
-  int get maxRetransmitTime => _blink.BlinkRTCDataChannel.$maxRetransmitTime_Getter(this);
+  int get maxRetransmitTime => _blink.BlinkRTCDataChannel.maxRetransmitTime_Getter(this);
 
   @DomName('RTCDataChannel.maxRetransmits')
   @DocsEditable()
   @Experimental() // untriaged
-  int get maxRetransmits => _blink.BlinkRTCDataChannel.$maxRetransmits_Getter(this);
+  int get maxRetransmits => _blink.BlinkRTCDataChannel.maxRetransmits_Getter(this);
 
   @DomName('RTCDataChannel.negotiated')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get negotiated => _blink.BlinkRTCDataChannel.$negotiated_Getter(this);
+  bool get negotiated => _blink.BlinkRTCDataChannel.negotiated_Getter(this);
 
   @DomName('RTCDataChannel.ordered')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get ordered => _blink.BlinkRTCDataChannel.$ordered_Getter(this);
+  bool get ordered => _blink.BlinkRTCDataChannel.ordered_Getter(this);
 
   @DomName('RTCDataChannel.protocol')
   @DocsEditable()
   @Experimental() // untriaged
-  String get protocol => _blink.BlinkRTCDataChannel.$protocol_Getter(this);
+  String get protocol => _blink.BlinkRTCDataChannel.protocol_Getter(this);
 
   @DomName('RTCDataChannel.readyState')
   @DocsEditable()
-  String get readyState => _blink.BlinkRTCDataChannel.$readyState_Getter(this);
+  String get readyState => _blink.BlinkRTCDataChannel.readyState_Getter(this);
 
   @DomName('RTCDataChannel.reliable')
   @DocsEditable()
-  bool get reliable => _blink.BlinkRTCDataChannel.$reliable_Getter(this);
+  bool get reliable => _blink.BlinkRTCDataChannel.reliable_Getter(this);
 
   @DomName('RTCDataChannel.close')
   @DocsEditable()
-  void close() => _blink.BlinkRTCDataChannel.$close_Callback(this);
+  void close() => _blink.BlinkRTCDataChannel.close_Callback(this);
 
   void send(data) {
     if ((data is TypedData || data == null)) {
-      _blink.BlinkRTCDataChannel.$_send_1_Callback(this, data);
+      _blink.BlinkRTCDataChannel.send_Callback_ArrayBufferView(this, data);
       return;
     }
     if ((data is ByteBuffer || data == null)) {
-      _blink.BlinkRTCDataChannel.$_send_2_Callback(this, data);
+      _blink.BlinkRTCDataChannel.send_Callback_ArrayBuffer(this, data);
       return;
     }
     if ((data is Blob || data == null)) {
-      _blink.BlinkRTCDataChannel.$_send_3_Callback(this, data);
+      _blink.BlinkRTCDataChannel.send_Callback_Blob(this, data);
       return;
     }
     if ((data is String || data == null)) {
-      _blink.BlinkRTCDataChannel.$_send_4_Callback(this, data);
+      _blink.BlinkRTCDataChannel.send_Callback_DOMString(this, data);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -24103,19 +24103,19 @@
 
   @DomName('RTCDataChannel.sendBlob')
   @DocsEditable()
-  void sendBlob(Blob data) => _blink.BlinkRTCDataChannel.$sendBlob_Callback(this, data);
+  void sendBlob(Blob data) => _blink.BlinkRTCDataChannel.send_Callback_Blob(this, data);
 
   @DomName('RTCDataChannel.sendByteBuffer')
   @DocsEditable()
-  void sendByteBuffer(ByteBuffer data) => _blink.BlinkRTCDataChannel.$sendByteBuffer_Callback(this, data);
+  void sendByteBuffer(ByteBuffer data) => _blink.BlinkRTCDataChannel.send_Callback_ArrayBuffer(this, data);
 
   @DomName('RTCDataChannel.sendString')
   @DocsEditable()
-  void sendString(String data) => _blink.BlinkRTCDataChannel.$sendString_Callback(this, data);
+  void sendString(String data) => _blink.BlinkRTCDataChannel.send_Callback_DOMString(this, data);
 
   @DomName('RTCDataChannel.sendTypedData')
   @DocsEditable()
-  void sendTypedData(TypedData data) => _blink.BlinkRTCDataChannel.$sendTypedData_Callback(this, data);
+  void sendTypedData(TypedData data) => _blink.BlinkRTCDataChannel.send_Callback_ArrayBufferView(this, data);
 
   /// Stream of `close` events handled by this [RtcDataChannel].
   @DomName('RTCDataChannel.onclose')
@@ -24155,7 +24155,7 @@
 
   @DomName('RTCDataChannelEvent.channel')
   @DocsEditable()
-  RtcDataChannel get channel => _blink.BlinkRTCDataChannelEvent.$channel_Getter(this);
+  RtcDataChannel get channel => _blink.BlinkRTCDataChannelEvent.channel_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24185,34 +24185,34 @@
 
   @DomName('RTCDTMFSender.canInsertDTMF')
   @DocsEditable()
-  bool get canInsertDtmf => _blink.BlinkRTCDTMFSender.$canInsertDTMF_Getter(this);
+  bool get canInsertDtmf => _blink.BlinkRTCDTMFSender.canInsertDTMF_Getter(this);
 
   @DomName('RTCDTMFSender.duration')
   @DocsEditable()
-  int get duration => _blink.BlinkRTCDTMFSender.$duration_Getter(this);
+  int get duration => _blink.BlinkRTCDTMFSender.duration_Getter(this);
 
   @DomName('RTCDTMFSender.interToneGap')
   @DocsEditable()
-  int get interToneGap => _blink.BlinkRTCDTMFSender.$interToneGap_Getter(this);
+  int get interToneGap => _blink.BlinkRTCDTMFSender.interToneGap_Getter(this);
 
   @DomName('RTCDTMFSender.toneBuffer')
   @DocsEditable()
-  String get toneBuffer => _blink.BlinkRTCDTMFSender.$toneBuffer_Getter(this);
+  String get toneBuffer => _blink.BlinkRTCDTMFSender.toneBuffer_Getter(this);
 
   @DomName('RTCDTMFSender.track')
   @DocsEditable()
-  MediaStreamTrack get track => _blink.BlinkRTCDTMFSender.$track_Getter(this);
+  MediaStreamTrack get track => _blink.BlinkRTCDTMFSender.track_Getter(this);
 
   void insertDtmf(String tones, [int duration, int interToneGap]) {
     if (interToneGap != null) {
-      _blink.BlinkRTCDTMFSender.$_insertDTMF_1_Callback(this, tones, duration, interToneGap);
+      _blink.BlinkRTCDTMFSender.insertDTMF_Callback_DOMString_long_long(this, tones, duration, interToneGap);
       return;
     }
     if (duration != null) {
-      _blink.BlinkRTCDTMFSender.$_insertDTMF_2_Callback(this, tones, duration);
+      _blink.BlinkRTCDTMFSender.insertDTMF_Callback_DOMString_long(this, tones, duration);
       return;
     }
-    _blink.BlinkRTCDTMFSender.$_insertDTMF_3_Callback(this, tones);
+    _blink.BlinkRTCDTMFSender.insertDTMF_Callback_DOMString(this, tones);
     return;
   }
 
@@ -24239,7 +24239,7 @@
 
   @DomName('RTCDTMFToneChangeEvent.tone')
   @DocsEditable()
-  String get tone => _blink.BlinkRTCDTMFToneChangeEvent.$tone_Getter(this);
+  String get tone => _blink.BlinkRTCDTMFToneChangeEvent.tone_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24261,20 +24261,20 @@
   @DomName('RTCIceCandidate.RTCIceCandidate')
   @DocsEditable()
   factory RtcIceCandidate(Map dictionary) {
-    return _blink.BlinkRTCIceCandidate.$_create_1constructorCallback(dictionary);
+    return _blink.BlinkRTCIceCandidate.constructorCallback_Dictionary(dictionary);
   }
 
   @DomName('RTCIceCandidate.candidate')
   @DocsEditable()
-  String get candidate => _blink.BlinkRTCIceCandidate.$candidate_Getter(this);
+  String get candidate => _blink.BlinkRTCIceCandidate.candidate_Getter(this);
 
   @DomName('RTCIceCandidate.sdpMLineIndex')
   @DocsEditable()
-  int get sdpMLineIndex => _blink.BlinkRTCIceCandidate.$sdpMLineIndex_Getter(this);
+  int get sdpMLineIndex => _blink.BlinkRTCIceCandidate.sdpMLineIndex_Getter(this);
 
   @DomName('RTCIceCandidate.sdpMid')
   @DocsEditable()
-  String get sdpMid => _blink.BlinkRTCIceCandidate.$sdpMid_Getter(this);
+  String get sdpMid => _blink.BlinkRTCIceCandidate.sdpMid_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24294,7 +24294,7 @@
 
   @DomName('RTCIceCandidateEvent.candidate')
   @DocsEditable()
-  RtcIceCandidate get candidate => _blink.BlinkRTCIceCandidateEvent.$candidate_Getter(this);
+  RtcIceCandidate get candidate => _blink.BlinkRTCIceCandidateEvent.candidate_Getter(this);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -24411,80 +24411,80 @@
   @DomName('RTCPeerConnection.RTCPeerConnection')
   @DocsEditable()
   factory RtcPeerConnection(Map rtcIceServers, [Map mediaConstraints]) {
-    return _blink.BlinkRTCPeerConnection.$_create_1constructorCallback(rtcIceServers, mediaConstraints);
+    return _blink.BlinkRTCPeerConnection.constructorCallback_Dictionary_Dictionary(rtcIceServers, mediaConstraints);
   }
 
   @DomName('RTCPeerConnection.iceConnectionState')
   @DocsEditable()
-  String get iceConnectionState => _blink.BlinkRTCPeerConnection.$iceConnectionState_Getter(this);
+  String get iceConnectionState => _blink.BlinkRTCPeerConnection.iceConnectionState_Getter(this);
 
   @DomName('RTCPeerConnection.iceGatheringState')
   @DocsEditable()
-  String get iceGatheringState => _blink.BlinkRTCPeerConnection.$iceGatheringState_Getter(this);
+  String get iceGatheringState => _blink.BlinkRTCPeerConnection.iceGatheringState_Getter(this);
 
   @DomName('RTCPeerConnection.localDescription')
   @DocsEditable()
-  RtcSessionDescription get localDescription => _blink.BlinkRTCPeerConnection.$localDescription_Getter(this);
+  RtcSessionDescription get localDescription => _blink.BlinkRTCPeerConnection.localDescription_Getter(this);
 
   @DomName('RTCPeerConnection.remoteDescription')
   @DocsEditable()
-  RtcSessionDescription get remoteDescription => _blink.BlinkRTCPeerConnection.$remoteDescription_Getter(this);
+  RtcSessionDescription get remoteDescription => _blink.BlinkRTCPeerConnection.remoteDescription_Getter(this);
 
   @DomName('RTCPeerConnection.signalingState')
   @DocsEditable()
-  String get signalingState => _blink.BlinkRTCPeerConnection.$signalingState_Getter(this);
+  String get signalingState => _blink.BlinkRTCPeerConnection.signalingState_Getter(this);
 
   @DomName('RTCPeerConnection.addIceCandidate')
   @DocsEditable()
-  void addIceCandidate(RtcIceCandidate candidate, VoidCallback successCallback, _RtcErrorCallback failureCallback) => _blink.BlinkRTCPeerConnection.$addIceCandidate_Callback(this, candidate, successCallback, failureCallback);
+  void addIceCandidate(RtcIceCandidate candidate, VoidCallback successCallback, _RtcErrorCallback failureCallback) => _blink.BlinkRTCPeerConnection.addIceCandidate_Callback_RTCIceCandidate_VoidCallback_RTCErrorCallback(this, candidate, successCallback, failureCallback);
 
   @DomName('RTCPeerConnection.addStream')
   @DocsEditable()
-  void addStream(MediaStream stream, [Map mediaConstraints]) => _blink.BlinkRTCPeerConnection.$addStream_Callback(this, stream, mediaConstraints);
+  void addStream(MediaStream stream, [Map mediaConstraints]) => _blink.BlinkRTCPeerConnection.addStream_Callback_MediaStream_Dictionary(this, stream, mediaConstraints);
 
   @DomName('RTCPeerConnection.close')
   @DocsEditable()
-  void close() => _blink.BlinkRTCPeerConnection.$close_Callback(this);
+  void close() => _blink.BlinkRTCPeerConnection.close_Callback(this);
 
   @DomName('RTCPeerConnection.createAnswer')
   @DocsEditable()
-  void _createAnswer(_RtcSessionDescriptionCallback successCallback, [_RtcErrorCallback failureCallback, Map mediaConstraints]) => _blink.BlinkRTCPeerConnection.$createAnswer_Callback(this, successCallback, failureCallback, mediaConstraints);
+  void _createAnswer(_RtcSessionDescriptionCallback successCallback, [_RtcErrorCallback failureCallback, Map mediaConstraints]) => _blink.BlinkRTCPeerConnection.createAnswer_Callback_RTCSessionDescriptionCallback_RTCErrorCallback_Dictionary(this, successCallback, failureCallback, mediaConstraints);
 
   @DomName('RTCPeerConnection.createDTMFSender')
   @DocsEditable()
-  RtcDtmfSender createDtmfSender(MediaStreamTrack track) => _blink.BlinkRTCPeerConnection.$createDTMFSender_Callback(this, track);
+  RtcDtmfSender createDtmfSender(MediaStreamTrack track) => _blink.BlinkRTCPeerConnection.createDTMFSender_Callback_MediaStreamTrack(this, track);
 
   @DomName('RTCPeerConnection.createDataChannel')
   @DocsEditable()
-  RtcDataChannel createDataChannel(String label, [Map options]) => _blink.BlinkRTCPeerConnection.$createDataChannel_Callback(this, label, options);
+  RtcDataChannel createDataChannel(String label, [Map options]) => _blink.BlinkRTCPeerConnection.createDataChannel_Callback_DOMString_Dictionary(this, label, options);
 
   @DomName('RTCPeerConnection.createOffer')
   @DocsEditable()
-  void _createOffer(_RtcSessionDescriptionCallback successCallback, [_RtcErrorCallback failureCallback, Map mediaConstraints]) => _blink.BlinkRTCPeerConnection.$createOffer_Callback(this, successCallback, failureCallback, mediaConstraints);
+  void _createOffer(_RtcSessionDescriptionCallback successCallback, [_RtcErrorCallback failureCallback, Map mediaConstraints]) => _blink.BlinkRTCPeerConnection.createOffer_Callback_RTCSessionDescriptionCallback_RTCErrorCallback_Dictionary(this, successCallback, failureCallback, mediaConstraints);
 
   @DomName('RTCPeerConnection.getLocalStreams')
   @DocsEditable()
-  List<MediaStream> getLocalStreams() => _blink.BlinkRTCPeerConnection.$getLocalStreams_Callback(this);
+  List<MediaStream> getLocalStreams() => _blink.BlinkRTCPeerConnection.getLocalStreams_Callback(this);
 
   @DomName('RTCPeerConnection.getRemoteStreams')
   @DocsEditable()
-  List<MediaStream> getRemoteStreams() => _blink.BlinkRTCPeerConnection.$getRemoteStreams_Callback(this);
+  List<MediaStream> getRemoteStreams() => _blink.BlinkRTCPeerConnection.getRemoteStreams_Callback(this);
 
   @DomName('RTCPeerConnection.getStats')
   @DocsEditable()
-  void _getStats(RtcStatsCallback successCallback, MediaStreamTrack selector) => _blink.BlinkRTCPeerConnection.$getStats_Callback(this, successCallback, selector);
+  void _getStats(RtcStatsCallback successCallback, MediaStreamTrack selector) => _blink.BlinkRTCPeerConnection.getStats_Callback_RTCStatsCallback_MediaStreamTrack(this, successCallback, selector);
 
   @DomName('RTCPeerConnection.getStreamById')
   @DocsEditable()
-  MediaStream getStreamById(String streamId) => _blink.BlinkRTCPeerConnection.$getStreamById_Callback(this, streamId);
+  MediaStream getStreamById(String streamId) => _blink.BlinkRTCPeerConnection.getStreamById_Callback_DOMString(this, streamId);
 
   @DomName('RTCPeerConnection.removeStream')
   @DocsEditable()
-  void removeStream(MediaStream stream) => _blink.BlinkRTCPeerConnection.$removeStream_Callback(this, stream);
+  void removeStream(MediaStream stream) => _blink.BlinkRTCPeerConnection.removeStream_Callback_MediaStream(this, stream);
 
   @DomName('RTCPeerConnection.setLocalDescription')
   @DocsEditable()
-  void _setLocalDescription(RtcSessionDescription description, [VoidCallback successCallback, _RtcErrorCallback failureCallback]) => _blink.BlinkRTCPeerConnection.$setLocalDescription_Callback(this, description, successCallback, failureCallback);
+  void _setLocalDescription(RtcSessionDescription description, [VoidCallback successCallback, _RtcErrorCallback failureCallback]) => _blink.BlinkRTCPeerConnection.setLocalDescription_Callback_RTCSessionDescription_VoidCallback_RTCErrorCallback(this, description, successCallback, failureCallback);
 
   Future setLocalDescription(RtcSessionDescription description) {
     var completer = new Completer();
@@ -24496,7 +24496,7 @@
 
   @DomName('RTCPeerConnection.setRemoteDescription')
   @DocsEditable()
-  void _setRemoteDescription(RtcSessionDescription description, [VoidCallback successCallback, _RtcErrorCallback failureCallback]) => _blink.BlinkRTCPeerConnection.$setRemoteDescription_Callback(this, description, successCallback, failureCallback);
+  void _setRemoteDescription(RtcSessionDescription description, [VoidCallback successCallback, _RtcErrorCallback failureCallback]) => _blink.BlinkRTCPeerConnection.setRemoteDescription_Callback_RTCSessionDescription_VoidCallback_RTCErrorCallback(this, description, successCallback, failureCallback);
 
   Future setRemoteDescription(RtcSessionDescription description) {
     var completer = new Completer();
@@ -24508,7 +24508,7 @@
 
   @DomName('RTCPeerConnection.updateIce')
   @DocsEditable()
-  void updateIce([Map configuration, Map mediaConstraints]) => _blink.BlinkRTCPeerConnection.$updateIce_Callback(this, configuration, mediaConstraints);
+  void updateIce([Map configuration, Map mediaConstraints]) => _blink.BlinkRTCPeerConnection.updateIce_Callback_Dictionary_Dictionary(this, configuration, mediaConstraints);
 
   /// Stream of `addstream` events handled by this [RtcPeerConnection].
   @DomName('RTCPeerConnection.onaddstream')
@@ -24565,24 +24565,24 @@
   @DomName('RTCSessionDescription.RTCSessionDescription')
   @DocsEditable()
   factory RtcSessionDescription([Map descriptionInitDict]) {
-    return _blink.BlinkRTCSessionDescription.$_create_1constructorCallback(descriptionInitDict);
+    return _blink.BlinkRTCSessionDescription.constructorCallback_Dictionary(descriptionInitDict);
   }
 
   @DomName('RTCSessionDescription.sdp')
   @DocsEditable()
-  String get sdp => _blink.BlinkRTCSessionDescription.$sdp_Getter(this);
+  String get sdp => _blink.BlinkRTCSessionDescription.sdp_Getter(this);
 
   @DomName('RTCSessionDescription.sdp')
   @DocsEditable()
-  void set sdp(String value) => _blink.BlinkRTCSessionDescription.$sdp_Setter(this, value);
+  void set sdp(String value) => _blink.BlinkRTCSessionDescription.sdp_Setter_DOMString(this, value);
 
   @DomName('RTCSessionDescription.type')
   @DocsEditable()
-  String get type => _blink.BlinkRTCSessionDescription.$type_Getter(this);
+  String get type => _blink.BlinkRTCSessionDescription.type_Getter(this);
 
   @DomName('RTCSessionDescription.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkRTCSessionDescription.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkRTCSessionDescription.type_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24602,31 +24602,31 @@
 
   @DomName('RTCStatsReport.id')
   @DocsEditable()
-  String get id => _blink.BlinkRTCStatsReport.$id_Getter(this);
+  String get id => _blink.BlinkRTCStatsReport.id_Getter(this);
 
   @DomName('RTCStatsReport.local')
   @DocsEditable()
-  RtcStatsReport get local => _blink.BlinkRTCStatsReport.$local_Getter(this);
+  RtcStatsReport get local => _blink.BlinkRTCStatsReport.local_Getter(this);
 
   @DomName('RTCStatsReport.remote')
   @DocsEditable()
-  RtcStatsReport get remote => _blink.BlinkRTCStatsReport.$remote_Getter(this);
+  RtcStatsReport get remote => _blink.BlinkRTCStatsReport.remote_Getter(this);
 
   @DomName('RTCStatsReport.timestamp')
   @DocsEditable()
-  DateTime get timestamp => _blink.BlinkRTCStatsReport.$timestamp_Getter(this);
+  DateTime get timestamp => _blink.BlinkRTCStatsReport.timestamp_Getter(this);
 
   @DomName('RTCStatsReport.type')
   @DocsEditable()
-  String get type => _blink.BlinkRTCStatsReport.$type_Getter(this);
+  String get type => _blink.BlinkRTCStatsReport.type_Getter(this);
 
   @DomName('RTCStatsReport.names')
   @DocsEditable()
-  List<String> names() => _blink.BlinkRTCStatsReport.$names_Callback(this);
+  List<String> names() => _blink.BlinkRTCStatsReport.names_Callback(this);
 
   @DomName('RTCStatsReport.stat')
   @DocsEditable()
-  String stat(String name) => _blink.BlinkRTCStatsReport.$stat_Callback(this, name);
+  String stat(String name) => _blink.BlinkRTCStatsReport.stat_Callback_DOMString(this, name);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24646,15 +24646,15 @@
 
   @DomName('RTCStatsResponse.__getter__')
   @DocsEditable()
-  RtcStatsReport __getter__(String name) => _blink.BlinkRTCStatsResponse.$__getter___Callback(this, name);
+  RtcStatsReport __getter__(String name) => _blink.BlinkRTCStatsResponse.$__getter___Callback_DOMString(this, name);
 
   @DomName('RTCStatsResponse.namedItem')
   @DocsEditable()
-  RtcStatsReport namedItem(String name) => _blink.BlinkRTCStatsResponse.$namedItem_Callback(this, name);
+  RtcStatsReport namedItem(String name) => _blink.BlinkRTCStatsResponse.namedItem_Callback_DOMString(this, name);
 
   @DomName('RTCStatsResponse.result')
   @DocsEditable()
-  List<RtcStatsReport> result() => _blink.BlinkRTCStatsResponse.$result_Callback(this);
+  List<RtcStatsReport> result() => _blink.BlinkRTCStatsResponse.result_Callback(this);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -24677,52 +24677,52 @@
 
   @DomName('Screen.availHeight')
   @DocsEditable()
-  int get _availHeight => _blink.BlinkScreen.$availHeight_Getter(this);
+  int get _availHeight => _blink.BlinkScreen.availHeight_Getter(this);
 
   @DomName('Screen.availLeft')
   @DocsEditable()
   @Experimental() // nonstandard
-  int get _availLeft => _blink.BlinkScreen.$availLeft_Getter(this);
+  int get _availLeft => _blink.BlinkScreen.availLeft_Getter(this);
 
   @DomName('Screen.availTop')
   @DocsEditable()
   @Experimental() // nonstandard
-  int get _availTop => _blink.BlinkScreen.$availTop_Getter(this);
+  int get _availTop => _blink.BlinkScreen.availTop_Getter(this);
 
   @DomName('Screen.availWidth')
   @DocsEditable()
-  int get _availWidth => _blink.BlinkScreen.$availWidth_Getter(this);
+  int get _availWidth => _blink.BlinkScreen.availWidth_Getter(this);
 
   @DomName('Screen.colorDepth')
   @DocsEditable()
-  int get colorDepth => _blink.BlinkScreen.$colorDepth_Getter(this);
+  int get colorDepth => _blink.BlinkScreen.colorDepth_Getter(this);
 
   @DomName('Screen.height')
   @DocsEditable()
-  int get height => _blink.BlinkScreen.$height_Getter(this);
+  int get height => _blink.BlinkScreen.height_Getter(this);
 
   @DomName('Screen.orientation')
   @DocsEditable()
   @Experimental() // untriaged
-  String get orientation => _blink.BlinkScreen.$orientation_Getter(this);
+  String get orientation => _blink.BlinkScreen.orientation_Getter(this);
 
   @DomName('Screen.pixelDepth')
   @DocsEditable()
-  int get pixelDepth => _blink.BlinkScreen.$pixelDepth_Getter(this);
+  int get pixelDepth => _blink.BlinkScreen.pixelDepth_Getter(this);
 
   @DomName('Screen.width')
   @DocsEditable()
-  int get width => _blink.BlinkScreen.$width_Getter(this);
+  int get width => _blink.BlinkScreen.width_Getter(this);
 
   @DomName('Screen.lockOrientation')
   @DocsEditable()
   @Experimental() // untriaged
-  bool lockOrientation(String orientation) => _blink.BlinkScreen.$lockOrientation_Callback(this, orientation);
+  bool lockOrientation(String orientation) => _blink.BlinkScreen.lockOrientation_Callback_DOMString(this, orientation);
 
   @DomName('Screen.unlockOrientation')
   @DocsEditable()
   @Experimental() // untriaged
-  void unlockOrientation() => _blink.BlinkScreen.$unlockOrientation_Callback(this);
+  void unlockOrientation() => _blink.BlinkScreen.unlockOrientation_Callback(this);
 }
 // 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
@@ -24749,67 +24749,67 @@
 
   @DomName('HTMLScriptElement.async')
   @DocsEditable()
-  bool get async => _blink.BlinkHTMLScriptElement.$async_Getter(this);
+  bool get async => _blink.BlinkHTMLScriptElement.async_Getter(this);
 
   @DomName('HTMLScriptElement.async')
   @DocsEditable()
-  void set async(bool value) => _blink.BlinkHTMLScriptElement.$async_Setter(this, value);
+  void set async(bool value) => _blink.BlinkHTMLScriptElement.async_Setter_boolean(this, value);
 
   @DomName('HTMLScriptElement.charset')
   @DocsEditable()
-  String get charset => _blink.BlinkHTMLScriptElement.$charset_Getter(this);
+  String get charset => _blink.BlinkHTMLScriptElement.charset_Getter(this);
 
   @DomName('HTMLScriptElement.charset')
   @DocsEditable()
-  void set charset(String value) => _blink.BlinkHTMLScriptElement.$charset_Setter(this, value);
+  void set charset(String value) => _blink.BlinkHTMLScriptElement.charset_Setter_DOMString(this, value);
 
   @DomName('HTMLScriptElement.crossOrigin')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#attr-script-crossorigin
   @Experimental()
-  String get crossOrigin => _blink.BlinkHTMLScriptElement.$crossOrigin_Getter(this);
+  String get crossOrigin => _blink.BlinkHTMLScriptElement.crossOrigin_Getter(this);
 
   @DomName('HTMLScriptElement.crossOrigin')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#attr-script-crossorigin
   @Experimental()
-  void set crossOrigin(String value) => _blink.BlinkHTMLScriptElement.$crossOrigin_Setter(this, value);
+  void set crossOrigin(String value) => _blink.BlinkHTMLScriptElement.crossOrigin_Setter_DOMString(this, value);
 
   @DomName('HTMLScriptElement.defer')
   @DocsEditable()
-  bool get defer => _blink.BlinkHTMLScriptElement.$defer_Getter(this);
+  bool get defer => _blink.BlinkHTMLScriptElement.defer_Getter(this);
 
   @DomName('HTMLScriptElement.defer')
   @DocsEditable()
-  void set defer(bool value) => _blink.BlinkHTMLScriptElement.$defer_Setter(this, value);
+  void set defer(bool value) => _blink.BlinkHTMLScriptElement.defer_Setter_boolean(this, value);
 
   @DomName('HTMLScriptElement.nonce')
   @DocsEditable()
   // https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#interaction-with-the-script-src-directive
   @Experimental()
-  String get nonce => _blink.BlinkHTMLScriptElement.$nonce_Getter(this);
+  String get nonce => _blink.BlinkHTMLScriptElement.nonce_Getter(this);
 
   @DomName('HTMLScriptElement.nonce')
   @DocsEditable()
   // https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#interaction-with-the-script-src-directive
   @Experimental()
-  void set nonce(String value) => _blink.BlinkHTMLScriptElement.$nonce_Setter(this, value);
+  void set nonce(String value) => _blink.BlinkHTMLScriptElement.nonce_Setter_DOMString(this, value);
 
   @DomName('HTMLScriptElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLScriptElement.$src_Getter(this);
+  String get src => _blink.BlinkHTMLScriptElement.src_Getter(this);
 
   @DomName('HTMLScriptElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLScriptElement.$src_Setter(this, value);
+  void set src(String value) => _blink.BlinkHTMLScriptElement.src_Setter_DOMString(this, value);
 
   @DomName('HTMLScriptElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLScriptElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLScriptElement.type_Getter(this);
 
   @DomName('HTMLScriptElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLScriptElement.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkHTMLScriptElement.type_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24829,44 +24829,44 @@
 
   @DomName('SecurityPolicyViolationEvent.blockedURI')
   @DocsEditable()
-  String get blockedUri => _blink.BlinkSecurityPolicyViolationEvent.$blockedURI_Getter(this);
+  String get blockedUri => _blink.BlinkSecurityPolicyViolationEvent.blockedURI_Getter(this);
 
   @DomName('SecurityPolicyViolationEvent.columnNumber')
   @DocsEditable()
-  int get columnNumber => _blink.BlinkSecurityPolicyViolationEvent.$columnNumber_Getter(this);
+  int get columnNumber => _blink.BlinkSecurityPolicyViolationEvent.columnNumber_Getter(this);
 
   @DomName('SecurityPolicyViolationEvent.documentURI')
   @DocsEditable()
-  String get documentUri => _blink.BlinkSecurityPolicyViolationEvent.$documentURI_Getter(this);
+  String get documentUri => _blink.BlinkSecurityPolicyViolationEvent.documentURI_Getter(this);
 
   @DomName('SecurityPolicyViolationEvent.effectiveDirective')
   @DocsEditable()
-  String get effectiveDirective => _blink.BlinkSecurityPolicyViolationEvent.$effectiveDirective_Getter(this);
+  String get effectiveDirective => _blink.BlinkSecurityPolicyViolationEvent.effectiveDirective_Getter(this);
 
   @DomName('SecurityPolicyViolationEvent.lineNumber')
   @DocsEditable()
-  int get lineNumber => _blink.BlinkSecurityPolicyViolationEvent.$lineNumber_Getter(this);
+  int get lineNumber => _blink.BlinkSecurityPolicyViolationEvent.lineNumber_Getter(this);
 
   @DomName('SecurityPolicyViolationEvent.originalPolicy')
   @DocsEditable()
-  String get originalPolicy => _blink.BlinkSecurityPolicyViolationEvent.$originalPolicy_Getter(this);
+  String get originalPolicy => _blink.BlinkSecurityPolicyViolationEvent.originalPolicy_Getter(this);
 
   @DomName('SecurityPolicyViolationEvent.referrer')
   @DocsEditable()
-  String get referrer => _blink.BlinkSecurityPolicyViolationEvent.$referrer_Getter(this);
+  String get referrer => _blink.BlinkSecurityPolicyViolationEvent.referrer_Getter(this);
 
   @DomName('SecurityPolicyViolationEvent.sourceFile')
   @DocsEditable()
-  String get sourceFile => _blink.BlinkSecurityPolicyViolationEvent.$sourceFile_Getter(this);
+  String get sourceFile => _blink.BlinkSecurityPolicyViolationEvent.sourceFile_Getter(this);
 
   @DomName('SecurityPolicyViolationEvent.statusCode')
   @DocsEditable()
   @Experimental() // untriaged
-  int get statusCode => _blink.BlinkSecurityPolicyViolationEvent.$statusCode_Getter(this);
+  int get statusCode => _blink.BlinkSecurityPolicyViolationEvent.statusCode_Getter(this);
 
   @DomName('SecurityPolicyViolationEvent.violatedDirective')
   @DocsEditable()
-  String get violatedDirective => _blink.BlinkSecurityPolicyViolationEvent.$violatedDirective_Getter(this);
+  String get violatedDirective => _blink.BlinkSecurityPolicyViolationEvent.violatedDirective_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24891,120 +24891,120 @@
 
   @DomName('HTMLSelectElement.autofocus')
   @DocsEditable()
-  bool get autofocus => _blink.BlinkHTMLSelectElement.$autofocus_Getter(this);
+  bool get autofocus => _blink.BlinkHTMLSelectElement.autofocus_Getter(this);
 
   @DomName('HTMLSelectElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLSelectElement.$autofocus_Setter(this, value);
+  void set autofocus(bool value) => _blink.BlinkHTMLSelectElement.autofocus_Setter_boolean(this, value);
 
   @DomName('HTMLSelectElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLSelectElement.$disabled_Getter(this);
+  bool get disabled => _blink.BlinkHTMLSelectElement.disabled_Getter(this);
 
   @DomName('HTMLSelectElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLSelectElement.$disabled_Setter(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLSelectElement.disabled_Setter_boolean(this, value);
 
   @DomName('HTMLSelectElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLSelectElement.$form_Getter(this);
+  FormElement get form => _blink.BlinkHTMLSelectElement.form_Getter(this);
 
   @DomName('HTMLSelectElement.labels')
   @DocsEditable()
   @Unstable()
-  List<Node> get labels => _blink.BlinkHTMLSelectElement.$labels_Getter(this);
+  List<Node> get labels => _blink.BlinkHTMLSelectElement.labels_Getter(this);
 
   @DomName('HTMLSelectElement.length')
   @DocsEditable()
-  int get length => _blink.BlinkHTMLSelectElement.$length_Getter(this);
+  int get length => _blink.BlinkHTMLSelectElement.length_Getter(this);
 
   @DomName('HTMLSelectElement.length')
   @DocsEditable()
-  void set length(int value) => _blink.BlinkHTMLSelectElement.$length_Setter(this, value);
+  void set length(int value) => _blink.BlinkHTMLSelectElement.length_Setter_ul(this, value);
 
   @DomName('HTMLSelectElement.multiple')
   @DocsEditable()
-  bool get multiple => _blink.BlinkHTMLSelectElement.$multiple_Getter(this);
+  bool get multiple => _blink.BlinkHTMLSelectElement.multiple_Getter(this);
 
   @DomName('HTMLSelectElement.multiple')
   @DocsEditable()
-  void set multiple(bool value) => _blink.BlinkHTMLSelectElement.$multiple_Setter(this, value);
+  void set multiple(bool value) => _blink.BlinkHTMLSelectElement.multiple_Setter_boolean(this, value);
 
   @DomName('HTMLSelectElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLSelectElement.$name_Getter(this);
+  String get name => _blink.BlinkHTMLSelectElement.name_Getter(this);
 
   @DomName('HTMLSelectElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLSelectElement.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkHTMLSelectElement.name_Setter_DOMString(this, value);
 
   @DomName('HTMLSelectElement.required')
   @DocsEditable()
-  bool get required => _blink.BlinkHTMLSelectElement.$required_Getter(this);
+  bool get required => _blink.BlinkHTMLSelectElement.required_Getter(this);
 
   @DomName('HTMLSelectElement.required')
   @DocsEditable()
-  void set required(bool value) => _blink.BlinkHTMLSelectElement.$required_Setter(this, value);
+  void set required(bool value) => _blink.BlinkHTMLSelectElement.required_Setter_boolean(this, value);
 
   @DomName('HTMLSelectElement.selectedIndex')
   @DocsEditable()
-  int get selectedIndex => _blink.BlinkHTMLSelectElement.$selectedIndex_Getter(this);
+  int get selectedIndex => _blink.BlinkHTMLSelectElement.selectedIndex_Getter(this);
 
   @DomName('HTMLSelectElement.selectedIndex')
   @DocsEditable()
-  void set selectedIndex(int value) => _blink.BlinkHTMLSelectElement.$selectedIndex_Setter(this, value);
+  void set selectedIndex(int value) => _blink.BlinkHTMLSelectElement.selectedIndex_Setter_long(this, value);
 
   @DomName('HTMLSelectElement.size')
   @DocsEditable()
-  int get size => _blink.BlinkHTMLSelectElement.$size_Getter(this);
+  int get size => _blink.BlinkHTMLSelectElement.size_Getter(this);
 
   @DomName('HTMLSelectElement.size')
   @DocsEditable()
-  void set size(int value) => _blink.BlinkHTMLSelectElement.$size_Setter(this, value);
+  void set size(int value) => _blink.BlinkHTMLSelectElement.size_Setter_long(this, value);
 
   @DomName('HTMLSelectElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLSelectElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLSelectElement.type_Getter(this);
 
   @DomName('HTMLSelectElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLSelectElement.$validationMessage_Getter(this);
+  String get validationMessage => _blink.BlinkHTMLSelectElement.validationMessage_Getter(this);
 
   @DomName('HTMLSelectElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLSelectElement.$validity_Getter(this);
+  ValidityState get validity => _blink.BlinkHTMLSelectElement.validity_Getter(this);
 
   @DomName('HTMLSelectElement.value')
   @DocsEditable()
-  String get value => _blink.BlinkHTMLSelectElement.$value_Getter(this);
+  String get value => _blink.BlinkHTMLSelectElement.value_Getter(this);
 
   @DomName('HTMLSelectElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLSelectElement.$value_Setter(this, value);
+  void set value(String value) => _blink.BlinkHTMLSelectElement.value_Setter_DOMString(this, value);
 
   @DomName('HTMLSelectElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLSelectElement.$willValidate_Getter(this);
+  bool get willValidate => _blink.BlinkHTMLSelectElement.willValidate_Getter(this);
 
   @DomName('HTMLSelectElement.__setter__')
   @DocsEditable()
-  void __setter__(int index, OptionElement value) => _blink.BlinkHTMLSelectElement.$__setter___Callback(this, index, value);
+  void __setter__(int index, OptionElement value) => _blink.BlinkHTMLSelectElement.$__setter___Callback_ul_HTMLOptionElement(this, index, value);
 
   @DomName('HTMLSelectElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLSelectElement.$checkValidity_Callback(this);
+  bool checkValidity() => _blink.BlinkHTMLSelectElement.checkValidity_Callback(this);
 
   @DomName('HTMLSelectElement.item')
   @DocsEditable()
-  Element item(int index) => _blink.BlinkHTMLSelectElement.$item_Callback(this, index);
+  Element item(int index) => _blink.BlinkHTMLSelectElement.item_Callback_ul(this, index);
 
   @DomName('HTMLSelectElement.namedItem')
   @DocsEditable()
-  Element namedItem(String name) => _blink.BlinkHTMLSelectElement.$namedItem_Callback(this, name);
+  Element namedItem(String name) => _blink.BlinkHTMLSelectElement.namedItem_Callback_DOMString(this, name);
 
   @DomName('HTMLSelectElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLSelectElement.$setCustomValidity_Callback(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLSelectElement.setCustomValidity_Callback_DOMString(this, error);
 
 
   // Override default options, since IE returns SelectElement itself and it
@@ -25040,117 +25040,117 @@
 
   @DomName('Selection.anchorNode')
   @DocsEditable()
-  Node get anchorNode => _blink.BlinkSelection.$anchorNode_Getter(this);
+  Node get anchorNode => _blink.BlinkSelection.anchorNode_Getter(this);
 
   @DomName('Selection.anchorOffset')
   @DocsEditable()
-  int get anchorOffset => _blink.BlinkSelection.$anchorOffset_Getter(this);
+  int get anchorOffset => _blink.BlinkSelection.anchorOffset_Getter(this);
 
   @DomName('Selection.baseNode')
   @DocsEditable()
   @Experimental() // non-standard
-  Node get baseNode => _blink.BlinkSelection.$baseNode_Getter(this);
+  Node get baseNode => _blink.BlinkSelection.baseNode_Getter(this);
 
   @DomName('Selection.baseOffset')
   @DocsEditable()
   @Experimental() // non-standard
-  int get baseOffset => _blink.BlinkSelection.$baseOffset_Getter(this);
+  int get baseOffset => _blink.BlinkSelection.baseOffset_Getter(this);
 
   @DomName('Selection.extentNode')
   @DocsEditable()
   @Experimental() // non-standard
-  Node get extentNode => _blink.BlinkSelection.$extentNode_Getter(this);
+  Node get extentNode => _blink.BlinkSelection.extentNode_Getter(this);
 
   @DomName('Selection.extentOffset')
   @DocsEditable()
   @Experimental() // non-standard
-  int get extentOffset => _blink.BlinkSelection.$extentOffset_Getter(this);
+  int get extentOffset => _blink.BlinkSelection.extentOffset_Getter(this);
 
   @DomName('Selection.focusNode')
   @DocsEditable()
-  Node get focusNode => _blink.BlinkSelection.$focusNode_Getter(this);
+  Node get focusNode => _blink.BlinkSelection.focusNode_Getter(this);
 
   @DomName('Selection.focusOffset')
   @DocsEditable()
-  int get focusOffset => _blink.BlinkSelection.$focusOffset_Getter(this);
+  int get focusOffset => _blink.BlinkSelection.focusOffset_Getter(this);
 
   @DomName('Selection.isCollapsed')
   @DocsEditable()
-  bool get isCollapsed => _blink.BlinkSelection.$isCollapsed_Getter(this);
+  bool get isCollapsed => _blink.BlinkSelection.isCollapsed_Getter(this);
 
   @DomName('Selection.rangeCount')
   @DocsEditable()
-  int get rangeCount => _blink.BlinkSelection.$rangeCount_Getter(this);
+  int get rangeCount => _blink.BlinkSelection.rangeCount_Getter(this);
 
   @DomName('Selection.type')
   @DocsEditable()
   @Experimental() // non-standard
-  String get type => _blink.BlinkSelection.$type_Getter(this);
+  String get type => _blink.BlinkSelection.type_Getter(this);
 
   @DomName('Selection.addRange')
   @DocsEditable()
-  void addRange(Range range) => _blink.BlinkSelection.$addRange_Callback(this, range);
+  void addRange(Range range) => _blink.BlinkSelection.addRange_Callback_Range(this, range);
 
   @DomName('Selection.collapse')
   @DocsEditable()
-  void collapse(Node node, int index) => _blink.BlinkSelection.$collapse_Callback(this, node, index);
+  void collapse(Node node, int index) => _blink.BlinkSelection.collapse_Callback_Node_long(this, node, index);
 
   @DomName('Selection.collapseToEnd')
   @DocsEditable()
-  void collapseToEnd() => _blink.BlinkSelection.$collapseToEnd_Callback(this);
+  void collapseToEnd() => _blink.BlinkSelection.collapseToEnd_Callback(this);
 
   @DomName('Selection.collapseToStart')
   @DocsEditable()
-  void collapseToStart() => _blink.BlinkSelection.$collapseToStart_Callback(this);
+  void collapseToStart() => _blink.BlinkSelection.collapseToStart_Callback(this);
 
   @DomName('Selection.containsNode')
   @DocsEditable()
   @Experimental() // non-standard
-  bool containsNode(Node node, bool allowPartial) => _blink.BlinkSelection.$containsNode_Callback(this, node, allowPartial);
+  bool containsNode(Node node, bool allowPartial) => _blink.BlinkSelection.containsNode_Callback_Node_boolean(this, node, allowPartial);
 
   @DomName('Selection.deleteFromDocument')
   @DocsEditable()
-  void deleteFromDocument() => _blink.BlinkSelection.$deleteFromDocument_Callback(this);
+  void deleteFromDocument() => _blink.BlinkSelection.deleteFromDocument_Callback(this);
 
   @DomName('Selection.empty')
   @DocsEditable()
   @Experimental() // non-standard
-  void empty() => _blink.BlinkSelection.$empty_Callback(this);
+  void empty() => _blink.BlinkSelection.empty_Callback(this);
 
   @DomName('Selection.extend')
   @DocsEditable()
-  void extend(Node node, int offset) => _blink.BlinkSelection.$extend_Callback(this, node, offset);
+  void extend(Node node, int offset) => _blink.BlinkSelection.extend_Callback_Node_long(this, node, offset);
 
   @DomName('Selection.getRangeAt')
   @DocsEditable()
-  Range getRangeAt(int index) => _blink.BlinkSelection.$getRangeAt_Callback(this, index);
+  Range getRangeAt(int index) => _blink.BlinkSelection.getRangeAt_Callback_long(this, index);
 
   @DomName('Selection.modify')
   @DocsEditable()
   @Experimental() // non-standard
-  void modify(String alter, String direction, String granularity) => _blink.BlinkSelection.$modify_Callback(this, alter, direction, granularity);
+  void modify(String alter, String direction, String granularity) => _blink.BlinkSelection.modify_Callback_DOMString_DOMString_DOMString(this, alter, direction, granularity);
 
   @DomName('Selection.removeAllRanges')
   @DocsEditable()
-  void removeAllRanges() => _blink.BlinkSelection.$removeAllRanges_Callback(this);
+  void removeAllRanges() => _blink.BlinkSelection.removeAllRanges_Callback(this);
 
   @DomName('Selection.selectAllChildren')
   @DocsEditable()
-  void selectAllChildren(Node node) => _blink.BlinkSelection.$selectAllChildren_Callback(this, node);
+  void selectAllChildren(Node node) => _blink.BlinkSelection.selectAllChildren_Callback_Node(this, node);
 
   @DomName('Selection.setBaseAndExtent')
   @DocsEditable()
   @Experimental() // non-standard
-  void setBaseAndExtent(Node baseNode, int baseOffset, Node extentNode, int extentOffset) => _blink.BlinkSelection.$setBaseAndExtent_Callback(this, baseNode, baseOffset, extentNode, extentOffset);
+  void setBaseAndExtent(Node baseNode, int baseOffset, Node extentNode, int extentOffset) => _blink.BlinkSelection.setBaseAndExtent_Callback_Node_long_Node_long(this, baseNode, baseOffset, extentNode, extentOffset);
 
   @DomName('Selection.setPosition')
   @DocsEditable()
   @Experimental() // non-standard
-  void setPosition(Node node, int offset) => _blink.BlinkSelection.$setPosition_Callback(this, node, offset);
+  void setPosition(Node node, int offset) => _blink.BlinkSelection.setPosition_Callback_Node_long(this, node, offset);
 
   @DomName('Selection.toString')
   @DocsEditable()
-  String toString() => _blink.BlinkSelection.$toString_Callback(this);
+  String toString() => _blink.BlinkSelection.toString_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25214,16 +25214,16 @@
 
   @DomName('HTMLShadowElement.resetStyleInheritance')
   @DocsEditable()
-  bool get resetStyleInheritance => _blink.BlinkHTMLShadowElement.$resetStyleInheritance_Getter(this);
+  bool get resetStyleInheritance => _blink.BlinkHTMLShadowElement.resetStyleInheritance_Getter(this);
 
   @DomName('HTMLShadowElement.resetStyleInheritance')
   @DocsEditable()
-  void set resetStyleInheritance(bool value) => _blink.BlinkHTMLShadowElement.$resetStyleInheritance_Setter(this, value);
+  void set resetStyleInheritance(bool value) => _blink.BlinkHTMLShadowElement.resetStyleInheritance_Setter_boolean(this, value);
 
   @DomName('HTMLShadowElement.getDistributedNodes')
   @DocsEditable()
   @Experimental() // untriaged
-  List<Node> getDistributedNodes() => _blink.BlinkHTMLShadowElement.$getDistributedNodes_Callback(this);
+  List<Node> getDistributedNodes() => _blink.BlinkHTMLShadowElement.getDistributedNodes_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25243,62 +25243,62 @@
 
   @DomName('ShadowRoot.activeElement')
   @DocsEditable()
-  Element get activeElement => _blink.BlinkShadowRoot.$activeElement_Getter(this);
+  Element get activeElement => _blink.BlinkShadowRoot.activeElement_Getter(this);
 
   @DomName('ShadowRoot.host')
   @DocsEditable()
   @Experimental() // untriaged
-  Element get host => _blink.BlinkShadowRoot.$host_Getter(this);
+  Element get host => _blink.BlinkShadowRoot.host_Getter(this);
 
   @DomName('ShadowRoot.innerHTML')
   @DocsEditable()
-  String get innerHtml => _blink.BlinkShadowRoot.$innerHTML_Getter(this);
+  String get innerHtml => _blink.BlinkShadowRoot.innerHTML_Getter(this);
 
   @DomName('ShadowRoot.innerHTML')
   @DocsEditable()
-  void set innerHtml(String value) => _blink.BlinkShadowRoot.$innerHTML_Setter(this, value);
+  void set innerHtml(String value) => _blink.BlinkShadowRoot.innerHTML_Setter_DOMString(this, value);
 
   @DomName('ShadowRoot.olderShadowRoot')
   @DocsEditable()
   @Experimental() // untriaged
-  ShadowRoot get olderShadowRoot => _blink.BlinkShadowRoot.$olderShadowRoot_Getter(this);
+  ShadowRoot get olderShadowRoot => _blink.BlinkShadowRoot.olderShadowRoot_Getter(this);
 
   @DomName('ShadowRoot.resetStyleInheritance')
   @DocsEditable()
-  bool get _resetStyleInheritance => _blink.BlinkShadowRoot.$resetStyleInheritance_Getter(this);
+  bool get _resetStyleInheritance => _blink.BlinkShadowRoot.resetStyleInheritance_Getter(this);
 
   @DomName('ShadowRoot.resetStyleInheritance')
   @DocsEditable()
-  void set _resetStyleInheritance(bool value) => _blink.BlinkShadowRoot.$resetStyleInheritance_Setter(this, value);
+  void set _resetStyleInheritance(bool value) => _blink.BlinkShadowRoot.resetStyleInheritance_Setter_boolean(this, value);
 
   @DomName('ShadowRoot.styleSheets')
   @DocsEditable()
   @Experimental() // untriaged
-  List<StyleSheet> get styleSheets => _blink.BlinkShadowRoot.$styleSheets_Getter(this);
+  List<StyleSheet> get styleSheets => _blink.BlinkShadowRoot.styleSheets_Getter(this);
 
   @DomName('ShadowRoot.cloneNode')
   @DocsEditable()
-  Node clone(bool deep) => _blink.BlinkShadowRoot.$cloneNode_Callback(this, deep);
+  Node clone(bool deep) => _blink.BlinkShadowRoot.cloneNode_Callback_boolean(this, deep);
 
   @DomName('ShadowRoot.elementFromPoint')
   @DocsEditable()
-  Element elementFromPoint(int x, int y) => _blink.BlinkShadowRoot.$elementFromPoint_Callback(this, x, y);
+  Element elementFromPoint(int x, int y) => _blink.BlinkShadowRoot.elementFromPoint_Callback_long_long(this, x, y);
 
   @DomName('ShadowRoot.getElementById')
   @DocsEditable()
-  Element getElementById(String elementId) => _blink.BlinkShadowRoot.$getElementById_Callback(this, elementId);
+  Element getElementById(String elementId) => _blink.BlinkShadowRoot.getElementById_Callback_DOMString(this, elementId);
 
   @DomName('ShadowRoot.getElementsByClassName')
   @DocsEditable()
-  List<Node> getElementsByClassName(String className) => _blink.BlinkShadowRoot.$getElementsByClassName_Callback(this, className);
+  List<Node> getElementsByClassName(String className) => _blink.BlinkShadowRoot.getElementsByClassName_Callback_DOMString(this, className);
 
   @DomName('ShadowRoot.getElementsByTagName')
   @DocsEditable()
-  List<Node> getElementsByTagName(String tagName) => _blink.BlinkShadowRoot.$getElementsByTagName_Callback(this, tagName);
+  List<Node> getElementsByTagName(String tagName) => _blink.BlinkShadowRoot.getElementsByTagName_Callback_DOMString(this, tagName);
 
   @DomName('ShadowRoot.getSelection')
   @DocsEditable()
-  Selection getSelection() => _blink.BlinkShadowRoot.$getSelection_Callback(this);
+  Selection getSelection() => _blink.BlinkShadowRoot.getSelection_Callback(this);
 
   static final bool supported = true;
 
@@ -25360,17 +25360,17 @@
   @DomName('SharedWorker.SharedWorker')
   @DocsEditable()
   factory SharedWorker(String scriptURL, [String name]) {
-    return _blink.BlinkSharedWorker.$_create_1constructorCallback(scriptURL, name);
+    return _blink.BlinkSharedWorker.constructorCallback_DOMString_DOMString(scriptURL, name);
   }
 
   @DomName('SharedWorker.port')
   @DocsEditable()
-  MessagePort get port => _blink.BlinkSharedWorker.$port_Getter(this);
+  MessagePort get port => _blink.BlinkSharedWorker.port_Getter(this);
 
   @DomName('SharedWorker.workerStart')
   @DocsEditable()
   @Experimental() // untriaged
-  double get workerStart => _blink.BlinkSharedWorker.$workerStart_Getter(this);
+  double get workerStart => _blink.BlinkSharedWorker.workerStart_Getter(this);
 
   @DomName('SharedWorker.onerror')
   @DocsEditable()
@@ -25406,7 +25406,7 @@
   @DomName('SharedWorkerGlobalScope.name')
   @DocsEditable()
   @Experimental() // untriaged
-  String get name => _blink.BlinkSharedWorkerGlobalScope.$name_Getter(this);
+  String get name => _blink.BlinkSharedWorkerGlobalScope.name_Getter(this);
 
   /// Stream of `connect` events handled by this [SharedWorkerGlobalScope].
   @DomName('SharedWorkerGlobalScope.onconnect')
@@ -25433,77 +25433,77 @@
   @DomName('SourceBuffer.appendWindowEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  num get appendWindowEnd => _blink.BlinkSourceBuffer.$appendWindowEnd_Getter(this);
+  num get appendWindowEnd => _blink.BlinkSourceBuffer.appendWindowEnd_Getter(this);
 
   @DomName('SourceBuffer.appendWindowEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  void set appendWindowEnd(num value) => _blink.BlinkSourceBuffer.$appendWindowEnd_Setter(this, value);
+  void set appendWindowEnd(num value) => _blink.BlinkSourceBuffer.appendWindowEnd_Setter_double(this, value);
 
   @DomName('SourceBuffer.appendWindowStart')
   @DocsEditable()
   @Experimental() // untriaged
-  num get appendWindowStart => _blink.BlinkSourceBuffer.$appendWindowStart_Getter(this);
+  num get appendWindowStart => _blink.BlinkSourceBuffer.appendWindowStart_Getter(this);
 
   @DomName('SourceBuffer.appendWindowStart')
   @DocsEditable()
   @Experimental() // untriaged
-  void set appendWindowStart(num value) => _blink.BlinkSourceBuffer.$appendWindowStart_Setter(this, value);
+  void set appendWindowStart(num value) => _blink.BlinkSourceBuffer.appendWindowStart_Setter_double(this, value);
 
   @DomName('SourceBuffer.buffered')
   @DocsEditable()
-  TimeRanges get buffered => _blink.BlinkSourceBuffer.$buffered_Getter(this);
+  TimeRanges get buffered => _blink.BlinkSourceBuffer.buffered_Getter(this);
 
   @DomName('SourceBuffer.mode')
   @DocsEditable()
   @Experimental() // untriaged
-  String get mode => _blink.BlinkSourceBuffer.$mode_Getter(this);
+  String get mode => _blink.BlinkSourceBuffer.mode_Getter(this);
 
   @DomName('SourceBuffer.mode')
   @DocsEditable()
   @Experimental() // untriaged
-  void set mode(String value) => _blink.BlinkSourceBuffer.$mode_Setter(this, value);
+  void set mode(String value) => _blink.BlinkSourceBuffer.mode_Setter_DOMString(this, value);
 
   @DomName('SourceBuffer.timestampOffset')
   @DocsEditable()
-  num get timestampOffset => _blink.BlinkSourceBuffer.$timestampOffset_Getter(this);
+  num get timestampOffset => _blink.BlinkSourceBuffer.timestampOffset_Getter(this);
 
   @DomName('SourceBuffer.timestampOffset')
   @DocsEditable()
-  void set timestampOffset(num value) => _blink.BlinkSourceBuffer.$timestampOffset_Setter(this, value);
+  void set timestampOffset(num value) => _blink.BlinkSourceBuffer.timestampOffset_Setter_double(this, value);
 
   @DomName('SourceBuffer.updating')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get updating => _blink.BlinkSourceBuffer.$updating_Getter(this);
+  bool get updating => _blink.BlinkSourceBuffer.updating_Getter(this);
 
   @DomName('SourceBuffer.abort')
   @DocsEditable()
-  void abort() => _blink.BlinkSourceBuffer.$abort_Callback(this);
+  void abort() => _blink.BlinkSourceBuffer.abort_Callback(this);
 
   @DomName('SourceBuffer.appendBuffer')
   @DocsEditable()
   @Experimental() // untriaged
-  void appendBuffer(ByteBuffer data) => _blink.BlinkSourceBuffer.$appendBuffer_Callback(this, data);
+  void appendBuffer(ByteBuffer data) => _blink.BlinkSourceBuffer.appendBuffer_Callback_ArrayBuffer(this, data);
 
   void appendStream(FileStream stream, [int maxSize]) {
     if (maxSize != null) {
-      _blink.BlinkSourceBuffer.$_appendStream_1_Callback(this, stream, maxSize);
+      _blink.BlinkSourceBuffer.appendStream_Callback_Stream_ull(this, stream, maxSize);
       return;
     }
-    _blink.BlinkSourceBuffer.$_appendStream_2_Callback(this, stream);
+    _blink.BlinkSourceBuffer.appendStream_Callback_Stream(this, stream);
     return;
   }
 
   @DomName('SourceBuffer.appendTypedData')
   @DocsEditable()
   @Experimental() // untriaged
-  void appendTypedData(TypedData data) => _blink.BlinkSourceBuffer.$appendTypedData_Callback(this, data);
+  void appendTypedData(TypedData data) => _blink.BlinkSourceBuffer.appendBuffer_Callback_ArrayBufferView(this, data);
 
   @DomName('SourceBuffer.remove')
   @DocsEditable()
   @Experimental() // untriaged
-  void remove(num start, num end) => _blink.BlinkSourceBuffer.$remove_Callback(this, start, end);
+  void remove(num start, num end) => _blink.BlinkSourceBuffer.remove_Callback_double_double(this, start, end);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25523,15 +25523,15 @@
 
   @DomName('SourceBufferList.length')
   @DocsEditable()
-  int get length => _blink.BlinkSourceBufferList.$length_Getter(this);
+  int get length => _blink.BlinkSourceBufferList.length_Getter(this);
 
   SourceBuffer operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkSourceBufferList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkSourceBufferList.item_Callback_ul(this, index);
   }
 
-  SourceBuffer _nativeIndexedGetter(int index) => _blink.BlinkSourceBufferList.$NativeIndexed_Getter(this, index);
+  SourceBuffer _nativeIndexedGetter(int index) => _blink.BlinkSourceBufferList.item_Callback_ul(this, index);
 
   void operator[]=(int index, SourceBuffer value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -25573,7 +25573,7 @@
 
   @DomName('SourceBufferList.item')
   @DocsEditable()
-  SourceBuffer item(int index) => _blink.BlinkSourceBufferList.$item_Callback(this, index);
+  SourceBuffer item(int index) => _blink.BlinkSourceBufferList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25601,27 +25601,27 @@
 
   @DomName('HTMLSourceElement.media')
   @DocsEditable()
-  String get media => _blink.BlinkHTMLSourceElement.$media_Getter(this);
+  String get media => _blink.BlinkHTMLSourceElement.media_Getter(this);
 
   @DomName('HTMLSourceElement.media')
   @DocsEditable()
-  void set media(String value) => _blink.BlinkHTMLSourceElement.$media_Setter(this, value);
+  void set media(String value) => _blink.BlinkHTMLSourceElement.media_Setter_DOMString(this, value);
 
   @DomName('HTMLSourceElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLSourceElement.$src_Getter(this);
+  String get src => _blink.BlinkHTMLSourceElement.src_Getter(this);
 
   @DomName('HTMLSourceElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLSourceElement.$src_Setter(this, value);
+  void set src(String value) => _blink.BlinkHTMLSourceElement.src_Setter_DOMString(this, value);
 
   @DomName('HTMLSourceElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLSourceElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLSourceElement.type_Getter(this);
 
   @DomName('HTMLSourceElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLSourceElement.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkHTMLSourceElement.type_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25641,22 +25641,22 @@
   @DomName('SourceInfo.facing')
   @DocsEditable()
   @Experimental() // untriaged
-  String get facing => _blink.BlinkSourceInfo.$facing_Getter(this);
+  String get facing => _blink.BlinkSourceInfo.facing_Getter(this);
 
   @DomName('SourceInfo.id')
   @DocsEditable()
   @Experimental() // untriaged
-  String get id => _blink.BlinkSourceInfo.$id_Getter(this);
+  String get id => _blink.BlinkSourceInfo.id_Getter(this);
 
   @DomName('SourceInfo.kind')
   @DocsEditable()
   @Experimental() // untriaged
-  String get kind => _blink.BlinkSourceInfo.$kind_Getter(this);
+  String get kind => _blink.BlinkSourceInfo.kind_Getter(this);
 
   @DomName('SourceInfo.label')
   @DocsEditable()
   @Experimental() // untriaged
-  String get label => _blink.BlinkSourceInfo.$label_Getter(this);
+  String get label => _blink.BlinkSourceInfo.label_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25701,24 +25701,24 @@
   @DomName('SpeechGrammar.SpeechGrammar')
   @DocsEditable()
   factory SpeechGrammar() {
-    return _blink.BlinkSpeechGrammar.$_create_1constructorCallback();
+    return _blink.BlinkSpeechGrammar.constructorCallback();
   }
 
   @DomName('SpeechGrammar.src')
   @DocsEditable()
-  String get src => _blink.BlinkSpeechGrammar.$src_Getter(this);
+  String get src => _blink.BlinkSpeechGrammar.src_Getter(this);
 
   @DomName('SpeechGrammar.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkSpeechGrammar.$src_Setter(this, value);
+  void set src(String value) => _blink.BlinkSpeechGrammar.src_Setter_DOMString(this, value);
 
   @DomName('SpeechGrammar.weight')
   @DocsEditable()
-  num get weight => _blink.BlinkSpeechGrammar.$weight_Getter(this);
+  num get weight => _blink.BlinkSpeechGrammar.weight_Getter(this);
 
   @DomName('SpeechGrammar.weight')
   @DocsEditable()
-  void set weight(num value) => _blink.BlinkSpeechGrammar.$weight_Setter(this, value);
+  void set weight(num value) => _blink.BlinkSpeechGrammar.weight_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25739,20 +25739,20 @@
   @DomName('SpeechGrammarList.SpeechGrammarList')
   @DocsEditable()
   factory SpeechGrammarList() {
-    return _blink.BlinkSpeechGrammarList.$_create_1constructorCallback();
+    return _blink.BlinkSpeechGrammarList.constructorCallback();
   }
 
   @DomName('SpeechGrammarList.length')
   @DocsEditable()
-  int get length => _blink.BlinkSpeechGrammarList.$length_Getter(this);
+  int get length => _blink.BlinkSpeechGrammarList.length_Getter(this);
 
   SpeechGrammar operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkSpeechGrammarList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkSpeechGrammarList.item_Callback_ul(this, index);
   }
 
-  SpeechGrammar _nativeIndexedGetter(int index) => _blink.BlinkSpeechGrammarList.$NativeIndexed_Getter(this, index);
+  SpeechGrammar _nativeIndexedGetter(int index) => _blink.BlinkSpeechGrammarList.item_Callback_ul(this, index);
 
   void operator[]=(int index, SpeechGrammar value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -25794,25 +25794,25 @@
 
   void addFromString(String string, [num weight]) {
     if (weight != null) {
-      _blink.BlinkSpeechGrammarList.$_addFromString_1_Callback(this, string, weight);
+      _blink.BlinkSpeechGrammarList.addFromString_Callback_DOMString_float(this, string, weight);
       return;
     }
-    _blink.BlinkSpeechGrammarList.$_addFromString_2_Callback(this, string);
+    _blink.BlinkSpeechGrammarList.addFromString_Callback_DOMString(this, string);
     return;
   }
 
   void addFromUri(String src, [num weight]) {
     if (weight != null) {
-      _blink.BlinkSpeechGrammarList.$_addFromUri_1_Callback(this, src, weight);
+      _blink.BlinkSpeechGrammarList.addFromUri_Callback_DOMString_float(this, src, weight);
       return;
     }
-    _blink.BlinkSpeechGrammarList.$_addFromUri_2_Callback(this, src);
+    _blink.BlinkSpeechGrammarList.addFromUri_Callback_DOMString(this, src);
     return;
   }
 
   @DomName('SpeechGrammarList.item')
   @DocsEditable()
-  SpeechGrammar item(int index) => _blink.BlinkSpeechGrammarList.$item_Callback(this, index);
+  SpeechGrammar item(int index) => _blink.BlinkSpeechGrammarList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25976,7 +25976,7 @@
   @DomName('SpeechRecognition.SpeechRecognition')
   @DocsEditable()
   factory SpeechRecognition() {
-    return _blink.BlinkSpeechRecognition.$_create_1constructorCallback();
+    return _blink.BlinkSpeechRecognition.constructorCallback();
   }
 
   /// Checks if this type is supported on the current platform.
@@ -25984,55 +25984,55 @@
 
   @DomName('SpeechRecognition.continuous')
   @DocsEditable()
-  bool get continuous => _blink.BlinkSpeechRecognition.$continuous_Getter(this);
+  bool get continuous => _blink.BlinkSpeechRecognition.continuous_Getter(this);
 
   @DomName('SpeechRecognition.continuous')
   @DocsEditable()
-  void set continuous(bool value) => _blink.BlinkSpeechRecognition.$continuous_Setter(this, value);
+  void set continuous(bool value) => _blink.BlinkSpeechRecognition.continuous_Setter_boolean(this, value);
 
   @DomName('SpeechRecognition.grammars')
   @DocsEditable()
-  SpeechGrammarList get grammars => _blink.BlinkSpeechRecognition.$grammars_Getter(this);
+  SpeechGrammarList get grammars => _blink.BlinkSpeechRecognition.grammars_Getter(this);
 
   @DomName('SpeechRecognition.grammars')
   @DocsEditable()
-  void set grammars(SpeechGrammarList value) => _blink.BlinkSpeechRecognition.$grammars_Setter(this, value);
+  void set grammars(SpeechGrammarList value) => _blink.BlinkSpeechRecognition.grammars_Setter_SpeechGrammarList(this, value);
 
   @DomName('SpeechRecognition.interimResults')
   @DocsEditable()
-  bool get interimResults => _blink.BlinkSpeechRecognition.$interimResults_Getter(this);
+  bool get interimResults => _blink.BlinkSpeechRecognition.interimResults_Getter(this);
 
   @DomName('SpeechRecognition.interimResults')
   @DocsEditable()
-  void set interimResults(bool value) => _blink.BlinkSpeechRecognition.$interimResults_Setter(this, value);
+  void set interimResults(bool value) => _blink.BlinkSpeechRecognition.interimResults_Setter_boolean(this, value);
 
   @DomName('SpeechRecognition.lang')
   @DocsEditable()
-  String get lang => _blink.BlinkSpeechRecognition.$lang_Getter(this);
+  String get lang => _blink.BlinkSpeechRecognition.lang_Getter(this);
 
   @DomName('SpeechRecognition.lang')
   @DocsEditable()
-  void set lang(String value) => _blink.BlinkSpeechRecognition.$lang_Setter(this, value);
+  void set lang(String value) => _blink.BlinkSpeechRecognition.lang_Setter_DOMString(this, value);
 
   @DomName('SpeechRecognition.maxAlternatives')
   @DocsEditable()
-  int get maxAlternatives => _blink.BlinkSpeechRecognition.$maxAlternatives_Getter(this);
+  int get maxAlternatives => _blink.BlinkSpeechRecognition.maxAlternatives_Getter(this);
 
   @DomName('SpeechRecognition.maxAlternatives')
   @DocsEditable()
-  void set maxAlternatives(int value) => _blink.BlinkSpeechRecognition.$maxAlternatives_Setter(this, value);
+  void set maxAlternatives(int value) => _blink.BlinkSpeechRecognition.maxAlternatives_Setter_ul(this, value);
 
   @DomName('SpeechRecognition.abort')
   @DocsEditable()
-  void abort() => _blink.BlinkSpeechRecognition.$abort_Callback(this);
+  void abort() => _blink.BlinkSpeechRecognition.abort_Callback(this);
 
   @DomName('SpeechRecognition.start')
   @DocsEditable()
-  void start() => _blink.BlinkSpeechRecognition.$start_Callback(this);
+  void start() => _blink.BlinkSpeechRecognition.start_Callback(this);
 
   @DomName('SpeechRecognition.stop')
   @DocsEditable()
-  void stop() => _blink.BlinkSpeechRecognition.$stop_Callback(this);
+  void stop() => _blink.BlinkSpeechRecognition.stop_Callback(this);
 
   /// Stream of `audioend` events handled by this [SpeechRecognition].
   @DomName('SpeechRecognition.onaudioend')
@@ -26108,11 +26108,11 @@
 
   @DomName('SpeechRecognitionAlternative.confidence')
   @DocsEditable()
-  double get confidence => _blink.BlinkSpeechRecognitionAlternative.$confidence_Getter(this);
+  double get confidence => _blink.BlinkSpeechRecognitionAlternative.confidence_Getter(this);
 
   @DomName('SpeechRecognitionAlternative.transcript')
   @DocsEditable()
-  String get transcript => _blink.BlinkSpeechRecognitionAlternative.$transcript_Getter(this);
+  String get transcript => _blink.BlinkSpeechRecognitionAlternative.transcript_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26133,11 +26133,11 @@
 
   @DomName('SpeechRecognitionError.error')
   @DocsEditable()
-  String get error => _blink.BlinkSpeechRecognitionError.$error_Getter(this);
+  String get error => _blink.BlinkSpeechRecognitionError.error_Getter(this);
 
   @DomName('SpeechRecognitionError.message')
   @DocsEditable()
-  String get message => _blink.BlinkSpeechRecognitionError.$message_Getter(this);
+  String get message => _blink.BlinkSpeechRecognitionError.message_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26158,19 +26158,19 @@
 
   @DomName('SpeechRecognitionEvent.emma')
   @DocsEditable()
-  Document get emma => _blink.BlinkSpeechRecognitionEvent.$emma_Getter(this);
+  Document get emma => _blink.BlinkSpeechRecognitionEvent.emma_Getter(this);
 
   @DomName('SpeechRecognitionEvent.interpretation')
   @DocsEditable()
-  Document get interpretation => _blink.BlinkSpeechRecognitionEvent.$interpretation_Getter(this);
+  Document get interpretation => _blink.BlinkSpeechRecognitionEvent.interpretation_Getter(this);
 
   @DomName('SpeechRecognitionEvent.resultIndex')
   @DocsEditable()
-  int get resultIndex => _blink.BlinkSpeechRecognitionEvent.$resultIndex_Getter(this);
+  int get resultIndex => _blink.BlinkSpeechRecognitionEvent.resultIndex_Getter(this);
 
   @DomName('SpeechRecognitionEvent.results')
   @DocsEditable()
-  List<SpeechRecognitionResult> get results => _blink.BlinkSpeechRecognitionEvent.$results_Getter(this);
+  List<SpeechRecognitionResult> get results => _blink.BlinkSpeechRecognitionEvent.results_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26191,15 +26191,15 @@
 
   @DomName('SpeechRecognitionResult.isFinal')
   @DocsEditable()
-  bool get isFinal => _blink.BlinkSpeechRecognitionResult.$isFinal_Getter(this);
+  bool get isFinal => _blink.BlinkSpeechRecognitionResult.isFinal_Getter(this);
 
   @DomName('SpeechRecognitionResult.length')
   @DocsEditable()
-  int get length => _blink.BlinkSpeechRecognitionResult.$length_Getter(this);
+  int get length => _blink.BlinkSpeechRecognitionResult.length_Getter(this);
 
   @DomName('SpeechRecognitionResult.item')
   @DocsEditable()
-  SpeechRecognitionAlternative item(int index) => _blink.BlinkSpeechRecognitionResult.$item_Callback(this, index);
+  SpeechRecognitionAlternative item(int index) => _blink.BlinkSpeechRecognitionResult.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26219,35 +26219,35 @@
 
   @DomName('SpeechSynthesis.paused')
   @DocsEditable()
-  bool get paused => _blink.BlinkSpeechSynthesis.$paused_Getter(this);
+  bool get paused => _blink.BlinkSpeechSynthesis.paused_Getter(this);
 
   @DomName('SpeechSynthesis.pending')
   @DocsEditable()
-  bool get pending => _blink.BlinkSpeechSynthesis.$pending_Getter(this);
+  bool get pending => _blink.BlinkSpeechSynthesis.pending_Getter(this);
 
   @DomName('SpeechSynthesis.speaking')
   @DocsEditable()
-  bool get speaking => _blink.BlinkSpeechSynthesis.$speaking_Getter(this);
+  bool get speaking => _blink.BlinkSpeechSynthesis.speaking_Getter(this);
 
   @DomName('SpeechSynthesis.cancel')
   @DocsEditable()
-  void cancel() => _blink.BlinkSpeechSynthesis.$cancel_Callback(this);
+  void cancel() => _blink.BlinkSpeechSynthesis.cancel_Callback(this);
 
   @DomName('SpeechSynthesis.getVoices')
   @DocsEditable()
-  List<SpeechSynthesisVoice> getVoices() => _blink.BlinkSpeechSynthesis.$getVoices_Callback(this);
+  List<SpeechSynthesisVoice> getVoices() => _blink.BlinkSpeechSynthesis.getVoices_Callback(this);
 
   @DomName('SpeechSynthesis.pause')
   @DocsEditable()
-  void pause() => _blink.BlinkSpeechSynthesis.$pause_Callback(this);
+  void pause() => _blink.BlinkSpeechSynthesis.pause_Callback(this);
 
   @DomName('SpeechSynthesis.resume')
   @DocsEditable()
-  void resume() => _blink.BlinkSpeechSynthesis.$resume_Callback(this);
+  void resume() => _blink.BlinkSpeechSynthesis.resume_Callback(this);
 
   @DomName('SpeechSynthesis.speak')
   @DocsEditable()
-  void speak(SpeechSynthesisUtterance utterance) => _blink.BlinkSpeechSynthesis.$speak_Callback(this, utterance);
+  void speak(SpeechSynthesisUtterance utterance) => _blink.BlinkSpeechSynthesis.speak_Callback_SpeechSynthesisUtterance(this, utterance);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26267,15 +26267,15 @@
 
   @DomName('SpeechSynthesisEvent.charIndex')
   @DocsEditable()
-  int get charIndex => _blink.BlinkSpeechSynthesisEvent.$charIndex_Getter(this);
+  int get charIndex => _blink.BlinkSpeechSynthesisEvent.charIndex_Getter(this);
 
   @DomName('SpeechSynthesisEvent.elapsedTime')
   @DocsEditable()
-  double get elapsedTime => _blink.BlinkSpeechSynthesisEvent.$elapsedTime_Getter(this);
+  double get elapsedTime => _blink.BlinkSpeechSynthesisEvent.elapsedTime_Getter(this);
 
   @DomName('SpeechSynthesisEvent.name')
   @DocsEditable()
-  String get name => _blink.BlinkSpeechSynthesisEvent.$name_Getter(this);
+  String get name => _blink.BlinkSpeechSynthesisEvent.name_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26366,56 +26366,56 @@
   @DomName('SpeechSynthesisUtterance.SpeechSynthesisUtterance')
   @DocsEditable()
   factory SpeechSynthesisUtterance([String text]) {
-    return _blink.BlinkSpeechSynthesisUtterance.$_create_1constructorCallback(text);
+    return _blink.BlinkSpeechSynthesisUtterance.constructorCallback_DOMString(text);
   }
 
   @DomName('SpeechSynthesisUtterance.lang')
   @DocsEditable()
-  String get lang => _blink.BlinkSpeechSynthesisUtterance.$lang_Getter(this);
+  String get lang => _blink.BlinkSpeechSynthesisUtterance.lang_Getter(this);
 
   @DomName('SpeechSynthesisUtterance.lang')
   @DocsEditable()
-  void set lang(String value) => _blink.BlinkSpeechSynthesisUtterance.$lang_Setter(this, value);
+  void set lang(String value) => _blink.BlinkSpeechSynthesisUtterance.lang_Setter_DOMString(this, value);
 
   @DomName('SpeechSynthesisUtterance.pitch')
   @DocsEditable()
-  num get pitch => _blink.BlinkSpeechSynthesisUtterance.$pitch_Getter(this);
+  num get pitch => _blink.BlinkSpeechSynthesisUtterance.pitch_Getter(this);
 
   @DomName('SpeechSynthesisUtterance.pitch')
   @DocsEditable()
-  void set pitch(num value) => _blink.BlinkSpeechSynthesisUtterance.$pitch_Setter(this, value);
+  void set pitch(num value) => _blink.BlinkSpeechSynthesisUtterance.pitch_Setter_float(this, value);
 
   @DomName('SpeechSynthesisUtterance.rate')
   @DocsEditable()
-  num get rate => _blink.BlinkSpeechSynthesisUtterance.$rate_Getter(this);
+  num get rate => _blink.BlinkSpeechSynthesisUtterance.rate_Getter(this);
 
   @DomName('SpeechSynthesisUtterance.rate')
   @DocsEditable()
-  void set rate(num value) => _blink.BlinkSpeechSynthesisUtterance.$rate_Setter(this, value);
+  void set rate(num value) => _blink.BlinkSpeechSynthesisUtterance.rate_Setter_float(this, value);
 
   @DomName('SpeechSynthesisUtterance.text')
   @DocsEditable()
-  String get text => _blink.BlinkSpeechSynthesisUtterance.$text_Getter(this);
+  String get text => _blink.BlinkSpeechSynthesisUtterance.text_Getter(this);
 
   @DomName('SpeechSynthesisUtterance.text')
   @DocsEditable()
-  void set text(String value) => _blink.BlinkSpeechSynthesisUtterance.$text_Setter(this, value);
+  void set text(String value) => _blink.BlinkSpeechSynthesisUtterance.text_Setter_DOMString(this, value);
 
   @DomName('SpeechSynthesisUtterance.voice')
   @DocsEditable()
-  SpeechSynthesisVoice get voice => _blink.BlinkSpeechSynthesisUtterance.$voice_Getter(this);
+  SpeechSynthesisVoice get voice => _blink.BlinkSpeechSynthesisUtterance.voice_Getter(this);
 
   @DomName('SpeechSynthesisUtterance.voice')
   @DocsEditable()
-  void set voice(SpeechSynthesisVoice value) => _blink.BlinkSpeechSynthesisUtterance.$voice_Setter(this, value);
+  void set voice(SpeechSynthesisVoice value) => _blink.BlinkSpeechSynthesisUtterance.voice_Setter_SpeechSynthesisVoice(this, value);
 
   @DomName('SpeechSynthesisUtterance.volume')
   @DocsEditable()
-  num get volume => _blink.BlinkSpeechSynthesisUtterance.$volume_Getter(this);
+  num get volume => _blink.BlinkSpeechSynthesisUtterance.volume_Getter(this);
 
   @DomName('SpeechSynthesisUtterance.volume')
   @DocsEditable()
-  void set volume(num value) => _blink.BlinkSpeechSynthesisUtterance.$volume_Setter(this, value);
+  void set volume(num value) => _blink.BlinkSpeechSynthesisUtterance.volume_Setter_float(this, value);
 
   /// Stream of `boundary` events handled by this [SpeechSynthesisUtterance].
   @DomName('SpeechSynthesisUtterance.onboundary')
@@ -26470,23 +26470,23 @@
 
   @DomName('SpeechSynthesisVoice.default')
   @DocsEditable()
-  bool get defaultValue => _blink.BlinkSpeechSynthesisVoice.$default_Getter(this);
+  bool get defaultValue => _blink.BlinkSpeechSynthesisVoice.default_Getter(this);
 
   @DomName('SpeechSynthesisVoice.lang')
   @DocsEditable()
-  String get lang => _blink.BlinkSpeechSynthesisVoice.$lang_Getter(this);
+  String get lang => _blink.BlinkSpeechSynthesisVoice.lang_Getter(this);
 
   @DomName('SpeechSynthesisVoice.localService')
   @DocsEditable()
-  bool get localService => _blink.BlinkSpeechSynthesisVoice.$localService_Getter(this);
+  bool get localService => _blink.BlinkSpeechSynthesisVoice.localService_Getter(this);
 
   @DomName('SpeechSynthesisVoice.name')
   @DocsEditable()
-  String get name => _blink.BlinkSpeechSynthesisVoice.$name_Getter(this);
+  String get name => _blink.BlinkSpeechSynthesisVoice.name_Getter(this);
 
   @DomName('SpeechSynthesisVoice.voiceURI')
   @DocsEditable()
-  String get voiceUri => _blink.BlinkSpeechSynthesisVoice.$voiceURI_Getter(this);
+  String get voiceUri => _blink.BlinkSpeechSynthesisVoice.voiceURI_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26581,35 +26581,35 @@
 
   @DomName('Storage.length')
   @DocsEditable()
-  int get _length => _blink.BlinkStorage.$length_Getter(this);
+  int get _length => _blink.BlinkStorage.length_Getter(this);
 
   bool __delete__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkStorage.$___delete___1_Callback(this, index_OR_name);
+      return _blink.BlinkStorage.$__delete___Callback_ul(this, index_OR_name);
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkStorage.$___delete___2_Callback(this, index_OR_name);
+      return _blink.BlinkStorage.$__delete___Callback_DOMString(this, index_OR_name);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   String __getter__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkStorage.$___getter___1_Callback(this, index_OR_name);
+      return _blink.BlinkStorage.$__getter___Callback_ul(this, index_OR_name);
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkStorage.$___getter___2_Callback(this, index_OR_name);
+      return _blink.BlinkStorage.$__getter___Callback_DOMString(this, index_OR_name);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   void __setter__(index_OR_name, String value) {
     if ((value is String || value == null) && (index_OR_name is int || index_OR_name == null)) {
-      _blink.BlinkStorage.$___setter___1_Callback(this, index_OR_name, value);
+      _blink.BlinkStorage.$__setter___Callback_ul_DOMString(this, index_OR_name, value);
       return;
     }
     if ((value is String || value == null) && (index_OR_name is String || index_OR_name == null)) {
-      _blink.BlinkStorage.$___setter___2_Callback(this, index_OR_name, value);
+      _blink.BlinkStorage.$__setter___Callback_DOMString_DOMString(this, index_OR_name, value);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -26617,23 +26617,23 @@
 
   @DomName('Storage.clear')
   @DocsEditable()
-  void _clear() => _blink.BlinkStorage.$clear_Callback(this);
+  void _clear() => _blink.BlinkStorage.clear_Callback(this);
 
   @DomName('Storage.getItem')
   @DocsEditable()
-  String _getItem(String key) => _blink.BlinkStorage.$getItem_Callback(this, key);
+  String _getItem(String key) => _blink.BlinkStorage.getItem_Callback_DOMString(this, key);
 
   @DomName('Storage.key')
   @DocsEditable()
-  String _key(int index) => _blink.BlinkStorage.$key_Callback(this, index);
+  String _key(int index) => _blink.BlinkStorage.key_Callback_ul(this, index);
 
   @DomName('Storage.removeItem')
   @DocsEditable()
-  void _removeItem(String key) => _blink.BlinkStorage.$removeItem_Callback(this, key);
+  void _removeItem(String key) => _blink.BlinkStorage.removeItem_Callback_DOMString(this, key);
 
   @DomName('Storage.setItem')
   @DocsEditable()
-  void _setItem(String key, String data) => _blink.BlinkStorage.$setItem_Callback(this, key, data);
+  void _setItem(String key, String data) => _blink.BlinkStorage.setItem_Callback_DOMString_DOMString(this, key, data);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26671,27 +26671,27 @@
 
   @DomName('StorageEvent.key')
   @DocsEditable()
-  String get key => _blink.BlinkStorageEvent.$key_Getter(this);
+  String get key => _blink.BlinkStorageEvent.key_Getter(this);
 
   @DomName('StorageEvent.newValue')
   @DocsEditable()
-  String get newValue => _blink.BlinkStorageEvent.$newValue_Getter(this);
+  String get newValue => _blink.BlinkStorageEvent.newValue_Getter(this);
 
   @DomName('StorageEvent.oldValue')
   @DocsEditable()
-  String get oldValue => _blink.BlinkStorageEvent.$oldValue_Getter(this);
+  String get oldValue => _blink.BlinkStorageEvent.oldValue_Getter(this);
 
   @DomName('StorageEvent.storageArea')
   @DocsEditable()
-  Storage get storageArea => _blink.BlinkStorageEvent.$storageArea_Getter(this);
+  Storage get storageArea => _blink.BlinkStorageEvent.storageArea_Getter(this);
 
   @DomName('StorageEvent.url')
   @DocsEditable()
-  String get url => _blink.BlinkStorageEvent.$url_Getter(this);
+  String get url => _blink.BlinkStorageEvent.url_Getter(this);
 
   @DomName('StorageEvent.initStorageEvent')
   @DocsEditable()
-  void _initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg) => _blink.BlinkStorageEvent.$initStorageEvent_Callback(this, typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg);
+  void _initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg) => _blink.BlinkStorageEvent.initStorageEvent_Callback_DOMString_boolean_boolean_DOMString_DOMString_DOMString_DOMString_Storage(this, typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26712,12 +26712,12 @@
   @DomName('StorageInfo.quota')
   @DocsEditable()
   @Experimental() // untriaged
-  int get quota => _blink.BlinkStorageInfo.$quota_Getter(this);
+  int get quota => _blink.BlinkStorageInfo.quota_Getter(this);
 
   @DomName('StorageInfo.usage')
   @DocsEditable()
   @Experimental() // untriaged
-  int get usage => _blink.BlinkStorageInfo.$usage_Getter(this);
+  int get usage => _blink.BlinkStorageInfo.usage_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26738,7 +26738,7 @@
   @DomName('StorageQuota.supportedTypes')
   @DocsEditable()
   @Experimental() // untriaged
-  List<String> get supportedTypes => _blink.BlinkStorageQuota.$supportedTypes_Getter(this);
+  List<String> get supportedTypes => _blink.BlinkStorageQuota.supportedTypes_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26799,39 +26799,39 @@
 
   @DomName('HTMLStyleElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLStyleElement.$disabled_Getter(this);
+  bool get disabled => _blink.BlinkHTMLStyleElement.disabled_Getter(this);
 
   @DomName('HTMLStyleElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLStyleElement.$disabled_Setter(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLStyleElement.disabled_Setter_boolean(this, value);
 
   @DomName('HTMLStyleElement.media')
   @DocsEditable()
-  String get media => _blink.BlinkHTMLStyleElement.$media_Getter(this);
+  String get media => _blink.BlinkHTMLStyleElement.media_Getter(this);
 
   @DomName('HTMLStyleElement.media')
   @DocsEditable()
-  void set media(String value) => _blink.BlinkHTMLStyleElement.$media_Setter(this, value);
+  void set media(String value) => _blink.BlinkHTMLStyleElement.media_Setter_DOMString(this, value);
 
   @DomName('HTMLStyleElement.scoped')
   @DocsEditable()
-  bool get scoped => _blink.BlinkHTMLStyleElement.$scoped_Getter(this);
+  bool get scoped => _blink.BlinkHTMLStyleElement.scoped_Getter(this);
 
   @DomName('HTMLStyleElement.scoped')
   @DocsEditable()
-  void set scoped(bool value) => _blink.BlinkHTMLStyleElement.$scoped_Setter(this, value);
+  void set scoped(bool value) => _blink.BlinkHTMLStyleElement.scoped_Setter_boolean(this, value);
 
   @DomName('HTMLStyleElement.sheet')
   @DocsEditable()
-  StyleSheet get sheet => _blink.BlinkHTMLStyleElement.$sheet_Getter(this);
+  StyleSheet get sheet => _blink.BlinkHTMLStyleElement.sheet_Getter(this);
 
   @DomName('HTMLStyleElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLStyleElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLStyleElement.type_Getter(this);
 
   @DomName('HTMLStyleElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLStyleElement.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkHTMLStyleElement.type_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26851,11 +26851,11 @@
 
   @DomName('StyleMedia.type')
   @DocsEditable()
-  String get type => _blink.BlinkStyleMedia.$type_Getter(this);
+  String get type => _blink.BlinkStyleMedia.type_Getter(this);
 
   @DomName('StyleMedia.matchMedium')
   @DocsEditable()
-  bool matchMedium(String mediaquery) => _blink.BlinkStyleMedia.$matchMedium_Callback(this, mediaquery);
+  bool matchMedium(String mediaquery) => _blink.BlinkStyleMedia.matchMedium_Callback_DOMString(this, mediaquery);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26873,35 +26873,35 @@
 
   @DomName('StyleSheet.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkStyleSheet.$disabled_Getter(this);
+  bool get disabled => _blink.BlinkStyleSheet.disabled_Getter(this);
 
   @DomName('StyleSheet.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkStyleSheet.$disabled_Setter(this, value);
+  void set disabled(bool value) => _blink.BlinkStyleSheet.disabled_Setter_boolean(this, value);
 
   @DomName('StyleSheet.href')
   @DocsEditable()
-  String get href => _blink.BlinkStyleSheet.$href_Getter(this);
+  String get href => _blink.BlinkStyleSheet.href_Getter(this);
 
   @DomName('StyleSheet.media')
   @DocsEditable()
-  MediaList get media => _blink.BlinkStyleSheet.$media_Getter(this);
+  MediaList get media => _blink.BlinkStyleSheet.media_Getter(this);
 
   @DomName('StyleSheet.ownerNode')
   @DocsEditable()
-  Node get ownerNode => _blink.BlinkStyleSheet.$ownerNode_Getter(this);
+  Node get ownerNode => _blink.BlinkStyleSheet.ownerNode_Getter(this);
 
   @DomName('StyleSheet.parentStyleSheet')
   @DocsEditable()
-  StyleSheet get parentStyleSheet => _blink.BlinkStyleSheet.$parentStyleSheet_Getter(this);
+  StyleSheet get parentStyleSheet => _blink.BlinkStyleSheet.parentStyleSheet_Getter(this);
 
   @DomName('StyleSheet.title')
   @DocsEditable()
-  String get title => _blink.BlinkStyleSheet.$title_Getter(this);
+  String get title => _blink.BlinkStyleSheet.title_Getter(this);
 
   @DomName('StyleSheet.type')
   @DocsEditable()
-  String get type => _blink.BlinkStyleSheet.$type_Getter(this);
+  String get type => _blink.BlinkStyleSheet.type_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26953,31 +26953,31 @@
 
   @DomName('HTMLTableCellElement.cellIndex')
   @DocsEditable()
-  int get cellIndex => _blink.BlinkHTMLTableCellElement.$cellIndex_Getter(this);
+  int get cellIndex => _blink.BlinkHTMLTableCellElement.cellIndex_Getter(this);
 
   @DomName('HTMLTableCellElement.colSpan')
   @DocsEditable()
-  int get colSpan => _blink.BlinkHTMLTableCellElement.$colSpan_Getter(this);
+  int get colSpan => _blink.BlinkHTMLTableCellElement.colSpan_Getter(this);
 
   @DomName('HTMLTableCellElement.colSpan')
   @DocsEditable()
-  void set colSpan(int value) => _blink.BlinkHTMLTableCellElement.$colSpan_Setter(this, value);
+  void set colSpan(int value) => _blink.BlinkHTMLTableCellElement.colSpan_Setter_long(this, value);
 
   @DomName('HTMLTableCellElement.headers')
   @DocsEditable()
-  String get headers => _blink.BlinkHTMLTableCellElement.$headers_Getter(this);
+  String get headers => _blink.BlinkHTMLTableCellElement.headers_Getter(this);
 
   @DomName('HTMLTableCellElement.headers')
   @DocsEditable()
-  void set headers(String value) => _blink.BlinkHTMLTableCellElement.$headers_Setter(this, value);
+  void set headers(String value) => _blink.BlinkHTMLTableCellElement.headers_Setter_DOMString(this, value);
 
   @DomName('HTMLTableCellElement.rowSpan')
   @DocsEditable()
-  int get rowSpan => _blink.BlinkHTMLTableCellElement.$rowSpan_Getter(this);
+  int get rowSpan => _blink.BlinkHTMLTableCellElement.rowSpan_Getter(this);
 
   @DomName('HTMLTableCellElement.rowSpan')
   @DocsEditable()
-  void set rowSpan(int value) => _blink.BlinkHTMLTableCellElement.$rowSpan_Setter(this, value);
+  void set rowSpan(int value) => _blink.BlinkHTMLTableCellElement.rowSpan_Setter_long(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27005,11 +27005,11 @@
 
   @DomName('HTMLTableColElement.span')
   @DocsEditable()
-  int get span => _blink.BlinkHTMLTableColElement.$span_Getter(this);
+  int get span => _blink.BlinkHTMLTableColElement.span_Getter(this);
 
   @DomName('HTMLTableColElement.span')
   @DocsEditable()
-  void set span(int value) => _blink.BlinkHTMLTableColElement.$span_Setter(this, value);
+  void set span(int value) => _blink.BlinkHTMLTableColElement.span_Setter_long(this, value);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -27055,71 +27055,71 @@
 
   @DomName('HTMLTableElement.caption')
   @DocsEditable()
-  TableCaptionElement get caption => _blink.BlinkHTMLTableElement.$caption_Getter(this);
+  TableCaptionElement get caption => _blink.BlinkHTMLTableElement.caption_Getter(this);
 
   @DomName('HTMLTableElement.caption')
   @DocsEditable()
-  void set caption(TableCaptionElement value) => _blink.BlinkHTMLTableElement.$caption_Setter(this, value);
+  void set caption(TableCaptionElement value) => _blink.BlinkHTMLTableElement.caption_Setter_HTMLTableCaptionElement(this, value);
 
   @DomName('HTMLTableElement.rows')
   @DocsEditable()
-  List<Node> get _rows => _blink.BlinkHTMLTableElement.$rows_Getter(this);
+  List<Node> get _rows => _blink.BlinkHTMLTableElement.rows_Getter(this);
 
   @DomName('HTMLTableElement.tBodies')
   @DocsEditable()
-  List<Node> get _tBodies => _blink.BlinkHTMLTableElement.$tBodies_Getter(this);
+  List<Node> get _tBodies => _blink.BlinkHTMLTableElement.tBodies_Getter(this);
 
   @DomName('HTMLTableElement.tFoot')
   @DocsEditable()
-  TableSectionElement get tFoot => _blink.BlinkHTMLTableElement.$tFoot_Getter(this);
+  TableSectionElement get tFoot => _blink.BlinkHTMLTableElement.tFoot_Getter(this);
 
   @DomName('HTMLTableElement.tFoot')
   @DocsEditable()
-  void set tFoot(TableSectionElement value) => _blink.BlinkHTMLTableElement.$tFoot_Setter(this, value);
+  void set tFoot(TableSectionElement value) => _blink.BlinkHTMLTableElement.tFoot_Setter_HTMLTableSectionElement(this, value);
 
   @DomName('HTMLTableElement.tHead')
   @DocsEditable()
-  TableSectionElement get tHead => _blink.BlinkHTMLTableElement.$tHead_Getter(this);
+  TableSectionElement get tHead => _blink.BlinkHTMLTableElement.tHead_Getter(this);
 
   @DomName('HTMLTableElement.tHead')
   @DocsEditable()
-  void set tHead(TableSectionElement value) => _blink.BlinkHTMLTableElement.$tHead_Setter(this, value);
+  void set tHead(TableSectionElement value) => _blink.BlinkHTMLTableElement.tHead_Setter_HTMLTableSectionElement(this, value);
 
   @DomName('HTMLTableElement.createCaption')
   @DocsEditable()
-  HtmlElement _createCaption() => _blink.BlinkHTMLTableElement.$createCaption_Callback(this);
+  HtmlElement _createCaption() => _blink.BlinkHTMLTableElement.createCaption_Callback(this);
 
   @DomName('HTMLTableElement.createTBody')
   @DocsEditable()
-  HtmlElement _createTBody() => _blink.BlinkHTMLTableElement.$createTBody_Callback(this);
+  HtmlElement _createTBody() => _blink.BlinkHTMLTableElement.createTBody_Callback(this);
 
   @DomName('HTMLTableElement.createTFoot')
   @DocsEditable()
-  HtmlElement _createTFoot() => _blink.BlinkHTMLTableElement.$createTFoot_Callback(this);
+  HtmlElement _createTFoot() => _blink.BlinkHTMLTableElement.createTFoot_Callback(this);
 
   @DomName('HTMLTableElement.createTHead')
   @DocsEditable()
-  HtmlElement _createTHead() => _blink.BlinkHTMLTableElement.$createTHead_Callback(this);
+  HtmlElement _createTHead() => _blink.BlinkHTMLTableElement.createTHead_Callback(this);
 
   @DomName('HTMLTableElement.deleteCaption')
   @DocsEditable()
-  void deleteCaption() => _blink.BlinkHTMLTableElement.$deleteCaption_Callback(this);
+  void deleteCaption() => _blink.BlinkHTMLTableElement.deleteCaption_Callback(this);
 
   @DomName('HTMLTableElement.deleteRow')
   @DocsEditable()
-  void deleteRow(int index) => _blink.BlinkHTMLTableElement.$deleteRow_Callback(this, index);
+  void deleteRow(int index) => _blink.BlinkHTMLTableElement.deleteRow_Callback_long(this, index);
 
   @DomName('HTMLTableElement.deleteTFoot')
   @DocsEditable()
-  void deleteTFoot() => _blink.BlinkHTMLTableElement.$deleteTFoot_Callback(this);
+  void deleteTFoot() => _blink.BlinkHTMLTableElement.deleteTFoot_Callback(this);
 
   @DomName('HTMLTableElement.deleteTHead')
   @DocsEditable()
-  void deleteTHead() => _blink.BlinkHTMLTableElement.$deleteTHead_Callback(this);
+  void deleteTHead() => _blink.BlinkHTMLTableElement.deleteTHead_Callback(this);
 
   @DomName('HTMLTableElement.insertRow')
   @DocsEditable()
-  HtmlElement _insertRow(int index) => _blink.BlinkHTMLTableElement.$insertRow_Callback(this, index);
+  HtmlElement _insertRow(int index) => _blink.BlinkHTMLTableElement.insertRow_Callback_long(this, index);
 }
 // 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
@@ -27156,23 +27156,23 @@
 
   @DomName('HTMLTableRowElement.cells')
   @DocsEditable()
-  List<Node> get _cells => _blink.BlinkHTMLTableRowElement.$cells_Getter(this);
+  List<Node> get _cells => _blink.BlinkHTMLTableRowElement.cells_Getter(this);
 
   @DomName('HTMLTableRowElement.rowIndex')
   @DocsEditable()
-  int get rowIndex => _blink.BlinkHTMLTableRowElement.$rowIndex_Getter(this);
+  int get rowIndex => _blink.BlinkHTMLTableRowElement.rowIndex_Getter(this);
 
   @DomName('HTMLTableRowElement.sectionRowIndex')
   @DocsEditable()
-  int get sectionRowIndex => _blink.BlinkHTMLTableRowElement.$sectionRowIndex_Getter(this);
+  int get sectionRowIndex => _blink.BlinkHTMLTableRowElement.sectionRowIndex_Getter(this);
 
   @DomName('HTMLTableRowElement.deleteCell')
   @DocsEditable()
-  void deleteCell(int index) => _blink.BlinkHTMLTableRowElement.$deleteCell_Callback(this, index);
+  void deleteCell(int index) => _blink.BlinkHTMLTableRowElement.deleteCell_Callback_long(this, index);
 
   @DomName('HTMLTableRowElement.insertCell')
   @DocsEditable()
-  HtmlElement _insertCell(int index) => _blink.BlinkHTMLTableRowElement.$insertCell_Callback(this, index);
+  HtmlElement _insertCell(int index) => _blink.BlinkHTMLTableRowElement.insertCell_Callback_long(this, index);
 }
 // 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
@@ -27205,15 +27205,15 @@
 
   @DomName('HTMLTableSectionElement.rows')
   @DocsEditable()
-  List<Node> get _rows => _blink.BlinkHTMLTableSectionElement.$rows_Getter(this);
+  List<Node> get _rows => _blink.BlinkHTMLTableSectionElement.rows_Getter(this);
 
   @DomName('HTMLTableSectionElement.deleteRow')
   @DocsEditable()
-  void deleteRow(int index) => _blink.BlinkHTMLTableSectionElement.$deleteRow_Callback(this, index);
+  void deleteRow(int index) => _blink.BlinkHTMLTableSectionElement.deleteRow_Callback_long(this, index);
 
   @DomName('HTMLTableSectionElement.insertRow')
   @DocsEditable()
-  HtmlElement _insertRow(int index) => _blink.BlinkHTMLTableSectionElement.$insertRow_Callback(this, index);
+  HtmlElement _insertRow(int index) => _blink.BlinkHTMLTableSectionElement.insertRow_Callback_long(this, index);
 }
 // 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
@@ -27246,7 +27246,7 @@
 
   @DomName('HTMLTemplateElement.content')
   @DocsEditable()
-  DocumentFragment get content => _blink.BlinkHTMLTemplateElement.$content_Getter(this);
+  DocumentFragment get content => _blink.BlinkHTMLTemplateElement.content_Getter(this);
 
 
   /**
@@ -27280,16 +27280,16 @@
 
   @DomName('Text.wholeText')
   @DocsEditable()
-  String get wholeText => _blink.BlinkText.$wholeText_Getter(this);
+  String get wholeText => _blink.BlinkText.wholeText_Getter(this);
 
   @DomName('Text.getDestinationInsertionPoints')
   @DocsEditable()
   @Experimental() // untriaged
-  List<Node> getDestinationInsertionPoints() => _blink.BlinkText.$getDestinationInsertionPoints_Callback(this);
+  List<Node> getDestinationInsertionPoints() => _blink.BlinkText.getDestinationInsertionPoints_Callback(this);
 
   @DomName('Text.splitText')
   @DocsEditable()
-  Text splitText(int offset) => _blink.BlinkText.$splitText_Callback(this, offset);
+  Text splitText(int offset) => _blink.BlinkText.splitText_Callback_ul(this, offset);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27317,194 +27317,194 @@
 
   @DomName('HTMLTextAreaElement.autofocus')
   @DocsEditable()
-  bool get autofocus => _blink.BlinkHTMLTextAreaElement.$autofocus_Getter(this);
+  bool get autofocus => _blink.BlinkHTMLTextAreaElement.autofocus_Getter(this);
 
   @DomName('HTMLTextAreaElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLTextAreaElement.$autofocus_Setter(this, value);
+  void set autofocus(bool value) => _blink.BlinkHTMLTextAreaElement.autofocus_Setter_boolean(this, value);
 
   @DomName('HTMLTextAreaElement.cols')
   @DocsEditable()
-  int get cols => _blink.BlinkHTMLTextAreaElement.$cols_Getter(this);
+  int get cols => _blink.BlinkHTMLTextAreaElement.cols_Getter(this);
 
   @DomName('HTMLTextAreaElement.cols')
   @DocsEditable()
-  void set cols(int value) => _blink.BlinkHTMLTextAreaElement.$cols_Setter(this, value);
+  void set cols(int value) => _blink.BlinkHTMLTextAreaElement.cols_Setter_long(this, value);
 
   @DomName('HTMLTextAreaElement.defaultValue')
   @DocsEditable()
-  String get defaultValue => _blink.BlinkHTMLTextAreaElement.$defaultValue_Getter(this);
+  String get defaultValue => _blink.BlinkHTMLTextAreaElement.defaultValue_Getter(this);
 
   @DomName('HTMLTextAreaElement.defaultValue')
   @DocsEditable()
-  void set defaultValue(String value) => _blink.BlinkHTMLTextAreaElement.$defaultValue_Setter(this, value);
+  void set defaultValue(String value) => _blink.BlinkHTMLTextAreaElement.defaultValue_Setter_DOMString(this, value);
 
   @DomName('HTMLTextAreaElement.dirName')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#dom-textarea-dirname
   @Experimental()
-  String get dirName => _blink.BlinkHTMLTextAreaElement.$dirName_Getter(this);
+  String get dirName => _blink.BlinkHTMLTextAreaElement.dirName_Getter(this);
 
   @DomName('HTMLTextAreaElement.dirName')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#dom-textarea-dirname
   @Experimental()
-  void set dirName(String value) => _blink.BlinkHTMLTextAreaElement.$dirName_Setter(this, value);
+  void set dirName(String value) => _blink.BlinkHTMLTextAreaElement.dirName_Setter_DOMString(this, value);
 
   @DomName('HTMLTextAreaElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLTextAreaElement.$disabled_Getter(this);
+  bool get disabled => _blink.BlinkHTMLTextAreaElement.disabled_Getter(this);
 
   @DomName('HTMLTextAreaElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLTextAreaElement.$disabled_Setter(this, value);
+  void set disabled(bool value) => _blink.BlinkHTMLTextAreaElement.disabled_Setter_boolean(this, value);
 
   @DomName('HTMLTextAreaElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLTextAreaElement.$form_Getter(this);
+  FormElement get form => _blink.BlinkHTMLTextAreaElement.form_Getter(this);
 
   @DomName('HTMLTextAreaElement.inputMode')
   @DocsEditable()
   @Experimental() // untriaged
-  String get inputMode => _blink.BlinkHTMLTextAreaElement.$inputMode_Getter(this);
+  String get inputMode => _blink.BlinkHTMLTextAreaElement.inputMode_Getter(this);
 
   @DomName('HTMLTextAreaElement.inputMode')
   @DocsEditable()
   @Experimental() // untriaged
-  void set inputMode(String value) => _blink.BlinkHTMLTextAreaElement.$inputMode_Setter(this, value);
+  void set inputMode(String value) => _blink.BlinkHTMLTextAreaElement.inputMode_Setter_DOMString(this, value);
 
   @DomName('HTMLTextAreaElement.labels')
   @DocsEditable()
   @Unstable()
-  List<Node> get labels => _blink.BlinkHTMLTextAreaElement.$labels_Getter(this);
+  List<Node> get labels => _blink.BlinkHTMLTextAreaElement.labels_Getter(this);
 
   @DomName('HTMLTextAreaElement.maxLength')
   @DocsEditable()
-  int get maxLength => _blink.BlinkHTMLTextAreaElement.$maxLength_Getter(this);
+  int get maxLength => _blink.BlinkHTMLTextAreaElement.maxLength_Getter(this);
 
   @DomName('HTMLTextAreaElement.maxLength')
   @DocsEditable()
-  void set maxLength(int value) => _blink.BlinkHTMLTextAreaElement.$maxLength_Setter(this, value);
+  void set maxLength(int value) => _blink.BlinkHTMLTextAreaElement.maxLength_Setter_long(this, value);
 
   @DomName('HTMLTextAreaElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLTextAreaElement.$name_Getter(this);
+  String get name => _blink.BlinkHTMLTextAreaElement.name_Getter(this);
 
   @DomName('HTMLTextAreaElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLTextAreaElement.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkHTMLTextAreaElement.name_Setter_DOMString(this, value);
 
   @DomName('HTMLTextAreaElement.placeholder')
   @DocsEditable()
-  String get placeholder => _blink.BlinkHTMLTextAreaElement.$placeholder_Getter(this);
+  String get placeholder => _blink.BlinkHTMLTextAreaElement.placeholder_Getter(this);
 
   @DomName('HTMLTextAreaElement.placeholder')
   @DocsEditable()
-  void set placeholder(String value) => _blink.BlinkHTMLTextAreaElement.$placeholder_Setter(this, value);
+  void set placeholder(String value) => _blink.BlinkHTMLTextAreaElement.placeholder_Setter_DOMString(this, value);
 
   @DomName('HTMLTextAreaElement.readOnly')
   @DocsEditable()
-  bool get readOnly => _blink.BlinkHTMLTextAreaElement.$readOnly_Getter(this);
+  bool get readOnly => _blink.BlinkHTMLTextAreaElement.readOnly_Getter(this);
 
   @DomName('HTMLTextAreaElement.readOnly')
   @DocsEditable()
-  void set readOnly(bool value) => _blink.BlinkHTMLTextAreaElement.$readOnly_Setter(this, value);
+  void set readOnly(bool value) => _blink.BlinkHTMLTextAreaElement.readOnly_Setter_boolean(this, value);
 
   @DomName('HTMLTextAreaElement.required')
   @DocsEditable()
-  bool get required => _blink.BlinkHTMLTextAreaElement.$required_Getter(this);
+  bool get required => _blink.BlinkHTMLTextAreaElement.required_Getter(this);
 
   @DomName('HTMLTextAreaElement.required')
   @DocsEditable()
-  void set required(bool value) => _blink.BlinkHTMLTextAreaElement.$required_Setter(this, value);
+  void set required(bool value) => _blink.BlinkHTMLTextAreaElement.required_Setter_boolean(this, value);
 
   @DomName('HTMLTextAreaElement.rows')
   @DocsEditable()
-  int get rows => _blink.BlinkHTMLTextAreaElement.$rows_Getter(this);
+  int get rows => _blink.BlinkHTMLTextAreaElement.rows_Getter(this);
 
   @DomName('HTMLTextAreaElement.rows')
   @DocsEditable()
-  void set rows(int value) => _blink.BlinkHTMLTextAreaElement.$rows_Setter(this, value);
+  void set rows(int value) => _blink.BlinkHTMLTextAreaElement.rows_Setter_long(this, value);
 
   @DomName('HTMLTextAreaElement.selectionDirection')
   @DocsEditable()
-  String get selectionDirection => _blink.BlinkHTMLTextAreaElement.$selectionDirection_Getter(this);
+  String get selectionDirection => _blink.BlinkHTMLTextAreaElement.selectionDirection_Getter(this);
 
   @DomName('HTMLTextAreaElement.selectionDirection')
   @DocsEditable()
-  void set selectionDirection(String value) => _blink.BlinkHTMLTextAreaElement.$selectionDirection_Setter(this, value);
+  void set selectionDirection(String value) => _blink.BlinkHTMLTextAreaElement.selectionDirection_Setter_DOMString(this, value);
 
   @DomName('HTMLTextAreaElement.selectionEnd')
   @DocsEditable()
-  int get selectionEnd => _blink.BlinkHTMLTextAreaElement.$selectionEnd_Getter(this);
+  int get selectionEnd => _blink.BlinkHTMLTextAreaElement.selectionEnd_Getter(this);
 
   @DomName('HTMLTextAreaElement.selectionEnd')
   @DocsEditable()
-  void set selectionEnd(int value) => _blink.BlinkHTMLTextAreaElement.$selectionEnd_Setter(this, value);
+  void set selectionEnd(int value) => _blink.BlinkHTMLTextAreaElement.selectionEnd_Setter_long(this, value);
 
   @DomName('HTMLTextAreaElement.selectionStart')
   @DocsEditable()
-  int get selectionStart => _blink.BlinkHTMLTextAreaElement.$selectionStart_Getter(this);
+  int get selectionStart => _blink.BlinkHTMLTextAreaElement.selectionStart_Getter(this);
 
   @DomName('HTMLTextAreaElement.selectionStart')
   @DocsEditable()
-  void set selectionStart(int value) => _blink.BlinkHTMLTextAreaElement.$selectionStart_Setter(this, value);
+  void set selectionStart(int value) => _blink.BlinkHTMLTextAreaElement.selectionStart_Setter_long(this, value);
 
   @DomName('HTMLTextAreaElement.textLength')
   @DocsEditable()
-  int get textLength => _blink.BlinkHTMLTextAreaElement.$textLength_Getter(this);
+  int get textLength => _blink.BlinkHTMLTextAreaElement.textLength_Getter(this);
 
   @DomName('HTMLTextAreaElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLTextAreaElement.$type_Getter(this);
+  String get type => _blink.BlinkHTMLTextAreaElement.type_Getter(this);
 
   @DomName('HTMLTextAreaElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLTextAreaElement.$validationMessage_Getter(this);
+  String get validationMessage => _blink.BlinkHTMLTextAreaElement.validationMessage_Getter(this);
 
   @DomName('HTMLTextAreaElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLTextAreaElement.$validity_Getter(this);
+  ValidityState get validity => _blink.BlinkHTMLTextAreaElement.validity_Getter(this);
 
   @DomName('HTMLTextAreaElement.value')
   @DocsEditable()
-  String get value => _blink.BlinkHTMLTextAreaElement.$value_Getter(this);
+  String get value => _blink.BlinkHTMLTextAreaElement.value_Getter(this);
 
   @DomName('HTMLTextAreaElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLTextAreaElement.$value_Setter(this, value);
+  void set value(String value) => _blink.BlinkHTMLTextAreaElement.value_Setter_DOMString(this, value);
 
   @DomName('HTMLTextAreaElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLTextAreaElement.$willValidate_Getter(this);
+  bool get willValidate => _blink.BlinkHTMLTextAreaElement.willValidate_Getter(this);
 
   @DomName('HTMLTextAreaElement.wrap')
   @DocsEditable()
-  String get wrap => _blink.BlinkHTMLTextAreaElement.$wrap_Getter(this);
+  String get wrap => _blink.BlinkHTMLTextAreaElement.wrap_Getter(this);
 
   @DomName('HTMLTextAreaElement.wrap')
   @DocsEditable()
-  void set wrap(String value) => _blink.BlinkHTMLTextAreaElement.$wrap_Setter(this, value);
+  void set wrap(String value) => _blink.BlinkHTMLTextAreaElement.wrap_Setter_DOMString(this, value);
 
   @DomName('HTMLTextAreaElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLTextAreaElement.$checkValidity_Callback(this);
+  bool checkValidity() => _blink.BlinkHTMLTextAreaElement.checkValidity_Callback(this);
 
   @DomName('HTMLTextAreaElement.select')
   @DocsEditable()
-  void select() => _blink.BlinkHTMLTextAreaElement.$select_Callback(this);
+  void select() => _blink.BlinkHTMLTextAreaElement.select_Callback(this);
 
   @DomName('HTMLTextAreaElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLTextAreaElement.$setCustomValidity_Callback(this, error);
+  void setCustomValidity(String error) => _blink.BlinkHTMLTextAreaElement.setCustomValidity_Callback_DOMString(this, error);
 
   void setRangeText(String replacement, {int start, int end, String selectionMode}) {
     if ((replacement is String || replacement == null) && start == null && end == null && selectionMode == null) {
-      _blink.BlinkHTMLTextAreaElement.$_setRangeText_1_Callback(this, replacement);
+      _blink.BlinkHTMLTextAreaElement.setRangeText_Callback_DOMString(this, replacement);
       return;
     }
     if ((selectionMode is String || selectionMode == null) && (end is int || end == null) && (start is int || start == null) && (replacement is String || replacement == null)) {
-      _blink.BlinkHTMLTextAreaElement.$_setRangeText_2_Callback(this, replacement, start, end, selectionMode);
+      _blink.BlinkHTMLTextAreaElement.setRangeText_Callback_DOMString_ul_ul_DOMString(this, replacement, start, end, selectionMode);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -27512,10 +27512,10 @@
 
   void setSelectionRange(int start, int end, [String direction]) {
     if (direction != null) {
-      _blink.BlinkHTMLTextAreaElement.$_setSelectionRange_1_Callback(this, start, end, direction);
+      _blink.BlinkHTMLTextAreaElement.setSelectionRange_Callback_long_long_DOMString(this, start, end, direction);
       return;
     }
-    _blink.BlinkHTMLTextAreaElement.$_setSelectionRange_2_Callback(this, start, end);
+    _blink.BlinkHTMLTextAreaElement.setSelectionRange_Callback_long_long(this, start, end);
     return;
   }
 
@@ -27544,11 +27544,11 @@
 
   @DomName('TextEvent.data')
   @DocsEditable()
-  String get data => _blink.BlinkTextEvent.$data_Getter(this);
+  String get data => _blink.BlinkTextEvent.data_Getter(this);
 
   @DomName('TextEvent.initTextEvent')
   @DocsEditable()
-  void _initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) => _blink.BlinkTextEvent.$initTextEvent_Callback(this, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg);
+  void _initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) => _blink.BlinkTextEvent.initTextEvent_Callback_DOMString_boolean_boolean_Window_DOMString(this, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27566,7 +27566,7 @@
 
   @DomName('TextMetrics.width')
   @DocsEditable()
-  double get width => _blink.BlinkTextMetrics.$width_Getter(this);
+  double get width => _blink.BlinkTextMetrics.width_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27596,59 +27596,59 @@
 
   @DomName('TextTrack.activeCues')
   @DocsEditable()
-  TextTrackCueList get activeCues => _blink.BlinkTextTrack.$activeCues_Getter(this);
+  TextTrackCueList get activeCues => _blink.BlinkTextTrack.activeCues_Getter(this);
 
   @DomName('TextTrack.cues')
   @DocsEditable()
-  TextTrackCueList get cues => _blink.BlinkTextTrack.$cues_Getter(this);
+  TextTrackCueList get cues => _blink.BlinkTextTrack.cues_Getter(this);
 
   @DomName('TextTrack.id')
   @DocsEditable()
   @Experimental() // untriaged
-  String get id => _blink.BlinkTextTrack.$id_Getter(this);
+  String get id => _blink.BlinkTextTrack.id_Getter(this);
 
   @DomName('TextTrack.kind')
   @DocsEditable()
-  String get kind => _blink.BlinkTextTrack.$kind_Getter(this);
+  String get kind => _blink.BlinkTextTrack.kind_Getter(this);
 
   @DomName('TextTrack.label')
   @DocsEditable()
-  String get label => _blink.BlinkTextTrack.$label_Getter(this);
+  String get label => _blink.BlinkTextTrack.label_Getter(this);
 
   @DomName('TextTrack.language')
   @DocsEditable()
-  String get language => _blink.BlinkTextTrack.$language_Getter(this);
+  String get language => _blink.BlinkTextTrack.language_Getter(this);
 
   @DomName('TextTrack.mode')
   @DocsEditable()
-  String get mode => _blink.BlinkTextTrack.$mode_Getter(this);
+  String get mode => _blink.BlinkTextTrack.mode_Getter(this);
 
   @DomName('TextTrack.mode')
   @DocsEditable()
-  void set mode(String value) => _blink.BlinkTextTrack.$mode_Setter(this, value);
+  void set mode(String value) => _blink.BlinkTextTrack.mode_Setter_DOMString(this, value);
 
   @DomName('TextTrack.regions')
   @DocsEditable()
   @Experimental() // untriaged
-  VttRegionList get regions => _blink.BlinkTextTrack.$regions_Getter(this);
+  VttRegionList get regions => _blink.BlinkTextTrack.regions_Getter(this);
 
   @DomName('TextTrack.addCue')
   @DocsEditable()
-  void addCue(TextTrackCue cue) => _blink.BlinkTextTrack.$addCue_Callback(this, cue);
+  void addCue(TextTrackCue cue) => _blink.BlinkTextTrack.addCue_Callback_TextTrackCue(this, cue);
 
   @DomName('TextTrack.addRegion')
   @DocsEditable()
   @Experimental() // untriaged
-  void addRegion(VttRegion region) => _blink.BlinkTextTrack.$addRegion_Callback(this, region);
+  void addRegion(VttRegion region) => _blink.BlinkTextTrack.addRegion_Callback_VTTRegion(this, region);
 
   @DomName('TextTrack.removeCue')
   @DocsEditable()
-  void removeCue(TextTrackCue cue) => _blink.BlinkTextTrack.$removeCue_Callback(this, cue);
+  void removeCue(TextTrackCue cue) => _blink.BlinkTextTrack.removeCue_Callback_TextTrackCue(this, cue);
 
   @DomName('TextTrack.removeRegion')
   @DocsEditable()
   @Experimental() // untriaged
-  void removeRegion(VttRegion region) => _blink.BlinkTextTrack.$removeRegion_Callback(this, region);
+  void removeRegion(VttRegion region) => _blink.BlinkTextTrack.removeRegion_Callback_VTTRegion(this, region);
 
   /// Stream of `cuechange` events handled by this [TextTrack].
   @DomName('TextTrack.oncuechange')
@@ -27693,39 +27693,39 @@
 
   @DomName('TextTrackCue.endTime')
   @DocsEditable()
-  num get endTime => _blink.BlinkTextTrackCue.$endTime_Getter(this);
+  num get endTime => _blink.BlinkTextTrackCue.endTime_Getter(this);
 
   @DomName('TextTrackCue.endTime')
   @DocsEditable()
-  void set endTime(num value) => _blink.BlinkTextTrackCue.$endTime_Setter(this, value);
+  void set endTime(num value) => _blink.BlinkTextTrackCue.endTime_Setter_double(this, value);
 
   @DomName('TextTrackCue.id')
   @DocsEditable()
-  String get id => _blink.BlinkTextTrackCue.$id_Getter(this);
+  String get id => _blink.BlinkTextTrackCue.id_Getter(this);
 
   @DomName('TextTrackCue.id')
   @DocsEditable()
-  void set id(String value) => _blink.BlinkTextTrackCue.$id_Setter(this, value);
+  void set id(String value) => _blink.BlinkTextTrackCue.id_Setter_DOMString(this, value);
 
   @DomName('TextTrackCue.pauseOnExit')
   @DocsEditable()
-  bool get pauseOnExit => _blink.BlinkTextTrackCue.$pauseOnExit_Getter(this);
+  bool get pauseOnExit => _blink.BlinkTextTrackCue.pauseOnExit_Getter(this);
 
   @DomName('TextTrackCue.pauseOnExit')
   @DocsEditable()
-  void set pauseOnExit(bool value) => _blink.BlinkTextTrackCue.$pauseOnExit_Setter(this, value);
+  void set pauseOnExit(bool value) => _blink.BlinkTextTrackCue.pauseOnExit_Setter_boolean(this, value);
 
   @DomName('TextTrackCue.startTime')
   @DocsEditable()
-  num get startTime => _blink.BlinkTextTrackCue.$startTime_Getter(this);
+  num get startTime => _blink.BlinkTextTrackCue.startTime_Getter(this);
 
   @DomName('TextTrackCue.startTime')
   @DocsEditable()
-  void set startTime(num value) => _blink.BlinkTextTrackCue.$startTime_Setter(this, value);
+  void set startTime(num value) => _blink.BlinkTextTrackCue.startTime_Setter_double(this, value);
 
   @DomName('TextTrackCue.track')
   @DocsEditable()
-  TextTrack get track => _blink.BlinkTextTrackCue.$track_Getter(this);
+  TextTrack get track => _blink.BlinkTextTrackCue.track_Getter(this);
 
   /// Stream of `enter` events handled by this [TextTrackCue].
   @DomName('TextTrackCue.onenter')
@@ -27755,15 +27755,15 @@
 
   @DomName('TextTrackCueList.length')
   @DocsEditable()
-  int get length => _blink.BlinkTextTrackCueList.$length_Getter(this);
+  int get length => _blink.BlinkTextTrackCueList.length_Getter(this);
 
   TextTrackCue operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkTextTrackCueList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkTextTrackCueList.item_Callback_ul(this, index);
   }
 
-  TextTrackCue _nativeIndexedGetter(int index) => _blink.BlinkTextTrackCueList.$NativeIndexed_Getter(this, index);
+  TextTrackCue _nativeIndexedGetter(int index) => _blink.BlinkTextTrackCueList.item_Callback_ul(this, index);
 
   void operator[]=(int index, TextTrackCue value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -27805,11 +27805,11 @@
 
   @DomName('TextTrackCueList.getCueById')
   @DocsEditable()
-  TextTrackCue getCueById(String id) => _blink.BlinkTextTrackCueList.$getCueById_Callback(this, id);
+  TextTrackCue getCueById(String id) => _blink.BlinkTextTrackCueList.getCueById_Callback_DOMString(this, id);
 
   @DomName('TextTrackCueList.item')
   @DocsEditable()
-  TextTrackCue item(int index) => _blink.BlinkTextTrackCueList.$item_Callback(this, index);
+  TextTrackCue item(int index) => _blink.BlinkTextTrackCueList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27844,15 +27844,15 @@
 
   @DomName('TextTrackList.length')
   @DocsEditable()
-  int get length => _blink.BlinkTextTrackList.$length_Getter(this);
+  int get length => _blink.BlinkTextTrackList.length_Getter(this);
 
   TextTrack operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkTextTrackList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkTextTrackList.item_Callback_ul(this, index);
   }
 
-  TextTrack _nativeIndexedGetter(int index) => _blink.BlinkTextTrackList.$NativeIndexed_Getter(this, index);
+  TextTrack _nativeIndexedGetter(int index) => _blink.BlinkTextTrackList.item_Callback_ul(this, index);
 
   void operator[]=(int index, TextTrack value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -27895,11 +27895,11 @@
   @DomName('TextTrackList.getTrackById')
   @DocsEditable()
   @Experimental() // untriaged
-  TextTrack getTrackById(String id) => _blink.BlinkTextTrackList.$getTrackById_Callback(this, id);
+  TextTrack getTrackById(String id) => _blink.BlinkTextTrackList.getTrackById_Callback_DOMString(this, id);
 
   @DomName('TextTrackList.item')
   @DocsEditable()
-  TextTrack item(int index) => _blink.BlinkTextTrackList.$item_Callback(this, index);
+  TextTrack item(int index) => _blink.BlinkTextTrackList.item_Callback_ul(this, index);
 
   /// Stream of `addtrack` events handled by this [TextTrackList].
   @DomName('TextTrackList.onaddtrack')
@@ -27928,15 +27928,15 @@
 
   @DomName('TimeRanges.length')
   @DocsEditable()
-  int get length => _blink.BlinkTimeRanges.$length_Getter(this);
+  int get length => _blink.BlinkTimeRanges.length_Getter(this);
 
   @DomName('TimeRanges.end')
   @DocsEditable()
-  double end(int index) => _blink.BlinkTimeRanges.$end_Callback(this, index);
+  double end(int index) => _blink.BlinkTimeRanges.end_Callback_ul(this, index);
 
   @DomName('TimeRanges.start')
   @DocsEditable()
-  double start(int index) => _blink.BlinkTimeRanges.$start_Callback(this, index);
+  double start(int index) => _blink.BlinkTimeRanges.start_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27956,37 +27956,37 @@
   @DomName('TimedItem.activeDuration')
   @DocsEditable()
   @Experimental() // untriaged
-  double get activeDuration => _blink.BlinkTimedItem.$activeDuration_Getter(this);
+  double get activeDuration => _blink.BlinkTimedItem.activeDuration_Getter(this);
 
   @DomName('TimedItem.currentIteration')
   @DocsEditable()
   @Experimental() // untriaged
-  int get currentIteration => _blink.BlinkTimedItem.$currentIteration_Getter(this);
+  int get currentIteration => _blink.BlinkTimedItem.currentIteration_Getter(this);
 
   @DomName('TimedItem.duration')
   @DocsEditable()
   @Experimental() // untriaged
-  double get duration => _blink.BlinkTimedItem.$duration_Getter(this);
+  double get duration => _blink.BlinkTimedItem.duration_Getter(this);
 
   @DomName('TimedItem.endTime')
   @DocsEditable()
   @Experimental() // untriaged
-  double get endTime => _blink.BlinkTimedItem.$endTime_Getter(this);
+  double get endTime => _blink.BlinkTimedItem.endTime_Getter(this);
 
   @DomName('TimedItem.localTime')
   @DocsEditable()
   @Experimental() // untriaged
-  double get localTime => _blink.BlinkTimedItem.$localTime_Getter(this);
+  double get localTime => _blink.BlinkTimedItem.localTime_Getter(this);
 
   @DomName('TimedItem.player')
   @DocsEditable()
   @Experimental() // untriaged
-  Player get player => _blink.BlinkTimedItem.$player_Getter(this);
+  Player get player => _blink.BlinkTimedItem.player_Getter(this);
 
   @DomName('TimedItem.startTime')
   @DocsEditable()
   @Experimental() // untriaged
-  double get startTime => _blink.BlinkTimedItem.$startTime_Getter(this);
+  double get startTime => _blink.BlinkTimedItem.startTime_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28006,7 +28006,7 @@
   @DomName('Timeline.play')
   @DocsEditable()
   @Experimental() // untriaged
-  Player play(TimedItem source) => _blink.BlinkTimeline.$play_Callback(this, source);
+  Player play(TimedItem source) => _blink.BlinkTimeline.play_Callback_TimedItem(this, source);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28035,87 +28035,87 @@
   @DomName('Timing.delay')
   @DocsEditable()
   @Experimental() // untriaged
-  num get delay => _blink.BlinkTiming.$delay_Getter(this);
+  num get delay => _blink.BlinkTiming.delay_Getter(this);
 
   @DomName('Timing.delay')
   @DocsEditable()
   @Experimental() // untriaged
-  void set delay(num value) => _blink.BlinkTiming.$delay_Setter(this, value);
+  void set delay(num value) => _blink.BlinkTiming.delay_Setter_double(this, value);
 
   @DomName('Timing.direction')
   @DocsEditable()
   @Experimental() // untriaged
-  String get direction => _blink.BlinkTiming.$direction_Getter(this);
+  String get direction => _blink.BlinkTiming.direction_Getter(this);
 
   @DomName('Timing.direction')
   @DocsEditable()
   @Experimental() // untriaged
-  void set direction(String value) => _blink.BlinkTiming.$direction_Setter(this, value);
+  void set direction(String value) => _blink.BlinkTiming.direction_Setter_DOMString(this, value);
 
   @DomName('Timing.easing')
   @DocsEditable()
   @Experimental() // untriaged
-  String get easing => _blink.BlinkTiming.$easing_Getter(this);
+  String get easing => _blink.BlinkTiming.easing_Getter(this);
 
   @DomName('Timing.easing')
   @DocsEditable()
   @Experimental() // untriaged
-  void set easing(String value) => _blink.BlinkTiming.$easing_Setter(this, value);
+  void set easing(String value) => _blink.BlinkTiming.easing_Setter_DOMString(this, value);
 
   @DomName('Timing.endDelay')
   @DocsEditable()
   @Experimental() // untriaged
-  num get endDelay => _blink.BlinkTiming.$endDelay_Getter(this);
+  num get endDelay => _blink.BlinkTiming.endDelay_Getter(this);
 
   @DomName('Timing.endDelay')
   @DocsEditable()
   @Experimental() // untriaged
-  void set endDelay(num value) => _blink.BlinkTiming.$endDelay_Setter(this, value);
+  void set endDelay(num value) => _blink.BlinkTiming.endDelay_Setter_double(this, value);
 
   @DomName('Timing.fill')
   @DocsEditable()
   @Experimental() // untriaged
-  String get fill => _blink.BlinkTiming.$fill_Getter(this);
+  String get fill => _blink.BlinkTiming.fill_Getter(this);
 
   @DomName('Timing.fill')
   @DocsEditable()
   @Experimental() // untriaged
-  void set fill(String value) => _blink.BlinkTiming.$fill_Setter(this, value);
+  void set fill(String value) => _blink.BlinkTiming.fill_Setter_DOMString(this, value);
 
   @DomName('Timing.iterationStart')
   @DocsEditable()
   @Experimental() // untriaged
-  num get iterationStart => _blink.BlinkTiming.$iterationStart_Getter(this);
+  num get iterationStart => _blink.BlinkTiming.iterationStart_Getter(this);
 
   @DomName('Timing.iterationStart')
   @DocsEditable()
   @Experimental() // untriaged
-  void set iterationStart(num value) => _blink.BlinkTiming.$iterationStart_Setter(this, value);
+  void set iterationStart(num value) => _blink.BlinkTiming.iterationStart_Setter_double(this, value);
 
   @DomName('Timing.iterations')
   @DocsEditable()
   @Experimental() // untriaged
-  num get iterations => _blink.BlinkTiming.$iterations_Getter(this);
+  num get iterations => _blink.BlinkTiming.iterations_Getter(this);
 
   @DomName('Timing.iterations')
   @DocsEditable()
   @Experimental() // untriaged
-  void set iterations(num value) => _blink.BlinkTiming.$iterations_Setter(this, value);
+  void set iterations(num value) => _blink.BlinkTiming.iterations_Setter_double(this, value);
 
   @DomName('Timing.playbackRate')
   @DocsEditable()
   @Experimental() // untriaged
-  num get playbackRate => _blink.BlinkTiming.$playbackRate_Getter(this);
+  num get playbackRate => _blink.BlinkTiming.playbackRate_Getter(this);
 
   @DomName('Timing.playbackRate')
   @DocsEditable()
   @Experimental() // untriaged
-  void set playbackRate(num value) => _blink.BlinkTiming.$playbackRate_Setter(this, value);
+  void set playbackRate(num value) => _blink.BlinkTiming.playbackRate_Setter_double(this, value);
 
   @DomName('Timing.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(String name, num duration) => _blink.BlinkTiming.$__setter___Callback(this, name, duration);
+  void __setter__(String name, num duration) => _blink.BlinkTiming.$__setter___Callback_DOMString_double(this, name, duration);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28157,75 +28157,75 @@
 
   @DomName('Touch.clientX')
   @DocsEditable()
-  int get _clientX => _blink.BlinkTouch.$clientX_Getter(this);
+  int get _clientX => _blink.BlinkTouch.clientX_Getter(this);
 
   @DomName('Touch.clientY')
   @DocsEditable()
-  int get _clientY => _blink.BlinkTouch.$clientY_Getter(this);
+  int get _clientY => _blink.BlinkTouch.clientY_Getter(this);
 
   @DomName('Touch.identifier')
   @DocsEditable()
-  int get identifier => _blink.BlinkTouch.$identifier_Getter(this);
+  int get identifier => _blink.BlinkTouch.identifier_Getter(this);
 
   @DomName('Touch.pageX')
   @DocsEditable()
-  int get _pageX => _blink.BlinkTouch.$pageX_Getter(this);
+  int get _pageX => _blink.BlinkTouch.pageX_Getter(this);
 
   @DomName('Touch.pageY')
   @DocsEditable()
-  int get _pageY => _blink.BlinkTouch.$pageY_Getter(this);
+  int get _pageY => _blink.BlinkTouch.pageY_Getter(this);
 
   @DomName('Touch.screenX')
   @DocsEditable()
-  int get _screenX => _blink.BlinkTouch.$screenX_Getter(this);
+  int get _screenX => _blink.BlinkTouch.screenX_Getter(this);
 
   @DomName('Touch.screenY')
   @DocsEditable()
-  int get _screenY => _blink.BlinkTouch.$screenY_Getter(this);
+  int get _screenY => _blink.BlinkTouch.screenY_Getter(this);
 
   @DomName('Touch.target')
   @DocsEditable()
-  EventTarget get target => _blink.BlinkTouch.$target_Getter(this);
+  EventTarget get target => _blink.BlinkTouch.target_Getter(this);
 
   @DomName('Touch.webkitForce')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  double get force => _blink.BlinkTouch.$webkitForce_Getter(this);
+  double get force => _blink.BlinkTouch.webkitForce_Getter(this);
 
   @DomName('Touch.webkitRadiusX')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  int get _webkitRadiusX => _blink.BlinkTouch.$webkitRadiusX_Getter(this);
+  int get _webkitRadiusX => _blink.BlinkTouch.webkitRadiusX_Getter(this);
 
   @DomName('Touch.webkitRadiusY')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  int get _webkitRadiusY => _blink.BlinkTouch.$webkitRadiusY_Getter(this);
+  int get _webkitRadiusY => _blink.BlinkTouch.webkitRadiusY_Getter(this);
 
   @DomName('Touch.webkitRotationAngle')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  double get rotationAngle => _blink.BlinkTouch.$webkitRotationAngle_Getter(this);
+  double get rotationAngle => _blink.BlinkTouch.webkitRotationAngle_Getter(this);
 
 
 // As of Chrome 37, these all changed from long to double.  This code
 // preserves backwards compatability for the time being.
-  int get __clientX => _blink.BlinkTouch.$clientX_Getter(this).round();
-  int get __clientY => _blink.BlinkTouch.$clientY_Getter(this).round();
-  int get __screenX => _blink.BlinkTouch.$screenX_Getter(this).round();
-  int get __screenY => _blink.BlinkTouch.$screenY_Getter(this).round();
-  int get __pageX => _blink.BlinkTouch.$pageX_Getter(this).round();
-  int get __pageY => _blink.BlinkTouch.$pageY_Getter(this).round();
-  int get __webkitRadiusX => _blink.BlinkTouch.$webkitRadiusX_Getter(this).round();
-  int get __webkitRadiusY => _blink.BlinkTouch.$webkitRadiusY_Getter(this).round();
+  int get __clientX => _blink.BlinkTouch.clientX_Getter(this).round();
+  int get __clientY => _blink.BlinkTouch.clientY_Getter(this).round();
+  int get __screenX => _blink.BlinkTouch.screenX_Getter(this).round();
+  int get __screenY => _blink.BlinkTouch.screenY_Getter(this).round();
+  int get __pageX => _blink.BlinkTouch.pageX_Getter(this).round();
+  int get __pageY => _blink.BlinkTouch.pageY_Getter(this).round();
+  int get __webkitRadiusX => _blink.BlinkTouch.webkitRadiusX_Getter(this).round();
+  int get __webkitRadiusY => _blink.BlinkTouch.webkitRadiusY_Getter(this).round();
 
   @DomName('Touch.clientX')
   @DomName('Touch.clientY')
@@ -28283,35 +28283,35 @@
 
   @DomName('TouchEvent.altKey')
   @DocsEditable()
-  bool get altKey => _blink.BlinkTouchEvent.$altKey_Getter(this);
+  bool get altKey => _blink.BlinkTouchEvent.altKey_Getter(this);
 
   @DomName('TouchEvent.changedTouches')
   @DocsEditable()
-  TouchList get changedTouches => _blink.BlinkTouchEvent.$changedTouches_Getter(this);
+  TouchList get changedTouches => _blink.BlinkTouchEvent.changedTouches_Getter(this);
 
   @DomName('TouchEvent.ctrlKey')
   @DocsEditable()
-  bool get ctrlKey => _blink.BlinkTouchEvent.$ctrlKey_Getter(this);
+  bool get ctrlKey => _blink.BlinkTouchEvent.ctrlKey_Getter(this);
 
   @DomName('TouchEvent.metaKey')
   @DocsEditable()
-  bool get metaKey => _blink.BlinkTouchEvent.$metaKey_Getter(this);
+  bool get metaKey => _blink.BlinkTouchEvent.metaKey_Getter(this);
 
   @DomName('TouchEvent.shiftKey')
   @DocsEditable()
-  bool get shiftKey => _blink.BlinkTouchEvent.$shiftKey_Getter(this);
+  bool get shiftKey => _blink.BlinkTouchEvent.shiftKey_Getter(this);
 
   @DomName('TouchEvent.targetTouches')
   @DocsEditable()
-  TouchList get targetTouches => _blink.BlinkTouchEvent.$targetTouches_Getter(this);
+  TouchList get targetTouches => _blink.BlinkTouchEvent.targetTouches_Getter(this);
 
   @DomName('TouchEvent.touches')
   @DocsEditable()
-  TouchList get touches => _blink.BlinkTouchEvent.$touches_Getter(this);
+  TouchList get touches => _blink.BlinkTouchEvent.touches_Getter(this);
 
   @DomName('TouchEvent.initTouchEvent')
   @DocsEditable()
-  void _initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, Window view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) => _blink.BlinkTouchEvent.$initTouchEvent_Callback(this, touches, targetTouches, changedTouches, type, view, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey);
+  void _initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, Window view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) => _blink.BlinkTouchEvent.initTouchEvent_Callback_TouchList_TouchList_TouchList_DOMString_Window_long_long_long_long_boolean_boolean_boolean_boolean(this, touches, targetTouches, changedTouches, type, view, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey);
 
 
   /**
@@ -28346,15 +28346,15 @@
 
   @DomName('TouchList.length')
   @DocsEditable()
-  int get length => _blink.BlinkTouchList.$length_Getter(this);
+  int get length => _blink.BlinkTouchList.length_Getter(this);
 
   Touch operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkTouchList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkTouchList.item_Callback_ul(this, index);
   }
 
-  Touch _nativeIndexedGetter(int index) => _blink.BlinkTouchList.$NativeIndexed_Getter(this, index);
+  Touch _nativeIndexedGetter(int index) => _blink.BlinkTouchList.item_Callback_ul(this, index);
 
   void operator[]=(int index, Touch value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -28396,7 +28396,7 @@
 
   @DomName('TouchList.item')
   @DocsEditable()
-  Touch item(int index) => _blink.BlinkTouchList.$item_Callback(this, index);
+  Touch item(int index) => _blink.BlinkTouchList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28448,51 +28448,51 @@
 
   @DomName('HTMLTrackElement.default')
   @DocsEditable()
-  bool get defaultValue => _blink.BlinkHTMLTrackElement.$default_Getter(this);
+  bool get defaultValue => _blink.BlinkHTMLTrackElement.default_Getter(this);
 
   @DomName('HTMLTrackElement.default')
   @DocsEditable()
-  void set defaultValue(bool value) => _blink.BlinkHTMLTrackElement.$default_Setter(this, value);
+  void set defaultValue(bool value) => _blink.BlinkHTMLTrackElement.default_Setter_boolean(this, value);
 
   @DomName('HTMLTrackElement.kind')
   @DocsEditable()
-  String get kind => _blink.BlinkHTMLTrackElement.$kind_Getter(this);
+  String get kind => _blink.BlinkHTMLTrackElement.kind_Getter(this);
 
   @DomName('HTMLTrackElement.kind')
   @DocsEditable()
-  void set kind(String value) => _blink.BlinkHTMLTrackElement.$kind_Setter(this, value);
+  void set kind(String value) => _blink.BlinkHTMLTrackElement.kind_Setter_DOMString(this, value);
 
   @DomName('HTMLTrackElement.label')
   @DocsEditable()
-  String get label => _blink.BlinkHTMLTrackElement.$label_Getter(this);
+  String get label => _blink.BlinkHTMLTrackElement.label_Getter(this);
 
   @DomName('HTMLTrackElement.label')
   @DocsEditable()
-  void set label(String value) => _blink.BlinkHTMLTrackElement.$label_Setter(this, value);
+  void set label(String value) => _blink.BlinkHTMLTrackElement.label_Setter_DOMString(this, value);
 
   @DomName('HTMLTrackElement.readyState')
   @DocsEditable()
-  int get readyState => _blink.BlinkHTMLTrackElement.$readyState_Getter(this);
+  int get readyState => _blink.BlinkHTMLTrackElement.readyState_Getter(this);
 
   @DomName('HTMLTrackElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLTrackElement.$src_Getter(this);
+  String get src => _blink.BlinkHTMLTrackElement.src_Getter(this);
 
   @DomName('HTMLTrackElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLTrackElement.$src_Setter(this, value);
+  void set src(String value) => _blink.BlinkHTMLTrackElement.src_Setter_DOMString(this, value);
 
   @DomName('HTMLTrackElement.srclang')
   @DocsEditable()
-  String get srclang => _blink.BlinkHTMLTrackElement.$srclang_Getter(this);
+  String get srclang => _blink.BlinkHTMLTrackElement.srclang_Getter(this);
 
   @DomName('HTMLTrackElement.srclang')
   @DocsEditable()
-  void set srclang(String value) => _blink.BlinkHTMLTrackElement.$srclang_Setter(this, value);
+  void set srclang(String value) => _blink.BlinkHTMLTrackElement.srclang_Setter_DOMString(this, value);
 
   @DomName('HTMLTrackElement.track')
   @DocsEditable()
-  TextTrack get track => _blink.BlinkHTMLTrackElement.$track_Getter(this);
+  TextTrack get track => _blink.BlinkHTMLTrackElement.track_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28511,7 +28511,7 @@
 
   @DomName('TrackEvent.track')
   @DocsEditable()
-  Object get track => _blink.BlinkTrackEvent.$track_Getter(this);
+  Object get track => _blink.BlinkTrackEvent.track_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28529,15 +28529,15 @@
 
   @DomName('TransitionEvent.elapsedTime')
   @DocsEditable()
-  double get elapsedTime => _blink.BlinkTransitionEvent.$elapsedTime_Getter(this);
+  double get elapsedTime => _blink.BlinkTransitionEvent.elapsedTime_Getter(this);
 
   @DomName('TransitionEvent.propertyName')
   @DocsEditable()
-  String get propertyName => _blink.BlinkTransitionEvent.$propertyName_Getter(this);
+  String get propertyName => _blink.BlinkTransitionEvent.propertyName_Getter(this);
 
   @DomName('TransitionEvent.pseudoElement')
   @DocsEditable()
-  String get pseudoElement => _blink.BlinkTransitionEvent.$pseudoElement_Getter(this);
+  String get pseudoElement => _blink.BlinkTransitionEvent.pseudoElement_Getter(this);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -28556,51 +28556,51 @@
 
   @DomName('TreeWalker.currentNode')
   @DocsEditable()
-  Node get currentNode => _blink.BlinkTreeWalker.$currentNode_Getter(this);
+  Node get currentNode => _blink.BlinkTreeWalker.currentNode_Getter(this);
 
   @DomName('TreeWalker.currentNode')
   @DocsEditable()
-  void set currentNode(Node value) => _blink.BlinkTreeWalker.$currentNode_Setter(this, value);
+  void set currentNode(Node value) => _blink.BlinkTreeWalker.currentNode_Setter_Node(this, value);
 
   @DomName('TreeWalker.filter')
   @DocsEditable()
-  NodeFilter get filter => _blink.BlinkTreeWalker.$filter_Getter(this);
+  NodeFilter get filter => _blink.BlinkTreeWalker.filter_Getter(this);
 
   @DomName('TreeWalker.root')
   @DocsEditable()
-  Node get root => _blink.BlinkTreeWalker.$root_Getter(this);
+  Node get root => _blink.BlinkTreeWalker.root_Getter(this);
 
   @DomName('TreeWalker.whatToShow')
   @DocsEditable()
-  int get whatToShow => _blink.BlinkTreeWalker.$whatToShow_Getter(this);
+  int get whatToShow => _blink.BlinkTreeWalker.whatToShow_Getter(this);
 
   @DomName('TreeWalker.firstChild')
   @DocsEditable()
-  Node firstChild() => _blink.BlinkTreeWalker.$firstChild_Callback(this);
+  Node firstChild() => _blink.BlinkTreeWalker.firstChild_Callback(this);
 
   @DomName('TreeWalker.lastChild')
   @DocsEditable()
-  Node lastChild() => _blink.BlinkTreeWalker.$lastChild_Callback(this);
+  Node lastChild() => _blink.BlinkTreeWalker.lastChild_Callback(this);
 
   @DomName('TreeWalker.nextNode')
   @DocsEditable()
-  Node nextNode() => _blink.BlinkTreeWalker.$nextNode_Callback(this);
+  Node nextNode() => _blink.BlinkTreeWalker.nextNode_Callback(this);
 
   @DomName('TreeWalker.nextSibling')
   @DocsEditable()
-  Node nextSibling() => _blink.BlinkTreeWalker.$nextSibling_Callback(this);
+  Node nextSibling() => _blink.BlinkTreeWalker.nextSibling_Callback(this);
 
   @DomName('TreeWalker.parentNode')
   @DocsEditable()
-  Node parentNode() => _blink.BlinkTreeWalker.$parentNode_Callback(this);
+  Node parentNode() => _blink.BlinkTreeWalker.parentNode_Callback(this);
 
   @DomName('TreeWalker.previousNode')
   @DocsEditable()
-  Node previousNode() => _blink.BlinkTreeWalker.$previousNode_Callback(this);
+  Node previousNode() => _blink.BlinkTreeWalker.previousNode_Callback(this);
 
   @DomName('TreeWalker.previousSibling')
   @DocsEditable()
-  Node previousSibling() => _blink.BlinkTreeWalker.$previousSibling_Callback(this);
+  Node previousSibling() => _blink.BlinkTreeWalker.previousSibling_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28634,53 +28634,53 @@
   @DomName('UIEvent.charCode')
   @DocsEditable()
   @Unstable()
-  int get _charCode => _blink.BlinkUIEvent.$charCode_Getter(this);
+  int get _charCode => _blink.BlinkUIEvent.charCode_Getter(this);
 
   @DomName('UIEvent.detail')
   @DocsEditable()
-  int get detail => _blink.BlinkUIEvent.$detail_Getter(this);
+  int get detail => _blink.BlinkUIEvent.detail_Getter(this);
 
   @DomName('UIEvent.keyCode')
   @DocsEditable()
   @Unstable()
-  int get _keyCode => _blink.BlinkUIEvent.$keyCode_Getter(this);
+  int get _keyCode => _blink.BlinkUIEvent.keyCode_Getter(this);
 
   @DomName('UIEvent.layerX')
   @DocsEditable()
   // http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-mouseevents
   @Experimental() // nonstandard
-  int get _layerX => _blink.BlinkUIEvent.$layerX_Getter(this);
+  int get _layerX => _blink.BlinkUIEvent.layerX_Getter(this);
 
   @DomName('UIEvent.layerY')
   @DocsEditable()
   // http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-mouseevents
   @Experimental() // nonstandard
-  int get _layerY => _blink.BlinkUIEvent.$layerY_Getter(this);
+  int get _layerY => _blink.BlinkUIEvent.layerY_Getter(this);
 
   @DomName('UIEvent.pageX')
   @DocsEditable()
   // http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-mouseevents
   @Experimental() // nonstandard
-  int get _pageX => _blink.BlinkUIEvent.$pageX_Getter(this);
+  int get _pageX => _blink.BlinkUIEvent.pageX_Getter(this);
 
   @DomName('UIEvent.pageY')
   @DocsEditable()
   // http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-mouseevents
   @Experimental() // nonstandard
-  int get _pageY => _blink.BlinkUIEvent.$pageY_Getter(this);
+  int get _pageY => _blink.BlinkUIEvent.pageY_Getter(this);
 
   @DomName('UIEvent.view')
   @DocsEditable()
-  WindowBase get view => _blink.BlinkUIEvent.$view_Getter(this);
+  WindowBase get view => _blink.BlinkUIEvent.view_Getter(this);
 
   @DomName('UIEvent.which')
   @DocsEditable()
   @Unstable()
-  int get which => _blink.BlinkUIEvent.$which_Getter(this);
+  int get which => _blink.BlinkUIEvent.which_Getter(this);
 
   @DomName('UIEvent.initUIEvent')
   @DocsEditable()
-  void _initUIEvent(String type, bool canBubble, bool cancelable, Window view, int detail) => _blink.BlinkUIEvent.$initUIEvent_Callback(this, type, canBubble, cancelable, view, detail);
+  void _initUIEvent(String type, bool canBubble, bool cancelable, Window view, int detail) => _blink.BlinkUIEvent.initUIEvent_Callback_DOMString_boolean_boolean_Window_long(this, type, canBubble, cancelable, view, detail);
 
 
   @DomName('UIEvent.layerX')
@@ -28750,142 +28750,142 @@
 
   static String createObjectUrl(blob_OR_source_OR_stream) {
     if ((blob_OR_source_OR_stream is Blob || blob_OR_source_OR_stream == null)) {
-      return _blink.BlinkURL.$_createObjectURL_1_Callback(blob_OR_source_OR_stream);
-    }
-    if ((blob_OR_source_OR_stream is MediaSource || blob_OR_source_OR_stream == null)) {
-      return _blink.BlinkURL.$_createObjectURL_2_Callback(blob_OR_source_OR_stream);
+      return _blink.BlinkURL.createObjectURL_Callback_Blob(blob_OR_source_OR_stream);
     }
     if ((blob_OR_source_OR_stream is MediaStream || blob_OR_source_OR_stream == null)) {
-      return _blink.BlinkURL.$_createObjectURL_3_Callback(blob_OR_source_OR_stream);
+      return _blink.BlinkURL.createObjectURL_Callback_MediaStream(blob_OR_source_OR_stream);
+    }
+    if ((blob_OR_source_OR_stream is MediaSource || blob_OR_source_OR_stream == null)) {
+      return _blink.BlinkURL.createObjectURL_Callback_MediaSource(blob_OR_source_OR_stream);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('URL.createObjectUrlFromBlob')
   @DocsEditable()
-  static String createObjectUrlFromBlob(Blob blob) => _blink.BlinkURL.$createObjectUrlFromBlob_Callback(blob);
+  static String createObjectUrlFromBlob(Blob blob) => _blink.BlinkURL.createObjectURL_Callback_Blob(blob);
 
   @DomName('URL.createObjectUrlFromSource')
   @DocsEditable()
-  static String createObjectUrlFromSource(MediaSource source) => _blink.BlinkURL.$createObjectUrlFromSource_Callback(source);
+  static String createObjectUrlFromSource(MediaSource source) => _blink.BlinkURL.createObjectURL_Callback_MediaSource(source);
 
   @DomName('URL.createObjectUrlFromStream')
   @DocsEditable()
-  static String createObjectUrlFromStream(MediaStream stream) => _blink.BlinkURL.$createObjectUrlFromStream_Callback(stream);
+  static String createObjectUrlFromStream(MediaStream stream) => _blink.BlinkURL.createObjectURL_Callback_MediaStream(stream);
 
   @DomName('URL.revokeObjectURL')
   @DocsEditable()
-  static void revokeObjectUrl(String url) => _blink.BlinkURL.$revokeObjectURL_Callback(url);
+  static void revokeObjectUrl(String url) => _blink.BlinkURL.revokeObjectURL_Callback_DOMString(url);
 
   @DomName('URL.hash')
   @DocsEditable()
   @Experimental() // untriaged
-  String get hash => _blink.BlinkURL.$hash_Getter(this);
+  String get hash => _blink.BlinkURL.hash_Getter(this);
 
   @DomName('URL.hash')
   @DocsEditable()
   @Experimental() // untriaged
-  void set hash(String value) => _blink.BlinkURL.$hash_Setter(this, value);
+  void set hash(String value) => _blink.BlinkURL.hash_Setter_DOMString(this, value);
 
   @DomName('URL.host')
   @DocsEditable()
   @Experimental() // untriaged
-  String get host => _blink.BlinkURL.$host_Getter(this);
+  String get host => _blink.BlinkURL.host_Getter(this);
 
   @DomName('URL.host')
   @DocsEditable()
   @Experimental() // untriaged
-  void set host(String value) => _blink.BlinkURL.$host_Setter(this, value);
+  void set host(String value) => _blink.BlinkURL.host_Setter_DOMString(this, value);
 
   @DomName('URL.hostname')
   @DocsEditable()
   @Experimental() // untriaged
-  String get hostname => _blink.BlinkURL.$hostname_Getter(this);
+  String get hostname => _blink.BlinkURL.hostname_Getter(this);
 
   @DomName('URL.hostname')
   @DocsEditable()
   @Experimental() // untriaged
-  void set hostname(String value) => _blink.BlinkURL.$hostname_Setter(this, value);
+  void set hostname(String value) => _blink.BlinkURL.hostname_Setter_DOMString(this, value);
 
   @DomName('URL.href')
   @DocsEditable()
   @Experimental() // untriaged
-  String get href => _blink.BlinkURL.$href_Getter(this);
+  String get href => _blink.BlinkURL.href_Getter(this);
 
   @DomName('URL.href')
   @DocsEditable()
   @Experimental() // untriaged
-  void set href(String value) => _blink.BlinkURL.$href_Setter(this, value);
+  void set href(String value) => _blink.BlinkURL.href_Setter_DOMString(this, value);
 
   @DomName('URL.origin')
   @DocsEditable()
   @Experimental() // untriaged
-  String get origin => _blink.BlinkURL.$origin_Getter(this);
+  String get origin => _blink.BlinkURL.origin_Getter(this);
 
   @DomName('URL.password')
   @DocsEditable()
   @Experimental() // untriaged
-  String get password => _blink.BlinkURL.$password_Getter(this);
+  String get password => _blink.BlinkURL.password_Getter(this);
 
   @DomName('URL.password')
   @DocsEditable()
   @Experimental() // untriaged
-  void set password(String value) => _blink.BlinkURL.$password_Setter(this, value);
+  void set password(String value) => _blink.BlinkURL.password_Setter_DOMString(this, value);
 
   @DomName('URL.pathname')
   @DocsEditable()
   @Experimental() // untriaged
-  String get pathname => _blink.BlinkURL.$pathname_Getter(this);
+  String get pathname => _blink.BlinkURL.pathname_Getter(this);
 
   @DomName('URL.pathname')
   @DocsEditable()
   @Experimental() // untriaged
-  void set pathname(String value) => _blink.BlinkURL.$pathname_Setter(this, value);
+  void set pathname(String value) => _blink.BlinkURL.pathname_Setter_DOMString(this, value);
 
   @DomName('URL.port')
   @DocsEditable()
   @Experimental() // untriaged
-  String get port => _blink.BlinkURL.$port_Getter(this);
+  String get port => _blink.BlinkURL.port_Getter(this);
 
   @DomName('URL.port')
   @DocsEditable()
   @Experimental() // untriaged
-  void set port(String value) => _blink.BlinkURL.$port_Setter(this, value);
+  void set port(String value) => _blink.BlinkURL.port_Setter_DOMString(this, value);
 
   @DomName('URL.protocol')
   @DocsEditable()
   @Experimental() // untriaged
-  String get protocol => _blink.BlinkURL.$protocol_Getter(this);
+  String get protocol => _blink.BlinkURL.protocol_Getter(this);
 
   @DomName('URL.protocol')
   @DocsEditable()
   @Experimental() // untriaged
-  void set protocol(String value) => _blink.BlinkURL.$protocol_Setter(this, value);
+  void set protocol(String value) => _blink.BlinkURL.protocol_Setter_DOMString(this, value);
 
   @DomName('URL.search')
   @DocsEditable()
   @Experimental() // untriaged
-  String get search => _blink.BlinkURL.$search_Getter(this);
+  String get search => _blink.BlinkURL.search_Getter(this);
 
   @DomName('URL.search')
   @DocsEditable()
   @Experimental() // untriaged
-  void set search(String value) => _blink.BlinkURL.$search_Setter(this, value);
+  void set search(String value) => _blink.BlinkURL.search_Setter_DOMString(this, value);
 
   @DomName('URL.username')
   @DocsEditable()
   @Experimental() // untriaged
-  String get username => _blink.BlinkURL.$username_Getter(this);
+  String get username => _blink.BlinkURL.username_Getter(this);
 
   @DomName('URL.username')
   @DocsEditable()
   @Experimental() // untriaged
-  void set username(String value) => _blink.BlinkURL.$username_Setter(this, value);
+  void set username(String value) => _blink.BlinkURL.username_Setter_DOMString(this, value);
 
   @DomName('URL.toString')
   @DocsEditable()
   @Experimental() // untriaged
-  String toString() => _blink.BlinkURL.$toString_Callback(this);
+  String toString() => _blink.BlinkURL.toString_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28905,112 +28905,112 @@
   @DomName('URLUtils.hash')
   @DocsEditable()
   @Experimental() // untriaged
-  String get hash => _blink.BlinkURLUtils.$hash_Getter(this);
+  String get hash => _blink.BlinkURLUtils.hash_Getter(this);
 
   @DomName('URLUtils.hash')
   @DocsEditable()
   @Experimental() // untriaged
-  void set hash(String value) => _blink.BlinkURLUtils.$hash_Setter(this, value);
+  void set hash(String value) => _blink.BlinkURLUtils.hash_Setter_DOMString(this, value);
 
   @DomName('URLUtils.host')
   @DocsEditable()
   @Experimental() // untriaged
-  String get host => _blink.BlinkURLUtils.$host_Getter(this);
+  String get host => _blink.BlinkURLUtils.host_Getter(this);
 
   @DomName('URLUtils.host')
   @DocsEditable()
   @Experimental() // untriaged
-  void set host(String value) => _blink.BlinkURLUtils.$host_Setter(this, value);
+  void set host(String value) => _blink.BlinkURLUtils.host_Setter_DOMString(this, value);
 
   @DomName('URLUtils.hostname')
   @DocsEditable()
   @Experimental() // untriaged
-  String get hostname => _blink.BlinkURLUtils.$hostname_Getter(this);
+  String get hostname => _blink.BlinkURLUtils.hostname_Getter(this);
 
   @DomName('URLUtils.hostname')
   @DocsEditable()
   @Experimental() // untriaged
-  void set hostname(String value) => _blink.BlinkURLUtils.$hostname_Setter(this, value);
+  void set hostname(String value) => _blink.BlinkURLUtils.hostname_Setter_DOMString(this, value);
 
   @DomName('URLUtils.href')
   @DocsEditable()
   @Experimental() // untriaged
-  String get href => _blink.BlinkURLUtils.$href_Getter(this);
+  String get href => _blink.BlinkURLUtils.href_Getter(this);
 
   @DomName('URLUtils.href')
   @DocsEditable()
   @Experimental() // untriaged
-  void set href(String value) => _blink.BlinkURLUtils.$href_Setter(this, value);
+  void set href(String value) => _blink.BlinkURLUtils.href_Setter_DOMString(this, value);
 
   @DomName('URLUtils.origin')
   @DocsEditable()
   @Experimental() // untriaged
-  String get origin => _blink.BlinkURLUtils.$origin_Getter(this);
+  String get origin => _blink.BlinkURLUtils.origin_Getter(this);
 
   @DomName('URLUtils.password')
   @DocsEditable()
   @Experimental() // untriaged
-  String get password => _blink.BlinkURLUtils.$password_Getter(this);
+  String get password => _blink.BlinkURLUtils.password_Getter(this);
 
   @DomName('URLUtils.password')
   @DocsEditable()
   @Experimental() // untriaged
-  void set password(String value) => _blink.BlinkURLUtils.$password_Setter(this, value);
+  void set password(String value) => _blink.BlinkURLUtils.password_Setter_DOMString(this, value);
 
   @DomName('URLUtils.pathname')
   @DocsEditable()
   @Experimental() // untriaged
-  String get pathname => _blink.BlinkURLUtils.$pathname_Getter(this);
+  String get pathname => _blink.BlinkURLUtils.pathname_Getter(this);
 
   @DomName('URLUtils.pathname')
   @DocsEditable()
   @Experimental() // untriaged
-  void set pathname(String value) => _blink.BlinkURLUtils.$pathname_Setter(this, value);
+  void set pathname(String value) => _blink.BlinkURLUtils.pathname_Setter_DOMString(this, value);
 
   @DomName('URLUtils.port')
   @DocsEditable()
   @Experimental() // untriaged
-  String get port => _blink.BlinkURLUtils.$port_Getter(this);
+  String get port => _blink.BlinkURLUtils.port_Getter(this);
 
   @DomName('URLUtils.port')
   @DocsEditable()
   @Experimental() // untriaged
-  void set port(String value) => _blink.BlinkURLUtils.$port_Setter(this, value);
+  void set port(String value) => _blink.BlinkURLUtils.port_Setter_DOMString(this, value);
 
   @DomName('URLUtils.protocol')
   @DocsEditable()
   @Experimental() // untriaged
-  String get protocol => _blink.BlinkURLUtils.$protocol_Getter(this);
+  String get protocol => _blink.BlinkURLUtils.protocol_Getter(this);
 
   @DomName('URLUtils.protocol')
   @DocsEditable()
   @Experimental() // untriaged
-  void set protocol(String value) => _blink.BlinkURLUtils.$protocol_Setter(this, value);
+  void set protocol(String value) => _blink.BlinkURLUtils.protocol_Setter_DOMString(this, value);
 
   @DomName('URLUtils.search')
   @DocsEditable()
   @Experimental() // untriaged
-  String get search => _blink.BlinkURLUtils.$search_Getter(this);
+  String get search => _blink.BlinkURLUtils.search_Getter(this);
 
   @DomName('URLUtils.search')
   @DocsEditable()
   @Experimental() // untriaged
-  void set search(String value) => _blink.BlinkURLUtils.$search_Setter(this, value);
+  void set search(String value) => _blink.BlinkURLUtils.search_Setter_DOMString(this, value);
 
   @DomName('URLUtils.username')
   @DocsEditable()
   @Experimental() // untriaged
-  String get username => _blink.BlinkURLUtils.$username_Getter(this);
+  String get username => _blink.BlinkURLUtils.username_Getter(this);
 
   @DomName('URLUtils.username')
   @DocsEditable()
   @Experimental() // untriaged
-  void set username(String value) => _blink.BlinkURLUtils.$username_Setter(this, value);
+  void set username(String value) => _blink.BlinkURLUtils.username_Setter_DOMString(this, value);
 
   @DomName('URLUtils.toString')
   @DocsEditable()
   @Experimental() // untriaged
-  String toString() => _blink.BlinkURLUtils.$toString_Callback(this);
+  String toString() => _blink.BlinkURLUtils.toString_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29030,47 +29030,47 @@
   @DomName('URLUtilsReadOnly.hash')
   @DocsEditable()
   @Experimental() // untriaged
-  String get hash => _blink.BlinkURLUtilsReadOnly.$hash_Getter(this);
+  String get hash => _blink.BlinkURLUtilsReadOnly.hash_Getter(this);
 
   @DomName('URLUtilsReadOnly.host')
   @DocsEditable()
   @Experimental() // untriaged
-  String get host => _blink.BlinkURLUtilsReadOnly.$host_Getter(this);
+  String get host => _blink.BlinkURLUtilsReadOnly.host_Getter(this);
 
   @DomName('URLUtilsReadOnly.hostname')
   @DocsEditable()
   @Experimental() // untriaged
-  String get hostname => _blink.BlinkURLUtilsReadOnly.$hostname_Getter(this);
+  String get hostname => _blink.BlinkURLUtilsReadOnly.hostname_Getter(this);
 
   @DomName('URLUtilsReadOnly.href')
   @DocsEditable()
   @Experimental() // untriaged
-  String get href => _blink.BlinkURLUtilsReadOnly.$href_Getter(this);
+  String get href => _blink.BlinkURLUtilsReadOnly.href_Getter(this);
 
   @DomName('URLUtilsReadOnly.pathname')
   @DocsEditable()
   @Experimental() // untriaged
-  String get pathname => _blink.BlinkURLUtilsReadOnly.$pathname_Getter(this);
+  String get pathname => _blink.BlinkURLUtilsReadOnly.pathname_Getter(this);
 
   @DomName('URLUtilsReadOnly.port')
   @DocsEditable()
   @Experimental() // untriaged
-  String get port => _blink.BlinkURLUtilsReadOnly.$port_Getter(this);
+  String get port => _blink.BlinkURLUtilsReadOnly.port_Getter(this);
 
   @DomName('URLUtilsReadOnly.protocol')
   @DocsEditable()
   @Experimental() // untriaged
-  String get protocol => _blink.BlinkURLUtilsReadOnly.$protocol_Getter(this);
+  String get protocol => _blink.BlinkURLUtilsReadOnly.protocol_Getter(this);
 
   @DomName('URLUtilsReadOnly.search')
   @DocsEditable()
   @Experimental() // untriaged
-  String get search => _blink.BlinkURLUtilsReadOnly.$search_Getter(this);
+  String get search => _blink.BlinkURLUtilsReadOnly.search_Getter(this);
 
   @DomName('URLUtilsReadOnly.toString')
   @DocsEditable()
   @Experimental() // untriaged
-  String toString() => _blink.BlinkURLUtilsReadOnly.$toString_Callback(this);
+  String toString() => _blink.BlinkURLUtilsReadOnly.toString_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29088,43 +29088,43 @@
 
   @DomName('ValidityState.badInput')
   @DocsEditable()
-  bool get badInput => _blink.BlinkValidityState.$badInput_Getter(this);
+  bool get badInput => _blink.BlinkValidityState.badInput_Getter(this);
 
   @DomName('ValidityState.customError')
   @DocsEditable()
-  bool get customError => _blink.BlinkValidityState.$customError_Getter(this);
+  bool get customError => _blink.BlinkValidityState.customError_Getter(this);
 
   @DomName('ValidityState.patternMismatch')
   @DocsEditable()
-  bool get patternMismatch => _blink.BlinkValidityState.$patternMismatch_Getter(this);
+  bool get patternMismatch => _blink.BlinkValidityState.patternMismatch_Getter(this);
 
   @DomName('ValidityState.rangeOverflow')
   @DocsEditable()
-  bool get rangeOverflow => _blink.BlinkValidityState.$rangeOverflow_Getter(this);
+  bool get rangeOverflow => _blink.BlinkValidityState.rangeOverflow_Getter(this);
 
   @DomName('ValidityState.rangeUnderflow')
   @DocsEditable()
-  bool get rangeUnderflow => _blink.BlinkValidityState.$rangeUnderflow_Getter(this);
+  bool get rangeUnderflow => _blink.BlinkValidityState.rangeUnderflow_Getter(this);
 
   @DomName('ValidityState.stepMismatch')
   @DocsEditable()
-  bool get stepMismatch => _blink.BlinkValidityState.$stepMismatch_Getter(this);
+  bool get stepMismatch => _blink.BlinkValidityState.stepMismatch_Getter(this);
 
   @DomName('ValidityState.tooLong')
   @DocsEditable()
-  bool get tooLong => _blink.BlinkValidityState.$tooLong_Getter(this);
+  bool get tooLong => _blink.BlinkValidityState.tooLong_Getter(this);
 
   @DomName('ValidityState.typeMismatch')
   @DocsEditable()
-  bool get typeMismatch => _blink.BlinkValidityState.$typeMismatch_Getter(this);
+  bool get typeMismatch => _blink.BlinkValidityState.typeMismatch_Getter(this);
 
   @DomName('ValidityState.valid')
   @DocsEditable()
-  bool get valid => _blink.BlinkValidityState.$valid_Getter(this);
+  bool get valid => _blink.BlinkValidityState.valid_Getter(this);
 
   @DomName('ValidityState.valueMissing')
   @DocsEditable()
-  bool get valueMissing => _blink.BlinkValidityState.$valueMissing_Getter(this);
+  bool get valueMissing => _blink.BlinkValidityState.valueMissing_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29149,54 +29149,54 @@
 
   @DomName('HTMLVideoElement.height')
   @DocsEditable()
-  int get height => _blink.BlinkHTMLVideoElement.$height_Getter(this);
+  int get height => _blink.BlinkHTMLVideoElement.height_Getter(this);
 
   @DomName('HTMLVideoElement.height')
   @DocsEditable()
-  void set height(int value) => _blink.BlinkHTMLVideoElement.$height_Setter(this, value);
+  void set height(int value) => _blink.BlinkHTMLVideoElement.height_Setter_ul(this, value);
 
   @DomName('HTMLVideoElement.poster')
   @DocsEditable()
-  String get poster => _blink.BlinkHTMLVideoElement.$poster_Getter(this);
+  String get poster => _blink.BlinkHTMLVideoElement.poster_Getter(this);
 
   @DomName('HTMLVideoElement.poster')
   @DocsEditable()
-  void set poster(String value) => _blink.BlinkHTMLVideoElement.$poster_Setter(this, value);
+  void set poster(String value) => _blink.BlinkHTMLVideoElement.poster_Setter_DOMString(this, value);
 
   @DomName('HTMLVideoElement.videoHeight')
   @DocsEditable()
-  int get videoHeight => _blink.BlinkHTMLVideoElement.$videoHeight_Getter(this);
+  int get videoHeight => _blink.BlinkHTMLVideoElement.videoHeight_Getter(this);
 
   @DomName('HTMLVideoElement.videoWidth')
   @DocsEditable()
-  int get videoWidth => _blink.BlinkHTMLVideoElement.$videoWidth_Getter(this);
+  int get videoWidth => _blink.BlinkHTMLVideoElement.videoWidth_Getter(this);
 
   @DomName('HTMLVideoElement.webkitDecodedFrameCount')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  int get decodedFrameCount => _blink.BlinkHTMLVideoElement.$webkitDecodedFrameCount_Getter(this);
+  int get decodedFrameCount => _blink.BlinkHTMLVideoElement.webkitDecodedFrameCount_Getter(this);
 
   @DomName('HTMLVideoElement.webkitDroppedFrameCount')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  int get droppedFrameCount => _blink.BlinkHTMLVideoElement.$webkitDroppedFrameCount_Getter(this);
+  int get droppedFrameCount => _blink.BlinkHTMLVideoElement.webkitDroppedFrameCount_Getter(this);
 
   @DomName('HTMLVideoElement.width')
   @DocsEditable()
-  int get width => _blink.BlinkHTMLVideoElement.$width_Getter(this);
+  int get width => _blink.BlinkHTMLVideoElement.width_Getter(this);
 
   @DomName('HTMLVideoElement.width')
   @DocsEditable()
-  void set width(int value) => _blink.BlinkHTMLVideoElement.$width_Setter(this, value);
+  void set width(int value) => _blink.BlinkHTMLVideoElement.width_Setter_ul(this, value);
 
   @DomName('HTMLVideoElement.getVideoPlaybackQuality')
   @DocsEditable()
   @Experimental() // untriaged
-  VideoPlaybackQuality getVideoPlaybackQuality() => _blink.BlinkHTMLVideoElement.$getVideoPlaybackQuality_Callback(this);
+  VideoPlaybackQuality getVideoPlaybackQuality() => _blink.BlinkHTMLVideoElement.getVideoPlaybackQuality_Callback(this);
 
   @DomName('HTMLVideoElement.webkitEnterFullscreen')
   @DocsEditable()
@@ -29204,7 +29204,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
-  void enterFullscreen() => _blink.BlinkHTMLVideoElement.$webkitEnterFullscreen_Callback(this);
+  void enterFullscreen() => _blink.BlinkHTMLVideoElement.webkitEnterFullscreen_Callback(this);
 
   @DomName('HTMLVideoElement.webkitExitFullscreen')
   @DocsEditable()
@@ -29212,7 +29212,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-document-exitfullscreen
-  void exitFullscreen() => _blink.BlinkHTMLVideoElement.$webkitExitFullscreen_Callback(this);
+  void exitFullscreen() => _blink.BlinkHTMLVideoElement.webkitExitFullscreen_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29232,22 +29232,22 @@
   @DomName('VideoPlaybackQuality.corruptedVideoFrames')
   @DocsEditable()
   @Experimental() // untriaged
-  int get corruptedVideoFrames => _blink.BlinkVideoPlaybackQuality.$corruptedVideoFrames_Getter(this);
+  int get corruptedVideoFrames => _blink.BlinkVideoPlaybackQuality.corruptedVideoFrames_Getter(this);
 
   @DomName('VideoPlaybackQuality.creationTime')
   @DocsEditable()
   @Experimental() // untriaged
-  double get creationTime => _blink.BlinkVideoPlaybackQuality.$creationTime_Getter(this);
+  double get creationTime => _blink.BlinkVideoPlaybackQuality.creationTime_Getter(this);
 
   @DomName('VideoPlaybackQuality.droppedVideoFrames')
   @DocsEditable()
   @Experimental() // untriaged
-  int get droppedVideoFrames => _blink.BlinkVideoPlaybackQuality.$droppedVideoFrames_Getter(this);
+  int get droppedVideoFrames => _blink.BlinkVideoPlaybackQuality.droppedVideoFrames_Getter(this);
 
   @DomName('VideoPlaybackQuality.totalVideoFrames')
   @DocsEditable()
   @Experimental() // untriaged
-  int get totalVideoFrames => _blink.BlinkVideoPlaybackQuality.$totalVideoFrames_Getter(this);
+  int get totalVideoFrames => _blink.BlinkVideoPlaybackQuality.totalVideoFrames_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29278,93 +29278,93 @@
   @DomName('VTTCue.VTTCue')
   @DocsEditable()
   factory VttCue(num startTime, num endTime, String text) {
-    return _blink.BlinkVTTCue.$_create_1constructorCallback(startTime, endTime, text);
+    return _blink.BlinkVTTCue.constructorCallback_double_double_DOMString(startTime, endTime, text);
   }
 
   @DomName('VTTCue.align')
   @DocsEditable()
   @Experimental() // untriaged
-  String get align => _blink.BlinkVTTCue.$align_Getter(this);
+  String get align => _blink.BlinkVTTCue.align_Getter(this);
 
   @DomName('VTTCue.align')
   @DocsEditable()
   @Experimental() // untriaged
-  void set align(String value) => _blink.BlinkVTTCue.$align_Setter(this, value);
+  void set align(String value) => _blink.BlinkVTTCue.align_Setter_DOMString(this, value);
 
   @DomName('VTTCue.line')
   @DocsEditable()
   @Experimental() // untriaged
-  int get line => _blink.BlinkVTTCue.$line_Getter(this);
+  int get line => _blink.BlinkVTTCue.line_Getter(this);
 
   @DomName('VTTCue.line')
   @DocsEditable()
   @Experimental() // untriaged
-  void set line(int value) => _blink.BlinkVTTCue.$line_Setter(this, value);
+  void set line(int value) => _blink.BlinkVTTCue.line_Setter_long(this, value);
 
   @DomName('VTTCue.position')
   @DocsEditable()
   @Experimental() // untriaged
-  int get position => _blink.BlinkVTTCue.$position_Getter(this);
+  int get position => _blink.BlinkVTTCue.position_Getter(this);
 
   @DomName('VTTCue.position')
   @DocsEditable()
   @Experimental() // untriaged
-  void set position(int value) => _blink.BlinkVTTCue.$position_Setter(this, value);
+  void set position(int value) => _blink.BlinkVTTCue.position_Setter_long(this, value);
 
   @DomName('VTTCue.regionId')
   @DocsEditable()
   @Experimental() // untriaged
-  String get regionId => _blink.BlinkVTTCue.$regionId_Getter(this);
+  String get regionId => _blink.BlinkVTTCue.regionId_Getter(this);
 
   @DomName('VTTCue.regionId')
   @DocsEditable()
   @Experimental() // untriaged
-  void set regionId(String value) => _blink.BlinkVTTCue.$regionId_Setter(this, value);
+  void set regionId(String value) => _blink.BlinkVTTCue.regionId_Setter_DOMString(this, value);
 
   @DomName('VTTCue.size')
   @DocsEditable()
   @Experimental() // untriaged
-  int get size => _blink.BlinkVTTCue.$size_Getter(this);
+  int get size => _blink.BlinkVTTCue.size_Getter(this);
 
   @DomName('VTTCue.size')
   @DocsEditable()
   @Experimental() // untriaged
-  void set size(int value) => _blink.BlinkVTTCue.$size_Setter(this, value);
+  void set size(int value) => _blink.BlinkVTTCue.size_Setter_long(this, value);
 
   @DomName('VTTCue.snapToLines')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get snapToLines => _blink.BlinkVTTCue.$snapToLines_Getter(this);
+  bool get snapToLines => _blink.BlinkVTTCue.snapToLines_Getter(this);
 
   @DomName('VTTCue.snapToLines')
   @DocsEditable()
   @Experimental() // untriaged
-  void set snapToLines(bool value) => _blink.BlinkVTTCue.$snapToLines_Setter(this, value);
+  void set snapToLines(bool value) => _blink.BlinkVTTCue.snapToLines_Setter_boolean(this, value);
 
   @DomName('VTTCue.text')
   @DocsEditable()
   @Experimental() // untriaged
-  String get text => _blink.BlinkVTTCue.$text_Getter(this);
+  String get text => _blink.BlinkVTTCue.text_Getter(this);
 
   @DomName('VTTCue.text')
   @DocsEditable()
   @Experimental() // untriaged
-  void set text(String value) => _blink.BlinkVTTCue.$text_Setter(this, value);
+  void set text(String value) => _blink.BlinkVTTCue.text_Setter_DOMString(this, value);
 
   @DomName('VTTCue.vertical')
   @DocsEditable()
   @Experimental() // untriaged
-  String get vertical => _blink.BlinkVTTCue.$vertical_Getter(this);
+  String get vertical => _blink.BlinkVTTCue.vertical_Getter(this);
 
   @DomName('VTTCue.vertical')
   @DocsEditable()
   @Experimental() // untriaged
-  void set vertical(String value) => _blink.BlinkVTTCue.$vertical_Setter(this, value);
+  void set vertical(String value) => _blink.BlinkVTTCue.vertical_Setter_DOMString(this, value);
 
   @DomName('VTTCue.getCueAsHTML')
   @DocsEditable()
   @Experimental() // untriaged
-  DocumentFragment getCueAsHtml() => _blink.BlinkVTTCue.$getCueAsHTML_Callback(this);
+  DocumentFragment getCueAsHtml() => _blink.BlinkVTTCue.getCueAsHTML_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29384,93 +29384,93 @@
   @DomName('VTTRegion.VTTRegion')
   @DocsEditable()
   factory VttRegion() {
-    return _blink.BlinkVTTRegion.$_create_1constructorCallback();
+    return _blink.BlinkVTTRegion.constructorCallback();
   }
 
   @DomName('VTTRegion.height')
   @DocsEditable()
   @Experimental() // untriaged
-  int get height => _blink.BlinkVTTRegion.$height_Getter(this);
+  int get height => _blink.BlinkVTTRegion.height_Getter(this);
 
   @DomName('VTTRegion.height')
   @DocsEditable()
   @Experimental() // untriaged
-  void set height(int value) => _blink.BlinkVTTRegion.$height_Setter(this, value);
+  void set height(int value) => _blink.BlinkVTTRegion.height_Setter_long(this, value);
 
   @DomName('VTTRegion.id')
   @DocsEditable()
   @Experimental() // untriaged
-  String get id => _blink.BlinkVTTRegion.$id_Getter(this);
+  String get id => _blink.BlinkVTTRegion.id_Getter(this);
 
   @DomName('VTTRegion.id')
   @DocsEditable()
   @Experimental() // untriaged
-  void set id(String value) => _blink.BlinkVTTRegion.$id_Setter(this, value);
+  void set id(String value) => _blink.BlinkVTTRegion.id_Setter_DOMString(this, value);
 
   @DomName('VTTRegion.regionAnchorX')
   @DocsEditable()
   @Experimental() // untriaged
-  num get regionAnchorX => _blink.BlinkVTTRegion.$regionAnchorX_Getter(this);
+  num get regionAnchorX => _blink.BlinkVTTRegion.regionAnchorX_Getter(this);
 
   @DomName('VTTRegion.regionAnchorX')
   @DocsEditable()
   @Experimental() // untriaged
-  void set regionAnchorX(num value) => _blink.BlinkVTTRegion.$regionAnchorX_Setter(this, value);
+  void set regionAnchorX(num value) => _blink.BlinkVTTRegion.regionAnchorX_Setter_double(this, value);
 
   @DomName('VTTRegion.regionAnchorY')
   @DocsEditable()
   @Experimental() // untriaged
-  num get regionAnchorY => _blink.BlinkVTTRegion.$regionAnchorY_Getter(this);
+  num get regionAnchorY => _blink.BlinkVTTRegion.regionAnchorY_Getter(this);
 
   @DomName('VTTRegion.regionAnchorY')
   @DocsEditable()
   @Experimental() // untriaged
-  void set regionAnchorY(num value) => _blink.BlinkVTTRegion.$regionAnchorY_Setter(this, value);
+  void set regionAnchorY(num value) => _blink.BlinkVTTRegion.regionAnchorY_Setter_double(this, value);
 
   @DomName('VTTRegion.scroll')
   @DocsEditable()
   @Experimental() // untriaged
-  String get scroll => _blink.BlinkVTTRegion.$scroll_Getter(this);
+  String get scroll => _blink.BlinkVTTRegion.scroll_Getter(this);
 
   @DomName('VTTRegion.scroll')
   @DocsEditable()
   @Experimental() // untriaged
-  void set scroll(String value) => _blink.BlinkVTTRegion.$scroll_Setter(this, value);
+  void set scroll(String value) => _blink.BlinkVTTRegion.scroll_Setter_DOMString(this, value);
 
   @DomName('VTTRegion.track')
   @DocsEditable()
   @Experimental() // untriaged
-  TextTrack get track => _blink.BlinkVTTRegion.$track_Getter(this);
+  TextTrack get track => _blink.BlinkVTTRegion.track_Getter(this);
 
   @DomName('VTTRegion.viewportAnchorX')
   @DocsEditable()
   @Experimental() // untriaged
-  num get viewportAnchorX => _blink.BlinkVTTRegion.$viewportAnchorX_Getter(this);
+  num get viewportAnchorX => _blink.BlinkVTTRegion.viewportAnchorX_Getter(this);
 
   @DomName('VTTRegion.viewportAnchorX')
   @DocsEditable()
   @Experimental() // untriaged
-  void set viewportAnchorX(num value) => _blink.BlinkVTTRegion.$viewportAnchorX_Setter(this, value);
+  void set viewportAnchorX(num value) => _blink.BlinkVTTRegion.viewportAnchorX_Setter_double(this, value);
 
   @DomName('VTTRegion.viewportAnchorY')
   @DocsEditable()
   @Experimental() // untriaged
-  num get viewportAnchorY => _blink.BlinkVTTRegion.$viewportAnchorY_Getter(this);
+  num get viewportAnchorY => _blink.BlinkVTTRegion.viewportAnchorY_Getter(this);
 
   @DomName('VTTRegion.viewportAnchorY')
   @DocsEditable()
   @Experimental() // untriaged
-  void set viewportAnchorY(num value) => _blink.BlinkVTTRegion.$viewportAnchorY_Setter(this, value);
+  void set viewportAnchorY(num value) => _blink.BlinkVTTRegion.viewportAnchorY_Setter_double(this, value);
 
   @DomName('VTTRegion.width')
   @DocsEditable()
   @Experimental() // untriaged
-  num get width => _blink.BlinkVTTRegion.$width_Getter(this);
+  num get width => _blink.BlinkVTTRegion.width_Getter(this);
 
   @DomName('VTTRegion.width')
   @DocsEditable()
   @Experimental() // untriaged
-  void set width(num value) => _blink.BlinkVTTRegion.$width_Setter(this, value);
+  void set width(num value) => _blink.BlinkVTTRegion.width_Setter_double(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29490,17 +29490,17 @@
   @DomName('VTTRegionList.length')
   @DocsEditable()
   @Experimental() // untriaged
-  int get length => _blink.BlinkVTTRegionList.$length_Getter(this);
+  int get length => _blink.BlinkVTTRegionList.length_Getter(this);
 
   @DomName('VTTRegionList.getRegionById')
   @DocsEditable()
   @Experimental() // untriaged
-  VttRegion getRegionById(String id) => _blink.BlinkVTTRegionList.$getRegionById_Callback(this, id);
+  VttRegion getRegionById(String id) => _blink.BlinkVTTRegionList.getRegionById_Callback_DOMString(this, id);
 
   @DomName('VTTRegionList.item')
   @DocsEditable()
   @Experimental() // untriaged
-  VttRegion item(int index) => _blink.BlinkVTTRegionList.$item_Callback(this, index);
+  VttRegion item(int index) => _blink.BlinkVTTRegionList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29599,13 +29599,13 @@
   @DocsEditable()
   factory WebSocket(String url, [protocol_OR_protocols]) {
     if ((url is String || url == null) && protocol_OR_protocols == null) {
-      return _blink.BlinkWebSocket.$_create_1constructorCallback(url);
+      return _blink.BlinkWebSocket.constructorCallback_DOMString(url);
     }
     if ((protocol_OR_protocols is List<String> || protocol_OR_protocols == null) && (url is String || url == null)) {
-      return _blink.BlinkWebSocket.$_create_2constructorCallback(url, protocol_OR_protocols);
+      return _blink.BlinkWebSocket.constructorCallback_DOMString_SEQ_DOMString_SEQ(url, protocol_OR_protocols);
     }
     if ((protocol_OR_protocols is String || protocol_OR_protocols == null) && (url is String || url == null)) {
-      return _blink.BlinkWebSocket.$_create_3constructorCallback(url, protocol_OR_protocols);
+      return _blink.BlinkWebSocket.constructorCallback_DOMString_DOMString(url, protocol_OR_protocols);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -29631,60 +29631,60 @@
 
   @DomName('WebSocket.binaryType')
   @DocsEditable()
-  String get binaryType => _blink.BlinkWebSocket.$binaryType_Getter(this);
+  String get binaryType => _blink.BlinkWebSocket.binaryType_Getter(this);
 
   @DomName('WebSocket.binaryType')
   @DocsEditable()
-  void set binaryType(String value) => _blink.BlinkWebSocket.$binaryType_Setter(this, value);
+  void set binaryType(String value) => _blink.BlinkWebSocket.binaryType_Setter_DOMString(this, value);
 
   @DomName('WebSocket.bufferedAmount')
   @DocsEditable()
-  int get bufferedAmount => _blink.BlinkWebSocket.$bufferedAmount_Getter(this);
+  int get bufferedAmount => _blink.BlinkWebSocket.bufferedAmount_Getter(this);
 
   @DomName('WebSocket.extensions')
   @DocsEditable()
-  String get extensions => _blink.BlinkWebSocket.$extensions_Getter(this);
+  String get extensions => _blink.BlinkWebSocket.extensions_Getter(this);
 
   @DomName('WebSocket.protocol')
   @DocsEditable()
-  String get protocol => _blink.BlinkWebSocket.$protocol_Getter(this);
+  String get protocol => _blink.BlinkWebSocket.protocol_Getter(this);
 
   @DomName('WebSocket.readyState')
   @DocsEditable()
-  int get readyState => _blink.BlinkWebSocket.$readyState_Getter(this);
+  int get readyState => _blink.BlinkWebSocket.readyState_Getter(this);
 
   @DomName('WebSocket.url')
   @DocsEditable()
-  String get url => _blink.BlinkWebSocket.$url_Getter(this);
+  String get url => _blink.BlinkWebSocket.url_Getter(this);
 
   void close([int code, String reason]) {
     if (reason != null) {
-      _blink.BlinkWebSocket.$_close_1_Callback(this, code, reason);
+      _blink.BlinkWebSocket.close_Callback_us_DOMString(this, code, reason);
       return;
     }
     if (code != null) {
-      _blink.BlinkWebSocket.$_close_2_Callback(this, code);
+      _blink.BlinkWebSocket.close_Callback_us(this, code);
       return;
     }
-    _blink.BlinkWebSocket.$_close_3_Callback(this);
+    _blink.BlinkWebSocket.close_Callback(this);
     return;
   }
 
   void send(data) {
     if ((data is TypedData || data == null)) {
-      _blink.BlinkWebSocket.$_send_1_Callback(this, data);
+      _blink.BlinkWebSocket.send_Callback_ArrayBufferView(this, data);
       return;
     }
     if ((data is ByteBuffer || data == null)) {
-      _blink.BlinkWebSocket.$_send_2_Callback(this, data);
+      _blink.BlinkWebSocket.send_Callback_ArrayBuffer(this, data);
       return;
     }
     if ((data is Blob || data == null)) {
-      _blink.BlinkWebSocket.$_send_3_Callback(this, data);
+      _blink.BlinkWebSocket.send_Callback_Blob(this, data);
       return;
     }
     if ((data is String || data == null)) {
-      _blink.BlinkWebSocket.$_send_4_Callback(this, data);
+      _blink.BlinkWebSocket.send_Callback_DOMString(this, data);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -29692,19 +29692,19 @@
 
   @DomName('WebSocket.sendBlob')
   @DocsEditable()
-  void sendBlob(Blob data) => _blink.BlinkWebSocket.$sendBlob_Callback(this, data);
+  void sendBlob(Blob data) => _blink.BlinkWebSocket.send_Callback_Blob(this, data);
 
   @DomName('WebSocket.sendByteBuffer')
   @DocsEditable()
-  void sendByteBuffer(ByteBuffer data) => _blink.BlinkWebSocket.$sendByteBuffer_Callback(this, data);
+  void sendByteBuffer(ByteBuffer data) => _blink.BlinkWebSocket.send_Callback_ArrayBuffer(this, data);
 
   @DomName('WebSocket.sendString')
   @DocsEditable()
-  void sendString(String data) => _blink.BlinkWebSocket.$sendString_Callback(this, data);
+  void sendString(String data) => _blink.BlinkWebSocket.send_Callback_DOMString(this, data);
 
   @DomName('WebSocket.sendTypedData')
   @DocsEditable()
-  void sendTypedData(TypedData data) => _blink.BlinkWebSocket.$sendTypedData_Callback(this, data);
+  void sendTypedData(TypedData data) => _blink.BlinkWebSocket.send_Callback_ArrayBufferView(this, data);
 
   /// Stream of `close` events handled by this [WebSocket].
   @DomName('WebSocket.onclose')
@@ -29783,44 +29783,44 @@
 
   @DomName('WheelEvent.deltaMode')
   @DocsEditable()
-  int get deltaMode => _blink.BlinkWheelEvent.$deltaMode_Getter(this);
+  int get deltaMode => _blink.BlinkWheelEvent.deltaMode_Getter(this);
 
   @DomName('WheelEvent.deltaX')
   @DocsEditable()
   @Experimental() // untriaged
-  double get _deltaX => _blink.BlinkWheelEvent.$deltaX_Getter(this);
+  double get _deltaX => _blink.BlinkWheelEvent.deltaX_Getter(this);
 
   @DomName('WheelEvent.deltaY')
   @DocsEditable()
   @Experimental() // untriaged
-  double get _deltaY => _blink.BlinkWheelEvent.$deltaY_Getter(this);
+  double get _deltaY => _blink.BlinkWheelEvent.deltaY_Getter(this);
 
   @DomName('WheelEvent.deltaZ')
   @DocsEditable()
   @Experimental() // untriaged
-  double get deltaZ => _blink.BlinkWheelEvent.$deltaZ_Getter(this);
+  double get deltaZ => _blink.BlinkWheelEvent.deltaZ_Getter(this);
 
   @DomName('WheelEvent.webkitDirectionInvertedFromDevice')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  bool get directionInvertedFromDevice => _blink.BlinkWheelEvent.$webkitDirectionInvertedFromDevice_Getter(this);
+  bool get directionInvertedFromDevice => _blink.BlinkWheelEvent.webkitDirectionInvertedFromDevice_Getter(this);
 
   @DomName('WheelEvent.wheelDeltaX')
   @DocsEditable()
   @Experimental() // non-standard
-  int get wheelDeltaX => _blink.BlinkWheelEvent.$wheelDeltaX_Getter(this);
+  int get wheelDeltaX => _blink.BlinkWheelEvent.wheelDeltaX_Getter(this);
 
   @DomName('WheelEvent.wheelDeltaY')
   @DocsEditable()
   @Experimental() // non-standard
-  int get wheelDeltaY => _blink.BlinkWheelEvent.$wheelDeltaY_Getter(this);
+  int get wheelDeltaY => _blink.BlinkWheelEvent.wheelDeltaY_Getter(this);
 
   @DomName('WheelEvent.initWebKitWheelEvent')
   @DocsEditable()
   @Experimental()
-  void _initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, Window view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) => _blink.BlinkWheelEvent.$initWebKitWheelEvent_Callback(this, wheelDeltaX, wheelDeltaY, view, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey);
+  void _initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, Window view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) => _blink.BlinkWheelEvent.initWebKitWheelEvent_Callback_long_long_Window_long_long_long_long_boolean_boolean_boolean_boolean(this, wheelDeltaX, wheelDeltaY, view, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey);
 
 
   /**
@@ -30194,7 +30194,7 @@
    */
   @DomName('Window.CSS')
   @DocsEditable()
-  Css get css => _blink.BlinkWindow.$CSS_Getter(this);
+  Css get css => _blink.BlinkWindow.CSS_Getter(this);
 
   /**
    * The application cache for this window.
@@ -30209,15 +30209,15 @@
    */
   @DomName('Window.applicationCache')
   @DocsEditable()
-  ApplicationCache get applicationCache => _blink.BlinkWindow.$applicationCache_Getter(this);
+  ApplicationCache get applicationCache => _blink.BlinkWindow.applicationCache_Getter(this);
 
   @DomName('Window.closed')
   @DocsEditable()
-  bool get closed => _blink.BlinkWindow.$closed_Getter(this);
+  bool get closed => _blink.BlinkWindow.closed_Getter(this);
 
   @DomName('Window.console')
   @DocsEditable()
-  Console get console => _blink.BlinkWindow.$console_Getter(this);
+  Console get console => _blink.BlinkWindow.console_Getter(this);
 
   /**
    * Entrypoint for the browser's cryptographic functions.
@@ -30230,31 +30230,31 @@
   @DocsEditable()
   // http://www.w3.org/TR/WebCryptoAPI/
   @Experimental()
-  Crypto get crypto => _blink.BlinkWindow.$crypto_Getter(this);
+  Crypto get crypto => _blink.BlinkWindow.crypto_Getter(this);
 
   /// *Deprecated*.
   @DomName('Window.defaultStatus')
   @DocsEditable()
   @Experimental() // non-standard
-  String get defaultStatus => _blink.BlinkWindow.$defaultStatus_Getter(this);
+  String get defaultStatus => _blink.BlinkWindow.defaultStatus_Getter(this);
 
   /// *Deprecated*.
   @DomName('Window.defaultStatus')
   @DocsEditable()
   @Experimental() // non-standard
-  void set defaultStatus(String value) => _blink.BlinkWindow.$defaultStatus_Setter(this, value);
+  void set defaultStatus(String value) => _blink.BlinkWindow.defaultStatus_Setter_DOMString(this, value);
 
   /// *Deprecated*.
   @DomName('Window.defaultstatus')
   @DocsEditable()
   @Experimental() // non-standard
-  String get defaultstatus => _blink.BlinkWindow.$defaultstatus_Getter(this);
+  String get defaultstatus => _blink.BlinkWindow.defaultstatus_Getter(this);
 
   /// *Deprecated*.
   @DomName('Window.defaultstatus')
   @DocsEditable()
   @Experimental() // non-standard
-  void set defaultstatus(String value) => _blink.BlinkWindow.$defaultstatus_Setter(this, value);
+  void set defaultstatus(String value) => _blink.BlinkWindow.defaultstatus_Setter_DOMString(this, value);
 
   /**
    * The ratio between physical pixels and logical CSS pixels.
@@ -30272,11 +30272,11 @@
   @DocsEditable()
   // http://www.quirksmode.org/blog/archives/2012/06/devicepixelrati.html
   @Experimental() // non-standard
-  double get devicePixelRatio => _blink.BlinkWindow.$devicePixelRatio_Getter(this);
+  double get devicePixelRatio => _blink.BlinkWindow.devicePixelRatio_Getter(this);
 
   @DomName('Window.document')
   @DocsEditable()
-  Document get document => _blink.BlinkWindow.$document_Getter(this);
+  Document get document => _blink.BlinkWindow.document_Getter(this);
 
   /**
    * The current session history for this window's newest document.
@@ -30289,7 +30289,7 @@
    */
   @DomName('Window.history')
   @DocsEditable()
-  History get history => _blink.BlinkWindow.$history_Getter(this);
+  History get history => _blink.BlinkWindow.history_Getter(this);
 
   @DomName('Window.indexedDB')
   @DocsEditable()
@@ -30297,7 +30297,7 @@
   @SupportedBrowser(SupportedBrowser.FIREFOX, '15')
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @Experimental()
-  IdbFactory get indexedDB => _blink.BlinkWindow.$indexedDB_Getter(this);
+  IdbFactory get indexedDB => _blink.BlinkWindow.indexedDB_Getter(this);
 
   /**
    * The height of the viewport including scrollbars.
@@ -30310,7 +30310,7 @@
    */
   @DomName('Window.innerHeight')
   @DocsEditable()
-  int get innerHeight => _blink.BlinkWindow.$innerHeight_Getter(this);
+  int get innerHeight => _blink.BlinkWindow.innerHeight_Getter(this);
 
   /**
    * The width of the viewport including scrollbars.
@@ -30323,7 +30323,7 @@
    */
   @DomName('Window.innerWidth')
   @DocsEditable()
-  int get innerWidth => _blink.BlinkWindow.$innerWidth_Getter(this);
+  int get innerWidth => _blink.BlinkWindow.innerWidth_Getter(this);
 
   /**
    * Storage for this window that persists across sessions.
@@ -30340,11 +30340,11 @@
    */
   @DomName('Window.localStorage')
   @DocsEditable()
-  Storage get localStorage => _blink.BlinkWindow.$localStorage_Getter(this);
+  Storage get localStorage => _blink.BlinkWindow.localStorage_Getter(this);
 
   @DomName('Window.location')
   @DocsEditable()
-  Location get location => _blink.BlinkWindow.$location_Getter(this);
+  Location get location => _blink.BlinkWindow.location_Getter(this);
 
   /**
    * This window's location bar, which displays the URL.
@@ -30357,7 +30357,7 @@
    */
   @DomName('Window.locationbar')
   @DocsEditable()
-  BarProp get locationbar => _blink.BlinkWindow.$locationbar_Getter(this);
+  BarProp get locationbar => _blink.BlinkWindow.locationbar_Getter(this);
 
   /**
    * This window's menu bar, which displays menu commands.
@@ -30370,7 +30370,7 @@
    */
   @DomName('Window.menubar')
   @DocsEditable()
-  BarProp get menubar => _blink.BlinkWindow.$menubar_Getter(this);
+  BarProp get menubar => _blink.BlinkWindow.menubar_Getter(this);
 
   /**
    * The name of this window.
@@ -30383,7 +30383,7 @@
    */
   @DomName('Window.name')
   @DocsEditable()
-  String get name => _blink.BlinkWindow.$name_Getter(this);
+  String get name => _blink.BlinkWindow.name_Getter(this);
 
   /**
    * The name of this window.
@@ -30396,7 +30396,7 @@
    */
   @DomName('Window.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkWindow.$name_Setter(this, value);
+  void set name(String value) => _blink.BlinkWindow.name_Setter_DOMString(this, value);
 
   /**
    * The user agent accessing this window.
@@ -30409,7 +30409,7 @@
    */
   @DomName('Window.navigator')
   @DocsEditable()
-  Navigator get navigator => _blink.BlinkWindow.$navigator_Getter(this);
+  Navigator get navigator => _blink.BlinkWindow.navigator_Getter(this);
 
   /**
    * Whether objects are drawn offscreen before being displayed.
@@ -30423,20 +30423,20 @@
   @DomName('Window.offscreenBuffering')
   @DocsEditable()
   @Experimental() // non-standard
-  bool get offscreenBuffering => _blink.BlinkWindow.$offscreenBuffering_Getter(this);
+  bool get offscreenBuffering => _blink.BlinkWindow.offscreenBuffering_Getter(this);
 
   @DomName('Window.opener')
   @DocsEditable()
-  WindowBase get opener => _blink.BlinkWindow.$opener_Getter(this);
+  WindowBase get opener => _blink.BlinkWindow.opener_Getter(this);
 
   @DomName('Window.opener')
   @DocsEditable()
-  void set opener(Window value) => _blink.BlinkWindow.$opener_Setter(this, value);
+  void set opener(Window value) => _blink.BlinkWindow.opener_Setter_Window(this, value);
 
   @DomName('Window.orientation')
   @DocsEditable()
   @Experimental() // untriaged
-  int get orientation => _blink.BlinkWindow.$orientation_Getter(this);
+  int get orientation => _blink.BlinkWindow.orientation_Getter(this);
 
   /**
    * The height of this window including all user interface elements.
@@ -30449,7 +30449,7 @@
    */
   @DomName('Window.outerHeight')
   @DocsEditable()
-  int get outerHeight => _blink.BlinkWindow.$outerHeight_Getter(this);
+  int get outerHeight => _blink.BlinkWindow.outerHeight_Getter(this);
 
   /**
    * The width of the window including all user interface elements.
@@ -30462,7 +30462,7 @@
    */
   @DomName('Window.outerWidth')
   @DocsEditable()
-  int get outerWidth => _blink.BlinkWindow.$outerWidth_Getter(this);
+  int get outerWidth => _blink.BlinkWindow.outerWidth_Getter(this);
 
   /**
    * The distance this window has been scrolled horizontally.
@@ -30478,7 +30478,7 @@
    */
   @DomName('Window.pageXOffset')
   @DocsEditable()
-  int get pageXOffset => _blink.BlinkWindow.$pageXOffset_Getter(this);
+  int get pageXOffset => _blink.BlinkWindow.pageXOffset_Getter(this);
 
   /**
    * The distance this window has been scrolled vertically.
@@ -30494,11 +30494,11 @@
    */
   @DomName('Window.pageYOffset')
   @DocsEditable()
-  int get pageYOffset => _blink.BlinkWindow.$pageYOffset_Getter(this);
+  int get pageYOffset => _blink.BlinkWindow.pageYOffset_Getter(this);
 
   @DomName('Window.parent')
   @DocsEditable()
-  WindowBase get parent => _blink.BlinkWindow.$parent_Getter(this);
+  WindowBase get parent => _blink.BlinkWindow.parent_Getter(this);
 
   /**
    * Timing and navigation data for this window.
@@ -30516,7 +30516,7 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE)
-  Performance get performance => _blink.BlinkWindow.$performance_Getter(this);
+  Performance get performance => _blink.BlinkWindow.performance_Getter(this);
 
   /**
    * Information about the screen displaying this window.
@@ -30528,7 +30528,7 @@
    */
   @DomName('Window.screen')
   @DocsEditable()
-  Screen get screen => _blink.BlinkWindow.$screen_Getter(this);
+  Screen get screen => _blink.BlinkWindow.screen_Getter(this);
 
   /**
    * The distance from the left side of the screen to the left side of this
@@ -30541,7 +30541,7 @@
    */
   @DomName('Window.screenLeft')
   @DocsEditable()
-  int get screenLeft => _blink.BlinkWindow.$screenLeft_Getter(this);
+  int get screenLeft => _blink.BlinkWindow.screenLeft_Getter(this);
 
   /**
    * The distance from the top of the screen to the top of this window.
@@ -30553,7 +30553,7 @@
    */
   @DomName('Window.screenTop')
   @DocsEditable()
-  int get screenTop => _blink.BlinkWindow.$screenTop_Getter(this);
+  int get screenTop => _blink.BlinkWindow.screenTop_Getter(this);
 
   /**
    * The distance from the left side of the screen to the mouse pointer.
@@ -30565,7 +30565,7 @@
    */
   @DomName('Window.screenX')
   @DocsEditable()
-  int get screenX => _blink.BlinkWindow.$screenX_Getter(this);
+  int get screenX => _blink.BlinkWindow.screenX_Getter(this);
 
   /**
    * The distance from the top of the screen to the mouse pointer.
@@ -30577,15 +30577,15 @@
    */
   @DomName('Window.screenY')
   @DocsEditable()
-  int get screenY => _blink.BlinkWindow.$screenY_Getter(this);
+  int get screenY => _blink.BlinkWindow.screenY_Getter(this);
 
   @DomName('Window.scrollX')
   @DocsEditable()
-  int get scrollX => _blink.BlinkWindow.$scrollX_Getter(this);
+  int get scrollX => _blink.BlinkWindow.scrollX_Getter(this);
 
   @DomName('Window.scrollY')
   @DocsEditable()
-  int get scrollY => _blink.BlinkWindow.$scrollY_Getter(this);
+  int get scrollY => _blink.BlinkWindow.scrollY_Getter(this);
 
   /**
    * This window's scroll bars.
@@ -30598,7 +30598,7 @@
    */
   @DomName('Window.scrollbars')
   @DocsEditable()
-  BarProp get scrollbars => _blink.BlinkWindow.$scrollbars_Getter(this);
+  BarProp get scrollbars => _blink.BlinkWindow.scrollbars_Getter(this);
 
   /**
    * The current window.
@@ -30610,7 +30610,7 @@
    */
   @DomName('Window.self')
   @DocsEditable()
-  WindowBase get self => _blink.BlinkWindow.$self_Getter(this);
+  WindowBase get self => _blink.BlinkWindow.self_Getter(this);
 
   /**
    * Storage for this window that is cleared when this session ends.
@@ -30627,7 +30627,7 @@
    */
   @DomName('Window.sessionStorage')
   @DocsEditable()
-  Storage get sessionStorage => _blink.BlinkWindow.$sessionStorage_Getter(this);
+  Storage get sessionStorage => _blink.BlinkWindow.sessionStorage_Getter(this);
 
   /**
    * Access to speech synthesis in the browser.
@@ -30642,17 +30642,17 @@
   @DocsEditable()
   // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section
   @Experimental()
-  SpeechSynthesis get speechSynthesis => _blink.BlinkWindow.$speechSynthesis_Getter(this);
+  SpeechSynthesis get speechSynthesis => _blink.BlinkWindow.speechSynthesis_Getter(this);
 
   /// *Deprecated*.
   @DomName('Window.status')
   @DocsEditable()
-  String get status => _blink.BlinkWindow.$status_Getter(this);
+  String get status => _blink.BlinkWindow.status_Getter(this);
 
   /// *Deprecated*.
   @DomName('Window.status')
   @DocsEditable()
-  void set status(String value) => _blink.BlinkWindow.$status_Setter(this, value);
+  void set status(String value) => _blink.BlinkWindow.status_Setter_DOMString(this, value);
 
   /**
    * This window's status bar.
@@ -30665,7 +30665,7 @@
    */
   @DomName('Window.statusbar')
   @DocsEditable()
-  BarProp get statusbar => _blink.BlinkWindow.$statusbar_Getter(this);
+  BarProp get statusbar => _blink.BlinkWindow.statusbar_Getter(this);
 
   /**
    * Access to CSS media queries.
@@ -30680,7 +30680,7 @@
   @DocsEditable()
   // http://developer.apple.com/library/safari/#documentation/SafariDOMAdditions/Reference/StyleMedia/StyleMedia/StyleMedia.html
   @Experimental() // nonstandard
-  StyleMedia get styleMedia => _blink.BlinkWindow.$styleMedia_Getter(this);
+  StyleMedia get styleMedia => _blink.BlinkWindow.styleMedia_Getter(this);
 
   /**
    * This window's tool bar.
@@ -30693,11 +30693,11 @@
    */
   @DomName('Window.toolbar')
   @DocsEditable()
-  BarProp get toolbar => _blink.BlinkWindow.$toolbar_Getter(this);
+  BarProp get toolbar => _blink.BlinkWindow.toolbar_Getter(this);
 
   @DomName('Window.top')
   @DocsEditable()
-  WindowBase get top => _blink.BlinkWindow.$top_Getter(this);
+  WindowBase get top => _blink.BlinkWindow.top_Getter(this);
 
   /**
    * The current window.
@@ -30709,14 +30709,14 @@
    */
   @DomName('Window.window')
   @DocsEditable()
-  WindowBase get window => _blink.BlinkWindow.$window_Getter(this);
+  WindowBase get window => _blink.BlinkWindow.window_Getter(this);
 
   WindowBase __getter__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkWindow.$___getter___1_Callback(this, index_OR_name);
+      return _blink.BlinkWindow.$__getter___Callback_ul(this, index_OR_name);
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkWindow.$___getter___2_Callback(this, index_OR_name);
+      return _blink.BlinkWindow.$__getter___Callback_DOMString(this, index_OR_name);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -30732,15 +30732,15 @@
    */
   @DomName('Window.alert')
   @DocsEditable()
-  void alert(String message) => _blink.BlinkWindow.$alert_Callback(this, message);
+  void alert(String message) => _blink.BlinkWindow.alert_Callback_DOMString(this, message);
 
   @DomName('Window.cancelAnimationFrame')
   @DocsEditable()
-  void cancelAnimationFrame(int id) => _blink.BlinkWindow.$cancelAnimationFrame_Callback(this, id);
+  void cancelAnimationFrame(int id) => _blink.BlinkWindow.cancelAnimationFrame_Callback_long(this, id);
 
   @DomName('Window.close')
   @DocsEditable()
-  void close() => _blink.BlinkWindow.$close_Callback(this);
+  void close() => _blink.BlinkWindow.close_Callback(this);
 
   /**
    * Displays a modal OK/Cancel prompt to the user.
@@ -30753,7 +30753,7 @@
    */
   @DomName('Window.confirm')
   @DocsEditable()
-  bool confirm(String message) => _blink.BlinkWindow.$confirm_Callback(this, message);
+  bool confirm(String message) => _blink.BlinkWindow.confirm_Callback_DOMString(this, message);
 
   /**
    * Finds text in this window.
@@ -30766,11 +30766,11 @@
   @DomName('Window.find')
   @DocsEditable()
   @Experimental() // non-standard
-  bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) => _blink.BlinkWindow.$find_Callback(this, string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog);
+  bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) => _blink.BlinkWindow.find_Callback_DOMString_boolean_boolean_boolean_boolean_boolean_boolean(this, string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog);
 
   @DomName('Window.getComputedStyle')
   @DocsEditable()
-  CssStyleDeclaration _getComputedStyle(Element element, String pseudoElement) => _blink.BlinkWindow.$getComputedStyle_Callback(this, element, pseudoElement);
+  CssStyleDeclaration _getComputedStyle(Element element, String pseudoElement) => _blink.BlinkWindow.getComputedStyle_Callback_Element_DOMString(this, element, pseudoElement);
 
   /**
    * Returns all CSS rules that apply to the element's pseudo-element.
@@ -30778,7 +30778,7 @@
   @DomName('Window.getMatchedCSSRules')
   @DocsEditable()
   @Experimental() // non-standard
-  List<CssRule> getMatchedCssRules(Element element, String pseudoElement) => _blink.BlinkWindow.$getMatchedCSSRules_Callback(this, element, pseudoElement);
+  List<CssRule> getMatchedCssRules(Element element, String pseudoElement) => _blink.BlinkWindow.getMatchedCSSRules_Callback_Element_DOMString(this, element, pseudoElement);
 
   /**
    * Returns the currently selected text.
@@ -30791,7 +30791,7 @@
    */
   @DomName('Window.getSelection')
   @DocsEditable()
-  Selection getSelection() => _blink.BlinkWindow.$getSelection_Callback(this);
+  Selection getSelection() => _blink.BlinkWindow.getSelection_Callback(this);
 
   /**
    * Returns a list of media queries for the given query string.
@@ -30806,7 +30806,7 @@
    */
   @DomName('Window.matchMedia')
   @DocsEditable()
-  MediaQueryList matchMedia(String query) => _blink.BlinkWindow.$matchMedia_Callback(this, query);
+  MediaQueryList matchMedia(String query) => _blink.BlinkWindow.matchMedia_Callback_DOMString(this, query);
 
   /**
    * Moves this window.
@@ -30822,15 +30822,15 @@
    */
   @DomName('Window.moveBy')
   @DocsEditable()
-  void moveBy(num x, num y) => _blink.BlinkWindow.$moveBy_Callback(this, x, y);
+  void moveBy(num x, num y) => _blink.BlinkWindow.moveBy_Callback_float_float(this, x, y);
 
   @DomName('Window.moveTo')
   @DocsEditable()
-  void _moveTo(num x, num y) => _blink.BlinkWindow.$moveTo_Callback(this, x, y);
+  void _moveTo(num x, num y) => _blink.BlinkWindow.moveTo_Callback_float_float(this, x, y);
 
   @DomName('Window.open')
   @DocsEditable()
-  WindowBase open(String url, String name, [String options]) => _blink.BlinkWindow.$open_Callback(this, url, name, options);
+  WindowBase open(String url, String name, [String options]) => _blink.BlinkWindow.open_Callback_DOMString_DOMString_DOMString(this, url, name, options);
 
   /// *Deprecated.*
   @DomName('Window.openDatabase')
@@ -30840,11 +30840,11 @@
   @Experimental()
   // http://www.w3.org/TR/webdatabase/
   @Experimental() // deprecated
-  SqlDatabase openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) => _blink.BlinkWindow.$openDatabase_Callback(this, name, version, displayName, estimatedSize, creationCallback);
+  SqlDatabase openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) => _blink.BlinkWindow.openDatabase_Callback_DOMString_DOMString_DOMString_ul_DatabaseCallback(this, name, version, displayName, estimatedSize, creationCallback);
 
   @DomName('Window.postMessage')
   @DocsEditable()
-  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List<MessagePort> messagePorts]) => _blink.BlinkWindow.$postMessage_Callback(this, message, targetOrigin, messagePorts);
+  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List<MessagePort> messagePorts]) => _blink.BlinkWindow.postMessage_Callback_SerializedScriptValue_DOMString_A_MessagePort_A(this, message, targetOrigin, messagePorts);
 
   /**
    * Opens the print dialog for this window.
@@ -30856,11 +30856,11 @@
    */
   @DomName('Window.print')
   @DocsEditable()
-  void print() => _blink.BlinkWindow.$print_Callback(this);
+  void print() => _blink.BlinkWindow.print_Callback(this);
 
   @DomName('Window.requestAnimationFrame')
   @DocsEditable()
-  int _requestAnimationFrame(RequestAnimationFrameCallback callback) => _blink.BlinkWindow.$requestAnimationFrame_Callback(this, callback);
+  int _requestAnimationFrame(RequestAnimationFrameCallback callback) => _blink.BlinkWindow.requestAnimationFrame_Callback_RequestAnimationFrameCallback(this, callback);
 
   /**
    * Resizes this window by an offset.
@@ -30872,7 +30872,7 @@
    */
   @DomName('Window.resizeBy')
   @DocsEditable()
-  void resizeBy(num x, num y) => _blink.BlinkWindow.$resizeBy_Callback(this, x, y);
+  void resizeBy(num x, num y) => _blink.BlinkWindow.resizeBy_Callback_float_float(this, x, y);
 
   /**
    * Resizes this window to a specific width and height.
@@ -30884,7 +30884,7 @@
    */
   @DomName('Window.resizeTo')
   @DocsEditable()
-  void resizeTo(num width, num height) => _blink.BlinkWindow.$resizeTo_Callback(this, width, height);
+  void resizeTo(num width, num height) => _blink.BlinkWindow.resizeTo_Callback_float_float(this, width, height);
 
   /**
    * Scrolls the page horizontally and vertically to a specific point.
@@ -30898,7 +30898,7 @@
    */
   @DomName('Window.scroll')
   @DocsEditable()
-  void scroll(int x, int y, [Map scrollOptions]) => _blink.BlinkWindow.$scroll_Callback(this, x, y, scrollOptions);
+  void scroll(int x, int y, [Map scrollOptions]) => _blink.BlinkWindow.scroll_Callback_long_long_Dictionary(this, x, y, scrollOptions);
 
   /**
    * Scrolls the page horizontally and vertically by an offset.
@@ -30910,7 +30910,7 @@
    */
   @DomName('Window.scrollBy')
   @DocsEditable()
-  void scrollBy(int x, int y, [Map scrollOptions]) => _blink.BlinkWindow.$scrollBy_Callback(this, x, y, scrollOptions);
+  void scrollBy(int x, int y, [Map scrollOptions]) => _blink.BlinkWindow.scrollBy_Callback_long_long_Dictionary(this, x, y, scrollOptions);
 
   /**
    * Scrolls the page horizontally and vertically to a specific point.
@@ -30924,7 +30924,7 @@
    */
   @DomName('Window.scrollTo')
   @DocsEditable()
-  void scrollTo(int x, int y, [Map scrollOptions]) => _blink.BlinkWindow.$scrollTo_Callback(this, x, y, scrollOptions);
+  void scrollTo(int x, int y, [Map scrollOptions]) => _blink.BlinkWindow.scrollTo_Callback_long_long_Dictionary(this, x, y, scrollOptions);
 
   /**
    * Opens a new page as a modal dialog.
@@ -30937,7 +30937,7 @@
    */
   @DomName('Window.showModalDialog')
   @DocsEditable()
-  Object showModalDialog(String url, [Object dialogArgs, String featureArgs]) => _blink.BlinkWindow.$showModalDialog_Callback(this, url, dialogArgs, featureArgs);
+  Object showModalDialog(String url, [Object dialogArgs, String featureArgs]) => _blink.BlinkWindow.showModalDialog_Callback_DOMString_ScriptValue_DOMString(this, url, dialogArgs, featureArgs);
 
   /**
    * Stops the window from loading.
@@ -30950,11 +30950,11 @@
    */
   @DomName('Window.stop')
   @DocsEditable()
-  void stop() => _blink.BlinkWindow.$stop_Callback(this);
+  void stop() => _blink.BlinkWindow.stop_Callback(this);
 
   @DomName('Window.toString')
   @DocsEditable()
-  String toString() => _blink.BlinkWindow.$toString_Callback(this);
+  String toString() => _blink.BlinkWindow.toString_Callback(this);
 
   @DomName('Window.webkitConvertPointFromNodeToPage')
   @DocsEditable()
@@ -30962,7 +30962,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMWindowAdditionsReference/DOMWindowAdditions/DOMWindowAdditions.html
-  _DomPoint _convertPointFromNodeToPage(Node node, _DomPoint p) => _blink.BlinkWindow.$webkitConvertPointFromNodeToPage_Callback(this, node, p);
+  _DomPoint _convertPointFromNodeToPage(Node node, _DomPoint p) => _blink.BlinkWindow.webkitConvertPointFromNodeToPage_Callback_Node_WebKitPoint(this, node, p);
 
   @DomName('Window.webkitConvertPointFromPageToNode')
   @DocsEditable()
@@ -30970,14 +30970,14 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMWindowAdditionsReference/DOMWindowAdditions/DOMWindowAdditions.html
-  _DomPoint _convertPointFromPageToNode(Node node, _DomPoint p) => _blink.BlinkWindow.$webkitConvertPointFromPageToNode_Callback(this, node, p);
+  _DomPoint _convertPointFromPageToNode(Node node, _DomPoint p) => _blink.BlinkWindow.webkitConvertPointFromPageToNode_Callback_Node_WebKitPoint(this, node, p);
 
   @DomName('Window.webkitRequestFileSystem')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @Experimental()
   // http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem
-  void __requestFileSystem(int type, int size, _FileSystemCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkWindow.$webkitRequestFileSystem_Callback(this, type, size, successCallback, errorCallback);
+  void __requestFileSystem(int type, int size, _FileSystemCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkWindow.webkitRequestFileSystem_Callback_us_ll_FileSystemCallback_ErrorCallback(this, type, size, successCallback, errorCallback);
 
   Future<FileSystem> _requestFileSystem(int type, int size) {
     var completer = new Completer<FileSystem>();
@@ -31001,7 +31001,7 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @Experimental()
   // http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem
-  void _resolveLocalFileSystemUrl(String url, _EntryCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkWindow.$webkitResolveLocalFileSystemURL_Callback(this, url, successCallback, errorCallback);
+  void _resolveLocalFileSystemUrl(String url, _EntryCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkWindow.webkitResolveLocalFileSystemURL_Callback_DOMString_EntryCallback_ErrorCallback(this, url, successCallback, errorCallback);
 
   Future<Entry> resolveLocalFileSystemUrl(String url) {
     var completer = new Completer<Entry>();
@@ -31013,27 +31013,27 @@
 
   @DomName('Window.atob')
   @DocsEditable()
-  String atob(String string) => _blink.BlinkWindow.$atob_Callback(this, string);
+  String atob(String string) => _blink.BlinkWindow.atob_Callback_DOMString(this, string);
 
   @DomName('Window.btoa')
   @DocsEditable()
-  String btoa(String string) => _blink.BlinkWindow.$btoa_Callback(this, string);
+  String btoa(String string) => _blink.BlinkWindow.btoa_Callback_DOMString(this, string);
 
   @DomName('Window.clearInterval')
   @DocsEditable()
-  void _clearInterval(int handle) => _blink.BlinkWindow.$clearInterval_Callback(this, handle);
+  void _clearInterval(int handle) => _blink.BlinkWindow.clearInterval_Callback_long(this, handle);
 
   @DomName('Window.clearTimeout')
   @DocsEditable()
-  void _clearTimeout(int handle) => _blink.BlinkWindow.$clearTimeout_Callback(this, handle);
+  void _clearTimeout(int handle) => _blink.BlinkWindow.clearTimeout_Callback_long(this, handle);
 
   @DomName('Window.setInterval')
   @DocsEditable()
-  int _setInterval(Object handler, int timeout) => _blink.BlinkWindow.$setInterval_Callback(this, handler, timeout);
+  int _setInterval(Object handler, int timeout) => _blink.BlinkWindow.setInterval_Callback_ScriptValue_long(this, handler, timeout);
 
   @DomName('Window.setTimeout')
   @DocsEditable()
-  int _setTimeout(Object handler, int timeout) => _blink.BlinkWindow.$setTimeout_Callback(this, handler, timeout);
+  int _setTimeout(Object handler, int timeout) => _blink.BlinkWindow.setTimeout_Callback_ScriptValue_long(this, handler, timeout);
 
   /// Stream of `contentloaded` events handled by this [Window].
   @DomName('Window.onDOMContentLoaded')
@@ -31404,12 +31404,12 @@
   @DomName('WindowBase64.atob')
   @DocsEditable()
   @Experimental() // untriaged
-  String atob(String string) => _blink.BlinkWindowBase64.$atob_Callback(this, string);
+  String atob(String string) => _blink.BlinkWindowBase64.atob_Callback_DOMString(this, string);
 
   @DomName('WindowBase64.btoa')
   @DocsEditable()
   @Experimental() // untriaged
-  String btoa(String string) => _blink.BlinkWindowBase64.$btoa_Callback(this, string);
+  String btoa(String string) => _blink.BlinkWindowBase64.btoa_Callback_DOMString(this, string);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -31537,7 +31537,7 @@
   @DomName('Worker.Worker')
   @DocsEditable()
   factory Worker(String scriptUrl) {
-    return _blink.BlinkWorker.$_create_1constructorCallback(scriptUrl);
+    return _blink.BlinkWorker.constructorCallback_DOMString(scriptUrl);
   }
 
   /// Checks if this type is supported on the current platform.
@@ -31545,11 +31545,11 @@
 
   @DomName('Worker.postMessage')
   @DocsEditable()
-  void postMessage(/*SerializedScriptValue*/ message, [List<MessagePort> messagePorts]) => _blink.BlinkWorker.$postMessage_Callback(this, message, messagePorts);
+  void postMessage(/*SerializedScriptValue*/ message, [List<MessagePort> messagePorts]) => _blink.BlinkWorker.postMessage_Callback_SerializedScriptValue_A_MessagePort_A(this, message, messagePorts);
 
   @DomName('Worker.terminate')
   @DocsEditable()
-  void terminate() => _blink.BlinkWorker.$terminate_Callback(this);
+  void terminate() => _blink.BlinkWorker.terminate_Callback(this);
 
   /// Stream of `error` events handled by this [Worker].
   @DomName('Worker.onerror')
@@ -31631,57 +31631,57 @@
   @DomName('WorkerGlobalScope.console')
   @DocsEditable()
   @Experimental() // untriaged
-  WorkerConsole get console => _blink.BlinkWorkerGlobalScope.$console_Getter(this);
+  WorkerConsole get console => _blink.BlinkWorkerGlobalScope.console_Getter(this);
 
   @DomName('WorkerGlobalScope.crypto')
   @DocsEditable()
   @Experimental() // untriaged
-  WorkerCrypto get crypto => _blink.BlinkWorkerGlobalScope.$crypto_Getter(this);
+  WorkerCrypto get crypto => _blink.BlinkWorkerGlobalScope.crypto_Getter(this);
 
   @DomName('WorkerGlobalScope.indexedDB')
   @DocsEditable()
   @Experimental() // untriaged
-  IdbFactory get indexedDB => _blink.BlinkWorkerGlobalScope.$indexedDB_Getter(this);
+  IdbFactory get indexedDB => _blink.BlinkWorkerGlobalScope.indexedDB_Getter(this);
 
   @DomName('WorkerGlobalScope.location')
   @DocsEditable()
   @Experimental() // untriaged
-  _WorkerLocation get location => _blink.BlinkWorkerGlobalScope.$location_Getter(this);
+  _WorkerLocation get location => _blink.BlinkWorkerGlobalScope.location_Getter(this);
 
   @DomName('WorkerGlobalScope.navigator')
   @DocsEditable()
   @Experimental() // untriaged
-  _WorkerNavigator get navigator => _blink.BlinkWorkerGlobalScope.$navigator_Getter(this);
+  _WorkerNavigator get navigator => _blink.BlinkWorkerGlobalScope.navigator_Getter(this);
 
   @DomName('WorkerGlobalScope.performance')
   @DocsEditable()
   @Experimental() // untriaged
-  WorkerPerformance get performance => _blink.BlinkWorkerGlobalScope.$performance_Getter(this);
+  WorkerPerformance get performance => _blink.BlinkWorkerGlobalScope.performance_Getter(this);
 
   @DomName('WorkerGlobalScope.self')
   @DocsEditable()
   @Experimental() // untriaged
-  WorkerGlobalScope get self => _blink.BlinkWorkerGlobalScope.$self_Getter(this);
+  WorkerGlobalScope get self => _blink.BlinkWorkerGlobalScope.self_Getter(this);
 
   @DomName('WorkerGlobalScope.close')
   @DocsEditable()
   @Experimental() // untriaged
-  void close() => _blink.BlinkWorkerGlobalScope.$close_Callback(this);
+  void close() => _blink.BlinkWorkerGlobalScope.close_Callback(this);
 
   @DomName('WorkerGlobalScope.openDatabase')
   @DocsEditable()
   @Experimental() // untriaged
-  SqlDatabase openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) => _blink.BlinkWorkerGlobalScope.$openDatabase_Callback(this, name, version, displayName, estimatedSize, creationCallback);
+  SqlDatabase openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) => _blink.BlinkWorkerGlobalScope.openDatabase_Callback_DOMString_DOMString_DOMString_ul_DatabaseCallback(this, name, version, displayName, estimatedSize, creationCallback);
 
   @DomName('WorkerGlobalScope.openDatabaseSync')
   @DocsEditable()
   @Experimental() // untriaged
-  _DatabaseSync openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) => _blink.BlinkWorkerGlobalScope.$openDatabaseSync_Callback(this, name, version, displayName, estimatedSize, creationCallback);
+  _DatabaseSync openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) => _blink.BlinkWorkerGlobalScope.openDatabaseSync_Callback_DOMString_DOMString_DOMString_ul_DatabaseCallback(this, name, version, displayName, estimatedSize, creationCallback);
 
   @DomName('WorkerGlobalScope.webkitRequestFileSystem')
   @DocsEditable()
   @Experimental() // untriaged
-  void _webkitRequestFileSystem(int type, int size, [_FileSystemCallback successCallback, _ErrorCallback errorCallback]) => _blink.BlinkWorkerGlobalScope.$webkitRequestFileSystem_Callback(this, type, size, successCallback, errorCallback);
+  void _webkitRequestFileSystem(int type, int size, [_FileSystemCallback successCallback, _ErrorCallback errorCallback]) => _blink.BlinkWorkerGlobalScope.webkitRequestFileSystem_Callback_us_ll_FileSystemCallback_ErrorCallback(this, type, size, successCallback, errorCallback);
 
   Future<FileSystem> webkitRequestFileSystem(int type, int size) {
     var completer = new Completer<FileSystem>();
@@ -31697,7 +31697,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   @Experimental() // untriaged
-  _DOMFileSystemSync requestFileSystemSync(int type, int size) => _blink.BlinkWorkerGlobalScope.$webkitRequestFileSystemSync_Callback(this, type, size);
+  _DOMFileSystemSync requestFileSystemSync(int type, int size) => _blink.BlinkWorkerGlobalScope.webkitRequestFileSystemSync_Callback_us_ll(this, type, size);
 
   @DomName('WorkerGlobalScope.webkitResolveLocalFileSystemSyncURL')
   @DocsEditable()
@@ -31705,12 +31705,12 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   @Experimental() // untriaged
-  _EntrySync resolveLocalFileSystemSyncUrl(String url) => _blink.BlinkWorkerGlobalScope.$webkitResolveLocalFileSystemSyncURL_Callback(this, url);
+  _EntrySync resolveLocalFileSystemSyncUrl(String url) => _blink.BlinkWorkerGlobalScope.webkitResolveLocalFileSystemSyncURL_Callback_DOMString(this, url);
 
   @DomName('WorkerGlobalScope.webkitResolveLocalFileSystemURL')
   @DocsEditable()
   @Experimental() // untriaged
-  void _webkitResolveLocalFileSystemUrl(String url, _EntryCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkWorkerGlobalScope.$webkitResolveLocalFileSystemURL_Callback(this, url, successCallback, errorCallback);
+  void _webkitResolveLocalFileSystemUrl(String url, _EntryCallback successCallback, [_ErrorCallback errorCallback]) => _blink.BlinkWorkerGlobalScope.webkitResolveLocalFileSystemURL_Callback_DOMString_EntryCallback_ErrorCallback(this, url, successCallback, errorCallback);
 
   Future<Entry> webkitResolveLocalFileSystemUrl(String url) {
     var completer = new Completer<Entry>();
@@ -31723,32 +31723,32 @@
   @DomName('WorkerGlobalScope.atob')
   @DocsEditable()
   @Experimental() // untriaged
-  String atob(String string) => _blink.BlinkWorkerGlobalScope.$atob_Callback(this, string);
+  String atob(String string) => _blink.BlinkWorkerGlobalScope.atob_Callback_DOMString(this, string);
 
   @DomName('WorkerGlobalScope.btoa')
   @DocsEditable()
   @Experimental() // untriaged
-  String btoa(String string) => _blink.BlinkWorkerGlobalScope.$btoa_Callback(this, string);
+  String btoa(String string) => _blink.BlinkWorkerGlobalScope.btoa_Callback_DOMString(this, string);
 
   @DomName('WorkerGlobalScope.clearInterval')
   @DocsEditable()
   @Experimental() // untriaged
-  void _clearInterval(int handle) => _blink.BlinkWorkerGlobalScope.$clearInterval_Callback(this, handle);
+  void _clearInterval(int handle) => _blink.BlinkWorkerGlobalScope.clearInterval_Callback_long(this, handle);
 
   @DomName('WorkerGlobalScope.clearTimeout')
   @DocsEditable()
   @Experimental() // untriaged
-  void _clearTimeout(int handle) => _blink.BlinkWorkerGlobalScope.$clearTimeout_Callback(this, handle);
+  void _clearTimeout(int handle) => _blink.BlinkWorkerGlobalScope.clearTimeout_Callback_long(this, handle);
 
   @DomName('WorkerGlobalScope.setInterval')
   @DocsEditable()
   @Experimental() // untriaged
-  int _setInterval(Object handler, int timeout) => _blink.BlinkWorkerGlobalScope.$setInterval_Callback(this, handler, timeout);
+  int _setInterval(Object handler, int timeout) => _blink.BlinkWorkerGlobalScope.setInterval_Callback_ScriptValue_long(this, handler, timeout);
 
   @DomName('WorkerGlobalScope.setTimeout')
   @DocsEditable()
   @Experimental() // untriaged
-  int _setTimeout(Object handler, int timeout) => _blink.BlinkWorkerGlobalScope.$setTimeout_Callback(this, handler, timeout);
+  int _setTimeout(Object handler, int timeout) => _blink.BlinkWorkerGlobalScope.setTimeout_Callback_ScriptValue_long(this, handler, timeout);
 
   /// Stream of `error` events handled by this [WorkerGlobalScope].
   @DomName('WorkerGlobalScope.onerror')
@@ -31774,7 +31774,7 @@
   @DomName('WorkerPerformance.now')
   @DocsEditable()
   @Experimental() // untriaged
-  double now() => _blink.BlinkWorkerPerformance.$now_Callback(this);
+  double now() => _blink.BlinkWorkerPerformance.now_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -31795,20 +31795,20 @@
   @DomName('XPathEvaluator.XPathEvaluator')
   @DocsEditable()
   factory XPathEvaluator() {
-    return _blink.BlinkXPathEvaluator.$_create_1constructorCallback();
+    return _blink.BlinkXPathEvaluator.constructorCallback();
   }
 
   @DomName('XPathEvaluator.createExpression')
   @DocsEditable()
-  XPathExpression createExpression(String expression, XPathNSResolver resolver) => _blink.BlinkXPathEvaluator.$createExpression_Callback(this, expression, resolver);
+  XPathExpression createExpression(String expression, XPathNSResolver resolver) => _blink.BlinkXPathEvaluator.createExpression_Callback_DOMString_XPathNSResolver(this, expression, resolver);
 
   @DomName('XPathEvaluator.createNSResolver')
   @DocsEditable()
-  XPathNSResolver createNSResolver(Node nodeResolver) => _blink.BlinkXPathEvaluator.$createNSResolver_Callback(this, nodeResolver);
+  XPathNSResolver createNSResolver(Node nodeResolver) => _blink.BlinkXPathEvaluator.createNSResolver_Callback_Node(this, nodeResolver);
 
   @DomName('XPathEvaluator.evaluate')
   @DocsEditable()
-  XPathResult evaluate(String expression, Node contextNode, XPathNSResolver resolver, int type, XPathResult inResult) => _blink.BlinkXPathEvaluator.$evaluate_Callback(this, expression, contextNode, resolver, type, inResult);
+  XPathResult evaluate(String expression, Node contextNode, XPathNSResolver resolver, int type, XPathResult inResult) => _blink.BlinkXPathEvaluator.evaluate_Callback_DOMString_Node_XPathNSResolver_us_XPathResult(this, expression, contextNode, resolver, type, inResult);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -31828,7 +31828,7 @@
 
   @DomName('XPathExpression.evaluate')
   @DocsEditable()
-  XPathResult evaluate(Node contextNode, int type, XPathResult inResult) => _blink.BlinkXPathExpression.$evaluate_Callback(this, contextNode, type, inResult);
+  XPathResult evaluate(Node contextNode, int type, XPathResult inResult) => _blink.BlinkXPathExpression.evaluate_Callback_Node_us_XPathResult(this, contextNode, type, inResult);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -31848,7 +31848,7 @@
 
   @DomName('XPathNSResolver.lookupNamespaceURI')
   @DocsEditable()
-  String lookupNamespaceUri(String prefix) => _blink.BlinkXPathNSResolver.$lookupNamespaceURI_Callback(this, prefix);
+  String lookupNamespaceUri(String prefix) => _blink.BlinkXPathNSResolver.lookupNamespaceURI_Callback_DOMString(this, prefix);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -31908,39 +31908,39 @@
 
   @DomName('XPathResult.booleanValue')
   @DocsEditable()
-  bool get booleanValue => _blink.BlinkXPathResult.$booleanValue_Getter(this);
+  bool get booleanValue => _blink.BlinkXPathResult.booleanValue_Getter(this);
 
   @DomName('XPathResult.invalidIteratorState')
   @DocsEditable()
-  bool get invalidIteratorState => _blink.BlinkXPathResult.$invalidIteratorState_Getter(this);
+  bool get invalidIteratorState => _blink.BlinkXPathResult.invalidIteratorState_Getter(this);
 
   @DomName('XPathResult.numberValue')
   @DocsEditable()
-  double get numberValue => _blink.BlinkXPathResult.$numberValue_Getter(this);
+  double get numberValue => _blink.BlinkXPathResult.numberValue_Getter(this);
 
   @DomName('XPathResult.resultType')
   @DocsEditable()
-  int get resultType => _blink.BlinkXPathResult.$resultType_Getter(this);
+  int get resultType => _blink.BlinkXPathResult.resultType_Getter(this);
 
   @DomName('XPathResult.singleNodeValue')
   @DocsEditable()
-  Node get singleNodeValue => _blink.BlinkXPathResult.$singleNodeValue_Getter(this);
+  Node get singleNodeValue => _blink.BlinkXPathResult.singleNodeValue_Getter(this);
 
   @DomName('XPathResult.snapshotLength')
   @DocsEditable()
-  int get snapshotLength => _blink.BlinkXPathResult.$snapshotLength_Getter(this);
+  int get snapshotLength => _blink.BlinkXPathResult.snapshotLength_Getter(this);
 
   @DomName('XPathResult.stringValue')
   @DocsEditable()
-  String get stringValue => _blink.BlinkXPathResult.$stringValue_Getter(this);
+  String get stringValue => _blink.BlinkXPathResult.stringValue_Getter(this);
 
   @DomName('XPathResult.iterateNext')
   @DocsEditable()
-  Node iterateNext() => _blink.BlinkXPathResult.$iterateNext_Callback(this);
+  Node iterateNext() => _blink.BlinkXPathResult.iterateNext_Callback(this);
 
   @DomName('XPathResult.snapshotItem')
   @DocsEditable()
-  Node snapshotItem(int index) => _blink.BlinkXPathResult.$snapshotItem_Callback(this, index);
+  Node snapshotItem(int index) => _blink.BlinkXPathResult.snapshotItem_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -31976,12 +31976,12 @@
   @DomName('XMLSerializer.XMLSerializer')
   @DocsEditable()
   factory XmlSerializer() {
-    return _blink.BlinkXMLSerializer.$_create_1constructorCallback();
+    return _blink.BlinkXMLSerializer.constructorCallback();
   }
 
   @DomName('XMLSerializer.serializeToString')
   @DocsEditable()
-  String serializeToString(Node node) => _blink.BlinkXMLSerializer.$serializeToString_Callback(this, node);
+  String serializeToString(Node node) => _blink.BlinkXMLSerializer.serializeToString_Callback_Node(this, node);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -32004,7 +32004,7 @@
   @DomName('XSLTProcessor.XSLTProcessor')
   @DocsEditable()
   factory XsltProcessor() {
-    return _blink.BlinkXSLTProcessor.$_create_1constructorCallback();
+    return _blink.BlinkXSLTProcessor.constructorCallback();
   }
 
   /// Checks if this type is supported on the current platform.
@@ -32012,35 +32012,35 @@
 
   @DomName('XSLTProcessor.clearParameters')
   @DocsEditable()
-  void clearParameters() => _blink.BlinkXSLTProcessor.$clearParameters_Callback(this);
+  void clearParameters() => _blink.BlinkXSLTProcessor.clearParameters_Callback(this);
 
   @DomName('XSLTProcessor.getParameter')
   @DocsEditable()
-  String getParameter(String namespaceURI, String localName) => _blink.BlinkXSLTProcessor.$getParameter_Callback(this, namespaceURI, localName);
+  String getParameter(String namespaceURI, String localName) => _blink.BlinkXSLTProcessor.getParameter_Callback_DOMString_DOMString(this, namespaceURI, localName);
 
   @DomName('XSLTProcessor.importStylesheet')
   @DocsEditable()
-  void importStylesheet(Node stylesheet) => _blink.BlinkXSLTProcessor.$importStylesheet_Callback(this, stylesheet);
+  void importStylesheet(Node stylesheet) => _blink.BlinkXSLTProcessor.importStylesheet_Callback_Node(this, stylesheet);
 
   @DomName('XSLTProcessor.removeParameter')
   @DocsEditable()
-  void removeParameter(String namespaceURI, String localName) => _blink.BlinkXSLTProcessor.$removeParameter_Callback(this, namespaceURI, localName);
+  void removeParameter(String namespaceURI, String localName) => _blink.BlinkXSLTProcessor.removeParameter_Callback_DOMString_DOMString(this, namespaceURI, localName);
 
   @DomName('XSLTProcessor.reset')
   @DocsEditable()
-  void reset() => _blink.BlinkXSLTProcessor.$reset_Callback(this);
+  void reset() => _blink.BlinkXSLTProcessor.reset_Callback(this);
 
   @DomName('XSLTProcessor.setParameter')
   @DocsEditable()
-  void setParameter(String namespaceURI, String localName, String value) => _blink.BlinkXSLTProcessor.$setParameter_Callback(this, namespaceURI, localName, value);
+  void setParameter(String namespaceURI, String localName, String value) => _blink.BlinkXSLTProcessor.setParameter_Callback_DOMString_DOMString_DOMString(this, namespaceURI, localName, value);
 
   @DomName('XSLTProcessor.transformToDocument')
   @DocsEditable()
-  Document transformToDocument(Node source) => _blink.BlinkXSLTProcessor.$transformToDocument_Callback(this, source);
+  Document transformToDocument(Node source) => _blink.BlinkXSLTProcessor.transformToDocument_Callback_Node(this, source);
 
   @DomName('XSLTProcessor.transformToFragment')
   @DocsEditable()
-  DocumentFragment transformToFragment(Node source, Document docVal) => _blink.BlinkXSLTProcessor.$transformToFragment_Callback(this, source, docVal);
+  DocumentFragment transformToFragment(Node source, Document docVal) => _blink.BlinkXSLTProcessor.transformToFragment_Callback_Node_Document(this, source, docVal);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -32059,24 +32059,24 @@
   @DomName('Attr.localName')
   @DocsEditable()
   @Experimental() // untriaged
-  String get _localName => _blink.BlinkAttr.$localName_Getter(this);
+  String get _localName => _blink.BlinkAttr.localName_Getter(this);
 
   @DomName('Attr.name')
   @DocsEditable()
-  String get name => _blink.BlinkAttr.$name_Getter(this);
+  String get name => _blink.BlinkAttr.name_Getter(this);
 
   @DomName('Attr.namespaceURI')
   @DocsEditable()
   @Experimental() // untriaged
-  String get _namespaceUri => _blink.BlinkAttr.$namespaceURI_Getter(this);
+  String get _namespaceUri => _blink.BlinkAttr.namespaceURI_Getter(this);
 
   @DomName('Attr.value')
   @DocsEditable()
-  String get value => _blink.BlinkAttr.$value_Getter(this);
+  String get value => _blink.BlinkAttr.value_Getter(this);
 
   @DomName('Attr.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkAttr.$value_Setter(this, value);
+  void set value(String value) => _blink.BlinkAttr.value_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -32230,27 +32230,27 @@
 
   @DomName('ClientRect.bottom')
   @DocsEditable()
-  double get bottom => _blink.BlinkClientRect.$bottom_Getter(this);
+  double get bottom => _blink.BlinkClientRect.bottom_Getter(this);
 
   @DomName('ClientRect.height')
   @DocsEditable()
-  double get height => _blink.BlinkClientRect.$height_Getter(this);
+  double get height => _blink.BlinkClientRect.height_Getter(this);
 
   @DomName('ClientRect.left')
   @DocsEditable()
-  double get left => _blink.BlinkClientRect.$left_Getter(this);
+  double get left => _blink.BlinkClientRect.left_Getter(this);
 
   @DomName('ClientRect.right')
   @DocsEditable()
-  double get right => _blink.BlinkClientRect.$right_Getter(this);
+  double get right => _blink.BlinkClientRect.right_Getter(this);
 
   @DomName('ClientRect.top')
   @DocsEditable()
-  double get top => _blink.BlinkClientRect.$top_Getter(this);
+  double get top => _blink.BlinkClientRect.top_Getter(this);
 
   @DomName('ClientRect.width')
   @DocsEditable()
-  double get width => _blink.BlinkClientRect.$width_Getter(this);
+  double get width => _blink.BlinkClientRect.width_Getter(this);
 }
 
 /**
@@ -32304,15 +32304,15 @@
 
   @DomName('ClientRectList.length')
   @DocsEditable()
-  int get length => _blink.BlinkClientRectList.$length_Getter(this);
+  int get length => _blink.BlinkClientRectList.length_Getter(this);
 
   Rectangle operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkClientRectList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkClientRectList.item_Callback_ul(this, index);
   }
 
-  Rectangle _nativeIndexedGetter(int index) => _blink.BlinkClientRectList.$NativeIndexed_Getter(this, index);
+  Rectangle _nativeIndexedGetter(int index) => _blink.BlinkClientRectList.item_Callback_ul(this, index);
 
   void operator[]=(int index, Rectangle value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -32354,7 +32354,7 @@
 
   @DomName('ClientRectList.item')
   @DocsEditable()
-  Rectangle item(int index) => _blink.BlinkClientRectList.$item_Callback(this, index);
+  Rectangle item(int index) => _blink.BlinkClientRectList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -32388,15 +32388,15 @@
 
   @DomName('CSSRuleList.length')
   @DocsEditable()
-  int get length => _blink.BlinkCSSRuleList.$length_Getter(this);
+  int get length => _blink.BlinkCSSRuleList.length_Getter(this);
 
   CssRule operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkCSSRuleList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkCSSRuleList.item_Callback_ul(this, index);
   }
 
-  CssRule _nativeIndexedGetter(int index) => _blink.BlinkCSSRuleList.$NativeIndexed_Getter(this, index);
+  CssRule _nativeIndexedGetter(int index) => _blink.BlinkCSSRuleList.item_Callback_ul(this, index);
 
   void operator[]=(int index, CssRule value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -32438,7 +32438,7 @@
 
   @DomName('CSSRuleList.item')
   @DocsEditable()
-  CssRule item(int index) => _blink.BlinkCSSRuleList.$item_Callback(this, index);
+  CssRule item(int index) => _blink.BlinkCSSRuleList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -32458,15 +32458,15 @@
 
   @DomName('CSSValueList.length')
   @DocsEditable()
-  int get length => _blink.BlinkCSSValueList.$length_Getter(this);
+  int get length => _blink.BlinkCSSValueList.length_Getter(this);
 
   _CSSValue operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkCSSValueList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkCSSValueList.item_Callback_ul(this, index);
   }
 
-  _CSSValue _nativeIndexedGetter(int index) => _blink.BlinkCSSValueList.$NativeIndexed_Getter(this, index);
+  _CSSValue _nativeIndexedGetter(int index) => _blink.BlinkCSSValueList.item_Callback_ul(this, index);
 
   void operator[]=(int index, _CSSValue value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -32508,7 +32508,7 @@
 
   @DomName('CSSValueList.item')
   @DocsEditable()
-  _CSSValue item(int index) => _blink.BlinkCSSValueList.$item_Callback(this, index);
+  _CSSValue item(int index) => _blink.BlinkCSSValueList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -32618,26 +32618,26 @@
   factory _DomPoint(num x, num y) => _create(x, y);
 
   @DocsEditable()
-  static _DomPoint _create(x, y) => _blink.BlinkWebKitPoint.$constructorCallback(x, y);
+  static _DomPoint _create(x, y) => _blink.BlinkWebKitPoint.constructorCallback_float_float(x, y);
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
   @DomName('WebKitPoint.x')
   @DocsEditable()
-  num get x => _blink.BlinkWebKitPoint.$x_Getter(this);
+  num get x => _blink.BlinkWebKitPoint.x_Getter(this);
 
   @DomName('WebKitPoint.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkWebKitPoint.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkWebKitPoint.x_Setter_float(this, value);
 
   @DomName('WebKitPoint.y')
   @DocsEditable()
-  num get y => _blink.BlinkWebKitPoint.$y_Getter(this);
+  num get y => _blink.BlinkWebKitPoint.y_Getter(this);
 
   @DomName('WebKitPoint.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkWebKitPoint.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkWebKitPoint.y_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -32690,7 +32690,7 @@
   @DomName('FileReaderSync.FileReaderSync')
   @DocsEditable()
   factory _FileReaderSync() {
-    return _blink.BlinkFileReaderSync.$_create_1constructorCallback();
+    return _blink.BlinkFileReaderSync.constructorCallback();
   }
 
 }
@@ -32727,15 +32727,15 @@
 
   @DomName('GamepadList.length')
   @DocsEditable()
-  int get length => _blink.BlinkGamepadList.$length_Getter(this);
+  int get length => _blink.BlinkGamepadList.length_Getter(this);
 
   Gamepad operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkGamepadList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkGamepadList.item_Callback_ul(this, index);
   }
 
-  Gamepad _nativeIndexedGetter(int index) => _blink.BlinkGamepadList.$NativeIndexed_Getter(this, index);
+  Gamepad _nativeIndexedGetter(int index) => _blink.BlinkGamepadList.item_Callback_ul(this, index);
 
   void operator[]=(int index, Gamepad value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -32777,7 +32777,7 @@
 
   @DomName('GamepadList.item')
   @DocsEditable()
-  Gamepad item(int index) => _blink.BlinkGamepadList.$item_Callback(this, index);
+  Gamepad item(int index) => _blink.BlinkGamepadList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -32797,7 +32797,7 @@
 
   @DomName('HTMLAllCollection.item')
   @DocsEditable()
-  Element _item(int index) => _blink.BlinkHTMLAllCollection.$item_Callback(this, index);
+  Element _item(int index) => _blink.BlinkHTMLAllCollection.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -32971,15 +32971,15 @@
 
   @DomName('NamedNodeMap.length')
   @DocsEditable()
-  int get length => _blink.BlinkNamedNodeMap.$length_Getter(this);
+  int get length => _blink.BlinkNamedNodeMap.length_Getter(this);
 
   Node operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkNamedNodeMap.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkNamedNodeMap.item_Callback_ul(this, index);
   }
 
-  Node _nativeIndexedGetter(int index) => _blink.BlinkNamedNodeMap.$NativeIndexed_Getter(this, index);
+  Node _nativeIndexedGetter(int index) => _blink.BlinkNamedNodeMap.item_Callback_ul(this, index);
 
   void operator[]=(int index, Node value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -33021,35 +33021,35 @@
 
   @DomName('NamedNodeMap.__getter__')
   @DocsEditable()
-  Node __getter__(String name) => _blink.BlinkNamedNodeMap.$__getter___Callback(this, name);
+  Node __getter__(String name) => _blink.BlinkNamedNodeMap.$__getter___Callback_DOMString(this, name);
 
   @DomName('NamedNodeMap.getNamedItem')
   @DocsEditable()
-  Node getNamedItem(String name) => _blink.BlinkNamedNodeMap.$getNamedItem_Callback(this, name);
+  Node getNamedItem(String name) => _blink.BlinkNamedNodeMap.getNamedItem_Callback_DOMString(this, name);
 
   @DomName('NamedNodeMap.getNamedItemNS')
   @DocsEditable()
-  Node getNamedItemNS(String namespaceURI, String localName) => _blink.BlinkNamedNodeMap.$getNamedItemNS_Callback(this, namespaceURI, localName);
+  Node getNamedItemNS(String namespaceURI, String localName) => _blink.BlinkNamedNodeMap.getNamedItemNS_Callback_DOMString_DOMString(this, namespaceURI, localName);
 
   @DomName('NamedNodeMap.item')
   @DocsEditable()
-  Node item(int index) => _blink.BlinkNamedNodeMap.$item_Callback(this, index);
+  Node item(int index) => _blink.BlinkNamedNodeMap.item_Callback_ul(this, index);
 
   @DomName('NamedNodeMap.removeNamedItem')
   @DocsEditable()
-  Node removeNamedItem(String name) => _blink.BlinkNamedNodeMap.$removeNamedItem_Callback(this, name);
+  Node removeNamedItem(String name) => _blink.BlinkNamedNodeMap.removeNamedItem_Callback_DOMString(this, name);
 
   @DomName('NamedNodeMap.removeNamedItemNS')
   @DocsEditable()
-  Node removeNamedItemNS(String namespaceURI, String localName) => _blink.BlinkNamedNodeMap.$removeNamedItemNS_Callback(this, namespaceURI, localName);
+  Node removeNamedItemNS(String namespaceURI, String localName) => _blink.BlinkNamedNodeMap.removeNamedItemNS_Callback_DOMString_DOMString(this, namespaceURI, localName);
 
   @DomName('NamedNodeMap.setNamedItem')
   @DocsEditable()
-  Node setNamedItem(Node node) => _blink.BlinkNamedNodeMap.$setNamedItem_Callback(this, node);
+  Node setNamedItem(Node node) => _blink.BlinkNamedNodeMap.setNamedItem_Callback_Node(this, node);
 
   @DomName('NamedNodeMap.setNamedItemNS')
   @DocsEditable()
-  Node setNamedItemNS(Node node) => _blink.BlinkNamedNodeMap.$setNamedItemNS_Callback(this, node);
+  Node setNamedItemNS(Node node) => _blink.BlinkNamedNodeMap.setNamedItemNS_Callback_Node(this, node);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -33180,15 +33180,15 @@
 
   @DomName('SpeechInputResultList.length')
   @DocsEditable()
-  int get length => _blink.BlinkSpeechInputResultList.$length_Getter(this);
+  int get length => _blink.BlinkSpeechInputResultList.length_Getter(this);
 
   SpeechInputResult operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkSpeechInputResultList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkSpeechInputResultList.item_Callback_ul(this, index);
   }
 
-  SpeechInputResult _nativeIndexedGetter(int index) => _blink.BlinkSpeechInputResultList.$NativeIndexed_Getter(this, index);
+  SpeechInputResult _nativeIndexedGetter(int index) => _blink.BlinkSpeechInputResultList.item_Callback_ul(this, index);
 
   void operator[]=(int index, SpeechInputResult value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -33230,7 +33230,7 @@
 
   @DomName('SpeechInputResultList.item')
   @DocsEditable()
-  SpeechInputResult item(int index) => _blink.BlinkSpeechInputResultList.$item_Callback(this, index);
+  SpeechInputResult item(int index) => _blink.BlinkSpeechInputResultList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -33250,15 +33250,15 @@
 
   @DomName('SpeechRecognitionResultList.length')
   @DocsEditable()
-  int get length => _blink.BlinkSpeechRecognitionResultList.$length_Getter(this);
+  int get length => _blink.BlinkSpeechRecognitionResultList.length_Getter(this);
 
   SpeechRecognitionResult operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkSpeechRecognitionResultList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkSpeechRecognitionResultList.item_Callback_ul(this, index);
   }
 
-  SpeechRecognitionResult _nativeIndexedGetter(int index) => _blink.BlinkSpeechRecognitionResultList.$NativeIndexed_Getter(this, index);
+  SpeechRecognitionResult _nativeIndexedGetter(int index) => _blink.BlinkSpeechRecognitionResultList.item_Callback_ul(this, index);
 
   void operator[]=(int index, SpeechRecognitionResult value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -33300,7 +33300,7 @@
 
   @DomName('SpeechRecognitionResultList.item')
   @DocsEditable()
-  SpeechRecognitionResult item(int index) => _blink.BlinkSpeechRecognitionResultList.$item_Callback(this, index);
+  SpeechRecognitionResult item(int index) => _blink.BlinkSpeechRecognitionResultList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -33318,15 +33318,15 @@
 
   @DomName('StyleSheetList.length')
   @DocsEditable()
-  int get length => _blink.BlinkStyleSheetList.$length_Getter(this);
+  int get length => _blink.BlinkStyleSheetList.length_Getter(this);
 
   StyleSheet operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkStyleSheetList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkStyleSheetList.item_Callback_ul(this, index);
   }
 
-  StyleSheet _nativeIndexedGetter(int index) => _blink.BlinkStyleSheetList.$NativeIndexed_Getter(this, index);
+  StyleSheet _nativeIndexedGetter(int index) => _blink.BlinkStyleSheetList.item_Callback_ul(this, index);
 
   void operator[]=(int index, StyleSheet value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -33368,11 +33368,11 @@
 
   @DomName('StyleSheetList.__getter__')
   @DocsEditable()
-  CssStyleSheet __getter__(String name) => _blink.BlinkStyleSheetList.$__getter___Callback(this, name);
+  CssStyleSheet __getter__(String name) => _blink.BlinkStyleSheetList.$__getter___Callback_DOMString(this, name);
 
   @DomName('StyleSheetList.item')
   @DocsEditable()
-  StyleSheet item(int index) => _blink.BlinkStyleSheetList.$item_Callback(this, index);
+  StyleSheet item(int index) => _blink.BlinkStyleSheetList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -33427,7 +33427,7 @@
   @DomName('WebKitCSSMatrix.WebKitCSSMatrix')
   @DocsEditable()
   factory _WebKitCSSMatrix([String cssValue]) {
-    return _blink.BlinkWebKitCSSMatrix.$_create_1constructorCallback(cssValue);
+    return _blink.BlinkWebKitCSSMatrix.constructorCallback_DOMString(cssValue);
   }
 
 }
@@ -33464,7 +33464,7 @@
   @DomName('WebKitMediaSource.WebKitMediaSource')
   @DocsEditable()
   factory _WebKitMediaSource() {
-    return _blink.BlinkWebKitMediaSource.$_create_1constructorCallback();
+    return _blink.BlinkWebKitMediaSource.constructorCallback();
   }
 
 }
@@ -33515,7 +33515,7 @@
   @DomName('WebKitSourceBufferList.item')
   @DocsEditable()
   @Experimental() // untriaged
-  _WebKitSourceBuffer _item(int index) => _blink.BlinkWebKitSourceBufferList.$item_Callback(this, index);
+  _WebKitSourceBuffer _item(int index) => _blink.BlinkWebKitSourceBufferList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -33535,22 +33535,22 @@
   @DomName('WindowTimers.clearInterval')
   @DocsEditable()
   @Experimental() // untriaged
-  void _clearInterval(int handle) => _blink.BlinkWindowTimers.$clearInterval_Callback(this, handle);
+  void _clearInterval(int handle) => _blink.BlinkWindowTimers.clearInterval_Callback_long(this, handle);
 
   @DomName('WindowTimers.clearTimeout')
   @DocsEditable()
   @Experimental() // untriaged
-  void _clearTimeout(int handle) => _blink.BlinkWindowTimers.$clearTimeout_Callback(this, handle);
+  void _clearTimeout(int handle) => _blink.BlinkWindowTimers.clearTimeout_Callback_long(this, handle);
 
   @DomName('WindowTimers.setInterval')
   @DocsEditable()
   @Experimental() // untriaged
-  int _setInterval(Object handler, int timeout) => _blink.BlinkWindowTimers.$setInterval_Callback(this, handler, timeout);
+  int _setInterval(Object handler, int timeout) => _blink.BlinkWindowTimers.setInterval_Callback_ScriptValue_long(this, handler, timeout);
 
   @DomName('WindowTimers.setTimeout')
   @DocsEditable()
   @Experimental() // untriaged
-  int _setTimeout(Object handler, int timeout) => _blink.BlinkWindowTimers.$setTimeout_Callback(this, handler, timeout);
+  int _setTimeout(Object handler, int timeout) => _blink.BlinkWindowTimers.setTimeout_Callback_ScriptValue_long(this, handler, timeout);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
diff --git a/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart b/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
index 207576b..a54b026 100644
--- a/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
+++ b/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
@@ -80,41 +80,41 @@
 
   @DomName('IDBCursor.direction')
   @DocsEditable()
-  String get direction => _blink.BlinkIDBCursor.$direction_Getter(this);
+  String get direction => _blink.BlinkIDBCursor.direction_Getter(this);
 
   @DomName('IDBCursor.key')
   @DocsEditable()
-  Object get key => _blink.BlinkIDBCursor.$key_Getter(this);
+  Object get key => _blink.BlinkIDBCursor.key_Getter(this);
 
   @DomName('IDBCursor.primaryKey')
   @DocsEditable()
-  Object get primaryKey => _blink.BlinkIDBCursor.$primaryKey_Getter(this);
+  Object get primaryKey => _blink.BlinkIDBCursor.primaryKey_Getter(this);
 
   @DomName('IDBCursor.source')
   @DocsEditable()
-  Object get source => _blink.BlinkIDBCursor.$source_Getter(this);
+  Object get source => _blink.BlinkIDBCursor.source_Getter(this);
 
   @DomName('IDBCursor.advance')
   @DocsEditable()
-  void advance(int count) => _blink.BlinkIDBCursor.$advance_Callback(this, count);
+  void advance(int count) => _blink.BlinkIDBCursor.advance_Callback_ul(this, count);
 
   @DomName('IDBCursor.continuePrimaryKey')
   @DocsEditable()
   @Experimental() // untriaged
-  void continuePrimaryKey(Object key, Object primaryKey) => _blink.BlinkIDBCursor.$continuePrimaryKey_Callback(this, key, primaryKey);
+  void continuePrimaryKey(Object key, Object primaryKey) => _blink.BlinkIDBCursor.continuePrimaryKey_Callback_ScriptValue_ScriptValue(this, key, primaryKey);
 
   @DomName('IDBCursor.delete')
   @DocsEditable()
-  Request _delete() => _blink.BlinkIDBCursor.$delete_Callback(this);
+  Request _delete() => _blink.BlinkIDBCursor.delete_Callback(this);
 
   @DomName('IDBCursor.next')
   @DocsEditable()
   @Experimental() // non-standard
-  void next([Object key]) => _blink.BlinkIDBCursor.$next_Callback(this, key);
+  void next([Object key]) => _blink.BlinkIDBCursor.continue_Callback_ScriptValue(this, key);
 
   @DomName('IDBCursor.update')
   @DocsEditable()
-  Request _update(Object value) => _blink.BlinkIDBCursor.$update_Callback(this, value);
+  Request _update(Object value) => _blink.BlinkIDBCursor.update_Callback_ScriptValue(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -133,7 +133,7 @@
 
   @DomName('IDBCursorWithValue.value')
   @DocsEditable()
-  Object get value => _blink.BlinkIDBCursorWithValue.$value_Getter(this);
+  Object get value => _blink.BlinkIDBCursorWithValue.value_Getter(this);
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -216,52 +216,52 @@
 
   @DomName('IDBDatabase.name')
   @DocsEditable()
-  String get name => _blink.BlinkIDBDatabase.$name_Getter(this);
+  String get name => _blink.BlinkIDBDatabase.name_Getter(this);
 
   @DomName('IDBDatabase.objectStoreNames')
   @DocsEditable()
-  List<String> get objectStoreNames => _blink.BlinkIDBDatabase.$objectStoreNames_Getter(this);
+  List<String> get objectStoreNames => _blink.BlinkIDBDatabase.objectStoreNames_Getter(this);
 
   @DomName('IDBDatabase.version')
   @DocsEditable()
-  Object get version => _blink.BlinkIDBDatabase.$version_Getter(this);
+  Object get version => _blink.BlinkIDBDatabase.version_Getter(this);
 
   @DomName('IDBDatabase.close')
   @DocsEditable()
-  void close() => _blink.BlinkIDBDatabase.$close_Callback(this);
+  void close() => _blink.BlinkIDBDatabase.close_Callback(this);
 
   @DomName('IDBDatabase.createObjectStore')
   @DocsEditable()
-  ObjectStore _createObjectStore(String name, [Map options]) => _blink.BlinkIDBDatabase.$createObjectStore_Callback(this, name, options);
+  ObjectStore _createObjectStore(String name, [Map options]) => _blink.BlinkIDBDatabase.createObjectStore_Callback_DOMString_Dictionary(this, name, options);
 
   @DomName('IDBDatabase.deleteObjectStore')
   @DocsEditable()
-  void deleteObjectStore(String name) => _blink.BlinkIDBDatabase.$deleteObjectStore_Callback(this, name);
+  void deleteObjectStore(String name) => _blink.BlinkIDBDatabase.deleteObjectStore_Callback_DOMString(this, name);
 
   Transaction transaction(storeName_OR_storeNames, String mode) {
     if ((mode is String || mode == null) && (storeName_OR_storeNames is DomStringList || storeName_OR_storeNames == null)) {
-      return _blink.BlinkIDBDatabase.$_transaction_1_Callback(this, storeName_OR_storeNames, mode);
+      return _blink.BlinkIDBDatabase.transaction_Callback_DOMStringList_DOMString(this, storeName_OR_storeNames, mode);
     }
     if ((mode is String || mode == null) && (storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null)) {
-      return _blink.BlinkIDBDatabase.$_transaction_2_Callback(this, storeName_OR_storeNames, mode);
+      return _blink.BlinkIDBDatabase.transaction_Callback_SEQ_DOMString_SEQ_DOMString(this, storeName_OR_storeNames, mode);
     }
     if ((mode is String || mode == null) && (storeName_OR_storeNames is String || storeName_OR_storeNames == null)) {
-      return _blink.BlinkIDBDatabase.$_transaction_3_Callback(this, storeName_OR_storeNames, mode);
+      return _blink.BlinkIDBDatabase.transaction_Callback_DOMString_DOMString(this, storeName_OR_storeNames, mode);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('IDBDatabase.transactionList')
   @DocsEditable()
-  Transaction transactionList(List<String> storeNames, String mode) => _blink.BlinkIDBDatabase.$transactionList_Callback(this, storeNames, mode);
+  Transaction transactionList(List<String> storeNames, String mode) => _blink.BlinkIDBDatabase.transaction_Callback_SEQ_DOMString_SEQ_DOMString(this, storeNames, mode);
 
   @DomName('IDBDatabase.transactionStore')
   @DocsEditable()
-  Transaction transactionStore(String storeName, String mode) => _blink.BlinkIDBDatabase.$transactionStore_Callback(this, storeName, mode);
+  Transaction transactionStore(String storeName, String mode) => _blink.BlinkIDBDatabase.transaction_Callback_DOMString_DOMString(this, storeName, mode);
 
   @DomName('IDBDatabase.transactionStores')
   @DocsEditable()
-  Transaction transactionStores(List<String> storeNames, String mode) => _blink.BlinkIDBDatabase.$transactionStores_Callback(this, storeNames, mode);
+  Transaction transactionStores(List<String> storeNames, String mode) => _blink.BlinkIDBDatabase.transaction_Callback_DOMStringList_DOMString(this, storeNames, mode);
 
   /// Stream of `abort` events handled by this [Database].
   @DomName('IDBDatabase.onabort')
@@ -377,17 +377,17 @@
 
   @DomName('IDBFactory.cmp')
   @DocsEditable()
-  int cmp(Object first, Object second) => _blink.BlinkIDBFactory.$cmp_Callback(this, first, second);
+  int cmp(Object first, Object second) => _blink.BlinkIDBFactory.cmp_Callback_ScriptValue_ScriptValue(this, first, second);
 
   @DomName('IDBFactory.deleteDatabase')
   @DocsEditable()
-  OpenDBRequest _deleteDatabase(String name) => _blink.BlinkIDBFactory.$deleteDatabase_Callback(this, name);
+  OpenDBRequest _deleteDatabase(String name) => _blink.BlinkIDBFactory.deleteDatabase_Callback_DOMString(this, name);
 
   OpenDBRequest _open(String name, [int version]) {
     if (version != null) {
-      return _blink.BlinkIDBFactory.$_open_1_Callback(this, name, version);
+      return _blink.BlinkIDBFactory.open_Callback_DOMString_ull(this, name, version);
     }
-    return _blink.BlinkIDBFactory.$_open_2_Callback(this, name);
+    return _blink.BlinkIDBFactory.open_Callback_DOMString(this, name);
   }
 
   @DomName('IDBFactory.webkitGetDatabaseNames')
@@ -395,7 +395,7 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  Request _webkitGetDatabaseNames() => _blink.BlinkIDBFactory.$webkitGetDatabaseNames_Callback(this);
+  Request _webkitGetDatabaseNames() => _blink.BlinkIDBFactory.webkitGetDatabaseNames_Callback(this);
 
 }
 
@@ -513,43 +513,43 @@
 
   @DomName('IDBIndex.keyPath')
   @DocsEditable()
-  Object get keyPath => _blink.BlinkIDBIndex.$keyPath_Getter(this);
+  Object get keyPath => _blink.BlinkIDBIndex.keyPath_Getter(this);
 
   @DomName('IDBIndex.multiEntry')
   @DocsEditable()
-  bool get multiEntry => _blink.BlinkIDBIndex.$multiEntry_Getter(this);
+  bool get multiEntry => _blink.BlinkIDBIndex.multiEntry_Getter(this);
 
   @DomName('IDBIndex.name')
   @DocsEditable()
-  String get name => _blink.BlinkIDBIndex.$name_Getter(this);
+  String get name => _blink.BlinkIDBIndex.name_Getter(this);
 
   @DomName('IDBIndex.objectStore')
   @DocsEditable()
-  ObjectStore get objectStore => _blink.BlinkIDBIndex.$objectStore_Getter(this);
+  ObjectStore get objectStore => _blink.BlinkIDBIndex.objectStore_Getter(this);
 
   @DomName('IDBIndex.unique')
   @DocsEditable()
-  bool get unique => _blink.BlinkIDBIndex.$unique_Getter(this);
+  bool get unique => _blink.BlinkIDBIndex.unique_Getter(this);
 
   @DomName('IDBIndex.count')
   @DocsEditable()
-  Request _count(Object key) => _blink.BlinkIDBIndex.$count_Callback(this, key);
+  Request _count(Object key) => _blink.BlinkIDBIndex.count_Callback_ScriptValue(this, key);
 
   @DomName('IDBIndex.get')
   @DocsEditable()
-  Request _get(Object key) => _blink.BlinkIDBIndex.$get_Callback(this, key);
+  Request _get(Object key) => _blink.BlinkIDBIndex.get_Callback_ScriptValue(this, key);
 
   @DomName('IDBIndex.getKey')
   @DocsEditable()
-  Request _getKey(Object key) => _blink.BlinkIDBIndex.$getKey_Callback(this, key);
+  Request _getKey(Object key) => _blink.BlinkIDBIndex.getKey_Callback_ScriptValue(this, key);
 
   @DomName('IDBIndex.openCursor')
   @DocsEditable()
-  Request _openCursor(Object key, [String direction]) => _blink.BlinkIDBIndex.$openCursor_Callback(this, key, direction);
+  Request _openCursor(Object key, [String direction]) => _blink.BlinkIDBIndex.openCursor_Callback_ScriptValue_DOMString(this, key, direction);
 
   @DomName('IDBIndex.openKeyCursor')
   @DocsEditable()
-  Request _openKeyCursor(Object key, [String direction]) => _blink.BlinkIDBIndex.$openKeyCursor_Callback(this, key, direction);
+  Request _openKeyCursor(Object key, [String direction]) => _blink.BlinkIDBIndex.openKeyCursor_Callback_ScriptValue_DOMString(this, key, direction);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -583,39 +583,39 @@
 
   @DomName('IDBKeyRange.lower')
   @DocsEditable()
-  Object get lower => _blink.BlinkIDBKeyRange.$lower_Getter(this);
+  Object get lower => _blink.BlinkIDBKeyRange.lower_Getter(this);
 
   @DomName('IDBKeyRange.lowerOpen')
   @DocsEditable()
-  bool get lowerOpen => _blink.BlinkIDBKeyRange.$lowerOpen_Getter(this);
+  bool get lowerOpen => _blink.BlinkIDBKeyRange.lowerOpen_Getter(this);
 
   @DomName('IDBKeyRange.upper')
   @DocsEditable()
-  Object get upper => _blink.BlinkIDBKeyRange.$upper_Getter(this);
+  Object get upper => _blink.BlinkIDBKeyRange.upper_Getter(this);
 
   @DomName('IDBKeyRange.upperOpen')
   @DocsEditable()
-  bool get upperOpen => _blink.BlinkIDBKeyRange.$upperOpen_Getter(this);
+  bool get upperOpen => _blink.BlinkIDBKeyRange.upperOpen_Getter(this);
 
   @DomName('IDBKeyRange.bound_')
   @DocsEditable()
   @Experimental() // non-standard
-  static KeyRange bound_(Object lower, Object upper, [bool lowerOpen, bool upperOpen]) => _blink.BlinkIDBKeyRange.$bound__Callback(lower, upper, lowerOpen, upperOpen);
+  static KeyRange bound_(Object lower, Object upper, [bool lowerOpen, bool upperOpen]) => _blink.BlinkIDBKeyRange.bound_Callback_ScriptValue_ScriptValue_boolean_boolean(lower, upper, lowerOpen, upperOpen);
 
   @DomName('IDBKeyRange.lowerBound_')
   @DocsEditable()
   @Experimental() // non-standard
-  static KeyRange lowerBound_(Object bound, [bool open]) => _blink.BlinkIDBKeyRange.$lowerBound__Callback(bound, open);
+  static KeyRange lowerBound_(Object bound, [bool open]) => _blink.BlinkIDBKeyRange.lowerBound_Callback_ScriptValue_boolean(bound, open);
 
   @DomName('IDBKeyRange.only_')
   @DocsEditable()
   @Experimental() // non-standard
-  static KeyRange only_(Object value) => _blink.BlinkIDBKeyRange.$only__Callback(value);
+  static KeyRange only_(Object value) => _blink.BlinkIDBKeyRange.only_Callback_ScriptValue(value);
 
   @DomName('IDBKeyRange.upperBound_')
   @DocsEditable()
   @Experimental() // non-standard
-  static KeyRange upperBound_(Object bound, [bool open]) => _blink.BlinkIDBKeyRange.$upperBound__Callback(bound, open);
+  static KeyRange upperBound_(Object bound, [bool open]) => _blink.BlinkIDBKeyRange.upperBound_Callback_ScriptValue_boolean(bound, open);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -758,74 +758,74 @@
 
   @DomName('IDBObjectStore.autoIncrement')
   @DocsEditable()
-  bool get autoIncrement => _blink.BlinkIDBObjectStore.$autoIncrement_Getter(this);
+  bool get autoIncrement => _blink.BlinkIDBObjectStore.autoIncrement_Getter(this);
 
   @DomName('IDBObjectStore.indexNames')
   @DocsEditable()
-  List<String> get indexNames => _blink.BlinkIDBObjectStore.$indexNames_Getter(this);
+  List<String> get indexNames => _blink.BlinkIDBObjectStore.indexNames_Getter(this);
 
   @DomName('IDBObjectStore.keyPath')
   @DocsEditable()
-  Object get keyPath => _blink.BlinkIDBObjectStore.$keyPath_Getter(this);
+  Object get keyPath => _blink.BlinkIDBObjectStore.keyPath_Getter(this);
 
   @DomName('IDBObjectStore.name')
   @DocsEditable()
-  String get name => _blink.BlinkIDBObjectStore.$name_Getter(this);
+  String get name => _blink.BlinkIDBObjectStore.name_Getter(this);
 
   @DomName('IDBObjectStore.transaction')
   @DocsEditable()
-  Transaction get transaction => _blink.BlinkIDBObjectStore.$transaction_Getter(this);
+  Transaction get transaction => _blink.BlinkIDBObjectStore.transaction_Getter(this);
 
   @DomName('IDBObjectStore.add')
   @DocsEditable()
-  Request _add(Object value, [Object key]) => _blink.BlinkIDBObjectStore.$add_Callback(this, value, key);
+  Request _add(Object value, [Object key]) => _blink.BlinkIDBObjectStore.add_Callback_ScriptValue_ScriptValue(this, value, key);
 
   @DomName('IDBObjectStore.clear')
   @DocsEditable()
-  Request _clear() => _blink.BlinkIDBObjectStore.$clear_Callback(this);
+  Request _clear() => _blink.BlinkIDBObjectStore.clear_Callback(this);
 
   @DomName('IDBObjectStore.count')
   @DocsEditable()
-  Request _count(Object key) => _blink.BlinkIDBObjectStore.$count_Callback(this, key);
+  Request _count(Object key) => _blink.BlinkIDBObjectStore.count_Callback_ScriptValue(this, key);
 
   Index _createIndex(String name, keyPath, [Map options]) {
     if ((options is Map || options == null) && (keyPath is List<String> || keyPath == null) && (name is String || name == null)) {
-      return _blink.BlinkIDBObjectStore.$_createIndex_1_Callback(this, name, keyPath, options);
+      return _blink.BlinkIDBObjectStore.createIndex_Callback_DOMString_SEQ_DOMString_SEQ_Dictionary(this, name, keyPath, options);
     }
     if ((options is Map || options == null) && (keyPath is String || keyPath == null) && (name is String || name == null)) {
-      return _blink.BlinkIDBObjectStore.$_createIndex_2_Callback(this, name, keyPath, options);
+      return _blink.BlinkIDBObjectStore.createIndex_Callback_DOMString_DOMString_Dictionary(this, name, keyPath, options);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('IDBObjectStore.delete')
   @DocsEditable()
-  Request _delete(Object key) => _blink.BlinkIDBObjectStore.$delete_Callback(this, key);
+  Request _delete(Object key) => _blink.BlinkIDBObjectStore.delete_Callback_ScriptValue(this, key);
 
   @DomName('IDBObjectStore.deleteIndex')
   @DocsEditable()
-  void deleteIndex(String name) => _blink.BlinkIDBObjectStore.$deleteIndex_Callback(this, name);
+  void deleteIndex(String name) => _blink.BlinkIDBObjectStore.deleteIndex_Callback_DOMString(this, name);
 
   @DomName('IDBObjectStore.get')
   @DocsEditable()
-  Request _get(Object key) => _blink.BlinkIDBObjectStore.$get_Callback(this, key);
+  Request _get(Object key) => _blink.BlinkIDBObjectStore.get_Callback_ScriptValue(this, key);
 
   @DomName('IDBObjectStore.index')
   @DocsEditable()
-  Index index(String name) => _blink.BlinkIDBObjectStore.$index_Callback(this, name);
+  Index index(String name) => _blink.BlinkIDBObjectStore.index_Callback_DOMString(this, name);
 
   @DomName('IDBObjectStore.openCursor')
   @DocsEditable()
-  Request _openCursor(Object key, [String direction]) => _blink.BlinkIDBObjectStore.$openCursor_Callback(this, key, direction);
+  Request _openCursor(Object key, [String direction]) => _blink.BlinkIDBObjectStore.openCursor_Callback_ScriptValue_DOMString(this, key, direction);
 
   @DomName('IDBObjectStore.openKeyCursor')
   @DocsEditable()
   @Experimental() // untriaged
-  Request openKeyCursor(Object range, String direction) => _blink.BlinkIDBObjectStore.$openKeyCursor_Callback(this, range, direction);
+  Request openKeyCursor(Object range, String direction) => _blink.BlinkIDBObjectStore.openKeyCursor_Callback_ScriptValue_DOMString(this, range, direction);
 
   @DomName('IDBObjectStore.put')
   @DocsEditable()
-  Request _put(Object value, [Object key]) => _blink.BlinkIDBObjectStore.$put_Callback(this, value, key);
+  Request _put(Object value, [Object key]) => _blink.BlinkIDBObjectStore.put_Callback_ScriptValue_ScriptValue(this, value, key);
 
 
   /**
@@ -936,23 +936,23 @@
 
   @DomName('IDBRequest.error')
   @DocsEditable()
-  DomError get error => _blink.BlinkIDBRequest.$error_Getter(this);
+  DomError get error => _blink.BlinkIDBRequest.error_Getter(this);
 
   @DomName('IDBRequest.readyState')
   @DocsEditable()
-  String get readyState => _blink.BlinkIDBRequest.$readyState_Getter(this);
+  String get readyState => _blink.BlinkIDBRequest.readyState_Getter(this);
 
   @DomName('IDBRequest.result')
   @DocsEditable()
-  Object get result => _blink.BlinkIDBRequest.$result_Getter(this);
+  Object get result => _blink.BlinkIDBRequest.result_Getter(this);
 
   @DomName('IDBRequest.source')
   @DocsEditable()
-  Object get source => _blink.BlinkIDBRequest.$source_Getter(this);
+  Object get source => _blink.BlinkIDBRequest.source_Getter(this);
 
   @DomName('IDBRequest.transaction')
   @DocsEditable()
-  Transaction get transaction => _blink.BlinkIDBRequest.$transaction_Getter(this);
+  Transaction get transaction => _blink.BlinkIDBRequest.transaction_Getter(this);
 
   /// Stream of `error` events handled by this [Request].
   @DomName('IDBRequest.onerror')
@@ -1037,23 +1037,23 @@
 
   @DomName('IDBTransaction.db')
   @DocsEditable()
-  Database get db => _blink.BlinkIDBTransaction.$db_Getter(this);
+  Database get db => _blink.BlinkIDBTransaction.db_Getter(this);
 
   @DomName('IDBTransaction.error')
   @DocsEditable()
-  DomError get error => _blink.BlinkIDBTransaction.$error_Getter(this);
+  DomError get error => _blink.BlinkIDBTransaction.error_Getter(this);
 
   @DomName('IDBTransaction.mode')
   @DocsEditable()
-  String get mode => _blink.BlinkIDBTransaction.$mode_Getter(this);
+  String get mode => _blink.BlinkIDBTransaction.mode_Getter(this);
 
   @DomName('IDBTransaction.abort')
   @DocsEditable()
-  void abort() => _blink.BlinkIDBTransaction.$abort_Callback(this);
+  void abort() => _blink.BlinkIDBTransaction.abort_Callback(this);
 
   @DomName('IDBTransaction.objectStore')
   @DocsEditable()
-  ObjectStore objectStore(String name) => _blink.BlinkIDBTransaction.$objectStore_Callback(this, name);
+  ObjectStore objectStore(String name) => _blink.BlinkIDBTransaction.objectStore_Callback_DOMString(this, name);
 
   /// Stream of `abort` events handled by this [Transaction].
   @DomName('IDBTransaction.onabort')
@@ -1088,19 +1088,19 @@
   @DomName('IDBVersionChangeEvent.dataLoss')
   @DocsEditable()
   @Experimental() // untriaged
-  String get dataLoss => _blink.BlinkIDBVersionChangeEvent.$dataLoss_Getter(this);
+  String get dataLoss => _blink.BlinkIDBVersionChangeEvent.dataLoss_Getter(this);
 
   @DomName('IDBVersionChangeEvent.dataLossMessage')
   @DocsEditable()
   @Experimental() // untriaged
-  String get dataLossMessage => _blink.BlinkIDBVersionChangeEvent.$dataLossMessage_Getter(this);
+  String get dataLossMessage => _blink.BlinkIDBVersionChangeEvent.dataLossMessage_Getter(this);
 
   @DomName('IDBVersionChangeEvent.newVersion')
   @DocsEditable()
-  Object get newVersion => _blink.BlinkIDBVersionChangeEvent.$newVersion_Getter(this);
+  Object get newVersion => _blink.BlinkIDBVersionChangeEvent.newVersion_Getter(this);
 
   @DomName('IDBVersionChangeEvent.oldVersion')
   @DocsEditable()
-  Object get oldVersion => _blink.BlinkIDBVersionChangeEvent.$oldVersion_Getter(this);
+  Object get oldVersion => _blink.BlinkIDBVersionChangeEvent.oldVersion_Getter(this);
 
 }
diff --git a/sdk/lib/io/http_headers.dart b/sdk/lib/io/http_headers.dart
index 7a1c834..5ecddca 100644
--- a/sdk/lib/io/http_headers.dart
+++ b/sdk/lib/io/http_headers.dart
@@ -449,8 +449,7 @@
 
   _updateHostHeader() {
     bool defaultPort = _port == null || _port == _defaultPortForScheme;
-    String portPart = defaultPort ? "" : ":$_port";
-    _set("host", "$host$portPart");
+    _set("host", defaultPort ? host : "$host:$_port");
   }
 
   _foldHeader(String name) {
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index 96c55b8..332e3b2 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -84,6 +84,15 @@
    * Usually the initial [message] contains a [SendPort] so
    * that the spawner and spawnee can communicate with each other.
    *
+   * If the [paused] parameter is set to `true`,
+   * the isolate will start up in a paused state,
+   * as if by an initial call of `isolate.pause(isolate.pauseCapability)`.
+   * This allows setting up error or exit listeners on the isolate
+   * before it starts running.
+   * To resume the isolate, call `isolate.resume(isolate.pauseCapability)`.
+   *
+   * WARNING: The `pause` parameter is not implemented on all platforms yet.
+   *
    * Returns a future that will complete with an [Isolate] instance if the
    * spawning succeeded. It will complete with an error otherwise.
    */
@@ -106,11 +115,39 @@
    * When present, the parameter `args` is set to the provided [args] list.
    * When present, the parameter `message` is set to the initial [message].
    *
+   * If the [packageRoot] parameter is provided, it is used to find the location
+   * of packages imports in the spawned isolate.
+   * The `packageRoot` URI must be a "file" or "http"/"https" URI that specifies
+   * a directory. If it doesn't end in a slash, one will be added before
+   * using the URI, and any query or fragment parts are ignored.
+   * Package imports (like "package:foo/bar.dart") in the new isolate are
+   * resolved against this location, as by
+   * `packageRoot.resolve("foo/bar.dart")`.
+   * This includes the main entry [uri] if it happens to be a package-URL.
+   * If [packageRoot] is omitted, it defaults to the same URI that
+   * the current isolate is using.
+   *
+   * WARNING: The [packageRoot] parameter is not implemented on any
+   * platform yet.
+   *
+   * If the [paused] parameter is set to `true`,
+   * the isolate will start up in a paused state,
+   * as if by an initial call of `isolate.pause(isolate.pauseCapability)`.
+   * This allows setting up error or exit listeners on the isolate
+   * before it starts running.
+   * To resume the isolate, call `isolate.resume(isolate.pauseCapability)`.
+   *
+   * WARNING: The `pause` parameter is not implemented on all platforms yet.
+   *
    * Returns a future that will complete with an [Isolate] instance if the
    * spawning succeeded. It will complete with an error otherwise.
    */
   external static Future<Isolate> spawnUri(
-      Uri uri, List<String> args, var message, { bool paused: false });
+      Uri uri,
+      List<String> args,
+      var message,
+      {bool paused: false,
+       Uri packageRoot});
 
   /**
    * Requests the isolate to pause.
diff --git a/sdk/lib/svg/dartium/svg_dartium.dart b/sdk/lib/svg/dartium/svg_dartium.dart
index c2bf722..eb7f251 100644
--- a/sdk/lib/svg/dartium/svg_dartium.dart
+++ b/sdk/lib/svg/dartium/svg_dartium.dart
@@ -200,11 +200,11 @@
 
   @DomName('SVGAElement.target')
   @DocsEditable()
-  AnimatedString get target => _blink.BlinkSVGAElement.$target_Getter(this);
+  AnimatedString get target => _blink.BlinkSVGAElement.target_Getter(this);
 
   @DomName('SVGAElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGAElement.$href_Getter(this);
+  AnimatedString get href => _blink.BlinkSVGAElement.href_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -239,23 +239,23 @@
 
   @DomName('SVGAltGlyphElement.format')
   @DocsEditable()
-  String get format => _blink.BlinkSVGAltGlyphElement.$format_Getter(this);
+  String get format => _blink.BlinkSVGAltGlyphElement.format_Getter(this);
 
   @DomName('SVGAltGlyphElement.format')
   @DocsEditable()
-  void set format(String value) => _blink.BlinkSVGAltGlyphElement.$format_Setter(this, value);
+  void set format(String value) => _blink.BlinkSVGAltGlyphElement.format_Setter_DOMString(this, value);
 
   @DomName('SVGAltGlyphElement.glyphRef')
   @DocsEditable()
-  String get glyphRef => _blink.BlinkSVGAltGlyphElement.$glyphRef_Getter(this);
+  String get glyphRef => _blink.BlinkSVGAltGlyphElement.glyphRef_Getter(this);
 
   @DomName('SVGAltGlyphElement.glyphRef')
   @DocsEditable()
-  void set glyphRef(String value) => _blink.BlinkSVGAltGlyphElement.$glyphRef_Setter(this, value);
+  void set glyphRef(String value) => _blink.BlinkSVGAltGlyphElement.glyphRef_Setter_DOMString(this, value);
 
   @DomName('SVGAltGlyphElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGAltGlyphElement.$href_Getter(this);
+  AnimatedString get href => _blink.BlinkSVGAltGlyphElement.href_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -294,39 +294,39 @@
 
   @DomName('SVGAngle.unitType')
   @DocsEditable()
-  int get unitType => _blink.BlinkSVGAngle.$unitType_Getter(this);
+  int get unitType => _blink.BlinkSVGAngle.unitType_Getter(this);
 
   @DomName('SVGAngle.value')
   @DocsEditable()
-  num get value => _blink.BlinkSVGAngle.$value_Getter(this);
+  num get value => _blink.BlinkSVGAngle.value_Getter(this);
 
   @DomName('SVGAngle.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkSVGAngle.$value_Setter(this, value);
+  void set value(num value) => _blink.BlinkSVGAngle.value_Setter_float(this, value);
 
   @DomName('SVGAngle.valueAsString')
   @DocsEditable()
-  String get valueAsString => _blink.BlinkSVGAngle.$valueAsString_Getter(this);
+  String get valueAsString => _blink.BlinkSVGAngle.valueAsString_Getter(this);
 
   @DomName('SVGAngle.valueAsString')
   @DocsEditable()
-  void set valueAsString(String value) => _blink.BlinkSVGAngle.$valueAsString_Setter(this, value);
+  void set valueAsString(String value) => _blink.BlinkSVGAngle.valueAsString_Setter_DOMString(this, value);
 
   @DomName('SVGAngle.valueInSpecifiedUnits')
   @DocsEditable()
-  num get valueInSpecifiedUnits => _blink.BlinkSVGAngle.$valueInSpecifiedUnits_Getter(this);
+  num get valueInSpecifiedUnits => _blink.BlinkSVGAngle.valueInSpecifiedUnits_Getter(this);
 
   @DomName('SVGAngle.valueInSpecifiedUnits')
   @DocsEditable()
-  void set valueInSpecifiedUnits(num value) => _blink.BlinkSVGAngle.$valueInSpecifiedUnits_Setter(this, value);
+  void set valueInSpecifiedUnits(num value) => _blink.BlinkSVGAngle.valueInSpecifiedUnits_Setter_float(this, value);
 
   @DomName('SVGAngle.convertToSpecifiedUnits')
   @DocsEditable()
-  void convertToSpecifiedUnits(int unitType) => _blink.BlinkSVGAngle.$convertToSpecifiedUnits_Callback(this, unitType);
+  void convertToSpecifiedUnits(int unitType) => _blink.BlinkSVGAngle.convertToSpecifiedUnits_Callback_us(this, unitType);
 
   @DomName('SVGAngle.newValueSpecifiedUnits')
   @DocsEditable()
-  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) => _blink.BlinkSVGAngle.$newValueSpecifiedUnits_Callback(this, unitType, valueInSpecifiedUnits);
+  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) => _blink.BlinkSVGAngle.newValueSpecifiedUnits_Callback_us_float(this, unitType, valueInSpecifiedUnits);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -438,11 +438,11 @@
 
   @DomName('SVGAnimatedAngle.animVal')
   @DocsEditable()
-  Angle get animVal => _blink.BlinkSVGAnimatedAngle.$animVal_Getter(this);
+  Angle get animVal => _blink.BlinkSVGAnimatedAngle.animVal_Getter(this);
 
   @DomName('SVGAnimatedAngle.baseVal')
   @DocsEditable()
-  Angle get baseVal => _blink.BlinkSVGAnimatedAngle.$baseVal_Getter(this);
+  Angle get baseVal => _blink.BlinkSVGAnimatedAngle.baseVal_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -461,15 +461,15 @@
 
   @DomName('SVGAnimatedBoolean.animVal')
   @DocsEditable()
-  bool get animVal => _blink.BlinkSVGAnimatedBoolean.$animVal_Getter(this);
+  bool get animVal => _blink.BlinkSVGAnimatedBoolean.animVal_Getter(this);
 
   @DomName('SVGAnimatedBoolean.baseVal')
   @DocsEditable()
-  bool get baseVal => _blink.BlinkSVGAnimatedBoolean.$baseVal_Getter(this);
+  bool get baseVal => _blink.BlinkSVGAnimatedBoolean.baseVal_Getter(this);
 
   @DomName('SVGAnimatedBoolean.baseVal')
   @DocsEditable()
-  void set baseVal(bool value) => _blink.BlinkSVGAnimatedBoolean.$baseVal_Setter(this, value);
+  void set baseVal(bool value) => _blink.BlinkSVGAnimatedBoolean.baseVal_Setter_boolean(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -488,15 +488,15 @@
 
   @DomName('SVGAnimatedEnumeration.animVal')
   @DocsEditable()
-  int get animVal => _blink.BlinkSVGAnimatedEnumeration.$animVal_Getter(this);
+  int get animVal => _blink.BlinkSVGAnimatedEnumeration.animVal_Getter(this);
 
   @DomName('SVGAnimatedEnumeration.baseVal')
   @DocsEditable()
-  int get baseVal => _blink.BlinkSVGAnimatedEnumeration.$baseVal_Getter(this);
+  int get baseVal => _blink.BlinkSVGAnimatedEnumeration.baseVal_Getter(this);
 
   @DomName('SVGAnimatedEnumeration.baseVal')
   @DocsEditable()
-  void set baseVal(int value) => _blink.BlinkSVGAnimatedEnumeration.$baseVal_Setter(this, value);
+  void set baseVal(int value) => _blink.BlinkSVGAnimatedEnumeration.baseVal_Setter_us(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -515,15 +515,15 @@
 
   @DomName('SVGAnimatedInteger.animVal')
   @DocsEditable()
-  int get animVal => _blink.BlinkSVGAnimatedInteger.$animVal_Getter(this);
+  int get animVal => _blink.BlinkSVGAnimatedInteger.animVal_Getter(this);
 
   @DomName('SVGAnimatedInteger.baseVal')
   @DocsEditable()
-  int get baseVal => _blink.BlinkSVGAnimatedInteger.$baseVal_Getter(this);
+  int get baseVal => _blink.BlinkSVGAnimatedInteger.baseVal_Getter(this);
 
   @DomName('SVGAnimatedInteger.baseVal')
   @DocsEditable()
-  void set baseVal(int value) => _blink.BlinkSVGAnimatedInteger.$baseVal_Setter(this, value);
+  void set baseVal(int value) => _blink.BlinkSVGAnimatedInteger.baseVal_Setter_long(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -542,11 +542,11 @@
 
   @DomName('SVGAnimatedLength.animVal')
   @DocsEditable()
-  Length get animVal => _blink.BlinkSVGAnimatedLength.$animVal_Getter(this);
+  Length get animVal => _blink.BlinkSVGAnimatedLength.animVal_Getter(this);
 
   @DomName('SVGAnimatedLength.baseVal')
   @DocsEditable()
-  Length get baseVal => _blink.BlinkSVGAnimatedLength.$baseVal_Getter(this);
+  Length get baseVal => _blink.BlinkSVGAnimatedLength.baseVal_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -565,11 +565,11 @@
 
   @DomName('SVGAnimatedLengthList.animVal')
   @DocsEditable()
-  LengthList get animVal => _blink.BlinkSVGAnimatedLengthList.$animVal_Getter(this);
+  LengthList get animVal => _blink.BlinkSVGAnimatedLengthList.animVal_Getter(this);
 
   @DomName('SVGAnimatedLengthList.baseVal')
   @DocsEditable()
-  LengthList get baseVal => _blink.BlinkSVGAnimatedLengthList.$baseVal_Getter(this);
+  LengthList get baseVal => _blink.BlinkSVGAnimatedLengthList.baseVal_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -588,15 +588,15 @@
 
   @DomName('SVGAnimatedNumber.animVal')
   @DocsEditable()
-  double get animVal => _blink.BlinkSVGAnimatedNumber.$animVal_Getter(this);
+  double get animVal => _blink.BlinkSVGAnimatedNumber.animVal_Getter(this);
 
   @DomName('SVGAnimatedNumber.baseVal')
   @DocsEditable()
-  num get baseVal => _blink.BlinkSVGAnimatedNumber.$baseVal_Getter(this);
+  num get baseVal => _blink.BlinkSVGAnimatedNumber.baseVal_Getter(this);
 
   @DomName('SVGAnimatedNumber.baseVal')
   @DocsEditable()
-  void set baseVal(num value) => _blink.BlinkSVGAnimatedNumber.$baseVal_Setter(this, value);
+  void set baseVal(num value) => _blink.BlinkSVGAnimatedNumber.baseVal_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -615,11 +615,11 @@
 
   @DomName('SVGAnimatedNumberList.animVal')
   @DocsEditable()
-  NumberList get animVal => _blink.BlinkSVGAnimatedNumberList.$animVal_Getter(this);
+  NumberList get animVal => _blink.BlinkSVGAnimatedNumberList.animVal_Getter(this);
 
   @DomName('SVGAnimatedNumberList.baseVal')
   @DocsEditable()
-  NumberList get baseVal => _blink.BlinkSVGAnimatedNumberList.$baseVal_Getter(this);
+  NumberList get baseVal => _blink.BlinkSVGAnimatedNumberList.baseVal_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -638,11 +638,11 @@
 
   @DomName('SVGAnimatedPreserveAspectRatio.animVal')
   @DocsEditable()
-  PreserveAspectRatio get animVal => _blink.BlinkSVGAnimatedPreserveAspectRatio.$animVal_Getter(this);
+  PreserveAspectRatio get animVal => _blink.BlinkSVGAnimatedPreserveAspectRatio.animVal_Getter(this);
 
   @DomName('SVGAnimatedPreserveAspectRatio.baseVal')
   @DocsEditable()
-  PreserveAspectRatio get baseVal => _blink.BlinkSVGAnimatedPreserveAspectRatio.$baseVal_Getter(this);
+  PreserveAspectRatio get baseVal => _blink.BlinkSVGAnimatedPreserveAspectRatio.baseVal_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -661,11 +661,11 @@
 
   @DomName('SVGAnimatedRect.animVal')
   @DocsEditable()
-  Rect get animVal => _blink.BlinkSVGAnimatedRect.$animVal_Getter(this);
+  Rect get animVal => _blink.BlinkSVGAnimatedRect.animVal_Getter(this);
 
   @DomName('SVGAnimatedRect.baseVal')
   @DocsEditable()
-  Rect get baseVal => _blink.BlinkSVGAnimatedRect.$baseVal_Getter(this);
+  Rect get baseVal => _blink.BlinkSVGAnimatedRect.baseVal_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -684,15 +684,15 @@
 
   @DomName('SVGAnimatedString.animVal')
   @DocsEditable()
-  String get animVal => _blink.BlinkSVGAnimatedString.$animVal_Getter(this);
+  String get animVal => _blink.BlinkSVGAnimatedString.animVal_Getter(this);
 
   @DomName('SVGAnimatedString.baseVal')
   @DocsEditable()
-  String get baseVal => _blink.BlinkSVGAnimatedString.$baseVal_Getter(this);
+  String get baseVal => _blink.BlinkSVGAnimatedString.baseVal_Getter(this);
 
   @DomName('SVGAnimatedString.baseVal')
   @DocsEditable()
-  void set baseVal(String value) => _blink.BlinkSVGAnimatedString.$baseVal_Setter(this, value);
+  void set baseVal(String value) => _blink.BlinkSVGAnimatedString.baseVal_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -711,11 +711,11 @@
 
   @DomName('SVGAnimatedTransformList.animVal')
   @DocsEditable()
-  TransformList get animVal => _blink.BlinkSVGAnimatedTransformList.$animVal_Getter(this);
+  TransformList get animVal => _blink.BlinkSVGAnimatedTransformList.animVal_Getter(this);
 
   @DomName('SVGAnimatedTransformList.baseVal')
   @DocsEditable()
-  TransformList get baseVal => _blink.BlinkSVGAnimatedTransformList.$baseVal_Getter(this);
+  TransformList get baseVal => _blink.BlinkSVGAnimatedTransformList.baseVal_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -744,51 +744,51 @@
 
   @DomName('SVGAnimationElement.targetElement')
   @DocsEditable()
-  SvgElement get targetElement => _blink.BlinkSVGAnimationElement.$targetElement_Getter(this);
+  SvgElement get targetElement => _blink.BlinkSVGAnimationElement.targetElement_Getter(this);
 
   @DomName('SVGAnimationElement.beginElement')
   @DocsEditable()
-  void beginElement() => _blink.BlinkSVGAnimationElement.$beginElement_Callback(this);
+  void beginElement() => _blink.BlinkSVGAnimationElement.beginElement_Callback(this);
 
   @DomName('SVGAnimationElement.beginElementAt')
   @DocsEditable()
-  void beginElementAt(num offset) => _blink.BlinkSVGAnimationElement.$beginElementAt_Callback(this, offset);
+  void beginElementAt(num offset) => _blink.BlinkSVGAnimationElement.beginElementAt_Callback_float(this, offset);
 
   @DomName('SVGAnimationElement.endElement')
   @DocsEditable()
-  void endElement() => _blink.BlinkSVGAnimationElement.$endElement_Callback(this);
+  void endElement() => _blink.BlinkSVGAnimationElement.endElement_Callback(this);
 
   @DomName('SVGAnimationElement.endElementAt')
   @DocsEditable()
-  void endElementAt(num offset) => _blink.BlinkSVGAnimationElement.$endElementAt_Callback(this, offset);
+  void endElementAt(num offset) => _blink.BlinkSVGAnimationElement.endElementAt_Callback_float(this, offset);
 
   @DomName('SVGAnimationElement.getCurrentTime')
   @DocsEditable()
-  double getCurrentTime() => _blink.BlinkSVGAnimationElement.$getCurrentTime_Callback(this);
+  double getCurrentTime() => _blink.BlinkSVGAnimationElement.getCurrentTime_Callback(this);
 
   @DomName('SVGAnimationElement.getSimpleDuration')
   @DocsEditable()
-  double getSimpleDuration() => _blink.BlinkSVGAnimationElement.$getSimpleDuration_Callback(this);
+  double getSimpleDuration() => _blink.BlinkSVGAnimationElement.getSimpleDuration_Callback(this);
 
   @DomName('SVGAnimationElement.getStartTime')
   @DocsEditable()
-  double getStartTime() => _blink.BlinkSVGAnimationElement.$getStartTime_Callback(this);
+  double getStartTime() => _blink.BlinkSVGAnimationElement.getStartTime_Callback(this);
 
   @DomName('SVGAnimationElement.requiredExtensions')
   @DocsEditable()
-  StringList get requiredExtensions => _blink.BlinkSVGAnimationElement.$requiredExtensions_Getter(this);
+  StringList get requiredExtensions => _blink.BlinkSVGAnimationElement.requiredExtensions_Getter(this);
 
   @DomName('SVGAnimationElement.requiredFeatures')
   @DocsEditable()
-  StringList get requiredFeatures => _blink.BlinkSVGAnimationElement.$requiredFeatures_Getter(this);
+  StringList get requiredFeatures => _blink.BlinkSVGAnimationElement.requiredFeatures_Getter(this);
 
   @DomName('SVGAnimationElement.systemLanguage')
   @DocsEditable()
-  StringList get systemLanguage => _blink.BlinkSVGAnimationElement.$systemLanguage_Getter(this);
+  StringList get systemLanguage => _blink.BlinkSVGAnimationElement.systemLanguage_Getter(this);
 
   @DomName('SVGAnimationElement.hasExtension')
   @DocsEditable()
-  bool hasExtension(String extension) => _blink.BlinkSVGAnimationElement.$hasExtension_Callback(this, extension);
+  bool hasExtension(String extension) => _blink.BlinkSVGAnimationElement.hasExtension_Callback_DOMString(this, extension);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -817,15 +817,15 @@
 
   @DomName('SVGCircleElement.cx')
   @DocsEditable()
-  AnimatedLength get cx => _blink.BlinkSVGCircleElement.$cx_Getter(this);
+  AnimatedLength get cx => _blink.BlinkSVGCircleElement.cx_Getter(this);
 
   @DomName('SVGCircleElement.cy')
   @DocsEditable()
-  AnimatedLength get cy => _blink.BlinkSVGCircleElement.$cy_Getter(this);
+  AnimatedLength get cy => _blink.BlinkSVGCircleElement.cy_Getter(this);
 
   @DomName('SVGCircleElement.r')
   @DocsEditable()
-  AnimatedLength get r => _blink.BlinkSVGCircleElement.$r_Getter(this);
+  AnimatedLength get r => _blink.BlinkSVGCircleElement.r_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -854,7 +854,7 @@
 
   @DomName('SVGClipPathElement.clipPathUnits')
   @DocsEditable()
-  AnimatedEnumeration get clipPathUnits => _blink.BlinkSVGClipPathElement.$clipPathUnits_Getter(this);
+  AnimatedEnumeration get clipPathUnits => _blink.BlinkSVGClipPathElement.clipPathUnits_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1368,31 +1368,31 @@
 
   @DomName('SVGElementInstance.correspondingElement')
   @DocsEditable()
-  SvgElement get correspondingElement => _blink.BlinkSVGElementInstance.$correspondingElement_Getter(this);
+  SvgElement get correspondingElement => _blink.BlinkSVGElementInstance.correspondingElement_Getter(this);
 
   @DomName('SVGElementInstance.correspondingUseElement')
   @DocsEditable()
-  UseElement get correspondingUseElement => _blink.BlinkSVGElementInstance.$correspondingUseElement_Getter(this);
+  UseElement get correspondingUseElement => _blink.BlinkSVGElementInstance.correspondingUseElement_Getter(this);
 
   @DomName('SVGElementInstance.firstChild')
   @DocsEditable()
-  ElementInstance get firstChild => _blink.BlinkSVGElementInstance.$firstChild_Getter(this);
+  ElementInstance get firstChild => _blink.BlinkSVGElementInstance.firstChild_Getter(this);
 
   @DomName('SVGElementInstance.lastChild')
   @DocsEditable()
-  ElementInstance get lastChild => _blink.BlinkSVGElementInstance.$lastChild_Getter(this);
+  ElementInstance get lastChild => _blink.BlinkSVGElementInstance.lastChild_Getter(this);
 
   @DomName('SVGElementInstance.nextSibling')
   @DocsEditable()
-  ElementInstance get nextSibling => _blink.BlinkSVGElementInstance.$nextSibling_Getter(this);
+  ElementInstance get nextSibling => _blink.BlinkSVGElementInstance.nextSibling_Getter(this);
 
   @DomName('SVGElementInstance.parentNode')
   @DocsEditable()
-  ElementInstance get parentNode => _blink.BlinkSVGElementInstance.$parentNode_Getter(this);
+  ElementInstance get parentNode => _blink.BlinkSVGElementInstance.parentNode_Getter(this);
 
   @DomName('SVGElementInstance.previousSibling')
   @DocsEditable()
-  ElementInstance get previousSibling => _blink.BlinkSVGElementInstance.$previousSibling_Getter(this);
+  ElementInstance get previousSibling => _blink.BlinkSVGElementInstance.previousSibling_Getter(this);
 
   /// Stream of `abort` events handled by this [ElementInstance].
   @DomName('SVGElementInstance.onabort')
@@ -1635,19 +1635,19 @@
 
   @DomName('SVGEllipseElement.cx')
   @DocsEditable()
-  AnimatedLength get cx => _blink.BlinkSVGEllipseElement.$cx_Getter(this);
+  AnimatedLength get cx => _blink.BlinkSVGEllipseElement.cx_Getter(this);
 
   @DomName('SVGEllipseElement.cy')
   @DocsEditable()
-  AnimatedLength get cy => _blink.BlinkSVGEllipseElement.$cy_Getter(this);
+  AnimatedLength get cy => _blink.BlinkSVGEllipseElement.cy_Getter(this);
 
   @DomName('SVGEllipseElement.rx')
   @DocsEditable()
-  AnimatedLength get rx => _blink.BlinkSVGEllipseElement.$rx_Getter(this);
+  AnimatedLength get rx => _blink.BlinkSVGEllipseElement.rx_Getter(this);
 
   @DomName('SVGEllipseElement.ry')
   @DocsEditable()
-  AnimatedLength get ry => _blink.BlinkSVGEllipseElement.$ry_Getter(this);
+  AnimatedLength get ry => _blink.BlinkSVGEllipseElement.ry_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1707,35 +1707,35 @@
 
   @DomName('SVGFEBlendElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEBlendElement.$in1_Getter(this);
+  AnimatedString get in1 => _blink.BlinkSVGFEBlendElement.in1_Getter(this);
 
   @DomName('SVGFEBlendElement.in2')
   @DocsEditable()
-  AnimatedString get in2 => _blink.BlinkSVGFEBlendElement.$in2_Getter(this);
+  AnimatedString get in2 => _blink.BlinkSVGFEBlendElement.in2_Getter(this);
 
   @DomName('SVGFEBlendElement.mode')
   @DocsEditable()
-  AnimatedEnumeration get mode => _blink.BlinkSVGFEBlendElement.$mode_Getter(this);
+  AnimatedEnumeration get mode => _blink.BlinkSVGFEBlendElement.mode_Getter(this);
 
   @DomName('SVGFEBlendElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEBlendElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFEBlendElement.height_Getter(this);
 
   @DomName('SVGFEBlendElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEBlendElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFEBlendElement.result_Getter(this);
 
   @DomName('SVGFEBlendElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEBlendElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFEBlendElement.width_Getter(this);
 
   @DomName('SVGFEBlendElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEBlendElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFEBlendElement.x_Getter(this);
 
   @DomName('SVGFEBlendElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEBlendElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFEBlendElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1791,35 +1791,35 @@
 
   @DomName('SVGFEColorMatrixElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEColorMatrixElement.$in1_Getter(this);
+  AnimatedString get in1 => _blink.BlinkSVGFEColorMatrixElement.in1_Getter(this);
 
   @DomName('SVGFEColorMatrixElement.type')
   @DocsEditable()
-  AnimatedEnumeration get type => _blink.BlinkSVGFEColorMatrixElement.$type_Getter(this);
+  AnimatedEnumeration get type => _blink.BlinkSVGFEColorMatrixElement.type_Getter(this);
 
   @DomName('SVGFEColorMatrixElement.values')
   @DocsEditable()
-  AnimatedNumberList get values => _blink.BlinkSVGFEColorMatrixElement.$values_Getter(this);
+  AnimatedNumberList get values => _blink.BlinkSVGFEColorMatrixElement.values_Getter(this);
 
   @DomName('SVGFEColorMatrixElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEColorMatrixElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFEColorMatrixElement.height_Getter(this);
 
   @DomName('SVGFEColorMatrixElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEColorMatrixElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFEColorMatrixElement.result_Getter(this);
 
   @DomName('SVGFEColorMatrixElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEColorMatrixElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFEColorMatrixElement.width_Getter(this);
 
   @DomName('SVGFEColorMatrixElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEColorMatrixElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFEColorMatrixElement.x_Getter(this);
 
   @DomName('SVGFEColorMatrixElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEColorMatrixElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFEColorMatrixElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1855,27 +1855,27 @@
 
   @DomName('SVGFEComponentTransferElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEComponentTransferElement.$in1_Getter(this);
+  AnimatedString get in1 => _blink.BlinkSVGFEComponentTransferElement.in1_Getter(this);
 
   @DomName('SVGFEComponentTransferElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEComponentTransferElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFEComponentTransferElement.height_Getter(this);
 
   @DomName('SVGFEComponentTransferElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEComponentTransferElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFEComponentTransferElement.result_Getter(this);
 
   @DomName('SVGFEComponentTransferElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEComponentTransferElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFEComponentTransferElement.width_Getter(this);
 
   @DomName('SVGFEComponentTransferElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEComponentTransferElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFEComponentTransferElement.x_Getter(this);
 
   @DomName('SVGFEComponentTransferElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEComponentTransferElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFEComponentTransferElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1928,51 +1928,51 @@
 
   @DomName('SVGFECompositeElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFECompositeElement.$in1_Getter(this);
+  AnimatedString get in1 => _blink.BlinkSVGFECompositeElement.in1_Getter(this);
 
   @DomName('SVGFECompositeElement.in2')
   @DocsEditable()
-  AnimatedString get in2 => _blink.BlinkSVGFECompositeElement.$in2_Getter(this);
+  AnimatedString get in2 => _blink.BlinkSVGFECompositeElement.in2_Getter(this);
 
   @DomName('SVGFECompositeElement.k1')
   @DocsEditable()
-  AnimatedNumber get k1 => _blink.BlinkSVGFECompositeElement.$k1_Getter(this);
+  AnimatedNumber get k1 => _blink.BlinkSVGFECompositeElement.k1_Getter(this);
 
   @DomName('SVGFECompositeElement.k2')
   @DocsEditable()
-  AnimatedNumber get k2 => _blink.BlinkSVGFECompositeElement.$k2_Getter(this);
+  AnimatedNumber get k2 => _blink.BlinkSVGFECompositeElement.k2_Getter(this);
 
   @DomName('SVGFECompositeElement.k3')
   @DocsEditable()
-  AnimatedNumber get k3 => _blink.BlinkSVGFECompositeElement.$k3_Getter(this);
+  AnimatedNumber get k3 => _blink.BlinkSVGFECompositeElement.k3_Getter(this);
 
   @DomName('SVGFECompositeElement.k4')
   @DocsEditable()
-  AnimatedNumber get k4 => _blink.BlinkSVGFECompositeElement.$k4_Getter(this);
+  AnimatedNumber get k4 => _blink.BlinkSVGFECompositeElement.k4_Getter(this);
 
   @DomName('SVGFECompositeElement.operator')
   @DocsEditable()
-  AnimatedEnumeration get operator => _blink.BlinkSVGFECompositeElement.$operator_Getter(this);
+  AnimatedEnumeration get operator => _blink.BlinkSVGFECompositeElement.operator_Getter(this);
 
   @DomName('SVGFECompositeElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFECompositeElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFECompositeElement.height_Getter(this);
 
   @DomName('SVGFECompositeElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFECompositeElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFECompositeElement.result_Getter(this);
 
   @DomName('SVGFECompositeElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFECompositeElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFECompositeElement.width_Getter(this);
 
   @DomName('SVGFECompositeElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFECompositeElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFECompositeElement.x_Getter(this);
 
   @DomName('SVGFECompositeElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFECompositeElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFECompositeElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2024,71 +2024,71 @@
 
   @DomName('SVGFEConvolveMatrixElement.bias')
   @DocsEditable()
-  AnimatedNumber get bias => _blink.BlinkSVGFEConvolveMatrixElement.$bias_Getter(this);
+  AnimatedNumber get bias => _blink.BlinkSVGFEConvolveMatrixElement.bias_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.divisor')
   @DocsEditable()
-  AnimatedNumber get divisor => _blink.BlinkSVGFEConvolveMatrixElement.$divisor_Getter(this);
+  AnimatedNumber get divisor => _blink.BlinkSVGFEConvolveMatrixElement.divisor_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.edgeMode')
   @DocsEditable()
-  AnimatedEnumeration get edgeMode => _blink.BlinkSVGFEConvolveMatrixElement.$edgeMode_Getter(this);
+  AnimatedEnumeration get edgeMode => _blink.BlinkSVGFEConvolveMatrixElement.edgeMode_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEConvolveMatrixElement.$in1_Getter(this);
+  AnimatedString get in1 => _blink.BlinkSVGFEConvolveMatrixElement.in1_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.kernelMatrix')
   @DocsEditable()
-  AnimatedNumberList get kernelMatrix => _blink.BlinkSVGFEConvolveMatrixElement.$kernelMatrix_Getter(this);
+  AnimatedNumberList get kernelMatrix => _blink.BlinkSVGFEConvolveMatrixElement.kernelMatrix_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.kernelUnitLengthX')
   @DocsEditable()
-  AnimatedNumber get kernelUnitLengthX => _blink.BlinkSVGFEConvolveMatrixElement.$kernelUnitLengthX_Getter(this);
+  AnimatedNumber get kernelUnitLengthX => _blink.BlinkSVGFEConvolveMatrixElement.kernelUnitLengthX_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.kernelUnitLengthY')
   @DocsEditable()
-  AnimatedNumber get kernelUnitLengthY => _blink.BlinkSVGFEConvolveMatrixElement.$kernelUnitLengthY_Getter(this);
+  AnimatedNumber get kernelUnitLengthY => _blink.BlinkSVGFEConvolveMatrixElement.kernelUnitLengthY_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.orderX')
   @DocsEditable()
-  AnimatedInteger get orderX => _blink.BlinkSVGFEConvolveMatrixElement.$orderX_Getter(this);
+  AnimatedInteger get orderX => _blink.BlinkSVGFEConvolveMatrixElement.orderX_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.orderY')
   @DocsEditable()
-  AnimatedInteger get orderY => _blink.BlinkSVGFEConvolveMatrixElement.$orderY_Getter(this);
+  AnimatedInteger get orderY => _blink.BlinkSVGFEConvolveMatrixElement.orderY_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.preserveAlpha')
   @DocsEditable()
-  AnimatedBoolean get preserveAlpha => _blink.BlinkSVGFEConvolveMatrixElement.$preserveAlpha_Getter(this);
+  AnimatedBoolean get preserveAlpha => _blink.BlinkSVGFEConvolveMatrixElement.preserveAlpha_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.targetX')
   @DocsEditable()
-  AnimatedInteger get targetX => _blink.BlinkSVGFEConvolveMatrixElement.$targetX_Getter(this);
+  AnimatedInteger get targetX => _blink.BlinkSVGFEConvolveMatrixElement.targetX_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.targetY')
   @DocsEditable()
-  AnimatedInteger get targetY => _blink.BlinkSVGFEConvolveMatrixElement.$targetY_Getter(this);
+  AnimatedInteger get targetY => _blink.BlinkSVGFEConvolveMatrixElement.targetY_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEConvolveMatrixElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFEConvolveMatrixElement.height_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEConvolveMatrixElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFEConvolveMatrixElement.result_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEConvolveMatrixElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFEConvolveMatrixElement.width_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEConvolveMatrixElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFEConvolveMatrixElement.x_Getter(this);
 
   @DomName('SVGFEConvolveMatrixElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEConvolveMatrixElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFEConvolveMatrixElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2124,43 +2124,43 @@
 
   @DomName('SVGFEDiffuseLightingElement.diffuseConstant')
   @DocsEditable()
-  AnimatedNumber get diffuseConstant => _blink.BlinkSVGFEDiffuseLightingElement.$diffuseConstant_Getter(this);
+  AnimatedNumber get diffuseConstant => _blink.BlinkSVGFEDiffuseLightingElement.diffuseConstant_Getter(this);
 
   @DomName('SVGFEDiffuseLightingElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEDiffuseLightingElement.$in1_Getter(this);
+  AnimatedString get in1 => _blink.BlinkSVGFEDiffuseLightingElement.in1_Getter(this);
 
   @DomName('SVGFEDiffuseLightingElement.kernelUnitLengthX')
   @DocsEditable()
-  AnimatedNumber get kernelUnitLengthX => _blink.BlinkSVGFEDiffuseLightingElement.$kernelUnitLengthX_Getter(this);
+  AnimatedNumber get kernelUnitLengthX => _blink.BlinkSVGFEDiffuseLightingElement.kernelUnitLengthX_Getter(this);
 
   @DomName('SVGFEDiffuseLightingElement.kernelUnitLengthY')
   @DocsEditable()
-  AnimatedNumber get kernelUnitLengthY => _blink.BlinkSVGFEDiffuseLightingElement.$kernelUnitLengthY_Getter(this);
+  AnimatedNumber get kernelUnitLengthY => _blink.BlinkSVGFEDiffuseLightingElement.kernelUnitLengthY_Getter(this);
 
   @DomName('SVGFEDiffuseLightingElement.surfaceScale')
   @DocsEditable()
-  AnimatedNumber get surfaceScale => _blink.BlinkSVGFEDiffuseLightingElement.$surfaceScale_Getter(this);
+  AnimatedNumber get surfaceScale => _blink.BlinkSVGFEDiffuseLightingElement.surfaceScale_Getter(this);
 
   @DomName('SVGFEDiffuseLightingElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEDiffuseLightingElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFEDiffuseLightingElement.height_Getter(this);
 
   @DomName('SVGFEDiffuseLightingElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEDiffuseLightingElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFEDiffuseLightingElement.result_Getter(this);
 
   @DomName('SVGFEDiffuseLightingElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEDiffuseLightingElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFEDiffuseLightingElement.width_Getter(this);
 
   @DomName('SVGFEDiffuseLightingElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEDiffuseLightingElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFEDiffuseLightingElement.x_Getter(this);
 
   @DomName('SVGFEDiffuseLightingElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEDiffuseLightingElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFEDiffuseLightingElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2216,43 +2216,43 @@
 
   @DomName('SVGFEDisplacementMapElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEDisplacementMapElement.$in1_Getter(this);
+  AnimatedString get in1 => _blink.BlinkSVGFEDisplacementMapElement.in1_Getter(this);
 
   @DomName('SVGFEDisplacementMapElement.in2')
   @DocsEditable()
-  AnimatedString get in2 => _blink.BlinkSVGFEDisplacementMapElement.$in2_Getter(this);
+  AnimatedString get in2 => _blink.BlinkSVGFEDisplacementMapElement.in2_Getter(this);
 
   @DomName('SVGFEDisplacementMapElement.scale')
   @DocsEditable()
-  AnimatedNumber get scale => _blink.BlinkSVGFEDisplacementMapElement.$scale_Getter(this);
+  AnimatedNumber get scale => _blink.BlinkSVGFEDisplacementMapElement.scale_Getter(this);
 
   @DomName('SVGFEDisplacementMapElement.xChannelSelector')
   @DocsEditable()
-  AnimatedEnumeration get xChannelSelector => _blink.BlinkSVGFEDisplacementMapElement.$xChannelSelector_Getter(this);
+  AnimatedEnumeration get xChannelSelector => _blink.BlinkSVGFEDisplacementMapElement.xChannelSelector_Getter(this);
 
   @DomName('SVGFEDisplacementMapElement.yChannelSelector')
   @DocsEditable()
-  AnimatedEnumeration get yChannelSelector => _blink.BlinkSVGFEDisplacementMapElement.$yChannelSelector_Getter(this);
+  AnimatedEnumeration get yChannelSelector => _blink.BlinkSVGFEDisplacementMapElement.yChannelSelector_Getter(this);
 
   @DomName('SVGFEDisplacementMapElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEDisplacementMapElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFEDisplacementMapElement.height_Getter(this);
 
   @DomName('SVGFEDisplacementMapElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEDisplacementMapElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFEDisplacementMapElement.result_Getter(this);
 
   @DomName('SVGFEDisplacementMapElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEDisplacementMapElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFEDisplacementMapElement.width_Getter(this);
 
   @DomName('SVGFEDisplacementMapElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEDisplacementMapElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFEDisplacementMapElement.x_Getter(this);
 
   @DomName('SVGFEDisplacementMapElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEDisplacementMapElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFEDisplacementMapElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2288,11 +2288,11 @@
 
   @DomName('SVGFEDistantLightElement.azimuth')
   @DocsEditable()
-  AnimatedNumber get azimuth => _blink.BlinkSVGFEDistantLightElement.$azimuth_Getter(this);
+  AnimatedNumber get azimuth => _blink.BlinkSVGFEDistantLightElement.azimuth_Getter(this);
 
   @DomName('SVGFEDistantLightElement.elevation')
   @DocsEditable()
-  AnimatedNumber get elevation => _blink.BlinkSVGFEDistantLightElement.$elevation_Getter(this);
+  AnimatedNumber get elevation => _blink.BlinkSVGFEDistantLightElement.elevation_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2328,23 +2328,23 @@
 
   @DomName('SVGFEFloodElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEFloodElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFEFloodElement.height_Getter(this);
 
   @DomName('SVGFEFloodElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEFloodElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFEFloodElement.result_Getter(this);
 
   @DomName('SVGFEFloodElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEFloodElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFEFloodElement.width_Getter(this);
 
   @DomName('SVGFEFloodElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEFloodElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFEFloodElement.x_Getter(this);
 
   @DomName('SVGFEFloodElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEFloodElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFEFloodElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2508,39 +2508,39 @@
 
   @DomName('SVGFEGaussianBlurElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEGaussianBlurElement.$in1_Getter(this);
+  AnimatedString get in1 => _blink.BlinkSVGFEGaussianBlurElement.in1_Getter(this);
 
   @DomName('SVGFEGaussianBlurElement.stdDeviationX')
   @DocsEditable()
-  AnimatedNumber get stdDeviationX => _blink.BlinkSVGFEGaussianBlurElement.$stdDeviationX_Getter(this);
+  AnimatedNumber get stdDeviationX => _blink.BlinkSVGFEGaussianBlurElement.stdDeviationX_Getter(this);
 
   @DomName('SVGFEGaussianBlurElement.stdDeviationY')
   @DocsEditable()
-  AnimatedNumber get stdDeviationY => _blink.BlinkSVGFEGaussianBlurElement.$stdDeviationY_Getter(this);
+  AnimatedNumber get stdDeviationY => _blink.BlinkSVGFEGaussianBlurElement.stdDeviationY_Getter(this);
 
   @DomName('SVGFEGaussianBlurElement.setStdDeviation')
   @DocsEditable()
-  void setStdDeviation(num stdDeviationX, num stdDeviationY) => _blink.BlinkSVGFEGaussianBlurElement.$setStdDeviation_Callback(this, stdDeviationX, stdDeviationY);
+  void setStdDeviation(num stdDeviationX, num stdDeviationY) => _blink.BlinkSVGFEGaussianBlurElement.setStdDeviation_Callback_float_float(this, stdDeviationX, stdDeviationY);
 
   @DomName('SVGFEGaussianBlurElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEGaussianBlurElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFEGaussianBlurElement.height_Getter(this);
 
   @DomName('SVGFEGaussianBlurElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEGaussianBlurElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFEGaussianBlurElement.result_Getter(this);
 
   @DomName('SVGFEGaussianBlurElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEGaussianBlurElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFEGaussianBlurElement.width_Getter(this);
 
   @DomName('SVGFEGaussianBlurElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEGaussianBlurElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFEGaussianBlurElement.x_Getter(this);
 
   @DomName('SVGFEGaussianBlurElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEGaussianBlurElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFEGaussianBlurElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2576,31 +2576,31 @@
 
   @DomName('SVGFEImageElement.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGFEImageElement.$preserveAspectRatio_Getter(this);
+  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGFEImageElement.preserveAspectRatio_Getter(this);
 
   @DomName('SVGFEImageElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEImageElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFEImageElement.height_Getter(this);
 
   @DomName('SVGFEImageElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEImageElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFEImageElement.result_Getter(this);
 
   @DomName('SVGFEImageElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEImageElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFEImageElement.width_Getter(this);
 
   @DomName('SVGFEImageElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEImageElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFEImageElement.x_Getter(this);
 
   @DomName('SVGFEImageElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEImageElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFEImageElement.y_Getter(this);
 
   @DomName('SVGFEImageElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGFEImageElement.$href_Getter(this);
+  AnimatedString get href => _blink.BlinkSVGFEImageElement.href_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2636,23 +2636,23 @@
 
   @DomName('SVGFEMergeElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEMergeElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFEMergeElement.height_Getter(this);
 
   @DomName('SVGFEMergeElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEMergeElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFEMergeElement.result_Getter(this);
 
   @DomName('SVGFEMergeElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEMergeElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFEMergeElement.width_Getter(this);
 
   @DomName('SVGFEMergeElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEMergeElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFEMergeElement.x_Getter(this);
 
   @DomName('SVGFEMergeElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEMergeElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFEMergeElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2688,7 +2688,7 @@
 
   @DomName('SVGFEMergeNodeElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEMergeNodeElement.$in1_Getter(this);
+  AnimatedString get in1 => _blink.BlinkSVGFEMergeNodeElement.in1_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2729,43 +2729,43 @@
 
   @DomName('SVGFEMorphologyElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEMorphologyElement.$in1_Getter(this);
+  AnimatedString get in1 => _blink.BlinkSVGFEMorphologyElement.in1_Getter(this);
 
   @DomName('SVGFEMorphologyElement.operator')
   @DocsEditable()
-  AnimatedEnumeration get operator => _blink.BlinkSVGFEMorphologyElement.$operator_Getter(this);
+  AnimatedEnumeration get operator => _blink.BlinkSVGFEMorphologyElement.operator_Getter(this);
 
   @DomName('SVGFEMorphologyElement.radiusX')
   @DocsEditable()
-  AnimatedNumber get radiusX => _blink.BlinkSVGFEMorphologyElement.$radiusX_Getter(this);
+  AnimatedNumber get radiusX => _blink.BlinkSVGFEMorphologyElement.radiusX_Getter(this);
 
   @DomName('SVGFEMorphologyElement.radiusY')
   @DocsEditable()
-  AnimatedNumber get radiusY => _blink.BlinkSVGFEMorphologyElement.$radiusY_Getter(this);
+  AnimatedNumber get radiusY => _blink.BlinkSVGFEMorphologyElement.radiusY_Getter(this);
 
   @DomName('SVGFEMorphologyElement.setRadius')
   @DocsEditable()
-  void setRadius(num radiusX, num radiusY) => _blink.BlinkSVGFEMorphologyElement.$setRadius_Callback(this, radiusX, radiusY);
+  void setRadius(num radiusX, num radiusY) => _blink.BlinkSVGFEMorphologyElement.setRadius_Callback_float_float(this, radiusX, radiusY);
 
   @DomName('SVGFEMorphologyElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEMorphologyElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFEMorphologyElement.height_Getter(this);
 
   @DomName('SVGFEMorphologyElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEMorphologyElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFEMorphologyElement.result_Getter(this);
 
   @DomName('SVGFEMorphologyElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEMorphologyElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFEMorphologyElement.width_Getter(this);
 
   @DomName('SVGFEMorphologyElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEMorphologyElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFEMorphologyElement.x_Getter(this);
 
   @DomName('SVGFEMorphologyElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEMorphologyElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFEMorphologyElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2801,35 +2801,35 @@
 
   @DomName('SVGFEOffsetElement.dx')
   @DocsEditable()
-  AnimatedNumber get dx => _blink.BlinkSVGFEOffsetElement.$dx_Getter(this);
+  AnimatedNumber get dx => _blink.BlinkSVGFEOffsetElement.dx_Getter(this);
 
   @DomName('SVGFEOffsetElement.dy')
   @DocsEditable()
-  AnimatedNumber get dy => _blink.BlinkSVGFEOffsetElement.$dy_Getter(this);
+  AnimatedNumber get dy => _blink.BlinkSVGFEOffsetElement.dy_Getter(this);
 
   @DomName('SVGFEOffsetElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEOffsetElement.$in1_Getter(this);
+  AnimatedString get in1 => _blink.BlinkSVGFEOffsetElement.in1_Getter(this);
 
   @DomName('SVGFEOffsetElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEOffsetElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFEOffsetElement.height_Getter(this);
 
   @DomName('SVGFEOffsetElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEOffsetElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFEOffsetElement.result_Getter(this);
 
   @DomName('SVGFEOffsetElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEOffsetElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFEOffsetElement.width_Getter(this);
 
   @DomName('SVGFEOffsetElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEOffsetElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFEOffsetElement.x_Getter(this);
 
   @DomName('SVGFEOffsetElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEOffsetElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFEOffsetElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2865,15 +2865,15 @@
 
   @DomName('SVGFEPointLightElement.x')
   @DocsEditable()
-  AnimatedNumber get x => _blink.BlinkSVGFEPointLightElement.$x_Getter(this);
+  AnimatedNumber get x => _blink.BlinkSVGFEPointLightElement.x_Getter(this);
 
   @DomName('SVGFEPointLightElement.y')
   @DocsEditable()
-  AnimatedNumber get y => _blink.BlinkSVGFEPointLightElement.$y_Getter(this);
+  AnimatedNumber get y => _blink.BlinkSVGFEPointLightElement.y_Getter(this);
 
   @DomName('SVGFEPointLightElement.z')
   @DocsEditable()
-  AnimatedNumber get z => _blink.BlinkSVGFEPointLightElement.$z_Getter(this);
+  AnimatedNumber get z => _blink.BlinkSVGFEPointLightElement.z_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2909,39 +2909,39 @@
 
   @DomName('SVGFESpecularLightingElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFESpecularLightingElement.$in1_Getter(this);
+  AnimatedString get in1 => _blink.BlinkSVGFESpecularLightingElement.in1_Getter(this);
 
   @DomName('SVGFESpecularLightingElement.specularConstant')
   @DocsEditable()
-  AnimatedNumber get specularConstant => _blink.BlinkSVGFESpecularLightingElement.$specularConstant_Getter(this);
+  AnimatedNumber get specularConstant => _blink.BlinkSVGFESpecularLightingElement.specularConstant_Getter(this);
 
   @DomName('SVGFESpecularLightingElement.specularExponent')
   @DocsEditable()
-  AnimatedNumber get specularExponent => _blink.BlinkSVGFESpecularLightingElement.$specularExponent_Getter(this);
+  AnimatedNumber get specularExponent => _blink.BlinkSVGFESpecularLightingElement.specularExponent_Getter(this);
 
   @DomName('SVGFESpecularLightingElement.surfaceScale')
   @DocsEditable()
-  AnimatedNumber get surfaceScale => _blink.BlinkSVGFESpecularLightingElement.$surfaceScale_Getter(this);
+  AnimatedNumber get surfaceScale => _blink.BlinkSVGFESpecularLightingElement.surfaceScale_Getter(this);
 
   @DomName('SVGFESpecularLightingElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFESpecularLightingElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFESpecularLightingElement.height_Getter(this);
 
   @DomName('SVGFESpecularLightingElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFESpecularLightingElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFESpecularLightingElement.result_Getter(this);
 
   @DomName('SVGFESpecularLightingElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFESpecularLightingElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFESpecularLightingElement.width_Getter(this);
 
   @DomName('SVGFESpecularLightingElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFESpecularLightingElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFESpecularLightingElement.x_Getter(this);
 
   @DomName('SVGFESpecularLightingElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFESpecularLightingElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFESpecularLightingElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2977,35 +2977,35 @@
 
   @DomName('SVGFESpotLightElement.limitingConeAngle')
   @DocsEditable()
-  AnimatedNumber get limitingConeAngle => _blink.BlinkSVGFESpotLightElement.$limitingConeAngle_Getter(this);
+  AnimatedNumber get limitingConeAngle => _blink.BlinkSVGFESpotLightElement.limitingConeAngle_Getter(this);
 
   @DomName('SVGFESpotLightElement.pointsAtX')
   @DocsEditable()
-  AnimatedNumber get pointsAtX => _blink.BlinkSVGFESpotLightElement.$pointsAtX_Getter(this);
+  AnimatedNumber get pointsAtX => _blink.BlinkSVGFESpotLightElement.pointsAtX_Getter(this);
 
   @DomName('SVGFESpotLightElement.pointsAtY')
   @DocsEditable()
-  AnimatedNumber get pointsAtY => _blink.BlinkSVGFESpotLightElement.$pointsAtY_Getter(this);
+  AnimatedNumber get pointsAtY => _blink.BlinkSVGFESpotLightElement.pointsAtY_Getter(this);
 
   @DomName('SVGFESpotLightElement.pointsAtZ')
   @DocsEditable()
-  AnimatedNumber get pointsAtZ => _blink.BlinkSVGFESpotLightElement.$pointsAtZ_Getter(this);
+  AnimatedNumber get pointsAtZ => _blink.BlinkSVGFESpotLightElement.pointsAtZ_Getter(this);
 
   @DomName('SVGFESpotLightElement.specularExponent')
   @DocsEditable()
-  AnimatedNumber get specularExponent => _blink.BlinkSVGFESpotLightElement.$specularExponent_Getter(this);
+  AnimatedNumber get specularExponent => _blink.BlinkSVGFESpotLightElement.specularExponent_Getter(this);
 
   @DomName('SVGFESpotLightElement.x')
   @DocsEditable()
-  AnimatedNumber get x => _blink.BlinkSVGFESpotLightElement.$x_Getter(this);
+  AnimatedNumber get x => _blink.BlinkSVGFESpotLightElement.x_Getter(this);
 
   @DomName('SVGFESpotLightElement.y')
   @DocsEditable()
-  AnimatedNumber get y => _blink.BlinkSVGFESpotLightElement.$y_Getter(this);
+  AnimatedNumber get y => _blink.BlinkSVGFESpotLightElement.y_Getter(this);
 
   @DomName('SVGFESpotLightElement.z')
   @DocsEditable()
-  AnimatedNumber get z => _blink.BlinkSVGFESpotLightElement.$z_Getter(this);
+  AnimatedNumber get z => _blink.BlinkSVGFESpotLightElement.z_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3041,27 +3041,27 @@
 
   @DomName('SVGFETileElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFETileElement.$in1_Getter(this);
+  AnimatedString get in1 => _blink.BlinkSVGFETileElement.in1_Getter(this);
 
   @DomName('SVGFETileElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFETileElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFETileElement.height_Getter(this);
 
   @DomName('SVGFETileElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFETileElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFETileElement.result_Getter(this);
 
   @DomName('SVGFETileElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFETileElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFETileElement.width_Getter(this);
 
   @DomName('SVGFETileElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFETileElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFETileElement.x_Getter(this);
 
   @DomName('SVGFETileElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFETileElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFETileElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3121,47 +3121,47 @@
 
   @DomName('SVGFETurbulenceElement.baseFrequencyX')
   @DocsEditable()
-  AnimatedNumber get baseFrequencyX => _blink.BlinkSVGFETurbulenceElement.$baseFrequencyX_Getter(this);
+  AnimatedNumber get baseFrequencyX => _blink.BlinkSVGFETurbulenceElement.baseFrequencyX_Getter(this);
 
   @DomName('SVGFETurbulenceElement.baseFrequencyY')
   @DocsEditable()
-  AnimatedNumber get baseFrequencyY => _blink.BlinkSVGFETurbulenceElement.$baseFrequencyY_Getter(this);
+  AnimatedNumber get baseFrequencyY => _blink.BlinkSVGFETurbulenceElement.baseFrequencyY_Getter(this);
 
   @DomName('SVGFETurbulenceElement.numOctaves')
   @DocsEditable()
-  AnimatedInteger get numOctaves => _blink.BlinkSVGFETurbulenceElement.$numOctaves_Getter(this);
+  AnimatedInteger get numOctaves => _blink.BlinkSVGFETurbulenceElement.numOctaves_Getter(this);
 
   @DomName('SVGFETurbulenceElement.seed')
   @DocsEditable()
-  AnimatedNumber get seed => _blink.BlinkSVGFETurbulenceElement.$seed_Getter(this);
+  AnimatedNumber get seed => _blink.BlinkSVGFETurbulenceElement.seed_Getter(this);
 
   @DomName('SVGFETurbulenceElement.stitchTiles')
   @DocsEditable()
-  AnimatedEnumeration get stitchTiles => _blink.BlinkSVGFETurbulenceElement.$stitchTiles_Getter(this);
+  AnimatedEnumeration get stitchTiles => _blink.BlinkSVGFETurbulenceElement.stitchTiles_Getter(this);
 
   @DomName('SVGFETurbulenceElement.type')
   @DocsEditable()
-  AnimatedEnumeration get type => _blink.BlinkSVGFETurbulenceElement.$type_Getter(this);
+  AnimatedEnumeration get type => _blink.BlinkSVGFETurbulenceElement.type_Getter(this);
 
   @DomName('SVGFETurbulenceElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFETurbulenceElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFETurbulenceElement.height_Getter(this);
 
   @DomName('SVGFETurbulenceElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFETurbulenceElement.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFETurbulenceElement.result_Getter(this);
 
   @DomName('SVGFETurbulenceElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFETurbulenceElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFETurbulenceElement.width_Getter(this);
 
   @DomName('SVGFETurbulenceElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFETurbulenceElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFETurbulenceElement.x_Getter(this);
 
   @DomName('SVGFETurbulenceElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFETurbulenceElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFETurbulenceElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3197,43 +3197,43 @@
 
   @DomName('SVGFilterElement.filterResX')
   @DocsEditable()
-  AnimatedInteger get filterResX => _blink.BlinkSVGFilterElement.$filterResX_Getter(this);
+  AnimatedInteger get filterResX => _blink.BlinkSVGFilterElement.filterResX_Getter(this);
 
   @DomName('SVGFilterElement.filterResY')
   @DocsEditable()
-  AnimatedInteger get filterResY => _blink.BlinkSVGFilterElement.$filterResY_Getter(this);
+  AnimatedInteger get filterResY => _blink.BlinkSVGFilterElement.filterResY_Getter(this);
 
   @DomName('SVGFilterElement.filterUnits')
   @DocsEditable()
-  AnimatedEnumeration get filterUnits => _blink.BlinkSVGFilterElement.$filterUnits_Getter(this);
+  AnimatedEnumeration get filterUnits => _blink.BlinkSVGFilterElement.filterUnits_Getter(this);
 
   @DomName('SVGFilterElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFilterElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFilterElement.height_Getter(this);
 
   @DomName('SVGFilterElement.primitiveUnits')
   @DocsEditable()
-  AnimatedEnumeration get primitiveUnits => _blink.BlinkSVGFilterElement.$primitiveUnits_Getter(this);
+  AnimatedEnumeration get primitiveUnits => _blink.BlinkSVGFilterElement.primitiveUnits_Getter(this);
 
   @DomName('SVGFilterElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFilterElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFilterElement.width_Getter(this);
 
   @DomName('SVGFilterElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFilterElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFilterElement.x_Getter(this);
 
   @DomName('SVGFilterElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFilterElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFilterElement.y_Getter(this);
 
   @DomName('SVGFilterElement.setFilterRes')
   @DocsEditable()
-  void setFilterRes(int filterResX, int filterResY) => _blink.BlinkSVGFilterElement.$setFilterRes_Callback(this, filterResX, filterResY);
+  void setFilterRes(int filterResX, int filterResY) => _blink.BlinkSVGFilterElement.setFilterRes_Callback_ul_ul(this, filterResX, filterResY);
 
   @DomName('SVGFilterElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGFilterElement.$href_Getter(this);
+  AnimatedString get href => _blink.BlinkSVGFilterElement.href_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3252,23 +3252,23 @@
 
   @DomName('SVGFilterPrimitiveStandardAttributes.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFilterPrimitiveStandardAttributes.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGFilterPrimitiveStandardAttributes.height_Getter(this);
 
   @DomName('SVGFilterPrimitiveStandardAttributes.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFilterPrimitiveStandardAttributes.$result_Getter(this);
+  AnimatedString get result => _blink.BlinkSVGFilterPrimitiveStandardAttributes.result_Getter(this);
 
   @DomName('SVGFilterPrimitiveStandardAttributes.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFilterPrimitiveStandardAttributes.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGFilterPrimitiveStandardAttributes.width_Getter(this);
 
   @DomName('SVGFilterPrimitiveStandardAttributes.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFilterPrimitiveStandardAttributes.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGFilterPrimitiveStandardAttributes.x_Getter(this);
 
   @DomName('SVGFilterPrimitiveStandardAttributes.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFilterPrimitiveStandardAttributes.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGFilterPrimitiveStandardAttributes.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3287,11 +3287,11 @@
 
   @DomName('SVGFitToViewBox.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGFitToViewBox.$preserveAspectRatio_Getter(this);
+  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGFitToViewBox.preserveAspectRatio_Getter(this);
 
   @DomName('SVGFitToViewBox.viewBox')
   @DocsEditable()
-  AnimatedRect get viewBox => _blink.BlinkSVGFitToViewBox.$viewBox_Getter(this);
+  AnimatedRect get viewBox => _blink.BlinkSVGFitToViewBox.viewBox_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3326,19 +3326,19 @@
 
   @DomName('SVGForeignObjectElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGForeignObjectElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGForeignObjectElement.height_Getter(this);
 
   @DomName('SVGForeignObjectElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGForeignObjectElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGForeignObjectElement.width_Getter(this);
 
   @DomName('SVGForeignObjectElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGForeignObjectElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGForeignObjectElement.x_Getter(this);
 
   @DomName('SVGForeignObjectElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGForeignObjectElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGForeignObjectElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3389,12 +3389,12 @@
   @DomName('SVGGeometryElement.isPointInFill')
   @DocsEditable()
   @Experimental() // untriaged
-  bool isPointInFill(Point point) => _blink.BlinkSVGGeometryElement.$isPointInFill_Callback(this, point);
+  bool isPointInFill(Point point) => _blink.BlinkSVGGeometryElement.isPointInFill_Callback_SVGPoint(this, point);
 
   @DomName('SVGGeometryElement.isPointInStroke')
   @DocsEditable()
   @Experimental() // untriaged
-  bool isPointInStroke(Point point) => _blink.BlinkSVGGeometryElement.$isPointInStroke_Callback(this, point);
+  bool isPointInStroke(Point point) => _blink.BlinkSVGGeometryElement.isPointInStroke_Callback_SVGPoint(this, point);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3420,57 +3420,57 @@
   @DomName('SVGGraphicsElement.farthestViewportElement')
   @DocsEditable()
   @Experimental() // untriaged
-  SvgElement get farthestViewportElement => _blink.BlinkSVGGraphicsElement.$farthestViewportElement_Getter(this);
+  SvgElement get farthestViewportElement => _blink.BlinkSVGGraphicsElement.farthestViewportElement_Getter(this);
 
   @DomName('SVGGraphicsElement.nearestViewportElement')
   @DocsEditable()
   @Experimental() // untriaged
-  SvgElement get nearestViewportElement => _blink.BlinkSVGGraphicsElement.$nearestViewportElement_Getter(this);
+  SvgElement get nearestViewportElement => _blink.BlinkSVGGraphicsElement.nearestViewportElement_Getter(this);
 
   @DomName('SVGGraphicsElement.transform')
   @DocsEditable()
   @Experimental() // untriaged
-  AnimatedTransformList get transform => _blink.BlinkSVGGraphicsElement.$transform_Getter(this);
+  AnimatedTransformList get transform => _blink.BlinkSVGGraphicsElement.transform_Getter(this);
 
   @DomName('SVGGraphicsElement.getBBox')
   @DocsEditable()
   @Experimental() // untriaged
-  Rect getBBox() => _blink.BlinkSVGGraphicsElement.$getBBox_Callback(this);
+  Rect getBBox() => _blink.BlinkSVGGraphicsElement.getBBox_Callback(this);
 
   @DomName('SVGGraphicsElement.getCTM')
   @DocsEditable()
   @Experimental() // untriaged
-  Matrix getCtm() => _blink.BlinkSVGGraphicsElement.$getCTM_Callback(this);
+  Matrix getCtm() => _blink.BlinkSVGGraphicsElement.getCTM_Callback(this);
 
   @DomName('SVGGraphicsElement.getScreenCTM')
   @DocsEditable()
   @Experimental() // untriaged
-  Matrix getScreenCtm() => _blink.BlinkSVGGraphicsElement.$getScreenCTM_Callback(this);
+  Matrix getScreenCtm() => _blink.BlinkSVGGraphicsElement.getScreenCTM_Callback(this);
 
   @DomName('SVGGraphicsElement.getTransformToElement')
   @DocsEditable()
   @Experimental() // untriaged
-  Matrix getTransformToElement(SvgElement element) => _blink.BlinkSVGGraphicsElement.$getTransformToElement_Callback(this, element);
+  Matrix getTransformToElement(SvgElement element) => _blink.BlinkSVGGraphicsElement.getTransformToElement_Callback_SVGElement(this, element);
 
   @DomName('SVGGraphicsElement.requiredExtensions')
   @DocsEditable()
   @Experimental() // untriaged
-  StringList get requiredExtensions => _blink.BlinkSVGGraphicsElement.$requiredExtensions_Getter(this);
+  StringList get requiredExtensions => _blink.BlinkSVGGraphicsElement.requiredExtensions_Getter(this);
 
   @DomName('SVGGraphicsElement.requiredFeatures')
   @DocsEditable()
   @Experimental() // untriaged
-  StringList get requiredFeatures => _blink.BlinkSVGGraphicsElement.$requiredFeatures_Getter(this);
+  StringList get requiredFeatures => _blink.BlinkSVGGraphicsElement.requiredFeatures_Getter(this);
 
   @DomName('SVGGraphicsElement.systemLanguage')
   @DocsEditable()
   @Experimental() // untriaged
-  StringList get systemLanguage => _blink.BlinkSVGGraphicsElement.$systemLanguage_Getter(this);
+  StringList get systemLanguage => _blink.BlinkSVGGraphicsElement.systemLanguage_Getter(this);
 
   @DomName('SVGGraphicsElement.hasExtension')
   @DocsEditable()
   @Experimental() // untriaged
-  bool hasExtension(String extension) => _blink.BlinkSVGGraphicsElement.$hasExtension_Callback(this, extension);
+  bool hasExtension(String extension) => _blink.BlinkSVGGraphicsElement.hasExtension_Callback_DOMString(this, extension);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3499,27 +3499,27 @@
 
   @DomName('SVGImageElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGImageElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGImageElement.height_Getter(this);
 
   @DomName('SVGImageElement.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGImageElement.$preserveAspectRatio_Getter(this);
+  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGImageElement.preserveAspectRatio_Getter(this);
 
   @DomName('SVGImageElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGImageElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGImageElement.width_Getter(this);
 
   @DomName('SVGImageElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGImageElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGImageElement.x_Getter(this);
 
   @DomName('SVGImageElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGImageElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGImageElement.y_Getter(this);
 
   @DomName('SVGImageElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGImageElement.$href_Getter(this);
+  AnimatedString get href => _blink.BlinkSVGImageElement.href_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3582,39 +3582,39 @@
 
   @DomName('SVGLength.unitType')
   @DocsEditable()
-  int get unitType => _blink.BlinkSVGLength.$unitType_Getter(this);
+  int get unitType => _blink.BlinkSVGLength.unitType_Getter(this);
 
   @DomName('SVGLength.value')
   @DocsEditable()
-  num get value => _blink.BlinkSVGLength.$value_Getter(this);
+  num get value => _blink.BlinkSVGLength.value_Getter(this);
 
   @DomName('SVGLength.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkSVGLength.$value_Setter(this, value);
+  void set value(num value) => _blink.BlinkSVGLength.value_Setter_float(this, value);
 
   @DomName('SVGLength.valueAsString')
   @DocsEditable()
-  String get valueAsString => _blink.BlinkSVGLength.$valueAsString_Getter(this);
+  String get valueAsString => _blink.BlinkSVGLength.valueAsString_Getter(this);
 
   @DomName('SVGLength.valueAsString')
   @DocsEditable()
-  void set valueAsString(String value) => _blink.BlinkSVGLength.$valueAsString_Setter(this, value);
+  void set valueAsString(String value) => _blink.BlinkSVGLength.valueAsString_Setter_DOMString(this, value);
 
   @DomName('SVGLength.valueInSpecifiedUnits')
   @DocsEditable()
-  num get valueInSpecifiedUnits => _blink.BlinkSVGLength.$valueInSpecifiedUnits_Getter(this);
+  num get valueInSpecifiedUnits => _blink.BlinkSVGLength.valueInSpecifiedUnits_Getter(this);
 
   @DomName('SVGLength.valueInSpecifiedUnits')
   @DocsEditable()
-  void set valueInSpecifiedUnits(num value) => _blink.BlinkSVGLength.$valueInSpecifiedUnits_Setter(this, value);
+  void set valueInSpecifiedUnits(num value) => _blink.BlinkSVGLength.valueInSpecifiedUnits_Setter_float(this, value);
 
   @DomName('SVGLength.convertToSpecifiedUnits')
   @DocsEditable()
-  void convertToSpecifiedUnits(int unitType) => _blink.BlinkSVGLength.$convertToSpecifiedUnits_Callback(this, unitType);
+  void convertToSpecifiedUnits(int unitType) => _blink.BlinkSVGLength.convertToSpecifiedUnits_Callback_us(this, unitType);
 
   @DomName('SVGLength.newValueSpecifiedUnits')
   @DocsEditable()
-  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) => _blink.BlinkSVGLength.$newValueSpecifiedUnits_Callback(this, unitType, valueInSpecifiedUnits);
+  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) => _blink.BlinkSVGLength.newValueSpecifiedUnits_Callback_us_float(this, unitType, valueInSpecifiedUnits);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3633,7 +3633,7 @@
 
   @DomName('SVGLengthList.numberOfItems')
   @DocsEditable()
-  int get numberOfItems => _blink.BlinkSVGLengthList.$numberOfItems_Getter(this);
+  int get numberOfItems => _blink.BlinkSVGLengthList.numberOfItems_Getter(this);
 
   Length operator[](int index) {
     if (index < 0 || index >= length)
@@ -3683,31 +3683,31 @@
 
   @DomName('SVGLengthList.appendItem')
   @DocsEditable()
-  Length appendItem(Length item) => _blink.BlinkSVGLengthList.$appendItem_Callback(this, item);
+  Length appendItem(Length item) => _blink.BlinkSVGLengthList.appendItem_Callback_SVGLength(this, item);
 
   @DomName('SVGLengthList.clear')
   @DocsEditable()
-  void clear() => _blink.BlinkSVGLengthList.$clear_Callback(this);
+  void clear() => _blink.BlinkSVGLengthList.clear_Callback(this);
 
   @DomName('SVGLengthList.getItem')
   @DocsEditable()
-  Length getItem(int index) => _blink.BlinkSVGLengthList.$getItem_Callback(this, index);
+  Length getItem(int index) => _blink.BlinkSVGLengthList.getItem_Callback_ul(this, index);
 
   @DomName('SVGLengthList.initialize')
   @DocsEditable()
-  Length initialize(Length item) => _blink.BlinkSVGLengthList.$initialize_Callback(this, item);
+  Length initialize(Length item) => _blink.BlinkSVGLengthList.initialize_Callback_SVGLength(this, item);
 
   @DomName('SVGLengthList.insertItemBefore')
   @DocsEditable()
-  Length insertItemBefore(Length item, int index) => _blink.BlinkSVGLengthList.$insertItemBefore_Callback(this, item, index);
+  Length insertItemBefore(Length item, int index) => _blink.BlinkSVGLengthList.insertItemBefore_Callback_SVGLength_ul(this, item, index);
 
   @DomName('SVGLengthList.removeItem')
   @DocsEditable()
-  Length removeItem(int index) => _blink.BlinkSVGLengthList.$removeItem_Callback(this, index);
+  Length removeItem(int index) => _blink.BlinkSVGLengthList.removeItem_Callback_ul(this, index);
 
   @DomName('SVGLengthList.replaceItem')
   @DocsEditable()
-  Length replaceItem(Length item, int index) => _blink.BlinkSVGLengthList.$replaceItem_Callback(this, item, index);
+  Length replaceItem(Length item, int index) => _blink.BlinkSVGLengthList.replaceItem_Callback_SVGLength_ul(this, item, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3736,19 +3736,19 @@
 
   @DomName('SVGLineElement.x1')
   @DocsEditable()
-  AnimatedLength get x1 => _blink.BlinkSVGLineElement.$x1_Getter(this);
+  AnimatedLength get x1 => _blink.BlinkSVGLineElement.x1_Getter(this);
 
   @DomName('SVGLineElement.x2')
   @DocsEditable()
-  AnimatedLength get x2 => _blink.BlinkSVGLineElement.$x2_Getter(this);
+  AnimatedLength get x2 => _blink.BlinkSVGLineElement.x2_Getter(this);
 
   @DomName('SVGLineElement.y1')
   @DocsEditable()
-  AnimatedLength get y1 => _blink.BlinkSVGLineElement.$y1_Getter(this);
+  AnimatedLength get y1 => _blink.BlinkSVGLineElement.y1_Getter(this);
 
   @DomName('SVGLineElement.y2')
   @DocsEditable()
-  AnimatedLength get y2 => _blink.BlinkSVGLineElement.$y2_Getter(this);
+  AnimatedLength get y2 => _blink.BlinkSVGLineElement.y2_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3777,19 +3777,19 @@
 
   @DomName('SVGLinearGradientElement.x1')
   @DocsEditable()
-  AnimatedLength get x1 => _blink.BlinkSVGLinearGradientElement.$x1_Getter(this);
+  AnimatedLength get x1 => _blink.BlinkSVGLinearGradientElement.x1_Getter(this);
 
   @DomName('SVGLinearGradientElement.x2')
   @DocsEditable()
-  AnimatedLength get x2 => _blink.BlinkSVGLinearGradientElement.$x2_Getter(this);
+  AnimatedLength get x2 => _blink.BlinkSVGLinearGradientElement.x2_Getter(this);
 
   @DomName('SVGLinearGradientElement.y1')
   @DocsEditable()
-  AnimatedLength get y1 => _blink.BlinkSVGLinearGradientElement.$y1_Getter(this);
+  AnimatedLength get y1 => _blink.BlinkSVGLinearGradientElement.y1_Getter(this);
 
   @DomName('SVGLinearGradientElement.y2')
   @DocsEditable()
-  AnimatedLength get y2 => _blink.BlinkSVGLinearGradientElement.$y2_Getter(this);
+  AnimatedLength get y2 => _blink.BlinkSVGLinearGradientElement.y2_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3842,47 +3842,47 @@
 
   @DomName('SVGMarkerElement.markerHeight')
   @DocsEditable()
-  AnimatedLength get markerHeight => _blink.BlinkSVGMarkerElement.$markerHeight_Getter(this);
+  AnimatedLength get markerHeight => _blink.BlinkSVGMarkerElement.markerHeight_Getter(this);
 
   @DomName('SVGMarkerElement.markerUnits')
   @DocsEditable()
-  AnimatedEnumeration get markerUnits => _blink.BlinkSVGMarkerElement.$markerUnits_Getter(this);
+  AnimatedEnumeration get markerUnits => _blink.BlinkSVGMarkerElement.markerUnits_Getter(this);
 
   @DomName('SVGMarkerElement.markerWidth')
   @DocsEditable()
-  AnimatedLength get markerWidth => _blink.BlinkSVGMarkerElement.$markerWidth_Getter(this);
+  AnimatedLength get markerWidth => _blink.BlinkSVGMarkerElement.markerWidth_Getter(this);
 
   @DomName('SVGMarkerElement.orientAngle')
   @DocsEditable()
-  AnimatedAngle get orientAngle => _blink.BlinkSVGMarkerElement.$orientAngle_Getter(this);
+  AnimatedAngle get orientAngle => _blink.BlinkSVGMarkerElement.orientAngle_Getter(this);
 
   @DomName('SVGMarkerElement.orientType')
   @DocsEditable()
-  AnimatedEnumeration get orientType => _blink.BlinkSVGMarkerElement.$orientType_Getter(this);
+  AnimatedEnumeration get orientType => _blink.BlinkSVGMarkerElement.orientType_Getter(this);
 
   @DomName('SVGMarkerElement.refX')
   @DocsEditable()
-  AnimatedLength get refX => _blink.BlinkSVGMarkerElement.$refX_Getter(this);
+  AnimatedLength get refX => _blink.BlinkSVGMarkerElement.refX_Getter(this);
 
   @DomName('SVGMarkerElement.refY')
   @DocsEditable()
-  AnimatedLength get refY => _blink.BlinkSVGMarkerElement.$refY_Getter(this);
+  AnimatedLength get refY => _blink.BlinkSVGMarkerElement.refY_Getter(this);
 
   @DomName('SVGMarkerElement.setOrientToAngle')
   @DocsEditable()
-  void setOrientToAngle(Angle angle) => _blink.BlinkSVGMarkerElement.$setOrientToAngle_Callback(this, angle);
+  void setOrientToAngle(Angle angle) => _blink.BlinkSVGMarkerElement.setOrientToAngle_Callback_SVGAngle(this, angle);
 
   @DomName('SVGMarkerElement.setOrientToAuto')
   @DocsEditable()
-  void setOrientToAuto() => _blink.BlinkSVGMarkerElement.$setOrientToAuto_Callback(this);
+  void setOrientToAuto() => _blink.BlinkSVGMarkerElement.setOrientToAuto_Callback(this);
 
   @DomName('SVGMarkerElement.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGMarkerElement.$preserveAspectRatio_Getter(this);
+  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGMarkerElement.preserveAspectRatio_Getter(this);
 
   @DomName('SVGMarkerElement.viewBox')
   @DocsEditable()
-  AnimatedRect get viewBox => _blink.BlinkSVGMarkerElement.$viewBox_Getter(this);
+  AnimatedRect get viewBox => _blink.BlinkSVGMarkerElement.viewBox_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3911,43 +3911,43 @@
 
   @DomName('SVGMaskElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGMaskElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGMaskElement.height_Getter(this);
 
   @DomName('SVGMaskElement.maskContentUnits')
   @DocsEditable()
-  AnimatedEnumeration get maskContentUnits => _blink.BlinkSVGMaskElement.$maskContentUnits_Getter(this);
+  AnimatedEnumeration get maskContentUnits => _blink.BlinkSVGMaskElement.maskContentUnits_Getter(this);
 
   @DomName('SVGMaskElement.maskUnits')
   @DocsEditable()
-  AnimatedEnumeration get maskUnits => _blink.BlinkSVGMaskElement.$maskUnits_Getter(this);
+  AnimatedEnumeration get maskUnits => _blink.BlinkSVGMaskElement.maskUnits_Getter(this);
 
   @DomName('SVGMaskElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGMaskElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGMaskElement.width_Getter(this);
 
   @DomName('SVGMaskElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGMaskElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGMaskElement.x_Getter(this);
 
   @DomName('SVGMaskElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGMaskElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGMaskElement.y_Getter(this);
 
   @DomName('SVGMaskElement.requiredExtensions')
   @DocsEditable()
-  StringList get requiredExtensions => _blink.BlinkSVGMaskElement.$requiredExtensions_Getter(this);
+  StringList get requiredExtensions => _blink.BlinkSVGMaskElement.requiredExtensions_Getter(this);
 
   @DomName('SVGMaskElement.requiredFeatures')
   @DocsEditable()
-  StringList get requiredFeatures => _blink.BlinkSVGMaskElement.$requiredFeatures_Getter(this);
+  StringList get requiredFeatures => _blink.BlinkSVGMaskElement.requiredFeatures_Getter(this);
 
   @DomName('SVGMaskElement.systemLanguage')
   @DocsEditable()
-  StringList get systemLanguage => _blink.BlinkSVGMaskElement.$systemLanguage_Getter(this);
+  StringList get systemLanguage => _blink.BlinkSVGMaskElement.systemLanguage_Getter(this);
 
   @DomName('SVGMaskElement.hasExtension')
   @DocsEditable()
-  bool hasExtension(String extension) => _blink.BlinkSVGMaskElement.$hasExtension_Callback(this, extension);
+  bool hasExtension(String extension) => _blink.BlinkSVGMaskElement.hasExtension_Callback_DOMString(this, extension);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3966,95 +3966,95 @@
 
   @DomName('SVGMatrix.a')
   @DocsEditable()
-  num get a => _blink.BlinkSVGMatrix.$a_Getter(this);
+  num get a => _blink.BlinkSVGMatrix.a_Getter(this);
 
   @DomName('SVGMatrix.a')
   @DocsEditable()
-  void set a(num value) => _blink.BlinkSVGMatrix.$a_Setter(this, value);
+  void set a(num value) => _blink.BlinkSVGMatrix.a_Setter_double(this, value);
 
   @DomName('SVGMatrix.b')
   @DocsEditable()
-  num get b => _blink.BlinkSVGMatrix.$b_Getter(this);
+  num get b => _blink.BlinkSVGMatrix.b_Getter(this);
 
   @DomName('SVGMatrix.b')
   @DocsEditable()
-  void set b(num value) => _blink.BlinkSVGMatrix.$b_Setter(this, value);
+  void set b(num value) => _blink.BlinkSVGMatrix.b_Setter_double(this, value);
 
   @DomName('SVGMatrix.c')
   @DocsEditable()
-  num get c => _blink.BlinkSVGMatrix.$c_Getter(this);
+  num get c => _blink.BlinkSVGMatrix.c_Getter(this);
 
   @DomName('SVGMatrix.c')
   @DocsEditable()
-  void set c(num value) => _blink.BlinkSVGMatrix.$c_Setter(this, value);
+  void set c(num value) => _blink.BlinkSVGMatrix.c_Setter_double(this, value);
 
   @DomName('SVGMatrix.d')
   @DocsEditable()
-  num get d => _blink.BlinkSVGMatrix.$d_Getter(this);
+  num get d => _blink.BlinkSVGMatrix.d_Getter(this);
 
   @DomName('SVGMatrix.d')
   @DocsEditable()
-  void set d(num value) => _blink.BlinkSVGMatrix.$d_Setter(this, value);
+  void set d(num value) => _blink.BlinkSVGMatrix.d_Setter_double(this, value);
 
   @DomName('SVGMatrix.e')
   @DocsEditable()
-  num get e => _blink.BlinkSVGMatrix.$e_Getter(this);
+  num get e => _blink.BlinkSVGMatrix.e_Getter(this);
 
   @DomName('SVGMatrix.e')
   @DocsEditable()
-  void set e(num value) => _blink.BlinkSVGMatrix.$e_Setter(this, value);
+  void set e(num value) => _blink.BlinkSVGMatrix.e_Setter_double(this, value);
 
   @DomName('SVGMatrix.f')
   @DocsEditable()
-  num get f => _blink.BlinkSVGMatrix.$f_Getter(this);
+  num get f => _blink.BlinkSVGMatrix.f_Getter(this);
 
   @DomName('SVGMatrix.f')
   @DocsEditable()
-  void set f(num value) => _blink.BlinkSVGMatrix.$f_Setter(this, value);
+  void set f(num value) => _blink.BlinkSVGMatrix.f_Setter_double(this, value);
 
   @DomName('SVGMatrix.flipX')
   @DocsEditable()
-  Matrix flipX() => _blink.BlinkSVGMatrix.$flipX_Callback(this);
+  Matrix flipX() => _blink.BlinkSVGMatrix.flipX_Callback(this);
 
   @DomName('SVGMatrix.flipY')
   @DocsEditable()
-  Matrix flipY() => _blink.BlinkSVGMatrix.$flipY_Callback(this);
+  Matrix flipY() => _blink.BlinkSVGMatrix.flipY_Callback(this);
 
   @DomName('SVGMatrix.inverse')
   @DocsEditable()
-  Matrix inverse() => _blink.BlinkSVGMatrix.$inverse_Callback(this);
+  Matrix inverse() => _blink.BlinkSVGMatrix.inverse_Callback(this);
 
   @DomName('SVGMatrix.multiply')
   @DocsEditable()
-  Matrix multiply(Matrix secondMatrix) => _blink.BlinkSVGMatrix.$multiply_Callback(this, secondMatrix);
+  Matrix multiply(Matrix secondMatrix) => _blink.BlinkSVGMatrix.multiply_Callback_SVGMatrix(this, secondMatrix);
 
   @DomName('SVGMatrix.rotate')
   @DocsEditable()
-  Matrix rotate(num angle) => _blink.BlinkSVGMatrix.$rotate_Callback(this, angle);
+  Matrix rotate(num angle) => _blink.BlinkSVGMatrix.rotate_Callback_float(this, angle);
 
   @DomName('SVGMatrix.rotateFromVector')
   @DocsEditable()
-  Matrix rotateFromVector(num x, num y) => _blink.BlinkSVGMatrix.$rotateFromVector_Callback(this, x, y);
+  Matrix rotateFromVector(num x, num y) => _blink.BlinkSVGMatrix.rotateFromVector_Callback_float_float(this, x, y);
 
   @DomName('SVGMatrix.scale')
   @DocsEditable()
-  Matrix scale(num scaleFactor) => _blink.BlinkSVGMatrix.$scale_Callback(this, scaleFactor);
+  Matrix scale(num scaleFactor) => _blink.BlinkSVGMatrix.scale_Callback_float(this, scaleFactor);
 
   @DomName('SVGMatrix.scaleNonUniform')
   @DocsEditable()
-  Matrix scaleNonUniform(num scaleFactorX, num scaleFactorY) => _blink.BlinkSVGMatrix.$scaleNonUniform_Callback(this, scaleFactorX, scaleFactorY);
+  Matrix scaleNonUniform(num scaleFactorX, num scaleFactorY) => _blink.BlinkSVGMatrix.scaleNonUniform_Callback_float_float(this, scaleFactorX, scaleFactorY);
 
   @DomName('SVGMatrix.skewX')
   @DocsEditable()
-  Matrix skewX(num angle) => _blink.BlinkSVGMatrix.$skewX_Callback(this, angle);
+  Matrix skewX(num angle) => _blink.BlinkSVGMatrix.skewX_Callback_float(this, angle);
 
   @DomName('SVGMatrix.skewY')
   @DocsEditable()
-  Matrix skewY(num angle) => _blink.BlinkSVGMatrix.$skewY_Callback(this, angle);
+  Matrix skewY(num angle) => _blink.BlinkSVGMatrix.skewY_Callback_float(this, angle);
 
   @DomName('SVGMatrix.translate')
   @DocsEditable()
-  Matrix translate(num x, num y) => _blink.BlinkSVGMatrix.$translate_Callback(this, x, y);
+  Matrix translate(num x, num y) => _blink.BlinkSVGMatrix.translate_Callback_float_float(this, x, y);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4094,11 +4094,11 @@
 
   @DomName('SVGNumber.value')
   @DocsEditable()
-  num get value => _blink.BlinkSVGNumber.$value_Getter(this);
+  num get value => _blink.BlinkSVGNumber.value_Getter(this);
 
   @DomName('SVGNumber.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkSVGNumber.$value_Setter(this, value);
+  void set value(num value) => _blink.BlinkSVGNumber.value_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4117,7 +4117,7 @@
 
   @DomName('SVGNumberList.numberOfItems')
   @DocsEditable()
-  int get numberOfItems => _blink.BlinkSVGNumberList.$numberOfItems_Getter(this);
+  int get numberOfItems => _blink.BlinkSVGNumberList.numberOfItems_Getter(this);
 
   Number operator[](int index) {
     if (index < 0 || index >= length)
@@ -4167,31 +4167,31 @@
 
   @DomName('SVGNumberList.appendItem')
   @DocsEditable()
-  Number appendItem(Number item) => _blink.BlinkSVGNumberList.$appendItem_Callback(this, item);
+  Number appendItem(Number item) => _blink.BlinkSVGNumberList.appendItem_Callback_SVGNumber(this, item);
 
   @DomName('SVGNumberList.clear')
   @DocsEditable()
-  void clear() => _blink.BlinkSVGNumberList.$clear_Callback(this);
+  void clear() => _blink.BlinkSVGNumberList.clear_Callback(this);
 
   @DomName('SVGNumberList.getItem')
   @DocsEditable()
-  Number getItem(int index) => _blink.BlinkSVGNumberList.$getItem_Callback(this, index);
+  Number getItem(int index) => _blink.BlinkSVGNumberList.getItem_Callback_ul(this, index);
 
   @DomName('SVGNumberList.initialize')
   @DocsEditable()
-  Number initialize(Number item) => _blink.BlinkSVGNumberList.$initialize_Callback(this, item);
+  Number initialize(Number item) => _blink.BlinkSVGNumberList.initialize_Callback_SVGNumber(this, item);
 
   @DomName('SVGNumberList.insertItemBefore')
   @DocsEditable()
-  Number insertItemBefore(Number item, int index) => _blink.BlinkSVGNumberList.$insertItemBefore_Callback(this, item, index);
+  Number insertItemBefore(Number item, int index) => _blink.BlinkSVGNumberList.insertItemBefore_Callback_SVGNumber_ul(this, item, index);
 
   @DomName('SVGNumberList.removeItem')
   @DocsEditable()
-  Number removeItem(int index) => _blink.BlinkSVGNumberList.$removeItem_Callback(this, index);
+  Number removeItem(int index) => _blink.BlinkSVGNumberList.removeItem_Callback_ul(this, index);
 
   @DomName('SVGNumberList.replaceItem')
   @DocsEditable()
-  Number replaceItem(Number item, int index) => _blink.BlinkSVGNumberList.$replaceItem_Callback(this, item, index);
+  Number replaceItem(Number item, int index) => _blink.BlinkSVGNumberList.replaceItem_Callback_SVGNumber_ul(this, item, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4220,111 +4220,111 @@
 
   @DomName('SVGPathElement.animatedNormalizedPathSegList')
   @DocsEditable()
-  PathSegList get animatedNormalizedPathSegList => _blink.BlinkSVGPathElement.$animatedNormalizedPathSegList_Getter(this);
+  PathSegList get animatedNormalizedPathSegList => _blink.BlinkSVGPathElement.animatedNormalizedPathSegList_Getter(this);
 
   @DomName('SVGPathElement.animatedPathSegList')
   @DocsEditable()
-  PathSegList get animatedPathSegList => _blink.BlinkSVGPathElement.$animatedPathSegList_Getter(this);
+  PathSegList get animatedPathSegList => _blink.BlinkSVGPathElement.animatedPathSegList_Getter(this);
 
   @DomName('SVGPathElement.normalizedPathSegList')
   @DocsEditable()
-  PathSegList get normalizedPathSegList => _blink.BlinkSVGPathElement.$normalizedPathSegList_Getter(this);
+  PathSegList get normalizedPathSegList => _blink.BlinkSVGPathElement.normalizedPathSegList_Getter(this);
 
   @DomName('SVGPathElement.pathLength')
   @DocsEditable()
-  AnimatedNumber get pathLength => _blink.BlinkSVGPathElement.$pathLength_Getter(this);
+  AnimatedNumber get pathLength => _blink.BlinkSVGPathElement.pathLength_Getter(this);
 
   @DomName('SVGPathElement.pathSegList')
   @DocsEditable()
-  PathSegList get pathSegList => _blink.BlinkSVGPathElement.$pathSegList_Getter(this);
+  PathSegList get pathSegList => _blink.BlinkSVGPathElement.pathSegList_Getter(this);
 
   @DomName('SVGPathElement.createSVGPathSegArcAbs')
   @DocsEditable()
-  PathSegArcAbs createSvgPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) => _blink.BlinkSVGPathElement.$createSVGPathSegArcAbs_Callback(this, x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+  PathSegArcAbs createSvgPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) => _blink.BlinkSVGPathElement.createSVGPathSegArcAbs_Callback_float_float_float_float_float_boolean_boolean(this, x, y, r1, r2, angle, largeArcFlag, sweepFlag);
 
   @DomName('SVGPathElement.createSVGPathSegArcRel')
   @DocsEditable()
-  PathSegArcRel createSvgPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) => _blink.BlinkSVGPathElement.$createSVGPathSegArcRel_Callback(this, x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+  PathSegArcRel createSvgPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) => _blink.BlinkSVGPathElement.createSVGPathSegArcRel_Callback_float_float_float_float_float_boolean_boolean(this, x, y, r1, r2, angle, largeArcFlag, sweepFlag);
 
   @DomName('SVGPathElement.createSVGPathSegClosePath')
   @DocsEditable()
-  PathSegClosePath createSvgPathSegClosePath() => _blink.BlinkSVGPathElement.$createSVGPathSegClosePath_Callback(this);
+  PathSegClosePath createSvgPathSegClosePath() => _blink.BlinkSVGPathElement.createSVGPathSegClosePath_Callback(this);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoCubicAbs')
   @DocsEditable()
-  PathSegCurvetoCubicAbs createSvgPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) => _blink.BlinkSVGPathElement.$createSVGPathSegCurvetoCubicAbs_Callback(this, x, y, x1, y1, x2, y2);
+  PathSegCurvetoCubicAbs createSvgPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoCubicAbs_Callback_float_float_float_float_float_float(this, x, y, x1, y1, x2, y2);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoCubicRel')
   @DocsEditable()
-  PathSegCurvetoCubicRel createSvgPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) => _blink.BlinkSVGPathElement.$createSVGPathSegCurvetoCubicRel_Callback(this, x, y, x1, y1, x2, y2);
+  PathSegCurvetoCubicRel createSvgPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoCubicRel_Callback_float_float_float_float_float_float(this, x, y, x1, y1, x2, y2);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs')
   @DocsEditable()
-  PathSegCurvetoCubicSmoothAbs createSvgPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) => _blink.BlinkSVGPathElement.$createSVGPathSegCurvetoCubicSmoothAbs_Callback(this, x, y, x2, y2);
+  PathSegCurvetoCubicSmoothAbs createSvgPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs_Callback_float_float_float_float(this, x, y, x2, y2);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel')
   @DocsEditable()
-  PathSegCurvetoCubicSmoothRel createSvgPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) => _blink.BlinkSVGPathElement.$createSVGPathSegCurvetoCubicSmoothRel_Callback(this, x, y, x2, y2);
+  PathSegCurvetoCubicSmoothRel createSvgPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoCubicSmoothRel_Callback_float_float_float_float(this, x, y, x2, y2);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticAbs')
   @DocsEditable()
-  PathSegCurvetoQuadraticAbs createSvgPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) => _blink.BlinkSVGPathElement.$createSVGPathSegCurvetoQuadraticAbs_Callback(this, x, y, x1, y1);
+  PathSegCurvetoQuadraticAbs createSvgPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoQuadraticAbs_Callback_float_float_float_float(this, x, y, x1, y1);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticRel')
   @DocsEditable()
-  PathSegCurvetoQuadraticRel createSvgPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) => _blink.BlinkSVGPathElement.$createSVGPathSegCurvetoQuadraticRel_Callback(this, x, y, x1, y1);
+  PathSegCurvetoQuadraticRel createSvgPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoQuadraticRel_Callback_float_float_float_float(this, x, y, x1, y1);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs')
   @DocsEditable()
-  PathSegCurvetoQuadraticSmoothAbs createSvgPathSegCurvetoQuadraticSmoothAbs(num x, num y) => _blink.BlinkSVGPathElement.$createSVGPathSegCurvetoQuadraticSmoothAbs_Callback(this, x, y);
+  PathSegCurvetoQuadraticSmoothAbs createSvgPathSegCurvetoQuadraticSmoothAbs(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_float_float(this, x, y);
 
   @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel')
   @DocsEditable()
-  PathSegCurvetoQuadraticSmoothRel createSvgPathSegCurvetoQuadraticSmoothRel(num x, num y) => _blink.BlinkSVGPathElement.$createSVGPathSegCurvetoQuadraticSmoothRel_Callback(this, x, y);
+  PathSegCurvetoQuadraticSmoothRel createSvgPathSegCurvetoQuadraticSmoothRel(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel_Callback_float_float(this, x, y);
 
   @DomName('SVGPathElement.createSVGPathSegLinetoAbs')
   @DocsEditable()
-  PathSegLinetoAbs createSvgPathSegLinetoAbs(num x, num y) => _blink.BlinkSVGPathElement.$createSVGPathSegLinetoAbs_Callback(this, x, y);
+  PathSegLinetoAbs createSvgPathSegLinetoAbs(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoAbs_Callback_float_float(this, x, y);
 
   @DomName('SVGPathElement.createSVGPathSegLinetoHorizontalAbs')
   @DocsEditable()
-  PathSegLinetoHorizontalAbs createSvgPathSegLinetoHorizontalAbs(num x) => _blink.BlinkSVGPathElement.$createSVGPathSegLinetoHorizontalAbs_Callback(this, x);
+  PathSegLinetoHorizontalAbs createSvgPathSegLinetoHorizontalAbs(num x) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoHorizontalAbs_Callback_float(this, x);
 
   @DomName('SVGPathElement.createSVGPathSegLinetoHorizontalRel')
   @DocsEditable()
-  PathSegLinetoHorizontalRel createSvgPathSegLinetoHorizontalRel(num x) => _blink.BlinkSVGPathElement.$createSVGPathSegLinetoHorizontalRel_Callback(this, x);
+  PathSegLinetoHorizontalRel createSvgPathSegLinetoHorizontalRel(num x) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoHorizontalRel_Callback_float(this, x);
 
   @DomName('SVGPathElement.createSVGPathSegLinetoRel')
   @DocsEditable()
-  PathSegLinetoRel createSvgPathSegLinetoRel(num x, num y) => _blink.BlinkSVGPathElement.$createSVGPathSegLinetoRel_Callback(this, x, y);
+  PathSegLinetoRel createSvgPathSegLinetoRel(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoRel_Callback_float_float(this, x, y);
 
   @DomName('SVGPathElement.createSVGPathSegLinetoVerticalAbs')
   @DocsEditable()
-  PathSegLinetoVerticalAbs createSvgPathSegLinetoVerticalAbs(num y) => _blink.BlinkSVGPathElement.$createSVGPathSegLinetoVerticalAbs_Callback(this, y);
+  PathSegLinetoVerticalAbs createSvgPathSegLinetoVerticalAbs(num y) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoVerticalAbs_Callback_float(this, y);
 
   @DomName('SVGPathElement.createSVGPathSegLinetoVerticalRel')
   @DocsEditable()
-  PathSegLinetoVerticalRel createSvgPathSegLinetoVerticalRel(num y) => _blink.BlinkSVGPathElement.$createSVGPathSegLinetoVerticalRel_Callback(this, y);
+  PathSegLinetoVerticalRel createSvgPathSegLinetoVerticalRel(num y) => _blink.BlinkSVGPathElement.createSVGPathSegLinetoVerticalRel_Callback_float(this, y);
 
   @DomName('SVGPathElement.createSVGPathSegMovetoAbs')
   @DocsEditable()
-  PathSegMovetoAbs createSvgPathSegMovetoAbs(num x, num y) => _blink.BlinkSVGPathElement.$createSVGPathSegMovetoAbs_Callback(this, x, y);
+  PathSegMovetoAbs createSvgPathSegMovetoAbs(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegMovetoAbs_Callback_float_float(this, x, y);
 
   @DomName('SVGPathElement.createSVGPathSegMovetoRel')
   @DocsEditable()
-  PathSegMovetoRel createSvgPathSegMovetoRel(num x, num y) => _blink.BlinkSVGPathElement.$createSVGPathSegMovetoRel_Callback(this, x, y);
+  PathSegMovetoRel createSvgPathSegMovetoRel(num x, num y) => _blink.BlinkSVGPathElement.createSVGPathSegMovetoRel_Callback_float_float(this, x, y);
 
   @DomName('SVGPathElement.getPathSegAtLength')
   @DocsEditable()
-  int getPathSegAtLength(num distance) => _blink.BlinkSVGPathElement.$getPathSegAtLength_Callback(this, distance);
+  int getPathSegAtLength(num distance) => _blink.BlinkSVGPathElement.getPathSegAtLength_Callback_float(this, distance);
 
   @DomName('SVGPathElement.getPointAtLength')
   @DocsEditable()
-  Point getPointAtLength(num distance) => _blink.BlinkSVGPathElement.$getPointAtLength_Callback(this, distance);
+  Point getPointAtLength(num distance) => _blink.BlinkSVGPathElement.getPointAtLength_Callback_float(this, distance);
 
   @DomName('SVGPathElement.getTotalLength')
   @DocsEditable()
-  double getTotalLength() => _blink.BlinkSVGPathElement.$getTotalLength_Callback(this);
+  double getTotalLength() => _blink.BlinkSVGPathElement.getTotalLength_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4423,11 +4423,11 @@
 
   @DomName('SVGPathSeg.pathSegType')
   @DocsEditable()
-  int get pathSegType => _blink.BlinkSVGPathSeg.$pathSegType_Getter(this);
+  int get pathSegType => _blink.BlinkSVGPathSeg.pathSegType_Getter(this);
 
   @DomName('SVGPathSeg.pathSegTypeAsLetter')
   @DocsEditable()
-  String get pathSegTypeAsLetter => _blink.BlinkSVGPathSeg.$pathSegTypeAsLetter_Getter(this);
+  String get pathSegTypeAsLetter => _blink.BlinkSVGPathSeg.pathSegTypeAsLetter_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4446,59 +4446,59 @@
 
   @DomName('SVGPathSegArcAbs.angle')
   @DocsEditable()
-  num get angle => _blink.BlinkSVGPathSegArcAbs.$angle_Getter(this);
+  num get angle => _blink.BlinkSVGPathSegArcAbs.angle_Getter(this);
 
   @DomName('SVGPathSegArcAbs.angle')
   @DocsEditable()
-  void set angle(num value) => _blink.BlinkSVGPathSegArcAbs.$angle_Setter(this, value);
+  void set angle(num value) => _blink.BlinkSVGPathSegArcAbs.angle_Setter_float(this, value);
 
   @DomName('SVGPathSegArcAbs.largeArcFlag')
   @DocsEditable()
-  bool get largeArcFlag => _blink.BlinkSVGPathSegArcAbs.$largeArcFlag_Getter(this);
+  bool get largeArcFlag => _blink.BlinkSVGPathSegArcAbs.largeArcFlag_Getter(this);
 
   @DomName('SVGPathSegArcAbs.largeArcFlag')
   @DocsEditable()
-  void set largeArcFlag(bool value) => _blink.BlinkSVGPathSegArcAbs.$largeArcFlag_Setter(this, value);
+  void set largeArcFlag(bool value) => _blink.BlinkSVGPathSegArcAbs.largeArcFlag_Setter_boolean(this, value);
 
   @DomName('SVGPathSegArcAbs.r1')
   @DocsEditable()
-  num get r1 => _blink.BlinkSVGPathSegArcAbs.$r1_Getter(this);
+  num get r1 => _blink.BlinkSVGPathSegArcAbs.r1_Getter(this);
 
   @DomName('SVGPathSegArcAbs.r1')
   @DocsEditable()
-  void set r1(num value) => _blink.BlinkSVGPathSegArcAbs.$r1_Setter(this, value);
+  void set r1(num value) => _blink.BlinkSVGPathSegArcAbs.r1_Setter_float(this, value);
 
   @DomName('SVGPathSegArcAbs.r2')
   @DocsEditable()
-  num get r2 => _blink.BlinkSVGPathSegArcAbs.$r2_Getter(this);
+  num get r2 => _blink.BlinkSVGPathSegArcAbs.r2_Getter(this);
 
   @DomName('SVGPathSegArcAbs.r2')
   @DocsEditable()
-  void set r2(num value) => _blink.BlinkSVGPathSegArcAbs.$r2_Setter(this, value);
+  void set r2(num value) => _blink.BlinkSVGPathSegArcAbs.r2_Setter_float(this, value);
 
   @DomName('SVGPathSegArcAbs.sweepFlag')
   @DocsEditable()
-  bool get sweepFlag => _blink.BlinkSVGPathSegArcAbs.$sweepFlag_Getter(this);
+  bool get sweepFlag => _blink.BlinkSVGPathSegArcAbs.sweepFlag_Getter(this);
 
   @DomName('SVGPathSegArcAbs.sweepFlag')
   @DocsEditable()
-  void set sweepFlag(bool value) => _blink.BlinkSVGPathSegArcAbs.$sweepFlag_Setter(this, value);
+  void set sweepFlag(bool value) => _blink.BlinkSVGPathSegArcAbs.sweepFlag_Setter_boolean(this, value);
 
   @DomName('SVGPathSegArcAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegArcAbs.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegArcAbs.x_Getter(this);
 
   @DomName('SVGPathSegArcAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegArcAbs.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegArcAbs.x_Setter_float(this, value);
 
   @DomName('SVGPathSegArcAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegArcAbs.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegArcAbs.y_Getter(this);
 
   @DomName('SVGPathSegArcAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegArcAbs.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegArcAbs.y_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4517,59 +4517,59 @@
 
   @DomName('SVGPathSegArcRel.angle')
   @DocsEditable()
-  num get angle => _blink.BlinkSVGPathSegArcRel.$angle_Getter(this);
+  num get angle => _blink.BlinkSVGPathSegArcRel.angle_Getter(this);
 
   @DomName('SVGPathSegArcRel.angle')
   @DocsEditable()
-  void set angle(num value) => _blink.BlinkSVGPathSegArcRel.$angle_Setter(this, value);
+  void set angle(num value) => _blink.BlinkSVGPathSegArcRel.angle_Setter_float(this, value);
 
   @DomName('SVGPathSegArcRel.largeArcFlag')
   @DocsEditable()
-  bool get largeArcFlag => _blink.BlinkSVGPathSegArcRel.$largeArcFlag_Getter(this);
+  bool get largeArcFlag => _blink.BlinkSVGPathSegArcRel.largeArcFlag_Getter(this);
 
   @DomName('SVGPathSegArcRel.largeArcFlag')
   @DocsEditable()
-  void set largeArcFlag(bool value) => _blink.BlinkSVGPathSegArcRel.$largeArcFlag_Setter(this, value);
+  void set largeArcFlag(bool value) => _blink.BlinkSVGPathSegArcRel.largeArcFlag_Setter_boolean(this, value);
 
   @DomName('SVGPathSegArcRel.r1')
   @DocsEditable()
-  num get r1 => _blink.BlinkSVGPathSegArcRel.$r1_Getter(this);
+  num get r1 => _blink.BlinkSVGPathSegArcRel.r1_Getter(this);
 
   @DomName('SVGPathSegArcRel.r1')
   @DocsEditable()
-  void set r1(num value) => _blink.BlinkSVGPathSegArcRel.$r1_Setter(this, value);
+  void set r1(num value) => _blink.BlinkSVGPathSegArcRel.r1_Setter_float(this, value);
 
   @DomName('SVGPathSegArcRel.r2')
   @DocsEditable()
-  num get r2 => _blink.BlinkSVGPathSegArcRel.$r2_Getter(this);
+  num get r2 => _blink.BlinkSVGPathSegArcRel.r2_Getter(this);
 
   @DomName('SVGPathSegArcRel.r2')
   @DocsEditable()
-  void set r2(num value) => _blink.BlinkSVGPathSegArcRel.$r2_Setter(this, value);
+  void set r2(num value) => _blink.BlinkSVGPathSegArcRel.r2_Setter_float(this, value);
 
   @DomName('SVGPathSegArcRel.sweepFlag')
   @DocsEditable()
-  bool get sweepFlag => _blink.BlinkSVGPathSegArcRel.$sweepFlag_Getter(this);
+  bool get sweepFlag => _blink.BlinkSVGPathSegArcRel.sweepFlag_Getter(this);
 
   @DomName('SVGPathSegArcRel.sweepFlag')
   @DocsEditable()
-  void set sweepFlag(bool value) => _blink.BlinkSVGPathSegArcRel.$sweepFlag_Setter(this, value);
+  void set sweepFlag(bool value) => _blink.BlinkSVGPathSegArcRel.sweepFlag_Setter_boolean(this, value);
 
   @DomName('SVGPathSegArcRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegArcRel.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegArcRel.x_Getter(this);
 
   @DomName('SVGPathSegArcRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegArcRel.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegArcRel.x_Setter_float(this, value);
 
   @DomName('SVGPathSegArcRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegArcRel.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegArcRel.y_Getter(this);
 
   @DomName('SVGPathSegArcRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegArcRel.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegArcRel.y_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4603,51 +4603,51 @@
 
   @DomName('SVGPathSegCurvetoCubicAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoCubicAbs.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegCurvetoCubicAbs.x_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.x_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicAbs.x1')
   @DocsEditable()
-  num get x1 => _blink.BlinkSVGPathSegCurvetoCubicAbs.$x1_Getter(this);
+  num get x1 => _blink.BlinkSVGPathSegCurvetoCubicAbs.x1_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicAbs.x1')
   @DocsEditable()
-  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.$x1_Setter(this, value);
+  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.x1_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicAbs.x2')
   @DocsEditable()
-  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicAbs.$x2_Getter(this);
+  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicAbs.x2_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicAbs.x2')
   @DocsEditable()
-  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.$x2_Setter(this, value);
+  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.x2_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoCubicAbs.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegCurvetoCubicAbs.y_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.y_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicAbs.y1')
   @DocsEditable()
-  num get y1 => _blink.BlinkSVGPathSegCurvetoCubicAbs.$y1_Getter(this);
+  num get y1 => _blink.BlinkSVGPathSegCurvetoCubicAbs.y1_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicAbs.y1')
   @DocsEditable()
-  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.$y1_Setter(this, value);
+  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.y1_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicAbs.y2')
   @DocsEditable()
-  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicAbs.$y2_Getter(this);
+  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicAbs.y2_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicAbs.y2')
   @DocsEditable()
-  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.$y2_Setter(this, value);
+  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.y2_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4666,51 +4666,51 @@
 
   @DomName('SVGPathSegCurvetoCubicRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoCubicRel.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegCurvetoCubicRel.x_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.x_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicRel.x1')
   @DocsEditable()
-  num get x1 => _blink.BlinkSVGPathSegCurvetoCubicRel.$x1_Getter(this);
+  num get x1 => _blink.BlinkSVGPathSegCurvetoCubicRel.x1_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicRel.x1')
   @DocsEditable()
-  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.$x1_Setter(this, value);
+  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.x1_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicRel.x2')
   @DocsEditable()
-  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicRel.$x2_Getter(this);
+  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicRel.x2_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicRel.x2')
   @DocsEditable()
-  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.$x2_Setter(this, value);
+  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.x2_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoCubicRel.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegCurvetoCubicRel.y_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.y_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicRel.y1')
   @DocsEditable()
-  num get y1 => _blink.BlinkSVGPathSegCurvetoCubicRel.$y1_Getter(this);
+  num get y1 => _blink.BlinkSVGPathSegCurvetoCubicRel.y1_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicRel.y1')
   @DocsEditable()
-  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.$y1_Setter(this, value);
+  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.y1_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicRel.y2')
   @DocsEditable()
-  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicRel.$y2_Getter(this);
+  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicRel.y2_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicRel.y2')
   @DocsEditable()
-  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.$y2_Setter(this, value);
+  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.y2_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4729,35 +4729,35 @@
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.x_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.x_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.x2')
   @DocsEditable()
-  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.$x2_Getter(this);
+  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.x2_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.x2')
   @DocsEditable()
-  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.$x2_Setter(this, value);
+  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.x2_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.y_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.y_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.y2')
   @DocsEditable()
-  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.$y2_Getter(this);
+  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.y2_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.y2')
   @DocsEditable()
-  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.$y2_Setter(this, value);
+  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.y2_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4776,35 +4776,35 @@
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.x_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.x_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.x2')
   @DocsEditable()
-  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.$x2_Getter(this);
+  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.x2_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.x2')
   @DocsEditable()
-  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.$x2_Setter(this, value);
+  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.x2_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.y_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.y_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.y2')
   @DocsEditable()
-  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.$y2_Getter(this);
+  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.y2_Getter(this);
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.y2')
   @DocsEditable()
-  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.$y2_Setter(this, value);
+  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.y2_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4823,35 +4823,35 @@
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.x_Getter(this);
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.x_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.x1')
   @DocsEditable()
-  num get x1 => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.$x1_Getter(this);
+  num get x1 => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.x1_Getter(this);
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.x1')
   @DocsEditable()
-  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.$x1_Setter(this, value);
+  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.x1_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.y_Getter(this);
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.y_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.y1')
   @DocsEditable()
-  num get y1 => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.$y1_Getter(this);
+  num get y1 => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.y1_Getter(this);
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.y1')
   @DocsEditable()
-  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.$y1_Setter(this, value);
+  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.y1_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4870,35 +4870,35 @@
 
   @DomName('SVGPathSegCurvetoQuadraticRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticRel.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticRel.x_Getter(this);
 
   @DomName('SVGPathSegCurvetoQuadraticRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.x_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticRel.x1')
   @DocsEditable()
-  num get x1 => _blink.BlinkSVGPathSegCurvetoQuadraticRel.$x1_Getter(this);
+  num get x1 => _blink.BlinkSVGPathSegCurvetoQuadraticRel.x1_Getter(this);
 
   @DomName('SVGPathSegCurvetoQuadraticRel.x1')
   @DocsEditable()
-  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.$x1_Setter(this, value);
+  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.x1_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticRel.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticRel.y_Getter(this);
 
   @DomName('SVGPathSegCurvetoQuadraticRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.y_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticRel.y1')
   @DocsEditable()
-  num get y1 => _blink.BlinkSVGPathSegCurvetoQuadraticRel.$y1_Getter(this);
+  num get y1 => _blink.BlinkSVGPathSegCurvetoQuadraticRel.y1_Getter(this);
 
   @DomName('SVGPathSegCurvetoQuadraticRel.y1')
   @DocsEditable()
-  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.$y1_Setter(this, value);
+  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.y1_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4917,19 +4917,19 @@
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.x_Getter(this);
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.x_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.y_Getter(this);
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.y_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4948,19 +4948,19 @@
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.x_Getter(this);
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.x_Setter_float(this, value);
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.y_Getter(this);
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.y_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4979,19 +4979,19 @@
 
   @DomName('SVGPathSegLinetoAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegLinetoAbs.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegLinetoAbs.x_Getter(this);
 
   @DomName('SVGPathSegLinetoAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegLinetoAbs.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegLinetoAbs.x_Setter_float(this, value);
 
   @DomName('SVGPathSegLinetoAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegLinetoAbs.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegLinetoAbs.y_Getter(this);
 
   @DomName('SVGPathSegLinetoAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegLinetoAbs.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegLinetoAbs.y_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5010,11 +5010,11 @@
 
   @DomName('SVGPathSegLinetoHorizontalAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegLinetoHorizontalAbs.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegLinetoHorizontalAbs.x_Getter(this);
 
   @DomName('SVGPathSegLinetoHorizontalAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegLinetoHorizontalAbs.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegLinetoHorizontalAbs.x_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5033,11 +5033,11 @@
 
   @DomName('SVGPathSegLinetoHorizontalRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegLinetoHorizontalRel.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegLinetoHorizontalRel.x_Getter(this);
 
   @DomName('SVGPathSegLinetoHorizontalRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegLinetoHorizontalRel.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegLinetoHorizontalRel.x_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5056,19 +5056,19 @@
 
   @DomName('SVGPathSegLinetoRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegLinetoRel.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegLinetoRel.x_Getter(this);
 
   @DomName('SVGPathSegLinetoRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegLinetoRel.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegLinetoRel.x_Setter_float(this, value);
 
   @DomName('SVGPathSegLinetoRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegLinetoRel.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegLinetoRel.y_Getter(this);
 
   @DomName('SVGPathSegLinetoRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegLinetoRel.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegLinetoRel.y_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5087,11 +5087,11 @@
 
   @DomName('SVGPathSegLinetoVerticalAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegLinetoVerticalAbs.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegLinetoVerticalAbs.y_Getter(this);
 
   @DomName('SVGPathSegLinetoVerticalAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegLinetoVerticalAbs.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegLinetoVerticalAbs.y_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5110,11 +5110,11 @@
 
   @DomName('SVGPathSegLinetoVerticalRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegLinetoVerticalRel.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegLinetoVerticalRel.y_Getter(this);
 
   @DomName('SVGPathSegLinetoVerticalRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegLinetoVerticalRel.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegLinetoVerticalRel.y_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5133,7 +5133,7 @@
 
   @DomName('SVGPathSegList.numberOfItems')
   @DocsEditable()
-  int get numberOfItems => _blink.BlinkSVGPathSegList.$numberOfItems_Getter(this);
+  int get numberOfItems => _blink.BlinkSVGPathSegList.numberOfItems_Getter(this);
 
   PathSeg operator[](int index) {
     if (index < 0 || index >= length)
@@ -5183,31 +5183,31 @@
 
   @DomName('SVGPathSegList.appendItem')
   @DocsEditable()
-  PathSeg appendItem(PathSeg newItem) => _blink.BlinkSVGPathSegList.$appendItem_Callback(this, newItem);
+  PathSeg appendItem(PathSeg newItem) => _blink.BlinkSVGPathSegList.appendItem_Callback_SVGPathSeg(this, newItem);
 
   @DomName('SVGPathSegList.clear')
   @DocsEditable()
-  void clear() => _blink.BlinkSVGPathSegList.$clear_Callback(this);
+  void clear() => _blink.BlinkSVGPathSegList.clear_Callback(this);
 
   @DomName('SVGPathSegList.getItem')
   @DocsEditable()
-  PathSeg getItem(int index) => _blink.BlinkSVGPathSegList.$getItem_Callback(this, index);
+  PathSeg getItem(int index) => _blink.BlinkSVGPathSegList.getItem_Callback_ul(this, index);
 
   @DomName('SVGPathSegList.initialize')
   @DocsEditable()
-  PathSeg initialize(PathSeg newItem) => _blink.BlinkSVGPathSegList.$initialize_Callback(this, newItem);
+  PathSeg initialize(PathSeg newItem) => _blink.BlinkSVGPathSegList.initialize_Callback_SVGPathSeg(this, newItem);
 
   @DomName('SVGPathSegList.insertItemBefore')
   @DocsEditable()
-  PathSeg insertItemBefore(PathSeg newItem, int index) => _blink.BlinkSVGPathSegList.$insertItemBefore_Callback(this, newItem, index);
+  PathSeg insertItemBefore(PathSeg newItem, int index) => _blink.BlinkSVGPathSegList.insertItemBefore_Callback_SVGPathSeg_ul(this, newItem, index);
 
   @DomName('SVGPathSegList.removeItem')
   @DocsEditable()
-  PathSeg removeItem(int index) => _blink.BlinkSVGPathSegList.$removeItem_Callback(this, index);
+  PathSeg removeItem(int index) => _blink.BlinkSVGPathSegList.removeItem_Callback_ul(this, index);
 
   @DomName('SVGPathSegList.replaceItem')
   @DocsEditable()
-  PathSeg replaceItem(PathSeg newItem, int index) => _blink.BlinkSVGPathSegList.$replaceItem_Callback(this, newItem, index);
+  PathSeg replaceItem(PathSeg newItem, int index) => _blink.BlinkSVGPathSegList.replaceItem_Callback_SVGPathSeg_ul(this, newItem, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5226,19 +5226,19 @@
 
   @DomName('SVGPathSegMovetoAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegMovetoAbs.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegMovetoAbs.x_Getter(this);
 
   @DomName('SVGPathSegMovetoAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegMovetoAbs.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegMovetoAbs.x_Setter_float(this, value);
 
   @DomName('SVGPathSegMovetoAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegMovetoAbs.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegMovetoAbs.y_Getter(this);
 
   @DomName('SVGPathSegMovetoAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegMovetoAbs.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegMovetoAbs.y_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5257,19 +5257,19 @@
 
   @DomName('SVGPathSegMovetoRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegMovetoRel.$x_Getter(this);
+  num get x => _blink.BlinkSVGPathSegMovetoRel.x_Getter(this);
 
   @DomName('SVGPathSegMovetoRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegMovetoRel.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPathSegMovetoRel.x_Setter_float(this, value);
 
   @DomName('SVGPathSegMovetoRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegMovetoRel.$y_Getter(this);
+  num get y => _blink.BlinkSVGPathSegMovetoRel.y_Getter(this);
 
   @DomName('SVGPathSegMovetoRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegMovetoRel.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPathSegMovetoRel.y_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5298,59 +5298,59 @@
 
   @DomName('SVGPatternElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGPatternElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGPatternElement.height_Getter(this);
 
   @DomName('SVGPatternElement.patternContentUnits')
   @DocsEditable()
-  AnimatedEnumeration get patternContentUnits => _blink.BlinkSVGPatternElement.$patternContentUnits_Getter(this);
+  AnimatedEnumeration get patternContentUnits => _blink.BlinkSVGPatternElement.patternContentUnits_Getter(this);
 
   @DomName('SVGPatternElement.patternTransform')
   @DocsEditable()
-  AnimatedTransformList get patternTransform => _blink.BlinkSVGPatternElement.$patternTransform_Getter(this);
+  AnimatedTransformList get patternTransform => _blink.BlinkSVGPatternElement.patternTransform_Getter(this);
 
   @DomName('SVGPatternElement.patternUnits')
   @DocsEditable()
-  AnimatedEnumeration get patternUnits => _blink.BlinkSVGPatternElement.$patternUnits_Getter(this);
+  AnimatedEnumeration get patternUnits => _blink.BlinkSVGPatternElement.patternUnits_Getter(this);
 
   @DomName('SVGPatternElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGPatternElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGPatternElement.width_Getter(this);
 
   @DomName('SVGPatternElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGPatternElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGPatternElement.x_Getter(this);
 
   @DomName('SVGPatternElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGPatternElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGPatternElement.y_Getter(this);
 
   @DomName('SVGPatternElement.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGPatternElement.$preserveAspectRatio_Getter(this);
+  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGPatternElement.preserveAspectRatio_Getter(this);
 
   @DomName('SVGPatternElement.viewBox')
   @DocsEditable()
-  AnimatedRect get viewBox => _blink.BlinkSVGPatternElement.$viewBox_Getter(this);
+  AnimatedRect get viewBox => _blink.BlinkSVGPatternElement.viewBox_Getter(this);
 
   @DomName('SVGPatternElement.requiredExtensions')
   @DocsEditable()
-  StringList get requiredExtensions => _blink.BlinkSVGPatternElement.$requiredExtensions_Getter(this);
+  StringList get requiredExtensions => _blink.BlinkSVGPatternElement.requiredExtensions_Getter(this);
 
   @DomName('SVGPatternElement.requiredFeatures')
   @DocsEditable()
-  StringList get requiredFeatures => _blink.BlinkSVGPatternElement.$requiredFeatures_Getter(this);
+  StringList get requiredFeatures => _blink.BlinkSVGPatternElement.requiredFeatures_Getter(this);
 
   @DomName('SVGPatternElement.systemLanguage')
   @DocsEditable()
-  StringList get systemLanguage => _blink.BlinkSVGPatternElement.$systemLanguage_Getter(this);
+  StringList get systemLanguage => _blink.BlinkSVGPatternElement.systemLanguage_Getter(this);
 
   @DomName('SVGPatternElement.hasExtension')
   @DocsEditable()
-  bool hasExtension(String extension) => _blink.BlinkSVGPatternElement.$hasExtension_Callback(this, extension);
+  bool hasExtension(String extension) => _blink.BlinkSVGPatternElement.hasExtension_Callback_DOMString(this, extension);
 
   @DomName('SVGPatternElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGPatternElement.$href_Getter(this);
+  AnimatedString get href => _blink.BlinkSVGPatternElement.href_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5369,23 +5369,23 @@
 
   @DomName('SVGPoint.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPoint.$x_Getter(this);
+  num get x => _blink.BlinkSVGPoint.x_Getter(this);
 
   @DomName('SVGPoint.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPoint.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGPoint.x_Setter_float(this, value);
 
   @DomName('SVGPoint.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPoint.$y_Getter(this);
+  num get y => _blink.BlinkSVGPoint.y_Getter(this);
 
   @DomName('SVGPoint.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPoint.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGPoint.y_Setter_float(this, value);
 
   @DomName('SVGPoint.matrixTransform')
   @DocsEditable()
-  Point matrixTransform(Matrix matrix) => _blink.BlinkSVGPoint.$matrixTransform_Callback(this, matrix);
+  Point matrixTransform(Matrix matrix) => _blink.BlinkSVGPoint.matrixTransform_Callback_SVGMatrix(this, matrix);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5404,35 +5404,35 @@
 
   @DomName('SVGPointList.numberOfItems')
   @DocsEditable()
-  int get numberOfItems => _blink.BlinkSVGPointList.$numberOfItems_Getter(this);
+  int get numberOfItems => _blink.BlinkSVGPointList.numberOfItems_Getter(this);
 
   @DomName('SVGPointList.appendItem')
   @DocsEditable()
-  Point appendItem(Point item) => _blink.BlinkSVGPointList.$appendItem_Callback(this, item);
+  Point appendItem(Point item) => _blink.BlinkSVGPointList.appendItem_Callback_SVGPoint(this, item);
 
   @DomName('SVGPointList.clear')
   @DocsEditable()
-  void clear() => _blink.BlinkSVGPointList.$clear_Callback(this);
+  void clear() => _blink.BlinkSVGPointList.clear_Callback(this);
 
   @DomName('SVGPointList.getItem')
   @DocsEditable()
-  Point getItem(int index) => _blink.BlinkSVGPointList.$getItem_Callback(this, index);
+  Point getItem(int index) => _blink.BlinkSVGPointList.getItem_Callback_ul(this, index);
 
   @DomName('SVGPointList.initialize')
   @DocsEditable()
-  Point initialize(Point item) => _blink.BlinkSVGPointList.$initialize_Callback(this, item);
+  Point initialize(Point item) => _blink.BlinkSVGPointList.initialize_Callback_SVGPoint(this, item);
 
   @DomName('SVGPointList.insertItemBefore')
   @DocsEditable()
-  Point insertItemBefore(Point item, int index) => _blink.BlinkSVGPointList.$insertItemBefore_Callback(this, item, index);
+  Point insertItemBefore(Point item, int index) => _blink.BlinkSVGPointList.insertItemBefore_Callback_SVGPoint_ul(this, item, index);
 
   @DomName('SVGPointList.removeItem')
   @DocsEditable()
-  Point removeItem(int index) => _blink.BlinkSVGPointList.$removeItem_Callback(this, index);
+  Point removeItem(int index) => _blink.BlinkSVGPointList.removeItem_Callback_ul(this, index);
 
   @DomName('SVGPointList.replaceItem')
   @DocsEditable()
-  Point replaceItem(Point item, int index) => _blink.BlinkSVGPointList.$replaceItem_Callback(this, item, index);
+  Point replaceItem(Point item, int index) => _blink.BlinkSVGPointList.replaceItem_Callback_SVGPoint_ul(this, item, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5461,11 +5461,11 @@
 
   @DomName('SVGPolygonElement.animatedPoints')
   @DocsEditable()
-  PointList get animatedPoints => _blink.BlinkSVGPolygonElement.$animatedPoints_Getter(this);
+  PointList get animatedPoints => _blink.BlinkSVGPolygonElement.animatedPoints_Getter(this);
 
   @DomName('SVGPolygonElement.points')
   @DocsEditable()
-  PointList get points => _blink.BlinkSVGPolygonElement.$points_Getter(this);
+  PointList get points => _blink.BlinkSVGPolygonElement.points_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5494,11 +5494,11 @@
 
   @DomName('SVGPolylineElement.animatedPoints')
   @DocsEditable()
-  PointList get animatedPoints => _blink.BlinkSVGPolylineElement.$animatedPoints_Getter(this);
+  PointList get animatedPoints => _blink.BlinkSVGPolylineElement.animatedPoints_Getter(this);
 
   @DomName('SVGPolylineElement.points')
   @DocsEditable()
-  PointList get points => _blink.BlinkSVGPolylineElement.$points_Getter(this);
+  PointList get points => _blink.BlinkSVGPolylineElement.points_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5573,19 +5573,19 @@
 
   @DomName('SVGPreserveAspectRatio.align')
   @DocsEditable()
-  int get align => _blink.BlinkSVGPreserveAspectRatio.$align_Getter(this);
+  int get align => _blink.BlinkSVGPreserveAspectRatio.align_Getter(this);
 
   @DomName('SVGPreserveAspectRatio.align')
   @DocsEditable()
-  void set align(int value) => _blink.BlinkSVGPreserveAspectRatio.$align_Setter(this, value);
+  void set align(int value) => _blink.BlinkSVGPreserveAspectRatio.align_Setter_us(this, value);
 
   @DomName('SVGPreserveAspectRatio.meetOrSlice')
   @DocsEditable()
-  int get meetOrSlice => _blink.BlinkSVGPreserveAspectRatio.$meetOrSlice_Getter(this);
+  int get meetOrSlice => _blink.BlinkSVGPreserveAspectRatio.meetOrSlice_Getter(this);
 
   @DomName('SVGPreserveAspectRatio.meetOrSlice')
   @DocsEditable()
-  void set meetOrSlice(int value) => _blink.BlinkSVGPreserveAspectRatio.$meetOrSlice_Setter(this, value);
+  void set meetOrSlice(int value) => _blink.BlinkSVGPreserveAspectRatio.meetOrSlice_Setter_us(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5614,27 +5614,27 @@
 
   @DomName('SVGRadialGradientElement.cx')
   @DocsEditable()
-  AnimatedLength get cx => _blink.BlinkSVGRadialGradientElement.$cx_Getter(this);
+  AnimatedLength get cx => _blink.BlinkSVGRadialGradientElement.cx_Getter(this);
 
   @DomName('SVGRadialGradientElement.cy')
   @DocsEditable()
-  AnimatedLength get cy => _blink.BlinkSVGRadialGradientElement.$cy_Getter(this);
+  AnimatedLength get cy => _blink.BlinkSVGRadialGradientElement.cy_Getter(this);
 
   @DomName('SVGRadialGradientElement.fr')
   @DocsEditable()
-  AnimatedLength get fr => _blink.BlinkSVGRadialGradientElement.$fr_Getter(this);
+  AnimatedLength get fr => _blink.BlinkSVGRadialGradientElement.fr_Getter(this);
 
   @DomName('SVGRadialGradientElement.fx')
   @DocsEditable()
-  AnimatedLength get fx => _blink.BlinkSVGRadialGradientElement.$fx_Getter(this);
+  AnimatedLength get fx => _blink.BlinkSVGRadialGradientElement.fx_Getter(this);
 
   @DomName('SVGRadialGradientElement.fy')
   @DocsEditable()
-  AnimatedLength get fy => _blink.BlinkSVGRadialGradientElement.$fy_Getter(this);
+  AnimatedLength get fy => _blink.BlinkSVGRadialGradientElement.fy_Getter(this);
 
   @DomName('SVGRadialGradientElement.r')
   @DocsEditable()
-  AnimatedLength get r => _blink.BlinkSVGRadialGradientElement.$r_Getter(this);
+  AnimatedLength get r => _blink.BlinkSVGRadialGradientElement.r_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5653,35 +5653,35 @@
 
   @DomName('SVGRect.height')
   @DocsEditable()
-  num get height => _blink.BlinkSVGRect.$height_Getter(this);
+  num get height => _blink.BlinkSVGRect.height_Getter(this);
 
   @DomName('SVGRect.height')
   @DocsEditable()
-  void set height(num value) => _blink.BlinkSVGRect.$height_Setter(this, value);
+  void set height(num value) => _blink.BlinkSVGRect.height_Setter_float(this, value);
 
   @DomName('SVGRect.width')
   @DocsEditable()
-  num get width => _blink.BlinkSVGRect.$width_Getter(this);
+  num get width => _blink.BlinkSVGRect.width_Getter(this);
 
   @DomName('SVGRect.width')
   @DocsEditable()
-  void set width(num value) => _blink.BlinkSVGRect.$width_Setter(this, value);
+  void set width(num value) => _blink.BlinkSVGRect.width_Setter_float(this, value);
 
   @DomName('SVGRect.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGRect.$x_Getter(this);
+  num get x => _blink.BlinkSVGRect.x_Getter(this);
 
   @DomName('SVGRect.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGRect.$x_Setter(this, value);
+  void set x(num value) => _blink.BlinkSVGRect.x_Setter_float(this, value);
 
   @DomName('SVGRect.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGRect.$y_Getter(this);
+  num get y => _blink.BlinkSVGRect.y_Getter(this);
 
   @DomName('SVGRect.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGRect.$y_Setter(this, value);
+  void set y(num value) => _blink.BlinkSVGRect.y_Setter_float(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5710,27 +5710,27 @@
 
   @DomName('SVGRectElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGRectElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGRectElement.height_Getter(this);
 
   @DomName('SVGRectElement.rx')
   @DocsEditable()
-  AnimatedLength get rx => _blink.BlinkSVGRectElement.$rx_Getter(this);
+  AnimatedLength get rx => _blink.BlinkSVGRectElement.rx_Getter(this);
 
   @DomName('SVGRectElement.ry')
   @DocsEditable()
-  AnimatedLength get ry => _blink.BlinkSVGRectElement.$ry_Getter(this);
+  AnimatedLength get ry => _blink.BlinkSVGRectElement.ry_Getter(this);
 
   @DomName('SVGRectElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGRectElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGRectElement.width_Getter(this);
 
   @DomName('SVGRectElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGRectElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGRectElement.x_Getter(this);
 
   @DomName('SVGRectElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGRectElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGRectElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5798,15 +5798,15 @@
 
   @DomName('SVGScriptElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkSVGScriptElement.$type_Getter(this);
+  String get type => _blink.BlinkSVGScriptElement.type_Getter(this);
 
   @DomName('SVGScriptElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkSVGScriptElement.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkSVGScriptElement.type_Setter_DOMString(this, value);
 
   @DomName('SVGScriptElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGScriptElement.$href_Getter(this);
+  AnimatedString get href => _blink.BlinkSVGScriptElement.href_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5866,7 +5866,7 @@
 
   @DomName('SVGStopElement.offset')
   @DocsEditable()
-  AnimatedNumber get gradientOffset => _blink.BlinkSVGStopElement.$offset_Getter(this);
+  AnimatedNumber get gradientOffset => _blink.BlinkSVGStopElement.offset_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5885,7 +5885,7 @@
 
   @DomName('SVGStringList.numberOfItems')
   @DocsEditable()
-  int get numberOfItems => _blink.BlinkSVGStringList.$numberOfItems_Getter(this);
+  int get numberOfItems => _blink.BlinkSVGStringList.numberOfItems_Getter(this);
 
   String operator[](int index) {
     if (index < 0 || index >= length)
@@ -5935,31 +5935,31 @@
 
   @DomName('SVGStringList.appendItem')
   @DocsEditable()
-  String appendItem(String item) => _blink.BlinkSVGStringList.$appendItem_Callback(this, item);
+  String appendItem(String item) => _blink.BlinkSVGStringList.appendItem_Callback_DOMString(this, item);
 
   @DomName('SVGStringList.clear')
   @DocsEditable()
-  void clear() => _blink.BlinkSVGStringList.$clear_Callback(this);
+  void clear() => _blink.BlinkSVGStringList.clear_Callback(this);
 
   @DomName('SVGStringList.getItem')
   @DocsEditable()
-  String getItem(int index) => _blink.BlinkSVGStringList.$getItem_Callback(this, index);
+  String getItem(int index) => _blink.BlinkSVGStringList.getItem_Callback_ul(this, index);
 
   @DomName('SVGStringList.initialize')
   @DocsEditable()
-  String initialize(String item) => _blink.BlinkSVGStringList.$initialize_Callback(this, item);
+  String initialize(String item) => _blink.BlinkSVGStringList.initialize_Callback_DOMString(this, item);
 
   @DomName('SVGStringList.insertItemBefore')
   @DocsEditable()
-  String insertItemBefore(String item, int index) => _blink.BlinkSVGStringList.$insertItemBefore_Callback(this, item, index);
+  String insertItemBefore(String item, int index) => _blink.BlinkSVGStringList.insertItemBefore_Callback_DOMString_ul(this, item, index);
 
   @DomName('SVGStringList.removeItem')
   @DocsEditable()
-  String removeItem(int index) => _blink.BlinkSVGStringList.$removeItem_Callback(this, index);
+  String removeItem(int index) => _blink.BlinkSVGStringList.removeItem_Callback_ul(this, index);
 
   @DomName('SVGStringList.replaceItem')
   @DocsEditable()
-  String replaceItem(String item, int index) => _blink.BlinkSVGStringList.$replaceItem_Callback(this, item, index);
+  String replaceItem(String item, int index) => _blink.BlinkSVGStringList.replaceItem_Callback_DOMString_ul(this, item, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5989,35 +5989,35 @@
 
   @DomName('SVGStyleElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkSVGStyleElement.$disabled_Getter(this);
+  bool get disabled => _blink.BlinkSVGStyleElement.disabled_Getter(this);
 
   @DomName('SVGStyleElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkSVGStyleElement.$disabled_Setter(this, value);
+  void set disabled(bool value) => _blink.BlinkSVGStyleElement.disabled_Setter_boolean(this, value);
 
   @DomName('SVGStyleElement.media')
   @DocsEditable()
-  String get media => _blink.BlinkSVGStyleElement.$media_Getter(this);
+  String get media => _blink.BlinkSVGStyleElement.media_Getter(this);
 
   @DomName('SVGStyleElement.media')
   @DocsEditable()
-  void set media(String value) => _blink.BlinkSVGStyleElement.$media_Setter(this, value);
+  void set media(String value) => _blink.BlinkSVGStyleElement.media_Setter_DOMString(this, value);
 
   @DomName('SVGStyleElement.title')
   @DocsEditable()
-  String get title => _blink.BlinkSVGStyleElement.$title_Getter(this);
+  String get title => _blink.BlinkSVGStyleElement.title_Getter(this);
 
   @DomName('SVGStyleElement.title')
   @DocsEditable()
-  void set title(String value) => _blink.BlinkSVGStyleElement.$title_Setter(this, value);
+  void set title(String value) => _blink.BlinkSVGStyleElement.title_Setter_DOMString(this, value);
 
   @DomName('SVGStyleElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkSVGStyleElement.$type_Getter(this);
+  String get type => _blink.BlinkSVGStyleElement.type_Getter(this);
 
   @DomName('SVGStyleElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkSVGStyleElement.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkSVGStyleElement.type_Setter_DOMString(this, value);
 
 }
 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
@@ -6443,48 +6443,48 @@
   @DomName('SVGElement.className')
   @DocsEditable()
   @Experimental() // untriaged
-  AnimatedString get _svgClassName => _blink.BlinkSVGElement.$className_Getter(this);
+  AnimatedString get _svgClassName => _blink.BlinkSVGElement.className_Getter(this);
 
   @DomName('SVGElement.ownerSVGElement')
   @DocsEditable()
-  SvgSvgElement get ownerSvgElement => _blink.BlinkSVGElement.$ownerSVGElement_Getter(this);
+  SvgSvgElement get ownerSvgElement => _blink.BlinkSVGElement.ownerSVGElement_Getter(this);
 
   @DomName('SVGElement.style')
   @DocsEditable()
   @Experimental() // untriaged
-  CssStyleDeclaration get style => _blink.BlinkSVGElement.$style_Getter(this);
+  CssStyleDeclaration get style => _blink.BlinkSVGElement.style_Getter(this);
 
   @DomName('SVGElement.viewportElement')
   @DocsEditable()
-  SvgElement get viewportElement => _blink.BlinkSVGElement.$viewportElement_Getter(this);
+  SvgElement get viewportElement => _blink.BlinkSVGElement.viewportElement_Getter(this);
 
   @DomName('SVGElement.xmlbase')
   @DocsEditable()
-  String get xmlbase => _blink.BlinkSVGElement.$xmlbase_Getter(this);
+  String get xmlbase => _blink.BlinkSVGElement.xmlbase_Getter(this);
 
   @DomName('SVGElement.xmlbase')
   @DocsEditable()
-  void set xmlbase(String value) => _blink.BlinkSVGElement.$xmlbase_Setter(this, value);
+  void set xmlbase(String value) => _blink.BlinkSVGElement.xmlbase_Setter_DOMString(this, value);
 
   @DomName('SVGElement.xmllang')
   @DocsEditable()
   @Experimental() // untriaged
-  String get xmllang => _blink.BlinkSVGElement.$xmllang_Getter(this);
+  String get xmllang => _blink.BlinkSVGElement.xmllang_Getter(this);
 
   @DomName('SVGElement.xmllang')
   @DocsEditable()
   @Experimental() // untriaged
-  void set xmllang(String value) => _blink.BlinkSVGElement.$xmllang_Setter(this, value);
+  void set xmllang(String value) => _blink.BlinkSVGElement.xmllang_Setter_DOMString(this, value);
 
   @DomName('SVGElement.xmlspace')
   @DocsEditable()
   @Experimental() // untriaged
-  String get xmlspace => _blink.BlinkSVGElement.$xmlspace_Getter(this);
+  String get xmlspace => _blink.BlinkSVGElement.xmlspace_Getter(this);
 
   @DomName('SVGElement.xmlspace')
   @DocsEditable()
   @Experimental() // untriaged
-  void set xmlspace(String value) => _blink.BlinkSVGElement.$xmlspace_Setter(this, value);
+  void set xmlspace(String value) => _blink.BlinkSVGElement.xmlspace_Setter_DOMString(this, value);
 
   @DomName('SVGElement.onabort')
   @DocsEditable()
@@ -6773,167 +6773,167 @@
 
   @DomName('SVGSVGElement.currentScale')
   @DocsEditable()
-  num get currentScale => _blink.BlinkSVGSVGElement.$currentScale_Getter(this);
+  num get currentScale => _blink.BlinkSVGSVGElement.currentScale_Getter(this);
 
   @DomName('SVGSVGElement.currentScale')
   @DocsEditable()
-  void set currentScale(num value) => _blink.BlinkSVGSVGElement.$currentScale_Setter(this, value);
+  void set currentScale(num value) => _blink.BlinkSVGSVGElement.currentScale_Setter_float(this, value);
 
   @DomName('SVGSVGElement.currentTranslate')
   @DocsEditable()
-  Point get currentTranslate => _blink.BlinkSVGSVGElement.$currentTranslate_Getter(this);
+  Point get currentTranslate => _blink.BlinkSVGSVGElement.currentTranslate_Getter(this);
 
   @DomName('SVGSVGElement.currentView')
   @DocsEditable()
-  ViewSpec get currentView => _blink.BlinkSVGSVGElement.$currentView_Getter(this);
+  ViewSpec get currentView => _blink.BlinkSVGSVGElement.currentView_Getter(this);
 
   @DomName('SVGSVGElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGSVGElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGSVGElement.height_Getter(this);
 
   @DomName('SVGSVGElement.pixelUnitToMillimeterX')
   @DocsEditable()
-  double get pixelUnitToMillimeterX => _blink.BlinkSVGSVGElement.$pixelUnitToMillimeterX_Getter(this);
+  double get pixelUnitToMillimeterX => _blink.BlinkSVGSVGElement.pixelUnitToMillimeterX_Getter(this);
 
   @DomName('SVGSVGElement.pixelUnitToMillimeterY')
   @DocsEditable()
-  double get pixelUnitToMillimeterY => _blink.BlinkSVGSVGElement.$pixelUnitToMillimeterY_Getter(this);
+  double get pixelUnitToMillimeterY => _blink.BlinkSVGSVGElement.pixelUnitToMillimeterY_Getter(this);
 
   @DomName('SVGSVGElement.screenPixelToMillimeterX')
   @DocsEditable()
-  double get screenPixelToMillimeterX => _blink.BlinkSVGSVGElement.$screenPixelToMillimeterX_Getter(this);
+  double get screenPixelToMillimeterX => _blink.BlinkSVGSVGElement.screenPixelToMillimeterX_Getter(this);
 
   @DomName('SVGSVGElement.screenPixelToMillimeterY')
   @DocsEditable()
-  double get screenPixelToMillimeterY => _blink.BlinkSVGSVGElement.$screenPixelToMillimeterY_Getter(this);
+  double get screenPixelToMillimeterY => _blink.BlinkSVGSVGElement.screenPixelToMillimeterY_Getter(this);
 
   @DomName('SVGSVGElement.useCurrentView')
   @DocsEditable()
-  bool get useCurrentView => _blink.BlinkSVGSVGElement.$useCurrentView_Getter(this);
+  bool get useCurrentView => _blink.BlinkSVGSVGElement.useCurrentView_Getter(this);
 
   @DomName('SVGSVGElement.viewport')
   @DocsEditable()
-  Rect get viewport => _blink.BlinkSVGSVGElement.$viewport_Getter(this);
+  Rect get viewport => _blink.BlinkSVGSVGElement.viewport_Getter(this);
 
   @DomName('SVGSVGElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGSVGElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGSVGElement.width_Getter(this);
 
   @DomName('SVGSVGElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGSVGElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGSVGElement.x_Getter(this);
 
   @DomName('SVGSVGElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGSVGElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGSVGElement.y_Getter(this);
 
   @DomName('SVGSVGElement.animationsPaused')
   @DocsEditable()
-  bool animationsPaused() => _blink.BlinkSVGSVGElement.$animationsPaused_Callback(this);
+  bool animationsPaused() => _blink.BlinkSVGSVGElement.animationsPaused_Callback(this);
 
   @DomName('SVGSVGElement.checkEnclosure')
   @DocsEditable()
-  bool checkEnclosure(SvgElement element, Rect rect) => _blink.BlinkSVGSVGElement.$checkEnclosure_Callback(this, element, rect);
+  bool checkEnclosure(SvgElement element, Rect rect) => _blink.BlinkSVGSVGElement.checkEnclosure_Callback_SVGElement_SVGRect(this, element, rect);
 
   @DomName('SVGSVGElement.checkIntersection')
   @DocsEditable()
-  bool checkIntersection(SvgElement element, Rect rect) => _blink.BlinkSVGSVGElement.$checkIntersection_Callback(this, element, rect);
+  bool checkIntersection(SvgElement element, Rect rect) => _blink.BlinkSVGSVGElement.checkIntersection_Callback_SVGElement_SVGRect(this, element, rect);
 
   @DomName('SVGSVGElement.createSVGAngle')
   @DocsEditable()
-  Angle createSvgAngle() => _blink.BlinkSVGSVGElement.$createSVGAngle_Callback(this);
+  Angle createSvgAngle() => _blink.BlinkSVGSVGElement.createSVGAngle_Callback(this);
 
   @DomName('SVGSVGElement.createSVGLength')
   @DocsEditable()
-  Length createSvgLength() => _blink.BlinkSVGSVGElement.$createSVGLength_Callback(this);
+  Length createSvgLength() => _blink.BlinkSVGSVGElement.createSVGLength_Callback(this);
 
   @DomName('SVGSVGElement.createSVGMatrix')
   @DocsEditable()
-  Matrix createSvgMatrix() => _blink.BlinkSVGSVGElement.$createSVGMatrix_Callback(this);
+  Matrix createSvgMatrix() => _blink.BlinkSVGSVGElement.createSVGMatrix_Callback(this);
 
   @DomName('SVGSVGElement.createSVGNumber')
   @DocsEditable()
-  Number createSvgNumber() => _blink.BlinkSVGSVGElement.$createSVGNumber_Callback(this);
+  Number createSvgNumber() => _blink.BlinkSVGSVGElement.createSVGNumber_Callback(this);
 
   @DomName('SVGSVGElement.createSVGPoint')
   @DocsEditable()
-  Point createSvgPoint() => _blink.BlinkSVGSVGElement.$createSVGPoint_Callback(this);
+  Point createSvgPoint() => _blink.BlinkSVGSVGElement.createSVGPoint_Callback(this);
 
   @DomName('SVGSVGElement.createSVGRect')
   @DocsEditable()
-  Rect createSvgRect() => _blink.BlinkSVGSVGElement.$createSVGRect_Callback(this);
+  Rect createSvgRect() => _blink.BlinkSVGSVGElement.createSVGRect_Callback(this);
 
   @DomName('SVGSVGElement.createSVGTransform')
   @DocsEditable()
-  Transform createSvgTransform() => _blink.BlinkSVGSVGElement.$createSVGTransform_Callback(this);
+  Transform createSvgTransform() => _blink.BlinkSVGSVGElement.createSVGTransform_Callback(this);
 
   @DomName('SVGSVGElement.createSVGTransformFromMatrix')
   @DocsEditable()
-  Transform createSvgTransformFromMatrix(Matrix matrix) => _blink.BlinkSVGSVGElement.$createSVGTransformFromMatrix_Callback(this, matrix);
+  Transform createSvgTransformFromMatrix(Matrix matrix) => _blink.BlinkSVGSVGElement.createSVGTransformFromMatrix_Callback_SVGMatrix(this, matrix);
 
   @DomName('SVGSVGElement.deselectAll')
   @DocsEditable()
-  void deselectAll() => _blink.BlinkSVGSVGElement.$deselectAll_Callback(this);
+  void deselectAll() => _blink.BlinkSVGSVGElement.deselectAll_Callback(this);
 
   @DomName('SVGSVGElement.forceRedraw')
   @DocsEditable()
-  void forceRedraw() => _blink.BlinkSVGSVGElement.$forceRedraw_Callback(this);
+  void forceRedraw() => _blink.BlinkSVGSVGElement.forceRedraw_Callback(this);
 
   @DomName('SVGSVGElement.getCurrentTime')
   @DocsEditable()
-  double getCurrentTime() => _blink.BlinkSVGSVGElement.$getCurrentTime_Callback(this);
+  double getCurrentTime() => _blink.BlinkSVGSVGElement.getCurrentTime_Callback(this);
 
   @DomName('SVGSVGElement.getElementById')
   @DocsEditable()
-  Element getElementById(String elementId) => _blink.BlinkSVGSVGElement.$getElementById_Callback(this, elementId);
+  Element getElementById(String elementId) => _blink.BlinkSVGSVGElement.getElementById_Callback_DOMString(this, elementId);
 
   @DomName('SVGSVGElement.getEnclosureList')
   @DocsEditable()
-  List<Node> getEnclosureList(Rect rect, SvgElement referenceElement) => _blink.BlinkSVGSVGElement.$getEnclosureList_Callback(this, rect, referenceElement);
+  List<Node> getEnclosureList(Rect rect, SvgElement referenceElement) => _blink.BlinkSVGSVGElement.getEnclosureList_Callback_SVGRect_SVGElement(this, rect, referenceElement);
 
   @DomName('SVGSVGElement.getIntersectionList')
   @DocsEditable()
-  List<Node> getIntersectionList(Rect rect, SvgElement referenceElement) => _blink.BlinkSVGSVGElement.$getIntersectionList_Callback(this, rect, referenceElement);
+  List<Node> getIntersectionList(Rect rect, SvgElement referenceElement) => _blink.BlinkSVGSVGElement.getIntersectionList_Callback_SVGRect_SVGElement(this, rect, referenceElement);
 
   @DomName('SVGSVGElement.pauseAnimations')
   @DocsEditable()
-  void pauseAnimations() => _blink.BlinkSVGSVGElement.$pauseAnimations_Callback(this);
+  void pauseAnimations() => _blink.BlinkSVGSVGElement.pauseAnimations_Callback(this);
 
   @DomName('SVGSVGElement.setCurrentTime')
   @DocsEditable()
-  void setCurrentTime(num seconds) => _blink.BlinkSVGSVGElement.$setCurrentTime_Callback(this, seconds);
+  void setCurrentTime(num seconds) => _blink.BlinkSVGSVGElement.setCurrentTime_Callback_float(this, seconds);
 
   @DomName('SVGSVGElement.suspendRedraw')
   @DocsEditable()
-  int suspendRedraw(int maxWaitMilliseconds) => _blink.BlinkSVGSVGElement.$suspendRedraw_Callback(this, maxWaitMilliseconds);
+  int suspendRedraw(int maxWaitMilliseconds) => _blink.BlinkSVGSVGElement.suspendRedraw_Callback_ul(this, maxWaitMilliseconds);
 
   @DomName('SVGSVGElement.unpauseAnimations')
   @DocsEditable()
-  void unpauseAnimations() => _blink.BlinkSVGSVGElement.$unpauseAnimations_Callback(this);
+  void unpauseAnimations() => _blink.BlinkSVGSVGElement.unpauseAnimations_Callback(this);
 
   @DomName('SVGSVGElement.unsuspendRedraw')
   @DocsEditable()
-  void unsuspendRedraw(int suspendHandleId) => _blink.BlinkSVGSVGElement.$unsuspendRedraw_Callback(this, suspendHandleId);
+  void unsuspendRedraw(int suspendHandleId) => _blink.BlinkSVGSVGElement.unsuspendRedraw_Callback_ul(this, suspendHandleId);
 
   @DomName('SVGSVGElement.unsuspendRedrawAll')
   @DocsEditable()
-  void unsuspendRedrawAll() => _blink.BlinkSVGSVGElement.$unsuspendRedrawAll_Callback(this);
+  void unsuspendRedrawAll() => _blink.BlinkSVGSVGElement.unsuspendRedrawAll_Callback(this);
 
   @DomName('SVGSVGElement.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGSVGElement.$preserveAspectRatio_Getter(this);
+  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGSVGElement.preserveAspectRatio_Getter(this);
 
   @DomName('SVGSVGElement.viewBox')
   @DocsEditable()
-  AnimatedRect get viewBox => _blink.BlinkSVGSVGElement.$viewBox_Getter(this);
+  AnimatedRect get viewBox => _blink.BlinkSVGSVGElement.viewBox_Getter(this);
 
   @DomName('SVGSVGElement.zoomAndPan')
   @DocsEditable()
-  int get zoomAndPan => _blink.BlinkSVGSVGElement.$zoomAndPan_Getter(this);
+  int get zoomAndPan => _blink.BlinkSVGSVGElement.zoomAndPan_Getter(this);
 
   @DomName('SVGSVGElement.zoomAndPan')
   @DocsEditable()
-  void set zoomAndPan(int value) => _blink.BlinkSVGSVGElement.$zoomAndPan_Setter(this, value);
+  void set zoomAndPan(int value) => _blink.BlinkSVGSVGElement.zoomAndPan_Setter_us(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6987,11 +6987,11 @@
 
   @DomName('SVGSymbolElement.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGSymbolElement.$preserveAspectRatio_Getter(this);
+  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGSymbolElement.preserveAspectRatio_Getter(this);
 
   @DomName('SVGSymbolElement.viewBox')
   @DocsEditable()
-  AnimatedRect get viewBox => _blink.BlinkSVGSymbolElement.$viewBox_Getter(this);
+  AnimatedRect get viewBox => _blink.BlinkSVGSymbolElement.viewBox_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7035,19 +7035,19 @@
 
   @DomName('SVGTests.requiredExtensions')
   @DocsEditable()
-  StringList get requiredExtensions => _blink.BlinkSVGTests.$requiredExtensions_Getter(this);
+  StringList get requiredExtensions => _blink.BlinkSVGTests.requiredExtensions_Getter(this);
 
   @DomName('SVGTests.requiredFeatures')
   @DocsEditable()
-  StringList get requiredFeatures => _blink.BlinkSVGTests.$requiredFeatures_Getter(this);
+  StringList get requiredFeatures => _blink.BlinkSVGTests.requiredFeatures_Getter(this);
 
   @DomName('SVGTests.systemLanguage')
   @DocsEditable()
-  StringList get systemLanguage => _blink.BlinkSVGTests.$systemLanguage_Getter(this);
+  StringList get systemLanguage => _blink.BlinkSVGTests.systemLanguage_Getter(this);
 
   @DomName('SVGTests.hasExtension')
   @DocsEditable()
-  bool hasExtension(String extension) => _blink.BlinkSVGTests.$hasExtension_Callback(this, extension);
+  bool hasExtension(String extension) => _blink.BlinkSVGTests.hasExtension_Callback_DOMString(this, extension);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7084,47 +7084,47 @@
 
   @DomName('SVGTextContentElement.lengthAdjust')
   @DocsEditable()
-  AnimatedEnumeration get lengthAdjust => _blink.BlinkSVGTextContentElement.$lengthAdjust_Getter(this);
+  AnimatedEnumeration get lengthAdjust => _blink.BlinkSVGTextContentElement.lengthAdjust_Getter(this);
 
   @DomName('SVGTextContentElement.textLength')
   @DocsEditable()
-  AnimatedLength get textLength => _blink.BlinkSVGTextContentElement.$textLength_Getter(this);
+  AnimatedLength get textLength => _blink.BlinkSVGTextContentElement.textLength_Getter(this);
 
   @DomName('SVGTextContentElement.getCharNumAtPosition')
   @DocsEditable()
-  int getCharNumAtPosition(Point point) => _blink.BlinkSVGTextContentElement.$getCharNumAtPosition_Callback(this, point);
+  int getCharNumAtPosition(Point point) => _blink.BlinkSVGTextContentElement.getCharNumAtPosition_Callback_SVGPoint(this, point);
 
   @DomName('SVGTextContentElement.getComputedTextLength')
   @DocsEditable()
-  double getComputedTextLength() => _blink.BlinkSVGTextContentElement.$getComputedTextLength_Callback(this);
+  double getComputedTextLength() => _blink.BlinkSVGTextContentElement.getComputedTextLength_Callback(this);
 
   @DomName('SVGTextContentElement.getEndPositionOfChar')
   @DocsEditable()
-  Point getEndPositionOfChar(int offset) => _blink.BlinkSVGTextContentElement.$getEndPositionOfChar_Callback(this, offset);
+  Point getEndPositionOfChar(int offset) => _blink.BlinkSVGTextContentElement.getEndPositionOfChar_Callback_ul(this, offset);
 
   @DomName('SVGTextContentElement.getExtentOfChar')
   @DocsEditable()
-  Rect getExtentOfChar(int offset) => _blink.BlinkSVGTextContentElement.$getExtentOfChar_Callback(this, offset);
+  Rect getExtentOfChar(int offset) => _blink.BlinkSVGTextContentElement.getExtentOfChar_Callback_ul(this, offset);
 
   @DomName('SVGTextContentElement.getNumberOfChars')
   @DocsEditable()
-  int getNumberOfChars() => _blink.BlinkSVGTextContentElement.$getNumberOfChars_Callback(this);
+  int getNumberOfChars() => _blink.BlinkSVGTextContentElement.getNumberOfChars_Callback(this);
 
   @DomName('SVGTextContentElement.getRotationOfChar')
   @DocsEditable()
-  double getRotationOfChar(int offset) => _blink.BlinkSVGTextContentElement.$getRotationOfChar_Callback(this, offset);
+  double getRotationOfChar(int offset) => _blink.BlinkSVGTextContentElement.getRotationOfChar_Callback_ul(this, offset);
 
   @DomName('SVGTextContentElement.getStartPositionOfChar')
   @DocsEditable()
-  Point getStartPositionOfChar(int offset) => _blink.BlinkSVGTextContentElement.$getStartPositionOfChar_Callback(this, offset);
+  Point getStartPositionOfChar(int offset) => _blink.BlinkSVGTextContentElement.getStartPositionOfChar_Callback_ul(this, offset);
 
   @DomName('SVGTextContentElement.getSubStringLength')
   @DocsEditable()
-  double getSubStringLength(int offset, int length) => _blink.BlinkSVGTextContentElement.$getSubStringLength_Callback(this, offset, length);
+  double getSubStringLength(int offset, int length) => _blink.BlinkSVGTextContentElement.getSubStringLength_Callback_ul_ul(this, offset, length);
 
   @DomName('SVGTextContentElement.selectSubString')
   @DocsEditable()
-  void selectSubString(int offset, int length) => _blink.BlinkSVGTextContentElement.$selectSubString_Callback(this, offset, length);
+  void selectSubString(int offset, int length) => _blink.BlinkSVGTextContentElement.selectSubString_Callback_ul_ul(this, offset, length);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7198,19 +7198,19 @@
 
   @DomName('SVGTextPathElement.method')
   @DocsEditable()
-  AnimatedEnumeration get method => _blink.BlinkSVGTextPathElement.$method_Getter(this);
+  AnimatedEnumeration get method => _blink.BlinkSVGTextPathElement.method_Getter(this);
 
   @DomName('SVGTextPathElement.spacing')
   @DocsEditable()
-  AnimatedEnumeration get spacing => _blink.BlinkSVGTextPathElement.$spacing_Getter(this);
+  AnimatedEnumeration get spacing => _blink.BlinkSVGTextPathElement.spacing_Getter(this);
 
   @DomName('SVGTextPathElement.startOffset')
   @DocsEditable()
-  AnimatedLength get startOffset => _blink.BlinkSVGTextPathElement.$startOffset_Getter(this);
+  AnimatedLength get startOffset => _blink.BlinkSVGTextPathElement.startOffset_Getter(this);
 
   @DomName('SVGTextPathElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGTextPathElement.$href_Getter(this);
+  AnimatedString get href => _blink.BlinkSVGTextPathElement.href_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7235,23 +7235,23 @@
 
   @DomName('SVGTextPositioningElement.dx')
   @DocsEditable()
-  AnimatedLengthList get dx => _blink.BlinkSVGTextPositioningElement.$dx_Getter(this);
+  AnimatedLengthList get dx => _blink.BlinkSVGTextPositioningElement.dx_Getter(this);
 
   @DomName('SVGTextPositioningElement.dy')
   @DocsEditable()
-  AnimatedLengthList get dy => _blink.BlinkSVGTextPositioningElement.$dy_Getter(this);
+  AnimatedLengthList get dy => _blink.BlinkSVGTextPositioningElement.dy_Getter(this);
 
   @DomName('SVGTextPositioningElement.rotate')
   @DocsEditable()
-  AnimatedNumberList get rotate => _blink.BlinkSVGTextPositioningElement.$rotate_Getter(this);
+  AnimatedNumberList get rotate => _blink.BlinkSVGTextPositioningElement.rotate_Getter(this);
 
   @DomName('SVGTextPositioningElement.x')
   @DocsEditable()
-  AnimatedLengthList get x => _blink.BlinkSVGTextPositioningElement.$x_Getter(this);
+  AnimatedLengthList get x => _blink.BlinkSVGTextPositioningElement.x_Getter(this);
 
   @DomName('SVGTextPositioningElement.y')
   @DocsEditable()
-  AnimatedLengthList get y => _blink.BlinkSVGTextPositioningElement.$y_Getter(this);
+  AnimatedLengthList get y => _blink.BlinkSVGTextPositioningElement.y_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7323,39 +7323,39 @@
 
   @DomName('SVGTransform.angle')
   @DocsEditable()
-  double get angle => _blink.BlinkSVGTransform.$angle_Getter(this);
+  double get angle => _blink.BlinkSVGTransform.angle_Getter(this);
 
   @DomName('SVGTransform.matrix')
   @DocsEditable()
-  Matrix get matrix => _blink.BlinkSVGTransform.$matrix_Getter(this);
+  Matrix get matrix => _blink.BlinkSVGTransform.matrix_Getter(this);
 
   @DomName('SVGTransform.type')
   @DocsEditable()
-  int get type => _blink.BlinkSVGTransform.$type_Getter(this);
+  int get type => _blink.BlinkSVGTransform.type_Getter(this);
 
   @DomName('SVGTransform.setMatrix')
   @DocsEditable()
-  void setMatrix(Matrix matrix) => _blink.BlinkSVGTransform.$setMatrix_Callback(this, matrix);
+  void setMatrix(Matrix matrix) => _blink.BlinkSVGTransform.setMatrix_Callback_SVGMatrix(this, matrix);
 
   @DomName('SVGTransform.setRotate')
   @DocsEditable()
-  void setRotate(num angle, num cx, num cy) => _blink.BlinkSVGTransform.$setRotate_Callback(this, angle, cx, cy);
+  void setRotate(num angle, num cx, num cy) => _blink.BlinkSVGTransform.setRotate_Callback_float_float_float(this, angle, cx, cy);
 
   @DomName('SVGTransform.setScale')
   @DocsEditable()
-  void setScale(num sx, num sy) => _blink.BlinkSVGTransform.$setScale_Callback(this, sx, sy);
+  void setScale(num sx, num sy) => _blink.BlinkSVGTransform.setScale_Callback_float_float(this, sx, sy);
 
   @DomName('SVGTransform.setSkewX')
   @DocsEditable()
-  void setSkewX(num angle) => _blink.BlinkSVGTransform.$setSkewX_Callback(this, angle);
+  void setSkewX(num angle) => _blink.BlinkSVGTransform.setSkewX_Callback_float(this, angle);
 
   @DomName('SVGTransform.setSkewY')
   @DocsEditable()
-  void setSkewY(num angle) => _blink.BlinkSVGTransform.$setSkewY_Callback(this, angle);
+  void setSkewY(num angle) => _blink.BlinkSVGTransform.setSkewY_Callback_float(this, angle);
 
   @DomName('SVGTransform.setTranslate')
   @DocsEditable()
-  void setTranslate(num tx, num ty) => _blink.BlinkSVGTransform.$setTranslate_Callback(this, tx, ty);
+  void setTranslate(num tx, num ty) => _blink.BlinkSVGTransform.setTranslate_Callback_float_float(this, tx, ty);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7374,7 +7374,7 @@
 
   @DomName('SVGTransformList.numberOfItems')
   @DocsEditable()
-  int get numberOfItems => _blink.BlinkSVGTransformList.$numberOfItems_Getter(this);
+  int get numberOfItems => _blink.BlinkSVGTransformList.numberOfItems_Getter(this);
 
   Transform operator[](int index) {
     if (index < 0 || index >= length)
@@ -7424,39 +7424,39 @@
 
   @DomName('SVGTransformList.appendItem')
   @DocsEditable()
-  Transform appendItem(Transform item) => _blink.BlinkSVGTransformList.$appendItem_Callback(this, item);
+  Transform appendItem(Transform item) => _blink.BlinkSVGTransformList.appendItem_Callback_SVGTransform(this, item);
 
   @DomName('SVGTransformList.clear')
   @DocsEditable()
-  void clear() => _blink.BlinkSVGTransformList.$clear_Callback(this);
+  void clear() => _blink.BlinkSVGTransformList.clear_Callback(this);
 
   @DomName('SVGTransformList.consolidate')
   @DocsEditable()
-  Transform consolidate() => _blink.BlinkSVGTransformList.$consolidate_Callback(this);
+  Transform consolidate() => _blink.BlinkSVGTransformList.consolidate_Callback(this);
 
   @DomName('SVGTransformList.createSVGTransformFromMatrix')
   @DocsEditable()
-  Transform createSvgTransformFromMatrix(Matrix matrix) => _blink.BlinkSVGTransformList.$createSVGTransformFromMatrix_Callback(this, matrix);
+  Transform createSvgTransformFromMatrix(Matrix matrix) => _blink.BlinkSVGTransformList.createSVGTransformFromMatrix_Callback_SVGMatrix(this, matrix);
 
   @DomName('SVGTransformList.getItem')
   @DocsEditable()
-  Transform getItem(int index) => _blink.BlinkSVGTransformList.$getItem_Callback(this, index);
+  Transform getItem(int index) => _blink.BlinkSVGTransformList.getItem_Callback_ul(this, index);
 
   @DomName('SVGTransformList.initialize')
   @DocsEditable()
-  Transform initialize(Transform item) => _blink.BlinkSVGTransformList.$initialize_Callback(this, item);
+  Transform initialize(Transform item) => _blink.BlinkSVGTransformList.initialize_Callback_SVGTransform(this, item);
 
   @DomName('SVGTransformList.insertItemBefore')
   @DocsEditable()
-  Transform insertItemBefore(Transform item, int index) => _blink.BlinkSVGTransformList.$insertItemBefore_Callback(this, item, index);
+  Transform insertItemBefore(Transform item, int index) => _blink.BlinkSVGTransformList.insertItemBefore_Callback_SVGTransform_ul(this, item, index);
 
   @DomName('SVGTransformList.removeItem')
   @DocsEditable()
-  Transform removeItem(int index) => _blink.BlinkSVGTransformList.$removeItem_Callback(this, index);
+  Transform removeItem(int index) => _blink.BlinkSVGTransformList.removeItem_Callback_ul(this, index);
 
   @DomName('SVGTransformList.replaceItem')
   @DocsEditable()
-  Transform replaceItem(Transform item, int index) => _blink.BlinkSVGTransformList.$replaceItem_Callback(this, item, index);
+  Transform replaceItem(Transform item, int index) => _blink.BlinkSVGTransformList.replaceItem_Callback_SVGTransform_ul(this, item, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7502,7 +7502,7 @@
 
   @DomName('SVGURIReference.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGURIReference.$href_Getter(this);
+  AnimatedString get href => _blink.BlinkSVGURIReference.href_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7531,47 +7531,47 @@
 
   @DomName('SVGUseElement.animatedInstanceRoot')
   @DocsEditable()
-  ElementInstance get animatedInstanceRoot => _blink.BlinkSVGUseElement.$animatedInstanceRoot_Getter(this);
+  ElementInstance get animatedInstanceRoot => _blink.BlinkSVGUseElement.animatedInstanceRoot_Getter(this);
 
   @DomName('SVGUseElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGUseElement.$height_Getter(this);
+  AnimatedLength get height => _blink.BlinkSVGUseElement.height_Getter(this);
 
   @DomName('SVGUseElement.instanceRoot')
   @DocsEditable()
-  ElementInstance get instanceRoot => _blink.BlinkSVGUseElement.$instanceRoot_Getter(this);
+  ElementInstance get instanceRoot => _blink.BlinkSVGUseElement.instanceRoot_Getter(this);
 
   @DomName('SVGUseElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGUseElement.$width_Getter(this);
+  AnimatedLength get width => _blink.BlinkSVGUseElement.width_Getter(this);
 
   @DomName('SVGUseElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGUseElement.$x_Getter(this);
+  AnimatedLength get x => _blink.BlinkSVGUseElement.x_Getter(this);
 
   @DomName('SVGUseElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGUseElement.$y_Getter(this);
+  AnimatedLength get y => _blink.BlinkSVGUseElement.y_Getter(this);
 
   @DomName('SVGUseElement.requiredExtensions')
   @DocsEditable()
-  StringList get requiredExtensions => _blink.BlinkSVGUseElement.$requiredExtensions_Getter(this);
+  StringList get requiredExtensions => _blink.BlinkSVGUseElement.requiredExtensions_Getter(this);
 
   @DomName('SVGUseElement.requiredFeatures')
   @DocsEditable()
-  StringList get requiredFeatures => _blink.BlinkSVGUseElement.$requiredFeatures_Getter(this);
+  StringList get requiredFeatures => _blink.BlinkSVGUseElement.requiredFeatures_Getter(this);
 
   @DomName('SVGUseElement.systemLanguage')
   @DocsEditable()
-  StringList get systemLanguage => _blink.BlinkSVGUseElement.$systemLanguage_Getter(this);
+  StringList get systemLanguage => _blink.BlinkSVGUseElement.systemLanguage_Getter(this);
 
   @DomName('SVGUseElement.hasExtension')
   @DocsEditable()
-  bool hasExtension(String extension) => _blink.BlinkSVGUseElement.$hasExtension_Callback(this, extension);
+  bool hasExtension(String extension) => _blink.BlinkSVGUseElement.hasExtension_Callback_DOMString(this, extension);
 
   @DomName('SVGUseElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGUseElement.$href_Getter(this);
+  AnimatedString get href => _blink.BlinkSVGUseElement.href_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7600,23 +7600,23 @@
 
   @DomName('SVGViewElement.viewTarget')
   @DocsEditable()
-  StringList get viewTarget => _blink.BlinkSVGViewElement.$viewTarget_Getter(this);
+  StringList get viewTarget => _blink.BlinkSVGViewElement.viewTarget_Getter(this);
 
   @DomName('SVGViewElement.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGViewElement.$preserveAspectRatio_Getter(this);
+  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGViewElement.preserveAspectRatio_Getter(this);
 
   @DomName('SVGViewElement.viewBox')
   @DocsEditable()
-  AnimatedRect get viewBox => _blink.BlinkSVGViewElement.$viewBox_Getter(this);
+  AnimatedRect get viewBox => _blink.BlinkSVGViewElement.viewBox_Getter(this);
 
   @DomName('SVGViewElement.zoomAndPan')
   @DocsEditable()
-  int get zoomAndPan => _blink.BlinkSVGViewElement.$zoomAndPan_Getter(this);
+  int get zoomAndPan => _blink.BlinkSVGViewElement.zoomAndPan_Getter(this);
 
   @DomName('SVGViewElement.zoomAndPan')
   @DocsEditable()
-  void set zoomAndPan(int value) => _blink.BlinkSVGViewElement.$zoomAndPan_Setter(this, value);
+  void set zoomAndPan(int value) => _blink.BlinkSVGViewElement.zoomAndPan_Setter_us(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7635,47 +7635,47 @@
 
   @DomName('SVGViewSpec.preserveAspectRatioString')
   @DocsEditable()
-  String get preserveAspectRatioString => _blink.BlinkSVGViewSpec.$preserveAspectRatioString_Getter(this);
+  String get preserveAspectRatioString => _blink.BlinkSVGViewSpec.preserveAspectRatioString_Getter(this);
 
   @DomName('SVGViewSpec.transform')
   @DocsEditable()
-  TransformList get transform => _blink.BlinkSVGViewSpec.$transform_Getter(this);
+  TransformList get transform => _blink.BlinkSVGViewSpec.transform_Getter(this);
 
   @DomName('SVGViewSpec.transformString')
   @DocsEditable()
-  String get transformString => _blink.BlinkSVGViewSpec.$transformString_Getter(this);
+  String get transformString => _blink.BlinkSVGViewSpec.transformString_Getter(this);
 
   @DomName('SVGViewSpec.viewBoxString')
   @DocsEditable()
-  String get viewBoxString => _blink.BlinkSVGViewSpec.$viewBoxString_Getter(this);
+  String get viewBoxString => _blink.BlinkSVGViewSpec.viewBoxString_Getter(this);
 
   @DomName('SVGViewSpec.viewTarget')
   @DocsEditable()
-  SvgElement get viewTarget => _blink.BlinkSVGViewSpec.$viewTarget_Getter(this);
+  SvgElement get viewTarget => _blink.BlinkSVGViewSpec.viewTarget_Getter(this);
 
   @DomName('SVGViewSpec.viewTargetString')
   @DocsEditable()
-  String get viewTargetString => _blink.BlinkSVGViewSpec.$viewTargetString_Getter(this);
+  String get viewTargetString => _blink.BlinkSVGViewSpec.viewTargetString_Getter(this);
 
   @DomName('SVGViewSpec.preserveAspectRatio')
   @DocsEditable()
   @Experimental() // nonstandard
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGViewSpec.$preserveAspectRatio_Getter(this);
+  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGViewSpec.preserveAspectRatio_Getter(this);
 
   @DomName('SVGViewSpec.viewBox')
   @DocsEditable()
   @Experimental() // nonstandard
-  AnimatedRect get viewBox => _blink.BlinkSVGViewSpec.$viewBox_Getter(this);
+  AnimatedRect get viewBox => _blink.BlinkSVGViewSpec.viewBox_Getter(this);
 
   @DomName('SVGViewSpec.zoomAndPan')
   @DocsEditable()
   @Experimental() // nonstandard
-  int get zoomAndPan => _blink.BlinkSVGViewSpec.$zoomAndPan_Getter(this);
+  int get zoomAndPan => _blink.BlinkSVGViewSpec.zoomAndPan_Getter(this);
 
   @DomName('SVGViewSpec.zoomAndPan')
   @DocsEditable()
   @Experimental() // nonstandard
-  void set zoomAndPan(int value) => _blink.BlinkSVGViewSpec.$zoomAndPan_Setter(this, value);
+  void set zoomAndPan(int value) => _blink.BlinkSVGViewSpec.zoomAndPan_Setter_us(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7706,11 +7706,11 @@
 
   @DomName('SVGZoomAndPan.zoomAndPan')
   @DocsEditable()
-  int get zoomAndPan => _blink.BlinkSVGZoomAndPan.$zoomAndPan_Getter(this);
+  int get zoomAndPan => _blink.BlinkSVGZoomAndPan.zoomAndPan_Getter(this);
 
   @DomName('SVGZoomAndPan.zoomAndPan')
   @DocsEditable()
-  void set zoomAndPan(int value) => _blink.BlinkSVGZoomAndPan.$zoomAndPan_Setter(this, value);
+  void set zoomAndPan(int value) => _blink.BlinkSVGZoomAndPan.zoomAndPan_Setter_us(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7729,23 +7729,23 @@
 
   @DomName('SVGZoomEvent.newScale')
   @DocsEditable()
-  double get newScale => _blink.BlinkSVGZoomEvent.$newScale_Getter(this);
+  double get newScale => _blink.BlinkSVGZoomEvent.newScale_Getter(this);
 
   @DomName('SVGZoomEvent.newTranslate')
   @DocsEditable()
-  Point get newTranslate => _blink.BlinkSVGZoomEvent.$newTranslate_Getter(this);
+  Point get newTranslate => _blink.BlinkSVGZoomEvent.newTranslate_Getter(this);
 
   @DomName('SVGZoomEvent.previousScale')
   @DocsEditable()
-  double get previousScale => _blink.BlinkSVGZoomEvent.$previousScale_Getter(this);
+  double get previousScale => _blink.BlinkSVGZoomEvent.previousScale_Getter(this);
 
   @DomName('SVGZoomEvent.previousTranslate')
   @DocsEditable()
-  Point get previousTranslate => _blink.BlinkSVGZoomEvent.$previousTranslate_Getter(this);
+  Point get previousTranslate => _blink.BlinkSVGZoomEvent.previousTranslate_Getter(this);
 
   @DomName('SVGZoomEvent.zoomRectScreen')
   @DocsEditable()
-  Rect get zoomRectScreen => _blink.BlinkSVGZoomEvent.$zoomRectScreen_Getter(this);
+  Rect get zoomRectScreen => _blink.BlinkSVGZoomEvent.zoomRectScreen_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7764,15 +7764,15 @@
 
   @DomName('SVGElementInstanceList.length')
   @DocsEditable()
-  int get length => _blink.BlinkSVGElementInstanceList.$length_Getter(this);
+  int get length => _blink.BlinkSVGElementInstanceList.length_Getter(this);
 
   ElementInstance operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkSVGElementInstanceList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkSVGElementInstanceList.item_Callback_ul(this, index);
   }
 
-  ElementInstance _nativeIndexedGetter(int index) => _blink.BlinkSVGElementInstanceList.$NativeIndexed_Getter(this, index);
+  ElementInstance _nativeIndexedGetter(int index) => _blink.BlinkSVGElementInstanceList.item_Callback_ul(this, index);
 
   void operator[]=(int index, ElementInstance value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -7814,7 +7814,7 @@
 
   @DomName('SVGElementInstanceList.item')
   @DocsEditable()
-  ElementInstance item(int index) => _blink.BlinkSVGElementInstanceList.$item_Callback(this, index);
+  ElementInstance item(int index) => _blink.BlinkSVGElementInstanceList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7855,19 +7855,19 @@
 
   @DomName('SVGGradientElement.gradientTransform')
   @DocsEditable()
-  AnimatedTransformList get gradientTransform => _blink.BlinkSVGGradientElement.$gradientTransform_Getter(this);
+  AnimatedTransformList get gradientTransform => _blink.BlinkSVGGradientElement.gradientTransform_Getter(this);
 
   @DomName('SVGGradientElement.gradientUnits')
   @DocsEditable()
-  AnimatedEnumeration get gradientUnits => _blink.BlinkSVGGradientElement.$gradientUnits_Getter(this);
+  AnimatedEnumeration get gradientUnits => _blink.BlinkSVGGradientElement.gradientUnits_Getter(this);
 
   @DomName('SVGGradientElement.spreadMethod')
   @DocsEditable()
-  AnimatedEnumeration get spreadMethod => _blink.BlinkSVGGradientElement.$spreadMethod_Getter(this);
+  AnimatedEnumeration get spreadMethod => _blink.BlinkSVGGradientElement.spreadMethod_Getter(this);
 
   @DomName('SVGGradientElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGGradientElement.$href_Getter(this);
+  AnimatedString get href => _blink.BlinkSVGGradientElement.href_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
diff --git a/sdk/lib/web_audio/dartium/web_audio_dartium.dart b/sdk/lib/web_audio/dartium/web_audio_dartium.dart
index 378a293..9b18b2d 100644
--- a/sdk/lib/web_audio/dartium/web_audio_dartium.dart
+++ b/sdk/lib/web_audio/dartium/web_audio_dartium.dart
@@ -62,51 +62,51 @@
 
   @DomName('AnalyserNode.fftSize')
   @DocsEditable()
-  int get fftSize => _blink.BlinkAnalyserNode.$fftSize_Getter(this);
+  int get fftSize => _blink.BlinkAnalyserNode.fftSize_Getter(this);
 
   @DomName('AnalyserNode.fftSize')
   @DocsEditable()
-  void set fftSize(int value) => _blink.BlinkAnalyserNode.$fftSize_Setter(this, value);
+  void set fftSize(int value) => _blink.BlinkAnalyserNode.fftSize_Setter_ul(this, value);
 
   @DomName('AnalyserNode.frequencyBinCount')
   @DocsEditable()
-  int get frequencyBinCount => _blink.BlinkAnalyserNode.$frequencyBinCount_Getter(this);
+  int get frequencyBinCount => _blink.BlinkAnalyserNode.frequencyBinCount_Getter(this);
 
   @DomName('AnalyserNode.maxDecibels')
   @DocsEditable()
-  num get maxDecibels => _blink.BlinkAnalyserNode.$maxDecibels_Getter(this);
+  num get maxDecibels => _blink.BlinkAnalyserNode.maxDecibels_Getter(this);
 
   @DomName('AnalyserNode.maxDecibels')
   @DocsEditable()
-  void set maxDecibels(num value) => _blink.BlinkAnalyserNode.$maxDecibels_Setter(this, value);
+  void set maxDecibels(num value) => _blink.BlinkAnalyserNode.maxDecibels_Setter_float(this, value);
 
   @DomName('AnalyserNode.minDecibels')
   @DocsEditable()
-  num get minDecibels => _blink.BlinkAnalyserNode.$minDecibels_Getter(this);
+  num get minDecibels => _blink.BlinkAnalyserNode.minDecibels_Getter(this);
 
   @DomName('AnalyserNode.minDecibels')
   @DocsEditable()
-  void set minDecibels(num value) => _blink.BlinkAnalyserNode.$minDecibels_Setter(this, value);
+  void set minDecibels(num value) => _blink.BlinkAnalyserNode.minDecibels_Setter_float(this, value);
 
   @DomName('AnalyserNode.smoothingTimeConstant')
   @DocsEditable()
-  num get smoothingTimeConstant => _blink.BlinkAnalyserNode.$smoothingTimeConstant_Getter(this);
+  num get smoothingTimeConstant => _blink.BlinkAnalyserNode.smoothingTimeConstant_Getter(this);
 
   @DomName('AnalyserNode.smoothingTimeConstant')
   @DocsEditable()
-  void set smoothingTimeConstant(num value) => _blink.BlinkAnalyserNode.$smoothingTimeConstant_Setter(this, value);
+  void set smoothingTimeConstant(num value) => _blink.BlinkAnalyserNode.smoothingTimeConstant_Setter_float(this, value);
 
   @DomName('AnalyserNode.getByteFrequencyData')
   @DocsEditable()
-  void getByteFrequencyData(Uint8List array) => _blink.BlinkAnalyserNode.$getByteFrequencyData_Callback(this, array);
+  void getByteFrequencyData(Uint8List array) => _blink.BlinkAnalyserNode.getByteFrequencyData_Callback_Uint8Array(this, array);
 
   @DomName('AnalyserNode.getByteTimeDomainData')
   @DocsEditable()
-  void getByteTimeDomainData(Uint8List array) => _blink.BlinkAnalyserNode.$getByteTimeDomainData_Callback(this, array);
+  void getByteTimeDomainData(Uint8List array) => _blink.BlinkAnalyserNode.getByteTimeDomainData_Callback_Uint8Array(this, array);
 
   @DomName('AnalyserNode.getFloatFrequencyData')
   @DocsEditable()
-  void getFloatFrequencyData(Float32List array) => _blink.BlinkAnalyserNode.$getFloatFrequencyData_Callback(this, array);
+  void getFloatFrequencyData(Float32List array) => _blink.BlinkAnalyserNode.getFloatFrequencyData_Callback_Float32Array(this, array);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -126,23 +126,23 @@
 
   @DomName('AudioBuffer.duration')
   @DocsEditable()
-  double get duration => _blink.BlinkAudioBuffer.$duration_Getter(this);
+  double get duration => _blink.BlinkAudioBuffer.duration_Getter(this);
 
   @DomName('AudioBuffer.length')
   @DocsEditable()
-  int get length => _blink.BlinkAudioBuffer.$length_Getter(this);
+  int get length => _blink.BlinkAudioBuffer.length_Getter(this);
 
   @DomName('AudioBuffer.numberOfChannels')
   @DocsEditable()
-  int get numberOfChannels => _blink.BlinkAudioBuffer.$numberOfChannels_Getter(this);
+  int get numberOfChannels => _blink.BlinkAudioBuffer.numberOfChannels_Getter(this);
 
   @DomName('AudioBuffer.sampleRate')
   @DocsEditable()
-  double get sampleRate => _blink.BlinkAudioBuffer.$sampleRate_Getter(this);
+  double get sampleRate => _blink.BlinkAudioBuffer.sampleRate_Getter(this);
 
   @DomName('AudioBuffer.getChannelData')
   @DocsEditable()
-  Float32List getChannelData(int channelIndex) => _blink.BlinkAudioBuffer.$getChannelData_Callback(this, channelIndex);
+  Float32List getChannelData(int channelIndex) => _blink.BlinkAudioBuffer.getChannelData_Callback_ul(this, channelIndex);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -202,75 +202,75 @@
 
   @DomName('AudioBufferSourceNode.buffer')
   @DocsEditable()
-  AudioBuffer get buffer => _blink.BlinkAudioBufferSourceNode.$buffer_Getter(this);
+  AudioBuffer get buffer => _blink.BlinkAudioBufferSourceNode.buffer_Getter(this);
 
   @DomName('AudioBufferSourceNode.buffer')
   @DocsEditable()
-  void set buffer(AudioBuffer value) => _blink.BlinkAudioBufferSourceNode.$buffer_Setter(this, value);
+  void set buffer(AudioBuffer value) => _blink.BlinkAudioBufferSourceNode.buffer_Setter_AudioBuffer(this, value);
 
   @DomName('AudioBufferSourceNode.loop')
   @DocsEditable()
-  bool get loop => _blink.BlinkAudioBufferSourceNode.$loop_Getter(this);
+  bool get loop => _blink.BlinkAudioBufferSourceNode.loop_Getter(this);
 
   @DomName('AudioBufferSourceNode.loop')
   @DocsEditable()
-  void set loop(bool value) => _blink.BlinkAudioBufferSourceNode.$loop_Setter(this, value);
+  void set loop(bool value) => _blink.BlinkAudioBufferSourceNode.loop_Setter_boolean(this, value);
 
   @DomName('AudioBufferSourceNode.loopEnd')
   @DocsEditable()
-  num get loopEnd => _blink.BlinkAudioBufferSourceNode.$loopEnd_Getter(this);
+  num get loopEnd => _blink.BlinkAudioBufferSourceNode.loopEnd_Getter(this);
 
   @DomName('AudioBufferSourceNode.loopEnd')
   @DocsEditable()
-  void set loopEnd(num value) => _blink.BlinkAudioBufferSourceNode.$loopEnd_Setter(this, value);
+  void set loopEnd(num value) => _blink.BlinkAudioBufferSourceNode.loopEnd_Setter_double(this, value);
 
   @DomName('AudioBufferSourceNode.loopStart')
   @DocsEditable()
-  num get loopStart => _blink.BlinkAudioBufferSourceNode.$loopStart_Getter(this);
+  num get loopStart => _blink.BlinkAudioBufferSourceNode.loopStart_Getter(this);
 
   @DomName('AudioBufferSourceNode.loopStart')
   @DocsEditable()
-  void set loopStart(num value) => _blink.BlinkAudioBufferSourceNode.$loopStart_Setter(this, value);
+  void set loopStart(num value) => _blink.BlinkAudioBufferSourceNode.loopStart_Setter_double(this, value);
 
   @DomName('AudioBufferSourceNode.playbackRate')
   @DocsEditable()
-  AudioParam get playbackRate => _blink.BlinkAudioBufferSourceNode.$playbackRate_Getter(this);
+  AudioParam get playbackRate => _blink.BlinkAudioBufferSourceNode.playbackRate_Getter(this);
 
   @DomName('AudioBufferSourceNode.noteGrainOn')
   @DocsEditable()
-  void noteGrainOn(num when, num grainOffset, num grainDuration) => _blink.BlinkAudioBufferSourceNode.$noteGrainOn_Callback(this, when, grainOffset, grainDuration);
+  void noteGrainOn(num when, num grainOffset, num grainDuration) => _blink.BlinkAudioBufferSourceNode.noteGrainOn_Callback_double_double_double(this, when, grainOffset, grainDuration);
 
   @DomName('AudioBufferSourceNode.noteOff')
   @DocsEditable()
-  void noteOff(num when) => _blink.BlinkAudioBufferSourceNode.$noteOff_Callback(this, when);
+  void noteOff(num when) => _blink.BlinkAudioBufferSourceNode.noteOff_Callback_double(this, when);
 
   @DomName('AudioBufferSourceNode.noteOn')
   @DocsEditable()
-  void noteOn(num when) => _blink.BlinkAudioBufferSourceNode.$noteOn_Callback(this, when);
+  void noteOn(num when) => _blink.BlinkAudioBufferSourceNode.noteOn_Callback_double(this, when);
 
   void start([num when, num grainOffset, num grainDuration]) {
     if (grainDuration != null) {
-      _blink.BlinkAudioBufferSourceNode.$_start_1_Callback(this, when, grainOffset, grainDuration);
+      _blink.BlinkAudioBufferSourceNode.start_Callback_double_double_double(this, when, grainOffset, grainDuration);
       return;
     }
     if (grainOffset != null) {
-      _blink.BlinkAudioBufferSourceNode.$_start_2_Callback(this, when, grainOffset);
+      _blink.BlinkAudioBufferSourceNode.start_Callback_double_double(this, when, grainOffset);
       return;
     }
     if (when != null) {
-      _blink.BlinkAudioBufferSourceNode.$_start_3_Callback(this, when);
+      _blink.BlinkAudioBufferSourceNode.start_Callback_double(this, when);
       return;
     }
-    _blink.BlinkAudioBufferSourceNode.$_start_4_Callback(this);
+    _blink.BlinkAudioBufferSourceNode.start_Callback(this);
     return;
   }
 
   void stop([num when]) {
     if (when != null) {
-      _blink.BlinkAudioBufferSourceNode.$_stop_1_Callback(this, when);
+      _blink.BlinkAudioBufferSourceNode.stop_Callback_double(this, when);
       return;
     }
-    _blink.BlinkAudioBufferSourceNode.$_stop_2_Callback(this);
+    _blink.BlinkAudioBufferSourceNode.stop_Callback(this);
     return;
   }
 
@@ -308,7 +308,7 @@
   @DomName('AudioContext.AudioContext')
   @DocsEditable()
   factory AudioContext() {
-    return _blink.BlinkAudioContext.$_create_1constructorCallback();
+    return _blink.BlinkAudioContext.constructorCallback();
   }
 
   /// Checks if this type is supported on the current platform.
@@ -316,118 +316,118 @@
 
   @DomName('AudioContext.currentTime')
   @DocsEditable()
-  double get currentTime => _blink.BlinkAudioContext.$currentTime_Getter(this);
+  double get currentTime => _blink.BlinkAudioContext.currentTime_Getter(this);
 
   @DomName('AudioContext.destination')
   @DocsEditable()
-  AudioDestinationNode get destination => _blink.BlinkAudioContext.$destination_Getter(this);
+  AudioDestinationNode get destination => _blink.BlinkAudioContext.destination_Getter(this);
 
   @DomName('AudioContext.listener')
   @DocsEditable()
-  AudioListener get listener => _blink.BlinkAudioContext.$listener_Getter(this);
+  AudioListener get listener => _blink.BlinkAudioContext.listener_Getter(this);
 
   @DomName('AudioContext.sampleRate')
   @DocsEditable()
-  double get sampleRate => _blink.BlinkAudioContext.$sampleRate_Getter(this);
+  double get sampleRate => _blink.BlinkAudioContext.sampleRate_Getter(this);
 
   @DomName('AudioContext.createAnalyser')
   @DocsEditable()
-  AnalyserNode createAnalyser() => _blink.BlinkAudioContext.$createAnalyser_Callback(this);
+  AnalyserNode createAnalyser() => _blink.BlinkAudioContext.createAnalyser_Callback(this);
 
   @DomName('AudioContext.createBiquadFilter')
   @DocsEditable()
-  BiquadFilterNode createBiquadFilter() => _blink.BlinkAudioContext.$createBiquadFilter_Callback(this);
+  BiquadFilterNode createBiquadFilter() => _blink.BlinkAudioContext.createBiquadFilter_Callback(this);
 
   @DomName('AudioContext.createBuffer')
   @DocsEditable()
-  AudioBuffer createBuffer(int numberOfChannels, int numberOfFrames, num sampleRate) => _blink.BlinkAudioContext.$createBuffer_Callback(this, numberOfChannels, numberOfFrames, sampleRate);
+  AudioBuffer createBuffer(int numberOfChannels, int numberOfFrames, num sampleRate) => _blink.BlinkAudioContext.createBuffer_Callback_ul_ul_float(this, numberOfChannels, numberOfFrames, sampleRate);
 
   @DomName('AudioContext.createBufferSource')
   @DocsEditable()
-  AudioBufferSourceNode createBufferSource() => _blink.BlinkAudioContext.$createBufferSource_Callback(this);
+  AudioBufferSourceNode createBufferSource() => _blink.BlinkAudioContext.createBufferSource_Callback(this);
 
   ChannelMergerNode createChannelMerger([int numberOfInputs]) {
     if (numberOfInputs != null) {
-      return _blink.BlinkAudioContext.$_createChannelMerger_1_Callback(this, numberOfInputs);
+      return _blink.BlinkAudioContext.createChannelMerger_Callback_ul(this, numberOfInputs);
     }
-    return _blink.BlinkAudioContext.$_createChannelMerger_2_Callback(this);
+    return _blink.BlinkAudioContext.createChannelMerger_Callback(this);
   }
 
   ChannelSplitterNode createChannelSplitter([int numberOfOutputs]) {
     if (numberOfOutputs != null) {
-      return _blink.BlinkAudioContext.$_createChannelSplitter_1_Callback(this, numberOfOutputs);
+      return _blink.BlinkAudioContext.createChannelSplitter_Callback_ul(this, numberOfOutputs);
     }
-    return _blink.BlinkAudioContext.$_createChannelSplitter_2_Callback(this);
+    return _blink.BlinkAudioContext.createChannelSplitter_Callback(this);
   }
 
   @DomName('AudioContext.createConvolver')
   @DocsEditable()
-  ConvolverNode createConvolver() => _blink.BlinkAudioContext.$createConvolver_Callback(this);
+  ConvolverNode createConvolver() => _blink.BlinkAudioContext.createConvolver_Callback(this);
 
   DelayNode createDelay([num maxDelayTime]) {
     if (maxDelayTime != null) {
-      return _blink.BlinkAudioContext.$_createDelay_1_Callback(this, maxDelayTime);
+      return _blink.BlinkAudioContext.createDelay_Callback_double(this, maxDelayTime);
     }
-    return _blink.BlinkAudioContext.$_createDelay_2_Callback(this);
+    return _blink.BlinkAudioContext.createDelay_Callback(this);
   }
 
   @DomName('AudioContext.createDynamicsCompressor')
   @DocsEditable()
-  DynamicsCompressorNode createDynamicsCompressor() => _blink.BlinkAudioContext.$createDynamicsCompressor_Callback(this);
+  DynamicsCompressorNode createDynamicsCompressor() => _blink.BlinkAudioContext.createDynamicsCompressor_Callback(this);
 
   @DomName('AudioContext.createGain')
   @DocsEditable()
-  GainNode createGain() => _blink.BlinkAudioContext.$createGain_Callback(this);
+  GainNode createGain() => _blink.BlinkAudioContext.createGain_Callback(this);
 
   @DomName('AudioContext.createMediaElementSource')
   @DocsEditable()
-  MediaElementAudioSourceNode createMediaElementSource(MediaElement mediaElement) => _blink.BlinkAudioContext.$createMediaElementSource_Callback(this, mediaElement);
+  MediaElementAudioSourceNode createMediaElementSource(MediaElement mediaElement) => _blink.BlinkAudioContext.createMediaElementSource_Callback_HTMLMediaElement(this, mediaElement);
 
   @DomName('AudioContext.createMediaStreamDestination')
   @DocsEditable()
-  MediaStreamAudioDestinationNode createMediaStreamDestination() => _blink.BlinkAudioContext.$createMediaStreamDestination_Callback(this);
+  MediaStreamAudioDestinationNode createMediaStreamDestination() => _blink.BlinkAudioContext.createMediaStreamDestination_Callback(this);
 
   @DomName('AudioContext.createMediaStreamSource')
   @DocsEditable()
-  MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream) => _blink.BlinkAudioContext.$createMediaStreamSource_Callback(this, mediaStream);
+  MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream) => _blink.BlinkAudioContext.createMediaStreamSource_Callback_MediaStream(this, mediaStream);
 
   @DomName('AudioContext.createOscillator')
   @DocsEditable()
-  OscillatorNode createOscillator() => _blink.BlinkAudioContext.$createOscillator_Callback(this);
+  OscillatorNode createOscillator() => _blink.BlinkAudioContext.createOscillator_Callback(this);
 
   @DomName('AudioContext.createPanner')
   @DocsEditable()
-  PannerNode createPanner() => _blink.BlinkAudioContext.$createPanner_Callback(this);
+  PannerNode createPanner() => _blink.BlinkAudioContext.createPanner_Callback(this);
 
   @DomName('AudioContext.createPeriodicWave')
   @DocsEditable()
   @Experimental() // untriaged
-  PeriodicWave createPeriodicWave(Float32List real, Float32List imag) => _blink.BlinkAudioContext.$createPeriodicWave_Callback(this, real, imag);
+  PeriodicWave createPeriodicWave(Float32List real, Float32List imag) => _blink.BlinkAudioContext.createPeriodicWave_Callback_Float32Array_Float32Array(this, real, imag);
 
   ScriptProcessorNode createScriptProcessor([int bufferSize, int numberOfInputChannels, int numberOfOutputChannels]) {
     if (numberOfOutputChannels != null) {
-      return _blink.BlinkAudioContext.$_createScriptProcessor_1_Callback(this, bufferSize, numberOfInputChannels, numberOfOutputChannels);
+      return _blink.BlinkAudioContext.createScriptProcessor_Callback_ul_ul_ul(this, bufferSize, numberOfInputChannels, numberOfOutputChannels);
     }
     if (numberOfInputChannels != null) {
-      return _blink.BlinkAudioContext.$_createScriptProcessor_2_Callback(this, bufferSize, numberOfInputChannels);
+      return _blink.BlinkAudioContext.createScriptProcessor_Callback_ul_ul(this, bufferSize, numberOfInputChannels);
     }
     if (bufferSize != null) {
-      return _blink.BlinkAudioContext.$_createScriptProcessor_3_Callback(this, bufferSize);
+      return _blink.BlinkAudioContext.createScriptProcessor_Callback_ul(this, bufferSize);
     }
-    return _blink.BlinkAudioContext.$_createScriptProcessor_4_Callback(this);
+    return _blink.BlinkAudioContext.createScriptProcessor_Callback(this);
   }
 
   @DomName('AudioContext.createWaveShaper')
   @DocsEditable()
-  WaveShaperNode createWaveShaper() => _blink.BlinkAudioContext.$createWaveShaper_Callback(this);
+  WaveShaperNode createWaveShaper() => _blink.BlinkAudioContext.createWaveShaper_Callback(this);
 
   @DomName('AudioContext.decodeAudioData')
   @DocsEditable()
-  void _decodeAudioData(ByteBuffer audioData, AudioBufferCallback successCallback, [AudioBufferCallback errorCallback]) => _blink.BlinkAudioContext.$decodeAudioData_Callback(this, audioData, successCallback, errorCallback);
+  void _decodeAudioData(ByteBuffer audioData, AudioBufferCallback successCallback, [AudioBufferCallback errorCallback]) => _blink.BlinkAudioContext.decodeAudioData_Callback_ArrayBuffer_AudioBufferCallback_AudioBufferCallback(this, audioData, successCallback, errorCallback);
 
   @DomName('AudioContext.startRendering')
   @DocsEditable()
-  void startRendering() => _blink.BlinkAudioContext.$startRendering_Callback(this);
+  void startRendering() => _blink.BlinkAudioContext.startRendering_Callback(this);
 
   /// Stream of `complete` events handled by this [AudioContext].
   @DomName('AudioContext.oncomplete')
@@ -466,7 +466,7 @@
 
   @DomName('AudioDestinationNode.maxChannelCount')
   @DocsEditable()
-  int get maxChannelCount => _blink.BlinkAudioDestinationNode.$maxChannelCount_Getter(this);
+  int get maxChannelCount => _blink.BlinkAudioDestinationNode.maxChannelCount_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -486,31 +486,31 @@
 
   @DomName('AudioListener.dopplerFactor')
   @DocsEditable()
-  num get dopplerFactor => _blink.BlinkAudioListener.$dopplerFactor_Getter(this);
+  num get dopplerFactor => _blink.BlinkAudioListener.dopplerFactor_Getter(this);
 
   @DomName('AudioListener.dopplerFactor')
   @DocsEditable()
-  void set dopplerFactor(num value) => _blink.BlinkAudioListener.$dopplerFactor_Setter(this, value);
+  void set dopplerFactor(num value) => _blink.BlinkAudioListener.dopplerFactor_Setter_float(this, value);
 
   @DomName('AudioListener.speedOfSound')
   @DocsEditable()
-  num get speedOfSound => _blink.BlinkAudioListener.$speedOfSound_Getter(this);
+  num get speedOfSound => _blink.BlinkAudioListener.speedOfSound_Getter(this);
 
   @DomName('AudioListener.speedOfSound')
   @DocsEditable()
-  void set speedOfSound(num value) => _blink.BlinkAudioListener.$speedOfSound_Setter(this, value);
+  void set speedOfSound(num value) => _blink.BlinkAudioListener.speedOfSound_Setter_float(this, value);
 
   @DomName('AudioListener.setOrientation')
   @DocsEditable()
-  void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp) => _blink.BlinkAudioListener.$setOrientation_Callback(this, x, y, z, xUp, yUp, zUp);
+  void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp) => _blink.BlinkAudioListener.setOrientation_Callback_float_float_float_float_float_float(this, x, y, z, xUp, yUp, zUp);
 
   @DomName('AudioListener.setPosition')
   @DocsEditable()
-  void setPosition(num x, num y, num z) => _blink.BlinkAudioListener.$setPosition_Callback(this, x, y, z);
+  void setPosition(num x, num y, num z) => _blink.BlinkAudioListener.setPosition_Callback_float_float_float(this, x, y, z);
 
   @DomName('AudioListener.setVelocity')
   @DocsEditable()
-  void setVelocity(num x, num y, num z) => _blink.BlinkAudioListener.$setVelocity_Callback(this, x, y, z);
+  void setVelocity(num x, num y, num z) => _blink.BlinkAudioListener.setVelocity_Callback_float_float_float(this, x, y, z);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -527,47 +527,47 @@
 
   @DomName('AudioNode.channelCount')
   @DocsEditable()
-  int get channelCount => _blink.BlinkAudioNode.$channelCount_Getter(this);
+  int get channelCount => _blink.BlinkAudioNode.channelCount_Getter(this);
 
   @DomName('AudioNode.channelCount')
   @DocsEditable()
-  void set channelCount(int value) => _blink.BlinkAudioNode.$channelCount_Setter(this, value);
+  void set channelCount(int value) => _blink.BlinkAudioNode.channelCount_Setter_ul(this, value);
 
   @DomName('AudioNode.channelCountMode')
   @DocsEditable()
-  String get channelCountMode => _blink.BlinkAudioNode.$channelCountMode_Getter(this);
+  String get channelCountMode => _blink.BlinkAudioNode.channelCountMode_Getter(this);
 
   @DomName('AudioNode.channelCountMode')
   @DocsEditable()
-  void set channelCountMode(String value) => _blink.BlinkAudioNode.$channelCountMode_Setter(this, value);
+  void set channelCountMode(String value) => _blink.BlinkAudioNode.channelCountMode_Setter_DOMString(this, value);
 
   @DomName('AudioNode.channelInterpretation')
   @DocsEditable()
-  String get channelInterpretation => _blink.BlinkAudioNode.$channelInterpretation_Getter(this);
+  String get channelInterpretation => _blink.BlinkAudioNode.channelInterpretation_Getter(this);
 
   @DomName('AudioNode.channelInterpretation')
   @DocsEditable()
-  void set channelInterpretation(String value) => _blink.BlinkAudioNode.$channelInterpretation_Setter(this, value);
+  void set channelInterpretation(String value) => _blink.BlinkAudioNode.channelInterpretation_Setter_DOMString(this, value);
 
   @DomName('AudioNode.context')
   @DocsEditable()
-  AudioContext get context => _blink.BlinkAudioNode.$context_Getter(this);
+  AudioContext get context => _blink.BlinkAudioNode.context_Getter(this);
 
   @DomName('AudioNode.numberOfInputs')
   @DocsEditable()
-  int get numberOfInputs => _blink.BlinkAudioNode.$numberOfInputs_Getter(this);
+  int get numberOfInputs => _blink.BlinkAudioNode.numberOfInputs_Getter(this);
 
   @DomName('AudioNode.numberOfOutputs')
   @DocsEditable()
-  int get numberOfOutputs => _blink.BlinkAudioNode.$numberOfOutputs_Getter(this);
+  int get numberOfOutputs => _blink.BlinkAudioNode.numberOfOutputs_Getter(this);
 
   void _connect(destination, int output, [int input]) {
     if ((input is int || input == null) && (output is int || output == null) && (destination is AudioNode || destination == null)) {
-      _blink.BlinkAudioNode.$_connect_1_Callback(this, destination, output, input);
+      _blink.BlinkAudioNode.connect_Callback_AudioNode_ul_ul(this, destination, output, input);
       return;
     }
     if ((output is int || output == null) && (destination is AudioParam || destination == null) && input == null) {
-      _blink.BlinkAudioNode.$_connect_2_Callback(this, destination, output);
+      _blink.BlinkAudioNode.connect_Callback_AudioParam_ul(this, destination, output);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -575,7 +575,7 @@
 
   @DomName('AudioNode.disconnect')
   @DocsEditable()
-  void disconnect(int output) => _blink.BlinkAudioNode.$disconnect_Callback(this, output);
+  void disconnect(int output) => _blink.BlinkAudioNode.disconnect_Callback_ul(this, output);
 
   @DomName('AudioNode.connect')
   void connectNode(AudioNode destination, [int output = 0, int input = 0]) =>
@@ -602,55 +602,55 @@
 
   @DomName('AudioParam.defaultValue')
   @DocsEditable()
-  double get defaultValue => _blink.BlinkAudioParam.$defaultValue_Getter(this);
+  double get defaultValue => _blink.BlinkAudioParam.defaultValue_Getter(this);
 
   @DomName('AudioParam.maxValue')
   @DocsEditable()
-  double get maxValue => _blink.BlinkAudioParam.$maxValue_Getter(this);
+  double get maxValue => _blink.BlinkAudioParam.maxValue_Getter(this);
 
   @DomName('AudioParam.minValue')
   @DocsEditable()
-  double get minValue => _blink.BlinkAudioParam.$minValue_Getter(this);
+  double get minValue => _blink.BlinkAudioParam.minValue_Getter(this);
 
   @DomName('AudioParam.name')
   @DocsEditable()
-  String get name => _blink.BlinkAudioParam.$name_Getter(this);
+  String get name => _blink.BlinkAudioParam.name_Getter(this);
 
   @DomName('AudioParam.units')
   @DocsEditable()
-  int get units => _blink.BlinkAudioParam.$units_Getter(this);
+  int get units => _blink.BlinkAudioParam.units_Getter(this);
 
   @DomName('AudioParam.value')
   @DocsEditable()
-  num get value => _blink.BlinkAudioParam.$value_Getter(this);
+  num get value => _blink.BlinkAudioParam.value_Getter(this);
 
   @DomName('AudioParam.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkAudioParam.$value_Setter(this, value);
+  void set value(num value) => _blink.BlinkAudioParam.value_Setter_float(this, value);
 
   @DomName('AudioParam.cancelScheduledValues')
   @DocsEditable()
-  void cancelScheduledValues(num startTime) => _blink.BlinkAudioParam.$cancelScheduledValues_Callback(this, startTime);
+  void cancelScheduledValues(num startTime) => _blink.BlinkAudioParam.cancelScheduledValues_Callback_double(this, startTime);
 
   @DomName('AudioParam.exponentialRampToValueAtTime')
   @DocsEditable()
-  void exponentialRampToValueAtTime(num value, num time) => _blink.BlinkAudioParam.$exponentialRampToValueAtTime_Callback(this, value, time);
+  void exponentialRampToValueAtTime(num value, num time) => _blink.BlinkAudioParam.exponentialRampToValueAtTime_Callback_float_double(this, value, time);
 
   @DomName('AudioParam.linearRampToValueAtTime')
   @DocsEditable()
-  void linearRampToValueAtTime(num value, num time) => _blink.BlinkAudioParam.$linearRampToValueAtTime_Callback(this, value, time);
+  void linearRampToValueAtTime(num value, num time) => _blink.BlinkAudioParam.linearRampToValueAtTime_Callback_float_double(this, value, time);
 
   @DomName('AudioParam.setTargetAtTime')
   @DocsEditable()
-  void setTargetAtTime(num target, num time, num timeConstant) => _blink.BlinkAudioParam.$setTargetAtTime_Callback(this, target, time, timeConstant);
+  void setTargetAtTime(num target, num time, num timeConstant) => _blink.BlinkAudioParam.setTargetAtTime_Callback_float_double_double(this, target, time, timeConstant);
 
   @DomName('AudioParam.setValueAtTime')
   @DocsEditable()
-  void setValueAtTime(num value, num time) => _blink.BlinkAudioParam.$setValueAtTime_Callback(this, value, time);
+  void setValueAtTime(num value, num time) => _blink.BlinkAudioParam.setValueAtTime_Callback_float_double(this, value, time);
 
   @DomName('AudioParam.setValueCurveAtTime')
   @DocsEditable()
-  void setValueCurveAtTime(Float32List values, num time, num duration) => _blink.BlinkAudioParam.$setValueCurveAtTime_Callback(this, values, time, duration);
+  void setValueCurveAtTime(Float32List values, num time, num duration) => _blink.BlinkAudioParam.setValueCurveAtTime_Callback_Float32Array_double_double(this, values, time, duration);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -670,11 +670,11 @@
 
   @DomName('AudioProcessingEvent.inputBuffer')
   @DocsEditable()
-  AudioBuffer get inputBuffer => _blink.BlinkAudioProcessingEvent.$inputBuffer_Getter(this);
+  AudioBuffer get inputBuffer => _blink.BlinkAudioProcessingEvent.inputBuffer_Getter(this);
 
   @DomName('AudioProcessingEvent.outputBuffer')
   @DocsEditable()
-  AudioBuffer get outputBuffer => _blink.BlinkAudioProcessingEvent.$outputBuffer_Getter(this);
+  AudioBuffer get outputBuffer => _blink.BlinkAudioProcessingEvent.outputBuffer_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -742,31 +742,31 @@
 
   @DomName('BiquadFilterNode.Q')
   @DocsEditable()
-  AudioParam get Q => _blink.BlinkBiquadFilterNode.$Q_Getter(this);
+  AudioParam get Q => _blink.BlinkBiquadFilterNode.Q_Getter(this);
 
   @DomName('BiquadFilterNode.detune')
   @DocsEditable()
-  AudioParam get detune => _blink.BlinkBiquadFilterNode.$detune_Getter(this);
+  AudioParam get detune => _blink.BlinkBiquadFilterNode.detune_Getter(this);
 
   @DomName('BiquadFilterNode.frequency')
   @DocsEditable()
-  AudioParam get frequency => _blink.BlinkBiquadFilterNode.$frequency_Getter(this);
+  AudioParam get frequency => _blink.BlinkBiquadFilterNode.frequency_Getter(this);
 
   @DomName('BiquadFilterNode.gain')
   @DocsEditable()
-  AudioParam get gain => _blink.BlinkBiquadFilterNode.$gain_Getter(this);
+  AudioParam get gain => _blink.BlinkBiquadFilterNode.gain_Getter(this);
 
   @DomName('BiquadFilterNode.type')
   @DocsEditable()
-  String get type => _blink.BlinkBiquadFilterNode.$type_Getter(this);
+  String get type => _blink.BlinkBiquadFilterNode.type_Getter(this);
 
   @DomName('BiquadFilterNode.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkBiquadFilterNode.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkBiquadFilterNode.type_Setter_DOMString(this, value);
 
   @DomName('BiquadFilterNode.getFrequencyResponse')
   @DocsEditable()
-  void getFrequencyResponse(Float32List frequencyHz, Float32List magResponse, Float32List phaseResponse) => _blink.BlinkBiquadFilterNode.$getFrequencyResponse_Callback(this, frequencyHz, magResponse, phaseResponse);
+  void getFrequencyResponse(Float32List frequencyHz, Float32List magResponse, Float32List phaseResponse) => _blink.BlinkBiquadFilterNode.getFrequencyResponse_Callback_Float32Array_Float32Array_Float32Array(this, frequencyHz, magResponse, phaseResponse);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -818,19 +818,19 @@
 
   @DomName('ConvolverNode.buffer')
   @DocsEditable()
-  AudioBuffer get buffer => _blink.BlinkConvolverNode.$buffer_Getter(this);
+  AudioBuffer get buffer => _blink.BlinkConvolverNode.buffer_Getter(this);
 
   @DomName('ConvolverNode.buffer')
   @DocsEditable()
-  void set buffer(AudioBuffer value) => _blink.BlinkConvolverNode.$buffer_Setter(this, value);
+  void set buffer(AudioBuffer value) => _blink.BlinkConvolverNode.buffer_Setter_AudioBuffer(this, value);
 
   @DomName('ConvolverNode.normalize')
   @DocsEditable()
-  bool get normalize => _blink.BlinkConvolverNode.$normalize_Getter(this);
+  bool get normalize => _blink.BlinkConvolverNode.normalize_Getter(this);
 
   @DomName('ConvolverNode.normalize')
   @DocsEditable()
-  void set normalize(bool value) => _blink.BlinkConvolverNode.$normalize_Setter(this, value);
+  void set normalize(bool value) => _blink.BlinkConvolverNode.normalize_Setter_boolean(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -850,7 +850,7 @@
 
   @DomName('DelayNode.delayTime')
   @DocsEditable()
-  AudioParam get delayTime => _blink.BlinkDelayNode.$delayTime_Getter(this);
+  AudioParam get delayTime => _blink.BlinkDelayNode.delayTime_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -870,27 +870,27 @@
 
   @DomName('DynamicsCompressorNode.attack')
   @DocsEditable()
-  AudioParam get attack => _blink.BlinkDynamicsCompressorNode.$attack_Getter(this);
+  AudioParam get attack => _blink.BlinkDynamicsCompressorNode.attack_Getter(this);
 
   @DomName('DynamicsCompressorNode.knee')
   @DocsEditable()
-  AudioParam get knee => _blink.BlinkDynamicsCompressorNode.$knee_Getter(this);
+  AudioParam get knee => _blink.BlinkDynamicsCompressorNode.knee_Getter(this);
 
   @DomName('DynamicsCompressorNode.ratio')
   @DocsEditable()
-  AudioParam get ratio => _blink.BlinkDynamicsCompressorNode.$ratio_Getter(this);
+  AudioParam get ratio => _blink.BlinkDynamicsCompressorNode.ratio_Getter(this);
 
   @DomName('DynamicsCompressorNode.reduction')
   @DocsEditable()
-  AudioParam get reduction => _blink.BlinkDynamicsCompressorNode.$reduction_Getter(this);
+  AudioParam get reduction => _blink.BlinkDynamicsCompressorNode.reduction_Getter(this);
 
   @DomName('DynamicsCompressorNode.release')
   @DocsEditable()
-  AudioParam get release => _blink.BlinkDynamicsCompressorNode.$release_Getter(this);
+  AudioParam get release => _blink.BlinkDynamicsCompressorNode.release_Getter(this);
 
   @DomName('DynamicsCompressorNode.threshold')
   @DocsEditable()
-  AudioParam get threshold => _blink.BlinkDynamicsCompressorNode.$threshold_Getter(this);
+  AudioParam get threshold => _blink.BlinkDynamicsCompressorNode.threshold_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -910,7 +910,7 @@
 
   @DomName('GainNode.gain')
   @DocsEditable()
-  AudioParam get gain => _blink.BlinkGainNode.$gain_Getter(this);
+  AudioParam get gain => _blink.BlinkGainNode.gain_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -931,7 +931,7 @@
   @DomName('MediaElementAudioSourceNode.mediaElement')
   @DocsEditable()
   @Experimental() // non-standard
-  MediaElement get mediaElement => _blink.BlinkMediaElementAudioSourceNode.$mediaElement_Getter(this);
+  MediaElement get mediaElement => _blink.BlinkMediaElementAudioSourceNode.mediaElement_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -951,7 +951,7 @@
 
   @DomName('MediaStreamAudioDestinationNode.stream')
   @DocsEditable()
-  MediaStream get stream => _blink.BlinkMediaStreamAudioDestinationNode.$stream_Getter(this);
+  MediaStream get stream => _blink.BlinkMediaStreamAudioDestinationNode.stream_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -971,7 +971,7 @@
 
   @DomName('MediaStreamAudioSourceNode.mediaStream')
   @DocsEditable()
-  MediaStream get mediaStream => _blink.BlinkMediaStreamAudioSourceNode.$mediaStream_Getter(this);
+  MediaStream get mediaStream => _blink.BlinkMediaStreamAudioSourceNode.mediaStream_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -991,7 +991,7 @@
 
   @DomName('OfflineAudioCompletionEvent.renderedBuffer')
   @DocsEditable()
-  AudioBuffer get renderedBuffer => _blink.BlinkOfflineAudioCompletionEvent.$renderedBuffer_Getter(this);
+  AudioBuffer get renderedBuffer => _blink.BlinkOfflineAudioCompletionEvent.renderedBuffer_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1012,7 +1012,7 @@
   @DomName('OfflineAudioContext.OfflineAudioContext')
   @DocsEditable()
   factory OfflineAudioContext(int numberOfChannels, int numberOfFrames, num sampleRate) {
-    return _blink.BlinkOfflineAudioContext.$_create_1constructorCallback(numberOfChannels, numberOfFrames, sampleRate);
+    return _blink.BlinkOfflineAudioContext.constructorCallback_ul_ul_float(numberOfChannels, numberOfFrames, sampleRate);
   }
 
 }
@@ -1060,48 +1060,48 @@
 
   @DomName('OscillatorNode.detune')
   @DocsEditable()
-  AudioParam get detune => _blink.BlinkOscillatorNode.$detune_Getter(this);
+  AudioParam get detune => _blink.BlinkOscillatorNode.detune_Getter(this);
 
   @DomName('OscillatorNode.frequency')
   @DocsEditable()
-  AudioParam get frequency => _blink.BlinkOscillatorNode.$frequency_Getter(this);
+  AudioParam get frequency => _blink.BlinkOscillatorNode.frequency_Getter(this);
 
   @DomName('OscillatorNode.type')
   @DocsEditable()
-  String get type => _blink.BlinkOscillatorNode.$type_Getter(this);
+  String get type => _blink.BlinkOscillatorNode.type_Getter(this);
 
   @DomName('OscillatorNode.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkOscillatorNode.$type_Setter(this, value);
+  void set type(String value) => _blink.BlinkOscillatorNode.type_Setter_DOMString(this, value);
 
   @DomName('OscillatorNode.noteOff')
   @DocsEditable()
-  void noteOff(num when) => _blink.BlinkOscillatorNode.$noteOff_Callback(this, when);
+  void noteOff(num when) => _blink.BlinkOscillatorNode.noteOff_Callback_double(this, when);
 
   @DomName('OscillatorNode.noteOn')
   @DocsEditable()
-  void noteOn(num when) => _blink.BlinkOscillatorNode.$noteOn_Callback(this, when);
+  void noteOn(num when) => _blink.BlinkOscillatorNode.noteOn_Callback_double(this, when);
 
   @DomName('OscillatorNode.setPeriodicWave')
   @DocsEditable()
   @Experimental() // untriaged
-  void setPeriodicWave(PeriodicWave periodicWave) => _blink.BlinkOscillatorNode.$setPeriodicWave_Callback(this, periodicWave);
+  void setPeriodicWave(PeriodicWave periodicWave) => _blink.BlinkOscillatorNode.setPeriodicWave_Callback_PeriodicWave(this, periodicWave);
 
   void start([num when]) {
     if (when != null) {
-      _blink.BlinkOscillatorNode.$_start_1_Callback(this, when);
+      _blink.BlinkOscillatorNode.start_Callback_double(this, when);
       return;
     }
-    _blink.BlinkOscillatorNode.$_start_2_Callback(this);
+    _blink.BlinkOscillatorNode.start_Callback(this);
     return;
   }
 
   void stop([num when]) {
     if (when != null) {
-      _blink.BlinkOscillatorNode.$_stop_1_Callback(this, when);
+      _blink.BlinkOscillatorNode.stop_Callback_double(this, when);
       return;
     }
-    _blink.BlinkOscillatorNode.$_stop_2_Callback(this);
+    _blink.BlinkOscillatorNode.stop_Callback(this);
     return;
   }
 
@@ -1129,79 +1129,79 @@
 
   @DomName('PannerNode.coneInnerAngle')
   @DocsEditable()
-  num get coneInnerAngle => _blink.BlinkPannerNode.$coneInnerAngle_Getter(this);
+  num get coneInnerAngle => _blink.BlinkPannerNode.coneInnerAngle_Getter(this);
 
   @DomName('PannerNode.coneInnerAngle')
   @DocsEditable()
-  void set coneInnerAngle(num value) => _blink.BlinkPannerNode.$coneInnerAngle_Setter(this, value);
+  void set coneInnerAngle(num value) => _blink.BlinkPannerNode.coneInnerAngle_Setter_double(this, value);
 
   @DomName('PannerNode.coneOuterAngle')
   @DocsEditable()
-  num get coneOuterAngle => _blink.BlinkPannerNode.$coneOuterAngle_Getter(this);
+  num get coneOuterAngle => _blink.BlinkPannerNode.coneOuterAngle_Getter(this);
 
   @DomName('PannerNode.coneOuterAngle')
   @DocsEditable()
-  void set coneOuterAngle(num value) => _blink.BlinkPannerNode.$coneOuterAngle_Setter(this, value);
+  void set coneOuterAngle(num value) => _blink.BlinkPannerNode.coneOuterAngle_Setter_double(this, value);
 
   @DomName('PannerNode.coneOuterGain')
   @DocsEditable()
-  num get coneOuterGain => _blink.BlinkPannerNode.$coneOuterGain_Getter(this);
+  num get coneOuterGain => _blink.BlinkPannerNode.coneOuterGain_Getter(this);
 
   @DomName('PannerNode.coneOuterGain')
   @DocsEditable()
-  void set coneOuterGain(num value) => _blink.BlinkPannerNode.$coneOuterGain_Setter(this, value);
+  void set coneOuterGain(num value) => _blink.BlinkPannerNode.coneOuterGain_Setter_double(this, value);
 
   @DomName('PannerNode.distanceModel')
   @DocsEditable()
-  String get distanceModel => _blink.BlinkPannerNode.$distanceModel_Getter(this);
+  String get distanceModel => _blink.BlinkPannerNode.distanceModel_Getter(this);
 
   @DomName('PannerNode.distanceModel')
   @DocsEditable()
-  void set distanceModel(String value) => _blink.BlinkPannerNode.$distanceModel_Setter(this, value);
+  void set distanceModel(String value) => _blink.BlinkPannerNode.distanceModel_Setter_DOMString(this, value);
 
   @DomName('PannerNode.maxDistance')
   @DocsEditable()
-  num get maxDistance => _blink.BlinkPannerNode.$maxDistance_Getter(this);
+  num get maxDistance => _blink.BlinkPannerNode.maxDistance_Getter(this);
 
   @DomName('PannerNode.maxDistance')
   @DocsEditable()
-  void set maxDistance(num value) => _blink.BlinkPannerNode.$maxDistance_Setter(this, value);
+  void set maxDistance(num value) => _blink.BlinkPannerNode.maxDistance_Setter_double(this, value);
 
   @DomName('PannerNode.panningModel')
   @DocsEditable()
-  String get panningModel => _blink.BlinkPannerNode.$panningModel_Getter(this);
+  String get panningModel => _blink.BlinkPannerNode.panningModel_Getter(this);
 
   @DomName('PannerNode.panningModel')
   @DocsEditable()
-  void set panningModel(String value) => _blink.BlinkPannerNode.$panningModel_Setter(this, value);
+  void set panningModel(String value) => _blink.BlinkPannerNode.panningModel_Setter_DOMString(this, value);
 
   @DomName('PannerNode.refDistance')
   @DocsEditable()
-  num get refDistance => _blink.BlinkPannerNode.$refDistance_Getter(this);
+  num get refDistance => _blink.BlinkPannerNode.refDistance_Getter(this);
 
   @DomName('PannerNode.refDistance')
   @DocsEditable()
-  void set refDistance(num value) => _blink.BlinkPannerNode.$refDistance_Setter(this, value);
+  void set refDistance(num value) => _blink.BlinkPannerNode.refDistance_Setter_double(this, value);
 
   @DomName('PannerNode.rolloffFactor')
   @DocsEditable()
-  num get rolloffFactor => _blink.BlinkPannerNode.$rolloffFactor_Getter(this);
+  num get rolloffFactor => _blink.BlinkPannerNode.rolloffFactor_Getter(this);
 
   @DomName('PannerNode.rolloffFactor')
   @DocsEditable()
-  void set rolloffFactor(num value) => _blink.BlinkPannerNode.$rolloffFactor_Setter(this, value);
+  void set rolloffFactor(num value) => _blink.BlinkPannerNode.rolloffFactor_Setter_double(this, value);
 
   @DomName('PannerNode.setOrientation')
   @DocsEditable()
-  void setOrientation(num x, num y, num z) => _blink.BlinkPannerNode.$setOrientation_Callback(this, x, y, z);
+  void setOrientation(num x, num y, num z) => _blink.BlinkPannerNode.setOrientation_Callback_float_float_float(this, x, y, z);
 
   @DomName('PannerNode.setPosition')
   @DocsEditable()
-  void setPosition(num x, num y, num z) => _blink.BlinkPannerNode.$setPosition_Callback(this, x, y, z);
+  void setPosition(num x, num y, num z) => _blink.BlinkPannerNode.setPosition_Callback_float_float_float(this, x, y, z);
 
   @DomName('PannerNode.setVelocity')
   @DocsEditable()
-  void setVelocity(num x, num y, num z) => _blink.BlinkPannerNode.$setVelocity_Callback(this, x, y, z);
+  void setVelocity(num x, num y, num z) => _blink.BlinkPannerNode.setVelocity_Callback_float_float_float(this, x, y, z);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1247,12 +1247,12 @@
 
   @DomName('ScriptProcessorNode.bufferSize')
   @DocsEditable()
-  int get bufferSize => _blink.BlinkScriptProcessorNode.$bufferSize_Getter(this);
+  int get bufferSize => _blink.BlinkScriptProcessorNode.bufferSize_Getter(this);
 
   @DomName('ScriptProcessorNode._setEventListener')
   @DocsEditable()
   @Experimental() // non-standard
-  void _setEventListener(EventListener eventListener) => _blink.BlinkScriptProcessorNode.$_setEventListener_Callback(this, eventListener);
+  void _setEventListener(EventListener eventListener) => _blink.BlinkScriptProcessorNode.$_setEventListener_Callback_EventListener(this, eventListener);
 
   /// Stream of `audioprocess` events handled by this [ScriptProcessorNode].
 /**
@@ -1285,18 +1285,18 @@
 
   @DomName('WaveShaperNode.curve')
   @DocsEditable()
-  Float32List get curve => _blink.BlinkWaveShaperNode.$curve_Getter(this);
+  Float32List get curve => _blink.BlinkWaveShaperNode.curve_Getter(this);
 
   @DomName('WaveShaperNode.curve')
   @DocsEditable()
-  void set curve(Float32List value) => _blink.BlinkWaveShaperNode.$curve_Setter(this, value);
+  void set curve(Float32List value) => _blink.BlinkWaveShaperNode.curve_Setter_Float32Array(this, value);
 
   @DomName('WaveShaperNode.oversample')
   @DocsEditable()
-  String get oversample => _blink.BlinkWaveShaperNode.$oversample_Getter(this);
+  String get oversample => _blink.BlinkWaveShaperNode.oversample_Getter(this);
 
   @DomName('WaveShaperNode.oversample')
   @DocsEditable()
-  void set oversample(String value) => _blink.BlinkWaveShaperNode.$oversample_Setter(this, value);
+  void set oversample(String value) => _blink.BlinkWaveShaperNode.oversample_Setter_DOMString(this, value);
 
 }
diff --git a/sdk/lib/web_gl/dartium/web_gl_dartium.dart b/sdk/lib/web_gl/dartium/web_gl_dartium.dart
index 47767d6..a7254d7 100644
--- a/sdk/lib/web_gl/dartium/web_gl_dartium.dart
+++ b/sdk/lib/web_gl/dartium/web_gl_dartium.dart
@@ -367,15 +367,15 @@
 
   @DomName('WebGLActiveInfo.name')
   @DocsEditable()
-  String get name => _blink.BlinkWebGLActiveInfo.$name_Getter(this);
+  String get name => _blink.BlinkWebGLActiveInfo.name_Getter(this);
 
   @DomName('WebGLActiveInfo.size')
   @DocsEditable()
-  int get size => _blink.BlinkWebGLActiveInfo.$size_Getter(this);
+  int get size => _blink.BlinkWebGLActiveInfo.size_Getter(this);
 
   @DomName('WebGLActiveInfo.type')
   @DocsEditable()
-  int get type => _blink.BlinkWebGLActiveInfo.$type_Getter(this);
+  int get type => _blink.BlinkWebGLActiveInfo.type_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -400,17 +400,17 @@
   @DomName('ANGLEInstancedArrays.drawArraysInstancedANGLE')
   @DocsEditable()
   @Experimental() // untriaged
-  void drawArraysInstancedAngle(int mode, int first, int count, int primcount) => _blink.BlinkANGLEInstancedArrays.$drawArraysInstancedANGLE_Callback(this, mode, first, count, primcount);
+  void drawArraysInstancedAngle(int mode, int first, int count, int primcount) => _blink.BlinkANGLEInstancedArrays.drawArraysInstancedANGLE_Callback_ul_long_long_long(this, mode, first, count, primcount);
 
   @DomName('ANGLEInstancedArrays.drawElementsInstancedANGLE')
   @DocsEditable()
   @Experimental() // untriaged
-  void drawElementsInstancedAngle(int mode, int count, int type, int offset, int primcount) => _blink.BlinkANGLEInstancedArrays.$drawElementsInstancedANGLE_Callback(this, mode, count, type, offset, primcount);
+  void drawElementsInstancedAngle(int mode, int count, int type, int offset, int primcount) => _blink.BlinkANGLEInstancedArrays.drawElementsInstancedANGLE_Callback_ul_long_ul_ll_long(this, mode, count, type, offset, primcount);
 
   @DomName('ANGLEInstancedArrays.vertexAttribDivisorANGLE')
   @DocsEditable()
   @Experimental() // untriaged
-  void vertexAttribDivisorAngle(int index, int divisor) => _blink.BlinkANGLEInstancedArrays.$vertexAttribDivisorANGLE_Callback(this, index, divisor);
+  void vertexAttribDivisorAngle(int index, int divisor) => _blink.BlinkANGLEInstancedArrays.vertexAttribDivisorANGLE_Callback_ul_long(this, index, divisor);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -558,61 +558,61 @@
 
   @DomName('WebGLContextAttributes.alpha')
   @DocsEditable()
-  bool get alpha => _blink.BlinkWebGLContextAttributes.$alpha_Getter(this);
+  bool get alpha => _blink.BlinkWebGLContextAttributes.alpha_Getter(this);
 
   @DomName('WebGLContextAttributes.alpha')
   @DocsEditable()
-  void set alpha(bool value) => _blink.BlinkWebGLContextAttributes.$alpha_Setter(this, value);
+  void set alpha(bool value) => _blink.BlinkWebGLContextAttributes.alpha_Setter_boolean(this, value);
 
   @DomName('WebGLContextAttributes.antialias')
   @DocsEditable()
-  bool get antialias => _blink.BlinkWebGLContextAttributes.$antialias_Getter(this);
+  bool get antialias => _blink.BlinkWebGLContextAttributes.antialias_Getter(this);
 
   @DomName('WebGLContextAttributes.antialias')
   @DocsEditable()
-  void set antialias(bool value) => _blink.BlinkWebGLContextAttributes.$antialias_Setter(this, value);
+  void set antialias(bool value) => _blink.BlinkWebGLContextAttributes.antialias_Setter_boolean(this, value);
 
   @DomName('WebGLContextAttributes.depth')
   @DocsEditable()
-  bool get depth => _blink.BlinkWebGLContextAttributes.$depth_Getter(this);
+  bool get depth => _blink.BlinkWebGLContextAttributes.depth_Getter(this);
 
   @DomName('WebGLContextAttributes.depth')
   @DocsEditable()
-  void set depth(bool value) => _blink.BlinkWebGLContextAttributes.$depth_Setter(this, value);
+  void set depth(bool value) => _blink.BlinkWebGLContextAttributes.depth_Setter_boolean(this, value);
 
   @DomName('WebGLContextAttributes.failIfMajorPerformanceCaveat')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get failIfMajorPerformanceCaveat => _blink.BlinkWebGLContextAttributes.$failIfMajorPerformanceCaveat_Getter(this);
+  bool get failIfMajorPerformanceCaveat => _blink.BlinkWebGLContextAttributes.failIfMajorPerformanceCaveat_Getter(this);
 
   @DomName('WebGLContextAttributes.failIfMajorPerformanceCaveat')
   @DocsEditable()
   @Experimental() // untriaged
-  void set failIfMajorPerformanceCaveat(bool value) => _blink.BlinkWebGLContextAttributes.$failIfMajorPerformanceCaveat_Setter(this, value);
+  void set failIfMajorPerformanceCaveat(bool value) => _blink.BlinkWebGLContextAttributes.failIfMajorPerformanceCaveat_Setter_boolean(this, value);
 
   @DomName('WebGLContextAttributes.premultipliedAlpha')
   @DocsEditable()
-  bool get premultipliedAlpha => _blink.BlinkWebGLContextAttributes.$premultipliedAlpha_Getter(this);
+  bool get premultipliedAlpha => _blink.BlinkWebGLContextAttributes.premultipliedAlpha_Getter(this);
 
   @DomName('WebGLContextAttributes.premultipliedAlpha')
   @DocsEditable()
-  void set premultipliedAlpha(bool value) => _blink.BlinkWebGLContextAttributes.$premultipliedAlpha_Setter(this, value);
+  void set premultipliedAlpha(bool value) => _blink.BlinkWebGLContextAttributes.premultipliedAlpha_Setter_boolean(this, value);
 
   @DomName('WebGLContextAttributes.preserveDrawingBuffer')
   @DocsEditable()
-  bool get preserveDrawingBuffer => _blink.BlinkWebGLContextAttributes.$preserveDrawingBuffer_Getter(this);
+  bool get preserveDrawingBuffer => _blink.BlinkWebGLContextAttributes.preserveDrawingBuffer_Getter(this);
 
   @DomName('WebGLContextAttributes.preserveDrawingBuffer')
   @DocsEditable()
-  void set preserveDrawingBuffer(bool value) => _blink.BlinkWebGLContextAttributes.$preserveDrawingBuffer_Setter(this, value);
+  void set preserveDrawingBuffer(bool value) => _blink.BlinkWebGLContextAttributes.preserveDrawingBuffer_Setter_boolean(this, value);
 
   @DomName('WebGLContextAttributes.stencil')
   @DocsEditable()
-  bool get stencil => _blink.BlinkWebGLContextAttributes.$stencil_Getter(this);
+  bool get stencil => _blink.BlinkWebGLContextAttributes.stencil_Getter(this);
 
   @DomName('WebGLContextAttributes.stencil')
   @DocsEditable()
-  void set stencil(bool value) => _blink.BlinkWebGLContextAttributes.$stencil_Setter(this, value);
+  void set stencil(bool value) => _blink.BlinkWebGLContextAttributes.stencil_Setter_boolean(this, value);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -631,7 +631,7 @@
 
   @DomName('WebGLContextEvent.statusMessage')
   @DocsEditable()
-  String get statusMessage => _blink.BlinkWebGLContextEvent.$statusMessage_Getter(this);
+  String get statusMessage => _blink.BlinkWebGLContextEvent.statusMessage_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -675,7 +675,7 @@
 
   @DomName('WebGLDebugShaders.getTranslatedShaderSource')
   @DocsEditable()
-  String getTranslatedShaderSource(Shader shader) => _blink.BlinkWebGLDebugShaders.$getTranslatedShaderSource_Callback(this, shader);
+  String getTranslatedShaderSource(Shader shader) => _blink.BlinkWebGLDebugShaders.getTranslatedShaderSource_Callback_WebGLShader(this, shader);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -851,7 +851,7 @@
 
   @DomName('WebGLDrawBuffers.drawBuffersWEBGL')
   @DocsEditable()
-  void drawBuffersWebgl(List<int> buffers) => _blink.BlinkWebGLDrawBuffers.$drawBuffersWEBGL_Callback(this, buffers);
+  void drawBuffersWebgl(List<int> buffers) => _blink.BlinkWebGLDrawBuffers.drawBuffersWEBGL_Callback_SEQ_GLenum_SEQ(this, buffers);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -926,11 +926,11 @@
 
   @DomName('WebGLLoseContext.loseContext')
   @DocsEditable()
-  void loseContext() => _blink.BlinkWebGLLoseContext.$loseContext_Callback(this);
+  void loseContext() => _blink.BlinkWebGLLoseContext.loseContext_Callback(this);
 
   @DomName('WebGLLoseContext.restoreContext')
   @DocsEditable()
-  void restoreContext() => _blink.BlinkWebGLLoseContext.$restoreContext_Callback(this);
+  void restoreContext() => _blink.BlinkWebGLLoseContext.restoreContext_Callback(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1058,19 +1058,19 @@
 
   @DomName('OESVertexArrayObject.bindVertexArrayOES')
   @DocsEditable()
-  void bindVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.$bindVertexArrayOES_Callback(this, arrayObject);
+  void bindVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.bindVertexArrayOES_Callback_WebGLVertexArrayObjectOES(this, arrayObject);
 
   @DomName('OESVertexArrayObject.createVertexArrayOES')
   @DocsEditable()
-  VertexArrayObject createVertexArray() => _blink.BlinkOESVertexArrayObject.$createVertexArrayOES_Callback(this);
+  VertexArrayObject createVertexArray() => _blink.BlinkOESVertexArrayObject.createVertexArrayOES_Callback(this);
 
   @DomName('OESVertexArrayObject.deleteVertexArrayOES')
   @DocsEditable()
-  void deleteVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.$deleteVertexArrayOES_Callback(this, arrayObject);
+  void deleteVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.deleteVertexArrayOES_Callback_WebGLVertexArrayObjectOES(this, arrayObject);
 
   @DomName('OESVertexArrayObject.isVertexArrayOES')
   @DocsEditable()
-  bool isVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.$isVertexArrayOES_Callback(this, arrayObject);
+  bool isVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.isVertexArrayOES_Callback_WebGLVertexArrayObjectOES(this, arrayObject);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2302,75 +2302,75 @@
 
   @DomName('WebGLRenderingContext.drawingBufferHeight')
   @DocsEditable()
-  int get drawingBufferHeight => _blink.BlinkWebGLRenderingContext.$drawingBufferHeight_Getter(this);
+  int get drawingBufferHeight => _blink.BlinkWebGLRenderingContext.drawingBufferHeight_Getter(this);
 
   @DomName('WebGLRenderingContext.drawingBufferWidth')
   @DocsEditable()
-  int get drawingBufferWidth => _blink.BlinkWebGLRenderingContext.$drawingBufferWidth_Getter(this);
+  int get drawingBufferWidth => _blink.BlinkWebGLRenderingContext.drawingBufferWidth_Getter(this);
 
   @DomName('WebGLRenderingContext.activeTexture')
   @DocsEditable()
-  void activeTexture(int texture) => _blink.BlinkWebGLRenderingContext.$activeTexture_Callback(this, texture);
+  void activeTexture(int texture) => _blink.BlinkWebGLRenderingContext.activeTexture_Callback_ul(this, texture);
 
   @DomName('WebGLRenderingContext.attachShader')
   @DocsEditable()
-  void attachShader(Program program, Shader shader) => _blink.BlinkWebGLRenderingContext.$attachShader_Callback(this, program, shader);
+  void attachShader(Program program, Shader shader) => _blink.BlinkWebGLRenderingContext.attachShader_Callback_WebGLProgram_WebGLShader(this, program, shader);
 
   @DomName('WebGLRenderingContext.bindAttribLocation')
   @DocsEditable()
-  void bindAttribLocation(Program program, int index, String name) => _blink.BlinkWebGLRenderingContext.$bindAttribLocation_Callback(this, program, index, name);
+  void bindAttribLocation(Program program, int index, String name) => _blink.BlinkWebGLRenderingContext.bindAttribLocation_Callback_WebGLProgram_ul_DOMString(this, program, index, name);
 
   @DomName('WebGLRenderingContext.bindBuffer')
   @DocsEditable()
-  void bindBuffer(int target, Buffer buffer) => _blink.BlinkWebGLRenderingContext.$bindBuffer_Callback(this, target, buffer);
+  void bindBuffer(int target, Buffer buffer) => _blink.BlinkWebGLRenderingContext.bindBuffer_Callback_ul_WebGLBuffer(this, target, buffer);
 
   @DomName('WebGLRenderingContext.bindFramebuffer')
   @DocsEditable()
-  void bindFramebuffer(int target, Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.$bindFramebuffer_Callback(this, target, framebuffer);
+  void bindFramebuffer(int target, Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.bindFramebuffer_Callback_ul_WebGLFramebuffer(this, target, framebuffer);
 
   @DomName('WebGLRenderingContext.bindRenderbuffer')
   @DocsEditable()
-  void bindRenderbuffer(int target, Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.$bindRenderbuffer_Callback(this, target, renderbuffer);
+  void bindRenderbuffer(int target, Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.bindRenderbuffer_Callback_ul_WebGLRenderbuffer(this, target, renderbuffer);
 
   @DomName('WebGLRenderingContext.bindTexture')
   @DocsEditable()
-  void bindTexture(int target, Texture texture) => _blink.BlinkWebGLRenderingContext.$bindTexture_Callback(this, target, texture);
+  void bindTexture(int target, Texture texture) => _blink.BlinkWebGLRenderingContext.bindTexture_Callback_ul_WebGLTexture(this, target, texture);
 
   @DomName('WebGLRenderingContext.blendColor')
   @DocsEditable()
-  void blendColor(num red, num green, num blue, num alpha) => _blink.BlinkWebGLRenderingContext.$blendColor_Callback(this, red, green, blue, alpha);
+  void blendColor(num red, num green, num blue, num alpha) => _blink.BlinkWebGLRenderingContext.blendColor_Callback_float_float_float_float(this, red, green, blue, alpha);
 
   @DomName('WebGLRenderingContext.blendEquation')
   @DocsEditable()
-  void blendEquation(int mode) => _blink.BlinkWebGLRenderingContext.$blendEquation_Callback(this, mode);
+  void blendEquation(int mode) => _blink.BlinkWebGLRenderingContext.blendEquation_Callback_ul(this, mode);
 
   @DomName('WebGLRenderingContext.blendEquationSeparate')
   @DocsEditable()
-  void blendEquationSeparate(int modeRGB, int modeAlpha) => _blink.BlinkWebGLRenderingContext.$blendEquationSeparate_Callback(this, modeRGB, modeAlpha);
+  void blendEquationSeparate(int modeRGB, int modeAlpha) => _blink.BlinkWebGLRenderingContext.blendEquationSeparate_Callback_ul_ul(this, modeRGB, modeAlpha);
 
   @DomName('WebGLRenderingContext.blendFunc')
   @DocsEditable()
-  void blendFunc(int sfactor, int dfactor) => _blink.BlinkWebGLRenderingContext.$blendFunc_Callback(this, sfactor, dfactor);
+  void blendFunc(int sfactor, int dfactor) => _blink.BlinkWebGLRenderingContext.blendFunc_Callback_ul_ul(this, sfactor, dfactor);
 
   @DomName('WebGLRenderingContext.blendFuncSeparate')
   @DocsEditable()
-  void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) => _blink.BlinkWebGLRenderingContext.$blendFuncSeparate_Callback(this, srcRGB, dstRGB, srcAlpha, dstAlpha);
+  void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) => _blink.BlinkWebGLRenderingContext.blendFuncSeparate_Callback_ul_ul_ul_ul(this, srcRGB, dstRGB, srcAlpha, dstAlpha);
 
   @DomName('WebGLRenderingContext.bufferByteData')
   @DocsEditable()
-  void bufferByteData(int target, ByteBuffer data, int usage) => _blink.BlinkWebGLRenderingContext.$bufferByteData_Callback(this, target, data, usage);
+  void bufferByteData(int target, ByteBuffer data, int usage) => _blink.BlinkWebGLRenderingContext.bufferData_Callback_ul_ArrayBuffer_ul(this, target, data, usage);
 
   void bufferData(int target, data_OR_size, int usage) {
     if ((usage is int || usage == null) && (data_OR_size is TypedData || data_OR_size == null) && (target is int || target == null)) {
-      _blink.BlinkWebGLRenderingContext.$_bufferData_1_Callback(this, target, data_OR_size, usage);
+      _blink.BlinkWebGLRenderingContext.bufferData_Callback_ul_ArrayBufferView_ul(this, target, data_OR_size, usage);
       return;
     }
     if ((usage is int || usage == null) && (data_OR_size is ByteBuffer || data_OR_size == null) && (target is int || target == null)) {
-      _blink.BlinkWebGLRenderingContext.$_bufferData_2_Callback(this, target, data_OR_size, usage);
+      _blink.BlinkWebGLRenderingContext.bufferData_Callback_ul_ArrayBuffer_ul(this, target, data_OR_size, usage);
       return;
     }
     if ((usage is int || usage == null) && (data_OR_size is int || data_OR_size == null) && (target is int || target == null)) {
-      _blink.BlinkWebGLRenderingContext.$_bufferData_3_Callback(this, target, data_OR_size, usage);
+      _blink.BlinkWebGLRenderingContext.bufferData_Callback_ul_ll_ul(this, target, data_OR_size, usage);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2378,19 +2378,19 @@
 
   @DomName('WebGLRenderingContext.bufferDataTyped')
   @DocsEditable()
-  void bufferDataTyped(int target, TypedData data, int usage) => _blink.BlinkWebGLRenderingContext.$bufferDataTyped_Callback(this, target, data, usage);
+  void bufferDataTyped(int target, TypedData data, int usage) => _blink.BlinkWebGLRenderingContext.bufferData_Callback_ul_ArrayBufferView_ul(this, target, data, usage);
 
   @DomName('WebGLRenderingContext.bufferSubByteData')
   @DocsEditable()
-  void bufferSubByteData(int target, int offset, ByteBuffer data) => _blink.BlinkWebGLRenderingContext.$bufferSubByteData_Callback(this, target, offset, data);
+  void bufferSubByteData(int target, int offset, ByteBuffer data) => _blink.BlinkWebGLRenderingContext.bufferSubData_Callback_ul_ll_ArrayBuffer(this, target, offset, data);
 
   void bufferSubData(int target, int offset, data) {
     if ((data is TypedData || data == null) && (offset is int || offset == null) && (target is int || target == null)) {
-      _blink.BlinkWebGLRenderingContext.$_bufferSubData_1_Callback(this, target, offset, data);
+      _blink.BlinkWebGLRenderingContext.bufferSubData_Callback_ul_ll_ArrayBufferView(this, target, offset, data);
       return;
     }
     if ((data is ByteBuffer || data == null) && (offset is int || offset == null) && (target is int || target == null)) {
-      _blink.BlinkWebGLRenderingContext.$_bufferSubData_2_Callback(this, target, offset, data);
+      _blink.BlinkWebGLRenderingContext.bufferSubData_Callback_ul_ll_ArrayBuffer(this, target, offset, data);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2398,375 +2398,375 @@
 
   @DomName('WebGLRenderingContext.bufferSubDataTyped')
   @DocsEditable()
-  void bufferSubDataTyped(int target, int offset, TypedData data) => _blink.BlinkWebGLRenderingContext.$bufferSubDataTyped_Callback(this, target, offset, data);
+  void bufferSubDataTyped(int target, int offset, TypedData data) => _blink.BlinkWebGLRenderingContext.bufferSubData_Callback_ul_ll_ArrayBufferView(this, target, offset, data);
 
   @DomName('WebGLRenderingContext.checkFramebufferStatus')
   @DocsEditable()
-  int checkFramebufferStatus(int target) => _blink.BlinkWebGLRenderingContext.$checkFramebufferStatus_Callback(this, target);
+  int checkFramebufferStatus(int target) => _blink.BlinkWebGLRenderingContext.checkFramebufferStatus_Callback_ul(this, target);
 
   @DomName('WebGLRenderingContext.clear')
   @DocsEditable()
-  void clear(int mask) => _blink.BlinkWebGLRenderingContext.$clear_Callback(this, mask);
+  void clear(int mask) => _blink.BlinkWebGLRenderingContext.clear_Callback_ul(this, mask);
 
   @DomName('WebGLRenderingContext.clearColor')
   @DocsEditable()
-  void clearColor(num red, num green, num blue, num alpha) => _blink.BlinkWebGLRenderingContext.$clearColor_Callback(this, red, green, blue, alpha);
+  void clearColor(num red, num green, num blue, num alpha) => _blink.BlinkWebGLRenderingContext.clearColor_Callback_float_float_float_float(this, red, green, blue, alpha);
 
   @DomName('WebGLRenderingContext.clearDepth')
   @DocsEditable()
-  void clearDepth(num depth) => _blink.BlinkWebGLRenderingContext.$clearDepth_Callback(this, depth);
+  void clearDepth(num depth) => _blink.BlinkWebGLRenderingContext.clearDepth_Callback_float(this, depth);
 
   @DomName('WebGLRenderingContext.clearStencil')
   @DocsEditable()
-  void clearStencil(int s) => _blink.BlinkWebGLRenderingContext.$clearStencil_Callback(this, s);
+  void clearStencil(int s) => _blink.BlinkWebGLRenderingContext.clearStencil_Callback_long(this, s);
 
   @DomName('WebGLRenderingContext.colorMask')
   @DocsEditable()
-  void colorMask(bool red, bool green, bool blue, bool alpha) => _blink.BlinkWebGLRenderingContext.$colorMask_Callback(this, red, green, blue, alpha);
+  void colorMask(bool red, bool green, bool blue, bool alpha) => _blink.BlinkWebGLRenderingContext.colorMask_Callback_boolean_boolean_boolean_boolean(this, red, green, blue, alpha);
 
   @DomName('WebGLRenderingContext.compileShader')
   @DocsEditable()
-  void compileShader(Shader shader) => _blink.BlinkWebGLRenderingContext.$compileShader_Callback(this, shader);
+  void compileShader(Shader shader) => _blink.BlinkWebGLRenderingContext.compileShader_Callback_WebGLShader(this, shader);
 
   @DomName('WebGLRenderingContext.compressedTexImage2D')
   @DocsEditable()
-  void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, TypedData data) => _blink.BlinkWebGLRenderingContext.$compressedTexImage2D_Callback(this, target, level, internalformat, width, height, border, data);
+  void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, TypedData data) => _blink.BlinkWebGLRenderingContext.compressedTexImage2D_Callback_ul_long_ul_long_long_long_ArrayBufferView(this, target, level, internalformat, width, height, border, data);
 
   @DomName('WebGLRenderingContext.compressedTexSubImage2D')
   @DocsEditable()
-  void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, TypedData data) => _blink.BlinkWebGLRenderingContext.$compressedTexSubImage2D_Callback(this, target, level, xoffset, yoffset, width, height, format, data);
+  void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, TypedData data) => _blink.BlinkWebGLRenderingContext.compressedTexSubImage2D_Callback_ul_long_long_long_long_long_ul_ArrayBufferView(this, target, level, xoffset, yoffset, width, height, format, data);
 
   @DomName('WebGLRenderingContext.copyTexImage2D')
   @DocsEditable()
-  void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border) => _blink.BlinkWebGLRenderingContext.$copyTexImage2D_Callback(this, target, level, internalformat, x, y, width, height, border);
+  void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border) => _blink.BlinkWebGLRenderingContext.copyTexImage2D_Callback_ul_long_ul_long_long_long_long_long(this, target, level, internalformat, x, y, width, height, border);
 
   @DomName('WebGLRenderingContext.copyTexSubImage2D')
   @DocsEditable()
-  void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.$copyTexSubImage2D_Callback(this, target, level, xoffset, yoffset, x, y, width, height);
+  void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.copyTexSubImage2D_Callback_ul_long_long_long_long_long_long_long(this, target, level, xoffset, yoffset, x, y, width, height);
 
   @DomName('WebGLRenderingContext.createBuffer')
   @DocsEditable()
-  Buffer createBuffer() => _blink.BlinkWebGLRenderingContext.$createBuffer_Callback(this);
+  Buffer createBuffer() => _blink.BlinkWebGLRenderingContext.createBuffer_Callback(this);
 
   @DomName('WebGLRenderingContext.createFramebuffer')
   @DocsEditable()
-  Framebuffer createFramebuffer() => _blink.BlinkWebGLRenderingContext.$createFramebuffer_Callback(this);
+  Framebuffer createFramebuffer() => _blink.BlinkWebGLRenderingContext.createFramebuffer_Callback(this);
 
   @DomName('WebGLRenderingContext.createProgram')
   @DocsEditable()
-  Program createProgram() => _blink.BlinkWebGLRenderingContext.$createProgram_Callback(this);
+  Program createProgram() => _blink.BlinkWebGLRenderingContext.createProgram_Callback(this);
 
   @DomName('WebGLRenderingContext.createRenderbuffer')
   @DocsEditable()
-  Renderbuffer createRenderbuffer() => _blink.BlinkWebGLRenderingContext.$createRenderbuffer_Callback(this);
+  Renderbuffer createRenderbuffer() => _blink.BlinkWebGLRenderingContext.createRenderbuffer_Callback(this);
 
   @DomName('WebGLRenderingContext.createShader')
   @DocsEditable()
-  Shader createShader(int type) => _blink.BlinkWebGLRenderingContext.$createShader_Callback(this, type);
+  Shader createShader(int type) => _blink.BlinkWebGLRenderingContext.createShader_Callback_ul(this, type);
 
   @DomName('WebGLRenderingContext.createTexture')
   @DocsEditable()
-  Texture createTexture() => _blink.BlinkWebGLRenderingContext.$createTexture_Callback(this);
+  Texture createTexture() => _blink.BlinkWebGLRenderingContext.createTexture_Callback(this);
 
   @DomName('WebGLRenderingContext.cullFace')
   @DocsEditable()
-  void cullFace(int mode) => _blink.BlinkWebGLRenderingContext.$cullFace_Callback(this, mode);
+  void cullFace(int mode) => _blink.BlinkWebGLRenderingContext.cullFace_Callback_ul(this, mode);
 
   @DomName('WebGLRenderingContext.deleteBuffer')
   @DocsEditable()
-  void deleteBuffer(Buffer buffer) => _blink.BlinkWebGLRenderingContext.$deleteBuffer_Callback(this, buffer);
+  void deleteBuffer(Buffer buffer) => _blink.BlinkWebGLRenderingContext.deleteBuffer_Callback_WebGLBuffer(this, buffer);
 
   @DomName('WebGLRenderingContext.deleteFramebuffer')
   @DocsEditable()
-  void deleteFramebuffer(Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.$deleteFramebuffer_Callback(this, framebuffer);
+  void deleteFramebuffer(Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.deleteFramebuffer_Callback_WebGLFramebuffer(this, framebuffer);
 
   @DomName('WebGLRenderingContext.deleteProgram')
   @DocsEditable()
-  void deleteProgram(Program program) => _blink.BlinkWebGLRenderingContext.$deleteProgram_Callback(this, program);
+  void deleteProgram(Program program) => _blink.BlinkWebGLRenderingContext.deleteProgram_Callback_WebGLProgram(this, program);
 
   @DomName('WebGLRenderingContext.deleteRenderbuffer')
   @DocsEditable()
-  void deleteRenderbuffer(Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.$deleteRenderbuffer_Callback(this, renderbuffer);
+  void deleteRenderbuffer(Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.deleteRenderbuffer_Callback_WebGLRenderbuffer(this, renderbuffer);
 
   @DomName('WebGLRenderingContext.deleteShader')
   @DocsEditable()
-  void deleteShader(Shader shader) => _blink.BlinkWebGLRenderingContext.$deleteShader_Callback(this, shader);
+  void deleteShader(Shader shader) => _blink.BlinkWebGLRenderingContext.deleteShader_Callback_WebGLShader(this, shader);
 
   @DomName('WebGLRenderingContext.deleteTexture')
   @DocsEditable()
-  void deleteTexture(Texture texture) => _blink.BlinkWebGLRenderingContext.$deleteTexture_Callback(this, texture);
+  void deleteTexture(Texture texture) => _blink.BlinkWebGLRenderingContext.deleteTexture_Callback_WebGLTexture(this, texture);
 
   @DomName('WebGLRenderingContext.depthFunc')
   @DocsEditable()
-  void depthFunc(int func) => _blink.BlinkWebGLRenderingContext.$depthFunc_Callback(this, func);
+  void depthFunc(int func) => _blink.BlinkWebGLRenderingContext.depthFunc_Callback_ul(this, func);
 
   @DomName('WebGLRenderingContext.depthMask')
   @DocsEditable()
-  void depthMask(bool flag) => _blink.BlinkWebGLRenderingContext.$depthMask_Callback(this, flag);
+  void depthMask(bool flag) => _blink.BlinkWebGLRenderingContext.depthMask_Callback_boolean(this, flag);
 
   @DomName('WebGLRenderingContext.depthRange')
   @DocsEditable()
-  void depthRange(num zNear, num zFar) => _blink.BlinkWebGLRenderingContext.$depthRange_Callback(this, zNear, zFar);
+  void depthRange(num zNear, num zFar) => _blink.BlinkWebGLRenderingContext.depthRange_Callback_float_float(this, zNear, zFar);
 
   @DomName('WebGLRenderingContext.detachShader')
   @DocsEditable()
-  void detachShader(Program program, Shader shader) => _blink.BlinkWebGLRenderingContext.$detachShader_Callback(this, program, shader);
+  void detachShader(Program program, Shader shader) => _blink.BlinkWebGLRenderingContext.detachShader_Callback_WebGLProgram_WebGLShader(this, program, shader);
 
   @DomName('WebGLRenderingContext.disable')
   @DocsEditable()
-  void disable(int cap) => _blink.BlinkWebGLRenderingContext.$disable_Callback(this, cap);
+  void disable(int cap) => _blink.BlinkWebGLRenderingContext.disable_Callback_ul(this, cap);
 
   @DomName('WebGLRenderingContext.disableVertexAttribArray')
   @DocsEditable()
-  void disableVertexAttribArray(int index) => _blink.BlinkWebGLRenderingContext.$disableVertexAttribArray_Callback(this, index);
+  void disableVertexAttribArray(int index) => _blink.BlinkWebGLRenderingContext.disableVertexAttribArray_Callback_ul(this, index);
 
   @DomName('WebGLRenderingContext.drawArrays')
   @DocsEditable()
-  void drawArrays(int mode, int first, int count) => _blink.BlinkWebGLRenderingContext.$drawArrays_Callback(this, mode, first, count);
+  void drawArrays(int mode, int first, int count) => _blink.BlinkWebGLRenderingContext.drawArrays_Callback_ul_long_long(this, mode, first, count);
 
   @DomName('WebGLRenderingContext.drawElements')
   @DocsEditable()
-  void drawElements(int mode, int count, int type, int offset) => _blink.BlinkWebGLRenderingContext.$drawElements_Callback(this, mode, count, type, offset);
+  void drawElements(int mode, int count, int type, int offset) => _blink.BlinkWebGLRenderingContext.drawElements_Callback_ul_long_ul_ll(this, mode, count, type, offset);
 
   @DomName('WebGLRenderingContext.enable')
   @DocsEditable()
-  void enable(int cap) => _blink.BlinkWebGLRenderingContext.$enable_Callback(this, cap);
+  void enable(int cap) => _blink.BlinkWebGLRenderingContext.enable_Callback_ul(this, cap);
 
   @DomName('WebGLRenderingContext.enableVertexAttribArray')
   @DocsEditable()
-  void enableVertexAttribArray(int index) => _blink.BlinkWebGLRenderingContext.$enableVertexAttribArray_Callback(this, index);
+  void enableVertexAttribArray(int index) => _blink.BlinkWebGLRenderingContext.enableVertexAttribArray_Callback_ul(this, index);
 
   @DomName('WebGLRenderingContext.finish')
   @DocsEditable()
-  void finish() => _blink.BlinkWebGLRenderingContext.$finish_Callback(this);
+  void finish() => _blink.BlinkWebGLRenderingContext.finish_Callback(this);
 
   @DomName('WebGLRenderingContext.flush')
   @DocsEditable()
-  void flush() => _blink.BlinkWebGLRenderingContext.$flush_Callback(this);
+  void flush() => _blink.BlinkWebGLRenderingContext.flush_Callback(this);
 
   @DomName('WebGLRenderingContext.framebufferRenderbuffer')
   @DocsEditable()
-  void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.$framebufferRenderbuffer_Callback(this, target, attachment, renderbuffertarget, renderbuffer);
+  void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.framebufferRenderbuffer_Callback_ul_ul_ul_WebGLRenderbuffer(this, target, attachment, renderbuffertarget, renderbuffer);
 
   @DomName('WebGLRenderingContext.framebufferTexture2D')
   @DocsEditable()
-  void framebufferTexture2D(int target, int attachment, int textarget, Texture texture, int level) => _blink.BlinkWebGLRenderingContext.$framebufferTexture2D_Callback(this, target, attachment, textarget, texture, level);
+  void framebufferTexture2D(int target, int attachment, int textarget, Texture texture, int level) => _blink.BlinkWebGLRenderingContext.framebufferTexture2D_Callback_ul_ul_ul_WebGLTexture_long(this, target, attachment, textarget, texture, level);
 
   @DomName('WebGLRenderingContext.frontFace')
   @DocsEditable()
-  void frontFace(int mode) => _blink.BlinkWebGLRenderingContext.$frontFace_Callback(this, mode);
+  void frontFace(int mode) => _blink.BlinkWebGLRenderingContext.frontFace_Callback_ul(this, mode);
 
   @DomName('WebGLRenderingContext.generateMipmap')
   @DocsEditable()
-  void generateMipmap(int target) => _blink.BlinkWebGLRenderingContext.$generateMipmap_Callback(this, target);
+  void generateMipmap(int target) => _blink.BlinkWebGLRenderingContext.generateMipmap_Callback_ul(this, target);
 
   @DomName('WebGLRenderingContext.getActiveAttrib')
   @DocsEditable()
-  ActiveInfo getActiveAttrib(Program program, int index) => _blink.BlinkWebGLRenderingContext.$getActiveAttrib_Callback(this, program, index);
+  ActiveInfo getActiveAttrib(Program program, int index) => _blink.BlinkWebGLRenderingContext.getActiveAttrib_Callback_WebGLProgram_ul(this, program, index);
 
   @DomName('WebGLRenderingContext.getActiveUniform')
   @DocsEditable()
-  ActiveInfo getActiveUniform(Program program, int index) => _blink.BlinkWebGLRenderingContext.$getActiveUniform_Callback(this, program, index);
+  ActiveInfo getActiveUniform(Program program, int index) => _blink.BlinkWebGLRenderingContext.getActiveUniform_Callback_WebGLProgram_ul(this, program, index);
 
   @DomName('WebGLRenderingContext.getAttachedShaders')
   @DocsEditable()
-  void getAttachedShaders(Program program) => _blink.BlinkWebGLRenderingContext.$getAttachedShaders_Callback(this, program);
+  void getAttachedShaders(Program program) => _blink.BlinkWebGLRenderingContext.getAttachedShaders_Callback_WebGLProgram(this, program);
 
   @DomName('WebGLRenderingContext.getAttribLocation')
   @DocsEditable()
-  int getAttribLocation(Program program, String name) => _blink.BlinkWebGLRenderingContext.$getAttribLocation_Callback(this, program, name);
+  int getAttribLocation(Program program, String name) => _blink.BlinkWebGLRenderingContext.getAttribLocation_Callback_WebGLProgram_DOMString(this, program, name);
 
   @DomName('WebGLRenderingContext.getBufferParameter')
   @DocsEditable()
-  Object getBufferParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.$getBufferParameter_Callback(this, target, pname);
+  Object getBufferParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.getBufferParameter_Callback_ul_ul(this, target, pname);
 
   @DomName('WebGLRenderingContext.getContextAttributes')
   @DocsEditable()
-  ContextAttributes getContextAttributes() => _blink.BlinkWebGLRenderingContext.$getContextAttributes_Callback(this);
+  ContextAttributes getContextAttributes() => _blink.BlinkWebGLRenderingContext.getContextAttributes_Callback(this);
 
   @DomName('WebGLRenderingContext.getError')
   @DocsEditable()
-  int getError() => _blink.BlinkWebGLRenderingContext.$getError_Callback(this);
+  int getError() => _blink.BlinkWebGLRenderingContext.getError_Callback(this);
 
   @DomName('WebGLRenderingContext.getExtension')
   @DocsEditable()
-  Object getExtension(String name) => _blink.BlinkWebGLRenderingContext.$getExtension_Callback(this, name);
+  Object getExtension(String name) => _blink.BlinkWebGLRenderingContext.getExtension_Callback_DOMString(this, name);
 
   @DomName('WebGLRenderingContext.getFramebufferAttachmentParameter')
   @DocsEditable()
-  Object getFramebufferAttachmentParameter(int target, int attachment, int pname) => _blink.BlinkWebGLRenderingContext.$getFramebufferAttachmentParameter_Callback(this, target, attachment, pname);
+  Object getFramebufferAttachmentParameter(int target, int attachment, int pname) => _blink.BlinkWebGLRenderingContext.getFramebufferAttachmentParameter_Callback_ul_ul_ul(this, target, attachment, pname);
 
   @DomName('WebGLRenderingContext.getParameter')
   @DocsEditable()
-  Object getParameter(int pname) => _blink.BlinkWebGLRenderingContext.$getParameter_Callback(this, pname);
+  Object getParameter(int pname) => _blink.BlinkWebGLRenderingContext.getParameter_Callback_ul(this, pname);
 
   @DomName('WebGLRenderingContext.getProgramInfoLog')
   @DocsEditable()
-  String getProgramInfoLog(Program program) => _blink.BlinkWebGLRenderingContext.$getProgramInfoLog_Callback(this, program);
+  String getProgramInfoLog(Program program) => _blink.BlinkWebGLRenderingContext.getProgramInfoLog_Callback_WebGLProgram(this, program);
 
   @DomName('WebGLRenderingContext.getProgramParameter')
   @DocsEditable()
-  Object getProgramParameter(Program program, int pname) => _blink.BlinkWebGLRenderingContext.$getProgramParameter_Callback(this, program, pname);
+  Object getProgramParameter(Program program, int pname) => _blink.BlinkWebGLRenderingContext.getProgramParameter_Callback_WebGLProgram_ul(this, program, pname);
 
   @DomName('WebGLRenderingContext.getRenderbufferParameter')
   @DocsEditable()
-  Object getRenderbufferParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.$getRenderbufferParameter_Callback(this, target, pname);
+  Object getRenderbufferParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.getRenderbufferParameter_Callback_ul_ul(this, target, pname);
 
   @DomName('WebGLRenderingContext.getShaderInfoLog')
   @DocsEditable()
-  String getShaderInfoLog(Shader shader) => _blink.BlinkWebGLRenderingContext.$getShaderInfoLog_Callback(this, shader);
+  String getShaderInfoLog(Shader shader) => _blink.BlinkWebGLRenderingContext.getShaderInfoLog_Callback_WebGLShader(this, shader);
 
   @DomName('WebGLRenderingContext.getShaderParameter')
   @DocsEditable()
-  Object getShaderParameter(Shader shader, int pname) => _blink.BlinkWebGLRenderingContext.$getShaderParameter_Callback(this, shader, pname);
+  Object getShaderParameter(Shader shader, int pname) => _blink.BlinkWebGLRenderingContext.getShaderParameter_Callback_WebGLShader_ul(this, shader, pname);
 
   @DomName('WebGLRenderingContext.getShaderPrecisionFormat')
   @DocsEditable()
-  ShaderPrecisionFormat getShaderPrecisionFormat(int shadertype, int precisiontype) => _blink.BlinkWebGLRenderingContext.$getShaderPrecisionFormat_Callback(this, shadertype, precisiontype);
+  ShaderPrecisionFormat getShaderPrecisionFormat(int shadertype, int precisiontype) => _blink.BlinkWebGLRenderingContext.getShaderPrecisionFormat_Callback_ul_ul(this, shadertype, precisiontype);
 
   @DomName('WebGLRenderingContext.getShaderSource')
   @DocsEditable()
-  String getShaderSource(Shader shader) => _blink.BlinkWebGLRenderingContext.$getShaderSource_Callback(this, shader);
+  String getShaderSource(Shader shader) => _blink.BlinkWebGLRenderingContext.getShaderSource_Callback_WebGLShader(this, shader);
 
   @DomName('WebGLRenderingContext.getSupportedExtensions')
   @DocsEditable()
-  List<String> getSupportedExtensions() => _blink.BlinkWebGLRenderingContext.$getSupportedExtensions_Callback(this);
+  List<String> getSupportedExtensions() => _blink.BlinkWebGLRenderingContext.getSupportedExtensions_Callback(this);
 
   @DomName('WebGLRenderingContext.getTexParameter')
   @DocsEditable()
-  Object getTexParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.$getTexParameter_Callback(this, target, pname);
+  Object getTexParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.getTexParameter_Callback_ul_ul(this, target, pname);
 
   @DomName('WebGLRenderingContext.getUniform')
   @DocsEditable()
-  Object getUniform(Program program, UniformLocation location) => _blink.BlinkWebGLRenderingContext.$getUniform_Callback(this, program, location);
+  Object getUniform(Program program, UniformLocation location) => _blink.BlinkWebGLRenderingContext.getUniform_Callback_WebGLProgram_WebGLUniformLocation(this, program, location);
 
   @DomName('WebGLRenderingContext.getUniformLocation')
   @DocsEditable()
-  UniformLocation getUniformLocation(Program program, String name) => _blink.BlinkWebGLRenderingContext.$getUniformLocation_Callback(this, program, name);
+  UniformLocation getUniformLocation(Program program, String name) => _blink.BlinkWebGLRenderingContext.getUniformLocation_Callback_WebGLProgram_DOMString(this, program, name);
 
   @DomName('WebGLRenderingContext.getVertexAttrib')
   @DocsEditable()
-  Object getVertexAttrib(int index, int pname) => _blink.BlinkWebGLRenderingContext.$getVertexAttrib_Callback(this, index, pname);
+  Object getVertexAttrib(int index, int pname) => _blink.BlinkWebGLRenderingContext.getVertexAttrib_Callback_ul_ul(this, index, pname);
 
   @DomName('WebGLRenderingContext.getVertexAttribOffset')
   @DocsEditable()
-  int getVertexAttribOffset(int index, int pname) => _blink.BlinkWebGLRenderingContext.$getVertexAttribOffset_Callback(this, index, pname);
+  int getVertexAttribOffset(int index, int pname) => _blink.BlinkWebGLRenderingContext.getVertexAttribOffset_Callback_ul_ul(this, index, pname);
 
   @DomName('WebGLRenderingContext.hint')
   @DocsEditable()
-  void hint(int target, int mode) => _blink.BlinkWebGLRenderingContext.$hint_Callback(this, target, mode);
+  void hint(int target, int mode) => _blink.BlinkWebGLRenderingContext.hint_Callback_ul_ul(this, target, mode);
 
   @DomName('WebGLRenderingContext.isBuffer')
   @DocsEditable()
-  bool isBuffer(Buffer buffer) => _blink.BlinkWebGLRenderingContext.$isBuffer_Callback(this, buffer);
+  bool isBuffer(Buffer buffer) => _blink.BlinkWebGLRenderingContext.isBuffer_Callback_WebGLBuffer(this, buffer);
 
   @DomName('WebGLRenderingContext.isContextLost')
   @DocsEditable()
-  bool isContextLost() => _blink.BlinkWebGLRenderingContext.$isContextLost_Callback(this);
+  bool isContextLost() => _blink.BlinkWebGLRenderingContext.isContextLost_Callback(this);
 
   @DomName('WebGLRenderingContext.isEnabled')
   @DocsEditable()
-  bool isEnabled(int cap) => _blink.BlinkWebGLRenderingContext.$isEnabled_Callback(this, cap);
+  bool isEnabled(int cap) => _blink.BlinkWebGLRenderingContext.isEnabled_Callback_ul(this, cap);
 
   @DomName('WebGLRenderingContext.isFramebuffer')
   @DocsEditable()
-  bool isFramebuffer(Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.$isFramebuffer_Callback(this, framebuffer);
+  bool isFramebuffer(Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.isFramebuffer_Callback_WebGLFramebuffer(this, framebuffer);
 
   @DomName('WebGLRenderingContext.isProgram')
   @DocsEditable()
-  bool isProgram(Program program) => _blink.BlinkWebGLRenderingContext.$isProgram_Callback(this, program);
+  bool isProgram(Program program) => _blink.BlinkWebGLRenderingContext.isProgram_Callback_WebGLProgram(this, program);
 
   @DomName('WebGLRenderingContext.isRenderbuffer')
   @DocsEditable()
-  bool isRenderbuffer(Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.$isRenderbuffer_Callback(this, renderbuffer);
+  bool isRenderbuffer(Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.isRenderbuffer_Callback_WebGLRenderbuffer(this, renderbuffer);
 
   @DomName('WebGLRenderingContext.isShader')
   @DocsEditable()
-  bool isShader(Shader shader) => _blink.BlinkWebGLRenderingContext.$isShader_Callback(this, shader);
+  bool isShader(Shader shader) => _blink.BlinkWebGLRenderingContext.isShader_Callback_WebGLShader(this, shader);
 
   @DomName('WebGLRenderingContext.isTexture')
   @DocsEditable()
-  bool isTexture(Texture texture) => _blink.BlinkWebGLRenderingContext.$isTexture_Callback(this, texture);
+  bool isTexture(Texture texture) => _blink.BlinkWebGLRenderingContext.isTexture_Callback_WebGLTexture(this, texture);
 
   @DomName('WebGLRenderingContext.lineWidth')
   @DocsEditable()
-  void lineWidth(num width) => _blink.BlinkWebGLRenderingContext.$lineWidth_Callback(this, width);
+  void lineWidth(num width) => _blink.BlinkWebGLRenderingContext.lineWidth_Callback_float(this, width);
 
   @DomName('WebGLRenderingContext.linkProgram')
   @DocsEditable()
-  void linkProgram(Program program) => _blink.BlinkWebGLRenderingContext.$linkProgram_Callback(this, program);
+  void linkProgram(Program program) => _blink.BlinkWebGLRenderingContext.linkProgram_Callback_WebGLProgram(this, program);
 
   @DomName('WebGLRenderingContext.pixelStorei')
   @DocsEditable()
-  void pixelStorei(int pname, int param) => _blink.BlinkWebGLRenderingContext.$pixelStorei_Callback(this, pname, param);
+  void pixelStorei(int pname, int param) => _blink.BlinkWebGLRenderingContext.pixelStorei_Callback_ul_long(this, pname, param);
 
   @DomName('WebGLRenderingContext.polygonOffset')
   @DocsEditable()
-  void polygonOffset(num factor, num units) => _blink.BlinkWebGLRenderingContext.$polygonOffset_Callback(this, factor, units);
+  void polygonOffset(num factor, num units) => _blink.BlinkWebGLRenderingContext.polygonOffset_Callback_float_float(this, factor, units);
 
   @DomName('WebGLRenderingContext.readPixels')
   @DocsEditable()
-  void readPixels(int x, int y, int width, int height, int format, int type, TypedData pixels) => _blink.BlinkWebGLRenderingContext.$readPixels_Callback(this, x, y, width, height, format, type, pixels);
+  void readPixels(int x, int y, int width, int height, int format, int type, TypedData pixels) => _blink.BlinkWebGLRenderingContext.readPixels_Callback_long_long_long_long_ul_ul_ArrayBufferView(this, x, y, width, height, format, type, pixels);
 
   @DomName('WebGLRenderingContext.renderbufferStorage')
   @DocsEditable()
-  void renderbufferStorage(int target, int internalformat, int width, int height) => _blink.BlinkWebGLRenderingContext.$renderbufferStorage_Callback(this, target, internalformat, width, height);
+  void renderbufferStorage(int target, int internalformat, int width, int height) => _blink.BlinkWebGLRenderingContext.renderbufferStorage_Callback_ul_ul_long_long(this, target, internalformat, width, height);
 
   @DomName('WebGLRenderingContext.sampleCoverage')
   @DocsEditable()
-  void sampleCoverage(num value, bool invert) => _blink.BlinkWebGLRenderingContext.$sampleCoverage_Callback(this, value, invert);
+  void sampleCoverage(num value, bool invert) => _blink.BlinkWebGLRenderingContext.sampleCoverage_Callback_float_boolean(this, value, invert);
 
   @DomName('WebGLRenderingContext.scissor')
   @DocsEditable()
-  void scissor(int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.$scissor_Callback(this, x, y, width, height);
+  void scissor(int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.scissor_Callback_long_long_long_long(this, x, y, width, height);
 
   @DomName('WebGLRenderingContext.shaderSource')
   @DocsEditable()
-  void shaderSource(Shader shader, String string) => _blink.BlinkWebGLRenderingContext.$shaderSource_Callback(this, shader, string);
+  void shaderSource(Shader shader, String string) => _blink.BlinkWebGLRenderingContext.shaderSource_Callback_WebGLShader_DOMString(this, shader, string);
 
   @DomName('WebGLRenderingContext.stencilFunc')
   @DocsEditable()
-  void stencilFunc(int func, int ref, int mask) => _blink.BlinkWebGLRenderingContext.$stencilFunc_Callback(this, func, ref, mask);
+  void stencilFunc(int func, int ref, int mask) => _blink.BlinkWebGLRenderingContext.stencilFunc_Callback_ul_long_ul(this, func, ref, mask);
 
   @DomName('WebGLRenderingContext.stencilFuncSeparate')
   @DocsEditable()
-  void stencilFuncSeparate(int face, int func, int ref, int mask) => _blink.BlinkWebGLRenderingContext.$stencilFuncSeparate_Callback(this, face, func, ref, mask);
+  void stencilFuncSeparate(int face, int func, int ref, int mask) => _blink.BlinkWebGLRenderingContext.stencilFuncSeparate_Callback_ul_ul_long_ul(this, face, func, ref, mask);
 
   @DomName('WebGLRenderingContext.stencilMask')
   @DocsEditable()
-  void stencilMask(int mask) => _blink.BlinkWebGLRenderingContext.$stencilMask_Callback(this, mask);
+  void stencilMask(int mask) => _blink.BlinkWebGLRenderingContext.stencilMask_Callback_ul(this, mask);
 
   @DomName('WebGLRenderingContext.stencilMaskSeparate')
   @DocsEditable()
-  void stencilMaskSeparate(int face, int mask) => _blink.BlinkWebGLRenderingContext.$stencilMaskSeparate_Callback(this, face, mask);
+  void stencilMaskSeparate(int face, int mask) => _blink.BlinkWebGLRenderingContext.stencilMaskSeparate_Callback_ul_ul(this, face, mask);
 
   @DomName('WebGLRenderingContext.stencilOp')
   @DocsEditable()
-  void stencilOp(int fail, int zfail, int zpass) => _blink.BlinkWebGLRenderingContext.$stencilOp_Callback(this, fail, zfail, zpass);
+  void stencilOp(int fail, int zfail, int zpass) => _blink.BlinkWebGLRenderingContext.stencilOp_Callback_ul_ul_ul(this, fail, zfail, zpass);
 
   @DomName('WebGLRenderingContext.stencilOpSeparate')
   @DocsEditable()
-  void stencilOpSeparate(int face, int fail, int zfail, int zpass) => _blink.BlinkWebGLRenderingContext.$stencilOpSeparate_Callback(this, face, fail, zfail, zpass);
+  void stencilOpSeparate(int face, int fail, int zfail, int zpass) => _blink.BlinkWebGLRenderingContext.stencilOpSeparate_Callback_ul_ul_ul_ul(this, face, fail, zfail, zpass);
 
   void texImage2D(int target, int level, int internalformat, int format_OR_width, int height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [int format, int type, TypedData pixels]) {
     if ((pixels is TypedData || pixels == null) && (type is int || type == null) && (format is int || format == null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is int || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && (height_OR_type is int || height_OR_type == null) && (format_OR_width is int || format_OR_width == null) && (internalformat is int || internalformat == null) && (level is int || level == null) && (target is int || target == null)) {
-      _blink.BlinkWebGLRenderingContext.$_texImage2D_1_Callback(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels);
+      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_long_long_long_ul_ul_ArrayBufferView(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels);
       return;
     }
     if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && (height_OR_type is int || height_OR_type == null) && (format_OR_width is int || format_OR_width == null) && (internalformat is int || internalformat == null) && (level is int || level == null) && (target is int || target == null) && format == null && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.$_texImage2D_2_Callback(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_ImageData(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
     if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && (height_OR_type is int || height_OR_type == null) && (format_OR_width is int || format_OR_width == null) && (internalformat is int || internalformat == null) && (level is int || level == null) && (target is int || target == null) && format == null && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.$_texImage2D_3_Callback(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_HTMLImageElement(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
     if ((border_OR_canvas_OR_image_OR_pixels_OR_video is CanvasElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && (height_OR_type is int || height_OR_type == null) && (format_OR_width is int || format_OR_width == null) && (internalformat is int || internalformat == null) && (level is int || level == null) && (target is int || target == null) && format == null && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.$_texImage2D_4_Callback(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_HTMLCanvasElement(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
     if ((border_OR_canvas_OR_image_OR_pixels_OR_video is VideoElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && (height_OR_type is int || height_OR_type == null) && (format_OR_width is int || format_OR_width == null) && (internalformat is int || internalformat == null) && (level is int || level == null) && (target is int || target == null) && format == null && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.$_texImage2D_5_Callback(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_HTMLVideoElement(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2774,47 +2774,47 @@
 
   @DomName('WebGLRenderingContext.texImage2DCanvas')
   @DocsEditable()
-  void texImage2DCanvas(int target, int level, int internalformat, int format, int type, CanvasElement canvas) => _blink.BlinkWebGLRenderingContext.$texImage2DCanvas_Callback(this, target, level, internalformat, format, type, canvas);
+  void texImage2DCanvas(int target, int level, int internalformat, int format, int type, CanvasElement canvas) => _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_HTMLCanvasElement(this, target, level, internalformat, format, type, canvas);
 
   @DomName('WebGLRenderingContext.texImage2DImage')
   @DocsEditable()
-  void texImage2DImage(int target, int level, int internalformat, int format, int type, ImageElement image) => _blink.BlinkWebGLRenderingContext.$texImage2DImage_Callback(this, target, level, internalformat, format, type, image);
+  void texImage2DImage(int target, int level, int internalformat, int format, int type, ImageElement image) => _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_HTMLImageElement(this, target, level, internalformat, format, type, image);
 
   @DomName('WebGLRenderingContext.texImage2DImageData')
   @DocsEditable()
-  void texImage2DImageData(int target, int level, int internalformat, int format, int type, ImageData pixels) => _blink.BlinkWebGLRenderingContext.$texImage2DImageData_Callback(this, target, level, internalformat, format, type, pixels);
+  void texImage2DImageData(int target, int level, int internalformat, int format, int type, ImageData pixels) => _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_ImageData(this, target, level, internalformat, format, type, pixels);
 
   @DomName('WebGLRenderingContext.texImage2DVideo')
   @DocsEditable()
-  void texImage2DVideo(int target, int level, int internalformat, int format, int type, VideoElement video) => _blink.BlinkWebGLRenderingContext.$texImage2DVideo_Callback(this, target, level, internalformat, format, type, video);
+  void texImage2DVideo(int target, int level, int internalformat, int format, int type, VideoElement video) => _blink.BlinkWebGLRenderingContext.texImage2D_Callback_ul_long_ul_ul_ul_HTMLVideoElement(this, target, level, internalformat, format, type, video);
 
   @DomName('WebGLRenderingContext.texParameterf')
   @DocsEditable()
-  void texParameterf(int target, int pname, num param) => _blink.BlinkWebGLRenderingContext.$texParameterf_Callback(this, target, pname, param);
+  void texParameterf(int target, int pname, num param) => _blink.BlinkWebGLRenderingContext.texParameterf_Callback_ul_ul_float(this, target, pname, param);
 
   @DomName('WebGLRenderingContext.texParameteri')
   @DocsEditable()
-  void texParameteri(int target, int pname, int param) => _blink.BlinkWebGLRenderingContext.$texParameteri_Callback(this, target, pname, param);
+  void texParameteri(int target, int pname, int param) => _blink.BlinkWebGLRenderingContext.texParameteri_Callback_ul_ul_long(this, target, pname, param);
 
   void texSubImage2D(int target, int level, int xoffset, int yoffset, int format_OR_width, int height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [int type, TypedData pixels]) {
     if ((pixels is TypedData || pixels == null) && (type is int || type == null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is int || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && (height_OR_type is int || height_OR_type == null) && (format_OR_width is int || format_OR_width == null) && (yoffset is int || yoffset == null) && (xoffset is int || xoffset == null) && (level is int || level == null) && (target is int || target == null)) {
-      _blink.BlinkWebGLRenderingContext.$_texSubImage2D_1_Callback(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels);
+      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_long_long_ul_ul_ArrayBufferView(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels);
       return;
     }
     if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && (height_OR_type is int || height_OR_type == null) && (format_OR_width is int || format_OR_width == null) && (yoffset is int || yoffset == null) && (xoffset is int || xoffset == null) && (level is int || level == null) && (target is int || target == null) && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.$_texSubImage2D_2_Callback(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_ImageData(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
     if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && (height_OR_type is int || height_OR_type == null) && (format_OR_width is int || format_OR_width == null) && (yoffset is int || yoffset == null) && (xoffset is int || xoffset == null) && (level is int || level == null) && (target is int || target == null) && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.$_texSubImage2D_3_Callback(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLImageElement(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
     if ((canvas_OR_format_OR_image_OR_pixels_OR_video is CanvasElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && (height_OR_type is int || height_OR_type == null) && (format_OR_width is int || format_OR_width == null) && (yoffset is int || yoffset == null) && (xoffset is int || xoffset == null) && (level is int || level == null) && (target is int || target == null) && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.$_texSubImage2D_4_Callback(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLCanvasElement(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
     if ((canvas_OR_format_OR_image_OR_pixels_OR_video is VideoElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && (height_OR_type is int || height_OR_type == null) && (format_OR_width is int || format_OR_width == null) && (yoffset is int || yoffset == null) && (xoffset is int || xoffset == null) && (level is int || level == null) && (target is int || target == null) && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.$_texSubImage2D_5_Callback(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLVideoElement(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2822,143 +2822,143 @@
 
   @DomName('WebGLRenderingContext.texSubImage2DCanvas')
   @DocsEditable()
-  void texSubImage2DCanvas(int target, int level, int xoffset, int yoffset, int format, int type, CanvasElement canvas) => _blink.BlinkWebGLRenderingContext.$texSubImage2DCanvas_Callback(this, target, level, xoffset, yoffset, format, type, canvas);
+  void texSubImage2DCanvas(int target, int level, int xoffset, int yoffset, int format, int type, CanvasElement canvas) => _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLCanvasElement(this, target, level, xoffset, yoffset, format, type, canvas);
 
   @DomName('WebGLRenderingContext.texSubImage2DImage')
   @DocsEditable()
-  void texSubImage2DImage(int target, int level, int xoffset, int yoffset, int format, int type, ImageElement image) => _blink.BlinkWebGLRenderingContext.$texSubImage2DImage_Callback(this, target, level, xoffset, yoffset, format, type, image);
+  void texSubImage2DImage(int target, int level, int xoffset, int yoffset, int format, int type, ImageElement image) => _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLImageElement(this, target, level, xoffset, yoffset, format, type, image);
 
   @DomName('WebGLRenderingContext.texSubImage2DImageData')
   @DocsEditable()
-  void texSubImage2DImageData(int target, int level, int xoffset, int yoffset, int format, int type, ImageData pixels) => _blink.BlinkWebGLRenderingContext.$texSubImage2DImageData_Callback(this, target, level, xoffset, yoffset, format, type, pixels);
+  void texSubImage2DImageData(int target, int level, int xoffset, int yoffset, int format, int type, ImageData pixels) => _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_ImageData(this, target, level, xoffset, yoffset, format, type, pixels);
 
   @DomName('WebGLRenderingContext.texSubImage2DVideo')
   @DocsEditable()
-  void texSubImage2DVideo(int target, int level, int xoffset, int yoffset, int format, int type, VideoElement video) => _blink.BlinkWebGLRenderingContext.$texSubImage2DVideo_Callback(this, target, level, xoffset, yoffset, format, type, video);
+  void texSubImage2DVideo(int target, int level, int xoffset, int yoffset, int format, int type, VideoElement video) => _blink.BlinkWebGLRenderingContext.texSubImage2D_Callback_ul_long_long_long_ul_ul_HTMLVideoElement(this, target, level, xoffset, yoffset, format, type, video);
 
   @DomName('WebGLRenderingContext.uniform1f')
   @DocsEditable()
-  void uniform1f(UniformLocation location, num x) => _blink.BlinkWebGLRenderingContext.$uniform1f_Callback(this, location, x);
+  void uniform1f(UniformLocation location, num x) => _blink.BlinkWebGLRenderingContext.uniform1f_Callback_WebGLUniformLocation_float(this, location, x);
 
   @DomName('WebGLRenderingContext.uniform1fv')
   @DocsEditable()
-  void uniform1fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.$uniform1fv_Callback(this, location, v);
+  void uniform1fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.uniform1fv_Callback_WebGLUniformLocation_Float32Array(this, location, v);
 
   @DomName('WebGLRenderingContext.uniform1i')
   @DocsEditable()
-  void uniform1i(UniformLocation location, int x) => _blink.BlinkWebGLRenderingContext.$uniform1i_Callback(this, location, x);
+  void uniform1i(UniformLocation location, int x) => _blink.BlinkWebGLRenderingContext.uniform1i_Callback_WebGLUniformLocation_long(this, location, x);
 
   @DomName('WebGLRenderingContext.uniform1iv')
   @DocsEditable()
-  void uniform1iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.$uniform1iv_Callback(this, location, v);
+  void uniform1iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.uniform1iv_Callback_WebGLUniformLocation_Int32Array(this, location, v);
 
   @DomName('WebGLRenderingContext.uniform2f')
   @DocsEditable()
-  void uniform2f(UniformLocation location, num x, num y) => _blink.BlinkWebGLRenderingContext.$uniform2f_Callback(this, location, x, y);
+  void uniform2f(UniformLocation location, num x, num y) => _blink.BlinkWebGLRenderingContext.uniform2f_Callback_WebGLUniformLocation_float_float(this, location, x, y);
 
   @DomName('WebGLRenderingContext.uniform2fv')
   @DocsEditable()
-  void uniform2fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.$uniform2fv_Callback(this, location, v);
+  void uniform2fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.uniform2fv_Callback_WebGLUniformLocation_Float32Array(this, location, v);
 
   @DomName('WebGLRenderingContext.uniform2i')
   @DocsEditable()
-  void uniform2i(UniformLocation location, int x, int y) => _blink.BlinkWebGLRenderingContext.$uniform2i_Callback(this, location, x, y);
+  void uniform2i(UniformLocation location, int x, int y) => _blink.BlinkWebGLRenderingContext.uniform2i_Callback_WebGLUniformLocation_long_long(this, location, x, y);
 
   @DomName('WebGLRenderingContext.uniform2iv')
   @DocsEditable()
-  void uniform2iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.$uniform2iv_Callback(this, location, v);
+  void uniform2iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.uniform2iv_Callback_WebGLUniformLocation_Int32Array(this, location, v);
 
   @DomName('WebGLRenderingContext.uniform3f')
   @DocsEditable()
-  void uniform3f(UniformLocation location, num x, num y, num z) => _blink.BlinkWebGLRenderingContext.$uniform3f_Callback(this, location, x, y, z);
+  void uniform3f(UniformLocation location, num x, num y, num z) => _blink.BlinkWebGLRenderingContext.uniform3f_Callback_WebGLUniformLocation_float_float_float(this, location, x, y, z);
 
   @DomName('WebGLRenderingContext.uniform3fv')
   @DocsEditable()
-  void uniform3fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.$uniform3fv_Callback(this, location, v);
+  void uniform3fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.uniform3fv_Callback_WebGLUniformLocation_Float32Array(this, location, v);
 
   @DomName('WebGLRenderingContext.uniform3i')
   @DocsEditable()
-  void uniform3i(UniformLocation location, int x, int y, int z) => _blink.BlinkWebGLRenderingContext.$uniform3i_Callback(this, location, x, y, z);
+  void uniform3i(UniformLocation location, int x, int y, int z) => _blink.BlinkWebGLRenderingContext.uniform3i_Callback_WebGLUniformLocation_long_long_long(this, location, x, y, z);
 
   @DomName('WebGLRenderingContext.uniform3iv')
   @DocsEditable()
-  void uniform3iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.$uniform3iv_Callback(this, location, v);
+  void uniform3iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.uniform3iv_Callback_WebGLUniformLocation_Int32Array(this, location, v);
 
   @DomName('WebGLRenderingContext.uniform4f')
   @DocsEditable()
-  void uniform4f(UniformLocation location, num x, num y, num z, num w) => _blink.BlinkWebGLRenderingContext.$uniform4f_Callback(this, location, x, y, z, w);
+  void uniform4f(UniformLocation location, num x, num y, num z, num w) => _blink.BlinkWebGLRenderingContext.uniform4f_Callback_WebGLUniformLocation_float_float_float_float(this, location, x, y, z, w);
 
   @DomName('WebGLRenderingContext.uniform4fv')
   @DocsEditable()
-  void uniform4fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.$uniform4fv_Callback(this, location, v);
+  void uniform4fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.uniform4fv_Callback_WebGLUniformLocation_Float32Array(this, location, v);
 
   @DomName('WebGLRenderingContext.uniform4i')
   @DocsEditable()
-  void uniform4i(UniformLocation location, int x, int y, int z, int w) => _blink.BlinkWebGLRenderingContext.$uniform4i_Callback(this, location, x, y, z, w);
+  void uniform4i(UniformLocation location, int x, int y, int z, int w) => _blink.BlinkWebGLRenderingContext.uniform4i_Callback_WebGLUniformLocation_long_long_long_long(this, location, x, y, z, w);
 
   @DomName('WebGLRenderingContext.uniform4iv')
   @DocsEditable()
-  void uniform4iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.$uniform4iv_Callback(this, location, v);
+  void uniform4iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.uniform4iv_Callback_WebGLUniformLocation_Int32Array(this, location, v);
 
   @DomName('WebGLRenderingContext.uniformMatrix2fv')
   @DocsEditable()
-  void uniformMatrix2fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.$uniformMatrix2fv_Callback(this, location, transpose, array);
+  void uniformMatrix2fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.uniformMatrix2fv_Callback_WebGLUniformLocation_boolean_Float32Array(this, location, transpose, array);
 
   @DomName('WebGLRenderingContext.uniformMatrix3fv')
   @DocsEditable()
-  void uniformMatrix3fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.$uniformMatrix3fv_Callback(this, location, transpose, array);
+  void uniformMatrix3fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.uniformMatrix3fv_Callback_WebGLUniformLocation_boolean_Float32Array(this, location, transpose, array);
 
   @DomName('WebGLRenderingContext.uniformMatrix4fv')
   @DocsEditable()
-  void uniformMatrix4fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.$uniformMatrix4fv_Callback(this, location, transpose, array);
+  void uniformMatrix4fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.uniformMatrix4fv_Callback_WebGLUniformLocation_boolean_Float32Array(this, location, transpose, array);
 
   @DomName('WebGLRenderingContext.useProgram')
   @DocsEditable()
-  void useProgram(Program program) => _blink.BlinkWebGLRenderingContext.$useProgram_Callback(this, program);
+  void useProgram(Program program) => _blink.BlinkWebGLRenderingContext.useProgram_Callback_WebGLProgram(this, program);
 
   @DomName('WebGLRenderingContext.validateProgram')
   @DocsEditable()
-  void validateProgram(Program program) => _blink.BlinkWebGLRenderingContext.$validateProgram_Callback(this, program);
+  void validateProgram(Program program) => _blink.BlinkWebGLRenderingContext.validateProgram_Callback_WebGLProgram(this, program);
 
   @DomName('WebGLRenderingContext.vertexAttrib1f')
   @DocsEditable()
-  void vertexAttrib1f(int indx, num x) => _blink.BlinkWebGLRenderingContext.$vertexAttrib1f_Callback(this, indx, x);
+  void vertexAttrib1f(int indx, num x) => _blink.BlinkWebGLRenderingContext.vertexAttrib1f_Callback_ul_float(this, indx, x);
 
   @DomName('WebGLRenderingContext.vertexAttrib1fv')
   @DocsEditable()
-  void vertexAttrib1fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.$vertexAttrib1fv_Callback(this, indx, values);
+  void vertexAttrib1fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.vertexAttrib1fv_Callback_ul_Float32Array(this, indx, values);
 
   @DomName('WebGLRenderingContext.vertexAttrib2f')
   @DocsEditable()
-  void vertexAttrib2f(int indx, num x, num y) => _blink.BlinkWebGLRenderingContext.$vertexAttrib2f_Callback(this, indx, x, y);
+  void vertexAttrib2f(int indx, num x, num y) => _blink.BlinkWebGLRenderingContext.vertexAttrib2f_Callback_ul_float_float(this, indx, x, y);
 
   @DomName('WebGLRenderingContext.vertexAttrib2fv')
   @DocsEditable()
-  void vertexAttrib2fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.$vertexAttrib2fv_Callback(this, indx, values);
+  void vertexAttrib2fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.vertexAttrib2fv_Callback_ul_Float32Array(this, indx, values);
 
   @DomName('WebGLRenderingContext.vertexAttrib3f')
   @DocsEditable()
-  void vertexAttrib3f(int indx, num x, num y, num z) => _blink.BlinkWebGLRenderingContext.$vertexAttrib3f_Callback(this, indx, x, y, z);
+  void vertexAttrib3f(int indx, num x, num y, num z) => _blink.BlinkWebGLRenderingContext.vertexAttrib3f_Callback_ul_float_float_float(this, indx, x, y, z);
 
   @DomName('WebGLRenderingContext.vertexAttrib3fv')
   @DocsEditable()
-  void vertexAttrib3fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.$vertexAttrib3fv_Callback(this, indx, values);
+  void vertexAttrib3fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.vertexAttrib3fv_Callback_ul_Float32Array(this, indx, values);
 
   @DomName('WebGLRenderingContext.vertexAttrib4f')
   @DocsEditable()
-  void vertexAttrib4f(int indx, num x, num y, num z, num w) => _blink.BlinkWebGLRenderingContext.$vertexAttrib4f_Callback(this, indx, x, y, z, w);
+  void vertexAttrib4f(int indx, num x, num y, num z, num w) => _blink.BlinkWebGLRenderingContext.vertexAttrib4f_Callback_ul_float_float_float_float(this, indx, x, y, z, w);
 
   @DomName('WebGLRenderingContext.vertexAttrib4fv')
   @DocsEditable()
-  void vertexAttrib4fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.$vertexAttrib4fv_Callback(this, indx, values);
+  void vertexAttrib4fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.vertexAttrib4fv_Callback_ul_Float32Array(this, indx, values);
 
   @DomName('WebGLRenderingContext.vertexAttribPointer')
   @DocsEditable()
-  void vertexAttribPointer(int indx, int size, int type, bool normalized, int stride, int offset) => _blink.BlinkWebGLRenderingContext.$vertexAttribPointer_Callback(this, indx, size, type, normalized, stride, offset);
+  void vertexAttribPointer(int indx, int size, int type, bool normalized, int stride, int offset) => _blink.BlinkWebGLRenderingContext.vertexAttribPointer_Callback_ul_long_ul_boolean_long_ll(this, indx, size, type, normalized, stride, offset);
 
   @DomName('WebGLRenderingContext.viewport')
   @DocsEditable()
-  void viewport(int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.$viewport_Callback(this, x, y, width, height);
+  void viewport(int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.viewport_Callback_long_long_long_long(this, x, y, width, height);
 
 
   /**
@@ -3050,15 +3050,15 @@
 
   @DomName('WebGLShaderPrecisionFormat.precision')
   @DocsEditable()
-  int get precision => _blink.BlinkWebGLShaderPrecisionFormat.$precision_Getter(this);
+  int get precision => _blink.BlinkWebGLShaderPrecisionFormat.precision_Getter(this);
 
   @DomName('WebGLShaderPrecisionFormat.rangeMax')
   @DocsEditable()
-  int get rangeMax => _blink.BlinkWebGLShaderPrecisionFormat.$rangeMax_Getter(this);
+  int get rangeMax => _blink.BlinkWebGLShaderPrecisionFormat.rangeMax_Getter(this);
 
   @DomName('WebGLShaderPrecisionFormat.rangeMin')
   @DocsEditable()
-  int get rangeMin => _blink.BlinkWebGLShaderPrecisionFormat.$rangeMin_Getter(this);
+  int get rangeMin => _blink.BlinkWebGLShaderPrecisionFormat.rangeMin_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
diff --git a/sdk/lib/web_sql/dartium/web_sql_dartium.dart b/sdk/lib/web_sql/dartium/web_sql_dartium.dart
index dd4d696..4b57aed 100644
--- a/sdk/lib/web_sql/dartium/web_sql_dartium.dart
+++ b/sdk/lib/web_sql/dartium/web_sql_dartium.dart
@@ -101,7 +101,7 @@
 
   @DomName('Database.version')
   @DocsEditable()
-  String get version => _blink.BlinkDatabase.$version_Getter(this);
+  String get version => _blink.BlinkDatabase.version_Getter(this);
 
   /**
    * Atomically update the database version to [newVersion], asynchronously
@@ -117,15 +117,15 @@
    */
   @DomName('Database.changeVersion')
   @DocsEditable()
-  void changeVersion(String oldVersion, String newVersion, [SqlTransactionCallback callback, SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) => _blink.BlinkDatabase.$changeVersion_Callback(this, oldVersion, newVersion, callback, errorCallback, successCallback);
+  void changeVersion(String oldVersion, String newVersion, [SqlTransactionCallback callback, SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) => _blink.BlinkDatabase.changeVersion_Callback_DOMString_DOMString_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback(this, oldVersion, newVersion, callback, errorCallback, successCallback);
 
   @DomName('Database.readTransaction')
   @DocsEditable()
-  void readTransaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) => _blink.BlinkDatabase.$readTransaction_Callback(this, callback, errorCallback, successCallback);
+  void readTransaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) => _blink.BlinkDatabase.readTransaction_Callback_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback(this, callback, errorCallback, successCallback);
 
   @DomName('Database.transaction')
   @DocsEditable()
-  void transaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) => _blink.BlinkDatabase.$transaction_Callback(this, callback, errorCallback, successCallback);
+  void transaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) => _blink.BlinkDatabase.transaction_Callback_SQLTransactionCallback_SQLTransactionErrorCallback_VoidCallback(this, callback, errorCallback, successCallback);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -177,11 +177,11 @@
 
   @DomName('SQLError.code')
   @DocsEditable()
-  int get code => _blink.BlinkSQLError.$code_Getter(this);
+  int get code => _blink.BlinkSQLError.code_Getter(this);
 
   @DomName('SQLError.message')
   @DocsEditable()
-  String get message => _blink.BlinkSQLError.$message_Getter(this);
+  String get message => _blink.BlinkSQLError.message_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -201,15 +201,15 @@
 
   @DomName('SQLResultSet.insertId')
   @DocsEditable()
-  int get insertId => _blink.BlinkSQLResultSet.$insertId_Getter(this);
+  int get insertId => _blink.BlinkSQLResultSet.insertId_Getter(this);
 
   @DomName('SQLResultSet.rows')
   @DocsEditable()
-  SqlResultSetRowList get rows => _blink.BlinkSQLResultSet.$rows_Getter(this);
+  SqlResultSetRowList get rows => _blink.BlinkSQLResultSet.rows_Getter(this);
 
   @DomName('SQLResultSet.rowsAffected')
   @DocsEditable()
-  int get rowsAffected => _blink.BlinkSQLResultSet.$rowsAffected_Getter(this);
+  int get rowsAffected => _blink.BlinkSQLResultSet.rowsAffected_Getter(this);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -229,15 +229,15 @@
 
   @DomName('SQLResultSetRowList.length')
   @DocsEditable()
-  int get length => _blink.BlinkSQLResultSetRowList.$length_Getter(this);
+  int get length => _blink.BlinkSQLResultSetRowList.length_Getter(this);
 
   Map operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
-    return _blink.BlinkSQLResultSetRowList.$NativeIndexed_Getter(this, index);
+    return _blink.BlinkSQLResultSetRowList.item_Callback_ul(this, index);
   }
 
-  Map _nativeIndexedGetter(int index) => _blink.BlinkSQLResultSetRowList.$NativeIndexed_Getter(this, index);
+  Map _nativeIndexedGetter(int index) => _blink.BlinkSQLResultSetRowList.item_Callback_ul(this, index);
 
   void operator[]=(int index, Map value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -279,7 +279,7 @@
 
   @DomName('SQLResultSetRowList.item')
   @DocsEditable()
-  Map item(int index) => _blink.BlinkSQLResultSetRowList.$item_Callback(this, index);
+  Map item(int index) => _blink.BlinkSQLResultSetRowList.item_Callback_ul(this, index);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -302,7 +302,7 @@
 
   @DomName('SQLTransaction.executeSql')
   @DocsEditable()
-  void executeSql(String sqlStatement, List<Object> arguments, [SqlStatementCallback callback, SqlStatementErrorCallback errorCallback]) => _blink.BlinkSQLTransaction.$executeSql_Callback(this, sqlStatement, arguments, callback, errorCallback);
+  void executeSql(String sqlStatement, List<Object> arguments, [SqlStatementCallback callback, SqlStatementErrorCallback errorCallback]) => _blink.BlinkSQLTransaction.executeSql_Callback_DOMString_A_object_A_SQLStatementCallback_SQLStatementErrorCallback(this, sqlStatement, arguments, callback, errorCallback);
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
diff --git a/site/try/build_try.gyp b/site/try/build_try.gyp
index d91ab93..882a6bc 100644
--- a/site/try/build_try.gyp
+++ b/site/try/build_try.gyp
@@ -55,7 +55,6 @@
           '../../pkg/intl/lib',
           '../../pkg/logging/lib',
           '../../pkg/matcher/lib',
-          '../../pkg/math/lib',
           '../../pkg/path/lib',
           '../../pkg/serialization/lib',
           '../../pkg/stack_trace/lib',
diff --git a/site/try/index.html b/site/try/index.html
index 09ad1b3..5e05395 100644
--- a/site/try/index.html
+++ b/site/try/index.html
@@ -190,6 +190,8 @@
 
 <!-- Enable Google Analytics -->
 <script type="text/javascript">
+if (document.cookie.split(new RegExp('; *')).indexOf('org-trydart-AutomatedTest=true') == -1) {
+  window.parent && window.parent.postMessage('Enabling Analytics.', '*');
   var _gaq = _gaq || [];
   _gaq.push(['_setAccount', 'UA-26406144-2']);
   _gaq.push(['_trackPageview']);
@@ -199,6 +201,7 @@
     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
   })();
+}
 </script>
 </head>
 <body>
@@ -275,6 +278,14 @@
 <script type="application/javascript" src="https://dart.googlecode.com/svn/branches/bleeding_edge/dart/pkg/browser/lib/dart.js"></script>
 <script type="application/dart" src="leap.dart"></script>
 -->
+<script type="application/javascript">
+  if (self.localStorage &&
+      !Object.prototype.hasOwnProperty.call(
+          self.localStorage, 'hasSelectionModify')) {
+    self.localStorage.hasSelectionModify =
+        typeof window.getSelection().modify != 'undefined';
+  }
+</script>
 <script type="application/javascript" src="leap.dart.js"></script>
 </body>
 </html>
diff --git a/site/try/poi/poi.dart b/site/try/poi/poi.dart
index 3ba69f6..603a5a6 100644
--- a/site/try/poi/poi.dart
+++ b/site/try/poi/poi.dart
@@ -10,6 +10,7 @@
     Stream;
 
 import 'dart:io' show
+    File,
     HttpClient,
     HttpClientRequest,
     HttpClientResponse,
@@ -63,12 +64,42 @@
     PartialElement,
     Token;
 
-/// Controls if this program should be querying Dart Mind. Used by tests.
-bool enableDartMind = true;
+/// Enabled by the option --enable-dart-mind.  Controls if this program should
+/// be querying Dart Mind.
+bool isDartMindEnabled = false;
 
 /// Iterator over lines from standard input (or the argument array).
 Iterator<String> stdin;
 
+/// Enabled by the option --simulate-mutation. When true, this program will
+/// only prompt for one file name, and subsequent runs will read
+/// FILENAME.N.dart, where N starts at 1, and is increased on each iteration.
+/// For example, if the program is invoked as:
+///
+///   dart poi.dart --simulate-mutation test.dart 11 22 33 44
+///
+/// The program will first read the file 'test.dart' and compute scope
+/// information about position 11, then position 22 in test.dart.1.dart, then
+/// position 33 in test.dart.2.dart, and finally position 44 in
+/// test.dart.3.dart.
+bool isSimulateMutationEnabled = false;
+
+/// Counts the number of times [runPoi] has been invoked.
+int poiCount;
+
+int globalCounter = 0;
+
+/// Enabled by the option --verbose (or -v). Prints more information than you
+/// really need.
+bool isVerbose = false;
+
+/// When true (the default value) print serialized scope information at the
+/// provided position.
+const bool PRINT_SCOPE_INFO =
+    const bool.fromEnvironment('PRINT_SCOPE_INFO', defaultValue: true);
+
+Stopwatch wallClock = new Stopwatch();
+
 /// Iterator for reading lines from [io.stdin].
 class StdinIterator implements Iterator<String> {
   String current;
@@ -79,31 +110,115 @@
   }
 }
 
+printFormattedTime(message, int us) {
+  String m = '$message${" " * 65}'.substring(0, 60);
+  String i = '${" " * 10}${(us/1000).toStringAsFixed(3)}';
+  i = i.substring(i.length - 10);
+  print('$m ${i}ms');
+}
+
+printWallClock(message) {
+  if (!isVerbose) return;
+  if (wallClock.isRunning) {
+    print('$message');
+    printFormattedTime('--->>>', wallClock.elapsedMicroseconds);
+    wallClock.reset();
+  } else {
+    print(message);
+  }
+}
+
+printVerbose(message) {
+  if (!isVerbose) return;
+  print(message);
+}
+
 main(List<String> arguments) {
+  poiCount = 0;
+  wallClock.start();
+  List<String> nonOptionArguments = [];
+  for (String argument in arguments) {
+    if (argument.startsWith('-')) {
+      switch (argument) {
+        case '--simulate-mutation':
+          isSimulateMutationEnabled = true;
+          break;
+        case '--enable-dart-mind':
+          isDartMindEnabled = true;
+          break;
+        case '-v':
+        case '--verbose':
+          isVerbose = true;
+          break;
+        default:
+          throw 'Unknown option: $argument.';
+      }
+    } else {
+      nonOptionArguments.add(argument);
+    }
+  }
+  if (nonOptionArguments.isEmpty) {
+    stdin = new StdinIterator();
+  } else {
+    stdin = nonOptionArguments.iterator;
+  }
+
   FormattingDiagnosticHandler handler = new FormattingDiagnosticHandler();
   handler
       ..verbose = false
       ..enableColors = true;
   api.CompilerInputProvider inputProvider = handler.provider;
 
-  if (arguments.length == 0) {
-    stdin = new StdinIterator();
-  } else {
-    stdin = arguments.where((String line) {
-      print(line); // Simulates user input in terminal.
-      return true;
-    }).iterator;
-  }
-
   return prompt('Dart file: ').then((String fileName) {
+    if (isSimulateMutationEnabled) {
+      inputProvider = simulateMutation(fileName, inputProvider);
+    }
     return prompt('Position: ').then((String position) {
       return parseUserInput(fileName, position, inputProvider, handler);
     });
   });
 }
 
+/// Create an input provider that implements the behavior documented at
+/// [simulateMutation].
+api.CompilerInputProvider simulateMutation(
+    String fileName,
+    SourceFileProvider inputProvider) {
+  Uri script = Uri.base.resolveUri(new Uri.file(fileName));
+  int count = poiCount;
+  Future cache;
+  String cachedFileName = script.toFilePath();
+  int counter = ++globalCounter;
+  return (Uri uri) {
+    if (counter != globalCounter) throw 'Using old provider';
+    printVerbose('fake inputProvider#$counter($uri): $poiCount $count');
+    if (uri == script) {
+      if (poiCount == count) {
+        cachedFileName = uri.toFilePath();
+        if (count != 0) {
+          cachedFileName = '$cachedFileName.$count.dart';
+        }
+        printVerbose('Not using cached version of $cachedFileName');
+        cache = new File(cachedFileName).readAsBytes().then((data) {
+          printVerbose('Read file $cachedFileName: ${UTF8.decode(data)}');
+          return data;
+        });
+        count++;
+      } else {
+        printVerbose('Using cached version of $cachedFileName');
+      }
+      return cache;
+    } else {
+      printVerbose('Using original provider for $uri');
+      return inputProvider(uri);
+    }
+  };
+}
+
 Future<String> prompt(message) {
-  stdout.write(message);
+  if (stdin is StdinIterator) {
+    stdout.write(message);
+  }
   return stdout.flush().then((_) {
     stdin.moveNext();
     return stdin.current;
@@ -112,7 +227,6 @@
 
 Future queryDartMind(String prefix, String info) {
   // TODO(lukechurch): Use [info] for something.
-  if (!enableDartMind) return new Future.value("[]");
   String encodedArg0 = Uri.encodeComponent('"$prefix"');
   String mindQuery =
       'http://dart-mind.appspot.com/rpc'
@@ -138,11 +252,17 @@
     api.CompilerInputProvider inputProvider,
     api.DiagnosticHandler handler) {
   Future repeat() {
+    printFormattedTime('--->>>', wallClock.elapsedMicroseconds);
+    wallClock.reset();
+
     return prompt('Position: ').then((String positionString) {
+      wallClock.reset();
       return parseUserInput(fileName, positionString, inputProvider, handler);
     });
   }
 
+  printWallClock("\n\n\nparseUserInput('$fileName', '$positionString')");
+
   Uri script = Uri.base.resolveUri(new Uri.file(fileName));
   if (positionString == null) return null;
   int position = int.parse(
@@ -150,21 +270,28 @@
   if (position == null) return repeat();
 
   inputProvider(script);
-  handler(
-      script, position, position + 1,
-      'Point of interest. Cursor is immediately before highlighted character.',
-      api.Diagnostic.HINT);
+  if (isVerbose) {
+    handler(
+        script, position, position + 1,
+        'Point of interest. '
+        'Cursor is immediately before highlighted character.',
+        api.Diagnostic.HINT);
+  }
 
   Stopwatch sw = new Stopwatch()..start();
 
   Future future = runPoi(script, position, inputProvider, handler);
   return future.then((Element element) {
-    print('Resolving took ${sw.elapsedMicroseconds}us.');
+    if (isVerbose) {
+      printFormattedTime('Resolving took', sw.elapsedMicroseconds);
+    }
     sw.reset();
     String info = scopeInformation(element, position);
     sw.stop();
-    print(info);
-    print('Scope information took ${sw.elapsedMicroseconds}us.');
+    if (PRINT_SCOPE_INFO) {
+      print(info);
+    }
+    printVerbose('Scope information took ${sw.elapsedMicroseconds}us.');
     sw..reset()..start();
     Token token = findToken(element, position);
     String prefix;
@@ -177,17 +304,20 @@
         prefix = token.value.substring(0, position - token.charOffset);
       }
     }
-    print('Find token took ${sw.elapsedMicroseconds}us.');
-    sw.reset();
-    if (prefix != null) {
+    sw.stop();
+    printVerbose('Find token took ${sw.elapsedMicroseconds}us.');
+    if (isDartMindEnabled && prefix != null) {
+      sw..reset()..start();
       return queryDartMind(prefix, info).then((String dartMindSuggestion) {
         sw.stop();
         print('Dart Mind ($prefix): $dartMindSuggestion.');
-        print('Dart Mind took ${sw.elapsedMicroseconds}us.');
+        printVerbose('Dart Mind took ${sw.elapsedMicroseconds}us.');
         return repeat();
       });
     } else {
-      print("Didn't talk to Dart Mind, no identifier at POI ($token).");
+      if (isDartMindEnabled) {
+        print("Didn't talk to Dart Mind, no identifier at POI ($token).");
+      }
       return repeat();
     }
   });
@@ -315,6 +445,9 @@
   void processWorkItem(void f(WorkItem work), WorkItem work) {
     if (work.element.library.canonicalUri == script) {
       f(work);
+      printWallClock('Processed ${work.element}.');
+    } else {
+      printWallClock('Skipped ${work.element}.');
     }
   }
 }
diff --git a/site/try/poi/repeat_poi.dart b/site/try/poi/repeat_poi.dart
new file mode 100644
index 0000000..24e837a
--- /dev/null
+++ b/site/try/poi/repeat_poi.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2014, 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 'poi.dart' as poi;
+
+main(arguments) {
+  poi.main(arguments).then((_) => main(arguments));
+}
diff --git a/site/try/src/interaction_manager.dart b/site/try/src/interaction_manager.dart
index 7d704e8..2dc2aa8 100644
--- a/site/try/src/interaction_manager.dart
+++ b/site/try/src/interaction_manager.dart
@@ -21,8 +21,6 @@
 import 'dart:collection' show
     Queue;
 
-import 'dart:js' as hack;
-
 import 'package:compiler/implementation/scanner/scannerlib.dart' show
     BeginGroupToken,
     EOF_TOKEN,
@@ -1236,7 +1234,7 @@
     var first = record.removedNodes.first;
     var line = findLine(record.target);
 
-    if (first is Text && first.data=="\n" && line.nextNode != null) {
+    if (first is Text && line.nextNode != null) {
       normalizedNodes.add(line.nextNode);
     }
     normalizedNodes.add(line);
@@ -1303,17 +1301,14 @@
   if (!isCollapsed(selection)) return;
   Node node = selection.anchorNode;
   int offset = selection.anchorOffset;
-  if (selection.anchorNode is Element && selection.anchorOffset != 0) {
+  if (node is Element && offset != 0) {
     // In some cases, Firefox reports the wrong anchorOffset (always seems to
     // be 6) when anchorNode is an Element. Moving the cursor back and forth
     // adjusts the anchorOffset.
     // Safari can also reach this code, but the offset isn't wrong, just
     // inconsistent.  After moving the cursor back and forth, Safari will make
     // the offset relative to a text node.
-    // TODO(ahe): Come up with a better way to encapsulate the method below.
-    var selectionProxy = new hack.JsObject.fromBrowserObject(selection);
-    var modify = selectionProxy['modify'];
-    if (modify != null) {
+    if (settings.hasSelectionModify.value) {
       // IE doesn't support selection.modify, but it's okay since the code
       // above is for Firefox, IE doesn't have problems with anchorOffset.
       selection
diff --git a/site/try/src/messages.dart b/site/try/src/messages.dart
index bbcdda5..cfa1f17 100644
--- a/site/try/src/messages.dart
+++ b/site/try/src/messages.dart
@@ -40,5 +40,8 @@
     'Theme:',
 
   'incrementalCompilation':
-    'Enable incremental compilation (EXPERIMENTAL)',
+    'Enable incremental compilation (EXPERIMENTAL).',
+
+  'hasSelectionModify':
+    'Use Selection.modify.',
 };
diff --git a/site/try/src/settings.dart b/site/try/src/settings.dart
index b78aa53..82382e1 100644
--- a/site/try/src/settings.dart
+++ b/site/try/src/settings.dart
@@ -43,7 +43,7 @@
 }
 
 const BooleanUserOption _enableDartMind =
-    const BooleanUserOption('enableDartMind');
+    const BooleanUserOption('enableDartMind', isHidden: true);
 
 bool get enableDartMind => _enableDartMind.value;
 
@@ -101,6 +101,9 @@
 const BooleanUserOption communicateViaBlobs =
     const BooleanUserOption('communicateViaBlobs', isHidden: true);
 
+const BooleanUserOption hasSelectionModify =
+    const BooleanUserOption('hasSelectionModify', isHidden: true);
+
 const List<UserOption> options = const <UserOption>[
     _alwaysRunInWorker,
     _verboseCompiler,
@@ -116,4 +119,5 @@
     _currentSample,
     alwaysRunInIframe,
     communicateViaBlobs,
+    hasSelectionModify,
   ];
diff --git a/tests/README b/tests/README
new file mode 100644
index 0000000..a9e3bb6
--- /dev/null
+++ b/tests/README
@@ -0,0 +1,43 @@
+Run Existing Tests
+==================
+
+See the output of
+
+  ../tools/test.py --help
+
+for how to run tests.
+
+See also
+
+  https://code.google.com/p/dart/wiki/Building#Testing
+
+for detailed examples.
+
+Create New Tests
+================
+
+See comments above
+
+  factory StandardTestSuite.forDirectory
+
+in
+
+  ../tools/testing/dart/test_suite.dart
+
+for the default test directory layout. By default test-file names must
+end in "_test.dart", but some test suites, such as ./co19, subclass
+StandardTestSuite and override this default.
+
+See comments at the beginning of
+
+  ../tools/testing/dart/multitest.dart
+
+for how to create tests that pass by failing with a known error. For
+example,
+
+  ...
+  int x = "not an int"; /// 01: static type warning
+  ...
+
+as part of a test will only pass the "--compiler dartanalyzer" test if
+the assignment generates a static type warning.
diff --git a/tests/co19/co19-dart2dart.status b/tests/co19/co19-dart2dart.status
index ecdd0fe..5eb5718 100644
--- a/tests/co19/co19-dart2dart.status
+++ b/tests/co19/co19-dart2dart.status
@@ -11,6 +11,7 @@
 Language/12_Expressions/18_Assignment_A04_t09: RuntimeError # co19-roll r667: Please triage this failure
 
 [ $compiler == dart2dart ]
+LibTest/async/DeferredLibrary/DeferredLibrary_A01_t01: CompileTimeError # co19 issue 700
 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
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 30100ce..5b6b924 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -16,6 +16,8 @@
 # Crashes first, please. Then untriaged bugs. There is a section below
 # for co19 bugs.
 [ $compiler == dart2js ]
+# This test uses the old annotation-based syntax.
+LibTest/async/DeferredLibrary/DeferredLibrary_A01_t01: CompileTimeError # co19 issue 700
 LibTest/core/List/removeAt_A02_t01: RuntimeError # Issue 1533
 LibTest/isolate/ReceivePort/receive_A01_t02: RuntimeError # Issue 6750
 Language/05_Variables/05_Variables_A11_t01: fail # Please triage this issue.
@@ -1533,6 +1535,8 @@
 LibTest/isolate/Isolate/spawnUri_A01_t05: Fail # co19-roll r672: Please triage this failure
 
 [ $compiler == dart2js ]
+LibTest/core/double/operator_multiplication_A01_t05: RuntimeError # Maybe an issue with r40061? Please triage this failure
+LibTest/core/double/operator_multiplication_A01_t09: RuntimeError # Maybe an issue with r40061? Please triage this failure
 LibTest/core/List/List_class_A01_t01: RuntimeError # co19-roll r623: Please triage this failure
 Language/03_Overview/2_Privacy_A01_t02: RuntimeError # co19-roll r667: Please triage this failure
 Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t16: RuntimeError # co19-roll r667: Please triage this failure
diff --git a/tests/co19/co19-dartium.status b/tests/co19/co19-dartium.status
index 8fb2d77..c149ca0 100644
--- a/tests/co19/co19-dartium.status
+++ b/tests/co19/co19-dartium.status
@@ -5,6 +5,13 @@
 [ $compiler == none && $runtime == drt ]
 *: Skip # running co19 tests on content_shell would make our dartium cycle-times very long
 
+[ $compiler == none && $mode == debug && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
+LayoutTests/fast/canvas/canvas-lineDash-input-sequence_t01: Skip # Issue 20867
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: Skip # Issue 20540
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565_t01: Skip # Issue 20540
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: Skip # Issue 20540
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video_t01: Skip # Issue 20540
+
 [ $compiler == none && ($runtime == dartium || $runtime == ContentShellOnAndroid) ]
 LibTest/html/Window/document_A01_t01: RuntimeError # Issue 20146
 LibTest/html/Window/postMessage_A01_t02: RuntimeError # Issue 20146
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 2f8f992..e7e8251 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -2,6 +2,19 @@
 # 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.
 
+# Failing on vm-linux-release-optcounter-threshold-be only. There seems to
+# be no way to disable only that configuration though.
+[ $runtime == vm && $system == linux && $mode == release ]
+LibTest/core/Duration/operator_lt_A01_t01: Skip # Issue 20875
+LibTest/core/Duration/operator_lte_A01_t01: Skip # Issue 20875
+LibTest/core/Duration/operator_gte_A01_t01: Skip # Issue 20875
+LibTest/core/Duration/operator_mult_A01_t01: Skip # Issue 20875
+LibTest/core/Duration/operator_gt_A01_t01: Skip # Issue 20875
+LibTest/core/Duration/operator_plus_A01_t01: Skip # Issue 20875
+LibTest/core/Duration/operator_eq_A01_t01: Skip # Issue 20875
+LibTest/core/Duration/operator_minus_A01_t01: Skip # Issue 20875
+LibTest/core/Duration/operator_div_A01_t01: Skip # Issue 20875
+
 
 [ $compiler == none && ($runtime == vm || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
 
@@ -26,6 +39,8 @@
 
 LibTest/core/DateTime/parse_A03_t01: fail # Issue 12514
 
+LibTest/core/DateTime/DateTime.now_A01_t02: Pass, Fail # co19 issue 709
+
 LibTest/isolate/Isolate/spawnUri_A01_t02: Skip # Dart issue 15974
 LibTest/isolate/Isolate/spawnUri_A01_t03: Skip # Dart issue 15974
 LibTest/isolate/Isolate/spawnUri_A02_t01: RuntimeError # Dart issue 15617
diff --git a/tests/compiler/dart2js/analyze_unused_dart2js_test.dart b/tests/compiler/dart2js/analyze_unused_dart2js_test.dart
index 34c1483..e7ff9c3 100644
--- a/tests/compiler/dart2js/analyze_unused_dart2js_test.dart
+++ b/tests/compiler/dart2js/analyze_unused_dart2js_test.dart
@@ -26,10 +26,7 @@
 
   // dart2js uses only the encoding functions, the decoding functions are used
   // from the generated code.
-  "implementation/runtime_data.dart": const [" is never "],
-
-  // Setlet implements the Set interface: Issue 18959.
-  "implementation/util/setlet.dart": const [" is never "],
+  "js_lib/shared/runtime_data.dart": const [" is never "],
 
   // MethodElement
   // TODO(20377): Why is MethodElement unused?
diff --git a/tests/compiler/dart2js/backend_dart/dart_backend_test.dart b/tests/compiler/dart2js/backend_dart/dart_backend_test.dart
index 280935f..e2d6d54 100644
--- a/tests/compiler/dart2js/backend_dart/dart_backend_test.dart
+++ b/tests/compiler/dart2js/backend_dart/dart_backend_test.dart
@@ -329,17 +329,6 @@
 }
 ''';
   var expectedResult = '''
-globalfoo_A() {}
-var globalVar_A;
-var globalVarInitialized_A = 6;
-var globalVarInitialized2_A = 7;
-class A_A {
-  A_A() {}
-  A_A.fromFoo_A() {}
-  static staticfoo_A() {}
-  foo() {}
-  static const field_A = 5;
-}
 globalfoo() {}
 var globalVar;
 var globalVarInitialized = 6;
@@ -351,16 +340,18 @@
   foo() {}
   static const field = 5;
 }
+globalfoo_A() {}
+var globalVar_A;
+var globalVarInitialized_A = 6;
+var globalVarInitialized2_A = 7;
+class A_A {
+  A_A() {}
+  A_A.fromFoo_A() {}
+  static staticfoo_A() {}
+  foo() {}
+  static const field_A = 5;
+}
 main() {
-  globalVar;
-  globalVarInitialized;
-  globalVarInitialized2;
-  globalfoo();
-  A.field;
-  A.staticfoo();
-  new A();
-  new A.fromFoo();
-  new A().foo();
   globalVar_A;
   globalVarInitialized_A;
   globalVarInitialized2_A;
@@ -370,6 +361,15 @@
   new A_A();
   new A_A.fromFoo_A();
   new A_A().foo();
+  globalVar;
+  globalVarInitialized;
+  globalVarInitialized2;
+  globalfoo();
+  A.field;
+  A.staticfoo();
+  new A();
+  new A.fromFoo();
+  new A().foo();
 }
 ''';
   testDart2Dart(mainSrc, librarySrc: librarySrc,
@@ -492,11 +492,11 @@
 }
 ''';
   var expectedResult = '''
-topfoo_A() {}
+topfoo() {}
 class A {
   foo() {}
 }
-topfoo() {
+topfoo_A() {
   var x = 5;
 }
 class A_A {
@@ -514,8 +514,8 @@
   var GREATVAR = b.myliba;
   b.mylist;
   a = getA();
-  topfoo();
   topfoo_A();
+  topfoo();
 }
 ''';
   testDart2Dart(mainSrc, librarySrc: librarySrc,
@@ -562,15 +562,15 @@
 }
 ''';
   var expectedResult = '''
-get topgetset_A => 5;
-set topgetset_A(arg) {}
-get topgetset => 6;
+get topgetset => 5;
 set topgetset(arg) {}
+get topgetset_A => 6;
+set topgetset_A(arg) {}
 main() {
-  topgetset;
-  topgetset = 6;
   topgetset_A;
-  topgetset_A = 5;
+  topgetset_A = 6;
+  topgetset;
+  topgetset = 5;
 }
 ''';
   testDart2Dart(mainSrc, librarySrc: librarySrc,
@@ -598,9 +598,15 @@
   noSuchMethod(Invocation invocation) => throw 'unimplemented method';
 }
 
-PlaceholderCollector collectPlaceholders(compiler, element) =>
-  new PlaceholderCollector(compiler, new Set<String>(), new DynoMap(compiler))
-      ..collect(element);
+PlaceholderCollector collectPlaceholders(compiler, element) {
+  DartBackend backend = compiler.backend;
+  return new PlaceholderCollector(compiler,
+      backend.mirrorRenamer,
+      new Set<String>(),
+      new DynoMap(compiler),
+      compiler.mainFunction)
+    ..collect(element);
+}
 
 testLocalFunctionPlaceholder() {
   var src = '''
@@ -656,25 +662,25 @@
 }
 ''';
   var expectedResult = '''
-typedef void MyFunction_A<T_B extends num>(T_B arg);
-class T_A {}
-class B_A<T_B> {}
-class A_A<T_B> extends B_A<T_B> {
-  T_B f;
-}
 typedef void MyFunction<T_B extends num>(T_B arg);
 class T {}
 class B<T_B> {}
 class A<T_B> extends B<T_B> {
   T_B f;
 }
+typedef void MyFunction_A<T_B extends num>(T_B arg);
+class T_A {}
+class B_A<T_B> {}
+class A_A<T_B> extends B_A<T_B> {
+  T_B f;
+}
 main() {
-  MyFunction myf1;
-  MyFunction_A myf2;
-  new A<int>().f;
-  new T();
+  MyFunction_A myf1;
+  MyFunction myf2;
   new A_A<int>().f;
   new T_A();
+  new A<int>().f;
+  new T();
 }
 ''';
   testDart2Dart(mainSrc, librarySrc: librarySrc,
@@ -701,13 +707,13 @@
 }
 ''';
   var expectedResult = '''
-class I_A {}
-class A_A<T extends I_A> {}
 class I {}
 class A<T extends I> {}
+class I_A {}
+class A_A<T extends I_A> {}
 main() {
-  new A();
   new A_A();
+  new A();
 }
 ''';
   testDart2Dart(mainSrc, librarySrc: librarySrc,
diff --git a/tests/compiler/dart2js/cpa_inference_test.dart b/tests/compiler/dart2js/cpa_inference_test.dart
index d0296f6..7eacb8f 100644
--- a/tests/compiler/dart2js/cpa_inference_test.dart
+++ b/tests/compiler/dart2js/cpa_inference_test.dart
@@ -1578,6 +1578,8 @@
           .singletonConcreteType(new ClassBaseType(element));
     }
 
+    var world = result.compiler.world;
+
     ClassElement a = findElement(result.compiler, 'A');
     ClassElement b = findElement(result.compiler, 'B');
     ClassElement c = findElement(result.compiler, 'C');
@@ -1585,24 +1587,24 @@
 
     for (ClassElement cls in [a, b, c, d]) {
       Expect.equals(convert(singleton(cls)),
-                    new TypeMask.nonNullExact(cls));
+                    new TypeMask.nonNullExact(cls, world));
     }
 
     for (ClassElement cls in [a, b, c, d]) {
       Expect.equals(convert(singleton(cls).union(nullSingleton)),
-                    new TypeMask.exact(cls));
+                    new TypeMask.exact(cls, world));
     }
 
     Expect.equals(convert(singleton(a).union(singleton(b))),
-                  new TypeMask.nonNullSubclass(a, result.compiler.world));
+                  new TypeMask.nonNullSubclass(a, world));
 
     Expect.equals(
         convert(singleton(a).union(singleton(b)).union(nullSingleton)),
-                  new TypeMask.subclass(a, result.compiler.world));
+                  new TypeMask.subclass(a, world));
 
     Expect.equals(
         simplify(convert(singleton(b).union(singleton(d))), result.compiler),
-        new TypeMask.nonNullSubtype(a, result.compiler.world));
+        new TypeMask.nonNullSubtype(a, world));
   });
 }
 
@@ -1631,7 +1633,7 @@
       """;
   return analyze(source).then((result) {
 
-
+    var world = result.compiler.world;
 
     ClassElement a = findElement(result.compiler, 'A');
     ClassElement b = findElement(result.compiler, 'B');
@@ -1646,21 +1648,21 @@
     result.checkSelectorHasType(
         foo,
         new TypeMask.unionOf([a, b, c]
-            .map((cls) => new TypeMask.nonNullExact(cls)),
+            .map((cls) => new TypeMask.nonNullExact(cls, world)),
             result.compiler.world));
     result.checkSelectorHasType(
-        new TypedSelector.subclass(x, foo, result.compiler.world),
-        new TypeMask.nonNullExact(b));
+        new TypedSelector.subclass(x, foo, world),
+        new TypeMask.nonNullExact(b, world));
     result.checkSelectorHasType(
-        new TypedSelector.subclass(y, foo, result.compiler.world),
-        new TypeMask.nonNullExact(c));
+        new TypedSelector.subclass(y, foo, world),
+        new TypeMask.nonNullExact(c, world));
     result.checkSelectorHasType(
-        new TypedSelector.subclass(z, foo, result.compiler.world),
-        new TypeMask.nonNullExact(a));
+        new TypedSelector.subclass(z, foo, world),
+        new TypeMask.nonNullExact(a, world));
     result.checkSelectorHasType(
-        new TypedSelector.subclass(xy, foo, result.compiler.world),
+        new TypedSelector.subclass(xy, foo, world),
         new TypeMask.unionOf([b, c].map((cls) =>
-            new TypeMask.nonNullExact(cls)), result.compiler.world));
+            new TypeMask.nonNullExact(cls, world)), world));
 
     result.checkSelectorHasType(new Selector.call("bar", null, 0), null);
   });
@@ -1675,7 +1677,8 @@
   return analyze(source).then((result) {
     ClassElement bool = result.compiler.backend.boolImplementation;
     result.checkSelectorHasType(new Selector.binaryOperator('=='),
-                                new TypeMask.nonNullExact(bool));
+                                new TypeMask.nonNullExact(bool,
+                                    result.compiler.world));
   });
 }
 
diff --git a/tests/compiler/dart2js/deferred_emit_type_checks_test.dart b/tests/compiler/dart2js/deferred_emit_type_checks_test.dart
index 68a5d9b..bb9449a 100644
--- a/tests/compiler/dart2js/deferred_emit_type_checks_test.dart
+++ b/tests/compiler/dart2js/deferred_emit_type_checks_test.dart
@@ -63,14 +63,10 @@
 // it with a type argument, and testing for the type. The extra support should
 // go to the deferred hunk.
 const Map MEMORY_SOURCE_FILES = const {"main.dart": """
-import "dart:async";
-
-@def import 'lib.dart' as lib show f, A, instance;
-
-const def = const DeferredLibrary("deferred");
+import 'lib.dart' deferred as lib show f, A, instance;
 
 void main() {
-  def.load().then((_) {
+  lib.loadLibrary().then((_) {
     print(lib.f(lib.instance));
   });
 }
diff --git a/tests/compiler/dart2js/deferred_load_graph_segmentation2_test.dart b/tests/compiler/dart2js/deferred_load_graph_segmentation2_test.dart
index 6a4b480..2297f0e 100644
--- a/tests/compiler/dart2js/deferred_load_graph_segmentation2_test.dart
+++ b/tests/compiler/dart2js/deferred_load_graph_segmentation2_test.dart
@@ -11,9 +11,6 @@
 import 'memory_source_file_helper.dart';
 import "dart:async";
 
-import 'package:compiler/implementation/dart2jslib.dart'
-       as dart2js;
-
 class FakeOutputStream<T> extends EventSink<T> {
   void add(T event) {}
   void addError(T event, [StackTrace stackTrace]) {}
@@ -60,14 +57,12 @@
 const Map MEMORY_SOURCE_FILES = const {"main.dart": """
 import "dart:async";
 
-@def import 'lib.dart' as lib show f1;
+import 'lib.dart' deferred as lib show f1;
 import 'lib.dart' show f2;
 
-const def = const DeferredLibrary("deferred");
-
 void main() {
   print(f2());
-  def.load().then((_) {
+  lib.loadLibrary().then((_) {
     print(lib.f1());
   });
 }
diff --git a/tests/compiler/dart2js/deferred_load_graph_segmentation_test.dart b/tests/compiler/dart2js/deferred_load_graph_segmentation_test.dart
index 6aed0b7..d20bd3e 100644
--- a/tests/compiler/dart2js/deferred_load_graph_segmentation_test.dart
+++ b/tests/compiler/dart2js/deferred_load_graph_segmentation_test.dart
@@ -82,27 +82,14 @@
 
     var hunksToLoad = compiler.deferredLoadTask.hunksToLoad;
 
-    mapToNames(id) {
-      return hunksToLoad[id];
-    }
-
     var hunksLib1 = hunksToLoad["lib1"];
     var hunksLib2 = hunksToLoad["lib2"];
     var hunksLib4_1 = hunksToLoad["lib4_1"];
     var hunksLib4_2 = hunksToLoad["lib4_2"];
-    Expect.equals(hunksLib1.length, 2);
-    print(hunksToLoad);
-    Expect.listEquals([ou_lib1_lib2], hunksLib1[0]);
-    Expect.listEquals([ou_lib1], hunksLib1[1]);
-
-    Expect.equals(hunksLib2.length, 2);
-    Expect.listEquals([ou_lib1_lib2], hunksLib2[0]);
-    Expect.listEquals([ou_lib2], hunksLib2[1]);
-
-    Expect.equals(hunksLib4_1.length, 1);
-    Expect.listEquals([ou_lib4_1], hunksLib4_1[0]);
-    Expect.equals(hunksLib4_2.length, 1);
-    Expect.listEquals([ou_lib4_2], hunksLib4_2[0]);
+    Expect.listEquals([ou_lib1_lib2, ou_lib1], hunksLib1);
+    Expect.listEquals([ou_lib1_lib2, ou_lib2], hunksLib2);
+    Expect.listEquals([ou_lib4_1], hunksLib4_1);
+    Expect.listEquals([ou_lib4_2], hunksLib4_2);
     Expect.equals(hunksToLoad["main"], null);
   }));
 }
@@ -121,18 +108,15 @@
 const Map MEMORY_SOURCE_FILES = const {
   "main.dart":"""
 import "dart:async";
-@def_main_1 import 'lib1.dart' as l1;
-@def_main_2 import 'lib2.dart' as l2;
-
-const def_main_1 = const DeferredLibrary("lib1");
-const def_main_2 = const DeferredLibrary("lib2");
+import 'lib1.dart' deferred as lib1;
+import 'lib2.dart' deferred as lib2;
 
 void main() {
-  def_main_1.load().then((_) {
-        l1.foo1();
-        new l1.C();
-    def_main_2.load().then((_) {
-        l2.foo2();
+  lib1.loadLibrary().then((_) {
+        lib1.foo1();
+        new lib1.C();
+    lib2.loadLibrary().then((_) {
+        lib2.foo2();
     });
   });
 }
@@ -143,16 +127,14 @@
 import "dart:html";
 
 import "lib3.dart" as l3;
-@def_1_1 import "lib4.dart" as l4;
-
-const def_1_1 = const DeferredLibrary("lib4_1");
+import "lib4.dart" deferred as lib4_1;
 
 class C {}
 
 foo1() {
   new InputElement();
-  def_1_1.load().then((_) {
-    l4.bar1();
+  lib4_1.loadLibrary().then((_) {
+    lib4_1.bar1();
   });
   return () {return 1 + l3.foo3();} ();
 }
@@ -161,13 +143,11 @@
 library lib2;
 import "dart:async";
 import "lib3.dart" as l3;
-@def_2_1 import "lib4.dart" as l4;
-
-const def_2_1 = const DeferredLibrary("lib4_2");
+import "lib4.dart" deferred as lib4_2;
 
 foo2() {
-  def_2_1.load().then((_) {
-    l4.bar2();
+  lib4_2.loadLibrary().then((_) {
+    lib4_2.bar2();
   });
   return () {return 2+l3.foo3();} ();
 }
diff --git a/tests/compiler/dart2js/deferred_not_in_main_test.dart b/tests/compiler/dart2js/deferred_not_in_main_test.dart
index 65e70fb..e2ba40a 100644
--- a/tests/compiler/dart2js/deferred_not_in_main_test.dart
+++ b/tests/compiler/dart2js/deferred_not_in_main_test.dart
@@ -72,13 +72,12 @@
   "lib1.dart":"""
 library lib1;
 
-import 'dart:async';
-@def import 'lib2.dart' as lib2;
+import 'lib2.dart' deferred as lib2;
 
 const def = const DeferredLibrary('lib2');
 
 void foo1() {
-  def.load().then((_) => lib2.foo2());
+  lib1.loadLibrary().then((_) => lib2.foo2());
 }
 """,
   "lib2.dart":"""
diff --git a/tests/compiler/dart2js/dump_info_test.dart b/tests/compiler/dart2js/dump_info_test.dart
index 9b3de6e..504878e 100644
--- a/tests/compiler/dart2js/dump_info_test.dart
+++ b/tests/compiler/dart2js/dump_info_test.dart
@@ -77,7 +77,7 @@
 }
 """;
 
-const String TEST_INLINED = r"""
+const String TEST_INLINED_1 = r"""
 class Doubler {
   int double(int x) {
     return x + 2;
@@ -89,6 +89,12 @@
 }
 """;
 
+const String TEST_INLINED_2 = r"""
+  funcA() => funcB();
+  funcB() => print("hello");
+   main() => funcA();
+""";
+
 typedef void JsonTaking(Map<String, dynamic> json);
 
 void jsonTest(String program, JsonTaking testFn) {
@@ -147,7 +153,7 @@
     }));
   });
 
-  jsonTest(TEST_INLINED, (map) {
+  jsonTest(TEST_INLINED_1, (map) {
     var functions = map['elements']['function'].values;
     var classes = map['elements']['class'].values;
     Expect.isTrue(functions.any((fn) {
@@ -159,4 +165,20 @@
           cls['children'].length >= 1;
     }));
   });
+
+  jsonTest(TEST_INLINED_2, (map) {
+    var functions = map['elements']['function'].values;
+    var deps = map['holding'];
+    var main_ = functions.firstWhere((v) => v['name'] == 'main');
+    var fn1 = functions.firstWhere((v) => v['name'] == 'funcA');
+    var fn2 = functions.firstWhere((v) => v['name'] == 'funcB');
+    Expect.isTrue(main_ != null);
+    Expect.isTrue(fn1 != null);
+    Expect.isTrue(fn2 != null);
+    Expect.isTrue(deps.containsKey(main_['id']));
+    Expect.isTrue(deps.containsKey(fn1['id']));
+    Expect.isTrue(deps.containsKey(fn2['id']));
+    Expect.isTrue(deps[main_['id']].any((dep) => dep['id'] == fn1['id']));
+    Expect.isTrue(deps[fn1['id']].any((dep) => dep['id'] == fn2['id']));
+  });
 }
diff --git a/tests/compiler/dart2js/mirror_helper_rename_test.dart b/tests/compiler/dart2js/mirror_helper_rename_test.dart
index e20d6e9..f8f98fc 100644
--- a/tests/compiler/dart2js/mirror_helper_rename_test.dart
+++ b/tests/compiler/dart2js/mirror_helper_rename_test.dart
@@ -36,18 +36,18 @@
   asyncTest(() => runCompiler(useMirrorHelperLibrary: true, minify: minify).
       then((Compiler compiler) {
     DartBackend backend = compiler.backend;
-    MirrorRenamer mirrorRenamer = backend.mirrorRenamer;
+    MirrorRenamerImpl mirrorRenamer = backend.mirrorRenamer;
     Map<Node, String> renames = backend.placeholderRenamer.renames;
     Map<String, String> symbols = mirrorRenamer.symbols;
 
-    Expect.isFalse(null == backend.mirrorHelperLibrary);
-    Expect.isFalse(null == backend.mirrorHelperGetNameFunction);
+    Expect.isFalse(null == mirrorRenamer.helperLibrary);
+    Expect.isFalse(null == mirrorRenamer.getNameFunction);
 
     for (Node n in renames.keys) {
       if (symbols.containsKey(renames[n])) {
         if(n.toString() == 'getName') {
           Expect.equals(
-              MirrorRenamer.MIRROR_HELPER_GET_NAME_FUNCTION,
+              MirrorRenamerImpl.MIRROR_HELPER_GET_NAME_FUNCTION,
               symbols[renames[n]]);
         } else {
           Expect.equals(n.toString(), symbols[renames[n]]);
@@ -56,7 +56,7 @@
     }
 
     String output = compiler.assembledCode;
-    String getNameMatch = MirrorRenamer.MIRROR_HELPER_GET_NAME_FUNCTION;
+    String getNameMatch = MirrorRenamerImpl.MIRROR_HELPER_GET_NAME_FUNCTION;
     Iterable i = getNameMatch.allMatches(output);
     print(output);
     if (minify) {
@@ -76,10 +76,10 @@
   asyncTest(() => runCompiler(useMirrorHelperLibrary: false, minify: minify).
       then((Compiler compiler) {
     DartBackend backend = compiler.backend;
+    MirrorRenamer mirrorRenamer = backend.mirrorRenamer;
 
-    Expect.equals(null, backend.mirrorHelperLibrary);
-    Expect.equals(null, backend.mirrorHelperGetNameFunction);
-    Expect.equals(null, backend.mirrorRenamer);
+    Expect.equals(null, mirrorRenamer.helperLibrary);
+    Expect.equals(null, mirrorRenamer.getNameFunction);
   }));
 }
 
diff --git a/tests/compiler/dart2js/mirror_helper_test.dart b/tests/compiler/dart2js/mirror_helper_test.dart
index 68fe257..c94dd6d 100644
--- a/tests/compiler/dart2js/mirror_helper_test.dart
+++ b/tests/compiler/dart2js/mirror_helper_test.dart
@@ -15,7 +15,7 @@
 import 'package:compiler/implementation/dart_backend/dart_backend.dart' show
     DartBackend, ElementAst;
 import 'package:compiler/implementation/mirror_renamer/mirror_renamer.dart' show
-    MirrorRenamer;
+    MirrorRenamerImpl;
 
 main() {
   testWithMirrorRenaming(minify: true);
@@ -41,7 +41,7 @@
       then((Compiler compiler) {
 
     DartBackend backend = compiler.backend;
-    MirrorRenamer mirrorRenamer = backend.mirrorRenamer;
+    MirrorRenamerImpl mirrorRenamer = backend.mirrorRenamer;
     Map<Node, String> renames = backend.placeholderRenamer.renames;
     Set<LibraryElement> imports =
         backend.placeholderRenamer.platformImports;
@@ -51,7 +51,7 @@
     ExpressionStatement getNameFunctionNode = block.statements.nodes.head;
     Send send = getNameFunctionNode.expression;
 
-    Expect.equals(renames[mirrorRenamer.mirrorHelperGetNameFunctionNode.name],
+    Expect.equals(renames[mirrorRenamer.getNameFunctionNode.name],
                   renames[send.selector]);
     Expect.equals("",
                   renames[send.receiver]);
diff --git a/tests/compiler/dart2js/mirror_helper_unique_minification_test.dart b/tests/compiler/dart2js/mirror_helper_unique_minification_test.dart
index 4f77639..cd87d0d 100644
--- a/tests/compiler/dart2js/mirror_helper_unique_minification_test.dart
+++ b/tests/compiler/dart2js/mirror_helper_unique_minification_test.dart
@@ -13,7 +13,7 @@
 import 'package:compiler/implementation/tree/tree.dart' show
     Identifier, Node, Send;
 import 'package:compiler/implementation/mirror_renamer/mirror_renamer.dart' show
-    MirrorRenamer;
+    MirrorRenamerImpl;
 
 main() {
   testUniqueMinification();
@@ -36,7 +36,7 @@
   asyncTest(() => runCompiler(useMirrorHelperLibrary: true, minify: true).
       then((Compiler compiler) {
     DartBackend backend = compiler.backend;
-    MirrorRenamer mirrorRenamer = backend.mirrorRenamer;
+    MirrorRenamerImpl mirrorRenamer = backend.mirrorRenamer;
     Map<Node, String> renames = backend.placeholderRenamer.renames;
     Map<String, String> symbols = mirrorRenamer.symbols;
 
diff --git a/tests/compiler/dart2js/mirrors_used_test.dart b/tests/compiler/dart2js/mirrors_used_test.dart
index be85aec..caa07bf 100644
--- a/tests/compiler/dart2js/mirrors_used_test.dart
+++ b/tests/compiler/dart2js/mirrors_used_test.dart
@@ -60,7 +60,7 @@
     // 2. Some code was refactored, and there are more methods.
     // Either situation could be problematic, but in situation 2, it is often
     // acceptable to increase [expectedMethodCount] a little.
-    int expectedMethodCount = 430;
+    int expectedMethodCount = 431;
     Expect.isTrue(
         generatedCode.length <= expectedMethodCount,
         'Too many compiled methods: '
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index d700601..4f1ab34 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -108,7 +108,7 @@
   }
 
   /// Initialize the mock compiler with an empty main library.
-  Future init([String mainSource = ""]) {
+  Future<Uri> init([String mainSource = ""]) {
     Uri uri = new Uri(scheme: "mock");
     registerSource(uri, mainSource);
     return libraryLoader.loadLibrary(uri)
@@ -119,12 +119,12 @@
       // the interfaces of the Object class which would be 'null' if the class
       // wasn't resolved.
       objectClass.ensureResolved(this);
-    });
+    }).then((_) => uri);
   }
 
-  Future runCompiler(Uri uri) {
-    return init().then((_) {
-      return super.runCompiler(uri);
+  Future runCompiler(Uri uri, [String mainSource = ""]) {
+    return init(mainSource).then((Uri mainUri) {
+      return super.runCompiler(uri == null ? mainUri : uri);
     }).then((result) {
       if (expectedErrors != null &&
           expectedErrors != errors.length) {
diff --git a/tests/compiler/dart2js/mock_libraries.dart b/tests/compiler/dart2js/mock_libraries.dart
index 9174ae5..147be16 100644
--- a/tests/compiler/dart2js/mock_libraries.dart
+++ b/tests/compiler/dart2js/mock_libraries.dart
@@ -93,11 +93,18 @@
   }''',
   'buildFunctionType':
       r'''buildFunctionType(returnType, parameterTypes,
-                            optionalParameterTypes) {}''',
-  'buildInterfaceType': 'buildInterfaceType(rti, typeArguments) {}',
+                            optionalParameterTypes) {
+            return new RuntimeFunctionType();
+          }''',
+  'buildInterfaceType': '''buildInterfaceType(rti, typeArguments) {
+                             if (rti == null) return new RuntimeTypePlain();
+                             return new RuntimeTypeGeneric();
+                           }''',
   'buildNamedFunctionType':
       r'''buildNamedFunctionType(returnType, parameterTypes,
-                                 namedParameters) {}''',
+                                 namedParameters) {
+            return new RuntimeFunctionType();
+          }''',
   'checkFunctionSubtype':
       r'''checkFunctionSubtype(var target, String signatureName,
                                String contextName, var context,
@@ -169,6 +176,7 @@
   'propertyTypeCheck': 'propertyTypeCheck(value, property) {}',
   'requiresPreamble': 'requiresPreamble() {}',
   'RuntimeFunctionType': 'class RuntimeFunctionType {}',
+  'RuntimeTypeGeneric': 'class RuntimeTypeGeneric {}',
   'RuntimeTypePlain': 'class RuntimeTypePlain {}',
   'runtimeTypeToString': 'runtimeTypeToString(type, {onTypeVariable(i)}) {}',
   'S': 'S() {}',
diff --git a/tests/compiler/dart2js/patch_test.dart b/tests/compiler/dart2js/patch_test.dart
index 3099144..93af03d 100644
--- a/tests/compiler/dart2js/patch_test.dart
+++ b/tests/compiler/dart2js/patch_test.dart
@@ -13,14 +13,21 @@
 import 'package:compiler/implementation/elements/modelx.dart';
 
 Future<Compiler> applyPatch(String script, String patch,
-                            {bool analyzeAll: false, bool analyzeOnly: false}) {
+                            {bool analyzeAll: false, bool analyzeOnly: false,
+                             bool runCompiler: false, String main: ""}) {
   Map<String, String> core = <String, String>{'script': script};
   MockCompiler compiler = new MockCompiler.internal(coreSource: core,
                                                     analyzeAll: analyzeAll,
                                                     analyzeOnly: analyzeOnly);
   var uri = Uri.parse("patch:core");
   compiler.registerSource(uri, "$DEFAULT_PATCH_CORE_SOURCE\n$patch");
-  return compiler.init().then((_) => compiler);
+  var future;
+  if (runCompiler) {
+    future = compiler.runCompiler(null, main);
+  } else {
+    future = compiler.init(main);
+  }
+  return future.then((_) => compiler);
 }
 
 void expectHasBody(compiler, ElementX element) {
@@ -763,7 +770,14 @@
         int method() => 0;
         @patch void clear() {}
       }
-      """).then((Compiler compiler) {
+      """,
+      main: """
+      main () {
+        new A(); // ensure A and B are instantiated
+        new B();
+      }
+      """,
+      runCompiler: true, analyzeOnly: true).then((Compiler compiler) {
     World world = compiler.world;
 
     ClassElement cls = ensure(compiler, "A", compiler.coreLibrary.find,
diff --git a/tests/compiler/dart2js/sha1_long_test_vectors.dart b/tests/compiler/dart2js/sha1_long_test_vectors.dart
new file mode 100644
index 0000000..cc0d9e6
--- /dev/null
+++ b/tests/compiler/dart2js/sha1_long_test_vectors.dart
@@ -0,0 +1,142 @@
+// 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.
+
+part of sha1_test;
+
+// Standard test vectors from:
+//   http://csrc.nist.gov/groups/STM/cavp/documents/shs/shabytetestvectors.zip
+
+const sha1_long_inputs = const [
+const [ 0x7c, 0x9c, 0x67, 0x32, 0x3a, 0x1d, 0xf1, 0xad, 0xbf, 0xe5, 0xce, 0xb4, 0x15, 0xea, 0xef, 0x01, 0x55, 0xec, 0xe2, 0x82, 0x0f, 0x4d, 0x50, 0xc1, 0xec, 0x22, 0xcb, 0xa4, 0x92, 0x8a, 0xc6, 0x56, 0xc8, 0x3f, 0xe5, 0x85, 0xdb, 0x6a, 0x78, 0xce, 0x40, 0xbc, 0x42, 0x75, 0x7a, 0xba, 0x7e, 0x5a, 0x3f, 0x58, 0x24, 0x28, 0xd6, 0xca, 0x68, 0xd0, 0xc3, 0x97, 0x83, 0x36, 0xa6, 0xef, 0xb7, 0x29, 0x61, 0x3e, 0x8d, 0x99, 0x79, 0x01, 0x62, 0x04, 0xbf, 0xd9, 0x21, 0x32, 0x2f, 0xdd, 0x52, 0x22, 0x18, 0x35, 0x54, 0x44, 0x7d, 0xe5, 0xe6, 0xe9, 0xbb, 0xe6, 0xed, 0xf7, 0x6d, 0x7b, 0x71, 0xe1, 0x8d, 0xc2, 0xe8, 0xd6, 0xdc, 0x89, 0xb7, 0x39, 0x83, 0x64, 0xf6, 0x52, 0xfa, 0xfc, 0x73, 0x43, 0x29, 0xaa, 0xfa, 0x3d, 0xcd, 0x45, 0xd4, 0xf3, 0x1e, 0x38, 0x8e, 0x4f, 0xaf, 0xd7, 0xfc, 0x64, 0x95, 0xf3, 0x7c, 0xa5, 0xcb, 0xab, 0x7f, 0x54, 0xd5, 0x86, 0x46, 0x3d, 0xa4, 0xbf, 0xea, 0xa3, 0xba, 0xe0, 0x9f, 0x7b, 0x8e, 0x92, 0x39, 0xd8, 0x32, 0xb4, 0xf0, 0xa7, 0x33, 0xaa, 0x60, 0x9c, 0xc1, 0xf8, 0xd4 ],
+const [ 0x6c, 0xb7, 0x0d, 0x19, 0xc0, 0x96, 0x20, 0x0f, 0x92, 0x49, 0xd2, 0xdb, 0xc0, 0x42, 0x99, 0xb0, 0x08, 0x5e, 0xb0, 0x68, 0x25, 0x75, 0x60, 0xbe, 0x3a, 0x30, 0x7d, 0xbd, 0x74, 0x1a, 0x33, 0x78, 0xeb, 0xfa, 0x03, 0xfc, 0xca, 0x61, 0x08, 0x83, 0xb0, 0x7f, 0x7f, 0xea, 0x56, 0x3a, 0x86, 0x65, 0x71, 0x82, 0x24, 0x72, 0xda, 0xde, 0x8a, 0x0b, 0xec, 0x4b, 0x98, 0x20, 0x2d, 0x47, 0xa3, 0x44, 0x31, 0x29, 0x76, 0xa7, 0xbc, 0xb3, 0x96, 0x44, 0x27, 0xea, 0xcb, 0x5b, 0x05, 0x25, 0xdb, 0x22, 0x06, 0x65, 0x99, 0xb8, 0x1b, 0xe4, 0x1e, 0x5a, 0xda, 0xf1, 0x57, 0xd9, 0x25, 0xfa, 0xc0, 0x4b, 0x06, 0xeb, 0x6e, 0x01, 0xde, 0xb7, 0x53, 0xba, 0xbf, 0x33, 0xbe, 0x16, 0x16, 0x2b, 0x21, 0x4e, 0x8d, 0xb0, 0x17, 0x21, 0x2f, 0xaf, 0xa5, 0x12, 0xcd, 0xc8, 0xc0, 0xd0, 0xa1, 0x5c, 0x10, 0xf6, 0x32, 0xe8, 0xf4, 0xf4, 0x77, 0x92, 0xc6, 0x4d, 0x3f, 0x02, 0x60, 0x04, 0xd1, 0x73, 0xdf, 0x50, 0xcf, 0x0a, 0xa7, 0x97, 0x60, 0x66, 0xa7, 0x9a, 0x8d, 0x78, 0xde, 0xee, 0xec, 0x95, 0x1d, 0xab, 0x7c, 0xc9, 0x0f, 0x68, 0xd1, 0x6f, 0x78, 0x66, 0x71, 0xfe, 0xba, 0x0b, 0x7d, 0x26, 0x9d, 0x92, 0x94, 0x1c, 0x4f, 0x02, 0xf4, 0x32, 0xaa, 0x5c, 0xe2, 0xaa, 0xb6, 0x19, 0x4d, 0xcc, 0x6f, 0xd3, 0xae, 0x36, 0xc8, 0x43, 0x32, 0x74, 0xef, 0x6b, 0x1b, 0xd0, 0xd3, 0x14, 0x63, 0x6b, 0xe4, 0x7b, 0xa3, 0x8d, 0x19, 0x48, 0x34, 0x3a, 0x38, 0xbf, 0x94, 0x06, 0x52, 0x3a, 0x0b, 0x2a, 0x8c, 0xd7, 0x8e, 0xd6, 0x26, 0x6e, 0xe3, 0xc9, 0xb5, 0xc6, 0x06, 0x20, 0xb3, 0x08, 0xcc, 0x6b, 0x3a, 0x73, 0xc6, 0x06, 0x0d, 0x52, 0x68, 0xa7, 0xd8, 0x2b, 0x6a, 0x33, 0xb9, 0x3a, 0x6f, 0xd6, 0xfe, 0x1d, 0xe5, 0x52, 0x31, 0xd1, 0x2c, 0x97 ],
+const [ 0x64, 0x87, 0x97, 0x2d, 0x88, 0xd0, 0xdd, 0x39, 0x0d, 0x8d, 0x09, 0xd1, 0x34, 0x86, 0x0f, 0x26, 0x3f, 0x88, 0xdf, 0x7a, 0x34, 0x12, 0x45, 0x7a, 0xdf, 0x51, 0x0d, 0xcf, 0x16, 0x4e, 0x6c, 0xf0, 0x41, 0x67, 0x9b, 0x3a, 0x19, 0xfc, 0xc5, 0x42, 0xaf, 0x6a, 0x23, 0x6a, 0xb0, 0x3d, 0x66, 0xb2, 0xe8, 0xa1, 0x55, 0xd1, 0x06, 0x1a, 0xb7, 0x85, 0x9f, 0x75, 0x73, 0x27, 0x75, 0xff, 0xf6, 0x82, 0xf8, 0xf4, 0xd5, 0xe5, 0x0d, 0x3a, 0xb3, 0x77, 0x0f, 0x4f, 0x66, 0xcb, 0x13, 0x81, 0x55, 0xb4, 0x71, 0x5d, 0x24, 0x5b, 0x80, 0x69, 0x94, 0x8e, 0xa0, 0x16, 0xa4, 0x5b, 0x7e, 0xf0, 0xfd, 0xde, 0x93, 0x18, 0x8c, 0x57, 0xee, 0xf4, 0x71, 0x7f, 0x34, 0x25, 0x18, 0x1d, 0xe5, 0xb9, 0xa5, 0xd4, 0xe0, 0xa2, 0x96, 0x3f, 0x2a, 0x67, 0xa3, 0x40, 0xeb, 0x1a, 0xe9, 0x94, 0xb9, 0x8a, 0x48, 0xab, 0x19, 0xb9, 0x0a, 0xb7, 0x43, 0x91, 0xc5, 0x04, 0x26, 0xd2, 0x82, 0x87, 0xac, 0x4f, 0x1e, 0xb9, 0x3f, 0x5a, 0xf1, 0xa6, 0x8c, 0x7d, 0xae, 0x40, 0x87, 0x6b, 0x8a, 0xfa, 0xaf, 0x35, 0xa1, 0x92, 0x93, 0xc1, 0x95, 0x2e, 0x95, 0x79, 0x78, 0xab, 0xee, 0x40, 0xec, 0x32, 0xf2, 0xaa, 0x88, 0x0c, 0x95, 0x6c, 0x7e, 0xb7, 0x2f, 0x11, 0x7b, 0x39, 0x7c, 0xef, 0xcf, 0xb4, 0xe7, 0x5a, 0xce, 0x3b, 0x08, 0x17, 0x76, 0xe4, 0x6b, 0x13, 0x52, 0x1e, 0x93, 0x55, 0x9d, 0x45, 0x3e, 0x32, 0xab, 0x74, 0xeb, 0xc0, 0x85, 0x9b, 0x9a, 0x8d, 0xd4, 0xd1, 0xd3, 0x90, 0x00, 0xeb, 0xe9, 0x5f, 0x98, 0x4d, 0x80, 0xa3, 0xf5, 0x00, 0x4d, 0xc9, 0x1a, 0x05, 0x1d, 0xfb, 0xdf, 0xe9, 0x19, 0x4f, 0x4f, 0x9a, 0x48, 0x3e, 0x4e, 0x79, 0x55, 0x57, 0x7f, 0xb0, 0x93, 0x34, 0x64, 0xc6, 0x3e, 0xae, 0xc7, 0x71, 0x04, 0x4d, 0x59, 0xab, 0xc3, 0x02, 0x9a, 0x07, 0x95, 0x19, 0xf8, 0x46, 0x0a, 0x69, 0x3b, 0x25, 0xb4, 0xce, 0x20, 0x7a, 0xe9, 0xd9, 0x44, 0x7f, 0xc4, 0xc5, 0x44, 0x6e, 0x6d, 0xad, 0x23, 0x4e, 0x9a, 0xfd, 0xec, 0x0c, 0x56, 0x27, 0x98, 0xcd, 0x02, 0x97, 0x31, 0x83, 0x99, 0xe8, 0x38, 0xbe, 0x38, 0x58, 0x45, 0xc6, 0xdd, 0x79, 0xed, 0xe6, 0x6e, 0x2a, 0xe8, 0x0a, 0xfe, 0xc6, 0x73, 0x8d, 0x4d, 0x9b, 0xf4, 0x4c, 0x8d, 0x9e, 0xdd, 0xff, 0x6c, 0x5c, 0xd2, 0xc9, 0x4e, 0x34, 0x0e, 0x0d, 0xda, 0xc4, 0x03, 0x84, 0xb9, 0xa1, 0x40, 0x8c, 0x9a, 0x4b, 0x98, 0xc3, 0x7a, 0x60, 0x81, 0xd5, 0x22, 0x0f, 0xba, 0x92, 0xf1, 0xd0, 0x31, 0x44, 0xdb ],
+const [ 0xbd, 0x74, 0xe7, 0xf6, 0x07, 0xcd, 0x7d, 0x90, 0x5e, 0x90, 0x17, 0x5d, 0x67, 0x65, 0x0a, 0x6d, 0xc2, 0xf8, 0xa4, 0xe2, 0xd4, 0xab, 0x12, 0x49, 0xca, 0x88, 0x81, 0x2b, 0xda, 0x79, 0x84, 0xde, 0xcc, 0xbb, 0xb6, 0xa1, 0xba, 0x90, 0xa0, 0xe9, 0x14, 0x34, 0xdd, 0xf5, 0xe6, 0x13, 0x7b, 0xa8, 0x5e, 0x39, 0xa5, 0x98, 0x89, 0x0a, 0x7f, 0x63, 0x5d, 0x33, 0x52, 0x42, 0xfc, 0xe0, 0xe9, 0xe0, 0x37, 0x30, 0x3b, 0x6c, 0x51, 0xe5, 0x4a, 0xec, 0x06, 0x61, 0x4a, 0xd5, 0xcc, 0xce, 0x06, 0xd9, 0x59, 0x9c, 0x80, 0x01, 0x65, 0x30, 0xd7, 0xfb, 0xb1, 0xda, 0x6e, 0xb5, 0x48, 0x08, 0x4b, 0x2b, 0x05, 0xba, 0xbd, 0x7d, 0x55, 0x36, 0x42, 0x44, 0x3e, 0xfd, 0xa7, 0x26, 0xa1, 0xfd, 0x71, 0xa8, 0xbc, 0x08, 0x7c, 0x44, 0xf2, 0x85, 0xe2, 0xbc, 0xcf, 0x66, 0x1e, 0xad, 0x47, 0x5a, 0x72, 0x67, 0x3e, 0x43, 0x86, 0xfc, 0x4e, 0xea, 0x51, 0x97, 0xc4, 0xf1, 0x3c, 0x0f, 0xeb, 0x0a, 0x85, 0xbc, 0x8e, 0x67, 0xe2, 0x8a, 0xb8, 0x72, 0x68, 0x4b, 0xbe, 0xbd, 0xaa, 0x52, 0x7f, 0x3c, 0x25, 0x3d, 0xeb, 0xb2, 0xdc, 0x12, 0xc2, 0x69, 0x3f, 0x8e, 0x9e, 0x26, 0x51, 0xb9, 0x34, 0x5c, 0x0a, 0xbe, 0xd7, 0xa0, 0xfa, 0xfa, 0x3e, 0x5d, 0x30, 0x53, 0x86, 0xc9, 0x5a, 0xcb, 0x7a, 0x17, 0x2e, 0x54, 0x13, 0xef, 0x08, 0xe7, 0x3b, 0x1b, 0xd4, 0xd0, 0xd6, 0x83, 0x2e, 0x4c, 0x03, 0x5b, 0xc8, 0x55, 0x9f, 0x9b, 0x0c, 0xbd, 0x0c, 0xaf, 0x03, 0x7a, 0x30, 0x70, 0x76, 0x41, 0xc0, 0x54, 0x53, 0x56, 0xbe, 0xe1, 0x51, 0xa2, 0x40, 0x68, 0xd7, 0x06, 0x74, 0xef, 0x1b, 0xef, 0xe1, 0x6f, 0x87, 0x2a, 0xef, 0x40, 0x60, 0xfa, 0xaa, 0xd1, 0xa9, 0x68, 0xc3, 0x9c, 0x45, 0xdb, 0xd7, 0x59, 0x5d, 0xe8, 0xf4, 0x72, 0x01, 0x6b, 0x5a, 0xb8, 0x12, 0xd7, 0x7e, 0x54, 0x5f, 0xca, 0x55, 0x00, 0x0e, 0xe5, 0xce, 0x77, 0x3e, 0xda, 0xa1, 0x29, 0xea, 0xc6, 0x47, 0x34, 0x10, 0xc2, 0x49, 0x90, 0x13, 0xb4, 0xbe, 0x89, 0x5f, 0x6c, 0x0f, 0x73, 0x4b, 0xec, 0xfe, 0x99, 0x43, 0x06, 0xe7, 0x76, 0x26, 0x2d, 0x45, 0x28, 0xed, 0x85, 0x77, 0x21, 0x8e, 0x3c, 0xc5, 0x20, 0x1f, 0x1d, 0x9e, 0x5f, 0x3f, 0x62, 0x23, 0x0e, 0xb2, 0xca, 0xea, 0x01, 0x4b, 0xec, 0xfb, 0xa6, 0x0f, 0xcb, 0x1f, 0x39, 0x97, 0xaa, 0x5b, 0x3b, 0xb6, 0x22, 0xb7, 0x20, 0x5c, 0x71, 0x43, 0x48, 0xba, 0x15, 0x5c, 0x30, 0xa7, 0x9a, 0x2c, 0xea, 0x43, 0xb0, 0x70, 0xca, 0xda, 0x80, 0x7e, 0x63, 0x0b, 0x40, 0x86, 0xb1, 0x29, 0x05, 0x18, 0x98, 0xe1, 0xd9, 0xe6, 0x8d, 0x1d, 0x0e, 0xcc, 0x94, 0x29, 0xd2, 0x0d, 0x6a, 0x14, 0x03, 0xe0, 0x03, 0x5a, 0x44, 0x2b, 0x37, 0xbf, 0x50, 0x8e, 0xb8, 0x7e, 0x8e, 0xa3, 0x47, 0xa3, 0xe6, 0x84, 0x27, 0xb6, 0xd4, 0x8e, 0xd2, 0x99, 0xba, 0x65, 0xec, 0xb3, 0x7b, 0x38, 0x75, 0x4f, 0x45, 0x47, 0x42, 0x3e, 0xae, 0xa2, 0xae, 0xc4, 0x03, 0x33, 0x8d, 0xb2, 0xdc, 0xfe, 0x61, 0xcf, 0xf4, 0xa8, 0xd1, 0x7c, 0x38, 0x36, 0x56, 0x98, 0x1e, 0x18, 0x38, 0xa2, 0x38, 0x66, 0xb9, 0x1d, 0x09, 0x69, 0x8f, 0x39, 0x17, 0x5d, 0x98, 0xaf, 0x41, 0x75, 0xca, 0xed, 0x53 ],
+const [ 0xa5, 0x26, 0x38, 0xf0, 0xef, 0xb1, 0x9b, 0xff, 0x5e, 0xc9, 0x5f, 0xcd, 0xe4, 0xac, 0x9a, 0xab, 0xd9, 0x5e, 0x14, 0xd2, 0xe5, 0xf8, 0x4c, 0x55, 0x1f, 0x43, 0xbc, 0x53, 0x76, 0x85, 0x5e, 0x71, 0x51, 0x9b, 0x6f, 0x87, 0x72, 0x48, 0x73, 0x9a, 0x20, 0xcd, 0x79, 0x0b, 0x85, 0xba, 0xa0, 0x0d, 0x55, 0x03, 0xda, 0x5c, 0xb0, 0x56, 0xf0, 0x2d, 0x4a, 0xac, 0xc7, 0x60, 0xc9, 0x1f, 0xe1, 0xfd, 0x6e, 0xfb, 0x26, 0xde, 0xf8, 0x17, 0xe5, 0xa9, 0xc5, 0x66, 0x16, 0x02, 0x3b, 0xc9, 0xe2, 0xfe, 0x66, 0x27, 0x65, 0xda, 0xe2, 0xc0, 0xb2, 0xed, 0xfc, 0xbe, 0x17, 0xdb, 0x14, 0x0d, 0xa3, 0x0c, 0x46, 0x6d, 0xe6, 0x5c, 0x49, 0xc6, 0xf8, 0x14, 0x96, 0xbb, 0xbd, 0x1a, 0xcd, 0x81, 0x66, 0x64, 0x55, 0xf2, 0x3b, 0xb2, 0x43, 0xdd, 0x98, 0x7d, 0x7e, 0xa1, 0x36, 0x2a, 0x20, 0xfa, 0xac, 0x84, 0x1f, 0x1a, 0x36, 0x69, 0x2c, 0xfc, 0xb4, 0xc3, 0xdb, 0xf5, 0xf6, 0xbb, 0x05, 0x8c, 0x36, 0x29, 0x6b, 0x8b, 0xe6, 0x4e, 0x9b, 0x56, 0xad, 0xc5, 0x18, 0x7c, 0xac, 0xb7, 0xb5, 0x8c, 0x05, 0x4f, 0x42, 0x2a, 0x9e, 0x6d, 0x6a, 0x61, 0x22, 0x9f, 0xdc, 0x3b, 0x49, 0x4d, 0xa9, 0x8f, 0x5a, 0x33, 0xed, 0x1b, 0xee, 0x14, 0xb2, 0xd2, 0xf6, 0xad, 0x11, 0x77, 0xff, 0xe9, 0x9a, 0x6b, 0xb5, 0x53, 0xf7, 0xc4, 0xa6, 0xd0, 0xcb, 0x9e, 0x49, 0x8e, 0xe0, 0xb6, 0x3f, 0x38, 0x82, 0x35, 0xd8, 0x6c, 0x26, 0xc9, 0xd9, 0x6e, 0x50, 0xfa, 0x7d, 0x1e, 0xb3, 0xbc, 0xb9, 0x27, 0x99, 0x40, 0xc4, 0x7a, 0x85, 0x10, 0xd7, 0xfb, 0x17, 0x5b, 0x32, 0x79, 0x31, 0x8d, 0x5f, 0xe4, 0x58, 0x23, 0xba, 0xba, 0x5d, 0xbe, 0x31, 0xc3, 0x3c, 0x76, 0x49, 0xfe, 0x44, 0x70, 0x61, 0xdb, 0x78, 0xb3, 0x3b, 0xaa, 0x36, 0x37, 0xb8, 0x54, 0x16, 0x3f, 0xe3, 0x49, 0x15, 0xe9, 0x31, 0xb9, 0xf3, 0x04, 0x08, 0x07, 0xd9, 0x21, 0x7d, 0x7b, 0x3f, 0xed, 0x62, 0x37, 0x0d, 0xbe, 0x80, 0x6c, 0x00, 0x6b, 0x21, 0xcd, 0x50, 0x61, 0xd2, 0x44, 0x90, 0xf3, 0x66, 0xe4, 0xd5, 0xf2, 0x3e, 0x20, 0x1a, 0x7e, 0xc8, 0x3a, 0xe3, 0x1b, 0x46, 0xfe, 0x21, 0x08, 0xd1, 0xaf, 0x56, 0xcc, 0x9d, 0x42, 0xf9, 0x11, 0x7e, 0xca, 0x1c, 0xb5, 0xab, 0x34, 0x4c, 0x1f, 0xc3, 0x34, 0xb9, 0xcf, 0x0d, 0x7f, 0x97, 0x39, 0x04, 0x3b, 0xc3, 0xd4, 0x13, 0xb3, 0xaa, 0x6e, 0x9d, 0x50, 0x67, 0xc2, 0x40, 0xc5, 0x2b, 0x4c, 0x5b, 0x89, 0xe2, 0x5c, 0xcd, 0x8a, 0x13, 0x6a, 0x00, 0x20, 0x08, 0xa9, 0x27, 0x3f, 0x30, 0xde, 0xc3, 0xf2, 0xc1, 0x73, 0x6c, 0x04, 0xa1, 0xc7, 0xce, 0x00, 0x87, 0xc9, 0xf2, 0x5d, 0x5e, 0xc5, 0xbf, 0xf2, 0xea, 0x7e, 0xc0, 0xb0, 0xad, 0x7c, 0x27, 0x8f, 0x0c, 0xa7, 0x12, 0xc9, 0xae, 0x15, 0x0e, 0x47, 0x25, 0x21, 0xd9, 0x58, 0xd0, 0xbd, 0x6d, 0xa9, 0xff, 0x09, 0x39, 0x72, 0x59, 0x24, 0xb2, 0xed, 0x7b, 0x41, 0x0a, 0x0c, 0xe2, 0xfe, 0x3f, 0x6b, 0x0b, 0xf2, 0x58, 0x84, 0xd8, 0x85, 0xec, 0x22, 0x36, 0x05, 0xe3, 0x18, 0xfd, 0xf6, 0x80, 0x32, 0x18, 0xa9, 0xa0, 0x6c, 0xe5, 0x10, 0x3c, 0x62, 0xde, 0xd0, 0x35, 0x08, 0x7a, 0x98, 0x51, 0x9b, 0x4e, 0xb1, 0x80, 0xd7, 0x78, 0xd7, 0x65, 0x6b, 0x3d, 0x48, 0x11, 0xaa, 0xf1, 0x1a, 0x12, 0x83, 0x17, 0xd1, 0xac, 0xb3, 0xca, 0x31, 0x66, 0x39, 0x5c, 0x51, 0xc9, 0x0a, 0x3c, 0xf1, 0x64, 0x07, 0x1d, 0x0d, 0x13, 0x2c, 0x54, 0xb3, 0x81, 0x0a, 0x82, 0x11, 0xec, 0x77, 0x74, 0xd2, 0x28, 0x84, 0x47, 0xab, 0xe7, 0xaf, 0xd0, 0x30, 0x37, 0x5a, 0x3b, 0xed, 0x4c, 0x7c, 0xf1, 0xb2, 0x80, 0x97, 0xc0, 0x2e, 0x98, 0xea, 0x36, 0xbf, 0x49, 0xe7, 0x4d, 0x89, 0xfb, 0xe7, 0x4e, 0xc6, 0xcc, 0x1d, 0xef, 0x5c, 0xd8, 0xc8, 0xbe, 0xb5, 0xb8, 0xad, 0xc3, 0xcb, 0x48, 0xc5, 0x61, 0x82, 0xad, 0x33, 0x7e, 0x3b, 0x97, 0x78, 0xe4, 0xa6, 0xc4 ],
+const [ 0x89, 0x2a, 0xf4, 0xc0, 0x53, 0x68, 0xaa, 0x92, 0x42, 0xac, 0xed, 0xd8, 0x7d, 0x0f, 0xc6, 0x8d, 0xe4, 0x83, 0xab, 0x59, 0x52, 0x0a, 0xea, 0x62, 0x1f, 0x26, 0x4b, 0x65, 0xea, 0x90, 0xf0, 0x05, 0x95, 0x2c, 0x81, 0x63, 0x90, 0x3d, 0x86, 0xee, 0x5b, 0xd6, 0x14, 0x7d, 0x46, 0x91, 0xac, 0x9b, 0x7c, 0x82, 0x60, 0x21, 0x3f, 0x6e, 0x37, 0x0b, 0x75, 0x39, 0xd3, 0x84, 0x64, 0x9e, 0x51, 0x43, 0xba, 0x23, 0x71, 0x1a, 0xd0, 0x4b, 0xf7, 0xcc, 0x2f, 0x0d, 0x51, 0x20, 0x54, 0x85, 0x79, 0x33, 0xb0, 0xea, 0x1d, 0x12, 0xf3, 0xc0, 0xfe, 0x88, 0x8a, 0x4e, 0x96, 0x35, 0x66, 0x53, 0xfd, 0xe0, 0x00, 0xf5, 0x0d, 0x0f, 0x9a, 0xfa, 0xc5, 0xd4, 0xc7, 0x3a, 0xeb, 0xe9, 0x2d, 0x54, 0xf5, 0xff, 0x8a, 0xa1, 0x2a, 0x54, 0xf5, 0x66, 0x05, 0x84, 0x67, 0x4e, 0xda, 0xa1, 0x79, 0x17, 0xbb, 0x85, 0x6f, 0x8b, 0x9d, 0x67, 0x76, 0xb2, 0xb7, 0xad, 0x2a, 0x46, 0x2b, 0x01, 0x5b, 0x67, 0xe8, 0xa7, 0x11, 0x90, 0xcf, 0x0e, 0xcd, 0xca, 0x15, 0xa5, 0x12, 0x1f, 0xe8, 0xef, 0x24, 0x52, 0x55, 0xda, 0x10, 0xcd, 0x69, 0x4d, 0xec, 0xdb, 0x96, 0x00, 0x60, 0x17, 0x59, 0x90, 0x66, 0x25, 0x1a, 0xd3, 0x4d, 0x9f, 0x54, 0x69, 0x04, 0x52, 0xf5, 0x93, 0x95, 0xab, 0x08, 0x48, 0xf0, 0x6c, 0x91, 0x86, 0xea, 0xa3, 0xb8, 0xe7, 0x85, 0xdd, 0x2a, 0x74, 0x72, 0x97, 0xbd, 0xbd, 0xd4, 0xf5, 0x53, 0x2a, 0x47, 0xb7, 0x00, 0x8c, 0x21, 0x68, 0x6f, 0xf7, 0xf8, 0xd8, 0x81, 0xd4, 0x64, 0xcd, 0x38, 0x32, 0x05, 0xf6, 0xd4, 0x5d, 0xc8, 0x20, 0x3b, 0xb2, 0x67, 0xac, 0x9e, 0xb1, 0x2f, 0x41, 0x5a, 0x54, 0x06, 0xbe, 0x1c, 0x9f, 0xac, 0x73, 0x49, 0x79, 0x41, 0x90, 0x9d, 0xba, 0x08, 0xdd, 0x12, 0x85, 0x6a, 0xac, 0x03, 0xd8, 0x3e, 0x0d, 0x91, 0x61, 0x47, 0x40, 0x46, 0x94, 0xfe, 0x70, 0xf8, 0xfa, 0x92, 0x9e, 0xf0, 0xcc, 0x2e, 0xdb, 0x4c, 0xc0, 0x7a, 0xba, 0xa2, 0x23, 0x64, 0x05, 0xe6, 0x28, 0x20, 0xaf, 0x8e, 0x80, 0x6d, 0x0a, 0xf3, 0x2a, 0x1b, 0x3a, 0xfb, 0x8d, 0xca, 0xea, 0xf5, 0xc4, 0xf4, 0x3d, 0xc4, 0x39, 0x2e, 0x07, 0x40, 0x75, 0xaa, 0x3e, 0xd9, 0x36, 0x01, 0xab, 0x7e, 0xc2, 0x2f, 0xe5, 0xbd, 0x7c, 0xdf, 0x80, 0x2b, 0xb5, 0xea, 0x82, 0x06, 0xc4, 0x1a, 0x16, 0x19, 0x59, 0x33, 0x85, 0xe0, 0x0e, 0x34, 0x61, 0xed, 0x3f, 0xda, 0x04, 0x8a, 0x1c, 0x66, 0x39, 0xa0, 0xfc, 0xa0, 0x38, 0xd7, 0xf5, 0x1c, 0xd8, 0xff, 0xa9, 0xbc, 0x00, 0xaf, 0x62, 0x76, 0x5e, 0x2b, 0x62, 0x57, 0x5c, 0x8b, 0x74, 0xc8, 0x50, 0x1a, 0xc7, 0x11, 0xf3, 0xfd, 0xfc, 0x1b, 0x15, 0x15, 0x7e, 0x7a, 0x8f, 0x26, 0x12, 0xaa, 0x78, 0x38, 0xaf, 0x99, 0x9c, 0x3d, 0x8f, 0x66, 0x29, 0xf5, 0x86, 0x69, 0xac, 0x0f, 0x93, 0x73, 0x3c, 0x91, 0xb5, 0x57, 0xf5, 0x79, 0xff, 0xa9, 0xa9, 0xa4, 0xef, 0xc5, 0xd1, 0xf0, 0xfc, 0x13, 0xca, 0x9e, 0x6e, 0x8a, 0x3e, 0xfa, 0x72, 0x73, 0xe0, 0x3d, 0x6e, 0x70, 0x5c, 0xb2, 0x92, 0xbc, 0x8d, 0x18, 0xb0, 0xb4, 0xf1, 0x48, 0x4d, 0x97, 0x5b, 0x17, 0xf8, 0x8a, 0xe8, 0x7e, 0xda, 0xdf, 0x34, 0xf8, 0x8f, 0x96, 0xce, 0x2c, 0x34, 0x24, 0xe9, 0xcc, 0xc1, 0x74, 0x54, 0xbd, 0x99, 0x2c, 0xac, 0x78, 0x60, 0x31, 0xd0, 0xb0, 0x0d, 0x6d, 0x95, 0x35, 0x40, 0xd0, 0xbb, 0x18, 0xd5, 0x94, 0x20, 0x10, 0xb9, 0xc6, 0x34, 0x1c, 0xfc, 0x02, 0xad, 0x6a, 0x28, 0x7e, 0x7c, 0x78, 0xd2, 0x49, 0xff, 0x79, 0x6e, 0xd5, 0x78, 0xfa, 0x68, 0xb4, 0xbe, 0xc5, 0x70, 0x9f, 0x32, 0x05, 0x15, 0xbc, 0xf5, 0xac, 0x95, 0x21, 0x58, 0x12, 0xf3, 0x94, 0x94, 0xde, 0x4b, 0x94, 0xbc, 0x2a, 0x63, 0x9e, 0xef, 0xe2, 0x82, 0xa9, 0xd2, 0x6d, 0x85, 0xf3, 0x3d, 0x90, 0x2f, 0xff, 0x35, 0x8f, 0xc1, 0xde, 0x1b, 0x95, 0xca, 0xaf, 0x22, 0x55, 0x41, 0x62, 0x07, 0xf2, 0xd1, 0xc1, 0xfc, 0x1c, 0x74, 0xb0, 0xe5, 0x7d, 0x43, 0xb3, 0xc6, 0x53, 0x8d, 0xb2, 0x7c, 0x5e, 0x26, 0xf9, 0xac, 0xfc, 0x01, 0x83, 0xfa, 0x93, 0x01, 0x78, 0x7b, 0x2f, 0x0d, 0xf4, 0x6c, 0x6c, 0x63, 0x0a, 0x24, 0x97, 0x2e, 0x09, 0x47, 0x10, 0x5a, 0xfd, 0x3d, 0xf2, 0xa7, 0x79, 0xe2, 0xf6, 0xfc, 0x94, 0x7f, 0x95, 0xff, 0x32, 0xfa, 0x6d, 0xe2, 0x85, 0x49, 0xe6, 0x7f, 0xd3, 0x2c, 0x15, 0xa8, 0x79, 0x1c, 0xe1, 0xb8, 0x30, 0x7e, 0x64, 0x6e, 0x8f, 0x1d, 0x94, 0xfc, 0xd1, 0xd7, 0x22, 0x5a, 0xd9, 0x97, 0xa2, 0xe0, 0x73, 0x83, 0xed, 0x14, 0xdd, 0x76, 0xc3, 0xc1, 0x86, 0xb0, 0xb5, 0x49, 0x15, 0xcc ],
+const [ 0xa5, 0x04, 0x5d, 0x24, 0xd0, 0x75, 0x78, 0xca, 0x31, 0x98, 0x7d, 0xb3, 0xd2, 0xe2, 0x5e, 0x12, 0xea, 0x38, 0xbb, 0x1d, 0xa7, 0xa8, 0xbd, 0x64, 0x2a, 0x57, 0x42, 0x61, 0xd4, 0xba, 0x3a, 0x50, 0xc0, 0x09, 0x50, 0x41, 0x90, 0xf1, 0xce, 0x6b, 0x6d, 0x8a, 0xba, 0xc3, 0x49, 0x88, 0x45, 0xcd, 0x67, 0xb5, 0x67, 0xb2, 0x1e, 0x9f, 0xc3, 0x94, 0xda, 0x8d, 0xd0, 0x1e, 0x63, 0xb8, 0x3a, 0x5f, 0x62, 0xb8, 0x86, 0xd8, 0x21, 0x3d, 0xf6, 0xd3, 0x92, 0xff, 0xac, 0xf7, 0x93, 0xf8, 0x11, 0x1a, 0x70, 0xd0, 0x78, 0x56, 0xa9, 0x99, 0xff, 0x5f, 0xf6, 0xbc, 0xb6, 0x13, 0x89, 0x33, 0x04, 0x53, 0x93, 0xf9, 0x46, 0x12, 0x09, 0xbf, 0xb8, 0xab, 0xa8, 0xe1, 0x99, 0x78, 0x37, 0x98, 0x8a, 0xa0, 0x0c, 0x71, 0x38, 0x30, 0xd1, 0xfe, 0x3a, 0x6e, 0x88, 0xcb, 0x3d, 0x6a, 0xcd, 0x93, 0x5e, 0xd5, 0x5b, 0xb4, 0xd7, 0x16, 0xd2, 0xe1, 0xde, 0x9b, 0xb8, 0x17, 0xca, 0x6d, 0xbd, 0xd2, 0x78, 0x08, 0x43, 0x80, 0xed, 0x69, 0x1d, 0x36, 0x3c, 0x68, 0x97, 0xa2, 0xaa, 0x48, 0xb7, 0x41, 0x11, 0x8d, 0xc3, 0xd1, 0x82, 0x0d, 0x03, 0x0a, 0x2e, 0x4a, 0xc8, 0x89, 0x87, 0xff, 0xae, 0x0d, 0xa2, 0xf9, 0x1d, 0xe5, 0xe0, 0x28, 0x16, 0xa9, 0xcd, 0xf6, 0x2c, 0x29, 0x48, 0xd7, 0xd0, 0xa3, 0xe5, 0x22, 0xd2, 0x39, 0x8f, 0x1f, 0x25, 0xa1, 0x72, 0x61, 0xe3, 0x1f, 0x18, 0x56, 0x90, 0xb0, 0xd1, 0x1c, 0xa3, 0x88, 0x59, 0x96, 0x42, 0xbf, 0xb5, 0xc0, 0x4e, 0x48, 0x5e, 0x3f, 0x9f, 0x22, 0xa1, 0x3d, 0x91, 0xd2, 0x46, 0x73, 0xbf, 0x10, 0x70, 0x87, 0x0e, 0xc1, 0xc4, 0x99, 0xee, 0x25, 0xcd, 0x19, 0xdc, 0x52, 0x9f, 0xdb, 0x2b, 0xe1, 0xbb, 0x6d, 0x05, 0xe7, 0x33, 0xa8, 0xad, 0x27, 0x0f, 0x85, 0x06, 0x85, 0xee, 0x32, 0x59, 0xbe, 0xf1, 0x65, 0x53, 0x57, 0xd4, 0xf1, 0x4d, 0xd3, 0x5e, 0x97, 0xd1, 0x29, 0xfc, 0x1e, 0x59, 0x75, 0xa9, 0xa5, 0x59, 0xee, 0x10, 0x39, 0x80, 0x18, 0xf5, 0xa3, 0x3b, 0x3b, 0xd1, 0x83, 0x7c, 0x13, 0xbc, 0xa3, 0xb9, 0xc9, 0x90, 0x85, 0x37, 0x22, 0x4c, 0x3e, 0x88, 0xf7, 0xb6, 0x87, 0x53, 0xe5, 0x45, 0x12, 0x53, 0x45, 0x3d, 0x1a, 0xa2, 0x5e, 0x1c, 0x3e, 0x38, 0xda, 0x35, 0x8f, 0xae, 0x77, 0x9b, 0xe8, 0x48, 0xff, 0x40, 0x7e, 0x33, 0x7a, 0x5e, 0xb7, 0x0b, 0xa2, 0x16, 0x40, 0xa1, 0x97, 0x58, 0x5a, 0xfa, 0xd4, 0x02, 0x74, 0x9b, 0x62, 0x4c, 0xff, 0x03, 0x4b, 0x63, 0x7e, 0x7a, 0x52, 0x54, 0xdc, 0x09, 0xe1, 0x2c, 0x03, 0xca, 0x43, 0x5d, 0xaa, 0x62, 0x13, 0x64, 0x6e, 0xcb, 0xf5, 0xa9, 0x25, 0x57, 0x84, 0xa7, 0x6f, 0xf1, 0x8b, 0x4c, 0x8d, 0xa6, 0x77, 0xa3, 0x77, 0x65, 0x0c, 0xb0, 0x28, 0x03, 0x58, 0x9c, 0x3d, 0x82, 0xe5, 0x12, 0xbe, 0x93, 0x33, 0xe8, 0x3c, 0x59, 0x65, 0x02, 0x1c, 0x70, 0x3b, 0x73, 0x32, 0x2e, 0x40, 0xe6, 0x92, 0x29, 0x45, 0x3d, 0xa2, 0xf9, 0x0d, 0x77, 0x74, 0x3f, 0x4a, 0xd7, 0x53, 0xe6, 0xc8, 0x42, 0x9c, 0xa8, 0xe9, 0xea, 0xd0, 0xd4, 0x51, 0x29, 0xe6, 0x4f, 0xe2, 0xaf, 0xe6, 0xd9, 0xeb, 0xe0, 0xb3, 0x92, 0x9c, 0x78, 0x28, 0xbd, 0xbe, 0x71, 0x67, 0xc3, 0xa1, 0x26, 0x6e, 0x7b, 0x55, 0xb8, 0xec, 0xa8, 0x1c, 0xb1, 0x52, 0xc4, 0x20, 0xe7, 0x2c, 0xfc, 0x62, 0xa4, 0xb2, 0x7b, 0xf3, 0x03, 0x9a, 0xeb, 0x66, 0x9d, 0x31, 0x39, 0x85, 0x65, 0xaa, 0x99, 0x43, 0xd1, 0xb6, 0xcb, 0xf2, 0x3b, 0x55, 0x9c, 0xb6, 0x86, 0xeb, 0xaf, 0x3a, 0x04, 0x96, 0x7d, 0xa1, 0x97, 0xbf, 0x9b, 0xc0, 0x17, 0xef, 0x3c, 0x8a, 0xf4, 0xe4, 0xf6, 0xcb, 0x1d, 0xe5, 0xc9, 0x1a, 0x20, 0x52, 0x5d, 0x08, 0x92, 0x7f, 0x8b, 0x9e, 0xb1, 0xc2, 0x1f, 0x07, 0x48, 0xcb, 0xdc, 0x89, 0xd3, 0x34, 0xc1, 0xba, 0xe4, 0x59, 0x8b, 0xf0, 0xc5, 0x6a, 0x7b, 0xf9, 0x5f, 0xbf, 0x59, 0x0c, 0x5a, 0x6b, 0xb9, 0x00, 0x86, 0x13, 0x7d, 0xbc, 0x7a, 0x01, 0x9b, 0xef, 0x7b, 0x74, 0x21, 0x01, 0x9f, 0x3a, 0x76, 0x49, 0x31, 0x81, 0xe2, 0x80, 0x58, 0xeb, 0x50, 0x75, 0xf4, 0xe0, 0x53, 0x03, 0xc9, 0x28, 0x68, 0x40, 0xdf, 0xb9, 0x7b, 0xf8, 0x28, 0xcd, 0xac, 0x5a, 0x64, 0x38, 0x52, 0xf0, 0x42, 0xf9, 0x40, 0xd5, 0xc8, 0x0f, 0x48, 0x22, 0xf4, 0x8e, 0xfe, 0xa9, 0xa4, 0xf1, 0xbe, 0xe6, 0xb3, 0xb2, 0xf1, 0x32, 0x65, 0x18, 0x8b, 0x3a, 0x05, 0x51, 0xd8, 0xb0, 0xcc, 0xc0, 0x79, 0x40, 0x05, 0x98, 0xaa, 0xc6, 0x6f, 0xaa, 0xc6, 0xbe, 0xe3, 0x7b, 0x0c, 0xfb, 0x36, 0x9a, 0xa3, 0x9d, 0x61, 0x30, 0xdc, 0x3d, 0xdf, 0xd9, 0xb8, 0x6a, 0x57, 0xb2, 0xaa, 0x59, 0x7b, 0xb4, 0x9d, 0xd8, 0x30, 0x40, 0x39, 0x84, 0xef, 0xfa, 0x62, 0x3c, 0x6b, 0xdb, 0x02, 0xd5, 0x74, 0x82, 0x09, 0x0f, 0x1b, 0xcb, 0xb2, 0xc8, 0x17, 0xa3, 0x07, 0x70, 0x67, 0x1b, 0xa7, 0xbd, 0x39, 0xbb, 0xc7, 0xa0, 0x0b, 0x18, 0x77, 0x77, 0x10, 0xa8, 0x26, 0x84, 0xd5, 0xd6, 0x69, 0x9e, 0x24, 0x52, 0xf8, 0x26, 0x29, 0xab, 0xf9, 0x3d, 0xd3, 0x1f, 0x82, 0x34, 0x7d, 0xb2, 0x59, 0x44, 0xce, 0x7d, 0xfe, 0x80, 0xdd, 0x49, 0xeb, 0x07, 0x99, 0x5c, 0x1a, 0x7e, 0x69, 0x93, 0xc8, 0xbe, 0x0f, 0xb1, 0x79, 0xc9, 0xd2, 0xf7, 0x3c, 0x03, 0xdc, 0xf5, 0x30, 0x9f, 0xe1, 0x9f, 0x47 ],
+const [ 0x91, 0x2e, 0x0d, 0xc2, 0x5b, 0x52, 0x54, 0x0f, 0x4d, 0x33, 0xd2, 0x6f, 0xdc, 0xba, 0xdd, 0xb4, 0x20, 0xf5, 0x57, 0x01, 0x41, 0xbc, 0xcb, 0x8c, 0x2c, 0x94, 0xb8, 0xa3, 0x8a, 0xd3, 0x2d, 0xed, 0xf2, 0x05, 0x96, 0xf3, 0x5d, 0x8f, 0xd6, 0xde, 0xdb, 0x92, 0x96, 0x82, 0x85, 0x12, 0xdc, 0x9c, 0xb3, 0x58, 0xdf, 0x58, 0x6f, 0x94, 0x1a, 0x17, 0x29, 0xc7, 0x9f, 0x6e, 0xac, 0xe0, 0xae, 0x72, 0x50, 0x25, 0x86, 0x33, 0x71, 0xd5, 0x7b, 0x86, 0x21, 0x0c, 0x49, 0x08, 0x1a, 0xe6, 0xa8, 0x5f, 0xf6, 0xe7, 0x20, 0xc3, 0xa3, 0x9b, 0x1f, 0xbe, 0x11, 0x79, 0x49, 0x2f, 0x2d, 0x0d, 0x0f, 0x95, 0x13, 0x57, 0x83, 0x8a, 0x7f, 0x6e, 0x6a, 0x8e, 0x85, 0x68, 0x93, 0x06, 0x83, 0x7e, 0x68, 0x84, 0x53, 0x6c, 0xc3, 0x49, 0xc5, 0x17, 0x03, 0x09, 0x4c, 0x72, 0x5e, 0xee, 0xf7, 0xa2, 0x79, 0xdf, 0xa3, 0x61, 0x35, 0x01, 0x70, 0xa0, 0xcc, 0x7e, 0x71, 0x70, 0x1e, 0x86, 0xa8, 0x22, 0x45, 0x94, 0x31, 0xad, 0x6f, 0xf3, 0xbd, 0x51, 0xed, 0x80, 0x42, 0x7a, 0x87, 0xb1, 0xf1, 0xe7, 0x13, 0xd6, 0x69, 0x0b, 0x46, 0x9f, 0x2a, 0xb4, 0xc9, 0xdf, 0x4c, 0xea, 0x8f, 0x8f, 0x71, 0x1a, 0x67, 0x16, 0xf8, 0x74, 0xcd, 0xc8, 0x73, 0x91, 0x06, 0xac, 0x5b, 0x59, 0x6c, 0x82, 0x03, 0x24, 0x06, 0x04, 0xcb, 0x1f, 0x5b, 0x6d, 0x96, 0xf2, 0x88, 0x38, 0x7e, 0x9f, 0x91, 0x2a, 0xc6, 0xad, 0xf5, 0x92, 0x0f, 0x87, 0x85, 0xd0, 0xcf, 0x1f, 0x75, 0x14, 0x00, 0xd6, 0xb4, 0x68, 0x15, 0xa0, 0x79, 0xf1, 0x32, 0x63, 0x1f, 0x71, 0x9c, 0xa1, 0x32, 0x11, 0x6f, 0x57, 0xca, 0x5e, 0x8f, 0x25, 0x17, 0x91, 0xe0, 0xae, 0x3e, 0x13, 0xba, 0x42, 0x63, 0x40, 0x97, 0xbb, 0x07, 0x6c, 0x0f, 0xa4, 0x95, 0x23, 0x07, 0xa1, 0x37, 0xb5, 0x25, 0x0a, 0xee, 0xf2, 0x87, 0xda, 0xe2, 0x33, 0xb4, 0xc8, 0xf7, 0x9a, 0xd2, 0xb3, 0xa0, 0x9a, 0x1a, 0x43, 0xf8, 0xb9, 0x8a, 0xce, 0x0f, 0x94, 0xd9, 0x78, 0x81, 0x24, 0xb0, 0x9f, 0x4e, 0x41, 0x17, 0x76, 0xe5, 0x64, 0x2e, 0xef, 0x82, 0xb1, 0x1d, 0xdf, 0xba, 0x35, 0x4d, 0x5d, 0x55, 0x6c, 0xd9, 0x6a, 0x5b, 0x06, 0x3f, 0xd8, 0x71, 0xea, 0x5c, 0x64, 0x66, 0x7c, 0x97, 0x26, 0x0a, 0x1b, 0x5c, 0x2b, 0x3f, 0xee, 0xcc, 0x60, 0x52, 0xe1, 0xb2, 0xb1, 0x8b, 0xea, 0xb9, 0x73, 0x02, 0x91, 0xdd, 0xff, 0xb5, 0xaf, 0x20, 0xa0, 0xd8, 0x76, 0x7e, 0xb0, 0x6c, 0xb1, 0x22, 0xfd, 0x13, 0x4d, 0xda, 0x72, 0x23, 0x19, 0xc9, 0xf3, 0xf9, 0xca, 0x5c, 0x88, 0x90, 0x42, 0x7f, 0xbe, 0x52, 0x12, 0x10, 0x4a, 0x2d, 0x3d, 0x93, 0xf0, 0xea, 0x3f, 0x28, 0xa3, 0xba, 0x4d, 0xbb, 0xee, 0x12, 0xdf, 0x7b, 0x92, 0xb9, 0x6c, 0x8d, 0x71, 0x20, 0x74, 0x01, 0xaa, 0xf1, 0xc4, 0x05, 0x06, 0xea, 0xf6, 0x58, 0x93, 0xec, 0x37, 0x02, 0x8e, 0x4f, 0x4d, 0x43, 0x86, 0x79, 0xd8, 0xc9, 0xbf, 0xaf, 0xd7, 0x25, 0xd5, 0x2a, 0x6f, 0x80, 0xa1, 0x6e, 0xe8, 0x8a, 0x60, 0xd7, 0xf9, 0xb4, 0x12, 0x75, 0x45, 0x9f, 0x21, 0x1a, 0x25, 0xd4, 0x43, 0xb0, 0xa8, 0xb5, 0xa1, 0xd0, 0xd8, 0xb4, 0x39, 0x91, 0x3f, 0xc2, 0x81, 0x9e, 0xaa, 0x0a, 0x4d, 0x8c, 0x2d, 0xe0, 0xf2, 0x6a, 0x67, 0xf4, 0xac, 0x99, 0x07, 0xcc, 0x3d, 0xde, 0x8f, 0x71, 0xd7, 0xb5, 0x59, 0x68, 0x3c, 0xe8, 0xd7, 0xe3, 0x24, 0x61, 0x1e, 0x39, 0xdf, 0x3c, 0xa6, 0x94, 0x3b, 0x21, 0x4b, 0xe9, 0xa8, 0xd1, 0x98, 0x2e, 0x9a, 0xfe, 0x45, 0xc7, 0x2f, 0x60, 0xfe, 0x41, 0x12, 0x05, 0x67, 0x42, 0x9f, 0xe9, 0x5c, 0xc0, 0x48, 0xc6, 0x7d, 0x72, 0x37, 0x2d, 0xea, 0x84, 0x34, 0xd6, 0x4b, 0x8f, 0xca, 0x35, 0x14, 0xc8, 0xa5, 0x4d, 0x07, 0x78, 0x3f, 0xc9, 0xfa, 0xac, 0xbc, 0x49, 0xda, 0x2d, 0x12, 0xfa, 0xf0, 0xb2, 0x6c, 0x69, 0x63, 0x55, 0xd1, 0x99, 0xfe, 0x44, 0x00, 0x53, 0x34, 0xb9, 0x9f, 0xbd, 0x61, 0x2c, 0x95, 0x2e, 0x53, 0xc7, 0xb5, 0x41, 0x09, 0x1a, 0x9c, 0x28, 0xba, 0x10, 0xdc, 0x43, 0x1a, 0x21, 0x5a, 0xf1, 0xd8, 0xca, 0xf4, 0xa7, 0x6b, 0x3a, 0x67, 0x3f, 0x0e, 0x4f, 0x70, 0x92, 0x09, 0xc0, 0x32, 0x48, 0x33, 0x9c, 0xd8, 0xef, 0xb5, 0xf3, 0x7b, 0x4b, 0x10, 0xd2, 0x46, 0xed, 0x62, 0x75, 0xd8, 0x07, 0xe5, 0xb9, 0xe9, 0x7f, 0xb8, 0xd0, 0x31, 0x42, 0xe2, 0x38, 0x85, 0xdb, 0x94, 0xee, 0x44, 0x44, 0xae, 0xdf, 0xf1, 0xfc, 0x85, 0x9f, 0x21, 0x59, 0xe3, 0x5d, 0x98, 0x20, 0x50, 0x17, 0xaf, 0x53, 0x90, 0x0a, 0xf9, 0x4a, 0x6d, 0x6d, 0x25, 0x05, 0xb7, 0x5e, 0x26, 0xc1, 0x88, 0x1d, 0x92, 0xc9, 0xcc, 0x78, 0x48, 0x8f, 0x01, 0x86, 0x56, 0xfb, 0x3c, 0x98, 0x1a, 0x03, 0x6d, 0x6d, 0xa7, 0x7c, 0xe3, 0xa5, 0x69, 0x30, 0x13, 0x78, 0x0d, 0x30, 0x95, 0xa8, 0x9b, 0x6c, 0x6f, 0xb4, 0xe5, 0x80, 0x96, 0x4f, 0x25, 0xd1, 0xb2, 0x10, 0xe2, 0xd9, 0x22, 0x6b, 0x13, 0xbf, 0x40, 0xe0, 0x87, 0x2b, 0xe6, 0x72, 0x84, 0x58, 0x31, 0x5b, 0xaf, 0x6b, 0x84, 0xfe, 0x2b, 0x03, 0xd0, 0x1d, 0x05, 0x11, 0x13, 0x4c, 0xd0, 0xea, 0x1f, 0xa6, 0x8c, 0x9a, 0x9d, 0xbe, 0xcd, 0x7b, 0x51, 0xd9, 0x19, 0x07, 0xa0, 0x5a, 0x91, 0xeb, 0x4f, 0x7d, 0xd3, 0x5c, 0x8d, 0x48, 0x20, 0xae, 0x34, 0xbf, 0xba, 0x23, 0x4c, 0x58, 0x90, 0x01, 0xd1, 0xae, 0x1d, 0xe7, 0xb5, 0x79, 0x8e, 0x60, 0x29, 0xbe, 0x23, 0xb9, 0x19, 0x43, 0xd7, 0x10, 0xf5, 0x46, 0x43, 0xae, 0xb7, 0x6e, 0xc0, 0x97, 0x22, 0x02, 0xcc, 0x5e, 0x47, 0x59, 0xaf, 0x3e, 0x4e, 0x92, 0x5e, 0x67, 0x73, 0x85, 0x9f, 0x96, 0x4f, 0xf8, 0x6e, 0xe8, 0x59, 0x17, 0x9f, 0xf0, 0xac, 0x1e, 0xc6, 0x07, 0x0b, 0x59, 0x54, 0xe3, 0x22, 0x4e, 0x02, 0x6c, 0x0e, 0x39, 0x73, 0xca, 0x20, 0xb8, 0x14, 0xc3, 0xde, 0xc8, 0x48, 0x44, 0x4b, 0xf0, 0xc2, 0x3d, 0x69, 0xbc, 0x31, 0xb2, 0xfb, 0x6d, 0x23, 0x10, 0x8f, 0xef, 0x23, 0xbd, 0xbc, 0x0b, 0x25, 0xf2, 0xa9, 0xde, 0x25, 0xcd, 0xce ],
+const [ 0x22, 0x98, 0x09, 0x6d, 0x8a, 0x02, 0x22, 0x5d, 0x4a, 0x5a, 0x91, 0xe9, 0x5b, 0x43, 0xbe, 0xe7, 0x0f, 0x5a, 0x23, 0xf9, 0x52, 0x69, 0xb1, 0x60, 0x2f, 0xde, 0x6f, 0x11, 0x96, 0x7b, 0x65, 0x0b, 0x5c, 0x4e, 0xb8, 0xe7, 0x83, 0xe4, 0x16, 0xb1, 0xbc, 0xba, 0x54, 0xf6, 0x2a, 0xf4, 0x56, 0x1e, 0x69, 0x51, 0x30, 0xfc, 0xcf, 0x5f, 0x8a, 0xa4, 0xf1, 0xeb, 0x49, 0x7d, 0x69, 0xbc, 0x6c, 0x97, 0xd7, 0x81, 0x33, 0x3e, 0x26, 0x07, 0x87, 0xcf, 0x11, 0xaf, 0x96, 0xca, 0xe5, 0x20, 0xbe, 0x29, 0x88, 0x39, 0xac, 0xf0, 0xba, 0x49, 0xc5, 0x06, 0x9b, 0x83, 0xc4, 0x43, 0x6d, 0xac, 0xa5, 0xca, 0x9c, 0x17, 0xc3, 0x99, 0xfb, 0xd3, 0x3d, 0x5e, 0x51, 0x23, 0x9d, 0x8c, 0x14, 0x2e, 0xbc, 0xaf, 0x74, 0xf8, 0xe0, 0xfd, 0x9c, 0x91, 0x28, 0x2d, 0x34, 0x8d, 0x2a, 0x8c, 0x2a, 0xb3, 0xda, 0x4d, 0xb2, 0xfa, 0xae, 0x20, 0x8b, 0xb1, 0xff, 0x07, 0x84, 0xfd, 0xb3, 0x65, 0x40, 0x88, 0x19, 0x58, 0x36, 0x78, 0x14, 0x49, 0xfb, 0x9e, 0x7c, 0xc2, 0xc4, 0xf0, 0xc1, 0x7f, 0x27, 0x3a, 0xd1, 0xc7, 0x21, 0x10, 0x3c, 0xfd, 0x5d, 0x07, 0x96, 0x72, 0xb3, 0x25, 0x1e, 0x7d, 0xf0, 0x95, 0x9c, 0xce, 0xd5, 0x9f, 0x90, 0xff, 0x62, 0xd8, 0x88, 0x6c, 0x54, 0x96, 0xd2, 0x45, 0xec, 0xa7, 0x53, 0xe1, 0xf2, 0x43, 0xb7, 0x55, 0xfa, 0x3e, 0xcb, 0x46, 0xe6, 0x82, 0x26, 0xfb, 0xac, 0xbd, 0x0f, 0xb6, 0x59, 0x57, 0x9b, 0x45, 0x56, 0xa7, 0x16, 0xd4, 0xea, 0x66, 0xa4, 0x05, 0x01, 0x64, 0x28, 0x43, 0x2c, 0x79, 0x65, 0x53, 0xe8, 0xbf, 0x64, 0x2b, 0x23, 0xfe, 0x15, 0x08, 0xfc, 0x68, 0x38, 0xbb, 0xcb, 0x87, 0x7e, 0x43, 0x61, 0x73, 0xec, 0xa1, 0x91, 0x48, 0x81, 0xe8, 0xef, 0xd7, 0x18, 0x94, 0xd7, 0x9c, 0x90, 0x1c, 0xb1, 0xf1, 0x29, 0xcb, 0x74, 0x80, 0x31, 0xcb, 0x69, 0xfe, 0xe1, 0x83, 0x32, 0x17, 0x82, 0x23, 0x0a, 0xa4, 0xd3, 0x7c, 0x4e, 0x24, 0xaf, 0x16, 0x3d, 0x6a, 0xeb, 0x7c, 0xfc, 0x93, 0x7e, 0xdb, 0xdc, 0x3b, 0xe4, 0xcb, 0xe0, 0xf1, 0xc4, 0x6d, 0x7a, 0xe7, 0xd0, 0xb6, 0x96, 0xee, 0xec, 0x0a, 0xd9, 0xa2, 0x93, 0x0d, 0x2b, 0xe2, 0x77, 0xb6, 0x73, 0x84, 0x68, 0xa5, 0xa1, 0x46, 0x77, 0xb6, 0xf2, 0x07, 0x5b, 0xd6, 0x6f, 0x37, 0x14, 0x15, 0xb8, 0x8c, 0xce, 0xfd, 0xff, 0xf6, 0x07, 0x22, 0x57, 0xd6, 0xf4, 0xfb, 0x2f, 0x6b, 0x21, 0xf0, 0x19, 0x8c, 0x59, 0xb4, 0xd1, 0x9d, 0xc5, 0xd5, 0x7a, 0xbc, 0x57, 0x92, 0x2a, 0x3b, 0x6a, 0xec, 0xa9, 0x53, 0xa2, 0x00, 0x76, 0x16, 0x1a, 0x93, 0x0b, 0xa6, 0xbe, 0xef, 0x62, 0xa5, 0xf5, 0xee, 0xb8, 0xec, 0x84, 0x54, 0x91, 0x80, 0xaf, 0x61, 0xfc, 0xc1, 0xa0, 0xa7, 0x18, 0xe5, 0x0d, 0x1a, 0xd7, 0xa5, 0x16, 0x66, 0x02, 0x36, 0x6c, 0x85, 0x7e, 0x7b, 0xb8, 0x90, 0xcd, 0x79, 0x3b, 0xd5, 0xd7, 0x0b, 0xb1, 0x2b, 0xeb, 0xd7, 0x7c, 0x82, 0x01, 0x80, 0xfe, 0xbe, 0x42, 0x1e, 0x47, 0xc6, 0xca, 0xeb, 0xf0, 0xd7, 0xac, 0x3e, 0x46, 0x1f, 0x36, 0xbe, 0xac, 0x87, 0x77, 0xcf, 0x3a, 0xd0, 0xff, 0x51, 0xaa, 0xe1, 0xe6, 0x8a, 0x75, 0x5f, 0x10, 0x60, 0x39, 0x7f, 0xae, 0xcc, 0x5e, 0x18, 0x08, 0x8b, 0xf9, 0xfd, 0x7b, 0x17, 0xf0, 0x89, 0xbd, 0xd5, 0x60, 0x7b, 0x69, 0x90, 0x3b, 0x04, 0xb7, 0x26, 0x36, 0x1f, 0x8a, 0x81, 0xe2, 0x21, 0xb1, 0xc9, 0x18, 0x91, 0x66, 0xd8, 0x9b, 0x39, 0x1b, 0xef, 0xf9, 0x7d, 0x77, 0xa7, 0xb2, 0xec, 0x9b, 0x2a, 0x9c, 0x15, 0xa9, 0xa2, 0x86, 0x9c, 0x87, 0xf2, 0x1c, 0x8d, 0xe0, 0xa5, 0x0b, 0xef, 0x6c, 0x23, 0x65, 0x9d, 0x72, 0x2b, 0x46, 0x51, 0x8b, 0x7d, 0xb8, 0x02, 0xa8, 0xd7, 0xd4, 0x70, 0x56, 0x23, 0x2a, 0xfd, 0x41, 0xef, 0x63, 0xbe, 0xf7, 0x1d, 0x25, 0xd2, 0xef, 0xdc, 0x37, 0xf2, 0xca, 0xd7, 0xe6, 0x4a, 0xd8, 0xac, 0xa7, 0x87, 0xde, 0x9f, 0xfd, 0x32, 0x17, 0x90, 0x9d, 0x3c, 0x78, 0x2a, 0xd1, 0xda, 0x38, 0x5e, 0x1a, 0x93, 0x90, 0x0f, 0x19, 0x96, 0xc0, 0x0f, 0xaf, 0x52, 0x52, 0x4b, 0x64, 0x41, 0xa2, 0x42, 0x05, 0x04, 0x9e, 0xbc, 0x91, 0xb5, 0xcb, 0xb8, 0x57, 0x79, 0x89, 0xa6, 0x58, 0x54, 0x97, 0xd6, 0xf2, 0x42, 0xd9, 0x31, 0xc0, 0x83, 0x59, 0x27, 0xbc, 0x36, 0x8d, 0xe8, 0xa6, 0x29, 0xd8, 0xd7, 0xaa, 0xf0, 0x52, 0x3b, 0x3d, 0x34, 0xcc, 0x38, 0x48, 0x4e, 0x0f, 0xff, 0x88, 0x14, 0x65, 0x41, 0x34, 0xf3, 0x5b, 0xe9, 0xe1, 0x3f, 0xc4, 0x0a, 0xa4, 0xc6, 0x01, 0x16, 0x76, 0xab, 0x80, 0x52, 0xdc, 0x72, 0x83, 0x86, 0xc7, 0x57, 0x23, 0xf9, 0xb8, 0xe4, 0x94, 0x9c, 0x29, 0xc2, 0xaa, 0x86, 0x29, 0xd0, 0x9c, 0xa0, 0x46, 0x72, 0x09, 0xa2, 0xaf, 0x2c, 0x38, 0x3e, 0x9a, 0x6f, 0xa4, 0x9a, 0xe4, 0xb2, 0xb8, 0x04, 0xf7, 0xc5, 0xd7, 0xe2, 0xf1, 0x62, 0x9f, 0xe7, 0x03, 0x06, 0x6f, 0x8d, 0x16, 0xfe, 0x26, 0xbf, 0xb5, 0xc5, 0x2e, 0xd5, 0x27, 0x8d, 0xba, 0xc6, 0xdb, 0x1c, 0x4b, 0x99, 0x0a, 0xd9, 0x79, 0x1d, 0x97, 0x27, 0xf0, 0xda, 0x3a, 0xf1, 0xb9, 0x47, 0xdd, 0x86, 0xbb, 0x3e, 0x46, 0xa8, 0x81, 0xac, 0xf7, 0xdf, 0x3d, 0x8d, 0x52, 0x14, 0x0d, 0x18, 0x01, 0x5a, 0x7e, 0x36, 0x95, 0x0f, 0x4f, 0x39, 0x6d, 0x24, 0x77, 0xcb, 0xda, 0xb9, 0x68, 0x24, 0x80, 0xed, 0x96, 0x81, 0x00, 0xf4, 0x33, 0xd1, 0xd4, 0x6a, 0x3d, 0xb1, 0x7a, 0xe6, 0xbb, 0x9a, 0xd4, 0xd3, 0x44, 0x59, 0xcf, 0x7b, 0xc0, 0xc0, 0x43, 0x65, 0x73, 0x9c, 0x1a, 0xe1, 0x37, 0xe7, 0xb5, 0xe1, 0x08, 0x3e, 0x8b, 0x0a, 0xc6, 0x95, 0x13, 0x0b, 0x37, 0x29, 0xe5, 0x2e, 0x4c, 0xb6, 0x1c, 0x2c, 0xa5, 0xea, 0xfe, 0x46, 0x56, 0x1a, 0xdf, 0x91, 0xec, 0x35, 0x42, 0x92, 0xab, 0xf6, 0x42, 0x0a, 0x1a, 0x5d, 0x30, 0x13, 0xc2, 0x5f, 0x7e, 0x6c, 0x32, 0xdd, 0xdb, 0x12, 0x46, 0xd3, 0xa0, 0x10, 0xa9, 0xd2, 0x6b, 0x97, 0x99, 0xb0, 0x09, 0x51, 0xea, 0x7e, 0x9a, 0xf3, 0x4e, 0xba, 0xef, 0x12, 0xd3, 0xc6, 0x37, 0x37, 0xad, 0x99, 0xdb, 0x35, 0x36, 0xb5, 0xa6, 0xba, 0x33, 0x58, 0x29, 0x25, 0x59, 0xf7, 0x5e, 0x97, 0x10, 0xe8, 0x8b, 0x4d, 0x76, 0x5f, 0x69, 0x2d, 0xa7, 0x9b, 0x86, 0x9e, 0x3c, 0x61, 0xe8, 0x9d, 0x11, 0xaa, 0xf3, 0x0e, 0x4c, 0x99, 0x8d, 0x4f, 0x9a, 0xaf, 0x7f, 0x13, 0xbc, 0x42, 0x1e, 0x6e, 0x43, 0x2b, 0x2c, 0x2c, 0x97, 0xc0, 0xf9, 0x67, 0x3e, 0x02, 0xcd, 0x59, 0x5b, 0x17, 0x8a, 0x6e, 0x75, 0xfa, 0x8e, 0x9d, 0x7a, 0x71, 0xd7, 0xf9, 0x04, 0x3f, 0x6a, 0x83, 0xda, 0x9b, 0xf5, 0x43, 0xba, 0xe2, 0xb3, 0x97, 0x56, 0x89, 0x90, 0xca, 0x9c, 0x55, 0x8e, 0xe8, 0x3a, 0xce, 0x67 ],
+const [ 0xfa, 0x15, 0xcc, 0x7f, 0x0d, 0xe2, 0x94, 0xd7, 0x34, 0x1b, 0x1f, 0xd7, 0x93, 0x26, 0xc8, 0xbe, 0x78, 0xe6, 0x78, 0x22, 0x34, 0x3c, 0x19, 0x92, 0x2a, 0xce, 0x4e, 0x79, 0x25, 0x07, 0x61, 0x45, 0xef, 0x5f, 0x7d, 0xc9, 0x1f, 0xdc, 0x1d, 0xe0, 0x32, 0xd8, 0xc4, 0x54, 0xdd, 0x06, 0xef, 0xfe, 0xa2, 0xb0, 0x47, 0x2e, 0xa2, 0x42, 0x1c, 0x4d, 0xb2, 0x0c, 0x0f, 0xc0, 0xb0, 0x44, 0x0e, 0x10, 0x18, 0x4a, 0x86, 0x48, 0xd2, 0x30, 0xd3, 0x9f, 0x4e, 0x7a, 0xfc, 0x57, 0xd3, 0x22, 0x9d, 0xe5, 0x14, 0xe0, 0x24, 0x52, 0x05, 0xa8, 0x40, 0xe1, 0xec, 0x73, 0x97, 0xf2, 0xbb, 0x42, 0xb8, 0x26, 0x9d, 0x60, 0x50, 0xc4, 0xcf, 0xe8, 0xa0, 0x5c, 0xb1, 0x88, 0x2e, 0xaa, 0x1d, 0x84, 0xbb, 0xbc, 0xf7, 0xfe, 0x76, 0x57, 0x05, 0x74, 0x6f, 0x98, 0x01, 0x8a, 0x4e, 0xd7, 0xed, 0x0a, 0x45, 0xd0, 0xa7, 0x29, 0x43, 0x05, 0xbd, 0x0c, 0x6b, 0x5e, 0x82, 0x8a, 0xc4, 0x13, 0x62, 0x34, 0x32, 0xcb, 0x72, 0x92, 0xa5, 0x06, 0x4b, 0xb0, 0x90, 0xb8, 0x19, 0xd9, 0x9d, 0x36, 0xef, 0xa3, 0x9f, 0x56, 0x5e, 0x2c, 0xc7, 0xd2, 0x45, 0xa2, 0x1c, 0xee, 0xea, 0x09, 0x25, 0x5b, 0x4a, 0x38, 0xe8, 0x5a, 0xae, 0x25, 0x19, 0x25, 0x7f, 0x63, 0x8b, 0x8a, 0x5b, 0xe9, 0xea, 0xd9, 0x68, 0x15, 0xac, 0x00, 0xe9, 0xf1, 0x45, 0xf5, 0x0f, 0xb4, 0x9a, 0x54, 0x11, 0x8c, 0xb9, 0x4a, 0x7f, 0x9a, 0xc7, 0xb1, 0xd3, 0x3e, 0x39, 0x7c, 0x49, 0x96, 0x48, 0x56, 0xf0, 0x41, 0x9e, 0x86, 0x01, 0x69, 0x56, 0x16, 0x70, 0x00, 0x23, 0x34, 0xc2, 0x49, 0xcf, 0xd8, 0x1e, 0x9b, 0xe8, 0xa7, 0xa6, 0x62, 0xb6, 0x18, 0x08, 0x66, 0x6f, 0xd5, 0x4f, 0x50, 0xae, 0x64, 0x00, 0x6a, 0x22, 0x06, 0x62, 0xa6, 0x83, 0xdf, 0x1d, 0xe2, 0xcb, 0x58, 0x06, 0x6a, 0xa2, 0xc2, 0x3a, 0xbe, 0x1a, 0x3c, 0x6a, 0x96, 0x9c, 0xd6, 0x75, 0x24, 0x23, 0xf6, 0x3c, 0x99, 0xa7, 0xfb, 0xb2, 0xea, 0xdd, 0x21, 0x32, 0xd4, 0x1d, 0xa4, 0x16, 0x1e, 0xa3, 0x29, 0x85, 0x1e, 0xfb, 0x59, 0x8c, 0x7e, 0xb7, 0xcf, 0x70, 0x40, 0x63, 0x34, 0x43, 0x00, 0xbb, 0xa8, 0xb6, 0x79, 0x1b, 0x64, 0x2e, 0x4b, 0x36, 0x9e, 0x1a, 0xfc, 0x0b, 0xad, 0x83, 0x3c, 0x15, 0x6e, 0xe4, 0x6d, 0xc2, 0xe6, 0x3d, 0x62, 0x27, 0x29, 0x63, 0x67, 0xf2, 0x7a, 0x9a, 0x82, 0xa0, 0xb3, 0x65, 0xf9, 0xf0, 0xe8, 0x9d, 0x14, 0x97, 0x47, 0xc1, 0x24, 0x35, 0x42, 0x8d, 0xc4, 0x88, 0xf1, 0xce, 0x5f, 0xdf, 0xb1, 0x74, 0xf3, 0xd2, 0x12, 0xe9, 0x14, 0x31, 0xf0, 0xa1, 0x33, 0x3a, 0xdf, 0xf3, 0x20, 0x0f, 0xcd, 0x27, 0xce, 0x67, 0xe2, 0xd0, 0x57, 0x83, 0xab, 0x5c, 0x3f, 0x64, 0x78, 0xe9, 0xfd, 0x3b, 0x02, 0x5a, 0xb7, 0x21, 0x51, 0xaa, 0x4e, 0x08, 0xdd, 0x81, 0x9a, 0xf1, 0xf4, 0x05, 0xf7, 0x60, 0x5b, 0xf3, 0x00, 0x0d, 0x38, 0xee, 0x9a, 0xdd, 0x2f, 0x17, 0x35, 0x10, 0xcc, 0xdd, 0x4e, 0xbc, 0x21, 0x17, 0x38, 0x7a, 0xb0, 0x50, 0x1d, 0x5f, 0x8b, 0x61, 0x40, 0x2e, 0xb9, 0x46, 0x84, 0xcb, 0xdc, 0x2a, 0x32, 0xf3, 0x11, 0xc4, 0xf7, 0x2b, 0x18, 0xe6, 0x2c, 0xf6, 0xb5, 0x53, 0x5a, 0x4b, 0x55, 0xd2, 0xfe, 0x46, 0xf5, 0x80, 0x89, 0x1e, 0x40, 0x6a, 0xab, 0x57, 0xf7, 0x5b, 0xd1, 0x39, 0x96, 0xf3, 0xed, 0x80, 0x35, 0xf9, 0x75, 0x55, 0xac, 0xf2, 0xae, 0x7d, 0xfa, 0xf3, 0x2a, 0xd1, 0xe8, 0xb3, 0x8f, 0xee, 0xe9, 0xe4, 0x9b, 0x2d, 0x45, 0xc4, 0x65, 0xd6, 0x76, 0xef, 0xe6, 0x90, 0xd2, 0x77, 0xb7, 0x1c, 0x6b, 0x36, 0x1c, 0x43, 0x34, 0x63, 0x42, 0x0d, 0x65, 0x64, 0xc5, 0x34, 0x20, 0xe3, 0x75, 0xd8, 0x54, 0x24, 0x5a, 0x74, 0xe2, 0x96, 0xf6, 0x11, 0xfe, 0xa8, 0xc9, 0xba, 0xd8, 0xdd, 0x1b, 0x2f, 0x7c, 0x23, 0xf5, 0xde, 0xf7, 0x61, 0x71, 0x0e, 0xbc, 0x4f, 0x33, 0x5e, 0x46, 0x8a, 0x38, 0x6e, 0xfe, 0xe8, 0xcf, 0xdc, 0x5e, 0x08, 0xe4, 0x72, 0x57, 0x2e, 0x84, 0x9d, 0xf0, 0x4e, 0x9e, 0x21, 0x31, 0x67, 0x07, 0x0c, 0x3f, 0x13, 0xc1, 0xe8, 0xc8, 0x5b, 0x7d, 0x35, 0xa1, 0xcf, 0x5e, 0x17, 0xae, 0xd7, 0x00, 0x4b, 0x03, 0x44, 0xb9, 0x5f, 0x48, 0x2a, 0x1f, 0x23, 0x62, 0xf2, 0xca, 0x5b, 0x50, 0xab, 0x5b, 0xb6, 0x52, 0xa1, 0xbc, 0x04, 0x51, 0x31, 0xaa, 0xa3, 0x7b, 0xdb, 0x71, 0x3a, 0x2e, 0x99, 0xf7, 0xaa, 0x17, 0x6f, 0xfc, 0x42, 0x9b, 0x44, 0xa0, 0x33, 0x75, 0xf0, 0x26, 0x43, 0xa1, 0x96, 0xf7, 0xc5, 0x79, 0x34, 0xea, 0xc8, 0x1f, 0x78, 0xc2, 0x8f, 0x1a, 0xd6, 0xf9, 0x41, 0x44, 0xd7, 0xbc, 0xe2, 0xe3, 0xb4, 0x36, 0x82, 0x16, 0x23, 0x11, 0xb4, 0x73, 0x71, 0x3a, 0x42, 0xee, 0xd1, 0xe5, 0x1f, 0xfc, 0xf4, 0xd2, 0x9d, 0xf9, 0xd9, 0xce, 0xe0, 0xc7, 0xe7, 0x7c, 0x93, 0xb9, 0x39, 0x55, 0xd9, 0xaf, 0x39, 0xee, 0x87, 0x82, 0x70, 0x79, 0x90, 0xa2, 0x9c, 0x8f, 0xc1, 0xfd, 0x03, 0x2d, 0xae, 0x23, 0x08, 0xfc, 0xec, 0xa8, 0xfc, 0xd5, 0x80, 0xca, 0x36, 0x84, 0x98, 0x54, 0x66, 0xcc, 0x79, 0xc3, 0x26, 0xac, 0xb9, 0xa6, 0xd2, 0xe1, 0xae, 0x4b, 0x9a, 0xac, 0x26, 0x97, 0xd5, 0xd5, 0x58, 0x36, 0x98, 0xf0, 0x1b, 0xf5, 0x88, 0xdf, 0x56, 0x6b, 0xec, 0x98, 0xb8, 0xdf, 0x07, 0x29, 0xa9, 0x66, 0xa4, 0xf9, 0x80, 0x4c, 0xf2, 0x50, 0xf6, 0xb5, 0x92, 0x19, 0xda, 0x84, 0xef, 0xe7, 0x07, 0x7c, 0xce, 0x37, 0x94, 0xa5, 0x26, 0xf5, 0x4a, 0xf2, 0x31, 0x41, 0x5b, 0x20, 0xc3, 0x72, 0x50, 0xe1, 0xdb, 0x5b, 0x44, 0x3a, 0x77, 0xce, 0x50, 0x2a, 0xad, 0x5f, 0x46, 0x8c, 0xf8, 0x6a, 0xa2, 0x3e, 0xd0, 0x58, 0xbd, 0x83, 0x7d, 0x1d, 0x44, 0xa6, 0x2c, 0x05, 0xe9, 0xe1, 0x43, 0xb1, 0x58, 0x7c, 0xf2, 0x5c, 0x6d, 0x39, 0x0a, 0x64, 0xa4, 0xf0, 0x13, 0x05, 0xd1, 0x77, 0x99, 0x67, 0x11, 0xc4, 0xc6, 0xdb, 0x00, 0x56, 0x36, 0x61, 0x2c, 0xd1, 0x06, 0x6f, 0xca, 0xe8, 0x2e, 0xed, 0xa8, 0x7f, 0x11, 0x84, 0x63, 0x11, 0x53, 0x18, 0xda, 0x50, 0xeb, 0x93, 0xe2, 0x0c, 0x79, 0xe5, 0x3c, 0x56, 0xd9, 0x49, 0xc4, 0xe5, 0xf8, 0xc9, 0xea, 0xb9, 0xe6, 0x04, 0x66, 0xfd, 0x2d, 0x2f, 0x28, 0x32, 0x62, 0x5a, 0x8e, 0x8a, 0xf9, 0xf4, 0xda, 0x92, 0x5d, 0x92, 0xe3, 0x14, 0x41, 0xec, 0x0b, 0x3c, 0x30, 0x28, 0x70, 0xf9, 0x6c, 0x5c, 0x67, 0xa6, 0xf5, 0x4e, 0x26, 0xea, 0xe8, 0x7e, 0xc0, 0xdd, 0x0a, 0x66, 0x57, 0x6c, 0xa5, 0x00, 0x8c, 0xfe, 0x93, 0x89, 0x3b, 0x58, 0x98, 0x85, 0x66, 0xbd, 0xf5, 0x03, 0x6e, 0x5a, 0x39, 0x22, 0x89, 0xe2, 0x5b, 0xd4, 0x70, 0x76, 0x06, 0xe2, 0x58, 0xc7, 0x34, 0x30, 0x24, 0x7e, 0xfe, 0x43, 0xd9, 0xdc, 0xb2, 0x00, 0x52, 0x9d, 0x27, 0xb6, 0x35, 0x23, 0x4d, 0x5f, 0x25, 0xd0, 0x08, 0x23, 0x39, 0xb4, 0x3f, 0x1e, 0xad, 0x68, 0x30, 0x63, 0xd8, 0x39, 0x06, 0x41, 0x5e, 0x89, 0xad, 0xc5, 0xa7, 0x73, 0xe5, 0x7f, 0x90, 0xae, 0x95, 0x89, 0x60, 0xb4, 0x62, 0xc6, 0xfd, 0x23, 0x81, 0x68, 0x60, 0x63, 0xc9, 0xb5, 0x46, 0x89, 0x0d, 0x0a, 0x28, 0x7b, 0xa8, 0x20, 0x6e, 0x55, 0x59, 0x8e, 0xe0, 0x0c, 0x52, 0x8f, 0x5d, 0x52, 0x8b, 0x06, 0xcf, 0xb9, 0x5c, 0xbf, 0x5e, 0x1a, 0x4b, 0xf8, 0xe4, 0x38, 0x23, 0x20, 0xa1, 0xa1, 0x46, 0xde, 0x31, 0xd5, 0x43, 0x55, 0xba, 0xaa, 0xab, 0xa7, 0x6a, 0xef, 0x21, 0xb7, 0x21, 0x50, 0xb1, 0x34 ],
+const [ 0xb7, 0x18, 0xc9, 0x68, 0xe8, 0xff, 0xe4, 0xea, 0x28, 0x2f, 0xc3, 0x3f, 0x96, 0xda, 0x23, 0x3b, 0x8a, 0x8a, 0xb6, 0xdd, 0xd5, 0x57, 0x81, 0x24, 0x4a, 0x5d, 0x82, 0x23, 0x7d, 0x6d, 0x97, 0x58, 0xca, 0x03, 0x9b, 0x3a, 0x99, 0x78, 0xd2, 0x11, 0xe1, 0x79, 0x87, 0x0a, 0xeb, 0xb8, 0xf3, 0x8b, 0x59, 0xe1, 0x61, 0xc4, 0x66, 0xd0, 0x90, 0x87, 0x6f, 0x01, 0x59, 0x59, 0xb3, 0x48, 0x91, 0xc9, 0x57, 0xc2, 0x31, 0x00, 0xad, 0x0b, 0xb4, 0x9a, 0xb5, 0xb1, 0xc1, 0xb4, 0xe4, 0xe9, 0x0a, 0x46, 0x25, 0x81, 0x74, 0xb4, 0x1e, 0x16, 0x78, 0x9f, 0xb4, 0x87, 0xc9, 0x01, 0xd1, 0xa9, 0x37, 0x79, 0x64, 0x3d, 0xd3, 0xe3, 0xaa, 0x1f, 0x54, 0x2c, 0xad, 0xc0, 0xb9, 0x64, 0x0a, 0xd5, 0x30, 0x15, 0xf6, 0x51, 0x37, 0xd4, 0x83, 0x91, 0x01, 0x15, 0x20, 0xd7, 0x1b, 0x44, 0x5f, 0xfa, 0x4f, 0x11, 0xfc, 0x5c, 0xc9, 0x0b, 0x1a, 0x1b, 0x78, 0x70, 0xcf, 0x8c, 0xb7, 0x43, 0xe3, 0xe5, 0x2d, 0xa0, 0xd5, 0x39, 0xf1, 0x4d, 0x1f, 0xaa, 0xf2, 0x91, 0xbb, 0xda, 0x97, 0x49, 0xe6, 0xa2, 0xa2, 0x38, 0x24, 0x07, 0x5a, 0x9f, 0x84, 0x69, 0xe9, 0x0d, 0x25, 0xfe, 0x03, 0x79, 0xf9, 0x7f, 0xc8, 0x8e, 0xc9, 0x21, 0xec, 0x46, 0x7a, 0xc7, 0x15, 0xba, 0x8e, 0x76, 0x84, 0x39, 0xee, 0x09, 0xf8, 0x97, 0xe6, 0x26, 0xcf, 0xc7, 0x71, 0x70, 0x6f, 0xac, 0xb7, 0xfe, 0xe4, 0x2d, 0xd4, 0x0d, 0xca, 0x88, 0xdb, 0xf1, 0x6e, 0xe8, 0x1a, 0x52, 0x30, 0x39, 0xa0, 0x94, 0x2c, 0x3b, 0xfd, 0x97, 0x19, 0xd5, 0x49, 0xa1, 0x70, 0xad, 0x68, 0x98, 0xd1, 0xf5, 0x8b, 0x75, 0xa4, 0x88, 0xfa, 0xf5, 0xfc, 0x35, 0x12, 0x91, 0xc0, 0x5a, 0x89, 0xb1, 0x0c, 0xb5, 0xfa, 0x1d, 0xd5, 0x78, 0x9d, 0xb4, 0xcc, 0x9b, 0x55, 0x60, 0x85, 0x76, 0xf1, 0x49, 0xd9, 0x8f, 0xab, 0x49, 0x89, 0xb1, 0xf5, 0xa1, 0x23, 0x3e, 0x76, 0xea, 0x2a, 0xc5, 0x4f, 0x4e, 0x71, 0xd7, 0xa2, 0xf7, 0xc8, 0x17, 0x55, 0xc8, 0xda, 0x91, 0x13, 0x4b, 0x56, 0x4d, 0x94, 0xeb, 0x4d, 0x23, 0x1f, 0x64, 0xdc, 0xd0, 0x4d, 0x77, 0x0a, 0x4a, 0x0f, 0xe2, 0xf3, 0x51, 0xf2, 0x8f, 0x27, 0x47, 0xa2, 0x0c, 0x4d, 0x41, 0xad, 0x3b, 0x0c, 0x5e, 0x8a, 0x4b, 0x2b, 0x58, 0xda, 0xe6, 0xf6, 0x58, 0xed, 0xac, 0xe4, 0x0f, 0x88, 0xe1, 0x78, 0x02, 0xe6, 0x62, 0x65, 0x25, 0xfc, 0xde, 0xf5, 0xac, 0x02, 0x42, 0xab, 0x1e, 0x2e, 0x75, 0x28, 0xab, 0xc3, 0x46, 0x4b, 0xbf, 0x4a, 0xa3, 0x9c, 0xd7, 0x1f, 0x0b, 0xeb, 0x94, 0x30, 0x45, 0x34, 0x0d, 0x02, 0x53, 0xc6, 0x6a, 0xf5, 0xa2, 0xa4, 0xaf, 0xc8, 0x83, 0x2c, 0xd5, 0x5f, 0xdf, 0xf6, 0x1f, 0xc4, 0x25, 0xff, 0xab, 0x6d, 0x88, 0x07, 0x48, 0xbd, 0x68, 0x37, 0x87, 0xcc, 0x0d, 0x07, 0x15, 0x6b, 0x9b, 0x5f, 0x47, 0x63, 0x42, 0xfc, 0xf7, 0xfe, 0xb6, 0x16, 0x8f, 0xc9, 0xdf, 0x40, 0x63, 0x97, 0xd1, 0x8f, 0x44, 0xc9, 0xfe, 0xfe, 0x51, 0xcd, 0xaa, 0x11, 0x11, 0xe5, 0xa0, 0xb9, 0xbf, 0x2a, 0x24, 0x78, 0xe5, 0xd0, 0x28, 0xc5, 0x2d, 0xab, 0xc3, 0xb2, 0x73, 0xf2, 0xde, 0xcc, 0x1e, 0x44, 0x31, 0x43, 0xb1, 0xe8, 0x6e, 0x4b, 0x9d, 0x59, 0xbb, 0xc1, 0x5a, 0x02, 0x66, 0x12, 0xb5, 0x46, 0xd4, 0x59, 0x6c, 0xc3, 0xbb, 0xc7, 0xf8, 0xd8, 0x91, 0x48, 0xaa, 0x64, 0x45, 0x63, 0xf9, 0xd1, 0x2c, 0x62, 0x1b, 0x52, 0x3e, 0xb4, 0xd2, 0x68, 0x82, 0x8f, 0x89, 0xab, 0xc7, 0xda, 0x9f, 0xc7, 0x95, 0x49, 0x03, 0xc5, 0x63, 0xca, 0x01, 0x8c, 0x0a, 0x20, 0x5b, 0xa7, 0x7a, 0xcd, 0x9c, 0x48, 0xac, 0x36, 0xa9, 0x8d, 0xd8, 0x02, 0x99, 0x03, 0xe7, 0xc3, 0xc6, 0x69, 0x2b, 0xd8, 0x24, 0xb6, 0x4e, 0x92, 0xd2, 0x5d, 0x88, 0x95, 0xef, 0xcf, 0x15, 0x81, 0xaf, 0x41, 0xe7, 0xd2, 0xae, 0xb0, 0x98, 0x05, 0x84, 0x23, 0xa2, 0xfd, 0x99, 0x31, 0xd2, 0xa4, 0x3b, 0xc2, 0xfa, 0xd5, 0xed, 0x1a, 0xe7, 0x7a, 0x02, 0x13, 0x92, 0xf1, 0x6b, 0xa9, 0x9a, 0xb5, 0xce, 0xbc, 0xf2, 0x3a, 0xd8, 0x12, 0xd7, 0x18, 0xd3, 0x9c, 0x06, 0x6c, 0x7b, 0xfa, 0x2b, 0x7b, 0x0d, 0x40, 0x9c, 0x99, 0xa2, 0xfb, 0x47, 0x4a, 0xbb, 0x6f, 0xea, 0xa6, 0x1d, 0x23, 0x82, 0x02, 0xdf, 0xa0, 0x05, 0xcc, 0xc1, 0x75, 0x53, 0xb7, 0xbf, 0x7e, 0x6a, 0x18, 0xe6, 0x66, 0xda, 0x90, 0x67, 0x6b, 0x7a, 0xec, 0xea, 0x61, 0x58, 0x49, 0x24, 0xfa, 0xf6, 0x7c, 0xac, 0x44, 0xb3, 0xb1, 0x0a, 0x73, 0x87, 0x51, 0x11, 0xe1, 0xf3, 0x2a, 0x70, 0x53, 0x38, 0xca, 0x83, 0x7e, 0xc8, 0x2b, 0x6f, 0xca, 0xfa, 0x96, 0x6d, 0x55, 0x01, 0xc1, 0x66, 0x3b, 0x1f, 0x3b, 0xc1, 0x15, 0x16, 0x09, 0x79, 0xbf, 0xe0, 0x92, 0x72, 0x5f, 0x9f, 0xb8, 0x0d, 0xa2, 0xd7, 0x48, 0xfa, 0x49, 0xdb, 0x94, 0x4d, 0xe5, 0x85, 0x5e, 0xd4, 0xde, 0x2a, 0xf8, 0xa8, 0xba, 0xcd, 0xaa, 0x03, 0x9c, 0x93, 0x54, 0x51, 0x0b, 0x77, 0x54, 0x8a, 0xf5, 0x3f, 0xaa, 0xbe, 0xf4, 0xaf, 0x5a, 0xf2, 0xcf, 0xfc, 0x12, 0x2a, 0x44, 0x84, 0x0d, 0xc7, 0x05, 0xbb, 0x37, 0x13, 0x00, 0x69, 0x92, 0x1b, 0xe3, 0x13, 0xd8, 0xbd, 0xe0, 0xb6, 0x62, 0x01, 0xae, 0xbc, 0x48, 0xad, 0xd0, 0x28, 0xca, 0x13, 0x19, 0x14, 0xef, 0x2e, 0x70, 0x5d, 0x6b, 0xed, 0xd1, 0x9d, 0xc6, 0xcf, 0x94, 0x59, 0xbb, 0xb0, 0xf2, 0x7c, 0xdf, 0xe3, 0xc5, 0x04, 0x83, 0x80, 0x8f, 0xfc, 0xda, 0xff, 0xbe, 0xaa, 0x5f, 0x06, 0x2e, 0x09, 0x71, 0x80, 0xf0, 0x7a, 0x40, 0xef, 0x4a, 0xb6, 0xed, 0x03, 0xfe, 0x07, 0xed, 0x6b, 0xcf, 0xb8, 0xaf, 0xeb, 0x42, 0xc9, 0x7e, 0xaf, 0xa2, 0xe8, 0xa8, 0xdf, 0x46, 0x9d, 0xe0, 0x73, 0x17, 0xc5, 0xe1, 0x49, 0x4c, 0x41, 0x54, 0x74, 0x78, 0xef, 0xf4, 0xd8, 0xc7, 0xd9, 0xf0, 0xf4, 0x84, 0xad, 0x90, 0xfe, 0xdf, 0x6e, 0x1c, 0x35, 0xee, 0x68, 0xfa, 0x73, 0xf1, 0x69, 0x16, 0x01, 0xda, 0x2e, 0x87, 0xb0, 0x0d, 0x1c, 0x6f, 0x25, 0x64, 0x31, 0x22, 0x75, 0x76, 0x39, 0x8b, 0xf2, 0x19, 0x45, 0xcc, 0x44, 0x25, 0x59, 0x25, 0xbb, 0x7b, 0x65, 0x17, 0xe3, 0x46, 0x76, 0xc9, 0x59, 0x81, 0x2e, 0xaa, 0xde, 0xba, 0x72, 0x58, 0xaa, 0x15, 0x62, 0xc1, 0x02, 0x93, 0x8e, 0x88, 0x0d, 0x94, 0x66, 0xaa, 0xe4, 0x9b, 0xf3, 0x61, 0xe8, 0x52, 0xc5, 0x48, 0x58, 0xce, 0x2d, 0xc0, 0x23, 0x13, 0xac, 0x93, 0xfa, 0xdb, 0xaa, 0xd8, 0xaa, 0x93, 0x6b, 0x17, 0xa9, 0xa7, 0x40, 0xad, 0xee, 0xff, 0xfa, 0x71, 0x06, 0xca, 0xa4, 0x97, 0x65, 0x7a, 0x72, 0xd5, 0xfa, 0x0f, 0xf4, 0xc5, 0x06, 0x99, 0x8f, 0x8b, 0x2d, 0xf8, 0x2e, 0xb7, 0xce, 0xe7, 0x35, 0x6d, 0x90, 0x39, 0xb7, 0xc3, 0x3d, 0x61, 0xe8, 0x6a, 0xd4, 0x38, 0xd5, 0x91, 0xd9, 0xfb, 0x52, 0x06, 0xf0, 0x93, 0x34, 0x9e, 0xaa, 0x1a, 0xc1, 0xd8, 0x9f, 0x9a, 0x65, 0xbd, 0xbd, 0x18, 0xa7, 0x0a, 0xdf, 0xd1, 0x5a, 0x91, 0xa1, 0xc3, 0x18, 0xdd, 0x73, 0x6f, 0xec, 0x15, 0xed, 0xde, 0x4f, 0x22, 0x63, 0xe2, 0x56, 0x14, 0xb8, 0x9e, 0x29, 0xc2, 0x77, 0x48, 0xb7, 0xb1, 0x1f, 0x2e, 0xa8, 0x38, 0xbf, 0xf7, 0x93, 0xe1, 0xc3, 0x2c, 0x72, 0x11, 0x0e, 0xf7, 0x53, 0xec, 0x49, 0x2a, 0x50, 0x73, 0x7a, 0x82, 0xc0, 0xef, 0xd8, 0x2e, 0xaf, 0x93, 0xde, 0x8b, 0x8c, 0x5d, 0x9e, 0x32, 0x22, 0x3d, 0x58, 0x34, 0xca, 0x79, 0x4b, 0xa4, 0xde, 0x50, 0xcb, 0x56, 0x70, 0xde, 0x94, 0xe7, 0x3c, 0x3f, 0x5e, 0xfd, 0xdc, 0xf7, 0xb1, 0xd0, 0x3b, 0x91, 0xfb, 0xea, 0x4c, 0x87, 0xe0, 0x2b, 0xfc, 0x62, 0xd1, 0x0f, 0x65, 0x22, 0xe0, 0x34, 0x44, 0xe0, 0xd2, 0x16, 0xad, 0xb2, 0x76, 0x1d, 0xfd, 0xcf, 0x36, 0xdb, 0x11, 0xf4, 0xec, 0x8e, 0xb5, 0x06, 0xf7, 0xed, 0x5f, 0xf8, 0x8d, 0x21, 0x1e, 0xef, 0x52, 0x11, 0xcd, 0xa4, 0x2a, 0xe2, 0x8c, 0x0a, 0x4c, 0xbe, 0x71, 0x32, 0x99, 0xd5, 0x7a, 0x6b, 0x2b, 0xa2, 0xc6, 0xad, 0x30, 0x70, 0x05, 0x38, 0xf9, 0x1c, 0x2e, 0x78, 0x4e, 0x1c, 0x70, 0x2c, 0x05, 0xc0, 0x6a, 0xc7, 0xd3, 0xb8, 0x9e, 0x16, 0x61, 0xd7, 0x23, 0x24, 0xa2, 0x17 ],
+const [ 0x32, 0x24, 0x5d, 0xf5, 0x14, 0xf6, 0xc2, 0x73, 0xd2, 0x52, 0x27, 0x1a, 0x98, 0x09, 0x29, 0xe5, 0x0a, 0x7c, 0xb0, 0xe7, 0x7b, 0x05, 0xc7, 0xd4, 0x60, 0x92, 0xab, 0xc3, 0x04, 0x93, 0x21, 0x32, 0x7d, 0x17, 0x0d, 0x4b, 0xde, 0x31, 0x41, 0x66, 0xae, 0xa1, 0x93, 0xce, 0x99, 0xb0, 0x32, 0xc8, 0x66, 0x5c, 0x3a, 0xd1, 0x29, 0xb5, 0x85, 0x28, 0xba, 0x87, 0xc5, 0x8c, 0x65, 0x39, 0xcf, 0x47, 0xe3, 0xf5, 0x3a, 0x6b, 0x89, 0x0a, 0x29, 0x5c, 0xc0, 0x8e, 0x65, 0x8e, 0xb5, 0x47, 0xaf, 0x90, 0x52, 0xcc, 0x54, 0x4a, 0x6c, 0xe7, 0x01, 0x83, 0x3e, 0x3e, 0xd9, 0xa6, 0x16, 0x32, 0xc5, 0xc5, 0x4e, 0x08, 0x0b, 0xde, 0x7e, 0x46, 0x23, 0x5d, 0xf0, 0x60, 0xc6, 0xe3, 0x54, 0x94, 0x47, 0x46, 0xb5, 0x13, 0x26, 0xd9, 0xac, 0x61, 0xe3, 0xed, 0xd4, 0xfe, 0x10, 0x97, 0x7d, 0x46, 0xaa, 0xb4, 0xa5, 0x96, 0xa9, 0x2b, 0x24, 0xb0, 0xd6, 0x72, 0x26, 0x61, 0xdd, 0x54, 0xde, 0x61, 0xa3, 0xf1, 0x79, 0x7a, 0xd9, 0x06, 0x51, 0xec, 0xd2, 0x6e, 0x64, 0x11, 0x91, 0xe9, 0x04, 0x3d, 0x27, 0x1d, 0xd0, 0xe8, 0x3c, 0xda, 0xe2, 0x0f, 0xeb, 0xa2, 0x4a, 0xd7, 0xd3, 0x69, 0xbb, 0x74, 0x6a, 0x99, 0x85, 0x49, 0x95, 0x59, 0xc3, 0x50, 0x76, 0x0f, 0xd6, 0xbd, 0x85, 0x23, 0x12, 0xde, 0xe3, 0x07, 0xb6, 0x46, 0xeb, 0x74, 0x22, 0x2a, 0x09, 0xf6, 0x44, 0x0b, 0xcf, 0xaa, 0x54, 0x95, 0x45, 0x46, 0xc1, 0xc8, 0x81, 0x5b, 0x6b, 0x55, 0x78, 0xd7, 0x12, 0x4b, 0x14, 0xce, 0x0e, 0xf2, 0x87, 0x7a, 0x41, 0xf7, 0xde, 0x80, 0x4b, 0xca, 0xd9, 0x74, 0xfc, 0x45, 0xfa, 0xa0, 0x0f, 0x8e, 0xdc, 0x01, 0x15, 0x3e, 0xc6, 0x93, 0xaf, 0xc3, 0x80, 0xcf, 0x00, 0x03, 0x65, 0x71, 0x62, 0x41, 0xba, 0x7e, 0x58, 0x45, 0x3e, 0x86, 0xc5, 0xb7, 0x02, 0x26, 0x5b, 0xcd, 0x7b, 0xd2, 0x55, 0x26, 0xd6, 0xd1, 0x69, 0xf5, 0x8b, 0x89, 0xf8, 0x61, 0x35, 0xfd, 0x89, 0x2c, 0xa1, 0x94, 0x75, 0x93, 0x25, 0x1c, 0xe3, 0x76, 0x33, 0x0e, 0xf7, 0xb9, 0x2d, 0x14, 0x47, 0xea, 0x7b, 0xc8, 0x8f, 0x24, 0xdc, 0xbf, 0xa5, 0x33, 0xf9, 0xc6, 0xaf, 0xf8, 0x40, 0x6b, 0x93, 0x0f, 0xef, 0xc0, 0xaf, 0xb0, 0x6f, 0x5b, 0xcb, 0xd3, 0xe4, 0xa1, 0x4b, 0x98, 0x02, 0x45, 0xa9, 0xe5, 0x22, 0x0b, 0x23, 0x51, 0x95, 0xd2, 0xb1, 0x41, 0x38, 0xd1, 0x3a, 0x50, 0x48, 0x21, 0x07, 0xf5, 0x78, 0x7b, 0x78, 0x60, 0x41, 0x44, 0xf6, 0xa4, 0x7a, 0xc6, 0x28, 0x1b, 0x28, 0xc1, 0x6a, 0x06, 0x97, 0x22, 0x7b, 0x75, 0xaa, 0x12, 0x75, 0x67, 0x6f, 0x32, 0x03, 0x31, 0xf6, 0x25, 0xce, 0x24, 0x64, 0x50, 0x38, 0x6a, 0x43, 0xdd, 0x4d, 0x31, 0x1c, 0x06, 0xf6, 0x0c, 0x48, 0x90, 0x70, 0x95, 0x03, 0x95, 0xfd, 0x58, 0xc2, 0x87, 0xda, 0xec, 0xc7, 0x72, 0x70, 0x63, 0xf2, 0x81, 0xce, 0xe5, 0xda, 0xc4, 0x57, 0x97, 0x1c, 0x30, 0xb8, 0xc1, 0xf3, 0xe8, 0x1e, 0x31, 0x09, 0xbb, 0xa5, 0xda, 0x8d, 0xed, 0x13, 0xc1, 0x86, 0x3a, 0xc6, 0x1a, 0x67, 0x18, 0xeb, 0xad, 0xe3, 0x3d, 0xf1, 0x7f, 0x02, 0x61, 0x3d, 0xaf, 0x75, 0x45, 0x20, 0x9e, 0x27, 0xf4, 0x06, 0x52, 0x14, 0x48, 0xf0, 0x1d, 0x5e, 0xb1, 0x24, 0x79, 0x9d, 0x32, 0x22, 0x37, 0x77, 0xac, 0xdb, 0xd9, 0x72, 0x5f, 0x1e, 0x3c, 0x05, 0xae, 0x53, 0x7a, 0xf5, 0x22, 0x6b, 0x0e, 0xdf, 0xb2, 0x17, 0x39, 0x10, 0x42, 0x38, 0xa5, 0x9d, 0x69, 0x97, 0x49, 0xb1, 0x77, 0xd7, 0x8c, 0x21, 0xb7, 0xa8, 0xad, 0x46, 0xf1, 0x3d, 0x62, 0x0b, 0x33, 0xff, 0xbf, 0x45, 0xd1, 0x83, 0x5a, 0x43, 0xab, 0xb9, 0xad, 0xa6, 0xae, 0x67, 0xbb, 0x73, 0x9e, 0xd6, 0xf7, 0x67, 0x12, 0xcc, 0x61, 0x8b, 0xc0, 0xb9, 0xf2, 0x08, 0xfa, 0x35, 0x3a, 0x3b, 0x79, 0xaa, 0x48, 0x0c, 0x5a, 0x4e, 0xca, 0x7c, 0x66, 0x55, 0x75, 0x7e, 0x96, 0x64, 0xa7, 0x08, 0xd6, 0x48, 0x4b, 0x69, 0x0a, 0xe8, 0xfe, 0xdd, 0x4f, 0x78, 0x6f, 0x5f, 0x83, 0xf0, 0x0c, 0xbe, 0x07, 0xbd, 0xdb, 0xf3, 0xc3, 0xb6, 0xa5, 0xb2, 0x6b, 0x51, 0x5a, 0x3f, 0x01, 0x17, 0xb1, 0x83, 0x9c, 0x55, 0x0f, 0x5f, 0x67, 0x15, 0xaa, 0x40, 0xec, 0x4c, 0xee, 0xf4, 0x93, 0x55, 0x20, 0xbc, 0x65, 0x9e, 0x41, 0xa2, 0x16, 0xa2, 0x35, 0x0c, 0x43, 0x17, 0x24, 0x92, 0xf8, 0x68, 0x21, 0x0d, 0x75, 0x65, 0x09, 0xf0, 0x32, 0x3a, 0xae, 0xdc, 0x20, 0x9d, 0x35, 0x6e, 0x32, 0x4c, 0xbd, 0x5c, 0x1c, 0xb7, 0x42, 0xc0, 0x5b, 0xf9, 0xc0, 0xb3, 0x75, 0x0d, 0x9b, 0x1e, 0x82, 0x3f, 0x3e, 0xcd, 0xeb, 0xe0, 0x02, 0xc5, 0x72, 0x3e, 0x52, 0xd8, 0x72, 0xd4, 0x0e, 0x76, 0x68, 0xbd, 0x2c, 0xc6, 0xb3, 0x6f, 0xa5, 0xf5, 0x98, 0xa5, 0x8f, 0xcf, 0x89, 0x9d, 0x86, 0x8c, 0xa7, 0x84, 0x51, 0xec, 0x85, 0x2f, 0xc3, 0x86, 0x2f, 0x0b, 0xde, 0x5c, 0x6b, 0x57, 0x3f, 0xb4, 0x3e, 0x90, 0xb6, 0x23, 0xb2, 0x2d, 0x34, 0xeb, 0xd7, 0x8d, 0xea, 0x87, 0x08, 0x2e, 0xaf, 0x83, 0x6f, 0x1f, 0xa2, 0x91, 0xcc, 0xb8, 0x11, 0xda, 0x71, 0x88, 0x9a, 0x92, 0x91, 0x8f, 0x90, 0xcf, 0xbb, 0xad, 0xa1, 0x9b, 0xa2, 0x5b, 0xb5, 0x47, 0x1f, 0x99, 0x18, 0x03, 0x79, 0x27, 0xdc, 0xac, 0xe3, 0xf8, 0x79, 0xe5, 0x46, 0xe4, 0xb7, 0x69, 0x41, 0x9d, 0xce, 0xa0, 0x6f, 0xe4, 0xcb, 0x70, 0xe8, 0xfd, 0x35, 0x55, 0x0a, 0x60, 0xf1, 0xb4, 0x79, 0xb1, 0x63, 0x6c, 0x64, 0xf2, 0xd6, 0xaf, 0x0a, 0xf8, 0x1e, 0x10, 0x7d, 0x1b, 0x7b, 0xdc, 0xa6, 0x32, 0xc1, 0xae, 0x8a, 0xbf, 0xb6, 0x3e, 0xcb, 0x66, 0xbc, 0x7a, 0x72, 0xa4, 0xb0, 0xd8, 0xeb, 0xbd, 0x11, 0xea, 0x51, 0xf6, 0x65, 0x33, 0xed, 0x05, 0xd8, 0x39, 0xf9, 0xc6, 0x27, 0xdb, 0xa9, 0x2f, 0xbc, 0xe5, 0x6c, 0x86, 0x1b, 0xe2, 0x6f, 0xd1, 0x7c, 0x31, 0x62, 0x8f, 0xb9, 0x5b, 0x80, 0xa5, 0x6b, 0xa4, 0xc9, 0x9b, 0x50, 0xe0, 0x92, 0x08, 0xf1, 0x88, 0x40, 0x4b, 0x81, 0x0d, 0x51, 0x7c, 0x07, 0x6c, 0x9c, 0xa3, 0xc0, 0x03, 0xd9, 0x27, 0xbe, 0xa3, 0x63, 0x89, 0xd6, 0xe6, 0x3d, 0x51, 0xb9, 0xc3, 0x53, 0x49, 0x61, 0x5f, 0x03, 0xea, 0xaf, 0x26, 0xdc, 0x14, 0x52, 0x1b, 0xa6, 0x02, 0xea, 0x6c, 0xa2, 0x7c, 0x6d, 0x4a, 0x13, 0x4e, 0xca, 0xf7, 0xfc, 0xfa, 0xcd, 0x21, 0x2c, 0xaa, 0x43, 0x6e, 0x78, 0x68, 0x5e, 0x58, 0x48, 0x91, 0x5b, 0x3b, 0x55, 0x87, 0x61, 0xac, 0xb0, 0xa7, 0xad, 0x0d, 0x07, 0x7b, 0xec, 0x5e, 0x24, 0x30, 0xe8, 0x56, 0xb6, 0x4a, 0x67, 0xb3, 0x54, 0x96, 0x50, 0xce, 0xbf, 0x60, 0x10, 0x72, 0x67, 0xe7, 0x3c, 0xee, 0x31, 0x0e, 0x78, 0x69, 0x78, 0x54, 0x97, 0x76, 0x52, 0x06, 0x04, 0xe9, 0x14, 0xb4, 0x60, 0xe8, 0x18, 0xe1, 0x6c, 0x45, 0xbd, 0xfe, 0x2a, 0x0b, 0xb0, 0x9a, 0x3f, 0x56, 0x6a, 0xd3, 0x9c, 0x68, 0xfa, 0x10, 0x5d, 0xfa, 0x05, 0xf2, 0xf1, 0xd0, 0x0b, 0x87, 0x7c, 0x90, 0xeb, 0xc1, 0x79, 0xd4, 0xaa, 0x27, 0xa4, 0x7e, 0x70, 0xcb, 0x17, 0x4c, 0xd3, 0x7c, 0xb3, 0xac, 0x58, 0x3c, 0xc1, 0xd1, 0x37, 0xf5, 0xd9, 0x06, 0x5f, 0x67, 0x03, 0x42, 0xba, 0x65, 0x1d, 0xfd, 0xb2, 0x41, 0x7d, 0x43, 0xf4, 0x85, 0xd7, 0x07, 0x74, 0xe3, 0x60, 0xb9, 0xb1, 0x6f, 0x33, 0x1b, 0x3a, 0x0c, 0xf4, 0x50, 0x71, 0x24, 0xb4, 0x35, 0x8f, 0x9d, 0x15, 0xf5, 0xe8, 0x08, 0xaf, 0xd8, 0x71, 0x1b, 0xb2, 0x5c, 0x7f, 0x61, 0xcc, 0x87, 0xd1, 0x30, 0x4d, 0x7b, 0xd1, 0xdc, 0x89, 0x4b, 0x17, 0x2a, 0x7d, 0x0d, 0x2f, 0x07, 0xb6, 0x31, 0x9c, 0x7a, 0x6f, 0x11, 0x1c, 0xd8, 0xfa, 0xc8, 0x2e, 0x37, 0x61, 0x48, 0xd2, 0x24, 0x4c, 0xa7, 0x90, 0x99, 0x25, 0xba, 0xbb, 0x29, 0x7b, 0xe5, 0xf7, 0x7e, 0xa4, 0x31, 0xf9, 0x05, 0xa7, 0x9f, 0x8e, 0xe8, 0x59, 0xbd, 0xdf, 0x3d, 0xc5, 0x76, 0xf3, 0x7d, 0xd1, 0x2e, 0x75, 0x37, 0x1f, 0x0f, 0xb8, 0x05, 0x32, 0x9d, 0xf8, 0xc0, 0xd2, 0x91, 0xe3, 0xf0, 0xb1, 0xe4, 0x57, 0x86, 0x4e, 0x2a, 0x6e, 0xce, 0x1a, 0x21, 0xb8, 0x9f, 0xda, 0x8a, 0xc7, 0xd5, 0x4c, 0x37, 0xf1, 0x00, 0x0d, 0x66, 0x51, 0x5e, 0xba, 0x4d, 0x0f, 0x07, 0x55, 0xf6, 0xe1, 0x68, 0xeb, 0x4d, 0xd2, 0xf2, 0x74, 0x78, 0x43, 0x13, 0xfb, 0x66, 0x2f, 0x66, 0xff, 0xab, 0xb3, 0x27, 0x18, 0x8b, 0xcd, 0xe9, 0xde, 0x54, 0x64, 0x8b, 0x06, 0xf2, 0x88, 0x68, 0xce, 0xbd, 0xfc, 0xce, 0x9c, 0x95, 0xf1, 0xb2, 0xe1, 0x31, 0x15, 0xa1, 0x44, 0xb4, 0xcc, 0xfa, 0xfd, 0x81, 0xbd, 0x5b, 0x7e, 0x51, 0x91, 0x59, 0x59, 0x83, 0xf7, 0x74, 0x5e, 0xb3, 0xec, 0x49, 0x03, 0x8d, 0x39, 0x0a, 0x0a, 0xe3, 0x3d, 0x2c, 0x5d, 0xfe, 0xec, 0x5f, 0x3d, 0x32, 0x18, 0xc3, 0x9b, 0xb5, 0xf0, 0x59, 0xc6, 0xb2, 0xc6, 0xb8, 0x47, 0x98, 0x15, 0x01, 0x09, 0xb8, 0xc2 ],
+const [ 0x9f, 0x07, 0xe6, 0xb7, 0xea, 0x8b, 0x6d, 0x2b, 0xb3, 0x01, 0xd6, 0xce, 0x70, 0x19, 0xe0, 0xf2, 0x7a, 0xd5, 0x5a, 0xbb, 0xb7, 0x99, 0xe6, 0xd4, 0x76, 0x81, 0xfe, 0x60, 0x9a, 0xf6, 0x34, 0x34, 0xfb, 0x84, 0xbe, 0x43, 0x09, 0xe6, 0x31, 0x59, 0xb3, 0x63, 0x8d, 0x0d, 0x87, 0x5e, 0x7a, 0xf1, 0x1a, 0x28, 0xd1, 0x0b, 0xaa, 0x18, 0x5e, 0x89, 0x02, 0xde, 0xe5, 0xb0, 0x9e, 0x14, 0x62, 0x16, 0x10, 0x16, 0x95, 0x11, 0xa2, 0x14, 0xbe, 0x6f, 0x3d, 0x65, 0xa6, 0x67, 0x89, 0x1e, 0xde, 0xd0, 0x56, 0xe4, 0x4b, 0x91, 0x3b, 0xfe, 0xe3, 0x59, 0x7c, 0xae, 0xb1, 0x90, 0x31, 0xc2, 0x1f, 0x8d, 0xa5, 0x66, 0x74, 0x09, 0xfd, 0x3c, 0x9c, 0xd3, 0x1a, 0xaf, 0x28, 0xc6, 0xc0, 0x84, 0x95, 0xf9, 0xf7, 0xb1, 0xd1, 0x35, 0xb1, 0x73, 0xfb, 0xac, 0xae, 0x9b, 0x6a, 0xe7, 0x9d, 0x28, 0xf2, 0x01, 0x84, 0x1b, 0x62, 0x13, 0x61, 0x87, 0x51, 0xef, 0x12, 0xe8, 0x1b, 0x11, 0x72, 0xb5, 0x26, 0xd2, 0xc5, 0x39, 0x6a, 0xdf, 0x56, 0x9e, 0x30, 0xea, 0x5e, 0x4b, 0x19, 0x9f, 0x28, 0x70, 0x63, 0xda, 0x73, 0xde, 0x68, 0x17, 0x18, 0x1d, 0x67, 0x2a, 0xec, 0xb8, 0x87, 0x30, 0xe8, 0xdc, 0x19, 0xc5, 0x87, 0x21, 0x1e, 0x77, 0x70, 0xa8, 0x09, 0x7b, 0x55, 0x66, 0xc6, 0x9f, 0x1b, 0xbf, 0xfa, 0x80, 0x3b, 0x57, 0x8d, 0xfd, 0x68, 0x25, 0x66, 0xeb, 0x72, 0xc9, 0x75, 0x0a, 0x6a, 0x1f, 0xf7, 0x38, 0x07, 0x14, 0xf5, 0xe5, 0x48, 0xb8, 0x0e, 0xc7, 0x5b, 0x95, 0x77, 0xcf, 0xbe, 0x40, 0x40, 0x5b, 0xa4, 0x2d, 0xd9, 0xad, 0x9a, 0xc7, 0xd4, 0x9c, 0x6a, 0xc0, 0xec, 0x89, 0x3f, 0xa6, 0x47, 0x95, 0x0b, 0xb8, 0xf8, 0x11, 0x26, 0xf7, 0xc8, 0x37, 0x38, 0x80, 0x36, 0x17, 0x58, 0x18, 0xbc, 0xd3, 0x75, 0x09, 0x54, 0x0f, 0xf5, 0x2d, 0x3b, 0xa4, 0x9d, 0x48, 0xf5, 0x94, 0xb1, 0x9a, 0x91, 0x43, 0x5c, 0xb5, 0x2e, 0xe4, 0x51, 0x8d, 0xbe, 0x31, 0xb3, 0xce, 0x0a, 0x5f, 0x33, 0x72, 0xf7, 0x51, 0x78, 0x92, 0x07, 0x0c, 0xc3, 0x7c, 0x22, 0x6b, 0xd3, 0x07, 0x97, 0x13, 0x06, 0x23, 0x5e, 0xaa, 0xc2, 0xb4, 0xa0, 0x44, 0x13, 0xa1, 0x78, 0x1e, 0x95, 0x27, 0xfc, 0x8f, 0x95, 0x74, 0x77, 0x3b, 0x73, 0x71, 0xf9, 0x8a, 0x4a, 0xdf, 0x12, 0x59, 0xd3, 0xa5, 0xda, 0xef, 0x87, 0x68, 0x34, 0x32, 0x04, 0x5d, 0x54, 0x1a, 0xb2, 0x5b, 0x7f, 0x67, 0xa6, 0x35, 0x12, 0x8f, 0xc7, 0x46, 0xc6, 0xfb, 0x2f, 0x4d, 0x32, 0x72, 0xd4, 0x7c, 0x92, 0xd6, 0x67, 0xcb, 0xc6, 0x0e, 0x7c, 0x92, 0x9e, 0x43, 0xec, 0x57, 0x54, 0x4f, 0x77, 0xe4, 0x5a, 0x72, 0xae, 0x9d, 0x56, 0x47, 0x11, 0x11, 0x6c, 0xf7, 0x74, 0xcf, 0xbb, 0xad, 0xa7, 0x7b, 0x2a, 0x4a, 0x55, 0x21, 0x64, 0x59, 0x2d, 0xc8, 0x21, 0x45, 0x40, 0x4b, 0xa8, 0xc9, 0xaa, 0x64, 0x91, 0xa9, 0x75, 0x0a, 0xd0, 0xa0, 0xba, 0xfd, 0xef, 0x99, 0x09, 0x9f, 0x9b, 0x22, 0x0b, 0x05, 0x62, 0x1d, 0x66, 0x4e, 0xbb, 0xb8, 0xe1, 0x33, 0x47, 0xa0, 0xc9, 0xe0, 0x56, 0x72, 0x93, 0x02, 0xad, 0x73, 0xc2, 0x22, 0x87, 0x80, 0x0c, 0x31, 0xd9, 0x48, 0xb8, 0x64, 0xda, 0xb8, 0x4a, 0x42, 0xc3, 0xb7, 0x62, 0xfb, 0xd3, 0x14, 0xe2, 0xfb, 0x97, 0xbc, 0x4f, 0xbf, 0x68, 0x31, 0x7a, 0xe7, 0x35, 0x37, 0x5f, 0x8d, 0x83, 0xd1, 0x4d, 0xd6, 0xb1, 0x6b, 0x47, 0xc6, 0x81, 0x59, 0xab, 0x59, 0xd4, 0x80, 0x11, 0xcf, 0xb5, 0x53, 0x76, 0x47, 0x99, 0x02, 0x9a, 0x8f, 0xe5, 0xed, 0xa6, 0x3b, 0xb1, 0x5f, 0x12, 0xf4, 0xcc, 0x79, 0xc6, 0x13, 0x00, 0x6c, 0x7f, 0x6f, 0x97, 0xec, 0x75, 0x72, 0x1d, 0xe1, 0x3b, 0x73, 0x68, 0x5f, 0xe6, 0x3f, 0xd6, 0xd8, 0x71, 0xf9, 0xd6, 0x90, 0x60, 0x25, 0xaa, 0x52, 0xa4, 0xff, 0x6b, 0x62, 0xbf, 0x11, 0x4d, 0xb2, 0x28, 0x04, 0x24, 0x58, 0xf1, 0xb7, 0x27, 0x40, 0xa7, 0x8e, 0xf4, 0x1e, 0x7a, 0x0d, 0xd5, 0xa7, 0x9d, 0xa5, 0x42, 0x01, 0xf0, 0xcd, 0xa7, 0x78, 0xdd, 0x55, 0x67, 0x72, 0x7f, 0xf7, 0x20, 0xa5, 0x0a, 0x30, 0x31, 0x87, 0x67, 0x4e, 0x79, 0x06, 0x1e, 0xc9, 0x62, 0x7a, 0x79, 0xd6, 0x1e, 0xd8, 0xe7, 0x3a, 0x31, 0x28, 0x9e, 0x5c, 0x30, 0x39, 0x84, 0x9f, 0xc8, 0x93, 0x50, 0xee, 0x01, 0xad, 0xec, 0x99, 0xc4, 0x60, 0x1e, 0x5f, 0x9c, 0x9c, 0x68, 0xcc, 0xb9, 0x5a, 0x2d, 0xc5, 0x3a, 0xd1, 0x14, 0x61, 0xac, 0xed, 0xb2, 0xfa, 0xcd, 0xfd, 0x63, 0x84, 0x96, 0xac, 0x78, 0x1e, 0x79, 0x32, 0x98, 0xe7, 0xe8, 0xcb, 0x60, 0x13, 0x16, 0x68, 0x4d, 0x3e, 0x01, 0xa5, 0xdc, 0xff, 0xb0, 0xfc, 0xef, 0xc1, 0xb9, 0x38, 0x73, 0xce, 0x07, 0x2c, 0x40, 0xad, 0xda, 0xa4, 0x40, 0xae, 0x0f, 0x9c, 0xd4, 0xc3, 0xa2, 0xb0, 0x73, 0x91, 0x71, 0xd4, 0x95, 0xc7, 0x43, 0x45, 0xcf, 0xaf, 0x08, 0xc0, 0x3f, 0x03, 0x63, 0xf1, 0x2a, 0x01, 0x65, 0x2e, 0xe4, 0xc1, 0x9c, 0x65, 0xf0, 0xc7, 0x4c, 0x53, 0x69, 0xd5, 0xfc, 0xf7, 0xa0, 0x02, 0x34, 0x47, 0x07, 0x10, 0x86, 0x21, 0x4e, 0xfb, 0xcb, 0x84, 0xcb, 0xce, 0xaf, 0x00, 0x1f, 0xba, 0x70, 0x6b, 0x17, 0x69, 0xe2, 0xd6, 0xd0, 0x90, 0xb7, 0xbf, 0x1f, 0xc4, 0xfd, 0x89, 0x2f, 0x8e, 0xe8, 0x29, 0x6c, 0xc1, 0xd2, 0x21, 0xa0, 0x0b, 0x80, 0xb2, 0x5c, 0xcb, 0xa7, 0x4d, 0x9a, 0x22, 0xae, 0x4c, 0xa0, 0x4d, 0xb6, 0xdf, 0x28, 0x32, 0xd8, 0x49, 0xbd, 0x38, 0xad, 0x4c, 0x68, 0x5c, 0x14, 0xe1, 0x8c, 0x82, 0x2f, 0x2d, 0x0f, 0x08, 0xaf, 0xb1, 0xba, 0xa1, 0x52, 0xc1, 0xe3, 0x61, 0xa9, 0x37, 0x49, 0x14, 0x1f, 0x68, 0x3f, 0xd4, 0x37, 0x57, 0x0d, 0xdb, 0x15, 0x29, 0x93, 0x95, 0x40, 0xd9, 0x2f, 0xf9, 0xa6, 0x2d, 0xe1, 0x1a, 0xe1, 0xe9, 0xad, 0xf9, 0xb8, 0x42, 0x41, 0x9e, 0xe9, 0x95, 0xd8, 0x67, 0x26, 0x59, 0x5e, 0x9f, 0x5d, 0x53, 0xd5, 0x52, 0x3c, 0x08, 0xf7, 0x60, 0xf5, 0x78, 0x1d, 0xd1, 0x3e, 0x09, 0x5f, 0x68, 0x9c, 0xc2, 0xfd, 0x7b, 0xe2, 0xb9, 0xfe, 0x02, 0xf4, 0xcf, 0x16, 0xed, 0xd1, 0x9a, 0xcd, 0xbb, 0xd1, 0xa3, 0xde, 0x48, 0x2b, 0xd2, 0xdd, 0xe6, 0xb9, 0x26, 0x1d, 0xb0, 0x00, 0xa9, 0xd1, 0x1b, 0x6b, 0xa4, 0x71, 0xce, 0xd7, 0x0f, 0x60, 0xb4, 0x54, 0x4b, 0xcb, 0x4f, 0x2a, 0x14, 0xd4, 0x4f, 0x1b, 0xb1, 0xf0, 0x63, 0xe8, 0x6d, 0x8d, 0x4f, 0x17, 0x4b, 0xf9, 0x3f, 0xf2, 0xf6, 0x7f, 0x5a, 0xd3, 0xf7, 0xd3, 0x9b, 0x9f, 0x2a, 0xb0, 0xdc, 0x91, 0x73, 0xbf, 0x34, 0x39, 0xad, 0xbb, 0x83, 0xc4, 0xe3, 0xd3, 0x4b, 0x7d, 0xc3, 0x4f, 0xc2, 0x94, 0x4f, 0x77, 0x25, 0x1e, 0xd6, 0xb0, 0x4e, 0x5e, 0x23, 0xe9, 0x89, 0x43, 0xf4, 0x35, 0xa4, 0x31, 0xae, 0xb9, 0x45, 0x05, 0x4e, 0xc9, 0x80, 0x53, 0xa3, 0x4e, 0xa9, 0xf1, 0xbb, 0x6b, 0x67, 0xba, 0x9b, 0x60, 0x0a, 0x8c, 0x32, 0xae, 0x1f, 0x93, 0x90, 0x7c, 0x41, 0xca, 0x54, 0x39, 0x32, 0xbe, 0x63, 0x83, 0x2a, 0x96, 0xe0, 0x47, 0x6e, 0x50, 0x58, 0x2a, 0x25, 0x4d, 0x3c, 0x28, 0x67, 0x10, 0x95, 0x7b, 0x98, 0x43, 0xf3, 0xbf, 0xf4, 0xfa, 0xa6, 0x53, 0x6a, 0x3c, 0x31, 0x02, 0xae, 0xc0, 0xfc, 0xe3, 0x8a, 0xf4, 0x49, 0x7d, 0x75, 0x43, 0x69, 0x2f, 0x66, 0x98, 0x30, 0xd0, 0xea, 0x1e, 0xa6, 0x92, 0x75, 0x4b, 0xff, 0x2c, 0xf5, 0x1c, 0xce, 0x38, 0xad, 0xa2, 0x75, 0xd9, 0x41, 0xbd, 0xe0, 0xa2, 0x0d, 0x28, 0x73, 0xb3, 0xbb, 0xb5, 0x40, 0x25, 0x15, 0xda, 0x7e, 0xa9, 0x17, 0x6d, 0x36, 0x6b, 0x49, 0xac, 0x40, 0x3d, 0x4c, 0x80, 0x6e, 0xf1, 0xb2, 0x03, 0x07, 0x06, 0x13, 0x3f, 0x77, 0x88, 0x5c, 0x39, 0x44, 0x31, 0x6b, 0x2e, 0x44, 0xd4, 0xd9, 0x1c, 0x0e, 0xfc, 0x17, 0x84, 0xae, 0xd0, 0xbd, 0x6e, 0x9d, 0x39, 0x1e, 0xaf, 0xf0, 0x47, 0x20, 0x67, 0xcf, 0xd1, 0x4b, 0xcd, 0x29, 0x5c, 0x1f, 0x2f, 0xa6, 0x3e, 0xab, 0x34, 0xdd, 0x04, 0x5b, 0x65, 0xc8, 0x10, 0x12, 0xeb, 0x74, 0x87, 0x78, 0x9a, 0xfd, 0x6a, 0x96, 0x2f, 0xba, 0x02, 0xa0, 0xd6, 0xb5, 0x82, 0x11, 0xf0, 0x5e, 0xe8, 0xfd, 0x12, 0x80, 0x24, 0xa3, 0x51, 0x73, 0x7c, 0x43, 0xbd, 0x94, 0x2f, 0x2f, 0x2b, 0xf2, 0x58, 0x23, 0x38, 0x4a, 0x16, 0xd9, 0x8a, 0x36, 0xea, 0xd9, 0x59, 0xa1, 0x60, 0x8f, 0x2e, 0x7e, 0xf2, 0x9f, 0xeb, 0xb9, 0x29, 0x7d, 0x0c, 0x6e, 0x05, 0x38, 0x2c, 0x5a, 0x9f, 0x96, 0xcb, 0x8f, 0x0d, 0x66, 0x4e, 0x6b, 0x86, 0x12, 0x47, 0xca, 0xc6, 0x74, 0xf7, 0x7b, 0xb4, 0xea, 0x12, 0xf1, 0x43, 0xad, 0xc1, 0x3b, 0x96, 0x5e, 0xed, 0x37, 0x67, 0xe2, 0xbb, 0x02, 0xa9, 0x70, 0x53, 0xb2, 0x6c, 0xe8, 0xe6, 0x48, 0x02, 0x67, 0xef, 0xe0, 0x60, 0x18, 0xb9, 0x2b, 0xc6, 0x4d, 0x21, 0x1f, 0xa3, 0xce, 0x9d, 0xed, 0xb3, 0x70, 0x7d, 0x34, 0x6a, 0xea, 0x71, 0x74, 0x95, 0xe5, 0x4c, 0xc5, 0x3f, 0x52, 0x07, 0xc9, 0xd1, 0x00, 0x09, 0xdf, 0x7e, 0x6e, 0xa5, 0x99, 0xde, 0xde, 0xe5, 0x71, 0xd9, 0xaa, 0x86, 0xb7, 0xc7, 0xdb, 0x43, 0xce, 0xd5, 0xf8, 0x57, 0x98, 0xab, 0x1c, 0x3d, 0x2f, 0x4c, 0x4b, 0xba, 0xd6, 0x3d, 0x06, 0x1d, 0x2f, 0xe9, 0x1d, 0xc6, 0xae, 0x44, 0xc5, 0xe5, 0x4d, 0xaf, 0xea, 0x84, 0x81, 0x1c, 0xc7, 0xc8, 0x6d, 0x72, 0xb3, 0x73, 0x56, 0x33, 0x3e, 0xae, 0x58, 0x5c, 0x7c, 0x06, 0x57, 0x8c, 0xa1, 0xb4, 0x38, 0x69, 0xce, 0x21, 0x50, 0x3f, 0x2b, 0xa9, 0x1c, 0xeb, 0x36, 0x9f, 0x33, 0xf8, 0x5b, 0x92, 0x7a, 0x07, 0xc4, 0xcf, 0x97, 0x74, 0x72, 0x27 ],
+const [ 0x25, 0xa4, 0x3f, 0xd8, 0xbf, 0x24, 0x1d, 0x67, 0xda, 0xb9, 0xe3, 0xc1, 0x06, 0xcd, 0x27, 0xb7, 0x1f, 0xd4, 0x5a, 0x87, 0xb9, 0x25, 0x4a, 0x53, 0xc1, 0x08, 0xea, 0xd1, 0x62, 0x10, 0x56, 0x45, 0x26, 0xab, 0x12, 0xac, 0x5e, 0xf7, 0x92, 0x3a, 0xc3, 0xd7, 0x00, 0x07, 0x5d, 0x47, 0x39, 0x06, 0xa4, 0xec, 0x19, 0x36, 0xe6, 0xef, 0xf8, 0x1c, 0xe8, 0x0c, 0x74, 0x70, 0xd0, 0xe6, 0x71, 0x17, 0x42, 0x9e, 0x5f, 0x51, 0xca, 0xa3, 0xbc, 0x34, 0x7a, 0xcc, 0xd9, 0x59, 0xd4, 0xa4, 0xe0, 0xd5, 0xea, 0x05, 0x16, 0x6a, 0xc3, 0xe8, 0x5e, 0xff, 0x01, 0x7b, 0xff, 0x4e, 0xc1, 0x74, 0xa6, 0xdd, 0xc3, 0xa5, 0xaf, 0x2f, 0xcb, 0xd1, 0xa0, 0x3b, 0x46, 0xbf, 0xf6, 0x1d, 0x31, 0x8c, 0x25, 0x0c, 0x37, 0x45, 0xda, 0x8c, 0x19, 0xb6, 0x83, 0xe4, 0x53, 0x7c, 0x11, 0xd3, 0xfd, 0x62, 0xfc, 0x7f, 0xef, 0xea, 0x88, 0xae, 0x28, 0x29, 0x48, 0x38, 0x71, 0xd8, 0xe0, 0xbd, 0x3d, 0xa9, 0x0e, 0x93, 0xd4, 0xd7, 0xec, 0x02, 0xb0, 0x01, 0x6f, 0xb4, 0x27, 0x38, 0x34, 0x67, 0x4b, 0x57, 0x7c, 0xe5, 0x0f, 0x92, 0x75, 0x36, 0xab, 0x52, 0xbb, 0x14, 0x41, 0x41, 0x1e, 0x9f, 0xc0, 0xa0, 0xa6, 0x52, 0x09, 0xe1, 0xd4, 0x36, 0x50, 0x72, 0x2b, 0x55, 0xc5, 0xd7, 0xef, 0x72, 0x74, 0xfb, 0x2d, 0xf7, 0x6a, 0xc8, 0xfb, 0x2f, 0x1a, 0xf5, 0x01, 0xb5, 0xff, 0x1f, 0x38, 0x2d, 0x82, 0x1c, 0xf2, 0x31, 0x1d, 0x8c, 0x1b, 0x8e, 0xc1, 0xb0, 0xbe, 0xb1, 0x75, 0x80, 0xca, 0x5c, 0x41, 0xf7, 0x17, 0x9e, 0x4a, 0xb2, 0xa4, 0x01, 0x3e, 0xb9, 0x23, 0x05, 0xf2, 0x9d, 0xb7, 0xcd, 0x4a, 0xc3, 0xfc, 0x19, 0x5a, 0xff, 0x48, 0x74, 0xca, 0x64, 0x30, 0xaf, 0x7f, 0x5b, 0x4e, 0x8d, 0x77, 0xf3, 0x42, 0xc0, 0xf5, 0x78, 0xf7, 0x14, 0xdf, 0x47, 0x28, 0xeb, 0x64, 0xe0, 0x22, 0xe9, 0xe1, 0x3d, 0xcb, 0xf0, 0x06, 0x63, 0xe3, 0x4f, 0x35, 0x36, 0x8a, 0x36, 0x2a, 0x91, 0x02, 0x6e, 0xe1, 0x96, 0xb7, 0x46, 0xb4, 0x43, 0x7c, 0xd1, 0xc5, 0x46, 0x18, 0x4e, 0x9b, 0x13, 0x01, 0xe8, 0x10, 0x33, 0x67, 0xa0, 0x6a, 0xdf, 0x74, 0x87, 0xc8, 0xcd, 0xd3, 0x30, 0xc0, 0x4a, 0x6f, 0x65, 0x46, 0x89, 0x7d, 0x19, 0xcf, 0x3b, 0xbc, 0x9e, 0xb7, 0x5f, 0xfb, 0x18, 0xe0, 0x5c, 0xdd, 0x32, 0x9d, 0x4d, 0xd9, 0x0f, 0xce, 0x9c, 0x84, 0x84, 0x4c, 0xd2, 0x13, 0x84, 0x87, 0xad, 0x1b, 0xdb, 0x6d, 0x74, 0x9c, 0x1f, 0x8e, 0x87, 0x3e, 0xe4, 0x7e, 0x3a, 0xda, 0x30, 0x7b, 0xe3, 0x3c, 0x2f, 0x50, 0x32, 0x28, 0x27, 0x79, 0xc1, 0x9a, 0xad, 0x88, 0xec, 0x52, 0x1a, 0xc8, 0xe3, 0x90, 0x39, 0x1f, 0xfd, 0x1d, 0x42, 0x39, 0x50, 0x8a, 0x0c, 0xe2, 0x7e, 0xbc, 0x7e, 0xb4, 0xd1, 0xa9, 0x47, 0xf3, 0x8b, 0x5c, 0xce, 0xb5, 0x77, 0x3f, 0x6c, 0x46, 0xc4, 0x99, 0xda, 0xca, 0x13, 0x56, 0xe5, 0x24, 0xcf, 0x07, 0x69, 0x17, 0xbd, 0x29, 0x7c, 0xab, 0xd4, 0xaa, 0xea, 0xd3, 0x4e, 0xa9, 0xe2, 0x4c, 0xff, 0x7e, 0xee, 0xc8, 0xe6, 0xfa, 0x28, 0x4c, 0x02, 0xef, 0xac, 0xd7, 0x66, 0xf3, 0x49, 0x44, 0x90, 0x62, 0x7c, 0x71, 0xf7, 0xa2, 0x9e, 0xa1, 0xe3, 0xab, 0x5c, 0x1f, 0x81, 0xc6, 0x68, 0x25, 0x37, 0x94, 0x6e, 0xfb, 0x35, 0x53, 0x4a, 0x63, 0x4d, 0x5d, 0x78, 0x35, 0x04, 0xf1, 0xcb, 0x47, 0xe9, 0x36, 0x62, 0x8f, 0x25, 0x7d, 0xd9, 0x8c, 0x54, 0xc7, 0xbc, 0xe1, 0x93, 0x87, 0x41, 0x44, 0xda, 0xa9, 0x36, 0x96, 0x8d, 0xd2, 0x38, 0x53, 0x4d, 0xea, 0x26, 0x2d, 0x14, 0xd8, 0xd5, 0xf4, 0x81, 0x8c, 0x05, 0xb9, 0x70, 0x43, 0x94, 0x33, 0xce, 0x06, 0xf2, 0x62, 0xac, 0x74, 0xd5, 0x71, 0x91, 0xc2, 0x2e, 0xe1, 0x15, 0x00, 0x5b, 0xe4, 0xab, 0x9e, 0x9e, 0x07, 0xbf, 0x2e, 0xce, 0x14, 0x01, 0x6b, 0x4c, 0x37, 0x00, 0x7b, 0x39, 0x5f, 0xfa, 0x71, 0xe6, 0xe7, 0xf2, 0x16, 0x8c, 0x76, 0x04, 0xe9, 0x3e, 0x24, 0xf6, 0x64, 0x1b, 0xde, 0x0f, 0x81, 0xc8, 0x0b, 0x2c, 0x7d, 0x1e, 0x6f, 0x10, 0xdc, 0x1f, 0x50, 0xfc, 0xad, 0x2f, 0xd8, 0x7f, 0x0f, 0x81, 0xbb, 0x90, 0xf4, 0xcf, 0x1a, 0xda, 0x25, 0x4e, 0xa6, 0x57, 0x87, 0xe1, 0x08, 0x20, 0x9c, 0x8c, 0x81, 0x84, 0x4c, 0x2c, 0xcd, 0x57, 0xe6, 0x66, 0x4e, 0x8c, 0x62, 0xde, 0x66, 0x07, 0xe9, 0xa9, 0x25, 0xac, 0x97, 0x04, 0x24, 0xbc, 0x7f, 0x46, 0xb0, 0x61, 0xef, 0x13, 0x2b, 0x87, 0xf6, 0xd3, 0xb0, 0xee, 0x24, 0x62, 0xf6, 0x7d, 0x91, 0x09, 0x77, 0xda, 0x20, 0xae, 0xd1, 0x37, 0x05, 0x47, 0x6c, 0x6f, 0x85, 0x95, 0x5d, 0x51, 0xfd, 0x0e, 0x8a, 0x3b, 0x26, 0x1b, 0x0f, 0xec, 0x97, 0x83, 0xe1, 0x93, 0x8c, 0x27, 0xb1, 0x2b, 0xe5, 0xf1, 0x14, 0x0b, 0x72, 0x07, 0xe0, 0xb9, 0x6d, 0x44, 0xd9, 0x00, 0x48, 0xe8, 0x8d, 0x42, 0xaa, 0x8e, 0x7c, 0x0f, 0xb4, 0x5f, 0x7c, 0xf5, 0x88, 0x86, 0x5c, 0x9a, 0x0c, 0xe3, 0xc8, 0x09, 0xeb, 0x04, 0x6c, 0x4a, 0xdd, 0x51, 0x5d, 0x35, 0x29, 0x86, 0xb4, 0x87, 0x68, 0x67, 0x7c, 0x36, 0x8b, 0xaf, 0xce, 0x02, 0x1f, 0x49, 0x3a, 0x4d, 0xd0, 0xc2, 0x69, 0x2c, 0x2c, 0xff, 0x01, 0xbe, 0xaa, 0x2b, 0xc9, 0xbd, 0xeb, 0xf4, 0x0e, 0x52, 0x3f, 0xf7, 0x45, 0x2e, 0x6b, 0x78, 0xf1, 0xd6, 0xaa, 0x57, 0xc7, 0x3e, 0xf1, 0x3f, 0x10, 0x9a, 0x77, 0x21, 0x50, 0x71, 0x75, 0xe1, 0x25, 0xf3, 0x2a, 0x4f, 0x71, 0x8c, 0x23, 0x58, 0xbb, 0xb9, 0xb9, 0x7e, 0xd3, 0x1b, 0xdb, 0x85, 0xb5, 0xca, 0x0e, 0x6f, 0xb0, 0xeb, 0xb1, 0xab, 0xc8, 0x85, 0x86, 0x8a, 0x58, 0x90, 0x6e, 0xf2, 0xfc, 0x4f, 0x74, 0x56, 0xad, 0xe0, 0x0d, 0xe5, 0x2e, 0x12, 0x9e, 0x02, 0xa8, 0x76, 0x3f, 0xf5, 0x91, 0xb9, 0xbf, 0xe0, 0xd1, 0x30, 0xe8, 0xf4, 0x28, 0xb5, 0x04, 0xe4, 0xca, 0xb2, 0xa0, 0x9a, 0x4d, 0x7b, 0x8f, 0x2a, 0xc5, 0xe1, 0x32, 0x04, 0x2e, 0x04, 0xf7, 0x6d, 0x0a, 0x68, 0x20, 0x30, 0x4a, 0x4b, 0xc6, 0x90, 0x72, 0x36, 0x1d, 0x82, 0xf9, 0xd3, 0xf9, 0x19, 0xee, 0xfe, 0x91, 0x42, 0xe2, 0x1e, 0x83, 0xb1, 0x01, 0xb6, 0x19, 0x1b, 0x82, 0x37, 0xcb, 0xa6, 0x42, 0x19, 0x05, 0x9e, 0xab, 0x29, 0x2a, 0x69, 0xdb, 0x25, 0xd8, 0xbd, 0x02, 0x86, 0x6e, 0x10, 0x0c, 0x9d, 0xcb, 0x50, 0x81, 0xe1, 0x59, 0xd5, 0xa9, 0x88, 0x4b, 0x94, 0xf3, 0x54, 0x22, 0x95, 0x97, 0xb0, 0x76, 0xa7, 0x7b, 0xfb, 0xf3, 0x52, 0x54, 0x24, 0xa2, 0x0d, 0x0d, 0x77, 0x69, 0xb1, 0x6c, 0xb6, 0xd6, 0x2e, 0xf3, 0x6c, 0x18, 0x7c, 0x04, 0x7e, 0x4e, 0xd5, 0x49, 0x03, 0x05, 0x22, 0x53, 0x55, 0xfb, 0xb3, 0x81, 0x68, 0x29, 0x32, 0x24, 0x5b, 0x01, 0xda, 0xe0, 0x4d, 0xf5, 0xe4, 0x56, 0x72, 0x38, 0x42, 0xff, 0x66, 0xc8, 0x90, 0x5b, 0xc1, 0xac, 0x48, 0x4c, 0xeb, 0x7a, 0x35, 0xbc, 0x32, 0x1d, 0x2a, 0x86, 0x19, 0xd5, 0xf3, 0x94, 0xf3, 0x7f, 0x8c, 0x45, 0xb1, 0x17, 0x91, 0x11, 0xf9, 0x7b, 0xf6, 0x6f, 0x78, 0x72, 0xf8, 0xf6, 0x78, 0xec, 0x53, 0xc3, 0xb5, 0x8c, 0xb6, 0x1c, 0x6c, 0x63, 0x74, 0x52, 0xb6, 0xff, 0x7c, 0xec, 0x14, 0xa4, 0x8b, 0x01, 0x4b, 0xd9, 0xa0, 0xe6, 0x72, 0x26, 0xb1, 0x0a, 0x49, 0x1d, 0x9c, 0x1d, 0xcc, 0x97, 0x60, 0x78, 0x08, 0x40, 0x8d, 0xb9, 0x2e, 0x56, 0xf9, 0xad, 0xe6, 0xad, 0xb5, 0x74, 0xe5, 0xf7, 0x3f, 0xdf, 0xc2, 0x42, 0xf9, 0x1d, 0x05, 0xc2, 0xda, 0x97, 0x82, 0xd1, 0x64, 0x18, 0xe5, 0x34, 0xd6, 0x31, 0x8d, 0xa0, 0xa2, 0xdc, 0x9e, 0x7c, 0x21, 0x5f, 0x51, 0xe9, 0x86, 0x73, 0x8f, 0x00, 0x11, 0xa6, 0xbf, 0x5a, 0x85, 0xfe, 0xdc, 0xd6, 0xdb, 0xdf, 0xca, 0x96, 0x38, 0x2e, 0xea, 0x4b, 0x1d, 0xb7, 0xec, 0xb3, 0xdd, 0xcc, 0xe4, 0x60, 0x55, 0x2f, 0xa0, 0xba, 0xd7, 0x33, 0x39, 0x47, 0x67, 0x1d, 0xe9, 0x2a, 0x2a, 0xd0, 0x1c, 0xea, 0x1b, 0xaa, 0xca, 0x75, 0x00, 0xa9, 0x03, 0x65, 0x9d, 0xd2, 0xcc, 0x81, 0x27, 0xd3, 0x29, 0x87, 0xfb, 0xe7, 0x7b, 0x29, 0x90, 0xfa, 0x0c, 0x55, 0xaa, 0x0e, 0xe9, 0xb9, 0xd1, 0xdd, 0xf0, 0x87, 0x02, 0xbf, 0x29, 0x75, 0xa4, 0xcf, 0x5a, 0x09, 0xbd, 0x49, 0xd5, 0x13, 0x66, 0x37, 0x95, 0x7b, 0x7d, 0x4d, 0x89, 0x3c, 0x99, 0x11, 0x30, 0xb1, 0x43, 0x3f, 0x66, 0x10, 0x63, 0x6b, 0x7e, 0x34, 0xf8, 0xe8, 0x90, 0x9f, 0x0c, 0xe9, 0x14, 0xbf, 0xe8, 0xe6, 0xb0, 0x70, 0x84, 0x41, 0x4f, 0xc3, 0x41, 0x2a, 0x73, 0xfd, 0xda, 0xc0, 0xcc, 0xe3, 0x98, 0x78, 0x09, 0x35, 0xc6, 0xc3, 0xee, 0x79, 0x65, 0xeb, 0xa7, 0xf9, 0x21, 0x3e, 0x5c, 0x0f, 0x83, 0x6f, 0x05, 0xa0, 0x67, 0x39, 0x80, 0xe7, 0xb1, 0x45, 0xe0, 0x74, 0x3c, 0x4e, 0x09, 0x74, 0x13, 0x83, 0x7a, 0x32, 0xe4, 0x2d, 0x69, 0xde, 0xb1, 0x91, 0x15, 0x8e, 0xc9, 0x18, 0x58, 0x82, 0xf7, 0xad, 0x7b, 0xac, 0xf9, 0x67, 0x4f, 0x6f, 0x33, 0x68, 0x79, 0xa8, 0xa5, 0x05, 0x0e, 0xeb, 0x1b, 0x27, 0x60, 0x0f, 0xa3, 0xf0, 0x17, 0xec, 0x44, 0xa2, 0x83, 0x63, 0xed, 0xbd, 0x30, 0x9f, 0xac, 0x68, 0xbb, 0x9b, 0x20, 0x12, 0xe5, 0xe4, 0x31, 0x59, 0xe6, 0xa1, 0xfe, 0x2b, 0x04, 0xd0, 0x17, 0x2b, 0x63, 0xd2, 0xed, 0x56, 0x1f, 0x2a, 0x87, 0xe6, 0x98, 0x82, 0x76, 0x76, 0x0d, 0xee, 0x0a, 0x68, 0x6d, 0x75, 0xc6, 0x84, 0x69, 0xce, 0x12, 0xe1, 0xce, 0x67, 0x30, 0x09, 0x12, 0xac, 0x71, 0x58, 0x2c, 0x85, 0xa9, 0xa5, 0xa9, 0x20, 0xe0, 0x25, 0xfd, 0xf2, 0x4a, 0x8b, 0x17, 0xf8, 0x7a, 0x74, 0x38, 0x43, 0xd2, 0x03, 0x04, 0xb3, 0x3e, 0xc8, 0xda, 0x03, 0x22, 0xe7, 0x61, 0x05, 0x90, 0x76, 0x63, 0x2f, 0xbf, 0x26, 0xdf, 0x57, 0xb8, 0x26, 0x59, 0xbb, 0x53, 0x44, 0x75, 0x44, 0x62, 0x56, 0xc4, 0x0c, 0x2c, 0xd8, 0xde, 0x1d, 0x1d, 0xd6, 0xb1, 0x7c, 0xbb, 0x0d, 0x18, 0x66, 0xdc, 0x4d, 0xb0, 0xd9, 0x16, 0x21, 0xe7, 0x56, 0x78, 0xb2, 0x55, 0xe6, 0x77, 0xe9, 0x50, 0x5b, 0x2b, 0xd4, 0xba, 0xd8, 0xbc, 0x4b, 0x1e, 0x93, 0x17, 0xd3, 0xfb, 0xda, 0xe5, 0xc2, 0x60, 0x54, 0xbd, 0xa4, 0xb9, 0x8a, 0x98, 0xde, 0xe9, 0xa5, 0x86, 0x91, 0x99, 0x79, 0xa0, 0xc1, 0xcf, 0xc3, 0x3e, 0xb7, 0xc2, 0xaf, 0x6a, 0xa3, 0xed ],
+const [ 0xc2, 0x9a, 0x1a, 0xb0, 0x20, 0xe6, 0x43, 0x4a, 0x50, 0xa2, 0x71, 0xe5, 0x52, 0x5a, 0x47, 0xa2, 0x9b, 0x44, 0x7a, 0x76, 0x16, 0x2e, 0xee, 0xc5, 0x69, 0xb5, 0x1c, 0x33, 0x79, 0xb8, 0xb7, 0xb7, 0x30, 0x0c, 0x8f, 0xf1, 0x7e, 0x71, 0xb5, 0xbd, 0x9d, 0xc5, 0xe0, 0x08, 0x9a, 0x78, 0x0f, 0xe2, 0x11, 0x40, 0x70, 0xd5, 0x38, 0x0e, 0x81, 0x75, 0x1e, 0x40, 0x75, 0x39, 0x35, 0x18, 0xd9, 0x89, 0x0f, 0x6d, 0x77, 0x18, 0x65, 0xa0, 0x7b, 0x74, 0x5d, 0xd2, 0xd4, 0xdc, 0x0c, 0x54, 0xdd, 0x51, 0x3a, 0x5f, 0x3d, 0xef, 0x66, 0x06, 0x0c, 0x7e, 0x0a, 0x68, 0x37, 0x45, 0x21, 0x2a, 0x25, 0x1e, 0xe5, 0x25, 0x9a, 0xd0, 0xdd, 0x5b, 0xdc, 0x98, 0x17, 0x30, 0x15, 0x09, 0xb3, 0xd7, 0xf9, 0x17, 0xa1, 0x0a, 0xa8, 0x6e, 0xaa, 0xfe, 0xd6, 0x08, 0xb5, 0x96, 0x29, 0xfe, 0x43, 0xd7, 0xe2, 0x9e, 0x3d, 0x9c, 0xc0, 0xbf, 0xef, 0x8a, 0x21, 0x51, 0x54, 0x47, 0x6b, 0x38, 0x94, 0xe7, 0xaa, 0x5b, 0xcb, 0xa7, 0x7b, 0xf7, 0x0c, 0xde, 0x28, 0x3a, 0xa6, 0x30, 0x14, 0x0d, 0xa5, 0x05, 0x5a, 0x31, 0x9c, 0x39, 0xb1, 0x8d, 0xa2, 0x16, 0x93, 0xc6, 0x9b, 0x7f, 0x9e, 0x11, 0xb9, 0x6d, 0x3a, 0x45, 0x42, 0xa0, 0x7c, 0x35, 0x93, 0x8e, 0x4a, 0x3c, 0x65, 0xa0, 0xc0, 0x19, 0x4f, 0x9d, 0xd3, 0xfd, 0x8c, 0x66, 0x34, 0xe3, 0xff, 0xe5, 0x77, 0x20, 0x74, 0x40, 0x75, 0x3b, 0x29, 0x52, 0xef, 0xfe, 0x8d, 0x5b, 0x74, 0xcd, 0x47, 0xf6, 0x84, 0x37, 0x7a, 0x4c, 0xf5, 0xcb, 0x47, 0x88, 0x96, 0x2d, 0x94, 0x8b, 0x13, 0x69, 0x0c, 0xe0, 0x18, 0x86, 0x67, 0xf2, 0xb9, 0x5f, 0xec, 0x7c, 0x12, 0xae, 0x34, 0x42, 0x2a, 0x6a, 0x30, 0xff, 0x1e, 0x53, 0x6e, 0x9e, 0x7b, 0xcb, 0x97, 0xac, 0xeb, 0xe7, 0x3d, 0x0e, 0x14, 0xc6, 0xd3, 0xef, 0xbd, 0x21, 0xfd, 0xfd, 0x32, 0x24, 0x0b, 0xd5, 0xea, 0x7c, 0xbf, 0xbb, 0x68, 0xb2, 0x57, 0x8f, 0x5f, 0xb7, 0xc7, 0xfc, 0x19, 0xc0, 0x47, 0xf3, 0x19, 0x53, 0x0d, 0x58, 0x00, 0xa2, 0x5c, 0xfb, 0xad, 0x19, 0xbd, 0xc9, 0xa8, 0x33, 0x8d, 0x44, 0xc1, 0x91, 0xb7, 0x30, 0xf4, 0x4d, 0xc3, 0x8f, 0x90, 0x8c, 0x10, 0xd0, 0x99, 0x52, 0x5d, 0x44, 0x6a, 0x9b, 0x8e, 0xd1, 0x9e, 0xa7, 0xad, 0xea, 0x31, 0x95, 0x30, 0xbe, 0xe3, 0x33, 0x7a, 0xb0, 0xdd, 0x15, 0xa4, 0x08, 0x97, 0xe4, 0x7c, 0xe8, 0xf9, 0xf9, 0xce, 0x81, 0xc1, 0x2a, 0xe3, 0x86, 0x24, 0xe4, 0x48, 0xe1, 0xb8, 0x7b, 0xd0, 0xa6, 0x91, 0xbd, 0xdc, 0x45, 0xaa, 0xcd, 0xda, 0x03, 0x87, 0x2f, 0x0c, 0xab, 0x19, 0x1f, 0x8b, 0x80, 0xe2, 0x27, 0x8b, 0x77, 0x5a, 0xf0, 0xe0, 0xa3, 0x90, 0x59, 0xc2, 0xf1, 0x14, 0xc6, 0xcd, 0x15, 0x15, 0xba, 0x4b, 0xc4, 0xc7, 0xa9, 0xb6, 0x24, 0x07, 0x07, 0x79, 0x81, 0x42, 0xa5, 0xf7, 0x41, 0x93, 0x3d, 0xce, 0x1a, 0x2b, 0x4c, 0x5d, 0x82, 0xf6, 0x1f, 0x84, 0x67, 0x7c, 0x31, 0xaa, 0x21, 0x05, 0xb4, 0x05, 0xa5, 0x00, 0x6e, 0x15, 0xfb, 0xa5, 0xc6, 0x72, 0xf2, 0xda, 0x1f, 0xc8, 0x12, 0x53, 0x64, 0x20, 0xd2, 0xfe, 0xe4, 0x61, 0x0b, 0x9e, 0x61, 0x16, 0xad, 0xb5, 0x63, 0x71, 0xb1, 0xa8, 0xd2, 0x90, 0x4e, 0x1e, 0xc4, 0x00, 0x70, 0xa9, 0x94, 0x80, 0x66, 0xa8, 0x34, 0x07, 0xda, 0x6c, 0xc4, 0x08, 0x07, 0x99, 0x63, 0xf4, 0x26, 0xcf, 0x45, 0x01, 0x29, 0x8a, 0x05, 0x2a, 0xac, 0x47, 0x3d, 0x76, 0x29, 0xe9, 0x55, 0x7e, 0x6b, 0x5a, 0x98, 0x29, 0x45, 0x75, 0x8d, 0xbb, 0x83, 0x24, 0x84, 0x0e, 0x21, 0xc5, 0x6f, 0x1e, 0xbb, 0xd3, 0xf3, 0xcc, 0x45, 0xc2, 0xbf, 0xdb, 0xfc, 0x2a, 0x1d, 0x3f, 0x9c, 0x28, 0xc6, 0x97, 0xd4, 0x02, 0xfb, 0xf8, 0xf7, 0x09, 0xd1, 0xec, 0xf4, 0xc4, 0xcd, 0xba, 0x88, 0x4a, 0xb0, 0xe8, 0xb2, 0xf0, 0x94, 0xff, 0x68, 0x24, 0x38, 0x8e, 0x88, 0x99, 0x99, 0x71, 0x11, 0xa5, 0xc2, 0x53, 0x93, 0xe7, 0xe4, 0x72, 0xe4, 0x2c, 0xa9, 0xa2, 0x15, 0x93, 0xc6, 0x95, 0xa4, 0xf0, 0xd0, 0x59, 0xf3, 0x6f, 0x50, 0x22, 0xf9, 0x7a, 0x19, 0x4a, 0x38, 0xdc, 0xd9, 0x96, 0xef, 0x26, 0xef, 0xbb, 0x90, 0x51, 0x7c, 0x21, 0x74, 0xa6, 0xbd, 0xe6, 0xce, 0xdb, 0x98, 0x26, 0xde, 0x7f, 0x74, 0x7a, 0x67, 0x98, 0x4e, 0xbe, 0x62, 0x8a, 0x09, 0x18, 0xf4, 0x3a, 0x06, 0x35, 0x9e, 0x74, 0xf5, 0xd6, 0xb4, 0x8a, 0xeb, 0x8c, 0x10, 0x3e, 0xb4, 0xbf, 0x07, 0xe2, 0x6a, 0xf5, 0x9c, 0xbe, 0x46, 0x51, 0xf4, 0xb2, 0xb7, 0x5a, 0x0a, 0x1d, 0xb1, 0xff, 0xa4, 0xfd, 0x48, 0xd7, 0x86, 0x57, 0x7d, 0xad, 0xe5, 0xd9, 0x58, 0x3b, 0x1e, 0xbe, 0x37, 0x36, 0xa8, 0xf2, 0x65, 0x8b, 0x47, 0x76, 0xee, 0xe9, 0x83, 0x07, 0xb2, 0x7f, 0x59, 0xfa, 0xb9, 0x07, 0x30, 0x6b, 0xc6, 0x03, 0x0f, 0x96, 0x2f, 0x46, 0x0c, 0x85, 0xeb, 0xb7, 0x08, 0xec, 0xed, 0x52, 0x99, 0x51, 0xb0, 0x6f, 0x48, 0x6f, 0x14, 0x47, 0xfd, 0xdd, 0x68, 0xb4, 0xb7, 0xeb, 0xc8, 0x38, 0x80, 0xcd, 0xa9, 0x41, 0xa1, 0xfb, 0xb2, 0xab, 0x12, 0xd7, 0xce, 0x87, 0x34, 0x90, 0x7f, 0x1b, 0xc2, 0x47, 0x75, 0x29, 0x05, 0x71, 0x5f, 0x75, 0x48, 0x7d, 0x01, 0x81, 0x8c, 0xb6, 0x86, 0x9b, 0x7d, 0x6a, 0x18, 0x19, 0xa4, 0x4c, 0xaf, 0xe4, 0xdd, 0x17, 0x26, 0x33, 0x0c, 0x74, 0x94, 0x99, 0x0c, 0x1e, 0xd9, 0x42, 0xe8, 0x44, 0x77, 0x7a, 0x4e, 0x2f, 0xa4, 0x6e, 0x40, 0x24, 0x9d, 0x37, 0x0d, 0x8c, 0x3c, 0x14, 0x80, 0x52, 0xcd, 0xf7, 0x57, 0x8d, 0x1e, 0x44, 0xf6, 0x5f, 0xd5, 0xd5, 0x5d, 0x1c, 0x06, 0x41, 0x58, 0xaf, 0x05, 0x5e, 0xf5, 0x3a, 0x79, 0x04, 0x3b, 0xfd, 0xb2, 0x14, 0x19, 0x79, 0x3d, 0xb9, 0x9d, 0xd5, 0xb5, 0xee, 0x67, 0x80, 0xdb, 0x41, 0x5c, 0x18, 0xe9, 0xd6, 0x9f, 0x8b, 0x24, 0xae, 0xbd, 0x7c, 0xb1, 0x29, 0x27, 0xe8, 0xa9, 0xca, 0xe6, 0x09, 0x70, 0x3b, 0x8a, 0x7a, 0x42, 0x91, 0x63, 0x9d, 0x0e, 0xd0, 0xf4, 0x3a, 0x88, 0xb2, 0xa5, 0x68, 0x7a, 0xa4, 0xb8, 0xb1, 0x5a, 0x12, 0x7e, 0x71, 0x22, 0xe4, 0xcb, 0x7f, 0x5c, 0x49, 0xa7, 0x0f, 0x7c, 0xb3, 0x46, 0xd7, 0x73, 0x23, 0x3b, 0x71, 0x81, 0xa6, 0xe8, 0x01, 0x4b, 0x1f, 0x39, 0x17, 0x2d, 0x48, 0x92, 0xd7, 0xd1, 0xf4, 0x05, 0x57, 0x01, 0x97, 0xc9, 0x48, 0xb9, 0x07, 0xe7, 0xd9, 0x81, 0x84, 0x37, 0xd8, 0xf9, 0xf7, 0x8b, 0x1a, 0xb6, 0x77, 0x2a, 0x1e, 0x4c, 0x11, 0x80, 0xed, 0xac, 0xc9, 0x13, 0x44, 0xb1, 0xdc, 0xb9, 0xf5, 0xf5, 0x48, 0x09, 0x8b, 0xe9, 0x8e, 0x0f, 0x2d, 0x25, 0xb7, 0x44, 0xc5, 0xfc, 0x95, 0xbc, 0x61, 0x54, 0x4b, 0xa2, 0xd9, 0xb4, 0x10, 0xe2, 0xb2, 0x9f, 0x2f, 0x25, 0x42, 0x21, 0x52, 0x02, 0x15, 0xa7, 0x01, 0x72, 0x90, 0x14, 0x66, 0x85, 0xd4, 0x10, 0x53, 0x54, 0xe5, 0xa3, 0x86, 0x37, 0x0c, 0x04, 0x2b, 0x38, 0x79, 0xab, 0xa2, 0xc7, 0x2d, 0xad, 0x83, 0xaf, 0x17, 0x49, 0xdf, 0x48, 0x7d, 0xbe, 0xc9, 0xee, 0x9e, 0x60, 0x15, 0xb3, 0x96, 0xeb, 0x60, 0x51, 0x81, 0x17, 0x51, 0x63, 0xe3, 0x6d, 0x1d, 0xd4, 0x48, 0x58, 0x51, 0x97, 0x27, 0x7f, 0xcc, 0x98, 0x0c, 0x52, 0x0a, 0xf3, 0xf6, 0xe3, 0xa9, 0x65, 0xfe, 0xf8, 0x25, 0xff, 0x3a, 0x5e, 0xe7, 0x22, 0xe1, 0x80, 0x7e, 0xa7, 0xb0, 0x38, 0x2c, 0x5e, 0x8c, 0xe4, 0xa4, 0xba, 0x68, 0xbd, 0x12, 0xca, 0x69, 0x64, 0x5c, 0x6b, 0x48, 0xbe, 0xa7, 0xbd, 0xf9, 0x02, 0x1e, 0xd3, 0x8a, 0x10, 0xee, 0xaf, 0x4d, 0x05, 0x95, 0x6d, 0x39, 0x0c, 0x5d, 0xbe, 0x8e, 0x77, 0x23, 0x98, 0xb8, 0x0e, 0x5d, 0x2c, 0x76, 0xa6, 0x5c, 0x19, 0x3b, 0xf6, 0xce, 0xdf, 0xd5, 0xa7, 0x86, 0x96, 0x4c, 0xaa, 0x80, 0xe0, 0x0d, 0xce, 0x1f, 0x1c, 0x47, 0x92, 0xba, 0xdc, 0x96, 0x37, 0x57, 0x99, 0xdf, 0x1a, 0xb6, 0xa6, 0x7b, 0x41, 0x92, 0x63, 0x97, 0x34, 0x23, 0xb3, 0xda, 0x0e, 0xe7, 0xb0, 0x49, 0xd3, 0xa2, 0x9d, 0x68, 0x04, 0xa4, 0x1b, 0xa2, 0x71, 0x4a, 0xa0, 0xeb, 0x4f, 0xc7, 0x26, 0xa4, 0x8a, 0x24, 0x20, 0xbf, 0x5d, 0x86, 0xb2, 0x23, 0x1f, 0xb0, 0x21, 0x52, 0x60, 0xc8, 0x89, 0x49, 0x34, 0x5e, 0xce, 0xa8, 0xcf, 0xaa, 0xd4, 0x12, 0x52, 0x15, 0xf3, 0xd7, 0xe5, 0xfc, 0xa5, 0xd0, 0x06, 0xb0, 0x82, 0x8b, 0x20, 0xc1, 0x6f, 0xa8, 0x60, 0x7c, 0x12, 0x83, 0xc4, 0xb2, 0x89, 0x14, 0x75, 0xbb, 0x5b, 0x13, 0x56, 0xbb, 0xae, 0x5f, 0xdd, 0x24, 0xbb, 0xa0, 0x22, 0x7c, 0x80, 0x2b, 0x35, 0x61, 0xb4, 0x27, 0xb5, 0xca, 0x00, 0xee, 0x9e, 0x8f, 0x6c, 0xb6, 0x63, 0x2c, 0x18, 0x71, 0x3d, 0xc2, 0x2c, 0xf2, 0xc2, 0x5e, 0x11, 0x50, 0xb9, 0x7e, 0xe2, 0x8f, 0x2d, 0xd1, 0x1d, 0x7d, 0xc0, 0x3f, 0x9f, 0xdb, 0x42, 0x29, 0xcf, 0xbd, 0x82, 0xf2, 0x19, 0x34, 0x64, 0xbe, 0x9e, 0x29, 0x34, 0x79, 0x29, 0x8c, 0x3a, 0x1c, 0x65, 0xaf, 0x8f, 0x2b, 0x4e, 0xec, 0x2f, 0x82, 0xe6, 0x8e, 0x4e, 0x52, 0x29, 0xef, 0xf0, 0x67, 0x42, 0xdd, 0xb4, 0xac, 0xff, 0x42, 0xf0, 0xf0, 0x83, 0x04, 0x03, 0xea, 0x3b, 0x2b, 0xe7, 0x7b, 0x13, 0x42, 0x06, 0x34, 0xe9, 0xff, 0x4f, 0x18, 0x41, 0x26, 0x88, 0xa3, 0x3b, 0xaa, 0xe6, 0x0b, 0xc3, 0x15, 0xdb, 0xc5, 0x08, 0x2b, 0x2f, 0x4b, 0x2f, 0xca, 0x52, 0x1d, 0x48, 0x15, 0xf1, 0x05, 0x81, 0xd2, 0xc7, 0xa0, 0x99, 0x0f, 0xb6, 0x1a, 0x98, 0x0c, 0x16, 0x39, 0xbe, 0x55, 0x4d, 0x9d, 0xb9, 0x2f, 0x9f, 0x46, 0x1b, 0x35, 0x48, 0x56, 0x0a, 0x43, 0xc8, 0x18, 0x39, 0x93, 0x7f, 0x42, 0x18, 0x26, 0x79, 0x77, 0x48, 0x66, 0x8b, 0x10, 0x52, 0x09, 0x9f, 0x1c, 0x98, 0x38, 0x4c, 0xa5, 0x8c, 0xf1, 0xaa, 0x36, 0x1f, 0xaa, 0x64, 0x99, 0x7d, 0x37, 0x0e, 0xe5, 0xf7, 0xed, 0xb9, 0xb9, 0x40, 0x08, 0xc5, 0xc2, 0xdd, 0x4a, 0xf7, 0x83, 0xd7, 0xe5, 0xcb, 0x55, 0xb3, 0x9b, 0x0c, 0xac, 0xa3, 0x24, 0xa1, 0x9d, 0xfe, 0xd0, 0xaa, 0x9d, 0xee, 0x6d, 0xcc, 0x8c, 0x69, 0x6b, 0xc8, 0xf2, 0x62, 0x3e, 0x53, 0x88, 0x40, 0x04, 0x22, 0xfa, 0x8f, 0x68, 0x44, 0xeb, 0xf5, 0xc6, 0xb4, 0x39, 0x68, 0x90, 0x2f, 0x83, 0x9f, 0xf0, 0x43, 0xe9, 0xc6, 0xae, 0xa9, 0x13, 0x76, 0x55, 0xd4, 0x75, 0xe4, 0x91, 0xca, 0xd1, 0x59, 0xdc, 0x33, 0xfd, 0xe2, 0x59, 0xaf, 0xe6, 0x48, 0x00, 0x6d, 0xd5, 0x42, 0xfc, 0xfa, 0xf1, 0xea, 0x51, 0x56, 0x06, 0x6e, 0xc2, 0x4d, 0x84, 0x08, 0xf2, 0x04, 0xcb, 0x30, 0xc9, 0xd3, 0xa5, 0x10, 0x19, 0x52, 0x14, 0x38, 0x82, 0xb7, 0x4f, 0x93, 0x93, 0x5f, 0x07, 0x99, 0x31, 0xaa, 0xee, 0xc7, 0x3d, 0x0c, 0x7a, 0x4c, 0x71, 0x61, 0xe6, 0x06, 0x8b, 0x81, 0x7b, 0xac, 0xae, 0x15, 0x0d, 0x4d, 0x05, 0xa9, 0xc8, 0xf9, 0xa9, 0x02, 0x2d, 0xbe, 0xc5, 0xb1, 0x57, 0xd6, 0xf8, 0xe8, 0x83, 0x1e, 0xfa, 0x8d, 0xcf, 0xca, 0x83, 0x8d, 0x42, 0x57, 0x68, 0x73, 0x0d, 0xc2, 0x07, 0x39, 0x10 ],
+const [ 0xc3, 0xec, 0x01, 0xc7, 0x55, 0x38, 0x5f, 0x27, 0x02, 0x0d, 0x88, 0xed, 0x2c, 0x57, 0x8e, 0x73, 0x18, 0x5c, 0x6d, 0x51, 0x4c, 0x91, 0x92, 0xd1, 0x3c, 0xb2, 0x9e, 0xa4, 0x26, 0x11, 0x67, 0xd3, 0x3b, 0x2f, 0x3f, 0xf8, 0xff, 0x89, 0x7a, 0xad, 0xf2, 0xb4, 0x2a, 0x45, 0x70, 0xac, 0x2d, 0xba, 0xd6, 0x6a, 0x6a, 0xe7, 0xe6, 0xb4, 0x57, 0xf7, 0x6d, 0x39, 0xbf, 0x1e, 0x22, 0xdd, 0xc2, 0x87, 0xd2, 0x52, 0x1d, 0x8d, 0xba, 0xe8, 0xab, 0x2d, 0x35, 0xa6, 0x2c, 0xbb, 0x97, 0x99, 0x46, 0xd5, 0x58, 0x6c, 0xc9, 0x96, 0x75, 0x39, 0x37, 0x0b, 0x13, 0x9f, 0x84, 0xeb, 0x65, 0x15, 0x1a, 0x82, 0xd1, 0x7d, 0x20, 0xef, 0x4e, 0xfd, 0xfc, 0x8f, 0x11, 0x0a, 0x16, 0xb9, 0x68, 0xc5, 0xdf, 0xac, 0xe6, 0x8b, 0x13, 0xc5, 0xc0, 0xc7, 0x3b, 0xf6, 0x77, 0x0b, 0x75, 0x73, 0xb7, 0x60, 0x77, 0xae, 0x80, 0xda, 0xd2, 0x86, 0x83, 0x6f, 0x74, 0xbb, 0xcf, 0x08, 0x71, 0xa6, 0xac, 0xd9, 0x03, 0x27, 0xc7, 0xee, 0xcf, 0xde, 0x90, 0x07, 0x69, 0x9e, 0xe1, 0xa6, 0x1b, 0x1e, 0xe0, 0x66, 0xe2, 0xf2, 0x26, 0x8e, 0xba, 0xba, 0x21, 0xe6, 0x1b, 0x9a, 0xb6, 0xca, 0xc4, 0xea, 0x2b, 0x7c, 0xb7, 0x2e, 0x45, 0xbf, 0x85, 0x48, 0xad, 0xa1, 0xcb, 0xec, 0x98, 0x98, 0xfd, 0x55, 0xa7, 0xd0, 0x62, 0x36, 0x0c, 0xc4, 0x60, 0xf4, 0xef, 0x0c, 0xfa, 0x12, 0x10, 0x75, 0x97, 0xed, 0xad, 0x57, 0x05, 0xa9, 0xa6, 0x23, 0xbd, 0x6b, 0xdf, 0x3c, 0x69, 0xc8, 0xe6, 0x08, 0xa3, 0x7e, 0xd6, 0x46, 0x00, 0x62, 0x7b, 0xa2, 0x4d, 0x9a, 0xb6, 0x86, 0x18, 0x0c, 0x23, 0x34, 0x73, 0x16, 0xfa, 0x12, 0xf4, 0x80, 0x33, 0x44, 0x00, 0xaf, 0xee, 0x80, 0x49, 0x1b, 0x11, 0x1e, 0x96, 0x03, 0x33, 0x6f, 0xc3, 0x5f, 0xb9, 0x50, 0x08, 0x16, 0x3e, 0xff, 0x7e, 0x71, 0x39, 0x2d, 0xde, 0xcf, 0xd9, 0x54, 0x8c, 0x9b, 0x34, 0x4a, 0xd5, 0x7c, 0xa1, 0x17, 0x75, 0xcb, 0x62, 0x04, 0x5d, 0x4a, 0x87, 0xf4, 0xb3, 0x13, 0x0e, 0xf7, 0x19, 0xce, 0x4f, 0x1d, 0x32, 0x27, 0x98, 0x88, 0x62, 0x80, 0x14, 0xc5, 0xd6, 0xe2, 0xf1, 0x5d, 0xc5, 0x3a, 0xc1, 0xa6, 0xf5, 0xc2, 0x21, 0xdf, 0x80, 0xbd, 0x99, 0x7c, 0xd8, 0x67, 0xc4, 0xbf, 0x09, 0x2c, 0xb1, 0x88, 0x3e, 0x18, 0x88, 0x6e, 0x87, 0x8f, 0x71, 0x0e, 0xd9, 0x3e, 0xb1, 0xa3, 0x57, 0x51, 0x16, 0xd8, 0xcf, 0xe6, 0x96, 0xda, 0x88, 0xc2, 0x33, 0xb0, 0x3b, 0x43, 0x22, 0xcf, 0x5f, 0x96, 0x2b, 0xe9, 0xa9, 0x2a, 0x53, 0x07, 0xd4, 0x65, 0xb9, 0xd7, 0x9e, 0x95, 0xbe, 0x47, 0x13, 0x29, 0x68, 0x52, 0x0d, 0x21, 0x09, 0x1a, 0xfc, 0xc3, 0x1b, 0x38, 0xe3, 0x90, 0x6f, 0x50, 0xa3, 0x76, 0x87, 0xe8, 0x7c, 0x47, 0x40, 0x7a, 0xd1, 0x6a, 0xb3, 0xc7, 0x2b, 0xd1, 0x5e, 0x6f, 0x81, 0x2a, 0x7f, 0xbf, 0xb7, 0x5a, 0xc1, 0xca, 0x64, 0x27, 0x1a, 0xbb, 0xd8, 0x34, 0xf4, 0x69, 0x5e, 0x33, 0x8b, 0x2c, 0xbe, 0x56, 0x96, 0xf0, 0x06, 0x06, 0x29, 0x87, 0x8a, 0xd8, 0xda, 0x44, 0x2a, 0xbd, 0x23, 0xc5, 0xd3, 0x79, 0x07, 0x10, 0x49, 0x56, 0xf8, 0xe2, 0x23, 0x19, 0xf9, 0x43, 0x17, 0x35, 0x00, 0x5e, 0x77, 0x3f, 0x9e, 0x90, 0xfc, 0xa2, 0xe1, 0xbf, 0xc3, 0x94, 0x7a, 0xed, 0x95, 0x48, 0x1b, 0x0c, 0x6b, 0x65, 0x23, 0x14, 0x31, 0xb8, 0x7d, 0x54, 0xcb, 0x25, 0xc5, 0x05, 0x56, 0xe4, 0xad, 0x25, 0xb0, 0xea, 0xa0, 0x83, 0x3a, 0xa4, 0xa5, 0x16, 0xdc, 0xeb, 0x85, 0x92, 0x4a, 0x35, 0x30, 0x3d, 0x86, 0x08, 0x5d, 0xff, 0xa7, 0xb5, 0x71, 0xb9, 0xd8, 0x42, 0xa2, 0xd8, 0xa3, 0xa8, 0x5c, 0x2a, 0x70, 0x3f, 0xe3, 0xf0, 0x48, 0x76, 0x3b, 0x34, 0xdf, 0xc7, 0x45, 0x5d, 0xd2, 0xea, 0x2a, 0x00, 0x2d, 0x49, 0xfc, 0xf9, 0x30, 0xb5, 0x9b, 0xbb, 0x53, 0x57, 0xd6, 0xe4, 0x87, 0xe9, 0xd3, 0x15, 0xbf, 0x26, 0xb1, 0x00, 0xaf, 0x7e, 0x6b, 0xc2, 0xd3, 0x0f, 0x00, 0x74, 0xb4, 0xd1, 0xd1, 0xfc, 0x67, 0x10, 0x4a, 0x29, 0x56, 0x20, 0xc4, 0x00, 0x43, 0x4c, 0xaa, 0x50, 0x89, 0x0f, 0xdb, 0x8d, 0xa5, 0x87, 0x50, 0xda, 0xf6, 0x26, 0xff, 0x68, 0xc1, 0xab, 0xff, 0xff, 0x78, 0x50, 0xec, 0xda, 0x3c, 0x45, 0x8d, 0xb8, 0xa0, 0x5e, 0xb4, 0x30, 0xb0, 0x09, 0x66, 0x45, 0x32, 0x82, 0x3c, 0x3a, 0x2b, 0x4a, 0x09, 0xa8, 0xa5, 0xd5, 0xbd, 0xcd, 0xb0, 0x82, 0x8a, 0x27, 0xa7, 0xd1, 0x45, 0x41, 0xb4, 0xd1, 0x0e, 0xce, 0x96, 0xd7, 0x33, 0xf4, 0xa2, 0x75, 0x52, 0xea, 0x08, 0xaa, 0xbe, 0xc5, 0x58, 0x57, 0x24, 0x8f, 0x45, 0xf2, 0x6f, 0x9a, 0xa8, 0x7e, 0xe8, 0x13, 0xc8, 0xbb, 0xa2, 0xda, 0xd8, 0x9a, 0x15, 0x91, 0xc1, 0xf3, 0x09, 0xf4, 0x22, 0x7a, 0xb6, 0x68, 0x95, 0xf0, 0x29, 0xd6, 0x35, 0x96, 0xe9, 0xb9, 0x5d, 0xe7, 0xdb, 0x76, 0xb2, 0x86, 0x63, 0xed, 0x63, 0x76, 0xcc, 0x4d, 0xaf, 0x89, 0xea, 0x2c, 0xa8, 0x1b, 0xfd, 0xd7, 0x37, 0xff, 0xd9, 0xe6, 0x61, 0xba, 0x44, 0x14, 0xc8, 0xef, 0xa0, 0x4e, 0x75, 0x1b, 0xca, 0x0a, 0xd4, 0x83, 0x41, 0xda, 0x00, 0x6a, 0x8b, 0x41, 0x41, 0x86, 0xd4, 0xc5, 0xd4, 0xb5, 0xd9, 0x45, 0xea, 0xed, 0x04, 0x8d, 0xf2, 0x71, 0xd8, 0x28, 0x1b, 0x4b, 0x90, 0x75, 0x15, 0xf6, 0x03, 0xfe, 0x18, 0x5b, 0xcb, 0x04, 0x28, 0xff, 0xa6, 0x5f, 0x97, 0x7a, 0x1c, 0x85, 0xcb, 0x2b, 0x63, 0xe8, 0x42, 0x2a, 0x7f, 0x85, 0xd2, 0x7e, 0xad, 0xb9, 0x36, 0x90, 0x02, 0x57, 0xc6, 0xe0, 0x50, 0xf9, 0x86, 0xf7, 0x49, 0x93, 0x62, 0x9d, 0xe7, 0x4e, 0xb8, 0x4b, 0x0b, 0x93, 0x17, 0xe3, 0x64, 0x65, 0x47, 0x9f, 0x92, 0xf5, 0x89, 0x47, 0x8b, 0x70, 0x1f, 0xa8, 0x3e, 0x1c, 0x0f, 0x41, 0x77, 0xa3, 0x25, 0x3f, 0x03, 0xaf, 0x37, 0xac, 0x14, 0xb6, 0xac, 0xe3, 0xe7, 0x18, 0x3f, 0x47, 0xa3, 0x67, 0x01, 0x34, 0x85, 0x05, 0x9d, 0x36, 0x3a, 0xf5, 0xe0, 0x79, 0x8c, 0xeb, 0x79, 0x81, 0x41, 0xa5, 0xfd, 0x1b, 0x40, 0x7e, 0x2e, 0x94, 0xf6, 0x41, 0x7c, 0x28, 0xf8, 0x3b, 0xcc, 0xbd, 0xea, 0x94, 0x79, 0xd2, 0x9f, 0xdf, 0x98, 0xb2, 0x81, 0xef, 0x81, 0xed, 0x34, 0xec, 0x8b, 0x08, 0x76, 0xa7, 0x16, 0x74, 0x4a, 0x2b, 0xcf, 0xbd, 0x55, 0x95, 0x2f, 0x04, 0x88, 0x25, 0x45, 0xaf, 0xff, 0x94, 0xb6, 0x5f, 0x29, 0xa8, 0x02, 0x22, 0x2a, 0x07, 0x08, 0xeb, 0x7d, 0x49, 0xcd, 0x3f, 0xde, 0x50, 0x79, 0x30, 0x67, 0xdc, 0xa2, 0x8f, 0xf9, 0x5a, 0xcd, 0x5e, 0xdd, 0xfd, 0x32, 0x84, 0xab, 0x10, 0xc0, 0xc4, 0x6b, 0x8b, 0x61, 0xf0, 0xfb, 0xe4, 0x7f, 0x5a, 0xb1, 0x27, 0xc7, 0x8c, 0x40, 0x49, 0x2d, 0x39, 0xe0, 0xba, 0x30, 0x73, 0xa9, 0x39, 0x5f, 0x1d, 0x40, 0xec, 0x1c, 0xa4, 0xb6, 0xb0, 0xa0, 0xea, 0xad, 0xae, 0x3f, 0x83, 0xbd, 0x2f, 0xed, 0x24, 0x16, 0xb1, 0x02, 0x58, 0x66, 0x39, 0x3a, 0x75, 0xfd, 0xec, 0x00, 0xcf, 0x2f, 0xd9, 0xec, 0x2b, 0xf9, 0x1a, 0x8a, 0x77, 0xe8, 0x1b, 0x5d, 0xb8, 0x37, 0x39, 0x23, 0x43, 0x37, 0x8f, 0x5b, 0x30, 0xf4, 0x0c, 0x05, 0x0c, 0x16, 0xc9, 0xa9, 0xce, 0x05, 0x9a, 0x9a, 0x0c, 0x51, 0xe4, 0x7c, 0x6f, 0x50, 0xae, 0x04, 0x65, 0x09, 0xfa, 0xff, 0x15, 0x50, 0x55, 0x96, 0x98, 0x33, 0xad, 0xd0, 0x66, 0x95, 0x63, 0x58, 0x0e, 0x19, 0xa1, 0x81, 0x2b, 0x42, 0xee, 0x87, 0x93, 0xd8, 0xff, 0x18, 0xd1, 0x8d, 0xd0, 0x12, 0xd6, 0xe0, 0xf4, 0x8f, 0xeb, 0x42, 0x2a, 0x1f, 0xea, 0x77, 0x30, 0x54, 0xae, 0x40, 0xdc, 0x84, 0xc8, 0x37, 0x68, 0xca, 0x73, 0xfa, 0x0e, 0x4e, 0xcb, 0x8b, 0xd4, 0xc6, 0x39, 0xf7, 0xaa, 0x3d, 0x32, 0x36, 0xb2, 0x13, 0x21, 0x53, 0xdf, 0x46, 0xa1, 0xcd, 0xc1, 0xef, 0xf0, 0x3c, 0x9f, 0x10, 0xa0, 0x37, 0xc7, 0x8c, 0x90, 0x76, 0x22, 0x77, 0x1b, 0x34, 0x0b, 0x90, 0x8f, 0xd7, 0x61, 0x0c, 0xe1, 0xd3, 0xdb, 0x96, 0x9f, 0xcc, 0x9c, 0x93, 0x25, 0xfb, 0x08, 0xaa, 0x14, 0xd2, 0xd5, 0x84, 0x00, 0xe3, 0x65, 0xd0, 0x69, 0xfe, 0x53, 0x8b, 0xed, 0x99, 0x4c, 0x7e, 0xbb, 0x75, 0x20, 0x08, 0x4b, 0x7f, 0x18, 0x1d, 0x4d, 0xf5, 0x8b, 0x8f, 0xdf, 0xc9, 0xac, 0x8c, 0x02, 0x4a, 0xa6, 0x69, 0x4f, 0x01, 0xeb, 0x9d, 0xe6, 0xd9, 0xc8, 0x11, 0xa8, 0x84, 0x3e, 0x97, 0xa6, 0x19, 0x0d, 0xb7, 0xd8, 0x02, 0x11, 0xb2, 0x13, 0x15, 0xd1, 0xc1, 0x35, 0x01, 0x56, 0x9e, 0xa3, 0xec, 0x39, 0x45, 0xf5, 0x5a, 0x00, 0xfc, 0xef, 0x51, 0xab, 0x91, 0xb3, 0xbb, 0x89, 0xe3, 0x36, 0x0b, 0x50, 0xa3, 0xf1, 0x23, 0x6d, 0x5c, 0xd9, 0x75, 0x99, 0xb1, 0x90, 0x69, 0xad, 0xe7, 0xdd, 0xff, 0xb7, 0xa3, 0x5a, 0xb6, 0x4d, 0xf4, 0x6c, 0xac, 0x21, 0x93, 0x78, 0x06, 0xd6, 0x6a, 0x54, 0x92, 0x12, 0x54, 0xfc, 0xab, 0xd5, 0x24, 0x87, 0x5e, 0x09, 0xe8, 0x59, 0xcb, 0x5a, 0x6f, 0x99, 0xcd, 0x47, 0x08, 0xe6, 0xdd, 0x79, 0x8d, 0x45, 0x33, 0x54, 0xa0, 0x5e, 0x2f, 0xcd, 0x35, 0xe9, 0xf8, 0x7b, 0x51, 0x63, 0x63, 0xf0, 0x10, 0x05, 0x16, 0x49, 0xed, 0xf6, 0xed, 0x04, 0x3e, 0xc0, 0x9c, 0x12, 0xfe, 0x01, 0x96, 0x2d, 0xcf, 0x63, 0x2e, 0x6c, 0x3f, 0xcd, 0xfc, 0x15, 0x4b, 0xdb, 0x83, 0xb2, 0x22, 0x8c, 0x10, 0x67, 0x2b, 0x3b, 0xe5, 0x82, 0x48, 0xd1, 0x97, 0x54, 0x5d, 0x38, 0xb5, 0x40, 0x0c, 0x13, 0xaa, 0x11, 0xc3, 0xac, 0xe5, 0x90, 0xf9, 0x2d, 0x37, 0x57, 0xb4, 0x14, 0x7c, 0xe0, 0x4f, 0xe1, 0x7d, 0xe1, 0x7a, 0x11, 0x15, 0xdc, 0x82, 0x50, 0x93, 0xf1, 0xd3, 0xeb, 0x60, 0xf8, 0xbb, 0x84, 0xe2, 0xcc, 0x70, 0x09, 0x9f, 0xe9, 0x55, 0xe7, 0xa6, 0x3a, 0x79, 0x7a, 0x2b, 0x2c, 0x60, 0xc8, 0x71, 0x07, 0x07, 0x70, 0xed, 0x7e, 0x22, 0xdd, 0xa8, 0x85, 0xa8, 0xbf, 0xe5, 0x62, 0x91, 0xbc, 0x04, 0x07, 0xdf, 0x62, 0xa6, 0x9f, 0xdb, 0x61, 0x12, 0x67, 0xa1, 0xf7, 0xd7, 0xbf, 0xde, 0xab, 0xb3, 0x81, 0xd9, 0x3e, 0xb4, 0x91, 0xb0, 0xdf, 0x9d, 0xb5, 0xe4, 0x9e, 0x8b, 0xa7, 0x18, 0x23, 0xd8, 0x69, 0x16, 0xa0, 0x40, 0xd9, 0x13, 0x04, 0x42, 0x85, 0x34, 0x72, 0xc9, 0xc0, 0x51, 0xf1, 0x0c, 0xf6, 0xf8, 0x65, 0xb3, 0x3c, 0xb5, 0xbe, 0x3b, 0x2b, 0x90, 0x6f, 0x9b, 0xef, 0xd8, 0x21, 0x28, 0x9b, 0x1f, 0xa9, 0xb6, 0xbf, 0x86, 0x38, 0x00, 0x3d, 0x3b, 0xd2, 0x4a, 0x58, 0x3f, 0x02, 0x44, 0x0e, 0x6d, 0xcb, 0x32, 0xa8, 0xb8, 0xe1, 0x4a, 0x8f, 0xb4, 0x1a, 0x5d, 0x61, 0x58, 0x1f, 0xba, 0x44, 0x02, 0x67, 0x50, 0x7b, 0xbb, 0x66, 0x12, 0x37, 0xbc, 0x01, 0xa0, 0xaf, 0x32, 0x46, 0x23, 0x72, 0x3f, 0x5a, 0x78, 0xfc, 0x41, 0xb2, 0x92, 0x88, 0x56, 0x86, 0x19, 0x26, 0x20, 0x83, 0x57, 0x0d, 0xc5, 0xc1, 0x55, 0x32, 0x3a, 0xf4, 0x41, 0x1a, 0xc2, 0xe6, 0x13, 0xec, 0xb1, 0x25, 0x71, 0xca, 0x76, 0xf8, 0xcf, 0x61, 0xd8, 0x98, 0xda, 0xbf, 0x80, 0x9d, 0x17, 0x65, 0xb8, 0xb7, 0xc7, 0x9e, 0x72, 0x9e, 0x0f, 0x0f, 0x8c, 0x4c, 0x55, 0x8e, 0x52, 0x69, 0xed, 0x38, 0x45, 0x07, 0xf5, 0xbd, 0x1b, 0x8f, 0x7d, 0xff, 0x06, 0xfb, 0xec, 0xdc, 0x39, 0x46, 0x9e, 0x47, 0xa9, 0x21, 0xd2, 0x9e, 0x10, 0xe8, 0xc4, 0x37, 0x38, 0xd4, 0x16, 0x3d, 0x76, 0x72, 0x74, 0xba, 0x74, 0x54, 0x78, 0xf4, 0x34, 0x06, 0xcb, 0xfd, 0x52, 0x43, 0x8e, 0x86, 0x8a, 0x69, 0xf8, 0xf4, 0x79, 0x2b, 0x40, 0xb6, 0xa8, 0x86, 0xbd, 0xd5, 0xc6, 0xf6, 0x4c, 0xcc, 0x35, 0xe9, 0xf2, 0x9b, 0xc9, 0x74, 0xc2, 0x17, 0xcc, 0x45, 0x01, 0x84, 0x45, 0xd9, 0x89, 0x65, 0x79, 0xef, 0x6b, 0x93, 0xb3, 0x3c, 0xd8, 0x8d, 0x41, 0x60 ],
+const [ 0x78, 0x10, 0xae, 0xd4, 0xd4, 0x2c, 0x06, 0x06, 0xd0, 0xc1, 0xf7, 0x69, 0x43, 0xd0, 0xc6, 0x3f, 0x38, 0xd2, 0x61, 0xcd, 0xaa, 0x62, 0x44, 0xb5, 0x8c, 0x36, 0x99, 0x7f, 0x0d, 0x53, 0xa3, 0x79, 0x19, 0x81, 0x5c, 0xc1, 0x23, 0xfd, 0x5d, 0xa0, 0x22, 0x6f, 0xff, 0x19, 0xd9, 0x1b, 0xc0, 0xc2, 0x5c, 0x5b, 0xe8, 0xd3, 0xd0, 0x4d, 0x6c, 0x7d, 0x72, 0xc9, 0x12, 0x7d, 0xdb, 0x96, 0xd6, 0xf0, 0x82, 0xdd, 0x8c, 0x69, 0x82, 0xdd, 0xc8, 0x41, 0x9d, 0xe1, 0xfb, 0x2e, 0x81, 0x6f, 0xde, 0x17, 0x4b, 0xc3, 0x14, 0x27, 0x4a, 0x7c, 0x0b, 0x21, 0x05, 0x94, 0x23, 0xf3, 0x7f, 0x95, 0x12, 0x8d, 0xb9, 0x0a, 0x87, 0xf3, 0x79, 0x34, 0x0d, 0x91, 0x4a, 0xff, 0x32, 0xd0, 0xc4, 0x34, 0xe9, 0xe6, 0x0d, 0xf0, 0x2e, 0xf2, 0xa0, 0x55, 0xe8, 0x48, 0x4d, 0x7f, 0x13, 0x09, 0x81, 0xba, 0x1e, 0xf8, 0xc8, 0xf2, 0x92, 0x88, 0x90, 0x6b, 0xf5, 0x3a, 0x30, 0xb2, 0xee, 0x25, 0x29, 0xd3, 0xaa, 0xd6, 0xab, 0xcc, 0x7d, 0x5b, 0x5b, 0x42, 0xcd, 0x9b, 0x53, 0x73, 0x2c, 0xe9, 0x6a, 0x6c, 0xc4, 0xd8, 0xb6, 0x7b, 0xf8, 0x50, 0x50, 0xe8, 0x48, 0xe1, 0x57, 0xe0, 0x75, 0x58, 0x38, 0xb2, 0xe6, 0x90, 0x2c, 0x3e, 0x4b, 0x8b, 0x02, 0xa9, 0x80, 0xc1, 0x1e, 0x56, 0xb4, 0xb8, 0xc2, 0x12, 0xca, 0xd5, 0x8c, 0x8f, 0xff, 0x72, 0x40, 0x14, 0xce, 0x31, 0xc8, 0x72, 0x11, 0x8f, 0x79, 0x3a, 0x68, 0xbc, 0x98, 0x2d, 0xde, 0xaa, 0x1d, 0xf4, 0xca, 0x63, 0xb6, 0x12, 0xf4, 0xa1, 0x0f, 0x16, 0xf9, 0x98, 0x51, 0x15, 0xf1, 0x17, 0xe9, 0x57, 0x4e, 0xcf, 0x8a, 0x51, 0x07, 0xf2, 0x75, 0xd3, 0xf7, 0x01, 0xf8, 0x83, 0x80, 0xdf, 0x34, 0x8a, 0x73, 0x29, 0x24, 0x8d, 0x34, 0xca, 0xdb, 0xdf, 0x19, 0xc9, 0x0d, 0xf5, 0x14, 0x66, 0xd1, 0x1a, 0x92, 0x66, 0xa5, 0x63, 0xa2, 0xab, 0xb3, 0xe6, 0x5a, 0x07, 0x53, 0x27, 0x76, 0x52, 0xd0, 0xd3, 0x43, 0xba, 0x6f, 0xb1, 0xbc, 0x5b, 0xad, 0xd5, 0xf2, 0x10, 0xc9, 0x17, 0xb1, 0x88, 0x82, 0xc3, 0x60, 0x9c, 0x22, 0x92, 0x29, 0xdf, 0xbb, 0xd9, 0x5a, 0x77, 0xb1, 0x01, 0x0b, 0x2c, 0x78, 0x37, 0x02, 0xbf, 0x9f, 0x64, 0xd3, 0x7d, 0x0e, 0x60, 0x4b, 0x13, 0x8c, 0x63, 0x0f, 0xa4, 0x84, 0xbc, 0x81, 0x19, 0x08, 0xc5, 0xe3, 0xb9, 0x16, 0x16, 0xbf, 0xf9, 0x1a, 0xf9, 0x86, 0x95, 0xb5, 0x1e, 0x77, 0xdf, 0xbd, 0x90, 0xc2, 0x57, 0x85, 0xe8, 0xee, 0x7d, 0x5e, 0xc1, 0x78, 0xe3, 0x5d, 0x6b, 0xbd, 0x86, 0x5f, 0xe4, 0x19, 0x5e, 0x4b, 0x03, 0x51, 0x34, 0x97, 0xf7, 0x2e, 0xb4, 0x0e, 0xf0, 0x6b, 0xc3, 0xd0, 0x1c, 0xd2, 0x13, 0x9a, 0xd5, 0xa1, 0xf4, 0x47, 0x19, 0x32, 0x6d, 0x97, 0x3a, 0xdb, 0x8b, 0x30, 0xd6, 0x14, 0xf9, 0xe2, 0x0a, 0xd7, 0xd1, 0x2f, 0xe3, 0x4d, 0xb2, 0x0b, 0x15, 0xa6, 0x13, 0xe0, 0xf0, 0x48, 0xd6, 0xd5, 0x8f, 0x2d, 0x20, 0x50, 0x53, 0x86, 0x69, 0xb9, 0x90, 0xa5, 0xcf, 0x82, 0x85, 0x19, 0xb0, 0x64, 0x92, 0x1b, 0x77, 0xeb, 0xa5, 0x29, 0xb6, 0x34, 0xf6, 0xf0, 0x76, 0xf6, 0xf4, 0x6f, 0xcb, 0xbf, 0x7e, 0x5a, 0xab, 0x80, 0x57, 0xbc, 0xff, 0x4c, 0xd4, 0xe1, 0xfb, 0x5d, 0xd8, 0x73, 0xab, 0x58, 0x02, 0xe3, 0xcf, 0xd1, 0x25, 0x0a, 0xe9, 0x12, 0xf9, 0x11, 0x94, 0x18, 0x10, 0x8e, 0x17, 0xdf, 0x0b, 0xef, 0x3a, 0xe0, 0x0d, 0x1c, 0x59, 0xd7, 0x70, 0x58, 0xb6, 0xc9, 0xb7, 0x68, 0x13, 0x46, 0xc4, 0xf8, 0x81, 0xec, 0x4c, 0x3a, 0x73, 0x2c, 0x87, 0xd0, 0x16, 0x51, 0x2c, 0xec, 0xe5, 0xbd, 0x9c, 0xb6, 0x78, 0x76, 0x5d, 0xee, 0x9c, 0xe2, 0xcb, 0xd2, 0xa9, 0xcf, 0x0a, 0x42, 0x10, 0xb6, 0x3f, 0x22, 0x34, 0x41, 0x00, 0x00, 0x7b, 0x0a, 0x09, 0xf6, 0xa4, 0xa6, 0x30, 0xd2, 0x5b, 0xe2, 0x9b, 0x75, 0x0a, 0x4c, 0x30, 0x79, 0xf3, 0xf6, 0x4d, 0x17, 0x7c, 0x76, 0xb9, 0x47, 0xc9, 0x31, 0xdb, 0x28, 0x90, 0xda, 0x2a, 0xa3, 0x29, 0x35, 0xe5, 0x4b, 0xe5, 0x21, 0x04, 0x88, 0xa1, 0xd5, 0x6e, 0xf5, 0x9b, 0x6a, 0x6c, 0x06, 0x84, 0x9a, 0x5e, 0xee, 0xd6, 0xc7, 0xad, 0xc0, 0x67, 0x3e, 0x00, 0xd4, 0x3f, 0xbe, 0xb3, 0x6c, 0xa6, 0x34, 0x85, 0x97, 0x82, 0xc9, 0x90, 0x56, 0xe0, 0x1e, 0x7f, 0xfe, 0xd1, 0xd6, 0xfb, 0xdd, 0x77, 0x56, 0x66, 0x20, 0x5f, 0xc8, 0xcc, 0xf4, 0x11, 0x66, 0x16, 0xec, 0xe6, 0xf5, 0x81, 0xa3, 0x1a, 0x8f, 0x4f, 0xa2, 0x22, 0xa6, 0xbd, 0x84, 0x40, 0x46, 0x34, 0x58, 0x54, 0x9a, 0xc3, 0x46, 0xf5, 0xb2, 0xcd, 0x76, 0xc0, 0x83, 0xff, 0x2d, 0xf0, 0x30, 0x85, 0x39, 0x30, 0x88, 0x7e, 0x90, 0xad, 0xcf, 0xad, 0x34, 0x6e, 0xc1, 0x71, 0x59, 0xe8, 0xd4, 0xf7, 0xca, 0xcd, 0xbe, 0xae, 0x89, 0x26, 0x37, 0xfb, 0xb5, 0xa1, 0x00, 0x2f, 0xb1, 0x2c, 0x24, 0xb6, 0x83, 0xc2, 0x7e, 0x90, 0x7a, 0x85, 0x7b, 0x06, 0x14, 0x0e, 0x21, 0x95, 0x1e, 0x01, 0x50, 0x2f, 0x1d, 0xe4, 0x48, 0xa3, 0xed, 0x31, 0x6c, 0x59, 0xa8, 0xa9, 0x46, 0x42, 0xca, 0xec, 0xca, 0x0f, 0x92, 0x47, 0xdf, 0xa1, 0xab, 0xcd, 0x1b, 0xc1, 0x0b, 0xa9, 0xce, 0x12, 0x1c, 0xb2, 0x43, 0x43, 0x19, 0x40, 0x42, 0x89, 0xbb, 0x3e, 0xd9, 0x4d, 0x16, 0x81, 0x5d, 0x22, 0xbd, 0x58, 0xab, 0xf9, 0x2d, 0x65, 0xb3, 0x98, 0x69, 0xab, 0x38, 0x48, 0xe1, 0xe7, 0xd1, 0xce, 0x98, 0x24, 0x34, 0x9d, 0x86, 0x8a, 0xb3, 0x4a, 0x3c, 0x77, 0x07, 0x40, 0xc6, 0xd1, 0x4d, 0xb5, 0xd5, 0x9a, 0x4e, 0xdd, 0x1e, 0xc4, 0x03, 0x5d, 0xfd, 0x47, 0x59, 0x02, 0x5e, 0x72, 0x31, 0xb3, 0xdd, 0x7e, 0xab, 0xa4, 0x2c, 0x69, 0xa4, 0xcd, 0xb5, 0x02, 0x7d, 0x9b, 0x81, 0x40, 0x1e, 0xe5, 0x59, 0xd7, 0x3b, 0x21, 0x2b, 0x0d, 0xd6, 0xd8, 0xaf, 0xca, 0x06, 0x57, 0x49, 0xef, 0xf6, 0xa8, 0x32, 0xe9, 0x30, 0xc0, 0xd3, 0x86, 0x1c, 0xfa, 0x71, 0x07, 0xc3, 0xc4, 0x0f, 0x76, 0xd9, 0x98, 0x90, 0x3a, 0xfb, 0x2f, 0x1d, 0xe8, 0x35, 0xf1, 0xc6, 0x5c, 0xc7, 0xaf, 0x6c, 0x09, 0x29, 0x94, 0xde, 0x8d, 0x4c, 0x59, 0x42, 0x88, 0x23, 0xb9, 0xb7, 0xaf, 0x62, 0x25, 0x38, 0x1c, 0x86, 0xb8, 0xc3, 0xe8, 0x15, 0x6d, 0xbb, 0xfc, 0x27, 0x90, 0x8c, 0x24, 0x25, 0x72, 0x8d, 0x66, 0xd1, 0x61, 0x2a, 0x91, 0x86, 0xd7, 0x42, 0x18, 0xc1, 0xf2, 0xce, 0x21, 0xe1, 0x24, 0xc4, 0xda, 0x2b, 0x2c, 0x3b, 0x0c, 0x11, 0x45, 0xcf, 0xf2, 0xb4, 0x9d, 0x47, 0x4b, 0xa7, 0x08, 0x75, 0xae, 0xf6, 0xf6, 0x5e, 0x1e, 0x67, 0xa3, 0x9b, 0xde, 0xff, 0x8d, 0xff, 0x86, 0xc8, 0x2b, 0x7a, 0x57, 0xd2, 0xdc, 0x3d, 0xcc, 0x78, 0x1e, 0x1f, 0x71, 0xe4, 0x00, 0x40, 0xf8, 0xd6, 0xda, 0xec, 0x8a, 0xa0, 0x3b, 0xc2, 0x5b, 0x76, 0x23, 0x15, 0x81, 0xe4, 0x72, 0x92, 0x06, 0xa0, 0xa1, 0x23, 0x3c, 0x82, 0xb0, 0x14, 0x50, 0xd1, 0x5f, 0x75, 0x22, 0xc0, 0xa1, 0xbf, 0x54, 0x38, 0x4e, 0xba, 0xa2, 0xd8, 0x18, 0x9d, 0x71, 0x3b, 0xc0, 0x77, 0xaa, 0x79, 0x8a, 0xcf, 0xc8, 0xf0, 0xee, 0x87, 0x30, 0x44, 0x90, 0x07, 0xc1, 0xa4, 0x72, 0x97, 0xad, 0x4f, 0x68, 0x0b, 0x87, 0x57, 0xcd, 0xa6, 0x9d, 0xa5, 0x75, 0x39, 0x87, 0x3e, 0xe2, 0x8b, 0x00, 0xc5, 0xbb, 0xfd, 0xf5, 0x40, 0x79, 0x6e, 0xdc, 0x1f, 0x64, 0x5d, 0x47, 0x7a, 0xbe, 0x4d, 0xb9, 0x9a, 0x3e, 0x6e, 0xb8, 0xbb, 0xc0, 0x79, 0x23, 0x10, 0x3a, 0xdc, 0xc6, 0x08, 0xf2, 0x17, 0x2c, 0xd0, 0xee, 0x66, 0xb4, 0x19, 0xac, 0xa0, 0xe7, 0x1b, 0x14, 0x5f, 0x09, 0xd9, 0xab, 0x61, 0xee, 0xa7, 0x09, 0x2e, 0x10, 0xea, 0x8d, 0xfb, 0xde, 0x20, 0x4f, 0xcf, 0x56, 0x20, 0x56, 0xe4, 0xd5, 0xa2, 0x0c, 0x50, 0x2e, 0x01, 0xee, 0xe4, 0xfa, 0x40, 0x88, 0x55, 0x30, 0x4c, 0xa1, 0x99, 0xf6, 0x80, 0xb3, 0x94, 0xb6, 0x6e, 0x9e, 0xf4, 0x73, 0xdd, 0x9c, 0x5a, 0x5e, 0x0e, 0x78, 0xba, 0xa4, 0x44, 0xfb, 0x04, 0x8b, 0x82, 0xa8, 0x04, 0xbd, 0x97, 0xa9, 0x87, 0xe3, 0x58, 0x08, 0xbf, 0x76, 0x2d, 0x22, 0xe8, 0xd2, 0xcf, 0x59, 0x2c, 0x8d, 0x4f, 0x0a, 0xc4, 0x06, 0x5b, 0xbf, 0x61, 0x41, 0xbd, 0xa5, 0xca, 0xf2, 0x24, 0x40, 0xc6, 0xd7, 0x27, 0x5d, 0x3c, 0x4b, 0x87, 0x48, 0x99, 0x19, 0xb4, 0x40, 0x72, 0x8e, 0x93, 0x28, 0x6b, 0xd2, 0x7f, 0x7f, 0x57, 0x78, 0x8e, 0x92, 0xa0, 0x53, 0x15, 0xf0, 0xe9, 0x8b, 0x6e, 0x1f, 0xf3, 0xf1, 0xf8, 0x8d, 0xbd, 0x90, 0x60, 0xc9, 0xf0, 0x84, 0x1f, 0xf3, 0x79, 0x10, 0x44, 0x72, 0x78, 0xea, 0x74, 0xe4, 0x59, 0xd9, 0x2f, 0x5b, 0x40, 0x82, 0x54, 0xc6, 0xab, 0x7f, 0xe8, 0xad, 0x53, 0xb2, 0x13, 0x22, 0x53, 0xd9, 0x6b, 0xf4, 0x8b, 0x62, 0x76, 0x25, 0x47, 0x80, 0x69, 0x9e, 0x1c, 0x7e, 0x36, 0x22, 0x13, 0x54, 0xc6, 0x81, 0x0a, 0x78, 0x83, 0x0e, 0x56, 0xf6, 0x1a, 0x52, 0xad, 0xc3, 0x7f, 0x02, 0x44, 0x4e, 0x31, 0x2f, 0x34, 0x59, 0xbf, 0xbd, 0x22, 0x07, 0x8b, 0x16, 0x1f, 0x36, 0xce, 0x1f, 0xcd, 0x0e, 0xdc, 0x6c, 0xc3, 0xda, 0xaa, 0xb0, 0x33, 0x17, 0x8d, 0x77, 0xca, 0xcb, 0x44, 0x17, 0xd8, 0x19, 0x39, 0xe3, 0xb1, 0x11, 0x04, 0xa3, 0x53, 0xcd, 0x31, 0x41, 0x49, 0xb9, 0x43, 0xc5, 0xcf, 0x32, 0xf8, 0x83, 0x36, 0x53, 0xcf, 0x93, 0x8a, 0x0b, 0xc8, 0x82, 0x73, 0x73, 0x6b, 0x47, 0x59, 0x5f, 0x0b, 0x79, 0xcb, 0x34, 0x4c, 0xbf, 0x22, 0xf9, 0xe3, 0x87, 0x61, 0xb0, 0x9d, 0xfb, 0x60, 0xe6, 0xa3, 0x30, 0x2a, 0x89, 0xfc, 0xa1, 0xa3, 0xfa, 0x53, 0xdd, 0x6e, 0x63, 0xfb, 0x7c, 0x0d, 0x4b, 0x30, 0x57, 0x4a, 0x67, 0xa0, 0xf9, 0xd6, 0xb3, 0x2a, 0x50, 0x31, 0xc2, 0xe5, 0xa8, 0xc9, 0x52, 0x64, 0xdb, 0x66, 0x24, 0x38, 0xc1, 0xc5, 0x0b, 0xb7, 0xee, 0x83, 0x42, 0xfc, 0x9d, 0x3e, 0x02, 0x2f, 0xe7, 0xf6, 0x54, 0x07, 0x39, 0xb9, 0x25, 0x8c, 0x04, 0x7f, 0x98, 0x22, 0xb6, 0x53, 0xa0, 0xc3, 0xea, 0xb3, 0xcd, 0x8c, 0xdb, 0x3a, 0x66, 0x7b, 0x1f, 0x7c, 0xb9, 0x77, 0x92, 0x32, 0xaf, 0x90, 0x90, 0x97, 0xa3, 0x89, 0x67, 0x11, 0x74, 0x93, 0x0b, 0x14, 0xd9, 0x5c, 0x0c, 0x43, 0xf5, 0x48, 0xc6, 0xd9, 0x2c, 0xfe, 0xd8, 0x48, 0x34, 0x27, 0xd7, 0x20, 0x6f, 0x72, 0x43, 0x31, 0x78, 0xdc, 0xb9, 0xf4, 0xfc, 0x2e, 0x6b, 0x27, 0xcb, 0xc7, 0xce, 0xb8, 0x2e, 0x9b, 0x92, 0xe4, 0x7c, 0x7c, 0xd7, 0xa0, 0xe8, 0x99, 0x9e, 0x38, 0x9d, 0x44, 0x7d, 0x36, 0x0d, 0xf8, 0x98, 0x85, 0x85, 0x9a, 0xcc, 0xd6, 0x05, 0xff, 0x2d, 0x43, 0x50, 0xaf, 0xb3, 0x32, 0x3f, 0xe8, 0x30, 0x7d, 0x5a, 0xe6, 0x85, 0xd0, 0xa9, 0x62, 0x16, 0x52, 0xc8, 0x59, 0x7b, 0x87, 0x3a, 0x0e, 0x79, 0x75, 0xff, 0x52, 0x30, 0x05, 0x69, 0x03, 0x95, 0xad, 0x2b, 0xd3, 0x23, 0x4c, 0xb3, 0x4a, 0xce, 0x55, 0xba, 0x0f, 0x39, 0x30, 0x19, 0x63, 0x28, 0xdd, 0xde, 0xee, 0x38, 0xdb, 0x9f, 0xbe, 0xce, 0x48, 0x0e, 0x8d, 0x4d, 0x49, 0xce, 0x42, 0x8c, 0xac, 0x85, 0xbb, 0x87, 0xcc, 0x33, 0xca, 0x54, 0xb5, 0xc2, 0x7d, 0x59, 0x89, 0xde, 0xa3, 0xbd, 0x23, 0x06, 0x8b, 0x1c, 0xf9, 0xe3, 0x0f, 0x7f, 0x47, 0xd9, 0xd1, 0x8b, 0x6a, 0xdd, 0xc5, 0xf8, 0x89, 0x86, 0xf0, 0x45, 0x7b, 0x66, 0x6f, 0xaa, 0xe5, 0x9a, 0xba, 0x4f, 0xa3, 0xa0, 0x2a, 0xbb, 0x6a, 0x69, 0xb9, 0x8f, 0xab, 0xaf, 0x0a, 0x74, 0xba, 0x89, 0xa9, 0x52, 0x2f, 0x3d, 0x93, 0xc3, 0x8d, 0x55, 0xf9, 0xc7, 0x21, 0xf5, 0x41, 0xb9, 0x2d, 0x6b, 0x4e, 0x81, 0x46, 0x08, 0x01, 0x0c, 0xfb, 0x2e, 0xff, 0xf9, 0xb7, 0xab, 0xb5, 0x95, 0xe9, 0x45, 0x9a, 0x0a, 0x61, 0x96, 0xb4, 0xd3, 0xfd, 0x1b, 0x5e, 0x73, 0x86, 0x87, 0x48, 0x67, 0xd5, 0x5d, 0xbf, 0x59, 0x3a, 0xbd, 0x2f, 0x96, 0x1e, 0x7e, 0xe6, 0xc2, 0xe6, 0x7e, 0x1a, 0xcb, 0x1b, 0x36, 0x2e, 0x1b, 0xc8, 0x92, 0x31, 0x12, 0x24, 0xff, 0xa8, 0xb3, 0x71, 0xc5, 0x8d, 0x9d, 0x24, 0x97, 0x97, 0x3d, 0x46, 0x68, 0xbc, 0x43, 0x1a, 0x81, 0xf5, 0x52, 0x00, 0xd1, 0x41, 0xfc, 0x99, 0x84, 0xec, 0xed, 0x2c, 0xd7, 0x11, 0x66, 0x49, 0x2a, 0x5e, 0xee, 0xac, 0x56, 0x17, 0x44, 0x63, 0x42, 0x5d, 0x97, 0x34, 0xb1, 0xb1, 0xf9, 0x39, 0x5e, 0xb4, 0x12, 0xcd, 0x4b, 0x30, 0x11, 0xac, 0x56, 0x5c, 0xe8, 0x55, 0x0d, 0x5c, 0xb9, 0xb3 ],
+const [ 0x6b, 0x50, 0xd7, 0x0e, 0xb3, 0xd9, 0x58, 0x73, 0x0f, 0x65, 0x0f, 0x7f, 0x99, 0xf9, 0xfb, 0x04, 0x6d, 0x94, 0x2f, 0x98, 0x5a, 0x11, 0x29, 0x97, 0xdd, 0x4e, 0x60, 0x67, 0x4f, 0x8e, 0x1c, 0x00, 0x5d, 0x1c, 0x8a, 0xab, 0xb9, 0x32, 0x10, 0x09, 0x0f, 0x18, 0xde, 0x58, 0x3b, 0x90, 0xc6, 0xf2, 0xb9, 0x72, 0x4d, 0x16, 0x5c, 0x94, 0x02, 0xeb, 0x43, 0xec, 0x0e, 0xc2, 0x0a, 0xf9, 0x0d, 0x9c, 0x3d, 0x5e, 0x1c, 0xec, 0x12, 0xd1, 0x33, 0x9e, 0x57, 0x33, 0xb6, 0x57, 0xa9, 0x00, 0x46, 0xff, 0xe7, 0xea, 0xdd, 0x7d, 0xe6, 0xc1, 0x1a, 0xc1, 0x66, 0x96, 0xd9, 0x08, 0x45, 0x20, 0x07, 0x5b, 0xf3, 0x5f, 0xb5, 0x59, 0x26, 0x7e, 0x6a, 0x37, 0xcf, 0xfe, 0xbe, 0x05, 0x4c, 0x11, 0x24, 0x33, 0xdf, 0x44, 0x08, 0x53, 0x5f, 0x61, 0x1a, 0x20, 0x2d, 0x94, 0xe9, 0xc0, 0x6a, 0xcc, 0xb3, 0x46, 0x67, 0x64, 0x7b, 0x7b, 0x5d, 0x03, 0x5d, 0xde, 0x5f, 0xc1, 0x1f, 0xe9, 0x8c, 0x8b, 0x08, 0x96, 0x89, 0xc8, 0xf5, 0x22, 0x2f, 0x3c, 0xa9, 0x11, 0x80, 0x2d, 0x65, 0x72, 0xe0, 0xc5, 0xb8, 0x64, 0x82, 0xb8, 0x99, 0xd9, 0x20, 0x27, 0xb3, 0x9a, 0xef, 0xc3, 0x00, 0x8c, 0xd2, 0x35, 0x99, 0x31, 0xcd, 0xbe, 0xcd, 0x71, 0xbd, 0x1a, 0x70, 0x9b, 0x47, 0xab, 0x75, 0xa7, 0x0f, 0xd3, 0xc0, 0xbe, 0x2a, 0xa2, 0x35, 0xfc, 0xd5, 0xb1, 0x15, 0x74, 0x67, 0x4d, 0x8a, 0x74, 0x84, 0xd8, 0x80, 0x0b, 0x94, 0x6d, 0xb7, 0xc9, 0x73, 0xc3, 0x16, 0xc6, 0x6a, 0x54, 0x43, 0xe5, 0x5f, 0xbe, 0x70, 0x5a, 0x48, 0x69, 0x78, 0x6a, 0xe6, 0x6a, 0x2a, 0x72, 0xaf, 0xa7, 0xe4, 0x2b, 0x0c, 0x3c, 0x65, 0x2c, 0xc4, 0x1e, 0xdc, 0xb1, 0xb8, 0xfe, 0x44, 0x9a, 0xd2, 0x71, 0xf4, 0xb7, 0x38, 0x4d, 0x72, 0x42, 0xc5, 0x56, 0x89, 0xad, 0xb9, 0x1a, 0x9b, 0x9f, 0xaf, 0x19, 0x38, 0x39, 0xd0, 0x29, 0xee, 0x9d, 0x47, 0x19, 0x63, 0xb1, 0xf4, 0x95, 0xa2, 0x20, 0x65, 0x49, 0xb3, 0xa2, 0x02, 0x4a, 0x6e, 0x7e, 0x87, 0xb1, 0x90, 0x4d, 0xb8, 0x89, 0x0f, 0x00, 0x50, 0xeb, 0xab, 0x24, 0x3a, 0x67, 0xc6, 0x65, 0x03, 0xa6, 0x75, 0x51, 0x90, 0x4e, 0xd7, 0x5f, 0x0c, 0x26, 0xa6, 0x30, 0x25, 0x7b, 0x0b, 0x14, 0x78, 0xc2, 0xb7, 0xd0, 0x49, 0x7e, 0x2f, 0x9f, 0x78, 0x64, 0x67, 0x76, 0xb0, 0xbd, 0x93, 0x8c, 0xe2, 0x0d, 0x3a, 0x1a, 0xf2, 0xf2, 0x8c, 0x5f, 0xb0, 0x4e, 0xf5, 0xe8, 0x09, 0xa8, 0xf2, 0x0e, 0x7f, 0xd0, 0x24, 0xc0, 0xd6, 0xc2, 0xa3, 0x83, 0x10, 0xcd, 0x94, 0xb6, 0x9c, 0xf5, 0xfe, 0x1b, 0xcb, 0x95, 0xd9, 0x93, 0x83, 0x49, 0x68, 0x29, 0x37, 0x0a, 0xc9, 0x52, 0x16, 0x9b, 0xcb, 0x73, 0x83, 0x25, 0xff, 0xa4, 0xc6, 0x1e, 0x12, 0xb4, 0x01, 0x6e, 0x59, 0x6d, 0x65, 0xd5, 0xae, 0x19, 0xa5, 0x87, 0x7b, 0x45, 0xab, 0x1a, 0x14, 0xc4, 0x8b, 0xa2, 0x4a, 0xf7, 0xb5, 0x1b, 0x3d, 0x4c, 0x6e, 0x07, 0x71, 0x05, 0x81, 0x57, 0x24, 0x3b, 0x31, 0x8f, 0xdf, 0x22, 0x73, 0x26, 0x4c, 0x8e, 0x5a, 0x2b, 0x47, 0xb6, 0xd3, 0x2f, 0x37, 0x38, 0x92, 0x5e, 0x9f, 0x5e, 0x4c, 0xef, 0xf0, 0xa0, 0x27, 0xbf, 0xa2, 0x6a, 0x6f, 0x38, 0x82, 0x1f, 0x8a, 0x78, 0x4e, 0x5d, 0x2e, 0xaf, 0x7f, 0x83, 0xd1, 0xc9, 0x66, 0x70, 0x61, 0x4e, 0x7a, 0x8e, 0x36, 0x86, 0xf1, 0x10, 0x45, 0xe0, 0x8d, 0x77, 0x96, 0x94, 0xb9, 0x5b, 0xf8, 0x88, 0xd4, 0x68, 0xf3, 0x71, 0xcd, 0xa7, 0xfe, 0x3a, 0xf0, 0xfe, 0xf2, 0xa9, 0xff, 0xfb, 0xbf, 0x40, 0x85, 0xcd, 0x5d, 0x61, 0x67, 0x93, 0x06, 0xb6, 0xbc, 0xda, 0xa3, 0xd0, 0xde, 0x60, 0x84, 0x0e, 0xc1, 0x1e, 0x53, 0xc1, 0x84, 0x86, 0x4b, 0x8d, 0x46, 0x0a, 0xa5, 0x13, 0x3b, 0xdd, 0x53, 0xcc, 0xff, 0xfd, 0xf1, 0x38, 0x2a, 0x71, 0xf9, 0x39, 0x24, 0xcf, 0x36, 0xb9, 0x3b, 0x02, 0x7b, 0x93, 0xf2, 0x4a, 0x94, 0xb1, 0x9c, 0x84, 0x7d, 0x72, 0x2a, 0xac, 0xd2, 0x4e, 0x42, 0xa0, 0x87, 0xbc, 0x91, 0x27, 0xd9, 0x53, 0x61, 0x31, 0x84, 0x30, 0x6e, 0x61, 0x37, 0x99, 0xf5, 0xc8, 0x45, 0xdf, 0x0f, 0xf4, 0x9d, 0x89, 0x3d, 0x29, 0xfc, 0xae, 0x44, 0xee, 0x61, 0xa3, 0x3b, 0xcb, 0xc2, 0xd7, 0xe2, 0x52, 0xfd, 0xfa, 0x35, 0x5c, 0x11, 0x65, 0x41, 0x95, 0x8e, 0xb6, 0x37, 0x3b, 0x4a, 0xba, 0xbf, 0x22, 0x56, 0x91, 0x8e, 0xfc, 0x30, 0x0c, 0x3b, 0xd7, 0x3a, 0x5a, 0x4e, 0xe7, 0x6b, 0xe4, 0x9b, 0x86, 0x45, 0x75, 0xce, 0x79, 0x07, 0x9e, 0x46, 0x75, 0x23, 0x59, 0x27, 0xe1, 0xf2, 0xec, 0xaa, 0xde, 0xa7, 0x10, 0xb8, 0x85, 0x82, 0x53, 0xb8, 0x6f, 0x46, 0xbb, 0xa5, 0x7b, 0xec, 0xac, 0x63, 0xcb, 0x99, 0x0b, 0x53, 0x10, 0xce, 0xa4, 0x25, 0x08, 0xde, 0xc9, 0xed, 0x45, 0xa6, 0x3c, 0x79, 0x2f, 0x78, 0x50, 0xe2, 0x4c, 0x58, 0x4a, 0x62, 0xbf, 0x6b, 0x0d, 0x65, 0x0f, 0xac, 0xf7, 0xe3, 0x2a, 0xe1, 0x06, 0xec, 0xaa, 0xce, 0x3f, 0x85, 0x56, 0xa8, 0x50, 0xb2, 0xec, 0xcc, 0x74, 0xd4, 0x1e, 0xb1, 0x97, 0x35, 0xda, 0x1b, 0xbb, 0xe2, 0xce, 0x92, 0x9a, 0xb9, 0x2c, 0x13, 0x8c, 0xc2, 0xaa, 0x05, 0xac, 0xc3, 0xce, 0x6e, 0x36, 0x0e, 0x68, 0x67, 0x34, 0x9e, 0x60, 0xce, 0x5a, 0x62, 0xb1, 0x3a, 0x2e, 0xd9, 0xb6, 0x34, 0x6c, 0xdf, 0xa5, 0xa4, 0xa8, 0xc7, 0x59, 0x89, 0x35, 0xa9, 0x54, 0xed, 0x46, 0xfd, 0x04, 0x19, 0x53, 0x69, 0x45, 0x05, 0xbe, 0xd8, 0x28, 0x12, 0xb7, 0xcc, 0xf2, 0xfb, 0x5d, 0xf5, 0x68, 0x09, 0x25, 0x02, 0x4a, 0x87, 0x80, 0xb7, 0x1e, 0x76, 0xb8, 0x40, 0x2e, 0x82, 0x1b, 0xc5, 0xd4, 0x34, 0x5c, 0x3e, 0xf5, 0x68, 0x36, 0x89, 0xcc, 0x02, 0x52, 0xb9, 0xe9, 0xdd, 0x6b, 0xb2, 0x79, 0x04, 0xb0, 0xf3, 0xc7, 0x25, 0x6a, 0xb2, 0x03, 0x42, 0xde, 0x2e, 0x43, 0xaa, 0x75, 0x41, 0xc7, 0x28, 0x1a, 0x34, 0x81, 0x7a, 0xe4, 0xd8, 0xd4, 0x04, 0xf5, 0xd2, 0x9d, 0xc6, 0xa2, 0x37, 0x70, 0x8c, 0xd4, 0x59, 0x24, 0x64, 0xad, 0xe0, 0x91, 0x55, 0x6f, 0x1c, 0x98, 0x4e, 0x9a, 0x99, 0x64, 0x5d, 0x55, 0xf4, 0xf0, 0x21, 0x0f, 0xee, 0xc9, 0x82, 0x66, 0xbf, 0x16, 0x9f, 0x48, 0xad, 0xd5, 0x08, 0x58, 0xdc, 0x67, 0x2e, 0x93, 0x68, 0x4f, 0x18, 0x33, 0xb1, 0x37, 0x57, 0xd3, 0xf6, 0x33, 0x3b, 0xd5, 0x26, 0x4a, 0x47, 0x01, 0xf2, 0x33, 0xe3, 0x6e, 0x27, 0x5c, 0x51, 0xa6, 0x3b, 0x31, 0xe2, 0x05, 0x25, 0x9a, 0x6a, 0x62, 0x72, 0xc5, 0xf1, 0xf2, 0x96, 0x27, 0xab, 0x68, 0x80, 0xbd, 0x2b, 0x61, 0x71, 0x98, 0xd3, 0x00, 0x0d, 0x98, 0x8f, 0xd5, 0xb3, 0x78, 0xc3, 0x04, 0x0a, 0x0a, 0x81, 0xa3, 0xdc, 0xc4, 0x00, 0x63, 0x28, 0x7c, 0x49, 0x73, 0x72, 0x70, 0x34, 0xa1, 0x5e, 0x89, 0x93, 0xc3, 0x7d, 0xe1, 0xad, 0x55, 0x67, 0x82, 0xee, 0x63, 0x0a, 0x71, 0xdc, 0xaa, 0x41, 0xeb, 0x4d, 0xfa, 0xa9, 0xee, 0xd7, 0xde, 0xb0, 0xfb, 0x89, 0x7f, 0xee, 0x1b, 0xd8, 0xc6, 0xb9, 0x20, 0xdc, 0xc1, 0xf3, 0x2d, 0xbd, 0x48, 0x27, 0x78, 0x68, 0xe0, 0xd4, 0x4f, 0x86, 0xdf, 0x09, 0x59, 0xae, 0xd1, 0x32, 0x1f, 0xd9, 0x1b, 0x32, 0xca, 0x17, 0xde, 0xb2, 0x2e, 0x81, 0x1e, 0xb8, 0x08, 0x6f, 0x24, 0x7b, 0x84, 0xeb, 0x20, 0x76, 0x03, 0x65, 0x13, 0xbb, 0x1a, 0xa8, 0xec, 0x8a, 0xde, 0x0c, 0xf1, 0x22, 0x5f, 0xed, 0x61, 0xd7, 0x72, 0x5d, 0x58, 0x65, 0xb4, 0x16, 0xf2, 0x84, 0xcb, 0xb2, 0xb3, 0xbc, 0xef, 0x1f, 0x27, 0x7b, 0xaa, 0x4d, 0xc5, 0x65, 0xdb, 0x29, 0x19, 0xeb, 0x01, 0xcf, 0x23, 0x1f, 0xb6, 0xfb, 0xfa, 0xc6, 0x7a, 0xc1, 0xb4, 0xaf, 0xb2, 0x7f, 0x8a, 0x44, 0xf0, 0x0f, 0x38, 0x5f, 0x75, 0x41, 0xa3, 0x5f, 0xf5, 0x88, 0xbe, 0x7a, 0x9a, 0xf3, 0xae, 0x55, 0x4b, 0x5f, 0x2d, 0xd1, 0x2d, 0xec, 0x2c, 0x28, 0x6a, 0xad, 0xbc, 0x3a, 0x32, 0xa4, 0x2e, 0x21, 0x00, 0xed, 0x79, 0x0b, 0x1f, 0x39, 0xdd, 0x49, 0x6c, 0x7e, 0xc6, 0xa3, 0x5d, 0xed, 0xf3, 0xef, 0x42, 0x25, 0xd7, 0xe2, 0xcb, 0xa6, 0x40, 0x25, 0xcb, 0x88, 0x36, 0xab, 0x3b, 0x6d, 0x26, 0x43, 0x82, 0xb4, 0x40, 0x69, 0xf4, 0xef, 0x1d, 0x62, 0x98, 0x97, 0xa5, 0x88, 0x2e, 0xff, 0x30, 0xe2, 0x70, 0x87, 0xeb, 0xf7, 0x99, 0x12, 0x7e, 0xe4, 0x24, 0xba, 0xeb, 0xad, 0xd6, 0xc2, 0xb9, 0xd1, 0xfe, 0xcb, 0x53, 0x21, 0xfc, 0x4b, 0xab, 0xd1, 0x00, 0x3c, 0x22, 0xd0, 0x14, 0x11, 0xac, 0x55, 0x5d, 0xee, 0x2f, 0xbb, 0x9d, 0x18, 0x2d, 0x8e, 0xfd, 0xab, 0xa3, 0xe6, 0x0a, 0x8b, 0x31, 0xf3, 0xfd, 0x9c, 0x7a, 0xda, 0x3f, 0x36, 0xce, 0xbf, 0x2c, 0xd3, 0x07, 0x23, 0x18, 0x0b, 0xb0, 0x71, 0x8f, 0xc3, 0x6d, 0xd3, 0xe1, 0xa1, 0x96, 0x4a, 0xde, 0xc3, 0x26, 0xfe, 0xdf, 0xb0, 0xd4, 0xd3, 0x06, 0x8e, 0x7f, 0x3c, 0xc6, 0x96, 0xcf, 0x54, 0xa5, 0xc6, 0x1a, 0x2b, 0x40, 0xd5, 0x84, 0x5d, 0x90, 0x6c, 0x6b, 0xea, 0x6d, 0x93, 0x02, 0x41, 0x50, 0x6a, 0x3b, 0x9e, 0x5d, 0x19, 0xeb, 0x96, 0xa1, 0x09, 0x29, 0xf1, 0x98, 0x55, 0xf6, 0xb7, 0xf2, 0x7b, 0x24, 0x8d, 0x96, 0x58, 0x70, 0x42, 0xe8, 0x53, 0xf2, 0xa6, 0x47, 0xd8, 0xb7, 0x9b, 0xda, 0x08, 0xac, 0x6e, 0x8d, 0xae, 0xbd, 0x67, 0x56, 0x75, 0x3f, 0x9e, 0xbd, 0x59, 0x8b, 0x11, 0x9b, 0x5c, 0xec, 0xf4, 0x22, 0x7a, 0xbc, 0x48, 0x1d, 0xde, 0xc9, 0xaf, 0x79, 0x56, 0xfe, 0x7f, 0x05, 0x05, 0x3f, 0x15, 0x76, 0x58, 0x94, 0x6c, 0xae, 0x3b, 0x8a, 0xee, 0x3e, 0x8c, 0xd6, 0x89, 0x29, 0xcf, 0x3c, 0x06, 0xeb, 0x24, 0xaf, 0x96, 0xb9, 0x77, 0xba, 0xae, 0x0b, 0xf7, 0x1e, 0x15, 0x58, 0xc9, 0xbd, 0x3c, 0x20, 0xfd, 0xb6, 0xcd, 0x30, 0xc1, 0xd2, 0x86, 0x22, 0xd4, 0x1f, 0x48, 0x23, 0x3e, 0xda, 0x6b, 0xf9, 0x3f, 0x92, 0x55, 0x44, 0x85, 0x8b, 0x4b, 0x03, 0xa1, 0x61, 0x86, 0x5b, 0xbc, 0xed, 0x8a, 0x94, 0x86, 0x6c, 0xb3, 0x65, 0x70, 0xde, 0x11, 0x71, 0x1b, 0xad, 0x76, 0x11, 0x10, 0x8f, 0xcc, 0x54, 0xb1, 0xad, 0xac, 0x44, 0x70, 0x05, 0x2d, 0x6b, 0x3e, 0x0d, 0xfa, 0x96, 0x46, 0x99, 0xa8, 0xd9, 0xdc, 0xfe, 0x46, 0xd3, 0xb0, 0x78, 0x35, 0x33, 0x48, 0xc9, 0x3a, 0x7b, 0xad, 0x23, 0xd1, 0x05, 0x64, 0x48, 0xc4, 0x43, 0x9f, 0xf0, 0xfd, 0x4a, 0xb5, 0x6b, 0x98, 0x92, 0xd0, 0x87, 0x3d, 0xf7, 0xe5, 0xb4, 0xad, 0x04, 0xea, 0x66, 0x9a, 0x71, 0x43, 0xbb, 0xbc, 0xea, 0x7d, 0x5e, 0x21, 0x13, 0x3e, 0xab, 0xc5, 0xc8, 0x7c, 0x14, 0x62, 0xa9, 0xee, 0xc3, 0x89, 0xd6, 0xc0, 0x80, 0xf2, 0xf7, 0x8b, 0xd6, 0x11, 0x80, 0x84, 0x71, 0xe9, 0x33, 0xf4, 0xcb, 0x25, 0xe6, 0xe8, 0x08, 0x65, 0x86, 0x29, 0x1e, 0xd6, 0x5c, 0x6e, 0x38, 0x05, 0x8f, 0xd1, 0x5d, 0xf5, 0xea, 0x80, 0x4c, 0x6f, 0xe0, 0xb5, 0xab, 0x99, 0xcd, 0xe8, 0x61, 0xca, 0x7f, 0x43, 0x41, 0x9d, 0xf5, 0x56, 0xe8, 0x44, 0x66, 0x0c, 0xe8, 0x1f, 0x86, 0xdd, 0x26, 0x8d, 0x04, 0x46, 0x80, 0x03, 0x57, 0x76, 0xb3, 0x5b, 0xba, 0x4b, 0x7c, 0x6e, 0x75, 0x7c, 0xfe, 0xe4, 0x5f, 0x18, 0x64, 0x4b, 0xa1, 0x2f, 0xc7, 0x67, 0xbc, 0xce, 0x52, 0xc9, 0xce, 0x31, 0xa4, 0xa3, 0x11, 0x35, 0x75, 0xdb, 0xa4, 0x0c, 0x7d, 0x5e, 0x8e, 0x34, 0x91, 0xb7, 0x00, 0xaa, 0x10, 0xe0, 0xda, 0x5b, 0x7d, 0x58, 0x71, 0xdb, 0x6d, 0x75, 0x8f, 0x59, 0xa4, 0xfc, 0xbc, 0xd3, 0x7b, 0xef, 0xbc, 0x86, 0x85, 0xa6, 0x59, 0xa9, 0x71, 0x21, 0x63, 0x5a, 0x32, 0x9d, 0xf4, 0xd9, 0x5e, 0x65, 0xf8, 0xf4, 0xd4, 0xeb, 0xed, 0xc2, 0xa2, 0x17, 0xe8, 0x94, 0x26, 0xdf, 0xd9, 0x29, 0x73, 0x18, 0x0f, 0x21, 0xf5, 0x8c, 0xff, 0xb4, 0x59, 0x4c, 0x41, 0xa4, 0xa7, 0x48, 0xdb, 0x70, 0xb1, 0x1c, 0xc2, 0xcb, 0xb1, 0x2d, 0x9e, 0x4c, 0x2e, 0xf5, 0xce, 0x67, 0x1f, 0x9b, 0xac, 0x9c, 0x53, 0xc7, 0x12, 0xee, 0x10, 0xb4, 0x1d, 0x97, 0xfb, 0x87, 0x30, 0xfa, 0x37, 0xdf, 0x3c, 0xd9, 0xd1, 0xad, 0x3f, 0xc8, 0x5c, 0x46, 0x0b, 0xe2, 0xd8, 0xb6, 0x49, 0xba, 0xd9, 0x57, 0xbd, 0x95, 0xe5, 0xa3, 0xcc, 0xd6, 0x1d, 0x47, 0x3b, 0xb9, 0x1f, 0x78, 0x39, 0x44, 0x2c, 0x8a, 0xa0, 0x7b, 0x86, 0xbf, 0x78, 0xd4, 0x1c, 0x5d, 0xbd, 0xea, 0x69, 0x03, 0x61, 0x75, 0x9a, 0x3c, 0x95, 0x7a, 0xef, 0x55, 0x45, 0xbf, 0x63, 0x6c, 0xe1, 0x82, 0x8f, 0xca, 0x63, 0x6a, 0xcc, 0x73, 0x8e, 0xbe, 0x98, 0xfa, 0x73, 0xd5, 0x3b, 0x9a, 0x3a, 0xce, 0xaa, 0x83, 0x1f, 0x81, 0xab, 0x72, 0xbb, 0xb4, 0x3a, 0x84, 0x85, 0x93, 0x2b, 0x4c, 0x98, 0x5a, 0x12, 0x23, 0xb7, 0x55, 0x60, 0xbf, 0x8e, 0x0a, 0xce, 0x08, 0x3a, 0xb5, 0xff, 0x26, 0x0c, 0xf4, 0x60, 0xdf, 0x8a, 0xc4, 0x54, 0x20, 0xb7, 0xac, 0x8e, 0xd9, 0x95, 0x38, 0xbd, 0x0e, 0xe7, 0xa9, 0x6f, 0x2c, 0x3b, 0xeb, 0x2f, 0x99, 0x28, 0xc7, 0xf1, 0x8e, 0xd5, 0x5a, 0xb1, 0x29, 0xba, 0xc6, 0x56, 0xbe, 0xab, 0x27, 0xdc, 0x6f, 0x12, 0xc9, 0xb2, 0xfc, 0x7c, 0x98, 0x61, 0xdc, 0x57, 0xd7, 0x6f ],
+const [ 0x43, 0xb1, 0xac, 0x9c, 0x15, 0xfc, 0xc2, 0xb0, 0x16, 0x8a, 0xa9, 0x86, 0x2d, 0xb0, 0x30, 0x44, 0x41, 0xce, 0x0c, 0x56, 0x59, 0xdb, 0x1f, 0xa8, 0x02, 0x44, 0xfa, 0x18, 0xf2, 0xf7, 0xa0, 0x2b, 0xea, 0xba, 0x8c, 0xfe, 0xe1, 0xc2, 0xf6, 0x80, 0x5e, 0x81, 0x53, 0xdf, 0x26, 0xbf, 0x1b, 0x40, 0x17, 0xec, 0xce, 0xb3, 0x54, 0xb5, 0x39, 0x66, 0xa2, 0xd5, 0xf6, 0x19, 0x12, 0x2e, 0x32, 0xd1, 0xe1, 0x18, 0xb2, 0xd1, 0x9c, 0xf9, 0x18, 0xc6, 0x87, 0x16, 0x63, 0x42, 0x40, 0xa8, 0xb6, 0x6b, 0xa0, 0x33, 0x5a, 0xf5, 0xe2, 0x13, 0x05, 0x4d, 0x07, 0x57, 0x5d, 0x17, 0x78, 0xd3, 0xb8, 0xdb, 0xee, 0x71, 0x26, 0xfb, 0x8f, 0xc8, 0xb1, 0xe9, 0x5a, 0xf0, 0xe3, 0x96, 0xc4, 0x94, 0x89, 0x2e, 0xa3, 0x48, 0xb7, 0x02, 0x4c, 0x1d, 0x0c, 0xc6, 0xf8, 0x73, 0x37, 0xfc, 0x6d, 0x0f, 0xba, 0xb0, 0xda, 0x6e, 0xee, 0x66, 0x02, 0x58, 0x48, 0x51, 0x9c, 0xb8, 0xda, 0xc5, 0xfa, 0xaa, 0x1d, 0xef, 0xea, 0xd6, 0xed, 0xc4, 0xda, 0xfd, 0xd5, 0x37, 0x3f, 0xd1, 0x8d, 0xaf, 0x37, 0x0a, 0xc1, 0xb8, 0x6c, 0xb6, 0x14, 0xf8, 0x3c, 0xd0, 0x65, 0x66, 0x18, 0x15, 0x51, 0xb6, 0x2a, 0x13, 0xf9, 0x17, 0x3b, 0x83, 0x05, 0x21, 0xd3, 0xd8, 0xe9, 0x09, 0xa2, 0x18, 0x66, 0x18, 0x1e, 0xeb, 0x54, 0x5b, 0x6e, 0xf2, 0xa0, 0x9b, 0x87, 0x59, 0x91, 0x8f, 0x95, 0xb0, 0x4f, 0x51, 0x9c, 0xf6, 0xa5, 0x0f, 0x5f, 0xf7, 0x06, 0x03, 0x81, 0xd9, 0xce, 0xa5, 0xea, 0xf1, 0xcb, 0x1f, 0x6c, 0xdb, 0xfc, 0x01, 0xa6, 0xc9, 0x98, 0x36, 0x29, 0x1b, 0x52, 0x37, 0xda, 0x30, 0xdc, 0x7e, 0x98, 0x7c, 0xaa, 0x3e, 0x1e, 0xdb, 0xf8, 0x51, 0x2a, 0x25, 0x0e, 0x71, 0xdf, 0x03, 0xc3, 0xac, 0x67, 0x01, 0x40, 0x12, 0xde, 0xe4, 0x06, 0xb1, 0x6b, 0x3d, 0x33, 0xc3, 0xb0, 0x3e, 0x00, 0x25, 0x65, 0xcd, 0x8f, 0x0b, 0x3f, 0xd7, 0xe4, 0xf3, 0x17, 0xe7, 0x31, 0xd7, 0x48, 0xf7, 0x56, 0xa7, 0x59, 0x86, 0xa8, 0xf6, 0xdc, 0xea, 0xf1, 0xf4, 0x95, 0xe8, 0xb9, 0x9c, 0xdf, 0x82, 0xc4, 0x2e, 0x4c, 0x10, 0xdc, 0xe0, 0x8c, 0x92, 0xd1, 0xd0, 0x90, 0x45, 0xbd, 0x3e, 0xee, 0x74, 0x8c, 0xf8, 0x88, 0x91, 0xbc, 0x15, 0x69, 0x84, 0x62, 0xe6, 0xef, 0x43, 0x6e, 0x2a, 0x2f, 0xa3, 0x2f, 0x81, 0x95, 0x6e, 0x1a, 0x24, 0xcb, 0xb5, 0xc7, 0xd2, 0xdc, 0x67, 0x3c, 0x0e, 0x9a, 0x23, 0x6e, 0x87, 0x3d, 0x4b, 0x05, 0xd8, 0x4c, 0x5a, 0x60, 0x71, 0xc1, 0x77, 0xd9, 0xd5, 0x68, 0x4a, 0x4a, 0x07, 0x88, 0x0e, 0xd0, 0x3e, 0xc5, 0xe7, 0xce, 0xe0, 0x45, 0x76, 0x35, 0xae, 0x12, 0xab, 0x03, 0x3c, 0xbf, 0xdb, 0x0a, 0xa5, 0x4f, 0x13, 0xf3, 0x7c, 0x52, 0xab, 0x82, 0x06, 0x51, 0x1e, 0x1c, 0xa6, 0x6c, 0x19, 0x86, 0x98, 0x42, 0xd1, 0xef, 0xe2, 0x11, 0x9a, 0x31, 0x88, 0x1e, 0xb6, 0x54, 0x00, 0x58, 0x6a, 0x53, 0xe5, 0x38, 0x57, 0x23, 0xf0, 0xeb, 0x08, 0xf2, 0x23, 0xb3, 0xc8, 0xad, 0x47, 0x8b, 0xb6, 0xc4, 0x99, 0x0a, 0x1b, 0x31, 0xc1, 0x89, 0xfa, 0xb7, 0x03, 0x88, 0xe9, 0x67, 0xb9, 0x4e, 0x20, 0x69, 0x01, 0xd0, 0xd0, 0xf9, 0xb3, 0xd4, 0xb6, 0xb0, 0x96, 0x56, 0xef, 0x05, 0xd3, 0x2b, 0x0e, 0x13, 0xa9, 0xe4, 0x6c, 0x9d, 0x63, 0xf5, 0xbf, 0x4f, 0x87, 0x17, 0xee, 0x46, 0x51, 0xea, 0x24, 0xd3, 0x5f, 0xdf, 0x24, 0x7c, 0xae, 0x55, 0xdc, 0x44, 0xc5, 0x02, 0x3c, 0x2d, 0x30, 0x95, 0x48, 0xfa, 0x30, 0x99, 0x6c, 0x39, 0xb1, 0x9d, 0x10, 0x81, 0x7c, 0x92, 0x6d, 0xf9, 0xae, 0x74, 0x9f, 0x19, 0x69, 0x2d, 0xfb, 0xb5, 0xc9, 0xb6, 0xa2, 0x37, 0x1a, 0x7f, 0x56, 0x2c, 0x48, 0x11, 0x8d, 0x02, 0x96, 0xf2, 0xc4, 0x0f, 0x93, 0xc8, 0x16, 0xd6, 0x4b, 0xc2, 0x0d, 0x86, 0xba, 0x34, 0xb8, 0xc4, 0x86, 0x81, 0xfe, 0xaa, 0xed, 0x3e, 0x31, 0x10, 0xfb, 0x94, 0xe7, 0x0a, 0x01, 0xe6, 0x05, 0xb1, 0x44, 0xb4, 0x1c, 0x27, 0xf2, 0xc0, 0xf9, 0xd5, 0x5a, 0x6f, 0x77, 0xf7, 0x5b, 0x71, 0x98, 0x5b, 0x1d, 0xa4, 0xd4, 0x65, 0x00, 0x36, 0xb1, 0x57, 0xd2, 0x0b, 0x94, 0xcf, 0x45, 0x5e, 0xd7, 0x92, 0xa0, 0xaa, 0x1b, 0x87, 0xb4, 0xcb, 0xe0, 0x07, 0x12, 0x60, 0x53, 0x54, 0x7b, 0x75, 0x66, 0x66, 0x98, 0x5f, 0x26, 0xee, 0xeb, 0xe6, 0x4a, 0x95, 0x06, 0xaa, 0x07, 0x84, 0xfb, 0xbf, 0x2c, 0x2a, 0x13, 0x9b, 0x6a, 0x39, 0xc3, 0x32, 0xf3, 0xf2, 0xdb, 0x5f, 0x48, 0xa3, 0x01, 0x86, 0x4b, 0x6e, 0x5e, 0x78, 0x9c, 0x4b, 0x97, 0x96, 0x22, 0x50, 0xff, 0x3a, 0xe8, 0x31, 0x0b, 0x52, 0x2b, 0x03, 0x06, 0x4e, 0xb1, 0x45, 0x05, 0x3d, 0x5c, 0x20, 0x1e, 0x32, 0xfe, 0xee, 0xd5, 0xed, 0x6f, 0xfa, 0xd7, 0xb7, 0xdd, 0x86, 0xeb, 0x8e, 0x64, 0x13, 0x25, 0x82, 0xde, 0xdc, 0x5c, 0x5f, 0xfd, 0xa4, 0xdf, 0x8c, 0x97, 0xb1, 0x64, 0x33, 0x40, 0x19, 0x41, 0xa2, 0x1e, 0x3c, 0xdf, 0xf2, 0xf9, 0x92, 0x6b, 0xe6, 0x92, 0xa7, 0xce, 0x15, 0x36, 0x63, 0xe0, 0x4c, 0x92, 0x8f, 0xd8, 0x2e, 0xc9, 0x95, 0x08, 0x1d, 0xc4, 0x87, 0xc7, 0x5e, 0xca, 0x63, 0xae, 0x77, 0x50, 0x96, 0x07, 0xdc, 0x12, 0xbe, 0x82, 0xcb, 0x62, 0xb4, 0x2a, 0x75, 0xc0, 0xca, 0x98, 0x5e, 0xac, 0x51, 0x66, 0x06, 0xb8, 0x5f, 0xe7, 0xc9, 0xe1, 0xcf, 0x15, 0x04, 0x1f, 0x88, 0xcb, 0x79, 0x3b, 0x03, 0x35, 0xf5, 0xe1, 0x07, 0x84, 0x30, 0xf6, 0xb7, 0xe6, 0xf4, 0x2b, 0xcf, 0xb5, 0x81, 0xd3, 0x2b, 0xee, 0x31, 0xf2, 0x89, 0xe6, 0x58, 0x96, 0x8f, 0x38, 0x6e, 0x6a, 0x10, 0x02, 0x70, 0x88, 0x8b, 0x51, 0x83, 0x8f, 0xf4, 0xd9, 0xdb, 0xf5, 0xb7, 0xea, 0xdb, 0x9f, 0xfb, 0x9f, 0x7d, 0xaf, 0x23, 0x59, 0xf5, 0x9e, 0x9b, 0x6b, 0x91, 0x8a, 0xd1, 0x17, 0xe4, 0xd1, 0x81, 0xba, 0x23, 0xde, 0x36, 0x43, 0xcf, 0x43, 0x0e, 0xe9, 0x94, 0x08, 0xbd, 0x1e, 0x72, 0x43, 0xd4, 0xbe, 0x1a, 0xe9, 0x44, 0x8d, 0x9b, 0xe4, 0x1d, 0xe0, 0x3d, 0x66, 0x9c, 0x9a, 0xad, 0x7c, 0x65, 0x5a, 0x5b, 0xe6, 0x0d, 0xf3, 0x21, 0x26, 0xdb, 0x1d, 0x25, 0xd7, 0xd0, 0x6a, 0x00, 0x40, 0xe4, 0x7b, 0x20, 0x29, 0x93, 0x73, 0x6a, 0xed, 0x98, 0xac, 0x24, 0xd1, 0xf9, 0xa9, 0x13, 0x94, 0x43, 0x4c, 0xe0, 0x48, 0x17, 0x49, 0xc1, 0x60, 0xe5, 0xdb, 0x55, 0x09, 0xf8, 0xb6, 0xcf, 0xbe, 0xb3, 0x3c, 0x56, 0x16, 0x1a, 0xf3, 0xac, 0xe1, 0x94, 0x37, 0x0e, 0x74, 0xee, 0x2c, 0x5c, 0x41, 0xa4, 0xf7, 0x7a, 0xab, 0x5c, 0x2e, 0xf6, 0x18, 0xb4, 0x8c, 0xeb, 0x47, 0x3d, 0xea, 0x25, 0xe4, 0xc7, 0x6a, 0x85, 0x59, 0xe0, 0xf6, 0xa7, 0xe8, 0x97, 0xe9, 0xc3, 0xf6, 0x86, 0x0b, 0xd1, 0xaa, 0x0f, 0xc3, 0xf1, 0xb7, 0xe5, 0x88, 0x09, 0x76, 0xce, 0x99, 0xb0, 0x38, 0xa8, 0xee, 0x4b, 0xda, 0xaa, 0x6e, 0x75, 0x9a, 0xed, 0x62, 0xa5, 0x28, 0x2b, 0x2a, 0x0a, 0x01, 0xc6, 0x2e, 0xba, 0xf8, 0x0c, 0x18, 0x0c, 0x15, 0xb9, 0x41, 0x42, 0xa3, 0xbd, 0x68, 0x6c, 0x85, 0x40, 0xaa, 0x89, 0xc9, 0xe4, 0xae, 0xee, 0x80, 0x4a, 0x21, 0xec, 0xcc, 0xd7, 0x62, 0xad, 0x3a, 0xb8, 0x7e, 0x5f, 0x52, 0x23, 0x5e, 0x94, 0x6d, 0xe0, 0x3f, 0xe9, 0xc7, 0x09, 0x63, 0xe6, 0xd5, 0x0e, 0x06, 0x26, 0xd9, 0xfb, 0x94, 0xb8, 0xb3, 0xfe, 0x19, 0xc4, 0xfa, 0x24, 0xf9, 0x72, 0x4b, 0x63, 0xe1, 0x07, 0xe1, 0xdd, 0xfd, 0x52, 0x66, 0x63, 0x6c, 0x46, 0x09, 0x38, 0xf1, 0xe8, 0xd1, 0x18, 0xeb, 0x6c, 0x31, 0x79, 0x87, 0x9a, 0xdc, 0x11, 0x34, 0x77, 0xda, 0x98, 0x57, 0x22, 0xdc, 0xcf, 0x40, 0xfc, 0xcd, 0xc1, 0x5d, 0x0b, 0xa9, 0x49, 0xae, 0xa1, 0x92, 0xd4, 0x79, 0x38, 0x21, 0x68, 0x3f, 0xa1, 0xfa, 0xe6, 0xee, 0x5e, 0xa3, 0x8c, 0x58, 0x4c, 0x96, 0xbd, 0xe4, 0x85, 0x94, 0x05, 0x84, 0x84, 0x3d, 0x58, 0xe7, 0x8a, 0xde, 0x9a, 0xef, 0x41, 0x8a, 0x65, 0x65, 0x9f, 0x6c, 0x06, 0xec, 0x0e, 0x5b, 0xc8, 0x33, 0xca, 0xaf, 0x76, 0x6f, 0x8a, 0x53, 0x1b, 0x09, 0x62, 0x1c, 0x0c, 0x93, 0xe8, 0x59, 0x28, 0x01, 0x96, 0xac, 0x5f, 0x16, 0x6f, 0x18, 0x71, 0x1c, 0xe5, 0x5a, 0xf8, 0xd8, 0xfb, 0x7d, 0xa9, 0xbd, 0xa7, 0xa9, 0xd7, 0x60, 0x7a, 0x3c, 0x38, 0x2c, 0x82, 0x1b, 0xec, 0x57, 0x70, 0x4b, 0xbb, 0x14, 0xf6, 0xbb, 0x9f, 0x0b, 0x73, 0x64, 0x82, 0x06, 0xd2, 0x94, 0x48, 0xed, 0xaf, 0x87, 0x10, 0xf4, 0xbc, 0x38, 0xb7, 0x13, 0x64, 0x76, 0x9e, 0xb7, 0xae, 0x3a, 0xae, 0xb7, 0x63, 0x38, 0x99, 0x89, 0x73, 0xb4, 0x62, 0xb6, 0x95, 0x97, 0x1f, 0x8b, 0x2e, 0xc2, 0xfe, 0x11, 0x74, 0xa2, 0x86, 0x40, 0xd3, 0x05, 0x1f, 0x70, 0x90, 0x2c, 0xd5, 0x10, 0xac, 0x21, 0x59, 0x9a, 0x0b, 0x4b, 0x48, 0xc6, 0xd5, 0x3f, 0xb0, 0xff, 0x1d, 0xd9, 0xd1, 0x13, 0xc0, 0x8c, 0x20, 0x2e, 0x90, 0xf6, 0x92, 0x09, 0xb2, 0xb7, 0x16, 0x5f, 0x45, 0x84, 0x63, 0xa1, 0x44, 0x77, 0xf5, 0xea, 0xae, 0xa9, 0x52, 0x35, 0xe4, 0x03, 0x92, 0xce, 0x52, 0x51, 0x1e, 0x06, 0x51, 0x98, 0xb8, 0x2b, 0x4c, 0xaa, 0xbc, 0xb7, 0x22, 0xf7, 0xa5, 0xc8, 0xcc, 0xa6, 0xd2, 0xd0, 0x40, 0xe5, 0x8b, 0x8e, 0x95, 0x7d, 0x3f, 0x3d, 0x67, 0xa9, 0x0f, 0x0b, 0x7d, 0x28, 0x91, 0xcc, 0xa9, 0x91, 0xcd, 0xf0, 0xf0, 0xe7, 0x8c, 0xb2, 0xeb, 0x6d, 0xd3, 0x93, 0x6d, 0xbb, 0xaa, 0x07, 0x67, 0x12, 0x21, 0x6e, 0x08, 0xed, 0x95, 0x45, 0x28, 0xd8, 0x30, 0x9e, 0xe6, 0x85, 0xaf, 0xcd, 0x90, 0x1d, 0x68, 0x65, 0xc4, 0xd4, 0x8b, 0x63, 0xd5, 0xc0, 0xa8, 0xa8, 0x70, 0xeb, 0x71, 0xad, 0x80, 0xa7, 0xc2, 0x72, 0x4e, 0x21, 0xde, 0xb7, 0xed, 0x39, 0xfc, 0x6f, 0xd5, 0x91, 0x02, 0x72, 0xce, 0xe4, 0x90, 0x72, 0x10, 0x9a, 0x40, 0x30, 0xa8, 0x99, 0x2c, 0xef, 0x1d, 0x5d, 0xb1, 0x29, 0x54, 0x4b, 0x73, 0x82, 0xb1, 0x42, 0xa1, 0xfa, 0x7f, 0x74, 0x7b, 0x66, 0x92, 0x74, 0x11, 0x21, 0x2a, 0x8f, 0x4d, 0xff, 0x1b, 0x60, 0x33, 0x82, 0x2b, 0x9f, 0x68, 0x51, 0xbc, 0x3a, 0xf1, 0xe5, 0xab, 0xa7, 0x3e, 0x86, 0x77, 0x78, 0x67, 0x76, 0xa6, 0x30, 0xb5, 0x6c, 0x64, 0x55, 0x64, 0x43, 0x6e, 0xc6, 0xa7, 0xf4, 0x2e, 0x4f, 0xed, 0xc2, 0x27, 0x7b, 0x63, 0xb4, 0x94, 0xa9, 0xba, 0x48, 0x4c, 0x62, 0x2a, 0x66, 0xe9, 0xea, 0xb7, 0x93, 0x29, 0x15, 0xb3, 0x67, 0x95, 0x5c, 0x84, 0x41, 0x60, 0x30, 0xa7, 0x39, 0x91, 0x8f, 0xf5, 0x56, 0x65, 0xd4, 0x25, 0x02, 0xee, 0xd3, 0x93, 0xba, 0x01, 0x25, 0x3f, 0x0a, 0x4f, 0xc1, 0x19, 0xb9, 0xd2, 0xcc, 0x7c, 0x41, 0x6b, 0xb3, 0xf8, 0x81, 0xc9, 0x76, 0x54, 0xb6, 0x8c, 0x47, 0xd3, 0xa8, 0xaa, 0x53, 0xb7, 0x21, 0x12, 0xe0, 0x04, 0xa3, 0x90, 0x98, 0x86, 0x5a, 0xf1, 0x24, 0x15, 0x50, 0x67, 0xfd, 0x18, 0xe0, 0x2f, 0x7f, 0x48, 0x6d, 0x70, 0x40, 0xb7, 0x54, 0x67, 0x9f, 0x10, 0x1e, 0xc1, 0xa0, 0x20, 0xfb, 0x48, 0xf7, 0x95, 0x6c, 0xc2, 0x62, 0x06, 0x3f, 0x16, 0x3c, 0x34, 0xc0, 0xb1, 0x50, 0x90, 0x2e, 0x28, 0xeb, 0xfd, 0x6c, 0x1f, 0x35, 0xd6, 0xf9, 0x69, 0xc0, 0x33, 0x22, 0x71, 0x62, 0x68, 0x76, 0xd8, 0x40, 0xcf, 0x7b, 0x5f, 0x2c, 0xc8, 0x9f, 0x08, 0x31, 0xfd, 0x71, 0x78, 0x6b, 0xeb, 0x11, 0xa0, 0x1c, 0x9e, 0xe5, 0x9c, 0xfd, 0xbb, 0x8e, 0xdb, 0xd2, 0xc4, 0x1b, 0x81, 0x41, 0x98, 0x7c, 0x09, 0xe4, 0x39, 0x39, 0x2f, 0x9d, 0xd2, 0x64, 0x0d, 0x2a, 0xf9, 0xcc, 0x84, 0xf9, 0x31, 0x73, 0xdd, 0x3d, 0xb3, 0x42, 0xb0, 0x41, 0x6e, 0xfc, 0x05, 0xfc, 0x4c, 0x71, 0xba, 0xe7, 0xb7, 0xf4, 0x25, 0x0b, 0x5c, 0x0e, 0xf9, 0x5e, 0x2e, 0x74, 0x6e, 0x4f, 0xae, 0x37, 0x9c, 0xa0, 0x6a, 0x3b, 0x28, 0x74, 0xc4, 0xea, 0x23, 0xa9, 0xf5, 0x29, 0x2f, 0x67, 0x52, 0x8b, 0xe4, 0xf9, 0xcd, 0xc5, 0x72, 0xdc, 0xbe, 0x63, 0x87, 0x16, 0xe4, 0xb9, 0x73, 0xc9, 0xa6, 0x1b, 0x8a, 0x08, 0x9f, 0x51, 0xc9, 0xe9, 0x5a, 0x45, 0xbd, 0xdc, 0x5a, 0xff, 0xa1, 0x3b, 0x5e, 0xd3, 0xc7, 0x22, 0xe3, 0xd9, 0x39, 0x80, 0xe9, 0x9e, 0x9f, 0x6e, 0xfa, 0x19, 0x63, 0xc0, 0x69, 0xe1, 0x14, 0xda, 0xd8, 0x9d, 0x08, 0xc6, 0xfc, 0xbb, 0x46, 0x83, 0xa5, 0x65, 0xa2, 0x9f, 0xf8, 0xb0, 0x2a, 0x08, 0xff, 0x17, 0xc1, 0x1f, 0x65, 0x29, 0x0a, 0x0e, 0x7a, 0x7e, 0x88, 0x5b, 0x7d, 0xef, 0x03, 0xbe, 0x1b, 0x06, 0x2d, 0x30, 0x33, 0xb4, 0x85, 0x45, 0xdc, 0x42, 0x7c, 0xbb, 0xa9, 0x8a, 0xd6, 0x53, 0x2c, 0x67, 0x54, 0xdf, 0xb8, 0x6a, 0x90, 0x9d, 0x6b, 0xcf, 0x28, 0xc3, 0x6c, 0xaf, 0x1e, 0x5b, 0x72, 0x77, 0x7f, 0x51, 0x86, 0x98, 0x43, 0xcb, 0x09, 0x80, 0x75, 0xb8, 0xf8, 0xca, 0x94, 0xac, 0x6f, 0xb1, 0x38, 0xeb, 0x6c, 0xcb, 0xf8, 0xc4, 0xd6, 0xf4, 0x8c, 0x20, 0xbe, 0x87, 0x2f, 0x5a, 0xe4, 0xd5, 0x47, 0x51, 0x7d, 0xcf, 0x48, 0xbc, 0x33, 0x06, 0xd6, 0xbe, 0x6e, 0xd6, 0x2a, 0xbb, 0xd2, 0xdd, 0xb6, 0x69, 0x09, 0xb2, 0x0c, 0x2a, 0xc2, 0xd4, 0xfc, 0x99, 0xf9, 0xe1, 0xfc, 0x62, 0x79, 0x09, 0xce, 0x58, 0xa0, 0xc1, 0x5c, 0xc1, 0x63, 0xbc, 0xe7, 0xf4, 0x91, 0x17, 0x60, 0x27, 0x5c, 0xd4, 0x16, 0x82, 0x15, 0x89, 0x92, 0x78, 0x37, 0x59, 0xbf, 0x56, 0xa7, 0x24, 0x4f, 0x1c, 0x3a, 0xfb, 0x59, 0x8d, 0x78, 0xd7, 0x47, 0x82, 0xa0, 0x8a, 0xef, 0x83, 0xec, 0xf5, 0x00, 0x98, 0x15, 0x7c, 0xa0, 0x5d, 0x1a, 0xb7, 0x53, 0x55, 0x3e, 0x6a, 0x1f, 0x80, 0x4f, 0xb8, 0xee, 0x30, 0x2e, 0x93, 0x33, 0x18, 0x8c, 0x77, 0xd0, 0xa6, 0xf2, 0x58, 0x38, 0x93, 0x04, 0xd9, 0xd0, 0xb8, 0x06, 0xbe, 0x9c, 0x23, 0x9f, 0xa4, 0x17, 0x6a, 0xdd, 0xef, 0x62, 0x3f, 0x7a, 0x05, 0xa1 ],
+const [ 0x0a, 0x72, 0xca, 0x03, 0xc9, 0x97, 0x7d, 0xcd, 0x01, 0x69, 0xda, 0x7a, 0xf1, 0xfa, 0x3f, 0x3f, 0x02, 0xe3, 0x74, 0x17, 0x58, 0x86, 0xde, 0x21, 0xa7, 0x96, 0xf5, 0x43, 0x48, 0xda, 0xf8, 0x14, 0x8c, 0x2d, 0xdf, 0xf9, 0x50, 0xca, 0x91, 0x8e, 0xd1, 0xc6, 0x57, 0x47, 0xc2, 0xde, 0x90, 0x57, 0x9c, 0x73, 0xa7, 0xd0, 0x36, 0xd3, 0x43, 0x0c, 0x95, 0xba, 0xbd, 0x4d, 0x05, 0x19, 0xd7, 0xa0, 0x68, 0x15, 0xab, 0x07, 0xcf, 0x53, 0xe1, 0xd6, 0x47, 0x73, 0x25, 0x5e, 0xf6, 0xda, 0xd8, 0xc9, 0x66, 0xb5, 0x06, 0x45, 0x20, 0x3a, 0x99, 0x65, 0x7d, 0x31, 0xcc, 0xc3, 0xb9, 0xb4, 0xe2, 0xeb, 0x49, 0x33, 0x17, 0x74, 0x6e, 0xbb, 0xd7, 0x70, 0x0b, 0x77, 0x2e, 0x07, 0xb4, 0x77, 0x80, 0x5e, 0x07, 0xb0, 0x7a, 0xbe, 0x3f, 0x44, 0x48, 0xf2, 0x06, 0x04, 0x08, 0xf0, 0x8b, 0x33, 0x7f, 0xbc, 0xd5, 0x8d, 0x0b, 0x8a, 0x57, 0x88, 0xd9, 0x23, 0xc4, 0xda, 0x58, 0x89, 0x24, 0x3b, 0xee, 0xde, 0x28, 0x6c, 0xe9, 0x82, 0xba, 0x78, 0xb8, 0x7c, 0xd9, 0x3a, 0x5b, 0x1b, 0xa4, 0x1f, 0x18, 0xdc, 0xb4, 0x2e, 0x70, 0x8f, 0xaf, 0x45, 0x51, 0xb6, 0x1a, 0xa5, 0x8d, 0x2e, 0x6f, 0xb0, 0x8b, 0x11, 0x70, 0xf2, 0x3d, 0xda, 0xba, 0x5f, 0x51, 0xca, 0x9d, 0xdb, 0xac, 0x8b, 0x2b, 0x00, 0x14, 0x14, 0x8f, 0x1b, 0x2c, 0xcc, 0xa1, 0x77, 0xa6, 0xf2, 0xb7, 0xdf, 0xb4, 0x3c, 0xbd, 0x5e, 0xbf, 0xbe, 0x88, 0x49, 0x5c, 0x0e, 0x67, 0x7f, 0x7c, 0xa6, 0xfb, 0xf0, 0xe2, 0x89, 0x49, 0x5c, 0xdb, 0x2a, 0x0e, 0x5d, 0x29, 0x89, 0x52, 0xa8, 0x40, 0x9f, 0x40, 0x90, 0xb5, 0xfc, 0x35, 0xcc, 0xf3, 0xaf, 0x17, 0x79, 0x30, 0x66, 0xe8, 0x63, 0x9f, 0xd6, 0x9b, 0x80, 0xe7, 0x5d, 0x26, 0xbd, 0xd5, 0xe6, 0xd8, 0xfd, 0x4d, 0x0e, 0xed, 0x5f, 0x87, 0x85, 0x60, 0xc0, 0x78, 0xb6, 0x00, 0x82, 0x8d, 0xaa, 0xc6, 0x8b, 0x9f, 0x29, 0x66, 0x90, 0x24, 0x23, 0x24, 0x93, 0xa2, 0x4f, 0xe9, 0xaa, 0x6a, 0x12, 0x96, 0x03, 0x82, 0xa2, 0x98, 0x25, 0xe3, 0x6b, 0xbd, 0x78, 0xe4, 0xb2, 0x45, 0x08, 0xf7, 0x78, 0x3d, 0x86, 0x93, 0xa1, 0x08, 0x90, 0x71, 0x55, 0x3f, 0x31, 0xfb, 0xa7, 0xbb, 0xac, 0x02, 0x74, 0xef, 0x75, 0xaf, 0x8e, 0x7b, 0x81, 0xbc, 0x1a, 0xff, 0xbf, 0xe3, 0x37, 0x2d, 0xe7, 0x97, 0xe1, 0x23, 0x72, 0xf3, 0x14, 0xf7, 0xe9, 0xf0, 0x34, 0x93, 0x63, 0xda, 0xac, 0xc3, 0x4a, 0x05, 0xd6, 0x8c, 0x5d, 0xbc, 0x1b, 0xc0, 0xfb, 0x7a, 0x5b, 0xcf, 0x9e, 0x5d, 0x8e, 0xe0, 0xa6, 0xd7, 0xac, 0x20, 0x58, 0xa7, 0xcb, 0x5a, 0x26, 0x07, 0x87, 0xc9, 0x30, 0x27, 0xa7, 0x2a, 0x0c, 0xdb, 0xfe, 0x14, 0xc2, 0x90, 0x8e, 0x8c, 0x1b, 0x85, 0xf4, 0xd5, 0x1c, 0x38, 0x00, 0x85, 0xcd, 0x1e, 0xa3, 0xde, 0x3f, 0x96, 0x0e, 0x5a, 0xcc, 0x20, 0x18, 0x88, 0xa1, 0xca, 0xe0, 0x17, 0x7a, 0xec, 0xb4, 0x30, 0xad, 0x15, 0x32, 0x0a, 0x6a, 0x45, 0xad, 0xb8, 0x41, 0x5d, 0xd3, 0x45, 0xe4, 0xd3, 0x8c, 0x02, 0x2f, 0xaa, 0x25, 0x1f, 0x65, 0xa2, 0xad, 0x79, 0xbd, 0xac, 0x9f, 0xb3, 0x1d, 0xa0, 0xc2, 0x88, 0x25, 0x32, 0x4e, 0x5f, 0x6f, 0x23, 0x50, 0x20, 0x15, 0xb4, 0x4f, 0x47, 0x74, 0x60, 0x30, 0x37, 0x30, 0xca, 0x57, 0xd0, 0x79, 0xf5, 0x0f, 0x43, 0x8c, 0xb3, 0x2c, 0x25, 0x7c, 0x60, 0xef, 0xc3, 0x32, 0xcf, 0x29, 0xb6, 0xb2, 0x85, 0xa3, 0xb7, 0xa1, 0x25, 0xbe, 0xb4, 0x04, 0x2c, 0x57, 0x23, 0x4b, 0xde, 0xed, 0x96, 0x8e, 0x81, 0x06, 0x8f, 0x16, 0xc8, 0xce, 0x96, 0x1f, 0x92, 0x02, 0x8a, 0xdc, 0xd5, 0x0c, 0x35, 0xbc, 0xd4, 0x70, 0x22, 0xec, 0x99, 0x66, 0xb3, 0x1d, 0x9f, 0xc8, 0x6e, 0x87, 0xcf, 0x2f, 0x98, 0x2e, 0xad, 0x5a, 0x05, 0x64, 0xd4, 0xcf, 0x2e, 0x8f, 0xa0, 0xc4, 0x84, 0x2c, 0x2a, 0x3f, 0x04, 0x14, 0x79, 0x7d, 0x0c, 0xfe, 0xf6, 0x91, 0x6d, 0x46, 0x21, 0x4d, 0xc1, 0xed, 0x83, 0x65, 0xff, 0xe0, 0xe3, 0xd2, 0x4c, 0x7d, 0xbd, 0x75, 0x14, 0x53, 0xf0, 0xfd, 0x5a, 0x29, 0xb7, 0x0a, 0x4c, 0x42, 0xda, 0x92, 0x1b, 0xe0, 0x26, 0x85, 0x09, 0x07, 0x1a, 0xac, 0xc4, 0x83, 0xe3, 0xd7, 0xf2, 0x2d, 0x8b, 0x37, 0x0d, 0x69, 0x6d, 0x09, 0x71, 0xf3, 0xec, 0x74, 0xb3, 0xdc, 0x64, 0xb5, 0x35, 0xcf, 0x61, 0x79, 0xf7, 0x99, 0x0f, 0x8a, 0xb0, 0xe8, 0xf2, 0xae, 0x1e, 0x53, 0xd7, 0xcd, 0x9a, 0x9b, 0x0b, 0x51, 0xef, 0x31, 0xca, 0xd2, 0x6c, 0xf8, 0xfa, 0xf3, 0x38, 0x4b, 0x1a, 0x87, 0xe6, 0x42, 0x75, 0xf9, 0x49, 0x31, 0x9b, 0xea, 0x8a, 0x72, 0x11, 0x1b, 0x77, 0x65, 0x48, 0x8e, 0x1e, 0xb4, 0xcc, 0xe8, 0x9b, 0xdc, 0xbe, 0x1a, 0x2e, 0xe9, 0x84, 0x40, 0x91, 0x80, 0xbf, 0xc9, 0x88, 0x23, 0x7d, 0xd9, 0xb9, 0xb1, 0xb1, 0xeb, 0xbe, 0x2c, 0xe0, 0xbb, 0x79, 0xbf, 0x1c, 0x63, 0xa7, 0x00, 0x36, 0xc4, 0xb8, 0x72, 0x30, 0x27, 0xdf, 0x4e, 0xf1, 0x24, 0x65, 0x83, 0x3c, 0xc4, 0x42, 0xfb, 0xe3, 0xe2, 0xee, 0x20, 0x38, 0xd7, 0x75, 0x9f, 0xc5, 0x56, 0xca, 0x6b, 0x3d, 0x94, 0x5d, 0x06, 0xb2, 0xac, 0xef, 0xfc, 0x07, 0x43, 0xa5, 0xb0, 0xa9, 0x67, 0x5c, 0x5a, 0x7a, 0xbd, 0x3d, 0x51, 0x0e, 0xdc, 0x91, 0x86, 0x1a, 0xf4, 0xd6, 0x51, 0x29, 0xb3, 0x12, 0x71, 0x91, 0x69, 0x67, 0x4e, 0xa6, 0x6a, 0xe8, 0x80, 0x2d, 0xb4, 0xab, 0x95, 0x14, 0xd1, 0x1f, 0x0f, 0x60, 0xff, 0xa0, 0xad, 0x66, 0x8f, 0x49, 0xec, 0x3e, 0x8b, 0x0a, 0xcc, 0x75, 0x9b, 0xfa, 0xd7, 0x02, 0x29, 0xee, 0x60, 0x7b, 0xc4, 0x4a, 0x09, 0x89, 0xc2, 0x17, 0x88, 0x9a, 0x2a, 0x56, 0xaa, 0xd5, 0xd1, 0x94, 0x97, 0x53, 0xc2, 0xbf, 0x59, 0x8c, 0xe3, 0x38, 0x98, 0x0f, 0xd6, 0x29, 0xa7, 0x77, 0x1e, 0x19, 0xc5, 0x9a, 0x83, 0xbe, 0x9c, 0x03, 0xb7, 0x12, 0x0e, 0xa3, 0x39, 0xa9, 0x31, 0xc3, 0x7a, 0x41, 0x98, 0x3d, 0x3f, 0x9b, 0xd5, 0xec, 0x46, 0x89, 0x3b, 0x61, 0x2c, 0x49, 0xe9, 0xd7, 0x8e, 0x11, 0x04, 0x69, 0x6f, 0xeb, 0x43, 0x83, 0xd9, 0xc3, 0xb1, 0x97, 0xc7, 0xbe, 0xae, 0x11, 0x43, 0xce, 0x37, 0x8c, 0xcc, 0x84, 0x68, 0x46, 0xfa, 0x25, 0x3f, 0xd1, 0x65, 0xff, 0xa3, 0x0c, 0xc2, 0xfd, 0xa5, 0x52, 0x4f, 0x7a, 0x05, 0xf1, 0x72, 0x53, 0xf8, 0xde, 0x9c, 0x40, 0x28, 0xa7, 0x74, 0x64, 0xfd, 0xa8, 0x32, 0x22, 0x1b, 0x82, 0x48, 0x33, 0x2c, 0xc9, 0x48, 0xf5, 0xdf, 0xfd, 0x02, 0x06, 0x30, 0xbc, 0xec, 0x12, 0xeb, 0x35, 0xc8, 0xe9, 0x6b, 0xe0, 0x80, 0xd5, 0xa8, 0x6d, 0x55, 0x2a, 0x71, 0xfa, 0x38, 0x1e, 0xf5, 0x88, 0x78, 0xdb, 0x88, 0xb0, 0x9e, 0xd3, 0xa4, 0x92, 0x96, 0x54, 0x2e, 0x0f, 0x0f, 0x5c, 0xfb, 0x38, 0x23, 0xae, 0x93, 0x05, 0x3b, 0x25, 0x35, 0x4b, 0x2d, 0x49, 0x1b, 0xe8, 0xa8, 0x20, 0xfe, 0x40, 0xd2, 0x47, 0xdd, 0xee, 0x2f, 0x40, 0xfb, 0xb3, 0xc5, 0x0e, 0x27, 0xb2, 0x7e, 0xff, 0x3f, 0xe0, 0xcd, 0xca, 0xf7, 0xb6, 0x94, 0xd9, 0xd7, 0x29, 0x46, 0xe8, 0x83, 0xdb, 0x49, 0xcf, 0x3f, 0x93, 0x9e, 0x9c, 0xb2, 0xeb, 0xc3, 0xe5, 0xea, 0x48, 0xd8, 0x5d, 0xa1, 0x0f, 0x02, 0xa4, 0xbf, 0x16, 0x0d, 0x64, 0x20, 0x59, 0x55, 0x99, 0x96, 0xef, 0xe6, 0x30, 0x32, 0x3c, 0xe2, 0xd4, 0xbf, 0x67, 0x23, 0x05, 0x90, 0x0e, 0x22, 0x6a, 0x7c, 0x39, 0x17, 0x68, 0x26, 0x8d, 0x62, 0xf3, 0x82, 0xc3, 0x2a, 0xa4, 0x94, 0x58, 0x44, 0x0c, 0x7b, 0x85, 0x56, 0x49, 0xaf, 0x71, 0x3c, 0xd6, 0x87, 0xa6, 0xaa, 0xa8, 0xfe, 0xc1, 0x13, 0x76, 0xb6, 0x6e, 0xca, 0x58, 0x3d, 0x94, 0x68, 0x93, 0x90, 0xcd, 0x6d, 0xb3, 0xdd, 0x19, 0x2a, 0xdb, 0x8d, 0xd3, 0xde, 0x5a, 0x82, 0xe4, 0x1f, 0x7e, 0x9d, 0x36, 0x7b, 0xad, 0x84, 0x6c, 0x60, 0xb1, 0xa2, 0xd0, 0x39, 0x54, 0x6f, 0x8c, 0xda, 0x2d, 0xf1, 0x1e, 0x1e, 0xb9, 0x83, 0x06, 0xce, 0xae, 0xd5, 0xc1, 0xc5, 0x8b, 0x34, 0xfb, 0x52, 0x74, 0x0b, 0x01, 0xde, 0x3d, 0xaa, 0x75, 0xcf, 0xc5, 0x47, 0x45, 0xac, 0x85, 0x42, 0xdd, 0x81, 0x68, 0xae, 0x9c, 0x85, 0xdd, 0x0c, 0x85, 0xfa, 0x2b, 0x59, 0x38, 0x55, 0x06, 0x4c, 0x20, 0x9f, 0x5f, 0xd9, 0xed, 0x1b, 0x80, 0xf9, 0x45, 0x29, 0x57, 0xad, 0xb6, 0x6a, 0x12, 0x40, 0xf0, 0x25, 0xed, 0xcd, 0x31, 0xe9, 0x48, 0x02, 0x00, 0x74, 0xfd, 0x23, 0x1e, 0xd4, 0xf0, 0x52, 0xba, 0xcc, 0xe8, 0x0d, 0xe4, 0x79, 0x9d, 0xf8, 0x44, 0x35, 0x12, 0xdd, 0x0c, 0xbc, 0x24, 0xf1, 0x2b, 0x8e, 0x63, 0x59, 0xc4, 0x94, 0x22, 0xec, 0xde, 0x05, 0xca, 0x3b, 0x5d, 0x8b, 0x74, 0xce, 0x31, 0xa2, 0xb6, 0xb1, 0xcd, 0x41, 0xbc, 0x30, 0xda, 0xbd, 0x9b, 0xde, 0x2d, 0xea, 0xe3, 0xdc, 0xf7, 0x83, 0x73, 0x57, 0x3c, 0xcc, 0x92, 0x53, 0x87, 0x75, 0x3b, 0xa7, 0xdb, 0xc2, 0xb7, 0x49, 0xec, 0xe9, 0x72, 0xcc, 0x8f, 0xbc, 0x07, 0x27, 0x70, 0x87, 0x9d, 0xb8, 0x03, 0x3c, 0x76, 0x89, 0xbd, 0xcd, 0xc5, 0xd1, 0x83, 0xda, 0xc0, 0xbe, 0x63, 0x8c, 0xf7, 0x71, 0x82, 0xc1, 0xe4, 0x4b, 0x55, 0x69, 0xc3, 0x67, 0x14, 0x2f, 0xa4, 0x67, 0x6c, 0x5d, 0xbe, 0x74, 0x75, 0xf9, 0x06, 0x80, 0xe3, 0x34, 0x00, 0xce, 0x80, 0x06, 0xd5, 0xb5, 0xda, 0x12, 0xa7, 0xa1, 0x38, 0xcf, 0x21, 0x5a, 0xd3, 0xe9, 0x52, 0x89, 0x43, 0xe5, 0xbb, 0x78, 0x38, 0x05, 0xa6, 0x19, 0x6a, 0x6b, 0xba, 0x4a, 0xd3, 0x80, 0xcd, 0x57, 0x1b, 0x97, 0xf9, 0xc0, 0x54, 0xce, 0xf2, 0x3d, 0xe7, 0x35, 0x96, 0x00, 0xce, 0x33, 0xc6, 0x3a, 0x04, 0x25, 0x75, 0xe0, 0x3a, 0x47, 0xfe, 0xaf, 0xcc, 0xd8, 0xbb, 0x6e, 0xf3, 0x79, 0xd3, 0x73, 0x3c, 0xd7, 0x53, 0x68, 0x39, 0x89, 0x81, 0x4f, 0x76, 0x3c, 0x6d, 0xc4, 0xae, 0x0d, 0xc8, 0x82, 0x3f, 0x36, 0xf9, 0x29, 0xdc, 0xed, 0x6e, 0x3f, 0x82, 0x89, 0x30, 0x74, 0xad, 0xe7, 0xbb, 0x2a, 0xcb, 0x0c, 0x0c, 0x34, 0xf1, 0x0b, 0xfb, 0xde, 0xcd, 0x29, 0xcb, 0x2e, 0xdc, 0x40, 0x00, 0x6a, 0xdc, 0x61, 0x70, 0xda, 0x85, 0xbd, 0x9d, 0xcf, 0x74, 0xc6, 0x42, 0xe5, 0x68, 0x91, 0x2c, 0x84, 0xb0, 0x7f, 0x4b, 0xad, 0xe4, 0x1c, 0x09, 0xf3, 0xd4, 0x47, 0xda, 0xc7, 0xbe, 0x94, 0x15, 0xf9, 0xc4, 0xee, 0x02, 0x7c, 0x9c, 0x81, 0x34, 0x6a, 0x8a, 0xd7, 0x19, 0x47, 0x8b, 0x40, 0xcf, 0x8a, 0xd3, 0x78, 0x39, 0x59, 0x7a, 0x84, 0x53, 0x95, 0x73, 0xdd, 0xc2, 0x16, 0xbd, 0xd0, 0xb0, 0x38, 0xdd, 0x25, 0xd6, 0x96, 0x8b, 0xff, 0xda, 0x15, 0xac, 0x03, 0xdc, 0x25, 0x80, 0xbc, 0x4c, 0x43, 0x1d, 0x3e, 0xfe, 0xc2, 0x1c, 0x0a, 0x80, 0xcc, 0x92, 0x32, 0xab, 0xa4, 0x42, 0xbe, 0x78, 0x2d, 0x10, 0x4d, 0x15, 0xb0, 0xb9, 0x00, 0x38, 0xda, 0xc2, 0x93, 0xb4, 0x04, 0xae, 0xcd, 0x4a, 0xb8, 0x74, 0x1b, 0xc1, 0x70, 0x30, 0x78, 0x38, 0xa0, 0x19, 0x8f, 0xbc, 0xf7, 0xb3, 0x24, 0x16, 0xe2, 0x46, 0xb0, 0xe6, 0x53, 0x8e, 0x4b, 0xf6, 0xc0, 0xb4, 0xcf, 0xc8, 0x6e, 0x7d, 0x3b, 0x71, 0xef, 0xc2, 0x55, 0xaa, 0xea, 0x20, 0x94, 0x25, 0x1a, 0xf0, 0x3c, 0x1d, 0x99, 0x79, 0xcb, 0x31, 0x5f, 0x65, 0x94, 0x72, 0x05, 0x72, 0xaa, 0xbb, 0xcf, 0x6a, 0xff, 0x41, 0xea, 0x55, 0xcd, 0x6a, 0xf2, 0xed, 0x35, 0xe3, 0xb8, 0x52, 0x27, 0xed, 0x41, 0xff, 0x81, 0xf7, 0x12, 0xfd, 0x7b, 0x72, 0xaa, 0x56, 0x42, 0xe1, 0x51, 0xcd, 0xe3, 0x2f, 0x10, 0xcc, 0x6b, 0x46, 0x01, 0x9e, 0x4c, 0xdd, 0xc9, 0xde, 0x03, 0x91, 0x62, 0x30, 0xf8, 0x38, 0x1e, 0x2f, 0xa6, 0x72, 0xe8, 0xa6, 0xfb, 0x80, 0xcd, 0x02, 0x02, 0x5a, 0xbc, 0x07, 0xbf, 0xfb, 0x8a, 0xc3, 0x5b, 0x00, 0x39, 0xc0, 0x81, 0x71, 0x7a, 0x7e, 0x07, 0xdf, 0x70, 0x20, 0xd1, 0xaf, 0xb7, 0x66, 0xf2, 0xb5, 0xa5, 0xdb, 0x15, 0x05, 0xd0, 0x50, 0x1c, 0x05, 0xd0, 0x88, 0x06, 0xc7, 0x46, 0x35, 0x16, 0x96, 0x1d, 0x23, 0x31, 0xcf, 0x0f, 0xb4, 0x89, 0xf3, 0x6b, 0x8c, 0x78, 0xf9, 0x16, 0x8d, 0xae, 0xe9, 0xd0, 0x06, 0x8f, 0xa6, 0xb9, 0x27, 0xd7, 0x0b, 0x14, 0xb9, 0x80, 0x3a, 0x4a, 0x0c, 0xe5, 0x31, 0x32, 0x30, 0x27, 0x9f, 0x8f, 0x67, 0xd0, 0xf5, 0xdb, 0xdb, 0xb6, 0xbf, 0x43, 0x8d, 0x23, 0x35, 0xf2, 0x8e, 0x32, 0x0d, 0x92, 0x71, 0x7c, 0x94, 0x10, 0x00, 0xf4, 0xfd, 0xa0, 0x2e, 0x10, 0xf9, 0x02, 0x4d, 0x2a, 0x88, 0x03, 0x81, 0x25, 0x0e, 0x46, 0x75, 0x53, 0xa9, 0x44, 0x4c, 0x96, 0xc2, 0x92, 0xdb, 0xc6, 0xe2, 0x63, 0x15, 0x53, 0xc7, 0x4d, 0xc6, 0x2c, 0xb8, 0x50, 0x85, 0xdf, 0x15, 0x14, 0xe3, 0x01, 0x32, 0x72, 0xe9, 0xd0, 0x65, 0x36, 0xc2, 0x17, 0x5e, 0x23, 0xb4, 0x52, 0xb7, 0x38, 0x55, 0x13, 0xcc, 0x32, 0xfb, 0xa4, 0xcd, 0x52, 0x74, 0xee, 0x12, 0x60, 0xf7, 0x99, 0xae, 0xf0, 0x5b, 0x75, 0x46, 0xe4, 0x87, 0x19, 0x24, 0x32, 0x2a, 0xca, 0x87, 0xe8, 0xac, 0x9e, 0x3d, 0x6d, 0x64, 0xe0, 0x74, 0x09, 0x0b, 0xb7, 0xce, 0xa7, 0x70, 0x03, 0xb3, 0xda, 0x6e, 0x88, 0xeb, 0x1f, 0x1b, 0x4e, 0x6c, 0x62, 0x43, 0x47, 0x70, 0xc3, 0x15, 0x33, 0xcb, 0x99, 0x1b, 0xc1, 0x7c, 0xb7, 0x70, 0xf7, 0x82, 0xef, 0x2d, 0xd3, 0xf1, 0xd5, 0x24, 0x33, 0x44, 0xc5, 0xd1, 0xf2, 0xf5, 0x28, 0x8d, 0x54, 0x4b, 0xf2, 0x05, 0xa4, 0x74, 0x6f, 0xeb, 0x1b, 0xd3, 0x40, 0xeb, 0x04, 0x9b, 0xa1, 0xe1, 0x1e, 0x9d, 0xed, 0x49, 0x42, 0x5e, 0x63, 0xf6, 0x45, 0x6d, 0x2a, 0x08, 0x20, 0xf3, 0x93, 0x18, 0x4e, 0x8c, 0x9f, 0xb5, 0x76, 0x55, 0xc1, 0x14, 0x4a, 0x47, 0xe4, 0x03, 0xaf, 0xc3, 0xb0, 0x1f, 0x1e, 0x6d, 0x09, 0x47, 0x4a, 0x3e, 0xd9, 0x50, 0x03, 0xd5, 0x10, 0xfa, 0x5a, 0x0e, 0xe9, 0x23, 0x06, 0xd6, 0x6e, 0x3b, 0x06, 0x3e, 0x3e, 0xf8, 0x88, 0xce, 0x8e, 0x4b, 0x0a, 0x1b, 0x6e, 0x92, 0xbf, 0x9b, 0x4d, 0x0f, 0x34, 0xb9, 0xc0, 0x99, 0x33, 0x25, 0x7f, 0x91, 0xe8, 0x6e, 0xb0, 0x18, 0x42, 0xd2, 0x69, 0x7f, 0x9c, 0x55, 0x70, 0xff, 0x9d, 0x10, 0x45, 0xab, 0x5c, 0xcc, 0x62, 0xa2, 0xc8, 0xcf, 0xc1, 0x89, 0x48, 0xf6, 0x9f, 0x39, 0x9e, 0x04, 0x80, 0xb4, 0x11, 0x3a, 0x73, 0x5e, 0xcb, 0x28, 0x97, 0x6a, 0x80, 0xc2, 0xde, 0x92, 0x50, 0xb6, 0x11, 0x0b, 0xef, 0xfd, 0x14, 0xb8, 0x03, 0xb0, 0x6c, 0x9e, 0xcd, 0x1e, 0xfe, 0x98, 0x0c, 0x1b, 0x19, 0x4b, 0x1e, 0x9b, 0xb7, 0x5d, 0x69, 0x7f, 0x00, 0xe2, 0xf9 ],
+const [ 0x09, 0xeb, 0xb3, 0x46, 0x3b, 0x01, 0xb2, 0xc4, 0x92, 0xca, 0x2b, 0x1f, 0x6a, 0xc7, 0xe6, 0x14, 0x5e, 0xb4, 0x06, 0x46, 0x53, 0x72, 0x30, 0xd5, 0xb9, 0x45, 0xef, 0x33, 0x0d, 0x3f, 0x57, 0x33, 0xa2, 0xfc, 0xe9, 0x63, 0xa2, 0x90, 0xb7, 0x9c, 0x4f, 0xbe, 0xc9, 0xd7, 0x8f, 0x6b, 0xbe, 0x42, 0xa8, 0x51, 0xb6, 0x94, 0x48, 0xf8, 0x70, 0x9d, 0xc8, 0xe2, 0xb0, 0x21, 0xb1, 0x06, 0xe4, 0xe6, 0x80, 0x81, 0x06, 0x0c, 0xa6, 0x87, 0xc4, 0x9d, 0xd3, 0x9f, 0xdf, 0x65, 0x74, 0x10, 0xd1, 0x04, 0x7b, 0x96, 0xb2, 0x41, 0x5e, 0x5a, 0x5c, 0xa1, 0x62, 0x21, 0xce, 0x39, 0x19, 0xc4, 0xce, 0xc0, 0x29, 0xe0, 0xd3, 0xe8, 0x50, 0xce, 0x21, 0xee, 0xa5, 0xd6, 0x36, 0x70, 0x21, 0x9f, 0x65, 0x80, 0x5d, 0xea, 0xc1, 0xf6, 0x9d, 0x80, 0x3c, 0x0a, 0x0e, 0x69, 0x10, 0x22, 0x4c, 0x5f, 0x5e, 0xe8, 0x27, 0x83, 0x15, 0xa0, 0xa7, 0x4e, 0x16, 0xb9, 0x4e, 0xc9, 0x96, 0xa1, 0x9c, 0x01, 0xc3, 0xde, 0xd9, 0xb5, 0xaa, 0x5b, 0x0e, 0x53, 0x58, 0xff, 0x55, 0x23, 0x3f, 0x84, 0x52, 0xc1, 0xdc, 0x87, 0x02, 0xd0, 0x97, 0xdb, 0xb3, 0xed, 0xeb, 0x23, 0x54, 0xe2, 0xc6, 0xa0, 0xef, 0x1c, 0x33, 0x47, 0x74, 0x60, 0x36, 0x17, 0xb8, 0xb9, 0xf7, 0xa9, 0xbd, 0xb5, 0x23, 0x09, 0x34, 0xd0, 0x90, 0xc4, 0x40, 0x31, 0x20, 0x42, 0x7d, 0x94, 0xe7, 0x56, 0x41, 0x88, 0x90, 0x14, 0x22, 0xda, 0xfc, 0xe3, 0xb8, 0x51, 0x2d, 0xd3, 0xa4, 0x9b, 0x63, 0x30, 0xd0, 0x88, 0x84, 0x57, 0xf9, 0x76, 0xc1, 0xc8, 0x6b, 0x0d, 0x77, 0x7d, 0x0c, 0x2c, 0x53, 0x7a, 0x9c, 0x22, 0xba, 0xa6, 0x3b, 0x22, 0x68, 0xd9, 0x2c, 0xf1, 0x57, 0x36, 0xd8, 0xe2, 0xe2, 0xbb, 0x16, 0x04, 0x2a, 0x16, 0xa9, 0x9a, 0xb9, 0xba, 0x0a, 0xcb, 0x65, 0x33, 0x69, 0x9b, 0x77, 0xb6, 0xee, 0x1a, 0x0d, 0xfd, 0x44, 0xdb, 0xbd, 0x52, 0x58, 0xa8, 0x7b, 0xe9, 0x5e, 0x74, 0xbd, 0x72, 0x16, 0x91, 0xdd, 0xef, 0x4d, 0x24, 0xbe, 0xc3, 0xa6, 0xd5, 0xb2, 0x0c, 0x9a, 0xcb, 0x9b, 0x33, 0xbe, 0xd7, 0x51, 0xc2, 0x44, 0xef, 0x44, 0x75, 0xc5, 0xdf, 0x63, 0x93, 0x3e, 0x3b, 0x3c, 0x7e, 0x58, 0x98, 0x64, 0x89, 0xec, 0xfb, 0x19, 0x0b, 0xc6, 0x92, 0x26, 0xb2, 0xa9, 0xa2, 0x07, 0x19, 0x94, 0xc1, 0x4e, 0x9c, 0x44, 0x45, 0x45, 0x6b, 0xfa, 0xfc, 0xd5, 0xdd, 0x7e, 0x1e, 0xa6, 0x07, 0x64, 0x7f, 0x88, 0x8e, 0x8e, 0x09, 0x12, 0xb9, 0xf2, 0x6a, 0x88, 0xca, 0x9d, 0x0a, 0x02, 0x8f, 0xf8, 0x40, 0xcb, 0x34, 0x4b, 0xc5, 0x08, 0x5b, 0x7f, 0x69, 0x9a, 0x6e, 0x28, 0x04, 0x45, 0x34, 0xc3, 0xb0, 0x11, 0xa3, 0x3b, 0x35, 0xf0, 0xf6, 0xb3, 0xc5, 0xa2, 0xff, 0x7f, 0xea, 0xd6, 0xbd, 0x73, 0xbc, 0x92, 0x31, 0x61, 0x57, 0xd4, 0x6e, 0xdd, 0x8c, 0x7a, 0xf0, 0x43, 0xd7, 0x5f, 0x2e, 0xfc, 0x91, 0xc7, 0x72, 0xfc, 0x67, 0xfd, 0xe9, 0x8f, 0x0b, 0x3a, 0xf6, 0x56, 0x29, 0xc9, 0xcc, 0x8c, 0x9d, 0x69, 0x3c, 0x8e, 0xe3, 0xf3, 0xcb, 0x9b, 0xcf, 0x3c, 0x08, 0xd8, 0x7e, 0x3d, 0x1d, 0x97, 0x8c, 0x71, 0xa3, 0xd8, 0x87, 0x7f, 0xbb, 0x10, 0xa4, 0x19, 0x5a, 0x2a, 0xb1, 0x24, 0xe4, 0xcc, 0x4b, 0x19, 0xfd, 0xdb, 0x51, 0xab, 0x9c, 0x41, 0x99, 0xaa, 0x60, 0xee, 0xe1, 0x27, 0x28, 0x1c, 0x08, 0xd9, 0xde, 0xd8, 0x7e, 0xbf, 0x93, 0xbe, 0xf9, 0x07, 0xd1, 0x04, 0x69, 0x2f, 0x2c, 0xba, 0x2f, 0x6a, 0x1b, 0x4f, 0x89, 0x45, 0x06, 0x58, 0x51, 0x8a, 0xa0, 0x8d, 0xe8, 0x64, 0x77, 0x14, 0x6d, 0xc5, 0xca, 0x03, 0x32, 0x05, 0x9a, 0x20, 0x70, 0xcc, 0x03, 0xeb, 0x39, 0x31, 0xcd, 0xde, 0xaf, 0x23, 0x3f, 0xf3, 0x74, 0x08, 0x33, 0x67, 0x61, 0xa5, 0x70, 0xbd, 0x7b, 0x3e, 0x33, 0x07, 0x22, 0xfe, 0x0f, 0x61, 0x8c, 0x99, 0xf7, 0xbe, 0x72, 0x2f, 0x9a, 0xe7, 0x09, 0x74, 0xef, 0xc0, 0x34, 0x0e, 0x10, 0xcd, 0xf8, 0x3e, 0x4b, 0xf6, 0x30, 0xc3, 0x76, 0x87, 0x82, 0xfb, 0x84, 0x7b, 0x91, 0x4c, 0x56, 0xfa, 0x74, 0xc2, 0xd3, 0x20, 0x68, 0xf9, 0x3b, 0x00, 0xc1, 0x3e, 0xb8, 0xe9, 0x27, 0xf1, 0x37, 0xe8, 0xfe, 0x2d, 0x75, 0x8d, 0x26, 0xac, 0x5d, 0xf2, 0xe5, 0xe4, 0x91, 0xfa, 0x21, 0x76, 0x47, 0xd7, 0xd3, 0xc9, 0x56, 0xcf, 0xb8, 0xf2, 0x90, 0x3f, 0x4a, 0xd8, 0x53, 0xe0, 0xee, 0x95, 0x5b, 0x49, 0x6f, 0x1f, 0xda, 0xb5, 0xab, 0x27, 0xcb, 0x07, 0x8c, 0x41, 0x83, 0x0b, 0x3a, 0x46, 0x89, 0xff, 0x8f, 0xf6, 0xa7, 0x52, 0xcc, 0xe2, 0x41, 0xab, 0x8a, 0x8a, 0xe6, 0x2d, 0xf3, 0xc2, 0x25, 0xfa, 0x31, 0x5a, 0xa2, 0xf5, 0x27, 0xfd, 0x69, 0xcd, 0x5f, 0x5a, 0x81, 0x37, 0x44, 0x82, 0xc5, 0x7a, 0x92, 0x91, 0xef, 0x31, 0x0a, 0x91, 0xf6, 0x4c, 0x6a, 0x9b, 0x9a, 0x59, 0x9c, 0x3f, 0x3c, 0x02, 0x2e, 0x27, 0xf4, 0xd6, 0x02, 0xf6, 0xde, 0x4c, 0x47, 0x76, 0xb4, 0x04, 0xa7, 0xf3, 0xa2, 0x51, 0xc2, 0xe2, 0x55, 0xf5, 0xdc, 0xc7, 0x56, 0x2b, 0xd2, 0x55, 0x96, 0xeb, 0x53, 0xd6, 0x4a, 0x69, 0x4c, 0xcd, 0xf8, 0xdf, 0xa4, 0xda, 0xd2, 0x8c, 0x2a, 0xdf, 0x44, 0xfc, 0xcc, 0x61, 0xc9, 0x8b, 0x09, 0x31, 0x02, 0x25, 0xa9, 0x4b, 0x09, 0x4f, 0xab, 0xfe, 0x03, 0x6b, 0x7f, 0x4d, 0xf4, 0x37, 0x75, 0x96, 0xd8, 0x98, 0x76, 0x71, 0xef, 0x96, 0xf2, 0xdb, 0x58, 0xa7, 0x19, 0x94, 0xe1, 0x30, 0x4e, 0xc5, 0x1e, 0x49, 0xd8, 0xe6, 0xb8, 0xc1, 0xdb, 0xdf, 0x08, 0x61, 0x87, 0x6d, 0xe4, 0x75, 0x90, 0xc8, 0xb9, 0x89, 0xde, 0x83, 0xda, 0x71, 0x85, 0xb3, 0x18, 0x8c, 0xf7, 0x53, 0x93, 0x49, 0x79, 0xe7, 0xd0, 0xe9, 0xd3, 0x60, 0x0b, 0x87, 0x4c, 0x40, 0xce, 0x56, 0xd5, 0xfe, 0xc2, 0x2b, 0x85, 0xac, 0xc6, 0x3b, 0x45, 0xd7, 0x3e, 0x25, 0xcd, 0xaf, 0xad, 0x33, 0xcf, 0x67, 0x87, 0xdc, 0x71, 0xdf, 0x40, 0x8e, 0x01, 0x81, 0xa9, 0xab, 0xe4, 0x69, 0x7c, 0xd2, 0xd0, 0xc8, 0x35, 0x5f, 0x3c, 0x8a, 0x24, 0x35, 0x14, 0x36, 0xc1, 0xbb, 0xb0, 0x16, 0x3f, 0x24, 0x07, 0x99, 0x64, 0xf4, 0x20, 0xf5, 0x97, 0xbf, 0xca, 0x10, 0x3b, 0x34, 0x8d, 0xa1, 0x3b, 0x5b, 0xe0, 0x92, 0xe6, 0x1b, 0x9c, 0xaa, 0xfe, 0xff, 0xb1, 0x68, 0x0b, 0x3a, 0x18, 0x32, 0xf5, 0xe8, 0x09, 0xaf, 0xd2, 0x96, 0x6d, 0x71, 0xfd, 0x05, 0x96, 0xd7, 0x68, 0x2b, 0x2e, 0x31, 0x33, 0x7b, 0x6d, 0x26, 0x7d, 0x66, 0x8f, 0x53, 0x7a, 0x22, 0x86, 0x35, 0xc5, 0xaa, 0xec, 0x49, 0xf8, 0x06, 0x3b, 0x71, 0x7b, 0xcc, 0x40, 0x9a, 0x99, 0xe7, 0xcd, 0x9c, 0xd9, 0x97, 0xaf, 0x61, 0x8b, 0xb9, 0xdf, 0x4a, 0xa1, 0x49, 0xfd, 0xce, 0xc0, 0x25, 0xf9, 0x65, 0x97, 0x13, 0x14, 0xa4, 0x70, 0x06, 0x07, 0xa9, 0x04, 0x9d, 0x81, 0xb9, 0x94, 0xed, 0xd7, 0x28, 0x35, 0x80, 0xf7, 0x79, 0x6c, 0x9d, 0x9f, 0xc7, 0xfa, 0xca, 0xcc, 0x64, 0xf9, 0x90, 0x74, 0xbf, 0x28, 0x7e, 0x77, 0x8b, 0x84, 0x71, 0xd4, 0x1d, 0x18, 0x12, 0x18, 0x16, 0x15, 0x9f, 0x1d, 0x43, 0x25, 0xef, 0xf0, 0xc1, 0xfd, 0xb0, 0x13, 0x65, 0x31, 0xf4, 0xe5, 0x5a, 0x4d, 0xec, 0x5e, 0x0c, 0x21, 0xf2, 0xff, 0x45, 0x5c, 0xcd, 0x09, 0x96, 0x5d, 0x31, 0xee, 0xf9, 0x45, 0x86, 0x05, 0xb4, 0x51, 0xea, 0x81, 0x81, 0x67, 0x79, 0xa4, 0xeb, 0xee, 0xcc, 0x30, 0xfb, 0xe3, 0xbf, 0x1f, 0x14, 0x29, 0x78, 0x93, 0x1c, 0x21, 0xa5, 0x10, 0xdc, 0x7b, 0x04, 0xe9, 0xaa, 0x4c, 0x29, 0xf8, 0x45, 0x60, 0x7c, 0x92, 0x00, 0xd1, 0x81, 0xba, 0x23, 0xd8, 0x5c, 0x95, 0x8e, 0xe4, 0x94, 0x1f, 0x9f, 0xe9, 0x17, 0x1b, 0x56, 0xfb, 0x7e, 0x50, 0xb7, 0x1b, 0x93, 0xf2, 0x70, 0x51, 0x10, 0x5f, 0xbc, 0xfb, 0xaa, 0x0c, 0x87, 0x64, 0x4e, 0xbe, 0xd3, 0x98, 0xab, 0xfd, 0x5a, 0x77, 0xf0, 0xc5, 0x75, 0x09, 0xd7, 0x80, 0x3c, 0x11, 0xe2, 0x31, 0xef, 0xe5, 0xe4, 0xf2, 0x95, 0x7c, 0xc4, 0xa0, 0xe2, 0xc9, 0x7e, 0xd5, 0x5e, 0x47, 0x6a, 0x16, 0xc4, 0xd6, 0xc1, 0x4e, 0xa8, 0xc5, 0x5d, 0x7b, 0x5d, 0x30, 0xc0, 0xa8, 0x16, 0x8c, 0x58, 0x1b, 0x4b, 0x80, 0x02, 0xcf, 0x5f, 0xf6, 0xcc, 0x25, 0x7f, 0x73, 0xff, 0xd6, 0xcd, 0xa3, 0x5d, 0x2c, 0xbe, 0x39, 0xa7, 0x72, 0xc0, 0xf6, 0x62, 0xa9, 0x21, 0x06, 0xdb, 0x7c, 0x2c, 0x93, 0x69, 0x76, 0x95, 0x95, 0xf2, 0x73, 0x17, 0xe7, 0xb0, 0x54, 0x5b, 0xa0, 0x35, 0xf7, 0x1c, 0xa0, 0xad, 0x67, 0x89, 0x69, 0x64, 0x4f, 0xea, 0x31, 0x88, 0xb5, 0x87, 0x35, 0x2f, 0xe4, 0xc5, 0x4f, 0x9b, 0xaa, 0x93, 0xcb, 0xbd, 0xc4, 0x04, 0x77, 0xf9, 0x97, 0x3d, 0xf9, 0x29, 0x21, 0x92, 0x65, 0xe4, 0x2e, 0xec, 0x0f, 0x00, 0xcf, 0x6e, 0x9e, 0x55, 0x08, 0x58, 0x62, 0xc4, 0xc9, 0x2b, 0xe8, 0x79, 0x1f, 0x0e, 0xcb, 0x6c, 0xac, 0x70, 0xcc, 0x2e, 0x55, 0xef, 0x25, 0xe2, 0x3a, 0x78, 0x1b, 0x89, 0xeb, 0xb0, 0xd3, 0x84, 0xd9, 0x93, 0x66, 0x53, 0x0a, 0x5b, 0x37, 0xa3, 0x11, 0xa4, 0x85, 0x88, 0x3e, 0xcd, 0x3c, 0x07, 0x12, 0xa1, 0x11, 0xd7, 0xf5, 0x37, 0xcd, 0x68, 0x2b, 0x16, 0xe9, 0x25, 0x05, 0x9d, 0x5c, 0xf7, 0x54, 0xa3, 0xb1, 0x0a, 0x23, 0x5a, 0x5c, 0xd3, 0xa6, 0x79, 0x4e, 0x52, 0x6d, 0x9a, 0xc7, 0x94, 0xdd, 0xe0, 0x6c, 0x7d, 0xe1, 0xde, 0x99, 0xc4, 0xdd, 0xb4, 0xf8, 0x3f, 0xe4, 0x7b, 0x53, 0x61, 0x2a, 0xe4, 0xa6, 0x01, 0xbc, 0x1b, 0x79, 0x5c, 0x6e, 0xf2, 0x6c, 0x5e, 0x15, 0x3b, 0x14, 0x1d, 0xf7, 0x75, 0x05, 0xa7, 0x80, 0xac, 0x30, 0xfd, 0x37, 0x9a, 0x70, 0x5f, 0xf0, 0x12, 0x5f, 0xca, 0x42, 0x9f, 0x6e, 0xc0, 0x3b, 0x68, 0x35, 0x47, 0x53, 0x56, 0x07, 0x34, 0x9f, 0x79, 0xca, 0xa9, 0x47, 0xa8, 0x05, 0xdd, 0x3a, 0x68, 0x3b, 0x1b, 0x20, 0x10, 0x78, 0x0e, 0x91, 0x2a, 0x29, 0x3b, 0x84, 0x1b, 0x30, 0xcf, 0x0a, 0x07, 0x38, 0x9b, 0x3c, 0xef, 0x46, 0x5d, 0x71, 0x1c, 0x91, 0x41, 0xb5, 0xc1, 0x94, 0xa7, 0x77, 0xdc, 0x61, 0x27, 0x82, 0x5d, 0x38, 0xd2, 0x2f, 0x8a, 0x58, 0xbb, 0xd8, 0xa2, 0x15, 0xb7, 0x8f, 0xc0, 0x2b, 0x60, 0x10, 0x03, 0x52, 0x60, 0xf5, 0xec, 0x13, 0xec, 0x29, 0x07, 0xd9, 0x8e, 0x9f, 0xce, 0x4b, 0x28, 0x44, 0xca, 0xd9, 0x36, 0x32, 0xfb, 0x95, 0x53, 0x26, 0x7a, 0x45, 0xff, 0x34, 0x5d, 0xb6, 0x9f, 0xb9, 0xdb, 0x53, 0xc5, 0x92, 0xb1, 0xf5, 0xb2, 0x8b, 0xc3, 0xfd, 0x19, 0x1a, 0x07, 0xa1, 0x26, 0x4e, 0x9f, 0x83, 0xbf, 0x02, 0x45, 0x88, 0x0a, 0x56, 0xec, 0xe7, 0x2f, 0x60, 0xa4, 0x80, 0x5f, 0x1e, 0xbf, 0x70, 0x15, 0xaf, 0x32, 0xe2, 0x9b, 0xc3, 0x3e, 0x27, 0xd1, 0x51, 0x4f, 0x0a, 0x2a, 0x88, 0x24, 0x5d, 0xf7, 0x07, 0x30, 0xd8, 0xe8, 0x50, 0x40, 0x24, 0xcf, 0x7a, 0x5f, 0x32, 0xa8, 0x27, 0xf6, 0xd1, 0xd7, 0xb6, 0x38, 0x80, 0xb0, 0xba, 0xbd, 0x80, 0x3c, 0xaa, 0x6d, 0x2e, 0x3a, 0xda, 0xa0, 0x90, 0x65, 0xa9, 0x84, 0x2e, 0xf5, 0xfc, 0xbe, 0x23, 0x68, 0xec, 0x54, 0x73, 0x82, 0xbc, 0xca, 0x9f, 0x93, 0x0e, 0x8b, 0x77, 0xf8, 0x56, 0x8b, 0x30, 0xe4, 0x8e, 0x2b, 0xb6, 0x61, 0x2c, 0x5d, 0x43, 0x91, 0x51, 0x08, 0x31, 0x3a, 0x43, 0xae, 0x0d, 0x81, 0x1d, 0x4c, 0xec, 0xf6, 0xc5, 0x81, 0x02, 0xd1, 0x1f, 0xf3, 0x70, 0x7b, 0x80, 0xef, 0x5e, 0x51, 0x66, 0x4f, 0x4a, 0xa4, 0x66, 0xa1, 0x9f, 0x04, 0x65, 0x85, 0x8a, 0xbe, 0x0b, 0x57, 0x09, 0xa3, 0x75, 0x0e, 0x45, 0x0b, 0x2a, 0x64, 0x21, 0x1a, 0x51, 0x38, 0x13, 0x42, 0x21, 0x30, 0x33, 0x09, 0x98, 0xa2, 0x91, 0x0d, 0x70, 0xb5, 0xcc, 0x45, 0x4f, 0xc3, 0xe0, 0x89, 0x3e, 0x02, 0x40, 0x55, 0x5c, 0x64, 0x25, 0xca, 0xd3, 0xbb, 0x25, 0xf5, 0x0c, 0x21, 0x07, 0x54, 0x1f, 0x97, 0xd6, 0x96, 0x8e, 0xec, 0x34, 0xa3, 0x32, 0xe1, 0xf1, 0xdc, 0x75, 0x8a, 0xdc, 0xa4, 0xc2, 0xf7, 0xd9, 0x1f, 0x3a, 0x14, 0x34, 0x39, 0xa9, 0xce, 0x35, 0xeb, 0xb8, 0x77, 0xf5, 0xba, 0x64, 0x6c, 0x6f, 0x80, 0xae, 0xf5, 0xda, 0x6e, 0x94, 0x6c, 0x37, 0x52, 0x41, 0xa2, 0x26, 0x16, 0x81, 0x7e, 0xfd, 0x89, 0x77, 0xe7, 0x1b, 0x63, 0x92, 0xe4, 0x7a, 0x83, 0xbd, 0x02, 0x84, 0x7a, 0xd6, 0xf7, 0x28, 0x4d, 0x62, 0x84, 0x2c, 0x77, 0x7f, 0xa0, 0xc5, 0x2e, 0x19, 0xd2, 0x65, 0xe7, 0x61, 0xdf, 0xd4, 0x1c, 0x7b, 0xa5, 0x82, 0x4d, 0x77, 0x47, 0x1c, 0x45, 0x83, 0x8a, 0x5d, 0x9e, 0x5f, 0x7f, 0x27, 0x87, 0x11, 0x63, 0xd2, 0xc5, 0xd9, 0xc3, 0xc4, 0xf8, 0x67, 0xe3, 0x41, 0x20, 0x4c, 0x61, 0x85, 0x5f, 0xaf, 0x16, 0x10, 0x01, 0x41, 0x3d, 0x42, 0xb9, 0x73, 0xd7, 0x27, 0x2d, 0xe6, 0x4e, 0x94, 0xb5, 0x22, 0x58, 0x73, 0x60, 0x8c, 0x1e, 0x5b, 0x39, 0x92, 0x9e, 0x64, 0xc8, 0x29, 0x4d, 0x39, 0xdb, 0x79, 0x01, 0x6e, 0x86, 0xd6, 0x0f, 0x14, 0x68, 0xf3, 0xb0, 0x8b, 0x30, 0x52, 0xaa, 0x98, 0x60, 0xff, 0x2c, 0xb7, 0x51, 0x7e, 0xf9, 0xb3, 0x77, 0x02, 0xc8, 0x73, 0xe7, 0xe0, 0xeb, 0x17, 0x16, 0x42, 0x30, 0x44, 0xe4, 0x20, 0x05, 0xbb, 0xd9, 0x6c, 0xdf, 0x31, 0xae, 0x8d, 0xdc, 0x5b, 0x0f, 0x0f, 0xa7, 0x48, 0x9f, 0x99, 0x9c, 0xf3, 0x3d, 0x1f, 0x2c, 0x19, 0x86, 0x58, 0x83, 0x48, 0x9a, 0x73, 0x69, 0x39, 0x23, 0x06, 0x66, 0x5f, 0x94, 0x47, 0x2a, 0xc0, 0xaf, 0x7e, 0x2b, 0x04, 0x4a, 0xba, 0x90, 0xcb, 0x52, 0xc3, 0x4e, 0x44, 0x10, 0x51, 0x91, 0xfc, 0xab, 0x7b, 0x5d, 0xf3, 0xef, 0x72, 0x75, 0xf5, 0x4c, 0x6f, 0x7c, 0x27, 0x22, 0xea, 0x5a, 0xe1, 0x3c, 0x0d, 0xe1, 0xbb, 0x9a, 0x68, 0xb1, 0xeb, 0x73, 0xe6, 0x58, 0xce, 0x7a, 0x00, 0xbe, 0xc4, 0x61, 0x30, 0xc1, 0x41, 0x9b, 0xa9, 0x1c, 0x21, 0x67, 0x45, 0x8d, 0x3c, 0x0a, 0xbf, 0x37, 0x3b, 0x5b, 0x22, 0x45, 0xaa, 0x85, 0x81, 0xd0, 0x4e, 0x09, 0xe9, 0x02, 0xb8, 0x02, 0x94, 0x7c, 0x1a, 0xad, 0x5f, 0xf6, 0x5a, 0x28, 0x7e, 0x25, 0x65, 0x7a, 0x6f, 0xe2, 0xc6, 0xd4, 0x2c, 0x88, 0x77, 0x17, 0xa5, 0x9e, 0xf6, 0x95, 0x6d, 0xb6, 0x9c, 0x1c, 0xb4, 0x94, 0x2b, 0x31, 0x75, 0x93, 0xa6, 0x99, 0xf0, 0x45, 0x65, 0x1e, 0x5b, 0x5a, 0x68, 0x8f, 0xd5, 0xc3, 0xec, 0x09, 0x9b, 0x17, 0x3c, 0x75, 0x7e, 0x35, 0xca, 0x52, 0x95, 0x2b, 0x7e, 0xb5, 0x2f, 0x56, 0x4e, 0x8d, 0x0b, 0xcb, 0x0f, 0x2c, 0xcc, 0xf6, 0x8a, 0x03, 0xa7, 0x81, 0xd3, 0xad, 0x5f, 0x77, 0xd6, 0x30, 0x73, 0xaa, 0x33, 0x7f, 0x96, 0x52, 0x4c, 0x43, 0x5f, 0xf6, 0x9b, 0xda, 0x42, 0x90, 0x4a, 0xa0, 0xbf, 0xec, 0xfd, 0x6e, 0xd9, 0x51, 0xf3, 0x61, 0xca, 0x63, 0x4d, 0xdd, 0xf5, 0x48, 0xad, 0xd1, 0x1c, 0x0a, 0x03, 0x3c, 0xd3, 0x3c, 0xa4, 0xf0, 0x34, 0xe1, 0x9d, 0x96, 0xd5, 0x89, 0x46, 0xf2, 0xf7, 0xbd, 0x1a, 0x68, 0x00, 0x9d, 0xc5, 0xbf, 0x2c, 0xc8, 0x7f, 0x26, 0x7f, 0x7c, 0x99, 0x74, 0xfe, 0xff, 0x55, 0xb4, 0x1e, 0x3d, 0xfb, 0xe1, 0x7d, 0xb2, 0x29, 0xee, 0xd0, 0x8a, 0x6b, 0x09, 0x1c, 0x07, 0x0b, 0x21, 0x2a, 0x24, 0x2b, 0xa6, 0x35, 0x78, 0x10, 0x90, 0xe5, 0x5c, 0xc1, 0xa2, 0x81, 0x50, 0xd1, 0xf0, 0x60, 0x9b ],
+const [ 0x46, 0xcb, 0x5d, 0x39, 0x1e, 0x75, 0x11, 0x46, 0xba, 0x97, 0x00, 0xb4, 0xfd, 0x5f, 0x36, 0xae, 0x7d, 0xda, 0x17, 0x58, 0xd8, 0xfe, 0x50, 0xfb, 0x47, 0xed, 0x0d, 0x62, 0x75, 0x78, 0x6d, 0x84, 0x91, 0xe2, 0x32, 0x63, 0xa1, 0xe7, 0xbe, 0x33, 0x1a, 0xfd, 0x3b, 0xbf, 0xae, 0xda, 0x19, 0x09, 0x66, 0x36, 0xbd, 0x30, 0xf0, 0xd2, 0x77, 0x97, 0x3a, 0xb9, 0xb5, 0x44, 0x40, 0xc6, 0x77, 0x86, 0x22, 0x66, 0x03, 0xdb, 0x79, 0x9f, 0xda, 0x10, 0xeb, 0x52, 0xea, 0xaa, 0xfd, 0xbd, 0x05, 0x85, 0x29, 0x43, 0x92, 0xbb, 0x31, 0x70, 0x83, 0xc7, 0xb2, 0x38, 0x87, 0xeb, 0xfc, 0x7f, 0x80, 0xcf, 0x21, 0xdf, 0x37, 0x6a, 0x4c, 0xa5, 0x4e, 0x25, 0x54, 0x1c, 0x77, 0x3e, 0x91, 0x0f, 0xe4, 0x6b, 0xef, 0x89, 0xff, 0xc1, 0x40, 0xdf, 0x5a, 0xd3, 0xd7, 0xf0, 0xe9, 0x1e, 0x52, 0xac, 0x6f, 0xa5, 0xb7, 0xd3, 0x36, 0xd8, 0xc3, 0xff, 0x03, 0xba, 0x7e, 0xe5, 0x49, 0x43, 0x13, 0xd8, 0x9d, 0x03, 0xdf, 0x8f, 0x6a, 0x09, 0xc8, 0x27, 0xe6, 0x03, 0xd0, 0x6b, 0x44, 0xa7, 0xe9, 0x54, 0x2c, 0x51, 0x0c, 0xcc, 0x68, 0xed, 0x85, 0xb7, 0xe0, 0x17, 0x91, 0x34, 0xc8, 0x81, 0x2a, 0x20, 0x18, 0x95, 0x22, 0xdd, 0x3c, 0x5c, 0x6f, 0x51, 0x0d, 0x9f, 0xc6, 0x31, 0x01, 0x4c, 0x6b, 0x7f, 0x9e, 0x1a, 0x47, 0x51, 0x35, 0x70, 0x3b, 0xd5, 0xcc, 0x84, 0xb4, 0x92, 0x5c, 0xc0, 0x7f, 0xf0, 0x3d, 0x69, 0xdf, 0xfb, 0xde, 0x82, 0xdd, 0x64, 0xb9, 0xee, 0xe0, 0xc8, 0x86, 0xd6, 0x7d, 0x35, 0xaf, 0x4a, 0x90, 0xeb, 0x05, 0x2b, 0x8c, 0x5f, 0xb1, 0x48, 0x0f, 0x86, 0x6d, 0xc7, 0xba, 0x4f, 0xf4, 0xc7, 0x3f, 0x72, 0xb6, 0x43, 0xbb, 0x68, 0xd1, 0x39, 0x47, 0xba, 0x3d, 0x0c, 0xc9, 0x7f, 0x46, 0x28, 0x11, 0x20, 0x40, 0xe4, 0x21, 0x5f, 0x76, 0xac, 0xcb, 0x98, 0x63, 0x5f, 0x82, 0x46, 0x25, 0xf6, 0x6a, 0xc8, 0x2e, 0x67, 0xb1, 0x66, 0x3d, 0xc8, 0x22, 0x8f, 0x8c, 0xb8, 0xf7, 0x64, 0x4b, 0xfb, 0xef, 0x7b, 0x4e, 0x64, 0xa1, 0xdc, 0x03, 0xf8, 0x10, 0x50, 0xa6, 0x50, 0x7f, 0xdc, 0xb8, 0x3f, 0x87, 0x88, 0xad, 0xb5, 0x66, 0x64, 0xe5, 0xe3, 0x9a, 0xcd, 0xdd, 0xa0, 0xaf, 0xed, 0xa7, 0x0c, 0x55, 0x81, 0x97, 0x73, 0xb5, 0xdf, 0x40, 0x74, 0x05, 0x37, 0x9e, 0x62, 0x5a, 0x19, 0x95, 0xea, 0xbe, 0x37, 0x9a, 0xf6, 0x83, 0x6d, 0xb1, 0xd2, 0xd7, 0xfe, 0x97, 0x8d, 0x98, 0x21, 0x40, 0xa3, 0x69, 0xbc, 0x84, 0xd8, 0x05, 0x6f, 0x15, 0x67, 0xd3, 0xd4, 0xb4, 0x5c, 0xbb, 0x05, 0xa4, 0x3f, 0x39, 0x5f, 0x5f, 0xf2, 0xaf, 0x86, 0x89, 0xdc, 0x00, 0xa9, 0x22, 0x48, 0x5a, 0x08, 0xff, 0x07, 0x53, 0xb3, 0x7b, 0x5d, 0x38, 0x94, 0x6a, 0x1b, 0xa1, 0xaf, 0x4e, 0x08, 0x49, 0xa9, 0xce, 0x85, 0x1d, 0x87, 0x63, 0x71, 0x93, 0xb9, 0x55, 0x4b, 0x3d, 0x57, 0xe6, 0x96, 0x9e, 0xaa, 0xcc, 0x82, 0x3c, 0xee, 0xe5, 0xc8, 0xf6, 0x56, 0x27, 0xd6, 0x98, 0x51, 0xd6, 0x2c, 0xad, 0x0c, 0xf9, 0x06, 0x95, 0x38, 0x0e, 0x3b, 0xd7, 0x0d, 0xfd, 0x65, 0xb8, 0x8f, 0x4b, 0x42, 0x0c, 0x10, 0x90, 0x5a, 0x4c, 0xf6, 0x2b, 0xe2, 0xe9, 0xbe, 0x34, 0xe1, 0xe0, 0x41, 0xb2, 0x91, 0x8f, 0x36, 0x0e, 0x08, 0xc6, 0xf9, 0xc8, 0x17, 0x22, 0x8b, 0x69, 0x73, 0x96, 0xd9, 0xb9, 0x12, 0x4b, 0x41, 0x31, 0xd8, 0xaa, 0x52, 0xb3, 0x73, 0xb7, 0xd3, 0x79, 0x84, 0xa0, 0x07, 0x4c, 0xff, 0x95, 0x30, 0xf6, 0xd4, 0xdb, 0x52, 0xf9, 0xcf, 0x1c, 0x39, 0x81, 0xbc, 0x02, 0xbd, 0x98, 0xd0, 0x04, 0x45, 0x99, 0x44, 0x7f, 0x8a, 0xe7, 0x43, 0x08, 0x9e, 0xde, 0x06, 0x01, 0x2c, 0x0a, 0x3e, 0x6a, 0x01, 0x97, 0xb2, 0xfa, 0xcb, 0x09, 0x29, 0x6e, 0x21, 0x2e, 0x8a, 0x22, 0xc4, 0x50, 0x42, 0xde, 0x25, 0xae, 0xe6, 0xf2, 0x27, 0x2e, 0x19, 0x85, 0x25, 0x4c, 0xb1, 0x2a, 0x37, 0x56, 0x15, 0xb4, 0xb1, 0xdb, 0xe9, 0x4c, 0xed, 0x61, 0xee, 0xc0, 0x4b, 0x56, 0x23, 0x1e, 0x75, 0x49, 0x31, 0x82, 0xe8, 0x5a, 0x05, 0x2c, 0xb0, 0xef, 0xbf, 0xd5, 0x72, 0xa9, 0xcb, 0x43, 0xb0, 0x97, 0x4d, 0x1c, 0x49, 0xa9, 0xc3, 0xf8, 0x3f, 0x67, 0xe6, 0xb9, 0xbd, 0xe2, 0xd0, 0x1f, 0x59, 0xeb, 0x64, 0x97, 0x96, 0x84, 0xeb, 0x54, 0xad, 0x94, 0xfb, 0xa1, 0x8d, 0xdf, 0x9d, 0x76, 0x20, 0x34, 0xae, 0x49, 0xd0, 0xe8, 0x86, 0x26, 0x4a, 0x84, 0xd8, 0x02, 0x81, 0xbb, 0xd9, 0x4d, 0xf6, 0x9f, 0xa5, 0xc6, 0x38, 0x14, 0xde, 0x93, 0xa6, 0x84, 0x96, 0x91, 0x7c, 0xd4, 0x6f, 0xe9, 0x0e, 0x97, 0x00, 0xe4, 0x4e, 0x82, 0x7b, 0x00, 0x94, 0x20, 0x8d, 0x43, 0x9f, 0xc7, 0x86, 0xcf, 0xd7, 0xcb, 0xba, 0xb7, 0xd4, 0xf1, 0x27, 0x11, 0x24, 0x27, 0x58, 0x4c, 0x49, 0x72, 0x89, 0xc4, 0x02, 0x27, 0x0b, 0x94, 0xcc, 0x5e, 0xea, 0xab, 0xa7, 0xa4, 0xce, 0x23, 0x1d, 0xf0, 0x1f, 0xce, 0x81, 0xd9, 0x6c, 0x11, 0x75, 0x05, 0x0e, 0xf5, 0xae, 0xe5, 0x08, 0x7b, 0xfc, 0x9f, 0x32, 0x30, 0x84, 0x4c, 0x97, 0x02, 0x50, 0x64, 0x1b, 0x52, 0x0b, 0x76, 0x61, 0x4a, 0x05, 0x1d, 0xeb, 0x71, 0x7e, 0x2f, 0x83, 0x7c, 0x20, 0x37, 0xda, 0x68, 0xcd, 0x26, 0x70, 0xc5, 0x9b, 0x45, 0xb3, 0x55, 0x1d, 0x6e, 0x6b, 0xd5, 0xe5, 0x7c, 0x55, 0x1b, 0x46, 0x00, 0x0e, 0x61, 0x5f, 0x36, 0x33, 0xe1, 0x54, 0x37, 0xc7, 0xa2, 0xdf, 0x6f, 0xd5, 0x91, 0x08, 0x52, 0x56, 0xd3, 0x30, 0x4b, 0x54, 0x5a, 0x54, 0xf5, 0x50, 0xb6, 0x90, 0x8e, 0xe2, 0x2e, 0xe2, 0xa9, 0x9f, 0x10, 0x31, 0x22, 0x3f, 0x45, 0x8e, 0x57, 0x00, 0x28, 0xb9, 0x95, 0x45, 0x99, 0xe7, 0xd1, 0x83, 0x4c, 0xc2, 0x99, 0x5d, 0x67, 0xb2, 0x4a, 0x0e, 0x4d, 0x5b, 0x82, 0x08, 0xb4, 0x67, 0xd8, 0xda, 0xfe, 0x85, 0xcb, 0x57, 0xc6, 0xb1, 0xf9, 0xf5, 0xb9, 0xb7, 0x92, 0x73, 0xa7, 0xf2, 0x0b, 0xbf, 0xd9, 0x5a, 0x17, 0x16, 0xa6, 0xbe, 0xd3, 0x6d, 0x41, 0x4d, 0x40, 0x10, 0xd5, 0x5b, 0xf7, 0x89, 0xd4, 0x62, 0x18, 0xc3, 0x8c, 0x47, 0x84, 0x6f, 0xfb, 0xdf, 0x4c, 0xa7, 0xe4, 0xb2, 0x69, 0xd1, 0x22, 0xff, 0xad, 0xc7, 0x3d, 0x00, 0xf9, 0x35, 0x3b, 0x6e, 0xb1, 0x42, 0xb8, 0x48, 0x6d, 0x72, 0x39, 0xd1, 0xf1, 0xca, 0xbe, 0xd8, 0x60, 0x36, 0x96, 0x3b, 0xac, 0x29, 0x77, 0xae, 0x51, 0x83, 0xce, 0xb9, 0x43, 0xb7, 0x54, 0x00, 0x24, 0x2d, 0xe2, 0xc7, 0xbb, 0xe5, 0x86, 0xb5, 0xa2, 0x5e, 0xd6, 0xd8, 0x3e, 0xb6, 0x84, 0xea, 0xf4, 0x12, 0x33, 0xd3, 0x9a, 0x40, 0x89, 0x6e, 0x2c, 0x9b, 0x86, 0x90, 0xc1, 0x2f, 0x14, 0x47, 0xbd, 0x1e, 0xdf, 0x5f, 0x47, 0x43, 0x66, 0x2b, 0xfe, 0x14, 0x53, 0x82, 0xe7, 0xcd, 0x07, 0x07, 0xaa, 0xcb, 0x7a, 0xad, 0xff, 0x35, 0x42, 0x7b, 0x63, 0xe2, 0xf1, 0x8d, 0x0f, 0x77, 0xa4, 0x5c, 0x2a, 0xd0, 0xd9, 0x3f, 0x3e, 0xa2, 0x81, 0x31, 0xe9, 0x5e, 0x57, 0xd4, 0xd5, 0x58, 0x6f, 0xb6, 0xe9, 0x28, 0x12, 0xd3, 0xc1, 0x50, 0xc9, 0x5c, 0x5c, 0x20, 0xb8, 0xb7, 0x15, 0xd7, 0x2d, 0xc7, 0xd5, 0x0b, 0x79, 0x6d, 0x86, 0x4b, 0xff, 0x4f, 0xcb, 0x02, 0x8a, 0xd8, 0xee, 0x9e, 0xe4, 0x80, 0x1a, 0xf2, 0xa4, 0x4d, 0xca, 0xd9, 0x47, 0x99, 0x81, 0x1d, 0x82, 0x17, 0xbc, 0x97, 0xd7, 0x11, 0x24, 0x97, 0x67, 0xf3, 0x09, 0x86, 0x07, 0x0d, 0x0c, 0xc9, 0x95, 0x95, 0x1b, 0xe9, 0x8d, 0xeb, 0xa3, 0xf1, 0xd7, 0x21, 0x00, 0x18, 0xe3, 0xbb, 0x39, 0xa0, 0xf8, 0xb3, 0xea, 0xfe, 0xc9, 0xc1, 0x81, 0x3b, 0x4a, 0xd9, 0xad, 0x9a, 0xc1, 0xf4, 0x14, 0x7b, 0x20, 0x13, 0x45, 0x7f, 0x92, 0x81, 0xed, 0xed, 0x54, 0x59, 0x4d, 0x55, 0xc6, 0x49, 0xeb, 0x73, 0xc2, 0x95, 0x88, 0x55, 0x2c, 0x5f, 0x53, 0xc0, 0xca, 0x25, 0x5c, 0xd1, 0x56, 0x8b, 0x4b, 0xe0, 0xd2, 0x5b, 0x52, 0xa9, 0x1c, 0xca, 0x60, 0xae, 0xc2, 0xfd, 0x98, 0xd7, 0x17, 0xcb, 0x01, 0x5c, 0x87, 0xc5, 0x7f, 0xe4, 0x27, 0x73, 0x02, 0xef, 0x90, 0xe1, 0xfd, 0x71, 0xee, 0x5a, 0x1a, 0xbf, 0x54, 0x74, 0x2c, 0xaf, 0x53, 0x4d, 0x64, 0xfb, 0xca, 0x13, 0xc9, 0xe7, 0xff, 0xca, 0xe2, 0x24, 0xef, 0x49, 0xb5, 0xf3, 0xe3, 0x86, 0xf6, 0x8e, 0x44, 0x14, 0x78, 0xc3, 0xb0, 0xea, 0xe7, 0xe2, 0x4d, 0x66, 0xb9, 0xd9, 0x5e, 0x92, 0x62, 0x9e, 0x14, 0xa5, 0xc7, 0xcd, 0xa6, 0xcd, 0xf6, 0x93, 0xa4, 0x2b, 0x14, 0xca, 0x88, 0x1f, 0x96, 0x65, 0x8e, 0xc7, 0xb5, 0x0f, 0xc5, 0xc2, 0x1b, 0x0f, 0x66, 0x3a, 0xe3, 0x6f, 0x65, 0x21, 0xc0, 0x5d, 0x47, 0xba, 0x7c, 0xd1, 0x33, 0x5c, 0xa5, 0x70, 0x4b, 0x73, 0x83, 0xb1, 0x3d, 0xc7, 0x4c, 0x3e, 0x14, 0x01, 0x9b, 0x9d, 0x55, 0x6b, 0x1f, 0x0f, 0x47, 0xf7, 0x90, 0xb8, 0x92, 0x83, 0xe8, 0x01, 0x0b, 0x5b, 0xcf, 0x3b, 0xcf, 0xff, 0x57, 0x85, 0x8f, 0x27, 0xe9, 0xef, 0x2a, 0x05, 0x80, 0xdf, 0x81, 0xca, 0x14, 0xb4, 0x87, 0x6b, 0x5a, 0xaa, 0x97, 0xa5, 0xaa, 0xfd, 0x0b, 0x3f, 0x40, 0x52, 0x0a, 0x8f, 0xa8, 0x52, 0xa1, 0x3f, 0x74, 0x98, 0x15, 0x51, 0x30, 0xcd, 0x78, 0x61, 0x98, 0x11, 0x7b, 0x2a, 0x08, 0x9d, 0x83, 0x4c, 0x33, 0xa7, 0xff, 0x4d, 0x18, 0x86, 0xf8, 0xdd, 0x32, 0x17, 0xe9, 0x5e, 0xef, 0x5f, 0xd2, 0xa3, 0x64, 0x72, 0x88, 0xf8, 0x3f, 0x93, 0x4f, 0x63, 0xfd, 0x9c, 0xaa, 0x2a, 0x5d, 0xa1, 0x72, 0x95, 0x14, 0xd0, 0x26, 0xf5, 0xc2, 0x9b, 0x82, 0xe5, 0x25, 0x1a, 0x53, 0xd0, 0x8c, 0xaa, 0x89, 0xb4, 0x8f, 0xdb, 0x8e, 0x25, 0xfe, 0x89, 0xd6, 0x94, 0x17, 0x48, 0xb8, 0xd1, 0xfc, 0x06, 0x7c, 0xcf, 0x64, 0xeb, 0xb5, 0xa8, 0x90, 0x84, 0xd1, 0xe0, 0x81, 0x21, 0xee, 0xee, 0x68, 0x7b, 0xef, 0xf8, 0x5e, 0x9a, 0xcf, 0xdf, 0x55, 0xf6, 0x36, 0x7b, 0x4e, 0xdd, 0x4a, 0x28, 0xcd, 0x14, 0xc8, 0x81, 0x8a, 0xc1, 0x53, 0x6b, 0x6a, 0x88, 0x0c, 0x56, 0xad, 0xf5, 0x62, 0xbf, 0x69, 0x1a, 0x2c, 0xf9, 0x37, 0x79, 0xf5, 0x2e, 0x2c, 0x24, 0x96, 0xa1, 0x0b, 0x22, 0x0b, 0x35, 0xb8, 0x15, 0x7f, 0x33, 0xf0, 0x1a, 0xa9, 0x48, 0x38, 0xf1, 0x5b, 0xcd, 0x13, 0x5e, 0x58, 0x4b, 0x78, 0xce, 0x67, 0x3f, 0x83, 0x3e, 0xa5, 0x1a, 0x6b, 0x59, 0x1f, 0x8c, 0xb4, 0xe0, 0xa0, 0x02, 0xa6, 0x4f, 0xc8, 0x6e, 0xfd, 0xbe, 0x5e, 0x46, 0xe2, 0x05, 0xe7, 0xcf, 0x1a, 0x23, 0x78, 0x9b, 0x7e, 0xe1, 0xc8, 0x50, 0xab, 0xb2, 0x89, 0xac, 0xfa, 0xde, 0xf9, 0xc6, 0xb3, 0xdf, 0xb4, 0x97, 0x7d, 0x0b, 0xcc, 0xb8, 0x19, 0x74, 0x1b, 0x6d, 0x50, 0x0d, 0xd8, 0xe3, 0x2a, 0x0e, 0x69, 0xb6, 0x61, 0x99, 0x78, 0xb6, 0x15, 0x9d, 0x49, 0xeb, 0xc1, 0xfb, 0x4b, 0xd7, 0x6e, 0xe7, 0xed, 0xfa, 0x27, 0x91, 0xb2, 0x9c, 0xac, 0x05, 0x88, 0xc6, 0x6b, 0x50, 0x56, 0x92, 0xab, 0xe5, 0xd4, 0xa4, 0x0b, 0x3f, 0x9f, 0xf9, 0x2b, 0xc7, 0x8d, 0xe0, 0xa9, 0xf7, 0x3d, 0x45, 0x4f, 0xc0, 0xf3, 0x35, 0x8a, 0x29, 0xa3, 0x9f, 0x1e, 0x3a, 0x4c, 0x58, 0x19, 0x18, 0x88, 0x62, 0x05, 0x71, 0x60, 0x6e, 0x62, 0x1a, 0x64, 0x9f, 0x54, 0xf7, 0xfc, 0x91, 0x98, 0x1c, 0xf9, 0x9a, 0xbc, 0x31, 0x6f, 0x50, 0x90, 0x1b, 0xc7, 0x4b, 0xd8, 0xd9, 0x10, 0x2c, 0x43, 0xab, 0x96, 0xdd, 0xa1, 0x7a, 0xb6, 0x1b, 0x50, 0x74, 0xf0, 0x32, 0xf7, 0xf7, 0x3e, 0x08, 0x77, 0xb0, 0xa4, 0x5d, 0x1f, 0x04, 0x09, 0x51, 0x20, 0xae, 0x45, 0x27, 0x40, 0xaa, 0x7b, 0x48, 0xd2, 0x52, 0xa9, 0x8b, 0xe5, 0xc8, 0x7d, 0xb3, 0xbc, 0x93, 0x6b, 0x3a, 0x7e, 0x8d, 0xfc, 0x4d, 0x2f, 0xfc, 0x69, 0x17, 0xdf, 0xff, 0x68, 0x42, 0x21, 0x2c, 0x46, 0xbb, 0xbf, 0x77, 0x36, 0xb6, 0xac, 0x55, 0xe9, 0xf3, 0x3a, 0x22, 0x5e, 0x3f, 0x8d, 0xc0, 0xfc, 0x3d, 0x50, 0x82, 0xde, 0x66, 0xa6, 0x48, 0x6e, 0x4f, 0x64, 0xeb, 0x35, 0x2a, 0x7d, 0xdb, 0xf1, 0x90, 0xbe, 0x06, 0xe8, 0x7e, 0xbb, 0xfc, 0x7d, 0x9d, 0x09, 0x51, 0x01, 0xc6, 0xad, 0x43, 0xcb, 0xc5, 0xd5, 0x9d, 0x8b, 0x5d, 0xc6, 0xdc, 0xdb, 0x8d, 0x16, 0x8f, 0x17, 0x12, 0x1b, 0x04, 0x6f, 0x2d, 0xa3, 0x20, 0x3a, 0xa6, 0xe5, 0x8f, 0x8d, 0x11, 0xb8, 0x1e, 0x0d, 0x50, 0x03, 0x64, 0x01, 0x59, 0x75, 0xa8, 0xac, 0x3a, 0x76, 0xff, 0xd9, 0x5a, 0x5d, 0xb5, 0xb7, 0x01, 0xe3, 0xee, 0xe7, 0x1a, 0xd7, 0x8d, 0xd4, 0x38, 0x14, 0x55, 0x43, 0xd8, 0xb1, 0x4e, 0x2b, 0xe6, 0x77, 0x6b, 0xc6, 0x82, 0x98, 0x69, 0xe8, 0x03, 0x9d, 0xfa, 0x90, 0x3c, 0xa1, 0x23, 0xbc, 0xff, 0xbd, 0xe3, 0x82, 0xe0, 0xc3, 0x15, 0x5d, 0x3b, 0x2f, 0x97, 0xc5, 0x79, 0x5a, 0xac, 0x02, 0x8e, 0xf1, 0x9f, 0x41, 0xc6, 0xa6, 0xaa, 0xe8, 0xc2, 0x25, 0x15, 0x27, 0xbd, 0x4a, 0xa2, 0xcf, 0x15, 0x91, 0x29, 0x68, 0x06, 0xce, 0x80, 0x7e, 0xb8, 0x1e, 0x9d, 0x3b, 0x7c, 0x1d, 0xff, 0x3b, 0x52, 0x59, 0x4a, 0x9b, 0xb0, 0x07, 0x31, 0x53, 0x7e, 0xf5, 0x98, 0xc6, 0x65, 0xc0, 0xfa, 0x98, 0x49, 0x47, 0x09, 0xc0, 0x14, 0x5f, 0x95, 0xde, 0xb6, 0xc9, 0xaf, 0xce, 0x6a, 0x61, 0x0e, 0x7d, 0x3a, 0x97, 0xb2, 0xfb, 0xc5, 0x23, 0xc6, 0xd2, 0x40, 0xf5, 0xcb, 0x97, 0xbb, 0x6b, 0xf3, 0xbe, 0xa5, 0xc7, 0xcb, 0xb2, 0x93, 0xe0, 0x1d, 0x26, 0x3d, 0x18, 0x15, 0xa5, 0xc9, 0x8d, 0xa2, 0x71, 0x4d, 0x94, 0x1f, 0x8a, 0x8f, 0x63, 0x33, 0x0d, 0x0f, 0x0d, 0xf6, 0xbf, 0x47, 0xb4, 0x55, 0xea, 0x31, 0xf9, 0xb7, 0x68, 0x0a, 0xb8, 0xe1, 0xfd, 0x56, 0xf3, 0x16, 0xea, 0x24, 0x0b, 0x83, 0xbe, 0x93, 0x36, 0xdb, 0x70, 0x95, 0x2d, 0x3f, 0xab, 0xf3, 0x25, 0x60, 0x69, 0x91, 0x01, 0xe7, 0xc3, 0xf4, 0xc6, 0x15, 0x07, 0x01, 0x4f, 0xa6, 0x0c, 0x07, 0x42, 0xfc, 0xc2, 0x00, 0x42, 0x79, 0x0d, 0x14, 0x66, 0x2d, 0xd4, 0x5f, 0xea, 0xb1, 0x55, 0xf4, 0x25, 0x52, 0xbb, 0x22, 0xbb, 0x72, 0xf2, 0xf6, 0x14, 0x2c, 0xba, 0x00, 0x0d, 0x37, 0xfa, 0x5a, 0xed, 0x0d, 0x57, 0xe7, 0x9a, 0x4c, 0x06, 0xd9, 0x0d, 0x5c, 0xde, 0x76, 0x03, 0x52, 0xb2, 0x1b, 0xf5, 0x14, 0xdd, 0x81, 0x4b, 0xbe, 0x1e, 0x3f, 0xcd, 0x45, 0xa7, 0x90, 0x5a, 0x5b, 0x70, 0x57, 0xdc, 0x92, 0xd1, 0x60, 0x7b, 0xc3, 0x50, 0xe9, 0x11, 0xb1, 0xb8, 0x61, 0xde, 0xea, 0x6b, 0x6f, 0x7e, 0xee, 0xf8, 0x36, 0x17, 0x93, 0xf0, 0xd8, 0xd7, 0xa8, 0xf6, 0x38, 0x9e, 0xd9, 0x16, 0x05, 0xf7, 0xd2, 0x58, 0xf4, 0x4d, 0xa8, 0x94, 0x4c, 0x5c, 0x74, 0x87, 0xa8, 0xe5, 0x41, 0x27, 0xf8, 0xa6, 0x28, 0x34, 0xca, 0x89, 0xb9, 0x10, 0xc8, 0x1c, 0x9d, 0xd0, 0x81, 0x41, 0x7a, 0x93, 0x6c, 0x27, 0x17, 0x12, 0x29, 0x78, 0xc1, 0x79, 0x0b, 0xd4, 0xed, 0x76, 0xd4, 0x7f, 0x1e, 0x8f, 0xbf, 0x56, 0x09, 0xb8, 0xc4, 0x08, 0xf7, 0x25, 0x17, 0x82, 0x6c, 0x5d, 0xf2, 0xab, 0x06, 0x90, 0x94, 0x52, 0xa7, 0x2a, 0x8a, 0x64, 0xd7, 0xa8, 0x2d, 0x63, 0x63, 0xaa, 0x6c, 0x13, 0x4a, 0x4a, 0xcb, 0x77, 0xda, 0xad, 0xac, 0xfb, 0x17, 0xd7, 0xcd, 0xf3, 0x5c, 0xc4, 0x13, 0x44, 0x45, 0xb4, 0x86, 0x61, 0xcb, 0xc6, 0x9c, 0x7a, 0xb1, 0xc8, 0xba, 0xf0, 0x20, 0x4e, 0xf8, 0x0b, 0x8e, 0x01, 0x25, 0xef, 0xe4, 0x3a, 0x0b, 0xcc, 0xdf, 0xd0, 0xf3, 0x56, 0xb6, 0x2e, 0x6c, 0x75, 0xfe, 0xa8, 0x49, 0x3d, 0xcb, 0x0f, 0xe9, 0x20, 0x19, 0x82, 0xbb, 0x62, 0x6a, 0x88, 0x00, 0xce, 0xb0, 0x5c, 0xd3, 0xa8, 0x6c, 0x88, 0x67, 0xe2, 0x18, 0xb5, 0x91, 0x92, 0xc3, 0xc2, 0x86, 0xa4, 0xfb, 0x13, 0xe5, 0xcc, 0xef, 0x2c, 0xf8, 0xbf, 0xd5, 0x7e, 0x37, 0xa3, 0x8a, 0x80, 0x0d, 0xc4, 0x78, 0x02, 0xdf, 0x88, 0xbd, 0xbf, 0x4b, 0xa5, 0x8a, 0x31, 0xad, 0x91, 0xc8, 0xa9, 0xe8, 0x3b, 0x02, 0x9e, 0x63, 0xf8, 0x7f, 0x45, 0x51, 0xc0, 0xae, 0x63, 0x36, 0x9a, 0xc8, 0x60, 0xa6 ],
+const [ 0xec, 0x2f, 0x78, 0x52, 0xd0, 0xa6, 0xe6, 0xd1, 0x3f, 0xd4, 0x22, 0x02, 0x33, 0xa0, 0x0d, 0x9c, 0x9c, 0x06, 0x3d, 0x24, 0xf6, 0x5e, 0x3b, 0x56, 0x20, 0xe1, 0xef, 0xc6, 0x6c, 0x69, 0x58, 0xc7, 0xf3, 0x78, 0x81, 0x8c, 0x2b, 0x7c, 0xb0, 0x8d, 0xbb, 0x51, 0xe0, 0x2c, 0x8d, 0x08, 0x71, 0x99, 0x25, 0xe7, 0x1f, 0xf3, 0x32, 0xb0, 0x31, 0xb0, 0x63, 0x27, 0xf2, 0x3e, 0x7c, 0xce, 0x65, 0xea, 0xa9, 0xf3, 0x35, 0x02, 0x12, 0xec, 0xeb, 0x36, 0xaf, 0xa2, 0x63, 0x44, 0x5e, 0x4c, 0x81, 0xd5, 0x33, 0x7d, 0x20, 0xa1, 0x0f, 0x61, 0x4b, 0xda, 0x74, 0x43, 0xb0, 0xc8, 0x97, 0x53, 0x51, 0xb1, 0xb7, 0xa7, 0x7d, 0xfb, 0xae, 0x7f, 0xff, 0x94, 0xc6, 0xcd, 0x95, 0x92, 0xcd, 0xf5, 0xa4, 0x17, 0x6c, 0xd1, 0x29, 0x78, 0xb4, 0xf8, 0xf3, 0x9e, 0xfa, 0x40, 0x10, 0xac, 0xe5, 0x81, 0x85, 0xe1, 0xc5, 0x9c, 0x42, 0xc1, 0x26, 0xbc, 0x54, 0x6f, 0xa6, 0xdc, 0x5d, 0x5e, 0x03, 0x8a, 0x41, 0x28, 0x78, 0xea, 0x23, 0xbe, 0x4a, 0xfd, 0x90, 0xc2, 0x9e, 0x23, 0xf9, 0x31, 0x8d, 0xdf, 0x67, 0x45, 0x7a, 0xdb, 0x6a, 0x9a, 0xa3, 0x2c, 0x52, 0x8f, 0xf7, 0xd6, 0xa2, 0xef, 0x28, 0x93, 0xc2, 0xd1, 0x00, 0xd0, 0xf4, 0xbc, 0xf8, 0xf9, 0x89, 0x0f, 0x07, 0xf6, 0x55, 0xa0, 0xb8, 0xf6, 0x60, 0xa4, 0x7f, 0x6b, 0xde, 0xcf, 0x4d, 0x55, 0x62, 0xbc, 0x62, 0xc4, 0x4e, 0x8e, 0x63, 0x98, 0x8e, 0xd8, 0xac, 0x8c, 0x86, 0xba, 0xe7, 0x73, 0x48, 0x4d, 0xdd, 0xc1, 0x0b, 0x41, 0x8d, 0x4c, 0xd9, 0xc5, 0x7b, 0x54, 0x87, 0xa7, 0x4b, 0xc1, 0xea, 0xbd, 0x8e, 0xad, 0x48, 0x83, 0xdc, 0x22, 0x0d, 0x05, 0x23, 0x25, 0xbf, 0x00, 0x3e, 0xf3, 0x34, 0x44, 0xca, 0x8a, 0x03, 0x5c, 0x35, 0x6b, 0x38, 0x71, 0x17, 0x9f, 0x4c, 0x6c, 0xc6, 0xf8, 0x54, 0x5b, 0x25, 0x99, 0x78, 0x16, 0xbc, 0xb8, 0xa7, 0x22, 0x0e, 0xa3, 0x89, 0xd5, 0x26, 0x01, 0xb5, 0xbb, 0x74, 0x5b, 0x25, 0x39, 0xd7, 0xdb, 0xe6, 0x70, 0xfb, 0x53, 0x14, 0x64, 0xe5, 0x80, 0x06, 0x5e, 0xcc, 0x91, 0xc6, 0x8f, 0x2b, 0xe3, 0xc4, 0xf5, 0x14, 0x0f, 0xcb, 0x83, 0xc7, 0x26, 0x33, 0x7c, 0x83, 0x3b, 0x59, 0x20, 0x9c, 0x22, 0x4c, 0x8a, 0xce, 0x78, 0xc9, 0xd9, 0xd1, 0xe3, 0x6a, 0x8e, 0x2d, 0x9b, 0x1a, 0x35, 0x50, 0x2a, 0xcc, 0x48, 0xde, 0x70, 0x6d, 0x50, 0x48, 0xe9, 0x16, 0x4d, 0xa0, 0x33, 0x87, 0x58, 0xac, 0xca, 0xd1, 0x87, 0x39, 0x17, 0x52, 0x11, 0xb1, 0xa9, 0xe6, 0xb2, 0xf0, 0xc2, 0x5c, 0x51, 0x54, 0x15, 0x27, 0xe1, 0x13, 0xce, 0x56, 0x85, 0xd2, 0xd3, 0xc7, 0xf7, 0x73, 0x49, 0x97, 0x2a, 0x2e, 0x5b, 0xdc, 0x2e, 0xe3, 0x36, 0x97, 0x55, 0xae, 0x58, 0xe4, 0x94, 0xbd, 0x0b, 0x74, 0x2b, 0x5e, 0x2c, 0x3d, 0x88, 0x5c, 0x31, 0x70, 0x69, 0x8c, 0x6b, 0xac, 0x42, 0xa3, 0x87, 0x71, 0xde, 0x4a, 0x5b, 0xd7, 0x48, 0x75, 0xe0, 0x80, 0xec, 0xf0, 0x7a, 0xcb, 0xfa, 0x3a, 0x80, 0x4a, 0x0b, 0x97, 0xf8, 0x77, 0x07, 0x61, 0xa2, 0xa2, 0x46, 0x9f, 0x39, 0x2e, 0xf5, 0xd9, 0xf5, 0xfd, 0xbc, 0x2a, 0x54, 0x29, 0x9d, 0x96, 0x1a, 0xf5, 0x20, 0x9e, 0x96, 0x03, 0xad, 0x12, 0x28, 0xc7, 0x39, 0x27, 0x00, 0x3b, 0x25, 0xc9, 0x28, 0xd4, 0x62, 0x32, 0xc5, 0xb5, 0xda, 0xbc, 0x9a, 0x24, 0x0b, 0xf3, 0xcd, 0x3a, 0xf5, 0xef, 0xee, 0xde, 0x37, 0xe1, 0x35, 0xf4, 0x75, 0xeb, 0x0b, 0xd1, 0xfc, 0x35, 0xcc, 0xf2, 0xa9, 0x3d, 0xcc, 0xee, 0x07, 0x6e, 0x98, 0xaa, 0xb7, 0xf5, 0x7e, 0xcc, 0x15, 0xd0, 0x4f, 0x72, 0x18, 0x27, 0x63, 0x23, 0x7a, 0xe0, 0xde, 0x06, 0x19, 0x6e, 0x32, 0x51, 0x9e, 0xe9, 0xe5, 0x05, 0x5c, 0x64, 0x95, 0xd9, 0x7b, 0x7b, 0x39, 0x73, 0x55, 0x2b, 0xa9, 0xde, 0x20, 0xe7, 0x61, 0x39, 0xce, 0xe7, 0x81, 0xac, 0x31, 0xc4, 0x19, 0xa1, 0x63, 0x42, 0xa4, 0x30, 0x65, 0x6c, 0xd2, 0xda, 0x06, 0xe7, 0x8b, 0x7b, 0x06, 0x80, 0x30, 0x7a, 0x7c, 0x07, 0x24, 0x43, 0x75, 0x60, 0x8b, 0xf7, 0xde, 0xd7, 0x51, 0x61, 0xa4, 0xb4, 0x6e, 0x2d, 0x19, 0x0f, 0x69, 0x54, 0x9a, 0xe6, 0x1b, 0xdb, 0x6f, 0x6d, 0xb6, 0xbd, 0xf2, 0xa5, 0x06, 0x26, 0xf3, 0x30, 0xf6, 0xe1, 0x5c, 0x64, 0x55, 0x14, 0x11, 0x9e, 0xda, 0x2b, 0x1a, 0xd9, 0x66, 0x12, 0x04, 0x7f, 0x8a, 0xa7, 0x84, 0x7e, 0x49, 0x6f, 0x5e, 0x9f, 0x1f, 0x87, 0x85, 0x14, 0x42, 0xde, 0x84, 0x4f, 0x27, 0xa2, 0x1c, 0x1b, 0x48, 0xf8, 0x2f, 0xe5, 0x25, 0xf0, 0xdd, 0x5a, 0x88, 0xb8, 0xec, 0x38, 0x0e, 0x10, 0x6d, 0x5d, 0xe3, 0xfd, 0x9c, 0x25, 0xcd, 0xc2, 0x09, 0xf2, 0x6c, 0x0c, 0xf5, 0x0c, 0xc0, 0x6d, 0xff, 0xac, 0xeb, 0x0b, 0x00, 0x53, 0x38, 0x9a, 0x33, 0x60, 0x5d, 0x87, 0x99, 0xe2, 0xfd, 0x76, 0x9b, 0xab, 0x71, 0xef, 0xf2, 0xa6, 0xc8, 0x54, 0xc4, 0x6a, 0x0c, 0x17, 0x0f, 0x0e, 0xc7, 0x29, 0x4b, 0x3f, 0xc6, 0xb6, 0x4b, 0x91, 0x1d, 0x0f, 0x65, 0x13, 0x6c, 0xe8, 0xd2, 0x26, 0x60, 0xc3, 0x57, 0x8f, 0x7c, 0xac, 0x25, 0xca, 0x19, 0x27, 0xff, 0xa1, 0xab, 0x67, 0x9a, 0xfe, 0x47, 0xc0, 0x49, 0xfe, 0x62, 0x5f, 0xda, 0x46, 0xdc, 0x39, 0xba, 0x9a, 0x3d, 0x41, 0x60, 0xac, 0x3e, 0xde, 0xe9, 0x31, 0x8b, 0x9c, 0x00, 0x3a, 0xc7, 0x22, 0x01, 0xc2, 0xd0, 0x64, 0x5e, 0x83, 0x45, 0x19, 0x41, 0x0f, 0x46, 0x70, 0x73, 0x1b, 0x7b, 0xfe, 0x7c, 0x1e, 0x58, 0xfb, 0x0c, 0x1b, 0x9f, 0xaf, 0x99, 0xba, 0x26, 0x27, 0x4a, 0x9e, 0xda, 0x2c, 0x14, 0xf3, 0x04, 0x76, 0x23, 0x46, 0xcb, 0x1c, 0x7b, 0x9a, 0xfa, 0x4f, 0xdf, 0xb8, 0x04, 0x48, 0xf1, 0xc6, 0x46, 0x7f, 0x9c, 0x1b, 0x8b, 0x1e, 0xaf, 0x52, 0xd5, 0xb5, 0xca, 0x9d, 0x5b, 0x2f, 0x7e, 0x5c, 0xce, 0x05, 0xb0, 0xef, 0xe0, 0xb1, 0x3e, 0xc8, 0x07, 0x66, 0xe6, 0xc4, 0x7e, 0xfe, 0x63, 0xbb, 0x8e, 0x34, 0xd8, 0x56, 0x0b, 0x13, 0x72, 0x20, 0x21, 0xae, 0x49, 0xe0, 0x51, 0x12, 0x88, 0x27, 0xb6, 0x79, 0xce, 0x25, 0x8d, 0xc0, 0xd4, 0xc0, 0xf4, 0x1b, 0x4f, 0xe8, 0xf2, 0x08, 0x18, 0x24, 0xb8, 0x81, 0x8a, 0x71, 0x26, 0x76, 0x2b, 0x4d, 0x91, 0x7a, 0x8f, 0x0f, 0xc4, 0xbd, 0x7a, 0x79, 0x44, 0x3a, 0x45, 0x90, 0xd9, 0x31, 0x83, 0xab, 0x49, 0xd8, 0xe4, 0xcb, 0x67, 0x4e, 0x59, 0x2a, 0x4c, 0xd0, 0x78, 0x17, 0xe5, 0x2f, 0x23, 0x00, 0xae, 0x81, 0x64, 0xd1, 0xbc, 0x17, 0x9c, 0x7d, 0x01, 0xb0, 0xdd, 0xd9, 0xcc, 0xec, 0x94, 0xb1, 0x8f, 0x04, 0x6b, 0x16, 0xe5, 0xb7, 0x6d, 0xf5, 0xd3, 0x88, 0x6b, 0xee, 0x4e, 0x26, 0x9f, 0x62, 0xfe, 0x2c, 0x90, 0xce, 0x42, 0x0a, 0x35, 0x58, 0x74, 0x43, 0x5d, 0xa8, 0x6e, 0xda, 0x4f, 0xf9, 0x4d, 0x06, 0xad, 0x70, 0x75, 0x2d, 0x9e, 0xac, 0xd5, 0x10, 0x2b, 0x9e, 0x6c, 0x44, 0xea, 0x9b, 0x0b, 0xe1, 0xda, 0xaf, 0x5d, 0x7e, 0x8f, 0x35, 0x26, 0x5c, 0x8f, 0xa4, 0xc8, 0xe1, 0xfb, 0xac, 0x0b, 0x48, 0x72, 0x82, 0x1d, 0x98, 0x32, 0x78, 0xd8, 0xd2, 0x80, 0xd0, 0x44, 0x6f, 0x4b, 0xd2, 0x5d, 0x09, 0x0c, 0x1c, 0x16, 0x59, 0xf0, 0x3a, 0x9d, 0x61, 0x39, 0x76, 0xe1, 0xea, 0xe1, 0xf1, 0x52, 0x31, 0x81, 0xf3, 0xe7, 0xde, 0x72, 0x80, 0x66, 0x35, 0x32, 0x2c, 0xe0, 0x90, 0x09, 0x30, 0x7a, 0x0d, 0xec, 0xbc, 0x74, 0x84, 0xa1, 0x8f, 0x63, 0xbc, 0x24, 0xc6, 0xc1, 0xde, 0x4a, 0xf1, 0xa8, 0x29, 0xa4, 0x6c, 0xdb, 0xe8, 0xa6, 0xed, 0x06, 0xa1, 0x08, 0x59, 0x47, 0x90, 0x6d, 0xdc, 0xec, 0x53, 0x43, 0x38, 0x7f, 0xe7, 0xea, 0x5d, 0x00, 0xd3, 0x18, 0x3b, 0x71, 0xa3, 0x7c, 0xd4, 0x98, 0x98, 0xa1, 0x95, 0x00, 0x9e, 0x16, 0xe6, 0x41, 0x7e, 0xcc, 0x00, 0x81, 0x55, 0xbf, 0xfe, 0x3b, 0x45, 0xd8, 0x37, 0x3f, 0x6a, 0x12, 0xcc, 0xfa, 0x10, 0xdd, 0x7d, 0xf8, 0x23, 0xc0, 0xc1, 0xa7, 0xe6, 0x41, 0x15, 0x5e, 0xe8, 0x09, 0x94, 0x9d, 0x35, 0x44, 0xc8, 0x97, 0xc9, 0x47, 0xc0, 0xed, 0x4a, 0x75, 0x62, 0xbd, 0xf6, 0x63, 0x03, 0xdb, 0xda, 0x3a, 0x35, 0x5e, 0x44, 0x5d, 0xe0, 0x5f, 0x7c, 0x4c, 0x95, 0xfd, 0xaf, 0xc9, 0x1e, 0xa4, 0x2c, 0x39, 0x5a, 0x90, 0xd3, 0x4c, 0x48, 0x8c, 0xc9, 0xe0, 0x61, 0x00, 0x71, 0x23, 0x2b, 0x2a, 0x98, 0xf8, 0x0b, 0xac, 0xf0, 0x9d, 0x5a, 0x47, 0xc0, 0x8a, 0xbc, 0xe6, 0xd9, 0x9c, 0xad, 0xde, 0xcc, 0x72, 0x5d, 0x74, 0x5a, 0x18, 0xbe, 0xa0, 0x2c, 0xe2, 0xdb, 0x10, 0xc5, 0x9b, 0x6b, 0x70, 0xb4, 0xdf, 0xa6, 0xe9, 0x0e, 0xc6, 0x57, 0xe7, 0x1b, 0xc3, 0x33, 0x20, 0x50, 0xcb, 0x69, 0xd2, 0x7d, 0xb9, 0x7a, 0x4b, 0x48, 0xf1, 0x4b, 0xaf, 0xda, 0x43, 0x79, 0xf6, 0xd8, 0x13, 0xec, 0x34, 0x95, 0xb7, 0xaf, 0x1d, 0x86, 0x21, 0xfe, 0xc8, 0xf6, 0xbe, 0xa1, 0xb3, 0xfa, 0x9d, 0x79, 0x08, 0xa8, 0xd4, 0x59, 0x1e, 0x84, 0x20, 0x17, 0x43, 0x3b, 0xcb, 0xe2, 0xb9, 0x94, 0xd3, 0xd5, 0xfe, 0xa3, 0x48, 0xcd, 0x50, 0x40, 0xf6, 0x78, 0x71, 0xb7, 0x44, 0xaf, 0xa8, 0xc1, 0x5c, 0x06, 0x08, 0xb3, 0x8c, 0xa1, 0xf4, 0xf6, 0xec, 0x49, 0xe3, 0xb7, 0x42, 0xbe, 0x61, 0xdf, 0x22, 0x4f, 0x57, 0x46, 0x5a, 0xa9, 0x8b, 0x23, 0x8d, 0xed, 0x6a, 0xc8, 0x1d, 0x05, 0x06, 0x8c, 0x4e, 0x37, 0x5b, 0x08, 0xa9, 0xfa, 0xd6, 0x86, 0x9f, 0x09, 0x18, 0xb6, 0x6f, 0xb7, 0xf7, 0xa3, 0x4a, 0x82, 0xc5, 0xe6, 0xb4, 0xea, 0xd5, 0x19, 0x2d, 0x84, 0x3c, 0x8f, 0x11, 0x4a, 0xd5, 0x42, 0xbd, 0x35, 0x88, 0x0d, 0xf3, 0x0e, 0xcb, 0x1c, 0x80, 0x81, 0x68, 0xa0, 0x1b, 0x73, 0x81, 0xc7, 0x91, 0x95, 0xd2, 0xeb, 0x1f, 0x39, 0x37, 0x0a, 0x1f, 0x65, 0x6e, 0x76, 0xe8, 0x26, 0x1d, 0xcd, 0xef, 0x27, 0x17, 0x2c, 0x32, 0x82, 0xdb, 0xa0, 0xd6, 0xd6, 0x5e, 0xdd, 0x0e, 0x9a, 0x0a, 0x33, 0x40, 0xb1, 0x06, 0xbd, 0x63, 0x3e, 0xb8, 0xdc, 0xac, 0xb9, 0x88, 0xe3, 0x69, 0x43, 0xe7, 0x14, 0x2d, 0x36, 0x90, 0xcc, 0x2d, 0x01, 0x0e, 0xfa, 0xea, 0x33, 0x7f, 0xd5, 0x10, 0xd5, 0x97, 0xcf, 0x9e, 0xfd, 0xe8, 0xc4, 0x48, 0xa0, 0x60, 0x78, 0x1a, 0xa8, 0x13, 0x40, 0x5d, 0x46, 0x3a, 0xff, 0xbe, 0x8a, 0x7c, 0x54, 0xad, 0x31, 0x6d, 0x12, 0x04, 0xbe, 0x55, 0xf1, 0xe9, 0xcc, 0x32, 0x83, 0xf5, 0xa2, 0x00, 0x69, 0x96, 0x08, 0x37, 0xc6, 0xb1, 0x59, 0x96, 0xf4, 0x8c, 0xda, 0x1f, 0x76, 0xec, 0x4a, 0x63, 0x2e, 0x7a, 0xba, 0xff, 0xd0, 0x6b, 0x9f, 0x67, 0x97, 0x60, 0x26, 0xe2, 0x37, 0x8b, 0xc7, 0xd6, 0x12, 0x14, 0x1d, 0x46, 0xae, 0xbb, 0xf5, 0x99, 0x67, 0xbe, 0xa5, 0x9d, 0x61, 0xfd, 0x9f, 0xcb, 0xc1, 0x5c, 0x45, 0xcd, 0x1d, 0x69, 0xff, 0x3d, 0x30, 0x3f, 0x8b, 0xb0, 0xd3, 0xaa, 0x95, 0xf3, 0x29, 0x8b, 0x88, 0x94, 0x19, 0x7e, 0xa3, 0xa4, 0x01, 0xbb, 0x4f, 0xbc, 0xa8, 0x3a, 0xb0, 0x3e, 0x75, 0x1b, 0x7a, 0xdd, 0xdf, 0x44, 0x06, 0x60, 0x25, 0x4c, 0xa5, 0xa2, 0x3f, 0x98, 0x34, 0xde, 0x14, 0xc3, 0xf0, 0x29, 0xed, 0x43, 0x8c, 0x40, 0x2a, 0x4a, 0x81, 0x84, 0x34, 0xeb, 0xa6, 0x43, 0xb2, 0x7e, 0x00, 0x39, 0x00, 0x45, 0xdb, 0x57, 0xdc, 0x50, 0x19, 0xc3, 0x63, 0x9d, 0xcb, 0x1f, 0x3d, 0x84, 0xfe, 0x0e, 0x14, 0x52, 0xd7, 0xf4, 0x4a, 0x35, 0xe3, 0xfe, 0xeb, 0x58, 0xa8, 0x63, 0xe0, 0x4e, 0x80, 0xe9, 0x66, 0xb4, 0xa7, 0xaa, 0xbf, 0x12, 0x92, 0x18, 0x27, 0x03, 0x82, 0x3f, 0x0a, 0x96, 0x5a, 0x4a, 0x74, 0xf3, 0xad, 0x49, 0xc9, 0x42, 0x1c, 0x31, 0xb6, 0xc8, 0xdf, 0x24, 0x67, 0x53, 0xa1, 0xf3, 0xfb, 0xd9, 0x91, 0xe2, 0x35, 0x5c, 0xb6, 0xab, 0x74, 0x10, 0x82, 0xc5, 0xe5, 0xc0, 0xab, 0xe5, 0xf7, 0x6e, 0x36, 0xc6, 0x0f, 0x3a, 0xd5, 0x26, 0x7e, 0x85, 0x72, 0x11, 0xb0, 0x55, 0x0c, 0x61, 0xa5, 0xfb, 0xc2, 0x86, 0xa5, 0xf4, 0x2d, 0x83, 0x30, 0x0e, 0xf3, 0x39, 0x35, 0xcb, 0x99, 0xe8, 0x84, 0x0a, 0x99, 0xf3, 0x84, 0xe4, 0xb5, 0xe3, 0x29, 0xd5, 0x8a, 0xaf, 0x21, 0x1c, 0x68, 0x3b, 0x4e, 0x64, 0x61, 0x1e, 0x79, 0xa3, 0xa0, 0xa8, 0x45, 0x43, 0xfd, 0x24, 0x61, 0x80, 0xce, 0x5a, 0x02, 0x11, 0xff, 0x58, 0x91, 0x0a, 0x65, 0x72, 0xa0, 0x01, 0x4f, 0x88, 0x23, 0x6f, 0x5e, 0x87, 0xdd, 0x5a, 0x97, 0x32, 0x18, 0x31, 0xb7, 0x23, 0x99, 0xf8, 0xc6, 0x0c, 0xd3, 0xa4, 0xef, 0x43, 0x5b, 0xc9, 0x8f, 0x7e, 0x9c, 0x72, 0x8c, 0xdb, 0xcc, 0x50, 0xe8, 0x23, 0x1f, 0x18, 0x96, 0x4f, 0x3a, 0x26, 0x8c, 0x4b, 0xea, 0x66, 0x19, 0xfb, 0x16, 0x74, 0x79, 0x7c, 0xf2, 0x02, 0xa7, 0xac, 0x76, 0x7b, 0x72, 0xec, 0x0f, 0xe5, 0xd3, 0x24, 0x94, 0x0c, 0x7e, 0x08, 0x7b, 0xdd, 0xb7, 0x9a, 0x4d, 0x10, 0x67, 0xf0, 0x57, 0x0a, 0x6f, 0x38, 0xa3, 0x01, 0x3c, 0xf9, 0x26, 0x61, 0x9b, 0x9c, 0x3b, 0x6e, 0xcf, 0x2a, 0x50, 0x2b, 0xe2, 0x57, 0xdf, 0x7b, 0x38, 0xc0, 0xa1, 0x87, 0x6a, 0x71, 0xfe, 0x5f, 0x51, 0xaa, 0xc7, 0xe4, 0x60, 0xe3, 0x27, 0xe5, 0x37, 0x0d, 0xd7, 0x88, 0x76, 0x1b, 0x92, 0xec, 0xcf, 0xc1, 0xc9, 0x0c, 0x60, 0x7b, 0x97, 0xe7, 0x3f, 0xd2, 0xf7, 0xde, 0x56, 0xdb, 0x35, 0x5d, 0x71, 0x00, 0xa2, 0xbd, 0x95, 0x02, 0x8c, 0x69, 0x94, 0x3f, 0x6d, 0x40, 0xde, 0x31, 0x63, 0x3b, 0x9a, 0x38, 0xe0, 0x50, 0xf5, 0x99, 0xa3, 0x96, 0xba, 0xc6, 0xe7, 0xa9, 0x24, 0xe0, 0xda, 0x50, 0xf0, 0x7a, 0x50, 0x5d, 0xb5, 0xa0, 0xb9, 0xd5, 0x78, 0x17, 0x50, 0x51, 0x7b, 0xe7, 0x96, 0xa4, 0x57, 0x17, 0xff, 0xbe, 0x4a, 0xb8, 0xeb, 0xd1, 0xd2, 0x25, 0xd7, 0xb2, 0x7b, 0x88, 0xd5, 0x81, 0xf5, 0xa0, 0x39, 0x8c, 0x69, 0xc2, 0x96, 0x71, 0x0d, 0x1e, 0xe9, 0x83, 0xf7, 0x44, 0x13, 0x6f, 0x2f, 0xe7, 0x8d, 0x20, 0x07, 0xe0, 0x57, 0xdf, 0xaf, 0x75, 0x31, 0xbf, 0x04, 0xdc, 0x0e, 0x38, 0xa9, 0xfb, 0xc6, 0x12, 0x59, 0x72, 0x0b, 0x84, 0x7b, 0xdb, 0x9e, 0x9e, 0xf7, 0x50, 0xc2, 0xe4, 0x49, 0x2e, 0xf2, 0x3c, 0xd4, 0x19, 0xcf, 0x0a, 0x78, 0x41, 0x5c, 0x99, 0x66, 0xe3, 0x6d, 0xbd, 0x33, 0x12, 0x5d, 0xb6, 0x2c, 0xb7, 0x00, 0x58, 0xea, 0xd7, 0xd8, 0x69, 0x26, 0x14, 0x8c, 0x4b, 0xce, 0x77, 0x95, 0xda, 0x57, 0x6c, 0x3b, 0x98, 0x56, 0x0e, 0xc0, 0x08, 0x4a, 0xa5, 0xdb, 0x57, 0xbc, 0x6d, 0x68, 0x41, 0x8b, 0x9a, 0x5d, 0x33, 0x81, 0x98, 0x00, 0xad, 0x29, 0x97, 0x57, 0xeb, 0xe5, 0x47, 0xe0, 0xc4, 0x3b, 0xe0, 0x83, 0xd2, 0x70, 0x66, 0xc5, 0xd3, 0x58, 0x2b, 0x3e, 0x4f, 0x6c, 0x95, 0x4d, 0x7c, 0x1d, 0x21, 0x0a, 0x5e, 0x68, 0xa8, 0x7c, 0x32, 0xab, 0xe2, 0x0d, 0x0d, 0xb7, 0x28, 0x3a, 0xc1, 0x26, 0x7e, 0x8f, 0x00, 0xef, 0xd0, 0xd3, 0xc4, 0x37, 0x7c, 0x80, 0xed, 0x6a, 0x11, 0x76, 0x2c, 0x8b, 0x56, 0xef, 0x21, 0xc8, 0x8f, 0xb6, 0xc0, 0x52, 0xfb, 0x94, 0xf9, 0x6b, 0xa1, 0x0b, 0x98, 0xc1, 0x4d, 0x47, 0x6a, 0xfa, 0xd5, 0x52, 0xa1, 0x90, 0xa0, 0x87, 0x79, 0xdf, 0x69, 0x49, 0x1c, 0x7c, 0x41, 0xf5, 0xc3, 0xc9, 0xd3, 0x14, 0x1f, 0xc6, 0xec, 0xd6, 0xf7, 0x2a, 0x3b, 0xbc, 0x12, 0xb3, 0x55, 0x94, 0x57, 0xba, 0xfb, 0xaa, 0x33, 0x0a, 0xa0, 0x3d, 0x3b, 0xf2, 0x26, 0x30, 0x13, 0x99, 0xe9, 0x02, 0x8e, 0x92, 0xfe, 0x00, 0x16, 0xb0, 0xbd, 0xb9, 0x4f, 0x1c, 0x7c, 0xb3, 0xf7, 0xa4, 0x9e, 0x5c, 0x11, 0x56, 0xcd, 0x43, 0x42, 0x4e, 0x83, 0x88, 0x7b, 0xcc, 0xcf, 0x92, 0xd8, 0x8a, 0x56, 0xff, 0xc8, 0x4c, 0x98, 0xe1, 0x6f, 0xb8, 0x74, 0x27, 0x48, 0x68, 0xee, 0x59, 0x0f, 0x3e, 0x31, 0x89, 0xde, 0xf7, 0xd0, 0x86, 0x96, 0x03, 0x51, 0x52, 0x80, 0x94, 0xec, 0xd6, 0x34, 0xf6, 0x90, 0xd5, 0xba, 0x1e, 0x27, 0x1f, 0xf0, 0x85, 0x1b, 0x07, 0x2b, 0x37, 0x19, 0x16, 0x21, 0x26, 0x15, 0x01, 0x07, 0xc5, 0x8e, 0xd9, 0xf6, 0xd2, 0x13, 0x82, 0x93, 0x73, 0x06, 0x66, 0xef, 0x85, 0xa0, 0x6a, 0xac, 0x31, 0x35, 0x22, 0x62, 0xc0, 0xb9, 0x40, 0x40, 0xb0, 0x84, 0x53, 0xf7, 0x07, 0x52, 0xae, 0xd3, 0xe7, 0x8e, 0xa5, 0x2b, 0x63, 0xd0, 0x00, 0xfc, 0x91, 0xa4, 0xa9, 0xd1, 0xe0, 0x8d, 0xa8, 0xe6, 0xac, 0x49, 0x51, 0x8c, 0x10, 0x57, 0xbc, 0xcf, 0xfc, 0xb7, 0x76, 0x57, 0x87, 0xf1, 0x76, 0x8c, 0x86, 0x58, 0x53, 0xfe, 0x5d, 0x90, 0xb4, 0x03, 0x15, 0x4e, 0x07, 0xa2, 0xaf, 0x5f, 0x76, 0xaf, 0xb8, 0xec, 0x16, 0x38, 0x1e, 0xfc, 0x62, 0x20, 0x42, 0x3a, 0xe9, 0x0a, 0x4e, 0xf9, 0x43, 0x78, 0xc9 ],
+const [ 0x0b, 0x6e, 0xde, 0xb5, 0xf0, 0x6b, 0x22, 0x77, 0x3d, 0x0a, 0xf7, 0x27, 0xdd, 0x59, 0xbd, 0xf5, 0x52, 0xa1, 0x30, 0x00, 0x4c, 0xa4, 0x97, 0xbd, 0x7a, 0x23, 0x3d, 0x9d, 0xa0, 0xa3, 0x25, 0xea, 0xea, 0x71, 0xfa, 0xf2, 0x80, 0xe4, 0x45, 0x68, 0x5a, 0xe2, 0xe3, 0x07, 0x56, 0xa5, 0xb5, 0x78, 0x87, 0xbf, 0x99, 0x76, 0xd0, 0x5c, 0x99, 0x30, 0xb2, 0xc8, 0x63, 0xef, 0x63, 0x31, 0xf9, 0xf8, 0x20, 0xad, 0xaa, 0xb4, 0xc3, 0x7f, 0x41, 0x0e, 0x98, 0x96, 0x7c, 0x1d, 0x6d, 0x56, 0xc0, 0x03, 0xe8, 0x9b, 0x0a, 0x15, 0x1e, 0xfb, 0x29, 0x3c, 0x60, 0x4c, 0x2b, 0x9a, 0x58, 0x66, 0x15, 0x71, 0x56, 0x2a, 0xd7, 0x41, 0xe4, 0xc4, 0x7e, 0x31, 0xa0, 0x2c, 0xac, 0xb0, 0x4b, 0xf3, 0x45, 0x5c, 0x1d, 0x3c, 0x6c, 0x23, 0x5b, 0x09, 0xae, 0xa8, 0x2c, 0xb8, 0x7c, 0xe8, 0xa9, 0xcd, 0xdf, 0x1d, 0x33, 0xf1, 0x67, 0xe3, 0x09, 0x3b, 0x65, 0x99, 0x19, 0xaf, 0x59, 0x0a, 0x17, 0x04, 0xae, 0x4c, 0xcd, 0xab, 0xa5, 0xe9, 0xb2, 0x0c, 0x90, 0x3d, 0xbd, 0x13, 0x40, 0x1f, 0x7b, 0xeb, 0xc0, 0xc4, 0x60, 0x09, 0x44, 0xdf, 0x5b, 0x6d, 0x5c, 0x0d, 0xac, 0x24, 0x6d, 0x71, 0xfa, 0x12, 0x62, 0x9b, 0xa0, 0xee, 0x9f, 0xaf, 0x49, 0x8e, 0x36, 0xc3, 0xbc, 0x65, 0x5e, 0x88, 0xf9, 0x4a, 0x21, 0x2d, 0x84, 0x7a, 0x54, 0x80, 0x01, 0xe1, 0xcc, 0x57, 0x01, 0x95, 0xcf, 0x2e, 0x1c, 0xa4, 0xc9, 0x11, 0x40, 0x0f, 0x40, 0xbd, 0x48, 0x16, 0x0a, 0x02, 0xd0, 0xb6, 0xbe, 0x6b, 0x48, 0x71, 0x68, 0x21, 0x48, 0x4d, 0x81, 0x0d, 0x23, 0x1f, 0x1e, 0x3d, 0xbf, 0x09, 0x67, 0x89, 0xa4, 0x42, 0x4b, 0x76, 0x52, 0x15, 0x72, 0x5a, 0xd8, 0x2d, 0x73, 0xc1, 0xa2, 0x0f, 0x48, 0x10, 0x93, 0xe8, 0xff, 0x68, 0x54, 0x89, 0xb1, 0xcd, 0xeb, 0xb0, 0xb8, 0x88, 0x8f, 0x89, 0x1d, 0xc9, 0xba, 0x74, 0x50, 0x91, 0x81, 0x09, 0x1c, 0xcf, 0x21, 0x59, 0xd9, 0xca, 0xda, 0x77, 0xe4, 0xbe, 0x00, 0x38, 0x4c, 0xca, 0x4f, 0x36, 0xce, 0x09, 0x7f, 0x1b, 0x04, 0x00, 0x18, 0x1c, 0xd9, 0x38, 0x88, 0xc3, 0x40, 0x2b, 0x72, 0xf2, 0x26, 0x65, 0x4a, 0x25, 0xa4, 0xe3, 0x1f, 0xf7, 0x7a, 0xbf, 0xb7, 0xe8, 0xb9, 0x0f, 0xe1, 0x5d, 0xbf, 0x0a, 0x07, 0xe8, 0x68, 0x6c, 0x03, 0xca, 0x83, 0x1c, 0x33, 0xb6, 0x83, 0x0c, 0xd0, 0xd8, 0x77, 0x61, 0x7b, 0x16, 0x3d, 0xd5, 0x19, 0x96, 0xf2, 0x59, 0xe1, 0x80, 0xac, 0xfe, 0xb3, 0x05, 0x6c, 0x15, 0xac, 0xa0, 0x4e, 0x95, 0xf7, 0x9b, 0x03, 0xbe, 0xe6, 0xd6, 0x81, 0xfc, 0x41, 0xc4, 0xf9, 0x0e, 0xde, 0xb6, 0x0a, 0x67, 0x71, 0x5c, 0x34, 0xd5, 0xa6, 0x88, 0x8f, 0x60, 0x6d, 0x36, 0xbd, 0x75, 0x95, 0xca, 0x1d, 0x44, 0x9d, 0x98, 0x41, 0x66, 0xc7, 0xa9, 0xa3, 0xc3, 0x6d, 0xbc, 0x93, 0xb3, 0x98, 0x8c, 0x74, 0x63, 0xcf, 0x51, 0x28, 0x7b, 0x2d, 0x89, 0xc9, 0xfd, 0xb7, 0xf8, 0x9a, 0x70, 0xec, 0xee, 0x3d, 0x3f, 0x9d, 0xc8, 0x26, 0x5c, 0xfe, 0xb9, 0x4f, 0x28, 0xfe, 0xcb, 0x2d, 0x97, 0xd4, 0x20, 0xe4, 0x8f, 0xda, 0x7e, 0xb7, 0x92, 0x9f, 0x0b, 0xc2, 0x9d, 0x37, 0x54, 0xeb, 0x50, 0xd6, 0x94, 0x16, 0x4e, 0x9e, 0x34, 0x98, 0xe7, 0xb4, 0x8e, 0xee, 0xf5, 0x99, 0xf6, 0xb0, 0x03, 0xb8, 0xfb, 0xc0, 0xb5, 0x3b, 0xea, 0xc7, 0x64, 0x23, 0x94, 0xe2, 0x08, 0x98, 0x51, 0x98, 0x5b, 0x7d, 0x45, 0x10, 0x3b, 0x48, 0xe2, 0x80, 0x50, 0x11, 0xae, 0xe9, 0xf0, 0xe8, 0x47, 0x02, 0x3f, 0x6c, 0xa4, 0x71, 0x9b, 0x9a, 0x9d, 0x41, 0x37, 0xe2, 0xae, 0x91, 0x05, 0x80, 0xf8, 0x89, 0xda, 0x09, 0x88, 0x93, 0xcd, 0x44, 0xdc, 0xc7, 0xe0, 0x3c, 0xa3, 0xa6, 0xe2, 0x93, 0xc5, 0x0c, 0x93, 0x19, 0xa3, 0x60, 0x0a, 0x9d, 0xa0, 0x0e, 0x54, 0x04, 0xe0, 0x37, 0x5e, 0x98, 0x50, 0xa7, 0x14, 0xa2, 0xe6, 0x07, 0xcb, 0x3a, 0x2a, 0x53, 0xdc, 0x5e, 0xf5, 0x8f, 0x92, 0x42, 0x78, 0xb6, 0x47, 0xe7, 0x81, 0xf4, 0xc9, 0xef, 0xfa, 0x14, 0x03, 0xb0, 0xb2, 0x3c, 0xd9, 0x87, 0x61, 0xd8, 0x53, 0x6e, 0xe6, 0xd4, 0xfe, 0xd1, 0xd2, 0x0e, 0x8f, 0x9e, 0x2a, 0x0b, 0xca, 0x9c, 0x69, 0xe9, 0xa2, 0xfd, 0xc5, 0x94, 0xa2, 0x36, 0xb3, 0x3d, 0x8b, 0x0e, 0xad, 0x08, 0x3f, 0xf5, 0x33, 0x05, 0xdd, 0x98, 0x10, 0x62, 0x2e, 0xb2, 0xde, 0xdf, 0x40, 0x25, 0xcc, 0x81, 0x50, 0x49, 0x9f, 0x8b, 0xed, 0x84, 0xf7, 0xaa, 0x5b, 0x1b, 0xd4, 0x70, 0x36, 0x47, 0x58, 0x03, 0x57, 0x8c, 0xcf, 0x17, 0xfc, 0x46, 0xec, 0x19, 0x22, 0x85, 0x55, 0xad, 0x36, 0x1a, 0x63, 0x5b, 0xed, 0xf2, 0x22, 0x85, 0x71, 0xa3, 0xa0, 0x9d, 0xbd, 0x45, 0x64, 0x95, 0x4a, 0x83, 0x3c, 0x96, 0xeb, 0xf1, 0x3c, 0xf4, 0xf5, 0xa1, 0x03, 0x62, 0xa4, 0xf1, 0x40, 0x62, 0xba, 0xa6, 0x75, 0x00, 0x69, 0x3f, 0xfb, 0xc0, 0x73, 0x83, 0x47, 0xd5, 0x90, 0x5d, 0x6b, 0x93, 0x10, 0xe9, 0xdf, 0x27, 0xc1, 0xcf, 0x82, 0x86, 0x13, 0xd0, 0xdc, 0xa3, 0x7a, 0x9e, 0xa6, 0xe5, 0x14, 0xf1, 0x8c, 0xd8, 0x8c, 0xd7, 0x31, 0x23, 0x3e, 0x4b, 0x74, 0xba, 0x9c, 0x0a, 0xf2, 0x54, 0xd0, 0xa2, 0xcb, 0x20, 0xa3, 0xcc, 0xaa, 0xb3, 0x9d, 0xfb, 0xff, 0x45, 0x6d, 0x35, 0x8f, 0x1e, 0x8c, 0x22, 0x2f, 0x4b, 0x1e, 0x63, 0xcc, 0x95, 0x19, 0x24, 0xaf, 0xb4, 0xa8, 0xf5, 0xff, 0xbf, 0xd2, 0xd5, 0x88, 0xe7, 0x57, 0x90, 0xba, 0x65, 0xda, 0x4c, 0xf5, 0xb1, 0x45, 0x5e, 0x04, 0xf5, 0x6a, 0x62, 0xe7, 0xc1, 0xe6, 0x8a, 0xd5, 0x00, 0x4b, 0x36, 0x81, 0x2b, 0x7e, 0xc5, 0x9d, 0xbc, 0x5d, 0xab, 0x9c, 0xe6, 0xa5, 0xc4, 0xbd, 0x83, 0x13, 0xe9, 0x45, 0x4e, 0xca, 0xc0, 0x0b, 0x52, 0xf5, 0xd8, 0x3a, 0xa2, 0xad, 0xf5, 0x53, 0x4b, 0x1d, 0xa8, 0x71, 0x87, 0xe4, 0x23, 0xd1, 0x33, 0xba, 0x4c, 0x91, 0x83, 0x57, 0x10, 0xb8, 0xf5, 0x91, 0xfa, 0x77, 0x83, 0xc4, 0x04, 0xaf, 0x1d, 0x76, 0xad, 0xb2, 0x56, 0x3b, 0x4b, 0x4e, 0x5e, 0xd7, 0xa3, 0x08, 0x30, 0xa3, 0xb7, 0xa5, 0x0c, 0x32, 0xdf, 0xef, 0x28, 0x33, 0x1b, 0xb5, 0xa3, 0x99, 0xa8, 0x14, 0xba, 0xfa, 0xd1, 0xf5, 0x3e, 0x35, 0x08, 0xd7, 0x45, 0x58, 0x35, 0xcf, 0x21, 0xc1, 0x4e, 0xcc, 0x8e, 0x83, 0x28, 0x20, 0x2f, 0x0b, 0x8d, 0x3c, 0x3c, 0x03, 0x8e, 0xbb, 0x75, 0x76, 0x1a, 0xa3, 0x5a, 0x35, 0xd0, 0xe7, 0x9d, 0x7a, 0x12, 0x30, 0xd8, 0xcc, 0x5b, 0xdc, 0x7c, 0x22, 0xd2, 0x47, 0x09, 0x4b, 0x1f, 0x4a, 0x85, 0x8d, 0x7d, 0x02, 0x27, 0x8d, 0x10, 0xd3, 0x53, 0x6e, 0x7a, 0xac, 0xcb, 0x3d, 0xa9, 0x8c, 0x23, 0x8d, 0xf2, 0x45, 0x75, 0x5e, 0x64, 0x80, 0x57, 0x44, 0x56, 0x01, 0x0a, 0xc5, 0x43, 0x2c, 0xf4, 0x02, 0xd8, 0xc8, 0x50, 0x9a, 0x4a, 0x04, 0x25, 0xcb, 0xed, 0xb7, 0x74, 0xda, 0x03, 0xec, 0xb6, 0xb5, 0xd1, 0x9e, 0x86, 0xd8, 0xf9, 0xc0, 0x9a, 0x6d, 0x03, 0x81, 0xf7, 0xb7, 0x3d, 0xcd, 0x65, 0xb0, 0xc5, 0x17, 0x21, 0xf1, 0xe4, 0x56, 0xd3, 0xd3, 0x9d, 0x4d, 0xbf, 0xd4, 0x86, 0x10, 0x3f, 0x3c, 0xd7, 0xc4, 0x71, 0x00, 0xc1, 0xa6, 0x2d, 0xe6, 0x01, 0x4f, 0x3a, 0xea, 0xb4, 0x36, 0xc1, 0xe0, 0x6d, 0x76, 0x01, 0x5c, 0x85, 0xd1, 0x45, 0xcf, 0xb2, 0xf5, 0x13, 0xf2, 0xdb, 0xff, 0xa7, 0x68, 0x2b, 0x3e, 0xa0, 0x9f, 0x65, 0x39, 0xf8, 0xf7, 0x77, 0xf3, 0x39, 0x26, 0x51, 0x6d, 0xee, 0xdb, 0xf7, 0x6d, 0x58, 0xa1, 0xd5, 0x7e, 0x63, 0x06, 0x54, 0x38, 0xd8, 0xfd, 0xaa, 0xc1, 0xd4, 0x82, 0xf6, 0x94, 0x79, 0x7c, 0x8c, 0x81, 0xe3, 0xe7, 0x8d, 0xf5, 0x5e, 0x32, 0xbc, 0x7c, 0xd6, 0xe6, 0x8c, 0x84, 0x8f, 0x89, 0x7e, 0x64, 0x16, 0xc2, 0xa9, 0x9d, 0x77, 0xbe, 0x9a, 0x5f, 0xb0, 0xd1, 0x5f, 0x4f, 0x66, 0x61, 0xdf, 0x87, 0xd7, 0x00, 0x6d, 0xde, 0x10, 0xd8, 0x9c, 0x6a, 0x5f, 0x4c, 0x54, 0x44, 0x0c, 0xdc, 0x25, 0x8b, 0x44, 0x49, 0xdc, 0xac, 0x56, 0xfa, 0x54, 0xe0, 0x22, 0x9f, 0x8f, 0xf6, 0xcd, 0x14, 0x05, 0x52, 0xba, 0x88, 0x3c, 0x36, 0xb6, 0xde, 0x99, 0x40, 0x73, 0x53, 0x76, 0x34, 0x38, 0x62, 0x75, 0xfc, 0xd6, 0xe5, 0x13, 0xed, 0xde, 0x7c, 0x80, 0x4c, 0x11, 0x32, 0xae, 0x11, 0x18, 0x5e, 0xa7, 0xea, 0x76, 0xc8, 0x25, 0x83, 0xba, 0x0d, 0x5c, 0x05, 0xf9, 0x45, 0x1b, 0xdd, 0x7b, 0xe2, 0x13, 0xbe, 0xb5, 0xdb, 0x76, 0xe9, 0x77, 0x0b, 0xc5, 0xac, 0x67, 0xd4, 0xe3, 0x28, 0xae, 0x07, 0x6d, 0x58, 0xf1, 0x08, 0x4e, 0x4f, 0x83, 0x2d, 0x8d, 0xc1, 0xd9, 0x68, 0x6a, 0xc5, 0x3e, 0x26, 0xaa, 0xd9, 0xc7, 0x76, 0x2f, 0x27, 0x8a, 0x6e, 0xcb, 0x07, 0x0b, 0xca, 0x56, 0xc4, 0xf7, 0xd7, 0xfe, 0xa3, 0x15, 0x90, 0xdf, 0x21, 0x79, 0x06, 0xd4, 0x7d, 0xfb, 0x05, 0x8c, 0x76, 0xe7, 0xf4, 0xe0, 0x56, 0xf6, 0xfd, 0x63, 0x2f, 0x7d, 0x6e, 0x3b, 0x65, 0xe5, 0x5f, 0x30, 0x6c, 0x5b, 0x96, 0x03, 0xd3, 0xc8, 0xa7, 0x01, 0x82, 0x04, 0x5f, 0xd7, 0x40, 0x47, 0x63, 0xa8, 0x78, 0xe0, 0x15, 0x5d, 0x3c, 0x29, 0xb7, 0x3d, 0x8a, 0xba, 0xd3, 0xbd, 0xce, 0xdd, 0xda, 0x99, 0xa9, 0x42, 0x0b, 0x23, 0xf1, 0xf4, 0x96, 0xdb, 0xf9, 0x8c, 0x02, 0x41, 0x12, 0xa5, 0xcc, 0xe7, 0x51, 0x8f, 0x51, 0xca, 0x93, 0x48, 0xed, 0xe2, 0xbf, 0xa7, 0x65, 0xf8, 0x4b, 0xdb, 0x82, 0xb8, 0x02, 0x14, 0xff, 0x07, 0x04, 0x80, 0xa6, 0x97, 0x0e, 0x79, 0xb5, 0xb8, 0xfb, 0xfd, 0x86, 0x71, 0x8b, 0x5e, 0x6f, 0xcf, 0x64, 0x3a, 0xe8, 0x7d, 0x56, 0xae, 0xeb, 0x95, 0xe3, 0xc7, 0xa1, 0xb6, 0xff, 0x39, 0x3a, 0x57, 0x14, 0x54, 0x1c, 0x5a, 0x49, 0x33, 0x41, 0xe4, 0x04, 0x37, 0xda, 0x6d, 0xad, 0xb4, 0x39, 0x13, 0xb6, 0xe9, 0xed, 0x34, 0xd8, 0x36, 0x2f, 0x3b, 0x9f, 0x89, 0x7d, 0xba, 0x28, 0x1a, 0x84, 0xba, 0x2a, 0x58, 0x43, 0x4f, 0x33, 0x22, 0x6e, 0x6f, 0x34, 0x3b, 0x10, 0x03, 0x40, 0xf8, 0x75, 0x3f, 0x91, 0x3c, 0x47, 0x2f, 0xcc, 0xa6, 0xf7, 0x93, 0x85, 0x09, 0x5e, 0xed, 0x06, 0x1d, 0xa5, 0xd8, 0x4c, 0x74, 0x62, 0x9b, 0x53, 0xaf, 0x03, 0xfe, 0x94, 0xf1, 0x70, 0x5d, 0xcb, 0x94, 0xec, 0xfa, 0xfd, 0x1b, 0x3c, 0x97, 0xba, 0x68, 0x0c, 0x45, 0xa0, 0x30, 0x8e, 0x77, 0x20, 0xab, 0x64, 0x5a, 0x85, 0x90, 0xc0, 0x69, 0x31, 0x40, 0xca, 0x3c, 0x2a, 0x41, 0x42, 0xa0, 0xd6, 0xef, 0x66, 0xed, 0x03, 0x6e, 0x16, 0x94, 0x2a, 0xe3, 0x36, 0xf8, 0xf5, 0xe4, 0x54, 0x7f, 0xfe, 0x2d, 0x8a, 0xe8, 0xda, 0x94, 0xa6, 0xdf, 0x56, 0x3f, 0x89, 0xce, 0x00, 0x14, 0xcd, 0xf7, 0xea, 0x71, 0xab, 0xc0, 0xaa, 0x1d, 0x1b, 0x4d, 0xa5, 0x7f, 0x3c, 0x54, 0x8e, 0x0e, 0xf7, 0x2d, 0x29, 0x09, 0xdf, 0x29, 0x55, 0x68, 0x5c, 0x25, 0x49, 0x12, 0x09, 0x5f, 0x1e, 0x50, 0x5a, 0x88, 0x8e, 0x82, 0x82, 0x1a, 0xfb, 0x11, 0x94, 0xeb, 0xb2, 0xa4, 0xe8, 0x03, 0x72, 0x97, 0xc0, 0xaa, 0x28, 0xa9, 0x2b, 0xc6, 0xfd, 0xf4, 0x2a, 0x64, 0x92, 0x23, 0x12, 0x95, 0x8a, 0xdf, 0x31, 0x7b, 0x4a, 0x8a, 0xb4, 0xa3, 0xfc, 0x30, 0xc8, 0x95, 0xda, 0xba, 0x00, 0xaa, 0xa9, 0x65, 0xf7, 0x1e, 0x83, 0x73, 0x36, 0x66, 0xda, 0x21, 0x58, 0xc4, 0xba, 0xd8, 0x6c, 0x18, 0x4e, 0xa7, 0x9a, 0xf9, 0xa6, 0xf1, 0x0a, 0x04, 0xb7, 0x63, 0x01, 0x74, 0xa4, 0x29, 0x4d, 0xf4, 0x3c, 0x62, 0xe4, 0xb1, 0xc3, 0xd1, 0xc8, 0xb2, 0xf5, 0xd5, 0x2d, 0x6c, 0x48, 0x9b, 0xde, 0x91, 0x72, 0x92, 0xdd, 0x2a, 0x2b, 0x1f, 0x49, 0xe5, 0x34, 0x93, 0x85, 0xb0, 0x98, 0x5a, 0x97, 0x86, 0x32, 0x74, 0xce, 0x89, 0x6f, 0x2a, 0xa8, 0x52, 0x55, 0xf9, 0xf2, 0x85, 0xc4, 0xd3, 0x31, 0xa8, 0xfc, 0x87, 0x41, 0x35, 0x60, 0x7d, 0x3c, 0xed, 0x7a, 0xa6, 0x9e, 0x70, 0x3e, 0xb3, 0xa6, 0x0b, 0x93, 0x85, 0xff, 0xd1, 0x0f, 0xe5, 0x9f, 0xed, 0x02, 0x76, 0xf0, 0x36, 0xb7, 0xe7, 0x2d, 0x04, 0xf6, 0x6d, 0x0f, 0x42, 0xcd, 0x71, 0xaa, 0xc5, 0x91, 0x86, 0x91, 0xdc, 0x1f, 0x9d, 0x41, 0x29, 0x67, 0x7c, 0xbd, 0xaf, 0x2c, 0x6c, 0x75, 0x2b, 0x05, 0x32, 0x6c, 0xa8, 0xa8, 0x41, 0x9a, 0x4e, 0x67, 0x2e, 0x90, 0x7b, 0xfb, 0x64, 0x5a, 0x15, 0x81, 0x19, 0xa9, 0x1e, 0xc2, 0x81, 0x32, 0x88, 0xb7, 0x41, 0x51, 0x4b, 0x4d, 0x26, 0xf2, 0xb6, 0x65, 0x17, 0xb1, 0x02, 0x1f, 0x48, 0x40, 0x2d, 0x58, 0xb1, 0x09, 0x06, 0x71, 0xbf, 0x15, 0x84, 0x52, 0x49, 0x2d, 0x5b, 0xaf, 0xc5, 0x3f, 0xd1, 0x8a, 0xbc, 0x03, 0xce, 0xfa, 0x7b, 0xdd, 0x33, 0x2a, 0x0c, 0x06, 0x6d, 0xa4, 0x64, 0xe7, 0x4a, 0xd0, 0xde, 0xc5, 0x0b, 0xb7, 0xe8, 0xa3, 0xba, 0x0d, 0xfc, 0x64, 0xbe, 0x6f, 0xd3, 0x31, 0xac, 0xe9, 0xd5, 0x1a, 0x60, 0xbb, 0xd3, 0x00, 0x4d, 0x5d, 0xf8, 0xb2, 0x11, 0xc0, 0xfd, 0x56, 0x4c, 0xd7, 0x9d, 0x0b, 0xb3, 0x56, 0x49, 0xcc, 0x60, 0xba, 0x1c, 0x97, 0x6c, 0x89, 0x11, 0xcf, 0xc0, 0xdb, 0x74, 0xe0, 0x28, 0x19, 0x96, 0x21, 0xaa, 0x05, 0xc5, 0xfe, 0x15, 0xfa, 0x7b, 0x56, 0xdc, 0x75, 0xd6, 0x22, 0x25, 0xd5, 0x48, 0x58, 0x1e, 0x5f, 0x90, 0x0f, 0x90, 0x85, 0xe9, 0xe3, 0xb6, 0x68, 0x81, 0x9b, 0x4f, 0x9b, 0x2c, 0x09, 0xf2, 0x2a, 0x5a, 0x32, 0xa2, 0xdb, 0x47, 0xaf, 0xa2, 0xb3, 0x71, 0x53, 0x8a, 0xbc, 0x4f, 0x0e, 0x9b, 0x06, 0x40, 0x11, 0x50, 0xec, 0xc2, 0x33, 0x35, 0x98, 0xe4, 0x94, 0xfc, 0xca, 0xfe, 0x80, 0xce, 0xd4, 0x9f, 0x96, 0xdf, 0xea, 0xc7, 0x29, 0x45, 0x98, 0x56, 0xe6, 0x0a, 0x94, 0xc5, 0xb7, 0x80, 0xb6, 0x14, 0xe8, 0xd4, 0x45, 0x03, 0x89, 0xe6, 0x74, 0x85, 0x13, 0x58, 0x2c, 0x72, 0x4e, 0xe6, 0x0c, 0x7c, 0x71, 0xf5, 0xaf, 0x64, 0x8b, 0x6e, 0x2d, 0x6e, 0x23, 0xcc, 0xe4, 0x12, 0x1b, 0x74, 0x78, 0xf4, 0xdb, 0x45, 0x18, 0x16, 0xab, 0x71, 0x03, 0x4c, 0x5f, 0x8b, 0x4b, 0xf1, 0x3a, 0xe1, 0xd9, 0xd9, 0x0d, 0x0b, 0xb2, 0x86, 0x9f, 0xc4, 0x79, 0x9f, 0x51, 0xf9, 0x34, 0x9d, 0x02, 0x20, 0x53, 0xc8, 0x31, 0xcb, 0xee, 0x62, 0x61, 0x7d, 0x4e, 0x22, 0xc2, 0xbc, 0xaf, 0xe4, 0x0d, 0x67, 0x44, 0x9e, 0xb0, 0x4a, 0x7c, 0x96, 0x2b, 0xf0, 0x84, 0xd2, 0xba, 0xb8, 0x0d, 0xd0, 0x34, 0x2b, 0x4f, 0x78, 0x33, 0x8d, 0x4d, 0x4f, 0x75, 0xb2, 0x5b, 0xed, 0x82, 0x14, 0xde, 0xb1, 0x8f, 0x22, 0x54, 0xb3, 0xa3, 0xda, 0x94, 0xfa, 0xf8, 0x99, 0x56, 0xf0, 0xa4, 0x32, 0xf5, 0x12, 0x78, 0x3e, 0x74, 0xec, 0x29, 0xb4, 0xc0, 0x45, 0xad, 0xba, 0x34, 0x97, 0xe8, 0xba, 0x62, 0xc2, 0x88, 0xb7, 0x11, 0x00, 0x2e, 0xe2, 0x82, 0x1c, 0xce, 0x68, 0xf8, 0xdf, 0x58, 0x8f, 0x76, 0xcc, 0x98, 0x01, 0xcb, 0x0d, 0x5b, 0x67, 0xcc, 0xac, 0xd3, 0x3a, 0xe1, 0x06, 0x3c, 0xd6, 0xc3, 0x7d, 0xc0, 0xd1, 0x83, 0x6e, 0x98, 0x8a, 0xcf, 0x63, 0x75, 0x05, 0x71, 0x89, 0x1e, 0xf6, 0x18, 0x64, 0x5a, 0x1b, 0x5b, 0xc1, 0x10, 0xcf, 0xfb, 0xec, 0xad, 0xdd, 0x68, 0x24, 0xc6, 0x92, 0x87, 0x4c, 0xff, 0x16, 0xb3, 0xe3, 0x2b, 0xfc, 0x02, 0x36, 0xb4, 0x17, 0xc9, 0xd4, 0x3d, 0x8f, 0x62, 0x43, 0x87, 0x35, 0x2c, 0xf1, 0x91, 0x14, 0xd4, 0x6d, 0x04, 0x48, 0xd3, 0xd7, 0xcd, 0x14, 0x38, 0x96, 0x0c, 0x2e, 0xa8, 0x48, 0x2d, 0x5d, 0xa3, 0xff, 0x54, 0x46, 0x08, 0xaa, 0xff, 0x83, 0xdc, 0xd1, 0xe7, 0xf6, 0x47, 0x86, 0x27, 0x5d, 0xdf, 0x98, 0x9f, 0x26, 0x2a, 0x09, 0x9b, 0x84, 0x5d, 0xc2, 0xb0, 0xc2, 0x6a, 0x86, 0xe7, 0xd8, 0x3a, 0x25, 0x1e, 0x3c, 0x37, 0xf2, 0xaa, 0xfa, 0x0e, 0x76, 0x41, 0x07, 0xb3, 0x66, 0x18, 0xd2, 0xa5, 0xd3, 0x48, 0x1d, 0x73, 0xa1, 0x76, 0x0b, 0x7f, 0x3a, 0xb3, 0x7a, 0x02, 0x83, 0xa1, 0x92, 0x50, 0x10, 0xd7, 0x9e, 0x5e, 0x94, 0x87, 0x1b, 0x81, 0x9b, 0x5e, 0x0f, 0x78, 0x7b, 0xac, 0x9d, 0xad, 0x87, 0xc5, 0xd5, 0xb8, 0x87, 0xa7, 0xd1, 0x25, 0x65, 0xdd, 0xfd, 0x77, 0x29, 0xa3, 0xb6, 0x6c, 0x27, 0x4a, 0x17, 0x83, 0x77, 0xde, 0x0f, 0xbc, 0xa6, 0x07, 0xb7, 0x9f, 0xab, 0x2d, 0xe3, 0x7f, 0x1d, 0xdf, 0xf8, 0x00, 0xa3, 0x76, 0xfd, 0xd7, 0xab, 0xf5, 0xf4, 0xd1, 0x5f, 0x34, 0x6a, 0x17, 0xd4, 0x3e, 0x4d, 0xb0, 0x85, 0xf7, 0xfe, 0x47, 0x01, 0x02, 0xa7, 0x2f, 0xe0, 0xe1, 0xcf, 0xa4, 0xfb, 0x5e, 0x2b, 0x54, 0xdd, 0x2a, 0xb7, 0x1e, 0x74, 0xc5, 0x06, 0x19, 0x0c, 0x9d, 0xd6, 0xd8, 0x7f, 0x7a, 0xe8, 0xec, 0xa5, 0x19, 0x0f, 0xab, 0x12, 0x17, 0x86, 0x30, 0x01, 0x12, 0x86, 0xa3, 0x8b, 0x0a, 0x18, 0xbb, 0x1d, 0x0d, 0x29, 0x80, 0x28, 0x13, 0xdc, 0x56, 0x1a, 0x27, 0x24, 0x37, 0x8e, 0xc7, 0x91, 0x40, 0xbf, 0x8e, 0x6a, 0x6f, 0x43, 0x10, 0xfd, 0xab, 0xf6, 0x06, 0x33, 0x04, 0x34, 0xab, 0x67, 0x3d, 0x4b, 0x65, 0x78, 0x87, 0x2f, 0xa8, 0x1d, 0x90, 0x70, 0x17, 0x79, 0xbc, 0x6a, 0xed, 0xf0, 0xb2, 0xbc, 0x9c, 0x38, 0x1b, 0xfb, 0xb4, 0xb3, 0xa6, 0xa7, 0x05, 0xfc, 0x50, 0x5d, 0x08, 0xc0, 0xe2, 0x4f, 0x7b, 0xcf, 0xbb, 0xf2, 0x4c, 0x72, 0xcf, 0xf6, 0xb8, 0x00, 0xf0, 0x7b, 0xb4, 0xac, 0x4d, 0x82, 0x8c, 0xa1, 0x38, 0xa1, 0xca, 0x51, 0x2c, 0xfc, 0x59, 0x09, 0x0e, 0x70, 0xea ],
+const [ 0xb0, 0x51, 0x7c, 0xc1, 0xd4, 0x6a, 0xe7, 0x9e, 0x22, 0x0c, 0x9e, 0xe7, 0x3a, 0x2a, 0x54, 0xd6, 0x7e, 0x6d, 0xa0, 0xf2, 0x68, 0x34, 0xf6, 0x32, 0x22, 0xd9, 0xd6, 0x65, 0x50, 0x36, 0x43, 0xd1, 0x30, 0x67, 0x77, 0x1b, 0xe6, 0xd2, 0xd5, 0x67, 0x11, 0x65, 0x1f, 0xbf, 0xa2, 0x1f, 0xe9, 0xb9, 0xee, 0xd2, 0x4e, 0x54, 0x02, 0x27, 0xe1, 0x24, 0x36, 0xe2, 0xe6, 0xaf, 0x05, 0x67, 0xc3, 0x16, 0x1b, 0x7d, 0xb1, 0xf8, 0xb0, 0x53, 0xb7, 0x93, 0x15, 0xc1, 0xd9, 0x2c, 0x8c, 0xcf, 0x8d, 0xb1, 0x5d, 0x7b, 0x6e, 0x9e, 0x26, 0xb7, 0x34, 0x1d, 0x73, 0xb2, 0xe4, 0x71, 0x8e, 0x58, 0x44, 0x94, 0x99, 0x1c, 0x92, 0x1f, 0xd9, 0xf5, 0x75, 0x6b, 0x55, 0xa6, 0x34, 0xf6, 0xa0, 0x43, 0x26, 0x08, 0xf3, 0xf1, 0x6a, 0x96, 0x7e, 0xed, 0xd7, 0x66, 0x00, 0xd0, 0x36, 0x74, 0x96, 0x11, 0xaf, 0x95, 0xd0, 0xcb, 0x82, 0x5a, 0x0a, 0xc0, 0xf8, 0x37, 0xfa, 0x9f, 0x98, 0xe4, 0x85, 0x82, 0x9d, 0x04, 0xd7, 0xbb, 0xa8, 0x05, 0xb2, 0xd0, 0xb3, 0x47, 0x06, 0xc4, 0x46, 0x80, 0xc3, 0x98, 0xed, 0x5f, 0xeb, 0x12, 0xe9, 0x6f, 0xeb, 0xbd, 0x26, 0x3f, 0x2b, 0x31, 0x6d, 0xc0, 0xe4, 0x94, 0xdb, 0xee, 0x32, 0x61, 0x92, 0xb2, 0x6a, 0x68, 0xae, 0x07, 0xad, 0x17, 0x7b, 0x5d, 0xbd, 0xf7, 0xe5, 0x3a, 0x10, 0x79, 0x2f, 0x27, 0x23, 0xf3, 0xe8, 0xca, 0x11, 0xe6, 0x1b, 0x50, 0x64, 0x82, 0xc7, 0x0e, 0x2b, 0x6c, 0x8e, 0x67, 0x4d, 0xbe, 0xb1, 0xf0, 0x1c, 0x50, 0x3c, 0xd2, 0x2d, 0x36, 0x7e, 0x70, 0x68, 0x89, 0xbc, 0x4a, 0x5b, 0x6b, 0x27, 0x21, 0xd3, 0x45, 0x0a, 0x5d, 0xae, 0x53, 0x48, 0xab, 0xeb, 0x63, 0x06, 0xea, 0x03, 0xd9, 0xa5, 0x48, 0x7c, 0xf7, 0xf3, 0xa8, 0xbb, 0x5b, 0xa2, 0x48, 0x1a, 0xc9, 0xf9, 0xa0, 0x3a, 0x2b, 0xc9, 0x8d, 0x9b, 0xd6, 0xa3, 0xae, 0x69, 0x0f, 0x48, 0x0e, 0x99, 0xce, 0x61, 0x04, 0x35, 0xc2, 0x70, 0x58, 0xf4, 0x94, 0x07, 0xa7, 0x0e, 0x70, 0x38, 0x09, 0x4e, 0xc2, 0x4c, 0xf0, 0x69, 0x3d, 0xb7, 0x54, 0x8e, 0x22, 0x4c, 0x0d, 0x3e, 0xbf, 0xae, 0x80, 0x5e, 0x36, 0x07, 0x7d, 0x8b, 0x7f, 0xfc, 0x68, 0xad, 0xb0, 0xe0, 0x97, 0xcf, 0x7c, 0x27, 0xfc, 0x2e, 0xfa, 0x1e, 0x04, 0x8f, 0xa8, 0xda, 0xbe, 0xd6, 0xb0, 0x6e, 0x40, 0xd5, 0x6a, 0x62, 0x47, 0x62, 0x21, 0x60, 0x1d, 0xac, 0x1a, 0x2f, 0xc0, 0xcf, 0xd2, 0xe6, 0x40, 0xa5, 0x88, 0x59, 0x69, 0xdf, 0xfb, 0xd8, 0xa2, 0x55, 0x75, 0x19, 0x15, 0x9b, 0x08, 0x72, 0x10, 0xd5, 0x18, 0x4b, 0xab, 0xcc, 0x1a, 0xd4, 0xac, 0x41, 0x9a, 0xf3, 0xa7, 0x81, 0x83, 0x81, 0x6a, 0x39, 0x9b, 0xb5, 0x98, 0x8c, 0x4d, 0xe0, 0x93, 0x63, 0xab, 0x5b, 0x9f, 0x04, 0xb3, 0xbe, 0x45, 0xe7, 0xd1, 0x53, 0xf6, 0xc4, 0xa6, 0xcb, 0xf1, 0xf1, 0x08, 0x2f, 0x67, 0xeb, 0x4a, 0x19, 0xdc, 0x33, 0xbd, 0x23, 0xd0, 0x5b, 0x76, 0xa0, 0x9f, 0x60, 0x52, 0x8a, 0xa6, 0x3a, 0x38, 0xbc, 0xa7, 0xb2, 0x9e, 0x61, 0x6e, 0x74, 0x4f, 0xad, 0xb5, 0x65, 0x6b, 0xcb, 0x46, 0x36, 0xaf, 0x16, 0x5f, 0x3a, 0xf6, 0x8b, 0x5a, 0x74, 0x00, 0x7e, 0x8d, 0xf5, 0x73, 0x8d, 0x70, 0x65, 0x1f, 0xd3, 0xfd, 0xdf, 0x86, 0x5e, 0x5d, 0x02, 0x9c, 0xe2, 0xc0, 0x44, 0xcb, 0xae, 0x8d, 0x8a, 0x3a, 0xe0, 0xbb, 0xf6, 0x4f, 0xd5, 0x7e, 0x00, 0x73, 0xe4, 0x27, 0xc9, 0x15, 0x4c, 0x45, 0xab, 0xf1, 0x6a, 0x11, 0x15, 0x92, 0x30, 0x09, 0x96, 0x15, 0xd2, 0xda, 0x37, 0x31, 0xc2, 0x83, 0x0e, 0x74, 0xdf, 0xb8, 0x10, 0xcf, 0xea, 0x84, 0x27, 0x55, 0x39, 0x33, 0x85, 0x40, 0xaf, 0x6f, 0x37, 0x35, 0xeb, 0xa9, 0xfd, 0xc9, 0xc0, 0xbb, 0x59, 0x43, 0xe5, 0xcb, 0xe6, 0xa3, 0xee, 0x72, 0xeb, 0xe4, 0x7b, 0x1d, 0x30, 0x7f, 0xb0, 0xb4, 0x10, 0x30, 0xe5, 0x7a, 0xd0, 0xfc, 0x9e, 0x35, 0x2f, 0x73, 0xbd, 0x8e, 0x3e, 0x33, 0xf6, 0xba, 0x72, 0xad, 0x84, 0x5a, 0xf8, 0x2c, 0x1a, 0xa0, 0x48, 0x13, 0x1d, 0xb4, 0xfd, 0x65, 0x10, 0x56, 0xe4, 0x8b, 0x50, 0xc4, 0x53, 0x52, 0x01, 0xde, 0xbc, 0x34, 0x48, 0x88, 0x81, 0xd8, 0xba, 0x50, 0x0a, 0xdc, 0x15, 0x51, 0x16, 0xd1, 0x2e, 0x56, 0x4e, 0x87, 0x2b, 0x43, 0x20, 0x8b, 0xf2, 0xb1, 0xca, 0xef, 0xe2, 0xd9, 0xb5, 0x49, 0xc0, 0xb3, 0x05, 0xfe, 0xf4, 0x5f, 0x6e, 0xc1, 0xf5, 0xc3, 0x49, 0x56, 0x02, 0x76, 0xe7, 0x9c, 0x13, 0xdc, 0x25, 0xca, 0x0f, 0x93, 0x40, 0xf9, 0x3f, 0x0e, 0xeb, 0xe3, 0x03, 0x80, 0x9f, 0xea, 0xc3, 0xfc, 0x33, 0x5c, 0x29, 0xda, 0xac, 0xf5, 0x8d, 0x5c, 0x56, 0xa5, 0xb1, 0x92, 0x14, 0x94, 0xaf, 0x7a, 0xf4, 0x64, 0x2f, 0x6c, 0x06, 0xb6, 0xdd, 0xb5, 0x6f, 0xef, 0x1b, 0x83, 0xb9, 0x3c, 0xf2, 0x01, 0x6d, 0xd3, 0x4f, 0xc2, 0xe4, 0x7c, 0x6c, 0x63, 0x5a, 0x50, 0x8c, 0x6c, 0x44, 0xc1, 0xeb, 0x78, 0xe3, 0xdb, 0xf5, 0x96, 0x1a, 0xca, 0xb6, 0xee, 0x7d, 0x9b, 0x92, 0xa8, 0xaa, 0x47, 0x36, 0x09, 0xdc, 0xed, 0xce, 0xdf, 0xbd, 0x5f, 0x78, 0x20, 0x7c, 0xe0, 0xf9, 0xce, 0x20, 0x2c, 0xb0, 0x1d, 0x1c, 0xb9, 0xc8, 0xd8, 0x23, 0x3d, 0xb1, 0x01, 0x3d, 0x70, 0xd0, 0xb8, 0x1b, 0x13, 0x75, 0x5d, 0xa7, 0x31, 0x0e, 0xf9, 0xe0, 0xa5, 0x9b, 0xda, 0xe5, 0xdc, 0x62, 0x7e, 0x4f, 0xdc, 0xe4, 0xb3, 0xc4, 0x85, 0x0f, 0xfb, 0xca, 0x17, 0xb5, 0x35, 0xd8, 0xf5, 0x3d, 0x7a, 0xb3, 0xa9, 0x99, 0x46, 0xf8, 0x27, 0x78, 0xd8, 0xf4, 0x56, 0xbc, 0xdb, 0xbc, 0xcc, 0x2e, 0x45, 0x7a, 0xd9, 0x70, 0x80, 0x06, 0xc8, 0x34, 0xc8, 0xb6, 0x61, 0xac, 0xd4, 0x76, 0xb3, 0x41, 0xb8, 0x1b, 0x10, 0x88, 0x0a, 0xf4, 0x58, 0x72, 0x43, 0xa2, 0x7b, 0xc3, 0x69, 0x2a, 0x39, 0xc5, 0xeb, 0x49, 0x2c, 0x3d, 0xcd, 0x08, 0x09, 0x9e, 0x04, 0x8f, 0x23, 0x7d, 0x24, 0x3e, 0x30, 0x45, 0x38, 0xfa, 0x50, 0x2c, 0xf1, 0xc5, 0x4b, 0x65, 0x04, 0x92, 0x1a, 0x97, 0xcd, 0x57, 0xaa, 0x8f, 0x38, 0x63, 0xdc, 0x32, 0xe1, 0xf2, 0xd0, 0xb5, 0x7a, 0xff, 0x63, 0x10, 0x6e, 0x59, 0xf6, 0xaf, 0xc3, 0xf9, 0x72, 0x6b, 0x45, 0x93, 0x88, 0xba, 0xe1, 0x6b, 0x3e, 0x22, 0x4f, 0x6a, 0xa7, 0xf4, 0xf4, 0x71, 0xf1, 0x36, 0x06, 0xed, 0xa6, 0xe1, 0xf1, 0xac, 0x2b, 0x4d, 0xf9, 0xef, 0x8d, 0xe9, 0x21, 0xc0, 0x7c, 0x2f, 0x4c, 0x85, 0x98, 0xd7, 0xa3, 0xd6, 0xec, 0x4b, 0x36, 0x8c, 0xb8, 0x5c, 0xe6, 0x1a, 0x74, 0x33, 0x82, 0x21, 0x11, 0x8a, 0x30, 0x3e, 0x82, 0x1c, 0x0f, 0x27, 0x7b, 0x59, 0x1a, 0xf6, 0x79, 0x5f, 0x50, 0xc4, 0x02, 0x26, 0x12, 0x7a, 0x2e, 0xfa, 0xcc, 0xe4, 0x66, 0x2f, 0xd7, 0x07, 0x6c, 0x10, 0x9e, 0xb5, 0x9b, 0x18, 0x00, 0x5e, 0x71, 0x65, 0xf6, 0x29, 0x4a, 0x69, 0x76, 0x43, 0x6e, 0xe3, 0x97, 0x77, 0x4e, 0x0d, 0xf5, 0x00, 0x0b, 0x17, 0x57, 0x9b, 0x38, 0xd5, 0x8f, 0xe0, 0xe1, 0xb5, 0xa2, 0xd1, 0xcc, 0xf3, 0x29, 0xb4, 0xfe, 0x10, 0xf7, 0x1e, 0x81, 0x80, 0xfc, 0x51, 0x65, 0xa3, 0x69, 0xc7, 0x05, 0xf6, 0x15, 0x0f, 0x8c, 0x8b, 0x20, 0xd8, 0xb7, 0xb6, 0xd6, 0x4c, 0xdc, 0x0a, 0xd6, 0x9f, 0x2b, 0x83, 0x73, 0xe7, 0x34, 0x05, 0x5a, 0x2e, 0xa9, 0x05, 0x75, 0xc5, 0x65, 0x86, 0x10, 0xdc, 0xae, 0x48, 0x3b, 0x50, 0xb7, 0x3c, 0x6f, 0xc4, 0x69, 0x3a, 0x74, 0xf3, 0x63, 0xf6, 0x81, 0x44, 0x40, 0x31, 0xa6, 0xa0, 0x18, 0x2c, 0x67, 0x80, 0x49, 0x62, 0xaa, 0x4a, 0x77, 0x76, 0xd3, 0xdd, 0xd1, 0x6b, 0x2d, 0x6a, 0x96, 0x13, 0x8c, 0x87, 0xd8, 0xca, 0x30, 0x7e, 0x81, 0x64, 0xed, 0xeb, 0x93, 0x63, 0x89, 0x86, 0xb4, 0x6d, 0x66, 0x3d, 0xe9, 0xfe, 0x60, 0x86, 0xa2, 0x5b, 0xf9, 0xf3, 0xf7, 0xc7, 0xb4, 0x06, 0x31, 0xf8, 0xbe, 0x48, 0x8c, 0xcc, 0xd3, 0x95, 0x3b, 0x39, 0x60, 0xba, 0xad, 0x82, 0xe5, 0x42, 0x0f, 0xb1, 0x9e, 0x8c, 0x12, 0x41, 0x62, 0x21, 0xee, 0x1b, 0xcb, 0x45, 0xa7, 0xc4, 0x97, 0xcc, 0x8e, 0xd4, 0x4e, 0x2f, 0x0c, 0xaa, 0x25, 0xdf, 0x9b, 0x5e, 0x23, 0xd9, 0x15, 0xf7, 0x82, 0x7b, 0x31, 0xde, 0x58, 0x96, 0x4a, 0x93, 0x77, 0xc4, 0x63, 0x9f, 0x91, 0xfc, 0x69, 0xca, 0xa0, 0x63, 0xb7, 0x8d, 0x84, 0x65, 0xe0, 0xca, 0xee, 0x05, 0xa8, 0xbb, 0x7e, 0x71, 0x53, 0x29, 0x28, 0xda, 0x23, 0xde, 0xdc, 0x82, 0x1c, 0x5c, 0x66, 0x17, 0x0a, 0xcf, 0x93, 0x3f, 0xc5, 0x41, 0x95, 0x74, 0xb4, 0x0d, 0xa8, 0x12, 0x90, 0x96, 0xf6, 0xae, 0x6a, 0x38, 0xb8, 0xaa, 0xf0, 0x7f, 0x9f, 0x06, 0xec, 0x97, 0x72, 0x79, 0x0d, 0x04, 0xf8, 0xc1, 0xea, 0x93, 0x18, 0x37, 0x44, 0x91, 0x3f, 0xa6, 0x8b, 0x3a, 0x02, 0x5d, 0xa4, 0x74, 0x05, 0x83, 0xea, 0xbe, 0x1b, 0xab, 0x73, 0x63, 0xae, 0xa8, 0x94, 0xf3, 0x62, 0xa3, 0xa7, 0xf3, 0xf5, 0x6b, 0x0b, 0xd4, 0x6a, 0x0b, 0x6d, 0x22, 0x66, 0xa2, 0x46, 0xfe, 0xda, 0x6f, 0xa5, 0xce, 0xe2, 0x2c, 0x2f, 0x33, 0xed, 0x9d, 0x64, 0x3c, 0x1f, 0x68, 0x24, 0xd9, 0xf3, 0x27, 0x71, 0x92, 0x25, 0xbc, 0x76, 0x78, 0xcf, 0xe4, 0xc8, 0x5c, 0xd2, 0x10, 0xed, 0x40, 0x77, 0x70, 0x1b, 0x0b, 0x56, 0x50, 0x41, 0x81, 0x77, 0xa7, 0x4c, 0x71, 0xb8, 0xed, 0xa3, 0x30, 0x6e, 0x2e, 0xf3, 0x47, 0x4f, 0x5d, 0x32, 0x69, 0x90, 0xea, 0xde, 0xa8, 0x4a, 0x96, 0x86, 0xe8, 0x22, 0x87, 0x8c, 0x93, 0x29, 0x97, 0x29, 0x8e, 0x01, 0xf2, 0xb1, 0x6c, 0x42, 0xe0, 0x19, 0xe2, 0x1b, 0xdf, 0xb6, 0x7b, 0x3d, 0xf5, 0x47, 0x8d, 0xf4, 0x44, 0x36, 0x6c, 0x97, 0xdf, 0x1b, 0xdd, 0x23, 0xdc, 0x82, 0xce, 0x23, 0xab, 0xee, 0x44, 0xd3, 0xa6, 0x1e, 0x94, 0x84, 0xe8, 0x8e, 0xd6, 0x42, 0x63, 0x41, 0x97, 0xb5, 0x2d, 0xbe, 0xce, 0x45, 0x1b, 0x59, 0x11, 0x81, 0x91, 0xb3, 0x09, 0xc2, 0x98, 0x84, 0x24, 0x0b, 0x31, 0x98, 0x89, 0x34, 0xea, 0x18, 0x51, 0x48, 0xae, 0x0b, 0xf4, 0x2b, 0xe1, 0x1c, 0x01, 0x80, 0xad, 0x9e, 0x13, 0xc9, 0x96, 0xcd, 0x00, 0xd0, 0x55, 0x57, 0x53, 0x47, 0xe3, 0x1b, 0xfd, 0xab, 0xd4, 0x30, 0x47, 0x6e, 0xe6, 0x29, 0x0b, 0x54, 0xda, 0x97, 0x24, 0x1e, 0x82, 0xd0, 0x23, 0x66, 0x1c, 0xef, 0x43, 0xca, 0xde, 0x1c, 0xa0, 0x4c, 0xd2, 0x0e, 0xa3, 0xf9, 0xe4, 0xcd, 0xc1, 0xc9, 0x3a, 0xbd, 0x65, 0xc7, 0xc3, 0xd8, 0x2a, 0x71, 0x13, 0x3b, 0x4e, 0x62, 0x6e, 0xe4, 0x64, 0x2e, 0x22, 0xba, 0x48, 0x8e, 0x1a, 0xcd, 0x58, 0xbd, 0xb1, 0xe0, 0xe1, 0x21, 0xc4, 0x25, 0xd8, 0x2e, 0x0b, 0x47, 0xcb, 0x88, 0xa9, 0xad, 0x16, 0x67, 0x01, 0xfe, 0x5a, 0x40, 0xcc, 0xe0, 0x2b, 0xa2, 0x68, 0x06, 0x09, 0x5e, 0x73, 0x69, 0x92, 0xea, 0x99, 0xd5, 0xf5, 0x07, 0xaa, 0xa8, 0xaa, 0xa2, 0xf0, 0xd7, 0x61, 0xf8, 0xbf, 0x31, 0x38, 0xfe, 0x4d, 0xe8, 0x30, 0x00, 0xc4, 0x4d, 0xe2, 0x88, 0x96, 0xdb, 0x6e, 0x81, 0x11, 0x77, 0xb5, 0x9c, 0x33, 0xf6, 0xc8, 0xf3, 0xbf, 0xe0, 0x9f, 0xed, 0x90, 0x73, 0x0f, 0x61, 0x2e, 0xeb, 0xf6, 0xfe, 0x9f, 0x01, 0xb9, 0xea, 0x80, 0xb2, 0xf0, 0xa9, 0x54, 0x41, 0x5f, 0x41, 0x1b, 0x7f, 0x29, 0x9b, 0x27, 0x4a, 0x40, 0x2d, 0x2b, 0x54, 0x20, 0xd6, 0x95, 0x26, 0xbd, 0x09, 0x1d, 0x64, 0xb9, 0x2e, 0x9e, 0x52, 0xdb, 0x45, 0x25, 0x97, 0xbd, 0xcd, 0x48, 0x41, 0xc4, 0xe4, 0xba, 0x0a, 0x55, 0xaf, 0x1c, 0xd9, 0x46, 0xfc, 0x15, 0x8c, 0x93, 0x26, 0xa4, 0xf5, 0x53, 0x39, 0xb5, 0x22, 0xea, 0x57, 0xf3, 0xe2, 0x7f, 0x5b, 0xde, 0x84, 0xb1, 0xbb, 0x1d, 0xe2, 0x85, 0xb3, 0x15, 0x9f, 0xa3, 0xa0, 0xba, 0xac, 0xc3, 0xaa, 0xa5, 0x11, 0x62, 0xa5, 0x68, 0xea, 0xb9, 0x39, 0x1e, 0xaf, 0xef, 0x41, 0x46, 0xb9, 0x8e, 0x72, 0xd1, 0x02, 0x34, 0x3d, 0x79, 0x2d, 0x8b, 0xf6, 0x55, 0xc6, 0x7a, 0x35, 0xaa, 0xca, 0x9d, 0x7d, 0x05, 0x6a, 0xf3, 0x1b, 0x86, 0x0c, 0xd7, 0x51, 0x7f, 0x93, 0x32, 0xb4, 0x3e, 0xe0, 0xee, 0xd3, 0x26, 0x98, 0xae, 0x19, 0x05, 0x28, 0xbc, 0xf5, 0xa1, 0x07, 0x42, 0x37, 0x94, 0x3b, 0xbe, 0xbe, 0x5a, 0x1f, 0xb0, 0x50, 0xa9, 0x63, 0x95, 0xc9, 0x00, 0x54, 0x19, 0x78, 0x83, 0x5e, 0x89, 0xc6, 0x06, 0xcf, 0x87, 0x18, 0x68, 0xdd, 0x01, 0xf7, 0x22, 0xeb, 0x64, 0x6f, 0x1f, 0x08, 0x0c, 0xb4, 0xcf, 0xb9, 0x00, 0x0c, 0x77, 0xf8, 0xdc, 0xe8, 0xcb, 0x7c, 0x0e, 0x54, 0xbe, 0x3b, 0x45, 0x92, 0x99, 0x2e, 0x27, 0x02, 0x4a, 0x54, 0x43, 0x46, 0xff, 0xf9, 0x46, 0xa2, 0xf4, 0x38, 0x71, 0xa9, 0x89, 0xbf, 0x4a, 0x16, 0x98, 0xd2, 0x92, 0xf8, 0x05, 0x93, 0x78, 0x12, 0x97, 0x80, 0x0c, 0x81, 0x06, 0x3d, 0xf6, 0x9f, 0x55, 0x94, 0x68, 0x28, 0x61, 0xba, 0x51, 0x9b, 0xbb, 0xd3, 0xd4, 0xe3, 0xb3, 0xb9, 0xf8, 0x37, 0xb5, 0xf9, 0xa1, 0x3f, 0xd9, 0x1f, 0xbf, 0x78, 0xb5, 0x34, 0xc5, 0xd9, 0x76, 0x84, 0x5d, 0xb7, 0x2f, 0xa5, 0x59, 0xe6, 0x70, 0xb4, 0xed, 0x21, 0x1b, 0xe2, 0x1c, 0xab, 0x73, 0x2f, 0x71, 0x37, 0x76, 0x76, 0xef, 0x06, 0x6d, 0xaa, 0x4a, 0x4f, 0xc1, 0x5f, 0x58, 0xe3, 0x10, 0x8c, 0xc2, 0x11, 0x80, 0x8f, 0xff, 0xc7, 0x53, 0x71, 0x83, 0xfb, 0xbc, 0x6c, 0x33, 0x49, 0xf1, 0xaa, 0x1d, 0xde, 0x82, 0x50, 0x66, 0x94, 0xe9, 0xbb, 0x83, 0x5e, 0x62, 0x09, 0xac, 0xe7, 0xfd, 0xdc, 0x8e, 0x76, 0xf1, 0x5a, 0x41, 0x15, 0x33, 0x79, 0x79, 0xf2, 0x47, 0x79, 0x00, 0x05, 0x57, 0xb2, 0x64, 0xf3, 0x82, 0x8f, 0xed, 0x33, 0x76, 0xdb, 0xd1, 0x6f, 0x41, 0x3b, 0xab, 0x2d, 0x64, 0xfc, 0x2a, 0xae, 0x29, 0x0f, 0x06, 0x16, 0x37, 0x52, 0x39, 0xce, 0x64, 0x12, 0x6b, 0x27, 0xca, 0xcd, 0xae, 0x40, 0x1d, 0x3c, 0x6b, 0x29, 0x3c, 0x90, 0x9c, 0x48, 0x05, 0xfd, 0x3c, 0xfc, 0x6e, 0x75, 0xfc, 0x81, 0xd1, 0xb6, 0x38, 0x14, 0x88, 0x86, 0x29, 0x57, 0xba, 0x3d, 0x5c, 0xf6, 0x74, 0x85, 0x63, 0x8b, 0xfc, 0x5e, 0xca, 0xbf, 0x62, 0x65, 0x4d, 0xb2, 0x57, 0x55, 0x47, 0x9e, 0x42, 0xce, 0x6e, 0xb7, 0x91, 0x55, 0xbe, 0x55, 0x4d, 0x9d, 0xb3, 0x54, 0xf2, 0x04, 0xbb, 0xbb, 0x7d, 0x61, 0xeb, 0x9d, 0xc6, 0xfd, 0xf1, 0x3d, 0x10, 0xdf, 0x4a, 0x75, 0xdf, 0x4d, 0xb5, 0x59, 0x0a, 0x8f, 0xe7, 0x17, 0x10, 0xf6, 0x80, 0x22, 0xaf, 0x1d, 0x3e, 0x8f, 0xb3, 0x6f, 0x70, 0xbf, 0x0d, 0xe9, 0xae, 0x3e, 0x24, 0x21, 0xc8, 0xeb, 0x70, 0x88, 0xfc, 0x59, 0x44, 0xec, 0x6c, 0x76, 0xeb, 0x41, 0xcf, 0x6a, 0xf7, 0xa0, 0x66, 0xc2, 0xd6, 0x90, 0x31, 0xce, 0xa6, 0x85, 0x64, 0x47, 0x4a, 0xa6, 0x15, 0x35, 0xbe, 0xd3, 0x37, 0x10, 0xa7, 0xe7, 0xcb, 0x26, 0x2f, 0x3a, 0x55, 0x3c, 0x0f, 0x6b, 0x8d, 0x78, 0xed, 0x5c, 0x58, 0x7f, 0xe9, 0x7d, 0xf6, 0xda, 0x73, 0x4e, 0x7d, 0x9e, 0x5f, 0x1f, 0x86, 0x4c, 0x3b, 0x1a, 0x26, 0xf6, 0xe0, 0x84, 0x20, 0xa3, 0x47, 0x40, 0x58, 0xf5, 0x9e, 0x95, 0x8b, 0x09, 0x9b, 0x31, 0x3e, 0x9f, 0x11, 0x6d, 0xf4, 0x7b, 0xc1, 0xd2, 0xa4, 0x0b, 0x72, 0xdc, 0x6a, 0x49, 0x44, 0xff, 0x7d, 0xe3, 0x41, 0xe8, 0x61, 0x99, 0x35, 0x05, 0x5e, 0xe7, 0xbf, 0x47, 0x30, 0xe5, 0xa9, 0x27, 0x00, 0x6b, 0x75, 0xe7, 0x93, 0x78, 0x38, 0x1a, 0xc2, 0xd5, 0xac, 0x66, 0x2a, 0xf5, 0x80, 0x89, 0x24, 0x20, 0xf2, 0x9a, 0xf8, 0xd1, 0xa0, 0x91, 0x4d, 0x5c, 0x9b, 0x0a, 0xe4, 0xd3, 0xbe, 0x46, 0x86, 0x2b, 0x3e, 0x73, 0x3b, 0x9b, 0x81, 0x2d, 0xbd, 0x45, 0x34, 0x44, 0x2c, 0x18, 0x98, 0xc0, 0x03, 0xf5, 0x1c, 0x22, 0x4b, 0x10, 0x31, 0xed, 0x0f, 0x9a, 0x5a, 0x65, 0x0f, 0x9d, 0x82, 0x97, 0xb8, 0x27, 0x93, 0x99, 0x54, 0xaa, 0x44, 0x13, 0x7f, 0xa3, 0x33, 0xfe, 0xda, 0x7a, 0x33, 0xac, 0x03, 0xa9, 0xe7, 0x09, 0xc4, 0x21, 0x90, 0x20, 0x8a, 0xe9, 0x23, 0xe1, 0x19, 0x09, 0x9f, 0x21, 0x7f, 0xa6, 0x9d, 0xe2, 0x46, 0x6e, 0x28, 0xd5, 0xee, 0x37, 0xd0, 0x1d, 0x9b, 0xe2, 0xfa, 0x56, 0x0a, 0x86, 0x7a, 0xd6, 0xc9, 0xcb, 0x64, 0x32, 0xa8, 0x93, 0x1e, 0x04, 0x6b, 0xe0, 0xba, 0xec, 0xc1, 0xf2, 0x83, 0xd5, 0x7a, 0xaf, 0xd6, 0x7a, 0xf4, 0x48, 0x34, 0x28, 0xd6, 0x1a, 0x94, 0xc5, 0x01, 0xd2, 0xfe, 0x11, 0xc4, 0xd5, 0x55, 0x2c, 0x4f, 0xdf, 0x75, 0x59, 0x6b, 0xe9, 0x7e, 0x01, 0x68, 0x51, 0x6e, 0xfb, 0x56, 0x35, 0xf6, 0x0a, 0x78, 0x1f, 0x86, 0xa7, 0xf5, 0xe8, 0xab, 0x01, 0xd1, 0xd6, 0x9a, 0x43, 0x1c, 0x08, 0x0d, 0x15, 0x69, 0x14, 0x4d, 0x65, 0x82, 0xee, 0x90, 0x67, 0x5a, 0x0c, 0x86, 0xda, 0x43, 0xc7, 0x2f, 0x8e, 0x61, 0x05, 0xef, 0x23, 0x5f, 0x15, 0xe4, 0x13, 0x60, 0xda, 0x77, 0xf3, 0x39, 0x2c, 0x31, 0xf5, 0xdd, 0x7b, 0xd1, 0xb2, 0x18, 0xb5, 0x9b, 0x26, 0x81, 0x6a, 0xf2, 0xfc, 0xaa, 0x2f, 0x29, 0x0c, 0x99, 0x40, 0x97, 0x23, 0x7c, 0x69, 0xe9, 0x02, 0x98, 0x26, 0xbc, 0xa9, 0x83, 0x09, 0x6c, 0xd5, 0x93, 0x5c, 0x26, 0xc7, 0x96, 0x08, 0x45, 0x47, 0xc3, 0xb5, 0xdb, 0xe9, 0xf1, 0x33, 0x8d, 0x8f, 0x07, 0x18, 0xa5, 0x2f, 0xb4, 0xab, 0x62, 0xd6, 0x60, 0x01, 0x92, 0xed, 0x62, 0x66, 0x63, 0xbc, 0x73, 0xff, 0x77, 0x2c, 0x62, 0xad, 0x36, 0xd1, 0x0a, 0x33, 0x68, 0x27, 0x82, 0x9c, 0x03, 0x1c, 0x93, 0xd7, 0x41, 0xcf, 0x6f, 0xa5, 0xf6, 0x98, 0x9f, 0xb5, 0x21, 0x48, 0x3e, 0x0c, 0xc1, 0xb2, 0x65, 0xab, 0xea, 0x6a, 0xe6, 0x6c, 0x17, 0xcc, 0x3d, 0x2e, 0xc2, 0x40, 0xc3, 0x31, 0x32, 0xbd, 0x25, 0xc3, 0x95, 0x8c, 0x15, 0x1d, 0x4e, 0x4f, 0x3f, 0x88, 0x90, 0x41, 0x7f, 0xc4, 0x2c, 0xbf, 0x51, 0xa9, 0xa7, 0x08, 0x89, 0x0f, 0x90, 0x41, 0x44, 0xec, 0x10, 0xbc, 0x1e, 0xbc, 0xc3, 0x79, 0xa5, 0x26, 0xc6, 0xed, 0x0e, 0xdc, 0x12, 0x03, 0x27, 0xc3, 0x08, 0x61, 0x8d, 0x54, 0x4c, 0xec, 0x1f, 0x42, 0xd7, 0x8e, 0xb2, 0x5c, 0x48, 0x37, 0x07, 0xb6, 0x7b, 0x21, 0xfa ],
+const [ 0x5e, 0x9d, 0x7b, 0x80, 0x3f, 0x8a, 0x40, 0xca, 0xdd, 0x83, 0x20, 0x0a, 0xbc, 0x49, 0xe7, 0xae, 0x24, 0x56, 0x35, 0xa7, 0xd1, 0xc2, 0xd1, 0x6d, 0xec, 0x67, 0x40, 0x44, 0x3a, 0x44, 0x97, 0xbf, 0x94, 0x1f, 0x8d, 0x82, 0x97, 0x6e, 0xd4, 0x4b, 0x9c, 0x78, 0xaa, 0x34, 0xea, 0xb8, 0xab, 0x32, 0x2b, 0x82, 0xe9, 0xe2, 0x1d, 0xe9, 0x3e, 0x85, 0x8a, 0xdf, 0xe1, 0x48, 0x7a, 0x9e, 0x38, 0xca, 0xa7, 0x47, 0xed, 0xd8, 0x31, 0xc9, 0x44, 0x7b, 0x93, 0x05, 0xac, 0x34, 0xd6, 0x30, 0x94, 0x86, 0x05, 0x78, 0x7f, 0xb5, 0xe0, 0xea, 0x5b, 0xce, 0xd4, 0x93, 0x0e, 0xe7, 0x2b, 0xe5, 0x53, 0xa8, 0x81, 0x5d, 0xc4, 0x0a, 0x77, 0x63, 0x37, 0x5f, 0xab, 0x72, 0x4e, 0x93, 0xe7, 0x78, 0x4a, 0xb1, 0x98, 0x80, 0x20, 0xa8, 0x82, 0x8e, 0xcf, 0x50, 0xb3, 0xca, 0xf0, 0xa8, 0xb5, 0xe1, 0x8f, 0x62, 0x08, 0xa9, 0x39, 0xa1, 0xcf, 0x04, 0x56, 0x01, 0xca, 0x06, 0xba, 0xd8, 0x84, 0x5a, 0x76, 0xbb, 0xce, 0xe1, 0xf4, 0x44, 0x6b, 0x9d, 0x43, 0x13, 0x0d, 0xce, 0xaf, 0x13, 0x81, 0x5a, 0x95, 0xfe, 0x26, 0x72, 0x75, 0x24, 0xa3, 0x73, 0x49, 0x68, 0xd9, 0x0a, 0x15, 0x8b, 0x17, 0x9c, 0xc0, 0xad, 0x8d, 0xe5, 0x22, 0x10, 0x04, 0xdf, 0x5e, 0x20, 0xcc, 0xe5, 0x72, 0xb0, 0xf5, 0x18, 0x0c, 0x87, 0xc2, 0x02, 0xa0, 0x1b, 0x5a, 0x79, 0xb7, 0x9c, 0xc1, 0xc6, 0x8a, 0x34, 0x07, 0x07, 0xcf, 0x8e, 0xbf, 0xd2, 0xd3, 0x95, 0xb3, 0x1b, 0xc9, 0x7e, 0xd6, 0x58, 0x61, 0x08, 0x7a, 0xe2, 0x9d, 0x02, 0xc3, 0x9f, 0xe1, 0x0e, 0x5c, 0xde, 0x49, 0xa6, 0x68, 0x82, 0x3e, 0x5c, 0xbc, 0x63, 0x4c, 0x66, 0x4b, 0xf1, 0x2e, 0x59, 0xe1, 0x1b, 0x2b, 0x35, 0x15, 0x6f, 0xa6, 0xa2, 0x79, 0x82, 0xf0, 0x79, 0x13, 0x92, 0x60, 0x86, 0x11, 0x6a, 0xa6, 0x8d, 0xb8, 0x86, 0x5c, 0x8a, 0x9e, 0x78, 0xde, 0x3d, 0x19, 0x8a, 0x5c, 0xe6, 0xf7, 0xa5, 0x2d, 0x4e, 0x6f, 0x71, 0x66, 0x06, 0x58, 0xbe, 0xac, 0xf3, 0x99, 0x23, 0x46, 0x0b, 0xe1, 0xe4, 0x76, 0x59, 0x98, 0x19, 0x0a, 0x47, 0x15, 0x0d, 0x2e, 0x1c, 0x11, 0xe5, 0x84, 0xc4, 0x5b, 0x82, 0x77, 0xd0, 0xce, 0xa8, 0xcc, 0xbd, 0x81, 0x5f, 0x79, 0x79, 0x3d, 0x99, 0xbb, 0x23, 0x34, 0x16, 0x63, 0x12, 0xef, 0x85, 0x70, 0x1a, 0x89, 0xec, 0xe3, 0x0a, 0x1b, 0x49, 0xcf, 0x79, 0x77, 0x7a, 0xb0, 0xc3, 0x19, 0x5a, 0xfd, 0x4e, 0x5a, 0x2d, 0x01, 0x12, 0xe7, 0x3e, 0xe6, 0x58, 0x72, 0xc6, 0x13, 0xc1, 0xa7, 0x10, 0xb8, 0x8b, 0x62, 0xdb, 0xa6, 0x10, 0x1f, 0x00, 0x65, 0x8f, 0xb2, 0x54, 0x80, 0x2f, 0x38, 0xd0, 0x24, 0x41, 0x4d, 0xef, 0xe9, 0xc6, 0x7f, 0x58, 0xf0, 0x31, 0x03, 0xbd, 0x2e, 0x6e, 0xa7, 0x03, 0x07, 0x22, 0x08, 0xa3, 0x1f, 0x35, 0x05, 0x50, 0x6d, 0x8e, 0x73, 0xda, 0x91, 0x1d, 0x12, 0x52, 0x67, 0x1f, 0xc0, 0x6f, 0xdc, 0x9d, 0xed, 0x30, 0x00, 0x36, 0x4f, 0xc3, 0x5d, 0x1f, 0xd7, 0xa6, 0x88, 0x68, 0xe3, 0x0c, 0xf5, 0x81, 0xb5, 0x82, 0x0f, 0xfc, 0x24, 0xd2, 0x88, 0x94, 0x91, 0x27, 0xee, 0x6f, 0x1d, 0x73, 0x80, 0xa0, 0x19, 0x0e, 0x3f, 0xf0, 0xbf, 0xa0, 0x48, 0xde, 0x1f, 0x40, 0x60, 0xe4, 0x5b, 0xdd, 0xd1, 0xfc, 0x17, 0xdd, 0x75, 0x63, 0x2c, 0x05, 0x10, 0x9d, 0x9c, 0x99, 0xe2, 0xb9, 0xcb, 0xc4, 0x7d, 0xd6, 0xec, 0x39, 0xd5, 0xe6, 0xb9, 0x1b, 0x96, 0xb2, 0x67, 0x1b, 0xba, 0x1f, 0xd9, 0xe0, 0x5a, 0xaf, 0x14, 0xab, 0xc4, 0x4a, 0xf3, 0x3b, 0xcf, 0x3f, 0x1b, 0xee, 0x6b, 0x86, 0x32, 0x2a, 0x7c, 0x48, 0x4c, 0xfb, 0xe9, 0xa0, 0xa6, 0xfd, 0xef, 0xa4, 0x97, 0x7d, 0xbc, 0x9f, 0xc3, 0xdb, 0x39, 0xa1, 0x92, 0x32, 0x27, 0x3a, 0xe1, 0x3b, 0x6d, 0x82, 0xf7, 0x6f, 0xb0, 0x5c, 0xba, 0x6c, 0x25, 0xfc, 0x22, 0x9a, 0xa3, 0xa7, 0xef, 0x0e, 0xfd, 0xba, 0x97, 0xaf, 0x8e, 0xee, 0x83, 0x97, 0x15, 0xda, 0x7a, 0xbc, 0xc4, 0xba, 0x5e, 0xcf, 0x93, 0x6e, 0x16, 0x64, 0xda, 0xc6, 0xcb, 0x54, 0x1f, 0xfc, 0x57, 0x5f, 0x2c, 0x82, 0xfa, 0x16, 0x65, 0xfe, 0x4f, 0xf9, 0x59, 0x94, 0x7f, 0xdc, 0x97, 0x63, 0xb5, 0x8f, 0xc3, 0x52, 0xd2, 0xbd, 0xe9, 0x0c, 0x61, 0x15, 0x10, 0x49, 0xcd, 0xa8, 0x13, 0x50, 0xd1, 0x92, 0xac, 0xb9, 0x31, 0xdd, 0xd2, 0x78, 0xa8, 0xa2, 0x45, 0x17, 0x21, 0x71, 0x67, 0x43, 0x2a, 0xf3, 0x4d, 0x8a, 0xa5, 0xce, 0x16, 0x63, 0xc0, 0xc9, 0x7b, 0x6f, 0x28, 0x31, 0xa8, 0xfe, 0x7a, 0x7b, 0x4a, 0xd5, 0xfb, 0x2a, 0xea, 0x2f, 0x88, 0xf4, 0x79, 0x01, 0xd0, 0x20, 0x2c, 0x82, 0xc0, 0x32, 0x8a, 0xeb, 0x3f, 0xca, 0xc3, 0x7b, 0x1c, 0xca, 0x43, 0xbf, 0x44, 0xb7, 0x87, 0x10, 0x39, 0x62, 0x2f, 0x5d, 0xbf, 0xc7, 0x55, 0x2b, 0xd9, 0x35, 0x1e, 0xd9, 0xf3, 0xaf, 0x8e, 0x29, 0x61, 0x93, 0xa1, 0xfc, 0x08, 0x79, 0x97, 0x5d, 0x5b, 0x5e, 0x8f, 0xc1, 0x8a, 0x02, 0x57, 0x8d, 0xf5, 0x8e, 0x83, 0xd9, 0xe7, 0x7a, 0xbc, 0x74, 0x81, 0xae, 0x5b, 0x28, 0xf4, 0xe7, 0x37, 0x3f, 0xf4, 0x5d, 0xba, 0x45, 0x69, 0xa3, 0x3b, 0x10, 0x67, 0xce, 0x87, 0xfe, 0x60, 0xd9, 0xc1, 0x7e, 0x98, 0x48, 0x6d, 0xd2, 0xda, 0x0c, 0xc7, 0x13, 0x6a, 0xa7, 0x59, 0x75, 0x3a, 0x90, 0xcc, 0xcc, 0x60, 0xd9, 0xff, 0x4f, 0xc8, 0x0f, 0x56, 0x9c, 0x26, 0x62, 0x55, 0xfd, 0x2f, 0x05, 0x6d, 0xea, 0x09, 0xd8, 0x15, 0xcf, 0x00, 0x45, 0x1d, 0x0f, 0x7a, 0x67, 0x3f, 0x48, 0x2d, 0x72, 0xf8, 0xd9, 0x8f, 0x4f, 0x96, 0xa1, 0x8e, 0x86, 0x91, 0x0a, 0x82, 0x61, 0x1e, 0x46, 0x60, 0x4f, 0x02, 0xd9, 0x30, 0x86, 0xa4, 0x58, 0xc1, 0xec, 0x67, 0x70, 0x9b, 0x38, 0x36, 0x29, 0x35, 0x54, 0x61, 0x6c, 0x68, 0x06, 0xa7, 0xc4, 0x24, 0xd0, 0x94, 0x61, 0x62, 0x15, 0x0d, 0x62, 0x59, 0x7c, 0x29, 0x54, 0xf5, 0x9a, 0x42, 0xf5, 0x85, 0xcb, 0x4c, 0x3e, 0xb4, 0x60, 0x66, 0xa1, 0xba, 0x00, 0xaf, 0x90, 0xd3, 0x48, 0x5b, 0x3e, 0xf0, 0xb5, 0x06, 0xa9, 0xad, 0xc4, 0x47, 0xd8, 0x84, 0x57, 0x89, 0x61, 0x40, 0x5b, 0x16, 0x2f, 0xb4, 0xa8, 0x75, 0x82, 0xac, 0x28, 0xf6, 0x37, 0x24, 0x3c, 0x8b, 0x4a, 0xb8, 0x5b, 0xd9, 0x99, 0x5c, 0xfd, 0x8f, 0xeb, 0x4d, 0xb7, 0xf7, 0x30, 0x48, 0xa7, 0xcb, 0x0b, 0xf9, 0x12, 0x49, 0x8d, 0xb6, 0x4c, 0x89, 0x44, 0x6d, 0xd8, 0x0f, 0x74, 0xdb, 0xd1, 0x9d, 0xa4, 0xff, 0x88, 0x4a, 0x5c, 0xcf, 0x6f, 0xd8, 0x2e, 0x29, 0x36, 0x43, 0xf3, 0x0c, 0x33, 0x96, 0x57, 0x08, 0x07, 0x02, 0x98, 0xf3, 0x7f, 0x31, 0x8a, 0xde, 0xb8, 0xd8, 0xdf, 0x47, 0x87, 0x8c, 0xa5, 0x91, 0x17, 0xd6, 0x10, 0xb1, 0xd4, 0x89, 0x7a, 0x29, 0x88, 0x53, 0xa8, 0x3a, 0xc4, 0x93, 0x4f, 0x55, 0x82, 0x6a, 0xd6, 0xd4, 0x08, 0x15, 0x5e, 0xe7, 0x10, 0x7a, 0x00, 0xd1, 0x25, 0x00, 0x55, 0x54, 0x50, 0xa4, 0x3c, 0x69, 0xf4, 0x4a, 0xd7, 0x35, 0xf7, 0x50, 0xd7, 0x39, 0x22, 0x69, 0xfa, 0xc9, 0xcb, 0xa9, 0xd1, 0xbf, 0xb1, 0xdc, 0xc7, 0x70, 0x27, 0x1c, 0x5f, 0xdf, 0x75, 0xa3, 0xbd, 0x31, 0x7b, 0xdd, 0x68, 0x61, 0x97, 0xc1, 0x4e, 0x35, 0xc9, 0x62, 0x09, 0x71, 0x15, 0xc1, 0x60, 0x4a, 0x29, 0xe6, 0x11, 0x1d, 0x40, 0x2f, 0xce, 0x61, 0x46, 0xe7, 0x85, 0xdb, 0x3d, 0x1a, 0xe4, 0x10, 0xdf, 0xa8, 0x1d, 0x00, 0x85, 0x99, 0xe6, 0x11, 0x47, 0xb0, 0xc4, 0x4a, 0x65, 0x43, 0x8a, 0xc1, 0xe6, 0x4a, 0x1c, 0x57, 0x7e, 0xb5, 0x79, 0xa2, 0xb5, 0x03, 0xf9, 0x2b, 0x46, 0x10, 0xd3, 0xda, 0xc5, 0x2e, 0xe1, 0xae, 0x85, 0x78, 0xa8, 0xb1, 0xb9, 0x63, 0x93, 0x2c, 0xd9, 0x96, 0x7f, 0x17, 0x48, 0xfc, 0x7c, 0xd3, 0x33, 0x17, 0xd2, 0x1c, 0xbc, 0x97, 0x43, 0x39, 0x58, 0x2b, 0x90, 0x75, 0x75, 0x97, 0x3f, 0xd3, 0x61, 0x07, 0x9a, 0xfe, 0x67, 0xa2, 0xfb, 0x7f, 0x3b, 0x63, 0x47, 0x32, 0x98, 0x24, 0xb9, 0xfb, 0x27, 0xfc, 0xe1, 0xb5, 0xa3, 0xcb, 0xec, 0x6b, 0x3b, 0x13, 0x25, 0xcb, 0x37, 0x0a, 0xbc, 0xd7, 0xdf, 0xed, 0xc6, 0xde, 0x98, 0x96, 0x86, 0xab, 0x51, 0x51, 0xeb, 0xfc, 0x1d, 0xec, 0x59, 0x36, 0x21, 0x0d, 0xad, 0x56, 0xb1, 0xc8, 0x7b, 0x2b, 0xb6, 0x71, 0x99, 0xc3, 0x53, 0xaf, 0xe2, 0x23, 0xc8, 0xd2, 0x34, 0x3a, 0x96, 0x67, 0xbb, 0x18, 0xe4, 0x09, 0x72, 0x5c, 0x21, 0x7a, 0xe6, 0xeb, 0xeb, 0xf2, 0x3e, 0xe8, 0x2f, 0xb6, 0x78, 0xe0, 0x92, 0xed, 0xf5, 0x44, 0x10, 0xaf, 0x38, 0x1d, 0xe3, 0x60, 0xeb, 0xfb, 0xa7, 0x3c, 0x22, 0x2e, 0xbb, 0x32, 0xe4, 0x39, 0xea, 0xf6, 0xe8, 0x84, 0x4b, 0x52, 0x9c, 0x51, 0x65, 0xbd, 0x6b, 0xf1, 0x97, 0x2e, 0x40, 0x38, 0xb8, 0x32, 0x46, 0x2e, 0xfa, 0x3d, 0xf3, 0x07, 0x14, 0x3d, 0x44, 0x56, 0xa0, 0x75, 0x4a, 0x7d, 0xc1, 0x89, 0xe5, 0x68, 0x0a, 0xd5, 0xd0, 0x7b, 0x9b, 0x03, 0xdd, 0xc8, 0x8d, 0xdd, 0x82, 0x86, 0x91, 0x5f, 0x95, 0xbe, 0xd3, 0x11, 0x54, 0x48, 0x25, 0x94, 0xa8, 0xf6, 0x59, 0x7a, 0xab, 0x0f, 0xee, 0x5b, 0x67, 0xff, 0xf0, 0x24, 0xe1, 0x4c, 0x19, 0xb3, 0x56, 0xcc, 0x3c, 0xa1, 0xc4, 0x16, 0xe4, 0x5f, 0xac, 0x36, 0x38, 0x85, 0x16, 0xa5, 0x21, 0x66, 0xd7, 0x78, 0xaf, 0xe8, 0x0f, 0xd7, 0xb9, 0x93, 0xf5, 0xb1, 0xc4, 0xe7, 0xd7, 0xae, 0x26, 0xf3, 0x5c, 0x65, 0x6c, 0x23, 0x0d, 0xd0, 0xf8, 0x5a, 0x13, 0xfc, 0xef, 0x40, 0x42, 0x05, 0x52, 0xde, 0x57, 0x42, 0x6a, 0x68, 0x7e, 0xbd, 0x6a, 0x59, 0x18, 0xe6, 0x50, 0xc5, 0xba, 0x88, 0x0c, 0xeb, 0x79, 0xfb, 0xe4, 0x0b, 0x65, 0x9c, 0x17, 0x77, 0x53, 0x7a, 0xc0, 0xeb, 0xe0, 0x52, 0xfe, 0x21, 0xb2, 0xbe, 0x52, 0xa1, 0x01, 0xa9, 0x48, 0xd7, 0x56, 0x06, 0x5a, 0x67, 0x93, 0xc1, 0x11, 0xc5, 0x34, 0xf6, 0x6d, 0x00, 0xd4, 0x62, 0x87, 0xde, 0xf3, 0x17, 0x75, 0x2e, 0xf6, 0x73, 0x6e, 0x5a, 0x6f, 0x52, 0x2e, 0x3c, 0x9f, 0x83, 0x9c, 0x32, 0x3a, 0x79, 0xab, 0x75, 0x69, 0x43, 0x7e, 0xa6, 0x15, 0xbf, 0xcf, 0xaa, 0x63, 0x0a, 0x91, 0xb8, 0x7b, 0x3a, 0xd4, 0xb0, 0x8e, 0x50, 0xea, 0xaf, 0x17, 0x68, 0xc8, 0xe0, 0x61, 0x33, 0xae, 0x95, 0x49, 0xa7, 0x0b, 0x96, 0x45, 0xf5, 0x9b, 0xb8, 0xa5, 0xbc, 0xd2, 0xb2, 0x19, 0x7c, 0x7d, 0x2d, 0x74, 0x4d, 0xa7, 0x1a, 0xaf, 0xd1, 0xb9, 0x48, 0x31, 0x67, 0xe6, 0x36, 0x4d, 0xa1, 0xc6, 0x26, 0x0d, 0xf9, 0x41, 0x72, 0x2e, 0xbf, 0xaf, 0x23, 0x6b, 0x56, 0x3d, 0xc0, 0xff, 0xa0, 0x93, 0x64, 0x65, 0xb7, 0xb4, 0x13, 0x62, 0xde, 0x25, 0x4e, 0x45, 0xb7, 0x51, 0xe5, 0x6e, 0xb6, 0x2c, 0x0d, 0x0d, 0xd5, 0x17, 0xb2, 0x2c, 0x89, 0x04, 0x0f, 0xf0, 0xf5, 0xda, 0x7b, 0x1b, 0x5e, 0x1b, 0x86, 0xd6, 0xe0, 0xc4, 0x44, 0xae, 0x5f, 0x74, 0xe9, 0xdc, 0xc0, 0xd1, 0x96, 0xc9, 0x58, 0x27, 0x73, 0xd1, 0xa4, 0x53, 0xfe, 0x47, 0x3b, 0xe0, 0xa3, 0xba, 0x02, 0x6f, 0x8c, 0x77, 0x9f, 0x5c, 0xba, 0x4f, 0x30, 0x9e, 0x55, 0x9b, 0x3c, 0xef, 0x40, 0x7d, 0xe9, 0x2e, 0xf1, 0x68, 0x70, 0x01, 0x80, 0xe2, 0xcf, 0xbe, 0xfd, 0x88, 0xbe, 0x8c, 0x07, 0x53, 0xe3, 0xc5, 0x9a, 0x1b, 0x49, 0x9f, 0x29, 0x59, 0x0f, 0x0c, 0xed, 0x31, 0x5d, 0xde, 0x7c, 0xb0, 0x9c, 0x2f, 0x9d, 0x52, 0xe7, 0x00, 0x5b, 0xc7, 0xbc, 0x20, 0x58, 0xf6, 0xf8, 0x50, 0x64, 0x43, 0x02, 0xa4, 0x4e, 0x0d, 0x46, 0x2c, 0xfa, 0x7b, 0xe5, 0xd4, 0xb4, 0x79, 0xaa, 0x89, 0xc4, 0xfd, 0x41, 0x9d, 0x43, 0x8f, 0xa3, 0x6d, 0x2d, 0x08, 0xd5, 0x41, 0xb7, 0x9a, 0xd2, 0x73, 0xe2, 0x10, 0xc6, 0xd4, 0x50, 0x57, 0x7c, 0x4b, 0x56, 0x3e, 0x1a, 0xbf, 0x54, 0x7a, 0x0c, 0x37, 0x41, 0xed, 0x3e, 0x40, 0x8a, 0x28, 0x8e, 0x90, 0x1d, 0x2e, 0x81, 0xe8, 0xc0, 0x7a, 0x34, 0x3f, 0xa8, 0x44, 0x96, 0x1c, 0x47, 0x01, 0xd5, 0x44, 0x65, 0x29, 0x16, 0x95, 0x72, 0x3c, 0x69, 0x32, 0x1b, 0x07, 0xfc, 0xe0, 0x1b, 0x24, 0x8f, 0xb0, 0x54, 0xc0, 0x27, 0xdf, 0x1e, 0xa0, 0x07, 0xfa, 0xdf, 0x66, 0xdc, 0x45, 0xdc, 0x11, 0x38, 0x5e, 0x4e, 0xc4, 0x41, 0x1e, 0xb9, 0xc8, 0xab, 0xc0, 0x79, 0xd3, 0xe3, 0x45, 0x9d, 0x8b, 0x8d, 0x16, 0xf9, 0x46, 0x31, 0xec, 0x77, 0x14, 0x31, 0xed, 0xae, 0xff, 0xff, 0x18, 0xb6, 0x91, 0x8c, 0xe2, 0x3a, 0x97, 0x04, 0x21, 0xce, 0x25, 0xb8, 0x2a, 0x83, 0xda, 0x5c, 0x36, 0xb9, 0x65, 0x72, 0x0b, 0x35, 0x48, 0x06, 0xd8, 0x74, 0xdc, 0x9c, 0x60, 0x3e, 0x96, 0x67, 0x5a, 0x7e, 0x88, 0xbb, 0x18, 0x50, 0x2b, 0xc5, 0x68, 0x5c, 0x5b, 0x7a, 0xb8, 0x63, 0xa3, 0xcd, 0x7d, 0x17, 0xbb, 0x25, 0xd5, 0x30, 0x4f, 0x0e, 0x6a, 0xbc, 0x02, 0x2e, 0x9a, 0xb6, 0xb3, 0x7c, 0xd6, 0xdb, 0xff, 0xac, 0x48, 0xb9, 0x07, 0xed, 0xb9, 0x09, 0x73, 0xd7, 0xb1, 0x3e, 0xb7, 0x9f, 0xe0, 0x5e, 0x94, 0x8e, 0xbc, 0x11, 0xe2, 0xb1, 0x6c, 0xf8, 0x8e, 0xd1, 0xe5, 0x3f, 0xdf, 0xa5, 0x53, 0x76, 0xfd, 0x47, 0xba, 0x9c, 0xb3, 0xe5, 0xdd, 0x7d, 0x74, 0xb9, 0x5f, 0x3f, 0x9c, 0x3b, 0x28, 0x37, 0xf9, 0x95, 0x0a, 0x01, 0x8a, 0x57, 0xa4, 0xcf, 0x86, 0x6c, 0x87, 0x01, 0xa0, 0x4d, 0x98, 0xf6, 0x8a, 0x74, 0xb6, 0x22, 0xb8, 0x14, 0x9c, 0x61, 0x66, 0x07, 0x08, 0x8b, 0xdc, 0x07, 0x1d, 0x49, 0xf1, 0x22, 0x05, 0x27, 0xce, 0x68, 0xdc, 0xea, 0xf4, 0xe7, 0xc9, 0x23, 0x81, 0xd9, 0x6e, 0x04, 0xae, 0x1b, 0x83, 0x73, 0x9d, 0xe1, 0xbd, 0x5d, 0x52, 0xa9, 0xf5, 0x4d, 0xff, 0x6d, 0x86, 0x3d, 0x84, 0x1d, 0xf7, 0xac, 0x36, 0x4c, 0xda, 0xf0, 0xdf, 0x2a, 0xf3, 0xce, 0x07, 0xb2, 0x9d, 0x48, 0x72, 0x24, 0x6a, 0xb6, 0xea, 0xb6, 0x0a, 0x18, 0x3f, 0x86, 0x6e, 0xab, 0x8b, 0xd4, 0x2c, 0xba, 0xba, 0x6e, 0x26, 0xb7, 0x4a, 0x6b, 0x67, 0x8a, 0x50, 0x1c, 0x4d, 0x29, 0xbc, 0x40, 0xed, 0x69, 0xdd, 0x77, 0xb3, 0x14, 0x28, 0xfa, 0x49, 0x3b, 0x35, 0x88, 0xba, 0xcd, 0x0a, 0xa4, 0xd8, 0x69, 0x9c, 0xfd, 0xdb, 0x71, 0x93, 0x2e, 0x4a, 0x60, 0x4e, 0xa7, 0x1f, 0x5d, 0x27, 0xeb, 0x26, 0x10, 0xf8, 0xfd, 0xa6, 0xb4, 0xde, 0x14, 0x43, 0x6d, 0x3c, 0x96, 0x23, 0xdc, 0x03, 0x44, 0x50, 0xf1, 0x31, 0xb2, 0x5d, 0x01, 0x98, 0xfb, 0x4d, 0x19, 0xe1, 0xb2, 0xb0, 0x91, 0xd0, 0x1c, 0x0f, 0xe4, 0xca, 0x9c, 0x8a, 0xbf, 0x94, 0x6e, 0xc0, 0x57, 0x5d, 0x98, 0xef, 0x00, 0xff, 0x1e, 0x5c, 0xfc, 0x82, 0x76, 0xf6, 0x90, 0xe1, 0x3b, 0x36, 0x5d, 0x11, 0x26, 0x49, 0xee, 0x40, 0x39, 0x71, 0x8e, 0x5b, 0x3d, 0xa9, 0x5c, 0xd2, 0x6f, 0x88, 0xa1, 0x9f, 0x77, 0x67, 0x60, 0x85, 0x99, 0xc6, 0x2f, 0x95, 0x2f, 0xec, 0x46, 0xf7, 0x57, 0xce, 0xd6, 0xe7, 0xe9, 0x32, 0x9c, 0xfe, 0xac, 0x14, 0xb5, 0xb3, 0xc9, 0x49, 0xb4, 0x21, 0x7f, 0x62, 0xf2, 0x0b, 0x19, 0xd3, 0x25, 0x1d, 0x1d, 0x55, 0x34, 0x74, 0xc7, 0x88, 0x4a, 0x61, 0xb5, 0xdd, 0x2a, 0x6a, 0xe4, 0xb3, 0xc2, 0x92, 0xdb, 0xc0, 0x02, 0xdb, 0x26, 0xb3, 0xee, 0x08, 0x06, 0x17, 0xf2, 0xa7, 0x67, 0x7b, 0x76, 0x4f, 0x12, 0xd0, 0xb3, 0x27, 0x24, 0x12, 0xc5, 0xa7, 0xbf, 0x2b, 0x01, 0xa3, 0xff, 0x14, 0x88, 0x85, 0x30, 0x3d, 0x1c, 0xda, 0x3e, 0x2f, 0x33, 0x10, 0x6c, 0x70, 0x4a, 0x7d, 0x49, 0xa6, 0x7c, 0xa4, 0xe1, 0x00, 0x53, 0xb4, 0x30, 0xd2, 0xde, 0x52, 0xdc, 0x7f, 0x04, 0x98, 0x23, 0x9c, 0x17, 0x5e, 0x11, 0x52, 0xad, 0xb8, 0xf7, 0x04, 0xab, 0xbf, 0x1a, 0x32, 0xa2, 0x95, 0xa8, 0x9e, 0x5f, 0xa3, 0xf0, 0xad, 0xbd, 0x25, 0xd1, 0x0f, 0xbe, 0xe9, 0x73, 0xa2, 0xda, 0x53, 0x36, 0x94, 0x97, 0xa5, 0xe8, 0xc9, 0x5a, 0x7d, 0x3b, 0x7c, 0x7d, 0xa0, 0x76, 0x28, 0xa1, 0xf5, 0x6a, 0xa9, 0x46, 0xd5, 0xa8, 0x9e, 0x99, 0x82, 0xf1, 0x13, 0x8c, 0xf4, 0xee, 0x5d, 0x2c, 0xdc, 0x21, 0x44, 0x30, 0xe3, 0x1c, 0x68, 0xcd, 0x32, 0xf1, 0xdd, 0xd2, 0x38, 0xe9, 0x19, 0xf0, 0xa7, 0x79, 0x10, 0x59, 0xc0, 0x71, 0x9d, 0x8e, 0xd1, 0x77, 0x24, 0x71, 0xfc, 0xb4, 0x76, 0xa2, 0x39, 0xcd, 0xf4, 0x08, 0x9e, 0x15, 0xf8, 0xae, 0xdf, 0x01, 0x70, 0xd1, 0x11, 0xdc, 0xcc, 0x37, 0xb3, 0xbb, 0x1b, 0xc2, 0xee, 0xb4, 0x70, 0x44, 0x1c, 0x4b, 0x8b, 0x95, 0x88, 0x2d, 0xb5, 0xe3, 0x74, 0x21, 0xec, 0x4a, 0x61, 0x3b, 0x40, 0xa4, 0x8a, 0x52, 0x7d, 0xa3, 0xb2, 0xb5, 0x0a, 0x1d, 0x1f, 0x1a, 0x11, 0xa6, 0xe7, 0xd7, 0xe0, 0x64, 0x6a, 0x55, 0x90, 0x1f, 0x20, 0xc1, 0xe4, 0x98, 0x95, 0x04, 0x73, 0x1c, 0xb1, 0xf6, 0x0a, 0x58, 0x3d, 0xce, 0x4c, 0x6f, 0xa3, 0xde, 0x9b, 0x4a, 0xf5, 0x7d, 0x3c, 0x30, 0x31, 0x44, 0xb5, 0x96, 0xc4, 0x7d, 0x7a, 0x38, 0x4c, 0xd8, 0xc9, 0x68, 0xa2, 0x60, 0xd3, 0xa6, 0x18, 0xae, 0x1c, 0x72, 0xff, 0x5c, 0x24, 0x5e, 0x6d, 0xbd, 0x47, 0x67, 0x3d, 0xcb, 0xe2, 0x85, 0x56, 0x61, 0xb7, 0x81, 0x31, 0xab, 0x93, 0x07, 0x95, 0xda, 0x2e, 0xfc, 0xa5, 0x1c, 0x52, 0x11, 0x1d, 0xcb, 0x3f, 0x99, 0xd9, 0xe4, 0x4f, 0x98, 0x97, 0xbc, 0xd6, 0x1c, 0xfd, 0xee, 0x4c, 0xd0, 0xde, 0x98, 0xae, 0xce, 0xb9, 0xc7, 0x21, 0xb5, 0x82, 0x2f, 0xd9, 0xfb, 0xa5, 0x20, 0x39, 0x85, 0x49, 0xb5, 0x3b, 0x75, 0xd1, 0x4f, 0x13, 0x44, 0xa9, 0x41, 0x0f, 0x10, 0x3f, 0xcd, 0xc2, 0x37, 0x4f, 0x50, 0x61, 0x24, 0x64, 0xb9, 0x6d, 0x69, 0x9c, 0x3f, 0x92, 0x0e, 0xab, 0x54, 0xd0, 0x29, 0x22, 0xd4, 0xd8, 0xaf, 0xf2, 0x83, 0xb9, 0x8a, 0x2b, 0xb6, 0xbb, 0xec, 0x0a, 0x50, 0x8b, 0xe2, 0x33, 0xf0, 0x99, 0x2c, 0x3b, 0x69, 0xbf, 0x4c, 0x69, 0x73, 0x23, 0xdd, 0xbe, 0xa0, 0x5e, 0x26, 0x32, 0x91, 0xde, 0xef, 0x41, 0x69, 0x88, 0x93, 0xa6, 0x82, 0xa2, 0x57, 0x67, 0x5f, 0xf1, 0xfa, 0x11, 0xe2, 0x1e, 0x8e, 0x45, 0xbf, 0x5f, 0x86, 0x73, 0x31, 0x53, 0x0f, 0xe6, 0xec, 0x2d, 0xa4, 0x01, 0x52, 0x14, 0xdc, 0xc8, 0xe9, 0xca, 0x87, 0xa2, 0x0d, 0x8c, 0xfa, 0x5c, 0xe2, 0x3a, 0xa7, 0x72, 0x8d, 0xb8, 0xf1, 0x8a, 0xa4, 0x94, 0x3e, 0x42, 0xe2, 0xe9, 0x4d, 0x2b, 0x20, 0x83, 0xca, 0x15, 0x80, 0x43, 0x1f, 0x8e, 0xec, 0xc5, 0x8e, 0xa5, 0xbf, 0x41, 0x7c, 0xf4, 0xc1, 0xaf, 0x10, 0xdd, 0x59, 0x2f, 0xfd, 0x13, 0xfe, 0xa7, 0x9c, 0x5c, 0xef, 0xae, 0x3e, 0x96, 0x24, 0xa9, 0xc0, 0xf8, 0x84, 0x33, 0x60, 0x9b, 0x58, 0xc3, 0xce, 0x39, 0x00, 0x88, 0x87, 0x34, 0xe4, 0x98, 0x5e, 0xda, 0xae, 0x4a, 0x5b, 0xe7, 0xb7, 0xe0, 0xc9, 0x4b, 0xbe, 0x6a, 0x8b, 0x2e, 0xe0, 0xe7, 0xaf, 0x32, 0xc4, 0xac ],
+const [ 0x54, 0xad, 0x09, 0xea, 0xd6, 0x15, 0x40, 0x36, 0x63, 0x64, 0xb6, 0xf3, 0x11, 0xe3, 0xd9, 0xe3, 0x73, 0x6c, 0x71, 0xc3, 0x1b, 0xda, 0x3b, 0x69, 0x5c, 0xbe, 0xd4, 0x0f, 0x55, 0x54, 0xd9, 0xef, 0x2a, 0xb5, 0x4d, 0x10, 0x95, 0x4d, 0x3b, 0x5f, 0x9e, 0x90, 0x9c, 0x01, 0xa6, 0xe9, 0x7a, 0xe8, 0xaa, 0xf3, 0x56, 0xa4, 0xc6, 0xec, 0xc8, 0x7c, 0xf8, 0x67, 0x65, 0xbe, 0x27, 0x40, 0xe5, 0x53, 0x64, 0xd5, 0x86, 0x96, 0x6f, 0x73, 0xab, 0x67, 0x7d, 0x0f, 0xc9, 0x7a, 0x38, 0x37, 0x83, 0xf5, 0x08, 0x48, 0x14, 0x3b, 0x91, 0xe0, 0xee, 0x02, 0x7d, 0x96, 0xa0, 0xac, 0x7b, 0xe9, 0xfd, 0xd4, 0x87, 0x77, 0x7b, 0x27, 0x6d, 0x70, 0xd9, 0x75, 0x88, 0x49, 0x05, 0x07, 0xd0, 0xb5, 0x3c, 0x34, 0x14, 0xd1, 0x73, 0x2f, 0x83, 0x9e, 0xf6, 0x23, 0x71, 0xb5, 0x4f, 0x82, 0x58, 0x36, 0x69, 0x9a, 0x1d, 0x02, 0xf5, 0x69, 0x95, 0x2a, 0x0d, 0xb2, 0x48, 0xa7, 0x17, 0x50, 0x75, 0x4b, 0xed, 0xcb, 0x56, 0xf7, 0x3b, 0x29, 0xa4, 0x0f, 0x28, 0x06, 0x5e, 0x2b, 0x38, 0xe7, 0xc7, 0x0f, 0x70, 0xcc, 0xae, 0xde, 0xbc, 0x04, 0xf1, 0x8a, 0x8f, 0x45, 0x44, 0x8f, 0xc9, 0xfc, 0x2f, 0xe1, 0xdd, 0xe2, 0x56, 0x22, 0x33, 0xd0, 0xfd, 0x19, 0xcb, 0xd4, 0xcb, 0x60, 0x24, 0x84, 0xce, 0x5c, 0x5c, 0x92, 0xc0, 0x72, 0x98, 0xa1, 0x89, 0x78, 0xa6, 0x57, 0x04, 0x6a, 0xe1, 0xb4, 0x06, 0x5f, 0x55, 0xa2, 0x9d, 0xbb, 0x24, 0xcd, 0x95, 0xa5, 0x29, 0xb4, 0x41, 0xbc, 0xda, 0x01, 0x78, 0x05, 0x73, 0x15, 0xdd, 0x28, 0x51, 0xe8, 0x63, 0xdd, 0x9b, 0x10, 0x11, 0xa1, 0x28, 0x1f, 0x03, 0xad, 0x9d, 0x32, 0xb2, 0x28, 0xd6, 0xc7, 0x75, 0x9c, 0x88, 0xcf, 0x47, 0xa7, 0x24, 0x05, 0xca, 0xf3, 0xfe, 0x7d, 0x8c, 0x67, 0xae, 0x80, 0x89, 0x9f, 0xb6, 0x97, 0xf2, 0x9a, 0x66, 0xe6, 0x2d, 0xb3, 0xfd, 0xbb, 0x1d, 0xd3, 0x11, 0x67, 0xa3, 0xe4, 0x31, 0x4d, 0x65, 0x89, 0xc8, 0x38, 0xce, 0x0c, 0x44, 0xf2, 0x56, 0x98, 0x78, 0x12, 0x03, 0xa8, 0x3f, 0x15, 0x2f, 0xbf, 0x63, 0xb0, 0x8d, 0x5a, 0xbd, 0x65, 0x67, 0x22, 0x9d, 0x55, 0x29, 0x67, 0x6c, 0x55, 0x23, 0xca, 0x8f, 0x43, 0x8b, 0x39, 0x8f, 0x9b, 0xc1, 0x21, 0x77, 0x45, 0xd7, 0xde, 0x7e, 0xb1, 0x51, 0x77, 0xe6, 0x26, 0x29, 0x88, 0x24, 0x57, 0x17, 0x7f, 0x41, 0x38, 0x0f, 0x0b, 0x80, 0x0f, 0x0a, 0xd2, 0x41, 0xce, 0x09, 0x63, 0x25, 0xa0, 0x57, 0x6b, 0x73, 0xc2, 0x0f, 0x2b, 0xbb, 0x94, 0xdf, 0x29, 0xb9, 0xf0, 0x0b, 0x26, 0x7b, 0xba, 0xb5, 0x51, 0xc6, 0xb8, 0x5b, 0xba, 0xb7, 0xa4, 0xa1, 0x09, 0xa6, 0x80, 0x51, 0x70, 0x4f, 0x2a, 0xa0, 0xde, 0x34, 0x30, 0xb3, 0x76, 0x3d, 0xe5, 0x61, 0x3f, 0xa2, 0xb5, 0x3b, 0x1d, 0x0a, 0xb5, 0xc9, 0x00, 0xf5, 0x7e, 0x17, 0x5b, 0x57, 0x3c, 0x70, 0xd8, 0x85, 0x02, 0x6a, 0x4a, 0x55, 0x61, 0x23, 0xe2, 0x81, 0x38, 0xc9, 0xa7, 0x4d, 0xcd, 0x60, 0x20, 0x6a, 0x1d, 0xbf, 0x53, 0x19, 0x71, 0xdc, 0xf4, 0x94, 0x32, 0x4a, 0xd6, 0xa9, 0xfe, 0x00, 0xa5, 0xa8, 0xfb, 0x5c, 0xd7, 0x7f, 0x6c, 0x68, 0xe0, 0x24, 0x82, 0x5b, 0xa5, 0x33, 0x74, 0x63, 0x34, 0xd9, 0xd2, 0xa1, 0xb2, 0xf0, 0x16, 0x75, 0x94, 0x6b, 0x7c, 0xfd, 0x13, 0xf5, 0x13, 0xd8, 0xd9, 0xd5, 0x14, 0x30, 0x01, 0x15, 0x73, 0xf7, 0x3e, 0xe3, 0xb5, 0x70, 0x5a, 0x37, 0x01, 0xf2, 0xe3, 0xb6, 0x79, 0xe9, 0x21, 0xd7, 0xcb, 0x1d, 0x4a, 0x44, 0x02, 0x37, 0xf9, 0x83, 0xa3, 0x81, 0xdd, 0xd5, 0xf5, 0xed, 0xae, 0x5e, 0xa0, 0x59, 0x66, 0x87, 0x79, 0x11, 0xad, 0xa1, 0x9d, 0x95, 0x95, 0xcb, 0xbd, 0x9d, 0x87, 0x15, 0xb8, 0x5b, 0x7e, 0xe5, 0x6f, 0x00, 0x72, 0x9a, 0xd5, 0x81, 0x18, 0x70, 0x45, 0x9b, 0xc8, 0xa3, 0x19, 0x15, 0xbe, 0xd8, 0x78, 0x45, 0x86, 0xb8, 0x6f, 0xd5, 0xb2, 0xde, 0x43, 0xc7, 0xce, 0xf3, 0x06, 0xb7, 0x96, 0x17, 0x69, 0x60, 0x66, 0x83, 0xd1, 0x62, 0xf1, 0x6d, 0xad, 0x43, 0x36, 0x2c, 0x06, 0xb3, 0xb0, 0x9d, 0x57, 0x14, 0xcd, 0xc5, 0xa0, 0x39, 0xa2, 0xb8, 0xb6, 0x6e, 0xdd, 0xb9, 0xdd, 0xb9, 0xfb, 0xa2, 0x98, 0x60, 0xbb, 0x87, 0xc0, 0xab, 0xd2, 0x96, 0xd4, 0xeb, 0xe0, 0x41, 0x90, 0xbb, 0xa3, 0xa0, 0xc1, 0x86, 0x6a, 0x10, 0x57, 0x4a, 0xcd, 0x21, 0xbc, 0x9b, 0x9c, 0xaf, 0x64, 0xea, 0x15, 0x4e, 0xa6, 0x07, 0x5a, 0xec, 0xca, 0xe5, 0x22, 0xb1, 0x63, 0x9e, 0xae, 0x2a, 0xdf, 0xb6, 0xff, 0xa7, 0x5c, 0xa4, 0x46, 0xe1, 0xbd, 0x8e, 0x9c, 0xe0, 0xfd, 0x55, 0xf3, 0x1c, 0xc4, 0xd1, 0x4c, 0xe3, 0x38, 0x5e, 0x2b, 0xfa, 0x16, 0x97, 0x48, 0x87, 0x01, 0x61, 0x88, 0x2e, 0x1a, 0x2c, 0x2b, 0x7b, 0xd0, 0x75, 0x47, 0x80, 0xfa, 0x8f, 0x75, 0xbf, 0x23, 0xa4, 0xca, 0x4a, 0x24, 0xf7, 0x09, 0x28, 0xf9, 0x6b, 0x16, 0xfb, 0xcd, 0x49, 0xae, 0xe0, 0x57, 0x3e, 0x56, 0x97, 0x69, 0xa3, 0x91, 0xe4, 0xc6, 0x01, 0x56, 0x34, 0x35, 0xd5, 0xc1, 0x84, 0xd3, 0x90, 0x09, 0x7f, 0xad, 0xe2, 0xb2, 0xe6, 0x8e, 0x38, 0x04, 0x35, 0x16, 0x84, 0xbb, 0x84, 0x0c, 0x3c, 0x00, 0xab, 0xf5, 0xa5, 0x98, 0xa9, 0xe6, 0x51, 0x5c, 0x47, 0x96, 0xe6, 0xe9, 0xf8, 0xb7, 0x22, 0x98, 0x04, 0x87, 0x1c, 0xb1, 0xe5, 0xa2, 0xcd, 0xdb, 0xf1, 0x1a, 0xce, 0xd7, 0x3a, 0xc9, 0x63, 0x6e, 0xb3, 0xe6, 0xb9, 0xa8, 0x94, 0xd7, 0x6c, 0x3f, 0xff, 0x46, 0x4c, 0x53, 0xe3, 0x77, 0x61, 0x5f, 0x21, 0xd9, 0x2d, 0x6c, 0xed, 0xdb, 0x30, 0x85, 0x77, 0x00, 0xb2, 0x6a, 0xcb, 0x36, 0xbc, 0x89, 0xf6, 0x64, 0x68, 0x29, 0x6b, 0x42, 0x5a, 0xe9, 0xa5, 0x6d, 0x8f, 0x69, 0x0d, 0xbb, 0x56, 0x47, 0x1d, 0xcb, 0x9b, 0x4d, 0xc6, 0xe1, 0x6b, 0xe8, 0x0f, 0xf1, 0xb5, 0xdc, 0x00, 0xfa, 0x4e, 0x37, 0xbe, 0x96, 0x38, 0x83, 0xf7, 0xce, 0x24, 0x40, 0x80, 0x32, 0x35, 0x92, 0x3d, 0x2a, 0x07, 0x36, 0x42, 0x87, 0xf0, 0xba, 0x37, 0x5d, 0x86, 0xee, 0x01, 0x15, 0x61, 0x96, 0x9f, 0xbe, 0x22, 0x61, 0x51, 0xa4, 0xb3, 0x1f, 0x00, 0x24, 0xd1, 0x2e, 0xda, 0xbe, 0xc8, 0x35, 0x3d, 0x6c, 0x7e, 0x15, 0xd6, 0x32, 0xb3, 0x1d, 0x0a, 0xf7, 0x87, 0x7e, 0x94, 0x93, 0x3d, 0xfe, 0x70, 0x29, 0x3e, 0xf0, 0xf8, 0xb7, 0x61, 0x63, 0x4e, 0xeb, 0x69, 0x9a, 0xf9, 0x39, 0xd0, 0xbc, 0xd3, 0x2a, 0xc3, 0xcd, 0x22, 0xf7, 0x6d, 0xdd, 0x05, 0x56, 0x78, 0x7f, 0x12, 0x94, 0xd1, 0x7d, 0x3d, 0xe4, 0xac, 0xca, 0xfb, 0xf7, 0xc9, 0xb8, 0xa8, 0xcc, 0xf5, 0x6b, 0x26, 0xca, 0xd3, 0x8e, 0xc8, 0x0c, 0xdc, 0x44, 0x6e, 0xfc, 0xa5, 0x62, 0xf1, 0x23, 0x60, 0xdb, 0xc1, 0x3f, 0xa6, 0x7c, 0xcc, 0x96, 0x74, 0xd9, 0xa2, 0x8b, 0x73, 0x87, 0xd7, 0x6f, 0x7c, 0x8b, 0xa9, 0x99, 0x5b, 0x13, 0xe3, 0xb9, 0xd3, 0x64, 0x02, 0x69, 0xe3, 0x14, 0x95, 0x05, 0x48, 0x79, 0xea, 0xbd, 0x43, 0x61, 0xe6, 0xe8, 0x9c, 0x03, 0x35, 0x9b, 0xe7, 0x36, 0xa4, 0x7b, 0x06, 0xe1, 0xca, 0xcf, 0xef, 0xb3, 0xee, 0xda, 0xb0, 0x14, 0x25, 0x67, 0xb0, 0x5b, 0xbb, 0xa5, 0x37, 0x41, 0xd4, 0x35, 0x30, 0x95, 0x53, 0x82, 0x2e, 0x32, 0xfb, 0x51, 0xae, 0x2f, 0xd4, 0x99, 0x9c, 0x55, 0xd1, 0x94, 0x18, 0xd6, 0xaf, 0x16, 0x79, 0x3b, 0x20, 0x1e, 0x92, 0x9f, 0x29, 0xaa, 0x35, 0x1b, 0xc9, 0xd0, 0xf6, 0x81, 0xdb, 0x0b, 0x31, 0x4d, 0x3d, 0xd3, 0x4f, 0xd8, 0x32, 0x70, 0x44, 0xcf, 0x05, 0x0f, 0x5c, 0xe4, 0xf0, 0x16, 0x38, 0xc3, 0x3b, 0xb5, 0x13, 0x48, 0xa8, 0xbd, 0x4b, 0xef, 0x0f, 0xb6, 0x1c, 0x8c, 0x46, 0x2c, 0xae, 0x3c, 0x43, 0x49, 0x52, 0x9b, 0x85, 0xa9, 0x08, 0x37, 0xb0, 0x69, 0x46, 0x45, 0x77, 0x81, 0xf4, 0x93, 0xbe, 0x54, 0xbb, 0xbe, 0x00, 0x86, 0x7f, 0xa5, 0xef, 0x0e, 0x2a, 0x1d, 0x5b, 0x8c, 0xac, 0xe7, 0x55, 0xdc, 0x40, 0xdf, 0x94, 0xeb, 0xf0, 0x75, 0x18, 0xc9, 0x5b, 0x61, 0x0c, 0x00, 0xb6, 0x93, 0xf1, 0x25, 0x11, 0x69, 0xf9, 0xac, 0xdb, 0x25, 0xb1, 0x00, 0xa9, 0x9e, 0xe3, 0xd4, 0x33, 0x36, 0xbb, 0xb3, 0x9f, 0x0b, 0x28, 0xdf, 0x03, 0x72, 0x85, 0x58, 0x25, 0xa1, 0x79, 0x3b, 0x85, 0xab, 0x1c, 0x4d, 0x9d, 0xb2, 0x5b, 0xd8, 0x67, 0x57, 0x9d, 0xb6, 0x20, 0x76, 0xa7, 0xab, 0x4c, 0x11, 0xbc, 0xf8, 0xfa, 0x89, 0x09, 0x2c, 0x49, 0x14, 0x41, 0x3e, 0x2b, 0x6b, 0x85, 0xd9, 0x69, 0xc3, 0x86, 0xf7, 0xe7, 0xff, 0xed, 0xb1, 0x2a, 0x24, 0xfb, 0x55, 0x17, 0x0d, 0x6c, 0xba, 0xfd, 0x60, 0xa2, 0xd0, 0xd6, 0xc0, 0xff, 0x7b, 0xca, 0x44, 0x93, 0xa2, 0xf5, 0x28, 0xf7, 0x83, 0x6a, 0xc3, 0x78, 0x49, 0x78, 0xb9, 0x78, 0xe0, 0x2c, 0x72, 0x12, 0x08, 0x16, 0xcb, 0xfd, 0xa8, 0x50, 0x0b, 0xb3, 0x65, 0xbd, 0x18, 0xd2, 0x74, 0x8f, 0xeb, 0xc2, 0xac, 0x0c, 0x41, 0x98, 0xe0, 0x91, 0x93, 0x3a, 0x6b, 0xd7, 0x49, 0xc4, 0x0c, 0x75, 0x2b, 0x2b, 0xf5, 0xa6, 0x18, 0x21, 0x1e, 0x4d, 0xfa, 0x38, 0xdf, 0x36, 0xf9, 0x49, 0xbe, 0x9f, 0xef, 0x17, 0x86, 0xf7, 0x1c, 0x30, 0x99, 0xe5, 0x1c, 0x14, 0x86, 0x8c, 0x15, 0x99, 0xde, 0x0e, 0x35, 0x8e, 0x44, 0x4e, 0x5c, 0x9f, 0xc4, 0xfb, 0x15, 0x78, 0x66, 0xca, 0xcb, 0x2e, 0x02, 0x02, 0x3a, 0xda, 0x55, 0x3e, 0x23, 0x87, 0x55, 0x6e, 0x44, 0x4e, 0xc2, 0x20, 0x87, 0xbf, 0xfe, 0xfe, 0x7a, 0x83, 0x1e, 0x97, 0xff, 0x40, 0x41, 0x62, 0x45, 0xbd, 0x20, 0xff, 0xf6, 0x47, 0xe7, 0xc1, 0xb2, 0x53, 0x44, 0x6a, 0xbd, 0x64, 0xbd, 0x35, 0xf4, 0x2f, 0x46, 0x1a, 0x06, 0xfd, 0x13, 0x4d, 0xe0, 0x52, 0xab, 0x08, 0x69, 0xcc, 0x3e, 0x8a, 0x70, 0x4d, 0x38, 0x60, 0xe2, 0x5d, 0x16, 0xe3, 0x41, 0xc9, 0x78, 0x02, 0x51, 0x90, 0x78, 0x41, 0x15, 0x00, 0x3b, 0x02, 0xf9, 0x1d, 0xc5, 0x03, 0x51, 0x42, 0x12, 0x29, 0x02, 0x0b, 0x62, 0x7c, 0x7f, 0x71, 0xd4, 0x72, 0xf8, 0x37, 0x36, 0x70, 0xce, 0x86, 0x1c, 0x8e, 0x49, 0xd4, 0x2f, 0x9b, 0x8d, 0x0a, 0xc8, 0x61, 0xca, 0xe5, 0xbe, 0x29, 0xb4, 0x9c, 0x7c, 0x82, 0x33, 0xc4, 0x56, 0x3f, 0x5b, 0x71, 0x1d, 0xbf, 0x9e, 0x9f, 0xf0, 0x71, 0x40, 0xd0, 0x56, 0x96, 0x0c, 0xf6, 0x8a, 0x49, 0x46, 0x92, 0x16, 0xbd, 0xe0, 0x1e, 0xa3, 0xc7, 0xf0, 0xa9, 0x10, 0x9c, 0x62, 0xc1, 0xc1, 0xdb, 0xea, 0x95, 0x3a, 0xce, 0x3d, 0x5b, 0xec, 0xed, 0x81, 0xf0, 0x4e, 0xa3, 0x02, 0xbe, 0x30, 0x55, 0x26, 0xe3, 0x4d, 0xa1, 0xa3, 0x90, 0x1f, 0xe3, 0xef, 0xae, 0xf7, 0xfe, 0xf9, 0xc8, 0x4c, 0x59, 0x16, 0x25, 0x53, 0x27, 0x3e, 0x34, 0xd1, 0xec, 0x78, 0x2e, 0x2e, 0x3c, 0x93, 0xf6, 0xca, 0xc6, 0x17, 0x44, 0x94, 0x92, 0x7b, 0x02, 0xd8, 0x87, 0x98, 0xf6, 0x58, 0x30, 0x5e, 0xa2, 0x9f, 0xc0, 0xc6, 0x68, 0x92, 0x53, 0x07, 0xf2, 0x48, 0x76, 0x0d, 0xd1, 0x1b, 0xea, 0x27, 0x64, 0xff, 0xa5, 0x00, 0xfc, 0x13, 0x1a, 0xd0, 0x3d, 0x76, 0xba, 0xd3, 0xc8, 0x5c, 0xbb, 0xfb, 0x17, 0x61, 0x18, 0xe2, 0xa7, 0x1d, 0xd9, 0x02, 0x5d, 0xf8, 0x94, 0x28, 0x23, 0x3f, 0x34, 0x26, 0xd2, 0x78, 0xf9, 0xc8, 0x54, 0xf3, 0xc0, 0x0a, 0x0a, 0xa2, 0x85, 0x88, 0x6b, 0x2a, 0x26, 0x36, 0xee, 0x3a, 0x69, 0x51, 0x2a, 0x1c, 0x41, 0x96, 0x3c, 0x8a, 0x4d, 0xb1, 0x6a, 0xc2, 0xa2, 0xf8, 0x06, 0xdd, 0xca, 0x59, 0x94, 0x5c, 0x0c, 0x91, 0x2f, 0x04, 0xee, 0x9f, 0x28, 0xec, 0xf9, 0x79, 0xf1, 0xd4, 0xbc, 0xfd, 0x39, 0xb8, 0x14, 0x2a, 0x59, 0xa5, 0xaa, 0x90, 0xef, 0xcc, 0xbc, 0x05, 0xc8, 0xd5, 0x21, 0x9a, 0x04, 0x75, 0x87, 0xce, 0x74, 0x43, 0x00, 0x01, 0x47, 0xc7, 0xbd, 0x2b, 0xe6, 0xd4, 0x18, 0xcd, 0x1c, 0x18, 0xd8, 0x28, 0x7a, 0xf2, 0xb1, 0xae, 0xfa, 0x83, 0x0b, 0xb6, 0xe2, 0x08, 0x05, 0x73, 0xeb, 0x67, 0xb8, 0x27, 0xa3, 0x07, 0xc0, 0x94, 0x10, 0xe5, 0xf9, 0xb3, 0x96, 0xe5, 0x86, 0xa9, 0x1a, 0x66, 0x18, 0xf7, 0x68, 0x18, 0x6c, 0xf1, 0xd2, 0x12, 0x16, 0x71, 0x1a, 0x1f, 0x7e, 0xcc, 0x93, 0x59, 0x28, 0x05, 0x82, 0xfa, 0x38, 0x41, 0xca, 0x6e, 0x35, 0x7b, 0xc9, 0xad, 0x0d, 0x79, 0x7d, 0xc7, 0x59, 0xff, 0xeb, 0xc0, 0xe3, 0x42, 0xc1, 0x9f, 0x65, 0x9f, 0x3a, 0xc2, 0x94, 0x8d, 0x42, 0x74, 0x5d, 0xd1, 0xdb, 0xc2, 0x6f, 0xf1, 0xbf, 0x8a, 0xf9, 0xea, 0x46, 0xd4, 0xb5, 0x25, 0x8b, 0x65, 0x25, 0xa8, 0xca, 0x92, 0x1d, 0x8a, 0x0d, 0x53, 0x81, 0xa9, 0x08, 0x98, 0x50, 0x9f, 0x41, 0xe0, 0xe1, 0xf1, 0x74, 0x07, 0x6d, 0x8a, 0x35, 0x5f, 0xce, 0x68, 0xd7, 0x03, 0x86, 0x96, 0x8d, 0x68, 0x03, 0x5a, 0xcf, 0x35, 0x22, 0xaf, 0xff, 0x55, 0xf1, 0xf5, 0x4d, 0x4a, 0xb9, 0xe8, 0xd8, 0xc4, 0x3c, 0xcf, 0x15, 0x72, 0x3b, 0xf5, 0x75, 0x18, 0x3b, 0x5d, 0x42, 0xe2, 0x89, 0xb2, 0xca, 0xf8, 0x7c, 0x7d, 0xc0, 0x52, 0xfa, 0x9b, 0xdf, 0xce, 0x3d, 0xed, 0xd0, 0x7f, 0xd7, 0x51, 0x4e, 0x48, 0xf4, 0xd1, 0x88, 0xaa, 0xe0, 0x1b, 0xc7, 0xdb, 0xc9, 0x31, 0x50, 0x18, 0xc5, 0x62, 0x8c, 0x3b, 0x17, 0x79, 0x66, 0x90, 0xae, 0x34, 0xf5, 0xe5, 0xee, 0xf8, 0x5b, 0xe0, 0xb3, 0xc2, 0xed, 0x96, 0x93, 0x61, 0x94, 0x58, 0x64, 0xe3, 0x72, 0xd0, 0xfe, 0x4d, 0xc9, 0x4e, 0x42, 0x8f, 0x19, 0x5c, 0x5c, 0xb6, 0x89, 0x98, 0x44, 0x64, 0x88, 0xc3, 0x8b, 0x7d, 0xb4, 0x15, 0x54, 0x24, 0xfb, 0xd3, 0xa1, 0xe6, 0x00, 0x24, 0xd0, 0x34, 0xc0, 0x21, 0x65, 0x17, 0x75, 0x2b, 0x09, 0x1f, 0xbb, 0x81, 0xd3, 0x9d, 0xf1, 0x11, 0xc7, 0x11, 0xe2, 0x8f, 0x9c, 0xe6, 0xa4, 0xc5, 0xc3, 0x5d, 0xc1, 0x2a, 0xa4, 0xc8, 0x95, 0xb5, 0x2b, 0xf8, 0xf7, 0xf3, 0x83, 0xf8, 0x1c, 0x58, 0x21, 0xfc, 0xb7, 0xd3, 0x05, 0x94, 0x65, 0xa4, 0x3c, 0x25, 0x49, 0x72, 0xaa, 0x9a, 0xf3, 0x98, 0x06, 0x57, 0x87, 0xc1, 0x26, 0x6e, 0x1b, 0xb4, 0x7d, 0x16, 0x60, 0x71, 0xe2, 0x59, 0x85, 0x7c, 0x92, 0x0c, 0x58, 0x79, 0x79, 0x04, 0xaf, 0xf9, 0xad, 0x87, 0x06, 0x94, 0x3c, 0x01, 0x69, 0x38, 0x27, 0xf8, 0x95, 0xc0, 0xae, 0x42, 0x5a, 0xc8, 0xce, 0x76, 0x43, 0xc0, 0x09, 0xa0, 0x79, 0x40, 0x65, 0x39, 0xe5, 0x9b, 0xb7, 0x56, 0x95, 0xb7, 0x21, 0x1f, 0x61, 0x1c, 0xda, 0x83, 0xce, 0x4a, 0x2d, 0x2a, 0x32, 0x50, 0xc5, 0xab, 0x19, 0x9a, 0x27, 0x00, 0xe8, 0x0b, 0x80, 0x37, 0xc0, 0x4c, 0xa1, 0x69, 0xa5, 0x63, 0x48, 0xf0, 0xe0, 0x87, 0xa1, 0xd5, 0xa1, 0x32, 0x0c, 0x88, 0xe9, 0x79, 0x21, 0xd4, 0xa7, 0x99, 0xf1, 0x11, 0x22, 0xd2, 0x8f, 0x9c, 0x96, 0x78, 0xd0, 0x84, 0x22, 0x47, 0x4e, 0x86, 0xe1, 0xf7, 0xb3, 0x3c, 0x58, 0x10, 0x34, 0x91, 0x10, 0x00, 0x5b, 0x78, 0x83, 0x6a, 0x0a, 0xde, 0x3d, 0xc2, 0xbd, 0xdc, 0x3b, 0x17, 0x0f, 0x32, 0x97, 0x2f, 0x80, 0xf1, 0x67, 0xd9, 0x75, 0x77, 0xe2, 0x7f, 0x80, 0xa0, 0xc4, 0xfb, 0xe2, 0x3b, 0xf4, 0xab, 0x4e, 0xbb, 0x64, 0xc8, 0xf0, 0x2f, 0x39, 0xf3, 0xae, 0x75, 0x2d, 0x11, 0xae, 0xaa, 0x31, 0x59, 0x18, 0xe4, 0x56, 0xab, 0x1d, 0x24, 0xed, 0x24, 0x38, 0x86, 0xed, 0xef, 0xb3, 0xbb, 0x96, 0x5e, 0x6e, 0xb9, 0x54, 0x39, 0xdc, 0xb1, 0xe6, 0x56, 0x4e, 0x42, 0xbf, 0x69, 0x74, 0xec, 0xad, 0x1e, 0x20, 0xc7, 0xb8, 0x65, 0x4e, 0x75, 0x4d, 0x0d, 0x62, 0x55, 0x9c, 0x95, 0xb0, 0xf9, 0x3e, 0x3f, 0x41, 0xdb, 0x1b, 0x65, 0xd4, 0x4b, 0x8b, 0x10, 0x24, 0xac, 0xbb, 0xc7, 0x69, 0xe0, 0x53, 0xa5, 0x21, 0x01, 0x55, 0xaf, 0x10, 0x52, 0x48, 0x64, 0x86, 0x75, 0x97, 0x95, 0xe0, 0xde, 0x34, 0x76, 0x51, 0x87, 0x80, 0xf6, 0xe3, 0xe5, 0x6f, 0x4c, 0xb8, 0x1c, 0xe7, 0xd2, 0x96, 0x6f, 0x6a, 0x17, 0xa3, 0xfa, 0xf5, 0x2f, 0x6c, 0xa3, 0x28, 0x4e, 0x2c, 0x4e, 0xa6, 0x96, 0x4c, 0x50, 0xbf, 0x2c, 0x26, 0x26, 0x4d, 0x91, 0x0e, 0x68, 0xdb, 0x30, 0x93, 0xf8, 0x0d, 0x33, 0x02, 0x7f, 0x3c, 0x9b, 0x2c, 0x1a, 0x60, 0x90, 0x69, 0x50, 0x33, 0xf5, 0xdd, 0x48, 0x93, 0x40, 0xfa, 0x38, 0x28, 0x89, 0x46, 0x21, 0x48, 0xe0, 0x5f, 0xba, 0x17, 0xe4, 0x3c, 0xa9, 0xf3, 0x92, 0xb5, 0xf9, 0x0f, 0x5a, 0x46, 0xc9, 0x5d, 0x78, 0x10, 0x41, 0xb2, 0x81, 0x20, 0xcb, 0x25, 0x3c, 0xf4, 0x7f, 0xb8, 0xb4, 0x3b, 0xde, 0x3a, 0x8b, 0xdd, 0xc4, 0x6b, 0x91, 0x3b, 0x98, 0x62, 0x95, 0xb8, 0xc6, 0x2c, 0x7c, 0x78, 0x6f, 0xb6, 0x90, 0x68, 0x5f, 0xec, 0x1a, 0x7e, 0x3f, 0x23, 0x32, 0x42, 0x0b, 0xb4, 0xd6, 0x8d, 0xc7, 0xea, 0x3a, 0x90, 0x6e, 0x1f, 0x5f, 0x19, 0x2c, 0x21, 0xe7, 0x12, 0xcc, 0xdb, 0x28, 0x4a, 0x74, 0x31, 0x7f, 0x79, 0x90, 0x2b, 0xe6, 0x7e, 0x0c, 0x56, 0xc9, 0xea, 0xc6, 0x67, 0x16, 0xc2, 0x43, 0x22, 0x94, 0x81, 0xa1, 0x7a, 0x75, 0x5d, 0xcc, 0xfa, 0x2e, 0xcb, 0xf5, 0x63, 0x86, 0x45, 0x40, 0x97, 0xed, 0x4b, 0xbd, 0xb5, 0x10, 0xa8, 0x9a, 0x86, 0xaa, 0xf6, 0x97, 0x18, 0x9d, 0x64, 0xb9, 0xa8, 0x41, 0xb7, 0x43, 0xc5, 0xfc, 0x8f, 0xe2, 0xb3, 0x13, 0xec, 0x28, 0x0e, 0xbf, 0xf0, 0x3b, 0xaf, 0x84, 0xe7, 0xcf, 0xd4, 0xbe, 0x84, 0x51, 0x7a, 0x7d, 0x6d, 0x65, 0x0e, 0x92, 0xfb, 0x93, 0x45, 0xea, 0x3a, 0x3d, 0x49, 0x1b, 0x38, 0xd5, 0x15, 0x3d, 0x7c, 0x4d, 0x22, 0xfb, 0xd4, 0xce, 0x43, 0xe9, 0x54, 0xac, 0xcd, 0x19, 0x9b, 0x9a, 0xfc, 0xe9, 0x58, 0x1a, 0x92, 0x1e, 0x0d, 0x38, 0xc1, 0x37, 0x13, 0x78, 0x4b, 0xfb, 0xdf, 0x0d, 0xe8, 0x55, 0x83, 0x4b, 0xe8, 0x61, 0x77, 0x5f, 0x19, 0xc7, 0x9a, 0x3e, 0xeb, 0x48, 0x74, 0xdb, 0xd2, 0x96, 0xbe, 0x9d, 0xec, 0x69, 0x24, 0x10, 0xe4, 0xcf, 0x49, 0xdb, 0x16, 0xc3, 0x0c, 0xf2, 0xf4, 0x02, 0x0a, 0x0c, 0xa8, 0x1a, 0x63, 0x58, 0xfb, 0xc4, 0xc2, 0x6b, 0x75, 0x73, 0x97, 0x7d, 0xc5, 0x2d, 0xa7, 0xd6, 0x64, 0x9a, 0xc7, 0x83, 0x76, 0x5b, 0xe4, 0x4d, 0xf1, 0x9c, 0x47, 0xec, 0x00, 0xed, 0x17, 0x77, 0xaa, 0x4d, 0x20, 0x1f, 0xaf, 0x88, 0xd2, 0x1d, 0xb2, 0xc4, 0x8d, 0xe9, 0x9d, 0x56, 0x1c, 0xad, 0x42, 0xda, 0x7f, 0xf9, 0x3e, 0x82, 0xed, 0xb8, 0x23, 0xae, 0x19, 0x63, 0xd6, 0xbd, 0xb5, 0x74, 0x35, 0x23, 0x34, 0x1e, 0xfd, 0xbc, 0xd5, 0x3b, 0xeb, 0x61, 0xdd, 0x86, 0x22, 0xb8, 0x23, 0x0a, 0xcd, 0x50, 0xd2, 0xda, 0x05, 0xed, 0x6b, 0x03, 0xf5, 0x20, 0x09, 0xbf, 0x3c, 0x1b, 0xe9, 0xeb, 0x92, 0xc4, 0x29, 0xbb, 0xaf, 0x08, 0xd0, 0xad, 0x69, 0x72, 0x0f, 0xbb, 0x1c, 0xfc, 0xc7, 0xd5, 0x4e, 0x25, 0x4a, 0x8e, 0x93, 0x43, 0x66, 0x16, 0xaf, 0x1b, 0xa0, 0x68, 0xfb, 0xaf, 0xbd, 0xc4, 0x0a, 0x57, 0x87, 0x60, 0x8b, 0x13, 0xcd, 0x5b, 0x71, 0x20, 0xac, 0xf2, 0x52, 0xc9, 0x0d, 0xf6, 0x0d, 0x80, 0x6f, 0x7d, 0xb0, 0x2d, 0xe7, 0xd9, 0x99, 0xc6, 0x64, 0xc6, 0xdb, 0x20, 0x38, 0xe7, 0xe3, 0x05, 0xd4, 0x74, 0x5b, 0x86, 0xd3, 0x2d, 0x4e, 0x92, 0x3b, 0x92, 0x8d, 0xc8, 0xff, 0x55, 0x52, 0x8a, 0xc8, 0x10, 0x24, 0x53, 0xf4, 0x34, 0xfa, 0x4a, 0xdf, 0x41, 0xa3, 0x17, 0x62, 0x3d, 0x65, 0xf5, 0x9a, 0x5f, 0xe5, 0x08, 0xeb, 0x0b, 0x46, 0xf2, 0x44, 0x03, 0x95, 0xa1, 0xa4, 0xdb, 0x65, 0x6a, 0xdd, 0xad, 0xb6, 0x5c, 0x98, 0x0f, 0x1c, 0xce, 0x99 ],
+const [ 0x04, 0xc8, 0x73, 0xc0, 0x5d, 0xaf, 0x29, 0x99, 0x23, 0xa2, 0xbf, 0xce, 0xe1, 0x93, 0xaa, 0x10, 0x4f, 0xe9, 0x07, 0x17, 0x19, 0x30, 0x83, 0xf1, 0xe2, 0x0f, 0x79, 0x9a, 0x89, 0x7a, 0x5b, 0xcc, 0xab, 0x28, 0x53, 0x18, 0x69, 0x48, 0x2a, 0x36, 0x6b, 0x70, 0x68, 0x9a, 0x24, 0xd6, 0xbd, 0x47, 0x58, 0xc2, 0x9f, 0xe8, 0xdc, 0x43, 0x35, 0x1d, 0x9e, 0x22, 0x74, 0x13, 0xe5, 0x14, 0x88, 0x57, 0xd9, 0x33, 0x75, 0xec, 0x45, 0xaf, 0xfe, 0x9b, 0x9c, 0xc1, 0xc6, 0x8a, 0x3a, 0xe1, 0xb5, 0x10, 0xed, 0x39, 0x9d, 0xc8, 0xb4, 0x59, 0x1d, 0xe4, 0xc6, 0x2c, 0xc6, 0xc4, 0xd6, 0x2b, 0x7d, 0xc8, 0x96, 0xd0, 0x20, 0x62, 0x7a, 0x4e, 0x6d, 0x6f, 0xbe, 0x7f, 0x1f, 0xc7, 0xaa, 0x1e, 0x59, 0x12, 0x15, 0x36, 0x48, 0xde, 0x28, 0xda, 0x05, 0xef, 0x64, 0x17, 0xb8, 0xd6, 0xe6, 0x27, 0x03, 0xc6, 0xea, 0xe7, 0x9e, 0xa2, 0x8f, 0x8c, 0x3e, 0x5a, 0xda, 0x91, 0xbc, 0x78, 0xfc, 0xf3, 0x73, 0xf6, 0xd8, 0xa1, 0xea, 0x53, 0xc0, 0x2e, 0xb3, 0xe6, 0x7f, 0xca, 0x92, 0x71, 0x9d, 0x70, 0xe2, 0xf9, 0xde, 0x61, 0x35, 0xd5, 0x0c, 0xd0, 0x3b, 0x06, 0xf6, 0xdf, 0xe5, 0xc6, 0xb9, 0xca, 0xc9, 0x63, 0x3e, 0x62, 0xc9, 0x4e, 0x04, 0xbe, 0xef, 0x6f, 0x20, 0x2d, 0x9c, 0xbc, 0x82, 0x6e, 0xe2, 0x0a, 0x79, 0x24, 0x2e, 0x23, 0x7a, 0x84, 0x2a, 0x18, 0x1d, 0x51, 0xe1, 0xd9, 0x68, 0x0a, 0x25, 0x02, 0x50, 0x62, 0x2d, 0xf8, 0x7d, 0xf0, 0x83, 0x35, 0x4e, 0x28, 0x1e, 0xe0, 0x1d, 0x8a, 0xca, 0xa1, 0xc4, 0x19, 0xd1, 0xb3, 0x5f, 0x0f, 0xd4, 0x3b, 0x54, 0xcf, 0xfa, 0xd8, 0x91, 0x1b, 0x4d, 0x7b, 0x15, 0x87, 0x60, 0x79, 0xb2, 0x2d, 0x35, 0xde, 0x11, 0xa3, 0x5f, 0x05, 0xf6, 0x2a, 0x64, 0x65, 0xc5, 0x28, 0x65, 0xae, 0x46, 0xd9, 0x01, 0x15, 0xa5, 0x41, 0x76, 0xeb, 0xbd, 0x65, 0x09, 0x75, 0x95, 0xba, 0xa9, 0xf8, 0x2b, 0xde, 0xcf, 0x13, 0x71, 0x86, 0xa8, 0x51, 0x96, 0xb8, 0x76, 0xff, 0x86, 0x3a, 0x34, 0x3b, 0xb4, 0x4a, 0x78, 0x4e, 0x17, 0x8f, 0x9e, 0x3c, 0x72, 0x50, 0x23, 0x99, 0xd9, 0xe4, 0x4f, 0x9d, 0x71, 0x69, 0x17, 0x7b, 0x77, 0xb9, 0x41, 0xef, 0x84, 0x9a, 0xc9, 0x16, 0x0f, 0x35, 0x84, 0x83, 0x33, 0xca, 0x03, 0x8f, 0xb2, 0xa1, 0xba, 0xf0, 0x3b, 0x44, 0x61, 0x8e, 0xe8, 0xeb, 0x9b, 0x92, 0x0b, 0x38, 0xd6, 0xbf, 0x2a, 0x24, 0x72, 0x05, 0x48, 0x3a, 0x25, 0x53, 0x66, 0x03, 0x9e, 0xae, 0x4a, 0xc1, 0x68, 0x80, 0x7f, 0x5f, 0x12, 0x32, 0x9d, 0xa9, 0x8d, 0xfc, 0xcb, 0xb9, 0xd5, 0xfc, 0x81, 0xb1, 0xd3, 0x86, 0x93, 0xb0, 0x83, 0xbc, 0x6b, 0xfe, 0x52, 0x5e, 0x95, 0x8a, 0xca, 0xe3, 0x82, 0x97, 0x70, 0xc8, 0x85, 0xb2, 0xed, 0x28, 0x22, 0xe7, 0x6d, 0x8d, 0x88, 0x34, 0x45, 0x06, 0x5c, 0x3e, 0xd8, 0x79, 0xb8, 0x43, 0xbb, 0x3b, 0x74, 0x50, 0x17, 0xde, 0xa4, 0xb4, 0x4f, 0x4a, 0x61, 0xb4, 0xe3, 0x0f, 0xcd, 0x80, 0x95, 0xfa, 0x51, 0x66, 0xca, 0xe7, 0x29, 0x46, 0x32, 0xd5, 0x23, 0x46, 0xab, 0x40, 0xa3, 0xc6, 0x63, 0xab, 0xeb, 0x97, 0x3d, 0x7c, 0x99, 0x67, 0x77, 0x0c, 0x71, 0x80, 0x89, 0xff, 0x5d, 0xb3, 0x50, 0xd1, 0xb2, 0x8e, 0x6b, 0xb2, 0xb5, 0xd6, 0xe6, 0x94, 0x5e, 0x31, 0x15, 0x82, 0x5c, 0x22, 0xc3, 0x33, 0x58, 0x3a, 0x8d, 0xdf, 0x7e, 0x8d, 0x88, 0x51, 0x3a, 0x64, 0x2a, 0x3e, 0x3f, 0x31, 0x67, 0xd5, 0xce, 0xc8, 0x1a, 0x97, 0x35, 0xcb, 0xa7, 0x69, 0x96, 0x66, 0xde, 0xe7, 0xe9, 0x3d, 0x23, 0xfc, 0x44, 0xa3, 0xcc, 0xaf, 0x5a, 0x0d, 0xcb, 0x40, 0x43, 0xc6, 0x8d, 0x74, 0x7b, 0xe4, 0x22, 0x2d, 0x2c, 0x7a, 0x9d, 0x3d, 0xb0, 0x0f, 0xbe, 0x7c, 0x51, 0x4f, 0xce, 0x19, 0x54, 0x01, 0xcb, 0x2d, 0x37, 0x39, 0xc5, 0x96, 0x36, 0xcf, 0x88, 0x02, 0x14, 0x0f, 0x7b, 0x4a, 0x17, 0xb2, 0xc8, 0x02, 0x55, 0x0e, 0xbd, 0x4e, 0x2e, 0x89, 0x73, 0xf6, 0x1a, 0x53, 0xad, 0xbd, 0xa5, 0x55, 0x02, 0xef, 0xb7, 0x64, 0x3f, 0x3a, 0x19, 0xbb, 0x07, 0xbe, 0x35, 0xa8, 0xbc, 0x67, 0x1d, 0x85, 0xa3, 0x7b, 0xcf, 0xea, 0x42, 0x6f, 0xb8, 0x21, 0x0d, 0xff, 0x76, 0xda, 0x42, 0x7e, 0xe2, 0x20, 0x12, 0x6a, 0x4e, 0x8c, 0x01, 0x43, 0x0b, 0xb9, 0x8f, 0x9d, 0x2f, 0xf7, 0x18, 0x75, 0x94, 0x44, 0xf9, 0xc1, 0x24, 0x78, 0xf4, 0x4a, 0x54, 0xbf, 0xd6, 0xbe, 0xef, 0x4c, 0x56, 0x01, 0x15, 0x4c, 0x41, 0xc5, 0x83, 0x19, 0xd4, 0x5a, 0x15, 0xb1, 0x69, 0xc7, 0x88, 0x66, 0x57, 0x19, 0x85, 0xd7, 0x13, 0xfb, 0xdb, 0x1e, 0x9b, 0x87, 0x0d, 0x4b, 0x14, 0x5c, 0x0c, 0x12, 0xb1, 0xf1, 0x45, 0xc0, 0xd8, 0x29, 0xde, 0x73, 0x80, 0x27, 0x3d, 0x8b, 0xde, 0x63, 0xcb, 0x5c, 0x40, 0xfd, 0xf7, 0x25, 0x39, 0x52, 0x7d, 0x46, 0xfe, 0xce, 0xe8, 0xad, 0x10, 0x01, 0x55, 0x92, 0x1b, 0xf4, 0x7b, 0x64, 0x1e, 0xbd, 0xe8, 0x03, 0xcd, 0x51, 0x8d, 0x2f, 0x34, 0x9a, 0x7d, 0x41, 0x9c, 0xc9, 0xf2, 0x18, 0xb2, 0xee, 0x91, 0x57, 0xe6, 0xc5, 0xef, 0xce, 0x12, 0xd3, 0x53, 0x35, 0x5c, 0xb2, 0xbe, 0x20, 0x5d, 0xaa, 0x28, 0x2f, 0x83, 0x81, 0x0d, 0x85, 0xb3, 0x93, 0x28, 0x7c, 0x33, 0x25, 0x7f, 0x97, 0xc8, 0xf6, 0x9f, 0xb9, 0x1b, 0x17, 0x29, 0x94, 0x61, 0xfd, 0x8d, 0x63, 0x3b, 0xd5, 0x16, 0xdc, 0xdb, 0x17, 0x27, 0x60, 0x69, 0x5e, 0xc4, 0x76, 0xa5, 0x77, 0x53, 0x77, 0xcd, 0xb7, 0xa4, 0x8b, 0xc1, 0x92, 0x30, 0xd3, 0x65, 0x6a, 0x9e, 0xe8, 0x47, 0xa5, 0x8c, 0x85, 0x82, 0x02, 0x8b, 0x80, 0xe2, 0x2d, 0x6b, 0xff, 0x48, 0x91, 0xba, 0xe8, 0x50, 0x6d, 0x87, 0x99, 0x32, 0x2a, 0x6b, 0xda, 0xe6, 0xec, 0xcb, 0x0f, 0x8c, 0x67, 0x57, 0xb3, 0x0a, 0xf4, 0xd6, 0x01, 0xf7, 0xe3, 0x26, 0xf4, 0xb8, 0x13, 0x7e, 0x72, 0xe8, 0xc1, 0xf7, 0xc4, 0xfe, 0x9e, 0x4b, 0x4a, 0x29, 0x24, 0xdc, 0x6d, 0x7f, 0x29, 0xf8, 0xd4, 0x57, 0xb5, 0x5b, 0xdb, 0xf3, 0x11, 0xf5, 0x41, 0x63, 0x20, 0xee, 0x20, 0xa5, 0xf2, 0xe8, 0x23, 0x11, 0x97, 0x84, 0xf3, 0xf5, 0x31, 0x27, 0xf2, 0x7c, 0x4d, 0xfe, 0x2c, 0xd4, 0x74, 0x3f, 0x8b, 0x8f, 0xfc, 0xb2, 0x4a, 0x4a, 0x24, 0x71, 0xab, 0x8d, 0x61, 0xec, 0xed, 0xf3, 0xf2, 0x2f, 0x78, 0x8b, 0xba, 0x68, 0x5c, 0x7d, 0x4f, 0xa3, 0xf9, 0xf1, 0x4f, 0xd9, 0xff, 0x2c, 0xf3, 0x29, 0x9a, 0xfc, 0xe6, 0x65, 0xe6, 0x57, 0x57, 0xd0, 0xa9, 0x3f, 0x4d, 0x26, 0x41, 0xe8, 0x3a, 0xdd, 0xdb, 0x1d, 0xd4, 0xab, 0xe6, 0xe0, 0x20, 0x48, 0xc8, 0x51, 0xcf, 0x75, 0xcf, 0xd1, 0xce, 0x3d, 0x6a, 0x66, 0x19, 0x7b, 0x99, 0x61, 0xd0, 0x9c, 0xa2, 0x3f, 0x8c, 0xa6, 0x06, 0xce, 0xf3, 0x79, 0xb3, 0x91, 0x8a, 0x56, 0x7b, 0x64, 0xcb, 0x9d, 0xc5, 0x63, 0x78, 0xdb, 0x82, 0x09, 0x2e, 0x03, 0x63, 0x95, 0x3d, 0xfc, 0x49, 0xb2, 0xb7, 0x5c, 0xfe, 0x56, 0xc7, 0x74, 0x22, 0xeb, 0x44, 0x8c, 0x68, 0xad, 0x86, 0x6f, 0x02, 0x53, 0x79, 0x2b, 0x59, 0xf1, 0xef, 0x12, 0x02, 0x1d, 0x3b, 0x04, 0xed, 0x51, 0xfb, 0xf1, 0xe0, 0x90, 0x35, 0x99, 0x24, 0x4c, 0xa6, 0x96, 0x7f, 0x88, 0x56, 0x9d, 0x62, 0x3a, 0x70, 0x01, 0x62, 0xf3, 0x51, 0x78, 0xec, 0xc1, 0xdf, 0x22, 0x35, 0x55, 0x1c, 0xc7, 0x71, 0x61, 0xfb, 0x61, 0x45, 0x44, 0x72, 0xda, 0x7e, 0xe9, 0xd0, 0x16, 0x03, 0xec, 0x51, 0x34, 0x08, 0xff, 0xef, 0x11, 0x85, 0x8d, 0x7c, 0x0e, 0xe7, 0x9d, 0xee, 0x14, 0x05, 0xf8, 0xfa, 0xd5, 0x55, 0x8e, 0xe4, 0x54, 0x60, 0x16, 0x95, 0xa7, 0x73, 0xf5, 0xee, 0xfb, 0x98, 0x61, 0x5c, 0xda, 0xc4, 0xc6, 0xac, 0xa9, 0x52, 0x68, 0x21, 0x75, 0xb0, 0x4b, 0xc4, 0xef, 0x59, 0x50, 0xfc, 0xb4, 0x03, 0xa0, 0x5e, 0xd2, 0x19, 0x4d, 0xc6, 0x88, 0x6b, 0x37, 0xa7, 0x4e, 0x25, 0x2d, 0x9f, 0x15, 0xfd, 0x55, 0x4f, 0xd0, 0xb1, 0xce, 0x69, 0x33, 0xb1, 0x93, 0x0a, 0xbb, 0x18, 0xa3, 0x4b, 0xee, 0xe1, 0x5f, 0x13, 0xe4, 0x58, 0x33, 0x2f, 0x06, 0xce, 0x78, 0xa4, 0x16, 0x91, 0x99, 0x43, 0x70, 0x1c, 0x75, 0x7f, 0x8f, 0x8a, 0x05, 0x7c, 0xd2, 0x51, 0x3f, 0x68, 0x80, 0x2c, 0x3a, 0x0e, 0x0b, 0x59, 0x92, 0xa8, 0x91, 0x05, 0x0e, 0xf5, 0xa8, 0x05, 0x80, 0x8c, 0x5b, 0xc6, 0xed, 0x70, 0x70, 0x87, 0xee, 0xe4, 0xed, 0xc5, 0x56, 0x81, 0xda, 0xf7, 0x15, 0x85, 0x47, 0x7c, 0x5d, 0x6e, 0x91, 0xd2, 0x03, 0xc8, 0xe2, 0x08, 0x27, 0x43, 0xf7, 0x76, 0x17, 0x08, 0x26, 0xab, 0x71, 0x4d, 0x9f, 0xa7, 0x88, 0x27, 0xf2, 0x4b, 0x09, 0xa0, 0xd1, 0x0d, 0xdf, 0x0a, 0x17, 0xf0, 0x53, 0x93, 0x0a, 0xb4, 0x78, 0x19, 0xdd, 0x49, 0xc6, 0x3f, 0x7a, 0x8a, 0x05, 0xc0, 0x7e, 0x28, 0x6d, 0x03, 0x84, 0xe4, 0x0b, 0xf0, 0xa6, 0x02, 0x66, 0x03, 0x41, 0xfa, 0x63, 0x9e, 0xf9, 0x70, 0x66, 0xa4, 0xfd, 0x66, 0xba, 0x43, 0x8c, 0xb1, 0x33, 0x11, 0xb9, 0xa9, 0x11, 0x5b, 0x6b, 0x25, 0x28, 0xb9, 0xa7, 0xa7, 0x3e, 0xe6, 0x12, 0xd3, 0xb5, 0xcf, 0xb1, 0x26, 0x6a, 0xea, 0xf4, 0xe4, 0xdc, 0xc9, 0xf3, 0x52, 0x91, 0xef, 0xf7, 0x26, 0xb5, 0xe2, 0x3c, 0x3c, 0x05, 0x82, 0xf5, 0x8a, 0xeb, 0x98, 0x91, 0x56, 0xea, 0xb2, 0x3d, 0xa6, 0x3d, 0x2f, 0xaa, 0xf9, 0xbb, 0x96, 0x10, 0x34, 0xfe, 0x2c, 0x73, 0xdf, 0xc4, 0xc5, 0x25, 0x91, 0x95, 0xda, 0x8c, 0xa9, 0xa7, 0xdc, 0x25, 0x3f, 0xfe, 0xc8, 0xc9, 0x5b, 0xd7, 0xfc, 0x2f, 0x64, 0x47, 0x49, 0xb3, 0xdb, 0x20, 0x49, 0x55, 0x49, 0x14, 0xf2, 0x05, 0x75, 0x1d, 0x6c, 0x1e, 0xdb, 0x1c, 0x20, 0x30, 0x5a, 0xc0, 0x12, 0x02, 0x2d, 0xa9, 0x70, 0xd7, 0x1c, 0xcd, 0x6b, 0xf1, 0xf3, 0x1b, 0x45, 0x54, 0x34, 0x5f, 0xab, 0xcc, 0x09, 0x66, 0x46, 0x31, 0x7c, 0x62, 0x8d, 0xea, 0xea, 0x8f, 0xdd, 0xb0, 0xb5, 0x17, 0xcb, 0x94, 0x3a, 0x34, 0xb9, 0x44, 0x03, 0x94, 0xa7, 0x8a, 0x3d, 0x01, 0x4c, 0x15, 0x6c, 0x41, 0x65, 0x7c, 0x5d, 0x3b, 0x4e, 0x80, 0x5c, 0x5c, 0xcf, 0x92, 0xa8, 0x39, 0x38, 0x95, 0x24, 0x76, 0xb0, 0xe4, 0x4f, 0xe6, 0xca, 0x97, 0x76, 0xf3, 0x59, 0x02, 0x29, 0x41, 0x86, 0x7f, 0xeb, 0x8e, 0x1f, 0x6e, 0x2d, 0xdd, 0x32, 0x79, 0x7e, 0xd3, 0xdb, 0x1d, 0xfc, 0x61, 0x5a, 0x65, 0x0e, 0xa3, 0x68, 0xf9, 0x55, 0x08, 0xcc, 0x58, 0xdf, 0xb4, 0x29, 0x62, 0x9e, 0x22, 0x1a, 0x19, 0x19, 0x0e, 0x80, 0xa8, 0x62, 0x92, 0x1b, 0xa5, 0x48, 0x8f, 0x58, 0x93, 0xcd, 0x4e, 0x6a, 0xab, 0xdb, 0x67, 0x9c, 0xdc, 0x32, 0xe2, 0xe6, 0x10, 0xa5, 0x9d, 0xbe, 0xb1, 0x86, 0xed, 0x30, 0x6b, 0x5f, 0x88, 0x31, 0x34, 0xe2, 0xa3, 0x31, 0x8a, 0x23, 0x57, 0xef, 0xfc, 0x05, 0x49, 0x91, 0xec, 0xf2, 0x8a, 0xf4, 0x93, 0xd0, 0xbc, 0x41, 0x46, 0x30, 0x77, 0xc1, 0xf7, 0xc8, 0xeb, 0xf2, 0xfe, 0x23, 0xc6, 0xda, 0x1a, 0x97, 0x58, 0x9b, 0xb2, 0x78, 0xf4, 0x48, 0x61, 0x8b, 0x9a, 0xf7, 0xb2, 0xbd, 0xd4, 0x17, 0x28, 0x15, 0xde, 0x04, 0x82, 0xe8, 0x09, 0xd9, 0x3c, 0x4c, 0x61, 0x86, 0x59, 0xce, 0x8e, 0x22, 0x60, 0x68, 0xf8, 0x82, 0xa5, 0xad, 0x2f, 0x0a, 0xc9, 0x47, 0x89, 0xc3, 0x84, 0xa3, 0x0d, 0xae, 0xa2, 0xeb, 0x8f, 0x58, 0x4c, 0x35, 0x1d, 0xaf, 0x89, 0xfa, 0x9a, 0x14, 0x05, 0xc9, 0xa9, 0xb1, 0x10, 0x3c, 0xcd, 0x0d, 0xe9, 0x2c, 0xce, 0xdd, 0x3d, 0x21, 0x5e, 0x1e, 0xeb, 0x0c, 0xfc, 0x60, 0x0a, 0x39, 0x19, 0x65, 0x2d, 0x7f, 0x79, 0xea, 0xe5, 0xba, 0xdd, 0xc5, 0x88, 0x7b, 0xdf, 0x30, 0x31, 0xfd, 0x1d, 0x65, 0x08, 0x5b, 0x99, 0x6b, 0xc4, 0x01, 0x60, 0x2f, 0x6e, 0x60, 0x6a, 0xd6, 0x67, 0xe7, 0xc2, 0x52, 0xac, 0x2e, 0xe6, 0x33, 0x59, 0x74, 0x71, 0xc0, 0x6c, 0x4b, 0xf7, 0x47, 0xcc, 0x92, 0x31, 0xb1, 0x8a, 0xa4, 0x5a, 0x59, 0x66, 0xcf, 0xd8, 0x1f, 0x95, 0x08, 0x1f, 0xb8, 0xc1, 0xdc, 0xd3, 0x48, 0x52, 0xaa, 0x2c, 0x32, 0xec, 0x10, 0x9f, 0x2e, 0x38, 0xa3, 0xbb, 0x9d, 0xe8, 0xe3, 0x51, 0x1a, 0xf5, 0x6e, 0xd7, 0x52, 0x2b, 0x73, 0x0e, 0x15, 0xe8, 0x6a, 0xe3, 0xad, 0x21, 0x02, 0x93, 0x6e, 0xa5, 0x5b, 0x13, 0x8e, 0xa6, 0x76, 0xaf, 0x37, 0x75, 0xea, 0xf1, 0xdb, 0x8d, 0xd8, 0xc4, 0xc8, 0xd3, 0x20, 0xd9, 0xfc, 0x1c, 0xd5, 0x4a, 0x3a, 0xf0, 0xef, 0x7e, 0x5d, 0x8e, 0x40, 0x4c, 0xed, 0x2f, 0xaa, 0x63, 0xf0, 0x8f, 0x8e, 0xe9, 0x02, 0xaa, 0x87, 0x62, 0xa8, 0xc3, 0x59, 0xd4, 0xe2, 0xab, 0x24, 0x28, 0xff, 0x40, 0xde, 0xd4, 0xb5, 0x34, 0xff, 0xb7, 0x71, 0x10, 0x7e, 0x44, 0xec, 0x78, 0xfd, 0xe3, 0xff, 0xb0, 0x41, 0x94, 0xb8, 0x5f, 0xe4, 0xd6, 0xad, 0x93, 0x4e, 0xc7, 0x90, 0x06, 0xe1, 0x8c, 0x04, 0xa0, 0x74, 0xf3, 0xaf, 0x3c, 0x03, 0x57, 0x91, 0xaf, 0xa4, 0xc5, 0x94, 0x06, 0xbd, 0x5c, 0x64, 0x10, 0x75, 0xfa, 0x80, 0x1d, 0x68, 0x15, 0x92, 0x04, 0x9f, 0xe6, 0xfc, 0x6b, 0xbf, 0xcd, 0xb3, 0x42, 0x80, 0xf1, 0x50, 0x91, 0x61, 0x27, 0x64, 0x74, 0x9b, 0x15, 0x0c, 0x63, 0x53, 0x97, 0xc6, 0xb7, 0x13, 0x61, 0x83, 0x6a, 0x7b, 0xe6, 0xfe, 0x1f, 0x34, 0x79, 0x4b, 0x62, 0x26, 0xb2, 0xb3, 0x30, 0xeb, 0x14, 0xbf, 0xba, 0x83, 0xec, 0x93, 0x66, 0x49, 0x7c, 0x7d, 0x17, 0x25, 0x59, 0xce, 0xae, 0x04, 0x12, 0xe9, 0xd1, 0x85, 0x12, 0x99, 0xeb, 0xf5, 0xc8, 0xa8, 0x73, 0x7e, 0x05, 0xad, 0x72, 0x9b, 0xa5, 0x25, 0x3f, 0xcf, 0x71, 0xc5, 0x8d, 0x97, 0x44, 0x0f, 0xa8, 0x9d, 0x6d, 0x24, 0xfc, 0x2e, 0x55, 0xd9, 0xd7, 0xee, 0x62, 0x0c, 0x70, 0xcb, 0x1a, 0x39, 0x27, 0x2f, 0x8c, 0x48, 0x0e, 0x7a, 0xeb, 0xa9, 0xa9, 0xaf, 0x7d, 0xa3, 0xf2, 0x6d, 0xb3, 0xe9, 0xa0, 0x22, 0x9a, 0x6f, 0xa9, 0x7b, 0x72, 0x7b, 0x06, 0x1f, 0x9b, 0xff, 0xb6, 0x9c, 0xb9, 0x26, 0x05, 0xa1, 0x10, 0x2d, 0x0e, 0x6f, 0x30, 0x74, 0x7f, 0x8a, 0xd7, 0xd5, 0x9c, 0xb4, 0x13, 0x34, 0x87, 0x1b, 0xa7, 0x57, 0xbe, 0xd2, 0xb0, 0xf8, 0xe5, 0x7e, 0x88, 0x19, 0xc6, 0x52, 0xeb, 0x98, 0x96, 0x3d, 0x58, 0x03, 0x79, 0x61, 0xba, 0xad, 0x49, 0xc8, 0x48, 0x02, 0x93, 0x52, 0xaa, 0x17, 0xe3, 0xf2, 0x5d, 0x86, 0x42, 0x1a, 0x58, 0x78, 0xfc, 0x74, 0xf0, 0x03, 0xa7, 0xd3, 0xf9, 0xb7, 0x60, 0x69, 0x2e, 0x73, 0x58, 0x3a, 0xd3, 0x7d, 0x90, 0xd0, 0x98, 0xd2, 0xe0, 0x31, 0xc1, 0xbb, 0x3e, 0x0e, 0x84, 0xa1, 0x3d, 0x3d, 0xb2, 0x22, 0xd4, 0x6a, 0x9a, 0x65, 0x61, 0x09, 0x2b, 0xaa, 0xed, 0x8e, 0x58, 0x25, 0xb2, 0xe1, 0xc1, 0x0c, 0xda, 0x0c, 0x8f, 0xef, 0x8a, 0x37, 0x9f, 0x48, 0x1f, 0xd7, 0xe4, 0x53, 0xb8, 0x22, 0x06, 0x1f, 0xf4, 0xc6, 0x4f, 0xe5, 0xfd, 0xda, 0xc8, 0x9a, 0xc5, 0x15, 0x9f, 0xc0, 0x8f, 0x3e, 0xcc, 0x81, 0xb2, 0xe3, 0xf4, 0xfe, 0x99, 0x4e, 0x8e, 0xe5, 0x0f, 0xb5, 0x44, 0x41, 0xb9, 0xb1, 0x9c, 0x97, 0xe4, 0xf1, 0xd7, 0x2e, 0x82, 0x30, 0x1a, 0xae, 0x6e, 0x64, 0xcb, 0xed, 0xf8, 0x39, 0x3e, 0x05, 0x9d, 0xbd, 0x91, 0xaa, 0x16, 0x5d, 0xd4, 0xba, 0x95, 0x10, 0x6d, 0x16, 0x4b, 0xd2, 0xbb, 0xb1, 0x2d, 0x54, 0xfa, 0xe6, 0xf8, 0xf2, 0x67, 0x0f, 0x72, 0xe5, 0xa4, 0x53, 0xf3, 0xba, 0x5d, 0xbf, 0x25, 0x02, 0x2c, 0x98, 0x08, 0x4c, 0xba, 0xf0, 0x39, 0x50, 0x28, 0x78, 0x73, 0x6d, 0xad, 0x95, 0x56, 0x56, 0x80, 0xb6, 0x67, 0x08, 0xf8, 0xe4, 0x59, 0xff, 0xf1, 0x9b, 0x8b, 0xa9, 0x73, 0xd8, 0xd1, 0x1b, 0x8e, 0x73, 0x77, 0x03, 0x88, 0xaf, 0x83, 0xdd, 0x3b, 0x10, 0x3b, 0x6a, 0xb8, 0x6c, 0xe7, 0x5e, 0x30, 0x45, 0xd8, 0x59, 0x15, 0x56, 0xa9, 0x19, 0x7c, 0x6c, 0xc5, 0xee, 0xc6, 0x77, 0x29, 0x6e, 0x7f, 0xe1, 0x6c, 0x69, 0x86, 0x1e, 0xfc, 0x20, 0x6e, 0x85, 0xaa, 0xb1, 0x25, 0x5e, 0x69, 0xd6, 0xd3, 0x3c, 0x52, 0xcf, 0x05, 0x8d, 0xec, 0x9d, 0x0b, 0x6f, 0xab, 0x71, 0x9e, 0xc5, 0xb6, 0x64, 0xc7, 0x8a, 0xed, 0x68, 0xfc, 0x66, 0x2b, 0x7f, 0x8b, 0x7f, 0xc8, 0x2b, 0x3c, 0x92, 0x63, 0x25, 0x31, 0x42, 0xde, 0x51, 0x12, 0xb0, 0xa9, 0xf2, 0x67, 0x4b, 0x44, 0x1b, 0x45, 0xea, 0xff, 0x66, 0x2d, 0x18, 0x05, 0xe7, 0x31, 0xae, 0x98, 0x63, 0x58, 0xa8, 0x9e, 0xbe, 0x44, 0x31, 0x5d, 0xb3, 0x12, 0x00, 0x83, 0xc8, 0x82, 0xe7, 0x69, 0x80, 0x58, 0xa9, 0x98, 0xd2, 0x02, 0x0d, 0x8d, 0xda, 0x7a, 0x30, 0xb9, 0xcf, 0x6e, 0x1f, 0xcc, 0x35, 0x9f, 0xa5, 0x33, 0x53, 0x87, 0x62, 0xdf, 0xe8, 0x3e, 0x1d, 0x49, 0x1a, 0x9e, 0x5c, 0xb3, 0xaf, 0xa6, 0x31, 0xb0, 0x7f, 0x1c, 0x56, 0xe6, 0x29, 0x76, 0x7c, 0x13, 0x06, 0xfb, 0xe1, 0x4e, 0x5b, 0x26, 0x21, 0x90, 0xd3, 0x4b, 0x4e, 0x72, 0x2c, 0x7c, 0x42, 0x38, 0x30, 0xae, 0x34, 0x0f, 0xe7, 0x18, 0x8a, 0x93, 0x0b, 0xdc, 0xee, 0x94, 0xbc, 0xe9, 0xa4, 0x1a, 0x75, 0x20, 0x1b, 0xa6, 0x3f, 0xb6, 0xc2, 0xbb, 0x24, 0xd9, 0x1c, 0x9d, 0xe7, 0x96, 0x17, 0x59, 0xf2, 0xfa, 0x9a, 0x05, 0x90, 0x77, 0x5d, 0x49, 0x5c, 0x8a, 0xfd, 0x1f, 0xfa, 0x9b, 0x50, 0xd6, 0x04, 0x25, 0xf6, 0x5d, 0x47, 0x16, 0x30, 0xbe, 0x30, 0x79, 0xf5, 0xe9, 0x81, 0x52, 0x43, 0xb3, 0x48, 0xc9, 0xb4, 0x1e, 0x12, 0x8b, 0x51, 0xdb, 0x5c, 0x6e, 0xaa, 0x0d, 0x4a, 0x54, 0x27, 0x50, 0x9c, 0x51, 0x99, 0xfa, 0xdd, 0x10, 0x14, 0xa1, 0xdd, 0x72, 0x01, 0xdd, 0x62, 0x79, 0x6f, 0x4e, 0x1b, 0x65, 0xaa, 0xe1, 0xd5, 0x1c, 0x0f, 0x50, 0xf1, 0xcf, 0x1e, 0xe8, 0x16, 0xdb, 0xd1, 0x8f, 0x23, 0xed, 0x2c, 0x05, 0x68, 0x6a, 0x16, 0x6a, 0x15, 0x0e, 0x67, 0x01, 0xf2, 0xd3, 0x42, 0x33, 0x51, 0x14, 0xa5, 0xd7, 0x42, 0xf2, 0x3e, 0xb0, 0x05, 0xf7, 0x81, 0x37, 0xc5, 0xf9, 0xf7, 0x9b, 0x83, 0x41, 0xd9, 0x07, 0x50, 0xed, 0xdd, 0x23, 0xbf, 0x93, 0x50, 0xdd, 0x9a, 0x27, 0x65, 0x69, 0xd4, 0x1f, 0xcd, 0x86, 0xbf, 0xd4, 0x87, 0x04, 0x7f, 0x2c, 0xfa, 0x83, 0xbf, 0x76, 0x41, 0x7d, 0xa2, 0x95, 0xc6, 0x87, 0xfc, 0x61, 0x12, 0xd3, 0xc3, 0x4a, 0xe3, 0xfa, 0xc0, 0x3f, 0x7f, 0xf8, 0x8a, 0xce, 0x49, 0x78, 0xb5, 0x8c, 0x92, 0x53, 0x47, 0xb7, 0xb1, 0x53, 0x6b, 0x1a, 0x56, 0x3c, 0x6a, 0x31, 0x1b, 0x0d, 0xd6, 0x8e, 0x5c, 0x83, 0x09, 0x7b, 0x49, 0xdf, 0xce, 0xe1, 0x39, 0xe9, 0x5d, 0x68, 0x42, 0x35, 0x8d, 0xe0, 0x06, 0xa5, 0x45, 0xe0, 0xcf, 0x2f, 0x33, 0xac, 0xdf, 0xe0, 0xc1, 0x5c, 0x01, 0x21, 0x45, 0x3b, 0x64, 0x3a, 0x78, 0x6e, 0xa9, 0x14, 0x2a, 0xd6, 0x3b, 0x43, 0x34, 0x37, 0xdf, 0x43, 0xad, 0x99, 0x8c, 0x02, 0x61, 0xee, 0x7c, 0x9f, 0x7e, 0xf6, 0x83, 0x72, 0x91, 0x60, 0xa0, 0x4c, 0xb1, 0x32, 0xd2, 0x00, 0xfa, 0x6a, 0x2c, 0x22, 0x3e, 0xe5, 0x2c, 0x0e, 0xf6, 0x81, 0x49, 0x2c, 0x7f, 0x7f, 0xcb, 0x73, 0x83, 0x2b, 0xdf, 0x2c, 0xb5, 0xbe, 0xeb, 0xf9, 0xc1, 0x83, 0x1f, 0x15, 0x82, 0x39, 0x4d, 0xdd, 0x76, 0xb9, 0xfa, 0x90, 0x70, 0xd8, 0xb5, 0x53, 0x8d, 0x8f, 0xa7, 0x78, 0x69, 0x59, 0x6c, 0xff, 0x93, 0xdd, 0x21, 0x5d, 0x3e, 0xcd, 0xbe, 0x7d, 0x39, 0x0e, 0xa6, 0x05, 0x21, 0x19, 0x7d, 0xda, 0xd5, 0xa1, 0x3a, 0xe6, 0x2a, 0x76, 0x7d, 0x19, 0xe0, 0xa9, 0x22, 0xad, 0xd5, 0xf1, 0x16, 0xaf, 0x79, 0x4d, 0x69, 0xbb, 0x82, 0xeb, 0xa5, 0x07, 0xe1, 0x49, 0x5f, 0xa2, 0xf4, 0x9a, 0x0b, 0xfe, 0xfd, 0x6b, 0x15, 0xad, 0xd3, 0x86, 0x2d, 0x68, 0xd7, 0x16, 0xe2, 0x55, 0x2a, 0x0d, 0x72, 0x8a, 0x1d, 0xc3, 0xe0, 0xcd, 0xe9, 0xdf, 0x48, 0x9d, 0xa1, 0x7b, 0x70, 0x77, 0x64, 0x83, 0x9f, 0x52, 0xd7, 0x5e, 0xb2, 0x6c, 0xd2, 0xd1, 0x6c, 0x48, 0x5a, 0x20, 0x0e, 0xf7, 0xd0, 0x76, 0x27, 0x98, 0x67, 0x86, 0xae, 0x1b, 0xdc, 0x73, 0x4e, 0x4a, 0x61, 0xed, 0x01, 0x09, 0xda, 0x9e, 0xe0, 0xdc, 0x4b, 0xc4, 0x3a, 0xab, 0x91, 0x1f, 0xe3, 0xc2, 0x51, 0x0d, 0xce, 0x1c, 0x2f, 0xf4, 0xde, 0xe1, 0x40, 0xe0, 0xfa ],
+const [ 0x13, 0xc1, 0x23, 0xac, 0x37, 0x91, 0x46, 0xd0, 0x66, 0x76, 0x7a, 0xc0, 0x2b, 0xa4, 0xbc, 0xda, 0x80, 0xfb, 0xf8, 0xa4, 0xe4, 0xce, 0xc5, 0xb0, 0xad, 0xe8, 0x4f, 0xc3, 0xa0, 0xd1, 0x94, 0x35, 0xbf, 0x4d, 0xd4, 0x9b, 0x62, 0x26, 0x42, 0xa4, 0x89, 0x2b, 0x00, 0x41, 0x71, 0x79, 0x4a, 0x09, 0x65, 0xf9, 0xf2, 0xdb, 0xd7, 0x2a, 0x0c, 0xc5, 0xaf, 0x21, 0xea, 0x24, 0xe3, 0xce, 0x4b, 0x0d, 0x48, 0x80, 0xcf, 0xec, 0xa8, 0xab, 0xae, 0x6b, 0x14, 0xea, 0xaa, 0x96, 0x7b, 0x40, 0x42, 0x3c, 0x7c, 0xa3, 0x29, 0x98, 0x79, 0xbb, 0xf6, 0x30, 0xed, 0xe7, 0x1d, 0xfe, 0xff, 0x81, 0x1e, 0xce, 0x57, 0x63, 0xfc, 0xe7, 0x30, 0xa9, 0xf1, 0xed, 0xae, 0xb9, 0x60, 0x06, 0x72, 0x81, 0x0b, 0x3c, 0x6d, 0x00, 0x86, 0x23, 0xf1, 0x08, 0xec, 0xbb, 0x0e, 0x42, 0xd0, 0x97, 0x1b, 0x72, 0x76, 0x3f, 0x93, 0xfc, 0x43, 0xd4, 0x23, 0xa8, 0x73, 0xf2, 0x00, 0xa2, 0x0a, 0xda, 0x7e, 0xc5, 0x0d, 0xd1, 0xdf, 0x18, 0xf1, 0xc3, 0x68, 0x99, 0x54, 0x2c, 0xbb, 0x3a, 0xeb, 0x39, 0x60, 0x2a, 0xbc, 0x2a, 0xa5, 0x55, 0x8d, 0xfa, 0xa8, 0x2e, 0x9c, 0x42, 0xb2, 0xac, 0x90, 0x5b, 0xc6, 0x92, 0xb0, 0xc2, 0x7a, 0xf4, 0x53, 0xc1, 0x06, 0xf7, 0x97, 0x4c, 0x9b, 0xd8, 0x56, 0x2a, 0xf6, 0x30, 0x56, 0x55, 0x34, 0x76, 0xc0, 0xa2, 0xe8, 0xc5, 0xd4, 0xa4, 0x6b, 0xdf, 0xda, 0xce, 0x73, 0x73, 0x5c, 0xd9, 0xe7, 0x9b, 0x92, 0x65, 0xf2, 0xa9, 0x1e, 0xe3, 0x57, 0x23, 0xfa, 0xb2, 0x04, 0x0c, 0xae, 0x88, 0xe9, 0x65, 0xc6, 0x14, 0x0a, 0xf4, 0x83, 0xe2, 0xd3, 0x44, 0xd1, 0x7e, 0xac, 0xed, 0x79, 0xdc, 0xce, 0x15, 0x98, 0xf7, 0x55, 0x37, 0x50, 0xb9, 0x96, 0x24, 0xbd, 0x1b, 0xb2, 0x47, 0x2a, 0x8d, 0x6c, 0x2c, 0x85, 0x98, 0x37, 0x44, 0x11, 0xc2, 0x93, 0xe2, 0x5b, 0xb2, 0x9a, 0x8a, 0x6f, 0x94, 0xd6, 0x6b, 0x4b, 0xbf, 0x56, 0x2a, 0x94, 0x95, 0x01, 0xe1, 0x88, 0xab, 0x2a, 0x68, 0x34, 0x2b, 0x64, 0xd3, 0xe7, 0x76, 0x97, 0x3b, 0xe6, 0x0d, 0x53, 0xc2, 0x61, 0xb1, 0x65, 0xd1, 0xa6, 0xc9, 0xa8, 0xa4, 0x95, 0x05, 0x1e, 0x09, 0x54, 0x41, 0x3f, 0x64, 0x44, 0xac, 0x91, 0xf7, 0x33, 0x29, 0x79, 0x60, 0xd3, 0xf5, 0x51, 0x63, 0x6a, 0x8a, 0xba, 0xea, 0xcc, 0xc4, 0x34, 0x4a, 0x87, 0x43, 0xec, 0xc8, 0x5d, 0x10, 0xd4, 0x5c, 0xf7, 0x83, 0xf9, 0xb5, 0xd7, 0x64, 0x12, 0x7c, 0x8f, 0x50, 0x54, 0xdd, 0x30, 0x5e, 0x8e, 0x44, 0x06, 0x03, 0x71, 0x64, 0x82, 0x33, 0x2f, 0x7e, 0x78, 0xc9, 0x49, 0xe0, 0x8b, 0x29, 0xa1, 0xac, 0xe5, 0x24, 0xd7, 0xda, 0x2b, 0x1c, 0xd2, 0x80, 0xaf, 0x68, 0x9d, 0x51, 0xe8, 0xf9, 0x75, 0x64, 0x20, 0x3e, 0x20, 0x38, 0x6d, 0x46, 0x80, 0xf4, 0xe2, 0x25, 0x67, 0xf3, 0x06, 0x98, 0xad, 0x7f, 0x85, 0xec, 0x80, 0xdd, 0x26, 0x1b, 0xfc, 0x8b, 0xfd, 0x39, 0xfb, 0xc5, 0xe2, 0x0e, 0x2f, 0x4d, 0x22, 0x05, 0x6e, 0x6c, 0x74, 0x45, 0x4c, 0x34, 0x2e, 0x1d, 0xef, 0x09, 0xb8, 0xa5, 0x1f, 0x60, 0x41, 0xa2, 0x9d, 0xc5, 0xb2, 0xab, 0xb6, 0x23, 0xe0, 0x8a, 0x17, 0x40, 0x06, 0xe5, 0xe3, 0x87, 0x72, 0x1e, 0x03, 0x0a, 0x7e, 0x77, 0xbe, 0xc7, 0xc2, 0x7a, 0x89, 0x2a, 0x88, 0x98, 0x20, 0xd4, 0x80, 0x10, 0xd5, 0x9b, 0xb6, 0x12, 0x28, 0xd2, 0xc0, 0x24, 0x99, 0xca, 0x3c, 0xc6, 0xba, 0x98, 0x7a, 0x51, 0x88, 0x19, 0x75, 0x25, 0xfb, 0x34, 0x08, 0x03, 0xdc, 0x5f, 0x5e, 0xb8, 0xd7, 0x65, 0xab, 0xfc, 0xd1, 0x66, 0x19, 0x99, 0x7c, 0x1f, 0x06, 0xd0, 0x28, 0x6b, 0x6c, 0xf8, 0xdc, 0x0a, 0xa0, 0x68, 0xa5, 0xa2, 0x40, 0x97, 0x2e, 0x03, 0x66, 0x82, 0x91, 0xaf, 0x22, 0x4e, 0x6d, 0x9a, 0x28, 0x2f, 0x39, 0x2e, 0xc5, 0x88, 0xd7, 0x92, 0x18, 0x54, 0x6c, 0x2c, 0x7e, 0xc4, 0x70, 0x65, 0x4e, 0x29, 0x01, 0xac, 0xc7, 0x15, 0x7d, 0xbd, 0x46, 0xbd, 0x4f, 0x23, 0xbc, 0xa2, 0x09, 0xfb, 0x60, 0x71, 0xb4, 0xfc, 0xa1, 0x27, 0x63, 0xb4, 0x5f, 0x78, 0x0f, 0x14, 0x5a, 0x72, 0x9e, 0x2f, 0xeb, 0x5e, 0x45, 0x3f, 0xf2, 0xe7, 0x10, 0xe9, 0x0f, 0x7e, 0xbf, 0xc2, 0x15, 0xfc, 0xd4, 0x11, 0xbb, 0x89, 0xea, 0xd7, 0x95, 0xbd, 0x48, 0x0c, 0x43, 0x06, 0xb6, 0x2c, 0xe9, 0x4a, 0x90, 0xf2, 0xdf, 0xcd, 0x18, 0x63, 0xa9, 0x54, 0x10, 0x0f, 0x29, 0x8b, 0x89, 0x94, 0x13, 0xa4, 0xf6, 0x63, 0xa2, 0x41, 0x84, 0xc7, 0x89, 0x94, 0xae, 0x23, 0x2d, 0xc4, 0x0b, 0x7b, 0x11, 0x93, 0x6b, 0x35, 0x91, 0x3f, 0x23, 0x21, 0xd4, 0xa5, 0xa5, 0xb8, 0xfc, 0xac, 0x54, 0xa1, 0x9f, 0xe1, 0x96, 0x7a, 0x7b, 0x5f, 0x2a, 0xd4, 0x65, 0xf2, 0xbc, 0x7f, 0x83, 0x7c, 0xb6, 0x09, 0xbb, 0x97, 0x5a, 0x81, 0x6b, 0x7b, 0x0e, 0x80, 0x5b, 0x23, 0xf6, 0x6b, 0xf0, 0xab, 0xc8, 0xf2, 0xa2, 0xfd, 0xdc, 0xdc, 0xaf, 0xac, 0x83, 0x07, 0x11, 0x20, 0x9a, 0xaa, 0xae, 0xf4, 0x5f, 0xde, 0xd0, 0x9c, 0x83, 0x5d, 0xd4, 0x4b, 0x80, 0x89, 0x26, 0x13, 0x2c, 0xb0, 0x6d, 0x4f, 0x8e, 0x8e, 0x02, 0x3e, 0xf1, 0x13, 0xa7, 0xf0, 0x38, 0x67, 0x76, 0x66, 0x71, 0x2c, 0x17, 0xf5, 0xad, 0x03, 0x36, 0xeb, 0x0e, 0x51, 0x34, 0x75, 0x21, 0x43, 0x1d, 0xc0, 0x6e, 0x0f, 0xdb, 0x5f, 0x4e, 0x7d, 0xa9, 0xed, 0xfd, 0xa7, 0xca, 0xf3, 0xf0, 0xfc, 0x7a, 0x0b, 0x69, 0x8b, 0x25, 0x46, 0x48, 0x7f, 0xd7, 0xcc, 0x24, 0xe5, 0xf4, 0xc2, 0x9a, 0xb6, 0x29, 0x71, 0xe5, 0x11, 0xa2, 0xa4, 0xaf, 0xc8, 0x7d, 0x51, 0x27, 0x1e, 0x7f, 0x7c, 0x54, 0xcf, 0x06, 0x59, 0xa9, 0x51, 0x3f, 0xb1, 0xd9, 0x5a, 0x99, 0x86, 0xed, 0xa2, 0x7a, 0xfa, 0x93, 0xea, 0x30, 0x6d, 0xb9, 0x3d, 0x2a, 0xe6, 0x5a, 0x76, 0x68, 0xb4, 0x98, 0x02, 0x30, 0x55, 0x0c, 0xe7, 0x03, 0x96, 0x5a, 0x05, 0xcf, 0xfc, 0x08, 0x9c, 0x66, 0x63, 0x90, 0x0f, 0x2f, 0xe5, 0xb3, 0xe8, 0x1b, 0xfd, 0x11, 0x1b, 0xdb, 0xec, 0xf7, 0x8f, 0x51, 0x5c, 0x78, 0xda, 0x44, 0x44, 0xbf, 0x4d, 0x57, 0x0b, 0xa3, 0x30, 0x3c, 0xf0, 0x7c, 0x4e, 0x25, 0xa9, 0x35, 0xb5, 0x7b, 0x4a, 0xa3, 0xb7, 0xd3, 0x69, 0x15, 0x34, 0x1e, 0x80, 0x2d, 0x1c, 0x1f, 0x92, 0xee, 0x2f, 0x23, 0x12, 0x15, 0x07, 0xec, 0x00, 0xad, 0x59, 0xee, 0x55, 0xde, 0x78, 0xbe, 0xa1, 0x06, 0x1a, 0xc7, 0xf3, 0x0b, 0x5f, 0x3f, 0xf9, 0xef, 0x0f, 0x59, 0x68, 0xa4, 0x23, 0xbc, 0x9e, 0x22, 0x88, 0x35, 0x87, 0xb8, 0x1f, 0xa8, 0xbd, 0x9f, 0x08, 0x4d, 0xf3, 0xd5, 0x20, 0x18, 0x93, 0x28, 0xc8, 0x79, 0xa6, 0x91, 0xe9, 0x46, 0xf5, 0xc4, 0x35, 0xf6, 0x6d, 0x05, 0xaf, 0x0f, 0xc8, 0x3d, 0x6d, 0xe1, 0x6a, 0x4d, 0x9c, 0x75, 0x89, 0xa2, 0xc6, 0xc1, 0x91, 0x0a, 0x50, 0x1d, 0xc7, 0xc6, 0x47, 0xfb, 0x2c, 0xe0, 0x5c, 0xd2, 0xa4, 0xbf, 0x2c, 0x5b, 0x57, 0xf8, 0xc5, 0x00, 0x58, 0x67, 0x66, 0x92, 0x85, 0x7f, 0x87, 0x3a, 0xae, 0xde, 0x19, 0xb2, 0xf9, 0x24, 0x0f, 0xb4, 0x84, 0x06, 0x1d, 0xb3, 0x4d, 0x9e, 0xc0, 0xca, 0x4f, 0x05, 0x7e, 0xf2, 0xee, 0x24, 0x6f, 0x77, 0x95, 0xc7, 0xfc, 0xad, 0x9e, 0xf3, 0xe7, 0xdf, 0x72, 0x7a, 0x8c, 0x88, 0xf1, 0xcc, 0x66, 0xc5, 0x14, 0x10, 0xd4, 0x0b, 0xd0, 0x74, 0x1d, 0x15, 0x3e, 0xc1, 0xb2, 0x21, 0xfa, 0x32, 0xb4, 0x5c, 0xc9, 0x86, 0xb6, 0x9b, 0x7e, 0x54, 0xc4, 0x4b, 0x1e, 0x9f, 0xa4, 0xab, 0x42, 0xaa, 0x5b, 0x39, 0xbd, 0x0d, 0xf4, 0x69, 0x7f, 0x09, 0x7c, 0x9d, 0xb9, 0x19, 0x51, 0x52, 0x42, 0xc9, 0x9d, 0x97, 0x3a, 0xcb, 0x1d, 0xc4, 0xed, 0x48, 0x27, 0x68, 0xf9, 0x74, 0xeb, 0x83, 0xb4, 0x65, 0xf9, 0xf6, 0xc8, 0x25, 0x03, 0x37, 0x20, 0x06, 0xe4, 0x49, 0x08, 0x35, 0xe2, 0xec, 0x8f, 0x92, 0x30, 0x11, 0x30, 0xbf, 0xb7, 0x90, 0xb2, 0x77, 0x17, 0x1d, 0x4d, 0x22, 0xe8, 0x79, 0x0e, 0xa6, 0x45, 0xe5, 0x7d, 0x7f, 0x8b, 0xdc, 0x7c, 0x12, 0x5e, 0x01, 0x72, 0x3e, 0xed, 0x57, 0xa9, 0x35, 0x77, 0xb0, 0xf5, 0x8a, 0x0f, 0x68, 0x97, 0x8b, 0x9c, 0x52, 0x60, 0xd0, 0x23, 0xf3, 0x1a, 0x14, 0x49, 0xee, 0x23, 0x44, 0x13, 0xc0, 0x5b, 0xd6, 0xf1, 0xad, 0x40, 0x5c, 0xfb, 0xfa, 0x58, 0x59, 0x7a, 0x5d, 0xd0, 0x53, 0xaa, 0xb2, 0x62, 0x29, 0xbe, 0xef, 0x7c, 0xa7, 0x25, 0x5a, 0x9e, 0x58, 0x0c, 0xfa, 0x03, 0x9b, 0x24, 0x4b, 0x85, 0xf9, 0xa5, 0x36, 0xbb, 0xb6, 0x93, 0x3f, 0x64, 0xa6, 0x40, 0x01, 0x08, 0x42, 0x12, 0xd7, 0xdc, 0xfb, 0x86, 0xdd, 0xe7, 0xcf, 0x75, 0x17, 0x63, 0x19, 0x96, 0xef, 0x66, 0xad, 0x45, 0xe5, 0xc1, 0x24, 0x82, 0x82, 0x28, 0x75, 0x3d, 0x8d, 0x94, 0xc6, 0xd1, 0x82, 0xe6, 0x81, 0xce, 0x40, 0xcd, 0xa9, 0xfb, 0x02, 0xe9, 0x6f, 0x9b, 0x90, 0x31, 0x00, 0xf0, 0xb7, 0x92, 0xa2, 0xfe, 0xf6, 0xd8, 0xff, 0x91, 0x7a, 0xd2, 0xc0, 0x81, 0x4d, 0xb1, 0x5e, 0x35, 0xca, 0xb2, 0x35, 0x66, 0x54, 0xfd, 0xdb, 0x25, 0x47, 0xcc, 0xaf, 0x20, 0x2f, 0xcf, 0xb5, 0x21, 0x38, 0xd0, 0xa1, 0xd7, 0xe6, 0x93, 0x31, 0xd9, 0x06, 0x00, 0xc0, 0xe8, 0xe5, 0x83, 0x19, 0x74, 0xbf, 0xb4, 0x89, 0x62, 0x7a, 0x33, 0x38, 0x0d, 0x94, 0xd6, 0xb8, 0x8b, 0x5b, 0x07, 0xdf, 0x31, 0x5c, 0x67, 0xd2, 0x59, 0x1d, 0xb8, 0x63, 0x62, 0x0f, 0xf9, 0x9d, 0xf9, 0xbe, 0xd2, 0x9c, 0x97, 0x4b, 0x33, 0xa3, 0x4b, 0x1c, 0x39, 0x68, 0xba, 0xd2, 0x51, 0xb2, 0x64, 0x7b, 0x9f, 0x26, 0x29, 0x09, 0xa1, 0x5e, 0x0b, 0x04, 0x0f, 0x3c, 0x35, 0x7b, 0x06, 0x7e, 0x3d, 0x40, 0x66, 0x92, 0xa6, 0x55, 0x79, 0xab, 0xa9, 0xa1, 0xd5, 0x14, 0x34, 0xe7, 0x83, 0xc5, 0x34, 0xf9, 0x60, 0x34, 0x10, 0x29, 0xc4, 0x6d, 0x75, 0x01, 0x62, 0x65, 0x59, 0x34, 0x6f, 0x8b, 0x3a, 0xd3, 0x07, 0xa1, 0xa7, 0xc4, 0xcc, 0xca, 0x02, 0x71, 0xd0, 0xe4, 0x84, 0xbd, 0xb5, 0x17, 0x81, 0x3c, 0x12, 0xae, 0xee, 0xa3, 0x19, 0x26, 0x20, 0x7d, 0x77, 0x85, 0xd6, 0x20, 0x7c, 0xee, 0x7a, 0xe0, 0x7c, 0x71, 0xa4, 0x82, 0x75, 0x27, 0xe0, 0xf4, 0xf1, 0x7f, 0xb1, 0x3b, 0x2e, 0xd3, 0xd6, 0xac, 0x7d, 0x3f, 0xcb, 0x5f, 0xe8, 0xb2, 0x93, 0xe1, 0x17, 0x45, 0xb5, 0x29, 0x75, 0xcc, 0x85, 0xcd, 0x8e, 0xab, 0xa4, 0x76, 0xbb, 0xec, 0xca, 0x92, 0x02, 0x8e, 0xc3, 0x48, 0x38, 0x1f, 0xb8, 0xb1, 0x68, 0x8d, 0xb0, 0x45, 0x79, 0x39, 0x56, 0x93, 0x0a, 0x4d, 0xfd, 0x36, 0xa1, 0x50, 0xe1, 0x04, 0x05, 0xf7, 0xb0, 0x88, 0xe8, 0x3e, 0x49, 0xb3, 0xc9, 0xb8, 0xc3, 0xce, 0x19, 0x23, 0xb1, 0xb3, 0x9d, 0x40, 0xa4, 0x3d, 0x13, 0xe2, 0xf2, 0xfd, 0x18, 0x44, 0xb6, 0x2e, 0x49, 0x9f, 0x18, 0xeb, 0xa9, 0xfc, 0xcf, 0xa0, 0x43, 0x47, 0xe4, 0xbf, 0x10, 0xa6, 0xb8, 0xb4, 0x1a, 0x09, 0x48, 0x1a, 0xe2, 0x01, 0xb0, 0x2f, 0xff, 0xd5, 0xee, 0x85, 0x09, 0xd3, 0xe9, 0xfb, 0xb5, 0xe4, 0xb2, 0xec, 0x41, 0x63, 0x09, 0xa6, 0x13, 0x2f, 0x23, 0x1e, 0x9d, 0xff, 0xaa, 0xe2, 0x83, 0xf6, 0x06, 0x4e, 0x00, 0x78, 0xdb, 0x03, 0x86, 0x3b, 0xd2, 0x95, 0xa4, 0xa1, 0x9d, 0x84, 0x2d, 0x45, 0x35, 0x6e, 0x97, 0xd3, 0x66, 0x82, 0xa1, 0x1e, 0x8e, 0x38, 0x38, 0x6c, 0xa2, 0x3f, 0x9c, 0x14, 0x71, 0xb7, 0xbf, 0x4c, 0x2d, 0xa1, 0xee, 0x3c, 0x27, 0x94, 0xb2, 0x57, 0xda, 0xb1, 0xf9, 0xea, 0x2b, 0xd9, 0x71, 0xf5, 0xef, 0x1d, 0x35, 0x3b, 0xae, 0x75, 0xab, 0x95, 0xa6, 0xb5, 0xac, 0x8b, 0x13, 0xbe, 0xe6, 0x25, 0xae, 0xf1, 0x7f, 0xff, 0x74, 0xea, 0xfb, 0x9c, 0xa8, 0x6a, 0x60, 0xfc, 0x1b, 0x94, 0x98, 0x71, 0xab, 0x5d, 0x16, 0xae, 0x0a, 0x3e, 0xbd, 0x21, 0xc1, 0x2b, 0xfd, 0x83, 0x74, 0xc9, 0x3f, 0xad, 0x67, 0xdc, 0x83, 0xad, 0x41, 0xfe, 0x47, 0x19, 0x10, 0x97, 0xab, 0xa3, 0x8e, 0x09, 0xd4, 0xee, 0xa3, 0x2b, 0x8e, 0xa0, 0x2a, 0xf9, 0x35, 0xb9, 0xf8, 0x8a, 0xd5, 0x23, 0x1a, 0x42, 0x90, 0x89, 0x5f, 0x48, 0x40, 0x6d, 0x17, 0x3a, 0x5e, 0x75, 0x19, 0x20, 0x23, 0x06, 0x0b, 0x9f, 0xec, 0x14, 0xdd, 0x70, 0xe3, 0x39, 0x97, 0x10, 0xdc, 0x04, 0x55, 0xb8, 0x7d, 0x93, 0x8f, 0x8f, 0xa2, 0x64, 0x9e, 0x1f, 0xff, 0x68, 0x7c, 0x05, 0x08, 0x59, 0xcc, 0xed, 0x0d, 0x4e, 0x1a, 0xbe, 0xaa, 0x8d, 0x63, 0x12, 0x5e, 0xa0, 0xd8, 0xe9, 0x7a, 0xab, 0xdf, 0x9e, 0x3d, 0xfc, 0x5b, 0x1a, 0x3d, 0xe4, 0x2d, 0x47, 0x08, 0xc5, 0xfb, 0xc7, 0x0c, 0x6d, 0x2f, 0xe7, 0xb4, 0xa2, 0x43, 0xce, 0xd4, 0xfe, 0x3d, 0xfb, 0x47, 0xfe, 0x75, 0xee, 0xd7, 0x55, 0x9e, 0x24, 0x5c, 0x86, 0x04, 0x49, 0x28, 0xb1, 0x13, 0xaa, 0xa3, 0xad, 0x19, 0xe9, 0x33, 0x58, 0x4d, 0xf4, 0x5f, 0x2b, 0x0f, 0x37, 0x33, 0x12, 0x71, 0x11, 0xe6, 0x7a, 0xf7, 0x85, 0xba, 0xab, 0x9b, 0x33, 0x24, 0x58, 0x14, 0x86, 0x2d, 0x74, 0x58, 0x2e, 0x18, 0x48, 0x60, 0xd1, 0x45, 0xc3, 0x2b, 0xfd, 0x55, 0x11, 0x05, 0x62, 0x8f, 0x6f, 0x09, 0x3e, 0x82, 0x3d, 0xe5, 0x18, 0xec, 0x54, 0xdd, 0xb1, 0xdb, 0x9b, 0x13, 0x38, 0x12, 0xd5, 0x05, 0xbd, 0xae, 0xbd, 0x57, 0xe8, 0x0a, 0x55, 0xd3, 0xeb, 0xdf, 0x7b, 0xae, 0xb5, 0xb0, 0xbd, 0x0c, 0x68, 0x65, 0x6e, 0xc7, 0x0e, 0x36, 0xf9, 0x6c, 0x88, 0xca, 0x76, 0x87, 0xc6, 0xa0, 0x7b, 0x21, 0x3e, 0xaf, 0x35, 0x86, 0x96, 0x49, 0xb7, 0x4c, 0xa4, 0x45, 0x91, 0x90, 0x99, 0x5d, 0xa5, 0x83, 0x79, 0xd5, 0x36, 0x26, 0xcf, 0x5e, 0x42, 0x51, 0x9e, 0x39, 0x12, 0xfa, 0x9a, 0x9f, 0x0f, 0xb4, 0x98, 0x61, 0xd7, 0x76, 0x44, 0xcc, 0x90, 0x9e, 0x12, 0xcf, 0x7d, 0x35, 0x77, 0x60, 0xce, 0x75, 0x58, 0x1b, 0xbd, 0x88, 0xc3, 0x2c, 0xd6, 0x93, 0xdd, 0x70, 0x96, 0xf3, 0x1b, 0xd7, 0x38, 0xc7, 0xb5, 0x0d, 0xcc, 0xae, 0x58, 0x59, 0x89, 0xd2, 0x1c, 0xc5, 0x64, 0x25, 0xb5, 0x7f, 0xe2, 0xea, 0xed, 0x7f, 0x2a, 0x78, 0x52, 0x6a, 0x5e, 0x3a, 0x2b, 0xb6, 0x2b, 0xfb, 0xb1, 0x10, 0x9f, 0x60, 0x7c, 0xfa, 0x3b, 0xb6, 0x3c, 0xb9, 0x4a, 0xee, 0xa9, 0x6e, 0x71, 0xe6, 0xbd, 0x83, 0x86, 0xeb, 0x20, 0x48, 0xa5, 0x7b, 0xe4, 0xde, 0x81, 0x4f, 0x72, 0x55, 0xf9, 0x99, 0xc4, 0x11, 0xec, 0x8a, 0xd5, 0x72, 0x4d, 0x17, 0x56, 0xb4, 0x7a, 0xfd, 0xa3, 0x13, 0xc9, 0x02, 0xf5, 0x33, 0x64, 0x7e, 0xd9, 0xc0, 0x58, 0x1b, 0xe1, 0x51, 0xe8, 0xd9, 0x99, 0x93, 0x27, 0x55, 0xbc, 0xa3, 0xc6, 0x4a, 0xa8, 0xbb, 0x2a, 0x58, 0x10, 0x11, 0xc1, 0x04, 0xf1, 0xfc, 0x97, 0x01, 0xc7, 0x59, 0x24, 0xae, 0x00, 0x2d, 0x69, 0xdf, 0xb1, 0x8c, 0x3b, 0xe0, 0x88, 0xb9, 0xde, 0xb7, 0x02, 0x8e, 0xd5, 0xaa, 0xdd, 0x1e, 0xf9, 0x01, 0xd1, 0x9a, 0xc9, 0x0d, 0x7b, 0x71, 0x01, 0x69, 0x9a, 0xbb, 0x6e, 0x80, 0x7d, 0xd8, 0x00, 0x4f, 0xbc, 0x54, 0x21, 0x6d, 0x27, 0x0e, 0x45, 0x48, 0xfc, 0x9a, 0xc2, 0xb1, 0x5d, 0xe3, 0xe3, 0x9b, 0x00, 0x15, 0x37, 0x1f, 0x29, 0xba, 0x2f, 0xc4, 0xd5, 0x23, 0xe8, 0xfe, 0x38, 0x09, 0x46, 0xf4, 0x6a, 0x74, 0x42, 0x86, 0x5e, 0xdc, 0x85, 0x8f, 0x13, 0x8e, 0x35, 0x67, 0x0e, 0x52, 0x0f, 0xad, 0x07, 0x4b, 0xb6, 0x43, 0xe3, 0x1e, 0x4a, 0x99, 0xe2, 0x57, 0x3d, 0x2f, 0x1a, 0x08, 0x62, 0x55, 0x24, 0xb2, 0x47, 0x36, 0x15, 0x69, 0xc5, 0x14, 0xaf, 0x34, 0xd5, 0xd5, 0xd9, 0xb3, 0xa5, 0xbf, 0x4d, 0x04, 0xec, 0x80, 0x91, 0xe6, 0x7a, 0x71, 0x28, 0x1f, 0x13, 0x1b, 0x09, 0x1c, 0x7d, 0xfb, 0x50, 0xd8, 0xd8, 0x82, 0x34, 0xff, 0x2e, 0x60, 0x39, 0x52, 0x4b, 0x02, 0xa6, 0x4d, 0xcf, 0x59, 0x3a, 0x07, 0x81, 0xde, 0x1b, 0x5b, 0xe6, 0xd3, 0x0f, 0x45, 0x13, 0xcb, 0xee, 0x8e, 0xbf, 0x6c, 0x58, 0xac, 0x9c, 0x74, 0xa3, 0xe4, 0xe8, 0xfa, 0x17, 0xb1, 0x3e, 0xf7, 0x5e, 0x69, 0xb3, 0x04, 0x36, 0x1e, 0x1e, 0x65, 0x69, 0xc2, 0xb7, 0x47, 0xff, 0x8f, 0xe4, 0x46, 0xb2, 0xa6, 0x4f, 0x32, 0xa2, 0xf7, 0x3c, 0x13, 0x4a, 0x60, 0x1a, 0x6a, 0xb3, 0x19, 0x57, 0xba, 0xe7, 0x4f, 0x79, 0x47, 0xa9, 0x0f, 0x6b, 0x1e, 0x63, 0x66, 0x14, 0x55, 0x60, 0xc7, 0x2e, 0x94, 0x3b, 0xac, 0x56, 0xd5, 0x98, 0x80, 0x5f, 0x67, 0x11, 0xbd, 0xec, 0x39, 0x74, 0x52, 0x3e, 0x55, 0x2b, 0x47, 0x4a, 0xab, 0xfb, 0xa3, 0x0f, 0x10, 0xf2, 0x8e, 0x26, 0x86, 0x9a, 0xb3, 0x9b, 0xbe, 0x73, 0xe8, 0xfb, 0xdb, 0xa0, 0x11, 0xae, 0x79, 0xe1, 0x41, 0x87, 0xee, 0xc1, 0x23, 0x9a, 0xcf, 0x11, 0x99, 0x4e, 0xb7, 0x94, 0xa2, 0xb3, 0x43, 0xfc, 0x81, 0x15, 0x61, 0x15, 0x1c, 0xd1, 0xcb, 0x41, 0xa2, 0x67, 0xce, 0x24, 0x70, 0xd1, 0x50, 0xa0, 0x36, 0x13, 0x11, 0x04, 0x55, 0x14, 0x31, 0x80, 0x8c, 0xac, 0xf3, 0xdd, 0xd4, 0xfe, 0xc0, 0x6a, 0x88, 0x08, 0x6f, 0x3a, 0xc9, 0x78, 0xc3, 0x8c, 0x21, 0xc1, 0x35, 0x8b, 0x66, 0x6f, 0xf4, 0x38, 0xe2, 0xb7, 0x2b, 0xa4, 0xb0, 0x53, 0x82, 0x62, 0x69, 0x8d, 0xe7, 0x3c, 0x01, 0x99, 0x8e, 0x25, 0xeb, 0x27, 0x36, 0x6f, 0x84, 0x39, 0xaf, 0x3e, 0xae, 0x32, 0x99, 0x3d, 0xbb, 0x30, 0x6e, 0x8f, 0x8e, 0x9c, 0xc3, 0x09, 0xfc, 0x00, 0xca, 0x9e, 0x78, 0x18, 0x1c, 0x1a, 0xf0, 0x2b, 0xb5, 0x14, 0xf2, 0x9b, 0x40, 0x1d, 0x13, 0xbc, 0x96, 0x3e, 0x91, 0xe2, 0x81, 0xa2, 0x37, 0xbe, 0xc5, 0x8f, 0x81, 0xea, 0x61, 0x9b, 0x01, 0xc2, 0x12, 0x1c, 0x01, 0x76, 0x19, 0xe0, 0x6a, 0x5d, 0x3e, 0x1e, 0xe5, 0x8c, 0x15, 0xad, 0x3f, 0xa8, 0x80, 0x74, 0x12, 0xf8, 0x75, 0x22, 0xa2, 0xbe, 0x01, 0x1f, 0x05, 0xc8, 0x8d, 0xc2, 0x87, 0x42, 0x61, 0xc4, 0x4c, 0xce, 0x66, 0xf4, 0x37, 0xd7, 0x30, 0x2d, 0x0b, 0x21, 0x3b, 0x85, 0xd0, 0xa5, 0x75, 0xc8, 0x79, 0x9d, 0xfd, 0x25, 0xc3, 0xdb, 0x2b, 0x26, 0x60, 0x5e, 0xd0, 0xe6, 0x55, 0x27, 0xbf, 0x7e, 0xa1, 0x49, 0x8c, 0xc0, 0x1f, 0x40, 0x93, 0x28, 0xad, 0x83, 0x3c, 0x0f, 0x8e, 0x5d, 0x7e, 0x22, 0x0d, 0xf8, 0xa2, 0x13, 0x63, 0xbb, 0x4a, 0x8e, 0xdb, 0xd5, 0xb1, 0x6f, 0x34, 0x1a, 0x34, 0x32, 0x47, 0x0f, 0x12, 0xaa, 0xea, 0x40, 0x70, 0xf6, 0x13, 0xda, 0xa0, 0xb2, 0x41, 0x75, 0xa2, 0x6a, 0x17, 0x32, 0xeb, 0x54, 0x4a, 0x06, 0x66, 0x3e, 0xbe, 0x55, 0xb9, 0xc5, 0xec, 0xc3, 0xc9, 0xc8, 0x87, 0x47, 0x80, 0x1c, 0x5f, 0x81, 0xce, 0x81, 0x85, 0x4d, 0xed, 0xd5, 0xb0, 0x98, 0xea, 0x88, 0xdf, 0x72, 0x61, 0x50, 0x40, 0x65, 0x88, 0x1e, 0x51, 0x05, 0x6e, 0x50, 0x45, 0xc9, 0x85, 0x28, 0xa9, 0x19, 0x5f, 0x7d, 0x47, 0xa8, 0xb5, 0xb0, 0x4b, 0x04, 0xad, 0xe2, 0xa4, 0x6c, 0x5c, 0x64, 0xad, 0xe1, 0x8a, 0x6f, 0x0d, 0x7f, 0xb6, 0x16, 0xdc, 0x0e, 0x5a, 0x78, 0x07, 0xd5, 0x71, 0x3a, 0xf5, 0xae, 0x35, 0x35, 0x6a, 0x60, 0x2d, 0x6b, 0xac, 0x28, 0x67, 0x40, 0xe5, 0x99, 0x03, 0xe7, 0xc9, 0xa7, 0xf1, 0x1a, 0x78, 0xfe, 0xfa, 0x0e, 0xa6, 0x98, 0x05, 0xa6, 0xf9, 0x8e, 0x93, 0xe7, 0xb2, 0x2e, 0x8d, 0xac, 0x90, 0x4f, 0x3f, 0x9a, 0xf1, 0xe1, 0xa4, 0x57, 0x3b, 0xc8, 0xe4, 0xf7, 0x7a, 0xeb, 0x1b, 0xb7, 0x4b, 0x87, 0x5c, 0xee, 0xf8, 0xca, 0xf6, 0x40, 0xe4, 0x9d, 0xf5, 0x15, 0x2a, 0xc1, 0xec, 0x49, 0x81, 0x1d, 0xf2, 0x26, 0x63, 0x56, 0xeb, 0x8f, 0x6e, 0xa1, 0x09, 0x7d, 0x0a, 0xd5, 0x92, 0xb0, 0x4c, 0xc5, 0xe3, 0x9e, 0x1a, 0xcc, 0xb5, 0xb0, 0x90, 0xa9, 0x9f, 0xad, 0xa3, 0x8d, 0xdc, 0x76, 0x04, 0x73, 0x4f, 0xf5, 0x47, 0xb0, 0xc4, 0x50, 0x45, 0xcb, 0x79, 0x62, 0xbf, 0x8e, 0xdd, 0x6b, 0x44, 0x5d, 0x97, 0x06, 0x54, 0xc7, 0xca, 0x5c, 0xc5, 0x5b, 0x97, 0x98, 0x66, 0xbd, 0xe4, 0x9b, 0xe3, 0xf9, 0x5c, 0xf0, 0xe8, 0x16, 0xb7, 0x02, 0x89, 0xef, 0x3c, 0x8c, 0xe2, 0x3e, 0x84, 0x52, 0xfa, 0xfa, 0x80, 0x0f, 0xee, 0xe3, 0xbe, 0xae, 0x4b, 0x5b, 0xe7, 0xbc, 0xbb, 0x77, 0x8d, 0x1e, 0xe4, 0x56, 0x23, 0xff, 0x8d, 0xb1, 0x4d, 0x0d, 0x02, 0xb4, 0x5b, 0xe5, 0xba, 0x0c, 0x0f, 0xcb, 0x38, 0x42, 0xa7, 0x9f, 0x2f, 0x47, 0x17, 0x0c, 0xe9, 0x50, 0x97, 0x03, 0xe9, 0xe3, 0x5d, 0x68, 0xd0, 0x32, 0xac, 0x0b, 0x7d, 0xa9, 0x0d, 0xd9, 0x78, 0xc3, 0xdd, 0x54, 0x91, 0x21, 0x07, 0x40, 0xc4, 0xdd, 0x13, 0x9f, 0x60, 0x1c, 0x60, 0xe0, 0x69, 0xe2, 0xad, 0x54, 0x3a, 0x2b, 0xde, 0xe1, 0x6e, 0x37, 0xfd, 0xfa, 0x01, 0x25, 0x80, 0xce, 0xb3, 0xc3, 0xca, 0xc0, 0xad, 0xa5, 0xf4, 0x18, 0x67, 0x74, 0xcc, 0xf8, 0xc9, 0x89, 0x1e, 0x91, 0x91, 0xba, 0x33, 0x96, 0xf4, 0x74, 0x98, 0xf1, 0x88, 0x0b, 0x20, 0xb6, 0x61, 0x4d, 0x2c, 0x55, 0x7a, 0x5d, 0x2a, 0x13, 0x57, 0xbf, 0x5c, 0xbb ],
+const [ 0x59, 0x5f, 0x40, 0xb0, 0x57, 0xef, 0x2d, 0x4f, 0x87, 0x74, 0xa2, 0x28, 0x99, 0xac, 0xf2, 0x8d, 0xa1, 0x29, 0xfa, 0x40, 0x6d, 0x53, 0x0c, 0x94, 0x16, 0xb0, 0x2c, 0xce, 0xd6, 0x63, 0x7f, 0xd1, 0x19, 0xf3, 0x00, 0xfb, 0xd7, 0x4e, 0x75, 0x4a, 0x20, 0x0e, 0xa2, 0xc3, 0xf9, 0xfa, 0xbc, 0x14, 0x66, 0xd0, 0x20, 0x78, 0xc8, 0x42, 0x45, 0xdb, 0x69, 0x3e, 0xef, 0x3f, 0x56, 0x72, 0xa6, 0x5e, 0x6d, 0x10, 0x67, 0x90, 0xb6, 0xce, 0x99, 0xf0, 0xf7, 0x32, 0x42, 0xba, 0x82, 0x0c, 0x7b, 0xf8, 0x52, 0x44, 0x22, 0x5e, 0x56, 0xd5, 0xce, 0x72, 0x0d, 0x1a, 0x08, 0xf0, 0x53, 0x49, 0xb8, 0x6c, 0x7b, 0x3d, 0xdd, 0x39, 0x9d, 0x78, 0x81, 0x8a, 0x31, 0x68, 0xed, 0xd7, 0xdd, 0xe9, 0x19, 0x82, 0x8c, 0x0c, 0x66, 0xbb, 0xc0, 0x16, 0x8f, 0xa1, 0x29, 0xcc, 0xdd, 0xa9, 0x76, 0xee, 0x9b, 0x44, 0x6b, 0x02, 0xca, 0xbc, 0x34, 0x52, 0x16, 0x5f, 0xf9, 0x38, 0x08, 0xe0, 0xb2, 0x99, 0x7c, 0xfa, 0x3d, 0xb0, 0x56, 0x56, 0xad, 0x0d, 0x71, 0xaf, 0xe6, 0xdd, 0xd8, 0x34, 0x67, 0x6b, 0x39, 0x2e, 0x66, 0xe7, 0x96, 0xe2, 0x22, 0x67, 0x3e, 0xb9, 0x75, 0x2b, 0xfc, 0x9e, 0xa8, 0x25, 0x8e, 0xa8, 0x8c, 0xb8, 0x58, 0xf9, 0xc6, 0xc1, 0x5a, 0xe6, 0x6b, 0xd4, 0x60, 0x58, 0xcd, 0xc8, 0x78, 0x71, 0x94, 0x75, 0xa9, 0x73, 0x10, 0xbc, 0xe2, 0xde, 0xcd, 0xc8, 0x31, 0xd9, 0x68, 0x94, 0x35, 0xd3, 0xa2, 0xad, 0xd6, 0x6a, 0xb3, 0x3a, 0x33, 0x8c, 0xe1, 0x39, 0xdc, 0xdc, 0x50, 0x0b, 0x42, 0x57, 0x1c, 0x33, 0x6c, 0x37, 0xa5, 0x5b, 0xeb, 0x17, 0x2a, 0x97, 0x0f, 0x59, 0x9a, 0xee, 0x5b, 0xc5, 0xa6, 0x17, 0x37, 0x72, 0x1b, 0x80, 0xe5, 0xea, 0x6f, 0x95, 0xb6, 0x89, 0x99, 0x3e, 0x7e, 0x26, 0x26, 0xa9, 0x45, 0xf6, 0x8a, 0x4b, 0x3f, 0xac, 0xb4, 0x21, 0xff, 0xe5, 0xe5, 0x3c, 0xe7, 0xc4, 0xc1, 0x7c, 0xe3, 0xd9, 0xa7, 0x9c, 0x57, 0x48, 0x3e, 0x6e, 0x55, 0x27, 0x50, 0x68, 0x14, 0x27, 0xdc, 0x60, 0x9d, 0x77, 0x66, 0x94, 0xc8, 0xe5, 0x92, 0xed, 0x67, 0x47, 0xf1, 0x85, 0xc1, 0x19, 0x1b, 0x66, 0x42, 0x67, 0xfe, 0x95, 0x70, 0xee, 0x75, 0x4f, 0x21, 0x7e, 0x1d, 0x92, 0xeb, 0xa2, 0x64, 0xdf, 0xdd, 0x83, 0xe2, 0x3f, 0x6c, 0x0a, 0xed, 0x84, 0xb0, 0x45, 0x67, 0xd1, 0xd1, 0x0c, 0xdb, 0x5c, 0xbc, 0xe4, 0xc8, 0x73, 0x1a, 0x23, 0x3d, 0xbd, 0x82, 0x55, 0xa6, 0xc3, 0xed, 0xdf, 0xe6, 0xae, 0x6b, 0xe2, 0xa6, 0x52, 0x15, 0x62, 0xec, 0x6c, 0x43, 0xa8, 0xef, 0x28, 0xff, 0xe4, 0x2a, 0xe7, 0xb9, 0x17, 0xaf, 0x3e, 0x3c, 0x30, 0xbe, 0x42, 0xe0, 0x75, 0x96, 0x03, 0x01, 0x25, 0x8b, 0x56, 0xb1, 0x5c, 0x59, 0xd8, 0xaa, 0x36, 0xb8, 0x2f, 0x86, 0x37, 0x30, 0x93, 0x33, 0xeb, 0x2f, 0x8e, 0xa1, 0xc9, 0x59, 0xff, 0xbd, 0x5d, 0x1f, 0x65, 0xa3, 0xa7, 0x93, 0x5a, 0x0f, 0xbe, 0x7a, 0x5e, 0x15, 0xb8, 0xa3, 0xd6, 0x13, 0xce, 0x78, 0x54, 0xe3, 0xbc, 0xd3, 0x19, 0x55, 0x67, 0x13, 0xd9, 0xdc, 0xc2, 0x6e, 0xbe, 0x87, 0xf2, 0x89, 0xaf, 0x33, 0xb1, 0x45, 0xd1, 0x00, 0xf0, 0xdc, 0x4e, 0x01, 0xc0, 0x2e, 0x56, 0x38, 0x72, 0x55, 0x64, 0xc1, 0xfd, 0x7f, 0xc3, 0x4d, 0xa1, 0xfd, 0x50, 0xd2, 0xca, 0x97, 0x81, 0x81, 0x37, 0x23, 0xa6, 0xf9, 0x5b, 0x56, 0x6f, 0xba, 0x04, 0xd9, 0xaf, 0xdc, 0x3a, 0x9f, 0x5f, 0x01, 0x6a, 0x77, 0xe6, 0x88, 0xc4, 0xdd, 0x98, 0x03, 0xe1, 0x16, 0x7c, 0xeb, 0xa9, 0x7c, 0x52, 0x93, 0x74, 0x16, 0xd4, 0x5b, 0x6f, 0x6b, 0x3d, 0x26, 0x42, 0x98, 0x08, 0x0e, 0xef, 0xa1, 0xfa, 0x56, 0xfd, 0x05, 0x62, 0x9f, 0xd7, 0x95, 0xa0, 0x5f, 0x6f, 0x85, 0xe4, 0x90, 0x26, 0xc4, 0x38, 0xa5, 0xf0, 0x89, 0xc1, 0xc2, 0xb3, 0x2f, 0x41, 0x2c, 0xf1, 0x42, 0xe1, 0xff, 0xa7, 0xda, 0x2e, 0x1f, 0x75, 0x27, 0x61, 0x70, 0xfe, 0x4e, 0xe3, 0x4a, 0x92, 0x73, 0x10, 0x27, 0x0b, 0x17, 0x3c, 0x9f, 0xf4, 0xa5, 0xf3, 0x97, 0xf1, 0x47, 0x85, 0xb5, 0x5a, 0xfe, 0xc2, 0x17, 0x2a, 0xf2, 0x03, 0x44, 0x18, 0x07, 0x6a, 0x62, 0x03, 0xb0, 0x6a, 0xaa, 0x93, 0x08, 0x89, 0x1a, 0x1e, 0x1f, 0x64, 0x69, 0xc8, 0x91, 0xf4, 0x40, 0xef, 0x5e, 0x11, 0xa7, 0xc6, 0xf5, 0x34, 0xbe, 0x3f, 0x92, 0x81, 0xad, 0x2f, 0xca, 0x05, 0xdd, 0xad, 0x65, 0x3c, 0x69, 0xba, 0x6b, 0xd6, 0xcf, 0x28, 0x81, 0xba, 0xec, 0xb4, 0x76, 0x4c, 0x27, 0x76, 0x1a, 0xeb, 0xec, 0x7b, 0x4f, 0xbe, 0x5c, 0xb0, 0x62, 0xb1, 0x42, 0x01, 0x9b, 0xba, 0x49, 0xc3, 0x12, 0x61, 0x6d, 0x4f, 0xc5, 0x7f, 0xb0, 0xf0, 0xe8, 0x46, 0x0e, 0x00, 0x7c, 0x81, 0xb2, 0x4d, 0x23, 0x1d, 0x6a, 0xc2, 0x33, 0xe9, 0x59, 0x43, 0x09, 0x9a, 0xec, 0xd8, 0xa0, 0x12, 0x0f, 0x0e, 0x62, 0xe2, 0xa0, 0x9a, 0x3d, 0x0d, 0x23, 0x40, 0xfa, 0x0f, 0xb8, 0xf3, 0xca, 0x1d, 0x4b, 0x3e, 0x22, 0xaf, 0x0b, 0xe2, 0xc9, 0x3c, 0x1d, 0xc1, 0x30, 0x44, 0x91, 0xfa, 0x01, 0x94, 0x95, 0x56, 0xfa, 0xc6, 0xe8, 0xe3, 0xfc, 0x07, 0x92, 0xde, 0x5f, 0x1d, 0xd3, 0xd6, 0x89, 0xa8, 0x59, 0x0f, 0xbf, 0xa7, 0xb5, 0x25, 0x3a, 0x3f, 0x10, 0xf1, 0x7e, 0xb8, 0x1a, 0xb0, 0xe7, 0xc9, 0x44, 0x62, 0x85, 0x15, 0x2f, 0x71, 0x2a, 0xf5, 0x64, 0x93, 0xc0, 0x78, 0x45, 0xf1, 0xe0, 0xa8, 0x44, 0x89, 0xa1, 0x0f, 0x52, 0xd1, 0xae, 0x7a, 0x9a, 0x9d, 0x9c, 0xfd, 0x70, 0x42, 0x7a, 0x37, 0x84, 0xfc, 0xa9, 0xd7, 0x5c, 0x8d, 0xee, 0x5f, 0x01, 0x27, 0xc5, 0x29, 0xf8, 0x8c, 0xf8, 0xa7, 0x73, 0x74, 0x71, 0xee, 0xc9, 0x2f, 0x4c, 0x76, 0x24, 0x8b, 0x31, 0x1b, 0x79, 0xf8, 0xe1, 0x68, 0xbe, 0xea, 0x0e, 0x15, 0x57, 0x7f, 0x70, 0xce, 0xd1, 0x62, 0x15, 0x37, 0xd2, 0xef, 0xf9, 0x2c, 0x50, 0x98, 0xd6, 0x4d, 0x02, 0x87, 0x3d, 0xba, 0x14, 0x84, 0xe6, 0x1b, 0x1f, 0x1a, 0x45, 0xe4, 0x58, 0xf5, 0x5d, 0xd7, 0x08, 0x8f, 0xd9, 0xca, 0x3c, 0x0c, 0x59, 0xaa, 0xbd, 0x62, 0x0a, 0xc0, 0x42, 0xbc, 0x79, 0x33, 0xe5, 0x21, 0xa9, 0xce, 0xd4, 0x50, 0x63, 0x04, 0x49, 0xef, 0xcd, 0x31, 0xbc, 0xe5, 0x3e, 0x23, 0x57, 0x05, 0x51, 0xd9, 0xaa, 0xec, 0x38, 0x8a, 0xa0, 0x2c, 0x53, 0xea, 0xb1, 0xaa, 0x01, 0xa8, 0x5a, 0x44, 0xb7, 0x3b, 0xca, 0xb7, 0x4f, 0xde, 0xdf, 0xc0, 0xa2, 0xd9, 0x50, 0x82, 0x58, 0x03, 0x2c, 0x28, 0xff, 0x85, 0x83, 0xcb, 0x5b, 0xe0, 0x62, 0x96, 0xfd, 0x32, 0x05, 0x28, 0x17, 0xb5, 0x49, 0x39, 0x8f, 0x88, 0x60, 0x81, 0x52, 0xb2, 0xc8, 0xd5, 0xeb, 0x64, 0x7e, 0x94, 0x54, 0x7e, 0x6f, 0x41, 0x0c, 0x55, 0x2f, 0x71, 0x69, 0xb3, 0xed, 0xe8, 0x30, 0x20, 0xa7, 0xff, 0x63, 0x60, 0x9a, 0x49, 0x5a, 0x3d, 0xfd, 0x75, 0x15, 0x87, 0xee, 0x76, 0xd1, 0x58, 0xad, 0xe2, 0xd9, 0x9c, 0x08, 0x98, 0x9f, 0xd1, 0x16, 0xa6, 0x0b, 0x0c, 0x28, 0x6a, 0x13, 0x3d, 0xfd, 0xf7, 0x8c, 0xb3, 0x35, 0xb9, 0x40, 0xe3, 0x08, 0x5d, 0x40, 0x65, 0x38, 0xeb, 0x7c, 0x3f, 0x44, 0x35, 0x90, 0x66, 0xdf, 0x75, 0xe1, 0x82, 0xa0, 0x32, 0xe9, 0xf2, 0xfb, 0x63, 0xcf, 0x10, 0x70, 0xd7, 0x3b, 0xb6, 0x02, 0xd4, 0x68, 0x01, 0xeb, 0xff, 0x7b, 0x54, 0x8e, 0x7b, 0x13, 0xa0, 0xad, 0x55, 0x21, 0xe3, 0xdc, 0x20, 0xfa, 0xef, 0x36, 0xdc, 0xaa, 0x6d, 0x4e, 0x1d, 0x8b, 0x21, 0x69, 0x69, 0x17, 0x70, 0xea, 0xe1, 0xfb, 0x1f, 0x0d, 0x23, 0x6c, 0x5d, 0xd8, 0x70, 0xbe, 0x04, 0x4f, 0x0a, 0x33, 0x1c, 0xe8, 0xe0, 0x11, 0xa1, 0x3e, 0x6d, 0xf7, 0x85, 0x09, 0xde, 0x70, 0xf9, 0x4e, 0x73, 0xc9, 0xe9, 0xd3, 0x27, 0x20, 0xc5, 0xd6, 0x93, 0xbe, 0x87, 0xfe, 0x10, 0xa7, 0xf2, 0x92, 0x1c, 0x6e, 0x17, 0xe9, 0xff, 0x4e, 0x1e, 0x22, 0xae, 0x77, 0x43, 0x15, 0xef, 0xa6, 0x1f, 0x88, 0xbe, 0xf8, 0x29, 0xa7, 0xef, 0x00, 0x7c, 0xae, 0x16, 0x17, 0xdb, 0xe9, 0xa4, 0xf3, 0xf2, 0xde, 0x52, 0x7c, 0xde, 0xc9, 0xc3, 0xda, 0xf0, 0x48, 0x64, 0xd3, 0xae, 0x58, 0x98, 0x54, 0x1b, 0x80, 0x12, 0x4d, 0x39, 0x4c, 0x81, 0xc2, 0xcb, 0xfd, 0x73, 0x20, 0x5f, 0x7f, 0x73, 0xcd, 0x8c, 0x9b, 0x75, 0x02, 0x79, 0x6e, 0x75, 0xdd, 0x9e, 0x1a, 0x5a, 0xb2, 0xcf, 0xbb, 0x20, 0xa3, 0x76, 0x9d, 0x36, 0x70, 0x20, 0xac, 0x25, 0x90, 0x3b, 0x2b, 0x73, 0x80, 0x1d, 0xa9, 0xc7, 0x5b, 0x49, 0x31, 0x4d, 0xab, 0xee, 0xc2, 0x5c, 0x7e, 0xb1, 0xfe, 0x57, 0xbd, 0xac, 0x26, 0xd1, 0xba, 0xb7, 0x46, 0xf4, 0x08, 0xe6, 0xad, 0x23, 0x8f, 0x53, 0xa0, 0xde, 0xdf, 0x1d, 0x50, 0xe6, 0xc5, 0xb0, 0x09, 0xa2, 0x1c, 0x47, 0xab, 0xc2, 0xe6, 0xb0, 0x5e, 0x22, 0x9c, 0x4f, 0x82, 0xf1, 0xc2, 0x66, 0xe5, 0x12, 0xbd, 0x94, 0x39, 0xc2, 0xe9, 0x9b, 0xc5, 0x7c, 0xe7, 0x66, 0x5a, 0x19, 0x34, 0x4a, 0x89, 0x3c, 0x00, 0x8c, 0x13, 0xed, 0x3d, 0x23, 0xa1, 0x84, 0xf6, 0xc0, 0xb5, 0xc9, 0xe2, 0x0c, 0xe1, 0x59, 0x39, 0x30, 0x37, 0x4c, 0xc6, 0x9b, 0x00, 0x14, 0x3e, 0xff, 0xb1, 0xa8, 0xd0, 0x9d, 0x1a, 0xe3, 0xfd, 0xc3, 0xe1, 0x26, 0xaa, 0x93, 0x2f, 0x45, 0x73, 0x05, 0xa9, 0xa1, 0x43, 0x30, 0xa2, 0x91, 0x21, 0xc5, 0x8e, 0x07, 0x4d, 0xdc, 0xba, 0x70, 0x8c, 0xf3, 0x3b, 0xdb, 0xc0, 0x33, 0x25, 0x5e, 0xbb, 0xf6, 0xfd, 0xb5, 0x55, 0x87, 0x70, 0x2d, 0xbc, 0x28, 0x44, 0xc1, 0x0c, 0x5a, 0x90, 0x82, 0x20, 0x58, 0x28, 0x3c, 0xa7, 0xe5, 0x5c, 0x56, 0x7a, 0x47, 0xe2, 0xfa, 0x2d, 0x94, 0x10, 0x76, 0xe3, 0x2c, 0x4e, 0xe2, 0x67, 0x87, 0xcc, 0x03, 0x79, 0x31, 0x70, 0x70, 0x66, 0x12, 0x13, 0xf3, 0xdc, 0xf3, 0xec, 0x32, 0xfb, 0x3e, 0x4c, 0x8f, 0xaf, 0x05, 0x8c, 0x4c, 0x3e, 0x46, 0x44, 0xf3, 0x1d, 0x6e, 0xbe, 0xf5, 0x08, 0x1b, 0xab, 0x91, 0x51, 0x26, 0x14, 0xf7, 0x79, 0xe1, 0x93, 0xae, 0xfd, 0x9d, 0xc2, 0x33, 0x72, 0x70, 0xf4, 0xe3, 0xd4, 0x35, 0x23, 0x1a, 0x1c, 0xd3, 0x2a, 0x9d, 0x10, 0xc3, 0x34, 0x35, 0x5f, 0xcc, 0x75, 0x9d, 0xed, 0x11, 0x18, 0x9e, 0x6c, 0x4e, 0x78, 0x79, 0x2c, 0x5f, 0x92, 0x85, 0x34, 0x02, 0xbb, 0x19, 0x91, 0xdd, 0x8e, 0xac, 0xee, 0xc3, 0x29, 0x3b, 0x65, 0x33, 0x99, 0xec, 0x95, 0x21, 0x92, 0xf0, 0xf5, 0xf9, 0x63, 0xad, 0x67, 0xe2, 0x2a, 0x1d, 0x11, 0x40, 0x44, 0x71, 0x68, 0x7c, 0x08, 0xfb, 0x8d, 0x07, 0xb5, 0x4a, 0xdd, 0x9c, 0xa8, 0x97, 0xc4, 0xc6, 0xd3, 0x60, 0xd1, 0xa3, 0x6a, 0x52, 0x10, 0xe7, 0xdf, 0x6c, 0x94, 0x23, 0x11, 0x62, 0x53, 0x48, 0xc1, 0x3f, 0x37, 0x67, 0x45, 0x4f, 0x71, 0xba, 0x80, 0x3c, 0x11, 0xe8, 0x11, 0x77, 0xd3, 0x85, 0xcb, 0xd9, 0x3c, 0xd8, 0x65, 0x8b, 0xe6, 0xe2, 0x73, 0x23, 0x19, 0x9b, 0x95, 0x0f, 0x9a, 0x7f, 0xef, 0x37, 0xc8, 0x49, 0xd9, 0xde, 0xe4, 0xff, 0xd7, 0xc9, 0xb1, 0x2e, 0xcb, 0xa4, 0x3d, 0x77, 0x69, 0xa1, 0xfe, 0x4a, 0xec, 0x62, 0x20, 0xf2, 0x07, 0x19, 0x1e, 0xd2, 0x1f, 0xee, 0x90, 0xee, 0xb7, 0xa1, 0x44, 0xad, 0x2c, 0x70, 0x8f, 0xdd, 0xa2, 0x3b, 0xe5, 0xf7, 0x3e, 0xe6, 0xa8, 0xa4, 0x96, 0xff, 0x3e, 0x81, 0x65, 0xa0, 0x66, 0x1f, 0x84, 0x97, 0xcc, 0x4f, 0x15, 0xc5, 0xdb, 0x9c, 0x01, 0xc4, 0xd2, 0x18, 0xa6, 0xcd, 0x1a, 0x5c, 0xc9, 0xd8, 0xd7, 0xca, 0xd2, 0x04, 0xbd, 0x15, 0x38, 0x3a, 0x24, 0x04, 0x3a, 0x0d, 0x5f, 0x72, 0xd0, 0xe5, 0x4a, 0x9a, 0xe1, 0x5d, 0x23, 0x91, 0xb6, 0xe9, 0x9b, 0x14, 0xaf, 0xbc, 0x2c, 0x84, 0x34, 0xe9, 0xac, 0x2f, 0xef, 0xc8, 0x23, 0xd1, 0x38, 0x9b, 0xda, 0x5b, 0xd1, 0x71, 0xb4, 0xf2, 0xd4, 0x4b, 0xc1, 0x3b, 0xe9, 0x7e, 0x11, 0xd6, 0xbc, 0x58, 0xc6, 0x28, 0xaf, 0x06, 0x6d, 0x5e, 0xcc, 0xb5, 0x8f, 0xae, 0xfd, 0xf8, 0x82, 0xe0, 0x7f, 0x6a, 0x85, 0x0e, 0x94, 0x94, 0x0d, 0xa8, 0x78, 0x11, 0x59, 0xba, 0x97, 0xef, 0x4c, 0x72, 0xfd, 0x59, 0x7c, 0xdd, 0x0e, 0x73, 0x87, 0xf1, 0x77, 0x86, 0xa6, 0xd0, 0x64, 0x5d, 0x84, 0x4b, 0xf4, 0xef, 0x50, 0xa5, 0xe9, 0x3e, 0x10, 0x9a, 0xa5, 0x7e, 0x39, 0xa0, 0x52, 0x7a, 0x7d, 0x6d, 0x60, 0x34, 0xe5, 0xb9, 0x34, 0xcb, 0x1f, 0x45, 0x1e, 0xa2, 0x19, 0x1c, 0x8c, 0xbf, 0xcf, 0x19, 0x7e, 0x71, 0x61, 0xa9, 0x3a, 0x36, 0x68, 0xd2, 0x41, 0xdb, 0x8a, 0x75, 0x81, 0xe5, 0x4c, 0xd0, 0xcc, 0x30, 0x28, 0x46, 0x89, 0xd6, 0xe0, 0x63, 0xaa, 0x52, 0x11, 0x1b, 0xde, 0xe6, 0x0b, 0x52, 0x07, 0x3a, 0xe0, 0xa2, 0xee, 0x45, 0xbb, 0x58, 0x35, 0x70, 0x73, 0xbf, 0x8e, 0xf9, 0x60, 0xa2, 0x2b, 0x96, 0x6e, 0x0c, 0x76, 0x5c, 0x6f, 0x52, 0x01, 0xde, 0xb6, 0x53, 0xc0, 0x99, 0xe1, 0xff, 0x76, 0x90, 0xf6, 0x16, 0x6d, 0x33, 0xb2, 0x32, 0x6a, 0x85, 0x1d, 0x08, 0xe0, 0x7e, 0x62, 0xeb, 0x64, 0xae, 0xde, 0x92, 0x61, 0x24, 0x77, 0x1a, 0x0d, 0x8e, 0x2f, 0x4e, 0x9b, 0xa2, 0xf8, 0x27, 0xb3, 0xbc, 0xcb, 0x8f, 0x1f, 0xc8, 0xf4, 0x6a, 0xc7, 0x62, 0xb0, 0xd7, 0xdf, 0x3c, 0xf9, 0xb3, 0x5f, 0xc0, 0xa1, 0x60, 0xb3, 0xf7, 0x9e, 0xc4, 0xb4, 0xaa, 0xa5, 0x94, 0xd8, 0xc7, 0xfa, 0xd2, 0xa5, 0x05, 0x86, 0x94, 0x6c, 0xcb, 0x2a, 0x08, 0x33, 0x4f, 0x53, 0xb5, 0xf3, 0xfb, 0xce, 0x03, 0x04, 0x14, 0xde, 0xfe, 0xd5, 0x9d, 0x8c, 0x57, 0xe0, 0x79, 0x3f, 0xab, 0xdd, 0xd1, 0x8c, 0x08, 0x36, 0xb5, 0x4f, 0xae, 0xbc, 0x06, 0xfb, 0x12, 0x98, 0x93, 0x2e, 0x29, 0x84, 0x82, 0x89, 0xe2, 0x3b, 0xf2, 0xbe, 0xf5, 0x2d, 0xde, 0xea, 0xdb, 0x78, 0x44, 0x26, 0x1d, 0x14, 0x87, 0x58, 0xd2, 0x4d, 0x13, 0x50, 0x63, 0x77, 0x3f, 0x10, 0x92, 0xdd, 0x77, 0x6a, 0xbb, 0xfa, 0x9a, 0xd1, 0x59, 0xec, 0xa1, 0x69, 0xcb, 0x25, 0x82, 0x60, 0x59, 0x64, 0x53, 0x81, 0x72, 0xe3, 0xb3, 0x06, 0x37, 0xd2, 0x66, 0xae, 0x3e, 0x05, 0x3f, 0x10, 0x8f, 0xea, 0x43, 0x2f, 0xf3, 0xbd, 0x0b, 0x4e, 0x6f, 0xff, 0x6a, 0x06, 0x0b, 0x24, 0x50, 0x95, 0xd7, 0x8c, 0xee, 0x79, 0x30, 0xb4, 0x1b, 0x3e, 0x40, 0xae, 0xf7, 0x94, 0xc4, 0xce, 0xce, 0xa4, 0x12, 0xa7, 0x3f, 0xa4, 0x5a, 0x35, 0x9d, 0xa9, 0x2c, 0x5c, 0x95, 0xbd, 0x3a, 0x91, 0x11, 0x32, 0x60, 0xd8, 0x5d, 0x36, 0xe1, 0xee, 0x88, 0xa7, 0xf4, 0xc7, 0x0e, 0x28, 0x7f, 0x3b, 0xb3, 0x74, 0x22, 0xfc, 0xb2, 0xf2, 0x77, 0xcb, 0x17, 0x8a, 0x98, 0xeb, 0x6a, 0xb8, 0xe2, 0xd6, 0x8d, 0xde, 0xf9, 0x30, 0xe7, 0xdf, 0x0c, 0xf9, 0xc3, 0xe9, 0x5b, 0x06, 0xf2, 0x92, 0xf6, 0xb2, 0xb8, 0x27, 0xc7, 0xd1, 0xe6, 0x40, 0xd2, 0xe5, 0x43, 0x98, 0xbc, 0x95, 0x30, 0x1c, 0x8a, 0x5a, 0x8c, 0x42, 0xac, 0x7c, 0xd6, 0x9c, 0x3a, 0x3d, 0x91, 0xad, 0x7d, 0x53, 0xed, 0xfb, 0xb1, 0x9c, 0xa3, 0x65, 0x09, 0x0e, 0x21, 0xb7, 0xf4, 0xed, 0xe7, 0x7c, 0x9f, 0x40, 0x31, 0x14, 0xbb, 0x85, 0xd6, 0x06, 0x80, 0xa4, 0x70, 0x97, 0xf2, 0x22, 0xbd, 0x9b, 0x63, 0x97, 0x45, 0x8b, 0x39, 0x62, 0x3d, 0xd8, 0xf1, 0x9b, 0xac, 0x7f, 0x64, 0x49, 0xcc, 0xde, 0x49, 0xd5, 0xb3, 0xc5, 0xfc, 0xbf, 0x32, 0xd1, 0x7e, 0x90, 0xfe, 0xf5, 0xbc, 0x10, 0x0d, 0x5a, 0x14, 0xb8, 0x43, 0x69, 0x15, 0x6a, 0x4e, 0x26, 0x86, 0x60, 0xcf, 0xbf, 0xaa, 0x63, 0xba, 0x64, 0xc3, 0x3d, 0xff, 0x5a, 0xd5, 0x70, 0x6a, 0x4b, 0xac, 0x28, 0xc7, 0xe1, 0x20, 0x6f, 0x4b, 0x93, 0x98, 0xa0, 0x2f, 0xbe, 0xcd, 0x1e, 0x9e, 0xf7, 0xd1, 0x45, 0xd1, 0xa0, 0x4f, 0xa1, 0x79, 0xb9, 0x14, 0x5e, 0x5d, 0xf9, 0xce, 0x00, 0x44, 0x1d, 0x14, 0x55, 0x15, 0x81, 0xa7, 0xa7, 0x3d, 0xed, 0xf8, 0x35, 0x51, 0xb1, 0xea, 0xe5, 0xf4, 0xf4, 0xd8, 0x33, 0xfc, 0x49, 0xda, 0x6d, 0xd0, 0x83, 0x44, 0x22, 0x14, 0xcb, 0x70, 0xd8, 0x89, 0xef, 0xbe, 0xfd, 0x2e, 0xfd, 0xd8, 0x20, 0xac, 0x11, 0x3b, 0x61, 0xf0, 0x6b, 0xf3, 0x26, 0x1a, 0xc4, 0xa5, 0x10, 0x96, 0xe2, 0xd3, 0x2e, 0x88, 0x6b, 0x5c, 0x70, 0x6e, 0xf7, 0x42, 0x5e, 0x01, 0x68, 0xb0, 0x09, 0x5b, 0x7e, 0x3c, 0x42, 0x5f, 0xa6, 0x69, 0x0b, 0x56, 0x13, 0x70, 0x4b, 0xd6, 0x10, 0x40, 0xc6, 0xe8, 0x95, 0xc3, 0x4b, 0x69, 0x18, 0x63, 0x2f, 0xb1, 0xa5, 0xcd, 0xfb, 0x73, 0x31, 0xf4, 0x62, 0xe4, 0x2c, 0x59, 0x76, 0x20, 0x55, 0x8b, 0x1b, 0xc9, 0xd2, 0xe9, 0xbb, 0xf1, 0x80, 0xaf, 0x3b, 0x3a, 0x88, 0x31, 0x2e, 0x3b, 0x33, 0x61, 0x49, 0x26, 0xff, 0x97, 0x17, 0xa8, 0xf2, 0x92, 0xee, 0x11, 0x2e, 0xba, 0x22, 0xb5, 0xc6, 0xa7, 0x78, 0x92, 0xd0, 0xe7, 0xde, 0x33, 0xbb, 0xfc, 0x59, 0xd4, 0xe3, 0xa5, 0x3e, 0xc6, 0x63, 0x5f, 0xa5, 0x15, 0x2a, 0x2a, 0x1b, 0x69, 0x52, 0x90, 0x97, 0x2a, 0xad, 0xe4, 0xb0, 0xe7, 0xa0, 0xc8, 0x0c, 0xf9, 0x34, 0xf1, 0x1c, 0x63, 0x6a, 0x2f, 0x06, 0xfd, 0xcf, 0xa7, 0xe3, 0xd2, 0x51, 0x63, 0x2b, 0xc6, 0x51, 0x0e, 0x6d, 0x7c, 0xf9, 0xf8, 0x44, 0x76, 0xd0, 0x61, 0x86, 0x7e, 0x8b, 0xf3, 0xbe, 0x45, 0x27, 0x90, 0xdd, 0x4b, 0x34, 0x4e, 0x2c, 0xfe, 0x74, 0xc0, 0x85, 0x26, 0xa4, 0x78, 0xc3, 0x80, 0x9a, 0xc9, 0x77, 0xa9, 0x90, 0xd2, 0xdd, 0x3e, 0xc0, 0xb7, 0x0e, 0x42, 0x31, 0x32, 0x76, 0xc0, 0xd0, 0x4b, 0x89, 0xb1, 0xc2, 0x63, 0xb2, 0x1f, 0xf9, 0x77, 0x8c, 0x8b, 0x05, 0xa3, 0x55, 0x8d, 0x2d, 0xe5, 0xa0, 0xba, 0xbf, 0x24, 0x49, 0xca, 0xa4, 0x71, 0xae, 0xfb, 0x37, 0x8c, 0x1c, 0xb0, 0x58, 0xaa, 0x88, 0x5e, 0xbb, 0x75, 0x80, 0xa8, 0x86, 0x55, 0x61, 0xc9, 0x1c, 0xee, 0xc9, 0x33, 0x33, 0xea, 0x4f, 0x75, 0x2d, 0xf8, 0x72, 0x62, 0xa5, 0x14, 0xd0, 0x70, 0x48, 0x0a, 0x99, 0x5e, 0xe6, 0x35, 0x42, 0x1a, 0xc8, 0x8d, 0x7e, 0xe1, 0x45, 0xe1, 0x6a, 0xa8, 0x90, 0x60, 0x07, 0xbb, 0xd4, 0x5e, 0xee, 0xa4, 0x83, 0x55, 0x3f, 0x4e, 0xeb, 0x2a, 0xdb, 0x6a, 0x0a, 0xb2, 0xd3, 0x12, 0xa3, 0x75, 0x20, 0xac, 0x91, 0xb2, 0x94, 0x12, 0x5c, 0xa3, 0x10, 0xf0, 0x0a, 0x01, 0xf8, 0x6d, 0x37, 0xcb, 0xe4, 0x0d, 0x68, 0x44, 0x98, 0xd5, 0x9d, 0x3b, 0x37, 0xb1, 0x25, 0x8e, 0xb3, 0x14, 0xb6, 0xf1, 0x88, 0xde, 0xbd, 0xec, 0xaa, 0x82, 0xf3, 0x23, 0xbb, 0x68, 0x31, 0xda, 0x82, 0x90, 0x85, 0xb8, 0x99, 0x79, 0x85, 0xcb, 0x65, 0x41, 0xe3, 0xcd, 0x4b, 0x0d, 0x42, 0xa6, 0x21, 0xab, 0x48, 0x31, 0xe3, 0x76, 0xf5, 0x43, 0xa8, 0x7a, 0x33, 0xea, 0xd4, 0xd9, 0xae, 0xf2, 0x8e, 0x6e, 0xe5, 0xae, 0x75, 0xaf, 0x82, 0xf5, 0x8e, 0xd8, 0xe6, 0x6a, 0x81, 0x46, 0x09, 0x00, 0x06, 0x20, 0x81, 0xbe, 0x9a, 0x3d, 0xe0, 0xc0, 0x76, 0x42, 0x43, 0x7f, 0xc1, 0x0b, 0x28, 0x52, 0x05, 0x4d, 0x80, 0x34, 0xe0, 0x79, 0x06, 0xc7, 0xfc, 0xe3, 0xce, 0x99, 0x40, 0x23, 0x21, 0xa6, 0x48, 0xbb, 0x88, 0x1f, 0x13, 0xfb, 0x27, 0x6a, 0xfc, 0x22, 0x4c, 0x6a, 0xec, 0xc6, 0x48, 0x00, 0xcd, 0x76, 0x7e, 0xd2, 0x42, 0x9d, 0xb9, 0x4b, 0x95, 0xa9, 0xc3, 0xe3, 0xf1, 0x6d, 0x33, 0xa0, 0xd1, 0xc4, 0x86, 0xdc, 0xb8, 0x78, 0x71, 0x4a, 0x23, 0x62, 0x76, 0x34, 0xbb, 0xd2, 0xb6, 0x06, 0xd0, 0x31, 0x06, 0x10, 0x03, 0xe4, 0x44, 0x88, 0x42, 0x74, 0xec, 0xce, 0xfa, 0xec, 0xe6, 0xf4, 0x87, 0x83, 0xa2, 0x7e, 0xf0, 0x7b, 0x67, 0x66, 0xd1, 0x49, 0xe8, 0x64, 0x98, 0xf6, 0x19, 0x6c, 0xf4, 0xc5, 0x40, 0x77, 0x8b, 0x16, 0x4f, 0x86, 0xec, 0x8a, 0x71, 0xe4, 0xc4, 0x68, 0xe3, 0xac, 0x54, 0x40, 0x05, 0x8c, 0x22, 0xce, 0xb1, 0xc8, 0xef, 0x20, 0xcb, 0x82, 0xea, 0xfb, 0x19, 0x38, 0x23, 0x7c, 0x55, 0x8e, 0x42, 0xfb, 0x81, 0x4e, 0x79, 0x34, 0x7b, 0xad, 0xb7, 0xa9, 0xd1, 0xd0, 0x1f, 0x42, 0xd6, 0x8e, 0xb8, 0x37, 0xf6, 0x78, 0x66, 0x2f, 0x46, 0x16, 0x19, 0xaa, 0x5f, 0x74, 0x44, 0x9c, 0x6d, 0xdd, 0x91, 0x5a, 0x83, 0xe7, 0xd3, 0xba, 0x32, 0xb0, 0x3b, 0x76, 0x59, 0x66, 0xd0, 0xd2, 0x3e, 0x0d, 0x19, 0x7f, 0xde, 0x7c, 0x1c, 0xbe, 0x82, 0xa9, 0x8d, 0xc9, 0x93, 0x27, 0x3f, 0x6e, 0xaf, 0xed, 0xde, 0xfd, 0xfc, 0x59, 0xe0, 0x64, 0xbd, 0x75, 0xb9, 0x99, 0x23, 0x78, 0x4e, 0x38, 0x65, 0x90, 0xad, 0x6e, 0x13, 0xde, 0xfb, 0x15, 0xa7, 0xc2, 0xad, 0x20, 0x5d, 0x5a, 0xfc, 0x3a, 0x44, 0x45, 0x92, 0xaa, 0x95, 0xad, 0x8a, 0x7a, 0x44, 0x84, 0x97, 0xd8, 0xd6, 0x0d, 0x83, 0xbc, 0x72, 0x9f, 0xdc, 0xcb, 0x3a, 0xa6, 0xea, 0x7c, 0xdc, 0xea, 0xe3, 0x79, 0x63, 0x14, 0x62, 0x48, 0x54, 0x6e, 0x16, 0x2a, 0xf6, 0xea, 0xb7, 0x43, 0xf1, 0x66, 0x3f, 0xfc, 0x1a, 0x2e, 0x56, 0xa6, 0x8e, 0xc2, 0x0e, 0x60, 0xfe, 0xda, 0xd0, 0x3a, 0x49, 0xa8, 0x97, 0x9a, 0x50, 0x5d, 0x5b, 0xdf, 0x06, 0xee, 0xd1, 0x45, 0xc6, 0x18, 0x51, 0x08, 0xea, 0xa2, 0x17, 0xcd, 0x99, 0xe2, 0xaf, 0x3d, 0xe0, 0x82, 0xab, 0xf3, 0x04, 0x84, 0x97, 0x98, 0x17, 0x84, 0x2f, 0x4c, 0xca, 0x3d, 0xcf, 0x48, 0x82, 0x4f, 0x2a, 0xc2, 0xae, 0x40, 0x3f, 0x11, 0x57, 0xc0, 0x89, 0x12, 0xf8, 0x31, 0x76, 0xca, 0x91, 0x66, 0x1b, 0x4d, 0xf7, 0xab, 0x26, 0xde, 0x6e, 0x06, 0x14, 0x57, 0x79, 0xbd, 0xa4, 0xcc, 0xf1, 0x18, 0x8b, 0x6b, 0x55, 0x68, 0x69, 0xa6, 0x61, 0x48, 0xfc, 0x95, 0xe2, 0x23, 0x93, 0x95, 0xc8, 0xf7, 0xc6, 0x36, 0x7d, 0x58, 0x65, 0x54, 0x75, 0xb7 ],
+const [ 0x21, 0x5c, 0x37, 0x32, 0x0f, 0xbd, 0xd5, 0x52, 0x00, 0x37, 0xbc, 0xe5, 0xb0, 0x2b, 0x12, 0x87, 0x1b, 0x34, 0x5b, 0xbd, 0x84, 0x16, 0x9d, 0x87, 0xbc, 0xf1, 0xc1, 0x34, 0xa1, 0xbb, 0x3d, 0x7a, 0xe5, 0xec, 0xf0, 0xc6, 0x11, 0x7b, 0x4d, 0xd1, 0xc9, 0x0a, 0xbc, 0x74, 0x51, 0x5e, 0x3d, 0xbd, 0x50, 0x11, 0x4f, 0x42, 0xd4, 0x8b, 0x10, 0xb5, 0x97, 0x2e, 0xa5, 0xb9, 0x81, 0xd1, 0xdc, 0xf4, 0x6d, 0x70, 0x10, 0x66, 0x30, 0x21, 0x4e, 0xf9, 0xd7, 0x4a, 0xb5, 0x59, 0x31, 0x12, 0x23, 0x05, 0x8e, 0x15, 0x0e, 0xa7, 0xc5, 0x5c, 0xaf, 0xa1, 0x7c, 0x8c, 0x66, 0xe8, 0xa3, 0x5d, 0x5a, 0x15, 0x42, 0x4e, 0x60, 0xb9, 0x75, 0x98, 0x1e, 0xf1, 0xb4, 0x60, 0x70, 0x3b, 0x58, 0x30, 0x0a, 0x88, 0x5b, 0xa8, 0x5f, 0x93, 0x60, 0x71, 0xc2, 0x70, 0xf3, 0x73, 0xcb, 0x68, 0x11, 0x48, 0xfd, 0x04, 0xeb, 0xf0, 0xa5, 0x68, 0xe7, 0xc6, 0x05, 0xe2, 0xe8, 0xb2, 0xb2, 0xc3, 0xcf, 0xa1, 0x3b, 0x6e, 0x42, 0x32, 0x0b, 0xae, 0xac, 0xb2, 0x91, 0x4d, 0x84, 0x4b, 0x9e, 0xe2, 0xd3, 0x78, 0x0e, 0xea, 0xf0, 0xbc, 0xaa, 0x1a, 0x8e, 0x94, 0x4d, 0xf4, 0xf9, 0xaa, 0x46, 0x99, 0x9d, 0x4b, 0xfe, 0xde, 0xc8, 0x1b, 0xdb, 0xa1, 0xb1, 0x08, 0x63, 0x5e, 0xb8, 0x7c, 0xa5, 0xfd, 0xef, 0xd7, 0xd4, 0xee, 0xda, 0x1c, 0x36, 0x78, 0x73, 0xea, 0x3c, 0x4e, 0x71, 0xaf, 0xf3, 0x64, 0xca, 0x18, 0x9b, 0x00, 0x77, 0xcc, 0x94, 0x14, 0x77, 0x59, 0x82, 0xcb, 0x16, 0x6e, 0xa9, 0x62, 0x6f, 0x4c, 0x99, 0x39, 0x30, 0x77, 0x10, 0x2a, 0x9d, 0xb1, 0x1c, 0x19, 0xd8, 0x28, 0x80, 0xcc, 0x5f, 0xef, 0x59, 0xfd, 0xd6, 0xab, 0x01, 0xae, 0x07, 0x8f, 0x34, 0xbd, 0x27, 0x8a, 0x71, 0xb8, 0x5a, 0xbe, 0xa3, 0xf2, 0x7a, 0x35, 0x01, 0xd7, 0x14, 0xcf, 0x33, 0x7c, 0xb4, 0x7f, 0xb6, 0x7b, 0x63, 0xb7, 0x81, 0xfd, 0x6d, 0x21, 0xe9, 0x18, 0x68, 0x90, 0xc2, 0x5c, 0x71, 0x36, 0xc7, 0xa8, 0xb9, 0x17, 0x3c, 0x42, 0x41, 0xbd, 0xd1, 0x27, 0xe1, 0x2e, 0xca, 0xa0, 0x8f, 0x1b, 0x5d, 0x16, 0xde, 0x5a, 0x5b, 0x27, 0xc5, 0x97, 0x13, 0xfa, 0xa2, 0x46, 0x74, 0xcf, 0x7e, 0xdb, 0x71, 0xda, 0x93, 0x3e, 0xaa, 0x51, 0x0b, 0x79, 0x48, 0xc4, 0x0b, 0xb4, 0x28, 0xad, 0xf0, 0x64, 0x3d, 0x48, 0xd9, 0xbf, 0x2f, 0xa4, 0x65, 0x73, 0x48, 0xfa, 0xbe, 0x97, 0x91, 0x3f, 0xd6, 0xe2, 0x38, 0xf5, 0xf0, 0x1b, 0x35, 0x46, 0x63, 0xd0, 0x2d, 0x53, 0x9a, 0x4b, 0x97, 0xca, 0x60, 0xc2, 0x1d, 0xb6, 0x5a, 0xce, 0x45, 0x9c, 0xd5, 0x1e, 0x50, 0xc3, 0xc3, 0x6d, 0x63, 0xd3, 0xff, 0xb1, 0xe4, 0xa2, 0xd9, 0x96, 0x27, 0x4a, 0xce, 0x2a, 0x4a, 0x7f, 0x97, 0xda, 0x5d, 0x1f, 0x66, 0x9d, 0xc6, 0x0b, 0x6c, 0x6f, 0xe4, 0x36, 0x9e, 0x01, 0xf3, 0xfb, 0xb9, 0xaf, 0x30, 0xb4, 0x83, 0xb2, 0x3d, 0x88, 0x54, 0x97, 0xc6, 0x84, 0xd6, 0xef, 0x65, 0xed, 0x09, 0x49, 0xc3, 0xd5, 0x8a, 0x5d, 0x01, 0xed, 0x14, 0x8a, 0x56, 0x9a, 0x47, 0x83, 0xf9, 0x4b, 0xa8, 0x45, 0x41, 0x09, 0xea, 0x4c, 0x0a, 0x50, 0x6c, 0x06, 0x5c, 0x1d, 0x02, 0x88, 0x47, 0x48, 0xf8, 0x80, 0x11, 0x14, 0x54, 0x6a, 0x94, 0x05, 0x5c, 0x07, 0xe1, 0xf1, 0x58, 0x0b, 0x29, 0x5a, 0x99, 0x16, 0xde, 0xfb, 0xba, 0xe6, 0x15, 0xa1, 0x26, 0xcb, 0x2f, 0x3c, 0xda, 0x5b, 0xb8, 0x36, 0x6d, 0x66, 0x8f, 0x03, 0x4d, 0x2d, 0x47, 0xfa, 0x4b, 0xce, 0xce, 0x63, 0x5a, 0x03, 0x4c, 0xd1, 0x93, 0x0c, 0x4e, 0xb2, 0x7d, 0xea, 0x24, 0x24, 0x8c, 0xce, 0x87, 0x0a, 0xe7, 0xd1, 0x80, 0x5f, 0x6e, 0xe5, 0x85, 0xcb, 0xfc, 0x0c, 0xe4, 0x74, 0xe9, 0xc8, 0x65, 0x17, 0xd4, 0xd2, 0x2a, 0x57, 0x9f, 0x0e, 0xdb, 0x55, 0xba, 0xbf, 0x00, 0x80, 0xa5, 0xf8, 0xae, 0xaf, 0xb0, 0x53, 0x66, 0x6d, 0x06, 0xe4, 0x3a, 0x93, 0xe9, 0x70, 0x31, 0x1d, 0x3f, 0xdb, 0xed, 0x36, 0x4e, 0xe0, 0x8b, 0x95, 0xc4, 0x05, 0xcb, 0x0c, 0xfa, 0xcd, 0x71, 0x5e, 0x79, 0x2f, 0xeb, 0x52, 0xbe, 0x47, 0x33, 0x05, 0x3a, 0x4c, 0xf7, 0x84, 0x9d, 0xc2, 0xf8, 0x9a, 0x54, 0xf0, 0xb0, 0xe7, 0x50, 0x95, 0x37, 0x32, 0x0a, 0xd7, 0x67, 0x01, 0xc4, 0x7c, 0x3f, 0x66, 0x11, 0x5c, 0x85, 0x1b, 0x97, 0x16, 0xaf, 0xd1, 0x14, 0x03, 0x04, 0xc6, 0x9f, 0x68, 0xff, 0x96, 0x31, 0xf0, 0xf4, 0x53, 0x63, 0x59, 0xf5, 0xd7, 0x79, 0x6d, 0xf7, 0x59, 0xa0, 0x34, 0x31, 0x3f, 0x74, 0x68, 0xc5, 0x33, 0xc5, 0x29, 0xa2, 0x79, 0x9b, 0xf2, 0xa9, 0x80, 0x77, 0xcc, 0x0f, 0xb7, 0xdc, 0xc1, 0x02, 0xa1, 0x0e, 0x94, 0x8f, 0x2c, 0x1a, 0xaf, 0xc3, 0x3f, 0x16, 0x5d, 0x10, 0x92, 0xaa, 0x39, 0xf3, 0xc2, 0xd0, 0xe7, 0xd4, 0xa5, 0xd7, 0x01, 0x2e, 0xdb, 0xae, 0x54, 0xef, 0xa5, 0x5f, 0x4d, 0x22, 0xfa, 0xda, 0xae, 0xcb, 0xd8, 0xf4, 0x85, 0x12, 0xd9, 0xaf, 0x5f, 0xa4, 0x06, 0xbc, 0xb9, 0x57, 0xef, 0x3e, 0xb7, 0x0d, 0xfc, 0xd1, 0x19, 0xda, 0xfe, 0xcb, 0x6a, 0x69, 0x09, 0xc2, 0x7a, 0x9b, 0x86, 0x4e, 0x0f, 0x72, 0x84, 0x0f, 0xd8, 0x2e, 0x4f, 0xf2, 0xa2, 0xb5, 0x44, 0xb1, 0xce, 0x38, 0xe3, 0x99, 0x03, 0x14, 0x26, 0x90, 0x20, 0xf6, 0x11, 0x56, 0x75, 0x43, 0x8b, 0x0b, 0x32, 0xb7, 0x6c, 0xf2, 0x1f, 0x4c, 0xd7, 0x74, 0x8e, 0x5d, 0xca, 0x68, 0x8f, 0x0b, 0xf3, 0x91, 0x62, 0xe0, 0xc6, 0x68, 0x32, 0xb2, 0xcc, 0x1c, 0x00, 0xca, 0x3e, 0xd8, 0xdd, 0x46, 0xd2, 0x44, 0x5c, 0xbc, 0xd5, 0x4e, 0x47, 0x20, 0x7a, 0x2a, 0x91, 0xe8, 0x72, 0x97, 0x8c, 0x6d, 0xbc, 0x65, 0x5c, 0x95, 0xbf, 0x34, 0xac, 0xaf, 0x96, 0x7e, 0x9f, 0x9e, 0xab, 0xd8, 0x09, 0x3a, 0x87, 0x74, 0xe0, 0xf3, 0xe8, 0xeb, 0xed, 0xb8, 0x14, 0x39, 0xc7, 0x17, 0x6e, 0x09, 0x02, 0xa5, 0x47, 0x34, 0xa4, 0xa0, 0xf6, 0x84, 0xd8, 0xd3, 0x2b, 0xbd, 0xe7, 0xba, 0x80, 0xde, 0x63, 0xe7, 0x51, 0xa4, 0xa6, 0xa4, 0xce, 0x50, 0x7b, 0xda, 0x4e, 0xaa, 0x1a, 0x31, 0xe7, 0x46, 0x5a, 0x79, 0x3b, 0x06, 0x22, 0x49, 0x94, 0xe0, 0x20, 0xe5, 0x34, 0xe1, 0xbe, 0x65, 0xe6, 0x72, 0x52, 0x14, 0xd9, 0xdb, 0x95, 0x17, 0xae, 0x05, 0x57, 0x4f, 0xd0, 0x84, 0x71, 0x80, 0x04, 0xd4, 0xfa, 0xb2, 0x41, 0xe3, 0xbe, 0xd7, 0xc1, 0xd0, 0xeb, 0xaf, 0x58, 0xf3, 0x0e, 0xe9, 0x05, 0x1d, 0x3e, 0x8b, 0xc7, 0x21, 0x97, 0x93, 0xb1, 0x93, 0xeb, 0xde, 0x41, 0xcf, 0xb3, 0x4a, 0xee, 0x3d, 0x4c, 0x18, 0x00, 0xd4, 0x60, 0x94, 0xa4, 0xdd, 0xa2, 0xf7, 0x40, 0xfa, 0xbe, 0x8c, 0x04, 0x66, 0x8f, 0x12, 0xc2, 0x7e, 0x93, 0x62, 0xff, 0x81, 0x9d, 0x51, 0x4a, 0x94, 0xca, 0xd8, 0xcc, 0x09, 0xb6, 0x72, 0x21, 0xe0, 0xf0, 0xc6, 0x66, 0x8e, 0xab, 0x86, 0x93, 0xfe, 0xb6, 0x97, 0x0b, 0xd6, 0xae, 0x72, 0x72, 0xfb, 0x72, 0xca, 0xbf, 0x57, 0xd7, 0x6f, 0x92, 0xda, 0x9d, 0x72, 0xc7, 0xbe, 0xa2, 0x8a, 0x4b, 0x10, 0x56, 0xb6, 0x2e, 0x6c, 0x6f, 0x24, 0xfa, 0x08, 0xde, 0x52, 0x44, 0xf3, 0x01, 0x73, 0x80, 0x9f, 0x1a, 0x14, 0x1a, 0x9e, 0x00, 0xff, 0xc2, 0xa9, 0x14, 0x5f, 0x07, 0xe6, 0x77, 0x26, 0x27, 0x6b, 0x7a, 0xac, 0x25, 0xfe, 0x56, 0x98, 0x1d, 0x1e, 0x1e, 0x04, 0xd5, 0x48, 0xf1, 0xdc, 0x94, 0x73, 0x74, 0x87, 0x37, 0xdd, 0x7f, 0xca, 0x81, 0x09, 0x17, 0xe9, 0xb3, 0x08, 0x9d, 0x0f, 0x5c, 0xf9, 0x44, 0xef, 0x73, 0xcc, 0xc9, 0xac, 0xa3, 0x4b, 0x5e, 0xf6, 0xe6, 0x5a, 0xe7, 0x77, 0x55, 0x7d, 0x68, 0x6d, 0x3f, 0x9c, 0xbe, 0x98, 0x78, 0x03, 0x8e, 0x56, 0xf3, 0xad, 0x7c, 0x0d, 0x93, 0xc2, 0x9d, 0xc9, 0x3f, 0x5e, 0x2e, 0x26, 0x35, 0x94, 0x86, 0x71, 0xa0, 0xb3, 0x49, 0x0a, 0x6c, 0xc7, 0xdf, 0x0c, 0x59, 0x63, 0x24, 0x30, 0x4e, 0x9e, 0x61, 0xef, 0xf1, 0x5c, 0x7c, 0xe7, 0x74, 0xcf, 0x6b, 0x80, 0xb1, 0x3d, 0xee, 0xcf, 0x7a, 0x03, 0x7e, 0xbb, 0x2a, 0xda, 0x80, 0x5e, 0x80, 0x59, 0xbf, 0xae, 0xae, 0xbb, 0x19, 0x5c, 0xac, 0xe3, 0x79, 0xfc, 0xd2, 0x9d, 0x05, 0x67, 0xa6, 0x27, 0x98, 0x5d, 0xf3, 0xf0, 0x72, 0x6f, 0x1b, 0x9f, 0x2e, 0x1c, 0xad, 0x57, 0xf5, 0x3b, 0x3a, 0x39, 0xf2, 0x99, 0x65, 0x2b, 0x05, 0xe2, 0x3a, 0xd8, 0xbc, 0xc5, 0xc1, 0xf8, 0x7f, 0x53, 0xd2, 0xd2, 0x0a, 0xa8, 0x2a, 0xff, 0x21, 0xce, 0xbf, 0x70, 0x7e, 0xde, 0x51, 0xb3, 0x0f, 0x68, 0x42, 0x71, 0x5e, 0x15, 0xa7, 0x3c, 0x51, 0x8b, 0x9f, 0x87, 0x13, 0x91, 0xe4, 0xf6, 0x52, 0x74, 0x9f, 0xd9, 0xab, 0xa9, 0x81, 0xf3, 0x62, 0xb3, 0x0f, 0x7f, 0x57, 0x48, 0x3d, 0x75, 0x35, 0xaf, 0x3f, 0x09, 0xed, 0x6c, 0x9c, 0x74, 0x63, 0x1f, 0x84, 0xf8, 0x66, 0xaa, 0x63, 0x1e, 0xe6, 0x92, 0xb6, 0x43, 0x61, 0xa8, 0x1e, 0x52, 0x9f, 0xe8, 0xb2, 0xd3, 0x9f, 0xa1, 0x9a, 0x25, 0xd1, 0xd6, 0xda, 0x07, 0x86, 0xe4, 0x6b, 0x5e, 0xa4, 0x66, 0x90, 0x32, 0x9e, 0x56, 0x67, 0xf9, 0xa3, 0x75, 0xbe, 0x18, 0x16, 0xec, 0x29, 0xa7, 0x3f, 0x33, 0x51, 0x74, 0x40, 0x32, 0x8f, 0x4b, 0x4a, 0xa6, 0xba, 0x75, 0x10, 0xc7, 0x3d, 0x7f, 0x7c, 0x28, 0x6c, 0x3d, 0xa1, 0xde, 0x18, 0x0d, 0xf2, 0xe4, 0x60, 0x60, 0xb1, 0xbe, 0xcb, 0x77, 0xaa, 0x5d, 0x94, 0x6b, 0x20, 0x43, 0x45, 0x70, 0x08, 0xe7, 0x87, 0x5a, 0x75, 0x5b, 0x39, 0x61, 0x54, 0x2c, 0xbf, 0x21, 0x59, 0x8a, 0x9d, 0xe5, 0x39, 0xa8, 0x44, 0x24, 0x1a, 0x66, 0x2b, 0x4c, 0x47, 0x2e, 0x22, 0xbf, 0x29, 0x1b, 0xe4, 0x1b, 0x73, 0x61, 0xeb, 0xbf, 0x9c, 0xe9, 0x88, 0x8b, 0x92, 0x3b, 0x32, 0xe6, 0xad, 0xa1, 0x1f, 0x06, 0xe1, 0x89, 0x11, 0x6c, 0x39, 0x2c, 0x73, 0xad, 0x80, 0x6d, 0xa4, 0x78, 0x41, 0x04, 0x93, 0xd5, 0xf3, 0xdb, 0x8c, 0xab, 0x6d, 0xb8, 0x51, 0x85, 0xa0, 0x1d, 0x6d, 0x95, 0x84, 0x6d, 0xc5, 0xfa, 0x53, 0x4f, 0x70, 0x3e, 0xf6, 0x57, 0xc8, 0x23, 0xbc, 0xe4, 0xc1, 0x9f, 0x52, 0x44, 0x7a, 0x25, 0xf0, 0x1f, 0x12, 0x26, 0xd0, 0x12, 0xbd, 0xd8, 0xe4, 0x9a, 0x17, 0x36, 0xc8, 0x34, 0xb8, 0x48, 0xf6, 0xc2, 0x08, 0xa4, 0x39, 0x31, 0x54, 0x35, 0x64, 0x59, 0x22, 0x3b, 0x43, 0x24, 0xc2, 0x93, 0xd2, 0xf3, 0x26, 0x39, 0xad, 0x3d, 0xf4, 0x0b, 0xc8, 0x79, 0xd8, 0xcf, 0x60, 0x3f, 0x1f, 0x78, 0x31, 0xaa, 0x82, 0xa5, 0xea, 0x00, 0x3f, 0x6b, 0xde, 0x95, 0x6f, 0x54, 0xfc, 0xec, 0x93, 0xa7, 0x01, 0x20, 0x70, 0xea, 0xec, 0x82, 0x1d, 0xa6, 0xb2, 0x84, 0x5a, 0x6a, 0x34, 0xd6, 0x23, 0x12, 0x6e, 0xce, 0x85, 0x49, 0xf1, 0x0d, 0xb1, 0x4d, 0x93, 0x60, 0x4f, 0xf3, 0x65, 0xe4, 0x14, 0xea, 0xe5, 0x6e, 0x97, 0x43, 0x75, 0x29, 0x60, 0x31, 0x0c, 0x81, 0x42, 0x0e, 0x2c, 0x40, 0xec, 0x9f, 0x14, 0xf7, 0xba, 0x99, 0x36, 0xa0, 0xd1, 0x64, 0xeb, 0x81, 0x6a, 0x1e, 0x66, 0x54, 0x6e, 0xe3, 0xe6, 0xa4, 0x44, 0x4c, 0x30, 0x7a, 0xe6, 0x35, 0x3d, 0x39, 0x3b, 0xc4, 0x30, 0xc7, 0xa1, 0xa7, 0x8b, 0xed, 0xc8, 0x9c, 0xa1, 0x01, 0xc7, 0x37, 0x4f, 0xc2, 0x69, 0xe0, 0xe7, 0x83, 0xc8, 0x1b, 0x6d, 0x8c, 0x1e, 0x0c, 0x06, 0xbd, 0xd7, 0x3a, 0xad, 0x74, 0xeb, 0x93, 0x28, 0xb1, 0x6a, 0xb0, 0x3a, 0x78, 0x59, 0x5b, 0x1b, 0x77, 0xbc, 0x4e, 0x25, 0xe9, 0xf4, 0x3e, 0xd0, 0xba, 0x4b, 0x18, 0xe0, 0xec, 0xce, 0x8b, 0xdd, 0x39, 0x5b, 0xc6, 0xc4, 0xfa, 0xfa, 0x83, 0xfc, 0x47, 0x70, 0x44, 0x8b, 0x60, 0x12, 0xdc, 0x8a, 0x4b, 0xd8, 0x32, 0xd6, 0xbf, 0xb2, 0x42, 0x09, 0x41, 0x1f, 0x64, 0xa9, 0x8d, 0xfb, 0xd1, 0x9f, 0x37, 0x98, 0x63, 0xea, 0x92, 0x11, 0x9c, 0x94, 0xd1, 0xdb, 0xea, 0xe5, 0x6c, 0x9d, 0x29, 0xd8, 0xc6, 0x42, 0x6a, 0xcb, 0x0c, 0x4c, 0xf3, 0x7a, 0x60, 0x6b, 0x87, 0x2e, 0x37, 0x4e, 0xe7, 0x32, 0xff, 0xb9, 0x98, 0x87, 0x06, 0xd8, 0xe7, 0xd8, 0x97, 0xd3, 0x2b, 0xb0, 0x66, 0xa2, 0x4a, 0xeb, 0x2d, 0x23, 0x7e, 0x6b, 0x98, 0x69, 0x59, 0x0c, 0x5f, 0x57, 0x07, 0xd9, 0xb1, 0x6e, 0xd4, 0x80, 0xd9, 0xe4, 0xed, 0x03, 0x1c, 0xf6, 0x6b, 0xb1, 0xe0, 0x7f, 0x8d, 0x55, 0x14, 0xc8, 0x45, 0xad, 0xcb, 0xa2, 0xf7, 0x1d, 0x2a, 0xb2, 0x7d, 0xa5, 0x85, 0x0d, 0x6e, 0x11, 0xc5, 0x05, 0xa0, 0x6f, 0x0d, 0x42, 0xeb, 0xc6, 0x9d, 0x14, 0x30, 0x05, 0xf6, 0x07, 0x9a, 0x3a, 0x3e, 0xb8, 0x24, 0x04, 0xe7, 0xe8, 0x5c, 0x4b, 0x8c, 0xcf, 0x66, 0x2e, 0x1b, 0xb2, 0x43, 0x3d, 0x39, 0xb8, 0x54, 0xe9, 0xe2, 0xfa, 0x19, 0x38, 0x50, 0xd9, 0x3f, 0xbe, 0x1f, 0x94, 0xda, 0xc8, 0xae, 0x1a, 0xef, 0xda, 0xc8, 0x1c, 0x35, 0x5c, 0x84, 0x67, 0x1c, 0x90, 0x69, 0x71, 0x0f, 0xc7, 0xd6, 0x31, 0xf6, 0xd5, 0xa1, 0x34, 0x00, 0xc2, 0xff, 0xee, 0x9f, 0xc2, 0xa4, 0x4e, 0xd4, 0x67, 0x2b, 0x95, 0xac, 0x16, 0xb7, 0x67, 0x0b, 0xb8, 0xdb, 0x22, 0xa8, 0xb1, 0xb7, 0x70, 0x59, 0x16, 0x64, 0x18, 0x91, 0x1a, 0x93, 0x1a, 0x26, 0xca, 0x70, 0xfa, 0x58, 0xfb, 0xcd, 0x5c, 0x10, 0x80, 0x7c, 0xd1, 0x65, 0xa0, 0xfc, 0xf1, 0x64, 0xc7, 0x59, 0xaa, 0x11, 0x7b, 0x4d, 0xd7, 0xa9, 0x92, 0xab, 0x14, 0x2a, 0xa2, 0xfd, 0xd1, 0x15, 0xba, 0x6c, 0xa6, 0x73, 0x4f, 0xe1, 0xe6, 0x16, 0x79, 0x6a, 0x77, 0x21, 0x60, 0xdf, 0xe1, 0xcb, 0xf0, 0xc5, 0xa4, 0x5f, 0xd5, 0x72, 0xcf, 0x87, 0xa3, 0x72, 0xce, 0xcb, 0x54, 0x2a, 0x84, 0x55, 0xf8, 0xbb, 0x9a, 0xf7, 0xa8, 0x2a, 0x16, 0x6f, 0xbc, 0xbd, 0x2f, 0xe9, 0x3e, 0xa8, 0x5f, 0xc5, 0x9e, 0xe8, 0xbb, 0x9b, 0xa6, 0x70, 0x80, 0x7c, 0xb1, 0x83, 0xee, 0x7b, 0x18, 0x61, 0x59, 0x6c, 0xee, 0x25, 0x7d, 0xec, 0xed, 0xee, 0x12, 0xa2, 0xaf, 0x3d, 0xa0, 0xc4, 0x22, 0x9e, 0x95, 0xdc, 0x36, 0x8b, 0x95, 0xcc, 0xd8, 0x8d, 0x11, 0x0f, 0x24, 0xa4, 0x1b, 0x43, 0xd6, 0xe9, 0x78, 0xe4, 0x02, 0x72, 0xf7, 0x5b, 0x06, 0x76, 0x02, 0x37, 0xbc, 0xb1, 0x73, 0xba, 0xf4, 0x0a, 0xa9, 0x97, 0x21, 0x74, 0xda, 0xfa, 0x52, 0x12, 0xaa, 0xc9, 0x64, 0x9e, 0xfd, 0x29, 0x76, 0x0b, 0x0a, 0x45, 0x9e, 0x69, 0xb2, 0x4b, 0xda, 0x0a, 0x0f, 0xb6, 0x4a, 0xe3, 0x4f, 0xd3, 0x9c, 0x34, 0xc3, 0x7e, 0xc7, 0x6c, 0x33, 0x2d, 0xfc, 0x47, 0x75, 0x31, 0xd9, 0x39, 0x3d, 0x38, 0xe1, 0x0f, 0x37, 0x15, 0x29, 0xd4, 0x53, 0xc4, 0x53, 0xf1, 0x61, 0xa8, 0xc0, 0x99, 0xdd, 0x18, 0x02, 0x64, 0x0c, 0x1a, 0x90, 0x3a, 0x48, 0x6e, 0xbe, 0x73, 0x97, 0xcf, 0xec, 0x3c, 0x83, 0x75, 0xfd, 0x3d, 0x26, 0xde, 0x0b, 0x79, 0x85, 0xce, 0x58, 0x75, 0x1f, 0x95, 0x88, 0x9c, 0xc5, 0x90, 0x0e, 0xe2, 0xab, 0xf2, 0xe5, 0xa8, 0xc0, 0xc4, 0x80, 0xdf, 0x3b, 0x2b, 0x03, 0x71, 0x76, 0xea, 0xb3, 0xdc, 0x00, 0x27, 0xab, 0x20, 0xee, 0x72, 0xd2, 0xdc, 0x71, 0x03, 0x09, 0xb4, 0xae, 0x43, 0xa9, 0xf5, 0xc9, 0x8f, 0x2c, 0x7c, 0x43, 0x38, 0x2a, 0xd4, 0x87, 0xce, 0x88, 0x9e, 0xbf, 0x9e, 0xec, 0x36, 0xec, 0x79, 0x73, 0x93, 0x36, 0xb7, 0xa7, 0x6f, 0x80, 0x7c, 0xab, 0xa8, 0x40, 0x3a, 0xb9, 0xe7, 0x8e, 0x77, 0xcf, 0x7f, 0x7b, 0xd1, 0xa4, 0x98, 0xa3, 0x3f, 0xe1, 0x8c, 0x06, 0x99, 0x8e, 0x91, 0x13, 0x5b, 0xca, 0x99, 0x06, 0xa6, 0xc0, 0x76, 0x74, 0x87, 0xd6, 0x42, 0x24, 0x7c, 0x27, 0xfe, 0x21, 0x34, 0x34, 0x79, 0x0d, 0x97, 0xd6, 0x73, 0xb8, 0x06, 0x78, 0x03, 0xf2, 0xe4, 0x82, 0x36, 0x9d, 0x55, 0x18, 0xf9, 0x06, 0x45, 0x05, 0x39, 0x75, 0xad, 0xf2, 0x48, 0x02, 0x11, 0xdc, 0x83, 0xab, 0x4e, 0xc5, 0x32, 0xa4, 0x92, 0xa9, 0xaf, 0xee, 0xac, 0xb3, 0xcb, 0x2b, 0x86, 0xb1, 0x6d, 0xb1, 0xef, 0xc6, 0x7c, 0xdd, 0x9e, 0x5e, 0xff, 0xa9, 0x74, 0x67, 0x83, 0x81, 0x02, 0xbf, 0xbd, 0x53, 0x4b, 0xe8, 0x71, 0xe6, 0xcb, 0x03, 0x93, 0x6c, 0xb8, 0xfc, 0xab, 0x5a, 0x87, 0x02, 0x7e, 0x77, 0xb2, 0x3a, 0xea, 0x33, 0xb9, 0xb4, 0x12, 0x3b, 0x67, 0x9e, 0xbb, 0x4a, 0x56, 0xb7, 0xf6, 0x42, 0xb5, 0x07, 0x00, 0x7b, 0x49, 0xce, 0x66, 0x5b, 0xb2, 0xba, 0x6c, 0x27, 0xf0, 0x5c, 0xb0, 0x18, 0x25, 0xdd, 0x0b, 0xb2, 0x9c, 0xed, 0xb8, 0x51, 0x0b, 0xfd, 0xb8, 0x05, 0x15, 0xae, 0x74, 0x9f, 0x13, 0x89, 0xa5, 0x0c, 0x14, 0xf0, 0x71, 0xe2, 0x22, 0x54, 0xd6, 0x39, 0xc8, 0xa9, 0x4c, 0xbc, 0xd1, 0x17, 0xa6, 0x00, 0x51, 0xf3, 0x3a, 0x14, 0xea, 0xed, 0x41, 0x59, 0x48, 0x8b, 0x81, 0x93, 0xee, 0xd6, 0x29, 0x41, 0x35, 0x53, 0xfc, 0x2a, 0x91, 0x34, 0xb1, 0x39, 0x17, 0xd0, 0x9a, 0x8a, 0x3c, 0x51, 0x85, 0xc5, 0xe0, 0xac, 0xe0, 0xab, 0x8b, 0xd7, 0x20, 0xee, 0xf6, 0x36, 0x63, 0x46, 0xcd, 0x56, 0x53, 0xc1, 0xb3, 0xdd, 0x4e, 0x5b, 0x87, 0xc1, 0xc5, 0xce, 0xe5, 0xb9, 0xe2, 0xab, 0xf0, 0xf1, 0x6e, 0xaa, 0x4f, 0x02, 0xf1, 0x3e, 0x76, 0x21, 0x1b, 0x6d, 0x27, 0x96, 0x62, 0xdf, 0x38, 0x71, 0xed, 0x35, 0x96, 0x78, 0xb1, 0x9c, 0x8a, 0x63, 0xda, 0xa1, 0x3b, 0x4c, 0x6c, 0x47, 0x75, 0x61, 0x2a, 0x56, 0xa8, 0xdc, 0xb7, 0xf7, 0x34, 0x35, 0xfb, 0x7e, 0xe3, 0x95, 0xc8, 0x87, 0xb7, 0x8f, 0xbd, 0x44, 0xe7, 0x0b, 0x6b, 0x15, 0x24, 0x82, 0xb7, 0x59, 0x20, 0x71, 0x7f, 0x85, 0x51, 0x07, 0x81, 0x73, 0xf3, 0x21, 0x78, 0xfc, 0x4c, 0x79, 0x87, 0xc8, 0x33, 0x1a, 0xdb, 0x65, 0xd3, 0x18, 0x8d, 0x97, 0xad, 0x7d, 0xc5, 0xef, 0xdc, 0x86, 0x25, 0x9f, 0x9d, 0x10, 0x65, 0x8d, 0x0e, 0x4d, 0x3a, 0xa6, 0x36, 0xbb, 0x7d, 0x75, 0x46, 0x57, 0x89, 0xf4, 0x1e, 0x0e, 0xe5, 0xa2, 0x13, 0x74, 0x23, 0xd5, 0xf0, 0xb8, 0x07, 0x52, 0x3a, 0xd8, 0xec, 0x1b, 0xb9, 0x11, 0x64, 0x88, 0x33, 0x9a, 0x1f, 0x99, 0x7b, 0x91, 0x0e, 0x8b, 0xab, 0x36, 0xc7, 0xa9, 0xad, 0x57, 0x2c, 0x65, 0x00, 0x0b, 0x47, 0xa7, 0xb8, 0xa3, 0x79, 0x65, 0xc7, 0xde, 0xd4, 0x74, 0x7c, 0x5c, 0xc5, 0x9e, 0x49, 0x55, 0xf6, 0xf4, 0xc9, 0x8b, 0x72, 0x65, 0x01, 0x7d, 0x0b, 0x90, 0xe7, 0xde, 0xf9, 0xd7, 0x20, 0x45, 0xc3, 0xb5, 0x0e, 0x26, 0x63, 0x51, 0x0a, 0x01, 0xa5, 0x53, 0xee, 0xd9, 0xd0, 0xf6, 0xd7, 0xe8, 0x88, 0x5e, 0x29, 0x91, 0xf3, 0x2d, 0xd3, 0x96, 0x1b, 0x51, 0xd4, 0x8b, 0x93, 0x1f, 0xfe, 0x8b, 0x5e, 0xa6, 0xf9, 0x29, 0x0c, 0x3d, 0x8c, 0xa9, 0x26, 0x5f, 0x18, 0x71, 0xcc, 0xb9, 0x65, 0xba, 0x9d, 0x80, 0xa1, 0x8b, 0xd7, 0x08, 0xa6, 0xe8, 0xbf, 0x93, 0x7c, 0x47, 0x44, 0x67, 0x1f, 0x43, 0xdf, 0x23, 0x82, 0x94, 0xbd, 0x52, 0xd3, 0x3f, 0x20, 0x41, 0x01, 0x0a, 0x03, 0x0e, 0x7c, 0x33, 0xfd, 0x02, 0x3c, 0x61, 0x67, 0x20, 0x04, 0xdb, 0xc1, 0xfe, 0xe8, 0xf8, 0x52, 0xd4, 0x0d, 0xd7, 0x0f, 0xd3, 0xb0, 0x4f, 0xbe, 0xb8, 0x69, 0x29, 0x5b, 0xa0, 0xb1, 0x8d, 0xbb, 0x1e, 0xa3, 0xbb, 0x6f, 0x8b, 0xff, 0xfc, 0xeb, 0x9d, 0x74, 0xd7, 0xe8, 0x3b, 0x1f, 0x87, 0x06, 0x90, 0x4f, 0xad, 0xb6, 0x5f, 0x8b, 0x43, 0x57, 0x96, 0xd6, 0xd1, 0x9f, 0x25, 0x31, 0xe3, 0x3d, 0x10, 0x62, 0xba, 0xbc, 0xc3, 0xf4, 0x42, 0xab, 0xa7, 0x7f, 0x44, 0xfb, 0xf2, 0x29, 0xdd, 0xa8, 0xc3, 0x6d, 0x2f, 0x9c, 0x6e, 0x1b, 0x56, 0xd0, 0x14, 0xa0, 0x9d, 0xb4, 0x78, 0x88, 0xf2, 0xd1, 0x0d, 0x41, 0x98, 0xac, 0x54, 0x22, 0x1c, 0xee, 0x64, 0xab, 0x8a, 0xc3, 0xca, 0x0f, 0xe0, 0x80, 0x94, 0xef, 0xc3, 0x88, 0xa9, 0x69, 0x71, 0x70, 0x5c, 0x51, 0xf7, 0x61, 0x40, 0xbe, 0xa4, 0xbe, 0x3d, 0xc9, 0xbd, 0x07, 0xe3, 0x91, 0x72, 0xfe, 0xff, 0x83, 0x11, 0x08, 0x6c, 0xd8, 0x7a, 0xd5, 0x2c, 0x5e, 0xd3, 0x43, 0xb7, 0x7c, 0x7d, 0x80, 0x93, 0x70, 0x46, 0x6f, 0x25, 0xdc, 0xe0, 0x4e, 0xc7, 0x81, 0x92, 0x95, 0x1b, 0x4a, 0x2d, 0x21, 0x9e, 0x8c, 0x42, 0x91, 0x80, 0x8c, 0x92, 0xf1, 0xb3, 0x42, 0xc6, 0x96, 0x42, 0x5c, 0x60, 0x48, 0xe4, 0x86, 0xf2, 0xa7, 0xd1, 0xe9, 0x8d, 0xc7, 0xd4, 0xf1, 0x7d, 0x1e, 0xa1, 0x54, 0x33, 0xa0, 0x6a, 0x50, 0x83, 0x28, 0xad, 0x34, 0x10, 0x1a, 0x50, 0x21, 0x04, 0x46, 0xef, 0x12, 0x04, 0x10, 0x75, 0x1a, 0x63, 0xce, 0xe9, 0xed, 0x95, 0x72, 0x8b, 0xa2, 0xe7, 0x69, 0x20, 0xb7, 0x6e, 0xc3, 0x8a, 0x56, 0x3d, 0x93, 0x9b, 0xd6, 0xdb, 0x99, 0x2b, 0x85, 0xf5, 0x1e, 0x68, 0xa5, 0x4f, 0x20, 0x6e, 0xb4, 0x00, 0xaf, 0x18, 0xf1, 0xdf, 0x97, 0x15, 0x1b, 0x39, 0x3f, 0x3e, 0x7c, 0xc5, 0xd1, 0x26, 0x26, 0xd9, 0x9b, 0xf3, 0x7d, 0xdd, 0xb6, 0x6d, 0xf5, 0x01, 0xe5, 0x55, 0x1d, 0x2b, 0xbf, 0xf8, 0xdd, 0x33, 0x11, 0x04, 0xfb, 0x53, 0x7e, 0x99, 0xe4, 0xd9, 0x68, 0xa3, 0xaa, 0x1f, 0x14, 0x68, 0x49, 0xbd, 0x08, 0x5d, 0x2e, 0xfd, 0xb8, 0x3e, 0xfa, 0x90, 0x62, 0x5d, 0x83, 0x7f, 0x37, 0x3b, 0x1b, 0x64, 0xbb, 0x55, 0x16, 0xd9, 0x6e, 0x40, 0x86, 0x31, 0xac, 0xf8, 0x49, 0x66, 0xd2, 0x76, 0x46, 0x53, 0xa2, 0x80, 0xf3, 0x23, 0xe9, 0xc5, 0x1b, 0x0a, 0x5e, 0x29, 0xde, 0x33, 0xce, 0x5e, 0xf9, 0xf9, 0x76, 0xb4, 0x47, 0x59, 0xb1, 0x32, 0x88, 0xa7, 0xd3, 0xe5, 0x62, 0x81, 0x54, 0x78, 0xa5, 0x02, 0x31, 0x05, 0xd3, 0x37, 0x8f, 0x2b, 0xe0, 0xd7, 0xa1, 0x61, 0x36, 0x2e, 0xcd, 0x89, 0xfc, 0x5b, 0x0a, 0xc9, 0x98, 0xbb, 0x8d, 0x96, 0x72, 0xa5, 0xa4, 0x11, 0xfb, 0x58, 0xe2, 0x97, 0xef, 0x31, 0x7c, 0x93, 0xd7, 0x22, 0xf3, 0x97, 0xd1, 0x5f, 0xf3, 0xac, 0x93, 0x5a, 0x7c, 0xe6, 0xae, 0xf2, 0x3f, 0x3b, 0x10, 0xe7, 0x4b, 0x94, 0xcd, 0x92, 0xe8, 0x25, 0x1f, 0xd3, 0xc3, 0xfa, 0xab, 0x4a, 0x4c, 0xd3, 0x05, 0xca, 0x5d, 0x32, 0x77, 0x0a, 0x1c, 0xb2, 0xfe, 0x9e, 0x22, 0x9a, 0x96, 0x26, 0xdd, 0xb2, 0xb7, 0xc6, 0x32, 0x56, 0x20, 0xd6, 0x67, 0xc8, 0xd3, 0xda, 0x41, 0xcb, 0x61, 0xb4, 0x69, 0x6d, 0x67, 0x18, 0x14, 0x24, 0x59, 0x41, 0xe3, 0x1c, 0x7e, 0xe2, 0x08, 0xd0, 0x3c, 0x60, 0xab, 0xd8, 0x96, 0x3e, 0x8c, 0x01, 0xf3, 0xd9, 0xe9, 0xa3, 0x21, 0x55, 0xa2, 0x2f, 0x99, 0xd7, 0x9b, 0x08, 0x05 ],
+const [ 0xf9, 0xee, 0x55, 0xf8, 0x7a, 0xe8, 0x34, 0x3e, 0x45, 0xf0, 0x1f, 0xb2, 0x85, 0x95, 0x3c, 0x75, 0x2c, 0x15, 0xa1, 0xd8, 0x92, 0x73, 0x14, 0x14, 0x5e, 0xcb, 0x14, 0x3c, 0xaa, 0xe3, 0x1e, 0x6f, 0x62, 0x02, 0x29, 0x52, 0xed, 0x05, 0x73, 0xbd, 0x10, 0xaf, 0x7f, 0xb5, 0x0f, 0x41, 0x5e, 0x9b, 0x15, 0x4a, 0x2f, 0xa2, 0xd5, 0xc1, 0xe2, 0x87, 0x72, 0x51, 0x41, 0x7c, 0x9c, 0xf4, 0x30, 0x65, 0xfd, 0xc3, 0x33, 0x46, 0xd3, 0x0d, 0x32, 0xfc, 0xde, 0xa6, 0x79, 0x2c, 0x7c, 0x81, 0x03, 0x7a, 0x13, 0x81, 0xf8, 0xfb, 0xaf, 0x8d, 0x74, 0xec, 0xec, 0xe3, 0x8a, 0xa4, 0x17, 0xae, 0x89, 0xc7, 0x90, 0xda, 0x7d, 0xbd, 0x72, 0x27, 0xf9, 0x62, 0x76, 0x7c, 0x14, 0xff, 0x15, 0x7f, 0xb2, 0x7a, 0xed, 0x62, 0x05, 0xc9, 0x66, 0xff, 0x53, 0xac, 0x95, 0x28, 0xf9, 0x9c, 0x61, 0x38, 0xb0, 0xfe, 0xe4, 0xee, 0x0f, 0x9d, 0x14, 0x7c, 0x51, 0x57, 0xa2, 0xda, 0x59, 0x17, 0x22, 0x60, 0xf3, 0x03, 0x6d, 0x94, 0x5d, 0xf6, 0x43, 0x41, 0x06, 0x30, 0x35, 0xc9, 0x95, 0x4c, 0xc2, 0xbb, 0x2d, 0x73, 0xc1, 0xa8, 0xef, 0xd0, 0xff, 0x33, 0xc1, 0x43, 0x28, 0x68, 0x4e, 0x5a, 0xeb, 0x4f, 0x4e, 0x7d, 0x59, 0xc0, 0x08, 0x68, 0x8e, 0x78, 0x15, 0xdf, 0x94, 0x6d, 0x66, 0x9c, 0x84, 0x5f, 0x89, 0x8d, 0xee, 0xb0, 0x27, 0x3c, 0x7b, 0x75, 0xd2, 0x8f, 0xd1, 0xcd, 0xfd, 0xb1, 0xb7, 0x72, 0x4c, 0x50, 0x7a, 0x8d, 0x0f, 0x09, 0x8f, 0xcf, 0x09, 0x20, 0x79, 0xbd, 0x75, 0x75, 0xee, 0x4b, 0x4b, 0xb3, 0x35, 0xad, 0xbf, 0xcb, 0xd2, 0x6a, 0x0a, 0xa1, 0x65, 0xb2, 0x6e, 0x04, 0xd0, 0xf1, 0x74, 0xe4, 0x98, 0xa4, 0x79, 0xbf, 0x8e, 0x6c, 0x68, 0x5d, 0xae, 0x60, 0xc9, 0xbd, 0x47, 0xa8, 0xfb, 0x4f, 0x5c, 0x48, 0xbd, 0x64, 0x4a, 0x39, 0xf4, 0xe2, 0xac, 0xbe, 0xa8, 0x3c, 0x7c, 0xf5, 0x4f, 0xa1, 0x7b, 0xac, 0x4e, 0x74, 0xd2, 0x77, 0xbd, 0xfd, 0xf9, 0xff, 0x6a, 0x5e, 0xd8, 0x9d, 0x21, 0xc8, 0x2c, 0x28, 0x2b, 0xee, 0x2d, 0x0b, 0x15, 0xba, 0x6e, 0x9a, 0xb3, 0x3f, 0x04, 0xa6, 0x63, 0xf0, 0xea, 0x4e, 0x96, 0x0f, 0xa4, 0x19, 0x8d, 0x68, 0x23, 0x42, 0x61, 0x3e, 0xe9, 0x53, 0x46, 0x86, 0x6d, 0xf5, 0x10, 0x53, 0xc1, 0x07, 0xf7, 0x92, 0x72, 0xed, 0x97, 0xf7, 0xb0, 0x2b, 0x3b, 0x37, 0xae, 0x32, 0x5a, 0x78, 0x4c, 0x79, 0x62, 0x05, 0xf4, 0xd0, 0xb5, 0x47, 0xc1, 0xf2, 0xf1, 0xf1, 0xe7, 0x59, 0x75, 0x7a, 0x4f, 0x56, 0x21, 0xd0, 0x81, 0x60, 0x5c, 0x4b, 0xc7, 0xad, 0x5c, 0xdf, 0x8f, 0xff, 0xa2, 0x97, 0x12, 0xc1, 0xc3, 0x3e, 0x33, 0x52, 0x6e, 0x5f, 0xaa, 0xa1, 0xab, 0x71, 0x61, 0xfa, 0x61, 0x4b, 0x1e, 0x1f, 0x1b, 0xde, 0x63, 0x9b, 0x0b, 0x22, 0x93, 0x53, 0x50, 0x51, 0x55, 0x5e, 0x74, 0x54, 0x3d, 0x16, 0x39, 0x7a, 0xaa, 0x6f, 0x95, 0x70, 0xea, 0x88, 0xfb, 0x6e, 0xa5, 0x80, 0xdc, 0xae, 0x78, 0x8b, 0x6e, 0x22, 0xe0, 0x45, 0xac, 0x66, 0x5a, 0x46, 0x9e, 0xf4, 0xc8, 0xf6, 0xda, 0x97, 0x17, 0xa2, 0x4b, 0x22, 0x1f, 0xd0, 0x31, 0x61, 0xca, 0xd0, 0x69, 0x50, 0x79, 0x94, 0xef, 0x8b, 0xa3, 0xc2, 0xa1, 0x06, 0xbf, 0x06, 0x45, 0xfe, 0x65, 0xad, 0xce, 0x2f, 0xb0, 0x70, 0xdb, 0x48, 0xe6, 0x8d, 0x81, 0x9c, 0x5b, 0x1d, 0x4a, 0x1a, 0x92, 0xa1, 0x7d, 0x7f, 0xa6, 0xde, 0xa0, 0xca, 0xe8, 0xeb, 0x3c, 0xf0, 0xca, 0x88, 0xe0, 0xd2, 0xfc, 0xb1, 0x68, 0x6c, 0xd4, 0x73, 0x7f, 0x4f, 0xf3, 0xff, 0x63, 0x51, 0x26, 0xfd, 0xe9, 0x83, 0x8a, 0x22, 0xc0, 0x63, 0xf4, 0x05, 0xf9, 0x53, 0x8f, 0x2e, 0xc7, 0x4a, 0xc7, 0x70, 0x84, 0xca, 0x66, 0x7a, 0xf5, 0x12, 0xfd, 0xa8, 0xcf, 0x94, 0x86, 0x1f, 0x7a, 0xa9, 0x47, 0x18, 0x14, 0x84, 0xfa, 0x7c, 0xb9, 0x64, 0x2a, 0xb2, 0x02, 0x0e, 0xe0, 0xb4, 0xcb, 0x7b, 0x7f, 0x69, 0x3a, 0xce, 0xed, 0x2f, 0xfd, 0x89, 0xf3, 0xb6, 0xd2, 0xff, 0xe7, 0x15, 0x4d, 0x0d, 0x88, 0x17, 0xd6, 0x05, 0x29, 0xd6, 0xf1, 0xeb, 0x12, 0x8c, 0xc2, 0xe4, 0x23, 0xa5, 0xd0, 0xeb, 0xba, 0x19, 0x09, 0xc6, 0xd7, 0xf8, 0x06, 0x38, 0x7e, 0x47, 0x91, 0x79, 0x5d, 0x0a, 0x64, 0xe3, 0xaf, 0xa2, 0x34, 0xee, 0x60, 0x59, 0xee, 0x5e, 0x72, 0x3c, 0x41, 0xbb, 0x9f, 0x29, 0x5c, 0x02, 0x40, 0x28, 0xf9, 0x9a, 0x6d, 0xfe, 0x9a, 0x89, 0x66, 0x00, 0x12, 0xe8, 0x31, 0x26, 0x48, 0x94, 0x85, 0x60, 0x38, 0x27, 0xe7, 0x2d, 0x3a, 0x27, 0x13, 0x69, 0x87, 0x7d, 0x9d, 0x66, 0xf9, 0x28, 0xd8, 0x3f, 0x12, 0x32, 0xf7, 0x69, 0x40, 0xe3, 0x72, 0x8b, 0x5f, 0x36, 0xac, 0x90, 0x80, 0x89, 0xd2, 0xfa, 0xe9, 0x98, 0x06, 0x79, 0x5d, 0xac, 0xbd, 0xbc, 0x9d, 0x10, 0x65, 0x87, 0x2e, 0xc5, 0x4c, 0x06, 0x5d, 0x76, 0xbd, 0x61, 0x81, 0xae, 0x6c, 0x90, 0x80, 0x49, 0x13, 0x71, 0x94, 0x29, 0x5e, 0x17, 0x4f, 0x2a, 0x05, 0x65, 0xdd, 0x57, 0x37, 0xdc, 0x8a, 0x5e, 0x3f, 0xb2, 0x83, 0x41, 0x62, 0x24, 0xe1, 0x4f, 0x06, 0x0d, 0xe3, 0x53, 0x1a, 0xb6, 0x7b, 0x0b, 0xb1, 0xf0, 0x0d, 0xdb, 0xf0, 0x60, 0x73, 0xc3, 0x2b, 0x1b, 0x44, 0x8f, 0x4b, 0x73, 0x56, 0x4d, 0x73, 0x10, 0x81, 0x04, 0xe3, 0x42, 0xa6, 0xa3, 0x1c, 0x95, 0xf0, 0x38, 0x44, 0xa6, 0x5a, 0x62, 0xcd, 0x36, 0x72, 0x09, 0x52, 0x7d, 0x5c, 0x4c, 0xc1, 0xc0, 0x19, 0xbb, 0xbf, 0x26, 0x0a, 0xc7, 0x48, 0xc8, 0xaf, 0x76, 0x96, 0x07, 0xb5, 0x5c, 0x45, 0x22, 0x30, 0xc6, 0xb4, 0x08, 0x25, 0x38, 0xae, 0x6a, 0x4b, 0x1a, 0x4a, 0x15, 0x12, 0xae, 0x0f, 0x7f, 0xe5, 0x45, 0x5c, 0x9f, 0xac, 0xb3, 0x07, 0x02, 0x96, 0x00, 0x45, 0x1c, 0x15, 0x60, 0xca, 0xdc, 0x2a, 0x65, 0x31, 0x83, 0xe2, 0x74, 0x9d, 0xb5, 0x21, 0x76, 0xa1, 0xd0, 0x9e, 0xcf, 0x5d, 0x7e, 0x2f, 0x94, 0xea, 0x86, 0x47, 0xf8, 0xf9, 0xe8, 0xbc, 0x08, 0xb6, 0x28, 0xce, 0x99, 0xf3, 0xea, 0x66, 0x7e, 0x82, 0xbf, 0x9b, 0xfe, 0xe2, 0x3f, 0x7a, 0x85, 0x1f, 0x58, 0x07, 0x99, 0xf3, 0xe5, 0x7f, 0x10, 0x31, 0x82, 0xe0, 0x80, 0x63, 0x9f, 0xab, 0xf8, 0xb2, 0xd4, 0xe9, 0xed, 0x07, 0x74, 0x6c, 0x77, 0x70, 0x65, 0x57, 0xbe, 0xc5, 0x2f, 0xe1, 0xae, 0x8b, 0x52, 0x55, 0xf3, 0x18, 0xdd, 0x5d, 0x21, 0xf8, 0x3c, 0x81, 0x32, 0x90, 0x52, 0xeb, 0x36, 0x01, 0xc8, 0x6d, 0x46, 0x50, 0xa4, 0xc5, 0xba, 0xc3, 0x1d, 0x1f, 0x9c, 0x8e, 0xad, 0xdb, 0x5c, 0xae, 0x69, 0x91, 0xc4, 0x16, 0x8e, 0x52, 0x2f, 0x09, 0x5c, 0x31, 0xf6, 0xc7, 0x27, 0x02, 0x2c, 0x6b, 0xab, 0x62, 0x8b, 0x14, 0xa0, 0xf8, 0xad, 0x43, 0x8e, 0xfa, 0x80, 0x84, 0xe3, 0xf2, 0xf4, 0x51, 0x43, 0xc2, 0xf6, 0x33, 0x1f, 0xe5, 0xa2, 0x2a, 0x89, 0xf9, 0xb4, 0x4f, 0x46, 0x7a, 0x40, 0xb8, 0x25, 0xd1, 0xa4, 0x9c, 0x90, 0x8d, 0xba, 0xb7, 0x61, 0xf0, 0x52, 0xf0, 0xf7, 0xad, 0xdf, 0x3a, 0x88, 0xf0, 0x70, 0xb8, 0xb8, 0x9f, 0xe2, 0x24, 0x6b, 0xdf, 0x54, 0x71, 0xd8, 0xdb, 0xdc, 0xaf, 0xe0, 0xc1, 0x78, 0x30, 0x9d, 0x0c, 0x48, 0xe9, 0x3d, 0x09, 0xfa, 0x1a, 0x11, 0x94, 0x85, 0x32, 0xe1, 0x23, 0x1a, 0xed, 0x83, 0x07, 0x57, 0xbf, 0xab, 0xee, 0xbf, 0x75, 0x05, 0xab, 0x67, 0x1a, 0x81, 0x3a, 0xf1, 0x17, 0xef, 0xfe, 0xbe, 0x9f, 0xcb, 0x4e, 0x60, 0x4a, 0x5a, 0x30, 0x4e, 0x00, 0xf6, 0x64, 0xdc, 0x19, 0xa5, 0xa5, 0x6a, 0xc2, 0xf1, 0x2b, 0xdb, 0xa3, 0xf4, 0x74, 0x49, 0xbf, 0xb3, 0x44, 0xf6, 0x9b, 0xad, 0xeb, 0x86, 0xa2, 0xb3, 0xc6, 0x6c, 0xc8, 0xf9, 0x08, 0xa3, 0x6e, 0x6e, 0xba, 0x9e, 0x85, 0x49, 0x01, 0x81, 0xf7, 0xe4, 0xa0, 0x91, 0x42, 0xce, 0xbd, 0xe9, 0x66, 0x1c, 0xe8, 0x70, 0x02, 0xff, 0x59, 0x07, 0xba, 0x9c, 0x79, 0x07, 0xdb, 0x17, 0xa5, 0xea, 0x42, 0xf1, 0x2e, 0x48, 0x7a, 0x95, 0xa4, 0x06, 0x24, 0x2d, 0x54, 0xca, 0x9c, 0xba, 0x0f, 0xb1, 0xd9, 0x64, 0x2d, 0x45, 0x95, 0x0e, 0xd2, 0xa9, 0xae, 0x2e, 0x70, 0x17, 0xcd, 0xdc, 0x8d, 0x8d, 0x45, 0x29, 0xc7, 0xc2, 0x3e, 0xb1, 0x15, 0x5f, 0x12, 0x74, 0x4f, 0x6c, 0xf7, 0xe1, 0xf1, 0x08, 0xdf, 0x34, 0x1c, 0x5e, 0x9c, 0x02, 0xdd, 0xd4, 0x48, 0x12, 0xb2, 0x85, 0xe4, 0x6f, 0x4a, 0xf2, 0x3f, 0xbb, 0x8d, 0xf4, 0x19, 0xc6, 0xdc, 0xf6, 0x89, 0x60, 0x9a, 0x60, 0x9c, 0x6b, 0xeb, 0x56, 0x3f, 0x34, 0xbb, 0xa3, 0x5f, 0x03, 0x03, 0xf0, 0x4e, 0xf0, 0x47, 0x3a, 0x69, 0xf9, 0x64, 0x83, 0xf8, 0x52, 0x88, 0xc7, 0x55, 0xfc, 0x82, 0x31, 0x51, 0x99, 0x3c, 0x8f, 0xd3, 0x7f, 0x85, 0x04, 0xc2, 0x0b, 0x14, 0xfc, 0x25, 0x37, 0xca, 0x65, 0x89, 0x6f, 0x38, 0x1d, 0xa3, 0xa1, 0x61, 0xa6, 0x37, 0x94, 0xc1, 0x21, 0x39, 0x7a, 0x8e, 0x7a, 0x31, 0xc8, 0x3d, 0xe0, 0xe4, 0x45, 0x48, 0x78, 0x30, 0x61, 0x2f, 0x52, 0x38, 0xc9, 0xbd, 0x9c, 0xc1, 0x38, 0x8c, 0x15, 0xdc, 0x90, 0xcb, 0xc5, 0xc6, 0x29, 0x3f, 0xec, 0x0c, 0x69, 0x88, 0x38, 0xf2, 0x95, 0xa6, 0x3a, 0x16, 0xe6, 0xbb, 0x1b, 0x51, 0xe0, 0x12, 0x8b, 0xde, 0xdf, 0x61, 0xfb, 0xbe, 0xf3, 0x4b, 0x0c, 0x5a, 0xed, 0x29, 0x47, 0x6b, 0xba, 0x0a, 0x0e, 0x17, 0xf0, 0xf8, 0xd2, 0x5c, 0xa7, 0x7e, 0x87, 0xb2, 0x8a, 0x67, 0x55, 0xec, 0x2e, 0xc7, 0x91, 0x60, 0xa2, 0x40, 0xeb, 0x47, 0x47, 0x7e, 0xe9, 0x67, 0xe1, 0x04, 0x94, 0xef, 0xef, 0x2b, 0x71, 0xa2, 0x38, 0x67, 0xb2, 0x37, 0xa7, 0xcd, 0xae, 0x00, 0x58, 0xd2, 0x8f, 0xcb, 0xf3, 0x56, 0x4a, 0x06, 0x39, 0xe1, 0xd5, 0x26, 0xdc, 0x2c, 0x94, 0x49, 0x94, 0xe3, 0x14, 0x19, 0x6f, 0xa9, 0xfb, 0xf4, 0x69, 0x5d, 0x3f, 0x4b, 0x3c, 0x9b, 0x97, 0x48, 0x79, 0x86, 0x2f, 0xb4, 0xd8, 0xc5, 0xa0, 0x17, 0xcc, 0xcc, 0x1f, 0x21, 0x5b, 0x5d, 0xf4, 0x48, 0x2d, 0x4e, 0x2f, 0xb3, 0xe3, 0x8c, 0x96, 0x57, 0xaa, 0x60, 0xe1, 0x60, 0x0f, 0xf1, 0x2a, 0xd2, 0x15, 0x0b, 0x9f, 0x70, 0x84, 0x1e, 0x7a, 0xdd, 0x85, 0x8a, 0x33, 0x01, 0x6c, 0x19, 0xf3, 0xae, 0xd5, 0xcd, 0x4d, 0x83, 0xf2, 0xdd, 0x29, 0x11, 0x23, 0xfa, 0x00, 0x3d, 0xc7, 0xd6, 0x4f, 0xe5, 0x53, 0xe7, 0x45, 0xc7, 0xa1, 0x69, 0xbf, 0x9e, 0x8a, 0xa2, 0x77, 0x8d, 0xb6, 0x69, 0x78, 0xc1, 0xb3, 0xe9, 0xd6, 0x53, 0x45, 0xa3, 0x9b, 0x6b, 0xfd, 0xb2, 0x04, 0xab, 0x0d, 0x53, 0xee, 0xcb, 0x5b, 0xa4, 0x8b, 0x80, 0xd4, 0xac, 0x59, 0xa3, 0x03, 0x9c, 0x55, 0x8f, 0xe2, 0x54, 0x6c, 0xcb, 0xf0, 0x29, 0x32, 0xe9, 0x83, 0xe6, 0xd6, 0xad, 0x60, 0x10, 0x56, 0x72, 0x89, 0x6f, 0xef, 0xca, 0x56, 0xc9, 0xd8, 0x65, 0xc7, 0xf1, 0x2f, 0x34, 0x19, 0x01, 0x34, 0xcd, 0x97, 0xe3, 0xb5, 0x12, 0xb3, 0x16, 0xc9, 0x0d, 0x55, 0xae, 0xc1, 0x1f, 0x73, 0x9d, 0x5c, 0x5a, 0xe2, 0x32, 0x3a, 0x2b, 0x6c, 0xdf, 0x93, 0x3c, 0x22, 0x3f, 0x29, 0x98, 0xf3, 0x57, 0x7b, 0x11, 0x7e, 0x1d, 0x3c, 0xdf, 0x25, 0x36, 0x03, 0x89, 0x63, 0x04, 0x44, 0x09, 0x5f, 0xe0, 0x7f, 0x2b, 0xc1, 0xa4, 0xb7, 0x36, 0xc4, 0x6d, 0x26, 0xce, 0x8c, 0x9f, 0x2f, 0x19, 0xbb, 0x29, 0x94, 0x21, 0x3f, 0x0a, 0xe9, 0x79, 0x6d, 0x14, 0x49, 0x24, 0x54, 0xef, 0x47, 0xb2, 0x4b, 0x62, 0x27, 0xac, 0xcd, 0xce, 0x4f, 0x32, 0x87, 0xfb, 0xf8, 0xe3, 0xae, 0x17, 0x29, 0xfd, 0x96, 0xfc, 0xe6, 0xc5, 0x81, 0xb2, 0xa5, 0x2a, 0xb5, 0x35, 0x01, 0xa5, 0xd1, 0x78, 0xb2, 0x63, 0x60, 0xa9, 0xbd, 0xa6, 0xaf, 0xb7, 0xe8, 0x69, 0xdc, 0x12, 0x71, 0x43, 0x30, 0xb2, 0xff, 0x8d, 0xae, 0x5a, 0xd9, 0xc7, 0xec, 0x1e, 0x56, 0x38, 0x22, 0x23, 0x95, 0xd5, 0x81, 0xa6, 0x6d, 0x64, 0xc6, 0x3f, 0xa7, 0xe1, 0x0e, 0x67, 0x6b, 0x21, 0xec, 0x39, 0xf9, 0xb5, 0xb9, 0x75, 0x9a, 0x11, 0x2b, 0xca, 0xd5, 0xee, 0x29, 0x55, 0xe5, 0xec, 0xde, 0x65, 0x6b, 0x7c, 0x0d, 0x81, 0x61, 0xfd, 0xa4, 0xac, 0x4f, 0x25, 0x93, 0xe7, 0xc1, 0xa3, 0xde, 0xf8, 0xf8, 0x02, 0xf1, 0x6a, 0xe0, 0xd1, 0x35, 0xd5, 0x42, 0x01, 0xe0, 0x5f, 0x3b, 0x8e, 0x11, 0x83, 0xed, 0x62, 0x1c, 0x11, 0x74, 0x76, 0x22, 0x76, 0x1b, 0x3a, 0xe6, 0x3e, 0xd0, 0x37, 0xdb, 0xd7, 0xd6, 0xf2, 0x82, 0x98, 0xba, 0x14, 0xf2, 0x01, 0x88, 0xc9, 0xb8, 0x45, 0x3e, 0x66, 0xe2, 0x05, 0x81, 0x4e, 0x57, 0x5f, 0x8f, 0x16, 0x6a, 0x27, 0x75, 0xe7, 0xae, 0x74, 0x82, 0x24, 0x0b, 0x5f, 0xfb, 0x4d, 0x11, 0x07, 0x10, 0x24, 0x8d, 0xd9, 0x0f, 0x0e, 0x5a, 0x0e, 0xd8, 0xbb, 0x7a, 0x74, 0x91, 0x09, 0x65, 0x72, 0x9b, 0x26, 0xa1, 0x46, 0xc4, 0xf5, 0x93, 0x92, 0xbe, 0xb4, 0x95, 0x17, 0xd0, 0xdb, 0x49, 0xc0, 0xcb, 0x47, 0x2c, 0xe2, 0x40, 0x97, 0x6e, 0xc2, 0xf0, 0xd7, 0x01, 0x58, 0x84, 0x5c, 0xf0, 0x52, 0x7e, 0xee, 0xf2, 0x5c, 0x70, 0x2d, 0x3f, 0x9f, 0x6b, 0x2d, 0xa2, 0x87, 0xbb, 0x64, 0xcf, 0xca, 0xd1, 0xc6, 0xf8, 0xa6, 0x81, 0x2e, 0x9b, 0x6a, 0x6e, 0x00, 0x9e, 0x37, 0xc2, 0x0c, 0x9d, 0x08, 0x22, 0xb6, 0x83, 0xf0, 0xe1, 0x54, 0x57, 0xa3, 0x73, 0xd8, 0x59, 0x38, 0x25, 0xaf, 0x4e, 0x2d, 0x0c, 0xe9, 0x18, 0xac, 0x3b, 0x99, 0x89, 0x0c, 0x39, 0x7f, 0x79, 0x9b, 0xb3, 0xe4, 0x16, 0x9b, 0x6d, 0xc6, 0x7c, 0x8a, 0x7e, 0x35, 0x86, 0xa7, 0xbd, 0xfd, 0xe3, 0xb1, 0x77, 0x85, 0x6c, 0xf2, 0x63, 0xf7, 0xb4, 0x7c, 0xd7, 0xa1, 0xe1, 0xb3, 0x3b, 0x9c, 0xbb, 0x0b, 0xbf, 0xab, 0x03, 0x13, 0x49, 0x65, 0x06, 0xb3, 0xb1, 0x97, 0x72, 0xb1, 0x31, 0xe4, 0x67, 0x7a, 0x17, 0xae, 0xd1, 0x20, 0xbd, 0x3a, 0xf6, 0x9f, 0xbb, 0x0e, 0x4b, 0x64, 0x5b, 0x9e, 0x8c, 0x10, 0x4e, 0x28, 0x0b, 0x79, 0x9d, 0xdd, 0x49, 0xf1, 0xe2, 0x41, 0xc3, 0xcc, 0xb7, 0xd4, 0x0e, 0x1c, 0x6f, 0xf2, 0x26, 0xbf, 0x04, 0xf8, 0x04, 0x9c, 0x51, 0xa8, 0x6e, 0x29, 0x81, 0xcf, 0x13, 0x31, 0xc8, 0x24, 0xd7, 0xd4, 0x51, 0x74, 0x6c, 0xcf, 0x77, 0xfc, 0x22, 0xfd, 0x37, 0x17, 0x00, 0x1e, 0xe5, 0x19, 0x13, 0xd8, 0x1f, 0x7a, 0x06, 0xfb, 0x00, 0x37, 0xf3, 0x09, 0x95, 0x75, 0x79, 0xf6, 0x95, 0x67, 0x0f, 0x2c, 0x4c, 0x73, 0x97, 0xd2, 0xd9, 0x90, 0x37, 0x4e, 0x99, 0xf3, 0x64, 0x08, 0xe3, 0xea, 0x3f, 0x71, 0xf6, 0x08, 0x25, 0x45, 0x2f, 0x82, 0x81, 0x0d, 0x80, 0xd9, 0xe5, 0xe7, 0x1d, 0xb9, 0x5a, 0x89, 0x78, 0x22, 0xf4, 0x84, 0x70, 0xc5, 0xa9, 0xc6, 0xc5, 0xb1, 0x62, 0x63, 0xd0, 0x2e, 0x53, 0x95, 0x71, 0xe9, 0x88, 0x01, 0x48, 0x52, 0xc1, 0x3b, 0x28, 0x43, 0x80, 0x8d, 0xc8, 0xe2, 0x60, 0xf4, 0xbc, 0xc8, 0xa8, 0x6c, 0xa4, 0x63, 0x20, 0x6d, 0xa4, 0x98, 0x24, 0xb6, 0x14, 0xad, 0xf6, 0x49, 0x78, 0x67, 0x59, 0xb7, 0xb2, 0x6f, 0x5b, 0x9d, 0x76, 0xfa, 0x72, 0x6f, 0xff, 0xa9, 0xca, 0x74, 0x00, 0xae, 0xde, 0x12, 0xde, 0x31, 0x46, 0x4c, 0x1c, 0xf2, 0xcf, 0x89, 0x17, 0x2f, 0xd1, 0x97, 0xf3, 0xc8, 0xbd, 0xef, 0xd5, 0xa1, 0xf6, 0x3b, 0x52, 0x48, 0xe2, 0x15, 0x28, 0xd8, 0x40, 0x12, 0x2c, 0x1d, 0xbc, 0xff, 0x84, 0xf8, 0xc0, 0x6a, 0x16, 0x05, 0x8e, 0x65, 0x40, 0x7c, 0x8c, 0x86, 0xca, 0x55, 0xde, 0x32, 0x19, 0xb0, 0x3a, 0x1b, 0xa5, 0x73, 0xf8, 0x08, 0xad, 0x35, 0x69, 0xd5, 0x29, 0x5b, 0x6a, 0xba, 0x00, 0x80, 0x39, 0xd0, 0x7b, 0x1b, 0x87, 0xd0, 0xf9, 0x5b, 0xce, 0x1e, 0xe5, 0x56, 0xe4, 0x07, 0xe6, 0x63, 0xd1, 0x47, 0x55, 0xc4, 0xde, 0xcf, 0xf4, 0x89, 0xee, 0xc5, 0xdd, 0xb0, 0x11, 0xcb, 0xb8, 0x91, 0x57, 0x84, 0x31, 0x7a, 0xe2, 0x54, 0xaa, 0x96, 0x3f, 0x68, 0x2c, 0x13, 0xf7, 0xf7, 0xa4, 0x83, 0x60, 0xc7, 0x4c, 0x83, 0xb9, 0xf2, 0x67, 0x9b, 0x76, 0xea, 0x31, 0x66, 0xd9, 0xbb, 0x16, 0xf3, 0xc2, 0x90, 0x22, 0x6a, 0xc8, 0x79, 0xb9, 0xf3, 0x88, 0x6b, 0x88, 0xd3, 0x3d, 0x89, 0xbb, 0xd8, 0x92, 0xa1, 0x70, 0xf8, 0xb4, 0xfa, 0x6c, 0x35, 0xaa, 0x4d, 0x0d, 0xc4, 0xe9, 0x11, 0x80, 0x6d, 0x23, 0xfb, 0x34, 0x35, 0x61, 0xc6, 0x8f, 0x3b, 0x51, 0x30, 0xdf, 0xe0, 0xe1, 0x45, 0x93, 0x2a, 0x0c, 0xdf, 0xab, 0x6b, 0xf4, 0x6e, 0x6d, 0x1d, 0x32, 0xf5, 0x5a, 0x11, 0x6a, 0x55, 0x60, 0xc9, 0x22, 0xce, 0x51, 0x22, 0xd4, 0xc3, 0x94, 0x35, 0x41, 0xbd, 0x1b, 0x80, 0x09, 0xb3, 0x94, 0x41, 0x79, 0x89, 0xe4, 0x23, 0xa4, 0xd6, 0xd1, 0x1c, 0xb5, 0xea, 0xfe, 0x96, 0x83, 0x10, 0x1d, 0xcd, 0x66, 0x10, 0x60, 0x78, 0x4a, 0xf8, 0x30, 0xab, 0x01, 0x1c, 0x22, 0xfc, 0xde, 0x5c, 0x27, 0xe5, 0x7f, 0xa5, 0x03, 0x69, 0xea, 0xbb, 0x00, 0xfa, 0xdc, 0x35, 0xe3, 0x9b, 0x5d, 0xc9, 0x1f, 0x42, 0x98, 0xc9, 0x49, 0x80, 0xea, 0xee, 0xcc, 0x63, 0x39, 0x55, 0xde, 0x9c, 0x87, 0xc7, 0xb2, 0xdd, 0xc6, 0x3d, 0xef, 0x85, 0xee, 0xa3, 0x62, 0x7f, 0x4e, 0xdd, 0xef, 0x67, 0x1f, 0x08, 0xce, 0xef, 0x5f, 0x02, 0xf4, 0x82, 0xdd, 0x2c, 0xce, 0x27, 0x90, 0x6e, 0x35, 0xa7, 0x2c, 0x7c, 0x9f, 0xf2, 0xf7, 0x58, 0x92, 0xbf, 0xd9, 0x19, 0x5f, 0x73, 0xb3, 0xea, 0x0c, 0x44, 0xf2, 0x55, 0x92, 0x9e, 0x64, 0xc2, 0x49, 0xc5, 0x4a, 0x3a, 0xa0, 0xbd, 0xae, 0x71, 0x11, 0x67, 0xf7, 0x04, 0x54, 0xec, 0xba, 0xff, 0xd3, 0x5e, 0xd3, 0xa2, 0x5f, 0x9d, 0xb5, 0x65, 0x21, 0x78, 0xfe, 0x39, 0xd3, 0x15, 0x4f, 0x11, 0x30, 0x93, 0x5a, 0xa1, 0xa8, 0xed, 0x3c, 0x65, 0x59, 0x22, 0x0e, 0xe6, 0x3b, 0x93, 0xb6, 0x39, 0x9a, 0xac, 0x03, 0xc8, 0xca, 0xc6, 0xfa, 0x55, 0x16, 0x4c, 0x6a, 0x3b, 0xf9, 0x1d, 0xc7, 0xf7, 0x91, 0x32, 0x34, 0xe8, 0x50, 0x81, 0xe2, 0x53, 0xf5, 0x21, 0x99, 0xaa, 0xba, 0xae, 0x94, 0x0e, 0xcf, 0xef, 0x92, 0x12, 0x08, 0xb6, 0x2a, 0xc2, 0xd3, 0x08, 0x5f, 0xe4, 0x6c, 0x7e, 0x74, 0x7d, 0x54, 0xeb, 0x02, 0x97, 0xff, 0x3f, 0x47, 0x42, 0xcc, 0xac, 0xc1, 0xd9, 0x3b, 0x07, 0xfb, 0x86, 0x5b, 0x70, 0xa8, 0x08, 0x81, 0x35, 0xee, 0xb4, 0x3f, 0xf4, 0x04, 0xba, 0x94, 0x00, 0xff, 0xaa, 0x61, 0x06, 0xe9, 0x37, 0x1c, 0xf1, 0x14, 0x3a, 0xc8, 0x0a, 0xad, 0xfa, 0x25, 0x64, 0x94, 0xaa, 0x24, 0x77, 0x6b, 0x33, 0x9d, 0x0b, 0xee, 0x34, 0x44, 0x58, 0x82, 0x47, 0xda, 0x6b, 0x10, 0x87, 0xa0, 0xcb, 0x13, 0x4f, 0x11, 0x5d, 0xf0, 0x44, 0xd0, 0x85, 0x87, 0x95, 0xe0, 0x8e, 0x07, 0x81, 0x13, 0x4c, 0x06, 0x1a, 0xc5, 0xff, 0xd1, 0x49, 0xc9, 0x7b, 0x00, 0x13, 0xa4, 0x86, 0x4e, 0x1a, 0xf9, 0x82, 0xa8, 0x67, 0x45, 0x4c, 0x84, 0x66, 0xcd, 0x63, 0x74, 0x32, 0xd4, 0x4d, 0xfb, 0x13, 0x10, 0x36, 0x9f, 0x46, 0x5f, 0xdb, 0x3f, 0xfc, 0xb7, 0xa6, 0xa7, 0xa4, 0x5b, 0x1a, 0x62, 0x6d, 0x55, 0x72, 0xcf, 0x07, 0x20, 0x85, 0x78, 0xaa, 0xa5, 0xed, 0x9e, 0x5a, 0x69, 0x68, 0x19, 0x69, 0x04, 0x7e, 0x5f, 0x3d, 0xd5, 0x65, 0xe2, 0x54, 0xf4, 0x21, 0x9f, 0x84, 0x68, 0xef, 0xf3, 0x88, 0x9a, 0xe4, 0xb1, 0xb8, 0x0a, 0xd2, 0x73, 0x18, 0x41, 0x6b, 0x2d, 0x94, 0x07, 0xa9, 0x08, 0x8a, 0xd5, 0x6d, 0x6d, 0x89, 0x8d, 0x66, 0x5f, 0x59, 0x69, 0x34, 0x0f, 0x3b, 0x31, 0xcd, 0xaa, 0x71, 0xb2, 0x20, 0x76, 0x01, 0x6b, 0xf9, 0x1d, 0xb7, 0x89, 0x25, 0x49, 0x69, 0x16, 0xd6, 0x70, 0x7e, 0x6d, 0x49, 0xf2, 0xb1, 0xf1, 0xa5, 0x61, 0x13, 0xfe, 0x27, 0x1f, 0x4f, 0x20, 0x7c, 0x2f, 0x32, 0x83, 0x6e, 0x45, 0x6b, 0xab, 0xc3, 0x1f, 0x8f, 0x65, 0x62, 0x18, 0x60, 0xfe, 0xb8, 0xfb, 0x4e, 0xb2, 0x5a, 0x15, 0x3e, 0x67, 0xec, 0x8e, 0x8b, 0x9c, 0x41, 0xf9, 0x4a, 0x9c, 0xc3, 0x29, 0xd3, 0xf7, 0x16, 0x46, 0x7d, 0x32, 0xf8, 0x21, 0xa8, 0xbe, 0x6c, 0xc5, 0x01, 0x27, 0x17, 0x4f, 0x01, 0x8e, 0xea, 0xff, 0xb7, 0x59, 0x01, 0x8e, 0xc8, 0x29, 0xcb, 0xc2, 0xb4, 0x0c, 0x6c, 0x41, 0x5a, 0xf5, 0x5f, 0xa3, 0xbf, 0x69, 0x60, 0xca, 0x0b, 0x7a, 0x89, 0x76, 0xd4, 0xf9, 0xbb, 0x14, 0x9f, 0xe8, 0x3f, 0xd7, 0xa4, 0x2e, 0xad, 0x0a, 0xd2, 0x8e, 0x0d, 0xa5, 0x13, 0xda, 0x3d, 0x1e, 0xd1, 0x64, 0x93, 0x81, 0xb9, 0xb6, 0xc2, 0xc3, 0xbf, 0x83, 0x02, 0x54, 0x62, 0xdd, 0x6b, 0xf3, 0x31, 0xa7, 0xa2, 0xc6, 0x8e, 0x4e, 0xb8, 0xaa, 0xb2, 0xb4, 0x4f, 0xc8, 0xf1, 0x6d, 0xff, 0x69, 0x3f, 0x2e, 0xf8, 0x0b, 0xf4, 0x82, 0xe8, 0xb3, 0xcc, 0xbf, 0x1f, 0x86, 0x32, 0x39, 0xf1, 0x93, 0xbe, 0xb5, 0x5b, 0xf4, 0xfc, 0x21, 0xea, 0x15, 0x6f, 0x82, 0xd9, 0x53, 0xd5, 0x2d, 0x79, 0xc9, 0xad, 0x3a, 0xd6, 0x66, 0xf7, 0x36, 0x98, 0x43, 0x3b, 0x18, 0x27, 0x34, 0xcc, 0x76, 0x13, 0x9e, 0x4e, 0xf9, 0xb2, 0x88, 0x76, 0x0f, 0x0b, 0xf4, 0x11, 0xdf, 0xf2, 0x6f, 0x48, 0x82, 0x75, 0xe7, 0x22, 0x70, 0x77, 0xbd, 0x4a, 0x38, 0x9b, 0x1b, 0x13, 0x75, 0x64, 0x88, 0xb9, 0xfd, 0x9a, 0xb9, 0xea, 0x5b, 0xef, 0xaa, 0x84, 0x80, 0xe2, 0xee, 0xa1, 0xb5, 0xe4, 0x44, 0xd1, 0xd4, 0xb9, 0x6a, 0xa6, 0xb8, 0x22, 0x36, 0x76, 0xf2, 0xb9, 0xe2, 0x5c, 0xbd, 0x1c, 0xa8, 0x80, 0x35, 0x4d, 0x8e, 0x98, 0xc3, 0x59, 0x84, 0xaf, 0xdc, 0x38, 0xac, 0x25, 0xeb, 0xf5, 0xf9, 0xf8, 0x8b, 0x0f, 0xfb, 0x41, 0xfa, 0x1e, 0xf9, 0x02, 0xca, 0xb9, 0x41, 0x1e, 0xda, 0x98, 0xbc, 0xa9, 0x85, 0xf6, 0xc5, 0x62, 0x19, 0x39, 0x3b, 0x7e, 0x8b, 0xd5, 0xd5, 0xa8, 0x69, 0x6e, 0xb6, 0x45, 0x0f, 0x3d, 0x42, 0xfc, 0x1e, 0xb4, 0x2f, 0x76, 0x2a, 0x65, 0xdf, 0x62, 0xb3, 0x20, 0xed, 0xbd, 0x57, 0x5b, 0x06, 0x50, 0x45, 0xd7, 0xfa, 0x7a, 0xf5, 0x81, 0x12, 0x2f, 0x17, 0x97, 0xa5, 0x41, 0xc9, 0x0b, 0xe6, 0xde, 0x0c, 0x2c, 0x00, 0x5b, 0x79, 0x83, 0x65, 0x2f, 0x30, 0xfb, 0x62, 0x43, 0x12, 0x46, 0xf8, 0x69, 0x30, 0x7b, 0xe7, 0x29, 0x82, 0x04, 0x0b, 0xc4, 0xdd, 0xb7, 0xeb, 0x73, 0x1f, 0x43, 0x90, 0xf0, 0xad, 0xce, 0x93, 0x37, 0x1f, 0xdc, 0x7a, 0x8e, 0x39, 0x73, 0x45, 0xc3, 0x1d, 0x7d, 0x43, 0xb5, 0xc0, 0x6d, 0x2a, 0x15, 0x9b, 0x25, 0x67, 0x6e, 0xa3, 0x17, 0xb3, 0x63, 0x7a, 0xab, 0xe7, 0x39, 0xe7, 0xe1, 0x11, 0x95, 0x84, 0x38, 0xc7, 0x86, 0xb6, 0xce, 0xbb, 0xc5, 0xe2, 0xc8, 0x90, 0x3c, 0xde, 0xf4, 0xec, 0xc6, 0xa6, 0xad, 0xcf, 0x36, 0x51, 0x00, 0x23, 0x9a, 0x43, 0x0d, 0x94, 0xc1, 0xa3, 0xaf, 0xa1, 0xfa, 0x10, 0x5f, 0xf3, 0x1f, 0x8f, 0x55, 0xee, 0xd2, 0xc8, 0xf1, 0x87, 0x07, 0x73, 0x5a, 0x55, 0xc3, 0x0d, 0x65, 0xea, 0x22, 0xcf, 0xb8, 0x63, 0x9f, 0xe0, 0x2f, 0x3e, 0x90, 0xca, 0x7e, 0x6c, 0xf0, 0x2b, 0x18, 0xa7, 0x61, 0xad, 0x50, 0x06, 0x71, 0x37, 0xbe, 0xcf, 0x1d, 0x65, 0xe5, 0x8c, 0x94, 0x36, 0x12, 0x61, 0x3d, 0x05, 0x87, 0x9c, 0xfa, 0xbb ],
+const [ 0xc8, 0xc1, 0x07, 0x93, 0x0a, 0xc3, 0xec, 0x65, 0x4f, 0x04, 0x39, 0x92, 0xcf, 0xae, 0xff, 0x31, 0x55, 0x2d, 0x8a, 0xb7, 0x96, 0x37, 0x4b, 0x18, 0xc1, 0x09, 0x16, 0x2f, 0x57, 0xf4, 0x8e, 0x60, 0x3d, 0x19, 0xdd, 0x7c, 0x10, 0x71, 0xa8, 0xe4, 0xb8, 0x10, 0x41, 0xf2, 0x40, 0xaa, 0x1f, 0x94, 0xe4, 0x56, 0x8c, 0x3a, 0x6c, 0x92, 0x9e, 0xf3, 0xb9, 0x87, 0x68, 0xd2, 0x9e, 0x8f, 0x71, 0x97, 0xf1, 0xf5, 0x66, 0x8b, 0xe1, 0xfc, 0x0b, 0xac, 0x89, 0x22, 0x77, 0x0a, 0xc6, 0xa5, 0x81, 0x71, 0x46, 0x47, 0x76, 0x48, 0xe2, 0x4e, 0x0d, 0xb9, 0x2e, 0xd0, 0x9c, 0x13, 0x4e, 0x2d, 0x8b, 0x6c, 0x0b, 0xdd, 0x09, 0x8a, 0x26, 0x6c, 0xff, 0x04, 0xeb, 0xc2, 0x42, 0xa4, 0x0a, 0xa8, 0x0d, 0x10, 0xa3, 0x88, 0xae, 0xa9, 0xa0, 0x74, 0x7f, 0xb4, 0x47, 0x6a, 0x18, 0xb8, 0x0f, 0xd7, 0xc3, 0x26, 0xb3, 0x59, 0x31, 0x3f, 0x86, 0xc9, 0x6b, 0x33, 0x06, 0x79, 0x0a, 0x86, 0xb3, 0xba, 0xab, 0xb8, 0x22, 0xa2, 0x9e, 0x25, 0x4d, 0x0c, 0xde, 0x2a, 0x2d, 0xdf, 0x46, 0x89, 0x8b, 0x94, 0x01, 0x0f, 0x13, 0xf2, 0x43, 0x74, 0xaa, 0x1c, 0x36, 0x82, 0x01, 0xce, 0x38, 0x79, 0x6a, 0xe4, 0x43, 0xb3, 0xeb, 0x1c, 0xac, 0x84, 0x91, 0x1c, 0x11, 0x64, 0x07, 0xb7, 0x8d, 0x50, 0x67, 0x6c, 0x2d, 0x6d, 0x50, 0x2f, 0xa8, 0xef, 0x39, 0x6d, 0x4a, 0x39, 0x05, 0x4a, 0x32, 0x45, 0xd7, 0x2d, 0xbd, 0x47, 0x27, 0x7e, 0x42, 0x8d, 0x16, 0xae, 0x00, 0xaa, 0xfe, 0x78, 0x54, 0xd3, 0x4e, 0x67, 0x30, 0x89, 0x95, 0x99, 0xc8, 0x79, 0xdc, 0xc2, 0x8e, 0xa0, 0x39, 0x73, 0x61, 0xb2, 0xa1, 0x9d, 0x01, 0xbd, 0xfe, 0x51, 0xc7, 0x09, 0x81, 0xc9, 0x93, 0x44, 0x3a, 0xac, 0x05, 0xdb, 0xe6, 0x8e, 0xf0, 0xab, 0x08, 0xb6, 0x0b, 0xd9, 0x3b, 0x25, 0xea, 0xfe, 0xc6, 0xd4, 0x2d, 0x88, 0x71, 0x3c, 0xf8, 0x5d, 0x97, 0x1b, 0xa3, 0xc1, 0x7d, 0x76, 0xb2, 0x79, 0xe2, 0xda, 0x07, 0x30, 0xd7, 0xe8, 0x56, 0x1b, 0xd1, 0x11, 0xda, 0xd9, 0xfd, 0x9d, 0x46, 0x9d, 0xd3, 0xf2, 0xff, 0x8e, 0xee, 0x13, 0x88, 0x6e, 0x1b, 0x67, 0x3d, 0x7a, 0xb0, 0xbc, 0x45, 0x92, 0x1f, 0x8b, 0xc2, 0x9a, 0xca, 0x7d, 0x4a, 0x20, 0x19, 0x2f, 0x9b, 0x3f, 0xca, 0x32, 0x8a, 0xc3, 0x89, 0x57, 0x3d, 0x8d, 0xc1, 0x29, 0x9a, 0x3a, 0xb1, 0xba, 0xff, 0xff, 0xc2, 0xa3, 0x34, 0xd7, 0x18, 0x46, 0x9e, 0xe1, 0x67, 0x56, 0xb5, 0x03, 0x08, 0x9a, 0xb8, 0xd4, 0x4c, 0xed, 0x9f, 0xb9, 0x10, 0x8a, 0x51, 0x4e, 0x91, 0x86, 0x17, 0x07, 0x82, 0x9e, 0x50, 0x17, 0x5c, 0x33, 0x67, 0x90, 0xf6, 0x93, 0x03, 0xcc, 0x55, 0x7a, 0x7d, 0x0d, 0xc5, 0xd9, 0x97, 0x60, 0x28, 0xd5, 0x6b, 0xc7, 0x8f, 0x13, 0xa1, 0x96, 0x07, 0x33, 0xe5, 0x1e, 0xb6, 0x9a, 0x98, 0x89, 0x26, 0x75, 0xc6, 0x05, 0xe0, 0xfa, 0x59, 0x25, 0x3d, 0xf1, 0x8c, 0x83, 0x79, 0x74, 0xa2, 0xab, 0x09, 0xf3, 0xd7, 0x34, 0x2e, 0x7b, 0x97, 0x30, 0xcb, 0x37, 0xee, 0xc7, 0x74, 0x37, 0x40, 0x1e, 0xc7, 0x70, 0x3a, 0x7e, 0xff, 0x04, 0x08, 0xb2, 0xc6, 0xc4, 0xc8, 0xb0, 0x4b, 0xf3, 0x3f, 0x7c, 0x95, 0x4d, 0xcb, 0x4a, 0x17, 0x48, 0x99, 0xe3, 0x84, 0x9a, 0x18, 0x49, 0xe4, 0xfb, 0xae, 0x9e, 0xe8, 0x2c, 0xa9, 0x42, 0x7a, 0x38, 0x78, 0x3c, 0x99, 0xfa, 0x1b, 0xdb, 0x64, 0xdf, 0xd8, 0x9c, 0x74, 0xee, 0x30, 0x4f, 0x6f, 0x05, 0x11, 0x76, 0xda, 0x65, 0x4d, 0xee, 0x2f, 0x70, 0x4b, 0xd1, 0x30, 0xb2, 0xfd, 0x9a, 0x7a, 0x1f, 0x11, 0x8a, 0x5d, 0x9b, 0x6c, 0x4b, 0xeb, 0xc0, 0xd4, 0xd4, 0x4f, 0xdb, 0xec, 0x8c, 0x61, 0x37, 0x66, 0xb2, 0x77, 0x9f, 0x74, 0xfc, 0x7d, 0x1e, 0x7f, 0x7e, 0x48, 0x09, 0x1c, 0xce, 0x27, 0x3f, 0x3c, 0x66, 0xbb, 0xb0, 0xa2, 0x49, 0x09, 0x1c, 0x9b, 0xea, 0xce, 0x1d, 0xe9, 0x49, 0x12, 0x68, 0x00, 0x5f, 0x00, 0x50, 0x75, 0xbc, 0xf5, 0x8c, 0xb3, 0x6f, 0xd7, 0x39, 0xf0, 0x26, 0xa8, 0x23, 0x5f, 0x96, 0x5b, 0x40, 0xa7, 0x1d, 0xe6, 0x7d, 0x95, 0xa6, 0x98, 0xbd, 0x0d, 0xce, 0xad, 0x1f, 0x47, 0x45, 0x20, 0x80, 0x38, 0x76, 0xc0, 0x42, 0x4d, 0x6a, 0x86, 0x4b, 0x5f, 0xe9, 0x26, 0x50, 0xe4, 0xe3, 0xe4, 0x53, 0x62, 0x0f, 0xa9, 0x6a, 0x2a, 0xd2, 0x56, 0xc3, 0x42, 0x62, 0x58, 0xe5, 0xa3, 0x2b, 0x7d, 0x38, 0xa4, 0x72, 0x05, 0xc8, 0xb7, 0x38, 0xfd, 0x46, 0x53, 0x61, 0xc8, 0x50, 0x31, 0x15, 0xff, 0xf1, 0xbb, 0x67, 0x7b, 0x6c, 0xc2, 0x34, 0xaf, 0x35, 0x6f, 0x4e, 0x3b, 0x41, 0x7c, 0xda, 0xbf, 0x7f, 0xa3, 0xf7, 0xed, 0xa7, 0x57, 0xa1, 0xe3, 0x32, 0xb3, 0xd4, 0xb7, 0xa9, 0xb0, 0xf4, 0x53, 0x23, 0x9a, 0x6c, 0x83, 0x0a, 0xc5, 0x96, 0x4c, 0x1d, 0x7c, 0xdb, 0x80, 0xbb, 0x3a, 0x1b, 0x8f, 0x5e, 0x1d, 0x4e, 0xa0, 0x66, 0x97, 0x6c, 0xe0, 0x18, 0x67, 0x8b, 0x1a, 0xe6, 0xc7, 0x47, 0x89, 0xf0, 0xe7, 0x67, 0xea, 0xcc, 0x9b, 0xbe, 0xd4, 0x82, 0x50, 0x4e, 0x4c, 0xdb, 0x45, 0xb4, 0x95, 0xdc, 0xf8, 0xc0, 0x45, 0x8d, 0xde, 0x63, 0x9e, 0xff, 0x56, 0xce, 0x1a, 0x8c, 0xe0, 0xd8, 0x48, 0x61, 0x8a, 0xa0, 0xd7, 0x3a, 0xac, 0x74, 0xf0, 0x6d, 0xd5, 0xf2, 0xca, 0x2a, 0x05, 0x6d, 0x78, 0x01, 0x1d, 0x93, 0x05, 0xa4, 0x93, 0x4c, 0xc2, 0xef, 0x6a, 0xe5, 0xdf, 0x25, 0x62, 0x6d, 0x39, 0x7d, 0x6c, 0x5f, 0x73, 0xdd, 0x60, 0x82, 0x48, 0xe5, 0xf2, 0x0e, 0x1f, 0x2f, 0xe3, 0x10, 0xe0, 0xd5, 0x74, 0x0f, 0x07, 0x34, 0x20, 0xf0, 0xf7, 0xf0, 0x8a, 0x17, 0x90, 0x39, 0xb5, 0xcf, 0x03, 0x4c, 0x73, 0xec, 0xe5, 0x3c, 0x20, 0xaf, 0x83, 0xf2, 0x8f, 0xe9, 0x76, 0x72, 0x45, 0x63, 0x77, 0x61, 0xe5, 0x7e, 0x74, 0xc4, 0xec, 0x17, 0xe3, 0x0b, 0x9e, 0xad, 0x56, 0x4e, 0x41, 0xc6, 0x4f, 0xd6, 0x88, 0x8e, 0x56, 0xdf, 0x52, 0xc2, 0x4a, 0x9c, 0x95, 0xcc, 0xf5, 0x7c, 0x94, 0x30, 0xe2, 0xac, 0x59, 0x26, 0x73, 0xdd, 0x5f, 0x88, 0x2e, 0x47, 0x8f, 0xef, 0x58, 0xee, 0x6d, 0x1a, 0xc5, 0x24, 0x94, 0x8f, 0xee, 0x4f, 0x60, 0x84, 0x44, 0xec, 0xea, 0xff, 0xc4, 0xd4, 0x39, 0x3d, 0xcc, 0xbe, 0xb6, 0x51, 0x2d, 0x06, 0xe1, 0x0d, 0x81, 0xad, 0x43, 0x25, 0xbf, 0xa0, 0xa3, 0x92, 0x0c, 0x3d, 0x7d, 0x35, 0xd4, 0x13, 0xb0, 0xbd, 0x1a, 0xe9, 0x77, 0xca, 0x0c, 0x02, 0x9a, 0x52, 0xdb, 0xa0, 0xe6, 0x45, 0xc9, 0xc7, 0xda, 0x6c, 0x84, 0x43, 0xa3, 0x97, 0xb2, 0xed, 0x4b, 0xf7, 0xcd, 0x29, 0x2d, 0xc9, 0x31, 0xb3, 0xac, 0x34, 0x73, 0x9c, 0x24, 0x75, 0xf5, 0x8f, 0x21, 0x39, 0xb7, 0x59, 0xcf, 0x4a, 0x70, 0xa8, 0xb2, 0x6e, 0xde, 0x13, 0x97, 0x8d, 0x5a, 0x5b, 0xcb, 0x11, 0xaf, 0xf1, 0x8a, 0x92, 0x2c, 0xb8, 0xba, 0xb3, 0xf8, 0x0b, 0xda, 0x47, 0xa6, 0x02, 0x35, 0xb9, 0x09, 0xf1, 0x5b, 0xaa, 0x4a, 0x32, 0xd1, 0xdb, 0x37, 0x25, 0x08, 0x4e, 0xde, 0x74, 0x8c, 0xa8, 0x5b, 0x9c, 0x7e, 0xda, 0xee, 0xa9, 0x44, 0x00, 0x51, 0x40, 0x7f, 0x89, 0x48, 0xe3, 0x3d, 0x99, 0x79, 0x71, 0x71, 0xab, 0x7e, 0xec, 0xa0, 0x7b, 0x39, 0x7f, 0xdc, 0x23, 0x67, 0xc0, 0xf6, 0x84, 0x78, 0x32, 0xf0, 0xe7, 0x9f, 0x0e, 0xb1, 0xe4, 0x25, 0x43, 0xfc, 0x84, 0x02, 0xbb, 0xa3, 0xa2, 0xae, 0xe0, 0xf8, 0x97, 0x35, 0x5f, 0x85, 0x16, 0x8a, 0x2b, 0xfd, 0x54, 0x1d, 0xc6, 0x72, 0x6c, 0xaf, 0xbc, 0xc7, 0x03, 0x65, 0x70, 0x69, 0x27, 0x1c, 0x1a, 0x3a, 0x7d, 0xfd, 0x11, 0xce, 0x9c, 0x51, 0x46, 0xda, 0xb4, 0x96, 0x11, 0xe9, 0x73, 0xd2, 0x31, 0x51, 0x29, 0x27, 0x0e, 0x66, 0x2a, 0xa8, 0x40, 0xed, 0x74, 0x6b, 0x55, 0xd4, 0x91, 0xdf, 0xcf, 0x20, 0xbf, 0x60, 0x6d, 0x26, 0x4f, 0x09, 0xac, 0xfe, 0x4b, 0xca, 0x8c, 0x35, 0x5b, 0xba, 0x97, 0xc2, 0xe9, 0xae, 0x20, 0x3b, 0x84, 0x0a, 0xc9, 0x49, 0x82, 0xd7, 0x48, 0x5a, 0xea, 0x16, 0x6a, 0x95, 0x91, 0x54, 0x57, 0x13, 0x82, 0x7f, 0x19, 0x4c, 0xa3, 0xf8, 0x58, 0xcf, 0x96, 0xe9, 0x67, 0x37, 0xde, 0xd9, 0x85, 0x5a, 0x43, 0x7e, 0x5c, 0xc3, 0x77, 0xd2, 0xce, 0x63, 0xf9, 0x69, 0xf1, 0x83, 0x3a, 0x01, 0x58, 0xfd, 0xff, 0x5b, 0x95, 0xac, 0x06, 0x49, 0xfb, 0x21, 0xec, 0x09, 0xa9, 0x97, 0x4e, 0xd1, 0xc4, 0x29, 0x2f, 0xab, 0x03, 0x43, 0x99, 0x83, 0x71, 0x57, 0x87, 0x7e, 0x6e, 0xd1, 0x03, 0x8e, 0xf7, 0x4c, 0x8c, 0x44, 0x28, 0x06, 0xba, 0xe5, 0xff, 0x91, 0x25, 0xbf, 0x63, 0xcc, 0x82, 0xbd, 0x65, 0x12, 0x0f, 0x3a, 0xc5, 0xb1, 0x32, 0x13, 0xb8, 0x9e, 0x5c, 0x00, 0xe8, 0x67, 0x34, 0x24, 0xbd, 0x68, 0xf2, 0xe2, 0xdb, 0x42, 0x08, 0xf3, 0xec, 0x89, 0x08, 0xb5, 0x9f, 0xbd, 0xc2, 0xc6, 0xf0, 0x7c, 0xac, 0xd2, 0xab, 0xf5, 0x88, 0xa9, 0x2b, 0xa0, 0x40, 0x95, 0x68, 0x2d, 0x15, 0xea, 0x31, 0xba, 0xf8, 0xde, 0xb5, 0x48, 0x38, 0x9b, 0x48, 0x70, 0x5e, 0x93, 0x64, 0x52, 0x56, 0x14, 0xee, 0xcf, 0xcf, 0x1c, 0xbb, 0xf8, 0xe3, 0x6e, 0x53, 0xc5, 0xfb, 0xe5, 0xf5, 0x0b, 0xed, 0x09, 0xdb, 0xa8, 0x68, 0xe0, 0xbe, 0x00, 0x92, 0x07, 0x9d, 0xae, 0xef, 0x00, 0xbb, 0x73, 0x85, 0xce, 0xe7, 0x72, 0x3e, 0xbf, 0xff, 0xa0, 0x8d, 0x8a, 0xb7, 0x76, 0x54, 0x99, 0x97, 0xe9, 0x06, 0xa8, 0x43, 0x9b, 0x09, 0x8f, 0xff, 0x53, 0x5e, 0x5c, 0x72, 0xab, 0x83, 0xa5, 0xaa, 0x08, 0x98, 0x1d, 0x61, 0xcf, 0xc2, 0x64, 0x7f, 0xd6, 0xcd, 0x24, 0xe0, 0x19, 0x15, 0x59, 0x56, 0xaf, 0xa6, 0xf0, 0xf2, 0xfc, 0xa2, 0x94, 0x7f, 0x27, 0xe3, 0xc5, 0x50, 0xce, 0xe2, 0x2a, 0x3c, 0xf9, 0xd7, 0x28, 0xe6, 0x4d, 0x22, 0xb3, 0x42, 0x83, 0xea, 0x64, 0x54, 0x18, 0x04, 0xcc, 0x3b, 0x45, 0x16, 0x09, 0x6f, 0x31, 0xfc, 0x96, 0x47, 0x66, 0x6a, 0x68, 0xbe, 0x81, 0xd3, 0x36, 0x76, 0x2e, 0x8a, 0x18, 0xfd, 0x54, 0x28, 0x53, 0x50, 0x8d, 0x2d, 0x73, 0x9d, 0xd9, 0xea, 0x9b, 0x4d, 0x93, 0x9e, 0x1a, 0x42, 0xa4, 0xdf, 0x3e, 0x5d, 0xf6, 0x3b, 0x6d, 0x44, 0x2c, 0x20, 0x71, 0x62, 0x90, 0xf9, 0x14, 0x2f, 0x4c, 0x9a, 0xed, 0xb1, 0xde, 0xde, 0x79, 0x43, 0xc6, 0x8e, 0x6e, 0x95, 0x81, 0x85, 0x4b, 0xf4, 0xbb, 0x12, 0x34, 0xcb, 0xc1, 0x9e, 0xfd, 0x6a, 0x35, 0x8f, 0x85, 0x07, 0x05, 0x6c, 0x45, 0x02, 0x9d, 0x41, 0x28, 0x6e, 0x5c, 0x45, 0x9d, 0xcc, 0x45, 0xba, 0xeb, 0x19, 0xf8, 0x15, 0xc6, 0x0c, 0xe0, 0x5f, 0x1f, 0x99, 0xad, 0xdb, 0x40, 0xb9, 0x05, 0xe9, 0x17, 0x6d, 0x76, 0x2a, 0xd2, 0x00, 0xb0, 0xe5, 0xad, 0x8d, 0xf1, 0xa9, 0x08, 0xc2, 0xc0, 0x34, 0xbd, 0xe3, 0xde, 0x94, 0xb0, 0x12, 0x7a, 0x8c, 0xa8, 0xcd, 0xa4, 0x39, 0x5d, 0xb8, 0x04, 0xf5, 0xd2, 0x9d, 0xcc, 0x7c, 0xe4, 0xb1, 0xeb, 0x4e, 0x23, 0x19, 0x84, 0x54, 0xe2, 0xac, 0x9e, 0xc5, 0x8a, 0xfb, 0x1d, 0x4b, 0x34, 0x8e, 0xf1, 0x62, 0x76, 0x71, 0x8d, 0x01, 0x7c, 0xf0, 0x9a, 0x7d, 0x5b, 0x9e, 0xed, 0xaa, 0xa3, 0x9c, 0xb7, 0x43, 0x33, 0x17, 0xfc, 0x8c, 0x52, 0x13, 0x47, 0x35, 0xfb, 0x67, 0x9b, 0x82, 0x77, 0x09, 0xac, 0xa9, 0x32, 0x8c, 0x4f, 0x7c, 0xc7, 0xe7, 0x30, 0x47, 0x5d, 0x78, 0xc3, 0xfc, 0x36, 0x49, 0x7d, 0x8d, 0x85, 0x91, 0x43, 0x9a, 0x80, 0x7e, 0x23, 0x4c, 0xb7, 0x31, 0x42, 0x81, 0xa4, 0x0b, 0x15, 0x29, 0x83, 0x27, 0xd4, 0xef, 0x64, 0x27, 0x2c, 0x1d, 0x7e, 0x34, 0x35, 0xb9, 0xc6, 0x40, 0xa3, 0xf4, 0xc0, 0x8e, 0x40, 0xc6, 0x95, 0x75, 0x9a, 0xd2, 0x67, 0x61, 0xf8, 0x8f, 0xe1, 0x1a, 0x93, 0xa9, 0x12, 0x49, 0x03, 0xa5, 0x7b, 0x38, 0xf8, 0xc5, 0x66, 0xd9, 0x2a, 0x2b, 0x7a, 0x0a, 0x93, 0x40, 0x8d, 0x17, 0xdb, 0x57, 0xb9, 0x80, 0x14, 0x8e, 0xb2, 0xfd, 0xa7, 0xf5, 0x56, 0xc0, 0x8e, 0xf3, 0x86, 0xfa, 0xc4, 0xe5, 0x35, 0xa0, 0xfa, 0x07, 0xbe, 0x6f, 0x8c, 0x98, 0x7b, 0x2e, 0xb3, 0x39, 0x93, 0x33, 0xfc, 0x97, 0x13, 0x28, 0xf9, 0x49, 0x41, 0x0f, 0x36, 0xfc, 0x2d, 0x84, 0x6e, 0xcd, 0x88, 0x42, 0xff, 0xf6, 0xb9, 0xe9, 0x9c, 0xad, 0x2e, 0xff, 0x42, 0x49, 0xf0, 0x34, 0x6d, 0xa7, 0x7b, 0xea, 0x8b, 0xcc, 0xcc, 0xf4, 0xb1, 0xcb, 0xbb, 0x9e, 0x8d, 0xe9, 0x8b, 0xee, 0x9c, 0x00, 0xc0, 0x2a, 0x9c, 0x21, 0x30, 0x9a, 0x45, 0x7d, 0x5d, 0x8f, 0x34, 0x86, 0x02, 0xa5, 0x28, 0x51, 0xec, 0x44, 0x70, 0x3f, 0x0b, 0x6d, 0xa4, 0xdc, 0xc9, 0xb3, 0x94, 0x07, 0x9a, 0x87, 0x7e, 0x54, 0xd5, 0xb9, 0x84, 0xae, 0xc2, 0x3c, 0x5c, 0x41, 0xf4, 0x2a, 0x4a, 0x97, 0xd9, 0x07, 0x4b, 0x00, 0x8f, 0x4a, 0x93, 0x38, 0xf9, 0x19, 0x3a, 0x44, 0x13, 0x55, 0x33, 0x9d, 0x82, 0xd6, 0x7d, 0x90, 0x70, 0xf8, 0x9d, 0xe5, 0x96, 0x56, 0x4b, 0xbf, 0x9a, 0xd5, 0x6c, 0xc3, 0x9c, 0xe5, 0x40, 0x7c, 0x0c, 0x03, 0xdd, 0xfe, 0xbe, 0x82, 0xdc, 0xca, 0x40, 0x8c, 0x52, 0xf2, 0x6b, 0x64, 0x02, 0x7e, 0x38, 0xed, 0xd0, 0x0d, 0xd5, 0x70, 0x79, 0xc0, 0xf8, 0x9a, 0x82, 0x53, 0x74, 0xc4, 0x6e, 0x8d, 0x0a, 0x78, 0x34, 0xdb, 0x81, 0x30, 0xf0, 0x38, 0xf8, 0x60, 0xd9, 0x4f, 0x7c, 0xb7, 0x73, 0xe4, 0xd6, 0xa2, 0x06, 0x70, 0xa6, 0x13, 0x4e, 0x0b, 0xb6, 0x80, 0x74, 0x8f, 0x88, 0x2e, 0x3d, 0xfb, 0x31, 0xaf, 0x82, 0x15, 0x6a, 0xaa, 0xe0, 0x54, 0xe5, 0xda, 0xb0, 0xfc, 0xdd, 0x59, 0x39, 0x8b, 0xf1, 0x1f, 0x25, 0x54, 0x32, 0xc5, 0x32, 0x6a, 0x7b, 0x8f, 0x2a, 0xbf, 0x01, 0xaa, 0x15, 0x8d, 0x2a, 0xb2, 0xad, 0xf5, 0xa3, 0x78, 0x12, 0xe7, 0xad, 0x01, 0xbf, 0x41, 0xb7, 0xd2, 0xbd, 0x3b, 0x32, 0x6a, 0x16, 0x02, 0xa1, 0x11, 0x8d, 0xa3, 0xef, 0xd0, 0x8c, 0x2b, 0x06, 0xc1, 0x5e, 0x0c, 0x9d, 0x89, 0x9e, 0xc3, 0x51, 0x22, 0xf0, 0xb8, 0xf8, 0xde, 0xef, 0x66, 0x32, 0xa8, 0x66, 0xbb, 0x40, 0x8d, 0xc2, 0xc2, 0x1a, 0x7c, 0xc7, 0x7f, 0xbb, 0x4a, 0x83, 0x1b, 0xc0, 0xf9, 0x80, 0x41, 0x31, 0x3a, 0x3e, 0xc7, 0x9f, 0x30, 0xe0, 0x91, 0x6f, 0x77, 0x26, 0xb2, 0x75, 0x65, 0x9b, 0xd5, 0xc5, 0x90, 0x10, 0xdc, 0xc5, 0x90, 0x48, 0xc6, 0x87, 0x06, 0xf5, 0xd6, 0x56, 0xdd, 0xe3, 0xf1, 0x8f, 0xcf, 0x74, 0x49, 0xb3, 0x2b, 0x4c, 0x38, 0xb9, 0xd6, 0x4d, 0x6e, 0xa9, 0x90, 0xc6, 0x4f, 0x66, 0x79, 0xe7, 0x97, 0xcb, 0xd4, 0x79, 0x40, 0xfa, 0x0a, 0xcc, 0xa5, 0xf1, 0xf2, 0xf0, 0xe7, 0x5f, 0x4f, 0x27, 0x90, 0xb5, 0x9b, 0x9b, 0x76, 0x7f, 0x03, 0x4d, 0xe3, 0xf5, 0xb2, 0x4e, 0xf2, 0xcd, 0x52, 0x31, 0x3c, 0x54, 0xd0, 0xc0, 0xb4, 0xbd, 0x60, 0xee, 0xd0, 0xb9, 0xc2, 0x0d, 0xea, 0x48, 0xc3, 0x41, 0xe5, 0xce, 0x06, 0x35, 0x13, 0x69, 0x04, 0x0c, 0x56, 0x82, 0x52, 0x9b, 0x86, 0xa2, 0x23, 0xd5, 0x13, 0x87, 0x0d, 0x86, 0xec, 0x78, 0x10, 0x45, 0x9f, 0xd5, 0xd4, 0xa3, 0xc1, 0xf2, 0x32, 0xa9, 0x90, 0x25, 0xf6, 0x82, 0xd7, 0x1e, 0xe3, 0x74, 0x12, 0x77, 0xf8, 0x15, 0xd3, 0x8c, 0xf2, 0xbb, 0x64, 0x8d, 0x12, 0x34, 0xae, 0xd2, 0x20, 0xb7, 0x59, 0x6e, 0xb0, 0x1b, 0x35, 0x06, 0xa4, 0x47, 0xd9, 0xe4, 0xf2, 0xea, 0x8a, 0x47, 0xa8, 0x6c, 0x5e, 0xfd, 0x2d, 0x24, 0xa0, 0x34, 0xc9, 0xcb, 0x77, 0x8e, 0x67, 0x30, 0xc3, 0x73, 0x9a, 0x2e, 0x48, 0xab, 0xdf, 0xdb, 0x0e, 0x2c, 0x22, 0x03, 0x07, 0x30, 0x83, 0xd5, 0xf3, 0x8b, 0x59, 0xdb, 0x81, 0x3c, 0x77, 0x30, 0xb7, 0x42, 0xaf, 0xed, 0x93, 0xb1, 0x95, 0xe4, 0xf3, 0x04, 0x85, 0x91, 0xb2, 0xb5, 0xe8, 0x4d, 0x14, 0x0b, 0xb2, 0xc5, 0x64, 0x34, 0x2f, 0xab, 0xdb, 0x93, 0x00, 0xab, 0xc4, 0x5b, 0x61, 0xa1, 0xde, 0x5d, 0xad, 0x09, 0x02, 0x1e, 0x23, 0xb6, 0x05, 0x2d, 0xea, 0xc8, 0xe0, 0xb3, 0x53, 0xd8, 0x0e, 0x4c, 0x5f, 0x75, 0x36, 0x15, 0x81, 0xd4, 0x0a, 0x07, 0xa4, 0xc3, 0x6f, 0x83, 0x70, 0xdf, 0xde, 0x2d, 0xc9, 0x07, 0x0a, 0xfe, 0x99, 0x10, 0xc3, 0x95, 0xd0, 0xba, 0x1a, 0xce, 0xa9, 0xe3, 0xc6, 0x96, 0x2e, 0xfb, 0xc6, 0xfe, 0xfe, 0xb8, 0x48, 0x8e, 0x4e, 0x0b, 0xca, 0xdb, 0x2e, 0x52, 0x7f, 0x5b, 0x0d, 0xcf, 0xf4, 0x79, 0x80, 0x59, 0xf3, 0xe5, 0x3f, 0x51, 0xa8, 0x2e, 0x70, 0xd8, 0x02, 0x92, 0x29, 0x3f, 0x5c, 0x15, 0x30, 0xbf, 0x5d, 0xd0, 0x05, 0x6b, 0x1c, 0x8c, 0x22, 0x62, 0x88, 0x8f, 0x81, 0x49, 0x08, 0xb6, 0x5f, 0xf9, 0x5e, 0xc4, 0x40, 0x74, 0xd1, 0xfa, 0x33, 0x1e, 0x8b, 0xe8, 0x57, 0x2a, 0x40, 0x82, 0x9e, 0x52, 0x10, 0x76, 0xd1, 0xcb, 0xaf, 0xbd, 0xd4, 0x78, 0xc3, 0x70, 0x2c, 0x5e, 0x8d, 0xde, 0xbe, 0x58, 0xcc, 0xdb, 0xd9, 0x0b, 0xde, 0x5b, 0x77, 0x1d, 0x29, 0x3f, 0xc0, 0xa2, 0xb9, 0x6e, 0xd0, 0xd7, 0x2a, 0x28, 0xba, 0x13, 0xc9, 0x97, 0xcd, 0xfa, 0xf6, 0xa7, 0x16, 0xf4, 0xcd, 0x18, 0x25, 0xde, 0x05, 0xd2, 0x14, 0xff, 0x17, 0x78, 0xc6, 0x3d, 0xa3, 0x3f, 0x6d, 0x90, 0x10, 0x01, 0x4f, 0xb8, 0x74, 0x8d, 0xc9, 0x2b, 0xb3, 0x42, 0x94, 0x52, 0xea, 0xdc, 0x47, 0xf4, 0x0e, 0x8d, 0x1d, 0xf3, 0xd0, 0x50, 0xf9, 0x36, 0xc4, 0x7a, 0xa7, 0xe6, 0xc3, 0x91, 0x65, 0xdd, 0x8e, 0x62, 0xa2, 0x5b, 0xb3, 0x4e, 0x05, 0xfb, 0xb5, 0xe5, 0xb1, 0xe6, 0x67, 0xb6, 0xc8, 0x47, 0x99, 0x64, 0x2d, 0xff, 0xf6, 0xfd, 0x8f, 0x99, 0x2d, 0x88, 0xa3, 0x80, 0x4f, 0xdd, 0xb0, 0x6f, 0x78, 0xba, 0x51, 0x2a, 0xb2, 0x12, 0x77, 0x6c, 0x16, 0xa8, 0xad, 0x20, 0x35, 0xdd, 0xa0, 0xd3, 0xb6, 0xc6, 0xde, 0x6a, 0x40, 0x82, 0xde, 0x10, 0x9a, 0xcb, 0x41, 0x73, 0x10, 0xca, 0x57, 0x30, 0x19, 0x30, 0xe5, 0x8b, 0x38, 0x82, 0x25, 0x64, 0x20, 0xb4, 0x0f, 0x67, 0x1b, 0xfa, 0xd7, 0x82, 0xac, 0xdb, 0xb7, 0x9c, 0x73, 0x87, 0xee, 0x84, 0x52, 0x6a, 0x09, 0x27, 0xce, 0x01, 0x61, 0x07, 0xb8, 0xed, 0xe5, 0xe8, 0x0c, 0x46, 0x19, 0xcc, 0x19, 0x31, 0x5f, 0x22, 0xe2, 0xb5, 0x76, 0x3b, 0xc5, 0xca, 0x40, 0xfd, 0x5a, 0xb3, 0xc8, 0xdb, 0x9e, 0x8e, 0x83, 0x05, 0x51, 0x2a, 0xd6, 0xdb, 0x9c, 0x18, 0xd9, 0xa8, 0xf7, 0x05, 0x5b, 0x8d, 0x4a, 0x47, 0x26, 0xbb, 0x52, 0xb5, 0x83, 0xe5, 0x47, 0xbc, 0x01, 0xf6, 0xbc, 0xaf, 0x73, 0xff, 0xc6, 0x5f, 0x38, 0x73, 0x60, 0xec, 0xbf, 0x96, 0x0e, 0xda, 0x49, 0x33, 0xc1, 0x67, 0xf1, 0x8d, 0xfb, 0x1c, 0xea, 0x99, 0x33, 0xa3, 0x09, 0x6a, 0x7b, 0xd8, 0x83, 0xed, 0x60, 0x22, 0xf7, 0xd6, 0x12, 0x04, 0xaf, 0xda, 0xc5, 0xef, 0x23, 0x1f, 0x56, 0x5b, 0xbe, 0xf1, 0x32, 0x16, 0xe5, 0xb6, 0x74, 0xdb, 0x36, 0x24, 0x4d, 0x26, 0x0d, 0xb1, 0xa9, 0x47, 0x4d, 0x4b, 0x0f, 0xb5, 0x5d, 0x4a, 0xc9, 0xa6, 0x70, 0xa3, 0x46, 0xdc, 0x0a, 0x5e, 0xbc, 0xc2, 0xc0, 0x4a, 0x11, 0xb7, 0x3f, 0xef, 0xfc, 0xaa, 0x8f, 0xc4, 0x68, 0xe7, 0x99, 0xa2, 0x19, 0x30, 0xe7, 0x79, 0x91, 0x10, 0xac, 0x42, 0x35, 0x6c, 0x04, 0x34, 0xac, 0x5b, 0x7c, 0x3b, 0x88, 0x38, 0xd5, 0xa6, 0x28, 0xf5, 0x05, 0x1f, 0xdc, 0xb1, 0x7f, 0xe1, 0x4b, 0x8d, 0xb4, 0x25, 0x12, 0xbc, 0xda, 0xdd, 0xae, 0xda, 0xec, 0xa5, 0x9c, 0x7f, 0xf2, 0xf7, 0xbe, 0x13, 0x82, 0x9e, 0x01, 0xe4, 0x87, 0x6d, 0x3d, 0x75, 0x41, 0x30, 0x5d, 0x1a, 0x8d, 0xe3, 0xbf, 0xc1, 0x67, 0x22, 0xde, 0x13, 0xad, 0xe1, 0x2e, 0xbc, 0x25, 0x5d, 0x47, 0x06, 0xc2, 0x52, 0x46, 0xad, 0x23, 0x6f, 0x70, 0xef, 0x5d, 0x07, 0x19, 0xe2, 0xfa, 0x09, 0xc5, 0x0a, 0x42, 0x32, 0x8c, 0x2b, 0xb9, 0x81, 0xc3, 0x5c, 0xe8, 0xec, 0xd8, 0x5d, 0x60, 0x51, 0x7e, 0x2a, 0xfd, 0xaf, 0x0a, 0xd0, 0x68, 0x96, 0x1d, 0x80, 0xdf, 0xdc, 0x84, 0xe2, 0x39, 0x92, 0x5c, 0xab, 0x24, 0x36, 0x7a, 0x72, 0xb2, 0x2a, 0x0a, 0xc0, 0x14, 0x65, 0x75, 0x66, 0xa5, 0x69, 0x89, 0x13, 0x2a, 0x75, 0xd4, 0x25, 0x57, 0xfb, 0x50, 0xc0, 0x96, 0x54, 0x46, 0x1d, 0x05, 0xb3, 0x6c, 0x25, 0xbd, 0x58, 0x50, 0x3f, 0x5a, 0x06, 0xfa, 0x66, 0xb8, 0xb6, 0xcd, 0x7e, 0xfa, 0x8d, 0xaf, 0xe8, 0xd1, 0x0c, 0x6a, 0x54, 0xfb, 0x87, 0x51, 0xd6, 0x09, 0xd8, 0x26, 0x3d, 0x66, 0x54, 0x3b, 0xa0, 0x95, 0xfe, 0xd8, 0x39, 0xba, 0xfb, 0xdd, 0x76, 0x5c, 0x46, 0xa8, 0x4e, 0x69, 0xa5, 0x39, 0xd2, 0x7a, 0xdc, 0x94, 0x04, 0x59, 0x20, 0x67, 0xeb, 0xc1, 0xce, 0xed, 0xe7, 0x64, 0x5d, 0x12, 0x43, 0x32, 0x92, 0xd8, 0x09, 0xd9, 0xf2, 0xf9, 0x1a, 0x88, 0x7d, 0xce, 0x7d, 0xf9, 0x99, 0x6f, 0xf8, 0xae, 0x4d, 0x1c, 0xdd, 0x7b, 0xaf, 0xdc, 0x27, 0x44, 0xa0, 0x63, 0xc5, 0x08, 0xb6, 0x39, 0x36, 0x1e, 0x7a, 0x19, 0x56, 0xbf, 0xd4, 0x98, 0x78, 0xc5, 0xc3, 0x07, 0xb4, 0xb2, 0x51, 0x99, 0x83, 0xf4, 0xc7, 0xc9, 0x89, 0x68, 0x1d, 0xf6, 0xb1, 0x1c, 0xb4, 0x50, 0x7f, 0x59, 0x48, 0xf8, 0xa2, 0xe1, 0x20, 0x63, 0xc9, 0x75, 0x87, 0x00, 0xb8, 0x9a, 0x80, 0x1a, 0x9b, 0x9d, 0xb6, 0xff, 0x9a, 0xd5, 0xb2, 0x62, 0xad, 0x28, 0x50, 0xfe, 0xb2, 0xd0, 0x74, 0x7c, 0xbd, 0x5f, 0xf9, 0x97, 0xaf, 0x01, 0xea, 0x7e, 0x0a, 0x02, 0xf5, 0x79, 0x03, 0x90, 0x1c, 0xd0, 0xd9, 0xc1, 0xae, 0xe9, 0x66, 0xd8, 0x76, 0xb0, 0xf4, 0xc4, 0x32, 0x3b, 0x51, 0xe9, 0x47, 0xaf, 0x26, 0x23, 0xb2, 0x5d, 0x84, 0x08, 0x42, 0x31, 0xc0, 0x6e, 0x04, 0x4d, 0x81, 0x2e, 0xff, 0xf1, 0x17, 0x27, 0x22, 0x9e, 0x0e, 0x85, 0x7b, 0x7b, 0x03, 0x43, 0xaa, 0xf7, 0xb7, 0xee, 0x94, 0xb0, 0x62, 0xac, 0x5c, 0x94, 0x4a, 0x7e, 0x8f, 0x45, 0x93, 0xc2, 0x9e, 0xc2, 0x59, 0xfc, 0x92, 0x45, 0xfc, 0xd5, 0xfb, 0x67, 0xbb, 0x64, 0x29, 0x8a, 0x85, 0xad, 0x9f, 0x78, 0x0b, 0x67, 0xc5, 0x48, 0x1a, 0x03, 0xdd, 0x82, 0x28, 0xe9, 0x38, 0x83, 0x2d, 0x05, 0xaa, 0x22, 0xb4, 0x82, 0x3b, 0x93, 0x31, 0xd5, 0x1f, 0x8c, 0x95, 0xfe, 0xe9, 0xa7, 0x20, 0x0a, 0xfb, 0x08, 0x76, 0xdd, 0x41, 0x3f, 0xf6, 0x2e, 0x1f, 0x6f, 0x47, 0xd3, 0xa7, 0xb0, 0x33, 0x3f, 0x10, 0xb3, 0xb9, 0x49, 0x63, 0xa5, 0x5d, 0x2f, 0x78, 0x55, 0xc3, 0xda, 0x21, 0x98, 0x7c, 0x63, 0xa5, 0xed, 0x20, 0xd7, 0x70, 0x5d, 0x9d, 0x37, 0x08, 0xa5, 0xce, 0xc3, 0x43, 0x97, 0x50, 0x78, 0xb8, 0xbe, 0x91, 0xd8, 0x73, 0x41, 0x29, 0xe9, 0xed, 0x09, 0x6e, 0x80, 0x3b, 0x26, 0x42, 0xbf, 0x85, 0x6f, 0x30, 0xdd, 0xba, 0x69, 0xb8, 0x25, 0x82, 0x6b, 0xe6, 0x42, 0x74, 0xff, 0x2a, 0xb9, 0x8a, 0x8a, 0x63, 0xb7, 0xd1, 0x30, 0x3d, 0x0d, 0x65, 0xf2, 0xbd, 0x79, 0x9d, 0x19, 0x1a, 0x27, 0x83, 0xd8, 0xcf, 0x77, 0x87, 0x2d, 0xee, 0x01, 0x74, 0x08, 0xb7, 0xd7, 0xa2, 0xaf, 0x69, 0x09, 0x6e, 0x61, 0x58, 0x6f, 0xe7, 0x39, 0x40, 0xa2, 0xca, 0x56, 0xd9, 0x4c, 0xb1, 0x39, 0xab, 0xa2, 0x87, 0x6e, 0x24, 0x2e, 0x3f, 0x6f, 0xe8, 0xd2, 0xc5, 0xc5, 0x68, 0x0a, 0x35, 0x70, 0xb6, 0x71, 0x4c, 0x89, 0x98, 0x87, 0x1c, 0x26, 0xdb, 0xb1, 0x03, 0x7e, 0xe9, 0x81, 0xdd, 0x4e, 0x9e, 0x38, 0x79, 0x7b, 0x58, 0x89, 0x4a, 0xf8, 0x4d, 0xa0, 0x5f, 0xea, 0x22, 0x63, 0x95, 0x0a, 0xb9, 0xf8, 0x0c, 0x4b, 0x4a, 0x87, 0xd7, 0xbe, 0xb5, 0x41, 0xf8, 0xb2, 0x16, 0xa1, 0x8b, 0x1f, 0x9a, 0xf1, 0x41, 0x45, 0x92, 0x11, 0x10, 0x90, 0xc6, 0x74, 0x29, 0xbf, 0x0c, 0x6b, 0x2b, 0x45, 0x19, 0xa6, 0x96, 0xef, 0x96, 0xf7, 0x82, 0xc8, 0x77, 0x5a, 0x91, 0x3a, 0x88, 0x33, 0x22, 0x75, 0x48, 0xd6, 0xc7, 0x15, 0xfb, 0x4c, 0xfa ],
+const [ 0xb0, 0x02, 0x50, 0xcc, 0x95, 0x2f, 0x6d, 0xc3, 0x04, 0x26, 0x00, 0xe5, 0x4b, 0x89, 0x6d, 0x17, 0x8c, 0x84, 0x84, 0xf5, 0xbf, 0xbb, 0xa9, 0x6a, 0xfa, 0x81, 0x32, 0x7d, 0xf0, 0x4b, 0x11, 0x6e, 0xb9, 0x64, 0xb3, 0x02, 0xd1, 0xe2, 0x28, 0x1b, 0x62, 0xd8, 0x83, 0x8b, 0xc6, 0xcd, 0x84, 0x2a, 0x47, 0x6d, 0x74, 0x27, 0x2a, 0x7f, 0x51, 0x9b, 0xed, 0x17, 0x2b, 0x64, 0xcc, 0x0d, 0xce, 0x30, 0x8a, 0xad, 0xa1, 0xd8, 0x6d, 0xb0, 0xce, 0xf0, 0x8b, 0x6c, 0xa3, 0x9c, 0x44, 0x47, 0x39, 0xa4, 0x10, 0x71, 0x53, 0xcb, 0x7b, 0xd3, 0x88, 0x5d, 0x6d, 0x42, 0xa5, 0x08, 0xaf, 0xf9, 0x4d, 0xec, 0xab, 0x46, 0xe2, 0xf5, 0x73, 0x83, 0xa9, 0x69, 0x05, 0x48, 0x28, 0xbd, 0xce, 0xdf, 0xd3, 0xad, 0x6c, 0xf8, 0xe8, 0x8c, 0xb8, 0x9e, 0x98, 0xd8, 0x04, 0x6a, 0x67, 0x11, 0xa1, 0xf7, 0xd5, 0xcb, 0xa5, 0x95, 0x3e, 0x03, 0xea, 0x42, 0xff, 0xaf, 0x5a, 0xd6, 0xda, 0x98, 0x6a, 0x7d, 0x9c, 0x6c, 0xe5, 0x6a, 0xfc, 0x0f, 0xeb, 0xca, 0xc7, 0x33, 0x39, 0xf7, 0x3a, 0x28, 0xab, 0xef, 0xaf, 0xf5, 0xfe, 0x04, 0x7d, 0xa7, 0xdb, 0xd5, 0x19, 0xe9, 0x11, 0x7c, 0x81, 0xd5, 0x23, 0x09, 0xda, 0x0a, 0x02, 0x30, 0x57, 0xff, 0x1b, 0x3e, 0x5e, 0x97, 0x94, 0x51, 0xe6, 0xf5, 0xd3, 0xc9, 0x24, 0x91, 0x41, 0xfa, 0x66, 0x8b, 0x4d, 0x23, 0x3f, 0x40, 0xb3, 0xa4, 0xe4, 0x1c, 0xfe, 0x6b, 0xd6, 0xaf, 0x4b, 0xb0, 0xc1, 0x02, 0x51, 0xe2, 0xa4, 0x2b, 0x9e, 0xe1, 0x33, 0x1f, 0x23, 0x6d, 0x7a, 0xc8, 0xf3, 0xdf, 0xc2, 0x57, 0x48, 0x16, 0xb8, 0xdc, 0xc7, 0xb5, 0xcc, 0x13, 0x05, 0x8c, 0xd8, 0x81, 0x49, 0x53, 0x02, 0xc0, 0x94, 0x9e, 0xe3, 0x18, 0xde, 0x0d, 0xe9, 0x4f, 0xa3, 0xc3, 0xf9, 0xc1, 0x9e, 0x1a, 0x59, 0xb3, 0xd5, 0x95, 0xce, 0xe4, 0xd5, 0x17, 0x01, 0x65, 0x3f, 0x52, 0x27, 0xab, 0x83, 0x81, 0xe1, 0xe3, 0xec, 0x5a, 0x61, 0x85, 0xdd, 0x3e, 0xcf, 0x2c, 0x5a, 0xb4, 0xeb, 0xa5, 0xc9, 0x15, 0xf3, 0x45, 0xfa, 0x89, 0xc7, 0x80, 0x66, 0x31, 0x4b, 0xb8, 0xb4, 0xa6, 0x0d, 0x53, 0x82, 0xa3, 0x28, 0x10, 0x61, 0xfe, 0x68, 0x9b, 0x21, 0xdd, 0xae, 0x5f, 0x50, 0x26, 0x96, 0x9b, 0xfd, 0x37, 0x58, 0xb8, 0xc1, 0xd8, 0xec, 0xda, 0x01, 0x6d, 0x72, 0xb5, 0x6d, 0x71, 0xd0, 0xa2, 0xcc, 0x1f, 0x9d, 0xf1, 0xfc, 0x72, 0x3e, 0x81, 0x34, 0x50, 0x4e, 0x8f, 0x8d, 0x02, 0x44, 0xcc, 0xc1, 0xe8, 0x4f, 0xb2, 0x32, 0x6b, 0x85, 0x17, 0x2e, 0x32, 0x3d, 0x03, 0x71, 0x99, 0xb9, 0xbf, 0xeb, 0x5f, 0x09, 0x2e, 0xc4, 0x9e, 0x2b, 0x60, 0x9e, 0x01, 0x77, 0x65, 0x1a, 0x31, 0x3b, 0x5f, 0x9d, 0x90, 0xa2, 0xdb, 0x54, 0x2a, 0xda, 0x62, 0x75, 0xe9, 0x75, 0x4a, 0xc8, 0x08, 0x10, 0xd2, 0x67, 0xc9, 0x33, 0x6f, 0xc2, 0x6b, 0x79, 0x60, 0xe5, 0x56, 0xf1, 0x88, 0xfe, 0x9a, 0xc3, 0x7d, 0x19, 0x97, 0x17, 0xdd, 0x2f, 0xfd, 0x32, 0xe1, 0x5f, 0xf8, 0xe2, 0x34, 0x7b, 0xa4, 0x1d, 0x05, 0xc6, 0xc7, 0xe5, 0x5b, 0xfc, 0xbf, 0x6e, 0xa8, 0x93, 0xb9, 0x83, 0xa2, 0x41, 0x24, 0x26, 0x4e, 0xbe, 0x66, 0x77, 0x5d, 0xcb, 0xcd, 0xd7, 0xbc, 0x73, 0xc8, 0x4c, 0x67, 0x91, 0x57, 0x27, 0x7e, 0x92, 0xc0, 0xe5, 0x9a, 0x7c, 0x84, 0x54, 0x61, 0x2f, 0x91, 0xf7, 0x58, 0xec, 0xb9, 0xaa, 0xf9, 0x13, 0x63, 0x89, 0x06, 0x31, 0x80, 0x0f, 0x1c, 0x39, 0xc1, 0x7b, 0x8b, 0x12, 0x07, 0x78, 0x65, 0x52, 0x1c, 0xfc, 0xd5, 0x4a, 0xa0, 0x71, 0xb2, 0x42, 0x46, 0x13, 0x54, 0x05, 0x40, 0x99, 0xa7, 0xa1, 0xf7, 0x17, 0x7d, 0x68, 0x00, 0x23, 0x29, 0x3a, 0x4b, 0x37, 0x49, 0x07, 0x9e, 0x56, 0xe3, 0x8f, 0x42, 0xf2, 0xb4, 0x6c, 0xfd, 0x0e, 0xc4, 0x53, 0x40, 0xa0, 0x3e, 0x97, 0xa0, 0x39, 0x7f, 0xee, 0x8a, 0xe7, 0x6d, 0x78, 0x33, 0x5b, 0x0a, 0xfd, 0xcf, 0x47, 0x49, 0x77, 0x03, 0x0a, 0x20, 0xd0, 0x9c, 0x8f, 0xde, 0xec, 0x81, 0x72, 0xbf, 0xea, 0xe6, 0x65, 0xbd, 0xa7, 0xc3, 0xd3, 0xaa, 0x84, 0x85, 0xc3, 0x7c, 0x6a, 0x03, 0xfe, 0xe8, 0x0b, 0xb3, 0x74, 0x32, 0x6a, 0x1e, 0xdc, 0x43, 0x9d, 0x91, 0x9b, 0xfc, 0xd1, 0x16, 0xe7, 0xca, 0x90, 0xa2, 0x2c, 0x7a, 0x3f, 0x90, 0xae, 0x4f, 0xeb, 0x4e, 0x71, 0x52, 0x45, 0x57, 0x56, 0xea, 0xea, 0x61, 0x86, 0xac, 0xe8, 0xd7, 0x13, 0x74, 0x7e, 0x89, 0xdd, 0xb5, 0x24, 0xa3, 0xb3, 0x0d, 0xcb, 0xdb, 0xbb, 0x1d, 0x66, 0xef, 0x14, 0x97, 0xa9, 0x4f, 0xb9, 0x98, 0x11, 0x16, 0xa9, 0x39, 0x24, 0x3f, 0x45, 0x61, 0xfa, 0x16, 0xf9, 0xdd, 0xfc, 0xec, 0x1e, 0xb2, 0xec, 0x0f, 0x1f, 0xb1, 0x26, 0xfa, 0xdb, 0x4d, 0x25, 0xc8, 0x4b, 0xaa, 0x48, 0xef, 0x65, 0xf6, 0xd6, 0x2a, 0x40, 0xfc, 0x41, 0xb7, 0x78, 0xf6, 0xa7, 0xc3, 0xd4, 0xa3, 0x9e, 0x23, 0x26, 0x9a, 0x31, 0x44, 0x73, 0xde, 0x26, 0x65, 0x54, 0xb2, 0x83, 0x03, 0x9c, 0xaf, 0x50, 0x95, 0x3b, 0x13, 0x9d, 0x7a, 0x63, 0x5c, 0xc7, 0x30, 0xe9, 0x16, 0xf8, 0xc6, 0xed, 0xf1, 0xed, 0x94, 0xbd, 0x16, 0xfc, 0x29, 0xf7, 0xbb, 0x55, 0x85, 0xee, 0xf5, 0x88, 0x89, 0x4f, 0xce, 0x47, 0xab, 0x05, 0x98, 0x6d, 0xee, 0x59, 0x81, 0x40, 0x12, 0x5e, 0x67, 0xf3, 0x07, 0x8c, 0xed, 0x70, 0xa8, 0xab, 0xce, 0x54, 0xa6, 0xf3, 0x71, 0x3a, 0xc2, 0x71, 0xbe, 0x3c, 0x40, 0xac, 0x31, 0xb7, 0x98, 0x89, 0x2c, 0x4f, 0x6e, 0x6c, 0x92, 0x33, 0xc4, 0xa0, 0x91, 0xa2, 0x6f, 0xf9, 0xbf, 0xaf, 0xc7, 0xb7, 0x69, 0x41, 0xa3, 0xae, 0x27, 0x5d, 0x85, 0xa4, 0xb4, 0xa8, 0x11, 0xfb, 0xfd, 0x27, 0xc4, 0x90, 0x78, 0x4a, 0xe2, 0xe2, 0xb7, 0x29, 0xb0, 0x77, 0x3d, 0x0d, 0xe4, 0x7b, 0x90, 0x32, 0x5a, 0xab, 0x90, 0xcb, 0x08, 0x71, 0x06, 0x47, 0x34, 0x50, 0x80, 0xd3, 0xe4, 0x83, 0x5d, 0x20, 0x97, 0xe1, 0x24, 0x66, 0x32, 0x04, 0x1a, 0xa9, 0x3d, 0xaa, 0x13, 0x3b, 0x4f, 0x5b, 0x88, 0x82, 0xc7, 0x4d, 0xea, 0xfb, 0xbd, 0x84, 0x36, 0x7f, 0x39, 0x3d, 0xca, 0xc5, 0xa2, 0x8d, 0x77, 0x29, 0x79, 0x46, 0xd7, 0xab, 0x47, 0x1a, 0xe0, 0x3b, 0xd3, 0x03, 0xba, 0x34, 0x99, 0xe2, 0xce, 0x26, 0x78, 0x66, 0x20, 0xd8, 0xab, 0x2f, 0xde, 0x8d, 0xfa, 0x33, 0x39, 0x87, 0x31, 0x61, 0x73, 0xca, 0xd2, 0x85, 0x39, 0x22, 0x07, 0x6c, 0x34, 0x67, 0xda, 0x48, 0xdb, 0x00, 0xa8, 0x55, 0x8b, 0xa6, 0xd3, 0xbd, 0xd9, 0x6a, 0xb8, 0xba, 0x27, 0xfa, 0xe1, 0xfa, 0x75, 0x20, 0x7b, 0x47, 0x7a, 0x8b, 0x0a, 0x67, 0xf3, 0xd2, 0x5b, 0x41, 0x3c, 0xb6, 0xba, 0x42, 0x1d, 0xa8, 0x66, 0xff, 0xe6, 0x8b, 0x42, 0x1c, 0xbe, 0xba, 0xcd, 0x6c, 0x38, 0x4d, 0x54, 0x59, 0x27, 0x98, 0x67, 0x87, 0xb4, 0xf5, 0x89, 0xb4, 0xad, 0xc4, 0x2b, 0xe3, 0x20, 0xaf, 0xdc, 0xb9, 0x29, 0x33, 0xba, 0x27, 0x08, 0x5b, 0x2c, 0x49, 0x76, 0xcf, 0xd3, 0x8e, 0x3a, 0x0e, 0xbd, 0x1a, 0xf7, 0xf8, 0xdc, 0x68, 0x48, 0x8f, 0xb7, 0x34, 0x0e, 0xfe, 0x60, 0x98, 0x09, 0xdb, 0xa6, 0x75, 0xa6, 0xa9, 0x8b, 0x14, 0x18, 0xa1, 0xf9, 0x0d, 0xaa, 0xb2, 0xb0, 0x68, 0x54, 0xc6, 0x83, 0x03, 0x8c, 0x47, 0xc4, 0x33, 0x5e, 0xe1, 0xfd, 0xae, 0xbf, 0x8a, 0xe0, 0xa9, 0x1f, 0xc0, 0x81, 0x3d, 0x3d, 0x12, 0xc3, 0x0f, 0x3f, 0xe2, 0x10, 0x30, 0x02, 0x69, 0x4e, 0x42, 0xaf, 0xfc, 0x0e, 0xdd, 0x8f, 0x8d, 0x06, 0x31, 0x20, 0x74, 0xc1, 0xec, 0x68, 0x70, 0x95, 0x5e, 0x89, 0xe8, 0xd6, 0xda, 0x96, 0x77, 0x49, 0x60, 0xa5, 0xa8, 0xdb, 0x7a, 0x25, 0xfe, 0x93, 0x64, 0x72, 0x38, 0xc6, 0x6f, 0xa7, 0xd2, 0x8a, 0xa7, 0xb4, 0xcf, 0x6c, 0xb4, 0xb0, 0xb6, 0x66, 0xfe, 0x70, 0xdb, 0x0b, 0x15, 0x58, 0xdf, 0x05, 0x4f, 0x71, 0x7a, 0xc1, 0xb3, 0xbc, 0x78, 0x69, 0x15, 0xc6, 0x02, 0x13, 0x83, 0x7d, 0x1f, 0x38, 0xe0, 0x42, 0x7b, 0x67, 0xcf, 0x3f, 0x66, 0x3a, 0xd3, 0xfb, 0x1f, 0x8a, 0xb4, 0x2b, 0x53, 0xdf, 0x24, 0xcc, 0xe1, 0x2a, 0xa2, 0x6e, 0xe0, 0xb7, 0x9f, 0xd3, 0xe3, 0x5d, 0xdf, 0xb8, 0x7b, 0xf8, 0x23, 0xf3, 0xfe, 0x19, 0x05, 0xbe, 0x87, 0xfb, 0x23, 0x53, 0x3e, 0xb9, 0x7f, 0xb9, 0xda, 0xbf, 0x26, 0xdd, 0x64, 0x7e, 0x10, 0xe4, 0x3d, 0x65, 0x48, 0xc0, 0x62, 0x0c, 0x4c, 0x01, 0xef, 0xb2, 0xb7, 0xee, 0xe2, 0xe9, 0x1d, 0xd5, 0x22, 0x90, 0x37, 0x9f, 0xc0, 0x02, 0x40, 0xa7, 0x7c, 0x8d, 0x9e, 0xcd, 0x8b, 0x26, 0xc5, 0xc6, 0x97, 0x5a, 0x59, 0xb6, 0x08, 0x88, 0x92, 0x00, 0x82, 0x4e, 0xe5, 0x5c, 0xae, 0x41, 0xe1, 0x2b, 0x3e, 0xe1, 0x57, 0x08, 0x2b, 0xcc, 0xbd, 0xa0, 0x41, 0x31, 0xd4, 0xc3, 0xde, 0x88, 0x89, 0xbb, 0xf7, 0x80, 0x19, 0xdc, 0x5b, 0x39, 0x79, 0x5c, 0x3c, 0xb4, 0xf5, 0x65, 0xeb, 0x88, 0x17, 0x69, 0xe3, 0xd6, 0xca, 0xb6, 0x09, 0x7e, 0xbf, 0x4a, 0x32, 0x93, 0x10, 0xe8, 0xe6, 0x0d, 0x24, 0x6b, 0x64, 0xbe, 0xd2, 0x5b, 0xe5, 0x88, 0xc9, 0xbe, 0x25, 0xcc, 0x2f, 0x30, 0x20, 0x25, 0x88, 0x36, 0x19, 0x57, 0xda, 0xd0, 0xe1, 0x82, 0x0e, 0x4d, 0x56, 0x9c, 0x9a, 0x63, 0x2a, 0x1d, 0x5d, 0x7f, 0xe6, 0xfc, 0xca, 0x5a, 0x2e, 0xdb, 0x49, 0xcd, 0x46, 0x7f, 0xda, 0xe6, 0xd5, 0x82, 0xfc, 0x3b, 0xe9, 0x4c, 0xcd, 0x7e, 0x3c, 0x3f, 0x72, 0x52, 0xb6, 0x32, 0xb9, 0x5d, 0x32, 0x21, 0xfd, 0x9f, 0x85, 0x22, 0x4b, 0x02, 0xbc, 0x9b, 0xc2, 0x32, 0xa6, 0xb3, 0x40, 0xae, 0x93, 0x06, 0x3b, 0x20, 0x5a, 0x9d, 0xec, 0xea, 0xa1, 0x1d, 0xb3, 0x01, 0x58, 0x3e, 0xb7, 0xfe, 0x87, 0x7f, 0xcd, 0x72, 0x4a, 0x19, 0x9b, 0x7a, 0x19, 0x31, 0xfd, 0x94, 0x4d, 0x51, 0xa7, 0xb1, 0xe0, 0x19, 0x0c, 0x8c, 0x75, 0x32, 0x7f, 0x39, 0x98, 0x84, 0x98, 0x01, 0x46, 0xa9, 0xda, 0x6d, 0xb0, 0xa1, 0x92, 0xa1, 0x3c, 0xc7, 0x02, 0xeb, 0xcd, 0x03, 0xbf, 0x9c, 0x44, 0x42, 0x58, 0x17, 0x47, 0x23, 0x38, 0x27, 0x41, 0xf3, 0xce, 0x96, 0xa9, 0xdc, 0xeb, 0xfb, 0x88, 0x59, 0x6b, 0xd3, 0x35, 0xed, 0x17, 0xd3, 0x63, 0x15, 0xca, 0x7d, 0x5e, 0x7b, 0xd3, 0xf2, 0x92, 0x6c, 0x9b, 0x07, 0x4d, 0x8c, 0x88, 0x9a, 0xc6, 0xc9, 0x20, 0x27, 0x5d, 0x8d, 0x72, 0x96, 0x24, 0x38, 0xb1, 0x57, 0x9f, 0xcd, 0x23, 0xb1, 0xc8, 0xeb, 0x39, 0x57, 0x56, 0x00, 0x00, 0x3d, 0x3f, 0xb9, 0xb8, 0xa9, 0x7c, 0xbd, 0xc1, 0x8d, 0x0c, 0x9a, 0xbf, 0x14, 0x3b, 0xff, 0xf6, 0x7b, 0x24, 0x2d, 0xf6, 0x22, 0x75, 0xa8, 0x7d, 0xe3, 0x72, 0x32, 0x99, 0xa2, 0x3d, 0xf9, 0x0d, 0x25, 0x54, 0x10, 0xf6, 0x26, 0x5b, 0x1c, 0xae, 0xa7, 0x1c, 0x50, 0xf1, 0x86, 0xcc, 0x9b, 0x3e, 0x51, 0x8f, 0x1f, 0x80, 0x5b, 0x3f, 0xe6, 0xee, 0x10, 0x69, 0xd0, 0x30, 0x85, 0x99, 0xd0, 0xc3, 0x54, 0xd8, 0x58, 0x9e, 0xa6, 0x72, 0x12, 0x16, 0x91, 0xfd, 0xd1, 0xff, 0xa5, 0x96, 0xc7, 0x14, 0xc1, 0x6e, 0xf8, 0x99, 0x2b, 0x86, 0xee, 0x3e, 0xe0, 0xb6, 0xaf, 0x47, 0x29, 0xf4, 0xec, 0xea, 0x6f, 0xd3, 0x7b, 0xf8, 0x50, 0x4a, 0x08, 0xc0, 0xf3, 0xb7, 0x07, 0x31, 0x98, 0x23, 0xec, 0x3e, 0x73, 0xc8, 0x9f, 0x87, 0xba, 0xd0, 0x2a, 0x35, 0xfd, 0x60, 0xb5, 0x25, 0xb6, 0xd5, 0xb5, 0x4a, 0x21, 0x4e, 0x60, 0x4c, 0x4d, 0x6a, 0x64, 0x75, 0x73, 0x53, 0xd8, 0xce, 0x88, 0xfb, 0x73, 0x85, 0x0e, 0xa5, 0xfc, 0x92, 0x2f, 0xa8, 0x01, 0x9a, 0x0c, 0x6f, 0xcc, 0x14, 0x53, 0xc5, 0x93, 0xaa, 0x0f, 0x4f, 0xef, 0xe2, 0xc5, 0x5a, 0x8f, 0xfd, 0xbc, 0xd8, 0x2e, 0x20, 0x9c, 0xa4, 0xc2, 0xb1, 0x3b, 0x0e, 0xf7, 0x04, 0xb3, 0x93, 0xdb, 0x37, 0xb8, 0xec, 0xdb, 0x5a, 0x28, 0x4b, 0xee, 0xd3, 0xe4, 0xe1, 0x10, 0x01, 0xdf, 0xa3, 0xf2, 0x20, 0x74, 0x4e, 0xf0, 0x6d, 0xfd, 0xa8, 0x43, 0x8a, 0xa1, 0x09, 0x78, 0x23, 0x6d, 0x1b, 0x20, 0xd2, 0xa6, 0xde, 0xca, 0x40, 0x5e, 0xef, 0x2e, 0x8e, 0x46, 0x09, 0xab, 0xf3, 0xc3, 0xcc, 0xf4, 0xa6, 0x44, 0xbd, 0x06, 0xfe, 0xd2, 0x8f, 0x5d, 0xd7, 0xe9, 0xa1, 0x67, 0x39, 0x86, 0xc7, 0x39, 0x34, 0x81, 0x4d, 0x81, 0x0e, 0x1d, 0x39, 0xbb, 0xa1, 0xde, 0xd1, 0xa8, 0xfe, 0x9a, 0x5d, 0xfc, 0x56, 0xd3, 0x2e, 0x57, 0x1b, 0x44, 0xdf, 0x77, 0x62, 0xba, 0xdb, 0xac, 0x8c, 0x25, 0x1f, 0x8c, 0x25, 0xef, 0x42, 0xe7, 0x0c, 0x8c, 0xb2, 0xfe, 0xd4, 0x53, 0x40, 0xef, 0x6b, 0x8c, 0xdf, 0x74, 0xf9, 0xca, 0xa8, 0xcd, 0x0b, 0x7b, 0x22, 0xfb, 0xf1, 0xbd, 0xc1, 0x2f, 0x64, 0x73, 0xac, 0x82, 0x6d, 0x98, 0xc3, 0xe6, 0x82, 0xd4, 0xe1, 0x5d, 0xf1, 0x4d, 0x5e, 0x69, 0x82, 0xc0, 0xd9, 0xc3, 0x57, 0xd0, 0x34, 0x4f, 0x18, 0x9e, 0xdf, 0x50, 0x4d, 0x99, 0x5a, 0xd9, 0x0b, 0x98, 0xf5, 0x84, 0xd3, 0x26, 0xdb, 0x65, 0xb7, 0x1c, 0x4e, 0x41, 0xbe, 0x76, 0x34, 0xfc, 0x8a, 0x5f, 0xd3, 0x51, 0x38, 0x8e, 0xd9, 0xc6, 0x88, 0xd5, 0x9f, 0xde, 0x3e, 0xf7, 0xae, 0x90, 0xc8, 0xbb, 0x83, 0xf8, 0x20, 0x3e, 0x8f, 0x4d, 0xf4, 0x8d, 0x82, 0x13, 0x05, 0x73, 0xc9, 0x91, 0xcd, 0x90, 0x55, 0x86, 0x64, 0xab, 0x9f, 0x18, 0xa4, 0x4a, 0xe9, 0x0d, 0x8c, 0x7f, 0xc6, 0x3d, 0xe2, 0x04, 0xdc, 0x47, 0x1c, 0x8a, 0xe9, 0x84, 0x81, 0x4f, 0x04, 0x39, 0x8c, 0xef, 0x26, 0x11, 0x91, 0x7c, 0xe8, 0xca, 0xa2, 0xd0, 0x8e, 0x2e, 0xb4, 0x22, 0x45, 0x45, 0xfe, 0xd8, 0xa9, 0xc9, 0xa2, 0x9c, 0x8a, 0xda, 0x8f, 0xb2, 0xf0, 0xf3, 0xa6, 0x89, 0x5c, 0x1d, 0x1c, 0x90, 0x51, 0x62, 0x1f, 0x4a, 0x13, 0x85, 0xbc, 0xa5, 0xaf, 0xf0, 0x00, 0x88, 0x3b, 0xee, 0x5d, 0xab, 0x5f, 0x1a, 0x50, 0xab, 0x15, 0x18, 0x41, 0x5e, 0xac, 0x82, 0xab, 0x64, 0x13, 0x25, 0x7c, 0xfe, 0x54, 0x6e, 0xbf, 0x23, 0x5f, 0x1f, 0x78, 0xd1, 0x09, 0x46, 0xcf, 0xa2, 0x54, 0x70, 0x71, 0x9f, 0xf1, 0x1a, 0x34, 0x58, 0x03, 0x68, 0xfa, 0x35, 0x26, 0x1a, 0xd7, 0x07, 0xb0, 0xbb, 0x76, 0xe2, 0x37, 0x1b, 0xb8, 0x2f, 0x53, 0x00, 0x9f, 0xfd, 0xa4, 0x19, 0x6b, 0x98, 0x17, 0x33, 0x02, 0x5d, 0x66, 0xaf, 0x95, 0xcc, 0xde, 0x34, 0x81, 0xdf, 0x65, 0xa1, 0x73, 0x9a, 0xbb, 0x46, 0xd0, 0xe4, 0x00, 0x53, 0x54, 0x95, 0x77, 0x90, 0xf9, 0xd0, 0x89, 0x4f, 0x1a, 0x93, 0x0d, 0xa0, 0xd8, 0x8c, 0xc6, 0xc3, 0xbd, 0x2f, 0x2d, 0xe3, 0x9f, 0x05, 0x71, 0x01, 0xc7, 0x47, 0xbd, 0x2e, 0x53, 0xab, 0xb9, 0xfd, 0xd9, 0x7e, 0x53, 0x38, 0x4d, 0xf3, 0xbf, 0xd2, 0x25, 0xbb, 0xbc, 0x1d, 0xba, 0xd5, 0x1a, 0x3d, 0xf2, 0xa8, 0x79, 0xdd, 0x1c, 0x4f, 0x53, 0x20, 0x1b, 0x34, 0x3d, 0xda, 0xc7, 0xe0, 0x69, 0x01, 0x90, 0x11, 0x70, 0x5e, 0x65, 0x0d, 0x4e, 0x88, 0xd4, 0x37, 0xae, 0x13, 0x72, 0xe0, 0x69, 0x05, 0x7d, 0x5f, 0x49, 0x89, 0xc0, 0x64, 0x12, 0xe8, 0xb7, 0x89, 0xc3, 0xb4, 0xf4, 0x2a, 0x19, 0x47, 0xc1, 0x77, 0x55, 0x6c, 0x07, 0xc7, 0x3f, 0x5b, 0x6e, 0x30, 0x6b, 0xeb, 0xc6, 0x54, 0xbb, 0x03, 0xa6, 0x7d, 0x25, 0x51, 0x52, 0xed, 0xb6, 0x3f, 0xe2, 0x6f, 0xd7, 0x23, 0xa1, 0x32, 0xd0, 0xb6, 0xb4, 0xd7, 0x8a, 0xc8, 0xfc, 0xc9, 0x99, 0x32, 0x3d, 0xcd, 0x79, 0x0b, 0x7f, 0xda, 0x18, 0x1f, 0xb4, 0x2a, 0x95, 0x9c, 0x9c, 0x91, 0x48, 0x0f, 0xe6, 0x0e, 0x02, 0x8f, 0x98, 0xa0, 0x96, 0x38, 0xb0, 0x5a, 0x98, 0xdc, 0x0b, 0xba, 0x64, 0xf4, 0x87, 0x37, 0x62, 0xdd, 0x65, 0x19, 0x89, 0x41, 0xf1, 0x8d, 0x22, 0xd3, 0x64, 0xf9, 0xcf, 0x3f, 0x09, 0x8d, 0xcb, 0x60, 0x9f, 0x1b, 0x73, 0xb4, 0xff, 0x28, 0x06, 0x0e, 0xfe, 0x43, 0xa9, 0x8b, 0x95, 0x95, 0xae, 0xc7, 0x3f, 0xba, 0x15, 0x51, 0xa3, 0xcf, 0x53, 0x5c, 0x73, 0xcc, 0x53, 0xb7, 0x94, 0x14, 0xbb, 0xff, 0x7f, 0x4b, 0x70, 0x13, 0xe7, 0x68, 0x5c, 0xc8, 0x9c, 0x0b, 0x6f, 0xde, 0xaf, 0x10, 0xe3, 0x33, 0xd7, 0x64, 0xc5, 0x37, 0x13, 0x17, 0xb1, 0xa0, 0x91, 0xb3, 0xdd, 0x5f, 0xcf, 0xcd, 0x58, 0xd2, 0x00, 0xd9, 0x94, 0x3b, 0xb1, 0x43, 0x23, 0x71, 0xac, 0xbb, 0xbe, 0xd5, 0x1c, 0xd0, 0x8b, 0x88, 0xf3, 0xc0, 0xa0, 0xdb, 0x89, 0x8e, 0xc3, 0x07, 0x85, 0x56, 0x73, 0x1f, 0x01, 0xde, 0x2d, 0x42, 0xe9, 0x6d, 0xe8, 0x15, 0xa4, 0xe0, 0xe2, 0x70, 0xf7, 0xfa, 0x9e, 0x58, 0x26, 0xfc, 0x2d, 0x2e, 0x5c, 0x75, 0xae, 0x25, 0x4c, 0x5c, 0x11, 0xfa, 0x19, 0x5c, 0x20, 0xdf, 0x73, 0x6f, 0xbf, 0xb8, 0x04, 0xae, 0x72, 0x89, 0x0a, 0x68, 0x21, 0x2f, 0x45, 0x71, 0x18, 0x4f, 0x13, 0xbc, 0x52, 0x8d, 0xda, 0x2c, 0xf7, 0xfe, 0xa6, 0xa8, 0x23, 0xdf, 0x13, 0x6e, 0xe9, 0x87, 0x6e, 0xa9, 0x98, 0x9a, 0x17, 0x45, 0x3c, 0x80, 0x29, 0x02, 0x68, 0x15, 0x5d, 0xc7, 0x33, 0xa2, 0x2c, 0x3a, 0x81, 0x0d, 0x34, 0x8d, 0x84, 0x4c, 0xdd, 0x9a, 0x82, 0x1f, 0x3c, 0x33, 0xd8, 0xff, 0x38, 0xb3, 0x3f, 0x51, 0xeb, 0xd9, 0x4e, 0xe0, 0x4b, 0xd7, 0x40, 0x8a, 0x09, 0xa5, 0xf8, 0x3a, 0xb9, 0x9b, 0x42, 0x16, 0x34, 0x3f, 0x5c, 0xf9, 0x3a, 0x5c, 0xb5, 0x23, 0x5c, 0x54, 0xf4, 0x2f, 0x19, 0xb6, 0x3c, 0x46, 0x48, 0x13, 0xae, 0x93, 0xb6, 0x0e, 0x30, 0xf6, 0x0f, 0xb3, 0x6d, 0xfd, 0x02, 0x0a, 0x1d, 0x10, 0xa0, 0xeb, 0x87, 0xeb, 0x05, 0x13, 0x44, 0x52, 0x3b, 0x78, 0x45, 0xff, 0x5b, 0xda, 0x18, 0xe0, 0xf5, 0x9b, 0x66, 0x7f, 0xb2, 0xd0, 0xc1, 0xc2, 0x38, 0x98, 0x9c, 0xd4, 0x4e, 0xad, 0x9b, 0x63, 0x41, 0x38, 0x0e, 0x0c, 0x86, 0xea, 0xb8, 0x13, 0xa0, 0x48, 0xd4, 0x58, 0x45, 0x46, 0x5a, 0x86, 0xbc, 0x18, 0x7e, 0x8e, 0x89, 0x45, 0x79, 0x54, 0x4c, 0xfd, 0x8d, 0xa7, 0xe7, 0xac, 0x43, 0x77, 0xdf, 0xcf, 0xf8, 0x42, 0x05, 0x07, 0x97, 0xd0, 0x55, 0x6b, 0xa8, 0x20, 0x1e, 0x23, 0x8a, 0xa2, 0x63, 0x33, 0xfc, 0xa7, 0x81, 0x94, 0xe3, 0x15, 0x13, 0x89, 0x47, 0x5f, 0x13, 0x30, 0x9e, 0xb4, 0x42, 0x57, 0x4d, 0x77, 0xc9, 0x92, 0x6c, 0xf0, 0x20, 0x8a, 0xc9, 0x41, 0x2f, 0x98, 0x30, 0x9b, 0xb3, 0x93, 0xea, 0xb1, 0xe4, 0xe6, 0x84, 0x6d, 0x55, 0xe5, 0xd2, 0xe2, 0x1b, 0x61, 0x32, 0x83, 0x31, 0x79, 0x15, 0x92, 0x1b, 0xb4, 0xbc, 0xdb, 0xca, 0x4d, 0x40, 0xa1, 0xc0, 0xce, 0xd5, 0xd9, 0x74, 0xe0, 0x4f, 0x96, 0xf8, 0x62, 0xe6, 0xc5, 0xd9, 0xb8, 0x36, 0x1a, 0x47, 0x66, 0x8a, 0x4a, 0x75, 0xdd, 0x59, 0x7b, 0x43, 0x94, 0x11, 0xf8, 0x1b, 0x5b, 0x14, 0x2a, 0x18, 0xed, 0x00, 0xc4, 0x6e, 0xc4, 0x34, 0x3d, 0x06, 0x31, 0x90, 0x83, 0x68, 0xab, 0x7b, 0xee, 0xde, 0x68, 0x2b, 0x72, 0xd6, 0x2a, 0x21, 0x1a, 0x89, 0x5c, 0xf2, 0xb1, 0xda, 0x5d, 0x4d, 0xc2, 0x81, 0x1c, 0x3a, 0xc4, 0x68, 0xe5, 0xa0, 0x8e, 0x55, 0x7a, 0x0a, 0x11, 0xca, 0x66, 0xaa, 0x45, 0x2a, 0x8e, 0x9f, 0x64, 0x1c, 0x09, 0x73, 0x57, 0x34, 0x31, 0xe8, 0x6d, 0xd1, 0xfa, 0xf4, 0x53, 0x41, 0x83, 0x0a, 0x41, 0x2c, 0xeb, 0x9b, 0x71, 0x2f, 0x66, 0xdd, 0xd5, 0xc7, 0x90, 0xcb, 0x09, 0x71, 0x01, 0x6d, 0x87, 0x0f, 0x21, 0x59, 0x1a, 0x8e, 0x3d, 0x7a, 0x95, 0xc6, 0xdb, 0x10, 0xc4, 0xa1, 0x4b, 0xf8, 0xa3, 0x80, 0x7f, 0x2e, 0xce, 0xda, 0x1d, 0x90, 0x39, 0x26, 0xd1, 0xe4, 0x21, 0xfc, 0xe8, 0x1d, 0x42, 0x77, 0x1b, 0xda, 0x4b, 0xdd, 0xa8, 0x30, 0x8f, 0x82, 0xa8, 0xa9, 0xfd, 0xe9, 0x9c, 0x8c, 0x52, 0x2d, 0x49, 0x5f, 0x8d, 0x9f, 0xc6, 0xab, 0xa3, 0xb1, 0xd3, 0xff, 0x75, 0x13, 0x6c, 0x37, 0xff, 0x1b, 0x9e, 0xfe, 0xd2, 0x6a, 0x9a, 0x92, 0xc4, 0xcd, 0x08, 0xc8, 0xe6, 0x61, 0x9d, 0x4f, 0xb6, 0xfb, 0xf0, 0x38, 0x96, 0xc6, 0x89, 0xb6, 0x7d, 0x2e, 0x3b, 0x23, 0xed, 0xfd, 0xb5, 0x44, 0x25, 0xc4, 0x53, 0xce, 0x97, 0x7d, 0x3a, 0x29, 0x9c, 0x6e, 0xa3, 0x73, 0x67, 0x51, 0x77, 0xc8, 0x37, 0xb1, 0x1d, 0xc1, 0xd1, 0x97, 0x8f, 0x3a, 0x2e, 0x66, 0xb4, 0x59, 0x71, 0x04, 0xea, 0xcc, 0x1c, 0x3a, 0xe1, 0x51, 0x82, 0x5e, 0xb0, 0x7c, 0x80, 0x2f, 0x22, 0xb5, 0x68, 0x00, 0x51, 0x80, 0x3e, 0x19, 0x77, 0x01, 0x27, 0x5a, 0x00, 0xbf, 0x1e, 0x21, 0xe4, 0xa8, 0xe9, 0x6e, 0x33, 0x55, 0x4b, 0x45, 0xf2, 0x90, 0x7c, 0x54, 0x25, 0x13, 0xd6, 0xd6, 0x2d, 0x93, 0xd1, 0xb7, 0x54, 0xfd, 0x31, 0xf9, 0xa7, 0x00, 0x7e, 0x56, 0x04, 0xcb, 0xb5, 0x27, 0x73, 0x18, 0x3d, 0x84, 0xb9, 0x69, 0x1c, 0xad, 0x2b, 0x91, 0x6b, 0xa8, 0xc1, 0x77, 0x07, 0x2c, 0x6b, 0x17, 0x8a, 0xbe, 0xa8, 0xc9, 0x7a, 0x1a, 0x54, 0xc6, 0xc0, 0xd4, 0xc1, 0xe8, 0x5b, 0x3f, 0x0a, 0xb1, 0x55, 0x8e, 0xa4, 0x8f, 0xf6, 0x39, 0x36, 0x5e, 0x39, 0xa3, 0xab, 0x2f, 0x7c, 0xf9, 0x85, 0x48, 0x7b, 0x5d, 0x74, 0x6c, 0x7f, 0x44, 0x27, 0x5c, 0xd3, 0x1c, 0x62, 0x9d, 0x78, 0x33, 0x51, 0x7c, 0x19, 0xd4, 0x1c, 0x50, 0x41, 0xb3, 0xbb, 0xff, 0xcc, 0x8a, 0x0c, 0xc3, 0x9c, 0x05, 0x22, 0x2e, 0x8d, 0xdc, 0xe0, 0x6c, 0xaa, 0x3e, 0xc7, 0xc9, 0xa1, 0x76, 0x0d, 0x72, 0x74, 0xc9, 0xef, 0x80, 0x72, 0x9d, 0x48, 0x32, 0x66, 0xe1, 0x61, 0x7a, 0x0e, 0xa8, 0x0b, 0xbc, 0xce, 0x17, 0xeb, 0xd2, 0xa6, 0x82, 0x16, 0x53, 0x62, 0xd2, 0xde, 0x15, 0x10, 0x2a, 0xeb, 0xf0, 0xb7, 0xca, 0x8d, 0xc5, 0x46, 0x33, 0x50, 0xbf, 0xcb, 0x8b, 0xd1, 0xd9, 0xe5, 0x44, 0xd1, 0xa1, 0x7c, 0xf9, 0x88, 0x3b, 0xaf, 0x98, 0x3b, 0xa8, 0x0e, 0xc6, 0x11, 0x49, 0x0a, 0x7f, 0x23, 0x9e, 0xa9, 0xfd, 0xd2, 0x54, 0x7f, 0xdc, 0x5d, 0x7f, 0xd9, 0x7b, 0xb3, 0x24, 0x3b, 0xa5, 0x85, 0xfa, 0x0d, 0x71, 0xa0, 0x71, 0x91, 0x66, 0x7a, 0xf4, 0x18, 0xe3, 0x0a, 0x6b, 0x76, 0xbe, 0xdd, 0x05, 0xb3, 0x2c, 0x67, 0x34, 0x03, 0xe1, 0x97, 0xf9, 0xf8, 0x78, 0xae, 0x61, 0xf7, 0x14, 0x50, 0x50, 0xe9, 0x48, 0xdb, 0x7d, 0x32, 0x34, 0xf9, 0xbe, 0xe7, 0xf1, 0x71, 0x86, 0x3b, 0x30, 0x43, 0xab, 0x3b, 0x1d, 0xf3, 0x6d, 0xbc, 0x8a, 0x25, 0xb5, 0x91, 0x49, 0x6a, 0x9a, 0x01, 0xd9, 0x5a, 0x29, 0x78, 0x46, 0xe3, 0x66, 0x7c, 0x4a, 0xe0, 0x8e, 0xe3, 0xb8, 0xed, 0x9f, 0x43, 0x1a, 0x7a, 0x1a, 0xab, 0x99, 0x1f, 0x08, 0x90, 0x1e, 0x2f, 0x3b, 0x0a, 0xb7, 0x90, 0xd6, 0x41, 0x3c, 0xca, 0x10, 0x21, 0x32, 0x5d, 0x34, 0x56, 0xef, 0x58, 0xec, 0x74, 0xff, 0x27, 0xc0, 0x75, 0xc7, 0xad, 0xda, 0x69, 0x68, 0x93, 0x0c, 0x69, 0xe7, 0xdf, 0x14, 0xcd, 0x8a, 0xc8, 0x1e, 0x9f, 0x85, 0xc8, 0x8a, 0x4f, 0xd5, 0xf4, 0xf0, 0xa7, 0x6d, 0x89, 0x61, 0x02, 0x90, 0xc7, 0xf0, 0xb9, 0x7e, 0x02, 0x71, 0xdf, 0x52, 0xf6, 0x81, 0x2e, 0x2b, 0x5b, 0xc7, 0x40, 0x8a, 0xb9, 0x79, 0x03, 0xfb, 0x7e, 0x21, 0x67, 0xf8, 0x4e, 0xa1, 0x59, 0x0a, 0x9a, 0x74, 0xf5, 0x31, 0x74, 0x38, 0xf7, 0x86, 0xa1, 0x69, 0x73, 0x1f, 0xf0, 0x70, 0xc7, 0x33, 0xcb, 0xdc, 0xcd, 0x7e, 0x0c, 0xef, 0x55, 0xe7, 0x12, 0x5c, 0xd2, 0x61, 0x13, 0x4f, 0x53, 0x0f, 0xb3, 0xae, 0xb5, 0xab, 0xd6, 0x9e, 0x17, 0x28, 0xb3, 0x4a, 0x8f, 0x96, 0x2b, 0xe0, 0x1b, 0x47, 0x58, 0xdb, 0xdb, 0x30, 0x68, 0x88, 0x7d, 0x91, 0xac, 0xc3, 0xf8, 0xd9, 0xec, 0x02, 0x7d, 0xc4, 0xfe, 0x96, 0xaa, 0xc6, 0x96, 0x2d, 0x02, 0xac, 0x60, 0x9a, 0x9a, 0x81, 0x4c, 0xd9, 0x14, 0xae, 0x2a, 0x4d, 0xd1, 0x66, 0x76, 0x4d, 0x63, 0x41, 0x75, 0xdf, 0x41, 0x27, 0x81, 0xc3, 0xbf, 0x70, 0xa0, 0xb4, 0x3d, 0x49, 0x5c, 0xea, 0x9e, 0x5a, 0xcf, 0xe3, 0xfc, 0xa6, 0xfe, 0x63, 0x99, 0xb2, 0x68, 0xba, 0x19, 0xe9, 0xde, 0x45, 0xef, 0x3f, 0x94, 0x37, 0x16, 0x15, 0x79, 0x99, 0x01, 0x5c, 0xc4, 0x90, 0xd4, 0xfe, 0xcf, 0xdf, 0xd4, 0x79, 0x29, 0xac, 0x1c, 0xcd, 0xe7, 0x87, 0x93, 0x99, 0x3a, 0xa8, 0x1a, 0x81, 0x47, 0x78, 0x0a, 0xd2, 0x32, 0x54, 0xdd, 0x69, 0x7c, 0x8d, 0x2b, 0xd1, 0x90, 0xb3, 0xd9, 0xab, 0x98, 0x13, 0x8d, 0x53, 0x95, 0x7e, 0x64, 0xc0, 0xaf, 0x4c, 0xe8, 0xac, 0xc9, 0xa1, 0x3c, 0xf5, 0x59, 0xef, 0x9a, 0x44, 0x77, 0xbc, 0x00, 0xec, 0x34, 0xa6, 0x25, 0x15, 0x2c, 0xa4, 0xb2, 0x19, 0x5f, 0x8e, 0xaf, 0x2e, 0x3c, 0xe0, 0x3b, 0x46, 0xff, 0xbb, 0x81 ],
+const [ 0xfc, 0xee, 0x0a, 0x4b, 0x78, 0x17, 0xf8, 0x84, 0x02, 0x16, 0x63, 0x50, 0xbb, 0xda, 0x8a, 0xc2, 0xf4, 0xbe, 0x6e, 0xa3, 0xe6, 0x69, 0x2c, 0x72, 0xa3, 0xf2, 0x89, 0xa9, 0x4d, 0x48, 0xcf, 0x42, 0x86, 0xd2, 0xd8, 0x7a, 0x27, 0x52, 0x68, 0xd5, 0x35, 0x0f, 0xc0, 0x62, 0x11, 0x33, 0x6f, 0x40, 0xee, 0x72, 0x6c, 0x61, 0x88, 0xec, 0x62, 0x8e, 0x14, 0x55, 0x4b, 0xab, 0x72, 0x53, 0x40, 0x3d, 0xaa, 0x27, 0x8f, 0x29, 0x96, 0x90, 0x0f, 0xbe, 0xdc, 0xec, 0xb0, 0xf6, 0x20, 0xa1, 0x56, 0xf9, 0x77, 0xbb, 0xe8, 0xe3, 0x1e, 0xd7, 0xa3, 0xc7, 0x6c, 0x3f, 0xb5, 0xf4, 0x05, 0x56, 0x07, 0x77, 0x51, 0x37, 0x5a, 0xe1, 0x2c, 0x99, 0x95, 0x4a, 0xdf, 0xf6, 0x5d, 0x95, 0x4f, 0xec, 0xe7, 0xf6, 0x75, 0xe3, 0x0a, 0xb2, 0x0e, 0xf0, 0x99, 0x26, 0x94, 0xf9, 0xef, 0x0b, 0x6c, 0x1a, 0xcb, 0xf8, 0x61, 0x48, 0x5f, 0x28, 0x51, 0x34, 0xa3, 0x7e, 0x26, 0x72, 0xef, 0xc6, 0x08, 0xdb, 0xc9, 0x3e, 0xd2, 0x30, 0xfc, 0x55, 0xc2, 0x00, 0xea, 0xb2, 0x74, 0xcb, 0x22, 0x78, 0x11, 0x67, 0x35, 0xc9, 0xc4, 0xa3, 0xc6, 0x89, 0x6d, 0x2b, 0xe1, 0x64, 0x9a, 0xab, 0x8e, 0x12, 0xb3, 0x37, 0xa5, 0xd9, 0x74, 0xeb, 0xe3, 0x54, 0xa0, 0xce, 0x3e, 0x74, 0xf4, 0xfc, 0x76, 0xc4, 0x5a, 0x05, 0xed, 0xf1, 0x60, 0x90, 0xb8, 0x89, 0xe8, 0x44, 0xf6, 0x03, 0x21, 0xe8, 0x60, 0x00, 0xb6, 0xc8, 0x22, 0xd0, 0x45, 0x5b, 0xea, 0x38, 0x12, 0x24, 0x3e, 0x72, 0xfd, 0xd6, 0x12, 0x76, 0xb1, 0xbb, 0x9a, 0x78, 0x1f, 0x56, 0x5d, 0xb2, 0x2b, 0x48, 0x8b, 0x63, 0xa4, 0x70, 0x90, 0x18, 0x7a, 0x56, 0xe9, 0x2a, 0x2b, 0xca, 0x36, 0x88, 0x7f, 0xc8, 0x91, 0xb6, 0x75, 0x9f, 0x1f, 0x16, 0x7d, 0x52, 0xe4, 0x67, 0xe7, 0x3f, 0xdc, 0x8b, 0x9c, 0xfe, 0x47, 0x8d, 0x0c, 0x8c, 0x44, 0xe2, 0x67, 0xa9, 0xa1, 0xef, 0x10, 0x7e, 0xf2, 0xcc, 0x4f, 0x83, 0xe0, 0x48, 0x46, 0xa0, 0xc4, 0x2d, 0x26, 0x93, 0x75, 0xc5, 0xa2, 0x91, 0x5d, 0x9c, 0xa4, 0x30, 0xd3, 0x88, 0x3f, 0x84, 0xa5, 0xe7, 0xe6, 0x88, 0xf3, 0x28, 0xdb, 0xc0, 0x44, 0x8d, 0xe9, 0x1d, 0xd3, 0x2e, 0x56, 0x21, 0x2a, 0x42, 0x14, 0x43, 0xf2, 0x9a, 0x37, 0x95, 0x0a, 0x6e, 0xac, 0xa4, 0xd6, 0x5c, 0x27, 0xa0, 0xda, 0xae, 0x5d, 0xbd, 0x87, 0xdc, 0x74, 0xd8, 0x54, 0x51, 0xb7, 0x5e, 0x11, 0x72, 0x8f, 0x6a, 0x78, 0xdd, 0xae, 0x2d, 0x06, 0xee, 0x8e, 0x93, 0x09, 0x88, 0x1a, 0x23, 0xf9, 0x12, 0xab, 0x28, 0x0b, 0xbf, 0x35, 0x0e, 0x04, 0x13, 0xc3, 0x0e, 0x4b, 0xa3, 0x20, 0x0e, 0x43, 0x1c, 0xd7, 0xc2, 0xd7, 0x86, 0x5e, 0x18, 0x57, 0xca, 0x8f, 0xd3, 0x82, 0x72, 0x57, 0x75, 0xe4, 0xb1, 0xb2, 0x63, 0x62, 0xa3, 0xd7, 0x44, 0x13, 0xd5, 0xaf, 0xaa, 0x51, 0x08, 0x8c, 0xf4, 0x10, 0x32, 0x18, 0x73, 0x6f, 0xc6, 0x8c, 0xcb, 0x8d, 0x35, 0x22, 0x9c, 0x9e, 0xb5, 0xcc, 0x62, 0x3e, 0x41, 0x26, 0x9a, 0x04, 0xe1, 0xa9, 0x27, 0x5b, 0x2b, 0x22, 0xf3, 0x8d, 0x0a, 0x63, 0xd9, 0x21, 0xbe, 0x39, 0xc3, 0x67, 0x24, 0x9e, 0x0f, 0x51, 0x38, 0x2f, 0x38, 0x84, 0xd8, 0xe0, 0xb2, 0xaf, 0xcb, 0xee, 0x15, 0x1c, 0x01, 0x15, 0x7e, 0x85, 0x1c, 0x04, 0x32, 0x28, 0x30, 0x0e, 0x85, 0x1d, 0xc7, 0x22, 0xfb, 0xe8, 0x29, 0xfd, 0xac, 0x4b, 0xda, 0x9e, 0xed, 0x5e, 0x63, 0xfa, 0x2c, 0xe1, 0x55, 0xf2, 0x1c, 0xd0, 0x8c, 0x82, 0x13, 0x38, 0xb1, 0x3b, 0xb0, 0x4a, 0x02, 0xf3, 0xc0, 0xad, 0x56, 0xbb, 0x62, 0x19, 0x5b, 0x11, 0x6a, 0x22, 0x23, 0x57, 0x04, 0x51, 0xdf, 0x84, 0x9a, 0x79, 0xea, 0x1a, 0xf7, 0x48, 0x09, 0x58, 0xac, 0x1d, 0xf1, 0xb0, 0xb2, 0x19, 0x09, 0x7b, 0x52, 0x79, 0x72, 0xec, 0x42, 0x23, 0x45, 0x42, 0x11, 0x7e, 0x1b, 0x42, 0xc4, 0x87, 0xd3, 0xe5, 0xc2, 0x22, 0x8f, 0x4e, 0xed, 0xad, 0x00, 0xfe, 0x12, 0xdb, 0xe4, 0x4b, 0x83, 0xc0, 0xcc, 0x0e, 0x02, 0x28, 0x23, 0x9d, 0xe1, 0x2d, 0x6c, 0xf9, 0x68, 0x09, 0xcb, 0x48, 0x77, 0x28, 0xc7, 0x85, 0x6c, 0x82, 0x4e, 0x76, 0x47, 0x27, 0xf9, 0xde, 0x0d, 0x1b, 0x92, 0xf5, 0x6a, 0x65, 0xd4, 0x15, 0x99, 0x63, 0x71, 0xb6, 0x89, 0x60, 0x5a, 0x9c, 0x38, 0x68, 0x3a, 0x4f, 0x63, 0x5b, 0x43, 0xcc, 0x62, 0x41, 0x2e, 0x7a, 0x4e, 0xdd, 0x7d, 0x5f, 0x64, 0x85, 0x04, 0x94, 0xae, 0x31, 0xa7, 0xf6, 0xe0, 0xd1, 0x65, 0x1f, 0x80, 0xe4, 0x96, 0x95, 0x49, 0x46, 0x70, 0x40, 0xd2, 0x49, 0xd0, 0x22, 0x6b, 0x08, 0x38, 0x42, 0x47, 0xf8, 0x13, 0xe9, 0xe1, 0xc0, 0x41, 0x11, 0x98, 0x4b, 0xcf, 0x1b, 0x9c, 0x1b, 0x06, 0xc0, 0x0e, 0xe0, 0xa8, 0x4a, 0x63, 0x49, 0x76, 0x04, 0x0a, 0x1a, 0xf5, 0xef, 0x4e, 0x7f, 0x72, 0xb6, 0x7d, 0x9f, 0x44, 0xe4, 0x4a, 0x75, 0x51, 0x55, 0x70, 0xdb, 0xd4, 0xea, 0x98, 0xe8, 0x5d, 0x81, 0x7d, 0x7c, 0x19, 0x25, 0x4e, 0x19, 0x53, 0x81, 0x54, 0xf5, 0x3b, 0x9b, 0xd4, 0x4d, 0xe6, 0xbf, 0x37, 0xfb, 0x97, 0xb8, 0x68, 0x4b, 0x3d, 0x47, 0x7e, 0x0b, 0x3c, 0xcd, 0x9b, 0xe1, 0x70, 0x4b, 0x13, 0xe2, 0x6f, 0x8c, 0xd1, 0x5f, 0x0f, 0xa1, 0xf7, 0x02, 0x29, 0x8e, 0xc5, 0x1a, 0x9c, 0x43, 0xbc, 0x34, 0x94, 0xce, 0x03, 0xeb, 0x0c, 0xce, 0x09, 0x01, 0x91, 0x2b, 0x6c, 0xae, 0x49, 0x04, 0x1a, 0x37, 0x35, 0xe9, 0xb6, 0xc3, 0xb3, 0x4b, 0x3d, 0x6b, 0x47, 0x30, 0xe9, 0x90, 0x9a, 0x2b, 0x55, 0x71, 0xc3, 0x8c, 0xe3, 0xfc, 0xc6, 0xd4, 0x5b, 0xe5, 0x5a, 0x6c, 0xd4, 0xf6, 0xf0, 0x96, 0xd8, 0xa6, 0xf0, 0xa3, 0xc3, 0xec, 0x46, 0x67, 0x6c, 0x55, 0x1d, 0xea, 0x07, 0x55, 0xea, 0x60, 0x4a, 0xda, 0xad, 0x5b, 0xcf, 0x27, 0x74, 0x40, 0xba, 0xe0, 0x20, 0xf7, 0x9b, 0x61, 0x6b, 0xe7, 0x96, 0x54, 0x2a, 0x22, 0xc1, 0x83, 0xd0, 0xdc, 0xcd, 0xea, 0x34, 0x22, 0xe9, 0x11, 0x94, 0xc9, 0xe3, 0x99, 0xd9, 0xa4, 0x90, 0x14, 0x1c, 0xfa, 0x6f, 0x1a, 0x6a, 0x36, 0x89, 0x99, 0xc4, 0xe1, 0x9b, 0x6c, 0x6a, 0xce, 0x77, 0x2f, 0x5a, 0x94, 0xa8, 0x52, 0x13, 0x41, 0x55, 0x6d, 0x9e, 0x4d, 0x68, 0xd3, 0xcf, 0xcd, 0xee, 0x6a, 0xc9, 0xe9, 0xc1, 0xba, 0xc0, 0x90, 0x65, 0x43, 0x03, 0x6b, 0x31, 0x14, 0x39, 0x0f, 0xaf, 0x99, 0xea, 0x76, 0x45, 0xb5, 0x42, 0xb0, 0x14, 0x10, 0x12, 0xd6, 0x20, 0xb3, 0x18, 0x40, 0xb1, 0xd2, 0x80, 0xf7, 0xfa, 0xe8, 0xaa, 0x6d, 0xf9, 0x0a, 0x2e, 0x6c, 0x9e, 0x74, 0x1e, 0x4d, 0x2f, 0x69, 0x8b, 0x6a, 0xeb, 0x3a, 0x4a, 0xd6, 0xee, 0xa4, 0xf7, 0x4b, 0x54, 0x5e, 0x3b, 0x63, 0xa1, 0xf3, 0x4b, 0x0b, 0x61, 0xce, 0xb1, 0x35, 0x0b, 0x93, 0x4f, 0xce, 0x2b, 0xb6, 0xa1, 0xf0, 0xc0, 0x46, 0x42, 0x58, 0xe3, 0x09, 0xb2, 0x1a, 0xaa, 0xce, 0x56, 0x93, 0x4c, 0xff, 0xc0, 0xa0, 0x86, 0x76, 0x31, 0x0d, 0x3d, 0x91, 0x5c, 0x51, 0x64, 0x89, 0x6d, 0x78, 0x20, 0xff, 0x4a, 0x60, 0x2a, 0xd8, 0x19, 0x28, 0x76, 0x4b, 0x02, 0xe6, 0x12, 0x38, 0x36, 0x98, 0x50, 0xbc, 0x30, 0x5e, 0x27, 0x02, 0x3b, 0xe6, 0xd7, 0x5c, 0x34, 0x27, 0xcc, 0x92, 0x91, 0x52, 0xc5, 0x7a, 0xa2, 0x05, 0x35, 0xc8, 0x17, 0xc2, 0xe9, 0x28, 0xc3, 0xa1, 0xec, 0x8a, 0x9f, 0x41, 0xa8, 0xbd, 0x12, 0x04, 0x4d, 0x40, 0x6f, 0x7c, 0x77, 0x55, 0xc0, 0x20, 0x0b, 0x56, 0xc2, 0x44, 0x61, 0x4c, 0x30, 0x48, 0xa9, 0xbe, 0x44, 0x0f, 0x87, 0xc7, 0x7c, 0xb2, 0x01, 0x6b, 0x9a, 0x76, 0x9b, 0x2b, 0xee, 0xfc, 0xc0, 0xd7, 0xd7, 0xb8, 0x64, 0xa4, 0x88, 0xa4, 0xe8, 0x7f, 0x08, 0x36, 0x3e, 0xa0, 0x7c, 0x8f, 0x4d, 0x61, 0xa9, 0xf5, 0x97, 0x51, 0xb5, 0x83, 0x19, 0x84, 0x2d, 0x1f, 0x72, 0x2e, 0x4d, 0xad, 0x48, 0x70, 0x7b, 0x82, 0xe8, 0x72, 0x14, 0x1c, 0x2c, 0xb2, 0x6b, 0x10, 0xa2, 0x9c, 0x0f, 0x43, 0xea, 0x5a, 0x4d, 0x5d, 0x60, 0xed, 0xf6, 0x7b, 0xfc, 0x7d, 0x63, 0x25, 0x76, 0xed, 0xb5, 0x7f, 0xad, 0xb3, 0x61, 0xc3, 0x49, 0xe7, 0xed, 0xee, 0x9f, 0x99, 0xf4, 0xba, 0xd6, 0x68, 0x70, 0xcd, 0x48, 0x50, 0x39, 0x30, 0x2b, 0xc4, 0xc8, 0x02, 0x71, 0xfd, 0x41, 0x6e, 0xec, 0x91, 0xb1, 0xda, 0xb6, 0x47, 0x93, 0x61, 0xd0, 0x2a, 0x9a, 0x84, 0x09, 0xdc, 0xaa, 0x1c, 0x22, 0x2d, 0x27, 0x93, 0x2f, 0xec, 0x73, 0x54, 0x40, 0xfe, 0xb2, 0x80, 0x41, 0xac, 0xd1, 0xe3, 0x1f, 0x41, 0xc6, 0x26, 0x2d, 0xd5, 0x19, 0x46, 0xc5, 0x64, 0xa3, 0x45, 0x32, 0x23, 0x96, 0x1f, 0xcd, 0x13, 0xbd, 0xff, 0x67, 0xd6, 0x05, 0xb3, 0xe7, 0xc2, 0x3d, 0x5d, 0x34, 0x34, 0x1a, 0x6c, 0x56, 0x26, 0x7e, 0xcb, 0xd8, 0x04, 0xf9, 0x58, 0x70, 0xbc, 0x91, 0x98, 0xe2, 0x15, 0xbe, 0xa9, 0x21, 0x41, 0xb9, 0x78, 0xb7, 0xb5, 0xf6, 0x34, 0x68, 0x38, 0xef, 0x02, 0x12, 0x3a, 0x24, 0xf2, 0xd8, 0x68, 0x60, 0x31, 0x7f, 0x7d, 0x3d, 0x81, 0x18, 0x5b, 0xea, 0xe7, 0xe0, 0x5a, 0x2c, 0xa3, 0x64, 0xe0, 0xa3, 0x65, 0xe9, 0x32, 0x4f, 0xbe, 0x0a, 0x89, 0x53, 0xd5, 0xa3, 0x69, 0xf8, 0x5b, 0xee, 0x2e, 0xf4, 0xc1, 0xec, 0xe8, 0xed, 0xa8, 0x07, 0x68, 0x39, 0x99, 0xf5, 0x9b, 0xe8, 0xf6, 0xdf, 0x17, 0x04, 0x30, 0xc3, 0xf4, 0x17, 0x3b, 0x17, 0xdd, 0xee, 0x3f, 0xaf, 0x66, 0x9d, 0x91, 0xe0, 0xa0, 0xc3, 0xe1, 0xe6, 0xec, 0x0f, 0xb5, 0x83, 0x0c, 0x03, 0x16, 0xe9, 0x80, 0xf8, 0x88, 0xda, 0x0f, 0x63, 0x40, 0x0e, 0xa4, 0x56, 0x92, 0xd5, 0x5b, 0x4a, 0xa9, 0xfd, 0xdc, 0x1b, 0x7a, 0xf6, 0xe8, 0x54, 0xfa, 0x34, 0x31, 0xad, 0x8f, 0xd5, 0x6f, 0xd2, 0xc5, 0x84, 0xb0, 0x66, 0x43, 0x9d, 0xef, 0x48, 0xfd, 0x91, 0xe9, 0x15, 0xab, 0x8d, 0x2c, 0xee, 0x79, 0x56, 0x71, 0x7b, 0x00, 0x78, 0x2b, 0x2f, 0x75, 0x9f, 0x60, 0xce, 0x20, 0x45, 0xb8, 0x2d, 0x10, 0x8d, 0xd4, 0x3a, 0x0e, 0x6f, 0xe0, 0x3b, 0xcf, 0x16, 0x6c, 0x5b, 0x6e, 0x86, 0x77, 0x62, 0x19, 0x82, 0xcd, 0xc4, 0x0a, 0xad, 0x94, 0xdd, 0xb8, 0xef, 0x21, 0x7b, 0x4f, 0x1a, 0x10, 0x9d, 0x5e, 0xce, 0x93, 0x7a, 0xd0, 0x9a, 0x0a, 0xc5, 0x1e, 0x63, 0xd4, 0x30, 0xc3, 0x0a, 0x65, 0x2f, 0xef, 0x49, 0x99, 0xfe, 0x7f, 0xde, 0x48, 0xe5, 0x2d, 0xec, 0x1b, 0xbb, 0x04, 0x9e, 0x9e, 0xa9, 0x18, 0x0d, 0x96, 0x30, 0x73, 0x64, 0x94, 0x6d, 0x52, 0x42, 0xca, 0x9c, 0x92, 0x5f, 0x1e, 0xdc, 0x65, 0x73, 0x7d, 0x31, 0x49, 0x53, 0x72, 0xcf, 0x3b, 0x5d, 0xf7, 0x96, 0x27, 0x17, 0x8b, 0xd9, 0xa4, 0x13, 0x84, 0x63, 0xde, 0x16, 0xa7, 0xbc, 0xd3, 0x78, 0xf6, 0xa8, 0xc3, 0xce, 0xc9, 0xf1, 0xe1, 0xc7, 0x20, 0x66, 0x4f, 0x54, 0x38, 0x24, 0x49, 0x0c, 0x5c, 0x14, 0xa1, 0xce, 0xfe, 0xb5, 0x6b, 0xa8, 0x06, 0x1c, 0xf9, 0xf7, 0x6a, 0x39, 0x0a, 0xd0, 0xff, 0x5b, 0x3e, 0x9f, 0x8f, 0xf6, 0xcd, 0x0e, 0x2b, 0xa5, 0x79, 0x29, 0xc2, 0x6b, 0xc1, 0xbf, 0xf3, 0x3e, 0x58, 0x0b, 0x20, 0xc6, 0xd5, 0x93, 0xc4, 0x62, 0xac, 0x51, 0x06, 0x6c, 0x5d, 0x11, 0x8e, 0xbe, 0xeb, 0x1a, 0x97, 0x74, 0x90, 0x10, 0x45, 0xf4, 0xaf, 0x19, 0x39, 0x2c, 0x0a, 0x3f, 0x64, 0x1b, 0x35, 0x16, 0x18, 0x93, 0x4b, 0x9e, 0x65, 0x3d, 0xdf, 0x6a, 0xa2, 0xdd, 0x35, 0x02, 0x4a, 0xd7, 0xb2, 0x87, 0x0a, 0xf3, 0x92, 0x95, 0x17, 0x5d, 0xd9, 0x6d, 0xc5, 0xf0, 0x8c, 0x54, 0x56, 0xb3, 0x20, 0x36, 0x0f, 0xa4, 0x33, 0x8f, 0x92, 0xb5, 0x7a, 0x8c, 0x67, 0x15, 0xfb, 0x6d, 0xdc, 0xb0, 0x7c, 0x2d, 0x0f, 0xf9, 0x3b, 0x65, 0x49, 0xe7, 0xdf, 0x6e, 0x8d, 0x3d, 0xaf, 0xc5, 0x71, 0x0f, 0x02, 0xb4, 0x2d, 0x82, 0xf6, 0x2f, 0xf2, 0xd3, 0x65, 0xfd, 0x7d, 0x9b, 0x15, 0x18, 0xeb, 0x51, 0x2f, 0x55, 0xcf, 0x10, 0xf3, 0x47, 0x82, 0x9a, 0xa9, 0x61, 0xba, 0x9e, 0xdb, 0x5c, 0x5e, 0x36, 0xc1, 0xd8, 0x99, 0xb4, 0xfd, 0x46, 0x2e, 0x9e, 0x89, 0x05, 0x0b, 0xf7, 0xed, 0xcb, 0x20, 0xc0, 0xb5, 0x47, 0x71, 0xbf, 0x22, 0x05, 0x6a, 0x7f, 0x20, 0x91, 0x73, 0x98, 0x78, 0xdf, 0xc5, 0x30, 0x47, 0xea, 0x7c, 0xc2, 0xaf, 0x9c, 0xed, 0x1f, 0xcc, 0xee, 0x39, 0xb2, 0xe9, 0x50, 0x23, 0x07, 0xf4, 0x4b, 0x1e, 0x8f, 0x30, 0x65, 0xaa, 0x9d, 0x2a, 0x45, 0xe1, 0xb5, 0xee, 0x17, 0x4d, 0x06, 0x7a, 0x32, 0xfd, 0x35, 0x73, 0xf8, 0xd8, 0x5c, 0x17, 0xfe, 0x31, 0x53, 0x73, 0x6e, 0x9b, 0x2e, 0xd6, 0xa9, 0xfe, 0x06, 0x85, 0x30, 0xea, 0xfd, 0xb0, 0xc4, 0x2c, 0x7c, 0xa5, 0xcc, 0x9f, 0xbf, 0x44, 0xf8, 0x45, 0x94, 0xb3, 0x24, 0x96, 0x5f, 0x53, 0x7f, 0x18, 0x62, 0xf2, 0xec, 0x30, 0x3b, 0x42, 0xa8, 0x38, 0xae, 0x89, 0x2d, 0xd1, 0xa5, 0x9b, 0x57, 0x7b, 0x75, 0x06, 0xc6, 0x63, 0x63, 0x8c, 0x83, 0x7b, 0x67, 0xd6, 0xe6, 0xd0, 0x30, 0x66, 0xb7, 0x19, 0x67, 0xce, 0x93, 0x8b, 0x38, 0x1f, 0x91, 0xf5, 0x0f, 0xa5, 0x26, 0x08, 0x9f, 0xd1, 0x46, 0xf6, 0x29, 0x77, 0xcc, 0x40, 0xfb, 0x3a, 0x1c, 0xc8, 0x37, 0x44, 0x07, 0x2e, 0xd5, 0x3a, 0xef, 0x59, 0xeb, 0x6e, 0x2b, 0x54, 0x2c, 0x57, 0xac, 0x5c, 0xaf, 0x3f, 0xe1, 0x37, 0xf3, 0x3c, 0xd9, 0xc7, 0x1f, 0x61, 0xa8, 0xde, 0x8e, 0x35, 0x0b, 0x54, 0x8a, 0x64, 0x4f, 0x57, 0x58, 0xb5, 0x6e, 0x03, 0x76, 0x3c, 0x7c, 0x32, 0x20, 0xd1, 0x41, 0x96, 0x18, 0xc1, 0x28, 0x05, 0xa7, 0xc3, 0x58, 0x13, 0xdf, 0x2d, 0x20, 0xe6, 0x24, 0x67, 0x98, 0x46, 0xeb, 0xa0, 0x85, 0xf4, 0xc0, 0xc1, 0x7e, 0x3d, 0x8e, 0x9f, 0x4d, 0xce, 0x1b, 0x75, 0x98, 0xca, 0xd2, 0x91, 0xc1, 0x1a, 0xc5, 0x4d, 0x0a, 0x05, 0xf2, 0x41, 0xfd, 0x00, 0xc5, 0xb7, 0x0b, 0xc7, 0xdf, 0x5f, 0x73, 0xac, 0x16, 0x45, 0x65, 0x2f, 0xbd, 0xff, 0x67, 0xd0, 0x25, 0x2b, 0xf9, 0x21, 0x63, 0x19, 0x74, 0x1f, 0x54, 0xc4, 0x38, 0xc2, 0xdf, 0x07, 0x06, 0xd3, 0x7a, 0x0d, 0xab, 0xfe, 0xf0, 0x0a, 0xdf, 0x28, 0x61, 0x28, 0x6c, 0x03, 0x8a, 0xc5, 0x93, 0xdf, 0x46, 0xdb, 0xab, 0xc3, 0x55, 0xbf, 0x0b, 0xbc, 0x5d, 0x0f, 0x2a, 0x75, 0x2e, 0xe5, 0x05, 0x08, 0x4a, 0x51, 0xc1, 0x14, 0xa5, 0x07, 0x92, 0x10, 0xa9, 0x54, 0xdb, 0xde, 0x7d, 0x57, 0x97, 0xa3, 0x87, 0x6d, 0xf7, 0xd7, 0x30, 0xed, 0x4c, 0x98, 0xe7, 0x16, 0x28, 0x44, 0x68, 0x45, 0xc0, 0x46, 0x3e, 0x6b, 0x95, 0x30, 0x86, 0xbf, 0x54, 0x0b, 0xf7, 0xb0, 0xfa, 0xea, 0x1f, 0x1e, 0x3b, 0xc6, 0xef, 0xc9, 0x25, 0x85, 0x7a, 0x0a, 0x01, 0x5c, 0xfa, 0xc1, 0x7a, 0x57, 0x14, 0x8e, 0x01, 0x36, 0x5d, 0x44, 0x6f, 0x7b, 0x1c, 0x9a, 0xec, 0xc1, 0x52, 0x24, 0x10, 0x4f, 0xf7, 0x82, 0x49, 0xed, 0x87, 0xd8, 0x7d, 0xf7, 0xbd, 0x7e, 0xf0, 0xaf, 0x9e, 0xf8, 0x67, 0xd7, 0xba, 0x28, 0x8e, 0x80, 0xaf, 0xc2, 0x97, 0x1d, 0xee, 0x01, 0x24, 0xdb, 0xc2, 0x98, 0x67, 0x35, 0x8e, 0xec, 0x87, 0xc2, 0x56, 0x80, 0x46, 0x52, 0x80, 0xb0, 0xe2, 0x3a, 0xdc, 0xa3, 0x38, 0xec, 0xe3, 0x7b, 0x2f, 0xcb, 0x3c, 0xce, 0x54, 0x3d, 0x85, 0x5a, 0xc2, 0x01, 0x4f, 0xf4, 0x45, 0xc3, 0x6a, 0xc2, 0xbf, 0xed, 0x64, 0xaa, 0xca, 0xc1, 0x4c, 0x0a, 0x9e, 0xa5, 0xbb, 0xaa, 0x36, 0xbd, 0x16, 0xef, 0xae, 0xbf, 0x0d, 0x51, 0xf0, 0x03, 0x67, 0x0e, 0x8f, 0xda, 0x02, 0x20, 0xf3, 0x21, 0x15, 0x6d, 0xb7, 0x16, 0xb9, 0x3f, 0x4f, 0x6a, 0xa8, 0xf3, 0xee, 0x97, 0x44, 0xf5, 0xa6, 0x73, 0xdb, 0xec, 0xd2, 0x05, 0x29, 0x31, 0xb1, 0x98, 0x1e, 0x86, 0x53, 0x0f, 0xe2, 0x05, 0xb9, 0x78, 0x17, 0x56, 0x38, 0xe4, 0x5e, 0x25, 0x1e, 0x75, 0x1c, 0xd3, 0x98, 0xb8, 0x7e, 0x6c, 0xd3, 0x35, 0xba, 0xda, 0x62, 0x45, 0x98, 0x58, 0xe0, 0x24, 0x32, 0x29, 0xd6, 0x47, 0xf7, 0x89, 0xde, 0xf0, 0xf6, 0xe4, 0x09, 0xff, 0x5a, 0x46, 0x7f, 0x0b, 0x30, 0x13, 0x65, 0xb1, 0x71, 0xf8, 0x04, 0x2c, 0x3c, 0x21, 0x27, 0x26, 0x63, 0xac, 0xc4, 0xce, 0x29, 0x5e, 0xdf, 0x2b, 0x4a, 0x95, 0xac, 0xb0, 0x3c, 0x7e, 0xf4, 0x10, 0xb5, 0x88, 0xb9, 0x54, 0x6d, 0x19, 0x1d, 0x2a, 0x25, 0x7f, 0x80, 0x80, 0xe8, 0x29, 0xe9, 0x51, 0x91, 0x17, 0xa7, 0xbf, 0x8d, 0x8f, 0x38, 0x63, 0xe2, 0x12, 0x69, 0xe1, 0x70, 0x8e, 0xbf, 0xbf, 0x77, 0xd5, 0x16, 0x77, 0x5a, 0x4e, 0x88, 0xca, 0xa3, 0xea, 0x90, 0x58, 0x46, 0x5a, 0x6f, 0x6e, 0x2a, 0x80, 0xcf, 0x1f, 0xe5, 0x23, 0xa7, 0x96, 0xc8, 0xe6, 0x5e, 0xaa, 0x1b, 0x7b, 0x33, 0xb3, 0xa9, 0x14, 0xdc, 0x9c, 0x80, 0x1a, 0x6d, 0x3a, 0xf2, 0x22, 0x7c, 0xdc, 0xdf, 0x1d, 0x83, 0x24, 0x37, 0xce, 0x85, 0x15, 0xba, 0x82, 0xf5, 0x6c, 0x02, 0xfb, 0xd3, 0x34, 0xc4, 0xad, 0x18, 0x95, 0x53, 0x2d, 0x54, 0xed, 0x65, 0xe6, 0x96, 0x22, 0x1a, 0x0e, 0x8c, 0x36, 0x3a, 0xd8, 0xeb, 0x1b, 0xbe, 0xeb, 0x11, 0xc9, 0x93, 0x14, 0xea, 0x8f, 0x9a, 0x37, 0x10, 0xa6, 0xf3, 0x8c, 0x36, 0x0c, 0x7b, 0x07, 0xc6, 0x8f, 0x93, 0x18, 0xc9, 0x28, 0x24, 0x95, 0x08, 0x8b, 0xe0, 0xf5, 0x70, 0xfc, 0xca, 0xbe, 0xbb, 0x64, 0xf8, 0x40, 0x4d, 0xa4, 0x97, 0x84, 0x5c, 0x29, 0x31, 0x80, 0x54, 0xc1, 0x2b, 0x8c, 0x7a, 0xad, 0x92, 0x1a, 0xcf, 0xf7, 0x17, 0xa1, 0x37, 0x06, 0x57, 0xda, 0xda, 0x6f, 0x60, 0x2f, 0xcb, 0x0e, 0x71, 0x71, 0xe8, 0x56, 0x02, 0xc9, 0x01, 0xe5, 0x04, 0xf1, 0x3c, 0x5b, 0x6a, 0xa3, 0xb7, 0x6d, 0xe8, 0x52, 0x70, 0x35, 0xfb, 0x19, 0x62, 0xcc, 0x29, 0xf1, 0xf1, 0x1b, 0x8a, 0x26, 0x88, 0xee, 0x87, 0x0c, 0x81, 0x4a, 0xe2, 0xee, 0x45, 0x01, 0xf7, 0x47, 0xb4, 0x83, 0x41, 0x34, 0xc7, 0xf7, 0x1f, 0x2a, 0x73, 0x8b, 0xd8, 0xe4, 0xd1, 0x08, 0xdd, 0xa0, 0x7d, 0xa9, 0x4f, 0x8b, 0x3c, 0x2d, 0xc1, 0x7a, 0xe1, 0x2b, 0x3f, 0xda, 0x71, 0xa6, 0x8f, 0xea, 0x85, 0xe1, 0xb6, 0x28, 0xf0, 0x74, 0xbf, 0x08, 0xa2, 0xa0, 0xb7, 0xec, 0xcc, 0xe0, 0xfc, 0x51, 0x45, 0xc0, 0xb8, 0x46, 0x2d, 0xf2, 0xa8, 0x23, 0xd0, 0x9f, 0x22, 0x77, 0xcc, 0xfb, 0x56, 0x42, 0x77, 0x1c, 0xd4, 0x65, 0x7b, 0x0c, 0x4e, 0x56, 0xc3, 0x1d, 0x9f, 0x18, 0x9b, 0x7c, 0x0d, 0x6b, 0x12, 0x09, 0xcb, 0x40, 0xa3, 0x66, 0xc2, 0x6f, 0x15, 0x4e, 0x92, 0xac, 0xa0, 0x29, 0xd3, 0xb8, 0x51, 0xdd, 0xa0, 0xd4, 0xb0, 0xe6, 0x56, 0x7b, 0x9f, 0xa9, 0x99, 0x50, 0x85, 0x05, 0x98, 0x56, 0xac, 0x2c, 0x92, 0x5f, 0xe8, 0xb1, 0x9a, 0xc7, 0x7a, 0xe2, 0x97, 0x61, 0x33, 0x57, 0x8e, 0xb2, 0xdd, 0xcb, 0x24, 0x5d, 0xd6, 0x2b, 0x5e, 0xdf, 0xfe, 0xed, 0xac, 0x7c, 0xd3, 0xa3, 0x26, 0x79, 0xdb, 0xd0, 0x15, 0x8c, 0x43, 0xfa, 0xb5, 0x91, 0xc5, 0x00, 0x39, 0x7e, 0xcf, 0xae, 0x10, 0x99, 0xe1, 0x8f, 0x67, 0xe9, 0x36, 0x02, 0xef, 0xea, 0xa8, 0x90, 0xe0, 0x85, 0xce, 0x7d, 0x3e, 0x3e, 0x67, 0x9d, 0x5b, 0xb0, 0xfb, 0x69, 0x9d, 0x36, 0xbf, 0x52, 0x81, 0xec, 0xba, 0x56, 0xe0, 0xd6, 0x26, 0xd0, 0x71, 0x5e, 0x19, 0x94, 0x90, 0x04, 0x64, 0x3b, 0x3d, 0x51, 0xbb, 0xbc, 0x68, 0x0c, 0x17, 0x3d, 0x6c, 0xb1, 0x59, 0x28, 0xd9, 0x1f, 0x30, 0x80, 0x76, 0x91, 0x3c, 0x76, 0x86, 0xcf, 0x74, 0x37, 0x4b, 0xa6, 0xc5, 0x09, 0xc9, 0x95, 0xfb, 0x96, 0xcc, 0xc9, 0xe5, 0x87, 0x2c, 0x4c, 0xb4, 0x55, 0x50, 0x79, 0xa5, 0x5c, 0xf1, 0xb3, 0xe0, 0x32, 0x20, 0x56, 0x9f, 0x36, 0x8b, 0xee, 0x92, 0x6c, 0xfc, 0xa7, 0x83, 0x88, 0x22, 0x05, 0x36, 0x48, 0x94, 0xd5, 0x93, 0x07, 0x13, 0x64, 0x06, 0x90, 0x0f, 0xee, 0x27, 0x30, 0x6d, 0x59, 0x96, 0x0f, 0x88, 0x23, 0x29, 0xbf, 0x76, 0x9a, 0x4a, 0x16, 0x8c, 0x4b, 0x9a, 0x39, 0x24, 0xbc, 0xdb, 0xfa, 0x9d, 0x5e, 0x0c, 0x64, 0xa4, 0xbd, 0xd5, 0x93, 0xb2, 0xfa, 0x26, 0xca, 0xd6, 0x7b, 0x1c, 0xbf, 0xb5, 0xe1, 0x24, 0x39, 0xcf, 0x3a, 0x62, 0xdd, 0x04, 0x78, 0x54, 0x45, 0x56, 0x23, 0xb2, 0x53, 0xf0, 0x4a, 0x99, 0xc5, 0x68, 0xbf, 0xe9, 0x09, 0x41, 0x84, 0xec, 0x52, 0xb4, 0x80, 0x38, 0xeb, 0xaf, 0x76, 0xd6, 0xcc, 0x1f, 0x38, 0xa3, 0x6b, 0x6b, 0x18, 0xf7, 0xd4, 0x40, 0xa0, 0x85, 0xfc, 0x94, 0x83, 0x82, 0x52, 0xe5, 0xd2, 0x0a, 0x98, 0xc2, 0x73, 0xbf, 0xf1, 0x8d, 0xd0, 0xb3, 0x3b, 0x7f, 0xcc, 0x88, 0x9e, 0xec, 0xfb, 0xd5, 0x65, 0xc9, 0x12, 0xcc, 0x0d, 0x6b, 0x9c, 0x1a, 0x9c, 0x91, 0xef, 0x0f, 0x35, 0xa5, 0x5f, 0xff, 0xe8, 0x3f, 0xb1, 0xe8, 0xce, 0xeb, 0xd3, 0x54, 0x56, 0x2c, 0xca, 0x81, 0xda, 0xc1, 0xeb, 0xc0, 0x76, 0x26, 0x4e, 0x1b, 0x19, 0x5e, 0x80, 0x3a, 0xdc, 0xf0, 0x78, 0x88, 0x93, 0x30, 0xcc, 0x91, 0xa2, 0xbf, 0x25, 0xae, 0x13, 0x55, 0xf1, 0xe5, 0xe5, 0xbe, 0x57, 0x0b, 0xa6, 0x23, 0x70, 0x2b, 0x44, 0x8b, 0xb4, 0x2c, 0x20, 0xa1, 0xb2, 0xad, 0x64, 0xb8, 0x05, 0x34, 0x97, 0x0c, 0x83, 0x88, 0x6e, 0x4b, 0xb7, 0x5b, 0xe5, 0x54, 0x92, 0x2c, 0x8f, 0x3e, 0x5d, 0x6c, 0x2a, 0x9c, 0xf2, 0xe0, 0x77, 0xff, 0x2c, 0x46, 0x49, 0xbd, 0x9c, 0x3b, 0xdb, 0xf1, 0x7d, 0x5c, 0x66, 0xc3, 0xea, 0xac, 0xf3, 0xea, 0x4f, 0x36, 0x6e, 0x6f, 0x1e, 0xf3, 0xfd, 0xb3, 0xc3, 0xed, 0x90, 0xb3, 0xd9, 0xa5, 0xb8, 0x8b, 0x9e, 0xb2, 0xbc, 0x39, 0xa4, 0xac, 0xea, 0xa4, 0xca, 0x48, 0x2b, 0xdd, 0x6b, 0xc4, 0xda, 0xa4, 0xd5, 0x86, 0xd6, 0x2e, 0xfd, 0x00, 0xd6, 0x25, 0x71, 0xd6, 0xfd, 0xf1, 0x8d, 0x43, 0xaf, 0x36, 0xf2, 0xb9, 0xa2, 0x9d, 0x34, 0xc7, 0x38, 0xd8, 0xd3, 0x40, 0x0c, 0xe0, 0x6d, 0x9a, 0xca, 0x81, 0x31, 0x94, 0x45, 0x19, 0x97, 0x1b, 0xc3, 0x9d, 0x4e, 0x6f, 0x9b, 0xdc, 0x76, 0x82, 0x03, 0x08, 0x10, 0xa1, 0x23, 0x72, 0xb3, 0x55, 0x6e, 0x95, 0x80, 0x8c, 0x31, 0x56, 0x58, 0xf4, 0x6c, 0x8a, 0x4c, 0xa8, 0xe2, 0xb9, 0x54, 0x0e, 0x6c, 0x21, 0x44, 0xff, 0x92, 0xfe, 0xfd, 0x29, 0x5c, 0x09, 0xe0, 0xb2, 0x66, 0x3f, 0x89, 0x1e, 0x33, 0xe3, 0xb9, 0x73, 0xc3, 0xc6, 0x93, 0x9b, 0x68, 0xc6, 0x0c, 0x09, 0xd5, 0x95, 0x9d, 0xa0, 0x78, 0xbc, 0x3a, 0xd0, 0x0a, 0xdf, 0x88, 0x02, 0x64, 0x42, 0x4b, 0x36, 0x94, 0x8c, 0x1d, 0xea, 0x30, 0xcb, 0x66, 0x3e, 0xea, 0xb9, 0x88, 0x57, 0x65, 0x3e, 0x5a, 0x01, 0x47, 0x35, 0xd8, 0x98, 0x90, 0x73, 0x19, 0x28, 0x2a, 0x05, 0x81, 0xd3, 0xc0, 0xba, 0x37, 0x73, 0xd4, 0xe2, 0xd9, 0x81, 0x0c, 0x54, 0x6f, 0x36, 0xcd, 0xb6, 0x9e, 0xef, 0x0b, 0xf8, 0x1f, 0xd6, 0x60, 0x22, 0x6f, 0xbf, 0x5b, 0x50, 0xc7, 0x50, 0x1a, 0xfa, 0x4e, 0x65, 0x1b, 0x79, 0x8e, 0xb2, 0x4f, 0xc7, 0x24, 0xab, 0x70, 0x87, 0xbc, 0xa0, 0x95, 0x45, 0x3d, 0x2d, 0x04, 0xfe, 0x41, 0xd1, 0x47, 0xe3, 0xc8, 0xdd, 0x82, 0x5a, 0x2d, 0x90, 0x03, 0x46, 0x59, 0x80, 0x1b, 0x88, 0x36, 0x3b, 0x2c, 0xc6, 0x66, 0x2f, 0x04, 0x6a, 0x36, 0xc7, 0x69, 0xee, 0xcd, 0xd7, 0xf5, 0x58, 0xaa, 0x3a, 0x25, 0x00, 0x4d, 0xba, 0xac, 0x99, 0x33, 0x2f, 0x0d, 0x6f, 0x08, 0xeb, 0x68, 0xee, 0x19, 0x56, 0x94, 0x64, 0x08, 0xd6, 0x6f, 0x08, 0xc3, 0xf2, 0x72, 0x3a, 0xb6, 0xb6, 0x89, 0x0c, 0x40, 0x59, 0x21, 0x02, 0x64, 0x1d, 0x82, 0x16, 0xc2, 0x77, 0x5f, 0xff, 0xc5, 0x70, 0xab, 0xb3, 0x1d, 0x4b, 0xaf, 0x2b, 0x70, 0x68, 0x5a, 0x66, 0x4c, 0x68, 0xd8, 0xb0, 0x61, 0x92, 0x66, 0x24, 0xed, 0x75, 0x64, 0x70, 0x77, 0xcf, 0xab, 0xd8, 0xc0, 0xae, 0x22, 0x7e, 0xf7, 0xd5, 0x8c, 0xe0, 0x2c, 0x61, 0xa4, 0xa2, 0x07, 0xad, 0x6c, 0x8e, 0xba, 0x72, 0xc2, 0xd9, 0x34, 0x33, 0x34, 0xa7, 0x97, 0xd8, 0x15, 0xd2, 0xed, 0x99, 0xd0, 0xe7, 0x17, 0x1d, 0x7d, 0x72, 0x05, 0xe3, 0xb2, 0x7c, 0x2d, 0xe2, 0x9c, 0x51, 0x35, 0x6c, 0x4e, 0x87, 0xf3, 0x58, 0x58, 0x3b, 0x98, 0x60, 0x9c, 0x9e, 0x28, 0xc8, 0x5d, 0xb1, 0x2e, 0x41, 0x99, 0x4c, 0xad, 0x0c, 0x99, 0x65, 0x59, 0x62, 0xc6, 0x8f, 0x07, 0x14, 0xbe, 0xc1, 0x63, 0x6f, 0xa7, 0x59, 0xe1, 0x62, 0xc4, 0x60, 0xf6, 0xe3, 0x45, 0x10, 0x87, 0x8e, 0x64, 0x93, 0xa2, 0x8f, 0xad, 0x0e, 0x6c, 0xc3, 0x9d, 0xde, 0x5a, 0x1a, 0x6f, 0x22, 0xa4, 0x40, 0x33, 0x79, 0xf7, 0x7c, 0x20, 0x0d, 0x6b, 0xd8, 0x2b, 0xd0, 0xb4, 0x82, 0xd9, 0x05, 0x9c, 0x72, 0x51, 0x03, 0xb1, 0x4d, 0xb5, 0x35, 0x3a, 0x89, 0xb2, 0x66, 0x70, 0xd3, 0x56, 0x3b, 0xeb, 0xad, 0x22, 0x01, 0x5b, 0x5c, 0x61, 0xa9, 0x78, 0x01, 0xb8, 0x11, 0x3c, 0x06, 0xfd, 0x86, 0x4f, 0xbb, 0x4c, 0x86, 0xc3, 0x41, 0x58, 0xca, 0x01, 0xa8, 0x00, 0x84, 0x03, 0x54, 0x23, 0xe5, 0xc4, 0xa5, 0xb4, 0xe2, 0xf5, 0xd7, 0x11, 0x38, 0xf2, 0x26, 0x90, 0xad, 0xf4, 0x36, 0x5b, 0x99, 0x88, 0xb3, 0x7f, 0xa6, 0x40, 0x34, 0x3f, 0xd4, 0xa8, 0x66, 0xae, 0xc0, 0x7b, 0x66, 0x7d, 0x25, 0x17, 0x6e, 0x11, 0xa3, 0x2f, 0xb4, 0xd8, 0xbf, 0xc0 ],
+const [ 0xa2, 0x49, 0x53, 0xa8, 0x00, 0xe0, 0xb7, 0x3b, 0x45, 0x54, 0xd4, 0xbe, 0x70, 0xf6, 0xc1, 0xba, 0x76, 0x38, 0x3e, 0xbe, 0x38, 0xca, 0x47, 0xa6, 0xb2, 0x02, 0xe9, 0x1d, 0x75, 0x81, 0x55, 0x61, 0x57, 0x14, 0x33, 0x47, 0x69, 0xd8, 0x38, 0x7e, 0x29, 0xa2, 0xfb, 0x17, 0xf9, 0x9d, 0x04, 0x45, 0xd0, 0x35, 0x26, 0x62, 0x30, 0x34, 0x10, 0x33, 0x58, 0x2b, 0x1e, 0x6d, 0xba, 0x14, 0x75, 0x78, 0xaf, 0x35, 0x4e, 0x72, 0x6a, 0x48, 0x92, 0x77, 0x2a, 0xd8, 0xa8, 0x20, 0xb4, 0xee, 0x8a, 0x49, 0x01, 0xed, 0x1f, 0x18, 0x34, 0xbb, 0xc5, 0x3b, 0xcf, 0x21, 0x2c, 0x70, 0x25, 0x75, 0x6b, 0x4b, 0x13, 0x76, 0x4d, 0x34, 0xeb, 0x77, 0xec, 0xaf, 0xb1, 0xc0, 0x82, 0xe0, 0x8a, 0x31, 0x7b, 0x4e, 0x71, 0x28, 0xcf, 0xe7, 0x2c, 0xa5, 0x8e, 0x44, 0x7e, 0xac, 0xbd, 0x2f, 0x9f, 0xeb, 0x60, 0x62, 0xe9, 0x9d, 0xd8, 0x92, 0xd4, 0xae, 0x6f, 0xac, 0x24, 0x20, 0x32, 0x5f, 0x61, 0xad, 0xff, 0xda, 0x88, 0xae, 0xde, 0xd7, 0x00, 0x3b, 0x94, 0xd8, 0xcf, 0x94, 0x76, 0xb0, 0x0e, 0xbf, 0x7c, 0x46, 0x9a, 0x73, 0x96, 0x96, 0x0d, 0x35, 0x43, 0xf8, 0xed, 0xc1, 0x5f, 0xa5, 0x23, 0xab, 0x3c, 0x77, 0xae, 0x46, 0xf5, 0xf0, 0x98, 0xc5, 0xff, 0x7e, 0x29, 0xa0, 0x01, 0xfd, 0x5c, 0x3a, 0xe6, 0x7e, 0x8f, 0xc0, 0x30, 0x47, 0x7e, 0x54, 0x8f, 0x1b, 0x72, 0x6b, 0xb2, 0xbb, 0xb6, 0x73, 0x5d, 0xac, 0x4b, 0xba, 0xbc, 0x3b, 0xdc, 0x8b, 0xf7, 0xbf, 0xf4, 0x9a, 0x06, 0x1e, 0x6f, 0xa1, 0xc7, 0x92, 0x2f, 0x4c, 0x4d, 0xad, 0x10, 0x53, 0x7b, 0x9b, 0x1d, 0xe5, 0xd2, 0xa8, 0x04, 0x4d, 0x88, 0x01, 0xc7, 0xd0, 0xda, 0xbf, 0xb5, 0xd4, 0xa3, 0x21, 0x99, 0x48, 0x2c, 0x19, 0x31, 0x3f, 0x46, 0x0b, 0xe1, 0xde, 0x96, 0xd1, 0xa9, 0x79, 0x31, 0x02, 0x55, 0xf9, 0x69, 0x74, 0xf3, 0x81, 0xe6, 0xff, 0x8a, 0x51, 0xf8, 0x84, 0x09, 0xea, 0x2b, 0x2e, 0x7e, 0x72, 0x1c, 0xf8, 0x88, 0x5b, 0x8c, 0x70, 0x0f, 0x40, 0xb3, 0xba, 0x32, 0x0f, 0xd6, 0xd7, 0x81, 0x6d, 0x1c, 0x28, 0x6d, 0x56, 0x9e, 0x2d, 0xfc, 0x04, 0xbd, 0x93, 0xc2, 0x13, 0xb8, 0x6e, 0x0c, 0xe2, 0x7e, 0xc3, 0x5e, 0x3c, 0xc0, 0x49, 0x20, 0x38, 0x4b, 0x70, 0x94, 0x5d, 0x95, 0xa3, 0x0b, 0x0a, 0x95, 0xca, 0x59, 0x15, 0xd8, 0x14, 0x86, 0xb3, 0xd2, 0xf3, 0xc6, 0x98, 0x72, 0x68, 0xab, 0x5f, 0xf9, 0x80, 0x9a, 0x2b, 0x0b, 0x1f, 0x7c, 0x8f, 0x06, 0xfc, 0xb5, 0xab, 0x94, 0xed, 0x5a, 0x98, 0x7c, 0x65, 0x9e, 0x07, 0xbe, 0x3a, 0x8e, 0x24, 0xde, 0xac, 0xff, 0xc1, 0x80, 0xa4, 0xc4, 0xb0, 0x35, 0x39, 0x24, 0x70, 0x95, 0x78, 0x8b, 0x0d, 0x8e, 0x65, 0x7f, 0x41, 0xfb, 0x3d, 0xd6, 0xdf, 0x78, 0xfe, 0x26, 0x71, 0x75, 0x29, 0x7e, 0x20, 0x8a, 0xc7, 0x53, 0xd5, 0x0a, 0xaa, 0xbd, 0x9e, 0xdb, 0xf5, 0xe4, 0x53, 0x85, 0xdf, 0xb4, 0x79, 0x88, 0xb3, 0xd9, 0x66, 0xf3, 0x1b, 0xe7, 0xa6, 0x32, 0x9f, 0xd8, 0x9e, 0x28, 0x69, 0xbc, 0x6f, 0x7e, 0x4b, 0xac, 0x1e, 0x3a, 0x03, 0x00, 0xf1, 0x93, 0xbd, 0xc2, 0x1c, 0x03, 0xd9, 0x62, 0x9c, 0x9f, 0xef, 0xaa, 0x64, 0xa4, 0x10, 0xf5, 0xb7, 0x52, 0x4f, 0x9c, 0xd5, 0xfd, 0x80, 0xb2, 0xd9, 0x61, 0x40, 0xf1, 0xe2, 0x36, 0x36, 0xf3, 0x71, 0x04, 0x98, 0xa6, 0x12, 0x39, 0xf0, 0xfa, 0x3f, 0x79, 0x20, 0xdc, 0x81, 0x35, 0xa3, 0x68, 0xd8, 0x7f, 0x17, 0x5a, 0x5d, 0x1c, 0xf8, 0xc6, 0x26, 0xdb, 0xaf, 0x0a, 0x6a, 0x26, 0xcb, 0x00, 0xe5, 0xd7, 0x8e, 0x78, 0x7e, 0x4d, 0xab, 0xe5, 0x28, 0xbe, 0x4e, 0x56, 0x06, 0xce, 0x5d, 0xa8, 0xd2, 0x61, 0xfd, 0xfa, 0x7f, 0xae, 0x59, 0x62, 0x1d, 0x96, 0x9f, 0xde, 0xfe, 0x33, 0x4a, 0x8e, 0x17, 0xb3, 0xa7, 0x20, 0xa8, 0x67, 0x92, 0x8b, 0x20, 0x17, 0x81, 0x00, 0x3b, 0x99, 0xc5, 0x1d, 0x6d, 0xa1, 0x0c, 0x65, 0x83, 0xdb, 0x29, 0xed, 0x88, 0x37, 0x18, 0x57, 0xe5, 0x85, 0x3c, 0x04, 0xcd, 0x41, 0xec, 0x86, 0xd8, 0xb0, 0x2e, 0x54, 0xee, 0x2c, 0xc2, 0xc2, 0x67, 0xbb, 0x63, 0x30, 0x70, 0xe7, 0x49, 0x81, 0xb1, 0xca, 0xf2, 0xcf, 0x2d, 0x69, 0x22, 0x5c, 0x69, 0x43, 0x29, 0xcc, 0xd0, 0x29, 0x64, 0x92, 0x56, 0x4f, 0x06, 0xa9, 0x5c, 0xa4, 0x18, 0x84, 0xd3, 0x5f, 0xbf, 0x47, 0xa5, 0xda, 0xbe, 0x37, 0x50, 0xa4, 0x3b, 0x6f, 0xd4, 0xd2, 0xc6, 0xd6, 0xd0, 0x95, 0x97, 0x4d, 0xe8, 0x12, 0x17, 0x2d, 0x69, 0x6d, 0xa3, 0xf0, 0x30, 0x27, 0x8c, 0x2e, 0xc8, 0xab, 0x62, 0xcc, 0xd2, 0x23, 0x72, 0x70, 0xaa, 0x90, 0x8d, 0x37, 0x47, 0x1a, 0x0b, 0xab, 0x63, 0xa4, 0x10, 0xef, 0xdc, 0xa4, 0x0e, 0x3d, 0x5b, 0x32, 0x8b, 0x93, 0x33, 0x5f, 0x25, 0xa8, 0x8c, 0xc7, 0xd3, 0x25, 0xc0, 0x6a, 0x6d, 0x12, 0x05, 0xb7, 0x6f, 0x8e, 0x4d, 0xea, 0xfa, 0xc4, 0x6a, 0x98, 0x1b, 0x1a, 0x76, 0x88, 0x50, 0xab, 0x72, 0xc5, 0x48, 0xf8, 0x2d, 0xf1, 0xeb, 0xda, 0x67, 0xdc, 0x9a, 0xbc, 0x37, 0x56, 0xb8, 0x06, 0xaa, 0x41, 0x69, 0xdc, 0xad, 0xea, 0x99, 0x09, 0x2d, 0x99, 0x41, 0x36, 0x7c, 0x66, 0xe5, 0x60, 0xf7, 0x4f, 0x62, 0x89, 0xe6, 0x88, 0xe6, 0xad, 0xa3, 0x12, 0x40, 0xf7, 0xff, 0x8f, 0x5a, 0x35, 0xe1, 0x55, 0x03, 0x8a, 0x30, 0xc1, 0xf2, 0x62, 0xf3, 0xcd, 0x08, 0xab, 0xb7, 0xe5, 0xd6, 0x43, 0x31, 0xf7, 0x5f, 0xac, 0x25, 0xca, 0x1f, 0x07, 0x87, 0x90, 0x4c, 0x40, 0xdf, 0xbe, 0x5b, 0x86, 0xf2, 0x1b, 0xc6, 0xfe, 0x9e, 0x17, 0x0d, 0xb8, 0x06, 0x5f, 0xfb, 0xe2, 0xef, 0xae, 0x2a, 0x3b, 0x6a, 0xe6, 0xc9, 0xcb, 0xb4, 0x5f, 0x9d, 0xd2, 0x5a, 0x7f, 0x46, 0xfe, 0xa0, 0x8b, 0xc4, 0xe0, 0x24, 0xbc, 0x39, 0xa1, 0xbf, 0x96, 0xf0, 0xf1, 0xac, 0x75, 0x9f, 0x41, 0xec, 0x69, 0xe9, 0x32, 0xe8, 0x43, 0x27, 0x4d, 0x59, 0xf0, 0x68, 0xf4, 0x65, 0x06, 0xb6, 0x98, 0x0a, 0x9d, 0x9c, 0x2d, 0xc0, 0x60, 0xe5, 0xdb, 0x5a, 0xe4, 0xa5, 0xf7, 0x2e, 0x38, 0x7e, 0x31, 0x75, 0xbd, 0x1c, 0x0f, 0xf5, 0x37, 0x02, 0x9a, 0xdd, 0x25, 0x89, 0x57, 0xf0, 0x4e, 0x25, 0x78, 0xe5, 0x9d, 0xeb, 0x54, 0x0e, 0x2e, 0x50, 0x15, 0x39, 0xa9, 0x34, 0xb0, 0xd4, 0xcf, 0x1f, 0x1b, 0x54, 0x52, 0xca, 0xba, 0xd7, 0xea, 0xe1, 0x1a, 0x07, 0xa5, 0x07, 0xe1, 0x42, 0x7f, 0x1b, 0x05, 0xf9, 0x32, 0xb9, 0x3d, 0x56, 0x4f, 0x04, 0xb5, 0x22, 0x8e, 0xa3, 0x06, 0xe5, 0x62, 0x0a, 0x65, 0x4f, 0xd1, 0xfb, 0x1a, 0xd6, 0x83, 0x4c, 0x35, 0xa1, 0x19, 0xea, 0x7c, 0xa5, 0xc0, 0x1e, 0xa7, 0x0e, 0x05, 0x0f, 0xd0, 0xe0, 0xeb, 0x89, 0x25, 0xde, 0x3a, 0xfc, 0xe0, 0xab, 0x1b, 0xc8, 0x79, 0x2f, 0xe2, 0xb7, 0x19, 0x3c, 0x2b, 0xcb, 0x53, 0x71, 0x28, 0x3b, 0x0f, 0x5f, 0x39, 0xb8, 0xc6, 0xeb, 0xbd, 0xf4, 0xf5, 0xf3, 0x29, 0x65, 0xcb, 0x35, 0x57, 0x47, 0x25, 0x6c, 0x20, 0xe0, 0xbd, 0xbb, 0x2c, 0x07, 0x9e, 0x4f, 0x09, 0xe7, 0xdc, 0x41, 0x7b, 0x01, 0x81, 0xb9, 0x13, 0x70, 0xca, 0x59, 0x03, 0x71, 0x94, 0xd9, 0x31, 0x22, 0x11, 0xee, 0x8a, 0x8a, 0xbf, 0x71, 0x99, 0xda, 0x9b, 0xbd, 0x58, 0xf2, 0x92, 0x59, 0x46, 0x27, 0x38, 0xd7, 0xb9, 0x44, 0xbc, 0xfb, 0x76, 0xce, 0x1c, 0x20, 0x7f, 0x8d, 0x95, 0xd8, 0x2c, 0x47, 0x5e, 0xd3, 0x7d, 0xcf, 0x95, 0x02, 0xaf, 0x3f, 0x7a, 0xfb, 0x0d, 0x81, 0xdb, 0xa0, 0x09, 0x14, 0xcf, 0xfb, 0x8b, 0x0c, 0xa7, 0x6d, 0x89, 0x5b, 0x22, 0x08, 0xd8, 0x50, 0xe0, 0x39, 0x42, 0x5d, 0x19, 0xaa, 0xd8, 0x1d, 0x8f, 0x66, 0x89, 0x95, 0xc1, 0x3f, 0xf4, 0xbb, 0x62, 0x6d, 0x7b, 0x34, 0x09, 0x77, 0x99, 0x62, 0x2a, 0x57, 0x75, 0x9e, 0x45, 0xd9, 0xb7, 0xc2, 0x5d, 0x44, 0x9a, 0xeb, 0xac, 0x3c, 0x42, 0x7d, 0x95, 0xe7, 0x51, 0x67, 0xda, 0x4f, 0xb5, 0xa8, 0x0f, 0x07, 0xc3, 0x12, 0x4f, 0x12, 0x8a, 0x4d, 0x2d, 0x00, 0x61, 0x20, 0xed, 0x5a, 0xc3, 0xec, 0xf5, 0x40, 0x5d, 0x79, 0x7e, 0x51, 0x64, 0xf5, 0x8f, 0xcb, 0x2c, 0x3a, 0x2c, 0xf3, 0xf7, 0x50, 0xcb, 0xb8, 0x0b, 0x33, 0x07, 0x93, 0x07, 0xd6, 0x98, 0xb1, 0x76, 0x67, 0x83, 0x54, 0xa5, 0xd5, 0x8e, 0x77, 0xb2, 0x90, 0xf7, 0xb1, 0xe6, 0x90, 0x65, 0x5b, 0x44, 0x98, 0x1f, 0xf5, 0x62, 0xbc, 0x7c, 0xc6, 0x78, 0x21, 0x9b, 0xc3, 0xb7, 0x04, 0x53, 0xb2, 0xdc, 0xfd, 0x6d, 0x8f, 0x04, 0x85, 0x11, 0x2f, 0xc2, 0xb7, 0x7f, 0x23, 0x6f, 0x53, 0x00, 0xdf, 0xc1, 0x08, 0x1b, 0x1c, 0x9f, 0xf3, 0x0b, 0x7a, 0x34, 0x63, 0x71, 0x6a, 0x43, 0xdf, 0x47, 0x4b, 0xba, 0x6a, 0x15, 0xd3, 0x89, 0x05, 0x67, 0xb1, 0xb4, 0x76, 0x7e, 0x70, 0xa7, 0x48, 0x46, 0x9f, 0xcb, 0x13, 0x88, 0x2f, 0x56, 0xfd, 0x61, 0x1c, 0x67, 0x81, 0xf3, 0x50, 0x52, 0x6f, 0x5a, 0xc4, 0x38, 0x34, 0xe1, 0xe8, 0xdc, 0x5c, 0x76, 0x45, 0xb1, 0x55, 0x5c, 0x60, 0x38, 0x76, 0x20, 0xe2, 0x88, 0x3f, 0xce, 0xf7, 0x2e, 0xe3, 0x64, 0xf4, 0x38, 0x03, 0x87, 0x3c, 0x8d, 0xbd, 0x75, 0x64, 0x80, 0xe5, 0x3b, 0x95, 0xa4, 0x92, 0x28, 0x32, 0xe1, 0xdd, 0x81, 0xbb, 0xc7, 0xe5, 0x76, 0xf2, 0x23, 0x17, 0x55, 0x3c, 0xd0, 0xac, 0xfe, 0x49, 0xd0, 0x72, 0x97, 0xf7, 0x9b, 0xd0, 0x81, 0x74, 0xb7, 0x04, 0x8a, 0xa3, 0x89, 0xb0, 0x64, 0xc2, 0x6b, 0x95, 0x56, 0x49, 0xff, 0x9e, 0x31, 0x15, 0xc2, 0x20, 0x86, 0xc5, 0xe4, 0x60, 0x16, 0x65, 0x57, 0x56, 0x8a, 0x4a, 0x26, 0xb0, 0x64, 0x3c, 0x08, 0x1a, 0x36, 0xdb, 0x35, 0xbd, 0x11, 0x3b, 0x78, 0x05, 0x41, 0xd2, 0x85, 0xa8, 0x37, 0x94, 0x8e, 0xe4, 0xc7, 0x5c, 0x11, 0x08, 0x94, 0x8e, 0xf4, 0x35, 0xc8, 0xfa, 0xd3, 0x66, 0x08, 0x04, 0x99, 0xae, 0xa7, 0x02, 0x4d, 0xc1, 0x19, 0xe6, 0x2f, 0xb6, 0xab, 0x1d, 0x04, 0x0b, 0x72, 0xb7, 0xae, 0xea, 0x81, 0xc7, 0xff, 0xaa, 0x5f, 0x0d, 0xcf, 0x99, 0xb9, 0xd2, 0x4c, 0xf9, 0x53, 0x14, 0x92, 0x48, 0x44, 0xe3, 0x7c, 0xc5, 0x63, 0x0b, 0xb9, 0x2f, 0xfd, 0xf3, 0x22, 0xd0, 0xc9, 0xc5, 0x4a, 0xba, 0x1d, 0xcf, 0x57, 0x51, 0x61, 0x2a, 0x11, 0x09, 0xc5, 0x99, 0x39, 0x71, 0x2f, 0xb3, 0x1c, 0x71, 0x77, 0x45, 0x68, 0xcf, 0xd7, 0xf2, 0x3d, 0xf8, 0x9d, 0x1c, 0x87, 0xfe, 0x23, 0x08, 0x8c, 0xdd, 0x01, 0x3c, 0xc1, 0x02, 0x81, 0x2c, 0xe2, 0x0e, 0x54, 0x16, 0x41, 0xd7, 0x83, 0x2b, 0x5f, 0xaf, 0xa8, 0xef, 0xb9, 0xea, 0x5d, 0xe2, 0xe4, 0x9a, 0xf5, 0x60, 0xdc, 0x9d, 0x6a, 0xc6, 0x9a, 0xda, 0x97, 0xd6, 0xe4, 0xc7, 0xa7, 0x5d, 0x69, 0x2f, 0xce, 0x12, 0x0d, 0x32, 0x37, 0xc2, 0x82, 0x8d, 0x3d, 0xaa, 0x18, 0x1b, 0xdd, 0x25, 0xd6, 0x9c, 0x6b, 0x87, 0xc9, 0xb6, 0x85, 0x48, 0x9c, 0x39, 0x46, 0x65, 0x69, 0xa7, 0xbb, 0x03, 0xcf, 0xf4, 0x9b, 0x55, 0x45, 0x8a, 0x32, 0xc1, 0xad, 0x90, 0x9f, 0x3e, 0x2d, 0x6c, 0x3f, 0x01, 0x3a, 0x86, 0x69, 0x58, 0xf5, 0x4f, 0x5c, 0xd6, 0xbb, 0x83, 0x75, 0xb0, 0xf7, 0xab, 0xa6, 0x67, 0x3b, 0xe5, 0x23, 0xa7, 0x90, 0xe7, 0x5e, 0x70, 0x0a, 0x42, 0x36, 0x73, 0x9f, 0xe4, 0x6b, 0xbf, 0x38, 0xe1, 0x56, 0x9c, 0x09, 0x73, 0xd7, 0xb7, 0x1e, 0x3f, 0x8e, 0x80, 0x37, 0xd9, 0x4e, 0xd1, 0xd6, 0x8b, 0xce, 0xd0, 0x96, 0x52, 0xa2, 0x16, 0xbe, 0x2a, 0x6a, 0x11, 0x16, 0x8b, 0x4a, 0xa6, 0xfa, 0x34, 0x9a, 0x1b, 0xac, 0x27, 0xde, 0x35, 0xef, 0xf5, 0xf8, 0x9d, 0xd1, 0x3b, 0x9c, 0x88, 0xc8, 0x6d, 0x05, 0x97, 0x00, 0xd2, 0xe6, 0xfc, 0xf4, 0xd0, 0xa4, 0xdf, 0x3c, 0x6a, 0xc2, 0x00, 0xa5, 0x07, 0x9d, 0x9d, 0x87, 0x75, 0x59, 0x96, 0x53, 0x2d, 0x1b, 0xcf, 0x6c, 0xd9, 0x78, 0xd6, 0x38, 0x13, 0x2e, 0xc6, 0x76, 0x70, 0x12, 0x6b, 0xd2, 0xbd, 0x4a, 0xa6, 0xb6, 0x88, 0xbc, 0x13, 0x64, 0xe3, 0xc6, 0xea, 0x42, 0x64, 0x30, 0x23, 0x74, 0x70, 0x5f, 0xde, 0xb0, 0xb9, 0xcb, 0x01, 0x4e, 0x06, 0xb3, 0x23, 0x9f, 0x33, 0x0f, 0xa9, 0x80, 0x78, 0xc6, 0x2e, 0x2f, 0xee, 0x21, 0x29, 0x5d, 0x4e, 0x7f, 0xc9, 0x84, 0xfc, 0x4b, 0x24, 0x7a, 0x45, 0x2c, 0x91, 0x47, 0xe5, 0x7b, 0x52, 0x34, 0xcd, 0xfa, 0x77, 0x24, 0x23, 0xc3, 0xfe, 0x27, 0x89, 0x7e, 0x3f, 0x4d, 0xa2, 0xd7, 0x88, 0xb8, 0xd2, 0x30, 0x04, 0xf5, 0x46, 0x92, 0xe1, 0x8d, 0x35, 0xea, 0xb1, 0xd6, 0x65, 0x72, 0x11, 0x0f, 0xf0, 0x6d, 0x89, 0xac, 0x48, 0x17, 0xb4, 0xef, 0x79, 0xdc, 0xa1, 0xb8, 0xae, 0xc8, 0x78, 0x9e, 0xf7, 0x3f, 0x61, 0x3e, 0x49, 0xee, 0xa1, 0xd3, 0xc7, 0x01, 0x06, 0x08, 0x3f, 0x96, 0x86, 0x0a, 0xf8, 0x72, 0x23, 0xe0, 0xab, 0xf3, 0x12, 0xff, 0xcf, 0x46, 0x1b, 0x19, 0x19, 0xda, 0x43, 0x37, 0x44, 0x15, 0xa9, 0x07, 0x0e, 0x45, 0xae, 0x77, 0x83, 0xd9, 0x58, 0x82, 0x7d, 0xd1, 0xf9, 0x4a, 0x6c, 0x73, 0x0b, 0x68, 0x53, 0x40, 0x5f, 0x80, 0x13, 0x26, 0x77, 0x18, 0xec, 0xf7, 0x30, 0xaa, 0x41, 0x1a, 0xa3, 0xf7, 0x9b, 0x81, 0x4e, 0x9f, 0xf1, 0xda, 0x6f, 0xef, 0x27, 0x0a, 0xb1, 0xfa, 0xd4, 0xd7, 0x0a, 0xeb, 0x48, 0xe4, 0xe4, 0x99, 0xce, 0xe3, 0x7b, 0x5c, 0x2e, 0x06, 0x86, 0x20, 0x76, 0xb6, 0x19, 0xb7, 0xfa, 0x88, 0xca, 0x74, 0x9a, 0x6d, 0x13, 0xf5, 0x43, 0x29, 0xf7, 0x40, 0xb9, 0x06, 0xe8, 0x12, 0x93, 0xc9, 0xe9, 0x73, 0x87, 0xe5, 0xf0, 0x8e, 0xe7, 0xef, 0x8e, 0xc0, 0x6c, 0x52, 0xd1, 0xef, 0x33, 0x44, 0x6a, 0x1d, 0x05, 0xf8, 0x0b, 0x3c, 0xdb, 0x15, 0x13, 0x44, 0xa1, 0x68, 0x6d, 0x84, 0x3b, 0xd5, 0xb5, 0x35, 0xc6, 0x94, 0x9d, 0x55, 0x20, 0x9a, 0x90, 0xb3, 0xaa, 0x54, 0x95, 0x46, 0x4c, 0x9b, 0x75, 0xc2, 0xba, 0xe5, 0x20, 0x6d, 0xf6, 0xb8, 0x4d, 0x2f, 0x17, 0x65, 0x61, 0xe9, 0x48, 0xf2, 0x92, 0x08, 0x13, 0x58, 0x4c, 0x5a, 0xe0, 0xef, 0xd3, 0x20, 0xb8, 0x26, 0x2b, 0x64, 0x4f, 0x77, 0x35, 0x8d, 0x42, 0x9a, 0x1a, 0x30, 0x9d, 0xf9, 0xec, 0x29, 0xa0, 0x65, 0x8b, 0xeb, 0xc3, 0x07, 0xc6, 0x14, 0xf7, 0x99, 0xc3, 0x45, 0x2f, 0xd6, 0xa1, 0x30, 0x1f, 0x2e, 0x5b, 0xf2, 0x43, 0xbf, 0xf0, 0xa4, 0x24, 0x81, 0xc1, 0x2c, 0xd7, 0xc0, 0x3a, 0x59, 0xc6, 0xd0, 0xb4, 0x30, 0xb3, 0xfc, 0x9a, 0x80, 0xf9, 0xbf, 0xcb, 0xbd, 0x15, 0x37, 0x40, 0x0a, 0x66, 0xd6, 0xef, 0x98, 0x31, 0x5b, 0xef, 0x2f, 0xe8, 0x00, 0xdc, 0x0a, 0xac, 0xf5, 0x7d, 0xe8, 0x10, 0x0e, 0xa4, 0x60, 0x20, 0xb9, 0x56, 0x75, 0xa2, 0x32, 0x2c, 0x6a, 0x9b, 0xfa, 0xf9, 0xd8, 0x15, 0x85, 0xad, 0xfd, 0x20, 0x32, 0x7a, 0x57, 0x17, 0x81, 0x35, 0x71, 0x24, 0x81, 0xfe, 0xfe, 0x06, 0x87, 0x23, 0x24, 0x12, 0x25, 0x42, 0x1a, 0x78, 0x5a, 0xae, 0xf5, 0xc8, 0x07, 0x14, 0xbf, 0xb5, 0xa2, 0x5f, 0xca, 0x18, 0x2e, 0xd8, 0x43, 0x38, 0x6b, 0x92, 0x0a, 0x48, 0x4a, 0x05, 0xc1, 0x31, 0xa3, 0xf9, 0x24, 0x92, 0x2a, 0xa6, 0x98, 0x05, 0xa0, 0x19, 0x06, 0xa5, 0x46, 0xd9, 0xe9, 0xcd, 0x97, 0xcb, 0xa6, 0x22, 0x36, 0x53, 0x1d, 0xd3, 0x26, 0xbc, 0x7d, 0x1f, 0x39, 0xda, 0x5c, 0x18, 0xcb, 0xed, 0x07, 0xa7, 0xaf, 0xc9, 0x16, 0xd1, 0x6a, 0x34, 0x44, 0x38, 0x9f, 0x90, 0x7e, 0xe5, 0xcb, 0xba, 0x3a, 0x44, 0x33, 0x31, 0x0a, 0x70, 0x1a, 0x7b, 0x71, 0xb1, 0x36, 0xc4, 0xf5, 0x44, 0x65, 0xc9, 0x75, 0x5a, 0x9d, 0xf4, 0xbd, 0x62, 0x21, 0xc8, 0x58, 0x8b, 0xfb, 0x80, 0xa5, 0x85, 0xa6, 0xf3, 0x2e, 0x88, 0x0b, 0xbb, 0x34, 0x98, 0xaf, 0x96, 0x8f, 0x07, 0x2a, 0x0c, 0xb5, 0x3b, 0xdb, 0x53, 0x18, 0xb2, 0xda, 0x6f, 0xb5, 0x42, 0x2e, 0x9d, 0xe9, 0xa6, 0x40, 0xf2, 0x87, 0x36, 0x90, 0x40, 0x29, 0xf6, 0xa7, 0x39, 0xc3, 0xd2, 0x4d, 0xd7, 0x7e, 0x28, 0xfb, 0xfb, 0xc3, 0x87, 0x93, 0x54, 0x95, 0xb7, 0x4f, 0x82, 0x25, 0xf9, 0xf7, 0x7b, 0xa0, 0x8f, 0x58, 0x2e, 0x4c, 0x7f, 0xf1, 0x67, 0xd3, 0x95, 0xef, 0xf3, 0xdf, 0xa7, 0x5c, 0x04, 0xe6, 0x1c, 0x93, 0xd7, 0x48, 0xaf, 0xf7, 0x93, 0x97, 0x71, 0xe4, 0x75, 0x35, 0x0d, 0xe6, 0x2a, 0x25, 0x50, 0x29, 0x7c, 0x1b, 0xe9, 0x31, 0x31, 0xd5, 0x6d, 0xcb, 0x30, 0xae, 0x9e, 0x44, 0xe6, 0x71, 0xec, 0xd8, 0xe8, 0x6b, 0x3c, 0x6d, 0xda, 0xc4, 0xe9, 0x82, 0x8f, 0x0f, 0x08, 0x62, 0x71, 0x1f, 0xf1, 0x9d, 0x24, 0x1c, 0xfb, 0xb8, 0x66, 0xd7, 0x86, 0x24, 0x3a, 0x5b, 0x3f, 0x6d, 0x45, 0xc5, 0x9f, 0xb4, 0x78, 0x55, 0xb5, 0x5f, 0xef, 0xc4, 0x26, 0x0f, 0x19, 0xd8, 0x72, 0xd2, 0x1a, 0x37, 0x78, 0x9b, 0x6d, 0x79, 0x3d, 0xef, 0xce, 0x80, 0xe9, 0xe0, 0x57, 0x0c, 0x12, 0x3f, 0xe9, 0x8a, 0x3d, 0x0e, 0xcd, 0x2d, 0xa2, 0x34, 0x9b, 0x40, 0x30, 0x74, 0x5b, 0xbb, 0xd1, 0xa0, 0xeb, 0x14, 0xef, 0x0a, 0xa1, 0x57, 0x37, 0x3c, 0x30, 0x79, 0x9d, 0xe9, 0xd0, 0xea, 0xa0, 0x23, 0x99, 0x69, 0xcf, 0xcd, 0x30, 0x1c, 0x8c, 0x54, 0xa6, 0xe0, 0x10, 0x9a, 0x9d, 0xde, 0xaf, 0x33, 0xad, 0x5f, 0x5d, 0xd4, 0x06, 0xe1, 0x72, 0x08, 0x56, 0x69, 0xaa, 0x25, 0xed, 0x1c, 0x70, 0x7f, 0x1f, 0x09, 0x5c, 0xdb, 0xe9, 0x4a, 0xfa, 0x27, 0xd8, 0x4b, 0xcd, 0x68, 0x27, 0x69, 0x93, 0xf3, 0x27, 0xbf, 0xcb, 0xe0, 0xe4, 0x3c, 0x75, 0xbc, 0x06, 0xf9, 0x19, 0x7e, 0xf5, 0xca, 0x0a, 0xbc, 0x41, 0x14, 0xec, 0x1f, 0x40, 0xde, 0x74, 0x15, 0xf9, 0x2a, 0x6f, 0xc5, 0x40, 0x85, 0x06, 0x48, 0x23, 0xdd, 0x40, 0x16, 0x85, 0x93, 0xc8, 0xbe, 0x09, 0xd1, 0xf1, 0xdb, 0x32, 0x1e, 0xf7, 0x43, 0xc8, 0x2f, 0x88, 0x81, 0x7d, 0x00, 0x82, 0x86, 0xd0, 0x24, 0xff, 0x9b, 0x32, 0x5a, 0x8f, 0x9a, 0x67, 0x60, 0xc4, 0x5e, 0x30, 0x0c, 0xf4, 0x78, 0x27, 0x98, 0x3a, 0x23, 0xea, 0x3e, 0xbe, 0x7b, 0x7b, 0x04, 0x36, 0xe9, 0xe7, 0xda, 0xad, 0xe2, 0x26, 0xe2, 0x83, 0xd1, 0x43, 0x0f, 0xb6, 0x51, 0xbd, 0xf1, 0x5f, 0xa0, 0x2c, 0xcf, 0x80, 0x50, 0x27, 0xf7, 0xfc, 0x40, 0x66, 0x52, 0xe7, 0xcb, 0x24, 0x3b, 0x00, 0x3f, 0xc7, 0x91, 0x7c, 0x91, 0xc3, 0x0b, 0x06, 0x4f, 0xbc, 0xcc, 0x03, 0xd5, 0xeb, 0x38, 0x1a, 0xc4, 0xc2, 0x05, 0xf4, 0xb0, 0xd3, 0x95, 0x40, 0x19, 0xee, 0x83, 0xfb, 0x9d, 0x89, 0x7c, 0xee, 0x6b, 0x65, 0x50, 0x78, 0xfb, 0x6f, 0x48, 0x8d, 0xfd, 0xe5, 0xbb, 0xff, 0x8f, 0xb9, 0xdc, 0xfc, 0xb2, 0x3a, 0xd6, 0xd9, 0xff, 0xf1, 0x1b, 0x0d, 0x96, 0xc9, 0xf8, 0x81, 0x58, 0x74, 0x6e, 0x07, 0x56, 0x09, 0x3d, 0x27, 0x88, 0xf2, 0x41, 0x22, 0xc3, 0x05, 0x01, 0x31, 0xe5, 0xf1, 0x86, 0x0e, 0x53, 0xdc, 0x69, 0xb5, 0xa5, 0x4a, 0x30, 0x6c, 0x9f, 0x41, 0xdb, 0x01, 0x63, 0xab, 0xb9, 0x53, 0xe6, 0xfb, 0x80, 0x13, 0xa1, 0x13, 0x9d, 0xcc, 0x89, 0x65, 0xc9, 0x21, 0x40, 0x59, 0xdd, 0x57, 0x8d, 0xef, 0xe7, 0x13, 0x0a, 0xa6, 0x7d, 0x64, 0x1c, 0x9c, 0x51, 0x03, 0x28, 0xf6, 0x06, 0xda, 0x04, 0x82, 0x42, 0xc4, 0xac, 0x9b, 0x05, 0x94, 0x37, 0x4e, 0x39, 0x58, 0x09, 0xbb, 0x8a, 0xdf, 0x49, 0xbd, 0x77, 0x78, 0x96, 0xcd, 0xa9, 0xfd, 0xf5, 0x23, 0x84, 0x10, 0x0e, 0x1f, 0xfd, 0xa5, 0x99, 0xe8, 0xab, 0xc1, 0x13, 0x53, 0x20, 0x80, 0xb5, 0x06, 0x79, 0x5d, 0xa6, 0xdd, 0x34, 0xae, 0x70, 0x8c, 0x42, 0x6e, 0xb1, 0x86, 0x5d, 0x3f, 0x13, 0x1e, 0x9c, 0xaf, 0x7d, 0xec, 0x45, 0xbb, 0x8b, 0x73, 0xe2, 0x92, 0x3c, 0x00, 0x97, 0x9b, 0xeb, 0xd5, 0xb2, 0xb8, 0x81, 0x87, 0x84, 0xcd, 0xe8, 0xa5, 0x70, 0x7c, 0xc3, 0x9a, 0x41, 0x33, 0x5c, 0xd5, 0xc0, 0x69, 0xdd, 0x27, 0x87, 0x24, 0xc4, 0x6c, 0x10, 0xbf, 0x91, 0x6d, 0x11, 0xea, 0xc1, 0x05, 0x0c, 0xf2, 0x00, 0x83, 0x21, 0x43, 0x9b, 0x50, 0x28, 0x2b, 0x34, 0xd2, 0xfc, 0xe0, 0xb9, 0x8f, 0x19, 0xc5, 0x97, 0x96, 0x6a, 0xe9, 0x2a, 0x1b, 0x5c, 0xd0, 0x78, 0x61, 0x37, 0x77, 0x20, 0xdd, 0xae, 0x92, 0x8d, 0x98, 0xb5, 0x18, 0x6f, 0xd5, 0x92, 0x01, 0x6c, 0xf4, 0x37, 0x4f, 0x12, 0x96, 0xcf, 0x4b, 0x11, 0x02, 0x97, 0x11, 0xa7, 0xc7, 0xef, 0x4e, 0x5b, 0xa3, 0xb1, 0x49, 0xee, 0xa4, 0xc1, 0x20, 0x8f, 0x8d, 0xe5, 0x54, 0x4e, 0x7b, 0xd7, 0x88, 0xd3, 0xc8, 0x99, 0x86, 0x50, 0x30, 0x09, 0x83, 0xb4, 0x32, 0xb5, 0xa4, 0x22, 0xb9, 0xf0, 0xc1, 0xa1, 0xfc, 0x26, 0x68, 0x15, 0xa3, 0x6c, 0x25, 0x6e, 0x2b, 0x5b, 0x00, 0x1f, 0x8b, 0x1f, 0x48, 0xd1, 0x18, 0xcb, 0x8f, 0x59, 0xa6, 0xef, 0xf6, 0xe8, 0xf0, 0x6d, 0xab, 0x82, 0x3a, 0x88, 0xaf, 0xb2, 0x34, 0x3e, 0xdd, 0x7b, 0x22, 0xd8, 0x28, 0x91, 0x3a, 0xbf, 0x24, 0xca, 0x4d, 0x91, 0xc8, 0xcf, 0xaa, 0x74, 0x72, 0x17, 0x40, 0xab, 0x2b, 0x16, 0x02, 0x67, 0x2c, 0xb1, 0x90, 0xdf, 0xa2, 0xf6, 0x13, 0xa2, 0xaf, 0x0a, 0x68, 0x2c, 0xb1, 0x62, 0x82, 0xb8, 0xc6, 0x36, 0x09, 0x56, 0x90, 0x33, 0x47, 0x3d, 0x35, 0x71, 0x45, 0x62, 0xaa, 0xa4, 0x31, 0x4a, 0x32, 0x96, 0x03, 0x1c, 0x21, 0xd5, 0x61, 0xfa, 0xe6, 0xa8, 0xbf, 0x91, 0x48, 0x48, 0xca, 0xef, 0xf0, 0x4d, 0x07, 0x95, 0x28, 0x67, 0xb7, 0xce, 0xe2, 0x4e, 0xff, 0x3f, 0xfc, 0xfc, 0x45, 0xbe, 0xc2, 0x19, 0xdd, 0x68, 0xb5, 0xb7, 0xe5, 0xed, 0x8b, 0x3f, 0x6d, 0x2f, 0x76, 0xab, 0xdc, 0x0c, 0xa9, 0xf6, 0x8e, 0x77, 0x19, 0xd1, 0xc2, 0xce, 0x80, 0x98, 0xb4, 0x67, 0xa8, 0x84, 0x06, 0x6d, 0xe6, 0x22, 0x64, 0xea, 0xe4, 0x04, 0x68, 0x24, 0xa4, 0xb6, 0xbb, 0x2d, 0xc2, 0xf3, 0x7e, 0xb6, 0xfa, 0x19, 0xe8, 0x24, 0xe9, 0xdb, 0x30, 0xe6, 0x18, 0x36, 0xad, 0x05, 0x36, 0xa6, 0x3c, 0xfc, 0xa5, 0x99, 0xe2, 0xcb, 0x39, 0x24, 0xb2, 0x47, 0x3c, 0xf5, 0xf1, 0xb4, 0xb5, 0x89, 0x79, 0x95, 0xe9, 0x9f, 0x5b, 0xc3, 0x23, 0xec, 0xc8, 0xbd, 0xb1, 0x10, 0x32, 0x3f, 0x2f, 0xc9, 0xae, 0x16, 0x08, 0x66, 0x9d, 0x32, 0x39, 0x7f, 0x8b, 0xfd, 0x58, 0xe4, 0x57, 0xeb, 0xd5, 0xd3, 0x94, 0x52, 0x81, 0x6e, 0x30, 0x7d, 0x4c, 0x6b, 0x53, 0xfc, 0x53, 0x0e, 0x8a, 0x3d, 0x1a, 0x54, 0x25, 0x61, 0x15, 0x72, 0xde, 0x48, 0x6e, 0x7d, 0xbb, 0xee, 0x02, 0x6b, 0x35, 0xfb, 0xad, 0x3a, 0x99, 0x95, 0xc7, 0x6f, 0xaf, 0x79, 0xee, 0xc2, 0x9a, 0x4a, 0x06, 0x18, 0xff, 0x28, 0x7f, 0xb1, 0x69, 0x85, 0xd6, 0xa3, 0xec, 0x34, 0x5f, 0x87, 0x09, 0xc3, 0x41, 0x72, 0xd2, 0x0b, 0xc2, 0x27, 0x4e, 0x05, 0xc5, 0x8a, 0x1f, 0xe0, 0x90, 0x58, 0x62, 0x50, 0xd3, 0x16, 0xd7, 0x28, 0xe6, 0x47, 0x42, 0x2b, 0x53, 0xe2, 0x11, 0x1f, 0x94, 0x03, 0x3e, 0x24, 0x1e, 0xe1, 0x77, 0x44, 0x9e, 0x00, 0x7d, 0x4b, 0x82, 0xa8, 0xca, 0xd9, 0xbb, 0x95, 0x76, 0xb5, 0xc1, 0xf0, 0x5b, 0x64, 0xd8, 0x7e, 0x78, 0xfb, 0x93, 0x18, 0x93, 0x31, 0x96, 0x5b, 0x22, 0xb8, 0x9f, 0xa0, 0x6c, 0xce, 0xc8, 0x2e, 0xec, 0x0f, 0x06, 0xaf, 0xf6, 0x8d, 0xf6, 0xe1, 0x9d, 0x22, 0xd9, 0x8e, 0xd3, 0x05, 0xdc, 0xbe, 0xd2, 0x9c, 0x9e, 0x2b, 0xbb, 0x91, 0xec, 0xf5, 0x7d, 0x28, 0xcf, 0x97, 0xf9, 0xd0, 0xc8, 0x1a, 0x64, 0xf8, 0x5a, 0x89, 0xec, 0x23, 0xc9, 0xa4, 0x9e, 0x3f, 0x22, 0xd8, 0x87, 0x32, 0x7b, 0x6f, 0x19, 0xb7, 0x7c, 0x05, 0xd1, 0x68, 0x1e, 0x3b, 0x17, 0x1b, 0xb3, 0xaf, 0x66, 0x72, 0x27, 0x2b, 0xac, 0xae, 0x85, 0x1c, 0xf4, 0xc4, 0xbc, 0x46, 0x42, 0xb3, 0xa4, 0xb7, 0xbe, 0x14, 0x3c, 0xf9, 0x15, 0xf3, 0x36, 0x8c, 0x1d, 0xdd, 0xb5, 0x93, 0xb8, 0x3a, 0x55, 0xce, 0xfa, 0xde, 0x6c, 0xc8, 0x8e, 0xda, 0x8f, 0x52, 0x55, 0x98, 0x58, 0x2f, 0x51, 0x27, 0x67, 0x11, 0xc2, 0xd3, 0xa7, 0xc5, 0x8e, 0xf9, 0xd2, 0xaa, 0xe6, 0x19, 0x38, 0x67, 0x27, 0x2d, 0xbc, 0xdd, 0xfe, 0x39, 0x1f, 0x5b, 0xd0, 0x24, 0x81, 0x11, 0x59, 0xc6, 0x24, 0xc8, 0x93, 0x42, 0x74, 0xd0, 0xd9, 0x96, 0x44, 0x39, 0x4c, 0x70, 0x5b, 0x46, 0x76, 0x44, 0x2f, 0x1e, 0x2d, 0x9b, 0xf0, 0xc5, 0xba, 0xae, 0xc8, 0x4b, 0x3b, 0x33, 0x62, 0x43, 0x46, 0x77, 0xa9, 0x77, 0xcf, 0xad, 0xd2, 0xda, 0x4c, 0x85, 0x9c, 0xbe, 0x16, 0x01, 0xd6, 0x47, 0x13, 0x85, 0x22, 0x20, 0x92, 0x2d, 0xfa, 0x6c, 0x76, 0x62, 0xf0, 0x00, 0x97, 0xb0, 0x3a, 0xcf, 0x65, 0xd2, 0x6d, 0xa5, 0xcf, 0x0f, 0x89, 0x19, 0x63, 0xca, 0x36, 0xbd, 0xb6, 0x54, 0x4d, 0x97, 0x06, 0x04, 0x9a, 0xd5, 0x1e, 0x8a, 0xe1, 0xbc, 0x7a, 0x80, 0x1e, 0xe2, 0xac, 0x42, 0x11, 0x9d, 0xfe, 0x00, 0xfa, 0xbb, 0x59, 0x11, 0xa2, 0x73, 0x65, 0x8a, 0x9a, 0x9c, 0xf2, 0x10, 0xc7, 0x1d, 0x97, 0xea, 0x1f, 0xa5, 0x98, 0x5a, 0xad, 0x9c, 0x0d, 0x2e, 0xdb, 0x59, 0x41, 0x92, 0xf0, 0x95, 0x59, 0x28, 0xd8, 0x1f, 0x36, 0x5b, 0x24, 0xd2, 0x9c, 0xf0, 0x51, 0xc5, 0x93, 0xdd, 0x4d, 0xc1, 0x0d, 0x5f, 0x37, 0xf8, 0xca, 0x47, 0x66, 0xf3, 0x79, 0x94, 0xae, 0xcd, 0x20, 0x47, 0xde, 0x9f, 0xbd, 0x73, 0x8d, 0x3b, 0x2e, 0x94, 0x17, 0x1d, 0x4e, 0x21, 0xe2, 0x9e, 0x61, 0x65, 0xe6, 0x6b, 0xb2, 0x8a, 0x6c, 0x36, 0x7a, 0xf7, 0x15, 0xab, 0x04, 0xdc, 0x1f, 0xa6, 0x0f, 0x0a, 0xe4, 0xa3, 0x74, 0x09, 0xa3, 0x76, 0x08, 0x64, 0x83, 0x3c, 0xc4, 0x48, 0xd5, 0x91, 0x23, 0x4d, 0x9a, 0x03, 0xcc, 0x94, 0x45, 0xc7, 0x71, 0x12, 0xc2, 0xab, 0xf7, 0x2b, 0xb6, 0x4c, 0xd7, 0x83, 0x09, 0x89, 0xc4, 0x11, 0xa2, 0x37, 0x8e, 0x75, 0x71, 0x16, 0x46, 0x8b, 0xb3, 0x04, 0xa3, 0x40, 0x71, 0x71, 0xa4, 0xa4, 0x4a, 0x13, 0x77, 0x41, 0x73, 0xdb, 0x9a, 0xac, 0xfc, 0x27, 0x40, 0x59, 0x55 ],
+const [ 0xf7, 0xa5, 0x09, 0x8b, 0x2a, 0x4d, 0x92, 0xa7, 0xe7, 0x1e, 0x46, 0x58, 0xb4, 0x58, 0xf4, 0x7a, 0x0b, 0x5e, 0x04, 0x27, 0xad, 0xb9, 0x67, 0xda, 0x3a, 0x60, 0xce, 0xd4, 0xff, 0x36, 0x1a, 0xbf, 0x0f, 0xd5, 0x14, 0x92, 0x95, 0x8a, 0x5f, 0xb4, 0x68, 0xa0, 0xab, 0x64, 0xe0, 0xe2, 0x2a, 0x58, 0xe9, 0x5b, 0x48, 0xa4, 0x55, 0x60, 0x97, 0xde, 0x77, 0xd1, 0x08, 0x80, 0xed, 0x9b, 0x61, 0x8d, 0xbd, 0x81, 0xeb, 0x78, 0xa4, 0x1d, 0x6b, 0x41, 0xaa, 0x21, 0x54, 0xe1, 0xfa, 0xe3, 0x3b, 0xe8, 0xf1, 0x19, 0x8b, 0x65, 0x75, 0xe0, 0x7a, 0x06, 0x88, 0x04, 0x3c, 0x80, 0x1c, 0x7b, 0x76, 0x31, 0x29, 0x32, 0xf5, 0x04, 0xfe, 0x0d, 0xa0, 0x96, 0xd5, 0x29, 0xab, 0x97, 0xa9, 0x64, 0x0e, 0x72, 0x4c, 0x1f, 0x36, 0x30, 0xb4, 0x42, 0xfa, 0x99, 0x95, 0x81, 0xd0, 0x9d, 0x36, 0xde, 0x41, 0xf3, 0x7d, 0x6f, 0x9a, 0x00, 0x4b, 0x62, 0xe5, 0xfa, 0x10, 0x3e, 0x17, 0x4d, 0x96, 0x6b, 0x8b, 0x3e, 0x21, 0xf5, 0xaf, 0xce, 0xba, 0x8d, 0xfe, 0xe1, 0xc8, 0xd1, 0x2e, 0x9f, 0xe0, 0xcd, 0xaa, 0x1b, 0xde, 0xc1, 0x42, 0x32, 0x35, 0x24, 0x21, 0xb7, 0x83, 0xea, 0x00, 0xcd, 0x69, 0x03, 0x9a, 0x93, 0x99, 0x24, 0x60, 0x07, 0x30, 0xc9, 0x6d, 0x24, 0x47, 0x7b, 0xbc, 0x4e, 0xc4, 0x4e, 0x99, 0xf0, 0x76, 0xaf, 0x55, 0x64, 0x62, 0x5c, 0x3e, 0x13, 0x57, 0xb4, 0xce, 0xdd, 0xc9, 0x31, 0x23, 0xbb, 0xdc, 0x33, 0xaf, 0xa2, 0xbe, 0xff, 0x31, 0xab, 0x3a, 0x07, 0xe4, 0x72, 0x8a, 0x6c, 0xf6, 0xbb, 0x6d, 0xc1, 0x3b, 0x5c, 0x7a, 0x12, 0x23, 0x57, 0xb4, 0x24, 0xea, 0x46, 0x5e, 0xff, 0x0e, 0xfc, 0x11, 0xaa, 0x06, 0x69, 0x0b, 0x36, 0x31, 0xbe, 0xca, 0xfd, 0x0d, 0xd2, 0xda, 0x2c, 0xa9, 0xc4, 0xeb, 0x7f, 0x5d, 0xe3, 0x26, 0x4c, 0xb8, 0xca, 0xc1, 0xc3, 0xba, 0xcf, 0xd1, 0x74, 0x43, 0x9f, 0x60, 0x12, 0xcc, 0x22, 0xc0, 0x76, 0x55, 0xa5, 0x1e, 0xe6, 0x9e, 0x37, 0x5a, 0x98, 0x9a, 0x53, 0x17, 0x72, 0x21, 0xc0, 0x0e, 0x14, 0xe5, 0xb6, 0xa7, 0x18, 0xa7, 0x42, 0xca, 0x98, 0xab, 0xeb, 0xf2, 0xf1, 0x69, 0x96, 0x84, 0xc7, 0x85, 0xa7, 0x60, 0x4a, 0x01, 0x69, 0xb5, 0xb7, 0xb2, 0xb0, 0x19, 0x21, 0xf0, 0xbd, 0xd9, 0x71, 0x92, 0x61, 0x8d, 0xac, 0x1a, 0x66, 0xf0, 0x74, 0x2c, 0x2a, 0xef, 0xd2, 0x45, 0x8d, 0x00, 0x32, 0xa9, 0x0d, 0xb5, 0xaf, 0x9d, 0x30, 0x91, 0x91, 0xd7, 0x23, 0x1a, 0x14, 0x33, 0xa0, 0x2f, 0x6c, 0xa7, 0x14, 0x9c, 0x05, 0x79, 0x02, 0xec, 0x0f, 0xaf, 0xa2, 0x7f, 0x3a, 0xc8, 0xcf, 0xdc, 0xbe, 0xa9, 0x20, 0x47, 0x9f, 0xda, 0x54, 0x97, 0x2f, 0xf2, 0xf3, 0x42, 0xd4, 0x50, 0x32, 0xba, 0x0b, 0x0c, 0x17, 0xfc, 0xad, 0x2d, 0xdf, 0x65, 0x72, 0x1d, 0x9d, 0xc8, 0xb3, 0x5a, 0x23, 0xbf, 0x74, 0x6d, 0x25, 0x3e, 0xa1, 0x20, 0x9c, 0x6e, 0x98, 0xec, 0x69, 0xb8, 0xe8, 0xb1, 0x3b, 0x1f, 0x58, 0xaa, 0xb2, 0xd4, 0x2c, 0x9f, 0xc5, 0x04, 0xa3, 0x5c, 0x61, 0xf5, 0xc4, 0x63, 0x52, 0x51, 0x5a, 0xde, 0x67, 0xc2, 0x3e, 0xd7, 0xd1, 0xbe, 0xd4, 0xab, 0xcd, 0xa5, 0xd8, 0xbc, 0x83, 0x09, 0x5b, 0x67, 0x2d, 0x4c, 0x08, 0x36, 0x7b, 0x71, 0xac, 0x56, 0x36, 0x2c, 0xf6, 0x4b, 0x25, 0x3b, 0x7b, 0xe2, 0x2d, 0xf9, 0xfc, 0x67, 0xbb, 0x31, 0xec, 0x19, 0x67, 0x30, 0x2d, 0xdb, 0xd1, 0x1e, 0x1b, 0x2c, 0xcf, 0x8e, 0xcb, 0x59, 0xcb, 0x53, 0x94, 0xf1, 0x66, 0x95, 0xcf, 0x7a, 0x61, 0x25, 0xdc, 0x62, 0xbe, 0x0e, 0x66, 0x39, 0x22, 0x6d, 0xe7, 0x1d, 0x7e, 0x82, 0x6e, 0x75, 0xee, 0x06, 0xa0, 0xe2, 0xe2, 0xbf, 0xfc, 0x72, 0x7b, 0x53, 0x64, 0x17, 0x38, 0x5a, 0xd9, 0x58, 0xd1, 0xb6, 0x87, 0x47, 0x63, 0x27, 0x01, 0xb3, 0xce, 0x1a, 0xcd, 0x9e, 0x5b, 0xc2, 0x23, 0xf1, 0xa3, 0x6a, 0xf2, 0x6f, 0xac, 0x0a, 0x24, 0xe8, 0x54, 0x18, 0x23, 0xaf, 0xf3, 0xa0, 0x9c, 0x4e, 0x3c, 0x97, 0x83, 0x77, 0x64, 0x6d, 0x57, 0x3e, 0x87, 0xe1, 0xa7, 0x86, 0x47, 0x19, 0xd5, 0xb9, 0xb6, 0xf2, 0x1a, 0xbd, 0x76, 0x95, 0xca, 0x23, 0x1e, 0x4b, 0xd9, 0xa1, 0xe0, 0x92, 0x9f, 0xc2, 0x69, 0x70, 0xd8, 0xdc, 0x09, 0x07, 0xef, 0x43, 0x14, 0x6a, 0x7c, 0xbc, 0x88, 0xaf, 0x0b, 0x34, 0xef, 0x45, 0x1f, 0xb2, 0x87, 0x88, 0x76, 0x8b, 0xa1, 0x93, 0x8f, 0xd5, 0x47, 0x55, 0x6a, 0x1d, 0x21, 0xe8, 0x8f, 0x5d, 0x9a, 0x1d, 0x51, 0x28, 0x3e, 0x5c, 0x54, 0x28, 0x66, 0xab, 0x4d, 0xca, 0x18, 0x0c, 0x09, 0x38, 0x29, 0x0c, 0xb1, 0x88, 0xa4, 0x99, 0x4c, 0x32, 0x70, 0x14, 0x85, 0xc8, 0x2c, 0xa7, 0xae, 0xe1, 0x5e, 0xd9, 0x06, 0x57, 0xcd, 0x5f, 0x37, 0xb2, 0x2b, 0x35, 0x23, 0xe3, 0xf7, 0xee, 0xe0, 0x36, 0xa2, 0x49, 0x01, 0x82, 0xf1, 0x04, 0x18, 0xa2, 0xa2, 0xf5, 0x79, 0x29, 0x52, 0x56, 0x40, 0x52, 0x9e, 0x61, 0x95, 0x36, 0x89, 0x1d, 0x2e, 0x42, 0x1d, 0x77, 0x16, 0xe7, 0x56, 0x94, 0xad, 0x93, 0x3b, 0x66, 0xf1, 0xe1, 0x4e, 0x7d, 0xfb, 0x0d, 0x26, 0x20, 0xcc, 0xaa, 0x5b, 0x9d, 0x4a, 0x97, 0xa2, 0xdd, 0x86, 0x2f, 0x39, 0x3b, 0x40, 0xc0, 0x86, 0x96, 0xad, 0x3e, 0xfb, 0xa5, 0x78, 0x39, 0x3c, 0x8b, 0x06, 0x0d, 0x84, 0xac, 0xfe, 0x59, 0x45, 0xbe, 0x09, 0xb2, 0x0e, 0x23, 0xd6, 0x98, 0xb2, 0x76, 0x62, 0xa8, 0xa7, 0x64, 0x76, 0x14, 0xac, 0xbd, 0x71, 0x51, 0xae, 0xca, 0x47, 0x0f, 0xed, 0xe2, 0xca, 0x6e, 0x5b, 0x38, 0x28, 0x6f, 0x44, 0xf7, 0xb5, 0xa8, 0x34, 0x91, 0xeb, 0x3d, 0x16, 0x53, 0xaf, 0x0b, 0x99, 0x3e, 0xd6, 0x26, 0xd8, 0x12, 0xe8, 0x86, 0x39, 0xab, 0x24, 0xfd, 0x95, 0x90, 0xc4, 0x6c, 0x9a, 0xca, 0x82, 0x37, 0x6e, 0xf2, 0x5a, 0xf6, 0x95, 0x8e, 0x92, 0x6e, 0x15, 0x9e, 0xf8, 0xbf, 0xd8, 0x71, 0x6b, 0xde, 0x51, 0xbd, 0x9c, 0x46, 0x63, 0xef, 0x16, 0xeb, 0x7e, 0xc0, 0x7c, 0x70, 0x0b, 0x09, 0x12, 0x99, 0x0a, 0xd8, 0x7f, 0x03, 0xf9, 0xc3, 0xd2, 0x13, 0xf8, 0x7c, 0xc2, 0x2c, 0x2c, 0xa6, 0x3a, 0x25, 0x61, 0xe7, 0x15, 0xfa, 0xf3, 0x3f, 0x26, 0xc1, 0xee, 0x98, 0x7b, 0xe0, 0x74, 0x9e, 0xe2, 0x7e, 0x5f, 0xd0, 0xad, 0x37, 0x28, 0xd7, 0xb3, 0x14, 0x08, 0x17, 0x97, 0xba, 0x5c, 0x85, 0x4d, 0xe1, 0x4e, 0xb8, 0xd9, 0x08, 0xb2, 0x42, 0x5a, 0x67, 0x2e, 0x40, 0x48, 0x26, 0x9e, 0x30, 0xfa, 0xcc, 0xb6, 0x03, 0x6b, 0xfa, 0xe9, 0x73, 0x3d, 0x59, 0x8a, 0x97, 0xfe, 0xd1, 0x32, 0xb5, 0xab, 0xfc, 0x61, 0x57, 0x72, 0xda, 0x68, 0xa1, 0xbc, 0xc6, 0x86, 0xe1, 0x6b, 0xa8, 0x51, 0x68, 0x60, 0x6d, 0x57, 0x99, 0x41, 0xb4, 0x06, 0x3f, 0x79, 0xca, 0xc9, 0x24, 0x80, 0xd9, 0x74, 0xdf, 0x5c, 0x5c, 0xe2, 0xed, 0x68, 0xd6, 0xdc, 0x03, 0x54, 0xc4, 0x3d, 0xa3, 0x6d, 0xd0, 0x54, 0xee, 0x1e, 0x47, 0x8a, 0xb9, 0xb7, 0xcd, 0x45, 0xe2, 0x6e, 0x50, 0x0c, 0xe4, 0xa4, 0x3a, 0xeb, 0xaa, 0x69, 0xeb, 0x19, 0xa1, 0x41, 0x66, 0xd8, 0x11, 0x28, 0x4a, 0x9d, 0xad, 0xd5, 0x05, 0x71, 0x69, 0x3c, 0x44, 0x97, 0x8b, 0x56, 0xad, 0x6f, 0x05, 0x24, 0xd1, 0x9a, 0x02, 0xf2, 0x5c, 0x5f, 0xbf, 0xd9, 0x8f, 0x4d, 0x9c, 0x87, 0xf1, 0x22, 0x73, 0x43, 0x41, 0xec, 0x28, 0x2b, 0xae, 0x6e, 0x81, 0xc0, 0x4b, 0xc5, 0x38, 0xa5, 0xbd, 0x4c, 0x4f, 0xa4, 0x36, 0xbc, 0xa4, 0xf2, 0xa8, 0x98, 0xc5, 0xb4, 0x32, 0xc8, 0x05, 0xc1, 0xdf, 0x83, 0xd0, 0xaa, 0x8f, 0x73, 0x3b, 0xf8, 0x35, 0x14, 0xdf, 0xb4, 0x43, 0x5e, 0xe8, 0x2d, 0x63, 0xa3, 0x69, 0xf5, 0x68, 0xba, 0xf3, 0x2d, 0x84, 0x5d, 0x65, 0x02, 0xbb, 0xd0, 0x05, 0x78, 0x97, 0xc3, 0xd0, 0x67, 0x1e, 0x7a, 0x0f, 0xc2, 0x01, 0x2b, 0x2b, 0x1f, 0x16, 0xa8, 0xc2, 0x74, 0x08, 0x3d, 0xfa, 0x1f, 0x4e, 0xdc, 0x16, 0x2a, 0x59, 0x77, 0x47, 0xcc, 0x12, 0xae, 0xc4, 0x33, 0x83, 0xaa, 0x1c, 0x80, 0xd4, 0x49, 0xcb, 0x14, 0x7a, 0x7b, 0x0c, 0x0a, 0xab, 0xec, 0xef, 0x04, 0x15, 0xe3, 0xab, 0x2b, 0xcf, 0x6a, 0x35, 0x71, 0x90, 0xaf, 0x12, 0x1a, 0x1f, 0xaa, 0x69, 0x7a, 0x0a, 0x00, 0x5c, 0x00, 0x9b, 0x27, 0x98, 0x73, 0x08, 0xcb, 0x2b, 0x7c, 0xea, 0x71, 0x97, 0x65, 0xf0, 0x5b, 0x24, 0x20, 0xd5, 0xab, 0x7a, 0x8b, 0x8f, 0xcb, 0x6e, 0xf2, 0xca, 0x0b, 0x1d, 0xd5, 0x94, 0x8c, 0x37, 0xec, 0x5a, 0x5e, 0x9e, 0x69, 0x13, 0xe5, 0x30, 0x7d, 0xbb, 0x81, 0xe0, 0x1d, 0x03, 0x6d, 0x0c, 0x06, 0x47, 0xe8, 0x0b, 0xff, 0xc0, 0x93, 0x05, 0x5e, 0xfb, 0x1b, 0x07, 0xcd, 0x89, 0x17, 0x56, 0x4e, 0xf9, 0x34, 0x04, 0x7d, 0x03, 0x8f, 0xc2, 0x15, 0x06, 0x62, 0xf5, 0xb6, 0xb5, 0xe3, 0x0c, 0xe6, 0x0c, 0x69, 0x10, 0x55, 0x8a, 0xd1, 0x7c, 0x65, 0x9a, 0x20, 0x50, 0xe9, 0x52, 0x69, 0x61, 0x2d, 0x5f, 0xf2, 0xf3, 0x38, 0x40, 0x92, 0x89, 0x4d, 0xb3, 0x5d, 0xfc, 0xb8, 0x6d, 0x84, 0xcb, 0xc7, 0x0e, 0x76, 0xb2, 0x16, 0x54, 0x4b, 0x7e, 0x0f, 0x8f, 0x63, 0x1f, 0xb2, 0x55, 0x4a, 0xff, 0x92, 0x76, 0xdf, 0x92, 0x20, 0x32, 0xb6, 0x2f, 0x2c, 0xaa, 0xba, 0x1e, 0xa9, 0x95, 0x17, 0xf2, 0xb1, 0x34, 0x57, 0x18, 0xc9, 0x88, 0xca, 0xb1, 0x65, 0xc2, 0x2c, 0x9d, 0xaf, 0xfb, 0x82, 0xd8, 0x84, 0x25, 0x45, 0x0a, 0xbf, 0x42, 0xc2, 0x59, 0xbb, 0xd4, 0xc1, 0x82, 0x13, 0x94, 0x65, 0x28, 0xac, 0x66, 0x53, 0x6c, 0xf6, 0x8d, 0x16, 0xbd, 0x6e, 0x1b, 0xc3, 0xf1, 0x68, 0xac, 0xd8, 0x95, 0x0b, 0x54, 0x6a, 0x82, 0x9d, 0xd6, 0x80, 0xb1, 0x01, 0x17, 0xba, 0x51, 0x7d, 0xd2, 0x36, 0x16, 0xc1, 0x8c, 0xb3, 0xd3, 0x25, 0xcb, 0xf7, 0x4b, 0x33, 0x83, 0x6f, 0x45, 0x65, 0xd1, 0x16, 0xde, 0x2f, 0xeb, 0x97, 0x23, 0x40, 0x58, 0xb6, 0xdf, 0x06, 0x5c, 0xec, 0xb2, 0x70, 0xb7, 0x51, 0x63, 0xf7, 0x8f, 0xc0, 0x77, 0xdf, 0xaa, 0x35, 0x03, 0xba, 0xe0, 0x79, 0xbe, 0x2f, 0xd0, 0x02, 0x5a, 0xf9, 0xd3, 0x14, 0x15, 0x32, 0x2e, 0x2d, 0x8b, 0xd2, 0x8c, 0xa0, 0xce, 0x73, 0xab, 0x80, 0xb8, 0x57, 0x55, 0xbf, 0x80, 0xab, 0x92, 0x97, 0x8c, 0x0d, 0x1c, 0x29, 0x86, 0x4d, 0x13, 0x65, 0xb2, 0x70, 0xf2, 0x29, 0x7f, 0xfb, 0xc2, 0xad, 0x5c, 0x6e, 0x8d, 0x1e, 0xcc, 0x0e, 0x16, 0x89, 0xbd, 0xe7, 0xc7, 0xfb, 0x16, 0x12, 0xeb, 0xe7, 0x8f, 0x34, 0x1d, 0xc7, 0xc5, 0x47, 0x00, 0x06, 0x8e, 0x9d, 0x31, 0x1e, 0x89, 0x21, 0x7a, 0xfe, 0xfa, 0xe1, 0x49, 0xae, 0xd5, 0xc9, 0x60, 0x35, 0x19, 0xb1, 0xcd, 0xbb, 0x5f, 0x9b, 0x1d, 0xeb, 0xb3, 0x35, 0xcd, 0x9b, 0xa2, 0xa6, 0x01, 0xaf, 0x94, 0x86, 0x78, 0x3a, 0x5d, 0x2e, 0xc0, 0xe7, 0x0e, 0x33, 0xa6, 0x98, 0x11, 0x2d, 0xf1, 0x4c, 0x75, 0xbd, 0x50, 0x46, 0x86, 0xce, 0x90, 0x6c, 0xa1, 0x1a, 0x12, 0xed, 0x46, 0xf0, 0x7d, 0x26, 0x6f, 0x35, 0xb0, 0xc7, 0x20, 0xaa, 0xfb, 0x31, 0x40, 0x6c, 0x8e, 0x23, 0xa7, 0xc1, 0x31, 0x96, 0x78, 0x11, 0x36, 0xe5, 0xb1, 0x33, 0xac, 0x31, 0x00, 0xeb, 0xd6, 0x04, 0xd9, 0xb0, 0xdc, 0x34, 0xc5, 0xb2, 0xbf, 0x0b, 0xfd, 0x1b, 0x92, 0xa4, 0x37, 0x95, 0xe8, 0x98, 0xc0, 0x0d, 0x89, 0xdb, 0xcb, 0xb7, 0x69, 0xe0, 0x09, 0x53, 0xda, 0x04, 0x79, 0xae, 0x00, 0x29, 0x82, 0x6b, 0x85, 0xa1, 0x3f, 0x03, 0x8f, 0x4f, 0x1a, 0x0b, 0xef, 0x08, 0x9c, 0xb6, 0x9c, 0x3f, 0x83, 0x9a, 0x5f, 0xe2, 0x15, 0xb7, 0xcf, 0x7f, 0xb5, 0xb5, 0x80, 0xab, 0xb4, 0x6d, 0x78, 0xa4, 0x69, 0xab, 0xe2, 0x35, 0x84, 0x32, 0x07, 0xda, 0x9f, 0x01, 0x79, 0x25, 0x16, 0xd5, 0x91, 0x60, 0x19, 0xef, 0x1c, 0x74, 0xff, 0x17, 0x52, 0x0a, 0xdd, 0xe1, 0x08, 0xef, 0x58, 0x2f, 0x26, 0xbd, 0xb7, 0xf7, 0x5a, 0xb8, 0x3d, 0x47, 0x0e, 0xf6, 0xb5, 0x86, 0x98, 0xc3, 0x4e, 0xfc, 0xb1, 0x43, 0xa9, 0x95, 0x29, 0x59, 0x31, 0xe1, 0xd9, 0xc8, 0xab, 0x60, 0xd8, 0x98, 0x0d, 0xfd, 0xf2, 0xbc, 0x94, 0xd8, 0x55, 0xf1, 0x11, 0x48, 0x8e, 0xe9, 0x84, 0x21, 0xb4, 0xa9, 0xeb, 0x32, 0xe3, 0x30, 0x5c, 0x12, 0xec, 0x59, 0x52, 0x1d, 0x4b, 0x02, 0x45, 0xb9, 0x5a, 0x6e, 0x7d, 0xde, 0xc4, 0xe8, 0x27, 0xd5, 0x3b, 0xa9, 0xa9, 0x3f, 0x6e, 0xfc, 0x33, 0x5a, 0x35, 0xa0, 0x96, 0x80, 0x0f, 0x6e, 0x5a, 0xf0, 0xcf, 0x3b, 0x0a, 0xd1, 0x92, 0x00, 0xd3, 0x74, 0xf4, 0x39, 0x4e, 0xda, 0x84, 0x8a, 0x99, 0x76, 0x75, 0xa8, 0xac, 0x33, 0x96, 0x77, 0xea, 0xb9, 0x84, 0x70, 0xf7, 0xec, 0x1d, 0x46, 0xca, 0xb6, 0x39, 0xc9, 0x03, 0x07, 0x95, 0x0a, 0x7e, 0x1a, 0x10, 0xc0, 0x28, 0xf9, 0x1a, 0xea, 0x11, 0x43, 0x69, 0xb6, 0xc3, 0x2d, 0xed, 0xa2, 0xd3, 0xc7, 0x07, 0xe1, 0xb5, 0x81, 0xf6, 0x00, 0xd4, 0xed, 0x92, 0xc9, 0xe2, 0xc6, 0x3c, 0x68, 0x6d, 0x32, 0x15, 0xcc, 0xb4, 0x44, 0x6e, 0x50, 0xb8, 0xc5, 0x80, 0x9b, 0x96, 0x34, 0x5d, 0xc4, 0x13, 0x0b, 0x27, 0xba, 0x79, 0x44, 0x80, 0xe4, 0xa2, 0x1c, 0x41, 0x04, 0x52, 0x17, 0x6f, 0x61, 0xca, 0x44, 0x6b, 0x25, 0x99, 0xc2, 0x68, 0x04, 0xb6, 0x83, 0x22, 0x1e, 0xcc, 0x50, 0xce, 0x27, 0xd5, 0x0d, 0x4c, 0xc5, 0xea, 0x3f, 0xa4, 0x39, 0x59, 0xcb, 0xb0, 0x42, 0xf9, 0x00, 0x16, 0x3e, 0xba, 0xd8, 0x7a, 0x93, 0x80, 0x7b, 0xf1, 0x4d, 0x32, 0x05, 0xb8, 0x09, 0x0d, 0x89, 0x26, 0x11, 0x3f, 0x56, 0xdf, 0xc8, 0xb1, 0x79, 0x4b, 0x49, 0x24, 0x83, 0x46, 0x4b, 0x7f, 0x8c, 0x19, 0x48, 0x67, 0x77, 0xa9, 0xde, 0x11, 0x78, 0xef, 0x75, 0x54, 0xd4, 0xa8, 0x22, 0x03, 0xe8, 0x4e, 0xcb, 0x79, 0x6d, 0x46, 0x8c, 0x75, 0xfa, 0x5b, 0x5a, 0x29, 0xca, 0x6b, 0xe6, 0x8d, 0xc0, 0x60, 0xc4, 0xf9, 0xa8, 0x62, 0xcd, 0xf3, 0xc0, 0x4c, 0xc2, 0x46, 0x77, 0x5c, 0x32, 0x54, 0x74, 0x2e, 0x9d, 0xac, 0xda, 0xeb, 0xd9, 0xdf, 0xcb, 0xbe, 0xb5, 0x90, 0x2b, 0x87, 0xdd, 0xcb, 0xa6, 0xd4, 0xfd, 0x98, 0xf4, 0x0d, 0x29, 0xcf, 0x5b, 0xee, 0x7d, 0x2d, 0x76, 0x3a, 0x00, 0xa8, 0x36, 0xae, 0xce, 0x00, 0x26, 0x34, 0x77, 0x97, 0xf3, 0x5a, 0xa2, 0x82, 0x2b, 0x02, 0xf6, 0xe0, 0x45, 0x5b, 0x3a, 0x6a, 0xe2, 0x10, 0xba, 0x4c, 0x52, 0xbf, 0xed, 0x34, 0x5a, 0xac, 0x56, 0xa8, 0x34, 0xb7, 0xa8, 0x9c, 0xd8, 0x8b, 0x2d, 0x44, 0x7a, 0x19, 0x68, 0x27, 0x54, 0x45, 0xfa, 0x75, 0xa5, 0xde, 0xc2, 0x9a, 0xfa, 0xd4, 0x48, 0x13, 0xac, 0xa5, 0x5c, 0x80, 0xaa, 0x19, 0xfa, 0xfb, 0x78, 0x2f, 0x71, 0xa9, 0x78, 0x57, 0xc4, 0x8e, 0x69, 0xe1, 0x51, 0xa6, 0x2d, 0xb6, 0xb0, 0x31, 0xcf, 0x46, 0xde, 0x4e, 0xc4, 0xc1, 0x9b, 0xcb, 0x71, 0x8a, 0x10, 0x3c, 0xee, 0xe9, 0xb5, 0x4a, 0x0a, 0x00, 0x72, 0x4e, 0x8f, 0x00, 0x05, 0x1f, 0xc7, 0x9c, 0xa3, 0x27, 0x3e, 0xbe, 0xe2, 0xbd, 0xca, 0x79, 0xd6, 0xaf, 0xc9, 0x40, 0x7a, 0x1d, 0xaa, 0x55, 0x52, 0x8e, 0xaf, 0x83, 0x4f, 0x3d, 0xf0, 0x10, 0xf3, 0xb4, 0xa4, 0xee, 0xb5, 0x9c, 0x9c, 0x31, 0xa7, 0xd4, 0x10, 0xc6, 0x56, 0xc0, 0x9e, 0x61, 0xf2, 0xe4, 0x90, 0xb7, 0xaf, 0xb1, 0x5e, 0xee, 0x6a, 0x9e, 0x73, 0x51, 0x90, 0x7b, 0x34, 0x49, 0x3c, 0x02, 0x3f, 0x88, 0x9f, 0xb0, 0xf0, 0x88, 0xa5, 0xd3, 0x2a, 0x34, 0xd5, 0xe3, 0x54, 0xe5, 0x7a, 0x15, 0xa1, 0x8f, 0x00, 0x2e, 0x95, 0x3d, 0xa0, 0x95, 0xc5, 0xba, 0x40, 0xad, 0xde, 0x91, 0x94, 0x61, 0xe8, 0x38, 0x8a, 0x01, 0xcc, 0x89, 0xe5, 0x4c, 0x14, 0x71, 0x27, 0xce, 0xf3, 0xec, 0xb5, 0x6c, 0x85, 0x31, 0x36, 0x3d, 0x57, 0x29, 0x3c, 0x9b, 0x2a, 0x26, 0x26, 0x7a, 0xf4, 0xd2, 0x45, 0xf9, 0x28, 0x66, 0x3d, 0x37, 0x37, 0x1c, 0xae, 0x68, 0x57, 0xe6, 0x14, 0x28, 0x83, 0x60, 0xec, 0x0e, 0xc3, 0x03, 0x19, 0x85, 0xad, 0x9c, 0x85, 0xd7, 0x2c, 0xfd, 0x0b, 0x8b, 0x80, 0xf3, 0x95, 0xf1, 0x86, 0x78, 0x81, 0xfb, 0x3a, 0x29, 0x4a, 0x4e, 0x7a, 0xfa, 0x64, 0x99, 0x0d, 0x28, 0x67, 0x26, 0xe3, 0x6f, 0x70, 0xaf, 0x9e, 0x7e, 0xc4, 0x72, 0x52, 0xa8, 0xb7, 0x87, 0x89, 0xdc, 0xcd, 0x72, 0x8b, 0xd7, 0x1e, 0xf5, 0xdc, 0x98, 0xff, 0x28, 0x05, 0x14, 0xde, 0xcb, 0x97, 0x2c, 0x6e, 0xda, 0x6e, 0xdc, 0x05, 0x62, 0x33, 0xb5, 0x42, 0x94, 0x24, 0x8d, 0xf2, 0x17, 0x18, 0x75, 0x34, 0xa3, 0xbd, 0xeb, 0xdc, 0xcc, 0x25, 0x51, 0x16, 0x1b, 0x81, 0x9e, 0x4c, 0x63, 0x2c, 0x54, 0x49, 0x52, 0xeb, 0xb2, 0x9e, 0x47, 0x73, 0x2a, 0x44, 0x63, 0x2b, 0x15, 0x84, 0xe3, 0x34, 0xa6, 0x14, 0xad, 0xa7, 0x1c, 0x83, 0x28, 0x1d, 0x3c, 0xd6, 0x51, 0x75, 0xff, 0x74, 0x0c, 0xd1, 0x88, 0x3f, 0xb7, 0xe2, 0x58, 0x04, 0x05, 0x66, 0xc5, 0x15, 0x0a, 0xee, 0xa8, 0x34, 0x92, 0xe5, 0x57, 0xb3, 0xb7, 0xce, 0xd3, 0xda, 0xb3, 0xcd, 0x42, 0x89, 0xf2, 0x69, 0x9f, 0x1e, 0x6c, 0x90, 0xb0, 0x99, 0x31, 0xdb, 0x38, 0xff, 0x45, 0x14, 0x6f, 0xfc, 0xaf, 0xf6, 0xaf, 0xcb, 0xcd, 0x33, 0x70, 0x5b, 0xea, 0xbc, 0x76, 0xaa, 0x12, 0x3c, 0x49, 0x75, 0x25, 0xe5, 0xe6, 0x14, 0x2b, 0x70, 0xb4, 0xa0, 0xe7, 0x5f, 0xb9, 0x56, 0xaf, 0x86, 0x0e, 0x40, 0x7b, 0xc9, 0x90, 0x12, 0x3b, 0x27, 0xd9, 0x52, 0x6e, 0xf8, 0x6f, 0xbb, 0xf0, 0x72, 0x3a, 0xe4, 0x13, 0x72, 0x3c, 0x1d, 0xf2, 0x7a, 0x7c, 0x99, 0x02, 0xf5, 0x43, 0xd3, 0xea, 0xc3, 0x8b, 0x2a, 0x95, 0xf1, 0xb5, 0xce, 0x85, 0xc8, 0x7a, 0xe0, 0x6a, 0x0a, 0x24, 0xd5, 0xf3, 0x78, 0xfe, 0x1c, 0xe4, 0x97, 0x09, 0x00, 0x69, 0xb4, 0xf0, 0xcf, 0xa9, 0x26, 0x3e, 0x3c, 0x9f, 0xd3, 0xcf, 0x02, 0x25, 0xf6, 0x84, 0xca, 0x52, 0x1f, 0x3b, 0x4f, 0x06, 0x7b, 0xff, 0xc0, 0xc3, 0x55, 0x7b, 0x66, 0xbf, 0xdd, 0xb5, 0x86, 0x37, 0x28, 0xf9, 0x89, 0x05, 0x79, 0x12, 0x5a, 0x75, 0xbf, 0xc1, 0x10, 0x55, 0x5e, 0x67, 0xcd, 0x4b, 0x32, 0x05, 0xe5, 0x6c, 0xd1, 0x66, 0x43, 0x09, 0x11, 0x9b, 0x09, 0xcc, 0xcb, 0xa8, 0x77, 0x04, 0xde, 0x7d, 0x0e, 0x3e, 0x76, 0x28, 0xf5, 0x15, 0x8e, 0x48, 0x9b, 0x4b, 0xb3, 0xc5, 0x9e, 0x18, 0x0b, 0xbe, 0xec, 0xc1, 0x97, 0xc3, 0x28, 0x6d, 0xb5, 0x45, 0x4f, 0x35, 0xe9, 0x4a, 0x9b, 0x7a, 0xdc, 0x65, 0xa7, 0x7b, 0xa5, 0xe6, 0xd5, 0x26, 0x48, 0x4e, 0xed, 0x2f, 0x7c, 0x06, 0x06, 0x60, 0xb2, 0x50, 0xaa, 0x30, 0x52, 0x7d, 0x35, 0x96, 0x48, 0x61, 0x7e, 0x1f, 0xbf, 0x04, 0xb9, 0x3f, 0x2c, 0x9a, 0x9c, 0xe4, 0x8f, 0xb5, 0xc1, 0x51, 0xf6, 0xba, 0x4c, 0x2a, 0x42, 0x91, 0xcd, 0xcb, 0x2d, 0xa1, 0x68, 0xde, 0x8c, 0xfc, 0x33, 0x2d, 0xd2, 0xd6, 0xdf, 0xb4, 0xd6, 0x3c, 0x9b, 0xfb, 0xd6, 0x03, 0x35, 0xa3, 0xbb, 0xfe, 0x82, 0x3e, 0x9e, 0x74, 0x01, 0x64, 0x8c, 0xd0, 0xbb, 0x03, 0x86, 0x9b, 0x6d, 0xf6, 0xcc, 0xa8, 0xe9, 0xd9, 0x5c, 0x8e, 0xba, 0x1c, 0xb5, 0x5b, 0x07, 0x57, 0xe0, 0x87, 0xba, 0xdd, 0xb1, 0x27, 0xe0, 0x94, 0x4b, 0x63, 0x53, 0x04, 0xe2, 0x2a, 0x97, 0xad, 0xc5, 0x25, 0x03, 0x9e, 0x9b, 0xe9, 0x21, 0x43, 0xec, 0x70, 0x57, 0x7f, 0xe4, 0xca, 0xc6, 0xfa, 0x54, 0x10, 0x72, 0xbd, 0xfa, 0x9a, 0xa3, 0xfc, 0x02, 0x71, 0x8c, 0x32, 0xcc, 0x07, 0x2b, 0x74, 0xf0, 0x26, 0x70, 0xfe, 0x80, 0x27, 0xa1, 0x13, 0x8d, 0x64, 0xfd, 0x04, 0xec, 0xf0, 0xa0, 0x8e, 0x39, 0x85, 0xa6, 0x68, 0x1d, 0xbd, 0x93, 0x1d, 0xcd, 0x85, 0xf3, 0x18, 0xd3, 0xcf, 0x3d, 0xfd, 0x11, 0x88, 0xfd, 0x40, 0x03, 0xca, 0x32, 0xf0, 0x44, 0x52, 0xf5, 0xd3, 0x54, 0x34, 0x5c, 0xb8, 0x98, 0xcd, 0x9e, 0x09, 0xa2, 0xfa, 0x78, 0xa0, 0xb3, 0x87, 0xcf, 0xdb, 0x7e, 0xeb, 0x96, 0xf3, 0x2f, 0x32, 0xf2, 0x89, 0xac, 0x3a, 0x9c, 0x82, 0x1b, 0x22, 0x88, 0x15, 0xa4, 0x00, 0xc4, 0x22, 0x78, 0xd2, 0xa2, 0xc6, 0x12, 0xb8, 0x19, 0x2c, 0xbd, 0x60, 0x69, 0xa6, 0x56, 0xc1, 0xfe, 0xfc, 0x53, 0x0c, 0x97, 0x04, 0x04, 0xdf, 0xa7, 0x72, 0x19, 0xbc, 0xfb, 0xf2, 0x65, 0xbb, 0x9e, 0x74, 0xe1, 0x7b, 0xfa, 0xc7, 0xf4, 0x5e, 0x3f, 0x6a, 0xf1, 0xf6, 0x09, 0x9f, 0xe2, 0xba, 0x3d, 0xc0, 0x84, 0xfe, 0x33, 0xd6, 0x92, 0x22, 0x1b, 0x68, 0x46, 0x09, 0x99, 0x91, 0x1e, 0xcc, 0xb3, 0x55, 0xdc, 0xb0, 0xed, 0x35, 0xd0, 0x56, 0xb2, 0x01, 0x59, 0x32, 0xf6, 0xee, 0xaa, 0x3e, 0x1a, 0xe9, 0xca, 0xf0, 0x10, 0x2a, 0xde, 0x69, 0xbf, 0x0b, 0xab, 0xef, 0xa9, 0x1b, 0x57, 0x9d, 0xcb, 0x6e, 0x6f, 0x59, 0xc4, 0x38, 0x2f, 0x07, 0x3a, 0x9a, 0xfd, 0xfc, 0x7a, 0xbc, 0x36, 0xb6, 0x5e, 0x1c, 0x2d, 0xca, 0x74, 0x26, 0x71, 0x1d, 0x5c, 0x04, 0x4f, 0x57, 0x72, 0xb7, 0x98, 0x95, 0xae, 0x67, 0xa5, 0x5f, 0xc8, 0xf7, 0x97, 0xd9, 0x9f, 0xdd, 0xe3, 0x3d, 0xdb, 0x31, 0x0f, 0x88, 0xd1, 0x03, 0xb6, 0x74, 0xa8, 0xf2, 0xd2, 0xa7, 0xba, 0xfa, 0x3b, 0x2a, 0x3d, 0x8e, 0x6a, 0x1c, 0x23, 0xe7, 0x83, 0xa8, 0x3e, 0x9b, 0x93, 0x34, 0xa8, 0x71, 0x15, 0xdb, 0x62, 0x74, 0xbc, 0x1e, 0x3b, 0x46, 0x6c, 0xd6, 0xf4, 0xb7, 0x89, 0x6d, 0xa1, 0x96, 0x75, 0x4e, 0x52, 0xc8, 0x54, 0x9a, 0xf3, 0x96, 0x13, 0x1d, 0x71, 0x4b, 0xa8, 0x80, 0x1f, 0xff, 0x9b, 0xc0, 0x57, 0xae, 0xc5, 0xdf, 0x64, 0x8d, 0x58, 0xd9, 0x9f, 0x9d, 0x1f, 0xd9, 0xd9, 0x80, 0x07, 0xad, 0xf9, 0x8c, 0xdf, 0x77, 0xe6, 0x1e, 0x5c, 0xa6, 0xa8, 0x30, 0x60, 0x25, 0xca, 0x2e, 0x7b, 0xd2, 0x02, 0x06, 0xb3, 0x32, 0x14, 0x7f, 0x80, 0x63, 0xf3, 0xcb, 0x1b, 0x52, 0x29, 0x5f, 0xf8, 0x2e, 0x7a, 0x02, 0x91, 0x1c, 0xc4, 0x24, 0x66, 0x2c, 0x2a, 0x72, 0x42, 0x8b, 0x71, 0xa7, 0xbf, 0xfb, 0xaa, 0xa5, 0x0c, 0x81, 0x12, 0xc4, 0xee, 0x5d, 0x36, 0x6a, 0x05, 0x3f, 0x5b, 0xdc, 0x51, 0xb8, 0x1c, 0x53, 0xf5, 0xef, 0x55, 0x53, 0x3a, 0x95, 0x40, 0x38, 0xd6, 0x1b, 0xde, 0x12, 0x6f, 0x22, 0x99, 0xb2, 0x5b, 0x33, 0x27, 0x05, 0xaa, 0xb0, 0xb1, 0xa1, 0x66, 0x0a, 0x35, 0x9e, 0x19, 0x35, 0x29, 0xa7, 0x90, 0x59, 0x61, 0x50, 0xdf, 0xcb, 0x32, 0xaa, 0xa5, 0x3b, 0xd8, 0x16, 0x91, 0x2f, 0x15, 0x56, 0x25, 0xb0, 0x1b, 0xea, 0xba, 0x42, 0xac, 0x99, 0xc5, 0x1a, 0x80, 0x4e, 0x58, 0x8c, 0xe7, 0x25, 0xec, 0xc3, 0xaf, 0xc6, 0x5d, 0xb4, 0x48, 0xf2, 0x36, 0x54, 0x26, 0x5b, 0x2f, 0x09, 0x67, 0xb9, 0xf4, 0x5f, 0xb6, 0x1a, 0x28, 0xfd, 0x6f, 0x79, 0xaa, 0xd7, 0x03, 0x93, 0x17, 0xa5, 0x9f, 0xf6, 0x90, 0x93, 0x08, 0x5b, 0xbd, 0x3a, 0xca, 0x35, 0x11, 0xcf, 0x91, 0x8a, 0x50, 0x9a, 0xd7, 0x02, 0x4f, 0xaa, 0xbf, 0x3e, 0xfc, 0xc8, 0x41, 0x6a, 0x9d, 0xa9, 0x88, 0x16, 0x5d, 0x68, 0x98, 0x41, 0x04, 0x33, 0x34, 0xb7, 0x06, 0x44, 0xff, 0x9e, 0xbf, 0x12, 0xe1, 0x4b, 0xfd, 0xc9, 0xac, 0x5a, 0xbf, 0xf8, 0x00, 0xfd, 0x3c, 0x8a, 0x6c, 0x94, 0x27, 0xf8, 0xd5, 0x7e, 0x32, 0xbd, 0x1c, 0x2f, 0xd1, 0x09, 0xfb, 0x83, 0x40, 0xb9, 0x30, 0x52, 0xc7, 0x87, 0xde, 0x45, 0x3d, 0x7e, 0x30, 0xe8, 0xcb, 0xb2, 0x3f, 0x00, 0xf2, 0x2d, 0x36, 0x1e, 0xcf, 0x2c, 0xb4, 0x74, 0x9e, 0x8c, 0x71, 0xe8, 0x7e, 0x7f, 0x25, 0x67, 0x73, 0x83, 0xa5, 0x7c, 0xb1, 0x95, 0x4f, 0x21, 0x18, 0xa1, 0xa9, 0xd5, 0xfb, 0x3e, 0x45, 0xee, 0x25, 0x98, 0xe8, 0x31, 0x1e, 0xad, 0xea, 0xa0, 0xaa, 0xbd, 0xe0, 0x93, 0x93, 0xfb, 0x79, 0x0a, 0xa8, 0x89, 0xa6, 0x42, 0x06, 0xa3, 0xfe, 0x86, 0x96, 0x1b, 0x60, 0x48, 0xd7, 0x05, 0xda, 0x70, 0xde, 0xb3, 0xc9, 0xf4, 0x9b, 0xe4, 0x42, 0xa9, 0x5d, 0x38, 0xb1, 0x59, 0x98, 0xe7, 0xc0, 0x15, 0xe7, 0xb3, 0x7b, 0xcc, 0x4d, 0x1b, 0xb1, 0x1d, 0xc0, 0xd2, 0x9d, 0x6a, 0xe8, 0x6f, 0xc5, 0x2e, 0x24, 0x66, 0x23, 0x90, 0xce, 0x37, 0x83, 0x38, 0xc0, 0xe5, 0x2c, 0x61, 0x16, 0xaa, 0xc2, 0x2f, 0x36, 0xe9, 0x6b, 0x43, 0x0e, 0x64, 0x31, 0x8e, 0x9d, 0xaf, 0xa8, 0x62, 0xb5, 0xe5, 0xd0, 0xcf, 0xff, 0x99, 0x3c, 0x2c, 0x3f, 0x0f, 0x74, 0xf4, 0xd9, 0xac, 0x99, 0xd4, 0x95, 0xac, 0x47, 0x01, 0x9f, 0x13, 0xbf, 0xcf, 0xd2, 0xe6, 0x46, 0x80, 0x35, 0x9a, 0xc8, 0x59, 0xc6, 0xcd, 0xc1, 0xfc, 0x77, 0x34, 0x5e, 0xf1, 0x77, 0xd5, 0xdf, 0x86, 0xb2, 0x76, 0x3f, 0xd9, 0x9b, 0x55, 0x17, 0x33, 0x29, 0x19, 0xc0, 0x97, 0x1f, 0x09, 0xb7, 0x9b, 0x91, 0x7c, 0x46, 0x77, 0xa4, 0x90, 0x61, 0x5c, 0x95, 0x1f, 0xcf, 0x07, 0xfd, 0xef, 0x8a, 0x95, 0x53, 0x29, 0x67, 0x99, 0xb2, 0x0d, 0xf9, 0x6c, 0xdc, 0xe3, 0xb3, 0xc4, 0x80, 0x35, 0x4e, 0x88, 0xb8, 0x3b, 0x6a, 0xe3, 0xd6, 0x97, 0x78, 0x98, 0x60, 0x43, 0xd7, 0x95, 0x59, 0xc7, 0x3d, 0xca, 0xc2, 0xaf, 0x59, 0x3b, 0x61, 0x3c, 0xb7, 0x54, 0xc1, 0x5a, 0xe3, 0x7d, 0x7a, 0xd2, 0xd1, 0xef, 0xb2, 0xc1, 0x7c, 0xc6, 0xe4, 0x49, 0xce, 0x57, 0xe1, 0x86, 0xc0, 0xc3, 0x14, 0xc3, 0xc2, 0xcd, 0x09, 0xee, 0x5d, 0xe8, 0x31, 0x4a, 0x17, 0x94, 0xdf, 0x64, 0x97, 0xeb, 0x97, 0x48, 0x09, 0x77, 0x88, 0xf4, 0xc4, 0x47, 0x57, 0x0d, 0x2a, 0x42, 0x1e, 0xd1, 0xd0, 0xbb, 0xb5, 0x4d, 0xe0, 0x45, 0x30, 0xd0, 0xbb, 0xc8, 0xa8, 0x9f, 0xe2, 0xd4, 0x3f, 0xea, 0x16, 0x36, 0x5e, 0xff, 0xbe, 0xc9, 0x41, 0xbe, 0x8a, 0x8f, 0xb6, 0x4d, 0x56, 0x00, 0x21, 0x0d, 0x51, 0xa2, 0xc4, 0xcc, 0x5e, 0xda, 0x3d, 0x3c, 0xba, 0x02, 0x50, 0xa3, 0xdf, 0xbb, 0xe7, 0xd5, 0xa9, 0x85, 0x57, 0x60, 0xb8, 0x8d, 0xe5, 0x06, 0x15, 0xc5, 0x89, 0x70, 0x18, 0x3a, 0xf2, 0x20, 0x89, 0xa3, 0xc9, 0xa8, 0x05, 0x35, 0x3a, 0x19, 0xa3, 0xbf, 0xb1, 0xbf, 0xd8, 0xf2, 0xe1, 0x0b, 0x98, 0x00, 0x0b, 0xd1, 0xbe, 0x6a, 0x7d, 0xb4, 0xae, 0x12, 0x59, 0xde, 0x39, 0x98, 0x97, 0xf4, 0xc1, 0xe3, 0x4d, 0x48, 0x9d, 0xfe, 0x2e, 0x51, 0xbe, 0x26, 0x51, 0x59, 0x93, 0x21, 0x35, 0x76, 0x2b, 0xd1, 0x01, 0xbb, 0x9a, 0x08, 0x10, 0xaf, 0x9d, 0x9e, 0xac, 0xfe, 0x81, 0xc1, 0x1a, 0x6f, 0x40, 0x8d, 0xd8, 0x16, 0xee, 0xdc, 0x22, 0xcb, 0x53, 0x60, 0xba, 0xdb, 0xda, 0xef, 0xe9, 0xfd, 0xaa, 0x1d, 0xc1, 0x87, 0x12, 0x10, 0xa6, 0xe1, 0x2a, 0x90, 0x0d, 0x3a, 0xb7, 0x5e, 0x82, 0x7b, 0x50, 0xc7, 0xf0, 0x79, 0xbf, 0x78, 0x1d, 0x6f ],
+const [ 0xca, 0xa5, 0xcc, 0x5d, 0x0d, 0x87, 0x68, 0x0e, 0xaf, 0xc2, 0x94, 0x29, 0xba, 0xc5, 0x5c, 0x9e, 0x33, 0x16, 0x7d, 0x48, 0x57, 0x89, 0xc7, 0xc1, 0x24, 0xb5, 0xc5, 0x7a, 0x1b, 0xa8, 0xa0, 0x0b, 0x45, 0xda, 0x41, 0xc7, 0x74, 0x60, 0xb6, 0x94, 0xcb, 0x62, 0xd7, 0xfa, 0x80, 0xcf, 0x29, 0x79, 0xe1, 0x4f, 0x02, 0x20, 0x95, 0x7a, 0xee, 0x5b, 0x25, 0x47, 0x52, 0x0d, 0xbb, 0xc7, 0x4f, 0xde, 0x29, 0x13, 0xe9, 0xd7, 0x2c, 0x83, 0x69, 0x2c, 0xf2, 0x20, 0xff, 0x58, 0xdb, 0x5c, 0xac, 0x6f, 0x7d, 0x01, 0x5f, 0xb0, 0xea, 0x68, 0x5f, 0x5a, 0x35, 0xeb, 0xe8, 0xc2, 0x32, 0x9c, 0x19, 0xa1, 0x7e, 0x38, 0x0e, 0xb2, 0xbf, 0x56, 0x49, 0x7d, 0x2d, 0xe4, 0x56, 0x6d, 0x52, 0xd4, 0xae, 0x29, 0x0d, 0x13, 0xdd, 0x21, 0xdd, 0xbb, 0xe0, 0x67, 0x5c, 0x89, 0xd1, 0xc1, 0x0a, 0x91, 0xc6, 0xfc, 0x4c, 0x30, 0xf6, 0x83, 0xb5, 0x43, 0x1d, 0x30, 0x83, 0x96, 0x22, 0x61, 0x6d, 0xa0, 0xf7, 0x4f, 0x9c, 0x6d, 0xc2, 0x9b, 0xf7, 0xdb, 0x3a, 0x2a, 0xa3, 0x09, 0x53, 0x33, 0xca, 0x0d, 0x1d, 0x96, 0x9c, 0xe5, 0xe9, 0x70, 0x94, 0xb0, 0xaf, 0xec, 0xfd, 0x1f, 0xac, 0x5c, 0xb4, 0x26, 0x4f, 0x88, 0x2f, 0xf7, 0x56, 0x45, 0xbe, 0x30, 0x35, 0x4a, 0x11, 0x53, 0xb7, 0x40, 0xfb, 0x78, 0xe7, 0x18, 0x75, 0x3e, 0x31, 0xa1, 0xe6, 0x07, 0xc5, 0x5a, 0xa2, 0x65, 0x3c, 0x85, 0xb0, 0xcf, 0x7e, 0x7c, 0xd0, 0x99, 0xe3, 0x48, 0xbc, 0x23, 0x98, 0x70, 0xaf, 0x50, 0x45, 0x0f, 0x24, 0x39, 0xec, 0x29, 0xe0, 0x23, 0x15, 0x3f, 0x32, 0xaf, 0x28, 0x21, 0x7a, 0x51, 0x1a, 0x04, 0xe8, 0x03, 0x4b, 0xd4, 0x86, 0x3b, 0xaf, 0xcc, 0x79, 0x1a, 0x2d, 0x43, 0x84, 0xe6, 0x44, 0xc9, 0xcd, 0xba, 0xf4, 0x72, 0xe4, 0x7c, 0xdc, 0x72, 0x01, 0x10, 0xa0, 0xea, 0x8d, 0xcb, 0x8d, 0x02, 0xe4, 0x2b, 0x80, 0x38, 0x5a, 0xc5, 0x03, 0xf8, 0x7c, 0x7e, 0xba, 0x6c, 0x98, 0xfe, 0xfe, 0x95, 0x7f, 0x62, 0xc7, 0x9b, 0x89, 0x31, 0xcf, 0x61, 0xda, 0x92, 0xf4, 0x5d, 0xe4, 0xbc, 0xde, 0xa7, 0x2d, 0xad, 0xe3, 0x4f, 0x52, 0x1f, 0x27, 0xf4, 0x4d, 0xb8, 0x08, 0x92, 0xf3, 0x81, 0xb9, 0x9c, 0xc0, 0x99, 0x2c, 0x4b, 0xd7, 0x2b, 0x36, 0x35, 0x45, 0x9d, 0xee, 0x21, 0x86, 0x0a, 0x56, 0x1a, 0x4a, 0xf3, 0x3d, 0xc2, 0x79, 0x31, 0x63, 0xe9, 0x74, 0x2e, 0xdf, 0x5e, 0x9e, 0x55, 0xbe, 0x05, 0x1b, 0xc7, 0xed, 0x2a, 0xd7, 0x50, 0x59, 0x15, 0xca, 0x99, 0x54, 0xdf, 0x7b, 0x9f, 0x3b, 0x84, 0xc3, 0x63, 0x55, 0x38, 0xd4, 0xe4, 0xff, 0xff, 0x79, 0x4a, 0x06, 0x78, 0xa0, 0x64, 0x55, 0xf9, 0x15, 0x54, 0xd0, 0xe1, 0x90, 0x89, 0x7f, 0x2a, 0xf2, 0xee, 0xef, 0x3e, 0xcc, 0x61, 0xd5, 0x0c, 0x21, 0x67, 0xf5, 0x5a, 0x6d, 0x1e, 0x42, 0x5d, 0xe5, 0x73, 0x47, 0x87, 0x01, 0x94, 0xc5, 0xa0, 0x38, 0xa9, 0x9e, 0x18, 0x0a, 0xbf, 0xf1, 0x9c, 0x44, 0x04, 0x87, 0xe7, 0x80, 0x3a, 0x6e, 0xdb, 0xeb, 0x66, 0xe3, 0xd0, 0x4b, 0xc8, 0x76, 0x2c, 0x40, 0x10, 0x68, 0x33, 0xc9, 0xcf, 0x58, 0x21, 0x0b, 0x2c, 0x1e, 0x76, 0x4e, 0xd8, 0xf8, 0x92, 0x49, 0x44, 0xe4, 0x81, 0x9f, 0x11, 0x4c, 0x18, 0xa9, 0xc8, 0xe8, 0x41, 0x76, 0xcb, 0xe1, 0x93, 0x10, 0x8b, 0x32, 0x26, 0x01, 0xfc, 0x54, 0xa5, 0x16, 0x46, 0x1a, 0xa4, 0x63, 0xbe, 0xda, 0x34, 0x87, 0x14, 0xcd, 0xb5, 0x32, 0xcd, 0xb8, 0xec, 0xe4, 0xf4, 0xcc, 0x56, 0xf7, 0x0d, 0xcb, 0xbb, 0xdf, 0x4b, 0x6d, 0x05, 0xb1, 0x03, 0x02, 0x53, 0xe2, 0x5f, 0x58, 0x4a, 0x51, 0x57, 0xdf, 0xab, 0x88, 0xdd, 0x0b, 0x2b, 0x3f, 0x58, 0xfa, 0x7f, 0x22, 0x54, 0x57, 0xb6, 0xd5, 0x78, 0x7e, 0xcb, 0x34, 0xb8, 0xe1, 0x7b, 0xdf, 0xcc, 0xaa, 0x54, 0xf6, 0xe0, 0xa2, 0x0f, 0x21, 0x8d, 0x51, 0x1f, 0xd4, 0x08, 0x67, 0x8a, 0xd1, 0x99, 0x5a, 0xf8, 0xee, 0x4f, 0x51, 0x09, 0x18, 0xf3, 0x41, 0xec, 0x98, 0x3a, 0x55, 0x2e, 0x95, 0x3e, 0x94, 0xcf, 0xda, 0x2f, 0xbe, 0x9b, 0xda, 0x46, 0x76, 0xb7, 0xf1, 0xfb, 0xa6, 0x7b, 0xed, 0x78, 0x20, 0x7f, 0xcd, 0x4d, 0x81, 0xf9, 0xc9, 0x65, 0x5b, 0x46, 0x92, 0x39, 0x93, 0xc6, 0xda, 0x43, 0x07, 0xed, 0x17, 0xb6, 0x74, 0x97, 0x84, 0x6c, 0x98, 0x9c, 0x69, 0x20, 0x93, 0xa5, 0x9d, 0xdd, 0x93, 0x3e, 0x49, 0xb6, 0xb0, 0x2c, 0xee, 0xb8, 0x15, 0x00, 0xaa, 0x1d, 0x61, 0xec, 0xb7, 0xc2, 0x4d, 0xd6, 0x34, 0xdc, 0x8e, 0xab, 0x28, 0xe6, 0xfd, 0xf6, 0xc4, 0xde, 0xf5, 0xb1, 0xe8, 0xb0, 0xfc, 0x5a, 0xe9, 0xf3, 0xa6, 0x4a, 0x92, 0xd3, 0xb7, 0x43, 0x68, 0x4e, 0x88, 0x48, 0x32, 0xa4, 0xac, 0xb1, 0xb9, 0x08, 0xd2, 0x7e, 0xcd, 0x9c, 0xed, 0xec, 0x88, 0x9c, 0x93, 0x46, 0xd7, 0xd9, 0xa3, 0xfe, 0x35, 0x6a, 0x2b, 0xfc, 0xba, 0x9e, 0x89, 0x36, 0x55, 0x35, 0xd0, 0x81, 0x56, 0xcf, 0x6d, 0xa6, 0x2f, 0xa4, 0x0a, 0xb9, 0x7b, 0x76, 0xb2, 0xa6, 0x3f, 0xc4, 0x36, 0x0d, 0x70, 0x41, 0xd0, 0x50, 0xb6, 0x84, 0x07, 0xea, 0x70, 0x01, 0xd2, 0x02, 0xf8, 0x38, 0x00, 0x3f, 0x28, 0x2c, 0xd7, 0xdf, 0x1d, 0x17, 0xfc, 0x03, 0x3a, 0x5c, 0x93, 0x4d, 0x70, 0xbd, 0xa6, 0xad, 0xbd, 0xce, 0xcb, 0x78, 0xf3, 0xa9, 0x01, 0xbb, 0xbb, 0xe4, 0xdc, 0xce, 0xd9, 0xc0, 0xe2, 0x2c, 0xb2, 0xa3, 0x34, 0x81, 0x0b, 0xc9, 0x71, 0x05, 0x13, 0x36, 0xd7, 0x09, 0xa4, 0xef, 0xab, 0xcf, 0xc6, 0x69, 0xdb, 0x9f, 0x75, 0x42, 0xe3, 0x17, 0xa4, 0x2f, 0xed, 0xc3, 0x81, 0x36, 0x3c, 0xee, 0xfb, 0x1d, 0xca, 0xb7, 0x81, 0x22, 0x30, 0x67, 0x0d, 0xec, 0xc7, 0x01, 0x62, 0xc2, 0x0d, 0x1b, 0x92, 0xfb, 0x4a, 0xed, 0xc2, 0xb5, 0x73, 0xa8, 0x31, 0xca, 0x4e, 0x09, 0x77, 0x00, 0xd7, 0x2d, 0x0b, 0x80, 0xe3, 0xa7, 0x08, 0x8a, 0x03, 0xd0, 0x31, 0x66, 0xab, 0x5e, 0x32, 0x9e, 0x93, 0x38, 0x29, 0x6a, 0x5e, 0x89, 0x64, 0x6c, 0x7a, 0x13, 0x6c, 0x9d, 0x47, 0xc7, 0x43, 0x88, 0x7b, 0x92, 0xeb, 0xb6, 0xc5, 0x79, 0x27, 0x69, 0xb0, 0xe8, 0x86, 0x8d, 0xcb, 0x47, 0x9c, 0xeb, 0x07, 0xcf, 0x93, 0xa0, 0x60, 0x9c, 0xe3, 0xcd, 0xbf, 0x03, 0x5d, 0x91, 0x1f, 0x25, 0x6e, 0x34, 0xef, 0xc4, 0xa2, 0xa5, 0xb8, 0x56, 0x67, 0x27, 0x00, 0x58, 0x14, 0x47, 0x6e, 0xe5, 0x29, 0x11, 0x2f, 0x87, 0xd8, 0x83, 0x97, 0x4d, 0xc5, 0x42, 0x0c, 0x1e, 0x0b, 0x8c, 0x20, 0x4c, 0x7f, 0x6e, 0xfd, 0x6c, 0x38, 0x37, 0x06, 0x66, 0x4f, 0x2c, 0xbb, 0xc8, 0xe3, 0x7d, 0xdd, 0x60, 0x60, 0x78, 0xd3, 0x09, 0x01, 0xfd, 0x4d, 0xc5, 0x94, 0x32, 0x27, 0x0c, 0x7e, 0x77, 0x90, 0x64, 0xfe, 0x9d, 0x6b, 0x32, 0xb6, 0x52, 0xf5, 0xd0, 0x67, 0xe0, 0xa9, 0xdf, 0xfc, 0x18, 0x61, 0xdf, 0xca, 0x88, 0xbd, 0xfd, 0x16, 0xf5, 0xc8, 0x2b, 0xd7, 0x05, 0xd9, 0x76, 0xbe, 0x3b, 0xb8, 0x94, 0x74, 0x28, 0x02, 0xbd, 0x23, 0xe0, 0xcf, 0xbd, 0x37, 0xac, 0x91, 0x46, 0x66, 0xfe, 0x40, 0x8a, 0xed, 0xaa, 0xb4, 0x09, 0x1d, 0x52, 0x52, 0xa8, 0x17, 0x22, 0xea, 0x04, 0xd4, 0xbe, 0xe0, 0x05, 0x68, 0x79, 0x8a, 0xb6, 0x87, 0xc8, 0xda, 0x54, 0x48, 0xf6, 0x3d, 0xa5, 0x29, 0x19, 0xc2, 0x8a, 0x53, 0x44, 0x7f, 0xd8, 0x20, 0xfe, 0x31, 0x64, 0xdb, 0xf3, 0x22, 0x5d, 0xc7, 0xea, 0x50, 0xdf, 0x62, 0xf7, 0xcb, 0xc4, 0xea, 0xf2, 0x5f, 0xbe, 0x21, 0x27, 0x73, 0xa3, 0x4e, 0x4f, 0x31, 0x07, 0x84, 0xc0, 0xe7, 0x10, 0x26, 0xe0, 0xad, 0x86, 0xab, 0xdf, 0x49, 0x2a, 0x9f, 0xa6, 0x4f, 0x49, 0xea, 0x0a, 0x8d, 0x90, 0x55, 0x46, 0xa5, 0x22, 0x4a, 0xa8, 0xfc, 0xe8, 0xdb, 0x8a, 0xd3, 0x28, 0x07, 0x84, 0xb4, 0x5a, 0x38, 0xe0, 0x10, 0x37, 0x0f, 0x4e, 0x26, 0x12, 0x64, 0xd9, 0x26, 0x6b, 0x89, 0x1a, 0x97, 0xc2, 0xcf, 0xac, 0xf6, 0xa9, 0x4c, 0xe0, 0xa0, 0x1d, 0xdb, 0xb1, 0xf2, 0x16, 0x63, 0xfa, 0xae, 0x5d, 0x5d, 0xe6, 0xa0, 0x9e, 0x90, 0xa8, 0x82, 0xbe, 0x1f, 0x6d, 0x1e, 0x6e, 0xc6, 0x8f, 0xb2, 0x01, 0x61, 0x0c, 0x98, 0x7a, 0xae, 0x36, 0x26, 0xea, 0x53, 0xac, 0xd4, 0xf9, 0x23, 0x88, 0x9c, 0xc2, 0x9d, 0xda, 0xa7, 0xe4, 0xb5, 0x56, 0x25, 0xd5, 0xd8, 0x49, 0x7d, 0x7a, 0x2a, 0xd2, 0xa6, 0xf5, 0x12, 0x4e, 0xd4, 0xbf, 0xf8, 0x14, 0x58, 0xf6, 0x4d, 0x63, 0xc1, 0xf8, 0xcc, 0x98, 0x48, 0x30, 0x00, 0xa4, 0x6b, 0x30, 0x07, 0xbe, 0xd7, 0x00, 0x95, 0x55, 0x8b, 0xb6, 0x3c, 0x49, 0x3b, 0x47, 0xea, 0x5a, 0xf2, 0x9d, 0xb3, 0xe1, 0xfc, 0xea, 0xd0, 0xbe, 0x03, 0x3b, 0xe8, 0x91, 0x78, 0x50, 0x8f, 0x2d, 0x35, 0xab, 0x0d, 0x49, 0x60, 0xe7, 0x60, 0x79, 0x92, 0x4b, 0x84, 0x5d, 0x38, 0x9f, 0xf1, 0x18, 0x3a, 0x3e, 0x66, 0x04, 0xdb, 0x6d, 0xe5, 0xa5, 0xe1, 0xeb, 0xfe, 0xdb, 0xf5, 0xca, 0x51, 0x5b, 0x4c, 0x7c, 0x4f, 0x5f, 0x87, 0x31, 0x40, 0x9d, 0xd8, 0x61, 0x8a, 0x76, 0x67, 0xa4, 0x30, 0x71, 0xf4, 0xca, 0x99, 0xe7, 0xbd, 0x28, 0x93, 0x00, 0xa2, 0x30, 0x97, 0xde, 0x87, 0x45, 0x4f, 0x17, 0xfa, 0xcd, 0x55, 0x69, 0x15, 0x87, 0x3e, 0xa9, 0xa6, 0x1e, 0xd7, 0xfd, 0x8e, 0xff, 0xae, 0x4b, 0x67, 0x68, 0xd4, 0xf1, 0x6a, 0xc2, 0xe2, 0xb7, 0x8f, 0x31, 0x3a, 0x01, 0xf5, 0x69, 0x8f, 0x4a, 0x85, 0xc3, 0xa8, 0xcd, 0xd3, 0x90, 0x60, 0x85, 0x44, 0xad, 0xf2, 0x58, 0x76, 0x58, 0x73, 0x90, 0xdc, 0x41, 0xa0, 0x8a, 0xa9, 0xe4, 0xda, 0xb2, 0xf0, 0x17, 0x6f, 0xaf, 0x09, 0xdf, 0x1b, 0xda, 0x36, 0x88, 0xcf, 0xf5, 0x86, 0xf5, 0xb0, 0x1a, 0xfa, 0x34, 0x63, 0xf1, 0xe7, 0x55, 0x88, 0x26, 0x9b, 0x7d, 0x84, 0x1a, 0x43, 0x36, 0x84, 0xd9, 0x0d, 0x09, 0xbf, 0x4d, 0x89, 0x4f, 0xfb, 0xb1, 0x55, 0x44, 0x52, 0x47, 0xf9, 0x5d, 0x36, 0x4e, 0x10, 0xdc, 0xb3, 0x2f, 0xa9, 0xa1, 0xf4, 0xf7, 0xec, 0x43, 0x09, 0x09, 0x01, 0x5f, 0xe7, 0x15, 0x2d, 0x30, 0xb0, 0x44, 0x3e, 0x60, 0x35, 0xb5, 0x2a, 0x1e, 0xba, 0x2d, 0xf3, 0x71, 0xf9, 0x0a, 0xcd, 0xcc, 0x69, 0x79, 0x83, 0xe2, 0xbf, 0xe9, 0x17, 0xbb, 0xb5, 0xc0, 0xa9, 0x08, 0x0b, 0x4c, 0x99, 0xb4, 0xcc, 0xfc, 0xf0, 0xbb, 0xd3, 0xd0, 0xfc, 0x3f, 0x8d, 0x0e, 0x3b, 0xd9, 0x01, 0x37, 0x7b, 0x2d, 0x0d, 0x39, 0x3e, 0xc1, 0xf2, 0xe6, 0x63, 0x0f, 0x13, 0xa5, 0x03, 0xd8, 0xf9, 0x67, 0x9a, 0xbc, 0x9b, 0xdd, 0x67, 0x08, 0xdc, 0xe9, 0x15, 0xcf, 0x56, 0x52, 0x9a, 0x3c, 0x56, 0xbb, 0x60, 0x26, 0x27, 0xd6, 0xa2, 0xe5, 0x94, 0xd5, 0x1a, 0x64, 0xa8, 0x21, 0xd9, 0x78, 0xb8, 0x4f, 0x76, 0x70, 0xa4, 0x50, 0x6a, 0xee, 0x59, 0xe7, 0xbb, 0xf5, 0x9a, 0x60, 0xd8, 0x42, 0x01, 0x80, 0xc4, 0xe0, 0x40, 0xb8, 0x77, 0xf7, 0xad, 0x9d, 0x82, 0xe5, 0xfe, 0x9d, 0xf1, 0x8f, 0x50, 0xea, 0x75, 0xf9, 0x6f, 0xbb, 0xc3, 0x15, 0x51, 0xb4, 0x37, 0xd9, 0xe3, 0xa2, 0xbd, 0x94, 0x09, 0x6c, 0xf1, 0x82, 0xdf, 0x47, 0x85, 0x9e, 0x46, 0x28, 0xe3, 0xb7, 0x9c, 0x7f, 0x14, 0xc6, 0xca, 0x22, 0xe1, 0x7f, 0x84, 0x87, 0x38, 0x26, 0xcc, 0x37, 0xd1, 0xa4, 0xb8, 0x7f, 0x10, 0xda, 0x76, 0x69, 0x2e, 0x35, 0x8d, 0xeb, 0x94, 0x83, 0x65, 0x5d, 0x87, 0x05, 0x0a, 0x30, 0x0a, 0xc5, 0x2d, 0xde, 0x00, 0x29, 0x6c, 0x1d, 0x92, 0xc9, 0xd3, 0x58, 0xd0, 0x7e, 0xa2, 0x5f, 0x9b, 0xbb, 0x50, 0x5e, 0xc2, 0x21, 0xd1, 0x0c, 0x6b, 0x4d, 0x15, 0x24, 0xb5, 0xf5, 0xd1, 0x19, 0x9b, 0x33, 0x81, 0x06, 0x1c, 0x20, 0xae, 0xe3, 0x98, 0xa5, 0x6c, 0xff, 0x7e, 0x8e, 0x28, 0xaa, 0x24, 0xe0, 0xa0, 0x32, 0xf6, 0x6d, 0x33, 0x12, 0xd3, 0xa5, 0x5b, 0x65, 0xb4, 0xaf, 0x78, 0xa1, 0x8f, 0xb9, 0xcf, 0x81, 0x7b, 0x8c, 0xd2, 0x43, 0x14, 0x63, 0xa2, 0x14, 0x21, 0xfd, 0xd2, 0xc9, 0x74, 0xf1, 0x6e, 0xcf, 0x12, 0x42, 0x3b, 0x65, 0x94, 0x33, 0x41, 0x08, 0xcd, 0x5c, 0x87, 0x2f, 0xad, 0xfe, 0x1e, 0x39, 0x65, 0x94, 0x60, 0xa4, 0xcc, 0xaa, 0x7a, 0x7f, 0x02, 0xf2, 0x28, 0x22, 0x53, 0x95, 0xc0, 0x1c, 0x5e, 0xc7, 0x72, 0x6d, 0x76, 0x9e, 0xce, 0xf6, 0x48, 0x24, 0x86, 0x2d, 0xbe, 0xab, 0x76, 0x15, 0x24, 0x60, 0xe1, 0x6e, 0x8a, 0x23, 0xfe, 0x28, 0x69, 0x96, 0xb3, 0x1e, 0x89, 0x74, 0xa0, 0x01, 0x21, 0x25, 0x5f, 0x92, 0x41, 0x8f, 0x0a, 0x15, 0x6d, 0x2e, 0xfe, 0x02, 0x8a, 0x67, 0xdf, 0xfd, 0xff, 0x19, 0xdd, 0x08, 0x14, 0x76, 0x35, 0xf8, 0x9d, 0x11, 0xfa, 0x25, 0xdd, 0x37, 0x15, 0x66, 0xa5, 0x83, 0x8b, 0x3d, 0xbc, 0xad, 0xfe, 0x4e, 0x83, 0xa3, 0x77, 0x16, 0xd9, 0xdb, 0x62, 0xd9, 0x3d, 0xe7, 0xda, 0xdc, 0x32, 0x4a, 0x27, 0xd5, 0xe8, 0x8a, 0x85, 0xa0, 0x18, 0x86, 0x27, 0x33, 0x30, 0x0a, 0x7c, 0xd4, 0xb0, 0xa1, 0xb1, 0x8a, 0xd4, 0xaa, 0x77, 0xd1, 0x73, 0xae, 0x06, 0x91, 0x27, 0xf1, 0x62, 0x51, 0xae, 0x47, 0xdd, 0xa8, 0x90, 0x29, 0xdd, 0xf5, 0x02, 0x08, 0xdf, 0x50, 0x0b, 0xe1, 0xbc, 0xc1, 0xe5, 0x12, 0x2b, 0xaf, 0xa6, 0x6c, 0x88, 0x9b, 0x20, 0x89, 0xd4, 0x0e, 0x05, 0x60, 0xfc, 0xcf, 0x4f, 0x16, 0x5e, 0x5a, 0xde, 0x18, 0x89, 0x8e, 0x63, 0x66, 0x44, 0xa6, 0x7e, 0x32, 0xd3, 0x6a, 0x23, 0xa9, 0x75, 0xa6, 0x42, 0x11, 0x31, 0xdc, 0xa7, 0x14, 0xd2, 0x36, 0x1f, 0x5b, 0x31, 0xbe, 0xdc, 0x5f, 0xb2, 0xd1, 0x1a, 0x7c, 0x11, 0xd1, 0x03, 0x48, 0x5f, 0x1b, 0xd0, 0x22, 0x47, 0x39, 0x32, 0x0e, 0x96, 0x58, 0xf0, 0xc0, 0xfb, 0xfc, 0xd1, 0xf6, 0x0a, 0xf2, 0xbc, 0x0b, 0x87, 0x87, 0x1e, 0xc9, 0xe2, 0xf7, 0x8c, 0x80, 0xfe, 0x28, 0xaa, 0x54, 0x36, 0x98, 0x4b, 0xdb, 0xa2, 0x94, 0xd9, 0xe8, 0x96, 0xac, 0xf8, 0xa1, 0x6c, 0x63, 0x66, 0xd8, 0x84, 0x2b, 0x25, 0x98, 0x88, 0x90, 0xdd, 0xfd, 0xf5, 0xb3, 0x7c, 0x49, 0xd7, 0xfa, 0x1f, 0x35, 0xd4, 0x06, 0x35, 0x85, 0x6b, 0xe5, 0xe1, 0xdf, 0x7e, 0x89, 0xa1, 0xdd, 0x0e, 0x79, 0x2e, 0x61, 0x47, 0xc7, 0xa3, 0x29, 0xbc, 0x42, 0xe0, 0xa3, 0xf3, 0xec, 0x31, 0x02, 0x24, 0xaf, 0x2b, 0x91, 0x3e, 0x4b, 0xd7, 0x47, 0x2b, 0x93, 0x13, 0x9c, 0x55, 0xd9, 0x34, 0x9c, 0x69, 0xa7, 0xf0, 0x3a, 0x5b, 0xb0, 0x7c, 0xe6, 0xaa, 0x05, 0xf1, 0x62, 0xe5, 0x8c, 0xf4, 0xd1, 0x6e, 0xaf, 0x96, 0x11, 0x7e, 0x51, 0x79, 0x4a, 0x69, 0x06, 0x35, 0xc7, 0x23, 0x83, 0xf9, 0x05, 0x03, 0x53, 0x76, 0x0a, 0xc8, 0xcc, 0xf8, 0xf8, 0xda, 0x42, 0xd6, 0xe2, 0xd2, 0x7a, 0x0d, 0xde, 0x3b, 0x61, 0x28, 0x5c, 0x9a, 0xfe, 0x63, 0xb6, 0xad, 0xa6, 0x0f, 0x08, 0xf1, 0x6f, 0x38, 0x41, 0x66, 0xe7, 0x86, 0x7a, 0x96, 0x05, 0x61, 0x87, 0xd4, 0x5f, 0x58, 0xcc, 0xc2, 0x9e, 0xc4, 0x52, 0x16, 0x2f, 0xa8, 0x1b, 0x9d, 0x3c, 0xdc, 0xb2, 0x80, 0xdb, 0x6b, 0x05, 0xc6, 0x85, 0x39, 0x77, 0x1a, 0xc9, 0xe9, 0x32, 0xce, 0x41, 0xfd, 0xba, 0x21, 0xc6, 0x3f, 0xc8, 0xbd, 0xe0, 0x60, 0x55, 0x84, 0x80, 0xe0, 0xf5, 0x8c, 0xf2, 0x2d, 0x66, 0x68, 0x0d, 0x0f, 0x69, 0xaa, 0xad, 0x43, 0xd0, 0xa5, 0x63, 0x67, 0xd9, 0x78, 0x6a, 0x16, 0xba, 0x48, 0xdd, 0x53, 0x7d, 0xcc, 0x28, 0x2b, 0x0e, 0x0f, 0xbd, 0x96, 0x93, 0x71, 0x08, 0x9f, 0xfb, 0xef, 0xa4, 0xc4, 0xda, 0xa5, 0xcf, 0xa0, 0x74, 0x91, 0x1b, 0xc7, 0x17, 0x9a, 0x67, 0xf2, 0xaf, 0xd1, 0x0e, 0x5c, 0x94, 0xf6, 0x5e, 0x6b, 0xa6, 0x3e, 0x4c, 0x93, 0x9c, 0x53, 0x65, 0x78, 0x99, 0x9d, 0x08, 0x52, 0x00, 0xc0, 0xd3, 0x96, 0x8a, 0x66, 0x5b, 0xd3, 0x96, 0x3e, 0x20, 0xd9, 0xc0, 0x45, 0xc0, 0x21, 0xb4, 0x44, 0x6a, 0x69, 0x45, 0x99, 0x96, 0x9f, 0xb9, 0x3b, 0xf3, 0x00, 0x67, 0xf9, 0xa1, 0x81, 0x85, 0x02, 0xa1, 0x6e, 0x3b, 0xaa, 0x8a, 0x51, 0xfb, 0x6b, 0x7d, 0x15, 0x15, 0x2a, 0x5a, 0x6b, 0x86, 0xbc, 0x34, 0x6d, 0x11, 0xa9, 0x03, 0x81, 0x92, 0x30, 0x99, 0x81, 0x8e, 0x8b, 0xd8, 0x19, 0x0e, 0x74, 0x21, 0x70, 0xae, 0xe7, 0x0f, 0x0a, 0xf1, 0x2a, 0x66, 0xed, 0xd7, 0x0b, 0x46, 0x02, 0xb2, 0x69, 0xa5, 0xbf, 0x35, 0xf5, 0xfc, 0x03, 0xce, 0x3a, 0x3f, 0x41, 0x36, 0xdb, 0x13, 0xe1, 0x46, 0x1c, 0x3c, 0xe3, 0x0c, 0xa4, 0x54, 0xc6, 0x1e, 0x82, 0xc3, 0xa8, 0x2e, 0x6d, 0xeb, 0xae, 0xdf, 0x50, 0xa3, 0xa6, 0xd7, 0x06, 0xe7, 0xeb, 0x15, 0x61, 0xcd, 0x89, 0x85, 0x72, 0xbb, 0xa2, 0xd2, 0x04, 0xd8, 0x11, 0x7c, 0x6a, 0xc0, 0x4c, 0x2a, 0x7b, 0x7c, 0x8f, 0x41, 0xda, 0xb1, 0x37, 0xb5, 0x7b, 0x17, 0x6c, 0x20, 0x62, 0x2d, 0x02, 0x11, 0xae, 0x2c, 0xa1, 0xa6, 0xd7, 0x39, 0x24, 0x5d, 0x34, 0xde, 0x40, 0x27, 0xc0, 0xbb, 0x66, 0xbe, 0x1d, 0x79, 0xea, 0x39, 0xd9, 0x00, 0x64, 0xde, 0xf1, 0xea, 0x57, 0x37, 0x93, 0x37, 0x10, 0x68, 0x28, 0x42, 0xd1, 0xbf, 0x92, 0xf3, 0x2f, 0x8d, 0xb2, 0x37, 0xb9, 0x34, 0x2e, 0xad, 0xda, 0x82, 0x71, 0xa3, 0x01, 0x3d, 0xf3, 0x40, 0xfe, 0xff, 0xba, 0x02, 0xb0, 0x44, 0x21, 0x6c, 0xdd, 0xc2, 0xd8, 0xf8, 0x61, 0xf9, 0x2c, 0x53, 0x8b, 0x0a, 0x88, 0xc9, 0xc4, 0xcc, 0x3c, 0xfe, 0x71, 0x1d, 0x7e, 0xe0, 0x1b, 0x76, 0xae, 0xd9, 0xcd, 0xc3, 0xdf, 0x49, 0xbe, 0x71, 0x92, 0x33, 0x30, 0xc8, 0xc4, 0x37, 0x98, 0x7b, 0x2c, 0xc0, 0xff, 0x7d, 0xbe, 0x7e, 0xa8, 0x17, 0x73, 0x17, 0xf3, 0x38, 0x4c, 0x19, 0x81, 0x0c, 0x95, 0x34, 0x99, 0xcf, 0x67, 0xa6, 0xcb, 0xe4, 0x70, 0xf6, 0xd3, 0x21, 0xf6, 0xe5, 0xc0, 0x6e, 0x1a, 0xa2, 0x55, 0x8e, 0x5a, 0x3d, 0xaf, 0x3c, 0x5a, 0x5e, 0x28, 0x7a, 0xe4, 0x37, 0x7c, 0x26, 0x2d, 0xb7, 0x2a, 0xce, 0x5a, 0x00, 0x1d, 0xc5, 0x42, 0x1c, 0x8c, 0x76, 0x76, 0xeb, 0x1f, 0xf9, 0x7f, 0x60, 0x53, 0xe4, 0x66, 0xed, 0x1f, 0x64, 0x7a, 0x3c, 0xd8, 0x8c, 0x4d, 0x20, 0x52, 0xec, 0x00, 0xcb, 0x48, 0x66, 0xc0, 0x41, 0xfd, 0x3d, 0x91, 0x0d, 0x24, 0x6f, 0x4a, 0x32, 0xfd, 0x45, 0xe1, 0x64, 0xc2, 0x28, 0xe9, 0x78, 0x41, 0xb6, 0x59, 0x1a, 0xca, 0x15, 0x8f, 0xbe, 0x4b, 0x87, 0x95, 0xd9, 0xba, 0x3f, 0xa2, 0x50, 0xb3, 0x74, 0xe4, 0x30, 0x63, 0xb3, 0x7c, 0xa1, 0xa4, 0x79, 0xcb, 0x15, 0x69, 0x01, 0xec, 0xc5, 0x5d, 0x5b, 0x81, 0x5e, 0xc7, 0xbe, 0xb3, 0xf7, 0xb1, 0x1f, 0x74, 0x47, 0x49, 0x02, 0x07, 0x15, 0x87, 0x91, 0xc3, 0xef, 0x10, 0xeb, 0x14, 0x1f, 0x5b, 0xbe, 0xc2, 0xdb, 0x12, 0x18, 0x76, 0xbc, 0xbb, 0x7a, 0x7a, 0x72, 0x97, 0x2f, 0xc0, 0xb5, 0xca, 0xdb, 0x26, 0x7e, 0xbd, 0x57, 0xf8, 0x78, 0xc1, 0xbc, 0xb6, 0xb1, 0xf5, 0xbe, 0x18, 0x96, 0x69, 0x3c, 0x50, 0x1e, 0x83, 0x14, 0x8f, 0x45, 0xa2, 0x3c, 0xca, 0xbc, 0x02, 0x0f, 0xbe, 0xdf, 0xe0, 0xe4, 0x32, 0xe7, 0xde, 0xe5, 0x7c, 0x61, 0xa8, 0x1f, 0x46, 0xdf, 0xd8, 0xd5, 0x92, 0xed, 0x17, 0x1a, 0xfc, 0x46, 0x85, 0x9f, 0x3f, 0x48, 0x5c, 0xc9, 0xfb, 0xa6, 0xd0, 0x06, 0xb6, 0x5d, 0x39, 0x62, 0x20, 0xe9, 0x73, 0x55, 0x9b, 0xb8, 0x85, 0xdf, 0xfa, 0xdf, 0x82, 0xd7, 0x89, 0x0c, 0xad, 0x81, 0x4e, 0xbb, 0xe0, 0x5e, 0x8f, 0xad, 0x2f, 0x48, 0x95, 0x96, 0xc8, 0xbe, 0xaf, 0x17, 0x1d, 0x7c, 0x79, 0xeb, 0x46, 0x4e, 0x5d, 0x65, 0xa0, 0x27, 0x5b, 0x1a, 0xbb, 0x6d, 0x06, 0xdb, 0x73, 0x98, 0xcf, 0xe6, 0x5c, 0xfb, 0x86, 0x5c, 0x64, 0xe1, 0x1e, 0xf6, 0xb3, 0xdc, 0xb1, 0xf4, 0xd6, 0x5a, 0xc3, 0x57, 0x1d, 0x79, 0xcb, 0x50, 0x41, 0x1d, 0xf0, 0xf8, 0x4a, 0x3f, 0x10, 0x41, 0xb0, 0x88, 0x06, 0x2d, 0xc1, 0x1e, 0x2d, 0x3e, 0x42, 0xbe, 0x20, 0x2d, 0x59, 0x0b, 0xc4, 0xdf, 0xab, 0x25, 0x89, 0x94, 0xc1, 0x7e, 0xec, 0x62, 0xb0, 0xe9, 0x41, 0xe2, 0xf9, 0xf4, 0xaf, 0x29, 0xae, 0x78, 0x7c, 0xf9, 0xd6, 0x6e, 0x8a, 0x39, 0x13, 0x04, 0x22, 0xa3, 0x82, 0xf1, 0xf1, 0xbd, 0xe3, 0x05, 0x50, 0x0a, 0xfa, 0x04, 0xc9, 0x81, 0x34, 0xb4, 0xd6, 0x3e, 0x8e, 0x35, 0xeb, 0x78, 0xb3, 0x91, 0xb7, 0xb3, 0x64, 0x94, 0xa8, 0x36, 0x1d, 0xde, 0xad, 0xc0, 0xf6, 0x36, 0x3f, 0x77, 0xc7, 0x21, 0xa2, 0x21, 0x8f, 0xb3, 0x68, 0x96, 0x17, 0xa6, 0x38, 0x75, 0xd2, 0xa9, 0xcd, 0x17, 0x08, 0xfa, 0x41, 0xc1, 0x33, 0x37, 0x8c, 0x1e, 0xaa, 0x72, 0x48, 0xec, 0x7c, 0x83, 0xb7, 0xf5, 0x9f, 0xa2, 0x06, 0x41, 0x4a, 0x35, 0xd3, 0x8a, 0x9f, 0xe6, 0xee, 0xf0, 0x8d, 0xf9, 0x5c, 0xee, 0xf5, 0xdc, 0xa2, 0x8d, 0x0b, 0x00, 0x40, 0xd7, 0x00, 0xe8, 0x7b, 0x8f, 0xde, 0x80, 0x5f, 0x1f, 0xb3, 0xaf, 0x05, 0xd2, 0xf1, 0x2f, 0x12, 0x43, 0x15, 0x9d, 0x80, 0x16, 0x87, 0xcc, 0xa1, 0xe5, 0xc1, 0x5f, 0x60, 0x7d, 0xb4, 0x97, 0xcb, 0x4b, 0x67, 0x69, 0xce, 0x11, 0xe2, 0xd4, 0x41, 0xdd, 0x4a, 0x71, 0x26, 0x3c, 0x4d, 0x4c, 0x2b, 0xab, 0xc1, 0xf2, 0x77, 0x4e, 0x87, 0xcb, 0xa2, 0xe5, 0xb6, 0xaa, 0x05, 0xfb, 0xf5, 0xa3, 0x35, 0x60, 0x29, 0x1d, 0xca, 0xda, 0x51, 0x27, 0x65, 0x18, 0xad, 0x10, 0xf1, 0xe7, 0x26, 0x31, 0x28, 0xa9, 0xea, 0x0e, 0x59, 0x02, 0x57, 0x9e, 0x69, 0xd4, 0x1a, 0xe6, 0x19, 0x6e, 0x98, 0xcd, 0x86, 0x00, 0x8d, 0x2b, 0xf6, 0x52, 0xf2, 0x23, 0xd1, 0xb6, 0x25, 0xb3, 0xee, 0x3c, 0x44, 0x89, 0x10, 0x24, 0xd9, 0x18, 0xb1, 0x99, 0xbd, 0xec, 0xfe, 0x9c, 0x36, 0x3a, 0x22, 0x3e, 0x63, 0xbc, 0xc7, 0x12, 0xda, 0xbb, 0xda, 0xe2, 0x8f, 0x6e, 0x8f, 0xa1, 0xf8, 0x82, 0xa6, 0xa1, 0x6e, 0xfa, 0xec, 0x06, 0xd7, 0x39, 0x04, 0x7b, 0x82, 0x5d, 0x67, 0x23, 0x52, 0xcf, 0xaa, 0xd2, 0x1f, 0x18, 0x00, 0x7e, 0x59, 0xf7, 0xff, 0xf0, 0xee, 0xb0, 0xa7, 0xbf, 0x6e, 0xa6, 0xa0, 0x7f, 0x6e, 0x2c, 0xc3, 0x36, 0x2a, 0x99, 0xdc, 0x0f, 0x6e, 0x9a, 0xae, 0x53, 0xb6, 0xcd, 0x38, 0x94, 0x94, 0x8b, 0x37, 0x2c, 0x52, 0x05, 0xec, 0xe6, 0xd8, 0x92, 0x1f, 0xfa, 0xd1, 0x47, 0x64, 0x3f, 0x0a, 0xc9, 0x9d, 0x9c, 0x1a, 0x5f, 0xc0, 0xbf, 0x48, 0x4b, 0xdb, 0x12, 0xa9, 0x5b, 0x55, 0xeb, 0x89, 0xbb, 0x76, 0x04, 0x0c, 0x0d, 0x29, 0x2a, 0x15, 0xbb, 0x01, 0x39, 0x67, 0x8c, 0x7b, 0x47, 0x0b, 0x76, 0x83, 0x20, 0xf1, 0xb4, 0x39, 0xf3, 0xda, 0x18, 0xf4, 0x4a, 0x74, 0xa1, 0x87, 0x3f, 0xc7, 0x50, 0xc4, 0xed, 0xd1, 0x38, 0x3f, 0x26, 0x6d, 0xd5, 0x55, 0x64, 0x7a, 0x9e, 0x6c, 0x01, 0x38, 0xdd, 0x7b, 0xaa, 0xf5, 0xbf, 0xce, 0x11, 0xea, 0xa7, 0x03, 0xe2, 0x60, 0xc8, 0x59, 0xf9, 0x17, 0xf3, 0x2a, 0xd2, 0xe7, 0xad, 0xb5, 0x40, 0xa8, 0x85, 0x21, 0x62, 0x50, 0xa5, 0xbf, 0xd3, 0x5b, 0xa6, 0x90, 0x22, 0x70, 0xa9, 0x07, 0x82, 0x41, 0xa3, 0x0f, 0xc2, 0xb3, 0xf8, 0x50, 0x7f, 0x3f, 0x4c, 0xae, 0x98, 0x97, 0x95, 0x13, 0xe2, 0x8d, 0x75, 0x6f, 0x1d, 0x31, 0xc8, 0xfd, 0x27, 0x3a, 0x79, 0xc7, 0x70, 0xa8, 0x99, 0x6c, 0xae, 0xa7, 0xb2, 0x21, 0xd2, 0xb5, 0x58, 0xf6, 0x3a, 0x07, 0x02, 0x5b, 0x28, 0x29, 0x18, 0xe2, 0x73, 0xe6, 0x4d, 0x46, 0x7c, 0x67, 0x2f, 0xad, 0x64, 0x9f, 0xfc, 0x2a, 0x7c, 0xe6, 0xb8, 0x86, 0xfd, 0xe3, 0x7c, 0x40, 0xfa, 0xb0, 0x11, 0xd2, 0x92, 0x39, 0xbe, 0x36, 0x6a, 0xe5, 0x5d, 0xa9, 0x5b, 0x79, 0xb4, 0xaf, 0x67, 0x39, 0x03, 0x57, 0xf2, 0x50, 0xda, 0xc0, 0x2e, 0x71, 0x2d, 0xdc, 0xd8, 0xbf, 0xaa, 0x74, 0x22, 0xea, 0x4a, 0x6c, 0xf0, 0x9b, 0x27, 0x49, 0x46, 0x13, 0x8d, 0xf0, 0x01, 0x0f, 0x53, 0xb0, 0xc6, 0xee, 0x6c, 0x83, 0x39, 0x15, 0xb9, 0x91, 0x6f, 0x93, 0x21, 0xf6, 0xa5, 0x01, 0xe4, 0xc5, 0x32, 0xac, 0x2c, 0x4d, 0xba, 0xf7, 0xe6, 0x9b, 0xa5, 0xfa, 0xcf, 0x40, 0xcf, 0x6f, 0xd2, 0x54, 0x81, 0xcf, 0x91, 0xba, 0xa1, 0xb8, 0x42, 0xa6, 0x25, 0x92, 0xbc, 0x5d, 0xcd, 0x72, 0xd1, 0x3c, 0x12, 0x3e, 0xdf, 0xfc, 0x5a, 0x13, 0xa2, 0x34, 0x6d, 0xe3, 0x4c, 0x1f, 0x2c, 0x63, 0xd8, 0xa0, 0x81, 0x24, 0x9b, 0x83, 0x92, 0xff, 0x1c, 0x06, 0x3a, 0xb7, 0x25, 0x98, 0xb9, 0xda, 0x1a, 0xe0, 0xaa, 0xe8, 0x8a, 0x01, 0x36, 0xb7, 0x04, 0x1d, 0x88, 0x16, 0x2c, 0x18, 0x80, 0xb1, 0x0d, 0x9e, 0xac, 0x35, 0xb1, 0x67, 0x74, 0xb4, 0xef, 0xb9, 0x94, 0x4a, 0x85, 0x2f, 0xd0, 0x01, 0x67, 0xba, 0xe2, 0xf2, 0x56, 0xe5, 0xb8, 0xad, 0xb3, 0x5d, 0xdc, 0xdb, 0x96, 0xb0, 0x34, 0x22, 0x1b, 0x55, 0xeb, 0x49, 0xfc, 0xed, 0xaf, 0x9d, 0x65, 0xc8, 0x1d, 0x93, 0x03, 0xab, 0x79, 0xae, 0x5f, 0xd0, 0xa3, 0xa3, 0x6a, 0x2f, 0x46, 0xbc, 0x58, 0xfc, 0x53, 0x7a, 0xb2, 0x71, 0xae, 0x7e, 0xa7, 0xcd, 0x27, 0xa9, 0xa4, 0x9d, 0xab, 0x83, 0x24, 0x3a, 0xbb, 0xd9, 0xc8, 0x93, 0x1e, 0xab, 0xaa, 0x2c, 0xd3, 0x45, 0xef, 0x67, 0x4a, 0xab, 0x9b, 0x03, 0xd4, 0x3a, 0xa9, 0xe2, 0x57, 0x8d, 0x5c, 0x0f, 0x46, 0x9e, 0xd0, 0xff, 0xd0, 0x2d, 0xd4, 0x17, 0x58, 0x66, 0xfc, 0x6f, 0x26, 0xbe, 0xf1, 0xd6, 0x5c, 0x1e, 0x0c, 0x16, 0x2b, 0x43, 0x23, 0x79, 0x46, 0x65, 0xa3, 0x8b, 0x97, 0x16, 0xdf, 0x22, 0x32, 0x6e, 0xa8, 0x9c, 0x87, 0x65, 0x1e, 0x68, 0xdb, 0x80, 0xc5, 0xc8, 0xf9, 0xb0, 0xdc, 0xd4, 0x24, 0x77, 0xea, 0xc3, 0x51, 0x4c, 0x99, 0x66, 0x93, 0x41, 0xc7, 0xf5, 0xd7, 0xe3, 0xdb, 0x0e, 0xd1, 0x61, 0x55, 0xfb, 0x36, 0xf1, 0xaa, 0x34, 0x2c, 0x70, 0x4e, 0x24, 0xff, 0x48, 0x12, 0x30, 0x15, 0x97, 0xb0, 0xf6, 0x24, 0x8e, 0xa4, 0xd2, 0xa2, 0x17, 0x3e, 0xa7, 0x7d, 0xba, 0xf6, 0xdc, 0x0d, 0xc1, 0xff, 0xa4, 0x47, 0x9a, 0x1f, 0x83, 0x33, 0x7e, 0xbd, 0x0e, 0xa0, 0x50, 0x3c, 0xf2, 0x16, 0xc8, 0x87, 0x37, 0x0c, 0xd0, 0xed, 0xc6, 0x5b, 0x2e, 0x30, 0x29, 0xf3, 0x64, 0xd8, 0x93, 0xcc, 0xd4, 0xcd, 0x20, 0x20, 0x28, 0x25, 0x5d, 0xd8, 0xf1, 0x3b, 0x0b, 0x44, 0x8e, 0x01, 0x20, 0x0e, 0x50, 0x97, 0x0f, 0x71, 0xdc, 0x1c, 0x49, 0xa6, 0xd0, 0xc4, 0x04, 0x9f, 0xa9, 0x2a, 0x3b, 0xf8, 0xe4, 0xe8, 0xf6, 0x2b, 0x63, 0x66, 0xcb, 0x03, 0x13, 0xef, 0xa5, 0x53, 0xcc, 0x0a, 0xc4, 0xe7, 0x78, 0x07, 0x05, 0xbb, 0x78, 0xd8, 0x64, 0x6b, 0x43, 0x22, 0xbf, 0xeb, 0x50, 0x94, 0xdd, 0x78, 0x37, 0x78, 0xae, 0xce, 0x13, 0x87, 0xd4, 0x9c, 0x2a, 0x02, 0x63, 0x35, 0xd0, 0xfe, 0xe5, 0x88, 0x88, 0x00, 0xa2, 0x52, 0x6d, 0xc9, 0x1e, 0x92, 0xd0, 0x73, 0xe2, 0x3e, 0x23, 0xbd, 0x7f, 0x34, 0x15, 0xa4, 0xd1, 0x73, 0xff, 0x33, 0x81, 0x8b, 0x7f, 0x9b, 0xcd, 0x52, 0x62, 0x86, 0x8c, 0xd9, 0xc8, 0xa9, 0x6c, 0x9e, 0x82, 0x98, 0x7f, 0x03, 0xbf, 0xdf, 0xf6, 0xff, 0xe8, 0x4e, 0x2c, 0x14, 0xc8, 0x94, 0xe6, 0x81, 0xf0, 0x10, 0xd9, 0xb8, 0x5a, 0xe3, 0x6c, 0x12, 0x4c, 0x4a, 0xc0, 0xc2, 0x7f, 0x2b, 0xed, 0x08, 0x81, 0xed, 0x8f, 0xa7, 0x58, 0x8d, 0x82, 0x98, 0x68, 0xee, 0xe9, 0x00, 0x97, 0x71, 0x75, 0x60, 0xae, 0xc6, 0xe4, 0x0b, 0x02, 0x02, 0xc7, 0xde, 0x55, 0xf1, 0x89, 0x2b ],
+const [ 0x14, 0x1f, 0xd0, 0xb3, 0xd1, 0x11, 0xb5, 0x10, 0xdd, 0xcb, 0x31, 0xde, 0xe8, 0x87, 0xa3, 0xd4, 0x63, 0x46, 0x1a, 0x95, 0xef, 0x72, 0x68, 0x7a, 0x15, 0xc1, 0x78, 0x92, 0x37, 0x5c, 0xe1, 0xe7, 0xc6, 0x41, 0xba, 0x03, 0xb6, 0xe5, 0xb1, 0xb3, 0x2f, 0x1e, 0x57, 0x0b, 0x86, 0x41, 0xbe, 0xaa, 0x6b, 0x87, 0x46, 0x40, 0x64, 0xb6, 0xb4, 0x4d, 0x7a, 0xfd, 0x84, 0x2b, 0x31, 0x1f, 0x81, 0x4e, 0xbe, 0xd4, 0x92, 0xcb, 0x75, 0x6c, 0xd7, 0x17, 0x81, 0xb5, 0xf4, 0x11, 0xd7, 0x1f, 0xad, 0x43, 0x6d, 0x1e, 0xb4, 0x65, 0xa6, 0xd0, 0xbe, 0x23, 0x11, 0xe0, 0xdc, 0x21, 0x54, 0xaa, 0x09, 0x3b, 0x63, 0x9f, 0xff, 0x11, 0xf6, 0xeb, 0x50, 0xc3, 0x39, 0x56, 0xb1, 0xf9, 0xc5, 0x68, 0x99, 0x27, 0xcf, 0xd1, 0x0b, 0x0f, 0x9f, 0x08, 0xaf, 0x87, 0x44, 0x31, 0x28, 0x7c, 0x87, 0x44, 0xa2, 0x37, 0x1d, 0x6c, 0xaa, 0xdf, 0x21, 0xad, 0x43, 0x3f, 0xc1, 0xca, 0x36, 0xca, 0x37, 0x66, 0xa9, 0xdc, 0xfb, 0x69, 0xf3, 0x43, 0x36, 0xa5, 0xaf, 0xfe, 0x7a, 0xba, 0x0f, 0x44, 0xb1, 0x36, 0x74, 0xc9, 0x54, 0x01, 0x3b, 0x3c, 0xde, 0xf9, 0xd9, 0x14, 0x7f, 0xd9, 0x2a, 0x8c, 0x14, 0x5f, 0x06, 0xec, 0x57, 0xae, 0x16, 0x0b, 0x53, 0xf1, 0xe5, 0x12, 0x1c, 0x41, 0x3a, 0x82, 0xbc, 0xc9, 0xa6, 0x79, 0x70, 0x27, 0x59, 0x31, 0x15, 0x16, 0x39, 0xc9, 0xdd, 0x4a, 0x36, 0x48, 0x46, 0x9c, 0xd7, 0xdf, 0x4d, 0x67, 0x19, 0x6e, 0xde, 0x32, 0x7a, 0x4a, 0x90, 0x8f, 0x51, 0x3e, 0x8f, 0x42, 0x60, 0xcf, 0xd9, 0xa6, 0xac, 0xc4, 0xae, 0x4d, 0x8d, 0xe6, 0x41, 0xe7, 0x01, 0x05, 0xb4, 0x65, 0x45, 0x3b, 0x43, 0x5e, 0xa7, 0x75, 0xc0, 0xb1, 0x96, 0x2e, 0x3f, 0x6c, 0xfb, 0x7e, 0x12, 0xec, 0xcc, 0x54, 0xf8, 0x46, 0xdd, 0xff, 0x91, 0xe6, 0xfa, 0xf4, 0x15, 0x76, 0x34, 0xcb, 0x46, 0x02, 0x78, 0x8a, 0xa3, 0x59, 0x66, 0x26, 0xdf, 0xb6, 0x5f, 0x47, 0x91, 0x9f, 0xe0, 0x4c, 0x2d, 0x0e, 0x0f, 0x8f, 0x33, 0xcf, 0x94, 0xea, 0xa6, 0x29, 0xaa, 0x7a, 0xc0, 0xc0, 0x76, 0xa2, 0xe4, 0xba, 0x97, 0x53, 0xd4, 0x21, 0xfe, 0x8b, 0x24, 0x88, 0x00, 0x1c, 0xef, 0xf2, 0xa9, 0xaf, 0xc8, 0xef, 0x54, 0x08, 0xf3, 0x08, 0x78, 0x8c, 0xd6, 0x5d, 0xc5, 0x00, 0xaa, 0x8d, 0x70, 0x93, 0x76, 0xd6, 0xcb, 0x1f, 0x3e, 0x7e, 0x18, 0xac, 0x77, 0x71, 0x9f, 0x36, 0xbf, 0x2b, 0xfe, 0xb0, 0xcb, 0xd8, 0xc1, 0x48, 0xa1, 0xba, 0x32, 0xed, 0x07, 0xcc, 0x72, 0x0e, 0x3b, 0xa5, 0xc9, 0xa5, 0xe4, 0x9e, 0x3b, 0x75, 0x49, 0x37, 0x5c, 0x8f, 0xc1, 0xb7, 0x65, 0x1b, 0x6a, 0x13, 0x86, 0x55, 0x1e, 0x11, 0x7e, 0xd6, 0xa3, 0xad, 0x6a, 0x15, 0x22, 0xbc, 0xda, 0x2d, 0xdb, 0xcf, 0x2a, 0xe1, 0x16, 0x5a, 0x10, 0xdd, 0x5d, 0x16, 0x71, 0x3e, 0xe8, 0xa3, 0x79, 0x55, 0x59, 0x72, 0xea, 0xa8, 0xaa, 0xe2, 0xb4, 0x3a, 0x63, 0xa9, 0xc7, 0x0d, 0x10, 0x76, 0x25, 0xe4, 0xf2, 0xd5, 0x3b, 0x4d, 0xf5, 0x52, 0x71, 0xdf, 0xe2, 0xe1, 0x00, 0xc1, 0xd6, 0x7d, 0x03, 0x6c, 0xf3, 0x10, 0xd2, 0xb1, 0x55, 0x93, 0x8b, 0xfd, 0x47, 0x76, 0xf1, 0xdc, 0xb7, 0x42, 0x7a, 0xbc, 0xe8, 0x7d, 0xa3, 0xf4, 0x67, 0xce, 0x87, 0x04, 0x40, 0x61, 0xb0, 0x1e, 0x71, 0x8d, 0x2d, 0xe6, 0x9f, 0xb4, 0xe4, 0x77, 0x08, 0x6b, 0x2a, 0xa6, 0xb9, 0xdb, 0x91, 0x8a, 0x01, 0x67, 0x01, 0x3c, 0x25, 0x90, 0x0b, 0xdb, 0x55, 0x15, 0x79, 0xd3, 0xdf, 0x5e, 0x2a, 0x5f, 0xa3, 0x1a, 0x1d, 0x4d, 0xc7, 0x28, 0xcb, 0x02, 0xac, 0xb3, 0xba, 0xbd, 0x20, 0xa2, 0x4f, 0x20, 0xd5, 0x2f, 0xe4, 0xec, 0x11, 0xd5, 0x1a, 0x0c, 0xa8, 0x70, 0x70, 0xd5, 0x28, 0xa0, 0x15, 0x8c, 0x53, 0x6e, 0xfb, 0x28, 0xd2, 0x32, 0x2d, 0x5a, 0x27, 0xb4, 0x62, 0xcb, 0xe4, 0x91, 0xd2, 0xa5, 0x1a, 0xe0, 0x48, 0x54, 0x15, 0x16, 0x79, 0x8e, 0x46, 0x27, 0x94, 0x90, 0x81, 0xee, 0x1a, 0xab, 0x69, 0xcf, 0xf0, 0x00, 0x28, 0x9b, 0xb3, 0x88, 0x63, 0xb3, 0x4b, 0x57, 0x6c, 0x71, 0xc3, 0x21, 0xba, 0xc3, 0x57, 0xfd, 0x97, 0x19, 0xcf, 0x69, 0x19, 0x82, 0x0c, 0x8e, 0x53, 0x11, 0xe1, 0xc6, 0xcc, 0x86, 0x24, 0x5c, 0x31, 0x2a, 0x04, 0x93, 0x46, 0xfb, 0x9c, 0xe9, 0x22, 0x09, 0xc9, 0x9c, 0x9c, 0x20, 0x39, 0x6e, 0x01, 0xa7, 0xc5, 0xa5, 0x08, 0xc8, 0x01, 0x57, 0x07, 0xd2, 0x11, 0xe4, 0x66, 0xdb, 0xbe, 0xc4, 0x54, 0xa9, 0xc9, 0x83, 0xba, 0xd3, 0x7e, 0x09, 0x6d, 0x23, 0x8d, 0x1f, 0xa8, 0x3f, 0x16, 0x2f, 0xb9, 0x88, 0x03, 0x4b, 0xfa, 0x43, 0x9a, 0x71, 0x03, 0xf7, 0x52, 0x0e, 0x1e, 0x15, 0xe6, 0xc0, 0xfc, 0xde, 0xa9, 0x60, 0xa6, 0x82, 0x19, 0x40, 0xb5, 0x85, 0xb6, 0xb1, 0xc6, 0x67, 0x15, 0xc9, 0x29, 0x84, 0x30, 0x63, 0xd9, 0x39, 0x00, 0x66, 0xb1, 0x48, 0x4e, 0x4b, 0xdc, 0x7e, 0xc6, 0xd9, 0x8e, 0x93, 0x4d, 0x33, 0xf1, 0x51, 0x94, 0x15, 0x63, 0xf8, 0xed, 0x5b, 0xde, 0xe2, 0x5e, 0xc3, 0xb7, 0x63, 0xf4, 0xf3, 0x8c, 0xf3, 0x5a, 0xbe, 0x78, 0x8f, 0xaa, 0xa3, 0x88, 0x5c, 0x83, 0x96, 0x73, 0x8e, 0x5c, 0x04, 0x85, 0x88, 0x18, 0x11, 0xdd, 0x44, 0xda, 0x24, 0xd8, 0xf6, 0x1a, 0xa5, 0xcd, 0xec, 0xf9, 0x05, 0xfb, 0xb9, 0xd1, 0xff, 0xbf, 0x92, 0x11, 0x1e, 0x0b, 0xf8, 0x48, 0x80, 0x13, 0x98, 0x7f, 0xd9, 0x49, 0x6f, 0xcc, 0xba, 0x8c, 0x31, 0x24, 0x14, 0x9c, 0xec, 0x71, 0xf8, 0xd2, 0xe8, 0xe4, 0xa0, 0x0e, 0xd3, 0x8d, 0xb3, 0xf0, 0x1a, 0x29, 0xc5, 0x4b, 0x9a, 0x3b, 0x1d, 0xd6, 0x78, 0x5e, 0xbc, 0x25, 0x4d, 0xd9, 0x9b, 0xd8, 0x87, 0x74, 0x33, 0x13, 0x0c, 0x8a, 0x42, 0x2e, 0x20, 0x60, 0xcd, 0xad, 0x88, 0xb5, 0x61, 0x72, 0xef, 0x9a, 0x9f, 0x31, 0x8a, 0x84, 0xf8, 0x25, 0xf8, 0xa0, 0xb4, 0x01, 0x6c, 0x66, 0x39, 0x2a, 0x0d, 0x71, 0x8a, 0x23, 0x9d, 0x8e, 0x0e, 0x48, 0x59, 0x13, 0x93, 0xc0, 0x21, 0x72, 0x92, 0xad, 0xd9, 0x0d, 0xb4, 0xa5, 0x0f, 0x4c, 0x96, 0x66, 0xde, 0xed, 0xc9, 0xc5, 0x12, 0x9c, 0x1e, 0xe8, 0x8c, 0xc4, 0x20, 0xb5, 0xe9, 0xa4, 0xe1, 0x8a, 0x5e, 0xa5, 0xfa, 0x2f, 0xe6, 0xeb, 0xcd, 0x09, 0xa0, 0x2a, 0x0d, 0x90, 0x72, 0xbb, 0x81, 0x03, 0xf3, 0xef, 0x04, 0x5a, 0x88, 0xa3, 0xd1, 0x7c, 0xcd, 0x14, 0xfd, 0xb2, 0x36, 0xf5, 0x45, 0x5b, 0xf6, 0xbf, 0x0a, 0xe2, 0x1f, 0x49, 0x9a, 0xee, 0x0b, 0x98, 0xb1, 0xd8, 0xfc, 0xf8, 0x40, 0x62, 0xff, 0x4b, 0x6c, 0xa6, 0x16, 0xa2, 0xda, 0x4c, 0x95, 0x0a, 0x2a, 0x00, 0xcd, 0xa9, 0xc1, 0x23, 0xe8, 0x09, 0xcc, 0xc1, 0x14, 0xb3, 0x81, 0xc4, 0xe4, 0x00, 0xa8, 0x67, 0xf2, 0x2c, 0x5b, 0xed, 0xca, 0xac, 0x0a, 0x92, 0x03, 0xc1, 0xc2, 0xc2, 0xaf, 0x4e, 0xae, 0x89, 0xf6, 0xe7, 0xde, 0x4b, 0xfd, 0x2a, 0x47, 0xb5, 0x0d, 0x52, 0x0b, 0xf3, 0xf1, 0x09, 0xfb, 0x23, 0x9f, 0x7e, 0x5a, 0x0a, 0x1b, 0xb8, 0xe4, 0x06, 0x99, 0x2a, 0x0f, 0x44, 0xe2, 0x87, 0x91, 0x33, 0xf8, 0xd7, 0x22, 0x39, 0xfd, 0xcb, 0x83, 0xa4, 0x51, 0x4d, 0xbf, 0xe3, 0xfb, 0x5c, 0xb1, 0xf6, 0x4a, 0x17, 0xc6, 0x23, 0xbb, 0x17, 0x05, 0xeb, 0x1e, 0x02, 0x4c, 0x3c, 0xf5, 0x5d, 0xdc, 0xe8, 0x1d, 0xa2, 0x17, 0x56, 0xb0, 0x93, 0x89, 0x78, 0x29, 0xcd, 0x26, 0xfc, 0xc9, 0xa0, 0xd2, 0xc7, 0x3a, 0x1e, 0x27, 0x9f, 0x73, 0x72, 0x72, 0x27, 0xdb, 0x74, 0xfe, 0x11, 0xb1, 0x7a, 0x96, 0x8f, 0xab, 0x70, 0x45, 0x0a, 0xdd, 0x2b, 0x60, 0x17, 0xdd, 0xfa, 0xc6, 0xa7, 0x25, 0x7e, 0x67, 0x7d, 0xb8, 0xbc, 0x03, 0xe6, 0x09, 0x71, 0x34, 0xa4, 0x18, 0xa5, 0xaf, 0x2b, 0xde, 0x83, 0xc7, 0x10, 0xeb, 0x68, 0x33, 0xbe, 0x4e, 0x3a, 0x10, 0x6b, 0xb5, 0xfb, 0x2a, 0x4a, 0xd5, 0x9e, 0x77, 0x02, 0x0c, 0x19, 0xe4, 0x60, 0x45, 0xbb, 0x54, 0x48, 0x1d, 0xc0, 0xe6, 0xf2, 0x44, 0x23, 0x77, 0x53, 0x25, 0xb3, 0x69, 0xd8, 0xc9, 0x69, 0xa2, 0x5a, 0xf8, 0xf9, 0xd7, 0x4f, 0xa2, 0xa7, 0x0a, 0x3d, 0x7e, 0x5c, 0x51, 0x75, 0xf1, 0xf9, 0xda, 0xfd, 0x31, 0xeb, 0x2c, 0xce, 0xaa, 0x00, 0xaf, 0x3f, 0xa1, 0x78, 0x6f, 0xc2, 0x17, 0x60, 0x1d, 0xce, 0xf0, 0x1b, 0x57, 0x1c, 0x54, 0x42, 0x28, 0x16, 0x56, 0xae, 0xd3, 0x8d, 0xd3, 0xd2, 0xcc, 0xaa, 0x9d, 0x4e, 0x08, 0x27, 0xd9, 0xc2, 0x76, 0xbe, 0xa6, 0xe0, 0xce, 0xe2, 0x00, 0xc6, 0x89, 0xae, 0xe3, 0x8a, 0x30, 0x1b, 0xb3, 0x16, 0xda, 0x75, 0xdb, 0x36, 0xf1, 0x10, 0xb5, 0xef, 0x34, 0x37, 0xaa, 0x13, 0x02, 0x65, 0x9a, 0x12, 0xd5, 0xb8, 0x7d, 0x13, 0x0d, 0xa2, 0x4b, 0x43, 0xef, 0xe2, 0x1a, 0x6d, 0xed, 0xb2, 0x86, 0xcc, 0x27, 0x42, 0x56, 0x1d, 0x33, 0x66, 0x5d, 0xf7, 0x19, 0x8b, 0x9d, 0x5f, 0xa2, 0xf0, 0xb3, 0x98, 0xd3, 0x13, 0x6f, 0x38, 0xb4, 0x69, 0xc2, 0x81, 0x56, 0x51, 0xdd, 0xed, 0x13, 0x4b, 0x97, 0x0b, 0x18, 0x65, 0x0f, 0x8a, 0x21, 0xf7, 0x93, 0x93, 0x84, 0x90, 0xc1, 0x5d, 0x71, 0x30, 0xec, 0xfb, 0x78, 0xb8, 0xc2, 0x78, 0x4b, 0x9e, 0x2b, 0x25, 0xc6, 0xe5, 0x74, 0x32, 0x2c, 0x4d, 0xac, 0x7c, 0xb4, 0xc7, 0x4e, 0xa6, 0x44, 0x2b, 0x21, 0x6b, 0x7c, 0x2d, 0x5d, 0x32, 0xf6, 0x8e, 0x0f, 0xe3, 0xcc, 0x8f, 0xbe, 0xfa, 0x5b, 0xab, 0x4f, 0xda, 0x47, 0x85, 0x26, 0x63, 0xc0, 0x20, 0x8e, 0xc6, 0x03, 0x4e, 0x5b, 0x98, 0x23, 0x6b, 0xce, 0x26, 0x09, 0x4a, 0xb8, 0x09, 0xb9, 0x70, 0xe2, 0xfa, 0xd8, 0x80, 0xad, 0xe7, 0x6b, 0xf7, 0xf6, 0x46, 0xe2, 0x19, 0x3c, 0xa9, 0x55, 0x2c, 0x05, 0x92, 0x0d, 0xe3, 0x7d, 0x89, 0x46, 0x1d, 0x61, 0x6d, 0x33, 0xd0, 0x1b, 0x08, 0x43, 0x3f, 0x2f, 0xe5, 0xa3, 0x74, 0xd5, 0x66, 0x04, 0xea, 0xe7, 0x11, 0x9e, 0x8a, 0xfe, 0x2b, 0x75, 0xd8, 0xd9, 0x88, 0xdb, 0x6f, 0xfe, 0xa1, 0x36, 0xab, 0xa3, 0xe7, 0x03, 0xa5, 0xce, 0x57, 0x1b, 0x64, 0xbc, 0x4f, 0x35, 0x51, 0x80, 0xa0, 0xad, 0xec, 0xec, 0xe4, 0x84, 0xbe, 0xb4, 0x12, 0xa7, 0x8e, 0xd1, 0x4f, 0x74, 0xd8, 0x24, 0x07, 0x7a, 0x7b, 0x5c, 0x3d, 0x80, 0xb2, 0x19, 0x1f, 0xc9, 0x45, 0x51, 0xde, 0x97, 0x01, 0xf4, 0xbc, 0xee, 0x65, 0xcb, 0x67, 0x9a, 0x9e, 0xa6, 0x85, 0x74, 0xb6, 0xb6, 0x90, 0xe0, 0x08, 0x38, 0xe4, 0x9a, 0xf7, 0x53, 0x16, 0xb3, 0xdf, 0x44, 0x88, 0xd6, 0x4c, 0xb8, 0x3a, 0xd0, 0x6a, 0x79, 0xe3, 0x4f, 0xbd, 0x4d, 0x41, 0xea, 0x12, 0x1c, 0xad, 0x62, 0xb6, 0x50, 0xf2, 0x28, 0xe5, 0x81, 0x5f, 0x1f, 0x85, 0x52, 0x1b, 0xa2, 0x15, 0x96, 0xb9, 0xc9, 0xe0, 0xb8, 0x0c, 0xe8, 0x76, 0x59, 0x3d, 0x59, 0x5c, 0x3a, 0x1a, 0x7c, 0x03, 0x5d, 0xb1, 0xfb, 0xf7, 0x67, 0x1e, 0x53, 0x59, 0x49, 0xa1, 0x90, 0x8f, 0x1f, 0xf4, 0x57, 0x3a, 0x58, 0xdb, 0x2a, 0x68, 0x18, 0xfc, 0xe8, 0x0c, 0xda, 0xf1, 0x93, 0xab, 0x5a, 0x9c, 0x56, 0x57, 0xb2, 0xba, 0xc7, 0xe1, 0xc3, 0xbb, 0x69, 0x4b, 0xd6, 0xd2, 0x75, 0x7c, 0x83, 0x48, 0xda, 0x37, 0xd3, 0x15, 0x82, 0x4e, 0xa1, 0xb1, 0xd7, 0x13, 0x46, 0x28, 0x86, 0x10, 0x75, 0x6d, 0x82, 0xf8, 0x63, 0xf0, 0x4d, 0xdd, 0x2b, 0x72, 0x73, 0xa2, 0x72, 0x18, 0x57, 0xb4, 0x46, 0xbf, 0x31, 0xf5, 0x4c, 0x90, 0x58, 0xf9, 0x1b, 0xd4, 0xbd, 0x75, 0xe3, 0x09, 0xb8, 0xf4, 0x52, 0x35, 0x08, 0xcc, 0xb8, 0x7a, 0x15, 0x51, 0x69, 0xeb, 0x77, 0x48, 0x63, 0x9e, 0xbc, 0x9f, 0x30, 0x02, 0x66, 0x5b, 0x0e, 0x73, 0x34, 0xd1, 0x4e, 0x0c, 0xa3, 0x19, 0xfa, 0xbd, 0xb3, 0xc0, 0xba, 0x9d, 0xee, 0xbd, 0xf8, 0x81, 0xa7, 0xa6, 0x43, 0xcd, 0x80, 0x24, 0xf1, 0x8a, 0x2f, 0xa5, 0x09, 0xb9, 0x81, 0x50, 0x60, 0xe7, 0x9e, 0x3e, 0x01, 0x02, 0x90, 0xe7, 0xd2, 0x6b, 0xff, 0xda, 0x75, 0x4c, 0x3e, 0xb2, 0x6d, 0x2c, 0x8c, 0x45, 0x82, 0xc1, 0x93, 0x1e, 0x66, 0x05, 0x35, 0x2e, 0x98, 0x8c, 0x88, 0xbe, 0x89, 0x14, 0x1f, 0xa8, 0xfe, 0x5e, 0x8c, 0xc7, 0xb5, 0x3c, 0x22, 0xac, 0x4b, 0xec, 0x00, 0x92, 0x5d, 0xa4, 0x4b, 0x94, 0xee, 0x6e, 0xba, 0x1e, 0x08, 0x36, 0x58, 0xa2, 0xa6, 0x21, 0x85, 0x8c, 0xd2, 0x21, 0x3e, 0x77, 0x0b, 0xc7, 0x9f, 0xa1, 0xe9, 0x58, 0xa6, 0x9c, 0x04, 0x22, 0x3a, 0x47, 0x11, 0x10, 0x6c, 0xfd, 0x4e, 0x7d, 0xfc, 0x0c, 0x21, 0x46, 0x1f, 0x69, 0xfb, 0x23, 0x7f, 0xa2, 0x83, 0x37, 0x84, 0x13, 0xf1, 0xe5, 0xd2, 0x5d, 0xb7, 0xe6, 0x13, 0x14, 0x67, 0x98, 0xf6, 0xb8, 0xd1, 0x99, 0x77, 0xe7, 0x6b, 0x95, 0x62, 0xd0, 0xf7, 0x5c, 0x12, 0xeb, 0x5f, 0x38, 0x7f, 0xe8, 0xe4, 0x7d, 0x78, 0xe5, 0x77, 0x61, 0x2c, 0xe3, 0x67, 0x0e, 0xef, 0x7b, 0x3d, 0xf6, 0x3b, 0xcd, 0xe5, 0x67, 0xf5, 0xba, 0x0e, 0x5f, 0xf2, 0x53, 0xd2, 0xa1, 0xba, 0x90, 0x9a, 0x08, 0x8c, 0x46, 0x3c, 0x1c, 0xa2, 0x53, 0x67, 0xe3, 0xb5, 0x1b, 0x41, 0xfa, 0xc4, 0x39, 0x4e, 0xe3, 0x12, 0x6e, 0x94, 0xa1, 0x6e, 0xdd, 0xfd, 0x82, 0xb6, 0x7b, 0xfc, 0x3d, 0x9e, 0xc1, 0x73, 0x3c, 0xae, 0xa4, 0xd5, 0x3b, 0x8a, 0xc6, 0x88, 0x12, 0x76, 0xee, 0x8d, 0xcf, 0x19, 0xb6, 0x62, 0x08, 0x81, 0x83, 0x27, 0x70, 0x68, 0xba, 0x01, 0xa7, 0xb6, 0x31, 0xbc, 0x57, 0x47, 0xe4, 0xb4, 0x7c, 0xed, 0xea, 0xf5, 0x03, 0xb9, 0xa7, 0xa1, 0x97, 0x76, 0x42, 0x92, 0xb8, 0x77, 0x59, 0x41, 0x0d, 0x93, 0xf4, 0xe6, 0xfb, 0x6d, 0xb8, 0xe1, 0x76, 0xf9, 0x5e, 0x59, 0x17, 0x3b, 0x63, 0x23, 0x6f, 0x52, 0x00, 0xe5, 0x9c, 0xb6, 0x5c, 0x7b, 0x19, 0xbe, 0x01, 0x99, 0xdb, 0x65, 0x8c, 0xb2, 0x99, 0x4d, 0xa9, 0x19, 0x6b, 0x04, 0x3f, 0x67, 0x96, 0x87, 0xe8, 0x1c, 0xa6, 0x04, 0xa4, 0x89, 0xbe, 0xe4, 0xce, 0xed, 0x2d, 0x09, 0x4f, 0xde, 0x41, 0x54, 0x11, 0xea, 0x60, 0x6b, 0xb7, 0x7f, 0x54, 0xb9, 0x8b, 0x08, 0xe7, 0xb6, 0xb7, 0x59, 0xb0, 0x68, 0xb9, 0x4d, 0x2c, 0x2a, 0x11, 0xad, 0x11, 0xac, 0x3c, 0x54, 0xde, 0x3b, 0xe6, 0x91, 0xb7, 0x42, 0x5c, 0xcd, 0x70, 0x11, 0x40, 0x6e, 0xe8, 0xde, 0x80, 0xfb, 0x98, 0x09, 0x88, 0x80, 0x6b, 0xa5, 0xb7, 0x34, 0xd0, 0x33, 0x10, 0x59, 0x0e, 0xb0, 0x33, 0x64, 0xd9, 0xd3, 0x8b, 0x5e, 0x22, 0x90, 0xc8, 0x8a, 0x33, 0xe0, 0x90, 0x48, 0xfa, 0xc4, 0x71, 0x39, 0xa5, 0x87, 0x1b, 0xa4, 0x70, 0x44, 0xcc, 0x18, 0xbb, 0xa9, 0x0b, 0x53, 0x60, 0xfa, 0x99, 0x63, 0x43, 0x59, 0xa5, 0x0b, 0x2b, 0x44, 0x3f, 0x68, 0xd0, 0x5f, 0x0f, 0xd4, 0x35, 0x74, 0x47, 0x0b, 0x37, 0xb8, 0xd6, 0x8d, 0x66, 0x50, 0xdf, 0x43, 0x15, 0x13, 0x69, 0x64, 0xad, 0x92, 0x58, 0x9a, 0x47, 0x55, 0x9c, 0x61, 0x79, 0x68, 0xa8, 0xb0, 0x6f, 0x17, 0x25, 0xdc, 0x3e, 0xf5, 0xe8, 0xb9, 0x76, 0x23, 0x22, 0x02, 0xf6, 0xce, 0xd7, 0xfb, 0x05, 0xfa, 0x92, 0x54, 0x9e, 0x7e, 0x56, 0x51, 0x0a, 0x50, 0xd7, 0x28, 0xb5, 0x03, 0xea, 0xab, 0x3a, 0x8e, 0x3b, 0x26, 0xc0, 0x4f, 0x3e, 0x8b, 0x89, 0x50, 0x68, 0xcc, 0xc8, 0xc8, 0x9e, 0x89, 0xb3, 0xe5, 0xee, 0xeb, 0xda, 0xc8, 0x7d, 0xd0, 0xb7, 0xd2, 0xc0, 0x28, 0x86, 0x1e, 0xef, 0x9e, 0x57, 0x4e, 0xb7, 0x7c, 0x61, 0x8b, 0x30, 0xc8, 0x99, 0xc7, 0x0e, 0xb3, 0x83, 0x45, 0x1b, 0x35, 0x48, 0x5c, 0xe5, 0xf1, 0x0a, 0x78, 0xb3, 0x5e, 0x74, 0x61, 0xbe, 0x28, 0x95, 0xc0, 0x9e, 0xd4, 0xee, 0xdf, 0x03, 0xa4, 0xc9, 0xb0, 0xa5, 0xba, 0xcd, 0x11, 0x7e, 0x7f, 0xd0, 0x4e, 0x36, 0x46, 0xec, 0xe7, 0xdf, 0x2d, 0xd5, 0x94, 0xe2, 0x44, 0x69, 0x87, 0x39, 0xf2, 0x89, 0xf1, 0xdf, 0x94, 0x28, 0xc7, 0x85, 0x66, 0xa1, 0xc6, 0x87, 0xa7, 0x4e, 0xb5, 0x1e, 0xf8, 0x56, 0xea, 0xd7, 0x06, 0xc6, 0x0f, 0x44, 0x68, 0xe4, 0x26, 0xf1, 0xcb, 0xc0, 0xcb, 0x99, 0x4c, 0x0b, 0xb9, 0x9a, 0x25, 0x2c, 0x90, 0xa7, 0x8c, 0x91, 0xd6, 0xbd, 0xd8, 0x43, 0x3b, 0x58, 0xe6, 0xbe, 0x21, 0xe6, 0xbb, 0xff, 0x5b, 0x7c, 0x6a, 0xde, 0x35, 0xc8, 0x38, 0x9e, 0xb5, 0x47, 0xff, 0xc3, 0x21, 0xb7, 0xd0, 0x23, 0xc1, 0xd0, 0xdc, 0x40, 0xe6, 0x2f, 0x95, 0xd5, 0x2c, 0x93, 0x10, 0xaf, 0xfb, 0x4b, 0xae, 0xbe, 0x54, 0xef, 0xfb, 0x6c, 0xca, 0x4f, 0xd6, 0x2d, 0xce, 0xa9, 0xd3, 0x58, 0x30, 0x1f, 0xdd, 0x35, 0xe3, 0x67, 0x20, 0x57, 0x01, 0xc5, 0x26, 0x2c, 0x0e, 0x36, 0x3f, 0xd2, 0x81, 0xee, 0x27, 0x2c, 0x80, 0x05, 0xe3, 0x36, 0xec, 0x6e, 0xec, 0x95, 0x9d, 0x28, 0x8f, 0x73, 0xef, 0xb8, 0x94, 0x89, 0x7d, 0xd6, 0x1e, 0x7d, 0x2c, 0x67, 0xd2, 0x6f, 0x6c, 0xab, 0x3b, 0xcf, 0xba, 0xb8, 0x6d, 0x71, 0x69, 0x27, 0xe9, 0xe3, 0xa3, 0x0d, 0xc1, 0xfe, 0xab, 0x2d, 0xfd, 0xbb, 0x64, 0x6b, 0x3c, 0x48, 0x17, 0x84, 0x9f, 0x5b, 0x71, 0xfd, 0xe2, 0xc7, 0xcb, 0x59, 0xcc, 0x4d, 0xaf, 0x8f, 0xca, 0xb4, 0x97, 0xbb, 0xd7, 0x1b, 0xf7, 0x14, 0x9e, 0x8f, 0x7e, 0x1e, 0xe3, 0xd9, 0x99, 0x21, 0x1f, 0x99, 0x3a, 0xd9, 0x6a, 0x99, 0xd7, 0x6f, 0x9e, 0x5b, 0xb5, 0xa8, 0xba, 0xf4, 0x66, 0x5d, 0x84, 0x1d, 0x91, 0x2b, 0x73, 0x88, 0xf1, 0x6b, 0xcb, 0x70, 0xa0, 0x64, 0x0a, 0x74, 0x96, 0xc0, 0x83, 0xa5, 0x6c, 0x3d, 0x49, 0xde, 0x66, 0xa5, 0x4e, 0x54, 0xb1, 0x00, 0xcc, 0x6d, 0xe9, 0x08, 0xe4, 0xd6, 0xdf, 0xdd, 0x86, 0xd0, 0x98, 0xfa, 0x90, 0xca, 0x99, 0x68, 0x3a, 0x35, 0x61, 0x31, 0xb1, 0x94, 0x38, 0x18, 0x02, 0xd2, 0x27, 0x87, 0x3a, 0xd9, 0x48, 0xc9, 0xcb, 0x60, 0x40, 0x79, 0x32, 0x04, 0x09, 0x3b, 0xd7, 0x9b, 0xf5, 0xaa, 0x35, 0xc5, 0xef, 0x91, 0x3a, 0xc3, 0x04, 0x5d, 0xf1, 0x8d, 0x23, 0xd2, 0x5e, 0x1e, 0x21, 0xfe, 0xaa, 0x13, 0x00, 0x6b, 0x80, 0x74, 0x71, 0x99, 0xb6, 0xd2, 0x97, 0xab, 0x30, 0x92, 0x0e, 0x61, 0x01, 0x88, 0x2c, 0x46, 0xd4, 0xc8, 0x87, 0x2b, 0x8b, 0xb8, 0xb7, 0xd3, 0x25, 0x6a, 0x5d, 0xf0, 0xe5, 0x29, 0x64, 0x4e, 0xb0, 0x52, 0x86, 0x4f, 0xb8, 0x66, 0x12, 0x97, 0x57, 0x5c, 0xed, 0x08, 0x3d, 0x3c, 0xd7, 0xf1, 0xce, 0xe9, 0xf0, 0x82, 0xc6, 0x3e, 0x7b, 0x84, 0x1f, 0x5d, 0xe1, 0x47, 0x34, 0x44, 0xf9, 0xdb, 0x26, 0xa2, 0x86, 0x82, 0x7f, 0xe8, 0x02, 0x66, 0x15, 0xa2, 0x9a, 0x88, 0x32, 0x08, 0x79, 0xf9, 0xf1, 0xd0, 0x49, 0x4c, 0xeb, 0x47, 0xf7, 0x4b, 0x13, 0xa0, 0xb7, 0xe9, 0xdf, 0x8c, 0x49, 0x78, 0xa9, 0x0b, 0x7a, 0x1c, 0x54, 0x81, 0xed, 0x80, 0x32, 0x0c, 0x1b, 0xc7, 0x25, 0x15, 0x99, 0xc6, 0x05, 0x25, 0x9a, 0x70, 0x42, 0xfa, 0xb4, 0x91, 0xcb, 0xdb, 0xe7, 0xc0, 0x2e, 0x28, 0xdb, 0x8e, 0x00, 0x35, 0x69, 0x04, 0x7f, 0x58, 0x5d, 0x4d, 0x76, 0x41, 0x7a, 0xaf, 0x61, 0x8a, 0xbf, 0xc0, 0xd2, 0x8f, 0xe9, 0xd6, 0x13, 0x80, 0x39, 0xbf, 0x0d, 0xb5, 0x77, 0xb2, 0x68, 0x41, 0x37, 0x86, 0xf4, 0xc9, 0x5b, 0x22, 0x48, 0x97, 0xd9, 0x35, 0xa9, 0xea, 0xbf, 0x27, 0x2d, 0x90, 0x74, 0x4f, 0x1f, 0xb7, 0x40, 0x66, 0xa6, 0x01, 0x0e, 0x3b, 0xa2, 0xd6, 0x71, 0xa9, 0xd7, 0xfe, 0xe6, 0xc6, 0x4d, 0x6f, 0x59, 0x5e, 0xf6, 0x63, 0xea, 0xa0, 0x92, 0xae, 0xf0, 0x16, 0xd0, 0x4f, 0x3e, 0xdb, 0xb6, 0x45, 0xa6, 0x08, 0x42, 0xa4, 0xbc, 0x6f, 0x52, 0xe7, 0xdc, 0x8c, 0xc1, 0x88, 0x6f, 0xb8, 0xd3, 0xce, 0x69, 0xa0, 0xd3, 0xe7, 0x16, 0xf6, 0xfa, 0x36, 0x17, 0x66, 0x93, 0xee, 0xa8, 0xcc, 0x5d, 0xe0, 0x24, 0xa4, 0x31, 0x91, 0xca, 0xc1, 0xe4, 0x90, 0xc1, 0x43, 0x6f, 0x06, 0x5a, 0xc3, 0x4d, 0x8f, 0x96, 0xd0, 0x25, 0x48, 0xe8, 0x9f, 0xa9, 0x2a, 0x3b, 0xfe, 0xbe, 0x96, 0x37, 0x8a, 0xdd, 0x30, 0xc0, 0x22, 0xb9, 0xf1, 0xc0, 0x9b, 0x22, 0x78, 0x27, 0xb5, 0x29, 0xa1, 0x30, 0x4e, 0x85, 0x59, 0xe5, 0xd6, 0x35, 0xb1, 0xe5, 0x03, 0x67, 0x31, 0x65, 0xc6, 0x99, 0x6e, 0x75, 0x7d, 0xfe, 0xde, 0x84, 0x6a, 0x23, 0xec, 0x27, 0x64, 0xd2, 0x48, 0x16, 0xcc, 0x37, 0x81, 0x77, 0xc3, 0x41, 0xd5, 0x60, 0x9a, 0x4b, 0x48, 0x97, 0x8a, 0xfc, 0xf3, 0x9c, 0xa6, 0x6b, 0x9f, 0xe9, 0x0d, 0x87, 0x92, 0x78, 0x64, 0xb7, 0xa9, 0x86, 0x84, 0xbd, 0xa7, 0x97, 0x6f, 0xe0, 0xcd, 0xba, 0x89, 0x4a, 0xab, 0x0e, 0x05, 0xaf, 0x35, 0x85, 0x9d, 0x2f, 0x19, 0xe8, 0x86, 0x7e, 0x50, 0x1b, 0xa3, 0x42, 0xf3, 0xa3, 0xf9, 0xbc, 0x51, 0x65, 0x63, 0xab, 0x3e, 0xb0, 0x86, 0x6d, 0xae, 0x7e, 0x08, 0x68, 0x82, 0xf7, 0xfd, 0xa8, 0xa1, 0x37, 0xa2, 0xc9, 0x4b, 0x51, 0x4e, 0x18, 0xaa, 0x94, 0xa5, 0xf5, 0xaa, 0x0d, 0x0f, 0x7c, 0x0b, 0x4c, 0x69, 0x64, 0xb5, 0x6b, 0xfa, 0x26, 0x4b, 0x4d, 0xa8, 0x62, 0x02, 0x24, 0x6b, 0x7f, 0xb4, 0x36, 0x03, 0x93, 0x30, 0xe0, 0xe6, 0x82, 0xd5, 0xdb, 0x7d, 0x69, 0x5f, 0xbe, 0x8f, 0x3d, 0x00, 0xc4, 0xfe, 0xaf, 0xb3, 0xd0, 0xb1, 0x53, 0xcd, 0xae, 0xd1, 0x02, 0xd4, 0x9c, 0x38, 0x7d, 0x95, 0x09, 0x26, 0x52, 0x71, 0x9c, 0x36, 0x04, 0xf8, 0x78, 0x91, 0x66, 0xb9, 0xbf, 0x62, 0x48, 0x57, 0x54, 0x8a, 0x55, 0xe0, 0xe6, 0x94, 0x3c, 0x5b, 0x2a, 0xeb, 0x0e, 0xa0, 0x67, 0x4a, 0xe7, 0x6d, 0x38, 0x75, 0xd1, 0xb5, 0x8e, 0x27, 0xe5, 0x3b, 0xf4, 0x4b, 0xb4, 0x60, 0x17, 0x6e, 0xe5, 0x39, 0x85, 0x75, 0x1f, 0xe5, 0xb5, 0x8b, 0x29, 0x1e, 0x48, 0x5e, 0x4f, 0x0d, 0x8e, 0x8b, 0x08, 0x63, 0x4c, 0x56, 0xd7, 0xa5, 0xbc, 0x9f, 0x6f, 0xc7, 0xd6, 0x12, 0x1a, 0xfd, 0xce, 0x9d, 0x5b, 0xce, 0xde, 0x27, 0xd2, 0x6a, 0x45, 0x7f, 0x61, 0x3d, 0x90, 0x92, 0x8d, 0xc4, 0x18, 0xe2, 0x27, 0xa0, 0xcc, 0x33, 0x2b, 0xe9, 0x30, 0x87, 0xe8, 0xc4, 0xa6, 0x4d, 0x61, 0x38, 0xed, 0xd6, 0xf4, 0x3d, 0xe7, 0x08, 0x39, 0x16, 0x9f, 0x56, 0x2d, 0xe1, 0x8a, 0xf0, 0x90, 0x6d, 0x0d, 0x36, 0x8b, 0x4b, 0x40, 0x73, 0x96, 0x28, 0xf2, 0xc8, 0x99, 0x5a, 0xed, 0x66, 0x51, 0xb8, 0x7a, 0x00, 0xf6, 0xaf, 0x28, 0x81, 0x1b, 0x92, 0xca, 0xfa, 0xd5, 0x32, 0xbf, 0xde, 0x1f, 0xaf, 0x76, 0x71, 0x7d, 0x8d, 0x30, 0x7e, 0xe0, 0x0a, 0x08, 0x48, 0xca, 0xaf, 0x31, 0xc4, 0xb2, 0x26, 0x80, 0x05, 0xaa, 0x4b, 0x2a, 0xf8, 0x3f, 0x85, 0xce, 0x51, 0xa1, 0x57, 0xb6, 0xc5, 0x04, 0x32, 0x5a, 0x7a, 0x45, 0x8e, 0x25, 0xbc, 0xd1, 0x39, 0x7c, 0xf1, 0xc3, 0xee, 0xfd, 0xcf, 0x4c, 0x29, 0x04, 0xcc, 0x58, 0x3a, 0x74, 0xd6, 0x6e, 0x98, 0xb4, 0x45, 0xd8, 0x79, 0xf7, 0x0e, 0x05, 0x9f, 0xc1, 0x39, 0x2b, 0x75, 0xa7, 0x95, 0x30, 0x5a, 0x56, 0xaa, 0xcb, 0x3d, 0xd6, 0xef, 0xe7, 0x6a, 0x10, 0x3d, 0x48, 0xa3, 0x8e, 0x84, 0x70, 0x73, 0x83, 0xbd, 0xc4, 0xbf, 0x0b, 0x1f, 0xeb, 0x9e, 0xb3, 0x96, 0x77, 0x6b, 0x3c, 0x71, 0xc7, 0x18, 0x9c, 0x5a, 0x2b, 0xc4, 0x46, 0x8c, 0x4a, 0x90, 0xab, 0x40, 0xc1, 0xaf, 0x01, 0x68, 0x0d, 0xbd, 0x43, 0xa0, 0xab, 0x52, 0x79, 0x62, 0x7d, 0xd6, 0x39, 0x79, 0x70, 0x97, 0x6e, 0xb8, 0x5c, 0x18, 0x58, 0xeb, 0x2c, 0xad, 0xd4, 0x0e, 0x3e, 0x44, 0xde, 0xbd, 0x0d, 0x86, 0x54, 0xec, 0x0d, 0x1f, 0xfc, 0xd8, 0xd6, 0x59, 0xc9, 0x3d, 0x85, 0xf0, 0x5a, 0xca, 0x5f, 0x22, 0xc4, 0xd2, 0xb8, 0x05, 0x91, 0x44, 0x14, 0x1d, 0x09, 0xdd, 0x8b, 0x2e, 0xb0, 0x9c, 0x72, 0x4f, 0x0f, 0x77, 0x37, 0x40, 0xb7, 0x4c, 0x8d, 0xfd, 0x84, 0x1a, 0xc9, 0x93, 0x1f, 0x71, 0x8c, 0x33, 0xc6, 0x27, 0xa3, 0x85, 0x50, 0x4d, 0x2b, 0x3e, 0x6b, 0x61, 0xf9, 0xf5, 0x29, 0xc5, 0x39, 0x33, 0xbb, 0x70, 0x54, 0xc9, 0x7c, 0xe4, 0x18, 0x66, 0x31, 0x60, 0x13, 0x68, 0x8e, 0x56, 0x3f, 0xf3, 0xfd, 0x1f, 0xe5, 0x40, 0x9c, 0xee, 0xbb, 0x38, 0x84, 0x03, 0x4f, 0x42, 0x51, 0x21, 0xa9, 0x59, 0xdf, 0x41, 0x2c, 0x61, 0x51, 0x88, 0xbe, 0xbb, 0x58, 0x77, 0x29, 0x17, 0xb2, 0x62, 0xc0, 0x89, 0xf0, 0x23, 0x45, 0xe0, 0x7d, 0x0f, 0x0a, 0x33, 0xdc, 0x29, 0x57, 0xbc, 0x31, 0x96, 0x0c, 0xe9, 0x03, 0x51, 0x87, 0xb1, 0x40, 0x20, 0xc8, 0x25, 0x81, 0xc7, 0xd3, 0x47, 0x90, 0x7b, 0x56, 0x1e, 0x28, 0x99, 0x8c, 0x0a, 0xfb, 0x98, 0x61, 0x56, 0xf9, 0x3d, 0xd7, 0x0c, 0xd0, 0x0d, 0xa8, 0x0d, 0xaf, 0x08, 0x2d, 0x60, 0x50, 0x94, 0x7e, 0xcb, 0x35, 0xb8, 0xdb, 0xa0, 0x32, 0x8a, 0x4b, 0xda, 0x2b, 0xeb, 0x82, 0x68, 0x1f, 0x71, 0x08, 0xc9, 0x65, 0xa5, 0x98, 0xd9, 0x36, 0x6f, 0xc7, 0xeb, 0x6c, 0xce, 0xe6, 0x17, 0x89, 0xcc, 0x28, 0xd6, 0xfb, 0xb2, 0x08, 0xcc, 0x9f, 0x78, 0xe5, 0xe4, 0x83, 0x7f, 0xef, 0xa2, 0xf0, 0x83, 0x47, 0xb5, 0xa8, 0xcb, 0x62, 0xcc, 0x6c, 0xa2, 0xaf, 0xab, 0xc1, 0x0b, 0x79, 0x7e, 0xf4, 0xb1, 0x0e, 0x6d, 0x5c, 0x1d, 0x21, 0x70, 0xdf, 0x2b, 0x6d, 0x65, 0xb7, 0xbf, 0x9b, 0x60, 0x76, 0xb4, 0x66, 0x42, 0x48, 0x15, 0xfd, 0x8d, 0x79, 0x90, 0xa8, 0x76, 0x37, 0x27, 0xaf, 0x3c, 0x98, 0x29, 0x78, 0xb9, 0xdf, 0x61, 0xef, 0x37, 0xfb, 0x8d, 0x2a, 0x84, 0x50, 0x12, 0x4e, 0x49, 0xba, 0xed, 0xac, 0x97, 0xcf, 0xed, 0x30, 0xc3, 0x65, 0x1f, 0xfc, 0x74, 0x55, 0x8a, 0x50, 0xfa, 0x7e, 0x1d, 0xad, 0xe1, 0x0c, 0xe6, 0x3a, 0xc6, 0xfa, 0x85, 0x66, 0x6a, 0xd5, 0xdf, 0xcf, 0x05, 0xc3, 0x17, 0x63, 0xdd, 0xc5, 0xba, 0xc4, 0x16, 0x39, 0x39, 0xf1, 0xcc, 0xa3, 0x9d, 0x24, 0x5f, 0xac, 0x76, 0xf6, 0x0e, 0x6b, 0x14, 0xc9, 0xc8, 0xe4, 0xfa, 0x67, 0x3e, 0xce, 0x90, 0xe7, 0x3d, 0x9a, 0x18, 0xd1, 0x3b, 0xb0, 0xe3, 0x82, 0x30, 0xfc, 0xc5, 0xd1, 0xa7, 0xa9, 0xc6, 0xf2, 0x14, 0x2c, 0x1a, 0x9b, 0x68, 0x85, 0x54, 0x66, 0xe3, 0xc1, 0xd6, 0x77, 0x29, 0xc4, 0x8c, 0x5e, 0x99, 0x45, 0xda, 0x3e, 0xda, 0x1a, 0xd2, 0x2f, 0xb6, 0xb6, 0xab, 0xe2, 0x2c, 0xf0, 0x6e, 0x84, 0xc0, 0x06, 0xf3, 0xe4, 0x16, 0xe1, 0x0c, 0xd7, 0xbf, 0x9a, 0x00, 0xdc, 0x53, 0x3e, 0x3b, 0xfc, 0xc0, 0xce, 0x43, 0xf4, 0xe1, 0x8a, 0xee, 0x96, 0x53, 0x6f, 0xd3, 0x6d, 0x84, 0xff, 0xfe, 0xa0, 0x0c, 0x40, 0xe8, 0x18, 0x41, 0x07, 0xa6, 0xe5, 0x05, 0x76, 0x60, 0xde, 0xe3, 0xc4, 0x05, 0x88, 0x5b, 0x3c, 0x3d, 0x3a, 0x79, 0x89, 0x9f, 0x7e, 0xad, 0x30, 0x25, 0xb9, 0xd6, 0x5e, 0xdc, 0x0f, 0xa0, 0xe4, 0xe0, 0x81, 0x10, 0x80, 0x88, 0x58, 0x5d, 0x5e, 0xde, 0xc7, 0x02, 0xde, 0x52, 0xcc, 0x11, 0x98, 0xaf, 0x57, 0xca, 0x9e, 0x4d, 0xae, 0x6c, 0x00, 0x89, 0x10, 0x4b, 0x96, 0x72, 0x98, 0x23, 0xf9, 0xc5, 0x65, 0xac, 0xd3, 0x1c, 0xf8, 0x6e, 0x59, 0x62, 0xdd, 0xd7, 0x15, 0x8a, 0x8e, 0x8b, 0xe9, 0x80, 0x94, 0xfb, 0x51, 0x60, 0xef, 0x39, 0xe8, 0xe7, 0xb8, 0x0b, 0x2e, 0x27, 0x05, 0x3e, 0x88, 0x7e, 0x0d, 0x3c, 0x88, 0xc8, 0x8d, 0xe1, 0x6f, 0xd4, 0x6a, 0x8b, 0xf0, 0x15, 0x97, 0x70, 0x37, 0x9a, 0x39, 0x35, 0x2a, 0x40, 0x09, 0xbc, 0xef, 0x27, 0xfa, 0x3d, 0xae, 0x62, 0x1d, 0x98, 0x98, 0xf3, 0xc1, 0xe9, 0x28, 0xf6, 0xde, 0x5d, 0xa8, 0x1c, 0xb4, 0x45, 0xf8, 0x5b, 0xaf, 0x69, 0x8b, 0xe4, 0x8e, 0x9f, 0xb2, 0x56, 0xc4, 0x9c, 0x1d, 0x31, 0x1e, 0x09, 0x9e, 0x8d, 0xa7, 0xda, 0x31, 0x0c, 0xc9, 0xdb, 0x3a, 0x0d, 0xb4, 0x8b, 0x0d, 0x22, 0x04, 0x2e, 0xb3, 0xc5, 0x9d, 0x1e, 0xec, 0x46, 0xda, 0x62, 0x70, 0x08, 0xe8, 0x81, 0x7a, 0xed, 0x6c, 0x98, 0x87, 0x0f, 0x6c, 0xab, 0x5b, 0xb1, 0x6c, 0x39, 0x46, 0x75, 0xd7, 0x13, 0xa5, 0xcf, 0xa1, 0x6e, 0xab, 0xb9, 0x2b, 0x36, 0x62, 0xa8, 0x67, 0xa5, 0xec, 0xbf, 0x3c, 0x15, 0x0f, 0x43, 0x2c, 0x12, 0xf1, 0x50, 0x34, 0xb4, 0x1f, 0xca, 0xf3, 0x2b, 0xd4, 0x95, 0x0f, 0x9c, 0x79, 0x09 ],
+const [ 0xb8, 0x5e, 0x29, 0x87, 0x5f, 0x6e, 0x2a, 0x2a, 0xc2, 0xa2, 0xb8, 0x47, 0x53, 0x76, 0xea, 0xec, 0xfa, 0xff, 0x0f, 0x76, 0xad, 0x2f, 0xe6, 0xfa, 0x41, 0x55, 0x12, 0xe4, 0x80, 0xe3, 0xc8, 0xde, 0x7b, 0x74, 0xcb, 0xf4, 0x22, 0x0d, 0x9a, 0xf5, 0x11, 0xa3, 0xe7, 0x1c, 0xad, 0xde, 0x4c, 0xef, 0x70, 0x1d, 0x3a, 0x68, 0x81, 0xba, 0x32, 0x53, 0x88, 0x8f, 0x37, 0xf7, 0xc0, 0xb9, 0x83, 0xf8, 0x4e, 0x9b, 0x79, 0x7c, 0xd1, 0x26, 0xdb, 0x8d, 0x3a, 0x58, 0x3d, 0xbf, 0xde, 0x03, 0xb9, 0x12, 0xc9, 0xd0, 0xe5, 0x19, 0x55, 0x83, 0x02, 0x5c, 0xfc, 0x81, 0x76, 0xfc, 0x6b, 0x8f, 0x7d, 0x95, 0xd7, 0xdc, 0x1b, 0x68, 0x94, 0x42, 0x55, 0xba, 0xe4, 0xc9, 0xa0, 0x77, 0x0d, 0x6d, 0x9a, 0x1b, 0xae, 0x21, 0xf8, 0xd2, 0x52, 0x13, 0xbf, 0xde, 0x46, 0x32, 0xb8, 0x3a, 0xa8, 0xee, 0x1d, 0x7d, 0xc1, 0x3e, 0x99, 0x00, 0x95, 0xe8, 0x70, 0x43, 0xb7, 0xfd, 0xf9, 0x8d, 0x62, 0xa2, 0x55, 0xd3, 0xc6, 0x16, 0x5b, 0xdb, 0xa0, 0xf1, 0xd2, 0xa2, 0x0d, 0xaa, 0xe3, 0xfa, 0xa0, 0x5c, 0xcd, 0x77, 0xb2, 0xca, 0xdb, 0x8c, 0xf9, 0xa0, 0x94, 0xf2, 0x5d, 0xfc, 0x31, 0x49, 0x06, 0x2c, 0x54, 0x02, 0xba, 0xba, 0xf6, 0x7c, 0x66, 0xa5, 0xa1, 0x6d, 0xfa, 0xf2, 0xe0, 0x84, 0x7a, 0x63, 0xf5, 0x4d, 0x52, 0x87, 0xc9, 0x54, 0xeb, 0xf3, 0x29, 0x8d, 0x7b, 0xce, 0x2e, 0xf3, 0x21, 0x93, 0xfd, 0x70, 0x31, 0x12, 0xb1, 0xfd, 0xcd, 0xb8, 0x96, 0x0a, 0xb5, 0x11, 0x98, 0x20, 0x5f, 0x8b, 0xfb, 0xc5, 0x4b, 0x7d, 0x4c, 0xa0, 0x91, 0x67, 0x97, 0xdd, 0xbc, 0x7c, 0xda, 0xd3, 0xda, 0x5d, 0xba, 0xe4, 0xd4, 0x28, 0x75, 0xa5, 0xfc, 0xb1, 0x18, 0x3f, 0xe5, 0x0f, 0xf2, 0x16, 0x77, 0x5b, 0x48, 0xa8, 0x42, 0xb4, 0x4a, 0xb7, 0x13, 0x86, 0x46, 0xaa, 0xc5, 0x0c, 0x1c, 0x31, 0x5a, 0x14, 0xf2, 0x28, 0x4b, 0x03, 0x28, 0xbe, 0x1b, 0x18, 0x8e, 0xd6, 0x32, 0xf5, 0xd5, 0xad, 0xe9, 0x5b, 0x44, 0xbd, 0xe2, 0x35, 0xac, 0xe2, 0x9a, 0xd8, 0x9e, 0xbc, 0x41, 0x89, 0xdb, 0x54, 0xc9, 0x3f, 0x0c, 0x02, 0x3d, 0xab, 0xb4, 0x8e, 0x54, 0x76, 0x62, 0x95, 0x46, 0xca, 0x2b, 0x2e, 0xde, 0x13, 0x57, 0xce, 0xd0, 0x07, 0x5b, 0x69, 0x4e, 0xe4, 0x08, 0xda, 0xd6, 0xf8, 0x01, 0x85, 0x4e, 0x67, 0x72, 0x3b, 0x52, 0x29, 0xff, 0x5e, 0xcd, 0x52, 0xfb, 0x45, 0xc6, 0x96, 0xdb, 0xe1, 0x7d, 0x0c, 0xea, 0xa1, 0xb7, 0x32, 0x3e, 0x94, 0x56, 0x32, 0xea, 0xce, 0x2c, 0x63, 0x75, 0x0c, 0x11, 0x13, 0x8b, 0x9b, 0x33, 0x84, 0xf3, 0x75, 0xae, 0x34, 0xc1, 0xae, 0x5d, 0x61, 0xcd, 0x0e, 0xef, 0xcd, 0x63, 0x00, 0x3d, 0xbf, 0x3c, 0xaa, 0xda, 0x4a, 0xad, 0x5e, 0xec, 0xd1, 0x1f, 0x31, 0x3b, 0xcb, 0xbf, 0xe9, 0x88, 0xc4, 0x77, 0x1d, 0x20, 0xa4, 0x1c, 0x97, 0xb1, 0x34, 0xe9, 0xfd, 0x5b, 0xde, 0x2c, 0xb1, 0x0a, 0xb5, 0x3f, 0xf5, 0x04, 0xb5, 0xba, 0x53, 0xbe, 0x4b, 0xe7, 0x3c, 0xf4, 0x18, 0x76, 0xef, 0xf8, 0xf2, 0x72, 0x9c, 0x4b, 0x2b, 0x74, 0xc9, 0x6a, 0x16, 0x17, 0xf6, 0xea, 0xc8, 0xab, 0x7c, 0xc7, 0x1c, 0x2e, 0xbb, 0xfa, 0xfa, 0x78, 0x74, 0x49, 0xd8, 0xb5, 0x74, 0x63, 0x80, 0x18, 0x73, 0x2c, 0x14, 0xce, 0x3b, 0x56, 0x50, 0x31, 0x0d, 0x31, 0x10, 0x3f, 0x40, 0xc4, 0x12, 0x4a, 0x2b, 0x1c, 0xfc, 0xf0, 0x45, 0xe4, 0xa1, 0x4e, 0x8b, 0x36, 0x80, 0x71, 0x22, 0xb1, 0x8d, 0x0d, 0x3e, 0xcc, 0x35, 0x72, 0x42, 0x69, 0x9c, 0xbb, 0x29, 0xae, 0x29, 0x49, 0x24, 0x10, 0x44, 0x70, 0x84, 0xb0, 0x5e, 0x6f, 0xdb, 0xeb, 0x32, 0xa6, 0x5e, 0x2c, 0x4b, 0x03, 0x8e, 0x05, 0xc7, 0xbe, 0x18, 0x7f, 0x5a, 0x46, 0xf9, 0xae, 0x96, 0x7b, 0xe5, 0x88, 0x69, 0x1d, 0xea, 0xf7, 0xe7, 0x84, 0x51, 0x2c, 0x49, 0x92, 0xc5, 0x37, 0x36, 0xe7, 0xb7, 0xd4, 0x42, 0x53, 0x00, 0x88, 0xb5, 0x91, 0xc8, 0xed, 0x8d, 0x32, 0xa7, 0x4a, 0xc6, 0xd7, 0x0b, 0x67, 0xd8, 0xa3, 0xda, 0xa0, 0x82, 0xf0, 0x58, 0x37, 0xc6, 0x41, 0x4a, 0xef, 0x35, 0x78, 0x5c, 0xd6, 0x6c, 0x4a, 0xc0, 0x62, 0xdf, 0xef, 0x18, 0xbf, 0xd5, 0x1e, 0x96, 0x68, 0xb4, 0x38, 0x61, 0xf5, 0x7f, 0xc4, 0x3b, 0x33, 0x9d, 0x1b, 0x62, 0x7a, 0xdc, 0x64, 0xb3, 0x3b, 0xb5, 0xc3, 0x15, 0xd9, 0xd2, 0xce, 0x15, 0xba, 0xcd, 0x41, 0xce, 0x9d, 0x3b, 0xf2, 0x0c, 0x2e, 0xe9, 0x07, 0xb1, 0xd7, 0x65, 0x66, 0x57, 0xda, 0xc0, 0x6d, 0x36, 0x9d, 0x93, 0xe4, 0x48, 0x44, 0x40, 0x2f, 0xac, 0x85, 0x7a, 0xc8, 0x49, 0xb8, 0x08, 0xed, 0xb3, 0x2e, 0xc5, 0x96, 0x52, 0xc4, 0xec, 0xaa, 0xc1, 0xb8, 0x92, 0x72, 0x74, 0xbb, 0x74, 0x4e, 0x9e, 0x47, 0xf3, 0xa7, 0x51, 0x32, 0x5d, 0x24, 0xe7, 0x84, 0x6e, 0x21, 0xa2, 0x86, 0x17, 0x5d, 0x8f, 0x1b, 0x7d, 0xf2, 0xb0, 0x53, 0x45, 0x8b, 0x59, 0x3e, 0x0f, 0xd1, 0xdb, 0xfe, 0x40, 0x26, 0x60, 0x20, 0x05, 0x96, 0x16, 0x2d, 0x95, 0x0a, 0x90, 0x7b, 0xb6, 0xbf, 0x69, 0x49, 0x82, 0xf7, 0x2a, 0x0b, 0x6b, 0xef, 0x6d, 0x03, 0x7d, 0x10, 0x43, 0x11, 0xe3, 0x69, 0xd4, 0xcc, 0xad, 0x5d, 0x45, 0xd1, 0xd0, 0x99, 0xdf, 0x5c, 0x6e, 0x4a, 0x6d, 0x15, 0x58, 0x8c, 0xe5, 0x2c, 0xd2, 0x25, 0x4b, 0xa7, 0x96, 0x73, 0xd3, 0xfb, 0x1b, 0xa3, 0x46, 0xda, 0x16, 0x24, 0xa6, 0x4d, 0x42, 0x5b, 0x15, 0x02, 0x5c, 0x99, 0xf3, 0xe7, 0x72, 0x4a, 0x47, 0xf8, 0x5e, 0x6f, 0x60, 0x54, 0x8e, 0x4e, 0xbc, 0x97, 0x06, 0x67, 0x28, 0x64, 0xa7, 0xab, 0x29, 0x41, 0xb1, 0xe9, 0x9b, 0xa8, 0x87, 0x89, 0x98, 0x5a, 0xb2, 0x7c, 0x9b, 0xf7, 0x29, 0x73, 0xe5, 0xcc, 0xcf, 0x4f, 0x20, 0xec, 0x3e, 0xd9, 0x43, 0x82, 0xc3, 0xb4, 0xb5, 0x65, 0xa9, 0x90, 0xb5, 0xed, 0xbb, 0x9f, 0xf9, 0x06, 0x04, 0x4d, 0x95, 0x82, 0xd9, 0x2c, 0x1f, 0xb4, 0x1a, 0x2d, 0x11, 0x3a, 0xb4, 0x16, 0x6e, 0x1a, 0x6a, 0x30, 0xa9, 0x11, 0xd6, 0x40, 0xc2, 0x27, 0xaa, 0xb9, 0xb2, 0x87, 0x3c, 0x30, 0x09, 0x8e, 0x42, 0x10, 0xd6, 0x22, 0xd9, 0x8f, 0xc7, 0x45, 0xcd, 0xe1, 0x91, 0xe9, 0x14, 0xab, 0x92, 0x06, 0x9b, 0xba, 0xb5, 0xeb, 0x46, 0xf5, 0x97, 0xd2, 0x32, 0x90, 0xe8, 0xb6, 0x3d, 0x83, 0x13, 0x69, 0xc8, 0x3b, 0x21, 0xe1, 0xbb, 0x8f, 0xda, 0xd2, 0xca, 0xf5, 0x2e, 0x83, 0xf7, 0xf6, 0xd4, 0xda, 0x58, 0xdf, 0x31, 0xb8, 0x1b, 0xba, 0x7b, 0x8d, 0xc7, 0x7c, 0x1e, 0x23, 0xc4, 0x80, 0x5f, 0xbe, 0x1e, 0x34, 0x3f, 0x67, 0x86, 0x13, 0xa2, 0x85, 0x9a, 0xd3, 0xb0, 0xad, 0x66, 0xdf, 0x7c, 0xbb, 0x2a, 0x07, 0xe3, 0x22, 0x5d, 0x76, 0xb8, 0x80, 0xf3, 0xe5, 0x1e, 0x76, 0xdc, 0x0f, 0x34, 0xb6, 0xcd, 0x65, 0xf8, 0x5d, 0x42, 0x02, 0x65, 0x84, 0xc4, 0xe1, 0xdf, 0x11, 0x67, 0x4e, 0xd1, 0xd3, 0x98, 0x9a, 0x95, 0xcf, 0x15, 0x13, 0x94, 0xd4, 0x3d, 0x33, 0xae, 0x56, 0x8a, 0x18, 0xdc, 0x79, 0x5c, 0x34, 0x13, 0x6b, 0xf8, 0x46, 0x6c, 0xf7, 0xd0, 0x89, 0x83, 0x57, 0x05, 0x2b, 0x1c, 0x4a, 0x2a, 0x00, 0x0d, 0x67, 0x4b, 0x78, 0x58, 0xb1, 0x2d, 0xcf, 0x97, 0x6b, 0xd8, 0x83, 0x9d, 0x2e, 0x53, 0x0b, 0x5a, 0x38, 0xaf, 0xc6, 0xff, 0x07, 0x46, 0x32, 0x63, 0x27, 0x45, 0x5e, 0xa5, 0x48, 0x68, 0xa2, 0x14, 0x93, 0x05, 0x8d, 0x4b, 0x3e, 0x4c, 0x1f, 0xa0, 0x5e, 0xcd, 0x38, 0xc0, 0xfd, 0x3b, 0x51, 0x93, 0x6d, 0x6f, 0x6a, 0x66, 0xdb, 0xaf, 0x43, 0x48, 0x27, 0x31, 0xcf, 0xb4, 0xf4, 0xdb, 0xe6, 0x71, 0xfb, 0x4d, 0x3a, 0xb7, 0xa4, 0x21, 0x8c, 0x93, 0xd7, 0x71, 0x20, 0x8c, 0x0f, 0x9a, 0x6e, 0x87, 0xb1, 0x40, 0x1a, 0xe8, 0x9d, 0x93, 0x26, 0xfa, 0x02, 0xd0, 0x67, 0x91, 0x76, 0x0a, 0x35, 0xee, 0x46, 0x2a, 0x67, 0xe2, 0x0a, 0x35, 0x7f, 0x37, 0x7d, 0xcd, 0x21, 0x4b, 0x8c, 0xfb, 0xca, 0xfe, 0xad, 0x2b, 0xbe, 0xce, 0x72, 0x78, 0x42, 0x41, 0x5e, 0x2a, 0x0c, 0x84, 0xf7, 0x7d, 0xf8, 0x51, 0x1c, 0xa5, 0xfc, 0x15, 0x99, 0x0e, 0x5e, 0x53, 0xf9, 0xe8, 0x24, 0x43, 0x9c, 0xe3, 0xcd, 0xc0, 0x09, 0x37, 0x3e, 0x61, 0x84, 0xe8, 0xff, 0xe5, 0xe4, 0x48, 0xa7, 0xd4, 0x9f, 0xbd, 0x95, 0x63, 0x27, 0xc4, 0xe1, 0x98, 0x79, 0x36, 0x92, 0xb0, 0xf2, 0xcb, 0x12, 0xbe, 0x65, 0xdc, 0xdf, 0x94, 0x6c, 0x6d, 0x82, 0xe6, 0xfb, 0x6a, 0xc5, 0xad, 0x3b, 0x31, 0x21, 0xca, 0x95, 0x51, 0x76, 0xec, 0x0c, 0x91, 0xff, 0xb3, 0xd1, 0x35, 0x84, 0x16, 0x11, 0x7c, 0xd1, 0x02, 0x12, 0x6d, 0x68, 0x43, 0x7e, 0xd3, 0x73, 0xa8, 0xff, 0x87, 0xfc, 0x62, 0x0b, 0xed, 0x60, 0xae, 0x02, 0xc1, 0x01, 0xb4, 0x76, 0x14, 0x3c, 0xae, 0xc9, 0x91, 0x9b, 0x4c, 0xfe, 0x05, 0x4b, 0x57, 0xc9, 0x1f, 0xd0, 0x96, 0xe8, 0x74, 0xf7, 0xee, 0xb6, 0xc5, 0x0c, 0xcc, 0xfe, 0x85, 0x4e, 0xc8, 0x0d, 0x96, 0xa0, 0x82, 0x0b, 0x54, 0x81, 0xd0, 0x8b, 0xd4, 0x3e, 0x1c, 0x60, 0x6d, 0x66, 0x07, 0xb2, 0x78, 0x7f, 0x52, 0x52, 0x55, 0xf7, 0xff, 0x4b, 0xaf, 0x5e, 0xb3, 0xba, 0x00, 0xd2, 0x5f, 0xdf, 0x57, 0xba, 0x1f, 0x73, 0x59, 0xb7, 0x63, 0x3c, 0x85, 0xd7, 0x4c, 0xe0, 0xbd, 0x0c, 0x59, 0xf7, 0x02, 0xdd, 0x42, 0x63, 0x80, 0x5c, 0x24, 0xe4, 0xca, 0x58, 0xdf, 0xe7, 0x66, 0xd3, 0xbc, 0x9f, 0x8c, 0xb6, 0x54, 0x57, 0x2b, 0xc4, 0xad, 0x07, 0x2d, 0xcd, 0xa5, 0x25, 0xfc, 0x24, 0x94, 0xbd, 0x45, 0x53, 0x2d, 0xc4, 0xfc, 0x0c, 0xa5, 0xaa, 0xa0, 0x63, 0x18, 0x2e, 0xc0, 0x3b, 0x28, 0x76, 0xbe, 0xfe, 0xe7, 0x5f, 0xd3, 0x92, 0xf7, 0x12, 0x53, 0x88, 0xef, 0xd8, 0x32, 0x96, 0x01, 0x2f, 0xc8, 0x47, 0xda, 0x1d, 0xd1, 0xf1, 0xca, 0xc4, 0xb8, 0xe8, 0x25, 0x37, 0x15, 0xf1, 0xe9, 0x8c, 0x74, 0xf9, 0xa0, 0x32, 0x58, 0x07, 0x88, 0x85, 0x7f, 0x70, 0xf2, 0xa0, 0x68, 0x4a, 0xe8, 0x72, 0x13, 0x22, 0x12, 0x15, 0x08, 0xf2, 0xdb, 0x5a, 0x9a, 0x4d, 0xcf, 0xa9, 0x6d, 0xdd, 0x47, 0x08, 0x36, 0x0f, 0x49, 0x79, 0xc2, 0x0d, 0xaa, 0x89, 0x3a, 0xed, 0x75, 0x26, 0xa5, 0x27, 0x91, 0xb1, 0xae, 0x4d, 0x9d, 0x54, 0xa7, 0xf6, 0x1f, 0x96, 0xcf, 0xfc, 0xde, 0x2c, 0xd0, 0xe7, 0x8c, 0x12, 0x8c, 0xa8, 0xa8, 0xdb, 0x19, 0x8b, 0xa3, 0x46, 0x0a, 0x67, 0x42, 0x11, 0xf1, 0x17, 0x43, 0x12, 0x22, 0x2e, 0x43, 0x83, 0xb9, 0xe7, 0xdf, 0x9e, 0xde, 0x5b, 0x1a, 0x6a, 0x47, 0xf7, 0xfe, 0xd4, 0xff, 0x2c, 0x87, 0x01, 0x66, 0x68, 0xbc, 0xe3, 0x7a, 0x46, 0x1f, 0x0a, 0x54, 0x02, 0x47, 0xbd, 0xf5, 0x2f, 0xcc, 0x4a, 0x43, 0xac, 0x63, 0x9a, 0x4f, 0xd4, 0x4a, 0x08, 0xd9, 0xf5, 0xe7, 0x73, 0x16, 0x03, 0xac, 0x92, 0xb1, 0x8e, 0x3d, 0x88, 0x0f, 0xf2, 0xd5, 0xb9, 0xd7, 0xce, 0xe6, 0xdb, 0xb2, 0xb7, 0xff, 0x50, 0x4f, 0x2d, 0xf3, 0xb3, 0xab, 0xcd, 0x38, 0xb1, 0x8f, 0xc9, 0x8d, 0x1a, 0x5a, 0x96, 0xdf, 0x37, 0x00, 0xe4, 0x6e, 0x5f, 0x53, 0xd3, 0x2c, 0xc5, 0x81, 0x64, 0x65, 0x94, 0xde, 0x2d, 0xa5, 0x3e, 0xe4, 0x52, 0xd7, 0x10, 0x78, 0xb0, 0xaa, 0x0b, 0x6f, 0x5b, 0x39, 0xef, 0x51, 0x4b, 0xea, 0x98, 0x5d, 0x52, 0x96, 0x8d, 0xcd, 0x51, 0xeb, 0xd7, 0x5b, 0xac, 0x0f, 0x0f, 0x03, 0xfb, 0x86, 0xbb, 0x0b, 0x03, 0x56, 0xdb, 0x41, 0xe4, 0x69, 0xbe, 0x84, 0x93, 0x32, 0x1a, 0x85, 0x8b, 0x94, 0x5c, 0xcf, 0xc0, 0xff, 0x3d, 0x05, 0xd5, 0xdc, 0x96, 0x6b, 0x8e, 0x2b, 0x75, 0xa8, 0x88, 0x6a, 0x70, 0xcb, 0x28, 0xb9, 0x39, 0x8b, 0xd1, 0x3d, 0x73, 0xd3, 0x5a, 0xc2, 0xc4, 0x7e, 0xbf, 0xa4, 0x2c, 0x5f, 0x16, 0xef, 0x95, 0x84, 0xc5, 0xc5, 0xab, 0xbb, 0xf3, 0x00, 0xed, 0x56, 0x3c, 0x19, 0x04, 0x2c, 0xa9, 0x49, 0x54, 0xe0, 0xdf, 0xed, 0xd2, 0x66, 0x96, 0x2f, 0x15, 0xc2, 0x4d, 0xe3, 0xaf, 0x13, 0x3c, 0xaf, 0xbd, 0xd1, 0x8b, 0x6f, 0xbd, 0x53, 0xc1, 0xd7, 0xa0, 0x94, 0x7f, 0x5a, 0x20, 0x36, 0x6e, 0x4b, 0x54, 0xc7, 0x76, 0x43, 0x82, 0x44, 0x31, 0xc2, 0x34, 0xdb, 0x9f, 0x19, 0x8e, 0xf5, 0x1b, 0x87, 0xde, 0x74, 0x8d, 0xa2, 0x75, 0x39, 0xe2, 0xf8, 0xb6, 0xea, 0xb9, 0xf7, 0x6c, 0xf2, 0x5f, 0x0a, 0x61, 0xc9, 0xfe, 0x05, 0x2c, 0x75, 0x11, 0xc3, 0x4a, 0x51, 0x1b, 0x0d, 0x70, 0x0d, 0x99, 0xbe, 0x20, 0xf6, 0x35, 0x25, 0x7b, 0x77, 0x3c, 0xab, 0x56, 0xe0, 0x52, 0xb6, 0x8f, 0x67, 0x65, 0xcd, 0xa1, 0x6d, 0xdf, 0xfc, 0x77, 0x02, 0x20, 0x7a, 0x7e, 0xaa, 0x2b, 0x89, 0xfe, 0x61, 0x9f, 0x9e, 0xaa, 0xde, 0xea, 0xc2, 0x76, 0x15, 0xb9, 0x38, 0xa8, 0xff, 0xb2, 0x60, 0x32, 0x9d, 0x66, 0xdb, 0x3f, 0x3b, 0x81, 0xf0, 0x0c, 0xf2, 0x44, 0x2e, 0xf9, 0x70, 0x36, 0x53, 0xe0, 0xfc, 0x16, 0x6d, 0xa5, 0xb4, 0x13, 0x3f, 0x0e, 0x19, 0x40, 0xe6, 0xd5, 0xce, 0x42, 0xbd, 0xfc, 0x9d, 0x4b, 0x7d, 0x61, 0xbb, 0x4d, 0xa9, 0x92, 0x4d, 0x67, 0x29, 0xe2, 0x2a, 0xa4, 0x34, 0xbd, 0xe3, 0xe4, 0x74, 0x38, 0x01, 0x1a, 0x65, 0xec, 0x8d, 0xb8, 0xff, 0x05, 0xd6, 0x68, 0x94, 0x96, 0x6e, 0xfd, 0xfb, 0x30, 0x76, 0xa9, 0xee, 0xb2, 0x1b, 0x70, 0xb1, 0x62, 0x61, 0xdc, 0xf4, 0x3d, 0x20, 0xf3, 0xfb, 0x8c, 0x4b, 0x66, 0xfc, 0xb8, 0x78, 0x0b, 0xc9, 0x5f, 0x9d, 0x8d, 0xae, 0xa7, 0x18, 0x63, 0x9d, 0xd3, 0xf3, 0xfe, 0x88, 0x14, 0x65, 0x47, 0x0f, 0xa1, 0x9c, 0x48, 0x5b, 0x09, 0xb9, 0x29, 0x4a, 0xc8, 0x1d, 0x5f, 0xcc, 0x19, 0xe3, 0x20, 0x8d, 0x0c, 0xad, 0x1a, 0xd4, 0xd8, 0xa4, 0x64, 0xab, 0x72, 0xba, 0xb5, 0x40, 0x5f, 0x33, 0xd4, 0x8b, 0xc6, 0x63, 0x4f, 0x31, 0xc9, 0xb9, 0x70, 0xa8, 0x15, 0xfc, 0x6d, 0x9c, 0xb8, 0xd5, 0xdf, 0x92, 0x34, 0x8e, 0x75, 0xcc, 0xd1, 0x19, 0xea, 0x6c, 0x37, 0x54, 0x34, 0xdc, 0x3b, 0x8b, 0xff, 0x6c, 0xfa, 0x3e, 0x59, 0x3d, 0x24, 0x25, 0xaf, 0x5f, 0x9b, 0x72, 0xf8, 0x36, 0x3d, 0x56, 0x30, 0x22, 0xfd, 0xc6, 0x08, 0x5e, 0x39, 0x7f, 0xdc, 0x29, 0x48, 0x48, 0xe5, 0x24, 0x52, 0x77, 0xb0, 0xfc, 0x64, 0xb6, 0xce, 0x48, 0xc3, 0x07, 0xce, 0xb5, 0x81, 0x06, 0x68, 0x60, 0x4f, 0x6e, 0xfb, 0x83, 0x92, 0xdf, 0x3a, 0x54, 0xb9, 0xdf, 0x21, 0x2a, 0xcd, 0x1e, 0x2f, 0xe2, 0x49, 0xfe, 0xcf, 0x81, 0x2d, 0x52, 0x17, 0x1a, 0x4e, 0x66, 0xb4, 0xf3, 0xf0, 0x41, 0x25, 0xe3, 0x96, 0x26, 0x28, 0xfe, 0x19, 0x61, 0x72, 0x75, 0xf8, 0x40, 0xa3, 0xb7, 0xef, 0x5f, 0x79, 0xdc, 0xcb, 0x28, 0x44, 0x44, 0x7c, 0x9b, 0x9a, 0x7b, 0x6c, 0x4b, 0x4b, 0x60, 0x0f, 0xa9, 0x97, 0x87, 0xbc, 0x85, 0x9f, 0xdb, 0xbb, 0xd2, 0x1a, 0x88, 0x9f, 0xaa, 0x49, 0x18, 0xd5, 0x92, 0x2d, 0xdb, 0x7e, 0xfe, 0xf7, 0x8d, 0x7a, 0x18, 0xc0, 0x33, 0xc5, 0xbd, 0x7a, 0x46, 0x07, 0xc8, 0x27, 0x13, 0x66, 0x94, 0x49, 0x62, 0x9f, 0xbc, 0x99, 0x56, 0x55, 0x25, 0xfb, 0x94, 0xa9, 0x3f, 0xb2, 0xa7, 0x0a, 0x87, 0xd0, 0xa4, 0x4e, 0x51, 0xf1, 0x09, 0x02, 0xc4, 0x29, 0xeb, 0xff, 0x26, 0x3b, 0x51, 0x3e, 0x5a, 0x0c, 0xdb, 0xee, 0xa6, 0x57, 0xa7, 0xc3, 0xba, 0xa1, 0x74, 0x90, 0xee, 0x70, 0x08, 0x18, 0xcc, 0xb8, 0xd0, 0x22, 0xce, 0x96, 0xc7, 0xcb, 0x68, 0x40, 0x98, 0x20, 0x49, 0x3d, 0x07, 0xec, 0xdf, 0xd1, 0x8d, 0xcf, 0x19, 0xbc, 0x42, 0x90, 0x70, 0x24, 0x01, 0xb4, 0x28, 0xcf, 0xc6, 0x50, 0xd3, 0x95, 0x5a, 0x1b, 0x18, 0x15, 0x33, 0xc7, 0xb2, 0xa8, 0x95, 0x92, 0xbb, 0x93, 0xfe, 0x18, 0x2b, 0x81, 0xc1, 0x6b, 0x9c, 0x30, 0xf1, 0x65, 0x50, 0x6a, 0x80, 0x3d, 0x74, 0x37, 0xa8, 0x59, 0xa6, 0x51, 0x8a, 0x63, 0xb6, 0xd8, 0x16, 0x9f, 0xa9, 0x47, 0x2a, 0x7c, 0x04, 0xa7, 0xfe, 0x69, 0x47, 0x02, 0xbf, 0xe9, 0xb7, 0x1b, 0x7a, 0xea, 0x60, 0x5c, 0x3c, 0x53, 0x5b, 0x10, 0x78, 0xdc, 0x4d, 0xd2, 0xa8, 0x22, 0x30, 0x45, 0x37, 0xfb, 0x56, 0x06, 0x9f, 0x06, 0xaa, 0xdf, 0xcf, 0x87, 0x3a, 0x3e, 0xcf, 0x72, 0xf2, 0xe5, 0xa6, 0xc6, 0xaa, 0xe2, 0x7c, 0x1c, 0x64, 0xc2, 0xfc, 0x80, 0xce, 0x02, 0xfc, 0x7f, 0x0f, 0xc6, 0x60, 0x81, 0xbf, 0xcd, 0x3b, 0x5a, 0x37, 0xa5, 0x38, 0x1b, 0x0c, 0x1b, 0x39, 0x2e, 0xd6, 0xf6, 0x3d, 0xa2, 0x36, 0xe5, 0x87, 0xc3, 0x17, 0xb5, 0xfd, 0xee, 0x33, 0xc7, 0xce, 0xa3, 0xd9, 0xc2, 0x57, 0xdc, 0xee, 0x85, 0x48, 0x9d, 0x33, 0x60, 0x02, 0xcd, 0xc5, 0x83, 0x44, 0x44, 0xea, 0xb6, 0x07, 0x25, 0x0a, 0x4b, 0xa6, 0x6e, 0xfc, 0x51, 0x42, 0xcd, 0x84, 0x0b, 0x65, 0xb6, 0x19, 0xa1, 0xe5, 0xb2, 0xeb, 0x14, 0x0c, 0xfa, 0x24, 0x77, 0xf5, 0x44, 0x6e, 0x5d, 0x39, 0xdd, 0xb6, 0x8e, 0xcc, 0xf8, 0x30, 0xfe, 0x21, 0x46, 0x9c, 0xff, 0x95, 0xc6, 0xc7, 0xb5, 0x0a, 0xdf, 0x54, 0xca, 0xd2, 0xac, 0xbc, 0x64, 0xd0, 0x97, 0x94, 0x54, 0xd9, 0x29, 0x0f, 0x91, 0x60, 0x20, 0xc3, 0xe4, 0x53, 0xc2, 0xb0, 0xe4, 0x40, 0x72, 0x7e, 0x25, 0xbc, 0x81, 0x06, 0xad, 0x05, 0x46, 0x14, 0xa7, 0xe6, 0x71, 0x6b, 0x5c, 0xdb, 0x9c, 0x0a, 0x5e, 0x76, 0x23, 0xae, 0x06, 0x01, 0x36, 0x98, 0x21, 0x65, 0x2c, 0x90, 0xe7, 0x4b, 0x1a, 0x2a, 0x2d, 0x80, 0xa5, 0x48, 0xdb, 0x9e, 0x14, 0xe0, 0x9f, 0xe9, 0xaa, 0x00, 0xe3, 0x77, 0x32, 0x0f, 0xfd, 0x94, 0xdb, 0x55, 0xa6, 0x64, 0x46, 0xbe, 0xae, 0xca, 0xde, 0xda, 0xee, 0x89, 0x68, 0x29, 0x7d, 0xa9, 0xda, 0x96, 0x27, 0x1d, 0x71, 0x41, 0x1a, 0xa2, 0xfe, 0x81, 0xe3, 0xea, 0x81, 0x2a, 0x99, 0xfa, 0xf8, 0x0b, 0x58, 0xd1, 0x79, 0xbb, 0xf1, 0x4a, 0x7f, 0x96, 0xe0, 0x43, 0x82, 0x02, 0x7f, 0xff, 0xca, 0xf7, 0x79, 0xc9, 0x84, 0xbe, 0x80, 0xda, 0x16, 0xf8, 0x43, 0x7d, 0xb0, 0xe3, 0x9a, 0x71, 0x23, 0xd9, 0x04, 0x8f, 0xf7, 0x19, 0x54, 0xac, 0xb7, 0xca, 0xa7, 0xc1, 0x90, 0x3d, 0x99, 0x4a, 0x1b, 0x73, 0xb9, 0xeb, 0x76, 0xdf, 0x3a, 0x59, 0x99, 0x6c, 0xeb, 0x78, 0xe7, 0xc2, 0x69, 0xc1, 0x04, 0xc5, 0x92, 0xe7, 0xe7, 0x5f, 0x3e, 0xba, 0x30, 0x80, 0x2a, 0x4b, 0xbb, 0x63, 0x35, 0x51, 0x75, 0x12, 0xcf, 0xcb, 0x6e, 0x2c, 0xae, 0xe7, 0x30, 0xe6, 0xc2, 0x23, 0x50, 0x50, 0x6c, 0xb2, 0x42, 0xda, 0xeb, 0x21, 0x71, 0x16, 0x17, 0x3a, 0x8f, 0xbf, 0x51, 0x29, 0x2a, 0xfb, 0xba, 0xdd, 0x81, 0xdd, 0xa3, 0xb1, 0x95, 0x2e, 0x45, 0x4c, 0x83, 0x6d, 0xb2, 0xc5, 0x10, 0x14, 0x0c, 0x0b, 0x86, 0x1d, 0xf5, 0x85, 0xbf, 0xc5, 0x46, 0xf5, 0x7f, 0x90, 0x04, 0xa2, 0x07, 0x8d, 0x90, 0xb6, 0xe6, 0xdb, 0x1d, 0xe5, 0x13, 0x6c, 0x67, 0x4f, 0x39, 0x09, 0xa3, 0xa8, 0x52, 0x96, 0xb1, 0x96, 0x77, 0x98, 0x99, 0x5a, 0xf6, 0xf4, 0x35, 0xb3, 0xa6, 0xf9, 0x2b, 0xff, 0x77, 0xa1, 0x1f, 0xa4, 0x4d, 0x14, 0x26, 0xae, 0x0f, 0x6e, 0x7d, 0xba, 0xfa, 0xc2, 0x7b, 0x12, 0x3c, 0x5f, 0xc4, 0x19, 0xbe, 0x52, 0xc0, 0xea, 0x41, 0x2c, 0x4b, 0x3c, 0xac, 0x05, 0xae, 0x89, 0xa4, 0xc0, 0xce, 0x6f, 0x5e, 0x91, 0xa4, 0x56, 0xb1, 0xbd, 0xed, 0x53, 0x70, 0xa1, 0x23, 0x4c, 0xf6, 0xf6, 0xab, 0x5d, 0x02, 0x53, 0x50, 0x7b, 0xc6, 0xf3, 0xf0, 0x57, 0x3a, 0xb9, 0x75, 0x85, 0xb6, 0x71, 0x07, 0xde, 0xc0, 0x59, 0x81, 0x23, 0x23, 0xe0, 0x21, 0xe3, 0x41, 0xad, 0x83, 0x9e, 0xa9, 0xe3, 0xd0, 0x2a, 0xec, 0xa4, 0x33, 0x56, 0xad, 0xd4, 0x8c, 0xce, 0xf8, 0x1f, 0x69, 0x3e, 0xd5, 0x3d, 0x32, 0xba, 0x1c, 0x74, 0xa3, 0x5e, 0x8a, 0x5f, 0x7f, 0x31, 0x15, 0xef, 0x83, 0x4f, 0x7d, 0xaf, 0x99, 0x48, 0x24, 0x4c, 0x4f, 0xc3, 0x1f, 0x54, 0x87, 0x67, 0x8d, 0x3e, 0x70, 0xfb, 0x27, 0xab, 0xb5, 0xcb, 0x19, 0xeb, 0xf4, 0x4e, 0x11, 0xc3, 0x71, 0x07, 0x95, 0x6d, 0x0c, 0xa9, 0x99, 0xe1, 0x70, 0x7e, 0x51, 0x53, 0x8e, 0x09, 0x44, 0xfd, 0x4a, 0xeb, 0xa2, 0x1e, 0x73, 0x03, 0xd7, 0x43, 0xf9, 0xd9, 0x60, 0xc5, 0x5a, 0x3d, 0xdd, 0x93, 0x5e, 0x2b, 0x68, 0x31, 0x04, 0xf2, 0x26, 0x01, 0xbc, 0x95, 0x1b, 0xc2, 0xd6, 0x72, 0x43, 0x56, 0x3b, 0x21, 0xde, 0xc8, 0x5b, 0x9f, 0x0b, 0x8d, 0x66, 0xac, 0x98, 0x0a, 0xbf, 0x71, 0x19, 0x57, 0xae, 0x66, 0x37, 0x43, 0x55, 0x73, 0x4b, 0x98, 0xe5, 0x56, 0x2c, 0xa0, 0x11, 0x44, 0x44, 0xe7, 0xc3, 0xd3, 0xea, 0x43, 0x0e, 0x17, 0xec, 0x12, 0x65, 0x0b, 0x6a, 0xc3, 0x0a, 0x33, 0xeb, 0x98, 0xc8, 0x80, 0xaa, 0xa9, 0xe5, 0x74, 0x31, 0x2d, 0x53, 0x86, 0x29, 0xf5, 0x26, 0xc8, 0x71, 0x39, 0x4b, 0xc7, 0x6d, 0x97, 0x76, 0xb3, 0xa1, 0x59, 0x5c, 0xc0, 0x7e, 0xf7, 0x23, 0xcb, 0x7b, 0xdc, 0x16, 0x41, 0x68, 0x6d, 0x9e, 0x3d, 0xff, 0x48, 0x6d, 0xf0, 0xbd, 0xc9, 0xfd, 0x46, 0xf0, 0xd3, 0x39, 0xc6, 0x10, 0xcd, 0x7a, 0xbb, 0x52, 0xea, 0xb4, 0x91, 0x7b, 0xae, 0xf2, 0x81, 0xf2, 0xae, 0xff, 0x71, 0x1a, 0x97, 0x66, 0x15, 0xde, 0x71, 0x9d, 0x5b, 0x8e, 0x25, 0x7e, 0x06, 0xe9, 0x3d, 0xf6, 0x98, 0x7b, 0xec, 0x01, 0x76, 0x29, 0x4e, 0xd6, 0x47, 0x0a, 0xf0, 0x5e, 0x9d, 0x78, 0x93, 0xeb, 0xd7, 0x67, 0x2d, 0x27, 0x46, 0xf6, 0x31, 0x4b, 0x8e, 0x44, 0x10, 0x91, 0x4f, 0x85, 0x00, 0xeb, 0x05, 0x55, 0xfc, 0xf5, 0x2d, 0x4b, 0x0c, 0x28, 0xaa, 0xd2, 0xc6, 0x51, 0x66, 0x34, 0x15, 0x42, 0x3c, 0xf8, 0x39, 0xc8, 0x16, 0x6e, 0x0f, 0xdd, 0x52, 0x88, 0x93, 0x1e, 0x6b, 0xeb, 0xa3, 0x7f, 0xd5, 0x46, 0x06, 0x3d, 0x28, 0xe3, 0xac, 0x14, 0x81, 0x7c, 0x37, 0xb3, 0x25, 0x4f, 0xbb, 0x6d, 0x68, 0x74, 0xc2, 0x31, 0xce, 0x6f, 0x94, 0xbc, 0x6f, 0x02, 0xb5, 0x0d, 0xa0, 0x45, 0xae, 0x19, 0xcf, 0xf8, 0x10, 0xc1, 0xaf, 0x17, 0xb7, 0x01, 0x96, 0xaf, 0x4c, 0x6a, 0x23, 0xf1, 0x0d, 0xd2, 0x23, 0x84, 0xd1, 0x4a, 0xb5, 0x20, 0x46, 0x50, 0xad, 0x59, 0x7e, 0x46, 0x37, 0xb8, 0xaa, 0x23, 0xbd, 0x10, 0x25, 0x69, 0x0a, 0x0f, 0xb4, 0x57, 0xaf, 0x14, 0x0c, 0x5f, 0xa5, 0x40, 0x94, 0xda, 0x35, 0xd0, 0x6d, 0xfb, 0x15, 0xaa, 0xb0, 0x01, 0xd4, 0x35, 0xf6, 0xb1, 0x77, 0x6e, 0x1e, 0x04, 0x65, 0x39, 0x4a, 0x1d, 0x80, 0xf4, 0x2b, 0x7d, 0x95, 0x52, 0x7f, 0x7a, 0xf6, 0x67, 0xd7, 0xed, 0x65, 0xff, 0x9e, 0x2c, 0x34, 0x34, 0x57, 0x38, 0xab, 0x40, 0x26, 0x37, 0xaa, 0x8f, 0x92, 0x24, 0x8f, 0x19, 0x89, 0xc5, 0x5a, 0xee, 0xa4, 0xdd, 0x10, 0x12, 0xad, 0xa4, 0x5d, 0x8c, 0x5f, 0x74, 0x7c, 0xba, 0x6c, 0xc5, 0x5c, 0xe7, 0xc5, 0x5b, 0xfb, 0x1f, 0x15, 0xbe, 0x16, 0x42, 0x8e, 0xeb, 0x05, 0x58, 0xe9, 0x49, 0xe1, 0x24, 0xa8, 0xde, 0xe7, 0xfc, 0x9f, 0xc3, 0x21, 0xd8, 0xb2, 0xd5, 0x43, 0xa8, 0xe0, 0xae, 0xd3, 0xeb, 0x81, 0xd4, 0x8c, 0x7d, 0xcb, 0x2f, 0x05, 0xb0, 0x9b, 0xc1, 0x8e, 0x9f, 0x73, 0x91, 0x5a, 0xbf, 0xbe, 0xe8, 0xe4, 0xb7, 0x5c, 0xc0, 0x8b, 0x72, 0x5a, 0x7a, 0x7f, 0x72, 0x01, 0xcf, 0xe1, 0x67, 0x13, 0x09, 0x26, 0x00, 0x51, 0x73, 0xbd, 0x01, 0x40, 0x0e, 0xf1, 0x96, 0x2d, 0x85, 0x10, 0xe6, 0x6f, 0x63, 0xcd, 0xec, 0xec, 0x84, 0xe3, 0x82, 0xdf, 0xc9, 0xfb, 0xbf, 0xd8, 0x10, 0xd0, 0x83, 0x04, 0x64, 0x91, 0x50, 0xae, 0x70, 0x87, 0x5c, 0x06, 0x3a, 0xf7, 0xe4, 0x21, 0x0e, 0x4a, 0xc2, 0x42, 0xb7, 0x6b, 0x42, 0x58, 0xf6, 0x71, 0x32, 0xc7, 0x2c, 0x7e, 0x38, 0x6b, 0x5a, 0xe6, 0x69, 0xda, 0x4b, 0x94, 0x16, 0xea, 0x10, 0xaa, 0xe9, 0x74, 0xad, 0x68, 0x31, 0x57, 0x12, 0x4f, 0x7b, 0xbf, 0x4d, 0x86, 0x62, 0xa7, 0xfd, 0x7c, 0xa8, 0x9c, 0x0a, 0xcf, 0x85, 0xc4, 0x93, 0x6d, 0x3e, 0x20, 0x28, 0xf9, 0xfa, 0x0e, 0x3a, 0x70, 0xd2, 0x12, 0xcf, 0x0c, 0x27, 0xd5, 0x7a, 0x68, 0x38, 0x6e, 0x8b, 0xe6, 0xf3, 0xe1, 0x83, 0x4e, 0x0c, 0xe5, 0xcb, 0xb7, 0x4d, 0xeb, 0xa5, 0xab, 0x2d, 0x5b, 0x62, 0x86, 0xa3, 0x21, 0xd6, 0x1f, 0x3c, 0x68, 0x09, 0xaa, 0x6c, 0xa5, 0x2f, 0xdd, 0x21, 0xd8, 0xda, 0x52, 0x9e, 0x0f, 0x6f, 0x2d, 0x87, 0x2b, 0xd6, 0xfe, 0x38, 0xe6, 0x76, 0xe9, 0x5b, 0x15, 0x61, 0x04, 0xba, 0x2b, 0xcb, 0x00, 0x51, 0xff, 0xc1, 0x0c, 0xa8, 0xcf, 0x18, 0xf6, 0x60, 0x84, 0xa3, 0x93, 0x0b, 0x37, 0xa9, 0x62, 0x41, 0xf5, 0x95, 0x6c, 0xf0, 0xbf, 0xf0, 0x6e, 0xf3, 0xd5, 0x8d, 0x3a, 0xe6, 0x35, 0x03, 0x5b, 0x39, 0x5e, 0x60, 0xf8, 0x84, 0x59, 0x1c, 0xfb, 0x1a, 0xfa, 0x4c, 0x71, 0xe1, 0x64, 0x18, 0x34, 0x61, 0xcb, 0x6f, 0xc8, 0x1a, 0x7e, 0xfa, 0x84, 0x1b, 0x24, 0x4e, 0xf2, 0xd0, 0x45, 0x65, 0x78, 0x1c, 0x0d, 0x4f, 0x37, 0xa7, 0x4d, 0x25, 0x33, 0x7a, 0xc3, 0x3f, 0xb4, 0xc9, 0x9b, 0xa6, 0xed, 0x0f, 0x35, 0xcc, 0xdc, 0x61, 0x29, 0x7b, 0x71, 0xfb, 0x89, 0x0c, 0xf2, 0x20, 0x66, 0xd9, 0x9e, 0x21, 0x95, 0xf5, 0x91, 0xbb, 0xb2, 0x1a, 0xe7, 0xa5, 0x66, 0xe2, 0x24, 0x6a, 0xe6, 0x3a, 0xd4, 0x75, 0xbc, 0x14, 0x6e, 0x6a, 0xca, 0x5d, 0x7e, 0xbd, 0x8c, 0x2f, 0x03, 0x7d, 0x9d, 0x47, 0x16, 0x70, 0x7d, 0xb9, 0xcd, 0x65, 0x91, 0xe2, 0x5f, 0xc6, 0x6b, 0x9f, 0x89, 0x6d, 0x4c, 0xbc, 0x30, 0xb8, 0xe7, 0xb0, 0x47, 0xe0, 0x68, 0x87, 0xf3, 0x86, 0xb5, 0x1f, 0xed, 0x8f, 0xf4, 0x97, 0x29, 0x32, 0x4d, 0x05, 0xb5, 0x4f, 0xf1, 0x67, 0xe3, 0x03, 0x5b, 0xdd, 0xaa, 0x79, 0xd6, 0x15, 0x4a, 0x03, 0x3f, 0x06, 0x2f, 0x69, 0x0c, 0xe1, 0x18, 0x81, 0x8d, 0x44, 0x78, 0xff, 0x72, 0xb1, 0x1c, 0x8f, 0x8e, 0x40, 0x0f, 0x21, 0xda, 0x90, 0xbb, 0x84, 0xbd, 0x03, 0x50, 0x37, 0x8a, 0x2b, 0x6a, 0x7c, 0x4b, 0x7f, 0xee, 0xad, 0xbd, 0x53, 0x34, 0xd3, 0x9b, 0x07, 0x6c, 0x75, 0x1f, 0x7e, 0x3a, 0xae, 0xc7, 0xd1, 0xa4, 0x82, 0x55, 0x45, 0x2e, 0x72, 0x19, 0x7b, 0x43, 0x4e, 0x72, 0xe7, 0xd7, 0x4b, 0x93, 0x83, 0x4b, 0x56, 0x83, 0xc5, 0x91, 0xa7, 0x67, 0xce, 0x90, 0x98, 0x04, 0xe4, 0xca, 0xb8, 0x80, 0x22, 0x3c, 0x1b, 0x68, 0x6e, 0x85, 0xf5, 0xf8, 0xac, 0x4b, 0x67, 0x96, 0x31, 0xdb, 0x99, 0x9f, 0x7b, 0x0f, 0x09, 0x66, 0x1f, 0x75, 0x23, 0x7a, 0x02, 0xad, 0x11, 0x28, 0xcc, 0x13, 0xd4, 0x41, 0x9a, 0x9f, 0x94, 0x1e, 0xf4, 0x09, 0x34, 0xe0, 0xfe, 0x30, 0x2a, 0xfc, 0xf2, 0xbc, 0x8e, 0xf8, 0xcd, 0x02, 0x70, 0x6f, 0x49, 0x29, 0x6f, 0x5b, 0x0c, 0x8b, 0x87, 0x94, 0x1f, 0x5e, 0x2b, 0x93, 0xa1, 0x94, 0x94, 0x7c, 0xbd, 0xff, 0x58, 0x5c, 0xd9, 0xb9, 0x3e, 0xae, 0x10, 0xc3, 0x51, 0x25, 0xe3, 0xec, 0x33, 0xa5, 0x2b, 0xf5, 0xb4, 0x92, 0x52, 0xf2, 0xa3, 0x4e, 0xc3, 0xf3, 0xe5, 0xfd, 0x9f, 0xe4, 0xc3, 0x8c, 0xb2, 0xb2, 0x88, 0xf1, 0xa5, 0xb0, 0x4c, 0xb4, 0x75, 0x38, 0x0b, 0xae, 0x24, 0x95, 0xfa, 0x11, 0xae, 0x20, 0x1a, 0xa8, 0x3e, 0xaa, 0x0d, 0x60, 0xa2, 0x1a, 0x29, 0x08, 0xfc, 0x57, 0xcb, 0x55, 0xbb, 0x69, 0xed, 0x29, 0xca, 0xdb, 0xfb, 0x14, 0x07, 0x63, 0xe3, 0x1c, 0xf7, 0xc5, 0x6c, 0xb9, 0xb8, 0xf4, 0xc8, 0x24, 0x37, 0x7a, 0x6c, 0xd1, 0xa3, 0x1b, 0x1f, 0x3a, 0x21, 0xb5, 0x51, 0xdf, 0xc1, 0x6b, 0xaf, 0x8b, 0xb0, 0x02, 0xf4, 0xd8, 0xb0, 0x8b, 0x02, 0xf5, 0xc6, 0x43, 0x31, 0xa7, 0x32, 0xb7, 0xe7, 0x8e, 0xa4, 0x2c, 0x69, 0xaa, 0xad, 0x3d, 0xf0, 0x1e, 0x74, 0xc6, 0x00, 0x33, 0xaa, 0x01, 0xf5, 0x9f, 0xc0, 0xef, 0xdf, 0x08, 0x57, 0xfa, 0x8f, 0xc4, 0xf8, 0xd8, 0xf2, 0xe3, 0x05, 0xb2, 0x9e, 0x6f, 0xef, 0x86, 0xab, 0xf2, 0xaa, 0xca, 0xc4, 0x39, 0x5e, 0x52, 0x7d, 0x58, 0x60, 0x73, 0xe7, 0xee, 0x60, 0x69, 0x63, 0xaa, 0xe4, 0xf6, 0xb3, 0x0e, 0xf5, 0x4c, 0x57, 0x73, 0x17, 0x2d, 0x16, 0x4e, 0x7f, 0x51, 0xdb, 0xb1, 0x81, 0x08, 0xc2, 0x15, 0x48, 0x20, 0x73, 0x56, 0xc9, 0x09, 0xaf, 0xff, 0xf9, 0x37, 0x28, 0xc8, 0x3e, 0xc8, 0x96, 0x5d, 0x24, 0x67, 0x07, 0x61, 0x52, 0x70, 0x76, 0xb3, 0xbc, 0x54, 0xa0, 0xf0, 0x1a, 0x40, 0x13, 0x39, 0x98, 0xf9, 0x88, 0x36, 0xcf, 0x0b, 0x72, 0x5a, 0xf4, 0x22, 0xd7, 0x69, 0x4f, 0xb8, 0x5f, 0x38, 0xef, 0xf0, 0xab, 0xb5, 0x9d, 0xc2, 0xe7, 0x26, 0x0e, 0x59, 0xa3, 0xb6, 0x5d, 0xb9, 0xde, 0x2d, 0xb8, 0xa5, 0x64, 0xff, 0x59, 0xc0, 0x5b, 0x88, 0xb7, 0xf2, 0x18, 0x96, 0xfe, 0x0d, 0x37, 0x28, 0xbd, 0xb1, 0xea, 0x75, 0xdf, 0x6d, 0x91, 0x30, 0xdd, 0x26 ],
+const [ 0xff, 0x5b, 0xe1, 0xec, 0xa7, 0xd4, 0x5e, 0xff, 0x12, 0xe9, 0x64, 0x5d, 0xdf, 0x05, 0xc1, 0x73, 0x5b, 0x97, 0x3b, 0xb8, 0xb0, 0x6f, 0x6c, 0x32, 0x59, 0x6b, 0xd1, 0x3c, 0xd9, 0x54, 0x1d, 0x86, 0xad, 0x03, 0xd3, 0x5d, 0x7f, 0xc8, 0x13, 0x2d, 0x9c, 0x0c, 0xb4, 0x44, 0xa8, 0x34, 0x94, 0xd8, 0x91, 0xc9, 0x2c, 0x4c, 0xc1, 0xd6, 0x68, 0xaf, 0x98, 0x92, 0xb5, 0x86, 0x19, 0x3f, 0x5b, 0xcb, 0xe3, 0x52, 0x0d, 0x35, 0x63, 0xd4, 0xbe, 0xba, 0x49, 0x08, 0xb7, 0x53, 0x38, 0x4e, 0xe7, 0xff, 0xc2, 0x47, 0x7a, 0x0a, 0x93, 0x3a, 0xad, 0x8f, 0xec, 0xb7, 0xe0, 0x3c, 0x54, 0x7a, 0xec, 0x55, 0x8a, 0x91, 0xb8, 0xfb, 0xbd, 0xc2, 0x07, 0xaf, 0xff, 0x27, 0x94, 0x12, 0xf8, 0x1b, 0x61, 0xee, 0xd7, 0x5a, 0x4c, 0x7a, 0x8e, 0x63, 0xe3, 0xda, 0x3f, 0x21, 0x79, 0xe6, 0xf1, 0xcb, 0x7a, 0x2c, 0x88, 0x09, 0xfb, 0x38, 0xf4, 0x58, 0x95, 0x13, 0xa8, 0xaf, 0x74, 0x09, 0x4e, 0x63, 0xab, 0xaf, 0xb9, 0x48, 0xca, 0x25, 0x1b, 0x19, 0xb3, 0x99, 0x78, 0x19, 0xa9, 0x0c, 0x5a, 0xfb, 0xaa, 0x59, 0xc7, 0xff, 0xff, 0x73, 0x70, 0x5f, 0x11, 0xee, 0x2b, 0xe9, 0x7e, 0xc1, 0xa3, 0xed, 0x6c, 0x4a, 0x4e, 0x59, 0x1e, 0x92, 0xa0, 0x23, 0xc5, 0xd3, 0x7f, 0xe7, 0x98, 0x37, 0xf6, 0xd2, 0x26, 0xe3, 0x2d, 0xbe, 0xeb, 0x34, 0x99, 0x9e, 0x22, 0x48, 0x70, 0x1d, 0xdb, 0xc1, 0x60, 0x82, 0x4d, 0xc5, 0x80, 0xd7, 0x6d, 0x49, 0x87, 0x4a, 0xc0, 0x90, 0x3c, 0xd3, 0x6d, 0xee, 0x2d, 0x17, 0x96, 0xd2, 0xa4, 0x8d, 0xe8, 0x04, 0xd7, 0xdf, 0x71, 0x2a, 0x5f, 0x93, 0xb2, 0x91, 0xeb, 0xea, 0xf6, 0x2a, 0x36, 0x08, 0xe2, 0xd3, 0x36, 0x56, 0x4c, 0xd8, 0x97, 0x25, 0x51, 0xba, 0x67, 0x94, 0xa1, 0x2f, 0x13, 0xb3, 0x1e, 0x69, 0x92, 0xe8, 0xa6, 0x9b, 0xe0, 0x92, 0x2c, 0xba, 0xae, 0xed, 0x0e, 0x81, 0x58, 0x36, 0xa2, 0xb7, 0x17, 0x0f, 0x12, 0xb4, 0x78, 0x24, 0x6b, 0x22, 0x0c, 0x0f, 0xf0, 0x01, 0x61, 0x79, 0xb4, 0xed, 0x32, 0x82, 0x68, 0xa4, 0xdb, 0x63, 0x71, 0xc3, 0x0f, 0x52, 0x3e, 0xd0, 0xcd, 0xa7, 0xd8, 0x7d, 0x90, 0x3c, 0xba, 0x2b, 0xc7, 0x19, 0xe4, 0xae, 0x84, 0x51, 0x2b, 0x50, 0x78, 0x27, 0xd3, 0x18, 0x1f, 0x75, 0x5f, 0x4c, 0x38, 0x4f, 0xa8, 0x34, 0x78, 0xe3, 0x2d, 0x21, 0x7f, 0xa3, 0xaa, 0xae, 0x0b, 0xa7, 0xec, 0x46, 0x6c, 0x4c, 0xe3, 0xe6, 0x38, 0x22, 0xf9, 0x24, 0x3f, 0x05, 0xa2, 0x71, 0xc1, 0x89, 0x34, 0x9b, 0xdf, 0x9c, 0xfa, 0x96, 0x50, 0x66, 0x83, 0x7b, 0x55, 0x74, 0x40, 0xd1, 0xef, 0x16, 0x4f, 0x0c, 0x4f, 0x05, 0x91, 0x53, 0x8e, 0x49, 0x02, 0x86, 0x9e, 0x5a, 0x4a, 0x80, 0x81, 0x86, 0x8f, 0x99, 0xb8, 0x92, 0x8e, 0x6f, 0xff, 0xa4, 0xea, 0xe7, 0x37, 0x61, 0xc3, 0x6e, 0xa4, 0x52, 0x8b, 0x85, 0x58, 0x8c, 0x15, 0x7c, 0xef, 0x90, 0xef, 0x7d, 0x7d, 0x70, 0xf2, 0xcd, 0xc5, 0x33, 0x17, 0x4f, 0xac, 0x7b, 0x8d, 0x4a, 0xed, 0x65, 0x08, 0x6b, 0x0d, 0xb1, 0x5b, 0x0e, 0x92, 0x23, 0x49, 0xb9, 0x70, 0x28, 0x98, 0xe9, 0xc4, 0xbd, 0x68, 0x12, 0xc4, 0x8d, 0xc3, 0xe1, 0xf6, 0x59, 0x75, 0xc4, 0xa1, 0x9d, 0x1e, 0xac, 0x82, 0x71, 0x85, 0x12, 0xbf, 0xad, 0x2f, 0x38, 0x21, 0x50, 0x31, 0xb1, 0x7d, 0x23, 0x42, 0x23, 0x73, 0x99, 0x14, 0x4c, 0x5b, 0xfa, 0xe5, 0x43, 0x7d, 0xc0, 0x51, 0x00, 0x80, 0x42, 0x6a, 0x1f, 0x26, 0x8f, 0x0a, 0xe1, 0x36, 0x9d, 0x68, 0x74, 0xb9, 0xa3, 0xea, 0x74, 0x68, 0xc3, 0x3a, 0xb1, 0x66, 0xec, 0x9c, 0x33, 0x2b, 0xff, 0x7f, 0x7b, 0xc0, 0x30, 0x51, 0x0c, 0x32, 0xb0, 0x98, 0x2a, 0x41, 0x89, 0x3f, 0xe2, 0x58, 0xc9, 0x2d, 0x4a, 0xc2, 0xe2, 0x1d, 0x0a, 0x1a, 0x51, 0xa9, 0x1b, 0x03, 0x7e, 0xa7, 0xcf, 0x1a, 0xe3, 0xb9, 0x12, 0x29, 0x71, 0x20, 0xef, 0x9e, 0x2f, 0xd1, 0x56, 0x3b, 0x25, 0xcb, 0x1c, 0x0e, 0x78, 0xa7, 0x43, 0xa4, 0xd6, 0x71, 0x7c, 0x7a, 0x14, 0xb6, 0xea, 0xb4, 0x16, 0xde, 0x29, 0x11, 0xf0, 0xbc, 0x8f, 0x1f, 0x4a, 0x64, 0xb1, 0xab, 0x09, 0x3d, 0x29, 0x7c, 0x2c, 0x57, 0x97, 0x41, 0xf3, 0xfe, 0xe6, 0xc7, 0x47, 0x8f, 0xd1, 0x6f, 0x56, 0x8a, 0xa5, 0xe0, 0x7e, 0xe9, 0x48, 0xf9, 0x6c, 0xb0, 0x7a, 0x09, 0x85, 0xc6, 0x5b, 0x43, 0x84, 0x03, 0x2d, 0x6c, 0x65, 0x8a, 0x5c, 0xd7, 0x83, 0x59, 0xbb, 0x93, 0xfd, 0x1e, 0x11, 0xe3, 0x5d, 0x4c, 0xd4, 0xee, 0x7c, 0x6f, 0x34, 0xb8, 0xa0, 0xbd, 0x5c, 0x51, 0xe8, 0xed, 0xf4, 0x4d, 0xea, 0x4c, 0xea, 0x73, 0x9a, 0x0d, 0x72, 0xba, 0x6e, 0xe0, 0x4b, 0x71, 0xbf, 0xc7, 0x44, 0xbd, 0x73, 0x25, 0x00, 0x48, 0xd9, 0x18, 0xf6, 0x38, 0xd4, 0x09, 0xbb, 0x5e, 0x3c, 0x82, 0x84, 0xb0, 0x81, 0x3f, 0xe7, 0xfa, 0x91, 0x87, 0xe1, 0xd0, 0xfc, 0xbd, 0x1d, 0xc7, 0x56, 0x32, 0x73, 0xe5, 0xde, 0x3d, 0xb0, 0x55, 0x5c, 0x8e, 0x95, 0x5f, 0x50, 0xbf, 0x22, 0x98, 0x48, 0x2c, 0x14, 0x56, 0x92, 0x05, 0xac, 0x67, 0x13, 0xa1, 0xb2, 0x03, 0x77, 0x15, 0xba, 0xfe, 0x8b, 0x06, 0xa6, 0x42, 0xe6, 0xbb, 0x6c, 0x7d, 0xcf, 0x76, 0x19, 0x17, 0x5b, 0x05, 0x16, 0x67, 0xd6, 0x94, 0xaa, 0x26, 0x64, 0xc5, 0xc1, 0x24, 0xe8, 0x03, 0xec, 0x39, 0x25, 0x13, 0xa8, 0x7f, 0x24, 0xeb, 0xe3, 0xbe, 0xd5, 0xc8, 0xbc, 0x28, 0xf8, 0x7b, 0x8b, 0x47, 0x3e, 0x03, 0x21, 0x33, 0xac, 0x61, 0x51, 0x08, 0x41, 0xa8, 0xaf, 0x97, 0xd8, 0x54, 0x97, 0x5c, 0x50, 0xdc, 0x71, 0xb1, 0xe9, 0x8b, 0x34, 0x40, 0xf1, 0x8b, 0x29, 0xbe, 0xa1, 0x43, 0xf2, 0xd7, 0x42, 0xe3, 0xca, 0x64, 0x93, 0x3c, 0x0e, 0xe4, 0x6f, 0xd6, 0xfd, 0x2a, 0xab, 0x3c, 0xbc, 0x53, 0x3e, 0x9b, 0x9c, 0xfb, 0xa4, 0x8b, 0xa0, 0xb1, 0x84, 0x2d, 0x3a, 0xa7, 0x90, 0x76, 0x56, 0xae, 0xac, 0xca, 0x99, 0x62, 0x53, 0xcd, 0xeb, 0xa2, 0x37, 0x76, 0x33, 0x44, 0x28, 0x65, 0x61, 0x06, 0x37, 0x76, 0xb2, 0xc7, 0x1b, 0x96, 0x2f, 0xf7, 0xd4, 0xd5, 0x78, 0x4c, 0x8e, 0xbd, 0xbf, 0xb6, 0xc7, 0xe2, 0x17, 0x96, 0xb4, 0xbb, 0xef, 0x2b, 0xe1, 0xb0, 0xd9, 0x4c, 0x19, 0x74, 0x91, 0x5d, 0x85, 0x95, 0x3a, 0x7c, 0x17, 0x52, 0xea, 0xfb, 0x2a, 0xac, 0x69, 0x13, 0x62, 0xc0, 0x36, 0xd6, 0xda, 0x53, 0xcb, 0x66, 0x7e, 0xaf, 0x22, 0x65, 0xb5, 0xae, 0x78, 0xac, 0x44, 0x14, 0x51, 0x40, 0x6f, 0x21, 0xbc, 0x81, 0x60, 0x67, 0xd8, 0xa5, 0xcd, 0xda, 0x97, 0x65, 0xd6, 0x26, 0xc2, 0xf6, 0x2c, 0x45, 0x3e, 0x3b, 0x78, 0x50, 0x8d, 0x39, 0xfb, 0x95, 0x97, 0xcb, 0x71, 0xeb, 0xab, 0x97, 0x3c, 0x42, 0xc1, 0x40, 0xbe, 0x7e, 0x02, 0xde, 0x07, 0x86, 0x8a, 0xab, 0xb0, 0x97, 0x6c, 0xfe, 0x06, 0xdf, 0xf6, 0x7e, 0x6c, 0x47, 0x37, 0x8f, 0xfa, 0x90, 0xbf, 0x11, 0x6a, 0xa1, 0xa6, 0x4a, 0x35, 0x1f, 0xd0, 0x20, 0xf9, 0x3f, 0x6e, 0x8c, 0x1e, 0xd8, 0xc8, 0x4b, 0xb9, 0xbd, 0x3b, 0xd7, 0xb0, 0x49, 0x7d, 0x95, 0x20, 0x3b, 0x29, 0x50, 0xfb, 0xc4, 0x77, 0xe6, 0xf6, 0xdf, 0x4a, 0x41, 0xa2, 0xe1, 0x71, 0x89, 0xd8, 0x51, 0x26, 0x98, 0x5b, 0xf9, 0xdb, 0xaf, 0xb9, 0x3d, 0x37, 0x67, 0x72, 0xac, 0x5b, 0xea, 0x5c, 0xd5, 0x69, 0x62, 0x46, 0x5c, 0x47, 0xb2, 0xdc, 0x4d, 0xa0, 0x65, 0xcb, 0xaf, 0x2c, 0xe3, 0x25, 0x5d, 0x32, 0xeb, 0x06, 0x11, 0x4b, 0x3d, 0x78, 0xc2, 0x68, 0x97, 0x94, 0x30, 0x16, 0xe3, 0xea, 0xbd, 0x01, 0xaf, 0x23, 0x7e, 0xb7, 0xdd, 0xe5, 0x92, 0xaf, 0x9c, 0xf7, 0xb2, 0x8a, 0x97, 0xa6, 0x0a, 0x98, 0x6c, 0x67, 0x47, 0x9e, 0x5f, 0xbd, 0xf2, 0xd7, 0x50, 0x5d, 0xfc, 0x38, 0xea, 0x91, 0x9a, 0xf8, 0x1e, 0xda, 0x53, 0x50, 0xcf, 0xd9, 0x56, 0x80, 0xcf, 0x6f, 0x12, 0x12, 0x0b, 0x24, 0x01, 0x62, 0x02, 0xc5, 0xc4, 0x5e, 0x7c, 0x51, 0x75, 0x8b, 0x78, 0x17, 0x39, 0x49, 0x66, 0x18, 0x14, 0x57, 0x96, 0xb2, 0x02, 0x99, 0xf1, 0x80, 0x43, 0x19, 0xe7, 0x7c, 0xf6, 0x4d, 0xa8, 0x66, 0xe9, 0x98, 0x97, 0x6a, 0xb0, 0x12, 0xfb, 0xfd, 0xf4, 0x8c, 0xf8, 0x08, 0x0e, 0xcf, 0xbf, 0x48, 0xd4, 0x25, 0x01, 0xf4, 0xb3, 0x1b, 0xa9, 0xa1, 0xff, 0x84, 0xca, 0x64, 0x86, 0xc1, 0xd6, 0x36, 0x6b, 0x40, 0x12, 0x9c, 0x32, 0x43, 0x46, 0x87, 0x17, 0xe3, 0xb9, 0x78, 0xa4, 0x54, 0x5c, 0xe9, 0x82, 0x6a, 0x46, 0xe9, 0x90, 0x5c, 0x60, 0x06, 0x32, 0xc9, 0x62, 0x6f, 0xec, 0xf8, 0xfe, 0x5a, 0x2f, 0x64, 0x5a, 0xa4, 0x72, 0x78, 0xc4, 0xb7, 0x85, 0x97, 0xa2, 0xb1, 0x22, 0x5f, 0xa7, 0xc3, 0xc6, 0x2f, 0x4d, 0xd6, 0xbe, 0xe6, 0x7f, 0x75, 0x85, 0xee, 0x95, 0xe7, 0x4d, 0x7a, 0x86, 0x9b, 0xdc, 0x0b, 0x59, 0xca, 0x99, 0x39, 0xdd, 0x57, 0xe7, 0xb0, 0x9a, 0xfa, 0xb1, 0x79, 0x07, 0x9d, 0x46, 0x7b, 0xfe, 0x06, 0x68, 0x41, 0x6c, 0xb7, 0x9f, 0xfd, 0x4d, 0x12, 0xd4, 0xcd, 0xd8, 0xc1, 0x1a, 0x3e, 0xf6, 0x55, 0xcf, 0x0f, 0xf9, 0x2d, 0xe4, 0x37, 0x8b, 0x9a, 0x79, 0x28, 0xe4, 0x40, 0xad, 0x56, 0x41, 0xc0, 0xb4, 0xf3, 0x91, 0x94, 0x2a, 0xfd, 0x71, 0x3a, 0xa6, 0x7b, 0x5a, 0x94, 0x93, 0x04, 0x19, 0x8f, 0x3b, 0x80, 0x80, 0x03, 0x25, 0x33, 0x5c, 0xda, 0xa1, 0xf7, 0xa7, 0x75, 0xa1, 0xc8, 0xfe, 0x4b, 0xca, 0x86, 0x55, 0xd3, 0xcb, 0xf7, 0xe9, 0xa5, 0xee, 0x0c, 0x76, 0xdc, 0xec, 0x65, 0xaa, 0xbe, 0x06, 0x16, 0xda, 0x9f, 0x51, 0xac, 0xf5, 0x02, 0x52, 0x6b, 0xb6, 0x02, 0xca, 0xda, 0x1d, 0xf0, 0xd3, 0x82, 0x1f, 0x3e, 0x2c, 0xf2, 0x9d, 0x9b, 0xd2, 0x06, 0x93, 0x60, 0xd0, 0x69, 0x92, 0x2b, 0x57, 0x59, 0x70, 0xc9, 0x11, 0xaa, 0x3e, 0x5a, 0xb3, 0x0e, 0x7a, 0xaf, 0xd2, 0x93, 0x86, 0xf7, 0xf7, 0x6d, 0x59, 0x9b, 0xf5, 0xf6, 0x75, 0x66, 0x7a, 0xf3, 0x18, 0xe9, 0xe5, 0x19, 0xb7, 0x1e, 0x57, 0xd0, 0xa8, 0x4b, 0x0d, 0x36, 0x1f, 0x29, 0xed, 0x67, 0x5b, 0x46, 0x5e, 0xfc, 0x21, 0xa8, 0x5d, 0xd1, 0x6a, 0xb3, 0xce, 0x0c, 0x59, 0x4d, 0x0f, 0x5a, 0x6f, 0x3f, 0xd3, 0x7c, 0x02, 0xde, 0x2e, 0x03, 0xeb, 0xec, 0xec, 0x57, 0x80, 0xb9, 0x27, 0xfe, 0xc2, 0x8d, 0x19, 0x1b, 0xd7, 0x4a, 0x2e, 0x35, 0xba, 0x4e, 0x5d, 0x3a, 0x31, 0x97, 0xb9, 0xc4, 0xff, 0x2a, 0x43, 0x9a, 0x5b, 0xb5, 0x03, 0x7a, 0xa2, 0x73, 0x57, 0x16, 0x49, 0x50, 0x8a, 0x5c, 0x15, 0x4e, 0xa8, 0xfa, 0x8e, 0x27, 0x91, 0x22, 0xb1, 0x34, 0x4d, 0x8a, 0xe5, 0x8d, 0x9f, 0xb8, 0x30, 0x72, 0xdd, 0x7c, 0xab, 0xe9, 0xfe, 0xbe, 0x33, 0xa9, 0xf5, 0x79, 0x62, 0x37, 0x3e, 0x08, 0xbd, 0x4f, 0xb6, 0xa1, 0x2f, 0x85, 0xaf, 0x1f, 0xb7, 0x2c, 0x44, 0x04, 0x5d, 0x77, 0xea, 0xbe, 0x6a, 0xde, 0x48, 0x29, 0xd8, 0xc3, 0x49, 0x56, 0x08, 0x56, 0x6f, 0x8b, 0xb3, 0xb6, 0x6a, 0x8a, 0x23, 0x59, 0xe9, 0x16, 0xa3, 0xad, 0xb0, 0xb4, 0x34, 0xff, 0xea, 0xaf, 0x81, 0x9d, 0xc1, 0x5e, 0x15, 0x37, 0x2d, 0xa9, 0xcc, 0x8b, 0x09, 0xca, 0x87, 0x42, 0x6c, 0x51, 0x24, 0x14, 0x36, 0x6b, 0xae, 0x33, 0xe9, 0x63, 0xd0, 0xe7, 0xbb, 0x69, 0x90, 0x75, 0xe9, 0x93, 0x3a, 0x46, 0x4d, 0x21, 0x99, 0x45, 0x33, 0x05, 0x6d, 0x89, 0x69, 0xa3, 0x1a, 0x34, 0x95, 0xd5, 0x9e, 0x9b, 0xcb, 0x32, 0xc5, 0xa7, 0x5f, 0x90, 0xa0, 0x7b, 0xf8, 0xc7, 0x33, 0x56, 0xe6, 0xb8, 0x6e, 0xbb, 0xb6, 0x8e, 0x5f, 0xd0, 0x03, 0x44, 0xa5, 0x05, 0x8f, 0x68, 0x28, 0xf5, 0x92, 0x1e, 0x07, 0x91, 0x51, 0x67, 0xd2, 0x7b, 0xf3, 0xa3, 0xfa, 0xb0, 0x90, 0x55, 0x85, 0x6a, 0x8c, 0x27, 0x06, 0x45, 0x23, 0x2e, 0xcd, 0xa0, 0x44, 0x6e, 0x5b, 0x46, 0xa3, 0xa1, 0x19, 0x4e, 0x0a, 0x34, 0x49, 0x3f, 0xef, 0x93, 0x3c, 0x78, 0x4c, 0xa6, 0xc5, 0xcf, 0xab, 0x9b, 0xef, 0x79, 0x80, 0xe7, 0xeb, 0x2a, 0xbc, 0x87, 0x4c, 0x7c, 0x9f, 0x8c, 0x77, 0x95, 0xce, 0xd6, 0x54, 0x04, 0xa5, 0x20, 0x4a, 0xed, 0xce, 0x3d, 0x6b, 0x66, 0x13, 0xa0, 0xeb, 0x20, 0x70, 0x22, 0xd7, 0x4a, 0x6d, 0x00, 0x03, 0xb2, 0xab, 0x23, 0x45, 0x2e, 0xbc, 0xa5, 0xe0, 0x3a, 0x37, 0x90, 0x43, 0xe2, 0x0c, 0xe9, 0xf4, 0xe3, 0x16, 0xed, 0xc7, 0x0d, 0xef, 0x9a, 0x53, 0xeb, 0x08, 0x71, 0xa6, 0xa6, 0xf9, 0x7b, 0x38, 0x27, 0x15, 0x8a, 0x1e, 0x7c, 0x42, 0xc1, 0x80, 0x7d, 0x08, 0x56, 0x4d, 0xaf, 0xe7, 0x97, 0x2d, 0x68, 0xee, 0x2b, 0xb8, 0x34, 0x89, 0x9b, 0xe5, 0x78, 0x9b, 0x11, 0xc5, 0x55, 0xcc, 0x5f, 0x71, 0xcf, 0x25, 0x42, 0x41, 0x2f, 0xda, 0xe8, 0x3e, 0xa5, 0x66, 0xb1, 0xda, 0x32, 0xdd, 0x33, 0xdf, 0xc5, 0x7e, 0x80, 0xa6, 0xa5, 0x88, 0xab, 0x89, 0x0e, 0x50, 0x88, 0x9a, 0x1f, 0x8f, 0xb4, 0x96, 0xf4, 0x00, 0xd5, 0x14, 0x0f, 0x2b, 0x23, 0x02, 0xfc, 0x7b, 0x28, 0x52, 0x34, 0x97, 0xc3, 0xf1, 0x43, 0xef, 0x73, 0xf9, 0x26, 0x95, 0xd2, 0x27, 0xf7, 0x4f, 0x60, 0x8f, 0xcc, 0xea, 0x82, 0x8e, 0xdc, 0xd1, 0xcb, 0x01, 0xe3, 0xde, 0x79, 0xb4, 0xc8, 0x6f, 0x43, 0x1e, 0x7d, 0xbd, 0x52, 0x4b, 0x28, 0x69, 0x8d, 0x19, 0x80, 0x58, 0x19, 0xa7, 0x79, 0xc1, 0x20, 0x0b, 0x23, 0x84, 0xd2, 0x43, 0xcf, 0xbe, 0xaa, 0x6e, 0x75, 0x9a, 0xf3, 0x3d, 0x52, 0x6a, 0x8a, 0xa4, 0xd5, 0xf6, 0xe5, 0xd5, 0xbc, 0x13, 0x54, 0x6e, 0x7b, 0x78, 0x87, 0xf1, 0xdd, 0xce, 0x51, 0x76, 0xed, 0x06, 0xab, 0x9c, 0x17, 0xef, 0xfc, 0xc5, 0x8b, 0x08, 0x98, 0x83, 0xe2, 0x93, 0x86, 0x4d, 0x04, 0xea, 0x86, 0x77, 0x49, 0x16, 0x52, 0x61, 0xde, 0x9e, 0x25, 0xee, 0x6b, 0x9d, 0x7a, 0x37, 0xf2, 0x17, 0x16, 0x81, 0xfb, 0x8d, 0x48, 0x6d, 0xee, 0xcf, 0x70, 0x6f, 0xc0, 0x12, 0xbe, 0x81, 0xd1, 0x42, 0x3c, 0x19, 0x15, 0x9a, 0x0f, 0x58, 0x73, 0x71, 0xfa, 0x84, 0x6a, 0x57, 0x23, 0xb8, 0xfa, 0x60, 0x1a, 0xda, 0xc2, 0xc0, 0x17, 0xce, 0x66, 0x98, 0x83, 0xe9, 0x33, 0x10, 0xba, 0xa9, 0x06, 0xa6, 0x10, 0xa3, 0x69, 0xc6, 0x12, 0xbc, 0x00, 0x9a, 0x0e, 0x9c, 0x24, 0x23, 0xd5, 0x60, 0xcd, 0x89, 0xbf, 0x8f, 0xb5, 0xaf, 0xf0, 0x50, 0xba, 0x0b, 0xda, 0xda, 0x84, 0xb5, 0x03, 0x2b, 0x69, 0xbd, 0x08, 0xfd, 0x8d, 0xc2, 0xe3, 0xf6, 0x4e, 0xc0, 0x69, 0x1f, 0xdf, 0x2a, 0x16, 0x97, 0x32, 0x39, 0x0d, 0x89, 0x1c, 0x83, 0x5b, 0x5b, 0xb4, 0xcf, 0x7c, 0x28, 0xfc, 0x28, 0x20, 0x71, 0xc3, 0x30, 0x2f, 0x0f, 0xc9, 0xb7, 0x0a, 0x6c, 0x25, 0x8c, 0x14, 0xf3, 0xe4, 0x93, 0x71, 0xc5, 0xf3, 0x18, 0x0d, 0xae, 0x3f, 0x63, 0xe0, 0x57, 0x1a, 0x8d, 0x71, 0xbd, 0xe1, 0x92, 0x99, 0xe1, 0xdb, 0xa6, 0x8a, 0xc2, 0x65, 0xcd, 0x0f, 0x88, 0x4c, 0xa6, 0x16, 0x02, 0x7b, 0x87, 0x6b, 0x52, 0xd6, 0xcf, 0xc6, 0xe7, 0x65, 0x78, 0x08, 0xac, 0xb5, 0xec, 0xc2, 0x7f, 0x7b, 0x1a, 0xf7, 0xe5, 0x7b, 0xc8, 0x23, 0xfc, 0xa8, 0x2b, 0x7b, 0xb1, 0x8d, 0xb5, 0x77, 0x32, 0xeb, 0x2e, 0x8e, 0xa7, 0xa4, 0x06, 0x40, 0x1d, 0xd7, 0xea, 0x5a, 0xc2, 0x4d, 0x95, 0x76, 0x58, 0x14, 0xe9, 0xc1, 0xe4, 0x69, 0x3e, 0x01, 0xa6, 0xdc, 0xfa, 0xd6, 0x4e, 0xae, 0x61, 0x3f, 0x6d, 0x7e, 0xaf, 0x61, 0x2a, 0x24, 0x64, 0x84, 0x36, 0xde, 0xe0, 0x5f, 0x02, 0xaa, 0x2f, 0x95, 0x2f, 0xf2, 0x26, 0x7f, 0x46, 0x6e, 0xaf, 0x2c, 0xa9, 0x47, 0x61, 0xa6, 0xc9, 0x78, 0x54, 0x77, 0x9a, 0x7a, 0x33, 0x6c, 0x44, 0x20, 0x92, 0x99, 0x1c, 0xc0, 0x82, 0x9d, 0xd2, 0x93, 0x63, 0x28, 0xeb, 0x5e, 0xfa, 0xba, 0x72, 0x52, 0xc4, 0xad, 0xeb, 0x31, 0x89, 0x75, 0x89, 0xb3, 0x33, 0x27, 0xa1, 0x28, 0xe1, 0x38, 0x5d, 0x5e, 0x38, 0x87, 0xb5, 0xc5, 0xf9, 0x9e, 0x9b, 0xd1, 0xd9, 0x35, 0x76, 0xa0, 0x8d, 0xf8, 0xd2, 0xdd, 0x24, 0x8b, 0x56, 0xe4, 0x99, 0xca, 0xf6, 0x27, 0xa9, 0x55, 0x6a, 0xd0, 0xe2, 0x4c, 0xde, 0xa8, 0xfd, 0x57, 0xeb, 0x37, 0x6d, 0xea, 0xc6, 0x2d, 0x38, 0xc7, 0xb7, 0x00, 0x06, 0xc4, 0xcd, 0xd7, 0x77, 0xce, 0xd1, 0xa7, 0xba, 0x2e, 0x78, 0x9b, 0x5c, 0x0b, 0xdc, 0xba, 0x5d, 0x30, 0x2d, 0xc4, 0x89, 0x10, 0xa4, 0x5c, 0x05, 0x07, 0xb9, 0x6c, 0x29, 0xe3, 0x96, 0xc6, 0x8d, 0xa3, 0xcb, 0x07, 0x67, 0x7f, 0x43, 0xc1, 0x14, 0x28, 0x77, 0xd9, 0xf4, 0x50, 0xe1, 0x2d, 0x7b, 0x6d, 0xb4, 0x7a, 0x85, 0xba, 0xca, 0x7e, 0xea, 0x7f, 0xde, 0x59, 0x53, 0x93, 0xfb, 0x39, 0x4c, 0x1f, 0x34, 0x36, 0x9a, 0xa4, 0x96, 0x7b, 0xce, 0x40, 0x5b, 0xa7, 0x1a, 0x2d, 0x60, 0x73, 0x64, 0x8a, 0xda, 0x94, 0x99, 0x5e, 0x44, 0xe3, 0x44, 0xda, 0x9c, 0xbb, 0x5f, 0xde, 0xce, 0xa2, 0x68, 0xbf, 0x71, 0x2c, 0xb8, 0x48, 0xb1, 0x1d, 0x11, 0xfe, 0x8c, 0xce, 0x76, 0xa8, 0x42, 0xd2, 0x3f, 0x0f, 0x06, 0xd8, 0x6c, 0x03, 0xfa, 0xd3, 0x3a, 0x9e, 0x5a, 0x59, 0xf4, 0xcd, 0xf7, 0x49, 0x0c, 0x0b, 0xe8, 0xb1, 0x6a, 0x70, 0x7c, 0xef, 0x04, 0xeb, 0x73, 0x16, 0xaf, 0xcc, 0x6d, 0x93, 0x34, 0x85, 0xa2, 0x10, 0xa7, 0xb1, 0xd4, 0x98, 0xf4, 0x55, 0x82, 0xfc, 0xbb, 0x66, 0x5f, 0x76, 0x5e, 0x8c, 0x02, 0x8d, 0x58, 0x26, 0xdf, 0x38, 0xd0, 0x8e, 0x76, 0x46, 0x6d, 0x9e, 0xca, 0xfd, 0x6d, 0x73, 0x15, 0x02, 0xf1, 0x70, 0xba, 0x79, 0x9b, 0x86, 0x7b, 0x6c, 0x5b, 0xb3, 0xec, 0x71, 0x86, 0xc9, 0x27, 0x87, 0x29, 0x71, 0xc2, 0x42, 0x9c, 0x6f, 0xfe, 0x28, 0x5a, 0x28, 0x41, 0x5a, 0x0f, 0x61, 0xc7, 0x77, 0xf3, 0x49, 0x94, 0xbd, 0x57, 0xba, 0xad, 0x71, 0x7d, 0xbc, 0x87, 0x81, 0xad, 0x4b, 0xc0, 0x69, 0x85, 0x5a, 0x0d, 0x53, 0x91, 0x17, 0x74, 0x82, 0x1c, 0x71, 0xbb, 0xf0, 0x45, 0xd7, 0x20, 0x36, 0x55, 0x43, 0x4a, 0xad, 0x4f, 0x78, 0x80, 0xd3, 0xc9, 0x88, 0x19, 0xf0, 0xfb, 0x98, 0x33, 0xf9, 0x16, 0xe7, 0xa8, 0xb4, 0xd7, 0x0d, 0x3e, 0x1d, 0x5b, 0x81, 0x1e, 0x09, 0x35, 0x5e, 0x88, 0x09, 0xbe, 0x67, 0xc4, 0x91, 0xac, 0x48, 0x5c, 0x59, 0xe6, 0x1f, 0x88, 0x04, 0x97, 0x3a, 0xea, 0x00, 0x81, 0x22, 0x7b, 0xad, 0x95, 0xd9, 0xc6, 0xc1, 0xc0, 0x61, 0x54, 0xeb, 0x07, 0x7d, 0x67, 0xb6, 0xd6, 0xbc, 0xeb, 0xb1, 0x95, 0xb2, 0xa9, 0xcd, 0x7d, 0x89, 0xbe, 0x06, 0xaa, 0xb9, 0x4b, 0x45, 0x71, 0x13, 0x6f, 0x85, 0xf3, 0x04, 0x72, 0x35, 0xf2, 0x18, 0x43, 0xde, 0xe4, 0xbd, 0x25, 0x06, 0x46, 0x4a, 0xa5, 0x54, 0x33, 0x3f, 0xcf, 0xf5, 0x35, 0xce, 0xa1, 0x3d, 0x5b, 0x9b, 0xc0, 0x92, 0x8c, 0xc1, 0x6a, 0x86, 0x1a, 0x15, 0xac, 0x43, 0x9a, 0xae, 0xd5, 0x2c, 0xf4, 0xa5, 0x2a, 0xc1, 0xb6, 0x19, 0xdb, 0xc3, 0xae, 0x76, 0x36, 0x99, 0xb7, 0xf7, 0x1b, 0xf3, 0xd3, 0x6a, 0xb0, 0xad, 0x7a, 0x34, 0x55, 0xf6, 0x32, 0x94, 0xdb, 0xb1, 0x60, 0x2c, 0xf0, 0x1b, 0x5e, 0xbd, 0xde, 0xaf, 0xcd, 0x32, 0x76, 0x47, 0x2d, 0xe0, 0x46, 0x83, 0xab, 0x0c, 0x13, 0x6e, 0x39, 0xad, 0x83, 0x5f, 0xe4, 0x74, 0x19, 0x1e, 0x62, 0x0a, 0x66, 0x48, 0xeb, 0x99, 0x7e, 0xf5, 0x4b, 0x8d, 0xaa, 0x97, 0x34, 0x9c, 0x5c, 0x26, 0xd8, 0x03, 0x68, 0x7a, 0xb7, 0x13, 0x70, 0xf8, 0xb6, 0xed, 0xa0, 0x70, 0x72, 0x8a, 0x9c, 0x46, 0xd3, 0xfe, 0xb7, 0xd0, 0xe4, 0xfd, 0x66, 0x00, 0xe2, 0x9e, 0xf4, 0x43, 0x93, 0x5f, 0x77, 0xa8, 0xd8, 0x69, 0x02, 0x45, 0x86, 0x16, 0x1c, 0xd7, 0x72, 0xb1, 0x71, 0xa8, 0xcb, 0x7d, 0xc8, 0xb6, 0xad, 0xf8, 0x35, 0x11, 0xf2, 0x60, 0x90, 0x85, 0x4c, 0x77, 0x25, 0x79, 0x91, 0x84, 0xad, 0x17, 0x55, 0x9a, 0x7e, 0xad, 0xbe, 0x1c, 0xfe, 0x53, 0x94, 0x81, 0x5d, 0xcf, 0x98, 0x55, 0x84, 0xb5, 0x17, 0x80, 0x48, 0xd3, 0xbe, 0xcb, 0xe4, 0xcb, 0xb0, 0xa0, 0xa6, 0x02, 0xd6, 0x11, 0xe8, 0xb9, 0x76, 0x1d, 0x42, 0x7a, 0x08, 0x2e, 0xfe, 0xb6, 0x45, 0xe5, 0xcc, 0xac, 0x80, 0x1a, 0xb7, 0x8c, 0x39, 0x1f, 0x58, 0xdd, 0xf0, 0x45, 0x4a, 0x1c, 0x37, 0xa2, 0xde, 0xa6, 0x0b, 0x11, 0x0f, 0xd8, 0x64, 0x79, 0xb8, 0x74, 0x0b, 0x53, 0x04, 0x46, 0xac, 0x66, 0x26, 0x08, 0x2c, 0xd5, 0x4b, 0x84, 0x3c, 0x5c, 0xcd, 0xf8, 0x2f, 0xd7, 0xaa, 0xbe, 0x08, 0x04, 0x34, 0x2c, 0xd8, 0x89, 0x0a, 0xba, 0x47, 0x39, 0x46, 0x62, 0x70, 0x93, 0xf8, 0x4d, 0xf2, 0x8b, 0xd4, 0xab, 0x43, 0x8e, 0x27, 0xe3, 0x48, 0xc0, 0x10, 0xec, 0x23, 0x88, 0xec, 0xfa, 0x4d, 0x4e, 0x12, 0x5e, 0xe4, 0x83, 0xc1, 0xa7, 0x46, 0xe2, 0x56, 0x0e, 0xde, 0xf6, 0xc2, 0x11, 0x3e, 0xdd, 0x3c, 0x5d, 0x6e, 0x4b, 0x33, 0xf1, 0x84, 0xd2, 0x87, 0x81, 0x75, 0x60, 0xf8, 0x18, 0x2b, 0x09, 0xdf, 0x02, 0xd8, 0x06, 0x1c, 0xe9, 0x89, 0xfe, 0x4f, 0x3e, 0xfe, 0x85, 0x4b, 0xdb, 0xb9, 0xe3, 0xc7, 0xe6, 0x55, 0x16, 0x57, 0xf8, 0x19, 0x1a, 0x9b, 0x7e, 0xcd, 0x67, 0xb6, 0x60, 0xcc, 0xbc, 0x02, 0xe1, 0x5b, 0x1b, 0x03, 0xc7, 0x39, 0x14, 0x99, 0xbb, 0x78, 0x47, 0x79, 0xf2, 0x8a, 0x25, 0xdd, 0x0d, 0x9f, 0xf6, 0x7b, 0x3e, 0x2f, 0x20, 0xb4, 0xad, 0xd2, 0xa6, 0x0f, 0x1a, 0x58, 0xef, 0xe5, 0xc3, 0x16, 0xc9, 0x5e, 0x88, 0x7e, 0xad, 0x9c, 0x4d, 0xf3, 0x45, 0x35, 0xa0, 0xdb, 0x2b, 0xe7, 0x9b, 0xf5, 0xf4, 0x87, 0x0c, 0xec, 0x6d, 0x3b, 0xd4, 0x2d, 0x24, 0xe9, 0x8d, 0xf6, 0x2a, 0xef, 0x70, 0xb0, 0x18, 0x15, 0x75, 0x7f, 0x50, 0xbf, 0xbb, 0x17, 0x85, 0x68, 0x2b, 0xd1, 0x7e, 0x4b, 0x59, 0xfe, 0x16, 0x63, 0xaa, 0x7b, 0x88, 0x96, 0xbc, 0x86, 0xe9, 0x2e, 0x02, 0xcf, 0xf6, 0x88, 0xaf, 0xd2, 0x10, 0x10, 0xd6, 0x65, 0x85, 0x6d, 0xcf, 0x8d, 0x11, 0xf8, 0xdc, 0x96, 0xa5, 0x73, 0x0c, 0x63, 0x66, 0xf8, 0x60, 0x02, 0xf9, 0x2f, 0x2d, 0x83, 0xfe, 0xc4, 0xc1, 0x0b, 0xda, 0x18, 0x49, 0x24, 0xba, 0x37, 0xf3, 0x57, 0xd5, 0x0b, 0x4f, 0xfd, 0xf1, 0xcf, 0xfb, 0x52, 0x28, 0xc5, 0x7f, 0xcb, 0xec, 0x2c, 0x76, 0xaa, 0x49, 0x6d, 0xef, 0xcf, 0x6a, 0x95, 0x12, 0xd1, 0x5f, 0x07, 0x07, 0x4d, 0x1d, 0x73, 0x13, 0x7e, 0xc6, 0x02, 0x04, 0x0e, 0x2b, 0xd3, 0xd0, 0x2c, 0x90, 0xab, 0x79, 0xdf, 0xaf, 0xe8, 0x33, 0x9a, 0xff, 0xb7, 0xc9, 0x10, 0x35, 0x87, 0x3d, 0x49, 0x0b, 0xbe, 0xaf, 0xf6, 0x41, 0xaa, 0x7f, 0x02, 0xe2, 0xba, 0xb6, 0x69, 0xc9, 0xee, 0xa2, 0x4d, 0x63, 0x8c, 0xc1, 0x47, 0xb7, 0x15, 0xe1, 0xfb, 0xa3, 0x77, 0x84, 0xef, 0x68, 0x84, 0x89, 0x9d, 0x69, 0xa3, 0x09, 0xc6, 0x2f, 0xc5, 0x80, 0x0a, 0xb1, 0x9b, 0x2d, 0xb6, 0xd2, 0x07, 0xbb, 0xdd, 0x2c, 0xd0, 0x20, 0xaa, 0x0c, 0x99, 0xc6, 0xf4, 0xbd, 0x14, 0xe8, 0x13, 0x0a, 0x73, 0x40, 0xf2, 0xfe, 0x1f, 0xdf, 0x66, 0xee, 0xad, 0x5c, 0xbe, 0xba, 0x0e, 0x30, 0x9c, 0x4f, 0x05, 0x61, 0x03, 0x70, 0xde, 0x5e, 0xb0, 0xb7, 0x5e, 0x2a, 0xae, 0xd6, 0xf6, 0xbd, 0x25, 0x23, 0x3b, 0xa8, 0x73, 0x54, 0x9b, 0xf7, 0x7d, 0x86, 0x48, 0x5b, 0x47, 0x85, 0x79, 0x89, 0xc3, 0x47, 0xd2, 0xdd, 0xe7, 0xb9, 0x20, 0x43, 0x02, 0xbf, 0x4a, 0x57, 0x50, 0x75, 0x85, 0xcb, 0xcc, 0xbc, 0xc6, 0x09, 0x45, 0xf2, 0x7d, 0x1a, 0xb4, 0x00, 0x80, 0xc7, 0xcd, 0x9a, 0x45, 0xfe, 0xd4, 0xc2, 0x55, 0x77, 0xb2, 0x8e, 0xfd, 0x96, 0x48, 0x2c, 0x47, 0x94, 0x03, 0x23, 0x29, 0xda, 0xb1, 0xdb, 0xfb, 0xad, 0x93, 0x60, 0x2e, 0x10, 0xb3, 0x63, 0x3c, 0xe6, 0x77, 0x82, 0xdb, 0x58, 0x77, 0xc9, 0x76, 0x76, 0x8c, 0x78, 0xdd, 0x21, 0x29, 0x06, 0x3c, 0x28, 0xef, 0x67, 0x4a, 0xb1, 0x7b, 0x8b, 0xc2, 0xdb, 0x83, 0x27, 0x17, 0xa1, 0x21, 0xb7, 0x64, 0x02, 0x6e, 0xc4, 0xa1, 0x5e, 0x53, 0x62, 0x1d, 0x24, 0x9c, 0xfe, 0x28, 0xaa, 0x4e, 0x56, 0x10, 0x5c, 0x3b, 0xc9, 0x50, 0x19, 0xd3, 0xd1, 0x03, 0xda, 0x3d, 0xce, 0x9f, 0x95, 0xa7, 0x05, 0xdf, 0x61, 0xda, 0xe8, 0x01, 0xda, 0x11, 0x98, 0x32, 0xc7, 0x0b, 0xa8, 0x47, 0xfa, 0x5f, 0x24, 0xad, 0x78, 0x10, 0xd1, 0xa3, 0xda, 0x61, 0xb7, 0xa6, 0xf3, 0xea, 0xdd, 0x2d, 0xb3, 0xec, 0x54, 0x97, 0x4b, 0xe2, 0x76, 0x62, 0x92, 0x58, 0x70, 0x9d, 0xa8, 0x00, 0xfe, 0xa0, 0xd9, 0x03, 0x76, 0xfa, 0xc4, 0x95, 0x08, 0xab, 0xbc, 0xcc, 0x44, 0x94, 0x6e, 0xb2, 0xdc, 0x2b, 0xc4, 0x99, 0xac, 0x73, 0x0a, 0xae, 0xf7, 0x2c, 0x50, 0xd1, 0xf4, 0x46, 0x0f, 0xa4, 0x89, 0x9c, 0x0f, 0xe2, 0x56, 0xdf, 0x87, 0xf3, 0xf5, 0xd0, 0x87, 0xbd, 0x80, 0xb3, 0x93, 0xbc, 0x54, 0x00, 0x90, 0x55, 0x15, 0x5b, 0xe5, 0x67, 0xf3, 0xc6, 0xda, 0x24, 0x2b, 0x16, 0x43, 0x1f, 0xd0, 0xa3, 0x63, 0xa5, 0xcb, 0x44, 0x0b, 0x51, 0x21, 0x7b, 0x02, 0xdb, 0x74, 0xec, 0xa9, 0x31, 0xcd, 0x14, 0xdf, 0xc9, 0x98, 0x37, 0x23, 0x35, 0xf0, 0x9a, 0xf8, 0xf8, 0x1d, 0xf3, 0x8e, 0x98, 0x5b, 0x1e, 0x9e, 0xf4, 0xdd, 0x11, 0x96, 0xd8, 0x12, 0x12, 0xf6, 0xcf, 0x27, 0x28, 0xfa, 0x38, 0xcd, 0xcf, 0x79, 0x9c, 0x3c, 0xef, 0x0d, 0x3f, 0x78, 0x0f, 0x74, 0xf5, 0xd3, 0xc6, 0x36, 0x37, 0xb3, 0x73, 0x88, 0x76, 0x95, 0x2e, 0x71, 0xaf, 0x52, 0xff, 0x2b, 0x40, 0xa1, 0x4d, 0xcc, 0xfa, 0xde, 0x99, 0x26, 0x77, 0x0a, 0x6c, 0xeb, 0xae, 0x12, 0x8d, 0x15, 0xc4, 0x54, 0x78, 0x84, 0x26, 0x5f, 0x0c, 0xe9, 0xd4, 0xfa, 0x84, 0xe4, 0x00, 0x69, 0xa8, 0x69, 0xd7, 0xeb, 0x44, 0x68, 0x9f, 0x87, 0xda, 0xad, 0x02, 0x08, 0x94, 0x05, 0xa9, 0x47, 0x7c, 0xa2, 0x0d, 0xa8, 0xef, 0xc0, 0x8a, 0xe7, 0x4f, 0x89, 0xb6, 0x15, 0xf9, 0x36, 0xf0, 0xdd, 0x77, 0x78, 0x3c, 0x0c, 0xf6, 0x16, 0x4e, 0x51, 0xfa, 0xd7, 0xe4, 0x40, 0x50, 0xa2, 0x59, 0x9d, 0x45, 0xe4, 0x77, 0xd8, 0x15, 0x32, 0x8e, 0xd4, 0xa6, 0x30, 0xc2, 0xec, 0x76, 0xb1, 0xa9, 0x38, 0xd2, 0x1f, 0x16, 0x0c, 0x4a, 0x1e, 0x2f, 0xc2, 0x61, 0x6c, 0xc6, 0xba, 0x89, 0x0b, 0xe6, 0x9e, 0x4e, 0xa3, 0xab, 0xeb, 0xd1, 0x22, 0x57, 0xad, 0x78, 0xa5, 0xa3, 0x8a, 0xe4, 0x9b, 0x53, 0x01, 0x23, 0x27, 0x0d, 0xf4, 0x27, 0xc7, 0x6b, 0x64, 0x77, 0x34, 0x4f, 0x7d, 0x25, 0x89, 0x77, 0xd2, 0x00, 0xa6, 0x51, 0xe9, 0x0a, 0xd7, 0x10, 0xfa, 0x2d, 0xb1, 0xff, 0xf4, 0x29, 0x3d, 0x15, 0xc1, 0xd1, 0x59, 0xca, 0xcb, 0x77, 0x5a, 0x2a, 0xbf, 0xa5, 0xf6, 0x28, 0x91, 0x0e, 0x62, 0x34, 0xc0, 0xc3, 0xb7, 0x10, 0xdb, 0xaa, 0x9a, 0xdf, 0x44, 0x2d, 0x1c, 0x7f, 0x34, 0x2f, 0xdf, 0x18, 0xff, 0x44, 0x7b, 0xf5, 0x99, 0x21, 0x1f, 0x93, 0x59, 0x51, 0x7c, 0xf8, 0xfe, 0x2a, 0xde, 0x46, 0xf0, 0x00, 0x9c, 0x90, 0xc8, 0x98, 0xb3, 0xec, 0x11, 0xdf, 0xae, 0xca, 0x50, 0xdc, 0xc9, 0x84, 0x43, 0xe4, 0x55, 0x36, 0x67, 0x0d, 0x5e, 0xcf, 0xbc, 0xe5, 0x8c, 0x68, 0xcc, 0x63, 0x47, 0xd5, 0xea, 0x1d, 0x1e, 0x7a, 0xb8, 0xbc, 0x6a, 0x60, 0xec, 0xad, 0x2e, 0x89, 0x53, 0x1a, 0x42, 0x80, 0x16, 0x19, 0xb1, 0x33, 0x3c, 0x23, 0x5f, 0x05, 0x70, 0xc7, 0xef, 0x20, 0x04, 0x9f, 0xe3, 0x08, 0x37, 0x84, 0x05, 0x76, 0xb3, 0xfe, 0x06, 0x63, 0x5a, 0xfe, 0x66, 0x63, 0x42, 0xd0, 0x93, 0x34, 0xfe, 0x4b, 0x55, 0x97, 0x20, 0x4b, 0x69, 0x5e, 0xfb, 0x61, 0x6d, 0xc7, 0xae, 0xc8, 0xfc, 0x08, 0x5e, 0x9b, 0x19, 0x2b, 0xc2, 0x46, 0xd1, 0x1c, 0xe5, 0x3b, 0x1c, 0x01, 0x27, 0xe6, 0x05, 0xc9, 0x85, 0xe2, 0x0a, 0x08, 0x1b, 0x6d, 0xc6, 0x02, 0xe7, 0x19, 0xcd, 0x05, 0xd0, 0xc5, 0xd8, 0xfd, 0xe7, 0xcc, 0x22, 0x42, 0xec, 0x7c, 0x11, 0xb4, 0x14, 0xca, 0x19, 0x0a, 0x09, 0x43, 0xde, 0x67, 0x33, 0x46, 0x98, 0x2e, 0x36, 0x71, 0xbc, 0x18, 0xbc, 0x59, 0xd9, 0x84, 0x74, 0x7e, 0xbf, 0x0e, 0x5b, 0x7e, 0xe7, 0x62, 0x3a, 0x88, 0x0f, 0x53, 0x6f, 0x14, 0x25, 0x27, 0xf1, 0xd1, 0x66, 0x35, 0x8f, 0xdf, 0xc7, 0xb3, 0x78, 0x3f, 0x94, 0xc9, 0x00, 0x88, 0x57, 0xe9, 0xa1, 0xdb, 0xfb, 0x63, 0x40, 0x18, 0x31, 0x34, 0xb2, 0x52, 0x13, 0x1f, 0x7f, 0x81, 0x07, 0x00, 0xe6, 0x77, 0xe7, 0x5c, 0x21, 0x16, 0x5f, 0x3c, 0xea, 0xbf, 0x96, 0x3c, 0x3d, 0x0d, 0x10, 0xdf, 0x60, 0xc4, 0xd3, 0x25, 0x21, 0x04, 0xc8, 0x60, 0x5f, 0xc3, 0x65, 0x43, 0xcb, 0x7a, 0x89, 0x3c, 0xf0, 0x1d, 0xa7, 0x04, 0x71, 0x51, 0x27, 0x74, 0x92, 0xda, 0x09, 0x9a, 0xfa, 0x52, 0xcc, 0x0c, 0xb8, 0x21, 0x8e, 0x7c, 0x83, 0xa9, 0x74, 0x8d, 0x46, 0xc1, 0x4c, 0xe5, 0xdc, 0x65, 0x71, 0x83, 0x17, 0xab, 0xef, 0x53, 0x08, 0xf9, 0xe8, 0x00, 0x7a, 0x76, 0x37, 0x0a, 0xc0, 0xbe, 0x52, 0x18, 0xb1, 0xda, 0x75, 0x8f, 0xf0, 0x6f, 0xfd, 0x63, 0x71, 0x35, 0x12, 0x2e, 0x38, 0xab, 0x88, 0x7f, 0x64, 0x0a, 0x07, 0x74, 0x6d, 0x77, 0x6a, 0x8b, 0xaa, 0x7c, 0x66, 0xb5, 0x16, 0xb9, 0x6c, 0xac, 0x53, 0xd7, 0xd0, 0x87, 0xef, 0xbe, 0x2a, 0x8c, 0xe7, 0x08, 0xfd, 0x45, 0x69, 0xb5, 0x96, 0xd6, 0xde, 0x20, 0x37, 0x8d, 0x28, 0x31, 0x75, 0xbb, 0x28, 0xd5, 0xdf, 0xc2, 0x84, 0xab, 0xe0, 0x70, 0xa7, 0x01, 0xe7, 0x8b, 0x09, 0xfe, 0xc4, 0xad, 0xb0, 0x20, 0x56, 0x52 ],
+const [ 0x9c, 0xef, 0x28, 0x54, 0xf7, 0x87, 0x9c, 0x83, 0x0b, 0xa8, 0x61, 0xf6, 0xa9, 0x2e, 0xf7, 0x02, 0x5f, 0xb9, 0x8a, 0xec, 0xf1, 0x52, 0x0f, 0xac, 0x07, 0x51, 0x90, 0xf0, 0x24, 0x7d, 0xc4, 0x64, 0xd7, 0x76, 0xe3, 0x31, 0x35, 0x50, 0xb8, 0xc3, 0x86, 0x81, 0xf8, 0xd0, 0x3f, 0xfd, 0xd2, 0x96, 0x31, 0x9f, 0xc7, 0x64, 0xff, 0xcb, 0xbc, 0x5b, 0xd5, 0x52, 0x4e, 0x76, 0x57, 0x95, 0x65, 0xc8, 0xd8, 0xee, 0x0c, 0x05, 0xcd, 0x4b, 0x80, 0x44, 0x81, 0x1c, 0x86, 0x03, 0x0a, 0x70, 0x02, 0x6c, 0x7b, 0x5a, 0xc6, 0xd7, 0x5b, 0x9a, 0xa8, 0x8f, 0x56, 0x79, 0xd7, 0xd9, 0x33, 0xf5, 0x6f, 0x32, 0x06, 0x1e, 0x4a, 0xd9, 0xa7, 0xc0, 0x1a, 0x8d, 0x62, 0x42, 0xb4, 0x98, 0xf0, 0xce, 0xaf, 0x0c, 0xa6, 0xb3, 0x2e, 0x4d, 0xed, 0x07, 0xfa, 0xcf, 0xf2, 0x90, 0xd4, 0x21, 0x9f, 0xe5, 0x09, 0x2b, 0xc9, 0xd0, 0x46, 0xb4, 0xab, 0xf7, 0xae, 0x27, 0x93, 0xbb, 0x2a, 0x96, 0xdb, 0x61, 0x00, 0xff, 0x1b, 0x6f, 0xa8, 0xce, 0x9d, 0x59, 0xdb, 0xa4, 0x11, 0x5d, 0xec, 0x57, 0x82, 0xac, 0x5b, 0x3a, 0x89, 0xca, 0xa8, 0x9e, 0xc1, 0x37, 0x65, 0x98, 0x7a, 0x4f, 0x8f, 0x05, 0xb2, 0x6f, 0x1e, 0xcc, 0x41, 0x59, 0xdb, 0x63, 0x53, 0xda, 0x72, 0x95, 0x1b, 0xaa, 0xc8, 0x82, 0xc6, 0x93, 0x8e, 0xe7, 0xae, 0xd5, 0x17, 0x9f, 0xd1, 0xca, 0x66, 0x6a, 0x81, 0xc6, 0x8c, 0xee, 0x5d, 0x41, 0x31, 0xfb, 0x7f, 0x38, 0x70, 0x13, 0xf7, 0xd0, 0xe8, 0x2a, 0x78, 0x3d, 0x0f, 0xaa, 0x52, 0xe2, 0xca, 0xba, 0xa0, 0xb9, 0x3b, 0xc0, 0xc3, 0xf6, 0xda, 0x24, 0x0f, 0xe7, 0xc8, 0x58, 0xc3, 0x1f, 0x60, 0x15, 0x3f, 0xd3, 0x0e, 0xe7, 0x71, 0x84, 0x64, 0xeb, 0x91, 0xde, 0x6a, 0xd7, 0x0e, 0xe1, 0x36, 0x3c, 0xc8, 0x3e, 0xbd, 0x08, 0x7f, 0x04, 0xe9, 0x4f, 0x8b, 0x7b, 0xec, 0x4b, 0xce, 0x50, 0xd3, 0xa1, 0xe8, 0xf3, 0x5e, 0xe5, 0xa9, 0x3e, 0x0f, 0x61, 0xcc, 0x57, 0x81, 0x12, 0xe2, 0xd7, 0xfb, 0xf4, 0x8c, 0x2c, 0x45, 0x80, 0xed, 0x3c, 0xba, 0x72, 0x5f, 0x4a, 0x9f, 0xcf, 0x65, 0x1e, 0xb3, 0x27, 0xe2, 0x60, 0x07, 0x17, 0x88, 0x46, 0x10, 0x13, 0x92, 0x6f, 0xfb, 0x62, 0xb6, 0x0e, 0x40, 0x6a, 0x55, 0x4a, 0x7a, 0x2e, 0xf6, 0xe5, 0x76, 0x15, 0xf2, 0x1c, 0x8a, 0xed, 0x70, 0xcf, 0x28, 0x2f, 0x94, 0xe2, 0xb2, 0x85, 0xf4, 0xe3, 0x90, 0x89, 0x4c, 0xed, 0x81, 0xd0, 0x72, 0xcc, 0x2e, 0x27, 0x8c, 0x61, 0x05, 0x1c, 0x80, 0x48, 0x44, 0xc1, 0xac, 0xb9, 0x54, 0xac, 0xd8, 0xac, 0x59, 0x42, 0x68, 0x41, 0x07, 0x36, 0xd6, 0x5e, 0xb7, 0x4c, 0x60, 0x9a, 0xba, 0x63, 0xfe, 0x5a, 0xed, 0xb2, 0x97, 0x39, 0x8d, 0x52, 0x74, 0xae, 0x4d, 0xfc, 0xf5, 0xe9, 0xa6, 0x15, 0x83, 0xfd, 0x6f, 0xe7, 0xc5, 0x44, 0xad, 0x32, 0x17, 0xff, 0xac, 0xe3, 0x38, 0x3e, 0x4f, 0x23, 0x42, 0x00, 0xa4, 0x93, 0xe0, 0x9a, 0xbb, 0xd6, 0xbb, 0x5d, 0xb9, 0x51, 0x35, 0x73, 0x28, 0x2e, 0x5a, 0x0a, 0x91, 0xa7, 0x13, 0xb5, 0x4d, 0x81, 0x9d, 0x0e, 0x98, 0xd6, 0x3a, 0xa1, 0xe7, 0x18, 0x27, 0x05, 0x7c, 0x53, 0xcd, 0x4c, 0x37, 0xb2, 0x3b, 0x9e, 0xaf, 0x45, 0xd4, 0x20, 0x81, 0x01, 0x45, 0x1a, 0xe8, 0x09, 0xbb, 0x5a, 0x8e, 0x2c, 0x52, 0xd3, 0xa2, 0xae, 0xd0, 0x8a, 0x2b, 0x4b, 0x93, 0xb3, 0x9c, 0x79, 0xc8, 0x16, 0xa8, 0xee, 0xde, 0xb8, 0x57, 0x62, 0x3a, 0xb8, 0x5a, 0x96, 0x2d, 0x77, 0x9c, 0x95, 0x23, 0xfb, 0x19, 0x39, 0x1d, 0x96, 0xf3, 0xf2, 0x61, 0xc2, 0xc2, 0xc3, 0x6f, 0x50, 0x2c, 0x8d, 0x38, 0xc2, 0xb7, 0x90, 0x8b, 0xf5, 0xda, 0x2f, 0xd0, 0x03, 0x5a, 0xf3, 0xf8, 0x67, 0xd4, 0xd3, 0xb4, 0x62, 0x95, 0xb3, 0xe5, 0x9e, 0xb2, 0x2a, 0x54, 0x12, 0x56, 0x88, 0xa4, 0x25, 0x56, 0x18, 0x85, 0x16, 0x0b, 0xa2, 0x2a, 0x9b, 0x60, 0x34, 0xfc, 0xc8, 0x2a, 0x22, 0x90, 0x33, 0xb8, 0x4c, 0xd6, 0x56, 0xab, 0x9f, 0x94, 0x34, 0x08, 0xdf, 0x13, 0x40, 0x8c, 0xa3, 0x19, 0x7a, 0x40, 0xa1, 0x16, 0xdb, 0x4d, 0x2b, 0xa2, 0xf3, 0x10, 0xfa, 0x27, 0xd1, 0x71, 0x2b, 0xdb, 0x23, 0x71, 0x87, 0xf2, 0x9e, 0x03, 0x07, 0x11, 0xa0, 0x1d, 0x97, 0x05, 0x14, 0x0e, 0x1b, 0xb5, 0x97, 0x12, 0xb0, 0x55, 0xd8, 0x24, 0x34, 0xdd, 0x45, 0x13, 0x08, 0xba, 0xe4, 0xd8, 0x14, 0xc3, 0x7e, 0x27, 0x0c, 0x6e, 0x03, 0x44, 0xf2, 0x44, 0x2a, 0x18, 0xdd, 0x92, 0x58, 0x84, 0xf8, 0x62, 0xc3, 0xf5, 0xcd, 0xa9, 0xd7, 0x39, 0xc4, 0xc2, 0xd9, 0x91, 0xe6, 0x1b, 0xca, 0x07, 0xe7, 0x2f, 0x8e, 0x01, 0x64, 0xb4, 0x4d, 0x17, 0x69, 0x15, 0x1a, 0x22, 0x36, 0x22, 0xd2, 0x95, 0x43, 0x07, 0x47, 0x11, 0x81, 0x7a, 0x9e, 0x33, 0xe3, 0x39, 0xf6, 0xb1, 0x1d, 0xb4, 0x4b, 0xa5, 0xac, 0x06, 0x99, 0x28, 0x16, 0x2a, 0x44, 0x23, 0x73, 0x6c, 0xb7, 0x62, 0x2c, 0x1d, 0x4b, 0xea, 0x03, 0x8b, 0x6b, 0x8d, 0x53, 0x31, 0xf7, 0xbb, 0x99, 0x2a, 0xe5, 0x9b, 0x34, 0xec, 0x2e, 0x5a, 0x69, 0x32, 0xe8, 0xc4, 0xaa, 0x3a, 0xaf, 0x11, 0x18, 0x31, 0x4a, 0x01, 0x46, 0xec, 0x8c, 0x2b, 0x40, 0xd8, 0x77, 0x91, 0xcc, 0x34, 0xa8, 0x79, 0xef, 0x7d, 0xef, 0x78, 0xb3, 0x2a, 0x3d, 0xd0, 0x28, 0x9a, 0xc3, 0xfc, 0xa9, 0x4b, 0x58, 0x88, 0x60, 0x4c, 0x1b, 0x26, 0x0d, 0xf5, 0x5a, 0xff, 0x02, 0xd5, 0xb3, 0x47, 0x72, 0xec, 0x79, 0x14, 0xec, 0x1a, 0x5a, 0x70, 0x23, 0xd8, 0x3e, 0xac, 0xf0, 0x26, 0x71, 0xf8, 0x9a, 0xc4, 0x05, 0x31, 0x54, 0xa5, 0x72, 0xfa, 0x07, 0xa1, 0x80, 0x0e, 0x52, 0x6a, 0x67, 0xd5, 0xd0, 0xc1, 0x34, 0x35, 0x99, 0xea, 0x6e, 0xaa, 0x0b, 0x5d, 0xfa, 0x99, 0xca, 0xbe, 0x3c, 0xe1, 0x05, 0x0f, 0x7f, 0xb4, 0xfb, 0x25, 0x97, 0xa5, 0xbe, 0x58, 0xc4, 0x01, 0x37, 0x7f, 0xda, 0x63, 0x6b, 0x1c, 0x9f, 0x83, 0xfc, 0xd3, 0x75, 0x4f, 0xf3, 0x21, 0x39, 0x3d, 0xbc, 0x4a, 0x6a, 0xdf, 0x72, 0x93, 0x8e, 0xb8, 0x5e, 0xb2, 0xd1, 0x4e, 0xba, 0x83, 0xf0, 0x80, 0xba, 0xfc, 0x55, 0x1a, 0xcd, 0x63, 0x84, 0xa7, 0x20, 0xbe, 0xb5, 0x86, 0x63, 0x8c, 0xc2, 0x40, 0xd1, 0xb2, 0x44, 0x19, 0x6a, 0xb8, 0xf9, 0xe5, 0x83, 0x35, 0x6a, 0x1d, 0x81, 0x88, 0xca, 0x32, 0xe2, 0xc9, 0x20, 0x21, 0x7d, 0x00, 0xa9, 0x48, 0x0a, 0x94, 0x77, 0x78, 0xe4, 0x06, 0x5f, 0x4b, 0x0e, 0xde, 0x12, 0xb8, 0x74, 0xe6, 0x8a, 0xe4, 0x74, 0x97, 0xa8, 0x3b, 0x9d, 0xd1, 0x1b, 0xc0, 0xb7, 0xcf, 0x83, 0xa1, 0x03, 0x59, 0xd6, 0x0f, 0xc4, 0x3b, 0x03, 0x4c, 0xfd, 0xf7, 0xd6, 0x06, 0x7d, 0xb7, 0x1c, 0xe3, 0x19, 0x85, 0x07, 0x5d, 0x39, 0xbe, 0xd4, 0xd0, 0x96, 0xc4, 0xaa, 0xd1, 0x41, 0xf4, 0xc6, 0xc2, 0xe8, 0xd8, 0xd5, 0xa3, 0x55, 0x9d, 0xa1, 0x2b, 0x37, 0xc7, 0xf0, 0x18, 0x25, 0x23, 0xa9, 0xc3, 0xe0, 0xfd, 0x39, 0xf7, 0xd8, 0x94, 0x35, 0x03, 0xf2, 0xcb, 0x41, 0x0e, 0x89, 0x21, 0x30, 0xab, 0xb3, 0xe3, 0x6d, 0xae, 0xc5, 0xa1, 0x99, 0x3d, 0x19, 0xde, 0x75, 0x2a, 0x0e, 0x0b, 0x03, 0x80, 0x51, 0xb7, 0xe8, 0x5b, 0x5b, 0x00, 0x15, 0xfd, 0x3b, 0x4d, 0xa6, 0x1f, 0x96, 0x3f, 0x0a, 0x85, 0xec, 0xe4, 0x65, 0xd5, 0x1c, 0x2e, 0x32, 0xa9, 0x2b, 0xa4, 0x2d, 0xe3, 0x41, 0x58, 0x70, 0x41, 0xf4, 0x19, 0xdc, 0x31, 0xc9, 0xe9, 0xba, 0xe6, 0xf8, 0xb2, 0xa2, 0xab, 0x70, 0x34, 0x9c, 0x77, 0x1b, 0x42, 0x86, 0xc2, 0x63, 0x2e, 0xb6, 0x98, 0xf5, 0x82, 0xe0, 0xec, 0xc5, 0xf0, 0x39, 0x2e, 0x52, 0x8c, 0xdc, 0x20, 0x2b, 0x39, 0x6d, 0xe5, 0xb2, 0x61, 0xfd, 0x5a, 0x20, 0xea, 0x2e, 0xaa, 0xc9, 0x65, 0x98, 0x1d, 0xa2, 0x88, 0x6b, 0x31, 0x00, 0xde, 0x55, 0xec, 0xa2, 0xbd, 0xa6, 0x70, 0xf2, 0x79, 0xb2, 0xd0, 0x88, 0xd7, 0x76, 0x22, 0xf0, 0xc4, 0x7f, 0xd6, 0xad, 0x47, 0x08, 0x46, 0x7d, 0xb5, 0x63, 0x8d, 0xdf, 0x24, 0x9a, 0x9d, 0xd3, 0x21, 0x55, 0x8c, 0xe1, 0xa6, 0xfe, 0x2f, 0x5c, 0x46, 0x24, 0xea, 0xe8, 0xab, 0x1d, 0xc6, 0x3a, 0x42, 0xf0, 0xc4, 0x1f, 0x35, 0x72, 0x72, 0xc0, 0x9a, 0xae, 0xbb, 0x24, 0xea, 0x8a, 0x03, 0xf6, 0xb4, 0xa8, 0x74, 0x89, 0x92, 0x8b, 0x92, 0x19, 0x5d, 0xfb, 0x16, 0x54, 0x9d, 0xaa, 0xf9, 0x18, 0x43, 0x17, 0xcf, 0x7f, 0x9b, 0xb3, 0x56, 0x19, 0x7c, 0x43, 0x4f, 0x78, 0xc2, 0x85, 0x8c, 0xf2, 0xfd, 0x16, 0x4b, 0xa2, 0x6b, 0x93, 0xc2, 0xb0, 0x24, 0xfe, 0xfb, 0xd2, 0x95, 0x64, 0xe2, 0x13, 0x2f, 0xbd, 0x9d, 0xd4, 0x60, 0x14, 0x1b, 0x10, 0xc3, 0xe8, 0xf0, 0xe4, 0x94, 0xd1, 0x60, 0x4e, 0x66, 0x67, 0xb9, 0x35, 0x18, 0x5f, 0xe7, 0xa9, 0x05, 0xf7, 0x42, 0x6d, 0x7b, 0x95, 0xaa, 0xb2, 0x6f, 0xaa, 0xd6, 0x26, 0x6e, 0xdd, 0xe9, 0x2d, 0xd7, 0x66, 0x46, 0x6e, 0x48, 0xb7, 0xa6, 0x92, 0x56, 0x62, 0x68, 0x48, 0x81, 0x37, 0x28, 0x8d, 0x66, 0xac, 0x92, 0x2a, 0x37, 0x83, 0x78, 0x7e, 0x69, 0xa6, 0x23, 0x7d, 0xac, 0x56, 0xe7, 0xf9, 0x20, 0x84, 0xfa, 0x21, 0xc6, 0x7f, 0x87, 0x47, 0x35, 0xd0, 0xfd, 0xe6, 0x8e, 0x62, 0xad, 0xe3, 0xb1, 0xe7, 0x94, 0x13, 0xb1, 0x76, 0x75, 0xfe, 0x86, 0x79, 0x2c, 0xe2, 0x02, 0xc6, 0x3e, 0xfb, 0x07, 0x0c, 0xb4, 0x02, 0xf6, 0x71, 0x2a, 0xf4, 0x6a, 0x79, 0x23, 0x14, 0x27, 0x2a, 0x9f, 0x33, 0x4d, 0x6e, 0xf0, 0x2f, 0xd2, 0xb8, 0xc9, 0xba, 0x2e, 0xea, 0x98, 0x5c, 0x58, 0x77, 0x15, 0xbb, 0xf2, 0xc4, 0x1b, 0x1b, 0xc0, 0xd5, 0xb8, 0x21, 0x5f, 0x25, 0x80, 0xdc, 0x34, 0xd5, 0x26, 0x06, 0xa2, 0x09, 0x4d, 0x86, 0x80, 0x90, 0x9b, 0x3a, 0xca, 0xc3, 0x0f, 0xf4, 0x96, 0xaf, 0x95, 0xc2, 0x4a, 0x76, 0xd8, 0x73, 0x0d, 0xf2, 0x58, 0x56, 0x7b, 0x9c, 0xbc, 0x45, 0x9d, 0xac, 0x69, 0xe2, 0x18, 0x82, 0x53, 0x21, 0xa4, 0x45, 0x13, 0x07, 0xc0, 0xca, 0x3b, 0xb1, 0xa5, 0xb7, 0xe6, 0x97, 0x78, 0xe8, 0x93, 0x12, 0xc3, 0x11, 0x33, 0x1c, 0x26, 0xa5, 0x80, 0x57, 0x4a, 0xf7, 0x91, 0x52, 0x17, 0xa0, 0xab, 0x07, 0x27, 0x20, 0x5b, 0xa8, 0x7a, 0xc8, 0xc1, 0x9b, 0x6b, 0xd7, 0x2f, 0xc3, 0xe2, 0xe3, 0xf3, 0x01, 0xcc, 0x7a, 0x70, 0xfa, 0xc8, 0x0a, 0x74, 0x1b, 0x23, 0xfe, 0xc5, 0xdb, 0x07, 0x2a, 0xfd, 0x40, 0xef, 0x69, 0x98, 0xa5, 0x5e, 0x84, 0x4c, 0xba, 0xd1, 0x56, 0x99, 0xcc, 0xf2, 0x2e, 0xa0, 0x47, 0x0e, 0x75, 0x38, 0x79, 0xc9, 0x91, 0x3f, 0x98, 0x11, 0x08, 0x2e, 0x07, 0x50, 0xe9, 0xf0, 0xd5, 0xe6, 0x68, 0xf5, 0x87, 0xd6, 0xc8, 0x82, 0x17, 0xbf, 0x7e, 0x4b, 0x3c, 0x0f, 0x93, 0x43, 0xec, 0x73, 0x4a, 0xb3, 0x1f, 0x92, 0x03, 0x89, 0xd7, 0xfa, 0x5f, 0xf3, 0x5d, 0x5a, 0xa5, 0x2d, 0xcd, 0xf3, 0x64, 0x98, 0xd4, 0x49, 0x5a, 0x0b, 0xb9, 0x1e, 0x95, 0x6d, 0x9a, 0xa0, 0xd8, 0x84, 0xf9, 0xe2, 0x40, 0x08, 0x77, 0x89, 0x27, 0xfc, 0xde, 0xc8, 0x49, 0x3e, 0x65, 0x8e, 0x25, 0x5c, 0x30, 0xfd, 0xa7, 0xa9, 0x17, 0x1f, 0x03, 0x90, 0xa8, 0xd4, 0xe4, 0x29, 0x6f, 0x0f, 0xc6, 0x0a, 0x75, 0x42, 0xa0, 0x60, 0x06, 0x17, 0xc7, 0x3e, 0xb7, 0x61, 0x0f, 0x34, 0xa8, 0x52, 0x33, 0x24, 0x07, 0xee, 0x77, 0x51, 0xd5, 0xbf, 0x8b, 0xb9, 0xed, 0xcb, 0xb3, 0xa5, 0x42, 0xc3, 0x25, 0x7e, 0x68, 0x7d, 0xb2, 0xe2, 0x56, 0xa4, 0xa9, 0xf7, 0x6a, 0xaf, 0xf9, 0xff, 0xad, 0x0f, 0x95, 0x2d, 0x59, 0xad, 0x1d, 0xb7, 0x98, 0x93, 0xba, 0x2d, 0x8f, 0xe9, 0x4a, 0x09, 0x9b, 0x24, 0xbd, 0x87, 0xda, 0x7a, 0xbe, 0xb7, 0xee, 0x99, 0x96, 0xd0, 0xfd, 0x98, 0x4e, 0xc7, 0xfc, 0x2e, 0x14, 0x20, 0x2e, 0x22, 0xe1, 0x05, 0xe7, 0x02, 0x58, 0x95, 0x96, 0x18, 0xf0, 0x7e, 0x02, 0x9a, 0x55, 0xce, 0xd4, 0x21, 0x0c, 0x06, 0x56, 0x5c, 0x56, 0x70, 0x7a, 0x06, 0x58, 0xb3, 0x1e, 0x15, 0x78, 0xa5, 0x8e, 0x35, 0x0a, 0x60, 0x4b, 0x74, 0x2c, 0x98, 0x0b, 0x3f, 0xee, 0x2c, 0x00, 0x8d, 0xb7, 0xfa, 0x5d, 0x5a, 0xe4, 0xf8, 0x17, 0x57, 0xb1, 0x81, 0xe8, 0xe0, 0x5d, 0xec, 0x9a, 0x2e, 0x89, 0x63, 0x82, 0xce, 0xe2, 0xf2, 0x4b, 0x51, 0xff, 0xdf, 0xf5, 0x46, 0x8c, 0x3a, 0x1c, 0x65, 0xa9, 0xb4, 0x7e, 0x0d, 0x8d, 0xb5, 0xb8, 0xf1, 0x6f, 0xa8, 0x50, 0x0e, 0xa6, 0x9a, 0xf8, 0xe0, 0x0f, 0x03, 0x11, 0xd5, 0xaf, 0xe3, 0x6f, 0x02, 0x99, 0x11, 0x5c, 0x14, 0x12, 0xd0, 0xdf, 0x8a, 0xf4, 0xa4, 0x3e, 0x22, 0x50, 0x64, 0xc1, 0x91, 0x57, 0x8f, 0xb9, 0x77, 0x7b, 0xe3, 0xc1, 0x92, 0xd1, 0x2c, 0x44, 0x32, 0xba, 0x5b, 0x3f, 0xed, 0xc2, 0xd7, 0x48, 0x93, 0xc8, 0x18, 0xd0, 0x65, 0x60, 0x71, 0xa5, 0x81, 0x75, 0x2d, 0xba, 0xa1, 0x33, 0xde, 0x2b, 0x05, 0x23, 0xf2, 0x7c, 0xae, 0x98, 0x87, 0x22, 0xcd, 0x4b, 0x81, 0x44, 0x7b, 0x42, 0xd9, 0xc2, 0xaa, 0xf6, 0x37, 0x77, 0x5c, 0xb4, 0xc4, 0xbb, 0x13, 0x44, 0x39, 0x2c, 0x88, 0xc9, 0x3d, 0xaf, 0x9f, 0xe8, 0xed, 0xb1, 0x9b, 0x2c, 0xbc, 0xb3, 0x8e, 0xa9, 0x7d, 0x05, 0x14, 0xe0, 0xbe, 0xd1, 0x41, 0xe3, 0x58, 0x5c, 0xd8, 0xba, 0x44, 0x89, 0xbe, 0x04, 0xb0, 0x9f, 0xae, 0xe1, 0x52, 0x4b, 0x2d, 0x10, 0xfd, 0xe9, 0xc1, 0x55, 0x72, 0xff, 0x5e, 0x1e, 0x78, 0x0a, 0x21, 0x65, 0x2f, 0x7e, 0x41, 0xd8, 0xa1, 0x08, 0x42, 0x38, 0x9a, 0x16, 0x6b, 0xff, 0xba, 0x99, 0x7b, 0x45, 0xc8, 0x09, 0x98, 0xe4, 0x49, 0xaa, 0x88, 0xdb, 0x51, 0x0f, 0x23, 0xf0, 0x9a, 0xdc, 0x08, 0x9a, 0xd3, 0xd0, 0x90, 0x1d, 0x3a, 0x02, 0x00, 0xf7, 0x6d, 0x6a, 0x03, 0x7b, 0x7d, 0xa4, 0x57, 0xbc, 0x45, 0xf1, 0xc6, 0xac, 0xfa, 0x7f, 0x58, 0x85, 0x03, 0xea, 0xc7, 0x68, 0x0a, 0x02, 0x33, 0x44, 0x53, 0xcf, 0x17, 0xfa, 0x4c, 0xd2, 0x7c, 0xbf, 0x66, 0x8e, 0x6c, 0xc1, 0x24, 0x47, 0xaa, 0x0d, 0x71, 0x0a, 0xa0, 0xb0, 0x37, 0xed, 0x99, 0x1c, 0x2d, 0x98, 0x30, 0xce, 0xf1, 0x04, 0x08, 0x2e, 0x56, 0x83, 0xbe, 0xb7, 0xff, 0x01, 0x1c, 0x57, 0x2d, 0x89, 0x90, 0x19, 0xd5, 0x0b, 0xdc, 0x01, 0xf6, 0x5c, 0x0e, 0x37, 0x29, 0x7e, 0xb3, 0x69, 0x7a, 0x22, 0x48, 0x6a, 0x76, 0x6b, 0xf1, 0x1f, 0x85, 0xf5, 0x6e, 0x9b, 0x7a, 0x16, 0x4a, 0x89, 0x69, 0x63, 0x55, 0xca, 0xb8, 0x76, 0x55, 0x60, 0x79, 0xef, 0xf9, 0x8b, 0xf7, 0xb9, 0x0e, 0x31, 0x8f, 0x8f, 0xf5, 0x83, 0xc2, 0xbe, 0x55, 0xde, 0x88, 0x2c, 0x0d, 0xef, 0xe6, 0x99, 0x6d, 0x1b, 0xc2, 0x25, 0xa5, 0x1e, 0xf7, 0x12, 0x7d, 0xf2, 0xa5, 0xcc, 0x47, 0xf2, 0xca, 0x26, 0x12, 0x3f, 0x17, 0xe7, 0x21, 0x63, 0xfc, 0x85, 0x9c, 0x34, 0x06, 0x30, 0x84, 0xfb, 0x6a, 0x12, 0xec, 0xd6, 0xe2, 0xd6, 0x67, 0x5b, 0xb7, 0x67, 0xbd, 0x7e, 0x1f, 0xfa, 0xe2, 0xb5, 0xca, 0x4e, 0x28, 0x5a, 0xb8, 0x32, 0xb3, 0x50, 0x4d, 0x49, 0x2d, 0xe9, 0xa7, 0x0a, 0xbc, 0x07, 0x2f, 0x0a, 0x31, 0x82, 0x6e, 0x7e, 0x83, 0xca, 0x23, 0xfb, 0x7b, 0xce, 0x92, 0x81, 0xb0, 0x1c, 0x1e, 0xb8, 0xb6, 0x49, 0x1a, 0x79, 0x93, 0x93, 0xdd, 0x90, 0x72, 0xc5, 0x14, 0xc1, 0x9c, 0x5b, 0x5d, 0x09, 0xa3, 0xe7, 0x11, 0x25, 0xe0, 0xb3, 0x60, 0x59, 0x20, 0xa8, 0xa4, 0x6a, 0x9b, 0x6e, 0xef, 0xec, 0x26, 0xd5, 0xe6, 0xc4, 0xa9, 0x74, 0xd3, 0xe5, 0xd2, 0x90, 0xf5, 0x5d, 0x0b, 0x3f, 0x1b, 0x95, 0xaa, 0xcc, 0x71, 0xd4, 0x68, 0x5e, 0x99, 0x06, 0x15, 0xd5, 0xfd, 0xbc, 0x8a, 0xf5, 0x64, 0x73, 0xde, 0xc6, 0xc4, 0x19, 0xdd, 0x3a, 0x57, 0xcd, 0xb5, 0x11, 0xf1, 0xe7, 0xf3, 0xfa, 0x91, 0x38, 0xae, 0xfb, 0x36, 0x93, 0x02, 0x12, 0xf4, 0x8b, 0xc1, 0x1d, 0x46, 0x7f, 0x64, 0xf7, 0xa6, 0xd4, 0x48, 0xe4, 0x5b, 0x82, 0x17, 0x2f, 0x93, 0xd2, 0x83, 0x11, 0xb1, 0x66, 0x3b, 0xd5, 0xe8, 0x79, 0x17, 0x3a, 0x09, 0x68, 0x96, 0x19, 0x99, 0x71, 0x8b, 0x47, 0x27, 0xbb, 0x13, 0xbd, 0xdc, 0x97, 0xca, 0xf6, 0x54, 0x06, 0x3f, 0x99, 0xac, 0x7b, 0xa5, 0x58, 0xdd, 0xe2, 0xcb, 0x18, 0x48, 0xe0, 0x4e, 0x52, 0x92, 0x5d, 0x0d, 0xb9, 0xb1, 0x40, 0xdd, 0x1d, 0x47, 0x79, 0x7e, 0x8f, 0x2f, 0x45, 0xce, 0xc6, 0x56, 0xad, 0x3d, 0xc1, 0xcd, 0x50, 0x81, 0xae, 0x1c, 0x63, 0x8b, 0x0b, 0xd8, 0xf6, 0xb9, 0x0b, 0x78, 0x79, 0x4d, 0x3b, 0x64, 0x7e, 0x1e, 0x65, 0x4f, 0xc1, 0x8d, 0xb4, 0xc7, 0x65, 0xbb, 0x1a, 0x0a, 0x80, 0xf9, 0xef, 0x1c, 0xda, 0x80, 0xdb, 0x16, 0xf2, 0x63, 0xf5, 0xc1, 0x42, 0xc1, 0x2c, 0x63, 0xc4, 0x3f, 0xe7, 0xd9, 0xb5, 0xb5, 0xe8, 0xe6, 0x99, 0x28, 0x76, 0xcb, 0x7f, 0xf9, 0xbb, 0x18, 0x86, 0x5b, 0x6b, 0xc1, 0xa0, 0x0a, 0xa6, 0x74, 0x96, 0x3b, 0x20, 0x2a, 0x4d, 0xce, 0x7f, 0xfd, 0x47, 0xcb, 0x04, 0x39, 0x6c, 0x0c, 0x6e, 0xb5, 0x0b, 0x37, 0x1b, 0x64, 0x1c, 0xf0, 0x71, 0x27, 0xc8, 0x4c, 0x7c, 0xe5, 0x2b, 0x88, 0xd8, 0xde, 0x58, 0xfb, 0xd2, 0x3c, 0x9d, 0x49, 0xca, 0xeb, 0x09, 0xda, 0xdc, 0xab, 0x2c, 0x8a, 0xbf, 0x64, 0x1e, 0xa2, 0xec, 0xb9, 0xc3, 0x08, 0x03, 0xdf, 0x4c, 0xb2, 0x6b, 0xb0, 0x01, 0x60, 0x39, 0xfb, 0x3e, 0x8b, 0x54, 0x1f, 0xbc, 0x98, 0xd6, 0xd8, 0x12, 0x52, 0xb5, 0x58, 0x7c, 0x97, 0xa2, 0x9a, 0xda, 0x51, 0x31, 0xf3, 0xfc, 0xa9, 0x3b, 0xea, 0x1c, 0x77, 0x81, 0x49, 0xac, 0xfc, 0x91, 0x74, 0x53, 0xd3, 0xee, 0xfa, 0x32, 0x25, 0x6b, 0x6a, 0x6b, 0x1d, 0xd8, 0x68, 0xe4, 0x9b, 0xe0, 0xff, 0x48, 0x2d, 0x32, 0x39, 0x4f, 0x3b, 0xdf, 0xed, 0x40, 0x81, 0x03, 0xd9, 0xb4, 0xc2, 0xa8, 0xf0, 0x9c, 0xbb, 0xe7, 0xf5, 0x85, 0x57, 0x50, 0x49, 0x1b, 0x21, 0x8d, 0x02, 0xec, 0xfe, 0x41, 0x3c, 0x6f, 0x1c, 0x36, 0xb4, 0x45, 0x26, 0xb8, 0x93, 0xbe, 0xba, 0x3c, 0x87, 0x9f, 0x1c, 0x46, 0x18, 0x23, 0x2c, 0x89, 0x3a, 0x3f, 0x95, 0x4f, 0x1e, 0x2a, 0x48, 0x1b, 0x4e, 0x1d, 0x29, 0x8d, 0xf9, 0x58, 0x07, 0x87, 0x8b, 0x65, 0xd2, 0x8e, 0x81, 0xa0, 0x08, 0x73, 0x7c, 0xf7, 0x71, 0x32, 0x94, 0xef, 0x0c, 0x1a, 0xee, 0xe7, 0x49, 0x2e, 0x91, 0xa1, 0x78, 0xcc, 0x75, 0xfe, 0x82, 0x8c, 0xdd, 0x09, 0xd7, 0x6b, 0xe7, 0x37, 0xa7, 0x29, 0x62, 0xee, 0x55, 0xef, 0xdf, 0x43, 0x29, 0x35, 0x0b, 0x08, 0x45, 0xe3, 0x3c, 0x06, 0xda, 0xb6, 0x49, 0x87, 0x9b, 0xe6, 0x9f, 0x18, 0x72, 0x06, 0x91, 0x8c, 0x72, 0x2b, 0xf0, 0x44, 0x0e, 0x50, 0xdc, 0xae, 0x88, 0xf9, 0xd9, 0x0c, 0xac, 0x17, 0x26, 0x77, 0xbd, 0x2c, 0x4a, 0x23, 0xb0, 0xaf, 0xef, 0xe4, 0x98, 0xb2, 0xf3, 0xf1, 0x62, 0xc2, 0xbd, 0xe9, 0xc2, 0x0f, 0xcd, 0x13, 0x6d, 0xcd, 0x97, 0xea, 0x89, 0xd9, 0x92, 0xd9, 0x61, 0xa0, 0x8c, 0x43, 0x5e, 0x3d, 0x40, 0xc6, 0x33, 0xe1, 0x2a, 0xc1, 0x57, 0x78, 0x9a, 0x13, 0xb8, 0x89, 0x08, 0x26, 0xae, 0x5e, 0xa7, 0x2d, 0x2d, 0x66, 0x3c, 0xa9, 0x40, 0xd7, 0x31, 0x32, 0xb2, 0x97, 0xe5, 0x74, 0x0e, 0x5d, 0x47, 0x78, 0xcb, 0x14, 0xa3, 0x25, 0xc0, 0x80, 0xbc, 0x06, 0xde, 0x23, 0x1a, 0x4d, 0x1d, 0x62, 0xa5, 0x18, 0xb7, 0xe4, 0x73, 0xf4, 0x95, 0x3b, 0xdf, 0x9f, 0x06, 0xc6, 0xdb, 0x13, 0xb7, 0xd5, 0x87, 0xbf, 0xe0, 0x0f, 0x02, 0x18, 0xbb, 0x11, 0x7f, 0x50, 0x3a, 0x58, 0x9c, 0x65, 0xf9, 0x61, 0xf0, 0x5e, 0x72, 0x0e, 0xe3, 0xd2, 0x70, 0x4c, 0xc3, 0xa9, 0xc6, 0xf3, 0x14, 0x26, 0x40, 0xee, 0x27, 0x26, 0xda, 0x9b, 0xee, 0xa2, 0x30, 0x74, 0x0e, 0x7b, 0x36, 0xf0, 0x36, 0x77, 0x29, 0xa4, 0xaf, 0x86, 0xc5, 0xae, 0x35, 0x4b, 0xb9, 0x53, 0x06, 0xd7, 0x58, 0xe7, 0x38, 0xb8, 0x91, 0xed, 0x4f, 0x32, 0x21, 0x80, 0x0f, 0xcc, 0x07, 0xf2, 0x8f, 0x0f, 0x38, 0xb2, 0x8f, 0x8a, 0x95, 0x73, 0x0b, 0x19, 0x1a, 0x8a, 0x11, 0x67, 0x58, 0x98, 0xcf, 0xb2, 0x25, 0x6a, 0xf0, 0xce, 0x92, 0x1d, 0x29, 0x6d, 0x1d, 0x86, 0x0e, 0x9d, 0x28, 0xd1, 0x2b, 0x92, 0xaa, 0x67, 0x50, 0xa6, 0x25, 0x16, 0x2c, 0x9e, 0xd8, 0x6c, 0x1d, 0x2f, 0x35, 0x63, 0x47, 0xc1, 0x95, 0x44, 0xe4, 0x72, 0x2b, 0xc5, 0xda, 0x5e, 0x36, 0x74, 0x93, 0x1e, 0x7b, 0x59, 0x09, 0x8e, 0xf3, 0xd7, 0x20, 0xd3, 0xc1, 0xd4, 0x39, 0x9d, 0x66, 0x1a, 0x04, 0xaa, 0x38, 0xfc, 0x95, 0x8c, 0x11, 0x3c, 0xbb, 0xab, 0x44, 0x2c, 0x8d, 0x8d, 0xd5, 0x14, 0x45, 0x55, 0xe9, 0xd4, 0x52, 0x8a, 0x7b, 0xca, 0xa8, 0x1a, 0x51, 0xf6, 0x5b, 0x9f, 0x2e, 0x5c, 0x6c, 0xe0, 0x4a, 0xaa, 0xe3, 0x9b, 0xff, 0x1b, 0x1d, 0x82, 0xc5, 0x9b, 0x68, 0x83, 0x60, 0x2c, 0xcd, 0x4c, 0x58, 0x88, 0x2d, 0x0f, 0xaa, 0x08, 0x90, 0x82, 0xbd, 0xc4, 0xb9, 0x2b, 0x97, 0xfc, 0xfe, 0xda, 0x51, 0xb7, 0x56, 0x77, 0xc8, 0xa9, 0xb4, 0xfd, 0x96, 0x5a, 0x93, 0xc7, 0x41, 0x85, 0xd2, 0x0b, 0xb1, 0xbe, 0xc3, 0xa4, 0xe8, 0x58, 0x7f, 0x14, 0xed, 0x86, 0x7c, 0xc9, 0x09, 0xc0, 0x61, 0x9f, 0x36, 0x69, 0x18, 0xa7, 0xd5, 0xae, 0x25, 0x27, 0x9f, 0xb1, 0x37, 0xe1, 0xde, 0xe7, 0xfd, 0x98, 0xdd, 0xbe, 0x3b, 0xd1, 0x9d, 0x84, 0x1d, 0xd7, 0xc9, 0x84, 0xcb, 0x01, 0xec, 0x72, 0x3d, 0x37, 0xe2, 0x09, 0x51, 0xb3, 0x8d, 0xf2, 0x1b, 0x05, 0xc9, 0xe8, 0x7c, 0x5a, 0xa1, 0x1a, 0xf6, 0xfd, 0xc3, 0xd0, 0xbe, 0x1e, 0x31, 0x52, 0x13, 0xd3, 0x3a, 0x06, 0xcf, 0x5c, 0xa9, 0xd8, 0x3c, 0xab, 0x3c, 0xde, 0x28, 0x24, 0x57, 0x3c, 0x3c, 0xa1, 0xfa, 0x46, 0x89, 0xb9, 0xf1, 0xe5, 0x64, 0x42, 0x4a, 0x3c, 0x74, 0x14, 0x0c, 0x8b, 0x09, 0x10, 0x26, 0x53, 0xaf, 0x61, 0xa6, 0xbb, 0x04, 0x02, 0x2b, 0x32, 0xc6, 0x80, 0x9d, 0x56, 0x30, 0x02, 0x1b, 0x14, 0x87, 0x86, 0x35, 0x11, 0xf0, 0x6d, 0x5c, 0x49, 0x84, 0x3a, 0x96, 0xf7, 0xa6, 0x97, 0x77, 0xb4, 0x94, 0x99, 0x4c, 0xe2, 0x3d, 0x44, 0x99, 0x4b, 0x53, 0x52, 0xc6, 0x06, 0xa0, 0x30, 0x15, 0x9b, 0x9d, 0x4a, 0xd7, 0x66, 0x41, 0x88, 0xe0, 0x41, 0x17, 0x18, 0x38, 0x5d, 0x93, 0x6f, 0x13, 0x71, 0xa6, 0x8a, 0x03, 0x17, 0x90, 0x7a, 0x6d, 0x72, 0xf6, 0x1f, 0x3a, 0x15, 0x34, 0x34, 0xce, 0x20, 0xf4, 0x8b, 0x3e, 0xac, 0x00, 0x9a, 0xbd, 0x6a, 0x54, 0x37, 0x58, 0x86, 0x78, 0xa0, 0xe4, 0xd2, 0x0c, 0xbe, 0x34, 0x20, 0xa4, 0xab, 0x8f, 0xef, 0xd7, 0x71, 0x60, 0x4b, 0x93, 0x15, 0x30, 0xee, 0xb3, 0xd4, 0xd2, 0xab, 0xd4, 0xac, 0xdd, 0x0d, 0x64, 0x1e, 0x60, 0x3b, 0xfb, 0x33, 0xd0, 0x1e, 0xef, 0xbd, 0x45, 0xc6, 0x23, 0xdf, 0xe6, 0x0a, 0x1f, 0xcf, 0xa2, 0x6f, 0x66, 0xdb, 0x22, 0x4c, 0x03, 0xaa, 0xfb, 0x2b, 0x66, 0xc5, 0x27, 0x71, 0x6e, 0x55, 0xb6, 0x42, 0xc7, 0x2f, 0xc1, 0x9f, 0x76, 0x0d, 0xa0, 0xd1, 0xb2, 0x1e, 0x5c, 0x0b, 0xf6, 0xc2, 0x67, 0x4b, 0x54, 0x8e, 0x8b, 0x81, 0x0c, 0x97, 0x21, 0xf3, 0x5d, 0xed, 0x83, 0xe0, 0x9b, 0x65, 0xc4, 0x63, 0x82, 0x9c, 0x9e, 0x9b, 0xca, 0x38, 0xab, 0x09, 0xfb, 0x71, 0xd8, 0x39, 0x83, 0xd1, 0x18, 0xa5, 0x06, 0x37, 0x55, 0xd6, 0xf5, 0x22, 0xac, 0xcc, 0x62, 0x2c, 0xd9, 0xa0, 0x13, 0xd5, 0xf0, 0x68, 0xd5, 0x82, 0x4f, 0x5b, 0x12, 0xc6, 0xd0, 0x36, 0xa6, 0xdf, 0x43, 0xde, 0xef, 0x84, 0x1b, 0x46, 0x23, 0xde, 0x67, 0x93, 0xe7, 0xd4, 0x04, 0x7e, 0x1d, 0x8b, 0x11, 0xfa, 0xfd, 0x2d, 0xa4, 0x17, 0x67, 0xea, 0xbb, 0x27, 0x77, 0x3d, 0x76, 0x1f, 0x5b, 0x71, 0x83, 0x40, 0x61, 0x63, 0xd9, 0xf6, 0x54, 0x89, 0xa9, 0x00, 0x09, 0x33, 0x91, 0xd1, 0x35, 0x11, 0x14, 0x36, 0x81, 0xf6, 0x47, 0x3a, 0xe1, 0xdb, 0xcc, 0x47, 0x21, 0x27, 0x04, 0x8d, 0xc1, 0x2e, 0x81, 0xa7, 0x02, 0xf7, 0xba, 0x7c, 0x41, 0x42, 0x03, 0x64, 0x84, 0xc9, 0xbc, 0x8d, 0x53, 0xc7, 0xc8, 0x9c, 0xc9, 0xb7, 0x41, 0x97, 0xea, 0x5e, 0x69, 0x02, 0x37, 0x0b, 0xe4, 0x48, 0x80, 0x1e, 0x25, 0x5d, 0xfa, 0xc7, 0x27, 0xa2, 0x91, 0x10, 0x5d, 0x09, 0x7f, 0x1e, 0xeb, 0x79, 0x1e, 0xb3, 0x16, 0x74, 0xfa, 0xf8, 0xf9, 0xf7, 0x2b, 0x7a, 0x7a, 0xa1, 0xe2, 0x72, 0x7d, 0x18, 0x41, 0x49, 0x58, 0xa9, 0x70, 0x5b, 0x86, 0x2e, 0xed, 0xfc, 0x9f, 0x35, 0x23, 0xb8, 0x87, 0x5e, 0x3f, 0xdf, 0xe6, 0x05, 0x3f, 0x42, 0xd9, 0x21, 0x4b, 0x37, 0xe8, 0x6c, 0x49, 0xe3, 0x37, 0xc5, 0xac, 0xb8, 0x00, 0xd2, 0x8c, 0x3c, 0x40, 0xe9, 0xfc, 0x0c, 0xb1, 0x31, 0x98, 0x21, 0xf9, 0x04, 0x5d, 0x53, 0x21, 0x98, 0xbe, 0x1b, 0x48, 0xdf, 0xf3, 0x9d, 0x99, 0xab, 0x95, 0xe6, 0x7a, 0x16, 0x68, 0x72, 0x06, 0x21, 0x78, 0xf1, 0xbe, 0x9b, 0x67, 0x4a, 0x7b, 0x45, 0x05, 0xe1, 0xa8, 0x33, 0x21, 0x16, 0xad, 0x75, 0x9f, 0x0e, 0xae, 0xf7, 0xcb, 0xb5, 0x76, 0xa6, 0xed, 0x03, 0xae, 0xd4, 0x1e, 0x7f, 0x53, 0xde, 0x59, 0x02, 0x67, 0x0c, 0xd5, 0xbe, 0xe6, 0xb8, 0x92, 0x7e, 0xfb, 0xb3, 0x32, 0x2f, 0x74, 0xe4, 0x0b, 0xa0, 0x74, 0x32, 0x7a, 0x86, 0x67, 0xa5, 0x7a, 0xc3, 0x3b, 0xc7, 0x75, 0xe8, 0xce, 0x51, 0x5a, 0xf8, 0xa2, 0x03, 0xef, 0x6f, 0xd8, 0xd4, 0x69, 0x82, 0x5c, 0x4b, 0x3a, 0xa9, 0x5d, 0x2d, 0x2a, 0x5b, 0x00, 0x58, 0xa9, 0x18, 0x55, 0xef, 0x63, 0xad, 0x8a, 0xb7, 0x16, 0xb4, 0x5e, 0xc1, 0xa0, 0x5a, 0xd9, 0x4a, 0x5d, 0x65, 0x3a, 0xdf, 0xaf, 0x75, 0x32, 0xc5, 0xde, 0x89, 0x4f, 0x97, 0x23, 0xc6, 0xbb, 0x31, 0xff, 0x74, 0x26, 0xcd, 0xd1, 0x4a, 0x01, 0x6c, 0xa8, 0xeb, 0xed, 0x78, 0x56, 0xb0, 0x73, 0xa7, 0xc6, 0xa8, 0xf5, 0x22, 0x8f, 0xdd, 0xe4, 0xe7, 0xc8, 0xd9, 0x34, 0x6b, 0x1f, 0x69, 0x0d, 0x84, 0x25, 0xa1, 0xc4, 0x87, 0xec, 0x20, 0x09, 0xad, 0xd4, 0x96, 0x62, 0xbc, 0xa2, 0x83, 0xd8, 0xe3, 0xd2, 0x41, 0xef, 0xe5, 0x2f, 0x44, 0xdc, 0x7a, 0xa0, 0xa1, 0xf3, 0xf2, 0x45, 0xcd, 0x5f, 0x1b, 0xc2, 0xa7, 0x15, 0x65, 0xdb, 0xb9, 0x0b, 0x44, 0x42, 0xbb, 0xa4, 0xd6, 0xac, 0x59, 0x6f, 0xc6, 0x2a, 0x37, 0x12, 0x70, 0xb7, 0x31, 0x81, 0x45, 0x0d, 0xe7, 0x74, 0x71, 0xbe, 0x79, 0x17, 0xbc, 0x7f, 0x8f, 0x03, 0xae, 0xc7, 0x9d, 0x6d, 0xf7, 0x99, 0x65, 0x9d, 0x0e, 0x9d, 0xbd, 0xa2, 0x17, 0x76, 0x92, 0x45, 0x0a, 0x50, 0x2d, 0x3b, 0x12, 0xb8, 0xb5, 0x9f, 0x33, 0xb1, 0xf5, 0x9f, 0x30, 0x04, 0x60, 0x75, 0xac, 0xd7, 0x52, 0x99, 0x8f, 0x81, 0x99, 0x34, 0xab, 0x9d, 0x34, 0xd8, 0xa0, 0x5d, 0x5a, 0x6f, 0xfc, 0x22, 0xbf, 0x72, 0xa7, 0x49, 0x12, 0x5c, 0x7f, 0x47, 0xca, 0x5d, 0x3f, 0xf8, 0x22, 0x52, 0xa5, 0x34, 0x62, 0xf5, 0xd4, 0xa4, 0x61, 0x51, 0xf7, 0xd3, 0x48, 0x7a, 0x27, 0x88, 0x98, 0x7a, 0x8f, 0x54, 0x6f, 0x8e, 0xcd, 0x67, 0x07, 0x93, 0x9c, 0xa7, 0x7f, 0xbb, 0xb0, 0x04, 0xde, 0x84, 0xe2, 0x05, 0x55, 0xeb, 0x8d, 0xa7, 0xc4, 0xdc, 0x38, 0x68, 0x80, 0xee, 0x75, 0x9f, 0x54, 0x4d, 0x08, 0x0e, 0xc5, 0xf7, 0x4c, 0xba, 0x9a, 0x2c, 0xd3, 0xfb, 0x9c, 0x1f, 0x4d, 0xcf, 0x9b, 0xf2, 0xab, 0x73, 0xb1, 0xe1, 0x84, 0x35, 0xcb, 0xbe, 0xb7, 0x84, 0x64, 0x9d, 0x52, 0x49, 0x94, 0xd0, 0xb2, 0x7a, 0x4a, 0x16, 0xec, 0xeb, 0xd5, 0x0f, 0x6c, 0x68, 0xaa, 0xf3, 0xdc, 0x02, 0x61, 0x84, 0x48, 0xa6, 0x00, 0x41, 0x7f, 0xf4, 0x7c, 0xdd, 0xbc, 0x4d, 0x7d, 0xef, 0x85, 0x2e, 0x62, 0xeb, 0xd4, 0xbd, 0x85, 0x51, 0x75, 0xa2, 0xc0, 0x24, 0xaf, 0x18, 0x30, 0x9e, 0x26, 0x44, 0x38, 0x22, 0x00, 0xc5, 0xc9, 0x72, 0x47, 0x8c, 0xe1, 0x22, 0x8e, 0xee, 0x52, 0x4d, 0xd8, 0xf7, 0xc5, 0x86, 0xb5, 0x02, 0xfe, 0x11, 0xae, 0x86, 0x62, 0x54, 0xe3, 0x33, 0xb6, 0x88, 0xf3, 0x3e, 0x29, 0xb4, 0x1c, 0xf9, 0x95, 0xdc, 0xa4, 0xa6, 0x02, 0x75, 0x77, 0x8d, 0x6c, 0x1d, 0x11, 0x4c, 0xc6, 0x89, 0x9e, 0x6f, 0x3e, 0xbf, 0x60, 0x40, 0xc3, 0x85, 0x52, 0xe0, 0xc4, 0x19, 0x0b, 0x97, 0x3b, 0x22, 0xe4, 0x69, 0xeb, 0xe7, 0x5d, 0xea, 0xe5, 0xbf, 0xbd, 0x53, 0x51, 0xc8, 0xf9, 0xd4, 0x6b, 0xdc, 0xd7, 0x2c, 0xcc, 0xc1, 0x53, 0x78, 0xeb, 0xa0, 0x42, 0x48, 0xe3, 0xb9, 0x35, 0xf8, 0x77, 0x54, 0xa0, 0x3e, 0x53, 0xfb, 0x3c, 0xff, 0x94, 0xe6, 0xa9, 0x67, 0x8b, 0xb7, 0x58, 0x38, 0xbe, 0x68, 0xa8, 0x62, 0x30, 0x81, 0x4f, 0xd5, 0xe3, 0x8e, 0xfc, 0x93, 0x9a, 0xd0, 0x3b, 0x09, 0xe3, 0x33, 0x98, 0x9f, 0x55, 0x80, 0x07, 0x8e, 0x17, 0xd4, 0x83, 0xf1, 0xa2, 0x51, 0xf6, 0x20, 0xc7, 0x13, 0x59, 0x39, 0xf3, 0x65, 0x1c, 0xff, 0xb2, 0x35, 0xc8, 0xe8, 0x72, 0xc6, 0xe3, 0x71, 0x8a, 0xa5, 0x14, 0xb5, 0x7a, 0xde, 0x87, 0x3e, 0x74, 0x6f, 0x93, 0x1b, 0x1c, 0xfd, 0x9a, 0x32, 0x8d, 0xc6, 0x31, 0xd8, 0x9c, 0xd7, 0x81, 0x9f, 0x60, 0x7f, 0xed, 0x6f, 0xf2, 0x03, 0xf6, 0xd9, 0x71, 0x93, 0x5b, 0xa7, 0x49, 0x7d, 0x84, 0xb8, 0xb5, 0xa1, 0x20, 0x0b, 0x83, 0x25, 0x0e, 0x19, 0x18, 0x6a, 0x79, 0x68, 0xb3, 0x3e, 0x48, 0x5d, 0xf6, 0x53, 0xb5, 0x52, 0xa2, 0xef, 0x3b, 0xe8, 0xa2, 0xe6, 0xb6, 0x9e, 0x4b, 0xc6, 0xc6, 0xa3, 0xe2, 0x51, 0x74, 0xe9, 0x5e, 0x30, 0x18, 0x7b, 0x70, 0xe5, 0x7a, 0x10, 0xc1, 0x02, 0x37, 0xe0, 0x7b, 0x98, 0x66, 0xb6, 0x0a, 0xf3, 0x7c, 0x47, 0x24, 0x84, 0x6d, 0xc2, 0x06, 0x1f, 0x14, 0xa8, 0x01, 0x67, 0xd5, 0xde, 0x36, 0x86, 0x81, 0x01, 0x9e, 0x21, 0x79, 0xf9, 0x4d, 0x8a, 0x17, 0xd1, 0xf7, 0x38, 0x49, 0xc5, 0xb3, 0x75, 0x7f, 0x9d, 0xff, 0x57, 0xc8, 0x3a, 0x04, 0xf1, 0x37, 0x6f, 0x1c, 0xca, 0x8c, 0x12, 0x92, 0x8f, 0x10, 0x52, 0xa9, 0x04, 0xc1, 0x4a, 0xdf, 0x40, 0xaf, 0xd7, 0x72, 0x1a, 0xa6, 0xa7, 0x24, 0xdf, 0x0d, 0x93, 0x3b, 0x46, 0x0e, 0x2f, 0xcd, 0xa5, 0xf8, 0x9f, 0x3a, 0x64, 0xe1, 0xac, 0xfa, 0xb2, 0x8f, 0x17, 0x99, 0x78, 0x99 ],
+const [ 0x1d, 0x91, 0xb8, 0x6a, 0xcc, 0x6e, 0xa1, 0x70, 0xbf, 0xcf, 0x18, 0x7f, 0x77, 0x3b, 0x57, 0x7b, 0x95, 0xe2, 0x9d, 0x36, 0xfb, 0x30, 0x77, 0x9d, 0x2e, 0xa2, 0x3e, 0x2f, 0xfe, 0xd9, 0xe1, 0xb4, 0x6a, 0xed, 0xe4, 0x2b, 0xbe, 0x03, 0xa9, 0x04, 0xfe, 0x22, 0xef, 0x8f, 0x87, 0x42, 0x98, 0xb5, 0xf4, 0xa6, 0xaf, 0xe6, 0x3f, 0x6c, 0xa9, 0x52, 0x28, 0x63, 0xeb, 0x5c, 0xdb, 0x1c, 0x8d, 0x4b, 0xcd, 0x44, 0x5e, 0x43, 0xe7, 0x30, 0x28, 0x75, 0xe6, 0xba, 0x35, 0x92, 0x02, 0x4c, 0x11, 0x85, 0xcd, 0x3a, 0x92, 0x61, 0x5f, 0x55, 0x16, 0x98, 0xb0, 0xbd, 0x0c, 0x6f, 0x45, 0xf6, 0xb6, 0xae, 0x0f, 0x3e, 0x2c, 0x9c, 0x90, 0x1e, 0xa5, 0x2a, 0x3f, 0x40, 0xf2, 0x6f, 0x2e, 0x80, 0x4b, 0x54, 0xea, 0x45, 0x4e, 0x91, 0xa2, 0x12, 0x45, 0xd8, 0x8c, 0x58, 0xa8, 0x4f, 0x85, 0x8f, 0xe3, 0x44, 0xf8, 0x84, 0x58, 0x1d, 0x00, 0xf5, 0xa8, 0x8d, 0xd1, 0x5b, 0x2e, 0x0e, 0x54, 0x07, 0xcd, 0x8b, 0x11, 0x70, 0xec, 0x5c, 0x52, 0xcc, 0xbe, 0x78, 0x85, 0xdd, 0xc7, 0xe6, 0xe3, 0x0e, 0x9c, 0x75, 0x4f, 0xbe, 0xea, 0xad, 0x81, 0xdc, 0xb9, 0x05, 0x63, 0xb4, 0xf2, 0x57, 0xbb, 0x08, 0x1f, 0x90, 0x0b, 0x63, 0x73, 0xac, 0xb5, 0xaa, 0x0a, 0xe2, 0x63, 0xf4, 0x71, 0x1b, 0xa6, 0x9b, 0x69, 0xa9, 0xde, 0x94, 0xe8, 0x36, 0x59, 0xfb, 0x61, 0xfa, 0xbf, 0xf2, 0x45, 0x32, 0xad, 0xac, 0xca, 0xcd, 0xa0, 0xc5, 0xeb, 0x68, 0x15, 0xd5, 0xb0, 0x7c, 0xee, 0x44, 0xaf, 0xd6, 0x18, 0x60, 0xd3, 0x48, 0x6b, 0xac, 0x5c, 0x9f, 0xd1, 0x7b, 0x27, 0xd4, 0xab, 0xbe, 0x30, 0x87, 0x70, 0x1b, 0x55, 0xa8, 0x97, 0x3f, 0x5d, 0x78, 0xb8, 0x74, 0x38, 0xb0, 0xee, 0x76, 0x88, 0xff, 0x7f, 0x82, 0x61, 0xba, 0xbf, 0xb1, 0x4d, 0xd0, 0x31, 0x84, 0x94, 0xfc, 0xf0, 0xc0, 0xba, 0x3e, 0x4d, 0x7c, 0x48, 0x8b, 0xba, 0x78, 0xd0, 0xc4, 0xe7, 0xb0, 0x2b, 0xe5, 0x2a, 0x31, 0x05, 0x7f, 0x24, 0x2c, 0x9c, 0x68, 0xa2, 0x49, 0xc4, 0xb0, 0xc1, 0x3d, 0x2f, 0xd8, 0x56, 0x9f, 0xeb, 0x3f, 0x8c, 0xf7, 0x2c, 0xdd, 0xcf, 0x19, 0x4c, 0x33, 0xe9, 0xb1, 0x10, 0x82, 0x6b, 0x1e, 0x2d, 0x3c, 0x4f, 0x84, 0x0a, 0xb8, 0xdb, 0x1c, 0xc8, 0x29, 0xc9, 0xcf, 0x80, 0xd1, 0xa4, 0x04, 0xcb, 0x72, 0x75, 0xb6, 0x88, 0x06, 0x9f, 0xc9, 0xd9, 0xaf, 0x08, 0x9e, 0x6f, 0xf1, 0x79, 0xe5, 0x08, 0x1f, 0x48, 0xb2, 0x35, 0x13, 0x34, 0xd3, 0x61, 0x22, 0x90, 0x62, 0x0f, 0x50, 0xa4, 0x96, 0x63, 0xbf, 0x50, 0xde, 0xe4, 0x6e, 0xf2, 0x31, 0x80, 0x20, 0x8a, 0x9f, 0xd1, 0x99, 0x1c, 0x2d, 0x9e, 0x10, 0x56, 0xdf, 0xa5, 0xe2, 0x73, 0x16, 0x97, 0x84, 0x5f, 0x1c, 0x65, 0xbb, 0x1c, 0xfe, 0xba, 0x0f, 0x64, 0x9a, 0xc8, 0x7d, 0x90, 0xf8, 0x48, 0x6c, 0xb8, 0xde, 0xbc, 0xe2, 0x1c, 0x9e, 0xf8, 0xf8, 0xc2, 0x33, 0xe0, 0x8b, 0x61, 0x8c, 0x73, 0x35, 0x7e, 0x28, 0x09, 0x7b, 0xd5, 0xe3, 0xd8, 0x48, 0xfa, 0x10, 0xbd, 0x9b, 0x40, 0xc7, 0x3a, 0x7c, 0xda, 0x80, 0xbb, 0x34, 0x40, 0xe1, 0x1d, 0xbd, 0xd5, 0xd5, 0x70, 0x78, 0xc6, 0xde, 0xfc, 0x1e, 0x35, 0xac, 0x83, 0xf9, 0x97, 0xee, 0xc6, 0x54, 0x5a, 0x68, 0x4a, 0x30, 0xcb, 0x46, 0x5c, 0x38, 0x38, 0xb0, 0x53, 0xf7, 0x51, 0x9e, 0x15, 0x49, 0xd4, 0xee, 0xdd, 0x0f, 0x6a, 0xb4, 0x3b, 0x27, 0xcc, 0xd1, 0x5c, 0x9c, 0x29, 0xc7, 0x8b, 0x19, 0xcc, 0xcb, 0xf8, 0xa4, 0xfa, 0x1c, 0xb8, 0x88, 0x19, 0x94, 0x0e, 0x93, 0x18, 0x7c, 0xe9, 0x82, 0x0a, 0xa5, 0xad, 0xba, 0x14, 0xb4, 0x36, 0x39, 0x8a, 0xbe, 0x1b, 0xcb, 0x55, 0x15, 0x2f, 0x81, 0x98, 0x61, 0x4e, 0x5f, 0x93, 0xf2, 0x56, 0x55, 0xc7, 0x54, 0x73, 0x71, 0x5a, 0x24, 0xa0, 0x52, 0xbe, 0x23, 0x6a, 0xe0, 0x8e, 0x89, 0xf7, 0x3a, 0xb8, 0x9c, 0x48, 0xf0, 0xe1, 0x80, 0xbb, 0x73, 0x05, 0x51, 0xd4, 0xc9, 0x5e, 0x6f, 0x3c, 0x85, 0x88, 0x19, 0x0a, 0xf7, 0xe2, 0x3e, 0x42, 0xa0, 0x37, 0x8f, 0x9b, 0xe8, 0x9e, 0xd9, 0x86, 0x14, 0x9e, 0x92, 0x6b, 0x72, 0x96, 0xb2, 0x36, 0xd6, 0x5c, 0xc4, 0x12, 0x4a, 0x25, 0x3c, 0x74, 0x02, 0xa5, 0x0b, 0x5c, 0x8e, 0x77, 0x71, 0xd8, 0x53, 0xbe, 0x12, 0xc9, 0x3c, 0x0d, 0x4d, 0xe9, 0xad, 0x84, 0xc9, 0x0d, 0xb9, 0x3c, 0x50, 0xa8, 0x94, 0xe6, 0xe1, 0x91, 0x4b, 0xae, 0x00, 0x06, 0xb2, 0x66, 0x51, 0xf0, 0x9e, 0xe0, 0x65, 0x68, 0x55, 0x9b, 0xd4, 0x7b, 0x43, 0xa2, 0x8c, 0x2a, 0xef, 0xb2, 0x68, 0xb5, 0x2d, 0x9b, 0x05, 0x1a, 0x94, 0xe8, 0xd1, 0xd8, 0x32, 0xc2, 0x64, 0xf8, 0x7f, 0x12, 0x14, 0x4e, 0x90, 0xe6, 0xc3, 0xfd, 0x8d, 0x16, 0xfc, 0x39, 0x65, 0x27, 0x3f, 0x51, 0xc0, 0x6f, 0x98, 0xec, 0x36, 0x7a, 0x76, 0x92, 0xbe, 0xad, 0xbb, 0x6f, 0x69, 0x29, 0x10, 0x54, 0x50, 0xf3, 0x7b, 0xff, 0xca, 0x51, 0x33, 0x9c, 0xe3, 0x77, 0xb3, 0x8c, 0x0a, 0x62, 0x0d, 0x64, 0x0a, 0x05, 0x81, 0x39, 0x3c, 0xa3, 0x4e, 0x1b, 0xfa, 0x7c, 0xc8, 0xdf, 0x56, 0xab, 0xab, 0x22, 0x0c, 0x4f, 0xaf, 0x8a, 0xb6, 0xe9, 0x5c, 0x4f, 0x3f, 0x05, 0x20, 0xfa, 0x9a, 0x1d, 0x9f, 0x6d, 0xb4, 0xba, 0x4a, 0x24, 0xa7, 0xdc, 0x33, 0xba, 0x30, 0x9c, 0x1f, 0xaf, 0x63, 0x10, 0xdd, 0x68, 0x9d, 0x6f, 0xd7, 0x77, 0xbb, 0x75, 0xe7, 0x1d, 0x89, 0x09, 0x6c, 0x0d, 0x7d, 0x1e, 0x9c, 0x73, 0xa6, 0xd7, 0x1c, 0x35, 0xdf, 0xee, 0xce, 0x79, 0x48, 0x56, 0xea, 0x67, 0xf7, 0x1f, 0x50, 0x30, 0xea, 0x9b, 0x1c, 0x4f, 0x40, 0xbf, 0x7b, 0x0f, 0xa9, 0xcb, 0xbe, 0x4d, 0x1c, 0x2e, 0xad, 0x7f, 0xc8, 0xa3, 0x1e, 0xf5, 0x4c, 0xa1, 0xc6, 0x5f, 0x2a, 0xf2, 0x4e, 0x90, 0x79, 0xa1, 0xa9, 0x81, 0xdb, 0x1a, 0xa6, 0x99, 0xaf, 0x8d, 0xc1, 0x2b, 0x88, 0x93, 0x3f, 0x41, 0xdd, 0x14, 0x7a, 0x98, 0x02, 0x68, 0x79, 0xeb, 0x56, 0xbc, 0xc3, 0x74, 0xbf, 0xb8, 0x75, 0xb1, 0x53, 0x5f, 0x93, 0x64, 0x58, 0x36, 0x9c, 0xdd, 0x6f, 0xa8, 0x61, 0x7b, 0x0c, 0xa9, 0x16, 0x71, 0x29, 0x9a, 0xaa, 0xc6, 0x3c, 0x6c, 0x54, 0xa0, 0x66, 0x09, 0x6f, 0xc1, 0xed, 0xef, 0x87, 0x52, 0xec, 0x1e, 0xb4, 0xdf, 0x49, 0x35, 0x26, 0xa4, 0xe8, 0xd8, 0x02, 0x07, 0x1e, 0x54, 0x6d, 0x65, 0x69, 0x86, 0xe5, 0x11, 0x5e, 0xf9, 0xd8, 0x9a, 0xe2, 0x4e, 0x6f, 0x4d, 0x9d, 0xe1, 0xab, 0xfb, 0xac, 0xa9, 0xb4, 0xfd, 0x96, 0x60, 0x6e, 0x74, 0x82, 0xe4, 0x4c, 0xd5, 0xa7, 0xde, 0x69, 0xa6, 0x03, 0xa1, 0xd5, 0x82, 0x50, 0x55, 0x2c, 0x63, 0x34, 0x54, 0x6e, 0x21, 0xb8, 0xd4, 0x0a, 0x35, 0xfb, 0xc7, 0x3c, 0xc3, 0x28, 0xff, 0x99, 0xd8, 0xa5, 0x96, 0xe9, 0xf0, 0x8d, 0x8d, 0x34, 0xbb, 0x61, 0xb3, 0x20, 0x20, 0xfa, 0xc8, 0x7a, 0x83, 0xc2, 0xe3, 0x12, 0x43, 0x24, 0x11, 0xcc, 0x87, 0x41, 0x3f, 0xf4, 0x3b, 0xe5, 0x5a, 0xd2, 0x55, 0xb9, 0xb4, 0x7e, 0x5d, 0xba, 0xaa, 0xf6, 0x2c, 0xe9, 0x84, 0x6e, 0xf4, 0x44, 0x9c, 0xe7, 0x80, 0xf6, 0xc3, 0x03, 0xbd, 0xcb, 0xe0, 0x18, 0x7a, 0xe6, 0xda, 0x83, 0x6c, 0xb6, 0xb8, 0x3f, 0x75, 0x26, 0x07, 0xb6, 0x25, 0x14, 0x7c, 0xd6, 0x82, 0x05, 0xdb, 0x68, 0x04, 0x17, 0x17, 0x9d, 0xe4, 0x37, 0xbb, 0xea, 0x97, 0x93, 0x88, 0x16, 0x95, 0x52, 0x60, 0x92, 0x5e, 0x83, 0x63, 0x08, 0xbf, 0x54, 0x57, 0x36, 0x51, 0x85, 0x4d, 0xfd, 0x44, 0x1c, 0x81, 0xb5, 0x5a, 0x59, 0x83, 0xc4, 0x36, 0xec, 0x94, 0x6f, 0xd7, 0x66, 0x53, 0xf0, 0x60, 0xee, 0x99, 0xc8, 0x1a, 0x35, 0xa1, 0x56, 0xbb, 0xac, 0x6c, 0xa9, 0xe9, 0xf4, 0x63, 0x93, 0xfa, 0x95, 0x3f, 0xfe, 0xfe, 0xf4, 0x26, 0x83, 0xff, 0x7f, 0x16, 0x39, 0x87, 0x2b, 0x87, 0xcb, 0x63, 0x20, 0x4c, 0xce, 0xa7, 0xb2, 0xbb, 0x51, 0xf2, 0x94, 0x0d, 0xb5, 0xf3, 0x48, 0x08, 0xbf, 0x2c, 0xda, 0xdb, 0xeb, 0xf6, 0xce, 0x49, 0x03, 0xc6, 0x57, 0x09, 0xf1, 0xae, 0xca, 0x6d, 0xd2, 0x27, 0x51, 0x43, 0x4b, 0x0d, 0xe4, 0xf9, 0x20, 0xeb, 0x75, 0x04, 0x02, 0x79, 0x6b, 0x81, 0xa9, 0x63, 0x52, 0x1d, 0x23, 0x4c, 0xd1, 0x33, 0x6c, 0x13, 0xdc, 0x35, 0x3e, 0x55, 0x2a, 0x4d, 0x2a, 0x33, 0xea, 0x44, 0xe8, 0x55, 0xb2, 0xa2, 0xec, 0x2e, 0xb8, 0x17, 0x39, 0x82, 0x44, 0x19, 0x7a, 0x26, 0x65, 0xcf, 0x4f, 0x08, 0xe4, 0x2e, 0xe5, 0x6f, 0x76, 0x62, 0xc9, 0x83, 0x35, 0x6f, 0xfe, 0x0f, 0x51, 0x18, 0x4d, 0x86, 0x03, 0x00, 0xdc, 0x44, 0xc3, 0x0f, 0x02, 0x17, 0xbb, 0x17, 0x5a, 0xfe, 0x7b, 0xb7, 0x16, 0x30, 0xee, 0x80, 0x96, 0x60, 0x8d, 0x57, 0x3a, 0x40, 0xd2, 0x1a, 0x74, 0x44, 0xf0, 0x87, 0x21, 0xa8, 0xc1, 0x59, 0x19, 0xb4, 0x00, 0xb3, 0x04, 0x3f, 0xb8, 0xc2, 0x70, 0x72, 0xfc, 0x9f, 0x21, 0xce, 0xd9, 0x72, 0xa8, 0x70, 0x89, 0xdd, 0x38, 0x94, 0xe9, 0x98, 0xb4, 0x59, 0x2e, 0x58, 0x0c, 0xc4, 0xd3, 0xf6, 0xca, 0x06, 0xd5, 0xcd, 0xe8, 0x02, 0x23, 0x64, 0xe5, 0x0a, 0x50, 0x4d, 0x18, 0xe9, 0x8c, 0x4c, 0x43, 0x27, 0xd2, 0xbc, 0x6b, 0x88, 0x63, 0x2f, 0xe7, 0xd6, 0x72, 0x55, 0xb8, 0xe0, 0x21, 0x1f, 0x18, 0xc3, 0xac, 0x23, 0x55, 0x68, 0xe4, 0x43, 0xe0, 0x4e, 0xe0, 0x89, 0xa1, 0x8a, 0xef, 0x56, 0x8e, 0x0c, 0xd0, 0xbc, 0x7c, 0x23, 0x26, 0x28, 0x35, 0x44, 0x26, 0x44, 0xca, 0x07, 0x93, 0x1b, 0x2b, 0x72, 0xec, 0x7f, 0xf4, 0x7a, 0xe4, 0xa7, 0x8a, 0xc7, 0x12, 0x1d, 0x67, 0xb8, 0xea, 0xd8, 0xb2, 0xa7, 0xec, 0xa4, 0x13, 0x6e, 0x1b, 0xcb, 0xc5, 0x29, 0xb1, 0xee, 0xed, 0x3e, 0x11, 0x34, 0x2a, 0x9b, 0xfd, 0xa7, 0x6d, 0x3f, 0x09, 0xda, 0x0b, 0xfc, 0x4f, 0xcf, 0x10, 0x7b, 0x65, 0x19, 0xd7, 0x80, 0x8c, 0x3e, 0xd7, 0x6f, 0x2a, 0x5f, 0xc0, 0x10, 0x7b, 0x1b, 0xc7, 0x8f, 0x83, 0xb0, 0x3d, 0xc7, 0x47, 0x63, 0x67, 0xbf, 0x3c, 0x23, 0x8a, 0x75, 0x00, 0x69, 0x45, 0xdb, 0x48, 0x62, 0x23, 0x20, 0x1a, 0x50, 0x71, 0x30, 0x3c, 0x2e, 0x4d, 0x7e, 0xec, 0x92, 0x00, 0x01, 0xd1, 0xd8, 0x8e, 0x7c, 0x32, 0x7d, 0x8b, 0x03, 0x66, 0xc9, 0x2f, 0xbb, 0x8b, 0xb1, 0xad, 0xe1, 0x7b, 0xfb, 0xc1, 0x0e, 0xfc, 0xa3, 0x88, 0xb9, 0x37, 0x7e, 0x95, 0xfd, 0x6c, 0x1d, 0x41, 0x9c, 0xe3, 0xf4, 0x42, 0x45, 0x26, 0xbb, 0x80, 0x12, 0x6d, 0x15, 0x24, 0x55, 0x5a, 0x70, 0xf1, 0x94, 0xe6, 0x2c, 0xd7, 0xd2, 0x9c, 0xff, 0xc5, 0x10, 0x05, 0x98, 0xc0, 0x14, 0x63, 0x82, 0x32, 0x69, 0xa1, 0x4c, 0x84, 0xa7, 0x8b, 0xe7, 0xee, 0xf5, 0x3b, 0x4f, 0x8e, 0xcb, 0xd3, 0x6d, 0xb8, 0xfd, 0x72, 0x3d, 0x8e, 0xf5, 0x60, 0x2c, 0xd0, 0x3f, 0x8c, 0xc4, 0xf5, 0x4c, 0x39, 0x8a, 0x7a, 0x6f, 0xf4, 0x27, 0x7a, 0x2c, 0xc9, 0xc7, 0x7f, 0xb2, 0xb6, 0xbf, 0x98, 0xa6, 0x60, 0x72, 0xab, 0x22, 0x05, 0x75, 0x0d, 0xfe, 0xb2, 0xf1, 0x50, 0x4e, 0xb6, 0x49, 0x5c, 0x2b, 0x56, 0xfd, 0xc1, 0xb7, 0xc2, 0xcf, 0x4c, 0x5b, 0x48, 0x24, 0xd9, 0x53, 0xc8, 0xac, 0x67, 0x6d, 0x68, 0x45, 0x72, 0x0d, 0x88, 0x1d, 0x7d, 0x75, 0xf9, 0x17, 0xee, 0x43, 0x69, 0x71, 0x1e, 0x3b, 0x22, 0xa3, 0xb1, 0x47, 0xf5, 0x8a, 0x23, 0xbc, 0x70, 0xc5, 0xa4, 0xdf, 0x58, 0x60, 0x26, 0xa8, 0x53, 0xaf, 0xb4, 0xc6, 0xe4, 0x7d, 0x05, 0xe2, 0x9c, 0x67, 0x51, 0x28, 0x8f, 0x82, 0x63, 0x04, 0x06, 0x44, 0xf0, 0x29, 0x73, 0xa1, 0x27, 0xd8, 0xaa, 0x74, 0x89, 0x5f, 0x4d, 0x21, 0xfb, 0xe0, 0x88, 0x78, 0x19, 0x53, 0xff, 0xdd, 0xce, 0xce, 0x05, 0xa6, 0x21, 0x04, 0x0f, 0xc5, 0x52, 0x0d, 0x68, 0xa7, 0x26, 0x65, 0x26, 0x5c, 0x7f, 0x36, 0x5c, 0xf7, 0x2f, 0xda, 0x91, 0x38, 0x0e, 0x9b, 0x71, 0x68, 0x4b, 0xbe, 0xc3, 0x85, 0xff, 0xc1, 0x9b, 0x9f, 0x08, 0xe0, 0xd1, 0x82, 0x14, 0xde, 0xb1, 0x95, 0xfc, 0x01, 0xf4, 0x02, 0x54, 0x5f, 0xf0, 0x17, 0x40, 0x58, 0x0b, 0xed, 0x88, 0x64, 0x75, 0x47, 0xef, 0x0f, 0x17, 0xbc, 0xc1, 0x41, 0xc6, 0x19, 0xac, 0xc3, 0xbd, 0x01, 0xd0, 0xff, 0x4a, 0xd6, 0x19, 0x07, 0xc7, 0xdd, 0xcd, 0xd9, 0xcc, 0x9c, 0x61, 0xe2, 0xa3, 0x87, 0x91, 0xc0, 0xfc, 0xdc, 0xb0, 0x4c, 0xe2, 0xcc, 0x3c, 0xd8, 0xee, 0xdb, 0xb5, 0xb5, 0xbb, 0x89, 0xaf, 0xf9, 0x99, 0x32, 0x27, 0x7e, 0x86, 0x33, 0x13, 0x2e, 0x5a, 0x4e, 0x3c, 0x7e, 0x41, 0x50, 0x50, 0x39, 0x6e, 0xf0, 0x33, 0x7f, 0x0e, 0xfb, 0x97, 0x0d, 0x7b, 0xae, 0xcc, 0xbf, 0xb3, 0x63, 0xd9, 0x52, 0x08, 0x71, 0xcb, 0x6f, 0x19, 0x4d, 0x4d, 0xe5, 0x00, 0xf5, 0x79, 0x37, 0xcd, 0x8e, 0xee, 0x56, 0x34, 0x4b, 0x23, 0xaf, 0x82, 0x92, 0xfb, 0x68, 0xd5, 0x5a, 0x99, 0xe7, 0x8d, 0xd8, 0x75, 0x95, 0xfe, 0x5a, 0xaf, 0xe1, 0x67, 0x73, 0xa4, 0x87, 0x28, 0x58, 0xc0, 0x12, 0x2f, 0x8a, 0x93, 0x9f, 0xb4, 0xb5, 0x26, 0xe5, 0x26, 0xd8, 0x8f, 0x72, 0x65, 0xa7, 0xc3, 0x37, 0x31, 0x2e, 0xac, 0x47, 0xe3, 0xb6, 0x7b, 0xdc, 0x5a, 0xec, 0x40, 0x9b, 0x39, 0x40, 0xb7, 0x19, 0x50, 0x8c, 0x65, 0x9d, 0x57, 0xf6, 0xe4, 0x28, 0xe2, 0x17, 0x7c, 0xb2, 0x91, 0x5d, 0xf3, 0xb7, 0x87, 0xad, 0xa5, 0xf2, 0x1e, 0x4d, 0xd7, 0x69, 0xd9, 0x02, 0x48, 0xa9, 0x9b, 0x75, 0x09, 0x53, 0x16, 0xdb, 0x8f, 0xd7, 0x85, 0xd5, 0x07, 0x80, 0x9e, 0x95, 0xe9, 0xb1, 0xc2, 0x43, 0xd0, 0x6e, 0x78, 0x9f, 0x89, 0x1d, 0x19, 0xe7, 0x69, 0x8e, 0xcd, 0xfb, 0xe4, 0x3a, 0xb5, 0xbf, 0x5c, 0xc8, 0x6a, 0xc1, 0x37, 0xd6, 0xa7, 0x1c, 0x34, 0xf5, 0x42, 0x9c, 0xff, 0xf5, 0x61, 0x22, 0x03, 0x64, 0xea, 0x4a, 0x7f, 0x51, 0x3b, 0x4c, 0xdc, 0x55, 0x1c, 0x20, 0x3e, 0xd5, 0xf1, 0xe6, 0x59, 0x81, 0x35, 0x84, 0x86, 0x20, 0x23, 0x91, 0x15, 0x90, 0xb6, 0x72, 0xe5, 0x08, 0xd4, 0xc2, 0x33, 0xa1, 0xc6, 0xf8, 0xb0, 0x15, 0xec, 0x43, 0xd6, 0xc6, 0xaf, 0xb9, 0x7b, 0x02, 0xb6, 0xb1, 0xa7, 0x85, 0x5d, 0x6d, 0xa3, 0x3f, 0x63, 0xfd, 0x52, 0x58, 0xe2, 0x5f, 0xc4, 0x72, 0x85, 0xeb, 0x09, 0x2e, 0xf5, 0xef, 0x43, 0xf1, 0x94, 0x96, 0xff, 0xe8, 0x6e, 0x0e, 0xc6, 0x49, 0x6d, 0xe9, 0xee, 0xdc, 0xcc, 0xc4, 0xb6, 0xbb, 0xcd, 0x27, 0x93, 0x56, 0xaf, 0xad, 0xc4, 0xb9, 0xda, 0x65, 0x2c, 0x12, 0x5e, 0x77, 0x61, 0x6d, 0x9b, 0x0b, 0x01, 0xc3, 0x41, 0x66, 0x45, 0x33, 0x7c, 0x56, 0xd8, 0x8f, 0x68, 0xd1, 0xe9, 0x1a, 0xcb, 0xd9, 0x7f, 0x90, 0x03, 0xa2, 0x0c, 0x67, 0x3d, 0xf7, 0x46, 0x55, 0xe8, 0xda, 0x32, 0x12, 0x6a, 0x6b, 0x81, 0x5f, 0x11, 0x0b, 0x20, 0x47, 0x4c, 0xc0, 0x0b, 0xa5, 0x1b, 0xdb, 0x62, 0xe6, 0xc4, 0xd9, 0xbe, 0x10, 0xc8, 0x88, 0xc5, 0x03, 0x15, 0x6b, 0xfc, 0x00, 0x7d, 0x5e, 0xdd, 0x67, 0x67, 0x7d, 0x2a, 0xc5, 0xc4, 0x43, 0x80, 0x0d, 0x45, 0xef, 0x2f, 0x26, 0xcb, 0x2c, 0x49, 0xa6, 0x20, 0xf0, 0xf9, 0xde, 0xe4, 0xa5, 0x16, 0x16, 0xca, 0x87, 0xf8, 0x19, 0x04, 0x4d, 0x8b, 0xf5, 0xfb, 0x0b, 0xa1, 0xfc, 0x44, 0x57, 0x8d, 0x0e, 0xcf, 0xab, 0xed, 0x1b, 0x62, 0x0a, 0xc7, 0xe3, 0x46, 0xe6, 0xd8, 0x00, 0x41, 0x42, 0x28, 0x27, 0xc4, 0x14, 0xe2, 0xab, 0x64, 0xed, 0x63, 0x42, 0x8e, 0xdb, 0x91, 0x0c, 0x77, 0x8f, 0x6e, 0xd1, 0x53, 0xbb, 0xed, 0x8b, 0xc7, 0xbe, 0x04, 0x24, 0xa0, 0x83, 0x02, 0x80, 0xc5, 0xa6, 0x23, 0xbe, 0x6a, 0xd9, 0x61, 0xbb, 0x87, 0x87, 0x8e, 0xd8, 0x89, 0xb7, 0xa0, 0xfe, 0x47, 0x32, 0x4c, 0xdf, 0x37, 0xe8, 0xd6, 0x7e, 0xe2, 0x90, 0x27, 0xf1, 0x95, 0x8f, 0x20, 0x65, 0x5a, 0x1b, 0x2e, 0x64, 0x26, 0xa0, 0x1e, 0x53, 0x54, 0x62, 0x33, 0x3f, 0x52, 0x65, 0x76, 0xd9, 0x9b, 0x8a, 0x4e, 0xbe, 0xe5, 0xfa, 0x50, 0xfc, 0x9b, 0xc7, 0x58, 0xd2, 0x8d, 0xd1, 0xd9, 0xb8, 0xe7, 0xe7, 0x71, 0x9f, 0x5f, 0x2f, 0xc1, 0x7a, 0xb3, 0xc8, 0x7b, 0xfd, 0x53, 0xad, 0xbc, 0xa5, 0x5a, 0xdd, 0x9d, 0xf8, 0xc3, 0xb9, 0x05, 0x0e, 0xda, 0xad, 0xc1, 0x50, 0xf0, 0x12, 0xd6, 0x80, 0x53, 0x53, 0x15, 0xfa, 0x7e, 0x4f, 0xf1, 0x39, 0x8c, 0xff, 0x8e, 0x9c, 0xf3, 0x59, 0x1a, 0x6a, 0x6e, 0x74, 0x60, 0x15, 0x3b, 0xec, 0x9a, 0xbb, 0x87, 0x88, 0x87, 0xf2, 0x27, 0x1a, 0xbe, 0xc5, 0x88, 0xa7, 0x42, 0xfa, 0xe9, 0xc8, 0x56, 0x97, 0xc7, 0x50, 0x93, 0xa4, 0x99, 0x2f, 0x37, 0x31, 0xbe, 0x97, 0xc0, 0x9b, 0xb4, 0x5d, 0xba, 0x0c, 0x8a, 0xa1, 0xd5, 0x41, 0x98, 0xb1, 0x3a, 0x90, 0x6d, 0x2b, 0x1f, 0x29, 0x09, 0x62, 0x99, 0x9c, 0x4d, 0x03, 0xb2, 0x9b, 0xaf, 0xf9, 0xbc, 0x01, 0x32, 0x8d, 0xe5, 0x14, 0x96, 0xd2, 0x0b, 0x07, 0xcb, 0x40, 0xd1, 0xc4, 0xac, 0x9f, 0xf2, 0xe8, 0xea, 0x27, 0xd5, 0x0e, 0x46, 0xe5, 0x62, 0x50, 0x04, 0x60, 0x15, 0x0b, 0x9c, 0x7d, 0x50, 0xe3, 0xb2, 0xa0, 0xf6, 0x07, 0x48, 0x14, 0x35, 0xb6, 0x33, 0xad, 0xa3, 0x03, 0xcb, 0xab, 0x8d, 0xd5, 0xe7, 0xe2, 0x8b, 0x31, 0x09, 0x18, 0x58, 0xbc, 0xd5, 0xaf, 0xe1, 0x7b, 0xc8, 0x84, 0x9c, 0xde, 0x26, 0x16, 0x1b, 0xfd, 0x34, 0xeb, 0xe1, 0x21, 0xa8, 0x2f, 0x74, 0x86, 0x5e, 0x9f, 0xb4, 0x5f, 0x4c, 0xa5, 0x6a, 0x1b, 0xb8, 0xc4, 0x24, 0xe7, 0xa8, 0x37, 0x41, 0x74, 0x9b, 0xd5, 0x48, 0xfa, 0x76, 0x38, 0x7e, 0x7d, 0xc1, 0x1e, 0xb7, 0x4f, 0x13, 0x0f, 0x6c, 0xd6, 0xcb, 0x41, 0x0e, 0x8f, 0x01, 0xb8, 0x9a, 0x53, 0xbd, 0xb1, 0x6e, 0xd9, 0x66, 0x41, 0x5b, 0x7d, 0x7d, 0x3a, 0xfb, 0x3f, 0x8b, 0x4e, 0x44, 0x0f, 0x57, 0x77, 0x5e, 0x48, 0x5d, 0x96, 0xb2, 0x7a, 0x7c, 0x5a, 0x44, 0x6c, 0xef, 0x63, 0x42, 0x61, 0x7e, 0xa7, 0xdd, 0x9b, 0xf5, 0x15, 0x57, 0x1e, 0xd6, 0x79, 0x5d, 0xb6, 0x4b, 0xa0, 0x98, 0x3b, 0x5e, 0xbc, 0x7f, 0x14, 0x6c, 0x09, 0x6f, 0xfa, 0xd7, 0xb1, 0xfd, 0xfe, 0xfc, 0xee, 0x8b, 0xce, 0x65, 0x6e, 0x19, 0x34, 0x3f, 0xfb, 0x5e, 0xdf, 0x0e, 0x5b, 0x17, 0x66, 0x9f, 0x75, 0xa0, 0x8a, 0x3e, 0xb6, 0xc1, 0xbc, 0x2a, 0xb3, 0xca, 0xdf, 0x46, 0x10, 0xe2, 0x4e, 0x11, 0xa0, 0x9c, 0x21, 0xd8, 0xcd, 0xcb, 0xac, 0x2b, 0x3b, 0x98, 0x49, 0x8d, 0xa8, 0xd1, 0x58, 0x6f, 0x17, 0x84, 0x83, 0x60, 0x2d, 0xcd, 0x47, 0x7e, 0xdb, 0xec, 0xaf, 0x30, 0x3d, 0x9a, 0x63, 0x17, 0xc2, 0x9e, 0xe2, 0x41, 0x8e, 0x9b, 0x0c, 0xa0, 0x1c, 0x2c, 0xe3, 0xbb, 0x28, 0x32, 0x92, 0xa4, 0xcc, 0x6d, 0xaf, 0x2a, 0xe9, 0x4a, 0xbd, 0x4f, 0xc8, 0xfc, 0xf5, 0xfd, 0x01, 0xce, 0x46, 0xf4, 0x9c, 0xb8, 0x9a, 0x07, 0x77, 0x30, 0x5b, 0x88, 0xe7, 0x42, 0x35, 0x01, 0xa2, 0xe3, 0x1e, 0x24, 0xdd, 0x83, 0x94, 0x05, 0xb1, 0xe1, 0x26, 0x87, 0xc3, 0x23, 0x36, 0x14, 0x24, 0x26, 0xfd, 0x92, 0x76, 0x13, 0xd0, 0x92, 0x51, 0x33, 0xa1, 0xca, 0xe5, 0x04, 0xc8, 0xc5, 0xe0, 0x8c, 0x04, 0xd9, 0x92, 0xed, 0xbc, 0x5a, 0x4e, 0x3a, 0x8b, 0x0d, 0x14, 0x89, 0xfc, 0xdf, 0x6e, 0x49, 0x92, 0xd7, 0x98, 0xd6, 0x0c, 0x4a, 0xe3, 0x4b, 0xe6, 0x4e, 0x5b, 0x98, 0x23, 0x70, 0xa8, 0xd4, 0x4a, 0xaa, 0x32, 0xd4, 0xaf, 0x8f, 0x89, 0xfc, 0xf3, 0xc9, 0x03, 0x55, 0xce, 0xc5, 0xa7, 0xe0, 0x0c, 0xad, 0x49, 0x2a, 0xd6, 0x97, 0xf7, 0x21, 0x33, 0xfc, 0x94, 0x26, 0xcf, 0x6b, 0xc3, 0x63, 0xfa, 0x7e, 0x07, 0x5f, 0xf3, 0x0e, 0x28, 0xcf, 0x67, 0xa3, 0xd8, 0xb0, 0x35, 0x2e, 0x96, 0x92, 0x74, 0xfb, 0xd3, 0x37, 0xb7, 0xe1, 0x53, 0x5c, 0x8f, 0xbc, 0xd7, 0xd7, 0x52, 0x1d, 0xf9, 0xe2, 0x1b, 0x3f, 0x57, 0xb7, 0x12, 0x3d, 0xf3, 0x5d, 0xee, 0x83, 0xda, 0xc1, 0xb8, 0x82, 0x04, 0x08, 0xd1, 0xa9, 0x7c, 0x24, 0x36, 0x90, 0xc0, 0xa5, 0x03, 0x76, 0x6b, 0xd2, 0x36, 0xed, 0x11, 0xf9, 0xb6, 0xd4, 0x6b, 0x03, 0x94, 0x86, 0xb4, 0x4b, 0x90, 0x51, 0x52, 0xb1, 0xdf, 0x2a, 0xb9, 0xea, 0x2b, 0x9e, 0x8d, 0x1a, 0xdc, 0x0c, 0x06, 0xa4, 0x96, 0x12, 0x99, 0x40, 0x02, 0x45, 0xd5, 0x4f, 0xd2, 0x25, 0x8b, 0x6c, 0xff, 0x50, 0x31, 0x44, 0x55, 0xf5, 0x88, 0xa7, 0x32, 0x8c, 0x7d, 0xdf, 0x8b, 0xc4, 0x4d, 0x40, 0x2f, 0xbd, 0xed, 0x00, 0x50, 0x78, 0xa9, 0x49, 0x3f, 0x8c, 0x0b, 0x8d, 0x77, 0x1a, 0xfe, 0x1a, 0xdd, 0x02, 0x33, 0xee, 0x46, 0x57, 0xc4, 0xcc, 0x3a, 0x11, 0x18, 0x8f, 0xf8, 0x02, 0x06, 0xbf, 0xb9, 0x0c, 0x3d, 0x62, 0x39, 0x90, 0xe3, 0x14, 0x74, 0x29, 0x7c, 0x5a, 0xad, 0x9b, 0x0e, 0x34, 0xb5, 0x06, 0x82, 0xf1, 0x6a, 0x60, 0x4e, 0x47, 0x7e, 0x21, 0x51, 0xa3, 0x7a, 0x40, 0xfe, 0xbe, 0x02, 0x5f, 0xbd, 0x71, 0x5a, 0x43, 0x8e, 0xca, 0x29, 0x86, 0xf0, 0x5f, 0x7d, 0x90, 0x01, 0xe2, 0x10, 0xc3, 0xe6, 0xf6, 0xca, 0xf6, 0x6d, 0x41, 0x86, 0x25, 0xf1, 0xc3, 0x19, 0x66, 0x7f, 0x66, 0x90, 0x1f, 0x36, 0xd6, 0xba, 0x77, 0xf4, 0x92, 0xe7, 0x0a, 0x2f, 0x44, 0xee, 0xe1, 0x20, 0x4e, 0x75, 0xa1, 0x27, 0xa5, 0x6c, 0x02, 0x6b, 0xe2, 0xdb, 0x83, 0xc1, 0x96, 0xde, 0x5d, 0xcf, 0xde, 0xed, 0xb5, 0x71, 0x38, 0x61, 0x15, 0x5b, 0x95, 0x34, 0x1d, 0x00, 0xb0, 0x09, 0x76, 0xb3, 0x9d, 0x6c, 0x08, 0x0c, 0xa5, 0x5a, 0x6d, 0x8e, 0x51, 0x04, 0xa5, 0x86, 0xc5, 0xd0, 0x0b, 0x36, 0x4f, 0xa1, 0x87, 0x33, 0x40, 0x58, 0x06, 0x0c, 0xfb, 0x9b, 0x27, 0x2c, 0x4b, 0xd5, 0x37, 0x02, 0xfa, 0x7d, 0x60, 0x5f, 0x9f, 0x9c, 0x1d, 0x1f, 0xb7, 0x89, 0xf1, 0x0b, 0xf7, 0xf7, 0x59, 0xfe, 0xe1, 0x32, 0xff, 0x47, 0x96, 0xa6, 0x30, 0x4f, 0xeb, 0xa1, 0x90, 0x7c, 0xbe, 0x5a, 0x0d, 0x54, 0x8b, 0x31, 0x11, 0xe6, 0x3a, 0x38, 0xfc, 0x65, 0x3b, 0xf3, 0xd1, 0x17, 0xd5, 0x5c, 0x2f, 0x6d, 0xbb, 0x2a, 0x84, 0x74, 0xe1, 0x53, 0x7d, 0x6c, 0x8d, 0xd0, 0xc1, 0xb5, 0xb1, 0xa0, 0xde, 0xf3, 0x78, 0x0f, 0x83, 0x6a, 0x1f, 0x38, 0xf1, 0xaa, 0x06, 0xc9, 0xac, 0x71, 0x07, 0x06, 0x76, 0xcd, 0x06, 0x11, 0x7d, 0x81, 0xc9, 0x68, 0xd4, 0xaa, 0x0a, 0xaf, 0x20, 0xa2, 0xcb, 0xb0, 0x94, 0x25, 0xea, 0xa0, 0x1f, 0xb2, 0xf5, 0xa3, 0xe3, 0x34, 0x3f, 0x93, 0xea, 0xe2, 0x34, 0xfd, 0x14, 0x64, 0xe9, 0x6d, 0x54, 0x37, 0xf8, 0xec, 0x1c, 0x52, 0x8a, 0xc6, 0x16, 0x0a, 0xb5, 0x91, 0x15, 0x33, 0x09, 0x6a, 0x4b, 0x88, 0x65, 0x82, 0xbc, 0x4d, 0x0f, 0xda, 0xf2, 0x32, 0x04, 0x4a, 0xf3, 0x7b, 0x8d, 0xc8, 0x70, 0x5e, 0x13, 0xe7, 0x3f, 0xac, 0x34, 0x9e, 0x0c, 0xb4, 0x17, 0x4b, 0x4b, 0x65, 0xfc, 0xf7, 0x70, 0xb2, 0x17, 0xdc, 0x63, 0x3b, 0x9e, 0x24, 0x2e, 0x29, 0x21, 0xf4, 0xf9, 0x59, 0x1a, 0xa9, 0x39, 0xbe, 0xc5, 0x62, 0x24, 0x00, 0x31, 0xbe, 0x68, 0x69, 0x97, 0xe7, 0x1c, 0x02, 0xec, 0xcf, 0xf7, 0xf9, 0xb2, 0xb9, 0xc0, 0x46, 0x13, 0xfc, 0x05, 0x8e, 0x30, 0x03, 0x10, 0x48, 0xb7, 0x99, 0x17, 0x1e, 0xb3, 0x63, 0xb3, 0x96, 0xa9, 0xae, 0x93, 0xf1, 0xe0, 0x6c, 0x72, 0x54, 0x00, 0x78, 0x46, 0x25, 0xdf, 0x22, 0xbb, 0xb8, 0x97, 0xe7, 0xdf, 0x2b, 0xdc, 0x80, 0x1f, 0x8e, 0x8c, 0x1f, 0x72, 0x47, 0x88, 0xf5, 0xd4, 0xb5, 0xc3, 0xf7, 0xf6, 0x14, 0x98, 0xe2, 0x34, 0xa1, 0x61, 0x7c, 0xc7, 0xfe, 0x45, 0x1d, 0x3c, 0xd7, 0x51, 0x6f, 0x24, 0xc6, 0xca, 0x72, 0x0e, 0x74, 0xc2, 0xc3, 0xb2, 0x02, 0xea, 0x1d, 0x6f, 0xa7, 0xa7, 0x20, 0xf8, 0x9a, 0x68, 0x51, 0x4a, 0x32, 0x36, 0x63, 0xe1, 0x4b, 0x8d, 0xb5, 0x2b, 0xed, 0x6a, 0x1b, 0x3d, 0x28, 0xa5, 0xe1, 0xc5, 0x42, 0x81, 0x0d, 0x3f, 0x15, 0x82, 0xe5, 0x6c, 0xb2, 0x7e, 0xb1, 0x00, 0x4a, 0xf7, 0xc2, 0x9b, 0x4f, 0xa8, 0xb3, 0xfb, 0xd6, 0x5e, 0xef, 0x70, 0x40, 0x09, 0x73, 0x90, 0x19, 0x13, 0xd6, 0x2b, 0x40, 0xf0, 0x86, 0x82, 0x48, 0xf7, 0x54, 0xb3, 0x1f, 0x70, 0x33, 0x78, 0xed, 0xee, 0x3c, 0x11, 0x3f, 0xdf, 0xf6, 0x7f, 0x65, 0x61, 0xd5, 0xf3, 0x18, 0x57, 0x00, 0x86, 0x61, 0xbc, 0x57, 0x2a, 0xb6, 0x38, 0xb5, 0xe1, 0x65, 0xf1, 0x72, 0x2d, 0x36, 0xa4, 0x2d, 0xc7, 0x4b, 0xf4, 0xc8, 0x93, 0x4c, 0x02, 0xb3, 0xd4, 0xc1, 0x3d, 0x6e, 0x9d, 0xbf, 0x7c, 0x49, 0x88, 0xc7, 0x4a, 0x6f, 0xa9, 0xeb, 0x80, 0x22, 0xc5, 0x32, 0x1a, 0x48, 0xc0, 0x3e, 0x43, 0x27, 0x55, 0x2c, 0xb2, 0x6d, 0x0a, 0xbc, 0x39, 0x73, 0x62, 0xb2, 0x9b, 0xc2, 0x54, 0x7c, 0x9f, 0xd7, 0xfc, 0x14, 0x62, 0x23, 0x91, 0x28, 0xf1, 0x56, 0x97, 0x79, 0x17, 0xdd, 0x55, 0x81, 0x74, 0xa9, 0x8a, 0x58, 0xcf, 0x33, 0x5c, 0xd8, 0xae, 0xbd, 0x91, 0x00, 0x23, 0xda, 0x01, 0x96, 0xe8, 0x30, 0x4b, 0x10, 0xae, 0x7d, 0xc8, 0xb5, 0xb3, 0xd8, 0xbd, 0x00, 0x93, 0x3a, 0xd5, 0x45, 0x60, 0x3c, 0xce, 0x96, 0xf4, 0x22, 0x72, 0xe8, 0x86, 0x19, 0xc9, 0x72, 0x7c, 0xbd, 0x8d, 0x56, 0x80, 0xde, 0xde, 0x83, 0xd6, 0x84, 0x37, 0xda, 0xed, 0x30, 0xa1, 0x90, 0x34, 0x65, 0x26, 0xd3, 0x2e, 0x67, 0x89, 0xb0, 0xc9, 0x43, 0x34, 0x34, 0xec, 0x0f, 0x72, 0xd1, 0x4f, 0x73, 0xde, 0x04, 0x8f, 0x69, 0x1c, 0x35, 0x82, 0x40, 0xc6, 0xdf, 0xc8, 0xe7, 0xa9, 0xf0, 0xa2, 0x68, 0x32, 0x73, 0x07, 0xb3, 0x23, 0x6c, 0xf5, 0x9d, 0x8a, 0x03, 0x06, 0x28, 0xf4, 0xe5, 0x43, 0x05, 0xde, 0xe8, 0x3c, 0x57, 0x6c, 0xee, 0x59, 0xba, 0x5e, 0x0b, 0x6b, 0x84, 0x3f, 0xea, 0x86, 0x4b, 0xdf, 0x6c, 0x13, 0xa7, 0x04, 0x93, 0x21, 0x38, 0x5d, 0x9f, 0xfc, 0xeb, 0xb7, 0x76, 0x01, 0x7a, 0x73, 0x49, 0xb0, 0x32, 0x38, 0x75, 0x03, 0xf9, 0xe5, 0xa7, 0xfe, 0x8f, 0xca, 0x44, 0x88, 0x14, 0x17, 0x08, 0x79, 0xcb, 0x94, 0xed, 0xf4, 0x1d, 0x93, 0x4e, 0xf7, 0xe1, 0x24, 0x4c, 0x30, 0xda, 0x87, 0x71, 0x13, 0x81, 0xe7, 0x93, 0x29, 0x05, 0x45, 0xfb, 0xab, 0x91, 0xb2, 0xc7, 0x4f, 0xcd, 0xc1, 0x8d, 0x62, 0xa7, 0x3c, 0x41, 0x17, 0x53, 0x16, 0x59, 0x1f, 0x90, 0xa1, 0x2e, 0x79, 0x2e, 0x01, 0xa6, 0x8c, 0xcd, 0xe1, 0x10, 0x73, 0xe7, 0x64, 0x4f, 0x98, 0x11, 0x5e, 0x3b, 0x84, 0x7d, 0xc5, 0x44, 0xf5, 0xc4, 0x62, 0x59, 0x31, 0xe2, 0xcc, 0x08, 0x9b, 0x82, 0x97, 0xe6, 0x84, 0x7d, 0xc9, 0x31, 0x43, 0x9d, 0x8d, 0xb4, 0x88, 0xa6, 0x2c, 0xeb, 0xed, 0x97, 0x38, 0x68, 0xce, 0x2d, 0x0b, 0x75, 0x5b, 0xa9, 0x70, 0xfb, 0xeb, 0xd3, 0x9f, 0xa2, 0x94, 0x3f, 0x6f, 0x3a, 0xf8, 0xcf, 0xc7, 0x5a, 0x61, 0x79, 0x55, 0x46, 0x11, 0x4a, 0x83, 0x16, 0xd3, 0xab, 0xa7, 0x15, 0xd6, 0xe4, 0x7a, 0x68, 0xbb, 0xde, 0xcc, 0xf0, 0xed, 0x2d, 0x76, 0x71, 0x31, 0x4d, 0x8f, 0xf3, 0x7e, 0x2c, 0xe3, 0x68, 0x0e, 0xe9, 0xa0, 0x90, 0xb5, 0xdc, 0x53, 0x1a, 0x72, 0xd6, 0x13, 0x0c, 0x44, 0xaa, 0xfc, 0x64, 0x3e, 0xec, 0xe0, 0xff, 0xde, 0xf8, 0x38, 0xbb, 0x9b, 0x36, 0x61, 0xd9, 0xbd, 0x9d, 0x05, 0xa5, 0x71, 0x76, 0xd7, 0x58, 0x1d, 0x63, 0x83, 0x3d, 0xf1, 0x9f, 0xe4, 0x13, 0xbf, 0x87, 0x78, 0xb3, 0x0c, 0x5a, 0x12, 0xf2, 0x67, 0x3d, 0xcf, 0xc9, 0xf9, 0x82, 0x4b, 0xb3, 0x5e, 0x29, 0x15, 0x57, 0xb3, 0xa7, 0x60, 0x67, 0xf0, 0xe7, 0xfb, 0xc8, 0x78, 0x8f, 0x83, 0xf3, 0xef, 0x84, 0xd7, 0x9b, 0x4c, 0xb0, 0xcc, 0x90, 0x2f, 0x03, 0x22, 0xe3, 0x74, 0xb7, 0xb7, 0x4b, 0x08, 0xd9, 0xfb, 0xc7, 0xfb, 0x05, 0xa4, 0x85, 0xd7, 0x71, 0xa3, 0x03, 0x31, 0x2c, 0x56, 0x74, 0x7d, 0xa8, 0xff, 0x65, 0x27, 0x77, 0x75, 0xa0, 0xdf, 0x52, 0x19, 0x50, 0x34, 0x5f, 0x0c, 0x67, 0x64, 0xb4, 0x9f, 0x3d, 0x72, 0x17, 0x0b, 0x79, 0x7a, 0x07, 0x63, 0x35, 0x42, 0x01, 0xc6, 0x5d, 0x11, 0xfc, 0xd9, 0x58, 0xc4, 0x36, 0x74, 0xeb, 0x1e, 0x32, 0x9c, 0x5a, 0x60, 0x01, 0xb2, 0xd0, 0x19, 0xc2, 0xe9, 0x00, 0x40, 0x65, 0xfe, 0x0d, 0x80, 0xb4, 0x23, 0xa7, 0xd3, 0x93, 0x3c, 0x78, 0x52, 0x86, 0x4d, 0xbe, 0x4c, 0x75, 0x33, 0x39, 0x95, 0xac, 0x93, 0x47, 0x20, 0x26, 0x11, 0x4e, 0xd0, 0x0b, 0xc2, 0x5a, 0x8c, 0x77, 0xe3, 0x07, 0x92, 0x7d, 0xcb, 0xa2, 0x0d, 0x6c, 0x1e, 0x8b, 0xe9, 0x50, 0x44, 0xdd, 0xe6, 0xbc, 0x19, 0x51, 0xeb, 0xc7, 0xe6, 0x60, 0x9e, 0x55, 0x91, 0xa8, 0x31, 0x98, 0x10, 0x91, 0x7e, 0xd6, 0x23, 0x30, 0x57, 0x6c, 0x43, 0x6c, 0x17, 0x13, 0xd5, 0x5f, 0x7d, 0x62, 0xa4, 0xff, 0xbb, 0x94, 0x8e, 0xfd, 0xc9, 0x8c, 0x7e, 0xed, 0xff, 0x16, 0x9a, 0xa8, 0xe3, 0x70, 0xbd, 0xee, 0x40, 0x09, 0x27, 0x50, 0x78, 0x88, 0x73, 0x4d, 0x1a, 0x10, 0xca, 0xbc, 0xb7, 0xc2, 0x57, 0x6a, 0xf2, 0x84, 0xfa, 0x03, 0xd7, 0x01, 0x41, 0x36, 0x6e, 0xf1, 0x94, 0x14, 0x8f, 0x9b, 0xaf, 0xb9, 0xf7, 0x98, 0x56, 0x2f, 0x9c, 0xd9, 0x43, 0x8f, 0x3e, 0xec, 0x64, 0x69, 0x3f, 0x7a, 0x43, 0x66, 0xb4, 0x15, 0xc6, 0x2c, 0xbc, 0x30, 0x18, 0x82, 0x11, 0x6f, 0xe7, 0xb5, 0xdc, 0x22, 0xd0, 0x3a, 0xce, 0x0c, 0x17, 0x94, 0x6c, 0x68, 0x9c, 0x79, 0xaa, 0x2e, 0x0a, 0x30, 0xbc, 0x92, 0x52, 0x3d, 0x29, 0xcd, 0x58, 0x40, 0x21, 0x21, 0xeb, 0x1b, 0x10, 0x17, 0xfb, 0x53, 0x73, 0x0c, 0x06, 0xb9, 0xeb, 0xeb, 0xd4, 0x49, 0x8f, 0x3c, 0x64, 0x52, 0x87, 0x5e, 0x26, 0xd7, 0xd7, 0x10, 0x6b, 0x35, 0x78, 0x37, 0x19, 0x07, 0xad, 0xdb, 0xa3, 0x47, 0x94, 0x72, 0x38, 0xb6, 0xfb, 0x61, 0x3b, 0x7d, 0x76, 0xc0, 0xf4, 0x14, 0xae, 0x5d, 0x85, 0x63, 0xfc, 0x04, 0x1f, 0x27, 0x37, 0xfe, 0x75, 0x98, 0xca, 0xd8, 0x71, 0x49, 0x09, 0x66, 0x26, 0x4f, 0xc5, 0x06, 0x07, 0xa5, 0x1d, 0x29, 0x56, 0xcf, 0x98, 0x10, 0xdf, 0xbe, 0x71, 0xd4, 0xe5, 0xf4, 0x32, 0xa9, 0x5d, 0xe8, 0x84, 0x63, 0x5a, 0xac, 0x46, 0x3a, 0xc9, 0xcd, 0xdc, 0xca, 0x5e, 0x7b, 0xca, 0x5e, 0xce, 0xe9, 0x81, 0x6d, 0x3f, 0xf7, 0x78, 0x65, 0xfc, 0x0f, 0x7f, 0xa8, 0x6e, 0x4c, 0x51, 0xd4, 0x48, 0xe2, 0x68, 0x48, 0x01, 0xba, 0x15, 0xe4, 0x87, 0x5c, 0xcf, 0x0f, 0x32, 0x12, 0xcc, 0xff, 0xf6, 0x4a, 0xce, 0x35, 0xde, 0x3d, 0x40, 0x46, 0xb5, 0xce, 0x81, 0xe1, 0x06, 0xb5, 0x80, 0x0e, 0x48, 0xdc, 0x89, 0xb4, 0x52, 0x09, 0x5e, 0x5e, 0x15, 0xbe, 0x8a, 0x3e, 0x89, 0x5e, 0xf2, 0x73, 0xe8, 0x90, 0xad, 0x87, 0x1b, 0xe8, 0x15, 0x3c, 0x71, 0xc5, 0x1e, 0x88, 0x97, 0x75, 0xe7, 0xde, 0xc5, 0xa0, 0x8f, 0xaf, 0x35, 0xe3, 0x4a, 0x31, 0xd9, 0xbb, 0xb4, 0x5f, 0x4d, 0xa5, 0x65, 0x41, 0x0b, 0x83, 0xc5, 0x6d, 0xde, 0x42, 0x21, 0xce, 0x99, 0xba ],
+const [ 0xa2, 0x4a, 0x4c, 0xc2, 0x9e, 0x44, 0xd5, 0x03, 0x86, 0xc9, 0xca, 0xda, 0x21, 0xd7, 0x41, 0xd3, 0x5c, 0xf8, 0xaa, 0x71, 0x3c, 0x6a, 0x5f, 0x72, 0x16, 0x7e, 0x7c, 0x55, 0x02, 0x3e, 0xf0, 0x1a, 0x8d, 0x52, 0xd4, 0x49, 0xae, 0x25, 0xfc, 0x35, 0xfc, 0x43, 0xcc, 0x82, 0x1d, 0x06, 0x4d, 0xe5, 0x82, 0x71, 0x80, 0x2b, 0x51, 0x5c, 0xf3, 0x7d, 0xa3, 0xd1, 0x91, 0xe2, 0xf0, 0xb7, 0xbe, 0x05, 0xc7, 0xad, 0xa4, 0x39, 0xc3, 0x39, 0xc7, 0xba, 0xba, 0x22, 0xe0, 0x35, 0x37, 0x1a, 0xe8, 0x8b, 0x2b, 0xa0, 0x73, 0xd3, 0xdf, 0x25, 0x3f, 0x9e, 0x2d, 0x6e, 0x0d, 0x7e, 0xf0, 0x39, 0xaf, 0xc9, 0xb9, 0x23, 0x63, 0x9a, 0xc4, 0xc9, 0x5f, 0x19, 0x2a, 0x2e, 0xad, 0xfc, 0x57, 0x5d, 0x39, 0x4e, 0xbf, 0x4f, 0x29, 0x6f, 0xcd, 0x0e, 0x6c, 0x5d, 0x1c, 0x1b, 0x96, 0x31, 0xea, 0x0d, 0xeb, 0xed, 0xca, 0x7c, 0xb9, 0x74, 0x98, 0x1d, 0xec, 0xda, 0xb2, 0x2e, 0xdc, 0xde, 0x65, 0x15, 0x69, 0xb5, 0xa6, 0x44, 0x4a, 0x0a, 0x03, 0x5f, 0xa2, 0x42, 0xd9, 0xa1, 0xd4, 0x04, 0xc6, 0x7c, 0x99, 0xf9, 0x61, 0x7f, 0x50, 0xd0, 0x29, 0x7d, 0x95, 0x86, 0xbc, 0xec, 0x14, 0xe4, 0x4a, 0x8b, 0x9f, 0x49, 0x48, 0x48, 0x7f, 0xa9, 0x69, 0x60, 0x08, 0xd6, 0xca, 0xc8, 0x71, 0xfe, 0x6c, 0xcc, 0xe2, 0x75, 0xe8, 0xf6, 0xcd, 0xb5, 0x5e, 0x31, 0x82, 0xa4, 0xaf, 0x2e, 0xfe, 0x15, 0xec, 0x07, 0x04, 0x90, 0x0e, 0x22, 0x70, 0x56, 0xe7, 0x59, 0xc7, 0xa0, 0x58, 0x57, 0x12, 0x28, 0xc5, 0x45, 0xed, 0xea, 0xc6, 0xa7, 0xdb, 0x2c, 0x1f, 0x80, 0xdc, 0xbc, 0xf3, 0xbd, 0x42, 0x79, 0x34, 0xd0, 0xc0, 0x14, 0x5e, 0x9c, 0xc4, 0x18, 0x65, 0x91, 0x06, 0x28, 0xeb, 0x18, 0x61, 0x88, 0xb7, 0x31, 0xe3, 0xe0, 0x63, 0x5a, 0x20, 0x3c, 0x54, 0xb4, 0xcb, 0x56, 0xf0, 0x61, 0x87, 0x18, 0x0a, 0x30, 0xfa, 0x5d, 0xa1, 0x7c, 0x23, 0xf8, 0xcb, 0x51, 0xee, 0xf7, 0xec, 0xd1, 0x06, 0x29, 0x2b, 0xd6, 0xeb, 0xdd, 0x27, 0xd9, 0x44, 0xed, 0xe5, 0x13, 0x76, 0xfb, 0x0e, 0xe1, 0x75, 0xfb, 0x57, 0x6d, 0xdb, 0xf1, 0x40, 0x8b, 0x37, 0xfc, 0x01, 0xe1, 0xa7, 0x94, 0xc1, 0x4b, 0xa9, 0x10, 0x0a, 0x7e, 0x2e, 0x6b, 0x7a, 0xeb, 0xf0, 0x47, 0xbb, 0xe6, 0x06, 0x32, 0xb5, 0x07, 0xb5, 0x29, 0x01, 0xd0, 0x8a, 0x5a, 0xa1, 0x91, 0xa5, 0x2e, 0xef, 0x89, 0x58, 0x87, 0xd4, 0x4e, 0xf1, 0x47, 0x3a, 0x6f, 0xd3, 0x11, 0xc4, 0x57, 0xcc, 0x53, 0xbc, 0x74, 0xa2, 0x84, 0x4d, 0x99, 0xef, 0xaa, 0xf2, 0xa1, 0x2f, 0x20, 0x2e, 0x56, 0x18, 0x96, 0x7e, 0x91, 0x2a, 0x59, 0x8c, 0xa2, 0x86, 0xd5, 0xa5, 0xf1, 0x03, 0x58, 0x6d, 0xe6, 0x7f, 0x18, 0xd1, 0x07, 0x73, 0x78, 0x3e, 0x60, 0xca, 0x87, 0x10, 0x28, 0xf4, 0xc9, 0x4e, 0xa1, 0x36, 0x3b, 0x94, 0x40, 0x44, 0x91, 0x50, 0x0e, 0x11, 0xc2, 0x31, 0x4e, 0xe6, 0xc6, 0xdd, 0x60, 0xb2, 0x9e, 0xe3, 0xe5, 0xa1, 0x96, 0xf0, 0x24, 0xef, 0xc7, 0x45, 0xad, 0xff, 0xdf, 0x68, 0x3b, 0xa7, 0x25, 0x1a, 0xdf, 0xce, 0xb7, 0x8a, 0x5b, 0x3a, 0x16, 0xc8, 0xcc, 0xa3, 0xe5, 0x7c, 0x8d, 0x0c, 0xee, 0xd8, 0x57, 0x53, 0x66, 0xcb, 0xad, 0x06, 0x72, 0x78, 0x77, 0x78, 0xea, 0xe6, 0xed, 0x14, 0x5c, 0xf9, 0xb6, 0xf2, 0x54, 0xa1, 0x51, 0xa8, 0xda, 0x51, 0xb5, 0x63, 0x3d, 0xb3, 0x34, 0x36, 0x0f, 0x9a, 0xa5, 0xb1, 0x71, 0x38, 0xc2, 0xb6, 0x91, 0x91, 0xcf, 0x88, 0x70, 0x2f, 0x7d, 0x25, 0xe9, 0x17, 0x0d, 0xd6, 0xef, 0xfd, 0xb8, 0x04, 0x16, 0xb4, 0x4f, 0x4d, 0x54, 0xe8, 0x1f, 0xd7, 0x09, 0x0f, 0x17, 0xe4, 0x3e, 0x9d, 0x2d, 0xa7, 0x2a, 0x77, 0xfd, 0x57, 0xfb, 0xab, 0xb3, 0x81, 0xd3, 0x5e, 0x2c, 0xa2, 0x10, 0x06, 0x58, 0xf5, 0xd0, 0xd9, 0xe3, 0x8a, 0xb4, 0x84, 0x14, 0x98, 0xe5, 0x21, 0xf5, 0x14, 0x55, 0x63, 0xb4, 0x82, 0x48, 0x14, 0x49, 0x0c, 0x12, 0xc2, 0x59, 0xd1, 0x22, 0xb5, 0x5a, 0x7f, 0x3f, 0x24, 0xf9, 0x24, 0x12, 0xa8, 0xb8, 0x41, 0xe5, 0xf0, 0xdc, 0x21, 0xaa, 0xb7, 0x86, 0x68, 0x3f, 0xf3, 0x20, 0xef, 0xf0, 0x4f, 0xfa, 0xcf, 0x3e, 0xdc, 0x35, 0xbc, 0xde, 0x03, 0xe1, 0x95, 0x05, 0xbf, 0x62, 0x38, 0xe3, 0x09, 0x18, 0x9b, 0x6d, 0x93, 0x3f, 0x19, 0x60, 0xb8, 0x13, 0x09, 0x83, 0xb3, 0x38, 0x95, 0x2c, 0x10, 0x5a, 0xca, 0x05, 0x61, 0x11, 0xeb, 0x10, 0x32, 0x07, 0x0b, 0xe9, 0x3f, 0x5c, 0xda, 0x4c, 0xe4, 0x49, 0xc0, 0xd6, 0xd4, 0x04, 0x28, 0x10, 0x0e, 0xe4, 0x1f, 0xa9, 0x0d, 0xc6, 0x1d, 0x03, 0x3f, 0xaf, 0x22, 0xf2, 0xb9, 0xb3, 0x05, 0xc0, 0x29, 0x15, 0x09, 0x74, 0x0c, 0xaf, 0xb2, 0x53, 0x21, 0x94, 0xd7, 0xa8, 0x1d, 0xf5, 0xf7, 0xc1, 0xa0, 0x41, 0xd1, 0x3a, 0x68, 0x90, 0x2e, 0x7e, 0xc5, 0x42, 0x02, 0x8a, 0x4c, 0xe3, 0xb3, 0xf4, 0xd0, 0x52, 0xb9, 0x2c, 0x8e, 0x23, 0x67, 0x03, 0xa8, 0x41, 0x08, 0x69, 0xd5, 0xd8, 0x2e, 0x7b, 0x56, 0x72, 0x47, 0xbd, 0x2c, 0x60, 0x71, 0xa3, 0x88, 0x5b, 0x90, 0x57, 0x83, 0x6b, 0x9d, 0xb6, 0x0f, 0x08, 0x41, 0x9b, 0x2d, 0x7f, 0xa2, 0x61, 0x61, 0x98, 0x7d, 0xa3, 0x63, 0x76, 0x75, 0x46, 0x18, 0xbe, 0xaa, 0xba, 0xc0, 0xfc, 0x8e, 0x7c, 0x71, 0x42, 0xf4, 0xe0, 0xc4, 0x12, 0x6a, 0x0d, 0xce, 0x7d, 0xc9, 0x49, 0x52, 0x8d, 0x0a, 0x77, 0x34, 0xe1, 0x5b, 0xdd, 0x31, 0x97, 0x72, 0x2b, 0xce, 0x6f, 0x22, 0xb9, 0x8e, 0x2c, 0x2c, 0x11, 0x68, 0x3e, 0x57, 0xad, 0x78, 0x9f, 0xc3, 0x02, 0xf5, 0xfb, 0x7a, 0xbd, 0x63, 0x13, 0x48, 0x4c, 0x0a, 0x63, 0xcd, 0xa0, 0xa6, 0x02, 0xd0, 0x31, 0x60, 0xcb, 0xd6, 0x43, 0xfd, 0xba, 0xf3, 0x68, 0x56, 0x98, 0xe1, 0x47, 0x08, 0xdb, 0x4f, 0x9b, 0x6c, 0xc8, 0x7b, 0x7f, 0xca, 0xda, 0x03, 0xe8, 0xc9, 0x67, 0xf9, 0x73, 0x2a, 0x81, 0x35, 0x61, 0xb6, 0x1b, 0xef, 0xdf, 0x75, 0x6c, 0x8d, 0x8b, 0x21, 0x99, 0xb9, 0x35, 0xda, 0x8e, 0xb7, 0xe2, 0x1b, 0x2c, 0xf5, 0x17, 0xed, 0xaa, 0xe4, 0x54, 0x5b, 0x35, 0x07, 0xde, 0x25, 0xda, 0x4a, 0xc1, 0xb9, 0xa6, 0x94, 0x16, 0x5e, 0x0c, 0x9f, 0x82, 0xb3, 0x86, 0x08, 0xff, 0x58, 0x7f, 0xa2, 0xdf, 0xeb, 0x71, 0x10, 0x0e, 0x36, 0x4b, 0x93, 0x97, 0xa6, 0x15, 0x20, 0x69, 0xff, 0xd6, 0xb6, 0x5c, 0x4f, 0xb6, 0xee, 0x6f, 0x21, 0x60, 0xd4, 0x53, 0xf2, 0xaa, 0xf5, 0x2e, 0xe9, 0x78, 0xb9, 0x99, 0xc2, 0xdd, 0xf3, 0xea, 0x0c, 0x84, 0xb7, 0xb9, 0x94, 0x4f, 0x6c, 0x9d, 0x21, 0x3d, 0x21, 0x37, 0x61, 0x91, 0x25, 0x72, 0x24, 0x31, 0xd1, 0x08, 0xc8, 0x4c, 0xa9, 0x49, 0xf4, 0x3f, 0xa4, 0x18, 0x8a, 0xba, 0xc7, 0x36, 0xd6, 0x1e, 0xf8, 0xc3, 0x0c, 0x2a, 0x12, 0x01, 0xf1, 0xd7, 0x35, 0x5c, 0xd8, 0x80, 0x60, 0xa7, 0xd0, 0x46, 0x41, 0xa9, 0x1c, 0xb3, 0x4b, 0xd8, 0xe3, 0x9e, 0x0a, 0x64, 0x29, 0x4e, 0xb3, 0x77, 0xfe, 0xe2, 0x00, 0xbc, 0xf5, 0xef, 0x3a, 0x1e, 0xd8, 0x6c, 0x97, 0xd2, 0x9a, 0xcb, 0xc7, 0x97, 0x8d, 0x69, 0xca, 0x3c, 0xd5, 0x28, 0x04, 0x63, 0x1d, 0x5a, 0x93, 0x86, 0x89, 0xe2, 0xe0, 0x37, 0xeb, 0x95, 0x74, 0xac, 0x39, 0xe7, 0x0e, 0x7a, 0x3f, 0xc3, 0xf2, 0xa1, 0x91, 0xba, 0x83, 0xc9, 0xc4, 0x60, 0x14, 0xcb, 0xdd, 0xf3, 0xfc, 0x73, 0x0a, 0x3e, 0xe8, 0x85, 0x90, 0xbd, 0x76, 0xfd, 0x05, 0x02, 0xff, 0x9b, 0xbf, 0x57, 0xb3, 0x9f, 0x8c, 0xa5, 0xec, 0xd2, 0xa3, 0x95, 0xbc, 0xc5, 0xdb, 0xf4, 0xc8, 0x5d, 0x1b, 0x5c, 0x5a, 0x8f, 0x12, 0x11, 0xb1, 0x69, 0x28, 0x29, 0x9c, 0x52, 0xb4, 0xf0, 0x47, 0x92, 0x6f, 0x8a, 0x54, 0x15, 0x29, 0xda, 0x2d, 0x6b, 0xba, 0xa3, 0x99, 0x14, 0x3c, 0xed, 0x8e, 0xfb, 0x77, 0xab, 0x47, 0x40, 0x9d, 0x9a, 0x95, 0x3a, 0x38, 0x6c, 0x7a, 0xbd, 0x60, 0x26, 0xf4, 0x98, 0x31, 0xc7, 0x17, 0x62, 0x7c, 0x2a, 0x5e, 0x77, 0xbd, 0x2d, 0x43, 0x3d, 0x4d, 0x13, 0x0d, 0xac, 0xd9, 0x27, 0xea, 0x0d, 0x13, 0xa2, 0x3d, 0x01, 0xa7, 0xcf, 0x39, 0xc6, 0x71, 0x6d, 0xaf, 0xb6, 0xed, 0x55, 0x24, 0x10, 0xef, 0x5d, 0x27, 0xfb, 0x94, 0x7b, 0xe2, 0xc8, 0x78, 0x2e, 0xee, 0x78, 0x29, 0x19, 0x6c, 0x7e, 0xdc, 0xf1, 0x51, 0xc6, 0x5f, 0x9a, 0x01, 0xf5, 0x4f, 0x8d, 0x20, 0xf3, 0x8b, 0x7d, 0xa4, 0xa7, 0xe8, 0x3a, 0x2f, 0x01, 0x27, 0xd5, 0x9d, 0x3e, 0x24, 0x05, 0xd8, 0x67, 0x4f, 0xc9, 0xf4, 0x1b, 0x60, 0x4f, 0x78, 0x8f, 0x47, 0x15, 0xf9, 0xd3, 0x62, 0x4e, 0xee, 0x57, 0xf3, 0x87, 0xbf, 0xad, 0xd1, 0x8a, 0x1f, 0x90, 0x5e, 0x83, 0x9c, 0x26, 0xb8, 0x61, 0x74, 0x82, 0x34, 0x7f, 0xab, 0x6d, 0x08, 0x84, 0x5a, 0x66, 0x47, 0x88, 0x4a, 0xe7, 0x13, 0x78, 0xc1, 0xea, 0x0e, 0xbb, 0x9c, 0xac, 0x11, 0x15, 0x9e, 0xb1, 0x21, 0xcc, 0x08, 0x08, 0x9e, 0x0a, 0x6a, 0xd0, 0xbe, 0x83, 0xb8, 0xfb, 0x3a, 0x57, 0xa0, 0x52, 0x47, 0x3a, 0x1b, 0xb9, 0xc8, 0xd2, 0x43, 0xb5, 0xc2, 0x60, 0x64, 0x2b, 0x10, 0xa3, 0x55, 0x6b, 0x58, 0xfa, 0x09, 0x6c, 0x3d, 0xc8, 0x61, 0x59, 0xd6, 0x1c, 0x44, 0x4d, 0x5f, 0x92, 0xf2, 0x5c, 0x2f, 0x74, 0x95, 0xd2, 0xea, 0x25, 0x1a, 0xbf, 0xf8, 0xc0, 0x3e, 0xb3, 0x36, 0xfc, 0xec, 0xc6, 0xeb, 0x53, 0xc6, 0xdb, 0xfd, 0x63, 0x02, 0x26, 0x65, 0x94, 0x77, 0xec, 0xe0, 0xfb, 0xf7, 0x8a, 0xe7, 0x7e, 0xe0, 0xb9, 0xe2, 0x39, 0xee, 0x10, 0x99, 0x21, 0x53, 0xcb, 0xeb, 0xe7, 0x0a, 0xca, 0xc2, 0x20, 0x68, 0xdd, 0x46, 0xa2, 0xf4, 0x3e, 0x51, 0x31, 0x78, 0x5f, 0x23, 0x5b, 0x58, 0xe6, 0x58, 0xa0, 0x23, 0xf6, 0x17, 0xd6, 0x68, 0xb1, 0x8b, 0xcc, 0xcb, 0xfb, 0x97, 0x2e, 0x57, 0x80, 0xc5, 0xa8, 0x16, 0xf8, 0x80, 0x4e, 0xdf, 0xaa, 0x84, 0x3c, 0x70, 0x2e, 0x92, 0x79, 0xbd, 0x78, 0x68, 0x22, 0x87, 0x12, 0xf0, 0xc4, 0x2f, 0xa9, 0xb8, 0x09, 0xcd, 0xcb, 0xa2, 0x97, 0x7d, 0xef, 0xdd, 0x35, 0xf9, 0xb6, 0x13, 0x2f, 0x6d, 0x70, 0xe4, 0xfc, 0x86, 0xe2, 0x94, 0x1f, 0xcc, 0x47, 0x00, 0x4b, 0x33, 0x94, 0xd7, 0xca, 0xec, 0x00, 0x06, 0x20, 0x81, 0xc4, 0x74, 0xeb, 0x21, 0x1f, 0xf0, 0x0d, 0x39, 0x9e, 0x68, 0x0d, 0x44, 0x9a, 0x5b, 0xbb, 0xe3, 0x02, 0x90, 0x13, 0x30, 0x5b, 0x09, 0x64, 0x4f, 0x04, 0x33, 0xb2, 0x47, 0xbf, 0x5f, 0x58, 0x10, 0x6d, 0x75, 0xf1, 0xee, 0x19, 0xe7, 0x79, 0xfd, 0x38, 0xe5, 0xb0, 0x0c, 0x2f, 0xd0, 0xbf, 0xae, 0x16, 0xf0, 0x1e, 0x8f, 0xbc, 0x69, 0xb5, 0x05, 0xeb, 0x6b, 0x42, 0xe7, 0xed, 0xaa, 0xfa, 0xa2, 0x4e, 0x0e, 0x73, 0x89, 0xe4, 0xab, 0xc1, 0x6d, 0x0d, 0xf3, 0xe0, 0x6e, 0x38, 0x2a, 0x52, 0x10, 0xa7, 0x1b, 0x08, 0x92, 0x73, 0x0a, 0x86, 0x7b, 0xd0, 0xe9, 0x43, 0x75, 0x92, 0xcf, 0x4e, 0x5e, 0xf0, 0xa5, 0x37, 0x9d, 0x88, 0x23, 0x2d, 0xb2, 0xa4, 0xfb, 0x64, 0x11, 0xbc, 0x53, 0xba, 0x31, 0x3c, 0x79, 0x99, 0xe0, 0x86, 0xd2, 0x1f, 0xd9, 0x3b, 0x14, 0x7c, 0x98, 0xb7, 0xb5, 0x9c, 0x6d, 0xda, 0xa4, 0x07, 0xd0, 0x0e, 0x36, 0x05, 0xf4, 0x85, 0x63, 0x05, 0x9f, 0xc3, 0x32, 0x3f, 0x38, 0x5d, 0x72, 0x99, 0x22, 0x00, 0xab, 0xc7, 0x48, 0xb4, 0x54, 0xb7, 0xf9, 0x62, 0x46, 0x2c, 0xf7, 0x94, 0x71, 0xa9, 0xca, 0x7d, 0xce, 0x90, 0x5a, 0x39, 0x94, 0x8b, 0xbd, 0x56, 0xaf, 0x2b, 0x4e, 0x92, 0x6e, 0xcf, 0xff, 0xe6, 0x7c, 0xc8, 0xf0, 0xc4, 0x11, 0xba, 0x40, 0x9e, 0x69, 0x45, 0x23, 0xa7, 0x76, 0xe5, 0x34, 0xdd, 0xd2, 0x17, 0x0d, 0x47, 0xf7, 0xbe, 0x15, 0x7b, 0xb2, 0xc4, 0x9a, 0x64, 0xd5, 0x04, 0x20, 0x42, 0x2d, 0x68, 0xf8, 0xf2, 0xb3, 0x4e, 0x14, 0x70, 0x06, 0x31, 0x19, 0x9a, 0x19, 0x85, 0xb6, 0x37, 0x29, 0xe2, 0x35, 0x37, 0xf3, 0x65, 0x4f, 0x3c, 0x23, 0x54, 0x45, 0x5a, 0x0f, 0x00, 0x2c, 0x1b, 0xa5, 0xf0, 0x88, 0xc7, 0xa2, 0x3b, 0x1d, 0xe2, 0x06, 0x36, 0x02, 0xf5, 0xc4, 0x4f, 0xf7, 0x92, 0xbd, 0x39, 0xf8, 0x92, 0xef, 0x4a, 0x13, 0xa1, 0xea, 0x21, 0x76, 0xfd, 0x84, 0x8b, 0xcc, 0x7a, 0xce, 0xa8, 0xca, 0xca, 0x47, 0x49, 0x04, 0xfb, 0x4f, 0x9d, 0x06, 0x41, 0xde, 0x0d, 0xa0, 0xf6, 0x75, 0x64, 0x81, 0xdf, 0x55, 0x33, 0x07, 0xb1, 0xf0, 0x74, 0x56, 0xd3, 0x9d, 0x6d, 0xa8, 0x66, 0x8f, 0xd7, 0xe4, 0x83, 0x08, 0x40, 0x71, 0xc3, 0xca, 0xae, 0x4c, 0x05, 0xcf, 0x85, 0x58, 0x6b, 0x39, 0xaa, 0xf6, 0xa6, 0x8c, 0xe9, 0xd6, 0x74, 0x1b, 0x94, 0x0d, 0x66, 0xc0, 0x6d, 0x67, 0xe7, 0xd0, 0xc6, 0xfe, 0x7a, 0x4e, 0xe7, 0x0b, 0x43, 0x5f, 0xb0, 0xfd, 0xc9, 0xfe, 0x80, 0xc8, 0xfa, 0xf1, 0x55, 0x80, 0x70, 0xfc, 0x34, 0x26, 0xf2, 0x54, 0xcb, 0xc2, 0x3e, 0x56, 0x55, 0xb1, 0x05, 0x79, 0xbe, 0x41, 0x38, 0x82, 0x07, 0x7b, 0x82, 0xf7, 0xed, 0x40, 0x16, 0xd5, 0xc5, 0x98, 0xaa, 0x85, 0xab, 0x46, 0xc3, 0x0d, 0xdb, 0xa0, 0x34, 0x84, 0x5f, 0x9d, 0xe1, 0xc8, 0xeb, 0x30, 0xc9, 0x73, 0x05, 0xd4, 0x44, 0x0a, 0x68, 0x68, 0x88, 0x78, 0xab, 0x3e, 0x72, 0xbb, 0x1e, 0x6f, 0x84, 0xde, 0xf5, 0x71, 0x2a, 0x27, 0xa8, 0xeb, 0x41, 0x91, 0x99, 0xc7, 0xd9, 0x7c, 0xf8, 0x89, 0x3a, 0xa4, 0xe3, 0xe0, 0x26, 0x50, 0xd2, 0x7b, 0x5e, 0xcc, 0x33, 0x1e, 0x68, 0x18, 0x51, 0xf5, 0x8e, 0xe2, 0x7a, 0x28, 0x2a, 0xb2, 0x61, 0xaf, 0x21, 0x65, 0xc1, 0x68, 0xae, 0xdc, 0x43, 0x67, 0x61, 0xf5, 0xa2, 0x8d, 0x67, 0xba, 0x0d, 0x5c, 0x0b, 0xd9, 0xcd, 0x09, 0x7d, 0x55, 0x27, 0xd3, 0xd2, 0x7a, 0x84, 0x94, 0x4d, 0x16, 0xcf, 0x96, 0xdd, 0xe6, 0x1f, 0xa7, 0xe6, 0x4f, 0x96, 0x70, 0x44, 0x4e, 0x89, 0x02, 0x8e, 0xb2, 0xe0, 0xb2, 0x97, 0x89, 0xc0, 0x27, 0x3b, 0xd8, 0x68, 0xb1, 0x58, 0x8f, 0x59, 0xdc, 0x1a, 0xbb, 0xba, 0x46, 0x7c, 0xfe, 0xfa, 0xad, 0x0b, 0x3c, 0xb7, 0x4c, 0xed, 0x98, 0xdf, 0x68, 0x23, 0x9f, 0x15, 0x26, 0x0b, 0xc2, 0x56, 0x9f, 0x29, 0x0a, 0xdc, 0x36, 0x26, 0x07, 0x42, 0x2a, 0x19, 0x0a, 0xea, 0x67, 0x06, 0x94, 0x9c, 0xa2, 0xa4, 0x0d, 0x6f, 0xa4, 0x64, 0xb9, 0xed, 0xe6, 0xae, 0xe9, 0x72, 0x5f, 0x6e, 0x6e, 0xd5, 0x9a, 0xcf, 0x53, 0x4a, 0x0b, 0x46, 0xcc, 0x87, 0xa3, 0xd3, 0x69, 0x26, 0xa2, 0x84, 0x8f, 0x4b, 0xad, 0x3a, 0x29, 0x86, 0x20, 0xaf, 0x9b, 0xfb, 0xa5, 0xb8, 0xf7, 0xc0, 0x06, 0xc8, 0x74, 0x86, 0x3f, 0xb6, 0x1c, 0x7c, 0xd8, 0xc0, 0xc4, 0x70, 0x71, 0xcf, 0x41, 0x37, 0x9f, 0xfd, 0xd9, 0x50, 0xf6, 0x54, 0xf8, 0xc4, 0x67, 0xd8, 0x24, 0x50, 0xcd, 0xc8, 0x33, 0xc6, 0xc2, 0x22, 0xbc, 0xb1, 0xb7, 0x65, 0xcb, 0x38, 0x44, 0x9a, 0xd9, 0x45, 0xbc, 0x95, 0xfb, 0xe6, 0x05, 0x79, 0x59, 0xf3, 0xa6, 0x7a, 0xe2, 0xf1, 0x22, 0xe7, 0x3e, 0x36, 0x85, 0x67, 0x04, 0x4e, 0x3c, 0x83, 0x2e, 0x9e, 0x29, 0x64, 0xca, 0x47, 0xf7, 0xde, 0xf2, 0x4d, 0xab, 0xae, 0xfd, 0xf9, 0x7c, 0x00, 0xf7, 0x7b, 0xe5, 0x35, 0x4f, 0xd4, 0xf8, 0xe2, 0xd0, 0xf3, 0xf5, 0x1c, 0xd2, 0x1e, 0x1b, 0xf3, 0xb2, 0x94, 0xbe, 0x3c, 0x7f, 0x71, 0x9a, 0x94, 0xf6, 0xd1, 0x67, 0xa1, 0xb1, 0x38, 0xae, 0x9b, 0x9b, 0x32, 0xda, 0x0b, 0xa7, 0x36, 0x92, 0xd3, 0xc2, 0xd0, 0x46, 0x6f, 0x06, 0x00, 0x08, 0x7a, 0x30, 0xdd, 0x9e, 0x74, 0x54, 0x7d, 0xd5, 0xc2, 0xcf, 0x19, 0x18, 0xf6, 0x7e, 0x6d, 0x40, 0x51, 0x2d, 0x5e, 0xae, 0x86, 0x52, 0xdf, 0x97, 0xc1, 0xfc, 0x15, 0xa0, 0xe8, 0x06, 0xb9, 0xab, 0x21, 0x90, 0xbf, 0xf0, 0x94, 0xaf, 0x35, 0x4f, 0x72, 0x64, 0x6d, 0xe4, 0x36, 0xcb, 0x5e, 0xdd, 0x2b, 0x95, 0x48, 0x88, 0x2e, 0xb8, 0x97, 0xb0, 0xb5, 0x65, 0x0a, 0x2a, 0x10, 0x3b, 0x14, 0xab, 0xef, 0xba, 0x83, 0xdd, 0x25, 0xfa, 0x5f, 0xb1, 0xab, 0x9d, 0x15, 0xf6, 0xe8, 0x02, 0xd4, 0x2b, 0x2f, 0xbb, 0x38, 0x91, 0x8a, 0x42, 0x26, 0x85, 0xb6, 0xe7, 0xf7, 0x0d, 0x6e, 0x0d, 0xd8, 0xb1, 0xed, 0x96, 0x70, 0x8c, 0xae, 0x9c, 0xc4, 0xa2, 0x76, 0x62, 0x58, 0x74, 0x94, 0x8a, 0x97, 0xd2, 0x67, 0x88, 0x75, 0xf1, 0x22, 0x56, 0x53, 0xbd, 0xcc, 0x69, 0x23, 0x70, 0x8b, 0xe5, 0xcc, 0x64, 0x21, 0x0d, 0xd0, 0x25, 0xb7, 0xfd, 0x2c, 0xcb, 0xda, 0x9b, 0x80, 0x87, 0xc3, 0xcb, 0x6f, 0x7b, 0xdb, 0xe2, 0x49, 0xcf, 0x7e, 0x5e, 0xe7, 0x01, 0xff, 0xd4, 0xd7, 0x7c, 0xed, 0x29, 0xba, 0x6d, 0x95, 0x05, 0xe9, 0xd2, 0xc8, 0x85, 0x5f, 0xd3, 0xdf, 0x30, 0xd3, 0x56, 0xfb, 0x2d, 0x24, 0xce, 0x92, 0xb3, 0xfa, 0x53, 0x27, 0xc0, 0xab, 0xf8, 0x58, 0x0e, 0x5b, 0x59, 0x1e, 0x43, 0x68, 0x73, 0x51, 0x67, 0x05, 0xb9, 0x6a, 0x9c, 0x24, 0x64, 0x8d, 0x09, 0x9a, 0x0a, 0xc7, 0x18, 0x7d, 0x72, 0x94, 0xe1, 0xd1, 0xa7, 0xa4, 0xe6, 0x64, 0x4b, 0xde, 0x00, 0xf7, 0x2e, 0xa6, 0x99, 0x9e, 0x1f, 0x5b, 0x1c, 0x6a, 0x02, 0x24, 0xaa, 0x44, 0x23, 0xed, 0x0f, 0x1c, 0xca, 0xac, 0xf4, 0x44, 0x10, 0xe9, 0x55, 0x16, 0xf0, 0x7d, 0x36, 0xdd, 0xa1, 0x9a, 0x92, 0xf3, 0x23, 0x0b, 0x95, 0x26, 0x19, 0xbd, 0x0b, 0x60, 0xd6, 0x7f, 0x17, 0x88, 0xba, 0x06, 0x28, 0xa3, 0xbf, 0x34, 0x29, 0x3f, 0x4f, 0x9a, 0xf8, 0x11, 0x59, 0x3b, 0x1a, 0xdd, 0xa3, 0x92, 0xad, 0x96, 0x62, 0xd7, 0x9d, 0xc7, 0x08, 0x7f, 0x1b, 0x31, 0x5d, 0x02, 0x4b, 0xb5, 0xd1, 0xe0, 0x3d, 0x75, 0x10, 0xe6, 0x1f, 0x37, 0xd8, 0xad, 0xb1, 0x0a, 0x07, 0x65, 0xf9, 0x2b, 0xf9, 0xd0, 0x37, 0x29, 0x10, 0x91, 0x1b, 0x48, 0x94, 0xa7, 0x36, 0x23, 0xbe, 0x35, 0xaf, 0x96, 0x0f, 0x84, 0x37, 0xdb, 0xe6, 0x4a, 0x3e, 0xf3, 0x52, 0x2d, 0x67, 0x48, 0x25, 0x83, 0x3a, 0x90, 0x4a, 0x5c, 0x1a, 0xf4, 0x58, 0xc2, 0x76, 0x72, 0x66, 0x3f, 0x43, 0x80, 0x22, 0xa0, 0xa9, 0xf2, 0x1d, 0xf9, 0xfc, 0x1d, 0x69, 0xe9, 0xef, 0x3d, 0x66, 0x1f, 0x04, 0x14, 0xd9, 0x1d, 0x47, 0xd4, 0x3e, 0x3c, 0x3c, 0x3f, 0x60, 0xf1, 0x16, 0x0d, 0x26, 0x4e, 0x29, 0x8e, 0xb0, 0xcc, 0xa2, 0x90, 0xa2, 0x47, 0x76, 0x83, 0xc0, 0x4a, 0x98, 0xdb, 0xbc, 0x8d, 0x6f, 0xb6, 0x4b, 0xbc, 0x87, 0xbf, 0x7e, 0x7a, 0x87, 0x52, 0x50, 0xa6, 0x63, 0xe1, 0x7c, 0xdd, 0xd2, 0x96, 0x91, 0x40, 0x03, 0x39, 0x47, 0x77, 0x8b, 0x55, 0x14, 0xf6, 0xa3, 0x96, 0xfb, 0x7e, 0x90, 0x76, 0xa5, 0xe7, 0x62, 0x18, 0xb2, 0x1e, 0xe1, 0x74, 0x51, 0x6a, 0xc5, 0xb5, 0x0e, 0xf3, 0x25, 0xdf, 0xec, 0x84, 0x32, 0xb5, 0xb4, 0x90, 0x25, 0xda, 0x8c, 0x73, 0x76, 0x36, 0xcb, 0xfb, 0x4f, 0x9b, 0x0c, 0x27, 0x40, 0xa9, 0x82, 0x2e, 0x34, 0xef, 0x8b, 0xc3, 0xa4, 0x52, 0x87, 0x98, 0x0a, 0xb3, 0xea, 0x21, 0x99, 0xcc, 0x90, 0x9a, 0x2b, 0x5b, 0x51, 0x4b, 0x7b, 0x83, 0xd6, 0x0b, 0x94, 0x6f, 0xaa, 0x03, 0x89, 0x38, 0x94, 0xb4, 0x67, 0x09, 0x25, 0x3c, 0x68, 0x81, 0x8d, 0xd4, 0x69, 0x58, 0xb3, 0x9e, 0x9e, 0x46, 0x84, 0x9e, 0x85, 0x20, 0x8a, 0x05, 0x18, 0x45, 0xc1, 0xb6, 0x47, 0x38, 0xa7, 0x03, 0xa5, 0x8e, 0x93, 0xb7, 0x62, 0x0b, 0x47, 0x5a, 0x79, 0x08, 0xc8, 0xb0, 0x2a, 0x17, 0x6e, 0x83, 0xab, 0xea, 0x37, 0xa2, 0x1b, 0x71, 0x60, 0x2a, 0xb7, 0x43, 0x37, 0x04, 0x50, 0x3f, 0x2b, 0xaf, 0xfd, 0x73, 0x25, 0x40, 0x0d, 0x3d, 0x1b, 0xa7, 0x3f, 0xaf, 0xe2, 0x33, 0x36, 0x38, 0x43, 0x59, 0x27, 0x81, 0x52, 0xb1, 0xd5, 0x96, 0xfb, 0x41, 0xbf, 0x46, 0xde, 0xfe, 0x97, 0xcc, 0x5d, 0x90, 0xf7, 0xaf, 0xf2, 0x56, 0x50, 0xe6, 0xc6, 0xaa, 0x23, 0x40, 0x80, 0x66, 0x73, 0x03, 0x5b, 0xa6, 0x7a, 0xd3, 0x7c, 0xd0, 0x9b, 0xd6, 0x82, 0xd2, 0x98, 0x16, 0x5e, 0xab, 0x05, 0x27, 0x65, 0x2d, 0xfc, 0x09, 0xa3, 0x01, 0x13, 0x4f, 0x73, 0xeb, 0x8b, 0x81, 0x4d, 0x4f, 0xca, 0xc0, 0xde, 0xf5, 0x0b, 0xa8, 0x5e, 0x09, 0x55, 0x7b, 0x1e, 0x66, 0xa9, 0x7b, 0x60, 0x14, 0x80, 0x97, 0x6c, 0x0e, 0x75, 0x4a, 0xe0, 0x49, 0x3e, 0xc1, 0x48, 0xf3, 0xe0, 0x3c, 0xee, 0xf8, 0x23, 0xb6, 0xf4, 0xcb, 0x44, 0xc8, 0x9f, 0x63, 0xeb, 0xcb, 0xf6, 0x84, 0x5c, 0x3d, 0x8c, 0x3f, 0xf1, 0x65, 0x9a, 0xbc, 0xc8, 0x3a, 0x50, 0x37, 0xb9, 0x82, 0x6d, 0x49, 0x8b, 0x37, 0x0e, 0x69, 0x67, 0x2e, 0xc3, 0xb2, 0x8c, 0xfb, 0xe8, 0xe7, 0x45, 0x0f, 0x33, 0xb4, 0x18, 0x23, 0x89, 0x36, 0x41, 0xda, 0x16, 0xbe, 0x5f, 0xa1, 0x9c, 0xd2, 0x6c, 0xda, 0x0b, 0x75, 0xf2, 0x3b, 0x53, 0xa9, 0x7c, 0x70, 0x76, 0x31, 0x4b, 0x08, 0xe1, 0x9b, 0x4b, 0x8e, 0xfc, 0x7e, 0x46, 0xf6, 0x00, 0x01, 0x56, 0x3c, 0x09, 0x9c, 0xa0, 0x47, 0x6c, 0x23, 0x3f, 0x13, 0x4a, 0x00, 0x7f, 0x0f, 0x65, 0xbf, 0x4c, 0xc4, 0x33, 0xd1, 0xea, 0xb8, 0x31, 0x89, 0xe6, 0x92, 0x7a, 0x6b, 0x4c, 0x7e, 0x98, 0xa6, 0x1a, 0xd3, 0x9a, 0xdf, 0xf5, 0xf4, 0x66, 0x30, 0x1b, 0x74, 0x51, 0x71, 0x99, 0x7d, 0xed, 0xb6, 0xbe, 0x72, 0x22, 0x18, 0xcf, 0xd3, 0x81, 0xb9, 0xfc, 0x61, 0xd4, 0x02, 0x93, 0x83, 0xfa, 0x2f, 0x74, 0xe9, 0xf2, 0x0e, 0xc5, 0x6f, 0x35, 0x03, 0xe6, 0x44, 0x49, 0x50, 0xa7, 0x4b, 0x93, 0x93, 0xb9, 0xc1, 0x6d, 0x90, 0x63, 0x21, 0x78, 0x31, 0x76, 0x44, 0x33, 0xcb, 0x83, 0xcd, 0xcd, 0xa3, 0x4b, 0xc4, 0x38, 0xb1, 0x77, 0x81, 0x7f, 0xa4, 0x8a, 0xcc, 0x59, 0x26, 0x13, 0x42, 0xfe, 0x60, 0x27, 0xfb, 0x39, 0xc1, 0x0e, 0x69, 0xbf, 0xfb, 0x3d, 0x83, 0xbf, 0x4f, 0x84, 0x23, 0xba, 0x0b, 0x89, 0xad, 0x95, 0x51, 0x75, 0xf2, 0xed, 0x19, 0xed, 0x54, 0xaa, 0x79, 0x44, 0x2a, 0xd7, 0x25, 0xef, 0x66, 0xb1, 0x32, 0x39, 0x75, 0xfd, 0x1f, 0x38, 0x66, 0x9f, 0x15, 0xff, 0x4f, 0x69, 0x6e, 0x15, 0xec, 0x31, 0x75, 0x26, 0x8a, 0x26, 0x6c, 0xf9, 0x23, 0x64, 0xd4, 0xa2, 0xcb, 0xc5, 0xe8, 0xf9, 0x4a, 0xfa, 0x6b, 0x4a, 0x0b, 0xdb, 0xa3, 0x4e, 0x35, 0xfc, 0xa6, 0x5a, 0x17, 0x81, 0xd4, 0xd7, 0xc9, 0x33, 0xa5, 0xf2, 0x10, 0xd3, 0xa5, 0x94, 0x83, 0xae, 0xbc, 0x95, 0xec, 0x71, 0xb3, 0x2d, 0xf1, 0x3f, 0xf4, 0xab, 0xf4, 0x01, 0x91, 0x69, 0x37, 0xfd, 0x88, 0xff, 0x44, 0xab, 0x46, 0xb7, 0x8c, 0xc3, 0x69, 0x41, 0x4e, 0x9b, 0xca, 0xa8, 0xba, 0xb0, 0xbb, 0x85, 0x57, 0x82, 0x8d, 0x73, 0xa2, 0xa6, 0x56, 0xc2, 0xf8, 0x16, 0xf0, 0x70, 0xb5, 0xcb, 0x45, 0x54, 0x9e, 0x8e, 0xca, 0x9d, 0x7c, 0x0b, 0x4a, 0x7b, 0x0a, 0x27, 0xe5, 0x1c, 0x11, 0x93, 0x58, 0xda, 0xd2, 0xa1, 0x7f, 0xb3, 0xa4, 0x57, 0x18, 0xf9, 0xde, 0xc3, 0xc9, 0x4a, 0xf7, 0x8d, 0x65, 0xc3, 0xec, 0xd3, 0x6b, 0x71, 0xe2, 0x30, 0xcf, 0x08, 0x0d, 0x1e, 0xfd, 0xd8, 0xd0, 0x7f, 0x1c, 0xfc, 0x26, 0x76, 0x8f, 0xd5, 0x40, 0x7b, 0xc2, 0xb7, 0x70, 0xaf, 0x23, 0xe1, 0x45, 0x6c, 0x6e, 0xb3, 0xf8, 0x21, 0x2e, 0x1b, 0x06, 0x5d, 0x81, 0x51, 0x1f, 0x29, 0x1b, 0xc4, 0x3f, 0x9b, 0x8d, 0x54, 0x1b, 0xa8, 0xc7, 0xc1, 0xbe, 0x3a, 0xdc, 0x63, 0x74, 0x82, 0x06, 0x1c, 0xe7, 0x90, 0xea, 0x8c, 0x88, 0x21, 0x1d, 0x83, 0x30, 0xb8, 0xe6, 0xbc, 0x07, 0xf0, 0x46, 0xc8, 0xa6, 0x10, 0x35, 0x48, 0x78, 0xe0, 0x2f, 0x5f, 0x66, 0xbb, 0xef, 0x67, 0xb3, 0xe6, 0x7b, 0xe3, 0x24, 0x20, 0x60, 0xb5, 0x65, 0x7a, 0x3f, 0x92, 0xa8, 0x69, 0x88, 0xb2, 0x8f, 0x1a, 0x86, 0xcc, 0x4c, 0x05, 0x9c, 0x41, 0x07, 0xc5, 0xce, 0x98, 0x7f, 0x27, 0x82, 0x2a, 0xf5, 0x81, 0x88, 0x1e, 0x46, 0x45, 0x59, 0x98, 0x57, 0xd5, 0x9c, 0x2e, 0xb5, 0x99, 0xef, 0x9c, 0x7d, 0x50, 0xe3, 0xb8, 0x7a, 0xa3, 0x48, 0xa8, 0x8e, 0x00, 0xac, 0x52, 0x53, 0xa5, 0x1e, 0x14, 0x01, 0xfb, 0x38, 0xb5, 0x93, 0x26, 0x5c, 0x9c, 0x25, 0xda, 0x3d, 0x40, 0xa1, 0x70, 0xa1, 0xe0, 0x9a, 0x39, 0x66, 0x74, 0x78, 0x12, 0xc3, 0xe3, 0xd6, 0x38, 0xd1, 0x76, 0x28, 0x5e, 0x4a, 0x8d, 0xa1, 0xfd, 0x90, 0x91, 0x54, 0xec, 0xf1, 0x29, 0x99, 0x30, 0x29, 0xb1, 0xb2, 0x15, 0x28, 0xe8, 0xae, 0x7e, 0x16, 0xe8, 0x8e, 0x79, 0x95, 0x5c, 0xa7, 0x16, 0x46, 0xed, 0x47, 0x7a, 0x8e, 0xfd, 0x9b, 0x2f, 0x9a, 0x98, 0xd0, 0xbe, 0xa0, 0xa7, 0x79, 0x80, 0x68, 0x67, 0x31, 0xb1, 0x0c, 0x1a, 0x81, 0xc6, 0xfc, 0xfd, 0x04, 0x00, 0x44, 0x79, 0xc8, 0x42, 0x12, 0x9d, 0xf8, 0x20, 0x72, 0xcc, 0xb8, 0x38, 0x5d, 0xb3, 0x51, 0xc5, 0xf2, 0x7e, 0x8e, 0x71, 0x03, 0x4c, 0x66, 0x6b, 0xd3, 0xe0, 0xda, 0xba, 0x1e, 0x99, 0x21, 0xd1, 0x5a, 0xa4, 0x03, 0x63, 0x3d, 0x70, 0x83, 0x78, 0x7f, 0x62, 0xc0, 0xc1, 0xe1, 0xcb, 0x1d, 0x28, 0x6e, 0x17, 0xa0, 0xac, 0x01, 0x47, 0x98, 0x6c, 0x07, 0xa1, 0x83, 0x01, 0x86, 0xa5, 0x2e, 0x11, 0x5f, 0x44, 0x1e, 0x21, 0xd0, 0x4d, 0x2f, 0xab, 0x3c, 0x28, 0x7b, 0x71, 0x2f, 0xc6, 0x7d, 0x10, 0x9d, 0xd8, 0x77, 0xd8, 0x6a, 0x3f, 0x10, 0xdb, 0x2f, 0xc4, 0x42, 0x44, 0x3c, 0x0a, 0x73, 0xeb, 0xd9, 0xc0, 0xe2, 0x26, 0xd2, 0x1b, 0x45, 0xe1, 0x32, 0x84, 0xb1, 0xf1, 0x4e, 0x8e, 0xb9, 0xa5, 0x05, 0x2a, 0xda, 0x9e, 0x47, 0x1e, 0x17, 0xe1, 0xd4, 0xb3, 0xe0, 0x2b, 0x46, 0xae, 0x38, 0x85, 0x52, 0x82, 0x17, 0x17, 0x4b, 0xc4, 0x0d, 0x41, 0xe7, 0xdf, 0x29, 0xe8, 0x46, 0x09, 0x19, 0x0e, 0x30, 0x76, 0x92, 0xa6, 0x9f, 0xcb, 0xf3, 0xa6, 0x7d, 0xd5, 0x25, 0x5d, 0xae, 0x7b, 0xc5, 0x07, 0x51, 0xf1, 0x85, 0x9f, 0x43, 0x2f, 0xcf, 0xf4, 0xe5, 0xa2, 0xac, 0xff, 0x20, 0x21, 0xe5, 0x74, 0xa6, 0x22, 0x68, 0x97, 0x7a, 0x2e, 0xec, 0x51, 0xb2, 0x92, 0xd8, 0x83, 0x7c, 0x58, 0x61, 0x9a, 0x5f, 0x75, 0xf3, 0x64, 0xc3, 0x44, 0xd3, 0x22, 0xb4, 0x33, 0x02, 0xde, 0xe3, 0xbd, 0x64, 0xfe, 0xed, 0x98, 0x21, 0x1a, 0xe0, 0x2f, 0x4c, 0x0b, 0xfc, 0x52, 0xc3, 0x44, 0xb6, 0x2c, 0x56, 0x66, 0x03, 0x76, 0x2b, 0x0e, 0xd2, 0xeb, 0x60, 0xf1, 0xda, 0xfc, 0xf3, 0x2c, 0x97, 0xc4, 0xdf, 0xd5, 0x8f, 0x3e, 0x88, 0xd6, 0xda, 0xb6, 0x59, 0xfb, 0xe1, 0x7d, 0xac, 0x49, 0x66, 0xe1, 0xea, 0x92, 0xc5, 0x5c, 0xf3, 0x46, 0x79, 0x0c, 0xc0, 0x8c, 0xe1, 0x63, 0x47, 0x91, 0x44, 0x20, 0x9e, 0x20, 0x14, 0x7e, 0x64, 0x74, 0x6f, 0xab, 0x5d, 0x4a, 0xeb, 0x7b, 0x5c, 0x3a, 0x93, 0x5e, 0x66, 0x46, 0x2d, 0x90, 0x14, 0xb4, 0xbf, 0x8f, 0x39, 0x19, 0x51, 0xd2, 0xc5, 0xb7, 0xf3, 0xb8, 0xe9, 0x08, 0x02, 0xbf, 0x7c, 0x9b, 0xa8, 0xf6, 0x9e, 0x1f, 0xa2, 0xb5, 0x9b, 0xbe, 0x46, 0x8b, 0x12, 0xac, 0xc4, 0x78, 0x56, 0xff, 0xac, 0x5c, 0x14, 0xc1, 0xb0, 0xb0, 0x36, 0x43, 0xac, 0x74, 0x08, 0xb5, 0xe3, 0x68, 0x99, 0xf4, 0x8b, 0x7f, 0x65, 0xa3, 0x8d, 0x91, 0x30, 0x7d, 0x86, 0x50, 0x35, 0xe9, 0x11, 0x7d, 0x80, 0xcf, 0x48, 0x5c, 0x99, 0xab, 0x88, 0x65, 0x62, 0xe0, 0x75, 0x3c, 0x42, 0x4e, 0x3e, 0xe3, 0x83, 0x26, 0x23, 0x2f, 0xf9, 0xfd, 0x34, 0x78, 0xe5, 0x20, 0x5b, 0x95, 0x18, 0x28, 0x9c, 0x07, 0x5c, 0xce, 0x9c, 0x75, 0x0f, 0x00, 0x60, 0x59, 0x11, 0x34, 0x58, 0xf8, 0xe1, 0xfc, 0x9c, 0x97, 0x02, 0xda, 0x75, 0xec, 0xa4, 0x56, 0x1f, 0xd3, 0x80, 0x4f, 0xcd, 0x42, 0x04, 0x8f, 0xee, 0x7f, 0xb0, 0xa2, 0xaf, 0x90, 0xc0, 0xe7, 0xc1, 0xf4, 0x0b, 0xe7, 0x5c, 0x90, 0x2b, 0xe6, 0x84, 0xec, 0xde, 0xb8, 0x8b, 0x9f, 0xac, 0xd6, 0xd7, 0x08, 0xca, 0xb1, 0xe5, 0x3f, 0x3f, 0x46, 0x8e, 0x4b, 0x45, 0xf3, 0x89, 0x96, 0xf2, 0x89, 0x32, 0x9e, 0x17, 0xa2, 0x89, 0xec, 0x69, 0x35, 0x7e, 0x4a, 0xde, 0x67, 0x6c, 0x31, 0x5a, 0xa4, 0xe3, 0x81, 0x8b, 0xef, 0xaa, 0x74, 0x11, 0x76, 0x04, 0xd5, 0xe3, 0x6a, 0x33, 0x6d, 0xee, 0x0d, 0x3b, 0xbf, 0xff, 0x0d, 0xe8, 0xf5, 0xe2, 0x10, 0x12, 0x19, 0xcc, 0x90, 0x20, 0x88, 0xf6, 0xe9, 0xcb, 0xa4, 0x8b, 0xb0, 0x25, 0xca, 0xc4, 0x47, 0xd9, 0x84, 0x51, 0xae, 0xb4, 0xff, 0xfc, 0x9c, 0x64, 0xbf, 0x89, 0xcf, 0x80, 0x91, 0xe0, 0xa0, 0xc9, 0xc1, 0x6e, 0xda, 0xb0, 0x8e, 0xc8, 0xcc, 0x18, 0xdb, 0x91, 0x9d, 0x5c, 0x27, 0x9f, 0xe0, 0x94, 0xbf, 0x59, 0x68, 0x14, 0x32, 0x63, 0x5e, 0x36, 0x06, 0x7e, 0x90, 0x5a, 0xa9, 0xa9, 0x0c, 0x2a, 0xaa, 0x8c, 0xee, 0x23, 0x29, 0x17, 0x76, 0x51, 0x8d, 0x67, 0x5e, 0x59, 0x75, 0xe9, 0x6a, 0xbd, 0xf0, 0xc1, 0x40, 0x5c, 0xf0, 0x6d, 0x7a, 0x38, 0xfc, 0xa5, 0xfa, 0x7c, 0x26, 0x86, 0x7d, 0xbe, 0x3d, 0xf0, 0x73, 0x81, 0x43, 0x2d, 0x0f, 0xfe, 0x21, 0xd3, 0x9a, 0x24, 0x9a, 0xeb, 0x0c, 0xdd, 0x7e, 0x52, 0xdd, 0x93, 0x20, 0x60, 0x19, 0xf3, 0x09, 0xc8, 0xb3, 0xf0, 0xee, 0xbf, 0x1b, 0x0b, 0xe0, 0x61, 0x12, 0xd2, 0xc3, 0x50, 0xbe, 0xa7, 0x01, 0x9e, 0xf9, 0xc3, 0x80, 0xed, 0xef, 0x7b, 0xd1, 0xd4, 0xe8, 0xc1, 0xaa, 0x85, 0x62, 0xed, 0x96, 0xad, 0x63, 0xbe, 0xeb, 0x9c, 0x0d, 0x9b, 0xfc, 0xa6, 0x73, 0x1f, 0x91, 0xc9, 0xab, 0xd5, 0x94, 0x90, 0x25, 0x40, 0x0d, 0x36, 0x3a, 0x1f, 0x51, 0x0f, 0x08, 0xee, 0x75, 0x24, 0x7e, 0xb0, 0x09, 0x1d, 0xb3, 0xec, 0x03, 0x65, 0x7c, 0xf6, 0xfa, 0x88, 0x3d, 0x6f, 0x95, 0xe0, 0xff, 0x0f, 0x42, 0x70, 0xc3, 0xa2, 0x2b, 0x10, 0x16, 0x51, 0x66, 0xcb, 0xe6, 0x23, 0x6b, 0x85, 0x94, 0xc4, 0xcc, 0xe0, 0x4a, 0x84, 0x20, 0x61, 0x8f, 0xa2, 0x40, 0xcf, 0x19, 0xcb, 0xb7, 0xdc, 0xe2, 0xde, 0x73, 0x08, 0x7e, 0xf2, 0xc1, 0xc1, 0xab, 0x9a, 0x78, 0xcf, 0x2a, 0x68, 0x73, 0xef, 0xcd, 0xaf, 0x45, 0xbe, 0xd2, 0x8d, 0x29, 0xd9, 0x6f, 0x29, 0x38, 0x43, 0xae, 0x3a, 0xdf, 0x07, 0x7b, 0xc9, 0x8f, 0x1e, 0xfb, 0x37, 0xb6, 0x92, 0x20, 0x81, 0xef, 0xe4, 0x7b, 0xc3, 0x75, 0xac, 0x51, 0xfb, 0xde, 0x7f, 0xf0, 0x10, 0x06, 0x15, 0x43, 0x13, 0x49, 0xab, 0xa5, 0xc4, 0xf5, 0xa7, 0xf3, 0x58, 0xfe, 0x7b, 0xe5, 0x79, 0xf4, 0xcb, 0x9e, 0x8f, 0x33, 0xd2, 0x81, 0x3e, 0x5a, 0x02, 0x47, 0x2f, 0xfe, 0xea, 0x4e, 0x14, 0x9f, 0x5d, 0x34, 0xe6, 0xda, 0xd1, 0xa5, 0x71, 0xe1, 0x05, 0x71, 0x13, 0x29, 0xe7, 0xe2, 0xc1, 0x62, 0xb4, 0x4c, 0x4a, 0xac, 0x61, 0xe5, 0xe0, 0x08, 0x3a, 0xd7, 0xd4, 0x0c, 0xc9, 0x94, 0xa1, 0xdc, 0xf9, 0x6a, 0x2c, 0x55, 0x7b, 0x57, 0x4a, 0x8b, 0x69, 0x1e, 0x83, 0x76, 0x29, 0x9a, 0x16, 0xe8, 0x95, 0x53, 0x3c, 0xc2, 0x58, 0x4f, 0xb1, 0x68, 0x9b, 0x2b, 0x71, 0x72, 0xe2, 0x6a, 0xbf, 0xa5, 0x30, 0x0c, 0x6c, 0x21, 0x72, 0x62, 0x56, 0xdb, 0x1a, 0x22, 0x2f, 0x4e, 0x0b, 0xb7, 0x80, 0x6e, 0xb5, 0xda, 0xed, 0xde, 0x81, 0x66, 0xba, 0x62, 0x6f, 0x68, 0x8e, 0x97, 0xfd, 0x76, 0x77, 0xe2, 0x4c, 0x43, 0x2f, 0xa6, 0x7e, 0x70, 0x9e, 0xba, 0x62, 0xa4, 0x9f, 0x1a, 0x53, 0xde, 0x07, 0xdc, 0x5d, 0x0a, 0xe4, 0x66, 0xa2, 0xd3, 0x02, 0xdf, 0xfc, 0xb9, 0xb4, 0xe3, 0xe4, 0x63, 0xd0, 0x7b, 0x93, 0x36, 0xfc, 0x4c, 0x66, 0x26, 0x28, 0x0e, 0x87, 0xcc, 0x5c, 0x40, 0xca, 0xb9, 0xb4, 0x1a, 0xd5, 0x0b, 0xa9, 0xc4, 0x84, 0x3e, 0x91, 0xc5, 0x8c, 0x44, 0x69, 0xbe, 0x5e, 0xd7, 0xd3 ],
+const [ 0x0e, 0x2f, 0xce, 0x9e, 0x12, 0x3c, 0x9e, 0x83, 0xa8, 0xed, 0x6f, 0xa9, 0xaa, 0xc8, 0x79, 0xf9, 0xb1, 0x12, 0xc0, 0xf7, 0x7c, 0x9f, 0x96, 0x3e, 0x91, 0xe8, 0x61, 0x2a, 0x26, 0x5e, 0x9e, 0xd4, 0x41, 0xfe, 0x26, 0x43, 0x1f, 0x26, 0xb0, 0xe0, 0xd3, 0xa7, 0x98, 0x2b, 0x2f, 0x1b, 0xdf, 0xad, 0xe7, 0x79, 0x72, 0x2d, 0xf4, 0xe6, 0xaf, 0x27, 0x37, 0xce, 0x25, 0x7a, 0x5f, 0x34, 0x9b, 0x61, 0x0c, 0x46, 0x54, 0xa4, 0x34, 0x35, 0x92, 0x10, 0xc7, 0x43, 0x59, 0x24, 0x8e, 0x1e, 0x75, 0x0d, 0x59, 0x6c, 0xbf, 0xd5, 0x59, 0xa7, 0x9b, 0xd7, 0xcb, 0x2b, 0xc5, 0x76, 0xd6, 0x8d, 0x4e, 0x0e, 0xb7, 0x2f, 0xe1, 0x2b, 0x1b, 0x11, 0x4b, 0xf9, 0xcc, 0xea, 0x3a, 0xfc, 0x90, 0x78, 0x45, 0x01, 0x4f, 0x14, 0x2d, 0x55, 0x73, 0x89, 0x63, 0x34, 0x94, 0x26, 0xca, 0x84, 0x55, 0x12, 0xbd, 0xc4, 0x89, 0xe0, 0x54, 0x3f, 0x9b, 0x63, 0xe3, 0x85, 0x2c, 0xc4, 0xc4, 0x1b, 0xfd, 0xd1, 0x57, 0x72, 0x10, 0x98, 0x46, 0x16, 0x0a, 0x35, 0x0e, 0x28, 0xdc, 0xe8, 0xbb, 0x0e, 0xa2, 0x6b, 0xf2, 0x69, 0xcb, 0x82, 0x35, 0x47, 0x7b, 0xd3, 0x63, 0x9b, 0x2d, 0xf8, 0x7e, 0xea, 0x9d, 0xd3, 0xb1, 0x46, 0xe5, 0x21, 0x92, 0x80, 0xe6, 0x52, 0xa4, 0x9a, 0xe9, 0x99, 0x20, 0x7b, 0x86, 0x3f, 0xf5, 0xe6, 0xc6, 0x3c, 0x0d, 0xad, 0x84, 0x08, 0xd2, 0x22, 0x19, 0xaf, 0xf1, 0xcf, 0x38, 0x24, 0x5d, 0x67, 0x16, 0xd7, 0x98, 0xfc, 0xce, 0x89, 0x2e, 0x71, 0x05, 0x5f, 0x82, 0x33, 0xc9, 0x36, 0xcc, 0x24, 0xbf, 0x37, 0x63, 0xd8, 0x7e, 0xab, 0x38, 0x04, 0x36, 0x10, 0xa3, 0x33, 0x95, 0x6c, 0x63, 0xbb, 0xeb, 0xe1, 0xe0, 0xf0, 0x8c, 0x82, 0xb2, 0x97, 0x76, 0x65, 0x67, 0x9e, 0x33, 0xf9, 0x81, 0x0a, 0x01, 0x9a, 0xbf, 0x30, 0x31, 0x63, 0x9e, 0x28, 0xcd, 0x44, 0x1e, 0x7f, 0x7d, 0x54, 0xc9, 0x2c, 0xab, 0x68, 0xf2, 0xc5, 0xe6, 0xe4, 0x3b, 0xf3, 0x84, 0xd1, 0x5a, 0x24, 0x8c, 0x30, 0x1c, 0x7f, 0xd3, 0x8e, 0xa9, 0x1d, 0x64, 0xd9, 0x0b, 0x76, 0x25, 0x72, 0xea, 0x19, 0xb8, 0x83, 0x99, 0xa1, 0xa0, 0x93, 0x57, 0xe4, 0xa5, 0x58, 0xce, 0x6d, 0x79, 0xcc, 0xe0, 0x2d, 0x9b, 0x83, 0xa3, 0x6d, 0x7c, 0x3b, 0xaa, 0x07, 0xe1, 0xb5, 0x87, 0xd6, 0x88, 0xc3, 0x8d, 0x6b, 0x0e, 0xa3, 0xdb, 0x01, 0x10, 0x8b, 0x96, 0xb3, 0x91, 0x85, 0x75, 0xed, 0x9b, 0x7d, 0x83, 0x21, 0x29, 0x98, 0x20, 0xbb, 0x45, 0xc8, 0x49, 0x56, 0x6e, 0x9e, 0x1a, 0x30, 0x3c, 0x5f, 0x91, 0xdb, 0x47, 0x59, 0x95, 0x36, 0x44, 0x77, 0x37, 0x9c, 0x71, 0x14, 0x37, 0x5b, 0x34, 0x0d, 0xca, 0x68, 0xfe, 0x1a, 0x9a, 0x51, 0x76, 0x5e, 0x0f, 0x72, 0xd4, 0x3c, 0xcd, 0x6c, 0x8a, 0x6d, 0x7e, 0xd3, 0x2a, 0x4f, 0xd1, 0x27, 0x84, 0x80, 0xc2, 0x06, 0x0e, 0xac, 0x1d, 0x9f, 0x8a, 0xa3, 0x3d, 0x6a, 0xe2, 0xaf, 0x1a, 0x17, 0x57, 0x24, 0x83, 0xc4, 0xda, 0x38, 0xa7, 0x72, 0xba, 0x15, 0xda, 0xba, 0x80, 0x2d, 0x96, 0xbc, 0x18, 0xce, 0xc0, 0x59, 0x31, 0xf6, 0x2d, 0xa2, 0xe5, 0x68, 0x65, 0x8f, 0x9d, 0xff, 0xa7, 0xf5, 0x2f, 0x43, 0x2d, 0xb2, 0x4a, 0x3a, 0xb0, 0x2a, 0x14, 0x81, 0x2f, 0xf8, 0x11, 0x9a, 0xed, 0xdd, 0x47, 0x88, 0xb9, 0xfc, 0xa0, 0x99, 0x71, 0x4a, 0x8f, 0x84, 0xc9, 0x40, 0xf6, 0xb3, 0x49, 0xd3, 0x48, 0xe2, 0x95, 0xa5, 0xeb, 0xe9, 0xf1, 0x7d, 0xe0, 0xd6, 0x04, 0xf5, 0xa5, 0x3f, 0xdc, 0x72, 0x5a, 0xd7, 0x33, 0x59, 0x24, 0x3e, 0xf1, 0x80, 0xcf, 0x1e, 0xf2, 0xe3, 0xb7, 0x73, 0x08, 0x99, 0xe8, 0x2a, 0x44, 0x06, 0x84, 0xee, 0x71, 0x51, 0x65, 0x3f, 0xe2, 0x18, 0x04, 0xc4, 0x6e, 0x63, 0x99, 0xe2, 0xb8, 0xd7, 0x84, 0x8d, 0xb4, 0x2d, 0xec, 0x5e, 0x66, 0xe2, 0xa6, 0xe6, 0xed, 0x2f, 0x58, 0x43, 0xc1, 0x3b, 0xde, 0xf0, 0x39, 0x90, 0xec, 0xe2, 0x50, 0xcb, 0xf5, 0xd0, 0xa8, 0x98, 0x4c, 0xd2, 0xcf, 0xde, 0x8a, 0x2d, 0xc2, 0x37, 0x2f, 0x6d, 0xaf, 0xa3, 0x8c, 0xb5, 0xff, 0x7d, 0xe0, 0x54, 0x94, 0xae, 0xc1, 0x98, 0x4f, 0x20, 0xbd, 0xe7, 0xd6, 0x76, 0x42, 0x0b, 0x94, 0xfa, 0xbb, 0xce, 0x01, 0xd6, 0xfc, 0xc7, 0x23, 0x88, 0xe0, 0x73, 0x55, 0x90, 0x30, 0x88, 0x47, 0x6b, 0xc7, 0x85, 0x46, 0xc5, 0xf4, 0x8e, 0xbd, 0xeb, 0x20, 0x77, 0xfc, 0x7f, 0xb1, 0x1f, 0x39, 0x6f, 0x2e, 0xff, 0xd4, 0x27, 0xa3, 0x02, 0xe0, 0x06, 0x47, 0x97, 0xde, 0x0f, 0x5c, 0x05, 0xcb, 0xe2, 0x57, 0x00, 0x5e, 0xea, 0x41, 0x79, 0x8b, 0xd7, 0x5d, 0xba, 0x4b, 0x4f, 0x0b, 0xb1, 0x9f, 0xe0, 0xec, 0x8c, 0xd2, 0x3a, 0x47, 0x87, 0xff, 0x9b, 0xab, 0x02, 0xd4, 0x8a, 0xd6, 0xd7, 0x95, 0xc8, 0xd6, 0xea, 0x64, 0x84, 0x6e, 0x02, 0xbf, 0xce, 0xbb, 0xd7, 0x4a, 0x4e, 0x17, 0x6c, 0xcf, 0x36, 0x3e, 0x9e, 0x83, 0x75, 0xb0, 0xfd, 0x8b, 0x2e, 0x56, 0xdc, 0xbe, 0x68, 0x67, 0xa4, 0xad, 0x07, 0x8d, 0x6e, 0xe0, 0xfb, 0x44, 0xd0, 0x63, 0xb7, 0x83, 0xf6, 0x82, 0xe4, 0x9f, 0xf5, 0xd0, 0x57, 0x6c, 0x5d, 0x6e, 0x41, 0xa5, 0x0d, 0x89, 0xa6, 0x8e, 0x4c, 0x25, 0x11, 0xd7, 0x15, 0x19, 0x85, 0xc4, 0xb1, 0x5b, 0xb6, 0x8b, 0x8c, 0x7e, 0x79, 0xfe, 0x41, 0x79, 0x7a, 0x69, 0xf7, 0xaa, 0x2d, 0xbe, 0xf0, 0x1b, 0x07, 0xef, 0x5f, 0x03, 0xed, 0x9c, 0x7a, 0x90, 0xed, 0xee, 0xd1, 0xe3, 0x2c, 0xc3, 0xde, 0x5d, 0x1f, 0x0b, 0xdd, 0x19, 0xfe, 0x71, 0xde, 0xb9, 0x76, 0x3f, 0x18, 0x66, 0x9f, 0x7b, 0x80, 0x12, 0x2d, 0x56, 0x9a, 0x00, 0xea, 0xc8, 0x8f, 0x87, 0x64, 0x74, 0x81, 0x13, 0xe2, 0xd1, 0x1b, 0x6c, 0x9d, 0x8b, 0x6c, 0x3b, 0x2d, 0x27, 0xf5, 0xca, 0x42, 0xe7, 0x00, 0x0b, 0x94, 0xed, 0x34, 0xdc, 0x1d, 0xa2, 0x67, 0x89, 0x85, 0x59, 0xb3, 0x92, 0xde, 0x30, 0xcc, 0xaf, 0x91, 0x37, 0x90, 0x12, 0x98, 0xd5, 0xe0, 0xec, 0xee, 0x67, 0xaf, 0x32, 0x44, 0x29, 0x58, 0xa1, 0xf6, 0x5a, 0x35, 0x00, 0x3d, 0x9b, 0x6d, 0xa5, 0xa6, 0x99, 0x0d, 0x3a, 0xc3, 0xeb, 0x5b, 0xc1, 0x20, 0x3e, 0x67, 0xd6, 0x78, 0xaf, 0xe2, 0x34, 0x29, 0x78, 0x33, 0x7b, 0xe6, 0xcf, 0xc8, 0x31, 0xac, 0x0b, 0xaa, 0x06, 0xf7, 0x09, 0x55, 0x5c, 0x35, 0xce, 0xc6, 0x06, 0x7b, 0x6d, 0xd5, 0x50, 0x77, 0x2b, 0xc5, 0x40, 0xa6, 0xe2, 0x1a, 0x1c, 0xc6, 0xa3, 0xaa, 0x2c, 0x8f, 0x9f, 0xf7, 0xc1, 0x9e, 0x48, 0xbc, 0x77, 0xb2, 0xb3, 0xc6, 0xb6, 0x1a, 0x41, 0x05, 0x7f, 0x6e, 0x7e, 0xe3, 0x65, 0x7e, 0x49, 0xd4, 0xd9, 0x88, 0x36, 0x2f, 0xab, 0xae, 0x30, 0x3c, 0xce, 0xa6, 0x63, 0x8e, 0x5c, 0xb4, 0x59, 0x93, 0xd9, 0xd5, 0x62, 0x69, 0xbc, 0x3d, 0x3a, 0xf3, 0x2b, 0x04, 0xe6, 0x2d, 0x07, 0x1d, 0xdf, 0xbc, 0x28, 0x87, 0x72, 0xca, 0xea, 0xc7, 0x67, 0x10, 0xe8, 0x95, 0xe1, 0x34, 0x07, 0xd6, 0x85, 0x56, 0xb7, 0xca, 0xde, 0xe6, 0x75, 0x87, 0x00, 0xb8, 0x94, 0xa6, 0x6c, 0x5a, 0x3e, 0x3c, 0x34, 0xa5, 0xb6, 0x0c, 0x60, 0x92, 0xdf, 0xfa, 0x8f, 0x4f, 0x02, 0xc3, 0xe2, 0x92, 0xcc, 0xec, 0x15, 0x2e, 0x96, 0xf8, 0xef, 0xe4, 0xea, 0xde, 0xdd, 0x7b, 0x42, 0xba, 0xda, 0x12, 0x12, 0xc3, 0x91, 0xb6, 0x09, 0x7d, 0xc6, 0x30, 0x94, 0x30, 0xf2, 0x20, 0xa5, 0x98, 0x2d, 0x50, 0xb2, 0xde, 0x51, 0x42, 0x00, 0xc7, 0x5d, 0x0b, 0x21, 0x2c, 0x17, 0x64, 0xbc, 0xaa, 0xf6, 0xff, 0x8c, 0x9a, 0x3e, 0x17, 0xab, 0x43, 0x6d, 0x4b, 0x11, 0x4f, 0xd6, 0xac, 0x57, 0x7c, 0x8c, 0x15, 0xc1, 0x94, 0x81, 0xbb, 0x7c, 0x9f, 0xef, 0x04, 0x24, 0x57, 0xf7, 0x9d, 0x8a, 0xdc, 0x89, 0xc7, 0xb3, 0xa9, 0x83, 0xf1, 0x24, 0xc7, 0x1d, 0x8c, 0x5c, 0x40, 0x84, 0x1b, 0xa3, 0xd7, 0xc5, 0x89, 0x02, 0xf6, 0xed, 0xc0, 0x93, 0xe8, 0x6e, 0x77, 0xfb, 0x48, 0xc5, 0x4b, 0x34, 0xba, 0x5a, 0x12, 0x90, 0xd9, 0xa8, 0x6c, 0xfa, 0x70, 0x9d, 0x9a, 0x7f, 0xec, 0x44, 0x94, 0x0e, 0x11, 0xa1, 0x55, 0x7c, 0xed, 0xdd, 0x7a, 0xcb, 0x0a, 0xa3, 0x0b, 0xac, 0xe8, 0xc9, 0x99, 0x42, 0xaa, 0x33, 0x89, 0x29, 0x10, 0xf4, 0xaf, 0xb7, 0xa5, 0xb7, 0x1f, 0x82, 0x3a, 0x5e, 0x3f, 0x22, 0x92, 0xe8, 0x21, 0x38, 0x5f, 0x98, 0x10, 0xaf, 0x6d, 0x53, 0x69, 0x41, 0x1e, 0x4b, 0xad, 0x3d, 0x16, 0xda, 0xd3, 0x88, 0x37, 0xb0, 0xe3, 0xe2, 0xd0, 0x31, 0xc0, 0x6b, 0x11, 0x19, 0x45, 0x66, 0xc3, 0x62, 0x94, 0x3c, 0x36, 0x67, 0xab, 0xc4, 0x7a, 0x49, 0x39, 0xc1, 0xd1, 0x92, 0xaf, 0xad, 0x65, 0x18, 0x99, 0xb5, 0x37, 0x25, 0x2f, 0x04, 0x58, 0xd4, 0x27, 0x44, 0x5b, 0xbe, 0xce, 0x62, 0x0a, 0xd6, 0x57, 0x92, 0x58, 0x92, 0x73, 0x94, 0x97, 0x4c, 0x22, 0x35, 0xeb, 0xe7, 0xc8, 0x18, 0xff, 0xb5, 0x83, 0xb6, 0xf6, 0x98, 0xbc, 0xa4, 0xa5, 0x68, 0xfc, 0x15, 0xff, 0x95, 0x01, 0x9f, 0xd0, 0x0e, 0x12, 0x42, 0xaf, 0x61, 0x8f, 0xa6, 0x2d, 0x23, 0xcc, 0xa4, 0x53, 0x92, 0x1f, 0x08, 0x4c, 0x79, 0x38, 0x95, 0x5e, 0x54, 0xb1, 0x4a, 0x1f, 0xb5, 0xe6, 0xe4, 0xe5, 0xe6, 0x07, 0xa4, 0x7e, 0xd0, 0x6c, 0x52, 0x21, 0x1b, 0x28, 0x82, 0xa5, 0x97, 0xe0, 0x16, 0xf1, 0xdb, 0xde, 0x04, 0xb4, 0x2c, 0x61, 0x5a, 0x56, 0xa0, 0x37, 0x7f, 0x2e, 0x82, 0x8e, 0xbb, 0xf5, 0xf9, 0x08, 0xf9, 0x7a, 0xe5, 0x0d, 0xcc, 0x98, 0x0a, 0x65, 0xb1, 0x65, 0x70, 0x06, 0x94, 0xad, 0x09, 0x2a, 0x95, 0x9f, 0x95, 0xa5, 0x0b, 0xc5, 0xc3, 0x76, 0xc9, 0x3a, 0x99, 0x9c, 0xa1, 0x17, 0x15, 0x2b, 0x27, 0x2e, 0x15, 0x9e, 0xb7, 0xfb, 0x74, 0x6f, 0xba, 0xd7, 0x76, 0xe5, 0x24, 0x6f, 0x66, 0x2e, 0x41, 0x75, 0x7d, 0xad, 0xb2, 0x95, 0x06, 0x95, 0xb3, 0xab, 0xc0, 0xb7, 0x9f, 0x33, 0x84, 0x98, 0xb5, 0x00, 0x27, 0xc7, 0x1c, 0x32, 0xa2, 0x6d, 0x25, 0x62, 0x70, 0x26, 0xd1, 0x1f, 0x38, 0x0f, 0x93, 0x9e, 0xac, 0x21, 0x56, 0xad, 0xb1, 0xbd, 0xc2, 0xe9, 0xc0, 0x87, 0xbb, 0x31, 0x8c, 0x78, 0x2b, 0x5a, 0xe5, 0x2f, 0x02, 0x24, 0xdc, 0x88, 0x7b, 0x6d, 0x28, 0x70, 0xa0, 0xa5, 0xc8, 0xf8, 0x10, 0x82, 0xea, 0xa8, 0x00, 0xf5, 0x0c, 0x15, 0x80, 0x5c, 0x61, 0xb5, 0xff, 0xf9, 0x76, 0xf3, 0x12, 0xa3, 0x15, 0x7f, 0x71, 0xbb, 0x6a, 0xe8, 0x42, 0x62, 0x64, 0x6c, 0x9b, 0xe9, 0x5e, 0x0f, 0x42, 0x89, 0xff, 0xea, 0xb7, 0x55, 0x5e, 0xc6, 0x74, 0x6c, 0x6a, 0xe9, 0x73, 0x73, 0x8a, 0x30, 0xf1, 0x43, 0x80, 0x5e, 0x72, 0xde, 0x93, 0xb4, 0x05, 0xa8, 0xed, 0xc2, 0xc9, 0xd4, 0x42, 0x7c, 0xb0, 0x1c, 0xb2, 0x90, 0x83, 0xb5, 0xf1, 0xf7, 0x26, 0x82, 0xa5, 0xca, 0x1e, 0x88, 0x0f, 0x58, 0x50, 0xa2, 0xee, 0x75, 0x0b, 0x75, 0xa0, 0x15, 0x49, 0xa7, 0x8b, 0x19, 0x32, 0x4c, 0xbb, 0x68, 0xe2, 0xa1, 0xcc, 0x42, 0x6c, 0xfd, 0x0b, 0xd1, 0x1f, 0x04, 0xd8, 0x01, 0x08, 0x1e, 0x4f, 0x92, 0xb7, 0x28, 0x27, 0x6c, 0x46, 0x69, 0xd9, 0x32, 0x98, 0xc7, 0x05, 0x19, 0xdf, 0x3a, 0x12, 0xfb, 0x61, 0x82, 0x16, 0xa7, 0x7b, 0x15, 0xf5, 0x7c, 0xe6, 0x5c, 0xcc, 0x36, 0x39, 0x1e, 0x90, 0x07, 0xaf, 0x3d, 0xf2, 0xea, 0x2b, 0xa0, 0x86, 0x34, 0x79, 0x70, 0x25, 0x6b, 0xd7, 0x87, 0x90, 0x5c, 0xb4, 0x25, 0x55, 0x68, 0xb7, 0xe5, 0xf7, 0x1f, 0x03, 0xf0, 0x49, 0x10, 0xba, 0x71, 0x1b, 0xde, 0xbf, 0x49, 0x18, 0x97, 0xc1, 0x03, 0xef, 0x42, 0x75, 0x0a, 0xb1, 0xb7, 0x22, 0x19, 0x7a, 0xb4, 0x63, 0xf4, 0x54, 0x2c, 0x29, 0x56, 0x58, 0xe2, 0xff, 0x2a, 0x17, 0x37, 0x92, 0xfd, 0x38, 0x40, 0x70, 0xb4, 0x62, 0x1c, 0x10, 0x7a, 0x5c, 0x85, 0x13, 0xfd, 0x72, 0xa4, 0xc9, 0xda, 0x1b, 0x2a, 0xf7, 0x55, 0xda, 0x9c, 0xd7, 0x4e, 0x62, 0xee, 0x61, 0x71, 0xfd, 0x54, 0xc9, 0xac, 0x2e, 0x55, 0x49, 0xe6, 0x95, 0x21, 0x20, 0xee, 0x14, 0x24, 0xdb, 0xb1, 0x30, 0xdb, 0xd3, 0xb1, 0xba, 0xe7, 0xf7, 0xb2, 0xae, 0x60, 0xcb, 0xb6, 0x5b, 0x6b, 0xb1, 0x2c, 0xc4, 0x0f, 0x68, 0x65, 0x47, 0x44, 0xd2, 0x47, 0x7c, 0x4d, 0xfa, 0x45, 0x60, 0x48, 0x55, 0x8f, 0xb3, 0x04, 0x48, 0x85, 0x9e, 0x12, 0xeb, 0x72, 0x99, 0x1f, 0x0d, 0x77, 0x8c, 0x81, 0x78, 0xc5, 0x34, 0x0f, 0x75, 0x0f, 0xc9, 0x36, 0x93, 0x40, 0xde, 0x49, 0xa5, 0x69, 0x88, 0x19, 0x0a, 0xfd, 0xc2, 0xc6, 0x31, 0x40, 0x10, 0xd4, 0x5b, 0xfd, 0x63, 0x81, 0xa3, 0x77, 0x3d, 0x56, 0x3c, 0xa3, 0x15, 0xfd, 0xfb, 0x94, 0xfd, 0x52, 0x15, 0x37, 0x82, 0xbc, 0x29, 0x40, 0xd4, 0xbe, 0x81, 0x64, 0x27, 0xc9, 0x95, 0xc9, 0x58, 0x55, 0xd0, 0xbb, 0xd4, 0x30, 0x97, 0xa0, 0xb6, 0x15, 0x88, 0x2e, 0x2f, 0x80, 0xff, 0xdb, 0x2b, 0xc1, 0xdf, 0x95, 0x31, 0x4f, 0x8f, 0xb4, 0x8b, 0x60, 0x42, 0x2d, 0xa8, 0xb6, 0x7c, 0x08, 0xbe, 0xbc, 0xd2, 0x14, 0xb3, 0xd1, 0xf1, 0xd9, 0x3e, 0xe4, 0xe1, 0xce, 0x4a, 0x41, 0x8b, 0xcc, 0x9b, 0xaa, 0x79, 0xc3, 0xb3, 0xaa, 0xde, 0xac, 0xf7, 0x26, 0xd6, 0xbe, 0x0e, 0x35, 0xee, 0xe5, 0x8a, 0x32, 0xe7, 0x70, 0xca, 0x0f, 0xb7, 0x09, 0x1e, 0xeb, 0xd1, 0xeb, 0x2d, 0xe7, 0xa6, 0x4f, 0x94, 0x36, 0x6c, 0x27, 0xd0, 0x74, 0x1e, 0x0f, 0x5e, 0x39, 0xc4, 0x81, 0x20, 0xed, 0xf4, 0x48, 0x03, 0xde, 0x99, 0x37, 0xdf, 0x8f, 0xf3, 0x1a, 0x9f, 0x54, 0xdf, 0xed, 0xa1, 0x1b, 0x59, 0x4c, 0x60, 0x8d, 0x3f, 0x2b, 0x50, 0x56, 0x57, 0xc7, 0x09, 0xc0, 0x94, 0xdc, 0xa8, 0x87, 0x95, 0x19, 0x72, 0xe9, 0x6f, 0xd1, 0xbb, 0xfc, 0xac, 0xf3, 0x07, 0x44, 0x94, 0x3c, 0x6e, 0x85, 0xab, 0xab, 0x45, 0xd6, 0x7a, 0x36, 0xfa, 0xf7, 0x92, 0xbb, 0x40, 0xe4, 0xcf, 0x39, 0x6c, 0xaa, 0xda, 0x40, 0x1f, 0x7a, 0xf1, 0xa6, 0x26, 0xfc, 0xeb, 0x7c, 0x9e, 0xe5, 0x76, 0x40, 0x5c, 0xcc, 0xa4, 0x54, 0x8c, 0x3a, 0xa6, 0xaf, 0x97, 0x00, 0xd7, 0xd3, 0x4b, 0xcd, 0xfc, 0xff, 0x36, 0xff, 0xc9, 0xa5, 0x52, 0xba, 0xa8, 0x1e, 0xe8, 0x37, 0xb7, 0x9d, 0xae, 0x5f, 0x0f, 0x62, 0x32, 0x99, 0x4c, 0x30, 0x7c, 0xe0, 0x4a, 0x00, 0xef, 0x18, 0x2c, 0xf7, 0x71, 0xa2, 0xa3, 0x96, 0xcc, 0x2e, 0x6d, 0x31, 0x53, 0xd0, 0x1b, 0xa2, 0xc8, 0x57, 0x18, 0x3e, 0x7d, 0xda, 0xe7, 0x08, 0xba, 0x93, 0xac, 0x25, 0x5f, 0xf0, 0xee, 0x90, 0xca, 0xe8, 0x9b, 0x0f, 0xfb, 0x8c, 0x4c, 0x66, 0xf6, 0xde, 0xcb, 0xca, 0x69, 0xe5, 0xd3, 0x98, 0x8f, 0x01, 0x16, 0x47, 0x54, 0x7d, 0x84, 0x9c, 0xba, 0x63, 0xcb, 0x1c, 0x7b, 0x94, 0x1a, 0xc7, 0xf0, 0x17, 0x2b, 0x03, 0x31, 0xb2, 0x80, 0xd7, 0x7e, 0xb7, 0xed, 0x59, 0xde, 0x21, 0x56, 0x6a, 0x05, 0xdf, 0xba, 0xa0, 0x7b, 0x70, 0x70, 0x84, 0xfb, 0xb0, 0xb1, 0xfe, 0x1a, 0xf2, 0x57, 0x0d, 0x29, 0x4e, 0xe4, 0xbb, 0x5b, 0x3d, 0xc6, 0x51, 0x2b, 0x63, 0xda, 0xc7, 0xf8, 0xab, 0x2e, 0x7e, 0xf2, 0x99, 0x0b, 0x32, 0x3a, 0xdc, 0x33, 0x2a, 0x45, 0x23, 0x67, 0xb1, 0x82, 0x32, 0x2c, 0xca, 0x3c, 0x35, 0xcf, 0x20, 0xc1, 0x54, 0xa7, 0x3c, 0xc4, 0x87, 0x9a, 0xfa, 0x00, 0xac, 0xe2, 0x3e, 0x1e, 0xd7, 0x11, 0xe3, 0xd9, 0xe9, 0x53, 0xf4, 0x60, 0x64, 0xf4, 0x1f, 0xfb, 0x7d, 0x22, 0x66, 0xf2, 0x73, 0xf3, 0x18, 0xab, 0x20, 0xaa, 0x00, 0x12, 0xce, 0x36, 0xdc, 0x3d, 0x4b, 0xfb, 0x11, 0x51, 0x40, 0xd5, 0x9c, 0x9f, 0xbe, 0x5a, 0x4c, 0x13, 0x1a, 0x60, 0x2e, 0xcf, 0xfb, 0xc0, 0x49, 0x13, 0xb1, 0x59, 0x8c, 0x60, 0xc8, 0x57, 0x05, 0xdd, 0xdd, 0xb5, 0x54, 0xf9, 0xb1, 0x00, 0x5e, 0x52, 0x7c, 0x5e, 0x46, 0xd6, 0x84, 0xd0, 0x99, 0x27, 0xed, 0xb4, 0xc8, 0x44, 0xd3, 0x8e, 0xdc, 0x67, 0x96, 0x07, 0x65, 0x29, 0x75, 0x36, 0xb3, 0xec, 0x5f, 0x1f, 0x49, 0x7a, 0x05, 0x79, 0x8f, 0xea, 0x34, 0xb5, 0xc7, 0xc4, 0x62, 0x3b, 0x42, 0x65, 0x87, 0xf7, 0xd4, 0xa4, 0x2e, 0x14, 0x85, 0xb5, 0xcb, 0x07, 0x89, 0x4e, 0x4f, 0xd0, 0x73, 0x09, 0xfa, 0x7c, 0xa5, 0x0a, 0x70, 0xef, 0x0b, 0xe1, 0x10, 0xe0, 0x09, 0xb1, 0x81, 0x25, 0xb1, 0x92, 0x8d, 0x31, 0x3a, 0x35, 0x33, 0xdb, 0xad, 0xc7, 0xf7, 0x61, 0xe2, 0x17, 0x7d, 0xac, 0xab, 0xfa, 0x56, 0xd5, 0x4f, 0xef, 0x1a, 0xe9, 0x3a, 0xff, 0xb7, 0xe9, 0xf2, 0xe7, 0x08, 0x15, 0x4d, 0x79, 0xaa, 0x6a, 0xe2, 0x40, 0x0b, 0x6a, 0xbd, 0x63, 0xc3, 0x1b, 0x57, 0xcb, 0x28, 0x52, 0xc5, 0x88, 0x1c, 0x31, 0x2f, 0x71, 0x2a, 0xef, 0x84, 0x0b, 0xd2, 0xd7, 0x6c, 0xad, 0x20, 0x94, 0x7e, 0xe1, 0x84, 0xab, 0xb4, 0x0c, 0xdd, 0x49, 0x1b, 0x52, 0xd7, 0x3f, 0xcf, 0xb4, 0x77, 0x4b, 0x27, 0x7b, 0xf4, 0x99, 0x2d, 0xda, 0xc9, 0x89, 0x51, 0xcf, 0x08, 0xb3, 0x5e, 0x4a, 0xf1, 0x29, 0xac, 0x91, 0xc3, 0xfb, 0x98, 0xe3, 0xd2, 0x01, 0x31, 0x5b, 0xda, 0xd4, 0x34, 0x18, 0x93, 0x1e, 0x3b, 0x9b, 0x85, 0x14, 0x31, 0x70, 0x1e, 0x40, 0x09, 0x11, 0x02, 0x84, 0xaf, 0x07, 0xa2, 0x5c, 0x3f, 0x52, 0x10, 0x63, 0x76, 0x0b, 0x12, 0x19, 0x66, 0x48, 0x75, 0xe3, 0x6d, 0x40, 0xa3, 0x53, 0x67, 0xb0, 0x78, 0xaa, 0x23, 0x7d, 0x52, 0x9b, 0x14, 0x9a, 0x67, 0x52, 0x49, 0x2c, 0x5c, 0xb5, 0x9f, 0xec, 0x13, 0xea, 0x36, 0xcd, 0xc4, 0x19, 0x21, 0xe0, 0x4f, 0x73, 0x62, 0x74, 0xd0, 0x73, 0x15, 0x81, 0x74, 0x63, 0xeb, 0x47, 0x8c, 0x23, 0xda, 0x32, 0xe0, 0x26, 0x13, 0x01, 0x46, 0xbd, 0x35, 0x27, 0x73, 0x98, 0xc0, 0x71, 0x10, 0x89, 0xcc, 0xea, 0x11, 0x8c, 0xfb, 0xfc, 0x42, 0x05, 0xac, 0xd7, 0x22, 0x48, 0x71, 0x17, 0xf5, 0x5e, 0xc4, 0xa0, 0x15, 0x07, 0xf5, 0xcd, 0x89, 0xfb, 0x67, 0xcb, 0xd8, 0x75, 0xfc, 0x3f, 0x1f, 0xf2, 0xce, 0x2f, 0x62, 0x36, 0x20, 0x1f, 0x20, 0x91, 0x94, 0x7a, 0x2a, 0x60, 0x9e, 0x34, 0xb5, 0xd6, 0x38, 0xae, 0xad, 0xfd, 0xd7, 0xda, 0x4c, 0xf7, 0x9e, 0x9f, 0xec, 0x8a, 0xd2, 0x7f, 0x19, 0xdc, 0x8f, 0x77, 0xeb, 0x7a, 0xb9, 0x26, 0x92, 0x9f, 0x34, 0x32, 0x33, 0xb4, 0x58, 0xe8, 0xf3, 0x13, 0x9f, 0x22, 0x51, 0x10, 0xa1, 0x6e, 0xb8, 0x3a, 0x43, 0x6c, 0x54, 0xde, 0x2b, 0x78, 0x26, 0xcd, 0x77, 0x89, 0x53, 0x5f, 0xae, 0x59, 0xc2, 0xb8, 0xf6, 0xc7, 0xe5, 0x4a, 0x88, 0x79, 0xd7, 0x9b, 0x62, 0xc5, 0xa8, 0x49, 0x3b, 0xd2, 0xf5, 0x4b, 0xbc, 0xfa, 0xbb, 0x79, 0xed, 0x73, 0x6c, 0x4f, 0xee, 0x2f, 0x43, 0xee, 0xe7, 0x00, 0xd5, 0x63, 0x41, 0x00, 0xea, 0x2c, 0x17, 0x30, 0x8a, 0xf8, 0xe7, 0x5f, 0x5b, 0xaf, 0x8e, 0x4e, 0x2a, 0xb2, 0x73, 0x11, 0xc7, 0x64, 0x02, 0xb8, 0x16, 0xe9, 0x5c, 0x2f, 0x63, 0x2e, 0x4c, 0x63, 0xf6, 0x29, 0x7e, 0xa6, 0xe7, 0x62, 0xeb, 0x55, 0x34, 0xb2, 0x98, 0xb8, 0x11, 0x4a, 0x80, 0x29, 0x7f, 0xf8, 0xce, 0x79, 0x20, 0xa6, 0x50, 0x8f, 0x4a, 0x24, 0x29, 0x52, 0x5a, 0x27, 0xc6, 0xca, 0x4b, 0x91, 0x13, 0x81, 0x87, 0xf2, 0xee, 0x30, 0xfc, 0x4f, 0xdc, 0x97, 0x73, 0x23, 0xfa, 0xad, 0x1d, 0xa4, 0x37, 0xf9, 0x6f, 0x47, 0xc1, 0x40, 0x30, 0x86, 0xbd, 0x60, 0xd1, 0xe1, 0x3b, 0x7c, 0xfc, 0x23, 0x69, 0x59, 0x6f, 0xe6, 0x06, 0x08, 0x0b, 0x59, 0x1a, 0xc6, 0x28, 0x41, 0xe5, 0x20, 0x2c, 0x3e, 0x15, 0x5b, 0x5c, 0x50, 0x3c, 0x12, 0xf2, 0x99, 0x80, 0x21, 0x6f, 0x65, 0x95, 0xc2, 0x32, 0x67, 0xe8, 0xf6, 0x4a, 0x45, 0x1d, 0x27, 0x89, 0x58, 0xbc, 0x0b, 0xd9, 0xad, 0x27, 0xcb, 0xd3, 0x4f, 0xd0, 0x65, 0x8e, 0xc8, 0xa8, 0x4f, 0xb5, 0xe5, 0xdb, 0x5d, 0xdd, 0xba, 0xba, 0xe4, 0x15, 0xe6, 0xf8, 0x20, 0xbe, 0x18, 0x1a, 0xd3, 0x9d, 0xd2, 0x29, 0x2f, 0x2e, 0x6d, 0xaa, 0xf6, 0x3b, 0x5e, 0xd0, 0xe0, 0xae, 0xb7, 0xef, 0x3d, 0xa4, 0xf1, 0x34, 0xdb, 0xc2, 0xe8, 0x94, 0x2a, 0xcc, 0x27, 0x02, 0x9e, 0x73, 0x66, 0xe5, 0x55, 0x6f, 0x51, 0xc9, 0xfa, 0xce, 0x8b, 0x54, 0xe9, 0x8c, 0xf3, 0x7c, 0x93, 0x63, 0x26, 0xf8, 0x24, 0xe4, 0x45, 0xf4, 0x64, 0xc7, 0xf8, 0x09, 0xdb, 0x80, 0xb2, 0x6c, 0x39, 0x13, 0x37, 0x66, 0xf5, 0x28, 0x5c, 0x04, 0x33, 0x62, 0x0e, 0x0f, 0xeb, 0xed, 0x96, 0x3e, 0x48, 0x56, 0x1b, 0xab, 0x4e, 0xa0, 0x69, 0x84, 0xc0, 0x94, 0xf1, 0x03, 0x41, 0x58, 0x10, 0xa0, 0xb9, 0x43, 0x94, 0x85, 0xfa, 0xf0, 0x7c, 0x42, 0xa4, 0x91, 0xff, 0xc2, 0x45, 0x86, 0xd0, 0x7d, 0xc5, 0x2f, 0xa1, 0xf0, 0x02, 0xfe, 0xe6, 0x4a, 0xb7, 0xd0, 0xdb, 0x69, 0xa2, 0x7d, 0xc8, 0x04, 0xe6, 0xad, 0x83, 0x2a, 0xae, 0xee, 0x37, 0xeb, 0x13, 0x04, 0x65, 0x55, 0x40, 0x80, 0x28, 0xa2, 0xd3, 0x95, 0xbd, 0xaf, 0x87, 0x26, 0x42, 0xb0, 0x10, 0x23, 0xbe, 0x23, 0x47, 0x16, 0x62, 0x02, 0x87, 0xf9, 0x0f, 0x3d, 0x57, 0x4b, 0x18, 0x67, 0x49, 0x63, 0x48, 0xaf, 0x22, 0x03, 0x27, 0x13, 0x3a, 0x30, 0x79, 0xd0, 0x26, 0x41, 0x08, 0x1d, 0x95, 0x37, 0xa3, 0x18, 0x78, 0x4c, 0x67, 0x01, 0x66, 0xcf, 0x3d, 0xa6, 0x3e, 0x2e, 0xa4, 0x1e, 0x0e, 0x55, 0xb1, 0xba, 0x33, 0x36, 0x53, 0x39, 0xc2, 0xa9, 0xdc, 0x3b, 0x27, 0x77, 0xbd, 0xf9, 0x0c, 0xb1, 0x91, 0x32, 0x7d, 0x47, 0x5e, 0x69, 0x49, 0xd5, 0x17, 0x4d, 0xab, 0xc0, 0x65, 0x79, 0x29, 0x82, 0xa6, 0x5d, 0xbd, 0x42, 0x37, 0x7c, 0x33, 0xa8, 0xee, 0xd9, 0xd2, 0xef, 0xeb, 0xab, 0x3e, 0x3c, 0x91, 0x58, 0x9d, 0x2e, 0xcf, 0xa1, 0xf9, 0xb6, 0xa4, 0x1a, 0xe5, 0x29, 0xe2, 0xde, 0x64, 0x93, 0x32, 0x80, 0x06, 0x4f, 0x58, 0x45, 0x54, 0xd4, 0xb8, 0x90, 0x6e, 0xd2, 0x19, 0x9d, 0xf3, 0x7e, 0xaa, 0x72, 0x21, 0x29, 0x42, 0x13, 0x3e, 0x18, 0xec, 0xf6, 0x36, 0x90, 0xa3, 0xb6, 0x85, 0x30, 0x5a, 0x0b, 0x57, 0x84, 0x40, 0xfa, 0xee, 0xd6, 0x41, 0x49, 0x45, 0x47, 0xd0, 0x36, 0xf3, 0x1f, 0xe4, 0x69, 0x51, 0x62, 0x40, 0x26, 0xdf, 0xa4, 0xf8, 0xc7, 0xe4, 0x1d, 0x31, 0x6a, 0x55, 0x00, 0x28, 0xe7, 0xf8, 0x09, 0x76, 0x05, 0xc9, 0x55, 0x92, 0xed, 0x9d, 0x77, 0x97, 0xde, 0x05, 0xc8, 0x47, 0x23, 0x75, 0xfe, 0x50, 0x42, 0xa6, 0x01, 0xcf, 0x77, 0x38, 0xfa, 0x13, 0x60, 0x9c, 0xac, 0xa3, 0xfa, 0x31, 0x07, 0x82, 0xcc, 0xad, 0xfa, 0xb1, 0x62, 0xbf, 0x8a, 0xf6, 0xfd, 0xf3, 0x21, 0xdc, 0x89, 0xd5, 0x28, 0xfb, 0xcf, 0x59, 0xd7, 0x79, 0xec, 0x7a, 0x4c, 0xd1, 0x02, 0x22, 0xdb, 0xd3, 0x2d, 0x4a, 0xa6, 0xed, 0xb9, 0x62, 0x6d, 0xa8, 0x92, 0xf3, 0xa7, 0x75, 0xfb, 0x83, 0xd1, 0xaa, 0x83, 0xb9, 0x06, 0xc8, 0x35, 0xc1, 0xd0, 0xff, 0x10, 0xf2, 0x3e, 0xf4, 0xb7, 0xae, 0x36, 0xc1, 0x69, 0x8a, 0x0d, 0x3d, 0x32, 0xaf, 0x55, 0x7f, 0x63, 0x81, 0xf6, 0x9d, 0x41, 0x7e, 0x81, 0xb9, 0xfa, 0x68, 0xc0, 0x3f, 0xdd, 0xa6, 0x92, 0x68, 0xc9, 0xe8, 0xf5, 0x03, 0xe6, 0x0a, 0x65, 0x74, 0x94, 0x3b, 0x65, 0xfd, 0xa1, 0x5e, 0x5b, 0x3c, 0xbf, 0xb0, 0xa0, 0xf5, 0x35, 0xab, 0xd8, 0x12, 0xd4, 0x2b, 0x7f, 0xe8, 0x2d, 0xd0, 0xc5, 0xbc, 0x01, 0xa3, 0x9c, 0x86, 0xf9, 0xfc, 0x0f, 0xf4, 0x97, 0xa3, 0xd5, 0xb2, 0x6d, 0x35, 0x26, 0xe9, 0x8d, 0xc9, 0xcd, 0x06, 0x40, 0xd4, 0x7f, 0xbc, 0xfb, 0x4a, 0x6b, 0x4c, 0x8e, 0x06, 0x12, 0x04, 0x9f, 0x6c, 0x59, 0x05, 0x57, 0x4d, 0xdc, 0x4a, 0x5b, 0x0a, 0x86, 0xe6, 0xfe, 0xfd, 0x5f, 0x8d, 0xb5, 0x14, 0xa4, 0x56, 0xcb, 0xbf, 0x1d, 0xbf, 0x55, 0x0d, 0xab, 0xf2, 0x69, 0x12, 0x21, 0x47, 0x8b, 0x8b, 0x54, 0x09, 0x68, 0xc5, 0x76, 0x7d, 0xc7, 0xba, 0x9f, 0x20, 0xbc, 0x7d, 0xad, 0x31, 0x1e, 0xd9, 0x4e, 0x6f, 0x3c, 0x35, 0x5b, 0x24, 0xcc, 0xbb, 0x68, 0x62, 0x24, 0xba, 0x99, 0x8d, 0xad, 0x48, 0xb7, 0x19, 0x94, 0x2b, 0x82, 0x95, 0xc2, 0xfa, 0x49, 0xe9, 0x0f, 0x7f, 0xb9, 0xdc, 0xb2, 0x60, 0xf3, 0xd9, 0xfc, 0xfe, 0xe1, 0xf2, 0x47, 0x9e, 0xc9, 0x25, 0x29, 0xc7, 0x22, 0xde, 0xed, 0xea, 0xa7, 0xbe, 0x43, 0x49, 0xab, 0x9b, 0x36, 0x11, 0xac, 0xc8, 0x5f, 0xc9, 0x2a, 0x96, 0x58, 0xf0, 0xb9, 0x1a, 0x74, 0xe2, 0x56, 0x31, 0xad, 0xfc, 0xf7, 0xc2, 0xde, 0x00, 0x66, 0x43, 0x33, 0xbb, 0x4e, 0x7f, 0xdd, 0xe5, 0x96, 0x96, 0x0a, 0x48, 0xef, 0x45, 0x14, 0x25, 0xa9, 0x67, 0xf8, 0xd3, 0xcb, 0xbc, 0x0b, 0xa9, 0x62, 0xea, 0xe8, 0x1e, 0x19, 0xc1, 0xad, 0x2f, 0x0a, 0xc3, 0x67, 0x01, 0xd4, 0xe4, 0xca, 0xc8, 0xee, 0x8e, 0x26, 0xe7, 0x3b, 0xe8, 0x96, 0x59, 0xde, 0x58, 0x7b, 0x4f, 0x4f, 0x47, 0x28, 0x1a, 0xae, 0x24, 0xdf, 0x4c, 0x58, 0xab, 0xfd, 0x1a, 0xb9, 0x67, 0x71, 0x05, 0x61, 0x75, 0x72, 0xba, 0x59, 0x8c, 0x72, 0x36, 0xb7, 0x3a, 0x4d, 0x2d, 0x70, 0x70, 0xc7, 0xad, 0x6e, 0x41, 0x35, 0xff, 0xe2, 0xe7, 0x7a, 0xce, 0xdc, 0x07, 0x35, 0x8a, 0x19, 0x36, 0x39, 0x0f, 0x1b, 0xbb, 0x3e, 0x82, 0x7f, 0x96, 0xd6, 0x7c, 0x8c, 0xc2, 0xa2, 0x6b, 0x08, 0xb8, 0xc5, 0x35, 0x4f, 0x34, 0x99, 0x1e, 0xa6, 0x3b, 0xa1, 0xeb, 0xcc, 0x5d, 0xbf, 0x47, 0xd2, 0x38, 0xa7, 0x67, 0x2d, 0x3d, 0x94, 0xea, 0x0a, 0xb7, 0x3a, 0x03, 0xe1, 0x08, 0xfb, 0xd9, 0x4d, 0x36, 0x5d, 0x2e, 0x1b, 0xa7, 0xbc, 0x3f, 0xa0, 0x29, 0x3c, 0xec, 0x50, 0x36, 0x02, 0x19, 0x8d, 0x75, 0xa4, 0x54, 0xbd, 0x83, 0xdd, 0xb8, 0x9f, 0xf4, 0x86, 0x11, 0xdf, 0x95, 0xc1, 0x41, 0xe8, 0xf4, 0x78, 0xe2, 0xf9, 0x23, 0x06, 0x2c, 0x7b, 0xb8, 0x33, 0x19, 0x92, 0x18, 0x66, 0xc8, 0xf2, 0xf6, 0x16, 0x1f, 0xf4, 0x16, 0x82, 0xb5, 0xe8, 0x57, 0xa2, 0xef, 0xad, 0xf0, 0x5d, 0x69, 0x80, 0xfa, 0xfc, 0x97, 0x12, 0x2f, 0xdf, 0xac, 0xdd, 0xf1, 0x6e, 0xba, 0xb7, 0x8e, 0x53, 0x1b, 0xa8, 0xc2, 0xe7, 0x11, 0xf9, 0x7d, 0xe9, 0xa9, 0x8d, 0xe7, 0x76, 0xe5, 0x75, 0xa1, 0x35, 0x19, 0xbe, 0x4e, 0xd3, 0x96, 0x8d, 0x53, 0xaf, 0x86, 0x6f, 0xda, 0xd6, 0x17, 0xea, 0x1d, 0x31, 0xdc, 0x58, 0xe1, 0xfd, 0x70, 0xf5, 0x40, 0x7c, 0x5c, 0x36, 0xac, 0xea, 0x3a, 0x5c, 0x31, 0xb3, 0x1b, 0x4a, 0xfa, 0xe3, 0x27, 0x93, 0x17, 0xde, 0x83, 0xd8, 0x7e, 0x51, 0x78, 0x51, 0x4f, 0x68, 0xd1, 0xa9, 0x5c, 0x42, 0x84, 0x0f, 0xe8, 0xa2, 0x95, 0x8a, 0xaf, 0xe7, 0x38, 0x8c, 0x27, 0x3e, 0x36, 0xcb, 0x06, 0x16, 0x91, 0x4c, 0x04, 0xd4, 0x6b, 0xc0, 0xe2, 0xc8, 0x24, 0x14, 0xab, 0x60, 0xc3, 0x44, 0x3a, 0x9c, 0x97, 0x70, 0xfc, 0xc2, 0x1e, 0x31, 0xf7, 0x53, 0x25, 0x2d, 0x0b, 0x3d, 0x31, 0xe9, 0x78, 0x52, 0x1e, 0xdf, 0xa1, 0xf9, 0x06, 0xd1, 0x10, 0x24, 0x64, 0x5c, 0xb9, 0x82, 0x79, 0xd0, 0x83, 0xf5, 0xef, 0x3f, 0x04, 0x46, 0xbd, 0xd4, 0x8c, 0x18, 0x4a, 0x66, 0x66, 0x1a, 0xd5, 0x4d, 0x5a, 0x81, 0x14, 0x75, 0x76, 0xb6, 0x1b, 0xb1, 0x0f, 0x4b, 0x80, 0x51, 0x02, 0x34, 0xbd, 0xf6, 0x3f, 0x34, 0xd5, 0xa5, 0x89, 0x95, 0x3b, 0x1b, 0x77, 0x1c, 0xef, 0x60, 0xbf, 0x3c, 0xea, 0x9f, 0xb3, 0x8a, 0xbc, 0x35, 0x0c, 0x71, 0x74, 0x08, 0xe7, 0x27, 0xc0, 0x1a, 0x0d, 0xdf, 0x55, 0x5e, 0x77, 0x41, 0x91, 0xca, 0x12, 0x17, 0x5f, 0xad, 0xbf, 0x49, 0x5c, 0x43, 0x9e, 0x0b, 0x38, 0x86, 0x8c, 0x55, 0x5e, 0x48, 0xea, 0x93, 0xd7, 0x7f, 0xa1, 0x9f, 0x6b, 0xe0, 0x62, 0xec, 0x0a, 0xaf, 0x33, 0x04, 0x6b, 0xd5, 0x27, 0x34, 0xf3, 0x33, 0x6c, 0x85, 0xd8, 0x36, 0x8b, 0xef, 0x86, 0xab, 0xec, 0xca, 0x42, 0xd5, 0x99, 0x85, 0x0d, 0xbd, 0x43, 0x9a, 0xcb, 0xca, 0x8a, 0xc1, 0xa4, 0x91, 0x79, 0x65, 0xab, 0xee, 0x50, 0x54, 0xbd, 0x54, 0x87, 0xba, 0xac, 0x61, 0x0f, 0x50, 0x9d, 0xb6, 0xdb, 0xd1, 0xaf, 0x05, 0x9f, 0xae, 0xde, 0x6b, 0xd8, 0x02, 0x26, 0x01, 0x0c, 0xc8, 0xeb, 0xae, 0x53, 0x4c, 0x98, 0x3f, 0x16, 0xdf, 0x87, 0xb9, 0x17, 0xcf, 0x21, 0xed, 0xb1, 0x96, 0x46, 0x4e, 0x62, 0x52, 0xef, 0x00, 0x86, 0x75, 0x11, 0x31, 0x65, 0xbe, 0xc5, 0xac, 0x70, 0x68, 0xa7, 0xab, 0xc8, 0xa1, 0x7b, 0xed, 0x00, 0x3d, 0x17, 0x09, 0x24, 0xac, 0x7d, 0x02, 0xfa, 0x29, 0x47, 0x1b, 0x87, 0x35, 0x48, 0xed, 0xd5, 0x44, 0x70, 0xb6, 0xf4, 0xb6, 0xf0, 0xf4, 0x3f, 0x08, 0x9f, 0x33, 0xe0, 0x4c, 0x9c, 0x23, 0x97, 0xd6, 0x35, 0xed, 0xb7, 0x39, 0x08, 0xc7, 0x71, 0x72, 0x68, 0xc7, 0x54, 0x62, 0x03, 0xf4, 0x15, 0x82, 0xc1, 0xa3, 0x8c, 0xd2, 0xef, 0x01, 0x00, 0x12, 0x9c, 0xec, 0xa4, 0x35, 0x43, 0x07, 0x61, 0x13, 0xab, 0x0d, 0xd6, 0x5e, 0x0c, 0x65, 0x9e, 0xd7, 0x73, 0xf7, 0xd1, 0xc1, 0x67, 0x3f, 0xcd, 0x96, 0xcd, 0x9f, 0x36, 0xfa, 0x09, 0xfa, 0x3b, 0xed, 0x66, 0x7e, 0x1b, 0x44, 0xb8, 0xc1, 0xe8, 0x5a, 0x40, 0x10, 0x8c, 0x03, 0xcf, 0x04, 0x09, 0xc1, 0x2e, 0x55, 0x05, 0x3b, 0xbe, 0xf3, 0x85, 0xea, 0x5c, 0x53, 0xf9, 0x16, 0x87, 0x07, 0x79, 0x01, 0xc5, 0x92, 0x4e, 0x62, 0x42, 0x7a, 0xb4, 0x14, 0xbb, 0x9f, 0xde, 0x10, 0x9a, 0xca, 0x3b, 0x99, 0x63, 0x89, 0xf8, 0xb6, 0x4e, 0x3b, 0xc6, 0xe5, 0x36, 0x67, 0xdd, 0x0e, 0xb1, 0x52, 0x40, 0xb6, 0x81, 0xd0, 0x43, 0x75, 0x2b, 0x5a, 0x4b, 0xaa, 0xe5, 0x61, 0xd6, 0x6d, 0xb5, 0xe2, 0xbb, 0xc5, 0xd8, 0x3b, 0xb2, 0x1b, 0x61, 0x3d, 0x16, 0xef, 0x22, 0x82, 0xea, 0xca, 0xcf, 0x00, 0x1b, 0x74, 0x61, 0xdf, 0x04, 0x66, 0xb9, 0x88, 0x37, 0x82, 0x86, 0xff, 0x7b, 0x02, 0x68, 0x72, 0x11, 0xaf, 0x56, 0x12, 0x3c, 0x53, 0x3d, 0x21, 0x00, 0x70, 0xe9, 0x4c, 0x29, 0x32, 0x29, 0x3c, 0x8f, 0xa3, 0x2e, 0x68, 0x99, 0x1e, 0x35, 0x2d, 0x00, 0x06, 0x66, 0x20, 0xd5, 0xb7, 0xfb, 0xa3, 0xc6, 0xbd, 0xa4, 0xb6, 0x9d, 0x45, 0x2a, 0x10, 0x09, 0xd0, 0x53, 0x6f, 0xa1, 0x2f, 0x07, 0x2c, 0x26, 0xab, 0xb0, 0x12, 0x08, 0x84, 0xe7, 0x70, 0x2c, 0x9d, 0x4c, 0x6d, 0xed, 0x75, 0xb5, 0x9c, 0x61, 0x59, 0x8c, 0xd0, 0xdd, 0xd8, 0x72, 0x32, 0xbb, 0x78, 0x28, 0x90, 0x5a, 0xa7, 0xb0, 0xf8, 0x67, 0xf4, 0xaf, 0x86, 0x5b, 0x7f, 0x16, 0x7a, 0x45, 0xae, 0x01, 0x8d, 0xca, 0x22, 0xe0, 0x86, 0x6a, 0xea, 0xd4, 0x08, 0x05, 0xf6, 0x5c, 0xae, 0x9d, 0xce, 0x30, 0x5a, 0x5d, 0x84, 0x6d, 0xc9, 0xda, 0xe6, 0xf3, 0x6b, 0x9a, 0xf9, 0x0b, 0x72, 0xd3, 0xa3, 0x4e, 0x29, 0x74, 0xa8, 0xc2, 0x88, 0x69, 0xd8, 0x45, 0x05, 0x1b, 0x86, 0x2f, 0xac, 0x37, 0x3b, 0x33, 0x72, 0xb1, 0xac, 0x86, 0xc7, 0x08, 0xea, 0x43, 0x6a, 0xcb, 0xd9, 0x0f, 0x81, 0x5c, 0xe3, 0xf9, 0xe9, 0xf4, 0xed, 0xa3, 0xcb, 0xe7, 0x8a, 0xa7, 0x70, 0x2a, 0x6f, 0x34, 0x56, 0x12, 0x28, 0xf8, 0x83, 0x5e, 0x09, 0x43, 0x19, 0x78, 0x66, 0x69, 0x2b, 0xf8, 0x07, 0x68, 0xcf, 0x6a, 0xd6, 0xca, 0x74, 0x51, 0xdb, 0xcd, 0x76, 0x6c, 0x6a, 0xc2, 0xf0, 0x37, 0x9b, 0xb3, 0xd2, 0xb5, 0xfb, 0x48, 0x33, 0x6d, 0x81, 0xeb, 0xe8, 0xb2, 0xc4, 0x2b, 0x55, 0x28, 0x6a, 0x5e, 0x83, 0x84, 0xe4, 0x8b, 0x73, 0x93, 0x59, 0x87, 0xb2, 0x7e, 0xdf, 0x5d, 0x2e, 0x4c, 0xf1, 0xf3, 0x48, 0xa8, 0x1e, 0xeb, 0x2a, 0xe5, 0xfe, 0xc8, 0x5b, 0x3f, 0x6a, 0x52, 0x90, 0x64, 0xec, 0x3b, 0xc6, 0x33, 0x75, 0x02, 0x8d, 0xc3, 0x4e, 0x18, 0xa7, 0xa7, 0x51, 0x42, 0xd1, 0x70, 0x59, 0x3e, 0xe1, 0x74, 0xf7, 0xa9, 0x11, 0xce, 0x67, 0x20, 0x9b, 0xa6, 0xc2, 0xa6, 0x86, 0xb3, 0x74, 0x45, 0xbf, 0xfd, 0xf1, 0xf8, 0x6b, 0xe8, 0xa4, 0xc9, 0x7c, 0x6e, 0x28, 0x37, 0x82, 0xac, 0xbb, 0xda, 0xc4, 0xa0, 0xf0, 0x4a, 0x90, 0x31, 0xa4, 0x3c, 0xcf, 0x6f, 0x32, 0xee, 0xdc, 0x1d, 0xeb, 0xc6, 0x97, 0x6d, 0xc0, 0x36, 0xb5, 0x0a, 0x42, 0xe2, 0x5a, 0x5b, 0xcd, 0x05, 0xe9, 0x07, 0xff, 0x10, 0x1b, 0xb4, 0x6f, 0x95, 0x4e, 0x15, 0x9c, 0x64, 0x20, 0x23, 0x24, 0xf4, 0x3d, 0xaa, 0x37, 0x04, 0x75, 0x08, 0x4a, 0x81, 0x12, 0x31, 0x10, 0xab, 0x68, 0xf7, 0xa6, 0x74, 0xad, 0x89 ],
+const [ 0xb3, 0xf1, 0x97, 0xb9, 0x84, 0x41, 0xa1, 0xef, 0x2b, 0xb3, 0x53, 0xf6, 0xf7, 0xea, 0x1c, 0x97, 0x5d, 0x1b, 0xa5, 0xe6, 0xf5, 0x09, 0xfa, 0xcf, 0xc5, 0x33, 0xea, 0xf2, 0xc2, 0x4b, 0xb0, 0xb1, 0x94, 0xeb, 0xd3, 0x86, 0x9a, 0x84, 0x4a, 0x9a, 0x2e, 0x97, 0xe4, 0x94, 0x2a, 0x27, 0xe7, 0xaf, 0xaa, 0x6e, 0xf7, 0x10, 0x14, 0xcf, 0x3a, 0x56, 0x56, 0x0c, 0xba, 0x72, 0x6f, 0xb9, 0x0b, 0xb9, 0x31, 0xf0, 0x2d, 0x37, 0x45, 0x47, 0xb3, 0x47, 0x6f, 0xff, 0x25, 0x61, 0x13, 0x7e, 0xa4, 0x32, 0xf9, 0xff, 0xcc, 0xf2, 0x4d, 0x89, 0xdf, 0xf2, 0xea, 0x1d, 0x1f, 0x74, 0xd8, 0x34, 0x7b, 0xc0, 0x12, 0x69, 0x6e, 0x74, 0x8d, 0x72, 0x25, 0x1c, 0x77, 0x54, 0xe0, 0x02, 0xbc, 0xd7, 0x9a, 0x48, 0xcf, 0x38, 0xec, 0x33, 0xa7, 0x1f, 0x2f, 0xca, 0x08, 0xd0, 0xe1, 0xa0, 0x03, 0xa5, 0x49, 0xee, 0xc0, 0xbc, 0x5e, 0xe4, 0x7b, 0xed, 0xe6, 0x41, 0xcd, 0xff, 0xdb, 0x22, 0x2d, 0x1b, 0x12, 0x17, 0xb6, 0x80, 0x1f, 0x7c, 0x2b, 0x79, 0x73, 0x07, 0x38, 0x8c, 0xc7, 0x9d, 0xfa, 0xf5, 0xbe, 0x6a, 0xc2, 0x53, 0xc5, 0x30, 0x16, 0xa0, 0x3e, 0xdf, 0xf9, 0x66, 0xdf, 0x67, 0x6d, 0x30, 0x54, 0xca, 0x35, 0x3f, 0x2c, 0x75, 0xdf, 0x7f, 0xf2, 0xd0, 0x02, 0xba, 0x9a, 0x14, 0xc5, 0x0a, 0x20, 0x5d, 0xa0, 0x94, 0x6b, 0x00, 0x67, 0x73, 0x77, 0x1e, 0x84, 0xf3, 0xb3, 0x79, 0x83, 0x00, 0xa8, 0x87, 0xd5, 0xde, 0xdc, 0xc5, 0xcd, 0x1a, 0xf6, 0x4e, 0xef, 0xc0, 0x22, 0xac, 0x6a, 0xce, 0xb7, 0xee, 0xe3, 0xe9, 0x18, 0xfa, 0x74, 0x4f, 0xd8, 0x25, 0xf5, 0x0d, 0x21, 0x01, 0x7a, 0x72, 0x56, 0x76, 0x1c, 0xc3, 0xf7, 0x15, 0xfd, 0x30, 0xc5, 0xa8, 0x86, 0x07, 0x27, 0x0e, 0xf3, 0x28, 0xcd, 0x46, 0x12, 0xb9, 0x93, 0xc9, 0x47, 0x1a, 0xa8, 0x1d, 0xd4, 0x1b, 0xef, 0xa7, 0x57, 0x6d, 0xa5, 0xc1, 0x94, 0x57, 0x45, 0x0c, 0x75, 0xaa, 0xa8, 0x07, 0x4f, 0xf7, 0x71, 0xe1, 0x67, 0xff, 0xa8, 0x8c, 0xb5, 0x6b, 0xa5, 0x13, 0xe8, 0xbe, 0x30, 0x2d, 0xaa, 0x87, 0xe6, 0x12, 0x24, 0xdb, 0xdf, 0x8d, 0xc5, 0x02, 0x8d, 0x53, 0x3f, 0x71, 0xe7, 0x93, 0xd3, 0xf8, 0xc7, 0xce, 0xcf, 0x3d, 0x91, 0xe9, 0x55, 0x69, 0x16, 0x81, 0x5d, 0x21, 0xb8, 0x7e, 0xfd, 0xb8, 0xce, 0xeb, 0xe9, 0xa3, 0x4a, 0x05, 0x36, 0x2d, 0x99, 0x91, 0x63, 0x6c, 0xca, 0x73, 0x99, 0x73, 0xf3, 0x7d, 0x32, 0xc9, 0xd0, 0x85, 0x79, 0x1a, 0xae, 0xba, 0xb0, 0x2d, 0x87, 0x38, 0x58, 0x16, 0x6f, 0xd9, 0xac, 0xad, 0x2e, 0x4e, 0x6f, 0x3e, 0x2f, 0x6f, 0xe7, 0x82, 0x99, 0xd0, 0x2a, 0xce, 0xbb, 0x95, 0x98, 0x8b, 0xad, 0x87, 0xa9, 0xe6, 0x34, 0x67, 0xe9, 0xc8, 0xe7, 0x82, 0x40, 0x09, 0x90, 0x85, 0x77, 0xe1, 0xd5, 0x93, 0xf8, 0x9f, 0x18, 0x95, 0xd5, 0x9d, 0x9b, 0xd1, 0x0c, 0x73, 0xe8, 0xbf, 0x0a, 0x6b, 0x70, 0x17, 0x6d, 0x35, 0x72, 0x2f, 0x0e, 0xdc, 0x1e, 0x84, 0x3f, 0xf9, 0xfb, 0x96, 0x51, 0x27, 0x86, 0xfa, 0x5a, 0xb6, 0x1c, 0xaa, 0x34, 0xa4, 0x19, 0x9f, 0xc9, 0xc8, 0x42, 0xa2, 0x8e, 0x51, 0x60, 0x5f, 0x4e, 0x6f, 0x2e, 0xbb, 0x29, 0x50, 0x75, 0x67, 0xdc, 0x4e, 0x76, 0xb5, 0x43, 0x67, 0x88, 0xab, 0x1c, 0xed, 0x02, 0x57, 0x0d, 0x7e, 0x5b, 0x61, 0xe9, 0x37, 0x90, 0xe7, 0x2f, 0x25, 0xc6, 0x84, 0xd3, 0xfc, 0x31, 0xb2, 0x41, 0x0c, 0x34, 0x53, 0xa0, 0x70, 0xca, 0x8a, 0x53, 0x89, 0x24, 0xcf, 0xc6, 0xab, 0x94, 0x43, 0x67, 0x15, 0xa9, 0x40, 0xf2, 0x27, 0x9c, 0x35, 0xf2, 0xcf, 0xea, 0xb1, 0x85, 0x45, 0x43, 0xbd, 0x5f, 0xf8, 0xa3, 0x6f, 0x11, 0xc8, 0xbf, 0xbc, 0x8b, 0x75, 0xa2, 0x8e, 0xe0, 0x57, 0x98, 0x16, 0x4a, 0x50, 0x4b, 0x64, 0x6e, 0x00, 0x2c, 0x35, 0xe1, 0x37, 0x14, 0x0c, 0xea, 0xb0, 0x2b, 0x84, 0x8a, 0xfc, 0x0a, 0xe4, 0xb9, 0xbc, 0x1c, 0xf4, 0xf3, 0x13, 0x4a, 0x0f, 0xf3, 0x5b, 0xd7, 0x7a, 0xbf, 0x17, 0x88, 0xf4, 0xe4, 0x29, 0x09, 0x8e, 0x03, 0x46, 0x8c, 0xbd, 0x8c, 0xa6, 0xb3, 0xae, 0xca, 0x00, 0xb0, 0xd9, 0x20, 0xb5, 0xab, 0xd9, 0x92, 0x4c, 0x63, 0x7b, 0x86, 0x1e, 0x19, 0x15, 0xcc, 0x52, 0xaa, 0x19, 0xdd, 0x0c, 0xfb, 0xe9, 0x60, 0xe2, 0x99, 0xed, 0xf3, 0x90, 0xa1, 0xe4, 0x27, 0xec, 0xde, 0x77, 0xcc, 0x1c, 0x32, 0x14, 0x70, 0x06, 0x37, 0xf9, 0x22, 0x08, 0x25, 0x8f, 0x7c, 0xe9, 0xf7, 0xfa, 0xe0, 0x10, 0xc9, 0xee, 0x01, 0xf4, 0x85, 0xc4, 0xa5, 0xd4, 0xbe, 0xcd, 0xaa, 0xa8, 0xdc, 0xe6, 0x47, 0x57, 0x7a, 0x4c, 0x95, 0x2a, 0x0c, 0xb2, 0x4e, 0x81, 0xc5, 0x91, 0xd4, 0xc5, 0xb8, 0xc0, 0x75, 0x9d, 0x3d, 0x44, 0xed, 0x65, 0x96, 0x69, 0x2c, 0xdc, 0xd2, 0x12, 0x5a, 0x1c, 0xf2, 0x4d, 0x19, 0xd0, 0x4b, 0x2a, 0x0a, 0xa1, 0x2b, 0xce, 0x92, 0xf1, 0xbf, 0xc3, 0xde, 0xcc, 0x34, 0x92, 0x24, 0x1b, 0x1d, 0x94, 0x2c, 0x1b, 0x15, 0x05, 0x10, 0x0e, 0xa5, 0x5a, 0x40, 0x31, 0x68, 0xd4, 0xc8, 0xed, 0x6c, 0x56, 0xd6, 0x51, 0xdc, 0x74, 0x76, 0xc0, 0xdc, 0xcc, 0xa1, 0xe7, 0xb5, 0x99, 0x76, 0xf2, 0x32, 0x85, 0xc7, 0x00, 0x4a, 0xbf, 0xd7, 0xd4, 0xfe, 0x4e, 0x62, 0xcd, 0x85, 0xa5, 0xde, 0x18, 0xa7, 0x77, 0x01, 0x24, 0x67, 0xcc, 0x83, 0x56, 0xe4, 0x55, 0x25, 0xff, 0x81, 0xfc, 0xf2, 0x8b, 0x44, 0xc0, 0xc5, 0xfb, 0x7c, 0xc0, 0x0b, 0x95, 0xa7, 0x95, 0xca, 0xd9, 0x92, 0xe5, 0xe3, 0xb8, 0xc2, 0x35, 0x94, 0x01, 0x13, 0xff, 0x40, 0x1c, 0x9f, 0x05, 0x73, 0xfa, 0xe1, 0xe4, 0x21, 0x4c, 0x1b, 0xec, 0x2e, 0xf3, 0xf4, 0x2f, 0x33, 0xb8, 0x66, 0xd8, 0x80, 0x3e, 0xd7, 0xbf, 0x5d, 0x34, 0x86, 0x3a, 0x96, 0xcf, 0x29, 0x35, 0x36, 0x78, 0xd5, 0x85, 0x92, 0xc2, 0x1d, 0x79, 0x89, 0x9e, 0x7e, 0xb2, 0x0b, 0xd2, 0xfb, 0x35, 0xd8, 0xa7, 0x04, 0xbf, 0x8a, 0xe2, 0x9c, 0x59, 0xd6, 0xf6, 0xbb, 0x2b, 0x0f, 0x78, 0xf1, 0x95, 0xeb, 0xd3, 0x4d, 0x7c, 0x8a, 0x3d, 0x7d, 0xe2, 0xb4, 0xea, 0x36, 0xba, 0x63, 0x7f, 0xd7, 0xfa, 0x81, 0xc9, 0x49, 0xf1, 0xf2, 0xaf, 0x29, 0xdb, 0xd5, 0x65, 0x29, 0xb3, 0x07, 0xe3, 0xb3, 0x48, 0xe9, 0x96, 0xd0, 0x93, 0x64, 0x55, 0x49, 0x48, 0x2a, 0x96, 0x0c, 0xab, 0x3e, 0xe2, 0xd0, 0xa5, 0xb6, 0x86, 0xfc, 0x17, 0xc0, 0x8c, 0xc5, 0x6e, 0xe3, 0xe9, 0x97, 0x78, 0x87, 0xf8, 0xb7, 0x76, 0xb8, 0x27, 0x26, 0x72, 0x27, 0xf1, 0xc8, 0xd2, 0x71, 0x0c, 0xc5, 0x2e, 0xa4, 0xe3, 0x30, 0x5f, 0x00, 0x46, 0xe7, 0xd8, 0xfa, 0x60, 0xba, 0x3a, 0x87, 0xea, 0xcf, 0x22, 0x96, 0x9f, 0x44, 0x45, 0xde, 0xf0, 0x17, 0xc0, 0xdb, 0xf8, 0x43, 0xa9, 0x13, 0xb2, 0x2c, 0xea, 0x9e, 0x6a, 0x3d, 0x4f, 0xe5, 0x71, 0xd0, 0xdd, 0xaa, 0x15, 0x4e, 0x66, 0x49, 0xd0, 0x97, 0x5a, 0x3d, 0xc0, 0xa4, 0xe0, 0xe5, 0x57, 0x6b, 0x25, 0x88, 0x54, 0x02, 0xf4, 0x98, 0xf2, 0x08, 0x88, 0x33, 0x5f, 0x41, 0x9e, 0xef, 0x6f, 0x80, 0xce, 0xd7, 0x92, 0xca, 0x1a, 0xb1, 0x04, 0xb8, 0xc8, 0x83, 0x43, 0x1d, 0x6d, 0x55, 0xc6, 0xe9, 0x4b, 0x37, 0xec, 0x4d, 0xdc, 0x86, 0x33, 0x20, 0xaf, 0x6c, 0xaa, 0x82, 0x73, 0xa6, 0xa9, 0xbf, 0x52, 0x8a, 0xbf, 0x76, 0x80, 0x48, 0xec, 0xfa, 0x13, 0x70, 0x10, 0xf8, 0x15, 0xb4, 0xa4, 0x5a, 0xd7, 0xf0, 0xa8, 0x6c, 0x89, 0x67, 0xdc, 0x3d, 0x08, 0x4f, 0x33, 0x49, 0xf7, 0x91, 0x85, 0x54, 0x11, 0xca, 0x84, 0x99, 0xbd, 0x95, 0xf1, 0x24, 0xe3, 0x0c, 0x10, 0x7d, 0xff, 0x8c, 0x59, 0x86, 0x74, 0xb9, 0x70, 0xa6, 0x22, 0xc2, 0x57, 0x27, 0x3a, 0xe7, 0xe3, 0xdd, 0x51, 0x38, 0x6c, 0x09, 0xb4, 0x9f, 0xc9, 0x7c, 0xfc, 0x20, 0x7b, 0x00, 0xe2, 0x60, 0x29, 0xf3, 0x54, 0x64, 0x4d, 0x35, 0xc8, 0x9c, 0x2c, 0x45, 0xd0, 0x20, 0x0b, 0xa6, 0xee, 0x39, 0xa0, 0x88, 0xaa, 0x23, 0xc7, 0xa4, 0xe3, 0x11, 0x76, 0x68, 0x63, 0x72, 0xf3, 0x54, 0xb6, 0x73, 0x44, 0xa4, 0x3b, 0xc5, 0xe8, 0x2f, 0x7b, 0xa0, 0xc4, 0x8f, 0xba, 0x08, 0x60, 0x82, 0xcc, 0x4f, 0x53, 0x90, 0x2a, 0xdb, 0xfc, 0xee, 0x45, 0x29, 0x73, 0xa3, 0x1a, 0x12, 0xbf, 0xe9, 0x07, 0x4d, 0x4a, 0xd6, 0xdd, 0x36, 0x92, 0x3b, 0x36, 0xcd, 0x20, 0xcd, 0x09, 0x02, 0xbe, 0x82, 0x7b, 0x30, 0xe5, 0x3e, 0xf8, 0xe7, 0x75, 0xaf, 0x83, 0xee, 0xa8, 0x75, 0x4a, 0x88, 0x49, 0x87, 0x7e, 0xf7, 0x21, 0xd2, 0x61, 0x3f, 0xb3, 0x23, 0xa1, 0x2c, 0x29, 0x46, 0xe4, 0x96, 0x8d, 0x70, 0xa4, 0xe4, 0x3c, 0xda, 0x3d, 0xcf, 0x98, 0xaf, 0x44, 0x69, 0xfe, 0x28, 0x1b, 0x5d, 0xf8, 0xf5, 0xc2, 0x78, 0xb3, 0xe0, 0xf0, 0x68, 0xb3, 0xad, 0x63, 0xc4, 0xc5, 0x44, 0x74, 0x4d, 0x35, 0x12, 0xee, 0x74, 0x42, 0xac, 0x20, 0x1c, 0xcf, 0xb5, 0x31, 0xa0, 0x5b, 0x03, 0xb4, 0x18, 0x33, 0xfd, 0x7c, 0xd8, 0xe6, 0x47, 0xb2, 0x3a, 0xfa, 0xa2, 0x24, 0x9e, 0xdd, 0x0d, 0xe0, 0xae, 0x1e, 0x30, 0x02, 0xe7, 0xdd, 0xfb, 0xca, 0x55, 0x81, 0x8b, 0xf2, 0x9d, 0xa9, 0x4d, 0x3e, 0x41, 0x64, 0x65, 0x54, 0x20, 0xa4, 0x51, 0xce, 0x3c, 0xf0, 0xc9, 0x8e, 0xc0, 0x5a, 0xea, 0x51, 0x42, 0xb1, 0x94, 0x87, 0x45, 0xf7, 0x11, 0x63, 0x02, 0x15, 0xf7, 0x2e, 0x68, 0xce, 0x4f, 0xe0, 0x61, 0xf2, 0xf6, 0xf1, 0x57, 0xd4, 0x44, 0x6d, 0xf7, 0xfd, 0xec, 0x47, 0x34, 0x22, 0x23, 0xef, 0x8f, 0x54, 0x05, 0x26, 0x96, 0x77, 0x34, 0x12, 0xab, 0xf5, 0xc2, 0x8d, 0x07, 0xb4, 0x51, 0xc3, 0xff, 0x45, 0x78, 0xfc, 0x85, 0x5e, 0x69, 0xb6, 0xf1, 0x8a, 0xd1, 0xf7, 0x02, 0x1f, 0x00, 0xe1, 0x1f, 0x70, 0x4a, 0x87, 0xe3, 0x45, 0xad, 0xff, 0xd9, 0x88, 0xb4, 0xb9, 0x84, 0x41, 0x9a, 0x0e, 0xa3, 0xc5, 0xb3, 0x1c, 0xb2, 0x29, 0x08, 0xd2, 0xb4, 0xfd, 0x41, 0x47, 0x30, 0x37, 0xc9, 0x50, 0x7a, 0x6e, 0x2c, 0x51, 0x33, 0x49, 0xc4, 0x53, 0x13, 0x36, 0x94, 0x57, 0xe6, 0x5f, 0x74, 0xea, 0xd5, 0xda, 0x6f, 0xfa, 0xe7, 0x1f, 0x69, 0xe8, 0xc8, 0xc0, 0x04, 0xde, 0xc8, 0x54, 0xc5, 0x63, 0x26, 0xb4, 0x73, 0x2d, 0x8f, 0x6b, 0xc0, 0x36, 0xe2, 0x67, 0x2c, 0x12, 0x36, 0xf5, 0x25, 0x7f, 0x1e, 0xec, 0x73, 0x3e, 0x2c, 0x27, 0xd3, 0x21, 0xb3, 0x39, 0xe2, 0x66, 0xd1, 0x5d, 0x3d, 0x43, 0xad, 0xac, 0xe7, 0xc2, 0xfe, 0x93, 0xeb, 0xcf, 0xcd, 0x83, 0x42, 0x8f, 0x7b, 0xea, 0xf6, 0xf4, 0x05, 0x63, 0x88, 0x8f, 0x87, 0x29, 0x90, 0xa5, 0xff, 0xd2, 0xa3, 0x84, 0x54, 0x3a, 0x79, 0x17, 0x97, 0xbd, 0x4f, 0xb9, 0x88, 0xa9, 0x8b, 0x47, 0x5c, 0xf2, 0x9f, 0x79, 0xbd, 0x28, 0x2f, 0x72, 0x13, 0xa7, 0x76, 0x95, 0x02, 0x0e, 0xe6, 0x9b, 0x33, 0xf2, 0x0e, 0xe2, 0x58, 0xd3, 0xc1, 0x08, 0x6a, 0x4e, 0x75, 0xb9, 0x35, 0x95, 0xe9, 0xc5, 0x17, 0x1d, 0x0b, 0x76, 0x05, 0x96, 0x18, 0x20, 0xce, 0x20, 0x05, 0xf9, 0xa4, 0xbc, 0x1e, 0x2b, 0xd8, 0x00, 0xed, 0x28, 0xe5, 0x10, 0x5d, 0x3e, 0xb0, 0xc9, 0x1f, 0x6b, 0x0e, 0x3f, 0x4d, 0x72, 0x87, 0x6a, 0x4d, 0x2e, 0x5a, 0x1c, 0xf9, 0x27, 0xc0, 0x36, 0xfc, 0x63, 0x75, 0x1c, 0x7f, 0x7f, 0x75, 0x66, 0x06, 0xfe, 0x03, 0xd9, 0x94, 0xe0, 0xf0, 0x95, 0x16, 0x76, 0x1a, 0x8f, 0xfe, 0x76, 0x33, 0x42, 0x2f, 0x4b, 0xc4, 0xa2, 0x19, 0xae, 0x71, 0x52, 0x25, 0x7a, 0x7e, 0x16, 0x53, 0xbc, 0x92, 0x8b, 0x21, 0x0a, 0xbb, 0x16, 0xb0, 0x17, 0xb3, 0x1a, 0x22, 0x84, 0x62, 0x6e, 0x46, 0xf8, 0xa3, 0x0e, 0x77, 0x72, 0x4b, 0x10, 0xc1, 0xde, 0x68, 0xda, 0x46, 0xe7, 0xc6, 0x93, 0xe0, 0x0d, 0xb8, 0xd7, 0x08, 0xf7, 0x14, 0xaf, 0xf7, 0x0a, 0x80, 0xc0, 0x0a, 0x3a, 0xec, 0xc2, 0x6b, 0x20, 0x60, 0x34, 0xee, 0x4d, 0xf8, 0x4e, 0x39, 0xdf, 0x2d, 0x38, 0x28, 0x52, 0x55, 0x79, 0x70, 0x98, 0x6d, 0xb2, 0x82, 0x6b, 0x17, 0x8c, 0xb2, 0xe2, 0xdf, 0xef, 0x98, 0x42, 0xc2, 0x75, 0xb6, 0x17, 0xf1, 0x1e, 0x5c, 0x84, 0xd2, 0x45, 0xc9, 0xd8, 0x48, 0xd2, 0x93, 0x61, 0x34, 0xb2, 0x49, 0x85, 0x3c, 0x84, 0x56, 0x0e, 0xcb, 0x95, 0x28, 0xc6, 0x58, 0x0f, 0x92, 0x44, 0xec, 0x6d, 0x6f, 0x05, 0xde, 0x32, 0x89, 0xbf, 0xe1, 0xdb, 0xb9, 0xf1, 0x42, 0x12, 0x4f, 0xbf, 0x6a, 0x24, 0xb3, 0xfd, 0xaa, 0xb5, 0x4d, 0x8a, 0x38, 0xb3, 0xa3, 0xdf, 0x74, 0x88, 0xc1, 0xe7, 0x70, 0x94, 0xde, 0x12, 0xb0, 0xda, 0x3c, 0xa5, 0x2e, 0xf9, 0x50, 0x54, 0xa1, 0x5f, 0x23, 0x12, 0xff, 0xb9, 0xf8, 0x28, 0x41, 0xad, 0x2f, 0x84, 0x66, 0xcc, 0x69, 0x54, 0xba, 0xc2, 0xed, 0xd4, 0x58, 0xd0, 0x4b, 0x64, 0xee, 0x7d, 0x3f, 0xde, 0xc0, 0x88, 0xd7, 0x26, 0xf0, 0x20, 0xd8, 0x03, 0xfc, 0x57, 0x5f, 0x2d, 0x88, 0xd5, 0xc4, 0xa7, 0x5e, 0xc9, 0xc3, 0x4e, 0xb3, 0x26, 0xde, 0xb3, 0xac, 0x0b, 0xfd, 0x26, 0x20, 0x82, 0x58, 0x13, 0xa0, 0x6e, 0x96, 0x92, 0xb4, 0xbf, 0x36, 0x39, 0x68, 0xe8, 0x2f, 0x34, 0x07, 0x93, 0xd3, 0x98, 0x27, 0x93, 0xf9, 0xf5, 0xe5, 0x1a, 0x5b, 0x2b, 0x72, 0x2c, 0x3d, 0x7e, 0xcf, 0x53, 0x50, 0xec, 0xd4, 0x95, 0xd5, 0xbd, 0x77, 0xa3, 0x05, 0x5d, 0x4b, 0x53, 0xb1, 0x67, 0x47, 0x50, 0x26, 0x02, 0xc9, 0x10, 0x53, 0x70, 0xda, 0x07, 0x2e, 0xe4, 0xb4, 0x1b, 0x53, 0x94, 0x82, 0x57, 0xee, 0x10, 0x66, 0xe3, 0xdc, 0xd2, 0xc0, 0x34, 0x0d, 0x16, 0xae, 0x80, 0x2d, 0xec, 0xcf, 0x75, 0x83, 0x8b, 0x4d, 0x2a, 0x19, 0xe8, 0x1a, 0x56, 0x1d, 0x87, 0x79, 0xc0, 0x87, 0x91, 0xc1, 0xf6, 0xfc, 0x28, 0x5d, 0x42, 0xf2, 0xf7, 0x18, 0xda, 0x16, 0x0d, 0x98, 0x57, 0xea, 0xeb, 0x27, 0x68, 0xb3, 0xdb, 0xba, 0xc8, 0x92, 0x84, 0x2b, 0x6d, 0xf1, 0xbc, 0xca, 0x03, 0x20, 0x9d, 0x14, 0x98, 0x40, 0xdb, 0xc2, 0x99, 0x61, 0x54, 0x06, 0xfd, 0xe7, 0xe9, 0x11, 0xc0, 0x32, 0x8d, 0xd8, 0x93, 0x7e, 0x9b, 0x18, 0xd2, 0x07, 0x6d, 0x97, 0xb6, 0x71, 0x2a, 0xae, 0xcc, 0x68, 0xdf, 0x04, 0xa5, 0x84, 0xd2, 0x9c, 0xcf, 0x6f, 0x13, 0x12, 0x05, 0x49, 0x53, 0x21, 0xa3, 0x4b, 0xf9, 0x69, 0x5d, 0xab, 0x73, 0x6f, 0x2f, 0xc0, 0xca, 0xe6, 0x97, 0x67, 0x7a, 0x2d, 0x03, 0xa5, 0x80, 0x18, 0x85, 0x8e, 0xb4, 0xf3, 0xce, 0x65, 0x59, 0xc4, 0x5a, 0x04, 0xf3, 0xd1, 0xe8, 0x7e, 0x58, 0x62, 0x2d, 0x04, 0x0a, 0xc8, 0xc9, 0x05, 0xc4, 0x9e, 0x7a, 0x99, 0x53, 0x4f, 0x90, 0x20, 0xa7, 0xd9, 0xa1, 0x26, 0x2a, 0xd0, 0x7d, 0x8b, 0x51, 0xa5, 0x64, 0xe0, 0x70, 0x28, 0x77, 0x13, 0xd2, 0x4c, 0x6d, 0x4f, 0x09, 0x2a, 0x87, 0x1e, 0x83, 0x49, 0xc6, 0xd1, 0x5e, 0x1d, 0x5b, 0x21, 0x7d, 0xcd, 0x5f, 0x16, 0xdc, 0x3a, 0xc4, 0x28, 0x20, 0x3c, 0x8c, 0xa5, 0x73, 0x2e, 0x38, 0x52, 0x8e, 0xae, 0x84, 0x55, 0x17, 0x9e, 0x51, 0x52, 0x2e, 0x6e, 0xe3, 0xd5, 0x43, 0x9e, 0x4c, 0xf0, 0x2a, 0x7e, 0x28, 0x25, 0x71, 0x39, 0x8b, 0x85, 0xf1, 0x11, 0x38, 0x1a, 0xa3, 0xec, 0x14, 0x83, 0xb5, 0x10, 0xda, 0xde, 0xdd, 0x2b, 0x0f, 0xeb, 0xee, 0x96, 0x39, 0x6d, 0xa9, 0xda, 0x4c, 0xd4, 0xd5, 0x74, 0x65, 0x1a, 0x92, 0xd5, 0xba, 0xeb, 0xea, 0xad, 0xd1, 0x08, 0xa9, 0x69, 0xf1, 0xed, 0x6e, 0xfa, 0xd7, 0xb2, 0x03, 0xd9, 0xa9, 0x2f, 0xea, 0x48, 0x30, 0x63, 0x38, 0xda, 0x41, 0x17, 0xa7, 0x35, 0x7c, 0xbe, 0xe6, 0x17, 0x3a, 0xa0, 0x33, 0x97, 0xc0, 0x37, 0x2c, 0xae, 0xb9, 0xd9, 0xe2, 0xf5, 0xe3, 0x98, 0x30, 0xb0, 0x08, 0x67, 0x4b, 0x0c, 0x30, 0x7e, 0x99, 0xa5, 0x15, 0xff, 0xc7, 0x4b, 0xd7, 0xd9, 0x16, 0x06, 0xf1, 0xec, 0xf5, 0x57, 0x6c, 0x6f, 0xd5, 0xc1, 0x52, 0x8f, 0x39, 0x88, 0x66, 0x59, 0x0c, 0xb9, 0x12, 0xda, 0x38, 0x6a, 0xa1, 0x85, 0x74, 0x43, 0xae, 0xd5, 0x5d, 0x3e, 0xdc, 0x33, 0xc9, 0xaa, 0xc8, 0x19, 0x58, 0x76, 0x3c, 0x78, 0x4c, 0xac, 0xa6, 0x57, 0x9a, 0x3c, 0xc8, 0xbd, 0x40, 0xfb, 0xb0, 0xd2, 0xda, 0xeb, 0xeb, 0x41, 0x70, 0xbd, 0xf6, 0xe0, 0x93, 0x94, 0xf5, 0x93, 0xa8, 0x0c, 0xa7, 0x6e, 0x83, 0x7b, 0x9a, 0x19, 0x38, 0x77, 0x9b, 0x79, 0x2d, 0x98, 0x71, 0x8c, 0x74, 0x7e, 0xcb, 0x95, 0x58, 0x16, 0x76, 0x7a, 0x36, 0x1a, 0xd3, 0x6a, 0x8f, 0xd7, 0x89, 0xc2, 0x5a, 0x33, 0x77, 0x32, 0x9f, 0xee, 0xed, 0x1c, 0x41, 0x28, 0x1b, 0x3c, 0x1c, 0x24, 0xc9, 0x8e, 0x4f, 0x4b, 0x49, 0x6c, 0xdb, 0x74, 0xaa, 0xf7, 0x6e, 0x62, 0x2f, 0xb9, 0x79, 0x8e, 0xff, 0x89, 0x88, 0x27, 0x1e, 0xae, 0xd3, 0x58, 0x9c, 0x47, 0x10, 0xc9, 0x0d, 0xea, 0x8c, 0x68, 0x39, 0x8b, 0x7a, 0x69, 0x14, 0x9f, 0x8b, 0x8b, 0xf0, 0x82, 0xbf, 0x9e, 0xf1, 0x16, 0x7a, 0x42, 0xc1, 0xae, 0xda, 0xf1, 0x86, 0x2a, 0x48, 0x40, 0x11, 0x63, 0x4d, 0x61, 0x58, 0xc9, 0xa7, 0xed, 0x27, 0x4a, 0x9d, 0xe0, 0x12, 0x76, 0x8f, 0xe6, 0xae, 0xe1, 0xd1, 0xd5, 0x01, 0xc9, 0xba, 0x7a, 0x36, 0xf9, 0xf7, 0x98, 0x95, 0xed, 0x25, 0x2e, 0xb3, 0x37, 0xa0, 0xf9, 0xe6, 0x22, 0x95, 0x3a, 0xfc, 0x94, 0x5f, 0xb9, 0x2d, 0x39, 0x10, 0x0a, 0x4d, 0xdd, 0x4d, 0x0f, 0x47, 0x1a, 0x60, 0xbe, 0xc6, 0x34, 0x88, 0x24, 0x35, 0x41, 0x93, 0xaa, 0xea, 0x8d, 0xaf, 0x98, 0x9e, 0x3c, 0x7e, 0xd7, 0x21, 0x31, 0x68, 0xfb, 0x4b, 0x2f, 0x35, 0x81, 0x36, 0x3e, 0xdb, 0x54, 0xaa, 0x51, 0x94, 0x96, 0xd9, 0x25, 0x34, 0x9e, 0x4d, 0x6c, 0xba, 0x3d, 0x1e, 0x2b, 0x25, 0x46, 0x68, 0x61, 0x89, 0x4d, 0xfc, 0xe9, 0x61, 0xae, 0x56, 0xa1, 0x27, 0xd2, 0xd0, 0xcc, 0x22, 0xad, 0x15, 0xb5, 0x80, 0x8b, 0xd7, 0x96, 0xa4, 0x0d, 0xc5, 0xb7, 0xc1, 0x6e, 0xb7, 0xda, 0xa8, 0x0b, 0x2c, 0xd7, 0xde, 0x23, 0xf7, 0x84, 0xf2, 0xdb, 0x35, 0xd7, 0x0d, 0x85, 0x82, 0x4f, 0xcb, 0x21, 0x6d, 0x8f, 0x49, 0x24, 0x29, 0x4d, 0x80, 0x79, 0x85, 0x6a, 0xd1, 0xc6, 0x1d, 0x62, 0xe0, 0xf0, 0xd2, 0xe7, 0xa6, 0xe1, 0x79, 0xc9, 0xc2, 0x89, 0xd0, 0x19, 0x10, 0x22, 0xb6, 0x8e, 0x7d, 0xb9, 0x9b, 0x27, 0x1a, 0xea, 0x35, 0x12, 0x6f, 0xeb, 0x74, 0xcd, 0x11, 0xcc, 0xb9, 0x8b, 0x77, 0xfc, 0x43, 0xd9, 0x09, 0x10, 0xe9, 0x81, 0x7a, 0xc0, 0x0f, 0xaf, 0x58, 0x32, 0xd3, 0x52, 0xe1, 0x7c, 0x87, 0xc5, 0x19, 0x64, 0x64, 0xaf, 0x19, 0x69, 0x7c, 0x28, 0xaa, 0x08, 0xf1, 0x1d, 0x12, 0x38, 0x65, 0xf5, 0x2e, 0x37, 0xb1, 0x74, 0xc1, 0x88, 0xda, 0xe0, 0x0c, 0x3d, 0x41, 0x63, 0x9f, 0x72, 0x19, 0xb1, 0x6e, 0x1a, 0x1e, 0xea, 0x27, 0xfe, 0x84, 0xc2, 0xc3, 0x02, 0x2e, 0xdf, 0x5c, 0xaa, 0x21, 0x83, 0x3e, 0xde, 0x38, 0x6a, 0x40, 0xea, 0x19, 0xf6, 0x55, 0xc9, 0x67, 0x89, 0x5e, 0xa3, 0x3a, 0x32, 0x42, 0x94, 0xcc, 0x8d, 0x41, 0xaf, 0x75, 0xe4, 0x85, 0x43, 0xd9, 0x9a, 0xfa, 0x5c, 0x60, 0xca, 0x60, 0x8d, 0xe6, 0x2b, 0x9f, 0xed, 0xb4, 0x37, 0x5a, 0x60, 0xaf, 0x8c, 0xc6, 0x18, 0xd0, 0x92, 0xbd, 0x5b, 0xd4, 0x5e, 0x0e, 0x86, 0x35, 0xd6, 0x18, 0x52, 0x58, 0x16, 0x97, 0x56, 0x08, 0x13, 0xbd, 0xcd, 0x23, 0x7e, 0x85, 0x9a, 0x93, 0xec, 0x44, 0x89, 0x80, 0x33, 0x80, 0xd8, 0xc4, 0x17, 0x06, 0xf6, 0xa0, 0x26, 0x37, 0x8a, 0xad, 0xe0, 0xa3, 0xb7, 0x15, 0x1b, 0xd9, 0x9e, 0x02, 0xa6, 0x7c, 0x25, 0x57, 0x2d, 0x9a, 0xf7, 0x9f, 0x5c, 0x3a, 0xcd, 0x42, 0x47, 0x34, 0xeb, 0xff, 0x0a, 0x46, 0xed, 0x96, 0xac, 0x63, 0xc3, 0xc5, 0x4a, 0x4e, 0xfb, 0x76, 0x71, 0x68, 0x3e, 0x37, 0xcb, 0xc7, 0x1e, 0xea, 0xfe, 0x87, 0x0f, 0xbe, 0xd1, 0x65, 0xb2, 0x5e, 0x91, 0x89, 0x5a, 0x68, 0xb3, 0xa4, 0xc9, 0x20, 0xba, 0x3b, 0x3a, 0x66, 0x5b, 0x43, 0xa5, 0xe5, 0xdf, 0xed, 0x3e, 0x8e, 0xca, 0xc3, 0x3e, 0x45, 0xba, 0xf4, 0xe7, 0xd9, 0x91, 0xec, 0xc2, 0x3a, 0xd6, 0x28, 0x2c, 0xe6, 0x59, 0x49, 0x10, 0xa5, 0x16, 0x67, 0xf6, 0x76, 0x5c, 0xa7, 0x3d, 0xc9, 0x2f, 0x10, 0xa4, 0xee, 0xea, 0x9a, 0x10, 0xce, 0x29, 0x88, 0x89, 0xd9, 0xe5, 0xf8, 0x85, 0x3f, 0xe1, 0xb9, 0x69, 0x63, 0x45, 0x5c, 0x4d, 0x8d, 0x89, 0x8e, 0xff, 0xde, 0x95, 0xa5, 0x4b, 0x8a, 0x27, 0x78, 0x7a, 0x41, 0x74, 0x74, 0x19, 0xee, 0x12, 0xec, 0xfc, 0xa4, 0x15, 0xb1, 0x82, 0xd5, 0x79, 0xe3, 0x19, 0xc6, 0xc0, 0x06, 0x05, 0x3f, 0xdb, 0x58, 0x5e, 0x87, 0x4e, 0x62, 0x58, 0x90, 0x90, 0xce, 0xc8, 0x6e, 0xb0, 0x78, 0xe3, 0x0d, 0x3e, 0xc8, 0x48, 0x24, 0x69, 0x3e, 0x41, 0x65, 0x65, 0x4e, 0x45, 0xf7, 0x10, 0x6f, 0xc2, 0x25, 0xd4, 0x6f, 0x1a, 0x58, 0xcf, 0x09, 0xeb, 0x42, 0x31, 0xb9, 0x94, 0x5d, 0xe6, 0xcf, 0xf5, 0x94, 0x76, 0xc3, 0x76, 0x3f, 0x29, 0xc8, 0x4a, 0x55, 0x6e, 0xa3, 0xf5, 0xdd, 0x7d, 0xbe, 0x0b, 0xa6, 0x3c, 0x78, 0x3b, 0x38, 0x5f, 0xc0, 0x8d, 0x0a, 0xd4, 0xe2, 0xe8, 0xf6, 0x5e, 0xa0, 0xd7, 0xe9, 0x80, 0x85, 0x8c, 0xdf, 0x9c, 0x76, 0x26, 0x0f, 0x5c, 0x8a, 0x2f, 0x62, 0x51, 0x1c, 0x69, 0x2a, 0xda, 0x1e, 0xca, 0x11, 0x48, 0xaf, 0xc5, 0x4f, 0x3f, 0xf0, 0xcb, 0x21, 0x5f, 0x14, 0x12, 0x76, 0x24, 0xb7, 0x95, 0xeb, 0x0b, 0x71, 0x5c, 0xf9, 0xf7, 0xaa, 0xfd, 0x6d, 0xd2, 0xb0, 0x63, 0x19, 0x77, 0x06, 0xce, 0xca, 0xd0, 0x00, 0x1b, 0x7a, 0x3b, 0x8c, 0x46, 0xc6, 0x33, 0x53, 0x2d, 0xa2, 0x2c, 0x01, 0x96, 0x4b, 0xbe, 0xe0, 0x74, 0x7d, 0x06, 0xac, 0x66, 0xe7, 0x4a, 0xa3, 0x81, 0xdc, 0xdb, 0xdb, 0x4f, 0x4b, 0x40, 0xd8, 0x17, 0xf1, 0x90, 0x5e, 0x5f, 0xcd, 0x20, 0x84, 0xb0, 0xd4, 0x5e, 0x0a, 0x99, 0xe7, 0xfd, 0xec, 0xf6, 0x02, 0x53, 0x37, 0x73, 0xb6, 0xff, 0x1c, 0x4b, 0xd9, 0xce, 0x43, 0x56, 0x7c, 0xe0, 0x62, 0x42, 0x1d, 0x06, 0x0d, 0x20, 0x1e, 0x6f, 0xd0, 0x23, 0x76, 0x84, 0x7b, 0xa5, 0xa7, 0x10, 0xbd, 0x6b, 0xf0, 0xa4, 0xf4, 0x2a, 0xc3, 0x3a, 0x44, 0x4a, 0x79, 0x18, 0xe6, 0xe9, 0x45, 0xf7, 0xc3, 0x23, 0x66, 0x65, 0x42, 0x91, 0xa1, 0x68, 0x5e, 0x0f, 0xef, 0x64, 0xfb, 0xc3, 0x73, 0x3e, 0x7a, 0x5b, 0xae, 0xc2, 0x8b, 0x95, 0xf6, 0x42, 0x42, 0x05, 0x24, 0x80, 0x6e, 0x13, 0x8e, 0xcf, 0x26, 0x43, 0x35, 0x74, 0xa4, 0xb9, 0x3f, 0x52, 0x57, 0xfc, 0xa7, 0xc7, 0x33, 0xfa, 0x33, 0xd1, 0x4c, 0x4c, 0xa6, 0x75, 0xa3, 0xbc, 0x37, 0x61, 0x3f, 0x04, 0x43, 0xd0, 0x80, 0xd9, 0x3f, 0xae, 0xb1, 0x28, 0xf0, 0xfc, 0xdc, 0xa0, 0xde, 0x77, 0xe2, 0x70, 0x06, 0x74, 0xca, 0x52, 0xcf, 0x0f, 0x5a, 0xc8, 0x3f, 0x84, 0xe4, 0xa5, 0x6f, 0xdd, 0x63, 0xd0, 0x3c, 0xce, 0xc7, 0x45, 0x40, 0xdd, 0x8c, 0x5c, 0x01, 0xc5, 0x91, 0x4e, 0x67, 0x1d, 0x28, 0xf5, 0x74, 0x35, 0x69, 0xd3, 0x2f, 0x41, 0xcd, 0x56, 0xe1, 0xb9, 0xf8, 0x5a, 0x84, 0xff, 0xd5, 0xf0, 0x79, 0x43, 0xe8, 0x5e, 0x79, 0xa4, 0xe0, 0x67, 0xce, 0x97, 0x6c, 0xcc, 0xc3, 0x8d, 0x50, 0x12, 0x59, 0xd0, 0xb8, 0x86, 0x3b, 0xae, 0xcc, 0x7f, 0xf4, 0xda, 0x84, 0xe3, 0x60, 0x0f, 0xbe, 0xec, 0x60, 0xf6, 0x8e, 0x2c, 0xd2, 0x4a, 0xd5, 0xcf, 0xc1, 0x3a, 0x15, 0x21, 0xd8, 0x0f, 0x83, 0x50, 0x1d, 0x0e, 0x5e, 0x72, 0xdc, 0xa0, 0x80, 0xc9, 0xe0, 0xb0, 0x33, 0x46, 0xe9, 0x55, 0x45, 0x4d, 0x5b, 0xb1, 0x5f, 0xb8, 0x34, 0x19, 0x92, 0x1e, 0x40, 0x75, 0x33, 0x55, 0x90, 0xea, 0xe9, 0x35, 0x28, 0xb7, 0x04, 0x9f, 0xf8, 0x5d, 0x10, 0xbe, 0x0e, 0x03, 0xaa, 0x8d, 0x09, 0x18, 0x93, 0x9a, 0xd1, 0x3a, 0x03, 0x09, 0x85, 0x57, 0x40, 0xdb, 0xb5, 0x12, 0x6e, 0x71, 0xd2, 0x68, 0xa9, 0x4b, 0xe2, 0x93, 0x51, 0x16, 0x78, 0x2e, 0xa5, 0xe6, 0xe4, 0x9b, 0x94, 0xc0, 0xa7, 0xa2, 0xcf, 0x5b, 0x2a, 0x5a, 0x23, 0x27, 0xaf, 0x4d, 0x06, 0x8f, 0x87, 0xd7, 0x70, 0x7b, 0x85, 0xcf, 0xec, 0x1a, 0xb4, 0x69, 0xee, 0xde, 0x45, 0x5b, 0x67, 0xc8, 0xcb, 0x3f, 0x97, 0xe5, 0xab, 0x39, 0x22, 0x19, 0xcd, 0xd9, 0x67, 0x1b, 0x98, 0x43, 0x0d, 0xc1, 0x1e, 0x8d, 0xde, 0x7e, 0x93, 0x68, 0xd9, 0x29, 0x04, 0x03, 0x82, 0xff, 0x45, 0x2c, 0x7d, 0xec, 0x2c, 0xb9, 0x5b, 0x06, 0xfc, 0x26, 0xb4, 0x5a, 0x24, 0x7f, 0x76, 0xec, 0x2a, 0x80, 0x7c, 0xf9, 0xe2, 0xfc, 0x63, 0x7f, 0xe3, 0x7b, 0x99, 0x00, 0x3b, 0x27, 0xb6, 0x82, 0x62, 0xe9, 0x10, 0xda, 0x6d, 0xcf, 0x89, 0x2a, 0x84, 0xb1, 0xac, 0xa9, 0x96, 0x14, 0xf9, 0xa2, 0x4b, 0x4e, 0x7c, 0xc0, 0x3b, 0xeb, 0xa5, 0x88, 0x5d, 0x50, 0x53, 0x27, 0xc2, 0x9e, 0x32, 0x6e, 0x83, 0xd9, 0x47, 0x1b, 0xf8, 0x4a, 0xc9, 0x5a, 0x2a, 0x21, 0x33, 0x8b, 0x8b, 0x5f, 0x97, 0x46, 0xe5, 0xf3, 0x35, 0x9c, 0x91, 0x23, 0x4c, 0xa0, 0xe9, 0x2e, 0x30, 0x27, 0xff, 0x30, 0x9d, 0xcb, 0x90, 0x45, 0x4b, 0x36, 0x33, 0xf1, 0xc2, 0x9d, 0xd6, 0xc0, 0x70, 0x8a, 0x6b, 0x29, 0xf9, 0xdf, 0xdf, 0xb8, 0xce, 0x18, 0x4c, 0x6d, 0x01, 0xd0, 0x6f, 0x5f, 0x58, 0x86, 0x5c, 0xa4, 0xa0, 0xa2, 0x70, 0x75, 0x43, 0xb3, 0x88, 0x8e, 0x1d, 0xfb, 0x70, 0xd4, 0x8c, 0x2d, 0x9f, 0x3a, 0xc6, 0x75, 0x21, 0xe5, 0x70, 0xb9, 0xd4, 0x8f, 0x6c, 0x1f, 0xd7, 0x29, 0xf2, 0xcf, 0x40, 0xc4, 0xe2, 0xfa, 0x0d, 0xb1, 0x58, 0x1b, 0x5e, 0xe7, 0x81, 0x7c, 0xe1, 0xa6, 0xae, 0xfc, 0x8d, 0x5a, 0xa7, 0x11, 0x93, 0xc2, 0x42, 0x09, 0x91, 0x51, 0x34, 0x95, 0x09, 0xd5, 0x26, 0x87, 0x13, 0x56, 0x0c, 0xdb, 0x4e, 0x41, 0xb2, 0xf4, 0x1c, 0xc6, 0x97, 0x29, 0x0f, 0x7e, 0xff, 0x80, 0x9e, 0x51, 0x44, 0xb9, 0x1d, 0x97, 0x6d, 0x8f, 0xec, 0x7d, 0x01, 0x3a, 0xee, 0xaa, 0x1e, 0x38, 0x3c, 0x23, 0xc5, 0x4d, 0x1b, 0x6c, 0x78, 0xc9, 0x2c, 0xf1, 0x07, 0x09, 0xe3, 0xa4, 0xa7, 0x40, 0x3a, 0xe6, 0x44, 0x78, 0xa7, 0xab, 0x18, 0xd3, 0x4b, 0xd9, 0x7d, 0x17, 0x6c, 0xf2, 0xff, 0x69, 0x25, 0xf3, 0xb6, 0x59, 0x5c, 0x7c, 0xd3, 0x1f, 0xf5, 0x30, 0x78, 0x24, 0x45, 0x5f, 0xcd, 0xc5, 0xca, 0xe3, 0x50, 0x53, 0x19, 0x47, 0x6c, 0x5e, 0x17, 0x2f, 0x4e, 0x33, 0x6c, 0xf3, 0xf4, 0xa3, 0x35, 0x8e, 0x86, 0x06, 0xf9, 0xb7, 0xea, 0x80, 0xdf, 0x4d, 0x93, 0x83, 0x1e, 0xf8, 0x99, 0x95, 0xb4, 0x0e, 0x0f, 0x54, 0x5b, 0xb3, 0x91, 0xb7, 0xb9, 0x45, 0x1c, 0x96, 0xd7, 0xf7, 0x22, 0x6d, 0xd4, 0xbb, 0xde, 0x5d, 0xdb, 0x66, 0xe6, 0x73, 0x52, 0x0e, 0xff, 0x2d, 0x54, 0xb7, 0x34, 0x3a, 0x62, 0x2f, 0x2a, 0x82, 0x55, 0x37, 0xae, 0x66, 0x97, 0xe3, 0x90, 0x49, 0x93, 0x44, 0xb4, 0x4f, 0x6a, 0x44, 0x66, 0x64, 0xe8, 0xd0, 0xee, 0x81, 0xb6, 0x3d, 0x64, 0x2a, 0xd1, 0xe4, 0xc6, 0x3c, 0x3a, 0x10, 0x48, 0xe5, 0xf0, 0x1b, 0xeb, 0xf4, 0x1b, 0xd3, 0x51, 0x53, 0x8a, 0x22, 0xd0, 0xd1, 0x5f, 0xef, 0xc5, 0x25, 0x09, 0x3f, 0x2b, 0x30, 0x73, 0xa0, 0x6c, 0x83, 0x7b, 0xc7, 0x76, 0x21, 0xa6, 0x78, 0x12, 0x86, 0x12, 0xa6, 0x71, 0xe8, 0xac, 0xdc, 0x08, 0xbc, 0xa2, 0xdb, 0x9f, 0x7c, 0x1c, 0x85, 0xa4, 0xa8, 0x27, 0xf9, 0xc4, 0x0b, 0xf1, 0x00, 0xbd, 0x3f, 0x3c, 0xa8, 0x6d, 0x73, 0x0d, 0x2e, 0x2f, 0x6c, 0xa4, 0x21, 0x68, 0xca, 0xb1, 0xc5, 0x5d, 0x8d, 0xc5, 0xb6, 0x48, 0xd7, 0x07, 0xcd, 0xaa, 0xf3, 0x28, 0x47, 0xe2, 0x97, 0x99, 0x24, 0xff, 0x66, 0xfb, 0xce, 0xd3, 0xb9, 0xd7, 0xfb, 0x48, 0x9f, 0x8f, 0xd4, 0xf8, 0x23, 0x94, 0x57, 0xf7, 0xcd, 0xda, 0xfa, 0xf3, 0x6b, 0x89, 0x91, 0x80, 0x10, 0xf6, 0x71, 0xad, 0x5e, 0xd1, 0xd6, 0xdb, 0x01, 0xa0, 0x82, 0xcf, 0x7c, 0x6b, 0xa7, 0x05, 0x28, 0xb9, 0x07, 0x47, 0x79, 0xbc, 0x5a, 0x7f, 0x84, 0xc9, 0xf0, 0xca, 0xbe, 0x0b, 0x97, 0xcd, 0x07, 0x77, 0xbf, 0x4c, 0xe7, 0x02, 0xdc, 0xf8, 0x17, 0x12, 0x0c, 0x89, 0x43, 0x33, 0xfa, 0x0d, 0x0e, 0x0c, 0x02, 0x80, 0x57, 0x91, 0x96, 0x9c, 0xba, 0x7a, 0xe0, 0xf2, 0x5a, 0xf3, 0xa8, 0x3a, 0xde, 0x95, 0x79, 0xe8, 0xba, 0x95, 0xff, 0x00, 0xb0, 0x3b, 0xb4, 0x2a, 0x96, 0x96, 0xbc, 0x09, 0x59, 0x6f, 0x0c, 0xc9, 0x42, 0x7b, 0xd2, 0xf7, 0x78, 0xd4, 0x11, 0x96, 0xc7, 0xaa, 0x8c, 0x6f, 0x9f, 0x36, 0xe6, 0xa8, 0x60, 0xf0, 0x07, 0x98, 0xd4, 0x02, 0xc2, 0xda, 0xfd, 0xfc, 0xb4, 0xa0, 0x12, 0xc9, 0x6f, 0x4a, 0xc4, 0xe2, 0xd8, 0x38, 0xc5, 0xc1, 0xcd, 0xdc, 0x8b, 0x99, 0x0b, 0x13, 0x52, 0x44, 0x4f, 0xb5, 0x60, 0x7d, 0xbc, 0x6a, 0x8c, 0x4f, 0x7d, 0xc0, 0x01, 0xcd, 0xab, 0x7b, 0x40, 0x04, 0x71, 0x2d, 0x64, 0x2e, 0x6e, 0x06, 0xaa, 0x29, 0x5a, 0xec, 0x30, 0x27, 0xed, 0xce, 0xfd, 0xa6, 0xfc, 0x36, 0x42, 0xa3, 0xe6, 0x1e, 0xdf, 0x0a, 0x2e, 0x05, 0x29, 0x72, 0x69, 0x42, 0xeb, 0x07, 0x5b, 0x97, 0xab, 0xc7, 0x5d, 0x09, 0x2e, 0xf2, 0x01, 0xef, 0x3e, 0xbb, 0xf9, 0x4a, 0xaa, 0x44, 0x35, 0x54, 0x8f, 0xc9, 0x4c, 0x5c, 0xd6, 0x1c, 0x1d, 0xd0, 0xfe, 0x51, 0xb6, 0x9c, 0x1b, 0xba, 0x75, 0xb2, 0x1f, 0x16, 0x6c, 0xea, 0x59, 0x05, 0x0a, 0x0d, 0x3b, 0xbf, 0xf8, 0x2c, 0x60, 0x06, 0x42, 0x37, 0xce, 0x59, 0xb7, 0xcb, 0x78, 0x6b, 0x92, 0x4a, 0x07, 0xd3, 0x5a, 0x31, 0xd9, 0x05, 0x06, 0xa6, 0x4a, 0x81, 0x65, 0x51, 0x33, 0x4a, 0xbd, 0x6d, 0xb1, 0x9a, 0xb3, 0x1f, 0x28, 0xd4, 0x6a, 0x06, 0x87, 0xba, 0xef, 0x13, 0xcd, 0xe0, 0xd5, 0x9b, 0xcc, 0x60, 0x1c, 0xaa, 0x2c, 0xd0, 0x58, 0x9b, 0xb4, 0x71, 0x0e, 0xe5, 0xc5, 0xa9, 0x62, 0x38, 0x27, 0xb4, 0xef, 0xc9, 0x09, 0x96, 0xf7, 0xea, 0x42, 0x54, 0xbc, 0xdd, 0xdd, 0x63, 0x2d, 0xea, 0xd5, 0x61, 0xc5, 0xaf, 0x1d, 0x03, 0xb1, 0xb8, 0xe3, 0x4f, 0x31, 0x4f, 0x16, 0x0b, 0x40, 0x95, 0x26, 0x75, 0x77, 0xd2, 0x0b, 0x34, 0x2f, 0x0a, 0x88, 0x8f, 0xe6, 0xd1, 0xb1, 0xdd, 0xe4, 0x5f, 0xab, 0x3c, 0x1d, 0xe7, 0xb3, 0x86, 0x5a, 0x25, 0x61, 0x81, 0x94, 0x37, 0x2e, 0x56, 0xa0, 0xad, 0x35, 0x45, 0x12, 0xe3, 0x36, 0x96, 0x5b, 0x8f, 0xe0, 0xd3, 0x34, 0x96, 0x50, 0x34, 0x40, 0x24, 0xd5, 0x5b, 0xec, 0xfb, 0xf6, 0x41, 0x9b, 0x0b, 0xb6, 0x71, 0x00, 0x43, 0x16, 0x74, 0xca, 0xa8, 0xdc, 0x8c, 0x87, 0xa4, 0x93, 0xa5, 0xc2, 0xa0, 0xd3, 0x88, 0x6f, 0xd5, 0xc2, 0x52, 0x8a, 0x5e, 0xdb, 0x24, 0xfa, 0x92, 0xee, 0x1d, 0xbb, 0x92, 0x68, 0x85, 0x3c, 0x1e, 0xd5, 0x4b, 0x06, 0xad, 0xa3, 0xb2, 0x9f, 0xbc, 0x29, 0x47, 0xae, 0x66, 0xe8, 0x16, 0x5f, 0x35, 0x10, 0x1d, 0x09, 0x38, 0x46, 0x01, 0x0f, 0x55, 0xa4, 0x00, 0x04, 0xe1, 0x01, 0x27, 0x12, 0x6e, 0x73, 0xc5, 0x9c, 0xe4, 0x13, 0x1f, 0x22, 0xd4, 0x00, 0x65, 0x65, 0x08, 0xa7, 0xe5, 0xcc, 0x5f, 0x41, 0x7f, 0x07, 0xd8, 0x9c, 0x59, 0xf2, 0xec, 0x1f, 0xd4, 0xbc, 0x21, 0x09, 0xbe, 0x48, 0xdc, 0xf9, 0xc9, 0xd3, 0x76, 0xb3, 0x3b, 0xd8, 0x93, 0x21, 0xe8, 0x30, 0xaf, 0x98, 0x5d, 0x7e, 0xfa, 0x5d, 0x5f, 0xca, 0x66, 0x68, 0x94, 0x6c, 0xfe, 0x67, 0x7f, 0x2c, 0x79, 0x06, 0xb2, 0xa7, 0x0f, 0x6e, 0x3e, 0xf5, 0x8b, 0x0b, 0x6f, 0x88, 0xa2, 0x93, 0xb6, 0x57, 0x83, 0x44, 0xe7, 0x3c, 0xaf, 0x6d, 0xa4, 0x9b, 0x0b, 0x2f, 0x19, 0x45, 0x33, 0x85, 0xeb, 0x9c, 0x12, 0x82, 0x6a, 0xf7, 0xb0, 0xda, 0x0e, 0x48, 0x4a, 0xa4, 0x21, 0xfc, 0xa8, 0x5e, 0xb9, 0x22, 0xab, 0x32, 0xe9, 0xd0, 0x26, 0x77, 0x38, 0xc2, 0xee, 0x7b, 0x52, 0x45, 0x35, 0x80, 0xfe, 0x53, 0x13, 0x04, 0x50, 0x00, 0x66, 0x46, 0x20, 0x15, 0xdc, 0x05, 0xbb, 0xfa, 0x4e, 0x8b, 0xd7, 0xd9, 0x50, 0xea, 0xcd, 0x00, 0x06, 0x86, 0x02, 0x87, 0x39, 0xd3, 0xa6, 0x33, 0xa9, 0x60, 0xa2, 0x9b, 0xa5, 0x15, 0xcb, 0x89, 0xda, 0xb9, 0x5c, 0xa3, 0x69, 0xb6, 0xa3, 0x4b, 0x3c, 0x21, 0xfa, 0xc3, 0x99, 0xf5, 0xf9, 0x95, 0xf7, 0x9f, 0xea, 0x32, 0x11, 0xc0, 0x7d, 0xd9, 0x3a, 0x2e, 0xbe, 0xba, 0xf0, 0x3c, 0x43, 0x5c, 0xb3, 0x3b, 0xaa, 0x3c, 0x18, 0x40, 0x43, 0xb7, 0x19, 0x28, 0x09, 0x29, 0xaf, 0xda, 0xd7, 0x57, 0xa3, 0xcc, 0xd8, 0x0a, 0xa0, 0xc9, 0x40, 0xfd, 0x8e, 0xf1, 0x39, 0xf9, 0x1b, 0x01, 0x20, 0x3f, 0x9a, 0xd4, 0xf2, 0x26, 0x11, 0x2a, 0x01, 0x05, 0x8d, 0xa9, 0xec, 0x53, 0xb9, 0x21, 0xcd, 0x0d, 0xaf, 0x14, 0xb4, 0x58, 0x0e, 0x76, 0x55, 0x68, 0x4d, 0xb1, 0xfd, 0xa0, 0x4f, 0xec, 0xcb, 0xfb, 0x37, 0x8d, 0x1c, 0xaa, 0x7d, 0xfc, 0x47, 0xff, 0x42, 0xaa, 0x8b, 0x89, 0xe0, 0x53, 0x45, 0x81, 0xc6, 0x80, 0x66, 0x64, 0x83, 0x4f, 0x25, 0xe2, 0x20, 0x76, 0xf1, 0xf7, 0xb3, 0x86, 0xaa ],
+const [ 0x16, 0x00, 0xa3, 0x49, 0x99, 0x0d, 0xf4, 0x2a, 0xba, 0x9f, 0xa0, 0x3f, 0x70, 0xde, 0xff, 0x0f, 0x75, 0xae, 0x35, 0xc1, 0xa8, 0x82, 0xb4, 0x8c, 0xaf, 0x75, 0x02, 0x6e, 0xe0, 0x97, 0xbd, 0x21, 0x62, 0x84, 0xdc, 0x4b, 0x8f, 0x3c, 0x37, 0xf5, 0x9d, 0x2e, 0x4a, 0x3e, 0x7e, 0x96, 0x35, 0x50, 0x04, 0x09, 0x08, 0x94, 0x49, 0x4e, 0x3e, 0x22, 0x4e, 0x70, 0x87, 0x7c, 0xe2, 0x11, 0xcb, 0x7b, 0xc6, 0x01, 0x6b, 0x89, 0x0e, 0x10, 0xca, 0x11, 0xca, 0x20, 0x0c, 0x34, 0xe6, 0x7e, 0x1d, 0xbe, 0x4f, 0x72, 0xf5, 0x58, 0x57, 0x14, 0x1b, 0xff, 0x5b, 0x62, 0x68, 0xb4, 0xa3, 0x90, 0x0e, 0x75, 0x89, 0x9f, 0xd9, 0x6d, 0xde, 0x31, 0xb4, 0x68, 0x89, 0x9c, 0x6e, 0x89, 0x71, 0x3d, 0xbe, 0x3f, 0x9e, 0x0f, 0x85, 0x75, 0x9b, 0x7b, 0x54, 0x09, 0x1e, 0x72, 0x2e, 0x80, 0xea, 0xba, 0x8f, 0xf8, 0xf5, 0x85, 0xac, 0x5d, 0xc6, 0x48, 0xfd, 0xe0, 0x22, 0xca, 0xf9, 0xa5, 0xe7, 0x7c, 0x21, 0xbc, 0x38, 0x08, 0x3f, 0x53, 0xda, 0x2c, 0xf0, 0x2a, 0xde, 0xc9, 0x60, 0x47, 0x81, 0x37, 0x55, 0xea, 0x50, 0xdc, 0x6f, 0xc3, 0x90, 0xfd, 0xae, 0x63, 0xdc, 0xd3, 0x34, 0xf1, 0x10, 0xe2, 0x4c, 0x1e, 0x66, 0x86, 0xac, 0x5a, 0xdf, 0xcf, 0xf7, 0x49, 0xe5, 0x8e, 0x86, 0x70, 0x2e, 0xb0, 0x68, 0x35, 0xe3, 0xcb, 0xa7, 0x06, 0x02, 0xf7, 0xcd, 0xd8, 0x01, 0xdf, 0xa7, 0xd3, 0xb4, 0x18, 0x49, 0x4b, 0x70, 0xb1, 0x52, 0xf3, 0x71, 0x0b, 0x72, 0x4d, 0x79, 0xea, 0x29, 0x65, 0xba, 0xcd, 0xd1, 0xbf, 0xf6, 0x7b, 0xde, 0x8e, 0xe5, 0xdf, 0x65, 0x26, 0xd7, 0x15, 0xdb, 0xb4, 0x9a, 0xc5, 0x20, 0x2d, 0x9e, 0xb0, 0xbb, 0x84, 0x57, 0x88, 0x68, 0x20, 0xe3, 0x05, 0xd0, 0x8d, 0xed, 0x35, 0x97, 0x72, 0xd1, 0x14, 0x9b, 0xc3, 0x00, 0x5c, 0x7b, 0x37, 0xa7, 0x9e, 0x57, 0xfd, 0x8b, 0x92, 0xd7, 0xab, 0x37, 0xac, 0x6f, 0x77, 0x5a, 0xef, 0xe1, 0xa9, 0x6b, 0x06, 0x03, 0x50, 0x8e, 0x91, 0xc2, 0x34, 0xbb, 0xbd, 0x67, 0x0d, 0x1d, 0x17, 0x19, 0xf2, 0xb8, 0xa2, 0xa3, 0x14, 0x4f, 0x26, 0x78, 0xac, 0x85, 0xcc, 0xf4, 0x32, 0x42, 0xe8, 0xe5, 0xd0, 0x58, 0x16, 0x4a, 0x16, 0x67, 0x88, 0x5b, 0xef, 0xfe, 0x9e, 0xc9, 0xd4, 0x02, 0xb7, 0x46, 0x3f, 0x54, 0x48, 0x48, 0x63, 0xae, 0x2b, 0x0a, 0x1a, 0xce, 0x39, 0xd4, 0x1f, 0xd7, 0x1a, 0x7d, 0x7d, 0xf4, 0x5c, 0x2e, 0x47, 0x3e, 0xc3, 0x68, 0x8a, 0xe0, 0xe0, 0x49, 0x80, 0x78, 0xe5, 0x0b, 0x06, 0xc1, 0xb8, 0xcd, 0x50, 0x70, 0x46, 0x96, 0xdc, 0x5b, 0x1a, 0x97, 0xa4, 0xe0, 0x2e, 0xb0, 0x98, 0x85, 0x01, 0x36, 0x4b, 0xdc, 0xe9, 0xf4, 0xed, 0xaa, 0xab, 0x6f, 0x79, 0x47, 0x49, 0x6f, 0x2f, 0x48, 0x1b, 0xba, 0x45, 0x5c, 0x21, 0x23, 0xda, 0x74, 0x98, 0xc3, 0x2b, 0x27, 0xcb, 0x87, 0x09, 0x54, 0x2c, 0xeb, 0x8b, 0x09, 0xa3, 0x04, 0x00, 0xa3, 0x26, 0xc4, 0x27, 0x37, 0x8a, 0x7a, 0xa3, 0x31, 0x99, 0x98, 0xa9, 0x3b, 0x64, 0xb9, 0xfc, 0x61, 0xdb, 0xe2, 0x1b, 0x72, 0x9a, 0x08, 0xb8, 0xa9, 0x06, 0xd3, 0x6d, 0x8c, 0x99, 0xa2, 0xab, 0x15, 0x7a, 0xcf, 0xf3, 0x10, 0x51, 0x34, 0x48, 0xc4, 0x59, 0xee, 0xe4, 0xd5, 0xb7, 0x60, 0x2a, 0x69, 0x0a, 0x7b, 0xdc, 0x8a, 0x43, 0x3d, 0x8e, 0xcc, 0xb7, 0x78, 0x5a, 0x2f, 0x72, 0xd5, 0xd6, 0x46, 0xce, 0x18, 0x43, 0x99, 0x45, 0xa6, 0x07, 0x49, 0x84, 0x44, 0x5e, 0xf2, 0xc0, 0x21, 0x4c, 0xd5, 0x4d, 0x17, 0xd6, 0x37, 0x6d, 0x2e, 0x71, 0x04, 0x66, 0x62, 0xbb, 0xb8, 0xd7, 0xa6, 0x69, 0x7f, 0x4b, 0x28, 0x80, 0x9b, 0x0f, 0xd7, 0xc9, 0x07, 0x41, 0x23, 0x7e, 0x5a, 0x2a, 0x03, 0x4a, 0xed, 0xce, 0x3d, 0x71, 0x40, 0xc0, 0xe2, 0x4a, 0x9a, 0x3b, 0x17, 0xf6, 0xf0, 0x6f, 0x1b, 0x4c, 0x08, 0x19, 0x86, 0x13, 0xdf, 0x56, 0xcf, 0x74, 0x47, 0xb9, 0x11, 0xae, 0xd4, 0x9b, 0x0f, 0x0c, 0xf9, 0xb2, 0x75, 0x15, 0x6f, 0xe6, 0x61, 0x02, 0xd6, 0x5f, 0x21, 0x75, 0x9f, 0xe3, 0x3f, 0x67, 0x29, 0x5f, 0xba, 0x62, 0x2a, 0xc3, 0x97, 0xf1, 0x51, 0x13, 0x98, 0x56, 0x2a, 0xbb, 0x4c, 0x7a, 0x41, 0x24, 0x48, 0x2a, 0x8a, 0x84, 0xb3, 0x7f, 0x00, 0xfa, 0x08, 0x9e, 0x8d, 0xda, 0x17, 0xa2, 0x2a, 0x46, 0x4d, 0xd7, 0x47, 0xfe, 0x36, 0x29, 0x6d, 0x78, 0x40, 0xdc, 0x22, 0x34, 0xc2, 0x7d, 0x0d, 0x4a, 0x3c, 0x18, 0x5a, 0x45, 0xe1, 0xab, 0x60, 0x33, 0x52, 0xdb, 0x81, 0xfd, 0xad, 0xe6, 0x52, 0xf5, 0xc6, 0xd9, 0xfc, 0xae, 0xb4, 0x03, 0xe3, 0x10, 0x90, 0xa9, 0x85, 0xab, 0x79, 0xfb, 0xa4, 0x4c, 0xdb, 0x47, 0xa7, 0xce, 0xf1, 0x6d, 0x3e, 0x33, 0x89, 0x93, 0x45, 0xf4, 0x08, 0x19, 0xeb, 0x94, 0xad, 0xcf, 0x13, 0x7b, 0x1a, 0x66, 0xfa, 0x02, 0x10, 0x25, 0x1a, 0xcb, 0x7a, 0xdd, 0x4f, 0x53, 0xad, 0x1f, 0x39, 0xca, 0xee, 0xac, 0xe1, 0x22, 0x34, 0x2d, 0x9f, 0x66, 0x30, 0x25, 0x3b, 0x4d, 0x8b, 0x23, 0x52, 0x0f, 0x6f, 0x3c, 0xfb, 0x77, 0x48, 0xb8, 0xab, 0x39, 0xcc, 0x0c, 0x56, 0x87, 0x39, 0x09, 0xd7, 0xdf, 0xdd, 0x52, 0x92, 0x27, 0xdc, 0x13, 0x58, 0xfb, 0x2e, 0xf0, 0x8b, 0x46, 0xe7, 0x3c, 0x82, 0x0f, 0xbb, 0x6c, 0x2e, 0x96, 0xc1, 0xcb, 0xfe, 0xa0, 0x77, 0x6f, 0x01, 0x0f, 0x07, 0x6b, 0x4b, 0xb5, 0xc8, 0x46, 0x99, 0x6a, 0x08, 0xac, 0x38, 0x5c, 0x09, 0x64, 0x22, 0xa7, 0x49, 0x82, 0x6b, 0x26, 0x06, 0xde, 0xdb, 0x88, 0x02, 0xc4, 0xdd, 0xa6, 0x84, 0xed, 0x97, 0x13, 0x9f, 0xae, 0x5b, 0xf5, 0xb6, 0x70, 0x3e, 0x14, 0x40, 0x60, 0x06, 0x31, 0xc9, 0x68, 0x4a, 0x99, 0x39, 0x5d, 0xd4, 0xfa, 0x59, 0x7a, 0x4a, 0x74, 0x93, 0x0d, 0x0e, 0xf3, 0xfa, 0x70, 0x62, 0xbd, 0x8a, 0x3b, 0xd0, 0x47, 0xb0, 0xb8, 0xc9, 0x4d, 0x0d, 0x97, 0x8c, 0x21, 0x77, 0xe3, 0x49, 0x44, 0x40, 0x35, 0x86, 0x33, 0xbb, 0x28, 0xc3, 0x83, 0xfd, 0x0c, 0x59, 0x30, 0xe1, 0xdf, 0xa8, 0x33, 0x4f, 0x79, 0x71, 0x52, 0xbd, 0x06, 0x81, 0x3c, 0xf5, 0xb9, 0x90, 0xd5, 0x19, 0xbf, 0x68, 0xcf, 0xe5, 0x72, 0x4a, 0x7a, 0x35, 0xd0, 0x8d, 0xdd, 0xc7, 0x2b, 0x88, 0x05, 0x41, 0x21, 0xb2, 0x9d, 0x76, 0xcf, 0x08, 0xbf, 0xe5, 0x42, 0xaf, 0x0a, 0x82, 0x2e, 0xdb, 0xf5, 0xba, 0xe3, 0xef, 0x62, 0xb1, 0x7c, 0xe6, 0x77, 0xce, 0x5a, 0xf1, 0xa9, 0x79, 0xd1, 0x61, 0x19, 0x23, 0x20, 0xc8, 0x24, 0x87, 0xa7, 0x5b, 0x35, 0x30, 0x54, 0x9b, 0xde, 0x3c, 0x5f, 0x35, 0x28, 0x5f, 0x37, 0x26, 0x27, 0x2b, 0xbc, 0x22, 0xd1, 0x8e, 0xae, 0x37, 0x10, 0x9c, 0x65, 0xae, 0x15, 0x8e, 0xc3, 0x32, 0xf0, 0x0b, 0x68, 0x34, 0x5d, 0xa7, 0x24, 0x8d, 0xe1, 0xaa, 0xb2, 0x65, 0x16, 0x12, 0xa3, 0x54, 0x43, 0xdb, 0x98, 0xc8, 0x30, 0x7d, 0xb4, 0xa7, 0x39, 0xb7, 0x51, 0x35, 0xa0, 0x8b, 0xf2, 0x37, 0x28, 0x8a, 0x79, 0x59, 0xdf, 0x51, 0x9b, 0xcd, 0x3b, 0x54, 0x90, 0x35, 0x68, 0xda, 0x0f, 0xc3, 0xe1, 0x49, 0x79, 0x9e, 0x3e, 0xa4, 0x55, 0x88, 0x4c, 0x52, 0xfc, 0xbf, 0x63, 0x21, 0x95, 0x20, 0xf4, 0x8a, 0x44, 0x92, 0x62, 0x37, 0x9f, 0xa2, 0x13, 0xc2, 0x62, 0x6b, 0xc6, 0xc0, 0x63, 0xb9, 0x27, 0xfe, 0xc8, 0x6e, 0xa0, 0x0a, 0x77, 0x24, 0x73, 0xf5, 0xce, 0x13, 0x06, 0x58, 0x95, 0x35, 0x7d, 0x95, 0x30, 0xa9, 0x8e, 0x5f, 0x19, 0x56, 0x91, 0x7d, 0x8e, 0xd0, 0xd7, 0xca, 0x87, 0x7f, 0x3d, 0x81, 0xeb, 0xfe, 0x01, 0xb7, 0x03, 0xc1, 0xd4, 0x29, 0x2f, 0xfb, 0x30, 0x38, 0xd8, 0xbe, 0xeb, 0x32, 0xa5, 0x64, 0x0d, 0xd3, 0xf2, 0x2f, 0xdf, 0x0c, 0x7e, 0x2c, 0x44, 0x02, 0x63, 0x5d, 0x4c, 0x5a, 0x4c, 0x16, 0x07, 0xb4, 0xe2, 0xa8, 0x97, 0x75, 0x87, 0x3d, 0x89, 0xca, 0x47, 0x03, 0x66, 0xea, 0x0b, 0x8d, 0x84, 0x9b, 0x10, 0x76, 0x22, 0xf7, 0x98, 0x47, 0xb4, 0x70, 0xe0, 0x9a, 0x7c, 0x12, 0x51, 0x80, 0x5a, 0x08, 0xfa, 0x21, 0xe5, 0x62, 0x3e, 0xa2, 0xba, 0x15, 0xca, 0x4c, 0x15, 0x43, 0xcb, 0xea, 0x9e, 0xbd, 0x5d, 0x72, 0x85, 0xc7, 0x46, 0xe8, 0xd0, 0x1b, 0xe4, 0x80, 0xf4, 0x30, 0x64, 0x03, 0xa3, 0xbb, 0x35, 0x73, 0xe6, 0x77, 0xbc, 0xf2, 0x6b, 0x21, 0x4a, 0xe0, 0x20, 0xc7, 0x4b, 0x44, 0x01, 0x43, 0xc0, 0x6d, 0x2d, 0x03, 0xef, 0xd9, 0x40, 0x0b, 0x58, 0x55, 0xdd, 0x3c, 0xec, 0x66, 0x8a, 0xd6, 0x7a, 0xe8, 0xc1, 0x3c, 0x6a, 0xf5, 0x43, 0xf7, 0xad, 0x08, 0xb0, 0xfe, 0xf4, 0x62, 0x55, 0x34, 0x20, 0xad, 0x45, 0x33, 0xfa, 0xe0, 0xab, 0x48, 0x25, 0x62, 0x5e, 0xbe, 0x51, 0x72, 0xb6, 0x60, 0xb0, 0xc6, 0x9f, 0x39, 0xae, 0x72, 0xeb, 0x9e, 0xdd, 0x0c, 0xed, 0x6f, 0x2e, 0x0e, 0x43, 0x99, 0x67, 0x7b, 0xf3, 0xdf, 0xd1, 0xc6, 0xba, 0xdb, 0x31, 0xef, 0xa0, 0x3f, 0xfa, 0xef, 0xd0, 0x61, 0xc1, 0x56, 0xa7, 0xf7, 0xf1, 0x33, 0x0b, 0x1e, 0xc0, 0x34, 0xfe, 0xa2, 0x62, 0x0e, 0x72, 0x79, 0x7c, 0x1f, 0x5f, 0x90, 0xdb, 0x52, 0x14, 0xcb, 0x66, 0x44, 0xcb, 0x47, 0x51, 0xa5, 0x7f, 0xe2, 0x94, 0xe0, 0x02, 0xfd, 0x9c, 0xfe, 0x4a, 0x80, 0x40, 0xc7, 0x0b, 0x1f, 0xf6, 0x2b, 0x8c, 0xdc, 0x47, 0xe1, 0xb3, 0xcd, 0x80, 0x4e, 0x61, 0x20, 0xab, 0xa8, 0x06, 0x5c, 0xbd, 0x5b, 0x6c, 0xe9, 0x11, 0xac, 0xd7, 0xd3, 0x15, 0x9c, 0x50, 0xcb, 0x44, 0x0f, 0x3e, 0x6f, 0x54, 0x2d, 0x36, 0xcb, 0xb0, 0x09, 0x14, 0x1f, 0x28, 0x80, 0x4b, 0xe2, 0xe7, 0x65, 0x79, 0x08, 0xa6, 0xdb, 0x3f, 0x81, 0x20, 0x01, 0x4f, 0x02, 0xc6, 0xd5, 0xc6, 0x07, 0xb3, 0x52, 0xbd, 0x19, 0xe2, 0xdc, 0x1a, 0x4c, 0x9f, 0xde, 0xac, 0x0d, 0x3b, 0xb2, 0x78, 0x1a, 0x04, 0xc1, 0x4d, 0xd2, 0x74, 0xeb, 0x9f, 0xaf, 0xa9, 0x29, 0x92, 0x11, 0x15, 0x70, 0x54, 0x3d, 0x77, 0xd9, 0xb0, 0xa5, 0x0a, 0x00, 0xe0, 0x6a, 0xfc, 0xa9, 0xa3, 0x1f, 0x21, 0xaa, 0x90, 0xd0, 0xe9, 0x05, 0xaa, 0x42, 0x90, 0x54, 0x34, 0x7d, 0x94, 0x6a, 0xc7, 0x88, 0x6c, 0x37, 0xa1, 0x74, 0x77, 0xec, 0x40, 0x9b, 0x33, 0x60, 0x30, 0x2a, 0xaf, 0xb2, 0x21, 0xdd, 0x43, 0x31, 0x3c, 0x0a, 0x7e, 0x78, 0xb7, 0xe1, 0x60, 0xdd, 0xa7, 0xf2, 0xc9, 0x0d, 0x16, 0xf0, 0x32, 0xf0, 0x56, 0xb4, 0x9b, 0xd3, 0x94, 0x84, 0xc4, 0xc5, 0xb0, 0x96, 0xa0, 0x41, 0x4d, 0xd0, 0x07, 0x0e, 0x24, 0xd2, 0xab, 0x64, 0x9d, 0x36, 0x4d, 0x50, 0xa0, 0x16, 0x31, 0x59, 0xa8, 0xcf, 0xcf, 0x64, 0x1a, 0x05, 0xcb, 0xd5, 0xd6, 0xe8, 0x27, 0xf7, 0x0b, 0xb5, 0xb8, 0x9e, 0x4f, 0x7f, 0xd6, 0x0b, 0xef, 0x2f, 0x58, 0x0f, 0x83, 0xca, 0xc0, 0x74, 0xc6, 0xf2, 0xb2, 0x98, 0xa5, 0xb0, 0xab, 0x5b, 0x96, 0x70, 0xef, 0x3b, 0x2b, 0x4d, 0xc3, 0xbe, 0xe7, 0x8f, 0xdd, 0x11, 0x50, 0x72, 0x19, 0xee, 0x45, 0x2a, 0x6d, 0xc2, 0x92, 0x23, 0x1f, 0x10, 0xc2, 0x8d, 0x35, 0x10, 0x35, 0x18, 0x2e, 0x9d, 0x72, 0xfc, 0xef, 0x4e, 0xbd, 0x3d, 0x00, 0xe2, 0xed, 0x2d, 0xf8, 0xe1, 0x78, 0x32, 0x36, 0x80, 0xd0, 0xc9, 0xd2, 0xc5, 0xf2, 0xcb, 0xd3, 0xed, 0x3b, 0xf0, 0xa3, 0x0b, 0x7e, 0x91, 0xc0, 0xf1, 0x55, 0xb2, 0xb3, 0x53, 0xb4, 0x3f, 0x46, 0x2a, 0xc4, 0x96, 0xf2, 0x57, 0xee, 0x46, 0x97, 0x89, 0x35, 0x16, 0x70, 0x60, 0xca, 0x4a, 0x45, 0xd3, 0xda, 0x21, 0xe2, 0xcf, 0xab, 0xa2, 0xc9, 0x20, 0xe7, 0x98, 0x24, 0x95, 0x38, 0xdc, 0xfd, 0x5f, 0x14, 0xd2, 0xb1, 0xbb, 0xdb, 0x36, 0xa2, 0xd1, 0x1f, 0x19, 0x2d, 0xdb, 0x42, 0x26, 0xdc, 0x89, 0x47, 0x2a, 0xdc, 0xa4, 0xe2, 0xd4, 0xb1, 0xf3, 0xd1, 0xb9, 0x28, 0x5b, 0x6f, 0x9a, 0x8d, 0x49, 0x87, 0xea, 0x1f, 0x55, 0x66, 0x8b, 0xc1, 0x1f, 0x34, 0xd9, 0xf2, 0x7d, 0x84, 0xe9, 0xff, 0xd9, 0x29, 0x12, 0x77, 0xd4, 0x4b, 0xad, 0xe0, 0x2f, 0xbb, 0x1a, 0xa8, 0xec, 0x84, 0x04, 0x5f, 0xb0, 0xc3, 0xe5, 0x23, 0x6c, 0xb8, 0xcc, 0x5b, 0x3c, 0x1c, 0x5e, 0xa8, 0x90, 0xb5, 0x1a, 0x18, 0x89, 0x29, 0xe2, 0x9d, 0xa6, 0x10, 0xb7, 0xbe, 0x9f, 0x4c, 0xc5, 0x8d, 0x91, 0x9d, 0x9f, 0xd9, 0x5c, 0x70, 0xcb, 0xa4, 0x49, 0xf8, 0x81, 0xd7, 0xf1, 0x80, 0xb0, 0x35, 0x5a, 0x00, 0x42, 0x8e, 0x62, 0xee, 0xa1, 0x35, 0x61, 0x56, 0x7a, 0xb4, 0x0a, 0x2d, 0xc1, 0xbd, 0x92, 0xe3, 0xf5, 0x64, 0x15, 0x37, 0xa5, 0x8c, 0x35, 0x4f, 0x33, 0x9f, 0x04, 0x08, 0xd8, 0x83, 0x24, 0x8b, 0xe8, 0xc9, 0x2c, 0x21, 0x57, 0x27, 0x4e, 0x48, 0x7d, 0x28, 0x37, 0x06, 0x16, 0x22, 0x37, 0x7d, 0x8d, 0x69, 0xa2, 0xc0, 0x7a, 0xc2, 0x76, 0xe5, 0x69, 0x1a, 0x3d, 0x5b, 0xdd, 0x78, 0x35, 0x7e, 0x94, 0x31, 0xaf, 0x69, 0x0d, 0x5b, 0xb5, 0x0b, 0x48, 0x83, 0xef, 0x7e, 0xcd, 0xa3, 0xc8, 0x93, 0xef, 0x4e, 0xcc, 0xb2, 0x52, 0x2e, 0x54, 0xe1, 0xab, 0xb0, 0x66, 0x22, 0xc7, 0xfe, 0xd7, 0x02, 0xcf, 0x2e, 0xb2, 0x6f, 0xca, 0xb8, 0xde, 0xca, 0x63, 0x2e, 0xfa, 0x3d, 0xec, 0x27, 0x8c, 0x4f, 0xa4, 0x7d, 0x5b, 0xb5, 0x35, 0xb8, 0x19, 0x6b, 0x81, 0xc9, 0x45, 0x04, 0x9e, 0xfc, 0x50, 0x3f, 0x1f, 0x28, 0xff, 0xda, 0x96, 0x28, 0x10, 0xab, 0x57, 0x8f, 0x20, 0xec, 0x7e, 0x98, 0xcc, 0xd7, 0x33, 0x5c, 0x17, 0x73, 0x2c, 0x48, 0x0b, 0xad, 0x74, 0xcd, 0xa4, 0xaa, 0x6b, 0x59, 0xe9, 0x5c, 0x0f, 0x87, 0x5c, 0x53, 0x79, 0x93, 0x94, 0xd6, 0xaa, 0x10, 0x29, 0x33, 0x88, 0xdd, 0xd0, 0x53, 0x24, 0x55, 0xc7, 0x91, 0x3e, 0xc6, 0x74, 0xcc, 0x0b, 0x24, 0x49, 0xbb, 0x36, 0xff, 0xea, 0x81, 0x24, 0xb3, 0x92, 0x82, 0x7c, 0xdf, 0xb3, 0x74, 0xe7, 0x18, 0xdc, 0xb9, 0x14, 0xde, 0xe0, 0xec, 0x00, 0xce, 0x35, 0xba, 0x74, 0x1a, 0x9a, 0xf3, 0xcf, 0x37, 0xfc, 0xe0, 0x05, 0xd5, 0x9b, 0xd8, 0xe8, 0x14, 0x69, 0x0e, 0xa6, 0xf5, 0xb2, 0xad, 0x93, 0x0e, 0x02, 0x27, 0x29, 0x83, 0x44, 0xc9, 0x4d, 0x31, 0x27, 0x94, 0xd4, 0x2c, 0xc6, 0x48, 0x46, 0x6c, 0x87, 0xc1, 0xe2, 0xc3, 0x43, 0x86, 0xe2, 0x12, 0xa8, 0xa0, 0x00, 0xbd, 0xdc, 0xa8, 0x38, 0x5c, 0x63, 0x24, 0xd0, 0xb4, 0x43, 0x14, 0x96, 0xe5, 0x66, 0xc7, 0x69, 0xe4, 0x3f, 0xf3, 0xfa, 0x2c, 0xb1, 0x05, 0xd4, 0xb1, 0x2c, 0xb6, 0x9a, 0x16, 0x19, 0xdf, 0x90, 0x1f, 0x78, 0x8e, 0x5d, 0x69, 0xc7, 0x59, 0x10, 0x59, 0x26, 0xf2, 0x60, 0x52, 0xba, 0xfc, 0x38, 0x2b, 0x4f, 0x1d, 0x73, 0xe0, 0x41, 0x55, 0xe4, 0x87, 0x9c, 0x8e, 0x99, 0x86, 0x82, 0x74, 0x60, 0x04, 0xcd, 0x86, 0x8b, 0x9d, 0xf6, 0x6d, 0xf1, 0x5a, 0x36, 0x8d, 0x35, 0xe0, 0xea, 0xdb, 0x4b, 0xe7, 0x3c, 0xee, 0x37, 0xee, 0x00, 0x58, 0x18, 0x2d, 0xdc, 0x36, 0x66, 0xcc, 0xac, 0x06, 0x78, 0x52, 0x24, 0xb9, 0x49, 0x60, 0xb7, 0x09, 0x7b, 0x9f, 0xb8, 0x0d, 0x9c, 0xf7, 0xc0, 0x0b, 0xa9, 0x02, 0x4f, 0x8d, 0xd0, 0xc0, 0xb6, 0xb7, 0x7a, 0x8c, 0x34, 0xd7, 0x89, 0x4e, 0x5f, 0x3e, 0xde, 0xf3, 0xc5, 0x4f, 0x1f, 0x1a, 0xd4, 0xd5, 0xb7, 0x10, 0xf7, 0x9a, 0x1e, 0xff, 0x02, 0x35, 0x5a, 0x62, 0xd0, 0x23, 0xc6, 0xbc, 0x2a, 0x19, 0x12, 0x8a, 0xeb, 0x99, 0x8b, 0x76, 0x62, 0xc4, 0x9c, 0xcd, 0xf8, 0x6f, 0x95, 0x33, 0x13, 0x78, 0xac, 0x96, 0x3a, 0x5a, 0x42, 0x60, 0x79, 0x00, 0x67, 0xf1, 0x07, 0xd7, 0x9f, 0x4c, 0x26, 0x27, 0xe6, 0x10, 0x4b, 0xa3, 0xf3, 0xab, 0x7f, 0x3f, 0xba, 0xca, 0x05, 0x41, 0x34, 0x13, 0x3d, 0x9b, 0x62, 0x17, 0xc8, 0x78, 0x90, 0x82, 0xed, 0x15, 0xd7, 0x95, 0x3b, 0xd2, 0xe5, 0xd7, 0x70, 0x89, 0x01, 0x07, 0x9a, 0x1e, 0x49, 0x54, 0x7c, 0x57, 0x3e, 0xd1, 0x33, 0xee, 0x83, 0x23, 0x1a, 0xe5, 0xe2, 0x7c, 0xea, 0x1a, 0x90, 0xce, 0x26, 0x1b, 0xb2, 0x38, 0xb6, 0x3b, 0x1f, 0xc5, 0xd1, 0xe6, 0x68, 0x55, 0x21, 0x31, 0x16, 0xdb, 0x22, 0xb5, 0x32, 0xc9, 0xcc, 0x9e, 0x0b, 0xc9, 0x71, 0xff, 0x33, 0xae, 0xe8, 0x69, 0xcb, 0xaa, 0xeb, 0xbb, 0x00, 0xc1, 0xbe, 0x3b, 0xd6, 0x7d, 0x11, 0xe6, 0x25, 0xe4, 0x28, 0x05, 0xe0, 0xa7, 0x39, 0x01, 0x9d, 0x9c, 0x16, 0x78, 0x52, 0x6e, 0x0b, 0x90, 0x5d, 0x94, 0x0a, 0x8c, 0xc8, 0x7f, 0x05, 0x9d, 0xca, 0x18, 0x9c, 0xfa, 0x91, 0x69, 0xf8, 0x32, 0x3e, 0x9a, 0xf7, 0xc1, 0x32, 0x20, 0x89, 0xe2, 0x88, 0x31, 0x5a, 0xa5, 0xe2, 0x7b, 0xb1, 0x41, 0x69, 0x15, 0x98, 0xab, 0x0f, 0xb6, 0x3d, 0x68, 0x18, 0x25, 0x98, 0x9f, 0xd8, 0xf0, 0x4e, 0x72, 0xbe, 0x61, 0xd5, 0x8e, 0x91, 0xae, 0xd9, 0x01, 0xfa, 0x70, 0xdf, 0x4d, 0x43, 0x56, 0x29, 0xba, 0x5e, 0x1b, 0xd9, 0xf0, 0x29, 0xb5, 0x59, 0xc4, 0xf0, 0xd0, 0xf9, 0x53, 0x33, 0x7a, 0xda, 0x4d, 0xaa, 0x20, 0x0c, 0x94, 0x87, 0xb9, 0xf3, 0x06, 0xfb, 0x41, 0xef, 0x96, 0xfb, 0x69, 0x3b, 0xa2, 0x44, 0x8d, 0x16, 0x81, 0x9d, 0xe6, 0x21, 0x5b, 0x5c, 0x01, 0x09, 0x3d, 0x2b, 0x6f, 0x65, 0x6c, 0x0c, 0xbf, 0xe2, 0xfa, 0x9b, 0xa9, 0x9d, 0x98, 0x93, 0x8c, 0xd0, 0xab, 0x94, 0x1b, 0xb1, 0xa2, 0x24, 0x52, 0x97, 0x86, 0xf3, 0xb0, 0x5f, 0xd2, 0x63, 0xa0, 0x0e, 0x86, 0x47, 0x38, 0xb7, 0x77, 0xeb, 0x25, 0xa0, 0xe9, 0x56, 0xe6, 0xa0, 0x5f, 0xcb, 0x39, 0xcb, 0xb2, 0x96, 0xd3, 0x52, 0x61, 0x05, 0x54, 0xa4, 0x28, 0xb4, 0x7a, 0xd9, 0xd4, 0x0d, 0x95, 0x51, 0x55, 0x10, 0x3b, 0x98, 0x15, 0x50, 0x3c, 0x8d, 0x88, 0x3e, 0xd8, 0xc4, 0x05, 0xaa, 0x30, 0x28, 0xd4, 0x87, 0xfb, 0xe5, 0x88, 0xef, 0x7a, 0x85, 0x8e, 0x67, 0xae, 0x58, 0x07, 0x63, 0xc8, 0x1a, 0xd3, 0x0d, 0xe1, 0xd0, 0xee, 0x42, 0xeb, 0xf3, 0x00, 0xdd, 0xe8, 0xd0, 0x2f, 0x39, 0x5a, 0x2f, 0x38, 0xf1, 0xfa, 0x33, 0xbe, 0xea, 0xac, 0x81, 0xe2, 0x94, 0xb3, 0xa4, 0x13, 0x6c, 0x21, 0xb1, 0x27, 0xc6, 0x92, 0x26, 0xab, 0xc9, 0x1a, 0x18, 0x78, 0xbb, 0x7c, 0x8e, 0x87, 0x7f, 0x9d, 0x28, 0x07, 0x5b, 0x38, 0x04, 0xac, 0xff, 0xd2, 0xe1, 0x49, 0xc3, 0xf1, 0x85, 0xa1, 0x31, 0x89, 0x5d, 0x7b, 0xc3, 0xb7, 0x64, 0xf4, 0xed, 0xb1, 0x45, 0x19, 0x5e, 0xfe, 0xc4, 0xb5, 0x84, 0xe2, 0x5a, 0x68, 0x4e, 0x1d, 0x1f, 0xf9, 0x35, 0xd5, 0xee, 0xed, 0x7d, 0xd0, 0xc3, 0x59, 0xb8, 0xe6, 0x67, 0xf4, 0x8d, 0xb6, 0x50, 0x70, 0xb7, 0x99, 0xc2, 0x0b, 0x50, 0xd4, 0x3b, 0x61, 0x50, 0x12, 0x0e, 0x84, 0x51, 0x11, 0x4e, 0x4e, 0x95, 0x9b, 0xed, 0xf6, 0x49, 0xb8, 0x25, 0xe2, 0x0b, 0x22, 0x17, 0xbc, 0xab, 0xf9, 0xb3, 0xc8, 0x2e, 0xb8, 0xd7, 0x75, 0x19, 0x68, 0xbb, 0x32, 0xec, 0x13, 0x8c, 0x82, 0xec, 0x7c, 0x57, 0x53, 0x25, 0x0d, 0x29, 0x8c, 0xb0, 0x11, 0x75, 0xe5, 0x32, 0x23, 0xb5, 0xfb, 0xa5, 0xe6, 0x54, 0xa4, 0x5b, 0xf7, 0xcc, 0x7f, 0x3f, 0x20, 0x0c, 0xd0, 0x5f, 0xcf, 0x1c, 0x8b, 0xa7, 0xc6, 0x03, 0xaf, 0xef, 0x13, 0xe9, 0xd5, 0x39, 0x43, 0x79, 0x09, 0x33, 0xd3, 0x89, 0xd8, 0x04, 0xe7, 0xfd, 0xaa, 0x44, 0x3e, 0xe8, 0x53, 0x4c, 0x66, 0xf5, 0xe4, 0xb1, 0x2c, 0x06, 0xc7, 0x0b, 0x57, 0x1a, 0x0b, 0xfb, 0x96, 0x74, 0xfc, 0x6c, 0xb6, 0xfa, 0xf7, 0x18, 0x18, 0xdb, 0x7c, 0x4e, 0x63, 0x74, 0x85, 0xf3, 0x76, 0x75, 0x16, 0xc8, 0xa1, 0x3f, 0x16, 0xea, 0x14, 0x91, 0x5d, 0x9f, 0x97, 0x64, 0x0e, 0x4f, 0x7c, 0x13, 0x27, 0xd1, 0xd2, 0xbf, 0x56, 0xe9, 0xdc, 0xf2, 0x0f, 0x0e, 0xc2, 0x82, 0xdb, 0x70, 0x85, 0xb9, 0xf3, 0x39, 0x38, 0xb2, 0x0d, 0x13, 0x6e, 0x06, 0x76, 0xeb, 0xef, 0xa9, 0x61, 0xf5, 0xaf, 0x0e, 0x7f, 0xf1, 0x00, 0x92, 0xcf, 0xac, 0x06, 0x17, 0xb8, 0xc9, 0x6b, 0xef, 0x55, 0xc1, 0x55, 0xfd, 0x10, 0x29, 0x95, 0x16, 0x72, 0x34, 0x22, 0xad, 0x39, 0x78, 0xc5, 0xb0, 0xab, 0xf5, 0x15, 0xad, 0x2b, 0x53, 0xa6, 0x39, 0x0a, 0x6b, 0x7e, 0x92, 0x9f, 0x09, 0xc8, 0x83, 0x9a, 0xf0, 0xcd, 0x88, 0x95, 0x1f, 0x1f, 0x33, 0xec, 0x53, 0x17, 0xce, 0xcf, 0xcd, 0x82, 0x42, 0x95, 0x55, 0x98, 0x38, 0x53, 0x7f, 0x2e, 0x7d, 0xae, 0x2d, 0x2c, 0xab, 0xed, 0x55, 0x40, 0x06, 0x53, 0x05, 0xd4, 0xa4, 0xab, 0xa4, 0x3e, 0xd1, 0x24, 0x7a, 0x37, 0xb1, 0x5f, 0x73, 0x8f, 0x27, 0xc7, 0x1f, 0x1f, 0xf6, 0x21, 0xfe, 0xfe, 0x26, 0x63, 0xfb, 0xf8, 0xaa, 0xca, 0x36, 0x3b, 0x3f, 0x27, 0x06, 0x54, 0x97, 0x7a, 0x3f, 0x5a, 0xb7, 0xc1, 0xb0, 0x69, 0x9e, 0x12, 0xf0, 0x52, 0x27, 0xe8, 0x5b, 0x91, 0x30, 0xbb, 0x57, 0x80, 0xfc, 0xd3, 0xdc, 0xca, 0xd6, 0x5d, 0x33, 0x21, 0xf7, 0xbf, 0xfd, 0x34, 0xaa, 0x29, 0x78, 0xdb, 0xae, 0x6c, 0xfe, 0x95, 0xdc, 0x10, 0xce, 0x35, 0x09, 0xa0, 0x0f, 0xd8, 0x2e, 0x49, 0x12, 0x1a, 0xc7, 0xa4, 0xd8, 0x8a, 0x78, 0xcf, 0xd4, 0x5b, 0xf6, 0xc2, 0xf1, 0x5c, 0x25, 0xe0, 0xd7, 0x2a, 0x7e, 0xcd, 0x6a, 0xa3, 0xb4, 0x80, 0x94, 0x9f, 0x97, 0x99, 0x45, 0xdb, 0x38, 0xf4, 0xb8, 0x36, 0x4e, 0x7e, 0xf7, 0x20, 0xd8, 0x47, 0xa1, 0x4f, 0x04, 0xd9, 0xeb, 0xb3, 0x50, 0xc9, 0xe5, 0xad, 0xef, 0x8b, 0xff, 0x7c, 0x6e, 0x8a, 0xcb, 0xf8, 0x97, 0x78, 0x04, 0x82, 0x96, 0xe3, 0xd0, 0x3b, 0x5a, 0x0a, 0x42, 0x74, 0x3e, 0xee, 0x23, 0x66, 0xe9, 0xac, 0xf2, 0x23, 0x72, 0x09, 0x29, 0xcd, 0xc8, 0x4f, 0xc2, 0x06, 0x52, 0x58, 0xfa, 0xa7, 0xd2, 0xe8, 0x55, 0xb5, 0x8f, 0x40, 0xe2, 0x91, 0xb3, 0xef, 0xc0, 0x6e, 0xf2, 0xec, 0xe1, 0x08, 0x6c, 0xe2, 0x0e, 0x94, 0xd5, 0xcb, 0x2b, 0xf2, 0xd3, 0xc0, 0xbd, 0x2a, 0xa7, 0x0f, 0xa9, 0x16, 0x10, 0x8f, 0x3e, 0x5c, 0x6c, 0x30, 0x76, 0xa0, 0x21, 0xd6, 0x79, 0xf7, 0x3b, 0x68, 0x63, 0x9e, 0x57, 0x23, 0x47, 0xec, 0xbf, 0x35, 0x74, 0x85, 0xd6, 0x87, 0xf7, 0xd1, 0xb7, 0xda, 0x61, 0xac, 0x19, 0x15, 0xca, 0x5f, 0x76, 0xdd, 0x15, 0xcf, 0x6c, 0x67, 0x76, 0xf5, 0x63, 0x8a, 0x32, 0x8e, 0x70, 0x19, 0xa6, 0x14, 0x79, 0x6f, 0x8b, 0xec, 0x9a, 0x4b, 0x78, 0xe1, 0xc8, 0xdf, 0xa8, 0xd1, 0xb4, 0x23, 0xfe, 0xa6, 0xf2, 0x6f, 0x46, 0x88, 0x5b, 0x49, 0xbe, 0x52, 0xb0, 0x7c, 0xd5, 0x42, 0x80, 0x6a, 0x32, 0xf4, 0x4b, 0xa2, 0xf8, 0x91, 0xe7, 0xb5, 0x49, 0x44, 0x23, 0x46, 0x09, 0xed, 0xab, 0x61, 0xe4, 0x1a, 0x2b, 0x0e, 0x92, 0x33, 0xb7, 0x25, 0x59, 0xf4, 0x6b, 0x63, 0xd4, 0x20, 0x4e, 0xbe, 0xf4, 0x74, 0x7c, 0xf6, 0x44, 0xda, 0x85, 0x6d, 0x71, 0xe0, 0x10, 0x38, 0x09, 0x68, 0xc4, 0x76, 0x83, 0xa1, 0x68, 0xe0, 0x80, 0x36, 0x48, 0xa2, 0x50, 0xc5, 0xdb, 0x6a, 0xb8, 0x92, 0xa4, 0xbe, 0xf2, 0x7d, 0x56, 0x92, 0xf6, 0x31, 0x3b, 0x1a, 0xf8, 0x9f, 0xd6, 0xdd, 0x32, 0xab, 0xc8, 0x0b, 0xe3, 0x24, 0xf0, 0x10, 0x98, 0xfa, 0xd6, 0x69, 0xaa, 0xab, 0x4a, 0xb6, 0x08, 0xff, 0x48, 0x11, 0x36, 0xf5, 0x1f, 0x9f, 0x96, 0xfd, 0xd2, 0x64, 0xe7, 0x67, 0xbf, 0x5c, 0x0b, 0x1c, 0x7e, 0xc7, 0x0d, 0x8c, 0x0c, 0xc4, 0x62, 0xe7, 0x29, 0x21, 0x6f, 0x90, 0xfe, 0x72, 0x4c, 0xcf, 0x03, 0x60, 0xc8, 0xc6, 0x20, 0x44, 0xad, 0xa6, 0x13, 0xf5, 0x45, 0x22, 0x11, 0xdd, 0x1c, 0x24, 0xb0, 0x53, 0x08, 0xbf, 0x04, 0x25, 0x67, 0x66, 0x08, 0x73, 0xa8, 0x5b, 0x40, 0xc4, 0x0d, 0x69, 0x9d, 0x53, 0xae, 0xd6, 0xa1, 0xaa, 0xc2, 0x94, 0xc3, 0x72, 0x1a, 0xb7, 0x15, 0x8a, 0xee, 0x2c, 0x24, 0x56, 0xdc, 0xa7, 0x20, 0x5a, 0x2e, 0xdd, 0x3d, 0x07, 0x5c, 0xf4, 0x58, 0xd4, 0xd1, 0x37, 0xde, 0x91, 0xf2, 0x0f, 0xea, 0xf8, 0x5d, 0x2e, 0xad, 0x86, 0x6e, 0x0e, 0x13, 0x89, 0x08, 0x9a, 0xa3, 0x79, 0x92, 0x2b, 0xa8, 0x8b, 0x3f, 0xb5, 0x8e, 0x84, 0x93, 0x43, 0x8e, 0xcb, 0x23, 0xa0, 0x8e, 0xc3, 0x9c, 0x57, 0x42, 0x57, 0x06, 0xde, 0x98, 0xd7, 0x4a, 0x0f, 0x53, 0x02, 0xf2, 0xd7, 0xf5, 0x64, 0x31, 0x32, 0xe3, 0xe2, 0x23, 0x57, 0xc4, 0x93, 0x55, 0x2f, 0x2a, 0xd1, 0x88, 0x0c, 0x74, 0x90, 0xb2, 0x98, 0xf3, 0xef, 0x46, 0x0c, 0x4b, 0x0d, 0xb5, 0xa2, 0x1c, 0x1e, 0x35, 0x4c, 0xe2, 0xbe, 0xc1, 0xa6, 0x1a, 0x84, 0x61, 0x29, 0xa7, 0xdb, 0xab, 0xa2, 0x73, 0x0d, 0x8a, 0xe3, 0x59, 0xa1, 0x3e, 0xb9, 0x43, 0xe7, 0xa4, 0x1e, 0x8f, 0xd1, 0xb8, 0xaf, 0xb8, 0x04, 0x58, 0x60, 0x32, 0x2f, 0x4b, 0x6e, 0x95, 0x9c, 0x81, 0x95, 0xfe, 0x05, 0x9c, 0x84, 0xb2, 0xa8, 0xb0, 0x8e, 0x05, 0x9d, 0x47, 0xa2, 0x7b, 0x68, 0xa9, 0x7d, 0x2c, 0xcb, 0x5a, 0x1e, 0x6d, 0xde, 0xe3, 0x7a, 0xac, 0x61, 0xd5, 0x72, 0x9c, 0x50, 0x0c, 0x02, 0x93, 0xb8, 0x31, 0xbb, 0x30, 0xca, 0x82, 0x73, 0x40, 0x2d, 0xd6, 0x3b, 0xe2, 0x99, 0xdb, 0x91, 0xea, 0xa2, 0xa3, 0xd7, 0x84, 0xd1, 0x5f, 0x04, 0x1a, 0xf9, 0x6a, 0x9a, 0x77, 0xc8, 0x89, 0xd8, 0x2c, 0x9d, 0x71, 0x30, 0x32, 0x99, 0x89, 0xfb, 0xd2, 0xf9, 0xf2, 0x6c, 0xc2, 0xa3, 0xc5, 0xc2, 0x91, 0xfe, 0x9b, 0xc2, 0x44, 0x07, 0x53, 0x65, 0x42, 0xa2, 0x0f, 0xce, 0x6d, 0x2d, 0x80, 0x7e, 0x92, 0x5b, 0x64, 0xcb, 0x03, 0x40, 0x4c, 0x8e, 0x82, 0xa8, 0xa3, 0x1d, 0x61, 0xad, 0xec, 0x79, 0xe8, 0x89, 0x4b, 0xc8, 0xf7, 0xa8, 0x47, 0x05, 0xec, 0x02, 0xce, 0xf6, 0xc7, 0xa7, 0x79, 0x5e, 0x8d, 0x9b, 0x12, 0x75, 0xea, 0xe5, 0x54, 0x95, 0x19, 0xe3, 0xf1, 0x36, 0x09, 0xe0, 0xda, 0x1c, 0xb8, 0xe8, 0xba, 0xcf, 0xe3, 0xdb, 0xc3, 0x4c, 0xe2, 0xc1, 0xae, 0xfa, 0xce, 0x5d, 0xfd, 0xdf, 0xe4, 0x05, 0x84, 0x14, 0x2e, 0xb1, 0x27, 0x76, 0x60, 0x51, 0xe5, 0x9f, 0x00, 0x64, 0x16, 0x15, 0xc9, 0xc6, 0xf0, 0xc0, 0x52, 0xc9, 0x50, 0xa2, 0xeb, 0x88, 0xb8, 0xc2, 0xc7, 0x78, 0x93, 0x69, 0x61, 0x40, 0xc1, 0x91, 0x18, 0xcb, 0x4f, 0x9b, 0x1c, 0x9b, 0x86, 0x40, 0x8e, 0x60, 0x28, 0xca, 0xe3, 0xc9, 0xf6, 0x84, 0x8a, 0x9a, 0x75, 0x6f, 0xce, 0xff, 0xf2, 0x36, 0xfd, 0x1f, 0xc4, 0x64, 0xca, 0xf5, 0xd1, 0xd5, 0xf0, 0x5b, 0x54, 0x6a, 0x18, 0x68, 0xdd, 0x01, 0xfd, 0xfc, 0x99, 0xa5, 0xce, 0x99, 0xd3, 0x01, 0xd4, 0x75, 0xbb, 0x1b, 0x54, 0xcd, 0x66, 0x3f, 0xb7, 0x7b, 0x17, 0x38, 0xe8, 0xcb, 0xbd, 0xc7, 0xfe, 0x8b, 0xbc, 0x4d, 0x1b, 0x61, 0xf0, 0xcb, 0x93, 0x62, 0xef, 0x0c, 0x51, 0xdf, 0x8f, 0x21, 0x77, 0x82, 0xa9, 0x0e, 0x45, 0x9a, 0x1c, 0xc3, 0x3c, 0xb4, 0x14, 0x4e, 0x83, 0x6b, 0x8c, 0x4e, 0x89, 0x81, 0x11, 0xab, 0xec, 0x2e, 0xc9, 0x84, 0x9a, 0xb7, 0xb5, 0x69, 0x36, 0x43, 0x33, 0xcb, 0xbd, 0xeb, 0xc7, 0xb0, 0x69, 0x10, 0x1a, 0xab, 0xd5, 0xf1, 0x43, 0x0c, 0x63, 0x7c, 0x46, 0x54, 0xdb, 0x65, 0xda, 0xec, 0x54, 0x76, 0x70, 0x16, 0x58, 0x26, 0x70, 0x23, 0x43, 0x6c, 0xc6, 0xe7, 0xec, 0xd5, 0x9d, 0x6a, 0x87, 0xd5, 0x6a, 0xe0, 0xca, 0x5a, 0x2d, 0xdb, 0x4f, 0xa7, 0xf4, 0xc0, 0x3a, 0x60, 0xa0, 0x77, 0x1b, 0xe1, 0xeb, 0x67, 0x16, 0xd4, 0xaa, 0xa2, 0x41, 0x03, 0x50, 0x5c, 0x4d, 0x6a, 0xb4, 0xa2, 0x69, 0x91, 0x14, 0x49, 0x63, 0x19, 0x59, 0x24, 0x10, 0x94, 0x9c, 0x7a, 0xef, 0x9a, 0xea, 0xb6, 0x09, 0x19, 0x44, 0x61, 0x1b, 0xec, 0xea, 0x4e, 0xf7, 0xaf, 0xda, 0x14, 0x28, 0xd2, 0x93, 0xc1, 0xd5, 0xed, 0x1e, 0xcd, 0xe8, 0x53, 0x4f, 0x4d, 0x6e, 0xea, 0x49, 0x69, 0x41, 0x3a, 0x40, 0x10, 0xe5, 0xc3, 0x83, 0xeb, 0xb1, 0x94, 0xb9, 0x8f, 0x2f, 0x19, 0x6a, 0xf6, 0xc5, 0x35, 0xc2, 0x30, 0x94, 0x90, 0x92, 0x56, 0xa0, 0x33, 0x98, 0xc0, 0x31, 0x52, 0x00, 0x77, 0x7a, 0x68, 0x2a, 0xed, 0x79, 0x8a, 0xae, 0xec, 0x1e, 0xf4, 0x9e, 0xcd, 0xaf, 0xe9, 0x0b, 0xea, 0x6b, 0xba, 0xca, 0x56, 0x6e, 0x24, 0x77, 0xcb, 0xd4, 0xde, 0xbb, 0xe3, 0x21, 0x73, 0xcb, 0x8b, 0xe1, 0x4e, 0x31, 0xb5, 0x8b, 0x13, 0xcf, 0x4e, 0xab, 0x36, 0x21, 0x70, 0x40, 0xc6, 0xc2, 0xd8, 0x63, 0x89, 0x32, 0x9a, 0x2a, 0x4e, 0xd6, 0x13, 0xcc, 0x7f, 0x40, 0x20, 0x06, 0xf6, 0xb1, 0x8d, 0xbd, 0x11, 0xdc, 0xd1, 0xe4, 0x09, 0xed, 0xf8, 0xa0, 0x7f, 0xca, 0xe0, 0xaa, 0x58, 0x99, 0xa8, 0xf6, 0xcb, 0x82, 0x66, 0x92, 0xb8, 0xb6, 0x18, 0xd0, 0x3c, 0xb0, 0xde, 0xa7, 0x82, 0xbb, 0x66, 0x57, 0xdc, 0xb4, 0xa7, 0x4c, 0x12, 0x11, 0xd2, 0x45, 0xfa, 0x22, 0x85, 0xb5, 0x48, 0x97, 0x42, 0x69, 0xa8, 0x43, 0x21, 0x6c, 0x0a, 0x1f, 0xc1, 0x28, 0x3d, 0x92, 0x84, 0xcd, 0xc0, 0xef, 0xfc, 0xf7, 0xd5, 0x40, 0xa0, 0x8b, 0xd6, 0x42, 0xc4, 0xe1, 0xcc, 0xb0, 0xc8, 0x29, 0x3e, 0xc4, 0x8f, 0x07, 0x47, 0xfc, 0x32, 0x81, 0xeb, 0x1a, 0xf6, 0x1b, 0xab, 0x6e, 0x7c, 0x40, 0x57, 0x57, 0x38, 0xe4, 0x24, 0x08, 0x24, 0x68, 0xff, 0x88, 0xb6, 0xbe, 0x20, 0xfc, 0x0f, 0xcd, 0xe1, 0x29, 0x75, 0x17, 0xd1, 0x35, 0x03, 0x99, 0x04, 0xad, 0x9f, 0xf2, 0xae, 0xcd, 0x2d, 0xc8, 0xf0, 0xfb, 0x02, 0x68, 0xf2, 0x94, 0x9c, 0xac, 0x32, 0xeb, 0x90, 0x22, 0x1c, 0x8f, 0xc3, 0x6a, 0xda, 0xcd, 0xdd, 0xe0, 0x6d, 0x76, 0xfb, 0x7c, 0xfd, 0xe3, 0xa5, 0xf6, 0x6d, 0x35, 0xff, 0x2d, 0x33, 0xe1, 0x43, 0xc9, 0x67, 0x6d, 0x6e, 0x1f, 0x19, 0x74, 0x3a, 0x56, 0xe8, 0xf0, 0x4d, 0xc8, 0xd0, 0xb9, 0xb0, 0xab, 0x44, 0x48, 0x82, 0xf1, 0x7d, 0xc1, 0xee, 0x6c, 0x11, 0x31, 0x5a, 0x36, 0xc7, 0x13, 0xe1, 0x50, 0xaa, 0x1a, 0x04, 0x89, 0x5c, 0x2a, 0x9c, 0xa2, 0xad, 0xa7, 0x13, 0xaf, 0x6c, 0xf3, 0xd4, 0xc0, 0x7e, 0x32, 0x00, 0xc1, 0x2c, 0x51, 0x63, 0x9f, 0xc1, 0x46, 0xa6, 0xad, 0x55, 0x99, 0xc6, 0x45, 0xe4, 0x23, 0xc5, 0xb2, 0xa3, 0x16, 0x9f, 0x4d, 0x93, 0x3d, 0x7f, 0xe7, 0x56, 0x85, 0x33, 0x67, 0x42, 0xbd, 0xdd, 0xb4, 0xb4, 0x9a, 0xec, 0xd6, 0xa6, 0xfe, 0x4b, 0x58, 0x84, 0x79, 0xd8, 0xf0, 0x3c, 0x11, 0x18, 0x62, 0x95, 0x3e, 0x29, 0xa1, 0xc1, 0x39, 0xf8, 0x37, 0x35, 0x76, 0xb4, 0xe8, 0xb8, 0x6f, 0x82, 0x92, 0xba, 0xa4, 0x72, 0x58, 0xe8, 0xe0, 0xb1, 0xff, 0xfd, 0xbd, 0x01, 0x98, 0xdb, 0x6a, 0x67, 0x60, 0xda, 0xac, 0x23, 0xe4, 0x60, 0x23, 0xe5, 0x69, 0xb2, 0xcf, 0x3e, 0x8a, 0x09, 0xd3, 0x55, 0x23, 0xe9, 0x78, 0xdb, 0x6e, 0xae, 0x74, 0x41, 0x6c, 0x68, 0x6d, 0x28, 0x87, 0xe8, 0xb9, 0x19, 0x75, 0x1b, 0x68, 0x76, 0x5f, 0x97, 0x84, 0xb0, 0x43, 0x74, 0x97, 0xbb, 0x97, 0x5d, 0x6e, 0xbf, 0x2f, 0xe6, 0x1d, 0x11, 0x60, 0x20, 0x43, 0x61, 0x66, 0x6c, 0x8f, 0x35, 0x03, 0x8c, 0x83, 0x96, 0x69, 0x00, 0x78, 0x08, 0x5a, 0x8f, 0xe3, 0xc0, 0x8e, 0x24, 0xd6, 0x12, 0x55, 0xdb, 0xca, 0x29, 0x7d, 0x5c, 0x9b, 0xfa, 0x76, 0x68, 0xd4, 0x7a, 0xb4, 0xb1, 0x2d, 0x0f, 0x55, 0xef, 0x52, 0x45, 0x04, 0x30, 0xe6, 0xc3, 0x1d, 0x6f, 0xc8, 0x7d, 0x11, 0x69, 0x95, 0x2b, 0x0d, 0xac, 0x6e, 0xf9, 0xd6, 0xf1, 0xfb, 0x80, 0xf8, 0xab, 0xaf, 0xf5, 0x1f, 0xe0, 0x4e, 0xa0, 0xc5, 0x38, 0xad, 0x90, 0x0d, 0x54, 0xba, 0x8e, 0xef, 0x60, 0xbb, 0x4f, 0x96, 0xec, 0xdb, 0xee, 0x06, 0xf7, 0xe2, 0x99, 0x02, 0x4d, 0x44, 0x8a, 0x2d, 0x14, 0x5d, 0x38, 0x6f, 0xa1, 0xfb, 0xcf, 0x9a, 0x90, 0x1d, 0xde, 0x4e, 0x13, 0xfa, 0x50, 0x1a, 0x8a, 0x45, 0x9e, 0xe3, 0x54, 0xb0, 0x43, 0x8a, 0xe5, 0xaf, 0x6f, 0xc9, 0x19, 0x7e, 0xff, 0x5e, 0xc8, 0x65, 0xad, 0x6c, 0x9b, 0x3b, 0x84, 0x1e, 0x1e, 0x29, 0x98, 0x8d, 0x16, 0xb0, 0xf3, 0xe4, 0x14, 0xed, 0xd2, 0xc2, 0x4a, 0x1c, 0x12, 0xdf, 0x9e, 0x5c, 0xe5, 0xf3, 0xfd, 0xb1, 0xc9, 0xd3, 0xf2, 0x4f, 0xbb, 0xdd, 0x77, 0x16, 0xa7, 0x97, 0x0b, 0x59, 0x24, 0x93, 0x04, 0xe3, 0x5e, 0x96, 0x27, 0x3c, 0x53, 0xf8, 0x76, 0x28, 0x43, 0x4e, 0x49, 0x71, 0x61, 0x47, 0xa0, 0xe6, 0xcf, 0xd4, 0xb8, 0xa4, 0xc9, 0x8c, 0xdc, 0x94, 0x21, 0x4e, 0x7e, 0x35, 0xeb, 0x28, 0x86, 0x9c, 0x79, 0x77, 0xea, 0xb9, 0x8a, 0x50, 0x7f, 0xdb, 0xbe, 0x1f, 0x0f, 0x76, 0x4d, 0x8e, 0xab, 0x25, 0xf9, 0xa9, 0x42, 0xeb, 0x41, 0x3f, 0x73, 0xbe, 0xd8, 0x8b, 0xa0, 0x46, 0x55, 0x13, 0x44, 0xe2, 0x2c, 0xd1, 0x86, 0xec, 0xdd, 0x91, 0x0e, 0x3e, 0x6b, 0x9a, 0x17, 0xf4, 0x10, 0x90, 0xc5, 0x74, 0x2f, 0x99, 0xb9, 0xac, 0x8a, 0xbf, 0xe4, 0x9b, 0xb5, 0x96, 0x98, 0x13, 0xcb, 0x1e, 0xe5, 0xbd, 0x5f, 0xea, 0x22, 0x5d, 0xb5, 0x82, 0xca, 0x57, 0x32, 0x07, 0x8a, 0x73, 0x12, 0x15, 0x97, 0xdd, 0x59, 0xed, 0x45, 0x70, 0x0c, 0xd4, 0xd6, 0x33, 0xa0, 0xb6, 0x8f, 0x24, 0xb3, 0x0f, 0x12, 0x35, 0xfa, 0x0c, 0xe7, 0x95, 0x7b, 0xed, 0x5c, 0x30, 0xfc, 0xad, 0x8f, 0x79, 0xbb, 0xe5, 0xc9, 0x67, 0x5f, 0xee, 0x0d, 0xbd, 0x2f, 0x45, 0xf1, 0x8f, 0x82, 0x34, 0xad, 0x02, 0x76, 0xaf, 0x72, 0x53, 0xe5, 0x7d, 0xfd, 0x1b, 0x95, 0x98, 0x6b, 0xd1, 0xaf, 0xd5, 0x4f, 0x90, 0x73, 0xc7, 0x02, 0x1a, 0x29, 0xe1, 0x3a, 0x1e, 0x5b, 0xdc, 0xde, 0xb6, 0x41, 0x58, 0x19, 0x34, 0x7d, 0xc6, 0xae, 0x1e, 0x09, 0x85, 0x8b, 0x77, 0x6d, 0x4b, 0xa0, 0x40, 0x35, 0xc7, 0xf1, 0x3f, 0xa2, 0x85, 0xea, 0xff, 0xa0, 0x11, 0xf3, 0x18, 0xf8, 0x5f, 0x45, 0xb0, 0xc7, 0x6a, 0xfc, 0x42, 0x2f, 0x1c, 0x6d, 0x9f, 0x4c, 0x6e, 0xb9, 0x32, 0x69, 0xd0, 0xa3, 0x87, 0x74, 0xcb, 0x9e, 0x0f, 0xb0, 0xe5 ],
+const [ 0xa4, 0x89, 0xcc, 0x5f, 0x00, 0xc1, 0x83, 0x5d, 0xda, 0xf2, 0xf0, 0x58, 0x67, 0x10, 0x85, 0x07, 0x52, 0xab, 0xe6, 0x8d, 0x00, 0x1f, 0x4e, 0x4e, 0x18, 0x0b, 0x2f, 0x00, 0x43, 0x04, 0x18, 0x05, 0x30, 0x8a, 0xdc, 0xf8, 0xdc, 0x3a, 0xf1, 0x86, 0x10, 0x46, 0x16, 0x7f, 0x2b, 0x23, 0x38, 0x2c, 0x21, 0x81, 0x97, 0xe4, 0xc4, 0x80, 0x25, 0xda, 0x42, 0x21, 0x2e, 0x39, 0xef, 0xfa, 0x3e, 0x73, 0x45, 0x2f, 0x40, 0xd5, 0x29, 0x9d, 0xe3, 0x60, 0x70, 0x58, 0x42, 0xd4, 0xa2, 0x58, 0xc3, 0x0d, 0xfe, 0x6f, 0x3f, 0x92, 0xbe, 0x7e, 0x64, 0x6c, 0x9c, 0xe9, 0x58, 0x34, 0x94, 0x48, 0x9f, 0x70, 0xec, 0x60, 0x3f, 0x20, 0x72, 0x51, 0x22, 0x93, 0x05, 0x10, 0xbb, 0x7f, 0x56, 0x18, 0xed, 0x51, 0xf0, 0x5d, 0x28, 0xc2, 0x76, 0x82, 0xd5, 0xab, 0x2c, 0x4b, 0xf4, 0x1a, 0xb9, 0x55, 0x03, 0xa5, 0x2c, 0x05, 0x22, 0xfe, 0x3c, 0xbe, 0x76, 0xc8, 0xd4, 0x57, 0xcb, 0xa9, 0xcf, 0xcc, 0x7d, 0xa1, 0x00, 0x33, 0x98, 0x9a, 0x75, 0xf2, 0x3e, 0x40, 0xfc, 0x30, 0x49, 0x12, 0xe7, 0x89, 0x32, 0xb9, 0x0d, 0x06, 0x32, 0x99, 0x11, 0x4c, 0xa6, 0xa7, 0xe7, 0x13, 0xb8, 0x7a, 0x93, 0xda, 0x3c, 0xa4, 0x34, 0xd9, 0xd8, 0x42, 0x42, 0x38, 0x68, 0xd2, 0x14, 0x7e, 0xa0, 0x45, 0xa5, 0x4c, 0xf3, 0x55, 0x97, 0x4b, 0xb4, 0x19, 0x78, 0x63, 0x7c, 0xd7, 0x45, 0x2e, 0xcb, 0x19, 0x2c, 0xac, 0xf2, 0x03, 0x96, 0x38, 0x30, 0xe3, 0x65, 0xba, 0x1b, 0x0a, 0x7a, 0x1f, 0x41, 0xdb, 0x7b, 0x06, 0x10, 0x21, 0xd3, 0xbc, 0xf3, 0xa6, 0xfa, 0x6b, 0xbe, 0x01, 0xf6, 0x8e, 0x4c, 0xaf, 0x22, 0xa8, 0x66, 0x65, 0x2e, 0x36, 0xe7, 0xa5, 0x67, 0xe2, 0x1e, 0x90, 0x38, 0xf9, 0x74, 0xfb, 0xf1, 0x1f, 0x4f, 0xc4, 0xc8, 0x42, 0x36, 0x66, 0x1e, 0xcc, 0x35, 0xcc, 0x03, 0x1d, 0x83, 0x63, 0xfb, 0x38, 0x62, 0x73, 0x02, 0xbc, 0x47, 0xaf, 0xcf, 0x17, 0x3b, 0x0b, 0x56, 0xf6, 0x81, 0xcd, 0x90, 0xff, 0x79, 0xe7, 0x7e, 0xc3, 0xc4, 0x84, 0x6c, 0xee, 0xa9, 0xe1, 0x73, 0xc1, 0xb7, 0x5e, 0x41, 0xc3, 0xac, 0xd5, 0x1d, 0xb3, 0x96, 0x2a, 0x25, 0xc0, 0x38, 0x23, 0xda, 0xfd, 0xaf, 0x7a, 0xdf, 0x0f, 0x56, 0x31, 0xfe, 0x28, 0xe6, 0x26, 0x6c, 0x3a, 0xe2, 0xe7, 0x4e, 0x64, 0x32, 0xc7, 0x7b, 0xb1, 0x0d, 0x32, 0x84, 0x01, 0x1d, 0x3d, 0xf2, 0x47, 0xde, 0x81, 0xce, 0xf5, 0x48, 0x2a, 0x67, 0xb5, 0xad, 0x4b, 0x4f, 0x5a, 0xe4, 0x75, 0xa7, 0x16, 0xa7, 0x87, 0x9c, 0xed, 0x3a, 0xc7, 0x32, 0x69, 0x4d, 0x32, 0x41, 0x90, 0x24, 0x11, 0xbc, 0x13, 0xf5, 0xcd, 0x39, 0xc8, 0x92, 0x04, 0xae, 0x5a, 0x47, 0xdc, 0x79, 0x40, 0x06, 0x98, 0xa4, 0xeb, 0xc1, 0x69, 0x66, 0x44, 0x18, 0x86, 0xed, 0x55, 0x34, 0x7e, 0x5a, 0x46, 0xf3, 0xcd, 0x0e, 0x8c, 0x45, 0xae, 0x24, 0x5d, 0xd6, 0x31, 0x3e, 0x67, 0xed, 0x8d, 0x85, 0xc1, 0x94, 0xb7, 0xeb, 0x22, 0xf9, 0x34, 0xb4, 0x51, 0x14, 0x2b, 0x34, 0xdc, 0x8a, 0xbe, 0xda, 0x0d, 0xd1, 0x9a, 0x6d, 0x1a, 0x95, 0xcd, 0x96, 0x9c, 0x5b, 0xd9, 0x9f, 0x42, 0x65, 0x06, 0x7a, 0xc7, 0xd5, 0xfc, 0x05, 0x21, 0x15, 0x90, 0x8c, 0xfc, 0x75, 0xdf, 0x8f, 0x66, 0x16, 0x99, 0xc6, 0xcc, 0x08, 0xa0, 0x63, 0x25, 0xaf, 0xd2, 0x97, 0x6d, 0x6b, 0x22, 0x57, 0x55, 0x77, 0xee, 0x60, 0x39, 0x12, 0x8d, 0x79, 0x52, 0xdd, 0x27, 0xf8, 0x2d, 0x85, 0xc9, 0x87, 0x5b, 0xa1, 0xb8, 0x28, 0x6b, 0xde, 0x06, 0x77, 0x15, 0x59, 0x64, 0x2f, 0xb8, 0x4c, 0x37, 0xf0, 0x07, 0xed, 0xee, 0x40, 0xfe, 0x93, 0x92, 0xcf, 0x1c, 0x1b, 0x9e, 0xff, 0xcc, 0x8a, 0x12, 0xa3, 0x24, 0xf3, 0xc3, 0x07, 0xd1, 0x9c, 0xf5, 0x32, 0x52, 0x5c, 0x2b, 0x67, 0x65, 0x47, 0x3e, 0xf2, 0xbf, 0x8e, 0xad, 0x21, 0x00, 0xa0, 0x34, 0x90, 0xe6, 0x95, 0xa0, 0xa9, 0xc1, 0xcd, 0xe1, 0x6c, 0x27, 0xd4, 0x61, 0x6c, 0xe8, 0x89, 0x94, 0x1a, 0x44, 0x80, 0xd1, 0x46, 0x5c, 0xa4, 0x60, 0xe3, 0xe7, 0x21, 0xd4, 0x0b, 0x26, 0x81, 0x9a, 0x43, 0x1a, 0x14, 0xd3, 0xff, 0xf4, 0x96, 0x5f, 0x69, 0xcd, 0x0c, 0x3a, 0x5e, 0x97, 0xef, 0x0c, 0xb9, 0x54, 0x8c, 0xfb, 0xd5, 0x86, 0xab, 0xc4, 0x4d, 0xe6, 0x6f, 0x0a, 0x06, 0x58, 0x7d, 0xee, 0x70, 0x1f, 0x60, 0xdf, 0x08, 0x4d, 0x2d, 0xb3, 0x22, 0x7e, 0x62, 0xf7, 0xe5, 0xc6, 0x14, 0x84, 0x97, 0xe8, 0x4a, 0x53, 0x1b, 0xc9, 0xa4, 0x93, 0xb7, 0x24, 0x40, 0xf8, 0x1b, 0x7e, 0xdd, 0x55, 0x9f, 0x5d, 0x41, 0x6d, 0xcd, 0xb5, 0xd9, 0x07, 0x1f, 0xa3, 0xa0, 0x40, 0x09, 0x5d, 0x41, 0x25, 0x3a, 0x6a, 0x80, 0x81, 0x20, 0x0e, 0xd6, 0xf4, 0xaa, 0x09, 0x5b, 0x45, 0x51, 0x81, 0xea, 0xf9, 0x59, 0x3c, 0x7f, 0x25, 0x54, 0x12, 0xe3, 0x80, 0xe9, 0xa2, 0x8c, 0xbc, 0xd3, 0x45, 0xbe, 0x17, 0x2c, 0x40, 0xf7, 0x2d, 0xec, 0x3e, 0x8a, 0x10, 0xad, 0xfd, 0x8a, 0x9a, 0xb1, 0x47, 0xe9, 0x02, 0x25, 0x24, 0xe1, 0xae, 0xa7, 0x4e, 0x93, 0x48, 0x07, 0xe5, 0xef, 0x14, 0x4a, 0x64, 0xd3, 0x81, 0xf5, 0xd4, 0x77, 0xfe, 0x88, 0x3f, 0x08, 0x0e, 0x48, 0x68, 0x93, 0x9f, 0x41, 0xb9, 0x25, 0x98, 0x8c, 0x7d, 0x31, 0xb1, 0xce, 0x4f, 0x31, 0x87, 0x01, 0xd2, 0x90, 0xf0, 0x77, 0xa3, 0xc8, 0x8b, 0x1b, 0x8c, 0xc8, 0x9c, 0xfb, 0xfb, 0x98, 0x17, 0x03, 0xb2, 0x3f, 0xfb, 0x0b, 0xbf, 0xe5, 0xe1, 0x15, 0xaf, 0x35, 0xd5, 0xcf, 0xff, 0x05, 0x64, 0x60, 0xd3, 0x39, 0xf6, 0x60, 0xea, 0xe4, 0x5f, 0x28, 0xd2, 0xb1, 0xb0, 0x4d, 0x58, 0x82, 0x53, 0x67, 0x43, 0x56, 0x57, 0x17, 0x42, 0x70, 0x08, 0x48, 0x22, 0xb6, 0xc3, 0xb4, 0x44, 0x57, 0x08, 0xaa, 0x4f, 0xb0, 0xd1, 0x0f, 0x22, 0x71, 0x22, 0xa4, 0x0d, 0xfb, 0xe2, 0x86, 0x40, 0x0d, 0xe9, 0xfb, 0x83, 0xa0, 0x5a, 0x6b, 0x28, 0x0f, 0x33, 0xad, 0x3e, 0x7b, 0x22, 0x85, 0x08, 0x6e, 0x9b, 0x6a, 0xae, 0xbe, 0x27, 0x8c, 0x31, 0xb5, 0xff, 0x15, 0xa4, 0x6e, 0xd9, 0xaf, 0x9a, 0x82, 0x02, 0x47, 0xdb, 0xe5, 0xad, 0x11, 0x5b, 0x0a, 0x8b, 0xcd, 0x6c, 0x4e, 0x9b, 0x48, 0x32, 0x93, 0x44, 0x25, 0x57, 0x2b, 0xa1, 0xdd, 0x01, 0xf9, 0x1c, 0x05, 0x01, 0xd2, 0x3e, 0xd0, 0x4e, 0x29, 0xc5, 0xd4, 0xb1, 0xec, 0xf7, 0x11, 0xc1, 0xa9, 0x37, 0x2f, 0x12, 0xf5, 0xd6, 0x07, 0xaa, 0x0e, 0x2b, 0x65, 0xb4, 0xbf, 0xe6, 0x0c, 0x79, 0x84, 0xa1, 0xfb, 0x8b, 0xef, 0xb8, 0xef, 0x43, 0x4a, 0x5b, 0x29, 0x6e, 0x7e, 0xe1, 0x71, 0x44, 0x34, 0x5f, 0x5b, 0x9a, 0x39, 0x7a, 0xc9, 0x58, 0x27, 0x79, 0xb1, 0x2c, 0x42, 0x9f, 0x21, 0x80, 0xa0, 0xb7, 0x80, 0xaa, 0x8d, 0xf0, 0x16, 0x63, 0x2d, 0xeb, 0xcf, 0x7b, 0x63, 0x13, 0x3b, 0xcb, 0xf2, 0x2d, 0xda, 0x6a, 0xe2, 0x2f, 0x97, 0x24, 0x26, 0x56, 0x92, 0x27, 0x7b, 0x73, 0x22, 0x00, 0x93, 0x86, 0x1b, 0xc6, 0x73, 0x8d, 0x4c, 0x95, 0x1a, 0x9e, 0x4c, 0x3e, 0x63, 0x34, 0x77, 0x3d, 0x2c, 0xc7, 0x33, 0xec, 0xb8, 0x9f, 0x78, 0xf6, 0x52, 0xe9, 0x8f, 0x0d, 0x33, 0x0b, 0x19, 0xe0, 0xa6, 0x35, 0x54, 0x47, 0x6a, 0x38, 0x9a, 0xc1, 0x58, 0x9c, 0x2a, 0x21, 0x45, 0xec, 0x2b, 0x84, 0x2a, 0x55, 0xee, 0x86, 0x83, 0x70, 0x74, 0xb6, 0xf4, 0x5b, 0x30, 0x47, 0x32, 0x0e, 0x0d, 0x08, 0x21, 0xec, 0xb3, 0x96, 0x3a, 0x99, 0x06, 0xcf, 0x30, 0x0c, 0xf0, 0x8b, 0xd3, 0xe5, 0x61, 0x87, 0x34, 0x00, 0x94, 0xa2, 0x0a, 0x4a, 0x93, 0x4c, 0x54, 0xd3, 0xfd, 0x3b, 0x40, 0x25, 0x07, 0x5f, 0x4c, 0xd5, 0xc1, 0x19, 0xab, 0x57, 0x9b, 0xa8, 0xea, 0x16, 0x27, 0xe4, 0xd3, 0xc4, 0x20, 0x2e, 0x92, 0xef, 0xac, 0xa7, 0x16, 0xd6, 0xde, 0xa0, 0xba, 0x7a, 0x7f, 0x52, 0x25, 0xf8, 0x0e, 0xcf, 0x6e, 0x15, 0x05, 0x39, 0x84, 0x1b, 0x5e, 0x32, 0xce, 0xe4, 0x56, 0x93, 0x0e, 0x34, 0x71, 0x61, 0x8b, 0x4c, 0xbe, 0xfd, 0x6f, 0xbb, 0x5c, 0x9a, 0x6e, 0x78, 0x3d, 0xf4, 0xa8, 0x2e, 0x2a, 0x40, 0xd1, 0xd7, 0x07, 0x5e, 0x8f, 0x8c, 0x59, 0x56, 0x23, 0x9b, 0x05, 0x02, 0x4c, 0xdb, 0x5a, 0x08, 0x68, 0x3c, 0x52, 0x0c, 0xdd, 0xa2, 0x15, 0x23, 0xb7, 0xf4, 0xbf, 0x8a, 0x93, 0x6f, 0x63, 0x98, 0xbb, 0x41, 0x50, 0xf1, 0x92, 0x53, 0x93, 0xfd, 0x33, 0x66, 0xbd, 0x98, 0x55, 0x61, 0xe6, 0x0b, 0x72, 0xe9, 0xf1, 0x3b, 0x28, 0x33, 0x12, 0x21, 0xdf, 0x16, 0x8e, 0x7a, 0xac, 0x65, 0xc2, 0xc0, 0x75, 0x7b, 0x67, 0x58, 0x56, 0x17, 0x14, 0x0d, 0x44, 0x6b, 0x04, 0xbd, 0xf0, 0x6f, 0x1a, 0x52, 0xee, 0x7b, 0x22, 0xf4, 0x17, 0x15, 0x5a, 0x7e, 0x2c, 0x08, 0x31, 0x2e, 0xbc, 0xb6, 0x4e, 0xa0, 0x47, 0xae, 0xd4, 0xfd, 0xa3, 0x81, 0xe5, 0x70, 0x9f, 0xd2, 0x65, 0xd9, 0xe7, 0xad, 0x00, 0xc6, 0x27, 0x1a, 0x6e, 0x9f, 0x73, 0xf1, 0xf5, 0x20, 0xe7, 0xef, 0x30, 0x0c, 0x8a, 0x0a, 0x10, 0x20, 0x78, 0x02, 0x20, 0x46, 0x41, 0x39, 0x0d, 0x0c, 0x8c, 0xc4, 0x65, 0x54, 0x00, 0xc2, 0x9f, 0x4d, 0x64, 0xec, 0x5c, 0xa2, 0x04, 0x6e, 0xec, 0xf1, 0x57, 0xf6, 0x14, 0x7e, 0xe0, 0x0a, 0x0e, 0x29, 0x52, 0x9e, 0xd2, 0x9d, 0xf7, 0xe6, 0x94, 0xcb, 0x52, 0x69, 0x8e, 0x97, 0x04, 0x57, 0xff, 0xd0, 0xec, 0x1c, 0x74, 0x66, 0x92, 0x35, 0x46, 0xd7, 0xc6, 0x42, 0x64, 0xeb, 0x84, 0x5d, 0x52, 0xa1, 0x1b, 0xab, 0x72, 0x69, 0x8e, 0x30, 0x83, 0x93, 0x3b, 0xe8, 0x67, 0x08, 0xba, 0x13, 0x29, 0x38, 0x08, 0xd0, 0x3e, 0x53, 0xe5, 0xed, 0x0b, 0xbc, 0x7a, 0xfe, 0xa8, 0xbb, 0x3f, 0xac, 0xe4, 0x72, 0x1c, 0x50, 0x89, 0x12, 0xcf, 0xc1, 0xe1, 0x4e, 0x8d, 0x69, 0x78, 0x10, 0xec, 0x9f, 0x24, 0x6b, 0x00, 0x31, 0x43, 0xd2, 0xc4, 0x3f, 0x44, 0x87, 0xbc, 0x50, 0x69, 0x55, 0xd9, 0x9f, 0xca, 0x82, 0x9d, 0xb6, 0x9e, 0x00, 0x7f, 0x3e, 0xb6, 0xe3, 0x91, 0x16, 0x4a, 0x18, 0x60, 0xa2, 0xf8, 0x53, 0x1c, 0x66, 0x0a, 0x49, 0xf9, 0xd3, 0xf8, 0x20, 0xd4, 0x60, 0x2d, 0x23, 0x1a, 0xdd, 0x0e, 0xbb, 0xe6, 0x04, 0x39, 0x9a, 0x69, 0x52, 0x0a, 0x3a, 0x8f, 0x15, 0x64, 0x86, 0xdf, 0xc5, 0xae, 0xd7, 0xa4, 0x97, 0x1b, 0x21, 0x4a, 0x50, 0x2f, 0x6f, 0x0a, 0x57, 0x7f, 0x8c, 0xca, 0x0f, 0xb8, 0x03, 0x3e, 0x63, 0xe2, 0x4a, 0x54, 0xa3, 0xe6, 0x3b, 0xcf, 0x8e, 0x4e, 0xc3, 0x31, 0xb0, 0x4d, 0xde, 0xdf, 0xee, 0xff, 0xc3, 0x80, 0x5f, 0xf1, 0x5b, 0xa6, 0x5d, 0xe4, 0xf8, 0xb0, 0xdc, 0xce, 0x44, 0xef, 0xfb, 0x22, 0x78, 0x07, 0xd9, 0x51, 0xce, 0x98, 0xaa, 0x91, 0x38, 0x1e, 0x0a, 0xdd, 0x52, 0x16, 0x90, 0x3d, 0x95, 0x63, 0xa7, 0x47, 0xce, 0xef, 0x99, 0xe6, 0xcf, 0x95, 0xed, 0x5a, 0x65, 0x3f, 0xf3, 0x80, 0x8a, 0x4b, 0x9d, 0x54, 0xdb, 0x34, 0x90, 0xb4, 0x4c, 0x6e, 0x7b, 0x67, 0x1a, 0x91, 0xa8, 0x5d, 0x01, 0xba, 0xd1, 0x38, 0xb0, 0x2e, 0x34, 0x0c, 0x7a, 0x41, 0xe9, 0x63, 0x4e, 0x77, 0x74, 0x85, 0xe9, 0xe8, 0x97, 0xf6, 0x4a, 0xe9, 0x6a, 0x3f, 0x66, 0xe8, 0xad, 0xf1, 0x1e, 0x98, 0x5c, 0xe8, 0x6e, 0x4f, 0x84, 0xcd, 0xe7, 0xac, 0x56, 0xde, 0x5f, 0x7c, 0x79, 0xf2, 0xe7, 0xde, 0xa5, 0xb7, 0xfd, 0xa6, 0x6e, 0x3f, 0x03, 0x00, 0x5d, 0xbb, 0xf0, 0x56, 0x45, 0x86, 0x46, 0x73, 0xd4, 0x65, 0x44, 0xe8, 0x69, 0x0d, 0x5c, 0xae, 0x25, 0xe5, 0xe7, 0x0e, 0x45, 0x0e, 0x18, 0xbe, 0xaf, 0xa1, 0x2e, 0x4d, 0xca, 0x37, 0xee, 0xc0, 0x93, 0xaf, 0x51, 0x7e, 0xee, 0x2b, 0x7a, 0x69, 0x39, 0x5c, 0xea, 0x4e, 0x27, 0x00, 0xf7, 0x7f, 0xcc, 0xa8, 0x7a, 0xbe, 0xf4, 0xbf, 0xc9, 0x5d, 0xb9, 0xc8, 0xe5, 0xa4, 0x55, 0xe7, 0xf4, 0x73, 0x34, 0xa3, 0xf1, 0x28, 0x4e, 0xea, 0xa2, 0xc3, 0xb3, 0x55, 0xca, 0x49, 0x67, 0xae, 0xa1, 0x66, 0x71, 0xb0, 0x81, 0x55, 0x2f, 0x0d, 0xe2, 0x05, 0xec, 0xb6, 0x88, 0x74, 0xb4, 0x56, 0xfb, 0x5f, 0x67, 0x1f, 0x38, 0x1e, 0x0d, 0xca, 0xa6, 0xca, 0x69, 0xd9, 0x4b, 0xa0, 0xd1, 0x20, 0x40, 0xaa, 0x3d, 0x83, 0x62, 0x9c, 0x9d, 0x01, 0x4b, 0xfc, 0x70, 0xf2, 0x81, 0x85, 0x92, 0x8c, 0xec, 0xce, 0x55, 0xac, 0x8e, 0x27, 0xd4, 0xd4, 0x6e, 0xc3, 0x84, 0x6f, 0xd5, 0x1d, 0x0c, 0x5d, 0xbd, 0x94, 0x57, 0xab, 0x87, 0x58, 0xe7, 0xa2, 0xec, 0x8a, 0x6c, 0x04, 0x36, 0x9f, 0x95, 0x92, 0xb0, 0x06, 0x26, 0xd1, 0x5b, 0x0a, 0x4b, 0x0e, 0xe2, 0xf9, 0x2b, 0xa0, 0xd0, 0x86, 0xc1, 0x6d, 0x01, 0x6c, 0xe7, 0xb0, 0x56, 0x54, 0xb4, 0xf9, 0xad, 0xf9, 0x08, 0x75, 0x11, 0x8a, 0x65, 0x6f, 0x2d, 0x50, 0x01, 0x17, 0x07, 0x90, 0x19, 0x82, 0xeb, 0xb3, 0x87, 0xf3, 0xa4, 0xa4, 0x97, 0x59, 0xf3, 0x7a, 0x17, 0x18, 0x39, 0x57, 0xad, 0x0c, 0x77, 0x8f, 0x6e, 0xcb, 0x78, 0x0d, 0xab, 0x2b, 0x4d, 0xf3, 0x0e, 0x05, 0xfa, 0x81, 0xe6, 0x38, 0x6f, 0x38, 0xc0, 0xf0, 0xba, 0x3f, 0x37, 0x28, 0x7a, 0x05, 0x0d, 0x6d, 0x97, 0x28, 0x7a, 0xe5, 0x30, 0x96, 0xc3, 0x91, 0xd5, 0xf2, 0x0f, 0xcf, 0xf7, 0x39, 0x77, 0x23, 0x9c, 0xa5, 0x5c, 0x36, 0x57, 0xd1, 0xfd, 0x1f, 0x78, 0x1f, 0x48, 0xe2, 0x80, 0x57, 0xf1, 0x36, 0xd8, 0x90, 0xc2, 0x8c, 0xc2, 0x54, 0x32, 0x4c, 0x8f, 0xff, 0x38, 0x62, 0x13, 0x68, 0x61, 0xf9, 0x56, 0xc3, 0x21, 0x86, 0x8c, 0xc6, 0x66, 0x09, 0x47, 0x0b, 0x73, 0x90, 0xec, 0xb6, 0xec, 0xfc, 0x63, 0x57, 0x2d, 0x07, 0x13, 0x12, 0xe0, 0x86, 0x0e, 0xfd, 0xcf, 0xec, 0x88, 0xc9, 0xf6, 0x10, 0x8e, 0xa5, 0xdd, 0x30, 0xf5, 0x5f, 0x25, 0x35, 0x90, 0xcc, 0x60, 0x38, 0xa6, 0x6b, 0x26, 0x46, 0xa2, 0x45, 0x65, 0x60, 0x0d, 0x17, 0xf8, 0xc6, 0xba, 0xb3, 0x7b, 0x76, 0x40, 0xa4, 0x5e, 0xef, 0xad, 0x11, 0x39, 0x3a, 0x79, 0xe4, 0x5f, 0x2b, 0xb9, 0x2a, 0xb6, 0xe5, 0x95, 0xbd, 0xc6, 0x9c, 0xfc, 0x21, 0x0f, 0x9f, 0x97, 0xad, 0xa0, 0x95, 0xfb, 0xeb, 0xe5, 0x06, 0x22, 0x41, 0xc1, 0x1e, 0x1c, 0xd0, 0xdc, 0xae, 0x02, 0x9c, 0x3f, 0x74, 0x2c, 0xed, 0x1e, 0x9c, 0xa3, 0xf6, 0xf4, 0x86, 0xd9, 0xb5, 0xd6, 0xca, 0x98, 0x1a, 0x00, 0x7a, 0x39, 0x6b, 0xb5, 0xa7, 0x16, 0xe7, 0x46, 0x26, 0x42, 0xaa, 0x70, 0x93, 0x77, 0xd0, 0xea, 0x97, 0x4f, 0xdd, 0x3f, 0x67, 0xb7, 0x5d, 0xda, 0x8d, 0xa1, 0xc7, 0x5f, 0xeb, 0xfa, 0xa7, 0x42, 0xfd, 0xdc, 0xfc, 0x92, 0x5e, 0x04, 0xdf, 0x15, 0x8e, 0x86, 0x66, 0x9a, 0xf2, 0xbf, 0xc8, 0x8b, 0x1c, 0x8c, 0xc2, 0xc2, 0x4d, 0xb9, 0x39, 0x9d, 0x38, 0xbd, 0x20, 0x55, 0x09, 0xa4, 0x9c, 0x8b, 0xa6, 0x4c, 0x66, 0x24, 0x35, 0xd4, 0x72, 0x57, 0xde, 0x52, 0xce, 0x04, 0xd2, 0xc4, 0xcc, 0x48, 0x8c, 0x4a, 0x63, 0x4e, 0x57, 0x92, 0xd3, 0x68, 0x10, 0x93, 0x88, 0x5e, 0x2d, 0x7e, 0x41, 0x06, 0xfe, 0xf1, 0x71, 0x14, 0x33, 0x6e, 0xe5, 0x34, 0x9f, 0x0d, 0xa8, 0x56, 0x3b, 0x6d, 0x24, 0x49, 0x6e, 0xf0, 0x89, 0x8c, 0x8b, 0x28, 0x73, 0x61, 0x9c, 0x8c, 0xc7, 0x22, 0x5e, 0x70, 0xdd, 0xd8, 0x8c, 0x34, 0xe5, 0x0a, 0x60, 0xbb, 0x83, 0xd3, 0x58, 0x1e, 0xbd, 0x37, 0x36, 0xa2, 0x17, 0xb7, 0x4a, 0xe8, 0xfc, 0x23, 0xf3, 0x64, 0x60, 0xb0, 0x64, 0x10, 0xa4, 0x4b, 0xa4, 0x62, 0xba, 0x2c, 0xd8, 0x7b, 0x89, 0xad, 0xc5, 0xa1, 0x93, 0x5d, 0x91, 0xef, 0xd5, 0x50, 0xc9, 0x4b, 0xee, 0xba, 0xa9, 0x99, 0x84, 0xbc, 0x97, 0x2e, 0xe4, 0x7e, 0xf0, 0x88, 0xe8, 0x7e, 0x07, 0x3c, 0x1e, 0x28, 0x6b, 0x2f, 0x26, 0xa6, 0x69, 0x09, 0x5c, 0xf9, 0xd2, 0xe7, 0xb8, 0x49, 0xff, 0x51, 0xf2, 0x79, 0x11, 0x6b, 0xe9, 0xff, 0x7d, 0x6f, 0x45, 0xf3, 0xc9, 0x5a, 0x5b, 0x65, 0x90, 0xe6, 0x52, 0xf4, 0xcc, 0xb9, 0x84, 0x9c, 0x55, 0xdc, 0x27, 0xd0, 0xa4, 0x6e, 0x2d, 0xc9, 0xdd, 0x9a, 0x68, 0x1d, 0x0d, 0xc6, 0xf2, 0x93, 0xaf, 0x0d, 0xcc, 0x36, 0x76, 0xf0, 0xc5, 0xa8, 0x46, 0x48, 0x9e, 0xb9, 0x83, 0x7f, 0x6b, 0x38, 0x8f, 0x00, 0x3c, 0x0a, 0x8e, 0xec, 0xfd, 0x78, 0x6d, 0x0f, 0x9b, 0xcd, 0x22, 0x12, 0x69, 0x21, 0x35, 0xf2, 0xc1, 0x70, 0x7f, 0xb1, 0xee, 0xef, 0x32, 0x4b, 0x49, 0x9f, 0x19, 0xeb, 0xa3, 0x22, 0x21, 0x5f, 0xe3, 0xce, 0x19, 0xc9, 0xf0, 0x00, 0xb6, 0x98, 0xd2, 0xb2, 0xda, 0xb7, 0x14, 0x50, 0x15, 0x04, 0x6c, 0xc8, 0x6d, 0x04, 0x9e, 0xe1, 0x5a, 0xd5, 0x9d, 0xcd, 0x15, 0x64, 0xf3, 0x01, 0x12, 0xe0, 0x64, 0x44, 0xcb, 0x6e, 0xce, 0x06, 0xc0, 0x1e, 0x54, 0xf4, 0xbc, 0x1d, 0xbb, 0xc9, 0x59, 0x2d, 0x14, 0x67, 0xc6, 0x53, 0x9c, 0x26, 0xc8, 0xcf, 0xe0, 0x6c, 0xff, 0x51, 0x25, 0x7e, 0x6b, 0x6a, 0x06, 0x95, 0x2f, 0x41, 0x5f, 0x35, 0x94, 0x87, 0x6a, 0xba, 0x50, 0xad, 0x28, 0x34, 0x09, 0x54, 0x03, 0x74, 0x15, 0x05, 0xb1, 0x67, 0x84, 0x22, 0x5b, 0xa3, 0x60, 0x1c, 0xff, 0x40, 0x33, 0xe7, 0x13, 0xe9, 0xca, 0xab, 0x6b, 0x32, 0x39, 0xbd, 0x5c, 0x2c, 0x1f, 0xcd, 0x22, 0x38, 0x2b, 0x61, 0x7f, 0x18, 0xdf, 0x82, 0xa5, 0x4c, 0x94, 0xb4, 0x56, 0x9b, 0xbf, 0x2c, 0x4a, 0xf0, 0x72, 0x3e, 0xd1, 0x67, 0x26, 0x15, 0xb9, 0xa8, 0xb7, 0xa6, 0x72, 0x74, 0xb0, 0xe6, 0x70, 0x7d, 0xc9, 0x3b, 0xd1, 0x7b, 0xae, 0x31, 0x40, 0x7c, 0x02, 0x6f, 0x19, 0x7b, 0xa4, 0xe9, 0xcd, 0x35, 0x31, 0x57, 0x89, 0x38, 0xca, 0xe5, 0x12, 0x3d, 0x17, 0x2c, 0xf4, 0xb7, 0x8b, 0x61, 0xdb, 0xac, 0xea, 0xcc, 0x41, 0xc4, 0x09, 0x7c, 0x49, 0xa0, 0xd6, 0x3a, 0xeb, 0x6c, 0x97, 0xbb, 0x52, 0xb8, 0x77, 0x1a, 0x82, 0x83, 0x3e, 0x85, 0x3e, 0x99, 0x60, 0x36, 0x29, 0x20, 0x39, 0xa4, 0x2b, 0x6d, 0x97, 0xfb, 0x16, 0x1c, 0x79, 0xca, 0x8a, 0x5f, 0x16, 0xfc, 0x16, 0x96, 0x21, 0x0a, 0x9f, 0x20, 0x4c, 0x6f, 0x06, 0x71, 0x0b, 0x5b, 0x05, 0x65, 0x9a, 0xab, 0x5a, 0xd4, 0x41, 0x19, 0x28, 0x67, 0xd7, 0xb0, 0x9a, 0xaa, 0x85, 0x84, 0xc9, 0x62, 0xcc, 0x9f, 0xe0, 0x20, 0xc9, 0x3e, 0x7e, 0x16, 0xb8, 0x3e, 0x5b, 0x2a, 0xb8, 0xd1, 0x2f, 0x49, 0xcd, 0x75, 0xcf, 0xfe, 0x2b, 0x27, 0x99, 0x43, 0xb2, 0xd3, 0x13, 0x97, 0xb5, 0x10, 0xcf, 0x50, 0xff, 0x0a, 0x92, 0x33, 0x18, 0xbf, 0xb4, 0x42, 0xc4, 0x6f, 0xca, 0xd5, 0xcd, 0x4d, 0x83, 0xec, 0x02, 0x7b, 0xd0, 0xc4, 0x80, 0x35, 0x48, 0xa8, 0x30, 0x4d, 0xca, 0x0a, 0x91, 0xd7, 0x64, 0xd2, 0xb8, 0x25, 0x73, 0xf6, 0x95, 0xf6, 0x0c, 0x4b, 0x77, 0xea, 0x9b, 0x9b, 0xd2, 0x39, 0xca, 0xf7, 0x41, 0xa5, 0xa5, 0x4e, 0xc7, 0xad, 0xfb, 0x3f, 0x5a, 0x04, 0x07, 0x2c, 0xa2, 0x41, 0x4f, 0x90, 0xfe, 0xd8, 0xcd, 0x92, 0xc8, 0x49, 0x4d, 0xda, 0xda, 0x97, 0x16, 0xa3, 0x50, 0xfc, 0xcc, 0x11, 0x90, 0xdb, 0x95, 0xc5, 0x88, 0xf6, 0x7b, 0xb0, 0x37, 0xe1, 0x12, 0x24, 0x6f, 0xb7, 0x5a, 0x31, 0xd9, 0x0b, 0xe6, 0x2e, 0x39, 0x21, 0x3e, 0x96, 0xf3, 0x5e, 0x83, 0x16, 0xcf, 0xfe, 0x51, 0xe3, 0xf9, 0x05, 0xe9, 0x51, 0x4c, 0x78, 0x90, 0xa2, 0xcf, 0xcc, 0x32, 0x1b, 0x80, 0x9f, 0x4b, 0x5e, 0x51, 0xa6, 0x08, 0xf3, 0x71, 0xe7, 0xa9, 0x28, 0xcc, 0x28, 0x29, 0x1b, 0xd5, 0xa7, 0x21, 0x15, 0x83, 0x0b, 0xea, 0x19, 0x99, 0x9b, 0x01, 0xbd, 0x2b, 0xae, 0xb0, 0x39, 0x5e, 0x62, 0xeb, 0xbe, 0x6f, 0x91, 0x79, 0x09, 0xf7, 0x01, 0x54, 0x37, 0x6d, 0xdb, 0x51, 0xdb, 0xec, 0x5f, 0x03, 0x4e, 0x36, 0xd5, 0xdd, 0x46, 0xfa, 0xc7, 0x98, 0xaa, 0x52, 0x6d, 0xd4, 0xa5, 0x90, 0x69, 0x02, 0xfa, 0x3a, 0xb5, 0x81, 0x97, 0x53, 0xd9, 0x07, 0x6c, 0xdc, 0x61, 0x43, 0x7d, 0x9b, 0x8e, 0xc1, 0x36, 0x1b, 0x4c, 0x0d, 0xff, 0xf4, 0x64, 0x1b, 0x11, 0x4c, 0xf3, 0xe6, 0x88, 0x9e, 0x1b, 0x58, 0xb9, 0xbb, 0xf8, 0x6a, 0xc5, 0x0e, 0xd5, 0x8c, 0x6f, 0x23, 0xa0, 0x47, 0x2a, 0x6b, 0x9c, 0x21, 0x76, 0x39, 0x56, 0xc1, 0x6d, 0x11, 0xda, 0x53, 0x99, 0x22, 0x26, 0x2e, 0x09, 0x11, 0xdf, 0xb4, 0xa4, 0xf8, 0x43, 0x7a, 0xbd, 0xaf, 0x5f, 0xaa, 0xe7, 0x4a, 0x82, 0xa5, 0x0a, 0xe2, 0xf1, 0xec, 0xb6, 0x99, 0xdc, 0x40, 0xb8, 0xd8, 0x91, 0x08, 0xeb, 0xdb, 0xf0, 0xf4, 0x51, 0x70, 0x1f, 0xe0, 0x62, 0xfb, 0x7f, 0xfb, 0xa4, 0xbe, 0xde, 0x28, 0x7c, 0x57, 0xee, 0xa4, 0x44, 0x8a, 0xf5, 0xe9, 0x9d, 0x41, 0xc7, 0xd3, 0x07, 0xd1, 0xf2, 0x02, 0xaf, 0x7f, 0x38, 0x7f, 0x87, 0x43, 0x42, 0xa2, 0x9c, 0xcc, 0x92, 0x33, 0xa5, 0xc3, 0xba, 0xcf, 0xd7, 0x54, 0xcb, 0x8d, 0x01, 0xeb, 0x11, 0xe2, 0xd4, 0x3b, 0xfd, 0xc2, 0x82, 0x85, 0x63, 0x08, 0x8c, 0x17, 0xe6, 0x18, 0xd4, 0x13, 0xb0, 0xc3, 0xfa, 0x71, 0x66, 0x6b, 0xe5, 0x47, 0x5a, 0x67, 0xa0, 0x48, 0x03, 0xa8, 0x68, 0x8b, 0xab, 0x9d, 0x03, 0x8f, 0x68, 0x55, 0x53, 0x7b, 0x4d, 0xe4, 0x2a, 0xaa, 0xe1, 0x07, 0x60, 0x66, 0xd0, 0x0b, 0x23, 0xf4, 0xe1, 0xea, 0x8f, 0xd2, 0x28, 0xb8, 0x7e, 0x3c, 0x7d, 0x3d, 0xa2, 0xf4, 0x2d, 0xe4, 0xd1, 0x43, 0xef, 0xd4, 0x9f, 0x3b, 0x19, 0x5c, 0x32, 0x40, 0x13, 0x94, 0x52, 0xc7, 0x0c, 0x41, 0xc0, 0x5c, 0xed, 0xfa, 0xc9, 0xea, 0x8b, 0x89, 0x1a, 0x37, 0x21, 0x94, 0xd6, 0xae, 0xfd, 0x7d, 0xe6, 0x61, 0x79, 0x86, 0x91, 0x4e, 0x2d, 0x39, 0x4c, 0xe1, 0x63, 0x07, 0xd3, 0xbb, 0xcb, 0x2f, 0x78, 0xb2, 0x71, 0xe1, 0xbb, 0x19, 0xeb, 0xa3, 0x1c, 0x41, 0xd7, 0xf5, 0x2d, 0x3f, 0x85, 0x30, 0xeb, 0xf0, 0xf0, 0xb4, 0x4e, 0x3b, 0xf3, 0x42, 0x1f, 0x96, 0xb9, 0xa7, 0x0a, 0xcc, 0x76, 0x9b, 0xf4, 0xfd, 0x54, 0xe8, 0x8f, 0xe6, 0xb1, 0xcf, 0x2b, 0x62, 0x87, 0xa7, 0xcf, 0x31, 0x2b, 0xc7, 0x88, 0xf9, 0x3b, 0xa6, 0x01, 0x8a, 0xd1, 0x41, 0x54, 0x66, 0xfd, 0xbd, 0x20, 0x81, 0x73, 0x4e, 0xdc, 0x45, 0x80, 0x57, 0x6a, 0xd9, 0x43, 0xd3, 0xef, 0xa3, 0x19, 0xf3, 0xe3, 0x0c, 0x59, 0x08, 0x64, 0x83, 0x42, 0xa4, 0xd0, 0xc4, 0x31, 0xfc, 0x92, 0x5a, 0x17, 0x91, 0x3c, 0x62, 0x2b, 0x10, 0xd7, 0x93, 0xdc, 0x76, 0x76, 0x7b, 0x0a, 0x77, 0x12, 0x0b, 0x75, 0x21, 0x91, 0x56, 0x76, 0xbd, 0x28, 0x96, 0xed, 0xf6, 0xe3, 0x70, 0x7a, 0x3d, 0x82, 0x79, 0xf0, 0x6b, 0x87, 0xf8, 0x06, 0xa8, 0x8d, 0xee, 0x50, 0x8c, 0xdb, 0x53, 0x6e, 0x85, 0x39, 0xa3, 0x84, 0x79, 0x03, 0x99, 0xea, 0xac, 0x7b, 0x3a, 0x24, 0xe3, 0x63, 0x16, 0x14, 0xca, 0xcc, 0xcb, 0x6e, 0x93, 0x29, 0xca, 0x6d, 0xe0, 0xa7, 0x5e, 0xc4, 0xe3, 0xc1, 0xea, 0xd8, 0xc3, 0x0e, 0x72, 0x2c, 0x42, 0x5e, 0x5c, 0x1c, 0x9e, 0x06, 0x78, 0xcf, 0xb4, 0x78, 0x3f, 0x67, 0x6b, 0x17, 0x58, 0x7a, 0x50, 0x49, 0x61, 0xc6, 0x7e, 0xcd, 0xeb, 0x20, 0xc1, 0x4f, 0xc6, 0xae, 0xfb, 0x39, 0x80, 0x56, 0xc6, 0xcd, 0x28, 0x76, 0x5a, 0x71, 0x57, 0xd6, 0xb2, 0x49, 0x72, 0xdb, 0xea, 0x0b, 0x29, 0xfd, 0xec, 0x0f, 0x43, 0x7a, 0x4b, 0xa6, 0x9e, 0x4c, 0x6f, 0xad, 0x71, 0x59, 0xf3, 0x62, 0xd5, 0xeb, 0x4b, 0x76, 0x84, 0x5f, 0xaa, 0x63, 0xe0, 0x21, 0x22, 0xff, 0x37, 0xd8, 0x0e, 0x51, 0x45, 0xdd, 0xad, 0xa4, 0xfa, 0xf2, 0x0f, 0xdb, 0x7e, 0x31, 0x35, 0x04, 0x73, 0x42, 0x74, 0x30, 0x7a, 0xd1, 0x1a, 0x81, 0xf8, 0x3f, 0x54, 0x84, 0x1a, 0x98, 0x4f, 0xc1, 0x16, 0xc6, 0x9e, 0x91, 0xb4, 0x04, 0xdc, 0x30, 0x0e, 0x95, 0x92, 0x13, 0x93, 0xb5, 0x5a, 0x7c, 0x52, 0xd0, 0x45, 0x4b, 0x76, 0xf2, 0x7b, 0x17, 0x0c, 0x7f, 0x21, 0x7d, 0x0d, 0x24, 0x80, 0xb8, 0x98, 0x0d, 0x63, 0x72, 0x7f, 0x58, 0xc0, 0xda, 0x05, 0xca, 0x9b, 0xf7, 0xe6, 0xc1, 0x28, 0x3c, 0x98, 0x6a, 0x30, 0x5c, 0xd1, 0x34, 0xb5, 0x60, 0x49, 0x85, 0xd9, 0xf6, 0xc1, 0xab, 0xfc, 0x0c, 0x44, 0x15, 0x25, 0x9d, 0xad, 0xc3, 0xa3, 0xcb, 0x69, 0xfb, 0xf4, 0x2f, 0x7e, 0x3e, 0xe5, 0x6d, 0xcc, 0x7a, 0xfb, 0x0b, 0x93, 0x81, 0x12, 0x83, 0x36, 0xba, 0x44, 0x96, 0x3f, 0x16, 0x0c, 0xe4, 0xa2, 0x46, 0xab, 0xba, 0x46, 0x2c, 0xcb, 0x2b, 0xc1, 0x8f, 0x63, 0x62, 0x64, 0x12, 0xda, 0x36, 0x77, 0x67, 0x6f, 0xff, 0xc5, 0xc0, 0xd8, 0xa8, 0x5c, 0x86, 0x29, 0x06, 0x8e, 0x4e, 0xf8, 0x68, 0x3b, 0x09, 0xbf, 0x70, 0x53, 0x7a, 0x81, 0x21, 0x96, 0xee, 0xb1, 0x38, 0x9e, 0x27, 0x4f, 0xc0, 0x20, 0x99, 0x54, 0xe1, 0x6f, 0xd9, 0x50, 0xf9, 0x41, 0x52, 0x52, 0xee, 0xb6, 0x3a, 0x08, 0xc2, 0x96, 0xc4, 0x27, 0x67, 0xda, 0x97, 0x0d, 0xd5, 0x6f, 0x80, 0xa6, 0x5b, 0x36, 0x63, 0x8c, 0x32, 0x4f, 0x78, 0x72, 0x58, 0x97, 0xb3, 0xc2, 0x9b, 0x6f, 0x84, 0x85, 0xf4, 0xc0, 0xc1, 0x84, 0x17, 0x3c, 0xe1, 0xac, 0x48, 0xe6, 0x6a, 0xb7, 0x70, 0xd4, 0xac, 0x09, 0x70, 0x33, 0xb0, 0xd8, 0xb5, 0x8d, 0x6c, 0x90, 0x0d, 0x47, 0x38, 0x76, 0xb9, 0x6e, 0x86, 0x8b, 0xc3, 0xb3, 0xcd, 0xb3, 0x92, 0xb3, 0xc6, 0x16, 0xbb, 0x7c, 0xdb, 0xc7, 0x1a, 0x4d, 0xdd, 0xa4, 0x22, 0x9e, 0xf5, 0x7d, 0x71, 0x60, 0xdd, 0x78, 0xa7, 0x86, 0x4f, 0xb3, 0x79, 0xc4, 0xbe, 0x2c, 0x01, 0x97, 0x45, 0xde, 0x58, 0x85, 0xdd, 0x2d, 0x67, 0xa6, 0xd2, 0x84, 0xfa, 0x63, 0x78, 0x3d, 0x16, 0x7e, 0x1a, 0xc1, 0x8d, 0x53, 0x33, 0xf0, 0xcf, 0x5d, 0xe0, 0xc3, 0x03, 0xfb, 0x96, 0x2f, 0x57, 0x74, 0x10, 0x4d, 0x94, 0x39, 0x8c, 0xb9, 0xf5, 0x6b, 0x37, 0x38, 0x39, 0x9d, 0xe6, 0x9d, 0xf7, 0xdb, 0x06, 0xed, 0x32, 0xeb, 0xd6, 0xc1, 0x2d, 0xd2, 0xd4, 0xec, 0x80, 0x9b, 0x74, 0x5e, 0x6c, 0x53, 0x18, 0x48, 0x6c, 0x58, 0x3d, 0x81, 0x0c, 0xd4, 0xf2, 0x29, 0xfe, 0x84, 0x8f, 0x8c, 0x6b, 0xbe, 0xa3, 0x48, 0x87, 0xb2, 0x2e, 0xb3, 0x68, 0xf0, 0x11, 0x77, 0x18, 0x2a, 0xc2, 0x7f, 0xe9, 0x3b, 0x44, 0x17, 0x08, 0x69, 0x57, 0x4e, 0x55, 0xe7, 0xec, 0x9f, 0x72, 0x9e, 0xdb, 0xd1, 0x1a, 0x2e, 0xd8, 0x1c, 0xb5, 0x2f, 0xa4, 0x8d, 0x29, 0xbc, 0x80, 0xac, 0xf2, 0x32, 0xe7, 0x5b, 0x75, 0x35, 0x7c, 0x01, 0x91, 0xf4, 0x42, 0xe8, 0x78, 0xae, 0x0b, 0xe4, 0xbd, 0x76, 0x33, 0x36, 0xae, 0x33, 0x8d, 0xaf, 0xe3, 0xea, 0x9e, 0x19, 0x17, 0x40, 0x09, 0xd2, 0x37, 0x3a, 0x4b, 0xba, 0xb9, 0x48, 0xa8, 0x4f, 0x2f, 0x82, 0x65, 0x17, 0x1c, 0x31, 0x38, 0x3f, 0x06, 0x91, 0xfd, 0x81, 0xcc, 0xd5, 0xaa, 0x4b, 0x3a, 0x6c, 0x85, 0x1d, 0xdb, 0x83, 0x95, 0x32, 0x0e, 0xcb, 0x56, 0x64, 0x5c, 0x7c, 0xb1, 0x4a, 0x09, 0x9a, 0x2a, 0xa3, 0xe9, 0x77, 0x5c, 0xf7, 0x75, 0x79, 0xa2, 0x7b, 0x1e, 0x1d, 0x18, 0x36, 0xe2, 0x3c, 0xc2, 0x62, 0x1c, 0x8d, 0x0a, 0x15, 0xa0, 0x6c, 0x70, 0x20, 0x07, 0xd9, 0x7d, 0x37, 0x48, 0xc4, 0xf8, 0x53, 0x89, 0x88, 0x5d, 0x55, 0x34, 0xb5, 0x8b, 0xec, 0x4c, 0x12, 0xbd, 0xb8, 0x02, 0xe2, 0xbb, 0xb0, 0x83, 0x67, 0x52, 0xc1, 0x15, 0xa5, 0x01, 0xb7, 0x62, 0x68, 0xf5, 0x61, 0x13, 0x88, 0x38, 0xf0, 0xa1, 0x6c, 0x25, 0xa1, 0x68, 0xcd, 0x1f, 0x9c, 0xfe, 0xbc, 0x82, 0x1b, 0xc2, 0xe7, 0xda, 0xce, 0xb8, 0x18, 0x53, 0x7f, 0x94, 0xfe, 0x71, 0xf2, 0x14, 0x30, 0x01, 0x0f, 0x93, 0x6f, 0x50, 0x42, 0xdc, 0x2b, 0x9a, 0x23, 0x3c, 0x49, 0xc5, 0x52, 0xdb, 0x24, 0x4f, 0xa5, 0x4b, 0xd2, 0x86, 0x86, 0x62, 0xa8, 0xf7, 0x96, 0x45, 0x00, 0x28, 0x97, 0xc6, 0x39, 0x8a, 0x88, 0xf0, 0x00, 0xa9, 0x11, 0xdf, 0xce, 0xa6, 0x22, 0xd6, 0xb2, 0xe7, 0xd8, 0x8b, 0x51, 0x0d, 0xa0, 0xc5, 0x2b, 0x26, 0x9e, 0x29, 0x20, 0x24, 0x50, 0x51, 0x32, 0x8f, 0x6e, 0x1f, 0x8c, 0x76, 0x15, 0x51, 0xc4, 0xab, 0x25, 0x55, 0x5d, 0x30, 0xe8, 0x5e, 0x90, 0xec, 0xf4, 0xb7, 0x4b, 0xa2, 0x52, 0x58, 0x7b, 0x24, 0xdf, 0xb7, 0x87, 0xc4, 0xf3, 0xe0, 0x1c, 0x0c, 0x41, 0xc8, 0x30, 0xaf, 0xfe, 0xde, 0x41, 0xbe, 0x46, 0xe4, 0xde, 0x1f, 0xbb, 0xfd, 0x69, 0x3c, 0x6f, 0x07, 0x1b, 0xf8, 0x04, 0x2a, 0x48, 0xe7, 0x11, 0xb1, 0xe5, 0xbe, 0xc8, 0x19, 0x47, 0x08, 0xd6, 0x68, 0x2d, 0x1b, 0x8b, 0xc1, 0x01, 0x4b, 0x3b, 0x34, 0x5b, 0x5d, 0xe4, 0xda, 0xc7, 0x3f, 0x10, 0x22, 0xc8, 0xf6, 0xfd, 0x66, 0x1d, 0xd7, 0xfc, 0xc2, 0x42, 0xfa, 0x17, 0x25, 0x3a, 0xec, 0xf6, 0xa8, 0x8c, 0xa4, 0x04, 0x1f, 0x8c, 0xb8, 0xcd, 0xee, 0xdb, 0xd1, 0xaa, 0x1f, 0x31, 0x5d, 0xa1, 0xb1, 0x5a, 0x83, 0x87, 0x32, 0x7f, 0x5c, 0x67, 0x90, 0xa7, 0x60, 0x28, 0x2c, 0x7d, 0x1e, 0x69, 0x30, 0x54, 0x31, 0xb0, 0x23, 0x68, 0x6f, 0xc4, 0xba, 0x67, 0x63, 0x57, 0xf1, 0x30, 0xfe, 0xe8, 0x5b, 0xda, 0x89, 0xe8, 0xb6, 0xf8, 0xde, 0x1c, 0xc3, 0x1b, 0xd8, 0x42, 0x55, 0x99, 0x08, 0xf7, 0xa7, 0x8d, 0xa9, 0xd8, 0xf2, 0x1f, 0xd6, 0xe8, 0x3f, 0x06, 0xfb, 0x32, 0x7a, 0x4b, 0x8a, 0xaf, 0xc9, 0x4f, 0xef, 0x69, 0x1c, 0x0f, 0xc5, 0xe1, 0x04, 0xa7, 0x4a, 0xae, 0xc8, 0x15, 0x10, 0x68, 0xb6, 0x40, 0xf6, 0xc4, 0xb7, 0x39, 0x57, 0x00, 0x26, 0xc0, 0x81, 0x82, 0xe2, 0x0a, 0x69, 0xbc, 0xa2, 0xc1, 0x9d, 0x52, 0x89, 0x4d, 0x79, 0x7f, 0xfb, 0x52, 0x9e, 0xb5, 0xae, 0x79, 0xa0, 0x83, 0x04, 0x74, 0xff, 0xbc, 0x98, 0x3c, 0x59, 0xd6, 0x16, 0x9d, 0xdd, 0x90, 0x51, 0xf5, 0x03, 0xd7, 0x8f, 0x39, 0x7a, 0xeb, 0x27, 0x38, 0x62, 0xbe, 0x4f, 0x24, 0xbc, 0x9d, 0x2f, 0x4e, 0x1f, 0x11, 0x3a, 0x31, 0xac, 0x08, 0xbd, 0xb2, 0x44, 0x30, 0xb8, 0xa6, 0xf8, 0xa4, 0xee, 0x95, 0xc0, 0xca, 0x38, 0xbd, 0x70, 0x7b, 0x1e, 0x5a, 0xe9, 0x65, 0xa8, 0x25, 0x8c, 0xae, 0x72, 0x1b, 0xf5, 0xda, 0xff, 0x7f, 0xe5, 0xef, 0x4f, 0x22, 0x7f, 0xd7, 0xb4, 0xe2, 0xb8, 0x05, 0xe1, 0x71, 0x09, 0x5c, 0x44, 0x58, 0x66, 0x4c, 0x96, 0x3b, 0x74, 0x3e, 0xb0, 0x5e, 0xf7, 0x32, 0xa0, 0x68, 0x89, 0xa6, 0xfc, 0x67, 0x92, 0xba, 0x76, 0x15, 0x74, 0x93, 0xb1, 0x5a, 0x06, 0xfd, 0x53, 0x11, 0x44, 0x54, 0x5c, 0x0f, 0x45, 0xa4, 0xb6, 0x61, 0x6d, 0x0f, 0x0c, 0xd6, 0xe3, 0x6f, 0xe0, 0xbe, 0x45, 0x3d, 0xd8, 0xf0, 0x9b, 0xb2, 0x59, 0x12, 0x8a, 0x2b, 0x57, 0x14, 0xcb, 0xd2, 0x6c, 0xfe, 0xdb, 0x7b, 0x27, 0xec, 0xf3, 0xcc, 0xa6, 0x56, 0x3a, 0xa1, 0x67, 0x95, 0x3a, 0xae, 0x5b, 0xa3, 0x90, 0x67, 0x3c, 0x23, 0xe8, 0x1c, 0x21, 0xa1, 0x29, 0x69, 0x50, 0x1a, 0xed, 0xcd, 0x53, 0xbf, 0x34, 0x99, 0x4e, 0xf6, 0x59, 0x0c, 0x8f, 0xa2, 0x45, 0xbc, 0x67, 0xa4, 0xe2, 0x37, 0x38, 0xa2, 0xd2, 0xeb, 0xd0, 0x06, 0x62, 0x43, 0xf5, 0x4a, 0xb9, 0x13, 0x41, 0x74, 0x56, 0x36, 0x31, 0xdc, 0xb9, 0x76, 0x78, 0x35, 0x5f, 0xab, 0x99, 0xcb, 0xf4, 0x27, 0xb4, 0x0a, 0xc5, 0x52, 0xa0, 0x40, 0x74, 0x92, 0x3b, 0xa4, 0xef, 0x6e, 0xfe, 0x96, 0xa2, 0xf2, 0xd5, 0x28, 0xec, 0x55, 0x2d, 0xde, 0xd0, 0xd9, 0x4e, 0xb2, 0xee, 0xf3, 0xeb, 0x5b, 0xb1, 0xac, 0xf7, 0xcf, 0xc9, 0x47, 0xbb, 0x07, 0xdc, 0x24, 0x26, 0x02, 0x78, 0xe4, 0x64, 0x0c, 0x4d, 0xce, 0xb2, 0x40, 0x99, 0x71, 0x70, 0x4c, 0xe3, 0x8b, 0x77, 0x74, 0xec, 0x2a, 0xae, 0xda, 0xe3, 0x11, 0xd8, 0xfc, 0xd8, 0x5d, 0xb0, 0x7e, 0x73, 0x69, 0x38, 0x2a, 0xe6, 0xee, 0x4e, 0x35, 0x20, 0x6f, 0x80, 0xc3, 0x43, 0xd4, 0x21, 0xae, 0x59, 0x55, 0x9c, 0x83, 0x43, 0x99, 0x09, 0xce, 0xf1, 0x1f, 0xfe, 0x98, 0xd9, 0xde, 0xa8, 0x2d, 0xa1, 0x28, 0x1a, 0x23, 0x1f, 0xd4, 0xe4, 0x97, 0x84, 0x9c, 0xe8, 0xba, 0xd4, 0xc4, 0x69, 0x8d, 0x9a, 0xfd, 0x65, 0xe8, 0xd9, 0x88, 0x25, 0xc1, 0x45, 0x9e, 0x12, 0xab, 0xb3, 0x10, 0xca, 0x9d, 0xcf, 0x2b, 0x73, 0xf5, 0x0d, 0xde, 0x50, 0xbc, 0xe2, 0x1f, 0x91, 0x2c, 0x33, 0x8a, 0x70, 0x6f, 0x0e, 0x4b, 0x79, 0xaa, 0x98, 0x3f, 0x29, 0x3a, 0x46, 0x56, 0xbb, 0x3e, 0x50, 0x3c, 0x3f, 0x55, 0x63, 0x38, 0xec, 0xa9, 0x97, 0x54, 0xb7, 0x2c, 0xa0, 0xbe, 0x25, 0x21, 0x48, 0x6e, 0x5d, 0xdf, 0x1d, 0x09, 0x81, 0xd1, 0x66, 0x05, 0x3e, 0xc2, 0x5c, 0x0f, 0xa2, 0x57, 0x97, 0xa9, 0x2e, 0xdd, 0xc7, 0x18, 0x2d, 0x45, 0xa4, 0x7d, 0x44, 0x6d, 0x28, 0x42, 0x49, 0xa2, 0xfb, 0xb7, 0x58, 0x62, 0x2f, 0xfd, 0x24, 0x66, 0x2d, 0x24, 0x8c, 0xe0, 0xef, 0x90, 0x6f, 0x01, 0x70, 0xa1, 0xc0, 0xbe, 0x61, 0x93, 0xdd, 0xd4, 0x1e, 0xa2, 0x1c, 0x09, 0xe0, 0x72, 0xa7, 0xb5, 0x34, 0xaf, 0x8b, 0x82, 0xac, 0xf0, 0x0b, 0x70, 0xd4, 0xe2, 0x3a, 0x1c, 0x67, 0xa2, 0xc9, 0x41, 0xc3, 0x6a, 0x1d, 0x7f, 0x9b, 0x70, 0xa4, 0x5b, 0xec, 0x0b, 0x6a, 0x88, 0x32, 0x18, 0xe7, 0x65, 0xdb, 0x9c, 0x1c, 0xc6, 0xfc, 0xab, 0xde, 0xf7, 0x43, 0x88, 0x71, 0xfe, 0x2d, 0x0d, 0x58, 0x21, 0x78, 0x4d, 0x6c, 0xa8, 0xdc, 0x79, 0x2c, 0xe4, 0xf6, 0x00, 0x54, 0x70, 0x85, 0xfa, 0xb1, 0xb7, 0xd8, 0xc7, 0x33, 0xb6, 0x87, 0xf3, 0x44, 0x04, 0x62, 0x5d, 0x58, 0x0f, 0xa7, 0x99, 0xc5, 0xa8, 0x78, 0x92, 0xd6, 0xc2, 0x8b, 0x74, 0x1a, 0x76, 0x24, 0xc9, 0x02, 0x4b, 0x40, 0xe2, 0xab, 0xb5, 0x13, 0x78, 0xf9, 0xdb, 0xb5, 0x93, 0xe5, 0x9d, 0x19, 0xab, 0x18, 0xd6, 0x3e, 0x0d, 0xb8, 0xde, 0xa9, 0x81, 0x82, 0x54, 0x12, 0x2a, 0x19, 0x1a, 0x5e, 0xad, 0x9d, 0xa0, 0xcd, 0x96, 0x80, 0x66, 0x75, 0xf7, 0x95, 0xbc, 0xef, 0x51, 0x6a, 0xcd, 0x50, 0xb8, 0xd8, 0xdb, 0x5a, 0x33, 0xd8, 0xcc, 0xf4, 0x62, 0x98, 0xe6, 0xd8, 0x63, 0xcf, 0xd7, 0x8c, 0xf5, 0x4d, 0xf8, 0x93, 0xde, 0xd6, 0xd2, 0xe4, 0x8b, 0x30, 0xe2, 0x9b, 0xf7, 0x7b, 0x99, 0xef, 0xce, 0xc1, 0xa7, 0x64, 0xd1, 0xce, 0x79, 0x41, 0x7c, 0x42, 0x00, 0x45, 0xe6, 0xe4, 0xb5, 0x96, 0xea, 0x39, 0xda, 0xfa, 0x84, 0x56, 0x02, 0x49, 0x7d, 0xf2, 0xd3, 0x23, 0x4b, 0xbf, 0x0b, 0xde, 0x33, 0xfb, 0xc1, 0xc2, 0xb0, 0x41, 0xee, 0x79, 0x18, 0xa6, 0x2b, 0xc1, 0x7d, 0x01, 0xbc, 0x64, 0xd1, 0x8a, 0xce, 0x6a, 0x4e, 0xa7, 0xfd, 0x8d, 0x15, 0x02, 0x19, 0xed, 0x16, 0xdf ],
+const [ 0xe0, 0x22, 0x1d, 0x19, 0xcf, 0x61, 0x7e, 0xd8, 0x27, 0xd8, 0xd8, 0xcb, 0x8d, 0x2c, 0x8e, 0xd8, 0x1b, 0x9b, 0x33, 0x54, 0xa8, 0x32, 0xf1, 0xd1, 0x4a, 0x40, 0x2b, 0x37, 0x1a, 0x0a, 0x61, 0x17, 0x37, 0xc0, 0x54, 0x3b, 0x0e, 0xb0, 0x6b, 0x82, 0xd8, 0xba, 0x56, 0xeb, 0x63, 0x04, 0xf1, 0xef, 0x16, 0xef, 0x6b, 0x14, 0x30, 0x49, 0xa7, 0xbf, 0x50, 0xc4, 0xe2, 0x49, 0x3a, 0xa6, 0x97, 0x56, 0xd8, 0xc3, 0x9f, 0x62, 0x7f, 0xa8, 0x9d, 0x9d, 0x74, 0x1a, 0x99, 0xf9, 0xaf, 0xbf, 0xeb, 0x81, 0xde, 0x1a, 0x5b, 0xec, 0xad, 0xbd, 0x86, 0x72, 0x45, 0xb9, 0x84, 0xde, 0x12, 0x5a, 0xc7, 0xe5, 0xca, 0x11, 0x46, 0xb6, 0xab, 0xb2, 0xdb, 0xd2, 0x04, 0xdf, 0xea, 0x1e, 0xf6, 0xc4, 0x44, 0x36, 0x7c, 0x06, 0x4b, 0x05, 0xa9, 0xf5, 0x56, 0x93, 0x31, 0x09, 0x57, 0x1d, 0x2b, 0x8c, 0xbb, 0x6b, 0x15, 0x94, 0x91, 0x5e, 0x19, 0x34, 0xef, 0xc9, 0x8e, 0xf3, 0x91, 0x81, 0xc2, 0x7d, 0xc4, 0xb8, 0xf7, 0x99, 0x82, 0x86, 0xab, 0x5b, 0xdf, 0xc9, 0x1d, 0x9b, 0xa4, 0x2f, 0x0c, 0xa6, 0x39, 0x91, 0xc2, 0x32, 0xc8, 0x83, 0x51, 0x98, 0x9f, 0x29, 0x1d, 0x3d, 0xd6, 0x4c, 0x9a, 0x51, 0x32, 0xac, 0x57, 0xbd, 0x4a, 0x98, 0x3c, 0x56, 0xe8, 0xbd, 0x10, 0x57, 0xb2, 0x3c, 0x3d, 0x0e, 0x0a, 0xff, 0xd8, 0xd5, 0x32, 0x4c, 0xdc, 0x44, 0xb4, 0x9a, 0xb6, 0xa5, 0x01, 0xa4, 0x07, 0xa8, 0x58, 0xbd, 0xa5, 0x59, 0xe9, 0x63, 0xe3, 0x4e, 0x3b, 0x16, 0x12, 0x25, 0xcb, 0x6b, 0x47, 0x2e, 0xf6, 0x5c, 0x5f, 0x64, 0x18, 0xe2, 0x41, 0xa2, 0xf6, 0xc6, 0x63, 0x13, 0x59, 0xb3, 0x90, 0xeb, 0xfc, 0x91, 0xe8, 0x54, 0xa8, 0x0e, 0x28, 0xab, 0x9e, 0x7d, 0x2b, 0xed, 0x35, 0xe4, 0xb1, 0x6c, 0xc4, 0x50, 0x60, 0xc7, 0xc2, 0x6c, 0x08, 0x18, 0x2c, 0x52, 0x2b, 0x6f, 0x27, 0xa1, 0xbd, 0x80, 0xe7, 0xd0, 0x28, 0x98, 0xcf, 0xc2, 0x93, 0xd6, 0xda, 0x9a, 0x64, 0x97, 0x39, 0xd0, 0x03, 0x32, 0x3e, 0x85, 0xe1, 0xe6, 0x78, 0x13, 0xba, 0x10, 0x20, 0xe9, 0x17, 0xa1, 0xb3, 0x96, 0x16, 0xd0, 0xe1, 0x23, 0x6d, 0x0c, 0xa6, 0xa6, 0xad, 0x35, 0xb7, 0x14, 0xc4, 0x0b, 0x1f, 0x57, 0xc6, 0xe7, 0x2a, 0xa0, 0xed, 0xa9, 0x82, 0xff, 0xde, 0xf1, 0x98, 0x31, 0x2d, 0x92, 0x45, 0xb9, 0x24, 0x43, 0xb2, 0x32, 0xc0, 0x98, 0x75, 0xe3, 0xfd, 0x31, 0xfc, 0x94, 0x53, 0x32, 0x2f, 0xa0, 0x81, 0xf2, 0x51, 0x4c, 0x89, 0xf8, 0x27, 0x57, 0xfc, 0x23, 0x5d, 0xd2, 0x77, 0x28, 0x25, 0x32, 0x6e, 0x42, 0x21, 0xa4, 0x28, 0x24, 0x83, 0xa0, 0x0b, 0x33, 0x73, 0xc1, 0x1a, 0xf2, 0xb1, 0xd4, 0xbc, 0xbd, 0x7b, 0x2f, 0xbf, 0xbb, 0xb1, 0x44, 0x9c, 0x0e, 0x37, 0x75, 0xfd, 0x4c, 0x9b, 0x2a, 0x7c, 0x33, 0xf7, 0x21, 0xae, 0x98, 0x19, 0x06, 0x60, 0xa1, 0xe2, 0x44, 0x20, 0x34, 0xec, 0x1a, 0x00, 0xaf, 0x6f, 0xf1, 0x96, 0xda, 0x66, 0xed, 0x47, 0x1a, 0xed, 0xc2, 0xc6, 0xe7, 0xee, 0xc9, 0xd7, 0x7f, 0xfc, 0x53, 0x59, 0xdc, 0x7f, 0x3d, 0x83, 0xe4, 0x12, 0xc4, 0x6e, 0xe1, 0x29, 0x9b, 0xd3, 0x30, 0xf7, 0x3b, 0x17, 0x3d, 0x8f, 0x7b, 0x84, 0xaf, 0x49, 0x60, 0xda, 0xdf, 0x67, 0x36, 0x06, 0x8f, 0xf8, 0xdf, 0x31, 0xd9, 0xfd, 0x6c, 0xfc, 0x65, 0xcb, 0xea, 0x0a, 0xdf, 0xb0, 0x7e, 0xc0, 0xa8, 0xd9, 0xb5, 0x48, 0xcc, 0x73, 0x15, 0xdc, 0x35, 0x11, 0xf8, 0x41, 0x1e, 0x4e, 0x9a, 0x91, 0xca, 0xb3, 0x70, 0x3e, 0x75, 0xdb, 0xbb, 0x54, 0x8b, 0xd4, 0x5e, 0xfe, 0x18, 0xc9, 0xec, 0x4c, 0x7f, 0xde, 0x06, 0x33, 0x70, 0x5c, 0xe4, 0xd6, 0x14, 0x0e, 0x31, 0x03, 0x8a, 0xeb, 0x1c, 0x01, 0x97, 0xf4, 0xac, 0x89, 0x99, 0x60, 0x53, 0x12, 0xbd, 0xf7, 0xc7, 0x52, 0x72, 0xbc, 0x0d, 0x01, 0x1e, 0xce, 0xd6, 0xe0, 0x0f, 0x90, 0x0f, 0xfa, 0xb4, 0x08, 0xb4, 0x29, 0x0d, 0x85, 0xe5, 0xdd, 0x60, 0x85, 0x3b, 0x19, 0x2e, 0xd5, 0x5c, 0xbe, 0x65, 0xfa, 0xcd, 0x0c, 0xd7, 0xd0, 0x08, 0x66, 0xeb, 0x71, 0xcf, 0x55, 0x92, 0x58, 0xbf, 0xd0, 0x7d, 0xc7, 0x28, 0xbb, 0x8e, 0x65, 0x1c, 0xad, 0x8c, 0x2c, 0xc6, 0xf6, 0x1a, 0x82, 0xfd, 0xe1, 0xea, 0xa6, 0x19, 0x36, 0x2e, 0x4e, 0x06, 0x03, 0x4f, 0x8f, 0x97, 0x9c, 0xe2, 0xfc, 0x1c, 0xe1, 0xd8, 0x12, 0x36, 0xbf, 0xf4, 0xd4, 0xea, 0xfa, 0x83, 0xb2, 0xf5, 0x29, 0x47, 0xaf, 0x5f, 0x02, 0xb4, 0xc3, 0x53, 0xd7, 0x5f, 0x7e, 0x2e, 0x61, 0xb3, 0xef, 0xd6, 0xbd, 0xe5, 0xc4, 0x4d, 0xb4, 0x2b, 0xb2, 0x86, 0x3f, 0x29, 0x18, 0x77, 0x4a, 0xac, 0xdf, 0x6f, 0xb9, 0x9b, 0xa4, 0xaa, 0xa9, 0x2b, 0x19, 0x23, 0xf8, 0x51, 0xa8, 0xa9, 0x07, 0x7d, 0x5a, 0x35, 0xbe, 0x85, 0xf8, 0x7b, 0xd1, 0xdf, 0x70, 0xbf, 0x42, 0x14, 0x79, 0xea, 0x28, 0x71, 0x7a, 0xdd, 0xae, 0x00, 0xa8, 0x05, 0x5e, 0xb7, 0x6f, 0x2f, 0xa0, 0xee, 0x14, 0x9e, 0x7d, 0x17, 0x98, 0x5b, 0xa9, 0xa9, 0xdf, 0xcd, 0xc1, 0x5d, 0x12, 0x89, 0xd1, 0x9d, 0x41, 0x6b, 0x19, 0x39, 0x4d, 0xe6, 0x11, 0x5d, 0x05, 0x98, 0xaa, 0xc0, 0x8f, 0x22, 0xd7, 0x1d, 0x0a, 0x36, 0x4c, 0xe7, 0x71, 0xf2, 0x85, 0x39, 0xc2, 0x6c, 0x0b, 0x0c, 0x60, 0x8e, 0xf3, 0xac, 0xb6, 0x24, 0xa7, 0x6d, 0x1e, 0x33, 0xe9, 0x99, 0x01, 0x8c, 0x14, 0xae, 0x3f, 0xa2, 0xa5, 0xc6, 0xd1, 0x99, 0xfb, 0x57, 0xad, 0x9f, 0x5b, 0x1c, 0xe9, 0x7f, 0x37, 0x53, 0x24, 0x73, 0xb0, 0x29, 0x22, 0x3a, 0x59, 0x73, 0xb6, 0x6b, 0x3e, 0x9e, 0xe5, 0x09, 0x25, 0xe9, 0x48, 0x57, 0x13, 0xd1, 0xb2, 0xee, 0x12, 0xcd, 0x13, 0x0c, 0x32, 0x3c, 0x9c, 0x2f, 0xce, 0x9c, 0x24, 0xe3, 0x10, 0xfc, 0xcb, 0xd8, 0xb7, 0xb4, 0xdd, 0x37, 0x18, 0x53, 0xf9, 0x36, 0x63, 0xd9, 0x72, 0xeb, 0x28, 0x27, 0xf5, 0x5d, 0x1a, 0xb3, 0x6c, 0xe1, 0x12, 0x80, 0x23, 0xa4, 0x57, 0x4e, 0x29, 0x84, 0x1c, 0x0e, 0xfa, 0x24, 0x4a, 0x98, 0x5a, 0x3f, 0x80, 0xa0, 0x84, 0x3c, 0x58, 0xe6, 0x84, 0x03, 0xed, 0xae, 0xe2, 0x10, 0x9a, 0x70, 0x80, 0xc5, 0x04, 0xd0, 0xc5, 0x05, 0x5a, 0xd0, 0xfb, 0xfe, 0xdb, 0x45, 0xf6, 0x46, 0x99, 0x88, 0xf7, 0x2a, 0x7d, 0x6d, 0xd0, 0x43, 0x8c, 0x79, 0x48, 0x4a, 0x68, 0x4f, 0xc0, 0x2c, 0x1a, 0x6c, 0x17, 0x61, 0x0e, 0x14, 0xcc, 0x7a, 0x5f, 0x8c, 0x62, 0xfa, 0x56, 0x8a, 0x09, 0x67, 0x2d, 0xea, 0x7a, 0xa1, 0x18, 0xa2, 0x23, 0x72, 0x86, 0xf8, 0x84, 0x65, 0xa3, 0xf3, 0xd9, 0xdc, 0x22, 0x0f, 0xf9, 0x5d, 0x3b, 0x34, 0x7e, 0x2d, 0xef, 0xe9, 0x26, 0x20, 0x93, 0xc6, 0x79, 0xaf, 0x8c, 0x27, 0xac, 0x4b, 0x58, 0x28, 0xc6, 0xf1, 0xce, 0xcd, 0x01, 0xff, 0xa6, 0x80, 0x73, 0x46, 0x3b, 0xc1, 0xed, 0x60, 0x90, 0x19, 0x24, 0x43, 0x91, 0x4f, 0x0e, 0x17, 0x9c, 0xdf, 0x8f, 0x45, 0x40, 0xa8, 0x55, 0xd1, 0x45, 0xe5, 0x01, 0xe9, 0xec, 0x5e, 0x87, 0xbe, 0x77, 0xe0, 0xd7, 0x92, 0xec, 0xea, 0xbd, 0x12, 0x17, 0xa9, 0x05, 0xe7, 0xce, 0x26, 0xe4, 0x88, 0x79, 0xbf, 0x93, 0x52, 0xd1, 0xd4, 0x3d, 0xda, 0xe7, 0xc2, 0x1b, 0x82, 0x68, 0x15, 0xde, 0x4a, 0x20, 0xf9, 0x4d, 0xe9, 0xbe, 0xf2, 0x2f, 0x1d, 0xd7, 0xcd, 0x6b, 0x3f, 0x2d, 0xd7, 0x6e, 0x1a, 0x30, 0x4c, 0xcd, 0xfd, 0xc5, 0x12, 0x2b, 0x0f, 0x47, 0xa7, 0x5e, 0xe3, 0xcb, 0x59, 0xcd, 0x4c, 0xa9, 0xb5, 0x1c, 0x73, 0x38, 0x41, 0x0c, 0x26, 0xd8, 0x6e, 0x9c, 0x73, 0x36, 0xc8, 0x75, 0x76, 0xcb, 0x70, 0x84, 0x6f, 0xa6, 0xcc, 0xe9, 0x17, 0x6c, 0x7d, 0x10, 0x35, 0x9d, 0x91, 0x1d, 0x6c, 0x18, 0xfa, 0x8e, 0x57, 0xe2, 0x3f, 0x1b, 0xd8, 0x23, 0x72, 0xe1, 0xac, 0x71, 0x62, 0xc0, 0x43, 0x51, 0x11, 0x02, 0xcf, 0xfb, 0x69, 0x3d, 0x9c, 0x5e, 0x2a, 0x7a, 0x9f, 0x64, 0x27, 0x96, 0x51, 0x77, 0xb2, 0xe9, 0xbe, 0x44, 0x55, 0x26, 0xd8, 0xbf, 0xc3, 0x82, 0x12, 0x67, 0x0d, 0x19, 0x2a, 0xcb, 0x19, 0x8d, 0x46, 0x4d, 0x51, 0xf0, 0x43, 0x26, 0x98, 0xe4, 0x4a, 0xaa, 0x82, 0x00, 0xa4, 0xcd, 0xc4, 0x76, 0xcf, 0xe7, 0xe9, 0xf3, 0xd1, 0xb4, 0x47, 0xc7, 0xcc, 0x9f, 0x32, 0x46, 0xd3, 0x40, 0x6f, 0x6e, 0xfc, 0x23, 0xeb, 0xca, 0xb6, 0xcb, 0xad, 0x95, 0x5d, 0xf6, 0x0a, 0x23, 0x0c, 0x23, 0x18, 0x7d, 0xb3, 0x52, 0x65, 0x4c, 0x69, 0x0b, 0xe8, 0xf8, 0x03, 0xa1, 0x37, 0x10, 0xe5, 0xb8, 0xfb, 0xed, 0x18, 0x05, 0xa1, 0x92, 0x9d, 0x55, 0x53, 0xd7, 0x01, 0xd1, 0x27, 0xc7, 0x32, 0x80, 0x96, 0x46, 0x91, 0x0d, 0x2f, 0xf7, 0x48, 0xcb, 0x8c, 0x5c, 0xde, 0xf6, 0x86, 0x3f, 0x09, 0x3c, 0xa5, 0x51, 0xc3, 0x7b, 0xda, 0x12, 0x9f, 0xcd, 0x71, 0xf0, 0x5e, 0xc2, 0x41, 0xb3, 0xbd, 0xec, 0x26, 0x18, 0x92, 0xa1, 0xb1, 0xbc, 0x17, 0xfc, 0x1d, 0x3c, 0x86, 0x25, 0x85, 0x9b, 0xe6, 0xd2, 0x55, 0xe4, 0x24, 0x0e, 0xff, 0x10, 0x65, 0x3a, 0xef, 0x29, 0x9b, 0x51, 0xc0, 0xb0, 0x56, 0x70, 0xb0, 0x3d, 0xde, 0x95, 0x51, 0x65, 0x7e, 0xa6, 0x82, 0xe0, 0x22, 0xb6, 0x9e, 0xeb, 0x25, 0x85, 0xf3, 0xec, 0x64, 0x45, 0x76, 0x55, 0x97, 0xa4, 0xb4, 0xca, 0xe1, 0x06, 0x0c, 0x86, 0xa5, 0x12, 0x1c, 0xfb, 0x9c, 0x71, 0x79, 0xb8, 0x24, 0xd2, 0xa3, 0x90, 0xdb, 0x32, 0x38, 0xf9, 0x6d, 0x5a, 0x67, 0xb2, 0xaa, 0xa9, 0xa8, 0xa9, 0xdc, 0x13, 0xaa, 0x1b, 0x57, 0x6a, 0x8d, 0xfd, 0x51, 0xdc, 0x52, 0x9b, 0xf4, 0xbe, 0x90, 0x7f, 0xb2, 0x88, 0x68, 0x94, 0xd9, 0x20, 0xba, 0x8b, 0x67, 0x5b, 0x99, 0x7e, 0x1f, 0xc1, 0xfd, 0xd3, 0xdc, 0x90, 0xb8, 0x64, 0x26, 0x04, 0xac, 0xdc, 0x03, 0xd6, 0x3a, 0x64, 0x0f, 0x02, 0xfe, 0x80, 0xcf, 0xce, 0xb9, 0x33, 0x43, 0x08, 0x8e, 0x6a, 0xba, 0x8f, 0x72, 0x98, 0xea, 0x15, 0xde, 0x9d, 0x40, 0x22, 0xc6, 0xec, 0x75, 0x5c, 0xcf, 0xed, 0x62, 0x07, 0xbd, 0xa0, 0x15, 0xc8, 0x2a, 0x84, 0x24, 0xae, 0x7e, 0xb7, 0x41, 0x72, 0x1b, 0x5e, 0x0f, 0xfe, 0xd8, 0x47, 0x35, 0x2d, 0xb1, 0xcd, 0xb0, 0xd2, 0xbd, 0xfc, 0x6d, 0xfb, 0x60, 0xf6, 0x17, 0x77, 0xc1, 0x95, 0x2e, 0x95, 0x7e, 0x52, 0x59, 0x2f, 0x9f, 0x66, 0xfd, 0xe7, 0xc9, 0x2f, 0x0e, 0xb1, 0xb4, 0xd4, 0x25, 0x92, 0xdf, 0x2c, 0xd3, 0xa7, 0x83, 0xdc, 0x36, 0x68, 0xc5, 0xc0, 0xc9, 0x2e, 0x2f, 0x8d, 0x80, 0xf3, 0x61, 0xb4, 0x15, 0x59, 0x04, 0x89, 0x9c, 0xee, 0x00, 0xa4, 0x5e, 0xaf, 0xef, 0x87, 0xe4, 0xcb, 0xd1, 0x82, 0x52, 0xa9, 0x01, 0xd4, 0xf7, 0x2b, 0x68, 0x13, 0x21, 0x35, 0xf0, 0xce, 0x36, 0x69, 0x3b, 0x70, 0x00, 0x35, 0x96, 0x67, 0x49, 0x10, 0x28, 0x86, 0xa8, 0x00, 0x6f, 0xa8, 0x9a, 0x60, 0xee, 0x97, 0xd4, 0xe0, 0x1f, 0x2c, 0xd8, 0xcd, 0xaf, 0xb7, 0xc7, 0x93, 0xea, 0xa0, 0x76, 0x80, 0x75, 0x4f, 0xc3, 0xca, 0x3b, 0x4a, 0x2a, 0xd4, 0xa9, 0x9d, 0x93, 0xad, 0x1e, 0x7f, 0x6e, 0xd9, 0x9d, 0x32, 0x02, 0x55, 0xc6, 0x2b, 0x02, 0xd5, 0x04, 0x73, 0x62, 0x50, 0x07, 0x4d, 0x68, 0xbe, 0x75, 0x19, 0x06, 0x21, 0xdc, 0x78, 0x67, 0xc2, 0xec, 0xb1, 0xc8, 0xbd, 0xe3, 0x54, 0x89, 0xbf, 0x48, 0x1d, 0x84, 0x0f, 0xdc, 0x1a, 0x9d, 0xcb, 0xce, 0x10, 0x9a, 0x75, 0x2e, 0x1c, 0x36, 0xae, 0xa4, 0x96, 0x70, 0x40, 0x62, 0x3a, 0x29, 0x62, 0x57, 0x8a, 0xee, 0x38, 0xa5, 0x6e, 0x13, 0x9a, 0x56, 0x1e, 0x01, 0x16, 0x4a, 0x41, 0xd0, 0x38, 0x74, 0x57, 0x19, 0x08, 0x47, 0x54, 0x05, 0xd5, 0x6a, 0x8d, 0xaa, 0x31, 0xb3, 0xd8, 0x98, 0x3d, 0x53, 0xef, 0xae, 0x27, 0x4e, 0x16, 0x33, 0xf0, 0x2f, 0xfe, 0x22, 0x73, 0xf9, 0xe8, 0xc4, 0xa3, 0x60, 0x0d, 0x84, 0x14, 0x39, 0x3e, 0x00, 0xbd, 0x30, 0xc8, 0x5c, 0xfc, 0xb9, 0x9a, 0xdb, 0xda, 0x49, 0xaa, 0xb0, 0x91, 0xc5, 0x94, 0x11, 0x4b, 0x3b, 0x84, 0x8e, 0x2d, 0xd0, 0x57, 0xa1, 0x94, 0xf9, 0xfd, 0x86, 0x9e, 0xee, 0x22, 0x4c, 0xed, 0x5c, 0x0d, 0x2d, 0xa7, 0x5a, 0xc8, 0x1b, 0xc1, 0x9f, 0x81, 0x9b, 0x7e, 0xf2, 0x30, 0xd6, 0x32, 0xe1, 0x7a, 0xed, 0x4c, 0xb6, 0xd5, 0x8e, 0x93, 0xa7, 0xee, 0xc5, 0xb0, 0x4d, 0x48, 0x14, 0xed, 0x58, 0x25, 0xc5, 0x3c, 0x80, 0xa9, 0x7f, 0x7b, 0xbf, 0x3d, 0x18, 0xf6, 0xbd, 0x32, 0xaa, 0x2e, 0x8c, 0xa6, 0xe9, 0xd9, 0x95, 0xac, 0xb3, 0x29, 0xd2, 0xa7, 0xe9, 0x51, 0x3e, 0xf7, 0x7e, 0x46, 0x8a, 0xd8, 0xcd, 0xc2, 0x12, 0x86, 0x30, 0x8f, 0x0f, 0xa6, 0xce, 0x02, 0x0e, 0xe1, 0xb4, 0xc6, 0xa1, 0xd2, 0x28, 0xda, 0x54, 0x22, 0x39, 0xdd, 0xe2, 0xf1, 0x9b, 0x8a, 0xa9, 0x78, 0xb2, 0x7f, 0x5c, 0xed, 0xed, 0x42, 0xf8, 0xa7, 0x55, 0x85, 0xf9, 0x83, 0x66, 0xa9, 0xcd, 0x86, 0x1d, 0x82, 0x89, 0xc4, 0x52, 0x5a, 0xdb, 0x80, 0x48, 0x38, 0x3f, 0x94, 0x83, 0x62, 0x76, 0x14, 0xd9, 0x20, 0x35, 0x2e, 0xcc, 0xc3, 0x1a, 0x54, 0x17, 0xe6, 0xe3, 0x9e, 0x87, 0xf4, 0xe2, 0x69, 0x0c, 0xea, 0xac, 0x45, 0x10, 0x5e, 0x12, 0x0e, 0x07, 0xc1, 0x52, 0x58, 0x48, 0xe1, 0x8e, 0x10, 0x1b, 0xb1, 0x7c, 0x61, 0x13, 0x4d, 0x60, 0xd5, 0x9e, 0x39, 0x37, 0xbd, 0xda, 0xe9, 0x35, 0xd2, 0xaa, 0x87, 0x72, 0x1c, 0x0a, 0xf0, 0xe1, 0x13, 0x9f, 0x00, 0x81, 0x05, 0x92, 0x0f, 0xd7, 0xb7, 0x9f, 0xbb, 0x9b, 0x4f, 0x69, 0xe8, 0xb2, 0x71, 0x11, 0x06, 0x5c, 0xa9, 0x06, 0x93, 0xaf, 0x09, 0x1f, 0xe0, 0x44, 0x13, 0xe7, 0x17, 0x30, 0xd9, 0x38, 0x7d, 0x35, 0x62, 0x0b, 0xf5, 0x3a, 0x50, 0x8e, 0xc6, 0xf9, 0xc0, 0x77, 0x9d, 0xf8, 0x72, 0x98, 0xd6, 0xba, 0x2a, 0xb4, 0xf7, 0x36, 0x55, 0x92, 0x7d, 0x88, 0xf0, 0x4f, 0xdc, 0xe7, 0xa6, 0xf8, 0xc1, 0xd7, 0x38, 0x59, 0x9a, 0x9f, 0x22, 0x0f, 0x58, 0xfe, 0x7c, 0xe5, 0x73, 0x1a, 0x1e, 0x5d, 0x2f, 0xb9, 0x07, 0x8c, 0x1f, 0xb3, 0x00, 0x2b, 0xe7, 0xa8, 0x7c, 0xec, 0x45, 0xee, 0xc3, 0x0a, 0x53, 0xcd, 0x4f, 0x24, 0x06, 0xef, 0x76, 0x4b, 0xfb, 0x12, 0x4a, 0x5a, 0x73, 0x00, 0xbe, 0x85, 0x9c, 0xc1, 0x0a, 0x35, 0x12, 0x0f, 0x50, 0x14, 0xa5, 0x0a, 0x7f, 0x63, 0x5d, 0x2d, 0x78, 0x94, 0xbb, 0x81, 0x6f, 0x15, 0x42, 0x10, 0x94, 0x6a, 0x36, 0x9d, 0xf3, 0x7e, 0xa4, 0x92, 0x99, 0x3b, 0xa2, 0x3a, 0xf9, 0x58, 0xd8, 0x30, 0x8e, 0x72, 0x3f, 0x18, 0xc1, 0x5f, 0x29, 0x8c, 0x0c, 0xbf, 0x82, 0x59, 0x60, 0xd3, 0x55, 0xec, 0xc4, 0x93, 0x91, 0x07, 0x40, 0xfa, 0x0e, 0xb9, 0xf9, 0xa5, 0xcb, 0x8c, 0x9d, 0x9c, 0x7a, 0x00, 0x01, 0x70, 0x3e, 0x38, 0x09, 0x86, 0xb3, 0xf4, 0xc9, 0xb2, 0x2f, 0xbf, 0xe9, 0x07, 0x47, 0x6a, 0x4e, 0xee, 0x95, 0xb8, 0xf6, 0x76, 0xb9, 0x5b, 0x24, 0xeb, 0x9e, 0x1f, 0xbe, 0xaa, 0xff, 0x66, 0xf3, 0x33, 0x29, 0xd4, 0x20, 0x80, 0x02, 0x4b, 0xf5, 0x96, 0x4a, 0x1a, 0xd4, 0x59, 0x21, 0x71, 0x79, 0xa4, 0xc9, 0x19, 0xe0, 0x99, 0xae, 0x61, 0x63, 0x36, 0xa3, 0x5c, 0x24, 0x29, 0x6f, 0x49, 0xaa, 0xe6, 0x88, 0x53, 0xcf, 0xf6, 0x1e, 0x7b, 0xd9, 0x92, 0x5b, 0xd2, 0xe7, 0x70, 0xea, 0xeb, 0x8f, 0xdd, 0xb6, 0x90, 0xc5, 0x0c, 0xf4, 0xb4, 0xfe, 0xae, 0x63, 0xa9, 0x96, 0xc2, 0xd2, 0x93, 0x6f, 0xaf, 0xe4, 0x1d, 0xdc, 0x90, 0x10, 0x6a, 0xbd, 0xcf, 0xeb, 0x4f, 0xeb, 0xf5, 0xaa, 0xbf, 0xd6, 0xc0, 0xe2, 0x86, 0x6c, 0x77, 0x93, 0x3a, 0x3d, 0x7a, 0x65, 0x6f, 0xdd, 0x1d, 0x31, 0x2b, 0x8a, 0xb6, 0xc3, 0x9a, 0x0f, 0xf5, 0xdf, 0x02, 0xe8, 0x74, 0x81, 0xf8, 0xa7, 0x8f, 0x69, 0xd5, 0x97, 0x76, 0xd7, 0x64, 0x9e, 0x80, 0x94, 0xdd, 0x68, 0xc3, 0x31, 0x17, 0xc1, 0xe1, 0x93, 0xf9, 0x43, 0x24, 0xb0, 0x32, 0x32, 0xce, 0x93, 0x29, 0xa4, 0xaa, 0xa6, 0x37, 0xe5, 0xe7, 0x30, 0x15, 0x19, 0x26, 0x1d, 0x90, 0x23, 0xd2, 0xfe, 0x84, 0xc6, 0xb0, 0x50, 0x07, 0x0a, 0xb7, 0x01, 0xe5, 0xe2, 0x21, 0x30, 0x4d, 0x0b, 0xc2, 0x35, 0xc9, 0x37, 0x99, 0xe1, 0x73, 0x6b, 0xa5, 0x06, 0x67, 0xa6, 0xf9, 0x3a, 0x74, 0xc3, 0x13, 0xd9, 0x17, 0xa0, 0x6a, 0x49, 0xa9, 0x80, 0x46, 0x82, 0xd7, 0xae, 0xd4, 0xcd, 0x53, 0x64, 0x7a, 0xcb, 0xc9, 0xea, 0x68, 0xba, 0x15, 0x02, 0x70, 0xf4, 0xb3, 0x84, 0x17, 0xb8, 0x76, 0x46, 0xec, 0x2d, 0x7d, 0x3e, 0x18, 0xa4, 0x64, 0xeb, 0x37, 0x1e, 0xb7, 0xf0, 0x66, 0x0e, 0xac, 0x03, 0x9d, 0x60, 0x11, 0x05, 0x40, 0xb9, 0x83, 0x72, 0xf0, 0x01, 0xe1, 0xfc, 0xa7, 0x1f, 0x00, 0x73, 0x04, 0x03, 0xa0, 0xe8, 0xe3, 0xea, 0x9f, 0x12, 0x31, 0xdd, 0x6d, 0xf1, 0xff, 0x7b, 0xc0, 0xb0, 0xd4, 0xf9, 0x89, 0xd0, 0x48, 0x67, 0x26, 0x83, 0xce, 0x35, 0xd9, 0x56, 0xd2, 0xf5, 0x79, 0x13, 0x04, 0x62, 0x67, 0xe6, 0xf3, 0xa2, 0xc4, 0xbe, 0xdd, 0xc8, 0xe1, 0xf6, 0xc5, 0x9d, 0xf7, 0x35, 0xc7, 0xa0, 0x19, 0x93, 0xa9, 0x4b, 0x66, 0xfd, 0xb2, 0x98, 0x83, 0xda, 0xbf, 0xc4, 0x49, 0xee, 0x93, 0x53, 0xba, 0x7f, 0x6f, 0x54, 0x3a, 0xb7, 0xe2, 0xe6, 0xfc, 0x4a, 0xe3, 0xfb, 0xba, 0x59, 0x1d, 0x5c, 0xa9, 0x95, 0x8a, 0xee, 0xac, 0xa7, 0x43, 0x33, 0xc7, 0xd0, 0x97, 0x13, 0xd7, 0xcc, 0x5a, 0xdd, 0x81, 0xfd, 0x7f, 0x89, 0x69, 0xc5, 0xea, 0x40, 0xa4, 0x34, 0x7f, 0x1e, 0x6f, 0xe3, 0x7f, 0x36, 0x21, 0x1f, 0x14, 0xd6, 0x5e, 0x4a, 0x2a, 0x0d, 0x8e, 0x7f, 0x81, 0x6b, 0x8d, 0x75, 0x00, 0x08, 0xa4, 0xa6, 0x4d, 0xc7, 0xb9, 0xb0, 0x9a, 0xdc, 0xc2, 0xfb, 0xc2, 0x8c, 0x80, 0x9c, 0x94, 0x34, 0x69, 0x79, 0x6e, 0x8d, 0xe6, 0xae, 0x0f, 0x2e, 0xbe, 0x30, 0xa6, 0x53, 0xd2, 0xb0, 0x2e, 0xdc, 0x0c, 0xc3, 0xfe, 0x99, 0x92, 0x3f, 0x9c, 0xc4, 0x3f, 0xe8, 0xd3, 0xcf, 0x53, 0x4c, 0x05, 0x61, 0x69, 0xeb, 0xc2, 0x9b, 0xaa, 0x9b, 0x98, 0x9f, 0x41, 0x2b, 0x2d, 0x53, 0x0e, 0x47, 0x8c, 0x62, 0x9f, 0x9b, 0xbd, 0x84, 0x5c, 0x3c, 0x98, 0x00, 0x01, 0x43, 0xda, 0x6f, 0x52, 0xbb, 0x79, 0xc2, 0x0a, 0xbd, 0x35, 0x86, 0x14, 0xd9, 0x70, 0x67, 0xfd, 0xb8, 0x3f, 0xf3, 0xaa, 0x00, 0xc1, 0xa1, 0x46, 0x78, 0xb0, 0x12, 0x7f, 0x6d, 0x35, 0x96, 0xf2, 0x54, 0x01, 0xf2, 0xe3, 0xb0, 0x99, 0x61, 0x32, 0x36, 0xf1, 0xd8, 0x8a, 0x2f, 0x3d, 0x8e, 0xdc, 0x1f, 0x04, 0xbc, 0x0c, 0xa4, 0x76, 0xa1, 0xea, 0xa0, 0xff, 0xca, 0x63, 0x9a, 0x1c, 0x90, 0xf9, 0x62, 0x6e, 0xe2, 0x70, 0xf4, 0x0d, 0x45, 0xca, 0x9f, 0x1e, 0x18, 0x76, 0x67, 0xa8, 0x1d, 0xc5, 0xa7, 0xa3, 0x35, 0x9d, 0xfb, 0x52, 0x6b, 0x71, 0x5c, 0xd3, 0x34, 0x70, 0x8d, 0xf5, 0xf5, 0xfd, 0xb7, 0x49, 0xc6, 0x60, 0x50, 0x7c, 0x76, 0xbb, 0x40, 0xe3, 0xcf, 0x3f, 0x47, 0x58, 0x1b, 0x9f, 0x99, 0x45, 0xe7, 0xc5, 0xcc, 0xfe, 0x06, 0xc5, 0xf4, 0x54, 0xd9, 0x0f, 0x0d, 0x67, 0xce, 0xe8, 0x99, 0xbb, 0x27, 0x1b, 0x89, 0x8e, 0xfd, 0xeb, 0x61, 0x69, 0x84, 0x4d, 0x98, 0xf6, 0x90, 0x54, 0x3d, 0x11, 0x58, 0xed, 0xe1, 0x21, 0x7a, 0xcc, 0xb0, 0xa9, 0x40, 0xa6, 0xe1, 0x1a, 0x22, 0xa1, 0x51, 0xec, 0x8c, 0x09, 0x6a, 0xec, 0xe1, 0x44, 0x4a, 0xd8, 0xbf, 0x08, 0x21, 0x29, 0x85, 0xcb, 0xdb, 0x30, 0x12, 0x7b, 0x00, 0x64, 0xd0, 0x70, 0xd8, 0xfb, 0xf2, 0x9f, 0xd2, 0xb7, 0xf9, 0x10, 0x26, 0x03, 0x7d, 0x92, 0xba, 0x3e, 0x2a, 0xad, 0x43, 0x57, 0x09, 0xd8, 0xac, 0x9a, 0x00, 0xec, 0xbb, 0xc9, 0x9d, 0xd9, 0xf2, 0x6f, 0x0f, 0x97, 0xb3, 0x71, 0x75, 0x60, 0xa8, 0xe6, 0x5c, 0x1d, 0x62, 0x28, 0x82, 0x1e, 0x40, 0x2b, 0xe0, 0x0d, 0x93, 0x0e, 0xe8, 0x25, 0xff, 0xf0, 0x0c, 0x9f, 0x25, 0x05, 0x7f, 0x6d, 0x7e, 0xe9, 0x3f, 0x2b, 0x8a, 0x34, 0x53, 0x53, 0x2b, 0x4e, 0x51, 0xb0, 0x4b, 0x85, 0x24, 0x15, 0xc5, 0x5c, 0x0c, 0x4e, 0x83, 0x26, 0xe6, 0x57, 0xe4, 0xd4, 0xae, 0xcc, 0x60, 0x0c, 0x42, 0xa1, 0x6e, 0x7b, 0x69, 0x13, 0xa5, 0x6b, 0x13, 0xde, 0x22, 0x98, 0xe3, 0xb1, 0x2b, 0x3f, 0xea, 0xdf, 0x11, 0x79, 0xb6, 0x57, 0x5b, 0xc7, 0x8b, 0xd6, 0x20, 0xee, 0xf0, 0x5b, 0xb5, 0x05, 0x6d, 0xdc, 0x89, 0xcc, 0x94, 0x37, 0x4c, 0x3f, 0x3e, 0x6b, 0x57, 0x6b, 0x17, 0x08, 0x48, 0x81, 0x5d, 0xe4, 0xec, 0x29, 0xe4, 0x10, 0x63, 0x18, 0x5e, 0x0a, 0x7e, 0xe5, 0xd9, 0x34, 0x6c, 0x18, 0x89, 0x85, 0x96, 0x85, 0xc8, 0x7f, 0xc7, 0xd8, 0x5b, 0x61, 0x90, 0x70, 0xf7, 0x9d, 0xeb, 0x71, 0x03, 0x8c, 0x1e, 0x14, 0xa0, 0x61, 0xe2, 0x42, 0xe7, 0x5c, 0xc5, 0x62, 0x71, 0x40, 0xcd, 0x6f, 0x1d, 0x06, 0x5e, 0x4d, 0x0d, 0xd3, 0x5d, 0x5d, 0xf2, 0x28, 0x96, 0x4f, 0x8a, 0x58, 0x5b, 0x37, 0x67, 0x40, 0x6e, 0xe3, 0xf1, 0x32, 0x22, 0x6c, 0xae, 0x32, 0xbc, 0x0c, 0xc1, 0x65, 0x1f, 0x2f, 0xb1, 0xc6, 0xa9, 0xcd, 0x6c, 0x1b, 0x58, 0xf6, 0x8c, 0x28, 0x31, 0xaf, 0xd8, 0x22, 0xe2, 0xfc, 0x0e, 0x66, 0xa6, 0x3e, 0xe0, 0x6b, 0x69, 0xbf, 0x3c, 0xf5, 0x2d, 0x8c, 0xd0, 0x8c, 0xac, 0x83, 0xce, 0x2d, 0x3e, 0xac, 0xec, 0x3f, 0xfe, 0xcd, 0xb0, 0xc8, 0x28, 0x38, 0xea, 0xe1, 0xc6, 0xe8, 0x82, 0x68, 0x8c, 0xcc, 0x73, 0xf4, 0x00, 0x63, 0x18, 0x0e, 0xde, 0x89, 0xa7, 0x9e, 0xba, 0x91, 0xfb, 0xa3, 0xe7, 0x93, 0x96, 0x27, 0x98, 0x07, 0xe6, 0x73, 0x45, 0x93, 0xc7, 0x7f, 0x50, 0x22, 0x4a, 0xac, 0xe9, 0x36, 0xb4, 0xb5, 0x2f, 0x7f, 0xca, 0xe3, 0x97, 0xac, 0x4c, 0x81, 0x92, 0x81, 0xc0, 0x90, 0x6a, 0x2a, 0x70, 0xbc, 0x6d, 0xcf, 0xb6, 0x8e, 0x4e, 0x68, 0x77, 0xe2, 0xc8, 0xd3, 0xee, 0x9c, 0x84, 0x23, 0xab, 0x97, 0x3d, 0x3c, 0xdb, 0xde, 0x22, 0x9d, 0xc9, 0x1f, 0x7c, 0x7c, 0xa5, 0x5c, 0x90, 0x18, 0x85, 0xe4, 0xc7, 0x4b, 0xa9, 0x82, 0x0c, 0x5e, 0x03, 0xf4, 0x76, 0x22, 0xf6, 0x9e, 0x27, 0x3c, 0x5f, 0x80, 0x74, 0xc1, 0xd2, 0x66, 0x46, 0x03, 0x26, 0x5e, 0xbf, 0xaa, 0x33, 0x6f, 0x21, 0x06, 0xda, 0x88, 0xec, 0xa3, 0x46, 0xb7, 0x47, 0x1e, 0x72, 0x9b, 0xa1, 0x38, 0xeb, 0x1c, 0x98, 0x29, 0xd8, 0x59, 0x1a, 0x37, 0x37, 0xe2, 0xca, 0x86, 0x69, 0x28, 0xa5, 0x32, 0xf1, 0x32, 0xe5, 0x9b, 0x79, 0x91, 0x25, 0x00, 0x15, 0x95, 0xc7, 0x50, 0xcc, 0xc1, 0x93, 0x3c, 0x55, 0x7d, 0xa0, 0x91, 0x1e, 0x0b, 0x78, 0xc5, 0x93, 0xbc, 0x77, 0xcf, 0x9c, 0x64, 0x74, 0x3c, 0x67, 0x0b, 0xa4, 0x80, 0x69, 0xe5, 0xba, 0x8a, 0x9f, 0x85, 0x53, 0x9b, 0x1a, 0x4d, 0x92, 0x57, 0xba, 0x29, 0x07, 0x1d, 0x3a, 0x7d, 0xd6, 0x94, 0x6c, 0x5b, 0x15, 0x86, 0xc6, 0xfa, 0x75, 0xf2, 0x1e, 0x63, 0x25, 0x5c, 0xb2, 0x6e, 0xf3, 0x68, 0x6b, 0xed, 0xb5, 0xa7, 0x63, 0x27, 0xe7, 0xb1, 0xa4, 0x88, 0x95, 0x74, 0x33, 0x96, 0x7c, 0xcb, 0x4d, 0x27, 0x6c, 0x53, 0xf0, 0xd1, 0xf0, 0x7a, 0x9d, 0xa3, 0x31, 0xd8, 0x5d, 0x12, 0x18, 0xc3, 0x02, 0x36, 0xb3, 0x1d, 0xaf, 0x37, 0xda, 0x71, 0x9a, 0x02, 0x12, 0x3e, 0x11, 0x40, 0xb1, 0x93, 0xbb, 0x88, 0x43, 0xdc, 0x21, 0xd3, 0x2d, 0xfc, 0x6c, 0x31, 0x90, 0x9c, 0x70, 0xbb, 0x70, 0xc2, 0xea, 0xc9, 0x16, 0xa5, 0x06, 0x65, 0xb2, 0xc0, 0x25, 0xff, 0x45, 0x25, 0xdc, 0x62, 0xbe, 0x14, 0x40, 0xe6, 0x63, 0xcc, 0x61, 0xe7, 0x73, 0xa1, 0x14, 0x77, 0x0a, 0x4f, 0xf6, 0x50, 0x44, 0x8e, 0xad, 0x0c, 0xa5, 0xe6, 0x71, 0x99, 0xb9, 0xc5, 0xcc, 0xe7, 0xf7, 0xcf, 0x9d, 0xe3, 0xeb, 0x75, 0x63, 0xa9, 0x95, 0xc9, 0xb8, 0xf5, 0x0c, 0x90, 0x1c, 0xdb, 0x66, 0x99, 0xf4, 0xb9, 0xdc, 0x4e, 0xd2, 0x69, 0x2a, 0x89, 0xf7, 0xbb, 0x35, 0xa9, 0x17, 0x22, 0xf0, 0xe4, 0x5c, 0xad, 0x80, 0xdf, 0xad, 0x39, 0x9f, 0x7b, 0x2f, 0xe6, 0x3e, 0xf2, 0x0c, 0xc7, 0x6e, 0x24, 0x74, 0xde, 0x80, 0x2b, 0xe2, 0x47, 0x6b, 0x35, 0xa1, 0xb3, 0x6f, 0x93, 0x8e, 0x18, 0xf8, 0x0d, 0x1f, 0xa7, 0xc5, 0x79, 0xa4, 0xff, 0x49, 0x8c, 0xcd, 0xa0, 0x52, 0xef, 0x6d, 0xa2, 0xe8, 0x95, 0x7d, 0xa7, 0x78, 0x4d, 0x64, 0x0e, 0x32, 0x93, 0x76, 0x69, 0xaf, 0xac, 0xba, 0x31, 0xd7, 0xf2, 0xf0, 0xb9, 0x02, 0x6c, 0xd2, 0x61, 0x5d, 0xa1, 0x9b, 0x0c, 0x90, 0xae, 0xc6, 0xd4, 0x9d, 0x97, 0x18, 0xfc, 0x0b, 0xdb, 0xe0, 0x25, 0x45, 0x4b, 0x7e, 0xc5, 0x3d, 0x1b, 0x22, 0xd6, 0x54, 0x3a, 0xd6, 0xcb, 0x7e, 0xdf, 0xbf, 0xc8, 0xa1, 0x65, 0x9f, 0x12, 0x3f, 0x58, 0x9f, 0xc5, 0x55, 0xd0, 0x4c, 0xc5, 0x83, 0xfd, 0xdf, 0xf6, 0x6c, 0x04, 0xc1, 0xb0, 0x60, 0x09, 0x4e, 0x6d, 0x39, 0x8d, 0xda, 0xc5, 0x82, 0xfb, 0xf1, 0x9d, 0xdf, 0x7d, 0xe3, 0x9b, 0xa8, 0x14, 0x80, 0xdd, 0xd8, 0xe8, 0x21, 0xea, 0x26, 0xdd, 0xe8, 0xe8, 0x71, 0x66, 0x48, 0x10, 0x61, 0x9e, 0xc7, 0x60, 0x4c, 0x95, 0x02, 0x8f, 0x56, 0xe7, 0xf2, 0x46, 0xdd, 0x94, 0x6f, 0x8d, 0x14, 0x0b, 0xf2, 0x84, 0xed, 0x88, 0x9f, 0x53, 0x3d, 0xa0, 0x83, 0x63, 0x1b, 0x1b, 0x1a, 0xcf, 0x88, 0x01, 0x14, 0x15, 0x56, 0xf7, 0x58, 0x12, 0x42, 0xcc, 0x4a, 0x2d, 0x64, 0x50, 0x49, 0xd2, 0xc9, 0x65, 0x7c, 0x22, 0x5e, 0x58, 0xcf, 0xe8, 0x0f, 0x71, 0x38, 0xcf, 0x31, 0xc8, 0x3f, 0xd3, 0x1d, 0x5b, 0xbd, 0xf6, 0x1e, 0x5e, 0xe4, 0x34, 0x8e, 0xd2, 0x7f, 0xb8, 0x3b, 0x59, 0x7b, 0x50, 0x10, 0x49, 0xa7, 0x1f, 0xf1, 0xff, 0xb8, 0x92, 0xe6, 0x76, 0x90, 0x95, 0x7c, 0x18, 0xc0, 0x06, 0x68, 0xd3, 0x4b, 0x69, 0x6e, 0x70, 0xad, 0xde, 0x81, 0x20, 0x1b, 0x51, 0x2c, 0x58, 0x0d, 0xf1, 0x30, 0xdf, 0xfa, 0xe3, 0x6f, 0x26, 0x62, 0x37, 0x08, 0xd7, 0x12, 0x1b, 0xc4, 0xb0, 0xa4, 0x4e, 0xb1, 0x92, 0x45, 0xd8, 0x0c, 0xd5, 0xbb, 0xf9, 0x64, 0xdf, 0xa6, 0x5f, 0xfd, 0xf5, 0x05, 0x9b, 0x73, 0x50, 0xfd, 0xd6, 0x9f, 0x74, 0xd6, 0xc0, 0xbe, 0xbd, 0x47, 0xca, 0xd0, 0x3b, 0xf3, 0x95, 0x3f, 0xc0, 0x33, 0xaa, 0xc1, 0x36, 0x16, 0x6b, 0x7f, 0x36, 0xa6, 0x4a, 0x77, 0xd7, 0x6d, 0x38, 0x1f, 0xc4, 0x38, 0x60, 0x4b, 0x92, 0x1b, 0x16, 0x50, 0x50, 0xb5, 0x0a, 0x6a, 0x5f, 0xb5, 0xc2, 0x5b, 0x84, 0x9d, 0x47, 0x55, 0x3b, 0xc7, 0x1e, 0x1a, 0x4e, 0xa5, 0x79, 0x62, 0xa7, 0x4c, 0xaf, 0x7d, 0x62, 0x34, 0xea, 0x39, 0x27, 0x39, 0x1f, 0x06, 0xb7, 0xe6, 0x44, 0x58, 0xc4, 0xf3, 0xbd, 0x4d, 0x06, 0x0c, 0x17, 0x90, 0x8b, 0xd5, 0xf8, 0x7d, 0x4f, 0x2a, 0x56, 0x86, 0x0c, 0xab, 0xe8, 0xd5, 0x53, 0x78, 0xda, 0x32, 0xdc, 0x39, 0xc5, 0x28, 0x1b, 0x62, 0xde, 0x63, 0x13, 0xb5, 0x6e, 0x5d, 0x6f, 0x08, 0x82, 0x3a, 0xcf, 0x48, 0xe3, 0xf0, 0x60, 0xbe, 0x48, 0xaa, 0xaf, 0x91, 0xcb, 0x6f, 0xbf, 0x8c, 0x9a, 0xfe, 0x59, 0x22, 0xef, 0xfd, 0xa3, 0xaf, 0x42, 0x53, 0xf4, 0x01, 0xbd, 0xd3, 0xe7, 0x17, 0xf0, 0x1a, 0xae, 0x28, 0xc6, 0xba, 0xa9, 0xe8, 0xb7, 0x98, 0x37, 0x06, 0x40, 0x92, 0xcd, 0xf9, 0x90, 0x65, 0x45, 0xfc, 0x85, 0xce, 0x78, 0x57, 0xd6, 0xf0, 0x0e, 0xe1, 0x92, 0xf6, 0x95, 0xc3, 0xc9, 0xf9, 0xd1, 0x7e, 0x88, 0x24, 0x53, 0x30, 0x0b, 0x16, 0x4d, 0x13, 0x2f, 0x87, 0xa5, 0x46, 0x26, 0x2f, 0x48, 0xd0, 0x6e, 0xe3, 0xc1, 0xe2, 0x04, 0x02, 0x0a, 0x5c, 0xd5, 0x0f, 0xa2, 0x93, 0x75, 0x9f, 0xdf, 0x51, 0x13, 0x76, 0x86, 0x1e, 0xad, 0xed, 0x99, 0xbe, 0x80, 0x97, 0x70, 0xfb, 0xc3, 0x23, 0x0b, 0xa5, 0x94, 0x84, 0xa7, 0xd6, 0x33, 0x50, 0x8f, 0x7a, 0x6e, 0x66, 0x35, 0x0f, 0x5c, 0xd4, 0x81, 0xaa, 0x4e, 0xf8, 0x69, 0x3b, 0x03, 0xe5, 0xc2, 0x11, 0x1b, 0x07, 0x56, 0xa1, 0xce, 0x0b, 0x36, 0x83, 0xde, 0xf9, 0x52, 0xbd, 0xca, 0xa3, 0x46, 0x44, 0x45, 0x43, 0x77, 0xc0, 0xe6, 0x60, 0x5f, 0x90, 0x21, 0xf1, 0x25, 0x0e, 0x76, 0xc5, 0x71, 0x14, 0xe8, 0x22, 0x7e, 0xbf, 0xb1, 0xad, 0x71, 0x72, 0x34, 0x89, 0xe9, 0x1e, 0x33, 0xc3, 0xd7, 0xc1, 0x42, 0xee, 0x90, 0x2d, 0x7c, 0x0a, 0x20, 0x0b, 0x74, 0xab, 0xe1, 0x1f, 0x6f, 0x57, 0x4d, 0xce, 0xd0, 0x2f, 0x11, 0xdd, 0xd3, 0xd1, 0x62, 0x7b, 0x7e, 0x7e, 0x94, 0x82, 0xd5, 0x78, 0xe9, 0xfa, 0x4e, 0xae, 0xa7, 0xdf, 0x84, 0x9b, 0x6d, 0x23, 0x2f, 0x6c, 0xc6, 0xf7, 0x54, 0x61, 0xff, 0x47, 0xb9, 0x75, 0x36, 0x83, 0x9c, 0x41, 0xb4, 0xa5, 0xa4, 0x1e, 0x7d, 0x70, 0x18, 0x8a, 0x24, 0xf5, 0x4f, 0xcd, 0xe4, 0x5c, 0x68, 0xdc, 0xed, 0xe1, 0x3b, 0x7d, 0xfc, 0x1d, 0x8e, 0xac, 0x2e, 0x87, 0x8d, 0x3d, 0x16, 0x3a, 0x74, 0xc4, 0x0d, 0xf9, 0x8f, 0xb2, 0xc9, 0x70, 0x64, 0xc0, 0x32, 0xbc, 0x2f, 0x91, 0x70, 0x2e, 0x8e, 0x92, 0x49, 0x4c, 0x7e, 0x26, 0xaa, 0x19, 0x86, 0x00, 0x83, 0x97, 0x32, 0xcf, 0xd8, 0x89, 0xc3, 0x21, 0x16, 0x7d, 0x25, 0x81, 0xa3, 0x0a, 0x21, 0xe3, 0xb8, 0x57, 0xd4, 0x43, 0x73, 0xdc, 0x60, 0x88, 0x28, 0x6d, 0xe1, 0xae, 0xf9, 0x74, 0xa3, 0x24, 0xa6, 0x7e, 0x92, 0x73, 0xa6, 0xf9, 0xf1, 0x21, 0x76, 0x3b, 0x4f, 0xd5, 0x31, 0xc7, 0xb7, 0xbb, 0x61, 0xcc, 0x28, 0x2a, 0x14, 0xef, 0x44, 0x85, 0x33, 0x4a, 0x4c, 0x5f, 0x10, 0xb5, 0x4c, 0xe2, 0x3e, 0x44, 0x93, 0x71, 0xa5, 0x11, 0x66, 0x8c, 0xd5, 0x3b, 0xf6, 0xf4, 0x9b, 0x2e, 0x8f, 0x10, 0xd2, 0x25, 0x11, 0x90, 0x7c, 0xee, 0xa4, 0x50, 0x12, 0xed, 0xa8, 0x7f, 0x18, 0x64, 0xeb, 0x00, 0xf3, 0xf2, 0x1f, 0x10, 0xff, 0x59, 0x8b, 0x2a, 0xdd, 0x84, 0x00, 0x27, 0x0a, 0xc8, 0x0f, 0xaa, 0xb6, 0x6a, 0x79, 0xbb, 0xd3, 0x61, 0xe7, 0xb2, 0x6c, 0x5e, 0xdb, 0x57, 0x38, 0x0a, 0xe7, 0x47, 0x6f, 0x8e, 0x1d, 0x9a, 0xdc, 0x59, 0xc6, 0xc2, 0x34, 0x1d, 0x57, 0xb6, 0xa6, 0x1b, 0xa0, 0x51, 0xb3, 0xa1, 0x47, 0xf4, 0x40, 0xd1, 0x75, 0x73, 0xe9, 0xa3, 0xcf, 0x2f, 0x99, 0x2e, 0xa8, 0x7f, 0x57, 0x23, 0x74, 0x55, 0x63, 0x9a, 0x80, 0x1e, 0x82, 0x11, 0xe1, 0xe9, 0x96, 0xb1, 0xab, 0xcc, 0x71, 0xd4, 0x63, 0x83, 0xeb, 0xc5, 0xb6, 0x5b, 0x32, 0xc6, 0x6a, 0x4f, 0x62, 0x58, 0x96, 0x70, 0x56, 0xb6, 0x0e, 0x8a, 0xbd, 0xa3, 0x22, 0x04, 0x70, 0x65, 0x88, 0x08, 0x03, 0x12, 0x96, 0xe4, 0x99, 0x0a, 0xb4, 0xb0, 0xfd, 0xc5, 0x12, 0x31, 0xef, 0xcf, 0x96, 0xfe, 0xbc, 0x10, 0x19, 0xe1, 0x12, 0x51, 0xd2, 0x80, 0x11, 0xfc, 0x12, 0x3d, 0xa5, 0x23, 0x32, 0x5a, 0x14, 0xc4, 0xca, 0x61, 0xd3, 0x4c, 0x24, 0xc3, 0x9e, 0x59, 0xf1, 0xbf, 0xc7, 0xc4, 0x3a, 0x85, 0xcf, 0xdf, 0x99, 0x9c, 0x33, 0xfb, 0xa8, 0x81, 0x88, 0x2e, 0xba, 0x91, 0xca, 0x53, 0xc9, 0x28, 0xf2, 0x51, 0xb0, 0x0b, 0xc6, 0xa1, 0x9a, 0x03, 0xf5, 0x0a, 0xbb, 0xcb, 0x63, 0xaf, 0x3e, 0x2c, 0xc2, 0x4c, 0x7e, 0x67, 0x62, 0xbd, 0x78, 0xd3, 0x4a, 0xc0, 0x81, 0xc7, 0x87, 0xfb, 0x34, 0xba, 0xc4, 0x41, 0xaf, 0xa9, 0x1b, 0x11, 0xff, 0xba, 0x2b, 0x5f, 0xd8, 0x1e, 0x6b, 0x97, 0x89, 0x3b, 0xbd, 0xe0, 0x30, 0x0b, 0x47, 0x9e, 0x2a, 0xbf, 0x7e, 0x3a, 0xce, 0xa9, 0x83, 0x25, 0x5b, 0x58, 0xb3, 0x1a, 0x2e, 0x05, 0x7a, 0xa4, 0x39, 0x2e, 0x67, 0xe1, 0xb0, 0x80, 0x86, 0x85, 0x05, 0xfa, 0xea, 0x21, 0x17, 0x50, 0x89, 0xa6, 0xa7, 0x8d, 0x4d, 0x25, 0x0b, 0xfd, 0x67, 0xd8, 0x26, 0x4a, 0xe7, 0x66, 0x97, 0xe5, 0x89, 0x63, 0x31, 0xa7, 0xd2, 0x16, 0xab, 0xb9, 0x5c, 0x80, 0x99, 0xb1, 0x6f, 0x99, 0x9b, 0xfd, 0xd0, 0xdd, 0xd5, 0x85, 0xde, 0x07, 0x9f, 0x8c, 0xda, 0x1d, 0x7d, 0xd7, 0x87, 0xac, 0x51, 0x12, 0xf3, 0x55, 0xcf, 0x6f, 0x94, 0x88, 0x32, 0x90, 0x96, 0x90, 0x2d, 0xa7, 0x74, 0xd0, 0x25, 0xdc, 0xc6, 0x4c, 0x9d, 0xef, 0x5a, 0x6b, 0xf2, 0x1e, 0x85, 0xfb, 0x48, 0x49, 0xbb, 0x75, 0xc4, 0x54, 0x5e, 0x82, 0xfc, 0xcd, 0xd4, 0xbf, 0xab, 0xce, 0xdc, 0xbd, 0xaa, 0x25, 0x22, 0x4d, 0x1b, 0xb3, 0x11, 0xfa, 0xe7, 0x12, 0xe8, 0xd6, 0x6c, 0x7b, 0x10, 0x7a, 0x6f, 0xe6, 0xad, 0x48, 0x58, 0x72, 0x73, 0xf3, 0x9e, 0x08, 0xba, 0x42, 0x80, 0x3b, 0xd5, 0x10, 0xf6, 0x73, 0xa0, 0x98, 0xe7, 0x4b, 0x59, 0xef, 0x9c, 0x37, 0xb1, 0xd2, 0x75, 0x6a, 0x22, 0xa2, 0xda, 0xf7, 0x82, 0xad, 0x75, 0x36, 0xd9, 0xaf, 0x9e, 0x69, 0x70, 0x99, 0x17, 0x9f, 0x2a, 0x90, 0xfa, 0xd9, 0x17, 0x39, 0xef, 0x6c, 0x47, 0x34, 0xa2, 0xa6, 0xdc, 0xe6, 0x75, 0xb4, 0x63, 0x7c, 0x72, 0xc3, 0x65, 0x2c, 0x83, 0x66, 0x38, 0xbe, 0xe5, 0x38, 0x1b, 0x4c, 0xda, 0xc2, 0x83, 0x46, 0x9e, 0x9f, 0xaf, 0xb8, 0x9d, 0xdd, 0x82, 0xd0, 0xe3, 0xa7, 0x92, 0x9b, 0xd4, 0x21, 0x7d, 0x0f, 0x1d, 0x94, 0x7c, 0x4e, 0xea, 0xcb, 0x3a, 0x29, 0x5a, 0xbd, 0xe6, 0xe3, 0x2f, 0x6c, 0x86, 0x38, 0xcb, 0x0c, 0x8f, 0x9e, 0x58, 0x68, 0xb3, 0xcb, 0x46, 0x82, 0xfb, 0x77, 0xfa, 0x79, 0x15, 0x63, 0xc4, 0xb0, 0xef, 0x9a, 0x12, 0x2d, 0x85, 0xf7, 0xe4, 0x3f, 0xf7, 0xe7, 0x80, 0x64, 0xde, 0x70, 0x67, 0x69, 0xe0, 0x73, 0x87, 0xd3, 0x82, 0x2e, 0xb2, 0x7e, 0x3e, 0x04, 0x4f, 0x84, 0xd6, 0x81, 0x50, 0x60, 0xe7, 0x99, 0x64, 0x54, 0xc1, 0x30, 0x6d, 0x08, 0x76, 0xe0, 0x34, 0x73, 0x31, 0xf6, 0x5b, 0xfe, 0xc9, 0xbd, 0x94, 0xe7, 0x96, 0x00, 0x11, 0xe4, 0x84, 0xca, 0x3c, 0x0a, 0x65, 0x70, 0xa7, 0xec, 0x8c, 0xd1, 0x46, 0x07, 0x97, 0xdd, 0xdc, 0x5e, 0x8c, 0x54, 0xb3, 0x61, 0x28, 0xd0, 0x90, 0x13, 0x73, 0x06, 0xe6, 0x6c, 0x98, 0x49, 0x4a, 0xfc, 0xf4, 0x50, 0x27, 0xd2, 0x6d, 0x38, 0xb3, 0x9c, 0x05, 0xcc, 0x21, 0x10, 0xae, 0x05, 0x19, 0x8a, 0x61, 0xcd, 0x65, 0xf6, 0x6a, 0x08, 0xed, 0xf0, 0x06, 0xd5, 0xe5, 0x2a, 0x2f, 0x11, 0x45, 0x0e, 0xb7, 0x1e, 0x79, 0xa5, 0x94, 0xe2, 0x5a, 0xb8, 0x7b, 0x12, 0x5e, 0x35, 0xb0, 0xb0, 0x0b, 0xd3, 0x1c, 0xd2, 0xb2, 0xf9, 0xa0, 0xa6, 0x59, 0xdd, 0xa9, 0xb3, 0xf9, 0xe9, 0x04, 0x61, 0xea, 0x62, 0xf4, 0xbc, 0x9b, 0x4b, 0x82, 0x75, 0x86, 0x87, 0x15, 0x29, 0x63, 0x3f, 0x42, 0xe6, 0x9c, 0x83, 0xe5, 0xec, 0x02, 0x34, 0x71, 0xb0, 0xbe, 0x21, 0x84, 0x27, 0x8a, 0x70, 0xbf, 0x40, 0x21, 0x40, 0xd4, 0xb3, 0xf3, 0x8c, 0xe0, 0xf9, 0x1e, 0x52, 0xfc, 0x9b, 0x9a, 0xf5, 0x0e, 0xb0, 0xb3, 0xe1, 0xe6, 0xa1, 0xbd, 0x6d, 0x86, 0x30, 0x03, 0x05, 0xc0, 0xb9, 0x00, 0x88, 0x07, 0xb7, 0xd2, 0xef, 0x7f, 0x89, 0xeb, 0x30, 0x56, 0x77, 0x0a, 0x61, 0x57, 0xf0, 0x69, 0x21, 0xbc, 0x15, 0x38, 0x34, 0x44, 0x7c, 0x4b, 0x6d, 0x86, 0x2d, 0x10, 0xd1, 0x85, 0xf1, 0xc3, 0xf9, 0x84, 0xcd, 0xe5, 0xb8, 0x1c, 0xc9, 0xea, 0xfe, 0x8b, 0xf5, 0x32, 0xfc, 0x4f, 0xae, 0x3a, 0x89, 0xf4, 0x1e, 0x14, 0xc5, 0x2a, 0x02, 0x14, 0xfc, 0x1a, 0xb0, 0xcd, 0xcd ],
+const [ 0xd2, 0x79, 0x94, 0x41, 0xab, 0xcc, 0x3b, 0xa3, 0xbd, 0x2a, 0xa7, 0x15, 0x89, 0x9e, 0xff, 0x2f, 0x18, 0xa1, 0x2c, 0x45, 0x3c, 0x48, 0x3e, 0x3a, 0x18, 0xbb, 0x0c, 0x99, 0xe2, 0xe9, 0x1b, 0xe1, 0xe8, 0x7a, 0xc2, 0x21, 0xd1, 0x05, 0x8b, 0xc5, 0x26, 0x84, 0xdb, 0xb0, 0x11, 0x05, 0xd6, 0x8b, 0x64, 0xa2, 0x7d, 0x5c, 0xdc, 0xb2, 0x19, 0x5a, 0xa8, 0x41, 0xdd, 0x00, 0x25, 0xbe, 0xc7, 0x60, 0xec, 0xf4, 0xc7, 0xba, 0x0e, 0x3c, 0x23, 0x4d, 0x9e, 0xf0, 0x1a, 0x6d, 0x70, 0x22, 0xc8, 0xd6, 0x21, 0x8e, 0x49, 0x40, 0x57, 0xce, 0x21, 0x33, 0x4a, 0xcd, 0xdb, 0x1d, 0x84, 0x7e, 0xf1, 0xa2, 0xe5, 0xce, 0xec, 0x33, 0xe9, 0xd7, 0xcc, 0xe2, 0x2e, 0x56, 0xaa, 0x74, 0x30, 0x5f, 0x9c, 0xb8, 0x57, 0x4f, 0xd9, 0x18, 0x35, 0x03, 0x1e, 0x6e, 0x08, 0x47, 0x50, 0x19, 0x87, 0x91, 0x62, 0x4f, 0xdb, 0xf0, 0x79, 0xb4, 0xeb, 0x3f, 0x4e, 0x2c, 0xdc, 0x9e, 0xd4, 0xee, 0xd8, 0x23, 0x1c, 0xdb, 0x0f, 0xcc, 0x75, 0x0d, 0xfc, 0xb8, 0xd7, 0xb2, 0xea, 0x97, 0x82, 0x1b, 0xb6, 0x60, 0xe2, 0x10, 0xd6, 0x42, 0xb6, 0x67, 0x9a, 0xdc, 0x71, 0xd5, 0xb2, 0xb0, 0xe0, 0x03, 0xf1, 0xd5, 0x0e, 0xe4, 0x51, 0xed, 0x65, 0x47, 0x36, 0x57, 0x15, 0xa8, 0xf7, 0xa6, 0xba, 0x4c, 0x9a, 0x51, 0x39, 0x8d, 0xdf, 0xab, 0xea, 0x72, 0x81, 0x16, 0xfd, 0x82, 0xb8, 0x74, 0x16, 0xda, 0x02, 0xdf, 0x3b, 0x7e, 0x23, 0x9a, 0xf0, 0xed, 0x6a, 0x47, 0xa0, 0xf8, 0x37, 0x5a, 0x3f, 0xd3, 0xba, 0xcd, 0x2e, 0x6d, 0xfd, 0x16, 0x5f, 0xfd, 0x25, 0x56, 0xb9, 0xdd, 0xf5, 0xd3, 0xbe, 0x9c, 0x93, 0xa8, 0x6b, 0x4f, 0x8f, 0xbb, 0x5f, 0x27, 0x21, 0xf0, 0x40, 0x49, 0xb2, 0x9c, 0x5b, 0xd9, 0x9e, 0x3d, 0x8a, 0x58, 0x39, 0x68, 0x5b, 0x31, 0x10, 0x02, 0x6e, 0x8e, 0x71, 0xb3, 0x1f, 0x70, 0x2d, 0x98, 0x65, 0xff, 0x9c, 0x38, 0xfa, 0x1f, 0xe2, 0xba, 0xbd, 0x43, 0x71, 0x55, 0x54, 0x86, 0xcf, 0x07, 0x15, 0xf8, 0x9a, 0x8a, 0x27, 0x35, 0xc9, 0x84, 0xe4, 0x3d, 0x34, 0xfe, 0x82, 0x7f, 0x57, 0x17, 0xf3, 0x37, 0x52, 0xf9, 0x09, 0xfa, 0x35, 0x0d, 0xde, 0x8f, 0x7b, 0x6b, 0x73, 0x01, 0xd4, 0x95, 0x97, 0xf2, 0x28, 0x64, 0x0b, 0x32, 0xd8, 0x42, 0xe3, 0x91, 0x47, 0x9a, 0x2f, 0xf1, 0x99, 0x8d, 0xdb, 0x9f, 0xba, 0xe7, 0xd4, 0xe3, 0xa2, 0x51, 0x6c, 0xd5, 0xd8, 0xc8, 0x00, 0x73, 0x35, 0x4d, 0xd8, 0xf1, 0xeb, 0xde, 0x4e, 0x50, 0xc6, 0xa6, 0x33, 0x32, 0xb1, 0x71, 0x6e, 0xed, 0x7b, 0x62, 0xe6, 0xde, 0xdb, 0xe8, 0xa3, 0x00, 0xb2, 0xee, 0x30, 0xbc, 0x91, 0x52, 0x43, 0x03, 0x7b, 0x99, 0x9f, 0x9b, 0xec, 0xe1, 0x3a, 0xb6, 0x19, 0x16, 0x9b, 0xc9, 0x7a, 0x69, 0x87, 0x9b, 0x86, 0xfe, 0xdc, 0x9d, 0xbe, 0xe5, 0xbd, 0x79, 0xec, 0x4c, 0xef, 0xed, 0xad, 0xf3, 0x83, 0xda, 0x2d, 0xe0, 0xb6, 0x98, 0x32, 0x53, 0x15, 0x8d, 0x5c, 0xfc, 0xe5, 0xfe, 0xab, 0x6c, 0xc1, 0x24, 0x41, 0xca, 0x85, 0x83, 0x69, 0xc7, 0x6b, 0x77, 0xd9, 0xd3, 0x74, 0x10, 0x34, 0x92, 0x0a, 0x1f, 0xd3, 0x89, 0xe3, 0x91, 0xc5, 0x1e, 0x28, 0xfc, 0x14, 0xbf, 0xd7, 0x78, 0x4a, 0x61, 0x66, 0xb0, 0x34, 0x2c, 0xa9, 0x39, 0xe6, 0x74, 0xf5, 0x22, 0xff, 0xec, 0x86, 0xcc, 0x2f, 0x16, 0x1e, 0xfb, 0xf6, 0xfe, 0xef, 0x2e, 0xae, 0x28, 0xbb, 0x2c, 0xcb, 0xc7, 0x3a, 0xe0, 0x62, 0x2f, 0xbc, 0x66, 0xe8, 0x8d, 0x0f, 0x66, 0x3d, 0xd6, 0xa3, 0xa1, 0xe8, 0xfd, 0xec, 0xc9, 0xa5, 0x69, 0x08, 0x96, 0x1d, 0xa6, 0xa2, 0x16, 0xf4, 0x5b, 0x16, 0x45, 0x08, 0x7c, 0xd5, 0xdd, 0xf8, 0xc0, 0x0c, 0x6f, 0xe4, 0x56, 0x80, 0xb3, 0x74, 0xd4, 0xbc, 0x1d, 0x1c, 0x70, 0x6f, 0xb0, 0x9e, 0x72, 0x10, 0x17, 0xd0, 0xe9, 0xc3, 0xf2, 0x9f, 0x9d, 0x80, 0x6e, 0x54, 0x46, 0x72, 0x18, 0x16, 0xfb, 0x9d, 0xf3, 0xb0, 0xed, 0xc4, 0xc7, 0x95, 0x55, 0x8a, 0xbd, 0x21, 0xab, 0xd7, 0x29, 0x22, 0x19, 0x7d, 0xa7, 0x97, 0x2f, 0x1c, 0x69, 0xb8, 0xd8, 0x43, 0xcf, 0x36, 0x8d, 0xd7, 0x38, 0xc3, 0xc8, 0xb9, 0x19, 0xd5, 0xbc, 0xa3, 0x4c, 0xa7, 0x43, 0x53, 0xaa, 0x81, 0x18, 0xec, 0xdb, 0x3a, 0x46, 0x99, 0x6d, 0xfb, 0xe0, 0x73, 0x24, 0x45, 0xf3, 0xa5, 0x91, 0x36, 0xb9, 0xcd, 0xe6, 0x08, 0x0f, 0xa6, 0x09, 0xda, 0x29, 0xe5, 0xe7, 0xb3, 0x85, 0x60, 0x0b, 0xc4, 0x1d, 0x75, 0x6f, 0xed, 0xe1, 0xaa, 0x92, 0x83, 0x64, 0x91, 0xca, 0x51, 0xd6, 0xef, 0xdc, 0xdc, 0x32, 0x1c, 0xca, 0xec, 0xb8, 0xad, 0xec, 0x47, 0x9e, 0x51, 0x42, 0xc0, 0x03, 0xf9, 0x09, 0x70, 0x24, 0x3c, 0x8c, 0x44, 0xd2, 0xf9, 0x3d, 0xb8, 0x24, 0x3e, 0x04, 0xe1, 0x69, 0x68, 0xd7, 0xb1, 0x60, 0x8c, 0x8b, 0x77, 0xac, 0x16, 0xea, 0xa5, 0x82, 0xb0, 0x05, 0xd6, 0xa5, 0x66, 0xcc, 0x0f, 0x94, 0x07, 0xdb, 0x45, 0x01, 0xce, 0x97, 0x20, 0x86, 0x41, 0x7a, 0xff, 0x94, 0x5a, 0xab, 0x3c, 0xac, 0xe5, 0xd2, 0xb1, 0xd1, 0x29, 0x2a, 0x7b, 0x3d, 0xca, 0xd8, 0xfd, 0x53, 0xee, 0x7b, 0x28, 0xd5, 0x9f, 0x04, 0xfa, 0x57, 0x71, 0xc8, 0x45, 0xf3, 0x64, 0xd3, 0xb2, 0x3f, 0x0b, 0x7f, 0x05, 0x7c, 0xee, 0x46, 0xa3, 0x10, 0x2e, 0xd5, 0x51, 0x37, 0x67, 0x61, 0x3e, 0xf5, 0xda, 0x3e, 0x44, 0x4f, 0xcc, 0xae, 0x6b, 0xba, 0x29, 0xf7, 0xaf, 0xd4, 0x6d, 0xb8, 0x03, 0x52, 0xc4, 0x7c, 0x95, 0x39, 0x70, 0x90, 0x54, 0x52, 0x6c, 0x12, 0xb0, 0xd7, 0x4f, 0x4b, 0xa0, 0x73, 0x72, 0x3f, 0xea, 0x6a, 0x55, 0x81, 0x9f, 0x13, 0x3f, 0x4c, 0xe4, 0x8f, 0x25, 0xd0, 0xf8, 0xb5, 0xcd, 0xca, 0x73, 0x4c, 0x34, 0x57, 0xcc, 0x7d, 0x2c, 0x0a, 0x1e, 0x87, 0x49, 0x3c, 0x2c, 0xb5, 0xfe, 0xa3, 0xa2, 0x8e, 0x04, 0x27, 0x9e, 0x4b, 0xfb, 0xf0, 0x6e, 0x8e, 0x54, 0xc4, 0x9c, 0x50, 0x6e, 0x90, 0x27, 0x1b, 0xff, 0x44, 0x14, 0x7a, 0xb6, 0xe4, 0x25, 0xaf, 0x1f, 0xdc, 0xe9, 0xa3, 0xc6, 0x95, 0xf5, 0x23, 0x9f, 0x45, 0x70, 0x48, 0xa5, 0x0b, 0xd5, 0x37, 0xc2, 0x3b, 0xf4, 0x0b, 0xef, 0xf7, 0x3a, 0x10, 0x9c, 0xff, 0x33, 0x32, 0x52, 0xc9, 0x4d, 0xb5, 0x97, 0xd5, 0xdf, 0x26, 0x12, 0x3b, 0x69, 0x91, 0xef, 0x86, 0x1e, 0xf4, 0x85, 0xc4, 0x9f, 0xf4, 0x36, 0xde, 0x0a, 0xcf, 0x97, 0x26, 0x33, 0x92, 0xd1, 0x2f, 0x31, 0x8c, 0x48, 0xe1, 0x1d, 0x02, 0x7a, 0xcc, 0x16, 0x24, 0x29, 0xbd, 0x88, 0x40, 0xbc, 0x8f, 0xae, 0x36, 0xe3, 0x44, 0x56, 0x2c, 0x7a, 0x55, 0xe5, 0x82, 0xb0, 0x45, 0x9a, 0x08, 0x68, 0x7c, 0x17, 0x6f, 0xdf, 0x53, 0x1d, 0xfe, 0x8f, 0x6c, 0x97, 0x86, 0x54, 0x44, 0xda, 0x98, 0xce, 0x0b, 0x2b, 0xf5, 0x06, 0xb3, 0x81, 0x46, 0x54, 0x47, 0x8d, 0x0e, 0x80, 0x7e, 0xf8, 0xdc, 0x27, 0x90, 0xec, 0xc5, 0x60, 0x48, 0xd5, 0x11, 0xa0, 0x5a, 0x69, 0x35, 0xdb, 0xf8, 0xe6, 0x02, 0xec, 0xa0, 0x9a, 0x1b, 0x37, 0x38, 0xa9, 0xac, 0x8d, 0x5c, 0x0b, 0x59, 0x50, 0xf7, 0xd4, 0x75, 0xd7, 0x10, 0xb8, 0x75, 0x13, 0xe7, 0xce, 0xa4, 0x73, 0x41, 0x94, 0x18, 0x06, 0x00, 0x34, 0xe4, 0xe0, 0xf6, 0x05, 0x8f, 0xbe, 0xfb, 0x55, 0xc5, 0xed, 0x3d, 0x66, 0x4d, 0x67, 0xd8, 0xb6, 0x3b, 0x40, 0xa7, 0x83, 0x67, 0x40, 0x59, 0x8f, 0x1d, 0xd2, 0xc7, 0x21, 0x16, 0x1c, 0x84, 0x4c, 0xa7, 0x70, 0xb6, 0x73, 0x39, 0xe3, 0x25, 0x0d, 0xf9, 0x3b, 0x92, 0xa6, 0xd1, 0x0f, 0x4a, 0x26, 0x96, 0x29, 0xfb, 0x56, 0x83, 0x2f, 0xc5, 0xa0, 0xe6, 0x83, 0x94, 0x17, 0x19, 0x67, 0xae, 0xb7, 0xb4, 0x65, 0x88, 0xed, 0x01, 0xee, 0xde, 0x5a, 0xb0, 0x41, 0x02, 0xd4, 0xcc, 0x8e, 0x75, 0xad, 0xee, 0x5b, 0xb4, 0x38, 0xb1, 0x28, 0x54, 0x8a, 0x65, 0x4e, 0x51, 0x7e, 0x08, 0x2d, 0xa4, 0xfc, 0x72, 0x86, 0x13, 0x7a, 0xcf, 0x26, 0x4d, 0xc2, 0x52, 0xc5, 0x36, 0xf6, 0x28, 0x2d, 0x80, 0xd2, 0xab, 0x9f, 0x7b, 0x32, 0xd9, 0x72, 0x2e, 0xd4, 0x04, 0xfd, 0xa6, 0x5e, 0xca, 0xb7, 0x8e, 0xa3, 0x48, 0x9d, 0x00, 0x22, 0x8b, 0xd4, 0x9b, 0xcf, 0x47, 0x90, 0xd6, 0x17, 0xcc, 0x34, 0x93, 0x1e, 0x35, 0xbb, 0xf8, 0x4b, 0xe3, 0x56, 0x7a, 0x06, 0x2a, 0x56, 0x3a, 0xc0, 0x49, 0x4d, 0x95, 0x34, 0xa0, 0x70, 0xf6, 0xed, 0x1d, 0x40, 0xef, 0x09, 0xf8, 0x6a, 0x89, 0x3c, 0xa0, 0xeb, 0xd8, 0x18, 0xf5, 0x77, 0xd2, 0x8b, 0xb7, 0x1c, 0x61, 0xa9, 0x3e, 0x23, 0xb6, 0xab, 0x6c, 0x37, 0xe1, 0x38, 0xe1, 0xc9, 0x9e, 0xe4, 0x6d, 0xb2, 0x72, 0xf7, 0xcb, 0x1a, 0xf7, 0x6f, 0x8c, 0x99, 0x74, 0x48, 0x51, 0x9d, 0xb1, 0xfa, 0x3d, 0x0c, 0x0a, 0x44, 0xaa, 0x2a, 0xc1, 0x28, 0x1b, 0xbc, 0x99, 0x37, 0x72, 0x6e, 0xa0, 0x0e, 0x64, 0x72, 0x4c, 0x21, 0x29, 0x6a, 0xc9, 0xb7, 0x78, 0x88, 0x92, 0x36, 0xb2, 0xf3, 0x3f, 0xa1, 0x5e, 0x6d, 0x9d, 0x5f, 0xd5, 0x34, 0x04, 0x3e, 0x3e, 0x25, 0xe5, 0xb7, 0xbd, 0x27, 0xa3, 0x74, 0xe8, 0xc7, 0xa4, 0x0f, 0x7b, 0x20, 0xa7, 0x1d, 0x4c, 0xfe, 0x58, 0x6b, 0x81, 0x43, 0x21, 0x87, 0x00, 0x89, 0x44, 0x82, 0x27, 0x08, 0x27, 0xf5, 0xbe, 0xba, 0xee, 0x42, 0x29, 0xbe, 0x4f, 0x1c, 0xe2, 0xfb, 0xa2, 0x4a, 0x27, 0x05, 0x38, 0xa7, 0xf0, 0x44, 0xee, 0x6e, 0x24, 0x53, 0x02, 0xb4, 0x0c, 0xa6, 0x25, 0x36, 0x08, 0x70, 0xd1, 0x55, 0x81, 0xc3, 0xdc, 0x5f, 0x1e, 0xf9, 0x4e, 0x10, 0x3b, 0x54, 0x70, 0x59, 0x97, 0xe1, 0x25, 0x5f, 0x4c, 0xa2, 0x7d, 0xc7, 0x05, 0xeb, 0x88, 0x31, 0x6b, 0x0d, 0x68, 0x02, 0xe0, 0x32, 0xaa, 0x67, 0x70, 0x88, 0xd7, 0x97, 0x04, 0xa2, 0x45, 0x58, 0xd9, 0x1b, 0x33, 0xc4, 0x31, 0x7c, 0x15, 0x4d, 0x49, 0x5f, 0x2d, 0xff, 0x8a, 0xd5, 0x5b, 0x05, 0x03, 0x06, 0x36, 0x6f, 0x17, 0x17, 0x5b, 0x32, 0x73, 0x51, 0x06, 0x70, 0x44, 0x7f, 0xdf, 0xfa, 0xa6, 0x97, 0x16, 0x14, 0x5f, 0x9d, 0xb1, 0x78, 0xcd, 0xc5, 0x25, 0x9d, 0x1d, 0xd8, 0x24, 0x38, 0xbe, 0xd8, 0xb7, 0x04, 0x15, 0xe7, 0x8c, 0xbe, 0x73, 0x65, 0x91, 0x74, 0x44, 0x59, 0xc2, 0x00, 0x89, 0x12, 0x3e, 0xd0, 0x88, 0x0e, 0xa1, 0xe8, 0xc1, 0x1a, 0x8e, 0x29, 0x25, 0xbb, 0x8b, 0xd3, 0x83, 0xcd, 0x12, 0x49, 0x43, 0x6a, 0xe4, 0x14, 0x56, 0x0d, 0xa1, 0x2b, 0x6d, 0xf7, 0x96, 0x71, 0x69, 0xd2, 0xd6, 0x80, 0x13, 0x95, 0x8c, 0xa5, 0x0e, 0xa7, 0x8f, 0x2b, 0x0a, 0x47, 0x37, 0xdd, 0x39, 0x2b, 0x70, 0xc6, 0x07, 0x67, 0x0c, 0x3b, 0x06, 0x91, 0x5e, 0x1c, 0x27, 0x23, 0x04, 0x56, 0x30, 0x20, 0x04, 0xac, 0x6a, 0xfb, 0x1b, 0xb8, 0x9a, 0xb4, 0x51, 0x2c, 0x33, 0x44, 0xd1, 0x5e, 0xca, 0x3b, 0xf8, 0x04, 0xca, 0xa8, 0xac, 0x3b, 0x69, 0x39, 0xef, 0xcf, 0xdb, 0xa3, 0xb3, 0xb6, 0xc5, 0x44, 0xf0, 0xdd, 0xf4, 0x07, 0xf5, 0x28, 0x4f, 0x89, 0xfc, 0xb4, 0x0a, 0x7a, 0x00, 0x5f, 0x1d, 0x45, 0xd3, 0x8a, 0xf5, 0xf3, 0x6b, 0x1d, 0x69, 0x4c, 0x7c, 0xcc, 0xef, 0x40, 0x4d, 0x99, 0x10, 0x86, 0xc4, 0x9a, 0x19, 0x83, 0xc2, 0xfd, 0x14, 0x6d, 0xb7, 0x49, 0xf6, 0xb0, 0x6d, 0xe6, 0x1a, 0x91, 0x28, 0xe0, 0xee, 0x11, 0xf1, 0xe8, 0xed, 0x14, 0x2f, 0x9c, 0xcd, 0xc2, 0x77, 0x08, 0xf9, 0x2e, 0xa5, 0x6c, 0x41, 0x35, 0x2c, 0x3f, 0xd0, 0xaa, 0xaa, 0x75, 0x5f, 0xb0, 0xc0, 0xfe, 0xa9, 0x66, 0x20, 0x8f, 0x1f, 0xca, 0xe7, 0xa4, 0xdc, 0xd7, 0x2e, 0xc6, 0xdb, 0xf1, 0xdb, 0x09, 0x68, 0x83, 0xbd, 0xda, 0xd4, 0xe7, 0xd9, 0xf7, 0x6d, 0x86, 0xfe, 0xbf, 0xad, 0x40, 0xa0, 0xac, 0xb2, 0x0e, 0xe3, 0x1e, 0xee, 0xe5, 0xf5, 0x5a, 0x20, 0xde, 0xa1, 0xd2, 0x83, 0x95, 0x21, 0xa7, 0x45, 0xce, 0x34, 0x6c, 0x3a, 0x5f, 0x71, 0x2d, 0xd2, 0x4a, 0xdb, 0xaf, 0x49, 0x29, 0xb5, 0xfa, 0x1d, 0xcf, 0x98, 0x15, 0xc5, 0x2c, 0xc2, 0x11, 0xa0, 0x71, 0xb1, 0x48, 0x2c, 0x75, 0xf1, 0xe7, 0x78, 0x57, 0x32, 0xaa, 0xdc, 0x66, 0x9d, 0xe7, 0xe7, 0x3d, 0x68, 0xce, 0x99, 0x32, 0xa8, 0xef, 0xd2, 0xf2, 0x67, 0xfd, 0x0b, 0x65, 0xf7, 0xd1, 0x44, 0xd8, 0x85, 0xb1, 0x3d, 0x5a, 0xf1, 0xd3, 0xe9, 0x66, 0xde, 0x1d, 0x20, 0xc3, 0x05, 0x2f, 0x94, 0xa9, 0xce, 0xa3, 0x06, 0x25, 0x21, 0x93, 0xba, 0xbe, 0x79, 0x5c, 0x28, 0x59, 0x3b, 0xa2, 0xf4, 0x5a, 0x47, 0x95, 0x20, 0x0c, 0xcc, 0x72, 0x81, 0x43, 0x60, 0x4c, 0x6f, 0x40, 0x50, 0x0c, 0xc1, 0xd4, 0x34, 0xb7, 0xf9, 0xc9, 0xc7, 0xef, 0xbb, 0x7d, 0xf6, 0xbd, 0x84, 0xd0, 0x37, 0x8d, 0x98, 0x40, 0x1c, 0x7a, 0x3c, 0x53, 0x28, 0xcc, 0x26, 0x36, 0xe1, 0xbf, 0x32, 0xa3, 0x26, 0x87, 0x56, 0x07, 0xc3, 0x90, 0xd8, 0xe5, 0x43, 0x0a, 0xbe, 0x75, 0x06, 0xa5, 0x87, 0x92, 0x93, 0x99, 0x18, 0xd3, 0x2e, 0xea, 0xf9, 0xf7, 0xae, 0xea, 0xc1, 0x86, 0x89, 0xff, 0xcf, 0xb5, 0x31, 0xa6, 0x3b, 0x8a, 0xa3, 0xb8, 0x0c, 0x42, 0x3c, 0xed, 0xac, 0xf0, 0xcf, 0x9e, 0x99, 0x66, 0xf6, 0xcf, 0x5c, 0x58, 0xa5, 0x6c, 0xbf, 0xbf, 0x05, 0xd3, 0x3b, 0x7c, 0x7f, 0x93, 0xb0, 0x3e, 0x16, 0x73, 0x59, 0xa5, 0xfb, 0xb7, 0xfe, 0xa8, 0x5b, 0x9e, 0x6b, 0x34, 0x7c, 0x2f, 0x22, 0x15, 0x08, 0x35, 0x4d, 0x1a, 0xa9, 0x89, 0xf6, 0x74, 0xd5, 0x8f, 0x7a, 0x60, 0xec, 0x03, 0x3b, 0x06, 0x80, 0xf6, 0x96, 0xa0, 0xf3, 0x13, 0x15, 0xde, 0x48, 0x27, 0xe5, 0x89, 0x33, 0xe1, 0x8a, 0x68, 0x72, 0xd6, 0xd1, 0x60, 0x60, 0xc7, 0x06, 0xde, 0xc8, 0x27, 0x68, 0x7a, 0xf7, 0xd8, 0xda, 0xd4, 0x15, 0x36, 0xdb, 0xc2, 0xb5, 0x56, 0xb8, 0xae, 0xaa, 0x8f, 0x00, 0x39, 0x1c, 0x3a, 0x39, 0x24, 0xdc, 0xb7, 0xd1, 0x71, 0xf5, 0xb1, 0x58, 0xc5, 0x84, 0xa2, 0xec, 0x11, 0xc9, 0x99, 0xf4, 0x71, 0x7d, 0x3b, 0x11, 0x55, 0x66, 0x07, 0x51, 0xde, 0x2a, 0xdf, 0xa6, 0x8b, 0x61, 0xc4, 0x97, 0x14, 0xed, 0xe2, 0x36, 0x96, 0x8e, 0xcc, 0x52, 0xf1, 0xb1, 0x08, 0xed, 0x6e, 0x89, 0xce, 0xf0, 0xa6, 0x61, 0x0d, 0x1e, 0x9f, 0x31, 0xaf, 0x47, 0x37, 0x6f, 0x1e, 0xbe, 0xc6, 0x27, 0x07, 0x0d, 0xff, 0x4e, 0x5e, 0xe6, 0x17, 0x54, 0xa2, 0x5d, 0x2a, 0xf8, 0x62, 0x55, 0xda, 0x60, 0x00, 0x38, 0x39, 0x69, 0xb5, 0xec, 0xe9, 0x3c, 0xd5, 0x02, 0x81, 0x22, 0x54, 0x30, 0x33, 0x99, 0x8a, 0x01, 0xac, 0xa7, 0x33, 0xcb, 0x3c, 0x6e, 0xba, 0xe2, 0x37, 0x01, 0xb7, 0x0b, 0x9b, 0x76, 0xb6, 0x33, 0xf2, 0x3c, 0x3a, 0x61, 0x7a, 0xaf, 0x01, 0xea, 0x84, 0xea, 0x8a, 0xe4, 0x1a, 0xdc, 0xd5, 0xdc, 0xe4, 0x9f, 0x6a, 0xcc, 0x4d, 0x04, 0x9c, 0x47, 0xe1, 0x73, 0x0f, 0xf7, 0xf9, 0xf2, 0x78, 0x49, 0x9b, 0x83, 0xa4, 0x67, 0x9c, 0xb3, 0xbc, 0x67, 0x07, 0x70, 0xc7, 0xc1, 0xc3, 0x1b, 0x70, 0x07, 0x6f, 0xde, 0x09, 0xd0, 0x91, 0x40, 0xd1, 0xf6, 0xf0, 0xf6, 0x72, 0x01, 0x3e, 0xfc, 0xce, 0xe2, 0xfa, 0xe5, 0xfb, 0xe5, 0x95, 0x70, 0x8c, 0xe1, 0xd4, 0x5b, 0x13, 0xb1, 0x75, 0x7c, 0xe4, 0xe8, 0x15, 0x0d, 0x1b, 0xc1, 0x51, 0x48, 0xe0, 0x55, 0x2c, 0x34, 0xe9, 0x11, 0xb0, 0xbe, 0x41, 0x66, 0xd9, 0x0b, 0x48, 0xc2, 0xae, 0x0d, 0xfc, 0xc0, 0xb1, 0x54, 0x76, 0x9c, 0x79, 0x27, 0xb7, 0xe9, 0x9e, 0xd4, 0xa5, 0x86, 0xd5, 0x44, 0x51, 0xce, 0x5c, 0xd2, 0x7b, 0x0f, 0x99, 0x5d, 0x58, 0x3d, 0xfe, 0x9c, 0x93, 0xe8, 0x2f, 0xb2, 0x91, 0x6c, 0x67, 0x03, 0xf9, 0x68, 0x18, 0x45, 0x74, 0x71, 0xd1, 0xda, 0xb1, 0x07, 0x65, 0x5d, 0xad, 0xc7, 0x4a, 0x7b, 0x31, 0xe3, 0x3f, 0x04, 0x9c, 0xd0, 0x31, 0x41, 0xe2, 0x3e, 0x60, 0x89, 0xd5, 0x4d, 0xbe, 0x0f, 0xa3, 0xfe, 0x97, 0xfe, 0xa0, 0xe7, 0x77, 0xc8, 0x46, 0x2c, 0x49, 0xba, 0x7a, 0xaa, 0xbc, 0xd5, 0x11, 0x75, 0xeb, 0xd9, 0x93, 0x85, 0x3c, 0xa2, 0x3f, 0xac, 0x88, 0xb7, 0x4f, 0xcb, 0x7d, 0x21, 0x7d, 0x46, 0x41, 0x79, 0xc5, 0xb5, 0x58, 0x45, 0x6d, 0xdd, 0xc8, 0x85, 0x43, 0xde, 0x7b, 0x88, 0x26, 0xad, 0xe4, 0x04, 0xc7, 0xc5, 0xe6, 0x66, 0xb1, 0x1a, 0xf1, 0x67, 0x87, 0x4f, 0x6e, 0xe0, 0x8d, 0x28, 0x5d, 0xdf, 0x6a, 0x42, 0x3c, 0xfa, 0x2d, 0x02, 0x2b, 0xe3, 0x8d, 0xcb, 0x4f, 0x3d, 0x75, 0x74, 0x74, 0xae, 0xc0, 0xf9, 0xf6, 0x36, 0x41, 0x70, 0xe1, 0xbf, 0x06, 0x3f, 0x57, 0xf5, 0xdd, 0x8d, 0x32, 0x57, 0x18, 0xf6, 0xeb, 0x8e, 0x8e, 0x83, 0xbb, 0xfe, 0xe2, 0xd9, 0xff, 0x9c, 0x08, 0xb0, 0xe1, 0xff, 0x04, 0x87, 0x35, 0xb9, 0xf5, 0x96, 0xa1, 0xe7, 0x53, 0x05, 0x01, 0x07, 0x75, 0x5b, 0x09, 0x0a, 0x56, 0x39, 0x2c, 0xaa, 0x98, 0x48, 0xbd, 0xfe, 0xc9, 0x70, 0x55, 0x4c, 0xe6, 0x4b, 0x74, 0x1e, 0x1d, 0xd9, 0x6b, 0x98, 0xd7, 0x75, 0x79, 0x08, 0xf6, 0x07, 0x34, 0xbf, 0x5b, 0x7c, 0x2a, 0x20, 0xac, 0x73, 0xc9, 0xf6, 0x54, 0x39, 0x7c, 0x0b, 0xcb, 0xf8, 0x17, 0xf6, 0x17, 0x2b, 0x75, 0x34, 0x93, 0x55, 0x5f, 0x7a, 0xef, 0xf3, 0xb0, 0x4a, 0x78, 0xaf, 0xb7, 0xc5, 0x99, 0xd6, 0xdd, 0xc0, 0xa2, 0x0c, 0x88, 0x19, 0xc9, 0x3f, 0x3f, 0x4b, 0x6f, 0xd9, 0x0e, 0x41, 0xa4, 0x3a, 0x2c, 0x68, 0xec, 0x65, 0xdb, 0x08, 0x43, 0xf9, 0x90, 0xd4, 0x60, 0x64, 0x54, 0xc0, 0x37, 0x53, 0x6a, 0x12, 0xc1, 0x6c, 0x32, 0xbc, 0xff, 0x40, 0x4d, 0xe9, 0x3d, 0x7b, 0x02, 0xd6, 0x94, 0x5e, 0xe0, 0xe3, 0xb2, 0x70, 0xa5, 0xea, 0xde, 0x70, 0x5f, 0xcf, 0x36, 0x8d, 0xd1, 0x58, 0x3b, 0xda, 0x18, 0x3f, 0x90, 0xfc, 0x8f, 0x86, 0xff, 0x25, 0xef, 0x0b, 0xbd, 0x47, 0xbb, 0x5c, 0xef, 0x81, 0xdb, 0xcc, 0x6c, 0xde, 0x86, 0xc7, 0xc5, 0x3e, 0x66, 0x62, 0x83, 0x94, 0xf7, 0x36, 0xaf, 0x52, 0x31, 0x6f, 0x98, 0x22, 0x66, 0x20, 0xd0, 0xd7, 0x6d, 0xda, 0x78, 0xa3, 0x00, 0x7c, 0xbd, 0x8a, 0x63, 0x4c, 0xa3, 0x16, 0x46, 0x47, 0x02, 0x4d, 0xed, 0xb6, 0xcd, 0xe0, 0x8e, 0x02, 0x9a, 0xa5, 0xfb, 0xc9, 0x5f, 0x47, 0x80, 0x31, 0x7a, 0x3d, 0x0f, 0x7d, 0xf5, 0xf8, 0x9a, 0xde, 0x07, 0x61, 0xc1, 0x8b, 0xde, 0x82, 0xad, 0x13, 0x9b, 0x83, 0x3c, 0xf2, 0x9f, 0xd9, 0x5e, 0x63, 0x05, 0xba, 0xbf, 0x76, 0x6f, 0xd4, 0xa6, 0x62, 0x06, 0x3e, 0x1d, 0x1c, 0xbc, 0xaf, 0x52, 0x29, 0xd5, 0xee, 0x3d, 0xb0, 0xa5, 0x89, 0x83, 0xd3, 0x9b, 0xca, 0x9a, 0x3f, 0x7e, 0xe7, 0x2e, 0x02, 0xf7, 0x79, 0xc4, 0x9e, 0x50, 0x2f, 0x9e, 0x5b, 0x7b, 0xc4, 0xde, 0xe1, 0x56, 0x2e, 0xee, 0x05, 0x2d, 0x19, 0x1e, 0xe4, 0x80, 0x93, 0x8f, 0x2e, 0x07, 0x09, 0x51, 0xc5, 0xf4, 0x72, 0xc8, 0x87, 0x78, 0xca, 0x54, 0x67, 0x88, 0xc2, 0x30, 0xc3, 0xe1, 0xb6, 0x9b, 0xf2, 0x4a, 0xdf, 0x36, 0x1c, 0x19, 0xca, 0xae, 0x4e, 0xf8, 0x08, 0x9a, 0xcd, 0xe9, 0x28, 0xa7, 0xab, 0x88, 0xe2, 0xf2, 0x99, 0x90, 0x95, 0xb5, 0xfc, 0xa1, 0xf4, 0x26, 0x43, 0x41, 0xfb, 0x9c, 0x77, 0x20, 0x29, 0xf4, 0x13, 0xa0, 0xe9, 0x33, 0x17, 0x94, 0x51, 0x6c, 0x58, 0x48, 0x0e, 0xe5, 0x1a, 0xc3, 0x9f, 0x75, 0xe0, 0x48, 0xc2, 0x30, 0x83, 0x23, 0x2c, 0x47, 0x82, 0xa2, 0x7d, 0x29, 0x99, 0x61, 0x73, 0xee, 0x95, 0xca, 0x5e, 0xf6, 0x66, 0xdd, 0xd4, 0xcd, 0x76, 0x2d, 0xa5, 0x52, 0x39, 0x2b, 0x11, 0x19, 0x06, 0xa7, 0x39, 0x0d, 0x25, 0x94, 0xd4, 0x5a, 0x29, 0x0c, 0x23, 0x8a, 0x7f, 0x94, 0x27, 0xed, 0x48, 0xa0, 0x11, 0x3f, 0x64, 0x5a, 0xfa, 0x85, 0xcf, 0x9f, 0xd4, 0x38, 0x31, 0x4a, 0xa1, 0xa5, 0xb0, 0xb6, 0xe3, 0x94, 0x09, 0x7e, 0x53, 0x28, 0xdf, 0x87, 0xd5, 0x06, 0x53, 0x41, 0xac, 0xb9, 0xd4, 0x29, 0xea, 0x56, 0x38, 0x93, 0x2b, 0x5b, 0x0c, 0xa6, 0x83, 0xdd, 0x29, 0xa8, 0xb5, 0xe3, 0x88, 0x7c, 0xa6, 0x0d, 0x58, 0x68, 0x11, 0x79, 0x4d, 0x1c, 0x7b, 0xe6, 0x3a, 0xf0, 0x6a, 0x1a, 0xe2, 0x6e, 0xd2, 0x82, 0x0c, 0x10, 0xd0, 0x19, 0xd5, 0x4a, 0x9a, 0x8a, 0x4a, 0xcb, 0xb7, 0x99, 0x36, 0x01, 0x6b, 0xbf, 0x39, 0xdb, 0x76, 0x14, 0x1a, 0xd2, 0xfe, 0x73, 0x5e, 0x2a, 0xc9, 0xd8, 0x1a, 0x75, 0xaf, 0x0c, 0x05, 0x5a, 0x4f, 0x85, 0xd1, 0x94, 0x02, 0x87, 0xbc, 0x3d, 0x0d, 0x90, 0x62, 0x4d, 0x1b, 0xf3, 0xd5, 0x5e, 0xea, 0xc3, 0xef, 0xb2, 0x44, 0xf2, 0xe7, 0x76, 0x31, 0xba, 0x23, 0x48, 0x6b, 0x3c, 0x4d, 0xf8, 0x12, 0x68, 0xa9, 0x8b, 0xa1, 0x1c, 0xa6, 0x86, 0x21, 0x90, 0xb3, 0x69, 0x9c, 0xf1, 0x53, 0x79, 0xd5, 0x4c, 0x74, 0xc2, 0x36, 0xae, 0xfd, 0x5d, 0x0a, 0x8a, 0xa6, 0xef, 0xec, 0x5a, 0x0c, 0x72, 0x7f, 0x89, 0x05, 0x38, 0x60, 0x91, 0x30, 0x2c, 0x59, 0x61, 0xd1, 0x5c, 0xd8, 0x01, 0xdc, 0xb4, 0x9f, 0x78, 0x50, 0x0c, 0xbc, 0xee, 0xc6, 0x66, 0xbc, 0x0e, 0x4a, 0x70, 0x1c, 0xae, 0x69, 0x51, 0x00, 0xb2, 0x8b, 0xa1, 0x27, 0x2d, 0x84, 0xb9, 0x1f, 0xca, 0x65, 0x2e, 0xb5, 0x6b, 0x98, 0x98, 0xb0, 0x0f, 0x2c, 0x98, 0xbf, 0xf9, 0x6d, 0x19, 0xaf, 0x0f, 0xb8, 0xd5, 0xe1, 0x80, 0x8d, 0x1b, 0xfc, 0xa9, 0xe6, 0xd0, 0xdf, 0x3a, 0xc7, 0xb5, 0xda, 0x94, 0x17, 0xe7, 0x1d, 0x76, 0xae, 0xac, 0x70, 0xd9, 0xaf, 0x6c, 0x25, 0x18, 0x18, 0xfe, 0x4b, 0x54, 0x97, 0x26, 0x25, 0x17, 0xa0, 0x5b, 0xdb, 0x37, 0xbc, 0xcd, 0x6e, 0xfe, 0x24, 0xa6, 0xf1, 0x87, 0x8e, 0x90, 0xf7, 0x6b, 0x47, 0x78, 0x48, 0x9e, 0x82, 0x92, 0xd8, 0x93, 0xf0, 0x9e, 0xf9, 0xa7, 0x90, 0x69, 0xcf, 0xbc, 0xc9, 0x96, 0x04, 0x24, 0xb6, 0x9e, 0xbe, 0xc2, 0xc1, 0x16, 0xce, 0x6b, 0x73, 0x31, 0x2b, 0x92, 0x8a, 0x85, 0x9e, 0x25, 0x4c, 0x12, 0xbe, 0xb2, 0x1c, 0x80, 0x1f, 0xce, 0x4b, 0xa8, 0xc7, 0xb7, 0x30, 0x56, 0xe1, 0x38, 0x7b, 0x4d, 0xb6, 0xcd, 0xc6, 0x8c, 0xd8, 0x08, 0x6d, 0xd0, 0xa0, 0x33, 0xa0, 0x5a, 0xdb, 0x37, 0xb6, 0xf2, 0xc1, 0xbd, 0xc4, 0x2c, 0x27, 0x92, 0x6f, 0xea, 0xf5, 0x50, 0xfe, 0x22, 0xd9, 0x3b, 0xb4, 0xe2, 0x3d, 0x69, 0x5c, 0x91, 0x77, 0x26, 0x25, 0x77, 0x40, 0x96, 0xb0, 0x80, 0x68, 0x9c, 0x68, 0x3c, 0xc8, 0xfb, 0x12, 0x2b, 0x77, 0xbb, 0xa4, 0x38, 0x41, 0xcf, 0x5b, 0x83, 0x54, 0xf4, 0x08, 0x63, 0x3d, 0xdc, 0xab, 0xac, 0x13, 0x8c, 0x42, 0x2d, 0xf2, 0x03, 0xe3, 0x7d, 0xab, 0x1c, 0x09, 0xf8, 0xba, 0xb5, 0x2c, 0x04, 0x79, 0x11, 0x94, 0x99, 0x93, 0x7b, 0x6e, 0x00, 0xba, 0x2c, 0x20, 0xda, 0x9d, 0x6f, 0xda, 0x65, 0x14, 0x03, 0x6d, 0xfb, 0x9e, 0xc1, 0x61, 0xdb, 0x0e, 0x7e, 0x41, 0x2c, 0x81, 0x33, 0x3a, 0x3f, 0x93, 0x5c, 0xe5, 0x15, 0xd3, 0x9d, 0x60, 0x21, 0x74, 0xab, 0xa3, 0x4e, 0x45, 0x6a, 0x11, 0x44, 0xe3, 0x53, 0x4e, 0xe7, 0x2c, 0x19, 0x51, 0x21, 0xf8, 0x8c, 0xba, 0xe2, 0x04, 0xbd, 0x65, 0x65, 0x2f, 0x63, 0x3f, 0xb4, 0xe9, 0x7d, 0x58, 0x6e, 0xe8, 0x39, 0x3a, 0xc8, 0x1c, 0x15, 0x7a, 0xd2, 0xe6, 0x44, 0x8c, 0xfc, 0x85, 0x53, 0xdb, 0xd8, 0xd1, 0x0c, 0x19, 0x21, 0x2b, 0x9b, 0xd4, 0xfd, 0xb4, 0xef, 0x4b, 0x7f, 0xbd, 0x63, 0x7f, 0x70, 0x7f, 0x9e, 0x8d, 0x4f, 0x0c, 0xb7, 0x3a, 0x96, 0x86, 0x9d, 0xd0, 0x3f, 0x8f, 0xb7, 0x29, 0x87, 0x00, 0xc7, 0x09, 0xf2, 0xde, 0x14, 0xb1, 0x8f, 0x8a, 0xc8, 0xb0, 0x7d, 0x37, 0x97, 0xfd, 0xae, 0xa1, 0xa1, 0x43, 0xeb, 0xfd, 0x9a, 0x7c, 0x18, 0x2b, 0x28, 0xc1, 0xba, 0x33, 0x8c, 0x60, 0xb6, 0xef, 0x85, 0x30, 0x5b, 0x05, 0x71, 0x21, 0xa3, 0x19, 0xb6, 0x17, 0xb6, 0x40, 0x60, 0xf9, 0xb0, 0xb7, 0x0c, 0x04, 0xa4, 0xd5, 0x04, 0x66, 0xe1, 0x3e, 0xab, 0x08, 0x74, 0x5a, 0x1c, 0xab, 0xee, 0x05, 0x0e, 0x36, 0x67, 0x88, 0xfb, 0x4e, 0xc2, 0xc8, 0x81, 0x28, 0x33, 0xbe, 0x08, 0x9b, 0xff, 0x27, 0xa5, 0x7a, 0x83, 0x7d, 0x3e, 0x20, 0x78, 0x25, 0xef, 0x4c, 0x75, 0xea, 0xad, 0x30, 0xb5, 0xaa, 0x29, 0xc4, 0x1b, 0x4f, 0xf7, 0x60, 0x73, 0x01, 0xf0, 0x8a, 0xfb, 0x9b, 0xd5, 0x0d, 0x22, 0x5b, 0x35, 0x4b, 0x8f, 0xdd, 0x90, 0xd3, 0x65, 0x4a, 0xbc, 0x36, 0xc6, 0xcd, 0x88, 0x17, 0x96, 0x46, 0xa0, 0x82, 0x81, 0x43, 0xb0, 0x7f, 0x3f, 0x2c, 0xcc, 0xe6, 0x16, 0xbd, 0x10, 0x74, 0xa1, 0xb9, 0x83, 0x1f, 0xd1, 0xdd, 0x41, 0xa7, 0x31, 0x13, 0xda, 0x6e, 0x6e, 0xe9, 0xf5, 0x89, 0x16, 0x41, 0x39, 0x17, 0xa0, 0x4a, 0x6d, 0xd1, 0xad, 0xaf, 0xdd, 0xe3, 0x8d, 0x0e, 0x00, 0xfb, 0x05, 0xab, 0x59, 0x9f, 0x4f, 0x66, 0x9b, 0xc3, 0x63, 0xea, 0x10, 0x9b, 0x75, 0x28, 0x3b, 0xae, 0xbf, 0x04, 0xbd, 0x2c, 0x80, 0x4d, 0x75, 0x81, 0x45, 0xf3, 0xeb, 0x2a, 0x67, 0x74, 0xef, 0xc7, 0xd5, 0x98, 0x7d, 0x72, 0x13, 0x5e, 0xe4, 0x50, 0x83, 0x36, 0x27, 0x65, 0xe4, 0x70, 0xa4, 0xad, 0x18, 0xf5, 0xf3, 0x68, 0x2a, 0x35, 0x11, 0xb5, 0x8f, 0x60, 0xbe, 0x62, 0xac, 0xd9, 0x23, 0x03, 0x99, 0xe8, 0xb8, 0x41, 0x25, 0xaf, 0x65, 0x75, 0x1a, 0x5f, 0xe8, 0x76, 0xc2, 0xab, 0x76, 0xae, 0xa9, 0x7d, 0xa5, 0x74, 0xa5, 0xe8, 0x89, 0x96, 0x14, 0x5f, 0x1d, 0x34, 0x65, 0x24, 0xe5, 0xd5, 0xda, 0x02, 0xd2, 0xb4, 0x8b, 0x3f, 0x66, 0x5b, 0xaf, 0xcd, 0x18, 0x73, 0x17, 0xc0, 0xfa, 0xdb, 0xfb, 0x05, 0x99, 0xf7, 0xf9, 0x50, 0x25, 0x4b, 0x5b, 0x56, 0xd2, 0x48, 0x99, 0x3d, 0x7d, 0x65, 0x1e, 0x50, 0x93, 0x72, 0x4f, 0xf8, 0x2f, 0x29, 0xca, 0xe7, 0x82, 0x07, 0xeb, 0x97, 0x78, 0x5a, 0x95, 0xf3, 0x98, 0x9a, 0x2f, 0x54, 0x2d, 0xfc, 0xec, 0xae, 0xa3, 0x45, 0x50, 0x0c, 0x33, 0xdc, 0xf0, 0x39, 0xc3, 0x24, 0x79, 0xc0, 0x07, 0x08, 0xf3, 0x17, 0xed, 0xd8, 0x47, 0x18, 0x38, 0x53, 0xff, 0xb0, 0x6a, 0x05, 0x4e, 0xdb, 0xe8, 0xd3, 0x50, 0xd0, 0x59, 0xd4, 0x92, 0x78, 0x4f, 0x62, 0xd5, 0x25, 0x29, 0x71, 0x0f, 0x81, 0x38, 0x20, 0xb3, 0xc5, 0x20, 0x8e, 0x32, 0x2b, 0x81, 0xef, 0xc2, 0xa5, 0xd7, 0xdf, 0x5e, 0xcf, 0x9f, 0xf5, 0x0e, 0x22, 0xbc, 0x9c, 0x68, 0x6b, 0x18, 0x1e, 0x57, 0x7c, 0x8e, 0x02, 0x1b, 0x22, 0x08, 0x98, 0x91, 0x57, 0xe4, 0xd2, 0xb5, 0xb8, 0x9d, 0x55, 0x65, 0x39, 0xa7, 0xd0, 0x68, 0x17, 0x9a, 0x8d, 0xae, 0x0e, 0x93, 0x46, 0xd9, 0xcd, 0xd7, 0x39, 0xfd, 0xa7, 0xba, 0x7e, 0xa4, 0x8b, 0xc0, 0x99, 0x16, 0x36, 0x01, 0x4c, 0xd7, 0xa7, 0xd2, 0xaf, 0x70, 0xd3, 0xa1, 0x82, 0x72, 0x9b, 0x21, 0xc1, 0xb9, 0xfb, 0xa8, 0x79, 0xee, 0x84, 0xd5, 0xdb, 0x4f, 0x0c, 0x75, 0x8e, 0xb3, 0xa4, 0xa7, 0x4a, 0xc8, 0xca, 0x3f, 0xa3, 0xa0, 0xe0, 0x69, 0x22, 0x6c, 0xdd, 0x8f, 0x9a, 0x87, 0x43, 0x7c, 0xb9, 0xb6, 0x51, 0xc1, 0xde, 0xae, 0x79, 0x57, 0x2a, 0xd6, 0x14, 0x87, 0xda, 0x4f, 0x55, 0x07, 0xd4, 0x32, 0x7b, 0x66, 0x7f, 0x18, 0x4b, 0xa9, 0xd8, 0xe0, 0xbe, 0x37, 0xc3, 0xac, 0xf7, 0xf2, 0x9e, 0x2d, 0x77, 0xa7, 0x1c, 0x21, 0x94, 0xa8, 0x51, 0x19, 0x27, 0xb7, 0x09, 0x80, 0x86, 0x26, 0x5e, 0xd9, 0xb2, 0x3d, 0x8a, 0x48, 0xd1, 0xdc, 0xf9, 0x54, 0xde, 0x61, 0xa3, 0xeb, 0x9f, 0xcc, 0x98, 0xa6, 0xd7, 0x22, 0xdc, 0x4f, 0xbe, 0x0f, 0x76, 0xa1, 0xae, 0xce, 0xc4, 0x4e, 0x1f, 0x4e, 0x11, 0x47, 0xd5, 0x8d, 0x69, 0x37, 0x58, 0x48, 0xac, 0x50, 0xa5, 0xd7, 0xe2, 0x4b, 0x23, 0x53, 0xce, 0xaa, 0xd8, 0xf9, 0xc6, 0x41, 0xdd, 0xd3, 0xc2, 0xf4, 0x0f, 0x95, 0xb2, 0xc2, 0x08, 0xc5, 0x15, 0x03, 0x4e, 0x1e, 0xc7, 0xed, 0xc9, 0x37, 0x1a, 0x5d, 0x7b, 0x60, 0x29, 0xd5, 0x6b, 0xcc, 0x69, 0xc0, 0xe2, 0xf6, 0x81, 0xfe, 0xda, 0x3d, 0x5c, 0x9c, 0xb4, 0xd1, 0x7c, 0xe3, 0x29, 0xd3, 0x91, 0x95, 0x83, 0xb8, 0x4a, 0x73, 0x0d, 0xef, 0x6b, 0x02, 0xc8, 0xc3, 0x20, 0x8f, 0x5f, 0x82, 0x90, 0x71, 0x5d, 0xdf, 0xb6, 0x8e, 0x9e, 0x95, 0x6c, 0x21, 0x03, 0x4d, 0xc9, 0xba, 0x6a, 0xc2, 0xad, 0x86, 0xde, 0x23, 0x9a, 0xd0, 0x0a, 0xb9, 0xc6, 0xc8, 0xf4, 0xc9, 0x6e, 0x83, 0xe8, 0xbc, 0x6c, 0x44, 0xb1, 0x7d, 0x0c, 0xfa, 0x10, 0x23, 0x1c, 0x09, 0x66, 0xd0, 0x42, 0x4d, 0xb4, 0xd8, 0x93, 0x5c, 0xc5, 0x26, 0x60, 0x0c, 0xaa, 0xdc, 0x53, 0x36, 0x67, 0x3a, 0xbb, 0xb9, 0xec, 0xc1, 0x25, 0xc1, 0x47, 0x98, 0x2c, 0x49, 0x17, 0x2e, 0x92, 0xde, 0x44, 0x21, 0x8f, 0xa6, 0xed, 0x5f, 0x68, 0xa2, 0xa2, 0x8b, 0x44, 0x30, 0xd4, 0xa2, 0x3c, 0xd4, 0x89, 0xde, 0xb1, 0x37, 0x54, 0xda, 0xe2, 0x70, 0x85, 0xf8, 0xbd, 0x83, 0x9d, 0x00, 0xf6, 0x27, 0x05, 0x09, 0x57, 0xcd, 0xff, 0x9d, 0x57, 0xdd, 0xdc, 0x18, 0xed, 0x43, 0x70, 0x51, 0xa6, 0x2a, 0xc3, 0x7c, 0xf6, 0x07, 0x09, 0x4f, 0xcb, 0xda, 0xd4, 0x64, 0x68, 0xb1, 0x89, 0xdf, 0x71, 0x6d, 0x10, 0x50, 0x42, 0xc8, 0xd0, 0xdb, 0x85, 0x97, 0xdb, 0x96, 0x04, 0x4d, 0x65, 0x32, 0xbb, 0xc1, 0x7b, 0xde, 0x32, 0x31, 0xf2, 0x68, 0x0a, 0x86, 0x9d, 0xa5, 0xd5, 0xd9, 0xc3, 0x14, 0x2b, 0x37, 0xcf, 0xbe, 0xfa, 0xa1, 0x4a, 0x60, 0x1d, 0x57, 0x07, 0xcc, 0x30, 0x57, 0x9d, 0x8d, 0xa3, 0x20, 0x1a, 0xca, 0x0e, 0xbb, 0xf6, 0x6d, 0xc4, 0xfc, 0x46, 0x83, 0xab, 0x06, 0x32, 0xe6, 0x4b, 0x0d, 0xa9, 0x1a, 0x24, 0x60, 0x54, 0x76, 0x45, 0xa6, 0xc8, 0x84, 0x1a, 0x67, 0xff, 0xaa, 0x86, 0xcf, 0x09, 0x09, 0x31, 0xaf, 0xff, 0xa5, 0x24, 0xc5, 0x39, 0xc6, 0x93, 0x3d, 0xc0, 0x9f, 0xf9, 0x77, 0x06, 0x2e, 0x6b, 0x0b, 0xd5, 0x63, 0x25, 0x0b, 0x86, 0x84, 0x6a, 0x88, 0x73, 0xd0, 0x8b, 0x57, 0xaf, 0x63, 0x45, 0x14, 0xf4, 0x59, 0x4f, 0x68, 0xdc, 0x36, 0x34, 0x88, 0x54, 0x86, 0x5f, 0xfe, 0x4e, 0xc0, 0x74, 0xac, 0xb7, 0x70, 0xe7, 0x0e, 0xa9, 0x95, 0xc7, 0xbf, 0xe1, 0x48, 0xda, 0x3f, 0x73, 0x9f, 0xef, 0xf3, 0xbc, 0xd1, 0x70, 0x6d, 0x99, 0x9b, 0x37, 0xee, 0xd6, 0xe2, 0xa2, 0x29, 0xea, 0x99, 0xea, 0x4a, 0xe1, 0xe5, 0xb0, 0x37, 0x99, 0x7f, 0xd9, 0x16, 0x31, 0x5b, 0x9c, 0x0f, 0xbf, 0x87, 0xd9, 0x53, 0x41, 0x55, 0xad, 0x5d, 0xd7, 0xbc, 0x43, 0x78, 0x2f, 0xfc, 0xed, 0x81, 0x40, 0x81, 0x73, 0xee, 0x3b, 0x0a, 0xab, 0x0f, 0xbe, 0x0a, 0x49, 0x94, 0x4b, 0x4e, 0xf9, 0x50, 0xfa, 0xe1, 0xab, 0x3c, 0x6a, 0x2d, 0x2e, 0xbf, 0xfd, 0x62, 0x01, 0x2c, 0x45, 0x1c, 0x66, 0x8d, 0xb9, 0x40, 0xb7, 0x9f, 0xad, 0x26, 0xfd, 0x1d, 0x81, 0xfe, 0xbf, 0x41, 0x18, 0x6c, 0x18, 0x89, 0x8b, 0x76, 0x0c, 0xb7, 0x1f, 0xa0, 0x1c, 0x1b, 0x75, 0x55, 0x18, 0x14, 0x01, 0x89, 0x35, 0xd5, 0xbd, 0x9d, 0x60, 0x65, 0x1f, 0x83, 0xd1, 0xe9, 0x48, 0x22, 0xe2, 0x26, 0x7e, 0xfc, 0x22, 0x42, 0xdc, 0x0e, 0xa5, 0xca, 0x48, 0xf7, 0x9f, 0xfa, 0xa6, 0x5d, 0x31, 0x38, 0x4b, 0x8d, 0x83, 0xe1, 0xb5, 0x61, 0x13, 0x48, 0x79, 0x67, 0x4d, 0xfc, 0x7c, 0x3f, 0x5b, 0x4a, 0x66, 0x45, 0x3e, 0x03, 0x54, 0x71, 0x1e, 0x80, 0xce, 0x7b, 0xde, 0xe2, 0xf8, 0x42, 0xf4, 0x9e, 0x0c, 0x6e, 0x78, 0x3a, 0x07, 0x54, 0x7a, 0x51, 0xa3, 0x1b, 0x99, 0xdd, 0x86, 0x1d, 0xd1, 0xb6, 0xb9, 0x90, 0x95, 0x55, 0x5b, 0x66, 0x1e, 0xde, 0x97, 0x71, 0x02, 0x5e, 0xd3, 0xcb, 0x08, 0x50, 0x2a, 0x75, 0x3b, 0x67, 0x1d, 0x3e, 0x3d, 0x87, 0x85, 0xe7, 0xde, 0x14, 0xcc, 0x84, 0xed, 0x70, 0x5d, 0x25, 0x4f, 0xbf, 0x59, 0xb6, 0x4d, 0xee, 0x8c, 0x24, 0x32, 0xf3, 0x9f, 0xc2, 0x16, 0x56, 0x8f, 0xea, 0xf5, 0xf0, 0x5e, 0xe7, 0x04, 0xf3, 0x08, 0x12, 0x44, 0x2a, 0xb8, 0x3c, 0x57, 0x82, 0x3c, 0x4c, 0x93, 0xca, 0xb6, 0x29, 0x55, 0xb7, 0x95, 0xdb, 0x97, 0x2b, 0xc4, 0xed, 0xc5, 0xb6, 0x21, 0x15, 0xcd, 0x5e, 0x31, 0x17, 0x76, 0x9b, 0x12, 0xe6, 0xf2, 0xa6, 0xb1, 0x0c, 0xb6, 0xf3, 0x3d, 0x4d, 0x89, 0xfc, 0xdb, 0x87, 0xdb, 0x41, 0x9b, 0xdd, 0x59, 0x8d, 0xaa, 0x14, 0xbe, 0x7a, 0xca, 0x3d, 0xec, 0x37, 0x00, 0x95, 0x3b, 0x89, 0x8c, 0xa9, 0x11, 0x10, 0x1e, 0xbe, 0xb3, 0xcc, 0x47, 0x6f, 0x5a, 0xe0, 0x2e, 0x98, 0x8a, 0x95, 0x84, 0x73, 0x9f, 0xa1, 0xba, 0x01, 0xa9, 0xaa, 0x71, 0xac, 0x79, 0x06, 0x32, 0x2a, 0xfc, 0xc5, 0x5f, 0xa4, 0xc8, 0xf1, 0x69, 0x18, 0xf5, 0x14, 0x44, 0xfc, 0x2e, 0xfb, 0x18, 0x24, 0x07, 0xba, 0x3a, 0xe5, 0x91, 0xf0, 0x5a, 0x7b, 0x2d, 0x4c, 0xfe, 0xa8, 0x9d, 0x50, 0x2f, 0x9e, 0x61, 0x55, 0x71, 0x1f, 0x40, 0xd0, 0xf9, 0xe3, 0x25, 0xd3, 0x1b, 0x3a, 0x2c, 0xd7, 0x02, 0xf2, 0xfd, 0xb8, 0xa3, 0x7b, 0x59, 0x01, 0xf3, 0x49, 0xf2, 0x6a, 0x58, 0x7a, 0x80, 0x9f, 0x5e, 0xb9, 0x11, 0x43, 0xac, 0x62, 0xa0, 0x35, 0x36, 0xe6, 0xea, 0x12, 0xb4, 0x72, 0x7d, 0xfb, 0x52, 0xcb, 0x12, 0x98, 0xa9, 0x7d, 0x1c, 0x5c, 0xee, 0x34, 0xa1, 0x0b, 0x69, 0x6a, 0x49, 0x7a, 0x29, 0x42, 0xb5, 0x97, 0xf7, 0xb4, 0x11, 0xa8, 0x88, 0xeb, 0xed, 0xd8, 0xf7, 0xeb, 0x48, 0xef, 0x72, 0x77, 0xee, 0x61, 0x33, 0x32, 0x05, 0x8a, 0xb1, 0x04, 0xe2, 0x38, 0x18, 0xbf, 0x21, 0x6a, 0xf7, 0x03, 0xf4, 0x57, 0x39, 0x5f, 0xbb, 0xb2, 0x57, 0xb8, 0xd5, 0x2d, 0xcc, 0xef, 0xb6, 0x3c, 0xc8, 0xbe, 0x3a, 0x1b, 0x28, 0xe3, 0x39, 0x12, 0xa6, 0x81, 0x5c, 0xf8, 0x4d, 0xc3, 0x2f, 0xf6, 0x31, 0xc2, 0x77, 0x8d, 0x5c, 0xa9, 0xc5, 0xda, 0x0b, 0x17, 0x4b, 0x19, 0x1b, 0xc4, 0xef, 0x69, 0xbe, 0x68, 0x9e, 0xce, 0x72, 0xd8, 0xe3, 0x7c, 0x34, 0x72, 0xb8, 0x53, 0xf0, 0xbc, 0x9c, 0xa6, 0x3d, 0x48, 0xe5, 0x40, 0x47, 0xdb, 0x58, 0xa9, 0x0c, 0xcd, 0xf7, 0xa5, 0xcc, 0xb3, 0x1a, 0xfe, 0xba, 0x3c, 0xc1, 0x83, 0xf8, 0x59, 0x29, 0x51, 0xc2, 0xa1, 0x9d, 0x51, 0xea, 0xf3, 0x8f, 0x02, 0x84, 0x5d, 0xe7, 0x79, 0xe2, 0x3c, 0x9b, 0xa6, 0xc3, 0xa5, 0x80, 0xd8, 0xc7, 0x04, 0x60, 0x83, 0x26, 0x03, 0x4c, 0x42, 0xa2, 0xae, 0x33, 0x18, 0xba, 0xd4, 0xb4, 0xfb, 0x21, 0xb0, 0x31, 0x93, 0x6e, 0xc8, 0x25, 0x3f, 0x15, 0x16, 0xb7, 0x59, 0x96, 0x66, 0x8f, 0xbb, 0xf4, 0xff, 0xe8, 0x81, 0x69, 0x85, 0xe6, 0x11, 0x58, 0x1e, 0x2a, 0x59, 0x83, 0xd4, 0xa5, 0x58, 0x7e, 0x3b, 0xa9, 0xe0, 0x64, 0x53, 0x46, 0x9a, 0xc8, 0xaf, 0xd3, 0x4a, 0xee, 0xd7, 0xcb, 0x54, 0x3b, 0xec, 0xdb, 0x80, 0xeb, 0x8a, 0x38, 0xfa, 0x02, 0xf2, 0x36, 0x9d, 0x85, 0x69, 0x17, 0x70, 0xe9, 0xdb, 0x20, 0x71, 0xcc, 0xc4, 0xf3, 0x92, 0xe3, 0x51, 0x18, 0x02, 0x34, 0xc2, 0xdd, 0xad, 0x85, 0x12, 0x60, 0x06, 0x14, 0xda, 0xea, 0x04, 0x88, 0x73, 0x7e, 0x6a, 0x28, 0x5a, 0xb2, 0x4c, 0x4b, 0xd9, 0xbe, 0xcf, 0x0f, 0xe4, 0xd3, 0x30, 0x4e, 0x42, 0xae, 0x08, 0xce, 0xed, 0x6c, 0xce, 0xb8, 0xba, 0xa0, 0x9d, 0x4c, 0x3c, 0xa3, 0x37, 0xd2, 0xe6, 0x2b, 0x4b, 0xd4, 0x71, 0x1f, 0xf3, 0x8a, 0x7d, 0xaa, 0x81, 0x96, 0x7b, 0x8f, 0x7b, 0xf2, 0xca, 0xbc, 0xe4, 0x26, 0x20, 0x21, 0xbd, 0xbe, 0x2c, 0xc2, 0xcc, 0xfb, 0x7a, 0x0b, 0x9c, 0xc9, 0x96, 0x64, 0xc5, 0xf1, 0x74, 0x06, 0x6d, 0x90, 0x0f, 0x0d, 0x0f, 0xc8, 0x51, 0xce, 0x7c, 0xb5, 0x33, 0x6a, 0x1f, 0xa2, 0x25, 0xa4, 0x84, 0x7d, 0xb0, 0xef, 0x1c, 0x89, 0x5a, 0xcb, 0x3a, 0x53, 0xca, 0x52, 0x62, 0xe7, 0x2c, 0x0e, 0xc3, 0x43, 0xd7, 0x0e, 0x02, 0x0c, 0x2d, 0x39, 0x39, 0x80, 0xc3, 0xe2, 0x40, 0xac, 0xc3, 0x9c, 0x2b, 0xdf, 0x8e, 0x4f, 0x13, 0x5e, 0xa5, 0x8b, 0x1a, 0x59, 0xc9, 0x1d, 0xa9, 0x1e ],
+const [ 0x9c, 0x4a, 0xe2, 0x21, 0x7c, 0x92, 0x8d, 0xd5, 0x86, 0x48, 0x36, 0xbe, 0x5d, 0x4e, 0xc2, 0x81, 0x21, 0x14, 0x71, 0xaa, 0x44, 0x1a, 0x59, 0x4b, 0x99, 0xb0, 0x13, 0xe5, 0xae, 0x01, 0xb4, 0x8c, 0x5c, 0x4f, 0xfe, 0x47, 0x9c, 0x80, 0xd8, 0xb6, 0x9c, 0xda, 0xfc, 0xf7, 0x13, 0x0b, 0xf0, 0xc9, 0xd1, 0x6c, 0x37, 0xf2, 0x9a, 0x86, 0xc8, 0xdf, 0x34, 0xd6, 0xbf, 0x8b, 0xbf, 0xcd, 0x53, 0xa2, 0x45, 0x1b, 0x08, 0xe5, 0x92, 0x2d, 0x25, 0xd0, 0x46, 0xf4, 0x69, 0x7a, 0x28, 0xe9, 0xfa, 0xbe, 0xbd, 0x4e, 0x9e, 0x98, 0x1a, 0xb6, 0x2d, 0xd1, 0xf6, 0xc7, 0x47, 0xdf, 0x03, 0x3f, 0x42, 0x07, 0x7f, 0x35, 0x66, 0xc4, 0x05, 0xa2, 0x5d, 0x6c, 0xaa, 0x1f, 0xe5, 0x11, 0x45, 0xf0, 0xc8, 0xa5, 0x0e, 0x42, 0x0e, 0x62, 0x6b, 0xb1, 0x71, 0x69, 0x06, 0x0d, 0x11, 0xaa, 0x23, 0x5e, 0x69, 0x03, 0x31, 0x25, 0x82, 0xac, 0x9e, 0xe5, 0x66, 0xd2, 0xf0, 0xe2, 0xd8, 0x82, 0x12, 0x29, 0x42, 0xc9, 0xeb, 0xd0, 0xef, 0x1a, 0x35, 0x7f, 0x7a, 0xef, 0x8d, 0x30, 0x87, 0xb3, 0xc6, 0x32, 0xb0, 0xe0, 0x83, 0x74, 0xc3, 0x65, 0x05, 0x00, 0x2a, 0x4a, 0x41, 0xc6, 0xaa, 0x96, 0x36, 0x9b, 0x51, 0x71, 0x7d, 0x81, 0xa9, 0x86, 0x22, 0x29, 0x32, 0xab, 0xb2, 0xb6, 0x0f, 0xc4, 0x95, 0xc4, 0x00, 0xe4, 0x9e, 0xa9, 0x90, 0xb6, 0xe1, 0xfa, 0x90, 0x1c, 0xc5, 0x52, 0xc3, 0x15, 0x5a, 0x4e, 0xdb, 0xe4, 0xec, 0xdc, 0xa4, 0x6f, 0xd8, 0xb6, 0x80, 0xe5, 0x9e, 0x29, 0x13, 0xa3, 0x38, 0x1b, 0x3f, 0x59, 0xaa, 0x4c, 0x53, 0x68, 0xdb, 0xdc, 0x7f, 0x8f, 0xa3, 0x0e, 0x8c, 0xc7, 0x25, 0x4b, 0xc9, 0x6b, 0x5f, 0x6a, 0x49, 0x9c, 0xff, 0x2e, 0x4b, 0xe4, 0x78, 0x10, 0xfa, 0x19, 0x56, 0x3f, 0x57, 0x85, 0xce, 0xe6, 0x73, 0x43, 0x9a, 0xad, 0xe1, 0xec, 0x04, 0x82, 0x6b, 0x74, 0x40, 0x99, 0x04, 0x4e, 0xfe, 0xb1, 0xfe, 0xd7, 0x40, 0x9a, 0x7d, 0xf1, 0x69, 0xf4, 0x2c, 0xee, 0x97, 0x39, 0x2e, 0xb1, 0x33, 0xfe, 0x58, 0x0f, 0xc7, 0x75, 0x9d, 0x7b, 0x0f, 0x37, 0xc9, 0xe3, 0x52, 0x40, 0x73, 0xd5, 0xf2, 0x3b, 0x2c, 0xe6, 0x43, 0x01, 0xfd, 0x54, 0x99, 0x5c, 0x11, 0xea, 0xa5, 0x10, 0xae, 0x24, 0x01, 0x1c, 0x6a, 0x94, 0x09, 0x3d, 0x9b, 0x84, 0xed, 0xb4, 0x0f, 0xdd, 0x04, 0x49, 0xfd, 0x48, 0x63, 0x90, 0x3c, 0x92, 0xaf, 0x6b, 0xb3, 0x55, 0x2f, 0xd0, 0x11, 0xd5, 0x25, 0xcc, 0xbe, 0x28, 0x5f, 0xc8, 0x11, 0x9a, 0x09, 0x0c, 0xc3, 0x4f, 0xc5, 0x81, 0xa3, 0x2a, 0xfe, 0xbb, 0x8c, 0xee, 0x78, 0x36, 0x94, 0xa3, 0x2c, 0xe0, 0x87, 0x3c, 0x54, 0xd8, 0x94, 0x76, 0xc2, 0x76, 0x45, 0x03, 0x75, 0x8b, 0xb5, 0xe8, 0x6e, 0xea, 0xfd, 0x24, 0xc0, 0x27, 0xef, 0x92, 0xe7, 0x9e, 0x07, 0x10, 0x5a, 0xb7, 0x9e, 0xe1, 0x64, 0x69, 0x61, 0x50, 0x2f, 0xfd, 0x02, 0x96, 0x22, 0x15, 0x2d, 0xfe, 0x6c, 0xec, 0xbe, 0x47, 0xe1, 0xdf, 0x31, 0x4a, 0x06, 0x2d, 0x59, 0xdd, 0x67, 0xfb, 0x55, 0xf6, 0x31, 0x9b, 0xc1, 0x14, 0xfc, 0x0d, 0x29, 0xda, 0xe9, 0xc6, 0xc3, 0xfd, 0xed, 0xb1, 0x5d, 0x61, 0x6c, 0x74, 0x94, 0x7f, 0x0a, 0xf4, 0x47, 0x0a, 0xbe, 0x1b, 0x4b, 0xd2, 0x28, 0xd9, 0x60, 0xe8, 0x24, 0x68, 0x64, 0x03, 0x9f, 0xd5, 0xc7, 0x22, 0xa9, 0xbc, 0x3f, 0x73, 0xcc, 0x53, 0xbd, 0x74, 0x9c, 0xa9, 0x9f, 0x58, 0x90, 0x30, 0x27, 0xac, 0x10, 0x7a, 0x2c, 0x3a, 0xcf, 0x40, 0x0f, 0x2e, 0x5b, 0xa8, 0xf1, 0x77, 0xf3, 0xc7, 0x23, 0x70, 0x98, 0x65, 0xde, 0xc0, 0x66, 0x01, 0x35, 0x7f, 0x25, 0x15, 0x47, 0x9a, 0x1c, 0x9c, 0xb9, 0x78, 0x25, 0xd0, 0x64, 0xdd, 0x07, 0x38, 0x4a, 0x0f, 0xff, 0xe2, 0xcf, 0x38, 0xa0, 0xee, 0x26, 0x0c, 0xde, 0x4c, 0x09, 0xab, 0x65, 0xc5, 0xad, 0xc9, 0x2f, 0x40, 0xf5, 0x0c, 0x55, 0x3e, 0xe6, 0xb5, 0x25, 0xa8, 0x5b, 0x83, 0x76, 0xca, 0xf9, 0xd4, 0x38, 0x9f, 0x66, 0x0e, 0x4f, 0x4f, 0xb6, 0x3d, 0xa2, 0xf6, 0x26, 0xfe, 0x6e, 0xa7, 0x0d, 0x9b, 0xe1, 0xb1, 0x0f, 0x77, 0xe4, 0x20, 0x94, 0xad, 0x38, 0x87, 0x78, 0xf4, 0xc4, 0xfd, 0x05, 0xc6, 0x2d, 0x66, 0x1e, 0xc1, 0xa8, 0xf4, 0xbc, 0x4d, 0x0c, 0xed, 0x9f, 0x7f, 0x2c, 0xae, 0x3d, 0x3d, 0x63, 0xf0, 0xff, 0xa3, 0x70, 0x4a, 0xac, 0xa6, 0x84, 0xf7, 0x25, 0xf7, 0x9a, 0xda, 0x54, 0x2a, 0x07, 0xbf, 0x5f, 0x18, 0x52, 0xe4, 0x21, 0x82, 0x45, 0xb8, 0xda, 0xf7, 0x44, 0xe2, 0x25, 0xf7, 0xde, 0x85, 0x2b, 0x58, 0xa2, 0xc2, 0x17, 0xe9, 0x34, 0x7f, 0xca, 0x56, 0xa0, 0x67, 0xcf, 0x4b, 0xed, 0x32, 0x91, 0xdc, 0xf6, 0x27, 0xcb, 0x25, 0x75, 0xdf, 0x41, 0x2d, 0x61, 0x4b, 0xae, 0x11, 0x7a, 0xf9, 0xfd, 0x5e, 0x22, 0x92, 0xbb, 0xbe, 0x6e, 0xa8, 0xcd, 0xd7, 0x7d, 0xae, 0x5e, 0x70, 0x08, 0x48, 0x1c, 0xd5, 0x3b, 0xc6, 0xa4, 0x7d, 0xc3, 0xea, 0x3a, 0xeb, 0x29, 0xf2, 0xbe, 0xd2, 0x5e, 0xd2, 0xdb, 0x7c, 0x97, 0xc2, 0x82, 0x6c, 0x5a, 0xf8, 0x97, 0x43, 0xd9, 0xb7, 0xea, 0xe0, 0x80, 0x88, 0x68, 0xcb, 0xca, 0xc8, 0x93, 0xd4, 0x58, 0x62, 0x2f, 0xf7, 0x44, 0xde, 0x3e, 0x83, 0xb3, 0x9b, 0x2f, 0x7c, 0xa9, 0x58, 0x53, 0x3d, 0x22, 0xf9, 0x90, 0x61, 0x5e, 0x88, 0x59, 0xe4, 0x7c, 0x7b, 0xdd, 0x86, 0x4a, 0x35, 0x7f, 0x70, 0x5c, 0xcf, 0x87, 0x1a, 0x5b, 0x17, 0x17, 0x6c, 0xa0, 0xd9, 0x60, 0x24, 0x01, 0x5e, 0x15, 0x77, 0xeb, 0x33, 0x20, 0xfb, 0xb2, 0x2b, 0x95, 0xc4, 0x24, 0xa7, 0xe4, 0xcd, 0x64, 0x15, 0x52, 0x9a, 0xf6, 0xb7, 0xaa, 0x1c, 0x16, 0xa6, 0x2f, 0xd5, 0x4e, 0x16, 0xd6, 0x3d, 0x47, 0xdb, 0xb2, 0x63, 0xe0, 0x2d, 0xb0, 0xd7, 0x7d, 0xa8, 0x84, 0xc8, 0xa1, 0x96, 0xe3, 0x6a, 0xc0, 0x71, 0xf3, 0x9a, 0x4e, 0xa4, 0x00, 0xc5, 0x1c, 0x92, 0x70, 0x06, 0xe4, 0xd9, 0xf9, 0x8e, 0x23, 0xd8, 0x11, 0x49, 0x26, 0x6f, 0xa6, 0xbf, 0x68, 0x05, 0x10, 0x38, 0x1b, 0xd0, 0x44, 0x23, 0x05, 0x50, 0x4a, 0xb8, 0x8d, 0x1d, 0xf1, 0xdd, 0x16, 0xe3, 0xc1, 0x46, 0x8b, 0xab, 0x31, 0xe1, 0x3b, 0x5c, 0x1a, 0x71, 0xe8, 0x81, 0x6c, 0x78, 0x1a, 0x4c, 0x20, 0x5b, 0xb9, 0xdb, 0x6d, 0xc1, 0xdb, 0xbb, 0x3f, 0x3c, 0xdb, 0xab, 0xe5, 0x2b, 0xab, 0xa2, 0x09, 0xdf, 0x6b, 0x13, 0xe6, 0xfc, 0x3a, 0x6f, 0xb5, 0x22, 0x4c, 0xec, 0x68, 0xcd, 0x3c, 0x85, 0x9b, 0x7a, 0xa4, 0x41, 0xc8, 0x0c, 0xec, 0xb9, 0xba, 0x6d, 0x5f, 0xd4, 0x44, 0x78, 0x84, 0xd6, 0x32, 0x17, 0xab, 0x99, 0x80, 0xa8, 0xc6, 0x19, 0xca, 0xa6, 0x7a, 0x37, 0x04, 0x85, 0x76, 0xb6, 0x6b, 0xdd, 0x04, 0x8a, 0xbb, 0xcb, 0xdd, 0x52, 0xa3, 0x95, 0x42, 0x23, 0x76, 0x8c, 0x48, 0x87, 0x23, 0x37, 0x74, 0xc5, 0x67, 0xad, 0x87, 0x63, 0x41, 0x43, 0x9b, 0xea, 0xa7, 0x67, 0x6f, 0xe9, 0x77, 0xcc, 0x00, 0x3c, 0xb0, 0xc8, 0x59, 0x8e, 0xe2, 0xfa, 0xab, 0x1d, 0xe3, 0x2f, 0xa0, 0xbd, 0xc4, 0x86, 0xed, 0x20, 0x03, 0xd3, 0x27, 0x54, 0x02, 0x42, 0xd7, 0x8d, 0xb8, 0x3d, 0xd0, 0x25, 0xa7, 0x8f, 0xc0, 0xe1, 0x0e, 0xc9, 0x06, 0x76, 0x5f, 0xe4, 0xc3, 0x4c, 0xf3, 0x29, 0x34, 0x81, 0xfd, 0x4e, 0x3f, 0x31, 0xbd, 0xe2, 0x4b, 0xf5, 0xf6, 0xeb, 0x55, 0xa9, 0xa1, 0xcd, 0x40, 0x73, 0xe3, 0x6d, 0x6d, 0x00, 0x3d, 0x97, 0x8c, 0x11, 0x03, 0x9d, 0xb2, 0x37, 0x0f, 0x41, 0xab, 0xda, 0xb6, 0xd5, 0x91, 0x80, 0xfb, 0xa1, 0x9d, 0x4c, 0x03, 0x85, 0x3e, 0xc5, 0xc9, 0xe0, 0x68, 0xda, 0x13, 0xb0, 0x2f, 0x22, 0xa5, 0xfa, 0x94, 0x68, 0xb4, 0x6c, 0x9f, 0x66, 0x9d, 0x41, 0xae, 0xd1, 0xd7, 0x65, 0x0c, 0x96, 0x26, 0xd9, 0xc5, 0x64, 0x12, 0x5a, 0xb9, 0x6a, 0x98, 0x3d, 0xf0, 0x62, 0x1f, 0x9e, 0x2d, 0xce, 0xae, 0xb9, 0xc6, 0x81, 0x5b, 0x98, 0xb2, 0x62, 0x07, 0xef, 0xe4, 0x6d, 0x48, 0x44, 0xd7, 0xfa, 0xa7, 0x52, 0x6b, 0x42, 0x0c, 0xb0, 0xef, 0x1f, 0x76, 0xae, 0x7f, 0x13, 0xef, 0x80, 0x90, 0x8c, 0xc0, 0x9e, 0xc9, 0x66, 0xe1, 0x6a, 0x15, 0xb2, 0xb3, 0x13, 0xf6, 0xb6, 0xf1, 0xba, 0x1c, 0x34, 0xe4, 0xd4, 0x36, 0xf0, 0xd7, 0xd0, 0x08, 0x6c, 0xcb, 0xf9, 0xbd, 0xf6, 0x6c, 0x9d, 0x7f, 0xe4, 0x43, 0x6f, 0x46, 0x1f, 0x2c, 0x2a, 0xed, 0xde, 0x0b, 0x77, 0x8b, 0xb4, 0xbb, 0x11, 0x00, 0xcd, 0x47, 0x27, 0xce, 0x75, 0x5d, 0x02, 0x2b, 0xd9, 0xff, 0xe7, 0x54, 0x12, 0x7c, 0x3f, 0x23, 0x5f, 0x9f, 0xf5, 0xe4, 0xb2, 0x26, 0x20, 0x65, 0x6f, 0x75, 0xe2, 0x4c, 0x70, 0x8c, 0x8f, 0xad, 0x4c, 0x37, 0x12, 0xdc, 0xd9, 0x84, 0x8d, 0x80, 0xef, 0x7a, 0x40, 0xe9, 0x6f, 0x08, 0xac, 0xa4, 0x84, 0x3c, 0xf8, 0x4c, 0x29, 0xb6, 0x93, 0xa2, 0xec, 0x5b, 0x1b, 0xe0, 0xf1, 0x4e, 0x7e, 0x4b, 0x39, 0x1c, 0x5f, 0x08, 0x24, 0x36, 0xbb, 0x30, 0x35, 0xa5, 0xcc, 0x27, 0x16, 0xf9, 0x2d, 0x29, 0xdc, 0x82, 0x40, 0x25, 0x8b, 0xc3, 0xcd, 0xcf, 0xdd, 0x24, 0xeb, 0xf1, 0x3f, 0xe7, 0x24, 0x01, 0x1d, 0x5d, 0xd4, 0xf9, 0x5f, 0x5a, 0xd2, 0x63, 0x34, 0xe6, 0x52, 0xb3, 0x0e, 0x35, 0x0a, 0xda, 0xee, 0xda, 0x94, 0x18, 0xe1, 0x37, 0x14, 0x12, 0xca, 0x38, 0x1a, 0x24, 0x63, 0x41, 0xca, 0xf8, 0x7f, 0x64, 0x3a, 0x58, 0x92, 0xd8, 0x1b, 0x40, 0x72, 0xa6, 0x9c, 0x38, 0x5f, 0xa6, 0x8b, 0xe0, 0x42, 0xaa, 0xbd, 0xcd, 0x32, 0xf9, 0xb1, 0x93, 0x3c, 0xff, 0x70, 0x23, 0x64, 0x42, 0xb7, 0x58, 0xe7, 0x98, 0x58, 0xcc, 0xc3, 0x98, 0xde, 0xf0, 0x79, 0x4e, 0x70, 0x5c, 0x12, 0x33, 0xf8, 0x63, 0x60, 0x5b, 0x84, 0xeb, 0x86, 0xf1, 0xec, 0x7b, 0xbb, 0xe1, 0xb5, 0x96, 0x4a, 0xd4, 0x35, 0x48, 0xdd, 0x61, 0xf8, 0xfe, 0xfc, 0x81, 0x63, 0x9b, 0xd1, 0x44, 0x97, 0xc7, 0x2e, 0xc3, 0x98, 0x8a, 0xd1, 0x56, 0xaf, 0x1b, 0xe6, 0x07, 0x0c, 0xf2, 0xcd, 0x46, 0xb0, 0x24, 0x1e, 0xde, 0x8a, 0xf0, 0xea, 0x27, 0xe0, 0x95, 0x44, 0x7d, 0xf1, 0x67, 0x00, 0xf2, 0xd9, 0x22, 0xbb, 0x40, 0xb4, 0x7e, 0x1c, 0x02, 0x06, 0x04, 0x58, 0x23, 0x5b, 0x1f, 0xfc, 0x96, 0x2a, 0x76, 0xe7, 0x47, 0xff, 0x79, 0x95, 0x52, 0xd9, 0x3a, 0xa4, 0x74, 0xd1, 0x7f, 0x90, 0xbe, 0xfd, 0x15, 0xc2, 0x91, 0x94, 0x67, 0xc9, 0xc6, 0x53, 0x4f, 0xe7, 0x2d, 0x1f, 0x2b, 0xcf, 0x39, 0xeb, 0x34, 0xad, 0xf9, 0xdc, 0x0b, 0x67, 0x4a, 0xab, 0x95, 0x22, 0x4c, 0x4c, 0x09, 0x09, 0x12, 0xcd, 0x47, 0x49, 0x9e, 0x80, 0x6c, 0x60, 0x0c, 0x5c, 0xa3, 0x98, 0x0d, 0xa1, 0x3e, 0xce, 0x97, 0xbb, 0x05, 0x78, 0xdb, 0x69, 0xcd, 0xe7, 0x78, 0x1e, 0x4d, 0xc9, 0xee, 0xa8, 0x2e, 0xf1, 0x55, 0x0f, 0x61, 0x5b, 0x4f, 0xc0, 0xb5, 0x6a, 0x3b, 0xea, 0xa9, 0x75, 0xab, 0x29, 0x7e, 0x82, 0x18, 0x62, 0x91, 0x51, 0xd5, 0xee, 0xe8, 0x9d, 0x42, 0xfa, 0x0b, 0x9e, 0x42, 0x2d, 0x15, 0xd2, 0xef, 0x8c, 0x0a, 0xfd, 0x8c, 0x9b, 0x6b, 0x6f, 0xba, 0xc5, 0x08, 0x85, 0xef, 0xfe, 0x16, 0x72, 0x25, 0xa7, 0x81, 0x3f, 0xcf, 0xb2, 0x84, 0x11, 0x11, 0x06, 0x76, 0xab, 0x30, 0x25, 0xe7, 0x33, 0x48, 0x0c, 0xeb, 0x39, 0x3d, 0x5b, 0xb6, 0xf5, 0xf3, 0xb5, 0x69, 0xd0, 0xc2, 0x6a, 0x2c, 0x27, 0x24, 0x53, 0x7d, 0x4b, 0xb1, 0xfe, 0xc7, 0xcc, 0x4e, 0x0b, 0x37, 0xf7, 0xa1, 0xd6, 0xcb, 0x9d, 0xc8, 0x57, 0xac, 0x16, 0x4a, 0x46, 0xbd, 0x86, 0x4d, 0x82, 0x74, 0x5f, 0x0a, 0xb3, 0xe9, 0x27, 0x7f, 0x2e, 0x2c, 0x7c, 0x63, 0x1a, 0xdc, 0x55, 0x5f, 0xd1, 0xf5, 0x8a, 0x7b, 0x89, 0xea, 0x97, 0xd7, 0x34, 0xf4, 0x9d, 0x9b, 0xa5, 0xa9, 0xa9, 0x30, 0xf3, 0xd0, 0x39, 0xb1, 0x22, 0x74, 0xfc, 0x9c, 0x00, 0x37, 0xda, 0xce, 0x4e, 0xe9, 0x34, 0xae, 0x20, 0x59, 0x6d, 0xa8, 0x87, 0x6b, 0xa9, 0xdd, 0x6c, 0x6b, 0xd4, 0x18, 0xbf, 0xa1, 0xe7, 0x04, 0xd2, 0x26, 0x66, 0x9d, 0xff, 0xf6, 0x2d, 0xe5, 0x91, 0x45, 0x6d, 0xd8, 0xe2, 0x17, 0xf2, 0xa1, 0xc0, 0x0b, 0xa7, 0x0e, 0x15, 0x77, 0x5b, 0x42, 0xc7, 0xba, 0xc5, 0xaa, 0xde, 0xce, 0xc6, 0x32, 0xe5, 0x1d, 0xef, 0xb8, 0x92, 0x96, 0x43, 0xc0, 0xa9, 0xff, 0x3e, 0x6a, 0x1d, 0x8d, 0x16, 0xa2, 0x78, 0xb2, 0x40, 0x97, 0x7e, 0x36, 0x36, 0x6e, 0x0d, 0x89, 0x78, 0x37, 0x48, 0x58, 0xd0, 0x20, 0xf5, 0x5e, 0xdb, 0xe8, 0x22, 0x7d, 0xc5, 0x97, 0x0f, 0x0d, 0x54, 0x6d, 0x48, 0x74, 0x28, 0x18, 0x12, 0xf6, 0x41, 0x2a, 0x08, 0xcf, 0xc1, 0xc9, 0x06, 0x7f, 0xf3, 0xa8, 0x46, 0x66, 0x8d, 0x37, 0xc9, 0x90, 0x32, 0x17, 0xf9, 0xd2, 0x3b, 0xd1, 0x8c, 0x16, 0xb7, 0xc7, 0xab, 0xf3, 0xb0, 0x6b, 0x54, 0x81, 0xb1, 0xae, 0xfd, 0x6b, 0x84, 0xbc, 0x7a, 0x45, 0x40, 0xe6, 0x20, 0x20, 0x84, 0xdf, 0x2b, 0x5c, 0xfd, 0x2c, 0x5d, 0xbe, 0x2e, 0xd6, 0xe8, 0xc2, 0x70, 0x62, 0x8e, 0x33, 0x37, 0x02, 0x07, 0xf8, 0x98, 0x0d, 0xa3, 0x31, 0x08, 0xad, 0x30, 0x83, 0x67, 0xd8, 0x1e, 0xaf, 0x3d, 0x81, 0xe1, 0x6a, 0x43, 0x0f, 0x97, 0x69, 0x25, 0x0e, 0xeb, 0xbb, 0x86, 0x24, 0x39, 0x5b, 0x44, 0x47, 0xf3, 0x06, 0xfe, 0x2e, 0x43, 0x4a, 0xd4, 0x05, 0xf1, 0xe0, 0x6e, 0x65, 0x88, 0x3b, 0x40, 0x83, 0xb4, 0x61, 0x0c, 0xa8, 0xef, 0xfa, 0xa8, 0xe1, 0x5c, 0xa6, 0x01, 0xf7, 0xf3, 0x94, 0x60, 0xa1, 0xdf, 0x51, 0xec, 0xf9, 0x24, 0xdd, 0x71, 0x2d, 0x85, 0x04, 0x5f, 0x77, 0xa5, 0xeb, 0x16, 0x4f, 0x6c, 0xea, 0x60, 0xdf, 0xac, 0x99, 0x3f, 0xb7, 0x05, 0x2e, 0xea, 0xc2, 0x06, 0x06, 0x12, 0x78, 0x94, 0x81, 0x69, 0x56, 0x90, 0x13, 0x65, 0x8b, 0xb4, 0x98, 0x41, 0xf5, 0xbe, 0xe8, 0x46, 0x4b, 0xd1, 0xac, 0x48, 0x9c, 0x18, 0x70, 0x73, 0xf8, 0xac, 0xf9, 0x48, 0x6d, 0xb8, 0xd8, 0xe2, 0x35, 0xdb, 0x3f, 0x7e, 0x2d, 0xcd, 0x14, 0x3a, 0x89, 0x46, 0x44, 0x1d, 0xc6, 0x1b, 0x5a, 0x58, 0xe1, 0xaa, 0x50, 0xcb, 0xc7, 0x79, 0xa4, 0xcb, 0x0c, 0x1a, 0xaf, 0x23, 0xdf, 0x52, 0x33, 0x58, 0x3e, 0x7a, 0x33, 0x32, 0x66, 0x24, 0x07, 0x77, 0x8e, 0x02, 0xaf, 0xfa, 0xd4, 0x04, 0x68, 0xd4, 0x78, 0xc1, 0x7d, 0xf2, 0x48, 0x18, 0x60, 0xd0, 0x5b, 0x17, 0xf9, 0x83, 0x02, 0x1b, 0x3e, 0xfd, 0xfc, 0x39, 0x04, 0x8d, 0xe9, 0xdd, 0x14, 0xa5, 0x01, 0xb1, 0x82, 0xe0, 0x06, 0xc1, 0x3a, 0x43, 0x77, 0xdc, 0xdc, 0xc4, 0x07, 0x3d, 0xca, 0x08, 0x4e, 0x6b, 0x7f, 0x71, 0xbd, 0x5d, 0x22, 0x58, 0xd7, 0xe2, 0x5a, 0x97, 0x9e, 0x40, 0x65, 0x4b, 0x4c, 0x1b, 0x64, 0xd8, 0x44, 0x99, 0xf9, 0x2d, 0x48, 0xc4, 0x14, 0x49, 0xec, 0x30, 0x0a, 0xfd, 0x4b, 0xdd, 0xe8, 0xf4, 0xf8, 0x5e, 0x06, 0xf2, 0x38, 0x3b, 0xdf, 0x59, 0x6e, 0x95, 0x1f, 0xf1, 0xd6, 0x08, 0xfe, 0xe8, 0x76, 0xd6, 0xcd, 0x18, 0x52, 0x41, 0xce, 0x89, 0xe0, 0x38, 0x49, 0x37, 0xbb, 0x36, 0xdc, 0x15, 0x9b, 0x68, 0x13, 0x51, 0x85, 0x0e, 0x39, 0xda, 0x3f, 0x23, 0x6d, 0x20, 0x07, 0x40, 0xf8, 0x1b, 0x84, 0xbe, 0xdd, 0x8e, 0xfd, 0x1b, 0xb2, 0x8d, 0xc9, 0x9e, 0xaf, 0x3d, 0x07, 0x3e, 0x05, 0xdb, 0x8f, 0xc1, 0x70, 0xff, 0x28, 0x21, 0x10, 0x22, 0xfb, 0x33, 0x75, 0x5e, 0x47, 0x8a, 0xf9, 0x76, 0x57, 0x9a, 0x52, 0x16, 0xb1, 0x19, 0x67, 0x5c, 0x91, 0xab, 0x63, 0x96, 0x95, 0xbd, 0x08, 0x4e, 0xba, 0xb1, 0x47, 0x84, 0x87, 0x3c, 0x0d, 0x3a, 0x88, 0x0d, 0x5f, 0x36, 0xfe, 0xb0, 0xa9, 0x03, 0xd5, 0xb1, 0x53, 0x39, 0xd6, 0x04, 0x96, 0xfe, 0x1e, 0xa4, 0x8e, 0xcd, 0xcf, 0x7b, 0x90, 0x76, 0x05, 0x82, 0xbd, 0x66, 0x0c, 0x29, 0xd7, 0x29, 0xd0, 0xf9, 0x54, 0x2d, 0x94, 0x78, 0xb1, 0xc9, 0xe7, 0x4d, 0x09, 0x7d, 0xd4, 0xa4, 0xe6, 0x7c, 0x5a, 0xd4, 0x57, 0x67, 0x1c, 0x3f, 0x43, 0x5c, 0x58, 0x7a, 0xfc, 0x2f, 0x1d, 0xaf, 0x17, 0xf7, 0xb9, 0x3f, 0x7c, 0xcd, 0x71, 0xab, 0xb9, 0xd0, 0x76, 0xb4, 0x9c, 0x6d, 0x14, 0xc1, 0x00, 0xdd, 0x2b, 0x82, 0xe7, 0xee, 0xe3, 0xd3, 0xc9, 0x07, 0x9c, 0xe3, 0x2c, 0x66, 0x24, 0x95, 0x75, 0xad, 0x2d, 0x26, 0xfe, 0x9d, 0xfe, 0x11, 0x68, 0x21, 0x68, 0x2f, 0x33, 0x8e, 0xfc, 0x23, 0x8b, 0x29, 0x7b, 0xf5, 0x65, 0xea, 0x8e, 0xfd, 0xcb, 0x7f, 0xb7, 0x03, 0x74, 0x94, 0x88, 0xa4, 0x98, 0x52, 0x13, 0xf7, 0x02, 0x25, 0xa1, 0x71, 0x67, 0xc3, 0xa7, 0x06, 0xf6, 0x6a, 0xf5, 0x91, 0x30, 0x68, 0x31, 0x76, 0xfa, 0xe1, 0x84, 0x86, 0xf1, 0xcd, 0x93, 0x23, 0xfd, 0x40, 0xb1, 0xa4, 0x29, 0xee, 0x52, 0xfb, 0xb2, 0xee, 0xc3, 0x94, 0x5d, 0xbe, 0x19, 0x81, 0x0e, 0x88, 0x68, 0xd5, 0x97, 0xa3, 0x35, 0x4d, 0xce, 0x5d, 0x2d, 0x36, 0xe2, 0xf8, 0x17, 0x8a, 0xef, 0xf2, 0x07, 0x5d, 0xcf, 0x8a, 0xd4, 0x77, 0x34, 0x7f, 0xcd, 0x43, 0xf3, 0x1b, 0xa8, 0xe8, 0xa3, 0x70, 0xbb, 0xb5, 0x67, 0xe2, 0x6f, 0xc2, 0x08, 0xe5, 0xf1, 0xd4, 0x47, 0x08, 0x2a, 0x82, 0x71, 0x33, 0xf2, 0x96, 0x33, 0x2c, 0x80, 0xb6, 0xb0, 0x60, 0x25, 0x44, 0xd1, 0xe1, 0x3b, 0x82, 0xdc, 0xab, 0x58, 0xfa, 0x49, 0x2b, 0xc7, 0x1d, 0xd1, 0x02, 0x38, 0x2a, 0xc7, 0x06, 0xb6, 0x51, 0xab, 0x89, 0xda, 0x19, 0xfd, 0xdf, 0x3e, 0xff, 0x4f, 0x1a, 0x35, 0x5f, 0x9e, 0x18, 0xb9, 0x98, 0xe2, 0xc0, 0xa5, 0x6c, 0xe4, 0x88, 0x25, 0xa5, 0x50, 0x3a, 0x6a, 0xfe, 0x0b, 0xf9, 0xa2, 0x40, 0xc6, 0x7f, 0x27, 0xac, 0xd4, 0xa8, 0xf6, 0x99, 0x38, 0x34, 0x64, 0x5e, 0x03, 0xc8, 0x0c, 0x72, 0xdd, 0x37, 0x0c, 0xd2, 0xe1, 0x00, 0x71, 0xa3, 0xae, 0x18, 0xef, 0x19, 0xba, 0xe9, 0xd6, 0x97, 0xea, 0x9a, 0x41, 0x18, 0x60, 0x91, 0x90, 0xcd, 0x95, 0x36, 0x19, 0x07, 0xa7, 0xfa, 0x1b, 0x58, 0xf4, 0x99, 0xf3, 0xf5, 0xe7, 0x9b, 0x93, 0x5f, 0x12, 0x21, 0x2f, 0x43, 0x7d, 0xde, 0x39, 0x9e, 0x3e, 0x64, 0x90, 0x24, 0x4a, 0xa1, 0xf5, 0xe3, 0x8b, 0xa9, 0xbe, 0x24, 0x33, 0xb6, 0xce, 0x92, 0x4f, 0x6c, 0xc4, 0x9e, 0x9f, 0x62, 0x73, 0x21, 0xa5, 0xdf, 0x93, 0x43, 0xfc, 0xe1, 0xb5, 0x9d, 0xeb, 0x64, 0x7d, 0x9a, 0x3a, 0xe0, 0x0b, 0x23, 0x44, 0x14, 0xba, 0x7b, 0x4e, 0x02, 0x0d, 0x67, 0x17, 0x3b, 0xe6, 0x93, 0xb0, 0x5c, 0xf9, 0x31, 0x8e, 0xd9, 0x81, 0xe3, 0xde, 0xf9, 0x31, 0xdb, 0x18, 0x22, 0x6e, 0x40, 0xd7, 0x57, 0xbb, 0xd4, 0xe8, 0xff, 0x75, 0xd5, 0xa1, 0xe8, 0xc0, 0x21, 0x74, 0x8b, 0xc1, 0x9d, 0xc4, 0x92, 0x0e, 0xd6, 0xf6, 0x97, 0x62, 0xe9, 0xcc, 0x2f, 0x96, 0xa1, 0xee, 0x27, 0xcc, 0xe0, 0xca, 0x0d, 0xee, 0x40, 0x9e, 0xf2, 0x57, 0xf9, 0xd3, 0x6f, 0xcf, 0x06, 0x8d, 0xe6, 0xbd, 0x83, 0x80, 0x0a, 0x98, 0x5a, 0x05, 0xa2, 0x9f, 0x1e, 0x6d, 0x8a, 0xca, 0x37, 0x95, 0xfa, 0x00, 0x40, 0xba, 0x0a, 0x8a, 0xad, 0x8f, 0x76, 0xc8, 0xb1, 0x8d, 0x9f, 0x22, 0x5f, 0x8b, 0xd3, 0x42, 0x0f, 0x8e, 0xce, 0x80, 0x03, 0xe2, 0x81, 0x9e, 0x4a, 0x6a, 0x12, 0xb6, 0xe5, 0x34, 0x23, 0x70, 0x29, 0x50, 0x57, 0x78, 0x64, 0xe3, 0x12, 0x30, 0xc3, 0x77, 0x81, 0xa2, 0x73, 0x95, 0xdb, 0xb8, 0x07, 0x96, 0xe6, 0xaf, 0x1a, 0xb6, 0xbc, 0xc9, 0x35, 0x6a, 0xcf, 0x42, 0xf3, 0xf4, 0x2b, 0x86, 0x62, 0x34, 0xfb, 0xa1, 0xad, 0xc1, 0x4f, 0xf7, 0xf8, 0x38, 0x1c, 0x35, 0x8c, 0xd4, 0x84, 0x87, 0x34, 0x3f, 0x58, 0x0c, 0xe6, 0xa8, 0xdc, 0x87, 0xa6, 0x16, 0xca, 0x57, 0xa8, 0xfc, 0x99, 0xa9, 0xb5, 0x0d, 0xfe, 0xec, 0xcf, 0x51, 0xb4, 0x85, 0x18, 0x79, 0x79, 0xc4, 0xf0, 0x70, 0x59, 0x17, 0x5e, 0x32, 0x2e, 0x7e, 0xb1, 0xe1, 0x68, 0x3f, 0x67, 0x16, 0x0a, 0xdb, 0x4d, 0x75, 0xf5, 0x40, 0xe8, 0x84, 0x69, 0x40, 0x14, 0xbd, 0xc9, 0x42, 0xeb, 0xe1, 0x9e, 0x38, 0xe8, 0x90, 0xdf, 0xd1, 0x4c, 0x17, 0x70, 0xef, 0xc1, 0x89, 0xe8, 0x5b, 0x3e, 0x11, 0x97, 0xb8, 0x2a, 0x86, 0xc8, 0xb5, 0xc4, 0x40, 0x43, 0x87, 0xc2, 0x2a, 0x16, 0x97, 0x38, 0x19, 0x95, 0x77, 0xbc, 0x5c, 0xa0, 0x1b, 0xc8, 0x95, 0x24, 0x46, 0x60, 0xc7, 0xe4, 0x42, 0xf4, 0xaf, 0x7a, 0xd4, 0x87, 0x58, 0x98, 0x6f, 0x11, 0xea, 0x94, 0xa8, 0x22, 0xc2, 0x24, 0xea, 0xc9, 0xc8, 0x66, 0x6b, 0xb4, 0xfd, 0x23, 0x5e, 0x98, 0x54, 0x54, 0x6b, 0xd4, 0xc3, 0xe5, 0x5c, 0x51, 0x99, 0xba, 0x19, 0xac, 0x12, 0xf0, 0xd6, 0x97, 0x29, 0x65, 0x8b, 0x7c, 0xad, 0x7a, 0xa4, 0x64, 0x97, 0x17, 0xfa, 0x18, 0x9b, 0xf0, 0x03, 0x85, 0xfd, 0x07, 0x45, 0x65, 0xa6, 0x72, 0x11, 0x1c, 0x77, 0x5f, 0x6d, 0xe0, 0xdd, 0x55, 0x52, 0x1d, 0xa6, 0xbd, 0x18, 0x18, 0x13, 0xa0, 0x2e, 0xd2, 0x2e, 0xb2, 0x0e, 0x2f, 0x5d, 0x90, 0x70, 0x57, 0x38, 0x46, 0xbe, 0x5d, 0x98, 0x14, 0xc9, 0x1f, 0xf0, 0x72, 0xba, 0x6d, 0xe1, 0x51, 0x4b, 0x6d, 0x08, 0xa4, 0x37, 0x3d, 0x1b, 0x1f, 0xee, 0xdb, 0x34, 0x3e, 0x8e, 0x42, 0x6c, 0x8a, 0x0f, 0xd6, 0xac, 0x18, 0xbd, 0x02, 0xc0, 0x52, 0xec, 0x20, 0xad, 0xf9, 0xe7, 0x99, 0x45, 0x6b, 0x29, 0x4d, 0xf8, 0x22, 0xd0, 0x35, 0xed, 0x7e, 0x4e, 0x46, 0x52, 0xc4, 0x62, 0x99, 0xf0, 0x66, 0x47, 0xca, 0x02, 0x85, 0x2b, 0x9e, 0x47, 0xb4, 0xe2, 0xe8, 0x56, 0xff, 0xdc, 0xad, 0x32, 0x2c, 0x54, 0x86, 0x1e, 0x40, 0xcb, 0x46, 0xb2, 0x45, 0xb5, 0xdd, 0x2f, 0x4b, 0x72, 0x7c, 0x10, 0xad, 0x7f, 0xfa, 0xe1, 0x95, 0xee, 0x77, 0x54, 0xc2, 0x13, 0x3f, 0x92, 0x89, 0x81, 0xf0, 0xcf, 0x1a, 0x35, 0xe0, 0x21, 0x05, 0x10, 0xb9, 0x92, 0xfd, 0x8b, 0x66, 0x74, 0xdb, 0xa6, 0x33, 0xf4, 0xe6, 0x21, 0x2f, 0xf2, 0x51, 0xef, 0xd5, 0x10, 0x05, 0xe8, 0xec, 0x09, 0xa1, 0xbe, 0xac, 0x45, 0xbf, 0x32, 0x22, 0xaa, 0x7a, 0x87, 0xd6, 0xb4, 0x2d, 0x37, 0xaa, 0xc8, 0x7c, 0xe6, 0x05, 0xc5, 0x99, 0x94, 0x31, 0xdd, 0xc0, 0x16, 0x02, 0xa3, 0x04, 0xc7, 0xb9, 0x64, 0x4e, 0x7b, 0x27, 0xbb, 0xa3, 0xb4, 0x16, 0x60, 0xa5, 0x19, 0xe4, 0x41, 0x5d, 0x23, 0x71, 0xd4, 0x37, 0x1a, 0x3c, 0xab, 0x4e, 0x40, 0xc8, 0x49, 0xea, 0x4c, 0x45, 0x34, 0x47, 0x19, 0x6c, 0x4b, 0x99, 0xa0, 0xab, 0x5a, 0x4c, 0x24, 0x82, 0xec, 0x90, 0xac, 0x2d, 0x60, 0x15, 0xb6, 0x83, 0x3f, 0x13, 0x2a, 0x1e, 0xcd, 0x8e, 0x8d, 0xbc, 0xde, 0xd8, 0x77, 0xe5, 0xeb, 0x57, 0x47, 0xce, 0x65, 0x88, 0x15, 0x7e, 0x49, 0x44, 0xe8, 0x2f, 0xf5, 0x43, 0x29, 0xf7, 0x3a, 0xde, 0x58, 0xa7, 0xb2, 0x19, 0xfe, 0xf4, 0x54, 0xe0, 0xe3, 0xd4, 0x45, 0x91, 0x80, 0x2b, 0xf1, 0xbb, 0xb7, 0xa7, 0x5b, 0x26, 0xc2, 0xe8, 0xb1, 0x13, 0x6a, 0xe5, 0x24, 0xc4, 0x79, 0x8b, 0xf7, 0x3f, 0x71, 0xa7, 0xd5, 0x50, 0x7e, 0x05, 0x67, 0xcd, 0xaa, 0xd9, 0x26, 0x1d, 0x50, 0x5f, 0x6e, 0xfb, 0xd3, 0xbf, 0xd4, 0x78, 0x8f, 0x33, 0xba, 0x3f, 0x10, 0x6b, 0x21, 0x1d, 0x82, 0x31, 0xbe, 0xc1, 0x69, 0x49, 0x4f, 0xc0, 0x93, 0x9b, 0x2f, 0xdc, 0x4a, 0x94, 0x28, 0x85, 0xce, 0xc9, 0x89, 0xa0, 0x02, 0xdd, 0x79, 0x88, 0x65, 0xa5, 0x8b, 0x52, 0x44, 0x8b, 0x93, 0x56, 0x2e, 0x30, 0xb7, 0xea, 0xa9, 0x56, 0xc9, 0x71, 0x23, 0xfc, 0xd4, 0x95, 0x2b, 0xca, 0xf4, 0xd0, 0xe1, 0xb0, 0x6b, 0x31, 0xab, 0xcb, 0xf2, 0x5d, 0x2a, 0x88, 0x4d, 0xd4, 0x6d, 0x0b, 0x22, 0x75, 0x64, 0xd2, 0x0b, 0x45, 0x97, 0x95, 0xea, 0x6c, 0x17, 0x71, 0x7d, 0x80, 0xb5, 0x46, 0x32, 0x06, 0x73, 0x5e, 0x3c, 0x36, 0x38, 0x4f, 0xe6, 0xff, 0xc8, 0x22, 0x27, 0x4b, 0xf2, 0xb4, 0x77, 0x84, 0x0c, 0x5d, 0xe2, 0x57, 0x9c, 0xd0, 0x5b, 0xb8, 0x58, 0x42, 0x52, 0x26, 0x51, 0xcf, 0x89, 0x30, 0x6b, 0x19, 0x23, 0x38, 0x10, 0x32, 0xfe, 0x77, 0x25, 0xbc, 0x42, 0x41, 0x3d, 0x4e, 0x3a, 0x8a, 0x0d, 0x1a, 0x63, 0xaa, 0x21, 0xcd, 0xc3, 0x5d, 0xcd, 0xb7, 0x7c, 0x0e, 0x65, 0x2c, 0xa1, 0x55, 0xb0, 0x2a, 0x48, 0xbe, 0x9b, 0x3b, 0xe1, 0xcc, 0x2b, 0x9d, 0xc6, 0x3d, 0xb5, 0xa1, 0x13, 0x90, 0x51, 0x51, 0xb7, 0xc5, 0x8c, 0x55, 0xcb, 0x64, 0x5d, 0x18, 0x23, 0xc0, 0x5b, 0x26, 0x23, 0x7d, 0x2c, 0xd9, 0xd4, 0x50, 0x41, 0x34, 0x37, 0x06, 0xc0, 0x0f, 0xda, 0xc8, 0xc2, 0x74, 0xa8, 0x9d, 0xbf, 0x4a, 0x05, 0x30, 0x46, 0x30, 0x1b, 0xd4, 0xf2, 0xac, 0x6e, 0xc5, 0x99, 0x85, 0xb7, 0xb0, 0xc6, 0x6d, 0xef, 0x76, 0x6a, 0xe3, 0xaa, 0x2e, 0xce, 0x58, 0xa6, 0x69, 0xcc, 0x91, 0xa4, 0xb9, 0x3f, 0x4c, 0x76, 0x74, 0xb8, 0x26, 0x5a, 0xb5, 0x73, 0xbc, 0x86, 0xa4, 0x89, 0x11, 0x04, 0xf7, 0x66, 0x30, 0xc0, 0xb9, 0x7e, 0x12, 0xe0, 0x4a, 0x3c, 0xc1, 0x53, 0xa8, 0x3b, 0xbe, 0xad, 0xec, 0xb9, 0xa0, 0x32, 0x18, 0x49, 0xff, 0x30, 0x0f, 0xc7, 0x90, 0x93, 0xe5, 0x91, 0x91, 0xb3, 0x59, 0xf4, 0x68, 0x70, 0xa0, 0xe5, 0x87, 0x81, 0x65, 0xf2, 0x92, 0x09, 0x0d, 0x78, 0xc4, 0x6b, 0x3f, 0x15, 0x8f, 0x60, 0xa4, 0x60, 0x82, 0x47, 0xeb, 0xd8, 0x70, 0xbc, 0x11, 0x1b, 0xcf, 0x6b, 0xdf, 0x59, 0x5e, 0x26, 0xb4, 0x07, 0x0b, 0x36, 0x84, 0xd8, 0x13, 0xef, 0x21, 0xe9, 0x6b, 0x88, 0xb9, 0x3b, 0x5f, 0x29, 0xa0, 0x67, 0x79, 0x44, 0x50, 0x8d, 0xa4, 0x29, 0xaf, 0x8e, 0x91, 0xd5, 0x90, 0x7b, 0x5a, 0x0b, 0x7b, 0x4d, 0x65, 0xa7, 0xb1, 0xd6, 0x8c, 0x2e, 0x6b, 0xf7, 0x7a, 0xa9, 0x63, 0x14, 0x58, 0xb4, 0x95, 0xc5, 0xaa, 0xd2, 0x47, 0xce, 0x73, 0x03, 0x47, 0x52, 0xa0, 0x99, 0x74, 0x43, 0xa3, 0x47, 0x7f, 0x1d, 0x5f, 0x7b, 0xf3, 0xd4, 0x44, 0xed, 0x73, 0x0a, 0xbb, 0x78, 0x43, 0x86, 0xc4, 0x2a, 0x0b, 0xe2, 0xdd, 0x97, 0xd7, 0x83, 0x27, 0x72, 0x61, 0xcf, 0xc4, 0x5e, 0x93, 0x99, 0x83, 0x01, 0x48, 0xe0, 0xbf, 0x5a, 0x53, 0xba, 0x84, 0x55, 0xc2, 0x8b, 0xf4, 0x9d, 0x64, 0x7a, 0xe9, 0xb2, 0x88, 0x26, 0xdc, 0x3b, 0x08, 0x94, 0x06, 0x9d, 0x86, 0x6d, 0xc4, 0xcc, 0xf6, 0x66, 0x40, 0x62, 0x5c, 0xff, 0x4e, 0xee, 0xd7, 0x70, 0x94, 0x8e, 0xdf, 0xe0, 0xee, 0xc0, 0xcb, 0xd9, 0x11, 0x75, 0x96, 0xf9, 0x6e, 0x67, 0xe2, 0xea, 0x59, 0xad, 0x3d, 0x94, 0x6a, 0x8c, 0xa4, 0x90, 0x23, 0x91, 0x45, 0xe0, 0xd4, 0xdc, 0x89, 0xde, 0xbc, 0xbf, 0x52, 0x73, 0x71, 0x88, 0x82, 0x89, 0x82, 0x9a, 0xbc, 0xc3, 0x5a, 0xc3, 0x6e, 0x6b, 0x67, 0xc9, 0x0f, 0xac, 0x7c, 0x46, 0xa5, 0x01, 0x74, 0xb6, 0x8b, 0xed, 0x19, 0xcf, 0x71, 0xed, 0x44, 0x11, 0xa4, 0xab, 0x45, 0x9d, 0x90, 0x74, 0x84, 0x4a, 0x83, 0xec, 0x69, 0xf6, 0xb3, 0x00, 0x7a, 0x1a, 0x83, 0x1d, 0xc3, 0xa1, 0x02, 0x9f, 0x7b, 0xfb, 0xb4, 0x8d, 0xe4, 0x6d, 0x96, 0x83, 0x73, 0xab, 0x5c, 0xef, 0x31, 0xa8, 0xfd, 0x80, 0x61, 0xad, 0x71, 0xdc, 0x63, 0xa9, 0xb9, 0x92, 0xd8, 0xc8, 0x21, 0x4f, 0x07, 0x46, 0xc2, 0x54, 0x80, 0x86, 0x4a, 0x27, 0xfe, 0x5e, 0x00, 0x89, 0x92, 0xb5, 0x02, 0xa9, 0xfe, 0x51, 0xd1, 0x97, 0x5f, 0xea, 0x10, 0xfb, 0x10, 0x83, 0x89, 0x07, 0xca, 0xfa, 0x71, 0xaa, 0x10, 0xdd, 0xed, 0x07, 0xca, 0x7f, 0xd5, 0x25, 0x30, 0x4b, 0xb7, 0xe8, 0xe9, 0x59, 0x1f, 0x40, 0x74, 0x3f, 0x15, 0xa0, 0xc8, 0x2a, 0xe8, 0xb2, 0x37, 0x2d, 0x2a, 0x49, 0x98, 0xd8, 0xfc, 0x97, 0xa5, 0x0d, 0x8c, 0xa0, 0xa2, 0x0f, 0xdb, 0xee, 0x40, 0xdc, 0xc4, 0x86, 0xc0, 0xbd, 0x3a, 0x1c, 0x5b, 0x1b, 0xd1, 0x83, 0xe2, 0x94, 0x7f, 0x67, 0xa2, 0x4e, 0xa4, 0x3e, 0x8a, 0x8b, 0x49, 0x7c, 0x90, 0x7e, 0xa5, 0x06, 0x50, 0x5e, 0xe6, 0xea, 0xf6, 0xb8, 0x2e, 0x4d, 0x5f, 0x09, 0xdb, 0xa5, 0x7b, 0x8c, 0x0b, 0x28, 0xf6, 0x51, 0x5f, 0x83, 0x17, 0x8f, 0x00, 0xd0, 0xe8, 0x3b, 0xe0, 0xc2, 0x97, 0xd9, 0x43, 0x23, 0x1c, 0x93, 0x7d, 0x81, 0x1c, 0x88, 0xfd, 0x24, 0x0d, 0x66, 0x8a, 0x43, 0x9c, 0x3b, 0xcd, 0x77, 0x4b, 0x88, 0x10, 0x6f, 0x5f, 0x98, 0x45, 0xe6, 0xf9, 0x0f, 0x4a, 0xd2, 0x83, 0xc6, 0x6b, 0xde, 0x4d, 0xd6, 0x29, 0x1b, 0x78, 0xf3, 0x39, 0xf2, 0x14, 0xfc, 0xd0, 0x5e, 0x85, 0xcf, 0x1e, 0x58, 0x2b, 0x62, 0x18, 0x92, 0x42, 0x10, 0x7b, 0x67, 0x06, 0x30, 0x0e, 0x12, 0x1b, 0xec, 0x27, 0x1f, 0x2d, 0x51, 0x70, 0x20, 0xd4, 0xa2, 0xeb, 0xa1, 0xba, 0xf2, 0x34, 0x5e, 0xff, 0xf1, 0x07, 0xb3, 0xdc, 0x07, 0x01, 0x53, 0x87, 0x9f, 0xab, 0x3d, 0x57, 0xc6, 0xb4, 0xec, 0x29, 0xf4, 0x7e, 0xce, 0x02, 0x29, 0xdd, 0xf8, 0xf6, 0x3c, 0x1b, 0x18, 0x48, 0x70, 0x3f, 0xab, 0xd2, 0x49, 0x8e, 0x70, 0xa7, 0x9e, 0x53, 0x1c, 0xf8, 0xee, 0xdc, 0x4f, 0x34, 0xf8, 0xc5, 0xc7, 0x73, 0x85, 0x79, 0xd4, 0x15, 0x89, 0xf5, 0x0b, 0xa6, 0x6a, 0xcf, 0x3f, 0x05, 0xa0, 0x77, 0xad, 0xc6, 0x7e, 0xbe, 0x77, 0xd4, 0x4f, 0x94, 0x54, 0x5b, 0xa5, 0x16, 0x85, 0xe5, 0xee, 0xc8, 0x0b, 0xc3, 0x48, 0x1e, 0x17, 0xae, 0x97, 0x42, 0xc2, 0xae, 0xd4, 0x11, 0xfe, 0x3b, 0xa8, 0x66, 0xcc, 0xa2, 0x39, 0x9c, 0xb0, 0xab, 0x44, 0x4e, 0x62, 0x79, 0x6c, 0x61, 0xc7, 0xb1, 0xd1, 0x45, 0x1f, 0xdf, 0xe5, 0x77, 0x80, 0x15, 0x7b, 0x4b, 0x83, 0xd5, 0x21, 0xe8, 0x3d, 0x30, 0xb0, 0x94, 0x71, 0x30, 0x21, 0x32, 0x03, 0x74, 0xa2, 0x08, 0xb0, 0x1a, 0xe9, 0xc6, 0xfd, 0xe2, 0xc9, 0xc4, 0x6d, 0x8f, 0x03, 0x8c, 0xf7, 0x91, 0x5e, 0x98, 0xb7, 0xe2, 0xfa, 0x5d, 0xe4, 0x2e, 0xe1, 0x88, 0x02, 0x36, 0xdf, 0x87, 0x59, 0x76, 0x94, 0x4b, 0xa5, 0x05, 0xc7, 0x4c, 0x0f, 0xbe, 0xfd, 0xce, 0x5c, 0x9d, 0x4a, 0x63, 0x65, 0x6b, 0x68, 0xb2, 0xc7, 0x9e, 0x06, 0x76, 0xdb, 0x7b, 0x62, 0xca, 0xe9, 0x7d, 0x1a, 0xa3, 0x98, 0xfa, 0x40, 0x9e, 0xa9, 0x04, 0xac, 0xfc, 0xe5, 0x8e, 0x96, 0xea, 0x54, 0xcf, 0x64, 0x06, 0xb0, 0xec, 0xc0, 0x20, 0x19, 0xd1, 0xee, 0x3d, 0x0a, 0x5f, 0x5c, 0xe2, 0x8c, 0xcd, 0x7b, 0x8f, 0xaa, 0x48, 0xce, 0x89, 0x24, 0xdd, 0x41, 0xdc, 0x68, 0x99, 0xbb, 0xa1, 0xbd, 0xef, 0xf6, 0x7d, 0xc2, 0x59, 0x8f, 0x6a, 0x17, 0x42, 0x59, 0xba, 0x5a, 0x24, 0xf7, 0x59, 0x55, 0xee, 0xaa, 0x52, 0x75, 0xa8, 0x67, 0x94, 0x7e, 0x59, 0x2d, 0xf7, 0x7e, 0x29, 0x95, 0x7a, 0x00, 0xc3, 0xab, 0xce, 0x81, 0xfd, 0xfc, 0x19, 0x28, 0xbb, 0xf0, 0xf4, 0xb1, 0x10, 0x5a, 0xb5, 0xab, 0xa7, 0x4e, 0xf4, 0xe3, 0x62, 0x33, 0x48, 0x20, 0x40, 0x18, 0x52, 0x10, 0x84, 0x4c, 0xfd, 0x83, 0x14, 0x28, 0x03, 0xd7, 0x1f, 0x30, 0xb4, 0xb3, 0x02, 0x5b, 0xf3, 0xf9, 0x6d, 0xae, 0x81, 0xf5, 0xc1, 0x0f, 0x7e, 0xdb, 0xbd, 0x59, 0x2c, 0x70, 0x5a, 0xac, 0xf7, 0x07, 0xf3, 0x07, 0xb2, 0xaf, 0xa9, 0x18, 0x24, 0xab, 0x06, 0x52, 0xc3, 0x22, 0xe1, 0x41, 0xbf, 0x18, 0x81, 0x1a, 0x42, 0x9d, 0x05, 0x97, 0xf7, 0x44, 0x02, 0x01, 0xc9, 0xd7, 0x6f, 0x8e, 0xed, 0x49, 0xbe, 0xee, 0x22, 0xec, 0x4c, 0x21, 0x37, 0xe4, 0xfb, 0x8b, 0xce, 0xdc, 0x1d, 0x4a, 0x61, 0xf8, 0x95, 0xc7, 0x82, 0x0a, 0x38, 0x8b, 0x67, 0x08, 0x7a, 0x55, 0xa5, 0xbe, 0x46, 0x69, 0x3c, 0xc0, 0x2d, 0x2a, 0xd4, 0xa3, 0xc3, 0xeb, 0x46, 0x6c, 0x46, 0x03, 0x5e, 0x49, 0x81, 0x1f, 0xe0, 0x7f, 0xf0, 0xdd, 0xc8, 0xa4, 0x25, 0x96, 0xd6, 0x0e, 0x6a, 0x7a, 0x4a, 0x8b, 0xa8, 0xe3, 0xed, 0x52, 0x88, 0xe3, 0x50, 0x3a, 0xd7, 0x1f, 0x58, 0x2a, 0x2f, 0xe1, 0xfa, 0xd1, 0xd4, 0x68, 0x44, 0x97, 0xdc, 0x83, 0x9d, 0xd3, 0x93, 0x5e, 0x4d, 0x3e, 0x1d, 0x9b, 0x40, 0xa8, 0x5d, 0xa4, 0x06, 0xe9, 0x16, 0x40, 0x1f, 0x1b, 0x50, 0x65, 0x76, 0x06, 0xfe, 0x4e, 0x2b, 0xdc, 0xdd, 0xcc, 0x95, 0x27, 0x9f, 0xe1, 0x88, 0xff, 0x49, 0x8b, 0xd3, 0x80, 0xda, 0xde, 0x0d, 0x7b, 0x2d, 0x55, 0x92, 0x6c, 0x20, 0x6a, 0xc8, 0xac, 0xf6, 0x64, 0xa7, 0xe8, 0xfa, 0x71, 0x78, 0xd2, 0x65, 0xf4, 0xdc, 0x16, 0x82, 0x20, 0x11, 0x90, 0x10, 0xc6, 0x71, 0xbc, 0xe8, 0x6b, 0x3b, 0x6e, 0xe0, 0x9e, 0x96, 0xc3, 0xee, 0x89, 0xd3, 0x57, 0x91, 0xc5, 0xf3, 0xb8, 0x6c, 0x73, 0x69, 0x1b, 0x34, 0x88, 0x21, 0x4e, 0xcd, 0x68, 0xc0, 0xee, 0xb0, 0xb7, 0x2e, 0xda, 0x90, 0x6b, 0x52, 0xe7, 0x3d, 0x26, 0x1c, 0xd6, 0xc8, 0xc4, 0xc9, 0x83, 0xe8, 0x2f, 0x62, 0x5e, 0x9c, 0x7b, 0x86, 0x1f, 0x12, 0x2f, 0x6a, 0xb6, 0xc8, 0xe0, 0x1e, 0x81, 0xf1, 0x05, 0x12, 0xc2, 0x1a, 0x06, 0xd8, 0x50, 0x0d, 0x96, 0x2b, 0x8d, 0xf6, 0x43, 0x31, 0x97, 0xc4, 0x4b, 0xfd, 0xc3, 0xd2, 0xb2, 0x58, 0x47, 0xc7, 0x91, 0xc1, 0x36, 0xbb, 0xb1, 0xb2, 0xb2, 0x9b, 0x58, 0x25, 0x5d, 0xce, 0x63, 0x57, 0x10, 0x18, 0x95, 0xcc, 0xd0, 0xbf, 0x2f, 0x93, 0xfd, 0xed, 0xc1, 0xcb, 0xcd, 0x56, 0x3f, 0x66, 0xf9, 0x1a, 0x57, 0x2d, 0xb6, 0xed, 0x02, 0x04, 0xe7, 0x75, 0x5a, 0x70, 0x91, 0xf3, 0xab, 0x56, 0x8f, 0x26, 0xcc, 0x06, 0x87, 0x6d, 0xb0, 0x77, 0x1c, 0x2b, 0x38, 0xd4, 0x65, 0x6f, 0x4b, 0x38, 0x9e, 0xd5, 0x29, 0xb7, 0x1e, 0xa7, 0xfc, 0x9d, 0x89, 0x48, 0xb1, 0xfa, 0x47, 0xd3, 0x05, 0x5e, 0x35, 0xff, 0xe3, 0xe1, 0x9a, 0x46, 0xed, 0x66, 0x5c, 0x46, 0x59, 0x21, 0x74, 0x67, 0xfe, 0x57, 0x9f, 0xbe, 0xae, 0x65, 0x56, 0x31, 0xc7, 0x04, 0x01, 0xdc, 0x05, 0xcb, 0x68, 0xb4, 0x9a, 0xf6, 0x6a, 0x6a, 0x81, 0x65, 0xf1, 0x93, 0x0f, 0xe8, 0x25, 0x05, 0xcb, 0xb9, 0xe0, 0x84, 0x7f, 0x4a, 0x62, 0x9e, 0x8f, 0x41, 0x47, 0xd3, 0x8a, 0xc1, 0xb6, 0xf9, 0xff, 0xec, 0xda, 0xdf, 0x92, 0xa6, 0x96, 0x31, 0x4e, 0x9b, 0x74, 0x9b, 0x3d, 0x83, 0xdf, 0x31, 0x36, 0xa5, 0x93, 0x0f, 0xf7, 0x99, 0x51, 0x3c, 0x74, 0x53, 0xd7, 0xd5, 0x6e, 0x5d, 0x0f, 0x67, 0x46, 0x64, 0x87, 0x9c, 0x14, 0xf6, 0x21, 0x1a, 0xf4, 0x8a, 0x0c, 0xa8, 0xa0, 0xc1, 0xf2, 0x92, 0x44, 0xeb, 0x73, 0x4f, 0x8d, 0xcd, 0xd3, 0x62, 0x03, 0xa2, 0xef, 0x7e, 0x9a, 0x5f, 0x76, 0xed, 0x83, 0x3b, 0x55, 0x33, 0x48, 0x6f, 0x73, 0xee, 0x18, 0x3a, 0x9f, 0x00, 0x60, 0x29, 0xc7, 0xf0, 0x9b, 0x95, 0x6a, 0x8e, 0x6a, 0x6d, 0x4f, 0xd6, 0xe7, 0x36, 0x78, 0x17, 0x36, 0x4f, 0x52, 0x55, 0x5e, 0x7a, 0x2e, 0xeb, 0x57, 0x98, 0xf4, 0x74, 0x65, 0xb4, 0x16, 0xec, 0xa4, 0x43, 0xc4, 0x13, 0xe3, 0xaa, 0x5f, 0x12, 0xb5, 0x01, 0x2f, 0x61, 0xc6, 0x17, 0x58, 0xe8, 0x6c, 0xb6, 0x0a, 0x65, 0x7e, 0x28, 0xf9, 0x0d, 0x69, 0xf9, 0x0d, 0x76, 0x80, 0xff, 0x5a, 0xb4, 0x94, 0x98, 0x52, 0xc3, 0xc5, 0x33, 0x39, 0x25, 0x97, 0x12, 0xda, 0xcb, 0x49, 0x4e, 0x79, 0x39, 0x62, 0x1b, 0x08, 0xe6, 0x8c, 0x4d, 0x9e, 0xe1, 0xa5, 0x1b, 0x24, 0xba, 0x14, 0x23, 0x52, 0xa0, 0x59, 0xaf, 0xda, 0xc7, 0xe8, 0x37, 0xe2, 0x0d, 0x38, 0x27, 0xb8, 0xdc, 0x17, 0xe1, 0xc1, 0x52, 0x40, 0x06, 0xb3, 0x9f, 0x2f, 0xf2, 0x04, 0xaf, 0x34, 0x85, 0xa3, 0x0a, 0xc7, 0x29, 0xe5, 0xf8, 0x1b, 0x10, 0xc2, 0xe8, 0xf6, 0xbe, 0x41, 0x12, 0xbf, 0xc8, 0x31, 0x5c, 0xd9, 0xdb, 0x1a, 0x7a, 0x2f, 0xff, 0x73, 0x5a, 0x10, 0x1d, 0x15, 0xbf, 0x3e, 0xbf, 0xf0, 0x2c, 0x41, 0x18, 0xfd, 0x03, 0x01, 0x44, 0x73, 0xee, 0x94, 0xd1, 0x3e, 0x7e, 0x55, 0x7d, 0xad, 0x12, 0x36, 0x41, 0x6b, 0xfb, 0x57, 0x8f, 0xb0, 0xdd, 0xd7, 0xd9, 0xb8, 0x58, 0xea, 0x52, 0x75, 0xe8, 0x2b, 0xf8, 0x81, 0x0a, 0x34, 0xd2, 0x56, 0xa1, 0x6c, 0x76, 0xc1, 0x97, 0x21, 0xcf, 0x94, 0xc7, 0xd7, 0x1d, 0x9c, 0x1b, 0xdf, 0x3d, 0xd2, 0xf1, 0x2b, 0x2b, 0xd5, 0xc4, 0x60, 0xc5, 0x98, 0x08, 0x2d, 0xd2, 0x58, 0x55, 0xdc, 0x42, 0xd2, 0xc8, 0x26, 0xb7, 0xb2, 0xa7, 0x4c, 0x45, 0x4e, 0x43, 0x63, 0x76, 0x94, 0x23, 0xef, 0x92, 0x41, 0x5e, 0xb4, 0x1d, 0x55, 0x49, 0xc9, 0xa0, 0xc3, 0x52, 0xee, 0xad, 0x6c, 0x2c, 0x1f, 0x1d, 0x4e, 0x2d, 0x6a, 0x9c, 0xf9, 0xf4, 0xfd, 0x68, 0x43, 0x4e, 0x83, 0x55, 0x3d, 0x5b, 0xb1, 0x15, 0x66, 0xec, 0x1b, 0xb6, 0x1e, 0x30, 0x4d, 0x6c, 0x5d, 0x90, 0x17, 0x91, 0xa4, 0xd7, 0x28, 0xea, 0x34, 0x96, 0xde, 0x2c, 0x7f, 0xc7, 0x5d ],
+const [ 0x19, 0x8a, 0x69, 0x6d, 0xe9, 0x89, 0x61, 0xe3, 0xad, 0x0f, 0x95, 0x33, 0x39, 0x35, 0x0b, 0x58, 0x71, 0xd8, 0x7a, 0x41, 0x54, 0x92, 0x67, 0x6d, 0x3a, 0xe8, 0x8e, 0xb8, 0x59, 0xc5, 0x83, 0x75, 0x8e, 0x28, 0x99, 0xbc, 0x5b, 0x19, 0x03, 0x05, 0x2c, 0xe1, 0x39, 0xf6, 0xde, 0x7a, 0x9e, 0x7a, 0x81, 0x45, 0x5f, 0x13, 0x5d, 0xfb, 0x9e, 0x71, 0x34, 0xe6, 0xd0, 0x43, 0xc7, 0x51, 0x63, 0x4d, 0x9b, 0x3d, 0xa4, 0xbb, 0xfd, 0x55, 0xe1, 0xb5, 0x44, 0x24, 0xca, 0x33, 0x56, 0x86, 0x1d, 0x13, 0x6e, 0x5c, 0x83, 0x69, 0x1c, 0x84, 0xb5, 0x16, 0x8d, 0x09, 0xe2, 0x9c, 0x0c, 0x96, 0x55, 0x30, 0xc9, 0x31, 0x53, 0x11, 0xd9, 0x25, 0x42, 0x19, 0x7f, 0x40, 0x11, 0x91, 0xaa, 0x3f, 0xd3, 0x4a, 0xbe, 0x87, 0xad, 0xe9, 0x97, 0x16, 0xf3, 0x83, 0xcc, 0xb8, 0x8e, 0x6a, 0x30, 0x7e, 0xa1, 0x46, 0x9f, 0x6c, 0x6c, 0x67, 0xf7, 0x72, 0x70, 0x59, 0x64, 0x9e, 0xd3, 0xb9, 0xe1, 0x8f, 0x07, 0x48, 0xfb, 0x2d, 0xa7, 0x3e, 0xd8, 0x97, 0xa1, 0xe1, 0x79, 0x5d, 0x9a, 0x55, 0x3c, 0xf0, 0x8e, 0xb6, 0xa5, 0x56, 0xb7, 0x64, 0x5d, 0x22, 0xb1, 0x9e, 0x7b, 0xa4, 0xdb, 0x53, 0x03, 0x5d, 0x00, 0x34, 0xac, 0xb5, 0x37, 0x0e, 0xe7, 0xf1, 0x07, 0x57, 0x1c, 0x5f, 0xcf, 0x07, 0x37, 0xd3, 0x65, 0xa9, 0x63, 0x57, 0xfe, 0xb1, 0x15, 0x1f, 0x4e, 0x10, 0x4d, 0xbb, 0xf0, 0x06, 0x19, 0x90, 0x07, 0x37, 0x5a, 0x89, 0x26, 0x02, 0xca, 0x0a, 0x6d, 0x0e, 0x3e, 0x26, 0xf5, 0x25, 0x29, 0x11, 0x6f, 0x46, 0x62, 0xd8, 0x07, 0xf5, 0x27, 0x4f, 0x8f, 0xd6, 0x61, 0x4b, 0xd9, 0x7a, 0x29, 0x12, 0x64, 0x79, 0x8c, 0x10, 0x3b, 0xc1, 0x8b, 0xcc, 0x1b, 0x2d, 0x66, 0x1a, 0xd4, 0x5a, 0x1b, 0x91, 0xf1, 0xb6, 0x29, 0x3f, 0x9b, 0xd9, 0x99, 0x9c, 0xbb, 0x19, 0x3f, 0xbd, 0x5f, 0x58, 0x3e, 0xca, 0x5f, 0x21, 0xca, 0xb2, 0x40, 0xf4, 0x32, 0x1d, 0x58, 0xdd, 0x1d, 0xa3, 0x33, 0x4b, 0x13, 0x3b, 0x36, 0x20, 0x40, 0xf6, 0x82, 0x05, 0x75, 0xed, 0x1c, 0x00, 0x70, 0x77, 0x4a, 0x48, 0x5d, 0xa0, 0x40, 0x58, 0x9d, 0xd7, 0xfb, 0x42, 0xc5, 0xe7, 0x6e, 0x46, 0xea, 0x29, 0xdc, 0xa3, 0x1c, 0xf7, 0x85, 0xad, 0x30, 0x63, 0x84, 0x20, 0xc3, 0x29, 0xf8, 0xb4, 0x7b, 0xe3, 0x62, 0xf1, 0x90, 0x7c, 0x4e, 0x45, 0x8b, 0xe7, 0x36, 0x54, 0x4e, 0x11, 0xa3, 0x8f, 0x55, 0x14, 0x95, 0x08, 0x3b, 0xad, 0x25, 0x84, 0x80, 0xf0, 0x69, 0xd2, 0x89, 0x3a, 0x98, 0x5c, 0xe8, 0x68, 0x6e, 0xfc, 0xde, 0x46, 0xd2, 0x11, 0x1e, 0x4a, 0xb7, 0xd1, 0xd4, 0x83, 0x40, 0xe1, 0xe6, 0xcc, 0x27, 0x23, 0x7a, 0x45, 0x5f, 0xcf, 0xb8, 0x04, 0xf8, 0xc5, 0xd1, 0x07, 0x44, 0x21, 0x40, 0x6d, 0x38, 0x10, 0x50, 0xe6, 0x14, 0xe3, 0xde, 0x69, 0x47, 0x62, 0x60, 0x25, 0x8c, 0x63, 0x26, 0xb9, 0x5a, 0x9b, 0xe0, 0xa7, 0x7b, 0xb3, 0x61, 0x06, 0xfa, 0x9e, 0xa2, 0x78, 0x43, 0x2b, 0x0a, 0x5c, 0x86, 0xd6, 0xec, 0x45, 0x5c, 0xe4, 0x52, 0xaa, 0xad, 0xaf, 0xf9, 0xdf, 0xd1, 0x3e, 0x9c, 0x43, 0xf5, 0x18, 0x75, 0xbc, 0xc1, 0x5a, 0x02, 0x60, 0x38, 0x08, 0x05, 0x75, 0xdf, 0xa1, 0xce, 0x9c, 0x21, 0xf6, 0xbc, 0x49, 0xf2, 0x3b, 0x02, 0x76, 0xb3, 0x5f, 0xa7, 0x99, 0x55, 0x99, 0xd1, 0xd3, 0xc2, 0x44, 0x42, 0x6a, 0x78, 0xec, 0x23, 0x79, 0x77, 0xa9, 0x00, 0xe6, 0x5e, 0xab, 0x15, 0x95, 0xd1, 0x17, 0xc8, 0xdb, 0x1d, 0x12, 0x76, 0x36, 0x1f, 0x1a, 0x72, 0x3b, 0x62, 0x9d, 0x4b, 0xcf, 0x87, 0xc4, 0x4e, 0x9a, 0xea, 0x90, 0x4c, 0xb9, 0x82, 0x29, 0x9e, 0xb3, 0x09, 0x73, 0x65, 0xaf, 0x5d, 0xe1, 0x16, 0xe4, 0x27, 0x8e, 0x37, 0x50, 0xba, 0x8a, 0x63, 0xad, 0x3e, 0x71, 0x94, 0xa1, 0x0d, 0x43, 0xa2, 0x35, 0x5d, 0x6f, 0x06, 0x88, 0x20, 0x31, 0xe4, 0xc5, 0x28, 0x1e, 0x49, 0x52, 0x8f, 0xfe, 0xb1, 0x4a, 0x56, 0xd9, 0xcc, 0x2e, 0x4c, 0x55, 0x81, 0xd7, 0x31, 0x3f, 0x34, 0xaf, 0x1c, 0x67, 0x44, 0x21, 0x1a, 0xb1, 0xd8, 0x4e, 0x18, 0x69, 0xdc, 0x02, 0x03, 0xd7, 0x46, 0xe6, 0x2d, 0x13, 0x9e, 0xf7, 0xf3, 0x1b, 0xbd, 0x36, 0x9d, 0x23, 0xd5, 0xa1, 0x85, 0x2c, 0xb1, 0x63, 0x7c, 0xd8, 0x3e, 0x48, 0x69, 0x7d, 0x4b, 0x73, 0x33, 0x78, 0x8d, 0x53, 0xe1, 0xc4, 0xe6, 0xd3, 0x00, 0xcb, 0xe6, 0xd1, 0x45, 0x7b, 0x93, 0xd2, 0x74, 0x9d, 0x65, 0xf4, 0x80, 0x62, 0x95, 0x24, 0xf4, 0x3f, 0x98, 0x90, 0x91, 0xfb, 0xe6, 0x5f, 0x39, 0x07, 0xff, 0xa0, 0x0c, 0x0d, 0xb0, 0x81, 0xd0, 0xcb, 0x92, 0xc2, 0x96, 0x22, 0xd5, 0x69, 0x9a, 0x6a, 0x3b, 0xb6, 0x6c, 0x09, 0x67, 0x59, 0x4d, 0x44, 0x58, 0xe3, 0xdc, 0x55, 0x31, 0x7b, 0xf2, 0xbd, 0x3b, 0xd2, 0xca, 0xdb, 0x2c, 0x59, 0x65, 0xbe, 0xaa, 0xb1, 0x2c, 0x38, 0x0b, 0x62, 0xd8, 0x33, 0x5f, 0xd1, 0x8f, 0x48, 0xb0, 0x6c, 0x4f, 0x8e, 0x88, 0x28, 0x90, 0xb0, 0xb4, 0x2d, 0x25, 0x43, 0x48, 0xcf, 0x64, 0x56, 0xe3, 0xc1, 0x86, 0x4a, 0x34, 0x85, 0x51, 0xe4, 0xbd, 0x27, 0xf4, 0xa0, 0xd7, 0x2b, 0x32, 0x48, 0xf7, 0xc4, 0xc2, 0xc6, 0x2f, 0x47, 0xf6, 0x37, 0xf8, 0xde, 0x9c, 0x40, 0x2e, 0x81, 0x22, 0xa5, 0x5c, 0x22, 0xfd, 0x17, 0x3a, 0x28, 0x4a, 0x4e, 0x74, 0x1f, 0xb6, 0x58, 0xad, 0xae, 0x9c, 0x31, 0xc4, 0xc9, 0x6e, 0x93, 0x56, 0x27, 0x56, 0x0f, 0x84, 0xf7, 0x1d, 0x5d, 0xf6, 0xcf, 0x4b, 0xf1, 0x1f, 0xe5, 0x90, 0xce, 0xc3, 0x81, 0x62, 0x9f, 0xb7, 0xb2, 0xe8, 0x04, 0xe9, 0x41, 0x17, 0x2a, 0xa0, 0xe3, 0x1b, 0x9e, 0x04, 0xb2, 0xf8, 0x63, 0xe0, 0xde, 0x71, 0x42, 0xa7, 0xa0, 0x29, 0x61, 0xb5, 0x70, 0x08, 0x17, 0xd8, 0x78, 0xe0, 0xff, 0x0f, 0x48, 0x50, 0x4b, 0x91, 0xcb, 0xe9, 0x5b, 0x11, 0x7a, 0x90, 0x8f, 0x41, 0xcf, 0x23, 0x59, 0x95, 0xfd, 0x60, 0x96, 0x49, 0xde, 0x02, 0x1e, 0xa5, 0x2d, 0x2c, 0x99, 0x80, 0xf5, 0x0b, 0x95, 0x03, 0x49, 0xb8, 0xd6, 0xaf, 0x36, 0x5b, 0xed, 0xa1, 0xf6, 0x96, 0x0d, 0x15, 0x66, 0x21, 0x19, 0x2a, 0xbb, 0xb1, 0x01, 0xe5, 0x70, 0x1f, 0x4f, 0x77, 0x82, 0xc6, 0xfd, 0xc3, 0xe0, 0x2d, 0x8a, 0x1b, 0x1d, 0xe6, 0x4d, 0x4a, 0x69, 0xb5, 0x08, 0xd8, 0xbf, 0xf5, 0xc0, 0x89, 0x60, 0x38, 0xcc, 0x27, 0x7f, 0x2e, 0x2d, 0x81, 0x3e, 0xc8, 0x1d, 0xb4, 0xd9, 0x9c, 0xea, 0xa9, 0x21, 0x8c, 0x05, 0xdf, 0x2d, 0xa2, 0x56, 0x6b, 0x4c, 0x3f, 0xd3, 0x3d, 0x3d, 0x75, 0x51, 0xa4, 0xa3, 0xb1, 0x9a, 0x15, 0xb3, 0x9d, 0xbf, 0x28, 0x30, 0x44, 0xb0, 0xe3, 0x99, 0x78, 0x09, 0x3b, 0xa1, 0x70, 0x2f, 0xd8, 0xdf, 0xb6, 0x9c, 0x19, 0xc7, 0x41, 0x77, 0x58, 0xd9, 0xdd, 0x68, 0x6f, 0x18, 0xd4, 0xaa, 0x7a, 0xbe, 0xc7, 0x62, 0xdf, 0x2e, 0xdd, 0x2f, 0x8c, 0x2a, 0x20, 0x02, 0x80, 0x46, 0x23, 0x30, 0x8d, 0x9c, 0xe8, 0xc5, 0x5c, 0xc2, 0x02, 0x1c, 0xb1, 0xf9, 0xf7, 0xac, 0xf0, 0xa7, 0xe8, 0x25, 0xe1, 0x08, 0x74, 0xbc, 0xb0, 0x20, 0xd9, 0xc2, 0x38, 0xf4, 0x5c, 0x7c, 0x80, 0xf9, 0xec, 0x2f, 0x86, 0xcd, 0x02, 0x7a, 0x3c, 0x25, 0xcb, 0xe8, 0xd1, 0x07, 0x89, 0xc6, 0x31, 0x39, 0x37, 0x32, 0xcf, 0xf9, 0x6b, 0x75, 0xa2, 0xee, 0x81, 0x93, 0x6d, 0x5f, 0xf6, 0x20, 0x44, 0xa3, 0x12, 0x54, 0x4c, 0xd8, 0xca, 0x62, 0xc2, 0xd8, 0xe4, 0x06, 0x3f, 0x69, 0x5c, 0x5d, 0x3a, 0xb4, 0x07, 0xfa, 0xce, 0xf9, 0x76, 0x36, 0xbd, 0x80, 0x1d, 0xc7, 0xb6, 0xd3, 0xb4, 0x95, 0xd3, 0x2a, 0xde, 0xc9, 0x66, 0x27, 0x09, 0x26, 0xf5, 0xc3, 0x95, 0x9c, 0x83, 0x89, 0x38, 0x1a, 0x11, 0x02, 0xa1, 0xa5, 0x65, 0x70, 0x5b, 0xa7, 0x0a, 0xbe, 0xf5, 0x89, 0x98, 0xb8, 0x60, 0x83, 0x36, 0x78, 0x98, 0xb3, 0x5c, 0x20, 0x86, 0x6d, 0xde, 0xcf, 0x26, 0xd3, 0x26, 0xcd, 0xe5, 0xa5, 0xc0, 0x09, 0x4d, 0x5a, 0x1d, 0xc6, 0xe3, 0x6f, 0x90, 0x91, 0x50, 0xff, 0x9d, 0x76, 0xc0, 0x94, 0x73, 0x73, 0x88, 0x3d, 0xb7, 0x2d, 0x0b, 0xe0, 0x83, 0xe2, 0xde, 0xd2, 0xaf, 0x9f, 0x2a, 0xa5, 0x4f, 0xb3, 0x52, 0x41, 0x7c, 0x63, 0xd6, 0x36, 0x58, 0xdf, 0x78, 0x51, 0x4c, 0x75, 0x9d, 0x6e, 0x94, 0x05, 0xf5, 0x8c, 0xfe, 0xb5, 0x5e, 0x27, 0xee, 0xe5, 0x06, 0xc2, 0xa6, 0x66, 0xd0, 0xc3, 0xc4, 0xe6, 0xfa, 0x83, 0x0c, 0xaf, 0xfc, 0xa6, 0x68, 0x92, 0xb3, 0xa8, 0x2d, 0x1d, 0xbe, 0xb9, 0xa0, 0x15, 0x29, 0xcb, 0xb9, 0x20, 0x48, 0xe9, 0x27, 0xc1, 0xe6, 0xca, 0x93, 0x89, 0xa0, 0xa6, 0x29, 0x8c, 0x8b, 0x48, 0x55, 0x13, 0x1d, 0x65, 0xca, 0x90, 0x4a, 0x2c, 0xc9, 0xd7, 0xed, 0x1e, 0xa0, 0x8a, 0x6a, 0x20, 0x71, 0xd5, 0x91, 0xce, 0x34, 0x5c, 0xc6, 0x13, 0xff, 0x72, 0x5f, 0xf6, 0x85, 0x8c, 0x4e, 0xb7, 0xde, 0xf5, 0x00, 0x1b, 0x86, 0xc3, 0x85, 0x04, 0xa7, 0x09, 0xf0, 0x44, 0x9b, 0x4e, 0x01, 0xb3, 0xac, 0x3e, 0x01, 0x80, 0x1f, 0xa0, 0xee, 0xc4, 0x72, 0x88, 0xd8, 0x5d, 0xe1, 0xce, 0x8b, 0xf9, 0x2f, 0xbe, 0x6e, 0x71, 0xa2, 0x11, 0xab, 0x59, 0x50, 0x1d, 0x90, 0xd5, 0x99, 0x48, 0x36, 0xad, 0xf5, 0xc2, 0x60, 0xa4, 0xf0, 0x74, 0xa5, 0x06, 0x72, 0x33, 0xd2, 0x81, 0x44, 0x3a, 0x8a, 0x35, 0xd0, 0xd7, 0x2f, 0x0e, 0x28, 0x64, 0x06, 0x52, 0x4a, 0x79, 0x95, 0x76, 0xa3, 0x60, 0x50, 0x36, 0xd1, 0xc9, 0x75, 0xe5, 0xad, 0xbf, 0x35, 0x01, 0x89, 0xdb, 0x14, 0x0a, 0xb6, 0xb8, 0x92, 0x94, 0x4a, 0xa6, 0x0b, 0x9c, 0x1f, 0xa3, 0xdc, 0x18, 0x1f, 0x87, 0xc7, 0xd1, 0xbf, 0x7e, 0x99, 0x75, 0xca, 0xbb, 0x09, 0xe8, 0x60, 0x6b, 0xe4, 0xdc, 0x3e, 0xe8, 0x67, 0xa1, 0x40, 0x30, 0xec, 0x3e, 0x23, 0x95, 0xca, 0xc0, 0x90, 0xb6, 0x76, 0xd2, 0x56, 0xad, 0xee, 0x8e, 0xf8, 0x8a, 0x57, 0x93, 0x67, 0x01, 0xe4, 0x58, 0x10, 0x5f, 0xfb, 0xc0, 0x19, 0xc2, 0x93, 0xee, 0xe8, 0x8a, 0xe1, 0x5a, 0xe6, 0x0b, 0x33, 0x24, 0x82, 0x84, 0x1c, 0xa9, 0x78, 0x55, 0xd1, 0x55, 0x53, 0x6c, 0xd3, 0xb8, 0x30, 0x01, 0xce, 0xdb, 0xc6, 0x83, 0xc1, 0xd4, 0xa3, 0xd2, 0x60, 0x98, 0xb8, 0xae, 0xb7, 0x11, 0x18, 0x70, 0x0f, 0x70, 0xfd, 0xf7, 0x15, 0xc5, 0x0c, 0xe6, 0x39, 0xcc, 0xda, 0x0d, 0x55, 0x0a, 0xae, 0x24, 0x8f, 0x19, 0x89, 0xbf, 0x80, 0x41, 0x63, 0x7e, 0x96, 0x48, 0xb8, 0x84, 0xb6, 0x8a, 0x43, 0x2b, 0x26, 0x4c, 0x0a, 0xf6, 0xab, 0x4d, 0x9a, 0xc8, 0xee, 0x9e, 0x94, 0x53, 0x24, 0xb4, 0x68, 0xd2, 0xee, 0xbc, 0x61, 0xfb, 0x7e, 0x2e, 0xe2, 0x2f, 0xfc, 0xa5, 0xef, 0xf5, 0x28, 0xee, 0xee, 0xa6, 0x40, 0x5e, 0xaf, 0x6a, 0x24, 0x69, 0xab, 0x62, 0xb8, 0x71, 0x89, 0x27, 0x8a, 0xdc, 0xe7, 0x74, 0xb5, 0x69, 0x56, 0x1f, 0x05, 0xc4, 0xa6, 0x4e, 0x5b, 0x58, 0x65, 0xe7, 0x53, 0x64, 0xa2, 0x48, 0x25, 0x51, 0xf6, 0x39, 0xc9, 0x43, 0xc6, 0x1e, 0x5f, 0xee, 0xc2, 0x72, 0xcd, 0xab, 0xb1, 0x70, 0xaa, 0xca, 0x71, 0x13, 0x5b, 0x2a, 0x39, 0x41, 0x7b, 0x08, 0x22, 0x43, 0x81, 0x15, 0xe6, 0x79, 0x9c, 0xcb, 0xe7, 0x4c, 0xe2, 0x00, 0x73, 0x63, 0xaa, 0xbc, 0x46, 0x1a, 0x36, 0x48, 0x50, 0x30, 0x96, 0x87, 0xb9, 0xbf, 0xc8, 0x89, 0x23, 0x72, 0x24, 0x5e, 0x2f, 0xf2, 0xf8, 0x28, 0x42, 0xa1, 0x6f, 0x74, 0x89, 0x8b, 0xb7, 0xcb, 0x3a, 0x9a, 0x62, 0x83, 0x1d, 0x09, 0x0d, 0xdb, 0x4c, 0x1a, 0x40, 0x48, 0x37, 0x0c, 0x96, 0x09, 0xea, 0x47, 0x1e, 0x01, 0x93, 0xdb, 0x00, 0xc6, 0x3e, 0x28, 0x64, 0xf6, 0xe4, 0xde, 0x8f, 0xca, 0xa4, 0x29, 0x4f, 0xed, 0x50, 0x25, 0x9a, 0x8e, 0x2b, 0x98, 0x72, 0xb4, 0xf1, 0xe0, 0x0b, 0xd1, 0x18, 0x2a, 0x30, 0x9b, 0x56, 0xe5, 0xe3, 0x17, 0x63, 0x77, 0x44, 0xf6, 0x00, 0x2e, 0xb4, 0x25, 0x38, 0x79, 0x39, 0xa0, 0xe6, 0x58, 0x24, 0x87, 0x77, 0x11, 0xf2, 0x73, 0xf1, 0x25, 0x71, 0x0a, 0x34, 0x82, 0x24, 0xd1, 0x81, 0xfa, 0xe7, 0x42, 0x38, 0xf4, 0xd6, 0x1f, 0xe6, 0x61, 0x6c, 0x05, 0x7e, 0xf2, 0xe8, 0x44, 0xe7, 0x88, 0xf5, 0xee, 0xb7, 0xed, 0x89, 0x2e, 0x3f, 0xc1, 0x0e, 0xdb, 0xc7, 0xb7, 0xc0, 0x4d, 0x1a, 0x01, 0x56, 0x70, 0x46, 0x08, 0xe4, 0x16, 0x9d, 0x61, 0x00, 0x92, 0xff, 0xfc, 0x24, 0x82, 0x5c, 0x9f, 0x53, 0xec, 0x74, 0x93, 0xff, 0x8d, 0xe1, 0x9e, 0x2b, 0x6d, 0x58, 0x31, 0xcd, 0xb7, 0x2c, 0xe1, 0x76, 0xc8, 0x13, 0x1b, 0x34, 0x86, 0x2d, 0x14, 0xb8, 0xf3, 0x42, 0x00, 0xb4, 0x02, 0x4c, 0x84, 0x87, 0xa9, 0x35, 0x6d, 0x1c, 0x37, 0xe1, 0xa2, 0x0f, 0xe8, 0x6f, 0x57, 0x12, 0xb6, 0xbc, 0x84, 0x90, 0x73, 0x29, 0x96, 0x90, 0x15, 0x9f, 0x64, 0xdb, 0x51, 0xd0, 0x64, 0x61, 0x6b, 0xbf, 0x1f, 0xd9, 0x4c, 0x82, 0xe2, 0xa8, 0xd5, 0x46, 0xb7, 0x04, 0x73, 0x95, 0x93, 0x59, 0xf3, 0xd4, 0xd1, 0xeb, 0x98, 0x10, 0xdf, 0xbe, 0x6b, 0xfa, 0x38, 0xb3, 0xd3, 0x2f, 0x92, 0xf3, 0x65, 0xbd, 0x58, 0x90, 0xfd, 0xe3, 0x5a, 0x6a, 0x0e, 0x19, 0xc4, 0x50, 0x36, 0x50, 0x4c, 0x68, 0x16, 0x7b, 0xb0, 0xd1, 0x60, 0x4e, 0x60, 0x86, 0x31, 0x46, 0x77, 0x86, 0xa2, 0xe9, 0xf0, 0x32, 0x9a, 0x4f, 0x17, 0xf6, 0xe6, 0xe1, 0x3d, 0x2b, 0x8b, 0x61, 0xb0, 0x3c, 0x5a, 0x2b, 0xeb, 0x08, 0xc6, 0xba, 0x09, 0x88, 0xf3, 0x6d, 0x80, 0xb2, 0x0f, 0x8b, 0x0b, 0x9d, 0xe5, 0x86, 0xe8, 0xe5, 0xaf, 0x7c, 0x44, 0x51, 0x2c, 0x03, 0xf4, 0xb3, 0xf3, 0x26, 0x65, 0x10, 0x07, 0xab, 0xd6, 0x01, 0xab, 0x98, 0xc4, 0x59, 0x78, 0xf5, 0xa6, 0x08, 0xac, 0xd2, 0xdb, 0x40, 0xc5, 0x8c, 0xe1, 0xd6, 0x4f, 0x4d, 0xc7, 0xea, 0xfa, 0xd2, 0xe5, 0xca, 0xef, 0x71, 0xca, 0x14, 0x64, 0x5a, 0x76, 0x1b, 0x6e, 0x1d, 0xca, 0x8c, 0x17, 0x6c, 0x3c, 0x52, 0xb1, 0x22, 0xcf, 0xb6, 0x6a, 0x85, 0x43, 0xcb, 0x20, 0xc8, 0x88, 0x09, 0x76, 0xd5, 0x79, 0x38, 0x27, 0x49, 0xc7, 0x90, 0x9a, 0xbf, 0x33, 0x1e, 0xb7, 0x51, 0x01, 0x69, 0xfa, 0x5c, 0xa9, 0x56, 0xc5, 0x84, 0xcf, 0x49, 0xfb, 0xf8, 0x75, 0x8d, 0xca, 0xf7, 0x70, 0xf6, 0xc8, 0x94, 0x18, 0xc4, 0x42, 0xb6, 0x44, 0xcb, 0xd0, 0x62, 0x76, 0xd1, 0x2d, 0x3d, 0x52, 0x38, 0x46, 0x4c, 0x55, 0xdd, 0x91, 0xff, 0xc3, 0x3f, 0xa0, 0x6e, 0xe1, 0xe4, 0xf6, 0xe2, 0x65, 0xf8, 0x19, 0x97, 0x2b, 0x38, 0xe9, 0xc0, 0x29, 0x0e, 0x2f, 0xcc, 0xa5, 0xfd, 0x79, 0xe8, 0xa5, 0x40, 0x26, 0xc5, 0xa8, 0xae, 0xbd, 0x9b, 0x93, 0xe1, 0x83, 0x6e, 0xee, 0x97, 0x4c, 0x90, 0x50, 0x58, 0x91, 0x67, 0x18, 0x5a, 0xc3, 0x70, 0x5e, 0xa1, 0xdf, 0x84, 0x2a, 0x6a, 0x43, 0x5a, 0xe3, 0xca, 0xc0, 0x4e, 0x0a, 0x93, 0xf0, 0x60, 0x28, 0x77, 0xc9, 0x80, 0x04, 0x70, 0x73, 0x09, 0x1a, 0x5f, 0x57, 0x8b, 0x49, 0xf3, 0x79, 0xcd, 0xcc, 0xcc, 0x07, 0x12, 0x6b, 0xe0, 0x32, 0x9c, 0xf2, 0x1e, 0x3c, 0x6f, 0xe3, 0x52, 0xd2, 0x57, 0x68, 0x49, 0x9d, 0x2c, 0x8b, 0x35, 0x14, 0x55, 0xa9, 0x52, 0x94, 0x8b, 0x24, 0xca, 0xb2, 0xdf, 0x59, 0xd7, 0xd0, 0xff, 0xd2, 0x27, 0xee, 0xb5, 0xbc, 0x84, 0xc3, 0xb0, 0x9b, 0xb4, 0x0c, 0x87, 0x3c, 0x9e, 0x25, 0xfb, 0xeb, 0xaf, 0xd6, 0x7d, 0xe7, 0x7c, 0x6f, 0xf0, 0x13, 0xa9, 0x17, 0xaf, 0xee, 0x09, 0x61, 0xd2, 0xc5, 0x06, 0x20, 0xad, 0x28, 0x44, 0x7d, 0x9a, 0x9a, 0x81, 0x46, 0xf9, 0x8c, 0xc0, 0x89, 0x74, 0x8d, 0xa6, 0x62, 0x88, 0xbb, 0x24, 0x11, 0x40, 0x7d, 0x56, 0x4f, 0x44, 0x74, 0xab, 0xe3, 0x13, 0xae, 0x47, 0x70, 0x8d, 0x1d, 0xa5, 0x91, 0xb4, 0x48, 0x81, 0x27, 0xb3, 0x41, 0xf5, 0xf2, 0x20, 0xd7, 0xe2, 0x5f, 0x7e, 0x0c, 0x91, 0xa1, 0x06, 0xca, 0x9a, 0x03, 0xa7, 0xd1, 0x05, 0x7d, 0x4b, 0xf4, 0xb0, 0x85, 0x5c, 0x85, 0xf0, 0x27, 0x86, 0x0e, 0x7b, 0x58, 0xbf, 0x41, 0x86, 0x88, 0x85, 0x32, 0x2a, 0x76, 0x67, 0xc4, 0x0c, 0x48, 0xc7, 0x61, 0x3d, 0xdb, 0xde, 0xef, 0x5f, 0x58, 0x01, 0xff, 0x0a, 0x08, 0x22, 0x47, 0x6e, 0x69, 0x99, 0x52, 0x39, 0x81, 0x25, 0x76, 0xbb, 0x72, 0x2d, 0x07, 0x47, 0x4f, 0x4c, 0xca, 0xdd, 0x2e, 0x0d, 0xac, 0x07, 0x7e, 0xf3, 0xb4, 0x01, 0x9b, 0xbd, 0x37, 0x1c, 0xa0, 0xe7, 0x4b, 0x64, 0x7d, 0x74, 0x7d, 0x81, 0x49, 0xeb, 0xc7, 0xdb, 0xd9, 0xa0, 0xbc, 0x02, 0x91, 0x34, 0x06, 0x4c, 0x7a, 0x5f, 0x12, 0xc0, 0x95, 0xed, 0x0a, 0x32, 0x6f, 0x07, 0x04, 0xb0, 0xf6, 0xb4, 0x79, 0x1d, 0x8b, 0xa0, 0xf8, 0x1c, 0x58, 0x1b, 0x1b, 0x30, 0xe4, 0x64, 0xbb, 0x21, 0xe4, 0x28, 0x60, 0xa1, 0x55, 0x46, 0xfb, 0x2f, 0xc7, 0xd5, 0xd8, 0x3c, 0xfc, 0x68, 0xce, 0x8c, 0xb1, 0x90, 0xb9, 0xe0, 0xbc, 0xa3, 0x2a, 0xd2, 0x57, 0xbc, 0x5c, 0x00, 0xbc, 0x03, 0x6a, 0x6c, 0xf2, 0x2f, 0xc0, 0x23, 0xe6, 0x49, 0xcf, 0x1d, 0xbd, 0xb2, 0x06, 0x65, 0x69, 0x67, 0xfd, 0x79, 0x7a, 0x84, 0xf3, 0xf4, 0x37, 0x07, 0x7a, 0x6a, 0xee, 0xd7, 0x71, 0x94, 0x88, 0x05, 0x33, 0xad, 0x60, 0x51, 0x0e, 0x1b, 0x56, 0xf0, 0xf7, 0x52, 0x1f, 0x8c, 0x7b, 0xf6, 0xdf, 0x8d, 0xf9, 0x3f, 0xf9, 0x97, 0x0f, 0xa2, 0x25, 0x53, 0x52, 0xae, 0xc4, 0x73, 0x42, 0x34, 0x71, 0xf0, 0x7d, 0xaa, 0xd9, 0x96, 0x32, 0xd1, 0xcc, 0xc3, 0xd9, 0x96, 0x94, 0x6c, 0x21, 0x36, 0x85, 0x60, 0x2a, 0xa6, 0xd5, 0xd1, 0xf5, 0x32, 0xae, 0x10, 0x19, 0x64, 0x82, 0x98, 0xb7, 0x27, 0x9f, 0x4e, 0xaf, 0x2c, 0x03, 0x07, 0x14, 0x8d, 0x71, 0x4b, 0xde, 0xb1, 0xc4, 0x59, 0xdf, 0x6f, 0x84, 0x6a, 0xf9, 0x76, 0xb7, 0x3a, 0x8d, 0xec, 0xf9, 0xc5, 0x36, 0x55, 0xcf, 0x4e, 0xb8, 0xb7, 0x39, 0xa6, 0x33, 0xfb, 0x86, 0xab, 0x9d, 0x97, 0x6c, 0x0f, 0x6e, 0x6a, 0x58, 0x5b, 0x9d, 0xe7, 0x03, 0x33, 0xcc, 0x76, 0x46, 0xdb, 0xc0, 0x17, 0x2f, 0xfa, 0x13, 0x49, 0x54, 0x9e, 0x2d, 0x2a, 0x67, 0x81, 0x70, 0xdf, 0x0b, 0x8b, 0xb3, 0x36, 0xe6, 0x97, 0xf2, 0x8a, 0xf8, 0x7a, 0x43, 0xe8, 0x2b, 0x41, 0x0c, 0x6f, 0x2b, 0xbb, 0x74, 0xfd, 0x77, 0x38, 0x17, 0x08, 0xb9, 0x8f, 0xfe, 0xc9, 0x53, 0x66, 0xce, 0xa0, 0x3a, 0xad, 0x3f, 0xb4, 0x07, 0x6c, 0xd0, 0xda, 0x4b, 0xbf, 0xba, 0xb8, 0x23, 0x1e, 0x22, 0x2a, 0x0d, 0xe2, 0x92, 0xe4, 0xfa, 0x05, 0xaa, 0x59, 0xa5, 0x2a, 0x13, 0xdc, 0x22, 0xdd, 0xb5, 0x05, 0xba, 0x1b, 0x2a, 0x57, 0xf6, 0x15, 0x72, 0x1f, 0xfa, 0x31, 0xe8, 0x9f, 0x14, 0x52, 0x74, 0x6c, 0x95, 0x59, 0x03, 0x15, 0xe0, 0xec, 0x34, 0x05, 0xc0, 0x76, 0x54, 0xab, 0xff, 0x6e, 0x8d, 0xd8, 0x34, 0xdd, 0x5a, 0x68, 0xdc, 0x1a, 0x3e, 0x24, 0xac, 0xd8, 0xb6, 0xe7, 0x26, 0x63, 0x6c, 0x00, 0x6b, 0x27, 0xad, 0xd8, 0x50, 0x72, 0x1d, 0xd5, 0xb3, 0x7b, 0xaa, 0x7d, 0x10, 0xa2, 0xbe, 0xdf, 0x4f, 0xf9, 0xb9, 0x2e, 0xe0, 0x04, 0x9e, 0xb0, 0x0a, 0xbd, 0x0c, 0xd6, 0x80, 0xdb, 0x71, 0xad, 0x36, 0x54, 0x7a, 0x75, 0x72, 0x21, 0xce, 0x8e, 0x26, 0x41, 0xfb, 0x9c, 0x7d, 0x00, 0xb0, 0xe3, 0xb4, 0x79, 0x2e, 0xf3, 0x2b, 0x5a, 0xf9, 0x8a, 0xbc, 0xe7, 0xd3, 0xb6, 0x4b, 0x42, 0xea, 0x3a, 0x9e, 0xe9, 0x51, 0x33, 0x6f, 0x80, 0xad, 0xfb, 0xc0, 0xd1, 0x31, 0x4e, 0x6f, 0x11, 0xcc, 0xab, 0x0a, 0x64, 0xa0, 0xfd, 0xe4, 0xa4, 0xb7, 0x7b, 0x69, 0x5e, 0xf1, 0xcd, 0xae, 0x1e, 0x41, 0x70, 0x4d, 0xed, 0x19, 0x5b, 0x6f, 0x17, 0x23, 0xe3, 0x2a, 0x32, 0x32, 0xdc, 0x0e, 0x5b, 0x78, 0x01, 0xfa, 0xc3, 0xf9, 0x96, 0x34, 0x6b, 0x3f, 0x4b, 0xb9, 0x2b, 0x50, 0x64, 0xd2, 0xf9, 0xdd, 0x17, 0xe8, 0x68, 0xbc, 0x35, 0x99, 0x6f, 0x99, 0x0d, 0x0c, 0x6c, 0xe8, 0x8e, 0x81, 0x68, 0x1d, 0xab, 0x2c, 0x9d, 0x20, 0x04, 0x43, 0x35, 0xfb, 0xc2, 0x56, 0x55, 0xd6, 0xc2, 0xdf, 0x5a, 0x26, 0xf7, 0x1a, 0x63, 0x21, 0x09, 0x16, 0x0f, 0x75, 0x42, 0x0c, 0x88, 0x39, 0xab, 0xf1, 0xc0, 0x24, 0x72, 0x47, 0xfa, 0xfd, 0x8f, 0x38, 0x8d, 0x52, 0xa7, 0xe5, 0xe4, 0x6d, 0x31, 0xfc, 0xca, 0x84, 0xd7, 0x88, 0xe4, 0x30, 0x1f, 0x0e, 0x7f, 0x20, 0x4a, 0xd5, 0x8d, 0x0f, 0x7d, 0x85, 0xe9, 0xf3, 0x1e, 0xf4, 0xe3, 0x78, 0x81, 0x3c, 0xf8, 0xac, 0xc4, 0x11, 0xe1, 0xfc, 0xf7, 0x51, 0xd0, 0x5f, 0x80, 0xdd, 0xf6, 0xd1, 0xbe, 0xa8, 0x48, 0x03, 0xed, 0x0d, 0x83, 0x51, 0x4a, 0x66, 0x6d, 0xf4, 0x77, 0xda, 0x5e, 0x79, 0x20, 0x76, 0x00, 0x71, 0xdf, 0x7f, 0x53, 0x6b, 0x5d, 0x07, 0xf4, 0x1f, 0xbb, 0xbf, 0x9e, 0xec, 0x30, 0x0c, 0xf1, 0x85, 0xf3, 0x5d, 0x72, 0xe7, 0x5b, 0xbb, 0xd4, 0x8e, 0x44, 0xa2, 0x76, 0xe8, 0xb6, 0x0f, 0x2c, 0x0a, 0xc1, 0xda, 0x42, 0xa2, 0xab, 0x46, 0xbe, 0x2c, 0x4e, 0xd7, 0xe6, 0x69, 0xbb, 0x63, 0x02, 0x0d, 0x23, 0x6c, 0x63, 0xb8, 0xf8, 0xad, 0xa4, 0x28, 0x4f, 0xf3, 0x30, 0xad, 0x89, 0x2e, 0x04, 0xdd, 0x32, 0xc8, 0xb7, 0x88, 0x29, 0x35, 0xb7, 0xef, 0x01, 0xcc, 0xd5, 0x30, 0xa8, 0xd5, 0x04, 0x05, 0x46, 0xe3, 0x5d, 0xae, 0x68, 0x64, 0x67, 0x2c, 0x5e, 0x76, 0x96, 0xb0, 0xe1, 0xfc, 0x11, 0x53, 0xfa, 0xf1, 0xb8, 0x07, 0x1f, 0xfd, 0x66, 0xce, 0x9e, 0x46, 0x73, 0x2a, 0x3f, 0x89, 0x7e, 0xd4, 0x24, 0x69, 0x69, 0xb0, 0xf5, 0x07, 0xa4, 0x01, 0x3a, 0xd2, 0xaf, 0xda, 0x08, 0xa1, 0xda, 0xd5, 0xe0, 0xff, 0x50, 0x06, 0xd4, 0xc5, 0x53, 0x32, 0xeb, 0xef, 0xc9, 0x3d, 0xc7, 0xa8, 0xf8, 0xe2, 0x85, 0xa7, 0x8e, 0xa7, 0xe5, 0xbe, 0xe4, 0x0f, 0xab, 0xb0, 0x83, 0x11, 0x45, 0x44, 0xe8, 0xc9, 0xad, 0x97, 0x84, 0x6e, 0x91, 0xb6, 0x07, 0x84, 0xb2, 0x6c, 0xde, 0x52, 0x8a, 0x59, 0xfa, 0x97, 0x31, 0x44, 0xd4, 0x79, 0x81, 0xb3, 0xae, 0xbe, 0x79, 0xb8, 0x1b, 0x3e, 0xdf, 0x0d, 0xc1, 0x98, 0x29, 0x63, 0x5e, 0x25, 0x9e, 0xf8, 0x09, 0x2a, 0xb9, 0x68, 0xbb, 0x52, 0xce, 0xc5, 0x0d, 0x5b, 0xef, 0xe9, 0x43, 0x0f, 0x11, 0x0b, 0x8a, 0x76, 0x6b, 0x91, 0x7e, 0x4a, 0x1f, 0x25, 0xef, 0xab, 0x1c, 0x0b, 0xe5, 0x14, 0x43, 0xb2, 0xe1, 0x8e, 0xc9, 0x89, 0x66, 0x23, 0xdc, 0x13, 0xb8, 0x96, 0x89, 0x3e, 0xe4, 0x51, 0xdd, 0xf1, 0x00, 0x9f, 0x4a, 0xe4, 0xb4, 0x1b, 0x4d, 0xb4, 0xfa, 0x69, 0x4e, 0x37, 0x21, 0x23, 0xc8, 0x0d, 0x18, 0x16, 0xa9, 0x77, 0xe9, 0xaf, 0xfc, 0x6c, 0x84, 0xb0, 0xc5, 0xea, 0xbe, 0x27, 0x2c, 0x8b, 0x99, 0xa1, 0xde, 0x58, 0xc6, 0x9b, 0xb1, 0xe1, 0x68, 0x39, 0x87, 0x8e, 0x1b, 0x3b, 0x74, 0x30, 0x35, 0x2c, 0x23, 0xdb, 0x4c, 0xdc, 0x75, 0xf8, 0xf8, 0x11, 0x6c, 0x96, 0xd9, 0x7a, 0x48, 0x01, 0xdc, 0xe4, 0xef, 0x96, 0xbb, 0xb0, 0x92, 0xd5, 0xc3, 0x85, 0x8e, 0xb8, 0xda, 0x42, 0x90, 0x43, 0xc0, 0x37, 0xfd, 0x5d, 0x95, 0x94, 0x91, 0xde, 0x9c, 0x21, 0x46, 0xe9, 0x3e, 0x30, 0x77, 0x7c, 0x52, 0xd1, 0x45, 0x45, 0x9b, 0x44, 0x3a, 0xb8, 0x92, 0xb4, 0x2c, 0x5e, 0x66, 0x22, 0x64, 0x70, 0x42, 0x9f, 0x00, 0xa4, 0xce, 0xbe, 0x96, 0x47, 0xf8, 0x49, 0x1a, 0x8c, 0xf4, 0x33, 0x02, 0x24, 0x81, 0xce, 0xa7, 0x0e, 0x6f, 0x3e, 0xef, 0xb1, 0x5e, 0x2e, 0x29, 0x28, 0xc8, 0xc1, 0x38, 0xdd, 0x42, 0xcb, 0xf4, 0x59, 0xfe, 0x42, 0xcd, 0x5a, 0x95, 0xef, 0xb2, 0x26, 0x03, 0x69, 0x31, 0x20, 0xf3, 0x44, 0xdf, 0x99, 0x3e, 0x86, 0xfa, 0xe8, 0xae, 0x5a, 0x4d, 0xbd, 0x07, 0x09, 0x54, 0xb2, 0x48, 0x25, 0xa1, 0x23, 0x2e, 0x08, 0x7e, 0x40, 0xfa, 0x7d, 0xd4, 0x60, 0x74, 0xbc, 0x4b, 0x99, 0x30, 0x9c, 0xb3, 0x8d, 0x10, 0x04, 0xa3, 0x86, 0x0a, 0xa2, 0x5f, 0xc6, 0x2b, 0xe0, 0xff, 0x18, 0xdc, 0x14, 0xce, 0xab, 0x65, 0xf7, 0xf1, 0x20, 0xaf, 0x59, 0x49, 0xe2, 0x4e, 0x13, 0x9a, 0xb6, 0xbe, 0x3c, 0xec, 0x93, 0xed, 0xa0, 0x31, 0xb3, 0xfa, 0x6d, 0x29, 0xea, 0x3d, 0x30, 0x83, 0x37, 0x87, 0x00, 0x45, 0x99, 0xab, 0xf9, 0x6d, 0x23, 0x3d, 0xed, 0xd8, 0x53, 0x99, 0x55, 0x64, 0xa0, 0x27, 0x8e, 0x52, 0x52, 0xde, 0x42, 0xee, 0x96, 0x07, 0x24, 0x71, 0xd2, 0x44, 0xe0, 0x26, 0x36, 0xd0, 0x51, 0xcc, 0x94, 0x08, 0xf5, 0x3c, 0x71, 0x2b, 0x9f, 0x4b, 0x5c, 0x5e, 0x6c, 0xf2, 0x7e, 0xf3, 0xf8, 0xac, 0x73, 0xea, 0xd2, 0x20, 0x58, 0xb8, 0x2d, 0x00, 0x25, 0x48, 0xd8, 0x31, 0x3d, 0x40, 0x70, 0x2c, 0x44, 0x85, 0xd4, 0xa4, 0x31, 0x01, 0xd9, 0x69, 0xa4, 0xa4, 0x3f, 0x8c, 0x79, 0xa8, 0xe4, 0xc4, 0x9d, 0x1a, 0x38, 0x10, 0x20, 0x96, 0xf1, 0x9e, 0x8c, 0x52, 0x00, 0xec, 0x76, 0x5d, 0xc3, 0x2d, 0x52, 0x29, 0x7c, 0xee, 0x8c, 0x48, 0x02, 0xf9, 0xd4, 0x73, 0xb6, 0x79, 0xb9, 0xd0, 0xb9, 0x60, 0x79, 0x75, 0x5c, 0x06, 0x17, 0x28, 0xd8, 0x12, 0xaf, 0x68, 0x40, 0x9e, 0x07, 0xb2, 0xb3, 0x96, 0x66, 0xfd, 0xd6, 0x61, 0xa9, 0x87, 0x81, 0xc4, 0x93, 0xd3, 0xb9, 0x03, 0x65, 0xf2, 0xdf, 0x49, 0xae, 0x03, 0x26, 0x49, 0x65, 0xf6, 0x4b, 0x26, 0x35, 0x95, 0x80, 0x90, 0x18, 0xc4, 0xa9, 0x31, 0x27, 0x07, 0xca, 0x47, 0xb1, 0x46, 0xc0, 0x92, 0x8a, 0xcd, 0x30, 0x70, 0xa5, 0x97, 0xbe, 0x47, 0xe5, 0xcc, 0x7f, 0x23, 0x31, 0x88, 0xb0, 0xa0, 0xc7, 0xde, 0xa8, 0x0b, 0xd2, 0x1d, 0x0b, 0xc4, 0x3e, 0x51, 0x41, 0xe6, 0xcb, 0x0d, 0x26, 0x2a, 0x60, 0x68, 0x03, 0x09, 0xa3, 0x46, 0xbe, 0x21, 0xc6, 0xd9, 0x4d, 0xda, 0xa3, 0x67, 0x70, 0x49, 0x0c, 0x4d, 0xa0, 0x55, 0x5c, 0x44, 0x42, 0x18, 0x52, 0xe3, 0x21, 0x88, 0x20, 0x65, 0x1b, 0x56, 0xbe, 0xad, 0x1b, 0x16, 0x84, 0x87, 0x47, 0xa1, 0xf8, 0x31, 0x7a, 0xb7, 0xe5, 0x1a, 0xf4, 0xe9, 0xad, 0xe9, 0x50, 0xb6, 0xdf, 0xc1, 0xb7, 0xf5, 0x0c, 0xc3, 0x54, 0x73, 0xd7, 0xd5, 0x07, 0xdc, 0x4c, 0xa2, 0x5e, 0xdf, 0x73, 0xe2, 0xc1, 0x8d, 0x24, 0xdc, 0xec, 0x02, 0x1c, 0x29, 0xa3, 0x48, 0x51, 0xba, 0xa0, 0x78, 0x83, 0x1d, 0xd1, 0x22, 0x14, 0xfb, 0xc0, 0xef, 0x19, 0xe6, 0x53, 0x85, 0xb1, 0x51, 0xb5, 0xab, 0x96, 0xe0, 0x94, 0xae, 0xf1, 0xe3, 0x8d, 0x03, 0x73, 0x1d, 0xe4, 0x2d, 0xa1, 0xc9, 0x79, 0xe2, 0x6f, 0xdf, 0xf7, 0x69, 0x11, 0x93, 0x4f, 0x46, 0x0e, 0x1e, 0x65, 0x19, 0x96, 0xc2, 0x08, 0xc4, 0x15, 0x08, 0x28, 0xcc, 0x08, 0x4d, 0x43, 0x02, 0x10, 0x7c, 0x21, 0x62, 0x44, 0x1d, 0xc1, 0x3b, 0xcc, 0x8f, 0x93, 0x90, 0xac, 0x91, 0xe8, 0xbe, 0xdd, 0x08, 0xa6, 0x60, 0xa2, 0xfc, 0x40, 0x70, 0x19, 0xe3, 0xe5, 0xaf, 0x10, 0x22, 0xf8, 0x46, 0x1b, 0xd1, 0xc1, 0xad, 0xe3, 0xbe, 0x62, 0xcc, 0xc1, 0xb5, 0x0c, 0x60, 0x8c, 0xff, 0x72, 0xa1, 0xaf, 0x29, 0x7e, 0x22, 0x7e, 0x07, 0x43, 0xf8, 0xca, 0xf7, 0x34, 0x1e, 0xb2, 0x6a, 0x93, 0x18, 0xbd, 0xa1, 0x2c, 0xd7, 0x26, 0xb5, 0x42, 0xdd, 0x77, 0xda, 0xca, 0xa1, 0x59, 0xe4, 0xd7, 0x35, 0xab, 0x0b, 0x56, 0x26, 0xd1, 0xeb, 0xfb, 0xa4, 0x4f, 0xcf, 0x7b, 0xe2, 0x96, 0x2e, 0xfc, 0xc0, 0x1d, 0x76, 0xc9, 0xa8, 0xb4, 0x09, 0x4b, 0xb5, 0x16, 0x85, 0x35, 0x1b, 0xbd, 0x49, 0xfe, 0xc3, 0xfa, 0x35, 0x94, 0x35, 0x44, 0xb0, 0x4f, 0xbb, 0xd1, 0xf0, 0x23, 0xc3, 0x63, 0x76, 0x1b, 0x86, 0x65, 0xd7, 0x02, 0xe7, 0x36, 0xc2, 0x63, 0x9e, 0xc5, 0x3f, 0xb5, 0x95, 0x5e, 0x35, 0xcf, 0x92, 0xc3, 0x2f, 0xa2, 0x17, 0x7f, 0x5f, 0x26, 0x87, 0x77, 0xe4, 0x95, 0x89, 0xc2, 0x48, 0xd8, 0xb1, 0xba, 0x4d, 0x3e, 0x5e, 0x53, 0xe9, 0x74, 0xde, 0xac, 0x8f, 0xb2, 0xd9, 0xe4, 0xb0, 0x32, 0xec, 0x2f, 0x82, 0xe6, 0x94, 0x29, 0x00, 0x6a, 0x4e, 0x6a, 0x32, 0x38, 0xfc, 0x5a, 0xae, 0x1b, 0x8b, 0x46, 0x5f, 0xe6, 0xd3, 0xb4, 0x85, 0x65, 0xbe, 0xf4, 0xfd, 0x94, 0xad, 0xf8, 0xc3, 0x0f, 0x17, 0x66, 0xb5, 0xca, 0x73, 0xea, 0x99, 0x02, 0x59, 0xd1, 0x62, 0x73, 0xe4, 0xd4, 0xaf, 0xcc, 0x5a, 0x31, 0x95, 0x60, 0x0f, 0x01, 0x9e, 0x1e, 0x86, 0xc5, 0x11, 0xc3, 0xda, 0x42, 0x74, 0x4e, 0x5c, 0x8f, 0x50, 0xb4, 0x7e, 0x6c, 0x34, 0xd6, 0xf0, 0xd5, 0xfc, 0xb0, 0x08, 0xd7, 0x53, 0xd3, 0x67, 0xa3, 0x77, 0x15, 0xda, 0xe1, 0x3d, 0x87, 0x7e, 0x46, 0x54, 0xa7, 0x28, 0x69, 0xcd, 0xd7, 0x03, 0xd2, 0xdb, 0x0e, 0x7b, 0x54, 0xd8, 0xce, 0x5a, 0x9e, 0x89, 0x56, 0x31, 0x0c, 0xa3, 0x18, 0xfa, 0xc3, 0x8e, 0x6d, 0xfb, 0xfc, 0x68, 0x88, 0xee, 0xa0, 0x4d, 0xa8, 0x5e, 0x16, 0xd6, 0x92, 0x54, 0x58, 0xdf, 0x3f, 0x33, 0x4d, 0x8e, 0xd2, 0xe1, 0x53, 0x91, 0xcd, 0x27, 0x1a, 0xa6, 0x83, 0x5b, 0xb9, 0x61, 0xd1, 0x3c, 0xfb, 0x2a, 0x09, 0x1d, 0xfa, 0x85, 0x2f, 0x46, 0xf0, 0x96, 0x68, 0x97, 0x49, 0xe4, 0xaf, 0x6e, 0xfd, 0x5d, 0xca, 0xcb, 0x1c, 0x9a, 0x7c, 0xb2, 0xab, 0x65, 0xfd, 0xd1, 0xae, 0x78, 0xa7, 0x63, 0x86, 0x88, 0xf2, 0x54, 0x7d, 0x82, 0xa2, 0xa6, 0xa0, 0x15, 0x3f, 0x13, 0xcd, 0x70, 0xc6, 0xf4, 0x0c, 0x4d, 0x9e, 0x61, 0x22, 0x2e, 0xcd, 0x9a, 0x64, 0xe6, 0x6c, 0xa5, 0xca, 0x5c, 0x58, 0x39, 0x44, 0x8c, 0x2b, 0xdb, 0x51, 0xce, 0x6b, 0x47, 0xcd, 0x5b, 0x01, 0x11, 0x0a, 0x0d, 0xec, 0x8c, 0x23, 0x66, 0x36, 0xeb, 0x8d, 0xd4, 0x27, 0xa6, 0xef, 0x33, 0xba, 0x20, 0x34, 0x94, 0x4d, 0x86, 0xde, 0x3d, 0x9c, 0xfa, 0x9d, 0xf1, 0xf0, 0xf1, 0x20, 0x71, 0x94, 0xd9, 0x2b, 0x42, 0x89, 0x00, 0xea, 0xb1, 0x7a, 0xb1, 0x85, 0x15, 0xf2, 0xa0, 0xf4, 0x54, 0xcd, 0x87, 0x15, 0xa8, 0xed, 0x12, 0xfb, 0xa3, 0x2e, 0xf9, 0x89, 0x71, 0x9b, 0x6b, 0x40, 0x5e, 0xe2, 0xb3, 0x56, 0x97, 0x05, 0x16, 0x08, 0x35, 0x53, 0xfa, 0x31, 0x77, 0x97, 0x4e, 0x1a, 0x4f, 0x8f, 0x25, 0x94, 0x21, 0x9f, 0xa4, 0x44, 0xc7, 0xc7, 0x1f, 0x3f, 0xd8, 0xd3, 0x7f, 0xd7, 0x2a, 0xd1, 0xe7, 0xb4, 0x95, 0xc8, 0x97, 0x26, 0xfa, 0xa7, 0x10, 0xb9, 0x84, 0x7c, 0x78, 0x0a, 0x2e, 0xe6, 0x41, 0xda, 0x86, 0xcd, 0x06, 0x61, 0xb0, 0x50, 0xb5, 0xe4, 0xad, 0xff, 0xf3, 0x8a, 0xde, 0x4b, 0xbc, 0x6c, 0xc3, 0x3a, 0x4a, 0xeb, 0x09, 0x60, 0x39, 0x46, 0xc4, 0x0a, 0xe8, 0x6c, 0xf9, 0xbc, 0x22, 0x0e, 0x5f, 0xde, 0xfe, 0xf9, 0x66, 0xb2, 0x03, 0xa3, 0x79, 0x89, 0x90, 0x03, 0x80, 0x37, 0x7b, 0xa6, 0xaa, 0xc4, 0xf9, 0x00, 0x69, 0x64, 0xbe, 0x00, 0xbe, 0xa9, 0x65, 0xe7, 0xb6, 0xf8, 0x11, 0x59, 0x35, 0x3a, 0x55, 0xb4, 0xf2, 0xd3, 0x51, 0xa2, 0xc3, 0xd8, 0x1e, 0xea, 0x1b, 0x7c, 0x6d, 0x8c, 0xd0, 0xcc, 0x6a, 0x0c, 0x22, 0x9d, 0xe7, 0x0e, 0xfa, 0xc2, 0xb6, 0x23, 0x6f, 0x82, 0x56, 0xe3, 0x8e, 0x49, 0xd3, 0x3c, 0x5b, 0x9d, 0xe7, 0x09, 0x13, 0x54, 0x65, 0xe6, 0xb4, 0x04, 0xd7, 0x43, 0xbf, 0xbc, 0x66, 0xb8, 0x3d, 0xf1, 0xfb, 0x98, 0x00, 0xbb, 0xa4, 0xc9, 0x2b, 0x42, 0x39, 0xd3, 0xf5, 0x72, 0x3f, 0x36, 0xa9, 0xf7, 0x0c, 0x01, 0xf1, 0x65, 0x2c, 0xa0, 0x55, 0xb6, 0x04, 0xf6, 0xff, 0xfa, 0xb5, 0xac, 0xc1, 0x4a, 0x44, 0xc8, 0x59, 0xfe, 0xf7, 0x81, 0xf3, 0x20, 0x02, 0x51, 0xef, 0x20, 0x62, 0x4d, 0xe5, 0xc8, 0x0a, 0xb2, 0xe6, 0x73, 0x3d, 0xc0, 0x05, 0x7a, 0x3b, 0xcb, 0x16, 0xf0, 0x1f, 0x8f, 0xb6, 0x8f, 0x08, 0xc4, 0x8c, 0xf1, 0x77, 0xf2, 0xce, 0x04, 0xf8, 0x87, 0x06, 0xb8, 0x05, 0x27, 0x16, 0xfa, 0x27, 0x43, 0x79, 0xe6, 0x5e, 0xed, 0xcd, 0x38, 0xc3, 0xea, 0x8e, 0x04, 0x6c, 0x09, 0x25, 0xa8, 0x90, 0xb4, 0x21, 0xfe, 0xeb, 0xc5, 0xc4, 0xd6, 0x64, 0x9b, 0xc1, 0xa3, 0xee, 0x6c, 0x44, 0x74, 0xac, 0xdc, 0x33, 0x26, 0x58, 0xcf, 0xb3, 0xd8, 0xe5, 0x7c, 0xef, 0xa0, 0x63, 0xc4, 0x15, 0x7c, 0x24, 0xc1, 0xa0, 0x8c, 0x1d, 0xa1, 0xdd, 0x7e, 0x8e, 0xb5, 0xa8, 0x49, 0xe6, 0xc5, 0x77, 0x1e, 0xe1, 0xa7, 0x9b, 0x9b, 0xf3, 0x0f, 0xc2, 0x43, 0xe9, 0xa9, 0xbf, 0x2b, 0xce, 0x65, 0x8e, 0xf5, 0x0b, 0x13, 0x92, 0x02, 0xd3, 0x2f, 0x22, 0xe4, 0xbe, 0xfe, 0x44, 0x12, 0xb4, 0xda, 0xb8, 0xe0, 0x0d, 0xc9, 0x39, 0xae, 0xf6, 0x55, 0xff, 0x5f, 0x17, 0x98, 0x88, 0x0d, 0x73, 0x97, 0x98, 0xfa, 0x8f, 0xd1, 0x7f, 0xca, 0xd6, 0x17, 0x9a, 0xf0, 0x3c, 0x9d, 0x1c, 0x67, 0x22, 0x52, 0x0e, 0xa2, 0x79, 0x6d, 0x95, 0xc5, 0x2b, 0x48, 0x74, 0x15, 0xb6, 0x72, 0xd1, 0xad, 0x1a, 0x00, 0x3c, 0x74, 0xf6, 0x23, 0xed, 0x4b, 0xee, 0x00, 0x4d, 0x8b, 0x4f, 0xbb, 0xb9, 0xae, 0xf6, 0xd5, 0x82, 0x4c, 0x6e, 0xb9, 0x38, 0x4a, 0x58, 0x91, 0x28, 0x4e, 0x10, 0x5e, 0x23, 0x75, 0x8d, 0x48, 0x81, 0x49, 0x89, 0x32, 0x66, 0xed, 0xe2, 0x92, 0x44, 0x9b, 0x41, 0x80, 0xa1, 0x51, 0xf9, 0x0d, 0x1b, 0xc6, 0x32, 0xd5, 0xa9, 0xa3, 0x46, 0xd8, 0x23, 0xf0, 0x6b, 0x85, 0x05, 0xcc, 0x93, 0x18, 0x70, 0x62, 0x90, 0x26, 0x71, 0x18, 0x7c, 0x76, 0x86, 0x09, 0x58, 0x13, 0x5e, 0xb6, 0xf3, 0x9f, 0xe1, 0xf8, 0x0d, 0xea, 0x70, 0x3a, 0xbd, 0xc4, 0x6e, 0xe4, 0x10, 0x0f, 0xff, 0x1a, 0xf3, 0x18, 0x0f, 0xa7, 0x53, 0x27, 0x97, 0x34, 0x82, 0x54, 0x1b, 0xbe, 0xdd, 0x9d, 0x78, 0x47, 0xac, 0x36, 0xdc, 0xcb, 0x49, 0x20, 0x16, 0x75, 0x85, 0xfd, 0x10, 0x13, 0x47, 0x23, 0x99, 0xc8, 0x76, 0xef, 0x68, 0x00, 0x19, 0x5b, 0x5e, 0xa9, 0xbd, 0xd3, 0x0c, 0xa1, 0x17, 0x45, 0x75, 0x6a, 0xeb, 0x78, 0x15, 0x25, 0x2d, 0x9e, 0x22, 0xbe, 0x65, 0x2c, 0x11, 0x64, 0x58, 0xe9, 0x5c, 0x3c, 0xe4, 0x45, 0x83, 0x56, 0x2c, 0xed, 0x51, 0xe0, 0xf5, 0x9c, 0x60, 0x99, 0x50, 0x34, 0xdf, 0x89, 0x7a, 0x0d, 0x93, 0xf0, 0x00, 0x8d, 0x1c, 0x7c, 0x26, 0xf9, 0x7a, 0xbe, 0x8a, 0x8a, 0xcf, 0xdf, 0x05, 0xc4, 0x66, 0x8f, 0xd2, 0x03, 0xf5, 0x3f, 0xf2, 0x57, 0x1f, 0x90, 0xce, 0x91, 0x3d, 0x0b, 0x1f, 0x9e, 0x5e, 0x12, 0x0b, 0x14, 0x8c, 0x16, 0x90, 0x0b, 0x52, 0x0b, 0x26, 0x2e, 0x7b, 0x19, 0xa0, 0x12, 0x1b, 0x95, 0x54, 0xc6, 0xd4, 0x2f, 0x7b, 0xab, 0x52, 0x6d, 0xdb, 0x85, 0x18, 0x58, 0xa3, 0xd3, 0x7f, 0x75, 0x96, 0x5c, 0xfb, 0xf6, 0x6b, 0x0b, 0xa1, 0x32, 0x74, 0xfc, 0xe6, 0x53, 0x7f, 0xd7, 0xaa, 0x4e, 0xfa, 0x5d, 0x75, 0x19, 0x5a, 0x40, 0x00, 0x18, 0xbd, 0x38, 0xf7, 0xd8, 0xcd, 0x53, 0xfd, 0xff, 0xe8, 0x8d, 0xf1, 0x83, 0x7f, 0xa0, 0x6f, 0x1b, 0xbc, 0x1d, 0x9a, 0xf3, 0x68, 0xbc, 0x19, 0xa4, 0x0b, 0xf0, 0x60, 0x63, 0x55, 0xbf, 0x31, 0x78, 0xbc, 0xd1, 0x62, 0xf3, 0x67, 0xc7, 0xe0, 0x9a, 0x4b, 0xce, 0xf4, 0x25, 0x94, 0x73, 0xc5, 0xae, 0x46, 0xb9, 0x1f, 0x63, 0x24, 0x68, 0x72, 0x7e, 0xd1, 0xa9, 0x1e, 0x77, 0x35, 0xd0, 0xed, 0x77, 0x22, 0x79, 0xe1, 0x11, 0x37, 0xd6, 0x31, 0x2d, 0x05, 0x47, 0x8e, 0x44, 0x71, 0x2b, 0xaa, 0xd3, 0x59, 0xf7, 0xfb, 0x09, 0x7b, 0x85, 0xbd, 0xc3, 0x92, 0xae, 0x36, 0xbb, 0xc1, 0x1a, 0x3d, 0xfc, 0x35, 0x57, 0xfd, 0x9a, 0x07, 0x29, 0xf7, 0x9f, 0x5f, 0x21, 0x46, 0x48, 0xdf, 0x71, 0x27, 0x72, 0x3f, 0xff, 0xb8, 0x4f, 0x34, 0xb8, 0x00, 0x5d, 0x97, 0x27, 0x30, 0x99, 0xc3, 0x46, 0x28, 0xf0, 0x3f, 0x94, 0x3d, 0xf6, 0x9d, 0x67, 0x3a, 0xda, 0xa1, 0x84, 0xa4, 0x9a, 0xa6, 0xed, 0x43, 0x73, 0x3e, 0xfa, 0xdd, 0x9c, 0x19, 0xab, 0x45, 0x33, 0x28, 0x3d, 0x95, 0x78, 0x01, 0xfb, 0xb7, 0x39, 0x86, 0x57, 0x2a, 0x8d, 0xc1, 0x39, 0x02, 0xc5, 0x13, 0x97, 0x31, 0xa0, 0x8e, 0x46, 0x06, 0xbe, 0x9f, 0x10, 0xf3, 0x57, 0xf0, 0x06, 0x93, 0x2d, 0x8c, 0x17, 0xeb, 0xbf, 0x45, 0xe2, 0xf1, 0xc0, 0x53, 0xc9, 0x4a, 0xc7, 0x3d, 0x47, 0x58, 0x48, 0xfd, 0x83, 0x74, 0xc3, 0x5f, 0x25, 0x78, 0x3b, 0xaa, 0x68, 0x81, 0xea, 0x82, 0x70, 0xf3, 0x33, 0x0d, 0xdf, 0xbd, 0xd8, 0x55, 0xa3, 0xde, 0x6d, 0xed, 0x11, 0x28, 0x0d, 0xd8, 0x38, 0x43, 0x4b, 0xa6, 0x6f, 0xf6, 0x6b, 0xe0, 0x31, 0xa2, 0xd3, 0xa6, 0x2b, 0x0f, 0xbc, 0x97, 0x92, 0x6b, 0x2d, 0xf1, 0xba, 0x90, 0x2a, 0xf9, 0xe5, 0x86, 0x29, 0x9e, 0x59, 0x49, 0xc5, 0x59, 0xb5, 0xcc, 0xb6, 0x57, 0x84, 0x3d, 0x01, 0xda, 0x13, 0x8b, 0x6c, 0xdd, 0x80, 0x26, 0x35, 0xf7, 0x14, 0x06, 0x03, 0x81, 0xd2, 0xee, 0x1d, 0xfb, 0x50, 0xf2, 0xda, 0xac, 0xc6, 0x37, 0x59, 0x89, 0x65, 0xfa, 0x71, 0x58, 0xea, 0xd3, 0xeb, 0x15, 0x72, 0x3b, 0xef, 0x95, 0x90, 0x4d, 0xbd, 0x69, 0x9d, 0xc9, 0x9e, 0x05, 0x4f, 0x5e, 0x19, 0x22, 0x8d, 0x29, 0x69, 0x60, 0x82, 0x79, 0x2f, 0x30, 0xf1, 0xd5, 0x65, 0xf1, 0xc8, 0x40, 0x93, 0x59, 0xf7, 0xbb, 0x45, 0x17, 0x82, 0x0c, 0xbc, 0xb6, 0xd5, 0xbe, 0xe4, 0xc5, 0x59, 0x69, 0x86, 0x35, 0x44, 0x33, 0xbf, 0x02, 0xb5, 0x97, 0xb1, 0x16, 0x00, 0x65, 0x78, 0x6a, 0x46, 0x0a, 0x5f, 0x6e, 0x4a ],
+const [ 0xd2, 0xf6, 0x1e, 0x1a, 0x3e, 0x37, 0x0e, 0x78, 0xdb, 0x7a, 0x35, 0x6c, 0xff, 0x4e, 0x3e, 0x0a, 0x40, 0x80, 0x0a, 0xb9, 0x36, 0xd7, 0x9b, 0x89, 0x82, 0x01, 0x31, 0xc6, 0x0e, 0xce, 0xb2, 0xcd, 0x97, 0x9c, 0x4f, 0x1e, 0x69, 0x13, 0x65, 0xb3, 0x6a, 0x12, 0xa1, 0x90, 0x5a, 0xe8, 0x68, 0x9c, 0x59, 0xc8, 0x76, 0xaf, 0xaa, 0x77, 0xc5, 0xec, 0xb6, 0x48, 0xb0, 0x51, 0x54, 0x4a, 0x58, 0x8c, 0x47, 0xc0, 0x47, 0x10, 0x08, 0xd1, 0x53, 0x69, 0xc7, 0x81, 0xc5, 0xcc, 0xac, 0xe0, 0xbb, 0xf3, 0x62, 0x81, 0xcb, 0x28, 0xd6, 0x2e, 0xe9, 0x9f, 0x3c, 0xda, 0x8b, 0x08, 0x54, 0xd7, 0x0b, 0x65, 0xeb, 0x4a, 0x4c, 0x19, 0xa4, 0xdb, 0xa0, 0x42, 0xf8, 0xb1, 0xe9, 0x49, 0x7c, 0x9d, 0xff, 0xb8, 0x62, 0x95, 0x52, 0x4b, 0x43, 0x65, 0xd1, 0x49, 0x1c, 0xa1, 0x0a, 0x14, 0x96, 0xde, 0x92, 0xff, 0x8a, 0x21, 0xa7, 0x61, 0xc4, 0x98, 0x14, 0xe8, 0x07, 0x88, 0x55, 0x2f, 0x52, 0x87, 0xfc, 0x92, 0x62, 0xeb, 0x53, 0x41, 0x78, 0x82, 0x43, 0x93, 0x5c, 0x84, 0x74, 0x9d, 0xa2, 0xc5, 0xb6, 0x04, 0x2c, 0x2f, 0xa0, 0x0f, 0xf0, 0x70, 0x76, 0x00, 0xfb, 0xf0, 0x50, 0xa5, 0xb6, 0x06, 0x79, 0x2a, 0x69, 0x6b, 0x16, 0x31, 0xfd, 0xef, 0x08, 0x24, 0x06, 0x6a, 0x13, 0xca, 0x01, 0xf6, 0x3f, 0x19, 0xd9, 0x5b, 0x7e, 0x4c, 0xb1, 0xcb, 0x90, 0x35, 0xdd, 0xd0, 0x24, 0xd3, 0x31, 0x82, 0x40, 0x27, 0x7f, 0xfd, 0xe2, 0x44, 0x5b, 0x12, 0xe8, 0xa6, 0x21, 0x3d, 0x2d, 0xc4, 0x3a, 0xd7, 0xf5, 0xe8, 0x9a, 0x8d, 0x8b, 0x3f, 0x8d, 0x11, 0x28, 0x2c, 0xb4, 0x0f, 0x17, 0xe2, 0x4a, 0x63, 0x17, 0x32, 0xac, 0x89, 0x01, 0xa1, 0x19, 0x55, 0xaa, 0xbe, 0xb6, 0xe4, 0x0b, 0xb3, 0xd5, 0xd2, 0x9f, 0x19, 0x76, 0xad, 0x0d, 0x11, 0x0e, 0xaa, 0x07, 0x90, 0x88, 0x97, 0x72, 0xfa, 0x8a, 0x11, 0xc7, 0xf3, 0xf9, 0xf7, 0xb9, 0x72, 0xbf, 0x1f, 0x18, 0x16, 0xcc, 0x47, 0xf5, 0xbe, 0x5a, 0x4e, 0x07, 0x54, 0x76, 0xa4, 0x4d, 0xe9, 0xbc, 0xff, 0xf5, 0x07, 0x62, 0x4f, 0x7d, 0x42, 0x78, 0xf5, 0x18, 0x11, 0x6d, 0x2f, 0x53, 0xdc, 0xd6, 0xd7, 0xf8, 0x56, 0x6b, 0x4e, 0x32, 0x0d, 0x52, 0xb3, 0xf3, 0x40, 0xa1, 0x58, 0x93, 0xf0, 0x1e, 0x76, 0xba, 0x39, 0x49, 0x1f, 0x7f, 0xe3, 0x9c, 0x75, 0xd1, 0x35, 0x11, 0x1a, 0x16, 0x09, 0xe5, 0xe7, 0x13, 0x26, 0x9b, 0xe1, 0x0c, 0xc9, 0x45, 0x68, 0x2c, 0x85, 0xff, 0xb2, 0x27, 0x4d, 0xbc, 0x78, 0x1d, 0xd0, 0x45, 0xef, 0xc2, 0x05, 0x7e, 0xfa, 0xbc, 0x06, 0xeb, 0x9e, 0x4c, 0x21, 0x74, 0xb6, 0x31, 0x2c, 0x65, 0xe8, 0xc9, 0x1a, 0xb9, 0xd7, 0x7a, 0xcc, 0x98, 0x9a, 0x50, 0x29, 0x1e, 0x6e, 0xe7, 0x71, 0x5e, 0xa7, 0x8c, 0xce, 0xa7, 0xed, 0x9f, 0x2d, 0x06, 0xa4, 0x3b, 0x4b, 0x0b, 0xac, 0x1a, 0x13, 0xd0, 0x4b, 0xb2, 0x27, 0x38, 0x67, 0xa4, 0xbd, 0x75, 0xf9, 0x57, 0xac, 0xcd, 0xbe, 0xe0, 0xc6, 0x9d, 0x30, 0x26, 0x69, 0x9e, 0xb4, 0x43, 0x51, 0x67, 0x15, 0x2d, 0xb0, 0x33, 0x31, 0x95, 0x81, 0xe5, 0xf2, 0x0f, 0x19, 0x49, 0x80, 0x74, 0xff, 0x9d, 0xb5, 0x84, 0xfd, 0x50, 0xd2, 0xd0, 0x77, 0x09, 0x70, 0xd8, 0xfc, 0xeb, 0xb9, 0x70, 0x1b, 0x18, 0xd7, 0x68, 0x78, 0x73, 0xad, 0x6b, 0x1f, 0xab, 0xc5, 0x28, 0x17, 0x75, 0x8a, 0xb0, 0x3b, 0x18, 0xb8, 0x1f, 0x45, 0x2f, 0x10, 0x7f, 0x2c, 0xaa, 0x50, 0xe9, 0xb0, 0x17, 0x62, 0xed, 0x32, 0x20, 0xd4, 0x35, 0xca, 0x54, 0x88, 0x64, 0x94, 0x2a, 0xad, 0x44, 0x4a, 0x42, 0xed, 0x21, 0x18, 0xef, 0xe8, 0x70, 0xab, 0xf3, 0xe2, 0xb5, 0x8c, 0x89, 0xb8, 0xa3, 0xac, 0xa9, 0x19, 0x84, 0x40, 0x87, 0xf2, 0xdb, 0xce, 0x5d, 0x2a, 0x48, 0x88, 0x6a, 0x90, 0xad, 0xda, 0x3a, 0x12, 0x8f, 0x3f, 0x29, 0x2f, 0xbf, 0x58, 0x23, 0xaf, 0x39, 0x3f, 0xad, 0x91, 0x4c, 0x19, 0x29, 0x45, 0xfb, 0xea, 0x55, 0x1b, 0xa4, 0xae, 0x16, 0xfc, 0xdf, 0xa5, 0x74, 0x58, 0xa9, 0xee, 0xe5, 0x5f, 0xc2, 0x57, 0xce, 0x74, 0x53, 0x74, 0x47, 0xde, 0xd4, 0xee, 0x1f, 0xc1, 0x2d, 0x1e, 0x1f, 0x4d, 0x1b, 0xda, 0x93, 0x36, 0xd6, 0x8f, 0x07, 0x64, 0xf1, 0x90, 0x4f, 0xeb, 0x81, 0xae, 0xca, 0x3d, 0x81, 0x09, 0xe7, 0x9f, 0x75, 0x26, 0xe7, 0xd9, 0x4e, 0x41, 0xe5, 0x32, 0x8e, 0xe4, 0x14, 0x9b, 0xac, 0xb8, 0x49, 0x2b, 0xba, 0x9c, 0xb9, 0xcb, 0x45, 0xf4, 0x03, 0x33, 0x7d, 0x43, 0x71, 0x15, 0x95, 0xfd, 0x7a, 0x97, 0x6d, 0x96, 0x8c, 0x07, 0x6f, 0xdf, 0x09, 0xca, 0xb7, 0x92, 0x90, 0x96, 0x76, 0x2b, 0x7d, 0xe2, 0x98, 0xfa, 0xb3, 0x9a, 0xa4, 0x77, 0x99, 0x16, 0xe4, 0xd5, 0x62, 0x4d, 0xc7, 0xda, 0x92, 0x46, 0x83, 0xed, 0xbd, 0xd0, 0xfe, 0x71, 0x92, 0x73, 0xef, 0x51, 0x19, 0xa6, 0x40, 0xdc, 0x39, 0x42, 0xb8, 0xd4, 0x7d, 0x37, 0xd6, 0xc1, 0x18, 0x7e, 0x00, 0x8b, 0x26, 0x4f, 0xdd, 0x48, 0x34, 0x93, 0xff, 0x53, 0x03, 0x9c, 0xc5, 0x9e, 0x89, 0x14, 0x7f, 0x49, 0x39, 0x33, 0xd4, 0x73, 0x84, 0x35, 0x61, 0x50, 0xa0, 0x0c, 0xa3, 0x7b, 0x88, 0x52, 0x17, 0x8e, 0x44, 0x81, 0x9f, 0xf1, 0x6a, 0x66, 0x28, 0xef, 0xe5, 0xd3, 0x8a, 0x0f, 0xf5, 0x95, 0xaf, 0xa1, 0x77, 0xa5, 0xf8, 0x97, 0x67, 0xa3, 0xdc, 0x96, 0xa3, 0x7f, 0xd3, 0x4d, 0xf1, 0x7a, 0x72, 0x06, 0x44, 0x4d, 0xd7, 0x7a, 0x3b, 0xa7, 0x47, 0xea, 0xeb, 0xdd, 0x16, 0x6b, 0xde, 0xdd, 0xc7, 0x82, 0x5b, 0x65, 0x75, 0xf0, 0xe8, 0x72, 0x72, 0xcf, 0x0e, 0xfa, 0x2d, 0xde, 0x5c, 0xdd, 0x59, 0x1a, 0xaf, 0x1a, 0x4b, 0x8e, 0xb0, 0x3e, 0xa4, 0x6b, 0x9d, 0x23, 0x31, 0x5b, 0x4d, 0xd6, 0x0f, 0x13, 0x6e, 0xd9, 0x13, 0x27, 0x12, 0x8b, 0x68, 0x23, 0x6a, 0xe4, 0x7a, 0xd7, 0xd0, 0x65, 0x13, 0xf2, 0x0b, 0x4f, 0xc4, 0xd3, 0xcf, 0x14, 0x87, 0x9b, 0x84, 0x0b, 0xa2, 0x87, 0x48, 0x67, 0xcf, 0x7d, 0x37, 0x6a, 0x99, 0xe4, 0xea, 0xd6, 0x09, 0xb9, 0x3d, 0xa5, 0x82, 0xdf, 0x56, 0xf9, 0xea, 0xb7, 0xe3, 0x56, 0x0a, 0xf1, 0xa2, 0x0f, 0x38, 0xa2, 0x27, 0xfe, 0x33, 0x96, 0xda, 0x78, 0x4e, 0xe7, 0x3f, 0x80, 0xd1, 0xce, 0x7a, 0x3b, 0x9c, 0xba, 0x12, 0xa5, 0x0d, 0x9f, 0xf5, 0x81, 0x24, 0x91, 0xbc, 0x96, 0xe5, 0x91, 0x31, 0x18, 0xfe, 0xa7, 0x0e, 0x65, 0xaa, 0x31, 0x08, 0xf2, 0xd5, 0x7a, 0x0c, 0x84, 0x81, 0x8e, 0xc9, 0xa3, 0x68, 0x4d, 0x6e, 0x4b, 0xe3, 0xbf, 0xb5, 0xe6, 0x0a, 0xa7, 0x20, 0x77, 0x1d, 0x5b, 0x82, 0x18, 0x23, 0xd2, 0xc2, 0xa6, 0xd0, 0xff, 0xdc, 0xbb, 0xac, 0x5d, 0x28, 0xdc, 0x72, 0xcc, 0xdf, 0xf4, 0xb6, 0x9b, 0xdb, 0x01, 0xcb, 0xe6, 0x9e, 0x0e, 0xe4, 0x22, 0x96, 0x61, 0x79, 0xf6, 0xa0, 0xf5, 0xed, 0x4c, 0xca, 0x2b, 0x6d, 0xa9, 0x5d, 0xbc, 0x1b, 0xb9, 0x1b, 0xf2, 0x6c, 0x2f, 0xc5, 0x18, 0xce, 0xcc, 0xe0, 0x2f, 0x8f, 0xbc, 0xb9, 0xe2, 0xfa, 0x29, 0xa7, 0xbc, 0xc3, 0x0b, 0x90, 0x99, 0xa5, 0x3d, 0xae, 0x5a, 0x49, 0xd6, 0x93, 0xdd, 0x6a, 0xb6, 0x6b, 0x2d, 0x37, 0x5f, 0x82, 0xf5, 0xf8, 0x07, 0x06, 0x3b, 0xf5, 0xeb, 0x0d, 0x4a, 0x93, 0xe5, 0xd9, 0xf0, 0xc1, 0x41, 0x5b, 0xea, 0x92, 0xcd, 0xf7, 0x9d, 0x2b, 0x2f, 0x87, 0x07, 0xe0, 0x7b, 0xa2, 0xf4, 0x9a, 0x05, 0x1e, 0x75, 0x7c, 0x74, 0xd3, 0x8e, 0xc6, 0x18, 0xa2, 0x2f, 0xf9, 0x7e, 0xb7, 0x65, 0x3c, 0x41, 0x0a, 0xd2, 0xfe, 0x22, 0x2c, 0x5b, 0xdd, 0x5b, 0x40, 0x20, 0xc6, 0x31, 0x47, 0xb1, 0x5e, 0xc9, 0xa2, 0x7f, 0xa1, 0x3c, 0xd1, 0x90, 0xc9, 0xed, 0x81, 0x77, 0x72, 0x1b, 0xc6, 0x84, 0xfb, 0xb2, 0xa5, 0x38, 0x2f, 0x67, 0xd5, 0xfb, 0x25, 0x03, 0xc6, 0x11, 0x64, 0xff, 0xe3, 0xcb, 0x4b, 0x52, 0x15, 0xfa, 0xb1, 0x87, 0x88, 0xa9, 0xc8, 0x12, 0xb1, 0x0c, 0x47, 0xe4, 0x90, 0xb3, 0xc8, 0x3d, 0x32, 0x03, 0x6e, 0xc2, 0x7b, 0xe7, 0xcc, 0xcf, 0x22, 0xc3, 0x02, 0x0e, 0xfd, 0xaa, 0x29, 0x49, 0x7f, 0xd0, 0xf2, 0x7c, 0x7f, 0x42, 0x89, 0x2f, 0x3a, 0xd4, 0xc0, 0x02, 0x9c, 0x5b, 0x69, 0x8a, 0xbb, 0x1d, 0x03, 0x5b, 0xa5, 0x86, 0x9a, 0x66, 0x5b, 0x1d, 0xe8, 0x86, 0x1d, 0xb6, 0xc0, 0x55, 0xe8, 0xe8, 0xad, 0x44, 0x3e, 0xc1, 0xd6, 0xeb, 0x25, 0xb9, 0x24, 0x9d, 0x72, 0xe5, 0xa7, 0x40, 0x47, 0x6d, 0x36, 0x5b, 0xdb, 0x40, 0x56, 0x71, 0x79, 0x06, 0x5e, 0x8e, 0xcc, 0x57, 0xd8, 0x1f, 0x59, 0x2a, 0x29, 0x06, 0x4d, 0x90, 0x75, 0xee, 0x79, 0xa2, 0xbd, 0xdc, 0x9b, 0xb7, 0x4a, 0x07, 0xdf, 0xdb, 0x4f, 0xea, 0xa5, 0x7d, 0xca, 0x97, 0x85, 0x68, 0xab, 0x4e, 0x90, 0xf5, 0x38, 0x4e, 0xd9, 0x7e, 0xb0, 0xeb, 0x35, 0x15, 0x2e, 0xe1, 0x3e, 0x76, 0xd1, 0xe8, 0x9e, 0x3b, 0x1a, 0x89, 0x8a, 0x4f, 0x95, 0x2f, 0x8c, 0xa5, 0xbc, 0x81, 0x86, 0x2a, 0x18, 0xef, 0xf4, 0xf8, 0xa9, 0x8b, 0x71, 0xcc, 0x88, 0x1b, 0x7d, 0xba, 0xcb, 0x6c, 0x7d, 0x1f, 0xa9, 0xe9, 0x03, 0xd8, 0xdf, 0x6b, 0x50, 0xb1, 0x51, 0x53, 0x17, 0x20, 0xf5, 0xd7, 0x84, 0x34, 0xed, 0x99, 0x7d, 0xc8, 0xf3, 0x7e, 0x28, 0xfc, 0xfa, 0xbd, 0xad, 0xe6, 0x12, 0x36, 0x3d, 0x84, 0x8d, 0x06, 0x53, 0xf5, 0x60, 0x58, 0x39, 0xe9, 0xcc, 0x7d, 0xcf, 0x57, 0x3d, 0x40, 0x88, 0x6e, 0x72, 0x73, 0xb5, 0xcd, 0xde, 0xce, 0x06, 0xf6, 0x4e, 0xfa, 0x4d, 0x00, 0xcd, 0xe8, 0x86, 0x8d, 0xc4, 0x67, 0x15, 0xfc, 0x66, 0xf6, 0x4e, 0xe0, 0x4b, 0xd6, 0x3a, 0xb0, 0x5b, 0x64, 0x98, 0xc0, 0xee, 0xa6, 0x23, 0x6f, 0x32, 0x24, 0x13, 0xa2, 0xcc, 0xf9, 0xe6, 0x72, 0xc2, 0x29, 0x60, 0x22, 0x98, 0x35, 0xd1, 0x54, 0xb9, 0xed, 0x96, 0x7c, 0x19, 0x86, 0xe2, 0x94, 0x19, 0xec, 0xbf, 0x12, 0xab, 0x59, 0x4f, 0x17, 0xb6, 0x27, 0x58, 0xe9, 0xbc, 0xe3, 0xff, 0xa3, 0xba, 0xa2, 0xd4, 0x2b, 0x4f, 0x98, 0x0f, 0x65, 0x21, 0xe6, 0x19, 0xa6, 0x7d, 0xb4, 0x4f, 0x6c, 0x3d, 0x80, 0x02, 0x4c, 0xef, 0xb5, 0xc2, 0x2b, 0x33, 0x80, 0xdc, 0xb1, 0x65, 0xdf, 0x21, 0xfb, 0x7c, 0xfb, 0xe9, 0x90, 0x32, 0xb7, 0x58, 0x97, 0x66, 0x89, 0xe0, 0x47, 0xbe, 0x89, 0x07, 0x9e, 0x90, 0xc7, 0x6b, 0x56, 0x03, 0xe2, 0x03, 0x15, 0x71, 0xd6, 0xa7, 0xe4, 0x10, 0x16, 0xd3, 0xe2, 0xd2, 0xdb, 0xa8, 0x39, 0x89, 0xbb, 0x33, 0x52, 0x4f, 0x7d, 0xf2, 0x45, 0x25, 0x2c, 0x94, 0x94, 0xda, 0x6a, 0x01, 0x18, 0x2f, 0x07, 0x9a, 0x3b, 0x38, 0xd2, 0xc2, 0x68, 0x05, 0xaf, 0x9d, 0xc0, 0x82, 0xea, 0x17, 0x0f, 0x9c, 0xcb, 0x29, 0xfe, 0xa5, 0x6b, 0x58, 0x8a, 0xfa, 0xc5, 0x7e, 0xb4, 0xe3, 0x10, 0xcc, 0x7a, 0xba, 0x4d, 0x10, 0x07, 0x50, 0x1c, 0x34, 0x27, 0x8c, 0xd3, 0x07, 0xfd, 0x55, 0xd1, 0x41, 0xf8, 0xb2, 0x10, 0xc1, 0x03, 0x30, 0xfa, 0x18, 0xfc, 0x85, 0x7e, 0x4b, 0x68, 0x72, 0x62, 0xd5, 0x65, 0xee, 0xdb, 0xec, 0xdf, 0x80, 0x5b, 0x05, 0x07, 0xed, 0xaa, 0x9a, 0x01, 0x13, 0x38, 0x2b, 0xdd, 0x15, 0xb2, 0x83, 0xc9, 0xb8, 0xd3, 0x3c, 0x85, 0x0d, 0x7d, 0x85, 0x17, 0x51, 0x08, 0x23, 0xbf, 0x11, 0xda, 0xb6, 0x2d, 0x91, 0x37, 0x3e, 0xf2, 0x6f, 0x5b, 0xdd, 0x35, 0x84, 0xc6, 0xdf, 0xa7, 0x0b, 0xd8, 0xf7, 0xb9, 0x05, 0x9d, 0xcb, 0x0c, 0xdc, 0xea, 0xb3, 0x28, 0x46, 0xa9, 0xbe, 0x72, 0x6c, 0x71, 0xf7, 0x58, 0x4c, 0x5a, 0xe6, 0xcf, 0x5b, 0x0f, 0x59, 0xff, 0x6f, 0x24, 0x64, 0x3c, 0xdd, 0xaa, 0xa6, 0x39, 0xde, 0x01, 0xce, 0x78, 0x38, 0xee, 0x5e, 0x05, 0x1a, 0xed, 0xaf, 0x64, 0x47, 0xc9, 0x35, 0xc8, 0x76, 0x69, 0x05, 0x86, 0xf9, 0xed, 0x94, 0xc8, 0x9e, 0xfa, 0xc2, 0x86, 0xd3, 0x51, 0x17, 0xb2, 0x0d, 0xa7, 0x4c, 0xb3, 0x6a, 0xb1, 0x0d, 0x15, 0x95, 0x7e, 0xfd, 0x7f, 0xea, 0x09, 0xfb, 0xe5, 0xda, 0x0f, 0xa4, 0xfe, 0x91, 0x1e, 0x18, 0xf9, 0xd7, 0xef, 0x01, 0x6c, 0x34, 0xf5, 0xd2, 0x8d, 0x58, 0x36, 0x4d, 0xa4, 0xb9, 0x5a, 0x48, 0xc0, 0x7e, 0x01, 0xb0, 0xa9, 0x9c, 0x5a, 0xce, 0x17, 0x3f, 0xf2, 0xc9, 0x21, 0x6b, 0xc9, 0x6d, 0xf8, 0xe3, 0xab, 0x2a, 0xd5, 0x4a, 0xbd, 0x60, 0x30, 0x88, 0x57, 0xda, 0x33, 0x6f, 0x11, 0x98, 0x6e, 0x9f, 0x21, 0xd1, 0xcc, 0xa6, 0xe4, 0x38, 0xc6, 0x6c, 0xba, 0x7f, 0xd6, 0xcf, 0x17, 0x19, 0x2f, 0x8a, 0xd7, 0x45, 0xab, 0x5b, 0xd2, 0x48, 0x05, 0x65, 0xb1, 0xf9, 0x48, 0xd3, 0x00, 0x83, 0x87, 0xbe, 0x84, 0x67, 0xcf, 0x50, 0xce, 0xc0, 0x5a, 0x2a, 0x10, 0xcb, 0x05, 0x04, 0x30, 0xa6, 0x04, 0x93, 0x1b, 0x58, 0xd5, 0xb0, 0x5c, 0x12, 0x72, 0xb6, 0xed, 0xb5, 0xcb, 0x2c, 0x4c, 0x93, 0x73, 0xa4, 0xd2, 0x7a, 0x9a, 0xe2, 0x41, 0xef, 0x3b, 0x41, 0x9c, 0xb7, 0x96, 0x53, 0x3b, 0x9c, 0xe1, 0xc8, 0x1e, 0x6d, 0x3b, 0x91, 0x82, 0x47, 0xe1, 0x45, 0xb2, 0x13, 0xa4, 0xc3, 0x20, 0x50, 0x9b, 0x19, 0xb4, 0x13, 0x15, 0xa4, 0x64, 0x4b, 0xd1, 0x79, 0x05, 0x4a, 0x72, 0x04, 0x60, 0x81, 0x2d, 0xef, 0x89, 0x8b, 0xc5, 0x45, 0x6c, 0x6e, 0xb9, 0xd8, 0xa9, 0x1d, 0xbc, 0xe0, 0xa2, 0x41, 0x65, 0xe4, 0xd1, 0x38, 0x28, 0xde, 0x60, 0x5e, 0x85, 0x9a, 0xf3, 0x8c, 0x7f, 0x5f, 0xc9, 0xdf, 0x50, 0xd1, 0x03, 0xbb, 0x5b, 0x16, 0x43, 0x0f, 0x62, 0x38, 0x79, 0xda, 0xf9, 0xca, 0xfa, 0xee, 0x3a, 0xcf, 0xd3, 0xf4, 0xbb, 0xd7, 0x5c, 0xb0, 0xbd, 0x6b, 0x10, 0x86, 0xa6, 0xab, 0x9b, 0x3d, 0xb2, 0x36, 0x35, 0x04, 0xe5, 0x4a, 0x2f, 0xb2, 0x44, 0x2d, 0xcb, 0x52, 0x44, 0xcb, 0x51, 0xdf, 0x83, 0xa0, 0x5f, 0x4c, 0xb6, 0xd8, 0x81, 0xc7, 0xe2, 0xb5, 0x01, 0x3f, 0xd0, 0x32, 0x01, 0x24, 0xbb, 0xe6, 0xc6, 0x6e, 0x4b, 0x2a, 0x57, 0xe0, 0xc7, 0x7e, 0x47, 0x8e, 0x86, 0x29, 0xcf, 0x9d, 0xa6, 0x20, 0x20, 0x4a, 0x01, 0x29, 0xf6, 0x2d, 0x5d, 0x40, 0x71, 0xbf, 0xe3, 0x3a, 0x21, 0x1b, 0xd3, 0xa8, 0x5f, 0x01, 0x75, 0xfe, 0xe4, 0x20, 0x53, 0xf5, 0x94, 0x95, 0xa5, 0x2d, 0x9b, 0xaf, 0x0d, 0x17, 0xbb, 0xf5, 0x84, 0x12, 0xe4, 0x6a, 0x94, 0xd4, 0x06, 0x0f, 0xc9, 0x0c, 0x23, 0xaa, 0x62, 0x45, 0xa8, 0xc6, 0x4b, 0x0e, 0xfd, 0xfb, 0x50, 0x58, 0x5b, 0x6f, 0x8b, 0x1f, 0xde, 0x9d, 0x1e, 0x4d, 0xdb, 0x55, 0x28, 0xdb, 0x73, 0x04, 0xf1, 0x39, 0x68, 0x36, 0x68, 0xf0, 0x30, 0x59, 0xd0, 0x86, 0x48, 0xc4, 0xb6, 0xa1, 0xcb, 0xf8, 0x26, 0x70, 0x43, 0x25, 0x1e, 0x47, 0xbf, 0xf0, 0x43, 0x89, 0x26, 0x73, 0xd3, 0xcb, 0xca, 0x85, 0xdb, 0x36, 0x40, 0x3c, 0xaa, 0x2d, 0x70, 0xb1, 0x85, 0x30, 0xe8, 0x03, 0x9c, 0x01, 0x76, 0x9f, 0x3d, 0x05, 0xf5, 0xbe, 0x48, 0xec, 0x67, 0x2f, 0xe3, 0x95, 0x44, 0x56, 0x6e, 0x2b, 0x12, 0x75, 0xba, 0x95, 0x36, 0x2a, 0x75, 0x0d, 0x0a, 0x39, 0xe9, 0x0e, 0x2f, 0x8c, 0xe7, 0x74, 0x25, 0x78, 0xfd, 0xdf, 0x18, 0x42, 0xef, 0x58, 0xfd, 0xe2, 0x65, 0x37, 0xde, 0x06, 0xe2, 0x43, 0x72, 0x5a, 0xf5, 0x1c, 0xf1, 0x07, 0xb3, 0xd6, 0x26, 0x79, 0x64, 0xe7, 0xc6, 0x66, 0x7d, 0x43, 0x00, 0x0c, 0xcf, 0xc5, 0x55, 0xba, 0xfd, 0xd1, 0xaa, 0x91, 0x33, 0x38, 0x9c, 0x8c, 0x15, 0x5b, 0x13, 0xbe, 0xf6, 0x94, 0x1a, 0xdb, 0x4b, 0xd1, 0xee, 0xfa, 0x5f, 0x82, 0x54, 0x99, 0x48, 0xb6, 0x30, 0xe2, 0x19, 0x80, 0x54, 0x2d, 0x59, 0xa0, 0x96, 0xc5, 0xb4, 0x5f, 0x25, 0xef, 0xf1, 0xbb, 0x1d, 0x28, 0x24, 0xc4, 0x58, 0xaf, 0x25, 0x46, 0x88, 0x43, 0x40, 0xa8, 0x82, 0x2e, 0x2e, 0x14, 0xdd, 0x82, 0x44, 0xd9, 0xbc, 0xa3, 0xeb, 0x0d, 0xe8, 0x05, 0x50, 0x76, 0x22, 0x37, 0x5d, 0xab, 0xb7, 0x21, 0xe7, 0x76, 0x54, 0x8a, 0x29, 0x7d, 0x1c, 0xdd, 0x71, 0x21, 0xf8, 0x2c, 0x19, 0xa7, 0x2e, 0x75, 0xb9, 0x95, 0x36, 0x24, 0x9b, 0x5f, 0xc9, 0xda, 0x6f, 0x43, 0x3a, 0x6d, 0x40, 0x72, 0x09, 0x30, 0xa7, 0x70, 0xb6, 0x74, 0x3f, 0xbd, 0xd3, 0x4e, 0x58, 0xb5, 0x5d, 0x9b, 0xf0, 0xb5, 0x4c, 0x42, 0xdf, 0x7f, 0x69, 0xb9, 0x51, 0xe0, 0x60, 0xcb, 0x79, 0x90, 0x16, 0x98, 0x84, 0x59, 0x3c, 0xdd, 0xcc, 0x7b, 0x25, 0x75, 0x4f, 0x50, 0xd4, 0x20, 0x5f, 0x2c, 0x5a, 0x84, 0x9b, 0x87, 0x5f, 0x71, 0x1d, 0x5e, 0xfe, 0x69, 0xf5, 0xd6, 0xd6, 0x60, 0xd6, 0x23, 0x5d, 0xc0, 0x10, 0xa8, 0x78, 0xb0, 0xbe, 0x5f, 0x49, 0x96, 0x41, 0x7c, 0x48, 0xda, 0xed, 0x4d, 0x96, 0xee, 0x01, 0x65, 0x8e, 0x8b, 0xdd, 0xf9, 0x9c, 0x3d, 0x6f, 0x8a, 0x52, 0x21, 0xef, 0xc4, 0xb8, 0xed, 0xcc, 0xa7, 0xe4, 0x32, 0xe6, 0xe4, 0xcb, 0xde, 0xfd, 0x8a, 0x57, 0x05, 0x69, 0xe1, 0xba, 0xe1, 0x0c, 0x96, 0x01, 0x17, 0x86, 0x19, 0xec, 0x3b, 0xa7, 0x44, 0xfd, 0x97, 0x2a, 0x3d, 0xcf, 0x28, 0xa0, 0x9d, 0xa9, 0xea, 0xaa, 0xd2, 0x53, 0x56, 0x6b, 0xc2, 0x28, 0x28, 0x3d, 0xb0, 0x6d, 0x65, 0xa3, 0x64, 0xe1, 0x9d, 0x80, 0x86, 0x95, 0x6d, 0x86, 0x4c, 0xfe, 0x49, 0xf0, 0x55, 0x49, 0x78, 0x74, 0xd4, 0xee, 0x60, 0x73, 0xf0, 0x88, 0x04, 0x74, 0x6b, 0xe4, 0xcb, 0xd0, 0x82, 0x58, 0x83, 0xae, 0x15, 0x56, 0xa5, 0x32, 0x08, 0x40, 0xdb, 0xf2, 0xe9, 0x7e, 0xbf, 0xaa, 0xd3, 0xcf, 0xe6, 0x30, 0x92, 0xdc, 0x1d, 0xaa, 0x07, 0x13, 0xf2, 0xfe, 0xce, 0xb2, 0x77, 0x8a, 0x1f, 0x22, 0x42, 0x16, 0xf2, 0x87, 0xb8, 0x06, 0x67, 0x95, 0x8c, 0xd4, 0x64, 0xa5, 0x82, 0xbe, 0x80, 0x08, 0x79, 0xbc, 0x20, 0x9b, 0xa8, 0xb5, 0xdf, 0x9b, 0x28, 0xf2, 0x34, 0xbb, 0xb2, 0xd3, 0x4f, 0x74, 0xab, 0xc1, 0x43, 0x9d, 0x5d, 0x63, 0x6a, 0x3b, 0x88, 0x15, 0x05, 0x9a, 0x19, 0x96, 0x24, 0x9d, 0x39, 0x00, 0xc6, 0x52, 0x89, 0xfe, 0x40, 0xc9, 0xac, 0x39, 0xe3, 0x27, 0x07, 0x13, 0xd9, 0xf6, 0xc4, 0x98, 0x50, 0xbf, 0x1d, 0xb1, 0xdb, 0xdb, 0xd7, 0x9b, 0x14, 0x86, 0x0c, 0x98, 0x87, 0x35, 0x2e, 0xe5, 0xcb, 0x2a, 0x49, 0xeb, 0xf2, 0x45, 0x88, 0xb9, 0x24, 0x1d, 0xfb, 0xb2, 0x86, 0x4f, 0x97, 0x83, 0x60, 0x16, 0x7f, 0x59, 0x80, 0x1c, 0x82, 0x50, 0xd9, 0x90, 0xe4, 0x2e, 0x70, 0x79, 0x61, 0x51, 0x79, 0x4a, 0x6f, 0xe6, 0xbc, 0xb6, 0xc4, 0x5c, 0x3e, 0xc5, 0x18, 0x18, 0x1e, 0x28, 0x2c, 0x6b, 0xbd, 0xca, 0x0b, 0xc1, 0x21, 0xa7, 0x8f, 0x1b, 0x9c, 0xe1, 0x28, 0xbf, 0xa8, 0x10, 0xd9, 0x2d, 0x16, 0xda, 0x83, 0x56, 0x68, 0xc5, 0x66, 0x09, 0x7b, 0x48, 0xe5, 0xae, 0x69, 0x28, 0x89, 0x36, 0xad, 0x02, 0x49, 0x52, 0x88, 0x23, 0x09, 0xe3, 0xa4, 0xa0, 0x60, 0xb2, 0xf8, 0xa4, 0x9e, 0x62, 0xeb, 0x04, 0x0e, 0xa3, 0xbc, 0x19, 0x78, 0xa8, 0x21, 0xce, 0xea, 0xda, 0x2e, 0xf8, 0xb8, 0xce, 0x79, 0xe6, 0xc2, 0x74, 0x7c, 0x39, 0xf5, 0x92, 0x3a, 0xf6, 0x15, 0x71, 0x26, 0xda, 0xb9, 0xd7, 0x40, 0xee, 0x97, 0x34, 0x81, 0x5b, 0x01, 0x20, 0x79, 0x7e, 0xb0, 0x05, 0x37, 0x3f, 0xc1, 0x19, 0x69, 0x9f, 0xfd, 0x90, 0xc4, 0x91, 0x5d, 0x0f, 0xa6, 0x0b, 0xcd, 0x63, 0xfa, 0x5c, 0x31, 0x73, 0x5d, 0xc0, 0xa6, 0x73, 0x7e, 0x32, 0x0a, 0x5b, 0xcb, 0x81, 0xbe, 0x98, 0x4a, 0xa6, 0xaa, 0x01, 0xc4, 0x55, 0x82, 0x0c, 0x29, 0xd2, 0x48, 0x42, 0x30, 0x06, 0x13, 0xf0, 0x3e, 0xd2, 0x0e, 0x20, 0x89, 0xa3, 0xc3, 0xc7, 0x7d, 0x47, 0x9a, 0x40, 0x5f, 0xff, 0x9c, 0xf9, 0x30, 0xd5, 0x7d, 0x6d, 0xd4, 0x2f, 0xda, 0x52, 0x73, 0xa5, 0xbf, 0x13, 0x20, 0x10, 0x6c, 0x80, 0xb8, 0xe3, 0x59, 0xc5, 0x0d, 0xbf, 0x77, 0x98, 0x44, 0x41, 0xb9, 0xb7, 0x7c, 0x1f, 0xd3, 0x92, 0xb1, 0x73, 0x42, 0x44, 0xdf, 0x56, 0x8c, 0xc8, 0x6a, 0xb1, 0xc9, 0x6a, 0xbd, 0x50, 0x62, 0x7b, 0x31, 0x38, 0x19, 0x49, 0x31, 0x3b, 0x49, 0x4f, 0x9d, 0xc9, 0x6f, 0xa8, 0x6b, 0x09, 0xea, 0xca, 0x94, 0x28, 0xff, 0x70, 0x2e, 0xf2, 0x20, 0xd8, 0xd5, 0x9f, 0x6e, 0x2f, 0x50, 0xef, 0x7c, 0x4a, 0x72, 0x79, 0x56, 0x96, 0x3d, 0x3f, 0xc2, 0x52, 0x4e, 0x87, 0xc5, 0xfb, 0x75, 0xe6, 0x69, 0x08, 0xa3, 0x9e, 0xbe, 0xd8, 0x09, 0x2a, 0x1f, 0xe9, 0x7e, 0x16, 0xb6, 0x4a, 0x21, 0x14, 0x43, 0x53, 0x40, 0x4d, 0x18, 0x93, 0x79, 0xf5, 0x68, 0x0a, 0x1f, 0x22, 0xc2, 0x98, 0xe0, 0xde, 0xd9, 0xb6, 0xa4, 0x7a, 0x86, 0x64, 0xb7, 0x26, 0x10, 0x62, 0x2b, 0xbf, 0xaa, 0xa3, 0x78, 0xe8, 0x3d, 0xff, 0x66, 0x5c, 0x68, 0x28, 0x2d, 0x83, 0xc6, 0xdf, 0xda, 0x43, 0x6f, 0x68, 0xf4, 0x18, 0xc1, 0x3b, 0x60, 0x67, 0x60, 0xfc, 0x82, 0x0f, 0x7b, 0xad, 0xa5, 0x42, 0x51, 0x23, 0x9d, 0x93, 0xf4, 0xb6, 0xaa, 0x4f, 0x4d, 0x3d, 0xa0, 0x11, 0x61, 0x3a, 0x45, 0x91, 0xd2, 0x51, 0xfb, 0xbd, 0xa9, 0xff, 0x9f, 0x0b, 0x52, 0x88, 0xb0, 0x0d, 0xe8, 0x31, 0xb4, 0x46, 0xb4, 0xb0, 0xd7, 0x3c, 0xf0, 0xe1, 0xd6, 0xce, 0xd0, 0xba, 0x1b, 0xc8, 0xc3, 0x81, 0x2a, 0xb5, 0xf6, 0x3c, 0x3b, 0xf4, 0x19, 0x6a, 0x28, 0x0e, 0x67, 0xf0, 0x8a, 0x47, 0xe0, 0x56, 0x1f, 0x73, 0xd9, 0x33, 0x70, 0x0b, 0xb7, 0xe6, 0xb0, 0x80, 0xf8, 0x87, 0xe6, 0xcf, 0x73, 0x1e, 0x4f, 0x56, 0xe0, 0x12, 0xfd, 0xe6, 0x9a, 0xe4, 0xc5, 0x19, 0xa4, 0x1c, 0x58, 0xe6, 0xea, 0x84, 0xb0, 0x72, 0xca, 0x95, 0xae, 0x29, 0xd3, 0x2f, 0x01, 0x0e, 0xcd, 0x8d, 0x49, 0x4f, 0xf9, 0x77, 0x7c, 0x1d, 0x9a, 0xb9, 0x89, 0xba, 0xb3, 0xd5, 0x3c, 0xd4, 0x13, 0xf5, 0x62, 0x11, 0x8f, 0x23, 0x2d, 0xeb, 0x8f, 0xbc, 0xda, 0xbe, 0xcc, 0x22, 0x90, 0x1f, 0x57, 0xb2, 0x8c, 0x70, 0xde, 0xf6, 0x7b, 0xb1, 0x2b, 0x1b, 0x27, 0x99, 0xed, 0xa5, 0x56, 0xe6, 0xbb, 0x61, 0xef, 0xf1, 0x56, 0x9b, 0x5f, 0x85, 0x2e, 0x92, 0x3b, 0xf1, 0x28, 0x29, 0x27, 0x5c, 0x9f, 0xdf, 0xf6, 0x59, 0xa9, 0x01, 0x13, 0xbc, 0x9b, 0x1f, 0x1f, 0xab, 0xcf, 0xbc, 0xdb, 0xf8, 0xa4, 0x49, 0x49, 0xae, 0xc7, 0x55, 0x0e, 0xe9, 0xb1, 0xfe, 0x1b, 0xeb, 0x71, 0xab, 0x8c, 0x6d, 0xac, 0xfd, 0xd0, 0x33, 0xe2, 0x02, 0x0b, 0xe3, 0xf2, 0xac, 0xb8, 0x17, 0xe1, 0x82, 0x93, 0xb1, 0xd7, 0x96, 0xb6, 0x6f, 0x6a, 0xb7, 0x02, 0xbf, 0x1f, 0xe7, 0xc0, 0xd4, 0x2e, 0x10, 0x88, 0xf9, 0x86, 0xf2, 0x62, 0x25, 0x11, 0x60, 0x2c, 0xd0, 0x39, 0xac, 0x3c, 0x06, 0xab, 0x60, 0x46, 0xba, 0x5b, 0x2e, 0x7f, 0x5c, 0xc8, 0x2a, 0x02, 0xae, 0x81, 0x37, 0x73, 0xd3, 0xe8, 0xbf, 0xe3, 0xa8, 0x36, 0xa8, 0xf4, 0x58, 0xbf, 0x83, 0x3e, 0x2b, 0x78, 0x06, 0xf1, 0x9f, 0xb6, 0xbc, 0xbb, 0xba, 0x38, 0xfb, 0xec, 0x9e, 0x68, 0x17, 0xd8, 0x5e, 0xde, 0xd5, 0x7c, 0x10, 0x26, 0x22, 0x65, 0x24, 0xc3, 0x05, 0xce, 0xf4, 0x73, 0xd3, 0x09, 0x9b, 0xb5, 0xa2, 0x20, 0x0b, 0x89, 0xff, 0xbb, 0x5a, 0x77, 0xe4, 0x44, 0x5d, 0xd2, 0xe4, 0x4a, 0x78, 0x3e, 0xa9, 0x23, 0xb4, 0x70, 0xa0, 0xd6, 0x12, 0x35, 0xf3, 0x38, 0x20, 0xb6, 0xb8, 0x54, 0xc9, 0xfa, 0x68, 0x10, 0x71, 0xac, 0x92, 0x0e, 0x42, 0x1f, 0xd0, 0xd1, 0xc0, 0x8f, 0xfb, 0x21, 0xa4, 0xaa, 0x9b, 0xb0, 0xe7, 0x4e, 0xa1, 0xfd, 0x1d, 0x95, 0x59, 0x79, 0x04, 0x0f, 0x9a, 0xe9, 0x5d, 0x4e, 0x40, 0x0b, 0xfa, 0xa8, 0xdb, 0x7c, 0x19, 0x38, 0xa9, 0xd9, 0xf0, 0x26, 0xc2, 0x24, 0x89, 0x28, 0x93, 0x6a, 0xd0, 0x49, 0x8d, 0xa3, 0xeb, 0xea, 0x1e, 0xda, 0xc9, 0x06, 0xe1, 0x8e, 0xfe, 0xba, 0x12, 0x57, 0xce, 0x04, 0x44, 0xcd, 0x87, 0xcb, 0x56, 0xa5, 0x15, 0x1f, 0xa3, 0x1d, 0xd0, 0xc3, 0x79, 0x9b, 0x98, 0xe8, 0xcd, 0x90, 0x24, 0x3c, 0x2c, 0xa3, 0x97, 0x23, 0xf5, 0x0c, 0x54, 0x44, 0xc6, 0x3d, 0x14, 0x48, 0x34, 0xc8, 0x36, 0xde, 0xbf, 0x7d, 0x56, 0x03, 0x04, 0xd2, 0x20, 0x80, 0x35, 0x89, 0x66, 0xb4, 0xc7, 0x8c, 0x71, 0x93, 0x6a, 0x1c, 0x95, 0xef, 0x3e, 0x2a, 0x08, 0xf7, 0x44, 0x05, 0xf5, 0xfd, 0x13, 0x36, 0xcb, 0x7c, 0xcc, 0xa8, 0xdb, 0x59, 0x4f, 0x0d, 0x22, 0x69, 0xaf, 0x7c, 0x63, 0x34, 0xe4, 0x5f, 0x7a, 0xf8, 0xc0, 0x8c, 0xec, 0xf1, 0x25, 0xb2, 0xc2, 0xd8, 0x74, 0xf7, 0x98, 0xaa, 0x48, 0xdf, 0xf1, 0xaa, 0x65, 0x70, 0xcd, 0xa9, 0xeb, 0x94, 0x7e, 0x85, 0xd0, 0xbe, 0xb7, 0xf0, 0x8c, 0xd0, 0xe6, 0x72, 0x16, 0x3d, 0xc3, 0xb1, 0x10, 0x6a, 0x29, 0xf1, 0x3e, 0x5b, 0x26, 0xd7, 0x3d, 0x8b, 0x4e, 0x72, 0x72, 0x1b, 0x54, 0x7c, 0x40, 0x2f, 0xdb, 0xdc, 0x7e, 0x96, 0x89, 0x70, 0x28, 0xa9, 0x5d, 0x0a, 0x54, 0x75, 0x43, 0xb8, 0x68, 0x1c, 0xe6, 0x49, 0x8b, 0x78, 0xc6, 0x0c, 0x59, 0x02, 0x8a, 0xdb, 0xdb, 0xf2, 0x97, 0x58, 0xb6, 0xa8, 0xe1, 0x77, 0xa2, 0x4b, 0x01, 0x3d, 0x1e, 0xb0, 0x89, 0xc7, 0x63, 0x7d, 0x94, 0x8d, 0x96, 0x8e, 0xa1, 0xe8, 0x41, 0x97, 0xa1, 0xd2, 0x04, 0x0b, 0x4e, 0xed, 0x88, 0x3d, 0xbf, 0xc8, 0xb5, 0xc6, 0x39, 0x5d, 0x25, 0x26, 0x49, 0xde, 0xd8, 0xae, 0x0f, 0xb1, 0x29, 0x9d, 0xdd, 0xb9, 0x00, 0x89, 0x01, 0xd7, 0x4a, 0x00, 0xde, 0xb0, 0xa6, 0x70, 0x42, 0xb1, 0x61, 0x44, 0xf3, 0x51, 0xa5, 0x50, 0x8b, 0x96, 0xed, 0x6f, 0x86, 0xdb, 0xbc, 0x6a, 0x9a, 0xd0, 0x8f, 0x1c, 0x47, 0xc2, 0x10, 0xd4, 0xae, 0x1d, 0x8c, 0xfb, 0xa6, 0x2f, 0xa7, 0xf7, 0x0d, 0x2e, 0x4f, 0x4e, 0x5c, 0x7d, 0xee, 0x0f, 0x7e, 0x2b, 0xe4, 0x6e, 0xe3, 0xbd, 0x34, 0xae, 0xd0, 0x2d, 0x7d, 0x44, 0xf9, 0x32, 0x2d, 0x39, 0x51, 0xc2, 0xf1, 0xd0, 0x21, 0xd5, 0x70, 0x69, 0x57, 0x6d, 0x38, 0xa5, 0x21, 0xd3, 0xf8, 0xcb, 0xbb, 0x23, 0xf1, 0x6a, 0x86, 0x0a, 0xa7, 0x40, 0x59, 0xcf, 0xdc, 0x5b, 0x1b, 0x90, 0xbe, 0x7e, 0x92, 0xcf, 0x60, 0xc6, 0x76, 0x2d, 0x67, 0x8d, 0xca, 0x74, 0x06, 0x8f, 0x6c, 0xdb, 0x2c, 0x4b, 0xea, 0x86, 0xfb, 0xad, 0x97, 0x4d, 0x7d, 0xe9, 0xde, 0xbe, 0x92, 0xaa, 0xd7, 0x65, 0x2d, 0x6c, 0x18, 0x4b, 0xc0, 0x26, 0xce, 0xbc, 0xf5, 0x2d, 0x0c, 0x4d, 0x9f, 0x55, 0x62, 0x1e, 0xf0, 0x59, 0xb2, 0x5d, 0xec, 0x7d, 0x3f, 0x0b, 0x1d, 0x71, 0x07, 0x03, 0x89, 0x79, 0x53, 0x38, 0xe1, 0xcb, 0x8c, 0x3e, 0xfb, 0x38, 0x50, 0x0c, 0x82, 0x0f, 0xc5, 0x00, 0xed, 0x3f, 0x2d, 0x23, 0xad, 0xbb, 0xbb, 0xaf, 0xab, 0x23, 0xa5, 0xce, 0xf1, 0xa0, 0x7b, 0xa5, 0xa7, 0x10, 0xb7, 0x91, 0x42, 0x63, 0x95, 0xb0, 0xf8, 0x44, 0x25, 0xa4, 0x77, 0xfc, 0x9e, 0x93, 0xd6, 0x94, 0xf5, 0x72, 0xcc, 0x3a, 0xae, 0x84, 0x20, 0xe7, 0xf3, 0x1d, 0x60, 0x3e, 0xe3, 0xac, 0xd6, 0xb6, 0x2c, 0xf8, 0xb8, 0xfb, 0xdc, 0xaa, 0x9f, 0x92, 0x74, 0x0c, 0x3a, 0xbc, 0x3e, 0x10, 0x44, 0x9e, 0xe1, 0x94, 0xb3, 0x9e, 0x33, 0xe4, 0x33, 0x10, 0x4e, 0x81, 0xd2, 0x12, 0xe6, 0x21, 0xfd, 0xb4, 0xda, 0xf6, 0xab, 0x5d, 0x08, 0x33, 0xd8, 0x6a, 0x66, 0xcd, 0x35, 0x17, 0x4f, 0x7e, 0x1e, 0xa3, 0x1a, 0x10, 0xcc, 0xaf, 0xf1, 0xd8, 0xcc, 0xe8, 0xe0, 0x81, 0xaf, 0xe5, 0x2d, 0x0b, 0x04, 0x52, 0xe8, 0x12, 0x83, 0x4f, 0xc2, 0x54, 0x8b, 0x13, 0x23, 0x6e, 0xcf, 0xd5, 0x76, 0xe6, 0x4c, 0xec, 0xc8, 0x6e, 0x7e, 0x35, 0x91, 0x67, 0xd3, 0xb5, 0xd1, 0xa5, 0x60, 0x7f, 0x5f, 0x72, 0xd2, 0xd8, 0x7e, 0xd5, 0xa8, 0x9a, 0xb2, 0x14, 0xa0, 0xd6, 0xd2, 0x77, 0x6f, 0xbd, 0x5d, 0x4f, 0xb5, 0xc1, 0x11, 0x37, 0x30, 0xf7, 0xba, 0x9a, 0x30, 0xc0, 0x49, 0x75, 0x4b, 0xa8, 0x25, 0x5e, 0x51, 0x8e, 0xc6, 0xc6, 0x83, 0x06, 0x7f, 0x7b, 0xff, 0xfb, 0x9b, 0x70, 0x7f, 0x99, 0xac, 0xc1, 0x43, 0x69, 0x20, 0xf2, 0x4c, 0xbe, 0x15, 0x78, 0xcb, 0x51, 0x6f, 0x7a, 0xd9, 0x28, 0x27, 0xd8, 0x68, 0xbc, 0xe5, 0x6d, 0x7a, 0x5a, 0xd2, 0x91, 0x91, 0xca, 0xa7, 0xe2, 0x66, 0x2f, 0x0b, 0x45, 0xdd, 0x2e, 0x1b, 0x27, 0x39, 0x52, 0x4a, 0x09, 0x8c, 0xaf, 0x6b, 0x3b, 0x72, 0xc6, 0x0c, 0xe7, 0xff, 0xa9, 0x06, 0x52, 0xf6, 0x60, 0x52, 0x5f, 0x3c, 0x8a, 0x1e, 0x55, 0x8c, 0x47, 0x20, 0xe1, 0x6b, 0x56, 0x2b, 0x5f, 0x5f, 0x7b, 0x00, 0x55, 0x5c, 0x24, 0x66, 0x40, 0x7f, 0x4b, 0x7d, 0x94, 0xff, 0x9e, 0x4f, 0xfe, 0x60, 0xde, 0xa8, 0xec, 0xe9, 0x85, 0x28, 0x4f, 0x59, 0xab, 0x96, 0x9f, 0xd6, 0x2a, 0x77, 0x20, 0x26, 0x01, 0xdf, 0x65, 0x21, 0xf6, 0x88, 0x12, 0x66, 0x80, 0x21, 0xe6, 0x4e, 0xe3, 0xe8, 0xf8, 0x1e, 0x9d, 0x7b, 0x40, 0x81, 0x01, 0xeb, 0x5a, 0x35, 0x22, 0x13, 0x87, 0x04, 0xf2, 0x28, 0xf5, 0xf6, 0xab, 0x91, 0x40, 0xc5, 0x6e, 0xf8, 0x38, 0x91, 0x2a, 0xa1, 0xe5, 0xd5, 0xc0, 0xfa, 0xc8, 0x9a, 0x65, 0x74, 0x64, 0xea, 0x47, 0x92, 0xfd, 0x88, 0x73, 0x3f, 0xa0, 0xde, 0xf6, 0x65, 0x63, 0x37, 0x42, 0xbb, 0xee, 0x2e, 0xd4, 0xdf, 0x3a, 0x66, 0x14, 0xa4, 0x99, 0x7c, 0x7d, 0xad, 0xf7, 0x3a, 0xfd, 0x3b, 0x5f, 0x0e, 0x9f, 0x43, 0xc1, 0xba, 0x67, 0xc4, 0xf2, 0x4c, 0x7d, 0x57, 0xf4, 0x51, 0x8f, 0x08, 0x78, 0x46, 0x70, 0x64, 0xa1, 0x4f, 0x05, 0xd3, 0x0b, 0x2c, 0x61, 0x28, 0x0c, 0x68, 0x2f, 0x77, 0x39, 0xd3, 0x50, 0x26, 0x2c, 0x33, 0xc6, 0x47, 0x85, 0x37, 0xd1, 0x25, 0x2f, 0xac, 0x57, 0x1d, 0xe5, 0xf3, 0x89, 0xb0, 0xf4, 0xb3, 0xc4, 0xd6, 0x42, 0xcb, 0xb5, 0x94, 0x8f, 0x8b, 0xc1, 0xd0, 0xfb, 0x23, 0xa4, 0x65, 0xc8, 0x5b, 0x58, 0x73, 0x62, 0x85, 0x38, 0xf8, 0x9c, 0xb0, 0x65, 0xa5, 0x3d, 0x1f, 0x69, 0xea, 0xbb, 0xfa, 0x1a, 0x54, 0x46, 0x42, 0xc1, 0x18, 0x08, 0x0a, 0x7c, 0xf0, 0xac, 0xe5, 0xe1, 0x25, 0x1d, 0x9b, 0xe4, 0xed, 0x90, 0x20, 0xfb, 0xf8, 0xc4, 0xc6, 0x80, 0x46, 0x88, 0xb1, 0x56, 0x3b, 0x7f, 0x8b, 0xcf, 0xf5, 0x20, 0x7a, 0xcd, 0xdd, 0x00, 0x4f, 0x28, 0x7c, 0x54, 0x01, 0x50, 0x91, 0xb1, 0x59, 0x34, 0x60, 0x17, 0xee, 0x62, 0x4c, 0x2e, 0x54, 0x6f, 0xa8, 0xcf, 0x91, 0x99, 0xcb, 0xc6, 0xd0, 0xab, 0x62, 0xd7, 0x5a, 0x21, 0x0b, 0xff, 0xc1, 0x8d, 0x1f, 0xfb, 0x5e, 0x39, 0xce, 0x0f, 0xfe, 0x0e, 0x72, 0x00, 0xd9, 0xb4, 0x1d, 0x62, 0xc4, 0xfb, 0x74, 0x1a, 0xa7, 0x7a, 0xc1, 0x1b, 0x30, 0x76, 0x43, 0x73, 0xc9, 0x05, 0xc9, 0x8b, 0xc8, 0x72, 0x7f, 0xaa, 0xe6, 0xe4, 0x07, 0xbc, 0xf3, 0x3b, 0xcb, 0x52, 0xc8, 0x3b, 0x92, 0xe9, 0x7c, 0xec, 0x52, 0x6f, 0xdb, 0x40, 0x45, 0x03, 0x13, 0xf7, 0x3f, 0xfd, 0xb1, 0xc0, 0x3f, 0x2e, 0xcc, 0xa1, 0x44, 0x69, 0x80, 0x98, 0x62, 0x41, 0x9f, 0x83, 0x14, 0x15, 0xa2, 0x3d, 0xd4, 0x4a, 0xe6, 0x0a, 0xe9, 0xd8, 0x15, 0x35, 0x81, 0x08, 0xe1, 0xf7, 0xff, 0x7c, 0xf9, 0x9b, 0x96, 0x6f, 0x35, 0xe0, 0x17, 0x3e, 0x14, 0x9f, 0x07, 0x27, 0x69, 0xad, 0xf5, 0x51, 0x51, 0x03, 0x0a, 0x0d, 0x68, 0x1c, 0xe2, 0x5c, 0x3d, 0x9f, 0x9a, 0xb1, 0x03, 0x3e, 0x2b, 0xf8, 0x89, 0xde, 0xf6, 0xd6, 0x6c, 0xf8, 0xa0, 0x33, 0x8b, 0x3f, 0x1f, 0xf6, 0xbb, 0x83, 0x15, 0x0f, 0xbc, 0xd5, 0x5d, 0xbb, 0x6c, 0xec, 0xe4, 0x03, 0x3b, 0xc7, 0xbb, 0x86, 0xdf, 0x94, 0x6a, 0x79, 0x49, 0xd1, 0x86, 0xec, 0xd7, 0xb1, 0x86, 0x4f, 0xcb, 0xc1, 0xd2, 0x34, 0xfc, 0xcb, 0x1d, 0x57, 0xcb, 0xfa, 0xf5, 0xdb, 0x59, 0x40, 0x98, 0xd6, 0xf7, 0xf5, 0x0a, 0x10, 0xde, 0xc1, 0x64, 0x08, 0x21, 0xbb, 0x6f, 0x38, 0xdf, 0xd2, 0x71, 0x9a, 0xbd, 0x6d, 0x47, 0x6b, 0x93, 0x4e, 0xb4, 0x2f, 0x66, 0xbc, 0xf9, 0xf5, 0x97, 0xe1, 0xa6, 0xdc, 0x59, 0x71, 0xaf, 0xd6, 0x68, 0x8c, 0xc2, 0xac, 0xf9, 0xe6, 0xd8, 0x43, 0xec, 0x25, 0x0b, 0x1d, 0x49, 0x8a, 0xa7, 0x22, 0xea, 0xd4, 0x83, 0xa1, 0x75, 0x61, 0x92, 0x92, 0x8e, 0x97, 0xb5, 0x1e, 0x4a, 0x82, 0xd3, 0x61, 0xe6, 0xbe, 0x2c, 0x6e, 0xb9, 0x98, 0xea, 0x93, 0x67, 0x70, 0xf9, 0xdf, 0x58, 0x62, 0x19, 0xe2, 0x68, 0x25, 0x32, 0xb4, 0xe0, 0x32, 0xe7, 0x39, 0xa6, 0x29, 0x6d, 0xa2, 0xb0, 0x71, 0x9e, 0x37, 0xbe, 0x1f, 0x49, 0x54, 0x49, 0x1a, 0xcd, 0xb2, 0xb6, 0x7c, 0xe6, 0xe8, 0xd0, 0x3b, 0xc6, 0x32, 0x75, 0x08, 0x68, 0x70, 0x8f, 0x77, 0x21, 0x72, 0x47, 0x61, 0x78, 0x72, 0x75, 0x87, 0x37, 0xe2, 0x5a, 0x77, 0xc2, 0x69, 0x91, 0xb4, 0xa8, 0x28, 0x43, 0x11, 0x78, 0x41, 0x9b, 0x5e, 0xd6, 0x9a, 0x79, 0x46, 0xcd, 0xde, 0x6b, 0x78, 0x67, 0xc5, 0xd9, 0x05, 0x7b, 0x96, 0x7f, 0x09, 0xc7, 0xea, 0x20, 0x8e, 0x3e, 0xb2, 0x79, 0xad, 0xa3, 0x7b, 0x75, 0xf6, 0x57, 0xf1, 0x9f, 0x13, 0x70, 0xa2, 0xdc, 0xa7, 0x0a, 0x05, 0x5a, 0x7c, 0xe2, 0xbb, 0xc4, 0xde, 0x21, 0x14, 0xb8, 0x42, 0x75, 0xd5, 0x7a, 0x2c, 0x66, 0x39, 0xea, 0x4f, 0xe8, 0x35, 0xb3, 0xf5, 0x2c, 0x00, 0xc6, 0xa1, 0xbc, 0xd3, 0x07, 0xf3, 0xc7, 0xee, 0x45, 0xcd, 0xb9, 0xdb, 0x70, 0xb4, 0x0f, 0xf6, 0x06, 0x79, 0x6a, 0x2d, 0xcf, 0x18, 0xe2, 0x05, 0xca, 0xe0, 0x9c, 0xdd, 0x67, 0xd4, 0x9f, 0x77, 0xf6, 0x52, 0xe3, 0xb4, 0x60, 0xf2, 0xab, 0x9f, 0x15, 0xb1, 0x15, 0xad, 0x45, 0x4f, 0xf0, 0x44, 0x53, 0xf5, 0xcd, 0x79, 0x87, 0x1b, 0x59, 0x1e, 0x03, 0xa9, 0xea, 0xfc, 0xf8, 0x5c, 0x57, 0x5d, 0x19, 0x6c, 0x0d, 0xce, 0x50, 0x6c, 0x5f, 0x22, 0xb0, 0x71, 0x1e, 0xba, 0xac, 0x76, 0x6a, 0x04, 0x86, 0xff, 0xc7, 0x42, 0x0a, 0xfd, 0x74, 0x8d, 0x7b, 0xf2, 0xf8, 0x19, 0xce, 0x55, 0xfd, 0xba, 0x16, 0x38, 0x61, 0xa7, 0x40, 0x28, 0x8b, 0x7f, 0x00, 0x55, 0xfb, 0x89, 0x0b, 0xf3, 0x25, 0x40, 0x87, 0xdf, 0x80, 0x0f, 0xbf, 0x86, 0xda, 0x59, 0x1c, 0x03, 0xee, 0xbc, 0x51, 0x87, 0x38, 0x97, 0xd5, 0xfe, 0x08, 0xc9, 0x96, 0xef, 0xd6, 0xbc, 0xec, 0xa4, 0xd5, 0xa3, 0xcb, 0x8c, 0xca, 0xff, 0x3e, 0xdd, 0x1f, 0x68, 0x10, 0x7d, 0x33, 0x8a, 0xcc, 0x23, 0xf5, 0x6e, 0xe9, 0xba, 0xb1, 0xfb, 0x3e, 0x06, 0x2a, 0xbc, 0xbc, 0x89, 0xe8, 0xe3, 0x5b, 0xa8, 0xd3, 0x8e, 0x55, 0x0a, 0x01, 0x4a, 0x93, 0x41, 0xcd, 0xd5, 0x64, 0xac, 0x29, 0x29, 0x75, 0x9b, 0x35, 0xb5, 0xfe, 0xb5, 0x10, 0xee, 0x39, 0x97, 0xed, 0x06, 0x18, 0xbe, 0x6a, 0xfb, 0x37, 0xa7, 0x1e, 0xd4, 0x10, 0x34, 0x71, 0x28, 0x6e, 0x52, 0xb1, 0xdf, 0x24, 0xd9, 0x62, 0x3c, 0xfe, 0xb4, 0xd5, 0x1c, 0xf8, 0x41, 0xfc, 0x78, 0xae, 0xfa, 0x7c, 0x31, 0x14, 0x56, 0x04, 0x0d, 0x67, 0xea, 0xdd, 0xfc, 0x63, 0xd4, 0xc3, 0xa1, 0xb7, 0x59, 0xf4, 0x0d, 0xb6, 0xcd, 0x86, 0xce, 0x4f, 0xb3, 0xfd, 0x28, 0x3f, 0x26, 0x1d, 0xa2, 0x85, 0x78, 0xfd, 0xc5, 0x16, 0x18, 0x5d, 0x20, 0xd3, 0xb9, 0x39, 0x8f, 0xb8, 0xb0, 0x9f, 0xbd, 0x56, 0x9e, 0xbd, 0xe8, 0x83, 0x50, 0x3e, 0xe4, 0x50, 0xe3, 0xd7, 0x63, 0x3b, 0x2c, 0x1c, 0x73, 0xa6, 0x57, 0x99, 0x48, 0x88, 0xcd, 0x1e, 0x3c, 0x63, 0x5c, 0x5a, 0x14, 0x76, 0x92, 0xab, 0x85, 0x33, 0x69, 0x35, 0xf7, 0xf3, 0x2a, 0x32, 0x88, 0xe9, 0x8b, 0x88, 0x54, 0x54, 0x1a, 0xa1, 0xf4, 0xf9, 0xdf, 0x77, 0x44, 0xd1, 0x3d, 0xee, 0x69, 0xff, 0x1a, 0x67, 0x13, 0x04, 0x40, 0x92, 0x00, 0x36, 0x02, 0x83, 0xc2, 0x6f, 0x22, 0x09, 0xc1, 0x02, 0xf2, 0x3b, 0x83, 0xf3, 0xba, 0x53, 0x2b, 0x67, 0x5a, 0xc0, 0x40, 0x59, 0x30, 0x76, 0xb0, 0x8f, 0x3c, 0x89, 0x15, 0xcc, 0x82, 0xfa, 0x36, 0x48, 0xb0, 0xd1, 0xd1, 0x5d, 0x01, 0x6b, 0x98, 0x83, 0x61, 0x16, 0x79, 0x7e, 0xd2, 0xdb, 0x22, 0xd6, 0x0e, 0x9b, 0xc5, 0x88, 0x6e, 0x5e, 0x18, 0xfb, 0x0a, 0xe7, 0xa1, 0x35, 0x22, 0x8c, 0x30, 0x4f, 0xbd, 0x44, 0xad, 0x26, 0x8f, 0x02, 0x13, 0x54, 0x20, 0x41, 0xbd, 0x5f, 0x2b, 0xe0, 0xe1, 0x2f, 0x44, 0x31, 0x5a, 0xc6, 0xbe, 0x4d, 0xaa, 0x2b, 0xcc, 0xaa, 0x3f, 0xa7, 0xe6, 0xef, 0xf5, 0x34, 0x6f, 0x06, 0xdd, 0x33, 0x94, 0x73, 0x3d, 0x5d, 0x77, 0xe5, 0xd7, 0xfc, 0x8d, 0x0b, 0x6e, 0x5b, 0x44, 0xa9, 0x87, 0x7b, 0xea, 0xeb, 0x6d, 0x07, 0xca, 0xf9, 0x77, 0x8a, 0x98, 0xcb, 0x8d, 0xe0, 0x0f, 0x3f, 0xe9, 0xeb, 0xd8, 0x69, 0x1b, 0x87, 0xae, 0x2a, 0x50, 0xbf, 0xc0, 0x04, 0xd3, 0x41, 0x56, 0x2c, 0xd4, 0x0f, 0xb8, 0xe1, 0x69, 0x78, 0x4c, 0xfd, 0xd2, 0x47, 0xfe, 0xca, 0x01, 0x3a, 0xe4, 0x16, 0x5a, 0xb5, 0x22, 0x8a, 0xb7, 0xb8, 0x0c, 0x37, 0xaf, 0x0f, 0x8b, 0x72, 0x18, 0xc8, 0xc2, 0xe2, 0xca, 0xea, 0xf1, 0xd7, 0xa6, 0x64, 0x99, 0xdd, 0xd7, 0x44, 0xe1, 0x92, 0x58, 0x29, 0x38, 0xb4, 0xb6, 0xfb, 0x3c, 0x7e, 0x18, 0xd9, 0xda, 0x35, 0x7c, 0x53, 0xb7, 0xfe, 0x43, 0xda, 0xcf, 0xf2, 0xf0, 0x74, 0x5d, 0x74, 0x2d, 0xb5, 0xfa, 0xc2, 0x0f, 0xea, 0x08, 0xcb, 0x9a, 0x97, 0x51, 0x41, 0x88, 0x24, 0xec, 0xee, 0x46, 0xd3, 0x61, 0x4b, 0x40, 0xf5, 0x0c, 0x4f, 0x5e, 0x5e, 0xc7, 0x85, 0xce, 0x16, 0xc3, 0x61, 0x05, 0x51, 0xb7, 0xd4, 0x00, 0xa1, 0x3d, 0x1e, 0xd0, 0x6b, 0x78, 0xe4, 0x55, 0x98, 0xfb, 0x82, 0x4a, 0x8c, 0xe6, 0xa2, 0x81, 0x5c, 0x52, 0x0e, 0x70, 0x3b, 0xf0, 0xc2, 0xed, 0x36, 0xec, 0x46, 0x36, 0x22, 0x18, 0x3a, 0x34, 0xd2, 0x46, 0x32, 0x01, 0x8d, 0xf5, 0xc5, 0xa7, 0xbe, 0x31, 0xe1, 0x2b, 0xee, 0xb4, 0x61, 0xca, 0xf0, 0x51, 0xe2, 0x82, 0x5b, 0x93, 0xd2, 0xd4, 0x3e, 0xa1, 0xc9, 0xc9, 0x0e, 0x64, 0x1d, 0x33, 0xe3, 0xec, 0xb1, 0x35, 0xe4, 0x10, 0x0d, 0x05, 0x00, 0x55, 0xb4, 0xf1, 0xe0, 0x12, 0xb1, 0xa0, 0x19, 0xd1, 0x74, 0x9b, 0xa5, 0xf7, 0xdc, 0x0b, 0x94, 0xa8, 0x95, 0xc5, 0xff, 0xe5, 0xa4, 0x83, 0x3e, 0xf7 ],
+const [ 0x9b, 0x5f, 0x37, 0xf5, 0xdc, 0xed, 0xd9, 0x6d, 0x9b, 0x7f, 0xf6, 0xd8, 0x52, 0xb7, 0x7e, 0xf9, 0x04, 0x98, 0x31, 0x1d, 0x24, 0xdf, 0xa9, 0x06, 0xb2, 0x97, 0x9b, 0x28, 0xa7, 0xe8, 0x5a, 0x18, 0x93, 0x30, 0x9c, 0x41, 0x85, 0x55, 0x81, 0xd9, 0x2b, 0x59, 0xd1, 0x13, 0x3a, 0x2e, 0x85, 0x96, 0x10, 0xcc, 0x8a, 0x2f, 0x99, 0x82, 0xc1, 0xc2, 0x6f, 0x89, 0x4a, 0x87, 0x45, 0xdf, 0x02, 0x72, 0x85, 0x52, 0x4a, 0xf3, 0x38, 0xdb, 0x0b, 0xe0, 0x27, 0x2e, 0xf7, 0xb0, 0x3f, 0x8f, 0x11, 0xe9, 0x3a, 0xe7, 0x6f, 0xdb, 0x7c, 0x17, 0x3e, 0x8f, 0x3b, 0x8c, 0x08, 0xfb, 0xe3, 0x14, 0x32, 0x77, 0xb9, 0xf0, 0xc9, 0x75, 0xbe, 0x2a, 0x7e, 0x6c, 0xd6, 0x29, 0xee, 0x15, 0x29, 0x82, 0x27, 0xda, 0xca, 0x11, 0x68, 0x8c, 0x97, 0x49, 0x29, 0x54, 0x60, 0xc8, 0x5b, 0xec, 0x4b, 0x2e, 0xf1, 0x0e, 0x76, 0x30, 0x9f, 0x2d, 0xdf, 0xe8, 0xe2, 0x64, 0x81, 0x6f, 0x40, 0xac, 0xc0, 0xae, 0xd1, 0x51, 0x07, 0x71, 0xfe, 0xa7, 0xb0, 0xbd, 0x89, 0xf9, 0x24, 0x64, 0xce, 0xc2, 0x43, 0xd6, 0x48, 0x1f, 0x06, 0x3a, 0x56, 0x85, 0x62, 0xbe, 0x3f, 0xaf, 0x70, 0x2b, 0x74, 0xdb, 0xcc, 0xbc, 0x16, 0x36, 0x3b, 0x30, 0xb8, 0x95, 0x90, 0x1e, 0x66, 0x65, 0xd0, 0x89, 0xe6, 0xe5, 0x94, 0xb4, 0x3d, 0x93, 0xaf, 0x37, 0x76, 0xe3, 0x11, 0x53, 0x9e, 0x37, 0xeb, 0x83, 0x13, 0x0c, 0x14, 0x53, 0xff, 0x71, 0xac, 0x75, 0x1f, 0xbe, 0xff, 0x12, 0xc9, 0x82, 0xab, 0x5e, 0x2d, 0xbd, 0x06, 0x6f, 0xdb, 0x50, 0xba, 0x4f, 0x85, 0xb1, 0xb2, 0x50, 0x06, 0xe3, 0x3a, 0x9f, 0xa4, 0xa6, 0x61, 0x1c, 0x92, 0xeb, 0xa2, 0x69, 0xb9, 0x8a, 0xc4, 0x41, 0xb9, 0x37, 0xff, 0x0c, 0x2a, 0xb3, 0x60, 0xb0, 0x27, 0x3f, 0x6f, 0xa9, 0x0d, 0x56, 0x0e, 0x5c, 0x80, 0x9b, 0xa4, 0xa8, 0xaf, 0x11, 0x7b, 0xbf, 0xd9, 0x8a, 0x67, 0x34, 0x11, 0x62, 0xa9, 0x55, 0x3e, 0x6c, 0x12, 0xba, 0x65, 0x2d, 0x6c, 0x1e, 0x2b, 0x48, 0x15, 0x6e, 0x95, 0x3a, 0xed, 0x20, 0x13, 0x47, 0x72, 0xc6, 0xbd, 0xb4, 0x2a, 0xe3, 0xdc, 0x37, 0x42, 0xfd, 0xac, 0xac, 0x74, 0xf3, 0x60, 0x09, 0x2e, 0x91, 0x67, 0x94, 0xf0, 0x62, 0xee, 0x54, 0xf5, 0xc5, 0xa6, 0xc5, 0x17, 0x43, 0xc7, 0xd0, 0xed, 0x20, 0x55, 0xf9, 0x36, 0x30, 0xa2, 0xdb, 0x7a, 0xec, 0x14, 0xd1, 0xee, 0xc5, 0x28, 0xf7, 0x99, 0xb9, 0xb7, 0x51, 0xb5, 0x23, 0x78, 0x49, 0x58, 0xd7, 0xc7, 0x5f, 0x53, 0x6e, 0xa4, 0x1c, 0x5a, 0xdf, 0xff, 0x47, 0x66, 0x50, 0x33, 0x5c, 0x58, 0x2b, 0xd0, 0x3a, 0xdf, 0x73, 0x9d, 0x1c, 0x9b, 0x59, 0xdd, 0xca, 0x83, 0x0a, 0xd2, 0x11, 0x84, 0xcc, 0x80, 0x70, 0x6a, 0x49, 0xb3, 0x14, 0x04, 0x2a, 0x43, 0x07, 0x83, 0xe8, 0x97, 0xa4, 0x24, 0xdf, 0x68, 0x4e, 0x0f, 0xa5, 0xc7, 0x61, 0x7e, 0x99, 0x62, 0x69, 0x21, 0xbf, 0x03, 0x92, 0xc2, 0xcb, 0x59, 0x60, 0x25, 0x7b, 0xfb, 0xa0, 0x32, 0x2a, 0xaa, 0x9f, 0x55, 0xa3, 0xd6, 0x99, 0x26, 0x33, 0x64, 0x74, 0x45, 0x02, 0xaf, 0xae, 0x88, 0xa2, 0xcd, 0x95, 0x59, 0xe9, 0x13, 0xb6, 0x59, 0xfc, 0xdb, 0x97, 0x4a, 0xad, 0x84, 0xa9, 0x2b, 0x07, 0xbb, 0x78, 0xa4, 0x26, 0xf9, 0x25, 0xa5, 0x4d, 0x4d, 0x16, 0x4b, 0x32, 0x5c, 0xec, 0x03, 0x9c, 0xa6, 0xb5, 0xf1, 0x30, 0x0b, 0x63, 0x93, 0x88, 0x8d, 0x7e, 0xa1, 0x86, 0x57, 0x15, 0x38, 0xe8, 0xff, 0xfa, 0x38, 0x1c, 0x08, 0x2f, 0xeb, 0x55, 0xab, 0x9b, 0xe7, 0xde, 0xd6, 0x01, 0x35, 0xaf, 0x76, 0x33, 0xb2, 0x3e, 0xf2, 0x83, 0xb6, 0x97, 0xf7, 0x7b, 0xf4, 0xaf, 0x7b, 0xce, 0xa1, 0xf5, 0xfc, 0x8d, 0xd9, 0x2b, 0x09, 0x9e, 0x3e, 0x74, 0x04, 0x6b, 0xe2, 0xae, 0x26, 0xd7, 0x67, 0x01, 0xc3, 0x76, 0x64, 0xb8, 0xd0, 0xfd, 0x0b, 0x50, 0xa2, 0xf7, 0x09, 0xcf, 0xf8, 0xba, 0xae, 0x58, 0x3c, 0x9a, 0x4e, 0xfb, 0x06, 0x5c, 0xe7, 0xd1, 0xe2, 0xee, 0x03, 0x49, 0x53, 0x55, 0xe0, 0xbd, 0x18, 0xe6, 0xcf, 0x49, 0xad, 0xb9, 0xda, 0xdc, 0x15, 0x5b, 0xa9, 0x8f, 0xd7, 0xc3, 0xa7, 0x36, 0x47, 0x87, 0x60, 0x35, 0x06, 0x50, 0x2d, 0x96, 0xcc, 0x8c, 0x14, 0x58, 0x65, 0x62, 0xea, 0x09, 0xfa, 0xeb, 0xba, 0x97, 0x92, 0x9f, 0x6b, 0x63, 0xd8, 0x0d, 0x9c, 0x97, 0x1f, 0xd0, 0xd3, 0xba, 0xa3, 0xbe, 0xd7, 0x81, 0x12, 0x62, 0x5a, 0xe8, 0x4b, 0xad, 0xdb, 0x82, 0x65, 0xe8, 0xcb, 0x0d, 0xf3, 0xed, 0xef, 0x4a, 0x86, 0x97, 0x05, 0x0c, 0x74, 0x77, 0xaa, 0x8e, 0xd8, 0xc8, 0x7b, 0x09, 0xda, 0xa5, 0x7b, 0x86, 0x31, 0x7a, 0xb5, 0xf1, 0xe6, 0xb9, 0x22, 0x70, 0x5a, 0xce, 0xcc, 0xf3, 0x8a, 0x54, 0x34, 0x0b, 0x92, 0x89, 0xf1, 0xff, 0x70, 0xff, 0x9b, 0x1d, 0x0b, 0x95, 0xe7, 0x4e, 0x74, 0xa6, 0x13, 0xed, 0x6b, 0x80, 0x85, 0xd9, 0x25, 0x18, 0xaf, 0xc9, 0x4c, 0xfc, 0x35, 0xe0, 0x48, 0x88, 0x52, 0x82, 0xbd, 0x5d, 0x78, 0x65, 0x54, 0x0f, 0x36, 0xeb, 0xbf, 0x1e, 0x5f, 0xaf, 0xf7, 0x28, 0x69, 0x5d, 0xc8, 0x5c, 0x13, 0xc8, 0x90, 0x32, 0x4a, 0x36, 0x44, 0x59, 0x4e, 0xfe, 0xb3, 0xf1, 0x11, 0x56, 0x0f, 0xfb, 0xe0, 0x66, 0xa9, 0x0e, 0x44, 0xa1, 0xfc, 0x4b, 0x2b, 0x54, 0xed, 0x93, 0x43, 0x7f, 0x51, 0xf7, 0xa7, 0xe5, 0xb0, 0x6f, 0xbd, 0x5f, 0x48, 0xcf, 0x5e, 0x75, 0x55, 0xf8, 0x38, 0x2f, 0x90, 0x4b, 0x71, 0x29, 0xf6, 0x64, 0x8d, 0xe6, 0xca, 0x04, 0x92, 0x66, 0xdd, 0x4e, 0x6a, 0xfb, 0x0d, 0x37, 0x88, 0x58, 0x0c, 0x38, 0xcf, 0xeb, 0x63, 0x45, 0xaf, 0x6d, 0xb6, 0x03, 0x91, 0xb7, 0x49, 0x36, 0x75, 0xd7, 0xc3, 0x78, 0xd9, 0x63, 0x32, 0x31, 0xdd, 0x0d, 0x50, 0xc3, 0xa6, 0x78, 0x05, 0x05, 0x00, 0x4a, 0x2c, 0xf3, 0x47, 0x83, 0x9a, 0xa4, 0x87, 0x0d, 0x5c, 0x7c, 0xe2, 0x93, 0x41, 0xa2, 0x32, 0x97, 0x99, 0xb4, 0xf0, 0xbf, 0x3b, 0xba, 0x55, 0x70, 0xcd, 0x59, 0xbe, 0x9e, 0x3f, 0x4a, 0x55, 0xe3, 0x99, 0x0a, 0xee, 0xce, 0xf7, 0xd2, 0x2f, 0x7d, 0xd1, 0xc9, 0xf4, 0x6e, 0x80, 0x79, 0xf1, 0x92, 0xfe, 0x7f, 0x9a, 0xa3, 0xee, 0x87, 0x3f, 0xb8, 0xdc, 0x78, 0x7c, 0x17, 0xc5, 0xec, 0xd0, 0x4a, 0xda, 0xe3, 0x8c, 0x75, 0x81, 0xb8, 0xef, 0xe6, 0x9d, 0x54, 0x8f, 0xee, 0x0f, 0xa1, 0xfa, 0xef, 0x7d, 0x41, 0x9e, 0xb7, 0x51, 0x81, 0xe6, 0x0c, 0x05, 0x88, 0xa6, 0x88, 0x9f, 0xd5, 0xb9, 0xa8, 0x77, 0xe8, 0xe9, 0x1f, 0x40, 0x3e, 0x0e, 0x70, 0x46, 0x83, 0x7a, 0xbb, 0xf5, 0x04, 0x95, 0xd7, 0x9b, 0x63, 0xc5, 0xa2, 0x6f, 0x8e, 0x91, 0x95, 0xd1, 0xf1, 0x05, 0x9c, 0xd3, 0xeb, 0x58, 0x24, 0xf9, 0x7f, 0xcc, 0x75, 0x3d, 0x4d, 0xd6, 0x42, 0x56, 0xc0, 0x7f, 0x7e, 0x3a, 0x88, 0x0a, 0x72, 0xe2, 0x4b, 0xd7, 0x0d, 0x4d, 0x97, 0x87, 0x7b, 0xc7, 0x1c, 0x61, 0xf9, 0x6b, 0x18, 0xf4, 0xe7, 0xe7, 0x12, 0xfe, 0x1e, 0x7f, 0xcb, 0x8d, 0x85, 0x55, 0x72, 0x64, 0xdf, 0xe7, 0x17, 0xa0, 0xe7, 0xd9, 0x62, 0x9c, 0x9f, 0xf5, 0x85, 0x11, 0xe5, 0x70, 0x6f, 0x82, 0x47, 0x6e, 0x42, 0xd7, 0x18, 0xc9, 0x08, 0x48, 0xc3, 0x0e, 0xa2, 0x7c, 0x60, 0xc9, 0x00, 0xf2, 0x85, 0x03, 0x98, 0xa1, 0x5f, 0x08, 0x10, 0xdb, 0x01, 0x6e, 0x3e, 0x77, 0xfb, 0x52, 0x53, 0x2f, 0x2f, 0xe5, 0x53, 0x47, 0xe0, 0x28, 0xc9, 0x70, 0x0c, 0xf3, 0xb8, 0xeb, 0xfc, 0x3c, 0xd4, 0xf1, 0x19, 0x96, 0xf2, 0x53, 0x01, 0xf8, 0xbe, 0x5e, 0xda, 0xc0, 0xac, 0x01, 0xe7, 0xf7, 0x31, 0x32, 0x58, 0xd7, 0x32, 0x8d, 0x67, 0x8a, 0xbd, 0x3e, 0xa0, 0x35, 0xf7, 0x22, 0x80, 0x35, 0x55, 0x29, 0x42, 0xa9, 0x0f, 0xff, 0xf6, 0x30, 0xd2, 0xeb, 0xd3, 0xf4, 0xb6, 0xf7, 0xce, 0xe7, 0x6f, 0x51, 0x6c, 0x4c, 0xc7, 0xf1, 0xd4, 0x7a, 0x4c, 0x7c, 0x28, 0xdc, 0x45, 0x68, 0x15, 0x3d, 0xeb, 0x62, 0xa9, 0x42, 0xd6, 0xec, 0x65, 0x38, 0xb6, 0x4b, 0x94, 0x10, 0x43, 0xa0, 0xdb, 0xa8, 0x77, 0x55, 0x10, 0x4d, 0xfa, 0xba, 0x4f, 0x7d, 0xde, 0xf0, 0x4b, 0xf1, 0x8c, 0x07, 0xe3, 0xdb, 0xfe, 0x63, 0xf6, 0x6c, 0x2f, 0x64, 0x77, 0x99, 0xd0, 0x46, 0xc4, 0x1f, 0x3d, 0x45, 0x33, 0xc4, 0xaf, 0x05, 0xee, 0xe0, 0xb3, 0x32, 0x02, 0x1d, 0xdb, 0x63, 0xb2, 0x7b, 0xb3, 0x45, 0x11, 0x97, 0xf6, 0xf5, 0xd0, 0x2c, 0x02, 0xad, 0x54, 0xda, 0x8a, 0xa3, 0x0b, 0x26, 0x8b, 0x2e, 0x01, 0xc3, 0x81, 0x2b, 0xae, 0x10, 0xda, 0x9f, 0x13, 0xe1, 0xab, 0x9e, 0x05, 0x82, 0xa2, 0x6b, 0xc8, 0xf9, 0x3c, 0xe0, 0xdf, 0x8c, 0x37, 0x10, 0x23, 0x83, 0x4b, 0x2c, 0x13, 0x2f, 0x15, 0xa3, 0x6b, 0x2b, 0x54, 0x8d, 0xf8, 0xe2, 0x57, 0x4a, 0xaa, 0x51, 0xb6, 0x66, 0xeb, 0x0f, 0x41, 0xc0, 0x2f, 0x8a, 0x36, 0xec, 0xcc, 0x93, 0xb7, 0xd5, 0x0d, 0x1d, 0x7a, 0xa7, 0x81, 0x41, 0xc3, 0xec, 0x99, 0x86, 0x8f, 0xf5, 0x72, 0x60, 0x12, 0x7b, 0xf0, 0xf6, 0x64, 0x86, 0x0c, 0x28, 0x78, 0x8e, 0x6f, 0xd1, 0x4d, 0xe0, 0x3f, 0x49, 0x68, 0x44, 0x39, 0x2f, 0x81, 0xdd, 0x00, 0x65, 0x7d, 0x50, 0xb4, 0x5b, 0x9c, 0x29, 0xc7, 0x91, 0xf4, 0x7a, 0x0c, 0x57, 0x1e, 0xc4, 0x11, 0xd8, 0x2f, 0x1b, 0xaf, 0x56, 0xe9, 0x86, 0xdf, 0xb7, 0x33, 0xa5, 0xcf, 0x41, 0xc7, 0x96, 0x36, 0xa2, 0x2b, 0x18, 0xe4, 0x33, 0xe2, 0xf1, 0x9d, 0x7d, 0xe3, 0x8e, 0x27, 0xfd, 0x4a, 0xea, 0xa2, 0x24, 0x4e, 0xb1, 0x18, 0xa2, 0x73, 0xa4, 0x55, 0xe4, 0x00, 0x3f, 0xf9, 0xdb, 0xb4, 0x99, 0xcb, 0x00, 0xb5, 0x8d, 0x50, 0x95, 0xc9, 0x17, 0x9d, 0x2d, 0xc8, 0x00, 0x69, 0x6e, 0x52, 0xbe, 0x66, 0x16, 0xbd, 0x96, 0xd2, 0x3c, 0x51, 0x03, 0x48, 0xd9, 0xb8, 0x5b, 0xdd, 0x86, 0xb0, 0xb0, 0x68, 0x87, 0x03, 0xf4, 0x21, 0x09, 0xb9, 0x61, 0x6e, 0xa8, 0x8c, 0x18, 0xf9, 0x34, 0x9c, 0x09, 0x06, 0xb5, 0x64, 0x12, 0x04, 0xac, 0xed, 0x6b, 0x61, 0x9c, 0x41, 0x41, 0xa3, 0xc9, 0x23, 0xa1, 0xb5, 0x40, 0xfd, 0x98, 0x7e, 0x17, 0x1a, 0x99, 0xb8, 0xf6, 0x15, 0x1e, 0x00, 0xd7, 0x92, 0x92, 0x29, 0x09, 0x2b, 0x6f, 0xd6, 0x7b, 0xae, 0xa4, 0x48, 0x37, 0x85, 0x39, 0x74, 0x2d, 0x75, 0x35, 0x59, 0x32, 0x8c, 0xc0, 0x90, 0x48, 0x54, 0x85, 0x25, 0x20, 0x4d, 0x5a, 0xa5, 0xdd, 0x9a, 0x23, 0x78, 0x1b, 0xfb, 0xf3, 0x71, 0x30, 0xfb, 0x75, 0xa4, 0xb1, 0x6b, 0x8b, 0x78, 0x39, 0x0e, 0x34, 0xfd, 0x65, 0x96, 0xb3, 0x7f, 0x23, 0xcf, 0xee, 0x5b, 0x2d, 0x1b, 0x14, 0x11, 0xd0, 0x1e, 0x82, 0x9b, 0xf2, 0xba, 0xe8, 0xfd, 0x53, 0x3e, 0xa7, 0x1e, 0x13, 0xda, 0x7e, 0xd6, 0x75, 0x57, 0x66, 0x48, 0xe2, 0x04, 0xba, 0x72, 0x31, 0xf4, 0x9b, 0x02, 0x25, 0x66, 0x93, 0x6b, 0x37, 0x85, 0x78, 0x39, 0x96, 0x52, 0x94, 0xa1, 0x6d, 0xde, 0x02, 0x5d, 0x64, 0xbc, 0x5b, 0xb7, 0x69, 0xb6, 0x93, 0xe3, 0xb0, 0xbf, 0x1d, 0x91, 0xf8, 0x29, 0x56, 0xc3, 0x11, 0x18, 0x20, 0xdc, 0x9b, 0x37, 0xcd, 0xfa, 0x10, 0xa9, 0x40, 0x86, 0x05, 0x43, 0x4e, 0x0a, 0xac, 0xf8, 0x6a, 0x42, 0x9e, 0x94, 0x82, 0x75, 0xd7, 0xae, 0x24, 0x05, 0x02, 0xd7, 0xe5, 0x46, 0xf8, 0x18, 0x03, 0x8c, 0x83, 0x9c, 0x49, 0x88, 0x67, 0xa9, 0x33, 0xd4, 0xa3, 0xd5, 0x53, 0xcc, 0xf4, 0x76, 0xf3, 0xa0, 0x9b, 0x5a, 0xfc, 0xa7, 0x60, 0xb8, 0x17, 0xf6, 0xd7, 0x67, 0x11, 0x32, 0xe2, 0x4e, 0x84, 0xa2, 0x77, 0x1c, 0xb4, 0x88, 0xa3, 0x39, 0xb7, 0xb2, 0xcf, 0xfc, 0xd9, 0x4c, 0x43, 0x1e, 0x3e, 0xf8, 0xe8, 0x6e, 0xc9, 0x21, 0x52, 0xc7, 0x3d, 0x8b, 0xfd, 0x3f, 0xa2, 0x2f, 0xd7, 0xa2, 0xeb, 0x47, 0xff, 0x1f, 0xd5, 0xa5, 0xcd, 0x40, 0x12, 0x48, 0x12, 0x20, 0xa7, 0x31, 0xa1, 0xd8, 0x93, 0x73, 0x0e, 0x3a, 0xb1, 0x8a, 0xb5, 0xc2, 0xdf, 0xed, 0xfe, 0xc9, 0x60, 0xe7, 0xe0, 0xfc, 0x7f, 0xa2, 0xa4, 0x0d, 0x75, 0x85, 0xec, 0xa8, 0x8d, 0xbf, 0xf3, 0xa9, 0x86, 0x24, 0x16, 0x8c, 0x39, 0x39, 0x94, 0x24, 0x7c, 0x8a, 0x92, 0x90, 0x45, 0x44, 0x62, 0x6c, 0x13, 0xff, 0x04, 0x44, 0x89, 0xdc, 0xed, 0x4e, 0x5c, 0xd0, 0x08, 0x58, 0x70, 0x3f, 0xfb, 0xff, 0x3e, 0xcd, 0xab, 0x22, 0x79, 0x71, 0x02, 0x96, 0xf1, 0xcb, 0xf0, 0x1b, 0xb7, 0xb7, 0xaf, 0x8f, 0x82, 0x22, 0x4c, 0x62, 0x51, 0x1c, 0x63, 0x4a, 0x52, 0x2f, 0x2a, 0x38, 0x03, 0xef, 0xb0, 0x8a, 0x97, 0xd3, 0x67, 0x82, 0x9b, 0x43, 0xe1, 0xf7, 0xd9, 0xf2, 0xd7, 0x4a, 0x7d, 0x6e, 0x6f, 0x9c, 0x76, 0xf6, 0xbe, 0x3e, 0x1f, 0x8b, 0x8c, 0x69, 0x1f, 0x49, 0x58, 0x30, 0x8e, 0xf8, 0x9c, 0xb2, 0x59, 0xdf, 0x53, 0x94, 0xe7, 0xd8, 0xb7, 0xaf, 0xfc, 0xaa, 0x4f, 0x05, 0xde, 0x92, 0x29, 0xfa, 0xb7, 0x23, 0x65, 0xc1, 0x3b, 0x51, 0xf3, 0x14, 0x8a, 0xc8, 0x9c, 0x28, 0x58, 0x82, 0x47, 0xe0, 0x4b, 0x98, 0x75, 0x41, 0xa4, 0x58, 0x0f, 0x26, 0x22, 0x99, 0x61, 0x34, 0x23, 0x4b, 0x66, 0x11, 0x0d, 0x52, 0x46, 0xd1, 0xec, 0x95, 0x1d, 0xb1, 0x5d, 0x51, 0xfe, 0x08, 0xaa, 0xb4, 0x38, 0x7a, 0x36, 0xa7, 0xd7, 0x6f, 0x1c, 0xeb, 0x6e, 0xc3, 0x13, 0x67, 0x14, 0xc0, 0x95, 0xc0, 0xad, 0x49, 0x40, 0x2b, 0x6b, 0x57, 0x7c, 0x7f, 0x94, 0xaa, 0x5e, 0x8f, 0x85, 0xb8, 0xcc, 0xb6, 0xf7, 0xea, 0xe2, 0xb3, 0x81, 0x07, 0x95, 0xb7, 0x5e, 0xf0, 0x96, 0xbd, 0x71, 0x8f, 0x79, 0x1a, 0x86, 0x0a, 0x17, 0x55, 0xdb, 0x3c, 0x31, 0x38, 0xdf, 0x65, 0x56, 0x27, 0x39, 0x20, 0x06, 0xb1, 0x0c, 0x96, 0x17, 0x65, 0x79, 0xf2, 0x58, 0xe7, 0x66, 0x15, 0x75, 0x43, 0x7e, 0x8a, 0x1a, 0x80, 0x79, 0xbc, 0x5b, 0x79, 0x9e, 0x66, 0x54, 0xe8, 0x86, 0x4c, 0x0c, 0xc4, 0x22, 0x29, 0xa0, 0xcd, 0x00, 0xe8, 0x9d, 0x65, 0xc9, 0x16, 0xad, 0xa1, 0x0f, 0x98, 0x76, 0xa0, 0x45, 0x99, 0xbf, 0x1b, 0x0f, 0xc7, 0xd4, 0x3e, 0xbd, 0xbf, 0x2c, 0xb6, 0x11, 0xc5, 0x4a, 0x0c, 0x49, 0xb9, 0xe1, 0x31, 0x59, 0x46, 0x3b, 0x5a, 0x79, 0x5d, 0xdb, 0x0d, 0xdf, 0xe2, 0x62, 0x7c, 0xce, 0xa5, 0xaf, 0x13, 0xcf, 0x93, 0x4a, 0x4d, 0x3f, 0x2e, 0x03, 0xcb, 0x09, 0x3a, 0xd6, 0xa7, 0xb5, 0xb9, 0x12, 0x06, 0xa2, 0x1a, 0xbb, 0xec, 0x8f, 0xae, 0x2c, 0x55, 0x60, 0x5b, 0x00, 0x81, 0x1f, 0x94, 0x33, 0x8f, 0x42, 0x88, 0x85, 0x4d, 0x2c, 0x9a, 0x1f, 0x4f, 0xf6, 0x12, 0x79, 0x3e, 0x6e, 0x12, 0x7b, 0x73, 0x60, 0xcb, 0xe3, 0xc4, 0x15, 0xf0, 0xe6, 0x9e, 0x1a, 0x6b, 0x1a, 0x55, 0x42, 0x50, 0x93, 0xb7, 0xee, 0x0f, 0x4c, 0xe7, 0x8c, 0xed, 0xc9, 0x69, 0x5e, 0xb5, 0xfb, 0x79, 0x7d, 0xaa, 0x64, 0xa1, 0x1d, 0xc1, 0x7c, 0x8a, 0x12, 0x0d, 0x52, 0x13, 0x94, 0x7b, 0x76, 0xa0, 0x3f, 0xbf, 0x17, 0xb4, 0x5d, 0x8e, 0x69, 0xc3, 0x68, 0x0e, 0x49, 0x41, 0xcb, 0x8b, 0x24, 0xff, 0xe9, 0x6b, 0x15, 0xb7, 0x60, 0x64, 0x4d, 0xe6, 0x8f, 0xec, 0xb8, 0xd9, 0x56, 0xf1, 0xde, 0x0b, 0x1c, 0xcb, 0x07, 0xae, 0x17, 0x6f, 0xa2, 0x88, 0xc7, 0xe5, 0xe7, 0x00, 0xc4, 0xfc, 0xbc, 0x79, 0xba, 0x3c, 0xd5, 0xde, 0xb2, 0x1c, 0x20, 0x7e, 0x93, 0x75, 0x60, 0x1b, 0xe8, 0x37, 0x17, 0x3d, 0xe3, 0x5b, 0xaa, 0xcc, 0xa2, 0x18, 0xc0, 0xde, 0xb2, 0x5a, 0xeb, 0xce, 0xd2, 0x70, 0x8a, 0x8e, 0xf9, 0x04, 0xee, 0x3e, 0x9a, 0x51, 0xbb, 0xfd, 0x26, 0x90, 0x91, 0xff, 0xd3, 0xb3, 0xec, 0xdf, 0x9c, 0x56, 0x49, 0x37, 0x88, 0xf3, 0x8b, 0x6f, 0x30, 0x55, 0x9c, 0xd2, 0x7b, 0x4f, 0x57, 0xe7, 0xad, 0xad, 0xa6, 0xfe, 0xa0, 0x6b, 0xe7, 0x09, 0x50, 0x25, 0x95, 0xad, 0x9e, 0xcf, 0x24, 0x99, 0x4d, 0xa6, 0x2c, 0x17, 0x51, 0x66, 0xca, 0xe0, 0x49, 0xbe, 0x44, 0x35, 0x4a, 0x01, 0xeb, 0x2b, 0xde, 0x1e, 0x46, 0x47, 0x4c, 0xd2, 0x6c, 0x4a, 0x1a, 0x1c, 0xb2, 0x4e, 0xd1, 0xf2, 0x86, 0x12, 0x00, 0x32, 0x9b, 0x93, 0x83, 0xdb, 0x47, 0xdc, 0x05, 0x7d, 0x29, 0x1e, 0xc4, 0xee, 0x0e, 0x03, 0x94, 0x3f, 0x15, 0x40, 0x27, 0xee, 0x12, 0x6a, 0x8b, 0x5d, 0x31, 0x0a, 0xf4, 0x83, 0xdc, 0xf3, 0xbc, 0xe2, 0xde, 0xd3, 0xa8, 0xb9, 0xc8, 0x09, 0x6d, 0x7a, 0x93, 0xb6, 0x73, 0x7e, 0x88, 0x17, 0xd8, 0xf8, 0x5d, 0x12, 0xb8, 0x28, 0xa1, 0x0e, 0xac, 0xd1, 0x5a, 0x08, 0x90, 0xec, 0xec, 0xe3, 0x8a, 0x9e, 0x3c, 0x00, 0x47, 0x68, 0x16, 0x0f, 0x88, 0x9e, 0xcc, 0x25, 0xde, 0x1a, 0x20, 0x0e, 0xb1, 0x31, 0x64, 0xe4, 0x87, 0xe6, 0xe0, 0xe0, 0x83, 0x5e, 0x74, 0x71, 0x2c, 0x94, 0x7f, 0x8b, 0x71, 0x4e, 0xff, 0x42, 0xe9, 0x50, 0xf9, 0x97, 0x5f, 0xcf, 0x1b, 0x92, 0x8d, 0x28, 0xa0, 0x91, 0x28, 0xd2, 0x74, 0xdf, 0x1d, 0x91, 0x98, 0x88, 0x1b, 0xed, 0xc9, 0x6c, 0x51, 0xe3, 0x5c, 0x93, 0x79, 0xda, 0x6d, 0xc0, 0x15, 0xd9, 0x38, 0x49, 0xf8, 0xf6, 0xc7, 0x25, 0x09, 0x12, 0xce, 0x47, 0x44, 0xc3, 0xd3, 0x2a, 0x01, 0x92, 0x91, 0xae, 0x79, 0x67, 0x9f, 0x22, 0x86, 0x41, 0x4d, 0xa2, 0xaa, 0x2a, 0xcf, 0xa3, 0x53, 0x6b, 0x9d, 0xcc, 0x5d, 0xfc, 0x19, 0x08, 0xd9, 0x3e, 0x72, 0xd9, 0x0d, 0xec, 0xc9, 0xef, 0xbb, 0x4f, 0x93, 0xf9, 0xa7, 0xb2, 0x3f, 0xbb, 0x53, 0x16, 0x18, 0x60, 0x0d, 0x27, 0x6c, 0x12, 0x2b, 0x6e, 0xee, 0xc9, 0x96, 0xc7, 0x59, 0x60, 0x85, 0x16, 0x56, 0xee, 0x8b, 0x36, 0xa0, 0x53, 0xd4, 0x32, 0x66, 0x11, 0xac, 0xb8, 0xf1, 0x5e, 0x40, 0xca, 0x86, 0x77, 0xa9, 0xb7, 0x8e, 0x36, 0x26, 0x4a, 0xf4, 0xe7, 0xa9, 0x41, 0xcf, 0x58, 0x96, 0x00, 0x41, 0x2f, 0xc7, 0x87, 0x9e, 0x80, 0xd3, 0xa2, 0xd1, 0x9f, 0x90, 0x5f, 0xfc, 0x33, 0xd6, 0xc5, 0x5f, 0x8c, 0x86, 0xc3, 0x7b, 0x37, 0xcb, 0x67, 0x77, 0xcf, 0xa0, 0x51, 0xc2, 0x15, 0x93, 0x66, 0xfa, 0x43, 0xc8, 0xc9, 0x0d, 0x9e, 0x40, 0x07, 0x9e, 0x4b, 0x5b, 0x91, 0xaa, 0x63, 0x9c, 0x70, 0x6b, 0x4a, 0xad, 0x34, 0x7c, 0x3c, 0xa3, 0x2d, 0x3f, 0x28, 0x82, 0xde, 0x7c, 0xc2, 0x04, 0xaf, 0x4a, 0xd4, 0x96, 0xe2, 0x33, 0xd4, 0xa4, 0xc8, 0x93, 0xbc, 0x16, 0x35, 0x41, 0x16, 0x1b, 0x31, 0x71, 0x56, 0x25, 0xf0, 0xd9, 0x6d, 0x35, 0x05, 0x13, 0x9b, 0x58, 0xd2, 0x43, 0x85, 0x71, 0x43, 0xf9, 0x87, 0x3a, 0xbc, 0x59, 0x4b, 0x86, 0x4f, 0x79, 0x9b, 0xc9, 0x33, 0x0a, 0x73, 0xd9, 0x71, 0x3b, 0x5b, 0xf6, 0xe1, 0xda, 0xf3, 0x09, 0x55, 0xbc, 0xd0, 0x29, 0x14, 0x60, 0x86, 0x63, 0x8a, 0xcf, 0x06, 0xbb, 0x3d, 0xc6, 0x2b, 0x6e, 0x03, 0x17, 0x8f, 0x7a, 0x73, 0x4d, 0xa3, 0x60, 0x99, 0x8f, 0xff, 0x29, 0xee, 0xc7, 0xf6, 0xa7, 0x86, 0x03, 0x6e, 0xfd, 0x8c, 0x1b, 0xee, 0x62, 0xec, 0x94, 0xf9, 0x21, 0x4f, 0xc4, 0x9b, 0xe4, 0x4c, 0x37, 0x41, 0x33, 0xdc, 0x52, 0xce, 0x38, 0x0f, 0x36, 0xea, 0xc5, 0xfe, 0xe7, 0x9d, 0x98, 0x01, 0xae, 0x1e, 0xdd, 0x22, 0xbb, 0xe5, 0xf4, 0xd1, 0x0f, 0x07, 0x75, 0xd9, 0x99, 0xc3, 0x71, 0x92, 0x9f, 0x58, 0xfb, 0x58, 0x60, 0x1a, 0xe7, 0x3d, 0xf8, 0xc5, 0xd2, 0xfb, 0x83, 0x11, 0x63, 0x2d, 0x85, 0x87, 0xcf, 0xbe, 0x8a, 0x92, 0xa3, 0xa1, 0x09, 0xd9, 0xbe, 0xc2, 0x8e, 0xcc, 0x9c, 0x3d, 0x18, 0x7d, 0xdb, 0xcf, 0xc0, 0xb2, 0xf7, 0x89, 0x9c, 0x38, 0x59, 0xcc, 0xe3, 0x7a, 0x90, 0x71, 0x52, 0x52, 0xde, 0x48, 0xce, 0x1e, 0xf6, 0xc4, 0x4a, 0x17, 0x04, 0xf4, 0xeb, 0xde, 0xee, 0xb5, 0x6a, 0x58, 0xd9, 0x27, 0xbb, 0xbc, 0xf0, 0x5d, 0xec, 0xea, 0x60, 0x59, 0x4f, 0xff, 0xa7, 0x37, 0xdb, 0x26, 0x0f, 0xa8, 0xd0, 0xb1, 0x75, 0xa2, 0x9a, 0x68, 0x4f, 0x56, 0xf8, 0x20, 0xee, 0x63, 0x5d, 0x90, 0x00, 0x49, 0x97, 0x61, 0x58, 0x20, 0xae, 0x84, 0xf2, 0x8a, 0x0f, 0xc8, 0x31, 0xe6, 0xe9, 0xac, 0x6c, 0xc6, 0xd8, 0x71, 0xa9, 0xa3, 0xc1, 0x74, 0xa8, 0xd0, 0xfd, 0xbb, 0x24, 0xad, 0xb9, 0xce, 0x55, 0x1d, 0x9c, 0xc8, 0xb9, 0x3a, 0xab, 0xad, 0x14, 0x47, 0x6a, 0xfe, 0xb6, 0xe5, 0x44, 0x8b, 0xfc, 0x8a, 0x2d, 0x89, 0x19, 0x30, 0x86, 0xe4, 0x16, 0x4a, 0x41, 0xd7, 0x18, 0xfc, 0x45, 0xb9, 0xe2, 0x8b, 0x14, 0x1a, 0x9a, 0x13, 0xab, 0x0e, 0xd0, 0x78, 0xaa, 0xc9, 0xbc, 0x9e, 0xb4, 0x6c, 0xc7, 0xdd, 0x19, 0x1f, 0x4e, 0xaf, 0xb2, 0x60, 0xa2, 0xac, 0x0d, 0x9a, 0x53, 0xb9, 0xca, 0xfa, 0xae, 0x7c, 0x45, 0x7e, 0x84, 0x13, 0x76, 0x4f, 0x2d, 0x05, 0x15, 0x50, 0xcd, 0x78, 0x01, 0xf7, 0xd6, 0xa5, 0xe2, 0x5c, 0xce, 0x8a, 0x0d, 0x8f, 0x53, 0xde, 0xa9, 0x2f, 0x5c, 0x4a, 0x10, 0x38, 0xc1, 0xd6, 0x78, 0x1d, 0xfe, 0xa2, 0xd3, 0x17, 0x34, 0xd6, 0xf4, 0xbc, 0x70, 0xdb, 0xf2, 0xd3, 0x30, 0xcc, 0xd1, 0x67, 0x23, 0x27, 0x5f, 0x1a, 0x31, 0xc9, 0x5d, 0xbc, 0xbb, 0x19, 0xdf, 0x1c, 0x24, 0x83, 0xf6, 0x1e, 0x90, 0x28, 0x8b, 0x0e, 0xeb, 0xd3, 0x8e, 0x34, 0x2e, 0x2f, 0x51, 0xa9, 0xdd, 0x38, 0x2e, 0x69, 0xd4, 0xf0, 0x70, 0xa8, 0x44, 0x53, 0x71, 0x6a, 0xf9, 0x8c, 0xff, 0x4e, 0xde, 0x69, 0x04, 0xaa, 0xc2, 0x0d, 0x66, 0xdd, 0x5c, 0xe5, 0x2d, 0xe1, 0x8d, 0xdd, 0xe4, 0x20, 0xe6, 0xd3, 0x41, 0x89, 0x6a, 0x4b, 0x08, 0xe2, 0x95, 0x65, 0x2c, 0x60, 0x9d, 0x0d, 0x37, 0x75, 0xf7, 0x72, 0xed, 0xe9, 0x1d, 0xb9, 0x2c, 0x2c, 0x8f, 0xf2, 0x17, 0xeb, 0x17, 0x4b, 0x74, 0xe1, 0x52, 0x83, 0x51, 0xf0, 0x6c, 0xa2, 0xee, 0x70, 0x2b, 0xe8, 0xd7, 0xc7, 0x2f, 0x03, 0x51, 0x39, 0x78, 0x85, 0xf7, 0x02, 0x28, 0x94, 0xa5, 0xa2, 0x8a, 0xe3, 0x95, 0x79, 0x54, 0xe2, 0xc8, 0x93, 0x29, 0x32, 0xa8, 0xc5, 0x62, 0x5c, 0xeb, 0xf9, 0x0e, 0xc2, 0xba, 0xc6, 0x37, 0xd6, 0x13, 0x44, 0x68, 0x89, 0x6c, 0x1e, 0x6b, 0x07, 0x99, 0xe8, 0x57, 0xa1, 0xef, 0xb3, 0xcb, 0x0a, 0xaa, 0xdf, 0x74, 0xc7, 0x8c, 0x31, 0xd5, 0xe1, 0xc7, 0x25, 0x47, 0xdd, 0x1d, 0x86, 0x3e, 0xed, 0x46, 0x3b, 0xcf, 0x68, 0x92, 0x64, 0x6f, 0x78, 0xcf, 0xa6, 0xfe, 0x13, 0x6d, 0xc2, 0x04, 0x2c, 0xe0, 0x6d, 0x3a, 0x2a, 0x46, 0x5c, 0x4c, 0x99, 0x4a, 0x9e, 0xdd, 0x1f, 0x48, 0x2e, 0xcb, 0xb2, 0xb2, 0xc9, 0xb5, 0x09, 0xb2, 0xfd, 0xbb, 0x50, 0x10, 0x83, 0x85, 0x20, 0x57, 0xce, 0x87, 0xae, 0x33, 0xe4, 0x83, 0x43, 0x1e, 0x6d, 0x4f, 0xec, 0x3b, 0x09, 0xd8, 0x72, 0x82, 0xe7, 0x67, 0x8c, 0x1e, 0x94, 0x23, 0x54, 0x13, 0x10, 0xd8, 0xf8, 0x24, 0x27, 0xf6, 0xb2, 0xf4, 0xfe, 0xdd, 0xfa, 0x6b, 0xed, 0x57, 0xfa, 0x5b, 0x8c, 0x66, 0x42, 0x64, 0x11, 0x41, 0xbd, 0x15, 0xd9, 0x99, 0xe3, 0x53, 0x44, 0x20, 0x31, 0xff, 0xc6, 0x4c, 0xd6, 0xd3, 0x3b, 0x58, 0xb0, 0x8d, 0x7b, 0x8d, 0x76, 0x50, 0x2f, 0xbf, 0x37, 0x47, 0xe3, 0x1a, 0x03, 0x8b, 0x5c, 0x1f, 0xe8, 0x47, 0x2b, 0xe9, 0x20, 0x1a, 0x82, 0xb5, 0x88, 0xbc, 0x47, 0xa1, 0x54, 0xe5, 0x67, 0xb4, 0x01, 0x6a, 0x6d, 0x1f, 0x8c, 0xa9, 0x53, 0xc2, 0xe2, 0x28, 0x97, 0xf2, 0x97, 0x79, 0x92, 0x7a, 0xda, 0x61, 0x06, 0xdf, 0xa9, 0x39, 0xf6, 0xe9, 0x41, 0x93, 0xba, 0x5e, 0xd9, 0x21, 0x52, 0x11, 0x8f, 0xd3, 0xfb, 0x1b, 0xa3, 0x40, 0x00, 0x69, 0xe3, 0x47, 0xd3, 0x77, 0x66, 0xf6, 0x5c, 0x5a, 0x7d, 0xaa, 0x91, 0x04, 0xe7, 0x78, 0x47, 0xc4, 0x44, 0xcc, 0x47, 0x0c, 0xcc, 0x50, 0xa5, 0x77, 0x41, 0x10, 0x4d, 0x0a, 0x22, 0xdb, 0xdf, 0xbb, 0x22, 0xec, 0xbd, 0x2f, 0xd9, 0xca, 0x62, 0xc8, 0xb8, 0x6c, 0xf5, 0xdf, 0x42, 0xa1, 0x1d, 0x4e, 0x79, 0xaf, 0x18, 0x32, 0x97, 0x3a, 0x07, 0xef, 0xff, 0x68, 0x8c, 0x74, 0x73, 0x43, 0x97, 0xc0, 0x87, 0x5f, 0x7d, 0xa4, 0x56, 0xbc, 0x4b, 0xcb, 0x73, 0xed, 0x59, 0xf9, 0x23, 0x7a, 0x22, 0x90, 0xc9, 0x84, 0x52, 0x58, 0xa1, 0xa7, 0x21, 0x7f, 0xb1, 0x25, 0xe0, 0xdf, 0xfd, 0x40, 0xd1, 0x80, 0xfb, 0xe7, 0x3c, 0x5e, 0x46, 0x95, 0xbf, 0x6c, 0x96, 0x77, 0xe6, 0xd8, 0xf0, 0xcd, 0xfc, 0x91, 0x1a, 0x92, 0x20, 0x07, 0x52, 0x5f, 0x9b, 0x32, 0x3f, 0x8d, 0x70, 0xd5, 0x28, 0x9a, 0x35, 0x04, 0x64, 0xcd, 0x22, 0xe4, 0x12, 0x1d, 0x68, 0xb2, 0x0a, 0x50, 0xc3, 0x06, 0x13, 0x60, 0x53, 0x59, 0x56, 0x22, 0xa8, 0xc5, 0x12, 0x29, 0x1c, 0x0d, 0x92, 0xe9, 0x65, 0xdd, 0x5c, 0x18, 0x6a, 0x53, 0xac, 0x5a, 0x56, 0xbd, 0x20, 0x1c, 0xeb, 0xa5, 0xb5, 0xc0, 0x1a, 0x0b, 0xf2, 0xfb, 0xd0, 0xf1, 0x63, 0x7c, 0x12, 0x1d, 0x49, 0xcf, 0x4c, 0x1a, 0x90, 0x80, 0xe6, 0x80, 0x01, 0x83, 0x19, 0x75, 0xb9, 0xd3, 0x01, 0x74, 0xda, 0x5a, 0xf3, 0x4d, 0x80, 0x11, 0x10, 0x6d, 0xf7, 0x68, 0x1a, 0x60, 0x2b, 0xe8, 0x87, 0x94, 0x5f, 0x17, 0xd4, 0x60, 0x22, 0x9c, 0x1c, 0x44, 0x7f, 0xa3, 0xe9, 0x73, 0x75, 0x83, 0x4a, 0x8e, 0xa7, 0x9e, 0x26, 0xb3, 0x53, 0x89, 0xcf, 0xb6, 0x88, 0x6e, 0xda, 0xae, 0x94, 0xae, 0x2f, 0xb4, 0xbc, 0xca, 0x5c, 0xe7, 0x31, 0x83, 0x2f, 0xb4, 0x3f, 0x40, 0x83, 0x54, 0xc6, 0xb1, 0x5a, 0x95, 0xee, 0xb2, 0x2c, 0xde, 0x17, 0x72, 0x7f, 0x6d, 0x0f, 0xd4, 0xb8, 0xe4, 0x88, 0x15, 0x31, 0x04, 0xc9, 0xb0, 0x8b, 0xb8, 0xa3, 0x7e, 0x46, 0x55, 0xa7, 0x22, 0x8e, 0x20, 0x96, 0xa4, 0x58, 0x11, 0x19, 0x5c, 0xae, 0xd6, 0xb2, 0x12, 0x47, 0x1b, 0xf3, 0x63, 0x5b, 0x09, 0xee, 0x66, 0xb5, 0x0c, 0xec, 0x90, 0x0a, 0xda, 0x62, 0xd5, 0x89, 0xb1, 0x20, 0x10, 0xb3, 0xdf, 0xcc, 0xa5, 0x6d, 0x88, 0x8f, 0x65, 0x54, 0xa4, 0x0e, 0xb2, 0x50, 0x47, 0x9c, 0xe3, 0x6c, 0x25, 0xad, 0xea, 0xe5, 0x55, 0x8e, 0x33, 0x80, 0x55, 0x54, 0xd0, 0x21, 0x4f, 0x13, 0xd4, 0x9a, 0x9a, 0x50, 0xfc, 0xc1, 0x84, 0xb8, 0x95, 0xc5, 0x4f, 0x12, 0x99, 0xc2, 0x79, 0x72, 0x1c, 0x92, 0x41, 0xaf, 0xe6, 0xe7, 0x66, 0x18, 0x62, 0x96, 0x32, 0x63, 0xb7, 0x36, 0xb7, 0xe6, 0x34, 0xea, 0x59, 0x0a, 0xf1, 0x7b, 0x8c, 0xfc, 0xb3, 0xaa, 0xdf, 0xa5, 0x11, 0xc4, 0x3a, 0xdd, 0xd5, 0x76, 0x63, 0xdb, 0xa5, 0xe3, 0xc7, 0xf0, 0xe3, 0xf4, 0x78, 0x76, 0xd1, 0xef, 0x72, 0x03, 0xf9, 0x4c, 0x22, 0xe2, 0xcc, 0xc4, 0x29, 0xc3, 0x89, 0xaa, 0x5d, 0xb1, 0x60, 0x7e, 0x10, 0x45, 0xd8, 0xc0, 0x96, 0x19, 0x6e, 0x02, 0x01, 0x80, 0x7e, 0x41, 0x2f, 0x74, 0x67, 0x75, 0x07, 0xd0, 0xeb, 0x67, 0xff, 0xc0, 0xd4, 0xc3, 0xe1, 0x75, 0xdd, 0x6e, 0xd0, 0x1d, 0xcf, 0x19, 0x86, 0x12, 0xeb, 0x17, 0xdf, 0x51, 0x88, 0x6b, 0x9b, 0x2f, 0xfd, 0x26, 0x5f, 0x47, 0xc1, 0xf0, 0xfe, 0xb7, 0xd1, 0xe4, 0xf7, 0x8c, 0x52, 0xa1, 0x3f, 0x7a, 0x78, 0x9d, 0x40, 0xd1, 0xa6, 0xbd, 0x21, 0xac, 0xd7, 0x23, 0x48, 0x6b, 0x3c, 0x48, 0x1d, 0x64, 0x26, 0x4a, 0x11, 0xd6, 0x27, 0x87, 0xe0, 0x1e, 0x74, 0x6a, 0x12, 0x2e, 0x8e, 0x85, 0xc8, 0x3a, 0x22, 0xe0, 0xb5, 0xb4, 0x2d, 0x91, 0x6b, 0x7b, 0x63, 0x8d, 0xd8, 0x50, 0xd2, 0xbe, 0x10, 0x89, 0xc3, 0x56, 0x4d, 0x09, 0xe1, 0x62, 0x33, 0x6f, 0x9d, 0xa2, 0x59, 0x8e, 0xd0, 0x98, 0x06, 0x1e, 0xa2, 0xdf, 0x38, 0xb0, 0xac, 0xbe, 0xeb, 0xe8, 0x59, 0xfd, 0x97, 0xe6, 0x92, 0xf7, 0xfb, 0x05, 0x9a, 0xf1, 0x19, 0xc8, 0x36, 0xaa, 0x82, 0x11, 0x12, 0x33, 0xd3, 0x94, 0x60, 0x01, 0x80, 0x8c, 0xc2, 0x41, 0xd0, 0xac, 0x6a, 0x6b, 0x29, 0x59, 0x7f, 0x1a, 0x8e, 0x16, 0xc3, 0x1b, 0x66, 0x40, 0x74, 0xc4, 0x7f, 0xfb, 0x70, 0x87, 0x52, 0x6c, 0x9c, 0xc7, 0x89, 0x29, 0x85, 0xe9, 0xbe, 0xed, 0x48, 0xaf, 0x86, 0x91, 0xb0, 0xc1, 0xae, 0x37, 0x9f, 0x8d, 0xc4, 0xc9, 0xaf, 0x51, 0xd9, 0xa2, 0x18, 0x76, 0x86, 0x8a, 0xd5, 0x20, 0x2d, 0xe8, 0x02, 0x03, 0x81, 0x33, 0x89, 0x78, 0x49, 0xaa, 0xfd, 0xd0, 0x61, 0x45, 0xc6, 0xe8, 0x01, 0xeb, 0x7f, 0xfd, 0x41, 0xe5, 0x9c, 0xc2, 0xdd, 0x93, 0x50, 0xb0, 0x36, 0x5d, 0xae, 0x9e, 0x9a, 0xed, 0x0e, 0x91, 0xc5, 0x9b, 0xb2, 0xd5, 0xa8, 0x29, 0xa9, 0x4d, 0x69, 0xb1, 0xf4, 0x07, 0xaa, 0xdb, 0xe8, 0x13, 0x0e, 0x53, 0xd3, 0x96, 0xf9, 0x7b, 0xe2, 0x1a, 0x98, 0x5d, 0x42, 0x28, 0x22, 0xe3, 0x86, 0x19, 0x5d, 0x4a, 0x49, 0x29, 0x63, 0xd4, 0x14, 0xcd, 0xa6, 0xbd, 0x82, 0x47, 0x32, 0x71, 0xa1, 0x77, 0x32, 0xfc, 0x9c, 0xf4, 0xb6, 0xc2, 0x97, 0x5b, 0xb3, 0x70, 0xdb, 0xe7, 0x4b, 0x32, 0x33, 0x42, 0x4f, 0x27, 0x95, 0x9b, 0x03, 0x12, 0x05, 0xf9, 0x21, 0x52, 0xb7, 0xcf, 0x20, 0x14, 0x74, 0xd0, 0xb5, 0xc7, 0x3e, 0x04, 0x9b, 0xd0, 0x37, 0x1c, 0x90, 0x7f, 0xbf, 0x03, 0xa0, 0x42, 0xdd, 0xb5, 0xa5, 0x19, 0xe0, 0x54, 0x0f, 0x4a, 0x46, 0x79, 0xe1, 0x56, 0xdc, 0xc8, 0xfc, 0x2b, 0x27, 0xc7, 0xa0, 0x9b, 0x03, 0xf0, 0x30, 0x0d, 0x8a, 0x04, 0x35, 0x73, 0x37, 0xa3, 0xa6, 0x7c, 0x4b, 0x1a, 0x67, 0x0a, 0x70, 0x7c, 0x0f, 0xe6, 0x9d, 0xf4, 0xee, 0xb3, 0x39, 0x59, 0x4f, 0x20, 0x83, 0x03, 0xfa, 0x62, 0x31, 0xdd, 0xfd, 0xe2, 0x57, 0xbc, 0xac, 0x32, 0x8b, 0xef, 0xe7, 0x46, 0x47, 0x18, 0x9b, 0xe1, 0x8f, 0x3a, 0x8b, 0x4d, 0xd3, 0x12, 0x51, 0x4f, 0x16, 0xab, 0x9f, 0x5a, 0x50, 0x2d, 0xcb, 0x03, 0x11, 0xf5, 0x8b, 0xb5, 0x68, 0xeb, 0xfd, 0xa6, 0x03, 0x10, 0xea, 0x09, 0x97, 0x57, 0x4b, 0x86, 0x83, 0xb6, 0x0c, 0xe7, 0xb0, 0x7c, 0x11, 0x14, 0xbb, 0xe5, 0x77, 0x41, 0x56, 0xec, 0x1c, 0x66, 0xeb, 0x60, 0x61, 0xef, 0x83, 0x3a, 0x2e, 0xb5, 0xe7, 0x2e, 0x37, 0x2e, 0x04, 0x80, 0x7e, 0xe0, 0x94, 0x19, 0x19, 0x1c, 0xfb, 0xda, 0x36, 0xe8, 0x6f, 0x30, 0x5c, 0x3d, 0x5c, 0xe9, 0xf4, 0x73, 0x07, 0x46, 0x07, 0xf9, 0x71, 0x51, 0x49, 0x49, 0x7e, 0x70, 0x57, 0x1b, 0x56, 0x3b, 0x3d, 0xd9, 0x0c, 0x8b, 0x3b, 0x54, 0x7e, 0xd3, 0xc9, 0xb5, 0x7c, 0xb4, 0xd8, 0xb6, 0x2c, 0xcb, 0x5b, 0x12, 0xac, 0xce, 0x06, 0x39, 0xfa, 0xd7, 0x55, 0x49, 0x11, 0xff, 0xd1, 0x3a, 0x55, 0x2f, 0x8f, 0x58, 0x31, 0x33, 0xf9, 0xf7, 0xff, 0x10, 0xd0, 0x62, 0x28, 0x98, 0x72, 0x14, 0x8c, 0x3b, 0x59, 0x2b, 0x24, 0x20, 0xe5, 0x19, 0xe5, 0x75, 0x5b, 0x9d, 0xe8, 0x03, 0x2d, 0xf2, 0xc9, 0x05, 0x7c, 0x46, 0x4d, 0x3a, 0xdb, 0x6d, 0x47, 0x39, 0x56, 0xd7, 0xbc, 0x05, 0xb3, 0xbf, 0x45, 0xe1, 0xf7, 0xa6, 0xb5, 0x65, 0x2c, 0x00, 0xfc, 0xd2, 0x62, 0x2d, 0x4b, 0xa3, 0xf4, 0xaa, 0x79, 0x64, 0x0c, 0x89, 0xa6, 0xc7, 0x69, 0x1e, 0x1e, 0xf5, 0x60, 0xfc, 0x7f, 0x22, 0x21, 0x20, 0x1f, 0x64, 0x3c, 0x6b, 0xa8, 0xc5, 0x64, 0x56, 0x05, 0x97, 0x72, 0xe1, 0x82, 0x07, 0xad, 0xcc, 0x2e, 0xf5, 0x48, 0x0a, 0x84, 0x03, 0x2c, 0x73, 0x4b, 0xec, 0xf8, 0xb9, 0xbb, 0x18, 0x46, 0x9d, 0xe1, 0x6d, 0x31, 0x62, 0x45, 0x67, 0x14, 0x82, 0xc9, 0x6b, 0x93, 0xa1, 0xd4, 0x58, 0xe0, 0xbf, 0xb0, 0x60, 0x37, 0xb1, 0x31, 0x16, 0xab, 0xd2, 0x98, 0xc7, 0x25, 0xf6, 0xb6, 0x0e, 0xaa, 0x9f, 0x55, 0xa3, 0xdc, 0x74, 0xd3, 0x74, 0xc4, 0xee, 0x10, 0xf7, 0xce, 0x55, 0x8b, 0xbe, 0x15, 0xeb, 0xc7, 0x4c, 0xe1, 0x67, 0xf4, 0x27, 0x6e, 0xa4, 0xcb, 0x2e, 0xf0, 0x9b, 0xba, 0x2d, 0xd3, 0x8f, 0x41, 0xaf, 0x47, 0x87, 0x9c, 0x13, 0xfc, 0x01, 0xa2, 0xe2, 0x2a, 0xe5, 0xed, 0x60, 0xd5, 0xb8, 0x3b, 0x61, 0x4f, 0x12, 0x14, 0x5e, 0xfe, 0x52, 0xad, 0xc8, 0x5f, 0x90, 0x0d, 0x9c, 0x4b, 0xd3, 0x6e, 0x38, 0x7a, 0x84, 0xe6, 0x6d, 0x45, 0x23, 0x46, 0xd5, 0xb0, 0x39, 0x43, 0x67, 0xa7, 0x8e, 0xd3, 0x48, 0x88, 0x9b, 0xda, 0xe4, 0xe2, 0x42, 0x06, 0x3e, 0x7d, 0xbd, 0xf7, 0x84, 0x9a, 0xd5, 0xa4, 0xe7, 0x7b, 0x54, 0xfa, 0xaa, 0x26, 0xbc, 0xc6, 0x78, 0x67, 0x39, 0xd4, 0xfa, 0x14, 0xd5, 0x58, 0xa9, 0x94, 0xeb, 0x8e, 0xe1, 0xa2, 0xde, 0x9e, 0x37, 0x4f, 0x0a, 0xc2, 0x0d, 0x46, 0xfb, 0xaa, 0x64, 0x54, 0xdd, 0x20, 0xf1, 0x28, 0x34, 0xe8, 0x72, 0x57, 0xce, 0xea, 0x42, 0xa3, 0xf5, 0x93, 0x2b, 0x7c, 0xe9, 0x78, 0x7c, 0xc7, 0x8d, 0x3c, 0x5c, 0xdf, 0x60, 0xb4, 0x5e, 0xd9, 0xaf, 0x4a, 0x56, 0x0d, 0x09, 0x9f, 0x6a, 0xd1, 0xf4, 0x75, 0x6c, 0x88, 0xde, 0xcb, 0x67, 0xdc, 0x56, 0x49, 0x77, 0x47, 0x7c, 0xdf, 0xde, 0xd8, 0xb6, 0xaa, 0x55, 0x34, 0xa5, 0x17, 0xa0, 0xdb, 0x58, 0x4a, 0x65, 0xac, 0xbf, 0xc1, 0x3e, 0xac, 0x62, 0x34, 0x0d, 0x03, 0x52, 0xc0, 0x90, 0x47, 0x60, 0x45, 0x35, 0xfd, 0x8e, 0x0d, 0x2f, 0x5d, 0xc3, 0xae, 0xc9, 0x56, 0xc3, 0x31, 0xfa, 0xd2, 0x5d, 0x73, 0x3a, 0x3b, 0xe7, 0xcc, 0x95, 0x3e, 0xe7, 0xef, 0xfe, 0xcf, 0x13, 0x11, 0xe5, 0x6d, 0x7c, 0x4e, 0x0c, 0xa7, 0x06, 0x48, 0x96, 0xdf, 0x1b, 0x11, 0x61, 0x4e, 0xa0, 0x4b, 0x95, 0x48, 0x28, 0x8d, 0x7d, 0xc1, 0x68, 0x09, 0x96, 0x11, 0xec, 0x6c, 0xe6, 0xf4, 0x08, 0x06, 0x8f, 0xd5, 0x10, 0x2b, 0xa4, 0x4c, 0xcb, 0xd9, 0x3b, 0xe5, 0x26, 0x9a, 0xc4, 0x23, 0x26, 0xac, 0x99, 0xc4, 0x20, 0x60, 0xd6, 0x47, 0x2c, 0xc0, 0x6a, 0xac, 0xd7, 0x74, 0x6e, 0x7b, 0x18, 0xe7, 0xb6, 0x07, 0x86, 0xa5, 0xa6, 0xf4, 0xc7, 0x08, 0x47, 0xf7, 0x4c, 0x13, 0x9a, 0xdd, 0x3b, 0x9e, 0x2d, 0xcf, 0xad, 0xb3, 0xeb, 0xd4, 0x1a, 0x39, 0x38, 0x97, 0x11, 0xcf, 0x3e, 0x6b, 0x2d, 0xfb, 0x81, 0x8c, 0x44, 0x84, 0xba, 0xa7, 0xe1, 0x1c, 0xe2, 0x9d, 0xf5, 0x42, 0x8d, 0x85, 0xc9, 0x67, 0x79, 0xf0, 0x37, 0x50, 0x67, 0x70, 0x1a, 0xbb, 0x29, 0x5b, 0x03, 0x45, 0xfd, 0xcc, 0x2e, 0x8b, 0x19, 0xeb, 0xb4, 0x90, 0x87, 0x6e, 0x01, 0x5f, 0x33, 0x60, 0x89, 0xf1, 0x43, 0x21, 0xb7, 0x50, 0xa6, 0xaf, 0x26, 0xfd, 0xf0, 0x23, 0x14, 0x8f, 0x65, 0x7f, 0x14, 0x9e, 0x53, 0xa6, 0x02, 0xdf, 0xa6, 0xac, 0x3c, 0x90, 0xb6, 0x50, 0x0f, 0x17, 0x63, 0xc7, 0x70, 0xe6, 0x64, 0xbc, 0xed, 0xa1, 0xdc, 0x94, 0xe3, 0x83, 0x2e, 0xf6, 0xf0, 0xfe, 0x13, 0x8b, 0xab, 0xa1, 0xea, 0x02, 0x93, 0x3f, 0x4f, 0x58, 0x46, 0x4e, 0xee, 0x56, 0xf4, 0x8d, 0x99, 0x5b, 0x12, 0xea, 0x99, 0x5b, 0x53, 0xa2, 0x42, 0x28, 0xd4, 0xaa, 0xcb, 0xf0, 0x96, 0x4e, 0x5c, 0x07, 0x32, 0x18, 0x67, 0xe7, 0xc8, 0xf3, 0x3c, 0x76, 0x39, 0x90, 0xd8, 0x87, 0x96, 0x09, 0xfe, 0xa2, 0xd8, 0xc4, 0x8a, 0x08, 0xd1, 0x9b, 0x01, 0xf2, 0x62, 0x39, 0x6c, 0x1a, 0xef, 0xc7, 0x67, 0x7c, 0x10, 0xc9, 0x75, 0x5e, 0x89, 0x42, 0x96, 0x8e, 0x7d, 0x1f, 0x1c, 0xeb, 0xde, 0xd2, 0xba, 0x26, 0x28, 0x3e, 0xde, 0xca, 0x4f, 0xd3, 0x40, 0x7a, 0xf5, 0xfa, 0xbb, 0x7a, 0xe1, 0xb3, 0x5d, 0x72, 0xad, 0x7c, 0xba, 0x6e, 0xbe, 0x76, 0x85, 0x28, 0x7a, 0xc3, 0x61, 0x8a, 0xb4, 0x32, 0xf4, 0x6f, 0x6b, 0x1e, 0x3d, 0xaa, 0xb5, 0x93, 0x28, 0x49, 0xf6, 0xb3, 0x60, 0x1b, 0x55, 0x58, 0x65, 0x6f, 0x71, 0xfb, 0xde, 0x1f, 0x4f, 0xd5, 0x30, 0xcd, 0x98, 0x43, 0x4f, 0x6d, 0x01, 0x6f, 0xd5, 0x03, 0x0a, 0x2d, 0x51, 0xae, 0xeb, 0x23, 0xe1, 0xe6, 0xcb, 0x2d, 0x03, 0x02, 0x34, 0x00, 0xa8, 0xfd, 0xc4, 0x0d, 0x8a, 0x79, 0x25, 0xa8, 0xc0, 0x04, 0x3f, 0x69, 0x8f, 0x9b, 0xab, 0xd2, 0x84, 0x6c, 0x6b, 0x33, 0xbf, 0xe0, 0xd9, 0xcb, 0x92, 0xd9, 0xde, 0x30, 0x4b, 0x39, 0x64, 0xf1, 0x4d, 0xa3, 0x0e, 0x79, 0x66, 0x85, 0x26, 0x36, 0x5c, 0x56, 0xd7, 0xfb, 0xc9, 0x1c, 0x9c, 0xa3, 0x29, 0x32, 0xf8, 0xf8, 0x32, 0x48, 0x68, 0xd3, 0x64, 0xab, 0x96, 0x84, 0xe0, 0xc7, 0xcf, 0x73, 0x7d, 0xea, 0xb7, 0x08, 0x19, 0x4a, 0x3b, 0xc9, 0x2d, 0x4a, 0xc8, 0xc2, 0xa4, 0xf9, 0xba, 0x2a, 0xee, 0xdb, 0x18, 0x43, 0x50, 0xed, 0x7e, 0x82, 0x7e, 0xe3, 0x5a, 0xf0, 0x6b, 0xb4, 0x5b, 0xd0, 0x60, 0x58, 0x27, 0x82, 0x4c, 0xd0, 0x4d, 0xa7, 0x5b, 0x68, 0x7a, 0x86, 0xc9, 0x39, 0xef, 0xaf, 0xf9, 0xf1, 0x32, 0xdd, 0xc1, 0xd7, 0x04, 0x21, 0x08, 0x09, 0x94, 0x3d, 0x94, 0x08, 0xf2, 0x4e, 0x1d, 0x77, 0xc6, 0xaf, 0xa6, 0x20, 0x42, 0x19, 0x0d, 0x38, 0x55, 0x0f, 0xe0, 0xe4, 0x22, 0x79, 0x72, 0xfc, 0xb0, 0x8f, 0x2e, 0x0e, 0xe3, 0xf8, 0x2c, 0xa6, 0xab, 0x33, 0x02, 0xcc, 0x7b, 0x37, 0xdd, 0xcf, 0xfd, 0x56, 0xd0, 0x41, 0x04, 0x67, 0x6b, 0x43, 0xc2, 0x24, 0x90, 0x03, 0x3b, 0xd1, 0x82, 0x82, 0xf9, 0x1f, 0x3f, 0x9b, 0x01, 0x4f, 0x10, 0x41, 0x07, 0x9a, 0x5e, 0x08, 0xde, 0xd1, 0xc7, 0xe6, 0x32, 0x41, 0x71, 0x3b, 0x79, 0xd9, 0x9e, 0x10, 0x27, 0x8f, 0x81, 0x9c, 0x21, 0xff, 0x51, 0x0d, 0x75, 0x55, 0x9b, 0x85, 0x48, 0x6e, 0xdc, 0x62, 0x10, 0x3a, 0x4f, 0xc2, 0x03, 0x65, 0x04, 0x46, 0xce, 0x36, 0x32, 0x17, 0x8b, 0xb7, 0xce, 0x27, 0xed, 0x16, 0x5c, 0xba, 0xbe, 0x4b, 0x06, 0x24, 0x8c, 0xfb, 0xeb, 0xd4, 0x9f, 0x9c, 0xb9, 0x91, 0x2e, 0xdb, 0x7e, 0x04, 0xd2, 0x3a, 0xbb, 0x77, 0x3a, 0xfe, 0xbb, 0xdc, 0x21, 0x48, 0x22, 0x11, 0x7d, 0x82, 0xc9, 0x62, 0xf9, 0xfc, 0xc9, 0x50, 0xa6, 0xd7, 0xd6, 0x90, 0xed, 0x23, 0xcf, 0x57, 0xc9, 0x44, 0x92, 0xd5, 0x33, 0x9a, 0x15, 0xff, 0xdd, 0x61, 0xb3, 0x92, 0x22, 0xd5, 0xc3, 0x55, 0x3d, 0x9a, 0x6f, 0x9e, 0xba, 0x5c, 0xc4, 0x17, 0x2b, 0xb3, 0x05, 0xc2, 0x1c, 0x49, 0x45, 0x3b, 0x49, 0x3e, 0x34, 0x3e, 0x0e, 0xcb, 0x3a, 0x68, 0x1e, 0x26, 0xc2, 0x42, 0x78, 0xa6, 0xd9, 0x7b, 0x97, 0x28, 0xf7, 0x75, 0xe9, 0xb1, 0x1c, 0x04, 0x83, 0x55, 0x1f, 0x72, 0x13, 0x57, 0x43, 0xc6, 0x16, 0x91, 0x0c, 0x45, 0x4b, 0x16, 0x51, 0x3a, 0x67, 0x17, 0x91, 0xf3, 0x0a, 0x03, 0x8b, 0x0c, 0xf2, 0xf2, 0x08, 0xf0, 0x6f, 0x44, 0xfc, 0x9c, 0x16, 0x85, 0xcd, 0xa6, 0xba, 0x94, 0xf3, 0x7e, 0x98, 0x05, 0xc1, 0xf5, 0xd2, 0xc3, 0x82, 0xfb, 0x1f, 0xfa, 0xc8, 0xad, 0xc0, 0x34, 0x01, 0x8f, 0xb6, 0xc2, 0x4b, 0x15, 0x32, 0x5d, 0x8a, 0x69, 0x4d, 0x0d, 0xb7, 0x68, 0xf9, 0x4a, 0x7b, 0xed, 0x37, 0x61, 0xfc, 0x53, 0x8b, 0x1a, 0xf7, 0x35, 0xad, 0x98, 0x0f, 0x78, 0x82, 0x80, 0x64, 0x8c, 0x4a, 0x5e, 0x68, 0xee, 0x1b, 0x44, 0xee, 0xf2, 0x8e, 0xb4, 0x84, 0xbf, 0xb8, 0xbf, 0x03, 0x9b, 0x5c, 0x6f, 0x64, 0x69, 0x5e, 0x63, 0xd5 ],
+const [ 0x5e, 0xdb, 0x47, 0xd0, 0x7e, 0x85, 0x6a, 0x3d, 0xee, 0x51, 0xf6, 0x0a, 0x72, 0x3f, 0xf8, 0xde, 0xa7, 0xcd, 0x06, 0xc7, 0xf2, 0x1c, 0xd3, 0x7f, 0xb6, 0x4e, 0x00, 0xee, 0xca, 0x32, 0x34, 0xef, 0x2a, 0x23, 0x6e, 0x57, 0xec, 0x2d, 0x9a, 0x34, 0x76, 0x72, 0x63, 0x52, 0xef, 0xcc, 0x49, 0x04, 0xf3, 0xb4, 0xf3, 0x20, 0x8b, 0x63, 0xc6, 0x4c, 0x5c, 0x36, 0xb6, 0x78, 0x1e, 0x57, 0x5c, 0xac, 0x50, 0x9a, 0x49, 0x04, 0x2a, 0xa5, 0x9b, 0xf9, 0xd4, 0x54, 0xce, 0xe1, 0xd5, 0x5c, 0xd4, 0xb9, 0xce, 0x2e, 0x67, 0x23, 0x68, 0x1e, 0x9e, 0xab, 0x8b, 0xc4, 0xbe, 0x4e, 0xd1, 0xa2, 0x53, 0x3d, 0x3a, 0x08, 0x80, 0xde, 0x21, 0x35, 0x94, 0x14, 0x6e, 0xbf, 0xdd, 0xc0, 0x0e, 0x35, 0xc1, 0x88, 0xa0, 0x02, 0x0a, 0xd7, 0x71, 0x94, 0x82, 0x24, 0xab, 0xbe, 0xc0, 0x78, 0xc9, 0x5b, 0x41, 0x2a, 0x4e, 0x35, 0xbb, 0xed, 0xb7, 0x25, 0xad, 0x0e, 0xae, 0x7b, 0x3b, 0xf6, 0x80, 0x9f, 0x39, 0xf6, 0xd1, 0xf9, 0x86, 0x44, 0x8f, 0x0f, 0x9b, 0x40, 0x24, 0xed, 0x63, 0xfc, 0xf0, 0xca, 0x4e, 0xfc, 0xf6, 0xe8, 0xa1, 0x3a, 0xd5, 0xbc, 0x10, 0x6d, 0xfb, 0x4f, 0x8e, 0x8b, 0x15, 0xe4, 0x64, 0x8d, 0xc9, 0xdb, 0x80, 0x72, 0xa8, 0xd5, 0x10, 0x86, 0x5e, 0x19, 0x50, 0xe4, 0x2c, 0x37, 0xa0, 0x3a, 0x99, 0xeb, 0xda, 0xcc, 0x64, 0x43, 0xe2, 0xbc, 0xbc, 0x04, 0x7f, 0x88, 0xb3, 0x4b, 0x69, 0xd4, 0xf1, 0x70, 0xa3, 0x6a, 0xa5, 0x2f, 0x0a, 0x7f, 0xc2, 0x0a, 0x2f, 0x38, 0x67, 0xe9, 0x62, 0x6c, 0x9e, 0x04, 0x0f, 0xac, 0x4a, 0x02, 0x4e, 0x80, 0x5b, 0x62, 0xb5, 0xf4, 0x44, 0x1b, 0x70, 0x53, 0xaf, 0x7f, 0x94, 0x33, 0x6f, 0x65, 0xb1, 0xb1, 0xb6, 0x87, 0xa7, 0xfe, 0x88, 0x29, 0xba, 0x1b, 0x6f, 0xfc, 0xe8, 0xe0, 0x71, 0x41, 0x79, 0x43, 0x3f, 0x31, 0xd9, 0xd7, 0xaf, 0x9d, 0xa3, 0x93, 0x6c, 0xd2, 0xfe, 0xd5, 0xec, 0xbf, 0x2c, 0xa6, 0xa3, 0x5a, 0x60, 0x40, 0x77, 0x3f, 0xd0, 0xce, 0x73, 0x9a, 0x0c, 0x72, 0xbf, 0x48, 0x8e, 0x8c, 0xd0, 0x39, 0x92, 0x3a, 0xdc, 0x19, 0x28, 0x1b, 0x91, 0x2f, 0x87, 0x59, 0x06, 0x85, 0xa4, 0xe6, 0xf2, 0x49, 0x03, 0x05, 0x1c, 0x73, 0xcd, 0x0d, 0x12, 0xa8, 0x24, 0x69, 0x1e, 0x5e, 0xb3, 0xe4, 0x76, 0x42, 0x89, 0x24, 0xb3, 0xd6, 0x27, 0x73, 0x84, 0x5f, 0xd7, 0xc6, 0xa4, 0xfe, 0x40, 0xf7, 0x09, 0x1d, 0x38, 0x56, 0x5f, 0x0c, 0xd9, 0x60, 0xb4, 0xec, 0xd7, 0xce, 0x75, 0xcd, 0x10, 0xd2, 0x99, 0x13, 0x65, 0x9d, 0x1c, 0x1e, 0xc9, 0x24, 0xaf, 0x2a, 0x97, 0x24, 0xae, 0x73, 0x29, 0x63, 0x52, 0x9d, 0xa6, 0x3a, 0x28, 0x54, 0x1b, 0x50, 0xc1, 0x30, 0xce, 0xa8, 0xab, 0xdb, 0xcf, 0xde, 0xa1, 0x75, 0xcf, 0xad, 0xff, 0x37, 0x35, 0xb5, 0x79, 0x57, 0x6f, 0x7b, 0x0b, 0x2c, 0x86, 0xb2, 0x33, 0x93, 0xf6, 0xb9, 0x5f, 0x91, 0xbc, 0x64, 0xa1, 0x3a, 0xb0, 0xff, 0xaa, 0xd1, 0x15, 0x90, 0xf6, 0x30, 0x6f, 0x5d, 0x44, 0x6a, 0x94, 0xae, 0x49, 0xb0, 0x06, 0xd4, 0xa5, 0x71, 0x80, 0x6a, 0x16, 0xc5, 0xcf, 0xdb, 0xec, 0x0c, 0xe3, 0x25, 0xbd, 0xd2, 0x26, 0xdc, 0x59, 0xf7, 0x0d, 0x71, 0x00, 0x0c, 0xec, 0xb4, 0xd3, 0xff, 0x0e, 0x98, 0x89, 0xfb, 0x05, 0x36, 0x63, 0x8a, 0x3f, 0x15, 0x62, 0xfd, 0xda, 0xa9, 0xb7, 0x0d, 0xb9, 0x19, 0x7b, 0xc2, 0xd8, 0x46, 0xa0, 0x94, 0xdc, 0x08, 0x28, 0xd1, 0xef, 0xba, 0x94, 0x3e, 0xca, 0xfa, 0xa0, 0x01, 0x13, 0xaa, 0x2d, 0xbe, 0xea, 0x3a, 0x7f, 0x01, 0xbf, 0x2a, 0xa8, 0xdc, 0x66, 0xca, 0x44, 0xd1, 0x6d, 0x45, 0x67, 0xf1, 0xad, 0xdd, 0xd4, 0x46, 0x1f, 0x78, 0x70, 0x6f, 0xf1, 0x5c, 0xf6, 0x8a, 0xd9, 0x37, 0xeb, 0x57, 0xaa, 0x62, 0xd5, 0x99, 0x25, 0x66, 0xa8, 0xc0, 0x11, 0xc0, 0x81, 0xc6, 0x8e, 0xe1, 0x96, 0x57, 0xa6, 0x79, 0x6d, 0x34, 0x25, 0xf5, 0x4d, 0xd9, 0xaa, 0x46, 0xf3, 0x5e, 0xff, 0xe5, 0x85, 0x9b, 0xa6, 0x14, 0xcc, 0x8f, 0xb4, 0x66, 0x9d, 0x03, 0xe3, 0x81, 0x98, 0x6a, 0xe2, 0x23, 0x16, 0x0c, 0xef, 0x63, 0x5c, 0x63, 0xa8, 0x3a, 0x15, 0xc5, 0x1e, 0x41, 0xff, 0x44, 0x2c, 0xbc, 0xe4, 0xd3, 0x07, 0xd8, 0xcc, 0xaa, 0x15, 0x31, 0x71, 0xeb, 0x03, 0x97, 0xf3, 0x85, 0x12, 0x12, 0xcd, 0x58, 0xb1, 0x23, 0x08, 0x9b, 0x51, 0x4d, 0xae, 0x7b, 0x75, 0xd4, 0x82, 0x05, 0x08, 0xc5, 0xee, 0x46, 0xf4, 0x36, 0x3d, 0xb1, 0xf0, 0xcf, 0x0a, 0xc1, 0x99, 0x8a, 0xf8, 0xdf, 0xc5, 0xb6, 0xa4, 0x85, 0x14, 0x42, 0xd8, 0xa4, 0xc8, 0x38, 0x02, 0x43, 0xd6, 0x88, 0xe4, 0x69, 0x3c, 0x07, 0x8c, 0x3e, 0x96, 0xb7, 0x87, 0x6d, 0xec, 0x49, 0x52, 0xcc, 0xcf, 0xe0, 0x11, 0x3f, 0xa4, 0x18, 0x83, 0xda, 0x3f, 0x47, 0x36, 0x45, 0xb4, 0x03, 0xf7, 0x65, 0x69, 0xe4, 0x8d, 0x38, 0x70, 0x8a, 0xa7, 0x01, 0x14, 0xe2, 0x12, 0xa6, 0xb2, 0xa6, 0x2f, 0x56, 0xcb, 0x23, 0xa5, 0x6e, 0x56, 0x3f, 0x53, 0x9e, 0x5b, 0xba, 0x89, 0x48, 0xbd, 0xb4, 0x77, 0x28, 0x58, 0x70, 0xe5, 0x3a, 0x4b, 0x57, 0x25, 0xd8, 0x97, 0x40, 0x46, 0x23, 0xea, 0xee, 0x8b, 0xa5, 0xb5, 0xda, 0x1b, 0x35, 0x84, 0x33, 0xfa, 0x1a, 0x8f, 0x24, 0x38, 0x73, 0x8c, 0x55, 0x69, 0xd6, 0xc8, 0xb4, 0x55, 0x37, 0x76, 0x75, 0xf0, 0x0b, 0x47, 0x57, 0x8c, 0xae, 0x3b, 0x2a, 0x4d, 0x02, 0xb6, 0x8e, 0xdd, 0x5a, 0xd6, 0xfd, 0x62, 0x96, 0x04, 0x0c, 0xad, 0x8f, 0xc9, 0xed, 0xb4, 0xb5, 0xe3, 0x39, 0x43, 0xf6, 0x99, 0xec, 0xee, 0xe2, 0x4b, 0xb2, 0x4a, 0x0d, 0x4d, 0x61, 0x5d, 0xb5, 0xf6, 0xc6, 0x52, 0xa5, 0xf3, 0xa4, 0x71, 0x59, 0xe1, 0xfa, 0x4f, 0x63, 0x1c, 0x85, 0x42, 0x0e, 0xd1, 0x86, 0x18, 0x40, 0x5b, 0xc5, 0x09, 0xa5, 0xcc, 0xd6, 0xe9, 0x09, 0xc9, 0x9b, 0xa3, 0x06, 0x9c, 0x0a, 0xe2, 0xe0, 0x84, 0x30, 0x11, 0xad, 0x4f, 0x76, 0x86, 0xb9, 0x2b, 0x24, 0xfa, 0x28, 0xba, 0x23, 0x3d, 0xdd, 0x64, 0x07, 0x27, 0x9b, 0xf1, 0x4d, 0xd2, 0x6a, 0x57, 0xe0, 0x06, 0x3d, 0xd0, 0xe2, 0xf5, 0xd1, 0x30, 0xaa, 0x29, 0xd8, 0x76, 0x09, 0xba, 0x57, 0xa1, 0xd2, 0xc4, 0x4d, 0xc5, 0x99, 0x18, 0x95, 0x5d, 0xba, 0x32, 0x0d, 0xe3, 0x9e, 0x6c, 0xf8, 0x9e, 0x39, 0x71, 0xa1, 0xbc, 0xd7, 0xf3, 0x42, 0xa0, 0x19, 0xa1, 0x23, 0x7d, 0x3a, 0x53, 0x06, 0x24, 0x97, 0x88, 0xc3, 0x1a, 0x6f, 0x13, 0x30, 0xee, 0xe7, 0x11, 0x43, 0xc9, 0x51, 0x1e, 0x7b, 0x47, 0xad, 0xc9, 0x7b, 0x85, 0x70, 0x45, 0xf9, 0x7c, 0x85, 0x61, 0xd6, 0x8d, 0x92, 0xb9, 0x8e, 0x5c, 0x7c, 0x2e, 0xd3, 0xe2, 0x2d, 0x95, 0x75, 0xbe, 0x95, 0xac, 0x85, 0xcc, 0xee, 0x52, 0xba, 0xf9, 0x45, 0xf7, 0x13, 0x56, 0x36, 0x51, 0xbe, 0x6b, 0xf7, 0x50, 0x39, 0xcd, 0x98, 0x55, 0xb7, 0xf3, 0x88, 0x9f, 0xc5, 0x45, 0x5c, 0x05, 0x2d, 0x76, 0xcc, 0xeb, 0x1b, 0x14, 0xfe, 0x6f, 0x7e, 0x5d, 0x08, 0xe3, 0xb1, 0x55, 0xb0, 0x80, 0x5b, 0x15, 0x75, 0x58, 0x94, 0x66, 0xd4, 0x8d, 0x49, 0x8e, 0xc4, 0xc1, 0xe1, 0x6a, 0x83, 0xcd, 0x20, 0xbd, 0x94, 0xb6, 0x4c, 0xc8, 0x09, 0xdd, 0x8f, 0x1b, 0xfe, 0x75, 0x9d, 0xaa, 0x66, 0x3a, 0x96, 0x23, 0x0a, 0x60, 0x2e, 0x7f, 0xce, 0xca, 0x0b, 0xd8, 0x36, 0x7d, 0x6f, 0x7a, 0x2a, 0x54, 0x16, 0x3c, 0xf6, 0xf5, 0x62, 0x11, 0x95, 0x03, 0xb5, 0xda, 0x2f, 0x96, 0x1e, 0x7e, 0xe0, 0xe8, 0x39, 0x3d, 0xbb, 0x51, 0x50, 0x41, 0x0f, 0x75, 0xc6, 0x76, 0xe8, 0xbc, 0xb6, 0x9c, 0xd9, 0x02, 0xd7, 0x9b, 0xf9, 0x90, 0xa3, 0x16, 0x2c, 0x4b, 0xb8, 0x42, 0xa4, 0x2c, 0x7e, 0xf9, 0xa7, 0xf0, 0x0a, 0x0a, 0x92, 0x11, 0x42, 0xd4, 0x1e, 0xf4, 0x42, 0x13, 0xe2, 0x64, 0xff, 0xf9, 0x19, 0x3f, 0x2a, 0x81, 0xa6, 0x6f, 0x58, 0x00, 0x55, 0x1c, 0x5f, 0xfc, 0x64, 0x20, 0x03, 0x42, 0x42, 0xbc, 0xd2, 0x33, 0x96, 0x89, 0x4c, 0x5f, 0x83, 0xb1, 0x47, 0x55, 0x2a, 0x5e, 0x92, 0xb8, 0x71, 0x73, 0xd9, 0x96, 0x03, 0x7b, 0xc8, 0xf6, 0x99, 0xde, 0x73, 0xb0, 0x77, 0x5b, 0xf6, 0x82, 0x39, 0xb2, 0x58, 0x5f, 0xcf, 0xa1, 0xb6, 0x0a, 0xc7, 0x12, 0x9d, 0xe4, 0xca, 0x93, 0xb7, 0x03, 0x6a, 0x06, 0xaa, 0x83, 0x1b, 0x9a, 0x3d, 0x21, 0x7e, 0xfa, 0xbd, 0x05, 0xe6, 0xc4, 0x9f, 0xe0, 0x15, 0x3c, 0x66, 0x37, 0x46, 0x42, 0xc7, 0xff, 0x71, 0x81, 0x0b, 0x69, 0xca, 0xea, 0xb6, 0xff, 0x8a, 0x61, 0x66, 0xf0, 0xf3, 0xb5, 0xfd, 0xa8, 0x8e, 0xd6, 0x02, 0xa4, 0xb8, 0x42, 0x45, 0x85, 0x5c, 0xc1, 0xc2, 0x63, 0x02, 0x52, 0xc8, 0x63, 0x09, 0x65, 0x5b, 0x8c, 0x30, 0x4a, 0xd6, 0xd6, 0x5c, 0xea, 0xd5, 0x84, 0x95, 0xb5, 0x51, 0xb4, 0x51, 0xdb, 0x0d, 0x35, 0xf5, 0xbf, 0x31, 0x98, 0x99, 0xa9, 0x35, 0x8a, 0x0b, 0xba, 0x01, 0x61, 0x17, 0x26, 0x53, 0xf4, 0x06, 0x9d, 0x60, 0xb0, 0x65, 0x0a, 0xbe, 0xe8, 0x08, 0x80, 0x81, 0x6d, 0x4e, 0x71, 0xa5, 0x5f, 0xa5, 0x22, 0xac, 0x42, 0x51, 0x5b, 0x87, 0x54, 0x6a, 0x63, 0xba, 0x1e, 0x24, 0x2c, 0xbc, 0x4a, 0x54, 0xca, 0x9c, 0xb4, 0x2f, 0x29, 0xea, 0xc4, 0x54, 0x00, 0xd5, 0xfa, 0x0d, 0x01, 0x91, 0xca, 0xd1, 0x53, 0xfc, 0xab, 0x0e, 0x41, 0x80, 0x6b, 0x26, 0x34, 0x3b, 0xc5, 0xb7, 0xde, 0x5d, 0x35, 0x20, 0xb9, 0xd2, 0x0b, 0x41, 0xb0, 0x22, 0xbf, 0x82, 0x1b, 0x95, 0x84, 0x16, 0xf1, 0x9a, 0x1f, 0x81, 0x39, 0x69, 0xfa, 0x57, 0xc2, 0xe8, 0x74, 0x47, 0x14, 0xcb, 0x7c, 0x59, 0xa6, 0x00, 0x5e, 0x74, 0x52, 0x4a, 0xdc, 0x23, 0x05, 0x2c, 0x81, 0x98, 0xbb, 0x08, 0x32, 0xf2, 0xab, 0x88, 0x06, 0xbb, 0xbe, 0x3d, 0x58, 0xb5, 0x46, 0x86, 0x1a, 0xd6, 0xed, 0xb4, 0x6b, 0x91, 0xeb, 0x6b, 0x6c, 0x57, 0x7d, 0x4b, 0x50, 0x5e, 0x92, 0xd0, 0xb3, 0xa1, 0xc7, 0x77, 0x2d, 0x28, 0x95, 0x23, 0x26, 0x89, 0xc9, 0xbe, 0xec, 0xaf, 0x35, 0x23, 0x02, 0xda, 0xa6, 0x3c, 0xbc, 0xe7, 0x16, 0x67, 0x08, 0xd2, 0x22, 0x1f, 0x8f, 0x79, 0xbe, 0xd8, 0xfd, 0xa2, 0x27, 0x2a, 0x9c, 0x40, 0x19, 0x32, 0x28, 0xf2, 0x43, 0x36, 0xdf, 0xcd, 0xf8, 0x87, 0xd7, 0x5b, 0x27, 0xac, 0x94, 0xe3, 0x8d, 0xbc, 0xda, 0xeb, 0x29, 0x0c, 0xc0, 0xfc, 0xf0, 0x0a, 0x06, 0xa5, 0xc3, 0x69, 0xa8, 0xc2, 0x9e, 0x7f, 0xb3, 0xff, 0x12, 0xeb, 0x58, 0x97, 0xf5, 0x7a, 0x3f, 0x62, 0x58, 0x4c, 0x1e, 0x0e, 0xb9, 0x32, 0x89, 0xac, 0x7a, 0x5b, 0x0c, 0x6f, 0x92, 0x30, 0x77, 0xb1, 0x83, 0x7c, 0x79, 0x37, 0x8c, 0xd0, 0x70, 0xb6, 0x1f, 0x26, 0x80, 0x96, 0x95, 0xc4, 0xe2, 0xf5, 0x21, 0x63, 0x7f, 0xef, 0x02, 0x91, 0xbe, 0x1d, 0xfd, 0x54, 0x9a, 0x5b, 0x0b, 0x10, 0xf7, 0xcf, 0x4f, 0xaa, 0x36, 0x27, 0x4a, 0xee, 0x07, 0x21, 0x52, 0x2e, 0x7e, 0x51, 0x40, 0x2c, 0x6a, 0x1f, 0x6a, 0x3b, 0xe2, 0x0f, 0xd1, 0xa0, 0x20, 0x45, 0x9b, 0x3e, 0x93, 0x48, 0xc3, 0x73, 0x2f, 0x06, 0x0f, 0x3d, 0x08, 0x18, 0x42, 0xa1, 0x1f, 0x48, 0x93, 0x4d, 0x7b, 0x50, 0x5f, 0x7c, 0x7c, 0xe5, 0x1b, 0x1a, 0x6d, 0xf4, 0x8c, 0x28, 0x58, 0x2c, 0x3a, 0x63, 0x1e, 0xbc, 0x22, 0x20, 0xc6, 0x5e, 0xab, 0x7b, 0x16, 0x94, 0xdb, 0xb0, 0x60, 0x31, 0xcb, 0xc9, 0x9f, 0x1c, 0x58, 0x7a, 0xc3, 0x51, 0x1c, 0x49, 0x48, 0x28, 0x9d, 0xf1, 0x0d, 0xda, 0xc3, 0x09, 0x64, 0x41, 0x90, 0xe1, 0x65, 0xdf, 0x0b, 0xad, 0x89, 0x22, 0x7d, 0xe5, 0x74, 0xe6, 0xe0, 0xeb, 0x11, 0x3c, 0x95, 0xef, 0xe4, 0x6a, 0x55, 0x10, 0x9c, 0x33, 0x6a, 0xc3, 0xe8, 0x58, 0x1f, 0x79, 0x8c, 0x5e, 0x75, 0x7c, 0xb4, 0x92, 0x17, 0x1a, 0x88, 0x4b, 0x90, 0x06, 0x00, 0x6f, 0xbc, 0xfb, 0xfa, 0x38, 0x7c, 0xa2, 0x8a, 0x38, 0xae, 0xb6, 0x91, 0x9b, 0x5d, 0x66, 0x91, 0xad, 0x34, 0xfb, 0xbf, 0x9c, 0x39, 0xba, 0x5a, 0x7e, 0xb8, 0x0c, 0x3c, 0x95, 0x7c, 0xdc, 0xaf, 0xd2, 0x45, 0x41, 0x81, 0x99, 0x77, 0x5d, 0x5b, 0xc4, 0x10, 0x85, 0x4e, 0xea, 0xdc, 0xa1, 0xaf, 0xe1, 0xec, 0xd6, 0x25, 0x81, 0x44, 0x63, 0x00, 0xab, 0xd4, 0xc9, 0xcc, 0x8a, 0xaa, 0x2f, 0x26, 0x19, 0x65, 0x04, 0xcf, 0xe6, 0xed, 0xe6, 0xff, 0x15, 0x61, 0xc3, 0xfc, 0xa7, 0x51, 0x3e, 0xea, 0xfd, 0x2e, 0x54, 0xe5, 0x97, 0xfe, 0x3f, 0x4d, 0x22, 0x54, 0x9a, 0x61, 0xb2, 0x80, 0xc7, 0x10, 0x4c, 0x03, 0x8e, 0x0b, 0xa7, 0x46, 0x06, 0x1f, 0x33, 0x8b, 0xb9, 0xc2, 0x5b, 0x23, 0x03, 0xec, 0x07, 0xe1, 0xbb, 0x28, 0x66, 0xd0, 0x15, 0xea, 0xea, 0x21, 0xc7, 0x23, 0x94, 0x67, 0x6b, 0x13, 0x71, 0x07, 0x25, 0x5e, 0x65, 0xe9, 0x85, 0x63, 0x27, 0x74, 0xaf, 0xc9, 0x8d, 0xba, 0xb9, 0x5a, 0x0a, 0xef, 0x54, 0x15, 0x75, 0x20, 0xaf, 0x7e, 0x0b, 0x21, 0x98, 0x39, 0xb8, 0xc8, 0xe5, 0xd7, 0x92, 0x58, 0x12, 0xf0, 0xa6, 0x40, 0x2b, 0x72, 0xf8, 0x06, 0xec, 0x38, 0xc5, 0x7e, 0x28, 0xdf, 0x0b, 0x3f, 0x67, 0xd5, 0x4c, 0x57, 0xd3, 0xb2, 0x8e, 0x3e, 0x55, 0xcc, 0xa6, 0x09, 0xfb, 0x05, 0xb6, 0xe0, 0x9d, 0xe8, 0xf5, 0xb2, 0xc0, 0xf5, 0xae, 0x27, 0xba, 0x38, 0x8c, 0xd7, 0x17, 0x21, 0x14, 0xb9, 0x3c, 0x8f, 0x73, 0xde, 0x4a, 0x2e, 0x7a, 0x5f, 0x45, 0x03, 0xe7, 0x94, 0x76, 0x45, 0xe6, 0x86, 0x0d, 0x6f, 0xd7, 0xa7, 0x0b, 0x93, 0x52, 0xc1, 0x5f, 0xf1, 0x68, 0x2d, 0x4f, 0xc8, 0x2c, 0x45, 0x1a, 0x6c, 0x73, 0x1b, 0xdc, 0x99, 0xd7, 0x6c, 0xb1, 0x07, 0x02, 0xcf, 0x1d, 0x3e, 0x29, 0x32, 0xac, 0xac, 0xd6, 0x87, 0xd5, 0xf5, 0xeb, 0xbb, 0x24, 0x8a, 0xe4, 0xe8, 0x99, 0x7d, 0x5c, 0xcb, 0x4b, 0x94, 0xd2, 0x78, 0x50, 0x9c, 0xae, 0x4c, 0xe1, 0xff, 0x7f, 0x24, 0xba, 0x99, 0x87, 0xcc, 0xc0, 0xc8, 0x79, 0xbb, 0xe6, 0xc2, 0x81, 0xfd, 0x51, 0x2c, 0x85, 0x70, 0xbb, 0xe8, 0xab, 0x33, 0x15, 0x2e, 0x1b, 0x5c, 0x70, 0xde, 0x06, 0xe9, 0x1d, 0x14, 0xe7, 0xfa, 0x13, 0xfd, 0x08, 0x3d, 0x92, 0xea, 0x48, 0xa9, 0x06, 0xa3, 0x1d, 0x6f, 0x2e, 0xfe, 0xd5, 0x2d, 0x7d, 0xb0, 0x21, 0x65, 0xc1, 0x62, 0xd3, 0x2f, 0x02, 0x08, 0xe7, 0x2a, 0xad, 0x6e, 0xc0, 0xb8, 0xf2, 0x13, 0xb5, 0x6b, 0x6a, 0x3b, 0xcc, 0xba, 0xfd, 0x40, 0xc5, 0xf9, 0x03, 0x29, 0x5b, 0x88, 0xa9, 0x7d, 0xc6, 0x4a, 0x96, 0x5a, 0x84, 0x58, 0xcf, 0xc1, 0x59, 0xf7, 0xd8, 0x34, 0x95, 0xc8, 0x1d, 0x83, 0x95, 0x3f, 0x90, 0xe3, 0x8c, 0x56, 0x92, 0x40, 0x84, 0x83, 0x17, 0xd4, 0x9f, 0xe7, 0x05, 0xf9, 0xa3, 0xc8, 0xde, 0x3b, 0xb5, 0x41, 0x9f, 0xb2, 0x65, 0x38, 0xe8, 0x8f, 0xeb, 0x91, 0x5c, 0xf4, 0xb0, 0xa1, 0x4b, 0x09, 0x11, 0xe6, 0x8f, 0x4c, 0x5f, 0xf5, 0xb3, 0x28, 0x2a, 0xb3, 0x5b, 0xca, 0xbf, 0xc8, 0xdf, 0x30, 0xef, 0x51, 0x3a, 0x82, 0x12, 0xd5, 0x23, 0xa6, 0x4c, 0x7b, 0x79, 0x0f, 0x0f, 0x7a, 0xe4, 0xd5, 0xe1, 0xd0, 0xba, 0x0b, 0x60, 0x37, 0x1f, 0x4d, 0x83, 0x55, 0x71, 0x98, 0x22, 0x33, 0xe3, 0x5e, 0xb9, 0xf0, 0x67, 0xda, 0x69, 0xb7, 0xd2, 0xa2, 0x3f, 0xee, 0x3a, 0x7b, 0xb9, 0xb0, 0xa3, 0x70, 0x86, 0x7e, 0xdb, 0x26, 0x8e, 0x31, 0xa3, 0x6a, 0x32, 0x33, 0x0f, 0x0c, 0xd5, 0xef, 0x30, 0xf0, 0x9b, 0x86, 0xf0, 0x62, 0x70, 0xc4, 0x3c, 0xaa, 0x4d, 0x52, 0x69, 0xe0, 0xb6, 0x2d, 0xd0, 0x02, 0x88, 0x56, 0xbc, 0x44, 0xf1, 0xcc, 0x87, 0xa7, 0xc0, 0xb7, 0xff, 0xcd, 0xdf, 0xe6, 0x0e, 0x0c, 0x1d, 0x7b, 0x9b, 0xc1, 0x31, 0xe5, 0xab, 0xe7, 0xfc, 0x0f, 0xcc, 0xe8, 0x0f, 0xd7, 0xb3, 0xb2, 0x6d, 0xc2, 0x24, 0x0e, 0x92, 0xee, 0x12, 0x2d, 0xb4, 0x48, 0x08, 0x84, 0x48, 0xfe, 0xc7, 0xdb, 0xc8, 0x38, 0x31, 0xa0, 0xb4, 0x03, 0x65, 0x80, 0xd7, 0x8d, 0x2c, 0x39, 0xcb, 0x98, 0x94, 0xa9, 0xbf, 0x29, 0xda, 0x2b, 0x78, 0x80, 0x8d, 0x24, 0x96, 0x4d, 0xf1, 0xd9, 0x19, 0x21, 0xa2, 0x84, 0x23, 0x23, 0x79, 0xa6, 0xff, 0x04, 0xb3, 0x9e, 0x63, 0x35, 0x50, 0x7b, 0xf2, 0x57, 0xba, 0x0f, 0x05, 0xf3, 0xa7, 0x44, 0xab, 0x6b, 0x40, 0xb4, 0xef, 0x30, 0x83, 0x73, 0x59, 0x36, 0xe6, 0x2f, 0xb7, 0xa5, 0x3d, 0x7c, 0x1c, 0xd2, 0xdd, 0x69, 0x2a, 0x6d, 0x02, 0x57, 0x8d, 0xfc, 0x6e, 0x0b, 0xc8, 0x87, 0x53, 0x01, 0x34, 0x95, 0x73, 0x03, 0x45, 0x58, 0x86, 0xfb, 0x10, 0x25, 0xdc, 0x06, 0x0a, 0x27, 0x43, 0xc9, 0x13, 0x53, 0x2b, 0x08, 0xb3, 0x9e, 0x08, 0x74, 0xa3, 0x6e, 0xf8, 0xc5, 0x8f, 0x4f, 0xa6, 0x09, 0x1a, 0xe8, 0x6e, 0x3c, 0x23, 0x2d, 0xc2, 0x18, 0x46, 0xd6, 0xcc, 0x2e, 0xa6, 0x0f, 0x54, 0x36, 0xea, 0x71, 0xe5, 0xa4, 0x86, 0x31, 0x2b, 0x7c, 0x3c, 0x97, 0xa0, 0x66, 0xe2, 0xb2, 0x68, 0x05, 0x65, 0x4b, 0x78, 0x85, 0x0e, 0x17, 0xfe, 0x73, 0x04, 0x30, 0xfd, 0xd2, 0x13, 0xc6, 0x38, 0x6b, 0xab, 0x12, 0x52, 0x64, 0x2c, 0x8c, 0x33, 0x14, 0x60, 0x5e, 0xae, 0x16, 0x49, 0x18, 0x60, 0x9c, 0x1e, 0xa5, 0xdb, 0x06, 0x90, 0x7e, 0x04, 0xb4, 0x51, 0x1d, 0xb9, 0x18, 0xd7, 0xb5, 0xb7, 0x0f, 0x5e, 0x20, 0xbb, 0x71, 0x2c, 0x19, 0xe8, 0xe6, 0x18, 0xab, 0x69, 0xfc, 0x4d, 0xe9, 0x57, 0x77, 0x4c, 0xe0, 0xdd, 0xe9, 0x30, 0xca, 0x9a, 0x82, 0x36, 0x85, 0x46, 0x28, 0x7c, 0x43, 0x99, 0xca, 0x09, 0x82, 0x68, 0xf2, 0x0e, 0x3f, 0x12, 0x9a, 0x6b, 0x66, 0x1a, 0x41, 0x75, 0x8e, 0x15, 0x3e, 0xf7, 0xe3, 0xc7, 0x53, 0x77, 0x63, 0x89, 0x85, 0xba, 0x4e, 0xed, 0x2b, 0x8a, 0xd7, 0xa5, 0x46, 0xb6, 0x20, 0xa1, 0x10, 0x5b, 0x65, 0x78, 0xd8, 0x62, 0x78, 0x09, 0x0c, 0x4a, 0x6d, 0x62, 0x98, 0x27, 0x96, 0xe1, 0x6e, 0xeb, 0xb2, 0x98, 0x66, 0xe5, 0x61, 0xf6, 0x49, 0x87, 0xdb, 0xa4, 0x28, 0x6c, 0xe2, 0xae, 0xf3, 0x9a, 0xf5, 0xe3, 0x47, 0x04, 0xc7, 0x7e, 0x86, 0x53, 0xef, 0x06, 0x2d, 0xe5, 0xe1, 0x72, 0x62, 0x16, 0x1d, 0x91, 0xcd, 0xbf, 0xa6, 0xa9, 0xa9, 0xfd, 0xb6, 0x5f, 0x1b, 0x34, 0xb0, 0xd6, 0xc2, 0x53, 0x56, 0x1b, 0x8f, 0x59, 0x3c, 0xc1, 0xd7, 0x18, 0x7c, 0xc8, 0xa6, 0x38, 0xac, 0xc4, 0x57, 0x80, 0x0d, 0x3a, 0x61, 0x51, 0x05, 0x4e, 0x74, 0x73, 0xd0, 0x9b, 0xc5, 0x15, 0x72, 0x63, 0xa6, 0x0e, 0xf0, 0xe8, 0x59, 0x69, 0xbf, 0x19, 0x26, 0x21, 0x7d, 0x71, 0xab, 0x29, 0xdf, 0x1d, 0x74, 0xaf, 0xeb, 0x5d, 0xcb, 0xa2, 0x67, 0x2c, 0xd1, 0x72, 0x91, 0x23, 0xce, 0x17, 0x10, 0x9b, 0xc6, 0x54, 0x2b, 0x12, 0x4d, 0x3d, 0x39, 0xd0, 0x9b, 0xf7, 0x58, 0xc9, 0xe3, 0xbf, 0x62, 0xc6, 0xe1, 0x2d, 0x1d, 0xc0, 0xb3, 0xba, 0xb2, 0x8c, 0xe9, 0x81, 0x61, 0xbe, 0xdf, 0x42, 0x72, 0xc7, 0x4b, 0xac, 0x6f, 0x60, 0x12, 0xdc, 0x90, 0x2c, 0x60, 0x21, 0x77, 0x98, 0xf7, 0x02, 0x1d, 0x07, 0xc7, 0x82, 0x0d, 0x2c, 0xbf, 0xa2, 0xd0, 0xb6, 0xe4, 0x28, 0xa8, 0x33, 0xa0, 0x9f, 0x81, 0x2e, 0x5c, 0x9f, 0x24, 0x9b, 0x51, 0x4e, 0xae, 0x76, 0x9a, 0x27, 0x40, 0xa6, 0x8e, 0xfa, 0xf9, 0x27, 0x4e, 0x34, 0x21, 0x68, 0x9a, 0x61, 0xa7, 0xf2, 0xe9, 0xef, 0xce, 0x4b, 0xb8, 0x35, 0x23, 0x1a, 0x22, 0xb4, 0xb2, 0x8b, 0xb1, 0x9c, 0x79, 0xf5, 0x74, 0x92, 0x1d, 0xbb, 0x51, 0xb0, 0xdc, 0x70, 0x9d, 0xcd, 0xc3, 0x3e, 0xea, 0xff, 0x21, 0x88, 0x20, 0x5f, 0x3b, 0xce, 0xd0, 0x0c, 0x41, 0xd1, 0xc4, 0x73, 0x81, 0xf8, 0xdb, 0xcd, 0xdb, 0xf3, 0x14, 0xe8, 0x75, 0x9e, 0xe8, 0x2b, 0xb0, 0x28, 0xdd, 0xd5, 0x5a, 0x74, 0x58, 0x85, 0x25, 0xbf, 0xb2, 0xff, 0x57, 0x84, 0x8f, 0x2d, 0xc4, 0x9c, 0x6b, 0x64, 0xf9, 0xaa, 0x76, 0xe9, 0xbb, 0xb6, 0xa2, 0xb4, 0xb0, 0x18, 0xfa, 0x73, 0x5b, 0x98, 0x35, 0xd2, 0x4e, 0xd3, 0x8b, 0xfa, 0x9a, 0xe1, 0xc7, 0x57, 0x8b, 0x34, 0x9e, 0x9f, 0x92, 0xc3, 0x3f, 0x10, 0x83, 0x68, 0x2b, 0xf9, 0x00, 0x87, 0x47, 0x7b, 0x35, 0xf1, 0x2f, 0x91, 0xc7, 0x08, 0xce, 0x4e, 0x06, 0x23, 0x2c, 0x66, 0x6a, 0x34, 0x86, 0xf0, 0x3d, 0xa8, 0xa4, 0x6a, 0x95, 0x8e, 0x67, 0xfe, 0x85, 0xfc, 0xa2, 0x03, 0x94, 0xae, 0x2a, 0xc7, 0x6e, 0xf1, 0x31, 0x8c, 0xda, 0xbf, 0xcf, 0xd0, 0xec, 0x2c, 0xe2, 0xd2, 0x7c, 0x01, 0x18, 0x51, 0xd7, 0xa6, 0x4a, 0x97, 0xb3, 0x45, 0x0c, 0xb6, 0x69, 0x2c, 0x82, 0x12, 0x5e, 0x73, 0x75, 0x1f, 0xc2, 0xdf, 0xa5, 0x6c, 0x7e, 0x07, 0x61, 0xe1, 0x67, 0xb5, 0x56, 0x45, 0xb8, 0x8f, 0xa5, 0x02, 0xbf, 0xf7, 0x38, 0x2d, 0xd6, 0x2f, 0x55, 0xc1, 0x95, 0xc1, 0x73, 0x2b, 0x46, 0x1e, 0x4d, 0x0c, 0x99, 0x85, 0x36, 0x3a, 0x9a, 0x26, 0xac, 0x08, 0xdf, 0x88, 0x2f, 0xc7, 0x06, 0x28, 0x54, 0x8c, 0x5f, 0x63, 0x15, 0x34, 0xe5, 0x95, 0x6b, 0xa6, 0x73, 0x83, 0x1f, 0x58, 0x34, 0xf6, 0xdc, 0x15, 0x5c, 0xa9, 0x8a, 0xfd, 0x15, 0x65, 0xd7, 0xcd, 0xbc, 0x6b, 0x16, 0x60, 0x4e, 0x12, 0x4d, 0x76, 0x1d, 0xb1, 0x89, 0xb5, 0xc8, 0xbf, 0x75, 0xed, 0x69, 0x39, 0x2b, 0xa0, 0x10, 0x44, 0x4a, 0xc2, 0x71, 0x14, 0x49, 0xbd, 0xd9, 0x0c, 0x0b, 0xb8, 0x67, 0x27, 0xb3, 0x19, 0x78, 0x96, 0xb9, 0x48, 0x63, 0xab, 0x3e, 0xb6, 0x67, 0xf5, 0x9c, 0x1f, 0xe1, 0xad, 0x42, 0x0c, 0xc2, 0x50, 0xbf, 0x9b, 0x41, 0x8e, 0x1c, 0x82, 0xcd, 0x63, 0x6f, 0x52, 0x46, 0x84, 0xad, 0xf9, 0x6c, 0xfc, 0xc0, 0x8b, 0x98, 0x17, 0xd9, 0x42, 0xaa, 0x7f, 0x08, 0xc3, 0x42, 0xa5, 0x0a, 0xa2, 0x33, 0x62, 0x62, 0x29, 0x34, 0xdf, 0xab, 0x55, 0xd9, 0xb2, 0x2c, 0x22, 0xc2, 0x49, 0xad, 0x08, 0x13, 0x8c, 0x89, 0xc6, 0x23, 0xbe, 0x05, 0x5e, 0x79, 0xa4, 0xe0, 0x61, 0xf4, 0xea, 0x2b, 0x6c, 0x49, 0xc2, 0x5b, 0xf3, 0xb3, 0xce, 0x9d, 0x3d, 0xe5, 0x40, 0x69, 0xb0, 0x44, 0x40, 0x5a, 0x4f, 0x53, 0x8e, 0x3d, 0x81, 0x6e, 0x68, 0x68, 0x14, 0xbc, 0xae, 0x4d, 0x81, 0x5f, 0x44, 0x4e, 0x72, 0xed, 0xb8, 0xd3, 0x81, 0x24, 0x24, 0x9a, 0x43, 0xd9, 0x56, 0x4f, 0x85, 0x32, 0x2f, 0x5d, 0xd5, 0x15, 0x49, 0x03, 0x45, 0xe0, 0xdc, 0xaa, 0x6b, 0x5b, 0xe3, 0x76, 0xac, 0xeb, 0x7a, 0x1b, 0xbb, 0x08, 0x8b, 0xf2, 0x5c, 0xf0, 0xa9, 0x4c, 0x6e, 0x9d, 0x3c, 0x06, 0x28, 0xf5, 0xdf, 0x5d, 0xa3, 0x42, 0x06, 0x04, 0x98, 0xe1, 0xe4, 0x74, 0x6c, 0x3e, 0x8c, 0x84, 0x69, 0x00, 0x56, 0x39, 0x4f, 0x80, 0x84, 0xdf, 0x0b, 0x80, 0x25, 0x58, 0xc6, 0x1a, 0x3a, 0xb5, 0x21, 0xf6, 0x18, 0x03, 0xbf, 0xc0, 0x0d, 0x67, 0x05, 0xd9, 0x46, 0x6e, 0x1d, 0x4d, 0xf0, 0x9e, 0x41, 0x06, 0x9e, 0x51, 0x36, 0x3f, 0xeb, 0xc3, 0x16, 0x3b, 0x60, 0x69, 0x53, 0x36, 0x98, 0x84, 0xf9, 0x9c, 0xa1, 0xf7, 0x33, 0x79, 0xa6, 0x55, 0x11, 0x30, 0xcb, 0x3f, 0x88, 0x71, 0x59, 0xed, 0xbb, 0x65, 0x1b, 0x0a, 0x78, 0x2b, 0x08, 0xc5, 0x06, 0x88, 0x21, 0x25, 0x1e, 0xda, 0x9d, 0x9c, 0x37, 0x4e, 0x44, 0xe0, 0x07, 0x53, 0x19, 0xf6, 0x46, 0x4f, 0x3b, 0x8f, 0xb5, 0x90, 0x0d, 0x98, 0x5f, 0x85, 0x95, 0x0d, 0x1e, 0x2e, 0x22, 0x0e, 0x62, 0xd1, 0x32, 0x34, 0x2e, 0xef, 0x92, 0x25, 0x63, 0x76, 0xc7, 0x66, 0x41, 0x38, 0xad, 0x71, 0x2b, 0x9c, 0x5e, 0x08, 0xaa, 0x93, 0x55, 0xc8, 0xb5, 0xce, 0xd4, 0x01, 0x30, 0x2f, 0x82, 0xc5, 0xb2, 0x7d, 0x59, 0x3f, 0x8b, 0x5b, 0xbf, 0x46, 0x06, 0x7b, 0xf3, 0x32, 0xeb, 0x0f, 0xab, 0xef, 0x48, 0x80, 0xfc, 0x50, 0x71, 0x63, 0x79, 0xa5, 0x46, 0xa9, 0x9f, 0x8f, 0xb4, 0x15, 0x71, 0x13, 0x7f, 0xf4, 0x5f, 0xee, 0x3e, 0x08, 0x6c, 0x28, 0xa7, 0xc5, 0x90, 0xec, 0x0c, 0xc0, 0x5b, 0x97, 0x26, 0x64, 0xdc, 0x0f, 0x12, 0xe6, 0xc1, 0x56, 0x99, 0x7c, 0xbf, 0x5f, 0xb4, 0xca, 0x35, 0x20, 0x4f, 0x9d, 0x0c, 0xe8, 0x4e, 0xdc, 0xe1, 0xf3, 0xce, 0xbc, 0x66, 0x3c, 0xad, 0x32, 0x05, 0x92, 0x4c, 0xae, 0xc7, 0xee, 0x93, 0x06, 0x75, 0x04, 0x36, 0xb0, 0xfd, 0x18, 0x37, 0x35, 0x16, 0x13, 0xad, 0xe2, 0x27, 0xd6, 0xc3, 0xc1, 0x65, 0xce, 0x03, 0xc8, 0x3c, 0xc8, 0xd5, 0x4f, 0xf1, 0x07, 0x42, 0xc8, 0x85, 0x94, 0xfe, 0xaa, 0xdc, 0xd6, 0xa6, 0xae, 0x1f, 0x62, 0x46, 0x3e, 0x5e, 0x14, 0x1e, 0x2a, 0x7a, 0x5f, 0xa6, 0x9e, 0x42, 0xe1, 0xcf, 0x51, 0xdc, 0x3b, 0x8c, 0xfe, 0x67, 0x1f, 0x91, 0x18, 0xde, 0xab, 0x5a, 0xba, 0x3f, 0xf5, 0x70, 0xdd, 0xed, 0xe7, 0xe8, 0xcd, 0x53, 0x4d, 0x2c, 0xde, 0xcb, 0x2c, 0xfe, 0x5a, 0xbe, 0x55, 0xb9, 0xbf, 0x0c, 0x3b, 0xda, 0x27, 0xae, 0x02, 0xc0, 0x08, 0x9a, 0xd8, 0xb0, 0x1d, 0xe6, 0x88, 0x1c, 0xa4, 0x31, 0x4c, 0x25, 0xca, 0x3f, 0xe3, 0x5e, 0x64, 0xe3, 0xe4, 0xd3, 0xdf, 0x22, 0x52, 0x4a, 0x7a, 0x95, 0x70, 0xc8, 0xb2, 0x0f, 0xd7, 0x57, 0xfe, 0x80, 0xc5, 0x07, 0xbd, 0x19, 0xb8, 0x33, 0x6d, 0xb1, 0x3c, 0x05, 0x1d, 0x68, 0x01, 0x3c, 0x25, 0x8a, 0x30, 0x2d, 0x14, 0xb6, 0xff, 0x08, 0xea, 0x3f, 0x84, 0x5d, 0x88, 0xd2, 0xc6, 0xdf, 0x64, 0x59, 0x1a, 0x67, 0x81, 0x20, 0xad, 0x3c, 0x9f, 0x36, 0x5d, 0x91, 0xaf, 0x17, 0xcd, 0x4f, 0x89, 0x87, 0xb8, 0x15, 0xe1, 0xc1, 0x85, 0x7d, 0x77, 0xd1, 0x1c, 0xa2, 0x8f, 0x3f, 0xf9, 0xdf, 0xa1, 0xed, 0x7e, 0xd9, 0x51, 0x42, 0x8e, 0xbf, 0xa1, 0x88, 0x57, 0xd0, 0x66, 0x93, 0x6f, 0x1e, 0xf9, 0xa4, 0x23, 0x92, 0x2e, 0x8d, 0x0c, 0x31, 0x8a, 0x15, 0xe3, 0x9d, 0xb0, 0x9d, 0x95, 0xdf, 0x1d, 0x04, 0x9a, 0x63, 0x15, 0xc9, 0x83, 0x44, 0xdd, 0x6f, 0xd3, 0xcb, 0x2b, 0x26, 0x10, 0x32, 0xdb, 0xa7, 0x1a, 0xad, 0xe3, 0x60, 0xbb, 0xab, 0x89, 0xd1, 0x7e, 0x58, 0xd4, 0x36, 0xc5, 0x67, 0x40, 0x66, 0x16, 0x10, 0xb5, 0xfb, 0xb6, 0x54, 0xba, 0xb3, 0x79, 0x88, 0xe7, 0x16, 0xd8, 0x11, 0x98, 0x59, 0x44, 0x6d, 0xe9, 0x83, 0xba, 0x73, 0xde, 0xce, 0x98, 0xdb, 0xe1, 0x50, 0xaf, 0x00, 0x72, 0xda, 0x99, 0xe5, 0x1a, 0x21, 0x4c, 0x76, 0xa0, 0x1b, 0xf0, 0x11, 0x80, 0xac, 0xee, 0x45, 0x99, 0x82, 0x4a, 0xda, 0x26, 0x3e, 0x32, 0x11, 0xef, 0xd4, 0xd7, 0x2c, 0xc1, 0x34, 0x7b, 0x31, 0x1b, 0x2a, 0xcb, 0xec, 0x2a, 0x82, 0x70, 0x33, 0xf7, 0x71, 0xe1, 0x6e, 0xe0, 0x30, 0x7b, 0x56, 0x45, 0xea, 0xd3, 0xfc, 0x83, 0xd8, 0x4b, 0x0d, 0x26, 0xab, 0xe3, 0x55, 0x5a, 0x2a, 0x52, 0x83, 0xa3, 0x1c, 0x56, 0x2c, 0xce, 0x68, 0x48, 0x12, 0x28, 0x7b, 0xf3, 0xa5, 0xed, 0xea, 0xa6, 0xca, 0x03, 0x58, 0x88, 0xdc, 0xe8, 0x9b, 0x2c, 0xf0, 0xea, 0x1a, 0x65, 0x5e, 0x96, 0x79, 0x5c, 0x7d, 0x72, 0x79, 0xdf, 0xad, 0xef, 0x19, 0xfc, 0x9b, 0x99, 0x02, 0xcf, 0xc0, 0x91, 0x21, 0x98, 0x2b, 0x3d, 0x96, 0x10, 0x81, 0x3e, 0xcd, 0xfe, 0x42, 0xa2, 0xea, 0x05, 0x4d, 0x5b, 0x6b, 0xc0, 0xa7, 0xf0, 0x08, 0x11, 0x78, 0x73, 0xde, 0xb5, 0x56, 0xb3, 0xcd, 0x1c, 0xc6, 0xb2, 0x1f, 0x78, 0x00, 0x5a, 0x6a, 0x15, 0xf3, 0x6b, 0xb7, 0xe8, 0x89, 0xb8, 0xe3, 0x6a, 0x2c, 0x93, 0x46, 0xa7, 0x89, 0x86, 0x93, 0x91, 0x94, 0x44, 0xff, 0x9b, 0xcc, 0xde, 0xa6, 0x83, 0xc0, 0x3a, 0x2a, 0x6f, 0xd2, 0xc2, 0x9d, 0x3c, 0x3b, 0x59, 0xa1, 0x13, 0x4f, 0x93, 0xcd, 0x3d, 0x02, 0x25, 0x53, 0x38, 0xac, 0x9a, 0xe0, 0x0a, 0x09, 0x48, 0xc4, 0xd5, 0x84, 0x83, 0x53, 0xac, 0xb5, 0x10, 0x8b, 0xa5, 0x28, 0xdc, 0xf7, 0x2f, 0x60, 0xee, 0xd2, 0xa6, 0x1b, 0x9b, 0x70, 0x25, 0xd8, 0xf9, 0xda, 0x9c, 0x97, 0x96, 0xb9, 0x22, 0xe0, 0x69, 0x75, 0x8c, 0x06, 0x08, 0x9d, 0x3e, 0xad, 0x1c, 0x8a, 0x41, 0x8a, 0x12, 0x3f, 0x96, 0x6a, 0x14, 0x94, 0xca, 0x76, 0x38, 0x94, 0xcb, 0xb5, 0xf7, 0x23, 0xfa, 0xd2, 0xe0, 0xe4, 0x81, 0x20, 0x8d, 0x59, 0xe7, 0xdb, 0xd7, 0x4c, 0xe2, 0xb1, 0x46, 0x6e, 0x6c, 0x80, 0xcb, 0x3f, 0x18, 0x62, 0xb2, 0x2d, 0xa7, 0xe7, 0xd2, 0x00, 0xd6, 0xa1, 0x07, 0x75, 0x7b, 0xe6, 0xe2, 0x29, 0xd0, 0xd1, 0x9e, 0xb9, 0x0f, 0x8a, 0x56, 0x28, 0x3f, 0xc7, 0x76, 0x81, 0x4d, 0x93, 0x70, 0xbd, 0x5e, 0x4f, 0xb0, 0xe6, 0x64, 0xf6, 0xd1, 0x7d, 0xef, 0xa5, 0x11, 0x1a, 0x47, 0x5a, 0x02, 0x52, 0xb7, 0xfb, 0x83, 0xdd, 0x2b, 0x9b, 0xef, 0xf8, 0xfe, 0xfa, 0x94, 0x09, 0x0d, 0x4a, 0x67, 0x82, 0x10, 0x39, 0xf5, 0x07, 0x2a, 0x2b, 0x9d, 0xd3, 0xbe, 0xc7, 0xfd, 0x58, 0x85, 0xb6, 0xaa, 0x25, 0xdd, 0xa7, 0x24, 0x0d, 0x64, 0x97, 0x09, 0x86, 0xc6, 0x4f, 0x88, 0x4f, 0xd3, 0x2e, 0x19, 0x56, 0xd5, 0x28, 0x6b, 0xd8, 0x20, 0x0f, 0x9e, 0xca, 0xea, 0x11, 0xb3, 0x78, 0x5d, 0x83, 0x41, 0x6c, 0xeb, 0xdd, 0x69, 0x91, 0xe2, 0x05, 0x0b, 0x98, 0x40, 0xd0, 0x3a, 0x9b, 0xc8, 0xc6, 0xee, 0x00, 0x55, 0x25, 0xf9, 0xa1, 0x6f, 0x29, 0x3d, 0x29, 0x1c, 0x8b, 0x1b, 0xc1, 0xf8, 0x47, 0x2f, 0xed, 0x88, 0xa3, 0x3a, 0xb0, 0xcc, 0x6d, 0x5f, 0xf7, 0x13, 0x84, 0x93, 0x35, 0x13, 0x9a, 0x4f, 0x4a, 0x39, 0x37, 0x87, 0xa9, 0x3e, 0x01, 0xe0, 0xba, 0xfb, 0x3c, 0x1e, 0x7d, 0x7e, 0x8d, 0xdb, 0x71, 0x5d, 0x03, 0x7f, 0xb4, 0x4a, 0x57, 0x6c, 0x6b, 0xe8, 0x73, 0x79, 0x64, 0xde, 0x32, 0xa2, 0xfa, 0x29, 0x67, 0xfe, 0x39, 0xb6, 0x20, 0xf1, 0x43, 0x30, 0x2c, 0xa2, 0xf2, 0x17, 0xda, 0xaf, 0xbf, 0x12, 0x04, 0x20, 0xe3, 0x86, 0x4c, 0x9a, 0xbc, 0x67, 0xa6, 0xd5, 0x71, 0x4e, 0x17, 0x50, 0xd9, 0xcc, 0xbc, 0x44, 0x99, 0xff, 0x0d, 0xd6, 0x8d, 0x62, 0x63, 0x90, 0x6a, 0xe9, 0xb8, 0x12, 0xa1, 0x4e, 0xae, 0x05, 0x86, 0xa5, 0xd3, 0x51, 0xb1, 0x37, 0x24, 0x90, 0xa4, 0x8d, 0xd0, 0xc2, 0xaf, 0xcb, 0x3e, 0x42, 0x11, 0x40, 0x50, 0xf9, 0x60, 0x3a, 0xea, 0xd1, 0x2b, 0x1f, 0xae, 0x6c, 0xdd, 0xb9, 0x0a, 0x17, 0xe4, 0xd2, 0x75, 0xf9, 0x13, 0x01, 0xf5, 0x90, 0x45, 0xc3, 0xe5, 0x5f, 0x44, 0xcd, 0xf5, 0xe0, 0xe9, 0xa1, 0x72, 0xc0, 0x84, 0x60, 0xc8, 0x4b, 0x7d, 0xdf, 0x45, 0x26, 0x3c, 0xfc, 0x1f, 0x3c, 0x47, 0x33, 0xb9, 0xfa, 0xaa, 0x6c, 0x22, 0xbf, 0x9c, 0x17, 0xde, 0x8e, 0x5f, 0x7b, 0xea, 0x07, 0x68, 0x4b, 0xfa, 0x95, 0xc0, 0x7b, 0x05, 0xe8, 0xaa, 0x51, 0x03, 0xa6, 0x86, 0xbf, 0xf6, 0x5d, 0xf5, 0xf0, 0x27, 0xbd, 0x3e, 0x21, 0xb2, 0x04, 0xf1, 0xb2, 0x44, 0xb9, 0xca, 0x7d, 0x24, 0x9d, 0xd7, 0x66, 0x70, 0xdf, 0xdd, 0x33, 0xaa, 0x8f, 0xf9, 0x9f, 0x73, 0x55, 0x83, 0xa9, 0x95, 0x63, 0x37, 0x32, 0x47, 0xa8, 0x97, 0xc7, 0xad, 0x46, 0x8b, 0xbc, 0x9f, 0x47, 0x4b, 0x7a, 0xab, 0x8b, 0x7e, 0x19, 0x5d, 0x05, 0xa4, 0x32, 0xbd, 0x28, 0xb1, 0xee, 0x1a, 0x9b, 0xfa, 0x63, 0x06, 0x34, 0x55, 0x21, 0xa2, 0x24, 0x7c, 0x07, 0x1c, 0x6f, 0xb3, 0x5c, 0x75, 0xa0, 0xab, 0x1b, 0x88, 0xba, 0xa5, 0x8d, 0x48, 0x71, 0xda, 0x1d, 0x49, 0x9a, 0x1b, 0x69, 0x82, 0xe1, 0xb5, 0x95, 0x51, 0xba, 0x97, 0xe4, 0xbf, 0x9a, 0xb7, 0x89, 0x06, 0x66, 0xb1, 0xba, 0x50, 0x2c, 0xb1, 0x07, 0xc2, 0x11, 0x94, 0xea, 0xb9, 0x8a, 0x4a, 0x9f, 0x53, 0xcf, 0x7f, 0x35, 0x32, 0x8d, 0x7a, 0xe6, 0x7c, 0xdb, 0x45, 0xa4, 0x26, 0x70, 0x0e, 0xf4, 0x73, 0x13, 0xcd, 0xff, 0xb7, 0x52, 0x27, 0xe6, 0x61, 0x77, 0x92, 0x57, 0x38, 0xb8, 0xbb, 0x5e, 0xe5, 0xae, 0x25, 0x7d, 0xb2, 0x09, 0x12, 0xfe, 0x91, 0x81, 0xa6, 0x88, 0x60, 0x10, 0x4a, 0xf1, 0x6b, 0x5e, 0x4f, 0x53, 0x33, 0x7d, 0xd3, 0x62, 0x6e, 0xd6, 0xe9, 0xfc, 0x4e, 0x63, 0xf4, 0x02, 0x06, 0x1f, 0x54, 0x67, 0x8b, 0xbb, 0x45, 0x86, 0x97, 0x93, 0x03, 0xb9, 0xf4, 0xe0, 0x33, 0x27, 0xf7, 0x2f, 0x7e, 0xdd, 0x4b, 0x12, 0x7f, 0x21, 0xef, 0x15, 0xdf, 0x02, 0x82, 0xf3, 0xbe, 0x34, 0xbf, 0x0a, 0x55, 0x1b, 0x44, 0x0d, 0xda, 0x26, 0x97, 0xf9, 0xa4, 0x5e, 0x6a, 0x4a, 0x90, 0x3f, 0x1e, 0x6e, 0xa3, 0xc6, 0x87, 0x7a, 0xf1, 0xcb, 0xef, 0x1c, 0xbd, 0x91, 0x5d, 0xd0, 0xe1, 0x9c, 0x17, 0x57, 0x71, 0xc2, 0x65, 0x66, 0x9b, 0x85, 0x98, 0x9b, 0xd1, 0xa0, 0x4b, 0xb4, 0x2b, 0xe0, 0xe9, 0x03, 0x06, 0x35, 0x6f, 0x1d, 0xf2, 0x09, 0x73, 0xd3, 0xcb, 0xd0, 0x66, 0x63, 0x25, 0xe1, 0x16, 0xef, 0xed, 0x84, 0x76, 0x2d, 0x4e, 0x4c, 0xa2, 0x61, 0xd2, 0xa7, 0x1e, 0x88, 0xca, 0xb3, 0x5e, 0xd6, 0xef, 0x53, 0x8c, 0x63, 0x49, 0x83, 0x85, 0x22, 0x50, 0xe8, 0x25, 0x12, 0x52, 0xab, 0xc4, 0xb8, 0x14, 0x88, 0x00, 0xcc, 0xbc, 0x22, 0xbd, 0x33, 0xee, 0x9a, 0x6b, 0x2d, 0x36, 0x5f, 0x88, 0xd0, 0xa6, 0x48, 0x65, 0xb5, 0xc0, 0xe0, 0x2c, 0xf1, 0x96, 0x01, 0x22, 0x46, 0x2f, 0xa4, 0x2a, 0x9b, 0x2d, 0xf7, 0x8b, 0xaa, 0xad, 0xb0, 0xf2, 0xf9, 0x6f, 0xa1, 0xbb, 0x0b, 0x37, 0x8d, 0x6c, 0xd7, 0x72, 0x3b, 0x82, 0x79, 0x1d, 0xc8, 0x71, 0x28, 0xe3, 0x41, 0xe6, 0x68, 0x85, 0x72, 0x4f, 0x80, 0x7f, 0xf8, 0x9d, 0x2f, 0xe9, 0x9e, 0x48, 0x9b, 0x9b, 0xe6, 0x94, 0x8a, 0x94, 0xe5, 0x14, 0xd4, 0x9d, 0x54, 0x6c, 0x19, 0x29, 0xe5, 0x5a, 0xaf, 0x80, 0xd3, 0xf8, 0xde, 0x1c, 0xbd, 0x3b, 0x50, 0x53, 0xb4, 0xc0, 0xc3, 0x37, 0x93, 0xc8, 0x01, 0xbb, 0x8e, 0x81, 0x12, 0x17, 0x0e, 0x87, 0xb0, 0x6d, 0xbd, 0xaa, 0xfb, 0xac, 0xdc, 0xf2, 0x6e, 0xb5, 0xdd, 0xe0, 0x12, 0xbc, 0x2e, 0xf7, 0xf1, 0xf1, 0x53, 0x7b, 0xce, 0x60, 0x37, 0x79, 0x13, 0x16, 0xc4, 0x07, 0x0b, 0x86, 0xb1, 0xcd, 0x51, 0x2b, 0x9b, 0xc4, 0x89, 0x6e, 0x58, 0x3e, 0x4d, 0xc9, 0x88, 0x27, 0x6a, 0x2d, 0x6c, 0x8a, 0x4d, 0xa1, 0xfc, 0x56, 0xb8, 0x2d, 0x33, 0x63, 0xba, 0xf6, 0xae, 0xb0, 0xdd, 0xaa, 0x75, 0xef, 0xa1, 0x1e, 0x19, 0x43, 0x29, 0x36, 0xff, 0x48, 0x35, 0x06, 0xfb, 0x54, 0x50, 0x36, 0x20, 0xfc, 0x4b, 0xab, 0xd7, 0xda, 0xe9, 0x63, 0x2f, 0x8e, 0xdc, 0xa1, 0x74, 0x03, 0xf0, 0x4b, 0x03, 0xf4, 0x87, 0x90, 0x5c, 0xae, 0x45, 0xcd, 0x79, 0x17, 0x0c, 0xb2, 0x5f, 0xef, 0x2b, 0xa1, 0xf2, 0x56, 0xd2, 0x56, 0x0d, 0x8e, 0xca, 0xcd, 0xd2, 0x03, 0x62, 0x60, 0x3f, 0x88, 0xad, 0x31, 0x02, 0xe4, 0xea, 0xc7, 0x8f, 0x8d, 0x44, 0xfc, 0x6f, 0xb3, 0xbc, 0x16, 0xdb, 0x80, 0x63, 0x34, 0x89, 0x9f, 0xcc, 0xec, 0xc6, 0xfb, 0xc1, 0x32, 0xc5, 0xc9, 0x35, 0x7b, 0x37, 0xc8, 0x7a, 0x23, 0x1b, 0xc7, 0xb4, 0x0c, 0xd8, 0x69, 0x8e, 0x89, 0x89, 0x25, 0x2b, 0x7a, 0x98, 0x90, 0x60, 0xb8, 0x8e, 0xdf, 0x20, 0xb3, 0x29, 0xa7, 0x37, 0x59, 0xb0, 0xe8, 0x3b, 0x3a, 0x83, 0x4a, 0xc0, 0xea, 0xf6, 0xa6, 0xcc, 0xa7, 0x5f, 0xc8, 0x8b, 0x3c, 0x6e, 0x74, 0x43, 0x25, 0xbd, 0xa6, 0x89, 0xf4, 0xa8, 0x1e, 0xb6, 0xf4, 0x5f, 0x1c, 0x95, 0x0b, 0x39, 0x69, 0x5e, 0xe5, 0x4c, 0x96, 0xe8, 0x4e, 0x3a, 0x88, 0x1a, 0xe0, 0x4d, 0x35, 0xa3, 0xdf, 0xc7, 0xa8, 0xea, 0x61, 0x73, 0x4b, 0x48, 0xb2, 0x80, 0x65, 0x76, 0xf6, 0x8f, 0xe2, 0x41, 0x10, 0x0b, 0x53, 0x85, 0xc3, 0xb9, 0x35, 0x58, 0x17, 0x90, 0x76, 0x86, 0xff, 0xca, 0x35, 0x3e, 0x38, 0x3b, 0xca, 0x0a, 0x74, 0xe2, 0x06, 0x04, 0xb8, 0xbe, 0xbb, 0x48, 0x03, 0xe2, 0x7f, 0xa5, 0x30, 0xcc, 0xae, 0x98, 0x1d, 0xf3, 0xae, 0x7a, 0x0d, 0x9f, 0x77, 0xf8, 0x4b, 0xfd, 0x52, 0xc4, 0x11, 0x73, 0xe0, 0x8a, 0xa7, 0x31, 0x5f, 0x26, 0xcf, 0x09, 0x29, 0x14, 0x61, 0x80, 0x7d, 0x27, 0x33, 0x25, 0x82, 0x7e, 0x3b, 0x21, 0x89, 0xb5, 0xf8, 0x10, 0x93, 0x58, 0x0d, 0x0f, 0x13, 0x9d, 0x30, 0x16, 0xf5, 0x52, 0x42, 0x89, 0xde, 0x14, 0xbf, 0x09, 0xb6, 0xc2, 0x59, 0x90, 0x64, 0x31, 0xe0, 0xbd, 0xd8, 0x21, 0x65, 0x6c, 0x4f, 0x70, 0x9f, 0x8a, 0xd2, 0x8e, 0x8e, 0x28, 0x00, 0x31, 0x5d, 0xcd, 0x0e, 0x4a, 0x8d, 0x11, 0x0c, 0x37, 0x50, 0x67, 0x6a, 0x3a, 0x33, 0x3b, 0xba, 0x2a, 0x00, 0x3d, 0xb7, 0x68, 0xe3, 0xfc, 0x87, 0x15, 0xcb, 0xb6, 0x3d, 0x82, 0x13, 0x6e, 0xa2, 0xe8, 0x62, 0x40, 0x35, 0x5a, 0xd0, 0xf2, 0x70, 0xf7, 0x4a, 0xcb, 0x4d, 0x64, 0x37, 0xa8, 0x09, 0x7a, 0x5b, 0x4c, 0x28, 0x3b, 0xfc, 0xf8, 0xb9, 0x0b, 0x44, 0x3b, 0xdb, 0x1d, 0xe7, 0x0c, 0x80, 0x2b, 0x06, 0x16, 0x71, 0x6a, 0x52, 0x53, 0x93, 0xbd, 0x74, 0xdc, 0x68, 0x28, 0xad, 0x00, 0xd8, 0x88, 0xb9, 0x93, 0x32, 0x82, 0xfa, 0x88, 0x6e, 0xba, 0xd2, 0xc3, 0xb5, 0x45, 0x51, 0x28, 0x23, 0x60, 0x10, 0xf8, 0xcb, 0x62, 0x5c, 0x5d, 0xfb, 0xef, 0x97, 0x43, 0xc2, 0x6f, 0xdc, 0x6a, 0xb0, 0xbe, 0xe2, 0xb9, 0xdd, 0x25, 0x23, 0xd6, 0x2c, 0x8a, 0x3d, 0xf3, 0xd1, 0xe3, 0x98, 0xeb, 0x11, 0xf1, 0x49, 0x8d, 0x49, 0x2a, 0x36, 0x37, 0x32, 0xf7, 0x7b, 0xa8, 0x63, 0x1f, 0x0d, 0x0f, 0x18, 0x83, 0x9d, 0x67, 0x31, 0x0d, 0xc0, 0x07, 0x7e, 0xe3, 0x4c, 0x75, 0x39, 0xe0, 0x05, 0x7c, 0xd4, 0x44, 0x79, 0x7e, 0xf6, 0xaa, 0x28, 0x0b, 0xc0, 0x3b, 0xe8, 0xb1, 0x54, 0x22, 0x88, 0x16, 0x98, 0x3f, 0xb4, 0x45, 0x37, 0x20, 0x18, 0x46, 0xe9, 0x2d, 0xc9, 0xf1, 0xf5, 0x22, 0xe0, 0x03, 0xf4, 0xc3, 0x68, 0x72, 0xd7, 0xcb, 0x7a, 0xfe, 0x2b, 0x25, 0xa6, 0x09, 0x9c, 0x5e, 0x95, 0xa8, 0xb8, 0x5b, 0xed, 0xfa, 0xf6, 0x47, 0x75, 0xb9, 0xf7, 0xd0, 0x7a, 0x0e, 0x0b, 0x93, 0x71, 0xaa, 0xf7, 0xd4, 0xdd, 0x12, 0xf6, 0x73, 0x73, 0x3a, 0xfd, 0x1b, 0x7c, 0x56, 0x43, 0xbd, 0x7c, 0xed, 0x01, 0x3d, 0x11, 0x2f, 0x76, 0x6b, 0x1d, 0x88, 0x2f, 0x34, 0x27, 0x75, 0x85, 0x1a, 0xff, 0x97, 0x67, 0xe1, 0xa1, 0x06, 0x5a, 0x8b, 0x5c, 0xe7, 0xbd, 0x87, 0x34, 0x41, 0x52, 0x26, 0x84, 0x0c, 0xfa, 0x4e, 0xe8, 0x8b, 0xc0, 0x72, 0x59, 0xdc, 0x19, 0xc1, 0x9a, 0xce, 0x6a, 0x9e, 0xd4, 0xf2, 0xcb, 0x51, 0x7d, 0xf5, 0x0b, 0xfc, 0x7d, 0x2c, 0xf4, 0xd0, 0x94, 0x71, 0xd0, 0x80, 0xf6, 0x2e, 0x2c, 0xf6, 0x39, 0xb7, 0xdb, 0x46, 0x71, 0xdd, 0x3e, 0xe0, 0x9a, 0xc0, 0xc3, 0x09, 0x36, 0xe4, 0xac, 0x8c, 0x36, 0x87, 0x12, 0xac, 0x1e, 0x32, 0x29, 0x5e, 0x65, 0x8f, 0xc5, 0xb5, 0x1a, 0x7a, 0x1d, 0x9e, 0xce, 0x5a, 0xcf, 0xcd, 0xad, 0xb2, 0x25, 0xf7, 0xee, 0xf3, 0x97, 0x42, 0x6e, 0x95, 0x91, 0xfa, 0x97, 0x65, 0x76, 0x85, 0x87, 0x21, 0xe4, 0x99, 0x6e, 0x42, 0x3a, 0xac, 0x38, 0x19, 0x57, 0xac, 0x6d, 0x1d, 0xa5, 0xf1, 0x55, 0x84, 0x57, 0x70, 0x5f, 0x10, 0xee, 0x31, 0xc3, 0x2c, 0x02, 0x03, 0x67, 0x37, 0x3f, 0x6e, 0x00, 0x20, 0xae, 0xe9, 0x79, 0x33, 0x35, 0x4d, 0x98, 0x32, 0x62, 0x8a, 0xdf, 0xa8, 0x64, 0x98, 0xb0, 0x7a, 0x5a, 0xb1, 0xb5, 0xbf, 0xd1, 0xbe, 0x7f, 0xd1, 0x87, 0x0f, 0x6d, 0xa4, 0x75, 0x4e, 0xd0, 0x57, 0x0d, 0xb6, 0x4c, 0x09, 0xc1, 0x80, 0x82, 0xee, 0xc4, 0x9e, 0xeb, 0xa2, 0x14, 0xac, 0x07, 0xbd, 0xb8, 0x24, 0xb8, 0xa7, 0x46, 0xd1, 0xe8, 0xae, 0xa9, 0x86, 0x72, 0x55, 0x21, 0x0f ],
+const [ 0xbb, 0xa0, 0x96, 0x78, 0x75, 0xc4, 0x74, 0x3a, 0x54, 0xf5, 0xb6, 0x37, 0x53, 0x52, 0xca, 0xb3, 0xf6, 0x62, 0xf2, 0x79, 0x2e, 0x60, 0x47, 0xcd, 0x7d, 0xd6, 0xfd, 0xa1, 0x5a, 0x6e, 0xe8, 0x0c, 0xd7, 0x04, 0x3f, 0xf7, 0x81, 0xff, 0xa1, 0x1a, 0x88, 0xe2, 0x55, 0x27, 0x20, 0x1e, 0xd6, 0x44, 0x26, 0x2b, 0x8f, 0xbf, 0x07, 0xd6, 0xe3, 0xfd, 0xde, 0xdd, 0x70, 0xb4, 0xdc, 0xb9, 0x95, 0x5a, 0xed, 0xbb, 0x31, 0xde, 0x98, 0x5a, 0xae, 0x95, 0x27, 0xcc, 0x3f, 0x77, 0x09, 0xd3, 0x65, 0x8b, 0x74, 0xda, 0xb8, 0xa0, 0x4f, 0x40, 0xe4, 0x3e, 0x4e, 0xf4, 0xf2, 0xdc, 0x5f, 0x42, 0xc9, 0x53, 0x45, 0xec, 0xf4, 0x93, 0x82, 0x7d, 0xa5, 0x95, 0x7b, 0xda, 0xfa, 0x91, 0xd7, 0x1a, 0x80, 0x70, 0x28, 0x97, 0xf6, 0x84, 0xcd, 0x45, 0x53, 0x77, 0x17, 0x43, 0x0a, 0x81, 0xaa, 0xb0, 0x8c, 0xde, 0x26, 0xc0, 0x0e, 0x80, 0x07, 0x0f, 0x8d, 0x01, 0xca, 0x35, 0x10, 0xdb, 0x52, 0x9a, 0x2e, 0xdb, 0x89, 0x8c, 0xcf, 0xd3, 0x4a, 0x8e, 0x37, 0x90, 0x7f, 0xf3, 0x40, 0x0b, 0x86, 0xac, 0xe6, 0xe3, 0xda, 0x5f, 0x09, 0x0b, 0xef, 0xb9, 0x6f, 0xc0, 0x5d, 0x04, 0x09, 0xbf, 0x41, 0xfc, 0x77, 0xb4, 0xe0, 0xde, 0xcd, 0xf5, 0x8e, 0xc3, 0x98, 0x70, 0xcf, 0x2c, 0x1c, 0xe3, 0xbb, 0xde, 0xe0, 0x4b, 0xa7, 0xf0, 0x6d, 0x9e, 0x01, 0x22, 0x52, 0xbc, 0x7c, 0x70, 0x6b, 0xa3, 0x6d, 0xe7, 0x63, 0xe3, 0x75, 0xb8, 0x78, 0x53, 0x61, 0x8b, 0x7e, 0x01, 0x4e, 0x15, 0x27, 0x6f, 0x11, 0xed, 0x81, 0xfc, 0xd6, 0x9b, 0xc0, 0xa0, 0x06, 0xf2, 0x3e, 0xdc, 0x6f, 0xa1, 0xc0, 0xf1, 0x9f, 0x04, 0xfb, 0x51, 0x90, 0x40, 0x57, 0x53, 0x8b, 0x8e, 0xf2, 0x2a, 0x46, 0xd7, 0xe8, 0x18, 0x50, 0x82, 0xd2, 0xdf, 0xae, 0x8a, 0x8c, 0x79, 0xc7, 0xd3, 0x3c, 0x08, 0x7d, 0xbe, 0x8f, 0x10, 0x9d, 0xfb, 0x46, 0xe4, 0x79, 0x9e, 0xf2, 0x5e, 0xd3, 0x75, 0xfb, 0xd3, 0xfd, 0x99, 0xe7, 0x46, 0x3f, 0x44, 0xd9, 0xdc, 0x79, 0xe2, 0x58, 0x90, 0x09, 0x6b, 0x52, 0x28, 0xef, 0xef, 0x61, 0x68, 0x2f, 0x73, 0x4c, 0x85, 0x77, 0xfb, 0xd1, 0xdd, 0x02, 0xe8, 0xa2, 0xe4, 0xbc, 0x84, 0xad, 0x62, 0xa7, 0xdc, 0xa0, 0xdc, 0x7d, 0xce, 0xad, 0x4f, 0x97, 0x62, 0x8b, 0x25, 0x0d, 0x5e, 0xbd, 0x61, 0x1f, 0x14, 0x16, 0x1d, 0xd4, 0x7f, 0x7d, 0x36, 0xe0, 0x8e, 0xee, 0x46, 0xcb, 0xc0, 0xc1, 0xd2, 0x50, 0xf1, 0x2f, 0xc5, 0x04, 0x74, 0x12, 0x1d, 0x38, 0x61, 0xec, 0xe5, 0x1f, 0x30, 0x2b, 0x63, 0x34, 0x87, 0xab, 0x92, 0xd6, 0x51, 0x7d, 0xd3, 0x35, 0x10, 0xe7, 0xdf, 0x72, 0x74, 0xab, 0x00, 0x02, 0x2c, 0x8c, 0x81, 0x54, 0xfc, 0x0f, 0x62, 0xb3, 0x10, 0x7f, 0x51, 0x6d, 0x90, 0x33, 0xd6, 0x35, 0x74, 0x14, 0xce, 0xc6, 0x9a, 0x59, 0x1a, 0xc9, 0x15, 0x95, 0x98, 0xf9, 0xc9, 0xf4, 0x52, 0x85, 0x35, 0xc1, 0xf6, 0xb5, 0x8f, 0x2c, 0x87, 0xd1, 0x16, 0x4b, 0x51, 0x3f, 0xa4, 0x5e, 0x22, 0xeb, 0x82, 0x57, 0xb7, 0xec, 0x81, 0x9a, 0x75, 0x64, 0x46, 0x01, 0x5a, 0xa7, 0xe6, 0x23, 0x32, 0xa0, 0xb3, 0xd6, 0x0e, 0x71, 0x55, 0xf2, 0xf2, 0x5a, 0x1c, 0x58, 0xce, 0xdc, 0x94, 0x33, 0xaf, 0x1e, 0x5a, 0x7e, 0x37, 0x8f, 0x2f, 0xc7, 0x4b, 0xcd, 0x4b, 0x32, 0x0b, 0xc6, 0xf3, 0xc0, 0x07, 0x1d, 0x4e, 0xd1, 0xaf, 0xcf, 0x75, 0xe8, 0x0c, 0x16, 0xc9, 0xaf, 0xae, 0x8d, 0x89, 0x3b, 0xe6, 0x95, 0xa4, 0x90, 0x35, 0xf8, 0xcb, 0x68, 0x03, 0xcd, 0xcb, 0x30, 0x94, 0x9c, 0x1a, 0x54, 0x39, 0xc2, 0xaf, 0xbc, 0xc3, 0x16, 0x17, 0x97, 0x3d, 0xcc, 0xc6, 0x57, 0xdb, 0x9a, 0xab, 0xfc, 0x2d, 0x1a, 0x07, 0x96, 0x98, 0x70, 0x7e, 0x05, 0x07, 0x2c, 0x6f, 0x04, 0xde, 0x72, 0x81, 0x66, 0x30, 0x58, 0x7e, 0x9e, 0x31, 0x8f, 0x65, 0x85, 0xee, 0x46, 0xba, 0x58, 0x3b, 0x4b, 0x21, 0x00, 0xed, 0x73, 0x2b, 0x97, 0x4a, 0x3d, 0x70, 0x27, 0xbe, 0xb2, 0xde, 0xb5, 0xd0, 0x8f, 0x50, 0x7e, 0x53, 0xa6, 0x62, 0x80, 0xe1, 0x82, 0x84, 0x3c, 0x85, 0x4a, 0x4e, 0xbb, 0xb8, 0xe7, 0x14, 0xcf, 0x8f, 0x69, 0xb9, 0x9b, 0x32, 0xa7, 0xc8, 0x55, 0x90, 0x26, 0xc0, 0x4b, 0x51, 0x3d, 0xb0, 0x24, 0x0c, 0x76, 0x04, 0x69, 0xbb, 0x36, 0x9f, 0x44, 0x6c, 0xa1, 0x2a, 0x87, 0x39, 0xb8, 0xab, 0xef, 0x79, 0xc4, 0x59, 0xab, 0x38, 0xf8, 0xaf, 0x18, 0xe5, 0x52, 0xbf, 0xcf, 0x4b, 0xc2, 0xc9, 0xe1, 0xc3, 0x8e, 0x0c, 0x61, 0xa7, 0xf5, 0xdc, 0x23, 0x09, 0x13, 0xf5, 0xc4, 0xa5, 0x04, 0x0f, 0xea, 0x15, 0x4c, 0xb2, 0xcd, 0x44, 0x76, 0x4c, 0xf7, 0x25, 0xfc, 0x81, 0x48, 0xa5, 0x67, 0xc2, 0x3c, 0xde, 0xb7, 0x21, 0x71, 0x8d, 0x05, 0x63, 0x63, 0xc6, 0x67, 0x57, 0x7a, 0xe6, 0x14, 0x67, 0x48, 0xca, 0xc9, 0x6d, 0x0b, 0x3e, 0x6b, 0xc8, 0x7a, 0xb8, 0xed, 0xae, 0xbe, 0x47, 0x74, 0xc3, 0xbe, 0xc6, 0xb9, 0xeb, 0x9f, 0x55, 0xaf, 0x5d, 0x8b, 0x0a, 0x67, 0xfa, 0xb2, 0xe3, 0x30, 0xdc, 0x8f, 0xff, 0x02, 0x31, 0x6d, 0x0e, 0x1d, 0x4a, 0x29, 0x07, 0xed, 0xef, 0x39, 0x19, 0x31, 0xf6, 0xed, 0xe3, 0x5c, 0x14, 0xf5, 0xe7, 0x3b, 0xf2, 0x24, 0x3c, 0xd9, 0x83, 0x74, 0x84, 0xa0, 0x96, 0x49, 0x1e, 0xc0, 0xa7, 0xfa, 0x9d, 0xd5, 0xfb, 0x8d, 0x78, 0xc4, 0xec, 0xc2, 0x02, 0xe5, 0x81, 0x54, 0x9d, 0x68, 0x41, 0x7b, 0x2b, 0xf1, 0x49, 0xb5, 0xc6, 0x86, 0x9d, 0xc6, 0xb1, 0xab, 0xbc, 0xfd, 0x8e, 0xcb, 0x77, 0xba, 0xd1, 0xda, 0x02, 0x2d, 0x74, 0x39, 0x4c, 0x60, 0xed, 0xda, 0x8c, 0x78, 0x5d, 0xa4, 0x1c, 0x38, 0x0a, 0x19, 0x8b, 0xc6, 0x0f, 0x36, 0xee, 0xb2, 0x52, 0x9a, 0x76, 0x34, 0xb7, 0xeb, 0x48, 0xb5, 0x93, 0x76, 0x88, 0x91, 0x64, 0x15, 0xb7, 0x1c, 0xbf, 0x56, 0x40, 0xe3, 0x89, 0xd9, 0x4d, 0x34, 0x6a, 0xfa, 0xdf, 0xe0, 0x7f, 0xb0, 0x1e, 0x3f, 0x4f, 0xb5, 0xee, 0x75, 0x01, 0xe8, 0xc2, 0xf4, 0xcc, 0xef, 0xb5, 0x42, 0xae, 0x20, 0xd7, 0xfd, 0x61, 0xa2, 0xc4, 0x1c, 0x8b, 0xcf, 0x7c, 0x77, 0x35, 0xdd, 0x6e, 0x8a, 0x7e, 0xbe, 0xd6, 0x75, 0x90, 0x44, 0x49, 0x48, 0xd4, 0x89, 0x8e, 0x7e, 0x62, 0x8e, 0xb0, 0xc7, 0xbc, 0x22, 0x51, 0x0b, 0xbb, 0x06, 0x41, 0xab, 0xc9, 0x4e, 0x50, 0x0a, 0x51, 0x0a, 0x60, 0x4c, 0x74, 0x26, 0xbe, 0x5d, 0xfe, 0x8f, 0xb2, 0x35, 0x98, 0x97, 0x54, 0x5b, 0x3f, 0x9b, 0xa2, 0xa8, 0xf4, 0xe3, 0xd0, 0x4e, 0xb5, 0xc9, 0xdf, 0x19, 0xad, 0x1e, 0x71, 0xf4, 0xa8, 0xc9, 0xdc, 0xae, 0xc9, 0xb1, 0x7d, 0xfe, 0x7f, 0xde, 0x4f, 0xc5, 0xb5, 0xdb, 0xbb, 0x94, 0x49, 0x5e, 0xb2, 0x6e, 0xc0, 0x2a, 0xfa, 0xcf, 0x38, 0x35, 0xc5, 0xec, 0x9d, 0x06, 0x88, 0x3d, 0x20, 0x62, 0x0a, 0x39, 0xe5, 0x27, 0xbc, 0x61, 0xfc, 0x78, 0x48, 0x7f, 0x93, 0x1a, 0x6c, 0x30, 0x6a, 0x1e, 0x09, 0xa0, 0x87, 0xc1, 0x77, 0x95, 0x2a, 0x90, 0x1c, 0xaf, 0x03, 0xd0, 0x3d, 0xee, 0xa3, 0x1c, 0x13, 0x74, 0x31, 0x50, 0x22, 0x8c, 0x5e, 0xa6, 0xc6, 0xec, 0x9a, 0x1f, 0x0f, 0x37, 0x89, 0x25, 0xce, 0xc6, 0xb0, 0x6e, 0xf0, 0xa8, 0x75, 0x23, 0x0b, 0xe7, 0x46, 0x42, 0x37, 0x0d, 0x18, 0x41, 0x1f, 0xe7, 0x13, 0xf4, 0x58, 0x89, 0x8b, 0xb0, 0xf1, 0x92, 0x33, 0xb1, 0x4b, 0xb2, 0x8d, 0xb9, 0x2a, 0x69, 0xa5, 0xfa, 0x0d, 0x11, 0xff, 0x36, 0xbb, 0x1e, 0xce, 0x25, 0x1f, 0xa5, 0x66, 0x17, 0x55, 0x1b, 0xf4, 0xda, 0x05, 0x60, 0x6d, 0xde, 0xf0, 0xfb, 0xc4, 0x97, 0xc8, 0xa8, 0x60, 0x23, 0x45, 0x10, 0xcd, 0x2d, 0x75, 0xd7, 0xb2, 0x11, 0x54, 0xdb, 0x03, 0x40, 0x9c, 0xbb, 0x77, 0xe7, 0xde, 0x97, 0x3d, 0xcb, 0xd2, 0x17, 0xeb, 0x77, 0xec, 0xaf, 0xb7, 0x9a, 0x2f, 0x21, 0xe9, 0xab, 0x46, 0x43, 0x90, 0xce, 0xd1, 0x02, 0x74, 0xfb, 0xfd, 0xa7, 0x4d, 0x5d, 0x57, 0x59, 0x32, 0xf8, 0xe2, 0xe3, 0x54, 0x8f, 0x66, 0xb8, 0xec, 0xc5, 0x0c, 0x34, 0x72, 0x82, 0x28, 0x25, 0x10, 0x98, 0x56, 0x8a, 0x56, 0xa7, 0xc8, 0x9b, 0x2f, 0x3e, 0xde, 0x09, 0x14, 0x42, 0xf7, 0x86, 0x7f, 0x94, 0x88, 0x88, 0xa3, 0xee, 0x6b, 0x4a, 0x5a, 0x0e, 0x79, 0x14, 0x5f, 0x17, 0x5a, 0xbd, 0xbd, 0x34, 0x9c, 0x6e, 0x87, 0x7e, 0x03, 0xa8, 0xca, 0x20, 0x20, 0x89, 0xc0, 0xb8, 0x25, 0x4b, 0x46, 0x01, 0xf8, 0x0d, 0x90, 0xb0, 0x86, 0xd6, 0x1c, 0x9b, 0x5a, 0xd7, 0xe4, 0x20, 0x6e, 0xf0, 0xd8, 0xc5, 0x41, 0x76, 0x8b, 0x1c, 0x29, 0x34, 0x2d, 0xea, 0xeb, 0xaf, 0xb9, 0x87, 0x89, 0xaf, 0x6f, 0x88, 0x5b, 0xfa, 0x85, 0x9c, 0x61, 0x63, 0x1a, 0xb4, 0xd8, 0x03, 0x6b, 0x67, 0x0b, 0xc7, 0x49, 0x94, 0x6c, 0x2b, 0xcb, 0x49, 0xe3, 0x44, 0x40, 0xe3, 0x66, 0x04, 0x67, 0x77, 0xca, 0xba, 0xe3, 0x71, 0xd9, 0xd8, 0xe9, 0x7b, 0xa4, 0xf9, 0x3c, 0xa1, 0x1b, 0x22, 0x5b, 0xb2, 0xda, 0x48, 0xf8, 0xe9, 0x46, 0x13, 0xad, 0xcc, 0xd9, 0xe2, 0xeb, 0x55, 0xba, 0x0f, 0x33, 0x50, 0x91, 0x74, 0x88, 0x04, 0x99, 0x2e, 0x24, 0x15, 0xf7, 0xa0, 0x6a, 0xa9, 0x4a, 0xbb, 0x1c, 0xca, 0x83, 0x7d, 0xce, 0x0c, 0xf7, 0xb8, 0x9a, 0x6f, 0xb2, 0x15, 0x16, 0x86, 0x0e, 0x58, 0x83, 0xd9, 0x85, 0xe6, 0x47, 0x89, 0xc4, 0x84, 0x9e, 0x32, 0x00, 0x61, 0x8c, 0x15, 0x8d, 0x57, 0x16, 0x77, 0xad, 0x6e, 0xb1, 0x44, 0xa6, 0xa2, 0xfb, 0xf8, 0x17, 0xe6, 0xa9, 0xbf, 0x8b, 0x68, 0xc0, 0xdb, 0x4f, 0x17, 0x09, 0x47, 0x81, 0x63, 0xbe, 0x9a, 0x6a, 0x43, 0x8a, 0x2d, 0x0e, 0x7d, 0xb1, 0x80, 0x00, 0x22, 0x8a, 0xda, 0x7b, 0x57, 0x36, 0x30, 0xaf, 0x5b, 0x8c, 0x48, 0x59, 0xc6, 0x53, 0x1f, 0x96, 0x0f, 0xb4, 0x87, 0xf9, 0x51, 0xee, 0x14, 0xdb, 0x4f, 0x4c, 0x39, 0xf2, 0xb5, 0x55, 0xaf, 0x26, 0xa1, 0x42, 0x16, 0x9f, 0x61, 0xb5, 0xdf, 0x23, 0x7f, 0xa7, 0x69, 0x9f, 0xfa, 0xa2, 0x6a, 0x03, 0xd7, 0x31, 0x91, 0x53, 0xd8, 0x96, 0x6a, 0xfb, 0x8c, 0xba, 0x81, 0x64, 0x88, 0x6a, 0xca, 0xc4, 0xf3, 0xbf, 0x40, 0x3a, 0x48, 0xde, 0xcd, 0x1a, 0x57, 0xe2, 0x6a, 0x86, 0x8d, 0x17, 0x87, 0x3e, 0x76, 0x69, 0xad, 0xb8, 0x80, 0x1c, 0x62, 0x74, 0x02, 0xbd, 0x4d, 0x8a, 0x7c, 0x58, 0x9a, 0x85, 0x21, 0xeb, 0xa0, 0x73, 0x92, 0x1b, 0xc1, 0x3d, 0xed, 0x26, 0x92, 0x35, 0x06, 0x19, 0x3c, 0xee, 0xf4, 0x43, 0x23, 0x50, 0xd0, 0xe9, 0xc5, 0xeb, 0xb9, 0x3b, 0xe4, 0x8c, 0x1b, 0x87, 0xe7, 0x0e, 0x31, 0xad, 0x7e, 0x73, 0xc9, 0xd3, 0x85, 0x34, 0x48, 0x59, 0x2b, 0xd4, 0xed, 0x0f, 0x53, 0xbb, 0x5a, 0xa6, 0x3a, 0x42, 0x50, 0x65, 0x5a, 0x0b, 0xba, 0x1d, 0x8f, 0x93, 0xed, 0x5f, 0x79, 0x0a, 0x2e, 0xec, 0x21, 0x62, 0x74, 0x6d, 0xdf, 0xa6, 0x70, 0x65, 0x7b, 0x8d, 0xcb, 0x63, 0x92, 0x4f, 0xaf, 0x7c, 0x3b, 0xb7, 0x88, 0xf8, 0xeb, 0x79, 0x0c, 0x4c, 0x96, 0xc7, 0x79, 0x49, 0x17, 0x1f, 0x1d, 0x92, 0xd2, 0x67, 0x1c, 0x53, 0x98, 0x3b, 0x6e, 0x30, 0xcb, 0x86, 0x27, 0x7c, 0xc2, 0x4f, 0xfb, 0xac, 0x6e, 0xd6, 0x01, 0x0b, 0x3e, 0xe0, 0xb7, 0xaf, 0x41, 0x4f, 0x47, 0xab, 0x8b, 0xf5, 0x08, 0x86, 0xd9, 0xaa, 0x48, 0xec, 0x78, 0x9c, 0x49, 0xa4, 0x62, 0xe7, 0x89, 0xc2, 0xab, 0x66, 0x46, 0x1e, 0x1b, 0xc8, 0x42, 0x04, 0x1d, 0xe6, 0xc4, 0x2d, 0xd7, 0x53, 0xdf, 0xee, 0x9b, 0x35, 0xf6, 0xb0, 0x7e, 0x54, 0x80, 0xa0, 0x46, 0x71, 0x09, 0xa8, 0x8a, 0xd9, 0x79, 0x9d, 0x14, 0x3a, 0x99, 0xba, 0x8a, 0xb4, 0xd3, 0x4d, 0x4e, 0x33, 0x3a, 0xb0, 0xa2, 0xfd, 0xca, 0x7b, 0x10, 0x87, 0xf0, 0xf8, 0x09, 0x8d, 0x4d, 0xd7, 0xcc, 0x61, 0xb7, 0x23, 0x89, 0x84, 0x80, 0x75, 0xc6, 0x73, 0xfb, 0x68, 0x03, 0xc3, 0x3d, 0x4c, 0x99, 0x70, 0x21, 0x1f, 0xe8, 0x73, 0x8f, 0xb9, 0xb1, 0x92, 0xfd, 0x46, 0xc1, 0x7c, 0x35, 0xf9, 0xd0, 0x15, 0x59, 0xff, 0xa8, 0x0f, 0x25, 0xb2, 0x8a, 0xba, 0x75, 0x10, 0xcd, 0x1d, 0x07, 0x6b, 0xc8, 0x45, 0x81, 0x61, 0xf2, 0xdd, 0xb6, 0x0f, 0x48, 0xff, 0x25, 0x82, 0xef, 0x4a, 0xc2, 0x6e, 0x1b, 0x35, 0xfa, 0x23, 0x2f, 0xa2, 0xf1, 0xbc, 0x26, 0xb7, 0x0e, 0x9a, 0x31, 0xe9, 0xb9, 0x11, 0xa1, 0x59, 0x63, 0x60, 0x08, 0x64, 0xc7, 0xe7, 0x9b, 0x75, 0x70, 0x94, 0xdb, 0x1e, 0x7c, 0x9f, 0x75, 0x68, 0x9f, 0x77, 0x66, 0x67, 0x6b, 0xfc, 0x62, 0x11, 0xce, 0xee, 0x77, 0x50, 0xdc, 0xa5, 0xee, 0x55, 0xce, 0x03, 0x72, 0x30, 0x4b, 0xa8, 0x74, 0x9d, 0xe7, 0x64, 0xcd, 0x21, 0xea, 0xf2, 0xa5, 0x56, 0x52, 0xe3, 0x94, 0x83, 0x1b, 0xd8, 0x08, 0x70, 0xbd, 0xf4, 0xe7, 0x79, 0xf7, 0x91, 0x75, 0xe0, 0xcb, 0x32, 0x77, 0x68, 0xca, 0xb9, 0x99, 0x1f, 0x91, 0xdb, 0x0d, 0x7b, 0x94, 0xd0, 0x75, 0xa8, 0x1a, 0x4f, 0x03, 0x21, 0x89, 0xb9, 0xde, 0x7e, 0xe4, 0x95, 0xc8, 0x8c, 0x92, 0x3c, 0xff, 0xa3, 0x61, 0xd5, 0x60, 0x34, 0xca, 0x84, 0xd2, 0xa2, 0x77, 0xdf, 0xe2, 0x53, 0x02, 0xa2, 0xab, 0x06, 0x00, 0xa3, 0xf9, 0x67, 0x3e, 0x08, 0xae, 0xe0, 0x4a, 0xb7, 0x64, 0xb3, 0x35, 0x0e, 0x53, 0x46, 0x98, 0xd5, 0x75, 0xbd, 0xd5, 0x70, 0xe9, 0xce, 0x9f, 0x59, 0x96, 0xd1, 0xbd, 0xce, 0x10, 0x17, 0x0a, 0xc7, 0xbf, 0x7d, 0xc1, 0x2b, 0x3e, 0x41, 0xf7, 0x43, 0x01, 0x14, 0x69, 0x6f, 0x3b, 0x70, 0x78, 0x18, 0xfe, 0x2b, 0x72, 0xe5, 0xa4, 0x4d, 0x13, 0x32, 0x6f, 0x1f, 0x4c, 0xbe, 0x6c, 0x84, 0x42, 0xa3, 0x9d, 0x8c, 0x9a, 0x8c, 0x56, 0x47, 0xf4, 0x22, 0xe8, 0xd7, 0xb5, 0xc7, 0x7d, 0xc9, 0x0a, 0x87, 0x43, 0xa6, 0x2a, 0x4b, 0xcd, 0xc4, 0xdb, 0x50, 0xb6, 0x62, 0x37, 0xd8, 0x87, 0xf4, 0xb0, 0x20, 0xda, 0xbc, 0x52, 0x91, 0xc0, 0x9a, 0x48, 0x3a, 0x61, 0x25, 0xa2, 0x7e, 0xe2, 0xfa, 0x55, 0x0a, 0x8c, 0x55, 0x83, 0x0b, 0x2a, 0xde, 0xfd, 0x9d, 0xb2, 0xc5, 0x07, 0x86, 0x28, 0x10, 0x5b, 0x24, 0xc0, 0x34, 0x70, 0xa4, 0x43, 0xe3, 0xfb, 0x75, 0xb3, 0x26, 0xb7, 0xfc, 0x32, 0xab, 0x61, 0x8a, 0x20, 0x60, 0x07, 0x8b, 0x84, 0x41, 0x83, 0x00, 0xad, 0x6d, 0x43, 0x2f, 0x19, 0x80, 0x4b, 0x98, 0x95, 0x1d, 0x7c, 0x2c, 0xa6, 0xca, 0x16, 0xba, 0x28, 0x01, 0x7c, 0xaa, 0x35, 0x83, 0x37, 0xed, 0x48, 0xf0, 0x3e, 0x34, 0xa2, 0x95, 0x74, 0x60, 0xed, 0x85, 0x73, 0x3a, 0x20, 0xeb, 0x88, 0x65, 0xa2, 0x9e, 0xfe, 0x91, 0xb2, 0xf6, 0xa0, 0xf0, 0x06, 0xdf, 0x79, 0xee, 0xb2, 0x2b, 0xde, 0x1d, 0x4c, 0x2d, 0xaf, 0x6e, 0x4e, 0x83, 0xd9, 0xa7, 0xbb, 0x33, 0x1f, 0x11, 0x06, 0xfa, 0x1b, 0x71, 0x2f, 0xe0, 0x7f, 0x3a, 0x2f, 0x10, 0xa1, 0x01, 0x96, 0xe7, 0x37, 0x31, 0x73, 0x4b, 0x5e, 0x00, 0x74, 0x3e, 0xe2, 0xa2, 0x4e, 0xb2, 0xb9, 0xbc, 0x5f, 0x9f, 0xd0, 0x1b, 0x92, 0x54, 0x0b, 0xa6, 0x84, 0x0b, 0x87, 0x91, 0xe5, 0xbf, 0x22, 0xd4, 0x20, 0x42, 0x3d, 0xdc, 0x3e, 0x8a, 0xc0, 0x80, 0x07, 0x4b, 0x5f, 0x36, 0x6b, 0xcc, 0x1c, 0x87, 0x21, 0xf3, 0x0d, 0xc0, 0x8e, 0xa1, 0x60, 0xeb, 0xe8, 0x46, 0x9c, 0xfd, 0x9b, 0xac, 0x29, 0x51, 0xec, 0x17, 0x13, 0x55, 0xdc, 0x90, 0x0b, 0x84, 0x4f, 0x7e, 0xaf, 0x94, 0x6d, 0x76, 0x0b, 0xf0, 0x49, 0x54, 0x5f, 0x68, 0xc0, 0x8b, 0x22, 0x27, 0xa5, 0xb9, 0x48, 0xe6, 0x1b, 0x7f, 0xc1, 0x60, 0x41, 0x8f, 0x42, 0x06, 0x15, 0x06, 0x47, 0xf3, 0x92, 0xfd, 0x59, 0x22, 0x1c, 0x5a, 0x8c, 0xdf, 0x1e, 0xec, 0x4d, 0x7b, 0xf2, 0xb8, 0x5a, 0x44, 0x01, 0x8d, 0x12, 0xb4, 0x2b, 0xdf, 0xef, 0xe9, 0x69, 0xd2, 0x51, 0x55, 0xb0, 0x94, 0x7d, 0xb7, 0x19, 0xf0, 0xe5, 0x4a, 0x40, 0x20, 0xaa, 0x3c, 0xe9, 0xe3, 0x5f, 0x61, 0xea, 0xd0, 0x10, 0x29, 0x45, 0xea, 0x82, 0xd0, 0x94, 0x74, 0xbd, 0xd4, 0xaa, 0x07, 0xc8, 0xac, 0x77, 0xe1, 0xb4, 0xb7, 0x2c, 0x80, 0xdb, 0x73, 0xa0, 0x70, 0x6a, 0xef, 0xf2, 0x61, 0x1d, 0x83, 0x71, 0x7c, 0x4a, 0xbe, 0xb8, 0xf7, 0x21, 0xa0, 0x1d, 0xe7, 0x32, 0x09, 0x4d, 0x56, 0x30, 0x72, 0x30, 0x96, 0xf4, 0xdb, 0x13, 0xd4, 0xc4, 0x04, 0x05, 0xf0, 0xd6, 0xe0, 0x81, 0x8d, 0x10, 0x47, 0x4e, 0x64, 0x12, 0xeb, 0xa4, 0xdd, 0x76, 0x8d, 0x90, 0xe0, 0x56, 0x71, 0x99, 0xe8, 0x0f, 0x0f, 0xa4, 0x5a, 0x45, 0x0b, 0x15, 0x16, 0x28, 0x67, 0x37, 0x4b, 0xf5, 0xf8, 0xde, 0x8f, 0xbf, 0x16, 0x4b, 0x2f, 0x6f, 0x98, 0x4f, 0xc3, 0x0a, 0x00, 0xb4, 0x06, 0x32, 0xf2, 0xd8, 0xe5, 0xf0, 0xeb, 0x9b, 0xd6, 0xb0, 0x2f, 0x7b, 0x6b, 0x8d, 0x03, 0xfe, 0x27, 0xcf, 0x1d, 0x51, 0x90, 0xb2, 0x59, 0x2e, 0x85, 0x6a, 0xad, 0x02, 0xd2, 0x63, 0x5f, 0x50, 0x02, 0xcd, 0x75, 0x50, 0x75, 0x58, 0x6e, 0xdd, 0xb2, 0x3c, 0x2f, 0x8e, 0xfd, 0x7d, 0x40, 0x22, 0x2d, 0x6d, 0x38, 0x21, 0xb8, 0x72, 0x76, 0xc0, 0x10, 0x09, 0x12, 0x05, 0x32, 0x0b, 0x13, 0x2d, 0x7b, 0x30, 0xe3, 0x4b, 0xbe, 0xd1, 0x00, 0x31, 0x95, 0xf2, 0xf3, 0x93, 0xf4, 0x7f, 0x86, 0x6a, 0x04, 0xd6, 0x32, 0x97, 0x2e, 0x86, 0xd7, 0xc9, 0x75, 0x56, 0xb0, 0xa0, 0x0a, 0x8a, 0x85, 0x13, 0x1a, 0x61, 0x22, 0x0f, 0xeb, 0xe2, 0x09, 0x60, 0x27, 0xd8, 0x64, 0xd5, 0x78, 0x1c, 0x3d, 0x9f, 0x54, 0x12, 0xf1, 0xfb, 0x1b, 0x76, 0xe2, 0x11, 0x5f, 0x59, 0x6d, 0x1b, 0x82, 0x66, 0x1c, 0xc9, 0x87, 0x6a, 0x1c, 0xe4, 0x22, 0x14, 0xf1, 0x33, 0x11, 0xf9, 0x68, 0x9b, 0xaf, 0xda, 0xcd, 0x89, 0xc7, 0x2a, 0x5f, 0x95, 0xa6, 0xcb, 0x01, 0x5f, 0x74, 0x19, 0x32, 0xbd, 0xc4, 0x29, 0x3f, 0x19, 0x69, 0x52, 0xb7, 0x14, 0x8b, 0xed, 0x20, 0x6f, 0xfb, 0x5a, 0xe8, 0x2c, 0xc4, 0x44, 0x9f, 0xf0, 0x03, 0x25, 0x63, 0xac, 0xf8, 0x0c, 0x9b, 0x7c, 0x5c, 0x9e, 0xe8, 0xd0, 0xf5, 0x5a, 0x58, 0xc9, 0x69, 0x22, 0xdd, 0xe6, 0x50, 0xf7, 0xfe, 0xdf, 0x8c, 0x05, 0xcd, 0xd1, 0xdd, 0xdf, 0x19, 0x9c, 0xb0, 0x0b, 0xe4, 0x89, 0x38, 0xc1, 0x17, 0x31, 0xc0, 0xf0, 0x75, 0x9a, 0x40, 0x82, 0xce, 0xa2, 0x2e, 0xe1, 0x75, 0xa1, 0x96, 0xba, 0xf4, 0x4a, 0x6d, 0x01, 0xfd, 0xd2, 0x23, 0x35, 0xa4, 0x55, 0x77, 0xe5, 0xcc, 0x75, 0x8f, 0x73, 0xdf, 0x44, 0x48, 0x18, 0xc3, 0x64, 0xcb, 0x28, 0x09, 0x6c, 0x61, 0x97, 0x67, 0x8e, 0x88, 0xbd, 0x68, 0x77, 0x46, 0x56, 0x62, 0x77, 0xbd, 0xcd, 0xa9, 0xe2, 0x00, 0xba, 0x02, 0xb6, 0x25, 0xa9, 0x5a, 0x7d, 0x9b, 0x1d, 0xb8, 0x75, 0xbe, 0xd4, 0x71, 0xef, 0xa9, 0x4d, 0x9b, 0xf5, 0x4b, 0x88, 0xc3, 0x2f, 0xbe, 0x0d, 0xe3, 0x08, 0xd3, 0x2f, 0x8e, 0x0c, 0xf2, 0x92, 0x6e, 0x94, 0x21, 0xeb, 0xf0, 0xa6, 0x62, 0x07, 0x3e, 0x17, 0x42, 0x0f, 0x6e, 0xf2, 0xaf, 0x0a, 0xf8, 0x1e, 0x0a, 0xa3, 0x6e, 0x3a, 0x7d, 0x2c, 0x67, 0xcc, 0x8f, 0xe4, 0xbd, 0x9b, 0xf5, 0x75, 0xf8, 0x59, 0xab, 0xc1, 0x09, 0x85, 0x44, 0xde, 0x3c, 0x90, 0x7f, 0x5f, 0x68, 0x3f, 0x1a, 0xd6, 0x68, 0x50, 0xeb, 0x97, 0xcf, 0x60, 0x2c, 0xbe, 0xd8, 0x0c, 0x17, 0x73, 0x9c, 0x57, 0xb3, 0x6c, 0x88, 0x4b, 0xed, 0xb4, 0x0d, 0xe4, 0xea, 0xab, 0x99, 0x29, 0x9c, 0x4f, 0xc7, 0x9c, 0x93, 0xb9, 0xd3, 0xd4, 0x16, 0xea, 0x50, 0x69, 0x73, 0xc8, 0x1d, 0x10, 0x93, 0x64, 0x95, 0x07, 0xd1, 0x7e, 0x06, 0xb4, 0x0c, 0x4b, 0x64, 0x89, 0xfb, 0x76, 0x3f, 0x2a, 0xc1, 0x64, 0xf3, 0xd2, 0xc2, 0xbc, 0x1f, 0xf3, 0xb4, 0x27, 0x58, 0x1c, 0xf9, 0x54, 0x1e, 0x20, 0x2c, 0x40, 0x0e, 0x75, 0xfa, 0xb4, 0x5a, 0xda, 0x33, 0x0f, 0x77, 0x3c, 0x20, 0x45, 0x15, 0xdb, 0x18, 0x28, 0x54, 0xa9, 0x4e, 0xe6, 0x35, 0xf2, 0xed, 0xd3, 0x4e, 0x42, 0x67, 0x69, 0xc3, 0x84, 0x09, 0x8d, 0x71, 0x67, 0xd4, 0x14, 0x6c, 0x06, 0x88, 0x86, 0xac, 0xc7, 0x01, 0x22, 0x03, 0x83, 0xc6, 0x22, 0x52, 0xe8, 0xe0, 0x40, 0xfd, 0x1c, 0xe8, 0x78, 0x9c, 0xa3, 0x64, 0x10, 0xf4, 0x83, 0x54, 0xd6, 0x25, 0xa6, 0x07, 0xa9, 0x24, 0x7f, 0x33, 0x3a, 0x6c, 0xf1, 0x45, 0x14, 0xf1, 0x6c, 0xf6, 0xda, 0x56, 0x59, 0x1f, 0xd0, 0x5f, 0xb8, 0xce, 0x9d, 0xa9, 0x07, 0x99, 0x50, 0x99, 0x66, 0x32, 0xa0, 0x92, 0xfa, 0x3c, 0x78, 0x6b, 0x8f, 0x5d, 0xb3, 0x20, 0x81, 0x95, 0x24, 0xc7, 0xdc, 0xce, 0xd9, 0xc6, 0xc2, 0xb4, 0xa0, 0x44, 0x0d, 0xc6, 0xcb, 0xdd, 0x36, 0xad, 0x31, 0x9a, 0x76, 0xcd, 0x75, 0x20, 0x2a, 0x1b, 0x8b, 0x27, 0x7c, 0x2e, 0x77, 0x2e, 0x40, 0x98, 0x58, 0x6d, 0x1c, 0x76, 0xa6, 0x0c, 0xec, 0x46, 0xb8, 0x92, 0x64, 0xf9, 0x89, 0xa0, 0xf7, 0x49, 0xbb, 0xdf, 0xf8, 0x4d, 0xdc, 0x37, 0x00, 0x4b, 0xe9, 0x42, 0x8f, 0xcd, 0x10, 0x00, 0xf6, 0xf7, 0xba, 0xcc, 0x74, 0x17, 0xc9, 0x8e, 0x9f, 0x7e, 0x1e, 0x33, 0x05, 0x8f, 0x5f, 0x5a, 0x14, 0x15, 0xf7, 0x50, 0x37, 0xda, 0x5e, 0x3f, 0x42, 0x75, 0x9a, 0xa2, 0x10, 0x63, 0x06, 0xfc, 0x6a, 0x59, 0x52, 0xca, 0x2b, 0xd9, 0xcb, 0xb6, 0xa2, 0x04, 0xdc, 0x0d, 0x38, 0xaf, 0xd5, 0x73, 0x53, 0xb8, 0xec, 0xd6, 0x7a, 0x9a, 0x82, 0xa0, 0xb9, 0x40, 0xa7, 0x31, 0x47, 0x17, 0xdf, 0x8c, 0x66, 0x67, 0x26, 0x50, 0x8b, 0xe3, 0x33, 0xeb, 0xbf, 0x7f, 0xfa, 0x0a, 0x45, 0x81, 0x74, 0x53, 0x7d, 0xdb, 0xa2, 0x57, 0x08, 0xb8, 0xd0, 0xc2, 0x2d, 0x55, 0x17, 0xd5, 0x7b, 0x12, 0x25, 0x17, 0xb0, 0xc9, 0x41, 0x47, 0xda, 0x5e, 0x89, 0x94, 0xbc, 0x97, 0x7e, 0x11, 0x73, 0x2e, 0xc3, 0x63, 0x5a, 0x25, 0x22, 0xbc, 0x2a, 0x5a, 0xd0, 0x0e, 0x66, 0x5b, 0xf2, 0x78, 0xf6, 0x7b, 0x5f, 0x05, 0x11, 0x26, 0xa8, 0x95, 0x61, 0x71, 0x56, 0x1b, 0x62, 0xf5, 0x72, 0x09, 0x0c, 0xde, 0x4b, 0x09, 0xb1, 0x3f, 0x73, 0xee, 0x28, 0xa9, 0x0b, 0xea, 0x2b, 0xfb, 0x40, 0x01, 0xfe, 0x7b, 0x16, 0xbd, 0x51, 0x26, 0x65, 0x24, 0x68, 0x45, 0x20, 0xe7, 0x79, 0x41, 0xdd, 0xdc, 0x56, 0xb8, 0x92, 0xae, 0x4b, 0xd0, 0x9d, 0xd4, 0x4a, 0xcc, 0x08, 0xbf, 0x45, 0xdd, 0x0a, 0x58, 0xdc, 0x3a, 0xd1, 0xa9, 0x38, 0x72, 0x7e, 0xda, 0x37, 0x01, 0x72, 0x60, 0xc9, 0x22, 0xc8, 0x71, 0x9a, 0xe5, 0x22, 0xbb, 0xf1, 0x81, 0xa9, 0x55, 0xd8, 0xeb, 0x4f, 0xf6, 0x7d, 0xa8, 0x58, 0x65, 0xd8, 0xdf, 0x18, 0x30, 0x8e, 0xb2, 0xfe, 0xa1, 0x15, 0xce, 0xd1, 0xee, 0x19, 0x41, 0x3a, 0xb0, 0x1f, 0x8d, 0x83, 0x96, 0x69, 0xfa, 0x9e, 0x5b, 0x19, 0x30, 0x69, 0xf5, 0x99, 0x04, 0x30, 0x10, 0x39, 0x93, 0x73, 0xba, 0x1a, 0x8d, 0xea, 0x60, 0x4c, 0xd4, 0xc7, 0xf9, 0x33, 0x46, 0x3b, 0x81, 0x2f, 0xd6, 0x3b, 0xa9, 0x7b, 0xe2, 0x84, 0xcd, 0x56, 0xc1, 0xdd, 0x26, 0x61, 0x9b, 0x9c, 0x41, 0x49, 0x7d, 0x6b, 0xaf, 0xa5, 0xac, 0x4c, 0xff, 0x22, 0x3a, 0xdb, 0xe9, 0xdd, 0xd8, 0xd3, 0xcc, 0x10, 0xeb, 0xd4, 0x5b, 0xf1, 0xe2, 0x64, 0x92, 0xd7, 0xc6, 0x33, 0xf0, 0x9f, 0x12, 0xa3, 0xe0, 0x4e, 0xc6, 0x87, 0x78, 0xf7, 0xb7, 0x2b, 0x65, 0xe0, 0x29, 0x96, 0x26, 0xe0, 0x9f, 0x0b, 0x79, 0x0b, 0xf2, 0xd6, 0x13, 0x92, 0xa1, 0x45, 0x94, 0xe4, 0x68, 0xf4, 0xba, 0x19, 0x14, 0x4d, 0xd5, 0x91, 0x95, 0x50, 0x7b, 0xd8, 0x55, 0x90, 0x7c, 0xcd, 0xc8, 0x7e, 0x18, 0x04, 0x45, 0xea, 0x70, 0x68, 0x14, 0xc7, 0x3b, 0x25, 0xc8, 0x2f, 0xba, 0xc5, 0xce, 0xa7, 0xee, 0x98, 0x47, 0xa3, 0x08, 0x5a, 0x13, 0x4d, 0x21, 0x10, 0x2e, 0x82, 0x2b, 0x33, 0x40, 0x1d, 0x28, 0x10, 0x6f, 0x79, 0x9a, 0x6f, 0x78, 0x31, 0x3a, 0x73, 0xfe, 0x2a, 0xec, 0xc1, 0x22, 0xd4, 0xf3, 0xe4, 0x53, 0xac, 0x61, 0xf1, 0x67, 0x06, 0xd2, 0x66, 0xeb, 0x09, 0x5a, 0x58, 0xb8, 0xfb, 0xbc, 0xce, 0xc7, 0xbf, 0xdd, 0x68, 0x47, 0x9b, 0x78, 0x44, 0xec, 0x3f, 0x12, 0x21, 0x89, 0x03, 0x31, 0xc5, 0xe1, 0x71, 0xc9, 0x9d, 0xbb, 0x03, 0xf7, 0xa4, 0x34, 0x2d, 0xf1, 0x85, 0x59, 0x9e, 0x3e, 0x04, 0xf5, 0xc4, 0x22, 0x9a, 0xa8, 0x8e, 0x5d, 0x5f, 0x39, 0x75, 0x15, 0x2e, 0x2d, 0xbd, 0x10, 0x03, 0x99, 0xf8, 0x26, 0xa7, 0x34, 0xcd, 0xf6, 0x90, 0xb0, 0xf7, 0xd9, 0x02, 0x4b, 0x90, 0x14, 0x7b, 0xa1, 0x90, 0x52, 0x4e, 0xc4, 0x91, 0x51, 0x8e, 0x8e, 0xd5, 0xdb, 0x2d, 0x36, 0x89, 0xf8, 0x65, 0x22, 0x4b, 0x62, 0x57, 0xfc, 0xeb, 0x39, 0xf3, 0x08, 0x6e, 0xf8, 0x17, 0xb5, 0x59, 0xa8, 0xfb, 0x72, 0x2c, 0x53, 0xcc, 0xc2, 0x2c, 0xbc, 0x97, 0x93, 0x65, 0x4d, 0x69, 0xcc, 0xf0, 0x51, 0xb5, 0x25, 0x72, 0x63, 0xf5, 0x3b, 0xe5, 0x26, 0x94, 0xe4, 0x9b, 0x37, 0x0c, 0xbf, 0x7f, 0x60, 0x4c, 0x10, 0x9f, 0x0f, 0x5c, 0xcb, 0xe7, 0x06, 0x43, 0xef, 0x2f, 0x53, 0x29, 0x15, 0x79, 0x83, 0xb9, 0x49, 0x73, 0x13, 0xc9, 0x18, 0x44, 0x27, 0x3d, 0xea, 0x84, 0x7e, 0x28, 0x93, 0x8c, 0xa6, 0x35, 0x24, 0xf1, 0x6c, 0x46, 0x07, 0x4b, 0x97, 0x5a, 0x4b, 0x3b, 0xd6, 0xb4, 0x3c, 0xac, 0xf6, 0x3a, 0x37, 0x58, 0x58, 0x1b, 0xbc, 0x8e, 0xa3, 0xb4, 0xc5, 0x33, 0xb6, 0xb5, 0x56, 0x08, 0xe1, 0x7f, 0x56, 0x2a, 0x54, 0xd1, 0x9d, 0xdf, 0xd7, 0xa4, 0x4e, 0x8f, 0xbc, 0x53, 0x67, 0x11, 0x12, 0xff, 0x96, 0x29, 0x1c, 0x32, 0x4f, 0x4e, 0x02, 0xc2, 0x1b, 0xb0, 0xc5, 0xf9, 0x33, 0x79, 0x78, 0xf2, 0x4d, 0x53, 0xae, 0x46, 0xb6, 0x2b, 0x2f, 0xe9, 0xa1, 0x35, 0xef, 0x4e, 0xbf, 0x31, 0x40, 0xd2, 0x0f, 0xec, 0x46, 0x57, 0xf8, 0x09, 0xab, 0x2f, 0x95, 0x01, 0x95, 0x3d, 0x50, 0x69, 0xd5, 0x56, 0xb2, 0x74, 0x62, 0xed, 0x79, 0xb8, 0x05, 0xf0, 0xeb, 0x35, 0x55, 0xed, 0x6b, 0x93, 0xe6, 0x79, 0x4a, 0xab, 0xbe, 0xd2, 0xdf, 0x49, 0x08, 0xc3, 0xda, 0x30, 0x0d, 0xc8, 0xd5, 0x5f, 0x5f, 0x73, 0x2c, 0x93, 0x57, 0x0e, 0x0f, 0x0d, 0xc2, 0x82, 0xd5, 0x95, 0xd8, 0x78, 0x93, 0xbf, 0x6e, 0xbd, 0xee, 0x6d, 0x6c, 0xeb, 0x2d, 0x95, 0x80, 0x46, 0x93, 0x45, 0x14, 0xe4, 0xeb, 0xe4, 0x7e, 0x11, 0x64, 0xba, 0x77, 0xf1, 0x9f, 0xb3, 0xcf, 0x67, 0x07, 0x5f, 0x5f, 0x36, 0x61, 0x3e, 0x3e, 0x66, 0xa3, 0x3b, 0x38, 0xea, 0x0a, 0x76, 0x7b, 0x7f, 0x67, 0x46, 0x94, 0xd7, 0xba, 0x7f, 0x9a, 0xf7, 0x01, 0xf0, 0xa9, 0xde, 0x52, 0x30, 0x92, 0x67, 0x28, 0x9b, 0xd1, 0x70, 0xfb, 0x97, 0xc0, 0x3c, 0x13, 0x1c, 0x0a, 0x16, 0x9d, 0x73, 0x61, 0x37, 0xff, 0x3d, 0x74, 0xea, 0x69, 0xb8, 0x1b, 0xee, 0xac, 0x3e, 0xd5, 0x1c, 0x50, 0x0e, 0x75, 0x49, 0xe0, 0x4f, 0x18, 0x6e, 0x89, 0x52, 0x5a, 0x07, 0xe4, 0x18, 0xca, 0xb8, 0x0f, 0x14, 0x9b, 0x36, 0x02, 0x31, 0x9c, 0x65, 0x20, 0x17, 0x6a, 0xbe, 0x0d, 0xaa, 0xe3, 0xf4, 0xc0, 0xd4, 0xdf, 0xd7, 0xd9, 0x85, 0x1b, 0x78, 0x34, 0xf8, 0x76, 0x8e, 0xbe, 0x37, 0x60, 0x18, 0x87, 0xe1, 0x8f, 0x44, 0x19, 0x2b, 0xf3, 0x90, 0x09, 0x25, 0xed, 0x2f, 0xcb, 0x3f, 0xbc, 0xae, 0xca, 0x0b, 0x38, 0xd7, 0xb8, 0x44, 0xc2, 0xd6, 0x23, 0x10, 0x7b, 0x9a, 0x4a, 0x82, 0xb4, 0x7e, 0x2e, 0x63, 0xa6, 0x29, 0xec, 0x32, 0x63, 0xb2, 0x49, 0x69, 0x0d, 0x08, 0x8f, 0x02, 0x46, 0x92, 0x98, 0x3a, 0xe7, 0x12, 0x28, 0x95, 0xf5, 0xcf, 0x80, 0x22, 0xd1, 0xf3, 0x2f, 0x00, 0xae, 0x32, 0x2c, 0x21, 0x48, 0xac, 0x22, 0x4e, 0xd4, 0x15, 0x0b, 0x6b, 0x32, 0x13, 0x00, 0xfd, 0x6a, 0xe7, 0x4f, 0xe9, 0x56, 0x50, 0xcf, 0x7e, 0x9c, 0xac, 0x70, 0xb6, 0xe0, 0x61, 0x16, 0xb9, 0x37, 0x7b, 0xa8, 0xa3, 0xde, 0x97, 0x63, 0x87, 0x2c, 0xff, 0x75, 0xb4, 0xc5, 0x16, 0xc7, 0x37, 0x11, 0xf7, 0x1a, 0xa1, 0xec, 0x59, 0x55, 0x0a, 0x9f, 0xb6, 0x1d, 0x55, 0x0f, 0xac, 0xa7, 0xb6, 0x35, 0xa3, 0xca, 0x72, 0xce, 0xb0, 0x59, 0xe6, 0x54, 0xb9, 0xaf, 0xcb, 0x2c, 0xda, 0x8b, 0xb8, 0x21, 0x08, 0x1f, 0xe8, 0x11, 0xf4, 0x63, 0x3e, 0xe6, 0x32, 0xaf, 0x86, 0xc8, 0x9b, 0x89, 0xfe, 0x92, 0xf0, 0xbc, 0x15, 0x82, 0xc0, 0xaa, 0x72, 0x34, 0x8b, 0xe2, 0x38, 0xd1, 0x27, 0xf5, 0x89, 0x84, 0x63, 0x86, 0x49, 0x2d, 0xeb, 0xa1, 0x24, 0x5a, 0x6b, 0x4e, 0xd2, 0x73, 0xf7, 0x65, 0x99, 0x34, 0xab, 0xa3, 0x14, 0x60, 0x8e, 0xfe, 0x34, 0xb4, 0xbc, 0x36, 0x84, 0x1a, 0xc5, 0xad, 0xb1, 0x20, 0x50, 0x78, 0x49, 0xa8, 0x04, 0xb6, 0xc3, 0xe1, 0xa8, 0x20, 0xc0, 0x76, 0x88, 0xe2, 0x90, 0x05, 0x1b, 0xaa, 0xf8, 0xd2, 0xe4, 0xfe, 0x32, 0xbd, 0x96, 0xd2, 0x36, 0x71, 0x7b, 0x5a, 0x38, 0xdf, 0x16, 0x1d, 0x72, 0xeb, 0x08, 0x4b, 0x23, 0x64, 0x30, 0x50, 0xd8, 0x3a, 0x16, 0xa9, 0xea, 0xeb, 0x8a, 0xf6, 0x48, 0x3f, 0x88, 0x51, 0x76, 0x35, 0x5f, 0xdf, 0xd6, 0x3d, 0x12, 0xa4, 0x27, 0xa7, 0xff, 0x9c, 0x4b, 0x5c, 0xbe, 0x07, 0x4d, 0xcc, 0x4c, 0x04, 0xa2, 0x27, 0x69, 0x61, 0xaf, 0xd0, 0x3e, 0xb2, 0x8c, 0x0f, 0x43, 0xa0, 0x08, 0x06, 0x60, 0x84, 0xed, 0xe6, 0x53, 0x35, 0x85, 0x62, 0x51, 0x1d, 0x5c, 0x64, 0xf0, 0x93, 0x48, 0xff, 0x44, 0x65, 0xa7, 0xa6, 0x48, 0xb3, 0xe8, 0x9b, 0x80, 0x04, 0x4d, 0xa9, 0xdd, 0x93, 0xee, 0x16, 0xe1, 0xea, 0x02, 0xd4, 0x03, 0xb2, 0x5a, 0xf7, 0x55, 0xca, 0x2e, 0x6c, 0x64, 0x96, 0x1c, 0xe7, 0x60, 0x9a, 0x6e, 0x1d, 0x7d, 0x47, 0x9c, 0x34, 0x98, 0x14, 0x11, 0x77, 0x1e, 0xd1, 0x32, 0x4f, 0x2a, 0x38, 0x9d, 0x6e, 0xed, 0xc6, 0xae, 0x4e, 0x53, 0xc9, 0x48, 0xda, 0xe3, 0xb9, 0xd2, 0x6b, 0xe8, 0xcb, 0x7f, 0xf5, 0xce, 0xc4, 0xd3, 0x83, 0xce, 0x0b, 0x63, 0xe0, 0xce, 0x03, 0xdc, 0x97, 0x82, 0x97, 0x46, 0x1e, 0xd8, 0x17, 0x8a, 0x4f, 0x93, 0x42, 0x32, 0x17, 0x35, 0xa4, 0x71, 0x72, 0x23, 0x22, 0x63, 0x97, 0x04, 0xd3, 0x95, 0x6f, 0x6a, 0x11, 0xc8, 0x4c, 0xb4, 0xd0, 0xf2, 0xd8, 0x33, 0x2f, 0x86, 0x4c, 0x8b, 0x4d, 0xf5, 0xe2, 0x5c, 0x5e, 0x75, 0x8c, 0x22, 0xfe, 0x01, 0xe6, 0x5a, 0xc4, 0xa1, 0x69, 0xe7, 0x1b, 0xeb, 0xe2, 0xb3, 0x4d, 0xca, 0x23, 0x99, 0xe1, 0x7e, 0xf9, 0x83, 0x27, 0xe4, 0x5e, 0xcf, 0x11, 0xf8, 0xef, 0xf8, 0x44, 0x98, 0xa0, 0x72, 0x6f, 0x8b, 0xae, 0xd5, 0xdc, 0xc1, 0xd5, 0x3e, 0x45, 0xdc, 0xc4, 0xf2, 0xe8, 0xf0, 0xce, 0x45, 0xdd, 0x87, 0xe2, 0xbb, 0xa8, 0xe9, 0xbd, 0x6c, 0x0b, 0x9a, 0x5e, 0xad, 0x1e, 0x23, 0xba, 0xec, 0xa1, 0x15, 0xb2, 0xdc, 0x90, 0x4c, 0x42, 0xd3, 0xf8, 0x71, 0xfb, 0x70, 0x0a, 0xc2, 0xb3, 0x80, 0x6d, 0x16, 0x7b, 0x22, 0xd9, 0x1b, 0xd1, 0x2a, 0xe2, 0xe3, 0x17, 0xc4, 0x11, 0x9f, 0x44, 0x5a, 0x39, 0xaa, 0xda, 0xb7, 0x08, 0xc9, 0x18, 0x6c, 0xdd, 0xb1, 0x70, 0x72, 0xd9, 0xc9, 0x3b, 0x12, 0x39, 0x32, 0xac, 0x02, 0xe3, 0x05, 0x02, 0xd1, 0x3e, 0xdb, 0x02, 0x84, 0x47, 0x93, 0xa5, 0x82, 0xe2, 0x4f, 0x0e, 0xad, 0x6d, 0xc0, 0xbe, 0xd2, 0x9b, 0xa4, 0x0b, 0x43, 0x80, 0x8c, 0xce, 0xc2, 0xe8, 0xe3, 0x5d, 0xa1, 0xed, 0x2c, 0xb9, 0x28, 0xc9, 0x8b, 0x08, 0x37, 0xe8, 0x87, 0x45, 0x2c, 0x42, 0x0e, 0x36, 0x07, 0xe7, 0xb9, 0x9e, 0xcd, 0xdb, 0x52, 0xb5, 0x2a, 0x25, 0x94, 0xd5, 0x59, 0x23, 0x31, 0x76, 0x49, 0x20, 0x1a, 0x5c, 0xf8, 0x28, 0xfa, 0x0f, 0x23, 0x1b, 0x03, 0x8c, 0x22, 0x01, 0xee, 0x3a, 0x0e, 0x9d, 0x3d, 0x1f, 0x24, 0x45, 0xc4, 0x54, 0x6e, 0xf1, 0x67, 0xb6, 0xa0, 0x91, 0x25, 0xdf, 0x40, 0xa4, 0x56, 0x55, 0x09, 0x06, 0x30, 0x00, 0x92, 0x09, 0x90, 0xe2, 0x2b, 0xc8, 0xf8, 0x02, 0x07, 0xb8, 0xd3, 0xa9, 0xa1, 0x80, 0x01, 0xd1, 0x58, 0x0b, 0x8f, 0xdb, 0x5c, 0xdb, 0xc6, 0x80, 0xce, 0xa0, 0x68, 0x0a, 0x23, 0x09, 0x36, 0xc4, 0xca, 0xda, 0xb5, 0xaf, 0x0e, 0x3f, 0x32, 0x76, 0x3d, 0x5f, 0x04, 0xa4, 0x0a, 0x35, 0x11, 0x15, 0x30, 0x9b, 0x94, 0xaa, 0x58, 0xa8, 0x1d, 0x41, 0x3d, 0x3c, 0xd9, 0xe5, 0x0e, 0xd9, 0x13, 0x41, 0x14, 0xb5, 0xfb, 0x5b, 0x94, 0x0d, 0xa6, 0x7f, 0xf7, 0xbb, 0x57, 0x78, 0x28, 0x0b, 0xfd, 0x07, 0x3e, 0xcb, 0xfc, 0x8d, 0x5b, 0xa1, 0x30, 0x0b, 0xd3, 0xa2, 0x2f, 0x4c, 0x91, 0x1f, 0xcf, 0x61, 0xb7, 0xc2, 0xe9, 0x4e, 0x85, 0xda, 0x5c, 0x03, 0x7c, 0xf4, 0x54, 0x8e, 0xc3, 0xab, 0xcc, 0x8e, 0xc9, 0xc1, 0x51, 0xeb, 0x2c, 0x6e, 0x09, 0xc4, 0xda, 0xf7, 0xf5, 0xa9, 0x76, 0x83, 0x73, 0x0b, 0xfd, 0x2b, 0x07, 0xf0, 0xa9, 0x50, 0x5a, 0xeb, 0x15, 0x31, 0x83, 0x4c, 0xa3, 0xbc, 0x86, 0x94, 0x1b, 0xa5, 0x1a, 0x2c, 0x94, 0xb6, 0xb0, 0x56, 0x98, 0x66, 0xb0, 0x63, 0x83, 0xac, 0x06, 0x27, 0x2c, 0x15, 0xdd, 0xaa, 0xc7, 0x15, 0xaa, 0x20, 0x0a, 0x9a, 0x6d, 0x1b, 0x8f, 0xe7, 0x34, 0x00, 0x7a, 0xa0, 0xe0, 0xb7, 0x5b, 0x21, 0x2b, 0xa7, 0x56, 0x14, 0xea, 0xe2, 0x81, 0x43, 0x90, 0x9c, 0x8d, 0xaa, 0xf4, 0xe2, 0xa9, 0xd1, 0x54, 0x89, 0xa3, 0x59, 0x99, 0x64, 0x50, 0xd4, 0xdc, 0xba, 0x2f, 0xda, 0x2a, 0xf6, 0x49, 0x59, 0x84, 0xa1, 0x5b, 0x2c, 0x2a, 0x8e, 0x37, 0xef, 0x1a, 0x54, 0x68, 0x12, 0xd3, 0x01, 0x15, 0x2d, 0x5e, 0x0d, 0x28, 0x93, 0x8f, 0x8d, 0xae, 0x2a, 0x89, 0xa9, 0x81, 0x7a, 0x80, 0x50, 0x25, 0x03, 0xc3, 0x2b, 0xf1, 0xd4, 0xf9, 0xcf, 0x6f, 0x59, 0xaa, 0x36, 0x05, 0x75, 0x02, 0x70, 0xd4, 0xd0, 0xd2, 0x96, 0xe0, 0x73, 0xd8, 0x00, 0x71, 0x92, 0x40, 0xb7, 0xba, 0xa8, 0x6a, 0x2d, 0xb9, 0xca, 0xee, 0x2c, 0x5e, 0x34, 0xde, 0x0d, 0xef, 0x29, 0x4b, 0x2a, 0xab, 0xfa, 0x0a, 0x96, 0xae, 0x64, 0xb7, 0x0b, 0x14, 0x1e, 0xfb, 0x23, 0x61, 0xb3, 0x0b, 0xcb, 0x21, 0x8e, 0x71, 0xf5, 0xcb, 0x53, 0x0f, 0x8e, 0xeb, 0x76, 0x61, 0xb0, 0x80, 0x06, 0x02, 0x18, 0xa3, 0xc9, 0x72, 0xda, 0x6a, 0x8e, 0x16, 0x53, 0x0c, 0xbf, 0x80, 0x60, 0x46, 0x36, 0xf1, 0xcd, 0xfd, 0x51, 0x1c, 0x11, 0x24, 0x49, 0x2d, 0x38, 0xe0, 0xbf, 0x0a, 0x20, 0xea, 0x98, 0xd9, 0xe8, 0x36, 0x0b, 0xc2, 0xa6, 0xd2, 0xf8, 0xf6, 0x58, 0x10, 0x7c, 0xf0, 0x1e, 0xe7, 0xc2, 0xfb, 0xa6, 0x97, 0x1c, 0xf4, 0xe7, 0x8c, 0x52, 0x51, 0x12, 0x85, 0x3a, 0x62, 0xc5, 0xf5, 0x88, 0xd7, 0x82, 0xa9, 0xe8, 0x83, 0x61, 0xac, 0x4a, 0x5f, 0x01, 0x68, 0x7d, 0xd2, 0xc4, 0x0d, 0x00, 0x2f, 0x3c, 0x37, 0x15, 0x80, 0xe0, 0xcb, 0x16, 0x82, 0x04, 0x21, 0x0c, 0xf0, 0x08, 0x69, 0x7e, 0x04, 0xcf, 0x47, 0x87, 0x3c, 0x72, 0xc1, 0x2b, 0x5a, 0x36, 0x5b, 0xeb, 0xae, 0xbc, 0x80, 0x97, 0x97, 0x78, 0x24, 0x64, 0x48, 0x64, 0xa8, 0x3f, 0xc8, 0xf6, 0xfe, 0x60, 0x3c, 0x4f, 0x0d, 0x21, 0x69, 0xb5, 0x57, 0x11, 0x75, 0x43, 0xd9, 0x44, 0xed, 0xdf, 0x32, 0xee, 0x0d, 0x6d, 0x08, 0x30, 0x3b, 0x42, 0xa8, 0x32, 0xd4, 0xdc, 0xec, 0x72, 0x2b, 0xd0, 0x62, 0x5c, 0xcf, 0x03, 0xaa, 0x1a, 0x0d, 0x1d, 0x20, 0xad, 0xb6, 0x3b, 0xbc, 0x3d, 0x23, 0xe5, 0x36, 0xad, 0x75, 0x3f, 0x6d, 0x73, 0x21, 0x83, 0x09, 0xa7, 0xad, 0xae, 0x5f, 0x59, 0xb4, 0x7a, 0x96, 0x28, 0x30, 0x8d, 0x08, 0x10, 0xf9, 0xf0, 0xeb, 0x84, 0x88, 0xc2, 0x31, 0xbd, 0x01, 0x2e, 0xac, 0x51, 0x71, 0x9a, 0x76, 0x07, 0x53, 0x21, 0x90, 0xea, 0x5a, 0x44, 0xc9, 0x9c, 0x6a, 0xdc, 0xe2, 0xed, 0xe7, 0x53, 0xef, 0xac, 0x33, 0x14, 0x00, 0xbe, 0x72, 0x40, 0x01, 0x6c, 0x91, 0xa3, 0xdf, 0x01, 0x86, 0xe6, 0xed, 0x95, 0xd9, 0x06, 0x85, 0x24, 0x63, 0x05, 0xf2, 0xe3, 0x56, 0xdf, 0x8d, 0xd3, 0x7d, 0xbf, 0x27, 0x96, 0xc5, 0x73, 0xa7, 0x82, 0xfd, 0x1d, 0xf4, 0xf4, 0xda, 0x2c, 0x16, 0xe6, 0x3e, 0x8b, 0x98, 0xc4, 0xb9, 0x18, 0x30, 0x7c, 0x51, 0x58, 0xa2, 0xd5, 0x7e, 0x69, 0xe1, 0x01, 0x79, 0x38, 0x77, 0x75, 0xb6, 0xf4, 0x28, 0xf8, 0xaf, 0xc2, 0xd2, 0xfa, 0xe4, 0xb2, 0x98, 0x28, 0x20, 0xf1, 0x3f, 0x3d, 0xfd, 0x41, 0xd8, 0x1b, 0xaa, 0xa7, 0xa0, 0x1a, 0xec, 0x63, 0x24, 0xa0, 0x63, 0x25, 0xa9, 0xf2, 0x0f, 0x7e, 0xca, 0x49, 0x13, 0x95, 0x63, 0x29, 0xb8, 0x1b, 0xae, 0xee, 0xb4, 0x81, 0xac, 0xa8, 0xad, 0x68, 0xc7, 0x28, 0xf9, 0x59, 0xb5, 0x5b, 0xa8, 0xb6, 0x9f, 0xd7, 0xc4, 0xf0, 0x83, 0xb4, 0xd7, 0xfb, 0xd7, 0x9d, 0xae, 0xff, 0x6f, 0x26, 0x5d, 0x51, 0xa0, 0x60, 0x83, 0xa1, 0xa6, 0xac, 0xcf, 0x75, 0x43, 0xcc, 0xc3, 0xd6, 0xa9, 0x40, 0xb8, 0x48, 0x9a, 0xcf, 0x23, 0x00, 0xce, 0x64, 0x16, 0x52, 0x95, 0x1b, 0x0a, 0x69, 0xbd, 0x9c, 0xdb, 0x3a, 0xb6, 0xa8, 0x14, 0xba, 0xf4, 0xf1, 0x6d, 0x4f, 0x95, 0x2f, 0x92, 0x85, 0x44, 0x70, 0x26, 0x03, 0x5d, 0xaf, 0x08, 0xbd, 0x51, 0xa9, 0xd5, 0x6b, 0x4d, 0xec, 0xae, 0x39, 0x16, 0x31, 0x3b, 0xc0, 0x38, 0xeb, 0xef, 0x35, 0x5f, 0x20, 0x8e, 0xe0, 0x05, 0x78, 0xed, 0xd0, 0x4d, 0x94, 0xfa, 0xce, 0x2f, 0xa0, 0xfb, 0x8f, 0xd6, 0x2c, 0x1b, 0x2e, 0x46, 0x37, 0x22, 0xd9, 0x42, 0x8d, 0x84, 0xca, 0x6d, 0x54, 0x9d, 0x78, 0xaf, 0xe1, 0x3b, 0x0f, 0xda, 0xd0, 0x5d, 0x1e, 0x8e, 0x53, 0x3a, 0x90, 0x5a, 0xca, 0x85, 0xde, 0x23, 0x94, 0xf0, 0x83, 0xca, 0x25, 0xef, 0xaf, 0x09, 0x59, 0xbe, 0x3f, 0x9e, 0x08, 0xa5, 0xed, 0xac, 0xdb, 0x7b, 0xc4, 0x5e, 0x5e, 0x69, 0xd8, 0xcd, 0x56, 0xf0, 0x33, 0x24, 0x54, 0x2d, 0x12, 0x02, 0x8a, 0x5c, 0x52, 0x1f, 0xde, 0x9c, 0x25, 0x33, 0x3d, 0xf1, 0x09, 0x13, 0x32, 0x8f, 0xfb, 0x1d, 0xb7, 0x56, 0xe7, 0xd7, 0x4b, 0x99, 0x64, 0xd3, 0x44, 0x23, 0x9e, 0xd6, 0x67, 0x7c, 0x93, 0x38, 0xb6, 0x68, 0x83, 0x8e, 0x89, 0xb1, 0xa1, 0x87, 0xe0, 0x26, 0x0f, 0x14, 0xf8, 0xe4, 0x09, 0xcc, 0x1c, 0xd4, 0x61, 0x8e, 0xbe, 0x75, 0x2b, 0x68, 0xc6, 0xdc, 0xb9, 0xb7, 0x2a, 0xf9, 0xca, 0x90, 0xbf, 0x1b, 0xfe, 0x5f, 0x4f, 0xb6, 0x8d, 0xce, 0xeb, 0x65, 0x39, 0xe9, 0x82, 0x2b, 0x81, 0x7f, 0xb3, 0xfe, 0x18, 0xcb, 0xe0, 0x86, 0x95, 0x53, 0x84, 0x22, 0x6c, 0x11, 0xc6, 0x2c, 0x1d, 0xd1, 0x4e, 0x7e, 0xab, 0xda, 0x57, 0x34, 0x50, 0xd0, 0x05, 0xb4, 0x6f, 0xd9, 0xf9, 0xec, 0xca, 0xff, 0x24, 0xdb, 0xf5, 0xd6, 0xd8, 0x53, 0x0b, 0x5e, 0x25, 0xfd, 0x9f, 0x2a, 0x62, 0x9d, 0xf5, 0xc2, 0x0a, 0x97, 0x72, 0x47, 0xca, 0xb3, 0x52, 0x55, 0xd7, 0x1d, 0x99, 0x2d, 0x85, 0xb0, 0x4c, 0x14, 0x16, 0x73, 0xe0, 0xf6, 0xcf, 0x64, 0xf3, 0x4f, 0x52, 0x75, 0x3a, 0x4c, 0x27, 0xd5, 0xbb, 0x2d, 0x9c, 0x70, 0x3c, 0xed, 0xcf, 0xb9, 0xfb, 0x25, 0x09, 0xa7, 0x9f, 0x2e, 0x4d, 0xfd, 0x6f, 0x85, 0x31, 0xcf, 0xc2, 0x74, 0xed, 0x42, 0xb6, 0xef, 0xb2, 0x93, 0x25, 0xbd, 0x3d, 0x5b, 0xd5, 0xd8, 0xab, 0x11, 0xef, 0x15, 0x8f, 0xd0, 0xb3, 0x07, 0x42, 0x5a, 0x69, 0x21, 0x7a, 0x5e, 0x9b, 0x1c, 0x1e, 0xf6, 0x81, 0x98, 0x59, 0x74, 0xbd, 0x06, 0xee, 0x5e, 0x49, 0xc5, 0xcb, 0xb7, 0xad, 0x8b, 0xe0, 0x80, 0x75, 0x07, 0x31, 0x7f, 0xe2, 0xc5, 0x2a, 0x3f, 0xe0, 0x51, 0x33, 0x58, 0x38, 0x9f, 0x85, 0xf0, 0x07, 0xaa, 0x3c, 0x82, 0x6f, 0x5c, 0xad, 0xdf, 0x8c, 0xae, 0xf9, 0x72, 0xa9, 0x10, 0xe3, 0xc7, 0xb4, 0x0b, 0xde, 0x4f, 0xf0, 0x25, 0x6a, 0x5d, 0xea, 0x05, 0xa1, 0x75, 0xae, 0xd7, 0x0d, 0xc6, 0x3a, 0xf2, 0xbd, 0xf5, 0x33, 0xb8, 0x98, 0x1c, 0xd7, 0xbe, 0xf1, 0x13, 0x33, 0x2e, 0x5b, 0xee, 0x96, 0x69, 0xbe, 0xc6, 0x45, 0xf0, 0xaa, 0xbd, 0x70, 0x84, 0xec, 0x3c, 0x65, 0x8c, 0x5f, 0x7f, 0x04, 0xb8, 0x05, 0x54, 0x73, 0xe4, 0x56, 0x1f, 0x13, 0x3f, 0xd8, 0x22, 0xb2, 0xac, 0xf0, 0xfb, 0x02, 0x68, 0xf8, 0x6e, 0x49, 0xed, 0x91, 0x65, 0x5b ],
+const [ 0x52, 0xa7, 0x68, 0x55, 0xb4, 0x15, 0xa3, 0x57, 0xd6, 0x74, 0x78, 0x42, 0x14, 0x01, 0x41, 0xdc, 0xa7, 0x5e, 0x25, 0x7d, 0x1c, 0x37, 0x31, 0xcf, 0x04, 0x26, 0xaa, 0xd2, 0xee, 0xd4, 0xa2, 0x23, 0x92, 0x62, 0xca, 0x7d, 0x4f, 0x07, 0x87, 0x80, 0xd8, 0xfa, 0x48, 0xb1, 0x2a, 0x92, 0x16, 0xc3, 0xc1, 0xab, 0x6d, 0x15, 0x0b, 0x4d, 0x4a, 0x7b, 0x1d, 0x88, 0x85, 0x41, 0xa5, 0xa2, 0x61, 0x6d, 0x1f, 0x75, 0x62, 0x45, 0x4c, 0x12, 0x5e, 0x11, 0xe0, 0xaa, 0xd7, 0x22, 0x7b, 0xaf, 0x88, 0x13, 0xdb, 0x36, 0x3e, 0x4f, 0x50, 0xa0, 0xe9, 0xd3, 0x70, 0x79, 0xf3, 0x36, 0x0b, 0xa0, 0xd0, 0xe6, 0x62, 0xa8, 0xd7, 0xb4, 0x93, 0x7f, 0x50, 0x93, 0x58, 0x4d, 0xce, 0x9c, 0xf1, 0x9f, 0xbf, 0x56, 0x5f, 0xc5, 0x41, 0x35, 0xd3, 0x78, 0x37, 0x60, 0x66, 0xc1, 0x9c, 0xb7, 0x0a, 0x16, 0x18, 0x15, 0xc1, 0xc5, 0xd1, 0xd2, 0x0d, 0x96, 0x84, 0x8d, 0xa7, 0xab, 0xd4, 0x28, 0x73, 0xac, 0xe2, 0x13, 0xb4, 0x21, 0x1d, 0xce, 0x7d, 0x1f, 0x5c, 0xa9, 0x68, 0x27, 0x2a, 0xcf, 0x89, 0x4b, 0x60, 0x82, 0xa5, 0x92, 0xfa, 0xa8, 0xa0, 0x9e, 0x23, 0x87, 0x35, 0x8c, 0x92, 0xcd, 0xea, 0x1c, 0x19, 0xd3, 0x42, 0x12, 0x7b, 0x22, 0x34, 0xdc, 0x7f, 0x37, 0xdc, 0x74, 0x42, 0x83, 0x71, 0x88, 0xd1, 0xb6, 0x77, 0xd9, 0xf7, 0x3d, 0x35, 0xe1, 0x54, 0x09, 0x6a, 0xb8, 0xaf, 0x93, 0x3c, 0x38, 0x8e, 0x1d, 0x71, 0x60, 0x03, 0x3a, 0xe1, 0xf6, 0xc8, 0x90, 0x2b, 0x70, 0x8e, 0xdd, 0xa8, 0x15, 0x93, 0x38, 0x9d, 0x60, 0x73, 0x9a, 0xb5, 0xa5, 0x40, 0x9c, 0xae, 0xf6, 0xd4, 0x82, 0x52, 0x48, 0x66, 0x79, 0xa9, 0xd2, 0x5c, 0x1d, 0x6d, 0xb6, 0x60, 0x3e, 0xbe, 0xe3, 0xb6, 0xe4, 0x17, 0x3a, 0xcd, 0x90, 0x81, 0xf0, 0x14, 0xc5, 0x06, 0x33, 0x0e, 0xc7, 0x69, 0x10, 0xa9, 0xa3, 0x14, 0x94, 0xcc, 0x6f, 0x52, 0x31, 0x2f, 0xd3, 0xbe, 0x64, 0x6f, 0xc9, 0xfc, 0x95, 0x62, 0xa0, 0xa6, 0x3f, 0xa8, 0x47, 0x89, 0x50, 0x82, 0xc8, 0x12, 0xd3, 0xe7, 0x13, 0x03, 0xcc, 0xd5, 0xfd, 0x6a, 0x63, 0xe6, 0x88, 0xd4, 0x45, 0x23, 0x65, 0xbe, 0x48, 0x1c, 0xb7, 0x4c, 0x4e, 0x39, 0x1a, 0x3e, 0x6b, 0x4b, 0xe4, 0x1f, 0x4a, 0x66, 0xab, 0xbf, 0xcc, 0xf3, 0x07, 0xe4, 0xf3, 0x01, 0x98, 0x3d, 0xff, 0xdc, 0x4b, 0x97, 0xd6, 0xe1, 0xda, 0x53, 0xa9, 0x90, 0x92, 0x18, 0xd5, 0xe3, 0x59, 0xc5, 0x07, 0xde, 0xef, 0xaa, 0xa4, 0x68, 0x74, 0xf7, 0x68, 0x59, 0x2b, 0x74, 0x4d, 0xd4, 0x7d, 0x73, 0xae, 0xd7, 0x41, 0x04, 0xac, 0x10, 0x3a, 0x67, 0xd1, 0xf3, 0xe1, 0xc7, 0xf3, 0x09, 0x65, 0x25, 0x5b, 0x8b, 0xf1, 0x92, 0x27, 0x2f, 0x2d, 0xa1, 0xed, 0x42, 0x07, 0x1c, 0xa1, 0xf7, 0xb3, 0xf6, 0xb9, 0xff, 0xf0, 0x81, 0x8e, 0x59, 0x8e, 0xe1, 0x06, 0x6c, 0x2d, 0xc1, 0x70, 0x53, 0x47, 0x44, 0xaf, 0x78, 0x71, 0x3e, 0x9b, 0x64, 0xdd, 0xa5, 0xa4, 0xd5, 0x24, 0x42, 0xb9, 0x11, 0x42, 0xac, 0x68, 0x7b, 0xe2, 0x77, 0x46, 0x64, 0xdd, 0xa9, 0x91, 0x23, 0xfd, 0x6d, 0x14, 0x68, 0x06, 0x0c, 0x4b, 0xcd, 0xf7, 0x18, 0xc8, 0xae, 0x8d, 0xeb, 0xd5, 0x3b, 0x09, 0x50, 0x5b, 0xcb, 0x33, 0x7f, 0x02, 0x74, 0x9f, 0x4f, 0x9a, 0xd8, 0x2f, 0xa7, 0xba, 0x41, 0xd9, 0x35, 0xa6, 0xf1, 0xaa, 0x63, 0x76, 0xb3, 0x0b, 0x87, 0x75, 0xb6, 0x44, 0x5a, 0xc8, 0x9b, 0x3e, 0xac, 0x50, 0xcd, 0x8d, 0x56, 0xd1, 0x11, 0xad, 0x6f, 0x53, 0x5e, 0x8c, 0xc3, 0xc8, 0xee, 0x49, 0x80, 0xf0, 0x95, 0x3c, 0x33, 0x7a, 0x52, 0x36, 0xf3, 0x6c, 0x24, 0x0a, 0xdc, 0xc4, 0x1e, 0x4c, 0xc0, 0x5f, 0xbe, 0x58, 0x18, 0x1b, 0x7b, 0x96, 0x41, 0x39, 0x9d, 0xfd, 0xe5, 0x05, 0x51, 0xd6, 0xb7, 0xb8, 0xfd, 0xc3, 0x63, 0x9d, 0xd1, 0xff, 0xc4, 0x73, 0x9f, 0xe7, 0x58, 0x13, 0xec, 0xba, 0xf2, 0x52, 0x47, 0x9d, 0xaf, 0x29, 0xd9, 0xe2, 0x2b, 0x13, 0x3e, 0x89, 0xf5, 0xb7, 0x93, 0x07, 0x40, 0xc7, 0xd0, 0x47, 0xdb, 0x28, 0x58, 0xef, 0x63, 0x53, 0xcf, 0xe4, 0xb7, 0xfb, 0x2c, 0x10, 0xac, 0xf0, 0x0f, 0x63, 0x02, 0x43, 0x54, 0x17, 0x97, 0xab, 0xe8, 0x39, 0xdb, 0x27, 0xdb, 0x65, 0x84, 0xe5, 0xb7, 0xd1, 0x83, 0x63, 0x11, 0x8c, 0x36, 0xd4, 0x5d, 0x08, 0xdf, 0xc5, 0x07, 0xd7, 0x55, 0x00, 0xbf, 0xb2, 0xf9, 0xb0, 0x14, 0xbf, 0xec, 0xc7, 0x44, 0x14, 0x7f, 0x9d, 0x52, 0x77, 0xeb, 0xd9, 0x5a, 0x67, 0x43, 0x95, 0x22, 0x61, 0xa6, 0xbd, 0xf1, 0x5c, 0xb9, 0xb8, 0xa4, 0x96, 0x54, 0x4b, 0xfe, 0x92, 0x7c, 0xba, 0x40, 0x61, 0x92, 0x30, 0xf9, 0x22, 0xc9, 0x60, 0x20, 0xc5, 0xde, 0x6d, 0x60, 0x14, 0x03, 0x07, 0xb3, 0xf3, 0x1c, 0xd8, 0x32, 0xe6, 0x2d, 0x1e, 0x2c, 0xd5, 0x13, 0x99, 0x75, 0x0c, 0x73, 0xa7, 0x00, 0x86, 0xf1, 0xae, 0xb0, 0x6b, 0xa2, 0xba, 0x6c, 0xd7, 0xc3, 0x67, 0x72, 0xdd, 0xab, 0x02, 0xed, 0xcc, 0xfe, 0xeb, 0xc9, 0xb0, 0x24, 0x3d, 0xc6, 0x1c, 0xf9, 0xb1, 0xcb, 0x27, 0xc6, 0xc0, 0x7e, 0xb5, 0x71, 0x08, 0x11, 0xf8, 0xf0, 0xf1, 0x5e, 0x36, 0x03, 0x90, 0x37, 0xcc, 0x23, 0xcc, 0xf7, 0x73, 0xb5, 0xbf, 0x5d, 0xc2, 0x84, 0x5f, 0x9b, 0xf4, 0x6e, 0x5d, 0xa9, 0xec, 0x5e, 0x4d, 0xdf, 0x76, 0x7a, 0x08, 0xc3, 0xd0, 0x9d, 0x4e, 0x20, 0x69, 0x07, 0xb0, 0x58, 0xe8, 0x53, 0xad, 0xfa, 0x70, 0xaa, 0x1c, 0x97, 0x22, 0x37, 0xca, 0xd2, 0xe4, 0xda, 0x63, 0xb7, 0x61, 0x21, 0x96, 0x4e, 0x51, 0x74, 0x74, 0x6f, 0xfb, 0x8f, 0x19, 0xd7, 0xf8, 0x36, 0x8f, 0x7c, 0x39, 0x23, 0xef, 0x1e, 0x4c, 0x44, 0xc9, 0x1f, 0xda, 0x23, 0xc6, 0x94, 0x75, 0xa6, 0x8c, 0x9c, 0x90, 0xf8, 0xe2, 0xf1, 0xcf, 0xc7, 0x15, 0xbc, 0x82, 0xb0, 0x9a, 0xae, 0x6c, 0xf7, 0xf4, 0x4c, 0xc8, 0x7c, 0xd9, 0x8a, 0x8e, 0xea, 0x90, 0x9c, 0xf2, 0x32, 0x9d, 0x09, 0x2d, 0x38, 0xa0, 0x01, 0x81, 0xcb, 0x7b, 0xf0, 0x77, 0xdb, 0xb3, 0x53, 0x6c, 0xe6, 0x19, 0xcb, 0x4b, 0xb4, 0xa9, 0x6f, 0x9c, 0x44, 0xb2, 0x67, 0xbe, 0x06, 0x37, 0xb7, 0x70, 0x4b, 0x95, 0x58, 0x97, 0xf9, 0x67, 0x8d, 0x3b, 0x83, 0xa7, 0x74, 0xd2, 0x18, 0x16, 0xdb, 0xc1, 0x1b, 0xdd, 0x56, 0x20, 0xd4, 0x74, 0x8e, 0xbd, 0x65, 0xc3, 0xdc, 0x64, 0xff, 0x87, 0x17, 0x5e, 0x55, 0xf8, 0xaa, 0x38, 0x51, 0xa9, 0xe9, 0xc6, 0x06, 0xaf, 0xa5, 0x66, 0xe7, 0x05, 0xfd, 0x89, 0x36, 0x2f, 0x78, 0x70, 0xbf, 0x1e, 0x51, 0x34, 0xc5, 0x54, 0x12, 0x09, 0x3d, 0x48, 0x64, 0xc3, 0x3a, 0x0c, 0x26, 0x9a, 0xa9, 0x2d, 0xbc, 0x2a, 0x3e, 0xdb, 0xaa, 0xbe, 0xae, 0x49, 0x61, 0xcd, 0x1f, 0x57, 0x58, 0xc5, 0xdc, 0x6f, 0x5f, 0x08, 0x4e, 0xac, 0x31, 0x34, 0x28, 0x42, 0x48, 0xa8, 0xe1, 0x1a, 0xf5, 0x44, 0x67, 0xbc, 0xaf, 0x6f, 0x12, 0x72, 0xac, 0x5f, 0xd6, 0xaa, 0xae, 0x95, 0xbe, 0x9d, 0x20, 0xa6, 0x95, 0x2e, 0x61, 0x41, 0xe6, 0x15, 0x60, 0x6e, 0x28, 0x3c, 0x69, 0x14, 0x32, 0x69, 0x3e, 0xbe, 0xf5, 0x1e, 0x6a, 0x9e, 0x69, 0xbe, 0xd2, 0xd3, 0xc8, 0xf0, 0x8d, 0xe7, 0xfb, 0x48, 0xf5, 0x9c, 0x51, 0x25, 0xfe, 0xe8, 0x77, 0xd5, 0xc7, 0x3e, 0xa5, 0x00, 0x6f, 0x0f, 0x15, 0x43, 0x2a, 0x91, 0xb9, 0x1b, 0x94, 0xbf, 0x2d, 0x05, 0x45, 0xa1, 0xeb, 0xe3, 0xa5, 0xcd, 0xbe, 0xa2, 0x01, 0x2e, 0x79, 0x1a, 0xdf, 0x04, 0xe8, 0x35, 0x8f, 0x2c, 0x07, 0x54, 0x03, 0xa2, 0x72, 0xee, 0xe1, 0x44, 0x1d, 0x7a, 0xd5, 0xd8, 0x45, 0x90, 0x2c, 0x51, 0xa6, 0x4b, 0x9f, 0x4e, 0xef, 0xf1, 0x6c, 0xe4, 0x73, 0xd6, 0xac, 0x9d, 0x21, 0x7d, 0xe0, 0xc0, 0xb6, 0x01, 0xcd, 0xd3, 0x31, 0xb3, 0x8a, 0x5f, 0x87, 0x05, 0xd7, 0xf3, 0x99, 0xa7, 0xb0, 0x6b, 0x63, 0xef, 0x22, 0x72, 0x76, 0x7e, 0x5e, 0x46, 0xa8, 0x21, 0x0c, 0xbc, 0x0a, 0xf5, 0xe1, 0x83, 0x1a, 0xcf, 0x74, 0xac, 0x3a, 0xda, 0x4d, 0x6a, 0x61, 0x82, 0x3f, 0x17, 0x11, 0x91, 0xf9, 0x78, 0x89, 0x98, 0xd7, 0x42, 0x3b, 0x91, 0xfe, 0xdd, 0x80, 0xc2, 0xa7, 0x67, 0x8b, 0xe5, 0xbb, 0xfc, 0x9b, 0x85, 0xa1, 0x35, 0x75, 0xab, 0x53, 0xee, 0x12, 0xba, 0xb8, 0x4d, 0x95, 0x98, 0x2e, 0x00, 0x80, 0x0e, 0x65, 0xc5, 0x26, 0x72, 0x74, 0x30, 0x64, 0x83, 0x26, 0xa9, 0x8c, 0x94, 0x95, 0xb4, 0xa2, 0xed, 0xfb, 0x75, 0xcb, 0x6e, 0xc4, 0x73, 0x02, 0x75, 0xe8, 0x9c, 0x0d, 0x02, 0x77, 0x89, 0xaf, 0x19, 0x76, 0x04, 0x20, 0x68, 0xe9, 0xc7, 0xba, 0x2a, 0x31, 0x87, 0xf5, 0x4b, 0x98, 0x31, 0x95, 0xcd, 0x2b, 0x74, 0x22, 0x6a, 0xc8, 0x7f, 0x99, 0x7b, 0x77, 0x0c, 0x61, 0x18, 0xfd, 0x9d, 0x80, 0x81, 0xaf, 0x05, 0x0f, 0xbc, 0x85, 0x2b, 0xeb, 0x80, 0x6f, 0x0b, 0xae, 0x52, 0xec, 0xfd, 0xde, 0xee, 0xd8, 0x3a, 0x64, 0xe8, 0x85, 0x9c, 0x3f, 0x93, 0x0e, 0xa5, 0x79, 0x22, 0xe8, 0xc3, 0x5a, 0x0d, 0xba, 0xd2, 0xdd, 0xb7, 0x6f, 0xe3, 0x60, 0x4d, 0x89, 0x3c, 0x9f, 0xf1, 0xb8, 0xa0, 0xe3, 0x18, 0xab, 0xd0, 0x77, 0x30, 0x26, 0x51, 0x5c, 0x87, 0x55, 0x70, 0x3d, 0x68, 0x60, 0x84, 0xa5, 0x87, 0x3f, 0x73, 0x70, 0x9e, 0xd0, 0x77, 0x80, 0x59, 0x26, 0x22, 0xb1, 0x70, 0x24, 0xa0, 0x0e, 0x12, 0x4b, 0x3d, 0x45, 0x8a, 0xd1, 0x26, 0x58, 0x1d, 0xf3, 0x74, 0x96, 0x31, 0x8c, 0x66, 0xca, 0xb5, 0xe5, 0xee, 0xb2, 0xbc, 0xcf, 0x70, 0xb2, 0x6b, 0xef, 0xc6, 0xca, 0x16, 0x5a, 0x87, 0xc6, 0xa6, 0x62, 0x89, 0xb4, 0x3e, 0xaf, 0xa4, 0x9b, 0x1e, 0x91, 0xb9, 0x6a, 0xc7, 0x94, 0xf3, 0x2f, 0x5f, 0x55, 0x4d, 0x89, 0x58, 0x95, 0x55, 0x60, 0x4d, 0x8c, 0x2f, 0xd3, 0x2c, 0x7f, 0xdc, 0x72, 0x9a, 0x95, 0xbd, 0xae, 0x93, 0xe7, 0x52, 0x8d, 0x51, 0xd6, 0x48, 0xa3, 0x70, 0xa1, 0xb3, 0x3d, 0x4f, 0x37, 0x98, 0xdf, 0xb9, 0x49, 0xae, 0xf1, 0xc5, 0xa4, 0x65, 0xb5, 0xfa, 0xbe, 0x28, 0x7c, 0xb7, 0x8e, 0xdf, 0x1a, 0xd2, 0xa1, 0xb9, 0x97, 0x80, 0x6b, 0x28, 0x27, 0x75, 0xdb, 0x2d, 0x5c, 0x4c, 0x32, 0xd5, 0x9b, 0x28, 0x14, 0x04, 0xcd, 0x9c, 0xdf, 0x71, 0x56, 0xc8, 0x3d, 0xf2, 0x4b, 0xc5, 0xf5, 0xfa, 0xdf, 0x44, 0x07, 0x5f, 0x1f, 0x71, 0xf7, 0x61, 0xe0, 0x1e, 0x69, 0xe9, 0xf5, 0x1d, 0xee, 0x0e, 0xa5, 0xed, 0x1e, 0xdd, 0x5c, 0x9a, 0xe7, 0x5a, 0xa0, 0xde, 0x24, 0xc2, 0x47, 0x8c, 0x71, 0x13, 0xe7, 0x2e, 0x3e, 0xce, 0x8f, 0xed, 0x23, 0xfc, 0xb4, 0xb2, 0x73, 0x6f, 0x6e, 0x8b, 0x14, 0x4a, 0xe5, 0x50, 0x8e, 0xc4, 0x05, 0x86, 0x61, 0x28, 0x7a, 0x83, 0x9c, 0x20, 0xd8, 0xd3, 0xab, 0x34, 0x19, 0xdb, 0x71, 0x8e, 0x4d, 0xbc, 0x97, 0x00, 0x8d, 0x7b, 0x23, 0x48, 0x31, 0x5e, 0x4c, 0x92, 0x43, 0x99, 0x8c, 0x3e, 0x33, 0x29, 0xf8, 0xe4, 0xcb, 0x01, 0xcd, 0x95, 0x66, 0x64, 0x4b, 0x64, 0x5d, 0x92, 0xc6, 0x25, 0xc3, 0xa6, 0xfa, 0x75, 0x52, 0xbf, 0x9f, 0xfb, 0xa4, 0x5e, 0x3d, 0xed, 0xa7, 0x0f, 0x42, 0xd5, 0x4b, 0x4c, 0x52, 0x95, 0x7d, 0x9e, 0xde, 0xa8, 0x59, 0x05, 0xf8, 0xac, 0x9b, 0x9a, 0x65, 0x1d, 0x57, 0x73, 0xf4, 0x64, 0xeb, 0xc7, 0x0f, 0x10, 0x31, 0x52, 0x90, 0x63, 0xf9, 0xfb, 0xd6, 0x10, 0xb6, 0xb5, 0x17, 0x43, 0x77, 0xa3, 0xf7, 0xe2, 0x19, 0x7f, 0x5a, 0x12, 0xbb, 0x3c, 0x77, 0xfe, 0x73, 0xea, 0x2f, 0xd4, 0x3f, 0xdb, 0x9c, 0x0f, 0x3f, 0x04, 0xec, 0xfc, 0x21, 0xa5, 0x70, 0x77, 0xdc, 0x2d, 0xf0, 0xf6, 0xa1, 0x58, 0x42, 0xca, 0x0e, 0x9a, 0x1a, 0xa1, 0xa6, 0xc0, 0x24, 0x4e, 0x7e, 0xd5, 0x50, 0xcd, 0x38, 0x42, 0x6e, 0x81, 0x35, 0x3a, 0xfa, 0xc1, 0x07, 0x55, 0x39, 0x93, 0x25, 0x7b, 0x85, 0xb7, 0xe3, 0x04, 0xe4, 0xe8, 0xa1, 0x1d, 0xe0, 0x5e, 0x42, 0x6e, 0x93, 0x97, 0xe0, 0xfa, 0x02, 0x57, 0xbd, 0x46, 0xac, 0xee, 0x7d, 0xbd, 0x62, 0xb9, 0x93, 0x53, 0x58, 0xeb, 0xfa, 0x69, 0x7d, 0x8d, 0x25, 0xf0, 0x08, 0xc4, 0x38, 0xd2, 0x53, 0x53, 0x78, 0x8d, 0xed, 0x60, 0x00, 0x21, 0xeb, 0x7b, 0xb7, 0x2d, 0x7e, 0xdc, 0x7e, 0x55, 0xcb, 0xec, 0xae, 0xe6, 0xf6, 0x08, 0xc1, 0xbd, 0x80, 0x81, 0x4f, 0x65, 0xd4, 0xe7, 0x3d, 0x7f, 0x1c, 0x87, 0x31, 0x67, 0x59, 0x32, 0x48, 0x14, 0xb3, 0x40, 0x0c, 0x40, 0x0d, 0xd5, 0xa0, 0xc9, 0xdd, 0x63, 0x3e, 0x58, 0x3b, 0x70, 0xe4, 0x40, 0x38, 0x9a, 0x49, 0xa9, 0x70, 0xd8, 0x16, 0xed, 0xe3, 0x02, 0x53, 0x42, 0x00, 0x94, 0x1f, 0x9a, 0x03, 0xaf, 0xa5, 0xc7, 0x81, 0x60, 0x4b, 0xe3, 0x41, 0x25, 0x2c, 0xef, 0x4e, 0xad, 0xc9, 0xba, 0x4a, 0xe0, 0xfb, 0x04, 0x05, 0x1f, 0x2d, 0xe4, 0x4f, 0xcd, 0xc7, 0x67, 0x0a, 0x0e, 0xed, 0x7a, 0x83, 0xce, 0x6a, 0x0a, 0x02, 0x06, 0xe7, 0x69, 0x9f, 0x3a, 0x61, 0xf4, 0x58, 0x47, 0xda, 0xf3, 0x61, 0x5b, 0x4e, 0xc0, 0xbb, 0x45, 0xe8, 0x2c, 0x08, 0xef, 0x76, 0x1e, 0x9e, 0x28, 0x1b, 0x7d, 0xda, 0xa7, 0x43, 0x50, 0xb6, 0x4d, 0xdc, 0x24, 0x9e, 0xab, 0xc4, 0xae, 0x80, 0xc4, 0x7d, 0xb2, 0x23, 0x14, 0x28, 0x24, 0xb9, 0xd1, 0xb1, 0x8c, 0xb7, 0x70, 0x47, 0xaf, 0xe4, 0x6b, 0x0f, 0x6b, 0xb0, 0x42, 0x19, 0xe3, 0xc8, 0xc0, 0x93, 0xdc, 0xe7, 0x7f, 0x3c, 0x67, 0xef, 0xae, 0x1c, 0xc1, 0x38, 0x12, 0x73, 0x77, 0x28, 0x4b, 0xef, 0xcd, 0x04, 0x59, 0x21, 0x61, 0x05, 0x5e, 0x32, 0x0c, 0xaf, 0xa5, 0xd2, 0x09, 0x5e, 0xe4, 0x72, 0x59, 0x22, 0xbe, 0xb3, 0x65, 0xcc, 0x8c, 0x1e, 0xe6, 0x49, 0x5d, 0x15, 0x02, 0x2f, 0x3b, 0x09, 0xb7, 0x96, 0xb1, 0xee, 0x7d, 0x29, 0x8a, 0xec, 0x27, 0x7d, 0xda, 0x58, 0x0b, 0xa1, 0x43, 0xe2, 0x62, 0xf6, 0x71, 0x10, 0xf2, 0x40, 0xe7, 0xeb, 0xea, 0xfe, 0xfe, 0xf8, 0x0d, 0xf7, 0x2a, 0x69, 0x12, 0x16, 0x80, 0x95, 0x4b, 0x77, 0x75, 0xa6, 0x86, 0xc2, 0xe9, 0x91, 0x31, 0xb8, 0x64, 0x4c, 0xc1, 0x0b, 0x9f, 0x3b, 0x54, 0x73, 0x46, 0xeb, 0x94, 0xfe, 0xfc, 0x02, 0xdf, 0xa8, 0xa0, 0x76, 0xa6, 0x2b, 0xce, 0xfe, 0x13, 0x18, 0xa9, 0xc6, 0xef, 0x27, 0xd8, 0x67, 0xc2, 0xcb, 0xcf, 0x16, 0x3c, 0x0a, 0x50, 0x1b, 0xd3, 0x8c, 0x31, 0x86, 0xae, 0xf2, 0x5f, 0x1d, 0xc2, 0x69, 0x23, 0x98, 0x3b, 0x7e, 0xa4, 0x11, 0x1d, 0x34, 0xae, 0xb6, 0x2b, 0x53, 0xb1, 0xc1, 0x08, 0x04, 0x0d, 0xaa, 0x9c, 0x9b, 0x8c, 0x9a, 0xb9, 0xb4, 0x30, 0x24, 0xfe, 0x81, 0x30, 0x30, 0xfc, 0x62, 0x3d, 0x37, 0x98, 0xb6, 0x09, 0xb6, 0xb0, 0xf2, 0x0a, 0xdc, 0x02, 0xf0, 0x7c, 0x86, 0x49, 0x89, 0xa5, 0x6e, 0xa8, 0x65, 0x5c, 0x9f, 0x4c, 0x12, 0xcc, 0x2d, 0x4e, 0x54, 0x76, 0x22, 0xd6, 0xbc, 0x75, 0xbb, 0x86, 0x7c, 0x06, 0xd5, 0x16, 0x7a, 0x47, 0xa2, 0x3b, 0xa3, 0x3f, 0xa0, 0xce, 0x82, 0x1f, 0xcc, 0x2a, 0x11, 0xc7, 0x13, 0xd6, 0xcf, 0x8c, 0x09, 0x64, 0x12, 0x39, 0xdd, 0x98, 0x9f, 0x53, 0x8d, 0xcd, 0x78, 0xa2, 0x56, 0x95, 0xf5, 0xec, 0x6f, 0xa0, 0x16, 0x04, 0xf6, 0xdf, 0x18, 0x04, 0x2b, 0xe8, 0x46, 0xd6, 0xdc, 0x9d, 0x12, 0xf9, 0x20, 0x08, 0x64, 0x81, 0x48, 0x8a, 0x32, 0x60, 0x13, 0x35, 0x51, 0xe5, 0x21, 0x76, 0x8b, 0x82, 0xaa, 0xf7, 0xf1, 0xd2, 0x70, 0xc3, 0x72, 0xda, 0xf2, 0xac, 0xad, 0x90, 0xe3, 0xea, 0x04, 0x99, 0xda, 0x04, 0xf2, 0x57, 0x4b, 0xf4, 0x9e, 0x23, 0xb6, 0x86, 0xb0, 0xd7, 0x1e, 0x01, 0x63, 0x90, 0xbd, 0x09, 0xdb, 0xb2, 0xf6, 0xc4, 0xba, 0x2c, 0x8b, 0x3c, 0xee, 0xfd, 0x10, 0x04, 0xcc, 0xf7, 0xa0, 0x1f, 0x63, 0xc2, 0xce, 0x1d, 0x0a, 0x25, 0xde, 0x87, 0x3c, 0x81, 0x36, 0x7d, 0xa6, 0x9e, 0x0f, 0x9e, 0x7d, 0xaa, 0x70, 0x28, 0x15, 0x7f, 0x5d, 0x60, 0xb0, 0x25, 0x4c, 0x35, 0x94, 0x98, 0xd8, 0x20, 0x60, 0xcb, 0xb9, 0x4e, 0x9f, 0xec, 0xf4, 0x01, 0x9e, 0xea, 0x4f, 0x34, 0x7b, 0x35, 0x08, 0x7e, 0x7f, 0xc5, 0xc6, 0x38, 0xad, 0x5d, 0xd0, 0xe2, 0x9b, 0x11, 0x7d, 0xc3, 0x81, 0x06, 0xec, 0xd0, 0x90, 0x79, 0xf4, 0xcf, 0x85, 0x02, 0x5e, 0xbc, 0x7d, 0x1a, 0x52, 0x6c, 0x0b, 0xdc, 0x10, 0x70, 0x88, 0x08, 0xe1, 0x3c, 0xaa, 0x4d, 0x4c, 0x89, 0x58, 0xc8, 0x8c, 0xf7, 0xbd, 0xc8, 0x42, 0xf7, 0x9c, 0xd4, 0x68, 0xe8, 0xe3, 0xef, 0x86, 0x80, 0x82, 0x1a, 0x28, 0x6e, 0x7d, 0x1b, 0x8f, 0x3d, 0x40, 0x7d, 0xa7, 0x7c, 0x34, 0xd8, 0x39, 0x1c, 0x8f, 0x52, 0x62, 0x19, 0x70, 0x66, 0x44, 0x5d, 0x2b, 0xe4, 0xfb, 0xe1, 0xe1, 0x39, 0xd2, 0x15, 0x55, 0xf1, 0xb7, 0x82, 0xfa, 0x7a, 0xed, 0xad, 0x51, 0x2b, 0x01, 0x3f, 0x71, 0x84, 0xff, 0x64, 0xe7, 0xb8, 0xe5, 0x71, 0xc1, 0x68, 0x58, 0xc9, 0xe6, 0xb2, 0x96, 0x01, 0xa9, 0x6a, 0xac, 0x42, 0x9d, 0xa7, 0xe9, 0xef, 0xaa, 0x82, 0x92, 0x88, 0x60, 0x1a, 0xd7, 0xcf, 0x8c, 0xdc, 0x06, 0x29, 0x09, 0x01, 0xff, 0x46, 0xd9, 0x57, 0xe8, 0x04, 0x74, 0x45, 0x22, 0x91, 0x60, 0x09, 0x7b, 0xd0, 0x02, 0x45, 0xa5, 0xff, 0xb4, 0xba, 0xe7, 0x96, 0x18, 0x53, 0x12, 0x72, 0xab, 0x65, 0xb7, 0x32, 0x9d, 0x35, 0x97, 0xe2, 0xe0, 0xbb, 0x5b, 0xd7, 0x7f, 0xa5, 0x85, 0xd9, 0x31, 0x9f, 0xa7, 0x88, 0x2e, 0xd2, 0xd2, 0xf8, 0x41, 0xaa, 0x52, 0x9f, 0x1e, 0xdd, 0x98, 0x71, 0xf7, 0xa9, 0x78, 0x49, 0x4a, 0x5d, 0x95, 0x8b, 0xfd, 0x1a, 0x19, 0x07, 0xac, 0xdb, 0xa9, 0x21, 0x42, 0xb3, 0x98, 0x2f, 0xc6, 0x56, 0x5a, 0x23, 0x78, 0xdb, 0x3c, 0x6a, 0x1d, 0xc0, 0x53, 0x14, 0x97, 0x2f, 0xb2, 0x34, 0xb8, 0x7f, 0xe0, 0x8a, 0x58, 0xfe, 0x8a, 0x5f, 0xa5, 0xee, 0x74, 0xb1, 0xbb, 0xcd, 0xb5, 0x90, 0x75, 0xda, 0x24, 0xc8, 0x82, 0xd4, 0x0e, 0xc0, 0xbb, 0x05, 0x2a, 0xa2, 0xb3, 0x7f, 0xce, 0xbc, 0x90, 0xa6, 0x62, 0x27, 0x1a, 0xee, 0x16, 0xa6, 0x12, 0xe6, 0xd0, 0xd0, 0xc5, 0x76, 0x68, 0x72, 0xe1, 0x64, 0x18, 0x2f, 0x86, 0x1d, 0x2e, 0x69, 0xa0, 0xb3, 0x04, 0x65, 0x75, 0x22, 0x32, 0xa9, 0x7a, 0xd7, 0x02, 0xa9, 0x6b, 0x73, 0x25, 0xa3, 0x9a, 0xcc, 0xa4, 0xc8, 0x88, 0x34, 0x19, 0x9c, 0xb2, 0xff, 0x1e, 0x9f, 0xad, 0x3f, 0x06, 0x2d, 0x75, 0xd2, 0xcb, 0xa3, 0x03, 0x9f, 0x48, 0xc3, 0x1d, 0x1c, 0xa8, 0x5a, 0x72, 0x14, 0x1f, 0x1f, 0xe6, 0xa7, 0xd8, 0xdf, 0x2b, 0x92, 0x2e, 0xd7, 0x91, 0xb0, 0x1e, 0x62, 0x1f, 0xc1, 0xfc, 0xd4, 0xe2, 0x6b, 0x66, 0xa5, 0x85, 0x7e, 0x77, 0xd2, 0x22, 0x7c, 0x3c, 0x80, 0x58, 0x59, 0x6c, 0xe2, 0x9e, 0x7f, 0x53, 0x5e, 0xd6, 0x15, 0x10, 0xeb, 0x26, 0x81, 0x00, 0xbe, 0x03, 0x2b, 0x7a, 0x25, 0x8e, 0x84, 0xbd, 0xb3, 0x24, 0x48, 0x26, 0x9d, 0x30, 0x00, 0xa7, 0x64, 0x44, 0xca, 0x74, 0xb4, 0x69, 0x5c, 0xff, 0x8d, 0xb3, 0x47, 0x27, 0xa0, 0x18, 0x79, 0xac, 0xfc, 0x81, 0x06, 0xe7, 0xe9, 0x22, 0x28, 0xb8, 0x14, 0x07, 0x84, 0xbf, 0xed, 0xf0, 0xae, 0xcf, 0x4e, 0x5f, 0xf0, 0x9f, 0x5d, 0xef, 0x47, 0xc3, 0xb3, 0xe7, 0xaf, 0xdb, 0xbe, 0x0f, 0xa0, 0x0b, 0x63, 0xc3, 0xd9, 0xab, 0xe8, 0x45, 0x5c, 0x3f, 0x12, 0x58, 0xba, 0xa9, 0x8a, 0x0a, 0x90, 0x9d, 0x85, 0xd1, 0x52, 0x56, 0xa4, 0xd9, 0x47, 0x87, 0x19, 0x9d, 0xd5, 0x95, 0x0c, 0xb5, 0xff, 0x03, 0x3d, 0xee, 0x2c, 0x2e, 0xea, 0xa0, 0x2a, 0x3a, 0xf3, 0x3c, 0x72, 0x4c, 0x3c, 0x25, 0xae, 0xf9, 0x53, 0xc1, 0x78, 0xff, 0x53, 0xcf, 0x65, 0x33, 0x08, 0xfb, 0x42, 0xbb, 0x53, 0xaf, 0x9d, 0x7d, 0xd0, 0x2d, 0x88, 0xd7, 0xb7, 0xdb, 0x99, 0x91, 0x00, 0xdd, 0x35, 0x10, 0xcb, 0xe9, 0x0e, 0xcc, 0xfe, 0x57, 0xeb, 0x04, 0x30, 0x78, 0xa8, 0xb0, 0xc6, 0x29, 0x7d, 0xb7, 0x5b, 0xa8, 0x83, 0x62, 0x66, 0xa6, 0x73, 0x10, 0x16, 0x9d, 0xb1, 0x2c, 0x81, 0x63, 0x8a, 0x5d, 0xfe, 0x00, 0xba, 0xfc, 0xcf, 0xbd, 0x32, 0xcb, 0x04, 0x7d, 0x18, 0xe4, 0x9b, 0x50, 0x0e, 0xef, 0xec, 0x46, 0xb7, 0x98, 0x45, 0x81, 0x77, 0x41, 0xd1, 0x8e, 0x7b, 0xf3, 0xbe, 0xf6, 0xfa, 0x9b, 0x9e, 0x0f, 0xba, 0x73, 0x0e, 0x18, 0xd5, 0xbe, 0x96, 0x85, 0xbd, 0xb8, 0xd1, 0x98, 0x7e, 0xcd, 0xce, 0x31, 0x43, 0x09, 0xb5, 0xe7, 0x1c, 0xd0, 0xae, 0x57, 0xfe, 0xcf, 0xfe, 0xbc, 0x0c, 0x32, 0x73, 0xc1, 0x14, 0x17, 0x03, 0x93, 0x5d, 0x43, 0xb0, 0x39, 0xa0, 0x14, 0xaf, 0x28, 0x54, 0xb7, 0xc8, 0x12, 0x2e, 0x9b, 0x00, 0x00, 0xe9, 0x26, 0x76, 0xa0, 0x43, 0xa6, 0x8b, 0xe0, 0x48, 0x8a, 0x45, 0xbb, 0xd2, 0xd2, 0xf6, 0x53, 0x51, 0xc4, 0x18, 0x41, 0xc8, 0xe1, 0x7c, 0x29, 0x18, 0x17, 0xa4, 0x91, 0x81, 0x38, 0x6d, 0xf3, 0x66, 0xab, 0xf0, 0x10, 0x50, 0x62, 0xab, 0x88, 0x36, 0x0b, 0xdc, 0xa8, 0xfc, 0x8b, 0x2e, 0x83, 0x39, 0xa8, 0x97, 0x44, 0x3d, 0x05, 0x81, 0xc2, 0x53, 0x54, 0x28, 0x55, 0x43, 0xc7, 0x43, 0xe9, 0x1b, 0xc7, 0xe6, 0x50, 0x2f, 0xe9, 0xa7, 0xdd, 0x5f, 0x1e, 0x00, 0x2e, 0x98, 0x2a, 0xf4, 0x49, 0x9e, 0x57, 0xf5, 0xeb, 0x08, 0x6a, 0x06, 0x1c, 0x8c, 0xd6, 0x1d, 0x07, 0x7c, 0x30, 0xcb, 0x09, 0x91, 0xe3, 0x1e, 0x08, 0xe8, 0x25, 0xc7, 0x06, 0x4a, 0x29, 0x78, 0xf5, 0xb0, 0x96, 0x90, 0xcd, 0x06, 0x39, 0xfa, 0xdd, 0x30, 0xf6, 0x52, 0x5e, 0x4b, 0x05, 0x4a, 0x4e, 0x35, 0x5b, 0x4d, 0x7c, 0x4f, 0x65, 0x62, 0xdf, 0x81, 0xfc, 0x52, 0x2b, 0x7f, 0x96, 0x0d, 0xa6, 0x4b, 0xb9, 0x4a, 0x38, 0xfc, 0xb6, 0x6e, 0xc2, 0xbd, 0x93, 0xaf, 0xb1, 0x18, 0x49, 0x79, 0xd3, 0x75, 0x30, 0x10, 0x69, 0xdd, 0xb7, 0x78, 0x7d, 0x04, 0x58, 0x92, 0x76, 0x87, 0xcb, 0x87, 0xe9, 0x72, 0x7a, 0x69, 0xb2, 0x05, 0x36, 0x18, 0x44, 0xb8, 0x28, 0x63, 0x3d, 0x7c, 0x0a, 0x70, 0x3e, 0x44, 0x97, 0x5e, 0xf9, 0xc4, 0x3f, 0x28, 0x8b, 0x78, 0x20, 0xcd, 0x0d, 0xe9, 0x32, 0xae, 0x65, 0x2c, 0xc1, 0x37, 0x62, 0xab, 0x21, 0xc1, 0x09, 0x28, 0x9d, 0xb7, 0x29, 0xfe, 0xb0, 0xf8, 0x36, 0xaa, 0x78, 0x7d, 0x53, 0x8b, 0x67, 0x3c, 0xb1, 0xe6, 0x3c, 0x4c, 0x18, 0x2d, 0x31, 0x49, 0xc3, 0x81, 0x76, 0xfa, 0x71, 0x75, 0xdf, 0x31, 0xb9, 0x15, 0xda, 0xf3, 0x9e, 0x27, 0xa3, 0xd9, 0x63, 0xb0, 0xbb, 0xb6, 0xa1, 0xba, 0x96, 0x7a, 0x96, 0x55, 0x93, 0x57, 0xc0, 0xdc, 0x32, 0x22, 0xaa, 0x79, 0x82, 0xfb, 0x07, 0xeb, 0xd8, 0x30, 0xfd, 0x87, 0xc6, 0x5f, 0xc3, 0x7d, 0x4b, 0xdb, 0x6e, 0x5d, 0x48, 0x51, 0x08, 0xda, 0x33, 0xac, 0xe3, 0xcd, 0x0f, 0x35, 0x2c, 0x7d, 0x9c, 0xff, 0xc3, 0x1d, 0xcb, 0x82, 0x4a, 0x96, 0x74, 0x86, 0x7d, 0x87, 0x4b, 0x43, 0xc1, 0x8a, 0x11, 0xc6, 0xff, 0xba, 0x07, 0x96, 0xb2, 0x72, 0xa8, 0x98, 0x3f, 0x57, 0x97, 0x30, 0x86, 0x98, 0xd7, 0xa9, 0xb6, 0x74, 0x3a, 0xd7, 0x65, 0xfd, 0x1c, 0xfa, 0xe0, 0x1c, 0x50, 0xe6, 0xbf, 0xd6, 0x5b, 0x61, 0xbd, 0xcd, 0xe0, 0xcd, 0xc7, 0x0a, 0x5c, 0x07, 0x53, 0xf9, 0x14, 0x8e, 0xf3, 0xb5, 0x4b, 0xe8, 0x2a, 0x86, 0xb7, 0x41, 0x7e, 0xa9, 0x36, 0x56, 0xce, 0x4f, 0xbe, 0x91, 0xe6, 0xe7, 0x92, 0x75, 0x51, 0xa0, 0xbc, 0x3d, 0x6e, 0x2a, 0xb7, 0xc0, 0xc7, 0xbd, 0x6c, 0x98, 0x9d, 0x5d, 0x60, 0x83, 0xc8, 0x5c, 0x2b, 0x09, 0xbe, 0x20, 0x2c, 0x60, 0xf1, 0x27, 0x7b, 0x8c, 0x5e, 0x47, 0x1f, 0xca, 0x62, 0x3b, 0x81, 0x2f, 0xd0, 0x5b, 0x21, 0x8d, 0x42, 0xab, 0x88, 0x96, 0xac, 0x17, 0x7e, 0x44, 0x37, 0xfd, 0x7c, 0x78, 0x4c, 0xec, 0x64, 0xe1, 0xee, 0xac, 0x70, 0x1f, 0x4e, 0x7e, 0x68, 0x28, 0x99, 0xa4, 0x19, 0xeb, 0x15, 0x24, 0x02, 0x34, 0x6c, 0xca, 0x50, 0xd0, 0x48, 0x6c, 0x0d, 0xf1, 0x1f, 0x71, 0x94, 0xd4, 0x51, 0x94, 0x48, 0xa0, 0x70, 0xe6, 0x85, 0x92, 0xde, 0x12, 0xd7, 0x57, 0x9e, 0xe5, 0x6a, 0xb9, 0x64, 0x0e, 0xc2, 0x7e, 0xee, 0x22, 0xac, 0x8d, 0x97, 0xe3, 0x75, 0x53, 0x2a, 0xc1, 0x59, 0x65, 0xf4, 0xa1, 0x3e, 0x67, 0x1d, 0xde, 0xa3, 0x2c, 0x38, 0x8d, 0xd3, 0x1e, 0x18, 0x06, 0x5e, 0xe1, 0xe5, 0xa0, 0xc9, 0x33, 0x70, 0xbb, 0x85, 0x17, 0xc4, 0x04, 0x1e, 0x32, 0xfe, 0xf4, 0xb5, 0x75, 0x5e, 0x9a, 0xb0, 0xfc, 0x9d, 0x9b, 0xb0, 0x36, 0x81, 0x77, 0xc3, 0x47, 0xb0, 0x0d, 0xdc, 0xaa, 0xc2, 0x62, 0x80, 0x1b, 0x99, 0x9e, 0xc1, 0xb4, 0xf5, 0x57, 0x70, 0x56, 0x43, 0x12, 0x8f, 0x4a, 0xb6, 0x07, 0x05, 0x28, 0x99, 0x25, 0x95, 0xf8, 0xe4, 0x56, 0x11, 0x98, 0x0d, 0x04, 0xcb, 0x5e, 0x20, 0xdc, 0x4d, 0xfd, 0x12, 0xd2, 0x4a, 0xad, 0x53, 0x65, 0xd4, 0x86, 0xa2, 0x24, 0xce, 0x2d, 0x25, 0x71, 0xa5, 0xb3, 0xb9, 0x85, 0x3b, 0xba, 0x87, 0xb4, 0x24, 0xda, 0xd8, 0xf2, 0x15, 0x43, 0x2a, 0x97, 0x99, 0xa3, 0x82, 0x5f, 0x06, 0x4a, 0x05, 0xb5, 0xb0, 0x8c, 0xc2, 0x31, 0x5c, 0x66, 0xd3, 0x5f, 0xf8, 0x65, 0xa4, 0xc2, 0x89, 0xc4, 0x92, 0x18, 0x64, 0xd4, 0xb8, 0xe0, 0xa1, 0xa1, 0x05, 0x1a, 0xcd, 0xd3, 0x92, 0x4e, 0xdf, 0xd2, 0x33, 0xcf, 0x6d, 0x2e, 0x4d, 0x41, 0x20, 0x3d, 0xe7, 0x59, 0x66, 0x06, 0x03, 0xe4, 0x66, 0x5d, 0x2e, 0x0b, 0x39, 0x50, 0x56, 0xd5, 0x57, 0xc2, 0xdc, 0xed, 0x4f, 0x56, 0xea, 0xa6, 0xbc, 0x8f, 0x07, 0x3c, 0x74, 0x35, 0xe8, 0x5d, 0x02, 0xfa, 0x89, 0xe7, 0x57, 0x5d, 0x7d, 0xf4, 0xbc, 0xcf, 0x83, 0x14, 0x0b, 0x14, 0x59, 0xd9, 0x1f, 0xed, 0xd5, 0x99, 0x89, 0xf4, 0x31, 0x6f, 0x84, 0xc7, 0xa7, 0x83, 0x2c, 0x68, 0x3d, 0x8b, 0xea, 0xe4, 0xe3, 0x92, 0x33, 0x33, 0xbb, 0xf8, 0x72, 0x60, 0xb8, 0xbb, 0x42, 0xea, 0x6a, 0xf4, 0xe1, 0x69, 0x18, 0xa5, 0xe1, 0x74, 0x10, 0xb1, 0x21, 0xc3, 0x3b, 0x2c, 0xfc, 0x91, 0xf4, 0xd5, 0xc0, 0x44, 0x1a, 0xe1, 0x62, 0x50, 0x64, 0xfb, 0x70, 0x59, 0xf5, 0x88, 0x46, 0x98, 0x31, 0x2f, 0x85, 0x7f, 0xce, 0x99, 0xc1, 0xa0, 0x2e, 0x75, 0x7a, 0xcb, 0xec, 0xc0, 0x4e, 0x76, 0xb5, 0x43, 0x6c, 0x62, 0x59, 0x5d, 0x4c, 0x7c, 0x21, 0x02, 0x9e, 0x02, 0x64, 0x04, 0x80, 0xe6, 0x55, 0x91, 0xf3, 0x77, 0x1f, 0xfe, 0x90, 0x3e, 0x34, 0xc2, 0x77, 0x26, 0xe1, 0xc6, 0x89, 0xe1, 0x27, 0xdc, 0xd7, 0x86, 0xc6, 0x8c, 0x59, 0x7f, 0x9a, 0x17, 0xe4, 0xa2, 0x2a, 0xb6, 0x56, 0x9e, 0x7f, 0x23, 0x14, 0x99, 0x32, 0x5a, 0xb6, 0x17, 0xc9, 0xa1, 0x00, 0x1e, 0x44, 0xc6, 0x14, 0x98, 0xf2, 0xa8, 0xe7, 0xf8, 0x89, 0xf8, 0xf2, 0x20, 0x76, 0x41, 0x2a, 0x82, 0x72, 0x26, 0x31, 0x86, 0x56, 0xec, 0xce, 0x2c, 0x30, 0x38, 0x9b, 0xf3, 0x96, 0x19, 0xfd, 0xf9, 0x3a, 0x48, 0x59, 0x63, 0xbf, 0xaf, 0x85, 0xff, 0xcb, 0x29, 0x7d, 0x28, 0x5e, 0x89, 0x58, 0xeb, 0x62, 0xdd, 0x7a, 0x68, 0x83, 0xf4, 0x0a, 0x7a, 0x40, 0x1d, 0xa7, 0x9a, 0x42, 0x32, 0x56, 0x00, 0xed, 0xd5, 0xbf, 0x0c, 0x36, 0xfa, 0x9a, 0xe5, 0xb4, 0xa6, 0x64, 0x60, 0xf9, 0xf5, 0x56, 0x23, 0x22, 0x62, 0x97, 0x0a, 0xad, 0x43, 0xb1, 0xc9, 0x8b, 0x93, 0x42, 0xd3, 0x76, 0xf4, 0xf4, 0x7b, 0x85, 0xf4, 0xae, 0x59, 0xfe, 0x90, 0x0c, 0xf0, 0x6b, 0xf7, 0x0d, 0x8d, 0xf0, 0x90, 0x0c, 0x72, 0xdb, 0x3d, 0xf2, 0x34, 0x7d, 0xe2, 0xa9, 0x62, 0x39, 0x21, 0xd4, 0x67, 0xda, 0x68, 0xbd, 0xb2, 0x29, 0x2e, 0x8e, 0x14, 0xc0, 0x79, 0xc5, 0x69, 0x19, 0xa4, 0xe2, 0x7a, 0xea, 0x5f, 0x62, 0x22, 0xb5, 0xf7, 0xf1, 0xb0, 0x9a, 0xd8, 0xdc, 0x8d, 0x71, 0x50, 0xc5, 0x1f, 0x15, 0x95, 0x9a, 0xec, 0x02, 0x0a, 0xc8, 0x03, 0x23, 0xbe, 0xab, 0x98, 0xe5, 0x35, 0x49, 0xee, 0x90, 0x6c, 0x41, 0x7a, 0xd7, 0x17, 0xfe, 0x45, 0xae, 0x2d, 0x30, 0x92, 0x5b, 0xa6, 0x7d, 0xc1, 0xd0, 0x84, 0x73, 0x73, 0x38, 0x10, 0xc2, 0xef, 0xd0, 0x66, 0xa8, 0xc4, 0xf8, 0x33, 0xac, 0xb0, 0x8a, 0xbe, 0x8f, 0xc1, 0x6a, 0x25, 0x80, 0xba, 0x5e, 0xe9, 0x8f, 0xb8, 0x20, 0xad, 0x64, 0x15, 0xb2, 0x3b, 0x31, 0x8d, 0xf2, 0xc8, 0xe5, 0x9f, 0x6e, 0x79, 0xa3, 0x36, 0x79, 0x26, 0x72, 0x89, 0x7f, 0x5d, 0x36, 0x40, 0x95, 0xaa, 0xdf, 0xd8, 0x54, 0x15, 0xe0, 0x48, 0xe8, 0xed, 0xe2, 0xe5, 0x64, 0xc4, 0xba, 0x83, 0x58, 0xbb, 0x99, 0xdd, 0xa6, 0x00, 0x83, 0x37, 0x91, 0x94, 0x03, 0x41, 0x17, 0x52, 0x1c, 0x3f, 0x81, 0x2d, 0x82, 0x67, 0x38, 0xb9, 0x0b, 0x8a, 0xda, 0xed, 0x60, 0xf7, 0x8d, 0x27, 0xf8, 0x9d, 0x94, 0x70, 0x47, 0x6f, 0x20, 0x01, 0x32, 0x0d, 0x68, 0x07, 0xc7, 0xa0, 0xfb, 0xa4, 0x2b, 0x05, 0x55, 0x36, 0xd3, 0x2f, 0xb1, 0xdb, 0xf7, 0xc6, 0x1f, 0x35, 0x44, 0x14, 0xd6, 0x6a, 0xd2, 0x22, 0xcb, 0x6f, 0x55, 0x1e, 0x83, 0x87, 0x97, 0x00, 0x25, 0x06, 0x26, 0x6e, 0xd3, 0x5b, 0x49, 0xdc, 0x3a, 0x4d, 0x39, 0xf7, 0x68, 0x85, 0x8e, 0x44, 0xde, 0x4d, 0xf8, 0x04, 0xe7, 0x97, 0x2f, 0x5c, 0x28, 0x41, 0x2d, 0xb2, 0x77, 0x97, 0x9a, 0x5a, 0xf1, 0x1a, 0x88, 0x72, 0x46, 0x80, 0x60, 0x0a, 0x58, 0xfb, 0x1c, 0x89, 0x05, 0xbe, 0xb7, 0x4b, 0x40, 0xbe, 0xe2, 0x8f, 0x67, 0xb5, 0xf9, 0x91, 0xd0, 0x6d, 0x35, 0xf3, 0xa6, 0x3b, 0x23, 0x61, 0xf3, 0xc9, 0x55, 0x75, 0xfd, 0x19, 0x57, 0xd8, 0xd6, 0xc7, 0xe4, 0xab, 0x2f, 0x8f, 0x5a, 0x25, 0x6d, 0x0e, 0x6c, 0x7d, 0xff, 0xcd, 0x17, 0x0a, 0xee, 0x7b, 0xd7, 0xa9, 0xb5, 0x7a, 0x1a, 0x5f, 0x54, 0x9e, 0xf5, 0x3f, 0xa0, 0x31, 0x16, 0x8e, 0xdd, 0x3a, 0xfa, 0x26, 0x8e, 0xfe, 0x60, 0x18, 0x8c, 0xc8, 0xfd, 0x95, 0x56, 0xe6, 0x71, 0x0f, 0xa8, 0xf4, 0x7a, 0x9b, 0x4f, 0x5d, 0x67, 0x9a, 0x3b, 0x1e, 0xd0, 0x98, 0xd6, 0xcd, 0x85, 0x74, 0x94, 0xda, 0xc4, 0xc1, 0xcb, 0x16, 0xaf, 0x6d, 0xc6, 0x71, 0xfc, 0xa0, 0x15, 0x08, 0xef, 0xe7, 0x26, 0x5f, 0x85, 0x92, 0x1a, 0xea, 0xf3, 0x5b, 0xd1, 0xd3, 0x4e, 0x48, 0x47, 0xf7, 0x8c, 0xd2, 0x24, 0x32, 0xab, 0x46, 0x8e, 0xdc, 0x30, 0x6c, 0x42, 0x93, 0xd3, 0x67, 0xe3, 0x3b, 0x79, 0xdc, 0x91, 0x44, 0x62, 0x56, 0xbe, 0x2b, 0xa4, 0xe9, 0x3d, 0x44, 0xd8, 0x16, 0x9c, 0xb6, 0x13, 0xef, 0xb4, 0xc7, 0x18, 0x7b, 0x7e, 0x5a, 0xcb, 0x5c, 0x29, 0xb5, 0xe9, 0xaf, 0x69, 0x88, 0xf7, 0x34, 0x11, 0x2b, 0x78, 0xaf, 0xe4, 0x28, 0x63, 0x8e, 0xa8, 0xf9, 0xd4, 0xcb, 0x7d, 0x13, 0x02, 0x14, 0x6d, 0x23, 0x71, 0x2a, 0x44, 0x97, 0x69, 0x87, 0xa2, 0x60, 0xa6, 0x43, 0x4e, 0xf6, 0x51, 0x38, 0xcd, 0x9d, 0x2f, 0x65, 0x34, 0xe8, 0x19, 0x90, 0x3a, 0x7b, 0xac, 0x2f, 0x91, 0x14, 0x41, 0x89, 0x77, 0xcd, 0x1f, 0x19, 0x88, 0x9b, 0xf0, 0x33, 0xd6, 0x1b, 0x72, 0xea, 0x3b, 0x8e, 0x6f, 0x30, 0xee, 0x21, 0xef, 0x3f, 0x55, 0x73, 0xac, 0x38, 0x1a, 0x51, 0xc6, 0x0a, 0x81, 0xc4, 0xb8, 0x96, 0xf9, 0x4d, 0x8b, 0x11, 0xf1, 0x6f, 0x4a, 0xa9, 0xec, 0x6e, 0xb5, 0x6b, 0xd8, 0x57, 0x39, 0x64, 0x9b, 0x40, 0x20, 0x06, 0xf0, 0xd1, 0x06, 0xce, 0x71, 0x03, 0x8c, 0x24, 0xf4, 0x28, 0x50, 0x83, 0x1b, 0x2c, 0x1c, 0xd9, 0x27, 0x1a, 0x5d, 0x31, 0x0d, 0xe1, 0xd7, 0x8f, 0xcc, 0x59, 0x98, 0x1b, 0xfd, 0x81, 0x2a, 0x82, 0xac, 0x0b, 0x0d, 0x9a, 0x66, 0x1a, 0x64, 0x45, 0x93, 0x4a, 0xef, 0x97, 0x07, 0xf1, 0x39, 0x3b, 0xd3, 0xa4, 0x13, 0x12, 0x61, 0xfd, 0x40, 0x1e, 0xc0, 0x9c, 0x72, 0x9f, 0x3c, 0x6c, 0x76, 0x7b, 0x32, 0x27, 0xab, 0xe3, 0x22, 0x1d, 0xb8, 0x34, 0x06, 0x31, 0x7e, 0x1b, 0xe2, 0x24, 0x4c, 0xfd, 0x9d, 0x16, 0x52, 0x96, 0x0f, 0x49, 0x59, 0xe0, 0x5b, 0x29, 0xb1, 0x36, 0x7f, 0x89, 0x6a, 0xb9, 0x29, 0x30, 0xc7, 0xf3, 0xcd, 0x94, 0xef, 0xba, 0xf4, 0xe5, 0xe6, 0x57, 0xd7, 0x4d, 0xbc, 0xe8, 0x2c, 0x77, 0x04, 0x03, 0x40, 0x4e, 0x88, 0x9c, 0x46, 0x07, 0x3b, 0x29, 0xee, 0x61, 0x6f, 0x03, 0x3a, 0x2b, 0x48, 0x10, 0x8e, 0x07, 0x71, 0x9f, 0x06, 0x6f, 0x0d, 0x93, 0x0b, 0xf5, 0xf1, 0xc4, 0x29, 0xcf, 0x10, 0xa2, 0x1b, 0x92, 0x36, 0x1c, 0x28, 0x3e, 0xfa, 0xc0, 0xb3, 0x7b, 0xee, 0x23, 0x0d, 0x22, 0x18, 0x83, 0x8d, 0xff, 0xa6, 0xab, 0xe3, 0xd6, 0xdd, 0x17, 0xa9, 0xa3, 0x53, 0x59, 0x3b, 0x26, 0x5e, 0xbb, 0xc9, 0x9f, 0xcc, 0x26, 0xaa, 0xd7, 0xd4, 0x42, 0xf3, 0x5f, 0x4d, 0xdf, 0x49, 0x1c, 0x1e, 0x94, 0xf3, 0x04, 0xf6, 0xa5, 0x33, 0x22, 0x3d, 0x2a, 0xd7, 0xe0, 0x4a, 0x6e, 0x0b, 0x85, 0xd6, 0x96, 0x71, 0xfd, 0xb0, 0x83, 0x74, 0xd9, 0xb3, 0xf9, 0xd9, 0x96, 0xf6, 0x00, 0x96, 0x22, 0x42, 0x8a, 0xe8, 0x9c, 0xc9, 0x57, 0xa0, 0x5b, 0x14, 0x16, 0xbd, 0x33, 0x3e, 0xcd, 0x40, 0xf3, 0x60, 0x7a, 0x3c, 0x32, 0x4c, 0xfb, 0x2d, 0x4c, 0x7e, 0x2b, 0x8a, 0xa7, 0x4f, 0x4e, 0x9e, 0x3b, 0x6c, 0xaf, 0x93, 0x51, 0x87, 0x87, 0xd0, 0x8a, 0x4c, 0x21, 0x85, 0x24, 0x97, 0x3c, 0x83, 0x79, 0xe4, 0xb1, 0x52, 0xc8, 0x07, 0x55, 0x7d, 0x38, 0x1d, 0x21, 0x31, 0x1a, 0xc2, 0x90, 0x06, 0x6f, 0x84, 0x49, 0x1d, 0xaa, 0x98, 0xfe, 0x6b, 0xb7, 0xcc, 0x94, 0x54, 0x3b, 0xbd, 0x84, 0x7c, 0x1e, 0x4a, 0x81, 0xda, 0x47, 0x48, 0x5b, 0x0e, 0xa6, 0x77, 0x23, 0xf4, 0x78, 0xb5, 0x90, 0x79, 0xc6, 0x72, 0xa1, 0xad, 0x2f, 0x64, 0x84, 0x1a, 0xe8, 0x7c, 0xb7, 0x55, 0x01, 0x18, 0x6d, 0xd2, 0xea, 0x7a, 0x33, 0xfc, 0x35, 0x79, 0xd3, 0x85, 0x9d, 0x76, 0x78, 0xfb, 0x48, 0x92, 0x14, 0x9d, 0x49, 0x1e, 0xff, 0x6c, 0x69, 0x54, 0xe1, 0x85, 0x27, 0x44, 0xd1, 0xad, 0xfd, 0x10, 0xbe, 0x2e, 0xe5, 0x5c, 0x0e, 0xe2, 0x1c, 0x01, 0x86, 0x8d, 0x26, 0x01, 0x6a, 0x6f, 0x12, 0xc0, 0xe5, 0x1a, 0xff, 0x71, 0xaa, 0x82, 0xdf, 0xce, 0xdc, 0x53, 0x7b, 0x0c, 0x2c, 0x87, 0xb8, 0x0e, 0x41, 0x37, 0x18, 0xd9, 0x5c, 0xb1, 0x83, 0x48, 0x3c, 0xcc, 0x48, 0x00, 0x3f, 0x78, 0x5f, 0xa7, 0xcb, 0x99, 0xf1, 0x51, 0xec, 0x16, 0x19, 0x3b, 0x3e, 0x2c, 0xed, 0xbc, 0x0e, 0x09, 0xb8, 0x78, 0xbc, 0x96, 0x8a, 0xd7, 0x63, 0x94, 0xf3, 0xb6, 0xbc, 0xea, 0x0b, 0x5c, 0x40, 0x3d, 0xb5, 0xaf, 0x8d, 0xc2, 0x25, 0xa7, 0x0b, 0x50, 0xa0, 0x04, 0xcf, 0xba, 0x83, 0x3c, 0xc0, 0x5b, 0x87, 0xb8, 0xf8, 0xf2, 0x43, 0x3f, 0x6d, 0xb1, 0xf3, 0xb3, 0xd0, 0x90, 0x77, 0xfb, 0xb5, 0xe7, 0x9f, 0x40, 0xf5, 0x3c, 0xa5, 0x5c, 0x50, 0x59, 0xfb, 0x8f, 0x57, 0xa2, 0x47, 0x74, 0x8a, 0xa6, 0xad, 0x34, 0xbd, 0xf4, 0x4c, 0xfa, 0xc0, 0x30, 0x0b, 0xa7, 0x3e, 0x66, 0x95, 0xc6, 0xe6, 0x9d, 0xa2, 0xc2, 0xc9, 0xb0, 0x79, 0x56, 0x03, 0x59, 0xb2, 0x46, 0x9e, 0x8f, 0x41, 0x4d, 0xb3, 0x12, 0xb0, 0x56, 0xd2, 0x44, 0xac, 0xef, 0xa4, 0x3a, 0xc3, 0xfa, 0xcf, 0x13, 0x6c, 0xa5, 0x1a, 0x88, 0x48, 0x9d, 0xd2, 0xc5, 0xa7, 0x7f, 0x6c, 0x77, 0x4e, 0x90, 0x6b, 0x27, 0x78, 0xad, 0x85, 0xc6, 0x1a, 0x85, 0x01, 0x89, 0x6b, 0x05, 0x63, 0xf7, 0xa4, 0x14, 0x4b, 0x40, 0x04, 0x81, 0x9b, 0xd0, 0x18, 0x39, 0xd8, 0x24, 0x39, 0xbe, 0xd3, 0xdc, 0x56, 0xd4, 0x88, 0x12, 0xf4, 0x7e, 0x46, 0xeb, 0x72, 0x28, 0x10, 0x6b, 0x92, 0x26, 0x44, 0x8e, 0x35, 0x5d, 0x7a, 0x94, 0x66, 0x40, 0xaf, 0x9c, 0x9a, 0xff, 0xa3, 0x74, 0x36, 0xfa, 0x7f, 0xb0, 0x52, 0x7c, 0xbb, 0xf9, 0xbd, 0xa6, 0x3f, 0xa8, 0x41, 0xa9, 0xc8, 0x94, 0x28, 0x39, 0x8e, 0x27, 0xfe, 0x3e, 0x24, 0xb8, 0x99, 0xcc, 0x9f, 0x14, 0x57, 0x55, 0xfa, 0x5e, 0xa7, 0x1d, 0xb9, 0x1a, 0xcb, 0xef, 0xcd, 0x84, 0xdc, 0x0f, 0xb8, 0x26, 0x0e, 0x6f, 0xf1, 0xa9, 0x35, 0x25, 0x8a, 0xec, 0x88, 0x1d, 0x10, 0x53, 0xa5, 0x0b, 0xb3, 0x62, 0xd6, 0xa4, 0xa6, 0x8a, 0x93, 0x0e, 0xc9, 0x42, 0x48, 0x95, 0x86, 0x5a, 0x58, 0x9f, 0xf8, 0x8c, 0x61, 0xe2, 0x53, 0x55, 0xc2, 0xd4, 0x80, 0x03, 0x5a, 0x63, 0x07, 0x0e, 0x93, 0xe7, 0x32, 0xab, 0x9f, 0x55, 0x70, 0x9f, 0x02, 0xb5, 0xf7, 0x51, 0x51, 0xd6, 0xad, 0x24, 0x39, 0x40, 0x49, 0x03, 0xc2, 0x6a, 0xb5, 0x3e, 0xd5, 0x2d, 0xb7, 0x94, 0xfd, 0x79, 0xd1, 0x91, 0x6a, 0x47, 0x66, 0x1a, 0x3b, 0xce, 0x1d, 0x46, 0xfd, 0xfa, 0x8b, 0x6f, 0x6e, 0x1a, 0x0c, 0x89, 0x87, 0xd9, 0xf1, 0xb3, 0xba, 0x6f, 0xe1, 0x0c, 0x79, 0x18, 0x79, 0xc8, 0xf7, 0xc5, 0x36, 0x83, 0x32, 0x12, 0x95, 0xd4, 0x31, 0x79, 0x78, 0x26, 0x8a, 0xc5, 0xcc, 0xc3, 0x28, 0xc9, 0x69, 0x32, 0x4b, 0x51, 0x39, 0xc3, 0xd0, 0x59, 0x9d, 0x68, 0xb3, 0x7d, 0x0c, 0xc6, 0xd2, 0xb1, 0xfe, 0x8c, 0xf4, 0x32, 0x08, 0x04, 0x09, 0xbd, 0x48, 0xe8, 0xb4, 0xfe, 0x03, 0x76, 0x06, 0x4b, 0x8d, 0xc6, 0x8d, 0x92, 0x69, 0x5c, 0x8d, 0x90, 0xb2, 0xfa, 0x8d, 0x44, 0xb9, 0xb7, 0x15, 0xa4, 0xf0, 0x55, 0xb7, 0x8e, 0x07, 0xd0, 0x4c, 0x01, 0x54, 0x33, 0x80, 0x8d, 0x78, 0xaf, 0x91, 0x08, 0x40, 0xee, 0x53, 0x83, 0xc9, 0xa5, 0x78, 0x7c, 0xe8, 0x69, 0x0e, 0x56, 0xc8, 0xc3, 0x49, 0x06, 0xd5, 0x86, 0x83, 0x0e, 0xd9, 0x60, 0x81, 0xaf, 0x65, 0xb0, 0xf8, 0x5a, 0x73, 0x97, 0x4f, 0x69, 0x49, 0x52, 0xa7, 0x0c, 0xa1, 0xc7, 0x19, 0x86, 0x06, 0x5d, 0x3e, 0x99, 0x81, 0x11, 0xf5, 0x3e, 0x75, 0xc7, 0x60, 0x9a, 0xc8, 0xdd, 0x30, 0x2e, 0x43, 0x06, 0x23, 0x4e, 0x3c, 0x56, 0xca, 0xd4, 0x72, 0x99, 0x90, 0x15, 0x38, 0xe9, 0xf8, 0x14, 0xd6, 0x80, 0x26, 0xf6, 0x2c, 0xca, 0xa1, 0xb6, 0x98, 0xbe, 0x57, 0x1a, 0x1a, 0x6f, 0xe2, 0xe6, 0xb6, 0xde, 0x09, 0x4f, 0x1a, 0x13, 0x8a, 0xb2, 0x81, 0x6c, 0x17, 0x86, 0xd7, 0x34, 0x9e, 0x90, 0x1e, 0x77, 0xcd, 0x55, 0x10, 0x15, 0xd6, 0xd5, 0x06, 0x16, 0x6f, 0x76, 0x18, 0x3d, 0x1d, 0x3f, 0x86, 0xe0, 0xb3, 0x46, 0x57, 0xf7, 0x15, 0x6c, 0x3f, 0x72, 0x42, 0x47, 0xc6, 0xd0, 0x92, 0x60, 0xa7, 0xed, 0x3c, 0x9f, 0x76, 0x1b, 0x1a, 0x03, 0x86, 0x75, 0xb1, 0x96, 0x0a, 0x70, 0x6c, 0xa1, 0x7a, 0xb3, 0x28, 0x1c, 0x39, 0x29, 0xf5, 0x68, 0x74, 0x54, 0x1b, 0x41, 0x4d, 0xe4, 0x5c, 0xee, 0x39, 0x88, 0x79, 0xba, 0xa6, 0x04, 0xf8, 0xa8, 0xe2, 0x84, 0x23, 0x63, 0x38, 0x2f, 0x54, 0x74, 0x5c, 0x00, 0x70, 0xb7, 0x09, 0xd1, 0xb2, 0x10, 0xe8, 0xb9, 0xaa, 0x5a, 0xb4, 0x98, 0x85, 0xa0, 0x9c, 0xf0, 0x8e, 0x90, 0xe8, 0xf7, 0xf5, 0x2c, 0xe0, 0xea, 0xcf, 0xc3, 0xe9, 0xa3, 0x5f, 0x20, 0xf2, 0x6e, 0x94, 0x01, 0x0e, 0x19, 0xd2, 0xcb, 0x62, 0x4a, 0xf6, 0x7b, 0x42, 0x15, 0x94, 0xe0, 0x97, 0xce, 0x82, 0x08, 0x84, 0x1c, 0x9b, 0xf8, 0x49, 0x4f, 0xbd, 0x9f, 0x67, 0xf4, 0x14, 0x0d, 0x05, 0xa6, 0x9b, 0xe1, 0x92, 0x27, 0xdf, 0x00, 0xac, 0xaf, 0x07, 0x8d, 0x40, 0x83, 0x11, 0x15, 0xf3, 0xca, 0x5e, 0x09, 0xc1, 0x9c, 0x71, 0x72, 0xe4, 0x5d, 0xf4, 0xe0, 0xf8, 0x49, 0xfb, 0xa3, 0x5c, 0x4f, 0x8d, 0x3e, 0xdb, 0x23, 0x61, 0x19, 0x8c, 0x8f, 0xe5, 0x76, 0xf6, 0x0a, 0x84, 0xa6, 0x78, 0x8b, 0x29, 0x7d, 0xe9, 0x9f, 0xff, 0x03, 0x7b, 0xba, 0x7c, 0x6c, 0xe5, 0xca, 0x9d, 0x4b, 0xc1, 0x12, 0x73, 0x02, 0x32, 0x36, 0xde, 0x7d, 0xcb, 0x92, 0x99, 0x20, 0xac, 0xd0, 0x76, 0xfd, 0xee, 0xba, 0xeb, 0x4b, 0x42, 0x4c, 0xce, 0x13, 0xd4, 0x0e, 0x5d, 0x2d, 0x76, 0xa1, 0x81, 0x6b, 0xfa, 0x97, 0x54, 0x14, 0xdf, 0x88, 0xe0, 0x94, 0x31, 0x61, 0x2a, 0x71, 0xaa, 0x00, 0x6f, 0x81, 0x1d, 0xfe, 0xad, 0x5b, 0x15, 0xcc, 0x65, 0x0b, 0xb9, 0x02, 0x9f, 0x0a, 0xf2, 0xf3, 0x30, 0x6d, 0xd0, 0x85, 0x38, 0x5c, 0x2a, 0x40, 0xee, 0xc6, 0x85, 0xa4, 0xa0, 0x53, 0x37, 0xc0, 0xf5, 0x9a, 0xcd, 0x00, 0x76, 0x95, 0xa9, 0x47, 0x4c, 0x51, 0xf0, 0x3d, 0x4b, 0xea, 0xa3, 0xeb, 0x30, 0xb7, 0x0b, 0x85, 0x27, 0xc2, 0x5b, 0x86, 0x91, 0x7b, 0x91, 0x02, 0x03, 0xad, 0x9d, 0x38, 0x92, 0xb0, 0xc5, 0x68, 0x4e, 0xe1, 0x48, 0xe4, 0x0c, 0x4f, 0x41, 0x68, 0x69, 0xb7, 0xcf, 0xae, 0x0b, 0xb3, 0x73, 0x3e, 0x2a, 0x2e, 0xb9, 0x84, 0x4f, 0x1b, 0x1b, 0x24, 0x5c, 0x66, 0x22, 0x92, 0xcd, 0x2b, 0xce, 0xdd, 0x3d, 0x27, 0x38, 0xcb, 0x2c, 0x6c, 0x76, 0x2b, 0xff, 0x58, 0xbf, 0x67, 0x48, 0xc7, 0xcf, 0x59, 0x48, 0x88, 0x8d, 0x5f, 0xb3, 0x0e, 0xec, 0xb2, 0xb2, 0x68, 0x0f, 0xf3, 0x2e, 0x74, 0xb0, 0x07, 0x4c, 0x4f, 0xc2, 0x25, 0x34, 0x0f, 0x55, 0x2d ],
+const [ 0x02, 0x87, 0xfa, 0x0e, 0x37, 0x7c, 0x9d, 0xd6, 0x08, 0xcf, 0x98, 0x53, 0x90, 0x7b, 0x01, 0x0b, 0xca, 0xe4, 0xc2, 0x16, 0x02, 0x75, 0xa7, 0xdd, 0x89, 0x88, 0xb5, 0x22, 0xad, 0x86, 0xbe, 0x41, 0xe8, 0x4f, 0x32, 0xb5, 0x58, 0xdc, 0x38, 0xdd, 0x6f, 0x23, 0xfd, 0x00, 0xec, 0x3a, 0x4c, 0x90, 0x0a, 0xc0, 0x60, 0xab, 0xf7, 0x79, 0xf6, 0xe7, 0x87, 0x38, 0xa6, 0x4f, 0x2a, 0x02, 0x72, 0xa9, 0x1c, 0x70, 0xa0, 0xfb, 0xdb, 0x55, 0xc5, 0x4d, 0xde, 0xa1, 0x23, 0xaf, 0x84, 0x85, 0x34, 0x7e, 0x4b, 0xd8, 0x87, 0xe4, 0x42, 0xba, 0xcb, 0x9e, 0xc1, 0x77, 0x2a, 0x02, 0x57, 0xae, 0xd8, 0x40, 0x04, 0xb2, 0xeb, 0xe8, 0xa8, 0x30, 0x6d, 0xac, 0xbc, 0x12, 0xaf, 0x68, 0x40, 0xa4, 0xe1, 0x5f, 0xf4, 0xf5, 0xe0, 0xc7, 0xcb, 0x81, 0x4f, 0x89, 0x9d, 0x0c, 0xe9, 0x42, 0x1c, 0xd1, 0x15, 0x8d, 0x09, 0xdc, 0xbb, 0x84, 0xa8, 0xb5, 0x57, 0x84, 0x71, 0x3e, 0x4c, 0x31, 0x08, 0xde, 0x7a, 0xba, 0x6f, 0xdf, 0x12, 0x5f, 0x7b, 0x15, 0xa9, 0x30, 0x84, 0xc1, 0x8c, 0x17, 0x61, 0xb4, 0x54, 0x18, 0x93, 0xb8, 0xba, 0xd8, 0xc1, 0x2b, 0xac, 0x5c, 0x65, 0xed, 0xa0, 0x14, 0xc4, 0x7d, 0x28, 0x18, 0x23, 0x5e, 0xc6, 0xb1, 0x38, 0xc0, 0x02, 0x1b, 0xdf, 0x5c, 0xbb, 0x89, 0x0e, 0xa0, 0xbb, 0x6a, 0x0b, 0x0c, 0x8e, 0xeb, 0xdc, 0xdc, 0x93, 0xbd, 0x00, 0xe7, 0x53, 0x18, 0x5c, 0xc7, 0x12, 0x00, 0x78, 0x3a, 0xa4, 0xc7, 0xeb, 0xc8, 0x82, 0xd3, 0x14, 0xa6, 0x1d, 0xa1, 0x0b, 0xdb, 0x72, 0x0a, 0xd7, 0xa1, 0xdf, 0xc5, 0xe2, 0x0e, 0x35, 0x2e, 0xaa, 0xf3, 0x0e, 0x45, 0xb8, 0x05, 0x61, 0xfa, 0xd6, 0x3a, 0x53, 0xa8, 0x7d, 0x76, 0x50, 0xdf, 0x8d, 0x67, 0x5b, 0x66, 0x40, 0xad, 0xa2, 0x80, 0x61, 0x3f, 0x56, 0x6f, 0xb9, 0x0a, 0xb9, 0x37, 0xcb, 0xdb, 0x79, 0xa4, 0xc1, 0x7e, 0x3c, 0x8e, 0xa5, 0x28, 0x7c, 0x5c, 0xd4, 0x12, 0x95, 0xc7, 0xb0, 0x67, 0x1c, 0xe1, 0x96, 0x60, 0x73, 0x55, 0x10, 0xad, 0x9a, 0xf0, 0x4b, 0x18, 0x48, 0x60, 0xcb, 0x65, 0x3b, 0x3c, 0x5d, 0x7c, 0xcc, 0x45, 0x4d, 0xca, 0xc6, 0xec, 0xda, 0xe4, 0x78, 0x14, 0xe7, 0x6d, 0x09, 0x18, 0xf3, 0x3b, 0x0c, 0x10, 0x4b, 0xb5, 0x54, 0x50, 0x7e, 0x7f, 0x0a, 0x32, 0x12, 0x5a, 0xfc, 0x16, 0x75, 0x45, 0x38, 0xa6, 0x36, 0xe8, 0xda, 0x5f, 0x75, 0x33, 0x22, 0x4d, 0x99, 0x43, 0xca, 0x15, 0x41, 0x85, 0x96, 0x39, 0x7c, 0x1d, 0x2c, 0x98, 0x3c, 0x89, 0x26, 0x34, 0x08, 0x81, 0x66, 0x38, 0xf2, 0x22, 0xa9, 0x3a, 0xc9, 0x4c, 0x5f, 0xbd, 0x8f, 0x49, 0xbb, 0xfa, 0x2d, 0xaf, 0x06, 0xe0, 0x66, 0x87, 0x38, 0x59, 0x0a, 0xae, 0xc9, 0xcf, 0x6c, 0x7c, 0xc5, 0xef, 0x15, 0xa4, 0x1f, 0xac, 0xba, 0x5b, 0x47, 0x87, 0x6c, 0xbd, 0xfe, 0x0e, 0x0f, 0x6c, 0x6a, 0xa3, 0x0d, 0x7a, 0x65, 0x7f, 0x4c, 0x89, 0x1b, 0xf7, 0x5d, 0x30, 0xd4, 0xfd, 0xf6, 0xa1, 0x0e, 0xe9, 0xa2, 0x89, 0xcf, 0x7a, 0xb7, 0x38, 0x39, 0x17, 0x88, 0x02, 0x5f, 0x5b, 0xdd, 0xe5, 0x57, 0xd1, 0xa0, 0x6c, 0x91, 0xfc, 0xd9, 0xd2, 0x66, 0x9b, 0xdd, 0x6b, 0xf4, 0x2a, 0xc1, 0x40, 0x2a, 0xac, 0x15, 0xf9, 0x1f, 0xa8, 0xcf, 0x01, 0xa8, 0x72, 0x86, 0xe4, 0x29, 0xab, 0xe1, 0xfc, 0xab, 0x0b, 0x4e, 0x4c, 0x2f, 0x5e, 0xf7, 0xac, 0x42, 0xcd, 0xf2, 0x27, 0xd2, 0x5f, 0xb7, 0xa1, 0x40, 0xc0, 0xd8, 0xbc, 0xb6, 0x40, 0xec, 0xfd, 0xbb, 0x1e, 0xcc, 0x2b, 0x05, 0x07, 0x03, 0xf8, 0x8e, 0xda, 0x7f, 0xe4, 0xea, 0xae, 0x8d, 0x5d, 0xd7, 0x16, 0x04, 0x2b, 0x16, 0xa4, 0xbf, 0x0b, 0x79, 0xab, 0x51, 0x9a, 0x3e, 0x49, 0xf5, 0x75, 0x9b, 0xa5, 0xc4, 0x9f, 0x9a, 0x76, 0x2b, 0x23, 0x27, 0xc5, 0x9b, 0xfa, 0x67, 0xf3, 0x82, 0x2e, 0x4c, 0xfd, 0x7b, 0x40, 0x67, 0xff, 0xc1, 0xc8, 0xfd, 0xf7, 0xea, 0x5b, 0x5c, 0xcc, 0xd2, 0xb1, 0x6f, 0x8f, 0xd5, 0x07, 0x91, 0x00, 0x41, 0xc3, 0x9f, 0x54, 0x0a, 0x57, 0x51, 0x35, 0xc0, 0x67, 0xca, 0x0b, 0xbf, 0x2e, 0x6d, 0x7a, 0xa6, 0x1e, 0xf3, 0x2b, 0x0a, 0xc6, 0xba, 0xd0, 0x6b, 0xf9, 0x60, 0x62, 0x66, 0x2d, 0x91, 0xad, 0x2d, 0x21, 0x1d, 0x0f, 0x35, 0xc3, 0x4e, 0x7d, 0x2e, 0x50, 0x78, 0xc6, 0x38, 0xbd, 0xd1, 0x1c, 0x54, 0x56, 0x83, 0xd0, 0x18, 0xa5, 0x00, 0x5d, 0xa8, 0x95, 0x96, 0xa8, 0xe1, 0xd7, 0x43, 0x86, 0xd7, 0x85, 0xca, 0x7f, 0x82, 0x05, 0x06, 0xd2, 0xb4, 0x31, 0x7f, 0xb8, 0x4e, 0xb4, 0x3b, 0xed, 0xb4, 0xb7, 0xd7, 0x6d, 0x7e, 0xbe, 0xd6, 0x7b, 0x71, 0xcc, 0x38, 0xe8, 0xad, 0xce, 0x4e, 0x92, 0x27, 0x36, 0xce, 0x2b, 0x5a, 0xe7, 0x23, 0x3c, 0x3a, 0x51, 0x06, 0x69, 0x6a, 0xdd, 0x52, 0xf6, 0xae, 0x8b, 0x14, 0x8a, 0xa3, 0xd9, 0xe2, 0x33, 0xae, 0xe8, 0x6f, 0xab, 0x32, 0xda, 0x5c, 0xda, 0x06, 0x7e, 0x50, 0x9b, 0x26, 0x2f, 0x4a, 0xc3, 0xa8, 0xf9, 0x36, 0x60, 0xf2, 0xfe, 0xbf, 0x3e, 0x2b, 0x18, 0x65, 0xb0, 0xef, 0xc0, 0xcf, 0x8c, 0x47, 0x2f, 0x62, 0x78, 0xd8, 0xc2, 0x12, 0x64, 0x5a, 0xa3, 0x78, 0x58, 0x4c, 0xa6, 0x25, 0x70, 0xe6, 0x71, 0x37, 0x25, 0x50, 0xe0, 0x2a, 0xcd, 0x11, 0xa8, 0xf0, 0x65, 0xca, 0x3a, 0x43, 0x8f, 0x24, 0xea, 0x3a, 0xd7, 0x07, 0x50, 0x1a, 0x3a, 0x0d, 0xee, 0x6f, 0xe9, 0x36, 0x14, 0x5c, 0x4a, 0xdd, 0x01, 0x30, 0x40, 0xea, 0x4b, 0x39, 0xac, 0x4a, 0x81, 0xdd, 0x34, 0x9c, 0x0e, 0xe6, 0x43, 0x2d, 0x60, 0x1e, 0x50, 0x27, 0x4a, 0x1c, 0x64, 0x05, 0xa7, 0x5d, 0xd6, 0x4a, 0x41, 0x97, 0x59, 0x73, 0xf1, 0x49, 0x3a, 0x2a, 0x07, 0x97, 0xe2, 0xbc, 0xeb, 0x55, 0xa2, 0xcd, 0x05, 0x62, 0xb0, 0x4b, 0xdb, 0x37, 0x6c, 0xa0, 0x79, 0xbf, 0xe8, 0x2c, 0x16, 0x6a, 0xa8, 0xf2, 0xf4, 0x7d, 0xa6, 0x91, 0x88, 0xac, 0x99, 0x77, 0xdb, 0xea, 0x77, 0x51, 0x30, 0x80, 0x39, 0xc5, 0xe7, 0x5c, 0xde, 0x64, 0xa1, 0xac, 0xb2, 0xda, 0xa5, 0xac, 0xd0, 0x68, 0x83, 0xbc, 0xe6, 0x95, 0xf7, 0xb6, 0x38, 0x20, 0x0f, 0x7e, 0xe8, 0x38, 0x90, 0xdb, 0x74, 0xef, 0x97, 0x85, 0x80, 0xed, 0x7c, 0x7f, 0xd6, 0x61, 0xfb, 0xa6, 0xab, 0x3e, 0x96, 0x8b, 0x24, 0xa3, 0x35, 0x7e, 0x18, 0x9a, 0x10, 0xeb, 0x18, 0x06, 0xce, 0xea, 0xac, 0xd7, 0xee, 0x11, 0xe0, 0x80, 0x67, 0x8c, 0xff, 0xab, 0x8b, 0x70, 0x9f, 0x2b, 0x31, 0x4d, 0xdd, 0x32, 0x13, 0x03, 0xea, 0xc4, 0x75, 0xd6, 0xc7, 0x6b, 0x08, 0xc4, 0x4c, 0x2d, 0x0d, 0x15, 0x6f, 0xbb, 0xbd, 0x35, 0xc3, 0xeb, 0xe9, 0xbf, 0x3f, 0x68, 0xde, 0xda, 0x41, 0xa8, 0x8b, 0xc8, 0xd2, 0x1f, 0xe6, 0xbc, 0x2c, 0xb3, 0x8b, 0xec, 0x7a, 0x6f, 0xa6, 0xe8, 0xde, 0x7b, 0x14, 0x2a, 0xb8, 0x4c, 0xc5, 0xee, 0x26, 0x18, 0x65, 0x44, 0xc7, 0x8d, 0x3b, 0x63, 0xc5, 0xc2, 0x51, 0x40, 0x12, 0x6e, 0xd5, 0x5f, 0xf1, 0x58, 0xbf, 0xe9, 0xb9, 0x0e, 0xb4, 0x00, 0xd5, 0xda, 0x2a, 0x4f, 0x10, 0xf2, 0xce, 0xe5, 0x10, 0xef, 0x22, 0x43, 0x1f, 0x80, 0x6b, 0xb3, 0x32, 0x60, 0xca, 0xdc, 0x23, 0x85, 0xa9, 0x94, 0x42, 0x9b, 0x58, 0xf5, 0x0c, 0xb0, 0xf8, 0xb3, 0x3a, 0x31, 0x99, 0xac, 0xfe, 0x15, 0x9f, 0xc1, 0x89, 0x58, 0x6a, 0xe5, 0xd0, 0xab, 0x36, 0x73, 0x90, 0x6a, 0x3f, 0xc5, 0x8f, 0xce, 0x29, 0x02, 0x26, 0x64, 0xa0, 0x37, 0xfc, 0xbd, 0x3c, 0xaa, 0x14, 0x67, 0xa7, 0x6b, 0x0a, 0x1d, 0x01, 0x2b, 0x99, 0x3b, 0x83, 0x51, 0x61, 0x75, 0x63, 0x4b, 0xe7, 0xc7, 0xf8, 0x22, 0xde, 0xaf, 0x1f, 0x52, 0xa5, 0x9b, 0xdd, 0xd8, 0x10, 0x9d, 0x46, 0x8c, 0x6b, 0x66, 0x9d, 0xb1, 0xbc, 0x72, 0xbc, 0xcb, 0x49, 0x80, 0xb6, 0xb0, 0x5a, 0x45, 0xbc, 0xe2, 0x40, 0x61, 0x3d, 0x1c, 0x96, 0x92, 0x51, 0x2b, 0xc7, 0x28, 0x58, 0xff, 0xd1, 0xb9, 0xde, 0x02, 0x48, 0x15, 0xc3, 0xa9, 0x9d, 0x7c, 0x98, 0x48, 0xa0, 0x0f, 0x4b, 0x2a, 0x44, 0x85, 0x07, 0xe1, 0xa2, 0x1f, 0x56, 0xdb, 0x41, 0xde, 0x89, 0x36, 0x95, 0xf3, 0x59, 0xd5, 0xc5, 0x77, 0xce, 0xb4, 0xb2, 0x5c, 0x60, 0x78, 0x34, 0xa4, 0x5d, 0x4b, 0xa6, 0xd0, 0x8a, 0xe6, 0xa6, 0x9c, 0x0d, 0xef, 0x16, 0xe9, 0x8a, 0x86, 0x66, 0xfb, 0x8d, 0x1b, 0x16, 0xe4, 0x28, 0x82, 0x76, 0x40, 0xdd, 0x49, 0xb1, 0x23, 0xbd, 0x49, 0x09, 0x50, 0xd2, 0x7b, 0x64, 0xac, 0xbb, 0x0d, 0x08, 0xf2, 0x96, 0xb5, 0xa3, 0xa7, 0x23, 0x46, 0x8e, 0x51, 0x25, 0x81, 0x52, 0xe4, 0x0c, 0x2d, 0x6c, 0x7d, 0xd2, 0x6a, 0x4d, 0x52, 0x23, 0x42, 0xa5, 0xe9, 0xc0, 0x81, 0xe1, 0x89, 0x25, 0xc6, 0xf2, 0xef, 0x6a, 0xdb, 0x51, 0x41, 0x67, 0x42, 0x40, 0x48, 0x1b, 0x10, 0x52, 0xd9, 0x4f, 0xff, 0x2d, 0x94, 0x76, 0xbe, 0x8f, 0xd2, 0xd8, 0x8b, 0x8f, 0xd8, 0xef, 0x04, 0x26, 0x51, 0x11, 0x3a, 0xed, 0xfb, 0x50, 0x08, 0x28, 0xa0, 0x9f, 0xa3, 0x04, 0x48, 0x36, 0x71, 0x1d, 0xad, 0x37, 0x1f, 0x43, 0xef, 0x91, 0xee, 0x7e, 0x89, 0x24, 0x4d, 0x4f, 0x84, 0x27, 0xad, 0x39, 0xea, 0xc7, 0x91, 0x80, 0x7e, 0x11, 0xe4, 0x31, 0xaa, 0x12, 0x90, 0x62, 0xb9, 0x3d, 0x4c, 0xbb, 0x46, 0x0d, 0xb5, 0x36, 0xf4, 0xeb, 0xa1, 0x22, 0x60, 0x51, 0xb0, 0x6e, 0x54, 0x30, 0x24, 0x24, 0x3e, 0x8f, 0xf2, 0x34, 0xe0, 0x75, 0x18, 0x73, 0x48, 0x0a, 0x32, 0xe3, 0x03, 0xf9, 0x48, 0x35, 0x8e, 0x18, 0xeb, 0x8c, 0x0d, 0x4b, 0x80, 0x84, 0x3f, 0xa6, 0xdb, 0x73, 0xb2, 0xd1, 0x10, 0xef, 0x33, 0xb1, 0x85, 0x90, 0x89, 0x44, 0x4c, 0xf6, 0x63, 0xcd, 0xb0, 0x0e, 0x8e, 0x32, 0x0e, 0x92, 0x6b, 0xa2, 0xe7, 0xcf, 0xa1, 0x7a, 0x32, 0xab, 0x0f, 0x6a, 0xf7, 0xe6, 0x05, 0xd4, 0x19, 0xa0, 0xb3, 0x74, 0x74, 0x1c, 0xe1, 0x46, 0x27, 0xc3, 0xe1, 0xa4, 0x33, 0x6c, 0xc2, 0xaf, 0x46, 0xda, 0xc7, 0xf1, 0xd1, 0x86, 0x17, 0x41, 0x60, 0x9f, 0xb6, 0xe6, 0x2b, 0x50, 0xb4, 0xff, 0xe8, 0x41, 0xa5, 0x22, 0xe4, 0x60, 0x51, 0x43, 0x52, 0xe1, 0xac, 0xd7, 0xe3, 0x83, 0x08, 0x3a, 0x97, 0x16, 0x89, 0x4e, 0xd2, 0x3a, 0xd9, 0x66, 0xb2, 0x69, 0x1e, 0x62, 0xa0, 0x38, 0x29, 0x1b, 0x25, 0xd9, 0xf0, 0x01, 0xff, 0xe5, 0x3f, 0x02, 0x75, 0x58, 0xaa, 0xae, 0xe7, 0xde, 0xc6, 0x99, 0xa9, 0x4d, 0x99, 0x01, 0x12, 0x72, 0x4e, 0xb1, 0xcf, 0x10, 0x2d, 0x25, 0x7d, 0x26, 0xcb, 0xef, 0x78, 0x71, 0x7e, 0x5a, 0xed, 0x32, 0x14, 0x4c, 0x37, 0x31, 0xc5, 0x71, 0x68, 0x02, 0x65, 0x95, 0x25, 0x87, 0xdf, 0x52, 0xb8, 0xb6, 0xde, 0xec, 0x60, 0x9c, 0xcd, 0x79, 0xeb, 0xa2, 0x02, 0x45, 0x87, 0x10, 0x36, 0x74, 0xd6, 0xcf, 0x39, 0xe9, 0x40, 0x73, 0xe3, 0x67, 0x8d, 0x79, 0x4e, 0xf6, 0xb3, 0xcc, 0x42, 0x89, 0xec, 0x8e, 0xf1, 0xdd, 0x0c, 0x16, 0xe5, 0xa4, 0x12, 0x35, 0x36, 0xe3, 0xfd, 0xbe, 0x00, 0x99, 0xe1, 0x45, 0x14, 0xa1, 0x39, 0x26, 0xee, 0xd9, 0x7f, 0xca, 0xe8, 0x84, 0xfa, 0x25, 0xad, 0xed, 0xd8, 0x83, 0xef, 0x4e, 0x7c, 0x85, 0x5d, 0xef, 0x19, 0x66, 0xcf, 0x92, 0x80, 0x83, 0xc4, 0x0f, 0x36, 0x1b, 0x0f, 0x3c, 0xca, 0x53, 0xcd, 0x0f, 0x65, 0x7d, 0x9a, 0x07, 0xa3, 0x99, 0x05, 0xc7, 0xa1, 0x1c, 0x41, 0x05, 0x58, 0xf1, 0x1d, 0xa2, 0x29, 0xbe, 0x35, 0x1a, 0xb8, 0x68, 0x6a, 0x1f, 0xfe, 0xd9, 0x91, 0x81, 0x9a, 0x01, 0x68, 0x51, 0x68, 0x1a, 0xce, 0x46, 0x55, 0x31, 0x33, 0x5f, 0x72, 0xe2, 0x4d, 0xca, 0x47, 0x63, 0x0c, 0x05, 0x69, 0xc4, 0xd1, 0x43, 0x4f, 0x74, 0xdb, 0x11, 0x61, 0x08, 0x01, 0x39, 0x52, 0x38, 0xa7, 0xe7, 0xb0, 0x2a, 0xeb, 0x0a, 0xb9, 0xf4, 0x1f, 0xfd, 0x71, 0x5c, 0x7c, 0x67, 0xf1, 0xe1, 0x14, 0x60, 0x02, 0x00, 0x09, 0xd5, 0xea, 0xb0, 0xfd, 0x2d, 0x86, 0x2f, 0xc9, 0x2c, 0x99, 0x00, 0x72, 0x18, 0x64, 0x35, 0x59, 0x1b, 0x77, 0xea, 0xb1, 0xe9, 0xc6, 0x12, 0x36, 0xa2, 0xff, 0x76, 0x1c, 0xfa, 0x1b, 0xfa, 0x46, 0x97, 0x34, 0x22, 0xb9, 0xbb, 0x96, 0xd6, 0x50, 0x22, 0x18, 0x62, 0xb1, 0x2e, 0xad, 0xc1, 0x7f, 0x41, 0x36, 0x1b, 0xd2, 0x6a, 0x9a, 0x8c, 0xe4, 0x45, 0x19, 0x27, 0x0d, 0x1c, 0xdd, 0x3b, 0xf1, 0x52, 0xd2, 0xd4, 0xf8, 0x02, 0xb8, 0x85, 0xfe, 0xe3, 0x77, 0x65, 0x4c, 0x6f, 0xb2, 0x58, 0xc7, 0x44, 0x9e, 0x90, 0x68, 0xca, 0x15, 0x53, 0xec, 0x16, 0xe6, 0xfe, 0xcd, 0x0e, 0x70, 0x4a, 0x70, 0xce, 0x6f, 0xce, 0xa0, 0x4b, 0x15, 0xc5, 0x3b, 0x36, 0x5d, 0x12, 0x2b, 0x24, 0x9c, 0x81, 0x98, 0xeb, 0x58, 0x50, 0x5c, 0x4f, 0x5e, 0xee, 0xb8, 0xde, 0x0f, 0x02, 0x45, 0x18, 0xfb, 0xaf, 0x2d, 0xd3, 0xb1, 0x16, 0x9a, 0xde, 0xd4, 0x1d, 0x6f, 0xe5, 0x72, 0x6f, 0x37, 0x94, 0x92, 0xc5, 0x5a, 0xff, 0x0c, 0x63, 0x97, 0x42, 0x9e, 0xe5, 0xae, 0x64, 0x3b, 0x3b, 0x5d, 0x82, 0xa6, 0xf3, 0x8e, 0x29, 0x40, 0xb6, 0xcf, 0x03, 0x1f, 0x16, 0x02, 0xb6, 0x5f, 0x87, 0x56, 0x09, 0xbd, 0xaa, 0x76, 0x49, 0x61, 0xd2, 0x00, 0xeb, 0xfc, 0xc1, 0x38, 0x72, 0x13, 0xb2, 0xfe, 0x93, 0x9b, 0x9d, 0xfd, 0x97, 0xc5, 0xb6, 0x26, 0x02, 0x1b, 0x36, 0x5d, 0x72, 0xcc, 0x5f, 0x71, 0xc9, 0x44, 0xba, 0x52, 0x8e, 0x00, 0xa4, 0x7e, 0x91, 0xa1, 0x08, 0xbd, 0xce, 0x3f, 0x6e, 0x0e, 0x94, 0xff, 0x35, 0xe1, 0xe7, 0xe8, 0x1c, 0x86, 0x22, 0xf2, 0x08, 0xe6, 0xe1, 0x60, 0x01, 0x71, 0x1d, 0x50, 0x7d, 0x57, 0x99, 0x91, 0xe1, 0xfb, 0x7d, 0xb4, 0x45, 0xa5, 0x41, 0x66, 0x77, 0x76, 0xcd, 0xfd, 0x43, 0xa2, 0xdf, 0x50, 0xf2, 0xd9, 0xac, 0xcc, 0x11, 0x06, 0xca, 0xc4, 0x74, 0x3c, 0x4d, 0x09, 0x7a, 0xed, 0x31, 0xbb, 0x91, 0x5e, 0xf8, 0x5e, 0xfd, 0x57, 0x93, 0x30, 0xd6, 0x1f, 0x86, 0xba, 0x50, 0xa8, 0x48, 0xa6, 0x40, 0x06, 0xe8, 0xd0, 0xdb, 0x25, 0xf6, 0xa0, 0xc0, 0xbc, 0xa1, 0x96, 0x39, 0x7d, 0x1d, 0x26, 0xbd, 0x8f, 0x48, 0xc7, 0xba, 0x3d, 0x8c, 0x47, 0x92, 0xf0, 0x07, 0x61, 0xe3, 0x5a, 0xe9, 0x91, 0x0c, 0xf5, 0x1e, 0x27, 0xed, 0xac, 0x2e, 0x9b, 0xee, 0xd7, 0x61, 0x20, 0x42, 0x6d, 0x26, 0x7b, 0x6d, 0x75, 0xb5, 0x16, 0x03, 0xbe, 0xf4, 0x50, 0xb3, 0xd0, 0x97, 0x18, 0x85, 0x22, 0x8c, 0xba, 0x60, 0x8e, 0x96, 0xf8, 0xcf, 0x01, 0x38, 0x5d, 0x04, 0x77, 0xd4, 0xce, 0x1e, 0x27, 0x14, 0x62, 0xa7, 0xfa, 0x89, 0x74, 0x61, 0x42, 0x92, 0xf6, 0x42, 0xa9, 0x80, 0x07, 0xbd, 0x67, 0xf7, 0xc8, 0x43, 0xb9, 0x97, 0x6c, 0x0a, 0x8e, 0xdc, 0x8f, 0x0d, 0x83, 0x43, 0xc9, 0x54, 0x11, 0xaf, 0x82, 0x75, 0x05, 0x0a, 0x08, 0x5b, 0x31, 0x2f, 0xde, 0x46, 0x62, 0x08, 0x58, 0x13, 0x92, 0xf3, 0x64, 0xbe, 0x5e, 0x6b, 0xab, 0x25, 0xba, 0xe4, 0xd9, 0x0e, 0xe3, 0xf6, 0x38, 0x6c, 0x95, 0xbe, 0x84, 0xde, 0x7f, 0x82, 0xfb, 0x79, 0xf4, 0x93, 0xb3, 0xc7, 0xe3, 0x78, 0x30, 0x0f, 0x09, 0x48, 0x36, 0xd7, 0x65, 0x58, 0xdc, 0xa8, 0xec, 0x16, 0xe2, 0x11, 0x7f, 0x35, 0x44, 0xee, 0x1a, 0x0b, 0x0f, 0xeb, 0x4e, 0x37, 0x74, 0x43, 0xf1, 0x86, 0x1b, 0xce, 0x14, 0x18, 0xba, 0x3a, 0x35, 0xbe, 0xe5, 0x98, 0xb6, 0xa7, 0x28, 0x1b, 0x8e, 0x3c, 0x53, 0x1d, 0x3f, 0x48, 0x15, 0x63, 0x08, 0x5c, 0xcc, 0xa2, 0x5b, 0x72, 0x9c, 0x42, 0x91, 0xd0, 0xbe, 0x61, 0xdd, 0x2f, 0x1b, 0x1b, 0x7e, 0x1d, 0x1a, 0x09, 0x39, 0xa0, 0xb6, 0x07, 0x07, 0x1c, 0xd3, 0x3b, 0x0b, 0x76, 0xd2, 0x53, 0xc6, 0x7a, 0x63, 0x0d, 0x8e, 0x7a, 0x9a, 0xfd, 0x3c, 0x38, 0x46, 0x8b, 0x26, 0x07, 0x7e, 0x3b, 0x4d, 0x2c, 0x7c, 0x31, 0xd7, 0x8a, 0xaf, 0xf4, 0xbf, 0x7f, 0x0b, 0x72, 0xcb, 0x09, 0xa4, 0x44, 0xbe, 0x2d, 0x7b, 0x34, 0xcf, 0x99, 0x97, 0xfc, 0x5b, 0x88, 0x58, 0x51, 0xd7, 0xe6, 0x09, 0x20, 0x08, 0xb4, 0xb4, 0x18, 0x76, 0xaf, 0x3a, 0x68, 0x1e, 0x2c, 0xa2, 0xca, 0x67, 0x47, 0xb2, 0xc0, 0x57, 0x3c, 0xbc, 0x1d, 0x07, 0x15, 0xbb, 0xc8, 0x54, 0x86, 0x9f, 0xbd, 0xd8, 0x15, 0xe4, 0x54, 0x19, 0x7d, 0x69, 0xc6, 0xff, 0x55, 0x80, 0xed, 0x8c, 0xed, 0x41, 0x4b, 0xc7, 0x79, 0x25, 0x4e, 0xf9, 0x71, 0xd0, 0xd2, 0x1c, 0x37, 0x2d, 0xe8, 0x91, 0xfb, 0xc0, 0xd6, 0x11, 0xdc, 0x38, 0x5f, 0xe6, 0x4f, 0x44, 0x44, 0x5b, 0xc5, 0xa8, 0x0a, 0x71, 0x88, 0x90, 0xfe, 0xd3, 0xe6, 0x24, 0x77, 0x0c, 0x92, 0x5c, 0x5b, 0xf8, 0x47, 0x16, 0xe4, 0x78, 0xae, 0x66, 0xa4, 0x6a, 0x82, 0x2d, 0xc7, 0xd9, 0xf2, 0xed, 0x99, 0x70, 0x47, 0xdb, 0x48, 0x35, 0xc6, 0x36, 0xea, 0x74, 0xd8, 0xd8, 0xc1, 0xf8, 0x68, 0x0b, 0xbe, 0x81, 0x8d, 0x9d, 0x45, 0x73, 0x69, 0x37, 0x30, 0xcc, 0x51, 0xea, 0x16, 0x58, 0x2d, 0x0b, 0xcd, 0x28, 0x22, 0x41, 0x2d, 0x40, 0x6f, 0xdc, 0x17, 0x90, 0x95, 0x68, 0xb6, 0x26, 0xbb, 0x82, 0x05, 0xa1, 0x50, 0xeb, 0x92, 0xe9, 0xf2, 0xdb, 0x81, 0x1d, 0x8f, 0x98, 0xd3, 0xcd, 0xca, 0x46, 0xe9, 0x6a, 0xa0, 0x01, 0x43, 0xfa, 0x4b, 0x29, 0x8e, 0x10, 0x66, 0xfd, 0xde, 0xfc, 0x53, 0x6c, 0x38, 0x3f, 0xda, 0x27, 0x53, 0x42, 0x12, 0xfb, 0x9f, 0x47, 0x85, 0x5e, 0x87, 0x9f, 0x8f, 0x48, 0xf3, 0x1d, 0x07, 0x44, 0x12, 0xcc, 0x21, 0xc6, 0x56, 0xdd, 0x93, 0xbf, 0xc0, 0xe3, 0xf7, 0x6f, 0x5d, 0x43, 0x71, 0x7a, 0x11, 0xe5, 0x91, 0x3f, 0x93, 0x30, 0x7b, 0x65, 0xb9, 0x36, 0x45, 0xb6, 0xf6, 0x2b, 0xa0, 0x31, 0x21, 0x1c, 0xbb, 0x5a, 0x77, 0xdd, 0x64, 0xd5, 0xe4, 0x44, 0x71, 0x33, 0x7e, 0x94, 0x5e, 0x0c, 0x52, 0x3c, 0x37, 0x4e, 0x64, 0xc2, 0xb8, 0xd4, 0xf1, 0xfa, 0xb4, 0x3b, 0xf7, 0x7b, 0xb3, 0xf1, 0xf8, 0x53, 0xdf, 0x8e, 0xfa, 0xfa, 0x21, 0x68, 0xd2, 0x85, 0x87, 0x61, 0xa2, 0x1c, 0xe9, 0x04, 0xa1, 0xae, 0xcc, 0xd1, 0x1a, 0xe3, 0x86, 0xd4, 0xb8, 0x53, 0xa3, 0x7d, 0x00, 0xf5, 0x88, 0xab, 0x1f, 0xda, 0x56, 0x0a, 0xe6, 0x1b, 0x11, 0x9f, 0x13, 0x10, 0x02, 0xa1, 0xd2, 0xc2, 0x59, 0x8b, 0x83, 0xa3, 0x17, 0x6f, 0xbe, 0x7d, 0x2b, 0x8d, 0x94, 0xa9, 0xdb, 0x24, 0x18, 0x81, 0x66, 0x88, 0x1f, 0x17, 0xe8, 0x75, 0x43, 0x28, 0x7d, 0xa3, 0x2e, 0x4b, 0xa9, 0x9a, 0x15, 0x6e, 0xf8, 0xc8, 0x82, 0x83, 0xe1, 0xd1, 0x57, 0x77, 0xf0, 0x26, 0x10, 0x64, 0x25, 0xd9, 0x48, 0x07, 0x97, 0xb0, 0x7e, 0x74, 0x5c, 0x78, 0x1a, 0x08, 0xad, 0x9b, 0xab, 0xa0, 0x46, 0xf5, 0x73, 0x08, 0x0c, 0xe4, 0x25, 0xb7, 0xf2, 0x9e, 0xed, 0xb9, 0x1d, 0xc8, 0xb1, 0xec, 0x47, 0x44, 0x97, 0x6f, 0x61, 0x4a, 0xc7, 0x58, 0x7c, 0xba, 0x72, 0xa5, 0xe9, 0xb0, 0x13, 0x76, 0x9f, 0x59, 0xf4, 0x79, 0xde, 0x06, 0xf4, 0xa5, 0x12, 0x7f, 0x89, 0x2b, 0xfa, 0x9a, 0x01, 0xa9, 0x09, 0x0c, 0x0d, 0xa1, 0x0d, 0x7e, 0x7f, 0x2b, 0x0e, 0xe4, 0x53, 0xe6, 0x79, 0x0a, 0xec, 0x34, 0x7e, 0x6f, 0xa1, 0xa7, 0xb6, 0x57, 0x78, 0xb6, 0x09, 0x1c, 0x31, 0xb5, 0xcf, 0xc5, 0x87, 0x04, 0x35, 0xd9, 0xb2, 0x86, 0xe2, 0x76, 0x30, 0x54, 0xdb, 0x9d, 0xc5, 0xb3, 0xa4, 0xd0, 0xc1, 0x44, 0xa9, 0xdf, 0x81, 0x7b, 0xdc, 0xff, 0x38, 0x52, 0x9e, 0x1c, 0xf0, 0x3f, 0xe3, 0x70, 0xcb, 0x63, 0x91, 0x55, 0x8f, 0x04, 0x2a, 0x57, 0x61, 0x3d, 0xab, 0x8e, 0xd1, 0xf4, 0xb4, 0x2b, 0x17, 0x0d, 0xe8, 0x50, 0x9c, 0xdd, 0x97, 0x25, 0xbd, 0xe2, 0x9b, 0x28, 0xcb, 0xb1, 0x7f, 0xc4, 0x56, 0x2f, 0xe7, 0x26, 0xab, 0x04, 0x2b, 0x4c, 0x9b, 0x4d, 0x46, 0x5e, 0x7e, 0x91, 0xef, 0x42, 0x78, 0xf7, 0x05, 0x6b, 0xfb, 0xb6, 0x30, 0xf1, 0x8d, 0xcc, 0xc6, 0xe7, 0xcc, 0xf3, 0xeb, 0xe9, 0xaf, 0xd1, 0xfd, 0xf4, 0x0e, 0x6f, 0x2f, 0x7a, 0x65, 0xec, 0x73, 0xb6, 0xd5, 0x73, 0x9e, 0x3e, 0x6b, 0x6a, 0xc6, 0xd7, 0xa5, 0xec, 0xef, 0x8c, 0x32, 0x7a, 0xe7, 0x02, 0xfa, 0xed, 0x6f, 0x06, 0x5e, 0xaf, 0x9b, 0x68, 0xc1, 0x2b, 0x7c, 0x0c, 0x47, 0x82, 0xfc, 0x3e, 0xdc, 0x80, 0x08, 0x46, 0x79, 0xce, 0xf5, 0x3c, 0xa2, 0x69, 0x1c, 0x1e, 0x34, 0x52, 0xc8, 0x20, 0x5d, 0x88, 0x53, 0x43, 0xec, 0x33, 0x8b, 0x29, 0xcb, 0x22, 0x5a, 0x28, 0xc9, 0x77, 0xa7, 0x9d, 0x9d, 0xa1, 0x77, 0x83, 0x28, 0x8b, 0x58, 0x44, 0xfb, 0x13, 0xff, 0xce, 0x19, 0xbe, 0x30, 0xea, 0xfe, 0xaa, 0xde, 0xc9, 0xe0, 0xc4, 0x94, 0xe0, 0x34, 0x3a, 0x13, 0xf7, 0x74, 0x34, 0x3d, 0x7c, 0x20, 0xbf, 0x31, 0x1c, 0x03, 0x09, 0xb8, 0x95, 0xb7, 0xd4, 0xe0, 0xc5, 0x6b, 0x25, 0xe6, 0x07, 0xe4, 0x3c, 0x59, 0xc0, 0xc2, 0xc9, 0x7d, 0x35, 0x05, 0x5d, 0xee, 0xa0, 0xcf, 0x1f, 0x85, 0x82, 0x6b, 0xc0, 0x7f, 0x3a, 0x8f, 0xb1, 0xdc, 0xd7, 0xde, 0x93, 0x06, 0x2b, 0xb1, 0xef, 0xb3, 0x20, 0x17, 0x27, 0x0c, 0x50, 0x1b, 0xac, 0x0f, 0xcf, 0x45, 0x72, 0x32, 0x4b, 0x63, 0xa1, 0x49, 0x58, 0x88, 0x8e, 0xa9, 0x05, 0x56, 0xe9, 0x8e, 0xb3, 0x79, 0x38, 0xba, 0x27, 0x74, 0x83, 0x5f, 0xdd, 0xa0, 0x51, 0x3f, 0x9f, 0x71, 0xd4, 0x12, 0x57, 0xfc, 0x61, 0x28, 0x22, 0xb6, 0x23, 0x4f, 0xa5, 0x7f, 0x0f, 0xf7, 0xa4, 0xdf, 0x1a, 0x94, 0xd0, 0x8f, 0xaa, 0x44, 0xe1, 0x3b, 0x4b, 0xb2, 0xe5, 0x86, 0xa4, 0x3a, 0xd8, 0x4f, 0xa9, 0x4e, 0x74, 0x32, 0x12, 0x18, 0x4a, 0x52, 0x0b, 0x60, 0x12, 0x56, 0x2d, 0xb1, 0x40, 0xb2, 0xad, 0xb7, 0xd8, 0x28, 0xd3, 0xec, 0x82, 0x8e, 0xae, 0x74, 0xe1, 0xd1, 0x07, 0x44, 0x21, 0x3a, 0x93, 0x8a, 0xcf, 0xf0, 0x6c, 0x49, 0xee, 0xbf, 0xc2, 0x44, 0x47, 0x17, 0xce, 0x1e, 0x00, 0x58, 0x08, 0xbf, 0x70, 0x4c, 0x9a, 0xfa, 0x32, 0xf5, 0x14, 0x6c, 0x78, 0x8a, 0x61, 0xa7, 0xa2, 0xbc, 0xfa, 0x90, 0x10, 0x3d, 0x59, 0x05, 0x34, 0x83, 0xb1, 0xc3, 0xeb, 0xca, 0xdc, 0x87, 0x0d, 0x58, 0x95, 0x74, 0x42, 0x04, 0xe7, 0xb5, 0x18, 0xf9, 0xe5, 0x63, 0x53, 0xb8, 0x9c, 0xa9, 0x85, 0x5c, 0x46, 0x26, 0xde, 0x22, 0xc1, 0x92, 0x44, 0x28, 0x3f, 0xa5, 0xa6, 0x75, 0x3e, 0x34, 0x8e, 0x3a, 0xbb, 0x9e, 0xf6, 0x57, 0xa2, 0x66, 0x5d, 0x21, 0x8a, 0x21, 0x1a, 0x63, 0x9f, 0x93, 0xef, 0xa3, 0xdf, 0x15, 0xe1, 0xa6, 0x8a, 0x39, 0x47, 0x36, 0xd3, 0xb1, 0x22, 0x22, 0xdc, 0x6d, 0xac, 0x87, 0xe1, 0x04, 0x34, 0x4e, 0xb4, 0x55, 0x28, 0xf6, 0x69, 0x6e, 0x74, 0x93, 0x52, 0xad, 0x0a, 0x17, 0x2e, 0x24, 0xc2, 0xd1, 0x9d, 0x42, 0x65, 0x33, 0xd7, 0xb0, 0x04, 0xd8, 0x9e, 0x7a, 0x8f, 0xc6, 0x71, 0x6f, 0xa3, 0xf0, 0x03, 0xca, 0xa2, 0xff, 0xeb, 0x12, 0x09, 0x51, 0x9d, 0x3e, 0xfe, 0x42, 0x99, 0x1d, 0x29, 0xab, 0xe2, 0xf5, 0xc5, 0xa9, 0xb2, 0x6b, 0xf7, 0xa0, 0x6c, 0xa2, 0x5e, 0x7f, 0xd2, 0xa7, 0xeb, 0x45, 0x78, 0x0d, 0xf3, 0xc4, 0x78, 0xd4, 0x82, 0xa4, 0x68, 0x90, 0xf3, 0xac, 0x89, 0xc6, 0xbd, 0x3d, 0x41, 0x9a, 0x90, 0x1f, 0xcc, 0xa7, 0xa1, 0x81, 0x2e, 0x2f, 0x42, 0x3a, 0x6c, 0x74, 0xb5, 0x55, 0xfb, 0x65, 0x42, 0xcd, 0x79, 0x7d, 0x87, 0x95, 0x9b, 0xe9, 0x10, 0xdb, 0x67, 0xe9, 0x27, 0x8e, 0xa3, 0x78, 0xed, 0x1e, 0x8d, 0x2f, 0xaa, 0x83, 0xcc, 0x67, 0x62, 0x80, 0xa7, 0x9e, 0xa9, 0x29, 0x75, 0x1c, 0xb7, 0xa3, 0x54, 0xd5, 0xbf, 0x2b, 0x1e, 0x92, 0x7d, 0x59, 0x99, 0x4c, 0x0f, 0xa6, 0xee, 0xd8, 0x05, 0x2d, 0x5d, 0xca, 0xbb, 0xae, 0x2e, 0x93, 0xe7, 0xd8, 0xeb, 0xec, 0x6e, 0xc8, 0xcc, 0x78, 0x7c, 0xcd, 0x73, 0xa4, 0xd3, 0x6e, 0xd9, 0xd3, 0x63, 0xae, 0x89, 0xb8, 0x1b, 0x8e, 0x0c, 0x02, 0x00, 0xd4, 0xa4, 0x3f, 0x7c, 0x0b, 0x3d, 0xfa, 0xf8, 0xcb, 0xa0, 0x27, 0xad, 0x3a, 0xea, 0xc2, 0xb6, 0xd3, 0x3c, 0xb2, 0x6a, 0x66, 0xb5, 0xf3, 0xea, 0x60, 0x9d, 0xf4, 0xf6, 0x4d, 0xe3, 0x3e, 0x05, 0x9b, 0xca, 0x57, 0x94, 0xa1, 0xdf, 0xe6, 0xbe, 0xe0, 0x2e, 0x17, 0x0d, 0x88, 0xb5, 0x41, 0x90, 0x3e, 0x19, 0xc7, 0x2d, 0x1c, 0x98, 0x3c, 0x39, 0xf9, 0x3f, 0xca, 0x46, 0xeb, 0x5d, 0xd4, 0x3c, 0x0b, 0x37, 0xda, 0xac, 0x78, 0xfd, 0x9d, 0x60, 0x9f, 0xfd, 0x84, 0x37, 0xb9, 0x17, 0x3f, 0x30, 0x94, 0x71, 0xaa, 0xc4, 0x97, 0x6c, 0xf4, 0x79, 0x01, 0xd6, 0x00, 0xb4, 0x71, 0x61, 0x0b, 0xce, 0xab, 0x53, 0x90, 0x6b, 0x99, 0x80, 0x68, 0x07, 0x90, 0x75, 0x36, 0xd2, 0xd5, 0xf7, 0x02, 0xbe, 0x60, 0xac, 0x24, 0xd6, 0xdf, 0x17, 0x64, 0xd1, 0xfe, 0xca, 0x5f, 0xe7, 0xe6, 0xd6, 0x2d, 0xe3, 0x03, 0x87, 0x40, 0x7a, 0x0b, 0x4e, 0x8f, 0xdb, 0x3c, 0xff, 0xf4, 0x87, 0xe5, 0x3c, 0xd3, 0x63, 0x27, 0x31, 0xfd, 0x0b, 0xfd, 0x83, 0xd4, 0x6a, 0x7a, 0x82, 0xaf, 0x88, 0x52, 0xa6, 0x80, 0xa2, 0x9c, 0x39, 0xb4, 0x80, 0xd6, 0x51, 0x5a, 0x03, 0x2a, 0x01, 0x88, 0xfe, 0xef, 0xd0, 0xfa, 0x46, 0x73, 0x6a, 0xfd, 0x0d, 0xf8, 0x96, 0x8b, 0x6b, 0xfc, 0x68, 0xb8, 0x3e, 0xbe, 0xb8, 0x4d, 0x34, 0xfd, 0xd3, 0xb2, 0x26, 0x03, 0x6f, 0x11, 0xa8, 0xe2, 0xe5, 0xb8, 0xde, 0xfe, 0x9a, 0xbf, 0x91, 0xcb, 0xbe, 0xeb, 0x81, 0xd8, 0x3a, 0xd3, 0xfd, 0x0d, 0xe3, 0x41, 0xb2, 0x31, 0xf4, 0xdb, 0xc1, 0xae, 0xbb, 0x03, 0x14, 0x99, 0x92, 0xfb, 0xf1, 0xed, 0x11, 0x4d, 0xcf, 0x17, 0x82, 0x6a, 0x69, 0xb8, 0x95, 0x91, 0x12, 0xa6, 0x56, 0xf2, 0x48, 0x34, 0x5b, 0x14, 0x8b, 0xb3, 0x42, 0x74, 0x70, 0x38, 0x5b, 0x6f, 0xf1, 0xa0, 0xa1, 0x61, 0x07, 0xd2, 0xef, 0x0f, 0x7b, 0x44, 0x70, 0x42, 0xf8, 0xc1, 0x58, 0xb5, 0x66, 0x69, 0xd1, 0x31, 0x73, 0xf9, 0x38, 0xf7, 0x72, 0x4c, 0x8a, 0x5e, 0x69, 0x22, 0x19, 0xbd, 0x65, 0x21, 0x84, 0x8b, 0x11, 0x19, 0xe5, 0xc5, 0x87, 0x8c, 0x4c, 0x90, 0x66, 0x6e, 0x6d, 0x20, 0x25, 0x29, 0x95, 0xd8, 0xa7, 0xe4, 0xe3, 0xb3, 0x0f, 0x05, 0xb4, 0xe2, 0xd5, 0xf4, 0x5f, 0xb7, 0x1a, 0x22, 0x23, 0xc1, 0x38, 0x4b, 0x5d, 0x39, 0x9e, 0xf8, 0xfe, 0x9c, 0xdb, 0x47, 0x3d, 0x9a, 0xf8, 0xee, 0x89, 0x2f, 0x0b, 0x7e, 0xc2, 0x10, 0x09, 0xe5, 0xa8, 0x48, 0xdc, 0x37, 0x94, 0x23, 0xb5, 0xae, 0x66, 0x4b, 0xa4, 0xef, 0xbe, 0x31, 0x66, 0x8e, 0x6f, 0xae, 0x7e, 0xd5, 0x30, 0xeb, 0x87, 0xc1, 0x95, 0x7e, 0xc8, 0x4e, 0x3e, 0xd5, 0x09, 0xf4, 0x4f, 0xd8, 0xa5, 0x72, 0x1f, 0xca, 0xe1, 0xca, 0x35, 0x70, 0x7c, 0x8d, 0x70, 0x76, 0x87, 0x58, 0x85, 0x0e, 0x77, 0x9f, 0xaf, 0xda, 0x79, 0xa9, 0xa1, 0x0c, 0x05, 0xdc, 0xc0, 0xcc, 0xb6, 0x3b, 0x8f, 0xda, 0x59, 0x2d, 0x6a, 0x74, 0x44, 0x80, 0x78, 0x7a, 0xe9, 0xad, 0xdb, 0xd0, 0xaa, 0x5e, 0x29, 0x04, 0xef, 0x2d, 0x20, 0x30, 0x76, 0xaf, 0x95, 0x22, 0xeb, 0xb1, 0xae, 0xbb, 0xb9, 0xc1, 0x51, 0x95, 0x1f, 0xf1, 0xdc, 0xe8, 0x86, 0xd7, 0x17, 0xaf, 0x12, 0xd8, 0x67, 0x06, 0x77, 0xa7, 0x44, 0xd7, 0x0e, 0x08, 0xec, 0xb5, 0x28, 0xda, 0x59, 0x08, 0xa2, 0x54, 0x71, 0x6b, 0xb9, 0x8f, 0x7e, 0x52, 0x20, 0x44, 0xdd, 0xf0, 0x50, 0xd8, 0xfa, 0x58, 0x20, 0x95, 0x7c, 0xe2, 0x95, 0x3b, 0xbc, 0xd0, 0xfb, 0xb7, 0x7c, 0x31, 0x34, 0x32, 0xd6, 0x06, 0x51, 0x4d, 0x72, 0xa4, 0x5f, 0xab, 0xfc, 0x59, 0x83, 0xb1, 0xd5, 0x52, 0x4a, 0x89, 0x09, 0xbc, 0x3a, 0x6d, 0x82, 0x2a, 0xad, 0x22, 0x7b, 0x37, 0xdf, 0xc2, 0x37, 0x6c, 0x45, 0xbf, 0xf2, 0x64, 0x20, 0x25, 0x18, 0x2d, 0x53, 0x1f, 0xb5, 0xf2, 0x71, 0xbd, 0x2c, 0xd7, 0x1b, 0xf4, 0x2d, 0x25, 0x89, 0xe7, 0xe1, 0xa7, 0x66, 0x64, 0x67, 0x54, 0xe1, 0xb2, 0x84, 0x2d, 0x01, 0x8a, 0x96, 0x69, 0x38, 0x63, 0xca, 0xd0, 0x3c, 0xf3, 0x8f, 0x65, 0x12, 0xf2, 0x4b, 0x47, 0x6b, 0x21, 0x4c, 0xd9, 0x34, 0x8b, 0x01, 0x21, 0x69, 0x0a, 0x6a, 0x6e, 0x2a, 0x0e, 0xcd, 0x3e, 0x10, 0x9a, 0xab, 0x5e, 0xc1, 0x8f, 0xf2, 0x53, 0xc2, 0x2d, 0x74, 0xf9, 0x8d, 0xd7, 0x98, 0x6a, 0xe4, 0x16, 0x4f, 0x21, 0x64, 0xe1, 0x4a, 0x60, 0x5d, 0x1c, 0x6b, 0xce, 0xe1, 0x5e, 0x79, 0x65, 0x1b, 0xf7, 0x17, 0x8b, 0xe2, 0x32, 0xf7, 0x7f, 0x8e, 0xd7, 0x4b, 0xf7, 0x0b, 0xf4, 0x7c, 0x08, 0x2c, 0xdd, 0x1f, 0x45, 0x41, 0x72, 0x25, 0x2b, 0xeb, 0xa0, 0x51, 0xbd, 0x2f, 0x2b, 0xf0, 0x6b, 0xca, 0xaa, 0xc4, 0x38, 0xc4, 0xd3, 0x41, 0x1c, 0x48, 0xf8, 0xfc, 0xa7, 0xb3, 0xd2, 0x60, 0xe8, 0xeb, 0x7e, 0xa2, 0x8d, 0xf2, 0xc5, 0xf8, 0x4b, 0xbb, 0xa0, 0x06, 0x81, 0x3c, 0xfb, 0x99, 0x18, 0xc4, 0xba, 0x98, 0xad, 0x8f, 0xfa, 0x38, 0xf2, 0x98, 0x99, 0x6e, 0x51, 0xae, 0xf8, 0xaa, 0xd3, 0xca, 0xff, 0xc2, 0x41, 0xa0, 0x62, 0x2c, 0x89, 0x74, 0x23, 0x71, 0x62, 0x2f, 0x59, 0xde, 0x33, 0xb2, 0x2f, 0x7d, 0x31, 0x6a, 0x2f, 0x44, 0xc8, 0x24, 0xc1, 0x8b, 0x3d, 0x23, 0xee, 0xc4, 0x91, 0x70, 0x6a, 0x66, 0xa8, 0x72, 0xd2, 0x2a, 0xab, 0xbe, 0x32, 0x7a, 0xaa, 0x30, 0xca, 0x26, 0x86, 0x3b, 0x12, 0x5a, 0x0e, 0x7d, 0xfb, 0xcd, 0x68, 0x97, 0x78, 0x3a, 0xb3, 0x3b, 0x3d, 0x14, 0xea, 0x87, 0xc6, 0x76, 0x0b, 0x91, 0x9c, 0x59, 0x79, 0x43, 0xd4, 0x09, 0x9f, 0x69, 0xd8, 0xda, 0xd7, 0x08, 0x6a, 0x16, 0x8a, 0xf1, 0xe5, 0x3b, 0x98, 0x97, 0xc6, 0x63, 0xfa, 0x1e, 0x6c, 0x04, 0xa6, 0xb4, 0x1c, 0xd9, 0xb2, 0x24, 0x48, 0x20, 0xbd, 0xa8, 0x11, 0x06, 0x8b, 0xff, 0x0a, 0x60, 0xef, 0xc0, 0x3f, 0x9b, 0xee, 0xee, 0x76, 0xf6, 0x21, 0xcc, 0xb4, 0xee, 0x5b, 0xf3, 0x03, 0xfa, 0x8c, 0xa1, 0x73, 0x79, 0xe5, 0x54, 0x5f, 0xe9, 0x3d, 0x98, 0xf1, 0x59, 0xb4, 0x1d, 0xe8, 0x21, 0x96, 0x0c, 0x99, 0xd0, 0x82, 0x9b, 0x34, 0x66, 0xcb, 0xe0, 0x49, 0xc4, 0x1e, 0xe2, 0x8b, 0x60, 0x65, 0xf6, 0xd3, 0x3d, 0xec, 0x49, 0x68, 0x1b, 0xc2, 0xb9, 0x7d, 0xeb, 0x63, 0xe9, 0xfb, 0x85, 0x93, 0x94, 0x81, 0x9d, 0x8d, 0x21, 0xa9, 0xf3, 0x5d, 0x78, 0x8e, 0xcb, 0x8b, 0x15, 0x8b, 0x9d, 0xf9, 0x5a, 0x45, 0x0d, 0x0e, 0x2a, 0xeb, 0x1d, 0x14, 0xb3, 0xbc, 0xa2, 0xdf, 0x8b, 0xca, 0xf5, 0xb0, 0xff, 0xfe, 0xea, 0x59, 0xa8, 0x5d, 0x06, 0xa1, 0x3f, 0x89, 0xec, 0xe9, 0xb1, 0x8b, 0x19, 0x10, 0x76, 0xcf, 0xd1, 0x95, 0x1f, 0x70, 0x59, 0xfb, 0x2f, 0xb7, 0x67, 0x72, 0x2c, 0xde, 0xd7, 0xb3, 0xf6, 0x19, 0x9f, 0x2c, 0x57, 0xd7, 0x05, 0x5d, 0xda, 0x44, 0x10, 0x82, 0xe1, 0x13, 0x3c, 0x72, 0xf2, 0x7c, 0x71, 0xc7, 0x52, 0x80, 0x36, 0x3f, 0xd5, 0x74, 0x23, 0x62, 0xf4, 0xbd, 0x94, 0x65, 0x20, 0xd9, 0xa5, 0x4f, 0x56, 0x9f, 0x5a, 0x5a, 0xf4, 0xc7, 0x1d, 0x9c, 0xcb, 0xac, 0x6e, 0xe6, 0x75, 0x51, 0xd6, 0xed, 0xe8, 0xa2, 0x1c, 0xa7, 0x4c, 0xfd, 0xbc, 0xf8, 0x0a, 0xf1, 0x95, 0x8e, 0x26, 0x46, 0xe2, 0x0a, 0xce, 0x3d, 0x6b, 0x60, 0x33, 0x18, 0xfd, 0x80, 0x97, 0xdd, 0x17, 0x36, 0xa7, 0x58, 0xe6, 0x4e, 0x0c, 0x5f, 0x73, 0xfd, 0x3d, 0x5a, 0x1c, 0x7c, 0x97, 0x02, 0x41, 0xf6, 0xaf, 0x68, 0x3f, 0xa4, 0xe7, 0x39, 0xa2, 0x37, 0x3f, 0x41, 0x96, 0x76, 0x6e, 0x2f, 0x9f, 0x28, 0x32, 0x98, 0x8a, 0x34, 0xe4, 0x3e, 0xa4, 0x07, 0x4f, 0x91, 0x29, 0x36, 0xc2, 0x76, 0xff, 0x64, 0x64, 0x48, 0xa4, 0x67, 0xc8, 0x1c, 0x66, 0xa6, 0xc1, 0x4a, 0xd2, 0xc5, 0x78, 0x29, 0x6e, 0x85, 0xbb, 0x19, 0xab, 0xe5, 0x98, 0xc7, 0x15, 0x8e, 0x2b, 0xac, 0xcd, 0x6d, 0xb4, 0xd7, 0x39, 0xa2, 0xec, 0xed, 0xfa, 0x99, 0x9a, 0x6e, 0x1e, 0x76, 0x61, 0x39, 0x97, 0xb7, 0xdc, 0x53, 0xec, 0x14, 0xed, 0xe4, 0x2f, 0xaa, 0x51, 0x82, 0x2f, 0x59, 0x78, 0xb2, 0xee, 0x6b, 0x94, 0xac, 0x56, 0x76, 0xf1, 0x5f, 0x27, 0x83, 0x84, 0xb5, 0x34, 0x6f, 0xc6, 0x18, 0xcf, 0x92, 0xc3, 0x35, 0x82, 0x9f, 0x6d, 0x00, 0x00, 0xcb, 0x37, 0xf8, 0x5a, 0x32, 0xdf, 0xac, 0x76, 0x76, 0x8b, 0x7e, 0xbe, 0xa9, 0x18, 0xa7, 0x15, 0x6d, 0xaf, 0x7b, 0x0f, 0x59, 0x99, 0xee, 0x61, 0x9f, 0x54, 0x58, 0x96, 0xec, 0xe6, 0x75, 0x04, 0x90, 0x71, 0xb0, 0xff, 0xdf, 0x08, 0xa1, 0x4c, 0xd7, 0xc1, 0xd4, 0xd8, 0x03, 0x0b, 0xcc, 0xaa, 0x9e, 0x42, 0x47, 0x17, 0xfc, 0x81, 0xc4, 0x35, 0x26, 0xb8, 0x43, 0x92, 0xc5, 0xfe, 0x4c, 0x25, 0x41, 0x28, 0x32, 0x84, 0x29, 0x9a, 0x99, 0x58, 0xd6, 0x5d, 0x36, 0x0e, 0x4b, 0x72, 0xd6, 0xd0, 0x60, 0x66, 0xa2, 0xb4, 0x20, 0x27, 0xa1, 0x33, 0x6f, 0x16, 0x7e, 0xdc, 0xf0, 0x5d, 0x8c, 0x49, 0x25, 0x83, 0x07, 0x53, 0xd8, 0x3e, 0x9d, 0x82, 0xba, 0x88, 0x2c, 0xc7, 0x4b, 0xf4, 0xce, 0x6e, 0xf9, 0x43, 0x13, 0x4e, 0x8c, 0x32, 0x8d, 0x43, 0xc1, 0x97, 0x92, 0xde, 0x35, 0xac, 0x3d, 0x5a, 0x85, 0xab, 0xb6, 0xd2, 0xb4, 0x9b, 0xb3, 0xb2, 0xcd, 0x69, 0x3f, 0x6c, 0xc9, 0x3a, 0xbb, 0x6c, 0xb2, 0x00, 0x22, 0x4d, 0x09, 0x4b, 0x91, 0x4d, 0x66, 0x63, 0x06, 0xfe, 0x5e, 0x93, 0x67, 0x3f, 0xa9, 0xc7, 0xc7, 0x6b, 0x84, 0x5a, 0xe6, 0xd0, 0x55, 0x29, 0xf6, 0x63, 0x8e, 0xec, 0xa5, 0xb1, 0xd3, 0xc6, 0x57, 0x19, 0x5f, 0x1a, 0xb3, 0x39, 0xa4, 0xa1, 0x62, 0xa6, 0x31, 0xb9, 0x13, 0xe0, 0xd9, 0x00, 0xc3, 0x85, 0x12, 0x22, 0x3b, 0xc4, 0x9b, 0xef, 0xda, 0x15, 0x62, 0xb1, 0x94, 0x27, 0xa4, 0xbc, 0x3b, 0x1a, 0x56, 0x46, 0xfd, 0xef, 0xc4, 0x79, 0x2f, 0x3d, 0x78, 0xc7, 0x49, 0x25, 0x5d, 0x7e, 0x31, 0x87, 0x24, 0x9c, 0xbc, 0x76, 0xe7, 0xe4, 0x72, 0xea, 0x0c, 0x31, 0x91, 0xb5, 0x6d, 0x0b, 0x55, 0xb9, 0xb5, 0x78, 0x77, 0x57, 0x0d, 0x14, 0xf3, 0x2b, 0xf9, 0x64, 0x0f, 0xf6, 0x7c, 0x68, 0x99, 0xdb, 0x83, 0x6f, 0x70, 0xcf, 0x81, 0x2f, 0x46, 0x4b, 0x56, 0x15, 0xa3, 0x43, 0x75, 0xda, 0x2d, 0x5c, 0x46, 0x57, 0x28, 0x5a, 0xc9, 0x9a, 0x39, 0xd7, 0x7d, 0x39, 0x6f, 0x3b, 0x80, 0xe6, 0x83, 0xe8, 0xf7, 0x44, 0x5f, 0xb5, 0xb0, 0xfa, 0xde, 0x9e, 0x06, 0x05, 0xd3, 0xba, 0x05, 0x52, 0x4c, 0x6d, 0xcf, 0x8c, 0x18, 0xde, 0x3e, 0x33, 0x86, 0xab, 0xcb, 0xee, 0x70, 0xdc, 0xaf, 0x22, 0x78, 0x16, 0x48, 0xc3, 0x92, 0x11, 0xbd, 0x6a, 0xc3, 0x4c, 0xe5, 0xa8, 0x28, 0x00, 0x65, 0x9b, 0x39, 0x52, 0x19, 0xbe, 0x4f, 0xcc, 0xb6, 0x05, 0x64, 0x0e, 0xad, 0x2a, 0x1a, 0xc1, 0x52, 0x41, 0xff, 0xcd, 0x3d, 0x93, 0x10, 0xcc, 0xf0, 0xa9, 0x7c, 0xbe, 0xbb, 0xa7, 0xaa, 0xfe, 0xdd, 0xdc, 0x7c, 0x75, 0xec, 0x96, 0xd6, 0x0d, 0x77, 0x3b, 0x5a, 0x68, 0xe9, 0x95, 0x76, 0xd3, 0xb0, 0x6e, 0xa1, 0x75, 0x9f, 0x5d, 0xe1, 0xcc, 0x91, 0xdf, 0x91, 0x5b, 0x50, 0xa9, 0x61, 0x9c, 0xb5, 0x3d, 0x9e, 0x3c, 0x10, 0xbc, 0xb4, 0x87, 0xc9, 0xfb, 0xf1, 0x22, 0x48, 0xd8, 0x8b, 0xf8, 0x13, 0xcf, 0xe5, 0x76, 0x36, 0xc8, 0x0e, 0xfb, 0xe8, 0x33, 0x8a, 0x8a, 0x6b, 0x57, 0x56, 0xc3, 0x34, 0xe7, 0x26, 0x11, 0x4c, 0xd7, 0xf1, 0x24, 0xf6, 0x6d, 0xaf, 0xa2, 0x92, 0x9b, 0x62, 0x19, 0xc1, 0x8c, 0x53, 0x39, 0xca, 0x7d, 0x9e, 0x40, 0x3d, 0xce, 0xf0, 0xb5, 0xd6, 0x59, 0x90, 0x59, 0xa3, 0x02, 0x9c, 0x5b, 0x69, 0x8f, 0x96, 0xcb, 0x45, 0xbb, 0x1f, 0x51, 0x8f, 0x85, 0x01, 0x1f, 0x03, 0xce, 0x73, 0x24, 0x23, 0x23, 0x99, 0x82, 0xd7, 0xd8, 0x4b, 0x43, 0x57, 0x56, 0x17, 0x47, 0x4a, 0xb5, 0x89, 0x81, 0x30, 0x8e, 0xa9, 0x64, 0xfd, 0x0a, 0xc6, 0x97, 0x06, 0x3f, 0x72, 0xf0, 0x21, 0xbd, 0xce, 0xa0, 0x08, 0x63, 0x08, 0xab, 0xff, 0x78, 0x21, 0x9c, 0xb7, 0xf7, 0xf4, 0x76, 0x71, 0x29, 0x74, 0xed, 0x66, 0x79, 0x35, 0xd6, 0x67, 0x85, 0x2e, 0xdd, 0xc1, 0x71, 0xbd, 0x76, 0x63, 0x80, 0xeb, 0x16, 0x43, 0xe5, 0xf2, 0xa2, 0xfd, 0xd6, 0xfc, 0x28, 0xbd, 0xe3, 0x2e, 0xcd, 0x60, 0x86, 0xe5, 0x06, 0xd6, 0xfb, 0x3f, 0x0b, 0xcb, 0x51, 0xde, 0x89, 0x86, 0xc2, 0xe8, 0x97, 0x11, 0x40, 0x52, 0xec, 0x9a, 0x50, 0x5f, 0x4f, 0x19, 0x1b, 0x63, 0x4e, 0x33, 0xc2, 0xcd, 0x33, 0x5e, 0xf3, 0x64, 0x34, 0x47, 0xba, 0xd1, 0xea, 0x71, 0x99, 0x5e, 0x05, 0x1e, 0xda, 0xfd, 0x3d, 0x72, 0x24, 0x8c, 0x8c, 0xd6, 0x4d, 0x57, 0x9a, 0x9b, 0x6f, 0xdf, 0x79, 0xdf, 0x3e, 0xda, 0x92, 0xb5, 0x98, 0x7a, 0xdf, 0x80, 0x5e, 0xf2, 0x5b, 0xa0, 0x83, 0x37, 0xb7, 0x51, 0x62, 0x03, 0x4f, 0xcf, 0x55, 0x20, 0x5c, 0xbf, 0x83, 0xe3, 0x6b, 0xca, 0xf9, 0xf7, 0x0e, 0x8b, 0xfd, 0x5b, 0xd1, 0xab, 0x9e, 0xae, 0x6f, 0x4a, 0x90, 0xab, 0x46, 0xa1, 0x37, 0xf0, 0x09, 0xe6, 0x02, 0x03, 0xb5, 0x70, 0xfa, 0x96, 0xc6, 0x1c, 0x9b, 0x0a, 0xaa, 0xef, 0xe2, 0x33, 0x76, 0xfd, 0xa7, 0x5b, 0xd8, 0x89, 0x2d, 0x89, 0x4c, 0x6d, 0xf8, 0x03, 0x93, 0xbd, 0xde, 0x11, 0x62, 0xa7, 0x61, 0x04, 0x57, 0x9d, 0x3c, 0x77, 0x30, 0xb7, 0x3c, 0xd5, 0x3f, 0x52, 0x51, 0x1b, 0x19, 0xfe, 0xe5, 0xdf, 0x8f, 0x97, 0x6c, 0x92, 0xdf, 0xb1, 0x3d, 0x02, 0x2b, 0x39, 0xa0, 0x22, 0x29, 0x5a, 0x28, 0x0e, 0x1d, 0x9e, 0x43, 0x4a, 0x04, 0x56, 0x0f, 0x4a, 0x12, 0x3b, 0x6f, 0x38, 0x5f, 0x55, 0x5f, 0xf1, 0xde, 0x1c, 0x84, 0x51, 0x8e, 0xde, 0x07, 0xb0, 0xf4, 0x60, 0xa4, 0xac, 0xc8, 0xc8, 0xfe, 0x29, 0xef, 0xba, 0x36, 0x97, 0xa9, 0xc2, 0xbb, 0x74, 0x0c, 0xf2, 0x64, 0x11, 0xb1, 0xcc, 0xbc, 0x98, 0xad, 0x62, 0x9d, 0x4e, 0xc2, 0xbb, 0x00, 0x16, 0xd7, 0x79, 0x13, 0x37, 0xa6, 0xb9, 0x8c, 0x5e, 0xb5, 0x3b, 0x3d, 0xe7, 0x87, 0xc3, 0xe9, 0x58, 0x13, 0xbe, 0x57, 0x2e, 0x75, 0x29, 0xa4, 0xdd, 0xe4, 0xaf, 0xdd, 0x12, 0xe4, 0x11, 0xce, 0x3b, 0xbc, 0xcb, 0x14, 0x49, 0x2b, 0xf5, 0x7a, 0xb4, 0x57, 0x67, 0x82, 0xc0, 0x06, 0x20, 0x41, 0x00, 0x10, 0xe9, 0x70, 0x18, 0x15, 0x35, 0xc1, 0xc6, 0x6b, 0x4c, 0x6f, 0x24, 0x5a, 0xa8, 0x19, 0x27, 0x8c, 0x9f, 0xd0, 0x6c, 0xbf, 0x43, 0x6f, 0x34, 0xbd, 0x87, 0x2a, 0xad, 0x8e, 0xa3, 0x6a, 0x73, 0xec, 0xb9, 0xd9, 0x56, 0xf7, 0xb8, 0xb8, 0x5e, 0x2a, 0x81, 0x79, 0x0c, 0x8e, 0x48, 0x8a, 0xe3, 0x2d, 0x3d, 0x6f, 0x27, 0xca, 0x6c, 0x13, 0xe5, 0xcf, 0xe2, 0x60, 0x33, 0x87, 0x12, 0x0d, 0xb9, 0x8d, 0x77, 0xb7, 0x70, 0x85, 0x7a, 0x34, 0xaa, 0x09, 0x95, 0x24, 0x53, 0xe6, 0xb9, 0xc8, 0x76, 0x89, 0xed, 0x18, 0x02, 0xb4, 0x39, 0x0f, 0xcf, 0x76, 0xc2, 0x4a, 0xdc, 0x59, 0x36, 0xd1, 0xdb, 0xdd, 0x6a, 0x35, 0xef, 0x25, 0x42, 0xdb, 0xb4, 0xf1, 0xd2, 0x97, 0x80, 0xcc, 0xc2, 0x7c, 0xe8, 0x87, 0xf7, 0xf3, 0x86, 0xe5, 0x6f, 0x0b, 0xfa, 0x98, 0x6d, 0x10, 0x2f, 0x6c, 0xd7, 0x5f, 0xe0, 0xc3, 0xdc, 0x78, 0x5a, 0x41, 0xd9, 0x55, 0x83, 0xc8, 0x7e, 0xfb, 0x1b, 0xa7, 0x2d, 0x4e, 0x42, 0x0e, 0xa2, 0x29, 0x3a, 0xc6, 0xd9, 0xae, 0x6f, 0x1e, 0x2c, 0xdb, 0xb4, 0x29, 0xbd, 0x5e, 0xd0, 0x26, 0x13, 0xab, 0x39, 0x40, 0x08, 0x4b, 0x1f, 0x78, 0xe2, 0x77, 0xac, 0xdf, 0xc0, 0xe5, 0x8b, 0x08, 0x38, 0xe2, 0xa7, 0xbd, 0x3e, 0xa1, 0x35, 0xf1, 0x47, 0xd3, 0xf4, 0xf6, 0xaf, 0x77, 0xb3, 0xf0, 0x58, 0xf4, 0x15, 0x8a, 0x95, 0x65, 0x91, 0xe7, 0x46, 0x34, 0xbc, 0xdc, 0x44, 0xea, 0xcb, 0x5c, 0xff, 0x45, 0x53, 0x33, 0x65, 0x8c, 0x54, 0xf7, 0x06, 0x1f, 0x76, 0x3c, 0x76, 0x52, 0x92, 0x08, 0xf3, 0x7b, 0x74, 0x87, 0x48, 0x4a, 0xe0, 0xff, 0xf1, 0x59, 0xd2, 0x05, 0x80, 0x04, 0x0a, 0xf2, 0x40, 0x7b, 0xc8, 0x91, 0x17, 0x15, 0xd5, 0x1a, 0xb1, 0xe8, 0xc2, 0x64, 0xda, 0x96, 0x74, 0x56, 0x2c, 0x69, 0xe1, 0x9f, 0xeb, 0xa3, 0x14, 0xa6, 0x2d, 0x0f, 0x77, 0xc4, 0x3e, 0xdc, 0x51, 0xb2, 0x42, 0xab, 0x8e, 0x3d, 0x1c, 0xe7, 0xbf, 0x41, 0x8f, 0x55, 0x61, 0xd4, 0xa3, 0xec, 0x62, 0xc2, 0x4b, 0xe6, 0xe1, 0x3a, 0x44, 0x17, 0x36, 0xc6, 0x40, 0x7e, 0x32, 0x80, 0x44, 0x1a, 0xa7, 0x84, 0x4f, 0xfe, 0x2b, 0xa1, 0x3c, 0xa8, 0x1a, 0x54, 0xe9, 0x8f, 0xda, 0xf6, 0x99, 0xfb, 0x63, 0x34, 0x97, 0x19, 0xfe, 0xc0, 0x1d, 0x4f, 0x4c, 0x46, 0x73, 0xcd, 0x8b, 0xa2, 0x5b, 0x65, 0x15, 0x50, 0xad, 0x9c, 0x29, 0x23, 0x3f, 0x01, 0xee, 0x3a, 0x07, 0xbd, 0xb5, 0x31, 0x84, 0x6c, 0x7f, 0x94, 0x59, 0x2b, 0xbf, 0x99, 0x3c, 0xf2, 0x61, 0x0e, 0x0e, 0x25, 0x0a, 0x90, 0x4b, 0x65, 0xa2, 0xfe, 0xa5, 0xac, 0x10, 0x2d, 0xec, 0x99, 0x44, 0xdd, 0x31, 0x08, 0x7b, 0xec, 0x2b, 0xe6, 0xbe, 0xca, 0xda, 0x44, 0xac, 0x2d, 0x69, 0xa9, 0x7a, 0x06, 0x59, 0xad, 0x38, 0xb3, 0xdc, 0xc3, 0x56, 0x76, 0x7f, 0x57, 0x66, 0x26, 0x0c, 0x19, 0x23, 0x24, 0xaf, 0x98, 0xb3, 0x91, 0x57, 0x12, 0x29, 0xbe, 0x5f, 0x8a, 0x4e, 0xe4, 0x6e, 0x1c, 0xa1, 0x16, 0x9c, 0x8e, 0x9c, 0x73, 0xd6, 0x27, 0x39, 0xa0, 0x83, 0xc4, 0xb5, 0x76, 0x67, 0x28, 0x94, 0xf7, 0xc8, 0x94, 0xe5, 0x87, 0xd0, 0x97, 0xc7, 0x59, 0x33, 0x28, 0x2c, 0x27, 0x12, 0xf2, 0xdd, 0x26, 0x1e, 0xef, 0xbf, 0x39, 0x00, 0x38, 0x54, 0x64, 0xf9, 0x1c, 0x84, 0x84, 0xc5, 0x6f, 0x9e, 0x3e, 0xc6 ],
+const [ 0xe3, 0x6e, 0x18, 0xed, 0xdf, 0xe2, 0xc2, 0x1d, 0x09, 0x7a, 0xf7, 0xbf, 0x9f, 0x8d, 0x89, 0xf1, 0x93, 0x4e, 0xa6, 0xb4, 0x34, 0xe8, 0xa3, 0xa1, 0x0b, 0xcd, 0xf7, 0xd8, 0x03, 0x4a, 0x8b, 0x3a, 0xce, 0x60, 0x31, 0xd8, 0x83, 0xcf, 0x71, 0xaa, 0x8c, 0x73, 0x8c, 0x85, 0xbf, 0xd3, 0xbb, 0x47, 0xcb, 0xf8, 0xb8, 0x55, 0xd6, 0x7b, 0x7f, 0x47, 0x64, 0xe2, 0x56, 0xe1, 0x7b, 0x2d, 0x0b, 0x45, 0x05, 0xab, 0x7d, 0x68, 0x75, 0x12, 0x5d, 0xc3, 0xad, 0xcf, 0x36, 0x4b, 0x1f, 0x9b, 0xab, 0xa2, 0x33, 0x4f, 0x01, 0x8f, 0xe9, 0xf9, 0xdd, 0xac, 0xc0, 0x2f, 0x4e, 0x5e, 0xd6, 0xa3, 0x0d, 0x0a, 0x50, 0xf8, 0x04, 0x86, 0xfc, 0xd4, 0x0e, 0xce, 0x35, 0x37, 0xfe, 0xf9, 0x08, 0x0b, 0xe2, 0x6b, 0x95, 0xfc, 0x89, 0x4b, 0xb7, 0x89, 0x42, 0x38, 0xe7, 0x5b, 0xe7, 0x37, 0x5d, 0xd6, 0x1a, 0xf0, 0x79, 0xef, 0xcf, 0x1b, 0x62, 0x3d, 0x0b, 0x35, 0xed, 0x52, 0xea, 0x77, 0xc0, 0x4b, 0xe7, 0x08, 0xb7, 0xa6, 0x58, 0x72, 0x86, 0x54, 0x38, 0x53, 0xa0, 0x0f, 0x29, 0x55, 0x58, 0xee, 0xb9, 0x5f, 0x46, 0x37, 0xe5, 0x0d, 0xed, 0x74, 0xdc, 0x5e, 0x9a, 0xc9, 0x05, 0xad, 0x8f, 0x84, 0x42, 0xe3, 0x61, 0xf6, 0x77, 0xea, 0x9f, 0x82, 0x46, 0x65, 0xb4, 0xf3, 0x1d, 0x9e, 0x0f, 0x12, 0x73, 0xbf, 0x81, 0x79, 0x4e, 0x46, 0xe6, 0xa2, 0x09, 0xb3, 0x07, 0x43, 0x54, 0x83, 0xbf, 0xde, 0x7c, 0x62, 0x5d, 0x93, 0xed, 0x9d, 0x4a, 0x3a, 0xf5, 0xd6, 0xec, 0xae, 0xca, 0xfb, 0xc9, 0x6b, 0xcf, 0x79, 0xf0, 0x5c, 0x13, 0xac, 0x95, 0xee, 0x1a, 0x9a, 0xfb, 0x69, 0xe1, 0xe2, 0x97, 0x80, 0x1c, 0xef, 0x72, 0x27, 0xc2, 0x71, 0xcf, 0xa4, 0xcb, 0x0e, 0x0e, 0xe9, 0x39, 0x54, 0xd0, 0x21, 0x55, 0xf3, 0x5c, 0x89, 0x3b, 0x29, 0x41, 0x81, 0x98, 0x7d, 0x3d, 0xe3, 0xb3, 0xb0, 0x5e, 0x93, 0xaa, 0xf1, 0x67, 0x57, 0xfe, 0x50, 0x75, 0xe9, 0x52, 0x75, 0xe2, 0x4b, 0x70, 0x92, 0x6a, 0x5b, 0x8d, 0x96, 0x8c, 0xa7, 0xce, 0xa4, 0x33, 0x82, 0x0b, 0xc3, 0x96, 0x58, 0xd2, 0xd7, 0x5d, 0x3e, 0xaf, 0xd0, 0x05, 0xcd, 0xaa, 0x21, 0x85, 0x31, 0x12, 0x73, 0x32, 0x7d, 0x79, 0x9b, 0xe0, 0x41, 0x00, 0xca, 0x4a, 0x5f, 0xd5, 0x04, 0xb4, 0x1a, 0xf9, 0xd4, 0xce, 0x70, 0x47, 0x3d, 0xdc, 0xaa, 0xb2, 0xf3, 0x14, 0x31, 0xce, 0xcc, 0x47, 0xa3, 0x92, 0x71, 0xc4, 0x26, 0x5c, 0x59, 0x7a, 0xfd, 0x35, 0xf8, 0x5c, 0x59, 0x56, 0x33, 0x0a, 0x71, 0xec, 0x18, 0xad, 0xd4, 0x19, 0xcc, 0x22, 0xfe, 0x3b, 0xc4, 0x5c, 0x2a, 0x70, 0x38, 0x03, 0x68, 0x5a, 0xd5, 0x61, 0xef, 0x1f, 0xb3, 0x7f, 0xb4, 0xb4, 0x86, 0x8b, 0x3c, 0x5c, 0x18, 0x7d, 0xae, 0x6b, 0xf7, 0xfb, 0x2c, 0x50, 0x6a, 0x79, 0x63, 0xd2, 0xaa, 0xa4, 0x61, 0x9a, 0x4f, 0x01, 0xa7, 0xf2, 0x09, 0xd1, 0x80, 0xcc, 0x90, 0x39, 0x91, 0x06, 0xde, 0x9f, 0xb0, 0xec, 0x9b, 0x57, 0xfa, 0xff, 0xd9, 0x7f, 0x1f, 0xf5, 0x01, 0x27, 0x01, 0x00, 0x0d, 0xb6, 0x7e, 0x53, 0xf8, 0x88, 0x89, 0xe3, 0x73, 0xdc, 0x80, 0x6a, 0xda, 0xee, 0xb9, 0xb2, 0x66, 0x60, 0x5f, 0x10, 0xa4, 0xde, 0x7c, 0x2e, 0x26, 0x02, 0x56, 0x0e, 0x78, 0x75, 0xff, 0x4c, 0x55, 0x58, 0x28, 0xa4, 0x1b, 0xe2, 0x36, 0xb3, 0x7d, 0x4a, 0x98, 0x02, 0x78, 0xe7, 0x57, 0x40, 0x88, 0x96, 0xee, 0xcf, 0x1b, 0x5c, 0x5d, 0x83, 0x46, 0x4c, 0x79, 0xa6, 0xb7, 0xab, 0x86, 0x3f, 0xeb, 0x53, 0x07, 0x93, 0xa1, 0x55, 0xd5, 0xed, 0x8e, 0xe2, 0x6f, 0x9b, 0x52, 0x6c, 0x91, 0x39, 0xab, 0x08, 0x08, 0x32, 0xe8, 0x17, 0xc4, 0x83, 0xa1, 0x25, 0x2f, 0xc2, 0xa6, 0x11, 0xbd, 0x5f, 0x35, 0x6e, 0xc4, 0x2b, 0x70, 0x2a, 0x8f, 0x16, 0x0d, 0x6d, 0xae, 0x3d, 0x50, 0xc4, 0x8f, 0x24, 0x36, 0x7f, 0x53, 0x3f, 0xf4, 0x58, 0xda, 0xb8, 0x9f, 0x55, 0x20, 0x6c, 0x2d, 0xef, 0xcd, 0x37, 0x9c, 0x73, 0x07, 0x71, 0x71, 0xa9, 0x8b, 0xb8, 0x64, 0xb4, 0xfc, 0xf0, 0x5a, 0x39, 0x7a, 0x89, 0x93, 0xc3, 0x77, 0x00, 0x25, 0x66, 0xc6, 0xa9, 0xa9, 0xa3, 0xf5, 0xab, 0x34, 0x8c, 0xdd, 0x4c, 0x89, 0x28, 0x77, 0x6f, 0x8c, 0x19, 0xf2, 0x5a, 0xfa, 0x7c, 0x02, 0xbd, 0x58, 0x11, 0x7a, 0xf0, 0x29, 0x9c, 0x1d, 0x7d, 0x64, 0x8b, 0xb1, 0xde, 0x25, 0xd8, 0x56, 0x88, 0xa3, 0x31, 0x16, 0x28, 0x62, 0x57, 0xbd, 0x2c, 0xaa, 0xc4, 0xeb, 0x85, 0x37, 0x90, 0x67, 0xab, 0x32, 0x95, 0xb6, 0xe2, 0x60, 0xd2, 0xed, 0xbd, 0x9a, 0x0d, 0xc3, 0xe0, 0x7d, 0xbc, 0xea, 0x09, 0x62, 0x26, 0xa0, 0x52, 0x90, 0xc6, 0x81, 0xb0, 0xb1, 0xf0, 0x9f, 0xc0, 0x83, 0xb7, 0xd4, 0xc3, 0xd0, 0x0d, 0x57, 0xe6, 0xa0, 0x2c, 0x8e, 0xc8, 0xad, 0x35, 0x23, 0x36, 0x17, 0x17, 0x5a, 0x39, 0x59, 0xb3, 0xa2, 0x52, 0x7c, 0x3e, 0x6a, 0x04, 0x8b, 0xe6, 0x35, 0x93, 0x46, 0xb8, 0xf1, 0x0c, 0x1a, 0xc1, 0x84, 0x85, 0x51, 0x73, 0xa9, 0xa6, 0x87, 0x4b, 0xfa, 0x68, 0x5d, 0xb1, 0x4d, 0x1d, 0x71, 0x20, 0x44, 0xb1, 0x8d, 0x86, 0x20, 0x2f, 0x1e, 0xee, 0xd6, 0x86, 0xe8, 0x5c, 0x65, 0x8e, 0xf9, 0xf8, 0x66, 0x46, 0xdb, 0x6f, 0xe5, 0x60, 0x0e, 0x97, 0x6f, 0xff, 0xb5, 0x52, 0x6c, 0xbf, 0x90, 0xb4, 0xb0, 0xf6, 0x2a, 0x68, 0x4c, 0x39, 0x54, 0x4f, 0xaa, 0x22, 0xd1, 0x6b, 0xd9, 0x51, 0x53, 0xfc, 0x25, 0xb1, 0xa7, 0xe8, 0xeb, 0xfc, 0x2c, 0x60, 0xab, 0x82, 0x89, 0xc1, 0x5f, 0x26, 0x9f, 0xb8, 0x0b, 0xa9, 0xbd, 0xaa, 0x96, 0x2b, 0x13, 0x53, 0xd8, 0xee, 0x6a, 0xad, 0xf4, 0x5e, 0x12, 0x13, 0xe8, 0x4e, 0x1b, 0xa6, 0x62, 0x85, 0xc8, 0xf0, 0xd6, 0x79, 0x40, 0xc7, 0xcd, 0x5a, 0x87, 0x74, 0x80, 0x52, 0xad, 0x15, 0xa5, 0x0c, 0x45, 0x40, 0x89, 0x73, 0x19, 0xe9, 0x5f, 0xbc, 0x1c, 0x86, 0xd7, 0xa6, 0xa0, 0x70, 0xf3, 0x00, 0xc9, 0x8d, 0x17, 0x6c, 0x42, 0x2c, 0x5f, 0x64, 0x2e, 0x30, 0x34, 0x7a, 0x62, 0x71, 0x22, 0xe4, 0xd1, 0x5f, 0xe4, 0x37, 0x47, 0xe9, 0xc1, 0x73, 0x5b, 0x9d, 0x1c, 0x40, 0x9f, 0x10, 0x46, 0x77, 0x19, 0x80, 0x96, 0xe4, 0xf7, 0xb8, 0xbc, 0x4b, 0x7e, 0x34, 0x52, 0xa8, 0x44, 0x86, 0xb4, 0xbb, 0x9f, 0xf8, 0x12, 0xc4, 0x5d, 0x73, 0xc3, 0x8c, 0xb5, 0x9f, 0xdc, 0xa4, 0x7e, 0x4c, 0x02, 0xf1, 0x9f, 0x11, 0x7c, 0x69, 0xc7, 0x32, 0x8c, 0x17, 0x5e, 0xc7, 0x00, 0x65, 0xbb, 0x1b, 0x04, 0x9a, 0x97, 0x53, 0x3a, 0xa2, 0xc1, 0x50, 0x0d, 0x0e, 0x14, 0xd6, 0x42, 0x5b, 0xa7, 0xed, 0xcf, 0x77, 0x43, 0x87, 0xf1, 0x81, 0x1a, 0x64, 0x79, 0xd0, 0xb5, 0x33, 0x66, 0x38, 0x2f, 0xfa, 0xb9, 0x88, 0xa1, 0xb7, 0x85, 0x57, 0xdd, 0x48, 0x46, 0x01, 0x5f, 0x88, 0x73, 0xec, 0x80, 0xbb, 0x57, 0x10, 0xed, 0x2c, 0x1c, 0xb6, 0x58, 0x14, 0x29, 0x7f, 0x6d, 0xbe, 0xae, 0xa9, 0x08, 0xe9, 0x7c, 0x8e, 0xa5, 0x6e, 0x1b, 0x6d, 0x18, 0x22, 0x16, 0x6d, 0x7e, 0xfe, 0x9a, 0xdf, 0x73, 0x7d, 0x3f, 0xc4, 0x85, 0x46, 0x26, 0x8f, 0xe9, 0x0b, 0x44, 0x2c, 0x6d, 0xb1, 0xfd, 0x40, 0xae, 0xb1, 0xf5, 0xb3, 0x8b, 0xbe, 0x23, 0x6c, 0xd9, 0xa8, 0x27, 0x5b, 0x58, 0x80, 0xdd, 0xbd, 0xe6, 0xfd, 0x32, 0x9b, 0xf3, 0x1e, 0x36, 0x94, 0x35, 0x11, 0x73, 0xdd, 0x9d, 0x54, 0x7e, 0x86, 0x89, 0x1a, 0xcb, 0xff, 0x3b, 0xf0, 0xc5, 0xda, 0x8a, 0xa0, 0x1e, 0xd2, 0xd7, 0x55, 0x64, 0x0d, 0x43, 0x01, 0xd6, 0x9e, 0x1f, 0xfc, 0x75, 0x4e, 0xa5, 0xee, 0x5e, 0x9c, 0xe5, 0xee, 0x56, 0x02, 0x01, 0xeb, 0xa7, 0x7a, 0x9d, 0x4b, 0x2b, 0x41, 0x92, 0xd3, 0xa6, 0xdb, 0xe2, 0xc7, 0x58, 0x57, 0xf1, 0x52, 0xd3, 0xd4, 0xf2, 0x27, 0x0b, 0x44, 0x9f, 0x69, 0xac, 0x70, 0x2d, 0xc9, 0xb0, 0x3d, 0x7f, 0xee, 0x30, 0x2d, 0x9a, 0x19, 0x7a, 0x28, 0x59, 0x09, 0x65, 0x7d, 0x61, 0x1c, 0xe1, 0x24, 0x58, 0xb8, 0xd2, 0x46, 0x52, 0xe9, 0x1f, 0xfe, 0x8c, 0x4b, 0x05, 0x62, 0x5d, 0x2b, 0xb2, 0xbd, 0x69, 0xe9, 0x0f, 0x1f, 0x18, 0xa0, 0xdd, 0x18, 0x47, 0x09, 0x03, 0xc0, 0x3d, 0x9d, 0x26, 0xfa, 0xe0, 0xfa, 0x7b, 0xfa, 0x28, 0x88, 0xd9, 0x05, 0xd5, 0x5c, 0x13, 0x78, 0x5d, 0x5d, 0x84, 0x0c, 0x29, 0xa5, 0xeb, 0x58, 0x00, 0x2a, 0x7a, 0x98, 0xc4, 0x9d, 0x29, 0xac, 0x5c, 0x92, 0x50, 0x64, 0xf1, 0xe2, 0x75, 0xfa, 0x5d, 0x4d, 0x62, 0xe0, 0xe0, 0x64, 0x7b, 0xbc, 0x15, 0xa7, 0x4f, 0xb2, 0x25, 0xea, 0x6d, 0xe1, 0x3b, 0xfd, 0x79, 0x30, 0x38, 0x8b, 0x7f, 0x4a, 0xa7, 0x43, 0x86, 0xe7, 0xf3, 0x36, 0x69, 0x4e, 0xd7, 0x80, 0xe2, 0x17, 0x17, 0x2b, 0xe8, 0x36, 0x6e, 0x50, 0x3b, 0x35, 0xc7, 0x7f, 0x3d, 0xc1, 0xb0, 0x61, 0x03, 0x68, 0x0b, 0x9c, 0xac, 0xa1, 0x06, 0xf7, 0xf1, 0x0d, 0x4e, 0xbf, 0xfe, 0xfc, 0x80, 0x69, 0x80, 0x33, 0xe1, 0x78, 0x00, 0xed, 0x4e, 0xa2, 0x6f, 0x1f, 0x76, 0x2e, 0x02, 0x00, 0x46, 0xa0, 0x40, 0xc9, 0xa5, 0x98, 0x59, 0xb9, 0x62, 0xf8, 0xb9, 0x5d, 0x6a, 0x45, 0xdd, 0x0e, 0x3f, 0x50, 0x65, 0xbb, 0xa5, 0x15, 0x6b, 0xe9, 0x9f, 0xe3, 0x14, 0xf7, 0x99, 0xbd, 0x64, 0xa7, 0xe7, 0x01, 0x57, 0xda, 0x6e, 0x47, 0x2d, 0x9b, 0xa1, 0x8c, 0x05, 0x5f, 0xb0, 0x90, 0xad, 0x8b, 0xfb, 0x7c, 0xb9, 0x37, 0xcd, 0xc8, 0xd2, 0x32, 0x47, 0x5c, 0x51, 0x46, 0x9a, 0xf5, 0x0d, 0xbd, 0x7a, 0xcb, 0x70, 0x23, 0xcf, 0x71, 0xd1, 0x4e, 0xad, 0xfc, 0xfd, 0x9c, 0x86, 0x67, 0x17, 0x7c, 0x9e, 0x36, 0xa3, 0x30, 0xc0, 0x5a, 0xdd, 0xd1, 0x30, 0x55, 0x4f, 0x93, 0xe0, 0x9e, 0xa2, 0x4a, 0xe6, 0x47, 0xb5, 0x2d, 0x2e, 0xdd, 0xec, 0xda, 0x6c, 0x90, 0xcb, 0x9b, 0x55, 0x93, 0xc3, 0xe8, 0x0f, 0xc6, 0x4b, 0x2d, 0xe6, 0x93, 0x33, 0xcd, 0x40, 0x15, 0x35, 0x66, 0xd3, 0x80, 0xce, 0x57, 0x15, 0xbd, 0x4c, 0x7f, 0xf4, 0x54, 0x27, 0x48, 0xc8, 0x8f, 0x94, 0xe4, 0x86, 0xdd, 0x58, 0xd7, 0x36, 0x74, 0xda, 0xb6, 0xa7, 0x3a, 0x7d, 0x2e, 0x61, 0xe6, 0x2c, 0x47, 0xdb, 0x62, 0x37, 0xea, 0xee, 0x74, 0x5d, 0xa2, 0x8a, 0x9e, 0x2a, 0x9f, 0xa8, 0x43, 0x83, 0x00, 0x7f, 0x0a, 0x7f, 0x52, 0xfb, 0x88, 0x78, 0x53, 0x6b, 0x19, 0x62, 0xfc, 0x7a, 0x0e, 0x5c, 0xbf, 0x60, 0x0e, 0x85, 0x0e, 0x59, 0xb6, 0x11, 0x1c, 0x56, 0x83, 0x9c, 0xe7, 0xf3, 0xf2, 0xbd, 0x76, 0xaa, 0xe5, 0xdf, 0x5f, 0x46, 0x49, 0x4c, 0x8d, 0x9a, 0xf6, 0x8b, 0x40, 0x72, 0xd6, 0xec, 0x55, 0xca, 0x4a, 0x61, 0xc8, 0x3e, 0xc9, 0x8f, 0x77, 0xc2, 0xcb, 0x25, 0x29, 0x93, 0xe5, 0x6d, 0xce, 0x6e, 0x35, 0x21, 0x09, 0xff, 0x00, 0x7f, 0xeb, 0x9c, 0x9a, 0x9f, 0x02, 0x33, 0x86, 0x05, 0x92, 0x81, 0xdf, 0x73, 0x22, 0x85, 0xf6, 0x00, 0x3a, 0x35, 0x3d, 0x6e, 0x6c, 0x6f, 0x64, 0xb9, 0x91, 0x32, 0xc1, 0xec, 0x55, 0x0e, 0xf5, 0x38, 0xf6, 0xd9, 0xcd, 0x47, 0x48, 0xa4, 0x66, 0xce, 0xfd, 0xed, 0x95, 0x62, 0x23, 0x17, 0x85, 0x8c, 0xee, 0x17, 0xa2, 0x1f, 0xb8, 0x6f, 0xb6, 0xc9, 0x46, 0x60, 0x52, 0xe9, 0x4d, 0x5b, 0x70, 0xa0, 0x34, 0xba, 0x56, 0x2b, 0x1c, 0xad, 0xbe, 0x70, 0x1e, 0x77, 0x33, 0xd6, 0xd3, 0xda, 0xbe, 0x5a, 0x1a, 0xcf, 0xc2, 0xe0, 0x15, 0x7b, 0x25, 0xc6, 0x75, 0x5f, 0xb0, 0xbf, 0xf8, 0xcf, 0xb9, 0xdf, 0x2f, 0xa5, 0xff, 0xf2, 0x85, 0x36, 0xd5, 0x12, 0x7d, 0x85, 0x83, 0x79, 0x3b, 0xb7, 0xe9, 0x93, 0x46, 0xc7, 0x65, 0x57, 0x8c, 0x7b, 0xf7, 0xd8, 0xa7, 0x97, 0xa3, 0x17, 0x5e, 0x50, 0x17, 0x1c, 0x6f, 0x03, 0x8e, 0x45, 0x8c, 0x27, 0xf4, 0xdd, 0xa3, 0x81, 0x4b, 0xf0, 0x62, 0x96, 0x4d, 0x5e, 0xfb, 0x66, 0x53, 0x2f, 0x24, 0x57, 0x75, 0x26, 0x62, 0x70, 0xf3, 0x99, 0x88, 0xc7, 0xd4, 0x80, 0x7a, 0x3d, 0xcc, 0xcb, 0x37, 0x68, 0x63, 0xf9, 0x17, 0xd1, 0x54, 0xe6, 0x51, 0x60, 0x33, 0xe4, 0xbf, 0x14, 0x53, 0x0e, 0xe6, 0xf7, 0xe7, 0xd9, 0x31, 0x52, 0x67, 0xec, 0x7d, 0x1d, 0x36, 0x32, 0xda, 0xb9, 0x81, 0x2d, 0x90, 0xe2, 0x6a, 0x8d, 0x61, 0xdf, 0x66, 0x01, 0x0e, 0xfb, 0xe3, 0x4d, 0x1d, 0x39, 0x2f, 0x9d, 0xd8, 0x44, 0x95, 0x18, 0x99, 0xa5, 0xc9, 0xb9, 0x45, 0x38, 0x86, 0x5a, 0x17, 0xe1, 0x75, 0x12, 0x9f, 0x7b, 0x51, 0xc1, 0x0a, 0x11, 0x49, 0xe9, 0xa3, 0x51, 0xa5, 0xc0, 0x9a, 0x3d, 0xad, 0x83, 0x04, 0x24, 0xc6, 0x0c, 0x24, 0xd1, 0xdf, 0xa7, 0xe9, 0x02, 0x0b, 0x22, 0xb7, 0x1c, 0x6f, 0x23, 0x6b, 0x1c, 0x5f, 0xbe, 0x99, 0xd1, 0xc4, 0x47, 0x17, 0x49, 0xc1, 0x65, 0xc0, 0x89, 0x96, 0x68, 0x72, 0x80, 0xc4, 0xdd, 0x59, 0x3e, 0x72, 0x5f, 0x70, 0x62, 0x0f, 0xb0, 0x44, 0xd1, 0x39, 0x08, 0xfc, 0xae, 0xdd, 0xac, 0x96, 0x86, 0xa0, 0xc3, 0x73, 0xca, 0x7e, 0x65, 0x16, 0x83, 0xb1, 0xf6, 0x29, 0x41, 0xd5, 0xb2, 0xc0, 0x54, 0x49, 0x88, 0xe2, 0x3f, 0xd8, 0x2c, 0x46, 0x6a, 0x99, 0x68, 0x5a, 0x17, 0x13, 0xb3, 0x89, 0x97, 0xa5, 0x04, 0xbe, 0xbe, 0x26, 0xe8, 0x24, 0x94, 0xc8, 0xd3, 0x31, 0x4d, 0x42, 0xb3, 0xe2, 0x7c, 0x2e, 0xcb, 0x48, 0x83, 0xaf, 0xbf, 0x43, 0x4e, 0x58, 0xeb, 0x8e, 0x41, 0x49, 0xf9, 0xfb, 0x6e, 0x9b, 0xb3, 0x00, 0x0c, 0xff, 0x15, 0x73, 0x24, 0xa1, 0xa7, 0x92, 0x8e, 0x53, 0x0a, 0x46, 0x1c, 0xe7, 0xd0, 0xa9, 0x15, 0xdc, 0x91, 0xc5, 0xe5, 0x3e, 0x3a, 0x9f, 0x12, 0xc7, 0xa9, 0x74, 0x72, 0x4a, 0x77, 0x42, 0x9c, 0x52, 0x15, 0x8a, 0x9c, 0x06, 0x1b, 0x54, 0xeb, 0x4f, 0xdc, 0x75, 0x9e, 0x3d, 0x3e, 0x0d, 0xdd, 0xa7, 0xc9, 0x53, 0x97, 0x12, 0xfd, 0x95, 0x74, 0xd4, 0xe9, 0x7a, 0x0b, 0x7a, 0xf9, 0x8b, 0x56, 0x66, 0x10, 0xf1, 0x62, 0xbd, 0xd6, 0x80, 0x4b, 0x80, 0x54, 0xf5, 0x68, 0xf8, 0xbe, 0x7c, 0xc3, 0x58, 0x8f, 0x76, 0xcc, 0x9e, 0xdb, 0x78, 0x4e, 0xba, 0xe1, 0x97, 0xa1, 0xf2, 0xe1, 0xe3, 0x22, 0x85, 0x2d, 0x31, 0xe0, 0x8e, 0x81, 0x1e, 0x98, 0x2c, 0x97, 0x50, 0xe4, 0xe0, 0xf7, 0xff, 0xaf, 0x36, 0x0d, 0xb4, 0xec, 0xa8, 0x7d, 0x51, 0x87, 0xbf, 0xbb, 0x52, 0x9c, 0x7b, 0xd6, 0x52, 0xe8, 0xf5, 0x94, 0xd1, 0x7d, 0x43, 0xc4, 0x34, 0xb9, 0x9c, 0xd0, 0x0d, 0x78, 0xbc, 0x92, 0x9d, 0x89, 0x8a, 0x68, 0x98, 0x5f, 0xf9, 0x8b, 0x27, 0x09, 0x2c, 0x9c, 0x33, 0x65, 0xdd, 0x80, 0xe1, 0x90, 0xff, 0x6e, 0x59, 0xa0, 0xa2, 0x46, 0xcc, 0x96, 0x18, 0x25, 0xb5, 0x8e, 0x56, 0x36, 0x5f, 0x39, 0x9c, 0xcb, 0xa7, 0x8d, 0x59, 0xac, 0x03, 0xbb, 0x49, 0xae, 0xc3, 0x62, 0xe0, 0x88, 0x97, 0x02, 0xeb, 0xe3, 0x52, 0xb3, 0x75, 0xb0, 0xed, 0x17, 0xe7, 0xbe, 0xcf, 0x8d, 0x74, 0x8c, 0x4b, 0xa7, 0xb4, 0x5c, 0x6b, 0xdf, 0x8f, 0x88, 0xec, 0x85, 0x5d, 0x19, 0x89, 0xfc, 0x4b, 0x96, 0x7d, 0x26, 0x01, 0x1a, 0x43, 0x1d, 0x82, 0xa9, 0xa0, 0x24, 0x53, 0xc4, 0xe3, 0xdd, 0xdf, 0x3b, 0x6c, 0xbc, 0x1a, 0x43, 0x6b, 0xbb, 0x65, 0xc8, 0xea, 0x4f, 0xb2, 0x05, 0x0e, 0x9b, 0xe8, 0x51, 0x99, 0xe4, 0x89, 0x3c, 0xb4, 0x46, 0x92, 0xda, 0xec, 0xa5, 0xa2, 0x5f, 0x7a, 0xe6, 0x5f, 0xec, 0xc7, 0x5e, 0x15, 0xa9, 0x2f, 0x8a, 0xa1, 0x14, 0x05, 0x01, 0x8e, 0x99, 0xd8, 0xa8, 0x7d, 0x62, 0xf5, 0x25, 0xca, 0x70, 0x2d, 0x96, 0x6c, 0xeb, 0xd9, 0x82, 0x1d, 0xb6, 0x1b, 0x0f, 0xbc, 0x47, 0x66, 0x76, 0xef, 0xb6, 0x40, 0xb5, 0x0c, 0x13, 0x46, 0x84, 0x3a, 0xfd, 0x71, 0x89, 0xd3, 0x70, 0x99, 0xcf, 0x0d, 0xdf, 0x37, 0x75, 0xda, 0x83, 0x6f, 0xa3, 0x0c, 0xf2, 0x4e, 0xc2, 0xbd, 0xf3, 0x50, 0xed, 0xee, 0x91, 0x25, 0xa2, 0x6e, 0x6e, 0xb4, 0xbe, 0xfe, 0x5a, 0x61, 0xa8, 0xb2, 0x24, 0x8b, 0xcc, 0x9a, 0xb0, 0x59, 0x4b, 0xa2, 0x4a, 0xb7, 0xf0, 0xb7, 0x3a, 0x9b, 0x67, 0x2b, 0x99, 0x8d, 0xa9, 0x5b, 0x63, 0x66, 0xbb, 0x8f, 0xcd, 0x58, 0x98, 0x21, 0xd8, 0x2e, 0x6c, 0xe2, 0x26, 0xd5, 0x02, 0xb9, 0x0c, 0x1c, 0x80, 0x8d, 0xea, 0xb8, 0x52, 0x65, 0xb7, 0x8b, 0x64, 0xce, 0xe0, 0x26, 0x94, 0x7e, 0x53, 0x8c, 0x67, 0x36, 0xd6, 0x38, 0xfa, 0xed, 0x9e, 0x62, 0x3c, 0x2a, 0x1d, 0x7f, 0x5b, 0xb2, 0x1b, 0x07, 0x7c, 0x63, 0x08, 0x7a, 0xaf, 0x60, 0x91, 0xa5, 0x22, 0x6e, 0x71, 0x22, 0x95, 0x9e, 0x8a, 0x1e, 0x0d, 0x2d, 0x34, 0x5e, 0xcd, 0xa8, 0xd5, 0x84, 0x82, 0x53, 0xb2, 0x8f, 0xbe, 0xcc, 0x04, 0xa2, 0xa7, 0xec, 0x4f, 0x06, 0xf1, 0xee, 0xef, 0x71, 0x09, 0xd3, 0xf3, 0x89, 0x93, 0x04, 0x2f, 0xa4, 0x17, 0x3a, 0x8d, 0xd2, 0xf7, 0x9b, 0xa4, 0x1d, 0xa5, 0x26, 0x8c, 0x0f, 0x12, 0x50, 0xf0, 0x75, 0x6a, 0xef, 0x64, 0x63, 0xfe, 0x58, 0xf9, 0x78, 0x82, 0xc4, 0x0f, 0x63, 0x78, 0xf9, 0x6b, 0xa6, 0xec, 0x26, 0x8a, 0x9a, 0x62, 0x0e, 0x34, 0xb4, 0x0d, 0x68, 0x54, 0x06, 0x41, 0x86, 0x06, 0x09, 0x2b, 0x36, 0xf2, 0x99, 0xc0, 0xe6, 0xd9, 0x41, 0xf3, 0x0b, 0x6d, 0xb9, 0x2b, 0xc3, 0x66, 0xad, 0xf4, 0xb8, 0xd2, 0xc0, 0xf4, 0x48, 0xac, 0xd1, 0x22, 0xe4, 0xb1, 0x7d, 0x32, 0xb6, 0x6f, 0xe5, 0x53, 0x87, 0x9f, 0xb1, 0x1d, 0xdf, 0xb4, 0x55, 0xc5, 0x6e, 0xb4, 0x92, 0x94, 0xaa, 0x47, 0x40, 0x97, 0xba, 0x0e, 0x4c, 0x97, 0x93, 0x35, 0xfd, 0x4b, 0x61, 0x4c, 0x7b, 0xcd, 0x28, 0x52, 0x91, 0x4b, 0xab, 0x13, 0xb2, 0xff, 0x8d, 0xb5, 0x3a, 0x61, 0xb6, 0x8d, 0xf7, 0x9b, 0xf8, 0x37, 0xe8, 0x3d, 0xf2, 0xe5, 0x44, 0x32, 0x35, 0xf7, 0xbe, 0xf3, 0xa6, 0xcc, 0x08, 0xfa, 0x24, 0xd8, 0x96, 0x7a, 0x6a, 0xf7, 0xa4, 0x4d, 0x36, 0x01, 0x7a, 0x2d, 0xab, 0x9f, 0xef, 0x28, 0xf3, 0x5d, 0x2c, 0x4e, 0x2a, 0x00, 0xb2, 0xad, 0x77, 0x19, 0x9f, 0x7f, 0x7c, 0xda, 0x2c, 0xa1, 0xf1, 0x29, 0x7b, 0x47, 0x8b, 0xf3, 0x90, 0xef, 0x23, 0xc3, 0x9d, 0x93, 0x14, 0x93, 0x82, 0x23, 0xe5, 0xe2, 0x94, 0x32, 0x28, 0x06, 0x9d, 0xf0, 0xa1, 0xc4, 0x25, 0x58, 0xab, 0x1e, 0xf0, 0xaa, 0xd8, 0x6c, 0xc8, 0x1c, 0xd8, 0xae, 0x7d, 0xcc, 0x9c, 0x21, 0x29, 0xfa, 0xba, 0x10, 0xb8, 0x74, 0x14, 0xed, 0xa8, 0x51, 0xb5, 0xa0, 0x0e, 0xe2, 0xfb, 0x1f, 0xda, 0xe6, 0xfb, 0x3f, 0x5b, 0xfd, 0x21, 0xca, 0x06, 0x60, 0x17, 0xd1, 0x73, 0xce, 0xe8, 0x43, 0xa8, 0xca, 0x66, 0xbf, 0x9a, 0x03, 0xc9, 0xa7, 0xf1, 0x14, 0x98, 0x76, 0x0c, 0x6d, 0xcd, 0x53, 0x45, 0x91, 0x34, 0xe6, 0x76, 0x83, 0x14, 0x6a, 0xbc, 0x7a, 0x11, 0x03, 0x7a, 0xdc, 0x51, 0x52, 0xa1, 0x6a, 0xde, 0x47, 0x2f, 0xb8, 0x4b, 0x37, 0xf6, 0xe1, 0x9b, 0x2f, 0x9f, 0x78, 0x5e, 0x87, 0xee, 0xc2, 0x1d, 0xba, 0x48, 0x22, 0xf8, 0x75, 0x72, 0xd4, 0x8e, 0xed, 0x9b, 0xde, 0x1d, 0x76, 0x9d, 0x44, 0xea, 0x52, 0x80, 0x7c, 0xe4, 0xc6, 0x3f, 0x21, 0x84, 0x73, 0xcf, 0xec, 0xf7, 0xe4, 0x5e, 0xdf, 0x7f, 0x64, 0xd9, 0xc3, 0x17, 0x12, 0xb0, 0xd5, 0x56, 0x37, 0xdd, 0xbd, 0x95, 0xd6, 0x23, 0xbf, 0x54, 0x85, 0x93, 0x35, 0xda, 0x7c, 0x55, 0x3d, 0x1c, 0xec, 0xa5, 0xaf, 0xe0, 0x92, 0x1c, 0x52, 0x22, 0x8b, 0x31, 0x4f, 0xb7, 0x6a, 0xff, 0xe5, 0x30, 0x88, 0x49, 0x5f, 0x01, 0x9b, 0xbb, 0x43, 0xe3, 0x8a, 0x72, 0xcd, 0x76, 0x80, 0xbf, 0x9b, 0x2b, 0x40, 0x28, 0xaa, 0x61, 0xb8, 0xb0, 0x81, 0xce, 0xd8, 0x59, 0xac, 0x21, 0xa4, 0xe6, 0x6c, 0xe5, 0x88, 0xe5, 0xad, 0xa9, 0xec, 0xed, 0x38, 0x5e, 0x09, 0x25, 0x2a, 0x00, 0xfb, 0x05, 0xa5, 0x79, 0x17, 0x61, 0xc5, 0xc2, 0x7e, 0xa3, 0xd6, 0x4b, 0xf2, 0x58, 0xc4, 0x9d, 0xe9, 0xee, 0xd2, 0x3e, 0xe0, 0xbb, 0x8f, 0xd4, 0xf2, 0x42, 0x07, 0x8e, 0xa9, 0xb2, 0x36, 0xc0, 0x14, 0xb0, 0xc2, 0xcd, 0x1a, 0x56, 0xe9, 0x4a, 0x0d, 0x7c, 0xb7, 0x60, 0x83, 0x36, 0x7d, 0x72, 0x61, 0x9d, 0x80, 0x00, 0x38, 0xd3, 0xee, 0xcc, 0xd5, 0x41, 0x16, 0x3b, 0x13, 0x23, 0xd7, 0xfd, 0xf4, 0x47, 0x59, 0xf0, 0xf0, 0x11, 0xfc, 0x42, 0x8d, 0xc3, 0x8e, 0xd7, 0x30, 0xfb, 0xc1, 0xea, 0x33, 0x7e, 0xdc, 0xf6, 0x37, 0x33, 0xb0, 0xd7, 0xbc, 0x73, 0xce, 0x2c, 0xef, 0x80, 0xf7, 0x01, 0xc2, 0x52, 0xd4, 0xab, 0x42, 0x9a, 0xe7, 0xf2, 0x26, 0x01, 0xc2, 0x76, 0xa3, 0xb0, 0x77, 0x4b, 0x88, 0x16, 0x4f, 0xe7, 0x86, 0xe5, 0xbf, 0x3e, 0xcf, 0x5e, 0x97, 0x2b, 0xe4, 0xcf, 0x7d, 0x12, 0xa7, 0x5a, 0x9a, 0xc4, 0xb8, 0xf7, 0x93, 0xa2, 0xfe, 0xbc, 0xbb, 0x06, 0x84, 0x5d, 0x87, 0xde, 0x87, 0xef, 0x42, 0x9a, 0xcd, 0xf1, 0x01, 0x49, 0x38, 0x8c, 0xda, 0xfe, 0x9a, 0x1a, 0x51, 0x79, 0xcb, 0xe6, 0x13, 0x03, 0xf9, 0x32, 0xe7, 0x9a, 0x40, 0x7f, 0xe1, 0x4e, 0x7a, 0x08, 0xd8, 0xeb, 0x59, 0x90, 0x1b, 0xd8, 0xb3, 0x5d, 0x60, 0x3f, 0x1c, 0x85, 0xfd, 0x6e, 0xba, 0x68, 0x5b, 0x7e, 0x55, 0x7e, 0xa7, 0x32, 0xae, 0x53, 0xca, 0x21, 0x12, 0xcf, 0x9c, 0x18, 0x2e, 0xbb, 0x54, 0xba, 0x25, 0x81, 0x44, 0x69, 0xe0, 0x33, 0xc3, 0x6a, 0xa6, 0xcf, 0x6a, 0x43, 0xec, 0xc2, 0x83, 0x68, 0x6e, 0xaa, 0xbe, 0x17, 0x7e, 0x60, 0x26, 0x81, 0x9c, 0x36, 0x54, 0x2a, 0x48, 0x7d, 0xe2, 0x92, 0x14, 0x4b, 0x23, 0x15, 0xfd, 0x7b, 0x11, 0x10, 0xfb, 0xf4, 0x87, 0x45, 0xd7, 0x2f, 0xb1, 0x81, 0x3d, 0xf3, 0xc0, 0x7c, 0x12, 0x63, 0xe2, 0x00, 0x07, 0x3b, 0x71, 0x4d, 0x6f, 0x57, 0x6a, 0xbd, 0x4e, 0x75, 0x22, 0xa4, 0xb2, 0x3b, 0x34, 0x7a, 0x46, 0x7c, 0xbe, 0x3c, 0x24, 0xb7, 0xcd, 0x0f, 0xeb, 0xe0, 0x15, 0x27, 0x11, 0x63, 0xe6, 0xe7, 0x7b, 0x67, 0x5b, 0x49, 0x4b, 0x4f, 0xd5, 0x81, 0xfa, 0x87, 0xa7, 0xdd, 0xa6, 0x7d, 0x13, 0xf0, 0xad, 0xed, 0x76, 0xef, 0x7a, 0x62, 0xbf, 0x5b, 0x9f, 0xfa, 0x25, 0xe0, 0x24, 0x69, 0x1a, 0x7e, 0x1f, 0x40, 0x7a, 0xe6, 0x85, 0x70, 0x09, 0x27, 0x40, 0x09, 0x1c, 0x89, 0x82, 0x48, 0x96, 0xb9, 0x58, 0xd1, 0x16, 0x27, 0x82, 0x39, 0x6f, 0xad, 0x82, 0xc7, 0x59, 0x71, 0xf3, 0x7c, 0x66, 0x0c, 0x1c, 0x50, 0x37, 0xec, 0xc5, 0xbf, 0xef, 0xf6, 0x49, 0x84, 0xe8, 0x70, 0xed, 0xa5, 0xa5, 0x1f, 0x70, 0xaf, 0x08, 0xac, 0xe4, 0x43, 0xc5, 0x4d, 0xbc, 0xd1, 0x17, 0xa1, 0x25, 0xa4, 0xb2, 0xdb, 0x9a, 0x1f, 0xf8, 0x22, 0xb2, 0x46, 0x6f, 0x38, 0x3d, 0x80, 0x73, 0x5a, 0x90, 0x9a, 0x28, 0x68, 0x1d, 0x10, 0xb3, 0x46, 0x47, 0x88, 0xaa, 0x82, 0x74, 0xa0, 0xc8, 0x37, 0x63, 0xe9, 0xe6, 0x31, 0xc0, 0x33, 0x26, 0x51, 0xf5, 0x0c, 0x72, 0x33, 0x44, 0x83, 0x25, 0x0f, 0x12, 0x32, 0x07, 0xdd, 0x86, 0x7b, 0x7f, 0xbd, 0x53, 0x11, 0x04, 0x95, 0xd2, 0xba, 0xd5, 0xfc, 0x54, 0x54, 0xea, 0x57, 0xb6, 0x16, 0x2a, 0x41, 0x36, 0x19, 0xde, 0x31, 0x84, 0x17, 0x66, 0x56, 0x1d, 0x72, 0x2a, 0xc6, 0xd4, 0x78, 0xd4, 0xd8, 0xb1, 0xe5, 0xbd, 0xce, 0xff, 0xa9, 0xa4, 0xb8, 0xa1, 0xec, 0xa6, 0x95, 0xa5, 0x50, 0x6a, 0xba, 0x1c, 0x76, 0x9d, 0x78, 0x28, 0xc3, 0x9e, 0xf9, 0x56, 0x64, 0x7a, 0x6b, 0x2e, 0x8f, 0x1a, 0x60, 0x09, 0x0c, 0xbb, 0x75, 0x23, 0xf5, 0x9f, 0x32, 0xf1, 0xba, 0x02, 0x32, 0xb5, 0x67, 0x50, 0x84, 0x4f, 0x2a, 0x95, 0x50, 0x56, 0x10, 0x35, 0xbe, 0x67, 0x0f, 0xdd, 0x13, 0xbd, 0x49, 0xb9, 0x1e, 0x02, 0x8f, 0xe8, 0xd2, 0x65, 0x24, 0x2d, 0x34, 0xed, 0xc4, 0xe7, 0x78, 0x0d, 0xe5, 0x43, 0x66, 0x78, 0x3d, 0xb0, 0x03, 0x36, 0x84, 0x93, 0x6e, 0xf8, 0x7b, 0x3c, 0x08, 0xa9, 0x2d, 0x19, 0xd7, 0x45, 0x75, 0x2a, 0x2d, 0xee, 0xc0, 0xb5, 0x84, 0x3d, 0x14, 0x3b, 0xad, 0xd6, 0x52, 0xaa, 0x2a, 0x3f, 0xb8, 0xd4, 0xd8, 0xf2, 0xa9, 0x20, 0xd1, 0xb0, 0xb1, 0x80, 0x90, 0x19, 0xc4, 0xa3, 0x56, 0x7a, 0xc6, 0x6b, 0xcd, 0xe6, 0x51, 0xa1, 0xeb, 0x88, 0xb2, 0xe8, 0x1a, 0x37, 0x34, 0xef, 0x96, 0x4b, 0xa2, 0xeb, 0x16, 0xaf, 0x07, 0x45, 0xae, 0x38, 0xb8, 0x8f, 0xf4, 0x35, 0x94, 0xbd, 0x62, 0x48, 0x8b, 0x92, 0xfb, 0x74, 0x5d, 0x58, 0x31, 0x76, 0xa4, 0xd4, 0x07, 0x59, 0x15, 0x79, 0x73, 0x45, 0x03, 0xdc, 0x06, 0x98, 0x24, 0x68, 0xce, 0x37, 0x98, 0x53, 0x7c, 0x27, 0x27, 0xd0, 0xc2, 0x57, 0xcb, 0x87, 0xff, 0xc0, 0x6e, 0x42, 0x1e, 0xb0, 0xf4, 0xe9, 0xbb, 0x63, 0x7c, 0xb0, 0x88, 0xd4, 0xe3, 0x8f, 0xf0, 0xd2, 0x8a, 0xf3, 0xfa, 0x56, 0x5a, 0xb3, 0x6f, 0x14, 0x05, 0x45, 0x3f, 0x50, 0x8e, 0x32, 0x21, 0xf3, 0x0b, 0xc7, 0x7a, 0xde, 0xaa, 0x0d, 0x80, 0x7e, 0xf2, 0xfc, 0x9f, 0xa1, 0x4b, 0xec, 0x1c, 0x88, 0xc1, 0x4c, 0xf8, 0x3d, 0x05, 0x96, 0x17, 0x27, 0xb4, 0x82, 0xa1, 0xdb, 0xdc, 0x7b, 0xa9, 0x35, 0xbd, 0x4f, 0x0c, 0xa8, 0xcc, 0x2a, 0x9c, 0xd2, 0xfe, 0xc5, 0x7e, 0x53, 0x42, 0xdb, 0xd1, 0xe0, 0x4f, 0xdd, 0x90, 0x93, 0xa1, 0xe6, 0xba, 0x85, 0xbe, 0xf1, 0xb0, 0x9f, 0xbe, 0x4a, 0xde, 0xad, 0x0a, 0x42, 0x9d, 0xb4, 0x64, 0x27, 0x58, 0x86, 0x28, 0x73, 0xee, 0x93, 0xd1, 0x44, 0x58, 0x02, 0xbe, 0x0c, 0x8c, 0x01, 0x37, 0x8a, 0xa1, 0x59, 0xab, 0xf9, 0x33, 0x45, 0x3b, 0x87, 0x09, 0x84, 0x7d, 0x08, 0xf5, 0xad, 0x79, 0xec, 0xfc, 0xc3, 0xf8, 0x6e, 0xb7, 0x09, 0xff, 0x0f, 0xf9, 0x17, 0x96, 0x43, 0xb3, 0x2e, 0xcd, 0x6a, 0x14, 0xc9, 0x01, 0x01, 0xf4, 0x74, 0x5c, 0x1a, 0x72, 0xe1, 0x9b, 0x09, 0xdc, 0x39, 0x14, 0x61, 0xd0, 0xb0, 0xf7, 0x1f, 0xa1, 0x5c, 0xd4, 0x24, 0xfc, 0x47, 0x5d, 0xe9, 0xcc, 0xc3, 0x6e, 0x6e, 0x5a, 0xfd, 0x4a, 0x73, 0xb9, 0xd5, 0x28, 0xeb, 0x61, 0xed, 0xee, 0xae, 0x1a, 0x00, 0x3c, 0x6e, 0x1c, 0x76, 0xac, 0xec, 0x74, 0x35, 0x58, 0x6b, 0xa9, 0xb9, 0x9d, 0x65, 0xa0, 0x67, 0x1f, 0x7e, 0xbd, 0x1e, 0x0d, 0xb6, 0x4b, 0x10, 0xa7, 0xe2, 0x1e, 0xd0, 0xfd, 0x5d, 0x76, 0xab, 0xf9, 0xfb, 0x27, 0x3c, 0x9f, 0x3e, 0xf7, 0x3b, 0x94, 0xcd, 0x48, 0x96, 0xdd, 0x21, 0xf7, 0xc3, 0xea, 0x82, 0x83, 0x54, 0xd3, 0x32, 0x72, 0xcc, 0xe1, 0xe8, 0xf0, 0xb1, 0x50, 0x7f, 0xba, 0xe2, 0x53, 0xf0, 0x3a, 0x2b, 0x59, 0x7e, 0xf3, 0x17, 0x8f, 0x30, 0x20, 0x05, 0xa6, 0x84, 0x98, 0x7e, 0xd6, 0x62, 0xf5, 0xc6, 0x23, 0x4f, 0xf5, 0xb1, 0xdf, 0xe3, 0x21, 0xb8, 0x70, 0x7d, 0xac, 0x4c, 0x53, 0x35, 0x9d, 0x6b, 0x61, 0x12, 0x31, 0x70, 0x51, 0x7e, 0x7a, 0x2f, 0x7f, 0xf6, 0x4d, 0x41, 0xeb, 0x06, 0x5b, 0x9d, 0x85, 0x75, 0x9e, 0x68, 0xa8, 0xbd, 0xf7, 0x0f, 0xe4, 0xbd, 0x15, 0x92, 0x00, 0xb2, 0x98, 0x23, 0x3f, 0x64, 0x76, 0xef, 0xe3, 0x9d, 0x9e, 0x3c, 0xf0, 0xdf, 0xdc, 0xb4, 0x32, 0x56, 0xfd, 0x00, 0x81, 0x0c, 0x33, 0x99, 0x44, 0x5c, 0xbb, 0xdb, 0x34, 0xa9, 0xbc, 0x5c, 0x63, 0x50, 0x73, 0x7b, 0x7c, 0xda, 0x8d, 0x3c, 0x4c, 0x77, 0xd4, 0x53, 0x81, 0xa8, 0x0e, 0x7e, 0xb2, 0x3b, 0x22, 0x18, 0xa0, 0x7c, 0x7d, 0xec, 0xbc, 0xaa, 0xb4, 0x47, 0xe9, 0xa8, 0x6b, 0x51, 0x82, 0xf5, 0x75, 0x9c, 0x9f, 0xde, 0x3d, 0xfe, 0x94, 0xf2, 0x64, 0x9c, 0xbb, 0xb7, 0xab, 0x48, 0x74, 0x9b, 0x14, 0x0d, 0x69, 0x2d, 0x44, 0x07, 0x17, 0x8d, 0x2c, 0x78, 0x8a, 0x21, 0xe8, 0x19, 0x67, 0x8a, 0xe7, 0xae, 0x30, 0xd7, 0x4d, 0xdd, 0xc4, 0xf8, 0x95, 0x40, 0x25, 0x75, 0x7b, 0xb9, 0x7e, 0x60, 0x19, 0x06, 0x65, 0x88, 0x50, 0x95, 0x5d, 0xef, 0x69, 0x99, 0x9f, 0x7e, 0xfc, 0x5d, 0x1a, 0xf8, 0x11, 0xd8, 0xb8, 0x2d, 0x86, 0x83, 0xe3, 0x70, 0xb1, 0x67, 0x48, 0x4a, 0x45, 0x7a, 0xda, 0x70, 0x7a, 0x2b, 0x1a, 0xf3, 0x68, 0x3c, 0x96, 0xb7, 0xb4, 0xd0, 0xb0, 0x26, 0x6f, 0xc5, 0xa1, 0x25, 0x3b, 0x43, 0xbe, 0x47, 0xb0, 0x95, 0xf9, 0x41, 0xfe, 0x38, 0xaa, 0x9f, 0xd3, 0x32, 0x90, 0xb5, 0x7f, 0xa5, 0x12, 0xd7, 0x56, 0xa4, 0xcb, 0xcd, 0x55, 0x45, 0x46, 0x81, 0x09, 0xf8, 0x06, 0xfb, 0xad, 0x17, 0xca, 0x8f, 0x93, 0xbe, 0x0f, 0x55, 0xc5, 0xdc, 0xd5, 0xda, 0xeb, 0x8a, 0xa6, 0x15, 0x6f, 0x9c, 0xd5, 0x9d, 0xe0, 0x76, 0x04, 0x19, 0x94, 0x22, 0xe8, 0xf7, 0x92, 0x9f, 0x51, 0x61, 0xae, 0x7b, 0x64, 0x6c, 0xf6, 0xa4, 0x2b, 0x93, 0x4d, 0x7b, 0x51, 0x65, 0x56, 0x2a, 0x26, 0x7a, 0x94, 0x37, 0xe9, 0xab, 0xcf, 0x5a, 0x47, 0x82, 0xb9, 0x8c, 0x1f, 0xf0, 0xd1, 0x61, 0x88, 0x3e, 0x88, 0x97, 0x15, 0x46, 0xa2, 0xef, 0x58, 0xe3, 0xe0, 0x3b, 0xa4, 0xa6, 0xdc, 0xb9, 0x17, 0xcb, 0x34, 0x9f, 0xd8, 0x6b, 0xea, 0xf7, 0x9e, 0xf3, 0x0b, 0xad, 0x72, 0xd4, 0x8f, 0xe7, 0xb5, 0x7c, 0x81, 0x94, 0x64, 0x86, 0x60, 0x48, 0x9b, 0x2d, 0xc4, 0x47, 0x58, 0x07, 0x44, 0xe0, 0x82, 0xf0, 0x98, 0xfc, 0x2a, 0x43, 0xfb, 0xf6, 0x10, 0x51, 0xd3, 0xad, 0x69, 0x0b, 0x94, 0xd8, 0xdf, 0x02, 0xe2, 0x9a, 0xda, 0x92, 0xf6, 0x57, 0xfe, 0x59, 0x42, 0xc5, 0xf5, 0xee, 0x58, 0x46, 0x6e, 0xd0, 0x08, 0x75, 0x65, 0x9d, 0xc8, 0xfe, 0xa5, 0x85, 0x5a, 0xb4, 0x8c, 0xfd, 0xa8, 0xdd, 0x0f, 0xb8, 0xf3, 0xd0, 0xfd, 0xd3, 0x2c, 0xc3, 0x88, 0x50, 0xa2, 0xde, 0x01, 0xc5, 0xde, 0x94, 0xe3, 0x55, 0xcb, 0x32, 0x13, 0xe0, 0x1b, 0xb8, 0x66, 0x77, 0xe5, 0xe9, 0x64, 0x13, 0x93, 0x9e, 0x4c, 0x86, 0xfb, 0x5f, 0x58, 0xb1, 0xcc, 0x34, 0x41, 0xf8, 0x2c, 0xb9, 0x06, 0xf3, 0x9f, 0x71, 0xea, 0x66, 0x2b, 0x5c, 0xbb, 0x74, 0xba, 0xcc, 0x5a, 0x0f, 0xbf, 0x74, 0x78, 0xb3, 0x1c, 0xc2, 0x9e, 0x54, 0x44, 0x6f, 0x70, 0x95, 0x9c, 0x54, 0x32, 0x3a, 0x28, 0x7f, 0x8b, 0xe0, 0x63, 0x86, 0x89, 0xeb, 0x6e, 0x1b, 0xe6, 0xc1, 0x6d, 0xe1, 0x8a, 0x36, 0x2f, 0x7e, 0x50, 0x46, 0x0d, 0xf2, 0x0d, 0x0a, 0x14, 0x27, 0xcf, 0xe5, 0x66, 0xc8, 0x62, 0xff, 0xdd, 0x57, 0x19, 0xf4, 0xf2, 0x7a, 0xca, 0xcd, 0xdd, 0x96, 0x1b, 0x2f, 0xfe, 0x9f, 0xfc, 0xd2, 0x7c, 0x2f, 0x75, 0x35, 0x2c, 0xd5, 0xa2, 0x90, 0xb4, 0xaf, 0xfc, 0x0b, 0xf0, 0x3b, 0xd9, 0x2d, 0x94, 0x6a, 0x37, 0x97, 0x13, 0xf6, 0xb5, 0xf2, 0xc0, 0xf6, 0xe2, 0x26, 0x33, 0xb0, 0xba, 0xcc, 0xef, 0xae, 0x6e, 0xe7, 0x42, 0x14, 0x64, 0xce, 0x6c, 0x30, 0x7f, 0x6d, 0x03, 0x53, 0xa0, 0xad, 0x95, 0xdf, 0x6d, 0x31, 0x90, 0xa2, 0x51, 0x43, 0x5f, 0x62, 0xc3, 0x0e, 0xd6, 0xb9, 0xcc, 0x0d, 0xd0, 0x24, 0xc3, 0xc3, 0x16, 0x56, 0x5c, 0xad, 0x83, 0xd2, 0xe1, 0x75, 0x66, 0xb8, 0xbe, 0x68, 0x28, 0xdf, 0x43, 0x2a, 0x2f, 0x25, 0xa6, 0xa8, 0x01, 0x03, 0x47, 0x4f, 0xad, 0x65, 0x38, 0x7c, 0x67, 0xb8, 0xfd, 0x33, 0x72, 0x44, 0x90, 0x13, 0x43, 0xbc, 0xa9, 0x89, 0xe3, 0x13, 0x3b, 0x45, 0x95, 0x92, 0x42, 0xea, 0xb9, 0x28, 0xbc, 0x0a, 0xf0, 0x01, 0xf5, 0x51, 0x81, 0x59, 0x08, 0x00, 0xfb, 0x93, 0xa3, 0x9d, 0x1c, 0x85, 0x0a, 0xe9, 0xf2, 0x17, 0x5f, 0x13, 0x40, 0x0c, 0x20, 0x2b, 0x23, 0x1f, 0xf1, 0xd9, 0xf5, 0x52, 0x9c, 0x4f, 0x72, 0x83, 0x56, 0x7c, 0x19, 0x40, 0x44, 0x83, 0xd5, 0xdc, 0x3d, 0x6b, 0xdd, 0xc2, 0xd2, 0x18, 0xd9, 0x0a, 0x8b, 0x7a, 0x46, 0x4a, 0x74, 0x04, 0x1b, 0xaf, 0xd8, 0x60, 0xad, 0x4c, 0x4d, 0x61, 0xd0, 0xb1, 0xf0, 0x39, 0x3f, 0xc0, 0xf2, 0xec, 0x3e, 0xbc, 0x54, 0x04, 0x7d, 0xa3, 0xee, 0x87, 0x40, 0xbe, 0xb6, 0x26, 0xbd, 0x76, 0x3f, 0xb7, 0xc5, 0x69, 0x80, 0xe5, 0xa7, 0xbd, 0xd7, 0x26, 0x52, 0xb4, 0x4e, 0xee, 0xb9, 0x81, 0x1c, 0x23, 0x7c, 0x5b, 0x6f, 0xd0, 0xc4, 0xcf, 0x68, 0x1d, 0x6e, 0x5a, 0x67, 0x7f, 0x6d, 0x37, 0x8a, 0x2c, 0x69, 0x76, 0x70, 0xd2, 0xac, 0x4e, 0x43, 0x88, 0x3f, 0xb4, 0xf5, 0x05, 0x50, 0x2c, 0xc9, 0x0f, 0xd7, 0xe0, 0x16, 0x37, 0x7a, 0xef, 0x48, 0xc4, 0xad, 0x07, 0x27, 0xed, 0x1d, 0x36, 0x5c, 0x4b, 0x4f, 0xfd, 0x30, 0x8d, 0x84, 0xa7, 0x98, 0x6e, 0xe1, 0xd8, 0x6f, 0xe4, 0xcc, 0x69, 0x02, 0x9a, 0x99, 0x73, 0xd1, 0xa1, 0x66, 0xaa, 0x94, 0x63, 0x43, 0xed, 0x7d, 0xd8, 0x97, 0x1b, 0xbd, 0xfc, 0xbf, 0x27, 0x49, 0x80, 0xf7, 0x6f, 0xde, 0xbf, 0x7e, 0x49, 0x42, 0xf5, 0xf5, 0xdf, 0xce, 0xab, 0x08, 0x3e, 0x29, 0x76, 0x51, 0xa9, 0x56, 0xe1, 0x79, 0x33, 0xf1, 0xa8, 0xa1, 0x8d, 0xb5, 0x27, 0x00, 0x1c, 0x42, 0x11, 0xcd, 0x4e, 0x1d, 0x65, 0x5f, 0x2f, 0xf9, 0x9e, 0x93, 0x37, 0x35, 0x2b, 0x6e, 0x66, 0xa5, 0x1e, 0x03, 0x94, 0x95, 0x28, 0x97, 0x02, 0x0b, 0xc5, 0x04, 0x34, 0x4d, 0xb4, 0x5b, 0x03, 0xa3, 0xaa, 0xcd, 0xee, 0x5e, 0x47, 0xcc, 0xb1, 0x19, 0x49, 0x6d, 0x19, 0x3f, 0x00, 0x11, 0x16, 0xce, 0x02, 0x44, 0x12, 0x5a, 0x1f, 0xe5, 0x81, 0x54, 0x97, 0x88, 0xb9, 0x8c, 0x8b, 0x18, 0x04, 0xf5, 0xb2, 0xc1, 0xf4, 0xa8, 0x4d, 0x0c, 0xf7, 0x2c, 0x5d, 0x4c, 0x2b, 0xf5, 0x13, 0x3a, 0x74, 0x2a, 0x88, 0xdc, 0xcb, 0xac, 0xae, 0xab, 0xd9, 0x53, 0x87, 0xf4, 0xc4, 0x7b, 0x94, 0x7f, 0x49, 0xbf, 0x91, 0x6f, 0x0b, 0x04, 0x5f, 0x69, 0x2a, 0xba, 0x42, 0xf8, 0x18, 0x5e, 0x4c, 0x30, 0xa8, 0x43, 0x19, 0x92, 0x68, 0x93, 0xbd, 0x30, 0x31, 0x90, 0xfb, 0x12, 0xfc, 0x20, 0xb8, 0xd7, 0xf7, 0x89, 0xae, 0x9f, 0xd9, 0x79, 0x65, 0x29, 0x72, 0x49, 0x5f, 0x39, 0x86, 0x82, 0x93, 0x3d, 0xdb, 0xa1, 0x1e, 0x2f, 0x91, 0x17, 0x34, 0xbd, 0xb2, 0x94, 0x5c, 0xa8, 0x0a, 0x85, 0xdd, 0x6a, 0x39, 0xdc, 0x73, 0x1b, 0x06, 0x0f, 0x47, 0x95, 0xf6, 0x63, 0x1e, 0xd7, 0x1e, 0x6a, 0xd1, 0xa7, 0x35, 0xca, 0xfd, 0x7c, 0xed, 0x41, 0xfb, 0x9a, 0x83, 0xe6, 0x13, 0x7f, 0x95, 0xb2, 0xec, 0x7e, 0x35, 0x3e, 0x47, 0xaa, 0x3b, 0xce, 0xed, 0xf5, 0xdf, 0x8f, 0xe6, 0x99, 0x87, 0x1d, 0xec, 0xb7, 0xdd, 0x48, 0x20, 0x3e, 0x25, 0x18, 0xfb, 0x0f, 0xce, 0x0f, 0x86, 0x5f, 0x46, 0xad, 0xce, 0x5c, 0x13, 0x3a, 0x92, 0x13, 0x20, 0xbf, 0x40, 0x91, 0x54, 0x56, 0x20, 0x48, 0x69, 0xa3, 0xce, 0xb5, 0xfc, 0xa3, 0xed, 0x40, 0xe0, 0xa4, 0x1a, 0x64, 0xb8, 0x95, 0x1f, 0x0f, 0xc5, 0x80, 0x69, 0x4c, 0xfc, 0x55, 0xbd, 0x1f, 0x5c, 0xe9, 0x26, 0xb0, 0x7e, 0x3e, 0x32, 0xac, 0x6e, 0x05, 0x5d, 0xe9, 0xb9, 0x61, 0xce, 0x49, 0xc7, 0xee, 0x41, 0xe0, 0x6b, 0x02, 0x45, 0x59, 0xb9, 0x33, 0xa7, 0x95, 0x18, 0x19, 0x2e, 0x96, 0x98, 0x55, 0x88, 0x9c, 0x85, 0xd1, 0x85, 0x8d, 0x3c, 0x4a, 0x83, 0x9a, 0x3d, 0x0c, 0x2a, 0x20, 0x82, 0xfd, 0x59, 0xcc, 0x0f, 0xdd, 0x5f, 0x03, 0xcb, 0xcc, 0x6f, 0x81, 0x8e, 0x0d, 0x4e, 0x40, 0x7b, 0x09, 0x4f, 0x9b, 0x90, 0x97, 0x81, 0xb3, 0x7b, 0x7a, 0x27, 0x12, 0xaf, 0x2b, 0x68, 0x8e, 0xb8, 0xda, 0x48, 0x70, 0xcb, 0xaf, 0xd7, 0xd6, 0xa2, 0x55, 0xa8, 0x56, 0x87, 0xb9, 0x85, 0xe4, 0xae, 0x0f, 0x61, 0xf6, 0xc7, 0x17, 0x8e, 0xe6, 0xd4, 0x9e, 0x31, 0x97, 0x38, 0x47, 0xf2, 0x5b, 0x11, 0x8b, 0xf8, 0x14, 0xc8, 0xff, 0x14, 0x9a, 0xe7, 0xd5, 0x3c, 0x5d, 0x2a, 0xa6, 0x3c, 0x4c, 0xd8, 0x6f, 0xa8, 0xf5, 0x53, 0xd9, 0x15, 0xed, 0xee, 0xbd, 0x88, 0x72, 0x00, 0xe7, 0x2f, 0x4f, 0x37, 0x1a, 0x4f, 0x00, 0x2e, 0x55, 0x7e, 0x17, 0x41, 0x55, 0x12, 0xde, 0xa0, 0x5b, 0xd9, 0x3e, 0xa2, 0x2f, 0x0b, 0xdf, 0x5c, 0x65, 0x7c, 0x91, 0x73, 0xdf, 0x16, 0xeb, 0x2e, 0x93, 0x87, 0x31, 0xcf, 0x8e, 0x37, 0x7b, 0x24, 0x39, 0x7d, 0x14, 0x59, 0xdc, 0x12, 0x21, 0x10, 0x60, 0xc6, 0x83, 0xb3, 0x59, 0x71, 0xfe, 0x09, 0x44, 0x2d, 0x9a, 0x08, 0x0c, 0xc2, 0x49, 0xeb, 0xd4, 0x62, 0xcb, 0x84, 0xf0, 0x97, 0xcf, 0xd2, 0x34, 0x79, 0x5b, 0xd6, 0x72, 0x24, 0x6d, 0xa3, 0x3e, 0x69, 0xe3, 0xb5, 0xf4, 0xc4, 0x98, 0x83, 0xfd, 0x8e, 0xd0, 0x57, 0x4d, 0x74, 0xd6, 0x5e, 0x30, 0x28, 0xe3, 0xfb, 0x47, 0x56, 0x42, 0x61, 0xcd, 0xda, 0xb2, 0x61, 0x1f, 0x30, 0x0c, 0x80, 0x7c, 0x2c, 0x25, 0x4d, 0x09, 0xeb, 0xf6, 0xf2, 0x18, 0x09, 0xfa, 0x08, 0xa9, 0x14, 0xd8, 0xb0, 0x31, 0x41, 0x42, 0xdf, 0x9b, 0x5e, 0x1d, 0xf9, 0x8d, 0x08, 0xe2, 0xa2, 0xec, 0x1e, 0x44, 0xd1, 0xa2, 0x76, 0x13, 0x25, 0x9f, 0xce, 0x60, 0x7d, 0x1d, 0x05, 0xe2, 0xc3, 0x29, 0x8b, 0x98, 0x08, 0x5f, 0x16, 0xb0, 0xd6, 0xf5, 0x96, 0xa8, 0xc1, 0xfb, 0x6c, 0xb3, 0x40, 0xe0, 0xd6, 0x5e, 0xbb, 0x39, 0xae, 0x73, 0xe5, 0xbe, 0x55, 0x1d, 0x4c, 0x95, 0xea, 0x4e, 0x2f, 0xd4, 0xbf, 0x5e, 0x8f, 0x41, 0x0d, 0xf5, 0x88, 0x5c, 0xe6, 0x2a, 0xe2, 0x9f, 0x6c, 0xec, 0xe4, 0x04, 0x41, 0xa1, 0x68, 0xc8, 0x3e, 0x0e, 0x35, 0x6e, 0x68, 0x77, 0x88, 0x08, 0x1f, 0x07, 0xf4, 0xb2, 0x99, 0x72, 0x6c, 0x5f, 0x8f, 0xd8, 0x9f, 0xd8, 0x36, 0xed, 0x84, 0x01, 0x71, 0x57, 0x35, 0x5e, 0x45, 0x57, 0x00, 0xd7, 0x8d, 0xac, 0xbb, 0xb8, 0xef, 0xb4, 0x59, 0xfc, 0x0e, 0xd5, 0xbb, 0xcb, 0x01, 0x1b, 0xc8, 0x41, 0x05, 0x22, 0xc0, 0x71, 0x6e, 0x37, 0xcd, 0xaa, 0xe4, 0xba, 0xdc, 0xf9, 0xcb, 0xc6, 0xaa, 0xee, 0x03, 0x15, 0x22, 0xa3, 0xd2, 0x1d, 0xe6, 0xfb, 0x1e, 0x7f, 0x2c, 0x28, 0xe0, 0xa2, 0xcb, 0x70, 0xd5, 0x9b, 0x95, 0x30, 0x77, 0x51, 0xe8, 0x21, 0x2b, 0xde, 0x80, 0xda, 0xbc, 0x38, 0x8f, 0x96, 0x08, 0x10, 0x10, 0x38, 0xf9, 0xfa, 0x58, 0x8c, 0xb7, 0xcf, 0xee, 0xd0, 0x1c, 0x4f, 0x9c, 0x73, 0x69, 0x0b, 0xc6, 0x1c, 0x37, 0x83, 0xfb, 0xee, 0xb0, 0x8b, 0xca, 0x0b, 0xfe, 0xf3, 0xd7, 0x56, 0x04, 0x66, 0x2e, 0x7e, 0x4c, 0x93, 0xd6, 0x38, 0x41, 0x8b, 0xaa, 0xcb, 0x9f, 0x6a, 0x64, 0xd2, 0x27, 0x3a, 0xfb, 0x3d, 0x97, 0x14, 0x2f, 0x9a, 0xd9, 0x88, 0x61, 0x93, 0x7b, 0x40, 0xa9, 0xb7, 0x5f, 0xdf, 0x23, 0x7d, 0xb4, 0x2f, 0x89, 0x85, 0x24, 0x7c, 0x07, 0x22, 0x4f, 0x3b, 0x4a, 0x16, 0x79, 0xf0, 0xdb, 0x9c, 0x7f, 0x4e, 0xab, 0xac, 0x10, 0x9f, 0xef, 0x7a, 0x19, 0x66, 0x2d, 0x40, 0x81, 0x43, 0x97, 0x3d, 0x17, 0x18, 0x99, 0xfd, 0xc9, 0x6a, 0xae, 0xdc, 0x16, 0x0a, 0x77, 0xc6, 0xc6, 0xf4, 0x0e, 0x40, 0xd8, 0x77, 0x98, 0xac, 0xbc, 0x96, 0x19, 0xc8, 0xc2, 0xaf, 0x8d, 0x79, 0xd3, 0x5a, 0x34, 0xc7, 0x5f, 0x94, 0x2d, 0x28, 0x96, 0x1d, 0x46, 0x01, 0xdb, 0x1e, 0x13, 0x6a, 0x75, 0x0f, 0x3d, 0x32, 0x88, 0xd8, 0x1d, 0x22, 0x44, 0x36, 0x89, 0x86, 0x5d, 0x61, 0xee, 0xea, 0xbb, 0xec, 0x9f, 0x22, 0x72, 0xec, 0x6d, 0x8d, 0xf4, 0x5c, 0x78, 0x9a, 0x86, 0xc0, 0x45, 0x8a, 0xf0, 0x09, 0x10, 0x78, 0x79, 0xb9, 0x63, 0x97, 0x12, 0x47, 0xe7, 0xbc, 0xd2, 0xc5, 0x7b, 0x1c, 0xa2, 0xc0, 0x83, 0x56, 0x3a, 0x68, 0x82, 0xb4, 0x4c, 0xf0, 0xec, 0xad, 0xfe, 0x38, 0x35, 0xaf, 0x9e, 0xaa, 0x2e, 0x1c, 0x91, 0x62, 0x91, 0x93, 0x8d, 0x91, 0xda, 0x70, 0x09, 0x23, 0x59, 0x96, 0xf1, 0x9f, 0x86, 0x6c, 0x9d, 0x4f, 0x94, 0x25, 0x04, 0xa2, 0x49, 0x45, 0x2d, 0xce, 0x0c, 0x60, 0xe7, 0xb9, 0x40, 0x25, 0xba, 0x1a, 0xd0, 0x9c, 0x1d, 0xdb, 0x0b, 0xac, 0xe9, 0xc3, 0xb3, 0xe0, 0x0e, 0x51, 0x50, 0x6b, 0x85, 0xeb, 0xca, 0x69, 0x86, 0x38, 0x37, 0x67, 0xfa, 0xca, 0xf2, 0x26, 0x33, 0x00, 0xed, 0x9c, 0xdb, 0x2a, 0x48, 0x3c, 0x2a, 0xef, 0x22, 0x77, 0x5c, 0xec, 0xaf, 0x83, 0x63, 0x9e, 0x8a, 0x5b, 0xd9, 0x82, 0x4d, 0x07, 0x38, 0x7a, 0x60, 0x1d, 0x4d, 0x73, 0x0e, 0x88, 0xea, 0x45, 0xde, 0x88, 0xdc, 0xda, 0x20, 0xfa, 0x1c, 0x93, 0xc6, 0xda, 0x4a, 0xe7, 0x75, 0x06, 0x56, 0x4e, 0xdc, 0x44, 0x81, 0x5d, 0x45, 0x87, 0x84, 0x32, 0x69, 0x6e, 0x0e, 0x12, 0x89, 0x0e, 0x74, 0x51, 0xba, 0xf1, 0xa4, 0x72, 0x81, 0x5e, 0x5c, 0x90, 0x9f, 0xdb, 0x99, 0xfd, 0x2e, 0xf1, 0x51, 0x28, 0xed, 0x2f, 0x64, 0xc4, 0xd9, 0x72, 0xd1, 0x26, 0xfd, 0x63, 0x25, 0xef, 0x8a, 0x40, 0x3a, 0xec, 0x2a, 0xe0, 0x1d, 0x3a, 0x92, 0xf1, 0x50, 0xae, 0x56, 0x85, 0x32, 0x73, 0x02, 0xcd, 0xbb, 0xf5, 0x66, 0x23, 0x6c, 0xfe, 0x31, 0x4e, 0x86, 0x1f, 0xc2, 0x02, 0x7b, 0x52, 0x3a, 0xa7, 0xa2, 0xdd, 0xd6, 0x5b, 0x2e, 0x7a, 0x7c, 0x3a, 0x61, 0xb4, 0x93, 0xdd, 0xfd, 0x94, 0x18, 0x20, 0xfc, 0x7d, 0xee, 0x29, 0x80, 0x55, 0x76, 0xa6, 0x0d, 0xe5, 0x60, 0x55, 0xf6, 0x83, 0xc1, 0xca, 0x15, 0xee, 0x65, 0x6d, 0xbf, 0x79, 0x66, 0xc2, 0xf7, 0x6c, 0xfd, 0xed, 0xe2, 0xa7, 0x99, 0x75, 0x7c, 0x88, 0x2e, 0x48, 0x88, 0x0f, 0xd0, 0xff, 0xcd, 0x40, 0x80, 0x64, 0x7f, 0xc9, 0x46, 0x31, 0xfc, 0xe5, 0x80, 0x1b, 0xb9, 0x80, 0x79, 0x0f, 0x7b, 0x9c, 0x3d, 0xbc, 0xca, 0xf3, 0xac, 0x51, 0xa2, 0xde, 0xce, 0x88, 0x6d, 0x75, 0x66, 0xe3, 0x2e, 0xf8, 0xca, 0x35, 0xff, 0x6e, 0xf1, 0x65, 0xbd, 0x8b, 0xce, 0x6f, 0x02, 0xd7, 0xdc, 0xab, 0x53, 0x0d, 0xfb, 0x52, 0x9b, 0xc1, 0x7a, 0x3e, 0xd8, 0x46, 0x75, 0xf1, 0x15, 0xcf, 0x61, 0xd9, 0x98, 0xd4, 0xe5, 0xd3, 0x5c, 0xb8, 0xeb, 0xed, 0xc2, 0xa8, 0xf8, 0x70, 0x83, 0xc6, 0xb8, 0x1e, 0xe9, 0x87, 0xde, 0xb8, 0x3f, 0x59, 0x2b, 0xc3, 0x86, 0x8a, 0xcb, 0x8c, 0x69, 0x65, 0xe8, 0x6a, 0x73, 0x9e, 0x7a, 0x43, 0x80, 0xf0, 0x5c, 0x51, 0x71, 0x04, 0xa5, 0x26, 0x24, 0x95, 0x35, 0xee, 0xa4, 0xd2, 0x8e, 0xf5, 0x9c, 0x03, 0xe6, 0x69, 0x12, 0x70, 0x7a, 0x60, 0x51, 0x7e, 0x24, 0x1c, 0x27, 0x1c, 0x30, 0x8e, 0x51, 0x5d, 0x6c, 0x1a, 0x34, 0x66, 0x7e, 0x9a, 0xce, 0x8b, 0x7a, 0xa5, 0xeb, 0xb5, 0xb4, 0x11, 0x9c, 0x07, 0xd3, 0xb6, 0xe5, 0xc1, 0x27, 0x75, 0xb6, 0x64, 0x3d, 0x7a, 0x1c, 0x17, 0xb0, 0xbd, 0xb9, 0x49, 0x41, 0xcf, 0x72, 0x98, 0x2a, 0xd3, 0x67, 0xf1, 0xb0, 0xca, 0x28, 0xf9 ],
+const [ 0x38, 0x32, 0x42, 0xc7, 0x09, 0xfe, 0x5f, 0x2c, 0xe7, 0x82, 0xbf, 0x8c, 0x83, 0xb6, 0x45, 0xd1, 0x71, 0xf2, 0xbd, 0x23, 0x8a, 0xbc, 0x65, 0x5d, 0x8f, 0xdf, 0xac, 0xbd, 0x0f, 0xbd, 0x39, 0xdf, 0x8a, 0xe5, 0x2f, 0xec, 0xd6, 0xe8, 0xb0, 0x0f, 0xc2, 0x69, 0xa0, 0x28, 0xfa, 0x74, 0xab, 0xc5, 0x2a, 0x11, 0x89, 0x4e, 0x66, 0x18, 0x80, 0x7f, 0xca, 0x46, 0x2b, 0x1b, 0x5d, 0x91, 0x7b, 0xdf, 0x3b, 0xb9, 0xfb, 0xb5, 0xf4, 0x20, 0x58, 0x2b, 0x2f, 0xdb, 0x20, 0x23, 0x93, 0x09, 0xca, 0xcc, 0xe7, 0x63, 0xf7, 0xd1, 0x77, 0x15, 0xf7, 0xd0, 0xba, 0xcd, 0x8f, 0x0d, 0x33, 0x11, 0xf9, 0x68, 0x95, 0xd5, 0x2d, 0x8c, 0x2a, 0x4d, 0x5f, 0x6a, 0x75, 0x00, 0xc9, 0xe6, 0x17, 0x1e, 0xaa, 0xcf, 0xef, 0x13, 0x8f, 0x15, 0x85, 0x5c, 0xd1, 0x36, 0xa9, 0x99, 0x5f, 0xfa, 0x57, 0xe4, 0xbd, 0x60, 0xde, 0x62, 0x4d, 0xd8, 0x41, 0x17, 0xce, 0xb2, 0xde, 0xff, 0x22, 0xd7, 0x4d, 0x5a, 0x54, 0xb7, 0x8b, 0x47, 0xd9, 0x82, 0x58, 0x94, 0x16, 0x9b, 0xdd, 0xd5, 0x23, 0x4a, 0x92, 0xb3, 0xcf, 0xb1, 0x5f, 0x87, 0xe4, 0x01, 0x02, 0x28, 0xac, 0xed, 0xb0, 0x00, 0xb3, 0x5f, 0xff, 0x66, 0xcf, 0x6a, 0x03, 0x28, 0x5e, 0x81, 0xb7, 0x66, 0xcf, 0xe6, 0x9f, 0xa7, 0x64, 0x64, 0xac, 0x26, 0x35, 0x41, 0x60, 0x6d, 0x79, 0x6f, 0x32, 0x25, 0x01, 0x02, 0x34, 0x2d, 0x05, 0xe7, 0xf3, 0xe9, 0x23, 0xd2, 0x9f, 0xdd, 0xa5, 0x78, 0x6c, 0x7a, 0x03, 0xff, 0x37, 0x37, 0xa8, 0xb2, 0x6d, 0xe4, 0xf9, 0xfa, 0x29, 0x3b, 0x94, 0x89, 0x9c, 0xb9, 0xd5, 0xd9, 0xb2, 0xac, 0x9f, 0xd5, 0xf2, 0x8c, 0x59, 0xd6, 0xa7, 0x8e, 0x36, 0xd0, 0x3d, 0x77, 0xba, 0xce, 0xed, 0xae, 0x7a, 0x9b, 0x9d, 0x96, 0x23, 0xc2, 0x01, 0x1a, 0xbd, 0xb9, 0x07, 0x8a, 0x31, 0x5a, 0x72, 0xa5, 0x09, 0x92, 0xc4, 0xf7, 0x78, 0x5d, 0x62, 0x65, 0x9a, 0xf2, 0xf3, 0x06, 0xfc, 0x3a, 0x09, 0x34, 0x5f, 0x87, 0x03, 0xe3, 0xb9, 0x83, 0x32, 0x32, 0x7d, 0x67, 0x3a, 0x40, 0x1c, 0x6d, 0xbb, 0x41, 0xcc, 0x87, 0x31, 0xd1, 0x88, 0x51, 0x19, 0x87, 0x58, 0x44, 0x56, 0xce, 0xd2, 0x2d, 0xd2, 0xf0, 0xe1, 0xde, 0x68, 0x74, 0xc5, 0x24, 0x02, 0xaa, 0x5b, 0xf9, 0xfe, 0x84, 0x9f, 0xfa, 0xd7, 0xa7, 0x6f, 0x1b, 0x01, 0xc2, 0x92, 0x99, 0x14, 0x1f, 0xf8, 0x30, 0x2d, 0x78, 0x43, 0x8f, 0x91, 0x0b, 0x87, 0x09, 0x94, 0xf0, 0x4e, 0x8d, 0xba, 0xab, 0xe0, 0xd8, 0x1b, 0xfe, 0xc1, 0xe9, 0x0c, 0x01, 0x7a, 0xb5, 0xfb, 0x74, 0x9c, 0x1d, 0x9b, 0x53, 0x03, 0x1d, 0x42, 0xab, 0x58, 0x46, 0x8f, 0xad, 0xd9, 0x6e, 0x4f, 0x00, 0x5d, 0xa6, 0xa1, 0x5c, 0x92, 0x6c, 0x59, 0x55, 0x8a, 0x22, 0xa3, 0x74, 0x76, 0xbf, 0xe9, 0x8c, 0xb1, 0xc5, 0xf6, 0x4b, 0x00, 0x73, 0x5b, 0x10, 0x18, 0x3b, 0x11, 0xfc, 0x60, 0x76, 0x61, 0x4c, 0xf9, 0x57, 0x01, 0xe6, 0xfc, 0x1d, 0x80, 0x31, 0x02, 0x8d, 0xe3, 0x2a, 0xea, 0xa0, 0x91, 0xb5, 0xd6, 0x79, 0x6c, 0x30, 0x77, 0x99, 0x41, 0x4e, 0x8b, 0x56, 0x62, 0x23, 0xa3, 0x89, 0x91, 0x7b, 0x2a, 0x88, 0x20, 0x70, 0xa3, 0x54, 0x57, 0x3c, 0x32, 0x13, 0x16, 0x4b, 0x5e, 0xc0, 0xbb, 0x95, 0x15, 0x21, 0x46, 0x2a, 0xf0, 0xf9, 0xbc, 0x0e, 0xb9, 0x80, 0xc9, 0x48, 0x2b, 0x10, 0xa8, 0x36, 0xf8, 0x21, 0x48, 0x23, 0x11, 0x77, 0xa7, 0x1b, 0x21, 0x9a, 0x82, 0xfe, 0x5a, 0x87, 0x31, 0xd4, 0x75, 0xa5, 0xcd, 0x60, 0xf4, 0xfa, 0x93, 0xf8, 0xab, 0x9f, 0x8d, 0x94, 0x7e, 0x71, 0x6f, 0x24, 0x6c, 0x0a, 0xbf, 0x27, 0xcd, 0xf0, 0x38, 0x79, 0xd7, 0x0b, 0x71, 0x6c, 0x67, 0x5d, 0xba, 0x1b, 0xff, 0xed, 0x46, 0xfb, 0x0a, 0x04, 0x90, 0xb3, 0x68, 0x9c, 0xf7, 0x2e, 0x26, 0x16, 0xab, 0xee, 0x8d, 0x2b, 0xcd, 0xa3, 0x5f, 0x25, 0xd2, 0xfc, 0x5d, 0x4f, 0x29, 0xbd, 0x0c, 0xaa, 0x1d, 0x12, 0xb9, 0xe1, 0xfc, 0x22, 0xbb, 0x7f, 0x79, 0xe8, 0xf8, 0x60, 0x4f, 0x3e, 0xab, 0x65, 0x27, 0x3b, 0x64, 0x6c, 0xbc, 0xbf, 0x50, 0x80, 0x3d, 0x4c, 0xba, 0x4c, 0xf3, 0x18, 0xd2, 0xd6, 0x23, 0x60, 0xad, 0x6a, 0x36, 0xfe, 0x8e, 0xd3, 0x17, 0x3e, 0x64, 0xd2, 0xdd, 0xee, 0x93, 0xc8, 0xaa, 0xb4, 0xf7, 0xb6, 0xd2, 0xa5, 0x26, 0x67, 0x40, 0x12, 0xf6, 0xec, 0x16, 0xa5, 0x40, 0x49, 0x94, 0xad, 0xe3, 0x6e, 0x3b, 0xb7, 0x0b, 0x69, 0x32, 0x5e, 0xb3, 0xd9, 0xe8, 0x64, 0x68, 0xa6, 0xfb, 0x01, 0x50, 0xef, 0x59, 0x7a, 0x6c, 0x44, 0xa5, 0xf6, 0x1a, 0x16, 0xdc, 0x8e, 0xde, 0x6b, 0x38, 0xa3, 0x61, 0xd6, 0x54, 0x74, 0xba, 0xa7, 0x92, 0xef, 0xed, 0x5f, 0xba, 0xc8, 0xb1, 0x67, 0xe3, 0xc9, 0x77, 0x01, 0x97, 0x69, 0xa7, 0x7e, 0x32, 0x9f, 0x2d, 0xb2, 0x8b, 0xf8, 0x34, 0xa5, 0xd6, 0xe8, 0x31, 0x8b, 0xc9, 0x5d, 0x24, 0xf6, 0xfe, 0x9a, 0x1b, 0x4b, 0x99, 0x43, 0xf7, 0x72, 0x2a, 0xb4, 0x72, 0xd2, 0xd5, 0x97, 0x61, 0x7d, 0xb0, 0xb6, 0x37, 0xa7, 0x6c, 0x0d, 0xcb, 0x5d, 0x38, 0x24, 0x5b, 0x74, 0xe2, 0x9c, 0xd0, 0xbf, 0x3f, 0x07, 0x43, 0x85, 0xce, 0xfd, 0xc1, 0x31, 0x98, 0x6c, 0x4b, 0x4c, 0x5a, 0x2f, 0x21, 0xa9, 0xe6, 0xe2, 0x41, 0xdf, 0xc7, 0xf5, 0x2a, 0xfc, 0x24, 0x00, 0xe5, 0x78, 0xe7, 0x56, 0x46, 0x68, 0x1d, 0xdd, 0x70, 0xf4, 0xa0, 0x1d, 0x97, 0x0b, 0xf4, 0x96, 0x0a, 0x56, 0x70, 0x57, 0x70, 0x6a, 0x9e, 0xcc, 0x51, 0x41, 0xe4, 0xd8, 0xd9, 0xeb, 0x63, 0x23, 0xd9, 0x81, 0x1f, 0xb6, 0x0f, 0x5b, 0x60, 0xc5, 0xa7, 0x82, 0x59, 0xcb, 0x01, 0x68, 0x08, 0xdd, 0xb5, 0xd7, 0x5d, 0x37, 0xd5, 0x28, 0x9e, 0x1c, 0x72, 0xb5, 0x0a, 0xdd, 0x61, 0x91, 0xbd, 0x37, 0x3e, 0x76, 0xd3, 0xe1, 0xb2, 0xfe, 0xd0, 0x66, 0xf2, 0x16, 0x40, 0x31, 0x88, 0xb0, 0x9a, 0xe6, 0x56, 0xb9, 0x6a, 0xf9, 0xd8, 0x4b, 0xaf, 0x79, 0xa9, 0x23, 0x82, 0x2c, 0x49, 0x55, 0xf9, 0xe1, 0x1d, 0x3e, 0x4b, 0x02, 0xb7, 0xbb, 0x35, 0x69, 0x58, 0x98, 0x9c, 0x74, 0xb3, 0x4c, 0x73, 0x5c, 0xf4, 0xe3, 0xdf, 0xc2, 0x01, 0x3b, 0x99, 0x8b, 0x00, 0x73, 0x95, 0xee, 0x19, 0xa1, 0xe1, 0xcb, 0x7d, 0xc3, 0xcf, 0x3f, 0xa7, 0xf9, 0x56, 0x75, 0xe2, 0xf1, 0xb6, 0xbf, 0x0b, 0xa2, 0x5b, 0xe5, 0x98, 0x3d, 0x04, 0xbd, 0xd9, 0x60, 0x24, 0xfb, 0x7e, 0x8d, 0x88, 0x4b, 0x5a, 0xdc, 0x3b, 0x9d, 0x66, 0xec, 0xa7, 0xc0, 0x09, 0x1f, 0xfc, 0x33, 0x96, 0x07, 0xd6, 0x38, 0x17, 0x1b, 0x1a, 0x29, 0x49, 0xaf, 0x20, 0x0f, 0xe7, 0x23, 0x18, 0x71, 0x2b, 0x5a, 0xa6, 0x6a, 0x93, 0x6d, 0xd0, 0xfe, 0xe1, 0xa1, 0x1a, 0xae, 0x65, 0x97, 0xef, 0x4a, 0x7e, 0xc3, 0x43, 0x07, 0x5f, 0x1f, 0x77, 0xd2, 0x0f, 0x21, 0x7d, 0xe3, 0xb3, 0xea, 0x3c, 0x94, 0x10, 0xc0, 0x36, 0x74, 0x4c, 0xbe, 0x68, 0x97, 0xf4, 0xca, 0x71, 0x31, 0x44, 0xc8, 0xf7, 0x63, 0xa2, 0x0d, 0x47, 0x55, 0x6b, 0x17, 0x3b, 0x85, 0xf2, 0x7b, 0x61, 0x5f, 0xc6, 0x1e, 0x59, 0x0d, 0x34, 0xa8, 0x7f, 0x90, 0x0d, 0x36, 0xcb, 0x10, 0xaa, 0x50, 0xf5, 0x70, 0x2c, 0x1a, 0xdc, 0x26, 0x08, 0xce, 0x28, 0x4a, 0xc4, 0x69, 0x2e, 0xec, 0xfb, 0xa5, 0x15, 0xab, 0xa7, 0x28, 0x37, 0x83, 0xa0, 0xfb, 0xca, 0xe7, 0x5f, 0x3d, 0xc0, 0x10, 0x08, 0x19, 0xeb, 0x94, 0xa8, 0xf5, 0x65, 0x3a, 0xba, 0xec, 0x2f, 0x0d, 0xf1, 0x7f, 0x18, 0xaf, 0x31, 0x87, 0xe1, 0xf0, 0xde, 0x6e, 0x9e, 0x9f, 0x5a, 0x9f, 0x5f, 0xa1, 0xc9, 0x3b, 0x10, 0x3f, 0x18, 0x0e, 0x9e, 0xc4, 0x3d, 0xc1, 0x5c, 0x48, 0xc0, 0x51, 0xa4, 0xc7, 0x7a, 0xc0, 0xc1, 0x76, 0x9d, 0x0a, 0x0c, 0x56, 0xf4, 0x5a, 0x56, 0x09, 0x6c, 0x7e, 0x86, 0xe5, 0xd4, 0x98, 0x83, 0x47, 0xe1, 0x17, 0x55, 0x29, 0x75, 0xe6, 0x87, 0xf7, 0x20, 0xe3, 0xcf, 0x9f, 0xe8, 0x93, 0xf1, 0xe8, 0x45, 0x14, 0xe0, 0x04, 0x70, 0x53, 0x26, 0x68, 0xdd, 0x7f, 0x87, 0xdb, 0x06, 0xbd, 0xe1, 0xcd, 0x6b, 0x1d, 0x57, 0xeb, 0xd7, 0xcc, 0xae, 0xf0, 0xe4, 0x8c, 0xf7, 0xbe, 0xc1, 0x62, 0x6f, 0xad, 0x33, 0x8e, 0xa3, 0x23, 0xda, 0xc0, 0xd8, 0x65, 0xb6, 0x89, 0xa9, 0xac, 0xea, 0x10, 0xf2, 0x7c, 0xbf, 0x06, 0xed, 0x31, 0xeb, 0xdc, 0x9b, 0xdb, 0x14, 0x33, 0x66, 0x4b, 0x90, 0x94, 0x04, 0x6e, 0x6f, 0x61, 0x9e, 0xda, 0xbb, 0x0b, 0x32, 0xa7, 0xfe, 0x86, 0x36, 0x80, 0x05, 0xfa, 0x7e, 0xf9, 0xe4, 0xbc, 0x5f, 0x23, 0x3a, 0x7c, 0x15, 0x5f, 0xb6, 0xc0, 0x62, 0x6f, 0xda, 0x91, 0x78, 0xd3, 0xff, 0x73, 0x19, 0x52, 0x9a, 0x9b, 0xfd, 0xd7, 0xbd, 0x5d, 0x74, 0x7e, 0xe1, 0xe4, 0x4c, 0xef, 0xe2, 0x25, 0xf5, 0xeb, 0x4b, 0x15, 0xe3, 0x24, 0xd4, 0x1a, 0x34, 0x52, 0x29, 0xc0, 0x93, 0x83, 0xed, 0xae, 0x5c, 0xb2, 0xff, 0xd8, 0x00, 0x9c, 0xfc, 0xf6, 0xac, 0xcf, 0x05, 0x34, 0x25, 0x04, 0xc2, 0x2b, 0xf7, 0xae, 0xa6, 0x10, 0xce, 0xd3, 0x75, 0x2b, 0x24, 0x1b, 0x04, 0x8b, 0x1c, 0x27, 0x41, 0xf9, 0xae, 0x23, 0x72, 0x2a, 0x05, 0x9f, 0xc2, 0x39, 0x25, 0x9a, 0xf9, 0x54, 0xd1, 0xe0, 0x8b, 0xb5, 0xac, 0x97, 0xd4, 0xd3, 0x9e, 0x14, 0xa2, 0xda, 0x79, 0xf3, 0xf4, 0x59, 0xdd, 0x66, 0x01, 0x3b, 0x59, 0xcd, 0x7c, 0xf9, 0xd2, 0x87, 0x17, 0x0e, 0x29, 0x08, 0x46, 0xaa, 0x18, 0x2c, 0x45, 0xaa, 0x5d, 0xcb, 0x5c, 0xc8, 0x1b, 0x8e, 0x62, 0x0f, 0x7d, 0x01, 0x80, 0x93, 0x9c, 0xe9, 0x37, 0x5e, 0xa3, 0xd7, 0xa4, 0xad, 0x31, 0xfd, 0x03, 0x5d, 0xfe, 0x41, 0x73, 0xa0, 0xc2, 0x90, 0xf8, 0xf4, 0x52, 0x75, 0xc6, 0x56, 0x0c, 0xea, 0xbd, 0xb2, 0x76, 0x6e, 0x30, 0x9f, 0x22, 0x57, 0xea, 0x49, 0xd5, 0x6a, 0x73, 0xae, 0xe7, 0xa9, 0x8f, 0x0e, 0xed, 0x6c, 0x08, 0x9c, 0x96, 0xb3, 0xad, 0x7a, 0xd3, 0xbb, 0x9b, 0xe4, 0x3b, 0xcf, 0xbb, 0xac, 0xad, 0x61, 0x8c, 0xe6, 0x37, 0x59, 0x23, 0xe4, 0x36, 0xad, 0x70, 0x65, 0xbf, 0x32, 0xc2, 0x09, 0x3e, 0xb2, 0x8d, 0x08, 0x5d, 0x3e, 0x6c, 0x24, 0x28, 0xc5, 0x62, 0xdc, 0x6e, 0xe6, 0x65, 0xe3, 0x6a, 0x03, 0x1d, 0xd0, 0xa2, 0x97, 0xe9, 0x17, 0x10, 0xc9, 0x23, 0x38, 0x80, 0x41, 0xa5, 0x36, 0x39, 0x3a, 0x8b, 0x4b, 0xdf, 0xd8, 0x3b, 0xda, 0x98, 0xbc, 0xa3, 0xa5, 0x6e, 0xd7, 0xc2, 0x40, 0xf5, 0x7b, 0x6a, 0xc6, 0x2d, 0xb8, 0x44, 0xca, 0xa9, 0xe5, 0x14, 0x90, 0xf1, 0x7d, 0x3e, 0x7d, 0x26, 0x2d, 0x8a, 0xcd, 0xe4, 0x2a, 0x24, 0x84, 0x6c, 0xc8, 0xe7, 0xa7, 0x03, 0x49, 0xda, 0xab, 0x95, 0xf2, 0xfb, 0x2e, 0x9e, 0x65, 0x3c, 0xe5, 0x4b, 0x2a, 0xcc, 0xd6, 0xdc, 0x8f, 0x97, 0xc7, 0x4c, 0xb2, 0x10, 0xf6, 0x34, 0xdc, 0x2e, 0x0a, 0xed, 0x10, 0xb4, 0x4a, 0xf4, 0xe4, 0xb6, 0x0d, 0x93, 0x90, 0x59, 0x71, 0xbe, 0x45, 0xda, 0x50, 0x3c, 0xc0, 0xd2, 0x70, 0x07, 0x1e, 0xb8, 0xfa, 0xf4, 0xf2, 0xa7, 0x2e, 0x96, 0x95, 0x61, 0x54, 0x60, 0xbd, 0x95, 0xf6, 0x0b, 0x51, 0x5d, 0x4c, 0x37, 0x7c, 0x0b, 0xf8, 0x55, 0x01, 0x25, 0xf4, 0xc4, 0xce, 0xae, 0xc8, 0x3a, 0xd3, 0xa7, 0x00, 0x66, 0x14, 0xd6, 0xdd, 0xd4, 0xfd, 0xc6, 0x4b, 0x10, 0xf6, 0x0f, 0x13, 0x0e, 0x38, 0xd7, 0x52, 0xc9, 0xdf, 0x99, 0x2a, 0x2b, 0x40, 0x26, 0xb7, 0x2d, 0x7c, 0xe9, 0x44, 0x3f, 0x56, 0x6e, 0xbf, 0xea, 0x41, 0x26, 0x6b, 0xb4, 0xbd, 0x64, 0xd5, 0x44, 0xe4, 0xac, 0x09, 0xc6, 0x40, 0x2d, 0x05, 0x91, 0xe0, 0x8c, 0x6e, 0x07, 0xab, 0xe3, 0x82, 0xbd, 0xf4, 0x0a, 0x4e, 0xdd, 0x4e, 0x15, 0x21, 0xc8, 0xa1, 0x1d, 0x40, 0xff, 0x7d, 0x44, 0xdb, 0x43, 0xaf, 0xf3, 0x40, 0xfb, 0x12, 0x66, 0x4f, 0xd7, 0xa8, 0x6b, 0x2e, 0xb3, 0xe9, 0x66, 0x3e, 0xbe, 0x5b, 0x99, 0x4d, 0xdb, 0x63, 0xa2, 0x0d, 0x47, 0x5b, 0x45, 0xc4, 0x7c, 0xe4, 0x6c, 0x46, 0x56, 0x7e, 0x6c, 0x21, 0x75, 0x56, 0x8a, 0x17, 0xe2, 0x5e, 0xbe, 0xd1, 0xf5, 0xa3, 0xb7, 0xd1, 0x76, 0xdc, 0x1e, 0xa9, 0x02, 0x3e, 0x1f, 0x6a, 0xb0, 0x98, 0x26, 0x60, 0xf5, 0x9b, 0xe6, 0xfc, 0xc5, 0x79, 0xa0, 0x12, 0xfb, 0xb3, 0xa2, 0x45, 0xfb, 0x2b, 0x0e, 0xbf, 0x96, 0x81, 0xdc, 0x25, 0x2e, 0x9c, 0x22, 0xc9, 0x1a, 0x87, 0x93, 0x22, 0x4b, 0x7f, 0x46, 0x7a, 0x30, 0x4a, 0xba, 0xe7, 0xd8, 0xca, 0x16, 0x7c, 0x57, 0xd1, 0xb5, 0xc0, 0x6a, 0x37, 0xe1, 0x5f, 0x5e, 0x2a, 0xdf, 0x20, 0x2d, 0xc6, 0x2d, 0x17, 0xeb, 0xe5, 0x07, 0x1c, 0x60, 0x39, 0x2f, 0x7c, 0xf7, 0x98, 0xee, 0xee, 0xd7, 0x96, 0x56, 0xc8, 0x4f, 0x59, 0xcb, 0x72, 0x77, 0xa9, 0xc2, 0x1b, 0x14, 0x47, 0xc7, 0xac, 0xbd, 0x80, 0xc5, 0xfa, 0x3c, 0x01, 0x82, 0x40, 0x37, 0xed, 0x69, 0xcc, 0x10, 0x2d, 0x8c, 0xf8, 0x09, 0x08, 0xe9, 0x5c, 0xac, 0xf3, 0xec, 0x42, 0x6a, 0xaa, 0x36, 0x5a, 0x82, 0x7f, 0x9d, 0xb0, 0x24, 0xf2, 0x74, 0xda, 0xd6, 0x83, 0x0c, 0x76, 0x18, 0xc4, 0x7a, 0xd4, 0x43, 0xb2, 0x9b, 0xef, 0xb7, 0x45, 0x56, 0xa2, 0x35, 0x46, 0x21, 0x18, 0x8a, 0x61, 0xc7, 0x85, 0x6e, 0x7b, 0x68, 0x13, 0xab, 0x46, 0xc1, 0x20, 0x82, 0x12, 0xad, 0xa6, 0x4a, 0xe6, 0xec, 0xfa, 0x5a, 0xcf, 0x24, 0xba, 0x29, 0x78, 0x25, 0x00, 0xb4, 0xfb, 0x71, 0xdc, 0x20, 0xf7, 0xfc, 0x02, 0xa1, 0xe3, 0x30, 0xbf, 0x9a, 0xa1, 0x34, 0x32, 0x06, 0x56, 0x6e, 0xb8, 0x16, 0x7a, 0x47, 0xa8, 0x1b, 0x2b, 0x2e, 0x41, 0xa7, 0xc7, 0xdf, 0xe0, 0xef, 0xb9, 0xe5, 0x76, 0x74, 0x93, 0x5d, 0x3a, 0xe3, 0x5e, 0xfe, 0x9b, 0x39, 0x2d, 0x56, 0x79, 0x2a, 0xf9, 0x56, 0x94, 0xc4, 0xa8, 0x11, 0x45, 0x50, 0x6f, 0xc1, 0x6c, 0x79, 0x5a, 0x0b, 0xa9, 0xb0, 0x29, 0x84, 0xcf, 0xce, 0x5e, 0x73, 0x95, 0xfb, 0x94, 0xd9, 0x8f, 0xcf, 0x12, 0xae, 0x5d, 0xb8, 0xa0, 0x6e, 0x23, 0x9c, 0x9a, 0xd4, 0x39, 0xbf, 0x42, 0xe5, 0x23, 0xe6, 0x5a, 0x31, 0xc3, 0xbd, 0xf3, 0x56, 0xcd, 0x76, 0x80, 0xc5, 0x7c, 0xb3, 0x2e, 0xc9, 0x83, 0xa6, 0x78, 0xc5, 0x47, 0x76, 0xf5, 0xbd, 0x4b, 0xe5, 0x75, 0x17, 0xeb, 0x31, 0x4d, 0xa3, 0x4e, 0x37, 0xef, 0xda, 0x96, 0xde, 0xbe, 0x63, 0x59, 0xb3, 0x20, 0xdc, 0x55, 0xd1, 0xd4, 0xd6, 0x5f, 0x04, 0x86, 0x21, 0x9d, 0x2e, 0xa0, 0x4b, 0xf5, 0xe9, 0x64, 0x63, 0xc5, 0x6d, 0x38, 0x02, 0xd5, 0xb5, 0x40, 0x8d, 0x8a, 0xdd, 0x32, 0xb4, 0x5c, 0xcf, 0x66, 0x3e, 0x89, 0x1e, 0x2d, 0x09, 0x0b, 0x32, 0x64, 0x4c, 0xc8, 0xa6, 0x49, 0x20, 0x0a, 0xee, 0x8d, 0x3f, 0x2e, 0x3d, 0xaa, 0x0b, 0xa0, 0xa5, 0x76, 0xd2, 0x07, 0x81, 0xf8, 0x50, 0xbc, 0x10, 0x7b, 0x75, 0x81, 0x62, 0xe2, 0x69, 0x70, 0x78, 0x3b, 0xce, 0x31, 0xa7, 0x97, 0x45, 0x70, 0x3d, 0x18, 0x33, 0x8e, 0x67, 0x4b, 0xc5, 0x97, 0x52, 0xb8, 0x31, 0x75, 0x91, 0xb8, 0x3f, 0x63, 0xbf, 0x87, 0x09, 0xa4, 0x65, 0x9a, 0xfe, 0x74, 0x1d, 0x33, 0x2d, 0x3f, 0xf8, 0x32, 0xc1, 0x11, 0x1e, 0x2e, 0xc7, 0x4e, 0xb4, 0xc4, 0x38, 0xa3, 0x03, 0x2f, 0x33, 0x3c, 0xd6, 0x19, 0x8a, 0x37, 0x23, 0xb1, 0x80, 0x59, 0xee, 0xfe, 0xd1, 0x00, 0x6b, 0x73, 0xf3, 0x59, 0x63, 0xc3, 0x9c, 0xd3, 0xd8, 0xf7, 0x84, 0xd4, 0xec, 0xbd, 0x6c, 0xaa, 0xff, 0x03, 0x5f, 0xc4, 0x18, 0xc4, 0x38, 0x22, 0x86, 0x22, 0x64, 0x0a, 0xc7, 0xb6, 0xe9, 0xfd, 0xa8, 0x24, 0xa7, 0xe9, 0xae, 0xf2, 0xde, 0xa0, 0xb5, 0x9a, 0xf1, 0x89, 0xd7, 0xdd, 0x6a, 0x95, 0x8f, 0x5b, 0x3d, 0x75, 0x1e, 0x61, 0x51, 0x0b, 0x2e, 0x02, 0x3c, 0x1e, 0xb6, 0x69, 0x4f, 0x51, 0x1d, 0x6d, 0xd2, 0x56, 0xa2, 0x66, 0x90, 0x5f, 0xfb, 0x3f, 0x97, 0xd5, 0x3c, 0xcd, 0x39, 0x4d, 0xfb, 0x5f, 0x56, 0xb8, 0xb2, 0x97, 0xde, 0xd9, 0x64, 0x78, 0x91, 0xfd, 0x84, 0xbf, 0x09, 0xe6, 0x12, 0x77, 0xfb, 0x08, 0x07, 0xc8, 0xba, 0xf8, 0xf3, 0x10, 0xfc, 0x21, 0xe5, 0x35, 0xe1, 0xb9, 0x8b, 0x39, 0x31, 0xf3, 0x9a, 0x0e, 0xe5, 0x76, 0x70, 0xac, 0xea, 0x0f, 0xf9, 0x62, 0x21, 0xa2, 0xcf, 0x69, 0xaa, 0x67, 0xa5, 0xbf, 0x62, 0x52, 0xe5, 0x32, 0xaa, 0xd3, 0x98, 0xbb, 0x6b, 0xc0, 0x87, 0x0e, 0x57, 0x90, 0x9f, 0x6f, 0x71, 0xc9, 0x9a, 0xc7, 0xcf, 0xbb, 0xdc, 0xf7, 0x9e, 0x6f, 0x9b, 0x6c, 0x68, 0xdb, 0x43, 0xf4, 0x92, 0x57, 0x19, 0xd0, 0x29, 0x55, 0x1e, 0x0a, 0xde, 0x4c, 0x36, 0x09, 0x4e, 0xf5, 0x89, 0x62, 0x87, 0xba, 0x2a, 0xf1, 0xc8, 0x6c, 0xf7, 0x29, 0x89, 0x34, 0xc0, 0xa8, 0xbb, 0xcc, 0xab, 0x0e, 0x51, 0xee, 0xd6, 0x10, 0xff, 0x0d, 0x3f, 0xc8, 0x42, 0x44, 0xe1, 0x4f, 0xa0, 0x8c, 0x20, 0x8e, 0x31, 0x31, 0x67, 0x51, 0x5e, 0x87, 0x10, 0x9d, 0xe9, 0xd9, 0x84, 0x44, 0x2e, 0xa2, 0xa3, 0xb6, 0xa8, 0xff, 0x66, 0x1a, 0xb6, 0x65, 0xc2, 0x9e, 0x9f, 0x8f, 0xd0, 0x0b, 0xd4, 0xbb, 0x2c, 0x9c, 0x76, 0x16, 0x9b, 0x10, 0x18, 0x75, 0xf0, 0xfe, 0xc6, 0x45, 0x30, 0x69, 0x46, 0xc5, 0xf4, 0x94, 0x9d, 0x73, 0x0f, 0x17, 0xd6, 0xc3, 0x71, 0x33, 0xfe, 0x17, 0x4b, 0x63, 0x73, 0xec, 0x74, 0x33, 0x5f, 0x51, 0x0c, 0x55, 0x7f, 0x9e, 0x5f, 0xf2, 0x29, 0x62, 0x0b, 0x3e, 0x8d, 0x9d, 0x66, 0x4f, 0x3b, 0x30, 0x1a, 0x2f, 0xe5, 0x91, 0x12, 0x30, 0x66, 0xc3, 0x9a, 0x7f, 0x04, 0x86, 0xc1, 0xfc, 0xf2, 0xcb, 0x02, 0x49, 0x19, 0x6a, 0x24, 0x21, 0x19, 0x17, 0x5f, 0xec, 0x8a, 0x93, 0xc0, 0x90, 0x87, 0x1f, 0xcf, 0x89, 0x6d, 0x36, 0x6e, 0x3c, 0xe0, 0x7b, 0x04, 0x88, 0x0f, 0xf1, 0xdb, 0x9f, 0x39, 0x6a, 0xc7, 0x14, 0x71, 0x42, 0x09, 0x35, 0x9e, 0x4c, 0x72, 0x9a, 0xc5, 0x0d, 0xcc, 0xfe, 0x8b, 0x28, 0x75, 0x4e, 0xf5, 0x1a, 0x4d, 0x00, 0x73, 0x27, 0xd2, 0xa6, 0x1d, 0x94, 0x8a, 0xc3, 0x3c, 0x17, 0xa2, 0xdd, 0x0c, 0x8c, 0xd4, 0xd3, 0xc0, 0xe9, 0x8e, 0x71, 0xc7, 0x74, 0x50, 0x42, 0x4e, 0x34, 0x55, 0xa5, 0x06, 0xa5, 0x77, 0x23, 0x27, 0xb0, 0x4d, 0x00, 0xb5, 0xd9, 0x96, 0x10, 0x02, 0xbb, 0xda, 0xcc, 0x74, 0xb1, 0x4e, 0xa5, 0x88, 0xd7, 0xf9, 0x99, 0x17, 0x31, 0x15, 0x03, 0xd8, 0x29, 0xb8, 0xb7, 0x27, 0x3f, 0xb3, 0x4e, 0x04, 0xfc, 0xba, 0xbf, 0x5f, 0x27, 0xc6, 0x30, 0x93, 0x3c, 0xb8, 0x0b, 0x30, 0x1a, 0x3f, 0x53, 0xfd, 0xfc, 0xfb, 0x39, 0x3d, 0xaa, 0xe3, 0xea, 0x32, 0xf1, 0xe4, 0xac, 0xe0, 0x50, 0xca, 0x29, 0x13, 0xf4, 0x64, 0x0a, 0xa3, 0xe7, 0xe3, 0xc8, 0xf7, 0x84, 0x84, 0xbf, 0xc8, 0x2e, 0x6f, 0x85, 0x27, 0x41, 0xde, 0x79, 0xc2, 0x49, 0x81, 0x9f, 0x63, 0x72, 0x22, 0xab, 0xb9, 0x40, 0x85, 0x5b, 0x5b, 0x80, 0x92, 0x0a, 0x0a, 0x7f, 0xb5, 0x83, 0x36, 0x79, 0x86, 0x13, 0xc4, 0x54, 0xa5, 0xe2, 0x0f, 0x8e, 0xe8, 0x82, 0x2d, 0x75, 0xb9, 0xc9, 0x73, 0x96, 0xb9, 0xdc, 0x3b, 0x77, 0xaa, 0x8d, 0xe4, 0x89, 0x8b, 0xe7, 0x1b, 0x58, 0x04, 0x06, 0x59, 0x05, 0x05, 0x2d, 0xad, 0xf6, 0xab, 0x12, 0xbc, 0xcc, 0x63, 0x7c, 0x06, 0x95, 0x51, 0x10, 0x6b, 0x43, 0xf3, 0x68, 0xed, 0x5e, 0x01, 0x66, 0xb7, 0xf5, 0x98, 0xc8, 0x5f, 0xda, 0x98, 0xfc, 0x68, 0x0f, 0x4b, 0x35, 0x0b, 0x7b, 0x47, 0xbe, 0x36, 0xe1, 0x95, 0x8f, 0xd6, 0x13, 0x12, 0x1e, 0x52, 0x63, 0x16, 0x77, 0x57, 0x5b, 0x54, 0x8f, 0xdb, 0xae, 0x01, 0xd5, 0x5c, 0x6d, 0x39, 0x0b, 0x69, 0x7e, 0x9e, 0x54, 0x64, 0x4b, 0x42, 0x8e, 0x86, 0xb7, 0xc7, 0xe1, 0x23, 0x56, 0xc4, 0x98, 0x30, 0xdd, 0x6b, 0x30, 0x02, 0xd7, 0x69, 0xaf, 0x58, 0x9a, 0x0e, 0x38, 0x9c, 0x7a, 0xae, 0xdb, 0x66, 0x3c, 0x47, 0xb1, 0x42, 0xce, 0x63, 0x29, 0xb3, 0x35, 0x40, 0x9d, 0x78, 0xc6, 0x2f, 0x29, 0x0d, 0x99, 0x3a, 0xbc, 0x75, 0x3b, 0x09, 0x6f, 0x37, 0xa3, 0x07, 0x16, 0xa7, 0x67, 0xc0, 0x15, 0x66, 0x30, 0x8d, 0x76, 0x2c, 0x6c, 0x74, 0x38, 0xc5, 0x42, 0x4a, 0xe9, 0x5a, 0xcb, 0x1a, 0x77, 0xf2, 0x7f, 0xcb, 0x43, 0x38, 0xed, 0xfc, 0x77, 0x7f, 0xb0, 0x33, 0x9a, 0x03, 0x9e, 0x37, 0x61, 0x72, 0x42, 0xba, 0xc8, 0xab, 0x8d, 0x3b, 0x62, 0xc5, 0xc8, 0x2b, 0xed, 0x53, 0xcd, 0x4f, 0x2a, 0xe6, 0x77, 0x65, 0xec, 0xd4, 0x57, 0x0a, 0x6e, 0x38, 0xa8, 0xdb, 0xe9, 0x3a, 0x85, 0xdb, 0x66, 0x91, 0x5a, 0x15, 0xd1, 0x46, 0x99, 0x82, 0x50, 0xba, 0xae, 0x2c, 0xd3, 0xea, 0x34, 0x94, 0xeb, 0xf2, 0x69, 0x51, 0xdf, 0xd0, 0xdf, 0xfb, 0xfd, 0x6b, 0x75, 0x47, 0x2e, 0xd4, 0x86, 0x73, 0xcd, 0xcb, 0x60, 0xe5, 0xb9, 0x85, 0xf8, 0x0f, 0xa9, 0xac, 0xdc, 0x95, 0xc0, 0xa8, 0x68, 0xb2, 0x62, 0x1d, 0x3d, 0xd8, 0x45, 0xb4, 0xef, 0x96, 0xcb, 0x1f, 0xfe, 0xbf, 0x8f, 0x57, 0x08, 0xc9, 0x3d, 0x28, 0x3c, 0x73, 0xa8, 0xf0, 0x12, 0xaa, 0x16, 0xa4, 0x39, 0xae, 0xde, 0x13, 0xd1, 0x71, 0x36, 0x6f, 0xdb, 0x40, 0x46, 0x09, 0xee, 0xa4, 0x81, 0x5c, 0x2b, 0x8b, 0x34, 0x4d, 0x73, 0xa3, 0x5f, 0xb1, 0xd7, 0x07, 0xc5, 0x10, 0x4f, 0x1d, 0x3f, 0xa8, 0xaf, 0xbe, 0x55, 0xb5, 0xd8, 0x98, 0x0f, 0xf0, 0x2b, 0xd1, 0x09, 0x56, 0x44, 0xed, 0xc6, 0x2a, 0xe4, 0xf2, 0x46, 0x3d, 0x2e, 0xca, 0xdb, 0x6d, 0x17, 0xe8, 0x38, 0x6c, 0x18, 0x2f, 0xcb, 0xc3, 0x25, 0x0f, 0x4d, 0x16, 0xe3, 0xf1, 0x97, 0xa9, 0x16, 0xd5, 0xb7, 0x23, 0x58, 0x39, 0x43, 0x92, 0x11, 0x3d, 0xed, 0xb0, 0xa3, 0x06, 0x58, 0x65, 0xe5, 0x60, 0x2a, 0x8c, 0xd3, 0xa7, 0x63, 0xfa, 0x84, 0xe7, 0xed, 0xbc, 0x5c, 0x42, 0x73, 0xa1, 0x82, 0x92, 0x77, 0xf9, 0x94, 0x50, 0x9f, 0x9b, 0x9a, 0xb5, 0x50, 0x2d, 0x39, 0x1e, 0x7e, 0x9f, 0x2a, 0xb5, 0xc3, 0xf9, 0xea, 0x4e, 0xae, 0x57, 0xb2, 0x8f, 0x5d, 0x31, 0xa9, 0x54, 0x4e, 0xe0, 0x59, 0x51, 0x72, 0x5e, 0x5f, 0xfa, 0x83, 0x4e, 0x67, 0x9f, 0x98, 0x3c, 0x58, 0xdc, 0xf7, 0x25, 0xcc, 0x30, 0x2a, 0x3a, 0xc3, 0xec, 0x55, 0xe1, 0x98, 0x4f, 0xc6, 0xfd, 0x34, 0xef, 0xce, 0x6f, 0x81, 0x5a, 0xcf, 0xdd, 0x21, 0xfe, 0x97, 0xb1, 0x61, 0x46, 0xec, 0x65, 0x68, 0x06, 0x68, 0xff, 0xb5, 0x19, 0x88, 0xd7, 0xc8, 0x49, 0xff, 0xa0, 0x1e, 0x6e, 0x50, 0xa6, 0x63, 0xda, 0x9b, 0x55, 0xe4, 0xf5, 0xb7, 0xfb, 0x43, 0x25, 0x82, 0xcf, 0x6e, 0xf1, 0x75, 0x31, 0xd1, 0x65, 0x7c, 0x33, 0xcb, 0xb8, 0x04, 0x59, 0x5f, 0x2c, 0x55, 0x9d, 0x2d, 0x36, 0x22, 0xb6, 0xa0, 0xdf, 0x5e, 0x9a, 0x68, 0x6a, 0x52, 0x42, 0x2b, 0x37, 0xed, 0xad, 0x77, 0xe7, 0x5b, 0x27, 0xfc, 0xc1, 0xd9, 0xcb, 0xf8, 0x54, 0xc7, 0x47, 0xf2, 0x5e, 0xfe, 0xdf, 0xab, 0xed, 0x65, 0xb5, 0x52, 0xc4, 0xbf, 0x47, 0xf7, 0x00, 0xc7, 0x39, 0x42, 0xfc, 0x7f, 0x55, 0x65, 0x71, 0xc5, 0xd0, 0x4f, 0xe2, 0x27, 0xce, 0x22, 0x37, 0xf8, 0x29, 0xe8, 0xa8, 0xa3, 0x6e, 0x82, 0xdc, 0x40, 0x29, 0xe0, 0x52, 0x65, 0x63, 0x78, 0x01, 0x3f, 0x68, 0xf0, 0x3b, 0xe1, 0xce, 0x1e, 0xd7, 0xdb, 0xb2, 0x33, 0x8f, 0x0f, 0x45, 0x33, 0xa7, 0xc0, 0x88, 0xa9, 0xd0, 0xec, 0x53, 0x98, 0x4b, 0xdc, 0x9c, 0xb4, 0x51, 0xf9, 0xf6, 0xd2, 0xb3, 0xe1, 0x58, 0x9e, 0xbe, 0xba, 0x20, 0x8c, 0x61, 0xc7, 0x57, 0x11, 0x92, 0x38, 0x37, 0x12, 0xed, 0x47, 0xea, 0x9d, 0x9e, 0x80, 0x95, 0xd7, 0x82, 0x60, 0x95, 0x35, 0x89, 0x22, 0x09, 0xef, 0x5f, 0xd6, 0x90, 0xb2, 0x4b, 0xb3, 0x54, 0x96, 0x57, 0xae, 0x47, 0x4f, 0xb1, 0x4c, 0xac, 0xa7, 0x51, 0xb4, 0xda, 0x2c, 0xdc, 0x08, 0x3c, 0x25, 0xc8, 0xf5, 0x9d, 0xcb, 0xc2, 0x89, 0xa2, 0xb6, 0x4c, 0x45, 0x98, 0x96, 0xab, 0x74, 0x70, 0x23, 0x00, 0xbb, 0x08, 0x57, 0xb5, 0xf0, 0xad, 0xda, 0x1a, 0x2f, 0xdd, 0xbe, 0x50, 0x2b, 0x51, 0x6c, 0x67, 0xc3, 0x3b, 0xde, 0xc3, 0xd6, 0xcc, 0x0f, 0xc4, 0x57, 0xf9, 0xb0, 0xa6, 0xa4, 0x7f, 0x1d, 0xa5, 0x13, 0x24, 0x8f, 0x65, 0xce, 0x40, 0x93, 0x92, 0xe2, 0x7d, 0xbb, 0xc3, 0x92, 0xdb, 0x93, 0xa5, 0xf1, 0xf7, 0xd6, 0x55, 0xb0, 0x8c, 0xe2, 0x0d, 0x34, 0x3a, 0x6a, 0x03, 0xeb, 0x86, 0x6b, 0x8e, 0xe1, 0x23, 0x61, 0x8b, 0x8e, 0x70, 0xba, 0xff, 0xf3, 0x41, 0x8b, 0xfe, 0xe5, 0xe2, 0x82, 0xcb, 0xa8, 0x59, 0x1c, 0x40, 0xbf, 0xec, 0x17, 0x70, 0x03, 0xe3, 0x2b, 0x8c, 0xf3, 0x8f, 0xf5, 0x03, 0x4b, 0x8b, 0x34, 0xed, 0xd8, 0x42, 0x37, 0xaa, 0x8a, 0xb1, 0x96, 0xc6, 0xcb, 0x6f, 0x21, 0x20, 0x0f, 0xea, 0x16, 0x4c, 0xac, 0xf3, 0x97, 0x35, 0xed, 0x7d, 0x5a, 0x07, 0x61, 0xa1, 0xa3, 0x4c, 0x79, 0xe6, 0x6f, 0x55, 0x52, 0xc0, 0xf2, 0xdb, 0xd0, 0x56, 0x44, 0xe6, 0xec, 0x88, 0x58, 0xee, 0x4f, 0x31, 0x2d, 0x40, 0x1f, 0xa9, 0x48, 0xa4, 0x19, 0x8f, 0x61, 0x3d, 0xe0, 0xc5, 0x5d, 0xb0, 0x94, 0xbb, 0x7c, 0x89, 0xa7, 0xf1, 0xd4, 0xda, 0xec, 0xb7, 0xfe, 0x24, 0xf1, 0x38, 0x0f, 0x7b, 0x8f, 0xb6, 0xc9, 0xe6, 0xbf, 0x17, 0x13, 0x05, 0xaf, 0xa1, 0xa7, 0xf6, 0x16, 0x02, 0x0b, 0x78, 0xc4, 0x93, 0xc2, 0x51, 0x7d, 0xdd, 0xc3, 0xee, 0x07, 0x5d, 0x2a, 0x4a, 0x82, 0x84, 0x2e, 0x11, 0xf8, 0x02, 0x53, 0x04, 0x35, 0x44, 0xe0, 0x9f, 0xd9, 0x3b, 0x94, 0xf9, 0xab, 0x60, 0x95, 0xed, 0x30, 0xf5, 0xa9, 0x77, 0x7d, 0x8d, 0xa8, 0x60, 0x49, 0xce, 0x32, 0x1e, 0x46, 0x76, 0x9d, 0xf6, 0xb2, 0x9c, 0x31, 0x63, 0x28, 0x39, 0x98, 0xbb, 0xbd, 0xe6, 0x90, 0x10, 0x48, 0xe7, 0xe3, 0x54, 0x01, 0x69, 0x99, 0xc1, 0x4e, 0x08, 0x6c, 0x78, 0xd9, 0x94, 0x7c, 0x69, 0xe6, 0x15, 0x44, 0x72, 0xe4, 0x0c, 0xcd, 0xcb, 0x41, 0xfc, 0x21, 0xa1, 0x83, 0x29, 0x03, 0x01, 0x95, 0xa0, 0xdd, 0xf8, 0x5e, 0x77, 0xfa, 0xf9, 0x98, 0x56, 0xf5, 0x7e, 0xe0, 0x37, 0x72, 0xf2, 0x09, 0x69, 0x0b, 0xcf, 0xb6, 0xdb, 0x8e, 0x04, 0x28, 0x97, 0x65, 0x99, 0x54, 0x8d, 0x55, 0x95, 0x39, 0x92, 0x6c, 0x20, 0x70, 0xa8, 0x34, 0xe5, 0x05, 0x80, 0x2d, 0xba, 0x85, 0x3d, 0x7a, 0x83, 0x58, 0x7b, 0xdb, 0x53, 0x51, 0x90, 0xdb, 0xd5, 0x84, 0x11, 0x4b, 0xeb, 0x58, 0x99, 0xee, 0x94, 0xdd, 0xc5, 0x76, 0x13, 0x5f, 0x83, 0xaf, 0x4e, 0x3b, 0x8d, 0xfb, 0x74, 0xf1, 0x30, 0xfe, 0xe2, 0x7b, 0x52, 0x9a, 0x48, 0xdd, 0xb3, 0x1e, 0x07, 0xfe, 0x73, 0xba, 0xde, 0xb6, 0xd5, 0x37, 0xc6, 0x28, 0x42, 0xe4, 0x1a, 0x52, 0x91, 0xd4, 0xfb, 0xe2, 0x85, 0x46, 0xf3, 0x4b, 0x97, 0x65, 0xd8, 0x19, 0xf6, 0x32, 0xf4, 0x81, 0xcd, 0xbe, 0x62, 0x3d, 0xc4, 0x9c, 0xbb, 0x97, 0xc9, 0x96, 0xf3, 0xc3, 0x10, 0x9f, 0x7d, 0x71, 0x58, 0x09, 0xb6, 0xa3, 0x71, 0xf8, 0x80, 0xbc, 0xfb, 0x17, 0x2d, 0xda, 0x70, 0x89, 0xa0, 0x66, 0x65, 0x23, 0xae, 0xea, 0x0c, 0xd8, 0xca, 0x22, 0xfe, 0x74, 0xe2, 0x55, 0x37, 0x8e, 0x84, 0xe5, 0x62, 0xb7, 0x45, 0x26, 0x58, 0xf8, 0x63, 0x6c, 0xe3, 0x7c, 0xa9, 0x68, 0xc7, 0x89, 0x93, 0xb4, 0x03, 0xb5, 0xb3, 0xac, 0x54, 0x56, 0x53, 0x80, 0xfb, 0x3a, 0x5c, 0x87, 0xc0, 0x98, 0x77, 0xd6, 0x37, 0x47, 0x71, 0x12, 0x42, 0x2e, 0xe4, 0x82, 0xd7, 0xfc, 0x14, 0x68, 0x03, 0x19, 0x17, 0x92, 0x2f, 0xdc, 0x39, 0x2c, 0xa3, 0xfe, 0x9e, 0xd8, 0x48, 0x4e, 0x29, 0x01, 0xb2, 0xa7, 0x9d, 0x6b, 0x5d, 0x1f, 0x02, 0x0f, 0x37, 0x82, 0x4b, 0x27, 0x5f, 0xff, 0x35, 0x85, 0x2d, 0x20, 0x72, 0x28, 0x72, 0x00, 0x07, 0x11, 0x01, 0xb8, 0xf3, 0x53, 0x6e, 0x1a, 0x11, 0x6a, 0x15, 0xa2, 0x3f, 0xcd, 0x5e, 0xa9, 0xc0, 0xc7, 0x40, 0xdc, 0xdf, 0x82, 0x04, 0xed, 0xd5, 0x65, 0x4c, 0x88, 0xed, 0x9f, 0x53, 0x89, 0xe6, 0x04, 0x76, 0x6c, 0x99, 0x19, 0xf4, 0x04, 0xdc, 0x6a, 0xf2, 0x70, 0xa5, 0x24, 0xc2, 0x4c, 0x73, 0xdf, 0x64, 0x24, 0xe9, 0xbc, 0x4d, 0x2e, 0xbc, 0xb0, 0x68, 0x38, 0xd0, 0x1f, 0x5b, 0xdf, 0x9e, 0xad, 0x0b, 0x02, 0xd9, 0x51, 0x62, 0x76, 0x51, 0xab, 0x50, 0xfb, 0x17, 0x97, 0x0f, 0x6f, 0xe2, 0x02, 0xac, 0x42, 0xb1, 0xfc, 0xc3, 0x2a, 0xb2, 0x0f, 0x8a, 0x18, 0x63, 0xcf, 0x10, 0x6a, 0xf7, 0xb3, 0xc7, 0x62, 0xfb, 0x23, 0x41, 0xd7, 0x39, 0xd2, 0x37, 0x2a, 0xdd, 0x4e, 0xcf, 0x7c, 0xd6, 0xd6, 0x1e, 0x1e, 0x7f, 0x6b, 0xec, 0x49, 0x7f, 0x29, 0xb8, 0x10, 0xee, 0xd8, 0xfc, 0x92, 0xb9, 0xbf, 0xb3, 0x74, 0x47, 0xb8, 0x17, 0x8f, 0x5c, 0x8a, 0xaf, 0xe5, 0x3e, 0x72, 0x89, 0xda, 0x17, 0x03, 0xc5, 0xa1, 0x9b, 0x31, 0x53, 0xf4, 0xea, 0xa8, 0xfc, 0x08, 0xb8, 0x62, 0xa7, 0xc0, 0xab, 0x78, 0xd5, 0x21, 0x04, 0x38, 0x6f, 0x06, 0x82, 0x79, 0xc1, 0x14, 0x83, 0x2b, 0xc6, 0xf1, 0x6d, 0x32, 0xa6, 0xb1, 0x4c, 0x75, 0x7d, 0x91, 0xbd, 0x31, 0x5e, 0xe8, 0x0a, 0x94, 0x98, 0x5a, 0x96, 0x87, 0x37, 0x4f, 0x7c, 0xcb, 0xce, 0xa3, 0x73, 0x47, 0x74, 0xa0, 0xf5, 0xa0, 0x0d, 0x29, 0xa0, 0x0b, 0xcb, 0x37, 0xdc, 0x5f, 0xf4, 0x8a, 0xbe, 0x6f, 0xe5, 0x98, 0x2c, 0x96, 0x57, 0xca, 0x42, 0x93, 0xe1, 0xe7, 0xf5, 0x97, 0xbe, 0xd0, 0xf6, 0x9d, 0xd1, 0x6f, 0xd9, 0xfa, 0xe6, 0xea, 0x77, 0x35, 0x3b, 0x1c, 0x91, 0x18, 0x3f, 0x45, 0xb6, 0x07, 0x99, 0x00, 0x66, 0x91, 0x6c, 0x76, 0x77, 0x45, 0xd9, 0xd2, 0xb8, 0xc7, 0xc6, 0xf5, 0xd5, 0x23, 0xde, 0x6a, 0x7a, 0x60, 0xd9, 0x9c, 0xbb, 0x59, 0xfe, 0x46, 0xb4, 0xc8, 0xe6, 0x2c, 0x6c, 0xa4, 0x82, 0x09, 0x00, 0xad, 0x60, 0xc8, 0xfd, 0x45, 0x29, 0xf6, 0x0d, 0x81, 0x6f, 0x78, 0xd6, 0x80, 0xa5, 0x79, 0x1f, 0xfb, 0x6f, 0xa7, 0x34, 0x1e, 0x1d, 0x9f, 0x8c, 0x96, 0x71, 0xa5, 0xaa, 0xec, 0xa9, 0x99, 0x41, 0x11, 0xb9, 0x26, 0x9b, 0x3a, 0xd9, 0x3d, 0x3b, 0xed, 0x3f, 0xc2, 0xc2, 0x5c, 0x2e, 0x85, 0x0f, 0xf3, 0x2f, 0x73, 0xaa, 0x2d, 0x9f, 0x0e, 0x63, 0xab, 0x69, 0x1a, 0x36, 0x87, 0x15, 0x99, 0x72, 0xe6, 0x02, 0xfa, 0x1b, 0xcc, 0xef, 0x8e, 0x8c, 0x35, 0xc0, 0x3b, 0x60, 0x61, 0x7f, 0x74, 0x93, 0x6f, 0xa2, 0x68, 0xe5, 0x2d, 0x8c, 0x7a, 0x7f, 0x2f, 0x56, 0xf2, 0xd9, 0x1e, 0xce, 0xf2, 0xdb, 0x53, 0xc0, 0xab, 0x43, 0xa4, 0x75, 0xd0, 0x46, 0x7e, 0x7a, 0x4b, 0x7a, 0x35, 0xa2, 0x30, 0xf3, 0x97, 0x4e, 0xef, 0xac, 0xc7, 0xec, 0xcd, 0x29, 0x49, 0xbe, 0x95, 0x5b, 0x59, 0xdd, 0x8a, 0xc4, 0x81, 0x7d, 0xa1, 0xdc, 0x6a, 0x72, 0xed, 0xb2, 0xf3, 0xf4, 0x5b, 0xd6, 0x80, 0x9f, 0x9f, 0x77, 0x94, 0xbd, 0x6e, 0xc9, 0xa3, 0xc8, 0xee, 0xa9, 0x21, 0x2b, 0x6b, 0x84, 0xdf, 0x49, 0x4b, 0x75, 0x97, 0xc0, 0x44, 0xad, 0xc6, 0xef, 0xcc, 0x18, 0xb9, 0xb6, 0xd1, 0x3e, 0xeb, 0x7c, 0xab, 0x67, 0x8e, 0x77, 0x4f, 0x02, 0x68, 0x27, 0xc5, 0x47, 0xe0, 0x24, 0xdc, 0x1c, 0x59, 0x1a, 0x1c, 0x35, 0xbe, 0x12, 0xfc, 0x80, 0x5e, 0xf3, 0x55, 0xc0, 0xfb, 0x48, 0x17, 0x77, 0x1d, 0x43, 0x3b, 0x0a, 0xac, 0x02, 0xf8, 0x20, 0xbe, 0x12, 0x3a, 0x4b, 0xae, 0x32, 0x50, 0xea, 0x6e, 0x59, 0xe4, 0x4e, 0x1e, 0xfa, 0x31, 0x1b, 0xdd, 0x86, 0x70, 0xf1, 0xdf, 0x33, 0x93, 0x4c, 0xbf, 0xfc, 0x36, 0xa9, 0x17, 0xe8, 0xd3, 0xeb, 0x4f, 0x90, 0x35, 0xfc, 0xb2, 0xdb, 0x2f, 0xb7, 0xc7, 0x0d, 0x8d, 0x06, 0xde, 0x00, 0x4b, 0x47, 0xe9, 0xb0, 0x05, 0xf5, 0x8d, 0xfe, 0xaf, 0x84, 0x79, 0xad, 0x86, 0x8c, 0xf7, 0xb1, 0x46, 0x2a, 0xc0, 0xa9, 0x9e, 0xa4, 0x15, 0xaa, 0xe1, 0x4b, 0x0b, 0x3e, 0xfe, 0xa6, 0x27, 0xac, 0xb2, 0xcc, 0x2a, 0x7a, 0xfc, 0x12, 0x2e, 0x31, 0xd2, 0xe6, 0xf2, 0x60, 0x12, 0xfb, 0x73, 0xe3, 0xbb, 0xa7, 0xbc, 0x65, 0x5d, 0x89, 0xfe, 0x24, 0xce, 0x6e, 0xe3, 0xf4, 0x1f, 0x75, 0x20, 0x87, 0xce, 0x72, 0x4a, 0xeb, 0x3d, 0x91, 0xea, 0x54, 0x63, 0x3c, 0xd3, 0x1c, 0xc2, 0x3e, 0xb3, 0x08, 0x99, 0x28, 0xe9, 0xcd, 0x5a, 0xf3, 0x96, 0xd3, 0x5e, 0xe8, 0xf7, 0x38, 0xd8, 0xbd, 0xf2, 0x18, 0x08, 0x01, 0xee, 0x0c, 0xb1, 0xba, 0xe8, 0xf0, 0xcc, 0x4c, 0xc3, 0xea, 0x7e, 0x9c, 0xe0, 0xa7, 0x48, 0x76, 0xef, 0xe8, 0x7e, 0x2c, 0x05, 0x3e, 0xfa, 0x80, 0xee, 0x11, 0x11, 0xc4, 0xc4, 0xe7, 0xc6, 0x40, 0xc0, 0xe3, 0x3e, 0xd4, 0x51, 0x8c, 0x74, 0xdf, 0x6b, 0xd1, 0x2e, 0x5f, 0x22, 0x49, 0x30, 0x59, 0x77, 0xbf, 0xaf, 0x7b, 0x72, 0xed, 0x08, 0x00, 0x71, 0x88, 0xb2, 0xd4, 0xbf, 0x7d, 0x71, 0xf8, 0x68, 0x7b, 0xcd, 0x29, 0x4c, 0xb1, 0xc3, 0xbc, 0x73, 0xd9, 0xba, 0xcd, 0xa0, 0x75, 0xb9, 0x98, 0x29, 0x58, 0xd6, 0x27, 0x05, 0x69, 0xf2, 0x2e, 0x27, 0xa4, 0xa3, 0x33, 0x0a, 0x61, 0x72, 0xf1, 0x8e, 0xd9, 0x47, 0xff, 0x02, 0xe6, 0x21, 0xad, 0x82, 0x0a, 0x0a, 0x2f, 0x83, 0xb3, 0x4b, 0xfd, 0xac, 0xbd, 0xdc, 0x79, 0xe8, 0x39, 0x1e, 0xd2, 0xb9, 0x6d, 0xcc, 0x29, 0xcf, 0x1b, 0x2f, 0xf3, 0xd9, 0x07, 0x92, 0x9f, 0x9b, 0xb3, 0xf6, 0x78, 0x40, 0x6d, 0x07, 0xcc, 0xf2, 0x8b, 0x4e, 0x4e, 0xa9, 0xf6, 0xa7, 0xb9, 0x40, 0xe5, 0xf6, 0xb6, 0xce, 0xeb, 0x16, 0x00, 0x33, 0x34, 0x12, 0xc6, 0xf1, 0x0c, 0x98, 0x51, 0x3e, 0xa0, 0xaa, 0xe6, 0x57, 0x09, 0x97, 0xee, 0x16, 0x86, 0x2a, 0x54, 0xc7, 0x09, 0x21, 0x2f, 0x38, 0xf6, 0xe0, 0xa1, 0x0f, 0x27, 0x67, 0xfe, 0x60, 0x33, 0x82, 0x31, 0x7f, 0xf0, 0x3f, 0x5c, 0x13, 0x36, 0xa5, 0xbf, 0x6c, 0xe6, 0xa3, 0xdb, 0x17, 0x2b, 0x47, 0xd7, 0xaf, 0x00, 0x31, 0x22, 0xf5, 0xf3, 0x46, 0x5a, 0x23, 0x28, 0xa9, 0x6d, 0x7e, 0xa0, 0xe7, 0xfe, 0x2b, 0xbb, 0x71, 0x0a, 0x43, 0xfc, 0x50, 0xcb, 0x2a, 0x0d, 0x14, 0xdc, 0x1c, 0x03, 0x0d, 0x9f, 0x08, 0xe2, 0xbe, 0xdc, 0xa2, 0x64, 0x8f, 0xaa, 0xb4, 0xf6, 0xc2, 0x93, 0xb4, 0x04, 0xa8, 0xf3, 0x9c, 0x76, 0x15, 0xa1, 0xf6, 0x7b, 0x11, 0xd1, 0x36, 0x85, 0xd0, 0x39, 0x4d, 0x95, 0xe5, 0x73, 0x7b, 0xb8, 0xb2, 0xa3, 0x65, 0xd1, 0x23, 0x59, 0x67, 0x9a, 0x9c, 0xb9, 0x2b, 0xe6, 0x2f, 0xd9, 0x7b, 0x29, 0x13, 0x6a, 0x53, 0x39, 0x51, 0x9b, 0x3b, 0x56, 0xc1, 0x3a, 0xd3, 0x69, 0x35, 0x1c, 0xb0, 0x89, 0xf4, 0xc0, 0x66, 0xc3, 0x6a, 0x2f, 0xe6, 0x1b, 0x1d, 0x26, 0x0b, 0xce, 0xe3, 0x77, 0x6f, 0xda, 0x53, 0xad, 0x83, 0xc0, 0x79, 0xef, 0xdf, 0x89, 0xce, 0x27, 0xd6, 0x07, 0x66, 0x63, 0x4e, 0x5d, 0x6c, 0x7b, 0xce, 0xc2, 0xcc, 0xf4, 0xd9, 0x81, 0x2f, 0x24, 0x7b, 0x44, 0x2c, 0x97, 0x21, 0x93, 0xbc, 0xb2, 0xae, 0x98, 0xef, 0x96, 0xca, 0x25, 0xde, 0x47, 0x7d, 0xf8, 0xe1, 0x0e, 0xfe, 0x3d, 0x02, 0x1b, 0xc5, 0x54, 0xb1, 0x6f, 0xe7, 0xd5, 0xb9, 0xf9, 0xa3, 0xd1, 0x72, 0xff, 0x38, 0x5b, 0x38, 0xc0, 0xfa, 0x47, 0x1d, 0x58, 0xa5, 0x32, 0xdb, 0xe3, 0xf1, 0xc3, 0x0d, 0xe5, 0x67, 0x2f, 0x9e, 0xea, 0x72, 0x03, 0x81, 0x69, 0xb9, 0x1e, 0xa2, 0xee, 0xac, 0xfc, 0x1d, 0x78, 0x5d, 0x3b, 0xaf, 0x20, 0x92, 0x57, 0x69, 0xfc, 0x18, 0xb9, 0xac, 0x43, 0x5a, 0xf0, 0x51, 0xb2, 0x32, 0x3e, 0x28, 0x2e, 0xfe, 0x56, 0xa4, 0xaa, 0xf7, 0x64, 0xd4, 0x4b, 0xbe, 0x4e, 0x95, 0xca, 0x38, 0x39, 0x07, 0x1b, 0x9c, 0x50, 0x3d, 0x4c, 0xca, 0xc0, 0x39, 0xaf, 0xdf, 0x07, 0x17, 0x3b, 0x06, 0x6f, 0x88, 0x30, 0x91, 0xd5, 0x82, 0xfa, 0x48, 0xaf, 0x36, 0x58, 0x00, 0x4e, 0x43, 0xbd, 0x70, 0x60, 0x29, 0xf7, 0x41, 0xb8, 0x00, 0x0e, 0x64, 0x52, 0x6a, 0x6f, 0xa8, 0x91, 0xc6, 0x49, 0x8c, 0xcc, 0xa6, 0x38, 0x51, 0x09, 0x83, 0x21, 0x54, 0x08, 0xb0, 0x5d, 0x9b, 0x84, 0x8d, 0x19, 0xae, 0xb5, 0xfd, 0xfc, 0xa8, 0x19, 0x1a, 0x0b, 0x8d, 0x74, 0x27, 0xca, 0xde, 0x16, 0xc5, 0xa4, 0x6b, 0x5c, 0x6a, 0x8d, 0x69, 0x79, 0x10, 0xe6, 0xc4, 0x76, 0x2a, 0xa1, 0xb7, 0x78, 0xdc, 0xa5, 0x99, 0x42, 0x6b, 0x74, 0xfa, 0xfa, 0xf3, 0x0b, 0xee, 0x30, 0x58, 0x0a, 0xa9, 0x1c, 0x7e, 0x14, 0x4c, 0x27, 0xbd, 0x79, 0xff, 0xae, 0x8f, 0x12, 0x40, 0x02, 0x8c, 0x6d, 0x7a, 0xb3, 0x99, 0x2a, 0xda, 0x0e, 0x5c, 0xa5, 0x5e, 0xe4, 0xf3, 0xd6, 0x2f, 0x8d, 0xe5, 0x75, 0x30, 0x2d, 0x58, 0x61, 0xd7, 0x36, 0x85, 0x42, 0x3c, 0x2e, 0x6a, 0x6d, 0x6f, 0xb3, 0xbe, 0x09, 0x0f, 0xbc, 0x2a, 0x70, 0x18, 0x21, 0xb6, 0xd8, 0xfd, 0x5e, 0x82, 0x33, 0xf7, 0x94, 0xb6, 0x54, 0x9c, 0xd0, 0xbb, 0x52, 0xb3, 0x90, 0xac, 0x31, 0x47, 0x83, 0x07, 0xbf, 0xfa, 0x91, 0xa9, 0xbd, 0x9c, 0x1b, 0xf9, 0x3f, 0xfc, 0x84, 0x63, 0x56, 0xfe, 0xf0, 0x08, 0xeb, 0xee, 0x4b, 0xb3, 0xee, 0x14, 0x8e, 0x0f, 0xb1, 0x89, 0x3d, 0x18, 0x8e, 0x49, 0x34, 0xd0, 0xd0, 0x88, 0xa4, 0x33, 0xd1, 0x4a, 0x59, 0x6c, 0x5f, 0x2e, 0x3e, 0x49, 0x64, 0x8a, 0x22, 0xed, 0xc6, 0xbd, 0xbc, 0xc5, 0x8d, 0xc1, 0xed, 0xbd, 0x44, 0x00, 0x46, 0xb3, 0xa1, 0x69, 0xca, 0x2b, 0x68, 0xc2, 0xf5, 0x45, 0x8c, 0x40, 0xfd, 0xed, 0x97, 0x55, 0x57, 0x52, 0x4d, 0xc9, 0x7d, 0x99, 0x8c, 0x0c, 0xef, 0xd2, 0x77, 0xcb, 0x77, 0x2b, 0xd4, 0xc1, 0xb2, 0x63, 0xb1, 0xd0, 0xcc, 0x82, 0x4e, 0x50, 0x8b, 0xc8, 0x37, 0xa7, 0x8f, 0xe3, 0xb1, 0x19, 0xd8, 0x65, 0x57, 0xe2, 0x88, 0x74, 0x05, 0x82, 0xea, 0xc3, 0xf5, 0x59, 0xb4, 0xc2, 0x28, 0x73, 0x89, 0x12, 0x08, 0xa5, 0xc2, 0x3c, 0x4b, 0xd9, 0x6e, 0xa2, 0x1a, 0xa6, 0x97, 0xb6, 0x73, 0x24, 0xc8, 0x69, 0xcc, 0xfe, 0xcb, 0xe7, 0xf9, 0xc8, 0xb7, 0x81, 0x4f, 0x93, 0x2b, 0xea, 0x0a, 0xbf, 0xd4, 0xa7, 0xec, 0x11, 0x35, 0xc1, 0x27, 0x05, 0xa7, 0xbd, 0x7d, 0x66, 0x9e, 0xcd, 0xa6, 0x1b, 0x2f, 0x48, 0xf2, 0x44, 0xcf, 0x58, 0x2f, 0x86, 0x5e, 0xf3, 0xcd, 0xa2, 0x64, 0x0c, 0x40, 0x4d, 0x9a, 0x0a, 0xa6, 0x3c, 0xac, 0x79, 0xaa, 0x7e, 0x3d, 0xff, 0xa8, 0x0e, 0x2b, 0x92, 0x12, 0xa9, 0x15, 0xe9, 0x12, 0xdd, 0x1b, 0x30, 0x70, 0x63, 0xe5, 0x00, 0xb7, 0xae, 0xe7, 0x8e, 0x93, 0xc4, 0xe3, 0x23, 0x7e, 0x4d, 0xaf, 0xcc, 0x9b, 0xe9, 0x38, 0x52, 0xe2, 0xc7, 0xc7, 0x6c, 0x7e, 0x74, 0x83, 0x34, 0x73, 0xf0, 0x38, 0xd8, 0x84, 0x07, 0x56, 0x92, 0x54, 0xde, 0x3d, 0xda, 0xcb, 0xcd, 0xb7, 0xda, 0xbb, 0x6c, 0xc6, 0x22, 0xc4, 0xf1, 0xa1, 0x9d, 0x75, 0xb9, 0xf9, 0xc3, 0xb3, 0x24, 0x80, 0x11, 0x5f, 0xa6, 0xac, 0xb6, 0x33, 0x1b, 0xb8, 0x90, 0xed, 0x5b, 0xed, 0x56, 0xb0, 0x0f, 0x1f, 0x17, 0xa7, 0xc3, 0x7a, 0xe3, 0xeb, 0x3c, 0x7f, 0xc8, 0xa7, 0x0b, 0x49, 0x00, 0x7a, 0x62, 0x15, 0x68, 0x1c, 0x27, 0x01, 0x34, 0x45, 0x47, 0x14, 0xe1, 0xca, 0x4d, 0x7f, 0x6c, 0x09, 0x33, 0x22, 0xc2, 0x88, 0x77, 0x52, 0x77, 0xd9, 0x72, 0xda, 0xba, 0xc1, 0xe6, 0x3f, 0x89, 0x99, 0xd6, 0x49, 0x21, 0xf3, 0x9a, 0xbe, 0xb9, 0x81, 0x32, 0x71, 0x6f, 0x33, 0xdb, 0x7b, 0x83, 0xa0, 0xe0, 0xc9, 0xc3, 0xa7, 0xb3, 0xd7, 0x46, 0x56, 0x3c, 0xba, 0x5d, 0x0a, 0x71, 0x64, 0xc7, 0xd8, 0x27, 0x24, 0x24, 0x2c, 0x27, 0x6c, 0xac, 0xb0, 0x85, 0xd7, 0x21, 0x70, 0x2d, 0x6a, 0x02, 0x3b, 0xbf, 0x1b, 0x02, 0x4c, 0x9d, 0x8f, 0xb9, 0x2a, 0x42, 0x28, 0x98, 0xcc, 0xd5, 0x3f, 0x22, 0x01, 0xfd, 0xae, 0x59, 0x0f, 0xf8, 0x92, 0x77, 0x9a, 0xe7, 0x4f, 0xdf, 0xc8, 0x6c, 0xd4, 0x53, 0xa3, 0x77, 0x20, 0x67, 0xbf, 0x5d, 0x04, 0x36, 0x1c, 0x2b, 0x2b, 0x53, 0x4d, 0x39, 0x59, 0x03, 0xda, 0x02, 0xf0, 0xa9, 0xe4, 0x32, 0xb8, 0x81, 0x07, 0x01, 0xdf, 0x91, 0x85, 0xc0, 0x3f, 0xdd, 0xa0, 0xb1, 0xe0, 0xdb, 0x47, 0x1c, 0xbe, 0x26, 0xf5, 0x9f, 0xcc, 0x76, 0xd7, 0xc6, 0x38, 0xd0, 0x2d, 0xdc, 0xf1, 0xfa, 0xf2, 0x00, 0x67, 0x32, 0xbf, 0x7b, 0x92, 0x1f, 0xed, 0x50, 0x35, 0x08, 0xfa, 0x15, 0x64, 0x44, 0x2d, 0x02, 0x44, 0xf2, 0x7d, 0x48, 0x12, 0xea, 0xb0, 0xa3, 0x66, 0xf3, 0xc0, 0x33, 0xb9, 0x36, 0x82, 0x88, 0x25, 0xf2, 0x89, 0xfc, 0x6d, 0x72, 0x49, 0x45, 0x3d, 0x3c, 0x78, 0x4a, 0xb3, 0x8c, 0xba, 0x36, 0x1d, 0x00, 0x7c, 0xcb, 0x05, 0x95, 0x20, 0xfa, 0x6b, 0xd2, 0x5b, 0xb0, 0x51, 0x43, 0xdc, 0xf2, 0x7d, 0x29, 0x2f, 0x2c, 0x7a, 0x70, 0xe0, 0xc6, 0xe0, 0xe1, 0xe3, 0xf9, 0xd5, 0x99, 0x33, 0xe1, 0xd4, 0xba, 0xba, 0xd3, 0xad, 0x60, 0x71, 0xf0, 0xcd, 0xd7, 0xc8, 0xfa, 0xc0, 0x0b, 0x48, 0x67, 0xf4, 0x3f, 0x77, 0xb4, 0xc0, 0x02, 0xfc, 0xfc, 0xa4, 0x5f, 0x03, 0xc9, 0xd3, 0x55, 0xe3, 0x2a, 0xee, 0x87, 0xfe, 0x06, 0x13, 0x33, 0xe9, 0xaf, 0x16, 0x68, 0xce, 0xba, 0x0e, 0x74, 0x0e, 0x0f, 0x14, 0x9c, 0x2a, 0x3c, 0x47, 0x11, 0xe3, 0x0f, 0x14, 0x1f, 0xa0, 0x63, 0xb4, 0xa6, 0x11, 0x3a, 0xf5, 0xce, 0x12, 0x0c, 0x3e, 0xf7, 0xd2, 0x5f, 0xcd, 0xef, 0x34, 0x98, 0x44, 0x68, 0x75, 0x11, 0x64, 0xa9, 0x10, 0x6b, 0x18, 0x83, 0xde, 0x26, 0xb5, 0x87, 0x82, 0x6e, 0x80, 0x76, 0x04, 0x38, 0x71, 0xf9, 0xbc, 0x8e, 0x36, 0x92, 0x72, 0x27, 0x7b, 0xd3, 0xc3, 0x3b, 0x69, 0xce, 0xc6, 0x95, 0x6c, 0xcc, 0xf0, 0xea, 0x3a, 0x42, 0x35, 0x69, 0x11, 0x00, 0x70, 0x93, 0x3f, 0xac, 0x05, 0x4d, 0xe8, 0x6f, 0xc5, 0x34, 0x04, 0xee, 0x12, 0x30, 0xa7, 0x7c, 0x43, 0x4c, 0x85, 0x8d, 0x4a, 0xc5, 0xb5, 0x6e, 0x93, 0x60, 0xb5, 0x34, 0x30, 0x01, 0xaf, 0xf3, 0x34, 0x7a, 0xfa, 0x30, 0x5c, 0xa1, 0xe4, 0x98, 0xf5, 0xa5, 0xaf, 0xf2, 0xf9, 0xa2, 0xd9, 0x52, 0x7c, 0x72, 0xa1, 0x8f, 0x46, 0xc7, 0xc6, 0xf8, 0xc2, 0x76, 0x92, 0x43, 0x17, 0x16, 0x17, 0xc6, 0x94, 0xca, 0xb9, 0xea, 0x51, 0x5b, 0xec, 0xdc, 0x13, 0x8a, 0x3f, 0x85, 0x71, 0xa4, 0x9a, 0xbd, 0x35, 0x56, 0xc3, 0xbb, 0x05, 0xc3, 0x27, 0xd0, 0x43, 0xd4, 0xd8, 0x56, 0x31, 0xcf, 0xd2, 0xe3, 0x59, 0x2c, 0x82, 0xc2, 0x2c, 0xa4, 0x89, 0xa3, 0xe9, 0x8a, 0xbd, 0x91, 0xc0, 0x5e, 0x70, 0x25, 0x38, 0xa0, 0xf6, 0xf9, 0xce, 0xe2, 0x61, 0x60, 0xde, 0x21, 0x8f, 0x54, 0xc7, 0x55, 0x67, 0xb0, 0x4b, 0x47, 0x5f, 0xa0, 0x34, 0xa3, 0x41, 0x55, 0x3d, 0x4e, 0x30, 0xfd, 0x2f, 0xf9, 0xe6, 0xf2, 0x4b, 0xf7, 0x3f, 0x31, 0xe8, 0x4b, 0xfb, 0x0f, 0x5d, 0x06, 0xbf, 0x27, 0x21, 0xd0, 0x5e, 0x97, 0x31, 0xc4, 0x57, 0x6c, 0xb2, 0x81, 0x9f, 0x5a, 0xd8, 0x7d, 0xa0, 0xb1, 0x06, 0x9d, 0x81, 0x8c, 0x37, 0x03, 0xa8, 0x4b, 0x9c, 0x28, 0x7d, 0x44, 0x86, 0x2a, 0x71, 0xb6, 0x87, 0x67, 0x40, 0xfe ],
+const [ 0x9d, 0x18, 0x98, 0xf0, 0x4e, 0x38, 0xda, 0x85, 0xc2, 0x7e, 0x63, 0x17, 0xc1, 0x9e, 0xe8, 0x1c, 0x3b, 0xdc, 0x6b, 0x1a, 0xe7, 0x21, 0x02, 0x62, 0x2a, 0x4e, 0xdb, 0xfa, 0x3a, 0xd0, 0x7d, 0xdb, 0x83, 0x75, 0x50, 0x5c, 0x4a, 0x7d, 0x60, 0xef, 0x90, 0xf5, 0x5e, 0x0b, 0x39, 0x40, 0xe8, 0x69, 0x6d, 0xf7, 0x09, 0x73, 0x3f, 0xf3, 0x04, 0xfa, 0x8c, 0xa7, 0x4d, 0x27, 0x26, 0xb3, 0xd9, 0xb4, 0x32, 0xb7, 0x97, 0x5b, 0xcf, 0x65, 0x3f, 0x8f, 0xf9, 0xdb, 0x4a, 0x6b, 0xac, 0x2f, 0x41, 0xe8, 0x4c, 0x4b, 0x3b, 0x52, 0x44, 0xfb, 0xa2, 0xfd, 0xee, 0x44, 0x35, 0x34, 0xb3, 0xf8, 0x53, 0x72, 0x73, 0x87, 0x76, 0xd5, 0x26, 0x18, 0xfe, 0xcf, 0xc4, 0xd8, 0x30, 0x1f, 0x63, 0x92, 0x7e, 0xff, 0x9f, 0x81, 0x08, 0x9f, 0x3f, 0x62, 0x64, 0xd3, 0x16, 0xcc, 0x9a, 0x08, 0x26, 0xc4, 0x73, 0x7d, 0x0c, 0x8d, 0xf4, 0xb0, 0x98, 0xbd, 0x25, 0x16, 0xbb, 0x96, 0x17, 0x0e, 0xa6, 0x92, 0x24, 0x18, 0x30, 0x40, 0x79, 0x42, 0x78, 0x4f, 0xd2, 0xe4, 0xcc, 0xe8, 0x85, 0x8d, 0xca, 0x42, 0xc2, 0x3d, 0xc5, 0x70, 0x19, 0xd5, 0x6b, 0x7d, 0x3c, 0xcb, 0xa4, 0xba, 0x07, 0x22, 0xbd, 0x57, 0xbd, 0x9a, 0xc5, 0x31, 0x95, 0x24, 0x37, 0xeb, 0x75, 0x98, 0xda, 0x40, 0xfd, 0xaa, 0xe6, 0x97, 0xc7, 0x1b, 0x68, 0xd8, 0xed, 0x2c, 0xe7, 0x7f, 0xcc, 0x58, 0x48, 0xef, 0x08, 0x42, 0xef, 0x08, 0xd1, 0xed, 0x27, 0xfb, 0x64, 0x2b, 0xc4, 0x5d, 0xd4, 0x58, 0x07, 0x7b, 0x0a, 0x47, 0xc1, 0xee, 0x0a, 0x7d, 0xbb, 0x6f, 0x79, 0x9d, 0x56, 0xec, 0x5c, 0x24, 0x6f, 0xdb, 0x23, 0x56, 0x85, 0xce, 0xe6, 0x79, 0x1e, 0x47, 0xee, 0x40, 0x66, 0xce, 0x77, 0x8a, 0x1a, 0x42, 0xb4, 0x4d, 0xa4, 0x6d, 0x14, 0xcc, 0x88, 0xda, 0xc4, 0x11, 0xfe, 0xeb, 0x75, 0x97, 0xe0, 0x26, 0x5f, 0x47, 0xc7, 0xd0, 0x86, 0xa5, 0x72, 0xbd, 0x3c, 0x4c, 0x67, 0x66, 0xe7, 0x98, 0xdc, 0x3c, 0x04, 0xa2, 0xd7, 0x3c, 0x6c, 0x71, 0x95, 0xc4, 0xd6, 0x6e, 0x29, 0xa5, 0x9e, 0x19, 0x65, 0x79, 0xc5, 0xfb, 0xfd, 0x37, 0x38, 0xdb, 0xea, 0x04, 0x55, 0x35, 0x0d, 0x4c, 0xab, 0xe8, 0x15, 0x12, 0x01, 0x2f, 0xa2, 0x84, 0x9a, 0xd2, 0xaa, 0xd3, 0xb8, 0x9e, 0x1d, 0x41, 0x5f, 0x12, 0xc4, 0x7c, 0x5b, 0x5b, 0x6f, 0x2a, 0x85, 0x83, 0x4f, 0xc5, 0x41, 0xe5, 0xa1, 0xa9, 0x4b, 0xe4, 0x8c, 0x6b, 0xb4, 0xdc, 0x4d, 0x6d, 0x27, 0x59, 0x91, 0xaf, 0x71, 0x87, 0x22, 0xe8, 0x40, 0xea, 0xc6, 0xd6, 0x2b, 0x4f, 0x65, 0xd2, 0xf3, 0x03, 0x69, 0xa7, 0x09, 0x42, 0x6a, 0xa4, 0x50, 0xf2, 0x0b, 0xf0, 0x23, 0x92, 0x1f, 0x1e, 0x9a, 0x6d, 0x11, 0x01, 0x09, 0x13, 0x82, 0xc2, 0xca, 0x09, 0x33, 0x2f, 0x3d, 0xc0, 0x26, 0x56, 0x0c, 0xc4, 0x00, 0x53, 0xb4, 0x36, 0xb2, 0x66, 0x41, 0x7c, 0x58, 0x49, 0x58, 0x37, 0x61, 0xc0, 0x7b, 0x75, 0xf1, 0x71, 0x89, 0x29, 0x83, 0xf6, 0x84, 0xd8, 0xd3, 0x31, 0x97, 0x94, 0xfb, 0xdf, 0x58, 0x2e, 0xdc, 0x70, 0x4a, 0xa8, 0xbf, 0x17, 0xa6, 0xe9, 0x3c, 0x1d, 0x5b, 0xb4, 0x5c, 0x7a, 0x53, 0xdb, 0xfa, 0xa6, 0xf8, 0xb0, 0x6f, 0xad, 0xf7, 0xbd, 0x6e, 0x82, 0x43, 0xb5, 0x2c, 0x95, 0x5e, 0xaa, 0xc4, 0xa7, 0xd4, 0x7f, 0xdb, 0xdd, 0x08, 0xa1, 0x7f, 0x14, 0x32, 0xf2, 0x55, 0x75, 0xa9, 0x06, 0xf4, 0x49, 0x5e, 0x92, 0x8c, 0x0e, 0xa9, 0x21, 0xcb, 0xca, 0x49, 0x09, 0x01, 0x9f, 0xa6, 0x9e, 0x82, 0xa0, 0x58, 0xa5, 0x4c, 0xe3, 0xed, 0x0c, 0xe9, 0xd7, 0xe7, 0xd8, 0x97, 0xd8, 0x05, 0x5e, 0xa7, 0x01, 0xc4, 0xb6, 0x23, 0x42, 0x24, 0x6d, 0xb3, 0xb2, 0xaf, 0x7a, 0xc1, 0x26, 0xb8, 0x73, 0xdc, 0x02, 0xe1, 0x01, 0x5a, 0x4f, 0xe0, 0x92, 0x42, 0x0e, 0x82, 0x4d, 0x69, 0xcc, 0xef, 0x4b, 0xda, 0x77, 0x31, 0x04, 0x7b, 0x70, 0xf0, 0x07, 0xee, 0xe1, 0x7f, 0xef, 0xb6, 0x51, 0x1d, 0x92, 0x9b, 0x76, 0x74, 0x7b, 0x4f, 0x4a, 0x66, 0x9b, 0x51, 0x61, 0x09, 0x3b, 0x12, 0x79, 0xf0, 0x35, 0x57, 0x53, 0xad, 0x64, 0xde, 0xc1, 0x93, 0x59, 0x44, 0x01, 0xc1, 0x4f, 0x26, 0x49, 0x5c, 0x61, 0x87, 0xa3, 0x1b, 0xfb, 0x71, 0xfb, 0x09, 0x8f, 0xdf, 0x76, 0x86, 0x89, 0xdb, 0x06, 0x8f, 0x84, 0xe4, 0x3c, 0x40, 0xbe, 0x92, 0x5d, 0x97, 0xc9, 0x7d, 0xb7, 0x7b, 0x84, 0x5a, 0x35, 0xfd, 0x4a, 0x67, 0x32, 0xdd, 0x69, 0x0a, 0x8b, 0x50, 0xd6, 0xb4, 0xf8, 0x00, 0x1f, 0x0c, 0x9c, 0x55, 0xa0, 0x4a, 0xda, 0xf3, 0xfa, 0xe0, 0x6b, 0x84, 0xc1, 0x60, 0xad, 0xb7, 0x75, 0x9a, 0x3e, 0x88, 0xb4, 0x04, 0xca, 0xc3, 0xad, 0x60, 0x21, 0xc3, 0xd8, 0x98, 0x8d, 0x80, 0xe5, 0xed, 0x62, 0xc9, 0xf2, 0x50, 0xd6, 0xcd, 0x00, 0x10, 0x13, 0xe0, 0xa8, 0xb6, 0x8b, 0x7c, 0x0a, 0x2e, 0x8c, 0x86, 0x07, 0x27, 0x14, 0xd3, 0xb0, 0xbb, 0xe6, 0xeb, 0xfd, 0x53, 0xdd, 0x0d, 0xc3, 0xc5, 0x81, 0x73, 0xe0, 0xc0, 0xd8, 0xd6, 0xb8, 0x6a, 0x7f, 0x35, 0xe6, 0x47, 0xf8, 0xd3, 0x2b, 0x5d, 0x46, 0x7f, 0xaa, 0x96, 0xb7, 0x17, 0x58, 0x65, 0x02, 0x4f, 0xae, 0xac, 0x91, 0xaf, 0xa1, 0xde, 0x20, 0xdb, 0xd3, 0x61, 0x87, 0x17, 0x0b, 0x36, 0xd4, 0x0a, 0xe3, 0xdb, 0x9d, 0xc2, 0xc0, 0x70, 0x95, 0xf9, 0x07, 0x1a, 0x5c, 0x97, 0x8e, 0xa5, 0x9c, 0x78, 0x51, 0x6d, 0x51, 0x6e, 0x67, 0x7e, 0x68, 0x8a, 0x34, 0xfa, 0x8c, 0x97, 0xdf, 0xbb, 0x3d, 0xe8, 0x06, 0x3a, 0x22, 0x54, 0xb1, 0xaf, 0xa0, 0x7e, 0x85, 0x7a, 0xab, 0x5a, 0x3b, 0xc2, 0xdc, 0xec, 0x50, 0x5c, 0xc4, 0x53, 0xfd, 0xee, 0x81, 0x07, 0x69, 0x54, 0x8e, 0x5f, 0x1e, 0x42, 0xe0, 0x56, 0xb9, 0x2b, 0x2e, 0x8e, 0xe6, 0x62, 0x90, 0x95, 0x8c, 0x80, 0x4b, 0x68, 0x45, 0x05, 0xeb, 0x35, 0x11, 0x42, 0x93, 0x65, 0x4b, 0x76, 0x92, 0xda, 0xdc, 0x37, 0x36, 0x75, 0xae, 0x13, 0xe5, 0xdc, 0x64, 0x78, 0x69, 0x7a, 0x48, 0xd1, 0x8c, 0xc7, 0x84, 0xf2, 0xe5, 0xc9, 0x96, 0xb6, 0xf1, 0xdb, 0xfe, 0xe6, 0x66, 0xad, 0x39, 0x5d, 0xc3, 0x8c, 0xf3, 0x6a, 0x2c, 0xe3, 0x79, 0x76, 0x75, 0x02, 0x6d, 0xe7, 0x7d, 0x1f, 0xbd, 0x44, 0xbd, 0x9a, 0xd5, 0x99, 0x20, 0x86, 0x14, 0x1d, 0x15, 0x64, 0x7d, 0x12, 0xe3, 0x31, 0xb0, 0xed, 0x3e, 0xa4, 0x18, 0xb7, 0x17, 0xb1, 0x65, 0xb3, 0xb8, 0x51, 0x3d, 0x41, 0x0f, 0x85, 0x2e, 0x02, 0x4a, 0x98, 0xe8, 0x3d, 0xa5, 0xa5, 0xa9, 0x81, 0x80, 0x5a, 0xf8, 0x8c, 0xb5, 0xfb, 0x96, 0x6c, 0x28, 0xaa, 0xb2, 0xe4, 0xa0, 0xe5, 0x5c, 0x11, 0xd5, 0x50, 0x3c, 0x4d, 0xca, 0xb5, 0x84, 0x54, 0x5c, 0x49, 0x23, 0xa6, 0x1b, 0x31, 0x3c, 0x2c, 0x5a, 0x44, 0xd6, 0x1d, 0x82, 0x13, 0xd5, 0x23, 0xac, 0x26, 0x29, 0xba, 0x6e, 0x89, 0x45, 0xd9, 0xf4, 0x88, 0xd2, 0xd5, 0x53, 0xb6, 0xa5, 0x82, 0x1b, 0x34, 0xef, 0x9b, 0x2b, 0x2f, 0xb4, 0x64, 0xca, 0xab, 0x7f, 0x8d, 0xf3, 0x7f, 0x53, 0x5a, 0xef, 0xa1, 0xe4, 0x01, 0x2a, 0xa4, 0x07, 0x54, 0x3f, 0x7f, 0x68, 0x9f, 0x55, 0x90, 0x7b, 0xd4, 0xae, 0xe1, 0xb5, 0xe5, 0x7d, 0xa9, 0xfb, 0x72, 0xf8, 0x16, 0x5b, 0xa4, 0xaf, 0x49, 0xfa, 0x59, 0x1c, 0xa3, 0x4d, 0x81, 0x7b, 0x3f, 0x8c, 0xc7, 0xdc, 0xbf, 0x64, 0x75, 0x76, 0x4c, 0xed, 0x91, 0x3e, 0xd8, 0xdb, 0x4c, 0xb8, 0xa6, 0xf8, 0x9e, 0x0d, 0x0d, 0xd2, 0x2a, 0x5f, 0x79, 0xb0, 0x67, 0x59, 0xb2, 0xcb, 0x01, 0x0a, 0x61, 0xbb, 0x7d, 0xf3, 0xd0, 0x30, 0x1d, 0x5e, 0xf1, 0xe2, 0x03, 0xf2, 0xa2, 0xcb, 0x98, 0x85, 0x2f, 0x93, 0x2f, 0x31, 0x18, 0x4c, 0xe6, 0xaa, 0x15, 0x5f, 0xcd, 0xce, 0x58, 0xc6, 0x4b, 0x7e, 0x12, 0x7c, 0xbd, 0xad, 0x38, 0x32, 0x5f, 0xb6, 0x87, 0x44, 0x70, 0xf3, 0xc6, 0xeb, 0x91, 0x8b, 0x4b, 0xb4, 0x6f, 0x8b, 0xc0, 0x31, 0xa1, 0x39, 0x27, 0xee, 0xd4, 0xa5, 0x1c, 0xa6, 0x25, 0x80, 0x5a, 0xb7, 0xce, 0x31, 0x81, 0xd4, 0x05, 0x26, 0x17, 0xfa, 0x21, 0x68, 0xcc, 0xa5, 0xff, 0x73, 0x02, 0x43, 0xa4, 0x44, 0x8c, 0xe9, 0x23, 0xb3, 0xb6, 0x45, 0xc1, 0x03, 0x86, 0xd4, 0x58, 0xb8, 0x42, 0x54, 0xf9, 0xa8, 0x32, 0x7d, 0xd5, 0x55, 0xa7, 0xec, 0x5e, 0x7a, 0x3d, 0x60, 0xa9, 0xe4, 0x5c, 0x28, 0x17, 0x83, 0x05, 0xdc, 0x34, 0xc1, 0xcb, 0x4c, 0xdf, 0x12, 0x1f, 0xb6, 0xac, 0xcd, 0xd1, 0x3c, 0x86, 0x3a, 0xd4, 0x94, 0x99, 0xec, 0x42, 0x02, 0x6f, 0x51, 0x9f, 0x83, 0x58, 0x87, 0x62, 0x4b, 0x10, 0x71, 0xb1, 0x72, 0x9c, 0x0b, 0x6d, 0xeb, 0x75, 0xfa, 0x6e, 0xb5, 0xe8, 0x68, 0x10, 0x55, 0xbd, 0x0e, 0xee, 0x83, 0x17, 0x92, 0xed, 0x24, 0x9b, 0x14, 0x7d, 0x78, 0xd4, 0x04, 0x1b, 0x95, 0xd6, 0x36, 0x1a, 0x14, 0x22, 0x38, 0xa4, 0x0a, 0xca, 0xe3, 0xfc, 0x3a, 0xd6, 0x30, 0x05, 0x88, 0xe5, 0x4d, 0x08, 0xb1, 0x18, 0xf0, 0xb2, 0x3a, 0x2b, 0xec, 0x5c, 0xa6, 0xe5, 0x02, 0x90, 0xec, 0xb3, 0xf9, 0xc8, 0x28, 0x90, 0xf0, 0x78, 0x91, 0x27, 0xf4, 0x4f, 0xab, 0x3c, 0xce, 0xba, 0xbe, 0x48, 0x1e, 0xab, 0x86, 0x63, 0xae, 0x98, 0x2c, 0x67, 0x00, 0xc6, 0x75, 0x53, 0x29, 0xc7, 0x3a, 0xed, 0xe2, 0x42, 0x18, 0xac, 0xdd, 0xf2, 0x68, 0xd4, 0x55, 0xf1, 0x71, 0xe3, 0xe9, 0x37, 0xdd, 0x2c, 0xaa, 0x5d, 0x6a, 0xc2, 0x73, 0xa7, 0xe2, 0x97, 0x79, 0x42, 0x4d, 0xe5, 0x22, 0xca, 0x65, 0xcd, 0x1b, 0x10, 0x4a, 0x3f, 0xa5, 0x19, 0x77, 0x19, 0x2f, 0x6a, 0xf5, 0x93, 0x2a, 0x82, 0xce, 0xda, 0x19, 0xa9, 0xc5, 0xfb, 0xe7, 0xe8, 0x44, 0x03, 0x7e, 0x59, 0x96, 0x64, 0x95, 0xa1, 0x56, 0x9b, 0xc9, 0xba, 0x28, 0x10, 0xf0, 0xf6, 0xa7, 0x3e, 0xaa, 0x40, 0x9e, 0x13, 0x38, 0xa5, 0x7a, 0x9a, 0x92, 0x14, 0xff, 0xd7, 0xb3, 0x62, 0x3b, 0xf3, 0x38, 0x91, 0xb8, 0x99, 0x29, 0x52, 0xf6, 0x9f, 0x17, 0xc8, 0x18, 0xe9, 0x67, 0x8f, 0xde, 0x8a, 0xed, 0xfd, 0xd3, 0x2d, 0xbd, 0xa8, 0xc8, 0xb4, 0x3d, 0x28, 0x80, 0x1e, 0x7f, 0x1e, 0xad, 0xae, 0xce, 0x75, 0x1b, 0x49, 0x87, 0xe7, 0x2c, 0x21, 0x2b, 0xc3, 0x84, 0x90, 0xb1, 0xee, 0x05, 0x46, 0x21, 0x28, 0xfe, 0xa7, 0x5e, 0x91, 0x9f, 0x6f, 0x43, 0x6c, 0xb1, 0x98, 0xf2, 0x22, 0x84, 0x7d, 0x69, 0x8a, 0x28, 0x3f, 0x57, 0x67, 0xdf, 0x68, 0x2d, 0x33, 0xd3, 0xce, 0x77, 0x1b, 0x05, 0xbb, 0x6d, 0x4a, 0x86, 0x4a, 0xc5, 0x6a, 0xe9, 0x14, 0xcc, 0x68, 0xf8, 0x0c, 0xb5, 0x78, 0xa6, 0xa8, 0x31, 0x5a, 0x45, 0x42, 0x40, 0xdb, 0xf9, 0xbd, 0x46, 0x9e, 0x6d, 0x6b, 0x61, 0x1c, 0xc4, 0x2e, 0xfa, 0xea, 0xd3, 0xde, 0x9a, 0x3b, 0x8d, 0xeb, 0xff, 0xa5, 0xbe, 0x44, 0x70, 0x28, 0xfd, 0x77, 0x4d, 0x6c, 0xdb, 0x19, 0xea, 0x4a, 0x61, 0x68, 0x9d, 0x8e, 0xba, 0x2f, 0x16, 0xfb, 0x2c, 0xea, 0xef, 0x90, 0x4d, 0x2b, 0x84, 0x0a, 0x73, 0x3c, 0x05, 0xaa, 0x6c, 0x06, 0xca, 0x38, 0x6f, 0x31, 0xe6, 0x48, 0x53, 0x8d, 0xfe, 0xbc, 0xff, 0xb1, 0x5c, 0x8a, 0x22, 0xe2, 0x3f, 0xc0, 0x24, 0x36, 0x75, 0xc5, 0x5c, 0xf8, 0x2c, 0xe1, 0x83, 0x4f, 0x06, 0xff, 0x68, 0x1b, 0x6b, 0xb2, 0xe6, 0x20, 0x23, 0x77, 0x13, 0x66, 0x24, 0x3a, 0xbb, 0xdf, 0xa8, 0x1b, 0x0d, 0x4b, 0x83, 0x71, 0x93, 0x59, 0xb4, 0x0f, 0x68, 0x0f, 0x3a, 0xc7, 0xa5, 0x6b, 0x29, 0x2d, 0x1c, 0x4b, 0xfc, 0x9d, 0x49, 0x8a, 0x2d, 0x80, 0x85, 0x6c, 0x03, 0xca, 0x7d, 0x3c, 0xac, 0xc7, 0xe3, 0x33, 0x8b, 0x18, 0x63, 0x9c, 0xd3, 0xf9, 0xd9, 0x36, 0x55, 0xc5, 0xc1, 0xda, 0x96, 0xbb, 0xee, 0x5d, 0x25, 0x02, 0x80, 0xb8, 0x2b, 0xeb, 0x10, 0x66, 0x44, 0x77, 0x2d, 0x0e, 0x8d, 0x19, 0x0c, 0x62, 0xff, 0xbc, 0x7b, 0x47, 0xfb, 0x08, 0x17, 0x36, 0x25, 0xe1, 0xbf, 0xe2, 0x76, 0x31, 0x48, 0x1b, 0x8d, 0xe8, 0x72, 0xf2, 0x46, 0x41, 0x1b, 0x1e, 0x8e, 0x46, 0xb3, 0x9e, 0x76, 0x96, 0xf0, 0xa0, 0x86, 0x66, 0xc3, 0xa2, 0x53, 0xc6, 0x8a, 0xd7, 0x53, 0x25, 0x87, 0xcc, 0xf1, 0x18, 0x91, 0x4b, 0xdd, 0x57, 0x09, 0x80, 0xa6, 0x08, 0x10, 0x5a, 0x8a, 0x41, 0xf7, 0x34, 0x8d, 0xc8, 0xf7, 0xb5, 0xc8, 0x1d, 0x23, 0xf4, 0x04, 0xba, 0x9a, 0xe0, 0x87, 0x99, 0x01, 0xe0, 0x2e, 0xf7, 0x31, 0xb6, 0xbc, 0x58, 0x2c, 0xa9, 0x72, 0xcb, 0x56, 0xe3, 0xe0, 0x6f, 0xe2, 0x18, 0xfa, 0x36, 0x8a, 0x68, 0x6e, 0xe9, 0x83, 0x87, 0x35, 0x6c, 0xb0, 0x1b, 0x68, 0x44, 0x16, 0x65, 0x56, 0x56, 0x90, 0x24, 0xd3, 0xf1, 0xc3, 0xb6, 0xd3, 0x0f, 0x55, 0x81, 0x37, 0xd8, 0x5a, 0x91, 0xe6, 0x68, 0x0f, 0x82, 0x20, 0xd2, 0xcb, 0xa1, 0x0f, 0x65, 0x32, 0x4e, 0x9f, 0x2e, 0xac, 0xa5, 0x90, 0xbd, 0x16, 0x5d, 0xca, 0x2c, 0xb7, 0xef, 0xf0, 0x5e, 0x75, 0xfb, 0x37, 0x85, 0x48, 0xe8, 0x79, 0xe7, 0xf0, 0xcc, 0x85, 0xe1, 0xe3, 0x8b, 0xba, 0x2c, 0x8a, 0x42, 0xd4, 0x5f, 0xac, 0xe6, 0x05, 0xb5, 0x2b, 0x28, 0x48, 0x11, 0xee, 0x9c, 0xf2, 0x3f, 0x1e, 0x1b, 0x89, 0x7d, 0x95, 0x66, 0xda, 0x3a, 0x93, 0x0b, 0x46, 0x1d, 0xb3, 0x8d, 0x5d, 0x49, 0x1e, 0xbf, 0xae, 0xe0, 0xff, 0x71, 0xdc, 0xc5, 0x37, 0x4e, 0xf5, 0xa7, 0x51, 0x05, 0x00, 0x3b, 0xb8, 0xa7, 0xd5, 0xc8, 0x27, 0x50, 0x32, 0xe9, 0x62, 0x0a, 0x0a, 0x8f, 0x24, 0xee, 0x20, 0x45, 0x58, 0x8d, 0xd5, 0xb8, 0x8b, 0x8e, 0x3e, 0x76, 0xa2, 0x98, 0x7a, 0xf6, 0xc8, 0x72, 0x43, 0xd9, 0xab, 0x68, 0xc2, 0x6f, 0xe8, 0xf1, 0xa8, 0x7d, 0xc3, 0x90, 0x7a, 0x3d, 0x1c, 0xf8, 0x2c, 0xa7, 0x9f, 0x73, 0xf2, 0xef, 0x3a, 0x84, 0x53, 0x4f, 0xd4, 0xcb, 0x7f, 0x06, 0x3c, 0x2a, 0xe2, 0xa1, 0x5f, 0x26, 0xf9, 0x79, 0xbf, 0x90, 0x65, 0x7d, 0x20, 0x64, 0x3e, 0x31, 0x84, 0xf1, 0xa9, 0xf7, 0x5a, 0x3a, 0xad, 0x8e, 0xf3, 0x9d, 0x42, 0xd8, 0x35, 0xb2, 0xab, 0xe0, 0x93, 0x76, 0x06, 0x1b, 0x3d, 0xa9, 0x22, 0xee, 0x93, 0x74, 0x90, 0x71, 0xe0, 0x4f, 0xfd, 0x73, 0x45, 0x22, 0xbf, 0xbe, 0xf3, 0xaa, 0xad, 0x9b, 0x9d, 0x1f, 0x34, 0x99, 0x2e, 0x14, 0xa7, 0x8b, 0xb7, 0x9e, 0xd7, 0xd0, 0xab, 0xb8, 0xe4, 0xd7, 0x4e, 0xe6, 0x52, 0xe1, 0x6b, 0x19, 0x5f, 0x09, 0x45, 0xd3, 0x94, 0x82, 0xd1, 0x8b, 0x9b, 0x21, 0x22, 0x53, 0x50, 0x1b, 0x25, 0xb8, 0x1a, 0x0f, 0x8e, 0xea, 0x7c, 0x47, 0x12, 0x1d, 0xe7, 0x3b, 0xd7, 0x2e, 0xd3, 0x56, 0x29, 0x8a, 0x0e, 0xfd, 0x6e, 0x4c, 0x53, 0xce, 0x5c, 0xa5, 0x1e, 0x25, 0x69, 0x81, 0xbf, 0xe5, 0x83, 0x67, 0xad, 0x75, 0x02, 0xa1, 0x1e, 0x08, 0xdb, 0x9e, 0xd4, 0x22, 0x16, 0x94, 0x3a, 0x58, 0x82, 0x69, 0xaf, 0x57, 0xa7, 0xd4, 0x22, 0x27, 0xfc, 0xc0, 0xdf, 0xb1, 0x5a, 0xf1, 0xa8, 0x7f, 0xb1, 0xe9, 0x08, 0xc4, 0xfa, 0x0d, 0xe4, 0x9c, 0x6c, 0x04, 0x53, 0x94, 0xf3, 0x60, 0xb0, 0x6d, 0xde, 0x80, 0xed, 0x1d, 0xd7, 0xb4, 0x29, 0x17, 0x19, 0xa3, 0x85, 0xcc, 0xdd, 0xea, 0x34, 0x72, 0x15, 0x06, 0xd2, 0x04, 0x5d, 0x74, 0xf7, 0x8a, 0x2f, 0x16, 0x0b, 0x9a, 0x56, 0xd9, 0x5c, 0x1f, 0xa5, 0x95, 0x6d, 0x59, 0xe8, 0x35, 0x92, 0x25, 0x1b, 0x17, 0xb9, 0x7f, 0xda, 0xb6, 0x8b, 0x45, 0x19, 0x86, 0xb4, 0x3d, 0x15, 0x1f, 0x7e, 0x5a, 0x8a, 0x9e, 0xa5, 0x3b, 0x27, 0x48, 0x67, 0xf5, 0x3f, 0x71, 0xda, 0x12, 0xc1, 0x9d, 0x82, 0xda, 0x6a, 0xe4, 0x23, 0xd1, 0x39, 0x9b, 0xd4, 0x80, 0x24, 0x30, 0x55, 0x78, 0x09, 0x56, 0xa2, 0x95, 0xe7, 0x62, 0xc8, 0x80, 0x4e, 0xf5, 0xf8, 0x77, 0x14, 0xdc, 0xda, 0x51, 0x4a, 0x34, 0x23, 0xbc, 0x6e, 0xd2, 0x6a, 0xca, 0xe2, 0xe2, 0x38, 0xac, 0x9d, 0xcd, 0x5e, 0xbd, 0x21, 0x61, 0x8b, 0xc2, 0xad, 0x2c, 0x1d, 0x6f, 0xb3, 0x28, 0x38, 0x2e, 0x8c, 0x9e, 0x15, 0x1d, 0x6b, 0x44, 0x9d, 0x55, 0x90, 0xa8, 0x37, 0x72, 0xbe, 0xd2, 0xde, 0x50, 0xee, 0x25, 0x76, 0x12, 0x45, 0x87, 0x60, 0x69, 0x44, 0xc2, 0x4c, 0x13, 0x3f, 0x29, 0x4e, 0xa1, 0x10, 0x7e, 0x35, 0x7e, 0x0c, 0x13, 0x18, 0x2d, 0x36, 0x30, 0x31, 0xd2, 0xb3, 0xb5, 0xee, 0xf4, 0x7e, 0x00, 0x46, 0x81, 0x5d, 0x11, 0x4a, 0x12, 0x14, 0xec, 0xfc, 0x71, 0xd8, 0x3f, 0x63, 0x59, 0x06, 0x45, 0xdf, 0x7c, 0x15, 0xea, 0xbb, 0xca, 0xca, 0x30, 0x01, 0xf1, 0xaa, 0xd1, 0x92, 0x20, 0xb5, 0x26, 0x75, 0x11, 0x51, 0x47, 0x70, 0x46, 0x85, 0x74, 0xd5, 0x93, 0x67, 0xb4, 0x9f, 0xdc, 0xd8, 0xbb, 0xbd, 0x20, 0x6e, 0x11, 0xae, 0xb6, 0xb2, 0x71, 0x4e, 0xd7, 0x8c, 0x70, 0xf0, 0x5d, 0xfb, 0x5f, 0xac, 0xca, 0x09, 0x71, 0xfb, 0x8c, 0xff, 0x21, 0x81, 0x80, 0xd5, 0xce, 0x29, 0xb4, 0xec, 0xa8, 0x77, 0x71, 0x00, 0xd0, 0x1a, 0x79, 0x58, 0xbb, 0xc1, 0x8d, 0x3f, 0xd8, 0x30, 0x32, 0xb8, 0x72, 0x93, 0xb5, 0x6e, 0xd7, 0x12, 0x6d, 0xea, 0xba, 0xa5, 0x40, 0x08, 0xd6, 0x2a, 0x68, 0xac, 0xd4, 0xb5, 0x77, 0xb1, 0x6f, 0x27, 0x99, 0x22, 0xd6, 0x02, 0x1a, 0xad, 0x51, 0x7b, 0x28, 0x54, 0x28, 0xd1, 0xd9, 0x66, 0xc1, 0xde, 0x70, 0xae, 0x08, 0xec, 0xdc, 0xea, 0x13, 0xc9, 0x81, 0x7f, 0x07, 0x1e, 0x3b, 0x6a, 0x35, 0xfc, 0xa0, 0x7a, 0x89, 0xb8, 0x86, 0xbc, 0x25, 0xf9, 0xc6, 0x37, 0x49, 0x0f, 0x3f, 0xda, 0x76, 0x86, 0x1d, 0xb3, 0xd3, 0xfb, 0x5b, 0x62, 0xcf, 0x2f, 0x86, 0xcc, 0x08, 0x5a, 0xc4, 0x14, 0x6c, 0xc2, 0x16, 0xc7, 0x9d, 0x8b, 0xda, 0x56, 0x9a, 0xd1, 0x94, 0xca, 0x9d, 0xf4, 0xed, 0xb3, 0x3f, 0x33, 0xfc, 0x61, 0xe2, 0x7d, 0xc5, 0x57, 0x50, 0x83, 0xff, 0xfd, 0xa0, 0x12, 0x1b, 0x95, 0x5a, 0xa0, 0x81, 0x70, 0xdb, 0x25, 0x1d, 0x62, 0xfa, 0x2c, 0x1a, 0x73, 0xeb, 0x29, 0xed, 0xd7, 0x64, 0x0d, 0x96, 0x21, 0xff, 0x18, 0x22, 0xb3, 0xe0, 0xee, 0x75, 0x79, 0x97, 0xee, 0x46, 0xd7, 0x47, 0xbf, 0x6b, 0xdf, 0x08, 0x2b, 0x57, 0xc8, 0x8b, 0x31, 0xe1, 0x9b, 0xfd, 0x55, 0x47, 0x30, 0x2d, 0x3b, 0x72, 0x59, 0xf0, 0x74, 0x7b, 0x5d, 0xc5, 0x98, 0x6f, 0xa8, 0xb5, 0x95, 0x4f, 0xc0, 0x7d, 0x46, 0x5b, 0x7b, 0xef, 0x48, 0x90, 0x70, 0x96, 0x09, 0x70, 0xab, 0x99, 0x21, 0x01, 0xa5, 0xe1, 0xe6, 0x18, 0x73, 0x7e, 0x3a, 0xd7, 0x3d, 0x47, 0xa8, 0x75, 0xf2, 0xc1, 0xb0, 0x3d, 0x3a, 0x43, 0x5e, 0xda, 0xac, 0x57, 0x22, 0xd1, 0x42, 0x62, 0xdb, 0x4f, 0x09, 0x88, 0x35, 0x25, 0x1d, 0xca, 0x35, 0x11, 0xd5, 0x71, 0x12, 0x3f, 0x3b, 0xb0, 0x47, 0x0f, 0xbf, 0x85, 0xe6, 0x19, 0x2c, 0xe0, 0x2f, 0x6f, 0xda, 0x07, 0x61, 0x21, 0x26, 0x39, 0xd0, 0x07, 0x1f, 0x91, 0x38, 0xba, 0x82, 0x2e, 0x51, 0xe4, 0xe9, 0x91, 0xa3, 0xba, 0x3f, 0x46, 0x9c, 0xc6, 0x77, 0xc7, 0xe0, 0xea, 0x7d, 0x9d, 0xe0, 0xa2, 0x6d, 0xc8, 0xae, 0x89, 0x04, 0x61, 0x10, 0x1f, 0x54, 0x7e, 0xd3, 0xc9, 0xbb, 0x56, 0x61, 0x19, 0x15, 0xa6, 0x96, 0x50, 0x31, 0x53, 0xd0, 0x21, 0x82, 0x50, 0x45, 0xb8, 0x17, 0xc2, 0x9a, 0xfb, 0xcd, 0x62, 0xb1, 0x10, 0xc4, 0x23, 0xc2, 0x1f, 0x0f, 0x16, 0xad, 0x59, 0xb0, 0x8a, 0x8e, 0x39, 0xc3, 0x77, 0x92, 0x09, 0xf9, 0x1d, 0x0a, 0xa9, 0x48, 0xe8, 0xbe, 0x8c, 0xe1, 0x97, 0x84, 0x03, 0x63, 0x9d, 0x11, 0xbe, 0x4e, 0xc7, 0x0e, 0x8f, 0xba, 0x20, 0x6f, 0x72, 0x49, 0x12, 0x00, 0xcb, 0x5a, 0xcd, 0x40, 0xee, 0x7f, 0xed, 0x73, 0xe4, 0x32, 0x56, 0xf3, 0x6d, 0xc3, 0x63, 0xc7, 0x41, 0x95, 0x41, 0x76, 0x9b, 0x8a, 0x95, 0x1d, 0xf8, 0xbc, 0x65, 0xc0, 0x1c, 0x6e, 0x35, 0xde, 0x57, 0x42, 0x70, 0x48, 0x06, 0xac, 0x0a, 0x33, 0x5c, 0xa6, 0x64, 0x8b, 0x63, 0xa5, 0x70, 0x8a, 0x3d, 0xcc, 0x15, 0x8a, 0xb0, 0x60, 0xd5, 0x17, 0xe2, 0x7d, 0xad, 0x49, 0x60, 0x07, 0x3c, 0x50, 0x65, 0xe2, 0x28, 0x51, 0x5a, 0x66, 0xbe, 0x71, 0x99, 0x0d, 0xd8, 0x2f, 0x76, 0x6f, 0x04, 0xf6, 0x80, 0x71, 0xe2, 0xf2, 0x04, 0xb9, 0xce, 0x24, 0xd3, 0x65, 0xbf, 0xb1, 0x45, 0xfc, 0x6f, 0x80, 0x7e, 0xa4, 0xbd, 0x03, 0xf0, 0x96, 0x4f, 0x55, 0x21, 0xd0, 0x7b, 0x86, 0xaf, 0x09, 0x68, 0x33, 0x91, 0xea, 0x70, 0x59, 0x9f, 0x7b, 0xc9, 0x6a, 0x55, 0xdc, 0x65, 0xa1, 0xd4, 0x35, 0x16, 0x93, 0x29, 0xef, 0xf6, 0x08, 0xd2, 0x25, 0x06, 0x08, 0x7e, 0x55, 0x15, 0x39, 0x15, 0x5c, 0xe4, 0x68, 0xf8, 0xa1, 0x87, 0x65, 0x8a, 0x90, 0x0e, 0x14, 0xef, 0x4a, 0x65, 0xc1, 0x14, 0x9a, 0x79, 0xb4, 0xef, 0x2c, 0x9c, 0x05, 0x08, 0xf9, 0x2b, 0xb2, 0x38, 0x06, 0x6e, 0xef, 0xb0, 0x4e, 0xbf, 0xbd, 0x3e, 0xfc, 0xef, 0xbe, 0xcc, 0xde, 0xe5, 0x48, 0x2a, 0x17, 0x88, 0xb8, 0x0d, 0x14, 0xe0, 0x09, 0x57, 0xc1, 0x77, 0xa5, 0x98, 0xfc, 0x06, 0x7a, 0xd5, 0x4a, 0x4d, 0x51, 0x89, 0xc8, 0x43, 0x5b, 0xea, 0x65, 0x6f, 0x0d, 0x6d, 0x4f, 0x96, 0x2e, 0x8c, 0xab, 0x96, 0x2f, 0xc7, 0x89, 0x92, 0xba, 0xe9, 0x17, 0x4f, 0x8d, 0x8c, 0x14, 0xde, 0x89, 0xdf, 0x88, 0x7c, 0x06, 0xa7, 0xb3, 0xb6, 0x6a, 0x84, 0x43, 0xd1, 0xfa, 0x76, 0xca, 0x68, 0xf0, 0x9f, 0x6e, 0x57, 0xcd, 0x4b, 0xe3, 0xd8, 0xf0, 0x2d, 0x96, 0xec, 0x68, 0xeb, 0x2b, 0xfd, 0x07, 0xde, 0x2a, 0xc1, 0xb7, 0x13, 0xf5, 0x61, 0x11, 0x95, 0xfe, 0xdb, 0x2c, 0xee, 0x36, 0xa5, 0xb3, 0xeb, 0xc9, 0x93, 0x3b, 0xa0, 0x08, 0xfa, 0xd3, 0xac, 0xa6, 0x16, 0xdc, 0xbe, 0x28, 0xa9, 0x1b, 0x58, 0x97, 0xe5, 0x0c, 0xd3, 0x78, 0x8c, 0x79, 0xa4, 0xfe, 0x56, 0x4c, 0xdd, 0x7d, 0x93, 0xa2, 0xf7, 0x22, 0x11, 0x20, 0xce, 0xe2, 0x40, 0x8a, 0xed, 0xb0, 0x94, 0x91, 0x0c, 0xf3, 0x2b, 0xed, 0xd7, 0x37, 0xb0, 0xac, 0xf1, 0x22, 0x7f, 0xca, 0x39, 0xaa, 0x09, 0x01, 0x4c, 0x86, 0x7a, 0xe2, 0x4b, 0xe2, 0x9a, 0x25, 0xde, 0x57, 0xf1, 0x3e, 0x78, 0x1a, 0x2f, 0x31, 0xdd, 0x74, 0xcb, 0xa6, 0xe2, 0x72, 0xe9, 0x40, 0x74, 0xdd, 0x81, 0x2b, 0xdc, 0x6c, 0xbe, 0xf4, 0x41, 0x39, 0xa4, 0x9e, 0x6f, 0x72, 0xf6, 0xf2, 0xd7, 0x51, 0x57, 0x16, 0xd6, 0x4e, 0xaf, 0x61, 0x3a, 0x93, 0xd0, 0x6e, 0x02, 0xb0, 0x5a, 0x6f, 0x65, 0x90, 0xdb, 0xc4, 0x16, 0xab, 0x3b, 0xcd, 0xc7, 0x7e, 0x58, 0xfc, 0xec, 0x38, 0xed, 0x2e, 0xc1, 0xb7, 0xb8, 0x3b, 0x8e, 0xb2, 0xdc, 0xcb, 0x29, 0x38, 0x84, 0x6c, 0xbd, 0x59, 0xc9, 0xe2, 0xcb, 0x23, 0xd6, 0xbe, 0x6e, 0xd0, 0x49, 0x33, 0xe3, 0x3d, 0xdd, 0x24, 0x48, 0x9e, 0x46, 0x81, 0xa4, 0x71, 0x5d, 0xd4, 0x28, 0xb0, 0x7d, 0x17, 0xb5, 0x4b, 0x2d, 0xc9, 0x9e, 0xd5, 0xff, 0x41, 0xae, 0x7d, 0xb8, 0x41, 0x6d, 0x41, 0xb0, 0xce, 0x9f, 0x5e, 0x7c, 0x3f, 0x0e, 0x0b, 0xcb, 0x95, 0x89, 0x66, 0x8e, 0x0a, 0x2d, 0xaf, 0x5c, 0xed, 0xe3, 0xb4, 0x14, 0xac, 0x2a, 0x8c, 0xc4, 0x33, 0x17, 0x88, 0xc9, 0x74, 0x99, 0x67, 0x38, 0x47, 0x02, 0xc9, 0x7d, 0x75, 0xc3, 0xe7, 0x42, 0x0f, 0x77, 0x80, 0x93, 0x05, 0x24, 0x17, 0x3f, 0xf3, 0xbd, 0x5b, 0x81, 0x3e, 0xeb, 0xe7, 0xdf, 0x60, 0x0c, 0x2b, 0x53, 0x80, 0x7d, 0xaa, 0xa9, 0x46, 0x14, 0x67, 0x28, 0xed, 0xf1, 0x99, 0x74, 0x9a, 0x77, 0xa6, 0xb3, 0xec, 0x95, 0x4f, 0xef, 0xd4, 0x4a, 0x28, 0xbb, 0xa7, 0x68, 0x4c, 0x1a, 0x71, 0x98, 0x4e, 0x9c, 0x8d, 0x9e, 0x73, 0xca, 0x72, 0xde, 0x1e, 0xc4, 0xd0, 0x1f, 0x8b, 0x29, 0xdc, 0x90, 0xc0, 0x37, 0xe7, 0x08, 0xc1, 0x34, 0x36, 0x92, 0x04, 0x0c, 0x0e, 0x29, 0x24, 0x3b, 0x0e, 0xc0, 0xd9, 0xed, 0xc2, 0x86, 0x28, 0x64, 0x74, 0x67, 0xd7, 0x9b, 0x45, 0xd6, 0x24, 0x29, 0x7d, 0xca, 0xb7, 0x67, 0x20, 0x06, 0xd4, 0xd5, 0xc2, 0x9e, 0xd5, 0xba, 0x9b, 0xb7, 0xd8, 0x0b, 0xde, 0x8e, 0xb5, 0x8e, 0x47, 0xbc, 0x33, 0x3f, 0xf3, 0xb8, 0x7b, 0xf3, 0x75, 0x9d, 0xcc, 0x3b, 0x26, 0x2d, 0x71, 0x8b, 0xbc, 0x16, 0xf0, 0x9c, 0x1f, 0x75, 0x85, 0x0e, 0x78, 0x99, 0xce, 0x52, 0x8a, 0x09, 0xc8, 0xc7, 0x45, 0xc8, 0xfa, 0x23, 0x98, 0xd7, 0xf0, 0x15, 0x88, 0xfc, 0xeb, 0x29, 0x7f, 0xc2, 0xd7, 0xeb, 0xe6, 0xc1, 0x7d, 0x4f, 0xf5, 0x1f, 0xfa, 0x50, 0xca, 0x57, 0x70, 0xd8, 0xb9, 0x39, 0xfb, 0xe0, 0xe4, 0x33, 0xe7, 0xd8, 0x0b, 0xce, 0x20, 0x49, 0xa5, 0x7b, 0xe9, 0xb9, 0x2f, 0x90, 0xd1, 0xcf, 0xc4, 0x8e, 0xe3, 0xb7, 0xee, 0xa5, 0x1e, 0xc8, 0xbc, 0x7a, 0x25, 0x64, 0x14, 0x27, 0x37, 0x20, 0x4b, 0x83, 0x60, 0x25, 0xf3, 0xa5, 0xf1, 0xd7, 0xf4, 0xa3, 0x2f, 0xb4, 0xdf, 0x9f, 0x48, 0x7e, 0x7e, 0x05, 0x8b, 0x9c, 0xb0, 0x0e, 0xd7, 0xbe, 0x73, 0x89, 0x54, 0xc0, 0x43, 0xda, 0x62, 0xd1, 0xa3, 0x43, 0xcf, 0xd4, 0xf9, 0x62, 0x4d, 0x06, 0x9e, 0xfb, 0x23, 0xe1, 0x36, 0xf8, 0x22, 0x41, 0x3d, 0xae, 0xdb, 0xc6, 0xe3, 0x62, 0x0f, 0x79, 0x1a, 0x0c, 0x67, 0xb2, 0xed, 0x5a, 0x65, 0x39, 0x13, 0xf8, 0x9b, 0xab, 0xc4, 0x0f, 0x1b, 0x1f, 0xcb, 0x0c, 0x2e, 0x0a, 0xdd, 0xa2, 0x49, 0x60, 0x29, 0x12, 0x3c, 0xfc, 0x30, 0xaa, 0xad, 0x42, 0xd7, 0x8b, 0xc5, 0x03, 0xba, 0xb0, 0x29, 0xa0, 0xc4, 0x2c, 0x2c, 0x73, 0xfd, 0xb3, 0x43, 0x6a, 0xa2, 0x5c, 0xb9, 0xf5, 0x7b, 0xa5, 0xa3, 0x23, 0x69, 0xb8, 0x17, 0x08, 0x3f, 0xed, 0x99, 0x61, 0xd2, 0x8f, 0xd6, 0x7b, 0x54, 0xe3, 0x95, 0x50, 0xdd, 0x66, 0xea, 0xf3, 0x4b, 0x57, 0xac, 0x2f, 0x4c, 0x75, 0x2a, 0x6b, 0xb9, 0x0a, 0x1a, 0xd1, 0x26, 0x28, 0xd2, 0xb0, 0xb7, 0x33, 0xbb, 0x1e, 0x35, 0x9f, 0x02, 0xe1, 0x60, 0xfb, 0x90, 0x90, 0x87, 0x2f, 0x3d, 0xf5, 0x57, 0x02, 0x40, 0xb6, 0xf1, 0xdf, 0xea, 0x34, 0x3f, 0xd8, 0x95, 0xb4, 0x87, 0xeb, 0xd7, 0xbd, 0x40, 0x84, 0xfb, 0xc0, 0x25, 0x44, 0xb1, 0xff, 0x89, 0x01, 0x04, 0xa7, 0xea, 0x0e, 0x8d, 0x3f, 0xc8, 0xbc, 0xe6, 0x46, 0xb7, 0x20, 0x62, 0x18, 0xb4, 0x17, 0xfb, 0x12, 0xb5, 0x88, 0x8c, 0xf6, 0x84, 0xe9, 0x41, 0x91, 0xcc, 0x05, 0x4b, 0x9b, 0x74, 0xfc, 0xd8, 0xde, 0x2d, 0x8b, 0x42, 0x9b, 0x47, 0x8d, 0x86, 0x29, 0xc9, 0xc2, 0xf9, 0xdf, 0xc0, 0xd0, 0x36, 0x34, 0xd7, 0x87, 0x5b, 0x25, 0x28, 0x69, 0x75, 0xd7, 0x52, 0x6a, 0x38, 0x7e, 0xcc, 0xf4, 0xf4, 0x7d, 0x79, 0x2e, 0xc4, 0xcf, 0x7c, 0x7e, 0x09, 0xa5, 0x4d, 0x4d, 0x16, 0x50, 0x0c, 0x0a, 0x2d, 0x62, 0x16, 0x71, 0xab, 0x10, 0xd7, 0x0d, 0x7f, 0xdb, 0xdf, 0xfb, 0xe0, 0x70, 0x37, 0xf2, 0x40, 0xcc, 0xf5, 0x80, 0x7b, 0xa3, 0x0e, 0x96, 0x55, 0x03, 0x6c, 0x47, 0x23, 0x35, 0x40, 0xcd, 0xc8, 0xe4, 0x9a, 0xcd, 0xe3, 0x80, 0x37, 0xdc, 0x47, 0xe5, 0x99, 0x41, 0xac, 0x38, 0x5d, 0xfc, 0xa4, 0x12, 0xca, 0x08, 0xd0, 0xe1, 0xa6, 0xde, 0x53, 0x8b, 0x4d, 0x3a, 0x87, 0x54, 0x04, 0x21, 0xef, 0x01, 0x8a, 0x23, 0x6d, 0x3d, 0xf0, 0xde, 0xb5, 0x3d, 0xab, 0xc3, 0x02, 0xa0, 0xe8, 0x1d, 0x08, 0x99, 0x1f, 0x4e, 0x29, 0x4f, 0xeb, 0x5c, 0xeb, 0x84, 0x19, 0xad, 0xaa, 0x75, 0xfe, 0x0f, 0x8a, 0x02, 0x0e, 0xfc, 0xb0, 0x0f, 0xab, 0x1b, 0xb2, 0x2a, 0x3b, 0x09, 0x4b, 0x6e, 0x7d, 0x5a, 0x54, 0xa7, 0x1d, 0xdb, 0xef, 0xb7, 0x86, 0x1a, 0x06, 0x38, 0xf7, 0x29, 0xf4, 0x62, 0xd9, 0x9e, 0x81, 0x2f, 0x50, 0xde, 0x14, 0xbe, 0x10, 0x9c, 0x24, 0xf5, 0x72, 0x9c, 0xf0, 0x6b, 0xc6, 0xbd, 0x70, 0x85, 0xeb, 0x36, 0x8b, 0xdf, 0x1e, 0x20, 0x8a, 0xed, 0x10, 0x35, 0xcd, 0xe2, 0x3b, 0xd7, 0xbc, 0xd0, 0x75, 0x54, 0x01, 0x11, 0xc6, 0x68, 0xf5, 0xe7, 0x77, 0x03, 0x57, 0x5f, 0x6b, 0x4d, 0x44, 0x7b, 0xb3, 0xe7, 0x63, 0x8f, 0x5c, 0x74, 0x61, 0xec, 0x8b, 0x59, 0x9d, 0xbc, 0xcd, 0xc0, 0x24, 0x2d, 0xa8, 0xe3, 0xdf, 0xd2, 0x76, 0x87, 0x0b, 0x46, 0x73, 0xc6, 0xea, 0x12, 0x14, 0x12, 0xb8, 0xd0, 0x9a, 0x77, 0xe1, 0x91, 0xe8, 0x20, 0x71, 0x7d, 0x91, 0x1d, 0xcc, 0xb9, 0x36, 0x64, 0x9f, 0x8e, 0x0f, 0x15, 0x16, 0xc7, 0xc7, 0x02, 0x50, 0x5a, 0x8d, 0x6e, 0x10, 0x4b, 0x68, 0x15, 0xb5, 0xce, 0xca, 0x6d, 0x6c, 0xac, 0x69, 0x2c, 0xa4, 0xe7, 0x4a, 0x0a, 0xc2, 0xa1, 0x1e, 0xc8, 0x16, 0x3a, 0xd2, 0x71, 0x0e, 0xb9, 0x62, 0xe0, 0xaa, 0x6d, 0xee, 0x82, 0x30, 0xd4, 0x0f, 0x5d, 0x21, 0xbb, 0x6b, 0x51, 0x6b, 0xa7, 0x87, 0x9e, 0xe0, 0x74, 0xdd, 0xa7, 0xe7, 0x3c, 0x2f, 0xf6, 0x72, 0x7a, 0x1a, 0x7f, 0x30, 0x6f, 0xee, 0x29, 0x03, 0xc5, 0xbd, 0x8a, 0xb4, 0x73, 0xb2, 0xf2, 0xe6, 0xe0, 0xa4, 0xac, 0x48, 0x4b, 0xeb, 0x80, 0x0f, 0x6a, 0x73, 0x7c, 0xa4, 0x51, 0x0f, 0xf5, 0x99, 0x96, 0x0f, 0xc8, 0xe2, 0xb3, 0x14, 0xe5, 0x42, 0xab, 0x23, 0x0f, 0x03, 0xf1, 0xf9, 0xdd, 0xea, 0x85, 0x9e, 0x05, 0x6a, 0x60, 0x3d, 0xd9, 0x18, 0x12, 0x33, 0x12, 0x5f, 0xaa, 0x66, 0xcd, 0x75, 0xd6, 0xd8, 0xd3, 0x8d, 0x4b, 0x7c, 0x1d, 0x4f, 0x67, 0x48, 0x98, 0x85, 0x15, 0x8b, 0x25, 0x17, 0xf2, 0x81, 0xe4, 0x39, 0xae, 0x24, 0xb2, 0xe3, 0xb4, 0x46, 0xf0, 0x81, 0x0d, 0xdd, 0x87, 0xed, 0x81, 0x9e, 0x28, 0x9a, 0x00, 0xcd, 0xd9, 0x12, 0x41, 0x53, 0xad, 0xa2, 0xa9, 0x11, 0xd2, 0x53, 0x6e, 0x74, 0xd1, 0x1d, 0xfc, 0x49, 0x12, 0x58, 0x98, 0xd3, 0x9f, 0x73, 0x43, 0x1b, 0x29, 0xe8, 0xe1, 0x88, 0x50, 0x6f, 0x9a, 0xaf, 0x1f, 0x73, 0x81, 0x6c, 0xd6, 0xc2, 0x73, 0x32, 0xed, 0x88, 0x42, 0x9f, 0x55, 0x7e, 0x13, 0x54, 0x01, 0x5f, 0x05, 0x03, 0xa5, 0x9c, 0x14, 0xc9, 0xbe, 0x50, 0x3c, 0xbf, 0xd2, 0x76, 0xe1, 0xcc, 0xf9, 0x5a, 0x6e, 0xbd, 0x9c, 0x4d, 0x3d, 0x97, 0x7d, 0x9d, 0xb7, 0x2b, 0xf7, 0xc4, 0xbc, 0xec, 0x88, 0xe0, 0x45, 0xfe, 0x8c, 0x63, 0x47, 0x8f, 0x4b, 0x0c, 0xdb, 0x6a, 0x36, 0x16, 0x9d, 0xc9, 0x6e, 0xaf, 0x51, 0x6b, 0x86, 0xab, 0xcd, 0xe7, 0x8a, 0x7a, 0x13, 0x40, 0x40, 0x57, 0xbd, 0xb9, 0xad, 0xc3, 0x9e, 0xeb, 0xdb, 0x32, 0xa6, 0x14, 0xda, 0x04, 0x06, 0xb2, 0x05, 0xb6, 0x95, 0x51, 0x86, 0x5a, 0x72, 0xa1, 0x1d, 0x44, 0xeb, 0xcb, 0x1d, 0x07, 0x9e, 0x05, 0xb7, 0xa0, 0xde, 0x65, 0x7a, 0xf0, 0x59, 0xf2, 0x1b, 0x70, 0xf7, 0x01, 0x72, 0x20, 0x05, 0xbf, 0xc6, 0xc0, 0x92, 0x0a, 0x4a, 0x43, 0x19, 0x85, 0xe7, 0x81, 0x61, 0xeb, 0x3c, 0x2c, 0xa2, 0xa3, 0xe4, 0x05, 0xe9, 0x95, 0xf7, 0x4f, 0xbd, 0x3d, 0xd3, 0x84, 0x03, 0xfd, 0x1c, 0x48, 0x1f, 0xb8, 0x01, 0x9b, 0x5c, 0x9c, 0xc1, 0x52, 0x8e, 0x3f, 0x6e, 0xc8, 0xf6, 0xee, 0xf2, 0xd1, 0x65, 0x42, 0x4f, 0xef, 0xa4, 0xf3, 0x2b, 0xc9, 0x14, 0xf1, 0x8b, 0xd8, 0x92, 0xb1, 0xdf, 0x64, 0x9d, 0xc5, 0x3f, 0xaf, 0xbb, 0xb0, 0xf4, 0x70, 0x18, 0xf8, 0x3a, 0x82, 0x71, 0x7d, 0x44, 0xde, 0x30, 0x08, 0x81, 0xc7, 0xd9, 0x27, 0x1e, 0x44, 0xa4, 0x39, 0xcc, 0xd3, 0x6c, 0xc5, 0xc3, 0x5c, 0xc7, 0x10, 0x06, 0x64, 0x77, 0xee, 0xe9, 0x83, 0x01, 0xd8, 0xd1, 0x18, 0x9b, 0x3f, 0x3c, 0x3b, 0x4b, 0x20, 0x01, 0xf3, 0x4e, 0xd9, 0xd8, 0xa9, 0xb7, 0x3b, 0x1c, 0xdd, 0x58, 0xe0, 0xd0, 0x18, 0xe5, 0xbe, 0xe1, 0x22, 0x57, 0xfd, 0xaa, 0x74, 0x8f, 0x06, 0xbd, 0xf0, 0x3c, 0xdd, 0xe1, 0xd0, 0xfe, 0xb0, 0x57, 0xdd, 0xcc, 0xb0, 0x62, 0xe1, 0x93, 0x1f, 0x06, 0x5e, 0x1f, 0xaa, 0x0f, 0x80, 0x3f, 0xfa, 0x55, 0x51, 0x24, 0x86, 0x3f, 0x2c, 0x0b, 0xab, 0x86, 0x74, 0x1c, 0xfe, 0x3b, 0x85, 0x91, 0xe1, 0x0c, 0xeb, 0x1a, 0x54, 0xc3, 0xd3, 0x80, 0x0e, 0x0f, 0xbe, 0x89, 0xcd, 0x87, 0x7d, 0x1d, 0xea, 0xec, 0x59, 0xa6, 0x30, 0xae, 0x92, 0xbd, 0xee, 0xb2, 0x0b, 0x02, 0x4b, 0x53, 0x43, 0x4b, 0xda, 0xa7, 0x87, 0x02, 0x6e, 0x03, 0x66, 0xc8, 0x30, 0xc1, 0x66, 0x5e, 0xee, 0x40, 0xf5, 0xc6, 0xb6, 0x2d, 0xa2, 0xa5, 0xa4, 0x01, 0x8d, 0xec, 0xf8, 0xcb, 0x1c, 0xb7, 0x6b, 0x30, 0xf0, 0x76, 0xc4, 0xb0, 0x18, 0x4a, 0xa6, 0x2b, 0x84, 0xb2, 0xac, 0xa3, 0xbc, 0x66, 0xb8, 0x43, 0xd2, 0x83, 0x87, 0xa0, 0x94, 0xe9, 0x89, 0x40, 0x07, 0xe1, 0xf0, 0x59, 0x11, 0x04, 0x07, 0xda, 0x76, 0x58, 0xc6, 0xaf, 0x06, 0xbb, 0xa3, 0x41, 0x14, 0x85, 0xaa, 0x3d, 0x29, 0x69, 0xd0, 0x97, 0xfa, 0x9c, 0x85, 0xce, 0x98, 0x39, 0x88, 0x71, 0xe7, 0xe5, 0xff, 0xe2, 0x51, 0xaf, 0xc7, 0x5a, 0xbb, 0x39, 0x09, 0x2d, 0xb8, 0x1d, 0x0e, 0x50, 0xfd, 0x8a, 0x54, 0x18, 0x16, 0x2e, 0xe1, 0x44, 0x57, 0x59, 0xd7, 0x3e, 0x14, 0x5f, 0x49, 0x9e, 0x15, 0x3e, 0x4d, 0xf0, 0x44, 0x80, 0x52, 0xb7, 0xa9, 0x63, 0xb4, 0xb2, 0x98, 0x38, 0x8e, 0x5d, 0x29, 0x09, 0xd0, 0xbb, 0xe9, 0x7e, 0x91, 0x53, 0xcf, 0x01, 0xa6, 0x78, 0x72, 0x21, 0x73, 0xce, 0x78, 0x34, 0x01, 0x0a, 0x52, 0x41, 0x51, 0xf9, 0x27, 0x1d, 0xf0, 0xc4, 0x0d, 0xd3, 0xcc, 0x72, 0x7f, 0x49, 0x46, 0xae, 0x0c, 0x21, 0x88, 0xcb, 0x4c, 0xde, 0x19, 0x05, 0x18, 0x48, 0xae, 0x0a, 0xfa, 0x11, 0x44, 0xb9, 0xe3, 0xb8, 0x6b, 0x29, 0x1c, 0xae, 0xe5, 0xed, 0x7f, 0xb8, 0x6f, 0x96, 0xe7, 0x94, 0xdf, 0x7a, 0xe5, 0xdf, 0x6f, 0xb4, 0xb5, 0x36, 0x59, 0x6c, 0x70, 0x9c, 0xa4, 0x59, 0x82, 0x1b, 0x3d, 0x83, 0x5f, 0xae, 0x49, 0x4e, 0x72, 0x5f, 0xba, 0xb4, 0x56, 0xad, 0x20, 0xd2, 0x49, 0x30, 0xc2, 0xa6, 0xde, 0x80, 0xee, 0x17, 0xf2, 0x52, 0x8d, 0x35, 0xe0, 0xe4, 0xfa, 0xc3, 0xf9, 0x9c, 0x15, 0xf3, 0x2e, 0xec, 0x93, 0x70, 0x10, 0x78, 0x98, 0xa1, 0xfb, 0x7b, 0x87, 0x2d, 0x8d, 0x66, 0x19, 0xba, 0x5d, 0xcb, 0xac, 0xfb, 0xea, 0x7a, 0xde, 0xe9, 0xd2, 0xea, 0x5b, 0x50, 0x45, 0xda, 0xf3, 0x8e, 0xb8, 0x37, 0xf0, 0x97, 0xde, 0x41, 0xa6, 0x3d, 0xd4, 0xea, 0x4b, 0xaf, 0x9c, 0x7e, 0x09, 0x3f, 0xcc, 0x89, 0x52, 0x68, 0x87, 0xf6, 0x74, 0x0f, 0xad, 0x74, 0x6d, 0x09, 0x4f, 0x1e, 0x00, 0xde, 0x66, 0x5a, 0x08, 0xcc, 0xc4, 0x01, 0x0d, 0x0f, 0x4a, 0xc1, 0x15, 0x60, 0x5c, 0xc0, 0xbc, 0xbc, 0x92, 0x82, 0x87, 0x66, 0xb0, 0x0d, 0x76, 0x2f, 0xd9, 0x4b, 0xd8, 0xf5, 0xff, 0xaf, 0x63, 0x6a, 0x9e, 0x1b, 0x84, 0x16, 0xaa, 0x02, 0xf4, 0xa0, 0xc6, 0xca, 0x8c, 0x49, 0xb6, 0x74, 0x5a, 0xb9, 0x17, 0x7e, 0xf4, 0xfe, 0x4d, 0x08, 0x0c, 0xd2, 0xbe, 0x37, 0x45, 0x1c, 0x3e, 0xd7, 0x45, 0xba, 0xc9, 0x44, 0x0c, 0x7e, 0x78, 0x8a, 0x84, 0x76, 0xae, 0xcb, 0x59, 0x71, 0x92, 0xe1, 0x0a, 0xbe, 0xc3, 0x45, 0x41, 0x37, 0x47, 0x2f, 0x60, 0x7f, 0xc4, 0xff, 0x5c, 0x87, 0xf2, 0xdc, 0xce, 0x57, 0x50, 0x9b, 0x47, 0x0b, 0x16, 0xe2, 0xe4, 0x1b, 0x6b, 0x8d, 0x23, 0xe0, 0xd9, 0x50, 0xf5, 0x54, 0xfe, 0x9e, 0x15, 0x1a, 0x84, 0xca, 0x97, 0xbe, 0x53, 0x6d, 0xc4, 0x3d, 0x04, 0x07, 0x25, 0xc8, 0x99, 0xe9, 0xde, 0xc5, 0x6c, 0x52, 0x3e, 0x17, 0x66, 0xd8, 0x93, 0x9f, 0x71, 0x09, 0x43, 0x02, 0x30, 0x53, 0x18, 0xad, 0xed, 0x21, 0xdc, 0x17, 0xd3, 0x47, 0x26, 0x46, 0x5d, 0xa0, 0x73, 0x95, 0x0e, 0xf5, 0x78, 0xb4, 0x63, 0x21, 0xb7, 0xf0, 0x06, 0x73, 0x51, 0xb5, 0x44, 0x54, 0x1b, 0x51, 0xc1, 0x2a, 0xf3, 0xfa, 0x6a, 0x7c, 0x55, 0x13, 0xac, 0x56, 0x29, 0xab, 0xe3, 0xef, 0xdf, 0x47, 0x16, 0x89, 0xbe, 0xe1, 0xe1, 0x99, 0x79, 0x30, 0xb2, 0x28, 0x04, 0x2a, 0x39, 0x79, 0xa5, 0xc8, 0x19, 0xec, 0x4e, 0x09, 0xe4, 0x22, 0x2a, 0x39, 0x46, 0x62, 0x76, 0x73, 0x80, 0x3b, 0x92, 0x65, 0x18, 0x6b, 0x58, 0x53, 0xcf, 0x00, 0xac, 0x5e, 0xd4, 0xbd, 0x54, 0x07, 0x37, 0xbf, 0x0b, 0xef, 0xa0, 0x61, 0xd0, 0xe0, 0x41, 0x5c, 0x84, 0x11, 0x09, 0x33, 0xb4, 0xa6, 0x1b, 0xce, 0xb4, 0x77, 0x7e, 0x64, 0xed, 0x12, 0x16, 0x9f, 0x77, 0x03, 0xd3, 0xfb, 0xeb, 0x53, 0x28, 0x70, 0x72, 0x4e, 0xbf, 0x50, 0x22, 0x89, 0x6b, 0x72, 0x8b, 0x24, 0x5e, 0x90, 0x8c, 0x4d, 0x9c, 0xee, 0x6c, 0x05, 0xaf, 0x3c, 0x25, 0x27, 0x9c, 0xbe, 0x03, 0xa6, 0x17, 0xaa, 0x6e, 0x16, 0xf3, 0xd2, 0x04, 0x6e, 0xdc, 0x82, 0xec, 0x0c, 0x48, 0xac, 0x66, 0xf9, 0xab, 0x42, 0xa6, 0x6f, 0xea, 0xe4, 0xe2, 0x98, 0x13, 0xbb, 0xaa, 0x99, 0x4b, 0xa5, 0x78, 0xcf, 0x08, 0x92, 0x88, 0x58, 0x80, 0x2e, 0xe9, 0xd6, 0x61, 0xc0, 0xd5, 0x6f, 0xc2, 0x51, 0x3e, 0x19, 0x59, 0x12, 0xa9, 0x14, 0xef, 0xf8, 0x3f, 0xb7, 0x12, 0xa9, 0x21, 0x70, 0x0a, 0x9b, 0xfd, 0x07, 0x0e, 0x7a, 0xdf, 0x22, 0xb7, 0xcb, 0x49, 0x0e, 0xb4, 0xd0, 0x85, 0xbc, 0xc0, 0xab, 0x3a, 0x0a, 0xd1, 0xc5, 0x3e, 0x44, 0x92, 0x71, 0xab, 0xeb, 0x14, 0xcd, 0x35, 0xb5, 0xc0, 0xe9, 0xba, 0xd4, 0x91, 0x2c, 0x1b, 0x7b, 0x80, 0xf3, 0x4b, 0x9f, 0x3f, 0x7a, 0xa5, 0xfb, 0x29, 0x00, 0x83, 0x56, 0x7a, 0x26, 0x0c, 0x08, 0xbb, 0x99, 0x4d, 0xbb, 0x81, 0xf0, 0x8c, 0x6f, 0x57, 0xd8, 0xd8, 0xc1, 0xf9, 0x6e, 0xe5, 0x6c, 0xc3, 0xec, 0x17, 0x10, 0x68, 0x88, 0xdd, 0x32, 0xe7, 0x99, 0x40, 0x84, 0xbb, 0xfc, 0xbc, 0x67, 0x52, 0xb6, 0x4e, 0xaf, 0xc1, 0xda, 0xce, 0xa6, 0xb6, 0xae, 0x7f, 0x53, 0xae, 0x09, 0xe5, 0xfc, 0x68, 0xff, 0xd6, 0xe9, 0x99, 0xc0, 0xd4, 0x6b, 0xe1, 0xbe, 0x9a, 0x1d, 0xfe, 0x0e, 0xf5, 0x6a, 0x40, 0x11, 0xd5, 0x4f, 0x3c, 0x53, 0xa4, 0x62, 0xc5, 0xb3, 0xd6, 0x14, 0x18, 0xc5, 0xc2, 0x33, 0x57, 0x74, 0xb0, 0xb3, 0x39, 0xec, 0x33, 0xad, 0xff, 0xb7, 0xb9, 0xa8, 0xaa, 0x25, 0x60, 0x18, 0x6b, 0xf2, 0x0b, 0x24, 0x5b, 0x23, 0xb6, 0xac, 0x6c, 0x31, 0x06, 0x8b, 0x9f, 0x69, 0x24, 0x19, 0x78, 0x93, 0xcc, 0xf4, 0xb0, 0xd2, 0xa1, 0x01, 0x29, 0xcb, 0xc4, 0xad, 0x27, 0x09, 0xa4, 0x79, 0xbc, 0xa0, 0x18, 0xb5, 0x84, 0x11, 0xab, 0x8b, 0x93, 0x6e, 0x36, 0x40, 0xac, 0xbf, 0xb5, 0xb7, 0xb3, 0xa3, 0x53, 0x37, 0x65, 0x3b, 0xc7, 0x6d, 0x47, 0x43, 0xe3, 0xb5, 0xdc, 0x82, 0x6a, 0x95, 0x1b, 0x65, 0x23, 0x8a, 0x20, 0xe7, 0x2b, 0x08, 0x22, 0xb3, 0x8f, 0xbc, 0xa5, 0x8d, 0x1a, 0x14, 0xf1, 0xee, 0x6c, 0x01, 0xc2, 0xee, 0x4c, 0xfc, 0x41, 0x67, 0x40, 0x47, 0x33, 0x58, 0x5a, 0x75, 0x71, 0x87, 0x54, 0x2c, 0x98, 0x6b, 0xe0, 0x2a, 0x01, 0x48, 0x39, 0x86, 0xf4, 0x9c, 0xfe, 0x38, 0x18, 0xba, 0x40, 0xdc, 0x2e, 0xb5, 0xda, 0xb3, 0xff, 0x7f, 0x00, 0xeb, 0x93, 0x52, 0x1b, 0x20, 0xa4, 0x4f, 0xd4, 0x22, 0x52, 0x66, 0x6f, 0xf9, 0x19, 0x75, 0x5b, 0x26, 0xff, 0xb4, 0x07, 0x2c, 0x12, 0x50, 0xf7, 0x4f, 0x11, 0x56, 0x16, 0x9c, 0x6a, 0xd3, 0x4e, 0x29, 0x64, 0x3a, 0x56, 0x9e, 0x9e, 0x05, 0xcb, 0xf4, 0xb8, 0x9f, 0x83, 0x7d, 0x50, 0x82, 0x1e, 0x25, 0x30, 0x9c, 0xdd, 0xf7, 0xc5, 0xf8, 0xb8, 0xe3, 0xd4, 0x9a, 0xaa, 0xbe, 0x68, 0xab, 0x50, 0x8a, 0x0f, 0xd6, 0xb2, 0xf8, 0x45, 0xf1, 0x61, 0x2b, 0x31, 0xe0, 0xc2, 0xbf, 0x8f, 0xb6, 0xa9, 0x0a, 0xee, 0x1e, 0x29, 0xa1, 0x1b, 0xfa, 0xab, 0x1e, 0xdd, 0x49, 0x3e, 0x21, 0xe2, 0x4e, 0x2e, 0x95, 0xfa, 0xef, 0xd8, 0x35, 0x83, 0x5b, 0xbc, 0x4e, 0x24, 0xef, 0xd4, 0xc6, 0xbf, 0x5b, 0x25, 0x5d, 0xa0, 0x00, 0x93, 0x33, 0xfb, 0x9d, 0xf9, 0x8b, 0x95, 0x2b, 0x79, 0xce, 0xc1, 0x05, 0x11, 0xd3, 0x8e, 0x4c, 0x6f, 0x5d, 0x3f, 0x8a, 0x07, 0xe5, 0xfb, 0x95, 0x62, 0x9a, 0xc6, 0xb7, 0xb9, 0xa7, 0xb0, 0x0b, 0xc2, 0xb4, 0x4c, 0x2a, 0xca, 0xaf, 0x64, 0x07, 0x04, 0xcc, 0xeb, 0x18, 0x21, 0xca, 0x33, 0xb7, 0x20, 0x79, 0x61, 0xc7, 0x68, 0x79, 0x1d, 0x9a, 0x14, 0x44, 0x8e, 0x12, 0x8e, 0x6e, 0x85, 0x07, 0x5f, 0x2c, 0xf8, 0xe9, 0x45, 0x14, 0xb3, 0xa7, 0x86, 0x23, 0x4a, 0xcf, 0x85, 0x04, 0x52, 0xf6, 0x93, 0x8f, 0xd0, 0x5a, 0x07, 0x91, 0xf2, 0xc6, 0x91, 0xcb, 0xfd, 0xb6, 0xcb, 0x3d, 0x87, 0xbc, 0x11, 0xa4, 0xe6, 0x22, 0x93, 0x41, 0xe8, 0xd1, 0xa8, 0xdc, 0xc5, 0x71, 0x66, 0x09, 0x51, 0xd2, 0x6f, 0xaa, 0x76, 0x8b, 0x0d, 0xb5, 0xe2, 0xe1, 0x82, 0x37, 0xfd, 0xea, 0x99, 0x99, 0x1e, 0xf2, 0x81, 0x22, 0xfe, 0x1d, 0xdb, 0xbe, 0x6d, 0x4e, 0x12, 0xfe, 0x43, 0x48, 0xeb, 0x5f, 0x9a, 0x13, 0x5d, 0xcf, 0x3a, 0xa2, 0xa2, 0x6d, 0x55, 0xb2, 0x8e, 0x91, 0x75, 0xf5, 0x20, 0x0c, 0xb2, 0x70, 0x57, 0xb1, 0x28, 0x21, 0x46, 0x14, 0xa8, 0xe6, 0x6b, 0x91, 0xae, 0x9a, 0x3d, 0x90, 0x93, 0x81, 0x04, 0x08, 0x04, 0xe6, 0xed, 0x42, 0xb3, 0x02, 0x5e, 0xe0, 0x4c, 0x20, 0x87, 0x1d, 0xab, 0xff, 0x3a, 0x56, 0x4c, 0x78, 0xfc, 0xca, 0x03, 0x60, 0x5c, 0x9e, 0xed, 0xb0, 0x83, 0x24, 0xa6, 0xe3, 0x0d, 0x5c, 0xbc, 0xa0, 0x17, 0xbb, 0x64, 0x99, 0x99, 0x2c, 0x6c, 0xb3, 0xf7, 0x55, 0x71, 0x67, 0xd2, 0x1b, 0x52, 0x68, 0x24, 0x68, 0xe4, 0x86, 0x8c, 0x2b, 0xe8, 0xd2, 0xe6, 0xa1, 0x3a, 0x03, 0x1f, 0xd4, 0x4b, 0x18, 0x47, 0x61, 0xd0, 0x3f, 0xe8, 0x7d, 0xbc, 0xf6, 0x97, 0x3a, 0x6c, 0x70, 0xc8, 0x07, 0x22, 0x3a, 0xe7, 0x76, 0xb5, 0x1e, 0xa4, 0x43, 0x87, 0x48, 0x8e, 0x91, 0xb6, 0xa7, 0xe3, 0x76, 0x97, 0x96, 0xa6, 0xba, 0x60, 0xbc, 0xf3, 0xdc, 0x24, 0x30, 0x90, 0x56, 0x05, 0xe1, 0xc4, 0x22, 0xa5, 0x36, 0x6c, 0x7d, 0xdd, 0xf1, 0x4b, 0xeb, 0xb2, 0x59, 0xa2, 0x7b, 0x84, 0x98, 0x00, 0x4c, 0x89, 0x62, 0x5c, 0x50, 0x7a, 0xd7, 0x61, 0x50, 0x8c, 0xab, 0x09, 0x31, 0xa2, 0x84, 0x6d, 0x75, 0xc1, 0xa3, 0xdc, 0x05, 0xc4, 0xc7, 0x2a, 0x2d, 0x51, 0x4e, 0x4a, 0xe8, 0x0b, 0x9e, 0x1f, 0x5e, 0x09, 0xc3, 0x90, 0xab, 0x88, 0x59, 0xdb, 0xe2, 0xdc, 0xad, 0x2b, 0x51, 0xad, 0x1f, 0x6c, 0x07, 0x5f, 0xcb, 0x5e, 0x94, 0xd2, 0x68, 0xe8, 0x10, 0x4c, 0x6f, 0xb0, 0x5f, 0xb3, 0x80, 0xe8, 0xb2, 0x00, 0x03, 0x6b, 0x51, 0xf0, 0x0b, 0x08, 0x99, 0xfc, 0x7f, 0x1d, 0x40, 0x8c, 0x7b, 0x68, 0xe1, 0x68, 0xf4, 0x1b, 0xb4, 0x6f, 0x9b, 0x2e, 0x9c, 0x8b, 0x04, 0xf9, 0x68, 0xe4, 0x08, 0x02, 0x52, 0x54, 0x68, 0x14, 0xcc, 0x1c, 0xb2, 0x91, 0x7d, 0xd5, 0x69, 0x08, 0x86, 0xa9, 0x60, 0x0a, 0x09, 0xc2, 0x67, 0x3a, 0xec, 0x03, 0x29, 0xa4, 0xda, 0xf6, 0x55, 0x50, 0x8b, 0x06, 0xfc, 0x16, 0x46, 0xef, 0x3b, 0xb3, 0xa4, 0x72, 0x19, 0x1d, 0x96, 0x4d, 0xb2, 0x14, 0xa9, 0x6a, 0x96, 0xfa, 0x89, 0x57, 0x6c, 0xe4, 0xc4, 0xf6, 0xdb, 0xf1, 0xd1, 0x76, 0xaa, 0xdb, 0x51, 0x81, 0x25, 0xcb, 0x94, 0xb7, 0xc3, 0x72, 0x5f, 0x5c, 0x07, 0x55, 0xed, 0x4d, 0xa4, 0x68, 0x33, 0x39, 0xe4, 0xdf, 0x69, 0x0d, 0x4a, 0x41, 0xc5, 0xb0, 0x77, 0xbe, 0x8a, 0xf1, 0x4a, 0xc2, 0x41, 0xbe, 0x4b, 0xca, 0x46, 0x96, 0x4a, 0x77, 0x87, 0x40, 0x43, 0xe0, 0x89, 0xbe, 0x85, 0x2d, 0xac, 0x7d, 0x13, 0x62, 0xaf, 0xce, 0x4b, 0x78, 0x76, 0x9a, 0xc5, 0xb2, 0x0b, 0x50, 0x7e, 0x2e, 0xe4, 0x23, 0x36, 0xbb, 0x64, 0x73, 0x16, 0xea, 0xa3, 0x88, 0x96, 0x68, 0x72, 0x86, 0x9e, 0x8a, 0x9a, 0x9d, 0xeb, 0x2a, 0x65, 0x81, 0xb5, 0xb2, 0x60, 0x1a, 0x8f, 0x76, 0x5e, 0x7c, 0x8e, 0x47, 0xc0, 0x19, 0xad, 0x44, 0xf4, 0x35, 0x70, 0xf4, 0x3c ],
+const [ 0xa2, 0x83, 0x31, 0xa9, 0x66, 0xb0, 0x86, 0x58, 0x92, 0xc2, 0xc7, 0x6c, 0x12, 0x4c, 0x50, 0xa0, 0x4a, 0x6e, 0xcb, 0xc7, 0x4c, 0x41, 0x01, 0x55, 0x4f, 0x75, 0xf1, 0x20, 0x5d, 0x39, 0x1f, 0x68, 0x4b, 0x5b, 0x2f, 0x15, 0xee, 0xb1, 0xb2, 0x41, 0x8c, 0xb7, 0x40, 0xf6, 0x91, 0x79, 0xc7, 0x39, 0x83, 0xb4, 0x22, 0x47, 0x38, 0x38, 0xee, 0x1e, 0x47, 0x90, 0x99, 0x3f, 0xbc, 0xe5, 0xbb, 0xb3, 0x10, 0x20, 0xaa, 0x4c, 0x58, 0x4f, 0x49, 0x2d, 0xbc, 0x4a, 0x20, 0x8c, 0x2b, 0x96, 0xb2, 0xb7, 0x4d, 0x89, 0x0a, 0x55, 0xb9, 0xaf, 0x98, 0xef, 0x69, 0x6d, 0x3b, 0xaf, 0x6a, 0xe4, 0x9f, 0x67, 0xd8, 0x18, 0xc9, 0xd4, 0x0a, 0x52, 0xf0, 0x25, 0x0a, 0xc3, 0x8f, 0xb7, 0x48, 0x69, 0xb8, 0x23, 0x8f, 0x37, 0xab, 0x7a, 0x37, 0x70, 0xa7, 0xcf, 0x9d, 0x54, 0x00, 0xf6, 0xd0, 0xfe, 0x72, 0x8c, 0x8d, 0x8d, 0xb5, 0x37, 0x6e, 0x82, 0x51, 0x2f, 0x5e, 0x69, 0xb4, 0xfe, 0x50, 0xbc, 0x82, 0x84, 0x31, 0x04, 0x2c, 0x3d, 0x1a, 0x41, 0xc4, 0xc7, 0xcb, 0x8c, 0x10, 0x9e, 0x55, 0xfb, 0xdd, 0x2b, 0x16, 0xc5, 0x95, 0xfd, 0xea, 0xa6, 0x14, 0x56, 0xa0, 0x85, 0xb8, 0xe9, 0xab, 0x55, 0xb7, 0xe2, 0x1a, 0x39, 0xb6, 0x27, 0xcb, 0xeb, 0x97, 0xdd, 0xdb, 0x5e, 0x92, 0x2f, 0x60, 0xa2, 0x87, 0x4a, 0x5b, 0x09, 0x92, 0xac, 0xe8, 0x88, 0xe1, 0x9f, 0xb8, 0x5f, 0xc2, 0x00, 0xc1, 0xfc, 0x00, 0x45, 0x34, 0x1d, 0x70, 0xbf, 0xb0, 0x36, 0xc7, 0x1b, 0xb5, 0x12, 0xae, 0x2f, 0x5b, 0xbc, 0x19, 0xf4, 0x44, 0xa0, 0xd4, 0xce, 0xcf, 0xee, 0x5e, 0x14, 0x8e, 0x3f, 0xfb, 0xcc, 0xfb, 0x7b, 0x05, 0xb6, 0x66, 0xfa, 0x83, 0x8d, 0x32, 0xe9, 0xfd, 0x89, 0x41, 0xf0, 0x8e, 0x28, 0xad, 0x11, 0x3a, 0x2e, 0xb9, 0xd4, 0x82, 0xea, 0x07, 0xa1, 0x36, 0xbc, 0x0b, 0x6d, 0x8b, 0xd4, 0xbf, 0x99, 0x6d, 0x3c, 0x98, 0x16, 0x16, 0x19, 0xb9, 0xce, 0xe0, 0x2e, 0x68, 0x3f, 0x57, 0xa1, 0xbe, 0x69, 0x93, 0x02, 0xa2, 0xeb, 0xc5, 0x89, 0xf8, 0x69, 0x0f, 0x9f, 0x15, 0x30, 0x99, 0xa0, 0x76, 0x1d, 0xe1, 0xe0, 0xb2, 0xbb, 0x52, 0xec, 0xae, 0xab, 0x19, 0x12, 0x10, 0x49, 0x34, 0x23, 0xf6, 0x8c, 0xcb, 0x77, 0xe7, 0x2e, 0xc4, 0x32, 0x0a, 0x0d, 0x92, 0xc6, 0x95, 0xd2, 0x4d, 0xb9, 0x89, 0xd0, 0x08, 0xa9, 0x9d, 0x2f, 0x5f, 0x8d, 0x77, 0x49, 0x4f, 0x3d, 0x22, 0x54, 0x4b, 0x35, 0xbd, 0x42, 0x8b, 0x95, 0x70, 0xe5, 0xa8, 0x6d, 0xa5, 0x57, 0x66, 0x38, 0x74, 0x99, 0xd0, 0xa6, 0x5e, 0x7a, 0x8b, 0x9f, 0x3f, 0xba, 0x64, 0x84, 0x7e, 0x70, 0x2b, 0xb8, 0x87, 0xa9, 0xc4, 0x5f, 0x7b, 0x52, 0x7b, 0x65, 0x25, 0x58, 0x98, 0xc2, 0x31, 0x0d, 0x33, 0xfd, 0x98, 0xce, 0x4a, 0xef, 0x5f, 0xe3, 0x11, 0xca, 0x81, 0xa6, 0x89, 0x5a, 0x2a, 0xe7, 0x54, 0x8a, 0x25, 0x90, 0xc8, 0x29, 0x98, 0x85, 0x42, 0xee, 0xef, 0xce, 0xbd, 0xba, 0x16, 0xf8, 0xa3, 0x1e, 0xeb, 0xb8, 0xe2, 0x1d, 0xf3, 0xd2, 0x43, 0x33, 0x4b, 0x39, 0xf8, 0x96, 0xe2, 0x78, 0x73, 0xbb, 0xe6, 0x50, 0x7f, 0x1c, 0x7c, 0xa3, 0x89, 0x39, 0xb4, 0x91, 0x3e, 0xdc, 0xbc, 0xe0, 0x5c, 0xa2, 0x54, 0xa1, 0xc1, 0xb7, 0x81, 0x10, 0xc9, 0xe1, 0x86, 0xbd, 0xd6, 0xc0, 0x10, 0xe9, 0x30, 0x54, 0xb1, 0x33, 0x10, 0xbf, 0x8f, 0x74, 0xf7, 0x4c, 0x5e, 0xe7, 0x44, 0xb1, 0x8b, 0x8d, 0x06, 0x91, 0xba, 0xcf, 0x0f, 0x45, 0x73, 0x66, 0x4a, 0xdc, 0x18, 0x78, 0x4e, 0x60, 0x1b, 0x03, 0x32, 0x5b, 0x6d, 0x7f, 0xa3, 0x9a, 0x3a, 0xbf, 0x35, 0x31, 0xd3, 0x19, 0xf7, 0xc0, 0xec, 0xc6, 0x4a, 0xf4, 0x07, 0x8b, 0xf3, 0x50, 0x30, 0x99, 0x6e, 0x2d, 0xeb, 0xb3, 0x85, 0xff, 0x6b, 0x8e, 0x22, 0xdb, 0x04, 0x7d, 0x62, 0x36, 0xe3, 0x4e, 0xea, 0xf0, 0xfd, 0x6e, 0x7e, 0x91, 0x45, 0x54, 0xd0, 0xd2, 0x22, 0x1d, 0x95, 0x5f, 0x20, 0x74, 0xde, 0xdb, 0xe6, 0xb5, 0xa6, 0x24, 0x68, 0x52, 0xa7, 0xd9, 0x5d, 0x75, 0x73, 0x1a, 0xf4, 0xe7, 0xbf, 0x8f, 0xc2, 0x30, 0x02, 0xac, 0xff, 0x00, 0x3f, 0x33, 0xf3, 0xcd, 0x1e, 0xfa, 0xab, 0xbe, 0x42, 0xee, 0xf0, 0xc8, 0xd7, 0x58, 0x7a, 0x17, 0x6a, 0x5f, 0x60, 0xaf, 0xfe, 0xce, 0xd3, 0x53, 0x5c, 0x18, 0x0c, 0xa5, 0xaa, 0x9a, 0x83, 0x90, 0x3f, 0x1f, 0x62, 0xe3, 0xb6, 0xa9, 0x39, 0x3e, 0x41, 0x6f, 0xf3, 0x32, 0x40, 0x22, 0x09, 0xa4, 0x13, 0x74, 0xf5, 0x72, 0x2c, 0xdb, 0xea, 0x5a, 0x68, 0x92, 0xc2, 0x17, 0x9f, 0xe2, 0x38, 0xcc, 0x7a, 0x9f, 0x57, 0xa6, 0x84, 0xf5, 0x32, 0xbd, 0x84, 0x65, 0xd6, 0x3c, 0x0b, 0x0a, 0x7d, 0xc2, 0x49, 0x21, 0x04, 0x08, 0x24, 0xc8, 0x9f, 0xc3, 0x8c, 0x06, 0xcc, 0xcc, 0x08, 0x0c, 0x85, 0x7e, 0x95, 0xba, 0xba, 0x5f, 0xb1, 0x65, 0xfe, 0x03, 0xb3, 0xd8, 0x81, 0x2e, 0x5d, 0x98, 0x3e, 0x39, 0xb4, 0x6d, 0x75, 0xb7, 0x0f, 0x1d, 0x5c, 0x58, 0x6f, 0x7b, 0x12, 0x0d, 0x0e, 0xa0, 0xd4, 0x6c, 0x3b, 0x79, 0x73, 0x57, 0x64, 0x82, 0x05, 0xd8, 0x75, 0xd0, 0xdb, 0x50, 0x61, 0x55, 0xb4, 0xd1, 0xfd, 0x60, 0x30, 0xc8, 0x15, 0x63, 0x88, 0xdf, 0xba, 0xf9, 0x7b, 0x21, 0xd9, 0x27, 0x8c, 0x5f, 0x12, 0xe2, 0x6a, 0xd3, 0xc6, 0xd2, 0xb0, 0x04, 0x72, 0x56, 0xce, 0xe9, 0x3c, 0xc8, 0x47, 0x51, 0xcc, 0x02, 0x1e, 0x83, 0x5d, 0x21, 0x8a, 0x21, 0x14, 0x89, 0xf1, 0x52, 0x90, 0x29, 0x14, 0x1f, 0xc2, 0x00, 0x88, 0x1e, 0xff, 0xdf, 0x65, 0x4e, 0x53, 0x71, 0x42, 0x43, 0x19, 0x7a, 0x60, 0x83, 0xc8, 0x5c, 0x25, 0x2f, 0x10, 0xdf, 0xcc, 0xe6, 0x26, 0x31, 0x5c, 0xe6, 0x5c, 0x2c, 0xd6, 0x74, 0xf4, 0xd8, 0xb3, 0x7f, 0x36, 0x31, 0x8d, 0x80, 0xc0, 0x2a, 0x1d, 0xa4, 0x1e, 0xf1, 0x65, 0x2d, 0x9a, 0x75, 0x2e, 0x15, 0x55, 0x26, 0xb5, 0xf5, 0x97, 0xfb, 0xa2, 0x26, 0x64, 0xba, 0x39, 0x26, 0x50, 0x74, 0xd4, 0x3d, 0x94, 0x4e, 0x91, 0x60, 0x60, 0x88, 0x48, 0x55, 0x73, 0xb7, 0xc0, 0x18, 0xea, 0x55, 0x22, 0x7e, 0x55, 0x7c, 0xad, 0x18, 0x10, 0xef, 0xac, 0x5a, 0xd1, 0x5a, 0xa5, 0xfc, 0x7d, 0xdb, 0xd4, 0xa1, 0x40, 0xc0, 0xd7, 0xb7, 0xdc, 0x93, 0xab, 0x9e, 0x41, 0x54, 0xd7, 0x0c, 0x5f, 0x05, 0xe7, 0xb0, 0x38, 0x6c, 0x1c, 0x15, 0x39, 0x14, 0x62, 0xca, 0xca, 0x95, 0x82, 0xc0, 0x24, 0x15, 0x99, 0xf3, 0x62, 0x0f, 0xc9, 0x4c, 0xdb, 0x53, 0x2e, 0xc6, 0xb0, 0x4e, 0x14, 0xd1, 0xa1, 0x8c, 0x67, 0xf4, 0x25, 0x7b, 0x6a, 0xb5, 0xb9, 0x72, 0xac, 0xbd, 0x78, 0xf1, 0x39, 0x38, 0xec, 0x2b, 0x0d, 0x7b, 0x24, 0xc1, 0xce, 0xe9, 0x06, 0xd1, 0xba, 0x17, 0xe7, 0x2f, 0xde, 0x2e, 0x59, 0xf2, 0x88, 0x91, 0x44, 0x33, 0x00, 0xc0, 0x39, 0x11, 0x73, 0x7d, 0x02, 0xf8, 0x30, 0x2d, 0x7e, 0x24, 0x17, 0x80, 0xac, 0x60, 0x4d, 0x54, 0x05, 0x14, 0x35, 0xd7, 0x0f, 0x7e, 0x9c, 0xec, 0x2f, 0x40, 0x34, 0xd1, 0xbe, 0x1b, 0x44, 0xfe, 0x60, 0xfa, 0x9d, 0x50, 0x91, 0x32, 0xd0, 0x66, 0x81, 0x08, 0x9e, 0x4c, 0x22, 0x74, 0xb0, 0x56, 0x7f, 0x24, 0x89, 0x4f, 0x4f, 0xc4, 0xb8, 0xd3, 0xca, 0x7d, 0x52, 0xfa, 0xbb, 0xbb, 0x9f, 0x37, 0xd7, 0x34, 0x14, 0x7f, 0x4d, 0x26, 0x81, 0xad, 0x9e, 0xdf, 0x8c, 0x25, 0xaf, 0x83, 0x5e, 0xb7, 0x1d, 0x0a, 0x9c, 0xc7, 0xd0, 0x88, 0x99, 0xab, 0xd3, 0xb1, 0xca, 0x55, 0x62, 0x9c, 0x7a, 0x32, 0x45, 0xc7, 0xbe, 0x51, 0x5d, 0x5c, 0xac, 0xc8, 0x7d, 0xb2, 0xc8, 0x54, 0x7b, 0x17, 0xbf, 0x3f, 0x86, 0xcd, 0x58, 0x87, 0xb9, 0x52, 0xa7, 0x3c, 0xf1, 0xe4, 0x84, 0x2a, 0xdc, 0x45, 0x3b, 0xb8, 0x53, 0xbc, 0x85, 0x10, 0xea, 0x5c, 0xb7, 0x80, 0xc5, 0x88, 0x3a, 0x20, 0xad, 0xb7, 0x3b, 0xb6, 0x62, 0x75, 0xa3, 0xd6, 0x33, 0xab, 0x4a, 0x4e, 0xcd, 0x1f, 0x67, 0xc1, 0x51, 0x3e, 0x4c, 0x91, 0xa9, 0x1a, 0x50, 0x02, 0x1b, 0xaf, 0x0c, 0x9d, 0x1e, 0x6a, 0xca, 0xd3, 0x6d, 0xec, 0x3a, 0xe3, 0x5b, 0x0b, 0x67, 0xfe, 0x66, 0x19, 0xea, 0xa8, 0x0e, 0x69, 0x5d, 0x61, 0xe8, 0x10, 0x13, 0x85, 0xee, 0xe9, 0x06, 0x71, 0x19, 0xdc, 0x11, 0xe7, 0x32, 0x5f, 0x60, 0xb4, 0xe5, 0x3c, 0x24, 0x8f, 0x17, 0x95, 0x8b, 0x45, 0x79, 0x26, 0xef, 0x13, 0x5d, 0xcb, 0x4e, 0x53, 0xc9, 0x42, 0xfa, 0x5c, 0xca, 0x31, 0x91, 0xa3, 0x0b, 0x6b, 0x30, 0x26, 0xa6, 0x6f, 0xe4, 0x0a, 0x3a, 0x32, 0x61, 0x82, 0x3e, 0x1e, 0xf7, 0xf4, 0x95, 0x5a, 0xc1, 0x57, 0x62, 0x4c, 0x20, 0xe0, 0x1d, 0x5c, 0x67, 0xdd, 0xe7, 0xfb, 0xd8, 0xe1, 0x1a, 0xe4, 0xd0, 0x21, 0x25, 0xa2, 0x3e, 0x1e, 0x97, 0x53, 0x59, 0x84, 0x79, 0xab, 0x93, 0x52, 0xe1, 0x3c, 0xc8, 0x3c, 0xc4, 0xf4, 0xbc, 0x4e, 0x0c, 0xe7, 0xc4, 0xd1, 0xea, 0x4e, 0xc3, 0x72, 0x6e, 0xd0, 0x58, 0xa1, 0x55, 0x01, 0x56, 0x38, 0x22, 0x29, 0x75, 0x5d, 0x70, 0x46, 0x47, 0xa9, 0x86, 0x54, 0x6d, 0x8a, 0x2c, 0xcb, 0x0a, 0xe5, 0xbd, 0x6a, 0x78, 0x00, 0x7e, 0x33, 0x3a, 0xa0, 0x2e, 0xb7, 0x32, 0x6e, 0xde, 0x93, 0x14, 0x9f, 0x03, 0x3b, 0x1b, 0xd4, 0xca, 0xf6, 0xfb, 0x3f, 0xab, 0x2a, 0x16, 0x08, 0x41, 0xda, 0xf2, 0xef, 0x59, 0x6d, 0xeb, 0x32, 0x49, 0xb1, 0x25, 0xb1, 0x83, 0x1f, 0xc5, 0x50, 0x69, 0x61, 0x61, 0x9d, 0x63, 0x11, 0xb4, 0xb3, 0x2f, 0xc4, 0x97, 0x5e, 0x79, 0x47, 0x2d, 0x7f, 0xac, 0x28, 0x5d, 0xb2, 0x07, 0x78, 0x85, 0x2f, 0xf3, 0xd0, 0x6c, 0xee, 0x94, 0x92, 0x79, 0x0f, 0x9e, 0x71, 0x23, 0x78, 0x6a, 0x34, 0xa9, 0xc0, 0x49, 0xb6, 0x03, 0x4c, 0x18, 0x32, 0x18, 0xb7, 0x14, 0xbd, 0x31, 0x77, 0xf0, 0x14, 0xae, 0xbe, 0x25, 0x98, 0xf8, 0x9f, 0x8a, 0x97, 0xb6, 0x72, 0x24, 0xcd, 0x44, 0x79, 0x3f, 0x2b, 0x60, 0xc4, 0xbd, 0xd7, 0x27, 0x51, 0xaf, 0x73, 0x41, 0x78, 0x22, 0xa2, 0x58, 0x86, 0x3b, 0xc8, 0xce, 0xa9, 0x87, 0x12, 0xaf, 0x0c, 0x8c, 0xb7, 0xe4, 0x42, 0xa4, 0x7d, 0xaa, 0xe8, 0x0b, 0x7e, 0x43, 0x86, 0x36, 0x2c, 0xeb, 0xb7, 0x66, 0x93, 0x0e, 0x8a, 0x7e, 0xde, 0xb8, 0x27, 0x11, 0x1d, 0x4d, 0xb6, 0xc0, 0x45, 0x7a, 0x7c, 0xc3, 0x78, 0x6b, 0x47, 0xc5, 0x87, 0x3f, 0x0d, 0xf5, 0xb6, 0xb9, 0xd0, 0x5a, 0xbf, 0x38, 0xc4, 0x66, 0x19, 0xe9, 0xb4, 0xcf, 0x79, 0x3b, 0xa2, 0x9a, 0x9a, 0x93, 0xae, 0x79, 0x3a, 0x42, 0x39, 0x56, 0x65, 0xb4, 0x49, 0x30, 0xf5, 0xe9, 0x2f, 0x26, 0x5a, 0x29, 0x68, 0xd1, 0x97, 0xf4, 0xc2, 0xd7, 0x8d, 0x39, 0xbf, 0xbd, 0x7c, 0xc8, 0x3e, 0xfd, 0xc7, 0x08, 0x58, 0x59, 0xf7, 0xed, 0x89, 0x6e, 0x03, 0x25, 0x10, 0x8c, 0xcf, 0x92, 0x98, 0xc5, 0xf2, 0xfd, 0x17, 0x44, 0xbc, 0x09, 0xf7, 0xe1, 0x78, 0x65, 0x74, 0xf2, 0xee, 0x46, 0x45, 0x63, 0x2c, 0x15, 0x7e, 0x09, 0x86, 0x64, 0xb5, 0x33, 0xdc, 0x27, 0x63, 0x82, 0x1b, 0x21, 0x8e, 0xfb, 0x06, 0x9c, 0xa5, 0x5b, 0x37, 0x5d, 0xac, 0xaa, 0x60, 0xd7, 0x98, 0x13, 0xd7, 0x9f, 0xfd, 0xf3, 0x52, 0x20, 0xe6, 0x30, 0xef, 0x90, 0x04, 0xcc, 0x77, 0x23, 0x0c, 0xba, 0xe3, 0x7e, 0x5a, 0xf0, 0x1f, 0x6e, 0xda, 0xbd, 0x0f, 0xda, 0x28, 0x5d, 0xd0, 0xf6, 0xf6, 0xcb, 0x40, 0xba, 0xaf, 0xd6, 0xc0, 0x93, 0x59, 0x77, 0x38, 0x58, 0xc0, 0x62, 0x5c, 0x7f, 0xd1, 0xdb, 0x2e, 0x91, 0x44, 0xcb, 0xc4, 0xdb, 0x7e, 0x13, 0x4c, 0x67, 0xb5, 0x20, 0x4d, 0x2a, 0x55, 0xbf, 0x30, 0x7f, 0xa2, 0x33, 0xfe, 0xd4, 0x9f, 0x86, 0x6b, 0xa3, 0x2f, 0x1c, 0x14, 0xa5, 0x7b, 0x8e, 0x05, 0x42, 0x93, 0xb5, 0x7e, 0x4b, 0x58, 0x04, 0xf7, 0xeb, 0x99, 0x1b, 0x61, 0xdb, 0x7c, 0x9a, 0xaf, 0xd6, 0x20, 0x33, 0x95, 0x4d, 0x80, 0x04, 0x8f, 0x5b, 0x9b, 0x23, 0x26, 0xfb, 0xd2, 0x7a, 0x6f, 0x79, 0x91, 0xd5, 0xd4, 0x26, 0x31, 0x39, 0x16, 0x50, 0x1d, 0x78, 0x93, 0x71, 0x34, 0x02, 0xc5, 0xa7, 0x6f, 0xfe, 0x0c, 0x64, 0xc4, 0x99, 0xad, 0x67, 0x4a, 0x9e, 0x1a, 0xeb, 0x9d, 0x48, 0x74, 0x1e, 0x84, 0x54, 0x4e, 0xd4, 0xd1, 0x59, 0xb4, 0x7d, 0x89, 0x5c, 0x6b, 0x54, 0x45, 0x9f, 0x7b, 0xda, 0xd8, 0xbb, 0xeb, 0x83, 0x32, 0xee, 0xcc, 0xaf, 0x85, 0xb6, 0x79, 0xdb, 0xa6, 0x9f, 0x1c, 0x19, 0xb5, 0x59, 0x74, 0xbd, 0x00, 0x0d, 0xd6, 0x5a, 0x25, 0xf1, 0x72, 0xed, 0x77, 0x1b, 0xd8, 0x57, 0xa3, 0x93, 0xbb, 0x11, 0x94, 0xab, 0xf4, 0x1b, 0x93, 0x93, 0xc9, 0x35, 0xb3, 0x28, 0x70, 0x52, 0x6c, 0x0d, 0xcf, 0x4a, 0x86, 0xfd, 0x86, 0xcf, 0x38, 0x5f, 0x2f, 0xa2, 0x92, 0x1b, 0xe4, 0x06, 0x18, 0xad, 0x02, 0x76, 0xb0, 0x78, 0x2d, 0x93, 0xbe, 0x5c, 0x95, 0x60, 0x8d, 0x8a, 0x77, 0xb1, 0xf1, 0x97, 0xe6, 0xe1, 0x2a, 0xd0, 0xcb, 0xc4, 0x0c, 0xce, 0x2b, 0xdc, 0x5d, 0x4a, 0xa8, 0xd0, 0x7f, 0x32, 0x4b, 0x19, 0x4e, 0xfb, 0x80, 0xff, 0x4c, 0x3a, 0x62, 0xc4, 0xfc, 0x6e, 0x39, 0x1f, 0x8b, 0x20, 0x41, 0xec, 0xb5, 0x2f, 0xae, 0x21, 0xe7, 0x65, 0xec, 0x04, 0xa1, 0x4d, 0x2b, 0x9b, 0x1f, 0x49, 0x1b, 0x64, 0x38, 0xdf, 0xf4, 0x47, 0x86, 0x54, 0xba, 0xc9, 0xc7, 0x7c, 0xbf, 0x82, 0x83, 0xd0, 0x69, 0xd1, 0xf0, 0xc1, 0x35, 0xce, 0x12, 0x4c, 0xfc, 0x80, 0x26, 0xcf, 0x76, 0x51, 0x41, 0x1b, 0xfc, 0xbe, 0x35, 0xca, 0x92, 0x53, 0xb4, 0xd3, 0x24, 0xd7, 0xb8, 0x5b, 0x10, 0xc4, 0x21, 0xce, 0xe5, 0xfa, 0xa0, 0x2f, 0x6a, 0xb3, 0xd5, 0xac, 0xe3, 0xba, 0xb4, 0x76, 0x8f, 0xd8, 0x2d, 0xcf, 0x75, 0x8f, 0x0c, 0x65, 0x61, 0x0b, 0x1e, 0xde, 0x29, 0x56, 0x95, 0xb4, 0x34, 0xcb, 0xad, 0x43, 0x3d, 0xcd, 0x90, 0x20, 0x55, 0xb9, 0x77, 0xad, 0x27, 0x18, 0x13, 0xea, 0x80, 0x1a, 0x2b, 0x8e, 0x0f, 0x40, 0x86, 0x57, 0x69, 0x58, 0x0b, 0x9e, 0x4f, 0xae, 0x27, 0x2e, 0x34, 0x81, 0x6f, 0x56, 0xfa, 0xb4, 0x87, 0x3d, 0xfd, 0xc6, 0x42, 0x76, 0x52, 0x04, 0x0a, 0xd4, 0x51, 0xfd, 0x83, 0x80, 0x50, 0x37, 0x6b, 0x48, 0xb2, 0x20, 0xc5, 0x3a, 0x21, 0x47, 0x36, 0x72, 0x17, 0xcc, 0xaf, 0x30, 0xa3, 0x16, 0x4c, 0x2e, 0x6a, 0xc3, 0x7c, 0x30, 0xec, 0xe5, 0x63, 0xdc, 0x08, 0x6b, 0x7c, 0xcc, 0xc2, 0xdd, 0x83, 0xe2, 0x45, 0x4d, 0x92, 0xdb, 0x24, 0x8a, 0x8a, 0x27, 0xe5, 0x96, 0xb4, 0xf8, 0xc0, 0x5a, 0xa8, 0x9a, 0xa4, 0x99, 0x6e, 0x02, 0x7b, 0x23, 0xe4, 0xa9, 0xaf, 0x4b, 0x5f, 0x9b, 0xed, 0x9a, 0x95, 0xca, 0x29, 0xc5, 0xbb, 0xa9, 0xe2, 0xdd, 0xea, 0xf6, 0xa7, 0xc6, 0xc7, 0xd7, 0xda, 0xea, 0x63, 0x29, 0xb4, 0x2e, 0x60, 0x15, 0x89, 0x26, 0x56, 0xe4, 0x4d, 0x84, 0x74, 0x14, 0x58, 0xd7, 0x6b, 0xab, 0x66, 0x72, 0x87, 0xcb, 0xe2, 0xa9, 0x1f, 0x87, 0x64, 0x44, 0x30, 0xf5, 0x78, 0x2d, 0x45, 0x84, 0xa1, 0x6c, 0x9a, 0x90, 0x9d, 0x55, 0x80, 0x34, 0xeb, 0x00, 0x03, 0x60, 0x8b, 0xfa, 0xcb, 0x2b, 0x05, 0x3a, 0x40, 0x6a, 0xac, 0x57, 0xf2, 0x81, 0x24, 0xf8, 0x37, 0x79, 0x22, 0x8b, 0x16, 0x53, 0x73, 0x3a, 0x63, 0x9c, 0x40, 0x1a, 0x2c, 0x42, 0x90, 0xa6, 0x54, 0xa6, 0x0e, 0x6d, 0x7e, 0xf2, 0x0d, 0x07, 0x2c, 0xad, 0xc9, 0x4d, 0x28, 0x8d, 0xef, 0xca, 0x24, 0x8c, 0x60, 0x6c, 0x9d, 0x3d, 0x32, 0x7f, 0x05, 0x61, 0xf8, 0xdc, 0x20, 0xb6, 0x44, 0x5e, 0xaf, 0x0f, 0x6a, 0x96, 0x4c, 0xa9, 0x86, 0xc0, 0x95, 0xbd, 0xc0, 0xf5, 0x8c, 0x52, 0xce, 0xa2, 0x3e, 0x55, 0xbb, 0x38, 0xa3, 0xeb, 0xe7, 0x25, 0xc6, 0x06, 0x50, 0x04, 0x25, 0x37, 0x0f, 0x10, 0x5b, 0xc3, 0x26, 0xdf, 0xfc, 0xf8, 0x78, 0x4d, 0xc1, 0xc1, 0x19, 0xb6, 0xe5, 0x79, 0xc8, 0x68, 0xce, 0xfd, 0xba, 0x57, 0xf0, 0x05, 0x9a, 0x13, 0xef, 0xb4, 0xcd, 0xf8, 0x03, 0x6d, 0xfa, 0xa4, 0xa1, 0xe9, 0xca, 0xaf, 0x58, 0x86, 0xec, 0x96, 0xf9, 0xe2, 0x5d, 0xf7, 0xfa, 0xa9, 0xe6, 0x04, 0x1c, 0xab, 0xe6, 0x32, 0x4c, 0x32, 0x51, 0x31, 0xc7, 0x92, 0xf9, 0x21, 0x82, 0x01, 0x0c, 0x03, 0xc9, 0xa9, 0xde, 0x6d, 0x26, 0xfc, 0xe9, 0x82, 0x84, 0x48, 0x13, 0x22, 0x94, 0x8b, 0x2f, 0x5e, 0x70, 0x88, 0xc5, 0x2f, 0x7f, 0x1a, 0x16, 0x67, 0x98, 0xc9, 0x5b, 0xe7, 0x6a, 0x9b, 0x4e, 0x13, 0x1b, 0x2c, 0xeb, 0x83, 0x2f, 0x01, 0x78, 0xfb, 0xac, 0x1a, 0xc3, 0x9e, 0x7b, 0xc6, 0xab, 0x5e, 0x12, 0xbc, 0xe1, 0xb7, 0x50, 0x66, 0xf0, 0x9d, 0xa8, 0x80, 0x7b, 0xb3, 0x82, 0xe2, 0xc6, 0xbd, 0xde, 0x9a, 0x79, 0x58, 0x3b, 0x3e, 0xa0, 0xe9, 0xb7, 0x81, 0xf5, 0xd3, 0x77, 0x03, 0x62, 0xed, 0x49, 0x6e, 0xc2, 0x33, 0x88, 0xbe, 0xe8, 0xbb, 0x41, 0xe0, 0xe2, 0xeb, 0x93, 0x7f, 0x7e, 0xea, 0x5c, 0x1b, 0x0e, 0x54, 0x12, 0x5b, 0x69, 0x32, 0xee, 0xa4, 0x32, 0x29, 0x50, 0xea, 0x5d, 0xf1, 0x5f, 0xc6, 0xee, 0x09, 0xef, 0xc9, 0x04, 0xa9, 0xa9, 0x11, 0x17, 0xf9, 0x65, 0x19, 0x7e, 0x80, 0xdb, 0xd5, 0x34, 0xdf, 0x7b, 0xff, 0xdb, 0xbf, 0x99, 0xac, 0x01, 0x08, 0xcd, 0x22, 0xa3, 0x53, 0x9a, 0xed, 0xef, 0xa3, 0x4d, 0x30, 0x4e, 0x4f, 0x28, 0x3a, 0xa2, 0x43, 0xc0, 0x59, 0xcc, 0x69, 0xa4, 0xf3, 0x72, 0x61, 0x3f, 0xd2, 0xff, 0x78, 0x00, 0xc0, 0xeb, 0xd8, 0xb8, 0x54, 0x3c, 0xfc, 0x43, 0x0b, 0x4d, 0x67, 0x6a, 0x9a, 0xce, 0x96, 0x08, 0x83, 0x0c, 0x33, 0x6c, 0xe7, 0x72, 0x8b, 0xff, 0x9b, 0x50, 0x42, 0x26, 0x7e, 0xdc, 0x45, 0x6a, 0x09, 0x77, 0x01, 0xd7, 0x27, 0x31, 0xd3, 0xa1, 0x47, 0x8e, 0xbf, 0x0e, 0xb0, 0x8b, 0x64, 0x8f, 0x15, 0xdc, 0x2f, 0x30, 0x6a, 0x78, 0xd0, 0x33, 0xf6, 0x57, 0xea, 0xf8, 0xa8, 0x7a, 0x0f, 0x21, 0xae, 0x2d, 0xeb, 0xf3, 0x44, 0x89, 0xbf, 0xfe, 0xca, 0x3c, 0x12, 0x00, 0x1a, 0x8d, 0xa3, 0x07, 0x18, 0x9a, 0xa1, 0xd6, 0x8b, 0xe4, 0x1e, 0x8a, 0x2b, 0x0e, 0xc2, 0x7d, 0xfa, 0xe2, 0xbc, 0x6b, 0xd8, 0x95, 0xfe, 0xd3, 0x52, 0x4c, 0xaa, 0xa0, 0xbc, 0xde, 0xc7, 0x09, 0x7f, 0xdc, 0x39, 0xb6, 0xb3, 0xcf, 0xf0, 0x24, 0xf1, 0xc0, 0x5f, 0x4a, 0x62, 0xfe, 0x30, 0x7d, 0x1c, 0x1b, 0x36, 0x91, 0xaf, 0x38, 0xa3, 0x41, 0xfa, 0x82, 0x7b, 0xd0, 0x44, 0xfd, 0x48, 0xf1, 0x88, 0x81, 0x10, 0xe5, 0x0f, 0x02, 0x84, 0xe3, 0x44, 0x14, 0x7a, 0xbc, 0xc5, 0xad, 0x9d, 0xbf, 0xb6, 0x2d, 0x63, 0xda, 0x5a, 0x9d, 0x40, 0x03, 0xe4, 0x34, 0x1a, 0xd6, 0x8a, 0x20, 0xfc, 0x80, 0xdc, 0x83, 0x0e, 0xdb, 0x54, 0xbb, 0xc5, 0xda, 0x2e, 0xe6, 0x57, 0x28, 0x79, 0xa5, 0x72, 0x0c, 0x6f, 0x21, 0x2d, 0x90, 0x02, 0x4c, 0x3f, 0xe2, 0xb7, 0x6a, 0x6e, 0xfa, 0xb7, 0xcf, 0x4b, 0x7d, 0x24, 0xea, 0x1d, 0xe2, 0xa9, 0x82, 0x1b, 0xd3, 0x55, 0x40, 0xde, 0xd6, 0xa9, 0x6e, 0x15, 0x2c, 0xef, 0xfe, 0x7b, 0xf9, 0xce, 0xce, 0x06, 0xa6, 0x1c, 0x2a, 0x61, 0x84, 0xf3, 0x93, 0x9d, 0xb2, 0x07, 0xbe, 0x24, 0x40, 0x36, 0xe0, 0xee, 0x94, 0x61, 0x29, 0xf7, 0x0d, 0x7b, 0x8e, 0xf0, 0xe7, 0xdf, 0xcc, 0x34, 0x5f, 0xe7, 0xaa, 0xff, 0x17, 0xba, 0x7e, 0xda, 0xbb, 0x65, 0xf2, 0x5a, 0xe5, 0x2e, 0x08, 0x0a, 0x3e, 0x24, 0x5c, 0xa6, 0xe7, 0xfb, 0xaa, 0x8a, 0x17, 0x17, 0x8f, 0x69, 0x05, 0xe7, 0x94, 0x42, 0x08, 0x74, 0x68, 0x90, 0xfc, 0x3a, 0x6d, 0xc2, 0xe9, 0x36, 0x76, 0xea, 0xdf, 0x40, 0xd0, 0xb9, 0x24, 0x9b, 0x7f, 0xab, 0x92, 0xcb, 0xc9, 0x7f, 0x3a, 0xa6, 0xf9, 0xea, 0x4d, 0xae, 0x5d, 0x8c, 0x3d, 0x9e, 0x91, 0x23, 0x1f, 0x43, 0xff, 0xff, 0x54, 0x8d, 0xa7, 0xb6, 0x68, 0xe6, 0x1c, 0x18, 0x3a, 0xc2, 0xcf, 0x65, 0x5d, 0x78, 0x90, 0xbe, 0xbf, 0x50, 0x52, 0xda, 0x88, 0xdd, 0x2f, 0xfa, 0x45, 0x8d, 0xac, 0x1f, 0x46, 0x7e, 0x3d, 0x7a, 0x44, 0x93, 0x0c, 0x24, 0x48, 0xc8, 0xf6, 0x0f, 0xc7, 0xc2, 0xd6, 0x3d, 0x12, 0xab, 0x07, 0x2f, 0xee, 0x3c, 0x24, 0xa1, 0x7e, 0x1b, 0x12, 0x74, 0x6a, 0x68, 0x41, 0xec, 0x3a, 0x92, 0x2e, 0x1b, 0x03, 0x70, 0x2d, 0x9d, 0x46, 0x8d, 0x65, 0x86, 0x15, 0xc3, 0x1c, 0x99, 0x77, 0x0b, 0x35, 0xbb, 0x0e, 0x93, 0xf6, 0xa7, 0xf7, 0x11, 0x0f, 0xe2, 0xf2, 0x58, 0xd8, 0xf2, 0xc3, 0x28, 0xdb, 0xcb, 0xd8, 0x4b, 0x92, 0x8a, 0x2b, 0xdd, 0x72, 0x65, 0x6a, 0xec, 0x28, 0xe2, 0x56, 0x41, 0x22, 0x48, 0x69, 0x7c, 0x51, 0x53, 0xbb, 0x67, 0x2d, 0x2c, 0x26, 0x84, 0xfa, 0x98, 0xa8, 0xe8, 0x4a, 0x70, 0x0a, 0x4c, 0xc4, 0x51, 0xbf, 0x62, 0x23, 0x94, 0x0f, 0x65, 0x82, 0x81, 0x75, 0xf4, 0xd6, 0xbf, 0x45, 0x20, 0xbc, 0x0f, 0x91, 0xc4, 0x75, 0x3b, 0x4e, 0x15, 0x2e, 0x48, 0xb3, 0x79, 0x85, 0xf3, 0xe2, 0x9d, 0x4a, 0x5c, 0xca, 0xc1, 0x82, 0xfc, 0x4c, 0x57, 0xb2, 0xdc, 0x9c, 0xcd, 0x5a, 0x09, 0xeb, 0xa7, 0xbf, 0x43, 0x43, 0xd0, 0xed, 0xf5, 0xb2, 0x32, 0xfd, 0x6a, 0xaa, 0x84, 0x94, 0x3d, 0xa8, 0x63, 0xac, 0x11, 0x14, 0xa5, 0x97, 0x83, 0x68, 0xea, 0x40, 0x5d, 0x95, 0x73, 0xb5, 0x0c, 0xa3, 0x38, 0xe2, 0x55, 0x97, 0x34, 0x9f, 0x43, 0x99, 0x04, 0xee, 0x64, 0x56, 0xb0, 0x7d, 0x35, 0xa4, 0xc9, 0x73, 0xda, 0x64, 0xb4, 0x69, 0x12, 0xad, 0x45, 0xb5, 0x6b, 0x27, 0x90, 0xef, 0xb2, 0xb4, 0xfb, 0xae, 0xae, 0x56, 0x98, 0x93, 0x0e, 0x4d, 0xb2, 0x89, 0x9f, 0x7f, 0xa6, 0x4a, 0xc2, 0x1d, 0xf4, 0x26, 0x1e, 0x84, 0x96, 0x00, 0x92, 0x61, 0x91, 0x99, 0x6d, 0x19, 0xc9, 0x11, 0xe2, 0x68, 0x19, 0xaa, 0xb6, 0x48, 0xa3, 0xd0, 0x3c, 0x14, 0x65, 0x56, 0x83, 0xed, 0x0e, 0x03, 0xce, 0x5d, 0x0f, 0x4d, 0x44, 0x3a, 0xf4, 0x64, 0xe9, 0xcd, 0xf5, 0x72, 0xcd, 0x34, 0xc8, 0x21, 0x84, 0x05, 0xba, 0x5f, 0xd5, 0x34, 0xfe, 0x5e, 0xb6, 0x37, 0x45, 0xde, 0x79, 0x67, 0x8f, 0xae, 0x40, 0xaa, 0x40, 0x70, 0xb6, 0x4f, 0x76, 0x9e, 0x01, 0x39, 0x9a, 0xca, 0xf2, 0x40, 0x35, 0x2a, 0x7f, 0xd4, 0x05, 0x53, 0x74, 0xe3, 0x51, 0x45, 0x65, 0xfd, 0x79, 0xa8, 0xe7, 0xb7, 0xd1, 0x55, 0x00, 0x4d, 0xaf, 0x18, 0xdb, 0x8b, 0xc3, 0xb4, 0xc0, 0xed, 0xa7, 0x28, 0x44, 0x05, 0xb7, 0x31, 0xbd, 0x1d, 0x23, 0x10, 0xf9, 0x1e, 0x43, 0x8d, 0x30, 0xb0, 0x2a, 0x3c, 0x36, 0xa3, 0x7d, 0xff, 0xf5, 0x8e, 0x86, 0xcc, 0x1b, 0xb5, 0x84, 0xb1, 0x10, 0x30, 0x45, 0x15, 0x2b, 0x4a, 0xf7, 0x40, 0x25, 0x28, 0x3c, 0x1e, 0xce, 0xab, 0x7c, 0x3f, 0xfe, 0x96, 0x7f, 0x23, 0xcf, 0xf4, 0x3b, 0xb5, 0x09, 0xb4, 0xea, 0x15, 0xde, 0x97, 0x60, 0x9a, 0xd8, 0x4c, 0x9c, 0x18, 0x0f, 0xd9, 0x9d, 0x5e, 0x9f, 0x3c, 0x77, 0x03, 0x59, 0x52, 0xa5, 0x63, 0xb9, 0xf9, 0xa1, 0xe4, 0x18, 0x71, 0xb2, 0x7e, 0x23, 0x09, 0x05, 0x7a, 0x8c, 0xf7, 0x00, 0x79, 0x00, 0x87, 0xd3, 0xb9, 0x58, 0x78, 0x50, 0x94, 0x13, 0xa2, 0xfc, 0x49, 0x04, 0xdd, 0x66, 0xff, 0x48, 0x1f, 0xb7, 0x07, 0x7b, 0xe4, 0x8b, 0x62, 0x2b, 0xd3, 0xff, 0x83, 0x8d, 0x9e, 0x0b, 0x55, 0x6f, 0x2a, 0x13, 0x80, 0x6e, 0xf0, 0xb8, 0xe9, 0x69, 0xa3, 0xf4, 0x77, 0x36, 0x12, 0x66, 0x1d, 0x93, 0x51, 0xea, 0x15, 0x5f, 0x13, 0x6d, 0x69, 0x0a, 0x5b, 0x00, 0xb8, 0x4a, 0x54, 0x2a, 0x37, 0x0f, 0x7c, 0x83, 0xf6, 0xba, 0x08, 0x7e, 0x65, 0x89, 0x85, 0x87, 0x16, 0x56, 0xbb, 0x4e, 0xc4, 0x82, 0xd6, 0x62, 0x95, 0x2c, 0xc8, 0x01, 0x9c, 0xa6, 0xe9, 0x2f, 0xa2, 0x29, 0xe0, 0x05, 0x26, 0xc7, 0xc7, 0x4c, 0xa2, 0xa2, 0x8a, 0x4a, 0x10, 0x5c, 0x90, 0xdc, 0xad, 0xce, 0x9e, 0xc5, 0xfd, 0xfd, 0xf8, 0x46, 0x0f, 0x49, 0xc9, 0xef, 0x02, 0xe8, 0xc4, 0xb4, 0xc8, 0x93, 0x0c, 0x43, 0x2a, 0x7f, 0x51, 0x95, 0x0c, 0x8f, 0x3c, 0xc3, 0xf3, 0xc8, 0x0e, 0x1c, 0xc4, 0x05, 0x84, 0x74, 0xcf, 0xec, 0xfd, 0xbe, 0x0b, 0x20, 0xde, 0xde, 0xa3, 0xb8, 0x36, 0xb8, 0xb2, 0xf1, 0x9e, 0x8d, 0x4b, 0x1f, 0x64, 0x87, 0xbd, 0xea, 0xe8, 0x92, 0x15, 0xb6, 0x45, 0x6e, 0xe4, 0x63, 0x34, 0x02, 0x42, 0x37, 0x2e, 0xf4, 0x12, 0x18, 0xd1, 0x76, 0x88, 0xff, 0x85, 0x63, 0xe9, 0xa9, 0x5f, 0x8a, 0x92, 0x90, 0x46, 0x4a, 0x3c, 0x19, 0x54, 0x5f, 0x7e, 0x0f, 0x7e, 0xfb, 0x93, 0x50, 0x78, 0x18, 0x5e, 0xc6, 0xd3, 0x0d, 0xab, 0x99, 0x69, 0x60, 0xb8, 0xa3, 0xfa, 0xdc, 0xf4, 0x25, 0x17, 0xe3, 0x06, 0xb8, 0x3f, 0x05, 0x11, 0x86, 0x49, 0xd1, 0x37, 0xb9, 0x01, 0xea, 0x5c, 0x34, 0x16, 0x5e, 0x2c, 0x81, 0x34, 0x34, 0x5f, 0x0b, 0x6d, 0x44, 0x3b, 0x8e, 0xdd, 0x4c, 0x5b, 0xcb, 0x8e, 0x3f, 0xb0, 0x80, 0x99, 0xe0, 0xc5, 0x97, 0x8e, 0x90, 0x47, 0x9e, 0x16, 0x64, 0xc4, 0x77, 0xd7, 0x7b, 0xb3, 0x51, 0x98, 0x8f, 0xb5, 0xd7, 0xa6, 0xc9, 0x1a, 0xa6, 0x76, 0xda, 0xa7, 0x05, 0x8b, 0x47, 0x96, 0xd0, 0x9a, 0x04, 0xdf, 0xb6, 0xed, 0x45, 0xb6, 0xa5, 0x05, 0x91, 0x55, 0x81, 0x83, 0x18, 0xfb, 0x1c, 0x49, 0x46, 0x35, 0x63, 0xdc, 0x98, 0x5c, 0xd5, 0x0c, 0xaf, 0x5f, 0x3a, 0xd8, 0xa3, 0xc2, 0x91, 0x8c, 0x99, 0xe7, 0x4a, 0x2c, 0x98, 0x8d, 0xb5, 0x15, 0x98, 0x96, 0xbb, 0xe2, 0xdc, 0x0d, 0xcc, 0x8d, 0x82, 0x67, 0x18, 0xd6, 0x59, 0x09, 0x02, 0xe9, 0xf2, 0x0b, 0xd1, 0x3b, 0xfa, 0x3c, 0xa9, 0xb5, 0xc6, 0x66, 0xbb, 0x14, 0x30, 0xd3, 0xb8, 0x90, 0xa2, 0x0f, 0x8b, 0xbb, 0x70, 0xf0, 0x47, 0xad, 0x6b, 0xd4, 0x5e, 0x5e, 0xb3, 0x2a, 0x15, 0x53, 0xcc, 0x34, 0x34, 0x7d, 0xf4, 0x0a, 0x02, 0x5e, 0xb4, 0xe3, 0x70, 0x6d, 0xb6, 0x90, 0x95, 0xbc, 0xd6, 0x49, 0x5a, 0xd8, 0x7b, 0xac, 0x77, 0xf0, 0x28, 0x03, 0x9e, 0x3a, 0x4e, 0xc6, 0xf5, 0x93, 0x65, 0x61, 0xca, 0x66, 0x3a, 0x36, 0x83, 0xce, 0x8b, 0xe6, 0xd3, 0xff, 0xd1, 0xcc, 0x34, 0xe2, 0x5d, 0xcb, 0x91, 0xff, 0xa6, 0x4a, 0x42, 0xa0, 0xe2, 0x7c, 0x3e, 0x33, 0xd3, 0xe5, 0x8c, 0xf1, 0xe4, 0x1a, 0xfb, 0xbd, 0x74, 0xc8, 0x13, 0x4f, 0x72, 0xf7, 0x4b, 0x91, 0x2a, 0x90, 0x7d, 0x49, 0x5e, 0x1d, 0x96, 0xf9, 0x99, 0xd1, 0x92, 0x03, 0xc0, 0xc8, 0xa8, 0x11, 0xea, 0x8f, 0xc1, 0xb4, 0x71, 0xe7, 0x2f, 0x4c, 0x4a, 0xc6, 0x9c, 0x27, 0x91, 0x9f, 0x40, 0xed, 0x68, 0xe3, 0x58, 0x3b, 0x02, 0xc8, 0xd3, 0x8e, 0xfb, 0x49, 0x4e, 0x63, 0xeb, 0x6e, 0x42, 0x9c, 0x3a, 0xcd, 0x7c, 0x26, 0x36, 0x51, 0xce, 0xd9, 0x62, 0x3a, 0x05, 0x9f, 0x11, 0x65, 0x1a, 0xd9, 0x34, 0xce, 0xad, 0xfe, 0x71, 0x53, 0xae, 0x85, 0x75, 0xbb, 0x5e, 0x06, 0x8a, 0xf6, 0x76, 0x9c, 0x6c, 0xa6, 0xa5, 0x8d, 0x58, 0xdf, 0x40, 0x2d, 0x67, 0x2b, 0x36, 0xff, 0x1a, 0xd2, 0x42, 0x1e, 0x36, 0x58, 0x64, 0xdb, 0xd2, 0x46, 0x91, 0xa8, 0xae, 0x2e, 0xaa, 0x35, 0xc6, 0xe9, 0xab, 0xd8, 0x27, 0x23, 0x25, 0x32, 0x02, 0x1a, 0xee, 0x10, 0xff, 0xa2, 0x16, 0x8f, 0xd3, 0x6d, 0x1e, 0x84, 0x15, 0x89, 0x65, 0x1a, 0x4d, 0x2a, 0xe3, 0xbd, 0x4f, 0xaa, 0x19, 0x37, 0xc7, 0xce, 0x48, 0x19, 0x14, 0x4b, 0xe2, 0x5d, 0x5a, 0x88, 0x3e, 0x49, 0xd2, 0xa6, 0x8f, 0x97, 0x65, 0xbe, 0x17, 0xd2, 0x7a, 0x69, 0x98, 0x03, 0x0c, 0x86, 0x0c, 0x8d, 0xff, 0x37, 0x95, 0x56, 0xb4, 0x2d, 0xb7, 0x27, 0xdb, 0x26, 0xc5, 0x56, 0x88, 0xb3, 0x99, 0xa2, 0x89, 0x3f, 0x88, 0x5e, 0xf8, 0x4d, 0x96, 0xd2, 0x0c, 0x01, 0xe5, 0xde, 0x34, 0xe2, 0x74, 0xe0, 0x67, 0xde, 0x06, 0xd8, 0xb5, 0x8f, 0x5f, 0xca, 0x23, 0xbc, 0xb6, 0x64, 0xb5, 0x23, 0x68, 0xe1, 0xcc, 0x75, 0xea, 0x2d, 0xb2, 0xa3, 0x01, 0x4a, 0x74, 0x58, 0x35, 0xf2, 0xf0, 0xc6, 0x83, 0x7e, 0x2e, 0xa6, 0x52, 0x06, 0xf4, 0x7a, 0xa8, 0xca, 0x94, 0x16, 0x9e, 0xd0, 0x09, 0x5e, 0x11, 0xcf, 0x42, 0x51, 0x9b, 0x4c, 0xbe, 0x47, 0xc1, 0x03, 0x59, 0x76, 0x6e, 0x88, 0x66, 0xbb, 0xa1, 0x2e, 0xfd, 0x98, 0x62, 0x28, 0x96, 0x79, 0xfa, 0xee, 0xd7, 0x3b, 0x63, 0xe3, 0xab, 0xee, 0xfe, 0x34, 0x94, 0xda, 0x84, 0x03, 0x42, 0xc1, 0x3f, 0xc5, 0x64, 0x64, 0x7a, 0xe8, 0xbe, 0x48, 0x36, 0xb9, 0x7c, 0xba, 0x1e, 0x86, 0xc6, 0x11, 0xbd, 0xff, 0x94, 0x33, 0xef, 0xe2, 0xc4, 0x5b, 0x95, 0xd8, 0x6a, 0x19, 0x8d, 0x9a, 0x67, 0x9a, 0xe2, 0x57, 0x3d, 0x29, 0x3f, 0x5a, 0x21, 0xf6, 0xaa, 0xe8, 0x52, 0x16, 0x6e, 0x67, 0xaa, 0xcc, 0x59, 0xc6, 0x72, 0x07, 0x28, 0x18, 0x7b, 0x2b, 0x40, 0x82, 0x6a, 0x14, 0x9f, 0x58, 0x54, 0x59, 0x11, 0x83, 0x8b, 0xcd, 0xa7, 0x26, 0xb7, 0x4c, 0x65, 0x81, 0x28, 0xb4, 0x3b, 0x15, 0x6a, 0x31, 0x37, 0x08, 0x1a, 0xbe, 0xf8, 0xcc, 0xf9, 0xe8, 0x66, 0xfc, 0x3f, 0xd5, 0xa0, 0x86, 0x32, 0x86, 0x36, 0x0f, 0xf6, 0x59, 0x99, 0x93, 0xa7, 0xd2, 0xcf, 0x4c, 0xa5, 0x9a, 0x6b, 0xd6, 0x2f, 0xc8, 0xbd, 0x90, 0x34, 0x60, 0x46, 0x45, 0x65, 0x19, 0x6e, 0x0c, 0x8f, 0x64, 0x7a, 0x6c, 0x28, 0xa9, 0xb8, 0xc4, 0x28, 0xd4, 0xfc, 0xea, 0x1a, 0x10, 0x50, 0x13, 0x72, 0xd2, 0xe8, 0xf3, 0x21, 0x1a, 0x54, 0x25, 0x67, 0xf6, 0xf9, 0xcc, 0xe8, 0x47, 0xc2, 0x7b, 0x03, 0xc7, 0x13, 0x52, 0x5f, 0x4b, 0xff, 0x6a, 0xc6, 0x46, 0xba, 0x74, 0x37, 0x8f, 0x51, 0x9c, 0x36, 0x64, 0x98, 0xb4, 0x67, 0xae, 0x64, 0x8e, 0x5b, 0x86, 0xfb, 0xa9, 0xaa, 0xf9, 0xc9, 0x10, 0x42, 0x08, 0x55, 0x80, 0xfe, 0xf3, 0x73, 0xc9, 0x7b, 0xb8, 0xba, 0x76, 0x27, 0xd6, 0x38, 0xb0, 0x9a, 0x56, 0x65, 0x60, 0x2a, 0x0c, 0x56, 0x94, 0xb9, 0x1b, 0x33, 0x24, 0xd2, 0xb7, 0xeb, 0x95, 0xf5, 0x2f, 0x26, 0x3d, 0x2e, 0x2a, 0x7c, 0xa8, 0xec, 0x30, 0xe4, 0x3b, 0x11, 0x6d, 0x6f, 0x17, 0x46, 0xb2, 0x36, 0x41, 0x91, 0xbd, 0x90, 0xff, 0x29, 0xba, 0x89, 0x85, 0x89, 0x0a, 0x90, 0xd0, 0xc3, 0x42, 0x70, 0xd3, 0x17, 0x77, 0x82, 0xd1, 0xc4, 0xb9, 0x20, 0x0a, 0x1e, 0xdd, 0x5c, 0x99, 0xe1, 0x80, 0xf2, 0x9d, 0xc5, 0x48, 0x7c, 0x97, 0x52, 0x6d, 0xe5, 0x13, 0xf6, 0x78, 0x20, 0x8b, 0x55, 0x4b, 0x1a, 0x88, 0xe0, 0x62, 0xed, 0x0a, 0xa9, 0x58, 0x56, 0x2a, 0x75, 0xad, 0x69, 0xfe, 0x13, 0xc6, 0x83, 0xbd, 0xed, 0x35, 0x81, 0x23, 0xdd, 0x3b, 0x2f, 0x17, 0x42, 0x8b, 0x03, 0x8c, 0x52, 0x51, 0x0c, 0xa5, 0xb2, 0x73, 0x25, 0x1c, 0x44, 0x17, 0x6e, 0xe4, 0x40, 0x65, 0xfd, 0x0d, 0x86, 0x8e, 0xd0, 0xe9, 0x32, 0x0d, 0x06, 0x6d, 0x71, 0x2d, 0x4f, 0xd9, 0x94, 0xcb, 0xa2, 0x9c, 0x63, 0x5d, 0x2e, 0x71, 0xb4, 0x33, 0x92, 0xcf, 0x3c, 0xfd, 0x50, 0x80, 0xa4, 0x8e, 0x7f, 0x8f, 0xdf, 0xdf, 0xc1, 0x68, 0xbc, 0x57, 0x75, 0x3b, 0xb7, 0x49, 0x2e, 0xa1, 0x15, 0xbf, 0x63, 0x82, 0x30, 0x76, 0x68, 0x36, 0x0f, 0x29, 0x9c, 0xea, 0x39, 0x12, 0xe5, 0x46, 0xcb, 0xaf, 0x59, 0x4d, 0xc9, 0xc2, 0x3e, 0x84, 0xb2, 0x9b, 0x35, 0x56, 0x57, 0x99, 0xb2, 0xb7, 0xec, 0xef, 0xaf, 0x08, 0x60, 0xa4, 0xa2, 0x3a, 0xea, 0xde, 0xac, 0x37, 0xe5, 0x5f, 0x13, 0x7d, 0xdd, 0x50, 0xf2, 0x0c, 0xea, 0x3d, 0x2f, 0x83, 0x3c, 0x62, 0xae, 0x86, 0xf8, 0x25, 0xc4, 0x62, 0x43, 0xe3, 0xef, 0xf4, 0x9b, 0xef, 0xc4, 0xc7, 0x6e, 0xd8, 0x28, 0x7c, 0xe5, 0xeb, 0xc3, 0x6f, 0x01, 0xf9, 0xb2, 0x97, 0xea, 0x5b, 0x7c, 0xae, 0x84, 0x32, 0x48, 0x92, 0x42, 0xf3, 0x4d, 0xec, 0x3f, 0x24, 0x89, 0x0f, 0x8b, 0x60, 0xb6, 0x23, 0xc2, 0xa1, 0x7a, 0x82, 0xe4, 0xbf, 0xde, 0x62, 0x60, 0x33, 0x01, 0xb5, 0x72, 0x21, 0x0e, 0x4d, 0xaf, 0x96, 0x6b, 0x44, 0xdf, 0x0e, 0x33, 0x9b, 0x0a, 0x39, 0xe7, 0x21, 0xd6, 0xfe, 0x60, 0x96, 0x10, 0xc1, 0x08, 0x11, 0x88, 0xe1, 0x4a, 0x9f, 0x22, 0x85, 0x47, 0x2d, 0x2a, 0x99, 0xcb, 0xa8, 0xe8, 0x13, 0x7f, 0x62, 0x74, 0x7b, 0x60, 0xb8, 0xcc, 0xaa, 0x6f, 0xf2, 0x24, 0xd2, 0xaa, 0x6a, 0x7d, 0xbe, 0x3c, 0xf1, 0x79, 0x5b, 0xf1, 0x6e, 0x6e, 0x78, 0xec, 0xc8, 0xb9, 0xca, 0x9c, 0x06, 0x55, 0x33, 0xec, 0xb5, 0xac, 0x43, 0xba, 0x8a, 0xac, 0x00, 0x8b, 0x49, 0x1e, 0xe2, 0x7d, 0xe5, 0x33, 0x22, 0x7d, 0xe9, 0x60, 0x35, 0xb9, 0x16, 0x6c, 0x93, 0x58, 0x4e, 0xc8, 0xbc, 0x69, 0xb1, 0x1e, 0x7d, 0x1a, 0x05, 0x2c, 0x6f, 0x2b, 0x5b, 0xd3, 0xc2, 0xa2, 0xef, 0x6b, 0x38, 0xbf, 0x51, 0x5a, 0x74, 0x32, 0xc2, 0xe5, 0x75, 0x8c, 0xe1, 0x46, 0x5e, 0xf4, 0x87, 0xfe, 0x78, 0x1b, 0xef, 0x6c, 0x79, 0x72, 0x1a, 0x9f, 0x07, 0x9a, 0x71, 0x69, 0x78, 0x1b, 0xad, 0xb4, 0xdc, 0x5a, 0xf4, 0x19, 0x3d, 0xc5, 0x44, 0xaf, 0x25, 0x51, 0x15, 0x21, 0x61, 0x26, 0x3a, 0x04, 0x05, 0x98, 0x09, 0x67, 0xb0, 0x5a, 0xbb, 0xab, 0x11, 0xee, 0x16, 0x95, 0xaa, 0x60, 0x49, 0xa1, 0xd4, 0x34, 0x17, 0x99, 0x04, 0x9d, 0x37, 0x67, 0x4c, 0xf0, 0xfb, 0x28, 0x25, 0x57, 0x31, 0x81, 0x6b, 0xca, 0x47, 0x36, 0xa9, 0x3b, 0xb2, 0xf8, 0x97, 0x11, 0x8f, 0x7f, 0xe1, 0xd8, 0x8b, 0xd9, 0x2a, 0x37, 0x01, 0x02, 0x51, 0x22, 0x63, 0xb4, 0xf3, 0x50, 0xdb, 0x80, 0x31, 0xf0, 0x32, 0x1e, 0xb3, 0x98, 0xf0, 0x02, 0xec, 0x7e, 0xc5, 0x2f, 0xa0, 0xea, 0x27, 0x50, 0xa4, 0xeb, 0x3d, 0x05, 0xe6, 0x4a, 0xfc, 0x7b, 0xad, 0xbc, 0x90, 0x3f, 0x21, 0x5b, 0xfd, 0x54, 0x0d, 0x57, 0x06, 0x83, 0xe4, 0xe9, 0x4e, 0xf2, 0x02, 0x89, 0xbd, 0xf8, 0x35, 0x61, 0x25, 0x30, 0x7c, 0x01, 0x25, 0xcc, 0x0e, 0x54, 0x4e, 0x2c, 0x9e, 0xd3, 0x85, 0xb0, 0xde, 0xf8, 0xa8, 0xca, 0x42, 0xf6, 0x75, 0x57, 0x06, 0xa7, 0xa7, 0x2f, 0x72, 0xc6, 0x61, 0xfa, 0x5d, 0x5e, 0xd0, 0x46, 0xf0, 0x82, 0x0d, 0xd7, 0xac, 0x3f, 0x40, 0x3e, 0xae, 0xcf, 0x0b, 0xae, 0x32, 0x0f, 0x26, 0x0a, 0x57, 0x34, 0x46, 0x42, 0x22, 0xb9, 0x44, 0xe0, 0xc4, 0x9b, 0x7b, 0xde, 0x20, 0xc9, 0x72, 0xbb, 0x88, 0xd6, 0xbb, 0xce, 0xc7, 0xf2, 0x1a, 0xd9, 0x65, 0x18, 0xea, 0xe1, 0x26, 0x89, 0xbd, 0x3d, 0xd4, 0x78, 0x43, 0xee, 0x3e, 0x07, 0x6d, 0x2e, 0x81, 0x72, 0xd1, 0x4b, 0x86, 0x8a, 0x51, 0xb6, 0xcc, 0x66, 0xf7, 0x57, 0x68, 0x55, 0x24, 0x24, 0x4a, 0x16, 0xea, 0xf2, 0xc1, 0x4c, 0xb6, 0x8b, 0x42, 0x2c, 0x32, 0x00, 0x65, 0x79, 0x69, 0x41, 0x30, 0xb2, 0x2d, 0xea, 0x98, 0x8a, 0xb5, 0x60, 0x45, 0x98, 0x8b, 0x1d, 0x96, 0x50, 0xa6, 0x48, 0xe5, 0x32, 0xd2, 0x89, 0x0c, 0x41, 0x59, 0x1b, 0x27, 0xb7, 0xdc, 0x23, 0x9c, 0xf7, 0x82, 0x40, 0x59, 0xc3, 0x55, 0x63, 0x5d, 0xaf, 0xe8, 0xe1, 0x7a, 0xd5, 0x3d, 0xc6, 0x59, 0xcb, 0xe7, 0x6d, 0xbe, 0xd2, 0x6c, 0x4d, 0x0d, 0x50, 0xed, 0x16, 0x0e, 0x81, 0x09, 0xfd, 0xed, 0x69, 0xfe, 0x53, 0x85, 0x0d, 0x11, 0x5d, 0xdd, 0xe2, 0x31, 0x60, 0xf3, 0x86, 0xd7, 0xfb, 0xb9, 0xae, 0x30, 0xb9, 0x5e, 0x60, 0x7e, 0xe7, 0xce, 0x62, 0xbc, 0xa3, 0x7c, 0xf2, 0x80, 0x36, 0x5f, 0xb7, 0x26, 0xa4, 0x3a, 0xf8, 0x2b, 0x81, 0x21, 0x0c, 0xd7, 0x05, 0x39, 0x11, 0x1f, 0x63, 0xbf, 0xe1, 0xc9, 0x57, 0x4c, 0x42, 0xd1, 0xfe, 0x57, 0x5d, 0x0c, 0xeb, 0xfb, 0x72, 0x0b, 0x77, 0xfa, 0xc9, 0x42, 0x58, 0x03, 0xec, 0x69, 0x76, 0x30, 0x13, 0x23, 0xfa, 0xd3, 0xe0, 0xde, 0xa7, 0x72, 0x4c, 0xfa, 0x6d, 0x10, 0xe2, 0x2d, 0x3b, 0xae, 0x2b, 0x26, 0x16, 0x12, 0x69, 0x70, 0x68, 0xc7, 0x87, 0x9a, 0x9a, 0x65, 0x51, 0x95, 0xe4, 0x13, 0xe1, 0x5d, 0x64, 0x49, 0x59, 0xdb, 0x6e, 0xdb, 0xd8, 0x0b, 0x24, 0x33, 0xa6, 0x5a, 0x46, 0xdd, 0xb2, 0x52, 0x4b, 0x4a, 0x3f, 0x78, 0xb0, 0xcd, 0xda, 0x75, 0x90, 0xea, 0x8f, 0x75, 0x75, 0xd0, 0x5c, 0xcd, 0x6e, 0x24, 0xe6, 0xe0, 0x61, 0x00, 0x6b, 0x43, 0xa3, 0x3c, 0xf8, 0x1f, 0xc6, 0xec, 0xdc, 0xd7, 0xb2, 0x29, 0x5c, 0xeb, 0xf7, 0x15, 0xa8, 0x1d, 0x62, 0x19, 0x0e, 0xd2, 0xcf, 0x71, 0x6e, 0xba, 0x3d, 0xeb, 0xee, 0xb3, 0x28, 0xeb, 0xee, 0xeb, 0x13, 0xb3, 0x3f, 0x45, 0x64, 0xe1, 0x8f, 0xff, 0x74, 0x39, 0x28, 0x91, 0xe7, 0xa5, 0xdb, 0xd8, 0x39, 0x7a, 0x36, 0x73, 0x9a, 0xfd, 0xfe, 0x6e, 0xfc, 0x26, 0xd9, 0x1d, 0x6a, 0xa4, 0x4a, 0x4b, 0x9b, 0x20, 0xe2, 0x95, 0xc7, 0xc6, 0xb5, 0x10, 0xb9, 0x02, 0x0c, 0x32, 0x26, 0x87, 0x59, 0xef, 0x3d, 0x96, 0x70, 0x22, 0x7f, 0x7d, 0xf3, 0x2f, 0xd1, 0x5e, 0x0e, 0xe6, 0xcf, 0x31, 0x65, 0xab, 0x64, 0x0c, 0x4b, 0xd4, 0x97, 0xa2, 0x35, 0x53, 0xa8, 0x0b, 0x6e, 0x95, 0x5c, 0xc3, 0x0c, 0xaa, 0x95, 0xf4, 0x22, 0xa5, 0x25, 0xf8, 0x37, 0x46, 0xe4, 0x19, 0xf7, 0xd6, 0x01, 0x9c, 0x29, 0x53, 0x95, 0xff, 0xe1, 0xcd, 0x7e, 0x7e, 0xf7, 0x10, 0x6a, 0xdc, 0xb7, 0x83, 0x32, 0x5f, 0xda, 0x50, 0x6a, 0x1d, 0xb6, 0xc5, 0x36, 0x76, 0xb1, 0xfb, 0x5e, 0xe2, 0xfb, 0xb5, 0xa5, 0xed, 0x7d, 0x8a, 0x57, 0x7f, 0x0c, 0x47, 0x22, 0x61, 0xe3, 0x8f, 0x26, 0xfd, 0x50, 0xc4, 0x4f, 0x65, 0xad, 0x2b, 0xe3, 0x97, 0x92, 0x4a, 0x57, 0x00, 0x49, 0x95, 0x67, 0x3e, 0x82, 0x4a, 0x66, 0x2a, 0x48, 0x9a, 0xd2, 0x16, 0x34, 0x09, 0x2b, 0x53, 0xe1, 0x17, 0x05, 0xf7, 0x9f, 0x20, 0x5d, 0xdc, 0x6c, 0x81, 0x29, 0xec, 0x20, 0xfc, 0x32, 0x9c, 0xe7, 0x5e, 0x26, 0xb7, 0xf4, 0x5e, 0xe9, 0x5d, 0x74, 0xc9, 0x2d, 0x4b, 0xc1, 0xdc, 0x42, 0x5d, 0xd9, 0xf1, 0x2f, 0x50, 0x0e, 0x5f, 0x01, 0xcd, 0xff, 0x9b, 0x63, 0xa3, 0xc6, 0xa3, 0x6f, 0x55, 0x73, 0x9c, 0xc4, 0xd4, 0xba, 0xb9, 0xd9, 0x8d, 0xe8, 0x60, 0x91, 0xa6, 0x1b, 0x88, 0x0f, 0x85, 0xb3, 0x66, 0xcb, 0x93, 0x04, 0x48, 0xe5, 0x3f, 0x4d, 0xc1, 0xba, 0x45, 0xee, 0x06, 0xb6, 0x30, 0xd5, 0x98, 0x69, 0x1d, 0x3a, 0x23, 0xdc, 0xc3, 0x8c, 0xa6, 0x25, 0xb0, 0xab, 0xd5, 0x39, 0xd5, 0x57, 0xbc, 0x02, 0x45, 0xe9, 0xa4, 0xb1, 0x3a, 0x40, 0x3a, 0x56, 0x59, 0xff, 0xee, 0xad, 0x37, 0xf6, 0x9a, 0x3b, 0x1b, 0xdd, 0x64, 0x9a, 0x06, 0x48, 0xe5, 0x12, 0xf0, 0xd7, 0x8b, 0x69, 0x55, 0xad, 0x3b, 0xfb, 0xf0, 0x24, 0x3b, 0x0d, 0xc7, 0xbf, 0x50, 0x5e, 0x67, 0x61, 0x23, 0xff, 0x71, 0xbc, 0xe9, 0x65, 0x55, 0x0b, 0x43, 0xbd, 0x5e, 0x04, 0x63, 0x7f, 0xef, 0x08, 0x71, 0x46, 0x0c, 0x9e, 0x2d, 0xdf, 0x1b, 0x1f, 0xd5, 0x9f, 0xec, 0xb3, 0x49, 0xfa, 0xf8, 0x7b, 0x6d, 0x52, 0xe6, 0x10, 0xcf, 0x0d, 0x54, 0x2d, 0x8a, 0xea, 0xd3, 0xa8, 0x6a, 0x95, 0x33, 0xa7, 0x50, 0x79, 0x02, 0x10, 0xd8, 0xd5, 0x4f, 0x41, 0x3a, 0x12, 0xb3, 0x02, 0x6e, 0x54, 0x93, 0xb7, 0x94, 0x4f, 0x9f, 0xdb, 0x92, 0x5c, 0x9e, 0xa9, 0xff, 0xcb, 0x6e, 0x1c, 0x40, 0x7b, 0x46, 0x1a, 0xf0, 0xa9, 0x3f, 0xec, 0x86, 0x06, 0x13, 0xf2, 0x31, 0x0c, 0x24, 0x95, 0x07, 0x91, 0xc0, 0x7c, 0x5f, 0x9d, 0xa3, 0x03, 0x7b, 0x79, 0xbd, 0xe9, 0x6b, 0x08, 0x36, 0x48, 0x2d, 0x5a, 0xb0, 0xcb, 0x19, 0x7f, 0xcc, 0x1b, 0x7d, 0x99, 0xef, 0x9a, 0x84, 0x35, 0x46, 0x54, 0x5c, 0xdc, 0x07, 0x33, 0x97, 0xe4, 0xfa, 0x72, 0xd2, 0x8c, 0x39, 0x53, 0x95, 0x49, 0x34, 0x15, 0x7b, 0x5a, 0xf7, 0x20, 0x93, 0xa2, 0xb0, 0x84, 0x05, 0xb7, 0x6b, 0xa1, 0xf9, 0x37, 0x21, 0x27, 0xb4, 0x5b, 0xf1, 0x42, 0x04, 0xce, 0xad, 0x0e, 0xdf, 0xbf, 0x98, 0x51, 0x47, 0x35, 0x6e, 0x69, 0x70, 0xa2, 0xa5, 0x83, 0x25, 0xbc, 0xf3, 0x0e, 0x68, 0x88, 0x10, 0x70, 0x59, 0xb7, 0xbd, 0xf7, 0x59, 0x36, 0x05, 0x12, 0x6e, 0x01, 0xc3, 0xc1, 0xe9, 0x38, 0x64, 0x4a, 0x47, 0x74, 0xee, 0x2e, 0x56, 0x5b, 0x41, 0x5b, 0x99, 0x72, 0x9e, 0xa3, 0xec, 0x33, 0x65, 0x6d, 0x6b, 0x60, 0x23, 0xaa, 0x91, 0x96, 0xcb, 0x0b, 0x9d, 0x25, 0x44, 0x71, 0x3a, 0x1f, 0x24, 0xa6, 0x5e, 0xaf, 0xbc, 0x4a, 0x73, 0xac, 0x54, 0x10, 0xb5, 0x6e, 0xb7, 0x2a, 0xdb, 0xe1, 0xf3, 0x01, 0xf9, 0xd7, 0x5a, 0x2a, 0xa5, 0xa3, 0xcc, 0x95, 0x59, 0xe3, 0x39, 0x08, 0x18, 0x9d, 0x61, 0xcc, 0x54, 0x8e, 0xde, 0xa7, 0x10, 0xbe, 0x65, 0x0a, 0x42, 0x58, 0x49, 0x8a, 0x7b, 0xb9, 0x40, 0x94, 0xc9, 0xc7, 0x6a, 0x5d, 0xdd, 0x84, 0x8f, 0x19, 0x69, 0xe3, 0xa9, 0x6d, 0xcc, 0xda, 0xa2, 0x26, 0xf1, 0xb8, 0x5e, 0x2b, 0x74, 0xb9, 0xfc, 0xb0, 0x07, 0xd7, 0x59, 0xad, 0x15, 0xe4, 0xd6, 0x8f, 0xa5, 0xd6, 0x5c, 0x2d, 0x80, 0x62, 0x9d, 0xfd, 0x96, 0xcc, 0x9c, 0x88, 0x9e, 0xfd, 0x6f, 0x1b, 0xfd, 0xd6, 0x43, 0xc0, 0xe9, 0xc4, 0xa2, 0x6c, 0xce, 0x94, 0xf1, 0x7a, 0xf0, 0x89, 0x3d, 0x58, 0x53, 0xac, 0x37, 0x81, 0xd8, 0x64, 0x7c, 0xab, 0xa8, 0x46, 0x1a, 0x41, 0xd5, 0x2e, 0x50, 0x13, 0x3f, 0x8f, 0x96, 0x4d, 0xb5, 0x07, 0xdd, 0xa5, 0x5d, 0x37, 0x18, 0xd9, 0x56, 0xd1, 0xfb, 0x59, 0x9b, 0xf2, 0x03, 0x40, 0x2b, 0xb3, 0xb6, 0x89, 0x67, 0xfb, 0x2c, 0x80, 0xbb, 0x97, 0xce, 0x76, 0x80, 0x8c, 0x5e, 0xb9, 0x21, 0xab, 0x38, 0xc4, 0x7d, 0x67, 0xd7, 0xb2, 0x8d, 0xe4, 0x9a, 0xf9, 0x47, 0x50, 0xc8, 0x54, 0xc2, 0x76, 0xd3, 0x01, 0x9a, 0x90, 0xd9, 0x2d, 0x96, 0x5d, 0x70, 0xad, 0x88, 0x74, 0xa3, 0xee, 0x75, 0xd8, 0x38, 0x2f, 0xf6, 0xcc, 0x35, 0xed, 0xde, 0xe9, 0xa2, 0x9f, 0x1d, 0x6d, 0x8f, 0xa4, 0xe5, 0xd6, 0x59, 0x7a, 0x0b, 0xb0, 0x2a, 0x30, 0xaf, 0xab, 0xbf, 0x1e, 0x1f, 0xf0, 0x6e, 0xd3, 0xf9, 0xb5, 0x67, 0x4f, 0x90, 0x0f, 0x3a, 0x73, 0x91, 0x08, 0x99, 0xb5, 0xe7, 0xf2, 0x5f, 0x18, 0xdb, 0xfb, 0xd2, 0x5c, 0x80, 0x01, 0x25, 0x71, 0x4e, 0xa7, 0x42, 0x32, 0x0d, 0xa8, 0xc6, 0x50, 0xf5, 0x6b, 0x4c, 0x8c, 0x13, 0xd8, 0xee, 0x2a, 0xee, 0x6b, 0x09, 0xa2, 0x6b, 0x86, 0x41, 0x98, 0xee, 0x0c, 0xc5, 0x0e, 0xc2, 0x2b, 0xd4, 0xd9, 0xbb, 0x79, 0x81, 0x51, 0x19, 0x43, 0xb3, 0x4d, 0xb0, 0x21, 0x6f, 0x4f, 0x46, 0xce, 0x5a, 0xfb, 0x3d, 0x37, 0x79, 0xce, 0x72, 0xd2, 0x3c, 0x0c, 0x64, 0x31, 0xbb, 0xfa, 0x99, 0xd7, 0x3f, 0x4e, 0x3d, 0x4a, 0x04, 0xe4, 0x0d, 0x6a, 0x3d, 0xb2, 0x73, 0x00, 0x59, 0xfe, 0xf2, 0x9a, 0x85, 0xce, 0xc5, 0x97, 0x72, 0xa1, 0xc3, 0x7e, 0x58, 0x5c, 0x86, 0x94, 0x3b, 0x87, 0xcc, 0xad, 0x6d, 0xb9, 0x1d, 0x42, 0x54, 0x51, 0xaf, 0xc4, 0x6d, 0x67, 0x86, 0x30, 0x91, 0x03, 0xdf, 0xe4, 0x77, 0x8c, 0xcf, 0xb1, 0x7b, 0x83, 0x28, 0x31, 0x9d, 0x71, 0x9c, 0x5a, 0xcd, 0x1d, 0x25, 0x54, 0x66, 0x03, 0xa4, 0x88, 0xf8, 0x02, 0xc8, 0xfa, 0x4a, 0x55, 0x31, 0xd8, 0x9f, 0xc4, 0xd5, 0x53, 0x39, 0x1b, 0xa3, 0xad, 0x1c, 0xdc, 0x67, 0x93, 0x14, 0x31, 0xee, 0xae, 0xf9, 0x24, 0x6a, 0x75, 0x32, 0x12, 0x17, 0x45, 0x78, 0x5d, 0x1f, 0xb3, 0xdc, 0x62, 0xbc, 0x21, 0x0c, 0xab, 0x9c, 0x8f, 0xd2, 0x65, 0x89, 0xb4, 0xdd, 0x14, 0x49, 0x4d, 0xc4, 0x85, 0xc3, 0xb6, 0x48, 0x04, 0x64, 0xb7, 0xda, 0xd0, 0xc1, 0xa0, 0x5d, 0xcc, 0x7e, 0x98, 0x2c, 0x77, 0x6e, 0x32, 0x5f, 0x1e, 0xfb, 0x41, 0x4a, 0x51, 0xc9, 0xee, 0x47, 0x93, 0x96, 0x07, 0xb6, 0x55, 0x65, 0x9a, 0x41, 0x26, 0xdb, 0xc3, 0x65, 0x24, 0xe9, 0xc2, 0x2d, 0xb6, 0xab, 0x50, 0x41, 0x7d, 0x90, 0x34, 0x20, 0x87, 0xbc, 0x11, 0xaa, 0xc6, 0xaa, 0x82, 0xe1, 0xc1, 0x16, 0x68, 0xf0, 0x8a, 0x1a, 0x83, 0x6d, 0xf0, 0x97, 0x40, 0xdb, 0xf5, 0xd6, 0xd2, 0x73, 0x83, 0x6f, 0x84, 0x24, 0x5a, 0x6a, 0x4e, 0xd8, 0x4d, 0xa5, 0xa6, 0xf9, 0xae, 0x75, 0x98, 0x33, 0x07, 0x90, 0x19, 0x7c, 0x0a, 0x2b, 0x99, 0x52, 0xcb, 0x5f, 0xd7, 0x44, 0x2d, 0xd1, 0xf9, 0xb4, 0x9a, 0x92, 0xdc, 0xdb, 0xf8, 0x44, 0xa9, 0x0e, 0xd8, 0x7f, 0xa9, 0x3f, 0xf0, 0x73, 0x5a, 0xc6, 0xcb, 0xce, 0xc2, 0x62, 0xbf, 0xe0, 0x03, 0x7a, 0x20, 0xfc, 0x30, 0xa9, 0xb3, 0x22, 0x5f, 0x7a, 0x65, 0xdc, 0xff, 0x70, 0x3d, 0x66, 0x6c, 0x4a, 0x90, 0x11, 0xc1, 0x84, 0x74, 0xe9 ],
+const [ 0x2d, 0x18, 0x66, 0x7c, 0xac, 0x74, 0x03, 0xce, 0x75, 0x17, 0x5d, 0x39, 0x0e, 0x00, 0xc5, 0xd4, 0x00, 0x25, 0xad, 0x5f, 0xda, 0x64, 0xc5, 0xd6, 0x78, 0xbc, 0x63, 0x46, 0x85, 0xbd, 0x28, 0xe0, 0x3f, 0x3d, 0xe1, 0x4c, 0x7a, 0x4d, 0xab, 0x40, 0xe8, 0x6c, 0x5b, 0x50, 0x97, 0xfa, 0x1c, 0x08, 0xbb, 0xef, 0x5a, 0x38, 0xae, 0xcc, 0xdf, 0x8f, 0x35, 0xd2, 0x3c, 0x6b, 0x05, 0x72, 0x6b, 0xf0, 0x86, 0x06, 0xb2, 0x58, 0xd6, 0xbe, 0xca, 0x89, 0x11, 0xdd, 0x41, 0xed, 0xd0, 0x25, 0x1d, 0x7e, 0xef, 0x8f, 0xc2, 0x20, 0x94, 0x40, 0x16, 0x34, 0x6c, 0xb9, 0xe2, 0x6a, 0x38, 0x4e, 0x7c, 0xd6, 0x89, 0xd9, 0xa3, 0x47, 0xc7, 0xaf, 0xaa, 0xd4, 0x78, 0xd3, 0xd9, 0xb7, 0xbf, 0x6a, 0x10, 0x5f, 0x23, 0x6f, 0xad, 0xc0, 0x92, 0xa8, 0xb0, 0xee, 0xa6, 0xd9, 0x1d, 0xea, 0x27, 0x37, 0xa2, 0xbb, 0xd0, 0x1f, 0x7a, 0xc1, 0x56, 0x08, 0x91, 0x47, 0xa6, 0xb7, 0xe9, 0x57, 0x6e, 0xb2, 0x3c, 0xd2, 0xe0, 0xf6, 0xe3, 0xc0, 0xb3, 0xec, 0xf6, 0xe4, 0x6a, 0x9a, 0xb5, 0x93, 0xd8, 0x16, 0x26, 0xc7, 0xe4, 0x41, 0x00, 0x70, 0x8a, 0xb1, 0xc8, 0x0a, 0x22, 0xef, 0x3a, 0x74, 0xe5, 0xe3, 0xea, 0x00, 0xad, 0x8c, 0x2b, 0xc7, 0xfc, 0xf5, 0x30, 0x3f, 0x40, 0x64, 0x71, 0x0f, 0x55, 0xd4, 0x50, 0x21, 0x4c, 0xa5, 0xfd, 0xf9, 0x6b, 0x93, 0x97, 0x46, 0x74, 0xe5, 0x94, 0xb7, 0x2b, 0xe6, 0x62, 0x10, 0x12, 0x99, 0x4e, 0x7d, 0x77, 0xa9, 0xa6, 0x26, 0xb0, 0x9f, 0x1a, 0x03, 0xa6, 0x57, 0x68, 0xf2, 0x90, 0xb5, 0x39, 0x07, 0x01, 0x94, 0x45, 0x23, 0x25, 0xff, 0xbe, 0xc8, 0x47, 0xa4, 0xec, 0x2b, 0x97, 0x85, 0x15, 0x8b, 0x2b, 0xf1, 0x9f, 0xc2, 0x43, 0xb3, 0x78, 0x1a, 0xd1, 0x89, 0xb6, 0x61, 0x39, 0xd8, 0x7b, 0x40, 0x55, 0x9d, 0x1c, 0xc8, 0xbc, 0xa7, 0x82, 0x4e, 0x44, 0x04, 0xd0, 0x79, 0xc5, 0xb9, 0x45, 0x99, 0x20, 0xb6, 0x65, 0x3a, 0x80, 0x08, 0x53, 0xfa, 0xe0, 0x51, 0x82, 0x97, 0xce, 0x75, 0x8c, 0x4c, 0x6e, 0x97, 0x62, 0x5e, 0xc1, 0x44, 0xa6, 0xf2, 0x27, 0xed, 0x55, 0x21, 0x23, 0x9b, 0xa9, 0x4e, 0x5f, 0xde, 0x3e, 0xb7, 0xf0, 0x06, 0x73, 0x4b, 0xda, 0x96, 0x13, 0xbc, 0xd7, 0xf6, 0x35, 0xd4, 0x54, 0x68, 0x60, 0x0c, 0xbd, 0x3d, 0xf3, 0x5b, 0xfa, 0x49, 0xc4, 0x4c, 0x3a, 0x94, 0x08, 0x53, 0xef, 0x52, 0x73, 0x61, 0x19, 0x16, 0xa0, 0xb6, 0xc8, 0x42, 0xb2, 0xf7, 0xdc, 0xc2, 0x3c, 0x80, 0x10, 0xfa, 0x5e, 0xfb, 0x37, 0xfc, 0x31, 0x31, 0xc5, 0xff, 0x65, 0x21, 0x90, 0x0d, 0x29, 0x4f, 0xd8, 0xfb, 0x4b, 0x5f, 0x85, 0x9e, 0xa1, 0xe2, 0xb1, 0x3c, 0xa7, 0x70, 0x66, 0x41, 0x69, 0xf7, 0xa9, 0x33, 0xa4, 0x52, 0xb7, 0xe8, 0x28, 0x1e, 0x8e, 0xf7, 0x80, 0xc9, 0xaf, 0x6c, 0xd5, 0xeb, 0x23, 0xc0, 0x10, 0xda, 0xbc, 0x08, 0x3f, 0x79, 0x9d, 0x6c, 0x3a, 0x50, 0xfc, 0xdb, 0x86, 0xe2, 0x27, 0xfd, 0x79, 0x3a, 0xc5, 0x69, 0x9f, 0xc8, 0x5f, 0x19, 0x5d, 0x6b, 0x1f, 0x1a, 0xd4, 0xcf, 0xd7, 0x88, 0x08, 0xf9, 0x44, 0xba, 0x42, 0x20, 0x95, 0xba, 0xb3, 0xbf, 0x27, 0xf8, 0x59, 0xe8, 0x93, 0x3f, 0x27, 0xdb, 0xea, 0xe7, 0x60, 0xd7, 0x3f, 0x4d, 0x44, 0x30, 0x66, 0x80, 0xee, 0xa2, 0xfc, 0x3d, 0x7d, 0xe5, 0xa7, 0x1e, 0x72, 0x81, 0x9f, 0x0e, 0x59, 0xe4, 0x6e, 0x00, 0xac, 0xb2, 0xf4, 0xe1, 0xf4, 0x5c, 0xad, 0xca, 0x31, 0xf4, 0x37, 0x7b, 0x7c, 0x40, 0x0e, 0x05, 0xeb, 0x0d, 0x9b, 0xc6, 0xb5, 0xc5, 0x6d, 0x9a, 0x96, 0x44, 0xc6, 0x50, 0x75, 0xe8, 0x59, 0x5b, 0x45, 0xe7, 0x52, 0xca, 0x29, 0xe6, 0x97, 0x7b, 0xdb, 0xc7, 0x4d, 0x8b, 0x4e, 0xc2, 0x9f, 0x10, 0x92, 0xb7, 0xba, 0x0b, 0xf9, 0xc2, 0x1c, 0x98, 0x78, 0x11, 0x0f, 0x68, 0x4f, 0xf2, 0x70, 0x71, 0xec, 0x30, 0xb5, 0xe4, 0x0d, 0xa0, 0x2f, 0x60, 0x26, 0xf7, 0x8b, 0x65, 0x02, 0xde, 0x9f, 0x0b, 0xac, 0x49, 0x64, 0xf4, 0x90, 0x04, 0x3e, 0x7f, 0xde, 0x8e, 0x84, 0x3e, 0x2f, 0x2b, 0x3c, 0xab, 0x6b, 0x35, 0x26, 0x16, 0xea, 0xb3, 0xfd, 0xe2, 0xd9, 0x2d, 0xf9, 0xf1, 0xe0, 0xbe, 0x98, 0x5d, 0x01, 0x6a, 0x9e, 0x69, 0xc4, 0xb2, 0x5a, 0xb7, 0x91, 0x66, 0x2c, 0xbb, 0x5d, 0xbb, 0x44, 0x6f, 0x89, 0x9d, 0xac, 0x48, 0x06, 0x46, 0x89, 0x69, 0xbe, 0x10, 0x9e, 0x18, 0x2f, 0x87, 0x11, 0x6e, 0x59, 0xc3, 0x72, 0x52, 0xdb, 0xf5, 0xf9, 0xa8, 0x59, 0x3f, 0x0f, 0xc5, 0x20, 0xc9, 0x10, 0x26, 0x0d, 0x11, 0x50, 0x62, 0xab, 0x82, 0x5c, 0x5e, 0x9b, 0x49, 0x82, 0xc0, 0x39, 0x64, 0x93, 0xa6, 0x7c, 0xfb, 0xe7, 0x97, 0x1e, 0xf4, 0xa2, 0xba, 0xfd, 0xc2, 0x36, 0x45, 0xc2, 0x7d, 0x29, 0x39, 0xc0, 0x38, 0x19, 0x4d, 0x1f, 0x8f, 0xfd, 0x27, 0x39, 0x7f, 0xad, 0xd2, 0x44, 0x7b, 0xa5, 0x6d, 0x32, 0xbb, 0x05, 0x20, 0xd5, 0xd8, 0xdd, 0x55, 0x47, 0x96, 0xa8, 0x24, 0x89, 0x00, 0x16, 0x0e, 0x6a, 0xbb, 0x0f, 0xef, 0xaa, 0x94, 0xf4, 0x2e, 0x60, 0x5b, 0x28, 0x37, 0x99, 0xf4, 0xcf, 0x2b, 0x42, 0xab, 0xd5, 0xd5, 0x48, 0xc8, 0x32, 0xe1, 0xfd, 0x63, 0x6d, 0x48, 0xbe, 0x7a, 0x5f, 0x0f, 0xd3, 0x41, 0x3a, 0x31, 0x96, 0xb9, 0xca, 0xda, 0xd7, 0x84, 0xfa, 0xd5, 0x80, 0xf8, 0x99, 0x48, 0x75, 0x72, 0x5e, 0x9f, 0xbe, 0xed, 0x2a, 0xc6, 0xe8, 0xd3, 0x8e, 0x9b, 0xa8, 0x12, 0x8d, 0xa3, 0xc2, 0x73, 0xa3, 0xfb, 0x29, 0x28, 0x06, 0x92, 0x68, 0xa3, 0x2b, 0x96, 0x40, 0xaf, 0x8c, 0x2c, 0x93, 0xb9, 0xa9, 0x64, 0x81, 0x6e, 0x4c, 0x6c, 0xd0, 0x8c, 0x12, 0x04, 0x91, 0xf1, 0x27, 0x31, 0x00, 0xf9, 0x51, 0x36, 0xad, 0x06, 0x30, 0xc0, 0xd9, 0x60, 0xc4, 0x61, 0x23, 0x40, 0x2f, 0x3f, 0x64, 0x27, 0xbc, 0x0e, 0xd7, 0x74, 0x21, 0x3b, 0x7d, 0x36, 0x01, 0x6a, 0xbf, 0x3f, 0xb5, 0x23, 0x56, 0x7a, 0x4c, 0xc8, 0x68, 0x7e, 0xd0, 0xcb, 0xf3, 0x62, 0xcb, 0x1d, 0x6f, 0xd3, 0x0a, 0xea, 0xaf, 0x65, 0xa1, 0x83, 0x09, 0x27, 0x30, 0x9c, 0xb6, 0x7a, 0x64, 0xb7, 0x7b, 0x23, 0xc0, 0xe0, 0x89, 0x9e, 0x9d, 0x9b, 0xa3, 0xb5, 0x6f, 0x1b, 0x7e, 0x52, 0x4b, 0xb4, 0x6d, 0x92, 0xa6, 0x93, 0x3e, 0x1a, 0x60, 0xad, 0x5e, 0xae, 0x01, 0xf5, 0x44, 0x00, 0x42, 0xd2, 0x0d, 0xc5, 0xcf, 0xd0, 0x64, 0x0e, 0x4b, 0x96, 0xa5, 0xd6, 0x94, 0x18, 0x42, 0xd7, 0x49, 0x0d, 0x65, 0xa3, 0x8a, 0xa4, 0xd7, 0xef, 0xff, 0x72, 0x20, 0x32, 0x1c, 0xaf, 0xf0, 0x6f, 0xa3, 0xa3, 0xbd, 0x4e, 0x6a, 0x5b, 0xae, 0x72, 0x5e, 0xa0, 0xb8, 0x07, 0xc8, 0x2a, 0x07, 0x9a, 0xcf, 0x10, 0x9f, 0x2e, 0x3e, 0x83, 0x43, 0x8c, 0x88, 0xbc, 0x95, 0xda, 0x0a, 0x33, 0x80, 0x6f, 0x8f, 0x12, 0xd3, 0xe6, 0x19, 0xe9, 0x2e, 0x71, 0xdf, 0xa3, 0x22, 0x70, 0x92, 0xb9, 0x94, 0x43, 0xe4, 0xa5, 0x62, 0x5c, 0x4b, 0x9a, 0x4a, 0x98, 0x02, 0x72, 0x07, 0xcf, 0x52, 0xe8, 0xbc, 0xaa, 0x0f, 0x07, 0x96, 0xb4, 0x65, 0xe2, 0xad, 0xb4, 0xd5, 0x86, 0x2c, 0x3b, 0x7a, 0x2d, 0xb2, 0x79, 0x91, 0xb4, 0xf8, 0x54, 0x38, 0x4f, 0xb3, 0xbc, 0x76, 0x7c, 0xbc, 0x38, 0x7c, 0x35, 0x6e, 0xc5, 0x2a, 0x6a, 0x4f, 0xe1, 0xd5, 0xae, 0xf3, 0xe3, 0x48, 0x31, 0x1e, 0x8d, 0x08, 0xee, 0x29, 0xe4, 0xdd, 0x25, 0xa7, 0x3f, 0x8d, 0x0c, 0x48, 0x9f, 0xeb, 0xc2, 0xfd, 0x3e, 0x10, 0x84, 0x5c, 0x6b, 0xe9, 0x23, 0x47, 0x94, 0xf2, 0xb5, 0xc8, 0xa5, 0x40, 0x8b, 0x40, 0x91, 0xc5, 0x64, 0xc1, 0x2d, 0xd0, 0xe0, 0xb8, 0x45, 0xd3, 0x38, 0xcf, 0xea, 0x69, 0x2b, 0x11, 0x09, 0x97, 0x3c, 0x4f, 0x42, 0x52, 0x1a, 0xc3, 0xf6, 0x42, 0x60, 0xf4, 0xa2, 0xc6, 0x7e, 0xd9, 0x6c, 0x38, 0xf7, 0x41, 0xfc, 0x72, 0xce, 0x73, 0x8d, 0x91, 0x3a, 0x11, 0x44, 0xf9, 0xa1, 0x42, 0xc0, 0x99, 0xc4, 0x0f, 0xf2, 0x70, 0x38, 0x0e, 0x2f, 0x4f, 0x15, 0x3e, 0x83, 0xe1, 0xf2, 0x33, 0x49, 0xea, 0x10, 0x73, 0xf8, 0xcc, 0xd5, 0x1f, 0x40, 0x4f, 0x7c, 0xd6, 0x56, 0xa1, 0x0c, 0xd6, 0x8c, 0x9c, 0x86, 0x64, 0x24, 0x48, 0x63, 0x6f, 0x66, 0xa1, 0x3d, 0x70, 0xf0, 0x9a, 0xcd, 0x94, 0x4e, 0x61, 0x15, 0x1d, 0xca, 0xe5, 0xde, 0x05, 0x85, 0x96, 0x65, 0xe5, 0xc7, 0x6b, 0x52, 0x16, 0x94, 0x2a, 0xe9, 0x16, 0x80, 0xe4, 0x84, 0x2d, 0xc4, 0xbe, 0x41, 0x50, 0x90, 0xf8, 0xf8, 0x45, 0xa3, 0x27, 0x70, 0x08, 0x1a, 0xc5, 0xd2, 0x6e, 0x85, 0xec, 0x5d, 0x08, 0x40, 0x5f, 0x5c, 0x4a, 0x01, 0xca, 0x55, 0xec, 0xad, 0x4b, 0x84, 0x91, 0x70, 0x30, 0x87, 0xa7, 0x0c, 0x03, 0x5b, 0x8e, 0x71, 0xc4, 0x87, 0xfc, 0x8f, 0x75, 0x97, 0xa0, 0x68, 0xdc, 0xcc, 0x05, 0x69, 0x84, 0x12, 0xba, 0xfa, 0x05, 0x32, 0xb0, 0x54, 0x85, 0x49, 0xe3, 0x92, 0x7f, 0x79, 0x3c, 0x0b, 0xc3, 0xde, 0xb6, 0xe0, 0xbe, 0xc4, 0xc1, 0xd1, 0xfc, 0x17, 0xe4, 0x55, 0xeb, 0x1a, 0xa5, 0xe9, 0xe2, 0x5c, 0xad, 0xa8, 0x61, 0xe9, 0x28, 0x1c, 0x9b, 0xbd, 0x6b, 0x54, 0x31, 0x7e, 0xd9, 0x36, 0x41, 0x6a, 0x07, 0x17, 0x9f, 0x8e, 0x1e, 0x89, 0x62, 0x38, 0x81, 0x74, 0xa3, 0xb0, 0xb0, 0x69, 0x81, 0x23, 0x6d, 0x32, 0x68, 0xe0, 0x1d, 0xae, 0x94, 0xc7, 0x70, 0xdc, 0xd0, 0xfd, 0x44, 0x35, 0x84, 0xe5, 0xc7, 0x3f, 0xee, 0x4c, 0xdc, 0x5f, 0xb0, 0xe4, 0xc1, 0xee, 0x8b, 0xf4, 0xee, 0x90, 0x6a, 0x4d, 0x40, 0xc1, 0xa2, 0x80, 0x56, 0xb1, 0x78, 0x4e, 0x3c, 0x52, 0xe4, 0x60, 0x46, 0xaf, 0x94, 0x39, 0x3f, 0x7f, 0x34, 0x68, 0xc3, 0xfa, 0xed, 0x02, 0xea, 0xeb, 0x2b, 0x4f, 0x27, 0x07, 0xa4, 0xc4, 0x6f, 0x7d, 0x96, 0x31, 0x9d, 0xce, 0x4f, 0x3c, 0x15, 0xdf, 0xf3, 0x0e, 0xa7, 0x4d, 0x7a, 0x4c, 0xb7, 0x00, 0xf8, 0x49, 0x9b, 0x03, 0x21, 0x7a, 0x45, 0x92, 0x0c, 0x2a, 0x22, 0x75, 0x37, 0x6e, 0x41, 0x8d, 0xcc, 0x5c, 0xb8, 0xad, 0x22, 0x78, 0x44, 0xab, 0x87, 0x6f, 0x2f, 0xb6, 0x3d, 0x08, 0x77, 0xe9, 0xc2, 0x57, 0x2c, 0x21, 0x54, 0x34, 0x1a, 0x0c, 0xb5, 0xeb, 0xa8, 0x83, 0x2c, 0x35, 0x00, 0x1a, 0xcc, 0x67, 0x70, 0xf5, 0xf8, 0xea, 0x10, 0xdd, 0x27, 0xeb, 0xa6, 0x92, 0xe5, 0x53, 0xc6, 0x63, 0x1b, 0xfa, 0x3e, 0xfd, 0x8f, 0x17, 0xb1, 0x81, 0xae, 0xfc, 0x81, 0xd9, 0x8a, 0x00, 0xf2, 0x4b, 0x1f, 0xbc, 0x8d, 0x4e, 0xda, 0x7a, 0xc3, 0x9d, 0x5c, 0xea, 0xd3, 0x8b, 0x7b, 0x17, 0xee, 0x96, 0x89, 0x9a, 0x98, 0x3e, 0xd9, 0x0d, 0x51, 0x18, 0x80, 0xc3, 0x75, 0x1e, 0x59, 0xb6, 0x61, 0x49, 0x4c, 0xc1, 0xd7, 0x62, 0xcf, 0x10, 0xa4, 0x15, 0xac, 0xd4, 0x7f, 0x47, 0x05, 0x3b, 0x35, 0xa9, 0x96, 0x9f, 0x03, 0x8d, 0x3b, 0xfe, 0x43, 0xf9, 0xb2, 0xaa, 0x4c, 0xfa, 0xa1, 0x41, 0x93, 0x3b, 0xdb, 0xe0, 0x16, 0xd6, 0xdf, 0x94, 0xfa, 0x6a, 0xa2, 0x11, 0x72, 0x6e, 0x8e, 0xa7, 0xe4, 0xc5, 0xca, 0x71, 0x47, 0x92, 0xbc, 0xd0, 0xd0, 0x4d, 0xcc, 0x17, 0xcd, 0x17, 0x6b, 0x88, 0xd1, 0x4a, 0x54, 0x80, 0x11, 0x55, 0x12, 0xee, 0x0e, 0xc7, 0xc3, 0x09, 0x74, 0xa9, 0x1b, 0x43, 0x42, 0x11, 0xac, 0x78, 0x2c, 0xf4, 0x64, 0x6c, 0x3e, 0x3c, 0x57, 0x74, 0xc1, 0x1a, 0xbe, 0x73, 0x62, 0x9e, 0x40, 0x08, 0x91, 0x85, 0x71, 0x06, 0x28, 0x52, 0x99, 0x25, 0x4d, 0xa0, 0xb6, 0xf7, 0x99, 0xb6, 0xc4, 0x1d, 0x7a, 0x5c, 0x3b, 0xba, 0xd5, 0xed, 0xda, 0x28, 0xf0, 0xae, 0xa3, 0xea, 0x90, 0x5e, 0x27, 0xe2, 0x5e, 0x0e, 0x03, 0xc4, 0x8f, 0x33, 0xab, 0xcb, 0xc4, 0xfa, 0x66, 0xab, 0x2f, 0xdb, 0x9a, 0xc6, 0xf8, 0x71, 0x4a, 0xa2, 0xdf, 0x89, 0xdd, 0x9b, 0x22, 0x79, 0x21, 0xd5, 0xa1, 0xb3, 0x8f, 0x75, 0x40, 0x99, 0xd1, 0x11, 0x8d, 0x93, 0x81, 0x64, 0xa3, 0x5f, 0x34, 0x47, 0x4e, 0xa9, 0xb7, 0xdd, 0x6f, 0xdc, 0x98, 0x0d, 0xa2, 0x37, 0xe8, 0x35, 0x1f, 0x23, 0x40, 0x1c, 0xde, 0xc4, 0x02, 0x29, 0xff, 0xce, 0xe1, 0xd3, 0x68, 0x9a, 0xa4, 0x59, 0xb0, 0x79, 0x26, 0xb3, 0x3c, 0x48, 0xa2, 0xc8, 0xa7, 0x44, 0x2d, 0xe1, 0x67, 0x20, 0x84, 0x5e, 0xae, 0x55, 0x08, 0xa8, 0x8f, 0xba, 0x07, 0x66, 0x62, 0x54, 0x3d, 0xf4, 0x69, 0x6f, 0x9b, 0x10, 0xb4, 0xed, 0x47, 0xd7, 0x41, 0xdf, 0xe3, 0xf1, 0x68, 0x52, 0x12, 0x08, 0x76, 0x6b, 0x38, 0x7e, 0x99, 0xb7, 0x82, 0x5f, 0xfc, 0xbc, 0x27, 0x94, 0x32, 0xd4, 0xed, 0x5a, 0xd8, 0x3b, 0xee, 0xf3, 0x76, 0x66, 0x9c, 0x9b, 0xa7, 0x96, 0x03, 0xbe, 0x7a, 0xae, 0x4e, 0x68, 0x17, 0x41, 0x8d, 0xfd, 0xa6, 0xf0, 0xb5, 0x2a, 0x6c, 0xf3, 0xe8, 0x1b, 0x37, 0xf5, 0xf7, 0xef, 0xfd, 0x25, 0x26, 0x69, 0xc0, 0x8a, 0x2f, 0xe8, 0xb4, 0x96, 0x89, 0x99, 0xa4, 0xff, 0xe9, 0xeb, 0x92, 0xca, 0x0a, 0x43, 0x9e, 0xa9, 0xaa, 0xf2, 0x29, 0x86, 0xd5, 0x64, 0x39, 0x60, 0x65, 0x99, 0x1f, 0x56, 0xca, 0xd9, 0x58, 0x01, 0x07, 0xa4, 0xb2, 0x07, 0xfd, 0xe9, 0xaf, 0xed, 0xec, 0x78, 0x2e, 0x2d, 0x37, 0xb8, 0x48, 0x89, 0x67, 0x9d, 0x79, 0x9e, 0x73, 0xd5, 0x00, 0xbc, 0x3f, 0x42, 0x88, 0xf5, 0x62, 0xad, 0x07, 0x74, 0x2c, 0xb9, 0xe7, 0x11, 0xe8, 0x15, 0x64, 0x22, 0x5e, 0xf6, 0x35, 0x93, 0x9c, 0xc5, 0x6e, 0x39, 0xf6, 0x14, 0xa5, 0x63, 0x4c, 0xd7, 0x53, 0xb2, 0x8b, 0xd1, 0x7e, 0x2b, 0x76, 0x4c, 0x95, 0x8b, 0xa7, 0x0d, 0x9c, 0xda, 0xd0, 0x87, 0x88, 0x43, 0x47, 0x4f, 0xed, 0x23, 0xc2, 0xd0, 0xd6, 0x60, 0x5f, 0x40, 0xf4, 0xfc, 0xe7, 0xd3, 0xfc, 0xea, 0x53, 0x2e, 0x4a, 0x20, 0x8f, 0x1e, 0xca, 0xed, 0x7f, 0x8a, 0x18, 0x8d, 0x40, 0xa6, 0xe6, 0xfb, 0xb0, 0x6a, 0x9f, 0x06, 0x30, 0x43, 0x49, 0xa7, 0xa8, 0x08, 0xb0, 0x92, 0xcc, 0x2f, 0xc1, 0x0b, 0x9e, 0x41, 0x34, 0xfb, 0x34, 0x8b, 0x6e, 0x43, 0xbc, 0x17, 0xa5, 0x50, 0xbd, 0xda, 0x45, 0xef, 0xa0, 0x2f, 0x92, 0x63, 0x6e, 0x84, 0x8f, 0xb6, 0xdb, 0x53, 0x1f, 0x4c, 0x84, 0x55, 0x6b, 0xbe, 0x75, 0xf2, 0x83, 0xe5, 0xee, 0xfb, 0x48, 0x34, 0x67, 0x9b, 0x89, 0x4b, 0xd1, 0x8b, 0x6c, 0xca, 0x1f, 0x86, 0x10, 0x63, 0x05, 0xfd, 0x70, 0x34, 0xff, 0x0b, 0x8b, 0x53, 0x96, 0xab, 0xc2, 0xaa, 0xdf, 0x29, 0x81, 0x05, 0x44, 0xd6, 0x21, 0x69, 0x86, 0x00, 0x0d, 0xa8, 0x03, 0x21, 0x24, 0x32, 0x35, 0x57, 0x5f, 0x2e, 0x7c, 0x14, 0xb4, 0xc9, 0x1d, 0x17, 0x3a, 0xce, 0x8a, 0x9b, 0x8d, 0x78, 0xe4, 0xce, 0x74, 0x84, 0xbe, 0x84, 0xc1, 0x89, 0x24, 0x2d, 0x79, 0x8c, 0xdb, 0x04, 0x35, 0xcf, 0xeb, 0x8a, 0xc8, 0xeb, 0x5b, 0x33, 0x22, 0x1e, 0x3c, 0x5f, 0x75, 0xe6, 0xe9, 0x8b, 0x96, 0xcf, 0x8c, 0xc9, 0xa5, 0x89, 0xe4, 0x6d, 0xf0, 0x3d, 0x46, 0x0a, 0x15, 0x21, 0xe2, 0x9d, 0x67, 0x4b, 0x48, 0x07, 0x93, 0xc3, 0x2b, 0xc1, 0x84, 0xdb, 0x64, 0xcb, 0x83, 0xc3, 0x39, 0xe5, 0xa3, 0x58, 0xe0, 0x02, 0x5c, 0x3d, 0x3f, 0xfa, 0x76, 0x2d, 0xf6, 0x7f, 0x28, 0x8f, 0x9f, 0x52, 0x82, 0x4b, 0x54, 0xb6, 0x08, 0xdd, 0x72, 0x26, 0xa0, 0xa8, 0x9d, 0x43, 0xae, 0x8c, 0x05, 0x10, 0x7d, 0xba, 0xe7, 0x61, 0xe1, 0xc7, 0x56, 0x91, 0x1a, 0x00, 0x3b, 0x74, 0xfc, 0xfe, 0x9b, 0x8c, 0x4d, 0x7a, 0x18, 0x80, 0x6f, 0x62, 0xbb, 0xc9, 0x3e, 0x2b, 0xf0, 0xaf, 0x3c, 0x6a, 0xd2, 0x74, 0xec, 0x9e, 0xa9, 0xcf, 0x7b, 0x50, 0xb1, 0x9c, 0xa5, 0x5f, 0x1e, 0xd1, 0xd7, 0x95, 0x5c, 0xb4, 0x91, 0x7d, 0x9b, 0x4b, 0x0f, 0x79, 0x8b, 0x14, 0x28, 0x0f, 0x64, 0xf7, 0x76, 0x84, 0x2a, 0x79, 0xb7, 0xac, 0x2f, 0x32, 0x73, 0x00, 0xd9, 0x81, 0xe0, 0xf1, 0xa5, 0x7e, 0x02, 0x7c, 0x6c, 0x30, 0x16, 0xff, 0xe6, 0x01, 0x31, 0x4b, 0x6c, 0x6e, 0x25, 0xfa, 0x02, 0x03, 0xa4, 0x03, 0x94, 0x87, 0xa8, 0x8b, 0x80, 0x74, 0x11, 0xfe, 0x55, 0xaa, 0x90, 0x5f, 0xda, 0x63, 0xc5, 0xdc, 0x53, 0x6a, 0xa4, 0xa6, 0xff, 0x88, 0x1d, 0xff, 0xe5, 0x3f, 0xfc, 0x95, 0xd1, 0xbb, 0x0e, 0x0e, 0x99, 0x06, 0x85, 0xe4, 0xa4, 0x7b, 0x9d, 0x73, 0xad, 0x7d, 0x80, 0x50, 0xc5, 0x69, 0x67, 0xdd, 0x97, 0xc8, 0x03, 0x1a, 0xf0, 0xca, 0x1b, 0xbe, 0x7f, 0xf0, 0x76, 0x87, 0xd9, 0x08, 0xfb, 0xce, 0xbf, 0x5e, 0x17, 0x5e, 0xa4, 0x31, 0x5f, 0x86, 0x6a, 0x64, 0x77, 0x6d, 0x6d, 0x76, 0x32, 0xa6, 0xc2, 0xb4, 0xfa, 0x04, 0xc1, 0xad, 0x73, 0xb0, 0xc0, 0xe7, 0x5b, 0x78, 0x22, 0xd0, 0xb5, 0x6a, 0x91, 0xf7, 0x26, 0xa2, 0x87, 0x7c, 0x9f, 0x60, 0x13, 0xc6, 0x3c, 0x5e, 0xda, 0x73, 0x6c, 0x60, 0x5c, 0x95, 0x53, 0x0c, 0x78, 0x1b, 0x6c, 0xfc, 0x32, 0x8d, 0x73, 0x12, 0xb5, 0xfd, 0x82, 0x0b, 0x94, 0x3a, 0x7a, 0x57, 0x55, 0x46, 0xa4, 0x28, 0x30, 0x0a, 0x98, 0xca, 0x14, 0x49, 0x5e, 0x32, 0xeb, 0xd3, 0xd4, 0xd9, 0x1f, 0xfb, 0x4f, 0xcb, 0x5d, 0x4a, 0x85, 0xfa, 0x99, 0x75, 0xab, 0xd9, 0x52, 0x8d, 0xda, 0x26, 0x17, 0x76, 0xb7, 0x07, 0x4a, 0x9a, 0x53, 0x59, 0x24, 0xde, 0x50, 0x45, 0xf9, 0xd6, 0x46, 0x14, 0xbd, 0x34, 0x64, 0x44, 0xc8, 0x87, 0x5b, 0xdb, 0xd6, 0x22, 0x77, 0xfb, 0x52, 0x59, 0x0f, 0xb7, 0xd4, 0xf4, 0x20, 0x25, 0xe8, 0xdd, 0x35, 0xb4, 0x11, 0x1c, 0x8a, 0xc0, 0x0d, 0x05, 0x70, 0x64, 0x5b, 0xb0, 0xf3, 0x90, 0xfb, 0xaa, 0xbb, 0x5b, 0x75, 0xea, 0x30, 0x9a, 0x1c, 0x07, 0xe2, 0xb1, 0x94, 0xa8, 0x27, 0xa9, 0x92, 0x3b, 0x06, 0x83, 0xe3, 0xea, 0x53, 0xcc, 0xb0, 0xca, 0x1c, 0x72, 0x00, 0x56, 0x44, 0xd6, 0x7e, 0x1d, 0x6e, 0x22, 0x7d, 0xb7, 0x1c, 0xdd, 0x39, 0xfd, 0x18, 0xbd, 0x5f, 0x7a, 0x14, 0xbc, 0xd0, 0x1c, 0x8d, 0x6d, 0xa2, 0x2f, 0xf5, 0x91, 0x68, 0x8c, 0x10, 0xe6, 0xb4, 0x0e, 0x9f, 0x3f, 0xda, 0x46, 0x3c, 0xd9, 0xf6, 0x70, 0x85, 0xed, 0x30, 0xa5, 0x7c, 0x82, 0x3e, 0x52, 0x2e, 0x85, 0x2b, 0xe8, 0x93, 0x1b, 0x57, 0xd5, 0xb6, 0x36, 0xc0, 0xb4, 0x15, 0x67, 0x7f, 0xc0, 0x4b, 0xf3, 0x96, 0x8f, 0xec, 0x28, 0xe8, 0xfd, 0xb1, 0xf1, 0x89, 0x66, 0xd5, 0xa9, 0x38, 0x18, 0xbe, 0x2d, 0x2a, 0x07, 0xe0, 0x35, 0x0a, 0xc3, 0xdf, 0xe4, 0x3d, 0xa8, 0xf3, 0x9d, 0x6a, 0x54, 0x91, 0x19, 0x3a, 0x5f, 0x48, 0xb6, 0x5c, 0x46, 0xe9, 0x12, 0xcd, 0xa7, 0xea, 0xd9, 0x56, 0xb4, 0x0c, 0xdb, 0x56, 0xe2, 0x3c, 0x62, 0xc1, 0xe1, 0xb7, 0xc2, 0x69, 0xd1, 0x72, 0x31, 0x7c, 0xb3, 0xb9, 0xd9, 0x4e, 0x1d, 0x16, 0x2c, 0x59, 0x32, 0x74, 0x78, 0x83, 0xd2, 0x84, 0xbb, 0x9f, 0x0e, 0x60, 0xb8, 0x35, 0xdf, 0x6f, 0x4a, 0x86, 0x17, 0x88, 0xf9, 0xcb, 0x97, 0x5a, 0xcb, 0xbe, 0xc3, 0x0b, 0x5c, 0x5b, 0x33, 0x1f, 0x31, 0xe8, 0xab, 0x9c, 0x4a, 0x33, 0x4e, 0x6b, 0xf6, 0x1b, 0x0e, 0x02, 0xec, 0x51, 0x67, 0x40, 0x96, 0x60, 0x4d, 0x98, 0xb0, 0xeb, 0x63, 0x72, 0x12, 0x36, 0x6d, 0xce, 0xca, 0xe9, 0x08, 0x2b, 0x6e, 0x10, 0x99, 0xa7, 0xb1, 0x65, 0x83, 0x67, 0x33, 0xd2, 0x9d, 0x39, 0x9e, 0x32, 0xe3, 0x78, 0xee, 0x58, 0x6b, 0x31, 0x10, 0x52, 0x9b, 0x83, 0xaf, 0xee, 0x9a, 0x4c, 0x4b, 0x7e, 0x04, 0x02, 0x8b, 0xd9, 0xe2, 0xde, 0xd4, 0xa2, 0xd9, 0x40, 0x1a, 0xcd, 0xa1, 0x4f, 0xf6, 0x5e, 0xb9, 0xdf, 0xf9, 0x74, 0x59, 0x99, 0x41, 0x87, 0xa9, 0x55, 0x49, 0xee, 0x30, 0xcb, 0x05, 0xa4, 0x8f, 0x6b, 0x2f, 0x4b, 0x6f, 0x89, 0xdc, 0x71, 0xb8, 0xbd, 0x52, 0x13, 0x03, 0x8a, 0x1d, 0x5f, 0x53, 0x3d, 0x60, 0xbe, 0xff, 0x18, 0x6a, 0x12, 0xf3, 0xb0, 0x89, 0x3c, 0x19, 0x94, 0x23, 0xe2, 0x11, 0x2f, 0x02, 0x6f, 0x28, 0xf0, 0xf0, 0x5b, 0x88, 0xa8, 0x84, 0xac, 0xac, 0x33, 0x3b, 0xbd, 0x17, 0x5a, 0xca, 0x3e, 0x46, 0xf8, 0xb3, 0x7c, 0xe3, 0x5c, 0x17, 0xe2, 0x3b, 0xef, 0xcb, 0xc0, 0xf2, 0x16, 0xae, 0x4c, 0xf5, 0x5a, 0x39, 0xe7, 0xb1, 0xc7, 0x57, 0xa1, 0x83, 0x91, 0x77, 0xfe, 0x6f, 0xfe, 0xe0, 0xfb, 0x14, 0x7f, 0x45, 0x4c, 0xdf, 0x20, 0x9a, 0xe8, 0x80, 0x23, 0x26, 0xc7, 0x9a, 0xe8, 0xd8, 0xea, 0xbf, 0x11, 0xde, 0x9d, 0x9b, 0xe3, 0x74, 0xf9, 0x6f, 0xee, 0xfa, 0xac, 0xc2, 0xf0, 0x4a, 0xfd, 0x53, 0xf7, 0x48, 0x0a, 0x51, 0xc6, 0xbb, 0x54, 0xce, 0x7a, 0x5b, 0x7e, 0x72, 0x6d, 0x2a, 0x52, 0x6c, 0x5b, 0x08, 0x05, 0xae, 0xc3, 0x82, 0xbc, 0x5a, 0x90, 0xec, 0x4e, 0x77, 0xf9, 0xaf, 0x4c, 0xe9, 0xa6, 0xe3, 0x3f, 0xa0, 0x14, 0x21, 0x30, 0x0f, 0x3a, 0x92, 0x6e, 0xe0, 0x6d, 0x4c, 0x8b, 0xe6, 0x81, 0xdf, 0xa8, 0x53, 0x31, 0x2a, 0xf2, 0x2b, 0xc0, 0x74, 0x6d, 0xf8, 0xe1, 0xb8, 0xf1, 0xc0, 0xd5, 0x3f, 0x72, 0x34, 0xd3, 0x74, 0x84, 0x2a, 0xac, 0xf5, 0x1d, 0x4d, 0xaf, 0xe6, 0x9d, 0x13, 0xca, 0x8a, 0x0d, 0xf0, 0xf3, 0x14, 0xa4, 0xca, 0xc6, 0xba, 0x90, 0xac, 0x70, 0x0c, 0xf3, 0xbe, 0xcb, 0x84, 0x2b, 0x75, 0xca, 0x5e, 0x56, 0x07, 0x18, 0xa9, 0x15, 0x22, 0xfc, 0x9f, 0x91, 0xdd, 0x80, 0x32, 0xbc, 0xef, 0xd2, 0xe7, 0xda, 0x1e, 0xea, 0xe7, 0x3f, 0xfb, 0x6d, 0x54, 0x5a, 0xcd, 0xd2, 0xd9, 0xf2, 0xcb, 0xc3, 0x85, 0xb0, 0x8e, 0xc6, 0xd9, 0xde, 0xc5, 0x1c, 0x1f, 0x6e, 0x2b, 0xe9, 0xfe, 0x3e, 0xb6, 0x96, 0x4c, 0x9a, 0x11, 0x74, 0x23, 0x03, 0x4d, 0xa2, 0x37, 0x2e, 0xd4, 0x30, 0x66, 0x50, 0x9e, 0x84, 0x91, 0x99, 0xa7, 0xfd, 0xab, 0xfe, 0xa0, 0xd7, 0x0f, 0x3c, 0xe4, 0x4f, 0x17, 0x1a, 0xaf, 0x07, 0xea, 0xee, 0x8a, 0xab, 0x95, 0x62, 0x0a, 0xd5, 0x5e, 0x78, 0xba, 0x2e, 0x54, 0xcc, 0x56, 0xd7, 0x2b, 0x1a, 0x3a, 0x07, 0x47, 0xff, 0x19, 0xf5, 0x17, 0x04, 0xf2, 0xf8, 0xa4, 0xd8, 0x40, 0xec, 0x6a, 0xdd, 0x72, 0xd9, 0x66, 0xe6, 0x9a, 0xcf, 0x70, 0x40, 0x69, 0x14, 0xcb, 0xef, 0x5b, 0x82, 0xfb, 0x39, 0x2f, 0x2a, 0xd6, 0x69, 0x9a, 0x3d, 0xde, 0xcd, 0x3c, 0x2d, 0xce, 0x01, 0xd3, 0x0f, 0x73, 0x6f, 0xaf, 0x44, 0xbd, 0x17, 0x66, 0x58, 0x16, 0x8c, 0xc8, 0x2a, 0xf2, 0x3f, 0x15, 0x4d, 0xa8, 0x00, 0x6e, 0xaf, 0x80, 0xc2, 0x8a, 0x78, 0x0d, 0x9f, 0xaa, 0x35, 0xbd, 0x1c, 0xcf, 0x36, 0xae, 0xad, 0x2a, 0x34, 0xc3, 0x7c, 0xd4, 0x38, 0xf8, 0x66, 0xbf, 0xb7, 0xf2, 0x46, 0xed, 0x02, 0xdb, 0x77, 0xdf, 0xde, 0x6c, 0x94, 0x51, 0x6e, 0x4b, 0x82, 0x24, 0x5a, 0x98, 0xb1, 0x9c, 0x2a, 0xc2, 0x9e, 0xcb, 0xf3, 0xa0, 0x9d, 0x4d, 0x36, 0xbd, 0xd5, 0x36, 0x05, 0xf3, 0x8c, 0x49, 0x67, 0x3b, 0xa5, 0x6b, 0xfe, 0xc3, 0x66, 0x57, 0xe7, 0x41, 0x7f, 0x92, 0xe2, 0x88, 0x48, 0xa2, 0xb3, 0x58, 0x4b, 0x7b, 0xc8, 0x7b, 0x02, 0x3a, 0x1b, 0x0d, 0xe2, 0x15, 0x5a, 0x1c, 0x98, 0x92, 0x46, 0x71, 0x92, 0xf8, 0x59, 0xac, 0xc1, 0x03, 0xab, 0x97, 0x9d, 0xdc, 0x16, 0xb4, 0x6a, 0x48, 0x98, 0x18, 0xba, 0x20, 0xfa, 0x7c, 0x34, 0x01, 0xaf, 0x92, 0x93, 0x44, 0xff, 0x95, 0xf2, 0x31, 0x65, 0x24, 0x46, 0x6f, 0x35, 0x50, 0x2c, 0xbf, 0x81, 0xf4, 0xe5, 0xeb, 0x3e, 0x45, 0x9e, 0xf8, 0xa3, 0xa9, 0xf5, 0xa3, 0xd2, 0xcd, 0xba, 0x0c, 0xba, 0xf1, 0xf2, 0xac, 0x3c, 0x87, 0x22, 0x8c, 0x8c, 0xfd, 0xca, 0xb9, 0xdb, 0xd7, 0x2f, 0xf3, 0x33, 0x00, 0x5d, 0xa5, 0xa2, 0x62, 0x6d, 0x1a, 0x9a, 0xb4, 0x04, 0xed, 0x98, 0x93, 0x1c, 0xc1, 0x04, 0xd5, 0x07, 0x33, 0x58, 0x1a, 0xb0, 0x0d, 0x85, 0xa3, 0x25, 0xbc, 0x93, 0x68, 0x52, 0x05, 0x87, 0x64, 0x0f, 0xf3, 0x89, 0x34, 0x5e, 0x14, 0x46, 0xe0, 0xed, 0xe5, 0x94, 0xf9, 0xe3, 0x8a, 0x54, 0xe4, 0xd9, 0xc2, 0x9d, 0x75, 0x25, 0x1b, 0x17, 0xc0, 0x5f, 0x62, 0xa4, 0x2b, 0x1e, 0x5e, 0x46, 0xc8, 0x03, 0xbe, 0x3d, 0xe2, 0xf9, 0x4f, 0x6f, 0xd6, 0xba, 0x72, 0x0d, 0x24, 0x96, 0xce, 0x74, 0xc6, 0x70, 0x42, 0x51, 0xc1, 0x09, 0x1d, 0x09, 0xf9, 0x81, 0x92, 0x58, 0x49, 0x1a, 0x66, 0x38, 0xd3, 0x40, 0xec, 0x04, 0x95, 0xc6, 0x33, 0xdd, 0x3e, 0x73, 0x7e, 0x4d, 0x3f, 0xbd, 0xf4, 0x2a, 0x24, 0xd4, 0x99, 0xbd, 0x25, 0xe2, 0x7d, 0x24, 0xf8, 0x91, 0x34, 0xf5, 0xea, 0xcf, 0x85, 0x24, 0x2e, 0xce, 0x66, 0x27, 0x75, 0x4e, 0x29, 0x57, 0xbf, 0x1e, 0xf0, 0x9a, 0x70, 0xe0, 0x66, 0x3f, 0xa6, 0x0e, 0xb1, 0x29, 0xca, 0x3a, 0xa2, 0x30, 0x65, 0x9a, 0x2f, 0xc4, 0x35, 0xc3, 0x24, 0xd3, 0x81, 0xb5, 0x15, 0xed, 0xa9, 0x18, 0x97, 0xa7, 0x01, 0xc5, 0xb0, 0x3d, 0xdf, 0x88, 0x8b, 0x7b, 0xf3, 0x24, 0x70, 0xdd, 0xd7, 0x98, 0xf4, 0xf5, 0xe7, 0xa1, 0x6d, 0x0d, 0x53, 0x80, 0xa9, 0x0e, 0x73, 0xfd, 0xe0, 0xa0, 0x5a, 0xac, 0xe6, 0x93, 0xad, 0x6f, 0xa5, 0x7e, 0xb6, 0x3c, 0xcb, 0xa5, 0xb4, 0x21, 0xc0, 0x20, 0x75, 0x85, 0xdb, 0x3a, 0x27, 0xb0, 0xd5, 0x18, 0x6c, 0x8e, 0x7e, 0x9b, 0xac, 0xaf, 0xae, 0x86, 0xaf, 0x93, 0x7f, 0xe4, 0x6b, 0x25, 0xb9, 0xa4, 0x1a, 0x85, 0x8e, 0x87, 0x90, 0x0a, 0x88, 0x3c, 0xcc, 0x88, 0xbf, 0xc9, 0xcd, 0xce, 0x4f, 0x2c, 0xa7, 0x73, 0x09, 0x42, 0xd5, 0xd3, 0x69, 0xe9, 0xd1, 0x54, 0xc8, 0x61, 0xe2, 0xee, 0xd3, 0xf9, 0x35, 0xea, 0x3c, 0xe7, 0x30, 0xe9, 0xb0, 0x77, 0x03, 0x29, 0x08, 0x68, 0x80, 0x04, 0xc3, 0x92, 0x2c, 0xb9, 0xb4, 0xcd, 0x96, 0x6f, 0xf8, 0x0f, 0xe7, 0x77, 0x2b, 0xd4, 0xbb, 0xd2, 0xdb, 0xc3, 0x2f, 0xf3, 0x3d, 0x8e, 0x3b, 0xc5, 0x1f, 0x1a, 0x43, 0xf0, 0x1e, 0xe0, 0xe8, 0x59, 0x19, 0x93, 0x24, 0xe7, 0xe6, 0x02, 0x96, 0x8d, 0x43, 0x41, 0x1a, 0x85, 0x0f, 0x03, 0x9d, 0xd9, 0xba, 0x4b, 0x30, 0x28, 0xfa, 0x44, 0x5a, 0xa7, 0xbf, 0x6c, 0xb3, 0x66, 0x6a, 0xf8, 0xae, 0xd5, 0x39, 0x75, 0xb7, 0x86, 0x06, 0xab, 0x7e, 0x34, 0x32, 0xc6, 0x92, 0x05, 0xdc, 0xb8, 0x31, 0x0c, 0x56, 0xd9, 0x5f, 0x12, 0xd9, 0xd0, 0x35, 0x96, 0x77, 0xb7, 0x7c, 0x12, 0x52, 0x7a, 0x7a, 0x80, 0x0c, 0x80, 0x0c, 0x1d, 0x7e, 0x8e, 0xf5, 0x6d, 0xad, 0xe8, 0x76, 0x7f, 0xf9, 0xb9, 0x1f, 0x72, 0x98, 0xb4, 0xe4, 0x38, 0x43, 0xfc, 0x73, 0x9a, 0x2f, 0x41, 0xc5, 0x7c, 0x3f, 0x2c, 0xf3, 0x63, 0x78, 0xfe, 0x4c, 0x34, 0xb5, 0x74, 0xa4, 0x3f, 0x9c, 0xed, 0xee, 0x7b, 0xd0, 0xce, 0x0e, 0x13, 0x68, 0x26, 0xe8, 0x22, 0xa1, 0x8e, 0xbd, 0xbb, 0xcf, 0x54, 0xb7, 0x2d, 0x9a, 0xd8, 0xc2, 0x85, 0x66, 0x35, 0x9e, 0x54, 0x13, 0x24, 0x32, 0xb2, 0xe7, 0x1e, 0x24, 0x82, 0xc8, 0xc1, 0xa6, 0xf8, 0xaf, 0x75, 0x93, 0x59, 0x59, 0x4f, 0xba, 0x02, 0x40, 0x36, 0x7a, 0xac, 0xc9, 0x44, 0x8f, 0xee, 0xbf, 0x6e, 0x2b, 0x03, 0x00, 0x68, 0x48, 0xce, 0x76, 0xc3, 0x3d, 0x1b, 0x49, 0x59, 0x90, 0x28, 0x53, 0xea, 0x0c, 0x64, 0xd5, 0x07, 0x13, 0x76, 0x68, 0x2f, 0x35, 0x81, 0x36, 0x39, 0x01, 0xa7, 0x69, 0xf1, 0x1a, 0xcc, 0xe4, 0x06, 0x8e, 0x9c, 0x31, 0x24, 0x64, 0xcf, 0xbb, 0x5d, 0x74, 0xab, 0x3e, 0xcd, 0x7c, 0xcb, 0x7b, 0x7e, 0x6f, 0x20, 0x30, 0x89, 0x10, 0x35, 0x47, 0x7e, 0xc0, 0xb7, 0x4e, 0x06, 0x94, 0x34, 0x27, 0xc7, 0xab, 0x23, 0x01, 0x88, 0xbf, 0x25, 0x87, 0x96, 0xf9, 0x8a, 0x56, 0x66, 0x0a, 0x17, 0xb5, 0x7b, 0x77, 0x06, 0x80, 0x8a, 0x34, 0x4f, 0x66, 0xdd, 0x75, 0x26, 0x55, 0xf5, 0xc1, 0xc5, 0x31, 0x73, 0x48, 0x6b, 0xcc, 0x39, 0x76, 0xa5, 0x13, 0xcc, 0xc8, 0xcc, 0x85, 0xfc, 0xdf, 0xcf, 0xea, 0xc8, 0xd3, 0x32, 0x41, 0x7c, 0xc9, 0x57, 0xfa, 0x1c, 0xc8, 0xfd, 0x65, 0x05, 0xc8, 0x06, 0x6b, 0xd2, 0x0c, 0x7d, 0x7c, 0x7d, 0xb2, 0xd7, 0xc8, 0xc6, 0x89, 0x79, 0xb2, 0xd9, 0x22, 0x7b, 0x81, 0x2b, 0x2a, 0xac, 0x59, 0xa5, 0xf6, 0xd6, 0x6b, 0x04, 0x60, 0x43, 0x68, 0x80, 0xd2, 0x7f, 0x3b, 0xab, 0xa0, 0x60, 0xf7, 0x9d, 0x9b, 0x44, 0x0e, 0x4e, 0xe3, 0x9a, 0xc5, 0x43, 0xfc, 0xa4, 0xe4, 0x6d, 0x24, 0x7a, 0xb2, 0x4e, 0xe4, 0x53, 0x20, 0x5d, 0xe6, 0x00, 0x45, 0xac, 0x06, 0xb9, 0x0a, 0xc8, 0xab, 0x1c, 0x27, 0xe0, 0x58, 0x73, 0x4e, 0x2a, 0x7e, 0x36, 0xa5, 0x83, 0x95, 0xd1, 0x7a, 0x56, 0x6a, 0xa6, 0x33, 0xbe, 0xbb, 0x56, 0x83, 0xef, 0x01, 0x3c, 0xe4, 0xd2, 0x8d, 0x3b, 0x41, 0xef, 0xd6, 0xba, 0xf2, 0x90, 0x12, 0xec, 0xee, 0x23, 0x03, 0x55, 0x3c, 0xe1, 0x14, 0x8a, 0xab, 0xad, 0xa4, 0x38, 0xc3, 0x3f, 0xa2, 0x67, 0xfb, 0x81, 0x5a, 0x00, 0x2d, 0x39, 0x8e, 0x8d, 0x46, 0xe9, 0xc9, 0x41, 0x42, 0xf3, 0xf0, 0x38, 0x58, 0x01, 0x1a, 0xff, 0x71, 0xa4, 0xa1, 0x57, 0xdf, 0x3c, 0x7a, 0x36, 0x4c, 0x17, 0xc1, 0x0f, 0xf0, 0xdd, 0x98, 0x53, 0x08, 0x2b, 0x32, 0x38, 0x83, 0x7e, 0x2b, 0xb9, 0xfe, 0x53, 0x1b, 0xde, 0xf2, 0x8c, 0x6a, 0x3d, 0x2c, 0x16, 0x66, 0xc1, 0x7e, 0xc9, 0x92, 0xaa, 0xb5, 0x8f, 0x41, 0xd5, 0xca, 0xc9, 0x64, 0x3e, 0x5d, 0xee, 0xa1, 0xc3, 0x5e, 0x75, 0xa5, 0x2b, 0x0e, 0xf6, 0xba, 0x66, 0x26, 0x8c, 0x9c, 0x16, 0x55, 0x7d, 0x88, 0x4f, 0xf0, 0x1d, 0x97, 0x9b, 0xe6, 0xef, 0x4a, 0x42, 0xf2, 0x0e, 0x66, 0xc8, 0x14, 0xcb, 0x02, 0xb6, 0x41, 0x98, 0xde, 0x9e, 0x5a, 0x25, 0xf6, 0x59, 0x5b, 0xc8, 0x57, 0x93, 0xd5, 0x22, 0x32, 0x8a, 0x9e, 0x00, 0x2f, 0x12, 0xc6, 0x7f, 0x03, 0xdd, 0xce, 0x74, 0x45, 0xf9, 0x15, 0x0a, 0x7d, 0x9a, 0x93, 0xad, 0x7f, 0x1a, 0xc9, 0x27, 0xf7, 0x3e, 0xf8, 0x09, 0x44, 0xbb, 0x92, 0x4d, 0x8a, 0xf8, 0xee, 0x39, 0x02, 0x16, 0x3f, 0x87, 0x95, 0x2e, 0xc7, 0xc2, 0xaa, 0xd9, 0x48, 0xf3, 0x3c, 0xf6, 0xbc, 0x7d, 0x2f, 0xa7, 0x45, 0x46, 0xe4, 0x9d, 0x67, 0x17, 0x0b, 0x96, 0x75, 0x46, 0xb8, 0x23, 0x49, 0x92, 0xb9, 0xaf, 0x38, 0x4e, 0x28, 0xbd, 0x46, 0xc2, 0x3c, 0x71, 0x95, 0xce, 0x64, 0x52, 0x24, 0xd0, 0x97, 0x4e, 0xb6, 0xc8, 0xe5, 0xff, 0x0f, 0xba, 0x53, 0x2c, 0x66, 0x54, 0xe5, 0x93, 0x18, 0xd1, 0xfc, 0xe5, 0x9a, 0x1d, 0xe2, 0x13, 0xb1, 0x3a, 0xa4, 0xc8, 0xe5, 0xe2, 0x20, 0x36, 0x33, 0x6e, 0x5e, 0x16, 0x02, 0xf6, 0x24, 0xea, 0x58, 0xba, 0xc4, 0x86, 0x4e, 0xc0, 0x39, 0xce, 0xc1, 0xbf, 0x72, 0xc1, 0x4b, 0x3c, 0xee, 0xb7, 0x71, 0xf3, 0x89, 0xe6, 0x1e, 0x78, 0x96, 0x2b, 0x51, 0x1e, 0x2d, 0x08, 0x12, 0x18, 0xc6, 0xe9, 0xaa, 0xde, 0x07, 0xab, 0x13, 0xd3, 0xdb, 0x5e, 0xae, 0x24, 0xc4, 0x4a, 0x34, 0xf3, 0x72, 0x31, 0xef, 0xb5, 0x94, 0xd4, 0x2a, 0xd8, 0xee, 0xb8, 0xe6, 0xa9, 0xac, 0x2a, 0xce, 0x76, 0xf6, 0x81, 0x6d, 0xef, 0xc4, 0xa3, 0x9f, 0xd2, 0xf4, 0xcb, 0x45, 0xc8, 0x9a, 0x89, 0x3d, 0x8a, 0x97, 0x0a, 0x92, 0x47, 0x6d, 0x99, 0xef, 0x4a, 0x51, 0x66, 0x5a, 0xd8, 0x82, 0x86, 0x1e, 0x57, 0xda, 0x3c, 0x09, 0xb6, 0xa2, 0x77, 0xd8, 0x08, 0xab, 0x9b, 0xf0, 0x72, 0x9a, 0x84, 0x4f, 0x48, 0x84, 0xc9, 0xc1, 0x73, 0xbb, 0x3d, 0x57, 0x16, 0xe7, 0xbc, 0x15, 0x71, 0x58, 0x24, 0xeb, 0x05, 0x9a, 0xa1, 0xe7, 0xf8, 0x4a, 0x2e, 0xa8, 0xbc, 0x29, 0x58, 0x16, 0xec, 0x6f, 0x45, 0x50, 0x76, 0x62, 0xf6, 0xe6, 0xff, 0x26, 0xc9, 0x49, 0x83, 0xd7, 0x42, 0x7f, 0x3c, 0xd5, 0x0a, 0x1b, 0xc6, 0x5f, 0x38, 0x6d, 0x80, 0x64, 0xd0, 0xf6, 0x35, 0x95, 0x89, 0x1e, 0xfc, 0xbf, 0xd4, 0x2a, 0x5c, 0x58, 0x19, 0x68, 0xb4, 0x58, 0x44, 0xac, 0xda, 0x4a, 0x80, 0x00, 0x03, 0xa2, 0x42, 0x98, 0xe3, 0x51, 0x8a, 0x04, 0x15, 0x97, 0x66, 0xa9, 0xbc, 0x18, 0xb7, 0x72, 0x6b, 0x33, 0x37, 0xc3, 0x42, 0x8f, 0xbb, 0xaf, 0x5a, 0xf6, 0xb6, 0x6a, 0x64, 0x67, 0xff, 0x01, 0x8c, 0x66, 0xd4, 0x48, 0xa4, 0x97, 0x1e, 0x14, 0x7e, 0x8b, 0xf6, 0xab, 0x99, 0xda, 0x69, 0x79, 0x00, 0x72, 0x78, 0x05, 0x70, 0x2e, 0x63, 0x23, 0xb9, 0xab, 0x28, 0x6a, 0x66, 0x57, 0x46, 0xe8, 0xa0, 0xca, 0xc6, 0x15, 0x50, 0x5a, 0x7c, 0x06, 0x84, 0xe9, 0x8b, 0xe3, 0x14, 0x02, 0x27, 0x9b, 0x85, 0x25, 0x9f, 0xd6, 0x2d, 0x5e, 0x9a, 0x2c, 0x98, 0x1c, 0xa0, 0x94, 0x2b, 0x41, 0xdd, 0x1f, 0x07, 0x76, 0x22, 0xe6, 0x31, 0xc1, 0x2d, 0x40, 0xef, 0x59, 0x2a, 0x39, 0x75, 0xb9, 0x7a, 0x40, 0xc0, 0xf3, 0xb2, 0x20, 0xc3, 0x47, 0xe7, 0x32, 0xc1, 0xf4, 0x29, 0xd0, 0xfa, 0x4e, 0x4d, 0x0c, 0x89, 0x11, 0xf0, 0xa2, 0x8d, 0xf5, 0xb8, 0x2c, 0x87, 0x82, 0xdd, 0x95, 0x03, 0x26, 0xe8, 0xd0, 0x7b, 0x85, 0xbb, 0xca, 0x78, 0x10, 0xd2, 0x9d, 0xfa, 0xd9, 0xc8, 0x06, 0x1a, 0xa5, 0x1d, 0x19, 0xee, 0x43, 0x36, 0x33, 0xad, 0x1d, 0xa5, 0x31, 0x13, 0x0d, 0xab, 0xdf, 0x07, 0x72, 0xfb, 0xb3, 0x7c, 0x82, 0xc1, 0xbc, 0x95, 0xe2, 0xe3, 0xd5, 0x0c, 0x74, 0x87, 0x1e, 0xd4, 0x70, 0xd5, 0xad, 0xfd, 0xb6, 0xfe, 0x80, 0xd9, 0x62, 0x7d, 0xb6, 0x5d, 0xa1, 0x9d, 0xff, 0xc9, 0xc4, 0x3b, 0x52, 0x8c, 0x93, 0xcd, 0xde, 0x61, 0xe4, 0xa3, 0x42, 0xbf, 0x6c, 0x6d, 0x00, 0x70, 0xd4, 0xfe, 0x2f, 0x7f, 0x0f, 0x4f, 0x71, 0x58, 0xec, 0xc7, 0x25, 0x2b, 0xe7, 0xb9, 0xde, 0x91, 0x45, 0x2f, 0x13, 0x72, 0x60, 0xe6, 0x18, 0x26, 0x3f, 0x99, 0x4c, 0xda, 0x69, 0x82, 0x95, 0x36, 0xfb, 0x1f, 0x09, 0x3d, 0xf9, 0x32, 0xee, 0x74, 0xe2, 0x0b, 0xe5, 0x46, 0x87, 0x09, 0x62, 0xa7, 0x1c, 0x5f, 0x5f, 0xf8, 0x90, 0x14, 0x52, 0x2a, 0x1a, 0x4e, 0x5c, 0x27, 0x15, 0xcf, 0xc3, 0x6d, 0x0d, 0xc0, 0xa2, 0xfc, 0x1a, 0xad, 0xdf, 0x73, 0x6c, 0xd2, 0x5e, 0x76, 0x28, 0x95, 0x74, 0x52, 0x73, 0x53, 0x9f, 0xe4, 0xcb, 0x5f, 0x74, 0xb7, 0x9e, 0x48, 0xd8, 0x6c, 0x15, 0x5b, 0x73, 0x5f, 0x31, 0x69, 0x62, 0x87, 0x1a, 0xcb, 0x2c, 0x9e, 0xb4, 0xa2, 0xf8, 0x82, 0x72, 0x63, 0xfd, 0xdc, 0x6f, 0x94, 0x39, 0xff, 0xbb, 0xd0, 0x66, 0x13, 0xf2, 0x11, 0x2a, 0x72, 0x14, 0x2f, 0x8e, 0x52, 0x90, 0xa3, 0xb1, 0xa5, 0xa2, 0x91, 0xbe, 0x3d, 0xdf, 0x06, 0x1b, 0x34, 0x0f, 0x7e, 0xe3, 0x8b, 0x3a, 0xa9, 0x97, 0x11, 0x06, 0x6e, 0x10, 0x86, 0x40, 0x31, 0xb8, 0x01, 0xb8, 0x51, 0xfa, 0x8f, 0x52, 0xf5, 0xf7, 0x1d, 0x5a, 0x09, 0x7b, 0x98, 0x18, 0x83, 0x2f, 0x52, 0xa4, 0xeb, 0x10, 0xa8, 0xfc, 0x1a, 0x1f, 0xe2, 0x54, 0x42, 0x5a, 0x5a, 0xad, 0x2e, 0xec, 0xe1, 0xa9, 0xcb, 0xa1, 0x5e, 0x9e, 0xe8, 0x9c, 0xb8, 0xe9, 0x3a, 0x4c, 0xf6, 0x85, 0xa3, 0x9c, 0xa5, 0xdc, 0xb3, 0x6a, 0x7a, 0xdc, 0x70, 0x3b, 0x39, 0x4e, 0x52, 0x2d, 0xd5, 0x63, 0x92, 0x2d, 0xd9, 0x90, 0xa5, 0x69, 0x06, 0x9c, 0x03, 0x08, 0x3e, 0xf8, 0x2c, 0x19, 0xa1, 0x4e, 0xed, 0xca, 0xf5, 0x5c, 0xdf, 0xdb, 0x4b, 0x03, 0x32, 0x52, 0xdf, 0x9b, 0xa8, 0x6f, 0x41, 0x8a, 0xe4, 0xe2, 0xb2, 0x15, 0xe5, 0x3c, 0xd1, 0x76, 0xce, 0xa4, 0x77, 0x2e, 0xe8, 0xcb, 0xdf, 0x9c, 0xe9, 0x22, 0x0a, 0xcf, 0x77, 0x4a, 0x61, 0x99, 0xe8, 0xcb, 0x9d, 0xe4, 0x4c, 0x0a, 0xe4, 0x49, 0xad, 0x75, 0x34, 0xdf, 0x95, 0x01, 0x05, 0x51, 0xd1, 0xd6, 0x2a, 0x34, 0x75, 0x48, 0xf9, 0x97, 0x20, 0x0a, 0xab, 0xdb, 0x81, 0x9e, 0x06, 0xc5, 0x1a, 0x10, 0x39, 0xd1, 0x44, 0xe4, 0x07, 0xc9, 0x74, 0x4d, 0x27, 0x97, 0xbc, 0xa0, 0xeb, 0x58, 0x95, 0x07, 0x21, 0xb1, 0xdb, 0x7a, 0x37, 0x66, 0x19, 0xeb, 0xa2, 0x28, 0x07, 0xc1, 0x7f, 0xaf, 0x51, 0x88, 0x7b, 0x09, 0x9a, 0xe7, 0xf1, 0x32, 0xc1, 0xd2, 0x53, 0xe4, 0x63, 0x00, 0xcb, 0xb0, 0xa1, 0xa0, 0x22, 0x4e, 0x23, 0x48, 0xe0, 0x32, 0x5c, 0x2e, 0xb5, 0x5f, 0x10, 0x9a, 0x17, 0x80, 0x14, 0x9b, 0x2d, 0x35, 0x56, 0xfa, 0xec, 0xab, 0x1d, 0x6c, 0x80, 0x6f, 0x91, 0x0b, 0xed, 0x84, 0x7d, 0x07, 0xf6, 0xb3, 0x54, 0x99, 0x3e, 0x22, 0x72, 0x39, 0xad, 0x28, 0xa5, 0x11, 0x15, 0x60, 0xec, 0xb1, 0x15, 0xfc, 0x7e, 0x04, 0x3e, 0x5c, 0x0e, 0x83, 0x75, 0xe0, 0x4e, 0xa8, 0x98, 0xfa, 0xb2, 0xa6, 0x65, 0x87, 0x76, 0x57, 0x97, 0x5f, 0xe2, 0x76, 0x51, 0x2a, 0xcd, 0x0e, 0xc0, 0x76, 0x60, 0x32, 0xfd, 0x07, 0x1c, 0xef, 0x30, 0x6e, 0x1e, 0x7f, 0xfb, 0xde, 0xa2, 0xbf, 0x16, 0x3a, 0xc7, 0xe4, 0x36, 0x72, 0x92, 0x69, 0x34, 0x10, 0x34, 0x4b, 0x6b, 0x0e, 0x90, 0x79, 0x62, 0xeb, 0xf8, 0x86, 0xab, 0xfe, 0x37, 0xa2, 0x0a, 0x09, 0xd5, 0xc8, 0xda, 0x11, 0x96, 0x39, 0xad, 0x6d, 0x44, 0x28, 0x33, 0x1e, 0xae, 0xb7, 0x5d, 0x5e, 0xf1, 0x22, 0xc1, 0x7b, 0xf6, 0x3a, 0x41, 0xe6, 0x3c, 0x16, 0xe7, 0x87, 0xd8, 0x05, 0x14, 0x54, 0xba, 0xc6, 0xda, 0x22, 0x31, 0xfc, 0xa6, 0xbb, 0xb2, 0xdc, 0x22, 0x30, 0xd5, 0x29, 0x59, 0x71, 0xa0, 0x62, 0x1d, 0x1a, 0x08, 0x3a, 0xa5, 0x90, 0xb5, 0x48, 0x7b, 0x4d, 0x06, 0x00, 0x96, 0x78, 0x55, 0xe2, 0xc2, 0xb9, 0x7c, 0xf1, 0x49, 0x4b, 0x97, 0x67, 0xcc, 0x53, 0x0c, 0xa7, 0x72, 0x70, 0xc9, 0x73, 0x45, 0x93, 0xcd, 0x5f, 0xd8, 0x11, 0xea, 0x85, 0x2d, 0xf6, 0xc9, 0x7b, 0xd7, 0x9d, 0x2e, 0x82, 0x5c, 0x7d, 0x7d, 0x00, 0xdd, 0x46, 0x7e, 0x31, 0xf9, 0x2d, 0x5d, 0x19, 0xee, 0x83, 0xf5, 0xbd, 0x01, 0x8d, 0x4d, 0x92, 0x21, 0x90, 0x63, 0x36, 0xc7, 0x2b, 0x29, 0x5e, 0x20, 0xe9, 0xce, 0x10, 0x6e, 0x17, 0x3e, 0x12, 0xac, 0xd3, 0xec, 0xa2, 0x70, 0x66, 0xcf, 0x67, 0x16, 0xd4, 0xaa, 0xa8, 0x1b, 0xb1, 0x91, 0xbc, 0xc7, 0x35, 0xa9, 0xc1, 0x0f, 0x93, 0x2f, 0x91, 0xb9, 0x87, 0xbc, 0xf2, 0xc1, 0x2e, 0xc7, 0x0d, 0xfc, 0x1b, 0x6b, 0x22, 0xfb, 0xa7, 0x6a, 0x79, 0x32, 0x88, 0x73, 0x9c, 0x59, 0xa6, 0xa0, 0xc3, 0x13, 0x2a, 0x43, 0x90, 0xce, 0xd7, 0xe2, 0xfc, 0xea, 0x9d, 0x80, 0x92, 0x1d, 0x6b, 0x1e, 0xdb, 0x16, 0x46, 0x82, 0x19, 0x60, 0x98, 0x37, 0x37, 0x8a, 0xca, 0xd5, 0x01, 0x85, 0x14, 0x83, 0x91, 0x4d, 0x94, 0xb9, 0x09, 0xcb, 0x9e, 0x4b, 0x88, 0xfb, 0x54, 0xa3, 0x56, 0x4a, 0x76, 0x4d, 0x62, 0x42, 0x7b, 0xba, 0xef, 0x68, 0xe0, 0x3d, 0x8a, 0x65, 0xc0, 0x5a, 0x3f, 0x65, 0xa5, 0x40, 0x0c, 0xbd, 0x9e, 0x94, 0x96, 0xd0, 0x91, 0x70, 0x1b, 0x33, 0xd3, 0xac, 0xa8, 0x0f, 0xf6, 0x5c, 0x8c, 0xc7, 0xe2, 0x99, 0x0c, 0xdb, 0x27, 0x85, 0x58, 0x0d, 0x92, 0x89, 0xbe, 0xc2, 0xff, 0xe1, 0x1e, 0xaa, 0x6d, 0x5b, 0x9e, 0xa3, 0x58, 0x5b, 0x9e, 0xdb, 0x43, 0x23, 0xef, 0x35, 0x94, 0x51, 0x3f, 0xef, 0xa4, 0xa9, 0xd8, 0x81, 0x17, 0x15, 0x8b, 0xc8, 0x69, 0xea, 0xe6, 0x63, 0xca, 0x6d, 0xae, 0x5e, 0x2c, 0x96, 0x89, 0x0d, 0x9a, 0x14, 0xfa, 0x3b, 0xcb, 0x90, 0x92, 0x85, 0xf7, 0x36, 0x65, 0x00, 0xe9, 0x72, 0xbc, 0x22, 0x56, 0xf7, 0x09, 0xdf, 0x6d, 0x06, 0x20, 0x12, 0xaf, 0xed, 0xa3, 0x1f, 0x01, 0xce, 0xbe, 0xd6, 0xff, 0xa1, 0x15, 0x9b, 0x94, 0x7c, 0xfb, 0xc4, 0xc7, 0x12, 0xe5, 0x43, 0xd8, 0x7b, 0x1e, 0x85, 0x8c, 0x33, 0xbc, 0x9a, 0xc5, 0x64, 0xd2, 0x95, 0x55, 0x68, 0xe7, 0x36, 0x14, 0x89, 0xa7, 0xc6, 0x31, 0x0c, 0xd9, 0x43, 0xc5, 0x6f, 0x91, 0xbd, 0xae, 0xee, 0xa7, 0x00, 0x9a, 0x4c, 0x67, 0x73, 0x62, 0xcf, 0x8a, 0x40, 0x9a, 0x8d, 0x66, 0xb5, 0x66, 0xe6, 0x61, 0xeb, 0x8e, 0x52, 0xab, 0xa5, 0xd5, 0x5d, 0x2d, 0x7a, 0x87, 0xef, 0xbc, 0x37, 0x52, 0xd1, 0x93, 0x7f, 0x56, 0x6d, 0x00, 0xb4, 0x7f, 0xd5, 0x5d, 0x1b, 0x13, 0x07, 0x42, 0x3a, 0x87, 0x70, 0xf9, 0x85, 0x97, 0xae, 0x32, 0x3a, 0x96, 0x9a, 0xf8, 0x8a, 0x02, 0x86, 0xe4, 0xf9, 0x5b, 0xc3, 0x91, 0x07, 0x35, 0x67, 0x4f, 0x10, 0x8d, 0x4c, 0x1c, 0x71, 0x59, 0x5c, 0xd0, 0xec, 0x62, 0x0c, 0x97, 0x4e, 0x56, 0x27, 0xa4, 0x4e, 0x19, 0xcd, 0x24, 0xb9, 0x5d, 0xbb, 0x71, 0xcc, 0x72, 0xcd, 0x89, 0xe1, 0x5f, 0xc0, 0xbe, 0x4f, 0x31, 0x3d, 0xaf, 0x8b, 0x93, 0x13, 0x76, 0x93, 0x9f, 0xc5, 0x23, 0x8c, 0xf4, 0x44, 0x6a, 0xa9, 0x09, 0xfd, 0x98, 0x50, 0xc1, 0x16, 0xcb, 0x78, 0x3f, 0xf5, 0x63, 0x56, 0xfb, 0x03, 0xb4, 0x38, 0x15, 0xaf, 0xfd, 0xb1, 0xea, 0xb5, 0x9e, 0xf6, 0xe6, 0xa0, 0x85, 0x88, 0x99, 0x8d, 0xea, 0x13, 0x0c, 0x33, 0x3c, 0x96, 0x55, 0x20, 0x5b, 0xc5, 0x69, 0x45, 0x07, 0xac, 0x32, 0xb5, 0x99, 0x94, 0xe1, 0xaa, 0xf0, 0x2a, 0x86, 0xc9, 0xaf, 0xde, 0xdd, 0xa7, 0xa6, 0x8a, 0x6b, 0x8b, 0x8d, 0x54, 0xca, 0x76, 0xf8, 0xd5, 0x42, 0x60, 0x87, 0x7b, 0x99, 0xc5, 0x5d, 0x2b, 0x2b, 0x60, 0xd4, 0x2b, 0x3d, 0x37, 0x6f, 0x40, 0x8e, 0xd7, 0x11, 0x13, 0x2f, 0xe1, 0x6c, 0xd9, 0x95, 0xc5, 0xbb, 0x33, 0xed, 0xce, 0xb4, 0x53, 0xaf, 0x5f, 0xb8, 0x61, 0x76, 0x7c, 0x4e, 0x1d, 0x0f, 0x8b, 0xcf, 0xc5, 0xcf, 0x5c, 0x63, 0x39, 0x2a, 0x68, 0x2b, 0x5d, 0x82, 0x56, 0xc0, 0xbf, 0x3d, 0xc4, 0xdd, 0x7a, 0x1a, 0x43, 0x58, 0x5a, 0xc5, 0xa3, 0x57, 0x40, 0xa9, 0x72, 0xc0, 0xc8, 0x05, 0xbf, 0xf1, 0x2a, 0x42, 0x23, 0xb2, 0x5e, 0x84, 0x03, 0x67, 0x84, 0x7f, 0x0f, 0x8b, 0x82, 0x8c, 0x0e, 0x59, 0xef, 0xfb, 0xde, 0xcc, 0x30, 0xab, 0xb6, 0xca, 0xe0, 0xd9, 0xaf, 0x9c, 0x76, 0x36, 0x83, 0xa2, 0x21, 0x3c, 0x94, 0x45, 0xf7, 0xc1, 0x30, 0x2c, 0x4f, 0xcd, 0x13, 0xb3, 0x6b, 0xa9, 0x2d, 0x99, 0x5b, 0x38, 0xa6, 0xf8, 0x1d, 0x8a, 0x20, 0x7b, 0x09, 0xaf, 0x3c, 0xcb, 0x6d, 0xc9, 0x5f, 0x4a, 0x74, 0x65, 0xb6, 0x04, 0x4c, 0x0c, 0x77, 0xe3, 0x87, 0x14, 0x6a, 0x22, 0xc2, 0xbc, 0xa9, 0x03, 0x85, 0x79, 0xa4, 0xc5, 0x6b, 0x8a, 0x67, 0xd0, 0x83, 0xd2, 0x20, 0x34, 0xf5, 0xe7, 0xdb, 0x51, 0xe9, 0x67, 0x91, 0xd7, 0xa4, 0x8b, 0x61, 0xf2, 0xf4, 0xfe, 0x1d, 0xbe, 0xcf, 0xef, 0x08, 0x01, 0x37, 0x65, 0xde, 0x19, 0x60, 0xd2, 0x15, 0x33, 0x15, 0xec, 0x63, 0xbe, 0x58, 0xb8, 0x80, 0x20, 0x49, 0xe7, 0x2d, 0xa7, 0x49, 0x66, 0x75, 0xc2, 0x5e, 0x31, 0x33, 0x71, 0xd9, 0x68, 0xd4, 0xfa, 0x37, 0xa4, 0x5e, 0xde, 0x46, 0x8b, 0xb1, 0x0b, 0x89, 0xa2, 0x0e, 0x53, 0xdc, 0x63, 0xd5, 0x1d, 0x5b, 0x90, 0x93, 0x5a, 0x81, 0xc6, 0x3b, 0xbb, 0x8d, 0x55, 0xb4, 0x21, 0x2a, 0x4f, 0x94, 0x56, 0x4e, 0xdf, 0x2c, 0xfa, 0x63, 0xdc, 0xc4, 0xc0, 0xa5, 0x9e, 0x27, 0xda, 0xcb, 0x11, 0x63, 0xb1, 0xe9, 0x07, 0xca, 0xda, 0x95, 0xd3, 0x3c, 0x45, 0x49, 0x13, 0xa9, 0xb8, 0x08, 0xcd, 0xd1, 0x7c, 0x44, 0xbe, 0x4e, 0x57, 0x00, 0xee, 0xd5, 0xba, 0x32, 0x88, 0xb9, 0x3a, 0x6b, 0xe9, 0xb0, 0x44, 0xb9, 0xf7, 0xda, 0x0d, 0xcd, 0xb4, 0xff, 0xc9, 0x59, 0x13, 0x19, 0x1d, 0xbc, 0x0a, 0x12, 0xd6, 0xe1, 0xe8, 0xce, 0xdb, 0x64, 0xe9, 0x6c, 0x60, 0xf7, 0x07, 0xc9, 0x5d, 0x05, 0x14, 0x46, 0x3f, 0x95, 0x06, 0xcc, 0xdd, 0x70, 0x92, 0x0d, 0xad, 0x86, 0xfc, 0x0c, 0x38, 0x8e, 0x2d, 0xdf, 0xcb, 0xed, 0x06, 0xb3, 0x70, 0xd9, 0xf4, 0x12, 0x1c, 0xbe, 0xc4, 0x61, 0x2a, 0xe0, 0xb9, 0xad, 0x08, 0x43, 0xdc, 0xa7, 0x31, 0xc8, 0x94, 0xec, 0x5b, 0x98, 0x76, 0x8a, 0xf1, 0xc5, 0x5e, 0xc0, 0xc3, 0x2f, 0xbf, 0x06, 0xfd, 0xa5, 0x37, 0x4d, 0x55, 0x4d, 0x67, 0x88, 0x89, 0x46, 0x01, 0x6b, 0x09, 0x8b, 0x22, 0x73, 0xf0, 0x1b, 0xe3, 0x26, 0x39, 0x57, 0x2b, 0x9c, 0x30, 0xab, 0xc7, 0x3e, 0x26, 0x70, 0xbc, 0xce, 0x69, 0x11, 0xdb, 0xa8, 0x74, 0x6d, 0x97, 0x47, 0x62, 0x7d, 0x14, 0x0a, 0xa9, 0x37, 0x80, 0x38, 0x04, 0xb2, 0xa6, 0x43, 0xb1, 0x8a, 0xc0, 0x49, 0xdd, 0x86, 0x8d, 0xe0, 0x5d, 0x78, 0xa4, 0x13, 0x9e, 0x65, 0x08, 0xa8, 0xdf, 0xe6, 0xfc, 0xa5, 0x9d, 0xce, 0x19, 0x12, 0x4f, 0x0d, 0x9d, 0xff, 0x54, 0xd5, 0x06, 0xc9, 0x2a, 0xfb, 0xe0, 0x9a, 0xe0, 0x9f, 0xdb, 0x2f, 0xce, 0x0f, 0x20, 0xde, 0x83, 0xe9, 0xe5, 0xd7, 0xff, 0x80, 0x3f, 0xaa, 0x23, 0x81, 0x38, 0x09, 0x65, 0xd7, 0x22, 0xcf, 0xc8, 0xcb, 0x2b, 0x42, 0x0c, 0x70, 0x31, 0x95, 0x21, 0x3e, 0xd7, 0xb2, 0xe2, 0xfd, 0xd8, 0x36, 0x00, 0xe5, 0x9b, 0xbc, 0x3c, 0x03, 0x08, 0x5e, 0xda, 0xde, 0x9b, 0x79, 0x52, 0x5b, 0xb6, 0xb1, 0x48, 0xde, 0x3c, 0x35, 0xbe, 0xb2, 0x5b, 0x44, 0x89, 0xab, 0xa9, 0xf1, 0x01, 0x09, 0x73, 0x23, 0xfd, 0xa0, 0x51, 0xdf, 0xff, 0x36, 0xfe, 0xca, 0xab, 0x2d, 0x67, 0xe9, 0x7e, 0x62, 0x02, 0xac, 0xbc, 0x54, 0x61, 0x2b, 0xaa, 0x89, 0x07, 0xaf, 0xfe, 0x2d, 0x7a, 0x74, 0x94, 0xfd, 0x9a, 0xad, 0x62, 0x63, 0x30, 0xc9, 0xae, 0xe2, 0xca, 0xf5, 0x7e, 0xb5, 0xc7, 0xe2, 0x51, 0xb3, 0xae, 0xc8, 0x0c, 0x76, 0xc4, 0xab, 0x37, 0xbc, 0xdd, 0xdd ],
+const [ 0x3a, 0x14, 0x14, 0x5d, 0xd1, 0xfa, 0x9e, 0x46, 0xc4, 0x56, 0x2e, 0xed, 0x0b, 0x0d, 0xa1, 0x0d, 0x84, 0x5a, 0xd8, 0x4f, 0x43, 0xcd, 0xb1, 0x6e, 0x29, 0x93, 0x36, 0x99, 0xb8, 0xf7, 0x15, 0x19, 0x25, 0x29, 0x51, 0x33, 0xaf, 0x3e, 0x36, 0x50, 0x30, 0x79, 0x92, 0x5b, 0xf2, 0xc9, 0x22, 0x6b, 0xc3, 0x92, 0x4b, 0xa2, 0x4c, 0xb0, 0x0a, 0x55, 0x9e, 0xba, 0x2e, 0x6c, 0x0e, 0x83, 0xc5, 0x0c, 0x43, 0xe7, 0xd4, 0x74, 0x8d, 0xc4, 0x4b, 0x25, 0x78, 0x46, 0x37, 0x46, 0xa2, 0x68, 0x3a, 0x46, 0xc9, 0xb7, 0x38, 0xc3, 0x28, 0x59, 0x54, 0xab, 0x04, 0x4f, 0x1b, 0xa1, 0x82, 0xf7, 0xfe, 0xa2, 0xbb, 0xd5, 0x06, 0xe8, 0x12, 0x92, 0xc3, 0x0e, 0xc6, 0x45, 0x86, 0x76, 0xc3, 0xf2, 0xd0, 0xe8, 0xbe, 0x50, 0x09, 0x7b, 0x80, 0xd0, 0x75, 0xb9, 0x82, 0xda, 0x65, 0xfe, 0xbb, 0x5a, 0xaa, 0x21, 0xb6, 0x7b, 0x4f, 0x56, 0xe7, 0xb2, 0x88, 0x53, 0x3f, 0xff, 0xe5, 0xb2, 0xfe, 0x70, 0xcb, 0x97, 0xc9, 0xe6, 0x25, 0x92, 0xfc, 0x1b, 0x57, 0xc7, 0x41, 0xe4, 0x73, 0x4c, 0x62, 0xb4, 0xb0, 0xd2, 0x5b, 0x62, 0x18, 0x88, 0xb4, 0x2c, 0x80, 0x3c, 0x0d, 0xfb, 0xbd, 0xc3, 0xfb, 0xe9, 0x15, 0x9c, 0x12, 0x00, 0xf4, 0xd0, 0x43, 0x44, 0xe0, 0x1c, 0x69, 0xf4, 0xaf, 0x52, 0x1e, 0x0e, 0xf8, 0xfd, 0xd3, 0x11, 0xc7, 0x44, 0x20, 0x06, 0x95, 0x11, 0x58, 0xc1, 0x77, 0x72, 0x61, 0x65, 0x95, 0x3f, 0xc2, 0x26, 0xde, 0xfd, 0xfe, 0x53, 0xfa, 0x02, 0x21, 0x93, 0x80, 0xda, 0x98, 0x6f, 0x6a, 0xea, 0x45, 0x10, 0xc6, 0x53, 0xd3, 0x4a, 0xae, 0x19, 0x47, 0xda, 0x79, 0x85, 0xd8, 0xec, 0x33, 0xc7, 0x01, 0xe1, 0x4b, 0xe0, 0xd4, 0x4e, 0x8c, 0xbf, 0x91, 0x48, 0x4e, 0xaa, 0x77, 0xdf, 0xee, 0xe0, 0xda, 0xe8, 0x7b, 0x7d, 0x76, 0x00, 0xb2, 0x9d, 0x03, 0xcd, 0x2d, 0xc4, 0x0a, 0x87, 0xd7, 0x7e, 0xf6, 0xb7, 0xa3, 0x42, 0x6e, 0x3f, 0x7e, 0x9c, 0xe2, 0x9b, 0x82, 0x8c, 0x64, 0x66, 0x6c, 0x29, 0xba, 0x20, 0x50, 0x89, 0xb1, 0x2e, 0x8b, 0xe5, 0xb4, 0x22, 0xfa, 0xf9, 0x9c, 0x3d, 0x69, 0xaa, 0xca, 0x32, 0x4e, 0xeb, 0x73, 0x2d, 0xb8, 0xe1, 0x3c, 0x14, 0x82, 0x45, 0x07, 0x0d, 0xcc, 0x0b, 0x0c, 0x40, 0xab, 0x41, 0x2b, 0xde, 0x20, 0x39, 0x80, 0x62, 0x47, 0xea, 0x39, 0x17, 0xd1, 0x94, 0xa4, 0xda, 0xb4, 0xa3, 0x8c, 0x21, 0x21, 0xd6, 0xc6, 0x3c, 0xb7, 0xa0, 0x07, 0xdb, 0xf6, 0xcf, 0xf9, 0xd1, 0xf6, 0x6b, 0x8d, 0x17, 0x59, 0xe1, 0x92, 0x14, 0x7e, 0x60, 0x87, 0x1b, 0xf7, 0x84, 0xad, 0x36, 0x3e, 0x32, 0x61, 0x22, 0xa3, 0xc3, 0xa9, 0x9a, 0x89, 0x64, 0x0d, 0xd9, 0xd2, 0xbc, 0xa8, 0x5a, 0x98, 0xd0, 0x7e, 0xe2, 0x1e, 0x24, 0x10, 0xc0, 0x06, 0x23, 0x2e, 0x53, 0xc4, 0xc1, 0x0d, 0xce, 0x52, 0x5f, 0x99, 0x38, 0x25, 0xef, 0x0c, 0xb7, 0x61, 0x58, 0xc0, 0x0d, 0x49, 0x1c, 0x41, 0x63, 0xf9, 0x38, 0xa7, 0x46, 0x57, 0x4c, 0x23, 0xef, 0x47, 0xfb, 0xd7, 0xc7, 0x1e, 0x95, 0xeb, 0x2a, 0x5a, 0xf3, 0xdd, 0x6b, 0x90, 0xa3, 0x18, 0x19, 0xa5, 0x46, 0xc9, 0x81, 0x41, 0x35, 0xee, 0x74, 0x81, 0x6b, 0xaf, 0x4b, 0xec, 0x9f, 0xf2, 0x27, 0xa9, 0xb0, 0x2a, 0x7e, 0xef, 0x46, 0x6f, 0xd3, 0xbc, 0xb7, 0xd4, 0xc4, 0xca, 0x27, 0xf5, 0x4a, 0xbf, 0xf4, 0xcf, 0x3d, 0xa3, 0x51, 0xd5, 0x16, 0x98, 0x30, 0x40, 0xf9, 0xc5, 0x66, 0xa6, 0xf3, 0x94, 0x09, 0xce, 0x80, 0x1d, 0x1d, 0xc3, 0x50, 0xe2, 0x70, 0x27, 0x4a, 0xbc, 0xc3, 0xca, 0xd2, 0x15, 0x2a, 0x7b, 0x47, 0x58, 0xb6, 0x1e, 0xd0, 0xa6, 0x50, 0xff, 0x59, 0xcb, 0xe8, 0x66, 0xd8, 0x70, 0xd0, 0x6c, 0xd5, 0x91, 0x62, 0x0c, 0x29, 0x32, 0xe9, 0x7d, 0x06, 0x4e, 0xbf, 0xbf, 0x37, 0x11, 0xb2, 0x75, 0xa9, 0x47, 0xac, 0xf2, 0x2b, 0x13, 0x94, 0x96, 0x72, 0xe4, 0x6f, 0x5b, 0x60, 0xa5, 0xcb, 0xab, 0x86, 0x34, 0x5d, 0x75, 0xe7, 0x16, 0xe9, 0x7f, 0xfe, 0x69, 0x62, 0xfe, 0x03, 0x19, 0x53, 0x64, 0x6b, 0x57, 0x7d, 0x79, 0xae, 0x47, 0xc1, 0xad, 0x4c, 0xf9, 0x41, 0xac, 0x12, 0x9b, 0xc3, 0x34, 0x99, 0xed, 0x56, 0x23, 0x11, 0xf5, 0x37, 0xd5, 0x3c, 0xf3, 0xf5, 0xac, 0xbd, 0x97, 0xd4, 0xf0, 0x93, 0x72, 0x6f, 0xda, 0xe1, 0xab, 0xa2, 0xeb, 0xf0, 0xf3, 0xa7, 0x82, 0x76, 0xba, 0x7f, 0xae, 0x19, 0xa3, 0x94, 0x41, 0x2f, 0x36, 0x9c, 0x26, 0xc8, 0xd6, 0xc0, 0xf4, 0xee, 0xf2, 0xfe, 0xc2, 0x2b, 0x7f, 0xcc, 0x3e, 0x4c, 0xa5, 0xfe, 0xf9, 0x65, 0xb8, 0xe9, 0x05, 0x15, 0x6b, 0xc9, 0xc2, 0x0b, 0x40, 0x60, 0xf5, 0xc9, 0x43, 0xe0, 0x1a, 0xa8, 0xf8, 0x0b, 0xfc, 0x1d, 0x92, 0x99, 0x82, 0x3a, 0x65, 0xda, 0xcc, 0x78, 0x9e, 0x9c, 0x7e, 0xb3, 0x32, 0x4f, 0x5c, 0x76, 0x14, 0x67, 0x18, 0x79, 0xab, 0x02, 0x67, 0x68, 0x83, 0xcb, 0x5a, 0xe6, 0x43, 0x1e, 0xec, 0xd2, 0xdf, 0x6d, 0xd8, 0xc9, 0x0e, 0xe2, 0xad, 0xec, 0xff, 0x45, 0x23, 0xe3, 0x47, 0x21, 0xb0, 0x22, 0x1f, 0x22, 0x57, 0x6a, 0xcc, 0xc2, 0xc1, 0x93, 0x5e, 0x24, 0x8e, 0x8a, 0x9d, 0x40, 0xed, 0x96, 0x41, 0x41, 0x6a, 0xdf, 0x61, 0x2b, 0x08, 0x30, 0x2e, 0xc1, 0x90, 0xfc, 0xe1, 0xa6, 0x28, 0x9f, 0xf2, 0xc2, 0x27, 0xe7, 0x8b, 0xe7, 0x28, 0xd3, 0x3c, 0xb5, 0x5e, 0x9a, 0xf0, 0xbb, 0x27, 0xef, 0x20, 0xde, 0xe3, 0x84, 0x46, 0xff, 0x06, 0xcd, 0x95, 0xd8, 0x6c, 0x06, 0xe7, 0x27, 0xed, 0x77, 0xf7, 0x0f, 0x32, 0xf7, 0xd0, 0xbb, 0xc6, 0xaf, 0x85, 0x44, 0x70, 0x20, 0x23, 0xd5, 0xc1, 0x68, 0xe4, 0x0d, 0xe9, 0xc0, 0xa5, 0xa4, 0xcf, 0x4a, 0x9a, 0x52, 0x60, 0x0a, 0x41, 0xec, 0x26, 0x31, 0x94, 0xd1, 0x1d, 0xa2, 0x83, 0x84, 0xc3, 0xaf, 0xa1, 0x9a, 0x6f, 0x23, 0x1e, 0xd7, 0xe3, 0x86, 0xf5, 0x94, 0x24, 0x9c, 0x66, 0x63, 0x8a, 0x2f, 0xa7, 0xf6, 0x13, 0x0e, 0xd7, 0x3d, 0xfc, 0x56, 0x33, 0xcf, 0x93, 0xf0, 0x8c, 0x8b, 0x47, 0x5b, 0xf9, 0x7f, 0x01, 0xac, 0xc9, 0x09, 0xb7, 0xd3, 0xbb, 0x3b, 0x3e, 0x1f, 0x72, 0x84, 0x5f, 0x05, 0x23, 0x8d, 0x2e, 0x1d, 0x91, 0x62, 0x97, 0x6d, 0x3b, 0xd2, 0x3a, 0xea, 0xd3, 0x18, 0x79, 0x3c, 0xf3, 0xbb, 0xce, 0xc2, 0x0c, 0xb2, 0x62, 0xd6, 0x9f, 0xcc, 0xdc, 0x52, 0xaf, 0x4f, 0x77, 0x52, 0x76, 0xdf, 0x58, 0x3c, 0x57, 0xa2, 0x1e, 0xfe, 0x14, 0xa2, 0xba, 0x97, 0x41, 0x73, 0x81, 0xd9, 0xf8, 0x15, 0x7f, 0x6d, 0xcf, 0x1b, 0x0f, 0x17, 0x07, 0x0d, 0xa9, 0x3b, 0x06, 0x0c, 0xfa, 0xa1, 0x07, 0xb4, 0x3a, 0x75, 0x11, 0x47, 0xba, 0x92, 0x25, 0x07, 0xbc, 0x00, 0xbc, 0xe3, 0x88, 0xba, 0x71, 0x56, 0xbc, 0xb5, 0xfa, 0x8d, 0xe4, 0x1f, 0x5c, 0xc8, 0x4a, 0xe4, 0x5f, 0x02, 0x10, 0x77, 0x40, 0xd4, 0x7b, 0xcf, 0xa7, 0x97, 0x92, 0xb0, 0xd8, 0xc9, 0xe8, 0x2b, 0x2d, 0xb1, 0xb6, 0x68, 0xc4, 0x46, 0x2c, 0xa3, 0x75, 0x4e, 0x09, 0x75, 0x07, 0xc3, 0x6a, 0x55, 0xa3, 0x7a, 0xdf, 0x5e, 0x88, 0x07, 0xc4, 0x53, 0x01, 0xdb, 0xcf, 0xe0, 0x94, 0xaf, 0xe5, 0x22, 0x7d, 0x26, 0x32, 0x6a, 0x5b, 0xad, 0x78, 0x3e, 0x28, 0xa6, 0xa7, 0xa1, 0x6e, 0xc7, 0xaf, 0x95, 0xb8, 0xbc, 0x92, 0xdd, 0x47, 0x14, 0xbd, 0x07, 0x07, 0x5a, 0x98, 0xaa, 0xc2, 0x82, 0x5c, 0xed, 0x92, 0x88, 0x25, 0x48, 0x9c, 0x53, 0x48, 0x8f, 0xfb, 0xdf, 0xe6, 0x2c, 0xfb, 0x9b, 0xc1, 0xab, 0x88, 0x10, 0x4f, 0x7d, 0xe6, 0xc4, 0x0d, 0xf5, 0xa2, 0x5e, 0x16, 0x97, 0xc8, 0x0a, 0xf4, 0x92, 0x56, 0x1f, 0xb6, 0x8b, 0xf1, 0x00, 0x42, 0x9c, 0xd7, 0x40, 0xed, 0x9d, 0x15, 0x09, 0x49, 0xa2, 0xfa, 0xbe, 0x3e, 0xc4, 0xcb, 0xdf, 0x5d, 0x25, 0xb8, 0x2d, 0x70, 0x2e, 0x0f, 0x0f, 0x56, 0x1b, 0xb0, 0x35, 0x0e, 0xba, 0xc1, 0x7b, 0x11, 0x6f, 0xa2, 0x10, 0xe5, 0x7c, 0x23, 0xd7, 0xef, 0x7f, 0xf5, 0x0d, 0x89, 0x3c, 0x5f, 0x2d, 0x54, 0x9d, 0x32, 0x10, 0xcf, 0xf7, 0xff, 0x59, 0x29, 0x8f, 0x87, 0x10, 0x54, 0x5d, 0x73, 0x8d, 0x5b, 0x10, 0x46, 0x98, 0xf5, 0x52, 0x8f, 0xce, 0x5a, 0x4c, 0x63, 0x47, 0x55, 0x6d, 0x0a, 0x75, 0x9b, 0x67, 0xf9, 0x4f, 0x5b, 0x7b, 0x00, 0xaf, 0x16, 0xf7, 0xc5, 0xf9, 0xb1, 0xfd, 0x71, 0xfe, 0xc9, 0x85, 0xa9, 0x20, 0x46, 0xa5, 0xc0, 0xb6, 0x33, 0x11, 0x2b, 0xb2, 0xcd, 0xde, 0x35, 0x81, 0xd9, 0x8b, 0xf4, 0x32, 0x3b, 0x41, 0x7b, 0xdb, 0xc5, 0x5a, 0x51, 0x38, 0x4d, 0x21, 0x22, 0x96, 0x02, 0xd8, 0xb5, 0xef, 0x00, 0x00, 0x1e, 0x57, 0x21, 0xd4, 0x35, 0x96, 0x16, 0x17, 0x46, 0x17, 0xb7, 0x0f, 0x0a, 0x01, 0x98, 0xd2, 0xd6, 0xa3, 0xdd, 0xc0, 0x13, 0x15, 0x4f, 0x51, 0xee, 0x1c, 0xaf, 0x11, 0x50, 0x4f, 0x4a, 0xe8, 0x11, 0x78, 0xcd, 0x9f, 0x69, 0x3d, 0x5b, 0xa0, 0xa7, 0x00, 0xdd, 0xfd, 0x25, 0x03, 0x99, 0xb4, 0x7b, 0xd0, 0x07, 0x32, 0xf3, 0xd8, 0xdf, 0x15, 0x3d, 0x5a, 0x77, 0x36, 0x64, 0x86, 0x4c, 0xe7, 0x01, 0xe3, 0xde, 0x79, 0xaf, 0xee, 0xc2, 0x02, 0xbe, 0x04, 0xf2, 0x5c, 0x2c, 0x81, 0x67, 0x71, 0xd0, 0x2a, 0xea, 0xb6, 0xd9, 0xc8, 0x27, 0xf6, 0x77, 0x16, 0x03, 0x51, 0xd8, 0xdd, 0x2f, 0x84, 0x56, 0x5e, 0xfd, 0x6b, 0xef, 0xf0, 0x73, 0xc4, 0xf5, 0xea, 0x9f, 0x35, 0x06, 0xc3, 0x29, 0x91, 0x3f, 0x78, 0x2f, 0x57, 0xad, 0x2e, 0x4c, 0x7b, 0x04, 0x19, 0xfa, 0x69, 0x94, 0x9c, 0x1b, 0x48, 0x78, 0xb2, 0xd2, 0x7b, 0x11, 0x8c, 0x97, 0x6e, 0xb3, 0x7c, 0x8b, 0x8f, 0x9d, 0x11, 0x08, 0x9a, 0x2f, 0x84, 0x7d, 0x1a, 0x57, 0x52, 0x79, 0x2d, 0x4d, 0x2b, 0x05, 0x87, 0x80, 0x0b, 0x37, 0xb9, 0xd0, 0xa7, 0x04, 0xb3, 0xfd, 0x0a, 0x56, 0x88, 0x5f, 0x80, 0x5e, 0x72, 0xd8, 0xb3, 0x2c, 0x16, 0x08, 0x14, 0x7d, 0x09, 0xbf, 0x7c, 0xd4, 0x92, 0xb8, 0x13, 0xcc, 0xb2, 0x84, 0x72, 0xac, 0x61, 0xc4, 0x04, 0x3c, 0x1b, 0x9b, 0xb2, 0xd7, 0x9b, 0x63, 0xbf, 0xc2, 0xe7, 0x9f, 0xf0, 0xbc, 0x8c, 0x31, 0xf1, 0xd6, 0x2b, 0xce, 0xf4, 0x85, 0x34, 0xae, 0x9b, 0xf6, 0xf2, 0x88, 0x18, 0xa1, 0xc8, 0xbd, 0x93, 0x21, 0xba, 0xd4, 0xcb, 0x43, 0x2e, 0x26, 0x01, 0x5d, 0xf4, 0xda, 0x12, 0xe1, 0x85, 0x14, 0xe3, 0x31, 0x88, 0x6a, 0x01, 0xb5, 0x9b, 0x98, 0x89, 0x2c, 0x4f, 0x74, 0x46, 0x3f, 0x74, 0x24, 0x1a, 0x5c, 0x98, 0x8e, 0x9f, 0xc1, 0xca, 0x10, 0x0d, 0xd7, 0xa4, 0x71, 0x5f, 0xc2, 0x88, 0x18, 0xb1, 0x36, 0x29, 0x7c, 0xed, 0x8c, 0x4d, 0xdc, 0xa6, 0x15, 0xd2, 0x30, 0x44, 0xae, 0xef, 0x5f, 0x62, 0x94, 0xbd, 0xb2, 0x74, 0x7a, 0xf6, 0x89, 0xad, 0xd9, 0xfc, 0x4d, 0x20, 0x88, 0x1d, 0xa5, 0x25, 0x8c, 0x15, 0xed, 0xfe, 0x31, 0xd4, 0xe4, 0xba, 0x5a, 0x82, 0xa4, 0x5a, 0x15, 0xc1, 0xd8, 0x33, 0x72, 0x32, 0x29, 0x93, 0x96, 0x3a, 0xf9, 0xa7, 0x0b, 0x06, 0x54, 0x9c, 0x5a, 0xcc, 0x23, 0x05, 0xdc, 0x54, 0xa3, 0x7d, 0xcd, 0xb8, 0x16, 0x8d, 0xa2, 0x68, 0xb9, 0xd0, 0x9c, 0x70, 0xf5, 0x54, 0x9e, 0xfe, 0xd9, 0x44, 0x3c, 0x1e, 0xc8, 0xc4, 0x14, 0xc9, 0x6f, 0x1d, 0x61, 0x1e, 0xfa, 0x1a, 0xcd, 0xef, 0x88, 0xb2, 0x87, 0x7f, 0xdc, 0xe6, 0x96, 0x8a, 0x55, 0xed, 0x6d, 0x86, 0x20, 0x8f, 0xbf, 0x29, 0xac, 0xcf, 0x94, 0x2b, 0x5e, 0xcc, 0x9d, 0x4d, 0x87, 0xe9, 0xc4, 0x9a, 0x93, 0x2c, 0x08, 0xed, 0x83, 0xe4, 0x88, 0xb3, 0x9d, 0x8f, 0xdd, 0xf2, 0x61, 0xfa, 0xad, 0x8b, 0xc0, 0xaa, 0x7d, 0xbc, 0x89, 0x7b, 0xc7, 0xe8, 0x24, 0x87, 0x4d, 0x9b, 0x82, 0x49, 0xac, 0xc9, 0x54, 0x03, 0x34, 0x56, 0x7b, 0x5c, 0xf7, 0xdb, 0xc0, 0x4e, 0x20, 0xa8, 0xc6, 0x3f, 0x87, 0x05, 0x3c, 0x6e, 0x82, 0xbe, 0x57, 0x91, 0xfd, 0xde, 0x80, 0xbd, 0xcd, 0xba, 0x4a, 0x85, 0x41, 0x31, 0xa6, 0x66, 0xfa, 0x33, 0x5a, 0x63, 0xfd, 0x80, 0xaf, 0xec, 0x07, 0xb2, 0x6a, 0x04, 0x21, 0x7e, 0xfe, 0xa3, 0x73, 0x37, 0x00, 0x59, 0x5d, 0x93, 0xdb, 0x35, 0xc4, 0xb2, 0xc5, 0xe5, 0xaa, 0x5c, 0xf2, 0x1e, 0x02, 0x8b, 0x07, 0x3f, 0xc2, 0x29, 0xd1, 0x31, 0x39, 0x1a, 0x37, 0x91, 0xa3, 0x7d, 0x6d, 0x11, 0xfb, 0x2f, 0x6b, 0x1b, 0x10, 0x91, 0x9e, 0xb8, 0xdb, 0x8c, 0xdd, 0xb1, 0x10, 0xd2, 0x9e, 0xf4, 0xf3, 0x66, 0x6a, 0x38, 0x6d, 0x5e, 0x8e, 0xe4, 0x5f, 0xe8, 0x14, 0x2d, 0x36, 0x8b, 0xf1, 0x7f, 0xc0, 0xaf, 0x80, 0x1f, 0x3e, 0x60, 0x2f, 0x0e, 0xba, 0x4f, 0x79, 0x30, 0x9a, 0x19, 0x14, 0xad, 0x76, 0xcc, 0x6b, 0x98, 0x27, 0xa8, 0x4e, 0xcf, 0x20, 0x22, 0xe8, 0x22, 0x02, 0x2f, 0xf2, 0xb7, 0x6a, 0xbe, 0x27, 0xac, 0x0d, 0x86, 0xf8, 0xff, 0x08, 0x03, 0x80, 0xab, 0x71, 0xbb, 0xba, 0x14, 0x32, 0xc6, 0xf2, 0xa5, 0x17, 0x8d, 0x79, 0xb8, 0x25, 0xd2, 0x9d, 0xb6, 0x2e, 0xf1, 0xd8, 0x7f, 0xa2, 0x65, 0x48, 0x0c, 0xa8, 0x8d, 0x5f, 0x53, 0x6d, 0xb0, 0xdc, 0x6a, 0xbc, 0x40, 0xfa, 0xf0, 0xd0, 0x5b, 0xe7, 0xa9, 0x66, 0x97, 0x77, 0x68, 0x16, 0xff, 0x1a, 0x32, 0xe2, 0x59, 0x0c, 0xa0, 0x10, 0xab, 0xcb, 0x85, 0x35, 0xfd, 0xce, 0xd1, 0x93, 0x5f, 0x74, 0xb5, 0xa4, 0x2e, 0x3b, 0x08, 0xf7, 0x94, 0x32, 0xea, 0x3b, 0x4e, 0xb1, 0xa7, 0x9a, 0xb2, 0x47, 0xde, 0x48, 0xf0, 0xf4, 0xe2, 0x5b, 0x98, 0x98, 0x60, 0xdd, 0x5c, 0xac, 0x42, 0x1f, 0x18, 0x30, 0xd4, 0x51, 0x0f, 0xe4, 0x25, 0x50, 0x77, 0xbb, 0xb1, 0xbf, 0x39, 0x8d, 0x3c, 0x59, 0xf2, 0x0c, 0x01, 0x85, 0x3d, 0xf9, 0x0c, 0x2b, 0x34, 0x98, 0xe5, 0xc7, 0x34, 0x61, 0x6e, 0xbc, 0xe1, 0xf8, 0x0e, 0xea, 0x6a, 0x5f, 0x0f, 0x82, 0x0f, 0x6b, 0x45, 0x19, 0xe0, 0x74, 0xf1, 0xfc, 0xc7, 0x51, 0xe4, 0xc4, 0xc8, 0x83, 0xe8, 0x2a, 0x88, 0xb1, 0x5b, 0x1c, 0x0c, 0x55, 0x1d, 0x10, 0xc4, 0xb4, 0xad, 0x98, 0xc8, 0x13, 0x8e, 0x36, 0x61, 0x28, 0xf0, 0x72, 0xcb, 0xcf, 0x8c, 0x2b, 0x39, 0xfe, 0xd0, 0x2b, 0x1a, 0xfb, 0x3c, 0xfe, 0x9b, 0xcc, 0x0c, 0x03, 0x6d, 0xf0, 0x17, 0xc3, 0xc8, 0x4c, 0xf7, 0x82, 0xb0, 0x68, 0x6a, 0x14, 0x77, 0xdb, 0xf8, 0xf2, 0x83, 0x04, 0xd6, 0x8d, 0x51, 0xfb, 0x0b, 0xe2, 0xba, 0xc7, 0xd1, 0x4f, 0x75, 0xd2, 0x3e, 0xa5, 0xde, 0x9a, 0x23, 0x7e, 0xf5, 0xa8, 0x35, 0xd1, 0xaa, 0xc6, 0x6a, 0xc3, 0x58, 0x6d, 0xa6, 0xc0, 0x8f, 0x7d, 0x97, 0xcb, 0x16, 0x30, 0xdd, 0x12, 0x30, 0x51, 0x6f, 0xc6, 0x1f, 0xa9, 0x3a, 0x29, 0xe7, 0xbb, 0x0b, 0xe9, 0x54, 0xb1, 0xae, 0xac, 0x3e, 0x95, 0x58, 0xec, 0x0c, 0xc4, 0x42, 0x05, 0x77, 0xa0, 0x97, 0x8c, 0x91, 0x86, 0x90, 0xe3, 0x05, 0x00, 0xdd, 0x0a, 0xa0, 0x3b, 0x48, 0xb8, 0x10, 0xbb, 0x95, 0xab, 0xec, 0x4d, 0xac, 0x3c, 0xf5, 0x3d, 0xfa, 0x36, 0x9c, 0xca, 0x14, 0xe8, 0xc4, 0xd7, 0x9d, 0x79, 0xc8, 0xe3, 0x6b, 0x7c, 0xc0, 0x3b, 0xe5, 0xc4, 0x00, 0x6e, 0xaf, 0x7a, 0xe2, 0x02, 0x8a, 0x6c, 0xc6, 0x65, 0x75, 0xa8, 0x56, 0x26, 0x18, 0x4a, 0x0f, 0x65, 0x63, 0x92, 0xfd, 0x89, 0x73, 0x3a, 0xc5, 0x31, 0xb5, 0x06, 0xe9, 0x6c, 0x4d, 0x9c, 0x48, 0x2c, 0xb9, 0x96, 0xe4, 0xf8, 0xb1, 0xd6, 0xe8, 0xe2, 0x52, 0x19, 0xea, 0xb9, 0x7c, 0xcf, 0x6d, 0x7f, 0x79, 0x2b, 0xaa, 0x1d, 0xdf, 0x76, 0x90, 0x56, 0xb7, 0xa8, 0x09, 0xfa, 0xde, 0x39, 0x7f, 0x5c, 0xac, 0x35, 0x9f, 0x05, 0xd4, 0x8f, 0x5c, 0xaa, 0x8b, 0xb7, 0x37, 0x5c, 0xed, 0x6e, 0xbe, 0xff, 0x9c, 0xda, 0x53, 0xfd, 0xaa, 0xd5, 0x2f, 0x3c, 0xb9, 0x8b, 0xa7, 0x4d, 0x60, 0x44, 0xad, 0xe6, 0xd1, 0x7e, 0x99, 0x92, 0xb9, 0x3f, 0x2a, 0xa7, 0x68, 0xa9, 0xc7, 0x78, 0x32, 0xcf, 0x0b, 0xcd, 0x15, 0xc7, 0x81, 0x90, 0x9c, 0x01, 0xac, 0xc9, 0x02, 0xd6, 0x4b, 0xcd, 0x9b, 0x64, 0xda, 0xb1, 0x70, 0x9a, 0x5c, 0x05, 0x29, 0x8f, 0x58, 0xbf, 0x31, 0x18, 0x22, 0x76, 0x14, 0x99, 0x5b, 0xd1, 0x2c, 0x1b, 0xbb, 0x3e, 0x7c, 0x9f, 0x0e, 0xe7, 0xdc, 0xb2, 0x7d, 0xe2, 0x57, 0x42, 0x0f, 0xa7, 0xd1, 0xb0, 0x70, 0xc8, 0xec, 0x26, 0xf0, 0xdc, 0x2d, 0x2b, 0xce, 0xbc, 0x5b, 0x75, 0xb7, 0xf3, 0x28, 0xfe, 0x8a, 0x6f, 0x14, 0x5a, 0x5e, 0x7d, 0x8d, 0x47, 0xc6, 0xf4, 0x5b, 0x86, 0x54, 0xaf, 0x3b, 0xe9, 0x5b, 0x41, 0xca, 0xae, 0xf9, 0xe5, 0xa5, 0x0b, 0x55, 0xb4, 0xcf, 0x0a, 0x26, 0x1b, 0x53, 0x97, 0x75, 0x8b, 0x2a, 0xd7, 0xa3, 0x72, 0x5e, 0xbc, 0xad, 0x6b, 0x70, 0xd7, 0xaf, 0xb1, 0xf8, 0x6d, 0xa7, 0xda, 0x8b, 0xcc, 0x7c, 0xc2, 0xe1, 0xdf, 0x3f, 0xc5, 0x37, 0x01, 0xb0, 0x31, 0xf3, 0x0f, 0x04, 0xfa, 0x87, 0xc1, 0xe5, 0xb0, 0x97, 0x3a, 0xbb, 0xaf, 0x5e, 0xdd, 0x2a, 0x96, 0x4e, 0x63, 0xdb, 0xfa, 0xf6, 0x2a, 0x80, 0x5b, 0x29, 0xd0, 0x12, 0x56, 0x5d, 0x01, 0x5d, 0x1d, 0x51, 0x8d, 0xbf, 0x25, 0xf3, 0xbe, 0x2d, 0x1e, 0x80, 0xe8, 0x76, 0x28, 0xed, 0x41, 0xcc, 0x44, 0x86, 0xf3, 0x80, 0x08, 0xd5, 0x70, 0x0d, 0x98, 0xc5, 0x06, 0x58, 0xd1, 0x07, 0xb3, 0x36, 0xc7, 0xb5, 0x3a, 0x2f, 0x72, 0x35, 0x76, 0x82, 0xa4, 0x61, 0xef, 0x68, 0x3e, 0xe4, 0xab, 0x9d, 0xa4, 0xe7, 0x47, 0x1d, 0x6e, 0xee, 0x46, 0x2b, 0x61, 0xfc, 0xa8, 0x98, 0x9d, 0xfe, 0xbe, 0x42, 0x17, 0x66, 0x3e, 0xdb, 0x4a, 0x17, 0x93, 0xec, 0x2a, 0x81, 0x76, 0x19, 0x5a, 0x0d, 0xc2, 0xa6, 0x9e, 0xbb, 0x84, 0x3a, 0x93, 0x09, 0x52, 0xe3, 0x9e, 0x18, 0xdf, 0x5b, 0x22, 0x0a, 0xcc, 0x8a, 0xf6, 0xae, 0xc0, 0x4b, 0x16, 0x5f, 0xba, 0x73, 0x98, 0x29, 0xa6, 0x10, 0xe2, 0x2e, 0x2f, 0xee, 0x1b, 0x48, 0xd5, 0x60, 0xdf, 0xf0, 0x3f, 0x3c, 0x37, 0x5f, 0xd2, 0x28, 0xc8, 0xf2, 0x82, 0x14, 0x4a, 0xd3, 0xe8, 0x08, 0x3c, 0xd6, 0x95, 0x20, 0xd6, 0xa1, 0xa7, 0xd5, 0x40, 0x10, 0x9a, 0x7d, 0x01, 0xd8, 0x60, 0x15, 0xba, 0x6a, 0xb3, 0x3f, 0x14, 0x1a, 0xaa, 0x87, 0xf7, 0x80, 0x8a, 0xea, 0xfd, 0x1e, 0xdf, 0x99, 0x26, 0x44, 0xcc, 0xfa, 0xcd, 0x31, 0xa0, 0xf0, 0xda, 0x7b, 0xa9, 0x5c, 0x3a, 0xb1, 0x4d, 0xe4, 0x8c, 0x3e, 0x56, 0xf3, 0x1d, 0x90, 0x8e, 0x00, 0x17, 0x7a, 0x8c, 0x14, 0xf5, 0xd7, 0xcd, 0x86, 0x3a, 0x71, 0x07, 0x09, 0x63, 0x21, 0xb9, 0xea, 0x1a, 0x37, 0x07, 0x92, 0xac, 0x1b, 0xc5, 0x52, 0xbd, 0x35, 0xd2, 0x60, 0x3b, 0x0b, 0xa7, 0x1c, 0x90, 0xa9, 0x2f, 0x98, 0x1c, 0x46, 0xda, 0x58, 0xe2, 0x24, 0xed, 0x56, 0x81, 0xb8, 0x1c, 0x49, 0x67, 0x0b, 0x5a, 0x27, 0x41, 0x60, 0xf0, 0xe9, 0xb5, 0x17, 0xcc, 0x8e, 0x54, 0xd1, 0x1c, 0x62, 0xca, 0xd5, 0x1c, 0x80, 0x58, 0xb3, 0x2c, 0x96, 0x85, 0x27, 0x26, 0xe8, 0x10, 0x3f, 0xee, 0x98, 0x28, 0xc0, 0x4b, 0x24, 0xdf, 0xc7, 0xf5, 0x30, 0xdd, 0xac, 0xef, 0x86, 0x51, 0x2b, 0x16, 0x5b, 0x2e, 0xc6, 0xfb, 0xd4, 0x93, 0x65, 0xee, 0xc8, 0x8a, 0x40, 0x5b, 0xc8, 0xf6, 0xfe, 0x5a, 0x5c, 0xc7, 0x1e, 0x81, 0x90, 0x70, 0x97, 0xfc, 0xaf, 0x9b, 0xbb, 0xe0, 0x4f, 0x1b, 0x61, 0xbd, 0x8d, 0x22, 0x43, 0x73, 0x9a, 0xb4, 0xa5, 0x46, 0x77, 0x5b, 0x38, 0x34, 0xfc, 0x1d, 0x3d, 0x85, 0x1f, 0xab, 0xed, 0xa5, 0x73, 0xdb, 0x19, 0x2f, 0xef, 0x58, 0x0e, 0x4a, 0xf1, 0x98, 0xbb, 0x38, 0x82, 0x0f, 0x16, 0x2c, 0xdc, 0xa3, 0xbb, 0x5c, 0x2a, 0x5f, 0xd6, 0x58, 0x8e, 0x6b, 0x44, 0x9a, 0x68, 0x3c, 0xf5, 0x5e, 0xd6, 0x08, 0x95, 0xb4, 0x77, 0x7d, 0x6b, 0xd3, 0x75, 0xb2, 0x81, 0xb0, 0xc2, 0x5e, 0x05, 0xcf, 0xa1, 0x48, 0xef, 0x59, 0x69, 0xfe, 0xe4, 0x70, 0x85, 0xca, 0x5a, 0xbf, 0xc0, 0xe2, 0xfe, 0x55, 0xc0, 0xdf, 0x52, 0xb3, 0xcf, 0x70, 0x9b, 0x23, 0xe2, 0x50, 0xfa, 0x4c, 0xd3, 0x75, 0xd9, 0x04, 0xf2, 0x8b, 0x88, 0x65, 0xbc, 0xa0, 0x28, 0x23, 0xea, 0x21, 0xc9, 0x1c, 0xae, 0x05, 0xcf, 0x31, 0x39, 0x48, 0x9a, 0x55, 0x80, 0x9b, 0x66, 0xe3, 0x40, 0x5a, 0x6f, 0x35, 0x3f, 0xbe, 0x59, 0x72, 0xd6, 0x54, 0xd0, 0xa7, 0xac, 0xad, 0x6c, 0x1a, 0xc4, 0x57, 0xd7, 0xdb, 0xba, 0x0d, 0x31, 0x9b, 0x49, 0x2b, 0xb3, 0xc1, 0x11, 0x65, 0x93, 0xbb, 0x97, 0xb7, 0x28, 0x92, 0x8e, 0x9f, 0x4f, 0xc2, 0x55, 0x8b, 0x0d, 0x48, 0xc0, 0x8d, 0x76, 0xfc, 0x1b, 0x56, 0xcd, 0x21, 0x6c, 0x62, 0xec, 0x3b, 0xf9, 0x70, 0xe6, 0x20, 0x0a, 0x35, 0xec, 0x52, 0xf0, 0x51, 0x6d, 0x8c, 0x46, 0x82, 0x81, 0x9b, 0x77, 0x18, 0x88, 0x6f, 0x81, 0xa9, 0x0e, 0x72, 0xf8, 0x05, 0xf3, 0x19, 0x4d, 0x6c, 0xc8, 0xb8, 0x50, 0xff, 0x7b, 0x9a, 0xf4, 0x75, 0x37, 0x51, 0x52, 0x0f, 0x86, 0x4b, 0xf1, 0xce, 0xb9, 0xa6, 0x45, 0xe3, 0x89, 0x45, 0x75, 0x67, 0xfe, 0x24, 0x62, 0x4c, 0x90, 0xe8, 0xe4, 0x94, 0x8d, 0xbb, 0x56, 0xc0, 0xba, 0x56, 0x56, 0x8c, 0x3d, 0x5f, 0xc6, 0xd9, 0xba, 0xf6, 0x16, 0xeb, 0xbd, 0x8b, 0xc6, 0xd4, 0x58, 0xf2, 0x26, 0x30, 0x0d, 0xb9, 0x61, 0x13, 0xed, 0xb9, 0xb9, 0x40, 0x02, 0xeb, 0x14, 0x9c, 0xeb, 0x7d, 0xb8, 0xe2, 0xc6, 0x25, 0x53, 0x97, 0x53, 0xb6, 0x3e, 0x41, 0x55, 0xf1, 0x02, 0xd4, 0x3c, 0x9d, 0x1c, 0x6d, 0x02, 0xda, 0xfd, 0x42, 0x53, 0xb2, 0x55, 0xd9, 0xf0, 0xf1, 0x91, 0x79, 0x55, 0x36, 0xa2, 0xdf, 0x9a, 0x4b, 0x01, 0x31, 0x97, 0xb2, 0xf0, 0x38, 0x4b, 0x80, 0x02, 0xc9, 0x7f, 0x6f, 0xdd, 0x84, 0xa6, 0x2e, 0x3f, 0xc2, 0x08, 0xfb, 0x3f, 0xc8, 0x1f, 0x74, 0xd6, 0x41, 0x41, 0xaa, 0x9d, 0xeb, 0x80, 0x78, 0xd8, 0x90, 0xcf, 0x13, 0xb4, 0x38, 0x66, 0xe1, 0xcd, 0x9d, 0x67, 0x8f, 0xf3, 0xdf, 0xc1, 0x5e, 0x2e, 0x79, 0x54, 0xbd, 0xff, 0x74, 0x57, 0x1d, 0xe9, 0xda, 0xf7, 0x01, 0x30, 0x6e, 0x41, 0x54, 0xe1, 0x9a, 0x42, 0x00, 0x12, 0xa9, 0x6d, 0xbc, 0x6b, 0x36, 0x3d, 0x25, 0xe6, 0xe4, 0x1b, 0x11, 0xd2, 0x50, 0x81, 0x20, 0x1e, 0x44, 0x60, 0x94, 0xd4, 0x2e, 0xbf, 0x62, 0xe4, 0xd0, 0xa5, 0x88, 0x23, 0x38, 0x3a, 0xa2, 0x93, 0xf3, 0x29, 0xb8, 0xe5, 0x7e, 0x48, 0x5b, 0x3c, 0xfd, 0x7b, 0xf0, 0x34, 0x2f, 0xd6, 0x4b, 0x23, 0xa2, 0x01, 0x80, 0x9f, 0x23, 0xe1, 0xf5, 0x40, 0x79, 0x74, 0xbc, 0xa6, 0x53, 0xfd, 0x20, 0xbe, 0x7e, 0x62, 0x7e, 0x42, 0x5b, 0xd2, 0x57, 0x7f, 0x91, 0xaa, 0xa2, 0x5b, 0xff, 0x9a, 0x67, 0x96, 0xf5, 0x04, 0x89, 0x50, 0xa3, 0xa4, 0xe4, 0xcc, 0xd1, 0x76, 0x97, 0x73, 0xd1, 0xd4, 0xa3, 0x1c, 0xb2, 0xdf, 0xb6, 0x8a, 0xb7, 0x21, 0x41, 0x36, 0x07, 0x71, 0xd0, 0x4f, 0xa6, 0x16, 0x9b, 0x00, 0xa4, 0x2f, 0x58, 0xf1, 0x95, 0x52, 0x54, 0x10, 0x41, 0x73, 0xc2, 0x91, 0x9c, 0x07, 0x53, 0x33, 0xf8, 0x6a, 0x07, 0xc6, 0x79, 0x7e, 0x42, 0xea, 0xc9, 0x96, 0x22, 0x19, 0x0e, 0x92, 0x10, 0xe8, 0x19, 0x4b, 0x95, 0x89, 0xe0, 0x31, 0x6f, 0x95, 0x2f, 0x32, 0xe5, 0x08, 0x9a, 0xde, 0x57, 0x8e, 0xb6, 0xc9, 0x19, 0xfd, 0x89, 0x31, 0x82, 0x22, 0x3e, 0xe1, 0x3f, 0xc0, 0x1d, 0x55, 0xed, 0xd6, 0xbb, 0x1f, 0xe8, 0x21, 0x6e, 0x8a, 0x5d, 0xe2, 0x04, 0x7c, 0xa7, 0xe1, 0xb5, 0xa1, 0xd8, 0xb2, 0x55, 0xc5, 0x95, 0x37, 0xcf, 0x82, 0x28, 0x66, 0xce, 0x1c, 0xd0, 0x4c, 0xbd, 0xa9, 0x5b, 0x52, 0xf2, 0x75, 0xf7, 0xc0, 0x26, 0xa4, 0x46, 0x7f, 0x29, 0x19, 0xb0, 0x23, 0xd3, 0x97, 0xfd, 0x29, 0x3e, 0x26, 0x23, 0x7c, 0x32, 0xb9, 0x5c, 0x3e, 0xe1, 0x0d, 0x7c, 0xc6, 0xd5, 0xd4, 0x82, 0xe5, 0x26, 0x13, 0x6d, 0x6e, 0xf0, 0xc9, 0x51, 0xf5, 0x04, 0xd1, 0xa9, 0xd6, 0xde, 0x09, 0xef, 0x7a, 0xd8, 0xb4, 0x6a, 0xd5, 0x9d, 0x1d, 0x48, 0x33, 0xdf, 0x7e, 0xec, 0x35, 0x4d, 0x1f, 0x89, 0x16, 0xbf, 0xc2, 0xf0, 0x33, 0xb4, 0x3f, 0xa6, 0xcb, 0xff, 0x6c, 0x3a, 0x03, 0xbd, 0x3f, 0xd5, 0x2d, 0x8a, 0x37, 0x13, 0x49, 0xf5, 0xf7, 0x11, 0xcc, 0x31, 0x35, 0xc8, 0xa1, 0x0d, 0xd2, 0x99, 0x6e, 0x25, 0x4a, 0x28, 0x18, 0x5a, 0x4f, 0x6e, 0x89, 0x81, 0xb1, 0x0a, 0xb1, 0x58, 0x81, 0xd8, 0xca, 0xbe, 0x76, 0xc5, 0xe1, 0x23, 0x8f, 0xe2, 0x92, 0x3d, 0xfa, 0xb7, 0x13, 0xfc, 0x35, 0xd9, 0x74, 0xc1, 0x73, 0xbf, 0x24, 0xcb, 0x41, 0xd1, 0xb8, 0xf1, 0x69, 0xc2, 0xe8, 0x97, 0x17, 0x20, 0xda, 0xdb, 0x3a, 0x29, 0xa4, 0x0f, 0x2d, 0xe1, 0x0c, 0x6c, 0x97, 0x61, 0x91, 0x04, 0x90, 0x72, 0xb0, 0xf9, 0x05, 0x5a, 0x60, 0xed, 0x5d, 0xf6, 0xdf, 0xb9, 0x5c, 0x09, 0xb0, 0x62, 0x48, 0xd4, 0xe5, 0x49, 0x4b, 0xe7, 0x9a, 0xa1, 0x19, 0x36, 0xc2, 0x26, 0xd2, 0x6f, 0x26, 0x0c, 0x2a, 0x8b, 0xaa, 0x36, 0xc7, 0xa4, 0xd2, 0xa9, 0xeb, 0x06, 0x86, 0x40, 0x52, 0x88, 0x12, 0xa1, 0x5e, 0x1d, 0x71, 0x6f, 0x71, 0xa6, 0xcb, 0xc2, 0x9a, 0x0a, 0x3c, 0xd4, 0x75, 0x89, 0xd7, 0xfd, 0x4c, 0x4d, 0xeb, 0xe1, 0x82, 0x42, 0x84, 0xe8, 0x32, 0x28, 0x35, 0xee, 0x13, 0xe7, 0x15, 0x3c, 0x9f, 0x22, 0x08, 0xb7, 0x74, 0x0e, 0x40, 0x58, 0xfa, 0x85, 0x03, 0xdc, 0x46, 0x56, 0xae, 0xbd, 0x3e, 0xe0, 0xfa, 0x60, 0xfe, 0xdf, 0x7e, 0x90, 0x7b, 0x85, 0x75, 0x2b, 0x66, 0xcd, 0xc2, 0x1b, 0x54, 0x0c, 0x31, 0x88, 0x1b, 0xc8, 0x00, 0x4c, 0x7f, 0xce, 0x9e, 0xa8, 0x0e, 0x7f, 0xb2, 0x35, 0x48, 0x6b, 0x5f, 0x1d, 0x03, 0x21, 0xc6, 0x8a, 0x0e, 0x44, 0xcd, 0x5f, 0x15, 0xe2, 0x1f, 0x27, 0xc4, 0x02, 0x75, 0x4a, 0x2f, 0x7c, 0x13, 0x87, 0x72, 0x0e, 0x95, 0x9e, 0x94, 0xab, 0xeb, 0x4d, 0xb2, 0x16, 0xa3, 0x7e, 0x59, 0xb0, 0x66, 0xbf, 0x33, 0x8f, 0xc6, 0xf2, 0xe6, 0xcf, 0x37, 0x46, 0x39, 0x2d, 0x5a, 0x66, 0x79, 0xd1, 0x82, 0xf0, 0x1b, 0x6c, 0x71, 0x28, 0xa2, 0x83, 0x62, 0xee, 0xc3, 0x0b, 0x4d, 0xed, 0xc7, 0x35, 0x66, 0x16, 0x32, 0x8b, 0xe6, 0x4d, 0xa2, 0x3c, 0x0f, 0x61, 0xf9, 0xb4, 0x6a, 0x42, 0xbe, 0x70, 0x54, 0x6e, 0xc1, 0x11, 0xb8, 0xad, 0xfe, 0xaf, 0x1e, 0xfe, 0xc4, 0x6f, 0xe5, 0xd1, 0x17, 0x58, 0xcc, 0x76, 0x52, 0x62, 0xb8, 0xd6, 0x11, 0xd0, 0xb1, 0x61, 0x4d, 0xc0, 0x2d, 0x47, 0xc9, 0x01, 0x91, 0xeb, 0xad, 0x24, 0xf5, 0x95, 0x71, 0xd6, 0x27, 0x66, 0xfd, 0x6d, 0xf3, 0x92, 0x0f, 0xc0, 0xa2, 0xc9, 0xdc, 0x3c, 0xc1, 0xf6, 0xfa, 0x34, 0x24, 0x2c, 0x7d, 0x79, 0x2a, 0xdd, 0x61, 0x2b, 0x41, 0x4e, 0x28, 0xce, 0xad, 0x47, 0xc3, 0xa0, 0x86, 0x0f, 0xb6, 0x2a, 0x00, 0x98, 0x78, 0x16, 0xf0, 0xf6, 0x18, 0x40, 0x8b, 0x15, 0x26, 0x10, 0x70, 0xac, 0xd1, 0x06, 0xe9, 0x6d, 0x4d, 0x96, 0x6d, 0x7f, 0x78, 0x37, 0x6a, 0x2d, 0xbc, 0xb7, 0x42, 0xe0, 0x37, 0xd1, 0x93, 0x4a, 0x19, 0x01, 0xbc, 0xe5, 0x4e, 0x97, 0x9d, 0x9c, 0x5e, 0x0b, 0x9e, 0xc7, 0x91, 0x90, 0xf2, 0x5d, 0x56, 0xeb, 0x1d, 0x65, 0xe5, 0x86, 0xb3, 0xae, 0x24, 0xc0, 0x63, 0xc0, 0xc7, 0x88, 0x35, 0x12, 0xbc, 0x2a, 0x10, 0x7e, 0xc6, 0x68, 0x7f, 0xf1, 0x68, 0xcd, 0xb4, 0x67, 0x04, 0x3e, 0xce, 0x17, 0x44, 0xd2, 0x57, 0xea, 0xb9, 0xe4, 0x11, 0x32, 0xc2, 0x66, 0xf2, 0x99, 0xb0, 0x77, 0x6d, 0x57, 0x27, 0x38, 0xf3, 0xa9, 0xc7, 0xdc, 0xba, 0x7e, 0x0c, 0xff, 0xbd, 0x73, 0x73, 0x39, 0x04, 0x01, 0xdf, 0xf2, 0x25, 0xf5, 0x3a, 0x78, 0x0b, 0x21, 0x5f, 0x4e, 0xf6, 0x52, 0x38, 0xc8, 0xc3, 0x82, 0x23, 0xd4, 0x6e, 0x4e, 0x9b, 0x1b, 0xd5, 0xaa, 0x14, 0x49, 0xbe, 0xd3, 0x26, 0xa8, 0x1c, 0x85, 0xee, 0xf4, 0x8e, 0x6f, 0xb2, 0x6b, 0x29, 0xe4, 0xc3, 0x23, 0x77, 0xd3, 0xa8, 0xa0, 0xbf, 0xf9, 0x78, 0xa6, 0x87, 0x55, 0x88, 0x4c, 0x58, 0xdc, 0x46, 0x52, 0xc1, 0x6f, 0x65, 0xb4, 0x9e, 0x0a, 0x3b, 0x7f, 0x9b, 0x3e, 0x67, 0xe4, 0xf3, 0xe1, 0xb6, 0x8b, 0x7e, 0x04, 0x48, 0x2a, 0xea, 0x25, 0xee, 0x55, 0x48, 0xa6, 0xd7, 0x98, 0xcb, 0x7e, 0x6c, 0xc3, 0xcd, 0x2f, 0x78, 0x85, 0x13, 0xf8, 0x8c, 0x3c, 0x52, 0x4b, 0xa2, 0x0c, 0xf2, 0x81, 0x00, 0x2e, 0x11, 0xcd, 0x5f, 0x8b, 0xcb, 0x6e, 0x4d, 0x8a, 0xb9, 0x29, 0xd0, 0x26, 0xb7, 0xf7, 0x4c, 0x43, 0xeb, 0xfb, 0xa6, 0x42, 0x03, 0xb6, 0xaa, 0xd3, 0xbd, 0x7e, 0xaa, 0x0a, 0xad, 0x2c, 0x68, 0xb6, 0x3b, 0x16, 0x37, 0xee, 0xeb, 0x3d, 0x5c, 0xec, 0xe1, 0xc7, 0xba, 0x1f, 0xa4, 0xaf, 0xaf, 0x7b, 0x22, 0xbb, 0x39, 0x14, 0xf4, 0xae, 0x5d, 0xeb, 0xe4, 0xbf, 0xc9, 0x07, 0xac, 0x4b, 0xb8, 0xc8, 0x01, 0xc7, 0x16, 0x79, 0xd0, 0xf8, 0xe4, 0x24, 0xc8, 0x66, 0xdf, 0xaa, 0x18, 0x0e, 0x5c, 0x12, 0x7a, 0x57, 0x77, 0x22, 0x70, 0x47, 0x6c, 0x2c, 0xcd, 0xf7, 0x45, 0x2b, 0x78, 0x44, 0xb6, 0x0f, 0x6d, 0xc8, 0x45, 0x54, 0x04, 0x09, 0xad, 0xd9, 0x76, 0xef, 0x85, 0xf0, 0x9d, 0x7c, 0x1d, 0xb1, 0xfb, 0xb7, 0xa9, 0x95, 0xfe, 0xe9, 0xa1, 0x40, 0x82, 0x0c, 0x67, 0x9d, 0x98, 0x81, 0x2b, 0x30, 0x86, 0x01, 0x0c, 0xa8, 0x0f, 0xd6, 0x7f, 0xb4, 0xf4, 0x4b, 0xf5, 0x18, 0xba, 0x61, 0xb8, 0x00, 0xae, 0xc3, 0x16, 0x94, 0x27, 0xfc, 0xc2, 0xcc, 0x0b, 0xe8, 0x77, 0x86, 0x94, 0x68, 0xde, 0xd6, 0x54, 0x5a, 0xb2, 0x9d, 0x77, 0xc9, 0x22, 0x5d, 0x49, 0x60, 0x77, 0x4b, 0xf8, 0x25, 0xf6, 0xa6, 0x9a, 0x64, 0x08, 0x48, 0x71, 0xe8, 0x98, 0x7b, 0x6e, 0x71, 0xbd, 0x0d, 0xf5, 0x63, 0x99, 0xa7, 0xe0, 0xbc, 0x81, 0x5a, 0xc6, 0x48, 0x5d, 0x7b, 0x7d, 0x18, 0x52, 0xb1, 0xdd, 0x30, 0x9f, 0x4c, 0xc7, 0x80, 0xc5, 0xd8, 0x66, 0x16, 0xeb, 0xf2, 0xb5, 0x91, 0x80, 0x5b, 0x42, 0xd9, 0x22, 0x4b, 0x31, 0x0d, 0xbf, 0x08, 0x83, 0xbd, 0xfa, 0xb6, 0x99, 0x5a, 0xd0, 0x71, 0xf3, 0xea, 0x7b, 0x99, 0x3e, 0x00, 0x96, 0x6d, 0x8e, 0xec, 0x83, 0xdc, 0xe8, 0x2f, 0x0a, 0x97, 0x03, 0x32, 0x42, 0x6b, 0x4f, 0x37, 0xb5, 0xce, 0x37, 0x8f, 0xbf, 0xb8, 0xa3, 0x0d, 0x37, 0xb4, 0xc2, 0xbc, 0x51, 0x36, 0x06, 0xcd, 0xc3, 0x2f, 0x70, 0xd3, 0x27, 0xdf, 0x0d, 0x33, 0xa1, 0xea, 0xc1, 0xd5, 0xc1, 0xaf, 0x43, 0x20, 0xab, 0xd5, 0x69, 0x26, 0x75, 0x26, 0xa6, 0x1b, 0xd0, 0xa1, 0xd1, 0x0c, 0xeb, 0xca, 0x27, 0xcd, 0x94, 0x45, 0x94, 0x34, 0xa1, 0xa3, 0x2e, 0x84, 0x8e, 0x7c, 0x02, 0x2c, 0x67, 0xbe, 0x14, 0xb2, 0xe8, 0x44, 0xa1, 0xea, 0xe4, 0xab, 0xa7, 0x6b, 0xe3, 0x61, 0xa8, 0x43, 0x0f, 0xfe, 0xaa, 0xea, 0x51, 0xd8, 0x82, 0x75, 0xb7, 0xd1, 0x52, 0x0c, 0x19, 0x74, 0x51, 0x9e, 0xfc, 0x41, 0xca, 0xd3, 0xb6, 0x44, 0x68, 0x43, 0xd3, 0xed, 0xb0, 0xe5, 0xb8, 0x1b, 0xcf, 0xca, 0x86, 0x7a, 0x96, 0x0b, 0x41, 0x0f, 0xc3, 0x00, 0x32, 0x11, 0x82, 0xb2, 0x89, 0xfb, 0x33, 0x93, 0x47, 0xdf, 0x6e, 0x6d, 0x5b, 0xfd, 0x44, 0x99, 0x0b, 0x94, 0xc8, 0x71, 0x96, 0xf8, 0xcf, 0x07, 0x18, 0xe5, 0xf3, 0x18, 0xad, 0x13, 0xde, 0x3b, 0xd9, 0x0a, 0xc5, 0x5e, 0x28, 0x38, 0x32, 0x73, 0x11, 0x41, 0x07, 0x67, 0x20, 0x96, 0xc0, 0x54, 0x55, 0x49, 0xf8, 0xf7, 0xc7, 0x20, 0x2e, 0x64, 0x8c, 0xe8, 0xca, 0xf8, 0xdd, 0x0b, 0x5b, 0x90, 0x76, 0x65, 0x23, 0xf8, 0x3c, 0x54, 0xd5, 0xa7, 0x22, 0x0e, 0x9d, 0xa9, 0x4d, 0x38, 0x61, 0xdc, 0x77, 0xb4, 0x47, 0x5f, 0x91, 0xba, 0x77, 0x48, 0xac, 0x2a, 0x22, 0x95, 0x19, 0x20, 0xc3, 0x66, 0xcf, 0xc9, 0xa4, 0x69, 0x0e, 0x76, 0xa4, 0x95, 0x42, 0xef, 0x39, 0x1b, 0x2a, 0x0a, 0xb1, 0x99, 0x39, 0x7c, 0xbd, 0x91, 0x3d, 0xee, 0x2f, 0x1b, 0x3e, 0x54, 0x03, 0xd6, 0xa9, 0x7a, 0x9c, 0x24, 0xae, 0xdf, 0x51, 0x97, 0xe6, 0xc7, 0x28, 0xa6, 0x39, 0x8c, 0xe1, 0xa5, 0xff, 0x35, 0x37, 0xf4, 0x65, 0x49, 0x62, 0x76, 0x12, 0xe6, 0xe0, 0x44, 0x0b, 0x0d, 0x75, 0xa3, 0xd4, 0x40, 0x71, 0x34, 0xd9, 0x4f, 0x31, 0x6b, 0x0c, 0x6f, 0xe8, 0x42, 0xce, 0x8c, 0xa0, 0x2f, 0x13, 0xe0, 0x7b, 0x53, 0xc1, 0xc5, 0x3f, 0xf4, 0x5a, 0xc7, 0x11, 0x2d, 0xdb, 0xfe, 0x81, 0xe4, 0xe4, 0x9b, 0xc7, 0xfd, 0x18, 0xc0, 0x4c, 0xcd, 0xc7, 0x95, 0x6d, 0xd2, 0xcb, 0x98, 0x7b, 0xa1, 0xaf, 0x34, 0x06, 0x1f, 0x17, 0x96, 0x5b, 0xf4, 0x5b, 0xbc, 0x4b, 0x3d, 0x76, 0xce, 0x2e, 0x81, 0x1f, 0xb2, 0x28, 0xe7, 0x35, 0xdb, 0xab, 0xa6, 0x60, 0x61, 0x3d, 0xbc, 0xf6, 0x57, 0x7c, 0xe3, 0x1b, 0x59, 0x5f, 0xc1, 0x2d, 0x64, 0xbe, 0x5f, 0x5f, 0xea, 0x15, 0xdc, 0xa3, 0x26, 0x85, 0x63, 0xce, 0xae, 0x1b, 0x5a, 0xf6, 0x47, 0x55, 0xdc, 0x1f, 0xfc, 0xe2, 0x6a, 0x17, 0x72, 0xaa, 0xdd, 0x9f, 0x76, 0x0e, 0x9f, 0xcb, 0xd8, 0x71, 0x1b, 0xac, 0x7c, 0xf7, 0x72, 0x2c, 0xae, 0x8c, 0x70, 0x38, 0xb6, 0x29, 0xbe, 0x25, 0xac, 0x52, 0x59, 0x4c, 0x8e, 0xe4, 0x42, 0xf8, 0x90, 0x0d, 0x78, 0x83, 0xb3, 0x9c, 0x23, 0xbb, 0x99, 0x7b, 0x12, 0x8a, 0x98, 0x79, 0x67, 0xd7, 0x0d, 0x4d, 0x91, 0xa7, 0xf3, 0xd8, 0x7b, 0x88, 0xb4, 0xab, 0x03, 0x2f, 0x3e, 0xc9, 0xae, 0x60, 0x5a, 0xae, 0x9a, 0x0e, 0x39, 0x90, 0xb4, 0xc4, 0x50, 0xe4, 0x2a, 0x43, 0x67, 0x24, 0x24, 0x6d, 0xec, 0xd0, 0xaf, 0x61, 0x8c, 0xb3, 0xf9, 0xe8, 0x05, 0x67, 0xc4, 0x10, 0x35, 0x1b, 0x15, 0x16, 0x77, 0x94, 0x2c, 0x89, 0x30, 0x72, 0xb9, 0xad, 0xa5, 0xb5, 0x4d, 0x1e, 0x10, 0x7f, 0x0f, 0xb5, 0xf2, 0x1b, 0xb0, 0xaf, 0xaa, 0x3f, 0xa1, 0x0c, 0x47, 0x8e, 0x83, 0x36, 0x9b, 0x61, 0xdf, 0xe3, 0x90, 0xc7, 0x17, 0x3c, 0xc0, 0xcb, 0x9c, 0x3f, 0x3f, 0xf5, 0x62, 0x62, 0xbb, 0x13, 0x91, 0x79, 0xc8, 0x38, 0x7e, 0xd9, 0x75, 0x06, 0xd9, 0xbe, 0x23, 0x29, 0x28, 0xea, 0x97, 0x24, 0x73, 0x8f, 0x4d, 0x50, 0x41, 0x6f, 0x0f, 0x21, 0xc4, 0x42, 0xc7, 0xac, 0x51, 0x58, 0x92, 0x66, 0x13, 0x7f, 0x15, 0x2f, 0xff, 0x27, 0x14, 0x8f, 0x0a, 0xc4, 0x40, 0x3f, 0x9a, 0x74, 0x51, 0xeb, 0x3b, 0xe2, 0x55, 0x36, 0x94, 0x6a, 0x48, 0xff, 0x99, 0x7e, 0xe4, 0xe2, 0x02, 0x48, 0xba, 0x02, 0xfb, 0x90, 0x82, 0x06, 0x1d, 0xe1, 0xb0, 0x62, 0x9d, 0xe7, 0x48, 0xd8, 0xc3, 0x1c, 0xf2, 0x3e, 0x9e, 0xa4, 0x51, 0x81, 0xf7, 0x74, 0x91, 0xea, 0x83, 0xba, 0x3f, 0xa0, 0x5c, 0x79, 0x5e, 0x6f, 0xb2, 0x74, 0xb7, 0xc7, 0xbe, 0x4e, 0x70, 0x08, 0xf8, 0xef, 0xe0, 0xfc, 0x8a, 0x2a, 0xa2, 0xa5, 0x04, 0x9c, 0xe8, 0x3a, 0x51, 0xd7, 0x12, 0x6c, 0xea, 0xc0, 0x80, 0xed, 0x49, 0x35, 0xa4, 0x33, 0xa1, 0xf3, 0x5b, 0x7a, 0xcc, 0xb7, 0x7d, 0x08, 0x85, 0xa4, 0xb2, 0xb4, 0xd7, 0xe5, 0x88, 0xa9, 0xd5, 0x93, 0xc3, 0x68, 0x8c, 0xd9, 0xf5, 0x0c, 0x36, 0x56, 0x4e, 0xd2, 0xb1, 0xc2, 0xb4, 0xd8, 0x2f, 0xd5, 0x16, 0x25, 0x2e, 0x64, 0xfe, 0xea, 0xab, 0xce, 0x66, 0x07, 0x92, 0x96, 0xcd, 0xd1, 0x7a, 0x51, 0x8a, 0x13, 0x8f, 0xc3, 0x5f, 0x53, 0xcf, 0x45, 0x51, 0x56, 0x7a, 0x69, 0xb7, 0xe6, 0xc3, 0xe1, 0x92, 0xd2, 0xcc, 0x9d, 0x1c, 0x37, 0xd1, 0x34, 0xa4, 0xfe, 0xa4, 0x85, 0x98, 0xa6, 0x59, 0x9e, 0xe4, 0x43, 0x42, 0xdd, 0x7a, 0xc7, 0x1e, 0x54, 0x32, 0x81, 0x8d, 0x72, 0xd5, 0xe3, 0xc7, 0xe0, 0x74, 0x88, 0x8e, 0xaa, 0xff, 0x76, 0x61, 0x9f, 0x13, 0xa0, 0xf3, 0xfa, 0x12, 0xaf, 0xdb, 0x42, 0x79, 0x01, 0x8d, 0x6e, 0x6e, 0xf2, 0x89, 0x4d, 0x99, 0x5b, 0xd2, 0x25, 0x35, 0x59, 0xa2, 0x9b, 0x67, 0x50, 0x5c, 0xd2, 0xce, 0x2f, 0xc2, 0xd7, 0x5b, 0xf5, 0x68, 0x3d, 0x63, 0x74, 0x68, 0x04, 0xf2, 0x54, 0x58, 0xc0, 0x63, 0x5c, 0x79, 0xf6, 0x2d, 0xed, 0x31, 0xca, 0x00, 0xcf, 0xbc, 0xd7, 0x11, 0x31, 0x1e, 0x5f, 0xb2, 0xea, 0x5c, 0xa4, 0x25, 0x05, 0xeb, 0x95, 0xb2, 0x7d, 0x69, 0xad, 0xf7, 0x45, 0x8b, 0x19, 0x80, 0x8b, 0x57, 0x19, 0x97, 0x3e, 0x93, 0xa8, 0x5d, 0xce, 0x7d, 0x5f, 0x1a, 0x33, 0xbc, 0x97, 0xd2, 0x30, 0x97, 0xce, 0x19, 0xd9, 0x65, 0x4c, 0x27, 0x53, 0x44, 0x05, 0x2f, 0xdb, 0x0e, 0xc2, 0xed, 0x09, 0x89, 0x7c, 0x7f, 0x56, 0xde, 0x08, 0x75, 0xdd, 0x4d, 0xfa, 0x2b, 0x5e, 0x1e, 0xc3, 0x57, 0x88, 0xdb, 0x1c, 0xde, 0x78, 0xbc, 0xa8, 0xec, 0x7d, 0x63, 0xd4, 0x43, 0x1e, 0xc9, 0x03, 0xd3, 0x5e, 0x79, 0xe8, 0x8b, 0x3e, 0xfc, 0x32, 0x70, 0x84, 0x94, 0x6f, 0xec, 0xbb, 0x2d, 0x2a, 0x68, 0x7b, 0x90, 0x57, 0x1d, 0xea, 0xda, 0xf2, 0x26, 0x83, 0x2c, 0xe2, 0xda, 0x16, 0xa5, 0x23, 0x5a, 0x10, 0x8d, 0x24, 0x66, 0xfd, 0xd3, 0x6e, 0x75, 0x4b, 0xba, 0x87, 0x04, 0x51, 0xcf, 0x16, 0x2e, 0x90, 0x1e, 0x47, 0x7d, 0x38, 0xa5, 0x71, 0x00, 0xee, 0x09, 0xf7, 0x9d, 0xcc, 0x88, 0x6c, 0xa9, 0xa9, 0x2f, 0xfa, 0xb6, 0x9b, 0x4d, 0x04, 0xac, 0xbb, 0x27, 0x0a, 0x1c, 0x28, 0xed, 0xcd, 0xd0, 0x4f, 0xed, 0xb4, 0xa7, 0x69, 0x07, 0x6f, 0xa0, 0x44, 0x61, 0xda, 0x34, 0x47, 0x5c, 0x24, 0xe9, 0xb1, 0xc6, 0x30, 0x24, 0x21, 0x51, 0x3b, 0x3e, 0x5b, 0x43, 0xc0, 0xdb, 0x49, 0x70, 0x98, 0x77, 0x40, 0x65, 0x66, 0x42, 0x85, 0xe7, 0x32, 0x2e, 0x10, 0x9c, 0x54, 0x46, 0x8f, 0x07, 0x94, 0x41, 0xae, 0xba, 0x8f, 0x57, 0x96, 0xc6, 0x5d, 0x53, 0xb3, 0x77, 0x70, 0xea, 0xbb, 0x3e, 0xbf, 0x4b, 0xec, 0xef, 0x24, 0xf7, 0x95, 0x2c, 0x03, 0xd3, 0xd7, 0x21, 0x2d, 0x7b, 0xad, 0x73, 0x04, 0xda, 0x2a, 0x72, 0xdf, 0xf8, 0x02, 0x96, 0xb0, 0x12, 0x4c, 0x29, 0xe4, 0xf0, 0x86, 0x41, 0x8a, 0x73, 0xda, 0xf1, 0xb8, 0x6e, 0x9f, 0xc0, 0x2a, 0xb6, 0x23, 0x5a, 0x2d, 0x7d, 0xa8, 0x86, 0xbb, 0xdb, 0xac, 0x58, 0xe8, 0xae, 0x6e, 0xa8, 0x7d, 0xa4, 0xad, 0xc3, 0xe2, 0x96, 0xb3, 0x5f, 0x41, 0x18, 0x92, 0xd5, 0xe8, 0x4e, 0xae, 0x8a, 0xef, 0x01, 0x7b, 0xae, 0x1b, 0xf1, 0x88, 0x2a, 0x03, 0x6d, 0xbd, 0xd3, 0x71, 0x22, 0xe1, 0xe4, 0x0b, 0x31, 0x5e, 0xab, 0x33, 0x84, 0x49, 0x82, 0x2b, 0x61, 0x9d, 0x01, 0x7d, 0x3f, 0xc7, 0x72, 0x9a, 0xd9, 0x68, 0x85, 0xc1, 0x82, 0x56, 0x46, 0x22, 0xb8, 0xe4, 0x4b, 0x44, 0xfb, 0x63, 0x32, 0xa4, 0xe0, 0xe8, 0x4b, 0x9f, 0x61, 0x50, 0x91, 0x91, 0x77, 0x82, 0xdf, 0x3f, 0xeb, 0xf4, 0x60, 0x72, 0x68, 0x71, 0x48, 0xe5, 0xd6, 0x19, 0xc1, 0x61, 0xe3, 0xa9, 0x28, 0x27, 0xe2, 0xfc, 0x7a, 0x8e, 0xd9, 0xd2, 0x09, 0xed, 0xd5, 0xd1, 0x74, 0xbb, 0x81, 0xc9, 0xd5, 0xf5, 0xf7, 0x3c, 0x3c, 0xc0, 0xd6, 0x1e, 0x5d, 0x50, 0x95, 0xd9, 0x85, 0x08, 0x17, 0x94, 0xd3, 0xe3, 0x7f, 0xb5, 0xa4, 0x12, 0x45, 0xa4, 0x4f, 0xe7, 0x8a, 0xd2, 0x13, 0xf1, 0xa8, 0xfb, 0x4d, 0x69, 0x0e, 0xa8, 0xee, 0xcc, 0x4b, 0xf7, 0x2d, 0xca, 0x68, 0x9e, 0x79, 0x5f, 0x7b, 0x2e, 0xb2, 0x40, 0x79, 0x95, 0x98, 0x78, 0x4c, 0xe7, 0x84, 0x53, 0x25, 0x5e, 0x56, 0x7b, 0x14, 0x9f, 0xae, 0x61, 0xd6, 0x3e, 0x5f, 0xde, 0xee, 0x85, 0x20, 0x1b, 0xf7, 0x71, 0x85, 0xae, 0x38, 0xfe, 0x2e, 0x05, 0x79, 0xa4, 0x3f, 0x08, 0x15, 0x22, 0x0f, 0xfa, 0x51, 0x7a, 0x25, 0xa0, 0xec, 0x3d, 0x60, 0xa6, 0xf7, 0x08, 0x75, 0x3e, 0xe7, 0x4f, 0x9f, 0x0a, 0xe9, 0x59, 0x91, 0x3c, 0x75, 0x8c, 0xb0, 0xfc, 0x26, 0xeb, 0x7f, 0x0a, 0xc9, 0xdd, 0x5a, 0xa4, 0xb4, 0x30, 0x68, 0xaa, 0x59, 0x5d, 0xcb, 0x00, 0x1a, 0x0e, 0x19, 0x34, 0x5f, 0xdd, 0x10, 0x60, 0xe6, 0x5f, 0x85, 0x52, 0x5b, 0x61, 0x9e, 0xeb, 0x29, 0x71, 0x41, 0xc5, 0x8f, 0xa1, 0xcc, 0x18, 0xf6, 0x87, 0x07, 0xdf, 0x82, 0x88, 0x57, 0x36, 0xe7, 0x57, 0x34, 0x07, 0x7e, 0xb8, 0xdc, 0xe5, 0x98, 0x8a, 0x49, 0x38, 0x12, 0x04, 0x61, 0x9b, 0x29, 0x3f, 0x6e, 0x82, 0x90, 0xf4, 0xcd, 0x20, 0xc0, 0x88, 0xea, 0x88, 0x90, 0x45, 0x6c, 0x12, 0x05, 0xeb, 0xac, 0x00, 0x6b, 0x67, 0x6c, 0x61, 0xa4, 0xe2, 0xc6, 0x36, 0xc1, 0xfd, 0x62, 0xd4, 0xcf, 0x5b, 0xec, 0x89, 0xf3, 0x61, 0xc5, 0x82, 0xba, 0x39, 0xf9, 0xec, 0xaa, 0x1d, 0x72, 0x5a, 0x1d, 0xd2, 0x6b, 0x67, 0x4f, 0x72, 0x27, 0x9c, 0xb5, 0x6f, 0xe2, 0x94, 0x90, 0xd5, 0x08, 0x5d, 0xc3, 0xcf, 0xa5, 0x22, 0xe1, 0x6d, 0x1c, 0x07, 0x8b, 0xa4, 0x1d, 0x55, 0xf9, 0x97, 0xd1, 0xd7, 0xd6, 0x14, 0x57, 0x84, 0x51, 0x62, 0x74, 0x5d, 0x71, 0x3a, 0x86, 0x99, 0xa8, 0x13, 0xba, 0x00, 0xac, 0xa3, 0x7f, 0x95, 0x82, 0xa2, 0x3b, 0x77, 0xdb, 0xd1, 0x3c, 0x09, 0xa4, 0x3b, 0xf1, 0x51, 0xd9, 0xba, 0x5a, 0x9e, 0x9a, 0xbe, 0xbd, 0x6e, 0x80, 0x4a, 0x9b, 0x8e, 0x31, 0x3f, 0xe2, 0x83, 0x32, 0xdd, 0x64, 0x29, 0xfd, 0x87, 0x88, 0x9a, 0x54, 0xc6, 0x3f, 0x51, 0xd4, 0x91, 0x3a, 0x90, 0xcd, 0xcc, 0x5b, 0xfe, 0x51, 0x0e, 0x69, 0x95, 0x8b, 0xa7, 0x07, 0xbb, 0x52, 0xe2, 0xe7, 0xaf, 0xfe, 0x87, 0x3b, 0x27, 0x7b, 0xa4, 0x6c, 0x38, 0x9c, 0x8d, 0x0f, 0x75, 0xb1, 0x22, 0x15, 0x5b, 0x5b, 0x50, 0x41, 0xed, 0x9f, 0xdb, 0xe0, 0x9b, 0x3a, 0x5a, 0xb4, 0x68, 0x34, 0x83, 0x31, 0x4c, 0xb8, 0xa8, 0xec, 0xd7, 0x23, 0x82, 0x50, 0x18, 0x5b, 0x2e, 0x92, 0xbd, 0x62, 0x75, 0xe8, 0x7b, 0x2b, 0x50, 0xf6, 0xb1, 0xac, 0xab, 0x89, 0x48, 0x34, 0x6a, 0x88, 0xdd, 0xff, 0xaa, 0x28, 0x22, 0x08, 0x49, 0x5e, 0x81, 0x1e, 0xa8, 0x9a, 0x03, 0x3a, 0xaf, 0xb2, 0x71, 0x10, 0x12, 0x1c, 0xb9, 0xe4, 0xd3, 0x61, 0x92, 0x9f, 0x09, 0xce, 0x63, 0x22, 0xdf, 0x6d, 0x61, 0xda, 0xdf, 0x34, 0xf8, 0x94, 0x71, 0x7b, 0x6d, 0x93, 0x9e, 0xb4, 0xc1, 0xe0, 0x1a, 0x56, 0xd8, 0xe2, 0x82, 0x1a, 0xdb, 0x2e, 0xe2, 0x6a, 0xda, 0xa0, 0x7a, 0x16, 0xb6, 0xab, 0xc2, 0x4a, 0x3e, 0xed, 0xab, 0xbd, 0x98, 0x07, 0x28, 0x2a, 0xe3, 0xab, 0xed, 0x04, 0x1a, 0xf7, 0x76, 0x66, 0x3b, 0x01, 0x4c, 0x49, 0xa9, 0xb3, 0x84, 0xf9, 0xcf, 0xd9, 0x88, 0xca, 0x07, 0x78, 0x1a, 0x06, 0xba, 0x61, 0x95, 0x2b, 0xc8, 0x07, 0x76, 0x53, 0x2a, 0x8e, 0x1c, 0xf4, 0xd6, 0x24, 0xcc, 0xc9, 0xe2, 0x94, 0xf8, 0x10, 0xed, 0x18, 0xc1, 0xf6, 0xbb, 0x6f, 0xba, 0x50, 0x1f, 0x30, 0xef, 0x8b, 0x1e, 0x5e, 0x26, 0xe6, 0x51, 0x3c, 0x64, 0xde, 0x8b, 0x63, 0xb3, 0xea, 0xbc, 0x11, 0x23, 0x69, 0x15, 0xc4, 0x0f, 0xd9, 0x6d, 0x08, 0xa1, 0x49, 0xe4, 0x8d, 0x98, 0x11, 0xc6, 0x7c, 0x49, 0xc0, 0xb2, 0x0b, 0xe4, 0x56, 0xfb, 0x50, 0xf9, 0xb4, 0x4e, 0x52, 0x3b, 0x50, 0x95, 0x66, 0x83, 0x2d, 0x1c, 0xb9, 0x18, 0x0b, 0xf2, 0x29, 0x2d, 0xdb, 0x93, 0x59, 0xab, 0x75, 0xc3, 0x04, 0x31, 0x8d, 0xbd, 0x91, 0x59, 0xe3, 0x8d, 0xe8, 0x3e, 0xbb, 0xbb, 0x85, 0x3b, 0x8d, 0x29, 0xca, 0xf5, 0xfd, 0x3e, 0x9a, 0x9b, 0x0d, 0x44, 0x23, 0x6c, 0x92, 0x0f, 0xfb, 0x7a, 0xe5, 0xe0, 0x6f, 0xae, 0xda, 0x89, 0x18, 0x0d, 0xf6, 0xd1, 0xaf, 0x39, 0xdc, 0x19, 0x21, 0x3b, 0x09, 0x40, 0xe6, 0x7f, 0xc1, 0xc5, 0x8f, 0x20, 0x49, 0x2b, 0x9f, 0x67, 0x57, 0xa2, 0x9c, 0x8e, 0xc7, 0xe3, 0x66, 0xc9, 0x8f, 0x5c, 0xc7, 0x87, 0xf5, 0x8d, 0x4a, 0xf4, 0x00, 0xb2, 0x51, 0xc3, 0x2c, 0xa2, 0x62, 0x2c, 0x61, 0xf7, 0xc2, 0x30, 0x26, 0x6f, 0x45, 0x24, 0x13, 0x92, 0x64, 0x6d, 0x84, 0x95, 0x90, 0x89, 0x95, 0x7f, 0xc6, 0x4f, 0x4a, 0x8a, 0x64, 0x77, 0x0d, 0xcc, 0x3b, 0x5c, 0x5e, 0x16, 0xe5, 0x01, 0xc6, 0x1d, 0x58, 0x52, 0x0c, 0xd7, 0xbc, 0xad, 0xac, 0x28, 0x7a, 0xa1, 0x85, 0xbe, 0x96, 0xf6, 0xd2, 0x3a, 0x3e, 0xed, 0x5b, 0x90, 0xa3, 0xc8, 0xed, 0xb0, 0x07, 0x8d, 0x07, 0x66, 0x17, 0x08, 0xd6, 0x7e, 0x7c, 0x0f, 0x63, 0x2d, 0xad, 0x0a, 0x0c, 0xac, 0x07, 0xb2, 0x31, 0x26, 0x1f, 0x18, 0x2f, 0xd4, 0x57, 0xe9, 0x92, 0x67, 0xaf, 0xf1, 0x86, 0xa6, 0xde, 0xdf, 0x8f, 0x58, 0xa2, 0x48, 0x7a, 0x64, 0x54, 0xee, 0x94, 0x37, 0xbf, 0x41, 0x19, 0x66, 0x32, 0x26, 0xef, 0x94, 0xd4, 0xf8, 0x94, 0x97, 0x38, 0xcc, 0x56, 0xd6, 0x31, 0xfa, 0xc2, 0xf5, 0xe8, 0xd9, 0x5e, 0xb5, 0x2b, 0xc9, 0x9b, 0x15, 0x08, 0x77, 0x05, 0xbe, 0x9b, 0x5c, 0xbd, 0x9d, 0x24, 0x87, 0x29, 0xd2, 0x5c, 0x9d, 0xea, 0xc9, 0x0a, 0x1e, 0x0e, 0xa6, 0xd1, 0xe9, 0x87, 0xe7, 0x4c, 0x03, 0xdc, 0x44, 0x5d, 0x94, 0x1f, 0xda, 0xc1, 0x32, 0x1f, 0x89, 0xe8, 0x62, 0xde, 0x9b, 0x04, 0x5c, 0x46, 0xa6, 0x61, 0x0f, 0x17, 0xb3, 0xf4, 0x65, 0x24, 0x9f, 0x36, 0xc8, 0xbf, 0xc2, 0x33, 0xe5, 0x72, 0xcf, 0xdd, 0xb0, 0xf0, 0xfb, 0xa7, 0xa8, 0x4a, 0x62, 0x4f, 0x5c, 0x66, 0xa6, 0xfb, 0x2e, 0xae, 0xd9, 0x88, 0x57, 0x05, 0x9d, 0x1f, 0x2b, 0xff, 0x89, 0x09, 0x9e, 0x51, 0xcf, 0xc4, 0x08, 0x86, 0x1c, 0x56, 0x25, 0xf4, 0xc0, 0xe1, 0x60, 0xef, 0x0f, 0x78, 0x51, 0x3c, 0x07, 0x31, 0x84, 0xc8, 0x33, 0x7b, 0x7c, 0x9a, 0xce, 0xb2, 0xf7, 0x07, 0x2c, 0xf1, 0x74, 0x25, 0x56, 0x28, 0xf3, 0x82, 0xf5, 0x6e, 0xfc, 0x15, 0x71, 0x98, 0xe2, 0x74, 0x59, 0x0a, 0x49, 0x48, 0x06, 0xcd, 0xe6, 0xfe, 0x7b, 0xe2, 0x86, 0xc0, 0x90, 0xd6, 0x52, 0xa4, 0x50, 0x97, 0x51, 0x23, 0x9f, 0x86, 0x2e, 0xcc, 0x20, 0xcd, 0x3c, 0x39, 0x55, 0xf3, 0xb7, 0x43, 0x08, 0xae, 0x4d, 0x72, 0xea, 0xf8, 0xdc, 0xb7, 0x7b, 0x64, 0x7e, 0x5e, 0x29, 0xb3, 0xc3, 0x3e, 0xbc, 0xa2, 0x3d, 0x33, 0xf1 ],
+];
+
+const sha1_long_mds = const [
+'d8fd6a91ef3b6ced05b98358a99107c1fac8c807',
+'4a75a406f4de5f9e1132069d66717fc424376388',
+'a135e32581bb06289b8c83f040e9421ec79bbe01',
+'b22b87ea30f4050913f8f0241fc2ae2c319f52e7',
+'d742931bc51d4d44ff938783be73dc7beccc980b',
+'20a3a677c117c61ed3bb19e2ac77f69987896d0b',
+'dd4374e29b17e2ec533813feddc5253765cd37ac',
+'fdccb6e47645928fbbd51ccddc6cef48d6afc011',
+'e50a54470f59fb9b654bffcb4c353e58b683ada5',
+'9b3ed390fbb328a1641fca93691763000523569d',
+'09bf403d8a9d2334f28fab704d9cab87da43731a',
+'7f32d7486bde22ed00eeeaae073858144dc3ee37',
+'37b7277fc606556160f9bc28b06fd55f4424d9cc',
+'dbc7ace190c9dc985d2c3fbed5fe90328352b3b0',
+'796135c20bfd2dfc7a1ff2087aba7f93b2814ef4',
+'baa2e9bef9dd836d3d37013c296ec31919fe7840',
+'3d40608ab9bce3f372bb29a62ff3fcc68e48385d',
+'8bce8c69fd802389c805d2945c7499c9dd279ea2',
+'064c6fccb707f0f3929084eeb0298e800d542370',
+'bf2d47d4435ace28d3c336acdd6313aa8f9c41fd',
+'efe28211673e7bb68657243df023d4b70c0e5325',
+'afc01657b55fffd0c739cf017294a8379f60c2f9',
+'8a148c03dfc846b484ec15809d9cbfaa4b74a060',
+'8ff89c859a6ffa3d3874d3d1be4125f9de62c9bc',
+'c0af54b14db7ef0c68b1300b7350fd2a82fe96e9',
+'4c66ccc9d6a9f1d988bb7ae0fb41be3a1e1a648d',
+'0f5176527280b8e3fa69a6c14ce1f759d6e9c67c',
+'eef7dfc20c57895d31ad15aaab13cf710aa0d739',
+'93239fa543e8bd68b59a4bd55a7be068f18c5ea1',
+'2393e09e218261acb91ff9fb4783253e9b44b9f6',
+'7d90c7a14fc71e228a4f4fd191d3b7ea98c6509e',
+'07f84b3990bbeb9fc280681dc25d96bf8626992c',
+'bfa71db73fb3d8103fd7f2965eb89f2394f0b751',
+'92588ff54cd3903ceab98afd39f1854835f54492',
+'d947e8fd7fb5d805d70c1a21bd6eb5368f312885',
+'66ba577de1222642fd9e3b2a6e20741905356c2c',
+'b1542439b3590f2e43fa30baaee0ed11a9c46bab',
+'18de122bf588dc3d1eca78661673fa8d8acf254e',
+'e4ae28261f24a10355fd1aa1c2554592a331ceda',
+'290d124e77abc911e4be375232ff1798c4b48cb0',
+'fc8456f92f8a8bb38a3248e988a3e12271061510',
+'94a5d77bc308382a8aa317be7bad0a870f006c67',
+'515d2a8972936e6b45b9b457d9eab8e2f62cbc3d',
+'7fb74b4dde68f8c5e0d9b27878040123a9ed5fde',
+'534702c37c6fa8e1bde879ce4d87aa10c4cc8c8a',
+'cdd84a87e1457601d899b2abbe2e0974784491b7',
+'b51232c68cd82ce9ffb4bc1fea0ea9f71354314e',
+'adf2ebb0c337c89334fe8580b53dae70b25d00a7',
+'e2eb69f7d6fab720a3f038ac773b3274b6d113e9',
+'9c5bf7e24e8764745642e23e7cdc5fd44f91bbf9',
+'7731a20dfb7725e61d7aacebb41afbb4a05ffbfb',
+'fa47305e71a8e1e536486a806cbb839d813caf9f',
+'a94d7bf363f32a5a5b6e9f71b2edaa3f2ae31a61',
+'ed76c5bf4ada6a2092e6dbb40ff40909b8ec06cb',
+'6a5fc2f4a741f17a2e62b198d65e4a5ff6a1e748',
+'280ebf4f434e4134fce0d3f7581c2434bab1efbb',
+'af75e59940783e84761dbe59727ed7908a8709b5',
+'06f0df10ed7bc4b446f9271fdbe6ac81e36bc142',
+'e900914d8a38d14b307d1eb8e569a509421d811f',
+'581562f2a9f3097f760488cbe87f823d0fa7524c',
+'844e1f50dd792b283902e66bc1086a273c05d511',
+'61ca85608418090c78ebe8614bb2b80113fe130e',
+'a1f35ddd6a6275fd21bb8c2ebf290a06a2563df7',
+'b09d1a963ba9bf92907707b7d48b96e0d37dbd79',
+];
diff --git a/tests/compiler/dart2js/sha1_short_test_vectors.dart b/tests/compiler/dart2js/sha1_short_test_vectors.dart
new file mode 100644
index 0000000..f17e147
--- /dev/null
+++ b/tests/compiler/dart2js/sha1_short_test_vectors.dart
@@ -0,0 +1,144 @@
+// 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.
+
+part of sha1_test;
+
+// Standard test vectors from:
+//   http://csrc.nist.gov/groups/STM/cavp/documents/shs/shabytetestvectors.zip
+
+const sha1_short_inputs = const [
+const [ ],
+const [ 0x36 ],
+const [ 0x19, 0x5a ],
+const [ 0xdf, 0x4b, 0xd2 ],
+const [ 0x54, 0x9e, 0x95, 0x9e ],
+const [ 0xf7, 0xfb, 0x1b, 0xe2, 0x05 ],
+const [ 0xc0, 0xe5, 0xab, 0xea, 0xea, 0x63 ],
+const [ 0x63, 0xbf, 0xc1, 0xed, 0x7f, 0x78, 0xab ],
+const [ 0x7e, 0x3d, 0x7b, 0x3e, 0xad, 0xa9, 0x88, 0x66 ],
+const [ 0x9e, 0x61, 0xe5, 0x5d, 0x9e, 0xd3, 0x7b, 0x1c, 0x20 ],
+const [ 0x97, 0x77, 0xcf, 0x90, 0xdd, 0x7c, 0x7e, 0x86, 0x35, 0x06 ],
+const [ 0x4e, 0xb0, 0x8c, 0x9e, 0x68, 0x3c, 0x94, 0xbe, 0xa0, 0x0d, 0xfa ],
+const [ 0x09, 0x38, 0xf2, 0xe2, 0xeb, 0xb6, 0x4f, 0x8a, 0xf8, 0xbb, 0xfc, 0x91 ],
+const [ 0x74, 0xc9, 0x99, 0x6d, 0x14, 0xe8, 0x7d, 0x3e, 0x6c, 0xbe, 0xa7, 0x02, 0x9d ],
+const [ 0x51, 0xdc, 0xa5, 0xc0, 0xf8, 0xe5, 0xd4, 0x95, 0x96, 0xf3, 0x2d, 0x3e, 0xb8, 0x74 ],
+const [ 0x3a, 0x36, 0xea, 0x49, 0x68, 0x48, 0x20, 0xa2, 0xad, 0xc7, 0xfc, 0x41, 0x75, 0xba, 0x78 ],
+const [ 0x35, 0x52, 0x69, 0x4c, 0xdf, 0x66, 0x3f, 0xd9, 0x4b, 0x22, 0x47, 0x47, 0xac, 0x40, 0x6a, 0xaf ],
+const [ 0xf2, 0x16, 0xa1, 0xcb, 0xde, 0x24, 0x46, 0xb1, 0xed, 0xf4, 0x1e, 0x93, 0x48, 0x1d, 0x33, 0xe2, 0xed ],
+const [ 0xa3, 0xcf, 0x71, 0x4b, 0xf1, 0x12, 0x64, 0x7e, 0x72, 0x7e, 0x8c, 0xfd, 0x46, 0x49, 0x9a, 0xcd, 0x35, 0xa6 ],
+const [ 0x14, 0x8d, 0xe6, 0x40, 0xf3, 0xc1, 0x15, 0x91, 0xa6, 0xf8, 0xc5, 0xc4, 0x86, 0x32, 0xc5, 0xfb, 0x79, 0xd3, 0xb7 ],
+const [ 0x63, 0xa3, 0xcc, 0x83, 0xfd, 0x1e, 0xc1, 0xb6, 0x68, 0x0e, 0x99, 0x74, 0xa0, 0x51, 0x4e, 0x1a, 0x9e, 0xce, 0xbb, 0x6a ],
+const [ 0x87, 0x5a, 0x90, 0x90, 0x9a, 0x8a, 0xfc, 0x92, 0xfb, 0x70, 0x70, 0x04, 0x7e, 0x9d, 0x08, 0x1e, 0xc9, 0x2f, 0x3d, 0x08, 0xb8 ],
+const [ 0x44, 0x4b, 0x25, 0xf9, 0xc9, 0x25, 0x9d, 0xc2, 0x17, 0x77, 0x2c, 0xc4, 0x47, 0x8c, 0x44, 0xb6, 0xfe, 0xff, 0x62, 0x35, 0x36, 0x73 ],
+const [ 0x48, 0x73, 0x51, 0xc8, 0xa5, 0xf4, 0x40, 0xe4, 0xd0, 0x33, 0x86, 0x48, 0x3d, 0x5f, 0xe7, 0xbb, 0x66, 0x9d, 0x41, 0xad, 0xcb, 0xfd, 0xb7 ],
+const [ 0x46, 0xb0, 0x61, 0xef, 0x13, 0x2b, 0x87, 0xf6, 0xd3, 0xb0, 0xee, 0x24, 0x62, 0xf6, 0x7d, 0x91, 0x09, 0x77, 0xda, 0x20, 0xae, 0xd1, 0x37, 0x05 ],
+const [ 0x38, 0x42, 0xb6, 0x13, 0x7b, 0xb9, 0xd2, 0x7f, 0x3c, 0xa5, 0xba, 0xfe, 0x5b, 0xbb, 0x62, 0x85, 0x83, 0x44, 0xfe, 0x4b, 0xa5, 0xc4, 0x15, 0x89, 0xa5 ],
+const [ 0x44, 0xd9, 0x1d, 0x3d, 0x46, 0x5a, 0x41, 0x11, 0x46, 0x2b, 0xa0, 0xc7, 0xec, 0x22, 0x3d, 0xa6, 0x73, 0x5f, 0x4f, 0x52, 0x00, 0x45, 0x3c, 0xf1, 0x32, 0xc3 ],
+const [ 0xcc, 0xe7, 0x3f, 0x2e, 0xab, 0xcb, 0x52, 0xf7, 0x85, 0xd5, 0xa6, 0xdf, 0x63, 0xc0, 0xa1, 0x05, 0xf3, 0x4a, 0x91, 0xca, 0x23, 0x7f, 0xe5, 0x34, 0xee, 0x39, 0x9d ],
+const [ 0x66, 0x4e, 0x6e, 0x79, 0x46, 0x83, 0x92, 0x03, 0x03, 0x7a, 0x65, 0xa1, 0x21, 0x74, 0xb2, 0x44, 0xde, 0x8c, 0xbc, 0x6e, 0xc3, 0xf5, 0x78, 0x96, 0x7a, 0x84, 0xf9, 0xce ],
+const [ 0x95, 0x97, 0xf7, 0x14, 0xb2, 0xe4, 0x5e, 0x33, 0x99, 0xa7, 0xf0, 0x2a, 0xec, 0x44, 0x92, 0x1b, 0xd7, 0x8b, 0xe0, 0xfe, 0xfe, 0xe0, 0xc5, 0xe9, 0xb4, 0x99, 0x48, 0x8f, 0x6e ],
+const [ 0x75, 0xc5, 0xad, 0x1f, 0x3c, 0xbd, 0x22, 0xe8, 0xa9, 0x5f, 0xc3, 0xb0, 0x89, 0x52, 0x67, 0x88, 0xfb, 0x4e, 0xbc, 0xee, 0xd3, 0xe7, 0xd4, 0x44, 0x3d, 0xa6, 0xe0, 0x81, 0xa3, 0x5e ],
+const [ 0xdd, 0x24, 0x5b, 0xff, 0xe6, 0xa6, 0x38, 0x80, 0x66, 0x67, 0x76, 0x83, 0x60, 0xa9, 0x5d, 0x05, 0x74, 0xe1, 0xa0, 0xbd, 0x0d, 0x18, 0x32, 0x9f, 0xdb, 0x91, 0x5c, 0xa4, 0x84, 0xac, 0x0d ],
+const [ 0x03, 0x21, 0x79, 0x4b, 0x73, 0x94, 0x18, 0xc2, 0x4e, 0x7c, 0x2e, 0x56, 0x52, 0x74, 0x79, 0x1c, 0x4b, 0xe7, 0x49, 0x75, 0x2a, 0xd2, 0x34, 0xed, 0x56, 0xcb, 0x0a, 0x63, 0x47, 0x43, 0x0c, 0x6b ],
+const [ 0x4c, 0x3d, 0xcf, 0x95, 0xc2, 0xf0, 0xb5, 0x25, 0x8c, 0x65, 0x1f, 0xcd, 0x1d, 0x51, 0xbd, 0x10, 0x42, 0x5d, 0x62, 0x03, 0x06, 0x7d, 0x07, 0x48, 0xd3, 0x7d, 0x13, 0x40, 0xd9, 0xdd, 0xda, 0x7d, 0xb3 ],
+const [ 0xb8, 0xd1, 0x25, 0x82, 0xd2, 0x5b, 0x45, 0x29, 0x0a, 0x6e, 0x1b, 0xb9, 0x5d, 0xa4, 0x29, 0xbe, 0xfc, 0xfd, 0xbf, 0x5b, 0x4d, 0xd4, 0x1c, 0xdf, 0x33, 0x11, 0xd6, 0x98, 0x8f, 0xa1, 0x7c, 0xec, 0x07, 0x23 ],
+const [ 0x6f, 0xda, 0x97, 0x52, 0x7a, 0x66, 0x25, 0x52, 0xbe, 0x15, 0xef, 0xae, 0xba, 0x32, 0xa3, 0xae, 0xa4, 0xed, 0x44, 0x9a, 0xbb, 0x5c, 0x1e, 0xd8, 0xd9, 0xbf, 0xff, 0x54, 0x47, 0x08, 0xa4, 0x25, 0xd6, 0x9b, 0x72 ],
+const [ 0x09, 0xfa, 0x27, 0x92, 0xac, 0xbb, 0x24, 0x17, 0xe8, 0xed, 0x26, 0x90, 0x41, 0xcc, 0x03, 0xc7, 0x70, 0x06, 0x46, 0x6e, 0x6e, 0x7a, 0xe0, 0x02, 0xcf, 0x3f, 0x1a, 0xf5, 0x51, 0xe8, 0xce, 0x0b, 0xb5, 0x06, 0xd7, 0x05 ],
+const [ 0x5e, 0xfa, 0x29, 0x87, 0xda, 0x0b, 0xaf, 0x0a, 0x54, 0xd8, 0xd7, 0x28, 0x79, 0x2b, 0xcf, 0xa7, 0x07, 0xa1, 0x57, 0x98, 0xdc, 0x66, 0x74, 0x37, 0x54, 0x40, 0x69, 0x14, 0xd1, 0xcf, 0xe3, 0x70, 0x9b, 0x13, 0x74, 0xea, 0xeb ],
+const [ 0x28, 0x36, 0xde, 0x99, 0xc0, 0xf6, 0x41, 0xcd, 0x55, 0xe8, 0x9f, 0x5a, 0xf7, 0x66, 0x38, 0x94, 0x7b, 0x82, 0x27, 0x37, 0x7e, 0xf8, 0x8b, 0xfb, 0xa6, 0x62, 0xe5, 0x68, 0x2b, 0xab, 0xc1, 0xec, 0x96, 0xc6, 0x99, 0x2b, 0xc9, 0xa0 ],
+const [ 0x42, 0x14, 0x3a, 0x2b, 0x9e, 0x1d, 0x0b, 0x35, 0x4d, 0xf3, 0x26, 0x4d, 0x08, 0xf7, 0xb6, 0x02, 0xf5, 0x4a, 0xad, 0x92, 0x2a, 0x3d, 0x63, 0x00, 0x6d, 0x09, 0x7f, 0x68, 0x3d, 0xc1, 0x1b, 0x90, 0x17, 0x84, 0x23, 0xbf, 0xf2, 0xf7, 0xfe ],
+const [ 0xeb, 0x60, 0xc2, 0x8a, 0xd8, 0xae, 0xda, 0x80, 0x7d, 0x69, 0xeb, 0xc8, 0x75, 0x52, 0x02, 0x4a, 0xd8, 0xac, 0xa6, 0x82, 0x04, 0xf1, 0xbc, 0xd2, 0x9d, 0xc5, 0xa8, 0x1d, 0xd2, 0x28, 0xb5, 0x91, 0xe2, 0xef, 0xb7, 0xc4, 0xdf, 0x75, 0xef, 0x03 ],
+const [ 0x7d, 0xe4, 0xba, 0x85, 0xec, 0x54, 0x74, 0x7c, 0xdc, 0x42, 0xb1, 0xf2, 0x35, 0x46, 0xb7, 0xe4, 0x90, 0xe3, 0x12, 0x80, 0xf0, 0x66, 0xe5, 0x2f, 0xac, 0x11, 0x7f, 0xd3, 0xb0, 0x79, 0x2e, 0x4d, 0xe6, 0x2d, 0x58, 0x43, 0xee, 0x98, 0xc7, 0x20, 0x15 ],
+const [ 0xe7, 0x06, 0x53, 0x63, 0x7b, 0xc5, 0xe3, 0x88, 0xcc, 0xd8, 0xdc, 0x44, 0xe5, 0xea, 0xce, 0x36, 0xf7, 0x39, 0x8f, 0x2b, 0xac, 0x99, 0x30, 0x42, 0xb9, 0xbc, 0x2f, 0x4f, 0xb3, 0xb0, 0xee, 0x7e, 0x23, 0xa9, 0x64, 0x39, 0xdc, 0x01, 0x13, 0x4b, 0x8c, 0x7d ],
+const [ 0xdd, 0x37, 0xbc, 0x9f, 0x0b, 0x3a, 0x47, 0x88, 0xf9, 0xb5, 0x49, 0x66, 0xf2, 0x52, 0x17, 0x4c, 0x8c, 0xe4, 0x87, 0xcb, 0xe5, 0x9c, 0x53, 0xc2, 0x2b, 0x81, 0xbf, 0x77, 0x62, 0x1a, 0x7c, 0xe7, 0x61, 0x6d, 0xcb, 0x5b, 0x1e, 0x2e, 0xe6, 0x3c, 0x2c, 0x30, 0x9b ],
+const [ 0x5f, 0x48, 0x5c, 0x63, 0x7a, 0xe3, 0x0b, 0x1e, 0x30, 0x49, 0x7f, 0x0f, 0xb7, 0xec, 0x36, 0x4e, 0x13, 0xc9, 0x06, 0xe2, 0x81, 0x3d, 0xaa, 0x34, 0x16, 0x1b, 0x7a, 0xc4, 0xa4, 0xfd, 0x7a, 0x1b, 0xdd, 0xd7, 0x96, 0x01, 0xbb, 0xd2, 0x2c, 0xef, 0x1f, 0x57, 0xcb, 0xc7 ],
+const [ 0xf6, 0xc2, 0x37, 0xfb, 0x3c, 0xfe, 0x95, 0xec, 0x84, 0x14, 0xcc, 0x16, 0xd2, 0x03, 0xb4, 0x87, 0x4e, 0x64, 0x4c, 0xc9, 0xa5, 0x43, 0x46, 0x5c, 0xad, 0x2d, 0xc5, 0x63, 0x48, 0x8a, 0x65, 0x9e, 0x8a, 0x2e, 0x7c, 0x98, 0x1e, 0x2a, 0x9f, 0x22, 0xe5, 0xe8, 0x68, 0xff, 0xe1 ],
+const [ 0xda, 0x7a, 0xb3, 0x29, 0x15, 0x53, 0xc6, 0x59, 0x87, 0x3c, 0x95, 0x91, 0x37, 0x68, 0x95, 0x3c, 0x6e, 0x52, 0x6d, 0x3a, 0x26, 0x59, 0x08, 0x98, 0xc0, 0xad, 0xe8, 0x9f, 0xf5, 0x6f, 0xbd, 0x11, 0x0f, 0x14, 0x36, 0xaf, 0x59, 0x0b, 0x17, 0xfe, 0xd4, 0x9f, 0x8c, 0x4b, 0x2b, 0x1e ],
+const [ 0x8c, 0xfa, 0x5f, 0xd5, 0x6e, 0xe2, 0x39, 0xca, 0x47, 0x73, 0x75, 0x91, 0xcb, 0xa1, 0x03, 0xe4, 0x1a, 0x18, 0xac, 0xf8, 0xe8, 0xd2, 0x57, 0xb0, 0xdb, 0xe8, 0x85, 0x11, 0x34, 0xa8, 0x1f, 0xf6, 0xb2, 0xe9, 0x71, 0x04, 0xb3, 0x9b, 0x76, 0xe1, 0x9d, 0xa2, 0x56, 0xa1, 0x7c, 0xe5, 0x2d ],
+const [ 0x57, 0xe8, 0x96, 0x59, 0xd8, 0x78, 0xf3, 0x60, 0xaf, 0x6d, 0xe4, 0x5a, 0x9a, 0x5e, 0x37, 0x2e, 0xf4, 0x0c, 0x38, 0x49, 0x88, 0xe8, 0x26, 0x40, 0xa3, 0xd5, 0xe4, 0xb7, 0x6d, 0x2e, 0xf1, 0x81, 0x78, 0x0b, 0x9a, 0x09, 0x9a, 0xc0, 0x6e, 0xf0, 0xf8, 0xa7, 0xf3, 0xf7, 0x64, 0x20, 0x97, 0x20 ],
+const [ 0xb9, 0x1e, 0x64, 0x23, 0x5d, 0xbd, 0x23, 0x4e, 0xea, 0x2a, 0xe1, 0x4a, 0x92, 0xa1, 0x73, 0xeb, 0xe8, 0x35, 0x34, 0x72, 0x39, 0xcf, 0xf8, 0xb0, 0x20, 0x74, 0x41, 0x6f, 0x55, 0xc6, 0xb6, 0x0d, 0xc6, 0xce, 0xd0, 0x6a, 0xe9, 0xf8, 0xd7, 0x05, 0x50, 0x5f, 0x0d, 0x61, 0x7e, 0x4b, 0x29, 0xae, 0xf9 ],
+const [ 0xe4, 0x2a, 0x67, 0x36, 0x2a, 0x58, 0x1e, 0x8c, 0xf3, 0xd8, 0x47, 0x50, 0x22, 0x15, 0x75, 0x5d, 0x7a, 0xd4, 0x25, 0xca, 0x03, 0x0c, 0x43, 0x60, 0xb0, 0xf7, 0xef, 0x51, 0x3e, 0x69, 0x80, 0x26, 0x5f, 0x61, 0xc9, 0xfa, 0x18, 0xdd, 0x9c, 0xe6, 0x68, 0xf3, 0x8d, 0xbc, 0x2a, 0x1e, 0xf8, 0xf8, 0x3c, 0xd6 ],
+const [ 0x63, 0x4d, 0xb9, 0x2c, 0x22, 0x01, 0x0e, 0x1c, 0xbf, 0x1e, 0x16, 0x23, 0x92, 0x31, 0x80, 0x40, 0x6c, 0x51, 0x52, 0x72, 0x20, 0x9a, 0x8a, 0xcc, 0x42, 0xde, 0x05, 0xcc, 0x2e, 0x96, 0xa1, 0xe9, 0x4c, 0x1f, 0x9f, 0x6b, 0x93, 0x23, 0x4b, 0x7f, 0x4c, 0x55, 0xde, 0x8b, 0x19, 0x61, 0xa3, 0xbf, 0x35, 0x22, 0x59 ],
+const [ 0xcc, 0x6c, 0xa3, 0xa8, 0xcb, 0x39, 0x1c, 0xd8, 0xa5, 0xaf, 0xf1, 0xfa, 0xa7, 0xb3, 0xff, 0xbd, 0xd2, 0x1a, 0x5a, 0x3c, 0xe6, 0x6c, 0xfa, 0xdd, 0xbf, 0xe8, 0xb1, 0x79, 0xe4, 0xc8, 0x60, 0xbe, 0x5e, 0xc6, 0x6b, 0xd2, 0xc6, 0xde, 0x6a, 0x39, 0xa2, 0x56, 0x22, 0xf9, 0xf2, 0xfc, 0xb3, 0xfc, 0x05, 0xaf, 0x12, 0xb5 ],
+const [ 0x7c, 0x0e, 0x6a, 0x0d, 0x35, 0xf8, 0xac, 0x85, 0x4c, 0x72, 0x45, 0xeb, 0xc7, 0x36, 0x93, 0x73, 0x1b, 0xbb, 0xc3, 0xe6, 0xfa, 0xb6, 0x44, 0x46, 0x6d, 0xe2, 0x7b, 0xb5, 0x22, 0xfc, 0xb9, 0x93, 0x07, 0x12, 0x6a, 0xe7, 0x18, 0xfe, 0x8f, 0x00, 0x74, 0x2e, 0x6e, 0x5c, 0xb7, 0xa6, 0x87, 0xc8, 0x84, 0x47, 0xcb, 0xc9, 0x61 ],
+const [ 0xc5, 0x58, 0x1d, 0x40, 0xb3, 0x31, 0xe2, 0x40, 0x03, 0x90, 0x1b, 0xd6, 0xbf, 0x24, 0x4a, 0xca, 0x9e, 0x96, 0x01, 0xb9, 0xd8, 0x12, 0x52, 0xbb, 0x38, 0x04, 0x86, 0x42, 0x73, 0x1f, 0x11, 0x46, 0xb8, 0xa4, 0xc6, 0x9f, 0x88, 0xe1, 0x48, 0xb2, 0xc8, 0xf8, 0xc1, 0x4f, 0x15, 0xe1, 0xd6, 0xda, 0x57, 0xb2, 0xda, 0xa9, 0x99, 0x1e ],
+const [ 0xec, 0x6b, 0x4a, 0x88, 0x71, 0x3d, 0xf2, 0x7c, 0x0f, 0x2d, 0x02, 0xe7, 0x38, 0xb6, 0x9d, 0xb4, 0x3a, 0xbd, 0xa3, 0x92, 0x13, 0x17, 0x25, 0x9c, 0x86, 0x4c, 0x1c, 0x38, 0x6e, 0x9a, 0x5a, 0x3f, 0x53, 0x3d, 0xc0, 0x5f, 0x3b, 0xee, 0xb2, 0xbe, 0xc2, 0xaa, 0xc8, 0xe0, 0x6d, 0xb4, 0xc6, 0xcb, 0x3c, 0xdd, 0xcf, 0x69, 0x7e, 0x03, 0xd5 ],
+const [ 0x03, 0x21, 0x73, 0x6b, 0xeb, 0xa5, 0x78, 0xe9, 0x0a, 0xbc, 0x1a, 0x90, 0xaa, 0x56, 0x15, 0x7d, 0x87, 0x16, 0x18, 0xf6, 0xde, 0x0d, 0x76, 0x4c, 0xc8, 0xc9, 0x1e, 0x06, 0xc6, 0x8e, 0xcd, 0x3b, 0x9d, 0xe3, 0x82, 0x40, 0x64, 0x50, 0x33, 0x84, 0xdb, 0x67, 0xbe, 0xb7, 0xfe, 0x01, 0x22, 0x32, 0xda, 0xca, 0xef, 0x93, 0xa0, 0x00, 0xfb, 0xa7 ],
+const [ 0xd0, 0xa2, 0x49, 0xa9, 0x7b, 0x5f, 0x14, 0x86, 0x72, 0x1a, 0x50, 0xd4, 0xc4, 0xab, 0x3f, 0x5d, 0x67, 0x4a, 0x0e, 0x29, 0x92, 0x5d, 0x5b, 0xf2, 0x67, 0x8e, 0xf6, 0xd8, 0xd5, 0x21, 0xe4, 0x56, 0xbd, 0x84, 0xaa, 0x75, 0x53, 0x28, 0xc8, 0x3f, 0xc8, 0x90, 0x83, 0x77, 0x26, 0xa8, 0xe7, 0x87, 0x7b, 0x57, 0x0d, 0xba, 0x39, 0x57, 0x9a, 0xab, 0xdd ],
+const [ 0xc3, 0x21, 0x38, 0x53, 0x11, 0x18, 0xf0, 0x8c, 0x7d, 0xcc, 0x29, 0x24, 0x28, 0xad, 0x20, 0xb4, 0x5a, 0xb2, 0x7d, 0x95, 0x17, 0xa1, 0x84, 0x45, 0xf3, 0x8b, 0x8f, 0x0c, 0x27, 0x95, 0xbc, 0xdf, 0xe3, 0xff, 0xe3, 0x84, 0xe6, 0x5e, 0xcb, 0xf7, 0x4d, 0x2c, 0x9d, 0x0d, 0xa8, 0x83, 0x98, 0x57, 0x53, 0x26, 0x07, 0x49, 0x04, 0xc1, 0x70, 0x9b, 0xa0, 0x72 ],
+const [ 0xb0, 0xf4, 0xcf, 0xb9, 0x39, 0xea, 0x78, 0x5e, 0xab, 0xb7, 0xe7, 0xca, 0x7c, 0x47, 0x6c, 0xdd, 0x9b, 0x22, 0x7f, 0x01, 0x5d, 0x90, 0x53, 0x68, 0xba, 0x00, 0xae, 0x96, 0xb9, 0xaa, 0xf7, 0x20, 0x29, 0x74, 0x91, 0xb3, 0x92, 0x12, 0x67, 0x57, 0x6b, 0x72, 0xc8, 0xf5, 0x8d, 0x57, 0x76, 0x17, 0xe8, 0x44, 0xf9, 0xf0, 0x75, 0x9b, 0x39, 0x9c, 0x6b, 0x06, 0x4c ],
+const [ 0xbd, 0x02, 0xe5, 0x1b, 0x0c, 0xf2, 0xc2, 0xb8, 0xd2, 0x04, 0xa0, 0x26, 0xb4, 0x1a, 0x66, 0xfb, 0xfc, 0x2a, 0xc3, 0x7e, 0xe9, 0x41, 0x1f, 0xc4, 0x49, 0xc8, 0xd1, 0x19, 0x4a, 0x07, 0x92, 0xa2, 0x8e, 0xe7, 0x31, 0x40, 0x7d, 0xfc, 0x89, 0xb6, 0xdf, 0xc2, 0xb1, 0x0f, 0xaa, 0x27, 0x72, 0x3a, 0x18, 0x4a, 0xfe, 0xf8, 0xfd, 0x83, 0xde, 0xf8, 0x58, 0xa3, 0x2d, 0x3f ],
+const [ 0xe3, 0x31, 0x46, 0xb8, 0x3e, 0x4b, 0xb6, 0x71, 0x39, 0x22, 0x18, 0xda, 0x9a, 0x77, 0xf8, 0xd9, 0xf5, 0x97, 0x41, 0x47, 0x18, 0x2f, 0xb9, 0x5b, 0xa6, 0x62, 0xcb, 0x66, 0x01, 0x19, 0x89, 0xc1, 0x6d, 0x9a, 0xf1, 0x04, 0x73, 0x5d, 0x6f, 0x79, 0x84, 0x1a, 0xa4, 0xd1, 0xdf, 0x27, 0x66, 0x15, 0xb5, 0x01, 0x08, 0xdf, 0x8a, 0x29, 0xdb, 0xc9, 0xde, 0x31, 0xf4, 0x26, 0x0d ],
+const [ 0x41, 0x1c, 0x13, 0xc7, 0x50, 0x73, 0xc1, 0xe2, 0xd4, 0xb1, 0xec, 0xf1, 0x31, 0x39, 0xba, 0x96, 0x56, 0xcd, 0x35, 0xc1, 0x42, 0x01, 0xf1, 0xc7, 0xc6, 0xf0, 0xee, 0xb5, 0x8d, 0x2d, 0xbf, 0xe3, 0x5b, 0xfd, 0xec, 0xcc, 0x92, 0xc3, 0x96, 0x1c, 0xfa, 0xbb, 0x59, 0x0b, 0xc1, 0xeb, 0x77, 0xea, 0xc1, 0x57, 0x32, 0xfb, 0x02, 0x75, 0x79, 0x86, 0x80, 0xe0, 0xc7, 0x29, 0x2e, 0x50 ],
+const [ 0xf2, 0xc7, 0x6e, 0xf6, 0x17, 0xfa, 0x2b, 0xfc, 0x8a, 0x4d, 0x6b, 0xcb, 0xb1, 0x5f, 0xe8, 0x84, 0x36, 0xfd, 0xc2, 0x16, 0x5d, 0x30, 0x74, 0x62, 0x95, 0x79, 0x07, 0x9d, 0x4d, 0x5b, 0x86, 0xf5, 0x08, 0x1a, 0xb1, 0x77, 0xb4, 0xc3, 0xf5, 0x30, 0x37, 0x6c, 0x9c, 0x92, 0x4c, 0xbd, 0x42, 0x1a, 0x8d, 0xaf, 0x88, 0x30, 0xd0, 0x94, 0x0c, 0x4f, 0xb7, 0x58, 0x98, 0x65, 0x83, 0x06, 0x99 ],
+const [ 0x45, 0x92, 0x7e, 0x32, 0xdd, 0xf8, 0x01, 0xca, 0xf3, 0x5e, 0x18, 0xe7, 0xb5, 0x07, 0x8b, 0x7f, 0x54, 0x35, 0x27, 0x82, 0x12, 0xec, 0x6b, 0xb9, 0x9d, 0xf8, 0x84, 0xf4, 0x9b, 0x32, 0x7c, 0x64, 0x86, 0xfe, 0xae, 0x46, 0xba, 0x18, 0x7d, 0xc1, 0xcc, 0x91, 0x45, 0x12, 0x1e, 0x14, 0x92, 0xe6, 0xb0, 0x6e, 0x90, 0x07, 0x39, 0x4d, 0xc3, 0x3b, 0x77, 0x48, 0xf8, 0x6a, 0xc3, 0x20, 0x7c, 0xfe ],
+];
+
+const sha1_short_mds = const [
+'da39a3ee5e6b4b0d3255bfef95601890afd80709',
+'c1dfd96eea8cc2b62785275bca38ac261256e278',
+'0a1c2d555bbe431ad6288af5a54f93e0449c9232',
+'bf36ed5d74727dfd5d7854ec6b1d49468d8ee8aa',
+'b78bae6d14338ffccfd5d5b5674a275f6ef9c717',
+'60b7d5bb560a1acf6fa45721bd0abb419a841a89',
+'a6d338459780c08363090fd8fc7d28dc80e8e01f',
+'860328d80509500c1783169ebf0ba0c4b94da5e5',
+'24a2c34b976305277ce58c2f42d5092031572520',
+'411ccee1f6e3677df12698411eb09d3ff580af97',
+'05c915b5ed4e4c4afffc202961f3174371e90b5c',
+'af320b42d7785ca6c8dd220463be23a2d2cb5afc',
+'9f4e66b6ceea40dcf4b9166c28f1c88474141da9',
+'e6c4363c0852951991057f40de27ec0890466f01',
+'046a7b396c01379a684a894558779b07d8c7da20',
+'d58a262ee7b6577c07228e71ae9b3e04c8abcda9',
+'a150de927454202d94e656de4c7c0ca691de955d',
+'35a4b39fef560e7ea61246676e1b7e13d587be30',
+'7ce69b1acdce52ea7dbd382531fa1a83df13cae7',
+'b47be2c64124fa9a124a887af9551a74354ca411',
+'8bb8c0d815a9c68a1d2910f39d942603d807fbcc',
+'b486f87fb833ebf0328393128646a6f6e660fcb1',
+'76159368f99dece30aadcfb9b7b41dab33688858',
+'dbc1cb575ce6aeb9dc4ebf0f843ba8aeb1451e89',
+'d7a98289679005eb930ab75efd8f650f991ee952',
+'fda26fa9b4874ab701ed0bb64d134f89b9c4cc50',
+'c2ff7ccde143c8f0601f6974b1903eb8d5741b6e',
+'643c9dc20a929608f6caa9709d843ca6fa7a76f4',
+'509ef787343d5b5a269229b961b96241864a3d74',
+'b61ce538f1a1e6c90432b233d7af5b6524ebfbe3',
+'5b7b94076b2fc20d6adb82479e6b28d07c902b75',
+'6066db99fc358952cf7fb0ec4d89cb0158ed91d7',
+'b89962c94d60f6a332fd60f6f07d4f032a586b76',
+'17bda899c13d35413d2546212bcd8a93ceb0657b',
+'badcdd53fdc144b8bf2cc1e64d10f676eebe66ed',
+'01b4646180f1f6d2e06bbe22c20e50030322673a',
+'10016dc3a2719f9034ffcc689426d28292c42fc9',
+'9f42fa2bce6ef021d93c6b2d902273797e426535',
+'cdf48bacbff6f6152515323f9b43a286e0cb8113',
+'b88fb75274b9b0fd57c0045988cfcef6c3ce6554',
+'c06d3a6a12d9e8db62e8cff40ca23820d61d8aa7',
+'6e40f9e83a4be93874bc97cdebb8da6889ae2c7a',
+'3efc940c312ef0dfd4e1143812248db89542f6a5',
+'a0cf03f7badd0c3c3c4ea3717f5a4fb7e67b2e56',
+'a544e06f1a07ceb175a51d6d9c0111b3e15e9859',
+'199d986ed991b99a071f450c6b1121a727e8c735',
+'33bac6104b0ad6128d091b5d5e2999099c9f05de',
+'76d7db6e18c1f4ae225ce8ccc93c8f9a0dfeb969',
+'f652f3b1549f16710c7402895911e2b86a9b2aee',
+'63faebb807f32be708cf00fc35519991dc4e7f68',
+'0e6730bc4a0e9322ea205f4edfff1fffda26af0a',
+'b61a3a6f42e8e6604b93196c43c9e84d5359e6fe',
+'32d979ca1b3ed0ed8c890d99ec6dd85e6c16abf4',
+'6f18190bd2d02fc93bce64756575cea36d08b1c3',
+'68f525feea1d8dbe0117e417ca46708d18d7629a',
+'a7272e2308622ff7a339460adc61efd0ea8dabdc',
+'aef843b86916c16f66c84d83a6005d23fd005c9e',
+'be2cd6f380969be59cde2dff5e848a44e7880bd6',
+'e5eb4543deee8f6a5287845af8b593a95a9749a1',
+'534c850448dd486787b62bdec2d4a0b140a1b170',
+'6fbfa6e4edce4cc85a845bf0d228dc39acefc2fa',
+'018872691d9b04e8220e09187df5bc5fa6257cd9',
+'d98d512a35572f8bd20de62e9510cc21145c5bf4',
+'9f3ea255f6af95c5454e55d7354cabb45352ea0b',
+'a70cfbfe7563dd0e665c7c6715a96a8d756950c0',
+];
diff --git a/tests/compiler/dart2js/sha1_test.dart b/tests/compiler/dart2js/sha1_test.dart
new file mode 100644
index 0000000..5e7e491
--- /dev/null
+++ b/tests/compiler/dart2js/sha1_test.dart
@@ -0,0 +1,579 @@
+// 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.
+
+// This test is ripped from package:crypto to test the sha1 functionality copied
+// into the compiler.
+
+library sha1_test;
+import 'package:compiler/implementation/hash/sha1.dart';
+
+import "package:unittest/unittest.dart";
+
+part 'sha1_long_test_vectors.dart';
+part 'sha1_short_test_vectors.dart';
+
+
+void main() {
+  test('expected values', _testExpectedValues);
+  test('invalid use', _testInvalidUse);
+  test('repeated digest', _testRepeatedDigest);
+  test('long inputs', () {
+    _testStandardVectors(sha1_long_inputs, sha1_long_mds);
+  });
+  test('short inputs', () {
+    _testStandardVectors(sha1_short_inputs, sha1_short_mds);
+  });
+}
+
+void _testExpectedValues() {
+  var expectedValues = const [
+    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
+    "5ba93c9db0cff93f52b521d7420e43f6eda2784f",
+    "3f29546453678b855931c174a97d6c0894b8f546",
+    "0c7a623fd2bbc05b06423be359e4021d36e721ad",
+    "a02a05b025b928c039cf1ae7e8ee04e7c190c0db",
+    "1cf251472d59f8fadeb3ab258e90999d8491be19",
+    "868460d98d09d8bbb93d7b6cdd15cc7fbec676b9",
+    "6dc86f11b8cdbe879bf8ba3832499c2f93c729ba",
+    "67423ebfa8454f19ac6f4686d6c0dc731a3ddd6b",
+    "63bf60c7105a07a2b125bbf89e61abdabc6978c2",
+    "494179714a6cd627239dfededf2de9ef994caf03",
+    "2c7e7c384f7829694282b1e3a6216def8082d055",
+    "cff9611cb9aa422a16d9beee3a75319ce5395912",
+    "e51f9799c4a21bba255cf473baf95a89e1b86180",
+    "f741644ba6e1bcf5fee6d3c1b6177b78468ece99",
+    "fb1d9241f67827ce6dd7ac55f1e3c4e4f50caa03",
+    "56178b86a57fac22899a9964185c2cc96e7da589",
+    "0a0315ec7b1e22a79fc862edf79bda2fc01669e3",
+    "32af8a619c2566222bb0ba0689dabcc480c381d5",
+    "d35b5afbc48a696897c084e6e71aae67c7cd9417",
+    "602c63d2f3d13ca3206cdf204cde24e7d8f4266c",
+    "a3c6fbe5c13e8b41fadc204c0cf26f3f214189f4",
+    "25e480e9e0ca2b610105cd1424b8a35f63fb3981",
+    "45412d51d3ca7bcf452d1612720ee88f9d2427c3",
+    "ed6a95036e3e046931597a457db7a78b7309c4c0",
+    "b4fe0256d346700783420e08a4a6f7992b1e36c9",
+    "33e1799e98280e5a9ace5509477a2048607c5537",
+    "cf193837f6de43f8e38000acfcf764fa8d8fde22",
+    "7c8de247dda83599af2ec2ee2d29e20583dac34b",
+    "f38a076f70613fc251c4d21e6435ad08341a8a99",
+    "dcd68e6174bd74ba180da047a7345e8d111f85fd",
+    "43bbacb5f62a0482cbdb564171b04365ca6e27c0",
+    "ae5bd8efea5322c4d9986d06680a781392f9a642",
+    "eb90bce364635c4c23b49f493f0043579bc85c17",
+    "2942c7afa65444c43d0592d0dc73ca71db729205",
+    "abf726f5fda729fb7f3f0484d7c94b3107aa02ae",
+    "75db4f6bcc05a781dda9d17c46717286dd53654b",
+    "a82cb42d89daf5fbc1d4a48476229c495782f98d",
+    "fc1a69683744af823cd69e8a1e3f460591714028",
+    "dc68db44b48521b0700a864896a00e17777aea83",
+    "cc9ad99e917042381b0f99588896cbf236aa8ed3",
+    "ec7a68484a749c7065c6b746f9c465dcb414f370",
+    "c627c449deff14ae7ed807293d30846f061da5b8",
+    "4782f2a19b6dbb0882d656de86c3d21a7317f768",
+    "02d4eed99e7307bea39af5330bf7fb388d48b496",
+    "b3d99b9d90a69e50fd4365704f5ab2eab7bc9763",
+    "9b1c07176bb227f73e8a4e173071d39302061de2",
+    "d79097ddac552a6e02a52ce7aaf494d2d73b2557",
+    "df7f23b160e75b9bae5ea1e62b43a5a34a260127",
+    "f598f3780d8c374d97957b9b62d56106e9e0b2d2",
+    "0bd98598f9ab29c1359ef5460a206dd1370515e3",
+    "e6c320834f69d81689e1ecd5abc808d49d9c4e07",
+    "fd5ee7588cd129e12b886974621fd29facc78e19",
+    "2a9c28ef61eb536d3bbda64ad95a132554be3d6b",
+    "cfae6d86a767b9c700b5081a54265fb2fe0f6fd9",
+    "8ae2d46729cfe68ff927af5eec9c7d1b66d65ac2",
+    "636e2ec698dac903498e648bd2f3af641d3c88cb",
+    "7cb1330f35244b57437539253304ea78a6b7c443",
+    "2e780486f64bc91fbfa2785ec1ca5c9e3cc07939",
+    "4a7713d44e97d9f09ae1d786199c58ae2bfaf3eb",
+    "c98714b16f92c8a770e9fc229df834d1688e282f",
+    "aace3dd6f54a2a255aba920f5ffc8cf04b85a69a",
+    "cf8563896a3b0a0775985d8289444c4bbc478da7",
+    "6d942da0c4392b123528f2905c713a3ce28364bd",
+    "c6138d514ffa2135bfce0ed0b8fac65669917ec7",
+    "69bd728ad6e13cd76ff19751fde427b00e395746",
+    "ce705b7c60d46e7e36fe073db8822698579ca410",
+    "c717ebbf6a2bf1bb33da6257352d5085bee218b3",
+    "86151d140aafc9a4b5877d3fbb49014fe5906e57",
+    "7446b5a6bbcc58bc9662451a0a747d7d031f9a7d",
+    "c24887924f92adac5ae367995d12691c662b7362",
+    "5af83cfd42d61967778889ca911cfb6c14339ba7",
+    "587d4f6e6b4e21343423e434679009cbd3d24dcf",
+    "ac65dd946c5cc432d4d624caeb53c7363f96b7af",
+    "fa71e70750674c0f6b4aa19d0be717b2936c83fd",
+    "c9efe6dd0a019315f73f3962de38b6c848a1705b",
+    "d1d05649b952c8f6eb016be08fe1544aac5d5925",
+    "cc3081ac1d695bae51cfd5b44b9fb3a230733cc3",
+    "eb9de332558953792687d9a7f598b5d84bf0a46b",
+    "39de5efdc92e3d3678f24d2cf545ba4d172d003d",
+    "399dbc9f721e44a992a0def42d999b32af449adc",
+    "996a2817c8acbc667e1c4c27b8f4e9952736dd7a",
+    "3ef8189ce1bcc0d65aa182b1a81534635edfdf2b",
+    "d676714c6a6ff4e17a60c0511c25aa8b164fa606",
+    "4db6e3381e1b9290267c1539e1053793c8b81fa1",
+    "3a34d35b0296fe4d83eda39b742a9d8f4b13a958",
+    "54f3b45304ef1287f54b877fcce3285e154f9d6c",
+    "b1ea96216e025377ab5aa845238fc8bc65dd60e1",
+    "bc6c7488145485dede1ae1d43b594f0046bcda0f",
+    "3d9a0619ecf88c84ce86213e9aa91d9a252cbc32",
+    "92ccaa0b4ce89e2bd80a61b9bafd5ac58ab7b588",
+    "3eb326b5bf4440fb3a88e3dcb05c1db5ea01ac5c",
+    "989c63e819b13d4cadfb33f8deafbc57c1992a12",
+    "ae944552c20cf16f07a5c357713832c9d72d0c6b",
+    "46723e982569a1e2d9edced5498fc1f46f7d63fc",
+    "3bc5dae7907c83a0693f87fd8372efdd1df53e09",
+    "96d281ba44eb21ecfb1663c8ac5752c48686a927",
+    "fa0ef18178880a72b51c26555c10f5210dab4390",
+    "0c7ecac32b8ed6d9835d381bf069568722a276e1",
+    "649e44ecba85c0938ec09229cee4bb69388ec642",
+    "1e6634bfaebc0348298105923d0f26e47aa33ff5",
+    "af2af2734bb2baa288940cb62109f4849daa347f",
+    "22d14bc045cc9a3794c99beee7abe278bf24d6d8",
+    "c3164ccbed75b82ed3f59f4a47fe09b256025549",
+    "c27b5bc7cd24de4913614a769a442e9cc9fb0e08",
+    "f44d48d98cac77522ff6b9e1b9cbb8489e58e588",
+    "ea19a71ffbec9572f6cd65523acaf865ec05ab52",
+    "cda0eb9d310247bd1e8b3ea10d9b9deff6fbaba9",
+    "449dfce971b9d65d69fbc72940e9a885e8dde9ce",
+    "96eebb6b95a9da99c58190cbd77cd6fbcf638a79",
+    "670f7a869e90ce86e0a18232a9d4b1f97c1c77d0",
+    "bc544e24573d592290fdaff8ecf3f7f2b00cd483",
+    "e4ce142d09a84a8645338dd6535cbfaaf800d320",
+    "1c26461e26eb697ccc36a98714ee70caaa87a84e",
+    "51c5b1c25a71ff00394a84ab48b5733c8955551e",
+    "84803504181c0ae33a511c49af5015a5b1892bfd",
+    "7cc8bca120c2635abfea82dd203112b5c7e165da",
+    "44e2519a529d7261f1bebedc8ed95e1182cae0dc",
+    "2a81372da39c1df4251539a9922717b7cf5f0334",
+    "41c89d06001bab4ab78736b44efe7ce18ce6ae08",
+    "d3dbd653bd8597b7475321b60a36891278e6a04a",
+    "3723f8ab857804f89f80970e9fc88cf8f890adc2",
+    "d031c9fb7af0a461241e539e10db62ed28f7033b",
+    "e0b550438e794b65d89b9ee5c8f836ae737decf0",
+    "fb3998281c31d1a8eea2ea737affd0b4d6ab6ac2",
+    "7a914d8b86a534581aa71ec61912ba3f5b478698",
+    "a271f71547442dea7b2edf65cd5fbd5c751710aa",
+    "89d7312a903f65cd2b3e34a975e55dbea9033353",
+    "e6434bc401f98603d7eda504790c98c67385d535",
+    "3352e41cc30b40ae80108970492b21014049e625",
+    "6981ed7d97ffca517d531cd3d1874b43e11f1b46",
+    "76382259107c56b3f798107a8acc62b32d8ec2c6",
+    "548538582fd2e877b023be0611150df9e7ca99e8",
+    "54152ac7d9f4e686e47d3a74d96229c33793d51b",
+    "40e1b424cb6f13453ea005d077adb732b2fb9084",
+    "a47fd7470c43f7cb7e5dd4159fb0c11644f6a108",
+    "4ab5a4f084d4d95894078e8d570eb0bff13c6286",
+    "5f9de1b34863866e2c644fee51ec0bed7d6b7d91",
+    "2425097e0fea366d916d919f690e99cb6594d370",
+    "1e2cf1d35240f0b37d056c69c18ab95559e311d8",
+    "25fb08a7408a380b19074fa547f4fc4eb7d303b9",
+    "e38c3774d31cd2ab4079c38abd7876fe1ff8c1cb",
+    "e06dfc04b000d187b8bd6b539c884581e49a7b48",
+    "027f9a54264ed75254e00c6a8f821630d780c6b3",
+    "a86906b83ee8851520e2e628ab6295ce3497a2d3",
+    "3ba5b1a7c92cf4e749995b819cea8c37e479f433",
+    "e192f0d9326d7a0406b343d89e6c1b0bd1bbfb76",
+    "e5c31d8a5d94c54aba514694cb0ddcd835b328de",
+    "77237ee62b7ea8504451b6372289bba5d46d15a1",
+    "11e85e204f22d0784746ffdcf8c5bc0b5de6a211",
+    "6a2bc12e4605f27fce8c2e90a387e7dee901e48f",
+    "8c696b02e3bd3f7fb02ff852ee8bf8d1d3c9c75c",
+    "75a73cd24385a1e1768adddb23b3d7183cbb2f00",
+    "3c1a0181f2b5d470bf78df6dd596d85f63e4d855",
+    "0be0dc00e59482a360f21199abe9974a85047da2",
+    "b853306aa29ebbea560c61eb1f9a2f740b45b6c8",
+    "5e477b0a9dfe6225bdab510bd87bcecc59bc2497",
+    "9112798181ba4cc1c528a70729cf784115ca69f6",
+    "d741bec70d9070cee9960c5043a2773051e4cbaa",
+    "7135cdf89a331ca5cf339d414a950afa9e2bd786",
+    "aca27247604a6960e513b1eea56146bb4e443c47",
+    "cee02aef5cb718ab5838c9673deb86f47f479f68",
+    "cd024743ff967bf59d595461f549efe50ae155f6",
+    "c100aaa2cc196af36fcdc403e99f04f357c88131",
+    "2f33512a40135a515b68bf53b09844678c7548a1",
+    "3416bd9a3f79dbc063fff2c25bbd760831bf49cb",
+    "679256809caa8eb74c086b8c3a0e2d4abf850f86",
+    "476d4a88a9dabdf50e65dfb207b7117ff9d6e2f4",
+    "9af88ed103f83fab906e5851728b4d47c31cc5cf",
+    "c0733dd1c6ff8f9b1463c3e3ddd299cd3f81d8f0",
+    "5b19b45105657e67a75d290e52b0b12b7cb54fb5",
+    "aa6cc574968f08a0a975fbc65ae1c673125a38b6",
+    "1b3e6fa3c2a28bec0d42f4db58190bd393d372d4",
+    "97019771490e12f6b89b581c7df82ec1e250652b",
+    "37452dde0527a88d2beb55b5b98eebeceaa2b464",
+    "5ada134688493c8ff0298563b6d37e0c2b820818",
+    "27c194fd8566a2c5eff8d00a9ad2febf8105846e",
+    "b692e7fdf82422566df39942a262647fc27544db",
+    "a8df45ea509a4abbb0a9ed2af668040ab420ccca",
+    "b9aa0fd55e3da81095d899e52d6427406779e6c7",
+    "e308d9ea4b329e5ce3ae1ca31cdfc59b687cb7a7",
+    "7366daa91f296da16fc931b8d820c671674c73b1",
+    "b44ab5276973cfccf3b6e1b50f78d1dccae35e0b",
+    "48a9d63f99faea8f26c8f9b37ae8650419767808",
+    "356301d2c18c60cbf761e8820e78b2670a54ba83",
+    "c82f43012f075b3be2018878d30ba404ccde3b5d",
+    "b3d1e00b9f264ff969f7a16c6ae3901f9edb933e",
+    "0446503bbb165ad4e747ebe9e040a550cf6ea1c4",
+    "f4e0b1d08f68e38c83604fda8266535965955131",
+    "38dfba530b2a3b77c25816472c44c03b7e32fe9d",
+    "f079c4078b90472d5a6de034133e6fb6bbb16745",
+    "453e806d74a27e554f2a3395ce7917919bf3bde6",
+    "995b6f0c8f9eda20f3e5a2bd89df908747900008",
+    "c7b4dbb98c78008fd53159174b7baadf250fa5a9",
+    "2407f4de74bc711d0071476eccd73370bb6fbd0e",
+    "56b81cf38a7ad1eb515a8e21af35b308f4977cfe",
+    "de45d743c21cbe75d718086178ce454ced1dfa1a",
+    "9dcc4b7304e7305639ff55e78bf538e6e4bdc847",
+    "63cdae0a07072e387cdbcac4f73bfb0ed66432f6",
+    "20431c9fd7ed84d31937901e6c2f2263e22f2915",
+    "54d11e99127d159799dbce10f51a75e697780478",
+    "b9ae613785fc3061f9df6a4f1e86e6252a6004b3",
+    "366ab5426763b78563de648d831e6e8f02e16c4a",
+    "b5a7a52b733421f97a37319fe3580a4ba2b86a11",
+    "8ed72f03309e7ab31964e4dbfb25e8ab41684124",
+    "5afd9a289b4fce41efb7a77a2baa9314f9f11cf5",
+    "21d0451e21cae775b5f718886fd59b2ea9e9e787",
+    "696cd0f2c8a6e0fce77fac490b70621a71c51e38",
+    "5bcd7ae76d23e39340ef0a0f2fd38ddaa3b4b733",
+    "0e68e78d5d668479992fd6a7ea2879f1c0b44403",
+    "f93dbecda2f86c5c52936e986a582680bcc10953",
+    "e9ef3322618fd7db744b674620bac1d2427c79e5",
+    "2febe02de9105bf3ee4412c79c7c3df1044037ed",
+    "4f60bb9f2c379b6c6b95003d54a4b4dae47889e8",
+    "f2ce6d9c33c6dea70d4a6955f4d00fa8371e54d4",
+    "c012e1bbaac2cb4b7074a859bb98e469177e1afd",
+    "7c5c4cb81d270a5a41f7a41e6124e6028070ee97",
+    "669702442cabc5b51604234fd8ef37062a6cf11a",
+    "0b5febebdc3f4f31d6c5c52b83ef2a06c262ef8b",
+    "cf5d815b01a6a3952ff81a688341222dcbb853fe",
+    "845c71d2b20913850ef1fcfec5606412256639ab",
+    "861c969227f1043620c9833c2580e64bf4cf52d5",
+    "55241a343ca97a602f7a6c71183fe8976999651f",
+    "1d298771d3d6c35899c5604660c1f6c77d1e71c1",
+    "580cc8968318c3bf61ce62aa2ded2b15777de522",
+    "65bb4da1216214d7962733a372e78966bdfda5d5",
+    "17565818c45a669aa6bdd25a7c5c121120704731",
+    "1ad5f3869d8b92fdc30b81b06e21b9be866e103f",
+    "9b181c583aa16426c200931bfe5d4e6c269e6ca2",
+    "60c456ecebd7834f3fa8d1f4307449bf41616740",
+    "bd4c73a0a8748c627879652fad3761fd7ac36c4c",
+    "0baa214b983e58e39ecec9bf2bd537a10b2071ad",
+    "642c7c6166e4dd09183e1b32dfa62f6f3dfc8ad7",
+    "9beb03f7c76da0de2bf22a08efd1e2bf07274f0d",
+    "a0d8782e1eeccc7bb104a4c38f79f8541383fb1d",
+    "1c1b52a04ac3aa838a3698395aa3d934784b4b50",
+    "b844b4f08c5255fa66158fa18ad57154af1aa840",
+    "c07f9c996bf7327dfb47c82eb6b8bda1af065e2f",
+    "1b9fbff4d5a61741c90b6f040eac211285294510",
+    "2e4766b0ebf480a027ae6f9e59e7a2ef9e2aef2a",
+    "f7b8e5e76e6b4cb3dfa7af7070d5560400822b65",
+    "54717f94e8f3ded40b4cc1a470eacb25cb10136f",
+    "e2fce1365029e7d2e8c81f5b1f6c533629ef3752",
+    "7d7bd28f79bfba1b69dcb45f81a423d1730b56d8",
+    "1a17d4c4c689817bc9e5dce38ef79ea684eb8976",
+    "1250a5f131121f1fc0aa77d3d6dfd641526f266a",
+    "43c87ab4ed185c57ab3ccd9d89017897a4e77504",
+    "5a7d9a1c26ef0cb99fa2d7e970b19ccf5a5e4229",
+    "431e10ef7681217c353a54302c611661f5d8aa75",
+    "c572caf20d5aa8b6a8faf99f6628594fe3ddf81b",
+    "a1219d23a9efaaede86c392888a18f995b15e8e2",
+    "be9a388016c3973d9b4a8d0c2c7fb9a6d254370e",
+    "bb260e71e8bd5ed2baf5d9038600032669086ce3",
+    "10fdd35f361b080323b86b47c893cfb13879c028",
+    "154c3aed514692dfef86d89cf1dfbc4f8f1bfc92",
+    "fa2c27c443e60a0bcd8a1eb82d20fec20759c03e",
+    "4916d6bdb7f78e6803698cab32d1586ea457dfc8",
+    "89d6d7a79dfc4c2588e5ba3726d163faa67c4249",
+    "4bc7dfa199db2cc10d6fa1acbe2bea402c3f69f3",
+    "ec485bc69fb3660cdd7c650a8da191c958273534",
+    "1fb3afbdcd58e4edcd92c49f22d4caa0581749a1",
+    "0183c0e82beb55c6b2bc24b89df5dd64b87d22d8",
+    "d8dc481dbe69b312789e85b0284c114108a18bac",
+    "296f1f75500286b9b4e5ac80fba1ea8452d40792",
+    "205c3b9ed40f9f92a70e5920b85707f50689a618",
+    "77ce91d45055ca41c52fa6f9a9c3117b2aee9611",
+    "fe4c72354229cb1b9c9a05dde2ffa93ff6d12400",
+    "48174534cef0fc3fec5b1a6dadfba2281c4195bd",
+    "202413d6ea5edda76cd27e81f8700d0b379ef58e",
+    "699b731a830041cc7afc2a0e8f48df1146abb75d",
+    "3a5f338bf04229f9e45e1402988bd5c59dda930f",
+    "8c620f2651c8ad1a40f4aa2fc0687848c6db1d75",
+    "743fa8d2c15ddaa8923904ba6c2f61db15f5c71e",
+    "ee065a446ffac9e405bc0e30b8a595d898fd8f57",
+    "ba83d7ae664cde7a19ec33e839fa19b46beb7ee8",
+    "0941612acd729027440f6aeac58ac28e18a44cda",
+    "b4a3e1dab651d8e978abfa4c05c0cab1a33902f2",
+    "30666bf53a5fed4b7d6bdbc993348e56144bb1b1",
+    "f6a97e96436d9c5340009a497ba298d2901eb06d",
+    "dc0b98a0d1d20b974885aac995d8c484d6594d4d",
+    "62b3e62ba7f7194fed07c518179d0d86e4e20661",
+    "699b84e119bffbbffa1a228e92682f1f394cabcd",
+    "31ea9a067b4d9207bf4f4e4dbe3ce191cc754e05",
+    "5b9ab97c102fcfb39efda8b788a4a387f18a507f",
+    "a2f9fde34879a9e7f8caa9a21c2f2a4b47c24ede",
+    "4201b2664b010fa180ec54c37d8615b3055f8a81",
+    "84404983f08452a5ff4802e2f531602520d74546",
+    "cc0ea7cd6b40fa790570fc767b363d1482718cb2",
+    "0b0c30ce8a0770ee6a989e94bcf875494ed105d8",
+    "6f5f7e81f4102d4f76c2604d9a0f028e49c4952e",
+    "bab4994f3923af37ddbf54a1b69d5954852d1754",
+    "2c2a9d56d09c676a7b6500d3ee18b6e100cbd87f",
+    "58391cd702c86eec62fcfc9fbfff535410dfb150",
+    "e3510479f43a21b29fde3504af668d37bdbbb799",
+    "ac2369f558f15f080f68cd384fbe52f348a47e31",
+    "e090b0bf8c1b9e7607962a8523f02d82e8cc12af",
+    "262b8f0734bd8af3b42f21fefc9293a6c0bcf8d0",
+    "a4f2c68beca4ab5b4b3db1ae9d07cd1b35f9fffd",
+    "2ca39733f7a738c1fa8f515ffe2ff3ddc0c95c56",
+    "63d16097c9b701d65b33700e05512bc905b58443",
+    "bf77ecf143ceb21f1676c34b8d89c8bb3c43cc4e",
+    "862e4228ab561c475192bdbd03bb33c743fc0734",
+    "515e46b8fd51d614ca183cc8b3a076a9dbe3b70b",
+    "15cd4acbc372d214f88c908c92903c7acb958e32",
+    "26110861010beaef40f4590c701c0ff493f0ee27",
+    "bf7e80ffa9cbda63f72be2b83d732730cb953e97",
+    "d0900aeb1174173f7cc69d4788a61a574893d3b7",
+    "e79a9ff141c1279cec57f7ea34d4ac4d057f0834",
+    "a669f82976ca034e631533ce96e94b44e24dd2d8",
+    "7aab0fd3799c01adc27018aebca9b3a0e1a3d7fc",
+    "36248be03e0562a5306b30fcf7c4a4905cc41714",
+    "6bf234d718fd1f27bbfbff81fb7fd64a22ae6745",
+    "935ca3dfc9bfb1a3dccd5f794ab17e387441a4d2",
+    "bb6ac0036ee0a56803045317744d4269ecfd0e62",
+    "901406bf18a77ea00d526753957cb7423ee20b4e",
+    "b0fe8f32582fa72bddd26dd9599c8205117c6789",
+    "7d62100f74e829f7c5dd4db5817c530f3506813a",
+    "713b4f3bb5a983590b7cb3d8b68aa56abb396cd9",
+    "8e62281add5a87ba1b6df012b5fa25c7ec697265",
+    "ebaa706a4823c278319dfcae0cb4a042d13eb39c",
+    "c2e1fc39b890ff2b27ba8d0d355ef5704d792a8c",
+    "eefbfce3c1c225bb429d0f5bc2552210373aa2d9",
+    "4daea7d3291cdfb5bb13d522966c49bf1d692eac",
+    "efd657e983cc85ba14c91f33fa81cb55413fbda9",
+    "d33bce8f11c9f73666ae05446e0645235b29faf5",
+    "c0c549f0976e53d790ea9fd14aedf0a0cb86a678",
+    "44992a04e41a5cdb18833afe21a731c2b424b990",
+    "6233b62e68349b3b17ffd9eaa7395b8521e31d38",
+    "85d7f914b07ea2df148d5b1ed22f44928fce3a2a",
+    "a2a0b0917c454ba4cb1ee2c61dda863004542ed1",
+    "2411673903f84144bc5ee990f1b9160796196f1b",
+    "6ee6dd69ff465b3bbd0c72048df09f001958419e",
+    "c4493400da60de7e324dd0328ca5e3429d273c14",
+    "a9ea2b10ea549303f8a5448f3921449ce25b8c36",
+    "89725b40e71e1c0b27a68378a9e0ee0b2b0953b8",
+    "cab92400df0b6b54e05d22b6ede2a2e5a623714e",
+    "615653835fa024decf05ab5051fcabb4c6ecf853",
+    "dccbb727546f111a22dbfe140aeb1ca04d74195c",
+    "5d70ca252c600d686da9dd797018545aef3be66a",
+    "a4b6a68e3b0e76d9d97b1323f8ebf752ab8b9815",
+    "9fca700f9b8eb2159fade3e194a26a203270da3c",
+    "69f3f034ffbe3f8881c47e96d8a3c25d108b0b39",
+    "ccecfaa2c49a05caecd260b67e06b3db579aa0c8",
+    "fc97a9f84b147b2244a9c68ed6e42a2b443102e9",
+    "d64305c4b5c334fe9777f4a4c0c82389b289ff1e",
+    "bc04cd94abdf3c177c38572e0b070cfdc6bb615d",
+    "a96053be94fe5646d44c8455783180d5ad7d2ee8",
+    "d34c409ea103ec1a7d54336149f33f3688fafff8",
+    "660e49f0c60c8040ebfea6fbf9d4641bd29a50de",
+    "2f8a580637446865145b7bc1f1376e5827966b47",
+    "bca314aa8344c273ce31d86d05899c4dae043bc6",
+    "c56453208571fd9c5ecb07451ef0f3b93e057ad8",
+    "a238597192afa484d5c085938fe7e5ff5676c5e0",
+    "7c033b565ec87dd7355c42a1822f4478db8a5a06",
+    "2b0006ff2c586663fa9e60f0086ed31cbe263ae4",
+    "07497ffe076d1c6ab3115f8762959763d03a661d",
+    "5b886da6ce74d2392e79fbdf6573d37bd027e767",
+    "946aa1664ebf30f0c8a5297d0307130943516e8a",
+    "1fd32848d34600ec3dbec573897f6491f351e899",
+    "caaf2320f61e4902e0a76275eade0b7b696df011",
+    "188cf111bf5fac85bbd1234a725ae6d60c01b0be",
+    "5a4b75efd596c4b63b585de8bdd7ba32e5c9d51f",
+    "e6cde00bb218398b0746731df063d3bb566de2fa",
+    "5eccce82721de36778dc60bc2202eba25330ac6c",
+    "3f09e72b246a37847815cf6961c046fbe03a1b82",
+    "e41218b9952ed1fdf1c13f4764ce0464ab84da09",
+    "658e0bf69909da7ed06d0812743ea447f031ce20",
+    "351df1eb81e4c608b0f3ab639b4535176417a65e",
+    "8b1418a8864f2bed6f0a744d2a9bff79ce6e128c",
+    "61300adab058879efab23bec70c679a8764cd61c",
+    "c111d79fe3c572e5bb7b76665801304054f9460b",
+    "dbd3d71d83e8eb20ee962d516bc649cf7611bafc",
+    "3fd30a37347451c25842c635700d543a87159ec3",
+    "cdab33892deced0454e1918813b95444c008ad49",
+    "3e2e8c970e959b224f2333e4a9009b482e6863ea",
+    "db4a493a3da552ed75be5fe0d96f6e99e2fd8eeb",
+    "8b94a2c478e153ac9f5fc0b5de763b5124a1f70d",
+    "465059936302a4b0f5303dee926a54c983701c2f",
+    "4d2564abccc82edc1201f2f53975216586966c50",
+    "0b0aa6cf662dcd77e54d3ad8f4f3dc5cc27151a2",
+    "7918795cb32586b1e9e1024318e7eafa9b6ad18f",
+    "35b1bc29234467f581fdcd1eab41d4f5b4e12b64",
+    "abb9f092576cc104c714c930fc45ce4d64579119",
+    "4b21a2a5f59effb24c569761e6d81190178b4ada",
+    "69905ce9887ec25bba3431c58bc461cc198e216e",
+    "9550962ede872cdba5c76e4edd01e0af82627131",
+    "ba961c3cf1019b3ae55cf3cb4dfd63e56445a491",
+    "1daa88cc7b906174701a12cd4ee99db16f0ce895",
+    "1331b7f53c41c3af02675cf9bf9c90f766b15a66",
+    "4c79f5e36122bdd75f0441394e17c47d1610398e",
+    "47ca89f45df07b0cf76413b3e9501a673afaae92",
+    "aafd8ad6f2e4fc8a62a62f9aa0e4b7dfe3ced4ac",
+    "931dc6deca5a7bf14c7f09363b0128e7c2ed54c1",
+    "2860821a19639a36f466d9b609c18d8b925a17be",
+    "1b0833981cb628ba449413cf3b2298a2704aeb32",
+    "36e77b3b717a5157e12ec0c31e97cd7206da5fa2",
+    "de62d25749bd635d6bbe90c450277784a3c61cd0",
+    "dc060bc4abac7f859ce49196440be380973875ec",
+    "7f14938a411d1d43a518f616b89987754587e0a4",
+    "d213475a442062ca792da0365b65013b91bce3e1",
+    "568197b973327d6e1381fb787defb016554ff697",
+    "0f487f25e2c6d326d5842469151decd377808c31",
+    "944c6549c461c86e6efbb055ce984ce8cb477a3e",
+    "5ab47b9585d9fb2479153f5ddb34df05d0d92d2b",
+    "436104ec60d00a3d56f2715f4737b7a12141147f",
+    "c4a4e308300110262019dbbfb4e3d8ba25b15596",
+    "bc32be2415c6c9f7166cd72244aaebdb683ebc58",
+    "283d86c470fead74c4bf994cba027f7edf596747",
+    "7f387b0c27f3b2b273f85eaa35a93bf9d06d8a10",
+    "92aace99c76e474bb8adcba0a875b477fc360885",
+    "bb1cd0c8e0513222e530aa4e1f276cd3b13372ab",
+    "b837ddcbc1eb7084f3c28b6e05bcdb3fea844b56",
+    "d9a19e686d6c77640b10823a49e51b4eb8f51ee5",
+    "198d0a35c25c67b817f4851f5ce0d0056259fdc3",
+    "b5e6beb43c52ae185e2599db1927db7744335adc",
+    "761dc03843153110601ae87b6e36dc29ace16ef6",
+    "a64e92f4a324ad3ba3a116d561bd89036bc9eb71",
+    "18dc53328d39feb8cd31c172e1695093ceec915e",
+    "ae6082492d71f0ef80b402858803602ca3458153",
+    "ec6f78c1620e0bda60f630f36015226ac8639b25",
+    "c05239ff738a997fadd46525bf739e3e2c040e89",
+    "707e83ce4291c118051c5191e888c283b4e98399",
+    "cc14800d9ac3ef0c1f6731c9e70c7939c8dd0870",
+    "c5294dbe82ede53a2d8bb0418503a2deba2e4f3b",
+    "0455262dbd4b71218ed20f4162bbd0c3b7de4d07",
+    "6ccb4f7070d3c908830645cd552e3d6112d059c4",
+    "3974fab667fb7d746d5f088c6e277bfeee8128e7",
+    "065742e2a66d88b5652b2e40d46c4d50102f6db3",
+    "07fa47c9f269b323557182c61f6f6ed1c16ccafb",
+    "196987fbf33148ae33ce9f9733a97ea845cdc1c4",
+    "8139864a57098a32915f0e3aa6c0322fa9459fb6",
+    "1fcbf41589c8e7d92274e64ae6ed3ad9016c179d",
+    "055a0c549e6f648794cc65bddc08cfefffccdf9b",
+    "f956af32d67df97f6534357de15b216cc2d2d102",
+    "d7fea5323eea433ddb6277228ec0a5bc1ab4a808",
+    "083c9487c4469fda257aa45c8876ec8269aeebd8",
+    "9e88e459135e5f0b52ef6c371cca04a39d54b90b",
+    "b8c1ee8246d14bd62e5a03b94b848b534613e7d2",
+    "d26b97682f8acb1daf78be8c4418a0ebb17a05b4",
+    "68f2b5a79ddb450cd1b4d5d6e502979c9f157996",
+    "629e969018aa82b56389a3e601ef2a209f07cf07",
+    "2dca01e39393889210c566779afb65048a387785",
+    "d51c2f00f8c0fa2484497abe1bf85689c45d42ae",
+    "467dd26d49785595bba3d406de25f5df8fd8fd4f",
+    "72f9f715ea0aaf529be15e6afd7388e02341af75",
+    "25a5435435d5020c5a7cbbb84d3f9b5e8b2fb9fe",
+    "059d91ec492b6051340704b240b282d1fbe3d114",
+    "33fd244ba8454d234e7d6a8d04a55b78eff890c5",
+    "7d008c2d8d47bb97fc5dfe3de4559506e7fc4708",
+    "860ddab2982e9dac6cdd1e19f5c6c53dab82e4c1",
+    "4e39274189149868840fe7832230aa66483cd72d",
+    "c61b506b45d98fe6ce5422f8edf6f8bde43fd2df",
+    "97a8be86139d2732a9009525dff7cf77781acec1",
+    "1e83aad8918c5002eca3b07b071045d23a7213f1",
+    "d58d9ff6d19bd47651f3e2c766f869e6e07776ff",
+    "edbb172dc2004b81bf3937a0d3e54ea5ed642da1",
+    "1b144f648322f58caea9d31b3daf5ed686a3305b",
+    "0662edf0d072a4efcbb94fc855a35b0631007eff",
+    "446da0ba13c0c8cdec5dcb55beaff62f83822af7",
+    "3ecdc37d6ba572f691cf42654b182ce0cf4853e0",
+    "b9cf503328fc20919109b57a7785dbb664b2710e",
+    "8519d7c98bc7b7610ee96c047fb71ba73a441ca4",
+    "897e381dc5bac1eb7e8756dde6adae3ef2a081b8",
+    "8d1f32ea054e1d02370eb02c8ddd67bafd4138b2",
+    "d08fbd377a7f3689f881049f8c999e8c3616bdd2",
+    "ef9c6777079358192b922616871f6e6762d5a05a",
+    "63e2d52b6704f4660c1b6662a67acf385b4fb3cf",
+    "9fd8b020a14f2dd4be4ad5de13352ab8addbedaa",
+    "4481cc23334be067c5dfe87bffed1a1557fb5f64",
+    "dbb3e3d67acf2807afce8e9cdc3f670b1cfb67c2",
+    "0ab84832b324391f111b796e18dbdbf2c640f89f",
+    "742672e86dc79921ad0551daaa134baecb1f81f6",
+    "768e50efa6303a32043f7417f3360ffc3c9d4ba8",
+    "4fc6247f63a71000a794758c3d266d42acd39758",
+    "adfbec37138f84c212aab558a83e40570a349e1d",
+    "b8725701da5bb62ed2371788edb05daa9b42799a",
+    "10a0fe5f359d0f7bdcf10ed843b06a73338fa086",
+    "a30f11be717bc710d4d6dbfa02da4767eec14fc1",
+    "c0f1aba4346f0aca89f3ced0822af676a6835e87",
+    "89399c4a03e038efb7a97fe38ab3f6604f1fc37e",
+    "69ac5e45377465de71eed8a5527d7542130d8b2c",
+    "69a5899a88ad3922168116e523a59a19f5fdbe63",
+    "4da263905ead1900d957e11a24165aa5364da10c",
+    "b3f980c9a1a5939c21865e1430cdb6514c9f0787",
+    "195c2807c4b178c8d357d48560b759c70a5e1912",
+    "f5527b7bdfa0eb61b5b399c8a92ef72bcaa1dca7",
+    "60acf171a06b799678aa04c5ad2b999eba84f2e8",
+    "c357c94e288185c8c29ec2af829d159d296d5907",
+    "a7dc371d6a10326870be46b2cdf54803c4f05f2e",
+    "1f5e0cc507a3f9749d8c6377663626bd31aaa99b",
+    "8f352137a1e22f329086dd7b429049c7a8038718",
+    "879c2e232949b8ec6c9ee6529ee39d5dbc502b8c",
+    "aef44d7afe612259094ccd60494193225954bc51",
+    "1fdadca3d067bcc8db56715a9a492dfd2d4f5b3d",
+    "3b70d3d1cb0646f288537ed2695696c10b64d41b",
+    "8188a5ccd6e88caaf801c0373283c18a0b315bf9",
+    "75ebb8907480f01839e972a91051eccdd001619d",
+    "0ec661c8aa7e106c4e03acbcca84c3cd8eaaea6d",
+    "97da3e33e17f41d2187825d377bf0994c1631f89",
+    "5f7c53e4006f76cbd1777b01005d03482d616f75",
+    "50750f6ec4bdaa134369299de53d8d8b87d1ba63",
+    "5f8f7e823d4e54b02610108a86ea721e337864ec",
+    "d6cc685ba7b6ac3157adbb44c3f24c5a3c01ea67",
+    "61e297c05feecd9901ec06b314429fe6ca92f27a",
+    "d64a178d4759b796ec0e77626cf19257c28292fc",
+    "6ae457f71b1cd60b1810fd4379c90bb38154568f",
+    "063623280f208df296895ccd867dab8a73cf174d",
+    "7a8b8c9aa0591603cf08e94ec2ae6a6350cbb8a2",
+    "20c4232d3066c41e211eefe2834db78a8c083ea4",
+    "82fdf2cccc77ab556aa35557d0923b162d1b98cf",
+    "3dce8306f3c1810d5d81ed5ebb0ccea947277a61",
+    "11bca5b61fc1f6d59078ec5354bc6d9adecc0c5d",
+  ];
+  for (var i = 0; i < expectedValues.length; i++) {
+    var hash = new SHA1();
+    hash.add(new List<int>.generate(i, (j) => j, growable: false));
+    var digest = hash.close();
+    expect(expectedValues[i], bytesToHex(digest));
+  }
+}
+
+String bytesToHex(List<int> bytes) {
+  var result = new StringBuffer();
+  for (var part in bytes) {
+    result.write('${part < 16 ? '0' : ''}${part.toRadixString(16)}');
+  }
+  return result.toString();
+}
+
+void _testInvalidUse() {
+  var sha = new SHA1();
+  sha.close();
+  expect(() => sha.add([0]), throwsStateError);
+}
+
+void _testRepeatedDigest() {
+  var sha = new SHA1();
+  var digest = sha.close();
+  expect(digest, sha.close());
+}
+
+void _testStandardVectors(inputs, mds) {
+  for (var i = 0; i < inputs.length; i++) {
+    var hash = new SHA1();
+    hash.add(inputs[i]);
+    var d = hash.close();
+    expect(mds[i], bytesToHex(d), reason: '$i');
+  }
+}
diff --git a/tests/compiler/dart2js/simple_inferrer_closure_test.dart b/tests/compiler/dart2js/simple_inferrer_closure_test.dart
index 13cca3a..c9776f1 100644
--- a/tests/compiler/dart2js/simple_inferrer_closure_test.dart
+++ b/tests/compiler/dart2js/simple_inferrer_closure_test.dart
@@ -146,6 +146,7 @@
           simplify(typesInferrer.getReturnTypeOfElement(element), compiler));
     }
     var cls = findElement(compiler, 'A');
-    checkReturnInClass('A', 'foo', new TypeMask.nonNullExact(cls));
+    checkReturnInClass('A', 'foo', new TypeMask.nonNullExact(cls,
+        compiler.world));
   }));
 }
diff --git a/tests/compiler/dart2js/simple_inferrer_test.dart b/tests/compiler/dart2js/simple_inferrer_test.dart
index 5ecfce8..2d59561 100644
--- a/tests/compiler/dart2js/simple_inferrer_test.dart
+++ b/tests/compiler/dart2js/simple_inferrer_test.dart
@@ -709,6 +709,7 @@
   asyncTest(() => compiler.runCompiler(uri).then((_) {
     var typesTask = compiler.typesTask;
     var typesInferrer = typesTask.typesInferrer;
+    var world = compiler.world;
 
     checkReturn(String name, type) {
       var element = findElement(compiler, name);
@@ -828,14 +829,14 @@
     checkFactoryConstructor(String className, String factoryName) {
       var cls = findElement(compiler, className);
       var element = cls.localLookup(factoryName);
-      Expect.equals(new TypeMask.nonNullExact(cls),
+      Expect.equals(new TypeMask.nonNullExact(cls, world),
                     typesInferrer.getReturnTypeOfElement(element));
     }
     checkFactoryConstructor('A', '');
 
     checkReturn('testCascade1', typesTask.growableListType);
     checkReturn('testCascade2', new TypeMask.nonNullExact(
-        findElement(compiler, 'CascadeHelper')));
+        findElement(compiler, 'CascadeHelper'), world));
     checkReturn('testSpecialization1', typesTask.numType);
     checkReturn('testSpecialization2', typesTask.dynamicType);
     checkReturn('testSpecialization3', typesTask.uint31Type.nullable());
diff --git a/tests/compiler/dart2js/type_combination_test.dart b/tests/compiler/dart2js/type_combination_test.dart
index 035b5b98..1da033d 100644
--- a/tests/compiler/dart2js/type_combination_test.dart
+++ b/tests/compiler/dart2js/type_combination_test.dart
@@ -711,25 +711,26 @@
         world);
     jsMutableArray = new TypeMask.nonNullSubclass(backend.jsMutableArrayClass,
         world);
-    jsFixedArrayOrNull = new TypeMask.exact(backend.jsFixedArrayClass);
-    jsFixedArray = new TypeMask.nonNullExact(backend.jsFixedArrayClass);
-    jsExtendableArrayOrNull = new TypeMask.exact(backend.jsExtendableArrayClass);
+    jsFixedArrayOrNull = new TypeMask.exact(backend.jsFixedArrayClass, world);
+    jsFixedArray = new TypeMask.nonNullExact(backend.jsFixedArrayClass, world);
+    jsExtendableArrayOrNull = new TypeMask.exact(backend.jsExtendableArrayClass,
+        world);
     jsExtendableArray = new TypeMask.nonNullExact(
-        backend.jsExtendableArrayClass);
+        backend.jsExtendableArrayClass, world);
     jsIndexableOrNull = new TypeMask.subtype(backend.jsIndexableClass, world);
     jsIndexable = new TypeMask.nonNullSubtype(backend.jsIndexableClass, world);
     jsInterceptorOrNull = new TypeMask.subclass(backend.jsInterceptorClass,
         world);
-    jsStringOrNull = new TypeMask.exact(backend.jsStringClass);
-    jsString = new TypeMask.nonNullExact(backend.jsStringClass);
-    jsBoolean = new TypeMask.nonNullExact(backend.jsBoolClass);
+    jsStringOrNull = new TypeMask.exact(backend.jsStringClass, world);
+    jsString = new TypeMask.nonNullExact(backend.jsStringClass, world);
+    jsBoolean = new TypeMask.nonNullExact(backend.jsBoolClass, world);
     jsNumber = new TypeMask.nonNullSubclass(backend.jsNumberClass, world);
-    jsInteger = new TypeMask.nonNullExact(backend.jsIntClass);
-    jsDouble = new TypeMask.nonNullExact(backend.jsDoubleClass);
-    jsBooleanOrNull = new TypeMask.exact(backend.jsBoolClass);
+    jsInteger = new TypeMask.nonNullExact(backend.jsIntClass, world);
+    jsDouble = new TypeMask.nonNullExact(backend.jsDoubleClass, world);
+    jsBooleanOrNull = new TypeMask.exact(backend.jsBoolClass, world);
     jsNumberOrNull = new TypeMask.subclass(backend.jsNumberClass, world);
-    jsIntegerOrNull = new TypeMask.exact(backend.jsIntClass);
-    jsDoubleOrNull = new TypeMask.exact(backend.jsDoubleClass);
+    jsIntegerOrNull = new TypeMask.exact(backend.jsIntClass, world);
+    jsDoubleOrNull = new TypeMask.exact(backend.jsDoubleClass, world);
     nullType = const TypeMask.empty();
     objectType = new TypeMask.nonNullSubclass(
         compiler.objectClass, world);
diff --git a/tests/compiler/dart2js/type_mask2_test.dart b/tests/compiler/dart2js/type_mask2_test.dart
index dcc1ec9..80535ce 100644
--- a/tests/compiler/dart2js/type_mask2_test.dart
+++ b/tests/compiler/dart2js/type_mask2_test.dart
@@ -7,11 +7,20 @@
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'type_test_helper.dart';
-import 'package:compiler/implementation/dart_types.dart';
 import 'package:compiler/implementation/elements/elements.dart'
        show Element, ClassElement;
 import 'package:compiler/implementation/types/types.dart';
 
+isCheckedMode() {
+  try {
+    var i = 1;
+    String s = i;
+    return false;
+  } catch (e) {
+    return true;
+  }
+}
+
 void main() {
   testUnionTypeMaskFlatten();
 }
@@ -55,9 +64,14 @@
       Expect.listEquals(disjointMasks, disjoint,
           'Unexpected disjoint masks: $disjoint, expected $disjointMasks.');
       if (flattened == null) {
-        Expect.throws(() => UnionTypeMask.flatten(disjoint, classWorld),
-          (e) => e is AssertionError,
-          'Expect assertion failure on flattening of $disjoint.');
+        // We only do the invalid call to flatten in checked mode, as flatten's
+        // brehaviour in unchecked more is not defined and thus cannot be
+        // reliably tested.
+        if (isCheckedMode()) {
+          Expect.throws(() => UnionTypeMask.flatten(disjoint, classWorld),
+            (e) => e is AssertionError,
+            'Expect assertion failure on flattening of $disjoint.');
+        }
       } else {
         TypeMask flattenResult =
             UnionTypeMask.flatten(disjoint, classWorld);
@@ -93,14 +107,14 @@
 
     TypeMask empty = const TypeMask.nonNullEmpty();
     TypeMask subclassObject = new TypeMask.nonNullSubclass(Object_, classWorld);
-    TypeMask exactA = new TypeMask.nonNullExact(A);
+    TypeMask exactA = new TypeMask.nonNullExact(A, classWorld);
     TypeMask subclassA = new TypeMask.nonNullSubclass(A, classWorld);
     TypeMask subtypeA = new TypeMask.nonNullSubtype(A, classWorld);
-    TypeMask exactB = new TypeMask.nonNullExact(B);
+    TypeMask exactB = new TypeMask.nonNullExact(B, classWorld);
     TypeMask subclassB = new TypeMask.nonNullSubclass(B, classWorld);
-    TypeMask exactC = new TypeMask.nonNullExact(C);
-    TypeMask exactD = new TypeMask.nonNullExact(D);
-    TypeMask exactE = new TypeMask.nonNullExact(E);
+    TypeMask exactC = new TypeMask.nonNullExact(C, classWorld);
+    TypeMask exactD = new TypeMask.nonNullExact(D, classWorld);
+    TypeMask exactE = new TypeMask.nonNullExact(E, classWorld);
 
     check([],
           result: empty,
diff --git a/tests/compiler/dart2js/type_mask_test.dart b/tests/compiler/dart2js/type_mask_test.dart
index 984b1d8..3bc023d 100644
--- a/tests/compiler/dart2js/type_mask_test.dart
+++ b/tests/compiler/dart2js/type_mask_test.dart
@@ -29,10 +29,10 @@
     var classC = findElement(compiler, 'C');
     var classD = findElement(compiler, 'D');
 
-    var exactA = new TypeMask.nonNullExact(classA);
-    var exactB = new TypeMask.nonNullExact(classB);
-    var exactC = new TypeMask.nonNullExact(classC);
-    var exactD = new TypeMask.nonNullExact(classD);
+    var exactA = new TypeMask.nonNullExact(classA, classWorld);
+    var exactB = new TypeMask.nonNullExact(classB, classWorld);
+    var exactC = new TypeMask.nonNullExact(classC, classWorld);
+    var exactD = new TypeMask.nonNullExact(classD, classWorld);
 
     var subclassA = new TypeMask.nonNullSubclass(classA, classWorld);
     var subtypeA = new TypeMask.nonNullSubtype(classA, classWorld);
diff --git a/tests/compiler/dart2js/union_type_test.dart b/tests/compiler/dart2js/union_type_test.dart
index ae59da3..5cbecc1 100644
--- a/tests/compiler/dart2js/union_type_test.dart
+++ b/tests/compiler/dart2js/union_type_test.dart
@@ -11,10 +11,12 @@
 import "package:compiler/implementation/dart_types.dart";
 
 main() {
-  asyncTest(() => MockCompiler.create((MockCompiler compiler) {
-    compiler.intClass.ensureResolved(compiler);
-    compiler.stringClass.ensureResolved(compiler);
-
+  MockCompiler compiler = new MockCompiler.internal(analyzeOnly: true);
+  asyncTest(() => compiler.runCompiler(null, """
+      main() {
+        print(2); print("Hello");
+      }
+    """).then((_) {
     FlatTypeMask mask1 =
         new FlatTypeMask.exact(compiler.intClass);
     FlatTypeMask mask2 =
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_class_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_class_test.dart
index ff7e328..3d43f5d 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_class_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_class_test.dart
@@ -7,9 +7,7 @@
 
 import 'dart:async';
 
-@lazy import 'deferred_class_library.dart' as lib;
-
-const lazy = const DeferredLibrary('deferred_class_library');
+import 'deferred_class_library.dart' deferred as lib;
 
 isError(e) => e is Error;
 
@@ -19,7 +17,7 @@
   Expect.isNull(x);
   int counter = 0;
   asyncStart();
-  lazy.load().then((_) {
+  lib.loadLibrary().then((_) {
     Expect.equals(1, ++counter);
     print('deferred_class_library was loaded');
     x = new lib.MyClass();
@@ -29,7 +27,7 @@
   Expect.equals(0, counter);
   Expect.isNull(x);
   asyncStart();
-  lazy.load().then((_) {
+  lib.loadLibrary().then((_) {
     Expect.equals(2, ++counter);
     print('deferred_class_library was loaded');
     x = new lib.MyClass();
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_constant2_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_constant2_test.dart
index 21c4a7d..6ea3752 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_constant2_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_constant2_test.dart
@@ -7,13 +7,11 @@
 
 import 'dart:async';
 
-@lazy import 'deferred_class_library2.dart' as lib;
-
-const lazy = const DeferredLibrary('deferred_class_library2');
+import 'deferred_class_library2.dart' deferred as lib;
 
 main() {
   asyncStart();
-  lazy.load().then((_) {
+  lib.loadLibrary().then((_) {
     Expect.equals(499, lib.C1.value);
     asyncEnd();
   });
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_constant3_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_constant3_test.dart
index afc2b24..14add53 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_constant3_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_constant3_test.dart
@@ -7,13 +7,11 @@
 
 import 'dart:async';
 
-@lazy import 'deferred_class_library2.dart' as lib;
-
-const lazy = const DeferredLibrary('deferred_class_library2');
+import 'deferred_class_library2.dart' deferred as lib;
 
 main() {
   asyncStart();
-  lazy.load().then((_) {
+  lib.loadLibrary().then((_) {
     Expect.equals(499, lib.C1.value);
     Expect.equals(99, lib.C2[0].value);
     Expect.equals(42, lib.foo().value);
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_constant4_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_constant4_test.dart
index ee4b0d6..af903f4 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_constant4_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_constant4_test.dart
@@ -5,15 +5,11 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 
-import 'dart:async';
-
-@lazy import 'deferred_class_library2.dart' as lib;
-
-const lazy = const DeferredLibrary('deferred_class_library2');
+import 'deferred_class_library2.dart' deferred as lib;
 
 main() {
   asyncStart();
-  lazy.load().then((_) {
+  lib.loadLibrary().then((_) {
     // Only Gee2.n888 to make sure no other constant pulls in its super.
     Expect.equals(888, new lib.Gee2.n888().value);
     asyncEnd();
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_constant_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_constant_test.dart
deleted file mode 100644
index 163234c..0000000
--- a/tests/compiler/dart2js_extra/deferred/deferred_constant_test.dart
+++ /dev/null
@@ -1,47 +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.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:expect/expect.dart';
-
-import 'dart:async';
-
-@lazy import 'deferred_class_library.dart';
-
-const lazy = const DeferredLibrary('deferred_class_library');
-
-main() {
-  var x;
-  Expect.throws(() => const MyClass());
-  Expect.throws(() => const Constant(42));
-  Expect.throws(() => const [const Constant(42)]);
-  int counter = 0;
-  asyncStart();
-  lazy.load().then((bool didLoad) {
-    Expect.isTrue(didLoad);
-    Expect.equals(1, ++counter);
-    print('deferred_class_library was loaded');
-    x = const MyClass();
-    Expect.equals(42, x.foo(87));
-    Expect.listEquals(const [const Constant(42)], [new Constant(42)]);
-    asyncEnd();
-  });
-  Expect.equals(0, counter);
-  Expect.isNull(x);
-  asyncStart();
-  lazy.load().then((bool didLoad) {
-    Expect.isFalse(didLoad);
-    Expect.equals(2, ++counter);
-    print('deferred_class_library was loaded');
-    x = const MyClass();
-    Expect.equals(42, x.foo(87));
-    Expect.listEquals(const [const Constant(42)], [new Constant(42)]);
-    asyncEnd();
-  });
-  Expect.equals(0, counter);
-  Expect.isNull(x);
-  Expect.throws(() => const Constant(42));
-  Expect.throws(() => const [const Constant(42)]);
-  Expect.isNull(x);
-}
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_function_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_function_test.dart
index e6f7f88..9bb7fd2 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_function_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_function_test.dart
@@ -8,11 +8,7 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 
-import 'dart:async';
-
-@lazy import 'deferred_function_library.dart' as lib;
-
-const lazy = const DeferredLibrary('deferred_function_library');
+import 'deferred_function_library.dart' deferred as lib;
 
 isError(e) => e is Error;
 
@@ -25,7 +21,7 @@
   Expect.throws(readFoo, isError);
   int counter = 0;
   asyncStart();
-  lazy.load().then((_) {
+  lib.loadLibrary().then((_) {
     Expect.equals(1, ++counter);
     print('lazy was loaded');
     Expect.equals(42, lib.foo('b'));
@@ -34,7 +30,7 @@
   });
   Expect.equals(0, counter);
   asyncStart();
-  lazy.load().then((_) {
+  lib.loadLibrary().then((_) {
     Expect.equals(2, ++counter);
     print('lazy was loaded');
     Expect.equals(42, lib.foo('b'));
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_unused_classes_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_unused_classes_test.dart
index c8b76f0..9db7a8c 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_unused_classes_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_unused_classes_test.dart
@@ -7,9 +7,7 @@
 import "package:expect/expect.dart";
 import 'dart:async';
 
-@lazy import 'deferred_class_library.dart' as lib;
-
-const lazy = const DeferredLibrary('deferred_class_library');
+import 'deferred_class_library.dart' deferred as lib;
 
 class Base {}
 
diff --git a/tests/compiler/dart2js_native/dart2js_native.status b/tests/compiler/dart2js_native/dart2js_native.status
index ce5e49c..ca0ae5d 100644
--- a/tests/compiler/dart2js_native/dart2js_native.status
+++ b/tests/compiler/dart2js_native/dart2js_native.status
@@ -11,6 +11,9 @@
 native_no_such_method_exception4_frog_test: Fail  # Issue 9631
 native_no_such_method_exception5_frog_test: Fail  # Issue 9631
 
+[ $compiler == dart2js ]
+fake_thing_test: Fail # Issue 13010
+
 [ $compiler == dart2js && $minified ]
 optimization_hints_test: Fail, OK # Test relies on unminified names.
 
diff --git a/tests/compiler/dart2js_native/fake_thing_2_test.dart b/tests/compiler/dart2js_native/fake_thing_2_test.dart
new file mode 100644
index 0000000..d243919
--- /dev/null
+++ b/tests/compiler/dart2js_native/fake_thing_2_test.dart
@@ -0,0 +1,47 @@
+// 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 "dart:_js_helper";
+import "package:expect/expect.dart";
+
+// Test that native objects cannot accidentally or maliciously be mistaken for
+// Dart objects.
+// The difference between fake_thing_test and fake_thing_2_test is the
+// presence of a used declared native class.
+
+class Thing {
+}
+
+@Native("NT")
+class NativeThing {
+}
+
+make1() native;
+make2() native;
+make3() native;
+
+void setup() native r"""
+function A() {}
+A.prototype.$isThing = true;
+make1 = function(){return new A;};
+make2 = function(){return {$isThing: true}};
+function NT() {}
+NT.prototype.$isThing = true;
+make3 = function(){return new NT;};
+""";
+
+var inscrutable;
+main() {
+  setup();
+  inscrutable = (x) => x;
+
+  var a = new Thing();
+  var b = make1();
+  var c = make2();
+  var d = make3();
+  Expect.isTrue(inscrutable(a) is Thing);
+  Expect.isFalse(inscrutable(b) is Thing);
+  Expect.isFalse(inscrutable(c) is Thing);
+  Expect.isFalse(inscrutable(d) is Thing);
+}
diff --git a/tests/compiler/dart2js_native/fake_thing_test.dart b/tests/compiler/dart2js_native/fake_thing_test.dart
index aa3bb0f..20a84a2 100644
--- a/tests/compiler/dart2js_native/fake_thing_test.dart
+++ b/tests/compiler/dart2js_native/fake_thing_test.dart
@@ -7,6 +7,9 @@
 // Test that native objects cannot accidentally or maliciously be mistaken for
 // Dart objects.
 
+// This test currently fails because we do not recognize the need for
+// interceptors without native *classes*.
+
 class Thing {
 }
 
@@ -20,10 +23,16 @@
 make2 = function(){return {$isThing: true}};
 """;
 
-var inscrutable;
+inscrutable(x) {
+  if (new DateTime.now().millisecondsSinceEpoch == 0) {
+    return x;
+  } else {
+    return 42;
+  }
+}
+
 main() {
   setup();
-  inscrutable = (x) => x;
 
   var a = new Thing();
   var b = make1();
diff --git a/tests/corelib/bool_from_environment_test.dart b/tests/corelib/bool_from_environment_test.dart
index 34e9ee1..5d01bde 100644
--- a/tests/corelib/bool_from_environment_test.dart
+++ b/tests/corelib/bool_from_environment_test.dart
@@ -11,4 +11,5 @@
   Expect.isTrue(const bool.fromEnvironment('c', defaultValue: true));
   Expect.isFalse(const bool.fromEnvironment('c', defaultValue: false));
   Expect.isFalse(const bool.fromEnvironment('d', defaultValue: false));
+  Expect.equals(const bool.fromEnvironment('dart.isVM'), !identical(1.0, 1));
 }
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 5093dba..d575354 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -158,9 +158,15 @@
 list_insert_test: fail
 list_removeat_test: fail
 
+[ $arch == simarm || $arch == simarm64 ]
+big_integer_vm_test: Skip # Timeout. Issue 20879
+
 [ $arch == simmips ]
 int_parse_radix_test: Skip # Timeout
 
+[ $arch == simmips || $arch == mips ]
+big_integer_vm_test: Skip # Timeout. Issue 20879
+
 [ $arch == simarm && $checked ]
 num_parse_test: Skip  # Pass, Timeout
 
diff --git a/tests/corelib/uri_scheme_test.dart b/tests/corelib/uri_scheme_test.dart
index f816624..09bdfc4 100644
--- a/tests/corelib/uri_scheme_test.dart
+++ b/tests/corelib/uri_scheme_test.dart
@@ -16,10 +16,15 @@
     var uri = new Uri(scheme: scheme);
     Expect.equals(expectedScheme, uri.scheme);
     Expect.equals(expectedUri, uri.toString());
+    uri = Uri.parse("$scheme:");
+    Expect.equals(expectedScheme, uri.scheme);
+    Expect.equals(expectedUri, uri.toString());
   }
 
   test("http", "http:", "http");
   test("http", "http:", "HTTP");
+  test("http", "http:", "hTTP");
+  test("http", "http:", "Http");
   test("http+ssl", "http+ssl:", "HTTP+ssl");
   test("urn", "urn:", "urn");
   test("urn", "urn:", "UrN");
diff --git a/tests/corelib/uri_test.dart b/tests/corelib/uri_test.dart
index c2c8286..7971256 100644
--- a/tests/corelib/uri_test.dart
+++ b/tests/corelib/uri_test.dart
@@ -425,6 +425,11 @@
       }
     }
   }
+
+  // Regression test, http://dartbug.com/20814
+  var uri = Uri.parse("/no-authorty/");
+  uri = uri.replace(fragment: "fragment");
+  Expect.isFalse(uri.hasAuthority);
 }
 
 main() {
diff --git a/tests/html/custom/document_register_basic_test.dart b/tests/html/custom/document_register_basic_test.dart
index e127ebf..cf11b63 100644
--- a/tests/html/custom/document_register_basic_test.dart
+++ b/tests/html/custom/document_register_basic_test.dart
@@ -35,9 +35,13 @@
 class BadB {
 }
 
-class BadE implements HtmlElement {
-  static final tag = 'x-tag-e';
-  factory BadE() => new Element.tag(tag);
+abstract class BadC extends HtmlElement {
+  BadC.created() : super.created();
+}
+
+class BadF implements HtmlElement {
+  static final tag = 'x-tag-f';
+  factory BadF() => new Element.tag(tag);
 }
 
 main() {
@@ -56,14 +60,17 @@
     // Invalid user type.  Doesn't inherit from HtmlElement.
     expect(() => document.registerElement('x-bad-b', BadB), throws);
 
+    // Cannot register abstract class.
+    expect(() => document.registerElement('x-bad-c', BadC), throws);
+
     // Not a type.
-    expect(() => document.registerElement('x-bad-c', null), throws);
+    expect(() => document.registerElement('x-bad-d', null), throws);
 
     // Cannot register system type.
-    expect(() => document.registerElement('x-bad-d', Object), throws);
+    expect(() => document.registerElement('x-bad-e', Object), throws);
 
     // Must extend HtmlElement, not just implement it.
-    expect(() => document.registerElement(BadE.tag, BadE), throws);
+    expect(() => document.registerElement(BadF.tag, BadF), throws);
 
     // Constructor initiated instantiation
     var createdFoo = new Foo();
diff --git a/tests/html/html.status b/tests/html/html.status
index 9d1a21a..413709e 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -8,6 +8,7 @@
 
 [ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
 custom/attribute_changed_callback_test/unsupported_on_polyfill: Fail # Issue 18931 (Disabled for Chrome 35 roll)
+custom/document_register_basic_test: RuntimeError # Issue 20813
 indexeddb_1_test/functional: Skip # Issue 19512 (timing out)
 form_data_test/functional: Skip # Issue 19726
 indexeddb_4_test: Skip # Issue 19726
@@ -337,7 +338,6 @@
 canvasrenderingcontext2d_test/drawImage_video_element: Fail # Safari does not support drawImage w/ video element
 canvasrenderingcontext2d_test/drawImage_video_element_dataUrl: Fail # Safari does not support drawImage w/ video element
 audiocontext_test/functional: Fail # Issue 14354
-websql_test/functional: RuntimeError # Issue 14523
 
 # Safari Feature support statuses-
 # All changes should be accompanied by platform support annotation changes.
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index 3718278..b658c4f 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -28,6 +28,9 @@
 [ $compiler == none && $runtime == ContentShellOnAndroid ]
 *: Skip # Isolate tests are timing out flakily on Android content_shell.  Issue 19795
 
+[ $compiler == dart2js && $runtime == safarimobilesim ]
+compile_time_error_test/none: Pass, Slow
+
 [ $compiler == dart2js && $jscl ]
 browser/*: SkipByDesign  # Browser specific tests
 
diff --git a/tests/language/await_exceptions_test.dart b/tests/language/await_exceptions_test.dart
new file mode 100644
index 0000000..cb3aca3
--- /dev/null
+++ b/tests/language/await_exceptions_test.dart
@@ -0,0 +1,80 @@
+// Copyright (c) 2014, 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=--enable_async --optimization-counter-threshold=5
+
+import 'package:expect/expect.dart';
+
+import 'dart:async';
+
+// It does not matter where a future is generated.
+bar(p) async => p;
+baz(p) => new Future(() => p);
+
+test0_1() async {
+  throw 1;
+}
+
+test0() async {
+  try {
+    await test0_1();
+  } catch (e) {
+    Expect.equals(1, e);
+  }
+}
+
+test1_1() async {
+  throw 1;
+}
+
+test1_2() async {
+  try {
+    await test1_1();
+  } catch (e) {
+    throw e+1;
+  }
+}
+
+test1() async {
+  try {
+    await test1_2();
+  } catch (e) {
+    Expect.equals(2, e);
+  }
+}
+
+test2() async {
+  var x;
+  var test2_1 = () async {
+    try {
+      throw 'a';
+    } catch (e) {
+      throw e + 'b';
+    }
+  };
+  try {
+    try {
+      await test2_1();
+    } catch (e) {
+      var y = await bar(e + 'c');
+      throw y;
+    }
+  } catch (e) {
+    x = e + 'd';
+    return '?';
+  } finally {
+    return x;
+  }
+  return '!';
+}
+
+main() async {
+  var result;
+  for (int i = 0; i < 10; i++) {
+    await test0();
+    await test1();
+    result = await test2();
+    Expect.equals('abcd', result);
+  }
+}
diff --git a/tests/language/await_future_test.dart b/tests/language/await_future_test.dart
index 9811f37..f1e21bc 100644
--- a/tests/language/await_future_test.dart
+++ b/tests/language/await_future_test.dart
@@ -48,14 +48,177 @@
   }
 }
 
+nesting() async {
+  try {
+    try {
+      var x = 1;
+      var y = () async {
+        try {
+          var z = (await bar(3)) + x;
+          throw z;
+        }  catch (e1) {
+          return e1;
+        }
+      };
+      var a = await y();
+      throw a;
+    } catch (e2) {
+      throw e2 + 1;
+    }
+  } catch (e3) {
+    return e3;
+  }
+}
+
+awaitAsUnary(a,b) async {
+  return await a + await b;
+}
+
+awaitIf(p) async {
+  if (p < (await bar(5))) {
+    return "p<5";
+  } else {
+    return "p>=5";
+  }
+}
+
+awaitNestedIf(p,q) async {
+  if (p == (await bar(5))) {
+    if (q < (await bar(7))) {
+      return "q<7";
+    } else {
+      return "q>=7";
+    }
+  } else {
+    return "p!=5";
+  }
+  return "!";
+}
+
+awaitElseIf(p) async {
+  if (p > (await bar(5))) {
+    return "p>5";
+  } else if (p < (await bar(5))) {
+    return "p<5";
+  } else {
+    return "p==5";
+  }
+  return "!";
+}
+
+awaitReturn() async {
+  return await bar(17);
+}
+
+awaitSwitch() async {
+  switch(await bar(3)) {
+    case 1:
+      return 1;
+      break;
+    case 3:
+      return 3;
+      break;
+    default:
+      return -1;
+  }
+}
+
+awaitNestedWhile(int i, int j) async {
+  int savedJ = j;
+  var decI = () async {
+    return i--;
+  };
+  var decJ = () async {
+    return j--;
+  };
+  var k = 0;
+  while ((await decI()) > 0) {
+    j = savedJ;
+    while(0 < (await decJ())) {
+      k++;
+    }
+  }
+  return k;
+}
+
+awaitNestedDoWhile(int i, int j) async {
+  int savedJ = j;
+  var decI = () async {
+    return i--;
+  };
+  var decJ = () async {
+    return j--;
+  };
+  var k = 0;
+  do {
+    do {
+      k++;
+    } while (0 < (await decI()));
+  } while((await decJ()) > 0);
+  return k;
+}
+
+awaitFor() async {
+  var asyncInc = (p) async => p+1;
+  var k = 0;
+  for (int j = (await bar(0)), i = (await bar(1));
+       j < (await bar(5));
+       j = (await asyncInc(j)), i = (await asyncInc(i))) {
+    k += i;
+    k += j;
+  }
+  return k;
+}
+
+awaitForIn() async {
+  var list = ['a', 'b', 'c'];
+  var k = '';
+  for (var c in (await bar(list))) {
+    k += c;
+  }
+  return k;
+}
+
 main() async {
   var result;
   for (int i = 0; i < 10; i++) {
     result = await foo();
-    Expect.equals(result, 30);
+    Expect.equals(30, result);
     result = await quaz(17);
-    Expect.equals(result, 17);
+    Expect.equals(17, result);
     result = await quazz();
-    Expect.equals(result, 2);
+    Expect.equals(2, result);
+    result = await nesting();
+    Expect.equals(5, result);
+    result = await awaitIf(3);
+    Expect.equals("p<5", result);
+    result = await awaitIf(5);
+    Expect.equals("p>=5", result);
+    result = await awaitNestedIf(5,3);
+    Expect.equals("q<7", result);
+    result = await awaitNestedIf(5,8);
+    Expect.equals("q>=7", result);
+    result = await awaitNestedIf(3,8);
+    Expect.equals("p!=5", result);
+    result = await awaitReturn();
+    Expect.equals(17, result);
+    result = await awaitSwitch();
+    Expect.equals(3, result);
+    result = await awaitElseIf(6);
+    Expect.equals("p>5", result);
+    result = await awaitElseIf(4);
+    Expect.equals("p<5", result);
+    result = await awaitElseIf(5);
+    Expect.equals("p==5", result);
+    result = await awaitNestedWhile(5,3);
+    Expect.equals(15, result);
+    result = await awaitNestedWhile(4,6);
+    Expect.equals(24, result);
+    result = await awaitAsUnary(bar(1), bar(2));
+    Expect.equals(3, result);
+    result = await awaitFor();
+    Expect.equals(25, result);
+    result = await awaitForIn();
+    Expect.equals('abc', result);
   }
 }
diff --git a/tests/language/deferred_constraints_constants_old_syntax_lib.dart b/tests/language/deferred_constraints_constants_old_syntax_lib.dart
deleted file mode 100644
index 50b6ed5..0000000
--- a/tests/language/deferred_constraints_constants_old_syntax_lib.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2014, 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.
-
-class C {
-  static int staticMethod() => 42;
-}
-
-class G<T> {}
-
-class Const {
-  const Const();
-  const Const.namedConstructor();
-  static const instance = const Const();
-}
-
-const constantInstance = const Const();
\ No newline at end of file
diff --git a/tests/language/deferred_constraints_constants_old_syntax_test.dart b/tests/language/deferred_constraints_constants_old_syntax_test.dart
deleted file mode 100644
index 4603b74a..0000000
--- a/tests/language/deferred_constraints_constants_old_syntax_test.dart
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (c) 2014, 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 "dart:async";
-import 'package:expect/expect.dart';
-import 'package:async_helper/async_helper.dart';
-
-@lazy import "deferred_constraints_constants_old_syntax_lib.dart" as lib;
-
-const lazy = const DeferredLibrary('lib');
-
-const myConst1 =
-  lib.constantInstance; /// reference1: compile-time error
-  /*                    /// reference1: continued
-  499;
-  */                    /// reference1: continued
-const myConst2 =
-  lib.Const.instance; /// reference2: compile-time error
-  /*                  /// reference2: continued
-  499;
-  */                  /// reference2: continued
-
-void f1({a:
-  const lib.Const() /// default_argument1: compile-time error
-  /*                   /// default_argument1: continued
-  499
-  */                   /// default_argument1: continued
-}) {}
-
-void f2({a:
-  lib.constantInstance /// default_argument2: compile-time error
-  /*                         /// default_argument2: continued
-  499
-  */                         /// default_argument2: continued
-}) {}
-
-@lib.Const() /// metadata1: compile-time error
-class H1 {}
-@lib.Const.instance /// metadata2: compile-time error
-class H2 {}
-@lib.Const.namedConstructor() /// metadata3: compile-time error
-class H3 {}
-
-void main() {
-  var a1 = myConst1;
-  var a2 = myConst2;
-
-  asyncStart();
-  lazy.load().then((_) {
-    var instance = lib.constantInstance;
-    var c1 = const lib.Const(); /// constructor1: compile-time error
-    var c2 = const lib.Const.namedConstructor(); /// constructor2: compile-time error
-    f1();
-    f2();
-    var constInstance = lib.constantInstance; /// reference_after_load: ok
-    var h1 = new H1();
-    var h2 = new H2();
-    var h3 = new H3();
-    asyncEnd();
-  });
-}
-
diff --git a/tests/language/deferred_constraints_old_syntax_lib.dart b/tests/language/deferred_constraints_old_syntax_lib.dart
deleted file mode 100644
index 0bf3cc9..0000000
--- a/tests/language/deferred_constraints_old_syntax_lib.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2014, 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.
-
-class C {
-  static int staticMethod() => 42;
-}
-
-class G<T> {}
-
-class Const {
-  const Const();
-  const Const.otherConstructor();
-  static const instance = const Const();
-}
-
-const constantInstance = const Const();
diff --git a/tests/language/deferred_constraints_type_annotation_old_syntax_test.dart b/tests/language/deferred_constraints_type_annotation_old_syntax_test.dart
deleted file mode 100644
index 7cc45ce..0000000
--- a/tests/language/deferred_constraints_type_annotation_old_syntax_test.dart
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) 2014, 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 "dart:async";
-import 'package:expect/expect.dart';
-import 'package:async_helper/async_helper.dart';
-
-@lazy import "deferred_constraints_old_syntax_lib.dart" as lib;
-import "deferred_constraints_old_syntax_lib.dart" as lib2; /// type_annotation_non_deferred: ok
-
-const lazy = const DeferredLibrary('lib');
-
-class F {}
-class G2<T> {}
-
-main() {
-  lib.C a = null; /// type_annotation_null: static type warning
-  Expect.throws(() { /// new_before_load: static type warning
-    lib.C a = new lib.C(); /// new_before_load: continued
-  }, (e) => e is Error); /// new_before_load: continued
-
-  // In this case we do not defer C.
-  lib2.C a1 = new lib2.C(); /// type_annotation_non_deferred: continued
-  asyncStart();
-  lazy.load().then((_) {
-    lib.C a2 = new lib.C(); /// type_annotation1: dynamic type error, static type warning
-    lib.G<F> a3 = new lib.G<F>(); /// type_annotation_generic1: dynamic type error, static type warning
-    G2<lib.C> a4 = new G2(); /// type_annotation_generic2: static type warning
-    G2<lib.C> a5 = new G2<lib.C>(); /// type_annotation_generic3: static type warning
-    lib.G<lib.C> a = new lib.G<lib.C>(); /// type_annotation_generic4: dynamic type error, static type warning
-    var a6 = new lib.C(); /// new: ok
-    var g1 = new lib.G<F>(); /// new_generic1: ok
-    // new G2<lib.C>() does not give a dynamic type error because a malformed
-    // type used as type-parameter is treated as dynamic.
-    var g2 = new G2<lib.C>(); /// new_generic2: static type warning
-    var g3 = new lib.G<lib.C>(); /// new_generic3: static type warning
-    var instance = lib.constantInstance;
-    Expect.throws(() { /// is_check: static type warning
-      bool a7 = instance is lib.Const; /// is_check: continued
-    }, (e) => e is TypeError); /// is_check: continued
-    Expect.throws(() { /// as_operation: static type warning
-      instance as lib.Const; /// as_operation: continued
-    }, (e) => e is TypeError); /// as_operation: continued
-    Expect.throws(() { /// catch_check: static type warning
-      try { throw instance; } on lib.Const {} /// catch_check: continued
-    }, (e) => e is TypeError); /// catch_check: continued
-    int i = lib.C.staticMethod(); /// static_method: ok
-    asyncEnd();
-  });
-}
-
-lib.C a9 = null; /// type_annotation_top_level: static type warning
diff --git a/tests/language/deferred_no_such_method_test.dart b/tests/language/deferred_no_such_method_test.dart
index 00791b5..9f1b232 100644
--- a/tests/language/deferred_no_such_method_test.dart
+++ b/tests/language/deferred_no_such_method_test.dart
@@ -2,17 +2,14 @@
 // 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 "dart:async";
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 
-@l import "deferred_no_such_method_lib.dart" as lib;
-
-const l = const DeferredLibrary('lib');
+import "deferred_no_such_method_lib.dart" deferred as lib;
 
 void main() {
   asyncStart();
-  l.load().then((_) {
+  lib.loadLibrary().then((_) {
     Expect.equals(42, new lib.C().nonExisting());
     asyncEnd();
   });
diff --git a/tests/language/issue18628_1_test.dart b/tests/language/issue18628_1_test.dart
new file mode 100644
index 0000000..9481efd
--- /dev/null
+++ b/tests/language/issue18628_1_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2014, 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.
+
+// This test checks for a regression found in Dart Editor: the
+// analyzer was treating [Type] as more specific than any type
+// variable (generic parameter).
+//
+// https://code.google.com/p/dart/issues/detail?id=18628
+
+class C<T> {
+  // This line is supposed to cause the warning; the other commented
+  // line just doesn't make sense without this line.
+  T t = int; /// 01: static type warning
+}
+
+main() {
+  C<Type> c = new C<Type>();
+  print(c.t); /// 01: static type warning
+}
diff --git a/tests/language/issue18628_2_test.dart b/tests/language/issue18628_2_test.dart
new file mode 100644
index 0000000..a6e1cfd
--- /dev/null
+++ b/tests/language/issue18628_2_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2014, 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.
+
+// This test checks for a regression found in Dart Editor: the
+// analyzer was treating [Type] as more specific than any type
+// variable (generic parameter).
+//
+// https://code.google.com/p/dart/issues/detail?id=18628
+
+class X<T extends Type> {}
+
+// This line is supposed to cause the warning; the other lines are
+// marked because they don't make sense when [Y] is not defined.
+class Y<U> extends X<U> {} /// 01: static type warning
+
+main() {
+  X<Type> x = new X<Type>(); /// 01: static type warning
+  Y<Type> y = new Y<Type>(); /// 01: static type warning
+}
diff --git a/tests/language/language.status b/tests/language/language.status
index c8d875a..854574c 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -20,16 +20,6 @@
 duplicate_export_negative_test: Fail # Issue 6134
 mixin_forwarding_constructor2_test: Fail # Issue 13641
 
-# These test use the old syntax, and will be phased out.
-deferred_constraints_constants_old_syntax_test/reference1: Fail, Ok
-deferred_constraints_constants_old_syntax_test/reference2: Fail, Ok
-deferred_constraints_constants_old_syntax_test/metadata1: Fail, Ok
-deferred_constraints_constants_old_syntax_test/metadata2: Fail, Ok
-deferred_constraints_constants_old_syntax_test/metadata3: Fail, Ok
-deferred_constraints_constants_old_syntax_test/default_argument1: Fail, Ok
-deferred_constraints_constants_old_syntax_test/default_argument2: Fail, Ok
-deferred_constraints_constants_old_syntax_test/constructor1: Fail, Ok
-deferred_constraints_constants_old_syntax_test/constructor2: Fail, Ok
 
 [ $runtime != vm ]
 # Async/await is currently only supported by the vm.
@@ -37,6 +27,7 @@
 async_control_structures_test: Skip
 await_test: Skip
 await_future_test: Skip
+await_exceptions_test: Skip
 await_backwards_compatibility_test/*: Skip
 
 [ $compiler == dart2dart]
@@ -45,6 +36,7 @@
 async_control_structures_test: Skip
 await_test: Skip
 await_future_test: Skip
+await_exceptions_test: Skip
 await_backwards_compatibility_test/*: Skip
 deferred_load_library_wrong_args_test/none: Fail # Issue 17523
 deferred_load_inval_code_test: Fail # Issue 17523
@@ -60,32 +52,12 @@
 override_inheritance_mixed_test/09: Fail # Issue 18124
 
 [ $compiler == none || $compiler == dart2dart]
-# These test use the old syntax, and will be phased out.
-deferred_constraints_type_annotation_old_syntax_test/as_operation: Fail, Ok
-deferred_constraints_type_annotation_old_syntax_test/is_check: Fail, Ok
-deferred_constraints_type_annotation_old_syntax_test/catch_check: Fail, Ok
-deferred_constraints_type_annotation_old_syntax_test/new_before_load: Fail, Ok
-
 # Non-contractive types are not supported in the vm.
 cyclic_type_test/02: Fail, OK
 cyclic_type_test/04: Fail, OK
 cyclic_type2_test: Fail, OK
 least_upper_bound_expansive_test/*: Fail, OK
 
-[ ($compiler == none || $compiler == dart2dart) && $checked ]
-# Issue 17521, 17523
-# Dart2dart does not support deferred loading.
-deferred_constraints_type_annotation_old_syntax_test/type_annotation1: Fail
-deferred_constraints_type_annotation_old_syntax_test/type_annotation_generic1: Fail
-deferred_constraints_type_annotation_old_syntax_test/type_annotation_generic4: Fail
-
-[ $compiler == none || $compiler == dartanalyzer || $compiler == dart2analyzer ]
-# Issue 17521, 17522
-deferred_no_prefix_old_syntax_test/01: Fail
-deferred_duplicate_prefix1_old_syntax_test/01: Fail
-deferred_duplicate_prefix2_old_syntax_test/01: Fail
-deferred_duplicate_prefix3_old_syntax_test/01: Fail
-
 [ $compiler == none && $runtime == vm ]
 class_keyword_test/02: MissingCompileTimeError # Issue 13627
 
diff --git a/tests/language/language_analyzer.status b/tests/language/language_analyzer.status
index b72e2af..608454d 100644
--- a/tests/language/language_analyzer.status
+++ b/tests/language/language_analyzer.status
@@ -435,9 +435,6 @@
 list_literal1_test/01: CompileTimeError # Issue 16391
 map_literal1_test/01: CompileTimeError # Issue 16391
 
-# Issue 18562- Old syntax (@lazy) for deferred libraries
-deferred_constraints_type_annotation_old_syntax_test/*: Pass, Fail
-deferred_constraints_constants_old_syntax_test/*: Pass, Fail
 
 # The following lines have been left in to quickly switch back to having deferred loading
 # off by default again.
diff --git a/tests/language/language_analyzer2.status b/tests/language/language_analyzer2.status
index 89067a9..a6cc8f7 100644
--- a/tests/language/language_analyzer2.status
+++ b/tests/language/language_analyzer2.status
@@ -435,10 +435,6 @@
 list_literal1_test/01: CompileTimeError # Issue 16391
 map_literal1_test/01: CompileTimeError # Issue 16391
 
-# Issue 18562- Old syntax (@lazy) for deferred libraries
-deferred_constraints_type_annotation_old_syntax_test/*: Pass, Fail
-deferred_constraints_constants_old_syntax_test/*: Pass, Fail
-
 # The following lines have been left in to quickly switch back to having deferred loading
 # off by default again.
 # Deferred loading support, tests marked as failing until support is enabled by default.
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 0410018..c0e9e1a 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -93,7 +93,7 @@
 mixin_mixin_bound2_test: RuntimeError # Issue 12605
 
 [ $compiler == dart2js ]
-malformed_test/none: Fail # Expect failure in lib/_internal/lib/preambles/d8.js
+malformed_test/none: Fail # Expect failure in lib/_internal/compiler/js_lib/preambles/d8.js
 generic_field_mixin4_test: Crash # Issue 18651
 generic_field_mixin5_test: Crash # Issue 18651
 
@@ -264,8 +264,6 @@
 deferred_constraints_type_annotation_test/*: Fail, Pass # http://dartbug.com/12635
 deferred_constraints_constants_test/*: Fail, Pass # http://dartbug.com/12635
 deferred_no_such_method_test*: Fail, Pass # http://dartbug.com/12635
-deferred_constraints_type_annotation_old_syntax_test/*: Fail, Pass # http://dartbug.com/12635
-deferred_constraints_constants_old_syntax_test/*: Fail, Pass # http://dartbug.com/12635
 deferred_shadow_load_library_test: Fail, Pass # Issue 17807
 deferred_closurize_load_library_test: Fail, Pass # Issue 17807
 
@@ -273,8 +271,7 @@
 deferred_constraints_type_annotation_test/*: Skip # Issue 16898
 deferred_constraints_constants_test/*: Skip # Issue 16898
 deferred_no_such_method_test*: Skip # Issue 16898
-deferred_constraints_type_annotation_old_syntax_test/*: Skip # Issue 16898
-deferred_constraints_constants_old_syntax_test/*: Skip # Issue 16898
 
 [ $compiler == dart2js && $runtime == d8 && $system == windows ]
 *deferred*: Skip # Issue 17458
+cha_deopt*: Skip # Issue 17458
\ No newline at end of file
diff --git a/tests/language/list_test.dart b/tests/language/list_test.dart
index d3afdf8..5a74e4f 100644
--- a/tests/language/list_test.dart
+++ b/tests/language/list_test.dart
@@ -5,6 +5,9 @@
 
 import "package:expect/expect.dart";
 
+class A { }
+class B { }
+
 class ListTest {
   static void TestIterator() {
     List<int> a = new List<int>(10);
@@ -42,6 +45,16 @@
     Expect.equals(sum, sum2);
   }
 
+  static void testSublistTypeArguments() {
+    final list1 = new List<A>(0).sublist(0);
+    Expect.isTrue(list1 is List<A>);
+    Expect.isTrue(list1 is! List<B>);
+
+    final list2 = new List<A>(0).toList(growable: false);
+    Expect.isTrue(list2 is List<A>);
+    Expect.isTrue(list2 is! List<B>);
+  }
+
   static void testMain() {
     int len = 10;
     List a = new List(len);
@@ -115,4 +128,5 @@
 
 main() {
   ListTest.testMain();
+  ListTest.testSublistTypeArguments();
 }
diff --git a/tests/language/regress_20840_test.dart b/tests/language/regress_20840_test.dart
new file mode 100644
index 0000000..117fa0e
--- /dev/null
+++ b/tests/language/regress_20840_test.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2014, 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.
+
+// Regression test for issue 20840.
+
+class SomeClass {
+  Object someField;
+
+  SomeClass() {
+    [1].forEach((o) => someMethod());
+    someField = new Object();
+  }
+
+  void someMethod() {
+    if (someField != null) {
+      throw "FAIL";
+    }
+  }
+}
+
+void main() {
+  new SomeClass();
+}
+
diff --git a/tests/lib/async/deferred/deferred_fail_to_load_test.dart b/tests/lib/async/deferred/deferred_fail_to_load_test.dart
deleted file mode 100644
index dbecad1..0000000
--- a/tests/lib/async/deferred/deferred_fail_to_load_test.dart
+++ /dev/null
@@ -1,24 +0,0 @@
-import 'dart:isolate';
-import 'dart:async';
-import 'dart:html';
-import 'package:unittest/unittest.dart';
-
-@a import 'deferred_in_isolate_lib.dart' as lib1;
-@b import 'deferred_library.dart' as lib2;
-
-const a = const DeferredLibrary("lib1");
-const b = const DeferredLibrary("NonExistingFile", uri: "wrong/wrong.js");
-
-main() {
-  test("Deferred loading failing to load", () {
-    a.load().then(expectAsync((_) {
-      expect(lib1.f(), equals("hi"));
-    }));
-    b.load().then((_) {
-      expect(false, true);
-      lib2.foo("");
-    }).catchError(expectAsync((_) {
-      expect(true, true);
-      }), test: (e) => e is DeferredLoadException);
-  });
-}
diff --git a/tests/lib/async/deferred/deferred_in_isolate_test.dart b/tests/lib/async/deferred/deferred_in_isolate_test.dart
index 2ced417..08cd0da 100644
--- a/tests/lib/async/deferred/deferred_in_isolate_test.dart
+++ b/tests/lib/async/deferred/deferred_in_isolate_test.dart
@@ -2,33 +2,20 @@
 import 'dart:async';
 import 'package:unittest/unittest.dart';
 
-@a import 'deferred_in_isolate_lib.dart' as lib1;
-@b import 'deferred_library.dart' as lib2;
+import 'deferred_in_isolate_lib.dart' deferred as lib;
 
-const a = const DeferredLibrary("lib1");
-const b = const DeferredLibrary("NonExistingFile", uri: "wrong/");
-
-loadDeferred(ports) {
-  a.load().then((_) {
-    ports[0].send(lib1.f());
+loadDeferred(port) {
+  lib.loadLibrary().then((_) {
+    port.send(lib.f());
   });
-  b.load().then((b) {
-    ports[1].send("No error");
-    lib2.foo(20);
-  }).catchError((_) {
-    ports[1].send("Error caught");
-  }, test: (e) => e is DeferredLoadException);
 }
 
 main() {
   test("Deferred loading in isolate", () {
-    List<ReceivePort> ports = new List.generate(2, (_) => new ReceivePort());
-    ports[0].first.then(expectAsync((msg) {
+    ReceivePort port = new ReceivePort();
+    port.first.then(expectAsync((msg) {
        expect(msg, equals("hi"));
     }));
-    ports[1].first.then(expectAsync((msg) {
-      expect(msg, equals("Error caught"));
-    }));
-    Isolate.spawn(loadDeferred, ports.map((p) => p.sendPort).toList());
+    Isolate.spawn(loadDeferred, port.sendPort);
   });
 }
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 5dc14a5..a847535 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -280,15 +280,19 @@
 mirrors/lazy_static_test: Skip # Times out. Issue 19127
 mirrors/mirrors_reader_test: Skip # Times out. Issue 19127
 
-[ $compiler == dart2dart || ($compiler == none && ($runtime == drt || $runtime == dartium || $runtime == vm || $runtime == ContentShellOnAndroid)) ]
-# Deferred loading is not implemented in the VM so the error-handling will never be triggered.
-async/deferred/deferred_fail_to_load_test: Fail
-# Deferred loading is not implemented in the VM so the error-handling will never be triggered.
-# Issue 13921: spawnFunction is not allowed on Dartium's DOM thread.
-async/deferred/deferred_in_isolate_test: Fail
+[ $compiler == dart2js && $runtime == safarimobilesim ]
+mirrors/mirrors_reader_test: Skip # Times out. Issue 20806.
 
-[ $compiler == dart2js && ($runtime == ie9 || $runtime == ie10 || $runtime == jsshell) ]
-async/schedule_microtask_test: Fail # Issue 9002
+[ $compiler == dart2dart ]
+# Deferred loading is not supported by dart2dart.
+async/deferred/deferred_in_isolate_test: Skip # Issue 17523
+
+[ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
+# Dart vm does not support spawn from a dom-enabled isolate.
+async/deferred/deferred_in_isolate_test: RuntimeError # Issue 16209
+
+[ $compiler == dart2js && $runtime == jsshell ]
+async/schedule_microtask_test: Fail  # Preamble file does not correctly implement scheduleImmediate.
 
 [ $compiler == dartanalyzer || $compiler == dart2analyzer ]
 mirrors/generic_f_bounded_mixin_application_test: StaticWarning # Test Issue
diff --git a/tests/lib/mirrors/metadata_const_map_test.dart b/tests/lib/mirrors/metadata_const_map_test.dart
new file mode 100644
index 0000000..4ed50dd
--- /dev/null
+++ b/tests/lib/mirrors/metadata_const_map_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2014, 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.
+
+// Regression test for issue 20776. Tests that the needed classes for the
+// constant map in the metadata are generated.
+
+library lib;
+
+@MirrorsUsed(targets: 'lib')
+import 'dart:mirrors';
+
+class C {
+  final x;
+  const C(this.x);
+}
+
+@C(const {'foo': 'bar' })
+class A {}
+
+
+main() {
+  print(reflectClass(A).metadata);
+}
\ No newline at end of file
diff --git a/tests/lib/mirrors/type_mirror_for_type_test.dart b/tests/lib/mirrors/type_mirror_for_type_test.dart
new file mode 100644
index 0000000..3c3d53a
--- /dev/null
+++ b/tests/lib/mirrors/type_mirror_for_type_test.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2014, 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.
+
+// Regression test for the dart2js implementation of runtime types.
+
+library test.type_mirror_for_type;
+
+import 'package:expect/expect.dart';
+
+@MirrorsUsed(targets: 'test.type_mirror_for_type')
+import 'dart:mirrors';
+
+class C<T> {}
+
+class X {
+  Type foo() {}
+}
+
+main() {
+  // Make sure that we need a type test against the runtime representation of
+  // [Type].
+  var a = (new DateTime.now().millisecondsSinceEpoch != 42)
+      ? new C<Type>() : new C<int>();
+  print (a is C<Type>);
+
+  var typeMirror = reflectType(X);
+  var declarationMirror = typeMirror.declarations[#foo];
+  // Test that the runtime type implementation does not confuse the runtime type
+  // representation of [Type] with an actual value of type [Type] when analyzing
+  // the return type of [foo].
+  Expect.equals(reflectType(Type), declarationMirror.returnType);
+}
diff --git a/tests/standalone/io/snapshot_fail_script.dart b/tests/standalone/io/snapshot_fail_script.dart
new file mode 100644
index 0000000..86099d8
--- /dev/null
+++ b/tests/standalone/io/snapshot_fail_script.dart
@@ -0,0 +1,6 @@
+// Copyright (c) 2014, 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.
+
+main() {
+  print("Oops!");
diff --git a/tests/standalone/io/snapshot_fail_test.dart b/tests/standalone/io/snapshot_fail_test.dart
new file mode 100644
index 0000000..9385b94
--- /dev/null
+++ b/tests/standalone/io/snapshot_fail_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2014, 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.
+
+// Dart test making sure we don't create an empty snapshot file when there
+// is an error in the script.
+
+import "package:expect/expect.dart";
+import "dart:async";
+import "dart:io";
+
+
+main() {
+  // Try to generate a snapshot.
+  File thisscript = new File.fromUri(Platform.script);
+  Directory dir = thisscript.parent;
+  String snapshot = "${dir.path}/dummy.snapshot";
+  String script = "${dir.path}/snapshot_fail_script.dart";
+  var pr = Process.runSync(Platform.executable,
+      ["--snapshot=$snapshot", script]);
+
+  // There should be no dummy.snapshot file created.
+  File dummy = new File(snapshot);
+  bool exists = dummy.existsSync();
+  if (exists) {
+    dummy.deleteSync();
+  }
+  Expect.isFalse(exists);
+}
diff --git a/tests/try/firefox-linemerges.applescript b/tests/try/firefox-linemerges.applescript
new file mode 100644
index 0000000..c62c9c6
--- /dev/null
+++ b/tests/try/firefox-linemerges.applescript
@@ -0,0 +1,98 @@
+-- Copyright (c) 2014, 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.
+
+-- This: 'tell application "Firefox" to activate' doesn't seem to bring
+-- application in focus if it's not already open.
+do shell script "open -a Firefox"
+
+delay 3.0
+
+tell application "System Events"
+	--- Open Incognito window to avoid effect of caching of pages.
+	keystroke "p" using {command down, shift down}
+	
+	delay 1.0
+	
+	keystroke "l" using command down
+	
+	keystroke "http://localhost:8080/"
+	-- Simulate Enter key.
+	key code 36
+	
+	delay 10.0
+	
+	-- Refresh the page to reload the scripts
+	keystroke "r" using command down
+	
+	keystroke "l" using command down
+	
+	delay 1.0
+	
+	-- Simulate Tab key to get to 'Pick an example' dropdown
+	repeat 8 times
+		key code 48
+	end repeat
+	
+	-- Simulate Down then Enter to select Hello, World
+	key code 125
+	key code 36
+	
+	delay 1.0
+	
+	keystroke "l" using command down
+	
+	delay 1.0
+	
+	-- Simulate Tab key to get to Code editor.
+	repeat 9 times
+		key code 48
+	end repeat
+	
+	-- Simulate sequence of Down keys to get to "print(greeting);" line
+	repeat 8 times
+		key code 125
+	end repeat
+	
+	-- Simulate Cmd-Right.
+	key code 124 using command down
+	
+	keystroke "print('c');"
+	
+	-- Simulate Left*11 to get to the beginning of "print('c');"
+	repeat 11 times
+		key code 123
+	end repeat
+	
+	-- Simulate Enter to split lines
+	key code 36
+	
+	-- Simulate Delete to join lines
+	key code 51
+	
+	-- Simulate Enter to split lines
+	key code 36
+	
+	-- Simulate Right*8 to get to right after the c in "print('c');"
+	repeat 8 times
+		key code 124
+	end repeat
+	
+	keystroke "d"
+	
+	delay 0.1
+	keystroke "a" using command down
+	delay 0.2
+	keystroke "c" using command down
+	
+	delay 1
+	set clipboardData to (the clipboard as text)
+	
+	if ("print('cd')" is not in (clipboardData as string)) then
+		error "print('cd')  is not in clipboardData: "
+	end if
+end tell
+
+tell application "Firefox" to quit
+
+display notification "Test passed" with title "Firefox test" sound name "Glass"
\ No newline at end of file
diff --git a/tests/try/firefox.applescript b/tests/try/firefox.applescript
index a7f674c..d5a4c51 100644
--- a/tests/try/firefox.applescript
+++ b/tests/try/firefox.applescript
@@ -51,7 +51,76 @@
         -- Simulate Delete
         key code 51
 
+        delay 0.1
+        keystroke "a" using command down
+        delay 0.2
+        keystroke "c" using command down
+
+        delay 0.2
+        set clipboardData to (the clipboard as text)
+
+        if ("main() {" is in (clipboardData as string)) then
+                error "main() { in clipboardData"
+        end if
+
+        if ("main() " is not in (clipboardData as string)) then
+                error "main() is not in clipboardData"
+        end if
+
+        keystroke "l" using command down
+        delay 0.2
+
+        keystroke "http://localhost:8080/"
+        -- Simulate Enter key.
+        key code 36
+
+        delay 5.0
+
+        keystroke "l" using command down
+        -- Simulate Tab key.
+        key code 48
+        key code 48
+        key code 48
+        key code 48
+
+        -- Simulate End key.
+        key code 119
+
+        -- Simulate Home key.
+        key code 115
+
+        -- Simulate Tab key.
+        key code 48
+
         -- Simulate Cmd-Down.
-        -- key code 125 using command down
+        key code 125 using command down
+
+        repeat 204 times
+                -- Simulate Delete
+               key code 51
+        end repeat
+
+        delay 5.0
+        repeat 64 times
+                -- Simulate Delete
+               key code 51
+        end repeat
+
+
+        delay 0.1
+        keystroke "a" using command down
+        delay 0.5
+        keystroke "c" using command down
+
+        delay 0.5
+        set clipboardData to (the clipboard as text)
+
+        if ("/" is not (clipboardData as string)) then
+                error "/ is not clipboardData"
+        end if
 
 end tell
+
+tell application "Firefox" to quit
+
+display notification "Test passed" with title "Firefox test" sound name "Glass"
diff --git a/tests/try/poi/poi_test.dart b/tests/try/poi/poi_test.dart
index e02fe1c..9e79274 100644
--- a/tests/try/poi/poi_test.dart
+++ b/tests/try/poi/poi_test.dart
@@ -35,7 +35,7 @@
       new PoiTest(Platform.script, position),
   ];
 
-  poi.enableDartMind = false;
+  poi.isDartMindEnabled = false;
 
   asyncTest(() => Future.forEach(tests, (PoiTest test) => test.run()));
 }
diff --git a/tests/try/web/end_to_end_test.dart b/tests/try/web/end_to_end_test.dart
index 22e4573..bffbd8e 100644
--- a/tests/try/web/end_to_end_test.dart
+++ b/tests/try/web/end_to_end_test.dart
@@ -69,6 +69,7 @@
 }
 
 void main() {
+  document.cookie = 'org-trydart-AutomatedTest=true;path=/';
   asyncStart();
   window.onMessage.listen((MessageEvent e) {
     switch (e.data) {
diff --git a/tools/VERSION b/tools/VERSION
index 0db6f0d..7167c96 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 1
 MINOR 7
 PATCH 0
-PRERELEASE 1
+PRERELEASE 2
 PRERELEASE_PATCH 0
diff --git a/tools/android_link.py b/tools/android_link.py
index 9f4ef7b..32aea6f 100755
--- a/tools/android_link.py
+++ b/tools/android_link.py
@@ -7,8 +7,8 @@
 """
 This script performs the final link step for Android NDK executables.
 Usage:
-./android_link {arm,ia32} {executable,library,shared_library} {host,target}
-               [linker args]
+./android_link {arm,arm64,ia32} {executable,library,shared_library}
+               {host,target} [linker args]
 """
 
 import os
@@ -48,8 +48,9 @@
   link_args = sys.argv[4:]
 
   # Check arguments.
-  if target_arch not in ['arm', 'ia32']:
-    raise Exception(sys.argv[0] + " first argument must be 'arm' or 'ia32'")
+  if target_arch not in ['arm', 'arm64', 'ia32']:
+    raise Exception(sys.argv[0] +
+        " first argument must be 'arm', 'arm64', or 'ia32'")
   if link_type not in ['executable', 'library', 'shared_library']:
     raise Exception(sys.argv[0] +
                     " second argument must be 'executable' or 'library'")
@@ -76,6 +77,8 @@
 
   # Set up the directory of the Android NDK cross-compiler toolchain.
   toolchain_arch = 'arm-linux-androideabi-4.6'
+  if target_arch == 'arm64':
+    toolchain_arch = 'aarch64-linux-android-4.9'
   if target_arch == 'ia32':
     toolchain_arch = 'x86-4.6'
   toolchain_dir = 'linux-x86_64'
@@ -86,12 +89,17 @@
 
   # Set up the path to the linker executable.
   android_linker = os.path.join(android_toolchain, 'arm-linux-androideabi-g++')
+  if target_arch == 'arm64':
+    android_linker = os.path.join(
+        android_toolchain, 'aarch64-linux-android-c++')
   if target_arch == 'ia32':
     android_linker = os.path.join(android_toolchain, 'i686-linux-android-g++')
 
   # Grab the path to libgcc.a, which we must explicitly add to the link,
   # by invoking the cross-compiler with the -print-libgcc-file-name flag.
   android_gcc = os.path.join(android_toolchain, 'arm-linux-androideabi-gcc')
+  if target_arch == 'arm64':
+    android_gcc = os.path.join(android_toolchain, 'aarch64-linux-android-gcc')
   if target_arch == 'ia32':
     android_gcc = os.path.join(android_toolchain, 'i686-linux-android-gcc')
   android_libgcc = subprocess.check_output(
@@ -101,6 +109,9 @@
   # Android specific system includes and libraries.
   android_ndk_sysroot = os.path.join(android_ndk_root,
       'platforms', 'android-14', 'arch-arm')
+  if target_arch == 'arm64':
+    android_ndk_sysroot = os.path.join(android_ndk_root,
+      'platforms', 'android-L', 'arch-arm64')
   if target_arch == 'ia32':
     android_ndk_sysroot = os.path.join(android_ndk_root,
         'platforms', 'android-14', 'arch-x86')
diff --git a/tools/bots/get_chromium_build.py b/tools/bots/get_chromium_build.py
index dbfb2d8..c5bbd33 100755
--- a/tools/bots/get_chromium_build.py
+++ b/tools/bots/get_chromium_build.py
@@ -14,7 +14,6 @@
   $ get_chromium_build.py -r <revision> -t <target>
 """
 
-import json
 import logging
 import optparse
 import os
@@ -50,7 +49,7 @@
     self._zipfiles = platform_data['zipfiles']
     self._folder = platform_data['folder']
     self._archive_path = platform_data['archive_path']
-    self._revision = options.revision
+    self._revision = int(options.revision)
     self._target_dir = options.target_dir
     self._download_dir = os.path.join(self._target_dir, 'downloads')
 
@@ -58,9 +57,12 @@
     return CHROMIUM_URL_FMT % (self._archive_path, revision, filename)
 
   def _FindBuildRevision(self, revision, filename):
-    git_hash = json.loads(revision)[platform.system()]
-    if self._DoesBuildExist(git_hash, filename):
-      return git_hash
+    MAX_REVISIONS_PER_BUILD = 100
+    for revision_guess in xrange(revision, revision + MAX_REVISIONS_PER_BUILD):
+      if self._DoesBuildExist(revision_guess, filename):
+        return revision_guess
+      else:
+        time.sleep(.1)
     return None
 
   def _DoesBuildExist(self, revision_guess, filename):
diff --git a/tools/build.py b/tools/build.py
index 5878dca..4ca6262 100755
--- a/tools/build.py
+++ b/tools/build.py
@@ -109,7 +109,7 @@
         print ("Cross-compilation to %s is not supported on host os %s."
                % (os_name, HOST_OS))
         return False
-      if not arch in ['ia32', 'arm', 'mips']:
+      if not arch in ['ia32', 'arm', 'arm64', 'mips']:
         print ("Cross-compilation to %s is not supported for architecture %s."
                % (os_name, arch))
         return False
@@ -129,6 +129,8 @@
     android_toolchain = GetAndroidToolchainDir(HOST_OS, arch)
     if arch == 'arm':
       return os.path.join(android_toolchain, 'arm-linux-androideabi')
+    if arch == 'arm64':
+      return os.path.join(android_toolchain, 'aarch64-linux-android')
     if arch == 'ia32':
       return os.path.join(android_toolchain, 'i686-linux-android')
 
@@ -180,7 +182,7 @@
   global THIRD_PARTY_ROOT
   if host_os not in ['linux']:
     raise Exception('Unsupported host os %s' % host_os)
-  if target_arch not in ['ia32', 'arm']:
+  if target_arch not in ['ia32', 'arm', 'arm64']:
     raise Exception('Unsupported target architecture %s' % target_arch)
 
   # Set up path to the Android NDK.
@@ -192,6 +194,8 @@
 
   # Set up the directory of the Android NDK cross-compiler toolchain.
   toolchain_arch = 'arm-linux-androideabi-4.6'
+  if target_arch == 'arm64':
+    toolchain_arch = 'aarch64-linux-android-4.9'
   if target_arch == 'ia32':
     toolchain_arch = 'x86-4.6'
   toolchain_dir = 'linux-x86_64'
diff --git a/tools/create_pub_snapshot.py b/tools/create_pub_snapshot.py
deleted file mode 100644
index 5ba0beb..0000000
--- a/tools/create_pub_snapshot.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2014 The Dart 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 script runs the async/await compiler on pub and then compiles the output
-of that to a snapshot.
-
-Usage: create_pub_snapshot.py <dart> <compiler> <package root> <output dir>
-
-When #104 is fixed, this script is no longer needed. Instead, replace the
-generate_pub_snapshot action in utils/pub.gyp with:
-
-    'action': [
-      '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)dart<(EXECUTABLE_SUFFIX)',
-      '--package-root=<(PRODUCT_DIR)/pub_packages/',
-      '--snapshot=<(SHARED_INTERMEDIATE_DIR)/pub.dart.snapshot',
-      '../../sdk/lib/_internal/pub/bin/pub.dart',
-    ]
-"""
-
-import os
-import subprocess
-import sys
-
-
-def Main():
-  if len(sys.argv) < 5:
-    raise Exception("""Not enough arguments.
-
-Usage: create_pub_snapshot.py <dart> <compiler> <package root> <output file>""")
-
-  dart_path = sys.argv[1]
-  compiler = sys.argv[2]
-  package_root = sys.argv[3]
-  output_dir = sys.argv[4]
-
-  # Run the async compiler.
-  status = subprocess.call([
-    dart_path,
-    '--package-root=' + package_root,
-    compiler,
-    output_dir,
-    '--silent'
-  ])
-  if status != 0: return status
-
-  # Generate the snapshot from the output of that.
-  status = subprocess.call([
-    dart_path,
-    '--package-root=' + package_root,
-    '--snapshot=' + os.path.join(output_dir, 'pub.dart.snapshot'),
-    os.path.join(output_dir, 'pub_async/bin/pub.dart')
-  ])
-  if status != 0: return status
-
-
-if __name__ == '__main__':
-  sys.exit(Main())
diff --git a/tools/create_sdk.py b/tools/create_sdk.py
index 90d8687..2a785fd 100755
--- a/tools/create_sdk.py
+++ b/tools/create_sdk.py
@@ -203,7 +203,6 @@
   for library in [join('_blink', 'dartium'),
                   join('_chrome', 'dart2js'), join('_chrome', 'dartium'),
                   join('_internal', 'compiler'),
-                  join('_internal', 'lib'),
                   'async', 'collection', 'convert', 'core',
                   'internal', 'io', 'isolate',
                   join('html', 'dart2js'), join('html', 'dartium'),
diff --git a/tools/dartium/deploy_aar.py b/tools/dartium/deploy_aar.py
index d2841f4..ac8205b 100755
--- a/tools/dartium/deploy_aar.py
+++ b/tools/dartium/deploy_aar.py
@@ -17,7 +17,9 @@
 RESOURCE_AAR_PATTERN = 'content_shell_apk/resource_aar/*.aar'
 CONTENT_SHELL_APK_AAR = 'content_shell_apk/content_shell_apk.aar'
 
-SRC_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+SRC_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)),
+                        "..", "..", "..")
+
 DART_DIR = os.path.join(SRC_PATH, 'dart')
 CHROME_VERSION_PATH = os.path.join(SRC_PATH, 'chrome', 'VERSION')
 
diff --git a/tools/dartium/fetch_reference_build.py b/tools/dartium/fetch_reference_build.py
deleted file mode 100755
index 077d49c..0000000
--- a/tools/dartium/fetch_reference_build.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Fetches an archived chromium build into
-  src/chrome/tools/test/reference_build unless
-  src/chrome/tools/test/reference_build/REQUESTED_REVISION is the same as
-  src/chrome/tools/test/reference_build/CURRENT_REVISION.
-  Must be run from the root of a Dartium or multivm checkout.
-
-Usage:
-  $ ./src/dart/tools/dartium/fetch_reference_build_revision.py
-"""
-
-import os
-import subprocess
-import sys
-
-def main(argv):
-  dirname = os.path.join('src', 'chrome', 'tools',
-                        'test', 'reference_build')
-  request = os.path.join(dirname, 'REQUESTED_REVISION')
-  found = os.path.join(dirname, 'CURRENT_REVISION')
-  if not os.path.exists(request):
-    return
-  with file(request, 'r') as f:
-    request_revision = f.read()
-
-  if os.path.exists(found):
-    with file(found, 'r') as f:
-      found_revision = f.read()
-    if found_revision == request_revision:
-      return
-
-  get_script = os.path.join('src', 'dart', 'tools',
-                            'dartium', 'get_chromium_build.py')
-  get_script = os.path.abspath(get_script)
-  exit_code = subprocess.call(['python', get_script,
-                               '-r', request_revision,
-                               '-t', dirname])
-  if exit_code == 0:
-    with file(found, 'w') as f:
-      f.write(request_revision)
-  return exit_code
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv))
diff --git a/tools/dartium/get_chromium_build.py b/tools/dartium/get_chromium_build.py
deleted file mode 100755
index edb8bac..0000000
--- a/tools/dartium/get_chromium_build.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Gets a Chromium archived build, and unpacks it
-   into a target directory.
-
-  Use -r option to specify the revison number
-  Use -t option to specify the directory to unzip the build into.
-
-Usage:
-  $ /path/to/get_chromium_build.py -r <revision> -t <target>
-"""
-
-import logging
-import optparse
-import os
-import platform
-import shutil
-import subprocess
-import sys
-import time
-import urllib
-import urllib2
-import zipfile
-
-# Example chromium build location:
-# gs://chromium-browser-snapshots/Linux_x64/228977/chrome-linux.zip
-CHROMIUM_URL_FMT = ('http://commondatastorage.googleapis.com/'
-                    'chromium-browser-snapshots/%s/%s/%s')
-
-class BuildUpdater(object):
-  _PLATFORM_PATHS_MAP = {
-      'Linux': { 'zipfiles': ['chrome-linux.zip'],
-                 'folder': 'chrome_linux',
-                 'archive_path': 'Linux_x64'},
-      'Darwin': {'zipfiles': ['chrome-mac.zip'],
-                 'folder': 'chrome_mac',
-                 'archive_path': 'Mac'},
-      'Windows': {'zipfiles': ['chrome-win32.zip',
-                               'chrome-win32-syms.zip'],
-                 'folder': 'chrome_win',
-                 'archive_path': 'Win'}}
-
-  def __init__(self, options):
-    platform_data = BuildUpdater._PLATFORM_PATHS_MAP[platform.system()]
-    self._zipfiles = platform_data['zipfiles']
-    self._folder = platform_data['folder']
-    self._archive_path = platform_data['archive_path']
-    self._revision = int(options.revision)
-    self._target_dir = options.target_dir
-    self._download_dir = os.path.join(self._target_dir, 'downloads')
-
-  def _GetBuildUrl(self, revision, filename):
-    return CHROMIUM_URL_FMT % (self._archive_path, revision, filename)
-
-  def _FindBuildRevision(self, revision, filename):
-    MAX_REVISIONS_PER_BUILD = 100
-    for revision_guess in xrange(revision, revision + MAX_REVISIONS_PER_BUILD):
-      if self._DoesBuildExist(revision_guess, filename):
-        return revision_guess
-      else:
-        time.sleep(.1)
-    return None
-
-  def _DoesBuildExist(self, revision_guess, filename):
-    url = self._GetBuildUrl(revision_guess, filename)
-
-    r = urllib2.Request(url)
-    r.get_method = lambda: 'HEAD'
-    try:
-      urllib2.urlopen(r)
-      return True
-    except urllib2.HTTPError, err:
-      if err.code == 404:
-        return False
-
-  def _DownloadBuild(self):
-    if not os.path.exists(self._download_dir):
-      os.makedirs(self._download_dir)
-    for zipfile in self._zipfiles:
-      build_revision = self._FindBuildRevision(self._revision, zipfile)
-      if not build_revision:
-        logging.critical('Failed to find %s build for r%s\n',
-                         self._archive_path,
-                         self._revision)
-        sys.exit(1)
-      url = self._GetBuildUrl(build_revision, zipfile)
-      logging.info('Downloading %s', url)
-      r = urllib2.urlopen(url)
-      with file(os.path.join(self._download_dir, zipfile), 'wb') as f:
-        f.write(r.read())
-
-  def _UnzipFile(self, dl_file, dest_dir):
-    if not zipfile.is_zipfile(dl_file):
-      return False
-    logging.info('Unzipping %s', dl_file)
-    with zipfile.ZipFile(dl_file, 'r') as z:
-      for content in z.namelist():
-        dest = os.path.join(dest_dir, content[content.find('/')+1:])
-        # Create dest parent dir if it does not exist.
-        if not os.path.isdir(os.path.dirname(dest)):
-          logging.info('Making %s', dest)
-          os.makedirs(os.path.dirname(dest))
-        # If dest is just a dir listing, do nothing.
-        if not os.path.basename(dest):
-          continue
-        with z.open(content) as unzipped_content:
-          logging.info('Extracting %s to %s (%s)', content, dest, dl_file)
-          with file(dest, 'wb') as dest_file:
-            dest_file.write(unzipped_content.read())
-          permissions = z.getinfo(content).external_attr >> 16
-          if permissions:
-            os.chmod(dest, permissions)
-    return True
-
-  def _ClearDir(self, dir):
-    """Clears all files in |dir| except for hidden files and folders."""
-    for root, dirs, files in os.walk(dir):
-      # Skip hidden files and folders (like .svn and .git).
-      files = [f for f in files if f[0] != '.']
-      dirs[:] = [d for d in dirs if d[0] != '.']
-
-      for f in files:
-        os.remove(os.path.join(root, f))
-
-  def _ExtractBuild(self):
-    dest_dir = os.path.join(self._target_dir, self._folder)
-    self._ClearDir(dest_dir)
-    for root, _, dl_files in os.walk(os.path.join(self._download_dir)):
-      for dl_file in dl_files:
-        dl_file = os.path.join(root, dl_file)
-        if not self._UnzipFile(dl_file, dest_dir):
-          logging.info('Copying %s to %s', dl_file, dest_dir)
-          shutil.copy(dl_file, dest_dir)
-    shutil.rmtree(self._download_dir)
-
-  def DownloadAndUpdateBuild(self):
-    self._DownloadBuild()
-    self._ExtractBuild()
-
-
-def ParseOptions(argv):
-  parser = optparse.OptionParser()
-  usage = 'usage: %prog <options>'
-  parser.set_usage(usage)
-  parser.add_option('-r', dest='revision',
-                    help='Revision to download.')
-  parser.add_option('-t', dest='target_dir',
-                    help='Target directory for unzipped Chromium.')
-
-  (options, _) = parser.parse_args(argv)
-  if not options.revision:
-    logging.critical('Must specify -r.\n')
-    sys.exit(1)
-  if not options.target_dir:
-    logging.critical('Must specify -t.\n')
-    sys.exit(1)
-  return options
-
-def main(argv):
-  logging.getLogger().setLevel(logging.DEBUG)
-  options = ParseOptions(argv)
-  b = BuildUpdater(options)
-  b.DownloadAndUpdateBuild()
-  logging.info('Successfully got archived Chromium build.')
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv))
diff --git a/tools/dartium/set_reference_build_revision.py b/tools/dartium/set_reference_build_revision.py
deleted file mode 100755
index f860210..0000000
--- a/tools/dartium/set_reference_build_revision.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Writes a revision number into src/chrome/tools/test/reference_build/REVISON
-   Must be run from the root of a Dartium or multivm checkout.
-
-Usage:
-  $ ./src/dart/tools/dartium/set_reference_build_revision.py <revision>
-"""
-
-import os
-import sys
-
-def main(argv):
-  revision = argv[1]
-  output = os.path.join('src', 'chrome', 'tools',
-                        'test', 'reference_build',
-                        'REQUESTED_REVISION')
-  dirname = os.path.dirname(output)
-  if dirname and not os.path.exists(dirname):
-    os.makedirs(dirname)
-  with file(output, 'w') as f:
-    f.write(revision)
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv))
diff --git a/tools/dom/idl/dart/dart.idl b/tools/dom/idl/dart/dart.idl
index a3a1c71..ee014c0 100644
--- a/tools/dom/idl/dart/dart.idl
+++ b/tools/dom/idl/dart/dart.idl
@@ -1,6 +1,6 @@
 // This file introduces / supplements and forces Dart declarations.
 
-[Supplemental,
+[DartSupplemental,
  Constructor]
 interface AudioContext {
   // TODO(ager): Auto-generate this custom method when the info about retaining
@@ -8,40 +8,38 @@
   [Custom] void decodeAudioData(ArrayBuffer audioData, AudioBufferCallback successCallback, AudioBufferCallback errorCallback);
 };
 
-[Supplemental]
+[DartSupplemental]
 interface WaveShaperNode {
   // TODO(ager): Auto-generate this custom method when the info about retaining
   // typed arrays is in the IDL.
   [Custom=Setter] attribute Float32Array curve;
 };
 
-[Supplemental]
+[DartSupplemental]
 interface AudioParam {
   // TODO(ager): Auto-generate this custom method when the info about retaining
   // typed arrays is in the IDL.
   [Custom] void setValueCurveAtTime(Float32Array values, double time, double duration);
 };
 
-[Supplemental]
+[DartSupplemental]
 interface Document {
-  [Suppressed] DOMObject getCSSCanvasContext(DOMString contextId, DOMString name, long width, long height);
-  CanvasRenderingContext getCSSCanvasContext(DOMString contextId, DOMString name, long width, long height);
   [Custom] Element createElement(DOMString tagName);
   [Custom] Element createElement(DOMString localName, DOMString typeExtension);
   [Custom] Element createElementNS(DOMString namespaceURI, DOMString qualifiedName);
   [Custom] Element createElementNS(DOMString namespaceURI, DOMString qualifiedName, DOMString typeExtension);
 };
 
-[Supplemental]
+[DartSupplemental]
 interface Node {
   [Custom] Node cloneNode([Default=Undefined] optional boolean deep);
-  [Suppressed] readonly attribute Element nextElementSibling;
-  [Suppressed] readonly attribute Element previousElementSibling;
+  [DartSuppress] readonly attribute Element nextElementSibling;
+  [DartSuppress] readonly attribute Element previousElementSibling;
 };
 
-[Supplemental]
+[DartSupplemental]
 interface ScriptProcessorNode {
-  [Suppressed] attribute EventListener onaudioprocess;
+  [DartSuppress] attribute EventListener onaudioprocess;
   [Custom] void _setEventListener(EventListener eventListener);
 };
 
@@ -59,13 +57,13 @@
 Element implements ElementTraversal;
 */
 
-[Supplemental]
+[DartSupplemental]
 interface Element {
   readonly attribute Element nextElementSibling;
   readonly attribute Element previousElementSibling;
 };
 
-[Supplemental]
+[DartSupplemental]
 interface CharacterData {
   readonly attribute Element nextElementSibling;
   readonly attribute Element previousElementSibling;
@@ -80,60 +78,46 @@
 // we are still generating _blink from the dart side idl files.
 // Once we are up and running generating dart:_blink in dartium
 // this should go away.
-[Supplemental]
+[DartSupplemental]
 interface URL {
-  [Suppressed] static DOMString createObjectURL(WebKitMediaSource source);
+  [DartSuppress] static DOMString createObjectURL(WebKitMediaSource source);
 };
 
-[Supplemental]
+[DartSupplemental]
 interface CanvasRenderingContext2D {
   [DartName=createImageDataFromImageData] ImageData createImageData(ImageData imagedata);
 
   // Removed in 1916.
-  [Suppressed] void drawSystemFocusRing(Element element);
+  [DartSuppress] void drawSystemFocusRing(Element element);
 
-  [Suppressed] void assert(boolean condition);
+  [DartSuppress] void assert(boolean condition);
 
-  [Suppressed] attribute boolean webkitImageSmoothingEnabled;
+  [DartSuppress] attribute boolean webkitImageSmoothingEnabled;
 
   // Removed in 1985.
-  [Suppressed] readonly attribute float webkitBackingStorePixelRatio; 
-};
-
-[Supplemental]
-interface ConsoleBase {
-  [Suppressed] void assert(boolean condition);
-  [CallWith=ScriptArguments|ScriptState] void assertCondition(boolean condition);
+  [DartSuppress] readonly attribute float webkitBackingStorePixelRatio;
 };
 
 interface HTMLCanvasElement {
-  [Suppressed] DOMString toDataURL([TreatNullAs=NullString, TreatUndefinedAs=NullString,Default=Undefined] DOMString type);
+  [DartSuppress] DOMString toDataURL([TreatNullAs=NullString, TreatUndefinedAs=NullString,Default=Undefined] DOMString type);
   [Custom] DOMString toDataURL([TreatNullAs=NullString, TreatUndefinedAs=NullString,Default=Undefined] DOMString type, optional float quality);
-
-  [Suppressed] any getContext(DOMString contextId);
-  [Custom] CanvasRenderingContext getContext(DOMString contextId, optional Dictionary attrs);
 };
 
-[Supplemental]
+[DartSupplemental]
 interface HTMLOptionsCollection {
-  [Suppressed] void add(optional HTMLOptionElement element, optional long before);
-  [Suppressed] void remove(HTMLOptionElement option); // Non standard.
+  [DartSuppress] void add(optional HTMLOptionElement element, optional long before);
+  [DartSuppress] void remove(HTMLOptionElement option); // Non standard.
 };
 
-[Supplemental]
+[DartSupplemental]
 interface HTMLSelectElement {
-  [Suppressed] void add([Default=Undefined] HTMLElement element, [Default=Undefined] HTMLElement before);
-  [Suppressed, Custom] void remove();
-  [Suppressed] void remove(long index);
-  [Suppressed] void remove(HTMLOptionElement option); // Non standard.
+  [DartSuppress] void add([Default=Undefined] HTMLElement element, [Default=Undefined] HTMLElement before);
+  [DartSuppress, Custom] void remove();
+  [DartSuppress] void remove(long index);
+  [DartSuppress] void remove(HTMLOptionElement option); // Non standard.
 };
 
-[Supplemental]
-interface ImageData {
-  [Custom] readonly attribute int[] data;
-};
-
-[Supplemental]
+[DartSupplemental]
 interface HTMLMediaElement {
   // Adding media events.
   attribute EventListener oncanplay;
@@ -159,200 +143,187 @@
   attribute EventListener onwaiting;
 };
 
-[Supplemental]
+[DartSupplemental]
 interface RTCPeerConnection {
-  [Suppressed, RaisesException] void addIceCandidate(RTCIceCandidate candidate);
+  [DartSuppress, RaisesException] void addIceCandidate(RTCIceCandidate candidate);
 };
 
-[Supplemental]
+[DartSupplemental]
 interface WebGLContextEvent {
-  [Suppressed] void initEvent(optional DOMString eventTypeArg,
+  [DartSuppress] void initEvent(optional DOMString eventTypeArg,
                               optional boolean canBubbleArg,
                               optional boolean cancelableArg,
                               optional DOMString statusMessageArg);
 };
 
-[Supplemental]
+[DartSupplemental]
 interface WebGLRenderingContext {
 
   //void         compressedTexImage2D(unsigned long target, long level, unsigned long internalformat, unsigned long width, unsigned long height, long border, unsigned long imageSize, const void* data);
   //void         compressedTexSubImage2D(unsigned long target, long level, long xoffset, long yoffset, unsigned long width, unsigned long height, unsigned long format, unsigned long imageSize, const void* data);
 
   [Custom] any getBufferParameter(unsigned long target, unsigned long pname);
-  [Suppressed, StrictTypeChecking, Custom] void getBufferParameter();
+  [DartSuppress, DartStrictTypeChecking, Custom] void getBufferParameter();
 
   [Custom] any getFramebufferAttachmentParameter(unsigned long target, unsigned long attachment, unsigned long pname);
-  [Suppressed, StrictTypeChecking, Custom] void getFramebufferAttachmentParameter();
+  [DartSuppress, DartStrictTypeChecking, Custom] void getFramebufferAttachmentParameter();
 
   [Custom] any getParameter(unsigned long pname);
-  [Suppressed, StrictTypeChecking, Custom] void getParameter();
+  [DartSuppress, DartStrictTypeChecking, Custom] void getParameter();
 
   [Custom] any getProgramParameter(WebGLProgram program, unsigned long pname);
-  [Suppressed, StrictTypeChecking, Custom] void getProgramParameter();
+  [DartSuppress, DartStrictTypeChecking, Custom] void getProgramParameter();
 
   [Custom] any getRenderbufferParameter(unsigned long target, unsigned long pname);
-  [Suppressed, StrictTypeChecking, Custom] void getRenderbufferParameter();
+  [DartSuppress, DartStrictTypeChecking, Custom] void getRenderbufferParameter();
 
   [Custom] any getShaderParameter(WebGLShader shader, unsigned long pname);
-  [Suppressed, StrictTypeChecking, Custom] void getShaderParameter();
+  [DartSuppress, DartStrictTypeChecking, Custom] void getShaderParameter();
 
   // TBD
   // void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
 
   [Custom] any getExtension(DOMString name);
-  [Suppressed, StrictTypeChecking, Custom] void getExtension(DOMString name);
-  [Suppressed, StrictTypeChecking, Custom] void getSupportedExtensions();
+  [DartSuppress, DartStrictTypeChecking, Custom] void getExtension(DOMString name);
+  [DartSuppress, DartStrictTypeChecking, Custom] void getSupportedExtensions();
 
   [Custom] any getTexParameter(unsigned long target, unsigned long pname);
-  [Suppressed, StrictTypeChecking, Custom] void getTexParameter();
+  [DartSuppress, DartStrictTypeChecking, Custom] void getTexParameter();
 
   [Custom] any getUniform(WebGLProgram program, WebGLUniformLocation location);
-  [Suppressed, StrictTypeChecking, Custom] void getUniform();
+  [DartSuppress, DartStrictTypeChecking, Custom] void getUniform();
 
   [Custom] any getVertexAttrib(unsigned long index, unsigned long pname);
-  [Suppressed, StrictTypeChecking, Custom] void getVertexAttrib();
+  [DartSuppress, DartStrictTypeChecking, Custom] void getVertexAttrib();
 };
 
 // TODO(vsm): Define new names for these (see b/4436830).
-[Supplemental]
+[DartSupplemental]
 interface IDBCursor {
-  [DartName=next, CallWith=ExecutionContext, ImplementedAs=continueFunction, RaisesException] void continue([ForceOptional] optional any key);
+  [DartName=next, CallWith=ExecutionContext, ImplementedAs=continueFunction, RaisesException] void continue([DartForceOptional] optional any key);
 };
-[Supplemental]
+[DartSupplemental]
 interface IDBIndex {
-    [CallWith=ExecutionContext, RaisesException] IDBRequest openCursor([Default=Undefined] optional any key, [ForceOptional] optional DOMString direction);
+    [CallWith=ExecutionContext, RaisesException] IDBRequest openCursor([Default=Undefined] optional any key, [DartForceOptional] optional DOMString direction);
 
-    [CallWith=ExecutionContext, RaisesException] IDBRequest openKeyCursor([Default=Undefined] optional any key, [ForceOptional] optional DOMString direction);
+    [CallWith=ExecutionContext, RaisesException] IDBRequest openKeyCursor([Default=Undefined] optional any key, [DartForceOptional] optional DOMString direction);
 
     [CallWith=ExecutionContext, RaisesException] IDBRequest count([Default=Undefined] optional any key);
 };
 
-[Supplemental]
+[DartSupplemental]
 interface HTMLMediaElement {
-  DOMString canPlayType([Default=Undefined] optional DOMString type, [Default=Undefined, TreatNullAs=NullString, TreatUndefinedAs=NullString, ForceOptional] optional DOMString keySystem);
+  DOMString canPlayType([Default=Undefined] optional DOMString type, [Default=Undefined, TreatNullAs=NullString, TreatUndefinedAs=NullString, DartForceOptional] optional DOMString keySystem);
 };
 
-[Supplemental]
+[DartSupplemental]
 interface IDBKeyRange {
   [DartName=only_] static IDBKeyRange only(any value);
-  [DartName=lowerBound_] static IDBKeyRange lowerBound(any bound, [ForceOptional] optional boolean open);
-  [DartName=upperBound_] static IDBKeyRange upperBound(any bound, [ForceOptional] optional boolean open);
-  [DartName=bound_] static IDBKeyRange bound(any lower, any upper, [ForceOptional] optional boolean lowerOpen, [ForceOptional] optional boolean upperOpen);
+  [DartName=lowerBound_] static IDBKeyRange lowerBound(any bound, [DartForceOptional] optional boolean open);
+  [DartName=upperBound_] static IDBKeyRange upperBound(any bound, [DartForceOptional] optional boolean open);
+  [DartName=bound_] static IDBKeyRange bound(any lower, any upper, [DartForceOptional] optional boolean lowerOpen, [DartForceOptional] optional boolean upperOpen);
 };
 
-[Supplemental]
+[DartSupplemental]
 interface IDBObjectStore {
-    [CallWith=ScriptState, RaisesException] IDBRequest put(any value, [ForceOptional] optional any key);
-    [CallWith=ScriptState, RaisesException] IDBRequest add(any value, [ForceOptional] optional any key);
-    # [CallWith=ExecutionContext, ImplementedAs=deleteFunction, RaisesException] IDBRequest delete(any key);
-    [CallWith=ExecutionContext, RaisesException] IDBRequest openCursor(any key, [ForceOptional] optional DOMString direction);
+    [CallWith=ScriptState, RaisesException] IDBRequest put(any value, [DartForceOptional] optional any key);
+    [CallWith=ScriptState, RaisesException] IDBRequest add(any value, [DartForceOptional] optional any key);
+    // [CallWith=ExecutionContext, ImplementedAs=deleteFunction, RaisesException] IDBRequest delete(any key);
+    [CallWith=ExecutionContext, RaisesException] IDBRequest openCursor(any key, [DartForceOptional] optional DOMString direction);
     [CallWith=ExecutionContext, RaisesException] IDBRequest count(any key);
 };
 
 interface EntrySync {
   // Native implementation is declared to return EntrySync.
-  [Suppressed] DirectoryEntrySync getParent();
+  [DartSuppress] DirectoryEntrySync getParent();
   EntrySync getParent();
 };
 
 
-[Supplemental,
+[DartSupplemental,
   CustomConstructor,
   Constructor(Array blobParts, optional DOMString type, optional DOMString endings)
   ]
 interface Blob {
 };
 
-[Supplemental,
+[DartSupplemental,
   Constructor(float x, float y)
 ]
 interface WebKitPoint {
 };
 
-[Supplemental, Callback] // Add missing Callback attribute.
+[DartSupplemental, Callback] // Add missing Callback attribute.
 interface VoidCallback {
 };
 
 interface SVGNumber {
-  [StrictTypeChecking, Custom] attribute float value;
+  [DartStrictTypeChecking, Custom] attribute float value;
 };
 
 // Keep it in to generate Dart code, C++ implementation is filterd out in generator.
-[
-  Callback
-] interface MutationCallback {
+[Callback]
+interface MutationCallback {
   [Custom] boolean handleEvent(MutationRecordArray mutations, MutationObserver observer);
 };
 
-[Supplemental,
+[DartSupplemental,
   CustomConstructor,
   // Provide missing constructor signature.
   Constructor(MutationCallback callback)]
 interface MutationObserver {
 };
 
-[Supplemental,
+[DartSupplemental,
   CustomConstructor,
   // Provide missing constructor signature.
   Constructor(optional HTMLFormElement form)]
 interface FormData {
-  [Suppressed] void append(DOMString name, DOMString value, DOMString filename);
+  [DartSuppress] void append(DOMString name, DOMString value, DOMString filename);
   [Custom] void append(DOMString name, DOMString value);
   [Custom] void append(DOMString name, Blob value, optional DOMString filename);
 };
 
-[Supplemental]
-interface SQLResultSetRowList {
-  // Change the return type to Dictionary so that rows are exposed in the Dart
-  // API as a Maps, with the appropriate conversion in JavaScript.
-  [Suppressed] object item(unsigned long index);
-  [Custom] Dictionary item(unsigned long index);
-};
-
-[Supplemental, Constructor]
+[DartSupplemental, Constructor]
 interface XMLHttpRequest {
    [Custom] void send();
    [Custom] void send(ArrayBuffer data); // FIXME: this should be eventually deprecated.
    [Custom] void send(ArrayBufferView data);
    [Custom] void send(Blob data);
    [Custom] void send(Document data);
-   [Custom] void send([StrictTypeChecking] DOMString data);
+   [Custom] void send([DartStrictTypeChecking] DOMString data);
    [Custom] void send(FormData data);
 };
 
-[Suppressed]
+[DartSuppress]
 interface AbstractView {};
 
-
 interface InjectedScriptHost {
     [Custom] void inspect(any objectId, any hints);
-    [Suppressed, Custom] any inspectedObject(long num);
-    [Suppressed, Custom] any internalConstructorName(any obj);
-    [Suppressed, Custom] boolean isHTMLAllCollection(any obj);
-    [Suppressed, Custom] DOMString type(any obj);
-    [Suppressed, Custom] any functionDetails(any obj);
-    [Suppressed, Custom] any[] getInternalProperties(any obj);
-    [Suppressed, Custom] EventListener[] getEventListeners(EventTarget target);
-    [Suppressed, Custom] any evaluate(DOMString text);
-    [Suppressed, Custom] void debugFunction(any fn);
-    [Suppressed, Custom] void undebugFunction(any fn);
-    [Suppressed, Custom] void monitorFunction(any fn);
-    [Suppressed, Custom] void unmonitorFunction(any fn);
+    [DartSuppress, Custom] any inspectedObject(long num);
+    [DartSuppress, Custom] any internalConstructorName(any obj);
+    [DartSuppress, Custom] boolean isHTMLAllCollection(any obj);
+    [DartSuppress, Custom] DOMString type(any obj);
+    [DartSuppress, Custom] any functionDetails(any obj);
+    [DartSuppress, Custom] any[] getInternalProperties(any obj);
+    [DartSuppress, Custom] EventListener[] getEventListeners(EventTarget target);
+    [DartSuppress, Custom] any evaluate(DOMString text);
+    [DartSuppress, Custom] void debugFunction(any fn);
+    [DartSuppress, Custom] void undebugFunction(any fn);
+    [DartSuppress, Custom] void monitorFunction(any fn);
+    [DartSuppress, Custom] void unmonitorFunction(any fn);
 
     // Only declarative scope (local, with and catch) is accepted. Returns undefined.
-    [Suppressed, Custom] any setFunctionVariableValue(any functionObject, long scopeIndex, DOMString variableName, any newValue);
+    [DartSuppress, Custom] any setFunctionVariableValue(any functionObject, long scopeIndex, DOMString variableName, any newValue);
 };
 
 
-[Suppressed]
-interface InspectorFrontendHost {};
 
-
-[Suppressed]
+[DartSuppress]
 interface JavaScriptCallFrame {};
 
 
-[Supplemental]
+[DartSupplemental]
 interface Location {
   [Custom=Setter] attribute DOMString href;
 
@@ -371,123 +342,125 @@
 };
 
 // TODO(jacobr): reenable these new Blink features.
-[Suppressed]
+[DartSuppress]
 interface ImageBitmapFactories {};
 
 // See https://chromiumcodereview.appspot.com/15901002 for the V8 implementation of
 // TextEncoder/TextDecoder
-[Suppressed]
+[DartSuppress]
 interface TextEncoder {};
 
-[Suppressed]
+[DartSuppress]
 interface TextDecoder {};
 
-[Supplemental]
-interface Window : EventTarget {};
+[DartSupplemental]
+interface Window : EventTarget {
+  [DartSuppress] void alert();
+  [DartSuppress] void alert(DOMString message);
+  void alert(optional DOMString message);
 
-[Suppressed]
+  [DartSuppress] void scrollBy(long x, long y);
+  [DartSuppress] void scrollBy(long x, long y, Dictionary scrollOptions);
+  [RaisesException] void scrollBy(long x, long y, optional Dictionary scrollOptions);
+
+  [DartSuppress] void scrollTo(long x, long y);
+  [DartSuppress] void scrollTo(long x, long y, Dictionary scrollOptions);
+  [RaisesException] void scrollTo(long x, long y, optional Dictionary scrollOptions);
+
+  [DartSuppress] void scroll(long x, long y);
+  [DartSuppress] void scroll(long x, long y, Dictionary scrollOptions);
+  [RaisesException] void scroll(long x, long y, optional Dictionary scrollOptions);
+};
+
+[DartSuppress]
 interface Promise {};
 
-[Supplemental]
-interface Screen {
-    [Suppressed]
-    boolean lockOrientation(sequence<DOMString> orientations);
+[DartSupplemental] interface CanvasRenderingContext2D {
+    [DartSuppress] void webkitPutImageDataHD(ImageData? imagedata, float dx, float dy);
+    [DartSuppress] void webkitPutImageDataHD(ImageData? imagedata, float dx, float dy, float dirtyX, float dirtyY, float dirtyWidth, float dirtyHeight);
+    [DartSuppress] ImageData webkitGetImageDataHD(float sx, float sy, float sw, float sh);
 };
 
-[Supplemental] interface CanvasRenderingContext2D {
-    [Suppressed] void webkitPutImageDataHD(ImageData? imagedata, float dx, float dy);
-    [Suppressed] void webkitPutImageDataHD(ImageData? imagedata, float dx, float dy, float dirtyX, float dirtyY, float dirtyWidth, float dirtyHeight);
-    [Suppressed] ImageData webkitGetImageDataHD(float sx, float sy, float sw, float sh);
-    [Suppressed] attribute Path currentPath;
-};
-
-[Supplemental] interface AudioParam {
-    [Suppressed] void setTargetValueAtTime(float target, double time, double timeConstant);
+[DartSupplemental] interface AudioParam {
+    [DartSuppress] void setTargetValueAtTime(float target, double time, double timeConstant);
     void setTargetAtTime(float target, double time, double timeConstant);
 };
 
-[Supplemental] interface AudioContext {
+[DartSupplemental] interface AudioContext {
     // Number of AudioBufferSourceNodes that are currently playing.
-    [Suppressed] readonly attribute unsigned long activeSourceCount;
-    [Suppressed] ScriptProcessorNode createJavaScriptNode(unsigned long bufferSize, optional unsigned long numberOfInputChannels, optional unsigned long numberOfOutputChannels);
-    [Suppressed] AudioBuffer createBuffer(ArrayBuffer? buffer, boolean mixToMono);
-    [Suppressed] GainNode createGainNode();
-    [Suppressed] DelayNode createDelayNode(optional double maxDelayTime);
+    [DartSuppress] readonly attribute unsigned long activeSourceCount;
+    [DartSuppress] ScriptProcessorNode createJavaScriptNode(unsigned long bufferSize, optional unsigned long numberOfInputChannels, optional unsigned long numberOfOutputChannels);
+    [DartSuppress] AudioBuffer createBuffer(ArrayBuffer? buffer, boolean mixToMono);
+    [DartSuppress] GainNode createGainNode();
+    [DartSuppress] DelayNode createDelayNode(optional double maxDelayTime);
 };
 
-[Supplemental] interface HTMLInputElement {
-    [Suppressed] attribute boolean webkitSpeech;
-    [Suppressed] attribute boolean webkitGrammar;
+[DartSupplemental] interface HTMLInputElement {
+    [DartSuppress] attribute boolean webkitSpeech;
+    [DartSuppress] attribute boolean webkitGrammar;
 };
 
-[Supplemental] interface ShadowRoot {
-    [Suppressed] attribute boolean applyAuthorStyles;
+[DartSupplemental] interface ShadowRoot {
+    [DartSuppress] attribute boolean applyAuthorStyles;
 };
 
-[Supplemental] interface BeforeLoadEvent {
-    [Suppressed] readonly attribute DOMString url;
+[DartSupplemental] interface BeforeLoadEvent {
+    [DartSuppress] readonly attribute DOMString url;
 };
 
-[Supplemental] interface OscillatorNode {
-    [Suppressed] readonly attribute unsigned short playbackState;
+[DartSupplemental] interface OscillatorNode {
+    [DartSuppress] readonly attribute unsigned short playbackState;
 };
 
-[Supplemental] interface SVGElementInstance {
-    [Suppressed] readonly attribute SVGElementInstanceList childNodes;
+[DartSupplemental] interface SVGElementInstance {
+    [DartSuppress] readonly attribute SVGElementInstanceList childNodes;
 };
 
-[Supplemental] interface TimedItem {
-    [Suppressed] readonly attribute Timing specified;
-};
-
-[Supplemental] interface DOMImplementation {
-    [Suppressed]
+[DartSupplemental] interface DOMImplementation {
+    [DartSuppress]
     CSSStyleSheet createCSSStyleSheet([Default=Undefined] optional DOMString title,
                                       [Default=Undefined] optional DOMString media);
 };
 
-[Supplemental] interface SVGSVGElement {
-    [Suppressed] attribute DOMString contentStyleType;
-    [Suppressed] attribute DOMString contentScriptType;
+[DartSupplemental] interface SVGSVGElement {
+    [DartSuppress] attribute DOMString contentStyleType;
+    [DartSuppress] attribute DOMString contentScriptType;
 };
 
-[Supplemental] interface WorkerGlobalScope {
-    [Suppressed] readonly attribute NotificationCenter webkitNotifications;
+[DartSupplemental] interface WorkerGlobalScope {
+    [DartSuppress] readonly attribute NotificationCenter webkitNotifications;
 };
 
-[Supplemental] interface AudioBuffer {
-    [Suppressed] attribute float gain;
+[DartSupplemental] interface AudioBuffer {
+    [DartSuppress] attribute float gain;
 };
 
-[Supplemental] interface WorkerCrypto {
-    [Suppressed] ArrayBufferView getRandomValues(ArrayBufferView array);
+[DartSupplemental] interface WorkerCrypto {
+    [DartSuppress] ArrayBufferView getRandomValues(ArrayBufferView array);
 };
 
-[Supplemental] interface HTMLFormElement {
+[DartSupplemental] interface HTMLFormElement {
     void requestAutocomplete([Default=Undefined] optional Dictionary details);
-    [Suppressed] void requestAutocomplete();
+    [DartSuppress] void requestAutocomplete();
 };
 
-[Supplemental] interface AudioBufferSourceNode {
-    [Suppressed] readonly attribute unsigned short playbackState;
+[DartSupplemental] interface AudioBufferSourceNode {
+    [DartSuppress] readonly attribute unsigned short playbackState;
 };
 
-[Supplemental] interface SpeechInputResult {
-    [Suppressed] readonly attribute DOMString utterance;
-    [Suppressed] readonly attribute float confidence;
+[DartSupplemental] interface AudioBufferSourceNode : AudioSourceNode {
+    [DartSuppress] readonly attribute AudioParam gain;
 };
 
-[Supplemental] interface SpeechInputEvent : Event {
-    [Suppressed] readonly attribute SpeechInputResultList results;
+// Remove backward compatible operation requestPointerLock exist now too.
+[DartSupplemental] interface Element : Node {
+    [DartSuppress] void webkitRequestPointerLock();
 };
 
-[Supplemental] interface AudioBufferSourceNode : AudioSourceNode {
-    [Suppressed] readonly attribute AudioParam gain;
-};
-
-[Supplemental]
-interface CSSStyleDeclaration {
-    [Supplemental] boolean __propertyQuery__(DOMString name);
+[DartSupplemental] interface CSSStyleDeclaration {
+    // Expose __propertyQuery__  a getter with a special operation in the IDL
+    // when used with Custom=PropertyQuery will emit __propertyQuery__.
+    [Custom=PropertyQuery] getter boolean (DOMString name);
 };
 
 Element implements GlobalEventHandlers;
diff --git a/tools/dom/new_scripts/code_generator_dart.py b/tools/dom/new_scripts/code_generator_dart.py
new file mode 100644
index 0000000..d9d86a9
--- /dev/null
+++ b/tools/dom/new_scripts/code_generator_dart.py
@@ -0,0 +1,317 @@
+# Copyright (C) 2013 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Generate Blink C++ bindings (.h and .cpp files) for use by Dart:HTML.
+
+If run itself, caches Jinja templates (and creates dummy file for build,
+since cache filenames are unpredictable and opaque).
+
+This module is *not* concurrency-safe without care: bytecode caching creates
+a race condition on cache *write* (crashes if one process tries to read a
+partially-written cache). However, if you pre-cache the templates (by running
+the module itself), then you can parallelize compiling individual files, since
+cache *reading* is safe.
+
+Input: An object of class IdlDefinitions, containing an IDL interface X
+Output: DartX.h and DartX.cpp
+
+Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
+"""
+
+import os
+import cPickle as pickle
+import re
+import sys
+
+
+# Path handling for libraries and templates
+# Paths have to be normalized because Jinja uses the exact template path to
+# determine the hash used in the cache filename, and we need a pre-caching step
+# to be concurrency-safe. Use absolute path because __file__ is absolute if
+# module is imported, and relative if executed directly.
+# If paths differ between pre-caching and individual file compilation, the cache
+# is regenerated, which causes a race condition and breaks concurrent build,
+# since some compile processes will try to read the partially written cache.
+module_path, module_filename = os.path.split(os.path.realpath(__file__))
+third_party_dir = os.path.normpath(os.path.join(
+    module_path, os.pardir, os.pardir, os.pardir, os.pardir, os.pardir))
+templates_dir = os.path.normpath(os.path.join(module_path, 'templates'))
+
+# Make sure extension is .py, not .pyc or .pyo, so doesn't depend on caching
+module_pyname = os.path.splitext(module_filename)[0] + '.py'
+
+# jinja2 is in chromium's third_party directory.
+# Insert at 1 so at front to override system libraries, and
+# after path[0] == invoking script dir
+sys.path.insert(1, third_party_dir)
+
+# Add the base compiler scripts to the path here as in compiler.py
+dart_script_path = os.path.dirname(os.path.abspath(__file__))
+script_path = os.path.join(os.path.dirname(os.path.dirname(dart_script_path)),
+                          'scripts')
+sys.path.extend([script_path])
+
+import jinja2
+
+import idl_types
+from idl_types import IdlType
+from utilities import write_pickle_file
+from v8_globals import includes, interfaces
+from dart_utilities import DartUtilities
+
+
+# TODO(jacobr): remove this hacked together list.
+INTERFACES_WITHOUT_RESOLVERS = frozenset([
+    'TypeConversions',
+    'GCObservation',
+    'InternalProfilers',
+    'InternalRuntimeFlags',
+    'InternalSettings',
+    'InternalSettingsGenerated',
+    'Internals',
+    'LayerRect',
+    'LayerRectList',
+    'MallocStatistics',
+    'TypeConversions'])
+
+class CodeGeneratorDart(object):
+    def __init__(self, interfaces_info, cache_dir):
+        interfaces_info = interfaces_info or {}
+        self.interfaces_info = interfaces_info
+        self.jinja_env = initialize_jinja_env(cache_dir)
+
+        # Set global type info
+        idl_types.set_ancestors(dict(
+            (interface_name, interface_info['ancestors'])
+            for interface_name, interface_info in interfaces_info.iteritems()
+            if interface_info['ancestors']))
+        IdlType.set_callback_interfaces(set(
+            interface_name
+            for interface_name, interface_info in interfaces_info.iteritems()
+            if interface_info['is_callback_interface']))
+        IdlType.set_implemented_as_interfaces(dict(
+            (interface_name, interface_info['implemented_as'])
+            for interface_name, interface_info in interfaces_info.iteritems()
+            if interface_info['implemented_as']))
+        IdlType.set_garbage_collected_types(set(
+            interface_name
+            for interface_name, interface_info in interfaces_info.iteritems()
+            if 'GarbageCollected' in interface_info['inherited_extended_attributes']))
+        IdlType.set_will_be_garbage_collected_types(set(
+            interface_name
+            for interface_name, interface_info in interfaces_info.iteritems()
+            if 'WillBeGarbageCollected' in interface_info['inherited_extended_attributes']))
+
+    def generate_code(self, definitions, interface_name, idl_pickle_filename,
+                      only_if_changed):
+        """Returns .h/.cpp code as (header_text, cpp_text)."""
+        try:
+            interface = definitions.interfaces[interface_name]
+        except KeyError:
+            raise Exception('%s not in IDL definitions' % interface_name)
+
+        # Store other interfaces for introspection
+        interfaces.update(definitions.interfaces)
+
+        # Set local type info
+        IdlType.set_callback_functions(definitions.callback_functions.keys())
+        IdlType.set_enums((enum.name, enum.values)
+                          for enum in definitions.enumerations.values())
+
+        # Select appropriate Jinja template and contents function
+        if interface.is_callback:
+            header_template_filename = 'callback_interface_h.template'
+            cpp_template_filename = 'callback_interface_cpp.template'
+            generate_contents = dart_callback_interface.generate_callback_interface
+        else:
+            header_template_filename = 'interface_h.template'
+            cpp_template_filename = 'interface_cpp.template'
+            generate_contents = dart_interface.generate_interface
+        header_template = self.jinja_env.get_template(header_template_filename)
+        cpp_template = self.jinja_env.get_template(cpp_template_filename)
+
+        # Generate contents (input parameters for Jinja)
+        template_contents = generate_contents(interface)
+        template_contents['code_generator'] = module_pyname
+
+        # Add includes for interface itself and any dependencies
+        interface_info = self.interfaces_info[interface_name]
+        template_contents['header_includes'].add(interface_info['include_path'])
+        template_contents['header_includes'] = sorted(template_contents['header_includes'])
+        includes.update(interface_info.get('dependencies_include_paths', []))
+
+        # Remove includes that are not needed for Dart and trigger fatal
+        # compile warnings if included. These IDL files need to be
+        # imported by Dart to generate the list of events but the
+        # associated header files do not contain any code used by Dart.
+        includes.discard('core/dom/GlobalEventHandlers.h')
+        includes.discard('core/frame/DOMWindowEventHandlers.h')
+
+        template_contents['cpp_includes'] = sorted(includes)
+
+        idl_world = {'interface': None, 'callback': None}
+
+        # Load the pickle file for this IDL.
+        if os.path.isfile(idl_pickle_filename):
+            with open(idl_pickle_filename) as idl_pickle_file:
+                idl_global_data = pickle.load(idl_pickle_file)
+                idl_pickle_file.close()
+            idl_world['interface'] = idl_global_data['interface']
+            idl_world['callback'] = idl_global_data['callback']
+
+        if 'interface_name' in template_contents:
+            interface_global = {'name': template_contents['interface_name'],
+                                'parent_interface': template_contents['parent_interface'],
+                                'is_active_dom_object': template_contents['is_active_dom_object'],
+                                'is_event_target': template_contents['is_event_target'],
+                                'has_resolver': template_contents['interface_name'] not in INTERFACES_WITHOUT_RESOLVERS,
+                                'is_node': template_contents['is_node'],
+                                'conditional_string': template_contents['conditional_string'],
+                               }
+            idl_world['interface'] = interface_global
+        else:
+            callback_global = {'name': template_contents['cpp_class']}
+            idl_world['callback'] = callback_global
+
+        write_pickle_file(idl_pickle_filename,  idl_world, only_if_changed)
+
+        # Render Jinja templates
+        header_text = header_template.render(template_contents)
+        cpp_text = cpp_template.render(template_contents)
+        return header_text, cpp_text
+
+    # Generates global file for all interfaces.
+    def generate_globals(self, output_directory):
+        header_template_filename = 'global_h.template'
+        cpp_template_filename = 'global_cpp.template'
+
+        # Delete the global pickle file we'll rebuild from each pickle generated
+        # for each IDL file '(%s_globals.pickle) % interface_name'.
+        global_pickle_filename = os.path.join(output_directory, 'global.pickle')
+        if os.path.isfile(global_pickle_filename):
+            os.remove(global_pickle_filename)
+
+        # List of all interfaces and callbacks for global code generation.
+        world = {'interfaces': [], 'callbacks': []}
+
+        # Load all pickled data for each interface.
+        listing = os.listdir(output_directory)
+        for filename in listing:
+            if filename.endswith('_globals.pickle'):
+                idl_filename = os.path.join(output_directory, filename)
+                with open(idl_filename) as idl_pickle_file:
+                    idl_world = pickle.load(idl_pickle_file)
+                    if 'interface' in idl_world:
+                        # FIXME: Why are some of these None?
+                        if idl_world['interface']:
+                            world['interfaces'].append(idl_world['interface'])
+                    if 'callbacks' in idl_world:
+                        # FIXME: Why are some of these None?
+                        if idl_world['callbacks']:
+                            world['callbacks'].append(idl_world['callback'])
+                    idl_pickle_file.close()
+
+        world['interfaces'] = sorted(world['interfaces'], key=lambda (x): x['name'])
+        world['callbacks'] = sorted(world['callbacks'], key=lambda (x): x['name'])
+
+        template_contents = world
+        template_contents['code_generator'] = module_pyname
+
+        header_template = self.jinja_env.get_template(header_template_filename)
+        header_text = header_template.render(template_contents)
+
+        cpp_template = self.jinja_env.get_template(cpp_template_filename)
+        cpp_text = cpp_template.render(template_contents)
+        return header_text, cpp_text
+
+
+def initialize_jinja_env(cache_dir):
+    jinja_env = jinja2.Environment(
+        loader=jinja2.FileSystemLoader(templates_dir),
+        # Bytecode cache is not concurrency-safe unless pre-cached:
+        # if pre-cached this is read-only, but writing creates a race condition.
+        bytecode_cache=jinja2.FileSystemBytecodeCache(cache_dir),
+        keep_trailing_newline=True,  # newline-terminate generated files
+        lstrip_blocks=True,  # so can indent control flow tags
+        trim_blocks=True)
+    jinja_env.filters.update({
+        'blink_capitalize': DartUtilities.capitalize,
+        'conditional': conditional_if_endif,
+        'runtime_enabled': runtime_enabled_if,
+        })
+    return jinja_env
+
+
+# [Conditional]
+def conditional_if_endif(code, conditional_string):
+    # Jinja2 filter to generate if/endif directive blocks
+    if not conditional_string:
+        return code
+    return ('#if %s\n' % conditional_string +
+            code +
+            '#endif // %s\n' % conditional_string)
+
+
+# [RuntimeEnabled]
+def runtime_enabled_if(code, runtime_enabled_function_name):
+    if not runtime_enabled_function_name:
+        return code
+    # Indent if statement to level of original code
+    indent = re.match(' *', code).group(0)
+    return ('%sif (%s())\n' % (indent, runtime_enabled_function_name) +
+            '    %s' % code)
+
+
+################################################################################
+
+def main(argv):
+    # If file itself executed, cache templates
+    try:
+        cache_dir = argv[1]
+        dummy_filename = argv[2]
+    except IndexError as err:
+        print 'Usage: %s OUTPUT_DIR DUMMY_FILENAME' % argv[0]
+        return 1
+
+    # Cache templates
+    jinja_env = initialize_jinja_env(cache_dir)
+    template_filenames = [filename for filename in os.listdir(templates_dir)
+                          # Skip .svn, directories, etc.
+                          if filename.endswith(('.cpp', '.h', '.template'))]
+    for template_filename in template_filenames:
+        jinja_env.get_template(template_filename)
+
+    # Create a dummy file as output for the build system,
+    # since filenames of individual cache files are unpredictable and opaque
+    # (they are hashes of the template path, which varies based on environment)
+    with open(dummy_filename, 'w') as dummy_file:
+        pass  # |open| creates or touches the file
+
+
+if __name__ == '__main__':
+    sys.exit(main(sys.argv))
diff --git a/tools/dom/new_scripts/compiler.py b/tools/dom/new_scripts/compiler.py
new file mode 100755
index 0000000..2a6d09a
--- /dev/null
+++ b/tools/dom/new_scripts/compiler.py
@@ -0,0 +1,115 @@
+#!/usr/bin/python
+# Copyright (C) 2014 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Compile an .idl file to Dart bindings (.h and .cpp files).
+
+Design doc: ??????
+"""
+
+from optparse import OptionParser
+import os
+import sys
+
+dart_script_path = os.path.dirname(os.path.abspath(__file__))
+script_path = os.path.join(os.path.dirname(os.path.dirname(dart_script_path)),
+                          'scripts')
+sys.path.extend([script_path])
+
+from dart_compiler import IdlCompiler
+from code_generator_dart import CodeGeneratorDart
+
+
+def parse_options():
+    parser = OptionParser()
+    parser.add_option('--output-directory')
+    parser.add_option('--interfaces-info-file')
+    parser.add_option('--write-file-only-if-changed', type='int', default='1')
+    parser.add_option('--generate-global', type='int')
+
+    # ensure output comes last, so command line easy to parse via regexes
+    parser.disable_interspersed_args()
+
+    options, args = parser.parse_args()
+    if options.output_directory is None:
+        parser.error('Must specify output directory using --output-directory.')
+    options.write_file_only_if_changed = bool(options.write_file_only_if_changed)
+    options.generate_global = bool(options.generate_global)
+    if len(args) != 1:
+        # parser.error('Must specify exactly 1 input file as argument, but %d given.' % len(args))
+        return options, None
+    idl_filename = os.path.realpath(args[0])
+    return options, idl_filename
+
+
+def idl_filename_to_interface_name(idl_filename):
+    basename = os.path.basename(idl_filename)
+    interface_name, _ = os.path.splitext(basename)
+    return interface_name
+
+
+class IdlCompilerDart(IdlCompiler):
+    def __init__(self, *args, **kwargs):
+        IdlCompiler.__init__(self, *args, **kwargs)
+
+        interfaces_info = self.interfaces_info
+        self.output_directory = self.output_directory
+
+        self.code_generator = CodeGeneratorDart(interfaces_info, self.output_directory)
+
+    def compile_file(self, idl_filename):
+        interface_name = idl_filename_to_interface_name(idl_filename)
+        header_filename = os.path.join(self.output_directory,
+                                       'Dart%s.h' % interface_name)
+        cpp_filename = os.path.join(self.output_directory,
+                                    'Dart%s.cpp' % interface_name)
+        return self.compile_and_write(idl_filename, (header_filename, cpp_filename))
+
+    def generate_global(self):
+        global_header_filename = os.path.join(self.output_directory, 'DartWebkitClassIds.h')
+        global_cpp_filename = os.path.join(self.output_directory, 'DartWebkitClassIds.cpp')
+        self.generate_global_and_write((global_header_filename, global_cpp_filename))
+
+
+def main():
+    options, idl_filename = parse_options()
+
+    if options.generate_global:
+        idl_compiler = IdlCompilerDart(options.output_directory,
+                                       interfaces_info_filename=options.interfaces_info_file,
+                                       only_if_changed=options.write_file_only_if_changed)
+        idl_compiler.generate_global()
+    else:
+        idl_compiler = IdlCompilerDart(options.output_directory,
+                                       interfaces_info_filename=options.interfaces_info_file,
+                                       only_if_changed=options.write_file_only_if_changed)
+        idl_compiler.compile_file(idl_filename)
+
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/tools/dom/new_scripts/dart_compiler.py b/tools/dom/new_scripts/dart_compiler.py
new file mode 100755
index 0000000..b766fb3
--- /dev/null
+++ b/tools/dom/new_scripts/dart_compiler.py
@@ -0,0 +1,115 @@
+#!/usr/bin/python
+# Copyright (C) 2013 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Compile an .idl file to Blink C++ bindings (.h and .cpp files) for Dart:HTML.
+
+Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
+"""
+
+import abc
+from optparse import OptionParser
+import os
+import cPickle as pickle
+
+from idl_reader import IdlReader
+from utilities import write_file
+
+
+# TODO(terry): Temporary whitelist of IDL files to skip code generating. e.g.,
+#              adding 'Animation.idl' to this list will skip that IDL file.
+SKIP_IDL_FILES = ['']
+
+
+def parse_options():
+    parser = OptionParser()
+    parser.add_option('--idl-attributes-file',
+                      help="location of bindings/IDLExtendedAttributes.txt")
+    parser.add_option('--output-directory')
+    parser.add_option('--interfaces-info-file')
+    parser.add_option('--write-file-only-if-changed', type='int')
+    # ensure output comes last, so command line easy to parse via regexes
+    parser.disable_interspersed_args()
+
+    options, args = parser.parse_args()
+    if options.output_directory is None:
+        parser.error('Must specify output directory using --output-directory.')
+    options.write_file_only_if_changed = bool(options.write_file_only_if_changed)
+    if len(args) != 1:
+        parser.error('Must specify exactly 1 input file as argument, but %d given.' % len(args))
+    idl_filename = os.path.realpath(args[0])
+    return options, idl_filename
+
+
+def idl_filename_to_interface_name(idl_filename):
+    basename = os.path.basename(idl_filename)
+    interface_name, _ = os.path.splitext(basename)
+    return interface_name
+
+
+class IdlCompiler(object):
+    """Abstract Base Class for IDL compilers.
+
+    In concrete classes:
+    * self.code_generator must be set, implementing generate_code()
+      (returning a list of output code), and
+    * compile_file() must be implemented (handling output filenames).
+    """
+    __metaclass__ = abc.ABCMeta
+
+    def __init__(self, output_directory, code_generator=None,
+                 interfaces_info=None, interfaces_info_filename='',
+                 only_if_changed=False):
+        """
+        Args:
+            interfaces_info:
+                interfaces_info dict
+                (avoids auxiliary file in run-bindings-tests)
+            interfaces_info_file: filename of pickled interfaces_info
+        """
+        self.code_generator = code_generator
+        if interfaces_info_filename:
+            with open(interfaces_info_filename) as interfaces_info_file:
+                interfaces_info = pickle.load(interfaces_info_file)
+        self.interfaces_info = interfaces_info
+
+        self.only_if_changed = only_if_changed
+        self.output_directory = output_directory
+        self.reader = IdlReader(interfaces_info, output_directory, True)
+
+    def compile_and_write(self, idl_filename, output_filenames):
+        # Only compile the IDL file and return the AST.
+        definitions = self.reader.read_idl_definitions(idl_filename)
+        return definitions
+
+    def generate_global_and_write(self, output_filenames):
+        pass
+
+    @abc.abstractmethod
+    def compile_file(self, idl_filename):
+        pass
diff --git a/tools/dom/new_scripts/dart_utilities.py b/tools/dom/new_scripts/dart_utilities.py
new file mode 100644
index 0000000..f67437b
--- /dev/null
+++ b/tools/dom/new_scripts/dart_utilities.py
@@ -0,0 +1,164 @@
+# Copyright (C) 2013 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Functions shared by various parts of the code generator.
+
+Extends IdlType and IdlUnion type with |enum_validation_expression| property.
+
+Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
+"""
+
+
+################################################################################
+# Utility function exposed for Dart CodeGenerator. Only 6 methods are special
+# to Dart the rest delegate to the v8_utilities functions.
+################################################################################
+
+
+import v8_types  # Required
+import v8_utilities
+
+
+def _scoped_name(interface, definition, base_name):
+    # partial interfaces are implemented as separate classes, with their members
+    # implemented as static member functions
+    partial_interface_implemented_as = definition.extended_attributes.get('PartialInterfaceImplementedAs')
+    if partial_interface_implemented_as:
+        return '%s::%s' % (partial_interface_implemented_as, base_name)
+    if (definition.is_static or
+        definition.name in ('Constructor', 'NamedConstructor')):
+        return '%s::%s' % (v8_utilities.cpp_name(interface), base_name)
+    return 'receiver->%s' % base_name
+
+
+def _bool_to_cpp(tf):
+    return "true" if tf else "false"
+
+
+# [ActivityLogging]
+def _activity_logging_world_list(member, access_type=None):
+    """Returns a set of world suffixes for which a definition member has activity logging, for specified access type.
+
+    access_type can be 'Getter' or 'Setter' if only checking getting or setting.
+    """
+    if 'ActivityLogging' not in member.extended_attributes:
+        return set()
+    activity_logging = member.extended_attributes['ActivityLogging']
+    # [ActivityLogging=For*] (no prefix, starts with the worlds suffix) means
+    # "log for all use (method)/access (attribute)", otherwise check that value
+    # agrees with specified access_type (Getter/Setter).
+    has_logging = (activity_logging.startswith('For') or
+                   (access_type and activity_logging.startswith(access_type)))
+    if not has_logging:
+        return set()
+# TODO(terry): Remove Me?
+#    includes.add('bindings/v8/V8DOMActivityLogger.h')
+    if activity_logging.endswith('ForIsolatedWorlds'):
+        return set([''])
+    return set(['', 'ForMainWorld'])  # endswith('ForAllWorlds')
+
+
+# [CallWith]
+_CALL_WITH_ARGUMENTS = {
+    'ScriptState': '&state',
+    'ExecutionContext': 'context',
+    'ScriptArguments': 'scriptArguments.release()',
+    'ActiveWindow': 'DartUtilities::callingDomWindowForCurrentIsolate()',
+    'FirstWindow': 'DartUtilities::enteredDomWindowForCurrentIsolate()',
+}
+
+# List because key order matters, as we want arguments in deterministic order
+_CALL_WITH_VALUES = [
+    'ScriptState',
+    'ExecutionContext',
+    'ScriptArguments',
+    'ActiveWindow',
+    'FirstWindow',
+]
+
+
+def _call_with_arguments(member, call_with_values=None):
+    # Optional parameter so setter can override with [SetterCallWith]
+    call_with_values = call_with_values or member.extended_attributes.get('CallWith')
+    if not call_with_values:
+        return []
+    return [_CALL_WITH_ARGUMENTS[value]
+            for value in _CALL_WITH_VALUES
+            if v8_utilities.extended_attribute_value_contains(call_with_values, value)]
+
+
+# [DeprecateAs]
+def _deprecate_as(member):
+    extended_attributes = member.extended_attributes
+    if 'DeprecateAs' not in extended_attributes:
+        return None
+# TODO(terry): Remove me?
+#    includes.add('core/frame/UseCounter.h')
+    return extended_attributes['DeprecateAs']
+
+
+# [MeasureAs]
+def _measure_as(definition_or_member):
+    extended_attributes = definition_or_member.extended_attributes
+    if 'MeasureAs' not in extended_attributes:
+        return None
+# TODO(terry): Remove Me?
+#    includes.add('core/frame/UseCounter.h')
+    return extended_attributes['MeasureAs']
+
+
+################################################################################
+# This is the monkey patched methods most delegate to v8_utilities but some are
+# overridden in dart_utilities.
+################################################################################
+
+
+class dart_utilities_monkey():
+    def __init__(self):
+        self.base_class_name = 'dart_utilities'
+
+DartUtilities = dart_utilities_monkey()
+
+DartUtilities.activity_logging_world_list = _activity_logging_world_list
+DartUtilities.bool_to_cpp = _bool_to_cpp
+DartUtilities.call_with_arguments = _call_with_arguments
+DartUtilities.capitalize = v8_utilities.capitalize
+DartUtilities.conditional_string = v8_utilities.conditional_string
+DartUtilities.cpp_name = v8_utilities.cpp_name
+DartUtilities.deprecate_as = _deprecate_as
+DartUtilities.extended_attribute_value_contains = v8_utilities.extended_attribute_value_contains
+DartUtilities.gc_type = v8_utilities.gc_type
+DartUtilities.has_extended_attribute = v8_utilities.has_extended_attribute
+DartUtilities.has_extended_attribute_value = v8_utilities.has_extended_attribute_value
+DartUtilities.measure_as = _measure_as
+DartUtilities.per_context_enabled_function_name = v8_utilities.per_context_enabled_function_name
+DartUtilities.runtime_enabled_function_name = v8_utilities.runtime_enabled_function_name
+DartUtilities.scoped_name = _scoped_name
+DartUtilities.strip_suffix = v8_utilities.strip_suffix
+DartUtilities.uncapitalize = v8_utilities.uncapitalize
+DartUtilities.v8_class_name = v8_utilities.v8_class_name
diff --git a/tools/dom/scripts/__init__.py b/tools/dom/scripts/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tools/dom/scripts/__init__.py
diff --git a/tools/dom/scripts/css_code_generator.py b/tools/dom/scripts/css_code_generator.py
index e7843b5..1e588de 100644
--- a/tools/dom/scripts/css_code_generator.py
+++ b/tools/dom/scripts/css_code_generator.py
@@ -112,7 +112,7 @@
 $if DARTIUM
 
   bool _hasProperty(String propertyName) =>
-      _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback(this, propertyName);
+      _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_DOMString(this, propertyName);
 $endif
 
   @DomName('CSSStyleDeclaration.setProperty')
diff --git a/tools/dom/scripts/dartdomgenerator.py b/tools/dom/scripts/dartdomgenerator.py
index 89b5fe2..53b2132 100755
--- a/tools/dom/scripts/dartdomgenerator.py
+++ b/tools/dom/scripts/dartdomgenerator.py
@@ -6,6 +6,16 @@
 """This is the entry point to create Dart APIs from the IDL database."""
 
 import css_code_generator
+import os
+import sys
+
+# Setup all paths to find our PYTHON code
+dart_dir = os.path.abspath(os.path.normpath(os.path.join(os.path.dirname(__file__), '..', '..', '..')))
+sys.path.insert(1, os.path.join(dart_dir, 'tools/dom/new_scripts'))
+sys.path.insert(1, os.path.join(dart_dir, 'third_party/WebCore/bindings/scripts'))
+sys.path.insert(1, os.path.join(dart_dir, 'third_party'))
+sys.path.insert(1, os.path.join(dart_dir, 'tools/dom/scripts'))
+
 import dartgenerator
 import database
 import fremontcutbuilder
@@ -13,10 +23,9 @@
 import monitored
 import multiemitter
 import optparse
-import os
 import shutil
 import subprocess
-import sys
+import time
 from dartmetadata import DartMetadata
 from generator import TypeRegistry
 from htmleventgenerator import HtmlEventGenerator
@@ -29,8 +38,10 @@
 from templateloader import TemplateLoader
 
 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..'))
+
 import utils
 
+
 _logger = logging.getLogger('dartdomgenerator')
 
 class GeneratorOptions(object):
@@ -51,12 +62,17 @@
   return common_database
 
 def GenerateFromDatabase(common_database, dart2js_output_dir,
-                         dartium_output_dir, update_dom_metadata=False):
+                         dartium_output_dir, update_dom_metadata=False,
+                         logging_level=logging.WARNING):
+  start_time = time.time()
+
   current_dir = os.path.dirname(__file__)
   auxiliary_dir = os.path.join(current_dir, '..', 'src')
   template_dir = os.path.join(current_dir, '..', 'templates')
 
-  generator = dartgenerator.DartGenerator()
+  _logger.setLevel(logging_level)
+
+  generator = dartgenerator.DartGenerator(logging_level)
   generator.LoadAuxiliary(auxiliary_dir)
 
   generator.FilterMembersWithUnidentifiedTypes(common_database)
@@ -70,13 +86,16 @@
   generator.FixEventTargets(webkit_database)
   generator.AddMissingArguments(webkit_database)
 
-  emitters = multiemitter.MultiEmitter()
+  emitters = multiemitter.MultiEmitter(logging_level)
   metadata = DartMetadata(
       os.path.join(current_dir, '..', 'dom.json'),
-      os.path.join(current_dir, '..', 'docs', 'docs.json'))
+      os.path.join(current_dir, '..', 'docs', 'docs.json'),
+      logging_level)
   renamer = HtmlRenamer(webkit_database, metadata)
   type_registry = TypeRegistry(webkit_database, renamer)
 
+  print 'GenerateFromDatabase %s seconds' % round((time.time() - start_time), 2)
+
   def RunGenerator(dart_libraries, dart_output_dir,
                    template_loader, backend_factory):
     options = GeneratorOptions(
@@ -106,14 +125,19 @@
         template_loader, webkit_database, type_registry, renamer,
         metadata)
     backend_factory = lambda interface:\
-        Dart2JSBackend(interface, backend_options)
+        Dart2JSBackend(interface, backend_options, logging_level)
 
     dart_output_dir = os.path.join(dart2js_output_dir, 'dart')
     dart_libraries = DartLibraries(
         HTML_LIBRARY_NAMES, template_loader, 'dart2js', dart2js_output_dir)
 
-    RunGenerator(dart_libraries, dart_output_dir,
-        template_loader, backend_factory)
+    print '\nGenerating dart2js:\n'
+    start_time = time.time()
+
+    RunGenerator(dart_libraries, dart_output_dir, template_loader,
+                 backend_factory)
+
+    print 'Generated dart2js in %s seconds' % round(time.time() - start_time, 2)
 
   if dartium_output_dir:
     template_paths = ['html/dartium', 'html/impl', 'html/interface', '']
@@ -135,8 +159,14 @@
                        cpp_library_emitter, backend_options)
     dart_libraries = DartLibraries(
         HTML_LIBRARY_NAMES, template_loader, 'dartium', dartium_output_dir)
+
+    print '\nGenerating dartium:\n'
+    start_time = time.time()
+
     RunGenerator(dart_libraries, dart_output_dir,
                  template_loader, backend_factory)
+    print 'Generated dartium in %s seconds' % round(time.time() - start_time, 2)
+
     cpp_library_emitter.EmitDerivedSources(
         template_loader.Load('cpp_derived_sources.template'),
         dartium_output_dir)
@@ -149,7 +179,7 @@
   if update_dom_metadata:
     metadata.Flush()
 
-  monitored.FinishMonitoring(dart2js_output_dir)
+  monitored.FinishMonitoring(dart2js_output_dir, _logger)
 
 def GenerateSingleFile(library_path, output_dir, generated_output_dir=None):
   library_dir = os.path.dirname(library_path)
@@ -192,6 +222,16 @@
                     action='store_true',
                     default=False,
                     help='''Update the metadata list of DOM APIs''')
+  parser.add_option('--blink-parser', dest='blink_parser',
+                    action='store_true', default=False,
+                    help='Use New Blink IDL parser.')
+  parser.add_option('--verbose', dest='logging_level',
+                    action='store_false', default=logging.WARNING,
+                    help='Output all informational messages')
+  parser.add_option('--logging', dest='logging', type='int',
+                    action='store', default=logging.NOTSET,
+                    help='Level of logging 20 is Info, 30 is Warnings, 40 is Errors')
+
   (options, args) = parser.parse_args()
 
   current_dir = os.path.dirname(__file__)
@@ -210,24 +250,40 @@
   if 'htmldartium' in systems:
     dartium_output_dir = os.path.join(output_dir, 'dartium')
 
+  logging_level = options.logging_level \
+    if options.logging == logging.NOTSET else options.logging
+
+  start_time = time.time()
+
   UpdateCssProperties()
+
   if options.rebuild:
     # Parse the IDL and create the database.
-    database = fremontcutbuilder.main(options.parallel)
+    database = fremontcutbuilder.main(options.parallel, options.blink_parser,
+                                      logging_level=logging_level)
   else:
+    # TODO(terry): Should be able to remove this...
     # Load the previously generated database.
-    database = LoadDatabase(database_dir, options.use_database_cache)
+    if not options.blink_parser:
+      database = LoadDatabase(database_dir, options.use_database_cache)
+
   GenerateFromDatabase(database, dart2js_output_dir, dartium_output_dir,
-      options.update_dom_metadata)
+      options.update_dom_metadata, logging_level)
+
+  file_generation_start_time = time.time()
 
   if 'htmldart2js' in systems:
     _logger.info('Generating dart2js single files.')
+
     for library_name in HTML_LIBRARY_NAMES:
       GenerateSingleFile(
           os.path.join(dart2js_output_dir, '%s_dart2js.dart' % library_name),
           os.path.join('..', '..', '..', 'sdk', 'lib', library_name, 'dart2js'))
+
   if 'htmldartium' in systems:
     _logger.info('Generating dartium single files.')
+    file_generation_start_time = time.time()
+
     for library_name in HTML_LIBRARY_NAMES:
       GenerateSingleFile(
           os.path.join(dartium_output_dir, '%s_dartium.dart' % library_name),
@@ -236,5 +292,11 @@
         os.path.join(dartium_output_dir, '_blink_dartium.dart'),
         os.path.join('..', '..', '..', 'sdk', 'lib', '_blink', 'dartium'))
 
+  print '\nGenerating single file %s seconds' % round(time.time() - file_generation_start_time, 2)
+
+  end_time = time.time()
+
+  print '\nDone (dartdomgenerator) %s seconds' % round(end_time - start_time, 2)
+
 if __name__ == '__main__':
   sys.exit(main())
diff --git a/tools/dom/scripts/dartgenerator.py b/tools/dom/scripts/dartgenerator.py
index 6171700..7cb718a 100755
--- a/tools/dom/scripts/dartgenerator.py
+++ b/tools/dom/scripts/dartgenerator.py
@@ -26,9 +26,10 @@
 class DartGenerator(object):
   """Utilities to generate Dart APIs and corresponding JavaScript."""
 
-  def __init__(self):
+  def __init__(self, logging_level=logging.WARNING):
     self._auxiliary_files = {}
     self._dart_templates_re = re.compile(r'[\w.:]+<([\w\.<>:]+)>')
+    _logger.setLevel(logging_level)
 
   def _StripModules(self, type_name):
     return type_name.split('::')[-1]
diff --git a/tools/dom/scripts/dartmetadata.py b/tools/dom/scripts/dartmetadata.py
index 114c455..8b6a4cd 100644
--- a/tools/dom/scripts/dartmetadata.py
+++ b/tools/dom/scripts/dartmetadata.py
@@ -585,7 +585,9 @@
 _monitor_type_metadata = False
 
 class DartMetadata(object):
-  def __init__(self, api_status_path, doc_comments_path):
+  def __init__(self, api_status_path, doc_comments_path,
+               logging_level=logging.WARNING):
+    _logger.setLevel(logging_level)
     self._api_status_path = api_status_path
     status_file = open(self._api_status_path, 'r+')
     self._types = json.load(status_file)
diff --git a/tools/dom/scripts/databasebuilder.py b/tools/dom/scripts/databasebuilder.py
index 1cb2d97..604bc22 100755
--- a/tools/dom/scripts/databasebuilder.py
+++ b/tools/dom/scripts/databasebuilder.py
@@ -11,6 +11,19 @@
 import os
 import os.path
 import re
+import sys
+import tempfile
+import time
+import traceback
+
+import idl_validator
+
+import compiler
+import compute_interfaces_info_individual
+from compute_interfaces_info_individual import compute_info_individual, info_individual
+import compute_interfaces_info_overall
+from compute_interfaces_info_overall import compute_interfaces_info_overall, interfaces_info
+import idl_definitions
 
 from idlnode import *
 
@@ -31,7 +44,8 @@
       source=None, source_attributes={},
       rename_operation_arguments_on_merge=False,
       add_new_interfaces=True,
-      obsolete_old_declarations=False):
+      obsolete_old_declarations=False,
+      logging_level=logging.WARNING):
     """Constructor.
     Args:
       idl_syntax -- the syntax of the IDL file that is imported.
@@ -56,9 +70,10 @@
         rename_operation_arguments_on_merge
     self.add_new_interfaces = add_new_interfaces
     self.obsolete_old_declarations = obsolete_old_declarations
+    _logger.setLevel(logging_level)
 
 
-def _load_idl_file(file_name, import_options):
+def _load_idl_file(build, file_name, import_options):
   """Loads an IDL file into memory"""
   idl_parser = idlparser.IDLParser(import_options.idl_syntax)
 
@@ -68,12 +83,107 @@
     f.close()
 
     idl_ast = idl_parser.parse(content)
+
     return IDLFile(idl_ast, file_name)
   except SyntaxError, e:
     raise RuntimeError('Failed to load file %s: %s: Content: %s[end]'
                        % (file_name, e, content))
 
 
+def format_exception(e):
+    exception_list = traceback.format_stack()
+    exception_list = exception_list[:-2]
+    exception_list.extend(traceback.format_tb(sys.exc_info()[2]))
+    exception_list.extend(traceback.format_exception_only(sys.exc_info()[0], sys.exc_info()[1]))
+
+    exception_str = "Traceback (most recent call last):\n"
+    exception_str += "".join(exception_list)
+    # Removing the last \n
+    exception_str = exception_str[:-1]
+
+    return exception_str
+
+
+# Compile IDL using Blink's IDL compiler.
+def _new_compile_idl_file(build, file_name, import_options):
+  try:
+    idl_file_fullpath = os.path.realpath(file_name)
+    idl_definition = build.idl_compiler.compile_file(idl_file_fullpath)
+    return idl_definition
+  except Exception as err:
+    print 'ERROR: idl_compiler.py: ' + os.path.basename(file_name)
+    print err
+    print
+    print 'Stack Dump:'
+    print format_exception(err)
+
+  return 1
+
+
+# Create the Model (IDLFile) from the new AST of the compiled IDL file.
+def _new_load_idl_file(build, file_name, import_options):
+  try:
+    # Compute interface name from IDL filename (it's one for one in WebKit).
+    name = os.path.splitext(os.path.basename(file_name))[0]
+
+    idl_definition = new_asts[name]
+    return IDLFile(idl_definition, file_name)
+  except Exception as err:
+    print 'ERROR: loading AST from cache: ' + os.path.basename(file_name)
+    print err
+    print
+    print 'Stack Dump:'
+    print format_exception(err)
+
+  return 1
+
+
+# New IDL parser builder.
+class Build():
+    def __init__(self, provider):
+        # TODO(terry): Consider using the generator to do the work today we're
+        #              driven by the databasebuilder.  Blink compiler requires
+        #              an output directory even though we don't use (yet). Might
+        #              use the code generator portion of the new IDL compiler
+        #              then we'd have a real output directory. Today we use the
+        #              compiler to only create an AST.
+        self.output_directory = tempfile.mkdtemp()
+        attrib_file = os.path.join('Source', idl_validator.EXTENDED_ATTRIBUTES_FILENAME)
+        # Create compiler.
+        self.idl_compiler = compiler.IdlCompilerDart(self.output_directory,
+                                            attrib_file,
+                                            interfaces_info=interfaces_info,
+                                            only_if_changed=True)
+
+    def format_exception(self, e):
+        exception_list = traceback.format_stack()
+        exception_list = exception_list[:-2]
+        exception_list.extend(traceback.format_tb(sys.exc_info()[2]))
+        exception_list.extend(traceback.format_exception_only(sys.exc_info()[0], sys.exc_info()[1]))
+
+        exception_str = "Traceback (most recent call last):\n"
+        exception_str += "".join(exception_list)
+        # Removing the last \n
+        exception_str = exception_str[:-1]
+
+        return exception_str
+
+    def generate_from_idl(self, idl_file):
+        try:
+            idl_file_fullpath = os.path.realpath(idl_file)
+            self.idl_compiler.compile_file(idl_file_fullpath)
+        except Exception as err:
+            print 'ERROR: idl_compiler.py: ' + os.path.basename(idl_file)
+            print err
+            print
+            print 'Stack Dump:'
+            print self.format_exception(err)
+
+            return 1
+
+        return IDLFile(idl_ast, file_name)
+
+
 class DatabaseBuilder(object):
   def __init__(self, database):
     """DatabaseBuilder is used for importing and merging interfaces into
@@ -83,6 +193,9 @@
     self._impl_stmts = []
     self.conditionals_met = set()
 
+    # Spin up the new IDL parser.
+    self.build = Build(None)
+
   def _resolve_type_defs(self, idl_file):
     type_def_map = {}
     # build map
@@ -110,7 +223,7 @@
       idl_node.reset_id(strip_modules(idl_node.id))
 
     def rename_ext_attrs(ext_attrs_node):
-      for type_valued_attribute_name in ['Supplemental']:
+      for type_valued_attribute_name in ['DartSupplemental']:
         if type_valued_attribute_name in ext_attrs_node:
           value = ext_attrs_node[type_valued_attribute_name]
           if isinstance(value, str):
@@ -192,8 +305,14 @@
       if sig is None:
         continue
       if sig in res:
-        raise RuntimeError('Warning: Multiple members have the same '
-                           'signature: "%s"' % sig)
+        op = res[sig]
+        # Only report if the the operations that match are either both suppressed
+        # or both not suppressed.  Optional args aren't part of type signature
+        # for this routine. Suppressing a non-optional type and supplementing
+        # with an optional type appear the same.
+        if idl_node.is_fc_suppressed == op.is_fc_suppressed:
+          raise RuntimeError('Warning: Multiple members have the same '
+                           '  signature: "%s"' % sig)
       res[sig] = idl_node
     return res
 
@@ -375,15 +494,17 @@
             import_options.source_attributes)
       interface.parents.append(parent)
 
-  def merge_imported_interfaces(self):
+  def merge_imported_interfaces(self, blink_parser):
     """Merges all imported interfaces and loads them into the DB."""
+    imported_interfaces = self._imported_interfaces
 
     # Step 1: Pre process imported interfaces
-    for interface, import_options in self._imported_interfaces:
+#    for interface, import_options in imported_interfaces.iteritems():
+    for interface, import_options in imported_interfaces:
       self._annotate(interface, import_options)
 
     # Step 2: Add all new interfaces and merge overlapping ones
-    for interface, import_options in self._imported_interfaces:
+    for interface, import_options in imported_interfaces:
       if not interface.is_supplemental:
         if self._database.HasInterface(interface.id):
           old_interface = self._database.GetInterface(interface.id)
@@ -393,15 +514,9 @@
             self._database.AddInterface(interface)
 
     # Step 3: Merge in supplemental interfaces
-    for interface, import_options in self._imported_interfaces:
+    for interface, import_options in imported_interfaces:
       if interface.is_supplemental:
-        target_name = interface.ext_attrs['Supplemental']
-        if target_name:
-          # [Supplemental=Window] - merge into Window.
-          target = target_name
-        else:
-          # [Supplemental] - merge into existing inteface with same name.
-          target = interface.id
+        target = interface.id
         if self._database.HasInterface(target):
           old_interface = self._database.GetInterface(target)
           self._merge_interfaces(old_interface, interface, import_options)
@@ -415,14 +530,76 @@
     self._impl_stmts = []
     self._imported_interfaces = []
 
-  def import_idl_files(self, file_paths, import_options, parallel):
+  # Compile the IDL file with the Blink compiler and remember each AST for the
+  # IDL.
+  def _blink_compile_idl_files(self, file_paths, import_options, parallel, is_dart_idl):
+    if not(is_dart_idl):
+      start_time = time.time()
+
+      # 2-stage computation: individual, then overall
+      for file_path in file_paths:
+        filename = os.path.splitext(os.path.basename(file_path))[0]
+        compute_info_individual(file_path, 'dart')
+      info_individuals = [info_individual()]
+      compute_interfaces_info_overall(info_individuals)
+
+      end_time = time.time()
+      print 'Compute dependencies %s seconds' % round((end_time - start_time),
+                                                      2)
+
+    # use --parallel for async on a pool.  Look at doing it like Blink
+    blink_compiler = _new_compile_idl_file
+    process_ast = self._process_ast
+
     if parallel:
       # Parse the IDL files in parallel.
       pool = multiprocessing.Pool()
       try:
         for file_path in file_paths:
-          pool.apply_async(_load_idl_file,
-                           [ file_path, import_options],
+          pool.apply_async(blink_compiler,
+                           [ self.build, file_path, import_options],
+                           callback = lambda new_ast: process_ast(new_ast, True))
+        pool.close()
+        pool.join()
+      except:
+        pool.terminate()
+        raise
+    else:
+      # Parse the IDL files serially.
+      start_time = time.time()
+
+      for file_path in file_paths:
+        file_path = os.path.normpath(file_path)
+        ast = blink_compiler(self.build, file_path, import_options)
+        process_ast(os.path.splitext(os.path.basename(file_path))[0], ast, True)
+
+      end_time = time.time()
+      print 'Compiled %s IDL files in %s seconds' % (len(file_paths),
+                                                    round((end_time - start_time), 2))
+
+  def _process_ast(self, filename, ast, blink_parser = False):
+    if blink_parser:
+      new_asts[filename] = ast
+    else:
+      for name in ast.interfaces:
+        # Index by filename some files are partial on another interface (e.g.,
+        # DocumentFontFaceSet.idl).
+        new_asts[filename] = ast.interfaces
+
+  def import_idl_files(self, file_paths, import_options, parallel, blink_parser, is_dart_idl):
+    if blink_parser:
+      self._blink_compile_idl_files(file_paths, import_options, parallel, is_dart_idl)
+
+    # use --parallel for async on a pool.  Look at doing it like Blink
+    idl_loader = _new_load_idl_file if blink_parser else _load_idl_file
+
+    if parallel:
+      # Parse the IDL files in parallel.
+      pool = multiprocessing.Pool()
+      try:
+        for file_path in file_paths:
+          pool.apply_async(idl_loader,
+                           [ self.build, file_path, import_options],
                            callback = lambda idl_file:
                              self._process_idl_file(idl_file, import_options))
         pool.close()
@@ -431,14 +608,24 @@
         pool.terminate()
         raise
     else:
+      start_time = time.time()
+
       # Parse the IDL files in serial.
       for file_path in file_paths:
-        idl_file = _load_idl_file(file_path, import_options)
-        self._process_idl_file(idl_file, import_options)
+        file_path = os.path.normpath(file_path)
+        idl_file = idl_loader(self.build, file_path, import_options)
+        _logger.info('Processing %s' % os.path.splitext(os.path.basename(file_path))[0])
+        self._process_idl_file(idl_file, import_options, is_dart_idl)
 
-  def _process_idl_file(self, idl_file,
-                        import_options):
-    self._strip_ext_attributes(idl_file)
+      end_time = time.time()
+
+      print 'Total %s files %sprocessed in databasebuilder in %s seconds' % \
+      (len(file_paths), '' if blink_parser else 'compiled/', \
+       round((end_time - start_time), 2))
+
+  def _process_idl_file(self, idl_file, import_options, dart_idl = False):
+    # TODO(terry): strip_ext_attributes on an idl_file does nothing.
+    #self._strip_ext_attributes(idl_file)
     self._resolve_type_defs(idl_file)
     self._rename_types(idl_file, import_options)
 
@@ -452,7 +639,8 @@
         continue
 
       _logger.info('importing interface %s (source=%s file=%s)'
-        % (interface.id, import_options.source, idl_file))
+        % (interface.id, import_options.source, os.path.basename(idl_file.filename)))
+
       interface.attributes = filter(enabled, interface.attributes)
       interface.operations = filter(enabled, interface.operations)
       self._imported_interfaces.append((interface, import_options))
diff --git a/tools/dom/scripts/fremontcutbuilder.py b/tools/dom/scripts/fremontcutbuilder.py
index 085e01b..0bd307b 100755
--- a/tools/dom/scripts/fremontcutbuilder.py
+++ b/tools/dom/scripts/fremontcutbuilder.py
@@ -9,6 +9,7 @@
 import logging.config
 import os.path
 import sys
+import time
 
 _logger = logging.getLogger('fremontcutbuilder')
 
@@ -34,12 +35,15 @@
     'ENABLE_WEB_AUDIO', # Not on Android
 ]
 
-def build_database(idl_files, database_dir, feature_defines=None, parallel=False):
+def build_database(idl_files, database_dir, feature_defines=None, parallel=False,
+                   blink_parser=False, logging_level=logging.WARNING):
   """This code reconstructs the FremontCut IDL database from W3C,
   WebKit and Dart IDL files."""
   current_dir = os.path.dirname(__file__)
   logging.config.fileConfig(os.path.join(current_dir, "logging.conf"))
 
+  _logger.setLevel(logging_level)
+
   db = database.Database(database_dir)
 
   # Delete all existing IDLs in the DB.
@@ -63,24 +67,27 @@
       # TODO(vsm): What else should we define as on when processing IDL?
       idl_defines=webkit_defines + feature_defines,
       source='WebKit',
-      source_attributes={'revision': webkit_revision})
+      source_attributes={'revision': webkit_revision},
+      logging_level=logging_level)
 
   # Import WebKit IDLs.
-  builder.import_idl_files(idl_files, webkit_options, parallel)
+  builder.import_idl_files(idl_files, webkit_options, parallel, blink_parser, False)
 
   # Import Dart idl:
   dart_options = databasebuilder.DatabaseBuilderOptions(
     idl_syntax=idlparser.FREMONTCUT_SYNTAX,
     source='Dart',
-    rename_operation_arguments_on_merge=True)
+    rename_operation_arguments_on_merge=True,
+    logging_level=logging_level)
 
   builder.import_idl_files(
       [ os.path.join(current_dir, '..', 'idl', 'dart', 'dart.idl') ],
-      dart_options,
-      parallel)
+      dart_options, parallel, blink_parser, True)
+
+  start_time = time.time()
 
   # Merging:
-  builder.merge_imported_interfaces()
+  builder.merge_imported_interfaces(blink_parser)
 
   builder.fetch_constructor_data(webkit_options)
   builder.fix_displacements('WebKit')
@@ -104,10 +111,14 @@
         sorted(unknown_conditionals))
     _logger.warning('Please update fremontcutbuilder.py')
 
-  db.Save()
+  print 'Merging interfaces %s seconds' % round(time.time() - start_time, 2)
+
+# TODO(terry): Don't generate the database cache.
+#  db.Save()
+
   return db
 
-def main(parallel=False):
+def main(parallel=False, blink_parser=False, logging_level=logging.WARNING):
   current_dir = os.path.dirname(__file__)
 
   idl_files = []
@@ -132,19 +143,29 @@
       'inspector',
   ]
 
+  # TODO(terry): Integrate this into the htmlrenamer's _removed_html_interfaces
+  #              (if possible).
+  FILES_TO_IGNORE = [
+      'InspectorFrontendHostFileSystem.idl',  # Uses interfaces in inspector dir (which is ignored)
+      'WebKitGamepad.idl',                    # Gamepad.idl is the new one.
+      'WebKitGamepadList.idl',                # GamepadList is the new one.
+  ]
+
   def visitor(arg, dir_name, names):
     if os.path.basename(dir_name) in DIRS_TO_IGNORE:
       names[:] = [] # Do not go underneath
     for name in names:
       file_name = os.path.join(dir_name, name)
       (interface, ext) = os.path.splitext(file_name)
-      if ext == '.idl':
+      if ext == '.idl' and not(name in FILES_TO_IGNORE):
         idl_files.append(file_name)
 
   os.path.walk(webcore_dir, visitor, webcore_dir)
 
   database_dir = os.path.join(current_dir, '..', 'database')
-  return build_database(idl_files, database_dir, parallel=parallel)
+
+  return build_database(idl_files, database_dir, parallel=parallel,
+                        blink_parser=blink_parser, logging_level=logging_level)
 
 if __name__ == '__main__':
   sys.exit(main())
diff --git a/tools/dom/scripts/generator.py b/tools/dom/scripts/generator.py
index 950c9ae..73e3676 100644
--- a/tools/dom/scripts/generator.py
+++ b/tools/dom/scripts/generator.py
@@ -228,7 +228,7 @@
       # FIXME: Optional constructors arguments should not be treated as
       # optional arguments.
       return argument.optional
-    if 'ForceOptional' in argument.ext_attrs:
+    if 'DartForceOptional' in argument.ext_attrs:
       return True
     return False
 
@@ -262,9 +262,13 @@
 
   return result
 
+# Argument default value set (literal value or null).
+def HasDefault(argument):
+  return (argument.default_value != None) or argument.default_value_is_null
+
 def IsOptional(argument):
-  return argument.optional and ('Default' not in argument.ext_attrs)\
-      or 'ForceOptional' in argument.ext_attrs
+  return argument.optional and (not(HasDefault(argument))) \
+         or 'DartForceOptional' in argument.ext_attrs
 
 def AnalyzeOperation(interface, operations):
   """Makes operation calling convention decision for a set of overloads.
diff --git a/tools/dom/scripts/go.sh b/tools/dom/scripts/go.sh
index efb01b6..91e2c26 100755
--- a/tools/dom/scripts/go.sh
+++ b/tools/dom/scripts/go.sh
@@ -49,6 +49,6 @@
   --update-dom-metadata
 else
   reset &&
-  ./dartdomgenerator.py --rebuild --parallel --systems="$SYSTEMS" \
-  --update-dom-metadata
+  ./dartdomgenerator.py --rebuild --systems="$SYSTEMS" --blink-parser \
+  --logging=40 --update-dom-metadata
 fi
diff --git a/tools/dom/scripts/htmldartgenerator.py b/tools/dom/scripts/htmldartgenerator.py
index 1f2a85d..a982335 100644
--- a/tools/dom/scripts/htmldartgenerator.py
+++ b/tools/dom/scripts/htmldartgenerator.py
@@ -206,6 +206,7 @@
     operation.id. If not, stop library generation, and throw an error, requiring
     programmer input about the best name change before proceeding."""
     operation_str = '%s.%s' % (interface.id, operation.id)
+
     if (operation.id in operations_by_name and
         len(operations_by_name[operation.id]) > 1 and
         len(filter(lambda overload: overload.startswith(operation_str),
@@ -544,12 +545,15 @@
           stmts_emitter, call_emitter,
           version, signature_index, argument_count):
         name = emitter.Format('_create_$VERSION', VERSION=version)
+        arguments = constructor_info.idl_args[signature_index][:argument_count]
         if self._dart_use_blink:
-            base_name = \
-                self.DeriveNativeName(name + 'constructorCallback')
+            type_ids = [p.type.id for p in arguments]
+            base_name, rs = \
+                self.DeriveNativeEntry("constructorCallback", None, type_ids,
+                                       False)
             qualified_name = \
-              self.DeriveQualifiedBlinkName(self._interface.id,
-                                            base_name)
+                self.DeriveQualifiedBlinkName(self._interface.id,
+                                              base_name)
         else:
             qualified_name = emitter.Format(
                 '$FACTORY.$NAME',
@@ -559,9 +563,7 @@
             FACTORY_NAME=qualified_name,
             FACTORY_PARAMS= \
                 constructor_info.ParametersAsArgumentList(argument_count))
-        self.EmitStaticFactoryOverload(
-            constructor_info, name,
-            constructor_info.idl_args[signature_index][:argument_count])
+        self.EmitStaticFactoryOverload(constructor_info, name, arguments)
 
       def IsOptional(signature_index, argument):
         return self.IsConstructorArgumentOptional(argument)
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index c066b37..7933e08 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -396,7 +396,7 @@
 
 # Members that have multiple definitions, but their types are vary, so we rename
 # them to make them distinct.
-renamed_overloads = monitored.Dict('htmldartgenreator.renamed_overloads', {
+renamed_overloads = monitored.Dict('htmldartgenerator.renamed_overloads', {
   'AudioContext.createBuffer(ArrayBuffer buffer, boolean mixToMono)':
       'createBufferFromBuffer',
   'CSS.supports(DOMString conditionText)': 'supportsCondition',
@@ -480,12 +480,20 @@
   'XMLHttpRequest.send'
 ])
 
+# Members that can be overloaded.
 overloaded_and_renamed = monitored.Set(
     'htmldartgenerator.overloaded_and_renamed', [
-  'WebGLRenderingContext.texImage2D',
-  'WebGLRenderingContext.texSubImage2D',
-  'WebGLRenderingContext.bufferData',
-  'WebGLRenderingContext.bufferSubData',
+  'CanvasRenderingContext2D.clip',
+  'CanvasRenderingContext2D.drawFocusIfNeeded',
+  'CanvasRenderingContext2D.fill',
+  'CanvasRenderingContext2D.isPointInPath',
+  'CanvasRenderingContext2D.isPointInStroke',
+  'CanvasRenderingContext2D.stroke',
+  'Navigator.sendBeacon',
+  'WebGLRenderingContextBase.bufferData',
+  'WebGLRenderingContextBase.bufferSubData',
+  'WebGLRenderingContextBase.texImage2D',
+  'WebGLRenderingContextBase.texSubImage2D',
 ])
 
 for member in convert_to_future_members:
diff --git a/tools/dom/scripts/idlnode.py b/tools/dom/scripts/idlnode.py
index 8684071..9f9e726 100755
--- a/tools/dom/scripts/idlnode.py
+++ b/tools/dom/scripts/idlnode.py
@@ -6,6 +6,14 @@
 import os
 import sys
 
+import idl_definitions
+from idl_types import IdlType, IdlUnionType
+
+from compute_interfaces_info_overall import interfaces_info
+
+
+new_asts = {}
+
 
 _operation_suffix_map = {
   '__getter__': "Getter",
@@ -24,6 +32,7 @@
     """Initializes an IDLNode from a PegParser AST output."""
     self.id = self._find_first(ast, 'Id') if ast is not None else None
 
+
   def __repr__(self):
     """Generates string of the form <class id extra extra ... 0x12345678>."""
     extras = self._extra_repr()
@@ -128,15 +137,69 @@
 
     if isinstance(ast, list):
       for childAst in ast:
-        sub_res = self._find_all(childAst, label,
-                     max_results - len(res))
-        res.extend(sub_res)
+        if childAst and \
+           not(isinstance(childAst, dict)) and \
+           not(isinstance(childAst, str)) and \
+           not(isinstance(childAst, tuple)) and \
+           childAst.__module__ == "idl_definitions":
+          field_name = self._convert_label_to_field(label)
+          if hasattr(childAst, field_name):
+            field_value = getattr(childAst, field_name)
+            # It's an IdlType we need the string name of the type.
+            if field_name == 'idl_type':
+              field_value =  getattr(field_value, 'base_type')
+            res.append(field_value)
+        else:
+          sub_res = self._find_all(childAst, label,
+                       max_results - len(res))
+          res.extend(sub_res)
     elif isinstance(ast, tuple):
       (nodeLabel, value) = ast
       if nodeLabel == label:
         res.append(value)
+    # TODO(terry): Seems bogus to check for so many things probably better to just
+    #              pass in blink_compile and drive it off from that...
+    elif (ast and not(isinstance(ast, dict)) and
+          not(isinstance(ast, str)) and ast.__module__ == "idl_definitions"):
+      field_name = self._convert_label_to_field(label)
+      if hasattr(ast, field_name):
+        field_value = getattr(ast, field_name)
+        if field_value:
+          if label == 'Interface' or label == 'Enum':
+            for key in field_value:
+              value = field_value[key]
+              res.append(value)
+          elif isinstance(field_value, list):
+            for item in field_value:
+              res.append(item)
+          elif label == 'ParentInterface' or label == 'InterfaceType':
+            # Fetch the AST for the parent interface.
+            parent_idlnode = new_asts[field_value]
+            res.append(parent_idlnode.interfaces[field_value])
+          else:
+            res.append(field_value)
+
     return res
 
+  def _convert_from_blink(self, object, label):
+    field_name = self._convert_label_to_field(label)
+    if hasattr(object, field_name):
+      field_value = getattr(object, field_name)
+      if field_value:
+        if label == 'Interface' or label == 'Enum':
+          for key in field_value:
+            value = field_value[key]
+            res.append(value)
+        elif isinstance(field_value, list):
+          for item in field_value:
+            res.append(item)
+        elif label == 'ParentInterface' or label == 'InterfaceType':
+          # Fetch the AST for the parent interface.
+          parent_idlnode = new_asts[field_value]
+          res.append(parent_idlnode.interfaces[field_value])
+        else:
+          res.append(field_value)
+
   def _find_first(self, ast, label):
     """Convenience method for _find_all(..., max_results=1).
     Returns a single element instead of a list, or None if nothing
@@ -151,6 +214,38 @@
     in the AST by searching for it."""
     return len(self._find_all(ast, label, max_results=1)) == 1
 
+  # Mapping from original AST tuple names to new AST field names idl_definitions.Idl*.
+  def _convert_label_to_field(self, label):
+    label_field = {
+      # Keys old AST names, Values Blink IdlInterface names.
+      'ParentInterface': 'parent',
+      'Id': 'name',
+      'Interface': 'interfaces',
+      'Callback': 'is_callback',
+      'Partial': 'is_partial',
+      'Operation': 'operations',
+      'Attribute': 'attributes',
+      'Const': 'constants',
+      'Type': 'idl_type',
+      'ExtAttrs':  'extended_attributes',
+      'Special': 'specials',
+      'ReturnType': 'idl_type',
+      'Argument': 'arguments',
+      'InterfaceType': 'name',
+      'ConstExpr': 'value',
+      'Static': 'is_static',
+      'ReadOnly': 'is_read_only',
+      'Optional': 'is_optional',
+      'Nullable': 'is_nullable',
+      'Enum': 'enumerations',
+      'Annotation': '',         # TODO(terry): Ignore annotation used for database cache.
+      'TypeDef': '',            # typedef in an IDL are already resolved.
+    }
+    result = label_field.get(label)
+    if result != '' and not(result):
+      print 'FATAL ERROR: AST mapping name not found %s.' % label
+    return result if result else ''
+
   def _convert_all(self, ast, label, idlnode_ctor):
     """Converts AST elements into IDLNode elements.
     Uses _find_all to find elements with a given label and converts
@@ -257,19 +352,55 @@
 class IDLFile(IDLNode):
   """IDLFile is the top-level node in each IDL file. It may contain interfaces."""
 
+  DART_IDL = 'dart.idl'
+
   def __init__(self, ast, filename=None):
     IDLNode.__init__(self, ast)
     self.filename = filename
+
+    filename_basename = os.path.basename(filename)
+
     self.interfaces = self._convert_all(ast, 'Interface', IDLInterface)
-    modules = self._convert_all(ast, 'Module', IDLModule)
-    self.implementsStatements = self._convert_all(ast, 'ImplStmt',
-      IDLImplementsStatement)
-    self.typeDefs = self._convert_all(ast, 'TypeDef', IDLTypeDef)
+
+    is_blink = not(isinstance(ast, list)) and ast.__module__ == 'idl_definitions'
+
+    if is_blink:
+      # implements is handled by the interface merging step (see the function
+      # merge_interface_dependencies).
+      for interface in self.interfaces:
+        blink_interface = ast.interfaces.get(interface.id)
+        if filename_basename == self.DART_IDL:
+          # TODO(terry): Does this seem right?
+          self.implementsStatements = []
+        else:
+          interface_info = interfaces_info[interface.id]
+
+          implements = interface_info['implements_interfaces']
+          if not(blink_interface.is_partial) and len(implements) > 0:
+            implementor = new_asts[interface.id].interfaces.get(interface.id)
+
+            self.implementsStatements = []
+
+            # TODO(terry): Need to handle more than one implements.
+            for implemented_name in implements:
+              implemented = new_asts[implemented_name].interfaces.get(implemented_name)
+
+              implement_statement = IDLImplementsStatement(implemented)
+
+              implement_statement.implementor = IDLType(implementor)
+              implement_statement.implemented = IDLType(implemented)
+
+              self.implementsStatements.append(implement_statement)
+          else:
+            self.implementsStatements = []
+    else:
+      self.implementsStatements = self._convert_all(ast, 'ImplStmt',
+        IDLImplementsStatement)
+
+    # No reason to handle typedef they're already aliased in Blink's AST.
+    self.typeDefs = [] if is_blink else self._convert_all(ast, 'TypeDef', IDLTypeDef)
+
     self.enums = self._convert_all(ast, 'Enum', IDLEnum)
-    for module in modules:
-      self.interfaces.extend(module.interfaces)
-      self.implementsStatements.extend(module.implementsStatements)
-      self.typeDefs.extend(module.typeDefs)
 
 
 class IDLModule(IDLNode):
@@ -280,10 +411,24 @@
     self._convert_ext_attrs(ast)
     self._convert_annotations(ast)
     self.interfaces = self._convert_all(ast, 'Interface', IDLInterface)
-    self.typeDefs = self._convert_all(ast, 'TypeDef', IDLTypeDef)
+
+    is_blink = ast.__module__ == 'idl_definitions'
+
+    # No reason to handle typedef they're already aliased in Blink's AST.
+    self.typeDefs = [] if is_blink else self._convert_all(ast, 'TypeDef', IDLTypeDef)
+
     self.enums = self._convert_all(ast, 'Enum', IDLNode)
-    self.implementsStatements = self._convert_all(ast, 'ImplStmt',
-      IDLImplementsStatement)
+
+    if is_blink:
+      # implements is handled by the interface merging step (see the function
+      # merge_interface_dependencies).
+      for interface in self.interfaces:
+        interface_info = interfaces_info[interface.id]
+        # TODO(terry): Same handling for implementsStatements as in IDLFile?
+        self.implementsStatements = interface_info['implements_interfaces']
+    else:
+      self.implementsStatements = self._convert_all(ast, 'ImplStmt',
+        IDLImplementsStatement)
 
 
 class IDLExtAttrs(IDLDictNode):
@@ -293,34 +438,52 @@
     IDLDictNode.__init__(self, None)
     if not ast:
       return
-    ext_attrs_ast = self._find_first(ast, 'ExtAttrs')
-    if not ext_attrs_ast:
-      return
-    for ext_attr in self._find_all(ext_attrs_ast, 'ExtAttr'):
-      name = self._find_first(ext_attr, 'Id')
-      value = self._find_first(ext_attr, 'ExtAttrValue')
+    if not(isinstance(ast, list)) and ast.__module__ == "idl_definitions":
+      # Pull out extended attributes from Blink AST.
+      for name, value in ast.extended_attributes.items():
+        # TODO(terry): Handle constructors...
+        if name == 'NamedConstructor' or name == 'Constructor':
+          for constructor in ast.constructors:
+            if constructor.name == 'NamedConstructor':
+              constructor_name = ast.extended_attributes['NamedConstructor']
+            else:
+              constructor_name = None
+            func_value = IDLExtAttrFunctionValue(constructor_name, constructor.arguments, True)
+            if name == 'Constructor':
+              self.setdefault('Constructor', []).append(func_value)
+            else:
+              self[name] = func_value
+        else:
+          self[name] = value
+    else:
+      ext_attrs_ast = self._find_first(ast, 'ExtAttrs')
+      if not ext_attrs_ast:
+        return
+      for ext_attr in self._find_all(ext_attrs_ast, 'ExtAttr'):
+        name = self._find_first(ext_attr, 'Id')
+        value = self._find_first(ext_attr, 'ExtAttrValue')
 
-      if name == 'Constructor':
-        # There might be multiple constructor attributes, collect them
-        # as a list.  Represent plain Constructor attribute
-        # (without any signature) as None.
-        assert value is None
-        func_value = None
-        ctor_args = self._find_first(ext_attr, 'ExtAttrArgList')
-        if ctor_args:
-          func_value = IDLExtAttrFunctionValue(None, ctor_args)
-        self.setdefault('Constructor', []).append(func_value)
-        continue
+        if name == 'Constructor':
+          # There might be multiple constructor attributes, collect them
+          # as a list.  Represent plain Constructor attribute
+          # (without any signature) as None.
+          assert value is None
+          func_value = None
+          ctor_args = self._find_first(ext_attr, 'ExtAttrArgList')
+          if ctor_args:
+            func_value = IDLExtAttrFunctionValue(None, ctor_args)
+          self.setdefault('Constructor', []).append(func_value)
+          continue
+  
+        func_value = self._find_first(value, 'ExtAttrFunctionValue')
+        if func_value:
+          # E.g. NamedConstructor=Audio(optional DOMString src)
+          self[name] = IDLExtAttrFunctionValue(
+              func_value,
+              self._find_first(func_value, 'ExtAttrArgList'))
+          continue
 
-      func_value = self._find_first(value, 'ExtAttrFunctionValue')
-      if func_value:
-        # E.g. NamedConstructor=Audio(optional DOMString src)
-        self[name] = IDLExtAttrFunctionValue(
-            func_value,
-            self._find_first(func_value, 'ExtAttrArgList'))
-        continue
-
-      self[name] = value
+        self[name] = value
 
   def _all_subnodes(self):
     # Extended attributes may contain IDLNodes, e.g. IDLExtAttrFunctionValue
@@ -329,9 +492,16 @@
 
 class IDLExtAttrFunctionValue(IDLNode):
   """IDLExtAttrFunctionValue."""
-  def __init__(self, func_value_ast, arg_list_ast):
+  def __init__(self, func_value_ast, arg_list_ast, is_blink=False):
     IDLNode.__init__(self, func_value_ast)
-    self.arguments = self._convert_all(arg_list_ast, 'Argument', IDLArgument)
+    if is_blink:
+      # Blink path
+      self.id = func_value_ast   # func_value_ast is the function name for Blink.
+      self.arguments = []
+      for argument in arg_list_ast:
+        self.arguments.append(IDLArgument(argument))
+    else:
+      self.arguments = self._convert_all(arg_list_ast, 'Argument', IDLArgument)
 
 
 class IDLType(IDLNode):
@@ -341,6 +511,7 @@
 
   def __init__(self, ast):
     IDLNode.__init__(self, ast)
+
     self.nullable = self._has(ast, 'Nullable')
     # Search for a 'ScopedName' or any label ending with 'Type'.
     if isinstance(ast, list):
@@ -359,6 +530,8 @@
               return 'sequence<%s>' % findType(type_ast)
           raise Exception('No type declaration found in %s' % ast)
         self.id = findType(ast)
+      # TODO(terry): Remove array_modifiers id has [] appended, keep for old
+      #              parsing.
       array_modifiers = self._find_first(ast, 'ArrayModifiers')
       if array_modifiers:
         self.id += array_modifiers
@@ -370,7 +543,25 @@
         self.id = self._label_to_type(label, ast)
     elif isinstance(ast, str):
       self.id = ast
+    # New blink handling.
+    elif ast.__module__ == "idl_types":
+      if isinstance(ast, IdlType):
+        type_name = str(ast)
+
+        # TODO(terry): For now don't handle unrestricted types see
+        #              https://code.google.com/p/chromium/issues/detail?id=354298
+        type_name = type_name.replace('unrestricted ', '', 1);
+
+        # TODO(terry): Handled ScalarValueString as a DOMString.
+        type_name = type_name.replace('ScalarValueString', 'DOMString', 1)
+
+        self.id = type_name
+      else:
+        # IdlUnionType
+        assert ast.is_union_type
+        self.id = self._label_to_type('UnionType', ast)
     if not self.id:
+      print '>>>> __module__ %s' % ast.__module__
       raise SyntaxError('Could not parse type %s' % (ast))
 
   def _label_to_type(self, label, ast):
@@ -391,7 +582,13 @@
   def __init__(self, ast):
     IDLNode.__init__(self, ast)
     self._convert_annotations(ast)
-    # TODO(antonm): save enum values.
+    if not(isinstance(ast, list)) and ast.__module__ == "idl_definitions":
+      # Blink AST
+      self.values = ast.values
+    else:
+      self.values = self._find_all(ast, 'StringLiteral')
+
+    # TODO(terry): Need to handle emitting of enums for dart:html
 
 
 class IDLTypeDef(IDLNode):
@@ -410,8 +607,10 @@
     IDLNode.__init__(self, ast)
     self._convert_ext_attrs(ast)
     self._convert_annotations(ast)
+
     self.parents = self._convert_all(ast, 'ParentInterface',
       IDLParentInterface)
+
     javascript_interface_name = self.ext_attrs.get('InterfaceName', self.id)
     self.javascript_binding_name = javascript_interface_name
     self.doc_js_name = javascript_interface_name
@@ -420,7 +619,7 @@
       self.ext_attrs['Callback'] = None
     if not (self._find_first(ast, 'Partial') is None):
       self.is_supplemental = True
-      self.ext_attrs['Supplemental'] = None
+      self.ext_attrs['DartSupplemental'] = None
 
     self.operations = self._convert_all(ast, 'Operation',
       lambda ast: IDLOperation(ast, self.doc_js_name))
@@ -428,9 +627,11 @@
       lambda ast: IDLAttribute(ast, self.doc_js_name))
     self.constants = self._convert_all(ast, 'Const',
       lambda ast: IDLConstant(ast, self.doc_js_name))
-    self.is_supplemental = 'Supplemental' in self.ext_attrs
+    self.is_supplemental = 'DartSupplemental' in self.ext_attrs
     self.is_no_interface_object = 'NoInterfaceObject' in self.ext_attrs
-    self.is_fc_suppressed = 'Suppressed' in self.ext_attrs
+    # TODO(terry): Can eliminate Suppressed when we're only using blink parser.
+    self.is_fc_suppressed = 'Suppressed' in self.ext_attrs or \
+                            'DartSuppress' in self.ext_attrs
 
 
   def reset_id(self, new_id):
@@ -468,11 +669,14 @@
 
   def __init__(self, ast, doc_js_interface_name):
     IDLNode.__init__(self, ast)
+
     self.type = self._convert_first(ast, 'Type', IDLType)
     self._convert_ext_attrs(ast)
     self._convert_annotations(ast)
     self.doc_js_interface_name = doc_js_interface_name
-    self.is_fc_suppressed = 'Suppressed' in self.ext_attrs
+    # TODO(terry): Can eliminate Suppressed when we're only using blink parser.
+    self.is_fc_suppressed = 'Suppressed' in self.ext_attrs or \
+                            'DartSuppress' in self.ext_attrs
     self.is_static = self._has(ast, 'Static')
 
 
@@ -480,16 +684,21 @@
   """IDLNode specialization for 'type name(args)' declarations."""
   def __init__(self, ast, doc_js_interface_name):
     IDLMember.__init__(self, ast, doc_js_interface_name)
+
     self.type = self._convert_first(ast, 'ReturnType', IDLType)
     self.arguments = self._convert_all(ast, 'Argument', IDLArgument)
     self.specials = self._find_all(ast, 'Special')
-    self.is_stringifier = self._has(ast, 'Stringifier')
     # Special case: there are getters of the form
     # getter <ReturnType>(args).  For now force the name to be __getter__,
     # but it should be operator[] later.
     if self.id is None:
       if self.specials == ['getter']:
-        self.id = '__getter__'
+        if self.ext_attrs.get('Custom') == 'PropertyQuery':
+          # Handling __propertyQuery__ the extended attribute is:
+          # [Custom=PropertyQuery] getter boolean (DOMString name);
+          self.id = '__propertyQuery__'
+        else:
+          self.id = '__getter__'
       elif self.specials == ['setter']:
         self.id = '__setter__'
         # Special case: if it's a setter, ignore 'declared' return type
@@ -518,11 +727,13 @@
     IDLMember.__init__(self, ast, doc_js_interface_name)
     self.is_read_only = self._has(ast, 'ReadOnly')
     # There are various ways to define exceptions for attributes:
+
   def _extra_repr(self):
     extra = []
     if self.is_read_only: extra.append('readonly')
     return extra
 
+
 class IDLConstant(IDLMember):
   """IDLNode specialization for 'const type name = value' declarations."""
   def __init__(self, ast, doc_js_interface_name):
@@ -534,6 +745,21 @@
   """IDLNode specialization for operation arguments."""
   def __init__(self, ast):
     IDLNode.__init__(self, ast)
+
+    self.default_value = None
+    self.default_value_is_null = False
+    # Handle the 'argType arg = default'. IDL syntax changed from
+    # [default=NullString].
+    if not isinstance(ast, list):
+      if isinstance(ast.default_value, idl_definitions.IdlLiteral) and ast.default_value:
+        self.default_value = ast.default_value.value
+        self.default_value_is_null = ast.default_value.is_null
+      elif 'Default' in ast.extended_attributes:
+        # Work around [Default=Undefined] for arguments - only look in the model's
+        # default_value
+        self.default_value = ast.extended_attributes.get('Default')
+        self.default_value_is_null = False
+
     self.type = self._convert_first(ast, 'Type', IDLType)
     self.optional = self._has(ast, 'Optional')
     self._convert_ext_attrs(ast)
@@ -546,13 +772,12 @@
 
 
 class IDLImplementsStatement(IDLNode):
-  """IDLNode specialization for 'X implements Y' declarations."""
+  """IDLNode specialization for 'IMPLEMENTOR implements IMPLEMENTED' declarations."""
   def __init__(self, ast):
     IDLNode.__init__(self, ast)
-    self.implementor = self._convert_first(ast, 'ImplStmtImplementor',
-      IDLType)
-    self.implemented = self._convert_first(ast, 'ImplStmtImplemented',
-      IDLType)
+    if isinstance(ast, list) or ast.__module__ != 'idl_definitions':
+      self.implementor = self._convert_first(ast, 'ImplStmtImplementor', IDLType)
+      self.implemented = self._convert_first(ast, 'ImplStmtImplemented', IDLType)
 
 
 class IDLAnnotations(IDLDictNode):
diff --git a/tools/dom/scripts/idlnode_test.py b/tools/dom/scripts/idlnode_test.py
index 1230de3..dc515b8 100755
--- a/tools/dom/scripts/idlnode_test.py
+++ b/tools/dom/scripts/idlnode_test.py
@@ -104,7 +104,6 @@
         [ExAttr] t1 op1();
         t2 op2(in int arg1, in long arg2);
         getter any item(in long index);
-        stringifier name();
       };''',
       {'interfaces': [{'operations': [{'doc_js_interface_name': 'I', 'type': {'id': 't1'}, 'ext_attrs': {'ExAttr': None}, 'id': 'op1'}, {'doc_js_interface_name': 'I', 'type': {'id': 't2'}, 'id': 'op2', 'arguments': [{'type': {'id': 'int'}, 'id': 'arg1'}, {'type': {'id': 'long'}, 'id': 'arg2'}]}, {'specials': ['getter'], 'doc_js_interface_name': 'I', 'type': {'id': 'any'}, 'id': 'item', 'arguments': [{'type': {'id': 'long'}, 'id': 'index'}]}, {'is_stringifier': True, 'type': {'id': 'name'}, 'doc_js_interface_name': 'I'}], 'javascript_binding_name': 'I', 'id': 'I', 'doc_js_name': 'I'}]})
 
diff --git a/tools/dom/scripts/idlsync.py b/tools/dom/scripts/idlsync.py
index 0e63308..dc49fce 100755
--- a/tools/dom/scripts/idlsync.py
+++ b/tools/dom/scripts/idlsync.py
@@ -25,6 +25,7 @@
     r'(\S+)\.idl',
     r'(\S+)\.json',
     r'(\S+)\.py',
+    r'(\S+)\.txt',
     ]
 
 # WebKit / WebCore info.
@@ -33,6 +34,8 @@
 WEBKIT_REV_PATTERN = r'"dartium_webkit_revision": "(\d+)",'
 WEBCORE_SUBPATH = 'Source/core'
 MODULES_SUBPATH = 'Source/modules'
+BINDINGS_SUBPATH = 'Source/bindings'
+
 LOCAL_WEBKIT_IDL_PATH = os.path.join(DART_PATH, 'third_party', 'WebCore')
 LOCAL_WEBKIT_README = """\
 This directory contains a copy of WebKit/WebCore IDL files.
@@ -89,11 +92,13 @@
     # (component, remote subpath, local path, local readme file, depth)
 
     # WebKit IDL.
-    ('webkit', WEBCORE_SUBPATH, os.path.join(LOCAL_WEBKIT_IDL_PATH, 'core'), LOCAL_WEBKIT_README,
+    ('webkit', WEBCORE_SUBPATH, os.path.join(LOCAL_WEBKIT_IDL_PATH, 'core'),
+     LOCAL_WEBKIT_README, DEPTH_INFINITY),
+    ('webkit', MODULES_SUBPATH, os.path.join(LOCAL_WEBKIT_IDL_PATH, 'modules'),
+     LOCAL_WEBKIT_README, DEPTH_INFINITY),
+    ('webkit', BINDINGS_SUBPATH, os.path.join(LOCAL_WEBKIT_IDL_PATH, 'bindings'),
+     LOCAL_WEBKIT_README, DEPTH_INFINITY),
 
-     DEPTH_INFINITY),
-    ('webkit', MODULES_SUBPATH, os.path.join(LOCAL_WEBKIT_IDL_PATH, 'modules'), LOCAL_WEBKIT_README,
-     DEPTH_INFINITY),
     # Chrome IDL.
     ('chrome', CHROME_IDL_SUBPATH, LOCAL_CHROME_IDL_PATH, LOCAL_CHROME_README,
      DEPTH_INFINITY),
diff --git a/tools/dom/scripts/monitored.py b/tools/dom/scripts/monitored.py
index 5d180c9..d8316cf 100644
--- a/tools/dom/scripts/monitored.py
+++ b/tools/dom/scripts/monitored.py
@@ -3,16 +3,17 @@
 # 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.
 
+
 """This module provides maps and sets that report unused elements."""
 
 _monitored_values = []
 
 
-def FinishMonitoring(includeDart2jsOnly):
+def FinishMonitoring(includeDart2jsOnly, logger):
   for value in _monitored_values:
     if value._dart2jsOnly and not includeDart2jsOnly:
       continue
-    value.CheckUsage()
+    value.CheckUsage(logger)
 
 class MonitoredCollection(object):
   def __init__(self, name, dart2jsOnly):
@@ -49,10 +50,10 @@
   def keys(self):
     return self._map.keys()
 
-  def CheckUsage(self):
+  def CheckUsage(self, logger):
     for v in sorted(self._map.keys()):
       if v not in self._used_keys:
-        print "dict '%s' has unused key '%s'" % (self.name, v)
+        logger.warn('dict \'%s\' has unused key \'%s\'' % (self.name, v))
 
 
 class Set(MonitoredCollection):
@@ -72,7 +73,7 @@
   def add(self, key):
     self._set += [key]
 
-  def CheckUsage(self):
+  def CheckUsage(self, logger):
     for v in sorted(self._set):
       if v not in self._used_keys:
-        print "set '%s' has unused key '%s'" % (self.name, v)
+        logger.warn('set \'%s\' has unused key \'%s\'' % (self.name, v))
diff --git a/tools/dom/scripts/multiemitter.py b/tools/dom/scripts/multiemitter.py
index f0628410..3764ebd 100644
--- a/tools/dom/scripts/multiemitter.py
+++ b/tools/dom/scripts/multiemitter.py
@@ -24,10 +24,12 @@
 
   """
 
-  def __init__(self):
+  def __init__(self, logging_level=logging.WARNING):
     self._key_to_emitter = {}     # key -> Emitter
     self._filename_to_emitter = {}    # filename -> Emitter
 
+    _logger.setLevel(logging_level)
+
 
   def FileEmitter(self, filename, key=None):
     """Creates an emitter for writing to a file.
diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py
index 3d70e81..5cb27f0 100644
--- a/tools/dom/scripts/systemhtml.py
+++ b/tools/dom/scripts/systemhtml.py
@@ -654,7 +654,7 @@
   interface.
   """
 
-  def __init__(self, interface, options):
+  def __init__(self, interface, options, logging_level=logging.WARNING):
     super(Dart2JSBackend, self).__init__(interface, options, False)
 
     self._database = options.database
@@ -666,6 +666,8 @@
     self._current_secondary_parent = None
     self._library_name = self._renamer.GetLibraryName(self._interface)
 
+    _logger.setLevel(logging_level)
+
   def ImplementsMergedMembers(self):
     return True
 
diff --git a/tools/dom/scripts/systemnative.py b/tools/dom/scripts/systemnative.py
index da82199..043f164 100644
--- a/tools/dom/scripts/systemnative.py
+++ b/tools/dom/scripts/systemnative.py
@@ -18,29 +18,25 @@
 _cpp_resolver_string_map = {
     # These custom constructors all resolve to a common entry, so choosing any
     # of the generated strings works.
-    'Blob_constructorCallback_RESOLVER_STRING_3_Array_DOMString_DOMString':
-        'Blob_constructorCallback_RESOLVER_STRING_0_',
-    'ConsoleBase_assertCondition_Callback_RESOLVER_STRING_2_boolean_object':
-        'ConsoleBase_assert_Callback_RESOLVER_STRING_2_boolean_object',
+    'ConsoleBase_assertCondition_Callback_boolean_object':
+        'ConsoleBase_assert_Callback_boolean_object',
     'FormData_constructorCallback':
-        'FormData_constructorCallback_RESOLVER_STRING_1_HTMLFormElement',
-    'XMLHttpRequest_constructorCallback_RESOLVER_STRING_0_':
-        'XMLHttpRequest_constructorCallback_RESOLVER_STRING_1_XMLHttpRequestOptions',
+        'FormData_constructorCallback_HTMLFormElement',
     # This callback name just gets generated sligtly different and we don't
     # want to bother fixing it.
     'ScriptProcessorNode__setEventListener_Callback':
         'ScriptProcessorNode_setEventListener_Callback',
     # We don't know how to get GLenum to show up as the correct type in this
     # script and don't want to bother fixing it the right way.
-    'WebGLDrawBuffers_drawBuffersWEBGL_Callback_RESOLVER_STRING_1_sequence<GLenum>' :
-        'WebGLDrawBuffers_drawBuffersWEBGL_Callback_RESOLVER_STRING_1_sequence<unsigned long>',
+    'WebGLDrawBuffers_drawBuffersWEBGL_Callback_sequence<GLenum>' :
+        'WebGLDrawBuffers_drawBuffersWEBGL_Callback_sequence<unsigned long>',
     # Blink 36 fixes.
-    'CanvasRenderingContext2D_setLineDash_Callback_RESOLVER_STRING_1_sequence<float>' :
-        'CanvasRenderingContext2D_setLineDash_Callback_RESOLVER_STRING_1_sequence<unrestricted float>',
+    'CanvasRenderingContext2D_setLineDash_Callback_sequence<float>' :
+        'CanvasRenderingContext2D_setLineDash_Callback_sequence<unrestricted float>',
 
     # SVGGraphicsElement is base class.
-    'SVGUseElement_hasExtension_Callback_RESOLVER_STRING_1_DOMString' :
-        'SVGGraphicsElement_hasExtension_Callback_RESOLVER_STRING_1_DOMString',
+    'SVGUseElement_hasExtension_Callback_DOMString' :
+        'SVGGraphicsElement_hasExtension_Callback_DOMString',
     'SVGUseElement_systemLanguage_Getter' :
         'SVGGraphicsElement_systemLanguage_Getter',
     'SVGUseElement_requiredFeatures_Getter' :
@@ -351,10 +347,23 @@
         return None
     return matched.group(1)
 
+_sequence_matcher = re.compile('sequence\<(.+)\>')
+
 def TypeIdToBlinkName(interface_id, database):
+  # Maybe should use the type_registry here?
   if database.HasEnum(interface_id):
     return "DOMString" # All enums are strings.
 
+  seq_match = _sequence_matcher.match(interface_id)
+  if seq_match is not None:
+    t = TypeIdToBlinkName(seq_match.group(1), database)
+    return "sequence<%s>" % t
+
+  arr_match = array_type(interface_id)
+  if arr_match is not None:
+    t = TypeIdToBlinkName(arr_match, database)
+    return "%s[]" % t
+
   if interface_id in _blink_1916_rename_map:
     interface_id = _blink_1916_rename_map[interface_id]
   return interface_id
@@ -378,19 +387,27 @@
 def DeriveBlinkClassName(name):
     return "Blink" + name
 
-def DeriveResolverString(interface_id, operation_id, native_suffix, type_ids, database, is_custom):
-    type_string = \
-        "_".join(map(lambda type_id : TypeIdToBlinkName(type_id, database), type_ids))
-    if native_suffix:
-        operation_id = "%s_%s" % (operation_id, native_suffix)
-    if is_custom:
-        components = \
-            [TypeIdToBlinkName(interface_id, database), operation_id]
-    else:
-        components = \
-            [TypeIdToBlinkName(interface_id, database), operation_id,
-             "RESOLVER_STRING", str(len(type_ids)), type_string]
-    return "_".join(components)
+_type_encoding_map = {
+  'long long': "ll",
+  'unsigned long': "ul",
+  'unsigned long long': "ull",
+  'unsigned short': "us",
+}
+
+def EncodeType(t):
+
+  seq_match = _sequence_matcher.match(t)
+  if seq_match is not None:
+    t2 = EncodeType(seq_match.group(1))
+    t = "SEQ_%s_SEQ" % t2
+    return t
+
+  arr_match = array_type(t)
+  if arr_match is not None:
+    t = EncodeType(arr_match)
+    return "A_%s_A" % t
+
+  return _type_encoding_map.get(t) or t
 
 # FIXME(leafp) This should really go elsewhere.  I think the right thing
 # to do is to add support in the DartLibraries objects in systemhtml
@@ -427,6 +444,7 @@
     self._interface_type_info = self._type_registry.TypeInfo(self._interface.id)
     self._metadata = options.metadata
     # These get initialized by StartInterface
+    self._blink_entries = None
     self._cpp_header_emitter = None
     self._cpp_impl_emitter = None
     self._members_emitter = None
@@ -566,6 +584,33 @@
   def RootClassName(self):
     return 'NativeFieldWrapperClass2'
 
+  def DeriveNativeEntry(self, operation_id, native_suffix, type_ids, skip_types):
+    interface_id = self._interface.id
+    database = self._database
+    type_ids = map(lambda type_id : TypeIdToBlinkName(type_id, database),
+                   type_ids)
+    encoded_type_ids = map(EncodeType, type_ids)
+    if native_suffix:
+      operation_id = "%s_%s" % (operation_id, native_suffix)
+      interface_id = TypeIdToBlinkName(interface_id, database)
+
+    def DeriveString(components, types, use_types):
+      if use_types:
+        components.extend(types)
+      full_name = "_".join(components)
+      return full_name
+
+    def mkPublic(s):
+      if s.startswith("_") or s.startswith("$"):
+        return "$" + s
+      return s
+
+    dart_name = mkPublic(DeriveString([operation_id], encoded_type_ids, True))
+    resolver_string = DeriveString([interface_id, operation_id], type_ids,
+                                   not skip_types)
+    return (dart_name, resolver_string)
+
+
   def DeriveNativeName(self, name, suffix=""):
       fields = ['$' + name]
       if suffix != "":
@@ -632,6 +677,7 @@
       '$!METHODS'
       '}\n',
       INTERFACE_NAME=DeriveBlinkClassName(self._interface.id))
+    self._blink_entries = set()
 
   def _EmitConstructorInfrastructure(self,
       constructor_info, cpp_prefix, cpp_suffix, factory_method_name,
@@ -650,16 +696,14 @@
     interface_name =  self._interface_type_info.interface_name()
 
     type_ids = [p.type.id for p in arguments[:argument_count]]
-    constructor_callback_id = \
-        DeriveResolverString(self._interface.id, cpp_suffix, None, type_ids, self._database, is_custom)
-
-    # First we emit the toplevel function
-    dart_native_name = \
-        self.DeriveNativeName(constructor_callback_cpp_name)
+    dart_native_name, constructor_callback_id = \
+        self.DeriveNativeEntry(cpp_suffix, None, type_ids, is_custom)
     if constructor_callback_id in _cpp_resolver_string_map:
         constructor_callback_id = \
             _cpp_resolver_string_map[constructor_callback_id]
-    self._native_class_emitter.Emit(
+    if dart_native_name not in self._blink_entries:
+      self._blink_entries.add(dart_native_name)
+      self._native_class_emitter.Emit(
         '\n'
         '  static $FACTORY_METHOD_NAME($PARAMETERS) native "$ID";\n',
         FACTORY_METHOD_NAME=dart_native_name,
@@ -953,9 +997,11 @@
     assert(not ('CustomGetter' in attr.ext_attrs))
     native_suffix = 'Getter'
     auto_scope_setup = self._GenerateAutoSetupScope(attr.id, native_suffix)
+    native_entry = \
+        self.DeriveNativeEntry(attr.id, native_suffix, [], True)
     cpp_callback_name = self._GenerateNativeBinding(attr.id, 1,
         dart_declaration, False, return_type, parameters,
-        native_suffix, is_custom, auto_scope_setup)
+        native_suffix, is_custom, auto_scope_setup, native_entry=native_entry)
     if is_custom:
       return
 
@@ -1007,9 +1053,11 @@
     assert(not ('V8CustomSetter' in attr.ext_attrs))
     native_suffix = 'Setter'
     auto_scope_setup = self._GenerateAutoSetupScope(attr.id, native_suffix)
+    native_entry = \
+        self.DeriveNativeEntry(attr.id, native_suffix, [attr.type.id], True)
     cpp_callback_name = self._GenerateNativeBinding(attr.id, 2,
         dart_declaration, False, return_type, parameters,
-        native_suffix, is_custom, auto_scope_setup)
+        native_suffix, is_custom, auto_scope_setup, native_entry=native_entry)
     if is_custom:
       return
 
@@ -1066,22 +1114,14 @@
       self._EmitExplicitIndexedGetter(dart_element_type)
     else:
       is_custom = any((op.id == 'item' and 'Custom' in op.ext_attrs) for op in self._interface.operations)
-      dart_native_name = \
-          self.DeriveNativeName("NativeIndexed", "Getter")
       # First emit a toplevel function to do the native call
       # Calls to this are emitted elsewhere,
-      resolver_string = \
-          DeriveResolverString(self._interface.id, "item", "Callback",
-                               ["unsigned long"], self._database, is_custom)
+      dart_native_name, resolver_string = \
+          self.DeriveNativeEntry("item", "Callback", ["unsigned long"],
+                                 is_custom)
       if resolver_string in _cpp_resolver_string_map:
           resolver_string = \
               _cpp_resolver_string_map[resolver_string]
-      self._native_class_emitter.Emit(
-          '\n'
-          '  static $(DART_NATIVE_NAME)(mthis, index) '
-          'native "$(RESOLVER_STRING)";\n',
-          DART_NATIVE_NAME = dart_native_name,
-          RESOLVER_STRING=resolver_string)
 
       # Emit the method which calls the toplevel function, along with
       # the [] operator.
@@ -1196,14 +1236,14 @@
       auto_scope_setup = self._GenerateAutoSetupScope(info.name, native_suffix)
       type_ids = [argument.type.id
                   for argument in operation.arguments[:len(info.param_infos)]]
-      resolver_string = \
-          DeriveResolverString(self._interface.id, operation.id,
-                               native_suffix, type_ids, self._database, is_custom)
+      native_entry = \
+          self.DeriveNativeEntry(operation.id, native_suffix, type_ids,
+                                 is_custom)
       cpp_callback_name = self._GenerateNativeBinding(
         info.name, argument_count, dart_declaration,
         info.IsStatic(), return_type, parameters,
-        native_suffix, is_custom, auto_scope_setup, 
-        resolver_string=resolver_string)
+        native_suffix, is_custom, auto_scope_setup,
+        native_entry=native_entry)
       if not is_custom:
         self._GenerateOperationNativeCallback(operation, operation.arguments, cpp_callback_name, auto_scope_setup)
     else:
@@ -1221,11 +1261,6 @@
       native_suffix = 'Callback'
       is_custom = 'Custom' in operation.ext_attrs
       base_name = '_%s_%s' % (operation.id, version)
-      overload_base_name = \
-          self.DeriveNativeName(base_name, native_suffix)
-      overload_name = \
-          self.DeriveQualifiedBlinkName(self._interface.id,
-                                        overload_base_name)
       static = True
       if not operation.is_static:
         actuals = ['this'] + actuals
@@ -1236,10 +1271,13 @@
         base_name, formals_s)
       type_ids = [argument.type.id
                   for argument in operation.arguments[:argument_count]]
-      resolver_string = \
-          DeriveResolverString(self._interface.id, operation.id,
-                               native_suffix, type_ids, self._database, is_custom)
-
+      native_entry = \
+          self.DeriveNativeEntry(operation.id, native_suffix, type_ids,
+                                 is_custom)
+      overload_base_name = native_entry[0]
+      overload_name = \
+          self.DeriveQualifiedBlinkName(self._interface.id,
+                                        overload_base_name)
       call_emitter.Emit('$NAME($ARGS)', NAME=overload_name, ARGS=actuals_s)
       auto_scope_setup = \
         self._GenerateAutoSetupScope(base_name, native_suffix)
@@ -1247,7 +1285,7 @@
         base_name, (0 if static else 1) + argument_count,
         dart_declaration, static, return_type, formals,
         native_suffix, is_custom, auto_scope_setup, emit_metadata=False,
-        emit_to_native=True, resolver_string=resolver_string)
+        emit_to_native=True, native_entry=native_entry)
       if not is_custom:
         self._GenerateOperationNativeCallback(operation,
           operation.arguments[:argument_count], cpp_callback_name,
@@ -1512,7 +1550,8 @@
         if isinstance(argument, IDLArgument):
           if IsOptional(argument) and not self._IsArgumentOptionalInWebCore(node, argument):
             return True
-          if argument.ext_attrs.get('Default') == 'NullString':
+          # argument default to null (e.g., DOMString arg = null).
+          if argument.default_value_is_null:
             return True
           if _IsOptionalStringArgumentInInitEventMethod(self._interface, node, argument):
             return True
@@ -1646,18 +1685,18 @@
   def _GenerateNativeBinding(self, idl_name, argument_count, dart_declaration,
       static, return_type, parameters, native_suffix, is_custom,
       auto_scope_setup=True, emit_metadata=True, emit_to_native=False,
-      resolver_string=None):
+      native_entry=None):
     metadata = []
     if emit_metadata:
       metadata = self._metadata.GetFormattedMetadata(
           self._renamer.GetLibraryName(self._interface),
           self._interface, idl_name, '  ')
-    dart_native_name = \
-        self.DeriveNativeName(idl_name, native_suffix)
 
-    if (resolver_string):
-        native_binding = resolver_string
+    if (native_entry):
+        dart_native_name, native_binding = native_entry
     else:
+        dart_native_name = \
+            self.DeriveNativeName(idl_name, native_suffix)
         native_binding_id = self._interface.id
         native_binding_id = TypeIdToBlinkName(native_binding_id, self._database)
         native_binding = \
@@ -1672,7 +1711,9 @@
     if native_binding in _cpp_resolver_string_map:
         native_binding = \
             _cpp_resolver_string_map[native_binding]
-    self._native_class_emitter.Emit(
+    if dart_native_name not in self._blink_entries:
+      self._blink_entries.add(dart_native_name)
+      self._native_class_emitter.Emit(
         '\n'
         '  static $DART_NAME($FORMALS) native "$NATIVE_BINDING";\n',
         DART_NAME=dart_native_name,
@@ -1749,7 +1790,7 @@
       return False
     if operation.id in ['addEventListener', 'removeEventListener'] and argument.id == 'useCapture':
       return False
-    if 'ForceOptional' in argument.ext_attrs:
+    if 'DartForceOptional' in argument.ext_attrs:
       return False
     if argument.type.id == 'Dictionary':
       return False
@@ -1957,5 +1998,5 @@
   return (
       interface.id.endswith('Event') and
       operation.id.startswith('init') and
-      argument.ext_attrs.get('Default') == 'Undefined' and
+      argument.default_value == 'Undefined' and
       argument.type.id == 'DOMString')
diff --git a/tools/dom/src/WebGLConstants.dart b/tools/dom/src/WebGLConstants.dart
index eac8c11..d28346d 100644
--- a/tools/dom/src/WebGLConstants.dart
+++ b/tools/dom/src/WebGLConstants.dart
@@ -4,299 +4,299 @@
 
 part of dom.web_gl;
 
-const int ACTIVE_ATTRIBUTES = RenderingContext.ACTIVE_ATTRIBUTES;
-const int ACTIVE_TEXTURE = RenderingContext.ACTIVE_TEXTURE;
-const int ACTIVE_UNIFORMS = RenderingContext.ACTIVE_UNIFORMS;
-const int ALIASED_LINE_WIDTH_RANGE = RenderingContext.ALIASED_LINE_WIDTH_RANGE;
-const int ALIASED_POINT_SIZE_RANGE = RenderingContext.ALIASED_POINT_SIZE_RANGE;
-const int ALPHA = RenderingContext.ALPHA;
-const int ALPHA_BITS = RenderingContext.ALPHA_BITS;
-const int ALWAYS = RenderingContext.ALWAYS;
-const int ARRAY_BUFFER = RenderingContext.ARRAY_BUFFER;
-const int ARRAY_BUFFER_BINDING = RenderingContext.ARRAY_BUFFER_BINDING;
-const int ATTACHED_SHADERS = RenderingContext.ATTACHED_SHADERS;
-const int BACK = RenderingContext.BACK;
-const int BLEND = RenderingContext.BLEND;
-const int BLEND_COLOR = RenderingContext.BLEND_COLOR;
-const int BLEND_DST_ALPHA = RenderingContext.BLEND_DST_ALPHA;
-const int BLEND_DST_RGB = RenderingContext.BLEND_DST_RGB;
-const int BLEND_EQUATION = RenderingContext.BLEND_EQUATION;
-const int BLEND_EQUATION_ALPHA = RenderingContext.BLEND_EQUATION_ALPHA;
-const int BLEND_EQUATION_RGB = RenderingContext.BLEND_EQUATION_RGB;
-const int BLEND_SRC_ALPHA = RenderingContext.BLEND_SRC_ALPHA;
-const int BLEND_SRC_RGB = RenderingContext.BLEND_SRC_RGB;
-const int BLUE_BITS = RenderingContext.BLUE_BITS;
-const int BOOL = RenderingContext.BOOL;
-const int BOOL_VEC2 = RenderingContext.BOOL_VEC2;
-const int BOOL_VEC3 = RenderingContext.BOOL_VEC3;
-const int BOOL_VEC4 = RenderingContext.BOOL_VEC4;
-const int BROWSER_DEFAULT_WEBGL = RenderingContext.BROWSER_DEFAULT_WEBGL;
-const int BUFFER_SIZE = RenderingContext.BUFFER_SIZE;
-const int BUFFER_USAGE = RenderingContext.BUFFER_USAGE;
-const int BYTE = RenderingContext.BYTE;
-const int CCW = RenderingContext.CCW;
-const int CLAMP_TO_EDGE = RenderingContext.CLAMP_TO_EDGE;
-const int COLOR_ATTACHMENT0 = RenderingContext.COLOR_ATTACHMENT0;
-const int COLOR_BUFFER_BIT = RenderingContext.COLOR_BUFFER_BIT;
-const int COLOR_CLEAR_VALUE = RenderingContext.COLOR_CLEAR_VALUE;
-const int COLOR_WRITEMASK = RenderingContext.COLOR_WRITEMASK;
-const int COMPILE_STATUS = RenderingContext.COMPILE_STATUS;
-const int COMPRESSED_TEXTURE_FORMATS = RenderingContext.COMPRESSED_TEXTURE_FORMATS;
-const int CONSTANT_ALPHA = RenderingContext.CONSTANT_ALPHA;
-const int CONSTANT_COLOR = RenderingContext.CONSTANT_COLOR;
-const int CONTEXT_LOST_WEBGL = RenderingContext.CONTEXT_LOST_WEBGL;
-const int CULL_FACE = RenderingContext.CULL_FACE;
-const int CULL_FACE_MODE = RenderingContext.CULL_FACE_MODE;
-const int CURRENT_PROGRAM = RenderingContext.CURRENT_PROGRAM;
-const int CURRENT_VERTEX_ATTRIB = RenderingContext.CURRENT_VERTEX_ATTRIB;
-const int CW = RenderingContext.CW;
-const int DECR = RenderingContext.DECR;
-const int DECR_WRAP = RenderingContext.DECR_WRAP;
-const int DELETE_STATUS = RenderingContext.DELETE_STATUS;
-const int DEPTH_ATTACHMENT = RenderingContext.DEPTH_ATTACHMENT;
-const int DEPTH_BITS = RenderingContext.DEPTH_BITS;
-const int DEPTH_BUFFER_BIT = RenderingContext.DEPTH_BUFFER_BIT;
-const int DEPTH_CLEAR_VALUE = RenderingContext.DEPTH_CLEAR_VALUE;
-const int DEPTH_COMPONENT = RenderingContext.DEPTH_COMPONENT;
-const int DEPTH_COMPONENT16 = RenderingContext.DEPTH_COMPONENT16;
-const int DEPTH_FUNC = RenderingContext.DEPTH_FUNC;
-const int DEPTH_RANGE = RenderingContext.DEPTH_RANGE;
-const int DEPTH_STENCIL = RenderingContext.DEPTH_STENCIL;
-const int DEPTH_STENCIL_ATTACHMENT = RenderingContext.DEPTH_STENCIL_ATTACHMENT;
-const int DEPTH_TEST = RenderingContext.DEPTH_TEST;
-const int DEPTH_WRITEMASK = RenderingContext.DEPTH_WRITEMASK;
-const int DITHER = RenderingContext.DITHER;
-const int DONT_CARE = RenderingContext.DONT_CARE;
-const int DST_ALPHA = RenderingContext.DST_ALPHA;
-const int DST_COLOR = RenderingContext.DST_COLOR;
-const int DYNAMIC_DRAW = RenderingContext.DYNAMIC_DRAW;
-const int ELEMENT_ARRAY_BUFFER = RenderingContext.ELEMENT_ARRAY_BUFFER;
-const int ELEMENT_ARRAY_BUFFER_BINDING = RenderingContext.ELEMENT_ARRAY_BUFFER_BINDING;
-const int EQUAL = RenderingContext.EQUAL;
-const int FASTEST = RenderingContext.FASTEST;
-const int FLOAT = RenderingContext.FLOAT;
-const int FLOAT_MAT2 = RenderingContext.FLOAT_MAT2;
-const int FLOAT_MAT3 = RenderingContext.FLOAT_MAT3;
-const int FLOAT_MAT4 = RenderingContext.FLOAT_MAT4;
-const int FLOAT_VEC2 = RenderingContext.FLOAT_VEC2;
-const int FLOAT_VEC3 = RenderingContext.FLOAT_VEC3;
-const int FLOAT_VEC4 = RenderingContext.FLOAT_VEC4;
-const int FRAGMENT_SHADER = RenderingContext.FRAGMENT_SHADER;
-const int FRAMEBUFFER = RenderingContext.FRAMEBUFFER;
-const int FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = RenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME;
-const int FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = RenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE;
-const int FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = RenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE;
-const int FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = RenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL;
-const int FRAMEBUFFER_BINDING = RenderingContext.FRAMEBUFFER_BINDING;
-const int FRAMEBUFFER_COMPLETE = RenderingContext.FRAMEBUFFER_COMPLETE;
-const int FRAMEBUFFER_INCOMPLETE_ATTACHMENT = RenderingContext.FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
-const int FRAMEBUFFER_INCOMPLETE_DIMENSIONS = RenderingContext.FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
-const int FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = RenderingContext.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
-const int FRAMEBUFFER_UNSUPPORTED = RenderingContext.FRAMEBUFFER_UNSUPPORTED;
-const int FRONT = RenderingContext.FRONT;
-const int FRONT_AND_BACK = RenderingContext.FRONT_AND_BACK;
-const int FRONT_FACE = RenderingContext.FRONT_FACE;
-const int FUNC_ADD = RenderingContext.FUNC_ADD;
-const int FUNC_REVERSE_SUBTRACT = RenderingContext.FUNC_REVERSE_SUBTRACT;
-const int FUNC_SUBTRACT = RenderingContext.FUNC_SUBTRACT;
-const int GENERATE_MIPMAP_HINT = RenderingContext.GENERATE_MIPMAP_HINT;
-const int GEQUAL = RenderingContext.GEQUAL;
-const int GREATER = RenderingContext.GREATER;
-const int GREEN_BITS = RenderingContext.GREEN_BITS;
+const int ACTIVE_ATTRIBUTES = RenderingContextBase.ACTIVE_ATTRIBUTES;
+const int ACTIVE_TEXTURE = RenderingContextBase.ACTIVE_TEXTURE;
+const int ACTIVE_UNIFORMS = RenderingContextBase.ACTIVE_UNIFORMS;
+const int ALIASED_LINE_WIDTH_RANGE = RenderingContextBase.ALIASED_LINE_WIDTH_RANGE;
+const int ALIASED_POINT_SIZE_RANGE = RenderingContextBase.ALIASED_POINT_SIZE_RANGE;
+const int ALPHA = RenderingContextBase.ALPHA;
+const int ALPHA_BITS = RenderingContextBase.ALPHA_BITS;
+const int ALWAYS = RenderingContextBase.ALWAYS;
+const int ARRAY_BUFFER = RenderingContextBase.ARRAY_BUFFER;
+const int ARRAY_BUFFER_BINDING = RenderingContextBase.ARRAY_BUFFER_BINDING;
+const int ATTACHED_SHADERS = RenderingContextBase.ATTACHED_SHADERS;
+const int BACK = RenderingContextBase.BACK;
+const int BLEND = RenderingContextBase.BLEND;
+const int BLEND_COLOR = RenderingContextBase.BLEND_COLOR;
+const int BLEND_DST_ALPHA = RenderingContextBase.BLEND_DST_ALPHA;
+const int BLEND_DST_RGB = RenderingContextBase.BLEND_DST_RGB;
+const int BLEND_EQUATION = RenderingContextBase.BLEND_EQUATION;
+const int BLEND_EQUATION_ALPHA = RenderingContextBase.BLEND_EQUATION_ALPHA;
+const int BLEND_EQUATION_RGB = RenderingContextBase.BLEND_EQUATION_RGB;
+const int BLEND_SRC_ALPHA = RenderingContextBase.BLEND_SRC_ALPHA;
+const int BLEND_SRC_RGB = RenderingContextBase.BLEND_SRC_RGB;
+const int BLUE_BITS = RenderingContextBase.BLUE_BITS;
+const int BOOL = RenderingContextBase.BOOL;
+const int BOOL_VEC2 = RenderingContextBase.BOOL_VEC2;
+const int BOOL_VEC3 = RenderingContextBase.BOOL_VEC3;
+const int BOOL_VEC4 = RenderingContextBase.BOOL_VEC4;
+const int BROWSER_DEFAULT_WEBGL = RenderingContextBase.BROWSER_DEFAULT_WEBGL;
+const int BUFFER_SIZE = RenderingContextBase.BUFFER_SIZE;
+const int BUFFER_USAGE = RenderingContextBase.BUFFER_USAGE;
+const int BYTE = RenderingContextBase.BYTE;
+const int CCW = RenderingContextBase.CCW;
+const int CLAMP_TO_EDGE = RenderingContextBase.CLAMP_TO_EDGE;
+const int COLOR_ATTACHMENT0 = RenderingContextBase.COLOR_ATTACHMENT0;
+const int COLOR_BUFFER_BIT = RenderingContextBase.COLOR_BUFFER_BIT;
+const int COLOR_CLEAR_VALUE = RenderingContextBase.COLOR_CLEAR_VALUE;
+const int COLOR_WRITEMASK = RenderingContextBase.COLOR_WRITEMASK;
+const int COMPILE_STATUS = RenderingContextBase.COMPILE_STATUS;
+const int COMPRESSED_TEXTURE_FORMATS = RenderingContextBase.COMPRESSED_TEXTURE_FORMATS;
+const int CONSTANT_ALPHA = RenderingContextBase.CONSTANT_ALPHA;
+const int CONSTANT_COLOR = RenderingContextBase.CONSTANT_COLOR;
+const int CONTEXT_LOST_WEBGL = RenderingContextBase.CONTEXT_LOST_WEBGL;
+const int CULL_FACE = RenderingContextBase.CULL_FACE;
+const int CULL_FACE_MODE = RenderingContextBase.CULL_FACE_MODE;
+const int CURRENT_PROGRAM = RenderingContextBase.CURRENT_PROGRAM;
+const int CURRENT_VERTEX_ATTRIB = RenderingContextBase.CURRENT_VERTEX_ATTRIB;
+const int CW = RenderingContextBase.CW;
+const int DECR = RenderingContextBase.DECR;
+const int DECR_WRAP = RenderingContextBase.DECR_WRAP;
+const int DELETE_STATUS = RenderingContextBase.DELETE_STATUS;
+const int DEPTH_ATTACHMENT = RenderingContextBase.DEPTH_ATTACHMENT;
+const int DEPTH_BITS = RenderingContextBase.DEPTH_BITS;
+const int DEPTH_BUFFER_BIT = RenderingContextBase.DEPTH_BUFFER_BIT;
+const int DEPTH_CLEAR_VALUE = RenderingContextBase.DEPTH_CLEAR_VALUE;
+const int DEPTH_COMPONENT = RenderingContextBase.DEPTH_COMPONENT;
+const int DEPTH_COMPONENT16 = RenderingContextBase.DEPTH_COMPONENT16;
+const int DEPTH_FUNC = RenderingContextBase.DEPTH_FUNC;
+const int DEPTH_RANGE = RenderingContextBase.DEPTH_RANGE;
+const int DEPTH_STENCIL = RenderingContextBase.DEPTH_STENCIL;
+const int DEPTH_STENCIL_ATTACHMENT = RenderingContextBase.DEPTH_STENCIL_ATTACHMENT;
+const int DEPTH_TEST = RenderingContextBase.DEPTH_TEST;
+const int DEPTH_WRITEMASK = RenderingContextBase.DEPTH_WRITEMASK;
+const int DITHER = RenderingContextBase.DITHER;
+const int DONT_CARE = RenderingContextBase.DONT_CARE;
+const int DST_ALPHA = RenderingContextBase.DST_ALPHA;
+const int DST_COLOR = RenderingContextBase.DST_COLOR;
+const int DYNAMIC_DRAW = RenderingContextBase.DYNAMIC_DRAW;
+const int ELEMENT_ARRAY_BUFFER = RenderingContextBase.ELEMENT_ARRAY_BUFFER;
+const int ELEMENT_ARRAY_BUFFER_BINDING = RenderingContextBase.ELEMENT_ARRAY_BUFFER_BINDING;
+const int EQUAL = RenderingContextBase.EQUAL;
+const int FASTEST = RenderingContextBase.FASTEST;
+const int FLOAT = RenderingContextBase.FLOAT;
+const int FLOAT_MAT2 = RenderingContextBase.FLOAT_MAT2;
+const int FLOAT_MAT3 = RenderingContextBase.FLOAT_MAT3;
+const int FLOAT_MAT4 = RenderingContextBase.FLOAT_MAT4;
+const int FLOAT_VEC2 = RenderingContextBase.FLOAT_VEC2;
+const int FLOAT_VEC3 = RenderingContextBase.FLOAT_VEC3;
+const int FLOAT_VEC4 = RenderingContextBase.FLOAT_VEC4;
+const int FRAGMENT_SHADER = RenderingContextBase.FRAGMENT_SHADER;
+const int FRAMEBUFFER = RenderingContextBase.FRAMEBUFFER;
+const int FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = RenderingContextBase.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME;
+const int FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = RenderingContextBase.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE;
+const int FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = RenderingContextBase.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE;
+const int FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = RenderingContextBase.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL;
+const int FRAMEBUFFER_BINDING = RenderingContextBase.FRAMEBUFFER_BINDING;
+const int FRAMEBUFFER_COMPLETE = RenderingContextBase.FRAMEBUFFER_COMPLETE;
+const int FRAMEBUFFER_INCOMPLETE_ATTACHMENT = RenderingContextBase.FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
+const int FRAMEBUFFER_INCOMPLETE_DIMENSIONS = RenderingContextBase.FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
+const int FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = RenderingContextBase.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
+const int FRAMEBUFFER_UNSUPPORTED = RenderingContextBase.FRAMEBUFFER_UNSUPPORTED;
+const int FRONT = RenderingContextBase.FRONT;
+const int FRONT_AND_BACK = RenderingContextBase.FRONT_AND_BACK;
+const int FRONT_FACE = RenderingContextBase.FRONT_FACE;
+const int FUNC_ADD = RenderingContextBase.FUNC_ADD;
+const int FUNC_REVERSE_SUBTRACT = RenderingContextBase.FUNC_REVERSE_SUBTRACT;
+const int FUNC_SUBTRACT = RenderingContextBase.FUNC_SUBTRACT;
+const int GENERATE_MIPMAP_HINT = RenderingContextBase.GENERATE_MIPMAP_HINT;
+const int GEQUAL = RenderingContextBase.GEQUAL;
+const int GREATER = RenderingContextBase.GREATER;
+const int GREEN_BITS = RenderingContextBase.GREEN_BITS;
 const int HALF_FLOAT_OES = OesTextureHalfFloat.HALF_FLOAT_OES;
-const int HIGH_FLOAT = RenderingContext.HIGH_FLOAT;
-const int HIGH_INT = RenderingContext.HIGH_INT;
-const int INCR = RenderingContext.INCR;
-const int INCR_WRAP = RenderingContext.INCR_WRAP;
-const int INT = RenderingContext.INT;
-const int INT_VEC2 = RenderingContext.INT_VEC2;
-const int INT_VEC3 = RenderingContext.INT_VEC3;
-const int INT_VEC4 = RenderingContext.INT_VEC4;
-const int INVALID_ENUM = RenderingContext.INVALID_ENUM;
-const int INVALID_FRAMEBUFFER_OPERATION = RenderingContext.INVALID_FRAMEBUFFER_OPERATION;
-const int INVALID_OPERATION = RenderingContext.INVALID_OPERATION;
-const int INVALID_VALUE = RenderingContext.INVALID_VALUE;
-const int INVERT = RenderingContext.INVERT;
-const int KEEP = RenderingContext.KEEP;
-const int LEQUAL = RenderingContext.LEQUAL;
-const int LESS = RenderingContext.LESS;
-const int LINEAR = RenderingContext.LINEAR;
-const int LINEAR_MIPMAP_LINEAR = RenderingContext.LINEAR_MIPMAP_LINEAR;
-const int LINEAR_MIPMAP_NEAREST = RenderingContext.LINEAR_MIPMAP_NEAREST;
-const int LINES = RenderingContext.LINES;
-const int LINE_LOOP = RenderingContext.LINE_LOOP;
-const int LINE_STRIP = RenderingContext.LINE_STRIP;
-const int LINE_WIDTH = RenderingContext.LINE_WIDTH;
-const int LINK_STATUS = RenderingContext.LINK_STATUS;
-const int LOW_FLOAT = RenderingContext.LOW_FLOAT;
-const int LOW_INT = RenderingContext.LOW_INT;
-const int LUMINANCE = RenderingContext.LUMINANCE;
-const int LUMINANCE_ALPHA = RenderingContext.LUMINANCE_ALPHA;
-const int MAX_COMBINED_TEXTURE_IMAGE_UNITS = RenderingContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS;
-const int MAX_CUBE_MAP_TEXTURE_SIZE = RenderingContext.MAX_CUBE_MAP_TEXTURE_SIZE;
-const int MAX_FRAGMENT_UNIFORM_VECTORS = RenderingContext.MAX_FRAGMENT_UNIFORM_VECTORS;
-const int MAX_RENDERBUFFER_SIZE = RenderingContext.MAX_RENDERBUFFER_SIZE;
-const int MAX_TEXTURE_IMAGE_UNITS = RenderingContext.MAX_TEXTURE_IMAGE_UNITS;
-const int MAX_TEXTURE_SIZE = RenderingContext.MAX_TEXTURE_SIZE;
-const int MAX_VARYING_VECTORS = RenderingContext.MAX_VARYING_VECTORS;
-const int MAX_VERTEX_ATTRIBS = RenderingContext.MAX_VERTEX_ATTRIBS;
-const int MAX_VERTEX_TEXTURE_IMAGE_UNITS = RenderingContext.MAX_VERTEX_TEXTURE_IMAGE_UNITS;
-const int MAX_VERTEX_UNIFORM_VECTORS = RenderingContext.MAX_VERTEX_UNIFORM_VECTORS;
-const int MAX_VIEWPORT_DIMS = RenderingContext.MAX_VIEWPORT_DIMS;
-const int MEDIUM_FLOAT = RenderingContext.MEDIUM_FLOAT;
-const int MEDIUM_INT = RenderingContext.MEDIUM_INT;
-const int MIRRORED_REPEAT = RenderingContext.MIRRORED_REPEAT;
-const int NEAREST = RenderingContext.NEAREST;
-const int NEAREST_MIPMAP_LINEAR = RenderingContext.NEAREST_MIPMAP_LINEAR;
-const int NEAREST_MIPMAP_NEAREST = RenderingContext.NEAREST_MIPMAP_NEAREST;
-const int NEVER = RenderingContext.NEVER;
-const int NICEST = RenderingContext.NICEST;
-const int NONE = RenderingContext.NONE;
-const int NOTEQUAL = RenderingContext.NOTEQUAL;
-const int NO_ERROR = RenderingContext.NO_ERROR;
-const int ONE = RenderingContext.ONE;
-const int ONE_MINUS_CONSTANT_ALPHA = RenderingContext.ONE_MINUS_CONSTANT_ALPHA;
-const int ONE_MINUS_CONSTANT_COLOR = RenderingContext.ONE_MINUS_CONSTANT_COLOR;
-const int ONE_MINUS_DST_ALPHA = RenderingContext.ONE_MINUS_DST_ALPHA;
-const int ONE_MINUS_DST_COLOR = RenderingContext.ONE_MINUS_DST_COLOR;
-const int ONE_MINUS_SRC_ALPHA = RenderingContext.ONE_MINUS_SRC_ALPHA;
-const int ONE_MINUS_SRC_COLOR = RenderingContext.ONE_MINUS_SRC_COLOR;
-const int OUT_OF_MEMORY = RenderingContext.OUT_OF_MEMORY;
-const int PACK_ALIGNMENT = RenderingContext.PACK_ALIGNMENT;
-const int POINTS = RenderingContext.POINTS;
-const int POLYGON_OFFSET_FACTOR = RenderingContext.POLYGON_OFFSET_FACTOR;
-const int POLYGON_OFFSET_FILL = RenderingContext.POLYGON_OFFSET_FILL;
-const int POLYGON_OFFSET_UNITS = RenderingContext.POLYGON_OFFSET_UNITS;
-const int RED_BITS = RenderingContext.RED_BITS;
-const int RENDERBUFFER = RenderingContext.RENDERBUFFER;
-const int RENDERBUFFER_ALPHA_SIZE = RenderingContext.RENDERBUFFER_ALPHA_SIZE;
-const int RENDERBUFFER_BINDING = RenderingContext.RENDERBUFFER_BINDING;
-const int RENDERBUFFER_BLUE_SIZE = RenderingContext.RENDERBUFFER_BLUE_SIZE;
-const int RENDERBUFFER_DEPTH_SIZE = RenderingContext.RENDERBUFFER_DEPTH_SIZE;
-const int RENDERBUFFER_GREEN_SIZE = RenderingContext.RENDERBUFFER_GREEN_SIZE;
-const int RENDERBUFFER_HEIGHT = RenderingContext.RENDERBUFFER_HEIGHT;
-const int RENDERBUFFER_INTERNAL_FORMAT = RenderingContext.RENDERBUFFER_INTERNAL_FORMAT;
-const int RENDERBUFFER_RED_SIZE = RenderingContext.RENDERBUFFER_RED_SIZE;
-const int RENDERBUFFER_STENCIL_SIZE = RenderingContext.RENDERBUFFER_STENCIL_SIZE;
-const int RENDERBUFFER_WIDTH = RenderingContext.RENDERBUFFER_WIDTH;
-const int RENDERER = RenderingContext.RENDERER;
-const int REPEAT = RenderingContext.REPEAT;
-const int REPLACE = RenderingContext.REPLACE;
-const int RGB = RenderingContext.RGB;
-const int RGB565 = RenderingContext.RGB565;
-const int RGB5_A1 = RenderingContext.RGB5_A1;
-const int RGBA = RenderingContext.RGBA;
-const int RGBA4 = RenderingContext.RGBA4;
-const int SAMPLER_2D = RenderingContext.SAMPLER_2D;
-const int SAMPLER_CUBE = RenderingContext.SAMPLER_CUBE;
-const int SAMPLES = RenderingContext.SAMPLES;
-const int SAMPLE_ALPHA_TO_COVERAGE = RenderingContext.SAMPLE_ALPHA_TO_COVERAGE;
-const int SAMPLE_BUFFERS = RenderingContext.SAMPLE_BUFFERS;
-const int SAMPLE_COVERAGE = RenderingContext.SAMPLE_COVERAGE;
-const int SAMPLE_COVERAGE_INVERT = RenderingContext.SAMPLE_COVERAGE_INVERT;
-const int SAMPLE_COVERAGE_VALUE = RenderingContext.SAMPLE_COVERAGE_VALUE;
-const int SCISSOR_BOX = RenderingContext.SCISSOR_BOX;
-const int SCISSOR_TEST = RenderingContext.SCISSOR_TEST;
-const int SHADER_TYPE = RenderingContext.SHADER_TYPE;
-const int SHADING_LANGUAGE_VERSION = RenderingContext.SHADING_LANGUAGE_VERSION;
-const int SHORT = RenderingContext.SHORT;
-const int SRC_ALPHA = RenderingContext.SRC_ALPHA;
-const int SRC_ALPHA_SATURATE = RenderingContext.SRC_ALPHA_SATURATE;
-const int SRC_COLOR = RenderingContext.SRC_COLOR;
-const int STATIC_DRAW = RenderingContext.STATIC_DRAW;
-const int STENCIL_ATTACHMENT = RenderingContext.STENCIL_ATTACHMENT;
-const int STENCIL_BACK_FAIL = RenderingContext.STENCIL_BACK_FAIL;
-const int STENCIL_BACK_FUNC = RenderingContext.STENCIL_BACK_FUNC;
-const int STENCIL_BACK_PASS_DEPTH_FAIL = RenderingContext.STENCIL_BACK_PASS_DEPTH_FAIL;
-const int STENCIL_BACK_PASS_DEPTH_PASS = RenderingContext.STENCIL_BACK_PASS_DEPTH_PASS;
-const int STENCIL_BACK_REF = RenderingContext.STENCIL_BACK_REF;
-const int STENCIL_BACK_VALUE_MASK = RenderingContext.STENCIL_BACK_VALUE_MASK;
-const int STENCIL_BACK_WRITEMASK = RenderingContext.STENCIL_BACK_WRITEMASK;
-const int STENCIL_BITS = RenderingContext.STENCIL_BITS;
-const int STENCIL_BUFFER_BIT = RenderingContext.STENCIL_BUFFER_BIT;
-const int STENCIL_CLEAR_VALUE = RenderingContext.STENCIL_CLEAR_VALUE;
-const int STENCIL_FAIL = RenderingContext.STENCIL_FAIL;
-const int STENCIL_FUNC = RenderingContext.STENCIL_FUNC;
-const int STENCIL_INDEX = RenderingContext.STENCIL_INDEX;
-const int STENCIL_INDEX8 = RenderingContext.STENCIL_INDEX8;
-const int STENCIL_PASS_DEPTH_FAIL = RenderingContext.STENCIL_PASS_DEPTH_FAIL;
-const int STENCIL_PASS_DEPTH_PASS = RenderingContext.STENCIL_PASS_DEPTH_PASS;
-const int STENCIL_REF = RenderingContext.STENCIL_REF;
-const int STENCIL_TEST = RenderingContext.STENCIL_TEST;
-const int STENCIL_VALUE_MASK = RenderingContext.STENCIL_VALUE_MASK;
-const int STENCIL_WRITEMASK = RenderingContext.STENCIL_WRITEMASK;
-const int STREAM_DRAW = RenderingContext.STREAM_DRAW;
-const int SUBPIXEL_BITS = RenderingContext.SUBPIXEL_BITS;
-const int TEXTURE = RenderingContext.TEXTURE;
-const int TEXTURE0 = RenderingContext.TEXTURE0;
-const int TEXTURE1 = RenderingContext.TEXTURE1;
-const int TEXTURE10 = RenderingContext.TEXTURE10;
-const int TEXTURE11 = RenderingContext.TEXTURE11;
-const int TEXTURE12 = RenderingContext.TEXTURE12;
-const int TEXTURE13 = RenderingContext.TEXTURE13;
-const int TEXTURE14 = RenderingContext.TEXTURE14;
-const int TEXTURE15 = RenderingContext.TEXTURE15;
-const int TEXTURE16 = RenderingContext.TEXTURE16;
-const int TEXTURE17 = RenderingContext.TEXTURE17;
-const int TEXTURE18 = RenderingContext.TEXTURE18;
-const int TEXTURE19 = RenderingContext.TEXTURE19;
-const int TEXTURE2 = RenderingContext.TEXTURE2;
-const int TEXTURE20 = RenderingContext.TEXTURE20;
-const int TEXTURE21 = RenderingContext.TEXTURE21;
-const int TEXTURE22 = RenderingContext.TEXTURE22;
-const int TEXTURE23 = RenderingContext.TEXTURE23;
-const int TEXTURE24 = RenderingContext.TEXTURE24;
-const int TEXTURE25 = RenderingContext.TEXTURE25;
-const int TEXTURE26 = RenderingContext.TEXTURE26;
-const int TEXTURE27 = RenderingContext.TEXTURE27;
-const int TEXTURE28 = RenderingContext.TEXTURE28;
-const int TEXTURE29 = RenderingContext.TEXTURE29;
-const int TEXTURE3 = RenderingContext.TEXTURE3;
-const int TEXTURE30 = RenderingContext.TEXTURE30;
-const int TEXTURE31 = RenderingContext.TEXTURE31;
-const int TEXTURE4 = RenderingContext.TEXTURE4;
-const int TEXTURE5 = RenderingContext.TEXTURE5;
-const int TEXTURE6 = RenderingContext.TEXTURE6;
-const int TEXTURE7 = RenderingContext.TEXTURE7;
-const int TEXTURE8 = RenderingContext.TEXTURE8;
-const int TEXTURE9 = RenderingContext.TEXTURE9;
-const int TEXTURE_2D = RenderingContext.TEXTURE_2D;
-const int TEXTURE_BINDING_2D = RenderingContext.TEXTURE_BINDING_2D;
-const int TEXTURE_BINDING_CUBE_MAP = RenderingContext.TEXTURE_BINDING_CUBE_MAP;
-const int TEXTURE_CUBE_MAP = RenderingContext.TEXTURE_CUBE_MAP;
-const int TEXTURE_CUBE_MAP_NEGATIVE_X = RenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_X;
-const int TEXTURE_CUBE_MAP_NEGATIVE_Y = RenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Y;
-const int TEXTURE_CUBE_MAP_NEGATIVE_Z = RenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Z;
-const int TEXTURE_CUBE_MAP_POSITIVE_X = RenderingContext.TEXTURE_CUBE_MAP_POSITIVE_X;
-const int TEXTURE_CUBE_MAP_POSITIVE_Y = RenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Y;
-const int TEXTURE_CUBE_MAP_POSITIVE_Z = RenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Z;
-const int TEXTURE_MAG_FILTER = RenderingContext.TEXTURE_MAG_FILTER;
-const int TEXTURE_MIN_FILTER = RenderingContext.TEXTURE_MIN_FILTER;
-const int TEXTURE_WRAP_S = RenderingContext.TEXTURE_WRAP_S;
-const int TEXTURE_WRAP_T = RenderingContext.TEXTURE_WRAP_T;
-const int TRIANGLES = RenderingContext.TRIANGLES;
-const int TRIANGLE_FAN = RenderingContext.TRIANGLE_FAN;
-const int TRIANGLE_STRIP = RenderingContext.TRIANGLE_STRIP;
-const int UNPACK_ALIGNMENT = RenderingContext.UNPACK_ALIGNMENT;
-const int UNPACK_COLORSPACE_CONVERSION_WEBGL = RenderingContext.UNPACK_COLORSPACE_CONVERSION_WEBGL;
-const int UNPACK_FLIP_Y_WEBGL = RenderingContext.UNPACK_FLIP_Y_WEBGL;
-const int UNPACK_PREMULTIPLY_ALPHA_WEBGL = RenderingContext.UNPACK_PREMULTIPLY_ALPHA_WEBGL;
-const int UNSIGNED_BYTE = RenderingContext.UNSIGNED_BYTE;
-const int UNSIGNED_INT = RenderingContext.UNSIGNED_INT;
-const int UNSIGNED_SHORT = RenderingContext.UNSIGNED_SHORT;
-const int UNSIGNED_SHORT_4_4_4_4 = RenderingContext.UNSIGNED_SHORT_4_4_4_4;
-const int UNSIGNED_SHORT_5_5_5_1 = RenderingContext.UNSIGNED_SHORT_5_5_5_1;
-const int UNSIGNED_SHORT_5_6_5 = RenderingContext.UNSIGNED_SHORT_5_6_5;
-const int VALIDATE_STATUS = RenderingContext.VALIDATE_STATUS;
-const int VENDOR = RenderingContext.VENDOR;
-const int VERSION = RenderingContext.VERSION;
-const int VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = RenderingContext.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING;
-const int VERTEX_ATTRIB_ARRAY_ENABLED = RenderingContext.VERTEX_ATTRIB_ARRAY_ENABLED;
-const int VERTEX_ATTRIB_ARRAY_NORMALIZED = RenderingContext.VERTEX_ATTRIB_ARRAY_NORMALIZED;
-const int VERTEX_ATTRIB_ARRAY_POINTER = RenderingContext.VERTEX_ATTRIB_ARRAY_POINTER;
-const int VERTEX_ATTRIB_ARRAY_SIZE = RenderingContext.VERTEX_ATTRIB_ARRAY_SIZE;
-const int VERTEX_ATTRIB_ARRAY_STRIDE = RenderingContext.VERTEX_ATTRIB_ARRAY_STRIDE;
-const int VERTEX_ATTRIB_ARRAY_TYPE = RenderingContext.VERTEX_ATTRIB_ARRAY_TYPE;
-const int VERTEX_SHADER = RenderingContext.VERTEX_SHADER;
-const int VIEWPORT = RenderingContext.VIEWPORT;
-const int ZERO = RenderingContext.ZERO;
+const int HIGH_FLOAT = RenderingContextBase.HIGH_FLOAT;
+const int HIGH_INT = RenderingContextBase.HIGH_INT;
+const int INCR = RenderingContextBase.INCR;
+const int INCR_WRAP = RenderingContextBase.INCR_WRAP;
+const int INT = RenderingContextBase.INT;
+const int INT_VEC2 = RenderingContextBase.INT_VEC2;
+const int INT_VEC3 = RenderingContextBase.INT_VEC3;
+const int INT_VEC4 = RenderingContextBase.INT_VEC4;
+const int INVALID_ENUM = RenderingContextBase.INVALID_ENUM;
+const int INVALID_FRAMEBUFFER_OPERATION = RenderingContextBase.INVALID_FRAMEBUFFER_OPERATION;
+const int INVALID_OPERATION = RenderingContextBase.INVALID_OPERATION;
+const int INVALID_VALUE = RenderingContextBase.INVALID_VALUE;
+const int INVERT = RenderingContextBase.INVERT;
+const int KEEP = RenderingContextBase.KEEP;
+const int LEQUAL = RenderingContextBase.LEQUAL;
+const int LESS = RenderingContextBase.LESS;
+const int LINEAR = RenderingContextBase.LINEAR;
+const int LINEAR_MIPMAP_LINEAR = RenderingContextBase.LINEAR_MIPMAP_LINEAR;
+const int LINEAR_MIPMAP_NEAREST = RenderingContextBase.LINEAR_MIPMAP_NEAREST;
+const int LINES = RenderingContextBase.LINES;
+const int LINE_LOOP = RenderingContextBase.LINE_LOOP;
+const int LINE_STRIP = RenderingContextBase.LINE_STRIP;
+const int LINE_WIDTH = RenderingContextBase.LINE_WIDTH;
+const int LINK_STATUS = RenderingContextBase.LINK_STATUS;
+const int LOW_FLOAT = RenderingContextBase.LOW_FLOAT;
+const int LOW_INT = RenderingContextBase.LOW_INT;
+const int LUMINANCE = RenderingContextBase.LUMINANCE;
+const int LUMINANCE_ALPHA = RenderingContextBase.LUMINANCE_ALPHA;
+const int MAX_COMBINED_TEXTURE_IMAGE_UNITS = RenderingContextBase.MAX_COMBINED_TEXTURE_IMAGE_UNITS;
+const int MAX_CUBE_MAP_TEXTURE_SIZE = RenderingContextBase.MAX_CUBE_MAP_TEXTURE_SIZE;
+const int MAX_FRAGMENT_UNIFORM_VECTORS = RenderingContextBase.MAX_FRAGMENT_UNIFORM_VECTORS;
+const int MAX_RENDERBUFFER_SIZE = RenderingContextBase.MAX_RENDERBUFFER_SIZE;
+const int MAX_TEXTURE_IMAGE_UNITS = RenderingContextBase.MAX_TEXTURE_IMAGE_UNITS;
+const int MAX_TEXTURE_SIZE = RenderingContextBase.MAX_TEXTURE_SIZE;
+const int MAX_VARYING_VECTORS = RenderingContextBase.MAX_VARYING_VECTORS;
+const int MAX_VERTEX_ATTRIBS = RenderingContextBase.MAX_VERTEX_ATTRIBS;
+const int MAX_VERTEX_TEXTURE_IMAGE_UNITS = RenderingContextBase.MAX_VERTEX_TEXTURE_IMAGE_UNITS;
+const int MAX_VERTEX_UNIFORM_VECTORS = RenderingContextBase.MAX_VERTEX_UNIFORM_VECTORS;
+const int MAX_VIEWPORT_DIMS = RenderingContextBase.MAX_VIEWPORT_DIMS;
+const int MEDIUM_FLOAT = RenderingContextBase.MEDIUM_FLOAT;
+const int MEDIUM_INT = RenderingContextBase.MEDIUM_INT;
+const int MIRRORED_REPEAT = RenderingContextBase.MIRRORED_REPEAT;
+const int NEAREST = RenderingContextBase.NEAREST;
+const int NEAREST_MIPMAP_LINEAR = RenderingContextBase.NEAREST_MIPMAP_LINEAR;
+const int NEAREST_MIPMAP_NEAREST = RenderingContextBase.NEAREST_MIPMAP_NEAREST;
+const int NEVER = RenderingContextBase.NEVER;
+const int NICEST = RenderingContextBase.NICEST;
+const int NONE = RenderingContextBase.NONE;
+const int NOTEQUAL = RenderingContextBase.NOTEQUAL;
+const int NO_ERROR = RenderingContextBase.NO_ERROR;
+const int ONE = RenderingContextBase.ONE;
+const int ONE_MINUS_CONSTANT_ALPHA = RenderingContextBase.ONE_MINUS_CONSTANT_ALPHA;
+const int ONE_MINUS_CONSTANT_COLOR = RenderingContextBase.ONE_MINUS_CONSTANT_COLOR;
+const int ONE_MINUS_DST_ALPHA = RenderingContextBase.ONE_MINUS_DST_ALPHA;
+const int ONE_MINUS_DST_COLOR = RenderingContextBase.ONE_MINUS_DST_COLOR;
+const int ONE_MINUS_SRC_ALPHA = RenderingContextBase.ONE_MINUS_SRC_ALPHA;
+const int ONE_MINUS_SRC_COLOR = RenderingContextBase.ONE_MINUS_SRC_COLOR;
+const int OUT_OF_MEMORY = RenderingContextBase.OUT_OF_MEMORY;
+const int PACK_ALIGNMENT = RenderingContextBase.PACK_ALIGNMENT;
+const int POINTS = RenderingContextBase.POINTS;
+const int POLYGON_OFFSET_FACTOR = RenderingContextBase.POLYGON_OFFSET_FACTOR;
+const int POLYGON_OFFSET_FILL = RenderingContextBase.POLYGON_OFFSET_FILL;
+const int POLYGON_OFFSET_UNITS = RenderingContextBase.POLYGON_OFFSET_UNITS;
+const int RED_BITS = RenderingContextBase.RED_BITS;
+const int RENDERBUFFER = RenderingContextBase.RENDERBUFFER;
+const int RENDERBUFFER_ALPHA_SIZE = RenderingContextBase.RENDERBUFFER_ALPHA_SIZE;
+const int RENDERBUFFER_BINDING = RenderingContextBase.RENDERBUFFER_BINDING;
+const int RENDERBUFFER_BLUE_SIZE = RenderingContextBase.RENDERBUFFER_BLUE_SIZE;
+const int RENDERBUFFER_DEPTH_SIZE = RenderingContextBase.RENDERBUFFER_DEPTH_SIZE;
+const int RENDERBUFFER_GREEN_SIZE = RenderingContextBase.RENDERBUFFER_GREEN_SIZE;
+const int RENDERBUFFER_HEIGHT = RenderingContextBase.RENDERBUFFER_HEIGHT;
+const int RENDERBUFFER_INTERNAL_FORMAT = RenderingContextBase.RENDERBUFFER_INTERNAL_FORMAT;
+const int RENDERBUFFER_RED_SIZE = RenderingContextBase.RENDERBUFFER_RED_SIZE;
+const int RENDERBUFFER_STENCIL_SIZE = RenderingContextBase.RENDERBUFFER_STENCIL_SIZE;
+const int RENDERBUFFER_WIDTH = RenderingContextBase.RENDERBUFFER_WIDTH;
+const int RENDERER = RenderingContextBase.RENDERER;
+const int REPEAT = RenderingContextBase.REPEAT;
+const int REPLACE = RenderingContextBase.REPLACE;
+const int RGB = RenderingContextBase.RGB;
+const int RGB565 = RenderingContextBase.RGB565;
+const int RGB5_A1 = RenderingContextBase.RGB5_A1;
+const int RGBA = RenderingContextBase.RGBA;
+const int RGBA4 = RenderingContextBase.RGBA4;
+const int SAMPLER_2D = RenderingContextBase.SAMPLER_2D;
+const int SAMPLER_CUBE = RenderingContextBase.SAMPLER_CUBE;
+const int SAMPLES = RenderingContextBase.SAMPLES;
+const int SAMPLE_ALPHA_TO_COVERAGE = RenderingContextBase.SAMPLE_ALPHA_TO_COVERAGE;
+const int SAMPLE_BUFFERS = RenderingContextBase.SAMPLE_BUFFERS;
+const int SAMPLE_COVERAGE = RenderingContextBase.SAMPLE_COVERAGE;
+const int SAMPLE_COVERAGE_INVERT = RenderingContextBase.SAMPLE_COVERAGE_INVERT;
+const int SAMPLE_COVERAGE_VALUE = RenderingContextBase.SAMPLE_COVERAGE_VALUE;
+const int SCISSOR_BOX = RenderingContextBase.SCISSOR_BOX;
+const int SCISSOR_TEST = RenderingContextBase.SCISSOR_TEST;
+const int SHADER_TYPE = RenderingContextBase.SHADER_TYPE;
+const int SHADING_LANGUAGE_VERSION = RenderingContextBase.SHADING_LANGUAGE_VERSION;
+const int SHORT = RenderingContextBase.SHORT;
+const int SRC_ALPHA = RenderingContextBase.SRC_ALPHA;
+const int SRC_ALPHA_SATURATE = RenderingContextBase.SRC_ALPHA_SATURATE;
+const int SRC_COLOR = RenderingContextBase.SRC_COLOR;
+const int STATIC_DRAW = RenderingContextBase.STATIC_DRAW;
+const int STENCIL_ATTACHMENT = RenderingContextBase.STENCIL_ATTACHMENT;
+const int STENCIL_BACK_FAIL = RenderingContextBase.STENCIL_BACK_FAIL;
+const int STENCIL_BACK_FUNC = RenderingContextBase.STENCIL_BACK_FUNC;
+const int STENCIL_BACK_PASS_DEPTH_FAIL = RenderingContextBase.STENCIL_BACK_PASS_DEPTH_FAIL;
+const int STENCIL_BACK_PASS_DEPTH_PASS = RenderingContextBase.STENCIL_BACK_PASS_DEPTH_PASS;
+const int STENCIL_BACK_REF = RenderingContextBase.STENCIL_BACK_REF;
+const int STENCIL_BACK_VALUE_MASK = RenderingContextBase.STENCIL_BACK_VALUE_MASK;
+const int STENCIL_BACK_WRITEMASK = RenderingContextBase.STENCIL_BACK_WRITEMASK;
+const int STENCIL_BITS = RenderingContextBase.STENCIL_BITS;
+const int STENCIL_BUFFER_BIT = RenderingContextBase.STENCIL_BUFFER_BIT;
+const int STENCIL_CLEAR_VALUE = RenderingContextBase.STENCIL_CLEAR_VALUE;
+const int STENCIL_FAIL = RenderingContextBase.STENCIL_FAIL;
+const int STENCIL_FUNC = RenderingContextBase.STENCIL_FUNC;
+const int STENCIL_INDEX = RenderingContextBase.STENCIL_INDEX;
+const int STENCIL_INDEX8 = RenderingContextBase.STENCIL_INDEX8;
+const int STENCIL_PASS_DEPTH_FAIL = RenderingContextBase.STENCIL_PASS_DEPTH_FAIL;
+const int STENCIL_PASS_DEPTH_PASS = RenderingContextBase.STENCIL_PASS_DEPTH_PASS;
+const int STENCIL_REF = RenderingContextBase.STENCIL_REF;
+const int STENCIL_TEST = RenderingContextBase.STENCIL_TEST;
+const int STENCIL_VALUE_MASK = RenderingContextBase.STENCIL_VALUE_MASK;
+const int STENCIL_WRITEMASK = RenderingContextBase.STENCIL_WRITEMASK;
+const int STREAM_DRAW = RenderingContextBase.STREAM_DRAW;
+const int SUBPIXEL_BITS = RenderingContextBase.SUBPIXEL_BITS;
+const int TEXTURE = RenderingContextBase.TEXTURE;
+const int TEXTURE0 = RenderingContextBase.TEXTURE0;
+const int TEXTURE1 = RenderingContextBase.TEXTURE1;
+const int TEXTURE10 = RenderingContextBase.TEXTURE10;
+const int TEXTURE11 = RenderingContextBase.TEXTURE11;
+const int TEXTURE12 = RenderingContextBase.TEXTURE12;
+const int TEXTURE13 = RenderingContextBase.TEXTURE13;
+const int TEXTURE14 = RenderingContextBase.TEXTURE14;
+const int TEXTURE15 = RenderingContextBase.TEXTURE15;
+const int TEXTURE16 = RenderingContextBase.TEXTURE16;
+const int TEXTURE17 = RenderingContextBase.TEXTURE17;
+const int TEXTURE18 = RenderingContextBase.TEXTURE18;
+const int TEXTURE19 = RenderingContextBase.TEXTURE19;
+const int TEXTURE2 = RenderingContextBase.TEXTURE2;
+const int TEXTURE20 = RenderingContextBase.TEXTURE20;
+const int TEXTURE21 = RenderingContextBase.TEXTURE21;
+const int TEXTURE22 = RenderingContextBase.TEXTURE22;
+const int TEXTURE23 = RenderingContextBase.TEXTURE23;
+const int TEXTURE24 = RenderingContextBase.TEXTURE24;
+const int TEXTURE25 = RenderingContextBase.TEXTURE25;
+const int TEXTURE26 = RenderingContextBase.TEXTURE26;
+const int TEXTURE27 = RenderingContextBase.TEXTURE27;
+const int TEXTURE28 = RenderingContextBase.TEXTURE28;
+const int TEXTURE29 = RenderingContextBase.TEXTURE29;
+const int TEXTURE3 = RenderingContextBase.TEXTURE3;
+const int TEXTURE30 = RenderingContextBase.TEXTURE30;
+const int TEXTURE31 = RenderingContextBase.TEXTURE31;
+const int TEXTURE4 = RenderingContextBase.TEXTURE4;
+const int TEXTURE5 = RenderingContextBase.TEXTURE5;
+const int TEXTURE6 = RenderingContextBase.TEXTURE6;
+const int TEXTURE7 = RenderingContextBase.TEXTURE7;
+const int TEXTURE8 = RenderingContextBase.TEXTURE8;
+const int TEXTURE9 = RenderingContextBase.TEXTURE9;
+const int TEXTURE_2D = RenderingContextBase.TEXTURE_2D;
+const int TEXTURE_BINDING_2D = RenderingContextBase.TEXTURE_BINDING_2D;
+const int TEXTURE_BINDING_CUBE_MAP = RenderingContextBase.TEXTURE_BINDING_CUBE_MAP;
+const int TEXTURE_CUBE_MAP = RenderingContextBase.TEXTURE_CUBE_MAP;
+const int TEXTURE_CUBE_MAP_NEGATIVE_X = RenderingContextBase.TEXTURE_CUBE_MAP_NEGATIVE_X;
+const int TEXTURE_CUBE_MAP_NEGATIVE_Y = RenderingContextBase.TEXTURE_CUBE_MAP_NEGATIVE_Y;
+const int TEXTURE_CUBE_MAP_NEGATIVE_Z = RenderingContextBase.TEXTURE_CUBE_MAP_NEGATIVE_Z;
+const int TEXTURE_CUBE_MAP_POSITIVE_X = RenderingContextBase.TEXTURE_CUBE_MAP_POSITIVE_X;
+const int TEXTURE_CUBE_MAP_POSITIVE_Y = RenderingContextBase.TEXTURE_CUBE_MAP_POSITIVE_Y;
+const int TEXTURE_CUBE_MAP_POSITIVE_Z = RenderingContextBase.TEXTURE_CUBE_MAP_POSITIVE_Z;
+const int TEXTURE_MAG_FILTER = RenderingContextBase.TEXTURE_MAG_FILTER;
+const int TEXTURE_MIN_FILTER = RenderingContextBase.TEXTURE_MIN_FILTER;
+const int TEXTURE_WRAP_S = RenderingContextBase.TEXTURE_WRAP_S;
+const int TEXTURE_WRAP_T = RenderingContextBase.TEXTURE_WRAP_T;
+const int TRIANGLES = RenderingContextBase.TRIANGLES;
+const int TRIANGLE_FAN = RenderingContextBase.TRIANGLE_FAN;
+const int TRIANGLE_STRIP = RenderingContextBase.TRIANGLE_STRIP;
+const int UNPACK_ALIGNMENT = RenderingContextBase.UNPACK_ALIGNMENT;
+const int UNPACK_COLORSPACE_CONVERSION_WEBGL = RenderingContextBase.UNPACK_COLORSPACE_CONVERSION_WEBGL;
+const int UNPACK_FLIP_Y_WEBGL = RenderingContextBase.UNPACK_FLIP_Y_WEBGL;
+const int UNPACK_PREMULTIPLY_ALPHA_WEBGL = RenderingContextBase.UNPACK_PREMULTIPLY_ALPHA_WEBGL;
+const int UNSIGNED_BYTE = RenderingContextBase.UNSIGNED_BYTE;
+const int UNSIGNED_INT = RenderingContextBase.UNSIGNED_INT;
+const int UNSIGNED_SHORT = RenderingContextBase.UNSIGNED_SHORT;
+const int UNSIGNED_SHORT_4_4_4_4 = RenderingContextBase.UNSIGNED_SHORT_4_4_4_4;
+const int UNSIGNED_SHORT_5_5_5_1 = RenderingContextBase.UNSIGNED_SHORT_5_5_5_1;
+const int UNSIGNED_SHORT_5_6_5 = RenderingContextBase.UNSIGNED_SHORT_5_6_5;
+const int VALIDATE_STATUS = RenderingContextBase.VALIDATE_STATUS;
+const int VENDOR = RenderingContextBase.VENDOR;
+const int VERSION = RenderingContextBase.VERSION;
+const int VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = RenderingContextBase.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING;
+const int VERTEX_ATTRIB_ARRAY_ENABLED = RenderingContextBase.VERTEX_ATTRIB_ARRAY_ENABLED;
+const int VERTEX_ATTRIB_ARRAY_NORMALIZED = RenderingContextBase.VERTEX_ATTRIB_ARRAY_NORMALIZED;
+const int VERTEX_ATTRIB_ARRAY_POINTER = RenderingContextBase.VERTEX_ATTRIB_ARRAY_POINTER;
+const int VERTEX_ATTRIB_ARRAY_SIZE = RenderingContextBase.VERTEX_ATTRIB_ARRAY_SIZE;
+const int VERTEX_ATTRIB_ARRAY_STRIDE = RenderingContextBase.VERTEX_ATTRIB_ARRAY_STRIDE;
+const int VERTEX_ATTRIB_ARRAY_TYPE = RenderingContextBase.VERTEX_ATTRIB_ARRAY_TYPE;
+const int VERTEX_SHADER = RenderingContextBase.VERTEX_SHADER;
+const int VIEWPORT = RenderingContextBase.VIEWPORT;
+const int ZERO = RenderingContextBase.ZERO;
diff --git a/tools/dom/src/blink_native_DOMImplementation.dart b/tools/dom/src/blink_native_DOMImplementation.dart
index 3c0031c..7d3e6e5 100644
--- a/tools/dom/src/blink_native_DOMImplementation.dart
+++ b/tools/dom/src/blink_native_DOMImplementation.dart
@@ -35,18 +35,18 @@
 
   static get_top(_DOMWindowCrossFrame) native "Window_top_Getter";
 
-  static close(_DOMWindowCrossFrame) native "Window_close_Callback_RESOLVER_STRING_0_";
+  static close(_DOMWindowCrossFrame) native "Window_close_Callback";
 
   static postMessage(_DOMWindowCrossFrame, message, targetOrigin, [messagePorts]) native "Window_postMessage_Callback";
 }
 
 class Blink_HistoryCrossFrame {
   // _HistoryCrossFrame native entry points
-  static back(_HistoryCrossFrame) native "History_back_Callback_RESOLVER_STRING_0_";
+  static back(_HistoryCrossFrame) native "History_back_Callback";
 
-  static forward(_HistoryCrossFrame) native "History_forward_Callback_RESOLVER_STRING_0_";
+  static forward(_HistoryCrossFrame) native "History_forward_Callback";
 
-  static go(_HistoryCrossFrame, distance) native "History_go_Callback_RESOLVER_STRING_1_long";
+  static go(_HistoryCrossFrame, distance) native "History_go_Callback_long";
 }
 
 class Blink_LocationCrossFrame {
diff --git a/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate b/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
index a32d903..f1a123a8 100644
--- a/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
@@ -62,7 +62,7 @@
 $if DARTIUM
 
   bool _hasProperty(String propertyName) =>
-      _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback(this, propertyName);
+      _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_DOMString(this, propertyName);
 $endif
 
   @DomName('CSSStyleDeclaration.setProperty')
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index b0deead..622af6d 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -1389,59 +1389,59 @@
 $else
   @DomName('Element.offsetHeight')
   @DocsEditable()
-  int get offsetHeight => _blink.BlinkElement.$offsetHeight_Getter(this).round();
+  int get offsetHeight => _blink.BlinkElement.offsetHeight_Getter(this).round();
 
   @DomName('Element.offsetLeft')
   @DocsEditable()
-  int get offsetLeft => _blink.BlinkElement.$offsetLeft_Getter(this).round();
+  int get offsetLeft => _blink.BlinkElement.offsetLeft_Getter(this).round();
 
   @DomName('Element.offsetTop')
   @DocsEditable()
-  int get offsetTop => _blink.BlinkElement.$offsetTop_Getter(this).round();
+  int get offsetTop => _blink.BlinkElement.offsetTop_Getter(this).round();
 
   @DomName('Element.offsetWidth')
   @DocsEditable()
-  int get offsetWidth => _blink.BlinkElement.$offsetWidth_Getter(this).round();
+  int get offsetWidth => _blink.BlinkElement.offsetWidth_Getter(this).round();
 
   @DomName('Element.clientHeight')
   @DocsEditable()
-  int get clientHeight => _blink.BlinkElement.$clientHeight_Getter(this).round();
+  int get clientHeight => _blink.BlinkElement.clientHeight_Getter(this).round();
 
   @DomName('Element.clientLeft')
   @DocsEditable()
-  int get clientLeft => _blink.BlinkElement.$clientLeft_Getter(this).round();
+  int get clientLeft => _blink.BlinkElement.clientLeft_Getter(this).round();
 
   @DomName('Element.clientTop')
   @DocsEditable()
-  int get clientTop => _blink.BlinkElement.$clientTop_Getter(this).round();
+  int get clientTop => _blink.BlinkElement.clientTop_Getter(this).round();
 
   @DomName('Element.clientWidth')
   @DocsEditable()
-  int get clientWidth => _blink.BlinkElement.$clientWidth_Getter(this).round();
+  int get clientWidth => _blink.BlinkElement.clientWidth_Getter(this).round();
 
   @DomName('Element.scrollHeight')
   @DocsEditable()
-  int get scrollHeight => _blink.BlinkElement.$scrollHeight_Getter(this).round();
+  int get scrollHeight => _blink.BlinkElement.scrollHeight_Getter(this).round();
 
   @DomName('Element.scrollLeft')
   @DocsEditable()
-  int get scrollLeft => _blink.BlinkElement.$scrollLeft_Getter(this).round();
+  int get scrollLeft => _blink.BlinkElement.scrollLeft_Getter(this).round();
 
   @DomName('Element.scrollLeft')
   @DocsEditable()
-  void set scrollLeft(int value) => _blink.BlinkElement.$scrollLeft_Setter(this, value.round());
+  void set scrollLeft(int value) => _blink.BlinkElement.scrollLeft_Setter_long(this, value.round());
 
   @DomName('Element.scrollTop')
   @DocsEditable()
-  int get scrollTop => _blink.BlinkElement.$scrollTop_Getter(this).round();
+  int get scrollTop => _blink.BlinkElement.scrollTop_Getter(this).round();
 
   @DomName('Element.scrollTop')
   @DocsEditable()
-  void set scrollTop(int value) => _blink.BlinkElement.$scrollTop_Setter(this, value.round());
+  void set scrollTop(int value) => _blink.BlinkElement.scrollTop_Setter_long(this, value.round());
 
   @DomName('Element.scrollWidth')
   @DocsEditable()
-  int get scrollWidth => _blink.BlinkElement.$scrollWidth_Getter(this).round();
+  int get scrollWidth => _blink.BlinkElement.scrollWidth_Getter(this).round();
 $endif
 
 $!MEMBERS
diff --git a/tools/dom/templates/html/impl/impl_FileReader.darttemplate b/tools/dom/templates/html/impl/impl_FileReader.darttemplate
index 0a6ddc9..c7bc8ba 100644
--- a/tools/dom/templates/html/impl/impl_FileReader.darttemplate
+++ b/tools/dom/templates/html/impl/impl_FileReader.darttemplate
@@ -13,7 +13,7 @@
 $if DART2JS
     var res = JS('Null|String|NativeByteBuffer', '#.result', this);
 $else
-    var res = _blink.BlinkFileReader.$result_Getter(this);
+    var res = _blink.BlinkFileReader.result_Getter(this);
 $endif
     if (res is ByteBuffer) {
       return new Uint8List.view(res);
diff --git a/tools/dom/templates/html/impl/impl_Touch.darttemplate b/tools/dom/templates/html/impl/impl_Touch.darttemplate
index d7faec7..a75cd7d 100644
--- a/tools/dom/templates/html/impl/impl_Touch.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Touch.darttemplate
@@ -20,14 +20,14 @@
   int get __webkitRadiusX => JS('num', '#.webkitRadiusX', this).round();
   int get __webkitRadiusY => JS('num', '#.webkitRadiusY', this).round();
 $else
-  int get __clientX => _blink.BlinkTouch.$clientX_Getter(this).round();
-  int get __clientY => _blink.BlinkTouch.$clientY_Getter(this).round();
-  int get __screenX => _blink.BlinkTouch.$screenX_Getter(this).round();
-  int get __screenY => _blink.BlinkTouch.$screenY_Getter(this).round();
-  int get __pageX => _blink.BlinkTouch.$pageX_Getter(this).round();
-  int get __pageY => _blink.BlinkTouch.$pageY_Getter(this).round();
-  int get __webkitRadiusX => _blink.BlinkTouch.$webkitRadiusX_Getter(this).round();
-  int get __webkitRadiusY => _blink.BlinkTouch.$webkitRadiusY_Getter(this).round();
+  int get __clientX => _blink.BlinkTouch.clientX_Getter(this).round();
+  int get __clientY => _blink.BlinkTouch.clientY_Getter(this).round();
+  int get __screenX => _blink.BlinkTouch.screenX_Getter(this).round();
+  int get __screenY => _blink.BlinkTouch.screenY_Getter(this).round();
+  int get __pageX => _blink.BlinkTouch.pageX_Getter(this).round();
+  int get __pageY => _blink.BlinkTouch.pageY_Getter(this).round();
+  int get __webkitRadiusX => _blink.BlinkTouch.webkitRadiusX_Getter(this).round();
+  int get __webkitRadiusY => _blink.BlinkTouch.webkitRadiusY_Getter(this).round();
 $endif
 
   @DomName('Touch.clientX')
diff --git a/tools/gyp/configurations.gypi b/tools/gyp/configurations.gypi
index 45a5850..6588db3 100644
--- a/tools/gyp/configurations.gypi
+++ b/tools/gyp/configurations.gypi
@@ -359,6 +359,24 @@
         ],
       },
 
+      'DebugAndroidARM64': {
+        'inherit_from': [
+          'Dart_Base', 'Dart_arm64_Base', 'Dart_Debug',
+          'Dart_Android_Base',
+          'Dart_Android_arm64_Base',
+          'Dart_Android_Debug',
+        ],
+      },
+
+      'ReleaseAndroidARM64': {
+        'inherit_from': [
+          'Dart_Base', 'Dart_arm64_Base', 'Dart_Release',
+          'Dart_Android_Base',
+          'Dart_Android_arm64_Base',
+          'Dart_Android_Release',
+        ],
+      },
+
       # These targets assume that target_arch is passed in explicitly
       # by the containing project (e.g., chromium).
       'Debug': {
diff --git a/tools/gyp/configurations_android.gypi b/tools/gyp/configurations_android.gypi
index cadd122..41205dd 100644
--- a/tools/gyp/configurations_android.gypi
+++ b/tools/gyp/configurations_android.gypi
@@ -44,10 +44,6 @@
               '-Wa,--noexecstack',
             ],
           }],
-          # Settings for building host targets using the system toolchain.
-          ['_toolset=="host"', {
-            'cflags': [ '-m32', '-pthread' ],
-          }],
         ],
       },
       'Dart_Android_Debug': {
@@ -147,6 +143,7 @@
             ],
           }],
           ['_toolset=="host"', {
+            'cflags': [ '-m32', '-pthread' ],
             'ldflags': [ '-m32', '-pthread' ],
           }],
         ],
@@ -202,10 +199,62 @@
             ],
           }],
           ['_toolset=="host"', {
+            'cflags': [ '-m32', '-pthread' ],
             'ldflags': [ '-m32', '-pthread' ],
           }],
         ],
-      },
+      },  # Dart_Android_arm_Base
+      'Dart_Android_arm64_Base': {
+        'abstract': 1,
+        'variables': {
+          'android_sysroot': '<(android_ndk_root)/platforms/android-L/arch-arm64',
+          'android_ndk_include': '<(android_sysroot)/usr/include',
+          'android_ndk_lib': '<(android_sysroot)/usr/lib',
+        },
+        'target_conditions': [
+          ['_toolset=="target"', {
+            'cflags': [
+              '-fPIE',
+              '--sysroot=<(android_sysroot)',
+              '-I<(android_ndk_include)',
+              '-I<(android_ndk_root)/sources/cxx-stl/stlport/stlport',
+            ],
+            'target_conditions': [
+              ['_type=="executable"', {
+                'ldflags!': ['-Wl,--exclude-libs=ALL,-shared',],
+              }],
+              ['_type=="shared_library"', {
+                'ldflags': ['-Wl,-shared,-Bsymbolic',],
+              }],
+            ],
+            'ldflags': [
+              'arm64', '>(_type)', 'target',
+              '-nostdlib',
+              '-Wl,--no-undefined',
+              # Don't export symbols from statically linked libraries.
+              '-Wl,--exclude-libs=ALL',
+              '-Wl,-rpath-link=<(android_ndk_lib)',
+              '-L<(android_ndk_lib)',
+              '-L<(android_ndk_root)/sources/cxx-stl/stlport/libs/arm64-v8a',
+              '-z',
+              'muldefs',
+              '-Bdynamic',
+              '-pie',
+              '-Wl,-dynamic-linker,/system/bin/linker64',
+              '-Wl,--gc-sections',
+              '-Wl,-z,nocopyreloc',
+              # crtbegin_dynamic.o should be the last item in ldflags.
+              '<(android_ndk_lib)/crtbegin_dynamic.o',
+            ],
+            'ldflags!': [
+              '-pthread',  # Not supported by Android toolchain.
+            ],
+          }],
+          ['_toolset=="host"', {
+            'ldflags': [ '-pthread' ],
+          }],
+        ],
+      },  # Dart_Android_arm64_Base
     },  # configurations
   },  # target_defaults
 }
diff --git a/tools/linux_dist_support/debian/control b/tools/linux_dist_support/debian/control
index e39f877..b484bd2 100644
--- a/tools/linux_dist_support/debian/control
+++ b/tools/linux_dist_support/debian/control
@@ -5,10 +5,8 @@
 Standards-Version: 3.9.2
 Build-Depends: debhelper (>= 9),
 	python,
-	openjdk-6-jdk
 
 Package: dart
 Architecture: amd64 i386 armhf armel
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Description: Dart SDK
-
diff --git a/tools/make_version.py b/tools/make_version.py
index 54ce675..80ac418 100644
--- a/tools/make_version.py
+++ b/tools/make_version.py
@@ -4,6 +4,8 @@
 #
 # This python script creates a version string in a C++ file.
 
+import hashlib
+import os
 import sys
 import time
 from optparse import OptionParser
@@ -13,12 +15,41 @@
   print >> sys.stderr, message
   sys.stderr.flush()
 
+# When these files change, snapshots created by the VM are potentially no longer
+# backwards-compatible.
+VM_SNAPSHOT_FILES=[
+  # Header files.
+  'datastream.h',
+  'object.h',
+  'raw_object.h',
+  'snapshot.h',
+  'snapshot_ids.h',
+  'symbols.h',
+  # Source files.
+  'dart.cc',
+  'dart_api_impl.cc',
+  'object.cc',
+  'raw_object.cc',
+  'raw_object_snapshot.cc',
+  'snapshot.cc',
+  'symbols.cc',
+]
+
 def makeVersionString():
   version_string = utils.GetVersion()
   debugLog("Returning version string: %s " % version_string)
   return version_string
 
 
+def makeSnapshotHashString():
+  vmhash = hashlib.md5()
+  for vmfilename in VM_SNAPSHOT_FILES:
+    vmfilepath = os.path.join(utils.DART_DIR, 'runtime', 'vm', vmfilename)
+    with open(vmfilepath) as vmfile:
+      vmhash.update(vmfile.read())
+  return vmhash.hexdigest()
+
+
 def makeFile(output_file, input_file):
   version_cc_text = open(input_file).read()
   version_string = makeVersionString()
@@ -27,6 +58,9 @@
   version_time = time.ctime(time.time())
   version_cc_text = version_cc_text.replace("{{BUILD_TIME}}",
                                             version_time)
+  snapshot_hash = makeSnapshotHashString()
+  version_cc_text = version_cc_text.replace("{{SNAPSHOT_HASH}}",
+                                            snapshot_hash)
   open(output_file, 'w').write(version_cc_text)
   return True
 
diff --git a/tools/status_clean.dart b/tools/status_clean.dart
index fb97590..14b0f79 100644
--- a/tools/status_clean.dart
+++ b/tools/status_clean.dart
@@ -36,7 +36,8 @@
      "tests/compiler/dart2js_native/dart2js_native.status"],
     ["dart2js", "tests/compiler/dart2js",
      "tests/compiler/dart2js/dart2js.status"],
-    ["pub", "sdk/lib/_internal/pub", "sdk/lib/_internal/pub/pub.status"],
+    ["pub", "sdk/lib/_internal/pub_generated",
+     "sdk/lib/_internal/pub/pub.status"],
     ["benchmark_smoke", "tests/benchmark_smoke",
      "tests/benchmark_smoke/benchmark_smoke.status"],
     ["co19", "tests/co19/src", "tests/co19/co19-analyzer2.status"],
diff --git a/tools/test.dart b/tools/test.dart
index 1ce84ca..f85717a 100755
--- a/tools/test.dart
+++ b/tools/test.dart
@@ -18,8 +18,12 @@
  * and passses along all command line arguments to this script.)
  *
  * The command line args of this script are documented in
- * "tools/testing/test_options.dart".
+ * "tools/testing/dart/test_options.dart"; they are printed
+ * when this script is run with "--help".
  *
+ * The default test directory layout is documented in
+ * "tools/testing/dart/test_suite.dart", above
+ * "factory StandardTestSuite.forDirectory".
  */
 
 library test;
@@ -66,7 +70,6 @@
     new Path('tests/utils'),
     new Path('utils/tests/css'),
     new Path('utils/tests/peg'),
-    new Path('sdk/lib/_internal/pub'),
 ];
 
 void testConfigurations(List<Map> configurations) {
@@ -129,10 +132,13 @@
   List<Future> serverFutures = [];
   var testSuites = new List<TestSuite>();
   var maxBrowserProcesses = maxProcesses;
-  // If the server ports are fixed, then we can only have one configuration.
-  assert(((configurations[0]['test_server_port'] == 0) &&
-          (configurations[0]['test_server_cross_origin_port'] == 0)) ||
-         (configurations.length == 1));
+  if (configurations.length > 1 &&
+      (configurations[0]['test_server_port'] != 0 ||
+       configurations[0]['test_server_cross_origin_port'] != 0)) {
+    print("If the http server ports are specified, only one configuration"
+          " may be run at a time");
+    exit(1);
+  }
   for (var conf in configurations) {
     Map<String, RegExp> selectors = conf['selectors'];
     var useContentSecurityPolicy = conf['csp'];
@@ -143,7 +149,9 @@
       // getCrossOriginPortNumber().
       var servers = new TestingServers(new Path(TestUtils.buildDir(conf)),
                                        useContentSecurityPolicy,
-                                       conf['runtime']);
+                                       conf['runtime'],
+                                       null,
+                                       conf['package_root']);
       serverFutures.add(servers.startServers(conf['local_ip'],
           port: conf['test_server_port'],
           crossOriginPort: conf['test_server_cross_origin_port']));
@@ -178,12 +186,6 @@
     // If we specifically pass in a suite only run that.
     if (conf['suite_dir'] != null) {
       var suite_path = new Path(conf['suite_dir']);
-
-      // Add a selector if we did not specify a specific one
-      if (conf['default_selector'] != null) {
-        var regexp = new RegExp('.?');
-        conf['selectors'][suite_path.filename] = regexp;
-      }
       testSuites.add(
           new StandardTestSuite.forDirectory(conf, suite_path));
     } else {
@@ -216,6 +218,11 @@
           }
           testSuites.add(
               new PkgBuildTestSuite(conf, 'pkgbuild', 'pkg/pkgbuild.status'));
+        } else if (key == 'pub') {
+          // TODO(rnystrom): Move pub back into TEST_SUITE_DIRECTORIES once
+          // #104 is fixed.
+          testSuites.add(new StandardTestSuite.forDirectory(conf,
+              new Path('sdk/lib/_internal/pub_generated'), 'pub'));
         }
       }
 
diff --git a/tools/testing/dart/browser_controller.dart b/tools/testing/dart/browser_controller.dart
index d76e4379..d5bd5ef 100644
--- a/tools/testing/dart/browser_controller.dart
+++ b/tools/testing/dart/browser_controller.dart
@@ -9,6 +9,7 @@
 import "dart:io";
 
 import 'android.dart';
+import 'http_server.dart';
 import 'utils.dart';
 
 class BrowserOutput {
@@ -810,12 +811,12 @@
   static const Duration NEXT_TEST_TIMEOUT = const Duration(seconds: 60);
   static const Duration RESTART_BROWSER_INTERVAL = const Duration(seconds: 60);
 
-  final Map globalConfiguration;
-  final bool checkedMode; // needed for dartium
+  final Map configuration;
 
-  String localIp;
+  final String localIp;
   String browserName;
-  int maxNumBrowsers;
+  final int maxNumBrowsers;
+  bool checkedMode;
   // Used to send back logs from the browser (start, stop etc)
   Function logger;
   int browserIdCount = 0;
@@ -841,12 +842,13 @@
    * case we wish to have a testing server with different behavior (such as the
    * case for performance testing.
    */
-  BrowserTestRunner(this.globalConfiguration,
+  BrowserTestRunner(this.configuration,
                     this.localIp,
                     this.browserName,
                     this.maxNumBrowsers,
-                    {bool this.checkedMode: false,
-                    BrowserTestingServer this.testingServer});
+                    {BrowserTestingServer this.testingServer}) {
+    checkedMode = configuration['checked'];
+  }
 
   Future<bool> start() {
     // If [browserName] doesn't support opening new windows, we use new iframes
@@ -855,7 +857,7 @@
         !Browser.BROWSERS_WITH_WINDOW_SUPPORT.contains(browserName);
     if (testingServer == null) {
       testingServer = new BrowserTestingServer(
-          globalConfiguration, localIp, useIframe);
+          configuration, localIp, useIframe);
     }
     return testingServer.start().then((_) {
       testingServer.testDoneCallBack = handleResults;
@@ -894,12 +896,12 @@
           device,
           contentShellOnAndroidConfig,
           checkedMode,
-          globalConfiguration['drt']),
+          configuration['drt']),
       'DartiumOnAndroid' : (AdbDevice device) => new AndroidBrowser(
           device,
           dartiumOnAndroidConfig,
           checkedMode,
-          globalConfiguration['dartium']),
+          configuration['dartium']),
     };
     if (androidBrowserCreationMapping.containsKey(browserName)) {
       AdbHelper.listDevices().then((deviceIds) {
@@ -1053,12 +1055,12 @@
       browser = new AndroidBrowser(adbDeviceMapping[id],
                                    contentShellOnAndroidConfig,
                                    checkedMode,
-                                   globalConfiguration['drt']);
+                                   configuration['drt']);
     } else if (browserName == 'DartiumOnAndroid') {
       browser = new AndroidBrowser(adbDeviceMapping[id],
                                    dartiumOnAndroidConfig,
                                    checkedMode,
-                                   globalConfiguration['dartium']);
+                                   configuration['dartium']);
     } else {
       browserStatus.remove(id);
       browser = getInstance();
@@ -1211,7 +1213,6 @@
       }
     }
     return Future.wait(futures).then((values) {
-      testingServer.httpServer.close();
       testingServer.errorReportingServer.close();
       printDoubleReportingTests();
       return !values.contains(false);
@@ -1220,7 +1221,7 @@
 
   Browser getInstance() {
     if (browserName == 'ff') browserName = 'firefox';
-    var path = Locations.getBrowserLocation(browserName, globalConfiguration);
+    var path = Locations.getBrowserLocation(browserName, configuration);
     var browser = new Browser.byName(browserName, path, checkedMode);
     browser.logger = logger;
     return browser;
@@ -1228,7 +1229,7 @@
 }
 
 class BrowserTestingServer {
-  final Map globalConfiguration;
+  final Map configuration;
   /// Interface of the testing server:
   ///
   /// GET /driver/BROWSER_ID -- This will get the driver page to fetch
@@ -1252,7 +1253,6 @@
   static const String terminateSignal = "TERMINATE";
 
   var testCount = 0;
-  var httpServer;
   var errorReportingServer;
   bool underTermination = false;
   bool useIframe = false;
@@ -1262,74 +1262,13 @@
   Function testStartedCallBack;
   Function nextTestCallBack;
 
-  BrowserTestingServer(this.globalConfiguration, this.localIp, this.useIframe);
+  BrowserTestingServer(this.configuration, this.localIp, this.useIframe);
 
   Future start() {
-    var test_driver_port = globalConfiguration['test_driver_port'];
-    var test_driver_error_port = globalConfiguration['test_driver_error_port'];
-    return HttpServer.bind(localIp, test_driver_port)
-      .then(setupDriverServer)
-      .then((_) => HttpServer.bind(localIp, test_driver_error_port))
-      .then(setupErrorServer);
-  }
-
-  void setupDriverServer(HttpServer server) {
-    httpServer = server;
-    void handler(HttpRequest request) {
-      // Don't allow caching of resources from the browser controller, i.e.,
-      // we don't want the browser to cache the result of getNextTest.
-      request.response.headers.set("Cache-Control",
-                                   "no-cache, no-store, must-revalidate");
-      bool isReport = request.uri.path.startsWith(reportPath);
-      bool isStatusUpdate = request.uri.path.startsWith(statusUpdatePath);
-      if (isReport || isStatusUpdate) {
-        var browserId;
-        if (isStatusUpdate) {
-          browserId = request.uri.path.substring(statusUpdatePath.length + 1);
-        } else {
-          browserId = request.uri.path.substring(reportPath.length + 1);
-        }
-        var testId =
-            int.parse(request.uri.queryParameters["id"].split("=")[1]);
-        handleReport(
-            request, browserId, testId, isStatusUpdate: isStatusUpdate);
-        // handleReport will asynchroniously fetch the data and will handle
-        // the closing of the streams.
-        return;
-      }
-      if (request.uri.path.startsWith(startedPath)) {
-        var browserId = request.uri.path.substring(startedPath.length + 1);
-        var testId =
-            int.parse(request.uri.queryParameters["id"].split("=")[1]);
-        handleStarted(request, browserId, testId);
-        return;
-      }
-      var textResponse = "";
-      if (request.uri.path.startsWith(driverPath)) {
-        var browserId = request.uri.path.substring(driverPath.length + 1);
-        textResponse = getDriverPage(browserId);
-        request.response.headers.set('Content-Type', 'text/html');
-      } else if (request.uri.path.startsWith(nextTestPath)) {
-        var browserId = request.uri.path.substring(nextTestPath.length + 1);
-        textResponse = getNextTest(browserId);
-        request.response.headers.set('Content-Type', 'text/plain');
-      } else {
-        // /favicon.ico requests
-      }
-      request.response.write(textResponse);
-      request.listen((_) {}, onDone: request.response.close);
-      request.response.done.catchError((error) {
-          if (!underTermination) {
-            print("URI ${request.uri}");
-            print("Textresponse $textResponse");
-            throw "Error returning content to browser: $error";
-          }
-        });
-    }
-    void errorHandler(e) {
-      if (!underTermination) print("Error occured in httpserver: $e");
-    }
-    httpServer.listen(handler, onError: errorHandler);
+    var test_driver_error_port = configuration['test_driver_error_port'];
+    return HttpServer.bind(localIp, test_driver_error_port)
+      .then(setupErrorServer)
+      .then(setupDispatchingServer);
   }
 
   void setupErrorServer(HttpServer server) {
@@ -1356,6 +1295,59 @@
     errorReportingServer.listen(errorReportingHandler, onError: errorHandler);
   }
 
+  void setupDispatchingServer(_) {
+    DispatchingServer server = configuration['_servers_'].server;
+    void noCache(request) {
+        request.response.headers.set("Cache-Control",
+                                     "no-cache, no-store, must-revalidate");
+    }
+    int testId(request) =>
+        int.parse(request.uri.queryParameters["id"].split("=")[1]);
+    String browserId(request, prefix) =>
+        request.uri.path.substring(prefix.length + 1);
+
+
+    server.addHandler(reportPath, (HttpRequest request) {
+      noCache(request);
+      handleReport(request, browserId(request, reportPath),
+                   testId(request), isStatusUpdate: false);
+    });
+    server.addHandler(statusUpdatePath, (HttpRequest request) {
+      noCache(request);
+      handleReport(request, browserId(request, statusUpdatePath),
+                   testId(request), isStatusUpdate: true);
+    });
+    server.addHandler(startedPath, (HttpRequest request) {
+      noCache(request);
+      handleStarted(request, browserId(request, startedPath),
+                   testId(request));
+    });
+
+    makeSendPageHandler(String prefix) => (HttpRequest request) {
+      noCache(request);
+      var textResponse = "";
+      if (prefix == driverPath) {
+        textResponse = getDriverPage(browserId(request, prefix));
+        request.response.headers.set('Content-Type', 'text/html');
+      }
+      if (prefix == nextTestPath) {
+        textResponse = getNextTest(browserId(request, prefix));
+        request.response.headers.set('Content-Type', 'text/plain');
+      }
+      request.response.write(textResponse);
+      request.listen((_) {}, onDone: request.response.close);
+      request.response.done.catchError((error) {
+        if (!underTermination) {
+          print("URI ${request.uri}");
+          print("Textresponse $textResponse");
+          throw "Error returning content to browser: $error";
+        }
+      });
+    };
+    server.addHandler(driverPath, makeSendPageHandler(driverPath));
+    server.addHandler(nextTestPath, makeSendPageHandler(nextTestPath));
+  }
+
   void handleReport(HttpRequest request, String browserId, var testId,
                     {bool isStatusUpdate}) {
     StringBuffer buffer = new StringBuffer();
@@ -1402,13 +1394,14 @@
   }
 
   String getDriverUrl(String browserId) {
-    if (httpServer == null) {
+    if (errorReportingServer == null) {
       print("Bad browser testing server, you are not started yet. Can't "
             "produce driver url");
       exit(1);
       // This should never happen - exit immediately;
     }
-    return "http://$localIp:${httpServer.port}/driver/$browserId";
+    var port = configuration['_servers_'].port;
+    return "http://$localIp:$port/driver/$browserId";
   }
 
 
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index 3407c67..20ab1c7 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -275,7 +275,7 @@
     Uri sdk = useSdk ?
         nativeDirectoryToUri(buildDir).resolve('dart-sdk/') :
         nativeDirectoryToUri(TestUtils.dartDir.toNativePath()).resolve('sdk/');
-    Uri preambleDir = sdk.resolve('lib/_internal/lib/preambles/');
+    Uri preambleDir = sdk.resolve('lib/_internal/compiler/js_lib/preambles/');
     return runtimeConfiguration.dart2jsPreambles(preambleDir)
         ..add(artifact.filename);
   }
diff --git a/tools/testing/dart/http_server.dart b/tools/testing/dart/http_server.dart
index 36ddb25..8469caf 100644
--- a/tools/testing/dart/http_server.dart
+++ b/tools/testing/dart/http_server.dart
@@ -17,6 +17,35 @@
 import 'vendored_pkg/args/args.dart';
 import 'utils.dart';
 
+class DispatchingServer {
+  HttpServer server;
+  Map<String, Function> _handlers = new Map<String, Function>();
+  Function _notFound;
+
+  DispatchingServer(this.server,
+                    void onError(e),
+                    void this._notFound(HttpRequest request)) {
+    server.listen(_dispatchRequest, onError: onError);
+  }
+
+  void addHandler(String prefix, void handler(HttpRequest request)) {
+    _handlers[prefix] = handler;
+  }
+
+  void _dispatchRequest(HttpRequest request) {
+    // If the request path matches a prefix in _handlers, send it to that
+    // handler.  Otherwise, run the notFound handler.
+    for (String prefix in _handlers.keys) {
+      if (request.uri.path.startsWith(prefix)) {
+        _handlers[prefix](request);
+        return;
+      }
+    }
+    _notFound(request);
+  }
+}
+
+
 
 /// Interface of the HTTP server:
 ///
@@ -27,7 +56,8 @@
 /// /root_build/X: This will serve the corresponding file from the build
 ///                directory (i.e. '$BuildDirectory/X').
 /// /FOO/packages/BAR: This will serve the corresponding file from the packages
-///                    directory (i.e. '$BuildDirectory/packages/BAR')
+///                    directory (i.e. '$BuildDirectory/packages/BAR') or the 
+///                    passed-in package root
 /// /ws: This will upgrade the connection to a WebSocket connection and echo
 ///      all data back to the client.
 ///
@@ -55,6 +85,7 @@
   parser.addFlag('help', abbr: 'h', negatable: false,
       help: 'Print this usage information.');
   parser.addOption('build-directory', help: 'The build directory to use.');
+  parser.addOption('package-root', help: 'The package root to use.');
   parser.addOption('network', help: 'The network interface to use.',
       defaultsTo: '0.0.0.0');
   parser.addFlag('csp', help: 'Use Content Security Policy restrictions.',
@@ -68,7 +99,9 @@
   } else {
     var servers = new TestingServers(new Path(args['build-directory']),
                                      args['csp'],
-                                     args['runtime']);
+                                     args['runtime'],
+                                     null,
+                                     args['package-root']);
     var port = int.parse(args['port']);
     var crossOriginPort = int.parse(args['crossOriginPort']);
     servers.startServers(args['network'],
@@ -107,19 +140,26 @@
   List _serverList = [];
   Path _buildDirectory = null;
   Path _dartDirectory = null;
+  Path _packageRoot;
   final bool useContentSecurityPolicy;
   final String runtime;
+  DispatchingServer _server;
 
   TestingServers(Path buildDirectory,
                  this.useContentSecurityPolicy,
-                 [String this.runtime = 'none', String dartDirectory]) {
+                 [String this.runtime = 'none', String dartDirectory,
+                  String packageRoot]) {
     _buildDirectory = TestUtils.absolutePath(buildDirectory);
     _dartDirectory = dartDirectory == null ? TestUtils.dartDir
         : new Path(dartDirectory);
+    _packageRoot = packageRoot == null ? 
+      _buildDirectory.append('packages') :
+      new Path(packageRoot);
   }
 
   int get port => _serverList[0].port;
   int get crossOriginPort => _serverList[1].port;
+  DispatchingServer get server => _server;
 
   /**
    * [startServers] will start two Http servers.
@@ -131,6 +171,7 @@
    */
   Future startServers(String host, {int port: 0, int crossOriginPort: 0}) {
     return _startHttpServer(host, port: port).then((server) {
+      _server = server;
       return _startHttpServer(host,
                               port: crossOriginPort,
                               allowedPort:_serverList[0].port);
@@ -144,7 +185,8 @@
     var buildDirectory = _buildDirectory.toNativePath();
     var csp = useContentSecurityPolicy ? '--csp ' : '';
     return '$dart $script -p $port -c $crossOriginPort $csp'
-           '--build-directory=$buildDirectory --runtime=$runtime';
+           '--build-directory=$buildDirectory --runtime=$runtime '
+           '--package-root=$_packageRoot';
   }
 
   void stopServers() {
@@ -153,29 +195,30 @@
     }
   }
 
+  void _onError(e) {
+    DebugLogger.error('HttpServer: an error occured', e);
+  }
+
   Future _startHttpServer(String host, {int port: 0, int allowedPort: -1}) {
     return HttpServer.bind(host, port).then((HttpServer httpServer) {
-      httpServer.listen((HttpRequest request) {
-        if (request.uri.path == "/echo") {
-          _handleEchoRequest(request, request.response);
-        } else if (request.uri.path == '/ws') {
-          _handleWebSocketRequest(request);
-        } else {
-          _handleFileOrDirectoryRequest(
-              request, request.response, allowedPort);
-        }
-      },
-      onError: (e) {
-        DebugLogger.error('HttpServer: an error occured', e);
-      });
+      var server = new DispatchingServer(httpServer, _onError, _sendNotFound);
+      server.addHandler('/echo', _handleEchoRequest);
+      server.addHandler('/ws', _handleWebSocketRequest);
+      fileHandler(request) {
+        _handleFileOrDirectoryRequest(request, allowedPort);
+      }
+      server.addHandler('/$PREFIX_BUILDDIR', fileHandler);
+      server.addHandler('/$PREFIX_DARTDIR', fileHandler);
+      server.addHandler('/packages', fileHandler);
       _serverList.add(httpServer);
+      return server;
     });
   }
 
   void _handleFileOrDirectoryRequest(HttpRequest request,
-                                     HttpResponse response,
                                      int allowedPort) {
     // Enable browsers to cache file/directory responses.
+    var response = request.response;
     response.headers.set("Cache-Control",
                          "max-age=$_CACHE_EXPIRATION_IN_SECONDS");
     var path = _getFilePathFromRequestPath(request.uri.path);
@@ -192,7 +235,7 @@
                 _sendDirectoryListing(entries, request, response);
               });
             } else {
-              _sendNotFound(request, response);
+              _sendNotFound(request);
             }
           });
         }
@@ -204,14 +247,14 @@
                        new _Entry('echo', 'echo')];
         _sendDirectoryListing(entries, request, response);
       } else {
-        _sendNotFound(request, response);
+        _sendNotFound(request);
       }
     }
   }
 
-  void _handleEchoRequest(HttpRequest request, HttpResponse response) {
-    response.headers.set("Access-Control-Allow-Origin", "*");
-    request.pipe(response).catchError((e) {
+  void _handleEchoRequest(HttpRequest request) {
+    request.response.headers.set("Access-Control-Allow-Origin", "*");
+    request.pipe(request.response).catchError((e) {
       DebugLogger.warning(
           'HttpServer: error while closing the response stream', e);
     });
@@ -250,11 +293,10 @@
         relativePath = new Path(
             pathSegments.skip(1).join('/'));
       }
-      var packagesDirName = 'packages';
-      var packagesIndex = pathSegments.indexOf(packagesDirName);
+      var packagesIndex = pathSegments.indexOf('packages');
       if (packagesIndex != -1) {
         var start = packagesIndex + 1;
-        basePath = _buildDirectory.append(packagesDirName);
+        basePath = _packageRoot;
         relativePath = new Path(pathSegments.skip(start).join('/'));
       }
       if (basePath != null && relativePath != null) {
@@ -373,7 +415,7 @@
     });
   }
 
-  void _sendNotFound(HttpRequest request, HttpResponse response) {
+  void _sendNotFound(HttpRequest request) {
     bool isHarmlessPath(String path) {
       return _HARMLESS_REQUEST_PATH_ENDINGS.any((ending) {
         return path.endsWith(ending);
@@ -383,6 +425,7 @@
       DebugLogger.warning('HttpServer: could not find file for request path: '
                           '"${request.uri.path}"');
     }
+    var response = request.response;
     response.statusCode = HttpStatus.NOT_FOUND;
 
     // Send a nice HTML page detailing the error message.  Most browsers expect
diff --git a/tools/testing/dart/test_options.dart b/tools/testing/dart/test_options.dart
index 39145ff..c00e124 100644
--- a/tools/testing/dart/test_options.dart
+++ b/tools/testing/dart/test_options.dart
@@ -7,6 +7,7 @@
 import "dart:io";
 import "drt_updater.dart";
 import "test_suite.dart";
+import "utils.dart";
 import "compiler_configuration.dart" show CompilerConfiguration;
 import "runtime_configuration.dart" show RuntimeConfiguration;
 
@@ -432,6 +433,12 @@
               [],
               null),
           new _TestOptionSpecification(
+              'package_root',
+              'The package root to use for testing.',
+              ['--package-root'],
+              [],
+              null),
+          new _TestOptionSpecification(
               'exclude_suite',
               'Exclude suites from default selector, only works when no'
               ' selector has been specified on the command line',
@@ -715,8 +722,13 @@
     var selectors = configuration['selectors'];
     if (selectors is !Map) {
       if (selectors == null) {
-        configuration['default_selector'] = true;
-        selectors = new List.from(defaultTestSelectors);
+        if (configuration['suite_dir'] != null) {
+          var suite_path = new Path(configuration['suite_dir']);
+          selectors = [suite_path.filename];
+        } else {
+          selectors = new List.from(defaultTestSelectors);
+        }
+
         var exclude_suites = configuration['exclude_suite'] != null ?
               configuration['exclude_suite'].split(',') : [];
         for (var exclude in exclude_suites) {
@@ -817,7 +829,13 @@
    * Print out usage information.
    */
   void _printHelp() {
-    print('usage: dart test.dart [options]\n');
+    print('usage: dart test.dart [options] [selector]');
+    print('');
+    print('The optional selector limits the tests that will be run.');
+    print('For example, the selector "language/issue", or equivalently');
+    print('"language/*issue*", limits to test files matching the regexp');
+    print('".*issue.*\\.dart" in the "tests/language" directory.');
+    print('');
     print('Options:\n');
     for (var option in _options) {
       print('${option.name}: ${option.description}.');
diff --git a/tools/testing/dart/test_runner.dart b/tools/testing/dart/test_runner.dart
index b0e4fb1..35d6613 100644
--- a/tools/testing/dart/test_runner.dart
+++ b/tools/testing/dart/test_runner.dart
@@ -293,18 +293,18 @@
 class BrowserTestCommand extends Command {
   final String browser;
   final String url;
-  final bool checkedMode; // needed for dartium
+  final Map configuration;
 
   BrowserTestCommand._(String _browser,
                        this.url,
-                       {bool this.checkedMode: false})
+                       this.configuration)
       : super._(_browser), browser = _browser;
 
   void _buildHashCode(HashCodeBuilder builder) {
     super._buildHashCode(builder);
     builder.add(browser);
     builder.add(url);
-    builder.add(checkedMode);
+    builder.add(configuration);
   }
 
   bool _equal(Command other) {
@@ -313,7 +313,7 @@
         super._equal(other) &&
         browser == other.browser &&
         url == other.url &&
-        checkedMode == other.checkedMode;
+        identical(configuration, other.configuration);
   }
 
   String get reproductionCommand {
@@ -598,9 +598,8 @@
 
   BrowserTestCommand getBrowserTestCommand(String browser,
                                            String url,
-                                           {bool checkedMode: false}) {
-    var command = new BrowserTestCommand._(
-        browser, url, checkedMode: checkedMode);
+                                           Map configuration) {
+    var command = new BrowserTestCommand._(browser, url, configuration);
     return _getUniqueCommand(command);
   }
 
@@ -2462,8 +2461,8 @@
 
   // For dartanalyzer batch processing we keep a list of batch processes.
   final _batchProcesses = new Map<String, List<BatchRunnerProcess>>();
-  // We keep a BrowserTestRunner for every "browserName-checked" configuration.
-  final _browserTestRunners = new Map<String, BrowserTestRunner>();
+  // We keep a BrowserTestRunner for every configuration.
+  final _browserTestRunners = new Map<Map, BrowserTestRunner>();
 
   bool _finishing = false;
 
@@ -2555,7 +2554,7 @@
     BrowserTest browserTest = new BrowserTest(browserCommand.url,
                                               callback,
                                               timeout);
-    _getBrowserTestRunner(browserCommand.browser, browserCommand.checkedMode)
+    _getBrowserTestRunner(browserCommand.browser, browserCommand.configuration)
         .then((testRunner) {
       testRunner.queueTest(browserTest);
     });
@@ -2563,20 +2562,17 @@
     return completer.future;
   }
 
-  Future<BrowserTestRunner> _getBrowserTestRunner(
-      String browser, bool checkedMode) {
-    var browserCheckedString = "$browser-$checkedMode";
-
+  Future<BrowserTestRunner> _getBrowserTestRunner(String browser,
+                                                  Map configuration) {
     var localIp = globalConfiguration['local_ip'];
     var num_browsers = maxBrowserProcesses;
-    if (_browserTestRunners[browserCheckedString] == null) {
+    if (_browserTestRunners[configuration] == null) {
       var testRunner = new BrowserTestRunner(
-            globalConfiguration, localIp, browser, num_browsers,
-            checkedMode: checkedMode);
+            configuration, localIp, browser, num_browsers);
       if (globalConfiguration['verbose']) {
         testRunner.logger = DebugLogger.info;
       }
-      _browserTestRunners[browserCheckedString] = testRunner;
+      _browserTestRunners[configuration] = testRunner;
       return testRunner.start().then((started) {
         if (started) {
           return testRunner;
@@ -2585,7 +2581,7 @@
         io.exit(1);
       });
     }
-    return new Future.value(_browserTestRunners[browserCheckedString]);
+    return new Future.value(_browserTestRunners[configuration]);
   }
 }
 
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index 8a82d12..d4100d5 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -635,12 +635,10 @@
    * instead of having to create a custom [StandardTestSuite] subclass. In
    * particular, if you add 'path/to/mytestsuite' to [TEST_SUITE_DIRECTORIES]
    * in test.dart, this will all be set up for you.
-   *
-   * The [StandardTestSuite] also optionally takes a list of servers that have
-   * been started up by the test harness, to be used by browser tests.
    */
-  factory StandardTestSuite.forDirectory(Map configuration, Path directory) {
-    final name = directory.filename;
+  factory StandardTestSuite.forDirectory(Map configuration, Path directory,
+      [String name]) {
+    if (name == null) name = directory.filename;
 
     var status_paths = ['$directory/$name.status',
                         '$directory/.status',
@@ -887,6 +885,11 @@
           }
       }
     }
+    if (configuration['package_root'] != null) {
+      packageRoot = new Path(configuration['package_root']);
+      optionsFromFile['packageRoot'] = packageRoot.toNativePath();
+    }
+
     String testName = buildTestCaseDisplayName(suiteDir, info.originTestPath,
         multitestName: optionsFromFile['isMultitest'] ? info.multitestKey : "");
 
@@ -1285,7 +1288,7 @@
               dartFlags, environmentOverrides));
         } else {
           commandSet.add(CommandBuilder.instance.getBrowserTestCommand(
-              runtime, fullHtmlPath, checkedMode: configuration['checked']));
+              runtime, fullHtmlPath, configuration));
         }
 
         // Create BrowserTestCase and queue it.
@@ -1722,7 +1725,7 @@
     // NOTE: We exclude tests and patch files for now.
     return filename.endsWith(".dart") &&
         !filename.endsWith("_test.dart") &&
-        !filename.contains("_internal/lib");
+        !filename.contains("_internal/compiler/js_lib");
   }
 
   bool get listRecursively => true;
@@ -1962,7 +1965,7 @@
           if (result.exitCode != 0) {
             throw new Exception('Can\'t delete path $native_path. '
                                 'This path might be too long');
-          }  
+          }
         });
     } else {
       var dir = new Directory(path);
diff --git a/utils/pub/pub.gyp b/utils/pub/pub.gyp
index bf34ab9..15914da 100644
--- a/utils/pub/pub.gyp
+++ b/utils/pub/pub.gyp
@@ -29,13 +29,11 @@
             '<(SHARED_INTERMEDIATE_DIR)/pub.dart.snapshot',
           ],
           'action': [
-            'python',
-            '../../tools/create_pub_snapshot.py',
             '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)dart<(EXECUTABLE_SUFFIX)',
-            '../../sdk/lib/_internal/pub/bin/async_compile.dart',
-            '<(PRODUCT_DIR)/pub_packages/',
-            '<(SHARED_INTERMEDIATE_DIR)',
-          ],
+            '--package-root=<(PRODUCT_DIR)/pub_packages/',
+            '--snapshot=<(SHARED_INTERMEDIATE_DIR)/pub.dart.snapshot',
+            '../../sdk/lib/_internal/pub_generated/bin/pub.dart',
+          ]
         },
       ],
     },